summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/paokaipc.cpp
blob: 7423a2aa1d432f692aa2c77091edc32313691b68 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// license:BSD-3-Clause
// copyright-holders:
/**************************************************************************************************

    Go Go Strike (c) 2007? Paokai

    Originally in fruitpc.cpp, split because definitely doesn't belong

    Some kind of x86 pc-like hardware, exact CPU type etc. unknown hardware is by Paokai,
    motherboard has logos, large chip with logo too, http://www.paokai.com.tw/

    CF card has a Linux partition, partially bootable with m55hipl driver.
    - starts with a "LILO boot", fails with a recoverable "undefined video mode"
      (press RETURN or SPACE);
    - Shows being a "gcc 3.2.2 (Red Hat Linux 3.2.2-5)" distro.
      Notice that latter seems mislabeled, and RedHat is actually version 9
      http://rpm.pbone.net/info_idpl_19558085_distro_redhat9_com_gcc-3.2.2-5.i386.rpm.html
    - Has pretty verbose terminal log, checks PnP, USB, Pentium f0 0f bug,
      assumes "33 MHz system bus" for IDE PIO mode, returns PIIX only during PCI scan
      (that's what m55hipl has as default);
    - Eventually hangs at a "Setting the clock:" prompt;

**************************************************************************************************/

#include "emu.h"
#include "cpu/i386/i386.h"
#include "machine/pci.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
#include "video/pc_vga.h"
#include "machine/pcshare.h"
#include "bus/isa/isa.h"
#include "bus/isa/sblaster.h"

class paokaipc_state : public pcat_base_state
{
public:
	paokaipc_state(const machine_config &mconfig, device_type type, const char *tag)
		: pcat_base_state(mconfig, type, tag)
		, m_pciroot(*this, "pci")
		, m_isabus(*this, "isa")
	{ }

	void paokaipc(machine_config &config);

private:
	required_device<pci_root_device> m_pciroot;
	required_device<isa8_device> m_isabus;

	void main_io(address_map &map);
	void main_map(address_map &map);
};

void paokaipc_state::main_map(address_map &map)
{
	map(0x00000000, 0x0009ffff).ram();
	map(0x000a0000, 0x000bffff).rw("vga", FUNC(vga_device::mem_r), FUNC(vga_device::mem_w)); // VGA VRAM
	map(0x000e0000, 0x000fffff).rom().region("bios", 0x20000);
	map(0x00100000, 0x008fffff).ram();
	map(0x02000000, 0x28ffffff).noprw();
	map(0xfffc0000, 0xffffffff).rom().region("bios", 0x00000);    /* System BIOS */
}

void paokaipc_state::main_io(address_map &map)
{
	pcat32_io_common(map);
	map(0x01f0, 0x01f7).rw("ide", FUNC(ide_controller_device::cs0_r), FUNC(ide_controller_device::cs0_w));
	map(0x03b0, 0x03bf).rw("vga", FUNC(vga_device::port_03b0_r), FUNC(vga_device::port_03b0_w));
	map(0x03c0, 0x03cf).rw("vga", FUNC(vga_device::port_03c0_r), FUNC(vga_device::port_03c0_w));
	map(0x03d0, 0x03df).rw("vga", FUNC(vga_device::port_03d0_r), FUNC(vga_device::port_03d0_w));
	map(0x03f0, 0x03f7).rw("ide", FUNC(ide_controller_device::cs1_r), FUNC(ide_controller_device::cs1_w));
//  map(0x0880, 0x0880) extensively accessed at POST, hangs if returns wrong values
//  map(0x0cf8, 0x0cff).rw(m_pcibus, FUNC(pci_bus_device::read), FUNC(pci_bus_device::write));
}

static INPUT_PORTS_START( gogostrk )
INPUT_PORTS_END

void paokaipc_state::paokaipc(machine_config &config)
{
	// TODO: everything inherited from fruitpc.cpp, needs proper identification of motherboard.
	PENTIUM(config, m_maincpu, 66000000); // unknown CPU, at least Pentium according to logs
	m_maincpu->set_addrmap(AS_PROGRAM, &paokaipc_state::main_map);
	m_maincpu->set_addrmap(AS_IO, &paokaipc_state::main_io);
	m_maincpu->set_irq_acknowledge_callback("pic8259_1", FUNC(pic8259_device::inta_cb));

	pcat_common(config);

	ide_controller_device &ide(IDE_CONTROLLER(config, "ide").options(ata_devices, "hdd", nullptr, true));
	ide.irq_handler().set("pic8259_2", FUNC(pic8259_device::ir6_w));

	pcvideo_vga(config);

	PCI_ROOT(config, m_pciroot, 0);
	// ...

	ISA8(config, m_isabus, 0);
	m_isabus->set_memspace("maincpu", AS_PROGRAM);
	m_isabus->set_iospace("maincpu", AS_IO);
	m_isabus->irq2_callback().set("pic8259_2", FUNC(pic8259_device::ir2_w));
	m_isabus->irq3_callback().set("pic8259_1", FUNC(pic8259_device::ir3_w));
	m_isabus->irq4_callback().set("pic8259_1", FUNC(pic8259_device::ir4_w));
	m_isabus->irq5_callback().set("pic8259_1", FUNC(pic8259_device::ir5_w));
	m_isabus->irq6_callback().set("pic8259_1", FUNC(pic8259_device::ir6_w));
	m_isabus->irq7_callback().set("pic8259_1", FUNC(pic8259_device::ir7_w));
	m_isabus->drq1_callback().set("dma8237_1", FUNC(am9517a_device::dreq1_w));
	m_isabus->drq2_callback().set("dma8237_1", FUNC(am9517a_device::dreq2_w));
	m_isabus->drq3_callback().set("dma8237_1", FUNC(am9517a_device::dreq3_w));

	// FIXME: determine ISA bus clock
//  isa8_slot_device &isa1(ISA8_SLOT(config, "isa1", 0, "isa", fruitpc_isa8_cards, "sb15", true));
//  isa1.set_option_device_input_defaults("sb15", DEVICE_INPUT_DEFAULTS_NAME(fruitpc_sb_def));
//  isa1.set_option_machine_config("sb15", fruitpc_sb_conf);
}

ROM_START( gogostrk )
	ROM_REGION32_LE( 0x40000, "bios", 0 )
	ROM_LOAD( "39sf020a.rom1", 0x000000, 0x040000, CRC(236d4d95) SHA1(50579acddc93c05d5f8e17ad3669a29d2dc49965) )

	DISK_REGION( "ide:0:hdd:image" )    // 128 MB CF Card
	DISK_IMAGE( "ggs-5-2-07", 0,SHA1(f214fd39ec8ac02f008823f4b179ea6c6835e1b8) )
ROM_END

GAME( 2007?, gogostrk, 0, paokaipc, gogostrk, paokaipc_state, empty_init, ROT0, "American Alpha / Paokai", "Go Go Strike", MACHINE_IS_SKELETON ) // motherboard is dated 2006, if the CF card string is a date it's 2007