It is currently Thu Oct 18, 2018 5:00 pm

All times are UTC - 7 hours





Post new topic Reply to topic  [ 8 posts ] 
Author Message
PostPosted: Fri Jan 12, 2018 2:56 pm 
Offline

Joined: Sun Jun 12, 2011 12:06 pm
Posts: 396
Location: Poland
Image

There are 16 chips. Do you think this is come special crazy mapper?
It is just simple 16 kB / 32 kB NROM game + mirroring select with register placed at $7000-$7fff.
Most of the chips are for some crazy PRG bank mixing. But they could use just 4 MBit PRG + 2 MBit CHR + 74273 + 74153 and 2 diodes + resistor to generate clock to 74273 (when placing it at $8000-$ffff).
The lookup table of values written after selecting game 01-30 is placed at offset $71 in ROM :
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 1E
They are sequential, so looks like they combined the games' PRG (or CHR) in bad order, ordered mask roms for them in factory and after doing prototype PCB they realized that they combined those files in wrong order, so they needed to fix it in hardware by using those gates.

Also, the menu routine is weird (game selected by entering number, instead of selecting from list), no game names.

Image Image Image Image

Code:

[wvmppppp]: REG: $7000-$7fff (cleared on power-up, but not reset)
 ||||||||
 |||+++++-- selects 8 kB CHR-ROM bank at $0000
 ||||||||
 |||+++++-- selects 16 kB PRG-ROM bank at $8000/$c000 (*)
 ||+------- mirroring: 0=H, 1=V (*)
 |+-------- PRG bank mode (*)
 ||          0=16k: $8000=ppppp, $c000=ppppp
 ||          1=32k: $8000=pppp0, $c000=pppp1
 +--------- write protection of this register: 1=enabled
 
Bus conflicts: yes (at $8000-$ffff)
 
(*) Exceptions:
* when ppppp is $1d     -> $8000=$1d, $c000=$1d, mirroring=H
* when ppppp is $1e/$1f -> $8000=$1e, $c000=$1f, mirroring=V
* when ppppp is $0c -> treat it as $0e \
*               $0d -> treat is as $0f  | only for PRG bank number
*               $0e -> treat is as $0c  | (CHR bank number is treated normally)
*               $0f -> treat is as $0d /

PRG banks & mirroring for sequential all values of reg:

REG|$8000|$c000|mir   REG|$8000|$c000|mir   REG|$8000|$c000|mir   REG|$8000|$c000|mir   
00 | 00  | 00  | 0    20 | 00  | 00  | 1    40 | 00  | 01  | 0    60 | 00  | 01  | 1   
01 | 01  | 01  | 0    21 | 01  | 01  | 1    41 | 00  | 01  | 0    61 | 00  | 01  | 1   
02 | 02  | 02  | 0    22 | 02  | 02  | 1    42 | 02  | 03  | 0    62 | 02  | 03  | 1   
03 | 03  | 03  | 0    23 | 03  | 03  | 1    43 | 02  | 03  | 0    63 | 02  | 03  | 1   
04 | 04  | 04  | 0    24 | 04  | 04  | 1    44 | 04  | 05  | 0    64 | 04  | 05  | 1   
05 | 05  | 05  | 0    25 | 05  | 05  | 1    45 | 04  | 05  | 0    65 | 04  | 05  | 1   
06 | 06  | 06  | 0    26 | 06  | 06  | 1    46 | 06  | 07  | 0    66 | 06  | 07  | 1   
07 | 07  | 07  | 0    27 | 07  | 07  | 1    47 | 06  | 07  | 0    67 | 06  | 07  | 1   
08 | 08  | 08  | 0    28 | 08  | 08  | 1    48 | 08  | 09  | 0    68 | 08  | 09  | 1   
09 | 09  | 09  | 0    29 | 09  | 09  | 1    49 | 08  | 09  | 0    69 | 08  | 09  | 1   
0a | 0a  | 0a  | 0    2a | 0a  | 0a  | 1    4a | 0a  | 0b  | 0    6a | 0a  | 0b  | 1   
0b | 0b  | 0b  | 0    2b | 0b  | 0b  | 1    4b | 0a  | 0b  | 0    6b | 0a  | 0b  | 1   
0c | 0e  | 0e  | 0    2c | 0e  | 0e  | 1    4c | 0e  | 0f  | 0    6c | 0e  | 0f  | 1   
0d | 0f  | 0f  | 0    2d | 0f  | 0f  | 1    4d | 0e  | 0f  | 0    6d | 0e  | 0f  | 1   
0e | 0c  | 0c  | 0    2e | 0c  | 0c  | 1    4e | 0c  | 0d  | 0    6e | 0c  | 0d  | 1   
0f | 0d  | 0d  | 0    2f | 0d  | 0d  | 1    4f | 0c  | 0d  | 0    6f | 0c  | 0d  | 1   
10 | 10  | 10  | 0    30 | 10  | 10  | 1    50 | 10  | 11  | 0    70 | 10  | 11  | 1   
11 | 11  | 11  | 0    31 | 11  | 11  | 1    51 | 10  | 11  | 0    71 | 10  | 11  | 1   
12 | 12  | 12  | 0    32 | 12  | 12  | 1    52 | 12  | 13  | 0    72 | 12  | 13  | 1   
13 | 13  | 13  | 0    33 | 13  | 13  | 1    53 | 12  | 13  | 0    73 | 12  | 13  | 1   
14 | 14  | 14  | 0    34 | 14  | 14  | 1    54 | 14  | 15  | 0    74 | 14  | 15  | 1   
15 | 15  | 15  | 0    35 | 15  | 15  | 1    55 | 14  | 15  | 0    75 | 14  | 15  | 1   
16 | 16  | 16  | 0    36 | 16  | 16  | 1    56 | 16  | 17  | 0    76 | 16  | 17  | 1   
17 | 17  | 17  | 0    37 | 17  | 17  | 1    57 | 16  | 17  | 0    77 | 16  | 17  | 1   
18 | 18  | 18  | 0    38 | 18  | 18  | 1    58 | 18  | 19  | 0    78 | 18  | 19  | 1   
19 | 19  | 19  | 0    39 | 19  | 19  | 1    59 | 18  | 19  | 0    79 | 18  | 19  | 1   
1a | 1a  | 1a  | 0    3a | 1a  | 1a  | 1    5a | 1a  | 1b  | 0    7a | 1a  | 1b  | 1   
1b | 1b  | 1b  | 0    3b | 1b  | 1b  | 1    5b | 1a  | 1b  | 0    7b | 1a  | 1b  | 1   
1c | 1c  | 1c  | 0    3c | 1c  | 1c  | 1    5c | 1c  | 1d  | 0    7c | 1c  | 1d  | 1   
1d | 1d  | 1d  | 0    3d | 1d  | 1d  | 0    5d | 1d  | 1d  | 0    7d | 1d  | 1d  | 0   
1e | 1e  | 1f  | 1    3e | 1e  | 1f  | 1    5e | 1e  | 1f  | 1    7e | 1e  | 1f  | 1   
1f | 1e  | 1f  | 1    3f | 1e  | 1f  | 1    5f | 1e  | 1f  | 1    7f | 1e  | 1f  | 1   


List of games:
* Battle City
* Ice Climber
* Pac-Man
* Galaxian
* Popeye
* Devil World
* Exerion
* Baseball
* Tennis
* Field Combat
* Gold
* Zippy Race
* Super Arabian
* Space Invaders
* Front Line
* Lode Runner
* Raid on Bungeling Bay
* 4 Nin Uchi Mahjong
* Kinnikuman - Muscle Tag Match
* Chou Jikuu Yousai - Macross
* Chack 'n Pop
* Ikki
* Championship Lode Runner
* Lunar Ball
* Duck Hunt
* Wild Gunman
* Urban Champion
* Star Force
* Clu Clu Land
* Super Mario Bros

Code:
#include "mapinc.h"
   
static uint8 reg;

static SFORMAT StateRegs[] =
{
   { 0 }
};

static void Sync(void) {
   setchr8(reg & 0x1F);

   switch (reg & 0x1f) {
   case 0x1d:
      setprg16(0x8000, 0x1d);
      setprg16(0xc000, 0x1d);
      setmirror(MI_H);
      break;
   case 0x1e:
   case 0x1f:
      setprg16(0x8000, 0x1e);
      setprg16(0xc000, 0x1f);
      setmirror(MI_V);
      break;
   default:
      setmirror(((reg >> 5) & 1) ? MI_V : MI_H);
      int reg_fix = reg & 0x1f;

      switch (reg & 0x1f) {
      case 0xc: reg_fix = 0xe; break;
      case 0xd: reg_fix = 0xf; break;
      case 0xe: reg_fix = 0xc; break;
      case 0xf: reg_fix = 0xd; break;
      }
         
      if ((reg >> 6) & 1) {
         setprg32(0x8000, reg_fix >> 1);
      }
      else {
         setprg16(0x8000, reg_fix);
         setprg16(0xc000, reg_fix);
      }
      break;

   }
}

static DECLFW(M279Write) {
   if ((reg >> 7) == 0) {
      reg = V;
   }
   Sync();
}

static void M279Power(void) {
   reg = 0;
   setchr8(0);
   SetWriteHandler(0x7000, 0x7fff, M279Write);
   SetReadHandler(0x8000, 0xFFFF, CartBR);
   Sync();
}

static void M279Reset(void) {
   Sync();
}


static void StateRestore(int version) {
   Sync();
}

void Mapper279_Init(CartInfo *info) {
   info->Power = M279Power;
   info->Reset = M279Reset;
   
   GameStateRestore = StateRestore;

   AddExState(&StateRegs, ~0, 0, 0);
}


Attachments:
30 in 1 [only menu].nes [24.02 KiB]
Downloaded 53 times


Last edited by krzysiobal on Fri Jan 12, 2018 6:27 pm, edited 5 times in total.
Top
 Profile  
 
PostPosted: Fri Jan 12, 2018 4:47 pm 
Offline

Joined: Mon Dec 12, 2011 8:15 pm
Posts: 427
great!!! data dumped?
fceux working?


Top
 Profile  
 
PostPosted: Fri Jan 12, 2018 5:55 pm 
Offline

Joined: Sun Jun 12, 2011 12:06 pm
Posts: 396
Location: Poland
Dumped & working in FCEUX. I updated the description to be more user-friendly.


Top
 Profile  
 
PostPosted: Fri Jan 12, 2018 7:10 pm 
Offline

Joined: Mon Dec 12, 2011 8:15 pm
Posts: 427
krzysiobal wrote:
Dumped & working in FCEUX. I updated the description to be more user-friendly.

thank you ,this rom interesting.

what's mapper 278?


Top
 Profile  
 
PostPosted: Fri Jan 12, 2018 7:26 pm 
Offline

Joined: Sun Jun 12, 2011 12:06 pm
Posts: 396
Location: Poland
When I get some new PCBs which I try to emulate, I assign to them next numbers, starrting from 256.


Top
 Profile  
 
PostPosted: Fri Jan 12, 2018 7:32 pm 
Offline

Joined: Mon Dec 12, 2011 8:15 pm
Posts: 427
krzysiobal wrote:
When I get some new PCBs which I try to emulate, I assign to them next numbers, starrting from 256.

I starting 316.


Top
 Profile  
 
PostPosted: Sat Jan 13, 2018 9:54 am 
Offline

Joined: Thu May 19, 2005 11:30 am
Posts: 672
krzysiobal wrote:
When I get some new PCBs which I try to emulate, I assign to them next numbers, starting from 256.
Which ones have you assigned so far?


Top
 Profile  
 
PostPosted: Sat Jan 13, 2018 9:56 am 
Offline

Joined: Sun Jun 12, 2011 12:06 pm
Posts: 396
Location: Poland
260-279


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 8 posts ] 

All times are UTC - 7 hours


Who is online

Users browsing this forum: No registered users and 7 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group