Merge pull request #128 from wwarthen/dev

More system restart options
This commit is contained in:
b1ackmai1er
2020-05-16 08:39:15 +08:00
committed by GitHub
23 changed files with 209 additions and 68 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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
;
;