trunk/src/mess/includes/softbox.h
r23296 | r23297 | |
15 | 15 | #include "machine/serial.h" |
16 | 16 | |
17 | 17 | #define Z80_TAG "z80" |
18 | | #define I8251_TAG "i8251" |
| 18 | #define I8251_TAG "ic15" |
19 | 19 | #define I8255_0_TAG "ic17" |
20 | 20 | #define I8255_1_TAG "ic16" |
21 | 21 | #define COM8116_TAG "ic14" |
r23296 | r23297 | |
26 | 26 | public: |
27 | 27 | softbox_state(const machine_config &mconfig, device_type type, const char *tag) |
28 | 28 | : driver_device(mconfig, type, tag), |
29 | | m_maincpu(*this, Z80_TAG), |
30 | | m_usart(*this, I8251_TAG), |
31 | 29 | m_dbrg(*this, COM8116_TAG), |
32 | | m_ieee(*this, IEEE488_TAG), |
33 | | m_corvus_active(false) |
| 30 | m_ieee(*this, IEEE488_TAG) |
34 | 31 | { } |
35 | 32 | |
36 | | required_device<cpu_device> m_maincpu; |
37 | | required_device<i8251_device> m_usart; |
38 | 33 | required_device<com8116_device> m_dbrg; |
39 | 34 | required_device<ieee488_device> m_ieee; |
40 | 35 | |
r23296 | r23297 | |
50 | 45 | DECLARE_READ8_MEMBER( ppi1_pc_r ); |
51 | 46 | DECLARE_WRITE8_MEMBER( ppi1_pc_w ); |
52 | 47 | |
53 | | DECLARE_WRITE_LINE_MEMBER( fr_w ); |
54 | | DECLARE_WRITE_LINE_MEMBER( ft_w ); |
55 | | |
56 | 48 | enum |
57 | 49 | { |
58 | 50 | LED_A, |
59 | 51 | LED_B, |
60 | 52 | LED_READY |
61 | 53 | }; |
62 | | |
63 | | bool m_corvus_active; |
64 | 54 | }; |
65 | 55 | |
66 | 56 | #endif |
trunk/src/mess/drivers/softbox.c
r23296 | r23297 | |
198 | 198 | PC2 |
199 | 199 | PC3 |
200 | 200 | PC4 Corvus READY |
201 | | PC5 Corvus ACTIVE |
| 201 | PC5 Corvus DIRC |
202 | 202 | PC6 |
203 | 203 | PC7 |
204 | 204 | |
205 | 205 | */ |
206 | 206 | |
| 207 | UINT8 status = corvus_hdc_status_r(space, 0); |
207 | 208 | UINT8 data = 0; |
208 | 209 | |
209 | | data |= (corvus_hdc_status_r(space, 0) & CONTROLLER_BUSY) ? 0x10 : 0; |
210 | | data |= m_corvus_active ? 0x20 : 0; |
| 210 | data |= (status & CONTROLLER_BUSY) ? 0 : 0x10; |
| 211 | data |= (status & CONTROLLER_DIRECTION) ? 0 : 0x20; |
211 | 212 | |
212 | 213 | return data; |
213 | 214 | } |
r23296 | r23297 | |
249 | 250 | // COM8116_INTERFACE( dbrg_intf ) |
250 | 251 | //------------------------------------------------- |
251 | 252 | |
252 | | WRITE_LINE_MEMBER( softbox_state::fr_w ) |
253 | | { |
254 | | m_usart->receive_clock(); |
255 | | } |
256 | | |
257 | | WRITE_LINE_MEMBER( softbox_state::ft_w ) |
258 | | { |
259 | | m_usart->transmit_clock(); |
260 | | } |
261 | | |
262 | 253 | static COM8116_INTERFACE( dbrg_intf ) |
263 | 254 | { |
264 | 255 | DEVCB_NULL, // fX/4 |
265 | | DEVCB_DRIVER_LINE_MEMBER(softbox_state, fr_w), |
266 | | DEVCB_DRIVER_LINE_MEMBER(softbox_state, ft_w), |
| 256 | DEVCB_DEVICE_LINE_MEMBER(I8251_TAG, i8251_device, rxc_w), |
| 257 | DEVCB_DEVICE_LINE_MEMBER(I8251_TAG, i8251_device, txc_w), |
267 | 258 | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
268 | 259 | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
269 | 260 | }; |
r23296 | r23297 | |
299 | 290 | |
300 | 291 | void softbox_state::machine_start() |
301 | 292 | { |
302 | | if (corvus_hdc_init(machine()) == TRUE) |
303 | | { |
304 | | m_corvus_active = true; |
305 | | } |
| 293 | corvus_hdc_init(machine()); |
306 | 294 | } |
307 | 295 | |
308 | 296 | |
trunk/src/mess/machine/softbox.c
r23296 | r23297 | |
16 | 16 | //************************************************************************** |
17 | 17 | |
18 | 18 | #define Z80_TAG "z80" |
19 | | #define I8251_TAG "i8251" |
| 19 | #define I8251_TAG "ic15" |
20 | 20 | #define I8255_0_TAG "ic17" |
21 | 21 | #define I8255_1_TAG "ic16" |
22 | 22 | #define COM8116_TAG "ic14" |
r23296 | r23297 | |
199 | 199 | PC2 |
200 | 200 | PC3 |
201 | 201 | PC4 Corvus READY |
202 | | PC5 Corvus ACTIVE |
| 202 | PC5 Corvus DIRC |
203 | 203 | PC6 |
204 | 204 | PC7 |
205 | 205 | |
206 | 206 | */ |
207 | 207 | |
| 208 | UINT8 status = corvus_hdc_status_r(space, 0); |
208 | 209 | UINT8 data = 0; |
209 | 210 | |
210 | | data |= (corvus_hdc_status_r(space, 0) & CONTROLLER_BUSY) ? 0x10 : 0; |
211 | | data |= m_corvus_active ? 0x20 : 0; |
| 211 | data |= (status & CONTROLLER_BUSY) ? 0 : 0x10; |
| 212 | data |= (status & CONTROLLER_DIRECTION) ? 0 : 0x20; |
212 | 213 | |
213 | 214 | return data; |
214 | 215 | } |
r23296 | r23297 | |
250 | 251 | // COM8116_INTERFACE( dbrg_intf ) |
251 | 252 | //------------------------------------------------- |
252 | 253 | |
253 | | WRITE_LINE_MEMBER( softbox_device::fr_w ) |
254 | | { |
255 | | m_usart->receive_clock(); |
256 | | } |
257 | | |
258 | | WRITE_LINE_MEMBER( softbox_device::ft_w ) |
259 | | { |
260 | | m_usart->transmit_clock(); |
261 | | } |
262 | | |
263 | 254 | static COM8116_INTERFACE( dbrg_intf ) |
264 | 255 | { |
265 | 256 | DEVCB_NULL, // fX/4 |
266 | | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, softbox_device, fr_w), |
267 | | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, softbox_device, ft_w), |
| 257 | DEVCB_DEVICE_LINE_MEMBER(I8251_TAG, i8251_device, rxc_w), |
| 258 | DEVCB_DEVICE_LINE_MEMBER(I8251_TAG, i8251_device, txc_w), |
268 | 259 | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
269 | 260 | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
270 | 261 | }; |
r23296 | r23297 | |
354 | 345 | softbox_device::softbox_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
355 | 346 | : device_t(mconfig, SOFTBOX, "PET SoftBox", tag, owner, clock, "pet_softbox", __FILE__), |
356 | 347 | device_ieee488_interface(mconfig, *this), |
357 | | m_maincpu(*this, Z80_TAG), |
358 | | m_usart(*this, I8251_TAG), |
359 | | m_dbrg(*this, COM8116_TAG), |
360 | | m_corvus_active(false) |
| 348 | m_dbrg(*this, COM8116_TAG) |
361 | 349 | { |
362 | 350 | } |
363 | 351 | |
r23296 | r23297 | |
368 | 356 | |
369 | 357 | void softbox_device::device_start() |
370 | 358 | { |
371 | | if (corvus_hdc_init(machine()) == TRUE) |
372 | | { |
373 | | m_corvus_active = true; |
374 | | } |
| 359 | corvus_hdc_init(machine()); |
375 | 360 | } |
376 | 361 | |
377 | 362 | |
378 | 363 | //------------------------------------------------- |
379 | | // device_reset - device-specific reset |
380 | | //------------------------------------------------- |
381 | | |
382 | | void softbox_device::device_reset() |
383 | | { |
384 | | } |
385 | | |
386 | | |
387 | | //------------------------------------------------- |
388 | 364 | // dbrg_w - baud rate selection |
389 | 365 | //------------------------------------------------- |
390 | 366 | |
trunk/src/mess/machine/corvushd.c
r23296 | r23297 | |
1306 | 1306 | default: |
1307 | 1307 | c->xmit_bytes = 1; |
1308 | 1308 | c->buffer.single_byte_response.status = STAT_FAULT | STAT_FATAL_ERR; |
1309 | | logerror("corvus_hdc_data_w: Unimplemented Prep command, returning FATAL FAULT status!\n"); |
| 1309 | logerror("corvus_hdc_data_w: Unimplemented Prep command %02x, returning FATAL FAULT status!\n", c->buffer.command.code); |
1310 | 1310 | } |
1311 | 1311 | } |
1312 | 1312 | if (VERBOSE_RESPONSES) |
r23296 | r23297 | |
1328 | 1328 | c->buffer.single_byte_response.status = |
1329 | 1329 | STAT_FATAL_ERR | STAT_ILL_CMD_OP_CODE; // Respond with an Illegal Op Code |
1330 | 1330 | |
1331 | | logerror("corvus_hdc_data_w: Illegal Command, status: 0x%2.2x\n", c->buffer.single_byte_response.status); |
| 1331 | logerror("corvus_hdc_data_w: Illegal Command %02x, status: 0x%2.2x\n", c->buffer.single_byte_response.status, c->buffer.command.code); |
1332 | 1332 | } |
1333 | 1333 | // |
1334 | 1334 | // Command execution complete, free up the controller |