(MESS) apf : more WIP

* Added -ram switch, the default is 8K, this allows most tapes to load
* Fixed pasting of upper-case program listings
* Added cart slot to apfimag, you must now load the BASIC cart yourself.
* Any apfm1000 cart can be loaded into apfimag
This commit is contained in:
Robbbert 2014-01-23 05:30:21 +00:00
parent 6bd6dcdbed
commit 65df1ab85e

View File

@ -2,7 +2,7 @@
driver by ? driver by ?
PeT mess@utanet.at around February 2008: PeT around February 2008:
added apfm1000 cartridge loading added apfm1000 cartridge loading
fixed apfm1000 pads fixed apfm1000 pads
added apf video mode added apf video mode
@ -33,17 +33,22 @@ text screen in the superior part of the graphical screen.
6600, 6500-6503 wd179x disc controller? 6400, 6401 6600, 6500-6503 wd179x disc controller? 6400, 6401
Status 19-09-2011
================= The M1000 contains the RAM, ROM, CPU, PIA0, joysticks, Video and cart slot, and thus was a TV Game computer.
- apfimag The MPA-10 contains the main keyboard, cassette support, PIA1 and was a base unit.
-- Loads tapes but then the machine freezes When the two were joined, and with the custom cassette player, they formed the Imagination Machine.
-- Some tapes load as garbage Although the BASIC cart could be plugged into the M1000, it could not be used as it needs the main keyboard.
-- With wave-sound, the cassette sound is completely overdriven with lots of noise before the tape starts.
The problem is not evident when the wav is played with media player.
- apfm1000
-- About half of the carts have severe video problems. ToDo:
-----
- When pasting a large program, characters can be lost
- Graphics are corrupted
- Tape loading is not very reliable
- Add back the disk support
- Need disk-based software
******************************************************************************************************************/ ******************************************************************************************************************/
@ -59,6 +64,7 @@ Status 19-09-2011
#include "imagedev/cassette.h" #include "imagedev/cassette.h"
#include "imagedev/cartslot.h" #include "imagedev/cartslot.h"
#include "formats/apf_apt.h" #include "formats/apf_apt.h"
#include "machine/ram.h"
class apf_state : public driver_device class apf_state : public driver_device
@ -68,12 +74,13 @@ public:
: driver_device(mconfig, type, tag) : driver_device(mconfig, type, tag)
, m_p_videoram(*this, "videoram") , m_p_videoram(*this, "videoram")
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_ram(*this, RAM_TAG)
, m_crtc(*this, "mc6847") , m_crtc(*this, "mc6847")
, m_speaker(*this, "speaker") , m_speaker(*this, "speaker")
, m_pia0(*this, "pia0") , m_pia0(*this, "pia0")
, m_pia1(*this, "pia1") , m_pia1(*this, "pia1")
, m_cass(*this, "cassette") , m_cass(*this, "cassette")
, m_fdc(*this, "wd179x") , m_fdc(*this, "fdc")
{ } { }
DECLARE_READ8_MEMBER(apf_mc6847_videoram_r); DECLARE_READ8_MEMBER(apf_mc6847_videoram_r);
@ -103,6 +110,7 @@ private:
virtual void machine_start(); virtual void machine_start();
required_shared_ptr<UINT8> m_p_videoram; required_shared_ptr<UINT8> m_p_videoram;
required_device<m6800_cpu_device> m_maincpu; required_device<m6800_cpu_device> m_maincpu;
required_device<ram_device> m_ram;
required_device<mc6847_base_device> m_crtc; required_device<mc6847_base_device> m_crtc;
required_device<speaker_sound_device> m_speaker; required_device<speaker_sound_device> m_speaker;
required_device<pia6821_device> m_pia0; required_device<pia6821_device> m_pia0;
@ -200,6 +208,11 @@ void apf_state::machine_start()
if (m_cass) // apfimag only if (m_cass) // apfimag only
m_cass->change_state(CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR); m_cass->change_state(CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
/* if we specified 8K of RAM, delete the extended RAM */
address_space &space = m_maincpu->space(AS_PROGRAM);
if (m_ram->size() == 8*1024)
space.unmap_readwrite(0xc000, 0xdfff);
} }
WRITE8_MEMBER( apf_state::apf_dischw_w) WRITE8_MEMBER( apf_state::apf_dischw_w)
@ -409,57 +422,57 @@ static INPUT_PORTS_START( apfimag )
/* keyboard line 0 */ /* keyboard line 0 */
PORT_START("key0") PORT_START("key0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('X')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q IF") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q IF") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2 \" LET") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"') PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2 \" LET") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1 ! GOSUB") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1 ! GOSUB") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W STEP") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W STEP") PORT_CODE(KEYCODE_W) PORT_CHAR('W')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('S')
/* keyboard line 1 */ /* keyboard line 1 */
PORT_START("key1") PORT_START("key1")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('V')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R READ") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R READ") PORT_CODE(KEYCODE_R) PORT_CHAR('R')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3 # DATA") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3 # DATA") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4 $ INPUT") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4 $ INPUT") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E STOP") PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E STOP") PORT_CODE(KEYCODE_E) PORT_CHAR('E')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D')
/* keyboard line 2 */ /* keyboard line 2 */
PORT_START("key2") PORT_START("key2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N ^") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('^') PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N ^") PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('^')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T NEXT") PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T NEXT") PORT_CODE(KEYCODE_T) PORT_CHAR('T')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6 & FOR") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6 & FOR") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('G')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5 % DIM") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5 % DIM") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y PRINT") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y PRINT") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('H')
/* keyboard line 3 */ /* keyboard line 3 */
PORT_START("key3") PORT_START("key3")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M ]") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR(']') PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M ]") PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR(']')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I LIST") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I LIST") PORT_CODE(KEYCODE_I) PORT_CHAR('I')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7 ' RETURN") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7 ' RETURN") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K [") PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('[') PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K [") PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('[')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8 ( THEN") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8 ( THEN") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U END") PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U END") PORT_CODE(KEYCODE_U) PORT_CHAR('U')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('J')
/* keyboard line 4 */ /* keyboard line 4 */
PORT_START("key4") PORT_START("key4")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O _ REM") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('_') PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O _ REM") PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('_')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0 GOTO") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0 GOTO") PORT_CODE(KEYCODE_0) PORT_CHAR('0')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L \\") PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('\\') PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L \\") PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('\\')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9 ) ON") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9 ) ON") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P @ USING") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('@') PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P @ USING") PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('@')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
/* keyboard line 5 */ /* keyboard line 5 */
@ -530,11 +543,11 @@ static const mc6847_interface apf_mc6847_intf =
DEVCB_DRIVER_LINE_MEMBER(apf_state, apf_mc6847_fs_w) DEVCB_DRIVER_LINE_MEMBER(apf_state, apf_mc6847_fs_w)
}; };
static MACHINE_CONFIG_START( apfimag, apf_state ) static MACHINE_CONFIG_START( apfm1000, apf_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6800, XTAL_3_579545MHz / 4 ) // divided by 4 in external clock circuit MCFG_CPU_ADD("maincpu", M6800, XTAL_3_579545MHz / 4 ) // divided by 4 in external clock circuit
MCFG_CPU_PROGRAM_MAP(apfimag_map) MCFG_CPU_PROGRAM_MAP(apfm1000_map)
/* video hardware */ /* video hardware */
MCFG_SCREEN_MC6847_NTSC_ADD("screen", "mc6847") MCFG_SCREEN_MC6847_NTSC_ADD("screen", "mc6847")
@ -542,8 +555,6 @@ static MACHINE_CONFIG_START( apfimag, apf_state )
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
@ -556,25 +567,10 @@ static MACHINE_CONFIG_START( apfimag, apf_state )
MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line)) MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line))
MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line)) MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line))
MCFG_DEVICE_ADD("pia1", PIA6821, 0) /* internal ram */
MCFG_PIA_READPA_HANDLER(READ8(apf_state, pia1_porta_r)) MCFG_RAM_ADD(RAM_TAG)
MCFG_PIA_READPB_HANDLER(READ8(apf_state, pia1_portb_r)) MCFG_RAM_DEFAULT_SIZE("8K")
MCFG_PIA_WRITEPB_HANDLER(WRITE8(apf_state, pia1_portb_w)) MCFG_RAM_EXTRA_OPTIONS("16K")
MCFG_CASSETTE_ADD( "cassette", apf_cassette_interface )
//MCFG_FD1793_ADD("wd179x", default_wd17xx_interface ) // TODO confirm type
//MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(apfimag_floppy_interface)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( apfm1000, apfimag )
MCFG_CPU_MODIFY( "maincpu" )
MCFG_CPU_PROGRAM_MAP( apfm1000_map)
MCFG_DEVICE_REMOVE( "pia1" )
MCFG_DEVICE_REMOVE( WAVE_TAG )
MCFG_DEVICE_REMOVE( "cassette" )
//MCFG_LEGACY_FLOPPY_2_DRIVES_REMOVE()
MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_INTERFACE("apfm1000_cart") MCFG_CARTSLOT_INTERFACE("apfm1000_cart")
@ -583,6 +579,24 @@ static MACHINE_CONFIG_DERIVED( apfm1000, apfimag )
MCFG_SOFTWARE_LIST_ADD("cart_list","apfm1000") MCFG_SOFTWARE_LIST_ADD("cart_list","apfm1000")
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( apfimag, apfm1000 )
MCFG_CPU_MODIFY( "maincpu" )
MCFG_CPU_PROGRAM_MAP( apfimag_map)
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
MCFG_DEVICE_ADD("pia1", PIA6821, 0)
MCFG_PIA_READPA_HANDLER(READ8(apf_state, pia1_porta_r))
MCFG_PIA_READPB_HANDLER(READ8(apf_state, pia1_portb_r))
MCFG_PIA_WRITEPB_HANDLER(WRITE8(apf_state, pia1_portb_w))
//MCFG_CASSETTE_ADD( "cassette", apf_cassette_interface )
MCFG_CASSETTE_ADD( "cassette", default_cassette_interface )
//MCFG_FD1793_ADD("fdc", default_wd17xx_interface ) // TODO confirm type
//MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(apfimag_floppy_interface)
MACHINE_CONFIG_END
/*************************************************************************** /***************************************************************************
@ -594,10 +608,8 @@ ROM_START(apfimag)
ROM_REGION(0x0800,"roms", 0) ROM_REGION(0x0800,"roms", 0)
ROM_LOAD("apf_4000.rom", 0x0000, 0x0800, CRC(2a331a33) SHA1(387b90882cd0b66c192d9cbaa3bec250f897e4f1) ) ROM_LOAD("apf_4000.rom", 0x0000, 0x0800, CRC(2a331a33) SHA1(387b90882cd0b66c192d9cbaa3bec250f897e4f1) )
// need to split these off as a cart
ROM_REGION(0x3800,"cart", ROMREGION_ERASEFF) ROM_REGION(0x3800,"cart", ROMREGION_ERASEFF)
ROM_LOAD("basic_80.rom", 0x0000, 0x2000, CRC(a4c69fae) SHA1(7f98aa482589bf7c5a26d338fec105e797ba43f6) ) ROM_CART_LOAD("cart", 0x0000, 0x3800, ROM_OPTIONAL)
ROM_LOAD("basic_68.rom", 0x2000, 0x1000, CRC(ef049ab8) SHA1(c4c12aade95dd89a4750fe7f89d57256c93da068) )
ROM_END ROM_END
ROM_START(apfm1000) ROM_START(apfm1000)