Previous 199869 Revisions Next

r39992 Tuesday 28th July, 2015 at 07:30:35 UTC by Wilbert Pol
msx1_cart.xml: Partially implemented mapper used for msx write. (nw)
[hash]msx1_cart.xml
[src/emu/bus/msx_cart]ascii.c ascii.h cartridge.c

trunk/hash/msx1_cart.xml
r248503r248504
666666      </part>
667667   </software>
668668
669   <!-- Does not seem to work at the moment -->
670   <software name="msxwritj" supported="no">
669   <!-- Code seems to work but it does not display text -->
670   <software name="msxwritj" supported="partial">
671671      <description>Japanese MSX-Write (Jpn)</description>
672672      <year>1986</year>
673673      <publisher>ASCII</publisher>
674674      <info name="alt_title" value="日本語MSX-Write" />
675675      <part name="cart" interface="msx_cart">
676676         <feature name="pcb" value="MSX WRITE 900178B" />
677         <feature name="slot" value="ascii8" />
677         <feature name="slot" value="msxwrite" />
678678         <feature name="mapper" value="M60002-0125SP" />
679679         <dataarea name="rom" size="524288">
680680            <rom name="225 aa 8716 zoo" size="524288" crc="ef02e4f3" sha1="4180544158a57c99162269e33e4f2c77c9fce84e" offset="0" />
trunk/src/emu/bus/msx_cart/ascii.c
r248503r248504
88const device_type MSX_CART_ASCII16 = &device_creator<msx_cart_ascii16>;
99const device_type MSX_CART_ASCII8_SRAM = &device_creator<msx_cart_ascii8_sram>;
1010const device_type MSX_CART_ASCII16_SRAM = &device_creator<msx_cart_ascii16_sram>;
11const device_type MSX_CART_MSXWRITE = &device_creator<msx_cart_msxwrite>;
1112
1213
1314msx_cart_ascii8::msx_cart_ascii8(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
r248503r248504
441442      }
442443   }
443444}
445
446
447
448msx_cart_msxwrite::msx_cart_msxwrite(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
449   : device_t(mconfig, MSX_CART_MSXWRITE, "MSX Cartridge - MSXWRITE", tag, owner, clock, "msx_cart_msxwrite", __FILE__)
450   , msx_cart_interface(mconfig, *this)
451   , m_bank_mask(0)
452{
453   for (int i = 0; i < 2; i++)
454   {
455      m_selected_bank[i] = 0;
456      m_bank_base[i] = NULL;
457   }
458}
459
460
461void msx_cart_msxwrite::device_start()
462{
463   save_item(NAME(m_selected_bank));
464
465   machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_msxwrite::restore_banks), this));
466}
467
468
469void msx_cart_msxwrite::restore_banks()
470{
471   for (int i = 0; i < 2; i++)
472   {
473      m_bank_base[i] = get_rom_base() + (m_selected_bank[i] & m_bank_mask) * 0x4000;
474   }
475}
476
477
478void msx_cart_msxwrite::device_reset()
479{
480   for (int i = 0; i < 2; i++)
481   {
482      m_selected_bank[i] = 0;
483   }
484}
485
486
487void msx_cart_msxwrite::initialize_cartridge()
488{
489   UINT32 size = get_rom_size();
490
491   if ( size > 256 * 0x4000 )
492   {
493      fatalerror("msxwrite: ROM is too big\n");
494   }
495
496   UINT16 banks = size / 0x4000;
497
498   if (size != banks * 0x4000 || (~(banks - 1) % banks))
499   {
500      fatalerror("msxwrite: Invalid ROM size\n");
501   }
502
503   m_bank_mask = banks - 1;
504
505   restore_banks();
506}
507
508
509READ8_MEMBER(msx_cart_msxwrite::read_cart)
510{
511   if ( offset >= 0x4000 && offset < 0xC000 )
512   {
513      return m_bank_base[offset >> 15][offset & 0x3fff];
514   }
515   return 0xff;
516}
517
518
519WRITE8_MEMBER(msx_cart_msxwrite::write_cart)
520{
521   // The rom writes to 6fff and 7fff for banking, unknown whether
522   // other locations also trigger banking.
523   switch (offset)
524   {
525      case 0x6fff:
526         m_selected_bank[0] = data;
527         m_bank_base[0] = get_rom_base() + (m_selected_bank[0] & m_bank_mask) * 0x4000;
528         break;
529
530      case 0x7fff:
531         m_selected_bank[1] = data;
532         m_bank_base[1] = get_rom_base() + (m_selected_bank[1] & m_bank_mask) * 0x4000;
533         break;
534   }
535}
536
trunk/src/emu/bus/msx_cart/ascii.h
r248503r248504
1010extern const device_type MSX_CART_ASCII16;
1111extern const device_type MSX_CART_ASCII8_SRAM;
1212extern const device_type MSX_CART_ASCII16_SRAM;
13extern const device_type MSX_CART_MSXWRITE;
1314
1415
1516class msx_cart_ascii8 : public device_t
r248503r248504
114115};
115116
116117
118class msx_cart_msxwrite : public device_t
119                  , public msx_cart_interface
120{
121public:
122   msx_cart_msxwrite(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
123
124   // device-level overrides
125   virtual void device_start();
126   virtual void device_reset();
127
128   virtual void initialize_cartridge();
129
130   virtual DECLARE_READ8_MEMBER(read_cart);
131   virtual DECLARE_WRITE8_MEMBER(write_cart);
132
133   void restore_banks();
134
135private:
136   UINT8 m_bank_mask;
137   UINT8 m_selected_bank[2];
138   UINT8 *m_bank_base[2];
139};
140
117141#endif
trunk/src/emu/bus/msx_cart/cartridge.c
r248503r248504
4545   SLOT_INTERFACE_INTERNAL("korean_80in1", MSX_CART_KOREAN_80IN1)
4646   SLOT_INTERFACE_INTERNAL("korean_90in1", MSX_CART_KOREAN_90IN1)
4747   SLOT_INTERFACE_INTERNAL("korean_126in1", MSX_CART_KOREAN_126IN1)
48   SLOT_INTERFACE_INTERNAL("msxwrite", MSX_CART_MSXWRITE)
4849   SLOT_INTERFACE_INTERNAL("sound_snatcher", MSX_CART_SOUND_SNATCHER)
4950   SLOT_INTERFACE_INTERNAL("sound_sdsnatch", MSX_CART_SOUND_SDSNATCHER)
5051   SLOT_INTERFACE_INTERNAL("msxaud_hxmu900", MSX_CART_MSX_AUDIO_HXMU900)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team