Browse Source

Merge pull request #69 from wwarthen/master

Resync
pull/464/head
b1ackmai1er 1 year ago
committed by GitHub
parent
commit
4b963c3ab4
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      Source/HBIOS/cfg_MASTER.asm
  2. 8
      Source/HBIOS/cvdu.asm
  3. 8
      Source/HBIOS/gdc.asm
  4. 28
      Source/HBIOS/hbios.asm
  5. 94
      Source/HBIOS/kbd.asm
  6. 93
      Source/HBIOS/ps2iface.inc
  7. 1
      Source/HBIOS/romldr.asm
  8. 19
      Source/HBIOS/tms.asm
  9. 8
      Source/HBIOS/vga.asm
  10. 8
      Source/HBIOS/vrc.asm
  11. BIN
      Source/Images/d_bascomp/u0/M80.COM
  12. 2
      Source/ver.inc
  13. 2
      Source/ver.lib

2
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!!!)
@ -174,6 +173,7 @@ KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE]
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
KBDINTS .EQU FALSE ; ENABLE KBD (PS2) KEYBOARD INTERRUPTS
;
DSRTCENABLE .EQU FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W]

8
Source/HBIOS/cvdu.asm

@ -921,3 +921,11 @@ CVDU_IDAT:
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER
.DB CVDU_KBDST
.DB CVDU_KBDDATA
;
; IF WE ARE USING PS2 INTERRUPTS, WE NEED TO PASS THE INSTANCE
; DATA POINTER TO PS2IFACE.INC VIA KBDIDAT FOR USE BY THE INTERRUPT
; HANDLER IN PS2IFACE.INC.
;
#IF (KBDINTS)
KBDIDAT .EQU CVDU_IDAT
#ENDIF

8
Source/HBIOS/gdc.asm

@ -350,3 +350,11 @@ GDC_IDAT:
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER
.DB GDC_KBDST
.DB GDC_KBDDATA
;
; IF WE ARE USING PS2 INTERRUPTS, WE NEED TO PASS THE INSTANCE
; DATA POINTER TO PS2IFACE.INC VIA KBDIDAT FOR USE BY THE INTERRUPT
; HANDLER IN PS2IFACE.INC.
;
#IF (KBDINTS)
KBDIDAT .EQU GDC_IDAT
#ENDIF

28
Source/HBIOS/hbios.asm

@ -3030,6 +3030,23 @@ HB_SPDTST:
;--------------------------------------------------------------------------------------------------
; ENABLE INTERRUPTS
;--------------------------------------------------------------------------------------------------
;
;;;CALL HB_PREINT_HOOKS ; HACK TO ALLOW SOME DRIVERS TO DO PRE INTERRUPT STUFF
;
#IFDEF TESTING
;
INTTEST:
; TEST TO SEE IF SOMEBODY ENABLED INTS EARLY!
LD A,I
JP PO,INTTEST_Z ; IF PO, INTS DISABLED AS EXPECTED
PRTX(STR_INTWARN) ; WARNING
JR INTTEST_Z ; CONTINUE
;
STR_INTWARN .TEXT "\r\n\r\nWARNING: INTERRUPTS ENABLED TOO EARLY!!!$"
;
INTTEST_Z:
;
#ENDIF
;
HB_EI ; INTERRUPTS SHOULD BE OK NOW
;
@ -7595,7 +7612,7 @@ Z2DMAADR2:
#ENDIF
;
;--------------------------------------------------------------------------------------------------
; ROUTINES FOR NON VOLATILE (NVRAM) SWITCHES
; ROUTINES FOR NON VOLITILE (NVRAM) SWITCHES
;--------------------------------------------------------------------------------------------------
;
; RESET CONTENTS OF NVRAM, STORING INTO
@ -9357,6 +9374,15 @@ SIZ_EZ80DRVS .EQU $ - ORG_EZ80DRVS
MEMECHO "RTCDEF="
MEMECHO RTCDEF
MEMECHO "\n"
;;;;
;;;; PRE-INTERRUPT HOOKS
;;;;
;;;HB_PREINT_HOOKS:
;;;;
;;;#IF (KBDENABLE)
;;; CALL KBD_PREINT_HOOK
;;;#ENDIF
;;; RET
;
HB_DRIVERS_END .EQU $
;

94
Source/HBIOS/kbd.asm

@ -8,7 +8,7 @@
;
;
; IN DEBUG MODE:
: >>nn SHOWS HEX COMMAND nn BEING WRITTEN TO THE COMMAND PORT
; >>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
;__________________________________________________________________________________________________
@ -70,6 +70,25 @@ KBD_IDLE .DB 0 ; IDLE COUNT
;__________________________________________________________________________________________________
;
#INCLUDE "ps2iface.inc"
;;;;
;;;; HACK TO ENSURE PS/2 CONTROLLER INTERRUPTS ARE TURNED OFF!!!
;;;;
;;;KBD_PREINT_HOOK:
;;;#IF (KBDINTS)
;;; LD IY,KBDIDAT
;;; LD A,$60 ; SET COMMAND REGISTER
;;; CALL KBD_PUTCMD ; SEND IT
;;; LD A,$20 ; XLAT DISABLED, MOUSE DISABLED, NO INTS
;;; CALL KBD_PUTDATA ; SEND IT
;;;;
;;; ; FLUSH ANY PENDING OUTPUT
;;; LD B,16
;;;KBD_PREINT_HOOK1:
;;; CALL KBD_IN_P
;;; DJNZ KBD_PREINT_HOOK1
;;;#ENDIF
RET
;
;__________________________________________________________________________________________________
; KEYBOARD INITIALIZATION
;__________________________________________________________________________________________________
@ -79,7 +98,7 @@ KBD_INIT:
PRTS("KBD: IO=0x$") ; DISPLAY
LD A,(IY+KBD_DAT) ; PORT SETTING
CALL PRTHEXBYTE
#IF ((INTMODE == 2) & INTPS2KBD)
#IF ((INTMODE == 2) & KBDINTS)
PRTS(" INT #$") ; DISPLAY
LD A,INT_PS2KB ; INTERRUPT SETTING
CALL PRTDECB
@ -94,27 +113,22 @@ KBD_INIT:
CP KBDMODE_VRC ; VRC?
JR Z,KBD_INIT1 ; IF SO, MUST ASSUME PRESENT
;
#IF ((INTMODE == 2) & INTPS2KBD)
HB_DI ; DISABLE INTERRUPTS WHILE WE PROBE
#ENDIF
LD A,$AA ; CONTROLLER SELF TEST
CALL KBD_PUTCMD ; SEND IT
CALL KBD_GETDATA_P ; CONTROLLER SHOULD RESPOND WITH $55 (ACK)
HB_EI ; RESTORE INTERRUPTS
;
CP $55 ; IS IT THERE?
JR Z,KBD_INIT1 ; IF SO, CONTINUE
#IF ((INTMODE == 2) & INTPS2KBD)
HB_EI ; RESTORE INTERRUPTS
#ENDIF
PRTS(" NOT PRESENT$") ; DIAGNOSE PROBLEM
RET ; BAIL OUT
;
KBD_INIT1:
#IF ((INTMODE == 2) & INTPS2KBD)
#IF ((INTMODE == 2) & KBDINTS)
; CALL KBDQINIT ; INITIALIZE QUEUE
LD HL,KBD_INT ; INSTALL VECTOR
LD (IVT(INT_PS2KB)),HL ; IVT INDEX
HB_EI ; ENABLE INTERUPTS
#ENDIF
PRTS(" MODE=$") ; TAG
LD A,(IY+KBD_MODE) ; GET MODE VALUE
@ -131,7 +145,7 @@ KBD_INIT2:
LD A,$60 ; SET COMMAND REGISTER
CALL KBD_PUTCMD ; SEND IT
#IF ((INTMODE == 2) & INTPS2KBD)
#IF ((INTMODE == 2) & KBDINTS)
LD A,$21 ; XLAT DISABLED, MOUSE DISABLED, WITH INTS
#ELSE
LD A,$20 ; XLAT DISABLED, MOUSE DISABLED, NO INTS
@ -249,22 +263,22 @@ KBD_PUTDATA2:
RET
;
;__________________________________________________________________________________________________
KBD_GETDATA:
;
KBD_GETDATA_P:
;
; GET A RAW DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH TIMEOUT.
; DEPENDING ON ASSEMBLY CONFIGURATION KBD_GETDATA READS A BYTE FROM
; EITHER THE INTERRUPT QUEUE OR FROM THE KEYBOARD CONTROLLER PORT.
; KBD_GETDATA_P ALWAYS READS A BYTE FROM THE KEYBOARD CONTROLLER PORT.
;
LD B,KBD_WAITTO ; SETUP TO LOOP
KBD_GETDATA0:
CALL KBD_IST ; GET INPUT REGISTER STATUS
JR NZ,KBD_GETDATA1 ; BYTE PENDING, GO GET IT
KBD_GETDATA0_P:
CALL KBD_IST_P ; GET INPUT REGISTER STATUS
JR NZ,KBD_GETDATA1_P ; BYTE PENDING, GO GET IT
CALL DELAY ; WAIT A BIT
DJNZ KBD_GETDATA0 ; LOOP UNTIL COUNTER EXHAUSTED
DJNZ KBD_GETDATA0_P ; LOOP UNTIL COUNTER EXHAUSTED
XOR A ; NO DATA, RETURN ZERO
RET
KBD_GETDATA1:
CALL KBD_IN ; GET A KEY
KBD_GETDATA1_P:
CALL KBD_IN_P ; GET A KEY
#IF (KBDTRACE >= 2)
PUSH AF
CALL PC_SPACE
@ -275,36 +289,52 @@ KBD_GETDATA1:
OR A ; SET FLAGS
RET
;
;__________________________________________________________________________________________________
KBD_GETDATA_P:
KBD_GETDATA_Q:
;
; GET A RAW DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH TIMEOUT.
; KBD_GETDATA_P ALWAYS READS A BYTE FROM THE KEYBOARD CONTROLLER PORT.
; GET A QUEUED DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH TIMEOUT.
; KBD_GETDATA_Q ALWAYS READS A BYTE FROM THE KEYBOARD INTERRUPT QUEUE.
;
#IF ((INTMODE == 2) & KBDINTS))
;
LD B,KBD_WAITTO ; SETUP TO LOOP
KBD_GETDATA0_P:
CALL KBD_IST_P ; GET INPUT REGISTER STATUS
JR NZ,KBD_GETDATA1_P ; BYTE PENDING, GO GET IT
KBD_GETDATA0_Q:
CALL KBD_IST_Q ; GET INPUT REGISTER STATUS
JR NZ,KBD_GETDATA1_Q ; BYTE PENDING, GO GET IT
CALL DELAY ; WAIT A BIT
DJNZ KBD_GETDATA0_P ; LOOP UNTIL COUNTER EXHAUSTED
DJNZ KBD_GETDATA0_Q ; LOOP UNTIL COUNTER EXHAUSTED
XOR A ; NO DATA, RETURN ZERO
RET
KBD_GETDATA1_P:
CALL KBD_IN_P ; GET A KEY
#IF (KBDTRACE >= 2)
KBD_GETDATA1_Q:
CALL KBD_IN_Q ; GET A KEY
#IF (KBDTRACE >= 2)
PUSH AF
CALL PC_SPACE
CALL PC_LT
CALL PRTHEXBYTE
POP AF
#ENDIF
#ENDIF
OR A ; SET FLAGS
RET
;
#ENDIF
;
; GET A DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH TIMEOUT.
; DEPENDING ON ASSEMBLY CONFIGURATION KBD_GETDATA READS A BYTE FROM
; EITHER THE INTERRUPT QUEUE OR FROM THE KEYBOARD CONTROLLER PORT.
;
#IF ((INTMODE == 2) & KBDINTS))
KBD_GETDATA .EQU KBD_GETDATA_Q
KBD_GETDATA1 .EQU KBD_GETDATA1_Q
#ELSE
KBD_GETDATA .EQU KBD_GETDATA_P
KBD_GETDATA1 .EQU KBD_GETDATA1_P
#ENDIF
;
;__________________________________________________________________________________________________
KBD_GETDATAX:
;
; GET A RAW DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH NOTIMEOUT
; GET A DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH NO TIMEOUT
; IF NOTHING AVAILABLE, RETURN 0.
;
CALL KBD_IST ; GET INPUT REGISTER STATUS
RET Z ; NOTHING THERE, DONE

93
Source/HBIOS/ps2iface.inc

@ -8,34 +8,7 @@
; CURRENTLY CONFIGURED FOR INT #2 ON DUODYNE WITH I/O MULTI BOARD.
;__________________________________________________________________________________________________
;
#IF ((INTMODE == 2) & INTPS2KBD))
;
; SETUP POINTER TO KEYBOARD PORT
;
#IF (TMSENABLE)
KBDIDAT .EQU TMS_IDAT ; KBD INSTANCE DATA TABLE
#ELSE
#IF (GDCENABLE)
KBDIDAT .EQU GDC_IDAT ; KBD INSTANCE DATA TABLE
#ELSE
#IF (CVDUENABLE)
KBDIDAT .EQU CVDU_IDAT ; KBD INSTANCE DATA TABLE
#ELSE
#IF (VRCENABLE)
KBDIDAT .EQU VRC_IDAT ; KBD INSTANCE DATA TABLE
#ELSE
#IF (VGAENABLE)
KBDIDAT .EQU VGA_IDAT ; KBD INSTANCE DATA TABLE
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#IF ((INTMODE == 2) & KBDINTS))
;
;__________________________________________________________________________________________________
; KEYBOARD QUEUE FOR INTERRUPTS
@ -109,16 +82,24 @@ KBDQFULL: ; RETURN Z IF QUEUE IS FULL
SUB KBDQSIZ
RET
#ENDIF
;
;__________________________________________________________________________________________________
; KEYBOARD READ
;__________________________________________________________________________________________________
;
#IF ((INTMODE == 2) & INTPS2KBD))
; READ DIRECT FROM PORT
;
; RETURN A BYTE TO FROM KEYBOARD QUEUE
; NOTE THE QUEUE INDEX'S NEVER DECREASE IN SIZE.
KBD_IN_P:
LD C,(IY+KBD_DAT) ; DATA PORT
EZ80_IO
IN A,(C) ; GET THE DATA VALUE
RET
;
KBD_IN:
; READ FROM INTERRUPT QUEUE
;
#IF ((INTMODE == 2) & KBDINTS))
;
KBD_IN_Q:
KBDQPOP:
CALL KBDQLEN
RET Z ; EXIT IF THE QUEUE IS EMPTY
@ -137,38 +118,50 @@ KBDQPOP:
;
RET
;
#ELSE
#ENDIF
;
; RETURN A BYTE FROM THE KEYBOARD PORT
; RETURN A BYTE TO FROM KEYBOARD QUEUE
; NOTE THE QUEUE INDEX'S NEVER DECREASE IN SIZE.
;
KBD_IN:
#IF ((INTMODE == 2) & KBDINTS))
KBD_IN .EQU KBD_IN_Q
#ELSE
KBD_IN .EQU KBD_IN_P
#ENDIF
KBD_IN_P:
LD C,(IY+KBD_DAT) ; DATA PORT
EZ80_IO
IN A,(C) ; GET THE DATA VALUE
RET
;
;__________________________________________________________________________________________________
; KEYBOARD INPUT STATUS
;__________________________________________________________________________________________________
;
#IF ((INTMODE == 2) & INTPS2KBD))
KBD_IST:
; DIRECT PORT STATUS READ
;
KBD_IST_P:
LD C,(IY+KBD_ST) ; STATUS PORT
EZ80_IO
IN A,(C) ; GET STATUS
AND $01 ; ISOLATE INPUT PENDING BIT
RET
;
; STATUS FROM INTERRUPT QUEUE
;
#IF ((INTMODE == 2) & KBDINTS))
;
KBD_IST_Q:
KBDQLEN: ; EXIT WITH NUMBER OF CHARACTERS IN QUEUE
LD A,(KBDQPUTX) ; Z STATUS AND ZERO IF NONE
LD HL,KBDQGETX
SUB (HL)
RET
;
#ENDIF
;
; RETURN INDICATION OF KEYBOARD DATA READY
;
#IF ((INTMODE == 2) & KBDINTS))
KBD_IST .EQU KBD_IST_Q
#ELSE
KBD_IST:
KBD_IST .EQU KBD_IST_P
#ENDIF
KBD_IST_P: ; 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
;
;__________________________________________________________________________________________________
; OUTPUT TO KEYBOARD COMMAND PORT
@ -204,7 +197,7 @@ KBD_OST:
; DEBUG QUEUE
;__________________________________________________________________________________________________
;
#IF ((INTMODE == 2) & INTPS2KBD & 0)
#IF ((INTMODE == 2) & KBDINTS & 0)
KBDQDBG:
PUSH HL
PUSH DE

1
Source/HBIOS/romldr.asm

@ -2495,6 +2495,7 @@ str_help .db "\r\n"
.db "\r\n D - Device Inventory"
.db "\r\n R - Reboot System"
#if (BIOS == BIOS_WBW)
.db "\r\n W - RomWBW Configure"
.db "\r\n I <u> [<c>] - Set Console Interface/Baud code"
.db "\r\n V [<n>] - View/Set HBIOS Diagnostic Verbosity"
#endif

19
Source/HBIOS/tms.asm

@ -211,7 +211,7 @@ TMS_PREINIT:
RES TMSINTEN, A ; RESET INTERRUPT ENABLE BIT
LD (TMS_INITVDU_REG_1), A
LD C, TMSCTRL1
JP TMS_SET
JP TMS_SET_X ; SET REG W/O INT MGMT
;
TMS_INIT:
#IF (CPUFAM == CPU_Z180)
@ -584,10 +584,18 @@ TMS_READ:
;----------------------------------------------------------------------
; SET TMS9918 REGISTER VALUE
; TMS_SET WRITES VALUE IN A TO VDU REGISTER SPECIFIED IN C
; TMS_SET_X IS A VARIANT THAT DOES NOT DO INT MGMT (TMS_PREINIT)
;----------------------------------------------------------------------
;
TMS_SET:
; NORMALLY, WE WRAP REG CHANGES WITH DI/EI TO AVOID CONFLICTS
HB_DI
CALL TMS_SET_X
HB_EI
RET
;
TMS_SET_X:
; ENTRY POINT W/O INT MGMT NEEDED BY TMS_PREINIT
EZ80_IO
OUT (TMS_CMDREG),A ; WRITE IT
TMS_IODELAY
@ -596,7 +604,6 @@ TMS_SET:
EZ80_IO
OUT (TMS_CMDREG),A ; SELECT THE DESIRED REGISTER
TMS_IODELAY
HB_EI
RET
;
;----------------------------------------------------------------------
@ -1182,6 +1189,14 @@ TMS_IDAT:
.DB TMS_DATREG
.DB TMS_CMDREG
;
; IF WE ARE USING PS2 INTERRUPTS, WE NEED TO PASS THE INSTANCE
; DATA POINTER TO PS2IFACE.INC VIA KBDIDAT FOR USE BY THE INTERRUPT
; HANDLER IN PS2IFACE.INC.
;
#IF ((TMSKBD == TMSKBD_KBD) & KBDINTS)
KBDIDAT .EQU TMS_IDAT
#ENDIF
;
;==================================================================================================
; TMS DRIVER - TMS9918 REGISTER INITIALIZATION
;==================================================================================================

8
Source/HBIOS/vga.asm

@ -1056,3 +1056,11 @@ VGA_IDAT:
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER
.DB VGA_KBDST
.DB VGA_KBDDATA
;
; IF WE ARE USING PS2 INTERRUPTS, WE NEED TO PASS THE INSTANCE
; DATA POINTER TO PS2IFACE.INC VIA KBDIDAT FOR USE BY THE INTERRUPT
; HANDLER IN PS2IFACE.INC.
;
#IF (KBDINTS)
KBDIDAT .EQU VGA_IDAT
#ENDIF

8
Source/HBIOS/vrc.asm

@ -675,3 +675,11 @@ VRC_IDAT:
.DB KBDMODE_VRC ; VGARC KEYBOARD CONTROLLER
.DB VRC_KBDST
.DB VRC_KBDDATA
;
; IF WE ARE USING PS2 INTERRUPTS, WE NEED TO PASS THE INSTANCE
; DATA POINTER TO PS2IFACE.INC VIA KBDIDAT FOR USE BY THE INTERRUPT
; HANDLER IN PS2IFACE.INC.
;
#IF (KBDINTS)
KBDIDAT .EQU VRC_IDAT
#ENDIF

BIN
Source/Images/d_bascomp/u0/M80.COM

Binary file not shown.

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 5
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "3.5.0-dev.98"
#DEFINE BIOSVER "3.5.0-dev.99"
#define rmj RMJ
#define rmn RMN
#define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 5
rup equ 0
rtp equ 0
biosver macro
db "3.5.0-dev.98"
db "3.5.0-dev.99"
endm

Loading…
Cancel
Save