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
     },