Mercurial > hg > dmlib
diff tools/lib64fmts.c @ 1668:1741717b1ae5
Big overhaul to the enc/dec operator system to be more flexible.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 31 May 2018 00:04:01 +0300 |
parents | 0022e1a428ca |
children | fb7318b952c0 |
line wrap: on
line diff
--- a/tools/lib64fmts.c Wed May 30 21:10:57 2018 +0300 +++ b/tools/lib64fmts.c Thu May 31 00:04:01 2018 +0300 @@ -528,7 +528,12 @@ } -#define XX2_MIN_SIZE 4000 +#define XX2_MIN_SIZE 4000 +#define XX2_WIDTH_CH 40 +#define XX2_HEIGHT_CH 10 +#define XX2_SIZE (XX2_WIDTH_CH * XX2_HEIGHT_CH) +#define XX2_BSIZE (XX2_SIZE * 8) + static int fmtProbeFormatXX2(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt) { @@ -753,7 +758,7 @@ // Helper macros for defining screen ram layouts // common for FLI type foramts // -#define DEF_SCREEN_RAM(start, oindex, bindex, osize) { DT_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, 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)), \ @@ -774,68 +779,67 @@ const DMC64EncDecOpList dmC64CommonFormatOps[] = { { // #0: Koala Paint type memory layout - { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL }, - { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, - { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, - { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL }, - { DT_LAST, 0, 0, 0, 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 , DS_BGCOL , 0x2710, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, }, { // #1: Amica Paint, Run Paint, etc. layout - { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL }, - { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, - { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, - { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL }, - { DT_LAST, 0, 0, 0, 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 , DS_BGCOL , 0x2710, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, }, { // #2: Art Studio etc. Hires - { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL }, - { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, - { DT_LAST, 0, 0, 0, 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 }, }, { // #3: FunPaint II - DEF_SCREEN_RAMS_8( 0x0000, 0, 0x400), - { DT_BITMAP_RAM, 0x2000, 0, 0, NULL, NULL }, - { DT_EXTRA_DATA, 0x3f40, 0, 100, NULL, NULL }, - { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL }, - DEF_SCREEN_RAMS_8( 0x43e8, 8, 0x400), - { DT_BITMAP_RAM, 0x63e8, 1, 0, NULL, NULL }, - { DT_EXTRA_DATA, 0x8328, 1, 100, NULL, NULL }, - { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtTruePaintGetLaceType, NULL }, - { DT_LAST, 0, 0, 0, NULL, NULL }, + 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 }, + 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 }, }, { // #4: DrazPaint 1.x & 2 - { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, - { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL }, - { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, - { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL }, - { DT_LAST, 0, 0, 0, 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 , DS_BGCOL , 0x2740, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, }, { // #5: DrazLace 1.0 - { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, - { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL }, - { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, - { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL }, - { DT_BITMAP_RAM, 0x2800, 1, 0, NULL, NULL }, - { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtDrazLaceGetLaceType, NULL }, - { DT_ENC_FUNCTION, 0x2742, 0, 1, NULL, fmtDrazLaceSetLaceType }, - { DT_LAST, 0, 0, 0, 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 , 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 }, }, - { - // #6: TruePaint - { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL }, - { DT_COLOR_REG, 0x03e8, 0, DC_BGCOL, NULL, NULL }, - { DT_BITMAP_RAM, 0x0400, 0, 0, NULL, NULL }, - { DT_BITMAP_RAM, 0x2400, 1, 0, NULL, NULL }, - { DT_SCREEN_RAM, 0x4400, 1, 0, NULL, NULL }, - { DT_COLOR_RAM, 0x4800, 0, 0, NULL, NULL }, - { DT_DEC_FUNCTION, 0x0000, 0, 0, fmtTruePaintGetLaceType, NULL }, - { DT_LAST, 0, 0, 0, NULL, NULL }, + { // #6: TruePaint + { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_SET_MEM , 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 }, }, }; @@ -909,11 +913,11 @@ NULL, NULL, NULL, { - { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, - { DT_COLOR_REG, 0x07e8, 0, DC_BGCOL, NULL, NULL }, - { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL }, - { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, - { DT_LAST, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_SET_MEM , 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 }, }, NULL }, @@ -927,11 +931,11 @@ NULL, NULL, NULL, { - { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, - { DT_COLOR_REG, 0x07fe, 0, DC_BGCOL, NULL, NULL }, - { DT_BITMAP_RAM, 0x0800, 0, 0, NULL, NULL }, - { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, - { DT_LAST, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, + { DO_SET_MEM , 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 }, }, NULL }, @@ -989,11 +993,11 @@ NULL, NULL, NULL, { - { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL }, - { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, - { DT_COLOR_RAM, 0x2338, 0, 0, NULL, NULL }, - { DT_COLOR_REG, 0x2329, 0, DC_BGCOL, NULL, NULL }, - { DT_LAST, 0, 0, 0, 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 , 0x2338, 0, 0, NULL, NULL }, + { DO_SET_MEM , DS_BGCOL , 0x2329, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, }, NULL }, @@ -1062,9 +1066,9 @@ NULL, NULL, NULL, { - { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL }, - { DT_BITMAP_RAM, 0x0400, 0, 0, NULL, NULL }, - { DT_LAST, 0, 0, 0, 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 }, }, NULL }, @@ -1078,12 +1082,12 @@ NULL, NULL, fmtGetPixelBFLI, { - { DT_COLOR_RAM, 0x0001, 0, 0, NULL, NULL }, - DEF_SCREEN_RAMS_8( 0x0401, 0, 0x400), - { DT_BITMAP_RAM, 0x2401, 0, 0x1fff, NULL, NULL }, - DEF_SCREEN_RAMS_8( 0x4401, 8, 0x400), - { DT_BITMAP_RAM, 0x6401, 1, 0, NULL, NULL }, - { DT_LAST, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0001, 0, 0, NULL, NULL }, + DEF_SCREEN_RAMS_8(0x0401, 0, 0x400), + { DO_COPY , DS_BITMAP_RAM , 0x2401, 0, 0x1fff, 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 }, }, NULL }, @@ -1098,11 +1102,11 @@ NULL, NULL, fmtGetPixelBlackMailFLI, { - { DT_EXTRA_DATA, 0x0000, 0, 200, NULL, NULL }, - { DT_COLOR_RAM, 0x0100, 0, 0, NULL, NULL }, - DEF_SCREEN_RAMS_8( 0x0500, 0, 0x400), - { DT_BITMAP_RAM, 0x2500, 0, 0, NULL, NULL }, - { DT_LAST, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_EXTRA_DATA , 0x0000, 0, 200, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0100, 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 }, }, NULL }, @@ -1116,10 +1120,10 @@ NULL, NULL, fmtGetPixelFLIDesigner, { - { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, DEF_SCREEN_RAMS_8( 0x0400, 0, 0x400), - { DT_BITMAP_RAM, 0x2400, 0, 0, NULL, NULL }, - { DT_LAST, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM, 0x2400, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0, 0, 0, NULL, NULL }, }, NULL }, @@ -1133,20 +1137,15 @@ NULL, NULL, NULL, { - { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL }, - { DT_SCREEN_RAM, 0x2000, 0, 0, NULL, NULL }, - { DT_COLOR_RAM, 0x2400, 0, 0, NULL, NULL }, - { DT_COLOR_SET, 0x00 , 0, DC_BGCOL, NULL, NULL }, - { DT_LAST, 0, 0, 0, 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 }, }, NULL }, -#define XX2_WIDTH_CH 40 -#define XX2_HEIGHT_CH 10 -#define XX2_SIZE (XX2_WIDTH_CH * XX2_HEIGHT_CH) -#define XX2_BSIZE (XX2_SIZE * 8) - { D64_FMT_MC, "xx2", "Unknown $2000 format (unpacked)", 0x2000, 0, DM_FMT_RD, XX2_WIDTH_CH * 4, XX2_HEIGHT_CH * 8, @@ -1156,11 +1155,11 @@ NULL, NULL, NULL, { - { DT_BITMAP_RAM, 0x0000, 0, XX2_BSIZE, NULL, NULL }, - { DT_SCREEN_RAM, XX2_BSIZE, 0, XX2_SIZE, NULL, NULL }, - { DT_COLOR_RAM, XX2_BSIZE + XX2_SIZE, 0, XX2_SIZE, NULL, NULL }, - { DT_COLOR_SET, 11, 0, DC_BGCOL, NULL, NULL }, - { DT_LAST, 0, 0, 0, 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 }, }, NULL }, @@ -1199,15 +1198,15 @@ NULL, NULL, fmtGetPixelGunPaint, { - DEF_SCREEN_RAMS_8( 0x0000, 0, 0x400), - { DT_BITMAP_RAM, 0x2000, 0, 0, NULL, NULL }, - { DT_EXTRA_DATA, 0x3f4f, 0, 177, NULL, NULL }, - { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL }, - DEF_SCREEN_RAMS_8( 0x4400, 8, 0x400), - { DT_BITMAP_RAM, 0x6400, 1, 0, NULL, NULL }, - { DT_EXTRA_DATA, 0x47e8, 1, 20, NULL, NULL }, - { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtTruePaintGetLaceType, NULL }, - { DT_LAST, 0, 0, 0, NULL, NULL }, + 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 }, + 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_LAST , 0 , 0 , 0, 0, NULL, NULL }, }, NULL }, @@ -1222,9 +1221,9 @@ NULL, NULL, fmtGetPixelCHFLI, { - { DT_BITMAP_RAM, 0x0000, 0, 0, NULL, NULL }, - DEF_SCREEN_RAMS_8( 0x2000, 0, 0x400), - { DT_LAST, 0, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + DEF_SCREEN_RAMS_8(0x2000, 0, 0x400), + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, }, NULL },