ZX Spectrum : опрос клавиатуры

 


код из Exolon плюс мое дополнение: печать кода и символа

;sjasmplus
device zxspectrum128
        ORG #6000
begin
loc_6FE8:
call sub_ACD1 ; key scan
or a
jr z, loc_6FE8
;print char
ld (msg),a
;code
        push af
        srl a
        srl a
        srl a
        srl a
        call hex0
        ld (msg+2),a
        pop af
        call hex0
        ld (msg+3),a
;print msg
ld ix,msg
ld de,$4000
prm:
ld l,(ix+0):inc ix
add hl,hl
ld h,15
add hl,hl
add hl,hl
push de
ld b,8
ch8:
ld a,(hl),(de),a
inc hl,d
djnz ch8
pop de
inc e
ld a,(ix+0)
or a:jr nz,prm
jr loc_6FE8
hex0:
        and $0F
        cp 10
        sbc a,$69
        daa
        ret
msg:
db "0:00",0
;-----------------------------------------------------------
sub_ACD1:
push bc
push hl
ld hl, unk_ACEF
ld d, 0FEh ; 'ю'
loc_ACD8:
ld a, d
in a, (0FEh)
ld e, 1
ld b, 5
loc_ACDF:
rrca
jr nc, loc_ACEB
inc hl
sla e
djnz loc_ACDF
rlc d
jr c, loc_ACD8
loc_ACEB:
ld a, (hl)
pop hl
pop bc
ret
; ---------------------------------------------------------------------------
unk_ACEF: db    1
db  5Ah ; Z
db  58h ; X
db  43h ; C
db  56h ; V
db  41h ; A
db  53h ; S
db  44h ; D
db  46h ; F
db  47h ; G
db  51h ; Q
db  57h ; W
db  45h ; E
db  52h ; R
db  54h ; T
db  31h ; 1
db  32h ; 2
db  33h ; 3
db  34h ; 4
db  35h ; 5
db  30h ; 0
db  39h ; 9
db  38h ; 8
db  37h ; 7
db  36h ; 6
db  50h ; P
db  4Fh ; O
db  49h ; I
db  55h ; U
db  59h ; Y
db  0Dh
db  4Ch ; L
db  4Bh ; K
db  4Ah ; J
db  48h ; H
db  20h
db    2
db  4Dh ; M
db  4Eh ; N
db  42h ; B
db    0
end
display /d,end-begin
savesna "!void.sna",begin


Комментарии