Odpovídáte na názor k článku Vývoj pro ZX Spectrum: vlastní vykreslovací subrutiny potřetí. Názory mohou přidávat pouze registrovaní uživatelé. Nově přidané názory se na webu objeví až po schválení redakcí.
U toho vypisu matrixu znaku
draw_ascii_table:
; Vytištění ASCII tabulky
;
; vstupy:
; DE - adresa v obrazové paměti pro vykreslení znaku
ld a, ' ' ; kód vykreslovaného znaku
next_char:
push af ; uschovat akumulátor na zásobník
call draw_char ; zavolat subrutinu pro vykreslení znaku
ld a, ' ' ; vykreslit za znakem mezeru
call draw_char ; zavolat subrutinu pro vykreslení znaku
pop af ; obnovit akumulátor ze zásobníku
inc a ; ASCII kód dalšího znaku
cp ' ' + 96 ; jsme již na konci ASCII tabulky?
jr nz, next_char ; ne? potom pokračujeme
ret ; návrat z podprogramu
bych postupoval jinak. Prohodil bych mezeru na zacatek jako prvni znak. tim bych presunul problem prelezu pres tretiny na rutinu draw_char a mezeru bych "tisknul" zvednutim indexu E.
Pak kdyz se podivame jak ukoncujeme smycku tak zjistime ze to jde nahradit pres sign flag, takze zadne cp 128 neni potreba. Celych 5 bajtu dolu, nebo 1 bajt kdyz jen vyhodime cp.
draw_ascii_table:
; Vytištění ASCII tabulky
;
; vstupy:
; DE - adresa v obrazové paměti pro vykreslení znaku
ld a, ' ' ; kód vykreslovaného znaku
next_char:
inc e ; "vykreslit" pred znakem mezeru
push af ; uschovat akumulátor na zásobník
call draw_char ; zavolat subrutinu pro vykreslení znaku
pop af ; obnovit akumulátor ze zásobníku
inc a ; ASCII kód dalšího znaku
jp p, next_char ; ne? potom pokračujeme
ret ; návrat z podprogramu