summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/apc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/drivers/apc.c')
-rw-r--r--src/mess/drivers/apc.c53
1 files changed, 31 insertions, 22 deletions
diff --git a/src/mess/drivers/apc.c b/src/mess/drivers/apc.c
index 963fc5e9b9a..8d6a86353c8 100644
--- a/src/mess/drivers/apc.c
+++ b/src/mess/drivers/apc.c
@@ -6,9 +6,7 @@
TODO:
- video emulation (bitmap part)
- - Understand interrupt sources
- NMI seems valid, dumps a x86 stack to vram?
- - Unknown RTC device type (upd1990a?);
- What are exactly APU and MPU devices? They sounds scary ...
- DMA hook-ups
- serial ports
@@ -16,6 +14,7 @@
- Extract info regarding Hard Disk functionality
- Various unknown ports
- What kind of external ROM actually maps at 0xa****?
+ - Jumper settings (comms settings and display select)
============================================================================
front ^
@@ -148,7 +147,7 @@ public:
int m_dack;
UINT8 m_dma_offset[4];
-
+
IRQ_CALLBACK_MEMBER(irq_callback);
protected:
@@ -229,8 +228,7 @@ static UPD7220_DRAW_TEXT_LINE( hgdc_draw_text )
{
int res_x,res_y;
-// res_x = (x*8+xi) * (state->m_video_ff[WIDTH40_REG]+1);
- res_x = (x*8+xi) * (1);
+ res_x = (x*8+xi);
res_y = y*lr+yi;
if(!device->machine().primary_screen->visible_area().contains(res_x, res_y))
@@ -278,14 +276,6 @@ static UPD7220_DRAW_TEXT_LINE( hgdc_draw_text )
if(pen)
bitmap.pix32(res_y, res_x) = palette[pen];
-
-// if(state->m_video_ff[WIDTH40_REG])
-// {
-// if(res_x+1 > 640 || res_y > char_size*25) //TODO
-// continue;
-
-// bitmap.pix16(res_y, res_x+1) = pen;
-// }
}
}
}
@@ -412,6 +402,12 @@ WRITE8_MEMBER(apc_state::apc_dma_w)
WRITE8_MEMBER(apc_state::apc_irq_ack_w)
{
+ /*
+ x--- GDC
+ -x-- TM
+ --x- APU
+ ---x CRT
+ */
if(data & 4)
pic8259_ir3_w(machine().device("pic8259_master"), 0);
@@ -419,9 +415,11 @@ WRITE8_MEMBER(apc_state::apc_irq_ack_w)
logerror("IRQ ACK %02x\n",data);
}
-/* TODO: bit arrangement is completely wrong */
READ8_MEMBER(apc_state::apc_rtc_r)
{
+ /*
+ bit 1 high: low battery.
+ */
//fprintf(stderr, "RTC Read: %d\n", m_rtc->data_out_r());
return m_rtc->data_out_r();
}
@@ -444,16 +442,16 @@ RTC write: 0x11
...
RTC write bits: 76543210
- |||||||\- c0 (or OE?)
+ |||||||\- c0
||||||\-- c1
|||||\--- c2
||||\---- STB
|||\----- CLK
||\------ DATA_IN
- |\------- ?
- \-------- ?
+ |\------- "don't care"
+ \-------- ///
*/
- if (data&0xE0) fprintf(stderr,"RTC write: 0x%02x\n", data);
+ if (data&0xc0) fprintf(stderr,"RTC write: 0x%02x\n", data);
m_rtc->c0_w(BIT(data, 0)); // correct assuming theres a delay for changing command lines before stb
m_rtc->c1_w(BIT(data, 1)); // "
m_rtc->c2_w(BIT(data, 2)); // "
@@ -466,6 +464,7 @@ RTC write bits: 76543210
static ADDRESS_MAP_START( apc_map, AS_PROGRAM, 16, apc_state )
AM_RANGE(0x00000, 0x9ffff) AM_RAM
AM_RANGE(0xa0000, 0xa0fff) AM_RAM AM_SHARE("cmos")
+// AM_RANGE(0xa1000, 0xbffff) mirror CMOS
// AM_RANGE(0xc0000, 0xcffff) standard character ROM
AM_RANGE(0xd8000, 0xd9fff) AM_RAM AM_REGION("aux_pcg", 0) // AUX character RAM
// AM_RANGE(0xe0000, 0xeffff) Special Character RAM
@@ -484,12 +483,16 @@ static ADDRESS_MAP_START( apc_io, AS_IO, 16, apc_state )
AM_RANGE(0x48, 0x4f) AM_READWRITE8(apc_kbd_r, apc_kbd_w, 0x00ff)
AM_RANGE(0x50, 0x53) AM_DEVICE8("upd765", upd765a_device, map, 0x00ff ) // upd765
AM_RANGE(0x58, 0x59) AM_READWRITE8(apc_rtc_r, apc_rtc_w, 0x00ff)
+// 0x59 CMOS enable
// 0x5a APU data (Arithmetic Processing Unit!)
+// 0x5b, Power Off
// 0x5e APU status/command
AM_RANGE(0x60, 0x61) AM_DEVREADWRITE8_LEGACY("upd1771c", upd1771_r, upd1771_w, 0x00ff )
-// AM_RANGE(0x68, 0x6f) i8255 , printer port (A: status (R) B: data (W) C: command (W))
-// AM_DEVREADWRITE8("upd7220_btm", upd7220_device, read, write, 0x00ff)
-// 0x92, 0x9a, 0xa2, 0xaa is for a Hard Disk (unknown type)
+// AM_RANGE(0x68, 0x6f) i8255 , ODA printer port (A: status (R) B: data (W) C: command (W))
+// 0x70, 0x76 AM_DEVREADWRITE8("upd7220_btm", upd7220_device, read, write, 0x00ff)
+// 0x71, 0x77 IDA Controller
+// 0x80, 0x90 Communication Adapter
+// 0xf0, 0xf6 ASOP Controller
ADDRESS_MAP_END
/* TODO: key repeat, remove port impulse! */
@@ -973,6 +976,12 @@ WRITE8_MEMBER(apc_state::fdc_w)
m_fdc->dma_w(data);
}
+/*
+CH0: CRT
+CH1: FDC
+CH2: ("reserved for future graphics expansion")
+CH3: AUX
+*/
static I8237_INTERFACE( dmac_intf )
{
DEVCB_DRIVER_LINE_MEMBER(apc_state, apc_dma_hrq_changed),
@@ -1051,7 +1060,7 @@ static MACHINE_CONFIG_START( apc, apc_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD( "upd1771c", UPD1771C, MAIN_CLOCK )
+ MCFG_SOUND_ADD( "upd1771c", UPD1771C, MAIN_CLOCK ) //uPD1771C-006
MCFG_SOUND_CONFIG( upd1771c_config )
MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 )
MACHINE_CONFIG_END