|
|
|
@ -1,5 +1,5 @@ |
|
|
|
;=============================================================================== |
|
|
|
; BL.ASM |
|
|
|
; LOADER.ASM |
|
|
|
; |
|
|
|
; BOOTLOADER FOR ROMWBW DISK OPERATING SYSTEMS. |
|
|
|
; |
|
|
|
@ -31,17 +31,16 @@ SYS_ENT .EQU $E600 ; SYSTEM (OS) ENTRY POINT ADDRESS |
|
|
|
SYS_LOC .EQU $D000 ; STARTING ADDRESS TO LOAD SYSTEM IMAGE |
|
|
|
SYS_END .EQU $FE00 ; ENDING ADDRESS OF SYSTEM IMAGE |
|
|
|
; |
|
|
|
BYT .EQU 1 ; used to describe METADATA_SIZE below |
|
|
|
WRD .EQU 2 |
|
|
|
SEC_SIZE .EQU 512 ; DISK SECTOR SIZE |
|
|
|
BLK_SIZE .EQU 128 ; OS BLOCK/RECORD SIZE |
|
|
|
; |
|
|
|
SECTOR_SIZE .EQU 512 |
|
|
|
BLOCK_SIZE .EQU 128 |
|
|
|
PREFIX_SIZE .EQU (3 * SECTOR_SIZE) ; 3 SECTORS |
|
|
|
METADATA_SIZE .EQU BYT+WRD+(4*BYT)+16+BYT+WRD+WRD+WRD+WRD ; (as defined below) |
|
|
|
PREFIX_SIZE .EQU (SEC_SIZE * 3) ; 3 SECTORS |
|
|
|
; |
|
|
|
PARTTBL_LOC .EQU $1BE |
|
|
|
PARTTBL_SIZ .EQU $40 |
|
|
|
BOOTSIG_LOC .EQU $1FE |
|
|
|
META_SIZE .EQU 32 ; SEE BELOW |
|
|
|
META_LOC .EQU (PREFIX_SIZE - META_SIZE) |
|
|
|
; |
|
|
|
PT_LOC .EQU $1BE |
|
|
|
PT_SIZ .EQU $40 |
|
|
|
; |
|
|
|
;------------------------------------------------------------------------------- |
|
|
|
; SECTOR 1 |
|
|
|
@ -52,7 +51,8 @@ BOOTSIG_LOC .EQU $1FE |
|
|
|
;---------------------------------------------------------------------------- |
|
|
|
; |
|
|
|
; THE FOLLOWING BOOTSTRAP CODE IS BUILT TO ASSUME IT WILL BE EXECUTED AT A STARTING |
|
|
|
; ADDRESS OF $8000. |
|
|
|
; ADDRESS OF $8000. THIS CODE IS *ONLY* FOR UNA. THE ROMWBW ROM BOOTLOADER |
|
|
|
; USES THE METADATA TO LOAD THE OS DIRECTLY. |
|
|
|
; |
|
|
|
.ORG $8000 |
|
|
|
JR BOOT |
|
|
|
@ -145,10 +145,10 @@ HEXASCII: |
|
|
|
; CONVERT LOW NIBBLE OF A TO ASCII HEX |
|
|
|
; |
|
|
|
HEXCONV: |
|
|
|
AND 0FH ;LOW NIBBLE ONLY |
|
|
|
ADD A,90H |
|
|
|
AND $0F ;LOW NIBBLE ONLY |
|
|
|
ADD A,$90 |
|
|
|
DAA |
|
|
|
ADC A,40H |
|
|
|
ADC A,$40 |
|
|
|
DAA |
|
|
|
RET |
|
|
|
; |
|
|
|
@ -163,17 +163,17 @@ STR_LOAD .DB "\r\nLoading",0 |
|
|
|
STR_DONE .DB "\r\n",0 |
|
|
|
STR_ERR .DB " Read Error!",0 |
|
|
|
; |
|
|
|
.ORG $ - $8000 ; RESTORE ORG |
|
|
|
.FILL PARTTBL_LOC - $ ; FILL TO START OF PARTITION TABLE |
|
|
|
.ORG $ - $8000 ; BACK TO ABSOLUTE ADDRESS |
|
|
|
; |
|
|
|
.FILL PT_LOC - $,0 ; FILL TO START OF PARTITION TABLE |
|
|
|
; |
|
|
|
; RESERVE SPACE FOR STANDARD IBM-PC PARTITION TABLE. ALTHOUGH A |
|
|
|
; PARTITION TABLE IS NOT RELEVANT FOR A FLOPPY DISK, IT DOES NO HARM. |
|
|
|
; THE CONTENTS OF THE PARTITION TABLE MUST BE MANAGED BY FDISK80. |
|
|
|
; |
|
|
|
PARTTBL .FILL PARTTBL_SIZ,$00 ; PARTITION TABLE, FILL WITH ZEROES |
|
|
|
PARTTBL .FILL PT_SIZ,0 ; PARTITION TABLE, FILL WITH ZEROES |
|
|
|
; |
|
|
|
; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT |
|
|
|
; SIGNATURE. |
|
|
|
; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT SIGNATURE. |
|
|
|
; |
|
|
|
BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE |
|
|
|
; |
|
|
|
@ -184,7 +184,7 @@ BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE |
|
|
|
; |
|
|
|
;---------------------------------------------------------------------------- |
|
|
|
; |
|
|
|
.FILL 512,0 ; JUST FILL SECTOR WITH ZEROES |
|
|
|
.FILL SEC_SIZE,0 ; JUST FILL SECTOR WITH ZEROES |
|
|
|
; |
|
|
|
;------------------------------------------------------------------------------- |
|
|
|
; SECTOR 3 |
|
|
|
@ -193,36 +193,34 @@ BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE |
|
|
|
; |
|
|
|
;---------------------------------------------------------------------------- |
|
|
|
; |
|
|
|
.FILL 128 * 3,0 ; FIRST 384 BYTES ARE NOT YET DEFINED |
|
|
|
.FILL (BLK_SIZE * 3),0 ; FIRST 384 BYTES ARE NOT YET DEFINED |
|
|
|
; |
|
|
|
; THE FOLLOWING TWO BYTES ARE AN ADDITIONAL SIGNATURE THAT IS VERIFIED BY |
|
|
|
; SOME HARDWARE BIOSES. |
|
|
|
; |
|
|
|
PR_SIG .DB $5A,$A5 ; SIGNATURE GOES HERE |
|
|
|
; |
|
|
|
; FIRST CHUNK OF METADATA IMMEDIATELY FOLLOWS THE SIGNATURE BYTES |
|
|
|
; |
|
|
|
PR_PLATFORM .DB 0 ; PLATFORM ID (SEE STD.ASM) |
|
|
|
PR_DEVICE .DB 0 ; ? (PROBABLY UNUSED) |
|
|
|
PR_FORMATTER .DB 0,0,0,0,0,0,0,0 ; ? (PROBABLY UNUSED) |
|
|
|
PR_DRIVE .DB 0 ; ? (PROBABLY UNUSED) |
|
|
|
PR_LOG_UNIT .DW 0 ; ? (PROBABLY UNUSED) |
|
|
|
; |
|
|
|
; FILLER TO PLACE SECOND CHUNK OF METADATA AT THE END OF THE SECTOR |
|
|
|
; |
|
|
|
.FILL ((PREFIX_SIZE - METADATA_SIZE) - $),00H |
|
|
|
.FILL (META_LOC - $),0 |
|
|
|
; |
|
|
|
; SECOND CHUNK OF METADATA |
|
|
|
; METADATA |
|
|
|
; |
|
|
|
PR_WP .DB 0 ; WRITE PROTECT BOOLEADN |
|
|
|
PR_UPDSEQ .DW 0 ; PREFIX UPDATE SEQUENCE NUMBER (DEPRECATED?) |
|
|
|
PR_VER .DB RMJ,RMN,RUP,RTP ; OS BUILD VERSION |
|
|
|
PR_LABEL .DB "Unlabeled Drive ","$" ; DISK LABEL (EXACTLY 16 BYTES!!!) |
|
|
|
.DW 0 ; DEPRECATED |
|
|
|
PR_LDLOC .DW SYS_LOC ; ADDRESS TO START LOADING SYSTEM |
|
|
|
PR_LDEND .DW SYS_END ; ADDRESS TO STOP LOADING SYSTEM |
|
|
|
PR_ENTRY .DW SYS_ENT ; ADDRESS TO ENTER SYSTEM (OS) |
|
|
|
PR_WP .DB 0 ; (1) WRITE PROTECT BOOLEAN |
|
|
|
PR_UPDSEQ .DW 0 ; (2) PREFIX UPDATE SEQUENCE NUMBER (DEPRECATED?) |
|
|
|
PR_VER .DB RMJ,RMN,RUP,RTP ; (4) OS BUILD VERSION |
|
|
|
PR_LABEL .DB "Unlabeled Drive ","$" ; (17) DISK LABEL (EXACTLY 16 BYTES!!!) |
|
|
|
.DW 0 ; (2) DEPRECATED |
|
|
|
PR_LDLOC .DW SYS_LOC ; (2) ADDRESS TO START LOADING SYSTEM |
|
|
|
PR_LDEND .DW SYS_END ; (2) ADDRESS TO STOP LOADING SYSTEM |
|
|
|
PR_ENTRY .DW SYS_ENT ; (2) ADDRESS TO ENTER SYSTEM (OS) |
|
|
|
; |
|
|
|
#IF (META_SIZE != ($ - META_LOC)) |
|
|
|
.ECHO "META_SIZE VALUE IS WRONG!!!\r\n" |
|
|
|
!!! |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF ($ != PREFIX_SIZE) |
|
|
|
.ECHO "LOADER PREFIX IS WRONG SIZE!!!\r\n" |
|
|
|
!!! |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
.END |
|
|
|
.END |
|
|
|
|