Previous 199869 Revisions Next

r19181 Wednesday 28th November, 2012 at 03:49:24 UTC by Angelo Salese
Made some floppy work
[src/mess/drivers]pc9801.c

trunk/src/mess/drivers/pc9801.c
r19180r19181
374374   DECLARE_WRITE8_MEMBER(pc9810rs_fdc_ctrl_w);
375375   DECLARE_READ8_MEMBER(pc9801rs_2hd_r);
376376   DECLARE_WRITE8_MEMBER(pc9801rs_2hd_w);
377   DECLARE_READ8_MEMBER(pc9801rs_2dd_r);
378   DECLARE_WRITE8_MEMBER(pc9801rs_2dd_w);
377//   DECLARE_READ8_MEMBER(pc9801rs_2dd_r);
378//   DECLARE_WRITE8_MEMBER(pc9801rs_2dd_w);
379379   DECLARE_WRITE8_MEMBER(pc9801rs_video_ff_w);
380380   DECLARE_WRITE8_MEMBER(pc9801rs_a0_w);
381381   DECLARE_READ8_MEMBER(pc980ux_memory_r);
r19180r19181
14671467
14681468READ8_MEMBER(pc9801_state::pc9810rs_fdc_ctrl_r)
14691469{
1470
1471   return (m_fdc_ctrl & 3) | 8;
1470   return (m_fdc_ctrl & 3) | 0xf0 | 8 | 4;
14721471}
14731472
14741473WRITE8_MEMBER(pc9801_state::pc9810rs_fdc_ctrl_w)
r19180r19181
14791478    ---- ---x select irq
14801479    */
14811480
1481   machine().device<floppy_connector>("upd765_2hd:0")->get_device()->set_rpm(data & 0x02 ? 360 : 300);
1482   machine().device<floppy_connector>("upd765_2hd:1")->get_device()->set_rpm(data & 0x02 ? 360 : 300);
1483
1484   machine().device<upd765a_device>("upd765_2hd")->set_rate(data & 0x02 ? 500000 : 250000);
1485
14821486   m_fdc_ctrl = data;
14831487   if(data & 0xfc)
14841488      printf("FDC ctrl called with %02x\n",data);
r19180r19181
14921496      {
14931497         case 0:   return machine().device<upd765a_device>("upd765_2hd")->msr_r(space, 0, 0xff);
14941498         case 2: return machine().device<upd765a_device>("upd765_2hd")->fifo_r(space, 0, 0xff);
1495         case 4: return 0x40; //2hd flag
1499         case 4: return 0x44; //2hd flag
14961500      }
14971501   }
14981502
r19180r19181
15081512      switch(offset & 6)
15091513      {
15101514         case 2: machine().device<upd765a_device>("upd765_2hd")->fifo_w(space, 0, data, 0xff); return;
1511         case 4: printf("%02x 2HD FDC ctrl\n",data); return;
1515         case 4:
1516            if(data & 0x80)
1517               machine().device<upd765a_device>("upd765_2hd")->reset();
1518
1519            if(data & 0x40)
1520               machine().device<upd765a_device>("upd765_2hd")->ready_w(1);
1521
1522            machine().device<floppy_connector>("upd765_2hd:0")->get_device()->mon_w(!(data & 0x08));
1523            machine().device<floppy_connector>("upd765_2hd:1")->get_device()->mon_w(!(data & 0x08));
1524            return;
15121525      }
15131526   }
15141527
15151528   printf("Write to undefined port [%02x] %02x\n",offset+0x90,data);
15161529}
15171530
1531#if 0
15181532READ8_MEMBER(pc9801_state::pc9801rs_2dd_r)
15191533{
15201534
r19180r19181
15271541      {
15281542         case 0:   return machine().device<upd765a_device>("upd765_2hd")->msr_r(space, 0, 0xff);
15291543         case 2: return machine().device<upd765a_device>("upd765_2hd")->fifo_r(space, 0, 0xff);
1530         case 4: return 0x70; //2dd flag
1544         case 4: return 0x44; //2dd flag
15311545      }
15321546   }
15331547
r19180r19181
15531567
15541568   printf("Write to undefined port [%02x] %02x\n",offset+0x90,data);
15551569}
1570#endif
15561571
15571572WRITE8_MEMBER(pc9801_state::pc9801rs_video_ff_w)
15581573{
r19180r19181
16371652   AM_RANGE(0x0090, 0x0097) AM_READWRITE8(pc9801rs_2hd_r,     pc9801rs_2hd_w,     0xffffffff)
16381653   AM_RANGE(0x00a0, 0x00af) AM_READWRITE8(pc9801_a0_r,        pc9801rs_a0_w,      0xffffffff) //upd7220 bitmap ports / display registers
16391654   AM_RANGE(0x00bc, 0x00bf) AM_READWRITE8(pc9810rs_fdc_ctrl_r,pc9810rs_fdc_ctrl_w,0xffffffff)
1640   AM_RANGE(0x00c8, 0x00cf) AM_READWRITE8(pc9801rs_2dd_r,     pc9801rs_2dd_w,     0xffffffff)
1655   AM_RANGE(0x00c8, 0x00cf) AM_READWRITE8(pc9801rs_2hd_r,     pc9801rs_2hd_w,     0xffffffff)
16411656   AM_RANGE(0x00f0, 0x00ff) AM_READWRITE8(pc9801rs_f0_r,      pc9801rs_f0_w,      0xffffffff)
16421657   AM_RANGE(0x0438, 0x043b) AM_READWRITE8(pc9801rs_access_ctrl_r,pc9801rs_access_ctrl_w,0xffffffff)
16431658   AM_RANGE(0x043c, 0x043f) AM_WRITE8(pc9801rs_bank_w,    0xffffffff) //ROM/RAM bank
r19180r19181
16971712   AM_RANGE(0x0090, 0x0097) AM_READWRITE8(pc9801rs_2hd_r,     pc9801rs_2hd_w,     0xffff)
16981713   AM_RANGE(0x00a0, 0x00af) AM_READWRITE8(pc9801_a0_r,        pc9801rs_a0_w,      0xffff) //upd7220 bitmap ports / display registers
16991714   AM_RANGE(0x00bc, 0x00bf) AM_READWRITE8(pc9810rs_fdc_ctrl_r,pc9810rs_fdc_ctrl_w,0xffff)
1700   AM_RANGE(0x00c8, 0x00cf) AM_READWRITE8(pc9801rs_2dd_r,     pc9801rs_2dd_w,     0xffff)
1715   AM_RANGE(0x00c8, 0x00cf) AM_READWRITE8(pc9801rs_2hd_r,     pc9801rs_2hd_w,     0xffff)
17011716   AM_RANGE(0x00f0, 0x00ff) AM_READWRITE8(pc9801rs_f0_r,      pc9801rs_f0_w,      0xffff)
17021717   AM_RANGE(0x0438, 0x043b) AM_READWRITE8(pc9801rs_access_ctrl_r,pc9801rs_access_ctrl_w,0xffff)
17031718   AM_RANGE(0x043c, 0x043f) AM_WRITE8(pc9801rs_bank_w,    0xffff) //ROM/RAM bank
r19180r19181
19872002//  AM_RANGE(0x00b9, 0x00b9) PC9861k
19882003//  AM_RANGE(0x00bb, 0x00bb) PC9861k
19892004   AM_RANGE(0x00bc, 0x00bf) AM_READWRITE8(pc9810rs_fdc_ctrl_r,pc9810rs_fdc_ctrl_w,0xffffffff)
1990   AM_RANGE(0x00c8, 0x00cf) AM_READWRITE8(pc9801rs_2dd_r,     pc9801rs_2dd_w,     0xffffffff)
2005   AM_RANGE(0x00c8, 0x00cf) AM_READWRITE8(pc9801rs_2hd_r,     pc9801rs_2hd_w,     0xffffffff)
19912006//  AM_RANGE(0x00d8, 0x00df) AMD98 (sound?) board
19922007   AM_RANGE(0x00f0, 0x00ff) AM_READWRITE8(pc9801rs_f0_r,      pc9801rs_f0_w,      0xffffffff)
19932008//  AM_RANGE(0x0188, 0x018b) YM2203 OPN board / <undefined>
r19180r19181
25592574   DEVCB_DRIVER_LINE_MEMBER(pc9801_state, pc9801_tc_w),
25602575   DEVCB_DRIVER_MEMBER(pc9801_state, pc9801_dma_read_byte),
25612576   DEVCB_DRIVER_MEMBER(pc9801_state, pc9801_dma_write_byte),
2562   { DEVCB_NULL, DEVCB_DRIVER_MEMBER(pc9801_state,fdc_r), DEVCB_NULL, DEVCB_NULL },
2563   { DEVCB_NULL, DEVCB_DRIVER_MEMBER(pc9801_state,fdc_w), DEVCB_NULL, DEVCB_NULL },
2577   { DEVCB_NULL, DEVCB_DRIVER_MEMBER(pc9801_state,fdc_r), DEVCB_DRIVER_MEMBER(pc9801_state,fdc_r), DEVCB_DRIVER_MEMBER(pc9801_state,fdc_r) },
2578   { DEVCB_NULL, DEVCB_DRIVER_MEMBER(pc9801_state,fdc_w), DEVCB_DRIVER_MEMBER(pc9801_state,fdc_w), DEVCB_DRIVER_MEMBER(pc9801_state,fdc_w) },
25642579   { DEVCB_DRIVER_LINE_MEMBER(pc9801_state, pc9801_dack0_w), DEVCB_DRIVER_LINE_MEMBER(pc9801_state, pc9801_dack1_w), DEVCB_DRIVER_LINE_MEMBER(pc9801_state, pc9801_dack2_w), DEVCB_DRIVER_LINE_MEMBER(pc9801_state, pc9801_dack3_w) }
25652580};
25662581
r19180r19181
26692684{
26702685   /* 0xffaf8 */
26712686
2687   printf("%02x %d\n",m_fdc_ctrl,state);
2688
26722689   if(m_fdc_ctrl & 1)
26732690      pic8259_ir3_w(machine().device("pic8259_slave"), state);
26742691   else
r19180r19181
28092826
28102827MACHINE_START_MEMBER(pc9801_state,pc9821)
28112828{
2812   MACHINE_START_CALL_MEMBER(pc9801);
2829   machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback);
28132830
2831   m_rtc->cs_w(1);
2832   m_rtc->oe_w(1);
2833
2834   upd765a_device *fdc;
2835   fdc = machine().device<upd765a_device>(":upd765_2hd");
2836   fdc->setup_intrq_cb(upd765a_device::line_cb(FUNC(pc9801_state::pc9801rs_fdc_irq), this));
2837   fdc->setup_drq_cb(upd765a_device::line_cb(FUNC(pc9801_state::fdc_2hd_drq), this));
2838
28142839   m_ideram = auto_alloc_array(machine(), UINT8, 0x2000);
28152840   m_vram256 = auto_alloc_array(machine(), UINT8, 0x8000);
28162841   m_ext_gvram = auto_alloc_array(machine(), UINT8, 0xa0000);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team