Browse Source

More system restart options

pull/132/head
Wayne Warthen 6 years ago
parent
commit
6afc56a7ca
  1. 1
      Doc/ChangeLog.txt
  2. BIN
      Doc/RomWBW Applications.pdf
  3. BIN
      Doc/RomWBW Architecture.pdf
  4. BIN
      Doc/RomWBW Disk Catalog.pdf
  5. BIN
      Doc/RomWBW Getting Started.pdf
  6. 18
      Source/Apps/RTC.asm
  7. 9
      Source/CBIOS/cbios.asm
  8. 4
      Source/CPM3/boot.z80
  9. 34
      Source/Doc/Architecture.md
  10. 16
      Source/Forth/camel80.azm
  11. 2
      Source/HBIOS/ay38910.asm
  12. 25
      Source/HBIOS/cfg_state.inc
  13. 36
      Source/HBIOS/dbgmon.asm
  14. 13
      Source/HBIOS/eastaegg.asm
  15. 11
      Source/HBIOS/game.asm
  16. 38
      Source/HBIOS/hbios.asm
  17. 4
      Source/HBIOS/hbios.inc
  18. 10
      Source/HBIOS/nascom.asm
  19. 9
      Source/HBIOS/tastybasic.asm
  20. 9
      Source/HBIOS/usrrom.asm
  21. BIN
      Source/Images/hdnew_prefix.bin
  22. 2
      Source/ver.inc
  23. 2
      Source/ver.lib

1
Doc/ChangeLog.txt

@ -3,6 +3,7 @@ Version 3.1.1
- WBW: Version bumped due to pervasive changes
- WBW: Preliminary hard disk partition support (backward compatible)
- WBW: Change Propeller VGA signal timings to 60Hz refresh
- WBW: Enhanced SYSTEM RESET function to allow a warm start back to boot loader
Version 3.1
-----------

BIN
Doc/RomWBW Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Architecture.pdf

Binary file not shown.

BIN
Doc/RomWBW Disk Catalog.pdf

Binary file not shown.

BIN
Doc/RomWBW Getting Started.pdf

Binary file not shown.

18
Source/Apps/RTC.asm

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

9
Source/CBIOS/cbios.asm

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

4
Source/CPM3/boot.z80

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

34
Source/Doc/Architecture.md

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

16
Source/Forth/camel80.azm

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

2
Source/HBIOS/ay38910.asm

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

25
Source/HBIOS/cfg_state.inc

@ -1,30 +1,29 @@
#IFNDEF CFG_STATE
#DEFINE CFG_STATE
#DEFINE CFG_STATE
SYSTIMEN .EQU FALSE
#IF (CTCENABLE & (INTMODE == 2) & (CTCTIMER))
#IF (CTCENABLE & (INTMODE == 2) & (CTCTIMER))
SYSTIMEN .SET TRUE
#ENDIF
#ENDIF
#IF (TMSENABLE & (INTMODE == 1) & TMSTIMENABLE)
#IF (TMSENABLE & (INTMODE == 1) & TMSTIMENABLE)
SYSTIMEN .SET TRUE
#ENDIF
#ENDIF
#IF ((INTMODE == 1) & (PLATFORM == PLT_SBC) & HTIMENABLE)
#IF ((INTMODE == 1) & (PLATFORM == PLT_SBC) & HTIMENABLE)
SYSTIMEN .SET TRUE
#ENDIF
#ENDIF
#IF ((INTMODE == 2) & (CPUFAM == CPU_Z180))
#IF ((INTMODE == 2) & (CPUFAM == CPU_Z180))
SYSTIMEN .SET TRUE
#ENDIF
#ENDIF
.ECHO "TIMER INTERRUPT "
#IF SYSTIMEN
#IF SYSTIMEN
.ECHO "ACTIVE\n"
#ELSE
#ELSE
.ECHO "NOT ACTIVE\n"
#ENDIF
#ENDIF
#ENDIF

36
Source/HBIOS/dbgmon.asm

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

13
Source/HBIOS/eastaegg.asm

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

11
Source/HBIOS/game.asm

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

38
Source/HBIOS/hbios.asm

@ -2325,16 +2325,50 @@ SYS_DISPATCH:
JP Z,SYS_POKE ; $FB
DEC A
JP Z,SYS_INT ; $FC
CALL PANIC ; INVALID
DEC A
;
; SOFT RESET HBIOS, RELEASE HEAP MEMORY NOT USED BY HBIOS
; 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_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

4
Source/HBIOS/hbios.inc

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

10
Source/HBIOS/nascom.asm

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

9
Source/HBIOS/tastybasic.asm

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

9
Source/HBIOS/usrrom.asm

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

BIN
Source/Images/hdnew_prefix.bin

Binary file not shown.

2
Source/ver.inc

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

2
Source/ver.lib

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

Loading…
Cancel
Save