RosettaCodeData/Task/Loops-For/Z80-Assembly/loops-for.z80
2015-11-18 06:14:39 +00:00

41 lines
664 B
Z80 Assembly

org &4000 ; put code at memory address 0x4000
wr_char equ &bb5a ; write ASCII character in register A to screen
; (jumps into CPC ROM)
; put registers on stack so we can return to BASIC later
push bc
push de
push hl
ld b,5 ; loop from 5 to 1
row:
push bc ; save outer loop variable
; calculate inner loop limit (6 - outer loop variable)
ld a,6
sub b
ld b,a
column:
ld a,42 ; asterisk in ASCII
call wr_char
djnz column ; decrement B, jump to label if non-zero
pop bc ; restore outer loop
; print carriage return/line feed
ld a,13
call wr_char
ld a,10
call wr_char
djnz row
; restore registers
pop hl
pop de
pop bc
ret ; return to BASIC interpreter