Skip to content

Commit 214182b

Browse files
committed
Fix RTC Initialization
When using the Z2 memory manager, if the HBIOS exceeds 16K, RTCDEFVAL will not be accessible prior to programming the Z2 memory bank registers. In this corner case the RTC latch could be mis-programmed. This commit introduces a workaround.
1 parent 08942fb commit 214182b

File tree

3 files changed

+21
-10
lines changed

3 files changed

+21
-10
lines changed

Source/HBIOS/hbios.asm

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,12 +1117,17 @@ BOOTWAIT:
11171117
JR NZ,BOOTWAIT
11181118
#ENDIF
11191119
;
1120-
;#IF ((PLATFORM == PLT_MBC) | (PLATFORM == PLT_SBC))
1121-
; INITIALIZE RTC LATCH BYTE
1120+
; EARLY RTC LATCH BYTE INITIALIZATION
11221121
; FOR SOME PLATFORMS THIS CONTROLS HI/LO SPEED CIRCUIT
1123-
LD A,(RTCDEFVAL) ; GET DEFAULT VALUE
1122+
; NOTE: WE WANT TO USE (RTCDEFVAL) HERE, BUT THE Z2 MEMORY
1123+
; MANAGER STARTS UP WITH THE FIRST 16K OF ROM MAPPED TO ALL
1124+
; 4 16K BANKS OF CPU SPACE. SO, IF RTCDEVFAL IS LOCATED AFTER
1125+
; PAST 16K, WE DON'T HAVE ACCESS TO IT. FOR NOW, WE JUST USE
1126+
; RTCDEF WHICH IS SUBOPTIMAL, BUT PROBABLY DOES NOT CAUSE ANY
1127+
; PROBLEMS.
1128+
;LD A,(RTCDEFVAL) ; GET DEFAULT VALUE
1129+
LD A,RTCDEF ; DEFAULT VALUE
11241130
OUT (RTCIO),A ; SET IT
1125-
;#ENDIF
11261131
;
11271132
#IF (PLATFORM == PLT_N8)
11281133
LD A,N8_DEFACR ; ENSURE N8 ACR
@@ -1144,7 +1149,9 @@ BOOTWAIT:
11441149
XOR A ; LED IS INVERTED, TURN IT ON
11451150
#ENDIF
11461151
#IF (LEDMODE == LEDMODE_RTC)
1147-
LD A,(RTCDEFVAL) ; DEFAULT LATCH VALUE
1152+
; CAN'T USE (RTCDEFVAL) YET, SEE COMMENTS ABOVE
1153+
;LD A,(RTCDEFVAL) ; DEFAULT LATCH VALUE
1154+
LD A,RTCDEF ; DEFAULT LATCH VALUE
11481155
OR %00000001 ; LED 0 ON
11491156
#ENDIF
11501157
OUT (LEDPORT),A
@@ -1435,11 +1442,15 @@ S100MON_SKIP:
14351442
LD A,(HB_CURBNK) ; GET HB_CURBNK
14361443
LD (HBX_LOC - 2),A ; ... AND SAVE TEMP FOR APPBNK
14371444
;
1438-
; THE RTCVAL FIELD OF THE PROXY DATA NEEDS TO BE INITIALIZED HERE
1439-
; BECAUSE IT CANNOT BE PRE-INITIALIZED (SEE COMMENTS ABOVE WHERE
1440-
; RTCVAL EQUATE IS DEFINED).
1445+
; WE CAN NOW DO THE REAL INITIALIZATION OF THE RTC LATCH BASED ON
1446+
; (RTCDEFVAL). AT THIS POINT WE SHOULD HAVE ACCESS TO THE ROM LOCATION
1447+
; WHERE RTCDEFVAL IS STORED AND THE PROXY IS INSTALLED IN UPPER RAM
1448+
; WHERE WE WILL STORE THE WORKING SHADOW COPY (HB_RTCVAL).
1449+
; SEE COMMENTS ABOVE REGARDING THE FUNKY WAY THAT THE RTCDEFVAL IS
1450+
; CREATED.
14411451
;
14421452
LD A,(RTCDEFVAL)
1453+
OUT (RTCIO),A ; SET IT
14431454
LD (HB_RTCVAL),A
14441455
;
14451456
#IFDEF TESTING

Source/ver.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#DEFINE RMN 4
33
#DEFINE RUP 0
44
#DEFINE RTP 0
5-
#DEFINE BIOSVER "3.4.0-dev.22"
5+
#DEFINE BIOSVER "3.4.0-dev.23"
66
#define rmj RMJ
77
#define rmn RMN
88
#define rup RUP

Source/ver.lib

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ rmn equ 4
33
rup equ 0
44
rtp equ 0
55
biosver macro
6-
db "3.4.0-dev.22"
6+
db "3.4.0-dev.23"
77
endm

0 commit comments

Comments
 (0)