summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/tvc_cas.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/tvc_cas.cpp')
-rw-r--r--src/lib/formats/tvc_cas.cpp54
1 files changed, 27 insertions, 27 deletions
diff --git a/src/lib/formats/tvc_cas.cpp b/src/lib/formats/tvc_cas.cpp
index 9177491278c..2abde7b9a9b 100644
--- a/src/lib/formats/tvc_cas.cpp
+++ b/src/lib/formats/tvc_cas.cpp
@@ -8,10 +8,11 @@
********************************************************************/
-#include <assert.h>
-
#include "tvc_cas.h"
+#include "multibyte.h"
+
+
#define TVC64_BIT0_FREQ 1812
#define TVC64_BIT1_FREQ 2577
#define TVC64_PRE_FREQ 2128
@@ -24,23 +25,27 @@
static void tvc64_emit_level(cassette_image *cass, double &time, int freq, int level)
{
double period = 1.0 / freq;
- cassette_put_sample(cass, 0, time, period, level * WAVE_AMPLITUDE);
+ cass->put_sample(0, time, period, level * WAVE_AMPLITUDE);
time += period;
}
-static cassette_image::error tvc64_output_byte(cassette_image *cass, double &time, uint8_t byte)
+static cassette_image::error tvc64_output_bytes(cassette_image *cass, double &time, const uint8_t *buffer, int size)
{
- for (int i=0; i<8; i++)
+ while (size-- > 0)
{
- if ((byte>>i) & 0x01)
+ uint8_t byte = *buffer++;
+ for (int i=0; i<8; i++)
{
- tvc64_emit_level(cass, time, TVC64_BIT1_FREQ*2, +1);
- tvc64_emit_level(cass, time, TVC64_BIT1_FREQ*2, -1);
- }
- else
- {
- tvc64_emit_level(cass, time, TVC64_BIT0_FREQ*2, +1);
- tvc64_emit_level(cass, time, TVC64_BIT0_FREQ*2, -1);
+ if ((byte>>i) & 0x01)
+ {
+ tvc64_emit_level(cass, time, TVC64_BIT1_FREQ*2, +1);
+ tvc64_emit_level(cass, time, TVC64_BIT1_FREQ*2, -1);
+ }
+ else
+ {
+ tvc64_emit_level(cass, time, TVC64_BIT0_FREQ*2, +1);
+ tvc64_emit_level(cass, time, TVC64_BIT0_FREQ*2, -1);
+ }
}
}
@@ -89,8 +94,8 @@ static cassette_image::error tvc64_cassette_load(cassette_image *cassette)
double time = 0.0;
uint8_t header[TVC64_HEADER_BYTES];
- cassette_image_read(cassette, header, 0, TVC64_HEADER_BYTES);
- uint16_t cas_size = (header[0x83]<<8) | header[0x82];
+ cassette->image_read(header, 0, TVC64_HEADER_BYTES);
+ uint16_t cas_size = get_u16le(&header[0x82]);
// tape header
tmp_buff[buff_idx++] = 0x00;
@@ -132,8 +137,7 @@ static cassette_image::error tvc64_cassette_load(cassette_image *cassette)
tvc64_emit_level(cassette, time, TVC64_SYNC_FREQ*2, -1);
// header data
- for (int i=0; i<buff_idx; i++)
- tvc64_output_byte(cassette, time, tmp_buff[i]);
+ tvc64_output_bytes(cassette, time, tmp_buff, buff_idx);
// 5 post data cycles
tvc64_output_predata(cassette, time, 5);
@@ -171,8 +175,8 @@ static cassette_image::error tvc64_cassette_load(cassette_image *cassette)
// sector data
int sector_size = (i == sector_num) ? (cas_size % 256) : 256;
- for (int z=0; z < sector_size; z++)
- cassette_image_read(cassette, &tmp_buff[buff_idx++], TVC64_HEADER_BYTES + i*256 + z, 1);
+ cassette->image_read(&tmp_buff[buff_idx], TVC64_HEADER_BYTES + i*256, sector_size);
+ buff_idx += sector_size;
if (i == sector_num || ((i+1) == sector_num && (cas_size % 256 ) == 0))
tmp_buff[buff_idx++] = 0xff; // last sector
@@ -185,8 +189,7 @@ static cassette_image::error tvc64_cassette_load(cassette_image *cassette)
tmp_buff[buff_idx++] = (crc>>8) & 0xff;
// output the sector
- for (int z=0; z<buff_idx; z++)
- tvc64_output_byte(cassette, time, tmp_buff[z]);
+ tvc64_output_bytes(cassette, time, tmp_buff, buff_idx);
buff_idx = 0;
}
@@ -200,12 +203,9 @@ static cassette_image::error tvc64_cassette_load(cassette_image *cassette)
return cassette_image::error::SUCCESS;
}
-static cassette_image::error tvc64_cassette_identify(cassette_image *cassette, struct CassetteOptions *opts)
+static cassette_image::error tvc64_cassette_identify(cassette_image *cassette, cassette_image::Options *opts)
{
- uint8_t byte;
- cassette_image_read(cassette, &byte, 0, 1);
-
- if (byte == 0x11)
+ if (cassette->image_read_byte(0) == 0x11)
{
opts->bits_per_sample = 16;
opts->channels = 1;
@@ -216,7 +216,7 @@ static cassette_image::error tvc64_cassette_identify(cassette_image *cassette, s
return cassette_image::error::INVALID_IMAGE;
}
-static const struct CassetteFormat tvc64_cassette_image_format =
+static const cassette_image::Format tvc64_cassette_image_format =
{
"cas",
tvc64_cassette_identify,