RosettaCodeData/Task/Integer-sequence/Z80-Assembly/integer-sequence-2.z80

89 lines
1.1 KiB
Z80 Assembly

org &1000
PrintChar equ &BB5A
ld ix,NumberRam
main:
ld a,(ix+7)
call ShowHex
ld a,(ix+6)
call ShowHex
ld a,(ix+5)
call ShowHex
ld a,(ix+4)
call ShowHex
ld a,(ix+3)
call ShowHex
ld a,(ix+2)
call ShowHex
ld a,(ix+1)
call ShowHex
ld a,(ix+0)
call ShowHex
;NEW LINE
ld a,13
call PrintChar
ld a,10
call PrintChar
ld a,(ix+0)
add 1 ;we can't just INC (ix+0) since that wouldn't affect the carry flag. So we have to add one to the value.
ld (ix+0),a
ld a,(ix+1)
adc 0 ;and carry it forward up to the max number of digits.
ld (ix+1),a
ld a,(ix+2)
adc 0
ld (ix+2),a
ld a,(ix+3)
adc 0
ld (ix+3),a
ld a,(ix+4)
adc 0
ld (ix+4),a
ld a,(ix+5)
adc 0
ld (ix+5),a
ld a,(ix+6)
adc 0
ld (ix+6),a
ld a,(ix+7)
adc 0
ld (ix+7),a
jp main
ret ;RETURN TO BASIC
ShowHex:
push af
and %11110000
rrca
rrca
rrca
rrca
call PrintHexChar
pop af
and %00001111
;call PrintHexChar
;execution flows into it naturally.
PrintHexChar:
;this converts hexadecimal to ascii.
or a ;Clear Carry Flag
daa
add a,&F0
adc a,&40
jp PrintChar
;ret
NumberRam: ;a 64-bit value, stored little-endian
db 01,00,00,00,00,00,00,00