Previous 199869 Revisions Next

r19060 Tuesday 20th November, 2012 at 03:08:17 UTC by Angelo Salese
Added timer irq, this makes a status bar to appear on top
[src/mess/drivers]apc.c pc8801.c

trunk/src/mess/drivers/apc.c
r19059r19060
5757#include "machine/pit8253.h"
5858#include "machine/am9517a.h"
5959#include "machine/upd765.h"
60#include "machine/upd1990a.h"
6061#include "machine/nvram.h"
6162#include "video/upd7220.h"
6263#include "imagedev/flopdrv.h"
r19059r19060
6667
6768//#include "sound/ay8910.h"
6869
70#define MAIN_CLOCK XTAL_5MHz
71
6972class apc_state : public driver_device
7073{
7174public:
r19059r19060
7477      m_maincpu(*this, "maincpu"),
7578      m_hgdc1(*this, "upd7220_chr"),
7679      m_hgdc2(*this, "upd7220_btm"),
80      m_rtc(*this, "upd1990a"),
7781      m_i8259_m(*this, "pic8259_master"),
7882      m_i8259_s(*this, "pic8259_slave"),
7983      m_fdc(*this, "upd765"),
r19059r19060
8690   required_device<cpu_device> m_maincpu;
8791   required_device<upd7220_device> m_hgdc1;
8892   required_device<upd7220_device> m_hgdc2;
93   required_device<upd1990a_device> m_rtc;
8994   required_device<pic8259_device> m_i8259_m;
9095   required_device<pic8259_device> m_i8259_s;
9196   required_device<upd765a_device> m_fdc;
r19059r19060
110115   DECLARE_WRITE8_MEMBER(apc_dma_segments_w);
111116   DECLARE_READ8_MEMBER(apc_dma_r);
112117   DECLARE_WRITE8_MEMBER(apc_dma_w);
118   DECLARE_WRITE8_MEMBER(apc_irq_ack_w);
119   DECLARE_READ8_MEMBER(apc_rtc_r);
120   DECLARE_WRITE8_MEMBER(apc_rtc_w);
113121
114122   struct {
115123      UINT8 status; //status
r19059r19060
404412   machine().device<am9517a_device>("i8237")->write(space, BITSWAP8(offset,7,6,5,4,2,1,0,3), data, 0xff);
405413}
406414
415WRITE8_MEMBER(apc_state::apc_irq_ack_w)
416{
417   if(data & 4)
418      pic8259_ir3_w(machine().device("pic8259_master"), 0);
407419
420   if(data & ~4)
421      logerror("IRQ ACK %02x\n",data);
422}
423
424/* TODO: bit arrangement is completely wrong */
425READ8_MEMBER(apc_state::apc_rtc_r)
426{
427   return m_rtc->data_out_r();
428}
429
430WRITE8_MEMBER(apc_state::apc_rtc_w)
431{
432   m_rtc->data_in_w(BIT(data, 0));
433   m_rtc->stb_w(BIT(data, 1));
434   m_rtc->clk_w(BIT(data, 2));
435   m_rtc->oe_w(BIT(data, 3));
436   m_rtc->c0_w(BIT(data, 3));
437   m_rtc->c1_w(BIT(data, 4));
438   m_rtc->c2_w(BIT(data, 5));
439}
440
408441static ADDRESS_MAP_START( apc_map, AS_PROGRAM, 16, apc_state )
409442   AM_RANGE(0x00000, 0x9ffff) AM_RAM
410443   AM_RANGE(0xa0000, 0xa0fff) AM_RAM AM_SHARE("cmos")
411444//   AM_RANGE(0xc0000, 0xcffff) standard character ROM
412//   AM_RANGE(0xd8000, 0xdffff) AM_RAM // AUX character RAM
445   AM_RANGE(0xd8000, 0xdffff) AM_RAM // AUX character RAM
413446//   AM_RANGE(0xe0000, 0xeffff) Special Character RAM
414447   AM_RANGE(0xfe000, 0xfffff) AM_ROM AM_REGION("ipl", 0)
415448ADDRESS_MAP_END
r19059r19060
422455//  0x30, 0x37 serial port 0/1 (i8251) (even/odd)
423456   AM_RANGE(0x38, 0x3f) AM_WRITE8(apc_dma_segments_w,0x00ff)
424457   AM_RANGE(0x40, 0x43) AM_READWRITE8(apc_gdc_r, apc_gdc_w, 0xffff)
425//  0x46 UPD7220 reset interrupt
458   AM_RANGE(0x46, 0x47) AM_WRITE8(apc_irq_ack_w, 0x00ff)
426459   AM_RANGE(0x48, 0x4f) AM_READWRITE8(apc_kbd_r, apc_kbd_w, 0x00ff)
427460   AM_RANGE(0x50, 0x53) AM_DEVICE8("upd765", upd765a_device, map, 0x00ff ) // upd765
461   AM_RANGE(0x58, 0x59) AM_READWRITE8(apc_rtc_r, apc_rtc_w, 0x00ff)
428462//  0x5a  APU data (Arithmetic Processing Unit!)
429463//  0x5e  APU status/command
430464   AM_RANGE(0x60, 0x67) AM_READWRITE8(apc_port_60_r, apc_port_60_w, 0xffff)
r19059r19060
503537   PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("[ / {") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x5b)
504538   PORT_BIT(0x08,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("\\ / |") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x5c)
505539   PORT_BIT(0x10,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("] / }") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x5d)
506   PORT_BIT(0x20,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("¯ / ^") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x5e)
540   PORT_BIT(0x20,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("(up score) / ^") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x5e)
507541   PORT_BIT(0x40,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("- / _") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x5f)
508542//   PORT_BIT(0x80,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("unk6") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x26)
509543
r19059r19060
638672   BYTE   0X08         ; 9C - back space
639673*/
640674   PORT_START("KEY_S1")
641   PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("BREAK") PORT_CODE(KEYCODE_ESC) PORT_CHAR(0x00) PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x96)
675   PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("BREAK") PORT_CHAR(0x00) PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x96)
642676   PORT_BIT(0x02,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(0x0d) PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x97)
643677   PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("TAB") /*PORT_CODE(KEYCODE_TAB)*/ PORT_CHAR(0x09) PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x98)
644678   PORT_BIT(0x08,IP_ACTIVE_HIGH,IPT_UNUSED) //0x99
645679   PORT_BIT(0x10,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("HOME") PORT_CODE(KEYCODE_HOME) PORT_CHAR(0x1e) PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x9a)
646680   PORT_BIT(0x20,IP_ACTIVE_HIGH,IPT_UNUSED) //0x9b
647681   PORT_BIT(0x40,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("BACK SPACE") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(0x08) PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x9c)
682   PORT_BIT(0x80,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("ESC") PORT_CHAR(0x1b) PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x1b)
648683
649684/*
650685   BYTE   0X0B         ; F7 - up arrow
r19059r19060
667702   PORT_START("KEY_MOD")
668703   PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT)
669704   PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
670
671705INPUT_PORTS_END
672706
673707void apc_state::fdc_drq(bool state)
r19059r19060
696730   m_fdc->set_rate(500000);
697731   m_fdc->setup_intrq_cb(upd765a_device::line_cb(FUNC(apc_state::fdc_irq), this));
698732   m_fdc->setup_drq_cb(upd765a_device::line_cb(FUNC(apc_state::fdc_drq), this));
733
734   m_rtc->cs_w(1);
735//   m_rtc->oe_w(1);
699736}
700737
701738void apc_state::machine_reset()
r19059r19060
764801{
765802   {
766803      {
767         1996800,              /* heartbeat IRQ */
804         MAIN_CLOCK,              /* heartbeat IRQ */
768805         DEVCB_NULL,
769         DEVCB_NULL
806         DEVCB_DEVICE_LINE("pic8259_master", pic8259_ir3_w)
770807      }, {
771         1996800,              /* Memory Refresh */
808         MAIN_CLOCK,              /* Memory Refresh */
772809         DEVCB_NULL,
773810         DEVCB_NULL
774811      }, {
775         1996800,              /* RS-232c */
812         MAIN_CLOCK,              /* RS-232c */
776813         DEVCB_NULL,
777814         DEVCB_NULL
778815      }
r19059r19060
910947   { DEVCB_DRIVER_LINE_MEMBER(apc_state, apc_dack0_w), DEVCB_DRIVER_LINE_MEMBER(apc_state, apc_dack1_w), DEVCB_DRIVER_LINE_MEMBER(apc_state, apc_dack2_w), DEVCB_DRIVER_LINE_MEMBER(apc_state, apc_dack3_w) }
911948};
912949
950static UPD1990A_INTERFACE( apc_upd1990a_intf )
951{
952   DEVCB_NULL,
953   DEVCB_NULL
954};
955
913956static const floppy_format_type apc_floppy_formats[] = {
914957   FLOPPY_D88_FORMAT,
915958   FLOPPY_IMD_FORMAT,
r19059r19060
931974      palette_set_color_rgb(machine(), i, pal1bit(0), pal1bit(0), pal1bit(0));
932975}
933976
934#define MAIN_CLOCK XTAL_5MHz
935
936977static MACHINE_CONFIG_START( apc, apc_state )
937978
938979   /* basic machine hardware */
r19059r19060
946987   MCFG_I8237_ADD("i8237", MAIN_CLOCK, dmac_intf)
947988
948989   MCFG_NVRAM_ADD_1FILL("cmos")
990   MCFG_UPD1990A_ADD("upd1990a", XTAL_32_768kHz, apc_upd1990a_intf)
949991
950992   MCFG_UPD765A_ADD("upd765", true, true)
951993   MCFG_FLOPPY_DRIVE_ADD("upd765:0", apc_floppies, "8", 0, apc_floppy_formats)
trunk/src/mess/drivers/pc8801.c
r19059r19060
17001700
17011701WRITE8_MEMBER(pc8801_state::pc8801_rtc_w)
17021702{
1703
17041703   m_rtc->c0_w((data & 1) >> 0);
17051704   m_rtc->c1_w((data & 2) >> 1);
17061705   m_rtc->c2_w((data & 4) >> 2);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team