X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/32620_extract/blobdiff_plain/b2130b29087d653cfbab0e1dd81d47b1dbbd37c7..62bca9e0cc06e9fb94755a2812ae8c9cdb4024f5:/extract.c diff --git a/extract.c b/extract.c index 7d7c9d1..805be1a 100644 --- a/extract.c +++ b/extract.c @@ -62,9 +62,9 @@ int main(int argc, char **argv) * * 00000000 01000000 01000011 10110111 01001010 01000011 11000011 01011000 * ^^^^^^^^ ^^^^^^^^ ^^^^^^^^| | - * LIIIIIII LIILIIII I????LII - * I I I I +-- Amplification (Default: 3) - * I I I +--------- Remaining chip select line? (but not quite?) + * LIIIIIII LIILIIII LIIIILII + * I I I | +-- Amplification (Default: 3) + * I I I +----- Chip/Module Select lines/EOF? * I I +----------- Address (HI Byte) * I +---------------- Chip Select lines A15, A14, A13 * +-------------------- Address (LO Byte) @@ -76,24 +76,27 @@ int main(int argc, char **argv) lo = header[i]; hi = header[i+1] & 0x1f; - //!EOF ?! + // !EOF ?! if ((header[i+2] & 0xf8) != 0xf8) - cs2 = header[i+2] & 0xf8; + cs2 = (header[i+2] & 0xf8) >> 3; - if (cs2 & 0x40) { - cs = ((header[i+1] & 0xe0) >> 5) - 2; - } else { - cs = (((header[i+1] & 0xe0) >> 5) | (1 << 3)) - 4; - } + cs = ((header[i+1] & 0xe0) >> 5) - 2; + + // second module? + if ((cs2 & 0x08) == 0x00) + cs += 6; // 6 ROMs per module amp = header[i+2] & 0x3; adr = ((hi << 8) | lo) + (cs * 8192); - if (cs == 0) + if (adr == 0) adr += sizeof(header); - printf("%02d. hi: 0x%02x, lo: 0x%02x, cs: 0x%02x -> adr: 0x%04x; amp: 0x%02x\n", - i/3, hi, lo, cs, adr, amp); + printf("%02d. hi: 0x%02x, lo: 0x%02x, cs: 0x%02x, cs2: 0x%02x -> chip: 0x%02x, adr: 0x%04x; amp: 0x%02x\n", + i/3, hi, lo, + ((header[i+1] & 0xe0) >> 5), + ((header[i+2] & 0xf8) >> 3), + cs, adr, amp); adrs[i/3] = adr; if ((header[i+2] & 0xf8) == 0xf8)