terça-feira, 5 de novembro de 2019

Z80 assembly: imprimir números inteiros em ZX Spectrum

Para imprimir números inteiros, não é preciso escrever uma rotina de raiz em ZX-Spectrum.
Apresentamos dois métodos a usar a ROM:

1) Usando as rotinas do stack de floating point da ROM:


; HL = NUMBER ;
PRINT_DEC:
CALL $2D2B ; Store BC in calculator stack
JP $1A30 ; Print top of calculator stack

Para usar esta rotina, então, como exemplo:


LD BC,30000
CALL PRINT_DEC

RET

2) Usando puramente inteiros

Vamos (ab)usar e estender a rotina da ROM para imprimir número de linhas BASIC. No entanto, como esta rotina só imprime números até 9999, vamos ter que acrescentar código nosso, e entrar a meio da rotina.

Para tal, vamos ter que escrever código que encaixe na ROM, e coloque no stack HL e DE, como o faz a rotina de entrada normal por OUT-NUM-1.

Fazemos então:



; ; PRINT 16 BIT SIGNED NUMBER
; HL = NUMBER ;
PRINT_DEC:
PUSH DE
PUSH HL
LD E,$20 ; SPACES
LD BC,$D8F0 ; -10000 SIGNED INTEGER
CALL $192A ; routine OUT-SP-NO ;outputs space or number
JP $1A30 ; jumps to OUT-NUM-3

Para usar esta rotina, então, como exemplo:



LD HL,30000
CALL PRINT_DEC

RET

Nota: os inteiros em Z80 representam números na range -32768 / + 32767

Sem comentários:

Publicar um comentário