Browse Source

PS2 Interrupt driven keyboard for Duo

For keyboard interface on I/O Multi board. Default is disabled. Requires interrupt #2 jumper set on I/O Multiboard, which is pin 11-12 in P5. Has limitations around port settings. Do not have a video card on my Duo so have been forcing a video driver to load and testing with PIP CON:=UR2: . Let me know what you think.
pull/460/head
b1ackmai1er 1 year ago
parent
commit
5d92341189
  1. 1
      Source/HBIOS/cfg_MASTER.asm
  2. 6
      Source/HBIOS/fv.asm
  3. 4
      Source/HBIOS/hbios.asm
  4. 2
      Source/HBIOS/hbios.inc
  5. 83
      Source/HBIOS/kbd.asm
  6. 246
      Source/HBIOS/ps2iface.inc
  7. 1
      Source/HBIOS/std.asm
  8. 4
      Source/HBIOS/vrc.asm

1
Source/HBIOS/cfg_MASTER.asm

@ -64,6 +64,7 @@ CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO
CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW
CPUOSC .EQU 1000000 ; CPU OSC FREQ IN MHZ CPUOSC .EQU 1000000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
INTPS2KBD .EQU FALSE ; USE INTERRUPTS FOR PS2 KEYBOARD
DEFSERCFG .EQU SER_9600_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) DEFSERCFG .EQU SER_9600_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM)
; ;
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)

6
Source/HBIOS/fv.asm

@ -1,6 +1,6 @@
;====================================================================== ;======================================================================
; VIDEO DRIVER FOR FPGA VGA ; VIDEO DRIVER FOR FPGA VGA
; http://s100computers.com/My%20System%20Pages/FPGA%20Z80%20SBC/FPGA%20Z80%20SBC.htm
; http://s100computers.com/My%20System%20Pages/FPGA%20Z80%20SBC/FPGA%20Z80%20SBC.htm
; ;
; WRITTEN BY: WAYNE WARTHEN -- 9/2/2024 ; WRITTEN BY: WAYNE WARTHEN -- 9/2/2024
;====================================================================== ;======================================================================
@ -36,8 +36,8 @@ FV_CTL .EQU FV_BASE+2 ; VGA CONTROL PORT
; ;
FV_BUFCTL .EQU $08 FV_BUFCTL .EQU $08
; ;
FV_KBDDATA .EQU $03
FV_KBDST .EQU $02
FV_KBDDATA .EQU $03 ; KBD CTLR DATA PORT
FV_KBDST .EQU $02 ; KBD CTLR STATUS/CMD PORT
; ;
FV_ROWS .EQU 40 FV_ROWS .EQU 40
FV_COLS .EQU 80 FV_COLS .EQU 80

4
Source/HBIOS/hbios.asm

@ -1137,7 +1137,7 @@ HBX_INTSTK .EQU $
; --- -------------- -------------- -------------- -------------- -------------- ; --- -------------- -------------- -------------- -------------- --------------
; 0 CTC0A INT1 -+ -+ -+ HCCARCV -+ ; 0 CTC0A INT1 -+ -+ -+ HCCARCV -+
; 1 CTC0B INT2 | | | HCCASND | ; 1 CTC0B INT2 | | | HCCASND |
; 2 CTC0C TIM0 | | IM2 | IM2 NABUKB | IM2
; 2 CTC0C TIM0 | | IM2 PS2KBD | IM2 NABUKB | IM2
; 3 CTC0D TIM1 | | INT | INT VDP | INT ; 3 CTC0D TIM1 | | INT | INT VDP | INT
; 4 UART0 DMA0 | Z180 UART0 | VEC UART0 | VEC OPTCRD0 | VEC ; 4 UART0 DMA0 | Z180 UART0 | VEC UART0 | VEC OPTCRD0 | VEC
; 5 UART1 DMA1 | CPU UART1 | GEN UART1 | GEN OPTCRD1 | GEN ; 5 UART1 DMA1 | CPU UART1 | GEN UART1 | GEN OPTCRD1 | GEN
@ -2361,7 +2361,7 @@ HB_CPU1:
CALL SN76489_PREINIT CALL SN76489_PREINIT
#ENDIF #ENDIF
#IF (DSRTCENABLE) #IF (DSRTCENABLE)
; THE DSRTC NEEDS TO BE INITIALIZED IN ORDER TO PERFROM THE
; THE DSRTC NEEDS TO BE INITIALIZED IN ORDER TO PERFORM THE
; CPU SPEED DETECTION BELOW. ; CPU SPEED DETECTION BELOW.
CALL DSRTC_PREINIT CALL DSRTC_PREINIT
#ENDIF #ENDIF

2
Source/HBIOS/hbios.inc

@ -347,7 +347,7 @@ NVSW_AUTOBOOT .EQU 3 ; Auto Boot NVRAM Switch
; ;
; AUTO BOOT MASKS ; AUTO BOOT MASKS
ABOOT_AUTO .EQU %00100000 ; AUTO=1/MANUAL=0 BOOT ABOOT_AUTO .EQU %00100000 ; AUTO=1/MANUAL=0 BOOT
ABOOT_TIMEOUT .EQU %00001111 ; MENU TIMEOUT IN SECONDS, 0=IMMEDIAGE
ABOOT_TIMEOUT .EQU %00001111 ; MENU TIMEOUT IN SECONDS, 0=IMMEDIATE
; DEFAULT BOOT MASKS ; DEFAULT BOOT MASKS
DBOOT_ROM .EQU %10000000 ; ROM=1/DISK=0 FLAG DBOOT_ROM .EQU %10000000 ; ROM=1/DISK=0 FLAG
DBOOT_UNIT .EQU %01111111 ; DISK UNIT DBOOT_UNIT .EQU %01111111 ; DISK UNIT

83
Source/HBIOS/kbd.asm

@ -4,6 +4,13 @@
; ;
; ORIGINAL CODE BY DR JAMES MOXHAM ; ORIGINAL CODE BY DR JAMES MOXHAM
; ROMWBW ADAPTATION BY WAYNE WARTHEN ; ROMWBW ADAPTATION BY WAYNE WARTHEN
; INTERUPT DRIVER ADDITION BY PHIL SUMMERS
;
;
; IN DEBUG MODE:
: >>nn SHOWS HEX COMMAND nn BEING WRITTEN TO THE COMMAND PORT
; >nn SHOWS HEX VALUE nn BEING WRITTEN TO THE DATA PORT
; <nn SHOWS HEX VALUE READ FROM DATA PORT
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
; ;
; TODO: ; TODO:
@ -42,7 +49,7 @@ KBD_NUMPAD .EQU 80H ; BIT 7, NUM PAD KEY (KEY PRESSED IS ON NUM PAD)
; ;
KBD_DEFRPT .EQU $40 ; DEFAULT REPEAT RATE (.5 SEC DELAY, 30CPS) KBD_DEFRPT .EQU $40 ; DEFAULT REPEAT RATE (.5 SEC DELAY, 30CPS)
KBD_DEFSTATE .EQU KBD_NUMLCK ; DEFAULT STATE (NUM LOCK ON) KBD_DEFSTATE .EQU KBD_NUMLCK ; DEFAULT STATE (NUM LOCK ON)
;
KBD_ACK .EQU $FA ; CMD ACKNOWLEDGE
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
; DATA ; DATA
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
@ -59,14 +66,29 @@ KBD_IDLE .DB 0 ; IDLE COUNT
DEVECHO "KBD: ENABLED\n" DEVECHO "KBD: ENABLED\n"
; ;
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
; HARDWARE LEVEL INTERFACE
;__________________________________________________________________________________________________
;
#INCLUDE "ps2iface.inc"
;__________________________________________________________________________________________________
; KEYBOARD INITIALIZATION ; KEYBOARD INITIALIZATION
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
; ;
KBD_INIT: KBD_INIT:
#IF ((INTMODE == 2) & INTPS2KBD)
CALL KBDQINIT ; INITIALIZE QUEUE
LD HL,KBD_INT ; INSTALL VECTOR
LD (IVT(INT_PS2KB)),HL ; IVT INDEX
#ENDIF
CALL NEWLINE ; FORMATTING CALL NEWLINE ; FORMATTING
PRTS("KBD: IO=0x$")
LD A,(IY+KBD_DAT)
PRTS("KBD: IO=0x$") ; DISPLAY
LD A,(IY+KBD_DAT) ; PORT SETTING
CALL PRTHEXBYTE CALL PRTHEXBYTE
#IF ((INTMODE == 2) & INTPS2KBD)
PRTS(" INT #$") ; DISPLAY
LD A,INT_PS2KB ; INTERRUPT SETTING
CALL PRTDECB
#ENDIF
; ;
LD A,KBD_DEFRPT ; GET DEFAULT REPEAT RATE LD A,KBD_DEFRPT ; GET DEFAULT REPEAT RATE
LD (KBD_REPEAT),A ; SAVE IT LD (KBD_REPEAT),A ; SAVE IT
@ -84,7 +106,7 @@ KBD_INIT:
CP $55 ; IS IT THERE? CP $55 ; IS IT THERE?
JR Z,KBD_INIT1 ; IF SO, CONTINUE JR Z,KBD_INIT1 ; IF SO, CONTINUE
PRTS(" NOT PRESENT$") ; DIAGNOSE PROBLEM PRTS(" NOT PRESENT$") ; DIAGNOSE PROBLEM
RET ; BAIL OUT
INT_RET:RET ; BAIL OUT
; ;
KBD_INIT1: KBD_INIT1:
PRTS(" MODE=$") ; TAG PRTS(" MODE=$") ; TAG
@ -101,8 +123,12 @@ KBD_INIT2:
; ;
LD A,$60 ; SET COMMAND REGISTER LD A,$60 ; SET COMMAND REGISTER
CALL KBD_PUTCMD ; SEND IT CALL KBD_PUTCMD ; SEND IT
; LD A,$60 ; XLAT ENABLED, MOUSE DISABLED, NO INTS
#IF ((INTMODE == 2) & INTPS2KBD)
LD A,$21 ; XLAT DISABLED, MOUSE DISABLED, WITH INTS
#ELSE
LD A,$20 ; XLAT DISABLED, MOUSE DISABLED, NO INTS LD A,$20 ; XLAT DISABLED, MOUSE DISABLED, NO INTS
#ENDIF
CALL KBD_PUTDATA ; SEND IT CALL KBD_PUTDATA ; SEND IT
CALL KBD_GETDATA ; GOBBLE UP $AA FROM POWER UP, AS NEEDED CALL KBD_GETDATA ; GOBBLE UP $AA FROM POWER UP, AS NEEDED
@ -159,35 +185,6 @@ KBD_FLUSH:
RET RET
; ;
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
; HARDWARE INTERFACE
;__________________________________________________________________________________________________
;
;__________________________________________________________________________________________________
KBD_IST:
;
; KEYBOARD INPUT STATUS
; A=0, Z SET FOR NOTHING PENDING, OTHERWISE DATA PENDING
;
LD C,(IY+KBD_ST) ; STATUS PORT
EZ80_IO
IN A,(C) ; GET STATUS
AND $01 ; ISOLATE INPUT PENDING BIT
RET
;
;__________________________________________________________________________________________________
KBD_OST:
;
; KEYBOARD OUTPUT STATUS
; A=0, Z SET FOR NOT READY, OTHERWISE READY TO WRITE
;
LD C,(IY+KBD_ST) ; STATUS PORT
EZ80_IO
IN A,(C) ; GET STATUS
AND $02 ; ISOLATE OUTPUT EMPTY BIT
XOR $02 ; FLIP IT FOR APPROPRIATE RETURN VALUES
RET
;
;__________________________________________________________________________________________________
KBD_PUTCMD: KBD_PUTCMD:
; ;
; PUT A CMD BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT ; PUT A CMD BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT
@ -211,9 +208,7 @@ KBD_PUTCMD1:
CALL PC_GT CALL PC_GT
CALL PRTHEXBYTE CALL PRTHEXBYTE
#ENDIF #ENDIF
LD C,(IY+KBD_CMD) ; COMMAND PORT
EZ80_IO
OUT (C),A ; WRITE IT
CALL KBD_CMDOUT ; OUTPUT CMD TO PORT
KBD_PUTCMD2: KBD_PUTCMD2:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
@ -241,9 +236,7 @@ KBD_PUTDATA1:
CALL PC_GT CALL PC_GT
CALL PRTHEXBYTE CALL PRTHEXBYTE
#ENDIF #ENDIF
LD C,(IY+KBD_DAT) ; DATA PORT
EZ80_IO
OUT (C),A ; WRITE IT
CALL KBD_DTAOUT ; WRITE IT
KBD_PUTDATA2: KBD_PUTDATA2:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
@ -262,9 +255,7 @@ KBD_GETDATA0:
XOR A ; NO DATA, RETURN ZERO XOR A ; NO DATA, RETURN ZERO
RET RET
KBD_GETDATA1: KBD_GETDATA1:
LD C,(IY+KBD_DAT) ; DATA PORT
EZ80_IO
IN A,(C) ; GET THE DATA VALUE
CALL KBD_IN ; GET A KEY
#IF (KBDTRACE >= 2) #IF (KBDTRACE >= 2)
PUSH AF PUSH AF
CALL PC_SPACE CALL PC_SPACE
@ -300,7 +291,7 @@ KBD_RESET0:
JR NZ,KBD_RESET1 ; GOT A BYTE? IF SO, GET OUT OF LOOP JR NZ,KBD_RESET1 ; GOT A BYTE? IF SO, GET OUT OF LOOP
DJNZ KBD_RESET0 ; LOOP TILL COUNTER EXHAUSTED DJNZ KBD_RESET0 ; LOOP TILL COUNTER EXHAUSTED
KBD_RESET1: KBD_RESET1:
LD A,B
; LD A,B
XOR A ; SIGNAL SUCCESS (RESPONSE IS IGNORED...) XOR A ; SIGNAL SUCCESS (RESPONSE IS IGNORED...)
RET ; DONE RET ; DONE
; ;
@ -312,7 +303,7 @@ KBD_SETLEDS:
LD A,$ED ; SET/RESET LED'S COMMAND LD A,$ED ; SET/RESET LED'S COMMAND
CALL KBD_PUTDATA ; SEND THE COMMAND CALL KBD_PUTDATA ; SEND THE COMMAND
CALL KBD_GETDATA ; READ THE RESPONSE CALL KBD_GETDATA ; READ THE RESPONSE
CP $FA ; MAKE SURE WE GET ACK
CP KBD_ACK ; MAKE SURE WE GET ACK
RET NZ ; ABORT IF NO ACK RET NZ ; ABORT IF NO ACK
LD A,(KBD_STATE) ; LOAD THE STATE BYTE LD A,(KBD_STATE) ; LOAD THE STATE BYTE
RRCA ; ROTATE TOGGLE KEY BITS AS NEEDED RRCA ; ROTATE TOGGLE KEY BITS AS NEEDED
@ -333,7 +324,7 @@ KBD_SETRPT:
LD A,$F3 ; COMMAND = SET TYPEMATIC RATE/DELAY LD A,$F3 ; COMMAND = SET TYPEMATIC RATE/DELAY
CALL KBD_PUTDATA ; SEND IT CALL KBD_PUTDATA ; SEND IT
CALL KBD_GETDATA ; GET THE ACK CALL KBD_GETDATA ; GET THE ACK
CP $FA ; MAKE SURE WE GET ACK
CP KBD_ACK ; MAKE SURE WE GET ACK
RET NZ ; ABORT IF NO ACK RET NZ ; ABORT IF NO ACK
LD A,(KBD_REPEAT) ; LOAD THE CURRENT RATE/DELAY BYTE LD A,(KBD_REPEAT) ; LOAD THE CURRENT RATE/DELAY BYTE
CALL KBD_PUTDATA ; SEND IT CALL KBD_PUTDATA ; SEND IT

246
Source/HBIOS/ps2iface.inc

@ -0,0 +1,246 @@
;__________________________________________________________________________________________________
; HARDWARE INTERFACE FOR POLLED AND INTERRUPT DRIVEN PS2 KEYBOARD.
;
; IN POLLED MODE THE KEYBOARD DEVICE IS IDENTIFIED BY THE TABLE POINTED TO BY IY
; IN INTERRUPT MODE THE KEYBOARD DEVICE IS UNKNOWN SO PREDEFINED PORT VALUES ARE USED.
;
; REQUIRES INTERRUPT JUMPER TO BE SET
;__________________________________________________________________________________________________
;
#IF ((INTMODE == 2) & INTPS2KBD))
#IF (TMSENABLE)
KBDPORTD .DB TMS_KBDDATA ; KBD CTLR DATA PORT
KBDPORTS .DB TMS_KBDST ; KBD CTLR STATUS/CMD PORT
#ELSE
#IF (GDCENABLE)
KBDPORTD .DB GDC_KBDDATA ; KBD CTLR DATA PORT
KBDPORTS .DB GDC_KBDST ; KBD CTLR STATUS/CMD PORT
#ELSE
#IF (CVDUENABLE)
KBDPORTD .DB CVDU_KBDDATA ; KBD CTLR DATA PORT
KBDPORTS .DB CVDU_KBDST ; KBD CTLR STATUS/CMD PORT
#ELSE
#IF (VRCENABLE)
KBDPORTD .DB VRC_KBDDATA ; KBD CTLR DATA PORT
KBDPORTS .DB VRC_KBDST ; KBD CTLR STATUS/CMD PORT
#ELSE
#IF (VGAENABLE)
KBDPORTD .DB VGA_KBDDATA ; KBD CTLR DATA PORT
KBDPORTS .DB VGA_KBDST ; KBD CTLR STATUS/CMD PORT
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#ENDIF
;
;__________________________________________________________________________________________________
; KEYBOARD QUEUE FOR INTERRUPTS
;__________________________________________________________________________________________________
;
;
KBDQSIZ .EQU 16 ; MUST BE POWER OF TWO, <=128
KBDQGETX .DB 0 ; QUEUE INDEX
KBDQPUTX .DB 0 ; QUEUE INDEX
.DB $55 ; GUARD BYTE FOR DEBUGGING
KBDQ .FILL KBDQSIZ,0 ; CIRCULAR KEYBOARD BUFFER
.DB $AA ; GUARD BYTE FOR DEBUGGING
;__________________________________________________________________________________________________
; RESET THE QUEUE TO EMPTY
;__________________________________________________________________________________________________
;
KBDQINIT:
XOR A
LD (KBDQGETX),A
LD (KBDQPUTX),A
RET
;
;__________________________________________________________________________________________________
; KEYBOARD INTERRUPT VECTOR
;__________________________________________________________________________________________________
;
KBD_INT:
; CALL KBDQDBG
LD A,(KBDPORTS) ; READ CONTROLLER STATUS
LD C,A
IN A,(C)
AND 1
RET Z
LD A,(KBDPORTD) ; GET THE RESPONSE
LD C,A
IN A,(C)
; CALL KBDQPUSH ; SAVE KEYBOARD SCAN CODE
; RET
;
;__________________________________________________________________________________________________
; ADD A BYTE TO THE KEYBOARD QUEUE
;__________________________________________________________________________________________________
;
KBDQPUSH: ; ADD A SCAN CODE TO THE QUEUE
PUSH AF
CALL KBDQFULL
JR Z,KBDQISF ; EXIT IF THE QUEUE IS FULL
;
LD HL,KBDQPUTX
LD A,(HL) ; CREATE QUEUE INDEX
AND KBDQSIZ-1
INC (HL) ; UPDATE INDEX
;
LD HL,KBDQ ; INDEX INTO THE QUEUE
LD B,0
LD C,A
ADD HL,BC
POP AF
LD (HL),A ; SAVE THE CHARACTER IN THE QUEUE
; CALL KBDQDBG
;
RET
;
KBDQISF:POP AF
RET
KBDQFULL: ; RETURN Z IF QUEUE IS FULL
CALL KBDQLEN ; RETURN NZ IF STILL SPACE IN QUEUE
SUB KBDQSIZ
RET
#ENDIF
;__________________________________________________________________________________________________
; KEYBOARD READ
;__________________________________________________________________________________________________
;
#IF ((INTMODE == 2) & INTPS2KBD))
;
; RETURN A BYTE TO FROM KEYBOARD QUEUE
; NOTE THE QUEUE INDEX'S NEVER DECREASE IN SIZE.
;
KBD_IN:
KBDQPOP:
CALL KBDQLEN
RET Z ; EXIT IF THE QUEUE IS EMPTY
;
LD HL,KBDQGETX
LD A,(HL) ; CREATE QUEUE INDEX
AND KBDQSIZ-1
INC (HL) ; UPDATE INDEX
;
LD HL,KBDQ ; INDEX INTO THE QUEUE
LD B,0
LD C,A
ADD HL,BC
LD A,(HL) ; GET THE CHARACTER FROM THE QUEUE
; LD (HL),B ; DEBUG - CLEAN QUEUE
;
RET
;
#ELSE
;
; RETURN A BYTE FROM THE KEYBOARD PORT
;
KBD_IN:
IN A,(C) ; GET THE DATA VALUE
LD C,(IY+KBD_DAT) ; DATA PORT
EZ80_IO
IN A,(C) ; GET THE DATA VALUE
RET
#ENDIF
;
;__________________________________________________________________________________________________
; KEYBOARD INPUT STATUS
;__________________________________________________________________________________________________
;
#IF ((INTMODE == 2) & INTPS2KBD))
KBD_IST:
KBDQLEN: ; EXIT WITH NUMBER OF CHARACTERS IN QUEUE
LD A,(KBDQPUTX) ; Z STATUS AND ZERO IF NONE
LD HL,KBDQGETX
SUB (HL)
RET
#ELSE
KBD_IST: ; A=0, Z SET FOR NOTHING PENDING, OTHERWISE DATA PENDING
LD C,(IY+KBD_ST) ; STATUS PORT
EZ80_IO
IN A,(C) ; GET STATUS
AND $01 ; ISOLATE INPUT PENDING BIT
RET
#ENDIF
;
;__________________________________________________________________________________________________
; OUTPUT TO KEYBOARD COMMAND PORT
;__________________________________________________________________________________________________
;
KBD_CMDOUT:
LD C,(IY+KBD_CMD) ; COMMAND PORT
EZ80_IO
OUT (C),A
RET
;__________________________________________________________________________________________________
; OUTPUT TO KEYBOARD COMMAND DATA
;__________________________________________________________________________________________________
;
KBD_DTAOUT:
LD C,(IY+KBD_DAT) ; DATA PORT
EZ80_IO
OUT (C),A
RET
;__________________________________________________________________________________________________
; KEYBOARD OUTPUT STATUS - A=0, Z SET FOR NOT READY, OTHERWISE READY TO WRITE
;__________________________________________________________________________________________________
;
KBD_OST:
LD C,(IY+KBD_ST) ; STATUS PORT
EZ80_IO
IN A,(C) ; GET STATUS
AND $02 ; ISOLATE OUTPUT EMPTY BIT
XOR $02 ; FLIP IT FOR APPROPRIATE RETURN VALUES
RET
;
;__________________________________________________________________________________________________
; DEBUG QUEUE
;__________________________________________________________________________________________________
;
#IF ((INTMODE == 2) & INTPS2KBD & 0)
KBDQDBG:
PUSH HL
PUSH DE
PUSH BC
PUSH AF
CALL NEWLINE ; PRINT QUEUE CONTENTS WITH PRE AND POST GUARD BYTES
LD B,KBDQSIZ+2
LD HL,KBDQ-1
KBDQPRT:
LD A,(HL)
CALL PRTHEXBYTE
INC HL
DJNZ KBDQPRT
LD A,' ' ; PRINT QUEUE INDEX
CALL COUT
LD A,(KBDQGETX)
AND KBDQSIZ-1
CALL PRTHEXBYTE
LD A,' ' ; PRINT QUEUE INDEX
CALL COUT
LD A,(KBDQPUTX)
AND KBDQSIZ-1
CALL PRTHEXBYTE
LD A,' ' ; PRINT # SCAN CODES IN QUEUE
CALL COUT
CALL KBDQLEN
CALL PRTHEXBYTE
CALL NEWLINE
POP AF
POP BC
POP DE
POP HL
RET
#ENDIF

1
Source/HBIOS/std.asm

@ -971,6 +971,7 @@ INT_CTC0D .EQU 15 ; ZILOG CTC 0, CHANNEL D
; ;
; DUO Z80 IM2 INTERRUPTS ; DUO Z80 IM2 INTERRUPTS
; ;
INT_PS2KB .EQU 2 ; KEYBOARD RECEIVE
INT_UART0 .EQU 4 ; UART 0 INT_UART0 .EQU 4 ; UART 0
INT_UART1 .EQU 5 ; UART 1 INT_UART1 .EQU 5 ; UART 1
INT_SIO0 .EQU 8 ; ZILOG SIO 0, CHANNEL A & B INT_SIO0 .EQU 8 ; ZILOG SIO 0, CHANNEL A & B

4
Source/HBIOS/vrc.asm

@ -15,8 +15,8 @@ VRC_BASE .EQU $00 ; FIRST CHAR DATA PORT
VRC_FONTBASE .EQU VRC_BASE + $0C ; FIRST FONT PORT VRC_FONTBASE .EQU VRC_BASE + $0C ; FIRST FONT PORT
VRC_SCROLLIO .EQU $F5 ; SCROLL REG PORT VRC_SCROLLIO .EQU $F5 ; SCROLL REG PORT
; ;
VRC_KBDDATA .EQU $F4
VRC_KBDST .EQU $F5
VRC_KBDDATA .EQU $F4 ; KBD CTLR DATA PORT
VRC_KBDST .EQU $F5 ; KBD CTLR STATUS/CMD PORT
; ;
VRC_ROWS .EQU 48 VRC_ROWS .EQU 48
VRC_COLS .EQU 64 VRC_COLS .EQU 64

Loading…
Cancel
Save