Previous 199869 Revisions Next

r23488 Thursday 6th June, 2013 at 11:13:25 UTC by Robbbert
(MESS) Altos5: added terminal back (z80dart isn't quite ready yet)
[src/mess/drivers]altos5.c

trunk/src/mess/drivers/altos5.c
r23487r23488
1111#include "machine/z80pio.h"
1212#include "machine/z80dart.h"
1313#include "machine/z80dma.h"
14#include "machine/serial.h"
15#include "machine/terminal.h"
1416
1517
1618class altos5_state : public driver_device
r23487r23488
2123      m_maincpu(*this, "maincpu"),
2224      m_pio0(*this, "z80pio_0"),
2325      m_pio1(*this, "z80pio_1"),
24      m_sio1(*this, "z80sio_1"),
25      m_sio2(*this, "z80sio_2"),
26      m_ctc(*this, "z80ctc")
26      m_dart(*this, "z80dart"),
27      m_sio (*this, "z80sio"),
28      m_ctc (*this, "z80ctc"),
29      m_terminal(*this, TERMINAL_TAG)
2730   { }
2831
2932   DECLARE_READ8_MEMBER(memory_read_byte);
3033   DECLARE_WRITE8_MEMBER(memory_write_byte);
3134   DECLARE_READ8_MEMBER(io_read_byte);
3235   DECLARE_WRITE8_MEMBER(io_write_byte);
36   DECLARE_READ8_MEMBER(port08_r);
37   DECLARE_READ8_MEMBER(port09_r);
38   DECLARE_WRITE8_MEMBER(port08_w);
39   DECLARE_WRITE8_MEMBER(port09_w);
3340   DECLARE_DRIVER_INIT(altos5);
41   DECLARE_WRITE8_MEMBER(kbd_put);
42   DECLARE_READ8_MEMBER(port2e_r);
43   DECLARE_READ8_MEMBER(port2f_r);
44   UINT8 m_term_data;
45   UINT8 m_port08;
46   UINT8 m_port09;
3447   virtual void machine_reset();
3548   required_device<cpu_device> m_maincpu;
3649   required_device<z80pio_device> m_pio0;
3750   required_device<z80pio_device> m_pio1;
38   required_device<z80sio0_device> m_sio1;
39   required_device<z80sio0_device> m_sio2;
51   required_device<z80dart_device> m_dart;
52   optional_device<z80dart_device> m_sio;
4053   required_device<z80ctc_device> m_ctc;
54   required_device<generic_terminal_device> m_terminal;
4155};
4256
4357static ADDRESS_MAP_START(altos5_mem, AS_PROGRAM, 8, altos5_state)
r23487r23488
5468   AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("z80ctc", z80ctc_device, read, write)
5569   AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("z80pio_1", z80pio_device, read, write)
5670   //AM_RANGE(0x14, 0x17) AM_WRITE(romoff_w)
57   AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE("z80sio_1", z80sio0_device, cd_ba_r, cd_ba_w)
58   AM_RANGE(0x2c, 0x2f) AM_DEVREADWRITE("z80sio_2", z80sio0_device, cd_ba_r, cd_ba_w)
71   AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE("z80dart", z80dart_device, ba_cd_r, ba_cd_w)
72   //AM_RANGE(0x20, 0x23) // Hard drive
73   AM_RANGE(0x2c, 0x2d) AM_NOP
74   AM_RANGE(0x2e, 0x2e) AM_READ(port2e_r) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write)
75   AM_RANGE(0x2f, 0x2f) AM_READ(port2f_r) AM_WRITENOP
5976ADDRESS_MAP_END
6077
6178/* Input ports */
r23487r23488
7390   { "z80pio_0" },
7491   { "z80pio_1" },
7592   { "z80ctc" },
76   { "z80sio_1" },
77   { "z80sio_2" },
93   { "z80dart" },
94//   { "z80sio" },
7895   { NULL }
7996};
8097
98/*
99d0: L = a HD is present
100d1: L = a 2nd hard drive is present
101d2: unused configuration input (must be H to skip HD boot)
102d3: selected floppy is single(L) or double sided(H)
103d7: IRQ from FDC
104*/
105READ8_MEMBER( altos5_state::port08_r )
106{
107   return m_port08 | 0x87;
108}
109
110/*
111d0: HD IRQ
112*/
113READ8_MEMBER( altos5_state::port09_r )
114{
115   return m_port09 | 0x01;
116}
117
118/*
119d4: DDEN (H = double density
120d5: DS (H = drive 2)
121d6: SS (H = side 2)
122*/
123WRITE8_MEMBER( altos5_state::port08_w )
124{
125   m_port08 = data;
126}
127
128/*
129d1, 2: Memory Map template selection (0 = diag; 1 = oasis; 2 = mp/m)
130d3, 4: CPU bank select
131d5:    H = Write protect of common area
132d6, 7: DMA bank select
133*/
134WRITE8_MEMBER( altos5_state::port09_w )
135{
136   m_port09 = data;
137}
138
81139READ8_MEMBER(altos5_state::memory_read_byte)
82140{
83141   address_space& prog_space = m_maincpu->space(AS_PROGRAM);
r23487r23488
113171   DEVCB_DRIVER_MEMBER(altos5_state, io_write_byte)
114172};
115173
174// baud rate generator and RTC. All inputs are 2MHz.
116175static Z80CTC_INTERFACE( ctc_intf )
117176{
118177   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), // interrupt callback
119   DEVCB_NULL,         /* ZC/TO0 callback - SIO channel A clock */
120   DEVCB_NULL,         /* ZC/TO1 callback - SIO channel B clock */
121   DEVCB_NULL,//DRIVER_LINE_MEMBER(altos5_state, pcm_82_w) /* ZC/TO2 callback - speaker */
178   DEVCB_NULL,         /* ZC/TO0 callback - SIO Ch B */
179   DEVCB_NULL,         /* ZC/TO1 callback - Z80DART Ch A, SIO Ch A */
180   DEVCB_NULL,         /* ZC/TO2 callback - Z80DART Ch B */
122181};
123182
124static Z80PIO_INTERFACE( pio0_intf ) // all pins go to expansion socket
183// system functions
184static Z80PIO_INTERFACE( pio0_intf )
125185{
126186   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), // interrupt callback
127   DEVCB_NULL,         /* read port A */
128   DEVCB_NULL,         /* write port A */
187   DEVCB_DRIVER_MEMBER(altos5_state, port08_r),         /* read port A */
188   DEVCB_DRIVER_MEMBER(altos5_state, port08_w),         /* write port A */
129189   DEVCB_NULL,         /* portA ready active callback */
130   DEVCB_NULL,         /* read port B */
131   DEVCB_NULL,         /* write port B */
190   DEVCB_DRIVER_MEMBER(altos5_state, port09_r),         /* read port B */
191   DEVCB_DRIVER_MEMBER(altos5_state, port09_w),         /* write port B */
132192   DEVCB_NULL          /* portB ready active callback */
133193};
134194
195// parallel port
135196static Z80PIO_INTERFACE( pio1_intf )
136197{
137198   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), // interrupt callback
138   DEVCB_NULL,//DEVICE_MEMBER(K7659_KEYBOARD_TAG, k7659_keyboard_device, read),           /* read port A */
199   DEVCB_NULL,         /* read port A */
139200   DEVCB_NULL,         /* write port A */
140201   DEVCB_NULL,         /* portA ready active callback */
141   DEVCB_NULL,//DRIVER_MEMBER(altos5_state, pcm_85_r),           /* read port B */
142   DEVCB_NULL,//DRIVER_MEMBER(altos5_state, pcm_85_w),           /* write port B */
202   DEVCB_NULL,         /* read port B */
203   DEVCB_NULL,         /* write port B */
143204   DEVCB_NULL          /* portB ready active callback */
144205};
145206
146static Z80SIO_INTERFACE( sio1_intf )
207// serial printer and console#3
208static Z80DART_INTERFACE( dart_intf )
147209{
148210   0, 0, 0, 0,
149211
212   // console#3
150213   DEVCB_NULL,
151214   DEVCB_NULL,
152215   DEVCB_NULL,
r23487r23488
154217   DEVCB_NULL,
155218   DEVCB_NULL,
156219
220   // printer
157221   DEVCB_NULL,
158222   DEVCB_NULL,
159223   DEVCB_NULL,
r23487r23488
161225   DEVCB_NULL,
162226   DEVCB_NULL,
163227
164   DEVCB_NULL
165};
166
167static Z80SIO_INTERFACE( sio2_intf )
168{
169   0, 0, 0, 0,
170
228   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0),
171229   DEVCB_NULL,
172230   DEVCB_NULL,
173231   DEVCB_NULL,
174   DEVCB_NULL,
175   DEVCB_NULL,
176   DEVCB_NULL,
177
178   DEVCB_NULL,
179   DEVCB_NULL,
180   DEVCB_NULL,
181   DEVCB_NULL,
182   DEVCB_NULL,
183   DEVCB_NULL,
184
185232   DEVCB_NULL
186233};
187234
235
188236DRIVER_INIT_MEMBER( altos5_state, altos5 )
189237{
190238   UINT8 *RAM = memregion("maincpu")->base();
191239   membank("bank1")->configure_entries(0, 2, &RAM[0], 0x10000);
192240}
193241
242READ8_MEMBER( altos5_state::port2e_r )
243{
244   UINT8 ret = m_term_data;
245   m_term_data = 0;
246   return ret;
247}
248
249READ8_MEMBER( altos5_state::port2f_r )
250{
251   return (m_term_data) ? 13 : 12;
252}
253
254WRITE8_MEMBER( altos5_state::kbd_put )
255{
256   m_term_data = data;
257}
258
259static GENERIC_TERMINAL_INTERFACE( terminal_intf )
260{
261   DEVCB_DRIVER_MEMBER(altos5_state, kbd_put)
262};
263
194264static MACHINE_CONFIG_START( altos5, altos5_state )
195265   /* basic machine hardware */
196266   MCFG_CPU_ADD("maincpu", Z80, XTAL_8MHz / 2)
r23487r23488
199269   MCFG_CPU_CONFIG(daisy_chain_intf)
200270
201271   /* video hardware */
272   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
202273
203274   /* Devices */
204   MCFG_Z80DMA_ADD( "z80dma", XTAL_8MHz / 2, dma_intf)
275   MCFG_Z80DMA_ADD( "z80dma",   XTAL_8MHz / 2, dma_intf)
205276   MCFG_Z80PIO_ADD( "z80pio_0", XTAL_8MHz / 2, pio0_intf )
206277   MCFG_Z80PIO_ADD( "z80pio_1", XTAL_8MHz / 2, pio1_intf )
207   MCFG_Z80SIO0_ADD("z80sio_1", XTAL_8MHz / 2, sio1_intf )
208   MCFG_Z80SIO0_ADD("z80sio_2", XTAL_8MHz / 2, sio2_intf )
209   MCFG_Z80CTC_ADD( "z80ctc", XTAL_8MHz / 2, ctc_intf )
278   MCFG_Z80CTC_ADD( "z80ctc",   XTAL_8MHz / 2, ctc_intf )
279   MCFG_Z80DART_ADD("z80dart",  XTAL_8MHz / 2, dart_intf )
210280MACHINE_CONFIG_END
211281
212282
r23487r23488
217287   ROM_FILL(0x10054, 2, 0) // temp until banking sorted out
218288   ROM_FILL(0x10344, 3, 0) // kill self test
219289
220   ROM_REGION( 0x200, "user1", 0 )
221   ROM_LOAD("82s141.bin", 0x0000, 0x0200, CRC(35c8078c) SHA1(dce24374bfcc5d23959e2c03485d82a119c0c3c9)) // looks like a keyboard matrix
290   ROM_REGION( 0x200, "proms", 0 )
291   ROM_LOAD("82s141.bin", 0x0000, 0x0200, CRC(35c8078c) SHA1(dce24374bfcc5d23959e2c03485d82a119c0c3c9)) // banking control
222292ROM_END
223293
224294/* Driver */
225295
226296/*   YEAR  NAME    PARENT  COMPAT   MACHINE  INPUT   CLASS           INIT    COMPANY    FULLNAME       FLAGS */
227297COMP(1982, altos5, 0,      0,       altos5,  altos5, altos5_state,  altos5, "Altos", "Altos 5-15", GAME_NOT_WORKING | GAME_NO_SOUND)
298
299
300
301
302#if 0
303/****************** UNUSED SERIAL CODE ************************/
304
305   //AM_RANGE(0x2c, 0x2f) AM_DEVREADWRITE("z80sio", z80dart_device, ba_cd_r, ba_cd_w)
306
307static Z80SIO_INTERFACE( sio_intf )
308{
309   9600, 9600, 153600, 153600, // rxa, txa, rxb, txb clocks (from CTC)
310
311   // console#2
312   DEVCB_NULL, // ChA in data
313   DEVCB_NULL, // out data
314   DEVCB_NULL, // DTR
315   DEVCB_NULL, // RTS
316   DEVCB_NULL, // WRDY
317   DEVCB_NULL, // SYNC
318
319   // console#1
320   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
321   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
322   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, dtr_w),
323   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
324   DEVCB_NULL,
325   DEVCB_NULL,
326
327   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0),
328   DEVCB_NULL, // unused DRQ pins
329   DEVCB_NULL,
330   DEVCB_NULL,
331   DEVCB_NULL
332};
333
334static const rs232_port_interface rs232_intf =
335{
336   // all outputs
337   DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("z80sio", z80dart_device, rxcb_w), // data
338   DEVCB_NULL, // DCD
339   DEVCB_NULL, // DSR
340   DEVCB_NULL, // RI
341   DEVCB_NULL //DEVCB_DEVICE_LINE_MEMBER("z80sio", z80dart_device, ctsb_w) // CTS
342};
343
344
345   //MCFG_Z80SIO0_ADD("z80sio",   XTAL_8MHz / 2, sio_intf )
346   //MCFG_RS232_PORT_ADD("rs232", rs232_intf, default_rs232_devices, "serial_terminal")
347
348
349#endif
350

Previous 199869 Revisions Next


© 1997-2024 The MAME Team