Previous 199869 Revisions Next

r32169 Thursday 18th September, 2014 at 05:17:23 UTC by Fabio Priuli
(MESS) a7800: changed header bits for pokey at
$0450, after discussion with Mike Saarna. also,
when loading from softlist, let's rely on the xml
to detect oncart RAM and NVRAM. nw.
[hash]a7800.xml
[src/emu/bus/a7800]a78_slot.c

trunk/hash/a7800.xml
r32168r32169
11801180         <dataarea name="rom" size="131072">
11811181            <rom name="impssble.bin" size="131072" crc="3b1f2f47" sha1="5437c0efb63a349953ec047efe6ec24144ed6914" offset="0" />
11821182         </dataarea>
1183         <dataarea name="ram" size="16384">
1184         </dataarea>
11831185      </part>
11841186   </software>
11851187
r32168r32169
11951197         <dataarea name="rom" size="131072">
11961198            <rom name="impssbeu.bin" size="131072" crc="994af6e0" sha1="9770b61472510aba1cf3ea35ceca1859c3493676" offset="0" />
11971199         </dataarea>
1200         <dataarea name="ram" size="16384">
1201         </dataarea>
11981202      </part>
11991203   </software>
12001204
r32168r32169
12101214         <dataarea name="rom" size="131072">
12111215            <rom name="jinks.bin" size="131072" crc="0818d8cd" sha1="472bc12c437b015a9e317bac092529f3295033b8" offset="0" />
12121216         </dataarea>
1217         <dataarea name="ram" size="16384">
1218         </dataarea>
12131219      </part>
12141220   </software>
12151221
r32168r32169
12251231         <dataarea name="rom" size="131072">
12261232            <rom name="jinkseu.bin" size="131072" crc="9207ed3b" sha1="eb16de0c3d5c4e769ae2314ba21c4dd3bca33c88" offset="0" />
12271233         </dataarea>
1234         <dataarea name="ram" size="16384">
1235         </dataarea>
12281236      </part>
12291237   </software>
12301238
r32168r32169
18261834         <dataarea name="rom" size="131072">
18271835            <rom name="plutos.bin" size="131072" crc="2f211f7f" sha1="fa55d6a366b237917f18487fc51817394839a3bc" offset="0" />
18281836         </dataarea>
1837         <dataarea name="ram" size="16384">
1838         </dataarea>
18291839      </part>
18301840   </software>
18311841
r32168r32169
19021912         <dataarea name="rom" size="32768">
19031913            <rom name="rescuefr.bin" size="32768" crc="9a74fbf2" sha1="6653022f38e553d475896a918850158eaf8f77ff" offset="0" />
19041914         </dataarea>
1915         <dataarea name="ram" size="16384">
1916         </dataarea>
19051917      </part>
19061918   </software>
19071919
r32168r32169
20212033         <dataarea name="rom" size="131072">
20222034            <rom name="sirius.bin" size="131072" crc="65ae616e" sha1="cd9f6dea96f102262065d7472e73121b67f9e244" offset="0" />
20232035         </dataarea>
2036         <dataarea name="ram" size="16384">
2037         </dataarea>
20242038      </part>
20252039   </software>
20262040
r32168r32169
21192133         <dataarea name="rom" size="131072">
21202134            <rom name="smmrgame.bin" size="131072" crc="65c6df3f" sha1="31d46b32a2aa8d5bd6028cff1f41037426b22409" offset="0" />
21212135         </dataarea>
2136         <dataarea name="ram" size="16384">
2137         </dataarea>
21222138      </part>
21232139   </software>
21242140
r32168r32169
22832299         <dataarea name="rom" size="65536">
22842300            <rom name="twrtpllr.bin" size="65536" crc="4407ba04" sha1="53976013986e0ad3694ab9c021420b8172465de7" offset="0" />
22852301         </dataarea>
2302         <dataarea name="ram" size="16384">
2303         </dataarea>
22862304      </part>
22872305   </software>
22882306
r32168r32169
22982316         <dataarea name="rom" size="65536">
22992317            <rom name="twrtpleu.bin" size="65536" crc="0f87fd7b" sha1="56e1b795e80382edb376e4536d1dee539d4ac548" offset="0" />
23002318         </dataarea>
2319         <dataarea name="ram" size="16384">
2320         </dataarea>
23012321      </part>
23022322   </software>
23032323
r32168r32169
23422362         <dataarea name="rom" size="131072">
23432363            <rom name="wntrgame.bin" size="131072" crc="8981b531" sha1="b3725d6f0834c68ac62ce13eb9eb0d01d1124e5e" offset="0" />
23442364         </dataarea>
2365         <dataarea name="ram" size="16384">
2366         </dataarea>
23452367      </part>
23462368   </software>
23472369
r32168r32169
24172439         <dataarea name="rom" size="4096">
24182440            <rom name="highscre.bin" size="4096" crc="9be408d3" sha1="a3af676991391a6dd716c79022d4947206b78164" offset="0" />
24192441         </dataarea>
2442         <dataarea name="nvram" size="2048">
2443         </dataarea>
24202444      </part>
24212445   </software>
24222446
r32168r32169
24302454         <dataarea name="rom" size="1">
24312455            <!-- this entry behaves just as passthrough, even if in fact the chips shall be socketed on the PCB! -->
24322456         </dataarea>
2457         <dataarea name="ram" size="131072">
2458         </dataarea>
24332459      </part>
24342460   </software>
24352461
2436<!-- Chip adding 128K of RAM + POKEY+HighScore onboard -->
2462<!-- Chip adding 128K of RAM + POKEY + HighScore onboard -->
24372463   <software name="xm">
24382464      <description>XM Expansion Module</description>
24392465      <year>2015?</year>
r32168r32169
24432469         <dataarea name="rom" size="4096">
24442470            <rom name="highscre.bin" size="4096" crc="9be408d3" sha1="a3af676991391a6dd716c79022d4947206b78164" offset="0" />
24452471         </dataarea>
2472         <dataarea name="ram" size="131072">
2473         </dataarea>
2474         <dataarea name="nvram" size="2048">
2475         </dataarea>
24462476      </part>
24472477   </software>
24482478
trunk/src/emu/bus/a7800/a78_slot.c
r32168r32169
357357      if (software_entry() != NULL)
358358      {
359359         const char *pcb_name;
360         bool has_ram = get_software_region("ram") ? TRUE : FALSE;
361         bool has_nvram = get_software_region("nvram") ? TRUE : FALSE;
360362         len = get_software_region_length("rom");
361363         
362364         m_cart->rom_alloc(len);
r32168r32169
367369            m_type = a78_get_pcb_id(pcb_name);
368370         else
369371            m_type = A78_TYPE0;
372
373         if (has_ram)
374            m_cart->ram_alloc(get_software_region_length("ram"));
375         if (has_nvram)
376         {
377            m_cart->nvram_alloc(get_software_region_length("nvram"));
378            battery_load(m_cart->get_nvram_base(), get_software_region_length("nvram"), 0xff);
379         }
370380      }
371381      else
372382      {
r32168r32169
388398         // let's try to auto-fix some common errors in the header
389399         mapper = validate_header((head[53] << 8) | head[54], TRUE);
390400
391         switch (mapper & 0xfe)
401         switch (mapper & 0x2e)
392402         {
393403            case 0x0000:
394404               m_type = BIT(mapper, 0) ? A78_TYPE1 : A78_TYPE0;
r32168r32169
410420                  m_type = A78_VERSABOARD;
411421               break;
412422         }
413
414         // check special bits, which override the previous
415         if ((mapper & 0xff00) == 0x0100)
416            m_type = A78_ACTIVISION;
417         else if ((mapper & 0xff00) == 0x0200)
418            m_type = A78_ABSOLUTE;
419         else if ((mapper & 0xff00) == 0x0300)
423         
424         // check if cart has a POKEY at $0450 (typically a VersaBoard variant)!
425         if (mapper & 0x40)
420426         {
421            // the cart has a POKEY at $0450 (typically a VersaBoard variant)!
422427            if (m_type != A78_TYPE2)
423428            {
424429               m_type &= ~0x02;
425430               m_type += A78_POKEY0450;
426431            }
427432         }
433         
434         // check special bits, which override the previous
435         if ((mapper & 0xff00) == 0x0100)
436            m_type = A78_ACTIVISION;
437         else if ((mapper & 0xff00) == 0x0200)
438            m_type = A78_ABSOLUTE;
428439
429440         logerror("Cart type: 0x%x\n", m_type);
430441
r32168r32169
450461         m_cart->rom_alloc(len);
451462         ROM = m_cart->get_rom_base();
452463         fread(ROM, len);
464         
465         if (m_type == A78_TYPE6)
466            m_cart->ram_alloc(0x4000);
467         if (m_type == A78_MEGACART || (m_type >= A78_VERSABOARD && m_type <= A78_VERSA_POK450))
468            m_cart->ram_alloc(0x8000);
469         if (m_type == A78_XB_BOARD || m_type == A78_XM_BOARD)
470            m_cart->ram_alloc(0x20000);
471         if (m_type == A78_HSC || m_type == A78_XM_BOARD)
472         {
473            m_cart->nvram_alloc(0x800);
474            battery_load(m_cart->get_nvram_base(), 0x800, 0xff);
475         }
453476      }
454477     
455478      //printf("Type: %s\n", a78_get_slot(m_type));
456     
457      if (m_type == A78_TYPE6)
458         m_cart->ram_alloc(0x4000);
459      if (m_type == A78_MEGACART || (m_type >= A78_VERSABOARD && m_type <= A78_VERSA_POK450))
460         m_cart->ram_alloc(0x8000);
461      if (m_type == A78_XB_BOARD || m_type == A78_XM_BOARD)
462         m_cart->ram_alloc(0x20000);
463      if (m_type == A78_HSC || m_type == A78_XM_BOARD)
464      {
465         m_cart->nvram_alloc(0x800);
466         battery_load(m_cart->get_nvram_base(), 0x800, 0xff);
467      }
468479   }
469480   return IMAGE_INIT_PASS;
470481}
r32168r32169
539550      // let's try to auto-fix some common errors in the header
540551      mapper = validate_header((head[53] << 8) | head[54], FALSE);
541552     
542      switch (mapper & 0xfe)
553      switch (mapper & 0x2e)
543554      {
544555         case 0x0000:
545556            type = BIT(mapper, 0) ? A78_TYPE1 : A78_TYPE0;
r32168r32169
562573            break;
563574      }
564575     
565      // check special bits, which override the previous
566      if ((mapper & 0xff00) == 0x0100)
567         type = A78_ACTIVISION;
568      else if ((mapper & 0xff00) == 0x0200)
569         type = A78_ABSOLUTE;
570      else if ((mapper & 0xff00) == 0x0300)
576      // check if cart has a POKEY at $0450 (typically a VersaBoard variant)!
577      if (mapper & 0x40)
571578      {
572         // the cart has a POKEY at $0450 (typically a VersaBoard variant)!
573579         if (type != A78_TYPE2)
574580         {
575581            type &= ~0x02;
576582            type += A78_POKEY0450;
577583         }
578584      }
579
585     
586      // check special bits, which override the previous
587      if ((mapper & 0xff00) == 0x0100)
588         type = A78_ACTIVISION;
589      else if ((mapper & 0xff00) == 0x0200)
590         type = A78_ABSOLUTE;
591     
580592      logerror("Cart type: %x\n", type);
581593      slot_string = a78_get_slot(type);
582594     

Previous 199869 Revisions Next


© 1997-2024 The MAME Team