diff options
author | 2020-10-19 20:07:01 +0100 | |
---|---|---|
committer | 2020-10-19 21:14:54 +0100 | |
commit | af16e6fbe99f4fc8822e65d3ab8413252e711cac (patch) | |
tree | 0b4072ce33a315e6c2ae5e960633b6c90a45361f | |
parent | d13d9d7669dd145cdcff4a822a94f0fb940ef4b3 (diff) |
aquarius: Added support for .CAQ cassette images.
- Select 20K RAM as default.
-rw-r--r-- | scripts/src/formats.lua | 12 | ||||
-rw-r--r-- | scripts/target/mame/mess.lua | 1 | ||||
-rw-r--r-- | src/lib/formats/aquarius_caq.cpp | 107 | ||||
-rw-r--r-- | src/lib/formats/aquarius_caq.h | 19 | ||||
-rw-r--r-- | src/mame/drivers/aquarius.cpp | 18 |
5 files changed, 149 insertions, 8 deletions
diff --git a/scripts/src/formats.lua b/scripts/src/formats.lua index 815ecabe73d..a3decee1833 100644 --- a/scripts/src/formats.lua +++ b/scripts/src/formats.lua @@ -307,6 +307,18 @@ end -------------------------------------------------- -- +--@src/lib/formats/aquarius_caq.h,FORMATS["AQUARIUS_CAQ"] = true +-------------------------------------------------- + +if (FORMATS["AQUARIUS_CAQ"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/aquarius_caq.cpp", + MAME_DIR.. "src/lib/formats/aquarius_caq.h", + } +end + +-------------------------------------------------- +-- --@src/lib/formats/asst128_dsk.h,FORMATS["ASST128_DSK"] = true -------------------------------------------------- diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 6ccc3ddc536..a9d9c2ffa74 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -980,6 +980,7 @@ FORMATS["APOLLO_DSK"] = true FORMATS["APPLIX_DSK"] = true FORMATS["APRIDISK"] = true FORMATS["AP_DSK35"] = true +FORMATS["AQUARIUS_CAQ"] = true FORMATS["ASST128_DSK"] = true FORMATS["ASTROCADE_WAV"] = true FORMATS["ATARI_DSK"] = true diff --git a/src/lib/formats/aquarius_caq.cpp b/src/lib/formats/aquarius_caq.cpp new file mode 100644 index 00000000000..aecb883aabf --- /dev/null +++ b/src/lib/formats/aquarius_caq.cpp @@ -0,0 +1,107 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************* + + formats/aquarius_caq.cpp + + Cassette code for Aquarius .CAQ files + +*********************************************************************/ + +#include "aquarius_caq.h" + +#include "coretmpl.h" // BIT + +#include <cassert> + + +/*------------------------------------------------- + CassetteModulation aquarius_caq_modulation +-------------------------------------------------*/ + +static const cassette_image::Modulation aquarius_caq_modulation = +{ + cassette_image::MODULATION_SINEWAVE, + 900.0 - 300, 900.0, 900.0 + 300, + 1800.0 - 600, 1800.0, 1800.0 + 600 + + +}; + +/*------------------------------------------------- + aquarius_caq_identify - identify cassette +-------------------------------------------------*/ + +static cassette_image::error aquarius_caq_identify(cassette_image *cassette, cassette_image::Options *opts) +{ + return cassette->modulation_identify(aquarius_caq_modulation, opts); +} + +/*------------------------------------------------- + aquarius_caq_load - load cassette +-------------------------------------------------*/ + +#define MODULATE(_value) \ + for (int i = 0; i < 2; i++) { \ + err = cassette->put_modulated_data_bit(0, time_index, _value, aquarius_caq_modulation, &time_displacement); \ + if (err != cassette_image::error::SUCCESS) return err; \ + time_index += time_displacement; \ + } + +static cassette_image::error aquarius_caq_load(cassette_image *cassette) +{ + cassette_image::error err; + uint64_t image_size = cassette->image_size(); + uint64_t image_pos = 0; + double time_index = 0.0; + double time_displacement; + uint8_t data; + + /* silence */ + err = cassette->put_sample(0, time_index, 0.5, 0); + if (err != cassette_image::error::SUCCESS) return err; + time_index += 0.5; + + while (image_pos < image_size) + { + cassette->image_read(&data, image_pos, 1); + + /* start bit */ + MODULATE(0); + + /* data bits */ + for (int bit = 7; bit >= 0; bit--) + { + MODULATE(util::BIT(data, bit)); + } + + /* stop bits */ + MODULATE(1); + MODULATE(1); + + image_pos++; + } + + /* silence */ + err = cassette->put_sample(0, time_index, 0.5, 0); + if (err != cassette_image::error::SUCCESS) return err; + time_index += 0.5; + + return cassette_image::error::SUCCESS; +} + +/*------------------------------------------------- + CassetteFormat aquarius_caq_cassette_format +-------------------------------------------------*/ + +const cassette_image::Format aquarius_caq_format = +{ + "caq", + aquarius_caq_identify, + aquarius_caq_load, + nullptr +}; + +CASSETTE_FORMATLIST_START( aquarius_cassette_formats ) + CASSETTE_FORMAT(aquarius_caq_format) +CASSETTE_FORMATLIST_END diff --git a/src/lib/formats/aquarius_caq.h b/src/lib/formats/aquarius_caq.h new file mode 100644 index 00000000000..158b1f12a5d --- /dev/null +++ b/src/lib/formats/aquarius_caq.h @@ -0,0 +1,19 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************* + + formats/aquarius_caq.h + + Cassette code for Aquarius .CAQ files + +*********************************************************************/ +#ifndef MAME_FORMATS_AQUARIUS_CAQ_H +#define MAME_FORMATS_AQUARIUS_CAQ_H + +#pragma once + +#include "cassimg.h" + +CASSETTE_FORMATLIST_EXTERN(aquarius_cassette_formats); + +#endif // MAME_FORMATS_AQUARIUS_CAQ_H diff --git a/src/mame/drivers/aquarius.cpp b/src/mame/drivers/aquarius.cpp index b1d9abb6d3b..fe2bbf745c4 100644 --- a/src/mame/drivers/aquarius.cpp +++ b/src/mame/drivers/aquarius.cpp @@ -10,7 +10,6 @@ - slot interface for cartridges - hand controllers - scramble RAM also - - CAQ tape support - memory mapper - proper video timings - PAL mode @@ -43,7 +42,7 @@ X-6026 : Roll of paper for the printer ***************************************************************************/ #define XTAL1 8866000 -#define XTAL2 XTAL(7'159'090) +#define XTAL2 7.15909_MHz_XTAL /*************************************************************************** @@ -362,7 +361,7 @@ GFXDECODE_END void aquarius_state::aquarius(machine_config &config) { /* basic machine hardware */ - Z80(config, m_maincpu, XTAL(3'579'545)); // ??? + Z80(config, m_maincpu, XTAL2 / 2); m_maincpu->set_addrmap(AS_PROGRAM, &aquarius_state::aquarius_mem); m_maincpu->set_addrmap(AS_IO, &aquarius_state::aquarius_io); m_maincpu->set_vblank_int("screen", FUNC(aquarius_state::irq0_line_hold)); @@ -384,6 +383,7 @@ void aquarius_state::aquarius(machine_config &config) SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); + /* mini expander */ ay8910_device &ay8910(AY8910(config, "ay8910", XTAL(3'579'545)/2)); // ??? AY-3-8914 ay8910.port_a_read_callback().set_ioport("RIGHT"); ay8910.port_b_read_callback().set_ioport("LEFT"); @@ -393,12 +393,14 @@ void aquarius_state::aquarius(machine_config &config) CASSETTE(config, m_cassette); m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05); + m_cassette->set_formats(aquarius_cassette_formats); + m_cassette->set_interface("aquarius_cass"); /* cartridge */ GENERIC_CARTSLOT(config, m_cart, generic_linear_slot, "aquarius_cart"); /* internal ram */ - RAM(config, RAM_TAG).set_default_size("4K").set_extra_options("8K,20K,36K"); + RAM(config, RAM_TAG).set_default_size("20K").set_extra_options("4K,8K,36K"); /* software lists */ SOFTWARE_LIST(config, "cart_list").set_original("aquarius"); @@ -414,10 +416,10 @@ ROM_START( aquarius ) /* basic rom */ ROM_DEFAULT_BIOS("rev2") - ROM_SYSTEM_BIOS(0, "rev1", "Revision 1") - ROMX_LOAD("aq1.u2", 0x0000, 0x2000, NO_DUMP, ROM_BIOS(0)) - ROM_SYSTEM_BIOS(1, "rev2", "Revision 2") - ROMX_LOAD("aq2.u2", 0x0000, 0x2000, CRC(a2d15bcf) SHA1(ca6ef55e9ead41453efbf5062d6a60285e9661a6), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(0, "rev2", "Revision 2") + ROMX_LOAD("aq2.u2", 0x0000, 0x2000, CRC(a2d15bcf) SHA1(ca6ef55e9ead41453efbf5062d6a60285e9661a6), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "rev1", "Revision 1") + ROMX_LOAD("aq1.u2", 0x0000, 0x2000, NO_DUMP, ROM_BIOS(1)) /* charrom */ ROM_REGION(0x800, "gfx1", 0) |