From f323246d4f3323a96496dec1ab33c0d42765c44b Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 24 Aug 2019 07:21:40 +0800 Subject: [PATCH 1/2] Preliminary DS1210 batter low code Battery state currently not being saved and recalled correctly --- Source/HBIOS/dsrtc.asm | 23 +++++++++++++++--- Source/HBIOS/hbios.asm | 55 +++++++++++++++++++++++------------------- 2 files changed, 49 insertions(+), 29 deletions(-) diff --git a/Source/HBIOS/dsrtc.asm b/Source/HBIOS/dsrtc.asm index 7a882ebc..00fa4d89 100644 --- a/Source/HBIOS/dsrtc.asm +++ b/Source/HBIOS/dsrtc.asm @@ -122,6 +122,9 @@ DSRTC_IDLE .EQU %00101000 ; QUIESCENT STATE ; DSRTC_BUFSIZ .EQU 7 ; 7 BYTE BUFFER (YYMMDDHHMMSSWW) ; +;DSBATCOND DB 0 ; BATTERY STATE DETECTED AND SAVED AT BOOT +; +; ; RTC DEVICE INITIALIZATION ENTRY ; DSRTC_INIT: @@ -181,16 +184,28 @@ DSRTC_INIT1: CALL DSRTC_END ; FINISH CMD #ENDIF - PRTS(" CHARGE=$") - CALL DSRTC_TSTCHG - JR NZ,NOCHG1 + PRTS(" CHARGE=$") ; DISPLAY + CALL DSRTC_TSTCHG ; CHARGING + JR NZ,NOCHG1 ; STATUS PRTS("ON$") - JR NOCHG2 + JR NOCHG2 NOCHG1: PRTS("OFF$") NOCHG2: + LD A,(DSBATCOND) ; DISPLAY + CP 0E5H + CALL Z,EE55 + + OR A ; BATTERY + JR NZ,DSBATOK ; CONDITION + PRTS(" BATTERY LOW$") + +DSBATOK: XOR A ; SIGNAL SUCCESS RET +EE55: + PRTS(" DEBUG $") + RET ; ; RTC DEVICE FUNCTION DISPATCH ENTRY ; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 9ee0452e..ffd4d3e1 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -431,7 +431,7 @@ HBX_BC_ITER: ; CALL A ROUTINE IN ANOTHER BANK. ; CALLER MUST ENSURE STACK IS ALREADY IN HIGH MEMORY AND HAS ADEQUATE SPACE. ; IF IM1 INTERRUPTS ARE POSSIBLE, CALLER MUST EITHER DISABLE THEM PRIOR TO -; BNKCALL OR MAKE SURE THAT PAGE ZERO IN TARGTET BANK IS PREPARED FOR THEM. +; BNKCALL OR MAKE SURE THAT PAGE ZERO IN TARGET BANK IS PREPARED FOR THEM. ; ON INPUT A=TARGET BANK, HL=TARGET ADDRESS ; HBX_BNKCALL: @@ -840,33 +840,35 @@ HB_START: ; DIAG(%00000011) ; -; INSTALL PROXY IN UPPER MEMORY +; CHECK BATTERY BACKUP STATUS BEFORE WE COPY PROXY TO UPPER MEMORY ; +; IF A DS1210 POWER CONTROLLER IS INSTALLED AND BATTERY BACKUP IS NOT INSTALLED +; OR IS LESS THAN 2V THEN THE DS1210 WILL BLOCK THE SECOND RAM ACCESS. +; FAILURE TO COMPLETE TWO RAM ACCESSES BEFORE INSTALLING PROXY WILL RESULT +; IN THE ROM ID BYTES NOT BEING COPIED CORRECTLY AND CP/M APPLICATIONS +; WILL NOT START CORRECTLY WHEN THEY CHECK THE ROM ID VERSION BYTES. -;X1 .EQU $8000 -;X2 .EQU X1 + 2 -;X3 .EQU X2 + 2 -;X4 .EQU X3 + 2 - -; LD HL,(HBX_IMG) -; LD (X1),HL - -; LD HL,(HBX_IMG) -; LD (X2),HL - - LD DE,HBX_LOC ; IF A DS1210 POWER CONTROLLER IS INSTALLED AND BATTERY BACKUP IS NOT - LD A,(DE) ; INSTALLED OR IS LESS THAN 2V THEN THE DS1210 WILL BLOCK THE SECOND RAM - LD A,(DE) ; ACCESS. PERFORM TWO DUMMY READS TO RAM TO ENSURE WE BYPASS THIS FEATURE - LD HL,HBX_IMG ; SO THAT THE ROM ID BYTES ARE COPIED CORRECTLY AND CP/M APPLICATIONS - LD BC,HBX_SIZ ; START CORRECTLY WHEN THEY CHECK THE ROM ID VERSION BYTES. + LD DE,HBX_LOC ; RAM LOCATION FOR TEST + LD A,(DE) ; RAM ACCESS 1 + LD B,A ; SAVE FOR COMPARISON + CPL ; AND RESTORATION + LD (DE),A ; RAM ACCESS 2 + LD A,(DE) ; RAM ACCESS 3 + SUB B ; A = 0 IF LOW BATTERY + LD A,0E5H ; DEBUG + PUSH AF ; SAVE FOR DSRTC DRIVER + ; WE SAVE THIS PROPERLY + ; WHEN WE ARE EXECUTING + ; IN RAM. + LD A,B + LD (DE),A ; RESTORE TEST LOCATION +; +; INSTALL PROXY IN UPPER MEMORY +; +; LD DE,HBX_LOC + LD HL,HBX_IMG + LD BC,HBX_SIZ LDIR - -; LD HL,(HBX_IMG) -; LD (X3),HL - -; LD HL,(HBX_LOC) -; LD (X4),HL - ; ; IF ALREADY EXECUTING IN RAM, BYPASS RAM BANK INSTALLATION ; @@ -900,6 +902,8 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK ; DIAG(%00000111) ; + POP AF ; RECALL BATTERY STATE AND SAVE + LD (DSBATCOND),A ; IN RAM ACCESSIBLE BY DSRTC DRIVER LD SP,HBX_LOC ; RESET STACK SINCE WE DO NOT RETURN LD A,TRUE ; ACCUM := TRUE LD (HB_RAMFLAG),A ; SET RAMFLAG @@ -3766,6 +3770,7 @@ HB_TICKS .FILL 4,0 ; 32 BIT TICK COUNTER HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG ; RTCVAL .DB 0 ; SHADOW VALUE FOR RTC LATCH PORT +DSBATCOND .DB 0 ; BATTERY CONDITION FLAG. 0 = LOW ; STR_BANNER .DB "RetroBrew HBIOS v", BIOSVER, ", ", TIMESTAMP, "$" STR_PLATFORM .DB PLATFORM_NAME, "$" From bff6e209462cba12b4e609c6078f0281c5b09cf9 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 24 Aug 2019 13:41:02 +0800 Subject: [PATCH 2/2] DS1210 Battery Low message on boot Remove debug code. Resolve issue with battery status being lost on stack. Battery status variable moved to DSRTC driver. Fix build failures for DSRTCENABLE=FALSE (spk.asm requires dsrtc) --- Source/HBIOS/dsrtc.asm | 10 +--------- Source/HBIOS/hbios.asm | 18 +++++++++++------- Source/HBIOS/pio.asm | 2 +- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/Source/HBIOS/dsrtc.asm b/Source/HBIOS/dsrtc.asm index 00fa4d89..30d66ff8 100644 --- a/Source/HBIOS/dsrtc.asm +++ b/Source/HBIOS/dsrtc.asm @@ -121,9 +121,7 @@ DSRTC_IDLE .EQU %00101000 ; QUIESCENT STATE #ENDIF ; DSRTC_BUFSIZ .EQU 7 ; 7 BYTE BUFFER (YYMMDDHHMMSSWW) -; -;DSBATCOND DB 0 ; BATTERY STATE DETECTED AND SAVED AT BOOT -; +DSBATCOND .DB 0 ; BATTERY STATE DETECTED AND SAVED AT BOOT 0=LOW ; ; RTC DEVICE INITIALIZATION ENTRY ; @@ -193,9 +191,6 @@ NOCHG1: PRTS("OFF$") NOCHG2: LD A,(DSBATCOND) ; DISPLAY - CP 0E5H - CALL Z,EE55 - OR A ; BATTERY JR NZ,DSBATOK ; CONDITION PRTS(" BATTERY LOW$") @@ -203,9 +198,6 @@ NOCHG2: DSBATOK: XOR A ; SIGNAL SUCCESS RET -EE55: - PRTS(" DEBUG $") - RET ; ; RTC DEVICE FUNCTION DISPATCH ENTRY ; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index ffd4d3e1..884ae3bc 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -847,7 +847,7 @@ HB_START: ; FAILURE TO COMPLETE TWO RAM ACCESSES BEFORE INSTALLING PROXY WILL RESULT ; IN THE ROM ID BYTES NOT BEING COPIED CORRECTLY AND CP/M APPLICATIONS ; WILL NOT START CORRECTLY WHEN THEY CHECK THE ROM ID VERSION BYTES. - +; LD DE,HBX_LOC ; RAM LOCATION FOR TEST LD A,(DE) ; RAM ACCESS 1 LD B,A ; SAVE FOR COMPARISON @@ -855,7 +855,6 @@ HB_START: LD (DE),A ; RAM ACCESS 2 LD A,(DE) ; RAM ACCESS 3 SUB B ; A = 0 IF LOW BATTERY - LD A,0E5H ; DEBUG PUSH AF ; SAVE FOR DSRTC DRIVER ; WE SAVE THIS PROPERLY ; WHEN WE ARE EXECUTING @@ -865,7 +864,7 @@ HB_START: ; ; INSTALL PROXY IN UPPER MEMORY ; -; LD DE,HBX_LOC +; LD DE,HBX_LOC ; AS PER ABOVE LD HL,HBX_IMG LD BC,HBX_SIZ LDIR @@ -874,7 +873,7 @@ HB_START: ; LD A,(HB_RAMFLAG) OR A - JR NZ,HB_START1 + JR NZ,HB_START2 ; ; INSTALL HBIOS IN RAM BANK ; @@ -902,8 +901,14 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK ; DIAG(%00000111) ; + POP AF ; CLEAR THE + POP AF ; LEFTOVER STACK + POP AF ; FROM HBX_BANKCALL +HB_START2: +#IF DSRTCENABLE POP AF ; RECALL BATTERY STATE AND SAVE LD (DSBATCOND),A ; IN RAM ACCESSIBLE BY DSRTC DRIVER +#ENDIF LD SP,HBX_LOC ; RESET STACK SINCE WE DO NOT RETURN LD A,TRUE ; ACCUM := TRUE LD (HB_RAMFLAG),A ; SET RAMFLAG @@ -1571,7 +1576,7 @@ PC_INITTBLLEN .EQU (($ - PC_INITTBL) / 2) ;================================================================================================== ; HB_INITTBL: -#IF (SPKENABLE) +#IF (SPKENABLE & DSRTCENABLE) .DW SPK_INIT ; AUDIBLE INDICATOR OF BOOT START #ENDIF #IF (AYENABLE) @@ -2803,7 +2808,7 @@ SIZ_TERM .EQU $ - ORG_TERM .ECHO " bytes.\n" #ENDIF ; -#IF (SPKENABLE) +#IF (SPKENABLE & DSRTCENABLE) ORG_SPK .EQU $ #INCLUDE "spk.asm" SIZ_SPK .EQU $ - ORG_SPK @@ -3770,7 +3775,6 @@ HB_TICKS .FILL 4,0 ; 32 BIT TICK COUNTER HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG ; RTCVAL .DB 0 ; SHADOW VALUE FOR RTC LATCH PORT -DSBATCOND .DB 0 ; BATTERY CONDITION FLAG. 0 = LOW ; STR_BANNER .DB "RetroBrew HBIOS v", BIOSVER, ", ", TIMESTAMP, "$" STR_PLATFORM .DB PLATFORM_NAME, "$" diff --git a/Source/HBIOS/pio.asm b/Source/HBIOS/pio.asm index c5a2314b..9baf014d 100644 --- a/Source/HBIOS/pio.asm +++ b/Source/HBIOS/pio.asm @@ -370,7 +370,7 @@ SETPIOR:LD HL,INT_ALLOC ; INCREASE THE COUNT ; SETUP PIO INTERRUPT VECTOR IN IVT LD HL,HBX_IV09+1 - CALL SPK_BEEP +; CALL SPK_BEEP ; SETPIO6:RET