Skip to content
Snippets Groups Projects
config.asm 1016 B
Newer Older
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