41 lines
664 B
Z80 Assembly
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
|