Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
walter committed Jul 31, 2010
0 parents commit ec9b624
Show file tree
Hide file tree
Showing 515 changed files with 182,927 additions and 0 deletions.
165 changes: 165 additions & 0 deletions alloc/alloc.asm
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

61 changes: 61 additions & 0 deletions alloc/alloc.mak
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


119 changes: 119 additions & 0 deletions alloc/allocc.c
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);
}


10 changes: 10 additions & 0 deletions alloc/alloinit.asm
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

Loading

0 comments on commit ec9b624

Please sign in to comment.