From 504952db812eb43b41636db1da125be946cfd35f Mon Sep 17 00:00:00 2001 From: sparky4 Date: Wed, 22 Feb 2017 15:56:11 -0600 Subject: [PATCH] ==== bcexmm.exe works again! yay! ==== wwww --- BCEXMM.L16 | 68 +++++++ DEBUG.16B | 210 +++++++++++++++++++++ DEBUG.16W | 210 +++++++++++++++++++++ EXMMTEST.L16 | 472 ++++++++++++++++++++++++++++++++++++++++++++++ HEAP.16W | 47 +++++ MEMINFO.16B | 0 MEMINFO.16W | 0 MMDUMP.16B | Bin 0 -> 2550 bytes MMDUMP.16W | Bin 0 -> 2550 bytes bcexmm.exe | Bin 109052 -> 109640 bytes src/exmmtest.c | 177 +++++++++++------ src/lib/16_ca.c | 27 ++- src/lib/16_dbg.c | 10 +- src/lib/16_dbg.h | 10 +- src/lib/16_hc.c | 119 +++++++++--- src/lib/16_hc.h | 23 +-- src/lib/16_head.c | 2 + src/lib/16_head.h | 8 +- src/lib/16_map.h | 3 +- src/lib/16_mm.c | 79 ++------ src/lib/16_t.h | 9 +- src/lib/16_tail.h | 1 + src/lib/16_tdef.h | 4 +- 23 files changed, 1309 insertions(+), 170 deletions(-) create mode 100755 BCEXMM.L16 create mode 100755 DEBUG.16B create mode 100755 DEBUG.16W create mode 100755 EXMMTEST.L16 create mode 100755 HEAP.16W create mode 100755 MEMINFO.16B create mode 100755 MEMINFO.16W create mode 100755 MMDUMP.16B create mode 100755 MMDUMP.16W diff --git a/BCEXMM.L16 b/BCEXMM.L16 new file mode 100755 index 00000000..41d44021 --- /dev/null +++ b/BCEXMM.L16 @@ -0,0 +1,68 @@ +------------------------------------------------------------------------------- +&main()= 1228:0FFA +buffer: + 0004:0000 &0AC8:2EB2 + 0000 & 2eb2 +------------------------------------------------------------------------------- + + +press any key to continue! +======================================load====================================== +=============================================================================== + CA_LoadFile +=============================================================================== + ptr=0AC8:2EB2 + *ptr=110D:0000 + &ptr=1228:0FCE +MM_GetPtr + baseptr=0AC8:2EB2 useptr=0AC8:2EB2 + *baseptr=1C52:0000 *useptr=1C52:0000 + &baseptr=1228:0FB2 &useptr=0AC8:3797 +--------------------------------------- + ptr=0AC8:2EB2 + *ptr=110D:7900 + &ptr=1228:0FCE +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +&main()= 1228:0FFA +buffer: + 0001:7900 &0AC8:2EB2 + 7900 & 2eb2 +------------------------------------------------------------------------------- + +yay! +press any key to continue! +======================================== + DebugMemory_ +======================================== +Memory Usage +------------ +Total: 558k +Free: 150k +With purge: 550k +------------ +MMDUMP.16 created. +======================================== + MM_Report_ +======================================== + ÉLIMEMS 1 + ÇÄEMM v4.0 available + ÇÄtotalEMSpages: 4032 freeEMSpages: 3939 + ÇÄEMSPageFrame: e000 + ÓÄEMSmem: 64536576 + ÉXMS 1 + ÇÄXMS v3.0 available + ÇÄXMSDriver: C83F:0010 + ÇÄXMSHandle: 0800 + ÓÄXMSmem: 2097152 + ÉConv. 1 + ÓÄTotal: 558k Free: 150k With purge:550k +nearheap: 50852 farheap: 521204 +======================================== +near= 1373:0004 far= 1FFF:0004 +&near= 0AC8:30E5 &far= 0AC8:30E1 +bigb= 0001:0000 &bigb=0AC8:2EB2 +======================================== +Project 16 bcexmm.exe. This is just a test file! +version Feb 22 2017 14:48:22 +debugmm: 1 diff --git a/DEBUG.16B b/DEBUG.16B new file mode 100755 index 00000000..629832b7 --- /dev/null +++ b/DEBUG.16B @@ -0,0 +1,210 @@ +Seg:0 Size:4864 Owner:0x0 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0 +Seg:1300 Size:256 Owner:0x2e21 +++++ +Seg:1400 Size:256 Owner:0x2c24 +++++ +Seg:1500 Size:256 Owner:0x2c26 +++++ +Seg:1600 Size:256 Owner:0x2c28 +++++ +Seg:1700 Size:256 Owner:0x2c2a +++++ +Seg:1800 Size:256 Owner:0x2c2c +++++ +Seg:1900 Size:256 Owner:0x2c2e +++++ +Seg:1a00 Size:256 Owner:0x2c30 +++++ +Seg:1b00 Size:256 Owner:0x2c32 +++++ +Seg:1c00 Size:256 Owner:0x2c34 +++++ +Seg:1d00 Size:256 Owner:0x2c36 +++++ +Seg:1e00 Size:256 Owner:0x2c38 +++++ +Seg:1fde Size:34 Owner:0x0 +++ +Seg:2000 Size:256 Owner:0x2c3a +++++ +Seg:2100 Size:256 Owner:0x2c3c +++++ +Seg:2200 Size:256 Owner:0x2c3e +++++ +Seg:2300 Size:256 Owner:0x2c40 +++++ +Seg:2400 Size:256 Owner:0x2c42 +++++ +Seg:2500 Size:256 Owner:0x2c44 +++++ +Seg:2600 Size:256 Owner:0x2c46 +++++ +Seg:2700 Size:256 Owner:0x2c48 +++++ +Seg:2800 Size:256 Owner:0x2c4a +++++ +Seg:2900 Size:256 Owner:0x2c4c +++++ +Seg:2a00 Size:256 Owner:0x2c4e +++++ +Seg:2b00 Size:256 Owner:0x2c50 +++++ +Seg:2c00 Size:256 Owner:0x2c52 +++++ +Seg:2d00 Size:256 Owner:0x2c54 +++++ +Seg:2e00 Size:256 Owner:0x2c56 +++++ +Seg:2f00 Size:256 Owner:0x2c58 +++++ +Seg:3000 Size:256 Owner:0x2c5a +++++ +Seg:3100 Size:256 Owner:0x2c5c +++++ +Seg:3200 Size:256 Owner:0x2c5e +++++ +Seg:3300 Size:256 Owner:0x2c60 +++++ +Seg:3400 Size:256 Owner:0x2c62 +++++ +Seg:3500 Size:256 Owner:0x2c64 +++++ +Seg:3600 Size:256 Owner:0x2c66 +++++ +Seg:3700 Size:256 Owner:0x2c68 +++++ +Seg:3800 Size:256 Owner:0x2c6a +++++ +Seg:3900 Size:256 Owner:0x2c6c +++++ +Seg:3a00 Size:256 Owner:0x2c6e +++++ +Seg:3b00 Size:256 Owner:0x2c70 +++++ +Seg:3c00 Size:256 Owner:0x2c72 +++++ +Seg:3d00 Size:256 Owner:0x2c74 +++++ +Seg:3e00 Size:256 Owner:0x2c76 +++++ +Seg:3f00 Size:256 Owner:0x2c78 +++++ +Seg:4000 Size:256 Owner:0x2c7a +++++ +Seg:4100 Size:256 Owner:0x2c7c +++++ +Seg:4200 Size:256 Owner:0x2c7e +++++ +Seg:4300 Size:256 Owner:0x2c80 +++++ +Seg:4400 Size:256 Owner:0x2c82 +++++ +Seg:4500 Size:256 Owner:0x2c84 +++++ +Seg:4600 Size:256 Owner:0x2c86 +++++ +Seg:4700 Size:256 Owner:0x2c88 +++++ +Seg:4800 Size:256 Owner:0x2c8a +++++ +Seg:4900 Size:256 Owner:0x2c8c +++++ +Seg:4a00 Size:256 Owner:0x2c8e +++++ +Seg:4b00 Size:256 Owner:0x2c90 +++++ +Seg:4c00 Size:256 Owner:0x2c92 +++++ +Seg:4d00 Size:256 Owner:0x2c94 +++++ +Seg:4e00 Size:256 Owner:0x2c96 +++++ +Seg:4f00 Size:256 Owner:0x2c98 +++++ +Seg:5000 Size:256 Owner:0x2c9a +++++ +Seg:5100 Size:256 Owner:0x2c9c +++++ +Seg:5200 Size:256 Owner:0x2c9e +++++ +Seg:5300 Size:256 Owner:0x2ca0 +++++ +Seg:5400 Size:256 Owner:0x2ca2 +++++ +Seg:5500 Size:256 Owner:0x2ca4 +++++ +Seg:5600 Size:256 Owner:0x2ca6 +++++ +Seg:5700 Size:256 Owner:0x2ca8 +++++ +Seg:5800 Size:256 Owner:0x2caa +++++ +Seg:5900 Size:256 Owner:0x2cac +++++ +Seg:5a00 Size:256 Owner:0x2cae +++++ +Seg:5b00 Size:256 Owner:0x2cb0 +++++ +Seg:5c00 Size:256 Owner:0x2cb2 +++++ +Seg:5d00 Size:256 Owner:0x2cb4 +++++ +Seg:5e00 Size:256 Owner:0x2cb6 +++++ +Seg:5f00 Size:256 Owner:0x2cb8 +++++ +Seg:6000 Size:256 Owner:0x2cba +++++ +Seg:6100 Size:256 Owner:0x2cbc +++++ +Seg:6200 Size:256 Owner:0x2cbe +++++ +Seg:6300 Size:256 Owner:0x2cc0 +++++ +Seg:6400 Size:256 Owner:0x2cc2 +++++ +Seg:6500 Size:256 Owner:0x2cc4 +++++ +Seg:6600 Size:256 Owner:0x2cc6 +++++ +Seg:6700 Size:256 Owner:0x2cc8 +++++ +Seg:6800 Size:256 Owner:0x2cca +++++ +Seg:6900 Size:256 Owner:0x2ccc +++++ +Seg:6a00 Size:256 Owner:0x2cce +++++ +Seg:6b00 Size:256 Owner:0x2cd0 +++++ +Seg:6c00 Size:256 Owner:0x2cd2 +++++ +Seg:6d00 Size:256 Owner:0x2cd4 +++++ +Seg:6e00 Size:256 Owner:0x2cd6 +++++ +Seg:6f00 Size:256 Owner:0x2cd8 +++++ +Seg:7000 Size:256 Owner:0x2cda +++++ +Seg:7100 Size:256 Owner:0x2cdc +++++ +Seg:7200 Size:256 Owner:0x2cde +++++ +Seg:7300 Size:256 Owner:0x2ce0 +++++ +Seg:7400 Size:256 Owner:0x2ce2 +++++ +Seg:7500 Size:256 Owner:0x2ce4 +++++ +Seg:7600 Size:256 Owner:0x2ce6 +++++ +Seg:7700 Size:256 Owner:0x2ce8 +++++ +Seg:7800 Size:256 Owner:0x2cea +++++ +Seg:7900 Size:273 Owner:0x2bfa +++++ +Seg:9f3f Size:24768 Owner:0x0 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/DEBUG.16W b/DEBUG.16W new file mode 100755 index 00000000..f401ae96 --- /dev/null +++ b/DEBUG.16W @@ -0,0 +1,210 @@ +Seg:0 Size:8973 Owner:0x0 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0000 +Seg:23fe Size:39 Owner:0x0 ++ +Seg:2425 Size:256 Owner:0x1dc4 +++++ +Seg:2525 Size:256 Owner:0x1bb6 ++++++ +Seg:2625 Size:256 Owner:0x1bb8 +++++ +Seg:2725 Size:256 Owner:0x1bba +++++ +Seg:2825 Size:256 Owner:0x1bbc +++++ +Seg:2925 Size:256 Owner:0x1bbe +++++ +Seg:2a25 Size:256 Owner:0x1bc0 ++++++ +Seg:2b25 Size:256 Owner:0x1bc2 +++++ +Seg:2c25 Size:256 Owner:0x1bc4 +++++ +Seg:2d25 Size:256 Owner:0x1bc6 +++++ +Seg:2e25 Size:256 Owner:0x1bc8 +++++ +Seg:2f25 Size:256 Owner:0x1bca ++++++ +Seg:3025 Size:256 Owner:0x1bcc +++++ +Seg:3125 Size:256 Owner:0x1bce +++++ +Seg:3225 Size:256 Owner:0x1bd0 +++++ +Seg:3325 Size:256 Owner:0x1bd2 +++++ +Seg:3425 Size:256 Owner:0x1bd4 ++++++ +Seg:3525 Size:256 Owner:0x1bd6 +++++ +Seg:3625 Size:256 Owner:0x1bd8 +++++ +Seg:3725 Size:256 Owner:0x1bda +++++ +Seg:3825 Size:256 Owner:0x1bdc +++++ +Seg:3925 Size:256 Owner:0x1bde ++++++ +Seg:3a25 Size:256 Owner:0x1be0 +++++ +Seg:3b25 Size:256 Owner:0x1be2 +++++ +Seg:3c25 Size:256 Owner:0x1be4 +++++ +Seg:3d25 Size:256 Owner:0x1be6 +++++ +Seg:3e25 Size:256 Owner:0x1be8 ++++++ +Seg:3f25 Size:256 Owner:0x1bea +++++ +Seg:4025 Size:256 Owner:0x1bec +++++ +Seg:4125 Size:256 Owner:0x1bee +++++ +Seg:4225 Size:256 Owner:0x1bf0 +++++ +Seg:4325 Size:256 Owner:0x1bf2 ++++++ +Seg:4425 Size:256 Owner:0x1bf4 +++++ +Seg:4525 Size:256 Owner:0x1bf6 +++++ +Seg:4625 Size:256 Owner:0x1bf8 +++++ +Seg:4725 Size:256 Owner:0x1bfa +++++ +Seg:4825 Size:256 Owner:0x1bfc ++++++ +Seg:4925 Size:256 Owner:0x1bfe +++++ +Seg:4a25 Size:256 Owner:0x1c00 +++++ +Seg:4b25 Size:256 Owner:0x1c02 +++++ +Seg:4c25 Size:256 Owner:0x1c04 +++++ +Seg:4d25 Size:256 Owner:0x1c06 ++++++ +Seg:4e25 Size:256 Owner:0x1c08 +++++ +Seg:4f25 Size:256 Owner:0x1c0a +++++ +Seg:5025 Size:256 Owner:0x1c0c +++++ +Seg:5125 Size:256 Owner:0x1c0e +++++ +Seg:5225 Size:256 Owner:0x1c10 ++++++ +Seg:5325 Size:256 Owner:0x1c12 +++++ +Seg:5425 Size:256 Owner:0x1c14 +++++ +Seg:5525 Size:256 Owner:0x1c16 +++++ +Seg:5625 Size:256 Owner:0x1c18 +++++ +Seg:5725 Size:256 Owner:0x1c1a ++++++ +Seg:5825 Size:256 Owner:0x1c1c +++++ +Seg:5925 Size:256 Owner:0x1c1e +++++ +Seg:5a25 Size:256 Owner:0x1c20 +++++ +Seg:5b25 Size:256 Owner:0x1c22 +++++ +Seg:5c25 Size:256 Owner:0x1c24 ++++++ +Seg:5d25 Size:256 Owner:0x1c26 +++++ +Seg:5e25 Size:256 Owner:0x1c28 +++++ +Seg:5f25 Size:256 Owner:0x1c2a +++++ +Seg:6025 Size:256 Owner:0x1c2c +++++ +Seg:6125 Size:256 Owner:0x1c2e ++++++ +Seg:6225 Size:256 Owner:0x1c30 +++++ +Seg:6325 Size:256 Owner:0x1c32 +++++ +Seg:6425 Size:256 Owner:0x1c34 +++++ +Seg:6525 Size:256 Owner:0x1c36 +++++ +Seg:6625 Size:256 Owner:0x1c38 ++++++ +Seg:6725 Size:256 Owner:0x1c3a +++++ +Seg:6825 Size:256 Owner:0x1c3c +++++ +Seg:6925 Size:256 Owner:0x1c3e +++++ +Seg:6a25 Size:256 Owner:0x1c40 +++++ +Seg:6b25 Size:256 Owner:0x1c42 ++++++ +Seg:6c25 Size:256 Owner:0x1c44 +++++ +Seg:6d25 Size:256 Owner:0x1c46 +++++ +Seg:6e25 Size:256 Owner:0x1c48 +++++ +Seg:6f25 Size:256 Owner:0x1c4a +++++ +Seg:7025 Size:256 Owner:0x1c4c ++++++ +Seg:7125 Size:256 Owner:0x1c4e +++++ +Seg:7225 Size:256 Owner:0x1c50 +++++ +Seg:7325 Size:256 Owner:0x1c52 +++++ +Seg:7425 Size:256 Owner:0x1c54 +++++ +Seg:7525 Size:256 Owner:0x1c56 ++++++ +Seg:7625 Size:256 Owner:0x1c58 +++++ +Seg:7725 Size:256 Owner:0x1c5a +++++ +Seg:7825 Size:256 Owner:0x1c5c +++++ +Seg:7925 Size:256 Owner:0x1c5e +++++ +Seg:7a25 Size:256 Owner:0x1c60 ++++++ +Seg:7b25 Size:256 Owner:0x1c62 +++++ +Seg:7c25 Size:256 Owner:0x1c64 +++++ +Seg:7d25 Size:256 Owner:0x1c66 +++++ +Seg:7e25 Size:256 Owner:0x1c68 +++++ +Seg:7f25 Size:256 Owner:0x1c6a ++++++ +Seg:8025 Size:256 Owner:0x1c6c +++++ +Seg:8125 Size:256 Owner:0x1c6e +++++ +Seg:8225 Size:256 Owner:0x1c70 +++++ +Seg:8325 Size:256 Owner:0x1c72 +++++ +Seg:8425 Size:256 Owner:0x1c74 ++++++ +Seg:8525 Size:256 Owner:0x1c76 +++++ +Seg:8625 Size:256 Owner:0x1c78 +++++ +Seg:8725 Size:256 Owner:0x1c7a +++++ +Seg:8825 Size:256 Owner:0x1c7c +++++ +Seg:8925 Size:273 Owner:0x1b88 ++++++ +Seg:9d64 Size:25243 Owner:0x0 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/EXMMTEST.L16 b/EXMMTEST.L16 new file mode 100755 index 00000000..5c2f9577 --- /dev/null +++ b/EXMMTEST.L16 @@ -0,0 +1,472 @@ +MM_GetPtr + baseptr=1430:1db4 useptr=1430:1db4 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec62 &useptr=1430:1e20 +MM_GetPtr + baseptr=1430:1ba6 useptr=1430:1ba6 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1e30 +MM_GetPtr + baseptr=1430:1ba8 useptr=1430:1ba8 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1e40 +MM_GetPtr + baseptr=1430:1baa useptr=1430:1baa + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1e50 +MM_GetPtr + baseptr=1430:1bac useptr=1430:1bac + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1e60 +MM_GetPtr + baseptr=1430:1bae useptr=1430:1bae + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1e70 +MM_GetPtr + baseptr=1430:1bb0 useptr=1430:1bb0 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1e80 +MM_GetPtr + baseptr=1430:1bb2 useptr=1430:1bb2 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1e90 +MM_GetPtr + baseptr=1430:1bb4 useptr=1430:1bb4 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1ea0 +MM_GetPtr + baseptr=1430:1bb6 useptr=1430:1bb6 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1eb0 +MM_GetPtr + baseptr=1430:1bb8 useptr=1430:1bb8 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1ec0 +MM_GetPtr + baseptr=1430:1bba useptr=1430:1bba + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1ed0 +MM_GetPtr + baseptr=1430:1bbc useptr=1430:1bbc + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1ee0 +MM_GetPtr + baseptr=1430:1bbe useptr=1430:1bbe + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1ef0 +MM_GetPtr + baseptr=1430:1bc0 useptr=1430:1bc0 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1f00 +MM_GetPtr + baseptr=1430:1bc2 useptr=1430:1bc2 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1f10 +MM_GetPtr + baseptr=1430:1bc4 useptr=1430:1bc4 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1f20 +MM_GetPtr + baseptr=1430:1bc6 useptr=1430:1bc6 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1f30 +MM_GetPtr + baseptr=1430:1bc8 useptr=1430:1bc8 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1f40 +MM_GetPtr + baseptr=1430:1bca useptr=1430:1bca + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1f50 +MM_GetPtr + baseptr=1430:1bcc useptr=1430:1bcc + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1f60 +MM_GetPtr + baseptr=1430:1bce useptr=1430:1bce + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1f70 +MM_GetPtr + baseptr=1430:1bd0 useptr=1430:1bd0 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1f80 +MM_GetPtr + baseptr=1430:1bd2 useptr=1430:1bd2 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1f90 +MM_GetPtr + baseptr=1430:1bd4 useptr=1430:1bd4 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1fa0 +MM_GetPtr + baseptr=1430:1bd6 useptr=1430:1bd6 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1fb0 +MM_GetPtr + baseptr=1430:1bd8 useptr=1430:1bd8 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1fc0 +MM_GetPtr + baseptr=1430:1bda useptr=1430:1bda + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1fd0 +MM_GetPtr + baseptr=1430:1bdc useptr=1430:1bdc + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1fe0 +MM_GetPtr + baseptr=1430:1bde useptr=1430:1bde + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:1ff0 +MM_GetPtr + baseptr=1430:1be0 useptr=1430:1be0 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2000 +MM_GetPtr + baseptr=1430:1be2 useptr=1430:1be2 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2010 +MM_GetPtr + baseptr=1430:1be4 useptr=1430:1be4 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2020 +MM_GetPtr + baseptr=1430:1be6 useptr=1430:1be6 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2030 +MM_GetPtr + baseptr=1430:1be8 useptr=1430:1be8 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2040 +MM_GetPtr + baseptr=1430:1bea useptr=1430:1bea + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2050 +MM_GetPtr + baseptr=1430:1bec useptr=1430:1bec + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2060 +MM_GetPtr + baseptr=1430:1bee useptr=1430:1bee + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2070 +MM_GetPtr + baseptr=1430:1bf0 useptr=1430:1bf0 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2080 +MM_GetPtr + baseptr=1430:1bf2 useptr=1430:1bf2 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2090 +MM_GetPtr + baseptr=1430:1bf4 useptr=1430:1bf4 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:20a0 +MM_GetPtr + baseptr=1430:1bf6 useptr=1430:1bf6 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:20b0 +MM_GetPtr + baseptr=1430:1bf8 useptr=1430:1bf8 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:20c0 +MM_GetPtr + baseptr=1430:1bfa useptr=1430:1bfa + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:20d0 +MM_GetPtr + baseptr=1430:1bfc useptr=1430:1bfc + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:20e0 +MM_GetPtr + baseptr=1430:1bfe useptr=1430:1bfe + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:20f0 +MM_GetPtr + baseptr=1430:1c00 useptr=1430:1c00 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2100 +MM_GetPtr + baseptr=1430:1c02 useptr=1430:1c02 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2110 +MM_GetPtr + baseptr=1430:1c04 useptr=1430:1c04 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2120 +MM_GetPtr + baseptr=1430:1c06 useptr=1430:1c06 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2130 +MM_GetPtr + baseptr=1430:1c08 useptr=1430:1c08 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2140 +MM_GetPtr + baseptr=1430:1c0a useptr=1430:1c0a + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2150 +MM_GetPtr + baseptr=1430:1c0c useptr=1430:1c0c + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2160 +MM_GetPtr + baseptr=1430:1c0e useptr=1430:1c0e + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2170 +MM_GetPtr + baseptr=1430:1c10 useptr=1430:1c10 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2180 +MM_GetPtr + baseptr=1430:1c12 useptr=1430:1c12 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2190 +MM_GetPtr + baseptr=1430:1c14 useptr=1430:1c14 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:21a0 +MM_GetPtr + baseptr=1430:1c16 useptr=1430:1c16 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:21b0 +MM_GetPtr + baseptr=1430:1c18 useptr=1430:1c18 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:21c0 +MM_GetPtr + baseptr=1430:1c1a useptr=1430:1c1a + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:21d0 +MM_GetPtr + baseptr=1430:1c1c useptr=1430:1c1c + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:21e0 +MM_GetPtr + baseptr=1430:1c1e useptr=1430:1c1e + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:21f0 +MM_GetPtr + baseptr=1430:1c20 useptr=1430:1c20 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2200 +MM_GetPtr + baseptr=1430:1c22 useptr=1430:1c22 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2210 +MM_GetPtr + baseptr=1430:1c24 useptr=1430:1c24 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2220 +MM_GetPtr + baseptr=1430:1c26 useptr=1430:1c26 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2230 +MM_GetPtr + baseptr=1430:1c28 useptr=1430:1c28 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2240 +MM_GetPtr + baseptr=1430:1c2a useptr=1430:1c2a + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2250 +MM_GetPtr + baseptr=1430:1c2c useptr=1430:1c2c + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2260 +MM_GetPtr + baseptr=1430:1c2e useptr=1430:1c2e + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2270 +MM_GetPtr + baseptr=1430:1c30 useptr=1430:1c30 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2280 +MM_GetPtr + baseptr=1430:1c32 useptr=1430:1c32 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2290 +MM_GetPtr + baseptr=1430:1c34 useptr=1430:1c34 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:22a0 +MM_GetPtr + baseptr=1430:1c36 useptr=1430:1c36 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:22b0 +MM_GetPtr + baseptr=1430:1c38 useptr=1430:1c38 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:22c0 +MM_GetPtr + baseptr=1430:1c3a useptr=1430:1c3a + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:22d0 +MM_GetPtr + baseptr=1430:1c3c useptr=1430:1c3c + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:22e0 +MM_GetPtr + baseptr=1430:1c3e useptr=1430:1c3e + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:22f0 +MM_GetPtr + baseptr=1430:1c40 useptr=1430:1c40 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2300 +MM_GetPtr + baseptr=1430:1c42 useptr=1430:1c42 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2310 +MM_GetPtr + baseptr=1430:1c44 useptr=1430:1c44 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2320 +MM_GetPtr + baseptr=1430:1c46 useptr=1430:1c46 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2330 +MM_GetPtr + baseptr=1430:1c48 useptr=1430:1c48 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2340 +MM_GetPtr + baseptr=1430:1c4a useptr=1430:1c4a + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2350 +MM_GetPtr + baseptr=1430:1c4c useptr=1430:1c4c + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2360 +MM_GetPtr + baseptr=1430:1c4e useptr=1430:1c4e + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2370 +MM_GetPtr + baseptr=1430:1c50 useptr=1430:1c50 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2380 +MM_GetPtr + baseptr=1430:1c52 useptr=1430:1c52 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2390 +MM_GetPtr + baseptr=1430:1c54 useptr=1430:1c54 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:23a0 +MM_GetPtr + baseptr=1430:1c56 useptr=1430:1c56 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:23b0 +MM_GetPtr + baseptr=1430:1c58 useptr=1430:1c58 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:23c0 +MM_GetPtr + baseptr=1430:1c5a useptr=1430:1c5a + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:23d0 +MM_GetPtr + baseptr=1430:1c5c useptr=1430:1c5c + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:23e0 +MM_GetPtr + baseptr=1430:1c5e useptr=1430:1c5e + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:23f0 +MM_GetPtr + baseptr=1430:1c60 useptr=1430:1c60 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2400 +MM_GetPtr + baseptr=1430:1c62 useptr=1430:1c62 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2410 +MM_GetPtr + baseptr=1430:1c64 useptr=1430:1c64 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2420 +MM_GetPtr + baseptr=1430:1c66 useptr=1430:1c66 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2430 +MM_GetPtr + baseptr=1430:1c68 useptr=1430:1c68 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2440 +MM_GetPtr + baseptr=1430:1c6a useptr=1430:1c6a + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2450 +MM_GetPtr + baseptr=1430:1c6c useptr=1430:1c6c + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec48 &useptr=1430:2460 +------------------------------------------------------------------------------- +&main()= 1430:6cc1 +buffer: + 1430:0000 &1430:1b78 + 0000 & 1b78 +------------------------------------------------------------------------------- +press any key to continue! +======================================load====================================== +MM_GetPtr + baseptr=1430:1b78 useptr=1430:1b78 + *baseptr=1430:0000 *useptr=1430:0000 + &baseptr=1430:ec64 &useptr=1430:2470 +------------------------------------------------------------------------------- +&main()= 1430:6cc1 +buffer: + 1430:893b &1430:1b78 + 893b & 1b78 +------------------------------------------------------------------------------- + +yay! +======================================read====================================== +------------------------------------------------------------------------------- +&main()= 1430:6cc1 +buffer: + 1430:893b &1430:1b78 + 893b & 1b78 +------------------------------------------------------------------------------- + +yay! +======================================== + DebugMemory_ +======================================== +Memory Usage +------------ +Total: 578k +Free: 170k +With purge: 570k +------------ +MMDUMP.16 created. +======================================== + MM_Report_ +======================================== + ÉLIMEMS 1 + ÇÄEMM v4.0 available + ÇÄtotalEMSpages: 4032 freeEMSpages: 3939 + ÇÄEMSPageFrame: e000 + ÓÄEMSmem: 64536576 + ÉXMS 1 + ÇÄXMS v3.0 available + ÇÄXMSDriver: c83f:0010 + ÇÄXMSHandle: 0800 + ÓÄXMSmem: 2097152 + ÉConv. 1 + ÓÄTotal: 578k Free: 170k With purge:570k +nearheap: 3884 farheap: 588812 +======================================== +near= 1430:eec8 far= 2431:009c +&near= 1430:1dc0 &far= 1430:1dbc +bigb= 1430:0000 &bigb=1430:1b78 +======================================== + +_memavl(): 4404 +HC_farcoreleft(): 962022 +HC_GetNearFreeSize(): 4406 +HC_GetFarFreeSize(): 40134 +Project 16 exmmtest.exe. This is just a test file! +version Feb 22 2017 12:35:11 +debugmm: 1 diff --git a/HEAP.16W b/HEAP.16W new file mode 100755 index 00000000..e4332ea9 --- /dev/null +++ b/HEAP.16W @@ -0,0 +1,47 @@ + + == default == + + USED block at 24200016 of size 26 + USED block at 24200030 of size 26 + FREE block at 2420004a of size 38914 + USED block at 2420984c of size 136 + USED block at 242098d4 of size 20 + FREE block at 242098e8 of size 7972 +OK - end of heap + + == near == + + USED block at 141fece6 of size 12 + USED block at 141fecf2 of size 332 + USED block at 141fee3e of size 52 + USED block at 141fee72 of size 20 + USED block at 141fee86 of size 20 + USED block at 141fee9a of size 20 + USED block at 141feeae of size 20 + USED block at 141feec2 of size 20 + USED block at 141feed6 of size 4390 +OK - end of heap + + == far == + + USED block at 24200016 of size 26 + USED block at 24200030 of size 26 + USED block at 2420004a of size 38914 + USED block at 2420984c of size 136 + USED block at 242098d4 of size 20 + USED block at 242098e8 of size 7972 +OK - end of heap + +Memory Type Total Used Free +---------------- -------- -------- -------- +Default 47094 208 46886 +Near 4886 496 4390 +Far 47094 208 46886 +---------------- -------- -------- -------- +HC_coreleft = 4388 +HC_farcoreleft = 458752 +HC_GetFreeSize = 46886 +HC_GetNearFreeSize = 4390 +HC_GetFarFreeSize = 46886 +memavl = 4388 +stackavail = 31606 diff --git a/MEMINFO.16B b/MEMINFO.16B new file mode 100755 index 00000000..e69de29b diff --git a/MEMINFO.16W b/MEMINFO.16W new file mode 100755 index 00000000..e69de29b diff --git a/MMDUMP.16B b/MMDUMP.16B new file mode 100755 index 0000000000000000000000000000000000000000..2cb68d4dc47df90ab63609c39a98c8c421d77af2 GIT binary patch literal 2550 zcmZ|RD^3Ja6h%=q34$4vYy?SB?@xkwKQzN(_#hC7UV10@X1Q~IpXasSukqQB+w1eo z@o}VD^V8$`7v>d@+tIN0Fn*QRFCc6gjFK zRgNl0m7~g0<*0I0Ihq_zjwVNwqsh_aXmT_;x*T1OE=QN6%hBcNa&$R{97B#F$B<*l zG2|F>3^}G8Q;sRelw-;<<(P6zIhGttjwQ#EW681PSaK{mwj5iIEytE)%dz3u*W2&7 I`?ukK0K7QsJpcdz literal 0 HcmV?d00001 diff --git a/MMDUMP.16W b/MMDUMP.16W new file mode 100755 index 0000000000000000000000000000000000000000..4c1c8fe9edd4b1517cdc2f85946d98ddcf695252 GIT binary patch literal 2550 zcmZ|RJxWAD5QR}=!N487a0~|e{|$nBa0^a#_ZnQjCW677_~TNXtkQQ%WxnV8?RH$Q zuW!f4(R0r)&*?AR$8q_5dK7*akHeQjC@h3X3PqtQ$Psdc93e-@G3A(YOgW|;Q;sRe zlw-=V$v8WI3`NS&l46mLtnid8W5{vJamsPZamsPZamsPR MG2{36_1_Qo14r}+YXATM literal 0 HcmV?d00001 diff --git a/bcexmm.exe b/bcexmm.exe index d5f755b1a57612117f50e7a6dd2fd91e8f5e1765..5376f8fc10e1793aa6b639ba05e3b9959654548e 100755 GIT binary patch delta 44606 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 diff --git a/src/exmmtest.c b/src/exmmtest.c index 94599daf..b6efd4eb 100755 --- a/src/exmmtest.c +++ b/src/exmmtest.c @@ -22,6 +22,7 @@ /* exmm test */ +#include // for _memavl() #include "src/lib/16_head.h" #include "src/lib/16_tail.h" #include "src/lib/16_pm.h" @@ -29,31 +30,52 @@ #include "src/lib/16_mm.h" #include "src/lib/16_hc.h" //#include "src/lib/16_vl.h" +#include "src/lib/16_dbg.h" + #pragma hdrstop #pragma warn -pro #pragma warn -use //file load or read definition +#define FILEREADLOAD #define FILEREAD -#define EXMMVERBOSE -//#ifdef __BORLANDC__ +//#define EXMMVERBOSE +//#define BUFFDUMPPAUSE +//#define EXMMVERBOSE__ +// #define PRINTBBDUMP #define BUFFDUMP -//#endif -#define BBUF bigbuffer//gvar.ca.tinf[0] +#define BBUFNAME gvar.ca.tinf[0]//bigbuffer +//#define INITBBUF static memptr BBUFNAME; +#define BBUFPTR &BBUFNAME + +#ifdef __BORLANDC__ +#define BBUF (memptr *)BBUFPTR// +#define BBUFSTRING (memptr *)BBUFNAME +#endif +#ifdef __WATCOMC__ +#define BBUF BBUFNAME +#define BBUFSTRING BBUF +#endif + void VGAmodeX(sword vq, boolean cmem, global_game_variables_t *gv) { printf("VGAmodeX dummy:\n %Fp %Fp %Fp\n", &vq, &cmem, gv); } + +//printf("* %Fp\t", *BBUF); +//printf("* %04x\t", *BBUF); #define PRINTBB {\ + printf("-------------------------------------------------------------------------------\n");\ printf("&main()= %Fp\n", argv[0]);\ - printf("BBUF:\n");\ + printf("buffer:\n");\ printf(" %Fp\t", BBUF);\ - printf("&%Fp\n", &BBUF);\ + printf("&%Fp\n", BBUFPTR);\ printf(" %04x\t", BBUF);\ - printf("& %04x\n", &BBUF);\ + printf("& %04x\n", BBUFPTR);\ + printf("-------------------------------------------------------------------------------\n");\ } //printf("&main()= %Fp\n", *argv[0]); //printf("bigbuffer= %Fp\n", bigbuffer); @@ -86,9 +108,11 @@ void segatesuto() void main(int argc, char *argv[]) { - byte w=1; + byte w; static global_game_variables_t gvar; - memptr BBUF; +#ifdef INITBBUF + INITBBUF +#endif //#ifdef __WATCOMC__ // __segment sega; //#endif @@ -100,8 +124,8 @@ main(int argc, char *argv[]) argc=argc; #endif //file name // - bakapee1 = malloc(64); - bakapee2 = malloc(64); + bakapee1 = malloc(24); + bakapee2 = malloc(24); //file name // #ifdef __16_PM__ @@ -110,7 +134,12 @@ main(int argc, char *argv[]) #endif #endif - //PRINTBB +#ifdef __DEBUG_CA__ + dbg_debugca=1; +#endif +#ifdef PRINTBBDUMP +//0000PRINTBB; printf("press any key to continue!\n"); getch(); +#endif if(argv[1]){ bakapee1 = argv[1]; if(argv[2]) bakapee2 = argv[2]; } else{ @@ -119,63 +148,85 @@ main(int argc, char *argv[]) bakapee2 = "data/test.map"; } //printf("main()=%Fp start MM\n", *argv[0]); - MM_Startup(&gvar); - //printf("ok\n"); + MM_Startup(&gvar); //printf("ok\n"); #ifdef __16_PM__ #ifdef __DEBUG_PM__ if(dbg_debugpm>0) { #endif PM_Startup(&gvar); PM_CheckMainMem(&gvar); PM_UnlockMainMem(&gvar); +//0000 printf("PM Started\n"); printf("press any key to continue!\n"); getch(); #ifdef __DEBUG_PM__ } #endif +#endif + +#ifdef __DEBUG_MM__ + dbg_debugmm=0; #endif CA_Startup(&gvar); // printf(" done!\n"); - //0000 - PRINTBB; printf("press any key to continue!\n"); getch(); +#ifdef PRINTBBDUMP +//0000 +PRINTBB; printf("\n\npress any key to continue!\n"); getch(); +#endif +#ifdef __DEBUG_MM__ + dbg_debugmm=1; +#endif + + w=0; +#ifdef FILEREADLOAD #ifdef FILEREAD -for(w=0;w<2;w++) -{ -// printf("size of big buffer~=%u\n", _bmsize(segu, BBUF)); - if(w>0) + for(;w<2;w++) { - printf(" read\n"); - if(CA_ReadFile(bakapee2, &BBUF, &gvar)) baka=1; else baka=0; - } + // printf("size of big buffer~=%u\n", _bmsize(segu, BBUF)); + if(w>0) + { + printf("======================================read=====================================\n"); + if(CA_ReadFile(bakapee2, BBUFPTR, &gvar)) baka=1; else baka=0; + printf("====================================read end===================================\n"); + } #endif - if(w==0) - { - printf(" load\n"); - if(CA_LoadFile(bakapee1, &BBUF, &gvar)) baka=1; else baka=0; - } + if(w==0) + { + printf("======================================load=====================================\n"); + if(CA_LoadFile(bakapee1, BBUFPTR, &gvar)) baka=1; else baka=0; + printf("====================================load end===================================\n"); + } //#ifdef __WATCOMC__ // printf("\nsize of big buffer~=%u\n", _bmsize(sega, BBUF)); //#endif #ifdef BUFFDUMP - printf("contents of the buffer\n[\n%s\n]\n", (BBUF)); + printf("contents of the buffer\n[\n%s\n]\n", BBUFSTRING); #endif// #else - PRINTBB; -// #endif - //printf("dark purple = purgable\n"); - //printf("medium blue = non purgable\n"); - //printf("red = locked\n"); -// printf("press any key to continue!\n"); -// DebugMemory_(&gvar, 1); - if(baka) printf("\nyay!\n"); - else printf("\npoo!\n"); - printf("press any key to continue!\n"); - getch(); +#ifdef PRINTBBDUMP + PRINTBB; +#endif +//endif // BUFFDUMP + + //printf("dark purple = purgable\n"); + //printf("medium blue = non purgable\n"); + //printf("red = locked\n"); + // printf("press any key to continue!\n"); + // DebugMemory_(&gvar, 1); + if(baka) printf("\nyay!\n"); + else printf("\npoo!\n"); +#ifdef BUFFDUMPPAUSE + printf("press any key to continue!\n"); getch(); +#endif #ifdef FILEREAD -} + } #endif +#ifndef BUFFDUMPPAUSE + printf("press any key to continue!\n"); getch(); +#endif +#endif //filereadload DebugMemory_(&gvar, 1); MM_DumpData(&gvar); MM_Report_(&gvar); //printf("bakapee1=%s\n", bakapee1); //printf("bakapee2=%s\n", bakapee2); - MM_FreePtr(&BBUF, &gvar); + MM_FreePtr(BBUFPTR, &gvar); #ifdef __16_PM__ #ifdef __DEBUG_PM__ if(dbg_debugpm>0) @@ -196,30 +247,48 @@ for(w=0;w<2;w++) printf("bigb= %Fp ", BBUF); //printf("bigbr= %04x", BBUF); //printf("\n"); - printf("&bigb=%Fp ", &BBUF); - //printf("&bigb=%04x", &BBUF); + printf("&bigb=%Fp ", BBUFPTR); + //printf("&bigb=%04x", BBUFPTR); printf("\n"); +#endif printf("========================================\n"); + +#ifdef EXMMVERBOSE__ + printf("coreleft(): %u\n", _memavl()); + printf("farcoreleft(): %lu\n", (dword)HC_farcoreleft()); #endif - printf("\n"); - printf("HC_coreleft(): %u\n", HC_coreleft()); #ifdef __WATCOMC__ //this is far printf("Total free: %lu\n", (dword)(HC_GetFreeSize())); - printf("HC_GetNearFreeSize(): %u\n", HC_GetNearFreeSize()); - printf("HC_GetFarFreeSize(): %lub\n", (dword)HC_GetFarFreeSize()); +//super buggy printf("HC_coreleft(): %u\n", HC_coreleft()); +// printf("HC_farcoreleft(): %lu\n", (dword)HC_farcoreleft()); + //printf("HC_GetNearFreeSize(): %u\n", HC_GetNearFreeSize()); + //printf("HC_GetFarFreeSize(): %lu\n", (dword)HC_GetFarFreeSize()); HC_heapdump(&gvar); // segatesuto(); #endif -#ifdef __BORLANDC__ +/*#ifdef __BORLANDC__ //printf("core left: %lu\n", (dword)HC_coreleft()); //printf("far core left: %lu\n", (dword)HC_farcoreleft()); - printf("coreleft(): %u\n", coreleft()); - printf("farcoreleft(): %lu\n", (dword)farcoreleft()); +// printf("\nfarcoreleft(): %lu\n", farcoreleft()); +#endif*/ + printf("Project 16 "); +#ifdef __WATCOMC__ + printf("exmmtest"); +#endif +#ifdef __BORLANDC__ + printf("bcexmm"); #endif - printf("Project 16 exmmtest.exe. This is just a test file!\n"); + printf(".exe. This is just a test file!\n"); printf("version %s\n", VERSION); - //printf("\n"); - +#if defined(__DEBUG__) && ( defined(__DEBUG_PM__) || defined(__DEBUG_MM__) ) +#ifdef __DEBUG_MM__ + printf("debugmm: %u\t", dbg_debugmm); +#endif +#ifdef __DEBUG_PM__ + printf("debugpm: %u", dbg_ddebugpm); +#endif + printf("\n"); +#endif //printf("based core left: %lu\n", (dword)_basedcoreleft()); //printf("huge core left: %lu\n", (dword)_hugecoreleft()); } diff --git a/src/lib/16_ca.c b/src/lib/16_ca.c index 9e984899..c08ef434 100755 --- a/src/lib/16_ca.c +++ b/src/lib/16_ca.c @@ -305,7 +305,7 @@ boolean CA_FarWrite(int handle, byte far *source, dword length, global_game_vari //segm=(length%0xfffflu)-1; //fat=segm*0xfffflu; //length-=fat; - printf("CA_FarRead doesn't support 64K reads yet!\n"); + printf("CA_FarWrite doesn't support 64K reads yet!\n"); return 0; } @@ -377,10 +377,10 @@ boolean CA_ReadFile(char *filename, memptr *ptr, global_game_variables_t *gvar) size = filelength(handle); if(!CA_FarRead(handle,*ptr,size, gvar)) { - close (handle); + close(handle); return false; } - close (handle); + close(handle); return true; } @@ -438,7 +438,28 @@ boolean CA_LoadFile(char *filename, memptr *ptr, global_game_variables_t *gvar) return false; size = filelength(handle); +#ifdef __DEBUG_CA__ + if(dbg_debugca>0){ + printf("===============================================================================\n"); + printf(" CA_LoadFile\n"); + printf("===============================================================================\n"); + //%04x + printf(" ptr=%Fp\n", ptr); + printf(" *ptr=%Fp\n", *ptr); + printf(" &ptr=%Fp\n", &ptr); + } +#endif MM_GetPtr(ptr,size, gvar); +#ifdef __DEBUG_CA__ + if(dbg_debugca>0){ + //%04x + printf("---------------------------------------\n"); + printf(" ptr=%Fp\n", ptr); + printf(" *ptr=%Fp\n", *ptr); + printf(" &ptr=%Fp\n", &ptr); + printf("-------------------------------------------------------------------------------\n"); + } +#endif if(!CA_FarRead(handle,*ptr,size, gvar)) { close(handle); diff --git a/src/lib/16_dbg.c b/src/lib/16_dbg.c index 634003a6..bfa55a53 100755 --- a/src/lib/16_dbg.c +++ b/src/lib/16_dbg.c @@ -1,9 +1,15 @@ #include "src/lib/16_dbg.h" #ifdef __DEBUG__ +#ifdef __DEBUG_MM__ +boolean dbg_debugmm=0; +#endif #ifdef __DEBUG_PM__ boolean dbg_debugpm=0; #endif +#ifdef __DEBUG_CA__ +boolean dbg_debugca=0; +#endif #ifdef __DEBUG_InputMgr__ boolean dbg_testkeyin=0,dbg_testcontrolnoisy=0,dbg_nointest=0; #endif @@ -13,7 +19,7 @@ byte *dbg_mapdata; #endif #endif - +#ifdef __WATCOMC__ // TODO: Could we also provide a build mode to emit debug to the "Bochs E9 hack?" #ifdef DEBUGSERIAL # include @@ -85,5 +91,5 @@ void _DEBUGF(const char *fmt,...) { _DEBUG(_DEBUGF_TMP); va_end(va); } +#endif //watcomc #endif - diff --git a/src/lib/16_dbg.h b/src/lib/16_dbg.h index 1abc2bce..5340313a 100755 --- a/src/lib/16_dbg.h +++ b/src/lib/16_dbg.h @@ -8,14 +8,21 @@ #define __DEBUG__ #define __DEBUG_InputMgr__ #define __DEBUG_MAP__ +//#define __DEBUG_CA__ //#define __DEBUG_PM__ //#define __DEBUG_MM__ #ifdef __DEBUG__ +#ifdef __DEBUG_MM__ +extern boolean dbg_debugmm; +#endif #ifdef __DEBUG_PM__ extern boolean dbg_debugpm; #endif +#ifdef __DEBUG_CA__ +extern boolean dbg_debugca; +#endif #ifdef __DEBUG_InputMgr__ extern boolean dbg_testkeyin,dbg_testcontrolnoisy,dbg_nointest; #endif @@ -25,6 +32,7 @@ extern byte *dbg_mapdata; #endif #endif +#ifdef __WATCOMC__ # ifdef DEBUGSERIAL # include @@ -44,5 +52,5 @@ static inline int _DEBUG_INIT() { return -1; } # endif +#endif //watcomc #endif // _SRC_LIB_16_DBG - diff --git a/src/lib/16_hc.c b/src/lib/16_hc.c index 8c9f9396..f2963158 100755 --- a/src/lib/16_hc.c +++ b/src/lib/16_hc.c @@ -26,30 +26,94 @@ #include "src/lib/16_hc.h" #include -//functions -void CHIKAKU* HC_LargestFreeBlock(size_t* Size) +//from ftp://213.85.246.177/pub/FreeBSD/ports/archivers/arj/work/arj-3.10.22/environ.c +//#ifdef __WATCOMC__ +#define FARCORELEFTPTR __huge +long HC_farcoreleft() +{ + void FARCORELEFTPTR *hp; + static long rc=736L; + long s_rc; + + s_rc=rc; + rc+=2L; + do + hp=halloc(rc-=2L, 1024); + while(hp==NULL&&rc>0L); + if(hp!=NULL) + hfree(hp); + if(rc> 1); +#ifdef __BORLANDC__ + while (s0 && (p = malloc(s0)) == NULL) +#endif +#ifdef __WATCOMC__ while (s0 && (p = _nmalloc(s0)) == NULL) +#endif s0 >>= 1; if (p) +#ifdef __BORLANDC__ + free(p); +#endif +#ifdef __WATCOMC__ _nfree(p); +#endif s1 = s0 >> 1; while (s1) { +#ifdef __BORLANDC__ + if ((p = malloc(s0 + s1)) != NULL) +#endif +#ifdef __WATCOMC__ if ((p = _nmalloc(s0 + s1)) != NULL) +#endif { s0 += s1; +#ifdef __BORLANDC__ + free(p); +#endif +#ifdef __WATCOMC__ _nfree(p); +#endif } s1 >>= 1; } +#ifdef __BORLANDC__ + while (s0 && (p = malloc(s0)) == NULL) +#endif +#ifdef __WATCOMC__ while (s0 && (p = _nmalloc(s0)) == NULL) +#endif s0 ^= s0 & -s0; *Size = s0; @@ -59,34 +123,42 @@ void CHIKAKU* HC_LargestFreeBlock(size_t* Size) size_t HC_coreleft(void) { size_t total = 0; - void CHIKAKU* pFirst = NULL; - void CHIKAKU* pLast = NULL; + void __near* pFirst = NULL; + void __near* pLast = NULL; for(;;) { size_t largest; - void CHIKAKU* p = (void CHIKAKU *)HC_LargestFreeBlock(&largest); - if (largest < sizeof(void CHIKAKU*)) + void __near* p = (void __near *)HC_LargestFreeBlock(&largest); + if (largest < sizeof(void __near*)) { if (p != NULL) +#ifdef __BORLANDC__ + free(p); +#endif +#ifdef __WATCOMC__ _nfree(p); - +#endif break; } - *(void CHIKAKU* CHIKAKU*)p = NULL; + *(void __near* __near*)p = NULL; total += largest; if (pFirst == NULL) pFirst = p; if (pLast != NULL) - *(void CHIKAKU* CHIKAKU*)pLast = p; + *(void __near* __near*)pLast = p; pLast = p; } while (pFirst != NULL) { - void CHIKAKU* p = *(void CHIKAKU* CHIKAKU*)pFirst; + void __near* p = *(void __near* __near*)pFirst; +#ifdef __BORLANDC__ + free(pFirst); +#endif +#ifdef __WATCOMC__ _nfree(pFirst); - +#endif pFirst = p; } return total; @@ -121,7 +193,7 @@ void far* HC_LargestFarFreeBlock(size_t* Size) return p; } -size_t HC_farcoreleft(void) +size_t HC_farcoreleft_(void) { size_t total = 0; void far* pFirst = NULL; @@ -156,8 +228,7 @@ size_t HC_farcoreleft(void) } #ifdef __WATCOMC__ -/* -void huge* HC_LargestHugeFreeBlock(size_t* Size) +/*void huge* LargestHugeFreeBlock(size_t* Size) { size_t s0, s1; void huge* p; @@ -186,7 +257,7 @@ void huge* HC_LargestHugeFreeBlock(size_t* Size) return p; } -size_t HC_hugecoreleft(void) +size_t _hugecoreleft(void) { size_t total = 0; void huge* pFirst = NULL; @@ -194,7 +265,7 @@ size_t HC_hugecoreleft(void) for(;;) { size_t largest; - void huge* p = HC_LargestHugeFreeBlock(&largest); + void huge* p = LargestHugeFreeBlock(&largest); if (largest < sizeof(void huge*)) { if (p != NULL) @@ -257,7 +328,7 @@ size_t _basedcoreleft(void) void __based(segu)* pFirst = NULL; void __based(segu)* pLast = NULL; // allocate based heap - segu = _bheapseg( 1024 ); + segu = _bHC_heapseg( 1024 ); if( segu == _NULLSEG ) { printf( "Unable to allocate based heap\n" ); return 0; @@ -353,7 +424,7 @@ void HC_heapdump(global_game_variables_t *gvar) struct _heapinfo fh_info, nh_info, h_info; int heap_status; size_t h_free, nh_free, fh_free, h_total, nh_total, fh_total, h_used, nh_used, fh_used; - byte scratch[1024],str[16]; + byte scratch[1024],str[16]; HC_OpenDebug(gvar); @@ -417,11 +488,11 @@ fh_info._pentry, fh_info._size );*/ printmeminfoline(&scratch, "Near", nh_total, nh_used, nh_free); printmeminfoline(&scratch, "Far", fh_total, fh_used, fh_free); strcat(scratch,"---------------- -------- -------- --------\n"); - strcat(scratch,"coreleft = "); ultoa((dword)HC_coreleft(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - strcat(scratch,"farcoreleft = "); ultoa((dword)HC_farcoreleft(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - strcat(scratch,"GetFreeSize = "); ultoa((dword)HC_GetFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - strcat(scratch,"GetNearFreeSize = "); ultoa((dword)HC_GetNearFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - strcat(scratch,"GetFarFreeSize = "); ultoa((dword)HC_GetFarFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n"); + strcat(scratch,"HC_coreleft = "); ultoa((dword)HC_coreleft(),str,10); strcat(scratch,str); strcat(scratch,"\n"); + strcat(scratch,"HC_farcoreleft = "); ultoa((dword)HC_farcoreleft(),str,10); strcat(scratch,str); strcat(scratch,"\n"); + strcat(scratch,"HC_GetFreeSize = "); ultoa((dword)HC_GetFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n"); + strcat(scratch,"HC_GetNearFreeSize = "); ultoa((dword)HC_GetNearFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n"); + strcat(scratch,"HC_GetFarFreeSize = "); ultoa((dword)HC_GetFarFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n"); strcat(scratch,"memavl = "); ultoa((dword)_memavl(),str,10); strcat(scratch,str); strcat(scratch,"\n"); strcat(scratch,"stackavail = "); ultoa((dword)stackavail(),str,10); strcat(scratch,str); strcat(scratch,"\n"); write(gvar->handle.heaphandle,scratch,strlen(scratch)); diff --git a/src/lib/16_hc.h b/src/lib/16_hc.h index 1dac364b..5924d2a5 100755 --- a/src/lib/16_hc.h +++ b/src/lib/16_hc.h @@ -28,27 +28,20 @@ #include "src/lib/16_head.h" +long HC_farcoreleft(); #ifdef __BORLANDC__ -#define CHIKAKU near -#define _nmalloc(size) malloc(size) -#define _nfree(block) free(block) -#define _nrealloc(block,size) realloc(block,size) -#define _ncalloc(num,size) calloc(num,size) -#define _nheapmin() 0 +void * HC_LargestFreeBlock(size_t* Size); #endif #ifdef __WATCOMC__ -//#define SETTOUJ I_CHIKAKU _n -#define CHIKAKU __near +void __near* HC_LargestFreeBlock(size_t* Size); #endif - -void CHIKAKU* HC_LargestFreeBlock(size_t* Size); size_t HC_coreleft(void); void far* HC_LargestFarFreeBlock(size_t* Size); -size_t HC_farcoreleft(void); -//void huge* HC_LargestHugeFreeBlock(size_t* Size); -//size_t HC_hugecoreleft(void); -//void __based(__self)* LargestBasedFreeBlock(size_t* Size); -//size_t _basedcoreleft(void); +size_t HC_farcoreleft_(void); +/*void huge* LargestHugeFreeBlock(size_t* Size); +size_t _hugecoreleft(void); +void __based(__self)* LargestBasedFreeBlock(size_t* Size); +size_t _basedcoreleft(void);*/ size_t HC_GetFreeSize(void); size_t HC_GetFarFreeSize(void); size_t HC_GetNearFreeSize(void); diff --git a/src/lib/16_head.c b/src/lib/16_head.c index 2dadb971..20321e28 100755 --- a/src/lib/16_head.c +++ b/src/lib/16_head.c @@ -84,6 +84,8 @@ char *remove_ext (char* mystr, char dot, char sep) { return retstr; } + + //from http://quiz.geeksforgeeks.org/c-program-cyclically-rotate-array-one/ void rotateR(byte *arr, byte n) { diff --git a/src/lib/16_head.h b/src/lib/16_head.h index 251d0b6b..81af81c5 100755 --- a/src/lib/16_head.h +++ b/src/lib/16_head.h @@ -49,7 +49,6 @@ #include #include #include //16_vrs.h -#include "src/lib/16_dbg.h" #endif #ifdef __BORLANDC__ #include @@ -59,6 +58,7 @@ #include "src/lib/16_t.h" #include "src/lib/16_tdef.h" #include "src/lib/nyan/kitten.h" +#include "src/lib/16_dbg.h" #define VERSION __DATE__ " " __TIME__ @@ -161,11 +161,13 @@ extern int profilehandle,debughandle; //make it into game global #define nil ((void *)0) #ifdef __BORLANDC__ -#define _FCORELEFT 0x90000UL-16UL +//#define _FCORELEFT 0x90000UL-16UL +#define _FCORELEFT HC_farcoreleft() #define sprite #endif #ifdef __WATCOMC__ -#define _FCORELEFT 0x90000UL+16UL +//#define _FCORELEFT 0x90000UL+16UL +#define _FCORELEFT HC_farcoreleft() /*static union REGS CPURegs; #define _AX CPURegs.x.ax diff --git a/src/lib/16_map.h b/src/lib/16_map.h index 4c6b9a8c..abaf525f 100755 --- a/src/lib/16_map.h +++ b/src/lib/16_map.h @@ -31,9 +31,8 @@ #include "src/lib/16_vl.h" #include "src/lib/16_ca.h" #include "src/lib/16_mm.h" -#ifdef __WATCOMC__ #include "src/lib/16_pm.h" -#endif + //#define DEBUG_MAPDATA //#define DEBUG_MAPVARS diff --git a/src/lib/16_mm.c b/src/lib/16_mm.c index 72ab5ae0..5f8bb38e 100755 --- a/src/lib/16_mm.c +++ b/src/lib/16_mm.c @@ -562,30 +562,7 @@ void MML_ShutdownXMS(global_game_variables_t *gvar) ====================== */ -/*void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar) -{ - mmblocktype far *scan,far *last; - word segm=1; - word oldend; - dword segmlen; - dword extra; - - scan = last = gvar->mm.mmhead; - gvar->mm.mmrover = gvar->mm.mmhead; // reset rover to start of memory - -// -// search for the block that contains the range of segments -// - while(scan->start+scan->length < segstart) - { - last = scan; - scan = scan->next; - } - -// -// take the given range out of the block -// - oldend = scan->start + scan->length; +/* extra = oldend - (segstart+seglength); segmlen=extra; @@ -610,28 +587,7 @@ void MML_ShutdownXMS(global_game_variables_t *gvar) printf("segmlen=%lu\n", segmlen); } //++++todo: linked list of segment! - if(segstart == scan->start) - { - last->next = scan->next; // unlink block - FREEBLOCK(scan); - scan = last; - } - else - scan->length = segstart-scan->start; // shorten block - - if(extra > 0) - { - GETNEWBLOCK; - gvar->mm.mmnew->useptr = NULL; - - gvar->mm.mmnew->next = scan->next; - scan->next = gvar->mm.mmnew; - gvar->mm.mmnew->start = segstart+seglength; - gvar->mm.mmnew->length = extra; - gvar->mm.mmnew->attributes = LOCKBIT; - }//else if(segm>0) goto segu; - -}*/ +*/ void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar) { mmblocktype far *scan,far *last; @@ -699,7 +655,7 @@ void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar) gvar->mm.mmnew->start = segstart+seglength; gvar->mm.mmnew->length = extra; gvar->mm.mmnew->attributes = LOCKBIT; - } + }//else if(segm>0) goto segu; } @@ -788,15 +744,15 @@ void MM_Startup(global_game_variables_t *gvar) #ifdef __WATCOMC__ _nheapgrow(); #endif - - length=(word)_memavl();//(word)coreleft();//(dword)GetFreeSize(); - + length=(word)_memavl();//(word)coreleft(); + //start = gvar->mm.nearheap = _fmalloc(length); #ifdef __WATCOMC__ start = (void __far *)(gvar->mm.nearheap = _nmalloc(length)); #endif #ifdef __BORLANDC__ start = (void far *)(gvar->mm.nearheap = malloc(length)); #endif + length -= 16-(FP_OFF(start)&15); length -= SAVENEARHEAP; seglength = length / 16; // now in paragraphs @@ -808,18 +764,16 @@ void MM_Startup(global_game_variables_t *gvar) // // get all available far conventional memory segments // - //printf("_FARCORELEFT %lu\n", _FCORELEFT); #ifdef __WATCOMC__ _fheapgrow(); - length=_FCORELEFT;//_fcoreleft();//(dword)GetFarFreeSize();//0xffffUL*4UL; #endif #ifdef __BORLANDC__ -//0000 printf("farcoreleft() %lu\n", farcoreleft()); -//0000 printf("(farcoreleft()+32)-_FCORELEFT %d\n", (sword)((farcoreleft()+32)-_FCORELEFT)); - length=farcoreleft();//_fcoreleft();//(dword)GetFarFreeSize();//0xffffUL*4UL; +// printf("farcoreleft() %lu\n", farcoreleft()); +// printf("(farcoreleft()+32)-_FCORELEFT %d\n", (sword)((farcoreleft()+32)-_FCORELEFT)); #endif - start = gvar->mm.farheap = _fmalloc(length); - //start = gvar->mm.farheap = halloc(length, 1); + length=_FCORELEFT; + start = gvar->mm.farheap = _fmalloc(length);//start = gvar->mm.farheap = halloc(length, 1); + length -= 16-(FP_OFF(start)&15); length -= SAVEFARHEAP; seglength = length / 16; // now in paragraphs @@ -941,11 +895,13 @@ void MM_GetPtr (memptr *baseptr, dword size, global_game_variables_t *gvar) gvar->mm.mmnew->useptr = baseptr; //if(gvar->mm.mmnew->useptr==NULL){ #ifdef __DEBUG_MM__ + if(dbg_debugmm>0){ printf("MM_GetPtr\n"); //%04x printf(" baseptr=%Fp ", baseptr); printf("useptr=%Fp\n", gvar->mm.mmnew->useptr); printf(" *baseptr=%Fp ", *baseptr); printf("*useptr=%Fp\n", *(gvar->mm.mmnew->useptr)); printf(" &baseptr=%Fp ", &baseptr); printf("&useptr=%Fp\n", &(gvar->mm.mmnew->useptr)); + } #endif //Quit(gvar, "gvar->mm.mmnew->useptr==NULL"); } gvar->mm.mmnew->attributes = BASEATTRIBUTES; @@ -1062,8 +1018,8 @@ void MM_FreePtr(memptr *baseptr, global_game_variables_t *gvar) if(!scan) { - printf("MM_FreePtr: Block not found!\n"); - return; + Quit(gvar, "MM_FreePtr: Block not found!\n"); + //printf("MM_FreePtr: Block not found!\n"); return; } last->next = scan->next; @@ -1441,7 +1397,12 @@ void MM_DumpData(global_game_variables_t *gvar) byte lock,purge; FILE *dumpfile; +#ifdef __WATCOMC__ + _nfree(gvar->mm.nearheap); +#endif +#ifdef __BORLANDC__ free(gvar->mm.nearheap); +#endif #ifdef __BORLANDC__ dumpfile = fopen ("mmdump.16b","w"); #endif diff --git a/src/lib/16_t.h b/src/lib/16_t.h index 0a6dff9a..d04b382d 100755 --- a/src/lib/16_t.h +++ b/src/lib/16_t.h @@ -53,19 +53,18 @@ memptr should be replaced by memseg in code. on usage where you need pointer convert memseg type (segment) to far pointer by MK_FP(segment value, 0)*/ #ifdef __WATCOMC__ +//typedef void __based( void ) * memptr; ////old //----typedef void __based(__self) * memptr; //typedef unsigned short _seg; // it will contains segment value (as Borland _seg) #define _seg __based( void ) #define __SEGA __segment #endif #ifdef __BORLANDC__ -//typedef void _seg * memptr; +#define _memavl() coreleft() #define __SEGA _seg #endif -typedef void _seg * memptr;//typedef void __based( void ) * memptr; ////old //----typedef void __based(__self) * memptr; -#ifdef __BORLANDC__ -#define _memavl() coreleft() -#endif +typedef void _seg * memptr; + #ifdef __WATCOMC__ #define _argv __argv #define _argc __argc diff --git a/src/lib/16_tail.h b/src/lib/16_tail.h index a07d5ec3..08c03d0a 100755 --- a/src/lib/16_tail.h +++ b/src/lib/16_tail.h @@ -29,6 +29,7 @@ #include "src/lib/16_mm.h" #include "src/lib/16_ca.h" #include "src/lib/16_in.h" +#include "src/lib/16_dbg.h" #include "src/lib/16_vl.h" #include "src/lib/testpatt.h" diff --git a/src/lib/16_tdef.h b/src/lib/16_tdef.h index 28f35c01..dbda778a 100755 --- a/src/lib/16_tdef.h +++ b/src/lib/16_tdef.h @@ -376,7 +376,7 @@ typedef struct boolean mmstarted, bombonerror, mmerror; void far *farheap; #ifdef __BORLANDC__ - void far *nearheap; + void *nearheap; #endif #ifdef __WATCOMC__ void __near *nearheap; @@ -493,7 +493,7 @@ typedef struct PMNumBlocks; long PMFrameCount; PageListStruct far *PMPages; - __SEGA *PMSegPages; + memptr/*__SEGA*/ *PMSegPages; pm_mmi_t mm; pm_emmi_t emm; pm_xmmi_t xmm; -- 2.39.2