58 lines
1016 B
NASM
58 lines
1016 B
NASM
SECTION .text
|
|
USE16
|
|
|
|
align 512, db 0
|
|
|
|
config:
|
|
.xres: dw 0
|
|
.yres: dw 0
|
|
|
|
times 512 - ($ - config) db 0
|
|
|
|
save_config:
|
|
mov eax, (config - boot) / 512
|
|
mov bx, config
|
|
mov cx, 1
|
|
xor dx, dx
|
|
call store
|
|
ret
|
|
|
|
; store some sectors to disk from a buffer in memory
|
|
; buffer has to be below 1MiB
|
|
; IN
|
|
; ax: start sector
|
|
; bx: offset of buffer
|
|
; cx: number of sectors (512 Bytes each)
|
|
; dx: segment of buffer
|
|
; CLOBBER
|
|
; ax, bx, cx, dx, si
|
|
; TODO rewrite to (eventually) move larger parts at once
|
|
; if that is done increase buffer_size_sectors in startup-common to that (max 0x80000 - startup_end)
|
|
store:
|
|
cmp cx, 127
|
|
jbe .good_size
|
|
|
|
pusha
|
|
mov cx, 127
|
|
call store
|
|
popa
|
|
add ax, 127
|
|
add dx, 127 * 512 / 16
|
|
sub cx, 127
|
|
|
|
jmp store
|
|
.good_size:
|
|
mov [DAPACK.addr], eax
|
|
mov [DAPACK.buf], bx
|
|
mov [DAPACK.count], cx
|
|
mov [DAPACK.seg], dx
|
|
|
|
call print_dapack
|
|
|
|
mov dl, [disk]
|
|
mov si, DAPACK
|
|
mov ah, 0x43
|
|
int 0x13
|
|
jc error
|
|
ret
|