mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 00:44:23 +00:00
92 lines
2.1 KiB
Plaintext
92 lines
2.1 KiB
Plaintext
;****************************************************************
|
||
;* *
|
||
;* BOOT SECTOR FOR IBM PC *
|
||
;* *
|
||
;****************************************************************
|
||
|
||
min_mem equ 160 ;minimum memory in K
|
||
load_track_segment equ 2600H ;at 152K mark
|
||
|
||
;Check for at least 160K being present in the IBM PC.
|
||
;Use last 8K of 160K minimum memory for loader.
|
||
;Since track is 4K we have 4K extra past the Loader for
|
||
;disk buffer space and other unitialized storage
|
||
;used by the Loader.
|
||
|
||
;Note: that wherever it is decided to place the loader, the IBM PC
|
||
;cannot read over a 64K page boundary.
|
||
|
||
;the command:
|
||
;GENCMD BOOT 8080
|
||
;is used for this module
|
||
|
||
bw_video_ram equ 0b000h ;where to print an
|
||
color_video_ram equ 0b800h ;error message
|
||
|
||
cseg load_track_segment + 20H ;add 20H to get to sector 2
|
||
loader: ;where the Loader starts
|
||
|
||
cseg 0
|
||
org 0 ;The IBM ROM sets up
|
||
;SS=30H and SP is 80H: stack is in
|
||
;the interrupt vectors.
|
||
int 12H ;get memory size
|
||
cmp ax,min_mem
|
||
jnb get_track_0
|
||
jmps mem_error
|
||
|
||
get_track_0:
|
||
xor bx,bx ;set up call to ROM diskette read
|
||
mov ax,load_track_segment
|
||
mov es,ax ;ES:BX transfer location
|
||
mov ax,0208h ;AH=2=read,AL=8=sectors to read
|
||
mov cx,0001h ;CH=0=track,CL=1=sector
|
||
mov dx,0000h ;DH=0=head #,DL=0=drive #
|
||
int 13H ;call ROM diskette entry
|
||
jnc track_ok
|
||
jmps track_error
|
||
|
||
track_ok:
|
||
jmpf loader
|
||
|
||
mem_error:
|
||
mov cx,length mem_msg
|
||
mov si,offset mem_msg
|
||
jmps prt_msg
|
||
|
||
track_error:
|
||
mov cx,length trk_msg
|
||
mov si,offset trk_msg
|
||
;jmps prt_msg
|
||
|
||
prt_msg:
|
||
mov ax,bw_video_ram
|
||
int 11H ;get equipment information
|
||
and al,00110000b ;get video bits
|
||
cmp al,30H
|
||
je do_msg
|
||
mov ax,color_video_ram
|
||
do_msg:
|
||
mov es,ax
|
||
mov ax,cs
|
||
mov ds,ax
|
||
xor di,di
|
||
mov ah,07H ;normal display attribute
|
||
prt_loop:
|
||
lodsb
|
||
stosw
|
||
loop prt_loop
|
||
cli
|
||
hlt
|
||
|
||
|
||
last_code_offset equ offset $
|
||
dseg
|
||
org last_code_offset
|
||
|
||
mem_msg db 'Not enough memory present for loader'
|
||
trk_msg db 'Can''t read boot track'
|
||
|
||
org 512 - 1 ;force even sector size
|
||
db 0
|
||
|