Mercurial > hg > dmlib
changeset 1846:88cef7758303
Implement data block offset in certain DMC64EncDecOps. This allows us to
combine and separate data from multiple sources/destinations into one data block.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 22 Jun 2018 22:31:52 +0300 |
parents | a77451bb6614 |
children | e3d1f16be4ee |
files | tools/lib64fmts.c tools/lib64gfx.c tools/lib64gfx.h |
diffstat | 3 files changed, 172 insertions(+), 160 deletions(-) [+] |
line wrap: on
line diff
--- a/tools/lib64fmts.c Fri Jun 22 21:47:31 2018 +0300 +++ b/tools/lib64fmts.c Fri Jun 22 22:31:52 2018 +0300 @@ -995,7 +995,7 @@ // Helper macros for defining screen memory layouts // common for several FLI type image formats // -#define DEF_SCREEN_RAM(start, oindex, bindex, osize) { DO_COPY, DS_SCREEN_RAM, (start) + ((osize) * (oindex)), (bindex), 0, NULL, NULL } +#define DEF_SCREEN_RAM(start, oindex, bindex, osize) { DO_COPY, DS_SCREEN_RAM, (start) + ((osize) * (oindex)), (bindex), 0, 0, NULL, NULL } #define DEF_SCREEN_RAMS_8(start, sindex, osize) \ DEF_SCREEN_RAM((start), 0, (sindex + 0), (osize)), \ DEF_SCREEN_RAM((start), 1, (sindex + 1), (osize)), \ @@ -1022,11 +1022,11 @@ NULL, NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x1f40, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2328, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x2710, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x1f40, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2328, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x2710, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, @@ -1037,11 +1037,11 @@ NULL, NULL, fmtGetPixelBlackMailFLI, { - { DO_COPY , DS_EXTRA_DATA , 0x0000, 0, 200, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x0100, 0, 0, NULL, NULL }, + { DO_COPY , DS_EXTRA_DATA , 0x0000, 0, 200, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0100, 0, 0, 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x0500, 0, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x2500, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x2500, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, @@ -1052,9 +1052,9 @@ NULL, NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x1f40, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x1f40, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, @@ -1066,14 +1066,14 @@ fmtGetPixelFunPaint2, { DEF_SCREEN_RAMS_8(0x0000, 0, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x2000, 0, 0, NULL, NULL }, - { DO_COPY , DS_EXTRA_DATA , 0x3f40, 0, 100, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x4000, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x2000, 0, 0 , 0, NULL, NULL }, + { DO_COPY , DS_EXTRA_DATA , 0x3f40, 0, 100, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x4000, 0, 0 , 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x43e8, 8, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x63e8, 1, 0, NULL, NULL }, - { DO_COPY , DS_EXTRA_DATA , 0x8328, 1, 100, NULL, NULL }, - { DO_DEC_FUNC , 0 , 0x2742, 0, 1, fmtTruePaintGetLaceType, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x63e8, 1, 0 , 0, NULL, NULL }, + { DO_COPY , DS_EXTRA_DATA , 0x8328, 1, 100, 0, NULL, NULL }, + { DO_DEC_FUNC , 0 , 0x2742, 0, 1 , 0, fmtTruePaintGetLaceType, NULL }, + { DO_LAST , 0 , 0 , 0, 0 , 0, NULL, NULL }, } }, @@ -1084,11 +1084,11 @@ NULL, NULL, NULL, { - { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x2740, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x2740, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, @@ -1099,14 +1099,14 @@ NULL, NULL, NULL, { - { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x2740, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x2800, 1, 0, NULL, NULL }, - { DO_DEC_FUNC , 0 , 0x2742, 0, 1, fmtDrazLaceGetLaceType, NULL }, - { DO_ENC_FUNC , 0 , 0x2742, 0, 1, NULL, fmtDrazLaceSetLaceType }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x2740, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x2800, 1, 0, 0, NULL, NULL }, + { DO_DEC_FUNC , 0 , 0x2742, 0, 1, 0, fmtDrazLaceGetLaceType, NULL }, + { DO_ENC_FUNC , 0 , 0x2742, 0, 1, 0, NULL, fmtDrazLaceSetLaceType }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, @@ -1117,14 +1117,14 @@ NULL, NULL, fmtGetPixelTruePaint, { - { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x03e8, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x2400, 1, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x4400, 1, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x4800, 0, 0, NULL, NULL }, - { DO_DEC_FUNC , 0 , 0x0000, 0, 0, fmtTruePaintGetLaceType, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x03e8, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x2400, 1, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x4400, 1, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x4800, 0, 0, 0, NULL, NULL }, + { DO_DEC_FUNC , 0 , 0x0000, 0, 0, 0, fmtTruePaintGetLaceType, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, @@ -1135,25 +1135,25 @@ fmtConvertECIBMP2Image, NULL, fmtGetPixelECI, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x2000, 0, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x4000, 1, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x4000, 1, 0, 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x6000, 8, 0x400), - { DO_DEC_FUNC , 0 , 0 , 0, 0, fmtECIGetLaceType, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_DEC_FUNC , 0 , 0 , 0, 0, 0, fmtECIGetLaceType, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, { // #8: Cosmos Designs Hires Manager D64_FMT_HIRES | D64_FMT_FLI, - C64_SCR_WIDTH, C64_SCR_HEIGHT, // Actually 296 x 192 (=24*8) - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + C64_SCR_WIDTH, 24*8, // Actually 296 x 192 (=24*8) + C64_SCR_CH_WIDTH, 24, NULL, NULL, fmtGetPixelCrestHIFLIorCDHM, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x2000, 0, 0x400), - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, @@ -1164,10 +1164,10 @@ NULL, NULL, fmtGetPixelFLIDesigner, { - { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x0400, 0, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x2400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x2400, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, @@ -1178,9 +1178,9 @@ NULL, NULL, NULL, { - { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, }; @@ -1237,11 +1237,11 @@ NULL, NULL, NULL, { - { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x07e8, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x07e8, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, }, }, NULL @@ -1258,11 +1258,11 @@ NULL, NULL, NULL, { - { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x07fe, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x07fe, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, }, }, NULL @@ -1307,12 +1307,12 @@ NULL, NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x1f40, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_D020 , 0x2328, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x2329, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2338, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x1f40, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_D020 , 0x2328, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x2329, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2338, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, }, }, NULL @@ -1329,11 +1329,11 @@ NULL, NULL, NULL, { - { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x23ff, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x2400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x23ff, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x2400, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1350,13 +1350,13 @@ NULL, NULL, NULL, { - { DO_COPY , DS_SCREEN_RAM , 20 + 0 , 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 20 + 1000, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 20 + 2000, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 20 + 0 , 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 20 + 1000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 20 + 2000, 0, 0, 0, NULL, NULL }, // XXX TODO: Unknown where the background color is set, so default to 0x01 - //{ DO_SET_MEM , DS_BGCOL , 0x23ff, 0, 0, NULL, NULL }, - { DO_SET_OP , DS_BGCOL , 0x01 , 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + //{ DO_SET_MEM , DS_BGCOL , 0x23ff, 0, 0, 0, NULL, NULL }, + { DO_SET_OP , DS_BGCOL , 0x01 , 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1373,11 +1373,11 @@ NULL, NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000 + 0x111, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x1f40 + 0x111, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2328 + 0x111, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x2710 + 0x111, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000 + 0x111, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x1f40 + 0x111, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2328 + 0x111, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x2710 + 0x111, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1394,12 +1394,12 @@ NULL, NULL, NULL, { - { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, 0, NULL, NULL }, // XXX TODO: Not sure if the background color is hardcoded .. - { DO_SET_OP , DS_BGCOL , 0x00 , 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_SET_OP , DS_BGCOL , 0x00 , 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1416,11 +1416,11 @@ NULL, NULL, NULL, { - { DO_COPY , DS_SCREEN_RAM , 0x7800 - 0x7800, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x7bf0 - 0x7800, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x7c00 - 0x7800, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x9c00 - 0x7800, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x7800 - 0x7800, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x7bf0 - 0x7800, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x7c00 - 0x7800, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x9c00 - 0x7800, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1437,13 +1437,13 @@ NULL, NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, // XXX TODO: Background color is wrong, this offset/addr is from codebase64 docs - { DO_SET_MEM_LO , DS_D020 , 0x1f7f, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x1f80, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x2000, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_D020 , 0x1f7f, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x1f80, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x2000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1460,12 +1460,12 @@ NULL, NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x4000 + 0x72 - 0x4000, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x6000 + 0x72 - 0x4000, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_D020 , 0x5f40 + 0x72 - 0x4000, 0, 0, NULL, NULL }, - { DO_SET_MEM , DS_COLOR_RAM , 0x5f43 + 0x72 - 0x4000, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x5f44 + 0x72 - 0x4000, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x4000 + 0x72 - 0x4000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x6000 + 0x72 - 0x4000, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_D020 , 0x5f40 + 0x72 - 0x4000, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM , DS_COLOR_RAM , 0x5f43 + 0x72 - 0x4000, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x5f44 + 0x72 - 0x4000, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1482,12 +1482,12 @@ NULL, NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x2000, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_D020 , 0x27fe, 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x27ff, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x2000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_D020 , 0x27fe, 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x27ff, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1553,10 +1553,10 @@ NULL, NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_SET_OP , DS_SCREEN_RAM , 0xCF , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_SET_OP , DS_SCREEN_RAM , 0xCF , 0, 0, 0, NULL, NULL }, // Default colors used by MM are --^^ - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1573,9 +1573,9 @@ NULL, NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_SET_OP , DS_SCREEN_RAM , 0xF0 , 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_SET_OP , DS_SCREEN_RAM , 0xF0 , 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1592,12 +1592,12 @@ NULL, NULL, fmtGetPixelBFLI, { - { DO_COPY , DS_COLOR_RAM , 0x0001, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0001, 0, 0, 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x0401, 0, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x2401, 0, 0x1fff, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x2401, 0, 0x1fff, 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x4401, 8, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x6401, 1, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x6401, 1, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1656,11 +1656,11 @@ NULL, NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x2000, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, NULL, NULL }, - { DO_SET_OP , DS_BGCOL , 0x00 , 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x2000, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, 0, NULL, NULL }, + { DO_SET_OP , DS_BGCOL , 0x00 , 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1677,11 +1677,11 @@ NULL, NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, XX2_BSIZE, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , XX2_BSIZE, 0, XX2_SIZE, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , XX2_BSIZE + XX2_SIZE, 0, XX2_SIZE, NULL, NULL }, - { DO_SET_OP , DS_BGCOL , 11 , 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, XX2_BSIZE, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , XX2_BSIZE, 0, XX2_SIZE, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , XX2_BSIZE + XX2_SIZE, 0, XX2_SIZE, 0, NULL, NULL }, + { DO_SET_OP , DS_BGCOL , 11 , 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1713,15 +1713,15 @@ fmtGetPixelGunPaint, { DEF_SCREEN_RAMS_8(0x0000, 0, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x2000, 0, 0, NULL, NULL }, - { DO_COPY , DS_EXTRA_DATA , 0x3f4f, 0, 177, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x4000, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x2000, 0, 0 , 0, NULL, NULL }, + { DO_COPY , DS_EXTRA_DATA , 0x3f4f, 0, 177, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x4000, 0, 0 , 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x4400, 8, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x6400, 1, 0, NULL, NULL }, - { DO_COPY , DS_EXTRA_DATA , 0x47e8, 1, 20, NULL, NULL }, - { DO_DEC_FUNC , 0 , 0x2742, 0, 1, fmtTruePaintGetLaceType, NULL }, - { DO_ENC_FUNC , 0 , fmtGunPaintMagicOffs, 0, fmtGunPaintMagicLen, NULL, fmtEncodeGunPaint }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x6400, 1, 0 , 0, NULL, NULL }, + { DO_COPY , DS_EXTRA_DATA , 0x47e8, 1, 20 , 0, NULL, NULL }, + { DO_DEC_FUNC , 0 , 0x2742, 0, 1 , 0, fmtTruePaintGetLaceType, NULL }, + { DO_ENC_FUNC , 0 , fmtGunPaintMagicOffs, 0, fmtGunPaintMagicLen, 0, NULL, fmtEncodeGunPaint }, + { DO_LAST , 0 , 0 , 0, 0 , 0, NULL, NULL }, } }, NULL @@ -1738,10 +1738,10 @@ NULL, NULL, fmtGetPixelPentelPaint, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_SET_OP , DS_SCREEN_RAM , 0x23 , 0, 0, NULL, NULL }, - { DO_SET_MEM_LO , DS_BGCOL , 0x9580 - 0x4800, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, + { DO_SET_OP , DS_SCREEN_RAM , 0x23 , 0, 0, 0, NULL, NULL }, + { DO_SET_MEM_LO , DS_BGCOL , 0x9580 - 0x4800, 0, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL @@ -1758,9 +1758,9 @@ NULL, NULL, fmtGetPixelCrestHIFLIorCDHM, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x2000, 0, 0x400), - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, 0, NULL, NULL }, } }, NULL
--- a/tools/lib64gfx.c Fri Jun 22 21:47:31 2018 +0300 +++ b/tools/lib64gfx.c Fri Jun 22 22:31:52 2018 +0300 @@ -174,6 +174,17 @@ } +int dmC64MemBlockReAlloc(DMC64MemBlock *blk, const size_t size) +{ + if ((blk->data = dmRealloc(blk->data, size)) == NULL) + return DMERR_MALLOC; + + dmMemset(blk->data + blk->size, 0, size - blk->size); + blk->size = size; + return DMERR_OK; +} + + int dmC64MemBlockCopy(DMC64MemBlock *dst, const DMC64MemBlock *src) { if (src->data != NULL && src->size > 0) @@ -882,7 +893,7 @@ case DS_EXTRA_DATA: // XXX BZZZT .. a nasty cast here --v dmC64GetOpMemBlockAndName(img, op->subject, op->bank, (const DMC64MemBlock **) &blk, &blkname); - if ((dmC64MemBlockAlloc(blk, size)) != DMERR_OK) + if ((dmC64MemBlockReAlloc(blk, op->offs2 + size)) != DMERR_OK) { return dmError(DMERR_MALLOC, "Could not allocate '%s' block! " @@ -892,15 +903,15 @@ switch (op->type) { case DO_COPY: - memcpy(blk->data, src, size); + memcpy(blk->data + op->offs2, src, size); break; case DO_SET_MEM: - dmMemset(blk->data, *src, size); + dmMemset(blk->data + op->offs2, *src, size); break; case DO_SET_OP: - dmMemset(blk->data, op->offs, size); + dmMemset(blk->data + op->offs2, op->offs, size); break; default: @@ -1094,15 +1105,15 @@ blkname, i, op->offs, op->offs, op->bank, size, size, buf->len, buf->len); goto err; } - if (size > blk->size) + if (op->offs2 + size > blk->size) { res = dmError(DMERR_INTERNAL, "'%s' size mismatch %d <> %d in " - "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n", - blkname, i, op->offs, op->offs, op->bank, size, size, buf->len, buf->len); + "op #%d, offs=%d ($%04x), bank=%d, offs2=%d ($%02x), size=%d ($%04x)\n", + blkname, op->offs2 + size, blk->size, i, op->offs, op->offs, op->bank, op->offs2, op->offs2, size, size); goto err; } - memcpy(dst, blk->data, size); + memcpy(dst, blk->data + op->offs2, size); break; case DO_SET_MEM:
--- a/tools/lib64gfx.h Fri Jun 22 21:47:31 2018 +0300 +++ b/tools/lib64gfx.h Fri Jun 22 22:31:52 2018 +0300 @@ -175,9 +175,10 @@ int type; // Operation type (DO_*) int subject; // Operation "subject" (DS_*) - size_t offs; - int bank; - size_t size; + size_t offs; // Offset in "memory" + int bank; // Bank number or extradata index + size_t size; // Size of data (0 for "default") + size_t offs2; // Offset in data-block BOOL (*decFunction)(DMC64Image *img, const struct _DMC64EncDecOp *op, const DMGrowBuf *buf, const DMC64ImageFormat *fmt); BOOL (*encFunction)(const struct _DMC64EncDecOp *op, DMGrowBuf *buf, const DMC64Image *img, const DMC64ImageFormat *fmt);