summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/atom_tap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/atom_tap.cpp')
-rw-r--r--src/lib/formats/atom_tap.cpp39
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,