mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:13:13 -06:00
@@ -25,6 +25,8 @@
|
||||
;
|
||||
;[2020/02/02] v1.5 PMS Basic command line support
|
||||
;
|
||||
;[2020/05/15] v1.6 Added Warm Start option
|
||||
;
|
||||
; Constants
|
||||
;
|
||||
mask_data .EQU %10000000 ; RTC data line
|
||||
@@ -46,6 +48,12 @@ FCB .EQU 05CH ; Start of command line
|
||||
BID_BOOT .EQU $00
|
||||
HB_BNKCALL .EQU $FFF9
|
||||
|
||||
BF_SYSRESET .EQU $F0 ; RESTART SYSTEM
|
||||
|
||||
BF_SYSRES_INT .EQU $00 ; RESET HBIOS INTERNAL
|
||||
BF_SYSRES_WARM .EQU $01 ; WARM START (RESTART BOOT LOADER)
|
||||
BF_SYSRES_COLD .EQU $02 ; COLD START
|
||||
|
||||
;
|
||||
; Program
|
||||
;
|
||||
@@ -1273,6 +1281,9 @@ RTC_UCL:
|
||||
CP 'B'
|
||||
JP Z,RTC_TOP_LOOP_BOOT
|
||||
|
||||
CP 'W'
|
||||
JP Z,RTC_TOP_LOOP_WARMSTART
|
||||
|
||||
CP 'C'
|
||||
JP Z,RTC_TOP_LOOP_CHARGE
|
||||
|
||||
@@ -1324,6 +1335,11 @@ DELAY_LOOP: ; LOOP IS 26TS
|
||||
LD HL,0 ; ADDRESS ZERO
|
||||
CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
|
||||
RTC_TOP_LOOP_WARMSTART:
|
||||
LD B,BF_SYSRESET ; SYSTEM RESTART
|
||||
LD C,BF_SYSRES_WARM ; WARM START
|
||||
CALL $FFF0 ; CALL HBIOS
|
||||
|
||||
RTC_TOP_LOOP_CHARGE:
|
||||
LD DE,RTC_TOP_LOOP1_CHARGE
|
||||
LD C,09H ; CP/M write string to console call
|
||||
@@ -1580,7 +1596,7 @@ RTC_HELP_MSG:
|
||||
.DB 0Ah, 0Dh ; line feed and carriage return
|
||||
.TEXT "RTC: Version 1.5"
|
||||
.DB 0Ah, 0Dh ; line feed and carriage return
|
||||
.TEXT "Commands: E)xit T)ime st(A)rt S)et R)aw L)oop C)harge N)ocharge D)elay I)nit G)et P)ut B)oot H)elp"
|
||||
.TEXT "Commands: E)xit T)ime st(A)rt S)et R)aw L)oop C)harge N)ocharge D)elay I)nit G)et P)ut B)oot W)arm-start H)elp"
|
||||
.DB 0Ah, 0Dh ; line feed and carriage return
|
||||
.DB "$" ; Line terminator
|
||||
|
||||
|
||||
@@ -336,9 +336,12 @@ REBOOT:
|
||||
CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE)
|
||||
#ENDIF
|
||||
#IFDEF PLTWBW
|
||||
DI ; NO INTERRUPTS
|
||||
LD A,0 ; ROM BOOT BANK
|
||||
CALL HB_BNKSEL ; SELECT IT INTO LOW MEMORY
|
||||
;DI ; NO INTERRUPTS
|
||||
;LD A,0 ; ROM BOOT BANK
|
||||
;CALL HB_BNKSEL ; SELECT IT INTO LOW MEMORY
|
||||
LD B,BF_SYSRESET ; SYSTEM RESTART
|
||||
LD C,BF_SYSRES_WARM ; WARM START
|
||||
CALL $FFF0 ; CALL HBIOS
|
||||
#ENDIF
|
||||
;
|
||||
; JUMP TO RESTART ADDRESS
|
||||
|
||||
@@ -678,7 +678,7 @@ signon$msg db 13,10,'ZPM3'
|
||||
if banked
|
||||
db ' [BANKED]'
|
||||
endif
|
||||
db ' on HBIOS v'
|
||||
db ' for HBIOS v'
|
||||
biosver
|
||||
db 13,10,13,10,0
|
||||
|
||||
@@ -697,7 +697,7 @@ signon$msg db 13,10,'CP/M v3.0'
|
||||
if banked
|
||||
db ' [BANKED]'
|
||||
endif
|
||||
db ' on HBIOS v'
|
||||
db ' for HBIOS v'
|
||||
biosver
|
||||
db 13,10,13,10,0
|
||||
|
||||
|
||||
@@ -1532,13 +1532,47 @@ System (SYS)
|
||||
|
||||
| _Entry Parameters_
|
||||
| B: 0xF0
|
||||
| C: Subfunction (see below)
|
||||
|
||||
| _Exit Results_
|
||||
| A: Status (0=OK, else error)
|
||||
|
||||
This function performs various forms of a system reset depending on
|
||||
the value of the subfucntion. See subfunctions below.
|
||||
|
||||
#### SYSRESET Subfunction 0x00 -- Internal HBIOS Reset (RESINT)
|
||||
|
||||
| _Entry Parameters_
|
||||
| BC: 0xFD00
|
||||
|
||||
| _Returned Values_
|
||||
| A: Status (0=OK, else error)
|
||||
|
||||
Perform a soft reset of HBIOS. Releases all HBIOS memory allocated by
|
||||
current OS. Does not reinitialize physical devices.
|
||||
|
||||
#### SYSRESET Subfunction 0x01 -- Warm Start System (RESWARM)
|
||||
|
||||
| _Entry Parameters_
|
||||
| BC: 0xFD01
|
||||
|
||||
| _Returned Values_
|
||||
| <none>
|
||||
|
||||
Warm start the system returning to the boot loader prompt. Does not
|
||||
reinitialize physical devices.
|
||||
|
||||
#### SYSRESET Subfunction 0x02 -- Cold Start System (RESCOLD)
|
||||
|
||||
| _Entry Parameters_
|
||||
| BC: 0xFD02
|
||||
|
||||
| _Returned Values_
|
||||
| <none>
|
||||
|
||||
Perform a system cold start (like a power on). All devices are
|
||||
reinitialized.
|
||||
|
||||
### Function 0xF1 -- System Version (SYSVER)
|
||||
|
||||
| _Entry Parameters_
|
||||
|
||||
@@ -4,6 +4,12 @@ CIOOUT EQU 01h ; CHARACTER OUTPUT
|
||||
CIOIST EQU 02h ; CHARACTER INPUT STATUS
|
||||
BID_BOOT EQU 00h
|
||||
HB_BNKCALL EQU 0fff9h
|
||||
BF_SYSRESET EQU 0F0h ; RESTART SYSTEM
|
||||
|
||||
BF_SYSRES_INT EQU 00h ; RESET HBIOS INTERNAL
|
||||
BF_SYSRES_WARM EQU 01h ; WARM START (RESTART BOOT LOADER)
|
||||
BF_SYSRES_COLD EQU 02h ; COLD START
|
||||
|
||||
|
||||
; THE FOLLOWING NEED TO BE SYNCED WITH STD.ASM SO ROMLDR
|
||||
; KNOWS WHERE THIS EXECUTES AT
|
||||
@@ -332,9 +338,13 @@ KEY2: DW SAVEKEY,CFETCH,LIT,0,SAVEKEY,CSTORE
|
||||
|
||||
;X BYE i*x -- return to CP/M
|
||||
head bye,3,bye,docode
|
||||
LD A,BID_BOOT ; BOOT BANK
|
||||
LD HL,0 ; ADDRESS ZERO
|
||||
CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
;LD A,BID_BOOT ; BOOT BANK
|
||||
;LD HL,0 ; ADDRESS ZERO
|
||||
;CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
LD B,BF_SYSRESET ; SYSTEM RESTART
|
||||
LD C,BF_SYSRES_WARM ; WARM START
|
||||
CALL 0FFF0h ; CALL HBIOS
|
||||
|
||||
HALT
|
||||
|
||||
; STACK OPERATIONS ==============================
|
||||
|
||||
@@ -132,7 +132,7 @@ AY_FND: LD IY, AY_IDAT ; SETUP FUNCTION TABLE
|
||||
LD A, TICKFREQ / 3 ; SCHEDULE IN 1/3 SECOND TO TURN OFF SOUND
|
||||
LD (AY_TIMTIK), A
|
||||
|
||||
LD HL, (VEC_TICK + 1) ; GET CUR SECONDS VECTOR
|
||||
LD HL, (VEC_TICK + 1) ; GET CUR TICKS VECTOR
|
||||
LD (AY_TIMHOOK), HL ; SAVE IT INTERNALLY
|
||||
LD HL, AY_TIMER ; INSTALL TIMER HOOK HANDLER
|
||||
LD (VEC_TICK + 1), HL
|
||||
|
||||
@@ -1,30 +1,29 @@
|
||||
|
||||
#IFNDEF CFG_STATE
|
||||
#DEFINE CFG_STATE
|
||||
|
||||
SYSTIMEN .EQU FALSE
|
||||
|
||||
#IF (CTCENABLE & (INTMODE == 2) & (CTCTIMER))
|
||||
SYSTIMEN .SET TRUE
|
||||
#ENDIF
|
||||
|
||||
#IF (TMSENABLE & (INTMODE == 1) & TMSTIMENABLE)
|
||||
SYSTIMEN .SET TRUE
|
||||
#ENDIF
|
||||
|
||||
#IF ((INTMODE == 1) & (PLATFORM == PLT_SBC) & HTIMENABLE)
|
||||
SYSTIMEN .SET TRUE
|
||||
#ENDIF
|
||||
|
||||
#IF ((INTMODE == 2) & (CPUFAM == CPU_Z180))
|
||||
SYSTIMEN .SET TRUE
|
||||
#ENDIF
|
||||
|
||||
.ECHO "TIMER INTERRUPT "
|
||||
#IF SYSTIMEN
|
||||
.ECHO "ACTIVE\n"
|
||||
#ELSE
|
||||
.ECHO "NOT ACTIVE\n"
|
||||
#ENDIF
|
||||
|
||||
#ENDIF
|
||||
#IFNDEF CFG_STATE
|
||||
#DEFINE CFG_STATE
|
||||
|
||||
SYSTIMEN .EQU FALSE
|
||||
|
||||
#IF (CTCENABLE & (INTMODE == 2) & (CTCTIMER))
|
||||
SYSTIMEN .SET TRUE
|
||||
#ENDIF
|
||||
|
||||
#IF (TMSENABLE & (INTMODE == 1) & TMSTIMENABLE)
|
||||
SYSTIMEN .SET TRUE
|
||||
#ENDIF
|
||||
|
||||
#IF ((INTMODE == 1) & (PLATFORM == PLT_SBC) & HTIMENABLE)
|
||||
SYSTIMEN .SET TRUE
|
||||
#ENDIF
|
||||
|
||||
#IF ((INTMODE == 2) & (CPUFAM == CPU_Z180))
|
||||
SYSTIMEN .SET TRUE
|
||||
#ENDIF
|
||||
|
||||
.ECHO "TIMER INTERRUPT "
|
||||
#IF SYSTIMEN
|
||||
.ECHO "ACTIVE\n"
|
||||
#ELSE
|
||||
.ECHO "NOT ACTIVE\n"
|
||||
#ENDIF
|
||||
|
||||
#ENDIF
|
||||
|
||||
@@ -104,8 +104,10 @@ SERIALCMDLOOP:
|
||||
JP Z,FILLMEM ; FILL MEMORY COMMAND
|
||||
CP 'H' ; IS IT A "H" (Y/N)
|
||||
JP Z,HELP ; HELP COMMAND
|
||||
CP 'S' ; IS IT A "H" (Y/N)
|
||||
JP Z,STOP ; STOP COMMAND
|
||||
CP 'X' ; IS IT A "X" (Y/N)
|
||||
JP Z,HALT ; HALT COMMAND
|
||||
JP Z,EXIT ; EXIT COMMAND
|
||||
LD HL,TXT_COMMAND ; POINT AT ERROR TEXT
|
||||
CALL PRTSTRH ; PRINT COMMAND LABEL
|
||||
|
||||
@@ -148,17 +150,34 @@ BOOT:
|
||||
CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE)
|
||||
JP 0 ; JUMP TO RESTART ADDRESS
|
||||
#ELSE
|
||||
LD A,BID_BOOT ; BOOT BANK
|
||||
LD HL,0 ; ADDRESS ZERO
|
||||
CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
;LD A,BID_BOOT ; BOOT BANK
|
||||
;LD HL,0 ; ADDRESS ZERO
|
||||
;CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
LD B,BF_SYSRESET ; SYSTEM RESTART
|
||||
LD C,BF_SYSRES_COLD ; COLD START
|
||||
CALL $FFF0 ; CALL HBIOS
|
||||
#ENDIF
|
||||
;
|
||||
;__HALT_______________________________________________________________________
|
||||
;__EXIT_______________________________________________________________________
|
||||
;
|
||||
; PERFORM HALT ACTION
|
||||
; PERFORM EXIT ACTION
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
HALT:
|
||||
EXIT:
|
||||
#IF (BIOS == BIOS_UNA)
|
||||
JR BOOT
|
||||
#ELSE
|
||||
LD B,BF_SYSRESET ; SYSTEM RESTART
|
||||
LD C,BF_SYSRES_WARM ; WARM START
|
||||
CALL $FFF0 ; CALL HBIOS
|
||||
#ENDIF
|
||||
;
|
||||
;__STOP_______________________________________________________________________
|
||||
;
|
||||
; PERFORM STOP ACTION (HALT SYSTEM)
|
||||
;_____________________________________________________________________________
|
||||
;
|
||||
STOP:
|
||||
DI
|
||||
HALT
|
||||
;
|
||||
@@ -924,7 +943,8 @@ TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):"
|
||||
.TEXT "\r\nO xx yy - Output to port xx value yy"
|
||||
.TEXT "\r\nP xxxx - Program RAM at xxxx"
|
||||
.TEXT "\r\nR xxxx - Run code at xxxx"
|
||||
.TEXT "\r\nX - Halt system"
|
||||
.TEXT "\r\nS - Stop system (HALT)"
|
||||
.TEXT "\r\nX - Exit monitor"
|
||||
.TEXT "$"
|
||||
;
|
||||
#IF DSKYENABLE
|
||||
|
||||
@@ -179,10 +179,15 @@ waitch
|
||||
LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR
|
||||
RST 08 ; DO IT
|
||||
|
||||
; RETURN TO THE LOADER
|
||||
LD A,BID_BOOT ; BOOT BANK
|
||||
LD HL,0 ; ADDRESS ZERO
|
||||
CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
;; RETURN TO THE LOADER
|
||||
;LD A,BID_BOOT ; BOOT BANK
|
||||
;LD HL,0 ; ADDRESS ZERO
|
||||
;CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
|
||||
LD B,BF_SYSRESET ; SYSTEM RESTART
|
||||
LD C,BF_SYSRES_WARM ; WARM START
|
||||
CALL $FFF0 ; CALL HBIOS
|
||||
|
||||
HALT
|
||||
#ENDIF
|
||||
#IF (BIOS == BIOS_UNA)
|
||||
|
||||
@@ -300,9 +300,14 @@ EXIT:
|
||||
; CALL BDOS
|
||||
CALL PRTSTRDE
|
||||
|
||||
LD A,00H
|
||||
LD HL,0000H
|
||||
JP 0FFF9H
|
||||
;LD A,00H
|
||||
;LD HL,0000H
|
||||
;JP 0FFF9H
|
||||
|
||||
LD B,0F0H
|
||||
LD C,01H
|
||||
CALL 0FFF0H
|
||||
|
||||
; RET
|
||||
|
||||
ISOVER:
|
||||
|
||||
@@ -2325,16 +2325,50 @@ SYS_DISPATCH:
|
||||
JP Z,SYS_POKE ; $FB
|
||||
DEC A
|
||||
JP Z,SYS_INT ; $FC
|
||||
CALL PANIC ; INVALID
|
||||
DEC A
|
||||
;
|
||||
; RESTART SYSTEM
|
||||
; SUBFUNCTION IN C
|
||||
;
|
||||
SYS_RESET:
|
||||
LD A,C ; GET REQUESTED SUB-FUNCTION
|
||||
CP BF_SYSRES_INT
|
||||
JR Z,SYS_RESINT
|
||||
CP BF_SYSRES_WARM
|
||||
JR Z,SYS_RESWARM
|
||||
CP BF_SYSRES_COLD
|
||||
JR Z,SYS_RESCOLD
|
||||
OR $FF ; SIGNAL ERROR
|
||||
RET
|
||||
;
|
||||
; SOFT RESET HBIOS, RELEASE HEAP MEMORY NOT USED BY HBIOS
|
||||
;
|
||||
SYS_RESET:
|
||||
SYS_RESINT:
|
||||
LD HL,(HEAPCURB) ; GET HBIOS HEAP THRESHOLD
|
||||
LD (CB_HEAPTOP),HL ; RESTORE HEAP TOP
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
; GO BACK TO ROM BOOT LOADER
|
||||
;
|
||||
SYS_RESWARM:
|
||||
CALL SYS_RESINT
|
||||
; PERFORM BANK CALL TO OS IMAGES BANK IN ROM
|
||||
LD SP,HBX_LOC ; STACK JUST BELOW HBIOS PROXY
|
||||
LD A,BID_IMG0 ; CHAIN TO OS IMAGES BANK
|
||||
LD HL,0 ; ENTER AT ADDRESS 0
|
||||
CALL HBX_BNKCALL ; GO THERE
|
||||
HALT ; WE SHOULD NEVER COME BACK!
|
||||
;
|
||||
; RESTART SYSTEM AS THOUGH POWER HAD JUST BEEN TURNED ON
|
||||
;
|
||||
SYS_RESCOLD:
|
||||
DI
|
||||
LD SP,HBX_LOC ; STACK JUST BELOW HBIOS PROXY
|
||||
LD A,BID_BOOT ; BOOT BANK
|
||||
LD HL,0 ; ADDRESS ZERO
|
||||
CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
;
|
||||
; GET THE CURRENT HBIOS VERSION
|
||||
; ON INPUT, C=0
|
||||
; RETURNS VERSION IN DE AS BCD
|
||||
|
||||
@@ -90,6 +90,10 @@ BF_SYSPEEK .EQU BF_SYS + 10 ; GET A BYTE VALUE FROM ALT BANK
|
||||
BF_SYSPOKE .EQU BF_SYS + 11 ; SET A BYTE VALUE IN ALT BANK
|
||||
BF_SYSINT .EQU BF_SYS + 12 ; MANAGE INTERRUPT VECTORS
|
||||
;
|
||||
BF_SYSRES_INT .EQU $00 ; RESET HBIOS INTERNAL
|
||||
BF_SYSRES_WARM .EQU $01 ; WARM START (RESTART BOOT LOADER)
|
||||
BF_SYSRES_COLD .EQU $02 ; COLD START
|
||||
;
|
||||
BF_SYSGET_CIOCNT .EQU $00 ; GET CHAR UNIT COUNT
|
||||
BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT
|
||||
BF_SYSGET_RTCCNT .EQU $20 ; GET RTC UNIT COUNT
|
||||
|
||||
@@ -4715,9 +4715,13 @@ MONOUT:
|
||||
POP AF
|
||||
RET
|
||||
|
||||
MONITR: LD A,BID_BOOT ; BOOT BANK
|
||||
LD HL,0 ; ADDRESS ZERO
|
||||
CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
MONITR: ;LD A,BID_BOOT ; BOOT BANK
|
||||
;LD HL,0 ; ADDRESS ZERO
|
||||
;CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
|
||||
LD B,BF_SYSRESET ; SYSTEM RESTART
|
||||
LD C,BF_SYSRES_WARM ; WARM START
|
||||
CALL $FFF0 ; CALL HBIOS
|
||||
|
||||
INITST: LD A,0 ; Clear break flag
|
||||
LD (BRKFLG),A
|
||||
|
||||
@@ -1250,9 +1250,12 @@ st4:
|
||||
#ifndef ZEMU
|
||||
bye:
|
||||
call endchk ; ** Reboot **
|
||||
LD A,BID_BOOT ; BOOT BANK
|
||||
LD HL,0 ; ADDRESS ZERO
|
||||
CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
;LD A,BID_BOOT ; BOOT BANK
|
||||
;LD HL,0 ; ADDRESS ZERO
|
||||
;CALL HB_BNKCALL ; DOES NOT RETURN
|
||||
LD B,BF_SYSRESET ; SYSTEM RESTART
|
||||
LD C,BF_SYSRES_WARM ; WARM START
|
||||
CALL $FFF0 ; CALL HBIOS
|
||||
HALT
|
||||
#endif
|
||||
new:
|
||||
|
||||
@@ -13,9 +13,12 @@ LF .EQU 0AH
|
||||
|
||||
CALL CIN ; DO STUFF
|
||||
;
|
||||
LD A,00H ; RETURN TO ROM LOADER
|
||||
LD HL,0000H
|
||||
JP 0FFF9H
|
||||
;LD A,00H ; RETURN TO ROM LOADER
|
||||
;LD HL,0000H
|
||||
;JP 0FFF9H
|
||||
LD B,BF_SYSRESET ; SYSTEM RESTART
|
||||
LD C,BF_SYSRES_WARM ; WARM START
|
||||
CALL $FFF0 ; CALL HBIOS
|
||||
; RET
|
||||
;
|
||||
;
|
||||
|
||||
Binary file not shown.
@@ -2,4 +2,4 @@
|
||||
#DEFINE RMN 1
|
||||
#DEFINE RUP 1
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "3.1.1-pre.9"
|
||||
#DEFINE BIOSVER "3.1.1-pre.10"
|
||||
|
||||
@@ -3,5 +3,5 @@ rmn equ 1
|
||||
rup equ 1
|
||||
rtp equ 0
|
||||
biosver macro
|
||||
db "3.1.1-pre.9"
|
||||
db "3.1.1-pre.10"
|
||||
endm
|
||||
|
||||
Reference in New Issue
Block a user