78 lines
899 B
NASM
78 lines
899 B
NASM
|
; 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
|