diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 287f4059..c747390b 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -28,7 +28,7 @@ Version 2.9.2 - WBW: Updated FAT to add MD and FORMAT commands - WBW: Add CP/M 3 (experimental) - M?T: Support Shift register SPI WIZNET for RC2014 -- WBW: Added seconds register in HBIOS +- P?S: Added seconds register in HBIOS Version 2.9.1 ------------- diff --git a/Source/Apps/Timer.asm b/Source/Apps/Timer.asm index e4ed216b..57fd8a1e 100644 --- a/Source/Apps/Timer.asm +++ b/Source/Apps/Timer.asm @@ -139,6 +139,10 @@ process1a: ld c,bf_sysgetsecs ; SECONDS subfunction rst 08 ; call HBIOS, DE:HL := seconds value call prthex32 ; display it + ld a,'.' ; fraction separator + call prtchr ; print it + ld a,c ; get fractional component + call prthex ; print it ld de,strsec ; tag call prtstr ; display it ; @@ -476,7 +480,7 @@ stack .equ $ ; stack top ; ; Messages ; -msgban .db "TIMER v1.1, 8-Nov-2019",13,10 +msgban .db "TIMER v1.1, 10-Nov-2019",13,10 .db "Copyright (C) 2019, Wayne Warthen, GNU GPL v3",0 msguse .db "Usage: TIMER [/C] [/?]",13,10 .db " ex. TIMER (display current timer value)",13,10 diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index e93e6c38..4698655f 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -42,6 +42,7 @@ BUFLEN .EQU 40 ; INPUT LINE LENGTH UART_ENTRY: LD SP,MON_STACK ; SET THE STACK POINTER EI ; INTS OK NOW + LD HL,UART_ENTRY ; RESTART ADDRESS CALL INITIALIZE ; INITIALIZE SYSTEM LD HL,TXT_READY ; POINT AT TEXT @@ -108,9 +109,14 @@ SERIALCMDLOOP: ;__INITIALIZE_________________________________________________________________ ; ; INITIALIZE SYSTEM +; AT ENTRY, HL SHOULD HAVE ADDRESS OF DESIRED RESTART ADDRESS ;_____________________________________________________________________________ ; INITIALIZE: + LD A,$C3 ; JP OPCODE + LD (0),A ; STORE AT $0000 + LD (1),HL ; STORE AT $0001 + #IF (BIOS == BIOS_UNA) ; INSTALL UNA INVOCATION VECTOR FOR RST 08 LD A,$C3 ; JP INSTRUCTION @@ -932,6 +938,7 @@ KY_PW .EQU KY_BK ; USE [BW] FOR [PW] (PORT WRITE) DSKY_ENTRY: LD SP,MON_STACK ; SET THE STACK POINTER EI ; INTS OK NOW + LD HL,DSKY_ENTRY ; RESTART ADDRESS CALL INITIALIZE ; ;__FRONT_PANEL_STARTUP________________________________________________________ @@ -1381,5 +1388,13 @@ MON_STACK .EQU $ .ECHO "DBGMON space remaining: " .ECHO SLACK .ECHO " bytes.\n" - +; +; DBGMON CURRENTLY OCCUPIES $F000-$FDFF BECAUSE THE +; HBIOS PROXY OCCUPIES $FE00-$FFFF. HOWEVER THE DBGMON +; IMAGE MUST OCCUPY A FULL $1000 BYTES IN THE ROM. +; BELOW WE JUST PAD OUT THE IMAGE BY $200 SO IT +; OCCUPIES THE FULL $1000 BYTES IN ROM. +; + .FILL $200,$00 +; .END diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index f43b6745..16b76ac3 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1245,13 +1245,15 @@ 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 B,0 - LD C,Z180_RLDR0L ; INITIALIZE TIMER 0 RELOAD REGISTER +; LD HL,CPUOSC/TICKSPERSEC/20-1 ; 50HZ = 18432000 / 50 / 20 + LD HL,(CPUKHZ) ; 50HZ = 18432000 / 20 / 50 / X, SO X = CPU KHZ + LD B,0 ; 16-BIT I/O ADDRESS + LD C,Z180_TMDR0L ; INITIALIZE TIMER 0 DATA REGISTER OUT (C),L INC C OUT (C),H - LD C,Z180_TMDR0L ; INITIALIZE TIMER 0 DATA REGISTER + DEC HL ; RELOAD OCCURS *AFTER* ZERO + LD C,Z180_RLDR0L ; INITIALIZE TIMER 0 RELOAD REGISTER OUT (C),L INC C OUT (C),H @@ -2396,12 +2398,17 @@ SYS_GETTIMER: ; GET SECONDS ; RETURNS: ; DE:HL: SECONDS VALUE (32 BIT) +; C: NUM TICKS WITHIN CURRENT SECOND ; SYS_GETSECS: LD HL,HB_SECS HB_DI CALL LD32 + LD A,(HB_SECTCK) HB_EI + NEG ; CONVERT DOWNCOUNTER TO UPCOUNTER + ADD A,TICKSPERSEC + LD C,A XOR A RET ; @@ -2520,7 +2527,7 @@ SYS_SETTIMER: ; ; SET SECS ; ON ENTRY: -; DE:HL: TIMER VALUE (32 BIT) +; DE:HL: SECONDS VALUE (32 BIT) ; SYS_SETSECS: LD BC,HB_SECS @@ -2739,7 +2746,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 +4056,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/std.asm b/Source/HBIOS/std.asm index aa385538..625c0f98 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -297,20 +297,22 @@ FORCECON .EQU 0 ; DEFAULT IS TO FOLLOW NORMAL SEQUENCE ; ; SETUP DEFAULT CPU SPEED VALUES ; -CPUKHZ .EQU CPUOSC / 1000 ; CPU FREQ IN KHZ +CPUKHZ .EQU CPUOSC / 1000 ; CPU FREQ IN KHZ ; #IF (BIOS == BIOS_WBW) #IF (CPUFAM == CPU_Z180) #IF (Z180_CLKDIV == 0) -CPUKHZ .SET CPUKHZ / 2 ; ADJUST FOR HALF SPEED OPERATION +CPUKHZ .SET CPUKHZ / 2 ; ADJUST FOR HALF SPEED OPERATION #ENDIF #IF (Z180_CLKDIV == 2) -CPUKHZ .SET CPUKHZ * 2 ; ADJUST FOR DOUBLE SPEED OPERATION +CPUKHZ .SET CPUKHZ * 2 ; ADJUST FOR DOUBLE SPEED OPERATION #ENDIF #ENDIF #ENDIF ; -CPUMHZ .EQU CPUKHZ / 1000 ; CPU FREQ IN MHZ +CPUMHZ .EQU CPUKHZ / 1000 ; CPU FREQ IN MHZ +; +TICKSPERSEC .EQU 50 ; ; MEMORY BANK CONFIGURATION ; @@ -371,8 +373,8 @@ CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS) LDR_SIZ .EQU $0E00 -MON_LOC .EQU $C000 ; LOCATION OF MONITOR FOR RUNNING SYSTEM -MON_SIZ .EQU $1000 ; SIZE OF MONITOR BINARY IMAGE +MON_LOC .EQU $F000 ; LOCATION OF MONITOR FOR RUNNING SYSTEM +MON_SIZ .EQU $0E00 ; SIZE OF MONITOR BINARY IMAGE MON_END .EQU MON_LOC + MON_SIZ ; END OF MONITOR BAS_LOC .EQU $0200 ; NASCOM BASIC 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 - - -