Previous 199869 Revisions Next

r19307 Tuesday 4th December, 2012 at 14:57:21 UTC by Angelo Salese
Check-point
[src/mess/drivers]pc9801.c

trunk/src/mess/drivers/pc9801.c
r19306r19307
275275#define UPD1990A_TAG "upd1990a"
276276#define UPD8251_TAG  "upd8251"
277277
278#define DEBUG_PCG   1
279
278280class pc9801_state : public driver_device
279281{
280282public:
r19306r19307
346348      UINT8 pal_entry;
347349      UINT8 r[16],g[16],b[16];
348350   }m_analog16;
349   UINT8 m_support_16_colors;
350351
351352   /* PC9821 specific */
352353   UINT8 m_analog256,m_analog256e;
r19306r19307
389390   DECLARE_WRITE8_MEMBER(pc9801_tvram_w);
390391   DECLARE_READ8_MEMBER(pc9801_gvram_r);
391392   DECLARE_WRITE8_MEMBER(pc9801_gvram_w);
393   DECLARE_READ8_MEMBER(pc9801_mouse_r);
394   DECLARE_WRITE8_MEMBER(pc9801_mouse_w);
392395//   DECLARE_READ8_MEMBER(pc9801rs_gvram_r);
393396   DECLARE_WRITE8_MEMBER(pc9801rs_gvram_w);
394397   DECLARE_READ8_MEMBER(pc9801_opn_r);
r19306r19307
515518   DECLARE_READ8_MEMBER(ppi_fdd_portb_r);
516519   DECLARE_READ8_MEMBER(ppi_fdd_portc_r);
517520   DECLARE_WRITE8_MEMBER(ppi_fdd_portc_w);
521   DECLARE_READ8_MEMBER(ppi_mouse_porta_r);
522   DECLARE_READ8_MEMBER(ppi_mouse_portb_r);
523   DECLARE_READ8_MEMBER(ppi_mouse_portc_r);
524   DECLARE_WRITE8_MEMBER(ppi_mouse_porta_w);
525   DECLARE_WRITE8_MEMBER(ppi_mouse_portb_w);
526   DECLARE_WRITE8_MEMBER(ppi_mouse_portc_w);
527
518528   DECLARE_WRITE_LINE_MEMBER(fdc_2hd_irq);
519529   DECLARE_WRITE_LINE_MEMBER(fdc_2hd_drq);
520530   DECLARE_WRITE_LINE_MEMBER(fdc_2dd_irq);
r19306r19307
568578      return;
569579
570580   interlace_on = state->m_video_ff[INTERLACE_REG];
571   colors16_mode = (state->m_ex_video_ff[0] && state->m_support_16_colors) ? 16 : 8;
581   colors16_mode = (state->m_ex_video_ff[0]) ? 16 : 8;
572582
573583   for(xi=0;xi<8;xi++)
574584   {
r19306r19307
13491359   }
13501360}
13511361
1362READ8_MEMBER(pc9801_state::pc9801_mouse_r)
1363{
1364   if((offset & 1) == 0)
1365      return 0xff;
1366   else
1367   {
1368      return machine().device<i8255_device>("ppi8255_mouse")->read(space, (offset & 6) >> 1);
1369   }
1370}
13521371
1372WRITE8_MEMBER(pc9801_state::pc9801_mouse_w)
1373{
1374   if((offset & 1) == 0)
1375   {
1376      //return 0xff;
1377   }
1378   else
1379   {
1380      machine().device<i8255_device>("ppi8255_mouse")->write(space, (offset & 6) >> 1,data);
1381   }
1382}
1383
1384
13531385static ADDRESS_MAP_START( pc9801_map, AS_PROGRAM, 16, pc9801_state )
13541386   AM_RANGE(0x00000, 0x9ffff) AM_RAM //work RAM
13551387   AM_RANGE(0xa0000, 0xa3fff) AM_READWRITE8(pc9801_tvram_r,pc9801_tvram_w,0xffff) //TVRAM
r19306r19307
13771409   AM_RANGE(0x00a0, 0x00af) AM_READWRITE8(pc9801_a0_r,pc9801_a0_w,0xffff) //upd7220 bitmap ports / display registers
13781410   AM_RANGE(0x00c8, 0x00cd) AM_READWRITE8(pc9801_fdc_2dd_r,pc9801_fdc_2dd_w,0xffff) //upd765a 2dd / <undefined>
13791411   AM_RANGE(0x0188, 0x018b) AM_READWRITE8(pc9801_opn_r,pc9801_opn_w,0xffff) //ym2203 opn / <undefined>
1412   AM_RANGE(0x7fd8, 0x7fdf) AM_READWRITE8(pc9801_mouse_r,pc9801_mouse_w,0xffff) // <undefined> / mouse ppi8255 ports
13801413ADDRESS_MAP_END
13811414
13821415/*************************************
r19306r19307
27132746   DEVCB_DRIVER_MEMBER(pc9801_state,ppi_fdd_portc_w)               /* Port C write */
27142747};
27152748
2749READ8_MEMBER(pc9801_state::ppi_mouse_porta_r)
2750{
2751   printf("A\n");
2752   return 0xff;
2753}
2754
2755READ8_MEMBER(pc9801_state::ppi_mouse_portb_r)
2756{
2757   printf("B\n");
2758   return 0xff;
2759}
2760
2761READ8_MEMBER(pc9801_state::ppi_mouse_portc_r)
2762{
2763   printf("C\n");
2764   return 0xff;
2765}
2766
2767WRITE8_MEMBER(pc9801_state::ppi_mouse_porta_w)
2768{
2769   printf("A %02x\n",data);
2770}
2771
2772WRITE8_MEMBER(pc9801_state::ppi_mouse_portb_w)
2773{
2774   printf("B %02x\n",data);
2775}
2776
2777WRITE8_MEMBER(pc9801_state::ppi_mouse_portc_w)
2778{
2779   printf("C %02x\n",data);
2780}
2781
2782static I8255A_INTERFACE( ppi_mouse_intf )
2783{
2784   DEVCB_DRIVER_MEMBER(pc9801_state,ppi_mouse_porta_r),               /* Port A read */
2785   DEVCB_DRIVER_MEMBER(pc9801_state,ppi_mouse_porta_w),               /* Port A write */
2786   DEVCB_DRIVER_MEMBER(pc9801_state,ppi_mouse_portb_r),               /* Port B read */
2787   DEVCB_DRIVER_MEMBER(pc9801_state,ppi_mouse_portb_w),               /* Port B write */
2788   DEVCB_DRIVER_MEMBER(pc9801_state,ppi_mouse_portc_r),               /* Port C read */
2789   DEVCB_DRIVER_MEMBER(pc9801_state,ppi_mouse_portc_w)               /* Port C write */
2790};
2791
27162792/****************************************
27172793*
27182794* UPD765 interface
r19306r19307
28242900   m_ipl_rom = memregion("ipl")->base();
28252901   m_pcg_ram = auto_alloc_array(machine(), UINT8, 0x80000);
28262902
2827   m_support_16_colors = 0;
28282903   state_save_register_global_pointer(machine(), m_pcg_ram, 0x80000);
28292904}
28302905
r19306r19307
28682943   state_save_register_global_pointer(machine(), m_work_ram, 0xa0000);
28692944   state_save_register_global_pointer(machine(), m_ext_work_ram, 0x700000);
28702945
2871   m_support_16_colors = 1;
2872
28732946   upd765a_device *fdc;
28742947   fdc = machine().device<upd765a_device>(":upd765_2hd");
28752948   fdc->setup_intrq_cb(upd765a_device::line_cb(FUNC(pc9801_state::pc9801rs_fdc_irq), this));
r19306r19307
30323105   MCFG_I8255_ADD( "ppi8255_sys", ppi_system_intf )
30333106   MCFG_I8255_ADD( "ppi8255_prn", ppi_printer_intf )
30343107   MCFG_I8255_ADD( "ppi8255_fdd", ppi_fdd_intf )
3108   MCFG_I8255_ADD( "ppi8255_mouse", ppi_mouse_intf )
30353109   MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, pc9801_upd1990a_intf)
30363110   MCFG_I8251_ADD(UPD8251_TAG, pc9801_uart_interface)
30373111

Previous 199869 Revisions Next


© 1997-2024 The MAME Team