Previous 199869 Revisions Next

r34921 Sunday 8th February, 2015 at 02:34:08 UTC by Carl
(mess) pc9801: make port 64 clear vbirq, fixes touhou project 1 (nw)
[src/mess/drivers]pc9801.c

trunk/src/mess/drivers/pc9801.c
r243432r243433
496496
497497   virtual void video_start();
498498   UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
499   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
499500
501   enum
502   {
503      TIMER_VBIRQ
504   };
505
506   emu_timer *m_vbirq;
500507   UINT8 *m_ipl_rom;
501508   UINT8 *m_char_rom;
502509   UINT8 *m_kanji_rom;
r243432r243433
504511   UINT8 m_dma_offset[4];
505512   int m_dack;
506513
507   UINT8 m_vrtc_irq_mask;
508514   UINT8 m_video_ff[8],m_gfx_ff;
509515   UINT8 m_txt_scroll_reg[8];
510516   UINT8 m_pal_clut[4];
r243432r243433
562568   DECLARE_WRITE_LINE_MEMBER( write_uart_clock );
563569   DECLARE_WRITE8_MEMBER(rtc_dmapg_w);
564570   DECLARE_WRITE8_MEMBER(nmi_ctrl_w);
565   DECLARE_WRITE8_MEMBER(vrtc_mask_w);
571   DECLARE_WRITE8_MEMBER(vrtc_clear_w);
566572   DECLARE_WRITE8_MEMBER(pc9801_video_ff_w);
567573   DECLARE_READ8_MEMBER(txt_scrl_r);
568574   DECLARE_WRITE8_MEMBER(txt_scrl_w);
r243432r243433
731737#define ANALOG_16_MODE 0
732738#define ANALOG_256_MODE 0x10
733739
740void pc9801_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
741{
742   switch(id)
743   {
744      case TIMER_VBIRQ:
745         m_pic1->ir2_w(0);
746   }
747}
748
734749void pc9801_state::video_start()
735750{
736751   m_tvram = auto_alloc_array(machine(), UINT16, 0x2000);
r243432r243433
9881003   m_nmi_ff = (offset & 2) >> 1;
9891004}
9901005
991WRITE8_MEMBER(pc9801_state::vrtc_mask_w)
1006WRITE8_MEMBER(pc9801_state::vrtc_clear_w)
9921007{
993   m_vrtc_irq_mask = 1;
1008   m_pic1->ir2_w(0);
9941009}
9951010
9961011WRITE8_MEMBER(pc9801_state::pc9801_video_ff_w)
r243432r243433
17231738   AM_RANGE(0x0050, 0x0057) AM_DEVREADWRITE8("ppi8255_fdd", i8255_device, read, write, 0xff00)
17241739   AM_RANGE(0x0050, 0x0053) AM_WRITE8(nmi_ctrl_w,0x00ff) // NMI FF / i8255 floppy port (2d?)
17251740   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("upd7220_chr", upd7220_device, read, write, 0x00ff) //upd7220 character ports / <undefined>
1726   AM_RANGE(0x0064, 0x0065) AM_WRITE8(vrtc_mask_w,0x00ff)
1741   AM_RANGE(0x0064, 0x0065) AM_WRITE8(vrtc_clear_w,0x00ff)
17271742   AM_RANGE(0x0068, 0x0069) AM_WRITE8(pc9801_video_ff_w,0x00ff) //mode FF / <undefined>
17281743//  AM_RANGE(0x006c, 0x006f) border color / <undefined>
17291744   AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("pit8253", pit8253_device, read, write, 0xff00)
r243432r243433
24172432   AM_RANGE(0x0050, 0x0053) AM_WRITE8(pc9801rs_nmi_w, 0xffffffff)
24182433   AM_RANGE(0x005c, 0x005f) AM_READ16(pc9821_timestamp_r,0xffffffff) AM_WRITENOP // artic
24192434   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("upd7220_chr", upd7220_device, read, write, 0x00ff00ff) //upd7220 character ports / <undefined>
2420   AM_RANGE(0x0064, 0x0067) AM_WRITE8(vrtc_mask_w, 0x000000ff)
2435   AM_RANGE(0x0064, 0x0067) AM_WRITE8(vrtc_clear_w, 0x000000ff)
24212436   AM_RANGE(0x0068, 0x006b) AM_WRITE8(pc9821_video_ff_w,  0x00ff00ff) //mode FF / <undefined>
24222437   AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("pit8253", pit8253_device, read, write, 0xff00ff00)
24232438   AM_RANGE(0x0070, 0x007f) AM_READWRITE8(grcg_r,      grcg_w,      0x00ff00ff) //display registers "GRCG" / i8253 pit
r243432r243433
29822997   m_rtc->oe_w(1);
29832998
29842999   m_ipl_rom = memregion("ipl")->base();
3000   m_vbirq = timer_alloc(TIMER_VBIRQ);
29853001
29863002   save_item(NAME(m_sasi_data));
29873003   save_item(NAME(m_sasi_data_enable));
29883004   save_item(NAME(m_sasi_ctrl));
2989   save_item(NAME(m_vrtc_irq_mask));
29903005}
29913006
29923007MACHINE_START_MEMBER(pc9801_state,pc9801f)
r243432r243433
31163131
31173132INTERRUPT_GEN_MEMBER(pc9801_state::pc9801_vrtc_irq)
31183133{
3119   if(m_vrtc_irq_mask)
3120   {
3121      m_pic1->ir2_w(0);
3122      m_pic1->ir2_w(1);
3123      m_vrtc_irq_mask = 0; // TODO: this irq auto-masks?
3124   }
3125//  else
3126//      pic8259_ir2_w(machine().device("pic8259_master"), 0);
3134   m_pic1->ir2_w(1);
3135   m_vbirq->adjust(m_screen->time_until_vblank_end());
31273136}
31283137
31293138


Previous 199869 Revisions Next


© 1997-2024 The MAME Team