From 6ab3ecd0ccf6711287401ba939028a26f38a0f6c Mon Sep 17 00:00:00 2001 From: Phillip Stevens Date: Sat, 9 Nov 2019 18:32:08 +1100 Subject: [PATCH 1/5] hbios - sys/time.h functions --- Source/HBIOS/cfg_master.asm | 1 + Source/HBIOS/hbios.asm | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) 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..478bc971 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -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-1 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-1 ; 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-1 ; 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 From 8fb0d9019b97397efcef7b61dc393ffc8b64a4bd Mon Sep 17 00:00:00 2001 From: Phillip Stevens Date: Sat, 9 Nov 2019 18:44:06 +1100 Subject: [PATCH 2/5] hbios - optimise INC32HL --- Source/HBIOS/util.asm | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) 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 - - - From d78229a8759dad8a310c7387789c8ecbd02cce56 Mon Sep 17 00:00:00 2001 From: Phillip Stevens Date: Sat, 9 Nov 2019 20:36:52 +1100 Subject: [PATCH 3/5] hbios - z180 PRT0 configuration --- Source/HBIOS/hbios.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 478bc971..10ca4b4f 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,__CPU_CLOCK/TICKSPERSEC/20-1 ; 50HZ = 18432000/ 50 / 20 LD B,0 LD C,Z180_RLDR0L ; INITIALIZE TIMER 0 RELOAD REGISTER OUT (C),L From 6cb051ec522734bcccb7f115dd2f4c7443028c0d Mon Sep 17 00:00:00 2001 From: Phillip Stevens Date: Sat, 9 Nov 2019 20:51:29 +1100 Subject: [PATCH 4/5] hbios - z180 PRT0 configuration again --- Source/HBIOS/hbios.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 10ca4b4f..3843d789 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,__CPU_CLOCK/TICKSPERSEC/20-1 ; 50HZ = 18432000/ 50 / 20 + 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 From 976ef858d0c7dac676015d1edce3c2096a17c4d3 Mon Sep 17 00:00:00 2001 From: Phillip Stevens Date: Sun, 10 Nov 2019 15:29:16 +1100 Subject: [PATCH 5/5] hbios - fix HB_SECTCK setting --- Source/HBIOS/hbios.asm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 3843d789..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,CPUOSC/TICKSPERSEC/20-1 ; 50HZ = 18432000/ 50 / 20 + 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 @@ -2400,7 +2400,7 @@ SYS_GETTIMER: ; SYS_GETSECS: LD HL,HB_SECTCK - LD A,TICKSPERSEC-1 + LD A,TICKSPERSEC HB_DI SUB (HL) INC HL ; NOW POINTING TO HB_SECS @@ -2752,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,TICKSPERSEC-1 ; 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 @@ -4062,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 TICKSPERSEC-1 ; TICK COUNTER FOR FRACTIONAL 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