rdos/boot/mbr.asm

78 lines
899 B
NASM
Raw Normal View History

2019-09-17 23:53:10 +02:00
; Memory layout:
%define self 0x00600 ; 1 sector
%define prog 0x07C00 ; 1 sector
org self
cpu 8086
init:
cli
; Stack grows down from PSP + 64k
xor ax, ax
mov ss, ax
mov sp, ax
push dx
; Relocate from [prog] to [self]
mov ds, ax
mov es, ax
mov si, prog
mov di, self
mov cx, 0x100
rep movsw
jmp 0:main
main:
mov bp, 0x0035
mov WORD [dap.blocknum], 1
mov si, dap
mov ah, 0x42
stc
int 0x13
jc error
mov cx, [dap.blocknum]
int3
error:
mov ax, bp
mov ah, 0x0e
mov bx, 7
int 0x10
mov al, 0x21
int 0x10
xor ax, ax
int 0x16
int 0x19
dap:
.size:
db 0
db 0
.count:
dw 1
.buffer:
dw prog
dw 0
.blocknum:
dq 0
times (0x1BE - ($-$$)) db 0
part1:
db 0x80
.chs_start:
db 0xFF, 0xFF, 0xFF
.type:
db 0x01
.chs_end:
db 0xFF, 0xFF, 0xFF
.begin:
dd 1
.end:
dd (FLOPPY * 2)
times (0x1FE - ($-$$)) db 0
dw 0xAA55