Fix int 0x80 from different segment

This commit is contained in:
2025-10-01 23:24:38 +02:00
parent b0d57c1c96
commit 3df5b28e4e

25
polio.s
View File

@@ -40,8 +40,13 @@ dosdbt: # assumes es=0
.section .text.int80stuff
# near copy [param 2] bytes, es:[param 0] -> es:[param 1]
# near copy [param 2] bytes, ds:[param 0] -> ds:[param 1]
copy:
mov ax, [bp-14] # ds
mov es, ax
mov ds, ax
mov cl, 4
shl si, cl
mov si, [bp+0] # source
mov di, [bp+2] # destination
mov cx, [bp+4] # length
@@ -107,20 +112,36 @@ formattrack:
int 0x13
ret
# params: ds:fname, ds:dest
readfile:
mov si, [bp-14] # ds
mov cl, 4
shl si, cl
mov ax, [bp+0]
add ax, si
mov dx, [bp+2]
add dx, si
call fat12_readfile
ret
# params: ds:addr, size
sendpara:
mov si, [bp-14] # ds
mov cl, 4
shl si, cl
mov ax, [bp+0]
add ax, si
mov dx, [bp+2]
call parasend
ret
# params: ds:addr, size
recvpara:
mov si, [bp-14] # ds
mov cl, 4
shl si, cl
mov ax, [bp+0]
add ax, si
mov dx, [bp+2]
call pararecv
ret
@@ -144,7 +165,7 @@ int80h:
mov si, ax
mov bp, sp
lea bp, [bp + 16] # 10 for us, 6 for the interrupt
call [int80h_table+si]
call cs:[int80h_table+si]
jmp 1f
0:
mov ax, -1