diff options
Diffstat (limited to 'src/lib/formats/tvc_cas.cpp')
-rw-r--r-- | src/lib/formats/tvc_cas.cpp | 54 |
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, |