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