summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/zx81_p.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/zx81_p.cpp')
-rw-r--r--src/lib/formats/zx81_p.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/lib/formats/zx81_p.cpp b/src/lib/formats/zx81_p.cpp
index 515f5b78581..13f923d1578 100644
--- a/src/lib/formats/zx81_p.cpp
+++ b/src/lib/formats/zx81_p.cpp
@@ -32,6 +32,8 @@ medium transfer rate is approx. 307 bps (38 bytes/sec) for files that contain
*****************************************************************************/
#include "zx81_p.h"
+
+#include "imageutl.h"
#include "tzx_cas.h"
@@ -114,9 +116,9 @@ static int16_t* zx81_output_byte(int16_t *p, uint8_t byte)
return p;
}
-static uint16_t zx81_cassette_calculate_number_of_1(const uint8_t *bytes, uint16_t length)
+static unsigned int zx81_cassette_calculate_number_of_1(const uint8_t *bytes, uint16_t length)
{
- uint16_t number_of_1 = 0;
+ unsigned int number_of_1 = 0;
int i,j;
for (i=0; i<length; i++)
@@ -173,7 +175,7 @@ static int zx81_cassette_calculate_size_in_samples(const uint8_t *bytes, int len
return (number_of_0_data+number_of_0_name)*ZX81_LOW_BIT_LENGTH + (number_of_1_data+number_of_1_name)*ZX81_HIGH_BIT_LENGTH + ZX81_PILOT_LENGTH;
}
-static int zx81_cassette_fill_wave(int16_t *buffer, int length, const uint8_t *bytes, int)
+static int zx81_cassette_fill_wave(int16_t *buffer, int length, const uint8_t *bytes, int data_available)
{
int16_t * p = buffer;
int i;
@@ -185,6 +187,12 @@ static int zx81_cassette_fill_wave(int16_t *buffer, int length, const uint8_t *b
for (i=0; i<zx_file_name_length; i++)
p = zx81_output_byte(p, zx_file_name[i]);
+ if (data_available < real_data_length)
+ {
+ osd_printf_warning("Block requests %d bytes, but only %d available\n", real_data_length, data_available);
+ real_data_length = data_available;
+ }
+
/* data */
for (i=0; i<real_data_length; i++)
p = zx81_output_byte(p, bytes[i]);
@@ -250,7 +258,7 @@ static int zx80_cassette_calculate_size_in_samples(const uint8_t *bytes, int len
return number_of_0_data*ZX81_LOW_BIT_LENGTH + number_of_1_data*ZX81_HIGH_BIT_LENGTH + ZX81_PILOT_LENGTH;
}
-static int zx80_cassette_fill_wave(int16_t *buffer, int length, const uint8_t *bytes, int)
+static int zx80_cassette_fill_wave(int16_t *buffer, int length, const uint8_t *bytes, int data_available)
{
int16_t * p = buffer;
int i;
@@ -258,6 +266,12 @@ static int zx80_cassette_fill_wave(int16_t *buffer, int length, const uint8_t *b
/* pilot */
p = zx81_emit_level (p, ZX81_PILOT_LENGTH, WAVEENTRY_ZERO);
+ if (data_available < real_data_length)
+ {
+ osd_printf_warning("Block requests %d bytes, but only %d available\n", real_data_length, data_available);
+ real_data_length = data_available;
+ }
+
/* data */
for (i=0; i<real_data_length; i++)
p = zx81_output_byte(p, bytes[i]);