gimix: removed ROM bank at 0xe800, changed disk drivers to be high density (Flex and OS-9 disks are 80-track), and added a hack (disabled by default) that gets OS-9 to run.

This commit is contained in:
mahlemiut 2014-07-26 01:49:34 +00:00
parent d5084181e7
commit ee80cc75ec

View File

@ -13,6 +13,12 @@
Information Link: http://www.backglass.org/duncan/gimix/
TODO: Everything
Usage:
System boots into GMXBUG-09
To boot Flex, insert the Flex system disk (3.3 or later, must support the DMA disk controller), type U and press enter.
To boot OS-9, insert the OS-9 system disk, type O, and press Enter.
Note that booting OS-9 doesn't currently work without a timer hack.
*/
#include "emu.h"
@ -86,7 +92,6 @@ public:
, m_bank16(*this, "bank16")
, m_rombank1(*this, "rombank1")
, m_rombank2(*this, "rombank2")
, m_rombank3(*this, "rombank3")
, m_fixedrombank(*this, "fixedrombank")
{}
@ -106,6 +111,7 @@ public:
DECLARE_WRITE8_MEMBER(pia_pa_w);
DECLARE_READ8_MEMBER(pia_pb_r);
DECLARE_WRITE8_MEMBER(pia_pb_w);
TIMER_DEVICE_CALLBACK_MEMBER(test_timer_w);
DECLARE_FLOPPY_FORMATS(floppy_formats);
@ -160,7 +166,6 @@ private:
required_device<address_map_bank_device> m_bank16;
required_memory_bank m_rombank1;
required_memory_bank m_rombank2;
required_memory_bank m_rombank3;
required_memory_bank m_fixedrombank;
};
@ -179,8 +184,8 @@ static ADDRESS_MAP_START( gimix_banked_mem, AS_PROGRAM, 8, gimix_state)
AM_RANGE(0x0e240, 0x0e3af) AM_RAM
AM_RANGE(0x0e3b0, 0x0e3b3) AM_READWRITE(dma_r, dma_w) // DMA controller (custom?)
AM_RANGE(0x0e3b4, 0x0e3b7) AM_READWRITE(fdc_r, fdc_w) // FD1797 FDC
AM_RANGE(0x0e400, 0x0e7ff) AM_RAM
AM_RANGE(0x0e800, 0x0efff) AM_ROMBANK("rombank3")
AM_RANGE(0x0e400, 0x0e7ff) AM_RAM // scratchpad RAM
AM_RANGE(0x0e800, 0x0efff) AM_RAM
AM_RANGE(0x0f000, 0x0f7ff) AM_ROMBANK("rombank2")
AM_RANGE(0x0f800, 0x0ffff) AM_ROMBANK("rombank1")
//AM_RANGE(0x10000, 0x1ffff) AM_RAM
@ -249,7 +254,6 @@ WRITE8_MEMBER( gimix_state::system_w )
{
m_rombank1->set_entry(2);
m_rombank2->set_entry(3);
m_rombank3->set_entry(1);
m_fixedrombank->set_entry(2);
logerror("SYS: FPLA software latch set\n");
}
@ -257,7 +261,6 @@ WRITE8_MEMBER( gimix_state::system_w )
{
m_rombank1->set_entry(0);
m_rombank2->set_entry(1);
m_rombank3->set_entry(2);
m_fixedrombank->set_entry(0);
logerror("SYS: FPLA software latch reset\n");
}
@ -453,7 +456,6 @@ void gimix_state::machine_reset()
m_term_data = 0;
m_rombank1->set_entry(0); // RAM banks are undefined on startup
m_rombank2->set_entry(1);
m_rombank3->set_entry(2);
m_fixedrombank->set_entry(0);
m_dma_status = 0x00;
m_dma_ctrl = 0x00;
@ -470,11 +472,9 @@ void gimix_state::machine_start()
UINT8* ROM = m_rom->base();
m_rombank1->configure_entries(0,4,ROM,0x800);
m_rombank2->configure_entries(0,4,ROM,0x800);
m_rombank3->configure_entries(0,4,ROM,0x800);
m_fixedrombank->configure_entries(0,4,ROM+0x700,0x800);
m_rombank1->set_entry(0); // RAM banks are undefined on startup
m_rombank2->set_entry(1);
m_rombank3->set_entry(2);
m_fixedrombank->set_entry(0);
// install any extra RAM
if(m_ram->size() > 65536)
@ -512,12 +512,27 @@ WRITE_LINE_MEMBER(gimix_state::write_acia_clock)
m_acia2->write_rxc(state);
}
TIMER_DEVICE_CALLBACK_MEMBER(gimix_state::test_timer_w)
{
static bool prev;
if(!prev)
{
m_maincpu->set_input_line(M6809_IRQ_LINE,ASSERT_LINE);
prev = true;
}
else
{
m_maincpu->set_input_line(M6809_IRQ_LINE,CLEAR_LINE);
prev = false;
}
}
FLOPPY_FORMATS_MEMBER( gimix_state::floppy_formats )
FLOPPY_FLEX_FORMAT
FLOPPY_FORMATS_END
static SLOT_INTERFACE_START( gimix_floppies )
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
SLOT_INTERFACE( "525hd", FLOPPY_525_HD )
SLOT_INTERFACE_END
#define MCFG_ADDRESS_BANK(tag) \
@ -546,8 +561,8 @@ static MACHINE_CONFIG_START( gimix, gimix_state )
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(gimix_state,fdc_irq_w))
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(gimix_state,fdc_drq_w))
MCFG_WD_FDC_FORCE_READY
MCFG_FLOPPY_DRIVE_ADD("fdc:0", gimix_floppies, "525dd", gimix_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", gimix_floppies, "525dd", gimix_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:0", gimix_floppies, "525hd", gimix_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", gimix_floppies, "525hd", gimix_state::floppy_formats)
/* parallel ports */
MCFG_DEVICE_ADD("pia1",PIA6821,XTAL_2MHz)
@ -561,12 +576,15 @@ static MACHINE_CONFIG_START( gimix, gimix_state )
MCFG_DEVICE_ADD("acia1",ACIA6850,XTAL_2MHz)
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("serial1",rs232_port_device,write_txd))
MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("serial1",rs232_port_device,write_rts))
MCFG_DEVICE_ADD("acia2",ACIA6850,XTAL_2MHz)
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("serial2",rs232_port_device,write_txd))
MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("serial2",rs232_port_device,write_rts))
MCFG_DEVICE_ADD("acia3",ACIA6850,XTAL_2MHz)
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("serial3",rs232_port_device,write_txd))
MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("serial3",rs232_port_device,write_rts))
MCFG_DEVICE_ADD("acia4",ACIA6850,XTAL_2MHz)
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("serial4",rs232_port_device,write_txd))
MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("serial4",rs232_port_device,write_rts))
@ -613,12 +631,14 @@ static MACHINE_CONFIG_START( gimix, gimix_state )
MCFG_RAM_DEFAULT_SIZE("128K")
MCFG_RAM_EXTRA_OPTIONS("56K,256K,512K")
// uncomment this timer to use a hack that generates a regular IRQ, this will get OS-9 to boot
// for some unknown reason, OS-9 does not touch the 6840, and only clears/disables IRQs on the RTC
//MCFG_TIMER_DRIVER_ADD_PERIODIC("test_timer",gimix_state,test_timer_w,attotime::from_msec(100))
MACHINE_CONFIG_END
ROM_START( gimix )
ROM_REGION( 0x10000, "roms", 0)
/* CPU board U4: gimixf8.bin - checksum 68DB - 2716 - GMXBUG09 V2.1 | (c)1981 GIMIX | $F800 I2716 */
/* CPU board U4: gimixf8.bin - checksum 68DB - 2716 - GMXBUG09 V2.1 | (c)1981 GIMIX | $F800 I2716 */
ROM_LOAD( "gimixf8.u4", 0x000000, 0x000800, CRC(7d60f838) SHA1(eb7546e8bbf50d33e181f3e86c3e4c5c9032cab2) )
/* CPU board U5: gimixv14.bin - checksum 97E2 - 2716 - GIMIX 6809 | AUTOBOOT | V1.4 I2716 */
ROM_LOAD( "gimixv14.u5", 0x000800, 0x000800, CRC(f795b8b9) SHA1(eda2de51cc298d94b36605437d900ce971b3b276) )