mirror of
https://github.com/holub/mame
synced 2025-06-15 17:07:05 +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
|
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
|
--@src/lib/formats/asst128_dsk.h,FORMATS["ASST128_DSK"] = true
|
||||||
|
@ -980,6 +980,7 @@ FORMATS["APOLLO_DSK"] = true
|
|||||||
FORMATS["APPLIX_DSK"] = true
|
FORMATS["APPLIX_DSK"] = true
|
||||||
FORMATS["APRIDISK"] = true
|
FORMATS["APRIDISK"] = true
|
||||||
FORMATS["AP_DSK35"] = true
|
FORMATS["AP_DSK35"] = true
|
||||||
|
FORMATS["AQUARIUS_CAQ"] = true
|
||||||
FORMATS["ASST128_DSK"] = true
|
FORMATS["ASST128_DSK"] = true
|
||||||
FORMATS["ASTROCADE_WAV"] = true
|
FORMATS["ASTROCADE_WAV"] = true
|
||||||
FORMATS["ATARI_DSK"] = 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
|
- slot interface for cartridges
|
||||||
- hand controllers
|
- hand controllers
|
||||||
- scramble RAM also
|
- scramble RAM also
|
||||||
- CAQ tape support
|
|
||||||
- memory mapper
|
- memory mapper
|
||||||
- proper video timings
|
- proper video timings
|
||||||
- PAL mode
|
- PAL mode
|
||||||
@ -43,7 +42,7 @@ X-6026 : Roll of paper for the printer
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#define XTAL1 8866000
|
#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)
|
void aquarius_state::aquarius(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
/* 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_PROGRAM, &aquarius_state::aquarius_mem);
|
||||||
m_maincpu->set_addrmap(AS_IO, &aquarius_state::aquarius_io);
|
m_maincpu->set_addrmap(AS_IO, &aquarius_state::aquarius_io);
|
||||||
m_maincpu->set_vblank_int("screen", FUNC(aquarius_state::irq0_line_hold));
|
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(config, "mono").front_center();
|
||||||
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
|
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_device &ay8910(AY8910(config, "ay8910", XTAL(3'579'545)/2)); // ??? AY-3-8914
|
||||||
ay8910.port_a_read_callback().set_ioport("RIGHT");
|
ay8910.port_a_read_callback().set_ioport("RIGHT");
|
||||||
ay8910.port_b_read_callback().set_ioport("LEFT");
|
ay8910.port_b_read_callback().set_ioport("LEFT");
|
||||||
@ -393,12 +393,14 @@ void aquarius_state::aquarius(machine_config &config)
|
|||||||
CASSETTE(config, m_cassette);
|
CASSETTE(config, m_cassette);
|
||||||
m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
|
m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
|
||||||
m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
|
m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
|
||||||
|
m_cassette->set_formats(aquarius_cassette_formats);
|
||||||
|
m_cassette->set_interface("aquarius_cass");
|
||||||
|
|
||||||
/* cartridge */
|
/* cartridge */
|
||||||
GENERIC_CARTSLOT(config, m_cart, generic_linear_slot, "aquarius_cart");
|
GENERIC_CARTSLOT(config, m_cart, generic_linear_slot, "aquarius_cart");
|
||||||
|
|
||||||
/* internal ram */
|
/* 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 lists */
|
||||||
SOFTWARE_LIST(config, "cart_list").set_original("aquarius");
|
SOFTWARE_LIST(config, "cart_list").set_original("aquarius");
|
||||||
@ -414,10 +416,10 @@ ROM_START( aquarius )
|
|||||||
|
|
||||||
/* basic rom */
|
/* basic rom */
|
||||||
ROM_DEFAULT_BIOS("rev2")
|
ROM_DEFAULT_BIOS("rev2")
|
||||||
ROM_SYSTEM_BIOS(0, "rev1", "Revision 1")
|
ROM_SYSTEM_BIOS(0, "rev2", "Revision 2")
|
||||||
ROMX_LOAD("aq1.u2", 0x0000, 0x2000, NO_DUMP, ROM_BIOS(0))
|
ROMX_LOAD("aq2.u2", 0x0000, 0x2000, CRC(a2d15bcf) SHA1(ca6ef55e9ead41453efbf5062d6a60285e9661a6), ROM_BIOS(0))
|
||||||
ROM_SYSTEM_BIOS(1, "rev2", "Revision 2")
|
ROM_SYSTEM_BIOS(1, "rev1", "Revision 1")
|
||||||
ROMX_LOAD("aq2.u2", 0x0000, 0x2000, CRC(a2d15bcf) SHA1(ca6ef55e9ead41453efbf5062d6a60285e9661a6), ROM_BIOS(1))
|
ROMX_LOAD("aq1.u2", 0x0000, 0x2000, NO_DUMP, ROM_BIOS(1))
|
||||||
|
|
||||||
/* charrom */
|
/* charrom */
|
||||||
ROM_REGION(0x800, "gfx1", 0)
|
ROM_REGION(0x800, "gfx1", 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user