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