Previous 15994 Revisions Next

r9929 Wednesday 5th January, 2011 at 16:37:35 UTC by Curt Coder
[EXP85] Modernized and added terminal device.
[src/mess/drivers]exp85.c
[src/mess/includes]exp85.h

src/mess/includes/exp85.h
r9928r9929
66#define I8155_TAG      "u106"
77#define I8355_TAG      "u105"
88#define CASSETTE_TAG   "cassette"
9#define TERMINAL_TAG   "terminal"
910#define SPEAKER_TAG      "speaker"
1011
1112class exp85_state : public driver_device
1213{
1314public:
1415   exp85_state(running_machine &machine, const driver_device_config_base &config)
15      : driver_device(machine, config) { }
16      : driver_device(machine, config),
17        m_maincpu(*this, I8085A_TAG),
18        m_terminal(*this, TERMINAL_TAG),
19        m_cassette(*this, CASSETTE_TAG),
20        m_speaker(*this, SPEAKER_TAG)
21   { }
1622
23   required_device<cpu_device> m_maincpu;
24   required_device<device_t> m_terminal;
25   required_device<device_t> m_cassette;
26   required_device<device_t> m_speaker;
27
28   virtual void machine_start();
29
30   DECLARE_READ8_MEMBER( i8355_a_r );
31   DECLARE_WRITE8_MEMBER( i8355_a_w );
32   DECLARE_READ_LINE_MEMBER( sid_r );
33   DECLARE_WRITE_LINE_MEMBER( sod_w );
34
1735   /* cassette state */
18   int tape_control;
19
20   /* devices */
21   device_t *cassette;
22   device_t *speaker;
36   int m_tape_control;
2337};
2438
2539#endif
src/mess/drivers/exp85.c
r9928r9929
1010
1111    TODO:
1212   
13    - needs a terminal, or a dump of the hexadecimal keyboard monitor ROM
14    - serial input/output at SID/SOD pins
13    - dump of the hexadecimal keyboard monitor ROM
1514    - disable ROM mirror after boot
1615    - RAM expansions
1716
1817*/
1918
19#define ADDRESS_MAP_MODERN
20
2021#include "emu.h"
2122#include "includes/exp85.h"
2223#include "cpu/i8085/i8085.h"
2324#include "imagedev/cassette.h"
2425#include "machine/i8155.h"
2526#include "machine/i8355.h"
27#include "machine/terminal.h"
2628#include "sound/speaker.h"
2729#include "machine/ram.h"
2830
2931/* Memory Maps */
3032
31static ADDRESS_MAP_START( exp85_mem, ADDRESS_SPACE_PROGRAM, 8 )
33static ADDRESS_MAP_START( exp85_mem, ADDRESS_SPACE_PROGRAM, 8, exp85_state )
3234   ADDRESS_MAP_UNMAP_HIGH
3335   AM_RANGE(0x0000, 0x07ff) AM_ROMBANK("bank1")
3436   AM_RANGE(0xc000, 0xdfff) AM_ROM
r9928r9929
3638   AM_RANGE(0xf800, 0xf8ff) AM_RAM
3739ADDRESS_MAP_END
3840
39static ADDRESS_MAP_START( exp85_io, ADDRESS_SPACE_IO, 8 )
41static ADDRESS_MAP_START( exp85_io, ADDRESS_SPACE_IO, 8, exp85_state )
4042   ADDRESS_MAP_UNMAP_HIGH
41   AM_RANGE(0xf0, 0xf3) AM_DEVREADWRITE_MODERN(I8355_TAG, i8355_device, io_r, io_w)
42   AM_RANGE(0xf8, 0xfd) AM_DEVREADWRITE_MODERN(I8155_TAG, i8155_device, io_r, io_w)
43   AM_RANGE(0xf0, 0xf3) AM_DEVREADWRITE(I8355_TAG, i8355_device, io_r, io_w)
44   AM_RANGE(0xf8, 0xfd) AM_DEVREADWRITE(I8155_TAG, i8155_device, io_r, io_w)
4345//  AM_RANGE(0xfe, 0xff) AM_DEVREADWRITE(I8279_TAG, i8279_r, i8279_w)
4446ADDRESS_MAP_END
4547
r9928r9929
5658}
5759
5860static INPUT_PORTS_START( exp85 )
61   PORT_INCLUDE(generic_terminal)
62
5963   PORT_START("SPECIAL")
6064   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_F1) PORT_CHANGED(trigger_reset, 0)
6165   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("I") PORT_CODE(KEYCODE_F2) PORT_CHANGED(trigger_rst75, 0)
6266INPUT_PORTS_END
6367
64/* Video */
65
66static VIDEO_START( exp85 )
67{
68}
69
70static VIDEO_UPDATE( exp85 )
71{
72    return 0;
73}
74
7568/* 8155 Interface */
7669
7770static I8155_INTERFACE( i8155_intf )
r9928r9929
8780
8881/* 8355 Interface */
8982
90static READ8_DEVICE_HANDLER( i8355_a_r )
83READ8_MEMBER( exp85_state::i8355_a_r )
9184{
9285   /*
9386
r9928r9929
107100   return 0x02;
108101}
109102
110static WRITE8_DEVICE_HANDLER( i8355_a_w )
103WRITE8_MEMBER( exp85_state::i8355_a_w )
111104{
112105   /*
113106
r9928r9929
124117
125118    */
126119
127   exp85_state *state = device->machine->driver_data<exp85_state>();
128
129120   /* tape control */
130   state->tape_control = BIT(data, 0);
121   m_tape_control = BIT(data, 0);
131122
132123   /* speaker output */
133   speaker_level_w(state->speaker, !BIT(data, 7));
124   speaker_level_w(m_speaker, !BIT(data, 7));
134125}
135126
136127static I8355_INTERFACE( i8355_intf )
137128{
138   DEVCB_HANDLER(i8355_a_r),   /* port A read */
139   DEVCB_HANDLER(i8355_a_w),   /* port A write */
140   DEVCB_NULL,               /* port B read */
141   DEVCB_NULL,               /* port B write */
129   DEVCB_DRIVER_MEMBER(exp85_state, i8355_a_r),
130   DEVCB_DRIVER_MEMBER(exp85_state, i8355_a_w),
131   DEVCB_NULL,
132   DEVCB_NULL
142133};
143134
144135/* I8085A Interface */
145136
146static WRITE_LINE_DEVICE_HANDLER( exp85_sod_w )
137READ_LINE_MEMBER( exp85_state::sid_r )
147138{
148   exp85_state *driver_state = device->machine->driver_data<exp85_state>();
149
150   cassette_output(driver_state->cassette, state ? -1.0 : +1.0);
151}
152
153static READ_LINE_DEVICE_HANDLER( exp85_sid_r )
154{
155   exp85_state *driver_state = device->machine->driver_data<exp85_state>();
156
157139   int data = 1;
158140
159   if (driver_state->tape_control)
141   if (m_tape_control)
160142   {
161      data = cassette_input(driver_state->cassette) > +1.0;
143      data = cassette_input(m_cassette) > +1.0;
162144   }
145   else
146   {
147      data = terminal_serial_r(m_terminal);
148   }
163149
164150   return data;
165151}
166152
153WRITE_LINE_MEMBER( exp85_state::sod_w )
154{
155   if (m_tape_control)
156   {
157      cassette_output(m_cassette, state ? -1.0 : +1.0);
158   }
159   else
160   {
161      terminal_serial_w(m_terminal, state);
162   }
163}
164
167165static I8085_CONFIG( exp85_i8085_config )
168166{
169   DEVCB_NULL,               /* STATUS changed callback */
170   DEVCB_NULL,               /* INTE changed callback */
171   DEVCB_LINE(exp85_sid_r),   /* SID changed callback (I8085A only) */
172   DEVCB_LINE(exp85_sod_w)      /* SOD changed callback (I8085A only) */
167   DEVCB_NULL,
168   DEVCB_NULL,
169   DEVCB_DRIVER_LINE_MEMBER(exp85_state, sid_r),
170   DEVCB_DRIVER_LINE_MEMBER(exp85_state, sod_w)
173171};
174172
173/* Terminal Interface */
174
175static GENERIC_TERMINAL_INTERFACE( terminal_intf )
176{
177   DEVCB_NULL
178};
179
175180/* Machine Initialization */
176181
177static MACHINE_START( exp85 )
182void exp85_state::machine_start()
178183{
179   exp85_state *state = machine->driver_data<exp85_state>();
180   address_space *program = cputag_get_address_space(machine, I8085A_TAG, ADDRESS_SPACE_PROGRAM);
184   address_space *program = cpu_get_address_space(m_maincpu, ADDRESS_SPACE_PROGRAM);
181185
182186   /* setup memory banking */
183187   memory_install_read_bank(program, 0x0000, 0x07ff, 0, 0, "bank1");
r9928r9929
185189   memory_configure_bank(machine, "bank1", 0, 1, machine->region(I8085A_TAG)->base() + 0xf000, 0);
186190   memory_configure_bank(machine, "bank1", 1, 1, machine->region(I8085A_TAG)->base(), 0);
187191   memory_set_bank(machine, "bank1", 0);
188
189   /* find devices */
190   state->speaker = machine->device(SPEAKER_TAG);
191   state->cassette = machine->device(CASSETTE_TAG);
192192}
193193
194194/* Machine Driver */
r9928r9929
208208    MCFG_CPU_IO_MAP(exp85_io)
209209   MCFG_CPU_CONFIG(exp85_i8085_config)
210210
211    MCFG_MACHINE_START(exp85)
212
213211    /* video hardware */
214    MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
215    MCFG_SCREEN_REFRESH_RATE(50)
216    MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
217    MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
218    MCFG_SCREEN_SIZE(640, 480)
219    MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
212   MCFG_FRAGMENT_ADD( generic_terminal )
220213
221   MCFG_PALETTE_LENGTH(2)
222    MCFG_PALETTE_INIT(black_and_white)
223
224   MCFG_VIDEO_START(exp85)
225    MCFG_VIDEO_UPDATE(exp85)
226
227214   /* sound hardware */
228215   MCFG_SPEAKER_STANDARD_MONO("mono")
229216   MCFG_SOUND_ADD(SPEAKER_TAG, SPEAKER_SOUND, 0)
r9928r9929
232219   /* devices */
233220   MCFG_I8155_ADD(I8155_TAG, XTAL_6_144MHz/2, i8155_intf)
234221   MCFG_I8355_ADD(I8355_TAG, XTAL_6_144MHz/2, i8355_intf)
235
236222   MCFG_CASSETTE_ADD(CASSETTE_TAG, exp85_cassette_config)
223   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
237224
238225   /* internal ram */
239226   MCFG_RAM_ADD(RAM_TAG)
r9928r9929
251238   ROM_LOAD( "d000.bin", 0xd000, 0x0800, CRC(c10c4a22) SHA1(30588ba0b27a775d85f8c581ad54400c8521225d) )
252239   ROM_LOAD( "d800.bin", 0xd800, 0x0800, CRC(dfa43ef4) SHA1(56a7e7a64928bdd1d5f0519023d1594cacef49b3) )
253240   ROM_SYSTEM_BIOS( 0, "eia", "EIA Terminal" )
254   ROMX_LOAD( "eia.u105", 0xf000, 0x0800, CRC(1a99d0d9) SHA1(57b6d48e71257bc4ef2d3dddc9b30edf6c1db766), ROM_BIOS(1) )
241   ROMX_LOAD( "ex 85.u105", 0xf000, 0x0800, CRC(1a99d0d9) SHA1(57b6d48e71257bc4ef2d3dddc9b30edf6c1db766), ROM_BIOS(1) )
255242   ROM_SYSTEM_BIOS( 1, "hex", "Hex Keyboard" )
256   ROMX_LOAD( "hex.u105", 0xf000, 0x0800, NO_DUMP, ROM_BIOS(2) )
243   ROMX_LOAD( "1kbd.u105", 0xf000, 0x0800, NO_DUMP, ROM_BIOS(2) )
257244
258245   ROM_REGION( 0x800, I8355_TAG, ROMREGION_ERASE00 )
259246/*  ROM_DEFAULT_BIOS("terminal")

Previous 15994 Revisions Next


© 1998-2018 The MESS Team