trunk/src/mess/machine/bbc.c
r22563 | r22564 | |
1292 | 1292 | |
1293 | 1293 | void bbc_state::MC6850_Receive_Clock(int new_clock) |
1294 | 1294 | { |
1295 | | m_rxd = new_clock; |
| 1295 | m_rxd_cass = new_clock; |
1296 | 1296 | |
1297 | 1297 | // |
1298 | 1298 | // Somehow the "serial processor" generates 16 clock signals towards |
r22563 | r22564 | |
1317 | 1317 | //this is to long to recive anything so reset the serial IC. This is a hack, this should be done as a timer in the MC6850 code. |
1318 | 1318 | logerror ("Cassette length %d\n",m_wav_len); |
1319 | 1319 | m_nr_high_tones = 0; |
1320 | | m_dcd = 0; |
| 1320 | m_dcd_cass = 0; |
1321 | 1321 | m_len0=0; |
1322 | 1322 | m_len1=0; |
1323 | 1323 | m_len2=0; |
r22563 | r22564 | |
1339 | 1339 | /* Clock a 0 onto the serial line */ |
1340 | 1340 | logerror("Serial value 0\n"); |
1341 | 1341 | m_nr_high_tones = 0; |
1342 | | m_dcd = 0; |
| 1342 | m_dcd_cass = 0; |
1343 | 1343 | MC6850_Receive_Clock(0); |
1344 | 1344 | m_len0=0; |
1345 | 1345 | m_len1=0; |
r22563 | r22564 | |
1354 | 1354 | m_nr_high_tones++; |
1355 | 1355 | if ( m_nr_high_tones > 100 ) |
1356 | 1356 | { |
1357 | | m_dcd = 1; |
| 1357 | m_dcd_cass = 1; |
1358 | 1358 | } |
1359 | 1359 | MC6850_Receive_Clock(1); |
1360 | 1360 | m_len0=0; |
r22563 | r22564 | |
1987 | 1987 | DRIVER_INIT_MEMBER(bbc_state,bbc) |
1988 | 1988 | { |
1989 | 1989 | m_Master=0; |
1990 | | m_rxd = 0; |
1991 | | m_dcd = 0; |
1992 | | m_txd = 0; |
1993 | | m_cts = 1; |
| 1990 | m_rxd_cass = 0; |
| 1991 | m_rxd_rs423 = 0; |
| 1992 | m_dcd_cass = 0; |
| 1993 | m_cts_rs423 = 1; |
1994 | 1994 | m_nr_high_tones = 0; |
1995 | 1995 | m_serproc_data = 0; |
1996 | 1996 | m_tape_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bbc_state::bbc_tape_timer_cb),this)); |
r22563 | r22564 | |
1999 | 1999 | DRIVER_INIT_MEMBER(bbc_state,bbcm) |
2000 | 2000 | { |
2001 | 2001 | m_Master=1; |
2002 | | m_rxd = 0; |
2003 | | m_dcd = 0; |
2004 | | m_txd = 0; |
2005 | | m_cts = 1; |
| 2002 | m_rxd_cass = 0; |
| 2003 | m_rxd_rs423 = 0; |
| 2004 | m_dcd_cass = 0; |
| 2005 | m_cts_rs423 = 1; |
2006 | 2006 | m_nr_high_tones = 0; |
2007 | 2007 | m_serproc_data = 0; |
2008 | 2008 | m_tape_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bbc_state::bbc_tape_timer_cb),this)); |
trunk/src/mess/includes/bbc.h
r22563 | r22564 | |
161 | 161 | int m_len3; |
162 | 162 | int m_mc6850_clock; |
163 | 163 | UINT8 m_serproc_data; |
164 | | int m_dcd; |
165 | | int m_rxd; |
166 | | int m_txd; |
167 | | int m_cts; |
| 164 | int m_dcd_cass; |
| 165 | int m_rxd_cass; |
| 166 | int m_rxd_rs423; |
| 167 | int m_cts_rs423; |
168 | 168 | UINT32 m_nr_high_tones; |
169 | 169 | emu_timer *m_tape_timer; |
170 | 170 | |
r22563 | r22564 | |
327 | 327 | DECLARE_WRITE_LINE_MEMBER(bbc_wd177x_intrq_w); |
328 | 328 | DECLARE_WRITE_LINE_MEMBER(bbc_wd177x_drq_w); |
329 | 329 | DECLARE_WRITE_LINE_MEMBER(bbc_vsync); |
330 | | DECLARE_READ_LINE_MEMBER(bbc_rxd_r) { return m_rxd; } |
331 | | DECLARE_READ_LINE_MEMBER(bbc_dcd_r) { return m_dcd; } |
332 | | DECLARE_READ_LINE_MEMBER(bbc_cts_r) { return m_cts; } |
| 330 | DECLARE_READ_LINE_MEMBER(bbc_rxd_r) { return ( m_serproc_data & 0x40 ) ? m_rxd_rs423 : m_rxd_cass; } |
| 331 | DECLARE_READ_LINE_MEMBER(bbc_dcd_r) { return ( m_serproc_data & 0x40 ) ? 0 : m_dcd_cass; } |
| 332 | DECLARE_READ_LINE_MEMBER(bbc_cts_r) { return ( m_serproc_data & 0x40 ) ? m_cts_rs423 : 1; } |
333 | 333 | |
334 | 334 | DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcb_cart ); |
335 | 335 | |