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