mirror of
https://github.com/holub/mame
synced 2025-06-06 21:03:47 +03:00
apple2: updated PC Transporter to use alternate DMAC emulation & fixed V30 clock. [Peter Ferrie, R. Belmont]
This commit is contained in:
parent
c1efcefc26
commit
f81948b663
@ -53,31 +53,11 @@
|
||||
CF31: control/flags: bit 4 = 1 to assert reset on V30, 5 = 1 to assert halt on V30
|
||||
|
||||
TODO:
|
||||
- Code at $70b0-$70c5 waits for the V30 to answer some configuration data.
|
||||
- Code at $70b0-$70c5 waits for the V30 to answer FPU presence.
|
||||
- What's going on at CF0E/CF0F?
|
||||
- There's likely A2 ROM at CnXX and C800-CBFF to support the "Slinky" memory
|
||||
expansion card emulation function inside one of the custom ASICs. Need to
|
||||
dump this...
|
||||
- The manual indicates there is no ROM; special drivers installed into ProDOS 8
|
||||
provide the RAMdisk and A2-accessing-PC-drives functionality.
|
||||
|
||||
The final stages before the software settles into its loop are:
|
||||
|
||||
20 to C800 at cf30
|
||||
00 to C800 at cf31
|
||||
12 to C800 at cf2b
|
||||
21 to C800 at cf25
|
||||
33 to C800 at cf24
|
||||
80 to C800 at cf31
|
||||
20 to C800 at cf30
|
||||
loop:
|
||||
Read $C800 at cf36
|
||||
Read $C800 at cf31
|
||||
Read $C800 at cf31
|
||||
Read $C800 at cf36
|
||||
Read $C800 at cf31
|
||||
Read $C800 at cf31
|
||||
80 to C800 at cf31
|
||||
loop end: (return to loop)
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
#include "pc_xporter.h"
|
||||
@ -94,7 +74,6 @@ const device_type A2BUS_PCXPORTER = &device_creator<a2bus_pcxporter_device>;
|
||||
|
||||
static ADDRESS_MAP_START( pc_map, AS_PROGRAM, 16, a2bus_pcxporter_device )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
//AM_RANGE(0xf0000, 0xfffff) AM_READ(pc_bios_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START(pc_io, AS_IO, 16, a2bus_pcxporter_device )
|
||||
@ -108,7 +87,7 @@ static ADDRESS_MAP_START(pc_io, AS_IO, 16, a2bus_pcxporter_device )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
MACHINE_CONFIG_FRAGMENT( pcxporter )
|
||||
MCFG_CPU_ADD("v30", V30, XTAL_14_31818MHz/3)
|
||||
MCFG_CPU_ADD("v30", V30, XTAL_14_31818MHz/2) // 7.16 MHz as per manual
|
||||
MCFG_CPU_PROGRAM_MAP(pc_map)
|
||||
MCFG_CPU_IO_MAP(pc_io)
|
||||
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)
|
||||
@ -121,7 +100,7 @@ MACHINE_CONFIG_FRAGMENT( pcxporter )
|
||||
MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */
|
||||
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(a2bus_pcxporter_device, pc_pit8253_out2_changed))
|
||||
|
||||
MCFG_DEVICE_ADD( "dma8237", AM9517A, XTAL_14_31818MHz/3 )
|
||||
MCFG_DEVICE_ADD( "dma8237", PCXPORT_DMAC, XTAL_14_31818MHz/2 )
|
||||
MCFG_I8237_OUT_HREQ_CB(WRITELINE(a2bus_pcxporter_device, pc_dma_hrq_changed))
|
||||
MCFG_I8237_OUT_EOP_CB(WRITELINE(a2bus_pcxporter_device, pc_dma8237_out_eop))
|
||||
MCFG_I8237_IN_MEMR_CB(READ8(a2bus_pcxporter_device, pc_dma_read_byte))
|
||||
@ -390,9 +369,36 @@ void a2bus_pcxporter_device::write_c800(address_space &space, UINT16 offset, UIN
|
||||
|
||||
case 0x72c: // CGA 6845 register select
|
||||
m_pcio_space->write_byte(0x3d6, data);
|
||||
m_6845_reg = data;
|
||||
break;
|
||||
|
||||
case 0x72d: // CGA 6845 data read/write
|
||||
// HACK: adjust the 40 column mode the 6502 sets to
|
||||
// be more within specs.
|
||||
switch (m_6845_reg)
|
||||
{
|
||||
case 0:
|
||||
if (data == 0x3e)
|
||||
{
|
||||
data -= 6;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (data == 0x29)
|
||||
{
|
||||
data += 4;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (data == 0x5)
|
||||
{
|
||||
data *= 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
m_pcio_space->write_byte(0x3d7, data);
|
||||
break;
|
||||
|
||||
@ -424,7 +430,7 @@ void a2bus_pcxporter_device::write_c800(address_space &space, UINT16 offset, UIN
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("%02x to C800 at %x\n", data, offset + 0xc800);
|
||||
// printf("%02x to C800 at %x\n", data, offset + 0xc800);
|
||||
m_regs[offset] = data;
|
||||
break;
|
||||
}
|
||||
|
@ -123,6 +123,8 @@ private:
|
||||
address_space *m_pcmem_space, *m_pcio_space;
|
||||
bool m_reset_during_halt;
|
||||
|
||||
UINT8 m_6845_reg;
|
||||
|
||||
void pc_select_dma_channel(int channel, bool state);
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user