# HG changeset patch # User Pascal Bellard # Date 1573242940 -3600 # Node ID 10fa26e4c60decfccea28f0803f6848700591526 # Parent 55af2ae5af8f11586ed7079fd5487fda8f6f1ff8 linld: spare up to 30k more for zImage diff -r 55af2ae5af8f -r 10fa26e4c60d linld/stuff/src/!COMPILE.BAT --- a/linld/stuff/src/!COMPILE.BAT Fri Nov 08 17:15:11 2019 +0100 +++ b/linld/stuff/src/!COMPILE.BAT Fri Nov 08 20:55:40 2019 +0100 @@ -3,12 +3,12 @@ tasm /h > helptasm.log bcc > helpbcc.log tlink > helptlink.log -bcc @bccopt.opt -S -mt -DUSE_ARGSTR -DLARGE_IMAGES *.cpp > cpp.log +bcc @bccopt.opt -S -mt -DMOVE_SETUP -DUSE_ARGSTR -DLARGE_IMAGES *.cpp > cpp.log ren LINLD.ASM LINLD.ASO ren LOAD.ASM LOAD.ASO ren HIMEM.ASM HIMEM.ASO mawk -f pipehole.awk LINLD.ASO > LINLD.ASM mawk -f pipehole.awk LOAD.ASO > LOAD.ASM mawk -f pipehole.awk HIMEM.ASO > HIMEM.ASM -tasm /la /m /dUSE_ARGSTR /dNO386 /dLARGE_IMAGES /dLONG_FILENAME *.asm > asm.log +tasm /la /m /dMOVE_SETUP /dUSE_ARGSTR /dNO386 /dLARGE_IMAGES /dLONG_FILENAME *.asm > asm.log tlink /m /s /t @link.cmd > lnk.log diff -r 55af2ae5af8f -r 10fa26e4c60d linld/stuff/src/A20.ASM --- a/linld/stuff/src/A20.ASM Fri Nov 08 17:15:11 2019 +0100 +++ b/linld/stuff/src/A20.ASM Fri Nov 08 20:55:40 2019 +0100 @@ -99,23 +99,24 @@ push si di extrn _heap_top:word ifdef NO386 + mov ax,[_heap_top] + mov cl,4 + shr ax,cl + mov dx,cs + add dx,ax extrn _topseg:near call near _topseg - mov cl,4 mov [word sssp+2],ax - xchg ax,dx - mov ax,[_heap_top] - shr ax,cl else p386 mov ax,[_heap_top] shr ax,4 - mov dx,9000h + mov dx,cs + add dx,ax + mov ax,9000h endif - mov es,dx - mov cx,cs - add ax,cx - cmp ax,dx + mov es,ax + cmp dx,ax jb @@nooverflow ; Oops! We can stomp on our toes... better stop now mov bx,offset overflow @@ -124,9 +125,18 @@ mov cx,[bx-5] ; size mov si,[bx-2] ; data xor di,di + ifdef MOVE_SETUP + extrn _pm_high:byte + cmp [_pm_high],al + jne @@move_clear + mov di,8000h + sub di,cx + extrn _rm_offset:word + mov [_rm_offset],di + endif @@move_clear: movsb - mov [byte si-1],0 + mov [byte si-1],al loop @@move_clear ;push ds ;pop es diff -r 55af2ae5af8f -r 10fa26e4c60d linld/stuff/src/CRTL.ASM --- a/linld/stuff/src/CRTL.ASM Fri Nov 08 17:15:11 2019 +0100 +++ b/linld/stuff/src/CRTL.ASM Fri Nov 08 20:55:40 2019 +0100 @@ -59,9 +59,6 @@ _xfer_buf db 4096 dup (?) filecnt db ? ; in fact 0 minus file count... nextfilename dw ? - ifdef LARGE_IMAGES -curdata dw ? - endif ifdef EXTRA ultoabuf db 12 dup (?) endif @@ -586,12 +583,12 @@ mov [byte si],ah ; set temp eos call open pop [word si] ; restore string - jc @@die + jc jcdie mov [(image_himem di).fd],ax mov [(image_himem di).fd2close],ax mov bl,02h ; SEEK_END call lseek0 -@@die: +jcdie: mov bx,[(image_himem di).errmsg] jc die ifndef NO386 @@ -663,12 +660,12 @@ mov [(image_himem si).bufv],ax xchg ax,si @@vcpi_alloc: - xor edx,edx mov ax,0DE04h int 67h or ah,ah + stc mov bx,offset vcpi_alloc_err - jnz die + jnz jcdie ; for (i = cnt-1; i >= 0; i--) ifdef LARGE_IMAGES mov eax,ecx @@ -867,7 +864,9 @@ _next_bufv: clc push si - mov si,[curdata] + mov si,0 + org $-2 +curdata dw ? sbb ax,ax cmc adc ax,[(data_himem si).cacheidx] ; -1/+1 diff -r 55af2ae5af8f -r 10fa26e4c60d linld/stuff/src/JUMP.ASM --- a/linld/stuff/src/JUMP.ASM Fri Nov 08 17:15:11 2019 +0100 +++ b/linld/stuff/src/JUMP.ASM Fri Nov 08 20:55:40 2019 +0100 @@ -157,6 +157,12 @@ lodsw xchg ax,bx ; get pm->fallback low word lodsw ; get pm->fallback high word + ifdef MOVE_SETUP + mov si,0 + global _rm_offset:word + org $-2 +_rm_offset dw ? + endif push es call near @@isbzimage ; pop cs ; ds=es=ss @@ -183,6 +189,14 @@ extrn memcpy32:near call memcpy32 + ifdef MOVE_SETUP + ;xor di,di + mov cx,8000h + ;sub cx,si + rep + movsb + endif + ifndef noelks ifndef NO386 cmp [dword 1E6h],'SKLE' diff -r 55af2ae5af8f -r 10fa26e4c60d linld/stuff/src/LOAD.CPP --- a/linld/stuff/src/LOAD.CPP Fri Nov 08 17:15:11 2019 +0100 +++ b/linld/stuff/src/LOAD.CPP Fri Nov 08 20:55:40 2019 +0100 @@ -119,7 +119,7 @@ #define topseg() 0x9000 #endif u16 rm_size; -static u8 pm_high; // @ = @rm_size + 2, see JUMP.ASM +u8 pm_high; // @ = @rm_size + 2, see JUMP.ASM static u8* rm_buf; // @ = @rm_size + 3, see JUMP.ASM struct image_himem imgs[2]; @@ -211,7 +211,13 @@ // Try to load kernel high, maybe even blindly storing it // in unallocated memory as a last resort +#ifdef MOVE_SETUP + extern unsigned rm_offset; + if((u16)(((m->fallback=(u32(u16(_CS)+(u16(heap_top)>>4)+1)<<4)) + +m->size-rm_offset)>>16) >= +#else if((u16)(((m->fallback=(u32(u16(_CS)+(u16(heap_top)>>4)+1)<<4))+m->size)>>16) >= +#endif (u16)(topseg()>>12) || _pm_high) { m->fallback = base_himem; } diff -r 55af2ae5af8f -r 10fa26e4c60d linld/stuff/src/pipehole.awk --- a/linld/stuff/src/pipehole.awk Fri Nov 08 17:15:11 2019 +0100 +++ b/linld/stuff/src/pipehole.awk Fri Nov 08 20:55:40 2019 +0100 @@ -183,7 +183,7 @@ print " extrn N_LXLSH@4:near" sub(/N_LXLSH@/,"N_LXLSH@4") } - sub(/,0/,",dh") + sub(/-3\],0/,"-3],dh") if (/_base_himem\+2/ || /pop/ || /push/) next if (/_base_himem$/) { sub(/mov dx,/,"les dx,d")