diff --git a/Source/HBIOS/ctc.asm b/Source/HBIOS/ctc.asm index 701ea245..b5701b40 100644 --- a/Source/HBIOS/ctc.asm +++ b/Source/HBIOS/ctc.asm @@ -147,18 +147,16 @@ CTCTIVT .EQU INT_CTC0A + CTCTIMCH ;================================================================================================== ; CTC_PREINIT: + ; BLINDLY RESET THE CTC ASSUMING IT IS THERE + LD A,CTC_DEFCFG + OUT (CTCBASE),A + OUT (CTCBASE+1),A + OUT (CTCBASE+2),A + OUT (CTCBASE+3),A +; CALL CTC_DETECT ; DO WE HAVE ONE? LD (CTC_EXIST),A ; SAVE IT RET NZ ; ABORT IF NONE -; - ; RESET ALL CTC CHANNELS - LD B,4 ; 4 CHANNELS - LD C,CTCBASE ; FIRST CHANNEL PORT -CTC_PREINIT1: - LD A,CTC_DEFCFG ; CTC DEFAULT CONFIG - OUT (C),A ; CTC COMMAND - INC C ; NEXT CHANNEL PORT - DJNZ CTC_PREINIT1 ; #IF (CTCTIMER & (INTMODE == 2)) ; SETUP TIMER INTERRUPT IVT SLOT @@ -258,32 +256,33 @@ CTC_PRTCFG1: RET ; ;================================================================================================== -; DETECT CTC BY CHECKING REGISTER CAN BE WRITTEN AND READ, AND THEN BY SETTING UP ONE CHANNEL IN -; TIMER MODE AND CHECKING IT IS COUNTING DOWN. +; DETECT CTC BY PROGRAMMING THE FIRST CHANNEL TO COUNT IN TIMER +; MODE (BASED ON CPU CLOCK). THEN CHECK IF COUNTER IS ACTUALLY +; RUNNING. ;================================================================================================== ; CTC_DETECT: - LD A,CTC_TIM256CFG - OUT (CTCBASE),A - XOR A - OUT (CTCBASE),A - ; CTC SHOULD NOW BE RUNNING WITH TIME CONSTANT 0 - LD A,CTC_TIM256CFG ; RESET - OUT (CTCBASE),A - IN A,(CTCBASE) ; SHOULD READ 0 NOW - CP 0 - JR NZ,CTC_NO + LD A,CTC_TIM16CFG ; RESET & SETUP TIMER MODE + OUT (CTCBASE),A ; SEND TO CTC LD A,$FF ; TIME CONSTANT $FF - OUT (CTCBASE),A - IN A,(CTCBASE) ; SHOULD NOT BE 0 NOW - CP 0 - JR Z,CTC_NO - XOR A - RET + OUT (CTCBASE),A ; SEND CONSTANT & START CTR + NOP ; BRIEF DELAY + IN A,(CTCBASE) ; READ COUNTER + LD C,A ; SAVE VALUE + CALL DLY8 ; WAIT A BIT + IN A,(CTCBASE) ; READ COUNTER AGAIN + PUSH AF ; SAVE RESULT + LD A,CTC_DEFCFG ; DEFAULT CHANNEL CFG + OUT (CTCBASE),A ; RESTORE TO DEFAULTS + POP AF ; GET RESULT BACK + CP C ; COMPARE TO PREVIOUS + JR Z,CTC_NO ; IF SAME, FAIL + XOR A ; SIGNAL SUCCESS + RET ; AND DONE CTC_NO: - OR $FF - RET -; + OR $FF ; SIGNAL FAILURE + RET ; AND DONE ; +; CTC DRIVER DATA STORAGE ; -CTC_EXIST .DB $FF +CTC_EXIST .DB $FF ; SET TO ZERO IF EXISTS diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index 69736962..a2a37042 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -878,6 +878,8 @@ GETLNLOP: JR Z,GETLNDONE ; YES, EXIT CP CHR_BS ; IS ? JR Z,GETLNBS ; IF SO, HANDLE IT + CP CHR_DEL ; IS ? + JR Z,GETLNBS ; IF SO, HANDLE AS CP ' ' ; UNEXPECTED CONTROL CHAR? JR C,GETLNLOP ; IF SO, IGNORE IT AND GET NEXT LD B,A ; SAVE CHAR IN B FOR NOW @@ -1854,6 +1856,7 @@ CHR_CR .EQU 0DH CHR_LF .EQU 0AH CHR_BS .EQU 08H CHR_ESC .EQU 1BH +CHR_DEL .EQU 7FH ; ;__________________________________________________________________________________________________ ; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 4210ffd9..d3fd2e56 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1898,8 +1898,8 @@ HB_CPU1: ; ; INIT OSCILLATOR SPEED FROM CONFIG ; - LD HL,CPUOSC / 1000 - LD (HB_CPUOSC),HL + LD HL,CPUOSC / 1000 ; OSC SPD IN KHZ + LD (HB_CPUOSC),HL ; INIT HB_CPUOSC DEFAULT ; ; ATTEMPT DYNAMIC CPU SPEED DERIVATION ; NOTE THAT FOR PLATFORMS WITH SOFTWARE SELECTABLE CPU SPEED, @@ -1907,8 +1907,8 @@ HB_CPU1: ; POSSIBLE SETTING. THE FINAL CPU SPEED WILL BE ADJUSTED ; LATER. ; - CALL HB_CPUSPD ; CPU SPEED DETECTION - JR NZ,HB_CPUSPD2 ; SKIP IF FAILED + CALL HB_CPUSPD ; DYNAMIC CPU SPEED DETECTION + JR NZ,HB_CPUSPD2 ; SKIP AHEAD IF FAILED ; ; RECORD THE UPDATED CPU OSCILLATOR SPEED ; @@ -1917,8 +1917,9 @@ HB_CPU1: ; SO RECORD DOUBLE THE MEASURED VALUE SLA L RL H - LD (HB_CPUOSC),HL #ENDIF +; + LD (HB_CPUOSC),HL ; RECORD MEASURED SPEED ; HB_CPUSPD2: ; diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 364382de..22e80695 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -41,6 +41,7 @@ bel .equ 7 ; ASCII bell bs .equ 8 ; ASCII backspace lf .equ 10 ; ASCII linefeed cr .equ 13 ; ASCII carriage return +del .equ 127 ; ASCII del/rubout ; cmdbuf .equ $80 ; cmd buf is in second half of page zero cmdmax .equ 60 ; max cmd len (arbitrary), must be < bufsiz @@ -1281,6 +1282,8 @@ rdln_nxt: call cin ; get a character cp bs ; backspace? jr z,rdln_bs ; handle it if so + cp del ; del/rubout? + jr z,rdln_bs ; handle as backspace cp cr ; return? jr z,rdln_cr ; handle it if so ; diff --git a/Source/ver.inc b/Source/ver.inc index 83f18b07..33d513d5 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 2 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.2.1-dev.1" +#DEFINE BIOSVER "3.2.1-dev.2" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index af7d8020..3795ea66 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 2 rup equ 1 rtp equ 0 biosver macro - db "3.2.1-dev.1" + db "3.2.1-dev.2" endm