home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / asm_kit / stdboot.asm < prev    next >
Assembly Source File  |  1983-12-20  |  17KB  |  502 lines

  1.         TITLE        STDBOOT
  2.         PAGE        66,132
  3. ;-----------------------------------------------------------------------;
  4. ;                                    ;
  5. ;        DEFINE IBMBIO ENTRY POINT FOR DOS 2.0 (FAR ENTRY)    ;
  6. ;                                    ;
  7. ;    DOS VERSION    IBMBIO ENTRY POINT                ;
  8. ;    -----------    ------------------                ;
  9. ;                                    ;
  10. ;       1.1        SEGMENT AT 60H                    ;
  11. ;       2.0        SEGMENT AT 70H                    ;
  12. ;                                    ;
  13. ;-----------------------------------------------------------------------;
  14. CSEG        SEGMENT     AT 70H
  15. BIOENT        LABEL        FAR
  16. CSEG        ENDS
  17. ;-----------------------------------------------------------------------;
  18. ;                                    ;
  19. ;        START OF THE CODE SEGMENT (BOOT RECORD)         ;
  20. ;                                    ;
  21. ;-----------------------------------------------------------------------;
  22. CODE        SEGMENT     BYTE PUBLIC 'CODE'
  23.         ASSUME        CS:CODE,DS:CODE,ES:CODE
  24. ;-----------------------------------------------------------------------;
  25. ;                                    ;
  26. ;        INCLUDE BIOS MACROS                    ;
  27. ;                                    ;
  28. ;-----------------------------------------------------------------------;
  29.         INCLUDE     BIOS.MAC
  30. ;-----------------------------------------------------------------------;
  31. ;                                    ;
  32. ;        INCLUDE DOS STRUCTURES                    ;
  33. ;                                    ;
  34. ;-----------------------------------------------------------------------;
  35.         INCLUDE     DOS.STR
  36.         PAGE
  37. ;-----------------------------------------------------------------------;
  38. ;                                    ;
  39. ;        DEFINE ALL THE EQUATES NEEDED BY THIS PROGRAM        ;
  40. ;                                    ;
  41. ;-----------------------------------------------------------------------;
  42. LOAD_OFFSET    EQU        7C00H        ;LOAD OFFSET
  43. ATTR_PAGE    EQU        0007H        ;ATTRIBUTE BYTE AND PAGE NUMBER
  44. PARITY_MASK    EQU        7FH        ;PARITY MASK
  45. WRITE_TTY    EQU        0EH        ;BIOS WRITE TTY CODE
  46. WAIT_KEY    EQU        00H        ;BIOS WAIT FOR KEY CODE
  47. CRLF        EQU        0A0DH        ;CARRIAGE RETURN, LINE FEED
  48. TERM        EQU        00H        ;MESSAGE TERMINATOR
  49. READ_CODE    EQU        02H        ;BIOS READ DISK COMMAND CODE
  50. READ_COMMAND    EQU        0201H        ;READ ONE SECTOR COMMAND
  51. LEN        EQU        0BH        ;FILENAME LENGTH (PLUS EXT.)
  52. CONVERT     EQU        20H        ;CONVERSION BYTE
  53. MSG_PTR     EQU        BYTE PTR [SI]    ;MESSAGE POINTER
  54. BIO_PTR     EQU        BYTE PTR [DI]    ;IBMBIO POINTER
  55. DOS_PTR     EQU        BYTE PTR [DI+32];IBMDOS POINTER
  56. DISK_SEGMENT    EQU        7AH        ;DISK TABLE SEGMENT POINTER
  57. DISK_OFFSET    EQU        78H        ;DISK TABLE OFFSET POINTER
  58. ENTRY_SIZE    EQU        20H        ;DIRECTORY ENTRY SIZE (BYTES)
  59. ROUND_DIR    EQU        1FFH        ;ROUND UP VALUE FOR DIR. SIZE
  60. NUM_BYTES    EQU        200H        ;BYTES PER SECTOR
  61. DIR_SEG     EQU        50H        ;DIRECTORY SEGMENT VALUE
  62. DIR_OFF     EQU        00H        ;DIRECTORY OFFSET VALUE
  63. DISK_MASK    EQU        03H        ;DISK COUNT MASK
  64. HARD_MASK    EQU        80H        ;HARD DISK TEST MASK
  65. SHIFT_COUNT    EQU        06H        ;SHIFT COUNT
  66.         PAGE
  67. ;-----------------------------------------------------------------------;
  68. ;                                    ;
  69. ;        START OF THE BOOT RECORD                ;
  70. ;                                    ;
  71. ;-----------------------------------------------------------------------;
  72. ENTRY        PROC        NEAR
  73. ;-----------------------------------------------------------------------;
  74. ;                                    ;
  75. ;        SET UP JUMP TO START OF CODE AND OEM NAME AND VERSION    ;
  76. ;                                    ;
  77. ;    DOS VERSION    OEM NAME AND VERSION NUMBER            ;
  78. ;    -----------    ---------------------------            ;
  79. ;                                    ;
  80. ;       1.1        IBM  1.1                    ;
  81. ;       2.0        IBM  2.0                    ;
  82. ;                                    ;    ;                                    ;
  83. ;-----------------------------------------------------------------------;
  84.         JMP        START
  85. DIR_OFFSET    EQU        $+LOAD_OFFSET
  86. TRACK_NUMBER    EQU        $+5+LOAD_OFFSET
  87. OEM        DB        "IBM  2.0"
  88.         PAGE
  89. ;-----------------------------------------------------------------------;
  90. ;                                    ;
  91. ;        SET UP THE BIOS PARAMETER BLOCK AND OPTION BLOCK FOR 2.0;
  92. ;                                    ;
  93. ;    DOS VERSION    DISK FORMAT    BPB BLOCK            ;
  94. ;    -----------    -----------    ---------            ;
  95. ;                                    ;
  96. ;       1.1        SINGLE SIDED    <512,1,1,2,64,320,0FEH,1>    ;
  97. ;       1.1        DOUBLE SIDED    <512,2,1,2,112,640,0FFH,1>    ;
  98. ;       2.0        SINGLE SIDED    <512,1,1,2,64,360,0FCH,2>    ;
  99. ;       2.0        DOUBLE SIDED    <512,2,1,2,112,720,0FDH,2>    ;
  100. ;                                    ;
  101. ;    DOS VERSION    DISK FORMAT    BPB OPTION BLOCK        ;
  102. ;    -----------    -----------    ----------------        ;
  103. ;                                    ;
  104. ;       1.1        SINGLE SIDED    <8,1,0>             ;
  105. ;       1.1        DOUBLE SIDED    <8,2,0>             ;
  106. ;       2.0        SINGLE SIDED    <9,1,0>             ;
  107. ;       2.0        DOUBLE SIDED    <9,2,0>             ;
  108. ;                                    ;
  109. ;-----------------------------------------------------------------------;
  110. BPB        EQU        $+LOAD_OFFSET
  111. IBMBIO_OFFSET    EQU        $+8+LOAD_OFFSET
  112. SECTOR_NUMBER    EQU        $+10+LOAD_OFFSET
  113.         BPB_BLOCK    <512,2,1,2,112,720,0FDH,2>
  114. OPT        EQU        $+LOAD_OFFSET
  115. SECTORS     EQU        BYTE PTR $+LOAD_OFFSET
  116.         BPB_OPTION    <9,2,0>
  117.         PAGE
  118. ;-----------------------------------------------------------------------;
  119. ;                                    ;
  120. ;        SET UP DISK READ FROM, HEAD NUM., AND NUMBER OF SECTORS ;
  121. ;                                    ;
  122. ;    DOS VERSION    SECTORS TO READ                 ;
  123. ;    -----------    ---------------                 ;
  124. ;                                    ;
  125. ;       1.1        14H (DECIMAL 20)                ;
  126. ;       2.0        0AH (DECIMAL 20)                ;
  127. ;                                    ;
  128. ;        NOTE - THE DISK READ FROM IS AS FOLLOWS:        ;
  129. ;                                    ;
  130. ;               00H - 03H = FLOPPY DISK 0 - 3            ;
  131. ;               80H - 83H = HARD DISK 0 - 3            ;
  132. ;                                    ;
  133. ;-----------------------------------------------------------------------;
  134. DISK_AND_HEAD    EQU        WORD PTR $+LOAD_OFFSET
  135. DISK_READ_FROM    EQU        BYTE PTR $+LOAD_OFFSET
  136.         DB        00H
  137. HEAD_NUMBER    EQU        BYTE PTR $+LOAD_OFFSET
  138.         DB        00H
  139. NUM_SECTORS    EQU        BYTE PTR $+LOAD_OFFSET
  140.         DB        0AH
  141. ;-----------------------------------------------------------------------;
  142. ;                                    ;
  143. ;        SET UP THE DISK PARAMETER TABLE FOR 2.0         ;
  144. ;                                    ;
  145. ;  DOS VERSION            DISK PARAMETER TABLE            ;
  146. ;  -----------            --------------------            ;
  147. ;                                    ;
  148. ;     1.1        <0DFH,2H,25H,2H,8H,2AH,0FFH,50H,0F6H,0H,4H>    ;
  149. ;     2.0        <0DFH,2H,25H,2H,9H,2AH,0FFH,50H,0F6H,0H,2H>    ;
  150. ;                                    ;
  151. ;-----------------------------------------------------------------------;
  152. DISK_TABLE    EQU        $+LOAD_OFFSET
  153.         DSK_PRM_TABLE    <0DFH,2H,25H,2H,9H,2AH,0FFH,50H,0F6H,0H,2H>
  154. ;-----------------------------------------------------------------------;
  155. ;                                    ;
  156. ;        RE-TRY CODE (COME HERE TO RE-TRY THE BOOT)        ;
  157. ;                                    ;
  158. ;-----------------------------------------------------------------------;
  159. RETRY        LABEL        NEAR
  160.         BOOT
  161.         PAGE
  162. START        LABEL        NEAR
  163. ;-----------------------------------------------------------------------;
  164. ;                                    ;
  165. ;        TURN OFF INTERRUPTS AND SET UP THE STACK        ;
  166. ;                                    ;
  167. ;-----------------------------------------------------------------------;
  168.         CLI
  169.         XOR        AX,AX
  170.         MOV        SS,AX
  171.         MOV        SP,LOAD_OFFSET
  172. ;-----------------------------------------------------------------------;
  173. ;                                    ;
  174. ;        SET UP THE NEW DISK PARAMETER TABLE            ;
  175. ;                                    ;
  176. ;-----------------------------------------------------------------------;
  177.         MOV        DS,AX
  178.         MOV        [DS:DISK_SEGMENT],AX
  179.         MOV        [DS:DISK_OFFSET],OFFSET DISK_TABLE
  180. ;-----------------------------------------------------------------------;
  181. ;                                    ;
  182. ;        ALLOW INTERRUPTS AND RESET DISK SYSTEM, JUMP IF ERROR    ;
  183. ;                                    ;
  184. ;-----------------------------------------------------------------------;
  185.         STI
  186.         DISK
  187.         JNC        RESET_OK
  188.         JMP        BOOT_ERROR
  189.         PAGE
  190. ;-----------------------------------------------------------------------;
  191. ;                                    ;
  192. ;        COMPUTE NUMBER OF SECTORS USED BY THE FAT TABLES    ;
  193. ;                                    ;
  194. ;-----------------------------------------------------------------------;
  195. RESET_OK    LABEL        NEAR
  196.         PUSH        CS
  197.         POP        DS
  198.         MOV        AL,[DS:BPB].NUM_FATS
  199.         CBW
  200.         MUL        WORD PTR [DS:BPB].SECTORS_PER_FAT
  201. ;-----------------------------------------------------------------------;
  202. ;                                    ;
  203. ;        ADD IN THE NUMBER OF HIDDEN AND RESERVED SECTORS    ;
  204. ;                                    ;
  205. ;-----------------------------------------------------------------------;
  206.         ADD        AX,[DS:OPT].HIDDEN_SECTORS
  207.         ADD        AX,[DS:BPB].RES_SECTORS
  208. ;-----------------------------------------------------------------------;
  209. ;                                    ;
  210. ;        SAVE THE COMPUTED SECTOR OFFSET             ;
  211. ;                                    ;
  212. ;-----------------------------------------------------------------------;
  213.         MOV        [DS:DIR_OFFSET],AX
  214.         MOV        [DS:IBMBIO_OFFSET],AX
  215. ;-----------------------------------------------------------------------;
  216. ;                                    ;
  217. ;        COMPUTE DIRECTORY SIZE IN SECTORS            ;
  218. ;                                    ;
  219. ;-----------------------------------------------------------------------;
  220.         MOV        AX,ENTRY_SIZE
  221.         MUL        WORD PTR [DS:BPB].ROOT_DIR_ENTRIES
  222.         ADD        AX,ROUND_DIR
  223.         MOV        BX,NUM_BYTES
  224.         DIV        BX
  225. ;-----------------------------------------------------------------------;
  226. ;                                    ;
  227. ;        UPDATE THE SAVED OFFSET VALUE                ;
  228. ;                                    ;
  229. ;-----------------------------------------------------------------------;
  230.         ADD        [DS:IBMBIO_OFFSET],AX
  231. ;-----------------------------------------------------------------------;
  232. ;                                    ;
  233. ;        CALL ROUTINE TO CHECK FOR SYSTEM DISK, JUMP IF ERROR    ;
  234. ;                                    ;
  235. ;-----------------------------------------------------------------------;
  236.         CALL        DISK_CHECK
  237.         JC        RETRY
  238.         PAGE
  239. ;-----------------------------------------------------------------------;
  240. ;                                    ;
  241. ;        SET UP TO READ IBMBIO AND IBMDOS INTO MEMORY        ;
  242. ;                                    ;
  243. ;-----------------------------------------------------------------------;
  244.         MOV        AX,[DS:IBMBIO_OFFSET]
  245.         MOV        [DS:SAVE_OFFSET],AX
  246.         MOV        AX,SEG BIOENT
  247.         MOV        ES,AX
  248.         MOV        DS,AX
  249.         MOV        BX,OFFSET BIOENT
  250. ;-----------------------------------------------------------------------;
  251. ;                                    ;
  252. ;        READ A SECTION INTO MEMORY (WHOLE OR PARTIAL TRACK)    ;
  253. ;                                    ;
  254. ;-----------------------------------------------------------------------;
  255. READ_LOOP    LABEL        NEAR
  256.         MOV        AX,[CS:IBMBIO_OFFSET]
  257.         CALL        COMPUTE_ADDRESS
  258.         MOV        AL,[CS:SECTORS]
  259.         SUB        AL,[CS:SECTOR_NUMBER]
  260.         INC        AL
  261.         XOR        AH,AH
  262.         PUSH        AX
  263.         MOV        AH,READ_CODE
  264.         CALL        READ_DISK
  265.         POP        AX
  266.         JC        BOOT_ERROR
  267. ;-----------------------------------------------------------------------;
  268. ;                                    ;
  269. ;        CHECK FOR MORE LEFT TO READ, JUMP IF ALL READ IN    ;
  270. ;                                    ;
  271. ;-----------------------------------------------------------------------;
  272.         SUB        [CS:NUM_SECTORS],AL
  273.         JBE        READ_DONE
  274. ;-----------------------------------------------------------------------;
  275. ;                                    ;
  276. ;        UPDATE SECTOR OFFSET AND TRANSFER OFFSET AND READ AGAIN ;
  277. ;                                    ;
  278. ;-----------------------------------------------------------------------;
  279.         ADD        [CS:IBMBIO_OFFSET],AX
  280.         MUL        WORD PTR [CS:BPB].BYTES_PER_SECTOR
  281.         ADD        BX,AX
  282.         JMP        READ_LOOP
  283.         PAGE
  284. ;-----------------------------------------------------------------------;
  285. ;                                    ;
  286. ;        SET UP REGISTERS AS FOLLOWS AND JUMP TO IBMBIO        ;
  287. ;                                    ;
  288. ;        AX - IF 0 THEN FLOPPY BOOT, IF NOT 0 THEN HARD DISK BOOT;
  289. ;        BX - SECTOR OFFSET TO IBMBIO AND IBMDOS         ;
  290. ;        CX - NUMBER OF FLOPPY DRIVES (STILL 2 IF ONLY 1 DRIVE)    ;
  291. ;                                    ;
  292. ;-----------------------------------------------------------------------;
  293. READ_DONE    LABEL        NEAR
  294.         PUSH        CS
  295.         POP        DS
  296.         EQUIP
  297.         ROL        AL,1
  298.         ROL        AL,1
  299.         AND        AX,DISK_MASK
  300.         JNZ        MULTIPLE_DISK
  301.         INC        AX
  302. MULTIPLE_DISK    LABEL        NEAR
  303.         INC        AX
  304.         MOV        CX,AX
  305.         TEST        BYTE PTR [DS:DISK_READ_FROM],HARD_MASK
  306.         JNZ        HARD_DISK_BOOT
  307.         XOR        AX,AX
  308. HARD_DISK_BOOT    LABEL        NEAR
  309.         MOV        BX,[DS:SAVE_OFFSET]
  310.         JMP        BIOENT
  311.         PAGE
  312. ;-----------------------------------------------------------------------;
  313. ;                                    ;
  314. ;        BOOT ERROR ROUTINE, PRINT MESSAGE AND LOOP FOREVER    ;
  315. ;                                    ;
  316. ;-----------------------------------------------------------------------;
  317. BOOT_ERROR    LABEL        NEAR
  318.         MOV        SI,OFFSET MSG2
  319.         CALL        PRINT_MESSAGE
  320. DEAD_END    LABEL        NEAR
  321.         JMP        DEAD_END
  322. ;-----------------------------------------------------------------------;
  323. ;                                    ;
  324. ;        PRINT MESSAGE ROUTINE, PRINT MESSAGE AND RETURN     ;
  325. ;                                    ;
  326. ;-----------------------------------------------------------------------;
  327. PRINT_MESSAGE    LABEL        NEAR
  328.         LODS        CS:MSG_PTR
  329.         AND        AL,PARITY_MASK
  330.         JZ        RETURN_INST
  331.         MOV        AH,WRITE_TTY
  332.         MOV        BX,ATTR_PAGE
  333.         VIDEO
  334.         JMP        PRINT_MESSAGE
  335. ;-----------------------------------------------------------------------;
  336. ;                                    ;
  337. ;        ROUTINE TO CHECK FOR SYSTEM DISK, FIRST SET UP REGS.    ;
  338. ;                                    ;
  339. ;-----------------------------------------------------------------------;
  340. DISK_CHECK    LABEL        NEAR
  341.         MOV        AX,DIR_SEG
  342.         MOV        ES,AX
  343.         PUSH        CS
  344.         POP        DS
  345. ;-----------------------------------------------------------------------;
  346. ;                                    ;
  347. ;        GET SECTOR OFFSET TO DIRECTORY AND COMPUTE DISK ADDR.    ;
  348. ;                                    ;
  349. ;-----------------------------------------------------------------------;
  350.         MOV        AX,[CS:DIR_OFFSET]
  351.         CALL        COMPUTE_ADDRESS
  352. ;-----------------------------------------------------------------------;
  353. ;                                    ;
  354. ;        READ IN FIRST SECTOR OF DIRECTORY, JUMP IF ERROR    ;
  355. ;                                    ;
  356. ;-----------------------------------------------------------------------;
  357.         MOV        BX,DIR_OFF
  358.         MOV        AX,READ_COMMAND
  359.         CALL        READ_DISK
  360.         JC        DISK_ERROR
  361.         PAGE
  362. ;-----------------------------------------------------------------------;
  363. ;                                    ;
  364. ;        CONVERT FIRST TO ENTRIES TO LOWERCASE WITH BLANKS    ;
  365. ;                                    ;
  366. ;-----------------------------------------------------------------------;
  367.         XOR        DI,DI
  368.         MOV        CX,LEN
  369. CONVERSION_LOOP LABEL        NEAR
  370.         OR        ES:BIO_PTR,CONVERT
  371.         OR        ES:DOS_PTR,CONVERT
  372.         INC        DI
  373.         LOOP        CONVERSION_LOOP
  374. ;-----------------------------------------------------------------------;
  375. ;                                    ;
  376. ;        CHECK FIRST ENTRY FOR IBMBIO, JUMP IF NO MATCH        ;
  377. ;                                    ;
  378. ;-----------------------------------------------------------------------;
  379.         XOR        DI,DI
  380.         MOV        SI,OFFSET IBMBIO
  381.         MOV        CX,LEN
  382.         CLD
  383.         REPZ        CMPSB
  384.         JNZ        DISK_ERROR
  385. ;-----------------------------------------------------------------------;
  386. ;                                    ;
  387. ;        CHECK SECOND ENTRY FOR IBMDOS, JUMP IF NO MATCH     ;
  388. ;                                    ;
  389. ;-----------------------------------------------------------------------;
  390.         MOV        DI,ENTRY_SIZE
  391.         MOV        SI,OFFSET IBMDOS
  392.         MOV        CX,LEN
  393.         REPZ        CMPSB
  394.         JNZ        DISK_ERROR
  395. RETURN_INST    LABEL        NEAR
  396.         RET
  397.         PAGE
  398. ;-----------------------------------------------------------------------;
  399. ;                                    ;
  400. ;        DISK ERROR ROUTINE, PRINT MESSAGE AND WAIT FOR KEY    ;
  401. ;                                    ;
  402. ;-----------------------------------------------------------------------;
  403. DISK_ERROR    LABEL        NEAR
  404.         MOV        SI,OFFSET MSG1
  405.         CALL        PRINT_MESSAGE
  406.         MOV        AH,WAIT_KEY
  407.         KEYBOARD
  408. ;-----------------------------------------------------------------------;
  409. ;                                    ;
  410. ;        SET THE ERROR FLAG AND RETURN (WILL TRY TO REBOOT)    ;
  411. ;                                    ;
  412. ;-----------------------------------------------------------------------;
  413.         STC
  414.         RET
  415. ;-----------------------------------------------------------------------;
  416. ;                                    ;
  417. ;        COMPUTE DISK ADDRESS ROUTINE, SET UP THE REGISTERS    ;
  418. ;                                    ;
  419. ;-----------------------------------------------------------------------;
  420. COMPUTE_ADDRESS LABEL        NEAR
  421.         PUSH        DS
  422.         PUSH        CS
  423.         POP        DS
  424.         XOR        DX,DX
  425. ;-----------------------------------------------------------------------;
  426. ;                                    ;
  427. ;        COMPUTE CYLINDER NUMBER WITH SECTOR REMAINDER        ;
  428. ;                                    ;
  429. ;-----------------------------------------------------------------------;
  430.         DIV        [DS:OPT].SECTORS_PER_TRACK
  431.         INC        DL
  432.         MOV        [DS:SECTOR_NUMBER],DL
  433. ;-----------------------------------------------------------------------;
  434. ;                                    ;
  435. ;        COMPUTE TRACK NUMBER WITH HEAD NUMBER REMAINDER     ;
  436. ;                                    ;
  437. ;-----------------------------------------------------------------------;
  438.         XOR        DX,DX
  439.         DIV        [DS:OPT].NUMBER_OF_HEADS
  440.         MOV        [DS:HEAD_NUMBER],DL
  441.         MOV        [DS:TRACK_NUMBER],AX
  442. ;-----------------------------------------------------------------------;
  443. ;                                    ;
  444. ;        RESTORE ORIGINAL DS REGISTER AND RETURN TO CALLER    ;
  445. ;                                    ;
  446. ;-----------------------------------------------------------------------;
  447.         POP        DS
  448.         RET
  449.         PAGE
  450. ;-----------------------------------------------------------------------;
  451. ;                                    ;
  452. ;        READ THE DISK ROUTINE, SET UP TRACK NUMBER        ;
  453. ;                                    ;
  454. ;-----------------------------------------------------------------------;
  455. READ_DISK    LABEL        NEAR
  456.         MOV        DX,[CS:TRACK_NUMBER]
  457.         MOV        CL,SHIFT_COUNT
  458.         SHL        DH,CL
  459. ;-----------------------------------------------------------------------;
  460. ;                                    ;
  461. ;        SET UP THE SECTOR NUMBER                ;
  462. ;                                    ;
  463. ;-----------------------------------------------------------------------;
  464.         OR        DH,[CS:SECTOR_NUMBER]
  465.         MOV        CX,DX
  466.         XCHG        CH,CL
  467. ;-----------------------------------------------------------------------;
  468. ;                                    ;
  469. ;        SET UP HEAD AND DRIVE NUMBER THEN READ DISK AND RETURN    ;
  470. ;                                    ;
  471. ;-----------------------------------------------------------------------;
  472.         MOV        DX,[CS:DISK_AND_HEAD]
  473.         DISK
  474.         RET
  475.         PAGE
  476. ;-----------------------------------------------------------------------;
  477. ;                                    ;
  478. ;        SET UP A SAVE AREA FOR IBMBIO OFFSET            ;
  479. ;                                    ;
  480. ;-----------------------------------------------------------------------;
  481. SAVE_OFFSET    EQU        WORD PTR $+LOAD_OFFSET
  482.         DW        0
  483. MSG1        EQU        $+LOAD_OFFSET
  484.         DW        CRLF
  485.         DB        "Non-System disk or disk error"
  486.         DW        CRLF
  487.         DB        "Replace and strike any key when ready"
  488.         DW        CRLF
  489.         DB        TERM
  490. MSG2        EQU        $+LOAD_OFFSET
  491.         DW        CRLF
  492.         DB        "Disk Boot failure"
  493.         DW        CRLF
  494.         DB        TERM
  495. IBMBIO        EQU        $+LOAD_OFFSET
  496.         DB        "ibmbio  com0"
  497. IBMDOS        EQU        $+LOAD_OFFSET
  498.         DB        "ibmdos  com0"
  499. ENTRY        ENDP
  500. CODE        ENDS
  501.         END        ENTRY
  502.