Previous 199869 Revisions Next

r31666 Saturday 16th August, 2014 at 02:16:03 UTC by Barry Rodewald
amstrad: removed ROMEN signal callback, it is actually an input to an
        expansion device.
        added the ability to map in Symbiface II rewriteable ROM for reading
        and writing.  Still not usable as an alternate source of ROMs as yet.
        remembered to add RAM size options to the CPC+
[src/emu/bus/cpc]cpc_rom.c cpc_rs232.c cpc_ssa1.c cpcexp.c cpcexp.h mface2.c symbfac2.c symbfac2.h
[src/mess/drivers]amstrad.c
[src/mess/machine]amstrad.c

trunk/src/emu/bus/cpc/symbfac2.h
r31665r31666
1010#include "emu.h"
1111#include "machine/ataintf.h"
1212#include "machine/ds128x.h"
13#include "machine/nvram.h"
1314#include "cpcexp.h"
1415
1516class cpc_symbiface2_device  : public device_t,
r31665r31666
3031   DECLARE_READ8_MEMBER(rtc_r);
3132   DECLARE_WRITE8_MEMBER(rtc_w);
3233   DECLARE_READ8_MEMBER(mouse_r);
34   DECLARE_READ8_MEMBER(rom_rewrite_r);
35   DECLARE_WRITE8_MEMBER(rom_rewrite_w);
3336   DECLARE_INPUT_CHANGED_MEMBER(mouse_change_x);
3437   DECLARE_INPUT_CHANGED_MEMBER(mouse_change_y);
3538   DECLARE_INPUT_CHANGED_MEMBER(mouse_change_buttons);
r31665r31666
4851   virtual void device_reset();
4952
5053private:
51   //cpc_expansion_slot_device *m_slot;
54   cpc_expansion_slot_device *m_slot;
5255   required_device<ata_interface_device> m_ide;
5356   required_device<ds12885_device> m_rtc;
57   required_device<nvram_device> m_nvram;
5458
5559   required_ioport m_mouse_x;
5660   required_ioport m_mouse_y;
5761   required_ioport m_mouse_buttons;
5862
63   dynamic_buffer m_rom_space;
64
5965   bool m_iohigh;
6066   UINT16 m_ide_data;
6167
6268   UINT8 m_mouse_state;
6369   UINT8 m_input_x;
6470   UINT8 m_input_y;
71
72   // stores backup pointers so that mapping can be restored
73   UINT8* m_4xxx_ptr_r;
74   UINT8* m_4xxx_ptr_w;
75   UINT8* m_6xxx_ptr_r;
76   UINT8* m_6xxx_ptr_w;
6577};
6678
6779// device type definition
trunk/src/emu/bus/cpc/cpc_ssa1.c
r31665r31666
123123   MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(DEVWRITELINE("^", cpc_expansion_slot_device, irq_w))
124124   MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w))
125125   MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romdis_w))  // ROMDIS
126   MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romen_w))  // /ROMEN
127126
128127MACHINE_CONFIG_END
129128
r31665r31666
140139   MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(DEVWRITELINE("^", cpc_expansion_slot_device, irq_w))
141140   MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w))
142141   MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romdis_w))  // ROMDIS
143   MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romen_w))  // /ROMEN
144142
145143MACHINE_CONFIG_END
146144
trunk/src/emu/bus/cpc/mface2.c
r31665r31666
2222   MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(DEVWRITELINE("^", cpc_expansion_slot_device, irq_w))
2323   MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w))
2424   MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romdis_w))  // ROMDIS
25   MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romen_w))  // /ROMEN
2625MACHINE_CONFIG_END
2726
2827DIRECT_UPDATE_MEMBER( cpc_multiface2_device::amstrad_default )
r31665r31666
6362         m_multiface_flags &= ~(MULTIFACE_VISIBLE|MULTIFACE_STOP_BUTTON_PRESSED);
6463
6564         m_romdis=0;
66         m_slot->romen_w(0);
6765
6866         /* clear op base override */
6967         machine().device("maincpu")->memory().space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(cpc_multiface2_device::amstrad_default),this));
r31665r31666
149147      m_multiface_flags |= MULTIFACE_STOP_BUTTON_PRESSED;
150148
151149      m_romdis = 1;
152      m_slot->romen_w(1);
153150
154151      /* page rom into memory */
155152      multiface_rethink_memory();
trunk/src/emu/bus/cpc/cpc_rs232.c
r31665r31666
4141   MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(DEVWRITELINE("^", cpc_expansion_slot_device, irq_w))
4242   MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w))
4343   MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romdis_w))  // ROMDIS
44   MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romen_w))  // /ROMEN
4544
4645MACHINE_CONFIG_END
4746
trunk/src/emu/bus/cpc/cpc_rom.c
r31665r31666
3232   MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(DEVWRITELINE("^", cpc_expansion_slot_device, irq_w))
3333   MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w))
3434   MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romdis_w))  // ROMDIS
35   MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romen_w))  // /ROMEN
3635
3736MACHINE_CONFIG_END
3837
trunk/src/emu/bus/cpc/cpcexp.c
r31665r31666
4545      m_out_irq_cb(*this),
4646      m_out_nmi_cb(*this),
4747      m_out_reset_cb(*this),
48      m_out_romdis_cb(*this),
49      m_out_romen_cb(*this)
48      m_out_romdis_cb(*this)
5049{
5150}
5251
r31665r31666
6766   m_out_nmi_cb.resolve_safe();
6867   m_out_reset_cb.resolve_safe();
6968   m_out_romdis_cb.resolve_safe();
70   m_out_romen_cb.resolve_safe();
7169}
7270
7371
r31665r31666
8482WRITE_LINE_MEMBER( cpc_expansion_slot_device::nmi_w ) { m_out_nmi_cb(state); }
8583WRITE_LINE_MEMBER( cpc_expansion_slot_device::reset_w ) { m_out_reset_cb(state); }
8684WRITE_LINE_MEMBER( cpc_expansion_slot_device::romdis_w ) { m_out_romdis_cb(state); }
87WRITE_LINE_MEMBER( cpc_expansion_slot_device::romen_w ) { m_out_romen_cb(state); }
trunk/src/emu/bus/cpc/symbfac2.c
r31665r31666
1010 *  Created on: 2/08/2014
1111 *
1212 *  TODO:
13 *    - expansion RAM
13 *    - expansion RAM (for now handled by -ramsize)
1414 *    - rewritable ROM
1515 *    - mouse controls still need some work
1616 */
r31665r31666
2828static MACHINE_CONFIG_FRAGMENT( cpc_symbiface2 )
2929   MCFG_ATA_INTERFACE_ADD("ide",ata_devices,"hdd",NULL,false)
3030   MCFG_DS12885_ADD("rtc")
31   MCFG_NVRAM_ADD_1FILL("nvram")
3132   // no pass-through
3233MACHINE_CONFIG_END
3334
r31665r31666
7374   device_cpc_expansion_card_interface(mconfig, *this),
7475   m_ide(*this,"ide"),
7576   m_rtc(*this,"rtc"),
77   m_nvram(*this,"nvram"),
7678   m_mouse_x(*this,"sf2_mouse_x"),
7779   m_mouse_y(*this,"sf2_mouse_y"),
7880   m_mouse_buttons(*this,"sf2_mouse_buttons")
r31665r31666
8890   device_t* cpu = machine().device("maincpu");
8991   address_space& space = cpu->memory().space(AS_IO);
9092
93   m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner());
94
9195   space.install_readwrite_handler(0xfd00,0xfd07,0,0,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_w),this));
9296   space.install_readwrite_handler(0xfd08,0xfd0f,0,0,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_w),this));
9397   space.install_read_handler(0xfd10,0xfd10,0,0,read8_delegate(FUNC(cpc_symbiface2_device::mouse_r),this));
9498   space.install_readwrite_handler(0xfd14,0xfd15,0,0,read8_delegate(FUNC(cpc_symbiface2_device::rtc_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rtc_w),this));
99   space.install_readwrite_handler(0xfd17,0xfd17,0,0,read8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_w),this));
100
101   // set up ROM space (these can be writable, when mapped to &4000, or completely disabled, allowing the built-in ROMs to be visible)
102   // 32 banks of 16kB (512kB)
103   m_rom_space.resize(32*16384);
104
105   m_nvram->set_base(m_rom_space,m_rom_space.bytes());
106   save_item(NAME(m_rom_space));
107
95108}
96109
97110//-------------------------------------------------
r31665r31666
107120}
108121
109122// IDE controller (custom)
110// #FD00 - CS1
111// #FD08 - CS0
123// #FD00-07 - CS1
124// #FD08-0F - CS0
112125READ8_MEMBER(cpc_symbiface2_device::ide_cs0_r)
113126{
114127   // data is returned in words, so it must be buffered
r31665r31666
250263   m_mouse_state = PS2_MOUSE_BUTTONS;
251264}
252265
266// #FD17 (read) - map currently selected ROM to 0x4000 for read/write
267READ8_MEMBER(cpc_symbiface2_device::rom_rewrite_r)
268{
269   UINT8 bank = get_rom_bank();
270
271   if(bank >= 32)
272      return 0xff;
273
274   m_4xxx_ptr_r = (UINT8*)machine().root_device().membank("bank3")->base();
275   m_4xxx_ptr_w = (UINT8*)machine().root_device().membank("bank11")->base();
276   m_6xxx_ptr_r = (UINT8*)machine().root_device().membank("bank4")->base();
277   m_6xxx_ptr_w = (UINT8*)machine().root_device().membank("bank12")->base();
278   machine().root_device().membank("bank3")->set_base((UINT8*)m_rom_space+(bank*16384));
279   machine().root_device().membank("bank4")->set_base((UINT8*)m_rom_space+(bank*16384+8192));
280   machine().root_device().membank("bank11")->set_base((UINT8*)m_rom_space+(bank*16384));
281   machine().root_device().membank("bank12")->set_base((UINT8*)m_rom_space+(bank*16384+8192));
282
283   return 0xff;
284}
285
286// #FD17 (write) - unmap selected ROM at 0x4000
287WRITE8_MEMBER(cpc_symbiface2_device::rom_rewrite_w)
288{
289   machine().root_device().membank("bank3")->set_base(m_4xxx_ptr_r);
290   machine().root_device().membank("bank4")->set_base(m_6xxx_ptr_r);
291   machine().root_device().membank("bank11")->set_base(m_4xxx_ptr_w);
292   machine().root_device().membank("bank12")->set_base(m_4xxx_ptr_w);
293}
trunk/src/emu/bus/cpc/cpcexp.h
r31665r31666
6262#define MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(_devcb) \
6363   devcb = &cpc_expansion_slot_device::set_out_romdis_callback(*device, DEVCB_##_devcb);
6464
65#define MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(_devcb) \
66   devcb = &cpc_expansion_slot_device::set_out_romen_callback(*device, DEVCB_##_devcb);
67
6865//**************************************************************************
6966//  TYPE DEFINITIONS
7067//**************************************************************************
r31665r31666
8178
8279   // reset
8380   virtual void cpc_reset_w() { };
81
82   void set_rom_bank(UINT8 sel) { m_rom_sel = sel; }  // tell device the currently selected ROM
83   UINT8 get_rom_bank() { return m_rom_sel; }
84
85private:
86   UINT8 m_rom_sel;  // currently selected ROM
8487};
8588
8689
r31665r31666
98101   template<class _Object> static devcb_base &set_out_nmi_callback(device_t &device, _Object object) { return downcast<cpc_expansion_slot_device &>(device).m_out_nmi_cb.set_callback(object); }
99102   template<class _Object> static devcb_base &set_out_reset_callback(device_t &device, _Object object) { return downcast<cpc_expansion_slot_device &>(device).m_out_reset_cb.set_callback(object); }
100103   template<class _Object> static devcb_base &set_out_romdis_callback(device_t &device, _Object object) { return downcast<cpc_expansion_slot_device &>(device).m_out_romdis_cb.set_callback(object); }
101   template<class _Object> static devcb_base &set_out_romen_callback(device_t &device, _Object object) { return downcast<cpc_expansion_slot_device &>(device).m_out_romen_cb.set_callback(object); }
102104
103105   DECLARE_WRITE_LINE_MEMBER( irq_w );
104106   DECLARE_WRITE_LINE_MEMBER( nmi_w );
105107   DECLARE_WRITE_LINE_MEMBER( reset_w );
106108   DECLARE_WRITE_LINE_MEMBER( romdis_w );
107   DECLARE_WRITE_LINE_MEMBER( romen_w );
108109
110   void set_rom_bank(UINT8 sel) { if(m_card) m_card->set_rom_bank(sel); }  // tell device the currently selected ROM
111
109112protected:
110113   // device-level overrides
111114   virtual void device_start();
r31665r31666
115118   devcb_write_line    m_out_nmi_cb;
116119   devcb_write_line    m_out_reset_cb;
117120   devcb_write_line    m_out_romdis_cb;
118   devcb_write_line    m_out_romen_cb;
119121
120122   device_cpc_expansion_card_interface *m_card;
123
121124};
122125
123126
trunk/src/mess/drivers/amstrad.c
r31665r31666
893893   MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(INPUTLINE("maincpu", 0))
894894   MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(INPUTLINE("maincpu", INPUT_LINE_NMI))
895895   MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE(amstrad_state, cpc_romdis))  // ROMDIS
896   MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(WRITELINE(amstrad_state, cpc_romen))  // /ROMEN
897896
898897   /* internal ram */
899898   MCFG_RAM_ADD(RAM_TAG)
r31665r31666
994993   MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(INPUTLINE("maincpu", 0))
995994   MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(INPUTLINE("maincpu", INPUT_LINE_NMI))
996995   MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE(amstrad_state, cpc_romdis))  // ROMDIS
997   MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(WRITELINE(amstrad_state, cpc_romen))  // /ROMEN
998996
999997   /* internal ram */
1000998   MCFG_RAM_ADD(RAM_TAG)
1001999   MCFG_RAM_DEFAULT_SIZE("128K")
1000   MCFG_RAM_EXTRA_OPTIONS("64K,320K,576K")
10021001MACHINE_CONFIG_END
10031002
10041003
trunk/src/mess/machine/amstrad.c
r31665r31666
11111111   amstrad_rethinkMemory();
11121112}
11131113
1114WRITE_LINE_MEMBER(amstrad_state::cpc_romen)
1115{
1116   if(state != 0)
1117      m_gate_array.mrer &= ~0x04;
1118   else
1119      m_gate_array.mrer |= 0x04;
1120   amstrad_rethinkMemory();
1121}
11221114
1123
11241115/*--------------------------
11251116  - Ram and Rom management -
11261117  --------------------------*/
r31665r31666
20272018   if ((offset & (1<<13)) == 0)
20282019   {
20292020      m_gate_array.upper_bank = data;
2021      // expansion devices know the selected ROM by monitoring I/O writes to DFxx
2022      // there are no signals related to which ROM is selected
2023      cpc_expansion_slot_device* exp_port = m_exp;
2024      while(exp_port != NULL)
2025      {
2026         device_cpc_expansion_card_interface* temp;
2027         device_t* temp_dev;
2028
2029         temp = dynamic_cast<device_cpc_expansion_card_interface*>(exp_port->get_card_device());
2030         temp_dev = dynamic_cast<device_t*>(exp_port->get_card_device());
2031         if(temp != NULL)
2032         {
2033            temp->set_rom_bank(data);
2034         }
2035         exp_port = temp_dev->subdevice<cpc_expansion_slot_device>("exp");
2036      }
2037
20302038      amstrad_setUpperRom();
20312039   }
20322040

Previous 199869 Revisions Next


© 1997-2024 The MAME Team