From b5e08ae5e83f3c58948e82b80fb9b349504a9ef7 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Mon, 6 Apr 2020 01:37:05 +1000 Subject: [PATCH] H8: added support for H8T tapes. --- scripts/src/formats.lua | 12 +++ scripts/target/mame/mess.lua | 1 + src/lib/formats/h8_cas.cpp | 149 +++++++++++++++++++++++++++++++++++ src/lib/formats/h8_cas.h | 19 +++++ src/mame/drivers/h8.cpp | 2 + 5 files changed, 183 insertions(+) create mode 100644 src/lib/formats/h8_cas.cpp create mode 100644 src/lib/formats/h8_cas.h diff --git a/scripts/src/formats.lua b/scripts/src/formats.lua index c234f37808b..f168dbe81ca 100644 --- a/scripts/src/formats.lua +++ b/scripts/src/formats.lua @@ -929,6 +929,18 @@ if (FORMATS["GUAB_DSK"]~=null or _OPTIONS["with-tools"]) then } end +-------------------------------------------------- +-- +--@src/lib/formats/h8_cas.h,FORMATS["H8_CAS"] = true +-------------------------------------------------- + +if (FORMATS["H8_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/h8_cas.cpp", + MAME_DIR.. "src/lib/formats/h8_cas.h", + } +end + -------------------------------------------------- -- --@src/lib/formats/hector_minidisc.h,FORMATS["HECTOR_MINIDISC"] = true diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 63389306a8c..ac68c67a185 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -988,6 +988,7 @@ FORMATS["FMTOWNS_DSK"] = true FORMATS["FSD_DSK"] = true FORMATS["G64_DSK"] = true FORMATS["GTP_CAS"] = true +FORMATS["H8_CAS"] = true FORMATS["HECTOR_MINIDISC"] = true FORMATS["HECT_DSK"] = true FORMATS["HECT_TAP"] = true diff --git a/src/lib/formats/h8_cas.cpp b/src/lib/formats/h8_cas.cpp new file mode 100644 index 00000000000..ec92a94b10f --- /dev/null +++ b/src/lib/formats/h8_cas.cpp @@ -0,0 +1,149 @@ +// license:BSD-3-Clause +// copyright-holders:Robbbert +/******************************************************************** + +Support for Heathkit H8 H8T cassette images + + +Standard Kansas City format (300 baud) + +We output a leader, followed by the contents of the H8T file. + +********************************************************************/ + +#include + +#include "h8_cas.h" + +#define WAVEENTRY_LOW -32768 +#define WAVEENTRY_HIGH 32767 + +#define H8_WAV_FREQUENCY 9600 + +// image size +static int h8_image_size; + +static int h8_put_samples(int16_t *buffer, int sample_pos, int count, int level) +{ + if (buffer) + { + for (int i=0; i> i) & 1); + + // stop bits + for (i = 0; i<2; i++) + samples += h8_output_bit (buffer, sample_pos + samples, 1); + + return samples; +} + +static int h8_handle_cassette(int16_t *buffer, const uint8_t *bytes) +{ + uint32_t sample_count = 0; + uint32_t byte_count = 0; + uint32_t i; + + + // leader + for (i=0; i<2000; i++) + sample_count += h8_output_bit(buffer, sample_count, 1); + + // data + for (i=byte_count; iset_formats(h8_cassette_formats); m_cass->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); m_cass->add_route(ALL_OUTPUTS, "mono", 0.05); m_cass->set_interface("h8_cass");