diff --git a/Source/HBIOS/cfg_MASTER.asm b/Source/HBIOS/cfg_MASTER.asm index 367a234d..61ac19ae 100644 --- a/Source/HBIOS/cfg_MASTER.asm +++ b/Source/HBIOS/cfg_MASTER.asm @@ -64,7 +64,6 @@ 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 CPUOSC .EQU 1000000 ; CPU OSC FREQ IN MHZ 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) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) diff --git a/Source/HBIOS/kbd.asm b/Source/HBIOS/kbd.asm index dd30be91..75171cb0 100644 --- a/Source/HBIOS/kbd.asm +++ b/Source/HBIOS/kbd.asm @@ -59,18 +59,10 @@ KBD_IDLE .DB 0 ; IDLE COUNT DEVECHO "KBD: ENABLED\n" ; ;__________________________________________________________________________________________________ -; HARDWARE LEVEL INTERFACE -;__________________________________________________________________________________________________ -; -#INCLUDE "ps2iface.inc" -;__________________________________________________________________________________________________ ; KEYBOARD INITIALIZATION ;__________________________________________________________________________________________________ ; KBD_INIT: -#IF (INTPS2KBD) - CALL KBDQINIT ; INITIALIZE QUEUE -#ENDIF CALL NEWLINE ; FORMATTING PRTS("KBD: IO=0x$") LD A,(IY+KBD_DAT) @@ -167,6 +159,35 @@ KBD_FLUSH: 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: ; ; PUT A CMD BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT @@ -190,7 +211,9 @@ KBD_PUTCMD1: CALL PC_GT CALL PRTHEXBYTE #ENDIF - CALL KBD_CMDOUT ; OUTPUT CMD TO PORT + LD C,(IY+KBD_CMD) ; COMMAND PORT + EZ80_IO + OUT (C),A ; WRITE IT KBD_PUTCMD2: XOR A ; SIGNAL SUCCESS RET @@ -218,7 +241,9 @@ KBD_PUTDATA1: CALL PC_GT CALL PRTHEXBYTE #ENDIF - CALL KBD_DTAOUT ; WRITE IT + LD C,(IY+KBD_DAT) ; DATA PORT + EZ80_IO + OUT (C),A ; WRITE IT KBD_PUTDATA2: XOR A ; SIGNAL SUCCESS RET @@ -237,7 +262,9 @@ KBD_GETDATA0: XOR A ; NO DATA, RETURN ZERO RET KBD_GETDATA1: - CALL KBD_IN ; GET A KEY + LD C,(IY+KBD_DAT) ; DATA PORT + EZ80_IO + IN A,(C) ; GET THE DATA VALUE #IF (KBDTRACE >= 2) PUSH AF CALL PC_SPACE diff --git a/Source/HBIOS/ps2iface.inc b/Source/HBIOS/ps2iface.inc deleted file mode 100644 index d5d93776..00000000 --- a/Source/HBIOS/ps2iface.inc +++ /dev/null @@ -1,207 +0,0 @@ -;__________________________________________________________________________________________________ -; HARDWARE INTERFACE FOR POLLED AND INTERRUPT DRIVEN PS2 KEYBOARD. -; -; IN POLLED MODE THE KEYBOARD DEVICE IS IDENTIFED BY THE TABLE POINTED TO BY IY -; IN INTERRUPT MODE THE KEYBOARD DEVICE IS UNKNOWN SO PREDEFINED PORT VALUES ARE USED. -;__________________________________________________________________________________________________ -; -#IF (INTPS2KBD) -KBDPORT .DB PS2PORT+1 ; READ - KEYBOARD STATUS : WRITE - COMMAND REGISTER - .DB PS2PORT ; READ / WRITE DATA PORT - -;__________________________________________________________________________________________________ -; KEYBOARD QUEUE FOR INTERRUPTS -;__________________________________________________________________________________________________ -; -; -KBDQSIZ .EQU 8 ; 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 - -KBDQINIT: ; RESET THE QUEUE TO EMPTY - XOR A - LD (KBDQGETX),A - LD (KBDQPUTX),A - RET -; -;__________________________________________________________________________________________________ -; KEYBOARD INTERRUPT VECTOR -;__________________________________________________________________________________________________ -; -KBD_INT: - LD A,(KBDPORT+KBD_ST) ; READ CONTROLLER STATUS - LD C,A - IN A,(C) - AND 1 - RET Z - LD A,(KBDPORT+KBD_DAT) ; 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 -; - 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 (INTPS2KBD) -; -; RETURN A BYTE TO FROM KEYBOARD QUEUE -; -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 (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 ((INTPS2KBD & (1)) -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) - CALL PRTHEXBYTE - - LD A,' ' ; PRINT QUEUE INDEX - CALL COUT - LD A,(KBDQPUTX) - 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 diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 858bd4c5..e8f57b37 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -267,7 +267,7 @@ TMS_INIT: LD A,TMS_DATREG CALL PRTHEXBYTE CALL TMS_PROBE ; CHECK FOR HW EXISTENCE - JR TMS_INIT1 ; CONTINUE IF PRESENT + JR Z,TMS_INIT1 ; CONTINUE IF PRESENT ; ; *** HARDWARE NOT PRESENT *** PRTS(" NOT PRESENT$")