Sei sulla pagina 1di 161

PROGRAMACAO AVANCADA

EM

»:z:

Aleph

HENRIGUE DE FIGUEREDO LUZ MILTON MALDONADO JR_

PAULO EDUARDO GUIMAR3ES ROSSETTO

PROGRAMACAO AVANCADA EM

n;«:

Aleph

~) EDITORA ALEPH EXPEDIENTE

GOORDENA~iQ EDITORIAL COORDENACAO PEDAG6GIGA ED1TORACiO

ARTE e CAP A tlUSTRAC6ES

PRODUCiO EDITORIAL

Pietluigi Piazzi

Betty Fromer Plazzi Renato da Si I va 01 i ve ira Ana L~Gia Antico

Ddi Ion D. Nicoletti Rosa Kogan Fromer

ALEPH PUBlICAC6ES E ASSESSORIA PEDAGOGICA LTDA.

Caixa Po s t a l . 2D707 - Jd.Paulistano 01498 - Sao Paulo - SP

TEL; (011) 813~2033

HEditor.

Aleph

Dados de Cataloga.:;:ao na Publ~ca~ao eelP) Intarnacional (Camara 8rasPieira do Livro, SP, Brasil)

86- 208 7

Lu 2', He n r i q ue de Fi!-'.l1t··H,do. 1967-

L994p Program8~~Q ilvan~aJa ern MSX ! Henriqu~ de Figue

r e do Luz , Hil ton Ma J dona-lit' .l 1' •• Pflu10 Eduardo G. Ross e t t o , -- Sa,-' Faulo : Alep)L, 19R6.

(Co l e c ao ~SX)

1. MSX {Cotnpu t adcr e s ) rTngrama~g;:) 1. ~ldon<:ldl~ J~ni~r. Milton, 1966- II. Rossetto, Paulo Eduardo G., 196~- III. Titulo. IV. S~rie.

lndices para catalago sistematico:

I. MSX : Comput ado r e s : Pr o g r amac ao : PrOO~S5amE'nt(_l de d ado s QC 1 .!1i, 2

,

SUMARIO

NOTA DO EDITOR - - - - 6
PREFtiCIO - - - - - - - - - - 8
Capitulo 1 - A ESTRUTURA ------- 9
00 BASIC MSX
Capitulo 2 - OPERANDO 0 VDP - ...... 43
EM LINGUAGEM DE
MAGUINA
Cap; t 1.1 10 3 USOS DA - - - - - - - - - - - 59
IMPRESSORA Capitulo 4 - OPERANDO 0 CASSETE EM ASSEMBLY

81

Capitulo 5 - 0 SISTEMA 95

DE CARTUCHO

Capitulo 6 - CONSTRUINDO UM JOGO EM ASSEMBLY

..........

113

APENDICES -

- - - - - - - - - - - - - - . ~ . - ~

137

NOTA DO EDITOR

Durante muitos anos eminentes psicolagos

polemlzaram sobre urn tema muito controvertjdo: a f n tel i 9 e n cia e i rut 0 do amb i e n t e ( e due a c a 0 e me i 0

f ami I jar) ou depeflde de fator e s gene t i cos (he red i-

tar i edade)?

Aparentemente os defensores da hereditariedade I evaram a me I hot ~ a i nte I i gene i a paree i a ser determinada basicamente pela heran~a genetica do individuo. Isto gerou uma perspectiva perigosamente racista nos educadores: os indivfduos nascerjam js predestinados a S8 tornarem genios au burros em funcao de seu "ped i gree"!

Uma crftica mais seria e cientffica das pesquisas que geraram esta conctusao, porem, mostrou que elas 58 fundamentavam em resultados duvidosos DU ate em fraudesl

Modernamente determinou-se que existe sim uma influencfa genetica mas que ela nao e, de forma algurna. preponderante. Pelo c o n t r ar t o . a i n f l u s nc i a da e~ due a C a 0 e fun d am en t a J nod e sen v 0 I vim e n to d a i n tel i 9 e n ~ c j a i n d i v i d U ,a I .

o conceito racista, entretaoto, esta tao arraigado na cabeca dos educadores (e da popula~ao em geral) que 0 sistema €scolar (principalmente no Brasi I) nao faz 0 m]nor esforco para desenvolver a capacidade intelectual dos jovens, t imitando-se a abarrota-Ios de informa~oe5 que sao posteriormeote cobradas

da man e i r a a rna i s imh e c i I o o s s Lv e l .

Intel igencia, nor t a s t o . e a l su que pode (e

o e v e ! ) ser ensinado na escola.

Mas como?

Nao podemo5 simplesmente introduzir no curriculo escolar algo t~o vago como "aulas de O. I .~I

Uma primeira medida ser ia melhorar a remuneracao do magisterio de maoeira a torna-Io uma carreira tao atraente quanto a de urn med~co, par e~emplo.

Para se ensinar intet igencia ha necessidade de pessoas i nte I t s e o t e s e nao podemos ex i 9 i r que profissfonais ifitelectualmente diferenciados se 5ubmetam a atual humi l n ac ao s a l ar i a t que i mp e r a no mas i s t e r i o publ i c o e privado.

Uma segunda medida e a de se introdu2ir no currIcula mater/as que promovam Bste desenvolvimento. Antigamente este papel era feito pelo Latim, pela Matematica e pelo Xadrez. 0 Latim, ferramenta important I s s i ma no de s e nvo l v ime n t o da i n t e l i s e n c i a verbal, fai sumariamente extinto por imbecis que nunc a entenderam sua real Importancia. Diga-se S8 passagem que para is-

6

so muito contrlbuiu 0 baixo nlvel de quem 0 ensinava.

A Matematica foi inteiramente deturpada pelo advento desta barbaridade chamada Matematlca Moderna, mas ainda tem chance de voltar a exercer seu papel primordial, se seu ensino for completamente reestruturado. Obviamente esta mudan~a devera ser feita par pessaas l n t a l igentes e nao por bu r o cr a t a s obtusos.

o Xadrez. que tantos beneffcios trouxe ao desenvolvimento intelectual das crjan~as russas, por exemplo. deveria ser introduzido no curricula escolar {ha propostas neste sentido no Brasi I) se ja nao tivesse sido superado por urn instrumento que 0 5ubstitui com vantagens arrasadoras : 0 microcomputador.

Enganam-se 05 que pensam que 0 microcomputador e urn instrumento educacional paderoso para se ensinar computacao! Esta finalidade e urn subproduto. e certamente nao 0 mais importante. do seu usc par parte de crian~as e jovens. 56 quem interagiu com um microcomputador. desvendando seus mistetios. criando programas. usando "sc f twar e " intel igente. sabe 0 quanta este instrumento e poderoso para 0 desenvolvimento do r ac l o c l n t o e ca l n t e l igencia.

Se bem empregado e implantado, 0 microcomputador na escol a b r as r l e l r a pode se t o r n a r 0 i n s t r ume ntab a 5 i cop a r a a em a n c i pat; a 0 i n tel e c t u a I d a a t u a I 9 e - ra~ao de iovens e Grjan~a5.

~ claro Que ele podera tambem se traosformar Rum instrumento de ~burrifica~~o~ e tortura S8 sua jmplanta~ao for deixada nas maos dos mesmos burocratas obtusos que ja conseguiram fmbeci I izar algumas geraI;oes de b r a s i l e i r o s ,

Porque dais parses pauperr ,mos em recursos

nat u r a i 5 com 0 0 J a p a 0 e a I t a I i a est a 0 en t rea 5 C f 11 C 0

economias mais desenvolvidas do mundo capital ista?

A resposta e 5imp~e5: olhem 5uas escolasl Esta e a melhor { e talvez a un i c a ) saida para t i r a r 0 Brasi I de seu atraso econom.co e tecnologico. De nada adiantata, POt exemplo, a polftlca autoritaria da SE~ tentando desenvolver a tecnologia nacional por decretal A resposta estj n~o no ~5Dftware~ dos computadores mas no dos cerebros dos que os usam.

Este I ivro foi escrito por tres jovens bra-

s i lei r o s que escapar am do p r o c e s so de .. imb e c j Ii z a c ao

e Querem, de uma forma talvez timida mas efjciente, estender a mao para mi Ihares de outro5 jovens que des e j am t era c e 5 s 0 a est e mu n d 0 rna r a v i I h 050. n a 0 d a I of a rma t j ca. ma S 5 i m d a tnt eli 9 e n cia!

Prof. Pierlu~gi Piazzi

7

PREFACIO

Normalmenta 0 prefaCfO e a parte mais chata de se ler em urn livro. Quase sampre escritD depois do I ivro pronto, apresenta a proposta do I ivro e uma serie de outras baboseiras. Este prefacio naD vai fugir are 9 r a. rna 5 pass a r e:mo s a I 9 uma sin forma t; 0 e 5 pre lim inares para que 0 livro naa se torne mais chate que 0 prefacio.

Tentamos com este I ivro transmitir a voc~. uma maquina de Von Neumann (quem leu a nota do editor do Aprofundando-se dave tar entendido). uma serie de macites nem sempre faceis de desvendar.

Partimos do pres5uposto que 0 leitor deste

I i v r 0 j €leo n h e I; a. pel 0 men a 5, 0 •• f e i j i 0 c om a r r 0 z" d a Linguagem de Maqujna B razoavelmente 0 sistema M5X.

Alguns pragramas sao exemplo5 bem didaticos e 5 imp I es que neo apresentam uma ap Ii cal;ao mu i to grande, pois sao destinados apenas ao aprendizado; a partir deles voce poderi construir programas realmente uteis e complexos. Outros programas apresentam apl ica~5es imediatas. como. por exemplo. os programas de copja grafica do CapItulo 3.

Todos os programas foram escrjtos no Coral ASH vBrsao 2.1. Para que voce p05sa entendi-los maI h 0 r , a d apt a - I 05 a 0 S e U C omp i I ado r (q u e pod e t ran CI u i - I arne n t e 5 e r 0 u t r 0) 0 use '110 C e n a 0 po S 5 U i urn c omp i I ado r Assembly. de uma olhada no Apendice IV.

Esperamos Que voce goste. aprenda e que principalmente uti I Ize as informa~oes deste livro, obtidas, ~s vazes. gra~as a mujtas madrugadas ~morcegando" na frente do computador.

Fi nal i z ando . sos t ar iamos de agradecer a algumas peSS03S que direta ou indiretamente n05 deram uma for~a para escrever esse I ivro.

Pierluigi Renato

fernando Grossi Fernanda e Kaduota Luis A'berto Castrucci

Henrique Mil to n e Paulo

8

1

A ESTRUTURA DO BASIC MSX

Vamo 5 a n a lis a rag 0 r a de uma rna n e ira pro fun d a a Organi2a~ao de um programa BASIC na memoria do micro. Normalmente a area de programa come~a no endere~o &HB901 e 0 byte &H8000 contem 00 para indicar ao Int e r pre tad 0 r que. a par t i r d a If, pod e c orne c aruma lin h a em BASIC.

Embora seja normalmente area de prngrama BASIC, esta configura~ao pode ser altarada mudando-se algumas variaveis do sistema, como veremos mais a frente.

TOKENS

Como voce ja dave saber. para cada palavra reservada do BASte existe urn c6digo correspondente chamado de Htokenn• 0 armazenamento de programas na forma de tokens e mu ito ut j I para a e conom: a de memorja e de tempo. Afinal, 0 micro so tern que reconhecer um byte ao interpretar urn programa e nao toda a sequencia de codigos ASCI I que 0 representaria.

Vamos imaginar 0 armazenamento de urn comando

o u de urn a 1 u n 1;: a 0 pel 0 S e U cod i goA S G I I. P 0 rex em p I 0 ,

a I inha em BASIC

X::::VAHP lP (A)

f i car i a armazenada conforme mostr a a f i gur a 1.1 .

9

FIGURA 1.1 - Ex£.p1o de UMa linha BASIC no for.ato ASCII

5B X
3D _ ...
,. i. V
.) .)
4l A
1:-:' .. ) I~
• .J e:
~:}0 p
r.:·4 T
"J
I~ ") R
.s e:
~,~8 (
41- A
~9 )
r: ••• Sem contar 0 numero de ~ inha, urn byte para

dizer que a I inha terminou e outras coisas rnals, a I jnha e x emo t l t i c ae a na t i sur a 1.1 o c up ar l a 11 bytes, Com o sistema de totens ,porim, ela estaria armazenada como mostra a fjgura 1.2 .

FIGURA 1.2 - Linha hipotrt ica tokeni2ada

X

,s.ql ... (,,'10' I. , .. r. ... ~

tokEn (

A

do ""

.l o t ".

4.1.

Como voce pode observar, a economia de memoria e notavel em rela~ao a uma I inha armazenada no formato ASCI I, Quanto a economia de tempo. imagine 0 trabalho real izado pelo Interpretador ao executar urn programa; ter que comparar letra por letra da fun~ao VARPTR (que e uma das funcoes do BASIC de nome mais comprjdo) para depois descobrir que deve saltar para a rotina que executa 0 VARPTR proprlamente dito.

Com 0 s i sterna de tokens, 0 Inter pretador i a

reconhece 0 &HE7 como a fun~ao VAAPTR e salta para a rotlna correspondente.

A tabela da ROM que indica as palavras que pertencem ao BASIC MSX come~a no end8re~o &H3A72 a vai ate 0 endere~o &H3D22. As palavras que come~am pela mesma latra estao dispostas em grupos colocados ern ordam alfabet~ca. Para demarcar uma 5epara~ao entre 05 grupos existe urn byte zerado.

Hi uma tabela de 26 etement05, que se inicia a partir do endereco &H3A3E que contem, na forma lSB e MSB, 0 end ere I; 0 no qua I 5 e i n i cia cad a um do 5 9 r up a 5 de tokens Que come,am com uma determinada letra. Par

10

exemplo, 0 primeiro element~ ui tabela (bytes &H3A3E e &H3A3F) aponta para a endere~o &H3A72. que e onde se inicfa a tabela das palavras reservadas iniciadas com A.

Ja Que todas as palavras de um mesmo grupo corne~am com a mesma letra, torna-sa desnecessario armazenar a primeira letra de todas elas. Para indicar 0 f im dos cod i gos ASC II de uma determi n a da p a I avr a. sua ultima letra estara sempre com 0 bit 7 setado, sendo que a byte seguinte indicara 0 codigo da token. A figura 1.3 mostra 0 armazenamento da fun~ao VARPTR na ROM do micro .

-, I" I I-' .........

Aj. A

I::' ") ~.} I:.,

~S0 r~i 4

, ..

I·) ")

• I: ..

!:: ... r

.....

I~ P T

I, (c om

c o d i~Jo

",J "'.J J It. ,,,

'..,j ".-' .-"rJ 0;,

I·· " t· 7' ~::. (.~".&' ".' ('j 0 )

.J. .. ... t 1.\ •

-I "1 'f' n I{ 1::·'· I

I.ti:. ,.f .... h

Vamos apresentar, na figura 1.4 um prcgrama Assembly que. a partir dos c6digos ASCI I de uma pa~avra reservada do BASIC, obtem, a token correspondente, atrav9S de uma varredura da ROM.

FIGUR~ 1.4 - Pro9raMa TOKEN

.IotS" 9611.2

ce.6e COB4ee cee3 23

C0-8-4 7E

C •• ::i .23 Cee6 22B6C0

ORG GiINLINEEGiU CHPUT~ EQU CALL I ... C LD INC LD

ce09 0641 celis B7 C90C 8686 ceeE 4F ceeF 113E3A ee12 £8

C0-.1S &9 ce14 EB C801.5 IA C916 "'F' eel" 13 C01S lA ee19 :57 C01A 59 C0UI

C01IJ 1111

SUB ADD LO LD LD EX ADO EX LD LD lNC LD LD LO

LOOP.

LD

C01C FE00

CP

eca.a",H 60114H eeA2H QlNLIN HL..

A .. (HL) HL

(PALAVR) • Hl..

·PI •

A.A

a.e

C-yA DEp3A3EH OEFHL

HL. BI:

OEpHL A. (DEl erA

DE:

AyCDE) DrA

E .. C

A. (DE)

..

= RECEflE PALAVRA .APON1A P/ l~LETRA

JA CONTEH 1~ LET~A .~POHTA P/2~ LETRA ,~UAROA END QUE APONTA .. P(.IIRA 2~ LE'l"RA JL..OCALIZA ENDERE~O ,QUE APOHTA PARA

.0 aL~CO DE PALAVRAS ;R~5~RVADAS IM1CIADAS :COH A HES~A LETHA.

,

rFAZ DE APONTAR PI ,OLOCO DE PALAVRAS rRESERVADAS I~ICl .ADAS CGH A K~S"A ~L..ETRA.



• PEGA LET~A DA TAbELA

I NA ROI1

~VERIFJCA SE E FIH

11

C~HE 2943

C029 CBBF (;0122 e~

ce23 20009 £:.025 lA C.e26 CB7F £:028 20913 C0.ii!AI 23 Ce2a 13 C02C lSED ce2E

ce~E: 2A86ce C031 ill. C032 CB7F C4J34 208'C8:36 13 (;037 1.3 C039 1 BEl C03A.

£:.03110 13 C03B IB~1 C~3D

C030 13 C03E 1A cesF' E6F0 C.-41 iF C042 iF" C843 iF

£:004 .. iF" C&45 C630

ce47 FE3A ce-4'? 3892 ce4B C607

C040

C0"'1D CDA2e0 ce:S0 IA

C051 ~6e.F' l:e~3 C630

C0!'S5 I""E3A C057 3802 C0:;)9 1:6&7

ceS9

C9'5e CDA2000& C05E: 00- C0~r ee C060 00

Cli't61 ee C062 [;9 C863

C6i.3 0615 C::065 217eC0 C068

Ce68 7E C069 COA200 C06C 23 C06D leF9 C0061"'" C9

C070 ~04i4C41 C074 '5652412e C97B 4E414F20 C97C 524353<45 C0Bi!Io 52564144 C99-4 -4'"

Ce85 00

C0-S6 00.'" cess

12

JR Z.ERRO

RES 7.A CP (HL)

JP: 1..,.0 BIT JR 1N(:

I .... C JR

PROXPA=

LD LD BIT JR !NC INC JR

PROC;

INC

JR

IMPTKNI INC LD AND RRA. RRA RRA R~A AOO

CP .,JR tI(JO

II'1PNIB; CALL LO AND ADD

CP JR ADD

NZ.PROXPA A. (l>iE) 7.A NZ.IHPTICH HL

DE

LOOP

HL. (PALAUR) A .. U>e:)

7.A

z. PROC 010

DE

LOOP

DE PROXPA

DE

A. (DE) .1111eeeeB

A.36H

3AH C.IHPNIB A.?

CHPUT

A. (DE ~ eeee1111B A_3~H

3AH C.IMP2NI A.7

IHP~NI:

CALL CHPUT NOP

HOP

NOP

NOP

RET

ERRO=

LD LD

LOOP2:

H£NS;;:

LD CALL 1l'fC DJNZ Il£l" OE:F"S

TOKEfH O£FII e PAlLAVR:DEFI.I e END

8.21 HL.I1ENS

A .. HIL) Cf-4PUT HL LOOP2

iDE iH.vCO

;SE AFIRtt. SALTA ~PARA ERRO

;RESSETA 0 SIT 7. ~COHPARA COM LETRA OA ~PALAVRA A SER ;PESG!UISADA_

.SE () SALTA ~/ PROXPA. )'VERIFICfl, 51:: E

~FINAL DE PALAVRA

;SE FOR SALTA P/ IMPTKN. ,INCREHENTA HL E OE_

;P/ COHPARAR PROX LETRA ;:EF£TUA LOOP.

,HL APONTA P/ 21!. ;:LE'T~A E DE ;;:APOtiTA PARA

~ PROXII'''A f"ALAVRA ,RESERVtlOA.

~APONTA DE P/ TOKEN. JCAR~£GA A COM TOKEN. .f'E6A 19 NIBBLE • ~ROlACI()NA

;;:BITS.

J

;:SO"A 3&H PARA A CONTER ;:0 COOIGO DQ .... 2 ;VE~IFICA SE ~ LETRA. ;:SE HAO.1HPRIME.

,SOHA 7 P/ A CONTER ~COOIGO DE LETRA

.,

JIHPRII'1E: DIG1TO_ JPEGA COV TOKEN_ ;:PEGA ~g N1BaLE.

~50HA 3eH PARA ~ CONTER ;0 CODIGO 00 HQ ~VERIFICA i LErRA.

.SE NAO IHPR ute

.SOHA 7 P/ A CONTER

~O CODIGO 00 NQ

J 1I1PRII11;: DIGITO •

• FUTURA EXPtlNSAO. fFUTO~A EXPANSAO. ;FUTU~A EXPANSAO_ ,FUTURA EXPAMSAlO. ,RETORNA AO SASIC_

;:CASe> TOKEN NAO =E .... CONTRADA. ;IHPRIME MENSAGEH

JOE: E"RRO.

·PALAVRA NAO RES~RVAOA'

TOKEN DE FUNC~O

Quando a palavra reservada nao corresponde a um comando. mas sim a uma fun~ao, ela recebe um tratamento especiat:

5e voce notar bem. a maiorla das tokens de funcao apresentam 0 seu codigo entre 1 e 48. Em uma I jnha de programa, essas fun~oe5 nao estao armazenadas apenas com a token da tabela de palavras reservadas; etas Sao precedidas de urn byte contando &HFF. sendo que tambem 0 bit 7 do byte da token fica setado.

Ou seja, 0 codigo que voce obtem na tabela naD e Imediatamente 0 c6digo que 6sta armazenado num programa. Para obte~lo voce tera que setar 0 bit 7 (OU somar &HB0}. Vejamos urn exemplo n a figura 1.5 .

FIGURA 1.5 - Linha de prograMa (01 token d€ fun~aD

"I). J:i,~ r N -T- (:' 'I' N ( ~ ") ,I. Y! _ _ _ ,.) " fl.

, , '.' c» I" 1

~.\ _" ... ] ~~ -.t

".1 .. 1

r ... .i.'

, ,

PI" 0 >: I 11"1 i-:,\

1 i n h a )

00 nl 0AJ

<)j_ PI~JNT

FF t d e n t if i c~~dor

D (l t: D k e n d o ~:) I N

") !:> (

t... ,I

-4 j_ ~~

1 i nh;',i)

(-II;" ,[.' 1 • 1'1 {" ;:~ n

I .... .1.. 'I. {. - ---

;?9 )

(-)0 1-'1 (fim d(,? 1 i n h a )

Ao consuitarm05 a tabela da ROM, constatamos Que 0 COdF90 da token da fun~ao SIN e 09.8 subtraindo &H80 do &HB9 (ou resetando 0 bit 7 dess8 b~te) obtemos o mesmo codigo.

ESTRUTURA DE UMA LINHA DE PROGRAMA

A maneira pe'a qual 0 micro armazena uma I inha de programa e bastante simples:

-05 dois primeiros bytes contem 0 endere~o da p r e x irna Ii nh a .

-Os dais bytes seguinfes representam na forma lSB e MSB 0 numer o da Ii nha. E por i sso que uma r i nha So pode ter urn numero entre 0 e 65529.

-A partir desse byte podem existir rnais 254 bytes pa~a 05 comandos do BASIC, e para iodicar 0 fjnal da I inha existe urn byte zerado. A figura 1.6 mostra a estrutura de uma I inha Nsimp~es" de BASIC.

13

F1GURA 1.6 - EXERPlo de U~a linha BASIC .1. 0 P I~ I j\J T A

09 epl ~~ (1 ]

0A] n 1 00

f)t PPINT 41 (1

(~0 PI

o 0 ) f t III d E:- P 1'- U 9 1'- (':l In (-:"l 00

~ importante ressaltar que ao final de um programa BASIC existem dois bytes zerados, indicando para 0 interpretador que 0 programa termina nesse ponto.

ESCONDENDO LINHAS

Voce pode esconder uma I inha de programa do LIST. bastando para iS50 alterar S8U epl (endere~o da cr ex ima I l nha ~~ fazendo-o apontar para 0 i n i c i c ( ep t ) da proxima I inha que voce quer que apare~a_

Vejamos 0 programa exemplo da figura 1.7 .

FIGURA 1.7 - EXflP10 de prograla BASIC

j, ~1 (~--" 0

;_:_~ '1 p ~~ I t~ T fI E U [: S T 0 U A (~ U I ! 1 1 "

J 0 P I~ J NT.'.' MAS N A 0 A P f~ I~ E c 0- N A LIn TAG E t~ u

AA :_A I I c -1-

'1 ... -, _" .. ,)

Com urn dump da area de programa. voce obteria os dados da figura 1.8 .

Suponhamas que voce queira esconder as I inhas 20 e 38 do programa.

- Par a iss O. II amo 5 a I t era roe p I ( e n d e r B ~ (J d a pr e x una Ii nh a ) da Ii nha 10, f az e ndu-o apontar para 0 ~nrtio da I inha 40 que ~ a primeira I inha que aparecera depois daQuelas escondidas.

-Usando um monitor. vamos alterar 0 byte &HB891 de &H8A para &H45. Agora 0 epi da I inha 10 aponta para a I inha 40.

~Execute 0 prQgrama com um RUN au urn GOTO 10.

14

FIGURA 1.8 - DUlp de leloria

,.....------epr da l r nna 18

D 0 0 0 ~10 0 A U~) Illi\",,;0;;...;;A~' L..I ~"....;;"~":...;";:....._--n ume rod a J i n h a , 0

B0 0 4 i2..ili 4 t F F 0 F .. A .. U e pi d a lin h a 20

0008 ~)A 0~1 I ;?2 D0 J n

B 0 '1 C t t 4 ~'£2.t '} 1. ;? ;? U ~) t 0 4 ~:; ::,) ::,:; ;? 0 4 ~~:J

[U F ~)TOU AQU

;.~~ j_ ~-~ .1. ;? 1. __ ~J~~_l;.....;....t __ e p I d a lin h a 30

a 02 0 ) ;.:-~ () (,) I 4 :;:; 8 0 J "".L L " n ~ mer 0 d a lin h a 30

r) 0 q 1 j I 0, 1It01 ~_) j, _ ,,) ":. J!

<:) i.:_ .; l1!"..;;., .;..;;.;:~' __;"(,;.._.!.!:.J;;...! r.. 1:.-

nO;?U 4 D 4 t ~:_~jJ B0:?C liE B 0 4F U0:30 4 t ~:50 4:1. B0:J4 4~,:,:; B(~ -4F

n 0 ::~ n 4 F -4 j_ 2 "

C' 0"~(·' 4 ~:) I::· "I ~-- 1 d . ,;) ., " ... J -: ~;J ,(?

-4F

j ••• ..:.-

.:) ,)

,--- p'"

~) ::_t

~,:?0 ~?0

"- 0

':'.~

-4C 41.

.,

numero da I inha 20

1'-'1 A ~;; Nbo

f"1 p {~R [ .. 0 NA I... -I· c·'T-A·

..•. )

Voce vera que as t Inhas 20 e 30 sao executadas mas nao aparecem na tjstagem.

Quando 0 programa e eKBcutado. as I in~as 28 e 39 sao executadas normatmente, pais durante a execu~ao o tnterpretador "aO consulta 0 epl das I inhas do programa. Mas quando certos comando5 como 0 LIST. lLIST au 0 SAVE (para programas em ASC II ) por e x emp 10 Sao executados, 0 ep I d as Ii nhas e consu I tado eel as nao Sao notadas pelo Interpretador.

As t i nhas 20 e 30 podem, facilmente vc l t ar a aparecer. Basta inserir uma f inha com numera~io inferror as que foram escondidas. po.s ao fazer isso 0 sistema operacional reajusta todos os epl do programa.

TRATAMENTO DE NOMEROS

Assim como 0 BASIC MSX guarda as palavras reservadas na forma de tokens (para ocupar menos espa~o e economizar tempo de processamento) tambem guarda 05 numeros de uma maneira toda especial.

15

o BASIC permite 3 tip05 de vart9veis numeri-

cas:

1} As i n t e ira 5 rep res e n tad asp e I 0 5 i mb 0' 0 " .... (por cento) ap6s 0 nome da variavel ou pela fun~ao DEFINT_ as qua~s podemos atr~buir valores snteiros na faixa de -32768 a 32767, e que ocupam apena5 dois bytes de memoria.

2) As de simples precisao. identificadas pelo p o n to dee x c I ama I; a 0 (!) 0 U pel 0 coma n do OEFSNG. E I as podem aS5umir valores de ate seis digitos, com um expoente que va! de -64 a +62. ocupando 4 bytes de memoria.

3) As de dupla preClsao, representadas palo ~number~ (I) au pelo comando OEFDBl. Ela5 podem representar numeros de ate 14 dlgitos com um expoente de -64 a +62. consumindo aito bytes de memoria (a menDS que voce esteja real izando calculos altamente precisos isto pods r ep r e s e n t er um de sper d I c l o ! ) .

Se voce nao definir no seu programa 56 as var i ave i 5 s ar Jo i nte j r as . 5 imp I es OU due I as. 0 I nterpretador assumira todas como sendo de dopla precisao.

NOMEROS EM LINHAS DE PROGRAMAS

Quando uma I lnha e di9itada, 0 BASIC nao sa preocupa em saber se a variavel e intetra. simples OU dupla. 0 armazenamento do numero na I inha e fe.to de forma a economizar 0 maKimo possivel de memoria, numa espicie de ~tokeniza~ion dos n~mer05 na mem6ria; ou 5 e j a, t a I qua I asp a I a v r as res e r v a d as do BAS Ie. n em sempre 0 que voci ve na tela do micro com um LIST e realmente, 0 que esta na memoria.

REFEReNCIA A LINHAS

Durante a ~tokeniza~ion de urna I jnha, tOd05 05 oumeros que sa refarem a I inhas de programa sao armazenados de duas maneiras. Por exemplo. a I inha

.! r,1 .•• 0.) ·r' O ,oj 0 0 0 O •

.I. 0 LJ t 0 c: . 'f)

Quando digitada ser~ armazenada como mostra a t i sur a 1.9.

16

FIGURA 1.9 - Tokenizaiio de UI n~lerD

>~;<] c:- p "1 ( end E-I'" E~: 0 cI (':\ pI" D >~ 1 II) <~ 1 j n h a )

... /.., J-

.--, ......

~10] n 1 o (.~

( n 1_1 mEr D d (:! "1 i n h ;:-~\ )

U9 001"0

").' .J-. U

r. .. 0 ~:~ ~::- p ;~, t: 0

0E id

;.:.~ (, ] n 1.1 mer' D (L ~3 B eMS B ) 4E

00 fI

o byte contendo urn &H0E (id) serve para indlcar que os dois bytes a seguir S8 referem a uma Iinha de programa e estao armatenados na forma LSB e MSB.

Ouando a II nha for executada pol a pr ime i ra

vez , 0 Interpretador alterara 0 byte de identjfica~ac para &H0D e 05 dois bytes seguintes conterio 0 endere~o de inlcio da t inha em questao. Isto e feito para ag.1 izar a exeGu~ao nas pr6xjmas vezes. Essa tecnica de atua Ii z ac ao e o t imi 2a~io dos nume r ns referentes a I inhas de programas e conhecida como Apontadores Progressivos.

TRATAMENTO DE NdMEROS INTEIROS

Os numeros inteiros possuem um bastante pecul iar. que e dividido em distintos;

armazenamento tres est~gio5

~ Numeros intslros entre e e 9

~ NGmeros inteiros entre 10 e 255

* NGmeros inteiros entre 256 e 32767

Vamos ana 1 i sar a s esu i nte Ii nha de programa.

1. 0 A :;;: ~:_;

Examinando os bytes na memoria do micro teremos os dados da figura 1.11

o Interpretador reconhece 0 byte com &H16 como sendo 0 "5H• Esse byte ~ uma e5p~c~e de token para armazenar urn numero de urn drgito. Os numeros de urn digito e 5uas respect.vas tokens astio I istados na figura 1.'1 .

05 numeros negativos sao precedidos pela token do '._", Que e 0 &HF2. Vej amos. na f igura 1.12 , como ficaria a mesma I inha se quisessemos armazenar numero -5.

17

FIGURA 1.10 - DUIP de ula linha de prograla

'.' '.J E·' to) 1

~ ... t .. ] •••

~< ~.~

00]nl 0A

41. A

FF ----

1. (.) t 0 k (;::- n d 0 ~:! 00 fl

FIGUR~ 1.11 - Totens para nu.eros de UI dlglto

TOKEN &Hl1 8.H12 &H13 &H14 &H15

OfGITO o ,

2 3 4

TOKEN &H16 &H17 &H18 &H19 &H1A

DfGITO 5 6 7 8 9

FIGURA 1.12 - OUIP dE lila linha de prograla

':-: ~-' r·",' !:) -1

~ ; ~: ] --- ~

_"'o __ "_.

I" li) I ,,-/~, J ~"I ,

Ot.

-4 j_ A FF ---

F:? t ok en d D .--f 6 t 01< End D ~::"; \1~' f 1

Vejamos agora como 0 en t r e 1 0 e 255.

Para reconhecer que nessa fair-a. 0 m.cro cotoca urn que no caso e 0 &H0F. Vamos apresente tal armazenamento:

mfcro armazena um numero

determinado oumero esta byte de ident.fica~ao, anal tsar uma I inha que

j_ 0 ~:; ;;:: ] ()

A f. 9 u r a 1. 1 3 mo 5 t r a ma j s de t a I had arne n t e. a

forma de e rmaz e n eme n t n cia Ii nh a ,

18

FIGURA 1.13 - DUIP de u.a linha de prograla

'.' ',' 1:.' 1"1 ·1

I' -, I .. ) I,;:, ••

' ...... _ ..

~ , I ..

~:.:! ~;~ f'
,:1
EF _. -~
0F i d
")F 3~'
~." "
00 fl Como voce pode notar, 0 &H2E e 30 em decImal, e isso S8 repete para os demaFS bytes ate 255.

Os numeros intelros restantes, que vao de 256 a 32787 possuem Dutra forma de armazenamento. Existe tambem um byte de identlfica~ao (&H1C) precedendo 05 bytes Que compoem 0 numero. 0 numero em 5' e armazenado em dois bytes, na forma LSB e MS8 (ou parte baixa e parte arta) Por exemplo, a I inha de programa:

.j 0 X :1. ,.) '"I /t I::'

. . .' c; ,;; ·'Y J

f armazenada como mostra a fjgura 1.14

FIGURA 1.14 - Arlazenal£nto de UI n~~ero na forma intefra

~< >: 1 E·~ P "1 ;.~ ~.~

NuMEROS EM SIMPLES PRECISAO

Em uma I inha de programa, 05 numeros Que P05- 5u(rem de uma a seis casas decimais, OU forem majores Que 32767 serao armazenados no formato de simples precis aD. 0 qua' 0 cup a ern cob y t e s , 0 p rime i roe urn by t e de identjfica~ao da forma de armazenamento do numero. que no caso cantara &H1D. 0 segundo byte indica 0 expoente, e os tres bytes seguintes armazenam 05 dfgitos do numero.

1 9

Po rex emp I 0 • a I I n h a

j_ 0 M A:::: i u ~~ 3 4 ~;) 6

estara na memoria como mostra a fjgura 1.15 FIGURA 1.15 - ArlazEnal~nto el silP}es precisao

'.' '.' c" I') 1

...... ~ ... ] 0;' ••

"", .. ~

...... r-:

(,0] n 1 0A 40 41 FF 1,D 4i

j ")

~:14 ]

56 00

M A

id

b ~ t (;.~ d E f'::-~P o e n t: c

d " 9 i t: (J ~:;

fl

Repare 0 primeiro byte do dlgito: 0 valor dele e &H12 e os dois primeiros digitos do numero sao 1 e 2 1! f

Na hora de armazenar a I inha, 0 Interpretador transforma 0 codigo ASCI I do primeiro digito no proprio numeto e, como estamos lidando com numeros decima is, um d ( 9 ito 56 va ide z e r 0 a nove ( que em bin Ii rio va i do &B8800 a &B1001 i.

Note que 0 maior dfgito que temos e 0 nove { &H10 01 L que so 0 cup a qua t rob its. En tao. po r que n i 0 colocar dois dfgitos (cada urn ocupando quatro bits) em apenas urn byte.

Assim 0 primero "nibble~ (conjunto de quatro bits) representa a primeiro dtgftO. 0 segundo ~n~bblen n segundo dfgito, e asslm 5ucessivamente at~ o termino do numero (e dos tres bytes).

N~MEROS EM DUPLA PRECISAO

o armazenamento de um numero que possua mais de 6 dfgitos e feito em dupla precisao. 0 sistema de armazenamento na t inha de programa e igual ao de s~mpIes precisao. As unicas diferen~as sao 0 byte de identificacio (Que no caso e 0 &H1F) 8 0 numero de bytes para armazenar dois drgitos, que agora sao sete.

20

Vejamos, na flgura 1.16 , como e armazenado 0

n6mero;

j0 PJ' ~ ~4At9~~r7

• •• :::: ,;} II J. .1 ••• ~ c, c, ,) .'

FIGURA 1.16 - Arlazenalento el dupla precisao

00Jnl 0A

.::·0 L:) ,.J r

49 I FF ._,

iF id

41 byte de expoente 3 1 dig i t: C)~:;

41

I:'-P ,.~ 'T

,.) L r: .. '(;)

C"7

,.J

,,0

00 f'1

BYTE DE EXPOENTE

Quando foram criados os MSX. resolveu-se que apenas um byte seria dedicado ao armazenamento do expoente. Esse brte teria Que dlzer tambem se 0 numero e pc s l t i vn au nes at i vo , por iSSQ seu bit sete foi reservado para dizer 0 sinal do numBra.

Com isso rastam sete bits {0-S}. 0 que representa 128 posi~oes (8-127) para indicar urn expoente que pode ser positivo ou negativo.

Vamos djyldtr por dois e~~as 128 posicoes. (metade para os expoeotes negativu~ e matade para os expoentes posltivos).

levando em consldera~ao s6 os sete prime~ro5 bits do bJte de expoente. a organiza~ao ficaria da seguinte maneira:

&He'-&H3F - Expoente negat.vo (-63 a ~1) &H40-&H7F - Expoente positiv~ (8 a 63)

Depo is de I er tudo i sso • voce p e ns a .

Sa 0 byte de expoente pode representar 64 expoentes diferentes. como e que 0 eXpoente maximo que eu consigo representar no meu micro e 62 ?

21

o que acontece e que, quando 0 micro i me r ime urn numero em simples ou dupla precisao, se ete ocupar majs de 13 d(gitos, ele e impresso em notacao clentffica e oeste caso aparece 0 e~poente na impressao. Urn numero em nota~aD cient{fica apresenta sempre 0 primero d{gito como urn inteiro. e 05 dfgitos restantes sao cOlocados depois do ponto.

o nGmero que voce retira do byte de expoente naD e igual ao expoente de urn numero em nota~ao cient I f i c a . embora 0 micro assim 05 tmp r ima . 0 l n t e r p r e t ador considera como se todos os digitos estivessem a d~rejta do ponto. Par exemplo, 0 nGmero

.05

e representado em notacao cientrfica como

5E-2

mas. na nota~ao interna do micro, 0 mesmo numero estaria da seguinte forma:

.5 E-1

EntaD, Quando 0 mi ero irnpr ime urn e x p o e n t a 62, na sua notacao interna 0 expoeote e 63.

A mesma coisa acontece com 05 nGmeros de expoente negativo. Enquanto voce ve no video urn numero do tjpo 3.14984E-6~, 0 expoente esta armazenadD como se ele estivesse na forma .314984-63.

Note que. com esse tipo de notacao 0 numero .5 possui 0 expoente zero que esta no grupo dos expoentes PDSltivos. enquanto que em oota~ao cientffica ele o o s s u i r t a urn e xpo e n t a negativo (~1).

Embora isso 50 aconteca na area de variaveis. quando 0 byte de eKpoente esta zerado 0 Interpretador assume 0 valor da var~avel como sendo zero. mas os bytes Que indicam os algarismos nao sao destrufdos.

N0HEROS EM OUTRAS BASES

Em uma I Inha de prngrama

de estar nas bases he~adecfmAI.

Interpretador tambem possui uma armazenar esses numeros.

urn numero tamb~m pobinarja au octal. 0 maneira especial de

Vejamos seguinte t inha de programa:

1·),. , ~'l I . ~ .... '.~ ·l I·· . .. ... .. I • \.

I.~ j.:., :::: T', .. L~;·' .. 1··':·, + (-.~ .1 ··1 ~.~"i 1 tj + },( .. ~ .. , .

• "1;_ •• ~ ttl _U I II ••• I ~ " I' I I 'L_ ~).; • ,J •

22

5eu armazenamento ~tokenj2ado~ na membrla est~ mostrado e e t a t t sur s 1.17

FIGU~A 1.i7 - Linna d£ prograMa COM nUlero rl outras bas£s

0(" n '1

0(,; ]

41. FF-

0C ")3:

J;" )

A0 Fi

;_:~ 6 -4 ;.~ :.~ .1 :]0

::~ 1. J0 Fj_

nB :i.F 00]

00

cpl

Pf

~. ('1 k COO' I·' j,t {-- :~:;

1_ •• ' •• ~ I .. f.f

i d h e >~ :;;\ d (,:,~ c: i In ~\ 1

n u m p r CJ (I... !:; U

t o k en «

B

j_

~,

1.

o

do +

.{o.

i d o c ta l

n umr::-I" 0 (l .. SB E'

fl

Note que existe urn byte de identifica~ao para os numeros em hexadecimal (&HeC) e outro para os numeros octais (&H0B). 0 valor dos numeros em 5i e armazenado na forma LSB e MSB.

Ja os numeros binarios sao armazenados no formato ASCII, e us caracteres .. &., e ~·B·· jt. servem como bytes de identificacao dessa forma de armazenamento.

AREA DE VARIAVEIS

Ha uma area na memoria do micro que e reservada para 0 armazenamento das variavejs de urn programa BASIC. 0 infcio dessa area e dado pela variavel do sistema VARTAB (&HF6G2), e normalmente ap o n t a para 0 final do seu programa BASIC. Uma outra variavel de sistema. a 5TRENO (&HF6C6), t nd l c a 0 final dessa area. Sempre que uma variaveJ do BASIC e consultada, 0 Interpretador vasculha a area de mem6rta del imitada por VARTAB e STREND e, 5e a vari6vet nao estiver defin.da naquela area, 0 Interpretador assume 0 seu valor como sendo zero (variaveis numer.cas) OU uma string vazla.

23

o valor da STRENO se iguala ao da VARTAB sempre Que uma uma nova I inha BASIC e introduzida no seu programa. Oevido a esse fato. quando uma I inha de programa e introduZida, todos 05 valores de varfaveis que voce tenha armazenado sao perdidos.

Existem quatro t.pos de variaveis que sao armazenadas nessa area.

Sao elas:

t n t e t r as strings

precisao simples precisao dupla

ocupam 2 bytes ocupam 3 b1tes ccupam 4 bytes (Icupam 8 bytes

Uma variavet possui a sintaxe de armazenamento apresentada na f i sur a 1.18 .

FIGURA 1.i8 ~ Forma dr arlazenamento dE variaveis

j( X Y Y Y Y WW WW ww ww ww WW ww WW

~

de 2 a 8 bytes para armazenar dados 2 bytes para 0 nome

1 byte para 0 tipo de variavel

o primeiro byte Indica 0 tipo de variavel que esta armazenada. e 0 seu c6digo tambem ja indica em quantos bytes estao armazenados as digitos.

Por exemplo, se 0 primeiro byte contiver 0 valor 2, sa b e r emo 5 que a \I a ria vel e i n tel rae que 0 seu valor esta armazenado em dois bytes.

As variaveis vao sendo armazeoadas a medida em Que forem sendo definidas pelo programa.

o micro assume como default, para as variave I s sem os i nd t c a do r e s de t l p o (".t. t j • 0 armaz snamento em dupla precisao. 1550 sem se Jmportar com 0 valor d a va r t a vel em 5 i , Sa 0 5 e u pro 9 r ama n a 0 p o S sui r calcolos altamente precisos (como urn programa de astronomia par e xeme l o ) e melhor u t t t r z ar v ar i ave i s Inteiras, que sao processadas mais ripfdamente e ocupam menos memor ia. Voce pode 5elecionar atraves das fun~aes OEfINT. DEFSNG e DEFDBl, 0 t,po da variavel que comeca com uma deterrninada letra. Assim neo havera necessldade de colocar, apes cada variavel~ 0 indicador de tipo.

as comandos DEFINT. DEFSTR. DEFSNG e OEFOBl alteram uma tabela que tem inicio no endere~o &HF6GA (OEFTBL). a qual pns su i 26 elementos, urn para cada letra do alfabeto.

24

Gada elemento indica 0 tipo de uma variavel sem jndicador de tipo que foi encontrada no programa durante a execu~ao"

Para cada tipo de varlavel. 0 elemento pode assumir os seguintes valores:

82 inteira 03 string 0'1 simples 8e dupla

Quando e consultado OU alterado 0 valor rna variavel que nao apresenta indicador de tipo, terpretador consulta a tabela para saber qual 0 que deve assumlr para aquela variavel.

Por exemplo, voce pode ter tre5 variaveis chamadas AS • uma de cada t i po.

Se 0 prime.ro elemento da tabela DEfTBl for 8 (que e default) voce s6 podera acessar os valores das variaveis AB inteira, de precisao simples e str$ogs se forem usados os indfcadores de tipo tOgo ap6s 0 nome da v ar t ave l ,

Digite os comando5:

de uo I ntipo

..,_ I') '" "1 ') h :~ "~' ::::, ~:J

/' I"j t .... 1::- ---, !~~- t .--1: ,·· .. d..:! .. ·.)t.~

A I'i M J') (l\ j"" -·17/ .". ") (") j ... r,'. r :, ft :::: ,.J o .. ,'.'J o. _ .\ .;) I~~, r ., '<:f ,') c:.

r:~ B ~I, ::~: nAn "

o valor do primeiro elemento da DEfTBl e 8, portanto se voce comandar

como resultado voce obtera:

Agora comande:

I::· r- ! > 1::- y j. ,! C' t, f": A- >:~

U t\ ... ~;-.: f I.. ••• :I r ...

e imprima 0 valor da variavel AB com 0 comando

PR TNT (IB

Voce obteve como resultado:

70

25

Quando 0 POKE fo! executado, houve altera~ao no valor de primeiro elemento da tabela DEFTBL, que indica 0 tipo de todas as variaveis que come~am com a letra A e foram usadas sem 0 respectlvo indicador de tip 0 . G om 0 0 valor" p 0 k e ado •. f 0 i 2, f 0 j i mp res 5 0 0 valor da variavel inteira.

Sa alterassemos 0 valor para 4 ou 3, seria Impressa 0 valor da variavel de simples precisao OU da v a ria vel 5 t r i n g. res pee t i v arne n t e .

VARIAVEIS TIPO STRING

As var.aveis do tipo string nao arma2enam na area de variave.s a sequencia dos caracteres. Por isso elas possuem a 5inta~e de armazenamento apresentada na f i sur a 1.19 .

FIGURA 1.19 - ArmazEoaMEnto dE vari~vEis tipo string

03 xx xx

yy ww ww

L:

endere~o de armazenamento dos caracteres

comprimento dos caracteres nome da variavel

indica 0 t l p o de variavel e em quantos bytes esta armazenada a jnforma~ao apos 0 nome

A Variavel de Sistema FRETOP (contem &HF16B como default) armazena 0 endere~o que vai receber 0 urtimo carater da primeira string def.njda. se durante a execu~ao for feita alguma opera~ao envolvendo as strings. Portantn.se a string possuir 10 caracteres, 0 endere~o &Hf1SF contera 0 primeiro carater da string. A segunda stri~g defin~da tara seu ultimo carater OCUpando 0 endere~o &HF15E e assim sucessivameote.

Se num programa houver uma t inna com a seguinte sintaxe

..: I".} 0 ~ (I' ::::!I ·1· I J ~ 1--1 (" F~· c ,~~ ~ 1< ")t J I') ~- 1_' ,,/

,I .... ~ f 1 ':U ,_, 1--1 ,,' c; I ~ ,I, . "f ~ \

ao executa-la, 0 Interpretador criara a va-

riawel com 0 devido nome na area de varjave.s, mas 0 ander ecu para 0 qua I e I a va I acnnt ar • e s t ar a na ar e a de pro 9 r ama, jus tame n ten a I I n h a BAS Ie, i n die and 0 0 prlmeiro caracter da string.

26

Mas s e for f e ita a I 9 u m a 1.1 IJ t: I d ~ <:. ,J com e 55 a

string, como par exemplo. soma-Ia com outra string, as textos das duas strings serao transferidOS para a area de 5tr~ngs e a variavel apontara para esse endere~o.

RELOCANDO PROGRAMAS EM BASIC

o Sistema MSX exige uma RAM mInima de 8 Kbytes e 0 topo da memoria sempre deve conter RAM. pois al i estao as variaveis de s.stema. 5e 0 micro dispuser de rnals memoria, como e 0 caso dos MSX braslleiros. esta e alocada ate que S6 chesue ao encer e co zero. A figura 1.20 apresenta esquematicamente varias estrutura~ possfvei5 de RAM.

FIGURA 1.20 - P05sivEis [onfjgUra~O£5 d£ meMoria

---- / /
01lJ(J)O
D AREA NAo OCUPADA
4aG<D • VARIAVEIS DE SISTEMA

8mCll~
I Iill MEMORIA RAM
• ~ : I II
- "
> ,
CCD00 ~ ( I II
- " - ,
, 'I -, , \.~ ',. -,j ': ;, i~ ; J;~
FFFF" Em um MSX com 16 Kbytes de RAM, a area reservada para 0 programa BASIC come~aria no endere~o &HC000.

Para indicar 0 endere~o onde 58 inicia a RAM disponrvel existe a variavel BOTTON (&HFC48) e para Indlcar 0 inlcio do texto BASIC existe a variavel TXTTAB(&HF676).

Existem mais 3 variaveis de sistema que obrlgatoriamente tambem precisam sar alteradas para que 58 constga relocar 0 BASIC. Essas ~arjaveis controlam a area de vartaveis do BASIC. Sao etss:

VARTAB ARYTAB STRENO

&HF6C2 &HF6C4 &HF6C6

27

Quando urn programa esta funcionando em Dutra area i n i c i a l de memoria que nao 0 &H8008. todas as fun~5es, como 0 carregamento e a grava~ao de um pro- 9 r ama. n a 0 5 a 0 a I t era d as.

o Programa da figura 1.21 divide a RAM em duas partes distintas (&H8088-&HBFFF e &HC000-valor do HIMEM) e colocaremos em cada uma delas urn programa BASIC.

FIGURA 1.21 - Prograia RELOC

F676 F"6C2 ~6C-4 F6C6 F'C-48

c ••• :21.eB. cee3 .6.3 ce.5

c ... s 36.e cee7 23

c •• a HI-FB c.eA 21 •• B. e.eo 22CAFF celli" 22CCFF ce13 22CEFF ce16 22D2FF C.19 23 calA 220eFfO" CtHD C9 celE

C.1E ED .... aCAF"F ce:.z2 2AC.2F6 Ce2:li ED-4:3C2F6 ce29 22CAFF C.':U:: ED-4B CCFF ce:3. :i1:AC",~6 C.33 ED4I3C-4F6 ce37 22CCFF C83;A ED-4BCEFF" Ce:3E 2AC6F6 c."u E043C6F6 c."s 22CEFf" ce".a ED-4BoeFF c.~C 2A76F6 ce4F ED4376F"6 C$S::J 22D9FF" C05i. F;0-4I11D2FF C.~A 2A4SFC Ce:5D ED4348F"C 1:861 :2~o:ii2~F' ce64 C9

FFCA

FFCC

F'F'CE

FF"06

F"FD2

TXTTADE!:CQU VARl"AB=EQU ARYlAB;EQU STRENO=EQU BOTTOHIEQU

LD LD

LOOP =

LD INC D.JNZ LD LD LD LD LD INC LD RET

FLFLPI:

LD LD LD LO LD LD LO LO LD LD LD LD LO LO LD LD LD LO LO LD RET

VARIZ e:au

AIRY = EQU

STR: E:QU

TXTt EGU

BTH. EGU

END

eC ••• H eF676H eF"6C:<!H 8F"bC4t-+ GF6C6H 8FC4aH HL.eae •• H B.3

CHL) ••

HL

LOOP HLp.S9- •• H (Ult.R) FHI,_ (AIRY) .HL (STR)9HL (BTH).HL HL (TXT)pHL

BC. (VAR)

HL. (UARTAB) (VARTAB) .BC (UAR) .. HL BC. (f\RY)

HL. (ARYTAIII) (ARYTAEiI) .. BC (ARY) yHL He. (ST5I)

HL. (STREND) (STRENO).BC <STR)yHL

ac .. (TXT)

HL. .. (TXil"AS) <TXl"TAO) .. 8C (TXT •• HL

BC .. (aTH) HL. (OOTTOn) C III OTTO") .. lie (BTH) • HL

eFFC.AH &FFCCH aFFC£H eFFo ..... IfFF'02H

,INICIALIZA A NOVA ,AREA PARA 0 8ASIC 'CO" ;) ZEROS.

,APONTA AS VARIAVEIS ,0£ SlSTEHA ALT£RNA,TIVAS PA~A A NOVA ,AREA DO BASIC.

,TROCA 0 UALOR DE rVARTAB COH 0

,OE VAR.

,TROCIt. 0 VALOR DE ,ARYTAB COH 0

,DE ARYp

.T~OCA 0 VALOR DE ,STREND CO" 0

,DE STR.

,TROCA 0 VALOR DE ,TXTTA8 CO ... 0

FOE TXT.

,TROCA 0 VALOR DE .aOTTOH COrt 0

.OE en,,_

~o VALOR oPtS ,VARS. O~ SISTEMA fFICA ARHAZENADO ;EI'1 PoPEA MAO ,USADA PEL.O ;SISTEHA

o primeiro bloca do rea de mem6r.a a partIr do

gundo programa BASIC.

o segundo b r o cc • a partir do LABEL FLFLP. a l -

tera as variaveis de sistema para um programa operar a partir do endere~o &HS888 ou para vol tar a area normal de programas BASIC.

28

pro 9 r ama in i cia liz a a a&HB890 para receber 0 se-

05 vatores das variavels de sistema de uma ou outra area de programa BASIC sao arma1enados a partir do endere~o &HFFGA que e uma area nao usada pelo sistema. Dependendo de qual area esta 5endo usada para operar um programa BASIC. os valores que apontam para lugares estrategicos do outro programa sao temporarla-

mente armazenados a partir daQuele endere~o.

t isso que nnss tb t I ita Que voce possa op er ar urn au outro programa em regioes diferentes.

CHAMANDO COMANDOS 00 BASIC

A maior parte do Interpretador BASIC ocupa a pagrna 1 do SLOT 0. mas podem e x l s t l r duas ou mais versoes. 0 que reatmente importa e que ele interprete rigorosamente 0 BAS~C MSX. sem levar em conta 0 local da mem6ria onde se encontra tal ro·t~na au se era differe de um ou mais bytes de urn outro M5X.

Mesmo sendo 0 Interpretador uma especie de po~o de areiamovedi~a (e precjso tomar cuidado onde se esta pisando). existe uma manejra de se simu~ar os comandos do BASIC.

ENTRY POINTS DE COMANDOS

Para que 0 J nterpretador possa local i zar r apldamente os entry points (pontos de entrada) de um comando do BASIC, existe uma tabels que tern infcio no endere~o &H392E (pagina 8). A organiza~ao dos entry pOints na tabela e fe.ta em ordem crescenta de acordo com 0 c6digo da TOKEN.

A menor TOKEN de comando 'a primeiro entry point da tabela (2 bytes) essa token. e assim 5ucessjvamenta ate 0 bela no endere~o &H3B64.

129 (END). 0 corresponde a f l na l da t a-

Disso podemos tirar a formula:

«(~·1·-j?9)·)C~L&I-I~O?E~

rLL• .... __ -c- . .,. C_"'T. ..J 7 ...... ~.

Onde:

EE = endere~o de armazenamento do entry point CT ~ c6digo da tabela de comando

Por exemplo. suponhamos que voe! queira des-

29

cobrir 0 endere~o onde se inicia a rotina do comando PLAY. 0 va I or de sua token e 193. Usando esse cod j go na formula obtemos 0 seguinte endereco:

Consultando 0 conteGdo desse endere~o e do byte seguinte, pois 0 entry point esta armazenado na forma LSB, MSB, obtemos 0 seguinte endere~o:

~I"I}"":-I::"::' ~.\; . ,3 ... ,.!

Esse e 0 entry point do PLAY.

Ao chamar um comando do BASIC. voce passara a operar I iteralmente em BASIC, 0 que aumenta a lentfdao do seu programa.

Alguns comandos sao desneces5ar i05 de serem chamados em um programa Assemblr como: GOTO, SCREEN (as rottnas dos BI05 fazem i550 com maior rapidez), REM, PUTSPRITE (e 5imp~es manipular sprites diretamente em Assembly) e Dutros comaodo5 mais.

Urn comando do BASIC dave ser chamado quando queremo5 que 0 programa fa~a algo que necessite urn at snr i tmo mu it o ccmo l e x o au trabalhoso, como 0 comando CIRCLE ou 0 PLAY, por exemplo.

Vamos apresentar uma continua~ao {fig 1.22) par a 0 pr o sr ama TOKEN (f i 9 1.4). Apbs nb t e r a token de urn comando, ete rmp r lmt r a 0 sou entry point.

FIGURA 1.22 - Rot ina End E~e(

,~OT1NA ENDE:XEC_
e6A2 CHPUT: EQU eA2H
ORG eceS£H ~IHPLEHENTA DE5VtO
C9!!"iE iA L() A. (DE) ,PI' ROTINA EM
C9SF coeeC1 CALl. eel."'''' ~t'oHCl.e.
rA CONTE:H COOIGO
OA TOKE...,
O~G eCleeH
CHJ9 8691 LO B.B1H "SUO-rRAI 129.
C102 90 SUB B
C:1e3 97 AOD A.A ',",ULTIPLICA POR ...
.....
C1.'" 1689 LD D.e JTRANSFE:RE PARA DE_
C196 5F LO E.A
t::le;r 21.2£39 LD HL. 3902Et-I , S 01"1 A co. ... ENDEJ;tECO
C1eA 19 AOD HL.DE flHlCIAl.. 01'1 TABELA
.DE ENTRy POINTS
effie 23 INC HL ~Af>ONTA HL PARA
JA PARTE I'll. TA.
C1eC 0602 LD 8.2 ~l.OOP PI' LER EHDEREI;O.
C:t.8E 3E2e LD A.2'-8H ~IMPRlt1£ ESPAC;::O.
1::110 CDA2ee CALL CHPUT
£:113 ·LOOP:
C.U.3 7E LO A.{HL) ,ROTINA PARA
Cl1 .. E6F9 ANO :t.l.i1.eeee8 ;: n'PRESSAO DO
C116 iF RRA ,-NUHERO EH
C117 iF RRA ,HEXAD£l::IMAL..
CUB iF RRA
C1:l9 iF MAA
ellA C638 ADO A.38H
CII!: FE3A CP 3AH
30 Ci,-e 3892 .JR C"COHT
C12. C6.7 AD£) A.?
C122 COr..T.
C122 CDA2e. CALL CHPUT
C125 7E LO A .. CHL)
£:1.26 E68F ANO •••• :t:tl1.B
C12B C.63e ADD A.3eH
C12A FE3A CP 3AH
Cl2C 38412 .JR C.COt.lT2
£:12E (;667 AOO A~7
C13. CONT2=
C1.:38 CDA2 •• CALL CH'Pu-r
C1:33 29 D£C I-IL .APONTA HL PARA
JA PART£" BAIXA.
£,:1,3 ... 18000 DJI>fZ LOOP ;EF'"ETUA LOOP.
C.136 (;9 RET ~FI" OA ROTINA.
Ci::37 END Vajamos agora alguns ax emp l us de como ut r t r-

zar algumas rotinas uteis do interpretador.

CIRCLE

FIGURA 1.23 - Progra.a CIRCLE

5811 6072 ."'9F £:668 cee3

C0728. 21~oce

;P~OGRAHA CIRCLE.

OR~ e.C0eOH CIRCLE~~QU 5BliH INIGRPIEGU ee72H CHG£T: EQU 9&9FH

CALL INIGRP

1..0 HL.LSASIC

C."6 CDl1~B C&89 CD9Fe.,

CALL CIRCLE CALL CHGET

~INICIALlZA SCREEN 2. ,HL OEVE APONTAR PARA ;UMA FALSA LIN~A 8ASIC .. CHAMA CIRCLE~

;ESPERA UMA TECLA

SER PRE5SIO"'ADA fVOl-TA AO BASIC. "(128.96> .30·.9

ceec ceao cell eelS 1:919

C9 RET

28313238 LBASIC~OEFB 2C393629

.2C3330ee

ENO

Note que, quando simulamos 0 CIRCLE. 0 par Hl deve apontar para uma tabela que contenha 05 codigos ASC II com a 5 i ntaxe do comando. 05 numar o s podem astar em ASC" ou na forma tokenfzada.

DRAW

FIGURA i.24 - Programa DRAW

~D6E ."'72 89?F"

~0e0 CD72ee cae:;! 21i)OCe

,PROGRAI1A DRAW.

ORO 0cee-eH DRA~I EQU ~D6~H INIGRPIEQU ee72H CHGET. EGU e.9FH

CALL INl(;RP

LD HLpSTRlNG

ce86 C:06ESO cee9 C09Fee

CALL DRAW CALL CHGET

JINICIALIZA SC~E£H2. ,H~ DEVE APO~TAR P/ ~UMA FALSA STRING ;CHAHA DRA ....

IES~ERA UMA rEC~A .SER ~R£S5l0NAOA .RETORNA AO BASIC.

ce.ec C9 ce.o

C8tjt,D 22::;33842 C011 "'03a3~2C cet~ 3B31ilt-4' ..... C619 ~54E:S.~33 C~!!:' !'5532~5

RET STRING; DEF8

31

C020' 4E4B4634 ce2"" .... 2:5il324E C028 :55354252 C02C 33"E-4:5 Ce-2F 4C4aS~1E C033 5232~~"''!5 C0'37 ~24h42:t2 C&3B 42"~4246 CGtJ3F 4E: ...... 3:2 1:04:2 ~:54:i'!i2"b C9"6 44474[;48 ce4A 4OZS23442 ceollE "''''554E55 ceS2 334'55246 ce56 "'4iii2:2~. C0'59

DEFB ·NHF4BR2NU~BR3NE·

OEF9 ·LHUHR2UE~F9RBDBFHD2·

DEF8 ·UERFDGLH9R4BDUNU3ERFD"'.0

E:ND

Para s.mular 0 comando DRAW basta apontar 0 par Hl para uma string com os subcomandos do DRAW, exatamente como numa I inha BASIC.

PLAY

FIGURA 1.25 - Programa PLAY

,PROGRAHA PLAY_

ORG eceee-1-4 PLAY; £QU 73E5H

LO HL.STRIHG .HL DEVE APONTAR ,P/ UMA FAI.._SA .STR I NG

CAL~ PLAY ,CHAMA PLAY.

RET ,RETORNA AO 8ASIC_

SYMlMG;OEFB .ff03L2CE~GFH.'

£:.83 CI)E573 1:9'9'& C9

cee7 224F33"",C C80El 32434~2D c.eF 047"'6~22C C8i3 22 ... F33 .... C 1:817 3044345:20 caiB 47.o11F34-43 COiF ,",C3S4f'"33 ce23 424F304"3 C • .27 .... "' ... S2D ... 6 C02B -4520.44-43 ce2F 229.

l:e:31

CONT~ DEFB 'H03L4CE-G04CLB03BO"COE~~E-DC~'.e

END

o modo de armalenamento do play e 'gua! ao do comando DRAW, variando apenas 05 macrocomandos eo entry point.

PAINT

Para demonstrarmos 0 remos primeiramente urn CIRCLE e em segulda vamos pinta-Io.

usc tat

do PAlNT, eKBcutaqual a figura 1.23

FIGURA 1.26 - Prograaa PAINT

:S811 :59C!i 8""72 ",89F

;PROGRAHA PAlNT_

ORO eBe&eH CIRCLE.EQU S8i1H PAINT: EQU 59CSH INIGRP=E&U 8072H CHGET: EQU ee9FH

32

Bliee C072ee
13.03 21 j.380
Be-e6 CD1158
Be09 2.11F'B6
Beoc CDC5:I9
eeeF CD9F'(;6
ElGJo12 C9
B01:3 jlB313238
8017 ;;ZC393629
8019 2C333!)ee
selF 28313238
9023 2C393629
Be27 ~C.313S0e
8021!
LINE ~INICIALIZA SCREEN 2. rHL DEVE APONTAR PARA ,UHA FALSA LIH~A BASIC ,~HAI1A CIFl:CLE.

;HL DEV~ APON~A~ PARA :UMA FA~SA LINHA BASrC • • CHAMA CIRCLE.

~ESPER~ UKA TECLA

i SE~ PRE5Sl0NADA

RET JVOLTA AO BASIC.

LBASIC::DEFB '(120.96) .3e·. 6

CALL ll'oIIGRP
LD Hl-.LBASIC
CALL C:Ir(CLE
LD HL.F'ALlNH
CALL PAINT
CALL CHGE:T ENli

o c om and 0 II NE apr e 5 en t a urn ape c u ! i a rid ad e

em rela~ao aos comandos vistos ate agora. 0 tra~o Que I iga as coordenadas dos dois vertices "aO deve ser 0 s;oal se menos, mas sim a sua respectiva tOken (&Hf2).

FIGURA 1.27 - Programa LINE

-"aeE &e72 009F

ceee CD72Ge

,f'ROGRAI'1A L...INE:_

ORB 4JCeeeH LINE; £QU 480£H INIGRPI~QU e072H CHGE~: EQU .e9F'H

CALl- INIGRP

,INICIALIZA SCR~EH 2.

Ce.83 2100C0

LO

HL.LBASIC

~HL DEVE APONTAR ;PARA UI'1A FALSA ~LINHA 8ASIC_

C~.6 COeE;411
Ce9'9 GD9F0e
C60C C9
Ce91) 283~3e2C
C6tl 313~3B29
ce15 F22a3132
Cel'? 3B2C393,6
C610 29 ••
G01F CALL L..INE

CALL CHGET ;ESPERA U~A TECLA :5ER P~~SSIOHADA.

R~T ,VOLTA AO ~A5tC.

LBA5IC: DEF8 • (30.1.28) • ~.f=";2H •• (1 ~a. 96) " e

ENO

Como voce pode notar, a simula~ao de urn det e rmi nado comando do BASIC e r e I a t t v ame nt e f a c i l . Na grande maioria dos comandos, basta apontar 0 par HL para uma fa~sa J ioha BASIC e chamar a ctevida rotina.

UTILIZANDO VARI~VEIS EM COMANDOS

Quando chamamos comandos do BASIC, passamos I iteralmente a operar em BASIC. Entao por que ~ao tirarmos algum proveito dis50? ~final, devido a comple~ x i dade das rot I nas do l n t er o r e t ador . o e r d emo s urn tempo consideravel de processamento.

Os comaodos do BASIC permitem que usemos parametros numericos e alfanumerlCOS.

33

Se, ao montar a sua fa I sa Ii nha BASI C, voce

colocar algum nome de variavel, quando 0 comando for executado, 0 Interpretador bU5cara na area de var laveis a seu devfdo valor. Esta e urna forma de Sf mlsturar 0 BASIC com programas em Assembly.

ut iii z ando a area norma I de v ar I ave is do

B~SIC, fica um pouco trabalhoso descobrir 0 endere~o no qual esta armazenada uma variavel. Se naO Qu~sermas que sejam alterados 05 valores de determinadas variaveis, basta criar, alterando algumas variaveis do sistema. uma nova area de variavei5 que sera usada Quando 0 programa em Assembly estiver operando.

As var iaveis do sistema Que devem ser alte~ radas sao:

VARTAB (&HF6G2) ARYTAB {&HFSC4) STREND (&HF6C6)

AS melhores var iaveis para serem usadas sao as de t i p o inteiro, pois 0 formato LSB, MSB e facil de ser recuperado pelo Assembly.

Anal isemos 0 programa d a f i sur a 1.28 .

FIGURA 1.28 - PrOgraMa CIRCON

~CIRC;LE CONCENTR 1(:;0.
ORG ec,,"a.8H
F6C2 VARTAB::EQU 8FhC2H
F6C"" ARYTAB=e:QU fW6C4H
F6C6 STRENOIEGIU eF~CoH
110072 INIGIO:P~EGU 6872H
e.e9F CHGET= f;;QU 69FH
~EHl CIRCLE=EGU :seiiH
COG6 2AC2F6 LD HL. (VARTA8)
C0~3 22hlC6 LO (AVAr.!, • HL
ce96 2AC:6F'6 L.D Hl....(9TREND)
ce~9 2263C0 LD (ASl'f;! ) • HL
C0"i.'C 2AC4ro LD HL.(ARYTAB)
ceeF' :::!2b5CB LD (ARYT) • HL
Cfl12 215Bce Ll> HL.I'-iVAR
cel::; 2 Oi!:C2f'"6- LD (VARTAB ~ .HL
eel8 216~C9 l.D HL.FIHVAR
CelE! 22C6F6 LD (STREND) .HL
COlE 2.2C4r6 LO (ARYTA8 ~ .HL
C021 CD720& CALL INlGRP
C0:24 86.A LD EI.19-
C026 LOOP;
ee26 02A::;iEC0 LD HL. (NVAR+3)
Ce~9 23 INC HL
CB:2.A 23 INC HL
C02B ~3 lNe "'L
C92C 225EC0 LO ("'VAR+3).~L
C.e2F" 2i4FCe LD HL.L8ASIC
C032 c:;; PUSH BC
ce3'9 C011:S8 CALL CIRCLE
Cil36 Ci POP Be
ce37 ieED OJI'fZ LOOP
C039 CD",r-ee CALL CH(iET 34

.A~HAZENA CONT~U- 100 DAS VARIAVEIS DE ,SISTEMA QUE DELl,MITAM A AI'il:EA DE ~VARrAVEIS DO IBASIC.

:ATIUA SCREEN:!!.

JCARREGA VALOR DA :VARIAVAEL EH HL

f I NCR£I1ENTA HL.

~AR~AZ~NA NOVO VALOR_ IAPONTA HL P/ LIHHA ;BASIC •.

:;SALVA B.

,RECUPENA B. ;:EFETUA LOOP~ ;ESPERA TECLA SER ; P~ESSIONADA

~~ESl"t,.U! 0- ;VALQR [lAS :VARIAVEIS JDE 5ISTEHA_

LD HL, (AUA~)

LO (VARTlt.B) .HL LD HL, (ASTR) LO CSTRENO).HL '-0 HL.(ARYT)

LO (AFi!YTAB) .HL

RET

LBASIC~DEFB ·(1~B.96).LZ· ••

ce.~c 2A61C. C03F 2;!;!C2F& C042 2A63C0 C~045 ~:2C6F6 C€l4B 2A65Ce C0046 i2~C4F6 C04E C'9

C0"1F :i!8313:23e C053 2C393629 CG!i:7 2C4C2:50'" C0~D 82"",Cee,e0 C0SF ••

C060 &0

Ca.61 0e.g. C963 000e C4l-6S (HUta. C067

FIHVI:lIil:~DE:F"B Ii #WAR I DE~W 9- ASTR; DEFW e A~YT; D~F'''' e

EMO

ENTRY POINTS DE FUNC5ES

logo ap6s a tabela de comandos, come~a a tabela que contem os entry pOints das fun~oe5 do BASIC. Seu ende r e c o inicial e 0 &H39DE .. e sua o r s an t z ac au e igual a tabela de entry points de comandos.

Podemos ob ter f ac f Imente 0 entr epa i nt ut i I j-

zando a formula:

1::-1::· :;;; ;" TF ..... )- ) .)(- '_) -}- i~ U ':j q 1-) j::

., I ~H"\ r _ r lu. ~:'i F ~ ,.J ~ __ _._

Onde:

EE~ endBreco de armazenamento do entry point Tf= c6digO da toten de fun~ao (com 0 bit 7 resetado. )

A tabela da figura 1.29 mostra 0 entry point de cada uma das funcoes do BASIC.

FIGURA 1.29 - Tab€la de Entry points de fun~J~5

&H6861 lEFT$ &H6891 RIGHT$ &H689A MID$ &H2E97 SGN &H30GF lNT &H2E82 ASS &H2AFF SOR &H2BOF RND &H29AC SIN &H2A72 lOG &H2B4A EXP &H2993 COS &H29FB TAN &H2A14 ATN &HS9r2 FRE &H4001 lNP

&H4FCC POS &H67Ff LEN &H6604 STR$ &H68BB VAL &H680B ASC &H681B CHR$ &H541C PEEK &H7BFS VPEEK &HS84B SPACE$ &H65fS OCT$ &H65fA HEX$ &H4FC7 lPQS &H65FF BIN$ &H2FBA CINT &H2F82 CSNG &H303A COBl

&H30BE FIX &H7940 STICK &H794C STRIG &H795A POL &H7969 PAD &H7G39 DSKF &H6D39 FPOS &H7C66 CVI &H7C6B CVS &H7C70 CVD &H6025 EOF &H6D03 loe &H6D14 lOF &H7C57 MKf$ &H7C5C MKS$ &H7C61 MKD$

35

OS HOOKS (DESVIOS)

Baseada na f i 10501 i a de modu I ar i dade e expans i b f I i dade do padrao MSX, aMi cr o s o f t {cr i ador a do Basic MSX) dotou 0 sistema operacional de urn recurso extremamente poderoso: a possibi I idade do usario alterar 0 funcionamento das pr incipais rotinas do BIOS e de alguns comandos do Basic ssm a necessidade de adapfaceo do hardware ou de feprograma~ao da ROM.

Esta caracterfstica e possivel gra~as a estrutura do sistema operacional que, antes de executar os comandos a~teraveis_ verifica em um setor especial da RAM se dave prossegu;r normalmente au tomar urn caminho alternativo def!nido pelo usuario. Com iSSD voce pode alterar as carac1erfsticas de entrada e safda do computador, crlar novos comando5 e ate conectar perifericos nao-M5X ao mtcro, mantendo a compatibi I idade entre os dois.

o QUE SAO OS HOOKS

Basicamente. as NhooksH comportam-se como urn desvio de trem; quando urn comando chama urn "hookn este nada taz, devolvendo 0 controfe a ROM. Mas 0 usuario pod e . c om a U x I I i 0 de POKE 5, a ~ t era r a •• d j r e c a 0·· doc 0- mando. OU s e r a. de sv i a-}o .

Nem todos os comandos e funcoes do Basic e rotinas do BIOS pOS5uem ~hooksH, mas apenas aqueles em que os"hooks" podem te r a I guma ut i I j dade, como veremos mais a frente.

COMO OS HOOKS FUNCIONAM

Urn Dhook~ ~ uma sequincia de cinco bytes. EIt • 5 t em d i v e r 50S •• h 0 0 k. s" e n f j f e ira d 0 5 ft a are a fin a I d a pagina 3 da RAM. mais exatamente entre 05 endere~os &HFD9A e &HFFCA_ que sao preenchidos com 0 c6digo &HG9 ( RET) a 0 5 eli gar 0 C omp uta d 0 r .

Em cada HhookH. cjnco bytes est~o reservados para cada comando ou fun~ao. Quando um comando e chamado. ele executa um CALL para 0 primeiro byte do "nook" que. possu indo 0 byte &HC9 (RET), f az 0 mesmo s e rig nor ado pel 0 sis t ema .

Para causar 0 "desviou citado acima. deve-5e fazer uma sequencia de ate cinco POKEs na area corre5- pondente ao respectlvo comaodo.

Veiamo5 urn exemplo pratico: vamos altera 0 computador para que urn nbip" seja tocado ao se pressionar uma tecla. Para jsso deve-se saber. ante5 de mais nada. se eKiste um "hook" para a rotina de teclado.

36

Pesquisando na tabela de hhooks", constatamos que existe um hook para a rotjna CHGET do BIOS, rese o n s ave l e e t a l e i tur a do t a c t ado . Esse "houk" i n i c i a em &HFDG2 e termina em &HFDC6. EXiste tambem no BIOS uma rot i na chamada BEEP (&H9"G0), que e a ut iii z ad a normalmente pelo micro.

Experimente cornandar:

POKE &HfOG2.&HC3;POKE &HFDC3,&HC8:POKE &HFDCQ_&H@e

Com i550 0 "hookH f~car~ assim:

C3 C0 00 C9 C9

Depois, veja 05 resultados Cpressione algumas

t e c I as l ,

Ago r a f a I;: aDS e 9 u j n t e ~ des I i 9 u e 0 C omp uta d 0 r

eli 9 u e nov ame n t e (R ES ET tot a I I, e en tao dig i t e =

j:i t) 1<' [.:,-_ ~ t,,[ .i' r) ( . ~) ,;. 1-.11 .. - ·-:l (q 1::"1' J i n·.l)

...... t __ I ! , __ . , .. ,." r I. ~ I" ,.. . !,." ~"f\ t '< .

I:) r. 1-: I~:- J..' j" r '::-1-) f' ':) R. I-J ("- t- - 1-' I::' --rOt J I) ~-J '}

" ,... ~:-: f _. _.: .•. ' r •• 1 ,,,, () t" __ . , . r , •

p O!< E (~ H F [) C 4 ) & H (\ (~ < f~ E T I.J H N >

Sa voce procedeu corretamente, vera que perdeu 0 controls do sistema logo apos di91tar a prime;ra Ii nha. Par que i 550 ocorre ?

Pensando-se urn pouco, vem a resposta: ap6s 0 primeiro POKE, 0 ~hook" flcou ass~m:

C3 C9 C9 C9 Cg

Ao pressionarmos novamente uma tecla, 0 computador Imed~atamente executou 0 prjmeiro Gomando do "huo k ". que Eo:

JP C9C9

(C3 C9 C9)

Como e ext r em arne n t e imp r 0 v a vel que ex j s t a a 1- go logico em &HC9C9 e 5ubsequentes, 0 micro 56 pode mesmo entrar em "cra5h~_ Par iS50. tome cui dado ao alterar as ~hooks~. pois alguns s~o chamados em Instantas criticos como, por exemplo. sempre que alguma tecia e pressionada.

ALGUMAS APLICAC;6ES

Existem v~rjos uhooks- que podem ser bteis para a usuario. Por exemplo, imagine que voce queira proteger urn programa em BASIC, impedindo que este POS~

37

sa s e r I j stado. Par a b ~ oquear 0 comando t 1ST, bast a a I t e r ar seu "ho o k" (iniciado em &HFFB9) para urn o ut r o comando, Digite urn programa qua~quer em BASIC e coman-

de:

I·· ." t·· I'" ~'" • ! I'"' r: n r r-, II (" 'j

·1 U ~. .; ,;, r: .. r L.l '/ }' 0x" "',,

~ "I" c- .....

I ....• ",1 I

Aparentemente, nao ha nenhum programa na memoria. Se voce digitar 0 comando RUN, eotretanto, vera que 0 programa continua funcionando! Voce pode tamb~m ser mais ~crue~H e alterar 0 Hhooku do LIST para que este cause uma pane geral no computador ao se tent a r lis tar 0 pro 9 r ama .

No Apend ice t I, lJoce tern todos as "huo k s" do

C omp uta d 0 r lis tad 0 5 •

A MATRIZ DO TECLADO

o clrcuito que controla 0 gerenciame~to do t8c~ado ~ a PPI. 0 teclado do MSX apresenta uma organlzacao matrjcja~ conforme pode ser obssrvado na figur a 1. 30 .

E)(PERT 1. 1 2c~

T '

A ~

FIGURA 1.30 - Conf~gura,iEs dE t~(lado

PPl

p

g ~

1 c . H 3

38

HOTBIT

PP I

o sistema operacional taz a varredura do tee I ado, per man en t erne n t e , I j n h a a p 6 5 lin h a, en v jan d 0 P ara a prlmeiro nibble da porta G da PPI 0 numero da I jnha da matriz do teclado a ser at~vada.

A PPI envia esse numero ao decod~ficador do teclado, que ativa a I inha da matrjz.

Em 5 e 9 u ida, a po r taB d a P Pie con 5 U I tad a .

Todas as colunas que possuirem urn bit ressetado indicarao 0 pressionamento de uma tecla.

Apos 0 s$stema operacional receber esse byte ete consulta uma das 5 tabelas {de 48 bytes cada) da ROM que estao a partir do endereco &H0DA5, para saber o c6di90 do caractere correspondente a tecla pressionada.

As pr lme l r a s 5 tabelas sao para as o r ime i r a s

5 I j nhas o a matr i z , Que correspondem as tee las Que

sao de contro~e ou especiais.

o Sistema Operacional seleclona acordo Gom as teclas que estiverem sendo coojuntamente {SHIFT, teclas graftcas, gridicas).

A tabela que indica a c6digo das I inhas de 6 a 10 do teclado tem infcio a partir do endere~o &H1033. Essa tabela nao faz parte das Qutras, porque o codigo das teclas eo mesmo se outras teclas estiverem sendo pressionadas conjuntamente.

a tabe~a de pressionadas SHIFT+teclas

FIGUR~ 1.31 - Tabtlas dE rEconhE[il~nto de trclJ5 £spE[ia~5

J \}:J3 \;) 0 ~)0 ~~ ~i) ~)~1 (._) (; ';1 ~.,,: J~~) 0 O() L i nha 6
" " n ~r
_ . .-~rjn ~:;,0 ()(~ in O'? 00 -J ,.~ -i.n ~;) 1:) l i nha 7
~.-
J 1.:'. .: ; , I,
t ~14J ;?O OC j- ;.:; }'F :tD lL iF :\,C l t nha 8
tOAn '.J n 2D :,:_~tl ;_:_~ r;- 0" (10 ,., 0 (~ ,;-) L I nha 9
r: ___
10~;,:i3 ') (1 ~H1 ,~ ~1 00 ~-:j (') \; ~1 \? f;> ~h) l i nha 10
., L
Gol una , 2 3 4 5 6 7 8
0 BUFFER DO TECLADO Apos ser feita a varredura do teclado e 0 codigo do caracter ter sido obtido, ele e en~lado para uma re9j~o da mem6ria denominada nbuffer~ do teclado.

'Tecnicamente, 0 buffer de teclado do MSX e chamado de KEYBUf e situa-se entre os enderecos &HFBF0 e &HFC17 (i nc l us i ve). num tota I de 40 bytes. 0 func i 0- namento do buffer it i sua I ao de um banc o , se 0 ca i)( a trabalhar rapido, quem chega e atendido na hora e nao hi poss i b i J i dade de formar f i I a. I SSG e 0 que acontece, por exemplo, quando voce digita urn programa em BASIC.

39

Se 0 ca j x a t r aba 1 har del/agar (ou p ar ar ) , logo t e r emn s a for ma c a 0 de uma f i ~ a que ere s c e com 0 temp 0 ate chegar a cal~ada~ Nessa hora quem chegar vai des i 5 t ira 0 ve rot a m a n hod a f i I a . 1 5 5 0 e 0 que cham a m 05 de »buffer 'otado~. e acontece Quando 0 computador esta e~ecutando uma tarefa muito demorada e voce press i ona var i as tee! as ate 0 eli ck c e s s a r , EntaD, Quando o e Ie acaba a e x e c u cao f i cando 1 i vr e . tudo aqu i 10 que foi pressionado aparece na tela e e processado, como 0 caixa que ~oltou a funcionar tao rapido que esvaziou a f i I a I

INSERINDO OADOS NO KEYBUF

A possibi 1 idade de colocar caracteres no buffer do teclado pode ser aproveftada para slmutar sua digjta~~o. au seja. fazer 0 computador "pensarD que algo foi digitado. IS50 parece inutf I a prtncfp'o. mas para um born programador toda ioforma~ao pode ser uti'. especialmente na arte de proteger e desproteger programas.

Alem dos 40 bytes, e~istem duas variaveis do 5 i stema (PUTPNT. no ende r e c o &HF3f8, e GETPNT, no en~ dereco &Hf3fA) que controlam a entrada e safda dos caracteres do buffer.

PUTPNT aponta 0 byte ~ ivre para 0 pr6xlmo caracter dfgitado. e GETPNT aponta para 0 proximo caracter a ser retirado do buffer. A cada novo caracter digitado, PUTPNT avan~a de urn endere~o, voltando 30 come~o sempre que tenta Bscapar do buffer.

GETPNT ~ jncremeotad~ sempre que urn caracter e retirado do buffer pelo sistema operacional, tambem voltando ao come~o. 0 buffer e dado como cheio quando PUTPNT tenta apontar para 0 mesmo endereco dado por GfTPNT.

Para colocar uma .nforma~ao no buffer devese, alem de escreve-Ia no a5pa~o reservado. acertar as wariaveis PUTPNT e GETPNT. Por exemplo. para inssrir 0 comando

nUN (HETURN)

deve-se alterar os bytes da forma como esti especifjcado na figura 1.32.

41

FIGURA 1.32 - Inser~ndo U~ [amanda no KEYBUr

1< I~:' '.-' q I ~ C ;: , - •• I L \" 1

PUTPNT :~

('" I"· ·"1-1·) :"_1·--'- " .-, :;, f - j 'I ~ "

rDF0 FBFi FH F;:.::~ r-·I-) j'" - •• )

r' :J -- .. ~~

i.!' ·'·'t

',rJ c..

F--- r-'ra'~) ... -,.

41:--

(1)

, [~ , . U' (I '

r: I'" T l·l·', '" jX~ .; , ..f 1\ n

" I " 'l -'. '1 ,. i'l r .... - 1-· "1 i.: t·· c: (' ", .. :.. 'I

). ". ,l. of j _.. \_. r t ,,_, v.: "1_ L_ , _

" t:i I' j I" .... I' 1--' -- ."'. 1·- .. r -o--. J" --, -. .,'

{' r 1 ~ ~ ~:, 1...1 ';:. r \, \.;, l':_ \,0- U

Estes podem ser colocados por um programa Assemb~y au por um programa em BASIC (comando POKE). Ao retornar aD nfvel de comando dtreto, 0 computador executara a ordem contida no buffer como se esta ti~esse sido dfgitada. Mas atencao: os comandos e fun~ 0 e 5 do BAS Ie que I e em 0 tee I ado C omo 0 I NP UT , LINEINPUT. INPUT$, INKEY$, etc reconhecerao os dado5 no buffer como teclas pressionadas e 05 retirarao do mesmo. 0 mesmo vale para a rotlna CHGET do 8105.

Teste 0 n r osr ama da f r su r e 1.33 .

FJr:n

I,,· r+ j'" '1

.. _I .. _

- .. )

FJF(l

I- .. ···j·"'n -- .,: l D

F ~~ t;:-n

r'-' 0 ~::- H

FIGURA 1.33 - Insfr indo [omandos em BASIC no KEYBUF

J 0 ~:) L P [: [: N :t

:: __ ~ 0 ~'1 ~-h -.': COL .. 0 n i ~:,:,; ;< -'1 ,_ :/ II: C H'~ ,]; .:: j_ ::3 )

',:.l ~._ ~:' 0 I:? ·1- ,,;: .( ---- {-, ~ 1::- "-,1 { :': (I~ -)

I ". ., _I. I __ I .. , '" t ,f j . __

40 P 0 K [ J ·t· (,(~ H F H E F }' (~r ~;:~ L ( (i )_ [\ % ( ('j ,]~ • I , 1. :. :.

I~~: '.'1 N C '!( T 'j'" U o 1<" 1::- ;':"_1"1 c- ~':1 '~:-I.:- . ?I .. j I::· .. :.:', ~: P () j<' j::' ;-:_ LII:::~ 1;-- ['l p_l·j I::' I:::

... ~ ~,. t.. . . ..•• J.... _ _or l. . r .... ··I!- _.'1. ";.1 I __ . ... . ... ~ .. _. .. ~ .. _ ~ i .

. ,' 1-) ,.--) 1-;' C ;,;, '--II::· ':.,' C C)' , ~~ t_'II::' I"J' ',', D (J 1/ !~:- u I .. ~ r. _'-::', I:~' u .. ~;~. I .. f r I'~

{j~) ,,' L \"'_ v.. I L } ':-. r __ r", t.. Co: r f '" f J '_.' I f .J

/'0 [ND

o programa coloea no buffer a ordem para aj~ terar as cores da tela. Esse mesmo programa poder ia

s e r faci Imente fe i to em Assembl t . como mostra a f r sv-

r a 1.34 .

FIGURA 1.34 - Progra~~ KEYBUF

F3FB F!3FA FBF6

cee. 2119ce Ce&3 lIFe-FB cee6 ~leo •• cee... E;DB. cues 21F81""8 ceeE :'i22FAF:3 Cai.1 itAE •• C'H" 19 I:.l~ 22FiBf"3 e.18 C9

C.l9 0434F"",C,""F COlD :S::22e3t3:S

PUTPN-':I.::4iU GETf>NT~E"QU f(E:YBUF~EQU

ORG LD 1...0 LD LDIR LO 1.0 LD AGO LO RET

COHANDOOEF8

I

eceefloJ.-l HL.COi"''''''IOO OE.I<£YBUF BC.!:)

61='"3FBI1 8F""3FAH 0F6FeH

,TRANS~ER£ COHANOO rf'AliA 0 BUFFEFt

IDO l"ECLADO

~

'APO~TA GETPNT P/ flNICIO DO COHANOO .APONTA PUT~"T P/ JO ~t" 00 COftAMOQ

I

,HETORNA AO BASIC ·CO~OR 1~.04.7·.13

HL.KEYBUF'" (GETPNT).HL DE. 1 ... HL.DE (F'UT~NT) • HL

41

42

2

OPE RANDO o VDP EM 3LINGUAGEM

,

DE MAQUINA

o sistema MSX i provido de rotlnas especrficas para 0 controle e inicial iza~ao do VOP e da VRAM. Expl icaremos aqui como t~rar proveito delas (no apendlce V he uma I ista completa com todas as rotinas d n B I OS } .

As primeiras rotlnas a comentar sao OISSCR (&H41) e ENASeR (&H44) qu e, qu a ndo ch amadas. chave i am a imagem do VOP. DISSCR faz a imagem desaparecer, 1icando a tela toda com a cor do fundo (quando em SCREEN e) 0 U dab 0 r d a f n a s d ema i s tel as). ENASeR i n v e r t e o prOC6SS0.

Vejamo5 urn programa exemplo na figura 2.1

FIGURA 2.1 - Prograla BACKCOLOR.

Olilu aceee.H
1.16..,.1 OISSCR=:EGlJ ee .. 1H
89404- ENASCIiI!EQU e"~"'1-1
F3EA BDRCLR;£OU 8F3EAH
699F CHGE:T: EGU ee9FH
80b2 CHaCLR~£QU 8&&2t-t
cee. CD41"'. CALL DISSCR .DESABIl.ITA VIDEO.
CIlG3 INIC:
[:e63 CD9F9. CALL CHGET rESPERA TECLA SEll
cee6 FE1e CP 28 "PRESSIONAOA.
ce8B 20e9 .J~ II(IZ.CONT ,CA50 SEJA .......
t:09A 3AEIIF'"3 L[) A. (BORCLR) ,PEGA cos DE F"UH-
ce&o 3C I .... C A ,DO £ INCREHE,.TA.
C6eE 32:EAF"3 LD (9DRCLR) FA JAR"AZENA EM 80RCLR.
CiU:t 19.8 ..J~ CONT1 ;SALTA P/ CONTi.
C0!3 CONT= 43

ce13 FE!D CP 29 .CASO T.,.' ~
e815 2 •• C ...1ft NZrrIH
C0i.7 3AEAF3 LD A. (8DRCUiI) ~PEGA COR DE F"UNDO
C01A ~D DEC III .E OECR£f1ENTA.
ClilI'iiJ 32~AF'3 1..0 (BORCLR).A ~ARHAZENA EH ODRCLR_
(;91E CONTi.
CIHE: £:;:06206 CALL CHGCL.R ,MUDAI COR DE FU~I)Q.
CIiI:.!i :U1E. .JR INIC .SALTA P/ INIC.
CIio23 FIH.
C00i!:3 co ",.c,,\I e CALL ENASCR ,HAEllLITA VIDEO.
C026 C9 RET ~RETORHA AO BASle.
("9027 END o programa BAGKGOLOR utiliza a r c t t na OISSCR para interromper a gera~ao da imagem peto VDP. Em 5e~ guida e chamada a rotina CHGET (&H08SF), que espera 0 presslonamento de uma tecla e devolve 0 seu codigo. Se a tecla for a seta para a direita a variavel fundo e incrementada e enviada para 0 registo 7 do VDP que determina a cor de fundo.

Para enviar urn valor a urn reglstro do VDP usamos a rotina WRTVDP (&H0047) que possui urn funcionamento bastanta simples. basta carregar 0 registrador B com 0 valor a ser enviado para 0 reg.stro. e no registrador C 0 numero do registro do VDP.

Se for pressionada a tecla de seta para a esquar da. a v ari ave l fundo e decrementada, sando seu valor enviado ao registro 7 do VDP.

Se a tecla de seta para cima for pressionada, o programa habi I ita novamente 0 VOP pela rotina ENASeR e retorna aD BASIC.

LENDO E ESCREVENDO NA VRAM

Outro importante par de rotinas e RDVRM(&H4A} e WRTVRM(&H4D) que manipula as POSi~08S de memoria da VRAM. RDVRM I~ 0 contefido do endere~o especificada em HL e 0 devolve em A. Reciprocamente. WRTVRM escreve no endere~o da VRAM apontado por HL 0 conte6do dado por A.

No p r asr ama da figura 2.2 vamos uti I l z ar as rotinas RDVRM e WRTVRM para fazermos um DUMP da VRAM na Imp r e s sur a. 0 byte que est i ver sendo I i do e impressa ficara temporariamente com 0 codigo &HFF.

FIGURA 2.2 - Prograla VDUHP

.",,-40 .e ... A 0liJ9F' .eA'5

ceee 21tH!.ee

I)RG IrJRTVRHIEQU ROVRt1l EGU CHGETI £QU LPTOUT;EGlU

LD

eceeeH ee4DH eU4AH ee9FH eeASH HL ••

JPOSICIONA CURSOR

44

~NO lNIC]O .oA RAM
Cee3 INIC,. ~
C •• 3 ~4 LO D.H "CARREGA DE COH 0
C •• ", ~D LD £.L ~END. DO CURSOIl_
cee::; £:0-4408. CALL ~DVRH ,ARHAZiENA VALOR
C0eB 327aCe LD (VALOR) .PI rSOB 0 CURSOR_
c •• a 3EFF'" LD A.I.lF"FH ;IMPfilIHE CUItSOR_
ceeo CO"D.e CALL WRTVGI" ~
Ce:le CD9Fee CAI...L CHGE:T J£SPERA COMANOO.
C813 FE~e. CP 'p • rCOHPARA COM 'p ••
C615 2&2C JR NZ,CONT ;5E ( ) 5Al_ TAl P/Co.lfT_
to.17 3A7SC. LO A, (VALO~) ,IHPR 111£ 0
celA E6Fe AI"'!) 1.111.8.60 ;:HEXADECIMAl.
ce1C iF RRA JOO 8YTE: SOB
C61D 1F" RRA ,0 CURSOR.
cotE 1F R~A
C",H~ iF RRA
C.Z. C63e AOO A.30H
C822 F'"E3A CP 3AH
C02 ... 380;:! J~ C.IHP
Cct2b C6e7 AOD A.7
C0~9 IHP~
Ce.:lB COA:i •• CALL LPTOUT
C&2& 3A7aC9 LO A. (VALOIiiI )
C0:2E £6eF AND .eeel1iiB
ce3~ C63G ADD A.30H
C.32 F'"E3A1 CP 3P1H
C.3"'1 380::2 _JR C.IHPI
C036 C607 ADO A .. 7
ce38 IMP!I
C03a CDASe.0 CALL LPTOUl"
ce3B 3E2«1 LD A.2eH
ce3D CDA~e. CALL Lf"TOUT
C0-4. 23 INC HL
C&041 181F JM CONT ...
C8-43 CONT::
ce"'3 FE4i. CP of· r5E 'F • FOI F"RE5-
ce",,~ C8 RET 2 ;SlONADO. VOLTA
,AO BAsrc_
(:00-46 F'"E1C CP :!9 JS£ . ., . F'"OR
C.48 2fHtl .JR NZ.CONT1. JPReSSIONAOA
ce4A 23 INC HL .AVANCA 0. CURSOR.
C ... 9 CONT,:
(:.049 f'""E1D cpo. .29- J5E ..... F'OR PRE:S-
ce40 29-0.1 JR NZ~CONT.2 ,SIO".ADA R'E:TROC£OE
Cit ... F :20 D,EC HL ,a ClJr.!5QIiI_
C650 CONT:;!~
C9~" FElE: CP 3. ;SE ••• F'OR PRES-
C05.2 :2Se5 JR Z.CONT3 ~SlONA[)A AVANCA
C0!l-4 060A L.o B.l13 rO CURSOR EM 111'
C656 LOOP1: ;BYTES.
C0S6 23 INC HL
CeS7 Hl~D D..JHZ LOOPl
C0~9 CONT3;
C059 rE1F CP 31 ,Sf;; ••• FOR PRE5-
C0:5B .2l;h,S _JR Z.CONT ..... ,SIONAOA R£TROCf:;:VE
CB50 96eA L.D B.t0 ;:0 CURSOR EM 1e
C9'5F LOOP~= ~BYTES_
C9:Sf"C 28 DEC HL
C06~ :lii~FD D.JNZ LOOP2
C0b~ CONT4=
C0-6.2 FE0£) c:p 0DH ;SE RE1URN F(}~
C064 .=!eeB JR HZ.CONT~ ,P~ESS10NADO
C066 CDA~00 CALL LPTOOl" ~AVANt:A 0 PAPEL
CQ69 3E0A LD A.0AH ;DA IHPR'I::SSORA.
C06a CDA~00 CALL L..PTOUT
t~6E CONT~.
C06E 3A78C0 LD A. (VALOR) ~RESTITUI 0 BY'tE
Ce71 ES l::X DE.HI.. *SOB 0 CURSQ~_
C072 C04D00 CAl.L WRTVI?t1
Ce7~ EB EX OE.HL
[;076 ISSS .JR INIC rEFETUA LOOP _
C07a 00 VALOR: DEFiI e
Cfl79 0'000 END= DEFw e
Ce78 END
45 Ouando 0 programa come~a a operar. surge. dependendo da SCREEN em U50, urn pseudo-cursor no canto esquerdo superior do video. As teclas de controle do cursor tambem orientam a movimenta~ao deste.

A tecla de seta para cFma retrocede 0 cursor em 10 bytes, e a seta para baixo avan~a 10 bytes.

A tecla de seta para esquerda retrocede 0 cursor e a seta para direita avan~a 0 cursor_

Para S6 mandar urn byte para a irnpressora. basta pressionar a tecla ~PN. Quando isto ocorre 0 cursor avanca automaticamente.

S e. a 0 rna n dar imp rim j r urn by t e _ e len a 0 for

.mpresso, .nao sa preocupe. Provavelmente e porque a sua impressora POSSUI um buffer; e 56 come~ara a imprimir quando forem enviados 05 c&racteres &HeO e &H0A (Carriage Return B Line Feed). Para que esses caracteres sejam enviados para a impressora basta pressionar RETURN.

TROCANDO 0 MODO DAS TELAS

As rotinas INITXT (&H006C), INIT32 (&H006fL INIGRP (&H0872) e INIMLT (&H8075) equivalem ao comando SGREEN do BASIC. 0 seu uso e bastante simples, basta chamar a rotioa com urn CAll para que sejam organizadas todas as areas da VRAM e regtstros do VDP.

o unico cui dado que dave ser tomado e quanto ao valor dos registradores quando as rotinas de mudan~a de SCREEN Sao chamadas. pois alas destroem 0 valor de todos os registradores. Portanto antes de chamar essas rotinas guarde os valores importantes no stack para que n~o ocorram "cra5h5~ na execu~io.

CONTROLANDO SPRITES EM LM

Os sprites sao mapeados na VRAM em duas par-

tes:

1) Tabela de atributos (iniciada em 6912).

2) Tabela de formal;ao t l n t c i ade em 14336).

Nesta se~ao. consideraremos sempre os endere~os de ~defau~t". ou seja. com os valores dado5 palo computador quando e I igada.

A tabela de atributos define 05 parametros dos 32 sprites do VDP e ocupa 128 bytes, agrupados de 4 em~. como na figura 2.3. Essa tabela e sempre a mesma para as SCREENs 1. 2 e 3.

46

FIGURA 2.3 - Tabfla de atributos dos SPRITEs.

SPRITE i~69j,6 Y
1691. 7 X
6(;;' j_ B N
{)919 C
"
"
..
"
"
.,
(:'P R I TF :31.:7036 y
,,) "~
7e':37 X
70]0 N
70:Vj:l c
,_ Onda :

Y=Coordenada Y do SPRITE. X:Goordenada X do SPRITE. N:Numero do SPRITE.

C;Gor do SPRITE.

A tabela de atributos e a mesma para definir sprites BxB e 16x16, com exc8~ao do valor de N. que no segundo caso dave ser multipl icado por 4. Por sxemp l o • ao 58 comandar

PUTSPRITE 2y(160,40)yi5,3 taramos~ como mostra a figura 2.4. na VRAM. FIGURA 2.4 - DUIP de parte da tabe1a d~ atributos.

MODO

BxB

16x16 qe lS8 12

15

( y ) ( X ) ( N ) ( G )

Endere~o 6928 - q8 6921 - 168 6922 - 3 6923 - 15

A tabeJa de forma~ao dos sprites inlcia am lq336 {para 8xB e 1Bx16).No sistema Bxe cada grupo de 8 bytes representa um sprite completo, e no sistema 16x16 cada Imagem e deffnlda por 32 bytes. Note que 0 espa~o ocupado por urn sprite 16x16 e quatro vezes maior que 0 ocupado par um axB.'

47

A estrutura dsssa tabela e apresentada na fj-

gura 2.5

FIGURA 2.5 - Tabfla de for.a~ao dos spritrs

Numero End. ( 8x8} end. (16K16)
" 14336 14336
, 14344 14368
14352 '4400
~ ~
63 14480 18352
-----
: ~ -----
255 16376 ----- NaO sa esque~a de que 0 oumero pode varlar de o a 255 (8x8) au 0 a 63 (16x16). ~ f~c~ I ver que 0 e nder e co i n i c l a l de uma t t sur a ( SPRITE) e dado por E=14336+8~N. onde N 8 0 numero definido na tabela de atributos. IS50 axp l l c a 0 porque de multipl iear N o o r 4 no sistema 1Sx16.

MOVIMENTANDO UN SPRITE

A esta hora voce ja deve Bstar pensando como comandar PUTSPRITE sem usar essa palavra do BASIC.

Voce pode dar VPOKEs sa estiver usando 0 interpretador, mas isto nao pode ser felto d.retamente em lM. Como para tudo eXlste uma solu~ao. ha uma rotina no BIOS chamada WRTVRM (&H0040) Que funciona como urn VPOKE; foroece-se 0 endere~o em Hl, 0 dado am A e chama-se &H8040. como sa ve na figura 2.6 .

FIGURA 2.6 - Movilrntando UI SPRITE el Asse.bl~.

ASSEMBLY BASIC
XXXX 21 06 1B LD HL,S912
XXXX+3 3£ FF in A,149 VPOKE 6912,1'19
)(XXX+S CD 40 0@ CAll 004DH
XXXX+8 G9 RET Assjm. e P05Srve~ nao dpenas defjn,r urn SPRITE na tela. mas tambem movimenta-Io. A velocidade conseguida por este processo e mUtto grande serve perfeitamente para a anima~~o de jogos qL8 usam SPRITEs.

4B

Vamos agora comprovar essa velocidade com um programa (fig 2.7) que define urn sprite na teJa e 0 movimenta da esquerda para a djreita repetidas vezes. As satas de controle do cursor controlam a pausa, aumentando-a (seta para baixo) au diminuindo-a (seta para c ima ) .

FIGURA 2.7 - Hovimrntador de SPRITEs

00.047 e04A 60'40 005C e06F 0'99-1 0087 01005 F"3f;:6

C000 CD6Fee C003 3A£0F3 C006 CBt?' C008 47 C009 0Ee1 ceea CD04706 r:00E. 3ti.00 C0l0- CDB4ee CfH3 E8

COl ... 2l7t1C0 C017 010B00 C01A. CDSC60 COl!) 3E00 t01F C00700

e022' 3Ebit C024 C0-4D08 C027 23 £:028 23 C0:29 3Eee C02B CD-4D0e C02E 23 C0:?F :lEeS C03i CD4D311o C034 3l:20 (:036 3iV'9(;9 C039

C039 0609

C03B

C03B C5 C08C 3E"~ C03E C087'ee ce.ql 23 C042 CD4Aee C04:l :JC C0-46 CD4D00

C049 3A7 .... C0- C04C 47 C04D

C043 i0FE C04F Cl C050 10E9 C052 AF C05:J CDD5<hl C0"56 FE01 C05S 2009 C0'5A FE05 eElse 280F C05E FEEl3

ORr> IJf;lTVDP:EQU RDVRH ~ EQU I.U;trVR H: EGU LDlRVH=EQlJ INIT321EGU CALPAT:EGU L;ALATR.!::I'lU GT5TCK~~GU j;!G15AV:EQU rINICIO

CM.L. LD SET LD LD CALL '-0 CALL

f::X LD LD CALL lO CALL

LD CALl.. INC INC LO CALL INC LD CALL l.D LD

LOOP01

LO

LOOP.

0(:000"" 047H ~4'HI 04DH 0SCH 06FH eS4H 9B7H ~D5H OF3E0H

INr:T3~ A.(~G15AV) erA

It.A

c,t

... ~tVDf' Are CALPAT OE.HL HL.TBL Be.9 LDIRVH AFe> CALATR

A,96 ~RfVRtt HL

.... l

AFe W~TVRH HL

A.S WRTVRH A,82 (TEHP)~A

PUSH DC

LD A~9 CALL CALATR INC HL CALL ~DVRH INC A

C A.Ll. W~ 1 VIH'Ii

LDLD

TEMPO.

D.JNZ POP D.JNZ XOR CALL CP

.Jf;t CP

.JR

Cft

A.~T£HP) B,A

TEHPO Be

LOOf>

A r>T5TCK 1

Z, f;lAP ID '5 Z~lEHro 3

,HODO SCREEN 1. ; PAoSSA 5P1H T£S

I PARA NoDO AM,PLII'IOO 9:><8_

,PRocw;rA lNICID rOO PADRAO 0. rCRIA 0 PADRAO_

rBIISI~A A1RI·· lilUTOS DO ,SPR1TE 0. ;COOR[}. Y.

i'PADPAC> "'.

,COR [J (VER, MEL.~O I. JA.JUSTA 0 rTEMPO.

rLOOP EXTERNO. ;P~£PAI:rA Q ,LOOP r NT(:I< NO_

,SP~lTE e_ ,COOItO_ Xo ;LE 0 VAl..O~. tAVtlNCIi ~. ,E5CJI£VE DE. i ..... OLTA.

j' HARCA 0 TEH·· rPO_

rVOLTA Sr._ rFECHA LOOP_ ;LE 'Sf-IA}]" OE ,CURSOR.

, SOil E" •

JDESC£.

rDIREITA_

49

t:0.!i9 C[] RET Z
c'06t 1BD6 .JR LOOP9 ,F"ECHA LOOP8.
ce63 RAPlOI
C063 3~7."t:0 LD A. t TEI1P) .DECREME .... -rA Po
C066 FE01 CP 1 .VARJAIJEL TEHP_
C068 2BD1 JR ~.LOOP
C06A 3[] DEC A.
C068 1SQ7 JR CONT
C060 LENTO~ .INCREMENTA A
C06D :3A79CCIIo LD A. (TEMP) ~VARtAVEL TEMP_
C070 A7 ANO A
ce7l 028[;8 JR Z.LOOP
ce,.;) 3C INC A
C074 COtHI ~ATUAL.1ZA 0 VA-
1:074 3279Clt LD (TEMF')rA .LOR DE TEMP_
Cc:tJ1 :l.f.lC2 JJl l-OOP
C079 Tic:"''' ; OS 1
C07A f"f" lBLt DB eF"FH rPADRAO DO
C07D Bl 09 B1H JSPRITE_
C071': a~ CHJ IHH
C07D Hl DO 13tH
C07E 81 DR 131H
C071=" 8l DO BlH
C080 I'll DB 13lH
(:99t rF DO eW~H
C082 END CHAVEANDO SPRITES

Vamos apresentar agora uma maneira de se fazer com que um sprite muds de forma rapidamente.

A id~~a , multo simp1es. Basta definirmos y~rios padroes (loQicamente na tabela de padroes) e quando quisermos mudar rapidam~nte a fDrma. do sprite basta alterarar na tabeta de atributos 0 terceiro 81~mento que controla 0 sprite. apontando-o para outr~ padrao (Dutro SPRITE). A defini~io d05 padroes pode ser feita atraviz da rotina LDIRVM do BIOS. Que permite que transportemos urn btoco de b~te5 da RAM para a VRAM.

o programa da figura 2.8 ira controlar um SPRITE pela tela, conforme uma tecla de cuntrole do cursor seja pressionada, indtcando uma d.re~ao_ Alem de movimentar 0 sprite na direCao indicada ele a~terafa, na tabela d@ atrlbutos, 0 numero do SPRITE fazendo com Que a sprite mostrado tenha 0 seu padrao alterado rapldamente.

FIG~RA 2.8 - Prograla chaV5prite.

e0YF 00SC 9061="

C000 CD .... F0~ C003 2ft-see 1:906 110038 C0Q9 0lB000 C00C CD'SC06 r:e0F 1B12 cell

O-FIG f:HGF-"T: ECilU LDIRVH=EGU IN.l32;E~U

CALLLO LD LD CALL ..JR

0C00t'1H &'iFH

eSCH

06Fi-I INIT3~ HL.SPRITE DE.3S0-GH ac , l2B l..PIRVH TECLA

,TRANSFERE ~A~A A ,VRAI'i OS BYlES ;GUE {)EFINEH OS ,-4 SPRITE!"l_

ancl

59

cell F1

C612 061C

eel4 3263ce C~H7 2!61Ce ellA 110018 CGID tH84ee C:::fJ20 CD~C •• CG23

C023 CD9F0. C • .26 FS

C:::927 FEIC C929 200A C002B 3A6':1l::. c:e2E C601 ce3GJo 3~&:;;!C:. ce33 IBDC C9:J~

C13!i FE1D C03;>" 2e.A C9:39 3A6::2C8 c.ac 0601 Clt3E 3<62C. ce ... l lBCE C943

ce43 FE1E C045 2f1eA C047 3A61ce C ... A D691 ce .. c S::;:06!Ce ce .. F tBC. Ce::il

cesl FEIF CIS3 200111 C.S!i 3A61ce ceSB C6el Ct'l'5A 326Ice C05D 1992 t:flSF'"

ce::w Fl

C869 [;9

ce61 60

(:062 ae

C06:l 0eeF Ce6'5 e0161BlC C.69 FE1C1819 ce6D ••• SlS3B ce71 7F391B"B C.75 &&eelC:SII::

C.79 7F8aeaea ce70 eaea(30B7r cee1 :JEle.ae. ce8~

POP

,Rl::CUPERA TECLA ~PRESSIONADA ,6U8TRAI 2a PARA .5ELECTOHAR" SPRITE ~CORRE:TO

fARHAZ~NA Ng DO PADRAO_ fTRANSFER~ OS OAD05 ,PARA A

fTABELA DE

rATRIBUTOS.

,ESPE~A TECLA SER ,PRESS10NAOA.

IARHAlE~A CODIOO DA ~TE:CLA NO STACK fVERIFICA SE E ' •• _ ,CASO AFIRHATIVO • rlNGR£HENTA

,COOROENADA X

rDO SI'RITE:_

, SAL TA P / HoHC _

AF

gUll

2S

LO LD LD LO tALL

(DIR£C) .A HL.COR'r DE.IE1e0H BC.-t LDIRVH

T~CLA'

CALL CHIiET PUSH A'-

CP 28

.Jaf NZ.CONT LO A. (CORX) ADD A.I

LD (COR:X •• A

JR INIC

CO"T-

r:;p 29

JR HZ.CONTi LD A,(CORX) sue 1

LD (COR X) • A

JR INIC

,VER IFICA BE Ii .... _ .CASO AFIRHATIVO. IDECREMENTA ~COO~DE;NADA X

,DO SPRITE_

,SALTA P/ INtC.

CONTil

CP JR LD SUD LO ..IR

39 NZ.CotH2 A. (CORY) i

(COR 't). AI IHIC

,VER IFICA SE IE • ","P _

,CASO AFIRHAIIVO. lO£CREHENTA ,COORDEHAOA Y

,DO SP~liE_

,BALTA P/ INIC.

COHl"::21

cp JR LD AIJO LD .JR

31 NZ.t:ONT3 A. (COR .... ) A.I CC:::ORY).A Hue

,VER IF ICA SE E! .....

fCASO AFIMHATIVO.

J IHC1'IEHENTA .COORDENADA Y

fDO SI'~ITE_

,SAL'-A P/ INJC •

CONT'JI

POP AF rLIHPA STACK_

RET FPETORNA AO 8ASIC_

CORY' DEF9 96

CORX.II OEFB 128

OtRECI DEF8 •• l~

SPR1T£.DEFEI .e~.ieH.1BH.1CH

DErB GFEH,lCH.1SH.1eH SPR1T1'PEFB eeH.eSH.IBH.38H DEFD 7FH.3BH.1BH.eSH 6PRIT21DEFB eeH.eaH.lC~.~£H DEFB 7FH. eSH. 0SIi, 0BH SPHIT~ID£FB 0BH.eSH.&811.7FIt DEFB 3EH.I~H •• 8H.e0H END

ORGANIZAcaO DA SCREEN 3

Par Dcasiio da publ ica~io do QAprofundando-se no MSX". dissemos que a SCREEN 3 era Organilada de forma complexa e seu estudo detalhado naQ seria importante~ ja que 0 I i~ro tratava quas& sempre da I tnguagem BASIC. Agora que estamos falando de I,nguagem de maquina. achamos oportuno discutir como ala funciona.

A Organila~ao da VRAM quando 0 VDP asta no modo SCREEN 3 i dada pela ftgura 2.9

51

FIGURA 2.9 - Tabelas qur co.poe. a SCREEN 3

0-2847: 2848-2916: 6912-7039: 1433B-16383=

Tabela de padroes dos caracteres. Tabala dos c6dtQos impressos na tala. Tabela de atributos dos sprites. Tabela de padroes d05 sprites.

o funcionamento e as tabalas dos spr.tss sao jguais as das outras SCREENs. 0 que vamos expl lear sao as duas primeiras tabelas.

A prtmeira tabela indica quaIS caracteres estio "impr85sos" na tela {i seme1han~a da SCREEN 2) e para faci I itsr 0 entendimento ela sera comentada posteriormente. pais seu conteudo e um pouco diferente.

Convem aqui expl lear que na SCREEN 3 um _ caracter e diferente do normal: ale possui duas I inhas de dois bloeDs (total=4), e cada btoco made 4 pontos da SCREEN 2 (ver figura 2.1"-

FIGURA 2.10 - Partes de UI caractere da SCREEN 3.

81 82

83 84

Um bloco pode tar uma das 16 COfes geradas pelo VDP. Os b~OC05 B1 e B2 sao representados por um mesmo byte (4 bits da esquerda para B1. 4 bits da direita para 82); 63 e B4 usam 0 byte seQuinte (cada caracter exige dois bytes para ser definido).

A tabela de padroes define as cores de B1 a 64, e. portanto. cada caractere usa dOls bytes. Ela comporta 1024 caracters5 (8-255 quatro vazes) e 6 div j did a em qua t r 0 par t e s (f i 9 2. 11 ).

FIGURA 2.11 - Organiza,ao da tabe]a de padries.

Tabela

Endere~o linhas de tela

8 0-511 0- 4- 8-12-16-29

1 512-1623 1- 5- 9-13-17-21

2 1824-1535 2- 6-10-14-18-22

3 1536-2047 3- 7-11-15-19-23

52

No entanto. 1024 caracteres Sao mais do que 5uficientBs para encher a tela sem que dois deles se repitam (768 Dastam) 8, entao, apenas 192 caractares sao aproveitados de cada tabela (192x4:768).

A tabela de c6digos dos caracteres impressos e unica; mas para facF~ itar imaginemos que seja dividida em seis partesl cada uma responsavel por quatro t~nhas consecutivas da tela (Qx32=128 caracteres). As t inhas 0 a 3 da tela sao preenchidas com os caracteres de e a 31. urn para cada coluna. As I inhas 4 a 7 sao preenchidas com os caracteres 32 a 63. e 3ssim por dlante.

Analise a figura 2.12:

FIGURA 2.12 ~ Organiza,ao da SCREEN 3.

END i1J

512 B3B4
TABELA
DE
1024
PADROES

1536

)
G 1 2 31
G , 2 31 TABELA DE CODIGOS

'" 1 2 31 DOS CARACTERES

0 , 2 31 IMPRESSOS

3233 63
3233 63
3233
3233 TRANSFORMANDO A SCREEN 1 EM SCREEN 2

A quase totaljdade dos j0905 feitos para MSX usa como f undu a tela de 32 caracteres (SCREEN 1). 0 usa general izado da SCREEN 1 deV8-se a grande velocjdad e e fa c iIi dad e de ma nus e j o. a I em dab a i K a qua n tid ade de memoria exigida para definir seus caracteres.

53

Normalmente. a SCREEN 1 p055U j 256 caracteres defin(veis CDm uma cor de frente e outra de fundo para cada ojto caracteres (~octetosH). Com um POUCD de t~cnica. a SCREEN 1 pode passar a usar 168 caracteres distintos e oito cores de frente e fundo para cada um de seus caracteres. aumentando a definj~ao da imagem. Naturaimente. a memoria usada na VRAM para este imptemento e bem maior que a usada normalmente pela SCREEN 1.

Na v er dade • essa ~'mag i ca" e fac j Imente exp licAvel: ala cons~ste em fazer 0 computador "pensaru que esta operando na SCREEN 1 enquanto 0 VDP opera no modo SCREEN 2.0 resultado disto e podermos (Iiteralmente) d I 9 ita r . I, 5 tar. i mp t j m ire ate 00 r 0 1 a r" ate 1 a i n t e , r a c om as fa c iii dad e 5 d a SGR E EN 1 e c om a de fin j ~a 0 de imagens da SCREEN 2.

Bas~camente. 0 que temos a fazer divide-se em dois passos. 0 primeiro e passar 0 computador para SCREEN 1, cern isso tOd05 05 dados na VRAM e as variaveis de sistema ficam acertados para permitir a visualjza~ao d05 caracteres, a digita~ao e a edi~ao de programas. 0 segundo passo e mudar 0 VDP do modo SCREEN 1 para SCREEN 2 sem alterar as tnforma~5es da mem6ria. Issu poderia ser felto pelo comando VDP{N)=X. mas ja 8xIste para isto uma rotina do BIOS: SETGRP (&H7E ).

Vamos entio para urn exemplo pratico: Oigite.o programa da figura 2.13 .

FIGURA 2.13 - Progral3 qUE lransfor.a a SCREEN 1 £1 2

:l. 0 COL. 0 r~ 1. ~,:i y 4 j' 7 ~~.~ 0 s C I~ [: E N t

':~ c:;:, I') I::' F:' I I ~:~ ~~ ::~: :J.' 1··1"11::' :: X ::~: I J c: 1:-' ( !;.. )

"._._ . ... t. _,_ 1 _ 1,:\ .I r.., __ o,_) '<. r.c ....

40 FOR 1=0 TO 2:FOR J~0 TO 255~

I.::' fA 0 ~, !'" l j 'I A 'I" ',}I::" J J " N 1'" X' --(' I ]'

.,~ ',,-, V P ~\ F::, d .. ~"l ," + .. ~I.' I: •• ~.! C) +, ),...'1 [::, I ,., y ,

. (_:.-. j:: (" I') '1' :::: 0 '1'" ':~'~ 47 .... A· ::;: I:> I::' ['1< ( 'I' + '7 j (',.,'-:I )

6 .. :! ,J", , I.._, I ... ~. . ._.. • , .. ,. v, •

'".V (.; l I I:) () 1< I;':' '1' +~) .. 4 n A

.r ~', >I '. ,., • • • ••• 0 0 ~

B ~, iJ P 0 ~< [ I + 4 (19 C) y {:;

() ~1 N [: X T I: F 0 I~ I ;::: n j_ (1 ~~ T 0 1. 4 ::l 3 ~) .. " I) I:' (') ) 'I~:' r . ;:~ ,l :: 'dl:~' X'1' '1':: I::' N I')

:i. ~i!,(} . <. ,.. J, ) '" ,L 1'( ,.,' .. ,.. .

Ap6s executa-1o, veja como a tela 2 se parece com a teta 1. Digitando alguns comandos. ~oci percebera que 0 cursor 56 aparece no primeiro ter~o da tela (por que 1). Experimeote agora alterar a tabela de cor e S (i n i cia d a em 81 92 ), c om a 5 e 9 u j n tea I t era f; a 0 !

54

Oepois de radar 0 pragrama novamente (gostou do festivat de cores ?), 9xperimente outras aiteraco8s a seu gosto. Ao final do processo a VRAM passa a funcionar da seguinte maneira:

8-20476: tabela de formas para o pr ime l r o tert;o da
tela.
2848-4895: tabela de farmas para 0 segundo terl;O da
tB~a.
4896-6143: tatJala de formas para 0 terceiro tert;o da
- tela.
614'1-6911 : tabela dos cbdigos impressos na tela.
8192-10239: tabela de cores para 0 primeiro ter~o.
10240-12287: tabela de cores para 0 segundo terc;o.
122B8-14335: tabela de cores para o terceiro terc;o_ Alem desses endere~os, h~ tambem as tabelas dos sprites, que nao sofram altera~ao.

Vamos agora juntar 05 conhec~mentos aprendidos ate agora e transforma-Ios em algo mais utI I.

Foi tratado no Gap(tulo 1 0 funcionamento dos hooks, e se voce der uma olhada no apendice I I vera que existem hooks de muitos comandos do BASIC. InctuStye do comando SCREEN.

Entao, por que nao criarmos a SCREEN 4 ?

o programa SCREEN 4 (fjgura 2.14) quando eKecutado, aponta 0 hoo~ do comando SG~EEN para 0 inicio da rotina. Assim sempre que 0 comando SCREEN for executado, 0 controte passara para 0 programa e serao feitas todas as inicial iza~Des para qUB 0 VDP gere a SCREEN 2, enquanto 0 Interpretador opera em SCREEN 1. Tambem 0 padrao do caracter 255 (cursor) e alterado na tabela de padroes do segundo e terceiro ter~D da tela para que 0 cursor seja vis'vel por toda a tela. As tres tabelas de cores sao preenchldas com &Hfe (cor de fundo transparente e cor de frente branca}.

o va~or do topo do STACK sera descartado, pa~ ra que 0 controle volte ao Sistema Operacional, e nao para a rotina do SCREEN. evitando assim, um etro de sintaxe. Afinal a sintaxe do comando SCREEN nao acelta o parametro quatro normalmente.

FIGURA 2.14 - Prograla SCREEN 4

ee-of'" 087E 005C 80'72

ORO 8D0e0t-1 INIT32;£QU ee6FH SETGRP=e~U ee7EH LDIRVH~£QU e.~CH IHIGRP;EQU 807~H

55

ee~6
FF"Ce
63Eo'i
o'i!Jle~ :;IEC3
0&8.2 32C0F"F
D0e~ 2i0C09
0088 :22C1FF"
0868 C9
[}ttttC
DB4!lC FE.15
oeeE Ce-
o "H.'I'=- D9
001a- C06f' ••
0613 CD7EOe
[)016 21RFiB
D-e19 1'- ••• B
ODIC 0i080S
De-1F'" c[)~ce.
O.e.22 21BFle
082'5 11.6019
ne2B 01ee",s
oe28 CO'5Ce0
002E 2H~'.::;!,~
0931 01FFt7
0034 3EF"0
0036 C!)56ee
-0039 21F"80F
D03C 130 18a69-
Oil-3F'" 3£FF
0",-41- C:05600
D0""14 21Fal7
0047 01890.
0 ..... 1\ 3EFF
00 ... C C056"~
D0-4F D9
0650 33
DIiit~1 :33
oe~2 D7
[}0:""i3 C9
00S.oII FlLVRHIEQU HI(SCRE=EQU END= EGiU

LO LO LO LD RET

CP RET

f:Xx CALL CAl.L LD

LO

LD CALL LO LI) LO CALL LD LD LD CALL LO l.O LO CALL LD LD LO CALL EXX

tHe INC RST

FlET END

e"'5bH

'0FFCeH

6-3E'AH

A.0C3H (HIC5CRE) • A HL.INIC (Htt;SCR£+i.} .HL

i.:SH HZ

lNIT32 5ETGRf'

-u., UJBFH DE. ee8H Be. seeH L..DIRVH

HL. IBBFH DEFieeeH BC. B0eH LDIRVM HL.:208&1-t 8C.17FF'"H A.1111eeeeB FILVRM t4L.0FF8H aC.B

A.0FFH FILVRH

HL .17FBH eC.9

A.0FFH FILVRH

SP SP l$H

~APOHTA HQOK 01-1 ,SCREE~ P/ 0 ~INICIO.

;RETORHA AO 8ASIC_

,VERIFICA SE • 3.

J5E () RETORHA PARA ,ROTIHA DE SCREEN ~ARMAZEHA REGISTRAOQR£S_ rINICIALIZA SCREE~ 1_ ,SETA VDP P/ SCR~EN 2_ .~RANSF~RE TAaELA

.DE PADROE5 P/ 0

,.21il TERC;:O DA

.rELA.

,TRANSFERE TABELA ~O£ PADROES P/ 0 ;31;1: TERCO DA .TELA_

,PREENCHE TODA A ;tA8ELA DE CORES

.COM BRANCO ~FRENT£' ~E INCOLOR (~UNOO)_ :PREENCHE COM 6H~F .OS 8 8YTES QUE DEFY.HE" 0 CURSOR NO

~22 -rERCO.

,PREENCHE CO" &HFF ;OS B 8Y~ES QUE DEFI~ ~NEM 0 CU~SOR NO

~3~ TE~CQ.

,RETORNA VALORES

.OOS REGISTRAOORES

:PEGA PROX_ CARACIERE ;OU COHANDO D~ HASIC ,RETORNA AO BASIC.

Api icando argumas das informa~oes sobre os hooks (Capitulo 1) vamos elaborar um programa que, uti lizando 0 hook do comando GMD do BASIC. (que tal qual 0 comando IPl nao e implementado no sistema). altera 0 hoot apontando~o para uma rotioa de auxi I io para a SCREEN 4.

FIGURA 2.1S _ Prograla CHO

Otl:O -0 (:;0 0011
fl05C l.DIRVMIEGU 00'5C1I
ceQ-it E~ PUSH HL JA~MAZICNA HI...
CtHH 09 E)(X I SALVA Rcn}!:IrR05
ceeoz El POP ilL JR£::CUrCHn HL.
C003 .23 INC HL rlNCIH;;'M~N1A HL_
ce .... J"E L[) A. (HL) ,CARREGAo EM 1\ 0 CODIGO
IFl-SC11 DO N9 DA TA!-IIO:LA.
C00'5 E5 PUSH HL ;A~HAZFI>IA HL_
C006 0630 suo '0 ~ , OB H:.H 0 N~ iJfl 1 ASI-I.A.
CGt0B :210019 LD HL.Bi92-seeH ~END_ OA TABELA- OE: CORES_
Ceil'B 11.e09 LO OE.ae0H r COHPR IME.·no OA TA8ELA_
ceeE -47 LP EI.A
C00F LOOP II ,LOOP !HjE APOJ.tTA HL 1'/ A
C6ef= i9 ADD HL.OE r 1 ADELn DE t:mu·.~ [)E UH
C018 101'"D DJN z LOOF' I ;Of:fE.FlHtNADO TERCO
lOA l·ELA _ :DA TELA.
56 ce12 ED

EX DE.HL

CiH3 1::1 te14 23 Ce!.5 7E Ceil. FE.·41 C.18 3S.:t celA 06e,.. C01C

C.1C ()63e CII.lE E6eF ce~e C827 C022 CS0iil:7 C02 .. CP.:27 C.~6 C02?' ce29 41 ce~9 23 C.2A 7£ ce2B FE ... t ce.20 3ae~ C:Q.2F 0667 C.;.:I1

C831 D63.

POP H~.

INC HL

LD A. (HL)

Cf' 'A'

JR C. CONI

GUO 7

CONT-

SUD AND SCA SLA SLA SLAI LD 'Ne LD CP .JR sua

COI'HI ~

SUB

C833 8e C834 4F ce35 0&0e .c.e~7 E5 Ce:l8 (;'5 ce~9 Ei Ce:lA 29 C.3a :il9" C03C 29 C.3D £5- c::eSE C1

ce::tF 1;:1

C0-40 7B

c ... , 81

ce .. 2 SF ce43 3E.". C04:5 BA CII46 139

C .... 7 ':57 C.4B ~3 C.49 eleee.

OR to LO PUSH PUSH POP AOD ROO AD[~ PUSH POP I'OP LO ADD LO LD AUC AOD lO INC LO

C.41:; tDsCe& C~"'F 33 C8S0 33 cast 1J'jI ce.52 (;:5

C8:53 e61'C ceS5

te:S5 23 te::i6 1el""O cess Cl C859 07 t:9::1f'1 C9 cesEI

CAL.L.. INC INC EXX l"USH LD

'0 •

00ee:tl1t9 A

A

A

A

B.A

Hl.

A. (HL)

'AI ' C.CONTl 7

'e'

a

C.A A,e HL

Be

HL HL.HL UL.tn. Hl., HL HL

IIC

HL A.E A.I:

I::.A A.8 A.D A.a D,A HL 8C.8

LDIRVH SP

gp

lie B.12

lNC HL DJUZ LOOP2 poP Be fi:ST 1"H RET

END

f P All' ~l)E:' I'l E:CEB E END_ ~DA rA~tLn DE CORES tRECUPERA HL E JIHCREHEN1A_

rLE COD_ DO lQ DIGlrO. tT~9tA 5£ E L£T~A.

IS£:: AF IRHAI IVO ~GUBTRAI "]f_

JOBTEH VALOR ~O~RETO rOSiEH lQ NID9LE. ,DESLOCA 91lS

rP/ l:5QUEI'IDA.

IGU~RDA lQ NIBel~ ~N B. JINCR£HENlTA: HL.

rLE COD. 00 2q DIGIfO. iV~R1FICA 5E E LETRA. r51': AFIRHATrvO ,5UBTJlAI 7.

,Ol1TEH VALOR 00 I~P. NlBBLE.

,jUNTA os 2 N1SBLES. .TRANSFER£ 0 VALOR JI"AMA 0 PnR IIC.

JSOHA Be COM DE PARA ~OaTER 0 ENDERE~O ONDE JSE INICIA A TAB~lA

,DE CORES QUE INDICA AS ,CORE5 DE fHFNTE E DE ;FUNDO Of UM Ofl~~~HINAOO CARA~lE~E. ~APONTA 11L .... / A STRIN'O. *CARREGA BC CON 0 ;TAf"'IANHO Df) 5'~:I'(G .

• COPIA STRING NA VRAM. ,LIHPA STACK.

,RECUPERA OB REGISTROS_ rARHAZENA BC.

~Loor QUE APONTA HL .PA~A 0 FINAL. DO ,I;OHANDO.

J RECUPER A Be.

JLE PROX. CARACTE~E. ~R~TORNA AO HASle.

o prOgrama GMO aux iii a a SCREEN 4 n a man I PUla~ao das tabe[as de cores de urn caracter.

Ele funciona da seguinte maneira. Quando 0 lnterpretador chama 0 hoot dD comando CMO, 0 par Hl aponta para 0 infcio dos parametros do comando. Voce pode criar a sintaxe ou a fun~ao que desejar. No caso criamos a 5eguinte sintaxe para 0 CMD.

57

CHO"XVYzzzzzzzz"

L:=:

caracteres que definirao a cor de franta 8 fundo. c6digo do caracter em hexadecimal.

~---------> n6mero do ter~o da tela a

que corresponde 0 caracter.

Veja na figura 2.16 urn e~emplo de usa do GMO.

FIGURA 2.1h - EXflP10 de U50 do CHD

C DI" d E- co!" (I Ef I'" cn t E~ fun d o

c ()d i DO do

(-- "-, I" "-; c· t c» Y.. 1,\ 1-'" , .. ,

// '//

i j 1-) , &HC ) t i ( t~HH ) '··HCH
_ l: .. "', ., G ....
") i;?(&HC) i j. (&HB) gHCD
f.'- ...
':~ j, ;,;~ ( & H c: ) :1. :1. (&HB ) &HCD
v,
-4 ") lJ(&HD) &H~~~D
(; ..
I'" r)! tJ(&HD) ~~ 1 I") 1"'
~.'! .: .. (;~ ,- «.. )
6 ") 9 8,H~?9
r: ..
..... j_ I:.:j ( (\ H n ) (:~ &HFf:l
/ I.
n -II::' (RHO ) I'~ 8,HFH
......... 1 --- • D )

o

o

o comando correspondente a figura 2.16 serial CMDN:t 40 XZX .... ·- ) 0 0"'"

o valor que estiver no topo do STACK deve ser sempre descartado pois caso contrario. ao encontrar 0 primeiro comando de retorno (RET,RETZ,etci a execucao ~oltara para 0 comando CMO que nada mals faz Que chamar a rotina de erro_

Fica como exerclcio fazer com que 0 Gomando CMD lela tambem vartaveis tipo string.

58

3

USOS DA IMPRES50RA

Neste capftulo veremos como tirar melhor prove j to d a 5 u a imp res 5 0 rae como c amp a t I b I liz a rom i c r 0 com 0 padrao de caracteres da impr85sora. Esse prQgrama pode ser mUito uti t para os possuldores do Expert que utft izem uma impressora padrio ABICOMP.

H~ tamb~m ·v~rias versfies de c6pia gr~fica e um programa que transforma uma MoNICA em uma impressora MS)(.

COMPATIBILIZANDO 0 SEU MSX COM A IMPRESSORA

A maioria das impressoras nacionais POSSU! 05 caracteres acentuados usados na lingua portuQuesa. respeitando 0 padrao ABICOMP. Porem se voce reparar bern na tabela de caracteres da impressora 8 na tahela de caracteres do micro, vera que 0 cbdigo das 1etras acentuadas estao embaralhados, uns em rela~ao a05 outros_

Se voce possui 0 Expert, coisas muito estranhas podem acontecer quando um caracter e enviado para a impressora. Ja 0 HOTBIT faz as devidas convers6es ~ara 0 padrio ABICOMP.

Agora vamos ver a porqui dessas coisas estranhas acontecerem. 0 padrao ASCI I (americano par sinal)

59

determina a fun~ao dos 127 primeiros caracteres do micro ou da impressora. Nas impr e s sur a s lmportadas. 56 haviam esses caracteres. 05 de c6digo majores que 127 ou eram uma repeti~ao dos 127 primeiros au naD apresentavam fun~ao especifica. t550 porque a maioria d05 micros 56 enviava 7 hits para a impres50ra, 0 Que permlte no maximo 128 cbdigos diferentes.

Com a ex p I 05 a 0 dam j c r 0 j n forma tic anD Br a 5' I , fOI criado 0 padrao ABICOMP, que nada ma15 e do que a redefini~ao dos caracteres maiores que 127 pelos caracteres especiais usados em n05sa lingua.

Mais r e c e n t emen t e (1986), foi c r i ado 0 padriio ABNT (Associal;ao Brasileira de Normas T6cnicas), que e o padrio respeitado pelo Expert 1.1 .

Os car act ere 5 de &HB0 a &H9 F, par em, con t j n uaram com a mesma fun~ao dos 32 prjmeiros (caracteres de cantrole) ou sem nenhuma fun~~o. dependendo dn fabricante da impressora.

Em c e r t a 5 rno del os d e i mp res S 0 r a, v 0 C e pod e ,

par exemp~o. ativar 0 modo expandJdo enviando 0 caracter &H0E ou &H8E. Note que:

&H0E::::&B 0000 i j,0 1- &. H 13 E :::: & B t 00 0 t 1. 0 :t

o caracter &H0E e 0 &HBE com 0 ulttmo bit setado e como naquela epoca a maioria dos micros so enviava 7 hits para a impressora, 1550 nao tinha muita importancia.

As acentuadas n05 MSX come~am no caracter &H7D e term;nam no &HB9 e portanto, se compararmos as tabelas de caracteres do S6U MSX e a de uma impr8550ra que respeite 0 padrao ABICOMP ou ABNT, 32 caracteres (de &H7D a &H9F) nao serao reconhecidos pela impressora como letras a serem impressas mas como comandos_ A figura 3.1 apresenta a tabela de caracteres do Expert, do HOTBIT e de uma impressora padrijo ABICOMP (no caso. uma MoNICA PLUS).

Note que as tres tabelas estao organizadas de maneiras diferentes: as dos MSX devem ser I idas t inha par I inha de cima para baixo, enQuanto que a da MoNICA deve ser consultada coluna por col una da eSQuerda para direita.

o s I mb o l o d a ··1 ibra", o o r e x emp t u . na t ab a t a do HOT BIT est a n a lin hag. c (] I una G. Po r t a fl to 5 e u c 6- d l so em hexadecimal sera &H9C. Na t an e t a da MoNICA, este mesmo simbolo esta na col una B, I inha C. Neste caso 0 seu c o d l sn . em hexadecimal, sera &HBC.

6e

FIGURA 3.iA - Tabela d~ caracteres do Expert 1.0

• 1 2 3 ... 5 IS ., e 9 A I C :D E F
8 Q ,. • • -+ + .. a 0 :!l 0- Q 1) .fj "*
1 + .J.... T 1 t- + I - r l L .J "",/ ./- .... +
./ ..... ,
2 I II # $ % & I' ( ) :t +
- /
J .
3 0 1 ,..) ..-, 4 .c:- .; '"? 8 9 < ;;:: } ->
.:... ,:J _.' j 1
4 ~I A B (. I- E F G H I ,J K L t'l r·~ I]
....
5 F' 0 R S T U V l,~ X If Z [ "- ) ,'.
... -
6 .-. a b r' d e t 9 h i .j k 1 rn n 0
.. ' ~.
T t=' q r· c: t u I,} W X ~ '7 { I -. r .£..
_. .... I .f :r-
e ...... .... ~ a ~ ~ " ~ ~ ~ ...., , . ..... A
u . ~ 1 1 1 A
9 e: .:.= Jl: e .;,,: b .-- -, ~ -:..: U ¢ -£ ¥ 1\' f
'-' IJ. 1.1. ~-'
A ..: ,. .... I). .... ..., o, 0 ; I/, ~a \'"
..::i 1 I_I f. N '-' r- -, .". I «
... _"_ ..
I ~ "'. .... ..,. b tj 0 u B ij J4 .,/. A 0/ 'IT §
I-t d I 1 U ,. to 0
C •• - -I •• • I • ."1' '"-: ... T ~
• ..
- >~ .... -".', ......
, ~% H • • ~o r. * • I I -
• • :w .... 0:.) -
E C( E r JI z (J L~ " ~ .s. Q .- !Ii ...-- n
I) «(, I-
0 .~
F ,... + ::- .::: r .J - """ o • ·r "I, .-, I
- - .... - .. FIGURA 3.1B - Tab€la de cara[terES do E~pert 1.1 f HOTBIT 1.1

8 1 ;2 3 4 5 6 , e 9 A B C I' E F
I G It • • + + • a (~) It) 8 £! J) Jj '*
.,_
1 + ...1... T 1 r- + I - r l L .J X ./ '" +
2 I II # $ % &: ,f" ( , * +
) - /
J 0
3 (1 1 <"') 3 4 5 6 7 8 9 · < ::: } .-::~
.:.. )
4 ;):1 A B r D E F G H I IJ K L t'1 t-J (I
.....
5 P Q R S T U V W ' J I • ..... [ J _ ....
1', T L , ...
-
6 '\ a b c d e- of g h 1 _J k 1 rn n (J
T t .- I . , _ "v
~ .~ r· s I_I. IJ W X '~ Z ..... , J .:..
e (. ~ ~ A ~ .. ~ f 6 , ~: ~ t~1 :...
.... U C u ~ H
9 E fE 6 .. " " '. .. ., .. ....... £ ¥ • f
"* I.) iJ. V. ':.1 0 u ,
A ~ , .~I l~. ..... N 0_ (.0 (. ~1 ~a ~« "j-')-
-:::I 1 t I - r- .., I
r-·"
B A ~ .... ..... ". 6 '" , ... IT Ja 0/ • ... . " 'fT ;:::;
I 1 U U I,...r. ,. I) V , ...... .=:
C •• • - -I •• • I • // :~~~ ...,. ~
- // .....
-
, ~x M • • • « iJ * r .. ) • I I-
• .. 0 -
E P r ]I ~ ,u '1 ~ ~ n f, !Ii --- n
a a JL 0):. t:
F - + - ~ ~ r J , ..., 0:0 • ·r -,-, .", I
: -- ,,"- - ...
- •

IIX~_':"ERT = Cz



HfljTBIT = t't

61

FIGURA 3.iC - Tab€la da impr£ssora HoNICA da Ele~ra

0 1 2 3 4 5 6 7 B 9 A B C D E r
0 NUL DLE SP 0 @ p • p ~p 0 i b
1 SOH DCl ! 1 A Q a Q ~ 6 ~ 6
2 STX DC2 .. 2 B R b r A 0 ;1 0
3 ETR DC3 • 3 C S C B A 0 a 0
-
4 E01 DC4 S 4. D T d t A o ~ 0
5 ENQ NAt< l 5 E: U e u Po lE a. ~
-
6 ACK SYN &. 6 F V f v C tJ I; U.
--
7 BEL ETB • 7 G W Q \II t 11 l! II
-
8 BS CAN ( B H X h x ~ 0 f! a
- --
9 HT EM ) 9 I Y i y :E: U ~ u
. ..
1tr. LF SUB * : J Z .:, z ~ IJ e y
oJ
r-- >---
B VT ESC + . K [ k I 1 l B

C FF FS • < L \ 1 I r r. i a
-- r-- .~ f---
D CR GS - • M ] m I ! t 0
.- t-- --
E SO RS > N ~ n - 'I e 1 ~
·
I--- - .. - r : l--
F 5I us I 7 0 0 R 0 fi
- Existe tambem 0 fato de Que nem sempre os caracteres acentuados do micro e da impressora representam a mesma tetra acentuada. Por exemplo: 05 caracteres &H0E e &HBE ativam 0 modo expaodido~ e se voce comandar

I f) 1-· ·1· N 'T' -'.', fI

__ -<.. u

a impressora podera comecar a imprimir no modo expandido.

Uma maneira de se conseguir que algo seja impre 5 S 50S em pro b lema 5, 0 use j a. c om as de v ida s let r as acentuadas, e colocar no lugar a caracter que possua 0 mesmo codigo da letra acentuada na impressora.

Por exemplo= No EXPERT 1.0 0 "e:" pos5ui 0 Codig 0 1 26 • 56 que n urn a i mp res so rap a d r a 0 AB t COMP (n 0 caso urna M6NICA 6030) 0 "cn possue 0 c6d~90 166. Portanto, para que a impres50ra p05sa imprimf-Io devemo5 enviar-lhe esse cbdigo, que corresponde ao caracter "a~. No texto, ent~o. deverfamos escreuer um "~~ no lugar de todo "~".

Essa e uma maneira maio tndecente de se tazer as coisas, mas telizmente fuoclona.

A outra maneira e .oterceptarmos 0 caracter que 8sta sendo enviado para a impressora, atraves do hook da rotina LPTOUT do BIOS e verificar 58 ele e uma

62

letra acentuada. fazendo a devida conversao de acordo com 0 padrao da impressora que est~ sendo usada.

Vejamos 0 programa da figura 3.2 .

fI6URA 3.2 - Prograla Fi1tro

ORG ece-6litH
ceee FE68 CP 60H ~UEf;tlf'lCA SE Ii! ,.!;:~.
C882 ~a13 JR Z.CHINU rCASO AFIRH. SAl.TA_
(;884 FE7E Cf" 7EH ,TESTA SE E HENOR:
.QUE SH7E._
C'''''6 oa RET C ;CASO AF'I~I1. RETORNA.
C •• 7 FESEI CP €ISBH rVEA:IFICA SE Ii
~CARACT£RE GRAFICO.
ce&9 De RET ... c ~CA:SO AF"IR .... REl"ORHA_
ce0A E:5 PUSH HL JARHA.lENA HL.
ce8B [)5 PUSH DE ;:AJ;!I1AZENA [)E.
C&0C 219ceF LD HL.TABCOV-7£H ;:APONTA HL P/ TAUELA.
C88F 1.696 LD 0.9-
CliH1 SF LD E.A ,COOHiO DO CAi?ACTE.RE;.
C81.2 19 Aloe HL.DE ;SOI1A HL CO ... DE.
C013 7£ LD A.CHL) ,CARREGA A CO" CODIGO
I£.QU1V_ Oil! U .... REBSORA.
C8t4 D1 POP DE ::RESTAURA DE.
eelS E::l POP HL ~ A ESTAURA HL.
ce16 C9 RET =AETORNA AO ElASIC.
CCH7 CI'UNlJ;
eel; 3EC6 LD A.0C6H =CARREGA A COM r.:. ••
C&19 C.,. RFT ;REIORNA AO BASIC.
C01A TABCOVt
C91A. A6:2e7ED9 DEFB 0A6H.028H.97EHp6D9H.eCBH
C01E CB
C0lF C:;JC4C1C5 DEFB 8C3H.eC4H.0C1H.&C~H.e6.H
C0 .. 3 6&
Ceo:!4 C9CAC7CE OEFEI eC9H.0CAH.0C7H.eCEH#eCDH
C9>28 C[)
C029 CBA ... A2AS DEFB &C6H.eA~H •• A2H.0Aa~.eD5H
C920 OS
C9:2E 9:5828380 D£FB 0E15H. 6R2H. elll ::iH. Ole e .... eoBH
£:032 D9
C0-.33 D6DAD:3D9 DEF8 e06H •• DAH.e03~ •• 09H.920H
C837 2e
ce3B 2020:!920 OEFIJ e2DH.02eH.D2eH.e20H.&C2H
C03C C2
C03D CCD107CF" DEFB .CCH#eD1~.eD7H.0CFH.e~FH
C8'41 AF
C042 DCODOE;i2e OEFB eoc .... eDDH.eDEH.02eH •• ~eH
C"46 20
£:047 282002028 [)E:F9 020H.620H.e2eH.e2.H.D2eH
C0AB·28
C04C A4C4AECE DEFB eA4H.eC4H.0AE~.eCEH •• B3H
C05e 93
C0!:;1 B3B9D9:i2e DEFB e03H.0B9H.eD9HTe2eH.028H
C05S 28-
C4:'IS6 END Note que esse programa pode como at i b iii z ar 0 seu micro com qua'quer padrio de imprs5sora. desde que ela possua 05 caracteres acentuados.

5e sua ;mpressora nao respeitar 0 padrio ABIGOMP_ basta a~terar a TABCOV do progama do modo descrito a seguir.

A tabela representa a sequencia de caracteres acentuados do micro, a partir do caracter &H7E. Portanto no caso de urn EXPERT 1.e. 0 primeiro e'emento da tabela representaria 0 "C~. A( basta procurar qual 0

63

c6digo do ~C~ na sua impressora B colocj-Io como 0 primeiro elemento da tabela. E assim 5uces5~vamenta ate 0 final dos caracteres acentuados.

TRANSFORMANDO UMA MoNICA NUMA IMPRESSORA MSX

Alguns modelos da impressora MoNICA da Elebra permitem a redefini~ao dos caracteres. Essa redef'ni~ao respeita alguns parametros Que nao Sao intuito deste I ivro descrever. Se houver interesse n05 parametros dessa redefini~aD procure maiores informacoes no manual da MoNICA.

A fonte de caracteres redefin~dos ocupa uma

parte do buffer da .mpressora e, para que a MoNICA comeee a imprimir com 05 caracteres redefinido5, e n e c e 551ft rio a t i v a r 0 mo d 0 0 u a lid ad e Car t a com 0 5 car a cteres &H1B (ESC) e "cn eo modo Fonte Alternativa com os caracteres &H1B (ESC) e "7~. Para desat'var. com os car act ere 5 , & H 1 B , •• W' ( 0 u a lid a dee art a) e & H 1 B, '. 6 ~. (Fonte Alternativa).

Se urn caracter nao for redef~nido e a impressora estiver com a sele~aO de fonte alternativa ativa o caracter impresso tara 0 formato da fonte residente. o programa a se9uir gera urn arquivo em disco, lendo a tabela de caracteres do seu MSX e definindo uma fonte para a MoNICA, com 05 caracterss graficos.

FIGURA 3.3 - Prograla IHPM5X.BAS

1 0 l' *' "* ·IE 71: * ,)(:- .)(. * ~f .)f .)(. *' ~. :',1( •• )(- .)(- -)~ .~ .).t .J(- "'" ~. * -)(- ~( .)1;,. ~. *" * -)(. 1(' -JI:)t )(-

, :t(. N n .[ r: E" D E f- -1- (" l J ['1< r- r) o I I J .. r ~I:

;'?0 HE rv , dU .:. . __ ,"J .::. :.t.. --_ . x..

30 y* IMPMSX- JULHO -1986 * 40 1********************************** 1,:.:)'0 D .... I .. · I Nl' A Z' "('I c:

r.:. -- _ - , ".:,

6 0 P r~ I N T N j. ....".. G cr 'i-:\ r' (:\ I" q IJ i v o f o n t f:' .. "

70 P 1'< I NT ";:2 .... U 11 " C j·:\_lr f' (?9 {:1.~,. F'o n t: (.:.: .. ii

n 0 A $, ~:~ I f~ P l.J T ~l( 1. )

9 ~) I F A ~ < ),. i nTH ENG 0 T () 4 1. 0

j. 0 ~~ P R I NT:: P P :I: NT f' G F Ii AND 0 A r~ (~U 1 V 0" f )' U 1-1 G U A R

l)E M or .. f'

- - T A ~) j 'l "r-:- 1::' ..;. 1-;:- () ") ") j . n 1 --I "c- -. ,-}

i i 0 D A .. t,. ,J .. y (:~. 7 .1. '" '" r .1- ,.J T • .. .. .;)..:1 ~. _. b (;} y . - -~ ..... ) _ •. / I,' ..

y184Ti92y-80yi92,254y-31

120 OPENflIMPMSX.ARQu FOR OUTPUT ASHi 130 PRINT»i,27;9i~

64

140 FOR Y::::0 TO 4 150 READ IN,FIyCO 160 FOR T=IN TO FI

j_ ? 0 [) r M D ( 7 r 7 ):: Pi:::: 170 = P ~~:= 1 70 t EH? FOR L::::0 TO 7

1.<"10 IF PEEK(8')fT+&HiBBF+L)=0 THEN 350 ;} 00· A ~fi ~::: BIN $ ( PEE K ( n ~. T + & H i B 8 F + L ) )

210 IF LEN(A$)(>8 THENA~=H0"+A$:GOT0210 ;;!.;?0 7::::0

230 FOR C=7 TO 0 STEP -1

240 IF MID$(A$rC+1Ti)~n1"THEND(L,C)=3+5* (C+1): IF Z=0 THEN D(L~C)=D(LrC)+128:Z~1 ;.:.~~:;0 NEXT C

~}60 NEXT L

270 PRINT#i,CO+T;P1;P2;0~ 280 FOR L=0 TO 7

290 FOR C:0 TO 7

300 IF D(L,C){)0 THEN PRINTHi ... D(L,C); 31.0 NEXT C:: NEXT L.

320 ERASE D=PRINTU1,0;=NEXT T 330 NEXT Y:PRINTHi,27,93

340 CLOSEHi=GOTO 400

]~)0 I'::· L >::1 'fHEN GO TO 380

r-) L J'~ I:) j :::: I~) .( A 1-, I [) • .., 1::- i::; ,... ( ') A ( 7 , ... I * ':~) ) )

.~) 'C)', . ,I, I'<!, (I •.• ,.) .... , ,~, .•• {. ••

';~ '"1 fJ, .. , () '1' () r} 1 0

... }.' '1(, b c., C)

:,_" C) 0 P '1,,,, f) ") A t I [- ( {-t l:~' 11:':' ---- ( ., A ( j c:- ~., ,.) *' L ) ) )

.) C f.:. ",. I;.. "I J c __ d ,.J G.. ,..J,;;_ •.

:390 nOTO ~260

-400 P I~ 1 NT N A R QUI V 0 G ERA [) 0 .. 1/ t ..... PRE~) S ION E Q U A L (~U E R TECLA U :: A $ :;;: J N PUT $ ( 1 ) : J~ UN

410 POKE&HFFB6720i

4 ") 0 LJ 1 "A 0"" I M I:) M <:' X ,. ~~,

c.. 0 .. _ \.1 ' , , .J,.. L D m

4 ~10 C L £) : P R I N T n i_ II..." E ~.~ p e-: r t: v e r· sao 1" 0 '"

4~0 111-'[k'·1·v0 E· t i iH

.. , ,~ " Ii i.,'_.. .. II n •• ~,: p f..''''.. v e r" S i:-\ (J •

-4 ::5 0 P 1< J NT N 3 II .. ". HOT BIT rr

46(1 (.:I~I;::;:INPl.JT<]j( 1.): IF A$-( }'""1""THENGOHUB640 470 POKE&HF4i7,255

4- n (; 0 P [ N !I IMP M S X II A R Q N F 0 I~ I N PUT AS» j. 490 INPUTUi,.L.

500 LPRINT CHR$(L);

510 IF EOF(i) THEN CLOSEUi ELSE GOTO 490 520 POKE&HFF86ri95

530 POKE&HFFB7r0

65

t:;'40

,.J

~::iB0

1::'"(:)0 ,.J r

600 i} i ~1 6;?(~ 1.>30

P o« E&HFFB 87 &HD0

IF A$~HiH THEN POKE&HF4i7T0 L P R I NT C H R ~~ ( ~~? ) N G I-' C H R qj ( t fj ) LPRINT" a ••• +.·aO.~2'n*u LPRINT"'t.1.T~ ~tl-rl LJX/"\+"',;

1"'01:1 l 301'() ")1..:"

.. " .. :::: c., t: .• ,) •• )

t.., P R I NT C H I~ ']; ( L ) r NEXT L

L P I~ I NT C H R $ ( :2 7 ) JI Q rr C H R 9; ( f.j 0 )

P I~ IN T"" M I C R 0 LIB ERA DOn :: END

640 DATA 7Er20~A6~D9rC8TC3~A2rCi~BB,C6,C 9tC0TA1r87rA3yA9rB2rAi~A8FD5y857D2TD4~D0 yD8,D6,DArB21B9,20

~ ~:' 0 D A 'I' A "'i 0 ") 0 'J 0 >; ;... I"' .-)

\J ,.~ c: 7 c; y I:', r C •• "17 T I .. t: ..

I. . 0 DA1'A ("(' D -I 07 ("£:' AF' [)(" I')[) ')0 ':l/>' '""rIA r)

) (.) " '7 .1. ~ ,.,.., r- r r ' .• r.. •. L:.. I" I ... '0 , C .. '(I I' ro •.

I." ") 0 r) 0 , .. 0 '") 0 .... 4 (" 4 A E .... 1 .. · "l '") I" "1 E~ C) I) 1'1

'(.I I" I:" I' «: 7 t:!. y I:.. , r f"1 'Y" y" .:, r L ::. F" :, ,) r ,J.:J r .) }" I' ' r

,h 7 0 I~ [S T O!~ E b 4 0:: FOR L :::: 0 TO 57: I~ E AD 1 ~Ij. ~ p 01< E & H D t :] (;) .,. I... I' VA L ( ,.,. &. H ,.,. + Z 0;1, ) : N EXT :: P 0 K [ & H D j_ ~,~ t ., Be H tl 0 ~ H E T lJ R N

Quando uma fonte dessas e carregada na MoNICA e e ativada pelos devidos caracteres de controle, a tabela de caracteres da impre5sora fica como mostrado na figura 3.4 .

FIGURA 3.4 - Tabela de caracterts COl FontE carrrgada.

66

- 2 (J 91 A ~;l
Q 1 '1 5 6 !7 is B C D
I
0 NUlfDlE. SP 10 @ t ( :p BP ) 1- u
, . . '_,
1 SOH!DCl ! 11 9 -'- r- 'q I _ !: ( :'~ I ;_ !
- ~. j ~_ ~. ! T I " i ~ ~'"' ,- r--
2 STX DC2 .. : 1:.B r! :
) E T X DC ) t I] i' i I 17-+!3 • jx lr l~_~
EDT D-~~-t-s i 4 !. f-l", t" r--
4. - • I i s 1
~ EN'Q'I NAN I I ~ ,1.- it-'j'~ u ' " 18
15 I · • !
r .. - ACK SYN' L 61. ~ I~ v 1 • ..
,6 ; a
- . - . - .. ~ . - ..
17 BEL! ETB -_:_p - }) l~ ~ . ~ I I ~ I
;8 13S !CAN! ( i 8 a !l x I I • % f I
r • •
r . -- -- ...... _
I ; I Desse modo ja consegulmos fazer a MoNICA imprimir todos os caracteres graficDs do HSX_ Agora vamos apresentar e comentar urn programa que, tendo sido o hook da lPTOUT desvfado para ele~ gerencia a MONICA para ativar ou nao a fonte de caracteres e impr.mir 0 devido srmbolo desejado.

FIGURA 3.5 - Progra.a IHPH8X.ASH

99A'!5

D8ee 323:301 1)&~3 09 Dee4 3A2f'101 oee7 FEfT oee9 CA~A08 Doee 3A2EDt De~P FEFF 0011 2B5-4

D4H3 3A2BD1 D916 FEFF D01B 287:2

De1A 3A33Oo1 D"10 FE;:el

D81F CACEO&

D822 FE1e 002'" CA93De

0929 3837 lH,2B FE7E

092D 0:207D6 0&3& FE6& 003::1: CA.2:201 00035

D035 21BhFF D038 36C9 D83A 21.341H oe30 96"" D03~ 3A2CD.1 D042 FEf'"f'

DIl .... "" 29&-4 D9 .. 6 23 D047 23 D~ .. a 90602 D04A

0,,"41:1 3A:::!:DOl 000"'D FEFF De4F" 260C DeS1

0651 7E D0~2 CDA:se0 00~~ 23 D05h 10F9 D0::18 21o::!ODl D05B 3600 Dl'I";)D

O.':'.iO :ii!lB6F'F"" 0069 3t.C3 D9-62

096.2 09 D9063 31\3301 00066 C.,.

DQ,67

D"'h7 3A3301

OAG

LPTOLJT;EQU LO E}(X LD CP ..IP LD CP .JR

LD CP .)f;t

LP CP

..IP

CP .IP

Cp

.JR CP

..lP CP .JP

TSTFFA~ LD LD L.O LO LD CP

JR INC INC LD

CONTIN:::

LD CP .JR

LACOz

U" CALL INC OJN2 LO LO

REST;

LD £..0

FIH~

E:XX LO I?ET

TEse,:

LO

000eeH 0A5H (CARAC) TA

A. (Fl.AG) ~FFH Z.PRI32 A.. (FLESC) 9FFH z.TESC

A.(FLCOL) 0FFH Z.RESCOL

ZrSETFLu

1BH ZTSETESC

20H

NC.CGRA b0H ZrCHINU

.... L. eFFBbH (HL) r OC9H tiL, TAB;! Br4

A" < FLGC > fIoFF'H

NZrCONl'lN HL

HL

Br2

Ar (FLFA) 0FFH NZ.REST

A r (lfl. } LPTOUT HL

LAC!) HI...FLFA (HL) • e

HLr0FFElhH (HL) r 0C3H

A. (CANAC)

A r (CtlRA.C)

.ARMAZENA CARACTERE ;ARHAlENA REGIST~AOORES :VERIFtCA SE PR~CEO.OO ~PELO CODIGO 1

;SALTA P/ PRl"32 ,VERIFICA SE PRECED1DO .POR ESC

~CA60 AFIRM_ SALTA ;1"/ 'rESt:

~VERIFICA 5E PR~CEOIDO ~PQoR E:"SC .Q'

~CASO AFIRM_ 5AL~A :f'/ RESCOL

;P~GA CODIGO CA~ACTERE .VERlFJCA SE VAl S£R ~ENVIAOO CARACT£R~ ;GRA~lCO ( QUE 32 ,CASO A~IRM_ SALTA

~P/ SI;;TFLG

;VERIFICA SE ~ ESC ,CASO AFIRM SALTA

:P/ S£TESC

,VERIFlCA SE i CARACTERE :OE CONTROI.E:

~CASO A~IRH SALTA P/ FIH ~VERYFICA 5E ~ CARACT£RE_ ;GRAFleo l QUE &H7~

,SE AFIRH_ SALTA P/ CGR~ ;VE;:R1FICA SE. Ii '.,;'

~SE AFIRH_ SALTA P/ CHINU

~RESTITUI 0 HOOK iDA L.PTOUT

,APONiA HL P/ ESC 'H"

:V£RIFICA 5£ LETRAS ,OEVF.M SER IHPRESSA$ =EM QUALIOADE CARTA

;S~ AFIRH_ VAl P/ CONTIN ;APONTA HL PARA

.ESl: '6·

.VER1FICA S£ F_A_ ;£STA ATIVADA

;SE AFIRK_ SALTA P/ REST

.OESATlVA FONT~ A. ;E Q_CARTA QUANDO tHECESSARIO

,R~5SETA FLAG o~ ::;f'"ONTI;: A.

rAPQ.NTA Hoa..: OA LPTOUT ;PA~A E9TE PROGRA"A

tRETOHA VALQR£S DOS : REIJI5TF!AD(,1FU:::S

rVOLr~ AO IHTERPRETADOR

;VE:RlfOICA 5E FOl

67

D6b"," f="E47 CP '6 • IENVIADO ESC 'e .
0861: 28J07 JR HZ.CONT 'S£" AFIRH_ SE:TA
D0bE 212C01 l-D HL.FLGC ,FLAG DE iiUALIDAOE
0671 36FF LD (HL' • eFFH I CARTA_
oeT3 1Bl0- .JR TEREse ;SALTA PI' TEREse
0675 CONT= ,VE:RIFICA 5E F01
007:') FE'U~ CP 'H • ,ENVIAOO ESC '" .
De;>,? o;z007 .JR NZ.CONTI ,;SE Af"H~H. ~ESE'fA
0879 212.C01 LO HL.FLGC ,FLAG DE QUALIDAOE
De7t:: 360'e LD C HL) .0- ;CA~"A~
067£ 1811-5 .jR TER£.SC:: ;SALTA "'I' TEREse
D~a. CONTI.
DeBe 212B01 LD HL.FLCOL , PRE5UHE-S£ QUE FOI
0083 36FF LD (HL) .0FFH .. ENVIAI.)O ESC 'Q'
,F"LCOL .. SETADA P/QUE
~PROX • CARACT[:R S£JA E'N-
~VIAOO SEH INTERFI~:I?ENCI A..
Dee!"i TEREse.:
D085 212ED.1 L() HL,FLESC ~HESe:TA f"LAG
neSD 368 .. LO (HL) .0 ,0£ ESC
De-SA 1006 .JR FU1 ~SAL TA P/ FII'!
DeBC REseOL:
De8C 212BD1 Ll> HL.FLCOL .IiESEO:iA FLAG DE
D8SF 3600 LD OiL) .e ~COLUNA
oe9~ lOCF JR FIH .SALTA P/ FIH
0093 SETESC;
De93 212E01 LD HL.FLESC ~SE::TA F"LAG
00096 36FF'" L.[) (HL' • eFFH ~(}E ESC
D098 lBCB JR f"IH ;:SAL TA ~/ FII'1
089A Pfl: 132=
009A 212AOl LD HL.FLAG ~RESE::TA FLAG DE CARACTERE
0090 3&96 L.[) (HL) • e ,HEHOR QUE 32
009F lHPFAI
OQ9F 212001 LO t-IL.FLFA FVERIFICA SE
D0A2 7E LD A. (HL' ~FOHTE A_ ESTA
00A3 FEFF CP 0F'FH ,ATIVA
08A5 28BB ..JR Z.FIH r5E AFIRf1_ SALTA PI' FII't
D0A7 36FF LD (HL) • ;!S5 ;SE'TA FLAG DE FONTE A.
D8A9 21i)6FF LD HL.0FFE:l6H ~RESTITUI HOOI( DA
D8AC 36C9 LD ( .... L) .0C9H ;L.PTOUT
D0'AE ~1~FD1 LD HL,IHICTA8 ~;:,\POHTA HL P/ 'tABELA
0081 06e5 LD 8.~ ~CARREGA D COM 5 P/ ENVIO.
DeB:) 3A2CDi LD A.!FLGlC) ~SE IHPRESSORA JA
Deao FE00 CP e ~E5TIVER COH GUALl:DAOE
0088 2B04 JR Z.LOOP ;:CA~TA ATIV'AD"A NAO ENVIA
OEl8A 23 INC HL ;ESC ·G· AVAN~ANDO
DeaB 23 INC HL ~~ £LEHENT05 [)A TABF.:LA,
D&8C 86e3 LD B.3 ~CAJ;tREGA B COH :3 P/ ENl'lO.
0"8£ LOOP .. ;L.OOP ~UE EHVIA 3 OU
DQ8E 7£ LD A, [HL) ;5 CARACTERES P/ liUE
D08F CDAsee CALL LPTOUT ;5E.JA. IMPRESSO CAAACT{:R:
oeC2 iZ3 INC HL ;GRAFIC() HENOR QUE
D0C3 1eF9 O..JNZ LOOP ~ 32 •
Dl'C5 21BbFF LD HL.0FF86H iAPQNTA HOOt< HOVAMENTE
DEIce 36C3 LO C HL) • DC3H rPARA ESTE PROG~A"A •
00CA 33 INC SP ~DESCARTA VALOR DO SlACK.
Deco 33 INC !,>p
00CC 1891 .JR F1H :BALTA P/ FIH,
001::£ SETFLG;
D0CE .2'12ADl L[} HL,FL.AG ;SETA F'l-AG QUANQO •
DeDi 36F'F LO (HL) • eFFH ~EI-4VlADO CARACT!O:Rl-: 1
Dt'lP3 3::3 J~C SP ,OF,SCAR,A VALQR DU STACK,
D0D4 33 INC SP
000'5 iSSEi JR FIH ~SALTA P/ FIt ..
0907 C(OiO:AE
DeD? 3A3:)D1 L.-D A.(CA~ .... C) JCARREGA Po COM (;Aj;lAC"r[RE
De-DA FI;Ce CP 9CeH ;VERlFICA SE ) QUE &"IC0._
D00C 30UI .JR NC. r:AI'tAC0 JSE AFIRH. VAl P/ GAI1AC0.
0"," DE FEel! CP 0BBH iVERIFICA SE ) QUE. &HS8.
1>9E0 301E JR NC:.CAIJGI :.SE AFIRM_ VAI P/ CAI.JGI.
oeE2 FEll4l CP 0B0H :VERIFICA sr;:- E
l.F:TRA I'ICENTUAOA·
D{!IE4 3028 ..JR ~C.F(l...TJW ;: SAl 1 A P/ F I L 'HI O.
00ro_6 F"E..,.B CP 0ABH ,VERIFICA SE ~ > QUE &HAfI·
oeE9 3010 .JR NC • INTE~R ,SlO AFIRH SAL1A P/ 1 NTERR •
68 (leEA FEA9 CP 8A0H fVE~IF'ICA SE I1i ) QUE: &HAS'.
09EC 3820 JI't NC. f"1LTRO
DeEE FE9E1 CP 9BH fVERIFICA 5E ~ ( QUE &H'9B •
0-0f"9 ;lalC JR c. FILTRO ,SE AFIRH. SALTA P /FIL TRO •
001"2 D621 SUB 21H :CON ..... E~TE 0 CA.~AC'lERE •
09F4 3233Dl LO (CARAC~.A rARHAZENA 0 COOIGO
:EM CARAC.
00F7 18A6 ..JR IMf'FA ~VAI IHPR It1IR EM F .A.
06F'9 C~MAC::01:
DeF9 D61F SUlI lFH ;:CONVE:Ili:l"E CARACTERE.
08FD 3423301 LO (CARAC) .A =AFU'AZENA 0 CODlGO
,EH CARAC.
D0F£ 1B9F .JR IHPFA ~VAI lHPR IHIR EM F".A.
D1.0 CAIJGIz
0198 06'59 SUB :::i0J-i, ;CONVERTE CAl'! ACTERE •
Dl002 32330l LO (CARAC) • A ,A~"AZENA 0- CODIGO
.. EI1 CARAC.
Dies 1998 ..JR It'tPFA ~VAI lHPRIHIR EM F.A.
OHt?, INTERR;
Ol07 D(:.49 SUB 4SH .CONvERTE CARACTERE.
0189 323:3Dt LO (CARAC) • A .ARHAZENA o COOIG()
:EH CARAC.
Ol0C 1891 .JR ll1f>F'A ,VAl IHPRIMIR EM F.A •
D10<E FIl..TRO~
D10E FE60 CP b0H ,VERIF""ICA SE Iii . .;: ..
011.9 2919 Jf;! Z. CHINU :;5E AF'"If;!f1. VAl P/CHIHU.
0112 213BD1 LD Hl....TABCOV ;APONTA Hi... P/ INlC10
;;:DA -rilSELA DE CONVERSAO.
D115 D67E SUB 7EH ,SUBTRAI &H7D.
0117 1609 LD 0 •• ,"lRANSf'ERE VALOR
D119 SF LD E.A : DE: A P/ DE.
Di1A 1.9' ADO HL.DE .SOHA CO'" HL·
Dl!B 7E LO A. (HL} ,CARREGA A COH CARACTERE
,ACENTUAO() DAI IHPRESSORA.
D11C 32330l 1..1) < CARAC) • A ,ARHAZENA EM CARAC.
011F C33S0e ,JP TSTFFA ,SALTA P/ TSTFFA.
D122 CHINU:
01~:2 3ECh LO A.0C6H .CONVERTE NO .1; •
~OA I .... PRESSORA·
Dl2'" 323301 LO (CARA.C) • II ,ARMAZENA E;H CA~AC •
D127 C33'50e JP TSTFFA .SALTA P/ TSTFFA.
Ol.2A 9O FLA(=i= O£F'9 9
D12B 98 FLCOL' DEFB 8-
012C .,. FLQC;;: Off8 0-
D12D 900 FLFA= OEFO e
Dl2E 00 FLESC: OEFB e
Ol~F" 1B471937 INIClAl80E"FS 27.'7'l.~7.~~
1>133 80 CARAC~ OEFB e
013" lB4a1B36 TAB2; DEFB 27.7~.~7.:5~
D13B Al60e7E20 TABcov:oe"FB 0A6H.seH.7EH.20H
013C C8C3C4Cl DI:CFEl 6CBH.0C3H.9C4H.0C1H
01040 C:5l).0C9CA OEFB 0C5H.601t,0C9H.0CAH
D144 2020CDCB DEFU 2~H.20H.0CDH.9CBH
D1 .... 0 A-490AB05 DETS eA4H.0~0ABH~0DSH
014C 115828390 01::1"6 ea5H.eB2H.~B~H.~89H
01:50 0806.29D3 DI;:FB 90BH.0D6H.2eH.0D3H
D15-4 09202028 DEFiI 0D~H.20H.2~H.20H
D158 2029C2CC DEFB 2eH.2eH.8C2H.9oCCH
DiSC D1D7CFAF OEFEI 0D1H.0D7H.9CFHT6AFH
1)160- DCDDDE20 OEf"8 0DCH.0DDH.00EH.28H
D.t64 .2920120206 DE.t=B 29H.29H.2~H.2eH
0169 2020A4C4 OEf'"8 20H~~0H.~A4H.0C4H
D16C 20~Q.e3a3 DEFB 20H.~9H.9a3H~0B3H
0170 2029B3a3 OEFB 20H.20H.0B3H.083H
0174 END A manelra de se imprimir no video urn caracter menor que 32 e comandar

P PIN T C H I~ ~I; ( t ) C H I~ ~~ ( b 4 + n )

onde n e 0 codigo do caracter. Quando urn dess8S caracteres e enviado para a impressora, tudo se passa da mesma forma. desde que a varFavel do sistema NTMSKP

indique uma impressora MSX conectada ao micro.

Ou ando , par exemp I 0 e cnmand ado

I___ P kIN r'f Q ,--,

e a variavel do sistema estiver selecionada para uma impressora MSX. sao enviados os caracteres &H01 e &H41. OU 5eja, 0 mesmo Que comandar

l n 1~\ 'I' '_I T ('~ I .. ! I;HI; ( -' ', u ~; I.'

1_,.1 v .. r ~ " v _ _ , J) f l

Nos MSX ~ ndefault" 0 valor zero para a var~ave~ de sistema NTMSXP (&HF417L indicando Que a impreS50ra conectada e uma impres50ra MSX.

No Expert v e r s ao 1.1 B no HOTBIT, devido aos f i I t r os i n t ern os que for am a d apt ados a 0 SIS t ema 0 p erae i o n a I pa ra c omp a t i b iIi za-I os com 05 pad roes ABNT e ABICOMP respectivamente, 0 funcionamento da NTMSXP e inver so. Quando a NTMSXP e s t a em 0, n s f i I tr os s s t ar Se ativos. e se diferente de zero 0 sistema operacional "peRsar'~ que a impressora conectada ~ MSX.

Existe uma flag no programa chamada FL32 {Flag para caracteres menores que 32) Que e ativada sempre que 0 caracter &Hl, que nao possui fun~ao na MoNICA. e enviadQ. 0 caracter seguinte ja tera 0 seu cbdj90 correto, pois os caracteres menotes que 32 for am red e f ~ n i do 5 a par t i r do & H4 2 ! 65 em dec i m a I L bas - tando apenas verificar se a fonte esta ativa ou nao.

Alguns comandos para a lmp r e s sur a . necessitam mais de urn byte, e norma!meote eSS8S caracteres sao pre£edido5 pelo ESC {&H1B). Por isso terem05 uma flag chamada FLESC (FLag de ESC) que sera setada quando urn ESC for enviado para impreS5ura, 1550 sera feito para que os caracteres de controle, naD sajam alterados pe- 10 programa, pois eles nao serao impressos, mas sim a n a lis a d [J S pel 0 5 i stem a 0 per a c ion a ! d a i me res 5 a r a ,

Quando a FLESG e s t a s e t ada , e anal isado se 0 car~ctef enviado seguidamente ~ urn UGH au urn "H". para Que 0 pro 9 r ama 5 a i bas e de v e des ~ i gar 0 una 0 0 mo dod e Oua~idade Carta ao fina' da impressao de urn bloeo de caracteres graficos.

Para I nd i car sa 0 modo de Qual i dade Carta deve ficar permanentemente at~vo, exjste a flag FLOC (Flag de Qual idade Carta) que quando setada. impede que e sse mod a 5 e i a des I i gad o. 0 u a n doE see u m •• W' 5 a (] enviados, a FlOC e r e s e t ad a .

Quando 0 car~cter ap6s 0 ESC n~o ~ urn "GH au urn .. H"", e I 8 e en v i a d a 5 em n en h uma a I t e r a c a 0, e a f ~ a 9 FLCOL (Flag do numeros de COLunas da impressora) e setada para que 0 proximo caracter tambem seja enviado para a impressora sem nenhuma alteracBo. 1550 pOfQue urn grande numar o de cornandos para a impressora uti I i-

zam tris caracteres. Como. pur exemp!o, 0 comando para mudar 0 numero de colunas da impressora_

Existe tambem a flag FlF~ (FLag de Fonte AIternat.va), que sera setada sempre antes de urn bloco de caracteres gtafic05 ser enviado. 1550 para evitar que os caracteres de controle para ativar a Quat idade Carta e a fonte de caracteres sejam enviados antes de cada caracter grafico_ Tal procedimento faria com que a M6NICA, ap6s cada caractere. voltasse 0 carro de ~mpressao para imprlm~r 0 resto do caractere. pois a impress80 de urn caracter em qual ldade carta e feita com passagem do carro de impressao duas vezes pelo mesmo tugar.

Apbs cornp i tar 0 p r o sr ama . grave-o com 0 nome de IMPMSX.COM. pois assim 0 programa lMPM5X.BAS 0 carregara automaticamente.

CoPIA GRAFICA NA IMPRESSORA

Quem leu a hAprofundando-se no MSX~ desta mesma Editora. deve estar lembrado de que nele haviam programas (em BASIC) que tiravam capias da tela 9ra~ fica do computador na impressora. Aqueles Que 0 testaram devem ter notado que ele era um pouco lento. devido ao enorme numero de calculo5 que real izaVB.

Pela proposta daquele I ivro (dirigido a programadores BASIC) nao havia razao para colocar um programa em lM para obter 0 mesmo efe~to. Agora, entretanto. vamos fale-Io, apresentando-~ em tres versnes 5ucessivas.

A primeira versao e meramente uma tradu~ao do programa original, ou s e i a , 0 texto em BASIC foi tr ad u z j do par a lM I j t era I me n t e • tin hap 0 r 1 i n h a. e de fato a versao mais simples. e mesmo assim sua eficiencia ja e notavel em relacao ao programa em BASIC. gra~as a alta velocidade da lM. Experimente comparar a figura 3-6 com a figura 3.7 .

FIGURA 3.0 - PrograMa (opia graftca el BASIC

'::j 0 000 R E H - - - ~ - c [) p ~~ - - ~ -_ ._ .. - 50010 DATA 3E.007CD,A5y00.C9

50012 FOR .[ _. 0 TO 5=READ A$:POKE 51000 I + I r V A L ( r ~ & H /;J ... A % ) : N EXT I: DE F U S I~ 0 ;::: l:,~j 1. () 0 0 I 50020 LPRINT CHR$(27);CHR$(65);CHR~(8) 50040 FOR C=0 TO 3j.

~:J 0 0 6 0 L.. P R :I: N T C H H 9; ( 2 7 ) ~ C H r~ ~I) ( 7 ~:j ) ;' CHI ~ ~1j ( t <) ;;_I

>i=CHR$(0);

~;0080 F or~ L~2 3 TO 0 BTEP . t

71

50 j_ 0 0 FOR X:::: 7 T () 0 !:> T E P .-" j,

~:; 0 j, ~,~ 0- U:::: V P E [1< ( (C * B'" ~.) ~::; i) -)( L ) ... X )

~50 j,:30 ~:~0 j, 40 se i b0 !;;'~1 80 •. J '-J ..

V :~:; V P F [f( ( ( C ,)(, H + ~~ ~5 (, .)(. L ) + X ... n i '? ~:,~ )

Ir: V MOD it.) :;;:CT lH[N LJ~::;?~:I~::j

POKE ~!1.{)0j_! ~ U

Z::::UGR 0 (0)

NEXT X

NFXT L

LP I~ I N'r NEXT L LP I~ INT l .. Fl r~ IN T RETURN

r: I-II~ q; ( 1 0 ) ;

C H I~ Ijj ( ~~? ) ;: C H f~ g, ( tJ ~:) ) ~ C H 1< <I, ( t ::I ) C H R ~Ji ( 27 ) ~ C ~'!I~ g; ( n j_ > ~ C H I{ ~; ( :Vl )

FIGURA 3.7 - Prograla CDpla grafica ~. lH

i----~------------------~-----
. COPJADOR DA 5CRE£N 2 \lER_ J.
7
; 1986 HILTON nALDONADO .JR.
6_~ ______ ~ _______ ~~ ________ ~ __
ORG €lCeeeH
&0A'5 Lf'TOUTIEOU -0A'SH
.e4A .Rllv~H : EQU 84AH
.0e4 PAPEL: EQU -4
e-eeF" TINTA= EQU 1'5
C000 HHCIO=
cee0 0E011o LD C.0 ;:C"'NQ DA COLUNA_
c~ej2 LOOP1; i
cee:2 c!') PUSH BC =SALVA C.
ce93 CD64ce CALL SETIiRA
cee6 :2E:17 LD Lr23 ~L"'Ng DA l.INI-4A.
Gees LOOP2: f
C00B E5 PUSH HL .SALVA L.
Cee9 2667 LD H.7 JH-NQ DO 8 Yl"E
~DO CARACTERE.
ceeB LOOP31
cees ES PlJSt-L HL ;5ALVA H_
eeoc '5'5 LD D.L .HULT_ LK256_
C80D 79 LD A.C
C908E 17 RLA
C60F 17 RLA I
C9-i9 17 ffLA ;HULT_ C"",8.
C01i '5F LV LrA i
CiH02 7C LD A.H
C013 oF" LO I...A
C61-" ~6ee I.._O H.e J
C016 19 ADD HL.DE ,BUSCA TABELA
:DE PADROES
Ce17 CD4Aee CALL RDVIU'''I oLE A VRAM
C&iA 32BF'Ceo LO (BYTE) .A .E SALVA VALOR_
C910 1101020 LD DE.B19::?
CO2" 19- ADD HL.DE
C021 CD ..... A88 CALL. RDVRH rLE TAB. CORr;:S_
Ce02"" 47 LD II .. A
Ce2:s E60F AND 15 ~C()HP_ COR DE
£:e27 F"EeF CP TINTA ~FUNOO DO PON~
;:1"0 CO ... A COR
,0£ FRE;NTE DA
.TELA_
72 C929 2995 JR HZ.SALTA!
C0~8 3EFF LD A.255 ;SlO: IGUAL.
C8-2D 3.2BFCe Ul (BYTE) ~A ;ACENOE TODOS
;;OS PONTOS_
C030 SALTA1~
C0-30 78 LO A.B
C031 iF FUM
C03:o! iF" RRA
C033 1F RRA
C034 1F RRA
C03S E60F AND :L~
C037 FE04 CP PAPEL .COHP_ COR DE
;F"RENTE DO f'ON-
;;'-0 COM AI COR
,DE FUNoa OA
~TELA.
C9-39 20'e .. JR: NZ.SALTA2
C03B AF XOR A ;;SE IGUAL.
C03C 32SF"C0 LO (BYTE) .A ~APAGA TOI)OS
~OS P()NTOS.
C03F SALTA21
CC!l3F 3As.=-ce LV A.tB'TTE)
ee4;;! CDAsee CALL LPTOUl' ,ENV!A BYTE.
C04~ 3030 JR C.STTXT ;sr;: OCO~RER
;FALHA.ABORTA.
C"47 El POP HL ,RESTAUR-A 11.
C9""B 3EFr l.D A.25S
ce4A 2~ DEC J-t
Ce"lB BC CP H
CC!I""C 20BD ..JFl H2.LOOF'3 .FECHA LOOP3_
ce4E El POP HL .RESTAUF:I!,Q. L_
C0-4F 2D DEC L
ce:>0 liD CP L
C051 2085 ..JR: t-IZ.LOOP2 I~ECHA LOOP2_
ce5~ SEeA LV A.16
C055 CD/I~.e CALL LPTOUT .. SALTA UHA
:LINHA_
C0:58 381D J~ C.5TTXT ;SE OCORRER
;; FALHA. ABORTA·
C8-'!!iA C1 POP Be ,RE5TAURA c.
C0!!58 0(: I .. C C
C0~C 3E:<!e LO A.32
C0~E 89 Cf> c
C0:5F 20A1 JR NZ.LOOP1 ~FEC~A LOOP1_
C061 c077ce CALL STTXT
C064 SEIGRA:. fATIVA THPRES-
C9>6" ES PUSH HL =SORA PARA HOOO
C065 C~ PUSH BC ,GRAf'"XCO.
ce66 2.iB2Ce LO HL.GRA
C&69 0607 LD 8 .. 7
C0i.1;I STLOQP-:; rLOOP OE ENVlO
C96B 7E LD IA. (HL) ;005 BYTES P/
C96C CDA508 CALL LPTOur rA IHPRESSORA_
ce6F ~S.~ JR C.FII1
C071 23 INC HL.
C872 10F7 OJNZ STLOOP
C9>7"-4 Cl POP Be
C075 E1 POP HL
C0076 C9 RgT
C077 :5TTXT; ~AT:rVA IHlP~ES-
ce77 £'5 PUSH HL ~SOfilA PARA ttOOO
C078 C~ PUSH Be ITEXTO.
(;979 2189C0 LO HLyTEXTO
C07C 0'696 LO B.6
C0'7E lBEB .JR STLOOP
ce-se F11"I. ~ENCERRA LOOPS.
ceu. C1 POP BC ,LIMPA P1L~A_
ceD1 C9 RET ,~ET()RNA_
ce82 lUI A I
ceS2 18410818 DEFB ~7.~~.B.27.7~.192.e
C086 41;1C9"'9
C0B9 TEXTO:
C9B9 ta'oU.4D18 OEFB 27.6~.13y~7.el.39
ceSD ::;127
Ce8F" BYT£=
C0BF DE:FS 1
73 Infel izmente os do;s programas tern 0 incomodo de imprimlf todas as figuras giradas de 90 graus. 1550 ocorre porque no MSX os bytes que armazenam a teta indicam segmentos horizontais de imagem, e na impressora estes segmentos sao impressos verticalmente. Na versao 2 (fig 3.8) esse i nc o nv e n i an t e e etiminado p a l a inversao da ordem dos loops e por urn algoritmo que cria uma matriz de 8 bytes 9,rados de forma a compatibi lila-los com 0 padrao da impressora.

FIGURA 3.B - Prograla Copia graftca £1 LH versao 2

• CO~IADOR OA SCRE~N ~ ~ER. ~ ; 1996 ~ILTON MALDONADO ~R.

ORO €ICeeeH
68A~ LPTOUT.EQU er.::SH
90'059 LOUUtv:; E:QU 659H
r-3E9 FOR.CLR~EQU 0F3E9H
F3EA RAI<CLR:E&U t'lF3EAH
&B~A RDVRI'1~ EQU t'l'4AH
ce~0 AF X 011 A
ce01 321-4Cl LD (L-OOPSl.A
C00B4 IBLOOPt
ee&4 AF XOR A
cee5 3213C1. LD (LOOPL) .A
cee-a EXLOOP"
C00B AF XOI;t Po
cea.;> 321;!'Cl LD (LOOPC} • A
ceee CDEiC& CALL. SETliRA
C0&F INLOOPI
eear- 219-111'19 LD HL.6i4.04
C012 3Ai2Cl LD A. (I_OOPC)
CiiH:5 -4F" LD C.A
ce16 9609 L[} B.0
eelS &9 ADD HL.flC
ce19 3A:l3Ci LD A. (LOOPl..)
C01C 87 AOO A.A
cell) 87 ADD A.A
C01E 97 ADD A.A
e6lF 07 ADD A.A
C026 B7 AOD A.A
C021 4F L.D C.A
C0122 99 tIoOO HL.BC
C823 3Aol .... C ... LD A. (LOOPS)
C026 B .... AOO A.H
C627 67 LD H.A
C~2e CO-4A00 CALL R OUR",
C62a 6F LD L.II
C02C ~6". LD H.e
e02E 29 ADD HL.HL
C02F" 29 ADO HL,HL
C630 29' ADD HL.HL
ce31 3Al4Cl LO A. (LOOPS)
C03 .. 67 ADD A.A
C0:3~ S7 ADD A.ito
C636 87 ADD A.A
C037 B4 ADD A.H
C003B 67 LD H.A
C0:39' 221 floC 1 LD (PTR) .t-tL
ce3C tlt~C1 LD DE.BUFFE;:~
ce3F eteaee LD BC.B
C0"2 CD5'10e CALL LDIRI"IV
C045 C07ec& GALL BITSB
74 JCONTA TERCOS JOA TEl-AA

~CO""TA LtNHAS.

~CONTA COLUNAS.

J B USCA ENDER 1:;:~I;O OA TABELA ;DE NOMES ~ttA~PA DOS CMilAC,TERES)_

rLE CARACTERE_ rBUSCA TA6EL.A rOE FORMACAO ,,00 CARACTERE.

~UU""RDA POSI~r;AO J_Q SVTE_

JCOPIA OS B ~8YTES 00 CA,IiIACTER£_ ~ROTACIOHA A rl'iATRIZ.

C0-4a ::;IA1:2C1 LD A. (LOOPC)
C04S 3C INC A
C04C 3212Cl LO (LOOPC) .A
C0~F FE20 CP 3:2
C6~H :20BC JR NZ.INLOOP :FEC .... A LOOP COLUNAS.
C053 C002C1 CALL PRIiJDIiJA
(:9::16 3Al3C1 LO A. C L.OQf'L)
C059 3C INC A
C05A 3213Cl LO (LOOPL~.A
C'!ISD F=E08 CP B
C0SF 29117 .... R NZ.EXLOOP iFECHA LOOP LINHAS_
C061 3A14Cl LD A. (LOOPS)
C064 3(: INC A
C06~ 3214C1 LO (LOOPS) .A
C968 FEe:3 CP 3
C0bA. 209B .JR 1If2.lBLOOP rFECHA LOOP TERC:OS_
C96C CDEEce CALL. STT)(T
cebF C9 RET
C070 8IT5B: ;PROCEDIHI;:NTOS
,0£ 1 CARACTERE_
C070 0698 LD a.B
C072 TLOOP~ rENVIA OS a
iBYTES DO CA-
~RACTERe:.
C072 C:S PUSH Be
C073 C080C9- CALL arTS
ce76 3A0CCl LD A. (BYTE)
C079 CDA::Sge CALL LP10UT
C07:C C1 POP Be
C07D leF3 D.JNZ TLOOP
C97~ (;9- RET
C080 8ITS~ :INICIA ROTAC:AO_
Ce-B~ AI=" XOR II
C0B1 3;Z~OC1 LD iLOOPEI) ,A ;t:ONTA LINHAS/COLUNA5_
C08-4 XLOOP=
ceE4 3A0CC1 LO A. (By-rE:)
C087 CB27 SLA A
ceS9 320CCl L..D (aVTE) .A
case 3F190t1 LO A. ('-OOPB)
C08F 211SC~ LO HL.BUFFER
C092 9&90 LO 8.8
C094 4F LO C.A
Ci!'95 'il'9 ADD HL.9C
C09e. 2~e£C1 LD (SPOS) .HL ;APONTA BV .... E GUE
:ESTA 5ENOO P~O-
;Ce:SSAOO.
C099 2A10Ci LD HL..(PTR)
C09C e9 AOO HL.BC
C09D 0'100020 LO BC.a192
C0A0 i!'9 ADO HL.8C
C0A1 CD4A00 CnLL RDVRH .LE TADELA DE COR~S.
C0A4 E60F AND lS
C0A6 ... 7 LD B.A
C0A7 3AE9F':l LD A.(FORCl..R,
C0AA BS CP B .COMP_ COR DE
~FlJNDO 00 PONTO
.COH A COR DE
~FRE""'TE DA TELA.
C0AB 28111 .JR Z.SET8 ,SE I('lJAL. ACEl-mE
C0AO CO"A00 CALL ROVRH ;:0 a IT.
C0Be ca :JF SIH. A
C082 CS 3F SRL A
C0B4 CB3F SRL A
cea6 CB3F SRL A
C0BB 41 l.0 B.A
C089 3AE:AF3 LO A. (BAKCLR)
C0BC BB CP 9 ~COMPARA COR DE
~FRENTE 00 PONTO
• co,., AI COR D~
~ F-UNDO OA TELA_
£:850 2B1e .JR 2.PROX ;SE IGUAL. APAGA
C0Bf""" 2A0£Cl LO HL. (SPOS) ;0 SIT.
C0C~ 7E LD A. (HL.)
ceC3 E6se AND 128
C0C:!5 28018 JR Z.PROX
caC7 SETB; ~ACe:N.DE PONTO A
75 =IHPRIHIR_
CeC7 3A0CCl LD A. (BYTE)
CeCA CDC7 SET ~.A
cecc 320CCl LO (BYTE) ,A
C0C:F PROX: ~ENCE"RRA LOOP
C0CF 2A8ECl LD HL. (BP05) ;DE ROTAr;AO_
C9D2 71;: LD A. (HL)
C0D3 17 RLA
ce04 1'7 LO CHL) ,A
c.os 3A80Cl LD A, (J._OOPEI )
ceoa 3C INC A
ceo,>, 32eoc1 LD (LOOPS).A
ceDC FEes CP a
ceDE .2eA .... JR NZ.XLOOP
C0Ee C9 RET
ceEl SETGRA=- :ATIVA II"IPRES-
ceEl 21F='5Ce LD fiL,GRA ~SORA P/ MODO
C0E4 8607 LD B.7 JGRA'FICO_
ceE6 STLOOP~
C8E6 7E LD A, (HL)
CeE? CDA58e CALL LPTOUT
C9EA 23 INC HL
C0~B 18F9 D.JIo.IZ SYLQOP
COED C9 RET
ceEE STTXT;; ;:A..-1VA IHPRES-
C0EE 21Fcce LD HL.TEXTO .SORA P/ MODO
C8Fl 8666 LO lI .. b ;:TEXTO.
ceF3 19F1 .JR STLOOP
CeFS GRA;
C0F"'5 184108:lB OEFB 27~6~.B.27.7S.0.l
ceF9 ... 80891
C0FC "fEXTO=
CO-Fe 1B410018 [}EFB 27,6S~13,27,alr~9
C190 ~H-27
C182 PR00eA= :IHPRINE SALTO
C10.2 SEeo LD 1'1.13 ;OE LINHA_
C.iG4 COAS906 CALL LPTOUT
Cl67 3Ee.,. LO A.10
C1(O"9 C3A5ee Jf' LPTOUT
Clee BYTE; DEFS 1
Ct0D LOOPS: DEFS 1
CUIE BPOS~ f)EFS 2
C11& PTRt DEF!i :2
CU2 La-ope: DEFS 1
C:l13 LOOPL; DEF5 1
C114 LOOPS: OEFS 1
C11::;;: BUFFER~DEFS B Fin a I me n t e t emo s a v e r 5 a 0 3 que, a I em ,r d e s.-

virarD a f~gura. imprime-a de uma forma ampl iada na quar cada ponto da imagem tern seu tamanho dobrado. Uma cur~nsidade desta versao eo modo de se amp~far cada

PO n to d a j m a 9 em. A amp I i a I; a 0 h 0 r i Z 0 n t a I e mu ito 5 i m-

pie s • po. 5 par a iss 0 bas t a imp rim i r d u a 5 v e t esc a d a byte. satodo assim a largura dobrada. Para dobrar a altura e mais ccmp l i c a do , d e v e+s e partir 0 byte em dois grupos de 4 bits (dais nibbles) e expandir cada grupo para 0 dobro do seu tamanho.

Por exemplo, imagine que 0 byte a ser enviado para a impresora seja

Ao dividf-to teremos dois nibbles que sao expandido5 para dois bytes comQ j lustra a figura 3_9.

76

FIGURA 3.9 _ Nibbl£s ~xpandidD5.

NIBBLES

8 1 e ,

llll

80119011

NIBBLES EXPANOtOOS

e 1 1 0

llll

""1'1100

~ e~idante que estes dois bytes nao sao envi~ ados seguidamente para a impres50ra. bem como nao sao obtidos simultaneaments. Eles sao processados em dais ciclos sucessivos que corrs5Pondem a metade superior 8 inferior de cad a I inha.

FIGURA 3.i0 - Capia grafj[a el LM vEfsao 3

~ COPIAOOR OA SCREEN ~ VER. 3 • 1986 HILTON MALDONADO JR_

r------------~--~------~-~~---

ORG eCgee.H
('leA:":; LPTOUT:EQtj eA5H
9059 LDIRHV:EQU eS9'H
F3E9 FOf;lCLR'EGU er3E:9 ....
F3EA HAKCL~'EGU 6F"3£AH
604A RilVIlH: EGiU 04AH
C000 INIC):o:
c"ft~ AI'" XOR A
c001 3263Cl LO (TOGGLE) • A
(;604 AF XOR' A
C00~ 326BCi LD C LOOPS) T A
C008 TDL()OI" :
C00B AF )(O~ A
C0e9 326ACl LD (LOOPL) .A
C00C EXl..OOP;
C00C AF XO;;r A
C0~O 3269Cl LD (LOOPC) .1'10
C010 CD35CJ CALL 5ETGRA
C01,3 INLOOP:
C013 .21001B LD Hl._,61-44
C016 3A69Cl LD A. (LOOPC)
C019 4r: LD C.A
C01A 9bee LO B.@
C01C 09 AVO HL.BC
C91D 3A.bAC1 LD A. (LOOPL)
C020 B7 AOD A.A
C021 97 ADD A.A
C022 97 ADO A.A
C0.2:3 87 ADD A.A
C024 97 ADD A.A
C025 4F LD C.A
C0~6 019 A[)D HL.BC
C027 3A6BCl LD A, (LOOPS)
C02A a~ ADO A.H
cellS 67 LD H.A
C02C CD4A00 CALL RDVRH
C62F' 6~ lO L.A
C030 ~6ee LD H.0
Cii'32 29 ADD HL...J-tL
C633 :!9' AOO HL.HL
[;934 29 ADD HL..HL
Ce35 .'lA6BC: LD A, (LOOPS)-
Ce38 87 AOD A.A
C039 87 ADD A.A
C03A 67 floOD A.A .CONTA HEIAS ~LI"HAS.

~CONTA TERI;OS ,DA TELA.

~CONTA LINHAS.

,CONTA COLUNAS.

;8USCA E:NDERE;'0 DA TAUELA .OE NOHE:S ~ttA;PA DOS CARAC: Te:~E5) _

;l.E CARACTERE_ ;9USCA TABE:l..A ;DE FORMACAO ,DO CARACTERE;.

77

C83E1 S ... AOD A.H
Ce3C 67 LI) H.A
ce30 2267Cl LD (PTR) .HL FGUARDA. POSl-
c:e ... o- :t.16CCl LU OE.BUt="FER
C043 01080& LD BC.S
C .... 6 CD'5gee CALL LDIRHV ;COPIA as a
;:8YTES 00 CA-
.RACT£RE
ce49 CDB3C0 CALL BITSB lROTAClOHA A
"KAT~JZ_
Ce.4C 3A4!;.9C1. LO A. (LOOPC)
ce4F 3C INC A
C0'50 3269Cl LD tLOOPC) .A
CeS3 FE29 CP 32
C05~ 2eBC JR NZ.INLOOP • F'ECHA LOOP COLUI'fAS.
ce~7 CP'56Ci CALL PFil0DeA :SAL'A LINHA_
Ce:5A 3A63Cl LD A. (TO[JGLE) .HUDA METADE
C650 2F CPL ;009 HYTES A
C05E 3263C1 LD (TOGGLE) .A ~AHPL'AR_
ce61 A7 AND A
ce62 020AB .JR f,fZ.EXLOOP J F="ECHA LOO? LIHHA.S
; (P1l;':TAoOE SUPERIOR) •
C06-4 AF )(OR A
ce6S 3263Ci LD (TOGGLE) • A
C06B 3A6ACi LD A. (l.OQPL..)
C06B 3C Ufe A
C06C 326AC1 LD (LOOPL) • A
ce6r'" F'E08 CP II
C071 2699 .JR NZ.E.XLOOP :F£CHA LOOP LINHAS
; (HETAOE INFERIOR)_
C073 3A69Ci LD A. (LOOPS)
C076 3C INC A
c~;:r7 ~~6BC1 LO C LOOPS) • ~
C07A FE03 CP :)
C07C C20BC0 JP NZ.TBLOOP ~FECHA LOOP TERCD5_
ce7F CD42C1 CALL STTXl"
c~a~ C'9 IlET
C993 UITSB: ;PROCEDIHENTOS
;OE 1 CARACT£RE_
cea3 96&8 LD a.a
cess TLOOP;
C0a~ C!!5 PUSH BC
C086 CDB3C0 CALL BITS
C0B9 3Ab3C,1 LD A.CTOGGLE) ~5ELECIONA HETADE
ceBC 1>.7 AND A fA AHPLIAR.
CttBD 3A60C1 LD A. (8YTE~
~390 2B08 JR :l:.PRIH: ~HETADE: SUPE~ lOR.
Ce92 C827 SLIII III :ESCOLHE A META()E
C$94 C827 SLtI A :INFERIOR_
C6"'l;. C027 SI,._A A
C098 CB27 SLA Po
C09'1t PR:IHs
£:09'1'10 CD14C1 CALL AHP
(;09'D 3A61Cl LD A. (AS "(TE) ; H1PR IH£ A METADE;
C0A.e COA500e CALL LPTOUT ,DUAS VEZ£5 SEGUIDAS_
C0A3 3980}- JR C.FIH
CiliA:::; CDA500 CALL LPTOUl"
Ce.AS 38"" JR' C .. FJH
ceAA Ci POP BC
C0AB i~D8 D..JNZ TLOOP ;ENCERRA LOOP_
CeAO C9 REl"
C0A.E FH1:
C0AE Cl POP BC
t0A-F Cl POP Be
CiIIB0 C342C1 JP 5TTXT
(;"'B3 BITS: ,INICIA RQTAi;AO_
C0B3 AF )COR A
C0B4 32b4Cl LO (LOOPB) • til ;CONTA. LINHA.S/COLUNA.S.
C0B7 XLOOP=
C087 3A60C1 LD AI. (BYTE)
C0BA C827 SLA A
C0BC 3260C1 LD (BYl"E) .A-
ces"" 3A64C1 LO A.(LOOPB)
C0C:2 216CCl LO HL.DUFFER
C0eS 0600 LO 8.0
C0C7 4F LD C.A
78 ceCB "'9 ADO HL.BC
C00C9 226::;Cl LO UIPOS) .HL ~APONTA BYTE QUE
;E:STA SF;NDO RODADO.
cecc 20lil67(;1 L[) HL. (PT~ ~
C0CF 09 ADO HL..BC
C8D9 81082e LO BC.B19~
C.e.C3 e9 ADD HL.ElC
ceo" CD",Aee CALL ROVRH : l,E;: TAB. CORES.
C907 E.b0F AND 15
C0D9 -47 LD B.A
ceOA 3AE9F"3 LO A. (FORCLR)
eeOD 88 l:P B .CO"". COR DE
;FUNDO DO BYTE
;COH AI COR DE
.FRENTE DA lELA.
ceDE 2BIA JR Z.SETI1 ;;SE IGUAL. Ar::I;,;~DE
C0E0 CD4A680 CALL RDVRH ;0 BIT.
<:eE3 caar S~L A
C9E:') CB3F SRL A
C6E7 ClJ3F" SRL A
CfH::9 CB3F SRL A
ceES .... 7 LD a.A
CtJEC 3AEAF3 LD ATCBAKCLR)
ceEF B9 CP B ~COt-iP. COR' DE
~F'"UNOO DO BYTE
~COt1 PI COR DE
lFRE:"NTE 011 iE:l.II.
CeF"0 281& .JR Z,PROX ;SE lGUAl.. APAGA
ceF'~ 2A6SCl. LD HL. CBPOS) ,.0 all.
ceF~ i"E LD A. (HL)
ceF6 E680 AND 128
C0FB 2Bea .)R' Z.PROX
C9FA SETa:: ;ACENDE PONTO
,A IHPJtHtIR_
C6F'A 3A60Cl LO A. (S'fIE)
C9FO CBC7 SET e.A
C0FF" 3260C1 LD (BYTE) .A
Cl82 PROX=:
C192 2Ab~Cl. LO HL. (SPOS) :COLE"TA PROXIHO
C195 7E LD A. OiL) ,Bli.
CHt6 17 RLA
C197 7'" LD (HL).A
C108 3A64C1 LD A. C LOOPS)
C100 JC INC A
C10C 3~6"'C.l LD (LOOP8).A
C19F FEes CP 1:1 :E;:NCERRA LOOP.
Cl11 20A4 .JfiI: NZ.;:(LOOP
eli3 C9 RET ,RE:TORNA.
ell" AMP: ,AMPLIA UH BYTE_
Cl14 3262C.l LD (B'rl"E2l.A
CU,'" AF XOR A
Ci.18 3261Cl 1..0 (AOYTE) • A
CllS 0604 LO B ....
C11D LOOPA;
CJt(> 3Ab2Cl LD A.(BYTE2) ; AVANC:A UI1 BIT
C.126 17 RLA ~E;:K BYTE::!.
C12:t :32b2C1 a.o (BYTE;:Z) • A
C10l4 3A61Cl LD A. (AB'tTE) ,COLOCA 0 BIT
C1,27 17 RL.A .. EN (;BYTE. DUAlS
C128 17 RLA :VE2:ES.
C129 CB4F" IlIT i.A
C128 2ae2 .JR Z.BIT&
C12D CBC7 SET ".A
C12F BIT0:
£:12"'- 326iC1 LD (AB YTS:: ~ , A
C13.2 19E9 DJNZ LOOPA
C134 C9 f;!ET
C13S SETGRA: ;PASSA H1PRES-
C13:5 2149Cl L.D HL.GoRA .SORA P/ MODO
C13B 0607 LO B.7 .GRAFICO.
C13A STLOOP:
C13A i'E LD A. (HL)
C138 CDA5e00 CALL LPTOUT
C13£: 2.3 INC HL
C13F 10F9 DJHZ 5TLOOP
C141 C9 REl"
79 C142 S"tiXT: f'A5SA JHPI'lES-
Cf4.:.:! ~15&Cl LO HL.TEXTO SORA P/ MODO
Cl"'S 0606 LD D • .!. T£XTO.
C147 181""1 .JR S1"LOOP
C1"9 G~A'
Ci49 1B~10BIE1 DEFH 27.6~.8.27.7~.V.~
C14D 4a~002
Cl~O TEXTO:
C1:!te 1841001B DE;FB 27.6~.13.27.Bl.39
Cl'54 ::i.127
C1!16 PRe.,eA: ;SALTA L.INHA~
CiS .... 3E60 LD 11..13
elsa CDAse0 CALL LPTOUl"
elsa 3E9A L.O A.i8
C1SD C3A:5ee JP LPTOUT
C16. Bl'TE; DEFS 1
C161 ABYTE:: DEFS 1
CJ.6~ BYTE:21 OEFS 1
C163 TOliliLE'I DEFS 1
C164 LOOPII; l>EFS 1
C16:i- BPQS; DE:FS 2
C167 PTR: OEFS ;;,!
C169 LOOPC; OEf'"S 1
C16A LOOPL= OEf"S 1
Cl6.B LOOPS':: OEFS 1
C16C BUFFERI:OEFS 8 SQ

4

OPERANDO 0 CASSETE EM ASSEMBLY

Neste capftulo drscutiremos como 0 computador processa 0 armazeoamento e a recupera,ao de dados da f i ta c as s e t a. e vet emos como ut i I j z ar as rat i nas da ROM par a e f 8 t U a r I 8 j t u r as e 9 r a v a e 0 e s em lin 9 u a gem de

maquina. .

Todas as opera~Qe5 do cassete efetuadas peto MSX, uti tizam as 5ub-rotinas do 810S Iniciadas entre as posi~oes &H0eEl e &H@0FS da ROM. De fato, se anal jsarmos os Gomandos BlOAO. ClOAO, lOAD a INPUT ., V9remos que tOd05 etes uti I izam as mesmas 5ub-rotinas, 0 mesmo ocorrendo com 0 BSAVE. CSAVE. SAVE e PRINT t.

CA8E~ALHOS DE GRAVAC~O

Todas as grava~oe~ feita5 polo MSX sao precedj~~s de urn cabecalho Que idan1 iflL~ 0 tipo de in~ tormacio en~iada so gravadOf a 0 nome 8speCI ficado pelo u5uatlo. Assim, quando 0 computador fnr ter novame n tee 5 5 a 5 i n forma C 095, 8 I e 5 ~ h era ida n t i fiG a r (1 t j po dos dados e nao haver a 0 perigo d~ G3rrggai urn bloeo inval ido {par e x emp l o • um c r o sr ama am L~l n a area do BAS r c i.

o formato do cabe~ajho e 0 mesmo para tudDS os tipos de dados e e exempl fficado r.a figura 4.1 .

81

FIGURA 4.1 - Forlalo do cab~~alho ysado pel0 MSX

xx XX xx XX XX XX XX XX XX XX Be 61 B2 83 B4 85

Ondel

xx e a ident.ficador do tipo de grava~ao~

8SAVE GSAVE SAVE AROU I vo

)(X:&HD@ XX=&H03 XX:::&HEA XX=&HEA

_

80 a 85 9uardam 05 caracterBS do nome dado pelo u5uario. Se 0 nome for mats curto, 05 bytes excedentes sao preench~do5 com e5pa~os (&H20),

Por exemplo, quando digitamos

o cabe~alho enviado a fita sera como na figura 2.

FIGURA 4.2 ~ Cabt~aiho usado pelo BSAVE.

00 00 00 00 00 D0 00 D0 00 00 52 4f 54 49 4E 41

tipo de gravac;ao

ROT

N A

Como se vi, os tres parimetros habitualmente dados no comando BSAVE nao ficam no cabe~alho~ como sa ouuer t a imag5nar. Apbs 0 c aue c at no . antaa. vern 0 bloco de dados propriamente d.to cujo formato depende do tipo da grava~ao:

BSAVE: os seis primeiros bytes do bloco de dados rep roe 5 e n t am 0 5 t res end er a c 05 que \I 0 C e dig ita a p 6 5 D no - me. Do 5etimo byte ate 0 ultjmo, entao. fica 0 program a (0 u dad 0 5) ems i . t a leo m 0 5 e sit u a n a R AM • Ass i m • o comando dado acjma dave originar urn bioca de dados como e x amp I i fie ado pel a fig u r a 4.3 .

FIGURA 4.3 - Inlcio do bioeD dE dados do BSAVE.

"0 80 47 Gft 80 C0 41 42 18 40 1. .. ..

and. end_ end.

i n i c . final exec.

programa ou dados ( c 6 pia daR AM )

GSAVE: todo D hloeo de dados e uma copia fiel da RAM (como no BSAVE), eVidentemente sem 05 seis bytes de

82

endere~os. A copia normalmente se inlc,a no endere~o 32769 (&H88B1) e t e rmt na na primeira seclUencia de tr ss zeros consecutivos (fim do programa).

TomBmos como exemplo 0 programa da figura 4.4

FIGURA 4.4 - Exelplo de prograla gravado pelo CSAVE tiE M61~ 1(,.

1.'~ P I~ I NT ~? 0 f-? LJ N 30 END

BYTES DI~AV~d)OS

07 ] i.:::'P 1 130

0A ] n 1 00

91 token do PRINT 00 PI

0C ] ep 1

00

j_4J nl 00

8A tok~n do RUN 00 fl

t 3 ] t:;p"1

80

~~ ] n 1

81 token do END ()0 r i

~; ~] ·r i m cJ f:,:' PI" D <J 1" :::-t m ,':'l

Quando 58 carrega um programa em BASIC pelo comando ClOAO. as dado5 da flta sao colocado5 a partir dos bytes apontado5 pela variavel de sistema TXT TAB (&HF676) ate que se encontram tres bytes nulo5. Quando a Jeitura ~ encerrada. Antes de devolver 0 controte ao op e r ado r , entretanto. a sub-rotina ClOAD deve informar ao Interpretador 0 endere~o do ultimo byte "do para que este possa deflnir a area das variaveis. Se iS50 nao fossa feito, haveria 0 perigo do computador defjnir as variaveis sabra 0 programa em BASIC. 0 que certamente seria desastroso.

Existem tre5 variavers do sistema Que contro~ lam as variaveis do BAS~G:

83

VAI< T (~B (&HF t)C;.:~ ) A I~ Y TAB (8o H F 6 C 4 ) ~:)TP END (&HF \1)(:; 6 )

t nelas que 0 comando CLOAO escreve 0 ultimo end ere I;: 0 lid 0 . Com e x c e f; a c d a V ART A B , a 5 d ema i 5 (ARYTAB e STRENDJ tern seu valor mudado quando sa cria uma no~a variavet. A VARTAB 56 muda Quando se altera 0 tamanho do programa BASIC que esta na memoria.

SAVE e PRINT f: como os dots coman~os funcionam da

me sma rna n e ira, e I e 5 5 a 0 ex p lie ados j un tame n ten est 3

parte. ApDS 0 cabe~alho inicial, blocos de 256 brtes sao envlados para a fita ate todo 0 arQuivo ter sido gravado_ Evidentemente, e pouco prov'vel Que 0 ultimo bloeo contanha exatamente 256 byt~s; 0 oorma~ e que ale seja menor. Oesse modo. os b~te5 que -50braram~ sio preenchidos com 0 valor &H1A.

Antes de um bloeo de dados ser enviado. e necessaria a certeza de termos 256 bytes a salvar {ou que os bytes restantes sBjam 05 u~tjmos do programs au ar cu ivo ) .

Para ~5S0. a cornputador monta um "buffsr" de 255 bytes, que so e enviado a f4ta quando este estB preenchido, ou quando 58 di um comando CLOSE.

A diferen~a b'5tca entre D SAVE "CAS:- e 0 CSAVE ~nomen est~ na forma de env~o dos dados. No GSAVE, os dados sao codificados numa forma chamada Hbin'r~o compactado~. que na verdade , uma cbpia da RAM. No SAVE "CAS:u as I inhas de programa sio envladas ao cassete na forma ASCII- ou s s i a . tetra no r tetra. logicamente esse sistema e bem menos eficiente, pois salva urn numero muito rna.or de bytes para reptesentar a mesma informa~ao.

Urn aspecto interessante e que se hoover etro durante uma leitura. sera rnais fAci I para a usuarlo ~edjtarH ums I inha que entrou defe~tuosa pelo LOAD do Que palo ClOAD, devido a redundancia de Informacce.s i ner ente ao SAVE e lOAD. POt out r o I ado, n CS"VE u t i'I jza um comprimento bem manor da fita, ser:d~ entio menos prov~vel Que urn defeito flsico da fjt~ vepha a ~nterferir na leitura oalo CLOAD-

AS SUA-ROTINAS DO BIOS

Podem05 agora fa~ar d~5 5ub-rotinas de tratamento do cassete. Elas ficam situadas oa 0 da ROM e estao indicadas a sequir pelo de en emada (em Hexadecimal), noma e +un c s o .

do BtOS na pa9j~ ~Ilderer;c

84

&H00E1 TAPION~ Aciuna 0 motor do gravador, desat,va a intefrup~ao e 3guarda 0 sinal de sincronismo (Pheader") d~ fita.

&Hft0E~ TAPIN; l~ urn byte da fita e devolve seu valor no r~gistro A {acumuiador do Zae}.

&H00E7 TAPIOF: Desl iga 0 motor do gravador, reativa a interrup~ao e retorna.

&H0~EA TAPOON: Aciona 0 motor do gravador, desativa a Interrup~ao e envia 0 sinal de sincronismo (~headerH} para a flta. 0 valor do reg~stro A determin a a dura~ao do s i n a l . se A v a t e r tL 0 sinal sera curto; caso c o nt r ar 50, 0 5 j na I sera I ongo.

&H00ED TAPOUT: Envia 0 byte contldo no registro A do ZBe par~ 0 gravadot cassete.

&H90F0 TAPOOF: Gomo no TAPIOF. de5t~9a 0 motor. devolve a i~terrup~~o e retorna.

&H09F3 STMOTR; Controla 0 motor do gra\lador da seguinte mane,ral

A::0:

A -= 1 ~ A=255:

des I j ga Ii ga

I nver t s (I iga-desl Iga. des1iga-iiga)

Note como e~i5te uma simetria parfelta entre as suo-rotinas de escrl1a e ~bitura. Verftmas agora como 5 e uti liz am e S 5 as rot ina 5 .

GRAVANDO UM BLOCO DE DADOS

Imag~ne Que temos a mensa9sm HOS CVlONIOS JNVADIAAC A TERRAl" e queremos envi~-Ia para a fita. Jniciatments, devemos acionar 0 gravador e 6nviar para a f j tao 5 ina I d d 5 inc ron i smo • que e e sse n c j a I par a a hora da leitura. Em seguida en~iamos 05 dados propriamente ditos e fin~lmente ancerramos a 9ra~a~ao. 0 programa a seguir faz exatamenta IS50.

Figura 4.5 - Grava~ao de ula lensag£. fl Asselbly.

O~I) 9C00eH
eeEA 'f'APOONI EIiiIU 0EAH
&91;;;0 TAP 01 . .11- = EQU I3oEOH
e.0F~ TAPOOF=EQU 0F0H
C00-~ COEAe0 CALL TAPOOH
ce03 2116C0 LD ..... L.TEXiO ,ACIONA 0 GRAVAOO~

,E ENVIA 0 SINCRONISKO • ~CAFi!Iil:I;GA HL COI1

.0 EHOEREI;O DA

rHEHSAGEH_

85

C~"'6 C066 7E

LOOP:

LO

A. UiL)

JCARREOA A COM UM ~CARACTERE DA rl"l£HSAGfO:H.

lTESTA FIH OA ~i'"IE::NSAGEtI.

,SE FIn. SAL .... A. ~6ALVA HL. .EHVIA 0 BYTE. IRE5TAURA HL_ ~PROXIHA LETj;!A. JREINICIA L.OoP •

C967 A7
cees 2Bea
ce-eA E5
ceea COED&&
CItBE: f.:~
ce~F ;!:3
C&10 1BF ...
C012 FI ... =
C91~ CDFeee
C01=-> C9
CliH6 l"E:}(T():.
ce16 ... F532e-43
C01A ~94[;4~4E
CD1E "94F"!5329
C922 ...... .IIE':'j641
C0:i26 ... 449:52.0\1
C02A 4r~&
ce2C 4i200S445
C930 525241029
C03>4 21
[;035 ~9 ANO A
JR Z.FIH
PUSH HL
CALL TAP OUT
POP HL
l .... C HL.
..IF! LOQP
CALl- TAPOOF
RET 1E:NCE:~~A A GRAVACAO ;E OESLlGA HOTOR~ ,RETORNA

09 'os CYLONIOS INV'AOIRAO ..

011 'A TEfHl:A ,.

OB e

Digite 0 programa da figura 4.5. prepare 0 gravador para gravar e execute-o. a computadot en~iara urn s i na I cur to par a 0 gravador. ta I qua I urn p r osr ama bem pequeno.

Agora que voce tern a mensagem gravada na fitao de~e estar pensando que existe um outro programa cap a z del e -I a. E, de fat o • ex, s t e me smo, como e mo 5- trado na figura 4.6 .

FIGURA 4.h - Leitor dr lensagens ~. A~5r.bly
Otto. eel •• H
.eEl TAPIONI£QU eE1H
6&E .. TAPIHI EQU ~E4H
eeE7 TAPIOF"EQU eE7H
CUll,. COE1.e CALL TAPIOH
Cle3 LOO-PI
C193 CDE1 •• CALL TAPIN
Cleo A7 AND A
Cl07 2884 JR Z.F'IH
C169 D399 OUT (1'52)TA
elllB 18F"'" .IR LO(')P
Ct000 FIHI
CleD CDE7ee CALL TAPIOF"
Ct1e C9' RET ~LIGA ttOTOR E ,AGUAJ;lDA SIHCROrNISHO.

JLE UH BYTE DA FITA. ~TESTA SE A-e.

,SE FIH. SAL.TA. ~l"PRIHE 0 CARACTER~. ~PROXlHO CA~ACTERE.

.EtiCE"RRA A LEI.TURA E IlESLIGA :0 110TOR.

t RE"TGRNA.

Uma curiosidade deste programa i 0 uso do comando OUT. 1550 decorre do pr6priD hardware d05 MSX. palo qual 0 controle da VRAH e feito pelas portas 152 (&H9S) e 153 (&H99J. Voci veri que um 30UT (152),A~ eQuiwala a chamada do comando CHPUT (&HA2), 50 que e mu~to mats veloz. Se voce tentar trocar 0 OUT pala chamada do CHPUT, petcebera que 0 programa nao funcio-

96

nara POlS 0 GHPUT e lento demais e tirar~ 0 micro do sincronismo com a fita.

D~gite 0 programa da figura 4.6, volte a fit a, colo que o· 9 r a v ad 0 r par a I era me n s a 9 em 9 era d ape- 10 lei tor e aguarde alguns segundos, quando entaa davera aparecer a mensagem na tela.

Os programas Env.ador e lBitOf sio um exemplo didatico de como usar as rotinas do BIOS para cassete. Veremos agora como usar 0 BIOS para coisas mats 6teis.

OUTRAS APLICACoES

Baseados no raciocfnio dos programas aClma, p o'd emo 5 • em p r Inc f p i 0 , I ere 9 r a v a r 0 que b em e n tendermos na fita casseta. Uma ap~lca~ao interessante e a dupt ica~aQ de programas gravados pelo comando BSAVE, que j' foi explorada no t Ivro ~Aprofundan~o-se no HSXn, mas "aD expl icada em detalhes naqueta publ tca~io. De fato. Q programa HHeader~ (cap'tulo 6) I' pub~ icado ~ muito semalhante ao Leitor. com duas d.ferBn~as b~s~cas: a primeira. i que 0 programa ~Header~ esc rev e 0 dad 0 lid 0 d a f j tan uma are a daR AM (e n 8 0 n a tela) e a segunda i que ale nao espera um byte 8 para retornar (em vez disto, carrega 16 bytes quaisquer, Que no caso comp5em urn cabe~alho). e depois rnais seis b~te5 que contem 05 endere~os do BSAVE.

A parte em Assembly do programa Header esta I istado na figura 4.7 de uma forma rnais clara do que a usada no "Aprofundando-se no MSX".

FIGURA 4.7 - Progran He-ader
ORG 6699&
ee-E1 TAPIONzEGU 0E1H
e-e£4 TAP1N: EoQU 8E4H
EA6E1 CDE;:lee- CALL Tf:lPION ~AGUARDA P';:I-
• NEIRA PfI",rE •
EA6:J 08 RET C .. Ii ETORNA SE
;ol-WUVE E1<RQ.
EA .... 4 21e0C0 LD HL.0C000H ,1 P E..NLJ£:R:O:LO.
EA67 "'61e LD B • 1~H-I ~N-16 ByrES.
EA69 LOOP0=
EA69 E5 PUSH HL ,5ALVA HL E !tc.
EA6A CS flUSH BC
EA6E1 CDE040& CALL TAPIN ,LE 1- aYTt...
EA6E [;1 f'QP He ;VOLTA HL £: 8e.
EA6F £1 POP HL
~A7e [)B RET C JRETORNA 5E
~t-IOUVE ERR().
EA71 77 LV- ~HL).A ;COLOCA N~
.HEt\ORIA~
EA72 23 INC HL .INC. END£,RECO.
EA73 leF4 DJNZ LOOP& ~PA'OX_ BYTE.
£A75 CDE.10$ CALL TAP ION ;AIiUARDA SE~
~GUNOP, PARTE.
EA78 08 RET C .,"'ETORNAI S£
~HOUVE EFHilO •
EA79 211&Ctl- LV- HL.eC019H :i..Q ENOERECO.
EA7C 96~6 LD B~e6H
87 Efl:7E: LOOPt"
EA7E E5 PU:3H !"'L ~SALVA HI,.. S. ee.
ro.A7F C5 PUSH Be
lOI'B~ GDE400 CALL TAPIN oLE 1 ByrE_
E'::'El3 C1 ~QP BC ~VOLTA HL E Be.
J';.AB4 Ei POP Hl.
l::Aa:s DB ~ET c ; I<E,ORNA SE
;~OUVE ERRO_
EA86 77 L.D (rlL 1. A
'EA87 23 ISC HL ~lNC_ ENOe:RECO_
EAB8 10F4 [I_JNZ L(lQP ,. .PROX. ByrE_
EA3A C9 nET ;: RCTORI'fA_ Basicamente 0 programa Ie dots bloeas du cassetfl: urn de 16 bytes, que e ascrito a partir do enderB~O &HC800. Esse bloco e 0 cab8~alho propriamente dito, lido para Que sa obtenha 0 nome do programa. Do segundo bloeD sao os seis bytes de ender8~amento do BSAVE e elas sao armazenados nas p05i~oes seguintes.

Existe tambem urn pequeno trecho am Basic que Ie na memoria asses bytes (fijn~ao PEEK) e imprime na tela os valores convenientas (nome~ tipo de arQuivo e enderB~os. sa eXistiremJ. Voce seria capaz de ascrever Bste trecho ?

Tecnicaments. entretanto, ha um problema com e sse t r e c h 0 em Ass emb ! y: ere n a a It e 5 I i 9 a 0 9 r a v ado r no f im da J e i tur a ( cu se ho~ . .lVer uma par ada). Ass im, par a r.orrlgir isso. 0 trecho em Basic que segue a sua chamada desl iga 0 motor com 0 comando MOTOR OFF, 0 que nada altera. Observe que 05 comentarios foram om.tjdos na parte final da' istagem anterior pOis seriam uma repeticao sumaria dos comeotari05 anteriores.

VERIFICA~AO DO BSAVE

VOCE ja deve ter se 'amentado por perder urn programa gravad9 pelo BSAVE. simpfesmente porque n~o tlnha c~mo verificar sa 81e estava bem gravado. Se 0 programa era de s~a autoria, entao, 0 seu gravador de~ ve ter levado mUltas pancadas neSS3S ocasioes.

Para evitar Que voce dsstrua seu gravador e consiga sempre ler seU5 programas gravado5 em B5AVE, apresentamos aqnra uma rotina Que Ie 0 programa da fita eo compara a~te a byte com 0 Que esta na memoria, illdicantjo se hill um erro ou nao.

A princlPlo, a rotina procura 05 dez bytes que indicam 0 tipo do programa qU~ est' na fita. 40 encontrar 0 c6digo do BSAVE {&H08}, 0 nome e lido e jrnpresso na tela. e entio termina 0 pr.meiro bloeo. 0 segundo o t o co c ome c a a ser lido, t n t c i andu palos s e i s bytes de endere~os.

Os quatro prtmeiros bytes marcam 0 inrcio e 0 fim da verifica~ao e 05 dois restantes sao despreza-

Be

dos. Em seguida. come~a 0 confronto byte a byte.

A verifica~ao pr05segue ate 0 ultimo byte e. se houver alguma djvergencia, 0 endere~o correspondente e impresso na tela. Em qualquer instants a ~erlfjca~ao pode ser jnterrompida com 0 prassionamento das teclas CTRltSTOP.

FIGURA 4.10 - Verificador do BSAVE
ORO 0DefHtH
00099 UDPDAT;EQU 69BH
8899 VDPADD:E~U o&99H
ea6t: INITXT=EIiiIU e6CH
e0A:<! CHPUT: EQU eA2H
eOC6 PO-Sl .... ; E(iHJ .C6H
ee-e:1 TAPIOHIiEfiilU eE1H
8&E;4 TAPlN;: EQU eE4t1
e-~E7 TAPIOF:£6IU eE7H
FSS7 aUF; EGU ef'"B:':i7H
F"85n FJ...Ec EQU 8FS:5"'t-S
DElee. VERlFY,.
lHiH,e- C[)6ce. CALL lNITXT
0"'93 AF XOR A
oee" 0399- OUT (VDPAOO) .A
[)ee6 D399 OUT (VDPAOO) .A
Dee-a IKICIO~
O.flS CDE1&0 CAL..L TAPIOH
00 ... 8 3871. .JR C.FIH1
veel} 660A LD B.le
DgeF l.OOPH=
OileF C~ PUSH Be
0.10 CDE"4ee CALL TAPIN
DIU. 3 C1 POP BC
D0104 1.F9 DJNZ LOO-PH
01).t.6 F'ED9 CP eDeH
Dele .:;!"$EE JR NZ.INIC.IO
D01A e6_6 LD BT6
081e LOO-PN =
DtI'lC C~ PUS~ ac
D8Hl COf:"'4t'b- CtllL.L lAPIN
O.2e :)06.1 JH c.FIHl
oe;!.2 D396 OUT (VDPOAl')~A
O~IZ" Cl POP Elt:
0925 18F"S DJNZ LOOPN
00927 3f.:3E LO A •• )- •
oe29 039B OUT (VDPOAT) FA
D92E1' 039B OUT (VDPDAT). A
D02D CDElee CIIIl..L TA .. lON
De3e 21'57FS LD HL.9UF
0-8::13 006@-6 L[) S~6
De3~ LOOP~;
0635 ~5 PUSH HL
0036 C5 PUSH DC
O~:)J' CDE .... " CALL iAPIH
D@3A C! POP BC
D9311 fO::l POP HL
oe3C 77 LD (HL).A
00'30 23 INC HL
oeSE leF"'!5 D,J .... Z LOOP8
De .. ", 3E2C LD A. . .
.
1> ... 2 :i!A~7Fa LD HL. (au':-)
0('45 CDA90e CALL IHPHL
0 .... 8 D398 OUT (VOPDAT) • ill
DO .. A 2A.:59FB LD HL. (BUF+2 ~
0 .... 0- CD-AVD. CALL rl1PHL ,ATIVA SCREEN e_ 1A.JUSTA PRIh£I;RA POSICAO OA ,TELA _

;AGUAROA SIH;CRONISHO_

~Sf.: HA :ERRO. :SALTA_

,LE os leo BYTES .DE TIPO D£ AR,QUIVO_

~ 5E TtPO o-rF"E,('!EHTE. T£rHA JOE NOVO.

ILE £" IHPRIHE ,0 NOME DO JARQUIVO.

.IHPRIHE .)) ••

,AGUARDA SIH;CRONISHO_

:LE OS 6 8YTf;:S ;COM os ENOE,RECOS DO 8SAV£_

~COLOCA HA HE:,MORIA.

:PRO)(. OYTE _

,IHPRII"if;: OS JEMDERECOS LI,DOS OA FITA.

89

00'5. 0399 DfJ~:2: ::::OA~BF"B 08:5:$ COA-90e D.:::iB 3E2. D.~A &1>12 oe:sc

o.~c D399 oese: leF"C. oe6.0 2AS7FB Ofl63 EDSB~9Fe 0067 13

D86B A~

0.69 32~OFe oe6C

oe6C E:~ 0.6.0 0'5 O.6E CDE48. D."1 01 0.72 El D.73 3S.E De7:i .:IE

D679 23 D87111 1117 De7B E:5 D87C ED~Z D.7E El D.7F 2eEU D.81 10.:5

DeB3

DeB3 :lE8l D8B5 325DFB 08BB

D.BS 211 ... 0888 CDC6 •• DeBE CDE:;t ••

D.91 3A:5DFB 0.9.. ,.7 Oe9:5 C9 0.96 21FCD. 0.99

0.99 7E 0.9111. 1'07 0.911 I:B 0.9C 23 0.90 CDA2 •• D.Ae 18F7 O.A=<!

D.A2 CDA9D9 DeA:> C08c40. V.AS C9

D.1'II9

D8A9 F5 O.AA l'C oeAa COC70. D.AE 70 oeA~ CDC7D. D8B2 F1. oeD3 C9 0884

O.R-4 f":5

088'5 :)E2D D.87 0.::199 DeB9 F1 l>09A COC7De neRD 3E.20 o.ur D399 DDC1. 3E~ti oeC3 32:5DFB

98

LOOPS;

LOOPI

FII'U.I

LOOPI1'

OUT LD CALL LD LD

OUT DJNZ L() LD INC )({IoR U)

PUSH PUSH CALL POP POP -JR CP

(VDP[)AT). A HL. (aUF+"') IHPI-tL

11.32

8.1.8

(VDPDAT) • A LOOPS ~L~(BUF) OE; F (BUF+2) DE

A

(FLE) .A

HL o-=::

TA.P IN DE

HL C.F'"IHl (HL)

[NC HL

AND A

PUSH HL sac HL.DE

POP H1..

JR HZ.LOOP JR FIH

LO LO

A.i (FLE) .11.

LD HL .. 16 CALL POSIT CALL TfliPIOF

LD A. (FLE>

AND A

REl' ... 2:

LD HL. .. "ENS

LD AMO RET INC CALL JR

IHPDAII CALL CALL RET

IMPHLI

PUSH LD CALL L..O CALL POI'> A:El"

A. (HL) A

Z

HL CHPUT LOOP'"

IHPHL IHPD

AF A.,H IHPA A.L IHPIII Ar

PUSH AI'"

LO A. F_.

OUT POP CALL LO OOT LO LD

(VOPOA T) .. " AF

H1PA

A.32 (VDPDAT) ,A A .f

(FLE) .A

,1I1PRIHE EBPA'Cos.

,IHICIA COHPA,RACAO.

,LOOP DE COHPIt~~Af;:AO_

~L£ UH BYTE_

,COMPARt& COM AI rI1EHORIA.

,SE: HA EMRO. ;II1PRI.HE; ENJDERE~O E 0 ,DADO.

,PROXIHO 8YTE.

rTE:9TA SE TER,ttlNOU.

,rIM Dlil COI'1PA,RAf;AO.

~ACENOE I"'LAG JOE ERROS.

,POSICIONA CUR,SOR _

,E:NCERRA LE1TU·;~A DA FITA_ ~TESTA FLAlJ DE ,ERRO_

rSE HAO HA ERRO. ,IMI"RII1E ttE,..SAIGEH_

rROTINA DE IH,I"RESSA() DO

,BYTE DIVERGENTE_

,J~P~I"E 0 ENOEIRECO (VALOR HL)_

IIHPRIHE 0 DADO_

,ACENDE FLAG ,O:E ERRO_

oeCb C9

DeC7 IHPAz

oeC7 F~

Del:8 CB3F

oec" CB3F

Dace CB3F

oeCE CB3F

081:) •• 1ECD.

DeD:;) al

0.D4 -4F

08D5 3E: ••

oe07 lOIS

D.Da .... ,.-

oe09 &A

D.DA 039'8

DaDe Fl

0800 E69F

08DF e1Ecoe

0.£2 B1

DeE3 ... F

t>eE4 3E9.

DeE6 88

D.1:::7 47

DeED eA

oeE9 0:398

DeED C9

08EC BASE-

oeEC 36313233

DeF& 3 ... 353637

oeF'''' 3B39'~1~2

oaFB -43""",.045"'6

oeFC "ENS=

OtIJFC .O&AS34~

01..'" ... 0204552

01.34 524F538D

D:l..a eA ••

RET

PUSH AF SRL. AI SRL A SRL SRL L.D AOD

LD

L.D Ace LD LO OUT POf> AND LD AOD 1..0 LD AOC LI) LO OUT RET

IROTINA QUE IIHPRIHE 0 JYALOR DO ,A.CUMULA[)QR_

A

A 8CrBASE

A.C C"A A.e A .. B B.A

ill, (BC) (VOPOAT).A AI'"

1:5

BC .. BASE A.C

(:"A

A.e

A.9

9.110

A. (lIe) (VOF"OAT'.A

Jig. I>I6ITO_

OEFB ·.1~34~67B9AeCDEF~

Para executar 0 verificador. vDci dever' utit izar os comandos DEFUSR~&HC •• e e PRINT U5R(I) ou entao tents implementa-Io como comando alterando 0 hook do comando IPL (que nao e usado pelo sistema).

AS VELOCIDADES DE GRAVAC~O

Urn a curiasidade do s.stema de cassata do MSX i a possibi I idade de se alterar a vel Del dade de grava~io por software. De fato. exlstem dUBS variavais do slstsma que indlcam a valocidada com que um bit' "enviado a fitar

LOW (&HF406-&HF407):

Estes dois bytes determinam a dura~iD do pulso correspDndente a um bit 8. 0 primeiro byte indica a dura~ao da parte baixa do puJso. 8 0 segundo de a parte alta do mesmo.

HIGH (&HF408-&HF409):

o mesmo que LOW. 50 que para 0 bit 1.

Quando 0 computador , iniciallzado. a velocidade de grava~ao e ajustada para 121. BPS (bits por

91

segundo ). e os W'alor8s i n l c l a t s dessas variaveis sao:
LOW: &HF 4'}t.1 OJ ( d e c i ma l >
&HF407 92 (dpc i m a I )
HIGH: &HF408 ~:IB (dec im~)l)
&HF409 41::· ( (I E' C i m e\] )
,-,
E os va!ores para 24B8 BPS sio~ LOW: &HF406 :37 ( (I € c j m a '1 )
&HF407 45 (df':C i I'll!:' 1 )
HIGH: gHF408 t4 (decimal)
&HF409 '1 '') (decimal)
c.:c: Ex,ste tambem uma var;avel chamada HEADER (&HF48A). que indica 0 comprlmento (am bits) dQ sinal agudo (Nh8ader~) que antecede as gravicoes. Normalment e . seu valor" de 15 (para 1288 BPS) e de 31 (para 2498 BPS). 0 n6mero de btts enviados e ~gual ao conte6do de HEADER multipl~cado por 128. Assim. 0 Hheaderw pos5ur 1928 bits de compr.mento para 1288 BPS. a 3968 bits para 24'8 (eijidentemente. aprnxjma~o85 de 28'8 bits e 4'" bits raspectivamente). Note que esta d~feren~a de comprimento i davida a diferen~a de dura~ao de urn bit Indivldualmente. Que no segundo caso i metade do prlmeiro. e com isto 05 do~s -headers~ tim a mesma dura~io global. Trocando em mi6dos. 0 ~head8rH pode ser entendido como um gigantesco b,te em que todos as bi ts e s tjiu "s e t adcs" (em n l v a l 1).

o fato mais marcante do sistema cassete HSX 6 a modo como ala Ie as grava~oeSI as 181turas sao assfncrDnas. ou seja. quem determina a velocidade de leitura nao , 0 computador. mas a pr6pria grava~ao. De fato, se ~oci gravar urn programa com as variaveis lOW e HIGH alteradas (e portanto com velocidade alterada), cons89uira ler asses dados sem prob~Bmas. mesmo que as duas vartaveis tenham sido restauradas (ou at' alteradas para va I ores aDsurdos). I sto e mu i to vantaj 050 em t e r m os dec 0 n f i a b j lid ad e • j' que. con t r a r i am e n t 8 a () utros sistemas, as varia~oes de rota~iD de um gravador nso afetam a 'aitura dos dados.

Apbs conhecer este sistema tiD flexrveJ, voci js deV8 estar pensando em alterar 3S vari6vejs lOWe HIGH para um valor muito manor com 0 objetlvD de aumantar a valocidade de 9rava~io. Teoricamente iS50 , possfvel at' mais de S8e, BPS. mas 6 importanta stentar para dais fato5z

92

1. Neo e QualQuer gravador que consegue gra~ar sinais tao rapidos. e qualquer fita rate-los. Urn Data-Corder da Gradiente foi testado com fita cromo e superou a marca dos 4108 BPS com uma grande gama de volumes e 10B por cento de acerto. 0 que ~ muito bom. Mas isto nao , tudo.

2. 0 fjltro de audlo d05 MSX ~ dimensionado para bloquear sinais mais lentos que 1288 BPS e mais vel 0 l e 5 que 240' e BP S. T rat a - 5 e de urn f i I t r 0 pas s a - banda qua serve para reduzir as interferencias, mas que

t amb em I t mit a a \I e 10 c ida d e de 9 r a v a s a o. Are 5 p 0 5 t a

des s e f i I t r 0 , imp I a c a \I e l , ate s tan d 0 abo a qua 1 ida d EI conferida por seus fabricantes.

Percebe-S8 Que aumentar a velDcidade de gra\la~80 neo e tio simples, pois torna-se necessario POS- 5uir conhacimentos de Eletr6nica e ~meter a mao na massan alterando 0 fi Itro passa-banda do m;cro. Se voci tentar (e conseguir) faze-Jo. 8screva-nos contando 5 u a e x per i e n C i .a .

..

~:

93

94

5

o SISTEMA DE CARTUCHO

Neste capftulo veremos basicamente, como 0 sistema MS)( i n i c l a l iza e reconhece 0 que as t a conectado em cada urn dos seus slots; como trabalha com os cartuchos de programas; onde 8stio local rzadas as variaveis que 0 MSX uti I iza para armazenar as informa~oes sobra cada slot; como funcionam os injcializadD~ res de jogos para jOg05 que estavam em cartucho e como relocar programas em Assembl~ para as paginas 8 e 1 de um slot no quat existe mem6ria RAM e como implementar o comando GAll atrav~s do BAS1C.

Par a 0 lei tor me n 0 5 f am i ~ tar i z ado com 0 5 i 5- tema MSX, recomendamos que antes de ler este capitulo. lela ou revise os conceitos basicos sabre slots e paginas de mem6ria no ~ ivro "Aprofundando-se no MSX", desta masma Edltora.

INICIALIZA~~O DO SISTEMA

Toda vez em que voce t iga seu computador M5X, ele come~a procurando NondeH Bst~ cont~da a mem6ria RAM em SBU sistema, sendo que 8ssa procura e feita tanto nos slots primarios, quanto nos secundarios.

Essa procura de mem6ria RAM e inicial izada testando-se, em primeiro, lugar a regiao de memoria &HBFFF; decrescendo ate 0 endere~o &H801e 9. ap6s ter

95

achado um slot que a contenha, habi I ita essa pag5na para poder usa-Ia. Continua a procura de memorJa RAM, rBpetindo 0 prDcesso duscrito acima. 50 que d8sta vez, fazendo teste na mem6ria que val do end8re~o &HFFFF decrescendo at' 0 end8re~o &HC00e a tamb6m a habi I Ita para ssr usada.

Entretanto. mesmo que 0 sistema ja tenha tocat izado em qual slot. e em que pagtna exists membrla RAM, a HSX ira fazBr outra busca de mem6rja RAM. 50 que agora, procurando um biDeD contfnuo de memoria qua possa ser habi tttado desde 0 end8r8~D &HFFFF ate &H8000. Em segu~da. sera feito urn teste para habi I itar definitivamante urn bloco de mem6rla que est~ver ~mais perto~ do slot • OU~ no pr6p~o slot 8, mas desde que esse esteja expandido.

Ap6s asses breves mas complicados testes, 0 MSX ir~ fazer todo 0 resto da sua inicial ~za~ao, como por exemplo, a configuracio das vari6veis do sistema para, logo em s8guida. come~ar a procurar os cartuchos de programas B passar a executa-los.

RECONHECIMENTO DE CARTUCHOS

Urn cartucho conectado em urn dos slots do MSX pode ser reconhecjdo, basicamentu, atraves dos do~s primeiros bytes da mem6r.a dasse m8smo cartueho, atravis de uma pequena procura feita peto sistema apbs ser I igadQ e ter fejto os testes que foram descritos acima.

Na real fdade, existam variDS bytes Que aiudam o MSX a reconhBcer um cartucho de programas.

A figura 5.1 apresenta. esquemat~cam8nt8. esses bytes.

IDENTIFICATION - IDENTIFIGACiO

Sao usado5 nestes dois primslro5 bytes os valores ~H41 e iH42 (HA" e -BN) para identlflcar urn cartucho de programas ROM de pag~nas vazlas.

INIT - INfclO

Estes b,tes contem 0 8ndere~o para 0 procedimento de iniclal iza~ao para 0 cartucho que vai ser executado. No caso de NAO 58 desejar uma inicfal jza~ao desse mesmo cartucho. dey! ser colocado ne5te~ brtes. o ~alor te. Tais bytes 56 sio usados caso NAO 58 deseje trabalhar cooperat~vamente com 0 Intel Jratador BASte. como Dor exemplo, nos jOQOS em Assembty

96

rIGURA 5.1 - Bytes usados para reconheci.ento pel0 5~ste.a

OEFAULTt&Hee00 +&Heee2 +&1-1880'4 +&Hee0S t&Hee88 +&Hee8A

+&Heel&

IDENTIFICATION
IN IT
STATEMENT
DEVICE
TEXT
RESERVADO
INiCJO DA AREA
DE PROGRAMAS Exempl ificando uma exe£u~aa direta de urn cartucho dB programas. poder(am05 tar urn dump de mem6- ria semelhante ao da figura 5.2.

FIGURA 5.2 - DUIP do infcio de UI cartucho

+-- endere~o de eXBcu,~O

4008 4142 1& 49 ~X XX XX XX AB .

489B XX XX XX XX XX xx xx xx . _.

4818 xx XX xx xx xx xx xx xx . ._

. ,

- ; I I

I I

I I I I

7FFf

No dump da figura 5.2, 1090 apes I.garmns 0 computador, ele ira habi I ltar 0 cartucho a passar a executar a programa contidG no cartucho 0 oart:~ da BndBre~o &H4018.

STATEMENT - EXPANSiO DE COMANOOS

Estes b,tes devam cor.t6r 0 enCHrsco no qu~i n procassador dever' executar 0 programa 8m AS56mhly. quando sa deseia trahalhar coopar3t~vam~nta ~Gm 0 ~n-

97

t B r pta tad 0 r BAS Ie. G a 50 na 0 58 qua ira, de IJ a 5 ere 0 I D-

cado nsstes bytes, 0 valor 81.

Quando 0 Interpretador BASIC do MSX encontra o comando CALL (NOME), ela ira co~ocar 0 nome com que foi chamado 0 disposit.vo na area de sistema para, logo em 58guida, eX8cutar 0 endere~o contido nestes bytes. Para usar 8558 tipo de chamada atrav~s do BASIC. tamos um procedimento a ser seguido, que e explicado abalxo :

1 ~ 0 par de reg i stradores HL rea I j z a funl;ao de apontador de texto.

2 - 0 car t u c hot em que est a r h a b iii tad 0 d a posl~ao de mem6r5a que vai de &H4880 ate &H7FFFH.

3 - A sintaxe para se poder usa-Io e:

CALL < NOME} [ < AR GUMENTO > ]

4 - 0 noma e estocado na area de s'stema, terminado com 88. Oave-S8 lembrar que 0 buffer para 0 noma tern um comprimento fixo e m'ximo de 16 bytes, mas o name nao pode tar rnais do que 15 caracteres.

5 - 'Sa nio ax i st i r 0 nome no cartucho com que foi chamado 0 program3. 0 mesmo dever! retornar ao BASIC com a GARRY FLAG setada e 0 apontador de texto (Hl) descarregado.

6 - Sa existir 0 nome no cartucho (ou no proS r ama ). est 8 ex e cut a r' 0 P r 09 r ama. at u a liz a r a 0 a p 0 ntador de texto (Hl) para 0 flm do nome (u5ualmente, apontando para 0 byte 88 que indica fim de I inha. 00 WIN que indica fim de nome (d8clara~ao), e retorna com a CARRY FLAG resetada. No caso de sa usar os argumentas. 0 apontad~r de texto 'carregado com a endere~o que aponta para 0 primeiro caracter nao branco {Ie} apos 0 nome.

NOTA I 10005 as REGISTRAOORES POCEM SER DESTRUIDOS. EXCETO 0 REGISTRAOOR [SP).

DEVICE - EXPANSiO DE DISPO$ITIVOS

Estes bytes contem 0 endereco de eX8cu~io do programa, 0 qual cont~m uma rotina para a manipula~io de urn disposttivo, se este estiver contido no cartucho. Gaso nio exista urn dispositivo {e om programa pa-

98

ra esta manipula~ao~, estes bytes daverio conter 0 valor eB.

Caso exista urn dispositivo. 0 BASte ira executar esse endere~o de acordo com 0 nome que 8stivar na area de sistema. Para usar mai5 essa faci I idade que o BASIC MSX nos permite, temos oseguinta procedimento:

, - 0 car t u c hot em que est a r h a b iii t ado. d a posj~ao de memoria Que vai de &H4008 ate &H7FFF_

2 - 0 nome do dispositivo e estocado na area de sistema. terminado com 88. 0 buffer para esse nome tem comprirnento fixo de 16 bytes, mas 0 nome do dispositivo nao pode ser maior do que 15 caracteres_

3 - Urn cartucho de 16 Kbytes pode ter ate 4 dispositlVDS logicos.

4 - Quando 0 BASIC encontra 0 nome de urn dispositlvo que ele mesmo nan reconhece, ete chama 0 sistema de expansao de dispositivos (SOFTWARE) com 0 valor fFH no rogistrador A. Sa 0 manuseio para aque'e dispositlvo nio estiver implementado no cartucho, eJe ira retornar com a GARRY FLAG setada. Entretanto. S8 e s t l var i mp l eme n t a dn , a identifica~ao (ID) do disposit~vo (de 8 a 3) sera retornada no registrador A, e a CARRY FLAG resetada.

5 - Uma opera~ao de arquivamento e real izada quando 0 cartuchn reconhece um dispos.tivo pr6prio. e Bssa opera~ao e especificada pulos 'seguintes valores passados pelo registrador A z

o - Open 2 - Ctose

4 - I/O randBmico

6 - Sa(da sequencial

8 - Entrada seQuencial 10 - Fun(fio lOC

12 - Fun~ao LOF

14 - Funl;8o EOF

18 - FUnl;,ao FPOS

18 - Gopia um caracter

A identificatao do dispositivo e passada na variavel da sistema "OEVICEN•

99

TEXT - TEXTO

Estes bytes contem 0 endere~o do texto BASIC {tokenizado) contido no cartucho_ Caso voce nao queira colocar urn programa em BAStG no cartucho, estes bytes devem canter 0 valor 09.

Caso eXlsta 0 programa BAS~G, 0 sistema Ir~ pegar estes dois bytes como endereco inicial do texto BASIC, setara 0 apontador e iniciara a sua execu~ao_ Para implementar 0 texto BASIC em cartucho, sugerimos que sejam seguidas as regras abaixol

1 - Quando existtr mais do que um cartucho semelhante conectado em um dos slots, 0 sistema ira executar 0 cartucho de programas que estiver ~mais pr6ximD" do slot 8.

2 - 0 cartucho deve e s t ar habi I i t ado para que seia 8~ecutado entre os endere~os &H8888 ate &HBFFF e o programa BASIC nao podera Bxceder a 16 Kbytes.

3 - Se existir memoria RAM em Qualquer outro slot na raglio de memoria Que vai do 8nder8~o &HB088 ate &HBFfF, esta nao podera ser usada_

4 - 0 endere~o apontado pelos bytes &H8818 e &H88 e 9 (i nrc i 0 do t ext 0 BAS rc i. de v era con t B r 0 valor 88.

5 - Quanto aos numeros de t inhas (para declaracoes que referenciam numeros de linhas, tal como GOTO, GOSUa, etc~, a melhor op~io , a tran5forma~io em Apop.tadoras em Progresso, pois em S8 tratando de um cartucho de memoria ROM eras nunca serao convertidos para apootadorss quando am execu~ao_

VARIAVEIS DO SISTEMA DE SLOTS

Assim como outras varl6vels da ststema, 0 MSX po~sui tambim uma ar!a na qoal estio conttdas tDdas as inform~~oe5 (variaveis) a respeito dos slots, e Que podeffi 59r Gonsultadas ou mOdificadas palo sistema OU p~!o usuario_ Essas variavels sio atualizadas paiD sistema de modo que em qualquer momenta 0 MS~ possa saber a que 8St~ conectado em seus slots, como por tl~Am~!n_ um cartucho com expansio de comandos (comando GAll), alguns disposit!vos como urn cartio de 88 colun a s . RS232~G, e t c ,

Potrebbero piacerti anche