# HG changeset patch # User Pascal Bellard # Date 1573470114 -3600 # Node ID f3a4853e3eef8b22e038d87cc9ec1c48ed0f7bb0 # Parent a849a763afb1a11f7950625564617b02f9bcacfd linld: 8086 may load zImage (again) diff -r a849a763afb1 -r f3a4853e3eef linld/stuff/src/A20.ASM --- a/linld/stuff/src/A20.ASM Mon Nov 11 11:31:48 2019 +0100 +++ b/linld/stuff/src/A20.ASM Mon Nov 11 12:01:54 2019 +0100 @@ -19,7 +19,7 @@ msg_a20 db "Can't use A20",0 overflow db "Out of memory",0 ifdef NO386 -bzimage86 db "No bzImage on 8086",0 +bzimage86 db "8086 & bzImage",0 endif global sssp:dword global _initrd_desc:dword diff -r a849a763afb1 -r f3a4853e3eef linld/stuff/src/CRTL.ASM --- a/linld/stuff/src/CRTL.ASM Mon Nov 11 11:31:48 2019 +0100 +++ b/linld/stuff/src/CRTL.ASM Mon Nov 11 12:01:54 2019 +0100 @@ -17,9 +17,6 @@ segment _DATA byte public use16 'DATA' - global _heap_top - extrn _bss_end -_heap_top dw _bss_end msg_hang db "High mem corrupted - not exiting to DOS",0 vcpi_alloc_err db "VCPI " msg_malloc db "malloc error",0 @@ -478,6 +475,7 @@ ;_fastcall char* malloc_or_die(ax:unsigned size); ;*************************************************************** xchg_heap_top: + extrn _heap_top xchg ax,[_heap_top] ret diff -r a849a763afb1 -r f3a4853e3eef linld/stuff/src/_BEG.ASM --- a/linld/stuff/src/_BEG.ASM Mon Nov 11 11:31:48 2019 +0100 +++ b/linld/stuff/src/_BEG.ASM Mon Nov 11 12:01:54 2019 +0100 @@ -130,20 +130,18 @@ ; Check emm manager status and version ;mov ah,40h ; get status ;int 67h - ;test ah,ah - ;jnz no_vcpi + ;inc ax + ;js no_vcpi mov ah,46h ; get version int 67h - test ah,ah - jnz no_vcpi cmp al,40h ; version must be >= 4.0 - jb no_vcpi + jl no_vcpi ; btw check ax.15 ; Check vcpi manager status ;;mov ax,5A01h ; ALLOCATE RAW PAGES ;;mov bx,4 ;;int 67h - ;;test ah,ah - ;;jnz no_vcpi + ;;inc ax + ;;js no_vcpi ;;push dx ;$ save handle mov ax,0DE00h ; check for vcpi present int 67h @@ -163,7 +161,6 @@ jnz no_vcpi extrn _vcpi:byte dec [byte _vcpi] -no_vcpi: endif endcpu386: pushfd @@ -175,25 +172,33 @@ push dx popfd pushfd - pop dx + pop dx ; dx.1=flags.1=1 pop ax xor al,bl ; clear C je @@no_cpuid ; CPUID feature bit changed ? mov eax,80000001h ; Extended Processor Info and Feature Bits cpuid ifdef NO386 - mov dl,-1 ; set 386 flag - endif + mov dl,-1 + db 66h ; mov [_cpu_features],edx +@@no_cpuid: + mov [word _cpu_features],dx ; dl != 0 +no_vcpi: + else mov [_cpu_features],edx @@no_cpuid: + endif endcpu86: p8086 ;*************************************************************** ; build argv & argc ;*************************************************************** - extrn _heap_top:word - mov di,[_heap_top] + extrn _bss_end:word + mov di,offset _bss_end + global _heap_top + org $-2 +_heap_top dw ? ;xor ax,ax ;push ax ; envp (already cleared) ;mov [word di],ax ; argv[0] = 0 (idem)