diff --git a/Doc/RomWBW Architecture.pdf b/Doc/RomWBW Architecture.pdf index 179bae2d..5ce1fa3e 100644 Binary files a/Doc/RomWBW Architecture.pdf and b/Doc/RomWBW Architecture.pdf differ diff --git a/Doc/Source/RomWBW Architecture.vsd b/Doc/Source/Bank Switched Memory.vsd similarity index 76% rename from Doc/Source/RomWBW Architecture.vsd rename to Doc/Source/Bank Switched Memory.vsd index 8cf881b5..9d949940 100644 Binary files a/Doc/Source/RomWBW Architecture.vsd and b/Doc/Source/Bank Switched Memory.vsd differ diff --git a/Doc/Source/Character Emulation Video Services.vsd b/Doc/Source/Character Emulation Video Services.vsd new file mode 100644 index 00000000..a481d060 Binary files /dev/null and b/Doc/Source/Character Emulation Video Services.vsd differ diff --git a/Doc/Source/RomWBW Architecture.docx b/Doc/Source/RomWBW Architecture.docx index 43f68025..d7454e54 100644 Binary files a/Doc/Source/RomWBW Architecture.docx and b/Doc/Source/RomWBW Architecture.docx differ diff --git a/Source/ansi.asm b/Source/ansi.asm new file mode 100644 index 00000000..cefdb306 --- /dev/null +++ b/Source/ansi.asm @@ -0,0 +1,150 @@ +; +;================================================================================================== +; ANSI EMULATION MODULE +;================================================================================================== +; +ANSI_INIT: + JR ANSI_INI +; +; +; +ANSI_DISPATCH: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JR Z,ANSI_IN ; $30 + DEC A + JR Z,ANSI_OUT ; $31 + DEC A + JR Z,ANSI_IST ; $32 + DEC A + JR Z,ANSI_OST ; $33 + DEC A + JR Z,ANSI_CFG ; $34 + CP 8 + JR Z,ANSI_INI ; $38 + CP 9 + JR Z,ANSI_QRY ; $39 + CALL PANIC +; +; +; +ANSI_IN: + LD B,BF_VDAKRD + JP EMU_VDADISP +; +; +; +ANSI_OUT: + CALL ANSI_DOCHAR + XOR A + RET +; +; +; +ANSI_IST: + LD B,BF_VDAKST + JP EMU_VDADISP +; +; +; +ANSI_OST: + XOR A + INC A + RET +; +; +; +ANSI_CFG: + XOR A + RET +; +; +; +ANSI_INI: + LD (ANSI_ROW),A + LD (ANSI_COL),A + LD B,BF_VDARES + JP EMU_VDADISP ; RESET VDA +; +; +; +ANSI_QRY: + XOR A + RET +; +; +; +ANSI_DOCHAR: + LD A,E ; CHARACTER TO PROCESS + CP 8 ; BACKSPACE + JR Z,ANSI_BS + CP 12 ; FORMFEED + JR Z,ANSI_FF + CP 13 ; CARRIAGE RETURN + JR Z,ANSI_CR + CP 10 ; LINEFEED + JR Z,ANSI_LF + CP 32 ; COMPARE TO SPACE (FIRST PRINTABLE CHARACTER) + RET C ; SWALLOW OTHER CONTROL CHARACTERS + LD B,BF_VDAWRC + CALL EMU_VDADISP ; SPIT OUT THE RAW CHARACTER + LD A,(ANSI_COL) ; GET CUR COL + INC A ; INCREMENT + LD (ANSI_COL),A ; SAVE IT + CP 80 ; COMPARE TO COLS IN LINE + RET C ; NOT PAST END OF LINE, ALL DONE + CALL ANSI_CR ; CARRIAGE RETURN + JR ANSI_LF ; LINEFEED AND RETURN +; +ANSI_FF: + LD DE,0 ; HOME CURSOR + LD (ANSI_ROWCOL),DE ; SAVE IT + CALL ANSI_XY ; EXECUTE + LD E,' ' ; FILL SCREEN WITH BLANKS + LD HL,80 * 24 ; NUMBER OF CHARACTER POSITIONS TO FILL + LD B,BF_VDAFIL + CALL EMU_VDADISP ; PERFORM FILL + JR ANSI_XY ; HOME CURSOR AND RETURN +; +ANSI_BS: + LD DE,(ANSI_ROWCOL) ; GET CURRENT ROW/COL IN DE + LD A,E ; GET CURRENT COLUMN + CP 1 ; COMPARE TO COLUMN 1 + RET C ; LESS THAN 1, NOTHING TO DO + DEC E ; POINT TO PREVIOUS COLUMN + LD (ANSI_ROWCOL),DE ; SAVE NEW COLUMN VALUE + CALL ANSI_XY ; MOVE CURSOR TO NEW TARGET COLUMN + LD E,' ' ; LOAD A SPACE CHARACTER + LD B,BF_VDAWRC + CALL EMU_VDADISP ; OVERWRITE WITH A SPACE CHARACTER + JR ANSI_XY ; NEED TO MOVE CURSOR BACK TO NEW TARGET COLUMN +; +ANSI_CR: + XOR A + LD (ANSI_COL),A + JR ANSI_XY +; +ANSI_LF: + LD A,(ANSI_ROW) + INC A + LD (ANSI_ROW),A + CP 24 ; COMPARE TO SCREEN ROWS + JR C,ANSI_XY ; NOT PAST END, ALL DONE + SUB 23 ; A WILL NOW HAVE NUM LINES TO SCROLL + LD E,A ; LINES TO SCROLL -> E + LD B,BF_VDASCR + CALL EMU_VDADISP ; DO THE SCROLLING + LD A,23 ; ROW 23 + LD (ANSI_ROW),A ; IS NOW CORRECT + JR ANSI_XY ; RESPOSITION CURSOR AND RETURN +; +ANSI_XY: + LD DE,(ANSI_ROWCOL) + LD B,BF_VDASCP + JP EMU_VDADISP +; +; +; +ANSI_ROWCOL: +ANSI_COL .DB 0 +ANSI_ROW .DB 0 diff --git a/Source/bnk1.asm b/Source/bnk1.asm index 9d561894..5df8bf75 100644 --- a/Source/bnk1.asm +++ b/Source/bnk1.asm @@ -34,15 +34,11 @@ INITSYS: ; #IF (PLATFORM != PLT_N8) IN A,(RTC) ; RTC PORT, BIT 6 HAS STATE OF CONFIG JUMPER -; LD A,40H ; *DEBUG* SIMULATE JUMPER OPEN -; LD A,00H ; *DEBUG* SIMULATE JUMPER SHORTED - AND 40H ; ISOLATE BIT 6 - JR Z,INITSYS1 ; IF BIT6=0, SHORTED, USE ALT CONSOLE - LD A,DEFCON ; LOAD DEF CONSOLE DEVICE CODE - JR INITSYS2 ; CONTINUE + LD A,DEFCON ; ASSUME WE WANT DEFAULT CONSOLE + BIT 6,A ; BIT 6 HAS CONFIG JUMPER STATE + JR NZ,INITSYS1 ; IF NZ, JUMPER OPEN, DEF CON IS CORRECT + LD A,ALTCON ; JUMPER SHORTED, USE ALTERNATE CONSOLE INITSYS1: - LD A,ALTCON ; LOAD ALT CONSOLE DEVICE CODE -INITSYS2: LD (CONDEV),A ; SET THE ACTIVE CONSOLE DEVICE #ENDIF ; @@ -54,6 +50,9 @@ INITSYS2: #IF (VDUENABLE) CALL VDU_INIT #ENDIF +#IF (N8VENABLE) + CALL N8V_INIT +#ENDIF #IF (PRPENABLE) CALL PRP_INIT #ENDIF @@ -78,6 +77,12 @@ INITSYS2: #IF (HDSKENABLE) CALL HDSK_INIT #ENDIF +#IF (TTYENABLE) + CALL TTY_INIT +#ENDIF +#IF (ANSIENABLE) + CALL ANSI_INIT +#ENDIF ; LD DE,STR_BANNER CALL WRITESTR @@ -106,24 +111,29 @@ IDLE: ; BIOS_DISPATCH: LD A,B ; REQUESTED FUNCTION IS IN B - CP BF_CIO + $10 + CP BF_CIO + $10 ; $00-$0F: CHARACTER I/O JR C,CIO_DISPATCH - CP BF_DIO + $10 + CP BF_DIO + $10 ; $10-$1F: DISK I/O JR C,DIO_DISPATCH - CP BF_CLK + $10 - JR C,CLK_DISPATCH - CP BF_VDU + $10 - JR C,CRT_DISPATCH + CP BF_RTC + $10 ; $20-$2F: REAL TIME CLOCK (RTC) + JR C,RTC_DISPATCH + CP BF_EMU + $10 ; $30-$3F: EMULATION + JP C,EMU_DISPATCH + CP BF_VDA + $10 ; $40-$4F: VIDEO DISPLAY ADAPTER + JP C,VDA_DISPATCH CP BF_SYS ; SKIP TO BF_SYS VALUE AT $F0 CALL C,PANIC ; PANIC IF LESS THAN BF_SYS - JR SYS_DISPATCH ; OTHERWISE SYS CALL + JP SYS_DISPATCH ; OTHERWISE SYS CALL CALL PANIC ; THIS SHOULD NEVER BE REACHED ; -; SETUP AND CALL CHARACTER DRIVER +;================================================================================================== +; CHARACTER I/O DEVICE DISPATCHER +;================================================================================================== +; +; ROUTE CALL TO SPECIFIED CHARACTER I/O DRIVER ; B: FUNCTION ; C: DEVICE/UNIT -; E: CHARACTER IN/OUT ; CIO_DISPATCH: LD A,C ; REQUESTED DEVICE/UNIT IS IN C @@ -142,34 +152,50 @@ CIO_DISPATCH: #ENDIF #IF (VDUENABLE) CP CIODEV_VDU - JP Z,VDU_DISPATCH + JP Z,VDU_DISPCIO #ENDIF + CP CIODEV_CRT + JR Z,CIOEMU CALL PANIC ; +CIOEMU: + LD A,B + ADD A,BF_EMU - BF_CIO ; TRANSLATE FUNCTION CIOXXX -> EMUXXX + LD B,A + JP EMU_DISPATCH ; +;================================================================================================== +; DISK I/O DEVICE DISPATCHER +;================================================================================================== +; +; ROUTE CALL TO SPECIFIED DISK I/O DRIVER +; B: FUNCTION +; C: DEVICE/UNIT ; DIO_DISPATCH: + ; GET THE REQUESTED FUNCTION TO SEE IF SPECIAL HANDLING + ; IS NEEDED LD A,B - - ; DIO FUNCTIONS STARTING AT $18 ARE COMMON - ; AND DO NOT DISPATCH TO DRIVERS - CP $18 - JR NC,DIO_COMMON - - ; DISPATCH FUCNTION TO APPROPRIATE DRIVER - AND $0F - +; + ; DIO FUNCTIONS STARTING AT DIOGETBUF ARE COMMON FUNCTIONS + ; AND DO NOT DISPATCH TO DRIVERS (HANDLED GLOBALLY) + CP BF_DIOGETBUF ; TEST FOR FIRST OF THE COMMON FUNCTIONS + JR NC,DIO_COMMON ; IF >= DIOGETBUF HANDLE AS COMMON DIO FUNCTION +; ; HACK TO FILL IN HSTTRK AND HSTSEC ; BUT ONLY FOR READ/WRITE FUNCTION CALLS ; ULTIMATELY, HSTTRK AND HSTSEC ARE TO BE REMOVED - CP 2 - JR NC,DIO_DISPATCH1 - LD (HSTTRK),HL - LD (HSTSEC),DE + CP BF_DIOST ; BEYOND READ/WRITE FUNCTIONS ? + JR NC,DIO_DISPATCH1 ; YES, BYPASS + LD (HSTTRK),HL ; RECORD TRACK + LD (HSTSEC),DE ; RECORD SECTOR +; DIO_DISPATCH1: - LD A,C ; REQUESTED DEVICE/UNIT IS IN C + ; START OF THE ACTUAL DRIVER DISPATCHING LOGIC + LD A,C ; GET REQUESTED DEVICE/UNIT FROM C LD (HSTDSK),A ; TEMP HACK TO FILL IN HSTDSK AND $F0 ; ISOLATE THE DEVICE PORTION +; #IF (FDENABLE) CP DIODEV_FD JP Z,FD_DISPATCH @@ -203,56 +229,226 @@ DIO_DISPATCH1: ; HANDLE COMMON DISK FUNCTIONS (NOT DEVICE DRIVER SPECIFIC) ; DIO_COMMON: - SUB $18 - JR Z,DIO_GBA - DEC A - JR Z,DIO_SBA - CALL PANIC + SUB BF_DIOGETBUF ; FUNCTION = DIOGETBUF? + JR Z,DIO_GETBUF ; YES, HANDLE IT + DEC A ; FUNCTION = DIOSETBUF? + JR Z,DIO_SETBUF ; YES, HANDLE IT + CALL PANIC ; INVALID FUNCTION SPECFIED ; ; DISK: GET BUFFER ADDRESS ; -DIO_GBA: - LD HL,(DIOBUF) - XOR A +DIO_GETBUF: + LD HL,(DIOBUF) ; HL = DISK BUFFER ADDRESS + XOR A ; SIGNALS SUCCESS RET ; ; DISK: SET BUFFER ADDRESS ; -DIO_SBA: - BIT 7,H ; IS HIGH ORDER BIT SET? - CALL Z,PANIC ; IF NOT, ADR IS IN LOWER 32K, NOT ALLOWED!!! - LD (DIOBUF),HL - XOR A +DIO_SETBUF: + BIT 7,H ; IS HIGH ORDER BIT SET? + CALL Z,PANIC ; IF NOT, ADR IS IN LOWER 32K, NOT ALLOWED!!! + LD (DIOBUF),HL ; RECORD NEW DISK BUFFER ADDRESS + XOR A ; SIGNALS SUCCESS RET ; +;================================================================================================== +; REAL TIME CLOCK DEVICE DISPATCHER +;================================================================================================== ; +; ROUTE CALL TO REAL TIME CLOCK DRIVER (NOT YET IMPLEMENTED) +; B: FUNCTION ; -CLK_DISPATCH: +RTC_DISPATCH: CALL PANIC ; +;================================================================================================== +; EMULATION HANDLER DISPATCHER +;================================================================================================== +; +; ROUTE CALL TO EMULATION HANDLER CURRENTLY ACTIVE +; B: FUNCTION +; +EMU_DISPATCH: + ; EMU FUNCTIONS STARTING AT EMUINI ARE COMMON + ; AND DO NOT DISPATCH TO DRIVERS + LD A,B ; GET REQUESTED FUNCTION + CP BF_EMUINI + JR NC,EMU_COMMON +; + LD A,(CUREMU) ; GET ACTIVE EMULATION +; +#IF (TTYENABLE) + DEC A ; 1 = TTY + JP Z,TTY_DISPATCH +#ENDIF +#IF (ANSIENABLE) + DEC A ; 2 = ANSI + JP Z,ANSI_DISPATCH +#ENDIF + CALL PANIC ; INVALID ; +; HANDLE COMMON EMULATION FUNCTIONS (NOT HANDLER SPECIFIC) ; -CRT_DISPATCH: +EMU_COMMON: + ; REG A CONTAINS FUNCTION ON ENTRY + CP BF_EMUINI + JR Z,EMU_INI + CP BF_EMUQRY + JR Z,EMU_QRY CALL PANIC ; +; INITIALIZE EMULATION +; C: VDA DEVICE/UNIT TO USE GOING FORWARD +; E: EMULATION TYPE TO USE GOING FORWARD ; +EMU_INI: + LD A,E ; LOAD REQUESTED EMULATION TYPE + LD (CUREMU),A ; SAVE IT + LD A,C ; LOAD REQUESTED VDA DEVICE/UNIT + LD (CURVDA),A ; SAVE IT ; -SYS_DISPATCH: - LD A,B - CP BF_SYSGETCFG - JR Z,SYS_GETCFG - CP BF_SYSSETCFG - JR Z,SYS_SETCFG - CP BF_SYSBNKCPY - JR Z,SYS_BNKCPY + ; UPDATE EMULATION VDA DISPATCHING ADDRESS +#IF (VDUENABLE) + LD HL,VDU_DISPVDA + CP VDADEV_VDU + JR Z,EMU_INI1 +#ENDIF +#IF (CVDUENABLE) + LD HL,CVDU_DISPVDA + CP VDADEV_CVDU + JR Z,EMU_INI1 +#ENDIF +#IF (UPD7220ENABLE) + LD HL,UPD7220_DISPVDA + CP VDADEV_7220 + JR Z,EMU_INI1 +#ENDIF +#IF (N8VENABLE) + LD HL,N8V_DISPVDA + CP VDADEV_N8 + JR Z,EMU_INI1 +#ENDIF CALL PANIC ; +EMU_INI1: + LD (EMU_VDADISPADR),HL ; RECORD NEW VDA DISPATCH ADDRESS + JP EMU_VDADISP ; NOW LET EMULATOR INITIALIZE +; +; QUERY CURRENT EMULATION CONFIGURATION +; RETURN CURRENT EMULATION TARGET VDA DEVICE/UNIT IN C +; RETURN CURRENT EMULATION TYPE IN E +; +EMU_QRY: + LD A,(CURVDA) + LD C,A + LD A,(CUREMU) + LD E,A + JP EMU_VDADISP ; NOW LET EMULATOR COMPLETE THE FUNCTION +; +;================================================================================================== +; VDA DISPATCHING FOR EMULATION HANDLERS +;================================================================================================== +; +; SINCE THE EMULATION HANDLERS WILL ONLY HAVE A SINGLE ACTIVE +; VDA TARGET AT ANY TIME, THE FOLLOWING IMPLEMENTS A FAST DISPATCHING +; MECHANISM THAT THE EMULATION HANDLERS CAN USE TO BYPASS SOME OF THE +; VDA DISPATCHING LOGIC. EMU_VDADISP CAN BE CALLED TO DISPATCH DIRECTLY +; TO THE CURRENT VDA EMULATION TARGET. IT IS A JUMP INSTRUCTION THAT +; IS DYNAMICALLY MODIFIED TO POINT TO THE VDA DISPATCHER FOR THE +; CURRENT EMULATION VDA TARGET. +; +; BELOW IS USED TO INITIALIZE THE EMULATION VDA DISPATCH TARGET +; BASED ON THE DEFAULT VDA. +; +VDA_DISPADR .EQU 0 +#IF (VDUENABLE & (DEFVDA == VDADEV_VDU)) +VDA_DISPADR .SET VDU_DISPVDA +#ENDIF +#IF (CVDUENABLE & (DEFVDA == VDADEV_CVDU)) +VDA_DISPADR .SET CVDU_DISPATCH +#ENDIF +#IF (VDUENABLE & (DEFVDA == VDADEV_7220)) +VDA_DISPADR .SET UPD7220_DISPATCH +#ENDIF +#IF (N8VENABLE & (DEFVDA == VDADEV_N8)) +VDA_DISPADR .SET N8V_DISPVDA +#ENDIF +; +; BELOW IS THE DYNAMICALLY MANAGED EMULATION VDA DISPATCH. +; EMULATION HANDLERS CAN CALL EMU_VDADISP TO INVOKE A VDA +; FUNCTION. EMU_VDADISPADR IS USED TO MARK THE LOCATION +; OF THE VDA DISPATCH ADDRESS. THIS ALLOWS US TO MODIFY +; THE CODE DYNAMICALLY WHEN EMULATION IS INITIALIZED AND +; A NEW VDA TARGET IS SPECIFIED. +; +EMU_VDADISPADR .EQU $ + 1 +EMU_VDADISP: + JP VDA_DISPADR +; +;================================================================================================== +; VIDEO DISPLAY ADAPTER DEVICE DISPATCHER +;================================================================================================== +; +; ROUTE CALL TO SPECIFIED VDA DEVICE DRIVER +; B: FUNCTION +; C: DEVICE/UNIT +; +VDA_DISPATCH: + LD A,C ; REQUESTED DEVICE/UNIT IS IN C + AND $F0 ; ISOLATE THE DEVICE PORTION +#IF (VDUENABLE) + CP VDADEV_VDU + JP Z,VDU_DISPVDA +#ENDIF +#IF (CVDUENABLE) + CP VDADEV_CVDU + JP Z,CVDU_DISPATCH +#ENDIF +#IF (UPD7220ENABLE) + CP VDADEV_7220 + JP Z,UPD7220_DISPATCH +#ENDIF +#IF (N8VENABLE) + CP VDADEV_N8 + JP Z,N8V_DISPVDA +#ENDIF + CALL PANIC +; +;================================================================================================== +; SYSTEM FUNCTION DISPATCHER +;================================================================================================== +; +; B: FUNCTION +; +SYS_DISPATCH: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JR Z,SYS_GETCFG ; $F0 + DEC A + JR Z,SYS_SETCFG ; $F1 + DEC A + JR Z,SYS_BNKCPY ; $F2 + DEC A + JR Z,SYS_GETVER ; $F3 + CALL PANIC ; INVALID +; +; GET ACTIVE CONFIGURATION +; DE: DESTINATION TO RECEIVE CONFIGURATION DATA BLOCK +; MUST BE IN UPPER 32K +; SYS_GETCFG: LD HL,$0200 ; SETUP SOURCE OF CONFIG DATA LD BC,$0100 ; SIZE OF CONFIG DATA LDIR ; COPY IT RET ; +; SET ACTIVE CONFIGURATION +; DE: SOURCE OF NEW CONFIGURATION DATA BLOCK +; MUST BE IN UPPER 32K +; +; HBIOS IS NOT REALLY SET UP TO DYNAMICALLY RECONFIGURE ITSELF!!! +; THIS FUNCTION IS NOT USEFUL YET. +; SYS_SETCFG: LD HL,$0200 ; SETUP SOURCE OF CONFIG DATA LD BC,$0100 @@ -260,12 +456,32 @@ SYS_SETCFG: LDIR RET ; +; PERFORM A BANKED MEMORY COPY +; C: BANK TO SWAP INTO LOWER 32K PRIOR TO COPY OPERATION +; IX: COUNT OF BYTES TO COPY +; HL: SOURCE ADDRESS FOR COPY +; DE: DESTINATION ADDRESS FOR COPY +; SYS_BNKCPY: LD A,C ; BANK SELECTION TO A PUSH IX POP BC ; BC = BYTE COUNT TO COPY JP HB_BNKCPY ; JUST PASS CONTROL TO HBIOS STUB IN UPPER MEMORY ; +; GET THE CURRENT HBIOS VERSION +; RETURNS VERSION IN DE AS BCD +; D: MAJOR VERION IN TOP 4 BITS, MINOR VERSION IN LOW 4 BITS +; E: UPDATE VERION IN TOP 4 BITS, PATCH VERSION IN LOW 4 BITS +; +SYS_GETVER: + LD DE,0 | (RMJ<<12) | (RMN<<8) | (RUP<<4) | RTP + XOR A + RET +; +;================================================================================================== +; GLOBAL HBIOS FUNCTIONS +;================================================================================================== +; ; COMMON ROUTINE THAT IS CALLED BY CHARACTER IO DRIVERS WHEN ; AN IDLE CONDITION IS DETECTED (WAIT FOR INPUT/OUTPUT) ; @@ -298,6 +514,15 @@ SIZ_VDU .EQU $ - ORG_VDU .ECHO " bytes.\n" #ENDIF ; +#IF (N8VENABLE) +ORG_N8V .EQU $ + #INCLUDE "n8v.asm" +SIZ_N8V .EQU $ - ORG_N8V + .ECHO "N8V occupies " + .ECHO SIZ_N8V + .ECHO " bytes.\n" +#ENDIF +; #IF (PRPENABLE) ORG_PRP .EQU $ #INCLUDE "prp.asm" @@ -360,6 +585,24 @@ SIZ_HDSK .EQU $ - ORG_HDSK .ECHO SIZ_HDSK .ECHO " bytes.\n" #ENDIF + +#IF (TTYENABLE) +ORG_TTY .EQU $ + #INCLUDE "tty.asm" +SIZ_TTY .EQU $ - ORG_TTY + .ECHO "TTY occupies " + .ECHO SIZ_TTY + .ECHO " bytes.\n" +#ENDIF + +#IF (ANSIENABLE) +ORG_ANSI .EQU $ + #INCLUDE "ansi.asm" +SIZ_ANSI .EQU $ - ORG_ANSI + .ECHO "ANSI occupies " + .ECHO SIZ_ANSI + .ECHO " bytes.\n" +#ENDIF ; #DEFINE CIOMODE_CONSOLE #DEFINE DSKY_KBD @@ -377,6 +620,9 @@ HSTDSK .DB 0 ; DISK IN BUFFER HSTTRK .DW 0 ; TRACK IN BUFFER HSTSEC .DW 0 ; SECTOR IN BUFFER ; +CUREMU .DB DEFEMU ; CURRENT EMULATION +CURVDA .DB DEFVDA ; CURRENT VDA TARGET FOR EMULATION +; DIOBUF .DW $FD00 ; PTR TO 512 BYTE DISK XFR BUFFER ; STR_BANNER .DB "N8VEM HBIOS v", BIOSVER, " (" @@ -465,22 +711,27 @@ HB_BNKCPY2: ; ENTRY POINT FOR BIOS FUNCTIONS (TARGET OF RST 08) ; HB_ENTRY: + EX AF,AF' ; SAVE AF' SO WE CAN USE IT BELOW + PUSH AF ; " + PGRAMF(1) ; MAP RAM PAGE 1 INTO LOWER 32K LD (HB_STKSAV),SP ; SAVE ORIGINAL STACK FRAME - LD SP,HB_STACK ; SETUP NEW STACK FRAME + LD SP,8000H ; SETUP NEW STACK FRAME AT END OF BANK 1 CALL BIOS_DISPATCH ; CALL HBIOS FUNCTION DISPATCHER - PUSH AF ; SAVE AF + EX AF,AF' ; SAVE AF IN AF' PGRAMF(0) ; MAP RAM PAGE 0 INTO LOWER 32K - POP AF ; RESTORE AF LD SP,(HB_STKSAV) ; RESTORE ORIGINAL STACK FRAME + + POP AF ; RECOVER ORIGINAL AF' + EX AF,AF' ; RESTORE AF' AND GET AF RETURNED FROM DISPATCH BACK RET ; RETURN TO CALLER ; -HB_STKSAV .DW 0 ; PREVIOUS STACK POINTER (SEE PROXY) +HB_STKSAV .DW 0 ; PREVIOUS STACK POINTER ; HB_SLACK .EQU (HB_END - $) .ECHO "HBIOS space remaining: " @@ -488,11 +739,4 @@ HB_SLACK .EQU (HB_END - $) .ECHO " bytes.\n" ; .FILL HB_SLACK,0FFH -; -;================================================================================================== -; HBIOS STACK LIVES IN THE SLACK SPACE!!! -;================================================================================================== -; -HB_STACK .EQU $ & 0FFFFH -; .END diff --git a/Source/cbios.asm b/Source/cbios.asm index 3edaed53..93680a21 100644 --- a/Source/cbios.asm +++ b/Source/cbios.asm @@ -118,9 +118,9 @@ GOCPM: ; SETUP DISK XFR BUFFER LOCATION LD HL,SECBUF LD (BUFADR),HL - LD B,BF_DIOSBA + LD B,BF_DIOSETBUF RST 08 - + LD A,0C3H ; LOAD A WITH 'JP' INSTRUCTION (USED BELOW) ; CPU RESET / RST 0 -> WARM START CP/M @@ -1936,7 +1936,7 @@ DSK_CNT .EQU DPH_CNT ; MAP LOGICAL TO PHYSICAL DEVICES ; LD_TTY .EQU CIODEV_UART -LD_CRT .EQU CIODEV_VDU +LD_CRT .EQU CIODEV_CRT LD_BAT .EQU CIODEV_BAT LD_UC1 .EQU CIODEV_UART LD_PTR .EQU CIODEV_UART @@ -1953,7 +1953,10 @@ LD_UC1 .SET CIODEV_UART + 1 #ENDIF ; #IF (VDUENABLE) -LD_CRT .SET CIODEV_VDU +LD_CRT .SET CIODEV_CRT +#ENDIF +#IF (N8VENABLE) +LD_CRT .SET CIODEV_CRT #ENDIF #IF (PRPENABLE & PRPCONENABLE) LD_CRT .SET CIODEV_PRPCON diff --git a/Source/config_n8_2312.asm b/Source/config_n8_2312.asm index 07140955..93753aa7 100644 --- a/Source/config_n8_2312.asm +++ b/Source/config_n8_2312.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 20 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_N8 ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_N8 ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU TRUE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU TRUE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU TRUE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_n8_2511.asm b/Source/config_n8_2511.asm index 26f909b5..6913ce84 100644 --- a/Source/config_n8_2511.asm +++ b/Source/config_n8_2511.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 20 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_N8 ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_N8 ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU TRUE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU TRUE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU TRUE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_n8vem.asm b/Source/config_n8vem.asm index e97bafc7..cda6a22f 100644 --- a/Source/config_n8vem.asm +++ b/Source/config_n8vem.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_n8vem_dide.asm b/Source/config_n8vem_dide.asm index 1e7d50d4..51ab5cdb 100644 --- a/Source/config_n8vem_dide.asm +++ b/Source/config_n8vem_dide.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_n8vem_diskio.asm b/Source/config_n8vem_diskio.asm index ef7ecf3b..d44ddb18 100644 --- a/Source/config_n8vem_diskio.asm +++ b/Source/config_n8vem_diskio.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_n8vem_diskio3.asm b/Source/config_n8vem_diskio3.asm index f56e1e98..7e666284 100644 --- a/Source/config_n8vem_diskio3.asm +++ b/Source/config_n8vem_diskio3.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_n8vem_ppide.asm b/Source/config_n8vem_ppide.asm index 0b446223..fea97c9e 100644 --- a/Source/config_n8vem_ppide.asm +++ b/Source/config_n8vem_ppide.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_n8vem_ppisd.asm b/Source/config_n8vem_ppisd.asm index 4dff875f..9d5c5b02 100644 --- a/Source/config_n8vem_ppisd.asm +++ b/Source/config_n8vem_ppisd.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_n8vem_propio.asm b/Source/config_n8vem_propio.asm index be2262e0..f61efdc5 100644 --- a/Source/config_n8vem_propio.asm +++ b/Source/config_n8vem_propio.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_PRPCON ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU CIODEV_UART ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $01 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU $00 ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_n8vem_vdu.asm b/Source/config_n8vem_vdu.asm index 5f1bb97a..fe4f3e3a 100644 --- a/Source/config_n8vem_vdu.asm +++ b/Source/config_n8vem_vdu.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_VDU ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU TRUE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU TRUE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU TRUE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU TRUE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_simh.asm b/Source/config_simh.asm index ff1ccfe0..115821db 100644 --- a/Source/config_simh.asm +++ b/Source/config_simh.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_ALWAYS ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU FALSE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU TRUE ; TRUE FOR HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_zeta.asm b/Source/config_zeta.asm index c1af54d8..8c4c2657 100644 --- a/Source/config_zeta.asm +++ b/Source/config_zeta.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 20 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_ZETA ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/config_zeta_ppp.asm b/Source/config_zeta_ppp.asm index f782a170..f704dfb4 100644 --- a/Source/config_zeta_ppp.asm +++ b/Source/config_zeta_ppp.asm @@ -9,10 +9,10 @@ CPUFREQ .EQU 20 ; IN MHZ, USED TO COMPUTE DELAY FACTORS ; PLATFORM .EQU PLT_ZETA ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; -DIOPLT .EQU 0 ; DEPRECATED -; DEFCON .EQU CIODEV_PPPCON ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU CIODEV_UART ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) @@ -25,10 +25,10 @@ UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRU UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) ; -VDUENABLE .EQU FALSE ; TRUE FOR VDU SERVICES (YOU MUST HAVE THE HARDWARE!) -VDUMODE .EQU VDUMODE_VDU ; VDUMODE_NONE, VDUMODE_VDU, VDUMODE_N8, VDUMODE_CVDU (ONLY VDUPLT_VDU IMPLEMENTED!) -; -BIOSSIZE .EQU 0100H ; AMOUNT OF SPACE WITHIN BIOS AREA TO RESERVE FOR DATA +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT ; DEFIOBYTE .EQU $01 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) ALTIOBYTE .EQU $00 ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) @@ -78,7 +78,10 @@ HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) ; -BOOTTYPE: .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT ; diff --git a/Source/n8v.asm b/Source/n8v.asm new file mode 100644 index 00000000..d2ed05f7 --- /dev/null +++ b/Source/n8v.asm @@ -0,0 +1,124 @@ +;__N8VDRIVER_______________________________________________________________________________________ +; +; N8 VIDEO DRIVER FOR ROMWBW +; +;__________________________________________________________________________________________________ +; +;__________________________________________________________________________________________________ +; DATA CONSTANTS +;__________________________________________________________________________________________________ +; +;__________________________________________________________________________________________________ +; BOARD INITIALIZATION +;__________________________________________________________________________________________________ +; +N8V_INIT: + ; INIT TMS9918 HERE... + CALL PPK_INIT + XOR A + RET +; +;__________________________________________________________________________________________________ +; CHARACTER I/O (CIO) DISPATCHER +;__________________________________________________________________________________________________ +; +N8V_DISPCIO: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JP Z,PPK_READ + DEC A + JR Z,N8V_CIOOUT + DEC A + JP Z,PPK_STAT + DEC A + JR Z,N8V_CIOOST + CALL PANIC +; +N8V_CIOOUT: + JP N8V_VDAWRC +; +N8V_CIOOST: + XOR A + INC A + RET +; +;__________________________________________________________________________________________________ +; VIDEO DISPLAY ADAPTER (VDA) DISPATCHER +;__________________________________________________________________________________________________ +; +N8V_DISPVDA: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + + JR Z,N8V_VDAINI + DEC A + JR Z,N8V_VDAQRY + DEC A + JR Z,N8V_VDARES + DEC A + JR Z,N8V_VDASCS + DEC A + JR Z,N8V_VDASCP + DEC A + JR Z,N8V_VDASAT + DEC A + JR Z,N8V_VDASCO + DEC A + JR Z,N8V_VDAWRC + DEC A + JR Z,N8V_VDAFIL + DEC A + JR Z,N8V_VDASCR + DEC A + JP Z,PPK_STAT + DEC A + JP Z,PPK_FLUSH + DEC A + JP Z,PPK_READ + CALL PANIC + +N8V_VDAINI: + XOR A + RET + +N8V_VDAQRY: + CALL PANIC + +N8V_VDARES: + JR N8V_INIT + +N8V_VDASCS: + CALL PANIC + +N8V_VDASCP: + XOR A + RET + +N8V_VDASAT: + CALL PANIC + +N8V_VDASCO: + CALL PANIC + +N8V_VDAWRC: + XOR A + RET + +N8V_VDAFIL: + XOR A + RET + +N8V_VDASCR: + XOR A + RET +; +;__________________________________________________________________________________________________ +; IMBED COMMON PRALLEL PORT KEYBOARD DRIVER +;__________________________________________________________________________________________________ +; +#INCLUDE "ppk.asm" +; +;__________________________________________________________________________________________________ +; LOCAL DRIVER DATA +;__________________________________________________________________________________________________ +; diff --git a/Source/ppk.asm b/Source/ppk.asm new file mode 100644 index 00000000..d7e97ecd --- /dev/null +++ b/Source/ppk.asm @@ -0,0 +1,630 @@ +;__________________________________________________________________________________________________ +; +; PARALLEL PORT KEYBOARD DRIVER FOR N8VEM +; SUPPORT KEYBOARD/MOUSE ON VDU AND N8 +; +; ORIGINAL CODE BY DR JAMES MOXHAM +; ROMWBW ADAPTATION BY WAYNE WARTHEN +;__________________________________________________________________________________________________ +; +;__________________________________________________________________________________________________ +; DATA CONSTANTS +;__________________________________________________________________________________________________ +; +#IF (PLATFORM == PLT_N8) +PPK_PPI .EQU PPI2 ; PPI PORT BASE FOR N8 +#ELSE +PPK_PPI .EQU 0F4H ; PPI PORT BASE FOR VDU +#ENDIF + +PPK_PPIA .EQU PPK_PPI + 0 ; KEYBOARD PPI PORT A +PPK_PPIB .EQU PPK_PPI + 1 ; KEYBOARD PPI PORT B +PPK_PPIC .EQU PPK_PPI + 2 ; KEYBOARD PPI PORT C +PPK_PPIX .EQU PPK_PPI + 3 ; KEYBOARD PPI CONTROL PORT +; +;__________________________________________________________________________________________________ +; KEYBOARD INITIALIZATION +;__________________________________________________________________________________________________ +; +PPK_INIT: + CALL PPK_SETPORTC ; SETS PORT C SO CAN INPUT AND OUTPUT + CALL PPK_RESET ; RESET TO THE KEYBOARD + LD A,200 ; 1 SECOND DELAY AS KEYBOARD SENDS STUFF BACK WHEN RESET + CALL PPK_DELAY ; IGNORE ANYTHING BACK AFTER A RESET + LD A,0 ; EMPTY KB QUEUE + LD (PPK_QLEN),A + XOR A + RET +; +;__________________________________________________________________________________________________ +; KEYBOARD STATUS +;__________________________________________________________________________________________________ +; +PPK_STAT: + CALL PPK_PROCESS ; CALL KEYBOARD ROUTINE + LD A,(PPK_QLEN) ; ASK IF KEYBOARD HAS KEY WAITING + OR A ; SET FLAGS + JP Z,CIO_IDLE ; NO DATA, EXIT VIA IDLE PROCESSING + LD A,$FF ; SIGNAL DATA PENDING + RET +; +;__________________________________________________________________________________________________ +; KEYBOARD READ +;__________________________________________________________________________________________________ +; +PPK_READ: + CALL PPK_STAT ; CHECK TO SEE IF KEY READY + JR Z,PPK_READ ; IF NOT, LOOP + CALL PPK_GETKEY ; GET IT + LD E,A ; PUT KEY WHERE IT BELONGS + XOR A ; SIGNAL SUCCESS + RET +; +;__________________________________________________________________________________________________ +; KEYBOARD FLUSH +;__________________________________________________________________________________________________ +; +PPK_FLUSH: + LD A,0 ; EMPTY KB QUEUE + LD (PPK_QLEN),A ; SAVE IT + XOR A ; SIGNAL SUCCESS + RET + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;__PPK_GETKEY______________________________________________________________________________________ +; +; GET KEY PRESS VALUE +;__________________________________________________________________________________________________ +PPK_GETKEY: + LD A,(PPK_QLEN) ; GET QUEUE POINTER + OR A + RET Z ; ABORT IF QUEUE EMPTY + PUSH BC ; STORE BC + LD B,A ; STORE QUEUE COUNT FOR LATER + PUSH HL ; STORE HL + LD A,(PPK_QUEUE) ; GET TOP BYTE FROM QUEUE + PUSH AF ; STORE IT + LD HL,PPK_QUEUE ; GET POINTER TO QUEUE +PPK_GETKEY1: ; + INC HL ; POINT TO NEXT VALUE IN QUEUE + LD A,(HL) ; GET VALUE + DEC HL ; + LD (HL),A ; MOVE IT UP ONE + INC HL ; + DJNZ PPK_GETKEY1 ; LOOP UNTIL DONE + LD A,(PPK_QLEN) ; DECREASE QUEUE POINTER BY ONE + DEC A ; + LD (PPK_QLEN),A + POP AF ; RESTORE VALUE + POP HL ; RESTORE HL + POP BC ; RESTORE BC + RET + +;__PPK_RESET________________________________________________________________________________________ +; +; RESET THE KEYBOARD +;__________________________________________________________________________________________________ +PPK_RESET: + CALL PPK_DATAHIGH ; + CALL PPK_CLOCKHIGH ; + LD B,255 ; +SF1: DJNZ SF1 ; + CALL PPK_CLOCKLOW ; STEP 1 + LD B,255 ; +SF2: DJNZ SF2 ; + CALL PPK_DATALOW ; STEP 2 + CALL PPK_CLOCKHIGH ; STEP 3 + CALL PPK_WAITCLOCKLOW ; STEP 4 + LD B,9 ; 8 DATA BITS + 1 PARITY BIT LOW +SF3: PUSH BC ; + CALL PPK_DATAHIGH ; STEP 5 + CALL PPK_WAITCLOCKHIGH ; STEP 6 + CALL PPK_WAITCLOCKLOW ; STEP 7 + POP BC ; + DJNZ SF3 ; + CALL PPK_DATAHIGH ; STEP9 + CALL PPK_WAITCLOCKLOW ; STEP 10 COULD READ THE ACK BIT HERE IF WANT TO + CALL PPK_WAITCLOCKHIGH ; STEP 11 + LD B,255 ; +SF4: DJNZ SF4 ; FINISH UP DELAY + RET + +;__PPK_SETPORTC_____________________________________________________________________________________ +; +; SETUP PORT C OF 8255 FOR KEYBOARD +;__________________________________________________________________________________________________ +PPK_SETPORTC: + LD A,10000010B ; A=OUT B=IN, C HIGH=OUT, CLOW=OUT + OUT (PPK_PPIX),A ; PPI CONTROL PORT + LD A,00000000B ; PORT A TO ZERO AS NEED THIS FOR COMMS TO WORK + OUT (PPK_PPIA),A ; PPI PORT A + CALL PPK_DATAHIGH ; + CALL PPK_CLOCKHIGH ; + LD A,0 ; + LD (CAPSLOCK),A ; SET CAPSLOCK OFF TO START + LD (CTRL),A ; CONTROL OFF + LD (NUMLOCK),A ; NUMLOCK OFF + RET +;_________________________________________________________________________________________________ +; +; PORT C BIT ROUTINES +;__________________________________________________________________________________________________ +PPK_PORTCBIT0HIGH: ; + LD A,01110001B ; SEE THE 8255 DATA SHEET + JP PPK_SETBITS ; +PPK_PORTCBIT1HIGH: ; + LD A,01110011B ; SEE THE 8255 DATA SHEET + JP PPK_SETBITS ; +PPK_PORTCBIT2HIGH: ; + LD A,01110101B ; SEE THE 8255 DATA SHEET + JP PPK_SETBITS ; +PPK_PORTCBIT3HIGH: ; + LD A,01110111B ; SEE THE 8255 DATA SHEET + JP PPK_SETBITS ; +PPK_PORTCBIT0LOW: ; + LD A,01110000B ; SEE THE 8255 DATA SHEET + JP PPK_SETBITS ; +PPK_PORTCBIT1LOW: ; + LD A,01110010B ; SEE THE 8255 DATA SHEET + JP PPK_SETBITS ; +PPK_PORTCBIT2LOW: ; + LD A,01110100B ; SEE THE 8255 DATA SHEET + JP PPK_SETBITS ; +PPK_PORTCBIT3LOW: ; + LD A,01110110B ; SEE THE 8255 DATA SHEET + JP PPK_SETBITS ; +PPK_DATAHIGH: +PPK_PORTCBIT4HIGH: ; + LD A,01111001B ; SEE THE 8255 DATA SHEET + JP PPK_SETBITS ; +PPK_DATALOW: ; +PPK_PORTCBIT4LOW: ; + LD A,01111000B ; SEE THE 8255 DATA SHEET + JP PPK_SETBITS ; +PPK_CLOCKHIGH: ; +PPK_PORTCBIT5HIGH: ; + LD A,01111011B ; BIT 5 HIGH + JP PPK_SETBITS ; +PPK_CLOCKLOW: ; +PORTCBIT5LOW: ; + LD A,01111010B ; +PPK_SETBITS: ; + OUT (PPK_PPIX),A ; + RET ; + +;__PPK_WAITCLOCKLOW_________________________________________________________________________________ +; +; WAITCLOCKLOW SAMPLES DATA BIT 0, AND WAITS TILL +; IT GOES LOW, THEN RETURNS +; ALSO TIMES OUT AFTER 0 001 SECONDS +; USES A, CHANGES B +;__________________________________________________________________________________________________ +PPK_WAITCLOCKLOW: + LD B,255 ; FOR TIMEOUT COUNTER +PPK_WAITCLOCKLOW1: + IN A,(PPK_PPIB) ; GET A BYTE FROM PORT B + BIT 1,A ; TEST THE CLOCK BIT + RET Z ; EXIT IF IT WENT LOW + DJNZ PPK_WAITCLOCKLOW1 ; LOOP B TIMES + RET + +;__PPK_WAITCLOCKHIGH_________________________________________________________________________________ +; +; WAITCLOCKHIGH SAMPLES DATA BIT 0, AND WAITS TILL +; IT GOES HIGH, THEN RETURNS +; ALSO TIMES OUT AFTER 0 001 SECONDS +; USES A, CHANGES B +;__________________________________________________________________________________________________ +PPK_WAITCLOCKHIGH: + LD B,255 ; FOR TIMEOUT COUNTER +PPK_WAITCLOCKHIGH1: + IN A,(PPK_PPIB) ; GET A BYTE FROM PORT B + BIT 1,A ; TEST THE CLOCK BIT + RET NZ ; EXIT IF IT WENT HIGH + DJNZ PPK_WAITCLOCKHIGH1 ; LOOP B TIMES + RET + +;__PPK_DELAY________________________________________________________________________________________ +; +; PASS A - DELAY IS B*0 005 SECONDS, BCDEHL ALL PRESERVED +;__________________________________________________________________________________________________ +PPK_DELAY: + PUSH BC ; STORE ALL VARIABLES + PUSH DE ; + PUSH HL ; + LD B,A ; PUT THE VARIABLE DELAY IN B + LD DE,1 ; +PPK_DELAY1: + LD HL,740 ; ADJUST THIS VALUE FOR YOUR CLOCK 1481=3 68MHZ, 3219=8MHZ (TEST WITH A=1000=10 SECS) +PPK_DELAY2: + SBC HL,DE ; HL-1 + JR NZ,PPK_DELAY2 + DJNZ PPK_DELAY1 + POP HL ; RESTORE VARIABLES + POP DE ; + POP BC ; + RET ; + +;__PPK_PROCESS______________________________________________________________________________________ +; +; A=0 IF WANT TO KNOW IF A BYTE IS AVAILABLE, AND A=1 TO ASK FOR THE BYTE +;__________________________________________________________________________________________________ +PPK_PROCESS: + CALL PPK_SKIP ; DON'T TEST EVERY ONE AS TAKES TIME + OR A ; IS IT ZERO + RET Z ; RETURN IF ZERO + CALL PPK_WAITBYTE ; TEST KEYBOARD TIMES OUT AFTER A BIT + CALL PPK_DECODECHAR ; RETURNS CHAR OR 0 FOR THINGS LIKE KEYUP, SOME RETURN DIRECTLY TO CP/M + RET ; RETURN TO CP/M + +;----------------------------------------------- +; CPM CALLS THE KEYBOARD QUITE FREQUENTLY IF A KEYBOARD WAS LIKE A UART WHICH CAN BE CHECKED +; WITH ONE INSTRUCTION, THAT WOULD BE FINE BUT CHECKING A KEYBOARD INVOLVES PUTTING THE CLOCK LINE LOW +; THEN WAITING SOME TIME FOR A POSSIBLE REPLY, THEN READING IN BITS WITH TIMEOUTS AND THEN RETURNING +; THIS SLOWS DOWN A LOT OF CP/M PROCESSES, EG TRY TYPE MYPROG AND PRINTING OUT TEXT +PPK_SKIP: + LD B,0 ; + LD A,(SKIPCOUNT) ; + DEC A ; SUBTRACT 1 + LD (SKIPCOUNT),A ; STORE IT BACK + CP 0 ; + JP NZ,PPK_SKIP1 ; WORDSTAR IS VERY SLOW EVEN TRIED A VALUE OF 5 TO 200 HERE + LD A,200 ; ONLY ACT ON EVERY N CALLS - BIGGER=BETTER BECAUSE THIS SUB IS QUICKER THAN READBITS + LD (SKIPCOUNT),A ; RESET COUNTER + LD B,1 ; FLAG TO SAY RESET COUNTER +PPK_SKIP1: ; + LD A,B ; RETURN THE VALUE IN A + RET + +;__PPK_DECODECHAR____________________________________________________________________________________ +; +; DECODE CHARACTER PASS A AND PRINTS OUT THE CHAR +; ON THE LCD SCREEN +;__________________________________________________________________________________________________ +PPK_DECODECHAR: + CP 0 ; IS IT ZERO + RET Z ; RETURN IF A ZERO - NO NEED TO DO ANYTHING + CP 0F0H ; IS A KEY UP (NEED TO DO SPECIAL CODE FOR SHIFT) + JP Z,DECKEYUP ; IGNORE CHAR UP + CP 0E0H ; TWO BYTE KEYPRESSES + JP Z,TWOBYTE ; + CP 058H ; CAPS LOCK SO TOGGLE + JP Z,CAPSTOG ; + CP 12H ; SHIFT (DOWN, BECAUSE UP WOULD BE TRAPPED BY 0F ABOVE) + JP Z,SHIFTDOWN ; + CP 59H ; OTHER SHIFT KEY + JP Z,SHIFTDOWN ; + CP 014H ; CONTROL KEY + JP Z,CONTROLDOWN ; + CP 05AH ; ENTER KEY + JP Z,RETURN ; + CP 066H ; BACKSPACE KEY + JP Z,BACKSPACE ; + CP 0DH ; TAB KEY + JP Z,TABKEY ; + CP 076H ; ESCAPE KEY + JP Z,ESCAPE ; + LD C,A ; + LD B,0 ; ADD BC TO HL + LD HL,PPK_KEYMAP ; OFFSET TO ADD + ADD HL,BC ; + JP TESTCONTROL ; IS THE CONTROL KEY DOWN? +DC1: LD A,(CAPSLOCK) ; + CP 0 ; IS IT 0, IF SO THEN DON'T ADD THE CAPS OFFSET + JR Z,DC2 ; + LD C,080H ; ADD ANOTHER 50H TO SMALLS TO GET CAPS + ADD HL,BC ; +DC2: LD A,(HL) ; + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +TESTCONTROL: + LD A,(CTRL) ; + CP 0 ; IS CONTROL BEING HELD DOWN? + JP Z,DC1 ; NO SO GO BACK TO TEST CAPS LOCK ON + LD A,(HL) ; GET THE LETTER, SHOULD BE SMALLS + SUB 96 ; A=97 SO SUBTRACT 96 A=1=^A + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; RETURN INSTEAD OF THE RET AFTER DC2 +TABKEY: ; + LD A,9 ; + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ;TAB +BACKSPACE: ; + LD A,8 ; BACKSPACE + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +ESCAPE: ; + LD A,27 ; + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +RETURN: ; + LD A,13 ; CARRIAGE RETURN + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +DECKEYUP: + CALL PPK_WAITBYTE ; IGNORE KEY UP THROW AWAY THE CHARACTER UNLESS A SHIFT + CP 012H ; IS IT A SHIFT + JP Z,SHIFTUP ; + CP 59H ; OTHER SHIFT KEY + JP Z,SHIFTUP ; + CP 014H ; CONTROL UP + JP Z,CONTROLUP ; CONTROL UP + LD A,0 ; NOTHING CAPTURED SO SEND BACK A ZERO + RET +TWOBYTE:; ALREADY GOT EO SO GET THE NEXT CHARACTER + CALL PPK_WAITBYTE + CP 0F0H ; SEE THE NOTES - KEYUP FOR E0 KEYS IS EO F0 NN NOT F0 EO!! + JP Z,TWOBYTEUP ; + CP 071H ; DELETE + JP Z,DELETEKEY ; + CP 05AH ; RETURN ON NUMBER PAD + JP Z,RETURNKEY ; + CP 072H ; + JP Z,DOWNARROW ; + CP 074H ; + JP Z,RIGHTARROW ; + CP 06BH ; + JP Z,LEFTARROW ; + CP 075H ; + JP Z,UPARROW ; + CP 070H ; + JP Z,INSERT ; + CP 07DH ; + JP Z,PAGEUP ; + CP 07AH ; + JP Z,PAGEDOWN ; + CP 06CH ; + JP Z,HOME ; + CP 069H ; + JP Z,END ; + LD A,0 ; RETURNS NOTHING + RET +TWOBYTEUP: ;EXPECT A BYTE AND IGNORE IT + CALL PPK_WAITBYTE ; + LD A,0 ; + RET ; +HOME: ; + LD A,1BH ; ESC + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'?' ; ? + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'W' ; W + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +END: ; + LD A,1BH ; ESC + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'?' ; ? + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'Q' ; Q + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +DOWNARROW: ; + LD A,1BH ; ESC + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'B' ; B + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +RIGHTARROW: ; + LD A,1BH ; ESC + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'C' ; C + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +LEFTARROW: ; + LD A,1BH ; ESC + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'D' ; D + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +UPARROW: ; + LD A,1BH ; ESC + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'A' ; A + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +INSERT: ; + LD A,1BH ; ESC + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'?' ; ? + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'P' ; P + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +PAGEUP: ; + LD A,1BH ; ESC + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'?' ; ? + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'Y' ; Y + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +PAGEDOWN: ; + LD A,1BH ; ESC + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'?' ; ? + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + LD A,'S' ; S + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +CONTROLDOWN: ; SAME CODE AS SHIFTDOWN BUT DIFF LOCATION + LD A,0FFH ; + LD (CTRL),A ; CONTROL DOWN + LD A,0 ; + RET ; +CONTROLUP: ; CONTROL KEY UP SEE SHIFT FOR EXPLANATION + LD A,0 ; + LD (CTRL),A ; + LD A,0 ; + RET ; +RETURNKEY: ; + LD A,13 ; + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +DELETEKEY: ; + LD A,07FH ; DELETE KEY VALUE THAT CP/M USES + CALL PPK_ENQUEUE ; STORE ON KB QUEUE + RET ; +CAPSTOG: ; + LD A,(CAPSLOCK) ; + XOR 11111111B ; SWAP ALL THE BITS + LD (CAPSLOCK),A ; + LD A,0 ; RETURNS NOTHING + RET ; +SHIFTDOWN: ; SHIFT IS SPECIAL - HOLD IT DOWN AND IT AUTOREPEATS + ; SO ONCE IT IS DOWN, TURN CAPS ON AND IGNORE ALL FURTHER SHIFTS + ; ONLY AN F0+SHIFT TURNS CAPS LOCK OFF AGAIN + LD A,0FFH ; + LD (CAPSLOCK),A ; + LD A,0 ; RETURNS NOTHING + RET ; +SHIFTUP: ; SHIFTUP TURNS OFF CAPS LOCK DEFINITELY + LD A,0 ; + LD (CAPSLOCK),A ; + LD A,0 ; RETURNS NOTHING + RET ; + +;__PPK_ENQUEUE______________________________________________________________________________________ +; +; STORE A BYTE IN THE KEYBOARD QUEUE +; A: BYTE TO ENQUEUE +;__________________________________________________________________________________________________ +PPK_ENQUEUE: + PUSH DE ; STORE DE + PUSH HL ; STORE HL + PUSH AF ; STORE VALUE + LD A,(PPK_QLEN) ; PUT QUEUE POINTER IN A + CP 15 ; IS QUEUE FULL + JP P,PPK_ENQUEUE1 ; YES, ABORT + LD HL,PPK_QUEUE ; GET QUEUE POINTER + PUSH HL ; MOVE HL TO BC + POP BC ; + LD H,0 ; ZERO OUT H + LD L,A ; PLACE QUEUE POINTER IN L + ADD HL,BC ; POINT HL AT THE NEXT LOACTION TO ADD VALUE + POP AF ; RESTORE VALUE + LD (HL),A ; ENQUEUE VALUE + LD A,(PPK_QLEN) ; GET QUEUE POINTER + INC A ; INC IT + LD (PPK_QLEN),A ;STORE QUEUE POINTER +PPK_ENQUEUE1: + POP HL ; RESTORE HL + POP DE ; RESTORE DE + RET + + +;__PPK_WAITBYTE_____________________________________________________________________________________ +; +; WAIT FOR A BYTE - TESTS A NUMBER OF TIMES IF THERE IS A KEYBOARD INPUT, +; OVERWRITES ALL REGISTERS, RETURNS BYTE IN A +;__________________________________________________________________________________________________ +PPK_WAITBYTE: + CALL PPK_CLOCKHIGH ; TURN ON KEYBOARD + LD HL,500 ; NUMBER OF TIMES TO CHECK 200=SLOW TYPE + ; 10=ERROR, 25 ?ERROR 50 OK - + ; THIS DELAY HAS TO BE THERE OTHERWISE WEIRD KEYUP ERRORS +PPK_WAITBYTE1: + PUSH HL ; STORE COUNTER + CALL PPK_READBITS ; TEST FOR A LOW ON THE CLOCK LINE + POP HL ; GET THE COUNTER BACK + CP 0 ; TEST FOR A ZERO BACK FROM READBITS + JR NZ,PPK_WAITBYTE2 ; IF NOT A ZERO THEN MUST HAVE A BYTE IE A KEYBOARD PRESS + LD DE,1 ; LOAD WITH 1 + SBC HL,DE ; SUBTRACT 1 + JR NZ,PPK_WAITBYTE1 ; LOOP WAITING FOR A RESPONSE +PPK_WAITBYTE2: + PUSH AF ; STORE THE VALUE IN A + CALL PPK_CLOCKLOW ; TURN OFF KEYBOARD + POP AF ; GET BACK BYTE AS CLOCKLOW ERASED IT + RET + +;__PPK_READBITS_____________________________________________________________________________________ +; +; READBITS READS 11 BITS IN FROM THE KEYBOARD +; FIRST BIT IS A START BIT THEN 8 BITS FOR THE BYTE +; THEN A PARITY BIT AND A STOP BIT +; RETURNS AFTER ONE MACHINE CYCLE IF NOT LOW +; USES A, B,D, E +; RETURNS A=0 IF NO DATA, A= SCANCODE (OR PART THEREOF) +;__________________________________________________________________________________________________ +PPK_READBITS: + IN A,(PPK_PPIB) + BIT 1,A ; TEST THE CLOCK BIT + JR Z,PPK_READBITS1 ; IF LOW THEN START THE CAPTURE + LD A,0 ; RETURNS A=0 IF NOTHING + RET +PPK_READBITS1: + CALL PPK_WAITCLOCKHIGH ; IF GETS TO HERE THEN MUST BE LOW SO WAIT TILL HIGH + LD B,8 ; SAMPLE 8 TIMES + LD E,0 ; START WITH E=0 +PPK_READBITS2: + LD D,B ; STORE BECAUSE WAITCLOCKHIGH DESTROYS + CALL PPK_WAITCLOCKLOW ; WAIT TILL CLOCK GOES LOW + IN A,(PPK_PPIB) ; SAMPLE THE DATA LINE + RRA ; MOVE THE DATA BIT INTO THE CARRY REGISTER + LD A,E ; GET THE BYTE WE ARE BUILDING IN E + RRA ; MOVE THE CARRY BIT INTO BIT 7 AND SHIFT RIGHT + LD E,A ; STORE IT BACK AFTER 8 CYCLES 1ST BIT READ WILL BE IN B0 + CALL PPK_WAITCLOCKHIGH ; WAIT TILL GOES HIGH + LD B,D ; RESTORE FOR LOOP + DJNZ PPK_READBITS2 ; DO THIS 8 TIMES + CALL PPK_WAITCLOCKLOW ; GET THE PARITY BIT + CALL PPK_WAITCLOCKHIGH + CALL PPK_WAITCLOCKLOW ; GET THE STOP BIT + CALL PPK_WAITCLOCKHIGH + LD A,E ; RETURNS WITH ANSWER IN A + RET + +PPK_KEYMAP: + ; THE TI CHARACTER CODES, OFFSET FROM LABEL BY KEYBOARD SCAN CODE + .DB $00, $00, $00, $00, $00, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $09, "`", $00 ; $09=TAB + .DB $00, $00, $00, $00, $00, "q", "1", $00 + .DB $00, $00, "z", "s", "a", "w", "2", $00 + .DB $00, "c", "x", "d", "e", "4", "3", $00 + .DB $00, " ", "v", "f", "t", "r", "5", $00 + .DB $00, "n", "b", "h", "g", "y", "6", $00 + .DB $00, $00, "m", "j", "u", "7", "8", $00 + .DB $00, ",", "k", "i", "o", "0", "9", $00 + .DB $00, ".", "/", "l", ";", "p", "-", $00 + .DB $00, $00, $27, $00, "[", "=", $00, $00 ; $27=APOSTROPHE + .DB $00, $00, $00, "]", $00, $5C, $00, $00 ; $5C=BACKSLASH + .DB $00, $00, $00, $00, $00, $00, $00, $00 + .DB $00, "1", $00, "4", "7", $00, $00, $00 + .DB "0", ".", "2", "5", "6", "8", $00, $00 + .DB $00, "+", "3", "-", "*", "9", $00, $00 + +PPK_SHIFTKEYMAP: + .DB $00, $00, $00, $00, $00, $00, $00, $00 + .DB $00, $00, $00, $00, $00, $09, "~", $00 ; $09=TAB + .DB $00, $00, $00, $00, $00, "Q", "!", $00 + .DB $00, $00, "Z", "S", "A", "W", "@", $00 + .DB $00, "C", "X", "D", "E", "$", "#", $00 + .DB $00, " ", "V", "F", "T", "R", "%", $00 + .DB $00, "N", "B", "H", "G", "Y", "^", $00 + .DB $00, $00, "M", "J", "U", "&", "*", $00 + .DB $00, "<", "K", "I", "O", ")", "(", $00 + .DB $00, ">", "?", "L", ":", "P", "_", $00 + .DB $00, $00, $22, $00, "{", "+", $00, $00 ; $22=DBLQUOTE + .DB $00, $00, $00, "}", $00, "|", $00, $00 + .DB $00, $00, $00, $00, $00, $00, $00, $00 + .DB $00, "1", $00, "4", "7", $00, $00, $00 + .DB "0", ".", "2", "5", "6", "8", $00, $00 + .DB $00, "+", "3", "-", "*", "9", $00, $00 +; +;================================================================================================== +; PARALLEL PORT KEYBOARD DRIVER - DATA +;================================================================================================== +; +CAPSLOCK .DB 0 ; CAPS LOCK TOGGLED FLAG, $00=NO, $FF=YES +CTRL .DB 0 ; CTRL KEY PRESSED FLAG, $00=NO, $FF=YES +NUMLOCK .DB 0 ; NUM LOCK TOGGLED FLAG, $00=NO, $FF=YES +SKIPCOUNT .DB 0 ; SKIP COUNTER (SEE CODE COMMENTS) +PPK_QUEUE .FILL 16,0 ; 16 BYTE KB QUEUE +PPK_QLEN .DB 0 ; COUNT OF BYTES CURRENTLY IN QUEUE diff --git a/Source/std.asm b/Source/std.asm index 01cd7693..040ef54f 100644 --- a/Source/std.asm +++ b/Source/std.asm @@ -19,8 +19,14 @@ ; ;--------------------------------------------------------------------------------------------------- ; -TRUE: .EQU 1 -FALSE: .EQU 0 +TRUE .EQU 1 +FALSE .EQU 0 +; +; DEPRECATED STUFF!!! +; +DIOPLT .EQU 0 ; DEPRECATED!!! +VDUMODE .EQU 0 ; DEPRECATED!!! +BIOSSIZE .EQU 0100H ; DEPRECATED!!! ; ; PRIMARY HARDWARE PLATFORMS ; @@ -33,11 +39,13 @@ PLT_N8 .EQU 3 ; N8 (HOME COMPUTER) Z180 SBC BT_MENU .EQU 1 ; WAIT FOR MENU SELECTION AT LOADER PROMPT BT_AUTO .EQU 2 ; AUTO SELECT BOOT_DEFAULT AFTER BOOT_TIMEOUT ; -; VDU MODE SELECTIONS +; VDA DEVICES (VIDEO DISPLAY ADAPTER) ; -VDUMODE_VDU .EQU 1 ; ORIGINAL ECB VDU (6545 CHIP) -VDUMODE_CVDU .EQU 2 ; ECB VDU COLOR (PENDING HARDWARE DEVELOPMENT) -VDUMODE_N8 .EQU 3 ; N8 ONBOARD VIDEO SUBSYSTEM (NOT IMPLEMENTED) +VDADEV_NONE .EQU $00 ; NO VDA DEVICE +VDADEV_VDU .EQU $10 ; ECB VDU - 6545 CHIP +VDADEV_CVDU .EQU $20 ; ECB COLOR VDU - 8563 CHIP (NOT IMPLEMENTED) +VDADEV_7220 .EQU $30 ; ECB uP7220 (NOT IMPLEMENTED) +VDADEV_N8 .EQU $40 ; N8 ONBOARD VDA SUBSYSTEM (NOT IMPLEMENTED) ; ; CHARACTER DEVICES ; @@ -46,6 +54,7 @@ CIODEV_PRPCON .EQU $10 CIODEV_VDU .EQU $20 CIODEV_CVDU .EQU $30 CIODEV_PPPCON .EQU $40 +CIODEV_CRT .EQU $80 CIODEV_BAT .EQU $E0 CIODEV_NUL .EQU $F0 ; @@ -116,13 +125,13 @@ IDEMODE_DIDE .EQU 2 ; DUAL IDE ; PPIDEMODE_STD .EQU 1 ; STANDARD N8VEM PARALLEL PORT PPIDEMODE_DIO3 .EQU 2 ; DISKIO V3 PARALLEL PORT -; -; CONSOLE DEVICE CHOICES FOR LDRCON AND DBGCON IN CONFIG SETTINGS -; -CON_UART .EQU 1 -CON_VDU .EQU 2 -CON_PRP .EQU 3 -CON_PPP .EQU 4 +;; +;; CONSOLE DEVICE CHOICES FOR LDRCON AND DBGCON IN CONFIG SETTINGS +;; +;CON_UART .EQU 1 +;CON_VDU .EQU 2 +;CON_PRP .EQU 3 +;CON_PPP .EQU 4 ; ; CONSOLE TERMINAL TYPE CHOICES ; @@ -131,6 +140,12 @@ TERM_ANSI .EQU 1 TERM_WYSE .EQU 2 TERM_VT52 .EQU 3 ; +; EMULATION TYPES +; +EMUTYP_NONE .EQU 0 +EMUTYP_TTY .EQU 1 +EMUTYP_ANSI .EQU 2 +; ; SYSTEM GENERATION SETTINGS ; SYS_CPM .EQU 1 ; CPM (IMPLIES BDOS + CCP) @@ -333,6 +348,7 @@ BF_CIOIN .EQU BF_CIO + 0 ; CHARACTER INPUT BF_CIOOUT .EQU BF_CIO + 1 ; CHARACTER OUTPUT BF_CIOIST .EQU BF_CIO + 2 ; CHARACTER INPUT STATUS BF_CIOOST .EQU BF_CIO + 3 ; CHARACTER OUTPUT STATUS +BF_CIOCFG .EQU BF_CIO + 4 ; CHARACTER I/O CONFIG ; BF_DIO .EQU $10 BF_DIORD .EQU BF_DIO + 0 ; DISK READ @@ -340,24 +356,46 @@ BF_DIOWR .EQU BF_DIO + 1 ; DISK WRITE BF_DIOST .EQU BF_DIO + 2 ; DISK STATUS BF_DIOMED .EQU BF_DIO + 3 ; DISK MEDIA BF_DIOID .EQU BF_DIO + 4 ; DISK IDENTIFY -BF_DIOGBA .EQU BF_DIO + 8 ; DISK GET BUFFER ADR -BF_DIOSBA .EQU BF_DIO + 9 ; DISK SET BUFFER ADR -; -BF_CLK .EQU $20 -BF_CLKRD .EQU BF_CLK + 0 -BF_CLKWR .EQU BF_CLK + 1 -; -BF_VDU .EQU $30 -BF_VDUIN .EQU BF_VDU + 0 ; VDU CHARACTER INPUT -BF_VDUOUT .EQU BF_VDU + 1 ; VDU CHARACTER OUTPUT -BF_VDUIST .EQU BF_VDU + 2 ; VDU CHARACTER INPUT STATUS -BF_VDUOST .EQU BF_VDU + 3 ; VDU CHARACTER OUTPUT STATUS -BF_VDUXY .EQU BF_VDU + 4 ; VDU CURSOR POSITION X/Y +BF_DIOGETBUF .EQU BF_DIO + 8 ; DISK GET BUFFER ADR +BF_DIOSETBUF .EQU BF_DIO + 9 ; DISK SET BUFFER ADR +; +BF_RTC .EQU $20 +BF_RTCGETTIM .EQU BF_RTC + 0 ; GET TIME +BF_RTCSETTIM .EQU BF_RTC + 1 ; SET TIME +BF_RTCGETBYT .EQU BF_RTC + 2 ; GET NVRAM BYTE BY INDEX +BF_RTCSETBYT .EQU BF_RTC + 3 ; SET NVRAM BYTE BY INDEX +BF_RTCGETBLK .EQU BF_RTC + 4 ; GET NVRAM DATA BLOCK +BF_RTCSETBLK .EQU BF_RTC + 5 ; SET NVRAM DATA BLOCK +; +BF_EMU .EQU $30 +BF_EMUIN .EQU BF_EMU + 0 ; EMULATOR CHARACTER INPUT +BF_EMUOUT .EQU BF_EMU + 1 ; EMULATOR CHARACTER OUTPUT +BF_EMUIST .EQU BF_EMU + 2 ; EMULATOR CHARACTER INPUT STATUS +BF_EMUOST .EQU BF_EMU + 3 ; EMULATOR CHARACTER OUTPUT STATUS +BF_EMUCFG .EQU BF_EMU + 4 ; EMULATOR CHARACTER I/O CONFIG +BF_EMUINI .EQU BF_EMU + 8 ; INITIALIZE EMULATION +BF_EMUQRY .EQU BF_EMU + 9 ; QUERY EMULATION STATUS +; +BF_VDA .EQU $40 +BF_VDAINI .EQU BF_VDA + 0 ; INITIALIZE VDU +BF_VDAQRY .EQU BF_VDA + 1 ; QUERY VDU STATUS +BF_VDARES .EQU BF_VDA + 2 ; SOFT RESET VDU +BF_VDASCS .EQU BF_VDA + 3 ; SET CURSOR STYLE +BF_VDASCP .EQU BF_VDA + 4 ; SET CURSOR POSITION +BF_VDASAT .EQU BF_VDA + 5 ; SET CHARACTER ATTRIBUTE +BF_VDASCO .EQU BF_VDA + 6 ; SET CHARACTER COLOR +BF_VDAWRC .EQU BF_VDA + 7 ; WRITE CHARACTER +BF_VDAFIL .EQU BF_VDA + 8 ; FILL +BF_VDASCR .EQU BF_VDA + 9 ; SCROLL +BF_VDAKST .EQU BF_VDA + 10 ; GET KEYBOARD STATUS +BF_VDAKFL .EQU BF_VDA + 11 ; FLUSH KEYBOARD BUFFER +BF_VDAKRD .EQU BF_VDA + 12 ; READ KEYBOARD ; BF_SYS .EQU $F0 BF_SYSGETCFG .EQU BF_SYS + 0 ; GET CONFIGURATION DATA BLOCK BF_SYSSETCFG .EQU BF_SYS + 1 ; SET CONFIGURATION DATA BLOCK BF_SYSBNKCPY .EQU BF_SYS + 2 ; COPY TO/FROM RAM/ROM MEMORY BANK +BF_SYSGETVER .EQU BF_SYS + 3 ; GET VERSION OF HBIOS ; ; ; MEMORY LAYOUT diff --git a/Source/tty.asm b/Source/tty.asm new file mode 100644 index 00000000..cec71c8c --- /dev/null +++ b/Source/tty.asm @@ -0,0 +1,150 @@ +; +;================================================================================================== +; TTY EMULATION MODULE +;================================================================================================== +; +TTY_INIT: + JR TTY_INI +; +; +; +TTY_DISPATCH: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JR Z,TTY_IN ; $30 + DEC A + JR Z,TTY_OUT ; $31 + DEC A + JR Z,TTY_IST ; $32 + DEC A + JR Z,TTY_OST ; $33 + DEC A + JR Z,TTY_CFG ; $34 + CP 8 + JR Z,TTY_INI ; $38 + CP 9 + JR Z,TTY_QRY ; $39 + CALL PANIC +; +; +; +TTY_IN: + LD B,BF_VDAKRD + JP EMU_VDADISP +; +; +; +TTY_OUT: + CALL TTY_DOCHAR + XOR A + RET +; +; +; +TTY_IST: + LD B,BF_VDAKST + JP EMU_VDADISP +; +; +; +TTY_OST: + XOR A + INC A + RET +; +; +; +TTY_CFG: + XOR A + RET +; +; +; +TTY_INI: + LD (TTY_ROW),A + LD (TTY_COL),A + LD B,BF_VDARES + JP EMU_VDADISP ; RESET VDA +; +; +; +TTY_QRY: + XOR A + RET +; +; +; +TTY_DOCHAR: + LD A,E ; CHARACTER TO PROCESS + CP 8 ; BACKSPACE + JR Z,TTY_BS + CP 12 ; FORMFEED + JR Z,TTY_FF + CP 13 ; CARRIAGE RETURN + JR Z,TTY_CR + CP 10 ; LINEFEED + JR Z,TTY_LF + CP 32 ; COMPARE TO SPACE (FIRST PRINTABLE CHARACTER) + RET C ; SWALLOW OTHER CONTROL CHARACTERS + LD B,BF_VDAWRC + CALL EMU_VDADISP ; SPIT OUT THE RAW CHARACTER + LD A,(TTY_COL) ; GET CUR COL + INC A ; INCREMENT + LD (TTY_COL),A ; SAVE IT + CP 80 ; COMPARE TO COLS IN LINE + RET C ; NOT PAST END OF LINE, ALL DONE + CALL TTY_CR ; CARRIAGE RETURN + JR TTY_LF ; LINEFEED AND RETURN +; +TTY_FF: + LD DE,0 ; HOME CURSOR + LD (TTY_ROWCOL),DE ; SAVE IT + CALL TTY_XY ; EXECUTE + LD E,' ' ; FILL SCREEN WITH BLANKS + LD HL,80 * 24 ; NUMBER OF CHARACTER POSITIONS TO FILL + LD B,BF_VDAFIL + CALL EMU_VDADISP ; PERFORM FILL + JR TTY_XY ; HOME CURSOR AND RETURN +; +TTY_BS: + LD DE,(TTY_ROWCOL) ; GET CURRENT ROW/COL IN DE + LD A,E ; GET CURRENT COLUMN + CP 1 ; COMPARE TO COLUMN 1 + RET C ; LESS THAN 1, NOTHING TO DO + DEC E ; POINT TO PREVIOUS COLUMN + LD (TTY_ROWCOL),DE ; SAVE NEW COLUMN VALUE + CALL TTY_XY ; MOVE CURSOR TO NEW TARGET COLUMN + LD E,' ' ; LOAD A SPACE CHARACTER + LD B,BF_VDAWRC + CALL EMU_VDADISP ; OVERWRITE WITH A SPACE CHARACTER + JR TTY_XY ; NEED TO MOVE CURSOR BACK TO NEW TARGET COLUMN +; +TTY_CR: + XOR A + LD (TTY_COL),A + JR TTY_XY +; +TTY_LF: + LD A,(TTY_ROW) + INC A + LD (TTY_ROW),A + CP 24 ; COMPARE TO SCREEN ROWS + JR C,TTY_XY ; NOT PAST END, ALL DONE + SUB 23 ; A WILL NOW HAVE NUM LINES TO SCROLL + LD E,A ; LINES TO SCROLL -> E + LD B,BF_VDASCR + CALL EMU_VDADISP ; DO THE SCROLLING + LD A,23 ; ROW 23 + LD (TTY_ROW),A ; IS NOW CORRECT + JR TTY_XY ; RESPOSITION CURSOR AND RETURN +; +TTY_XY: + LD DE,(TTY_ROWCOL) + LD B,BF_VDASCP + JP EMU_VDADISP +; +; +; +TTY_ROWCOL: +TTY_COL .DB 0 +TTY_ROW .DB 0 diff --git a/Source/vdu.asm b/Source/vdu.asm index d9762a12..f6698595 100644 --- a/Source/vdu.asm +++ b/Source/vdu.asm @@ -10,15 +10,11 @@ ;__________________________________________________________________________________________________ ; DATA CONSTANTS ;__________________________________________________________________________________________________ -;IDE REGISTER IO PORT ; FUNCTION +; READR .EQU 0F0h ; READ VDU WRITR .EQU 0F1h ; WRITE VDU SY6545S .EQU 0F2h ; VDU STATUS/REGISTER SY6545D .EQU 0F3h ; -VPPIA .EQU 0F4h ; PPI PORT A -VPPIB .EQU 0F5h ; PPI PORT B -VPPIC .EQU 0F6h ; PPI PORT C -VPPICONT .EQU 0F7h ; PPI CONTROL PORT STATE_NORMAL .EQU 00H ; NORMAL TERMINAL OPS STATE_ESC .EQU 01H ; ESC MODE @@ -26,56 +22,186 @@ STATE_DIR_L .EQU 02H ; ESC-Y X * STATE_DIR_C .EQU 03H ; ESC-Y * X ESC_KEY .EQU 1BH ; ESCAPE CODE +; +;__________________________________________________________________________________________________ +; BOARD INITIALIZATION +;__________________________________________________________________________________________________ +; +VDU_INIT: + CALL INITVDU + CALL PPK_INIT + XOR A + RET ; ;__________________________________________________________________________________________________ ; FUNCTION JUMP TABLE ;__________________________________________________________________________________________________ ; -VDU_DISPATCH: +VDU_DISPCIO: LD A,B ; GET REQUESTED FUNCTION AND $0F ; ISOLATE SUB-FUNCTION - JR Z,VDU_IN + JR Z,VDU_CIOIN DEC A - JR Z,VDU_OUT + JR Z,VDU_CIOOUT DEC A - JR Z,VDU_IST + JR Z,VDU_CIOIST DEC A - JR Z,VDU_OST + JR Z,VDU_CIOOST CALL PANIC +; +VDU_CIOIN: + JP PPK_READ ; -VDU_INIT: - CALL INITVDU +VDU_CIOIST: + JP PPK_STAT +; +VDU_CIOOUT: + JP VDU_VDAWRC +; +VDU_CIOOST: + XOR A + INC A RET ; -VDU_IN: - CALL GET_KEY - LD E,A - RET +;__________________________________________________________________________________________________ +; NEW FUNCTION JUMP TABLE +;__________________________________________________________________________________________________ ; -VDU_IST: - CALL IS_KBHIT + +VDU_DISPVDA: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + + JR Z,VDU_VDAINI + DEC A + JR Z,VDU_VDAQRY + DEC A + JR Z,VDU_VDARES + DEC A + JR Z,VDU_VDASCS + DEC A + JR Z,VDU_VDASCP + DEC A + JR Z,VDU_VDASAT + DEC A + JR Z,VDU_VDASCO + DEC A + JR Z,VDU_VDAWRC + DEC A + JR Z,VDU_VDAFIL + DEC A + JR Z,VDU_VDASCR + DEC A + JP Z,PPK_STAT + DEC A + JP Z,PPK_FLUSH + DEC A + JP Z,PPK_READ + CALL PANIC + +VDU_VDAINI: + CALL INITVDU + XOR A RET -; -VDU_OUT: - LD C,E - CALL CHARIN + +VDU_VDAQRY: + CALL PANIC + +VDU_VDARES: + JR VDU_INIT + +VDU_VDASCS: + CALL PANIC + +VDU_VDASCP: + LD A,E + LD (TERM_X),A + LD A,D + LD (TERM_Y),A + CALL GOTO_XY + XOR A RET -; -VDU_OST: + +VDU_VDASAT: + ; FIX: NOT IMPLEMENTED!!! CALL PANIC + +VDU_VDASCO: + ; NOT SUPPORTED!!! + CALL PANIC + +VDU_VDAWRC: + ; PUSH CHARACTER OUT AT CURRENT POSITION + LD A,31 ; PREP VDU FOR DATA R/W + OUT (SY6545S),A + CALL VDU_WAITRDY ; WAIT FOR VDU TO BE READY + LD A,E + OUT (WRITR),A ; OUTPUT CHAR TO VDU + + ; UPDATE CURSOR POSITION TO FOLLOW CHARACTERS + LD HL,(VDU_DISPLAYPOS) ; GET CURRENT DISPLAY POSITION + INC HL ; INCREMENT IT + LD (VDU_DISPLAYPOS),HL ; STORE NEW DISPLAY POSITION + LD DE,(VDU_DISPLAY_START) ; GET DISPLAY START + ADD HL,DE ; ADD IT TO DISPLAY POSITION + LD A,14 ; UPDATE CURSOR POSITION + CALL VDU_HL2WREG_A ; SEND IT + + ; RETURN WITH SUCCESS + XOR A + RET + +VDU_VDAFIL: + LD A, 31 ; PREP VDU FOR DATA R/W + OUT (SY6545S),A +VDU_VDAFIL1: + LD A,H ; CHECK NUMBER OF FILL CHARS LEFT + OR L + JR Z,VDU_VDAFIL2 ; ALL DONE, GO TO COMPLETION + CALL VDU_WAITRDY ; WAIT FOR VDU TO BE READY + LD A,E + OUT (WRITR), A ; OUTPUT CHAR TO VDU + DEC HL ; DECREMENT COUNT + JR VDU_VDAFIL1 ; LOOP AS NEEDED +VDU_VDAFIL2: + CALL GOTO_XY ; YES, MOVE CURSOR BACK TO ORIGINAL POSITION + XOR A ; RESULT = 0 + RET + +VDU_VDASCR: + ; FIX: IMPLEMENT REVERSE SCROLLING!!! + LD A,E + OR A + RET Z + PUSH DE + CALL DO_SCROLL + POP DE + DEC E + JR VDU_VDASCR +; +VDU_WAITRDY: + IN A,(SY6545S) ; READ STATUS + OR A ; SET FLAGS + RET M ; IF BIT 7 SET, THEN READY! + JR VDU_WAITRDY ; KEEP CHECKING +;__________________________________________________________________________________________________ +; IMBED COMMON PARALLEL PORT KEYBOARD DRIVER +;__________________________________________________________________________________________________ +; +#INCLUDE "ppk.asm" ; ;__________________________________________________________________________________________________ ; INITIALIZATION ;__________________________________________________________________________________________________ INITVDU: CALL VDUINIT ; INIT VDU - CALL KB_INITIALIZE ; INIT KB +; CALL KB_INITIALIZE ; INIT KB ; CALL PR_INITIALIZE ; INIT PR ; CALL DSPMATRIX ; DISPLAY INIT MATRIX SCREEN ; CALL WAIT_KBHIT ; WAIT FOR A KEYSTROKE - LD A,0 ; EMPTY KB QUEUE - LD (KB_QUEUE_PTR),A ; +; LD A,0 ; EMPTY KB QUEUE +; LD (KB_QUEUE_PTR),A ; CALL PERF_ERASE_EOS ; CLEAR SCREEN CALL PERF_CURSOR_HOME ; CURSOR HOME @@ -446,12 +572,12 @@ PERF_ERASE_EOS_LOOP: ; PERFORM TERMINAL IDENTIFY FUNCTION ;__________________________________________________________________________________________________ PERF_IDENTIFY: - LD A,ESC_KEY ; - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'/' ; - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'K' ; - CALL KB_ENQUEUE ; STORE ON KB QUEUE +; LD A,ESC_KEY ; +; CALL KB_ENQUEUE ; STORE ON KB QUEUE +; LD A,'/' ; +; CALL KB_ENQUEUE ; STORE ON KB QUEUE +; LD A,'K' ; +; CALL KB_ENQUEUE ; STORE ON KB QUEUE CALL SET_STATE_NORMAL ; SET NORMAL STATE RET @@ -590,66 +716,6 @@ REVERSE_SCROLL: POP HL ; RESTORE HL POP AF ; RESTORE AF RET ; - - - -;__IS_KBHIT________________________________________________________________________________________ -; -; WAS A KEY PRESSED? -;__________________________________________________________________________________________________ -IS_KBHIT: - CALL KB_PROCESS ; CALL KEYBOARD ROUTINE - LD A,(KB_QUEUE_PTR) ; ASK IF KEYBOARD HAS KEY WAITING - OR A - JP Z,CIO_IDLE - LD A,$FF ; SIGNAL DATA PENDING - RET - - -;__WAIT_KBHIT______________________________________________________________________________________ -; -; WAIT FOR A KEY PRESS -;__________________________________________________________________________________________________ -WAIT_KBHIT: - CALL IS_KBHIT - JR Z,WAIT_KBHIT - RET - - -;__GET_KEY_________________________________________________________________________________________ -; -; GET KEY PRESS VALUE -;__________________________________________________________________________________________________ -GET_KEY: - CALL WAIT_KBHIT ; WAIT FOR A KEY - LD A,(KB_QUEUE_PTR) ; GET QUEUE POINTER - OR A ; - RET Z ; ABORT IF QUEUE EMPTY - PUSH BC ; STORE BC - LD B,A ; STORE QUEUE COUNT FOR LATER - PUSH HL ; STORE HL - LD A,(KB_QUEUE) ; GET TOP BYTE FROM QUEUE - PUSH AF ; STORE IT - LD HL,KB_QUEUE ; GET POINTER TO QUEUE -GET_KEY_LOOP: ; - INC HL ; POINT TO NEXT VALUE IN QUEUE - LD A,(HL) ; GET VALUE - DEC HL ; - LD (HL),A ; MOVE IT UP ONE - INC HL ; - DJNZ GET_KEY_LOOP ; LOOP UNTIL DONE - LD A,(KB_QUEUE_PTR) ; DECREASE QUEUE POINTER BY ONE - DEC A ; - LD (KB_QUEUE_PTR),A ; - POP AF ; RESTORE VALUE - POP HL ; RESTORE HL - POP BC ; RESTORE BC - RET - - - - - ;__VDUINIT__________________________________________________________________________________________ ; @@ -746,20 +812,20 @@ VDU_CRTSPACELOOP: ; ; HL: WORD VALUE TO WRITE ;__________________________________________________________________________________________________ VDU_HL2WREG_A: - PUSH BC ; STORE BC - PUSH AF ; STORE AF - CALL VDU_UPDATECHECK ; WAIT FOR VDU TO BE READY - POP AF ; RESTORE AF - LD C, SY6545S ; ADDRESS REGISTER - OUT (C), A ; SELECT REGISTER (A) - INC C ; NEXT WRITE IN REGISTER - OUT (C), H ; WRITE H TO SELECTED REGISTER - DEC C ; NEXT WRITE SELECT REGISTER - INC A ; INCREASE REGISTER NUMBER - OUT (C), A ; SELECT REGISTER (A+1) - INC C ; NEXT WRITE IN REGISTER - OUT (C), L ; WRITE L TO SELECTED REGISTER - POP BC ; RESTORE BC + PUSH BC ; STORE BC +; PUSH AF ; STORE AF +; CALL VDU_UPDATECHECK ; WAIT FOR VDU TO BE READY +; POP AF ; RESTORE AF + LD C, SY6545S ; ADDRESS REGISTER + OUT (C), A ; SELECT REGISTER (A) + INC C ; NEXT WRITE IN REGISTER + OUT (C), H ; WRITE H TO SELECTED REGISTER + DEC C ; NEXT WRITE SELECT REGISTER + INC A ; INCREASE REGISTER NUMBER + OUT (C), A ; SELECT REGISTER (A+1) + INC C ; NEXT WRITE IN REGISTER + OUT (C), L ; WRITE L TO SELECTED REGISTER + POP BC ; RESTORE BC RET ;__VDU_UPDATECHECK_________________________________________________________________________________ @@ -767,9 +833,9 @@ VDU_HL2WREG_A: ; WAIT FOR VDU TO BE READY ;__________________________________________________________________________________________________ VDU_UPDATECHECK: - IN A,(SY6545S) ; READ ADDRESS/STATUS REGISTER + IN A,(SY6545S) ; READ ADDRESS/STATUS REGISTER BIT 7,A ; IF BIT 7 = 1 THAN AN UPDATE STROBE HAS OCCURED - RET NZ ; + RET NZ JR VDU_UPDATECHECK ; WAIT FOR READY VDU_INIT6845: @@ -784,7 +850,7 @@ VDU_INIT6845: .DB 01EH ; R4 VERTICAL TOTAL (TOTAL CHARS IN A FRAME -1) .DB 002H ; R5 VERTICAL TOTAL ADJUST ( .DB 018H ; R6 VERTICAL DISPLAYED (24 ROWS) - .DB 01CH ; R7 VERTICAL SYNC + .DB 01AH ; R7 VERTICAL SYNC .DB 078H ; R8 MODE B7=0 TRANSPARENT UPDATE DURING BLANKING ; B6=1 PIN 34 IS UPDATE STROBE ; B5=1 DELAY CURSOR 1 CHARACTER @@ -1000,529 +1066,6 @@ VDU_PUTCHAR1: ; ; RET -;__KB_INITIALIZE___________________________________________________________________________________ -; -; INITIALISE - CLEAR SOME LOCATIONS AND SEND A RESET TO THE KEYBOARD -;__________________________________________________________________________________________________ -KB_INITIALIZE: - CALL KB_SETPORTC ; SETS PORT C SO CAN INPUT AND OUTPUT - CALL KB_RESET ; RESET TO THE KEYBOARD - LD A,200 ; 1 SECOND DELAY AS KEYBOARD SENDS STUFF BACK WHEN RESET - CALL KB_DELAY ; IGNORE ANYTHING BACK AFTER A RESET - LD A,0 ; EMPTY KB QUEUE - LD (KB_QUEUE_PTR),A ; - RET - - -;__KB_RESET________________________________________________________________________________________ -; -; RESET THE KEYBOARD -;__________________________________________________________________________________________________ -KB_RESET: - CALL KB_DATAHIGH ; - CALL KB_CLOCKHIGH ; - LD B,255 ; -SF1: DJNZ SF1 ; - CALL KB_CLOCKLOW ; STEP 1 - LD B,255 ; -SF2: DJNZ SF2 ; - CALL KB_DATALOW ; STEP 2 - CALL KB_CLOCKHIGH ; STEP 3 - CALL KB_WAITCLOCKLOW ; STEP 4 - LD B,9 ; 8 DATA BITS + 1 PARITY BIT LOW -SF3: PUSH BC ; - CALL KB_DATAHIGH ; STEP 5 - CALL KB_WAITCLOCKHIGH ; STEP 6 - CALL KB_WAITCLOCKLOW ; STEP 7 - POP BC ; - DJNZ SF3 ; - CALL KB_DATAHIGH ; STEP9 - CALL KB_WAITCLOCKLOW ; STEP 10 COULD READ THE ACK BIT HERE IF WANT TO - CALL KB_WAITCLOCKHIGH ; STEP 11 - LD B,255 ; -SF4: DJNZ SF4 ; FINISH UP DELAY - RET - -;__KB_SETPORTC_____________________________________________________________________________________ -; -; SETUP PORT C OF 8255 FOR KEYBOARD -;__________________________________________________________________________________________________ -KB_SETPORTC: - LD A,10000010B ; A=OUT B=IN, C HIGH=OUT, CLOW=OUT - OUT (VPPICONT),A ; PPI CONTROL PORT - LD A,00000000B ; PORT A TO ZERO AS NEED THIS FOR COMMS TO WORK - OUT (VPPIA),A ; PPI PORT A - CALL KB_DATAHIGH ; - CALL KB_CLOCKHIGH ; - LD A,0 ; - LD (CAPSLOCK),A ; SET CAPSLOCK OFF TO START - LD (CTRL),A ; CONTROL OFF - LD (NUMLOCK),A ; NUMLOCK OFF - RET -;_________________________________________________________________________________________________ -; -; PORT C BIT ROUTINES -;__________________________________________________________________________________________________ -KB_PORTCBIT0HIGH: ; - LD A,01110001B ; SEE THE 8255 DATA SHEET - JP KB_SETBITS ; -KB_PORTCBIT1HIGH: ; - LD A,01110011B ; SEE THE 8255 DATA SHEET - JP KB_SETBITS ; -KB_PORTCBIT2HIGH: ; - LD A,01110101B ; SEE THE 8255 DATA SHEET - JP KB_SETBITS ; -KB_PORTCBIT3HIGH: ; - LD A,01110111B ; SEE THE 8255 DATA SHEET - JP KB_SETBITS ; -KB_PORTCBIT0LOW: ; - LD A,01110000B ; SEE THE 8255 DATA SHEET - JP KB_SETBITS ; -KB_PORTCBIT1LOW: ; - LD A,01110010B ; SEE THE 8255 DATA SHEET - JP KB_SETBITS ; -KB_PORTCBIT2LOW: ; - LD A,01110100B ; SEE THE 8255 DATA SHEET - JP KB_SETBITS ; -KB_PORTCBIT3LOW: ; - LD A,01110110B ; SEE THE 8255 DATA SHEET - JP KB_SETBITS ; -KB_DATAHIGH: -KB_PORTCBIT4HIGH: ; - LD A,01111001B ; SEE THE 8255 DATA SHEET - JP KB_SETBITS ; -KB_DATALOW: ; -KB_PORTCBIT4LOW: ; - LD A,01111000B ; SEE THE 8255 DATA SHEET - JP KB_SETBITS ; -KB_CLOCKHIGH: ; -KB_PORTCBIT5HIGH: ; - LD A,01111011B ; BIT 5 HIGH - JP KB_SETBITS ; -KB_CLOCKLOW: ; -PORTCBIT5LOW: ; - LD A,01111010B ; -KB_SETBITS: ; - OUT (VPPICONT),A ; - RET ; - - - -;__KB_WAITCLOCKLOW_________________________________________________________________________________ -; -; WAITCLOCKLOW SAMPLES DATA BIT 0, AND WAITS TILL -; IT GOES LOW, THEN RETURNS -; ALSO TIMES OUT AFTER 0 001 SECONDS -; USES A, CHANGES B -;__________________________________________________________________________________________________ -KB_WAITCLOCKLOW: - LD B,255 ; FOR TIMEOUT COUNTER -WL1: IN A,(VPPIB) ; GET A BYTE FROM PORT B - BIT 1,A ; TEST THE CLOCK BIT - RET Z ; EXIT IF IT WENT LOW - DJNZ WL1 ; LOOP B TIMES - RET - - -;__KB_WAITCLOCKHIGH_________________________________________________________________________________ -; -; WAITCLOCKHIGH SAMPLES DATA BIT 0, AND WAITS TILL -; IT GOES HIGH, THEN RETURNS -; ALSO TIMES OUT AFTER 0 001 SECONDS -; USES A, CHANGES B -;__________________________________________________________________________________________________ -KB_WAITCLOCKHIGH: - LD B,255 ; FOR TIMEOUT COUNTER -WH1: IN A,(VPPIB) ; GET A BYTE FROM PORT B - BIT 1,A ; TEST THE CLOCK BIT - RET NZ ; EXIT IF IT WENT HIGH - DJNZ WH1 ; LOOP B TIMES - RET - -;__KB_DELAY________________________________________________________________________________________ -; -; PASS A - DELAY IS B*0 005 SECONDS, BCDEHL ALL PRESERVED -;__________________________________________________________________________________________________ -KB_DELAY: - PUSH BC ; STORE ALL VARIABLES - PUSH DE ; - PUSH HL ; - LD B,A ; PUT THE VARIABLE DELAY IN B - LD DE,1 ; -LOOP1: LD HL,740 ; ADJUST THIS VALUE FOR YOUR CLOCK 1481=3 68MHZ, 3219=8MHZ (TEST WITH A=1000=10 SECS) -LOOP2: SBC HL,DE ; HL-1 - JR NZ,LOOP2 ; - DJNZ LOOP1 ; - POP HL ; RESTORE VARIABLES - POP DE ; - POP BC ; - RET ; - - -;__KB_PROCESS______________________________________________________________________________________ -; -; A=0 IF WANT TO KNOW IF A BYTE IS AVAILABLE, AND A=1 TO ASK FOR THE BYTE -;__________________________________________________________________________________________________ -KB_PROCESS: - CALL SKIP ; DON'T TEST EVERY ONE AS TAKES TIME - OR A ; IS IT ZERO - RET Z ; RETURN IF ZERO - CALL KB_WAITBYTE ; TEST KEYBOARD TIMES OUT AFTER A BIT - CALL KB_DECODECHAR ; RETURNS CHAR OR 0 FOR THINGS LIKE KEYUP, SOME RETURN DIRECTLY TO CP/M - RET ; RETURN TO CP/M - - -;----------------------------------------------- -; CPM CALLS THE KEYBOARD QUITE FREQUENTLY IF A KEYBOARD WAS LIKE A UART WHICH CAN BE CHECKED -; WITH ONE INSTRUCTION, THAT WOULD BE FINE BUT CHECKING A KEYBOARD INVOLVES PUTTING THE CLOCK LINE LOW -; THEN WAITING SOME TIME FOR A POSSIBLE REPLY, THEN READING IN BITS WITH TIMEOUTS AND THEN RETURNING -; THIS SLOWS DOWN A LOT OF CP/M PROCESSES, EG TRY TYPE MYPROG AND PRINTING OUT TEXT -SKIP: - LD B,0 ; - LD A,(SKIPCOUNT) ; - DEC A ; SUBTRACT 1 - LD (SKIPCOUNT),A ; STORE IT BACK - CP 0 ; - JP NZ,SK1 ; WORDSTAR IS VERY SLOW EVEN TRIED A VALUE OF 5 TO 200 HERE - LD A,200 ; ONLY ACT ON EVERY N CALLS - BIGGER=BETTER BECAUSE THIS SUB IS QUICKER THAN READBITS - LD (SKIPCOUNT),A ; RESET COUNTER - LD B,1 ; FLAG TO SAY RESET COUNTER -SK1: ; - LD A,B ; RETURN THE VALUE IN A - RET - - -;__KB_DECODECHAR____________________________________________________________________________________ -; -; DECODE CHARACTER PASS A AND PRINTS OUT THE CHAR -; ON THE LCD SCREEN -;__________________________________________________________________________________________________ -KB_DECODECHAR: - CP 0 ; IS IT ZERO - RET Z ; RETURN IF A ZERO - NO NEED TO DO ANYTHING - CP 0F0H ; IS A KEY UP (NEED TO DO SPECIAL CODE FOR SHIFT) - JP Z,DECKEYUP ; IGNORE CHAR UP - CP 0E0H ; TWO BYTE KEYPRESSES - JP Z,TWOBYTE ; - CP 058H ; CAPS LOCK SO TOGGLE - JP Z,CAPSTOG ; - CP 12H ; SHIFT (DOWN, BECAUSE UP WOULD BE TRAPPED BY 0F ABOVE) - JP Z,SHIFTDOWN ; - CP 59H ; OTHER SHIFT KEY - JP Z,SHIFTDOWN ; - CP 014H ; CONTROL KEY - JP Z,CONTROLDOWN ; - CP 05AH ; ENTER KEY - JP Z,RETURN ; - CP 066H ; BACKSPACE KEY - JP Z,BACKSPACE ; - CP 0DH ; TAB KEY - JP Z,TABKEY ; - CP 076H ; ESCAPE KEY - JP Z,ESCAPE ; - LD C,A ; - LD B,0 ; ADD BC TO HL - LD HL,NORMALKEYS ; OFFSET TO ADD - ADD HL,BC ; - JP TESTCONTROL ; IS THE CONTROL KEY DOWN? -DC1: LD A,(CAPSLOCK) ; - CP 0 ; IS IT 0, IF SO THEN DON'T ADD THE CAPS OFFSET - JR Z,DC2 ; - LD C,080H ; ADD ANOTHER 50H TO SMALLS TO GET CAPS - ADD HL,BC ; -DC2: LD A,(HL) ; - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -TESTCONTROL: - LD A,(CTRL) ; - CP 0 ; IS CONTROL BEING HELD DOWN? - JP Z,DC1 ; NO SO GO BACK TO TEST CAPS LOCK ON - LD A,(HL) ; GET THE LETTER, SHOULD BE SMALLS - SUB 96 ; A=97 SO SUBTRACT 96 A=1=^A - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; RETURN INSTEAD OF THE RET AFTER DC2 -TABKEY: ; - LD A,9 ; - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ;TAB -BACKSPACE: ; - LD A,8 ; BACKSPACE - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -ESCAPE: ; - LD A,27 ; - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -RETURN: ; - LD A,13 ; CARRIAGE RETURN - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -DECKEYUP: - CALL KB_WAITBYTE ; IGNORE KEY UP THROW AWAY THE CHARACTER UNLESS A SHIFT - CP 012H ; IS IT A SHIFT - JP Z,SHIFTUP ; - CP 59H ; OTHER SHIFT KEY - JP Z,SHIFTUP ; - CP 014H ; CONTROL UP - JP Z,CONTROLUP ; CONTROL UP - LD A,0 ; NOTHING CAPTURED SO SEND BACK A ZERO - RET -TWOBYTE:; ALREADY GOT EO SO GET THE NEXT CHARACTER - CALL KB_WAITBYTE - CP 0F0H ; SEE THE NOTES - KEYUP FOR E0 KEYS IS EO F0 NN NOT F0 EO!! - JP Z,TWOBYTEUP ; - CP 071H ; DELETE - JP Z,DELETEKEY ; - CP 05AH ; RETURN ON NUMBER PAD - JP Z,RETURNKEY ; - CP 072H ; - JP Z,DOWNARROW ; - CP 074H ; - JP Z,RIGHTARROW ; - CP 06BH ; - JP Z,LEFTARROW ; - CP 075H ; - JP Z,UPARROW ; - CP 070H ; - JP Z,INSERT ; - CP 07DH ; - JP Z,PAGEUP ; - CP 07AH ; - JP Z,PAGEDOWN ; - CP 06CH ; - JP Z,HOME ; - CP 069H ; - JP Z,END ; - LD A,0 ; RETURNS NOTHING - RET -TWOBYTEUP: ;EXPECT A BYTE AND IGNORE IT - CALL KB_WAITBYTE ; - LD A,0 ; - RET ; -HOME: ; - LD A,1BH ; ESC - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'?' ; ? - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'W' ; W - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -END: ; - LD A,1BH ; ESC - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'?' ; ? - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'Q' ; Q - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -DOWNARROW: ; - LD A,1BH ; ESC - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'B' ; B - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -RIGHTARROW: ; - LD A,1BH ; ESC - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'C' ; C - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -LEFTARROW: ; - LD A,1BH ; ESC - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'D' ; D - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -UPARROW: ; - LD A,1BH ; ESC - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'A' ; A - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -INSERT: ; - LD A,1BH ; ESC - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'?' ; ? - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'P' ; P - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -PAGEUP: ; - LD A,1BH ; ESC - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'?' ; ? - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'Y' ; Y - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -PAGEDOWN: ; - LD A,1BH ; ESC - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'?' ; ? - CALL KB_ENQUEUE ; STORE ON KB QUEUE - LD A,'S' ; S - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -CONTROLDOWN: ; SAME CODE AS SHIFTDOWN BUT DIFF LOCATION - LD A,0FFH ; - LD (CTRL),A ; CONTROL DOWN - LD A,0 ; - RET ; -CONTROLUP: ; CONTROL KEY UP SEE SHIFT FOR EXPLANATION - LD A,0 ; - LD (CTRL),A ; - LD A,0 ; - RET ; -RETURNKEY: ; - LD A,13 ; - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -DELETEKEY: ; - LD A,07FH ; DELETE KEY VALUE THAT CP/M USES - CALL KB_ENQUEUE ; STORE ON KB QUEUE - RET ; -CAPSTOG: ; - LD A,(CAPSLOCK) ; - XOR 11111111B ; SWAP ALL THE BITS - LD (CAPSLOCK),A ; - LD A,0 ; RETURNS NOTHING - RET ; -SHIFTDOWN: ; SHIFT IS SPECIAL - HOLD IT DOWN AND IT AUTOREPEATS - ; SO ONCE IT IS DOWN, TURN CAPS ON AND IGNORE ALL FURTHER SHIFTS - ; ONLY AN F0+SHIFT TURNS CAPS LOCK OFF AGAIN - LD A,0FFH ; - LD (CAPSLOCK),A ; - LD A,0 ; RETURNS NOTHING - RET ; -SHIFTUP: ; SHIFTUP TURNS OFF CAPS LOCK DEFINITELY - LD A,0 ; - LD (CAPSLOCK),A ; - LD A,0 ; RETURNS NOTHING - RET ; - -;__KB_ENQUEUE______________________________________________________________________________________ -; -; STORE A BYTE IN THE KEYBOARD QUEUE -; A: BYTE TO ENQUEUE -;__________________________________________________________________________________________________ -KB_ENQUEUE: - PUSH DE ; STORE DE - PUSH HL ; STORE HL - PUSH AF ; STORE VALUE - LD A,(KB_QUEUE_PTR); PUT QUEUE POINTER IN A - CP 15 ; IS QUEUE FULL - JP P,KB_ENQUEUE_AB ; YES, ABORT - LD HL,KB_QUEUE ; GET QUEUE POINTER - PUSH HL ; MOVE HL TO BC - POP BC ; - LD H,0 ; ZERO OUT H - LD L,A ; PLACE QUEUE POINTER IN L - ADD HL,BC ; POINT HL AT THE NEXT LOACTION TO ADD VALUE - POP AF ; RESTORE VALUE - LD (HL),A ; ENQUEUE VALUE - LD A,(KB_QUEUE_PTR); GET QUEUE POINTER - INC A ; INC IT - LD (KB_QUEUE_PTR),A ;STORE QUEUE POINTER -KB_ENQUEUE_AB: - POP HL ; RESTORE HL - POP DE ; RESTORE DE - RET - - -;__KB_WAITBYTE_____________________________________________________________________________________ -; -; WAIT FOR A BYTE - TESTS A NUMBER OF TIMES IF THERE IS A KEYBOARD INPUT, -; OVERWRITES ALL REGISTERS, RETURNS BYTE IN A -;__________________________________________________________________________________________________ -KB_WAITBYTE: - CALL KB_CLOCKHIGH ; TURN ON KEYBOARD - LD HL,500 ; NUMBER OF TIMES TO CHECK 200=SLOW TYPE - ; 10=ERROR, 25 ?ERROR 50 OK - - ; THIS DELAY HAS TO BE THERE OTHERWISE WEIRD KEYUP ERRORS -WB1: PUSH HL ; STORE COUNTER - CALL KB_READBITS ; TEST FOR A LOW ON THE CLOCK LINE - POP HL ; GET THE COUNTER BACK - CP 0 ; TEST FOR A ZERO BACK FROM READBITS - JR NZ,WB2 ; IF NOT A ZERO THEN MUST HAVE A BYTE IE A KEYBOARD PRESS - LD DE,1 ; LOAD WITH 1 - SBC HL,DE ; SUBTRACT 1 - JR NZ,WB1 ; LOOP WAITING FOR A RESPONSE -WB2: PUSH AF ; STORE THE VALUE IN A - CALL KB_CLOCKLOW ; TURN OFF KEYBOARD - POP AF ; GET BACK BYTE AS CLOCKLOW ERASED IT - RET - -;__KB_READBITS_____________________________________________________________________________________ -; -; READBITS READS 11 BITS IN FROM THE KEYBOARD -; FIRST BIT IS A START BIT THEN 8 BITS FOR THE BYTE -; THEN A PARITY BIT AND A STOP BIT -; RETURNS AFTER ONE MACHINE CYCLE IF NOT LOW -; USES A, B,D, E -; RETURNS A=0 IF NO DATA, A= SCANCODE (OR PART THEREOF) -;__________________________________________________________________________________________________ -KB_READBITS: - IN A,(VPPIB) - BIT 1,A ; TEST THE CLOCK BIT - JR Z,R1 ; IF LOW THEN START THE CAPTURE - LD A,0 ; RETURNS A=0 IF NOTHING - RET ; -R1: CALL KB_WAITCLOCKHIGH; IF GETS TO HERE THEN MUST BE LOW SO WAIT TILL HIGH - LD B,8 ; SAMPLE 8 TIMES - LD E,0 ; START WITH E=0 -R2: LD D,B ; STORE BECAUSE WAITCLOCKHIGH DESTROYS - CALL KB_WAITCLOCKLOW ; WAIT TILL CLOCK GOES LOW - IN A,(VPPIB) ; SAMPLE THE DATA LINE - RRA ; MOVE THE DATA BIT INTO THE CARRY REGISTER - LD A,E ; GET THE BYTE WE ARE BUILDING IN E - RRA ; MOVE THE CARRY BIT INTO BIT 7 AND SHIFT RIGHT - LD E,A ; STORE IT BACK AFTER 8 CYCLES 1ST BIT READ WILL BE IN B0 - CALL KB_WAITCLOCKHIGH; WAIT TILL GOES HIGH - LD B,D ; RESTORE FOR LOOP - DJNZ R2 ; DO THIS 8 TIMES - CALL KB_WAITCLOCKLOW ; GET THE PARITY BIT - CALL KB_WAITCLOCKHIGH; - CALL KB_WAITCLOCKLOW ; GET THE STOP BIT - CALL KB_WAITCLOCKHIGH; - LD A,E ; RETURNS WITH ANSWER IN A - RET - -NORMALKEYS: - ; THE TI CHARACTER CODES, OFFSET FROM LABEL BY KEYBOARD SCAN CODE - .DB $00, $00, $00, $00, $00, $00, $00, $00 - .DB $00, $00, $00, $00, $00, $09, "`", $00 ; $09=TAB - .DB $00, $00, $00, $00, $00, "q", "1", $00 - .DB $00, $00, "z", "s", "a", "w", "2", $00 - .DB $00, "c", "x", "d", "e", "4", "3", $00 - .DB $00, " ", "v", "f", "t", "r", "5", $00 - .DB $00, "n", "b", "h", "g", "y", "6", $00 - .DB $00, $00, "m", "j", "u", "7", "8", $00 - .DB $00, ",", "k", "i", "o", "0", "9", $00 - .DB $00, ".", "/", "l", ";", "p", "-", $00 - .DB $00, $00, $27, $00, "[", "=", $00, $00 ; $27=APOSTROPHE - .DB $00, $00, $00, "]", $00, $5C, $00, $00 ; $5C=BACKSLASH - .DB $00, $00, $00, $00, $00, $00, $00, $00 - .DB $00, "1", $00, "4", "7", $00, $00, $00 - .DB "0", ".", "2", "5", "6", "8", $00, $00 - .DB $00, "+", "3", "-", "*", "9", $00, $00 - -SHIFTKEYS: - .DB $00, $00, $00, $00, $00, $00, $00, $00 - .DB $00, $00, $00, $00, $00, 009, "~", $00 ; $09=TAB - .DB $00, $00, $00, $00, $00, "Q", "!", $00 - .DB $00, $00, "Z", "S", "A", "W", "@", $00 - .DB $00, "C", "X", "D", "E", "$", "#", $00 - .DB $00, " ", "V", "F", "T", "R", "%", $00 - .DB $00, "N", "B", "H", "G", "Y", "^", $00 - .DB $00, $00, "M", "J", "U", "&", "*", $00 - .DB $00, "<", "K", "I", "O", ")", "(", $00 - .DB $00, ">", "?", "L", ":", "P", "_", $00 - .DB $00, $00, 034, $00, "{", "+", $00, $00 ; $22=DBLQUOTE - .DB $00, $00, $00, "}", $00, "|", $00, $00 - .DB $00, $00, $00, $00, $00, $00, $00, $00 - .DB $00, "1", $00, "4", "7", $00, $00, $00 - .DB "0", ".", "2", "5", "6", "8", $00, $00 - .DB $00, "+", "3", "-", "*", "9", $00, $00 ; ;================================================================================================== ; VDU DRIVER - DATA @@ -1537,9 +1080,3 @@ TERMSTATE .DB 0 ; TERMINAL STATE ; 1 = ESC RCVD VDU_DISPLAYPOS .DW 0 ; CURRENT DISPLAY POSITION VDU_DISPLAY_START .DW 0 ; CURRENT DISPLAY POSITION -CAPSLOCK .DB 0 ; location for caps lock, either 00000000 or 11111111 -CTRL .DB 0 ; location for ctrl on or off 00000000 or 11111111 -NUMLOCK .DB 0 ; location for num lock -SKIPCOUNT .DB 0 ; only check some calls, speeds up a lot of cp/m -KB_QUEUE .FILL 16,0 ; 16 BYTE KB QUEUE -KB_QUEUE_PTR .DB 0 ; POINTER TO QUEUE diff --git a/Source/ver.inc b/Source/ver.inc index 5ab58442..b2d57a13 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -1,6 +1,6 @@ #DEFINE RMJ 2 #DEFINE RMN 2 #DEFINE RUP 0 -#DEFINE RTP 1 -#DEFINE BIOSVER "2.2 B1" +#DEFINE RTP 2 +#DEFINE BIOSVER "2.2 B2" #DEFINE REVISION 1741