Protypical implementation of DPT copying
This commit is contained in:
parent
33f4fe37a8
commit
dc6035fe9d
4 changed files with 80 additions and 21 deletions
|
@ -8,24 +8,37 @@ dskseek: resd 1
|
|||
; disk buffer for I/O operations
|
||||
dskbuf: resb 512
|
||||
|
||||
dpt: resb DPTSIZE
|
||||
|
||||
section .text
|
||||
|
||||
ret: ret
|
||||
|
||||
; Convert drive number into DL for int 13h
|
||||
; IN dl dos drive number
|
||||
; OUT dl bios drive number
|
||||
getdl: cmp dl, 2
|
||||
jc ret
|
||||
mov dl, 0x80
|
||||
ret
|
||||
|
||||
; select drive
|
||||
; IN dl drive number
|
||||
dsksel: cmp dl, 1
|
||||
jnc ret
|
||||
mov al, dl
|
||||
and al, 0x02
|
||||
ror dl, 1
|
||||
ror dl, 1
|
||||
cmp dl, byte [dsknum]
|
||||
dsksel: cmp dl, byte [dsknum]
|
||||
je ret
|
||||
|
||||
call dskrst
|
||||
|
||||
int 3
|
||||
call getdl
|
||||
mov ah, 8
|
||||
les di, [0x1E*4]
|
||||
int 0x13
|
||||
|
||||
; copy dpt
|
||||
mov bx, di
|
||||
mov dx, dpt
|
||||
mov cx, DPTSIZE
|
||||
call lod
|
||||
|
||||
ret
|
||||
|
||||
|
|
52
kernel/far.asm
Normal file
52
kernel/far.asm
Normal file
|
@ -0,0 +1,52 @@
|
|||
; far pointer load
|
||||
; IN ES:BX far pointer to data
|
||||
; CX number of bytes to copy
|
||||
; 0:DX destination buffer
|
||||
; only CX is trashed
|
||||
|
||||
lod: push si
|
||||
push di
|
||||
push es
|
||||
|
||||
; ES:DI := DS:DX
|
||||
mov ax, ds
|
||||
mov es, ax
|
||||
mov di, dx
|
||||
; DS:SI := 0:BX
|
||||
xor ax, ax
|
||||
mov ds, ax
|
||||
mov si, bx
|
||||
; copy
|
||||
pushf
|
||||
cld
|
||||
rep movsb
|
||||
popf
|
||||
; reset DS to kernel data
|
||||
mov ds, cx
|
||||
|
||||
pop es
|
||||
pop di
|
||||
pop si
|
||||
ret
|
||||
|
||||
; far pointer store
|
||||
; IN ES:BX far ptr
|
||||
; CX number of bytes
|
||||
; 0:DX source buffer
|
||||
; only CX is trashed
|
||||
|
||||
sto: push si
|
||||
push di
|
||||
|
||||
mov si, dx
|
||||
mov di, bx
|
||||
|
||||
; do the copy
|
||||
pushf
|
||||
cld
|
||||
rep movsb
|
||||
popf
|
||||
|
||||
pop di
|
||||
pop si
|
||||
ret
|
Loading…
Add table
Add a link
Reference in a new issue