--- Begin Message ---
diff -ruNp old/kernel/config.c new/kernel/config.c
--- old/kernel/config.c 2004-05-09 23:29:48.000000000 +0000
+++ new/kernel/config.c 2004-05-10 00:21:22.000000000 +0000
@@ -43,6 +43,18 @@ static BYTE *RcsId =
#endif
#define para2far(seg) ((mcb FAR *)MK_FP((seg), 0))
+typedef UWORD ofs_t;
+typedef UWORD seg_t;
+
+#if __TURBOC__ > 0x202
+# define FP_PTR(type,seg,ofs) ((type FAR*) MK_FP (seg, ofs))
+# define FP_SEG_PTR(type,seg) ((type _seg*) (seg))
+#else
+# define _seg FAR
+# define FP_PTR(type,seg,ofs) ((type FAR*) MK_FP (seg, ofs))
+# define FP_SEG_PTR(type,seg) ((type FAR*) MK_FP (seg, 0))
+#endif
+
/**
Menu selection bar struct:
x pos, ypos, string
@@ -482,16 +494,17 @@ void PostConfig(void)
VOID configDone(VOID)
{
if (UmbState == 1)
- para2far(base_seg)->m_type = MCB_LAST;
+ FP_SEG_PTR(mcb, base_seg)->m_type = MCB_LAST;
if (HMAState != HMA_DONE)
{
- mcb FAR *p;
- unsigned short kernel_seg;
- unsigned short hma_paras = (HMAFree+0xf)/16;
-
- allocmem(hma_paras, &kernel_seg);
- p = para2far(kernel_seg - 1);
+#ifdef DEBUG
+ unsigned short hma_paras = (HMAFree + 15) / 16;
+ unsigned short kernel_seg = allocmem(hma_paras);
+#else
+ unsigned short kernel_seg = allocmem((HMAFree + 15) / 16);
+#endif
+ mcb _seg *p = FP_SEG_PTR(mcb, kernel_seg - 1);
p->m_name[0] = 'S';
p->m_name[1] = 'C';
@@ -500,9 +513,7 @@ VOID configDone(VOID)
DebugPrintf(("HMA not available, moving text to %x\n", kernel_seg));
MoveKernel(kernel_seg);
- kernel_seg += hma_paras + 1;
-
- DebugPrintf(("kernel is low, start alloc at %x", kernel_seg));
+ DebugPrintf(("kernel is low, start alloc at %x", kernel_seg + hma_paras + 1));
}
/* The standard handles should be reopened here, because
@@ -2588,7 +2599,7 @@ VOID DoInstall(void)
r.b.b.l = 0x02; /*low memory, last fit
*/
init_call_intr(0x21, &r);
- allocmem(((unsigned)_init_end + ebda_size + 15) / 16, &installMemory);
+ installMemory = allocmem(((unsigned)_init_end + ebda_size + 15) / 16);
InstallPrintf(("allocated memory at %x\n",installMemory));
diff -ruNp old/kernel/init-mod.h new/kernel/init-mod.h
--- old/kernel/init-mod.h 2004-05-04 02:35:24.000000000 +0000
+++ new/kernel/init-mod.h 2004-05-10 00:16:56.000000000 +0000
@@ -157,10 +157,10 @@ unsigned ASMPASCAL init_call_intr(int nr
unsigned ASMPASCAL read(int fd, void *buf, unsigned count);
int ASMPASCAL open(const char *pathname, int flags);
int ASMPASCAL close(int fd);
-int ASMPASCAL dup2(int oldfdk, int newfd);
-int ASMPASCAL allocmem(UWORD size, seg * segp);
+int ASMPASCAL dup2(int oldfd, int newfd);
+seg ASMPASCAL allocmem(UWORD size);
void ASMPASCAL init_PSPSet(seg psp_seg);
-int ASMPASCAL init_DosExec(int mode, exec_blk * ep, char * lp);
+int ASMPASCAL init_DosExec(int mode, exec_blk * ep, const char * lp);
int ASMPASCAL init_setdrive(int drive);
int ASMPASCAL init_switchar(int chr);
void ASMPASCAL keycheck(void);
@@ -171,7 +171,7 @@ void ASMPASCAL set_DTA(void far *dta);
#pragma aux (pascal) init_DosOpen modify exact [ax bx dx]
#pragma aux (pascal) close modify exact [ax bx]
#pragma aux (pascal) dup2 modify exact [ax bx cx]
-#pragma aux (pascal) allocmem modify exact [ax bx dx]
+#pragma aux (pascal) allocmem modify exact [ax bx]
#pragma aux (pascal) init_PSPSet modify exact [ax bx]
#pragma aux (pascal) init_DosExec modify exact [ax bx dx es]
#pragma aux (pascal) init_setdrive modify exact [ax bx dx]
@@ -306,4 +306,3 @@ ULONG ASMCFUNC FAR MULULUL(ULONG mul1, U
ULONG ASMCFUNC FAR DIVULUS(ULONG mul1, UWORD mul2); /* DIVide ULong by UShort */
ULONG ASMCFUNC FAR DIVMODULUS(ULONG mul1, UWORD mul2, UWORD * rem); /* DIVide
ULong by UShort */
#endif
-
diff -ruNp old/kernel/intr.asm new/kernel/intr.asm
--- old/kernel/intr.asm 2004-05-10 00:00:46.000000000 +0000
+++ new/kernel/intr.asm 2004-04-24 06:26:38.000000000 +0000
@@ -206,7 +206,6 @@ INIT_DOSOPEN:
common_int21:
int 21h
jnc common_ret
-common_error:
sbb ax,ax
common_ret:
ret
@@ -298,19 +297,18 @@ INIT_SWITCHAR:
mov ax, 0x3701
jmp short common_dl_int21
-;; int allocmem(UWORD size, seg *segp)
+;
+; seg ASMPASCAL allocmem(UWORD size);
+;
global ALLOCMEM
ALLOCMEM:
pop ax ; ret address
- pop dx ; segp
pop bx ; size
push ax ; ret address
mov ah, 48h
int 21h
- jc short common_error
- mov bx, dx ; segp
- mov [bx], ax
- xor ax, ax
+ sbb bx,bx ; CF=1?
+ or ax,bx ; then ax=-1
ret
;
--- End Message ---