mirror of
https://github.com/holub/mame
synced 2025-04-16 05:24:54 +03:00
aquarius: Added support for .CAQ cassette images.
- Select 20K RAM as default.
This commit is contained in:
parent
d13d9d7669
commit
af16e6fbe9
@ -305,6 +305,18 @@ if (FORMATS["AP_DSK35"]~=null or _OPTIONS["with-tools"]) then
|
||||
}
|
||||
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
|
||||
|
@ -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
|
||||
|
107
src/lib/formats/aquarius_caq.cpp
Normal file
107
src/lib/formats/aquarius_caq.cpp
Normal file
@ -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
|
19
src/lib/formats/aquarius_caq.h
Normal file
19
src/lib/formats/aquarius_caq.h
Normal file
@ -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
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user