-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
walter
committed
Jul 31, 2010
0 parents
commit ec9b624
Showing
515 changed files
with
182,927 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
TITLE ALLOC - Copyright (c) SLR Systems 1994 | ||
|
||
INCLUDE MACROS | ||
if fgh_win32 | ||
INCLUDE WIN32DEF | ||
endif | ||
|
||
PUBLIC CONVERT_SUBBX_TO_EAX_NOZERO,RELEASE_BLOCK,GET_NEW_LOG_BLK,CONVERT_SUBBX_TO_EAX | ||
PUBLIC RELEASE_SEGMENT,GET_NEW_IO_LOG_BLK,CONVERT_SUBBX_TO_EAX_NOZERO_IO,RELEASE_IO_SEGMENT | ||
PUBLIC RELEASE_IO_BLOCK | ||
|
||
|
||
.DATA | ||
|
||
EXTERNDEF GLOBAL_BLOCKS:BYTE | ||
|
||
EXTERNDEF ERR_TABLE:DWORD | ||
EXTERNDEF NUMBLKS:DWORD | ||
EXTERNDEF PHYS_TABLE:DWORD | ||
EXTERNDEF PHYS_BEG_FREELIST:DWORD | ||
EXTERNDEF PHYS_END_FREELIST:DWORD | ||
EXTERNDEF PHYS_PREV_BLOCK:DWORD,PHYS_NEXT_BLOCK:DWORD,SLR_PREV_SEG:DWORD,OPTI_STOSD_SIZE:DWORD | ||
EXTERNDEF ALLOCATED_BLOCKS:DWORD,ALLOCATED_IO_BLOCKS:DWORD,PHYS_IO_TEMP:DWORD,SLR_STRUCT_BASE:DWORD | ||
EXTERNDEF PHYS_STUFF:DWORD,SLRBUF_PTR:DWORD,BLOCK_NEXT:DWORD,PHYS_TABLE_ENTRIES:DWORD | ||
EXTERNDEF SLR_DICTIONARY_BASE:DWORD | ||
|
||
EXTERNDEF OOM_ERROR_SEM:QWORD,GLOBALALLOC_SEM:GLOBALSEM_STRUCT | ||
|
||
|
||
.CODE ROOT_TEXT | ||
|
||
EXTERNDEF _seg_released:proc | ||
EXTERNDEF _capture_eax:proc | ||
EXTERNDEF _release_eax:proc | ||
EXTERNDEF _release_eax_bump:proc | ||
EXTERNDEF _err_abort:proc,DO_DOSSEMREQUEST_AX:PROC,DO_DOSSEMCLEAR_AX:PROC | ||
EXTERNDEF WARN_RET:PROC,RELEASE_64K_SEGMENT:PROC,_disable_mapout:proc,CAPTURE_EAX:PROC,RELEASE_EAX:PROC | ||
EXTERNDEF _release_large_segment:proc | ||
externdef _oom_error:proc; | ||
externdef _sbrk:proc; | ||
externdef _get_new_phys_blk:proc; | ||
externdef _get_4k_segment:proc | ||
externdef _release_4k_segment:proc | ||
externdef _release_block:proc | ||
|
||
EXTERNDEF OOM_ERR:ABS,SEG_ALREADY_RELEASED_ERR:ABS | ||
|
||
|
||
|
||
GET_NEW_PHYS_BLK PROC | ||
push ECX | ||
push EDX | ||
call _get_new_phys_blk | ||
pop EDX | ||
pop ECX | ||
ret | ||
GET_NEW_PHYS_BLK ENDP | ||
|
||
|
||
GET_NEW_LOG_BLK EQU (GET_NEW_PHYS_BLK) | ||
GET_NEW_IO_LOG_BLK EQU (GET_NEW_LOG_BLK) | ||
|
||
|
||
; save ECX | ||
RELEASE_BLOCK PROC | ||
push ECX | ||
push EDX | ||
push EAX | ||
call _release_block | ||
add ESP,4 | ||
pop EDX | ||
pop ECX | ||
ret | ||
RELEASE_BLOCK ENDP | ||
|
||
|
||
RELEASE_SEGMENT EQU (RELEASE_BLOCK) | ||
RELEASE_IO_BLOCK EQU (RELEASE_BLOCK) | ||
RELEASE_IO_SEGMENT EQU (RELEASE_SEGMENT) | ||
|
||
;OOM_ERROR: | ||
; jmp _oom_error | ||
|
||
CONVERT_SUBBX_TO_EAX PROC | ||
; | ||
; MOV EAX,[ESP] | ||
MOV EAX,[EBX] | ||
|
||
OR EAX,EAX ;DOES BLOCK EXIST? | ||
JZ CSTE_1 ;NOPE, GO GET ONE | ||
|
||
RET | ||
|
||
CSTE_1: | ||
push ECX | ||
push EDX | ||
call _get_new_phys_blk | ||
pop EDX | ||
pop ECX | ||
; CALL GET_NEW_LOG_BLK | ||
|
||
MOV [EBX],EAX | ||
PUSHM EDI,ECX,EAX | ||
|
||
MOV EDI,EAX | ||
XOR EAX,EAX | ||
|
||
MOV ECX,OPTI_STOSD_SIZE | ||
OPTI_STOSD ;ZERO THE BLOCK... | ||
POPM EAX,ECX,EDI | ||
RET | ||
|
||
CONVERT_SUBBX_TO_EAX ENDP | ||
|
||
|
||
CONVERT_SUBBX_TO_EAX_NOZERO PROC | ||
; | ||
MOV EAX,[EBX] | ||
|
||
OR EAX,EAX ;DOES BLOCK EXIST? | ||
JZ CSTENZ_1 ;NOPE, GO GET ONE | ||
|
||
RET | ||
|
||
CSTENZ_1: | ||
push ECX | ||
push EDX | ||
call _get_new_phys_blk | ||
pop EDX | ||
pop ECX | ||
; CALL GET_NEW_LOG_BLK | ||
|
||
MOV [EBX],EAX | ||
|
||
RET | ||
|
||
CONVERT_SUBBX_TO_EAX_NOZERO ENDP | ||
|
||
|
||
CONVERT_SUBBX_TO_EAX_NOZERO_IO PROC | ||
; | ||
MOV EAX,[EBX] | ||
|
||
OR EAX,EAX ;DOES BLOCK EXIST? | ||
JZ L1$ ;NOPE, GO GET ONE | ||
|
||
RET | ||
|
||
L1$: | ||
push ECX | ||
push EDX | ||
call _get_new_phys_blk | ||
pop EDX | ||
pop ECX | ||
;CALL GET_NEW_IO_LOG_BLK | ||
|
||
MOV [EBX],EAX | ||
|
||
RET | ||
|
||
CONVERT_SUBBX_TO_EAX_NOZERO_IO ENDP | ||
|
||
|
||
END | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
!INCLUDE ..\COMMON\MAKEMACS | ||
|
||
|
||
FLAGS = $(MASMFLAGS) | ||
SRC = $(BASE)\ALLOC | ||
DMD = \dmd2\windows\bin\dmd | ||
CFLAGS=-I..\common -r | ||
|
||
|
||
ALL : $(LIB)\ALLOC.LIB | ||
|
||
$(LIB)\ALLOC.LIB : $(OBJ)\ALLOPOOL.OBJ $(OBJ)\allopoolc.obj $(OBJ)\ldatac.obj \ | ||
$(OBJ)\ALLOC.OBJ $(OBJ)\allocc.obj \ | ||
$(OBJ)\comprelec.obj $(OBJ)\minidatac.obj $(OBJ)\compalloc.obj | ||
OPTLIB /OKMULTI $(LIB)\ALLOC ~+ $(OBJ)\*; | ||
|
||
|
||
$(OBJ)\MINIDATA.OBJ : MINIDATA.ASM ..\COMMON\MACROS | ||
ML $(FLAGS) $(SRC)\MINIDATA.ASM | ||
|
||
$(OBJ)\ALLOPOOL.OBJ : ALLOPOOL.ASM ..\COMMON\MACROS | ||
ML $(FLAGS) $(SRC)\ALLOPOOL.ASM | ||
|
||
$(OBJ)\COMPALLO.OBJ : COMPALLO.ASM ..\COMMON\MACROS ..\COMMON\WIN32DEF | ||
ML $(FLAGS) $(SRC)\COMPALLO.ASM | ||
|
||
$(OBJ)\COMPRELE.OBJ : COMPRELE.ASM ..\COMMON\MACROS ..\COMMON\WIN32DEF | ||
ML $(FLAGS) $(SRC)\COMPRELE.ASM | ||
|
||
$(OBJ)\ALLOC.OBJ : ALLOC.ASM ..\COMMON\MACROS ..\COMMON\WIN32DEF | ||
ML $(FLAGS) $(SRC)\ALLOC.ASM | ||
|
||
$(OBJ)\INITPOOL.OBJ : INITPOOL.ASM ..\COMMON\MACROS | ||
ML $(FLAGS) $(SRC)\INITPOOL.ASM | ||
|
||
$(OBJ)\LDATA.OBJ : LDATA.ASM ..\COMMON\MACROS ..\COMMON\SEGMENTS | ||
ML $(FLAGS) $(SRC)\LDATA.ASM | ||
|
||
|
||
$(OBJ)\allocc.obj : allocc.c | ||
dmc -N_ -c allocc -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\allocc.obj | ||
|
||
$(OBJ)\allopoolc.obj : allopoolc.c | ||
dmc -N_ -c allopoolc -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\allopoolc.obj | ||
|
||
$(OBJ)\compalloc.obj : compalloc.c | ||
dmc -N_ -c compalloc -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\compalloc.obj | ||
|
||
$(OBJ)\comprelec.obj : comprelec.c | ||
dmc -N_ -c comprelec -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\comprelec.obj | ||
|
||
$(OBJ)\initpoolc.obj : initpoolc.c | ||
dmc -N_ -c initpoolc -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\initpoolc.obj | ||
|
||
$(OBJ)\ldatac.obj : ldatac.c | ||
dmc -N_ -c ldatac -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\ldatac.obj | ||
|
||
$(OBJ)\minidatac.obj : minidatac.c | ||
dmc -N_ -c minidatac -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\minidatac.obj | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
|
||
#include <windows.h> | ||
|
||
#include "all.h" | ||
|
||
void _seg_released() | ||
{ | ||
_err_abort(SEG_ALREADY_RELEASED_ERR); | ||
} | ||
|
||
void _oom_error() | ||
{ | ||
void *a; | ||
|
||
_asm | ||
{ | ||
xor EAX,EAX | ||
xchg EAX,SLR_STRUCT_BASE | ||
mov a,EAX | ||
} | ||
if (a) | ||
_release_large_segment(a); | ||
|
||
_asm | ||
{ | ||
xor EAX,EAX | ||
xchg EAX,SLR_DICTIONARY_BASE | ||
mov a,EAX | ||
} | ||
if (a) | ||
_release_large_segment(a); | ||
|
||
_capture_eax(&OOM_ERROR_SEM); | ||
_disable_mapout(); | ||
_err_abort(OOM_ERR); | ||
} | ||
|
||
void *_sbrk() | ||
{ | ||
void *p = VirtualAlloc(0, 0x4000, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); | ||
if (!p && !(_FINAL_ABORTING & 0xFF)) | ||
_oom_error(); | ||
return p; | ||
} | ||
|
||
void *_get_new_phys_blk() | ||
{ | ||
// Allocate a PAGE_SIZE block. | ||
// Returns EAX = address | ||
// We keep our own 'cache' of blocks hopefully for faster alloc and release | ||
|
||
_capture_eax(&GLOBALALLOC_SEM); | ||
int n = PHYS_TABLE_ENTRIES - 1; | ||
if (n < 0) | ||
{ | ||
_release_eax(&GLOBALALLOC_SEM); | ||
return _sbrk(); | ||
} | ||
PHYS_TABLE_ENTRIES = n; | ||
void *p = PHYS_TABLE[0]; | ||
if (n) | ||
memcpy(&PHYS_TABLE[0], &PHYS_TABLE[1], n * sizeof(void*)); | ||
_release_eax(&GLOBALALLOC_SEM); | ||
return p; | ||
} | ||
|
||
void *_get_new_io_log_blk() | ||
{ | ||
return _get_new_phys_blk(); | ||
} | ||
|
||
void *_get_4k_segment() | ||
{ | ||
void *p = VirtualAlloc(0, 0x1000, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); | ||
if (!p) | ||
_oom_error(); | ||
return p; | ||
} | ||
|
||
void _release_4k_segment(void *p) | ||
{ | ||
VirtualFree(p, 0, MEM_RELEASE); // release all | ||
} | ||
|
||
void _release_block(void *EAX) | ||
{ | ||
// EAX IS BLOCK TO RELEASE | ||
_capture_eax(&GLOBALALLOC_SEM); | ||
int ECX = PHYS_TABLE_ENTRIES; | ||
if (ECX == 8) | ||
{ | ||
_release_eax(&GLOBALALLOC_SEM); | ||
VirtualFree(EAX, 0, MEM_RELEASE); // release all | ||
} | ||
else | ||
{ | ||
PHYS_TABLE[ECX] = EAX; | ||
ECX++; | ||
PHYS_TABLE_ENTRIES = ECX; | ||
_release_eax(&GLOBALALLOC_SEM); | ||
} | ||
} | ||
|
||
void _release_io_segment(void *EAX) | ||
{ | ||
_release_block(EAX); | ||
} | ||
|
||
void _release_segment(void *EAX) | ||
{ | ||
_release_block(EAX); | ||
} | ||
|
||
void _release_io_block(void *EAX) | ||
{ | ||
_release_block(EAX); | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
TITLE ALLOINIT - Copyright (c) SLR Systems 1994 | ||
|
||
INCLUDE MACROS | ||
|
||
if 0 | ||
|
||
endif | ||
|
||
END | ||
|
Oops, something went wrong.