telercas/tmc600: Implement quickload for SBASIC programs. [Curt Coder]

New working software list items
-------------------------------
tmc600_quik: Esittelyohjelma, Telmac SBASIC Menu, Väriesittelyohjelma [Marcel van Tongeren]
This commit is contained in:
Curt Coder 2024-04-24 07:58:35 +03:00
parent 6fe16f6a60
commit cf0f8bc748
3 changed files with 93 additions and 2 deletions

47
hash/tmc600_quik.xml Normal file
View file

@ -0,0 +1,47 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0-1.0
-->
<softwarelist name="tmc600_quik" description="Telmac TMC-600 quickload">
<software name="demo">
<description>Esittelyohjelma</description>
<year>1982</year>
<publisher>Telercas</publisher>
<info name="usage" value="W, RUN" />
<part name="quik" interface="tmc600_quik">
<dataarea name="quik" size="4672">
<rom name="demo.tmc600" size="4672" crc="fce7ad03" sha1="fada958bb9648619eb5ce04dc4c829091e34b665"/>
</dataarea>
</part>
</software>
<software name="demo2">
<description>Telmac SBASIC Menu</description>
<year>1982</year>
<publisher>Telercas</publisher>
<info name="usage" value="W, RUN" />
<part name="quik" interface="tmc600_quik">
<dataarea name="quik" size="2025">
<rom name="demo2.tmc600" size="2025" crc="592e97c7" sha1="8f92f0dd7aee3b3aae56a06a4117796ff4643811"/>
</dataarea>
</part>
</software>
<software name="snoopy">
<description>Väriesittelyohjelma</description>
<year>1982</year>
<publisher>Telercas</publisher>
<info name="usage" value="W, RUN" />
<part name="quik" interface="tmc600_quik">
<dataarea name="quik" size="817">
<rom name="snoopy.tmc600" size="817" crc="884976b0" sha1="0c2dc1a0fef94ac359313414b43a281b909bc7f2"/>
</dataarea>
</part>
</software>
</softwarelist>

View file

@ -48,6 +48,16 @@ Notes:
CDP1870 - RCA CDP1870CE Video Interface System (VIS) Color Video (DOT XTAL at 5.6260MHz, CHROM XTAL at 8.867238MHz) CDP1870 - RCA CDP1870CE Video Interface System (VIS) Color Video (DOT XTAL at 5.6260MHz, CHROM XTAL at 8.867238MHz)
CN1 - RF connector [TMC-700] CN1 - RF connector [TMC-700]
CN2 - 10x2 pin printer connector [TMC-700] CN2 - 10x2 pin printer connector [TMC-700]
GND 1 2 D0
GND 3 4 D1
GND 5 6 D2
GND 7 8 D3
GND 9 10 D4
GND 11 12 D5
GND 13 14 D6
GND 15 16 D7
GND 17 18 BUSY
GND 19 20 _STROBE
CN3 - 32x3 pin EURO connector CN3 - 32x3 pin EURO connector
CN4 - DIN5D tape connector CN4 - DIN5D tape connector
1 input (500 mV / 47 Kohm) 1 input (500 mV / 47 Kohm)
@ -256,6 +266,31 @@ void tmc600_state::out3_w(uint8_t data)
m_out3 = data; m_out3 = data;
} }
QUICKLOAD_LOAD_MEMBER(tmc600_state::quickload_cb)
{
int size = image.length();
if (size < 16)
return std::make_pair(image_error::INVALIDLENGTH, "Image is too short");
if ((size - 16) > (m_ram->size() - 0x300))
return std::make_pair(image_error::INVALIDLENGTH, "Image is larger than RAM");
address_space &program = m_maincpu->space(AS_PROGRAM);
image.fseek(0x5, SEEK_SET);
image.fread(program.get_write_ptr(0x6181), 4); // DEFUS and EOP
image.fread(program.get_write_ptr(0x6192), 4); // STRING and ARRAY
image.fseek(0x9, SEEK_SET);
image.fread(program.get_write_ptr(0x6199), 2); // EOD
image.fseek(0xf, SEEK_SET);
image.fread(program.get_write_ptr(0x6300), size); // program
return std::make_pair(std::error_condition(), std::string());
}
/* Machine Drivers */ /* Machine Drivers */
void tmc600_state::tmc600(machine_config &config) void tmc600_state::tmc600(machine_config &config)
@ -280,11 +315,9 @@ void tmc600_state::tmc600(machine_config &config)
m_bwio->mode_cb().set_constant(1); m_bwio->mode_cb().set_constant(1);
m_bwio->do_cb().set(FUNC(tmc600_state::out3_w)); m_bwio->do_cb().set(FUNC(tmc600_state::out3_w));
#if 0
// address bus demux for expansion bus // address bus demux for expansion bus
cdp1852_device &demux(CDP1852(config, CDP1852_BUS_TAG)); // clock is expansion bus TPA cdp1852_device &demux(CDP1852(config, CDP1852_BUS_TAG)); // clock is expansion bus TPA
demux.mode_cb().set_constant(0); demux.mode_cb().set_constant(0);
#endif
// printer output latch // printer output latch
cdp1852_device &prtout(CDP1852(config, CDP1852_TMC700_TAG)); // clock is CDP1802 TPB cdp1852_device &prtout(CDP1852(config, CDP1852_TMC700_TAG)); // clock is CDP1802 TPB
@ -299,11 +332,19 @@ void tmc600_state::tmc600(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);
// quickload
quickload_image_device &quickload(QUICKLOAD(config, "quickload", "tmc600"));
quickload.set_load_callback(FUNC(tmc600_state::quickload_cb));
quickload.set_interface("tmc600_quik");
// expansion bus connector // expansion bus connector
TMC600_EUROBUS_SLOT(config, m_bus, tmc600_eurobus_cards, nullptr); TMC600_EUROBUS_SLOT(config, m_bus, tmc600_eurobus_cards, nullptr);
// internal RAM // internal RAM
RAM(config, RAM_TAG).set_default_size("8K"); RAM(config, RAM_TAG).set_default_size("8K");
// software lists
SOFTWARE_LIST(config, "quik_list").set_original("tmc600_quik");
} }
/* ROMs */ /* ROMs */

View file

@ -14,6 +14,7 @@
#include "machine/ram.h" #include "machine/ram.h"
#include "machine/timer.h" #include "machine/timer.h"
#include "sound/cdp1869.h" #include "sound/cdp1869.h"
#include "softlist_dev.h"
#include "speaker.h" #include "speaker.h"
#define SCREEN_TAG "screen" #define SCREEN_TAG "screen"
@ -95,6 +96,8 @@ private:
void cdp1869_page_ram(address_map &map); void cdp1869_page_ram(address_map &map);
void tmc600_io_map(address_map &map); void tmc600_io_map(address_map &map);
void tmc600_map(address_map &map); void tmc600_map(address_map &map);
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
}; };
#endif // MAME_TELERCAS_TMC600_H #endif // MAME_TELERCAS_TMC600_H