Browse Source

Merge pull request #453 from kiwisincebirth/map/switches

Initial NVRAM Changes,
master
Wayne Warthen 1 year ago
committed by GitHub
parent
commit
de426b9833
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 7
      Source/HBIOS/Build.cmd
  2. 8
      Source/HBIOS/Makefile
  3. 9
      Source/HBIOS/Makefile.new
  4. 10
      Source/HBIOS/SysConfig/Build.cmd
  5. 6
      Source/HBIOS/SysConfig/Clean.cmd
  6. 12
      Source/HBIOS/SysConfig/Makefile
  7. 21
      Source/HBIOS/SysConfig/README.md
  8. 1032
      Source/HBIOS/SysConfig/sysconfig.asm
  9. 288
      Source/HBIOS/hbios.asm
  10. 53
      Source/HBIOS/hbios.inc
  11. 9722
      Source/HBIOS/hbios_new.asm
  12. 101
      Source/HBIOS/layout.inc
  13. 8
      Source/HBIOS/romldr.asm
  14. 93
      Source/HBIOS/std.asm
  15. 1
      Source/Images/hd_bp.txt
  16. 1
      Source/Images/hd_cpm22.txt
  17. 1
      Source/Images/hd_cpm3.txt
  18. 1
      Source/Images/hd_nzcom.txt
  19. 1
      Source/Images/hd_qpm.txt
  20. 1
      Source/Images/hd_z3plus.txt
  21. 1
      Source/Images/hd_zpm3.txt
  22. 1
      Source/Images/hd_zsdos.txt

7
Source/HBIOS/Build.cmd

@ -89,6 +89,11 @@ call :asm usrrom || exit /b
call :asm updater || exit /b
call :asm imgpad2 || exit /b
::
:: Build components in Sub folders
::
pushd SysConfig && call Build || exit /b & popd
::
:: Create additional ROM bank images by assembling components into
:: 32K chunks which can be concatenated later. Note that
@ -97,7 +102,7 @@ call :asm imgpad2 || exit /b
::
copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin + ..\cpm22\cpm_wbw.bin osimg.bin || exit /b
copy /b ..\Forth\camel80.bin + nascom.bin + ..\tastybasic\src\tastybasic.bin + game.bin + eastaegg.bin + netboot.mod + updater.bin + usrrom.bin osimg1.bin || exit /b
copy /b ..\Forth\camel80.bin + nascom.bin + ..\tastybasic\src\tastybasic.bin + game.bin + eastaegg.bin + netboot.mod + updater.bin + SysConfig/sysconfig.bin usrrom.bin osimg1.bin || exit /b
if %Platform%==S100 (
zxcc slr180 -s100mon/fh

8
Source/HBIOS/Makefile

@ -3,7 +3,7 @@ MOREDIFF = game.bin hbios_rom.bin nascom.bin usrrom.bin \
dbgmon.bin hbios_app.bin imgpad2.bin osimg1.bin osimg2.bin romldr.bin \
eastaegg.bin hbios_img.bin osimg.bin game.bin updater.bin usrrom.bin
SUBDIRS =
SUBDIRS = SysConfig
DEST = ../../Binary
TOOLS =../../Tools
OTHERS = *.img *.rom *.com *.upd *.bin *.hex cpm.sys zsys.sys Build.inc font*.asm *.dat hbios_env.sh
@ -62,7 +62,7 @@ $(OBJECTS) : $(ROMDEPS)
@cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin ../CPM22/cpm_$(BIOS).bin >osimg.bin
cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin >osimg_small.bin
if [ $(ROM_PLATFORM) != UNA ] ; then \
cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin netboot.mod updater.bin usrrom.bin >osimg1.bin ; \
cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin netboot.mod updater.bin SysConfig/sysconfig.bin usrrom.bin >osimg1.bin ; \
if [ $(ROM_PLATFORM) = S100 ] ; then \
cat s100mon.bin >osimg2.bin ; \
else \
@ -102,7 +102,7 @@ s100mon.bin:
tastybasic.bin:
cp ../TastyBasic/src/$@ .
hbios_rom.bin: hbios.asm build.inc $(DEPS)
@$(TASM) -dROMBOOT hbios.asm hbios_rom.bin hbios_rom.lst
@ -114,7 +114,7 @@ hbios_img.bin: hbios.asm build.inc $(DEPS)
hbios_env.com: hbios_env.asm build.inc
@$(TASM) -dBASH hbios_env.asm hbios_env.com hbios_env.lst
hbios_env.sh: hbios_env.com
@$(ZXCC) hbios_env.com >hbios_env.sh

9
Source/HBIOS/Makefile.new

@ -6,7 +6,7 @@ DIST_OBJECTS := \
DUO_std SCZ180_sc126 SCZ180_sc130 SCZ180_sc131 SCZ180_sc140 \
SCZ180_sc503 SCZ180_sc700 S100_std UNA_std Z80RETRO_std \
ZETA_std ZETA2_std HEATH_std EPITX_std GMZ180_std
# RCZ80_mt RCZ80_duart MON_std
# RCZ80_mt RCZ80_duart MON_std
OBJECTS := $(DIST_OBJECTS)
# OBJECTS := SBC_std MK4_std UNA_std S100_std
@ -41,6 +41,9 @@ camel80.bin:
tastybasic.bin:
cp ../TastyBasic/src/$@ .
sysconfig.bin:
cp SysConfig/$@ .
s100mon.bin:
$(ZXCC) $(CPM)/SLR180 -s100mon/FH
$(ZXCC) $(CPM)/MLOAD25 -s100mon.bin=s100mon
@ -100,8 +103,8 @@ UNA_%.osimg.bin: UNA_%.romldr.bin UNA_%.dbgmon.bin
%.osimg_small.bin: %.romldr.bin %.dbgmon.bin
cat $(*F).romldr.bin $(*F).dbgmon.bin ../ZSDOS/zsys_wbw.bin >$@
%.osimg1.bin: camel80.bin %.nascom.bin tastybasic.bin %.game.bin %.eastaegg.bin netboot.mod %.updater.bin %.usrrom.bin
cat camel80.bin $(*F).nascom.bin tastybasic.bin $(*F).game.bin $(*F).eastaegg.bin netboot.mod $(*F).updater.bin $(*F).usrrom.bin >$@
%.osimg1.bin: camel80.bin %.nascom.bin tastybasic.bin %.game.bin %.eastaegg.bin netboot.mod %.updater.bin sysconfig.bin %.usrrom.bin
cat camel80.bin $(*F).nascom.bin tastybasic.bin $(*F).game.bin $(*F).eastaegg.bin netboot.mod $(*F).updater.bin sysconfig.bin $(*F).usrrom.bin >$@
srec_cat $@ -Binary -Crop 0 0x7FFF -Checksum_Negative_Big_Endian 0x7FFF 1 1 -o $@ -Binary
S100_%.imgpad2.bin: s100mon.bin

10
Source/HBIOS/SysConfig/Build.cmd

@ -0,0 +1,10 @@
@echo off
setlocal
set TOOLS=../../Tools
set PATH=%TOOLS%\tasm32;%PATH%
set TASMTABS=%TOOLS%\tasm32
tasm -t80 -g3 -fFF sysconfig.asm sysconfig.com sysconfig.lst || exit /b
copy /Y sysconfig.com ..\..\Binary\Apps\ || exit /b

6
Source/HBIOS/SysConfig/Clean.cmd

@ -0,0 +1,6 @@
@echo off
setlocal
if exist *.com del *.com
if exist *.lst del *.lst
if exist *.bin del *.bin

12
Source/HBIOS/SysConfig/Makefile

@ -0,0 +1,12 @@
OBJECTS = sysconfig.com sysconfig.bin
DEST = ../../../Binary/Apps
NOCOPY = sysconfig.bin
TOOLS = ../../../Tools
include $(TOOLS)/Makefile.inc
USETASM=1
sysconfig.bin: TASMFLAGS=-dROMWBW
sysconfig.com: TASMFLAGS=-dCPM

21
Source/HBIOS/SysConfig/README.md

@ -0,0 +1,21 @@
# System Configuration
## Introduction
An utility applicaton that sets NVR Attributes that affect HBIOS and
RomWBW Operation. Write to RTC NVRAM to store config is reliant on HBIOS
## Building
TASM (Telemark Assembler) ([Anderson, 1998](##References)).
### RomWBW Version
Is part of the SBCv2 RomWBW distribution. And deployed as a Rom Application
It is included in Rom Bank 1
### CP/M Version
The resulting `sysconfig.com` command file can be run in CP/M.
It is copied in the Binary/Apps folder.

1032
Source/HBIOS/SysConfig/sysconfig.asm

File diff suppressed because it is too large

288
Source/HBIOS/hbios.asm

@ -458,6 +458,33 @@ CB_BOOTMODE .DB BOOTMODE ; HBIOS BOOTMODE
CB_HEAP .DW 0
CB_HEAPTOP .DW 0
;
; SWITCHES SHADOW COPY (FROM RTC/NVR) START AT $30
;
.FILL (HCB + $30 - $),0
;
; First byte (header) of NVRAM = "W" if fully initialised, or a ststus byte
; = 0 if no NVRAM detected, or = 1 If NVR exists, but not configured
CB_SWITCHES .DB 0 ; this byte is set during init
;
; Byte 0: (L)
; Bit 7-0 DISK BOOT SLice Number to Boot -> default = 0
; Bit 7-0 ROM BOOT (alpha character) Application to boot -> default = "H"
; Byte 1: (H)
; Bit 7 - ROM/DISK - Rom or Disk Boot -> Default=ROM=1 (BOOT_DEFAULT is Numeric/Alpha)
; Bit 6-0 - DISK BOOT Disk Unit to Boot (0-127) -> default = 0
CB_SWDEFBOOT .DB 'H' ; (WORD) DEFAULT BOOT NVR OPTIONS. USED By ROMLDR
.DB DBOOT_ROM ; Default Boot - ROM Application
;
; Byte 0: (L)
; Bit 7-6 - Reserved
; Bit 5 - AUTO BOOT Auto boot, default=false (BOOT_TIMEOUT != -1)
; Bit 4 - Reserved
; Bit 3-0 - BOOT_TIMEOUT in seconds (0-15) 0=immediate -> default=3
CB_SWAUTOB .DB 0 ; AUTO BOOT NVR OPTIONS. USED By ROMLDR
;
; CHECKSUM
CB_SWITCHCK .DB 0 ; CHECKSUM (XOR=0), INCLUDES HEADER and CB_VERSION
;
; STANDARD BANK ID'S START AT $D8. DEFAULT VALUES FOR 512KB SYSTEM WITH NO RESERVED BANKS
;
.FILL (HCB + $D8 - $),0
@ -3349,6 +3376,32 @@ IS_REC_M1:
CALL CALLLIST
;
;--------------------------------------------------------------------------------------------------
; NV-SWITCH INITITIALISATION
; Requires functional RTC NVR
;--------------------------------------------------------------------------------------------------
;
NVR_INIT:
; Check for the existence of NV RAM by attempting to read a byte
LD B,BF_RTCGETBYT ; GET RTC BYTE
LD C,0 ; FIRST Byte address in RTC
CALL RTC_DISPATCH ; CALL RTC
JR NZ,NVR_INIT_END ; GET BYTE Failed; Noting to do, HCB is correct. Status =0
;
CALL NVSW_READ ; read the full data into hcb
JR NZ, NVR_INIT_DEF ; failed to correclty read data
;
CALL NVSW_CHECKSUM ; checksum calc into A
LD HL,CB_SWITCHCK ; address of HCB value
CP (HL) ; compare Caculated Check, with hcb Check Value
JR Z,NVR_INIT_END ; The same so success
NVR_INIT_DEF:
; failed Read or Checksum
CALL NVSW_DEFAULTS ; set defaults into HCB, which include the "W" first byte
LD HL,CB_SWITCHES ; which is incorrect, need the value of 1
LD (HL),1 ; to indicate we while not inited, we do have NVRAM
NVR_INIT_END:
;
;--------------------------------------------------------------------------------------------------
; WATCHDOG ACTIVATION
;--------------------------------------------------------------------------------------------------
;
@ -5474,6 +5527,8 @@ SYS_GET:
JP Z, SYS_GETSNDCNT
CP BF_SYSGET_SNDFN
JP Z,SYS_GETSNDFN
CP BF_SYSGET_SWITCH
JP Z,SYS_GETSWITCH
CP BF_SYSGET_TIMER
JP Z,SYS_GETTIMER
CP BF_SYSGET_SECS
@ -5626,6 +5681,45 @@ SYS_GETFN:
POP DE ; ... TO DE
RET ; AF STILL HAS RESULT OF CALC
;
; GET SWITCH
; ON ENTRY:
; D: SWITCH KEY
; 0 -> ILLEGAL / RESERVED
; 1-FE -> SWITCH
; FF -> DONT GET VALUE CHECK THE STATUS OF NVRAM -> Returning
; A=0 if no NVRAM exists. with NZ flag set
; A=1 if NVRAM is present. with Z flag set
; A='W' if NVRAM is fullly inited. with Z flag set
; Note the NZ flag can be used to detect and return an error condition
; RETURNS:
; HL: SWITCH VALUE 8/16 BIT
;
SYS_GETSWITCH:
; PUSH DE
; CALL NVSW_CONFIG ; make sure shadow copy is inited
; POP DE ;
; RET NZ ; Configuration Failed, thus cant continue
;
LD A,D
CP $FF ; test if want to just get NVRAM status
JR Z,NVSW_STATUS ; Check the Status - Call and Return
;
CALL SWITCH_RES ; D SWITCH NUMBER -> OUT HL address, E FLAGS
RET NZ ; IF NZ FLAG SET THEN ISSUE
;
LD B,0 ; Clear upper byte
LD C,(HL) ; Get LOW Order Switch Data
LD A,1 ; Compare with 1 (byte)
CP E ; Compare The byte count from SWITCH_RES
JR NC,SYS_GETSWITCH2 ; 1 byte or less, skip over
INC HL ; next byte pos in a 2 Byte Switch
LD B,(HL) ; Get HIGH Order Switch Data
;
SYS_GETSWITCH2:
LD H,B ; retun Result in HL
LD L,C
XOR A ; signal success
RET
#IF ((CPUFAM == CPU_EZ80) & (EZ80TIMER == EZ80TMR_FIRM))
; IMPLEMENTED IN EZ80DRV.ASM
;
@ -5854,6 +5948,8 @@ SYS_GETAPPBNKS:
;
SYS_SET:
LD A,C ; GET REQUESTED SUB-FUNCTION
CP BF_SYSSET_SWITCH
JP Z,SYS_SETSWITCH
CP BF_SYSSET_TIMER
JP Z,SYS_SETTIMER
CP BF_SYSSET_SECS
@ -5867,6 +5963,76 @@ SYS_SET:
SYSCHKERR(ERR_NOFUNC) ; SIGNAL ERROR
RET
;
; SET SWITCH
; ON ENTRY:
; D: SWITCH KEY
; 0 -> ILLEGAL / RESERVED
; 1-254 -> SWITCH
; FF -> REINIT DEFAULT VALUES
; HL: SWITCH VALUE 8/16 BIT
;
SYS_SETSWITCH:
CALL NVSW_STATUS ; Check the status of NV RAM
RET NZ ; IF NZ then we cant continue, return NZ at this point
;
LD A,D ; switch # argument
CP $FF ; test if want to reset NVRAM
JP Z,NVSW_RESET ; then perform reset function. CALL AND RETURN
;
LD B,H ; move value to write into BC
LD C,L
CALL SWITCH_RES ; IN D SWITCH NUMBER -> OUT HL address, E FLAGS
RET NZ ; RETURN IF NZ - swich number illegal
;
LD (HL),C ; Save LOW Order Switch Data
LD A,1 ; Compare with 1 (byte) switch
CP E ; Compare
JR NC,SYS_SETSWITCH1 ; 1 byte or less, skip over
INC HL ; next byte pos
LD (HL),B ; Save High Order Switch Data
;
SYS_SETSWITCH1:
JP NVSW_UPDATE ; do a write to NVR, CALL AND RETURN
;
; Utility function to convert switch number into lookup
; INPUT
; D SWITCH NUMBER
; OUTPUT
; E with Byte count (1,2) for switch, or 0 if switch illegal
; HL Memory Address (CB_SWITCHES + offset)
SWITCH_RES:
LD A,SWITCH_LEN ; lengt of target array (below)
CP D ; check we fit in the loop
JR C,SWITCH_RES1 ; overflow table to abort
;
LD HL,SWITCH_TAB ; Lookup table below
LD A,D ; plus the offset switch number
CALL ADDHLA ; get address of lookup table
LD E,(HL) ; E (OUT) nubmer of bytes in switch
;
LD HL,CB_SWITCHES ; BASE ADDRESS OF SHADDOW DATA
LD A,D ; Add The offset to the address
CALL ADDHLA ; Final address of Switch Data
;
XOR A ; signal success
RET
SWITCH_RES1:
OR $FF ; signal failure
RET
;
; Switch number maps drectly into the HCB data, so to account
; for double bytes words, we need a table (loopkup)
; to defines how to map Applicability of Each Swicth Number
; 0->Cant be Used; 1->Single Byte Value; 2->Double Byte Value
;
SWITCH_TAB:
.DB 0 ; Switch 0 is header, cant be used
.DB 2 ; Switch 1 - (WORD)
.DB 0 ; Switch (byte 2) of prior word, not used
.DB 1 ; Switch 3 - (BYTE)
.DB 0 ; Last byte is checksum, cant be used
SWITCH_LEN .EQU $ - SWITCH_TAB - 2
;
; SET BOOT INFORMATION
; ON ENTRY:
; L: BOOT BANK ID
@ -7399,6 +7565,128 @@ Z2DMAADR2:
;
#ENDIF
;
;--------------------------------------------------------------------------------------------------
; ROUTINES FOR NON VOLITILE (NVRAM) SWITCHES
;--------------------------------------------------------------------------------------------------
;
; Return Status
; A=0 if no NVRAM exists. with NZ flag set
; A=1 if NVRAM is present. with Z flag set
; A='W' if NVRAM is fullly inited. with Z flag set
; Note the NZ flag can be used to detect and return an error condition
;
NVSW_STATUS:
LD A,(CB_SWITCHES) ; the status byte
LD B,A ; save it
AND 1 ; applies to 'W' and $01 status, -> 1
CP 1 ; set NZ based on A = 1
LD A,B ; return the
RET
;
; RESET CONTENTS OF NVRAM, STORING INTO
; RETURN NONZERO IF WRITTEN - ZERO IF NOT WRITTEN
;
NVSW_RESET:
CALL NVSW_DEFAULTS ; copy defaults into HCB
; Fall Through and Update (write) status
; JP NVSW_UPDATE
;
; UPDATE HBIOS SHADOW TO NVRAM, AFTER SETTING HBIOS VALUE
; RETURN NONZERO IF WRITTEN - ZERO IF NOT WRITTEN
;
NVSW_UPDATE:
CALL NVSW_CHECKSUM ; CALC checksum into A
LD (CB_SWITCHCK),A ; store checksum in hcb
CALL NVSW_WRITE ; write the bytes to nvr
RET Z ; Successful write, return
; write failed for some reason ???
LD A,1
LD (CB_SWITCHES),A ; ensure hcb signature=1
OR $FF ; failure
RET ; return NZ flag
;
; PERFORM CHECKSUM CALC OF DATA IN HCB
; RETURN A REGISTER -> CONTAINING THE CHECKSUM
;
NVSW_CHECKSUM:
XOR A
LD B,NVSW_SIZE ; NUMBER OF BYTES TO CHECK
LD HL,CB_SWITCHES ; First Byte in HBIOS (HCB)
NVSW_CHECKSM1:
XOR (HL) ; XOR The Byte
INC HL ; HL address
DJNZ NVSW_CHECKSM1 ; LOOP
XOR RMJ << 4 | RMN ; FIRST BYTE OF VERSION INFO
XOR RUP << 4 | RTP ; SECOND BYTE OF VERSION INFO
RET
;
; COPY DEFAULTS INTO HCB
;
NVSW_DEFAULTS:
LD HL,NVSW_DEFAULT ; Copy default bytes from
LD DE,CB_SWITCHES ; to hbios HCB location
LD BC,NVSW_SIZE ; number of bytes top copy
LDIR ; copy bytes
RET
;
; LOAD BYTES FROM NVR - INTO HBIOS DCB
; RETURN ZERO IF READ SUCCESS, NON-ZERO IF CANT READ
;
NVSW_READ:
LD B,NVSW_SIZE + 1 ; NUMBER OF BYTES, + 1 for CHECKSUM
LD C,0 ; FIRST Byte address in RTC
LD HL,CB_SWITCHES ; First Byte in HBIOS (HCB)
NVSW_READ1:
PUSH HL ; SAVE ADDRESS
PUSH BC ; Save Loop counter
LD B,BF_RTCGETBYT ; GET RTC BYTE (at a time), requires loop
CALL RTC_DISPATCH ; CALL RTC
POP BC ; Restore Loop
POP HL ; restore Block pointer
RET NZ ; ERROR JUST RETURN
LD (HL),E ; store IT
INC C ; RTC Byte address
INC HL ; HL address
DJNZ NVSW_READ1 ; LOOP to the next byte
NVSW_READ2:
LD A,(CB_SWITCHES) ; FIRST BYTE
CP 'W' ; MUST BE 'W'
RET ; ZERO IF OK, NON-ZERO IF ISSUE
;
; SAVE BYTES FROM HBIOS DCB - INTO NVR
; RETURN ZERO IF SUCCESS, NON-ZERO IF CANT WRITE
;
NVSW_WRITE:
LD B,NVSW_SIZE + 1 ; NUMBER OF BYTES, + 1 for CHECKSUM
LD C,0 ; FIRST Byte address in RTC
LD HL,CB_SWITCHES ; First Byte in HBIOS (HCB)
NVSW_WRITE1:
PUSH HL ; SAVE ADDRESS
PUSH BC ; Save Loop counter
LD E,(HL) ; Value to Write
LD B,BF_RTCSETBYT ; SET RTC BYTE
CALL RTC_DISPATCH ; CALL RTC
POP BC ; Restore Loop
POP HL ; restore Block pointer
RET NZ ; ERROR JUST RETURN
INC C ; RTC Byte address
INC HL ; HL address
DJNZ NVSW_WRITE1 ; LOOP, One Byte at a Time
NVSW_WRITE2:
XOR A ; SUCCESS
RET ; ZERO IF OK, NON-ZERO IF ISSUE
;
; DEFAULT VALUES FOR NVRAM, USED TO RESET NVR
;
NVSW_DEFAULT:
.DB 'W' ; Signature Byte
.DB 'H' ; Default Boot - Rom Application [H]elp
.DB DBOOT_ROM ; Default Boot - ROM Application
.DB 0 ; Auto Boot - NO auto boot
; Configure above byte from (BOOT_TIMEOUT != -1)
; SIZE OF NVR BYTES
NVSW_SIZE .EQU $ - NVSW_DEFAULT
;
HB_INTFUNC_END .EQU $
;
;==================================================================================================

53
Source/HBIOS/hbios.inc

@ -120,6 +120,8 @@ BF_SYSGET_VDACNT .EQU $40 ; GET VDA UNIT COUNT
BF_SYSGET_VDAFN .EQU $41 ; GET VDA UNIT FN/DATA ADR
BF_SYSGET_SNDCNT .EQU $50 ; GET VDA UNIT COUNT
BF_SYSGET_SNDFN .EQU $51 ; GET SND UNIT FN/DATA ADR
;
BF_SYSGET_SWITCH .EQU $C0 ; GET NON VOLITILE SWITCH VALUE
BF_SYSGET_TIMER .EQU $D0 ; GET CURRENT TIMER VALUE
BF_SYSGET_SECS .EQU $D1 ; GET CURRENT SECONDS VALUE
BF_SYSGET_BOOTINFO .EQU $E0 ; GET BOOT INFORMATION
@ -130,6 +132,7 @@ BF_SYSGET_CPUSPD .EQU $F3 ; GET CLOCK SPEED & WAIT STATES
BF_SYSGET_PANEL .EQU $F4 ; GET FRONT PANEL SWITCHES VAL
BF_SYSGET_APPBNKS .EQU $F5 ; GET APP BANK INFORMATION
;
BF_SYSSET_SWITCH .EQU $C0 ; SET NON VOLITILE SWITCH VALUE
BF_SYSSET_TIMER .EQU $D0 ; SET TIMER VALUE
BF_SYSSET_SECS .EQU $D1 ; SET SECONDS VALUE
BF_SYSSET_BOOTINFO .EQU $E0 ; SET BOOT INFORMATION
@ -140,6 +143,38 @@ BF_SYSINT_INFO .EQU $00 ; GET INTERRUPT SYSTEM INFO
BF_SYSINT_GET .EQU $10 ; GET INT VECTOR ADDRESS
BF_SYSINT_SET .EQU $20 ; SET INT VECTOR ADDRESS
;
; 2 BYTE FUNCTION/SUBFUNCTION : BC_ => BIOS CALL
; e.g. LOAD BC, BC_SYSxxxx (avoid load B and C seperately)
;
BC_SYSGET_CIOCNT .EQU BF_SYSGET * $100 + BF_SYSGET_CIOCNT
BC_SYSGET_CIOFN .EQU BF_SYSGET * $100 + BF_SYSGET_CIOFN
BC_SYSGET_DIOCNT .EQU BF_SYSGET * $100 + BF_SYSGET_DIOCNT
BC_SYSGET_DIOFN .EQU BF_SYSGET * $100 + BF_SYSGET_DIOFN
BC_SYSGET_RTCCNT .EQU BF_SYSGET * $100 + BF_SYSGET_RTCCNT
BC_SYSGET_DSKYCNT .EQU BF_SYSGET * $100 + BF_SYSGET_DSKYCNT
BC_SYSGET_VDACNT .EQU BF_SYSGET * $100 + BF_SYSGET_VDACNT
BC_SYSGET_VDAFN .EQU BF_SYSGET * $100 + BF_SYSGET_VDAFN
BC_SYSGET_SNDCNT .EQU BF_SYSGET * $100 + BF_SYSGET_SNDCNT
BC_SYSGET_SNDFN .EQU BF_SYSGET * $100 + BF_SYSGET_SNDFN
;
BC_SYSGET_SWITCH .EQU BF_SYSGET * $100 + BF_SYSGET_SWITCH
BC_SYSGET_TIMER .EQU BF_SYSGET * $100 + BF_SYSGET_TIMER
BC_SYSGET_SECS .EQU BF_SYSGET * $100 + BF_SYSGET_SECS
BC_SYSGET_BOOTINFO .EQU BF_SYSGET * $100 + BF_SYSGET_BOOTINFO
BC_SYSGET_CPUINFO .EQU BF_SYSGET * $100 + BF_SYSGET_CPUINFO
BC_SYSGET_MEMINFO .EQU BF_SYSGET * $100 + BF_SYSGET_MEMINFO
BC_SYSGET_BNKINFO .EQU BF_SYSGET * $100 + BF_SYSGET_BNKINFO
BC_SYSGET_CPUSPD .EQU BF_SYSGET * $100 + BF_SYSGET_CPUSPD
BC_SYSGET_PANEL .EQU BF_SYSGET * $100 + BF_SYSGET_PANEL
BC_SYSGET_APPBNKS .EQU BF_SYSGET * $100 + BF_SYSGET_APPBNKS
;
BC_SYSSET_SWITCH .EQU BF_SYSSET * $100 + BF_SYSSET_SWITCH
BC_SYSSET_TIMER .EQU BF_SYSSET * $100 + BF_SYSSET_TIMER
BC_SYSSET_SECS .EQU BF_SYSSET * $100 + BF_SYSSET_SECS
BC_SYSSET_BOOTINFO .EQU BF_SYSSET * $100 + BF_SYSSET_BOOTINFO
BC_SYSSET_CPUSPD .EQU BF_SYSSET * $100 + BF_SYSSET_CPUSPD
BC_SYSSET_PANEL .EQU BF_SYSSET * $100 + BF_SYSSET_PANEL
;
CIO_CONSOLE .EQU $80 ; CIO UNIT NUM FOR CUR CON
;
; PRIMARY HARDWARE PLATFORMS
@ -302,6 +337,21 @@ SW_DISK .EQU %00010000 ; DISK/ROM
SW_FLOP .EQU %00001000 ; FLOP/HD
SW_OPT .EQU %00000111 ; SLICE/ROM APP
;
; NVRAM SWITCHES
;
; used for identifying Non Volitile Switches
NVSW_DEFBOOT .EQU 1 ; Default Boot NVRAM Switch
NVSW_AUTOBOOT .EQU 3 ; Auto Boot NVRAM Switch
;
; NVRAM SWITCH BIT MASKS
;
; AUTO BOOT MASKS
ABOOT_AUTO .EQU %00100000 ; AUTO=1/MANUAL=0 BOOT
ABOOT_TIMEOUT .EQU %00001111 ; MENU TIMEOUT IN SECONDS, 0=IMMEDIAGE
; DEFAULT BOOT MASKS
DBOOT_ROM .EQU %10000000 ; ROM=1/DISK=0 FLAG
DBOOT_UNIT .EQU %01111111 ; DISK UNIT
;
; MEDIA ID VALUES
;
MID_NONE .EQU 0
@ -460,6 +510,9 @@ HCB_BOOTMODE .EQU $14 ; HBIOS BOOTMODE (BYTE)
HCB_HEAP .EQU $20 ; DWORD ADDRESS OF START OF HEAP
HCB_HEAPTOP .EQU $22 ; DWORD ADDRESS OF TOP OF HEAP
;
HCB_SW_DBOOT .EQU $31 ; DEFAULT BOOT CONFIG (WORD)
HCB_SW_AUTOB .EQU $33 ; AUTO BOOT CONFIG (BYTE)
;
; MEMORY BANK IDS (ONE BYTE EACH)
HCB_BIDCOM .EQU $D8 ; COMMON BANK (UPPER 32K)
HCB_BIDUSR .EQU $D9 ; USER BANK (TPA)

9722
Source/HBIOS/hbios_new.asm

File diff suppressed because it is too large

101
Source/HBIOS/layout.inc

@ -0,0 +1,101 @@
;
; The was extracted out of STD.ASM, so can be included
; in BIOS apps that are NOT in HBIOS directory!
;
; =============
; MEMORY LAYOUT
; =============
;
SYS_SIZ .EQU $3000 ; COMBINED SIZE OF SYSTEM AREA (OS + HBIOS PROXY)
HBBUF_SIZ .EQU 1024 ; INVARIANT HBIOS PHYSICAL DISK BUFFER, 1K
HBX_SIZ .EQU $200 ; HBIOS PROXY SIZE (SUBJECT TO CHANGE)
CPM_SIZ .EQU SYS_SIZ - HBX_SIZ ; NET SIZE OF ALL OS COMPONENTS (EXCLUDING HBIOS PROXY)
CCP_SIZ .EQU $800 ; INVARIANT SIZE OF CCP
BDOS_SIZ .EQU $E00 ; INVARIANT SIZE OF BDOS
CBIOS_SIZ .EQU CPM_SIZ - CCP_SIZ - BDOS_SIZ ; CBIOS IS THE REMAINDER
;
MEMTOP .EQU $10000 ; INVARIANT TOP OF Z80 ADDRESSABLE MEMORY
BNKTOP .EQU $8000 ; BANK MEMORY BARRIER
;
HBX_IMG .EQU $200 ; LOC OF HBX IMAGE IN HBIOS IMAGE BANK
;
HBBUF_END .EQU BNKTOP ; END OF PHYSICAL DISK BUFFER IN HBIOS
HBBUF_LOC .EQU HBBUF_END - HBBUF_SIZ ; START OF PHYSICAL DISK BUFFER
HBX_END .EQU MEMTOP ; END OF HBIOS PROXY
HBX_LOC .EQU HBX_END - HBX_SIZ ; START OF HBIOS PROXY
CPM_END .EQU HBX_LOC ; END OF CPM COMPONENTS (INCLUDING CBIOS)
CPM_LOC .EQU CPM_END - CPM_SIZ ; START OF CPM COMPONENTS
CBIOS_END .EQU HBX_LOC ; END OF CBIOS
CBIOS_LOC .EQU CBIOS_END - CBIOS_SIZ ; START OF CBIOS
;
CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS)
;
CPM_IMGSIZ .EQU $3000
;
; =================
; ROM BANK 1 LAYOUT
; =================
;
LDR_LOC .EQU $0000
LDR_SIZ .EQU $1000
LDR_END .EQU LDR_LOC +LDR_SIZ
LDR_IMGLOC .EQU $0000
;
MON_LOC .EQU $EE00 ; LOCATION OF MONITOR FOR RUNNING SYSTEM
MON_SIZ .EQU $1000 ; SIZE OF MONITOR BINARY IMAGE
MON_END .EQU MON_LOC + MON_SIZ ; END OF MONITOR
MON_IMGLOC .EQU LDR_IMGLOC + LDR_SIZ
;
ZSYS_IMGLOC .EQU MON_IMGLOC + MON_SIZ
;
CPM_IMGLOC .EQU ZSYS_IMGLOC + CPM_IMGSIZ
;
; =================
; ROM BANK 2 LAYOUT
; =================
;
FTH_LOC .EQU $0200 ; CAMEL FORTH
FTH_SIZ .EQU $1700
FTH_END .EQU FTH_LOC + FTH_SIZ
FTH_IMGLOC .EQU $0000
BAS_LOC .EQU $0200 ; NASCOM BASIC
BAS_SIZ .EQU $2000
BAS_END .EQU BAS_LOC + BAS_SIZ
BAS_IMGLOC .EQU FTH_IMGLOC + FTH_SIZ
;
; NOTE FOLLOWING ARE COPY/PASTED INTO tastybasic.asm !!!!!!!!
TBC_LOC .EQU $0A00 ; TASTYBASIC
TBC_SIZ .EQU $0A00
TBC_END .EQU TBC_LOC + TBC_SIZ
TBC_IMGLOC .EQU BAS_IMGLOC + BAS_SIZ
;
GAM_LOC .EQU $0200 ; GAME 2048
GAM_SIZ .EQU $0900
GAM_END .EQU GAM_LOC + GAM_SIZ
GAM_IMGLOC .EQU TBC_IMGLOC + TBC_SIZ
;
EGG_LOC .EQU $F000 ; EASTER EGG
EGG_SIZ .EQU $0200
EGG_END .EQU EGG_LOC + EGG_SIZ
EGG_IMGLOC .EQU GAM_IMGLOC + GAM_SIZ
;
NET_LOC .EQU $0100 ; NETWORK BOOT
NET_SIZ .EQU $1000
NET_END .EQU NET_LOC + NET_SIZ
NET_IMGLOC .EQU EGG_IMGLOC + EGG_SIZ
;
UPD_LOC .EQU $0200 ; ROM UPDATER
UPD_SIZ .EQU $0D00
UPD_END .EQU UPD_LOC + UPD_SIZ
UPD_IMGLOC .EQU NET_IMGLOC + NET_SIZ
;
NVR_LOC .EQU $0100 ; NVRAM CONFIG
NVR_SIZ .EQU $0800
NVR_END .EQU NVR_LOC + NVR_SIZ
NVR_IMGLOC .EQU UPD_IMGLOC + UPD_SIZ
;
USR_LOC .EQU $0200 ; USER
USR_SIZ .EQU BNKTOP - NVR_IMGLOC - NVR_SIZ
USR_END .EQU USR_LOC + USR_SIZ
USR_IMGLOC .EQU NVR_IMGLOC + NVR_SIZ

8
Source/HBIOS/romldr.asm

@ -1835,10 +1835,10 @@ getnum32a:
; X * 10 = (((x * 2 * 2) + x)) * 2
push de
push hl
;
;
call getnum32e ; DE:HL *= 2
jr c,getnum32d ; if overflow, ret w/ CF & stack pop
;
;
call getnum32e ; DE:HL *= 2
jr c,getnum32d ; if overflow, ret w/ CF & stack pop
;
@ -1849,7 +1849,7 @@ getnum32a:
adc hl,bc
ex de,hl
ret c ; if overflow, ret w/ CF
;
;
call getnum32e ; DE:HL *= 2
ret c ; if overflow, ret w/ CF
;
@ -2456,6 +2456,7 @@ ra_ent(str_fth, 'F', KY_EX, BID_IMG1, FTH_IMGLOC, FTH_LOC, FTH_SIZ, FTH_LO
ra_ent(str_play, 'P', $FF, BID_IMG1, GAM_IMGLOC, GAM_LOC, GAM_SIZ, GAM_LOC)
ra_ent(str_net, 'N', $FF, BID_IMG1, NET_IMGLOC, NET_LOC, NET_SIZ, NET_LOC)
ra_ent(str_upd, 'X', $FF, BID_IMG1, UPD_IMGLOC, UPD_LOC, UPD_SIZ, UPD_LOC)
ra_ent(str_nvr, 'W', $FF, BID_IMG1, NVR_IMGLOC, NVR_LOC, NVR_SIZ, NVR_LOC)
ra_ent(str_user, 'U', $FF, BID_IMG1, USR_IMGLOC, USR_LOC, USR_SIZ, USR_LOC)
#endif
#if (DSKYENABLE)
@ -2484,6 +2485,7 @@ str_bas .db "BASIC",0
str_tbas .db "Tasty BASIC",0
str_play .db "Play a Game",0
str_upd .db "XModem Flash Updater",0
str_nvr .db "RomWBW Configure", 0
str_user .db "User App",0
str_egg .db "",0
str_net .db "Network Boot",0

93
Source/HBIOS/std.asm

@ -26,7 +26,7 @@
; 22. NABU NABU w/ Les Bird's RomWBW Option Board
; 23. FZ80 S100 Computers FPGA Z80
; 24. RCZ80 RCBus eZ80
;
;
;
; INCLUDE BUILD VERSION
;
@ -938,92 +938,13 @@ APP_BNKS .SET 0
.ECHO "----------------------------------------\n"
#ENDIF
;
; MEMORY LAYOUT
; ---------------------------
; Memory and ROM Bank Layouts
; ---------------------------
;
#INCLUDE "layout.inc"
;
;
SYS_SIZ .EQU $3000 ; COMBINED SIZE OF SYSTEM AREA (OS + HBIOS PROXY)
HBBUF_SIZ .EQU 1024 ; INVARIANT HBIOS PHYSICAL DISK BUFFER, 1K
HBX_SIZ .EQU $200 ; HBIOS PROXY SIZE (SUBJECT TO CHANGE)
CPM_SIZ .EQU SYS_SIZ - HBX_SIZ ; NET SIZE OF ALL OS COMPONENTS (EXCLUDING HBIOS PROXY)
CCP_SIZ .EQU $800 ; INVARIANT SIZE OF CCP
BDOS_SIZ .EQU $E00 ; INVARIANT SIZE OF BDOS
CBIOS_SIZ .EQU CPM_SIZ - CCP_SIZ - BDOS_SIZ ; CBIOS IS THE REMAINDER
MEMTOP .EQU $10000 ; INVARIANT TOP OF Z80 ADDRESSABLE MEMORY
BNKTOP .EQU $8000 ; BANK MEMORY BARRIER
HBX_IMG .EQU $200 ; LOC OF HBX IMAGE IN HBIOS IMAGE BANK
HBBUF_END .EQU BNKTOP ; END OF PHYSICAL DISK BUFFER IN HBIOS
HBBUF_LOC .EQU HBBUF_END - HBBUF_SIZ ; START OF PHYSICAL DISK BUFFER
HBX_END .EQU MEMTOP ; END OF HBIOS PROXY
HBX_LOC .EQU HBX_END - HBX_SIZ ; START OF HBIOS PROXY
CPM_END .EQU HBX_LOC ; END OF CPM COMPONENTS (INCLUDING CBIOS)
CPM_LOC .EQU CPM_END - CPM_SIZ ; START OF CPM COMPONENTS
CBIOS_END .EQU HBX_LOC ; END OF CBIOS
CBIOS_LOC .EQU CBIOS_END - CBIOS_SIZ ; START OF CBIOS
CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS)
CPM_IMGSIZ .EQU $3000
; ROM BANK 1
LDR_LOC .EQU $0000
LDR_SIZ .EQU $1000
LDR_END .EQU LDR_LOC +LDR_SIZ
LDR_IMGLOC .EQU $0000
MON_LOC .EQU $EE00 ; LOCATION OF MONITOR FOR RUNNING SYSTEM
MON_SIZ .EQU $1000 ; SIZE OF MONITOR BINARY IMAGE
MON_END .EQU MON_LOC + MON_SIZ ; END OF MONITOR
MON_IMGLOC .EQU LDR_IMGLOC + LDR_SIZ
ZSYS_IMGLOC .EQU MON_IMGLOC + MON_SIZ
CPM_IMGLOC .EQU ZSYS_IMGLOC + CPM_IMGSIZ
; ROM BANK 2
FTH_LOC .EQU $0200 ; CAMEL FORTH
FTH_SIZ .EQU $1700
FTH_END .EQU FTH_LOC + FTH_SIZ
FTH_IMGLOC .EQU $0000
BAS_LOC .EQU $0200 ; NASCOM BASIC
BAS_SIZ .EQU $2000
BAS_END .EQU BAS_LOC + BAS_SIZ
BAS_IMGLOC .EQU FTH_IMGLOC + FTH_SIZ
TBC_LOC .EQU $0A00 ; TASTYBASIC
TBC_SIZ .EQU $0A00
TBC_END .EQU TBC_LOC + TBC_SIZ
TBC_IMGLOC .EQU BAS_IMGLOC + BAS_SIZ
GAM_LOC .EQU $0200 ; GAME 2048
GAM_SIZ .EQU $0900
GAM_END .EQU GAM_LOC + GAM_SIZ
GAM_IMGLOC .EQU TBC_IMGLOC + TBC_SIZ
EGG_LOC .EQU $F000 ; EASTER EGG
EGG_SIZ .EQU $0200
EGG_END .EQU EGG_LOC + EGG_SIZ
EGG_IMGLOC .EQU GAM_IMGLOC + GAM_SIZ
NET_LOC .EQU $0100 ; NETWORK BOOT
NET_SIZ .EQU $1000
NET_END .EQU NET_LOC + NET_SIZ
NET_IMGLOC .EQU EGG_IMGLOC + EGG_SIZ
UPD_LOC .EQU $0200 ; ROM UPDATER
UPD_SIZ .EQU $0D00
UPD_END .EQU UPD_LOC + UPD_SIZ
UPD_IMGLOC .EQU NET_IMGLOC + NET_SIZ
USR_LOC .EQU $0200 ; USER
USR_SIZ .EQU BNKTOP - UPD_IMGLOC - UPD_SIZ
USR_END .EQU USR_LOC + USR_SIZ
USR_IMGLOC .EQU UPD_IMGLOC + UPD_SIZ
MON_DSKY .EQU MON_LOC + (0 * 3) ; MONITOR ENTRY (DSKY)
MON_SERIAL .EQU MON_LOC + (1 * 3) ; MONITOR ENTRY (SERIAL PORT)
;

1
Source/Images/hd_bp.txt

@ -24,6 +24,7 @@
../../Binary/Apps/mode.com 15:
../../Binary/Apps/rtc.com 15:
../../Binary/Apps/survey.com 15:
../../Binary/Apps/sysconfig.com 15:
../../Binary/Apps/syscopy.com 15:
../../Binary/Apps/sysgen.com 15:
../../Binary/Apps/talk.com 15:

1
Source/Images/hd_cpm22.txt

@ -20,6 +20,7 @@ d_cpm22/ReadMe.txt 0:
../../Binary/Apps/mode.com 0:
../../Binary/Apps/rtc.com 0:
../../Binary/Apps/survey.com 0:
../../Binary/Apps/sysconfig.com 0:
../../Binary/Apps/syscopy.com 0:
../../Binary/Apps/sysgen.com 0:
../../Binary/Apps/talk.com 0:

1
Source/Images/hd_cpm3.txt

@ -39,6 +39,7 @@ d_cpm3/ReadMe.txt 0:
../../Binary/Apps/mode.com 0:
../../Binary/Apps/rtc.com 0:
../../Binary/Apps/survey.com 0:
../../Binary/Apps/sysconfig.com 0:
../../Binary/Apps/syscopy.com 0:
#../../Binary/Apps/sysgen.com 0:
#../../Binary/Apps/talk.com 0:

1
Source/Images/hd_nzcom.txt

@ -35,6 +35,7 @@ d_zsdos/u0/*.DAT 15:
../../Binary/Apps/mode.com 15:
../../Binary/Apps/rtc.com 15:
../../Binary/Apps/survey.com 15:
../../Binary/Apps/sysconfig.com 15:
../../Binary/Apps/syscopy.com 15:
../../Binary/Apps/sysgen.com 15:
../../Binary/Apps/talk.com 15:

1
Source/Images/hd_qpm.txt

@ -24,6 +24,7 @@ d_cpm22/u0/*.* 0:
../../Binary/Apps/mode.com 0:
../../Binary/Apps/rtc.com 0:
../../Binary/Apps/survey.com 0:
../../Binary/Apps/sysconfig.com 0:
../../Binary/Apps/syscopy.com 0:
../../Binary/Apps/sysgen.com 0:
../../Binary/Apps/talk.com 0:

1
Source/Images/hd_z3plus.txt

@ -46,6 +46,7 @@ d_cpm3/u0/HELP.HLP 0:
../../Binary/Apps/mode.com 15:
../../Binary/Apps/rtc.com 15:
../../Binary/Apps/survey.com 15:
../../Binary/Apps/sysconfig.com 15:
../../Binary/Apps/syscopy.com 15:
../../Binary/Apps/sysgen.com 15:
../../Binary/Apps/talk.com 15:

1
Source/Images/hd_zpm3.txt

@ -45,6 +45,7 @@ d_cpm3/u0/HELP.HLP 0:
../../Binary/Apps/mode.com 15:
../../Binary/Apps/rtc.com 15:
../../Binary/Apps/survey.com 15:
../../Binary/Apps/sysconfig.com 15:
../../Binary/Apps/syscopy.com 15:
../../Binary/Apps/sysgen.com 15:
../../Binary/Apps/talk.com 15:

1
Source/Images/hd_zsdos.txt

@ -24,6 +24,7 @@ d_cpm22/u0/*.* 0:
../../Binary/Apps/mode.com 0:
../../Binary/Apps/rtc.com 0:
../../Binary/Apps/survey.com 0:
../../Binary/Apps/sysconfig.com 0:
../../Binary/Apps/syscopy.com 0:
../../Binary/Apps/sysgen.com 0:
../../Binary/Apps/talk.com 0:

Loading…
Cancel
Save