Previous 199869 Revisions Next

r19079 Tuesday 20th November, 2012 at 21:11:35 UTC by Angelo Salese
PC-88VA: fixed irq generation, but FDC still won't work for whatever reason
[src/mess/drivers]pc88va.c

trunk/src/mess/drivers/pc88va.c
r19078r19079
2828#include "machine/upd765.h"
2929#include "sound/2203intf.h"
3030#include "formats/mfi_dsk.h"
31#include "formats/pc_dsk.h"
3231#include "formats/xdf_dsk.h"
32#include "formats/d88_dsk.h"
3333
3434/* Note: for the time being, just disable FDC CPU, it's for PC-8801 compatibility mode anyway ... */
3535#define TEST_SUBFDC 0
r19078r19079
128128   DECLARE_READ8_MEMBER(get_slave_ack);
129129   DECLARE_WRITE_LINE_MEMBER(pc88va_pit_out0_changed);
130130   DECLARE_WRITE_LINE_MEMBER(pc88va_upd765_interrupt);
131   UINT8 m_fdc_ctrl_2;
132   TIMER_CALLBACK_MEMBER(pc88va_fdc_timer);
131133
132134   void upd765_interrupt(bool state);
133135};
r19078r19079
987989   return 0xff;
988990}
989991
992TIMER_CALLBACK_MEMBER(pc88va_state::pc88va_fdc_timer)
993{
994   if(m_fdc_ctrl_2 & 4) // XTMASK
995   {
996      pic8259_ir3_w(machine().device( "pic8259_slave"), 0);
997      pic8259_ir3_w(machine().device( "pic8259_slave"), 1);
998   }
999}
1000
9901001WRITE8_MEMBER(pc88va_state::pc88va_fdc_w)
9911002{
992   printf("%08x %02x\n",offset,data);
993   switch(offset*2)
1003   printf("%08x %02x\n",offset<<1,data);
1004   switch(offset<<1)
9941005   {
9951006      /*
9961007        ---- ---x MODE: FDC op mode (0) Intelligent (1) DMA
r19078r19079
10221033        ---- ---x TTRG: FDC timer trigger (0) FDC timer clearing (1) FDC timer start
10231034        */
10241035      case 0x06:
1025         printf("%02x\n",data);
1036         //printf("%02x\n",data);
1037         m_fdc_ctrl_2 = data;
1038
1039         if(data & 1)
1040            machine().scheduler().timer_set(attotime::from_msec(100), timer_expired_delegate(FUNC(pc88va_state::pc88va_fdc_timer),this));
1041
1042         if(data & 0x80) // correct?
1043            machine().device<upd765a_device>("upd765")->reset();
1044
10261045         break; // FDC control port 2
10271046   }
10281047}
r19078r19079
10511070{
10521071   if(m_timer3_io_reg & 0x80)
10531072   {
1073      pic8259_ir5_w(machine().device("pic8259_slave"), 0);
10541074      pic8259_ir5_w(machine().device("pic8259_slave"), 1);
10551075      m_t3_mouse_timer->adjust(attotime::from_hz(120 >> (m_timer3_io_reg & 3)));
10561076   }
r19078r19079
15601580   m_t3_mouse_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pc88va_state::t3_mouse_callback),this));
15611581   m_t3_mouse_timer->adjust(attotime::never);
15621582   machine().device<upd765a_device>("upd765")->setup_intrq_cb(upd765a_device::line_cb(FUNC(pc88va_state::upd765_interrupt), this));
1583
1584   machine().device<floppy_connector>("upd765:0")->get_device()->set_rpm(300);
1585   machine().device<floppy_connector>("upd765:1")->get_device()->set_rpm(300);
1586   machine().device<upd765a_device>("upd765")->set_rate(250000);
15631587}
15641588
15651589void pc88va_state::machine_reset()
r19078r19079
15921616
15931617INTERRUPT_GEN_MEMBER(pc88va_state::pc88va_vrtc_irq)
15941618{
1619   pic8259_ir2_w(machine().device("pic8259_master"), 0);
15951620   pic8259_ir2_w(machine().device("pic8259_master"), 1);
15961621}
15971622
15981623WRITE_LINE_MEMBER(pc88va_state::pc88va_pit_out0_changed)
15991624{
1600   pic8259_ir0_w(machine().device("pic8259_master"), 1);
1625   if(state)
1626   {
1627      pic8259_ir0_w(machine().device("pic8259_master"), 0);
1628      pic8259_ir0_w(machine().device("pic8259_master"), 1);
1629   }
16011630}
16021631
16031632static const struct pit8253_config pc88va_pit8253_config =
r19078r19079
16271656
16281657void pc88va_state::upd765_interrupt(bool state)
16291658{
1630   if(m_fdc_mode)
1631      pic8259_ir3_w(machine().device( "pic8259_slave"), state);
1659   if(m_fdc_mode && state)
1660   {
1661      //printf("%d\n",state);
1662      pic8259_ir3_w(machine().device( "pic8259_slave"), 0);
1663      pic8259_ir3_w(machine().device( "pic8259_slave"), 1);
1664   }
1665   #if TEST_SUBFDC
16321666   else
16331667      machine().device("fdccpu")->execute().set_input_line(0, HOLD_LINE);
1668   #endif
16341669}
16351670
16361671
r19078r19079
16481683};
16491684
16501685static const floppy_format_type pc88va_floppy_formats[] = {
1651   FLOPPY_PC_FORMAT,
16521686   FLOPPY_XDF_FORMAT,
16531687   FLOPPY_MFI_FORMAT,
1688   FLOPPY_D88_FORMAT,
16541689   NULL
16551690};
16561691
r19078r19079
16911726   MCFG_PIC8259_ADD( "pic8259_master", pc88va_pic8259_master_config )
16921727   MCFG_PIC8259_ADD( "pic8259_slave", pc88va_pic8259_slave_config )
16931728
1694   MCFG_UPD765A_ADD("upd765", true, true)
1729   MCFG_UPD765A_ADD("upd765", false, true)
16951730   MCFG_FLOPPY_DRIVE_ADD("upd765:0", pc88va_floppies, "525hd", 0, pc88va_floppy_formats)
16961731   MCFG_FLOPPY_DRIVE_ADD("upd765:1", pc88va_floppies, "525hd", 0, pc88va_floppy_formats)
16971732   MCFG_SOFTWARE_LIST_ADD("disk_list","pc88va")

Previous 199869 Revisions Next


© 1997-2024 The MAME Team