Code: Select all
; HiP-OS Bootstrap by Anthony Q. Bachler copyright 2009, released under the GPL v3
section .text
[bits 16]
jmp 0x07c0:start
start:
mov WORD [transfer_size] , 0x0080 ; set transfer size
mov ax , 0x07c0
mov ds , ax
mov ax , 0x2000 ; set up the stack
mov ss , ax
mov sp , 0xfffc
mov [boot_drive] , dl ; save the boot drive info
cmp dl , 0x7f ; is it floppy?
jle floppy_handler
mov ah , 0x42 ; function 0x42
mov si , packet ; pointer to predefined packet
int 0x13 ; int 0x13 / 0x42 EXTENDED READ
jnc continue
floppy_handler:
; reset the floppy
mov ah , 0x00
int 0x13
; copy 32k image into memory
mov ax , 0x1000
mov es , ax
xor bx , bx
mov cx , 0x0001
mov dh , 0x00
mov ax , 0x0240
int 0x13
jc floppy_handler
; copy the 32k image to the hard drive
mov ax , packet
mov si , ax
mov ax , 0x4301
mov dl , 0x80
int 0x13
;hlt
jmp 0xffff:0x0000 ; reset the system
continue:
mov ax , 0x1000
mov ds , ax
mov dl , [boot_drive]
mov [ds:boot_drive] , dl
jmp 0x1000:loaded
loaded:
mov ax , 0xb000
mov es , ax
mov ax , 0x4100
mov [es:0x0000] , ax
hlt
installer_check db 0xff ; set to 0xff for the install disk 0x00 otherwise
boot_drive db 0x00 ; the drive number this booted from
packet db 0x10 ; size of packet
db 0x00 ; reserved
transfer_size dw 0x0040 ; number of blocks to transfer - 64 = 32k
transfer_buffer dw 0x1000 , 0x0000 ; destination buffer
block_start db 0x00 , 0x00 , 0x00 , 0x00 ; LBA block to load
db 0x00 , 0x00 , 0x00 , 0x00
times 446-($-$$) db 0
boot_indicator db 0x80
starting_head db 0x00
start_sector db 0x01
start_cylinder db 0x00
system_id db 0x7f
end_head db 0x01
end_sector db 0x12
end_cylinder db 0x4f
relative_sector db 0x01 , 0x00 , 0x00 , 0x00
total_sectors db 0x40 , 0x0b , 0x00 , 0x00
times 48 db 0
db 0x55
db 0xAA
times 1474560-($-$$) db 0
section .data
; put data items here
section .bss
; put uninitialised data here