diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index e8677023..7f7851bc 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -20,6 +20,7 @@ BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT ; CPUOSC .EQU 8000000 ; CPU OSC FREQ IN MHZ +TICKSPERSEC .EQU 50 ; TICKS PER SECOND INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 DEFSERCFG .EQU SER_38400_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) ; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index f43b6745..fc42fd30 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1245,7 +1245,7 @@ HB_CPU1: LD (IVT(INT_TIM0)),HL ; Z180 TIMER 0 ; SETUP PERIODIC TIMER INTERRUPT ON TIMER 0 - LD HL,(CB_CPUKHZ) ; 50HZ = 18432000 / 20 / 50 / X, SO X = CPU KHZ + LD HL,CPUOSC/TICKSPERSEC/20-1 ; 50HZ = 18432000 / 50 / 20 LD B,0 LD C,Z180_RLDR0L ; INITIALIZE TIMER 0 RELOAD REGISTER OUT (C),L @@ -2396,12 +2396,25 @@ SYS_GETTIMER: ; GET SECONDS ; RETURNS: ; DE:HL: SECONDS VALUE (32 BIT) +; C TICKS OF TICKSPERSEC (8 BIT) ; SYS_GETSECS: - LD HL,HB_SECS + LD HL,HB_SECTCK + LD A,TICKSPERSEC HB_DI - CALL LD32 + SUB (HL) + INC HL ; NOW POINTING TO HB_SECS + LD C,(HL) + INC HL + LD B,(HL) + INC HL + LD E,(HL) + INC HL + LD D,(HL) HB_EI + LD L,C + LD H,B + LD C,A XOR A RET ; @@ -2739,7 +2752,7 @@ HB_TIMINT2: DEC (HL) ; COUNTDOWN 50 TICKS JR NZ,HB_TIMINT3 ; NOT ZERO YET, DONE FOR THIS CYCLE ; 50 TICKS HAVE ELAPSED - LD A,50 ; 50 TICKS PER SECOND + LD A,TICKSPERSEC ; 50 TICKS PER SECOND LD (HL),A ; RESET COUNTDOWN REGISTER ; INCREMENT SECONDS COUNTER LD HL,HB_SECS ; POINT TO SECONDS COUNTER @@ -4049,7 +4062,7 @@ IDLECOUNT .DB 0 HEAPCURB .DW 0 ; MARK HEAP ADDRESS AFTER INITIALIZATION ; HB_TICKS .FILL 4,0 ; 32 BIT TICK COUNTER -HB_SECTCK .DB 50 ; TICK COUNTER FOR SECONDS +HB_SECTCK .DB TICKSPERSEC ; TICK COUNTER FOR FRACTIONAL SECONDS HB_SECS .FILL 4,0 ; 32 BIT SECONDS COUNTER ; HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG diff --git a/Source/HBIOS/util.asm b/Source/HBIOS/util.asm index d4bd7f49..253ec8fb 100644 --- a/Source/HBIOS/util.asm +++ b/Source/HBIOS/util.asm @@ -258,7 +258,7 @@ DB_BLKRD: LD C,16 ; SET FOR 16 LOCS PUSH HL ; SAVE STARTING HL DB_NXTONE: - LD A,(HL) ; GET BYTE + LD A,(HL) ; GET BYTE CALL PRTHEXBYTE ; PRINT IT CALL PC_SPACE ; DB_UPDH: @@ -789,7 +789,7 @@ DIV32X8: XOR A LD B,32 DIV32X8A: - ADD HL,HL + ADD HL,HL RL E RL D RLA @@ -798,7 +798,7 @@ DIV32X8A: SUB C INC L DIV32X8B: - DJNZ DIV32X8A + DJNZ DIV32X8A RET ; ; FILL MEMORY AT HL WITH VALUE A, LENGTH IN BC, ALL REGS USED @@ -984,19 +984,15 @@ SUB32: ; INCREMENT 32 BIT BINARY AT ADDRESS ; INC32HL: - PUSH HL - PUSH BC - LD B,4 -INC32HL1: INC (HL) + RET NZ INC HL - JR NZ,INC32HL2 - DJNZ INC32HL1 -INC32HL2: - POP BC - POP HL + INC (HL) + RET NZ + INC HL + INC (HL) + RET NZ + INC HL + INC (HL) RET - - -