Previous 199869 Revisions Next

r31425 Friday 25th July, 2014 at 22:13:04 UTC by hap
i had TMS70C46 external memory mode backwards
[src/emu/cpu/tms7000]tms7000.c tms7000.h
[src/mess/drivers]ti74.c

trunk/src/emu/cpu/tms7000/tms7000.c
r31424r31425
2323 *  - memory modes with IOCNT0, currently always running in full expansion mode
2424 *  - timer event counter mode (timer control register, bit 6)
2525 *  - TMS70x1/2 serial port and timer 3
26 *  - TMS70C46 external memory mode is via "E" bus instead of configuring IOCNT0
2627 *  - TMS70C46 clock divider (don't know which part of the memorymap is slow)
2728 *  - TMS70C46 INT3 on keypress
2829 *  - when they're needed, add TMS70Cx2, TMS7742, TMS77C82, SE70xxx
r31424r31425
118119   AM_IMPORT_FROM( tms7002_mem )
119120ADDRESS_MAP_END
120121
121static ADDRESS_MAP_START(tms70c46_io, AS_IO, 8, tms70c46_device)
122   AM_RANGE(TMS7000_PORTC, TMS7000_PORTC) AM_WRITE(e_bus_address_lo_w)
123   AM_RANGE(TMS7000_PORTD, TMS7000_PORTD) AM_WRITE(e_bus_address_hi_w)
124   AM_IMPORT_FROM( tms7000_io )
125ADDRESS_MAP_END
126
127122static ADDRESS_MAP_START(tms70c46_mem, AS_PROGRAM, 8, tms70c46_device )
128123   AM_RANGE(0x010c, 0x010c) AM_READWRITE(e_bus_data_r, e_bus_data_w)
129124//   AM_RANGE(0x010d, 0x010d) --> to outside --> DOCK-BUS available
r31424r31425
139134   : cpu_device(mconfig, TMS7000, "TMS7000", tag, owner, clock, "tms7000", __FILE__),
140135   m_program_config("program", ENDIANNESS_BIG, 8, 16, 0, ADDRESS_MAP_NAME(tms7000_mem)),
141136   m_io_config("io", ENDIANNESS_BIG, 8, 8, 0, ADDRESS_MAP_NAME(tms7000_io)),
142   m_data_config("data", ENDIANNESS_BIG, 8, 16, 0),
143137   m_info_flags(0)
144138{
145139}
r31424r31425
148142   : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source),
149143   m_program_config("program", ENDIANNESS_BIG, 8, 16, 0, internal),
150144   m_io_config("io", ENDIANNESS_BIG, 8, 8, 0, ADDRESS_MAP_NAME(tms7000_io)),
151   m_data_config("data", ENDIANNESS_BIG, 8, 16, 0),
152145   m_info_flags(info_flags)
153146{
154147}
r31424r31425
206199tms70c46_device::tms70c46_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
207200   : tms7000_device(mconfig, TMS70C46, "TMS70C46", tag, owner, clock, ADDRESS_MAP_NAME(tms70c46_mem), TMS7000_CHIP_IS_CMOS, "tms70c46", __FILE__)
208201{
209   m_io_config = address_space_config("io", ENDIANNESS_BIG, 8, 8, 0, ADDRESS_MAP_NAME(tms70c46_io));
210202}
211203
212204
r31424r31425
220212   m_program = &space(AS_PROGRAM);
221213   m_direct = &m_program->direct();
222214   m_io = &space(AS_IO);
223   m_data = &space(AS_DATA);
224215
225216   m_icountptr = &m_icount;
226217
r31424r31425
906897void tms70c46_device::device_start()
907898{
908899   // init/zerofill
909   m_e_bus_address = 0;
910900   m_control = 0;
911901   
912902   // register for savestates
913   save_item(NAME(m_e_bus_address));
914903   save_item(NAME(m_control));
915904
916905   tms7000_device::device_start();
917906}
918907
908void tms70c46_device::device_reset()
909{
910   m_control = 0;
911   m_io->write_byte(TMS7000_PORTE, 0xff);
912   
913   tms7000_device::device_reset();
914}
915
919916READ8_MEMBER(tms70c46_device::control_r)
920917{
921918   return m_control;
r31424r31425
924921WRITE8_MEMBER(tms70c46_device::control_w)
925922{
926923   // d5: enable external databus
924   if (~m_control & data & 0x20)
925      m_io->write_byte(TMS7000_PORTE, 0xff); // go into high impedance
926   
927927   // d4: enable clock divider when accessing slow memory
928928   // d0-d3: clock divider
929929   m_control = data;
trunk/src/emu/cpu/tms7000/tms7000.h
r31424r31425
8888   virtual void execute_set_input(int extline, int state);
8989
9090   // device_memory_interface overrides
91   virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : ( (spacenum == AS_DATA) ? &m_data_config : NULL ) ); }
91   virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : NULL ); }
9292
9393   // device_state_interface overrides
9494   void state_string_export(const device_state_entry &entry, astring &string);
r31424r31425
102102
103103   address_space_config m_program_config;
104104   address_space_config m_io_config;
105   address_space_config m_data_config; // TMS70C46 only, the "E" bus
106105
107106   UINT32 m_info_flags;
108107
109108   address_space *m_program;
110109   direct_read_data *m_direct;
111110   address_space *m_io;
112   address_space *m_data;
113111   int m_icount;
114112
115113   bool m_irq_state[2];
r31424r31425
316314   DECLARE_READ8_MEMBER(control_r);
317315   DECLARE_WRITE8_MEMBER(control_w);
318316
319   // extra 64KB external memory bus, or extra i/o port
320   DECLARE_WRITE8_MEMBER(e_bus_address_lo_w) { m_e_bus_address = (m_e_bus_address & 0xff00) | data; }
321   DECLARE_WRITE8_MEMBER(e_bus_address_hi_w) { m_e_bus_address = (m_e_bus_address & 0x00ff) | data << 8; }
322   DECLARE_READ8_MEMBER(e_bus_data_r) { return (space.debugger_access()) ? 0 : ((m_control & 0x20) ? m_data->read_byte(m_e_bus_address) : m_io->read_byte(TMS7000_PORTE)); }
323   DECLARE_WRITE8_MEMBER(e_bus_data_w) { if (m_control & 0x20) m_data->write_byte(m_e_bus_address, data); else m_io->write_byte(TMS7000_PORTE, data); }
317   // access I/O port E if databus is disabled
318   DECLARE_READ8_MEMBER(e_bus_data_r) { return (space.debugger_access()) ? 0xff : ((m_control & 0x20) ? 0xff : m_io->read_byte(TMS7000_PORTE)); }
319   DECLARE_WRITE8_MEMBER(e_bus_data_w) { if (~m_control & 0x20) m_io->write_byte(TMS7000_PORTE, data); }
324320
325321protected:
326322   // device-level overrides
327323   virtual void device_start();
324   virtual void device_reset();
328325
329326private:
330   UINT16 m_e_bus_address;
331327   UINT8 m_control;
332328};
333329
trunk/src/mess/drivers/ti74.c
r31424r31425
285285   AM_RANGE(TMS7000_PORTE, TMS7000_PORTE) AM_WRITE(keyboard_w) AM_READNOP
286286ADDRESS_MAP_END
287287
288static ADDRESS_MAP_START( e_map, AS_DATA, 8, ti74_state )
289ADDRESS_MAP_END
290288
291289
292
293290/***************************************************************************
294291
295292  Inputs
r31424r31425
490487
491488   // zerofill
492489   m_key_select = 0;
493   m_power = 0;
490   m_power = 1;
494491
495492   // register for savestates
496493   save_item(NAME(m_key_select));
r31424r31425
503500   MCFG_CPU_ADD("maincpu", TMS70C46, XTAL_4MHz)
504501   MCFG_CPU_PROGRAM_MAP(main_map)
505502   MCFG_CPU_IO_MAP(main_io_map)
506   MCFG_CPU_DATA_MAP(e_map)
507503
508504   MCFG_NVRAM_ADD_0FILL("6264.ic3")
509505
r31424r31425
539535   MCFG_CPU_ADD("maincpu", TMS70C46, XTAL_4MHz)
540536   MCFG_CPU_PROGRAM_MAP(main_map)
541537   MCFG_CPU_IO_MAP(main_io_map)
542   MCFG_CPU_DATA_MAP(e_map)
543538
544539   MCFG_NVRAM_ADD_0FILL("6264.ic3")
545540

Previous 199869 Revisions Next


© 1997-2024 The MAME Team