Re: Assembling Z80 source using TASM or similar
Posted: Sun Jun 27, 2021 2:45 pm
Sorry, I just realized the '700 has five function keys, not four. Anyway, none of them do anything using the above program.
Jj
Jj
A forum about Sharp MZ computers. This forum is in no way affiliated with Sharp Corporation.
https://forum.sharpmz.no/
Code: Select all
CHECK_F_KEYS:
LD DE, $E000
LD A, $F9
LD (DE), A
LD DE, $E001
LD A, (DE)
CP $7F
JP NZ, CHECK_F2
LD A, $F1
CALL PRINT_CODE
JP EXIT_F_KEYS
CHECK_F2:
CP $BF
JP NZ, CHECK_F3
LD A, $F2
CALL PRINT_CODE
JP EXIT_F_KEYS
CHECK_F3:
CP $DF
JP NZ, CHECK_F4
LD A, $F3
CALL PRINT_CODE
JP EXIT_F_KEYS
CHECK_F4:
CP $EF
JP NZ, EXIT_F_KEYS
LD A, $F4
CALL PRINT_CODE
EXIT_F_KEYS:
RET
Code: Select all
; -----------------------------------------------------------------------------
; Reset keyboard
; --------------
; in:
; none
; out:
; flag Z = 1 if no change else 0
kbd_reset:
XOR A
JP @0f
; -----------------------------------------------------------------------------
; Read keyboard
; -------------
; in:
; none
; out:
; A = current keymap - one bit set to 1 means keypressed
; (bit 7: [BREAK], bits 6,5,4: [F1][F2][F3], bit 2: [SPACE], bits 1,0: [->][<-])
; C = previous keymap - same rationale as current keymap
; flag Z = 1 if no change else 0
kbd_read:
LD HL,PPI8255_KEYPA ; port A to select keyboard matrix column
LD DE,PPI8255_KEYPB ; port B to read keyboard matrix row
LD B,$F0+6 ; matrix column 6
LD (HL),B ; select keyboard matrix column containing SPACE key
LD A,(DE) ; read keyboard matrix row
CPL
AND $10 ; SPACE bit
LD C,A
INC B ; matrix column 7
LD (HL),B ; select keyboard matrix column containing [<-/->] arrows keys
LD A,(DE) ; read keyboard matrix row
CPL
AND $0C ; [<-] and [->] arrows bits
OR C
RRCA
RRCA
LD C,A
INC B ; matrix column 8
LD (HL),B ; select keyboard matrix column containing [BREAK] key
LD A,(DE) ; read keyboard matrix row
CPL
AND $80 ; BREAK bit
OR C
LD C,A
INC B
LD (HL),B ; select keyboard matrix column containing [F1/F2/F3] keys
LD A,(DE) ; read keyboard matrix row
CPL
AND $E0 ; [F1/F2/F3] bits
RRCA
OR C
@0: LD HL,kbd_keymap
LD C,(HL) ; retrieve previous keymap in C register
CP C ; compare it to current keymap in A register
RET Z ; no change of key status
LD (HL),A
RET