diff options
Diffstat (limited to 'src/lib/formats/atom_tap.cpp')
-rw-r--r-- | src/lib/formats/atom_tap.cpp | 39 |
1 files changed, 12 insertions, 27 deletions
diff --git a/src/lib/formats/atom_tap.cpp b/src/lib/formats/atom_tap.cpp index 881433ef1a8..db29798d51d 100644 --- a/src/lib/formats/atom_tap.cpp +++ b/src/lib/formats/atom_tap.cpp @@ -10,7 +10,7 @@ /* - http://beebwiki.jonripley.com/Acorn_cassette_format#Atom + http://beebwiki.mdfs.net/Acorn_cassette_format#Atom The Atom supports the System series format (as a 'nameless file') and its own format. The data consists of files separated by carrier breaks and the appropriate leaders and trailers, and further subdivided into blocks separated by inter-block gaps. @@ -21,7 +21,7 @@ One end of file name marker byte (&0D). Block flag, one byte. Block number, two bytes, high byte first. - Data block length ? 1, one byte. + Data block length - 1, one byte. Execution address, two bytes, high byte first. Load address, two bytes, high byte first. Data, 0 to 256 bytes. @@ -40,11 +40,10 @@ */ -#include <assert.h> - #include "atom_tap.h" #include "csw_cas.h" #include "uef_cas.h" + /*************************************************************************** PARAMETERS ***************************************************************************/ @@ -59,31 +58,20 @@ CassetteModulation atom_tap_modulation -------------------------------------------------*/ -static const struct CassetteModulation atom_tap_modulation = +static const cassette_image::Modulation atom_tap_modulation = { - CASSETTE_MODULATION_SINEWAVE, + cassette_image::MODULATION_SINEWAVE, 1200.0 - 300, 1200.0, 1200.0 + 300, 2400.0 - 600, 2400.0, 2400.0 + 600 }; /*------------------------------------------------- - cassette_image_read_uint8 - read tape data --------------------------------------------------*/ - -static uint8_t cassette_image_read_uint8(cassette_image *cassette, uint64_t offset) -{ - uint8_t data; - cassette_image_read(cassette, &data, offset, 1); - return data; -} - -/*------------------------------------------------- atom_tap_identify - identify cassette -------------------------------------------------*/ -static cassette_image::error atom_tap_identify(cassette_image *cassette, struct CassetteOptions *opts) +static cassette_image::error atom_tap_identify(cassette_image *cassette, cassette_image::Options *opts) { - return cassette_modulation_identify( cassette, &atom_tap_modulation, opts); + return cassette->modulation_identify(atom_tap_modulation, opts); } /*------------------------------------------------- @@ -92,7 +80,7 @@ static cassette_image::error atom_tap_identify(cassette_image *cassette, struct #define MODULATE(_value) \ for (int i = 0; i < (_value ? 8 : 4); i++) { \ - err = cassette_put_modulated_data_bit(cassette, 0, time_index, _value, &atom_tap_modulation, &time_displacement);\ + err = cassette->put_modulated_data_bit(0, time_index, _value, atom_tap_modulation, &time_displacement);\ if (err != cassette_image::error::SUCCESS) return err;\ time_index += time_displacement;\ } @@ -102,14 +90,13 @@ static cassette_image::error atom_tap_identify(cassette_image *cassette, struct static cassette_image::error atom_tap_load(cassette_image *cassette) { cassette_image::error err; - uint64_t image_size = cassette_image_size(cassette); - uint64_t image_pos = 0; + uint64_t image_size = cassette->image_size(); double time_index = 0.0; double time_displacement; - while (image_pos < image_size) + for (uint64_t image_pos = 0; image_pos < image_size; image_pos++) { - uint8_t data = cassette_image_read_uint8(cassette, image_pos); + uint8_t data = cassette->image_read_byte(image_pos); /* start bit */ MODULATE(0); @@ -123,8 +110,6 @@ static cassette_image::error atom_tap_load(cassette_image *cassette) /* stop bits */ MODULATE(1); MODULATE(1); - - image_pos++; } return cassette_image::error::SUCCESS; @@ -134,7 +119,7 @@ static cassette_image::error atom_tap_load(cassette_image *cassette) CassetteFormat atom_tap_cassette_format -------------------------------------------------*/ -const struct CassetteFormat atom_tap_format = +const cassette_image::Format atom_tap_format = { "tap", atom_tap_identify, |