Browse Source

Merge pull request #41 from wwarthen/master

Resync
pull/60/head
b1ackmai1er 6 years ago
committed by GitHub
parent
commit
9ad14e2392
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      Doc/ChangeLog.txt
  2. 6
      Source/Apps/Timer.asm
  3. 17
      Source/HBIOS/dbgmon.asm
  4. 21
      Source/HBIOS/hbios.asm
  5. 14
      Source/HBIOS/std.asm
  6. 26
      Source/HBIOS/util.asm

2
Doc/ChangeLog.txt

@ -28,7 +28,7 @@ Version 2.9.2
- WBW: Updated FAT to add MD and FORMAT commands - WBW: Updated FAT to add MD and FORMAT commands
- WBW: Add CP/M 3 (experimental) - WBW: Add CP/M 3 (experimental)
- M?T: Support Shift register SPI WIZNET for RC2014 - 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 Version 2.9.1
------------- -------------

6
Source/Apps/Timer.asm

@ -139,6 +139,10 @@ process1a:
ld c,bf_sysgetsecs ; SECONDS subfunction ld c,bf_sysgetsecs ; SECONDS subfunction
rst 08 ; call HBIOS, DE:HL := seconds value rst 08 ; call HBIOS, DE:HL := seconds value
call prthex32 ; display it 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 ld de,strsec ; tag
call prtstr ; display it call prtstr ; display it
; ;
@ -476,7 +480,7 @@ stack .equ $ ; stack top
; ;
; Messages ; 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 .db "Copyright (C) 2019, Wayne Warthen, GNU GPL v3",0
msguse .db "Usage: TIMER [/C] [/?]",13,10 msguse .db "Usage: TIMER [/C] [/?]",13,10
.db " ex. TIMER (display current timer value)",13,10 .db " ex. TIMER (display current timer value)",13,10

17
Source/HBIOS/dbgmon.asm

@ -42,6 +42,7 @@ BUFLEN .EQU 40 ; INPUT LINE LENGTH
UART_ENTRY: UART_ENTRY:
LD SP,MON_STACK ; SET THE STACK POINTER LD SP,MON_STACK ; SET THE STACK POINTER
EI ; INTS OK NOW EI ; INTS OK NOW
LD HL,UART_ENTRY ; RESTART ADDRESS
CALL INITIALIZE ; INITIALIZE SYSTEM CALL INITIALIZE ; INITIALIZE SYSTEM
LD HL,TXT_READY ; POINT AT TEXT LD HL,TXT_READY ; POINT AT TEXT
@ -108,9 +109,14 @@ SERIALCMDLOOP:
;__INITIALIZE_________________________________________________________________ ;__INITIALIZE_________________________________________________________________
; ;
; INITIALIZE SYSTEM ; INITIALIZE SYSTEM
; AT ENTRY, HL SHOULD HAVE ADDRESS OF DESIRED RESTART ADDRESS
;_____________________________________________________________________________ ;_____________________________________________________________________________
; ;
INITIALIZE: INITIALIZE:
LD A,$C3 ; JP OPCODE
LD (0),A ; STORE AT $0000
LD (1),HL ; STORE AT $0001
#IF (BIOS == BIOS_UNA) #IF (BIOS == BIOS_UNA)
; INSTALL UNA INVOCATION VECTOR FOR RST 08 ; INSTALL UNA INVOCATION VECTOR FOR RST 08
LD A,$C3 ; JP INSTRUCTION LD A,$C3 ; JP INSTRUCTION
@ -932,6 +938,7 @@ KY_PW .EQU KY_BK ; USE [BW] FOR [PW] (PORT WRITE)
DSKY_ENTRY: DSKY_ENTRY:
LD SP,MON_STACK ; SET THE STACK POINTER LD SP,MON_STACK ; SET THE STACK POINTER
EI ; INTS OK NOW EI ; INTS OK NOW
LD HL,DSKY_ENTRY ; RESTART ADDRESS
CALL INITIALIZE CALL INITIALIZE
; ;
;__FRONT_PANEL_STARTUP________________________________________________________ ;__FRONT_PANEL_STARTUP________________________________________________________
@ -1381,5 +1388,13 @@ MON_STACK .EQU $
.ECHO "DBGMON space remaining: " .ECHO "DBGMON space remaining: "
.ECHO SLACK .ECHO SLACK
.ECHO " bytes.\n" .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 .END

21
Source/HBIOS/hbios.asm

@ -1245,13 +1245,15 @@ HB_CPU1:
LD (IVT(INT_TIM0)),HL ; Z180 TIMER 0 LD (IVT(INT_TIM0)),HL ; Z180 TIMER 0
; SETUP PERIODIC TIMER INTERRUPT ON 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 OUT (C),L
INC C INC C
OUT (C),H 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 OUT (C),L
INC C INC C
OUT (C),H OUT (C),H
@ -2396,12 +2398,17 @@ SYS_GETTIMER:
; GET SECONDS ; GET SECONDS
; RETURNS: ; RETURNS:
; DE:HL: SECONDS VALUE (32 BIT) ; DE:HL: SECONDS VALUE (32 BIT)
; C: NUM TICKS WITHIN CURRENT SECOND
; ;
SYS_GETSECS: SYS_GETSECS:
LD HL,HB_SECS LD HL,HB_SECS
HB_DI HB_DI
CALL LD32 CALL LD32
LD A,(HB_SECTCK)
HB_EI HB_EI
NEG ; CONVERT DOWNCOUNTER TO UPCOUNTER
ADD A,TICKSPERSEC
LD C,A
XOR A XOR A
RET RET
; ;
@ -2520,7 +2527,7 @@ SYS_SETTIMER:
; ;
; SET SECS ; SET SECS
; ON ENTRY: ; ON ENTRY:
; DE:HL: TIMER VALUE (32 BIT)
; DE:HL: SECONDS VALUE (32 BIT)
; ;
SYS_SETSECS: SYS_SETSECS:
LD BC,HB_SECS LD BC,HB_SECS
@ -2739,7 +2746,7 @@ HB_TIMINT2:
DEC (HL) ; COUNTDOWN 50 TICKS DEC (HL) ; COUNTDOWN 50 TICKS
JR NZ,HB_TIMINT3 ; NOT ZERO YET, DONE FOR THIS CYCLE JR NZ,HB_TIMINT3 ; NOT ZERO YET, DONE FOR THIS CYCLE
; 50 TICKS HAVE ELAPSED ; 50 TICKS HAVE ELAPSED
LD A,50 ; 50 TICKS PER SECOND
LD A,TICKSPERSEC ; 50 TICKS PER SECOND
LD (HL),A ; RESET COUNTDOWN REGISTER LD (HL),A ; RESET COUNTDOWN REGISTER
; INCREMENT SECONDS COUNTER ; INCREMENT SECONDS COUNTER
LD HL,HB_SECS ; POINT TO 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 HEAPCURB .DW 0 ; MARK HEAP ADDRESS AFTER INITIALIZATION
; ;
HB_TICKS .FILL 4,0 ; 32 BIT TICK COUNTER 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_SECS .FILL 4,0 ; 32 BIT SECONDS COUNTER
; ;
HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG

14
Source/HBIOS/std.asm

@ -297,20 +297,22 @@ FORCECON .EQU 0 ; DEFAULT IS TO FOLLOW NORMAL SEQUENCE
; ;
; SETUP DEFAULT CPU SPEED VALUES ; 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 (BIOS == BIOS_WBW)
#IF (CPUFAM == CPU_Z180) #IF (CPUFAM == CPU_Z180)
#IF (Z180_CLKDIV == 0) #IF (Z180_CLKDIV == 0)
CPUKHZ .SET CPUKHZ / 2 ; ADJUST FOR HALF SPEED OPERATION
CPUKHZ .SET CPUKHZ / 2 ; ADJUST FOR HALF SPEED OPERATION
#ENDIF #ENDIF
#IF (Z180_CLKDIV == 2) #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 #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 ; MEMORY BANK CONFIGURATION
; ;
@ -371,8 +373,8 @@ CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS)
LDR_SIZ .EQU $0E00 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 MON_END .EQU MON_LOC + MON_SIZ ; END OF MONITOR
BAS_LOC .EQU $0200 ; NASCOM BASIC BAS_LOC .EQU $0200 ; NASCOM BASIC

26
Source/HBIOS/util.asm

@ -258,7 +258,7 @@ DB_BLKRD:
LD C,16 ; SET FOR 16 LOCS LD C,16 ; SET FOR 16 LOCS
PUSH HL ; SAVE STARTING HL PUSH HL ; SAVE STARTING HL
DB_NXTONE: DB_NXTONE:
LD A,(HL) ; GET BYTE
LD A,(HL) ; GET BYTE
CALL PRTHEXBYTE ; PRINT IT CALL PRTHEXBYTE ; PRINT IT
CALL PC_SPACE ; CALL PC_SPACE ;
DB_UPDH: DB_UPDH:
@ -789,7 +789,7 @@ DIV32X8:
XOR A XOR A
LD B,32 LD B,32
DIV32X8A: DIV32X8A:
ADD HL,HL
ADD HL,HL
RL E RL E
RL D RL D
RLA RLA
@ -798,7 +798,7 @@ DIV32X8A:
SUB C SUB C
INC L INC L
DIV32X8B: DIV32X8B:
DJNZ DIV32X8A
DJNZ DIV32X8A
RET RET
; ;
; FILL MEMORY AT HL WITH VALUE A, LENGTH IN BC, ALL REGS USED ; FILL MEMORY AT HL WITH VALUE A, LENGTH IN BC, ALL REGS USED
@ -984,19 +984,15 @@ SUB32:
; INCREMENT 32 BIT BINARY AT ADDRESS ; INCREMENT 32 BIT BINARY AT ADDRESS
; ;
INC32HL: INC32HL:
PUSH HL
PUSH BC
LD B,4
INC32HL1:
INC (HL) INC (HL)
RET NZ
INC HL 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 RET

Loading…
Cancel
Save