|
|
|
@ -5,6 +5,22 @@ |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
; NABU KEYBOARD CODES: |
|
|
|
; |
|
|
|
; $00-$7F STANDARD ASCII CODES |
|
|
|
; $80-$8F JOYSTICK PREFIXES ($80 = JS1, $81 = JS2) |
|
|
|
; $90-$9F KEYBOARD ERROR CODES |
|
|
|
; $A0-$BF JOYSTICK DATA |
|
|
|
; $C0-$DF UNUSED |
|
|
|
; $E0-$EF SPECIAL KEYS |
|
|
|
; |
|
|
|
; NOTE THAT THE ERROR CODE $94 IS A WATCHDOG TIMER THAT WILL BE |
|
|
|
; SENT BY THE KEYBOARD EVERY 3.7 SECONDS. |
|
|
|
; |
|
|
|
; THE CODE BELOW WILL IGNORE (SWALLOW) THE ERROR CODES ($90-$9F) AND |
|
|
|
; WILL TRANSLATE SPECIAL KEYS ($E0-$FF) TO ROMWBW EQUIVALENTS. ALL |
|
|
|
; OTHER KEYS WILL BE PASSED THROUGH AS IS. |
|
|
|
; |
|
|
|
; KBPORT EQU $90 |
|
|
|
; |
|
|
|
; POLL FOR INPUT |
|
|
|
@ -58,18 +74,28 @@ NABUKB_STAT: |
|
|
|
RET NZ ; KEY WAITING, ALL SET |
|
|
|
IN A,(NABUKB_DAT+1) ; GET BKD STATUS |
|
|
|
AND $02 ; CHECK DATA RDY BIT |
|
|
|
JR Z,NABUKB_STAT1 ; BAIL OUT IF NOT |
|
|
|
JR Z,NABUKB_STATX ; BAIL OUT IF NOT |
|
|
|
IN A,(NABUKB_DAT) ; GET THE KEY |
|
|
|
BIT 7,A ; HIGH BIT IS SPECIAL CHAR |
|
|
|
CALL NZ,NABUKB_XLAT ; IF SO, TRANSLATE IT |
|
|
|
JR C,NABUKB_STAT1 ; CF INDICATES INVALID |
|
|
|
JR Z,NABUKB_STAT2 ; IF NORMAL CHAR, BUFFER IT |
|
|
|
CP $90 ; START OF ERR CODES |
|
|
|
JR C,NABUKB_STAT1 ; NOT ERR CODE, CONTINUE |
|
|
|
CP $A0 ; END OF ERR CODES |
|
|
|
JR NC,NABUKB_STAT1 ; NOT ERR CODE, CONTINUE |
|
|
|
JR NABUKB_STATX ; IS ERR CODE, IGNORE IT |
|
|
|
NABUKB_STAT1: |
|
|
|
CP $E0 ; SPECIAL CHARACTER? |
|
|
|
JR C,NABUKB_STAT2 ; IF NOT, SKIP XLAT, BUFFER KEY |
|
|
|
CALL NABUKB_XLAT ; IF SO, TRANSLATE IT |
|
|
|
JR C,NABUKB_STATX ; CF INDICATES INVALID |
|
|
|
NABUKB_STAT2: |
|
|
|
LD (NABUKB_KEY),A ; BUFFER IT |
|
|
|
LD A,1 ; KEY WAITING STATUS |
|
|
|
LD A,1 ; SIGNAL KEY WAITING |
|
|
|
LD (NABUKB_KSTAT),A ; SAVE IT |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
NABUKB_STAT1: |
|
|
|
NABUKB_STATX: |
|
|
|
XOR A ; SIGNAL NO CHAR READY |
|
|
|
JP CIO_IDLE ; RETURN VIA IDLE PROCESSOR |
|
|
|
; |
|
|
|
|