# HG changeset patch # User Pascal Bellard # Date 1491667484 -7200 # Node ID df649897625775b9247500542c22f05169a02fcc # Parent 9e8f9b54bd83d20236dcfaece643a5d4f46fecbe linld/tazboot: memcpy32 bug workaround diff -r 9e8f9b54bd83 -r df6498976257 linld/stuff/src/COMMON.H --- a/linld/stuff/src/COMMON.H Sat Apr 08 12:48:12 2017 +0200 +++ b/linld/stuff/src/COMMON.H Sat Apr 08 18:04:44 2017 +0200 @@ -78,7 +78,7 @@ // External asm helpers extern "C" void memcpy32(u32, u16,u32, u32); extern "C" void rmcpy(); -extern "C" void set_sregs_jump_seg_ofs(u32 csip); +extern "C" void set_sregs_jump_seg_ofs(); extern "C" void xmm_alloc(struct image_himem *m); extern u32 topmem; extern "C" u32 memtopz(); diff -r 9e8f9b54bd83 -r df6498976257 linld/stuff/src/JUMP.ASM --- a/linld/stuff/src/JUMP.ASM Sat Apr 08 12:48:12 2017 +0200 +++ b/linld/stuff/src/JUMP.ASM Sat Apr 08 18:04:44 2017 +0200 @@ -32,7 +32,6 @@ extrn dos_shutdown:near - pop ax ; caller return address ifdef NO386 extrn _topseg:near call near _topseg @@ -42,13 +41,12 @@ push 9000h pop es endif - pop dx ; ip - pop cx ; cs cli ; we start doing destructive things to DOS push es pop ss mov sp,0A000h - push cx dx + extrn _csip:dword + push [dword _csip] extrn _rm_size:word mov si,offset _rm_size ; _rm_size, _pm_high, _rm_buf lodsw @@ -103,7 +101,7 @@ pop bx ; move zImage pm mov ax,8 - cwd + cwd ; clear dx cmp bx,ax ja bufhigh sub ax,bx diff -r 9e8f9b54bd83 -r df6498976257 linld/stuff/src/LOAD.CPP --- a/linld/stuff/src/LOAD.CPP Sat Apr 08 12:48:12 2017 +0200 +++ b/linld/stuff/src/LOAD.CPP Sat Apr 08 18:04:44 2017 +0200 @@ -118,10 +118,10 @@ // register value to launch the kernel real mode code #ifdef NO386 -static u32 csip; +u32 csip; extern "C" u16 topseg(); #else -static u32 csip=0x90200000; +u32 csip=0x90200000; #define topseg() 0x9000 #endif @@ -277,5 +277,5 @@ } // Move rm loader & commandline to 0x90000, Jump to kernel rm code - set_sregs_jump_seg_ofs(csip); + set_sregs_jump_seg_ofs(); } diff -r 9e8f9b54bd83 -r df6498976257 linld/stuff/src/MEMCPY32.ASM --- a/linld/stuff/src/MEMCPY32.ASM Sat Apr 08 12:48:12 2017 +0200 +++ b/linld/stuff/src/MEMCPY32.ASM Sat Apr 08 18:04:44 2017 +0200 @@ -39,15 +39,17 @@ push ss push ax pop [dword cs:sssp] + mov [word bx+4],offset step19 else + mov ax,offset step19 + xchg ax,[word bx+4] push [word bx+6] - push [word bx+4] ; save step + push ax ; save step mov [word cs:sssp],sp mov [word cs:sssp+2],ss endif ;cmp [byte bx+7],0F0h ;jnc notdos - mov [word bx+4],offset step19 mov [bx+6],cs pushf pop ax @@ -72,10 +74,10 @@ ifndef NO386 lss sp,[dword cs:sssp] else - lds bx,[dword cs:sssp] + lds ax,[dword cs:sssp] push ds pop ss - mov sp,bx + xchg ax,sp endif xor bx,bx mov ds,bx @@ -118,7 +120,8 @@ ;****** Init *************************************************** - ifndef NO386 + ifndef FIXME_NO386 + p386 enter TEMP_SIZE,0 ;cld