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