Prepsal jsem jeste posledni program z kapitoly 15 do smycky. Takze jsem to stahnul ze 168 bajtu na 90 bajtu.
ENTRY_POINT equ $8000 ROM_CLS equ $0DAF org ENTRY_POINT BLINK_BIT equ %10000000 INTENSITY_BIT equ %01000000 BLACK_COLOR equ %000 BLUE_COLOR equ %001 RED_COLOR equ %010 MAGENTA_COLOR equ %011 GREEN_COLOR equ %100 CYAN_COLOR equ %101 YELLOW_COLOR equ %110 WHITE_COLOR equ %111 start: call ROM_CLS ; smazání obrazovky a otevření kanálu číslo 2 (screen) ld BC, str_keys_size ; 3:10 print Length of string ld DE, str_keys ; 3:10 print Address of string call 0x203C ; 3:17 print Print our string with ZX 48K ROM ld bc, 0xfef0 ; adresa portu, ze kterého budeme číst údaje ld hl, 0x5800 ; adresa, od které budeme měnit barvové atributy keypress: in a, (c) ; vlastní čtení z portu (5 bitů) ld e, 5 ; počet atributů + počet testovaných kláves next_key: rra ; přesunout kód stisku klávesy do příznaku carry jr nc, key_pressed ; test stisku klávesy ld (hl), WHITE_COLOR << 3 db 0xD2 ; jp nc,nn key_pressed: ld (hl), INTENSITY_BIT | (RED_COLOR << 3) next: inc l dec e jr nz, next_key ; opakovat celou smyčku 5x ld a, l add a, 32-5 ld l, a rlc b jp keypress ; další test stisku kláves str_keys: ; layout klávesnice z pohledu čipů ZX Spectra NEW_LINE equ 13 DB "^ZXCV", NEW_LINE DB "ASDFG", NEW_LINE DB "QWERT", NEW_LINE DB "12345", NEW_LINE DB "09876", NEW_LINE DB "POIUY", NEW_LINE DB $7f, "LKJH", NEW_LINE DB "_", $60, "MNB" str_keys_size equ $-str_keys end ENTRY_POINT
PS: U Fuse mam problem, ze me to nebere u ceske klavesnice cisla a naopak u anglicke to v basicu vyvolava spatne prikazy.
PPS: Jinak muj notebook zvladne ASDW (asi optimalizovano) + napriklad C+K+T a + space