# HG changeset patch # User Pascal Bellard # Date 1573302392 -3600 # Node ID 65ea21135647a2d55691555c46c50fa5f674108f # Parent bba007560f28c1af5acc599cd004080227d033a3 linld: spare up to 30k more for zImage (again) diff -r bba007560f28 -r 65ea21135647 linld/stuff/src/!COMPILEX.BAT --- a/linld/stuff/src/!COMPILEX.BAT Sat Nov 09 11:39:06 2019 +0100 +++ b/linld/stuff/src/!COMPILEX.BAT Sat Nov 09 13:26:32 2019 +0100 @@ -1,6 +1,6 @@ path ..\BC31;..;%PATH% call !clean.bat -bcc @bccopt.opt -S -mt -DLARGE_IMAGES *.cpp > cpp.log +bcc @bccopt.opt -S -mt -DMOVE_SETUP -DLARGE_IMAGES *.cpp > cpp.log ren TAZBOOT.ASM TAZBOOT.ASO ren LOAD.ASM LOAD.ASO ren HIMEM.ASM HIMEM.ASO @@ -9,5 +9,5 @@ mawk -f pipehole.awk LOAD.ASO > LOAD.ASM mawk -f pipehole.awk HIMEM.ASO > HIMEM.ASM mawk -f pipehole.awk ISO9660.ASO > ISO9660.ASM -tasm /la /m /dEXTRA /dNO386 /dLARGE_IMAGES /dLONG_FILENAME *.asm > asm.log +tasm /la /m /dMOVE_SETUP /dEXTRA /dNO386 /dLARGE_IMAGES /dLONG_FILENAME *.asm > asm.log tlink /m /s /t @linkx.cmd > lnk.log diff -r bba007560f28 -r 65ea21135647 linld/stuff/src/A20.ASM --- a/linld/stuff/src/A20.ASM Sat Nov 09 11:39:06 2019 +0100 +++ b/linld/stuff/src/A20.ASM Sat Nov 09 13:26:32 2019 +0100 @@ -122,7 +122,7 @@ mov bx,offset overflow call near die @@nooverflow: - mov cx,[bx-5] ; size + mov cx,[bx-4] ; size mov si,[bx-2] ; data xor di,di ifdef MOVE_SETUP diff -r bba007560f28 -r 65ea21135647 linld/stuff/src/COMMON.H --- a/linld/stuff/src/COMMON.H Sat Nov 09 11:39:06 2019 +0100 +++ b/linld/stuff/src/COMMON.H Sat Nov 09 13:26:32 2019 +0100 @@ -54,6 +54,7 @@ #define initrd (imgs[1]) #define pm2initrd(p) (p+1) +extern u8 pm_high; extern int skip_alloc; extern u32 base_himem; extern u32 far *initrd_desc; diff -r bba007560f28 -r 65ea21135647 linld/stuff/src/JUMP.ASM --- a/linld/stuff/src/JUMP.ASM Sat Nov 09 11:39:06 2019 +0100 +++ b/linld/stuff/src/JUMP.ASM Sat Nov 09 13:26:32 2019 +0100 @@ -96,20 +96,15 @@ push es pop ss mov sp,0A000h - extrn _rm_size:word + extrn _csip:dword ifdef NO386 - mov si,offset _rm_size-4 ; _rm_size, _pm_high, _rm_buf + mov si,offset _csip lodsw - xchg ax,bx - lodsw - push ax ; _csip high - push bx ; _csip low - lodsw ; skip _rm_size + push [word si] + push ax else - mov si,offset _rm_size+2 ; _rm_size, _pm_high, _rm_buf - push [dword si-6] ; _csip + push [dword _csip] endif - lodsb ; _pm_high ifdef NO386 mov cx,ss @@ -126,7 +121,10 @@ rep movsb - or cl,al ; load high ? + mov cl,0 ; load high ? + org $-1 + global _pm_high:byte +_pm_high db ? inc cx push cx mov ax,[word ss:024Ch] @@ -212,7 +210,11 @@ jne @@notelks xchg ax,si endif + ifdef MOVE_SETUP + mov ch,1h ; DS=ES=SS=0100 + else mov cx,100h ; DS=ES=SS=0100 + endif mov ss,cx mov es,cx mov cl,20h ; CS=0120 diff -r bba007560f28 -r 65ea21135647 linld/stuff/src/LOAD.CPP --- a/linld/stuff/src/LOAD.CPP Sat Nov 09 11:39:06 2019 +0100 +++ b/linld/stuff/src/LOAD.CPP Sat Nov 09 13:26:32 2019 +0100 @@ -112,15 +112,14 @@ const u32 HdrS = 'H' + ('d'<<8) + (u32('r')<<16) + (u32('S')<<24); // register value to launch the kernel real mode code -static u32 csip; +u32 csip; #ifdef NO386 extern "C" u16 topseg(); #else #define topseg() 0x9000 #endif -u16 rm_size; -u8 pm_high; // @ = @rm_size + 2, see JUMP.ASM -static u8* rm_buf; // @ = @rm_size + 3, see JUMP.ASM +static u16 rm_size; +static u8* rm_buf; // @ = @rm_size + 2, see A20.ASM struct image_himem imgs[2]; static const char kernel_file_error[] = "Can't use kernel file"; @@ -128,9 +127,8 @@ struct image_himem *m = ± #define _rm_buf(m) (((u8**)(m))[-1]) -#define _pm_high (((u8*)(m))[-3]) -#define _rm_size (*(u16*)((u8*)(m)-5)) -#define _csip (*(u32*)((u8*)(m)-9)) +#define _rm_size (((u16*)(m))[-2]) +#define _csip (((u32*)(m))[-2]) { struct kernelparams_t *kernelparams; kernelparams = &(((first1k_t*) (_rm_buf(m) = (u8 *)heap_top))->params); @@ -218,7 +216,7 @@ #else if((u16)(((m->fallback=(u32(u16(_CS)+(u16(heap_top)>>4)+1)<<4))+m->size)>>16) >= #endif - (u16)(topseg()>>12) || _pm_high) { + (u16)(topseg()>>12) || pm_high) { m->fallback = base_himem; } if (((u16 *)&m->fallback)[1] == 0) { diff -r bba007560f28 -r 65ea21135647 linld/stuff/src/_BEG.ASM --- a/linld/stuff/src/_BEG.ASM Sat Nov 09 11:39:06 2019 +0100 +++ b/linld/stuff/src/_BEG.ASM Sat Nov 09 13:26:32 2019 +0100 @@ -54,7 +54,7 @@ ; clear bss ;*************************************************************** mov sp,offset stktop - mov si,offset _version_string + mov si,offset _bss_start mov bx, 0F000h ; cld ; cli & empty string clearbss: mov [si],bl ; clear bss + heap + sp diff -r bba007560f28 -r 65ea21135647 linld/stuff/src/pipehole.awk --- a/linld/stuff/src/pipehole.awk Sat Nov 09 11:39:06 2019 +0100 +++ b/linld/stuff/src/pipehole.awk Sat Nov 09 13:26:32 2019 +0100 @@ -183,15 +183,16 @@ print " extrn N_LXLSH@4:near" sub(/N_LXLSH@/,"N_LXLSH@4") } - sub(/-3\],0/,"-3],dh") + sub(/pm_high,0/,"pm_high,dh") if (/_base_himem\+2/ || /pop/ || /push/) next if (/_base_himem$/) { - sub(/mov dx,/,"les dx,d") + sub(/mov dx,/,"les ax,d") isload++ } } if (isload == 401) { sub(/,ax/,",es") + sub(/,dx/,",ax") if (/load_image/) isload=0 } if (isload == 4 && is386) { # LOAD.LST