diff tools/lib64fmts.c @ 2238:5db6e0b63b35

Change again how the interlace type information is stored. Now store it in DMC64Image::extraInfo[] where it actually makes sense. Also add index for FLI type.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 15 Jun 2019 06:43:36 +0300
parents a36c81c3df85
children 48b48251610a
line wrap: on
line diff
--- a/tools/lib64fmts.c	Sat Jun 15 06:26:07 2019 +0300
+++ b/tools/lib64fmts.c	Sat Jun 15 06:43:36 2019 +0300
@@ -395,7 +395,7 @@
 {
     (void) fmt;
 
-    img->laceType = buf->data[op->offs] ? D64_ILACE_RES : D64_ILACE_COLOR;
+    img->extraInfo[D64_EI_ILACE_TYPE] = buf->data[op->offs] ? D64_ILACE_RES : D64_ILACE_COLOR;
     return DMERR_OK;
 }
 
@@ -404,7 +404,7 @@
     const DMC64Image *img, const DMC64ImageCommonFormat *fmt)
 {
     (void) fmt;
-    buf->data[op->offs] = (img->laceType == D64_ILACE_RES) ? 1 : 0;
+    buf->data[op->offs] = (img->extraInfo[D64_EI_ILACE_TYPE] == D64_ILACE_RES) ? 1 : 0;
     return DMERR_OK;
 }
 
@@ -1660,6 +1660,7 @@
             { DO_COPY       , DS_COLOR_RAM   , 0x0100, 0,  0,   0, NULL, NULL, DF_NORMAL },
             DEF_REPEAT_BLOCK_8(DS_SCREEN_RAM, 0x0500, 0, 0x400, 0, DF_NORMAL),
             { DO_COPY       , DS_BITMAP_RAM  , 0x2500, 0,  0,   0, NULL, NULL, DF_NORMAL },
+            { DO_SET_OP     , DS_EXTRA_INFO  , D64_FLI_8,  0,   0, D64_EI_FLI_TYPE, NULL, NULL, DF_DECODE },
             { DO_LAST       , 0              , 0     , 0,  0,   0, NULL, NULL, DF_NORMAL },
         }
     },
@@ -1693,7 +1694,8 @@
             DEF_REPEAT_BLOCK_8(DS_SCREEN_RAM , 0x43e8, 8,  0x400, 0, DF_NORMAL),
             { DO_COPY       , DS_BITMAP_RAM  , 0x63e8, 1,  0    , 0, NULL, NULL, DF_NORMAL },
             { DO_COPY       , DS_EXTRA_DATA  , 0x8328, 0,  100  , 100, NULL, NULL, DF_NORMAL },
-            { DO_SET_OP     , DS_ILACE_TYPE  , D64_ILACE_RES, 0 , 0  , 0, NULL, NULL, DF_DECODE },
+            { DO_SET_OP     , DS_EXTRA_INFO  , D64_ILACE_RES, 0 , 0  , D64_EI_ILACE_TYPE, NULL, NULL, DF_DECODE },
+            { DO_SET_OP     , DS_EXTRA_INFO  , D64_FLI_8,  0,   0, D64_EI_FLI_TYPE, NULL, NULL, DF_DECODE },
             { DO_LAST       , 0              , 0     , 0,  0    , 0, NULL, NULL, DF_NORMAL },
         }
     },
@@ -1746,7 +1748,7 @@
             { DO_COPY       , DS_BITMAP_RAM  , 0x2400, 1,  0,   0, NULL, NULL, DF_NORMAL },
             { DO_COPY       , DS_SCREEN_RAM  , 0x4400, 1,  0,   0, NULL, NULL, DF_NORMAL },
             { DO_COPY       , DS_COLOR_RAM   , 0x4800, 0,  0,   0, NULL, NULL, DF_NORMAL },
-            { DO_SET_OP     , DS_ILACE_TYPE  , D64_ILACE_RES, 0 , 0  , 0, NULL, NULL, DF_DECODE },
+            { DO_SET_OP     , DS_EXTRA_INFO  , D64_ILACE_RES, 0 , 0  , D64_EI_ILACE_TYPE, NULL, NULL, DF_DECODE },
             { DO_LAST       , 0              , 0     , 0,  0,   0, NULL, NULL, DF_NORMAL },
         }
     },
@@ -1763,7 +1765,8 @@
             DEF_REPEAT_BLOCK_8(DS_SCREEN_RAM , 0x2000, 0, 0x400, 0, DF_NORMAL),
             { DO_COPY       , DS_BITMAP_RAM  , 0x4000, 1,  0,   0, NULL, NULL, DF_NORMAL },
             DEF_REPEAT_BLOCK_8(DS_SCREEN_RAM , 0x6000, 8, 0x400, 0, DF_NORMAL),
-            { DO_SET_OP     , DS_ILACE_TYPE  , D64_ILACE_COLOR, 0 , 0  , 0, NULL, NULL, DF_DECODE },
+            { DO_SET_OP     , DS_EXTRA_INFO  , D64_ILACE_COLOR, 0 , 0  , D64_EI_ILACE_TYPE, NULL, NULL, DF_DECODE },
+            { DO_SET_OP     , DS_EXTRA_INFO  , D64_FLI_8,  0,   0, D64_EI_FLI_TYPE, NULL, NULL, DF_DECODE },
             { DO_LAST       , 0              , 0     , 0,  0,   0, NULL, NULL, DF_NORMAL },
         }
     },
@@ -1778,6 +1781,7 @@
         {
             { DO_COPY       , DS_BITMAP_RAM  , 0x0000, 0,  0,   0, NULL, NULL, DF_NORMAL },
             DEF_REPEAT_BLOCK_8(DS_SCREEN_RAM , 0x2000, 0,  0x400, 0, DF_NORMAL),
+            { DO_SET_OP     , DS_EXTRA_INFO  , D64_FLI_8,  0,   0, D64_EI_FLI_TYPE, NULL, NULL, DF_DECODE },
             { DO_LAST       , 0              , 0     , 0,  0,   0, NULL, NULL, DF_NORMAL },
         }
     },
@@ -1793,6 +1797,7 @@
             { DO_COPY      , DS_COLOR_RAM   , 0x0000, 0,  0,   0, NULL, NULL, DF_NORMAL },
             DEF_REPEAT_BLOCK_8(DS_SCREEN_RAM, 0x0400, 0, 0x400, 0, DF_NORMAL),
             { DO_COPY      , DS_BITMAP_RAM  , 0x2400, 0,  0,   0, NULL, NULL, DF_NORMAL },
+            { DO_SET_OP     , DS_EXTRA_INFO  , D64_FLI_8,  0,   0, D64_EI_FLI_TYPE, NULL, NULL, DF_DECODE },
             { DO_LAST      , 0              , 0     , 0,  0,   0, NULL, NULL, DF_NORMAL },
         }
     },
@@ -1824,6 +1829,7 @@
             { DO_COPY       , DS_EXTRA_DATA  , 0x03e8, 15 , 2     ,   0, NULL, NULL, DF_DECODE },  // 2 sprite colors
             { DO_COPY       , DS_EXTRA_DATA  , 0x0000, 14 , 0x3e00,   0, NULL, NULL, DF_DECODE },  // Lazily copy whole data for sprite data
             { DO_COPY       , DS_BITMAP_RAM  , 0x2000, 0  , 0     ,   0, NULL, NULL, DF_NORMAL },
+            { DO_SET_OP     , DS_EXTRA_INFO  , D64_FLI_8,  0,   0, D64_EI_FLI_TYPE, NULL, NULL, DF_DECODE },
             { DO_LAST       , 0              , 0     , 0  , 0     ,   0, NULL, NULL, DF_NORMAL },
         }
     },
@@ -2279,6 +2285,7 @@
                 { DO_COPY       , DS_BITMAP_RAM  , 0x2401, 0,  0x2000,   0, NULL, NULL, DF_NORMAL },
                 DEF_REPEAT_BLOCK_8(DS_SCREEN_RAM , 0x4401, 8, 0x400, 0x400, DF_NORMAL),
                 { DO_COPY       , DS_BITMAP_RAM  , 0x6401, 1,  0x2000,   0, NULL, NULL, DF_NORMAL },
+                { DO_SET_OP     , DS_EXTRA_INFO  , D64_FLI_8,  0,   0, D64_EI_FLI_TYPE, NULL, NULL, DF_DECODE },
                 { DO_LAST       , 0              , 0     , 0,  0     ,   0, NULL, NULL, DF_NORMAL },
             }
         },
@@ -2429,7 +2436,8 @@
                 // GunPaint does not store the last 3 d021 values .. so set them to black
                 // XXX TODO: According to some, the last 4 should be same ..
                 { DO_SET_MEM    , DS_EXTRA_DATA  , 0     , 0,  3  , 20+177, NULL, NULL, DF_NORMAL },
-                { DO_SET_OP     , DS_ILACE_TYPE  , D64_ILACE_RES, 0 , 0  , 0, NULL, NULL, DF_DECODE },
+                { DO_SET_OP     , DS_EXTRA_INFO  , D64_ILACE_RES  , 0,  0  , D64_EI_ILACE_TYPE, NULL, NULL, DF_DECODE },
+                { DO_SET_OP     , DS_EXTRA_INFO  , D64_FLI_8      , 0,  0  , D64_EI_FLI_TYPE, NULL, NULL, DF_DECODE },
                 { DO_FUNC       , 0              , 0     , 0,  0  , 0, NULL, fmtEncodeGunPaint, DF_NORMAL },
                 { DO_LAST       , 0              , 0     , 0,  0  , 0, NULL, NULL, DF_NORMAL },
             }
@@ -2455,6 +2463,7 @@
                 { DO_COPY       , DS_SCREEN_RAM  , 0x0c00, 1,  0,   0, NULL, NULL, DF_NORMAL },
                 { DO_COPY       , DS_BITMAP_RAM  , 0x1000, 0,  0,   0, NULL, NULL, DF_NORMAL },
                 { DO_COPY       , DS_EXTRA_DATA  , 0x2f40, 0,  D64_SCR_HEIGHT / 4,   0, NULL, NULL, DF_NORMAL },
+                { DO_SET_OP     , DS_EXTRA_INFO  , D64_FLI_8      , 0,  0  , D64_EI_FLI_TYPE, NULL, NULL, DF_DECODE },
                 { DO_LAST       , 0              , 0     , 0,  0,   0, NULL, NULL, DF_NORMAL },
             }
         },
@@ -2479,6 +2488,7 @@
                 { DO_SET_MEM_LO , DS_D022        , 0x9581 - 0x4800, 0,  0,   0, NULL, NULL, DF_NORMAL }, // Sprite color
                 { DO_SET_MEM_LO , DS_COLOR_RAM   , 0x9582 - 0x4800, 0,  0,   0, NULL, NULL, DF_NORMAL },
                 { DO_COPY       , DS_EXTRA_DATA  , 0x5ac0 - 0x4800, 0,  D64_SPR_SIZE * 235,   0, NULL, NULL, DF_NORMAL }, // Sprite data
+                { DO_SET_OP     , DS_EXTRA_INFO  , D64_FLI_8      , 0,  0  , D64_EI_FLI_TYPE, NULL, NULL, DF_DECODE },
                 { DO_LAST       , 0              , 0              , 0,  0,   0, NULL, NULL, DF_NORMAL },
             }
         },
@@ -2499,6 +2509,7 @@
             {
                 { DO_COPY       , DS_BITMAP_RAM  , 0x0000, 0,  0    ,  0, NULL, NULL, DF_NORMAL },
                 DEF_REPEAT_BLOCK_8(DS_SCREEN_RAM , 0x2000, 0,  0x400,  0, DF_NORMAL),
+                { DO_SET_OP     , DS_EXTRA_INFO  , D64_FLI_8      , 0,  0  , D64_EI_FLI_TYPE, NULL, NULL, DF_DECODE },
                 { DO_LAST       , 0              , 0     , 0,  0    ,  0, NULL, NULL, DF_NORMAL },
             }
         },