Previous 15994 Revisions Next

r11484 Sunday 8th May, 2011 at 14:33:54 UTC by Curt Coder
[C64] Added mapper for the "Pagefox" cartridge. The 32KB RAM expansion is not fully supported. [Curt Coder]
[hash]c64_cart.xml
[src/mess/machine]c64.c

hash/c64_cart.xml
r11483r11484
207207      -->
208208      <part name="cart" interface="c64_cart">
209209         <feature name="cart_type" value="pagefox" />
210         <feature name="game" value="1" />
210         <feature name="game" value="0" />
211211         <feature name="exrom" value="0" />
212212
213213         <dataarea name="rom" size="0x10000">
src/mess/machine/c64.c
r11483r11484
14141414   space->install_legacy_write_handler( 0xde00, 0xde01, FUNC(easy_calc_result_bank_w) );
14151415}
14161416
1417static WRITE8_HANDLER( pagefox_bank_w )
1418{
1419   /*
1420
1421      Die 96KB des Moduls belegen in 6 16K-Banken den Modulbereich von $8000- $c000.
1422      Die Umschaltung erfolgt mit einem Register in $DE80 (-$DEFF, nicht voll decodiert),
1423      welches nur beschrieben und nicht gelesen werden kann. Durch Schreiben der Werte
1424      $08 oder $0A selektiert man eine der beiden RAM-Banke, $FF deselektiert das Modul.
1425     
1426      Zusatzlich muss Adresse 1 entsprechend belegt werden :$37 fur Lesezugriffe auf das
1427      Modul, $35 oder $34 fur Lesezugriffe auf das Ram des C64. Schreibzugriffe lenkt
1428      der C64 grundsatzlich ins eigene RAM, weshalb zum Beschreiben des Modulrams ein
1429      Trick notwendig ist: Man schaltet das Ram-Modul parallel zum C64-Ram, rettet vor
1430      dem Schreiben den C64-Ram-Inhalt und stellt ihn nachher wieder her...
1431   
1432      Ldy#0
1433      Lda#$35
1434      Sta 1
1435      Loop Lda (Ptr),y
1436      Pha
1437      Lda#$08
1438      Sta $DE80
1439      Lda (Quell),y
1440      Sta (Ptr),y
1441      Lda#$FF
1442      Sta $DE80
1443      Pla
1444      Sta (Ptr),y
1445      Iny
1446      Bne Loop
1447
1448   */
1449
1450   c64_state *state = space->machine().driver_data<c64_state>();
1451   UINT8 *cart = space->machine().region("user1")->base();
1452
1453   if (data == 0xff)
1454   {
1455      // hide cartridge
1456      state->m_game = 1;
1457      state->m_exrom = 1;
1458      c64_bankswitch(space->machine(), 0);
1459   }
1460   else
1461   {
1462      int bank = (data >> 1) & 0x03;
1463      int ram = BIT(data, 3);
1464
1465      offs_t offset = ram ? 0x10000 : (bank * 0x4000);
1466
1467      // map cartridge ROMs
1468      memcpy(state->m_roml, cart + offset, 0x2000);
1469      memcpy(state->m_romh, cart + offset + 0x2000, 0x2000);
1470
1471      if (state->m_game)
1472      {
1473         // enable cartridge
1474         state->m_game = 0;
1475         state->m_exrom = 0;
1476         c64_bankswitch(space->machine(), 0);
1477      }
1478   }
1479}
1480
1481static void load_pagefox_cartridge(device_image_interface &image)
1482{
1483   c64_state *state = image.device().machine().driver_data<c64_state>();
1484
1485   UINT8 *rom = image.get_software_region("rom");
1486   UINT8 *cart = image.device().machine().region("user1")->base();
1487   memcpy(cart, rom, 0x10000);
1488
1489   // map cartridge ROMs
1490   memcpy(state->m_roml, cart, 0x2000);
1491   memcpy(state->m_romh, cart + 0x2000, 0x2000);
1492
1493   // install bankswitch handler
1494   address_space *space = image.device().machine().device( "maincpu")->memory().space( AS_PROGRAM );
1495   space->install_legacy_write_handler( 0xde80, 0xdeff, FUNC(pagefox_bank_w) );
1496}
1497
14171498static void c64_software_list_cartridge_load(device_image_interface &image)
14181499{
14191500   c64_state *state = image.device().machine().driver_data<c64_state>();
r11483r11484
14471528     
14481529      if (!strcmp(cart_type, "easy_calc_result"))
14491530         load_easy_calc_result_cartridge(image);
1531     
1532      if (!strcmp(cart_type, "pagefox"))
1533         load_pagefox_cartridge(image); // TODO writing to the expanded 32KB RAM is not supported!
14501534   }
14511535}
14521536

Previous 15994 Revisions Next


© 1998-2018 The MESS Team