[spc1000] cassette tape motor fixed for working properly

- spc1000 ROM file update for CP/M disk working at booting time
- spc1000 cassette tape motor fixed for better working
This commit is contained in:
Miso Kim 2016-01-14 01:39:13 +09:00
parent bed2d7a5b9
commit 3248f1045d

View File

@ -15,7 +15,7 @@ NOTE: 2014-09-13: added code from someone's modified MESS driver for floppy
disk. Since it is not to our coding standards, it is disk. Since it is not to our coding standards, it is
commented out with #if 0/#endif and 3 slashes (///). commented out with #if 0/#endif and 3 slashes (///).
It is planned to be converted when time permits. The It is planned to be converted when time permits. The
author is Meeso Kim. author is Miso Kim.
Hardware details of the fdc: Intelligent device, Z80 CPU, Hardware details of the fdc: Intelligent device, Z80 CPU,
XTAL_8MHz, PPI 8255, FDC uPD765C, 2 RAM chips, 28 other XTAL_8MHz, PPI 8255, FDC uPD765C, 2 RAM chips, 28 other
@ -26,12 +26,7 @@ NOTE: 2014-09-13: added code from someone's modified MESS driver for floppy
2015-06-19: Added code for the centronics printer port 2015-06-19: Added code for the centronics printer port
IMPORTANT NOTE for tape usage: you *FIRST* press PLAY on the tape drive 2016-01-14: Casstte tape motor fixed for working perperly and ROM file changed for CP/M disk loading
(e.g. by pressing F2 in partial emulated keyboard mode) and *THEN* you
type LOAD on the BASIC prompt!
Otherwise, the system turns the tape motor ON but it does not receive any
data from tape, and it turns it OFF before the user can press PLAY.
****************************************************************************/ ****************************************************************************/
/* /*
@ -224,7 +219,7 @@ WRITE8_MEMBER( spc1000_state::cass_w )
{ {
attotime time = machine().scheduler().time(); attotime time = machine().scheduler().time();
m_cass->output(BIT(data, 0) ? -1.0 : 1.0); m_cass->output(BIT(data, 0) ? -1.0 : 1.0);
if (BIT(data, 1) && ATTOSECONDS_IN_MSEC((time - m_time).as_attoseconds()) > 500) { if (BIT(data, 1) && (time - m_time).as_attoseconds()/ATTOSECONDS_PER_MICROSECOND > 100) {
m_cass->change_state((m_cass->get_state() & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_DISABLED ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR); m_cass->change_state((m_cass->get_state() & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_DISABLED ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
m_time = time; m_time = time;
} }
@ -438,7 +433,7 @@ READ8_MEMBER( spc1000_state::porta_r )
{ {
UINT8 data = 0x3f; UINT8 data = 0x3f;
data |= (m_cass->input() > 0.0038) ? 0x80 : 0; data |= (m_cass->input() > 0.0038) ? 0x80 : 0;
data |= ((m_cass->get_state() & CASSETTE_MASK_UISTATE) != CASSETTE_STOPPED) && ((m_cass->get_state() & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED) ? 0x00 : 0x40; data |= ((m_cass->get_state() & CASSETTE_MASK_UISTATE) == CASSETTE_STOPPED || ((m_cass->get_state() & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_DISABLED)) ? 0x40 : 0;
data &= ~(m_io_joy->read() & 0x3f); data &= ~(m_io_joy->read() & 0x3f);
data &= ~((m_centronics_busy == 0)<< 5); data &= ~((m_centronics_busy == 0)<< 5);
return data; return data;
@ -506,7 +501,7 @@ MACHINE_CONFIG_END
/* ROM definition */ /* ROM definition */
ROM_START( spc1000 ) ROM_START( spc1000 )
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF) ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD("spcall.rom", 0x0000, 0x8000, CRC(19638fc9) SHA1(489f1baa7aebf3c8c660325fb1fd790d84203284)) ROM_LOAD("spcall.rom", 0x0000, 0x8000, CRC(240426be) SHA1(8eb32e147c17a6d0f947b8bb3c6844750a7b64a8))
ROM_END ROM_END
#if 0 #if 0
@ -521,4 +516,4 @@ ROM_END
/* Driver */ /* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1982, spc1000, 0, 0, spc1000, spc1000, driver_device, 0, "Samsung", "SPC-1000", MACHINE_NOT_WORKING ) COMP( 1982, spc1000, 0, 0, spc1000, spc1000, driver_device, 0, "Samsung", "SPC-1000", 0 )