mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
trs80: fixed loading of CAS files
This commit is contained in:
parent
bbe3ba79aa
commit
648374e435
@ -15,42 +15,33 @@ Support for TRS80 .cas cassette images
|
||||
#define SMPHI 32767
|
||||
|
||||
|
||||
static int cas_size; // FIXME: global variable prevents mutliple instances
|
||||
static int cas_size; // FIXME: global variable prevents multiple instances
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
Generate one high-low cycle of sample data
|
||||
********************************************************************/
|
||||
static inline int trs80l2_cas_cycle(int16_t *buffer, int sample_pos, int silence, int high, int low)
|
||||
static inline int trs80l2_cas_cycle(int16_t *buffer, int sample_pos, bool bit)
|
||||
{
|
||||
int i = 0;
|
||||
uint8_t i;
|
||||
|
||||
if ( buffer )
|
||||
{
|
||||
while( i < silence )
|
||||
{
|
||||
buffer[ sample_pos + i ] = SILENCE;
|
||||
i++;
|
||||
}
|
||||
while( i < silence + high)
|
||||
{
|
||||
buffer[ sample_pos + i ] = SMPHI;
|
||||
i++;
|
||||
}
|
||||
|
||||
while( i < silence + high + low )
|
||||
{
|
||||
buffer[ sample_pos + i ] = SMPLO;
|
||||
i++;
|
||||
}
|
||||
for (i = 0; i < 32; i++)
|
||||
buffer[ sample_pos++ ] = SILENCE;
|
||||
for (i = 0; i < 6; i++)
|
||||
buffer[ sample_pos++ ] = bit ? SMPHI : SILENCE;
|
||||
for (i = 0; i < 6; i++)
|
||||
buffer[ sample_pos++ ] = bit ? SMPLO : SILENCE;
|
||||
}
|
||||
return silence + high + low;
|
||||
return 44;
|
||||
}
|
||||
|
||||
|
||||
static int trs80l2_handle_cas(int16_t *buffer, const uint8_t *casdata)
|
||||
{
|
||||
int data_pos, sample_count;
|
||||
int data_pos = 0, sample_count = 0;
|
||||
bool a5sw = false;
|
||||
|
||||
data_pos = 0;
|
||||
sample_count = 0;
|
||||
@ -58,24 +49,31 @@ static int trs80l2_handle_cas(int16_t *buffer, const uint8_t *casdata)
|
||||
while( data_pos < cas_size )
|
||||
{
|
||||
uint8_t data = casdata[data_pos];
|
||||
int i;
|
||||
|
||||
for ( i = 0; i < 8; i++ )
|
||||
for (uint8_t i = 0; i < 8; i++ )
|
||||
{
|
||||
/* Signal code */
|
||||
sample_count += trs80l2_cas_cycle( buffer, sample_count, 33, 6, 6 );
|
||||
sample_count += trs80l2_cas_cycle( buffer, sample_count, true );
|
||||
|
||||
/* Bit code */
|
||||
if ( data & 0x80 )
|
||||
sample_count += trs80l2_cas_cycle( buffer, sample_count, 33, 6, 6 );
|
||||
else
|
||||
sample_count += trs80l2_cas_cycle( buffer, sample_count, 33 + 6 + 6, 0, 0 );
|
||||
sample_count += trs80l2_cas_cycle( buffer, sample_count, data >> 7 );
|
||||
|
||||
data <<= 1;
|
||||
}
|
||||
|
||||
if (!a5sw && (casdata[data_pos] == 0xA5))
|
||||
{
|
||||
a5sw = true;
|
||||
// Need 1ms silence here while rom is busy
|
||||
sample_count += trs80l2_cas_cycle( buffer, sample_count, false );
|
||||
}
|
||||
|
||||
data_pos++;
|
||||
}
|
||||
|
||||
// Specification requires a short silence to indicate EOF
|
||||
sample_count += trs80l2_cas_cycle( buffer, sample_count, false );
|
||||
sample_count += trs80l2_cas_cycle( buffer, sample_count, false );
|
||||
return sample_count;
|
||||
}
|
||||
|
||||
|
@ -155,7 +155,6 @@ lnw80: works
|
||||
|
||||
2021-03-26 MT 07903 - most floppies no longer boot.
|
||||
Most machines have problems loading real tapes.
|
||||
Cannot load CAS tapes, but they can be loaded with trs80m3.
|
||||
|
||||
*******************************************************************************************************/
|
||||
|
||||
|
@ -12,8 +12,7 @@
|
||||
|
||||
TIMER_CALLBACK_MEMBER(trs80_state::cassette_data_callback)
|
||||
{
|
||||
/* This does all baud rates. 250 baud (trs80), and 500 baud (all others) set bit 7 of "cassette_data".
|
||||
1500 baud (trs80m3, trs80m4) is interrupt-driven and uses bit 0 of "cassette_data" */
|
||||
// This does all baud rates. 250 baud (trs80), and 500 baud (all others) set bit 7 of "cassette_data".
|
||||
|
||||
double new_val = (m_cassette->input());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user