Browse Source

Support for additional rom options including Nascom and Tasty BASIC

pull/14/head
b1ackmai1er 7 years ago
committed by GitHub
parent
commit
40b40b7fa5
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 94
      Source/HBIOS/hbios.asm
  2. 12
      Source/HBIOS/imgpad.asm
  3. 12
      Source/HBIOS/imgpad0.asm
  4. 4424
      Source/HBIOS/nascom.asm
  5. 153
      Source/HBIOS/romldr.asm
  6. 12
      Source/HBIOS/std.asm
  7. 1813
      Source/HBIOS/tastybasic.asm

94
Source/HBIOS/hbios.asm

@ -546,13 +546,6 @@ INT_SIO: ; SIO INTERRUPT HANDLER
LD HL,SIO_INT ; HL := SIO INT HANDLER IN BIOS BANK
JR HBX_INT ; GO TO ROUTING CODE
#ENDIF
#IF (PIOENABLE)
INT_PIO: ; SIO INTERRUPT HANDLER
PUSH HL ; SAVE HL
LD HL,PIO_INT ; HL := PIO INT HANDLER IN BIOS BANK
JR HBX_INT ; GO TO ROUTING CODE
#ENDIF
;
#ENDIF
;
@ -867,10 +860,6 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
#IF (ACIAENABLE)
CALL ACIA_PREINIT
#ENDIF
#IF (PIOENABLE)
CALL PIO_PREINIT
#ENDIF
;
DIAG(%01111111)
;
@ -1110,7 +1099,7 @@ INITSYS3:
;
#IFDEF ROMBOOT
; PERFORM BANK CALL TO OS IMAGES BANK IN ROM
LD A,BID_OSIMG ; CHAIN TO OS IMAGES BANK
LD A,BID_BIOSIMG ; CHAIN TO OS IMAGES BANK
LD HL,0 ; ENTER AT ADDRESS 0
CALL HBX_BNKCALL ; GO THERE
HALT ; WE SHOULD NEVER COME BACK!
@ -1217,9 +1206,6 @@ HB_INITTBL:
#IF (PPPENABLE)
.DW PPP_INIT
#ENDIF
#IF (PIOENABLE)
.DW PIO_INIT
#ENDIF
;
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2)
;
@ -1336,7 +1322,7 @@ CIO_ADDENT:
; WORD UNIT SPECIFIC DATA (TYPICALLY A DEVICE INSTANCE DATA ADDRESS)
;
CIO_FNCNT .EQU 7 ; NUMBER OF CIO FUNCS (FOR RANGE CHECK)
CIO_MAX .EQU 32 ; UP TO UNITS
CIO_MAX .EQU 16 ; UP TO 16 UNITS
CIO_SIZ .EQU CIO_MAX * 4 ; EACH ENTRY IS 4 BYTES
;
.DB CIO_FNCNT ; CIO FUNCTION COUNT (FOR RANGE CHECK)
@ -1399,7 +1385,7 @@ DIO_ADDENT:
; WORD UNIT SPECIFIC DATA (TYPICALLY A DEVICE INSTANCE DATA ADDRESS)
;
DIO_FNCNT .EQU 12 ; NUMBER OF DIO FUNCS (FOR RANGE CHECK)
DIO_MAX .EQU 16 ; UP TO 32 UNITS
DIO_MAX .EQU 16 ; UP TO 16 UNITS
DIO_SIZ .EQU DIO_MAX * 4 ; EACH ENTRY IS 4 BYTES
;
.DB DIO_FNCNT ; DIO FUNCTION COUNT (FOR RANGE CHECK)
@ -2400,15 +2386,6 @@ SIZ_AY .EQU $ - ORG_AY
.ECHO SIZ_AY
.ECHO " bytes.\n"
#ENDIF
#IF (PIOENABLE)
ORG_PIO .EQU $
#INCLUDE "pio.asm"
SIZ_PIO .EQU $ - ORG_PIO
.ECHO "PIO occupies "
.ECHO SIZ_PIO
.ECHO " bytes.\n"
#ENDIF
;
#DEFINE USEDELAY
#INCLUDE "util.asm"
@ -2808,7 +2785,7 @@ PS_SERIAL:
PUSH BC ; SAVE UNIT INDEX FOR LATER
;
; UNIT COLUMN
PRTS("CharIO $")
PRTS("Serial $")
LD A,C ; MOVE UNIT NUM TO A
CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT
PRTS(" $") ; PAD TO NEXT COLUMN
@ -2833,17 +2810,10 @@ PS_SERIAL:
;
PS_PRTST:
LD HL,PS_STRS232 ; ASSUME RS-232
LD A,C
AND $C0
JR Z,PS_PRTST1 ; 00 TYPE 0 - RS-232
LD HL,PS_STTERM
CP $40
JR Z,PS_PRTST1 ; 40 TYPE 1 - Terminal
LD HL,PS_STPPT
CP $80
JR Z,PS_PRTST1 ; 80 TYPE 2 - Parallel
LD HL,PS_STUDEF
; ; C0 TYPE 3 - Undefined
BIT 7,C ; 0=RS-232, 1=TERMINAL
JR Z,PS_PRTST1 ; HANDLE TERMINAL TYPE
LD HL,PS_STTERM ; TYPE IS TERMINAL
;
PS_PRTST1:
CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED
LD A,18 ; 18 CHAR FIELD
@ -2854,15 +2824,9 @@ PS_PRTST1:
; PRINT SERIAL CONFIG (UNIT IN E, ATTRIBUTE IN C)
;
PS_PRTSC:
LD A,C
AND $C0
JR Z,PS_PRTSC0_1 ; 00 TYPE 0 - RS-232
CP $40
JR Z,PS_PRTSC1 ; 40 TYPE 1 - Terminal
CP $80
JR Z,PS_PRTSC2_1 ; 80 TYPE 2 - Parallel
; ; C0 TYPE 3 - Undefined
PS_PRTSC0_1:
BIT 7,C ; 0=RS-232, 1=TERMINAL
JR NZ,PS_PRTSC1 ; PRINT TERMINAL CONFIG
;
; PRINT RS-232 CONFIG
LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG
LD C,E ; SET SERIAL UNIT NUM
@ -2920,28 +2884,6 @@ PS_PRTSC0:
;
RET
;
PS_PRTSC2_1:
; PRINT PARALLEL CONFIG
LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG
LD C,E ; SET SERIAL UNIT NUM
RST 08 ; DE:HL := I/O CONFIG
LD A,D ; TEST FOR $FF
AND E
INC A ; SET Z IF DE == $FF
JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED
LD A,E
OR A
LD HL,PS_STPPTIN ; Parallel Input
JR Z,PS_PRTST1
LD HL,PS_STPPTOUT ; Parallel Output
DEC A
JR Z,PS_PRTST1
LD HL,PS_STRPPTBD ; Parallel BiDirectional
DEC A
JP Z,PS_PRTST1
JP PS_PRTNUL
RET
;
PS_PRTSC1:
; PRINT TERMINAL CONFIG
LD A,C ; GET ATTRIBUTE VALUE
@ -2965,9 +2907,6 @@ PS_PRTSC2:
PRTS("ANSI$")
RET
;
PS_PRTPC0:
RET
;
; PRINT ONE LINE VIDEO UNIT/DEVICE INFO, VIDEO UNIT INDEX IN C
;
PS_VIDEO:
@ -3130,7 +3069,7 @@ PS_FLPED .TEXT "ED$"
;
PS_SDSTRREF:
.DW PS_SDUART, PS_SDASCI, PS_SDTERM,
.DW PS_SDPRPCON, PS_SDPPPCON, PS_SDSIO, PS_SDACIA, PS_SDPIO
.DW PS_SDPRPCON, PS_SDPPPCON, PS_SDSIO, PS_SDACIA
;
PS_SDUART .TEXT "UART$"
PS_SDASCI .TEXT "ASCI$"
@ -3139,22 +3078,17 @@ PS_SDPRPCON .TEXT "PRPCON$"
PS_SDPPPCON .TEXT "PPPCON$"
PS_SDSIO .TEXT "SIO$"
PS_SDACIA .TEXT "ACIA$"
PS_SDPIO .TEXT "PORT$"
;
; SERIAL TYPE STRINGS
;
PS_STRS232 .TEXT "RS-232$"
PS_STTERM .TEXT "Terminal$"
PS_STPPT .TEXT "Parallel$"
PS_STUDEF .TEXT "Undefined$"
;
PS_STPARMAP .DB "NONENMNS"
;
; PARALLEL TYPE STRINGS
; SERIAL TYPE STRINGS
;
PS_STPPTIN .TEXT "Input$"
PS_STPPTOUT .TEXT "Output$"
PS_STRPPTBD .TEXT "Bi-Directional$"
;
; VIDEO DEVICE STRINGS
;

12
Source/HBIOS/imgpad.asm

@ -0,0 +1,12 @@
#INCLUDE "std.asm"
;
SLACK .EQU ($8000-LDR_SIZ-MON_SIZ-SYS_SIZ-SYS_SIZ)
.FILL SLACK,00H
;
MON_STACK .EQU $
;
.ECHO "Padspace space created: "
.ECHO SLACK
.ECHO " bytes.\n"
.END

12
Source/HBIOS/imgpad0.asm

@ -0,0 +1,12 @@
#INCLUDE "std.asm"
;
SLACK .EQU ($8000-BAS_SIZ-TBC_SIZ)
.FILL SLACK,00H
;
MON_STACK .EQU $
;
.ECHO "Padspace space created: "
.ECHO SLACK
.ECHO " bytes.\n"
.END

4424
Source/HBIOS/nascom.asm

File diff suppressed because it is too large

153
Source/HBIOS/romldr.asm

@ -7,12 +7,37 @@
;
#INCLUDE "std.asm"
;
MONIMG .EQU $1000
CPMIMG .EQU $2000
ZSYSIMG .EQU $5000
; osimg.bin
;
;LDRIMG .EQU $0000 ;SIZE 0A00 > 0000-0A00
MONIMG .EQU $0A00 ;SIZE 1000 > 0A00-1A00
CPMIMG .EQU $1A00 ;SIZE 3000 > 1A00-4A00
ZSYSIMG .EQU $4A00 ;SIZE 3000 > 4A00-7A00
;
; osimg1.bin
;
BASIMG .EQU $0000 ;SIZE 2000 > 0000-2000
TBCIMG .EQU $2000 ;SIZE 0900 > 2000-2900
;
INT_IM1 .EQU $FF00
;
;----------------------------------------------------------
; NAME NAME OF ROM 8 CHAR
; BANK WHICH ROM BANK THE IMAGE IS IN.
; IMAGE LOCATION OF IMAGE IN 32K ROM BANK.
; LOCATION WHERE IMAGE NEEDS TO BE COPIED TO IN RAM.
; EXECUTE ADDRESS TO START EXECUTING.
;
;ROMTBL .DB "B","BASIC $", 0, BASIMG, BAS_LOC, BAS_SIZ, BASE_LOC
; .DB "C","CP/M $", 0,
; .DB "F","FORTH $", 1,
; .DB "Z","ZSYSTEM$", 1,
;
;
; .DB "MONITOR$", 0,
;
.ORG 0
;
;==================================================================================================
@ -62,6 +87,7 @@ INT_IM1 .EQU $FF00
; BANNER
LD DE,STR_BANNER
CALL WRITESTR
;
#IF (PLATFORM != PLT_UNA)
CALL DELAY_INIT ; INIT DELAY FUNCTIONS
@ -122,9 +148,11 @@ INT_IM1 .EQU $FF00
;________________________________________________________________________________________________________________________________
;
DOBOOTMENU:
CALL NEWLINE
LD DE,STR_BOOTMENU
; CALL NEWLINE
LD DE,STR_BOOTMENU
CALL WRITESTR
CALL PRTALL
CALL PC_COLON
#IF (DSKYENABLE)
LD HL,BOOT ; POINT TO BOOT MESSAGE
@ -144,14 +172,18 @@ DB_BOOTLOOP:
OR A
JP Z,DB_CONEND
CALL CINUC
CP 'M' ; MONITOR
JP Z,GOMONSER
CP 'B' ; NASCOM BASIC
JP Z,GOBASIC
CP 'C' ; CP/M BOOT FROM ROM
JP Z,GOCPM
CP 'M' ; MONITOR
JP Z,GOMONSER
; CP 'L' ; LIST DRIVES
; JP Z,GOLIST
CP 'T' ; TASTY BASIC
JP Z,GOTBAS
CP 'Z' ; ZSYSTEM BOOT FROM ROM
JP Z,GOZSYS
CP 'L' ; LIST DRIVES
JP Z,GOLIST
CP '0' ; 0-9, DISK DEVICE
JP C,DB_INVALID
CP '9' + 1
@ -202,14 +234,18 @@ DB_DSKYEND:
; TIMEOUT EXPIRED, PERFORM DEFAULT BOOT ACTION
LD A,BOOT_DEFAULT
CP 'M' ; MONITOR
JP Z,GOMON
CP 'B' ; NASCOM BASIC
JP Z,GOBASIC
CP 'C' ; CP/M BOOT FROM ROM
JP Z,GOCPM
CP 'M' ; MONITOR
JP Z,GOMONSER
; CP 'L' ; LIST DRIVES
; JP Z,GOLIST
CP 'T' ; TASTY BASIC
JP Z,GOTBAS
CP 'Z' ; ZSYSTEM BOOT FROM ROM
JP Z,GOZSYS
CP 'L' ; LIST DRIVES
JP Z,GOLIST
CP '0' ; 0-9, DISK DEVICE
JP C,DB_INVALID
CP '9' + 1
@ -227,6 +263,70 @@ DB_INVALID:
CALL WRITESTR
JP DOBOOTMENU
;
GOBASIC:
LD DE,STR_BOOTBAS ; DE POINTS TO MESSAGE
CALL WRITESTR ; WRITE IT TO CONSOLE
; COPY BASIC FROM BASIC FROM OSIMG0 IN ROM BANK TO THIS RAM BANKS
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
LD D,BID_USR ; D = DEST BANK = USER BANK
LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK
LD HL,BAS_SIZ ; HL = COPY LEN = 1 PAGE = 256 BYTES
RST 08 ; DO IT
LD DE,STR_LOADING
CALL WRITESTR ; WRITE IT TO CONSOLE
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
LD HL,BASIMG ; COPY FROM
LD DE,BAS_LOC ; COPY TO
RST 08 ; DO IT
LD DE,STR_LAUNCH
CALL WRITESTR
LD HL,BAS_LOC
JP CHAIN
; LD HL,BAS_LOC
; PUSH HL
; LD DE,STR_BOOTBAS ; DE POINTS TO MESSAGE
; CALL WRITESTR ; WRITE IT TO CONSOLE
; ; COPY IMAGE TO EXEC ADDRESS
; LD HL,BASIMG ; HL := BASIC IMAGE ADDRESS
; LD DE,BAS_LOC ; DE := BASIC EXEC ADDRESS
; LD BC,BAS_SIZ ; BC := BASIC SIZE
; LDIR ; COPY BASIC CODE TO EXEC ADDRESS
; POP HL ; RECOVER ENTRY ADDRESS
; JR CHAIN ; AND CHAIN TO IT
GOTBAS:
LD DE,STR_BOOTTBC ; DE POINTS TO MESSAGE
CALL WRITESTR ; WRITE IT TO CONSOLE
; COPY BASIC FROM BASIC FROM OSIMG0 IN ROM BANK TO THIS RAM BANKS
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
LD D,BID_USR ; D = DEST BANK = USER BANK
LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK
LD HL,TBC_SIZ ; HL = COPY LEN = 1 PAGE = 256 BYTES
RST 08 ; DO IT
LD DE,STR_LOADING
CALL WRITESTR ; WRITE IT TO CONSOLE
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
LD HL,TBCIMG ; COPY FROM
LD DE,TBC_LOC ; COPY TO
RST 08 ; DO IT
LD DE,STR_LAUNCH
CALL WRITESTR
LD HL,TBC_LOC
JP CHAIN
; LD HL,TBC_LOC
; PUSH HL
; LD DE,STR_BOOTTBC ; DE POINTS TO MESSAGE
; CALL WRITESTR ; WRITE IT TO CONSOLE
; ; COPY IMAGE TO EXEC ADDRESS
; LD HL,TBCIMG ; HL := BASIC IMAGE ADDRESS
; LD DE,TBC_LOC ; DE := BASIC EXEC ADDRESS
; LD BC,TBC_SIZ ; BC := BASIC SIZE
; LDIR ; COPY BASIC CODE TO EXEC ADDRESS
; POP HL ; RECOVER ENTRY ADDRESS
; JR CHAIN ; AND CHAIN TO IT
GOMONSER:
LD HL,MON_SERIAL ; MONITOR SERIAL INTERFACE ENTRY ADDRESS TO HL
JR GOMON ; LOAD AND RUN MONITOR
@ -295,8 +395,8 @@ CHAIN:
RST 08
;
LD A,BID_USR ; ACTIVATE USER BANK
POP HL ; RECOVER ENTRY ADDRESS
DI ; ENTER WITH INTS DISABLED
POP HL ; RECOVER ENTRY ADDRESS
DI ; ENTER WITH INTS DISABLED
CALL HB_BNKCALL ; AND GO
HALT ; WE SHOULD NEVER RETURN!!!
#ENDIF
@ -601,7 +701,7 @@ PRTDRV:
CALL COUT ; PRINT IT
LD A,')' ; DRIVE LETTER COLON
CALL COUT ; PRINT IT
CALL PC_SPACE
; CALL PC_SPACE
POP DE ; RECOVER DISK TYPE
LD A,D ; DISK TYPE TO A
CP $40 ; RAM/ROM?
@ -637,7 +737,7 @@ PRTDRV2: ; PRINT DEVICE
LD A,B ; UNIT TO A
ADD A,'0' ; MAKE IT PRINTABLE NUMERIC
CALL COUT ; PRINT IT
LD A,':' ; DEVICE NAME COLON
LD A,',' ; DEVICE NAME SEPARATOR
CALL COUT ; PRINT IT
RET ; DONE
;
@ -672,7 +772,7 @@ PRTALL1:
CALL COUT ; PRINT IT
LD A,')' ; FORMATTING
CALL COUT ; PRINT IT
CALL PC_SPACE ; SPACING
; CALL PC_SPACE ; SPACING
PUSH BC ; SAVE LOOP CONTROL
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
RST 08 ; CALL HBIOS
@ -708,7 +808,7 @@ PRTDRV:
LD A,E ; LOAD DRIVER MODE/UNIT
AND $0F ; ISOLATE UNIT
CALL PRTDECB ; PRINT IT
CALL PC_COLON ; FORMATTING
CALL PC_SPACE ; FORMATTING
;LD A,E ; LOAD LU
;CALL PRTDECB ; PRINT IT
RET
@ -746,7 +846,9 @@ DEV15 .EQU DEVUNK
;
STR_BOOTDISK .DB "BOOT FROM DISK\r\n$"
STR_BOOTDISK1 .DB "\r\nReading disk information...$"
STR_BOOTMON .DB "START MONITOR\r\n$"
STR_BOOTMON .DB "START MONITOR FROM ROM\r\n$"
STR_BOOTBAS .DB "START BASIC FROM ROM\r\n$"
STR_BOOTTBC .DB "START TASTYBASIC FROM ROM\r\n$"
STR_BOOTCPM .DB "BOOT CPM FROM ROM\r\n$"
STR_BOOTZSYS .DB "BOOT ZSYSTEM FROM ROM\r\n$"
STR_LIST .DB "LIST DEVICES\r\n$"
@ -758,16 +860,19 @@ STR_CPMEND .DB "END=$"
STR_CPMENT .DB "ENT=$"
STR_LABEL .DB "LABEL=$"
STR_DRVLIST .DB "\r\nDisk Devices:\r\n$"
STR_PREFIX .DB "\r\n $"
STR_PREFIX .DB "($"
;STR_PREFIX .DB "\r\n $"
STR_LOADING .DB "\r\nLoading...$"
STR_NODISK .DB "\r\nNo disk!$"
STR_NOBOOT .DB "\r\nDisk not bootable!$"
STR_BOOTERR .DB "\r\nBoot failure!$"
STR_ITSRAM .DB "\r\n\RAM$"
STR_LAUNCH .DB "\r\nLaunching ...$"
;
STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader$"
STR_BOOTMENU .DB "\r\n"
.DB "Boot: (C)PM, (Z)System, (M)onitor,\r\n"
.DB " (L)ist disks, or Disk Unit # ===> $"
.DB "\r\nROM Boot: (B)ASIC, (C)PM, (M)onitor, (T)ASTYBASIC, (Z)System.\r\n"
.DB "Disk Boot: $"
;
.IF DSKYENABLE
BOOT:
@ -931,7 +1036,7 @@ CINUC:
; FILL REMAINDER OF BANK
;==================================================================================================
;
SLACK: .EQU ($1000 - $)
SLACK: .EQU ($LDR_SIZ - $)
.FILL SLACK
;
.ECHO "LOADER space remaining: "

12
Source/HBIOS/std.asm

@ -325,7 +325,7 @@ BID_ROMN .EQU (BID_ROM0 + ((ROMSIZE / 32) - 1))
BID_RAMN .EQU (BID_RAM0 + ((RAMSIZE / 32) - 1))
BID_BOOT .EQU BID_ROM0 ; BOOT BANK
;BID_BIOSIMG .EQU BID_ROM0 + 1 ; BIOS IMAGE BANK
BID_BIOSIMG .EQU BID_ROM0 + 1 ; BIOS IMAGE BANK
BID_OSIMG .EQU BID_ROM0 + 2 ; ROM LOADER AND IMAGES BANK
BID_FSFAT .EQU BID_ROM0 + 3 ; FAT FILESYSTEM DRIVER BANK
BID_ROMD0 .EQU BID_ROM0 + 4 ; FIRST ROM DRIVE BANK
@ -364,10 +364,20 @@ CBIOS_LOC .EQU CBIOS_END - CBIOS_SIZ ; START OF CBIOS
CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS)
LDR_SIZ .EQU $0A00
MON_LOC .EQU $C000 ; 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
BAS_LOC .EQU $0A00 ; NASCOM BASIC
BAS_SIZ .EQU $2000
BAS_END .EQU BAS_LOC + BAS_SIZ
TBC_LOC .EQU $0A00 ; TASTYBASIC
TBC_SIZ .EQU $0900
TBC_END .EQU TBC_LOC + TBC_SIZ
MON_DSKY .EQU MON_LOC + (0 * 3) ; MONITOR ENTRY (DSKY)
MON_SERIAL .EQU MON_LOC + (1 * 3) ; MONITOR ENTRY (SERIAL PORT)
;

1813
Source/HBIOS/tastybasic.asm

File diff suppressed because it is too large
Loading…
Cancel
Save