コード例 #1
0
ファイル: vid_ati68860_ramdac.c プロジェクト: startmenu/PCemN
void ati68860_ramdac_out(uint16_t addr, uint8_t val, ati68860_ramdac_t *ramdac, svga_t *svga)
{
//        pclog("ati68860_out : addr %04X val %02X  %04X:%04X\n", addr, val, CS,pc);
        switch (addr)
        {
                case 0: 
                svga_out(0x3c8, val, svga);
                break;
                case 1: 
                svga_out(0x3c9, val, svga); 
                break;
                case 2: 
                svga_out(0x3c6, val, svga); 
                break;
                case 3: 
                svga_out(0x3c7, val, svga); 
                break;
                default:
                ramdac->regs[addr & 0xf] = val;
                switch (addr & 0xf)
                {
                        case 0xb:
                        switch (val)
                        {
                                case 0x82:
                                ramdac->render = svga_render_4bpp_highres;
                                break;
                                case 0x83:
                                ramdac->render = svga_render_8bpp_highres;
                                break;
                                case 0xa0:
                                ramdac->render = svga_render_15bpp_highres;
                                break;
                                case 0xa1: case 0xb1:
                                ramdac->render = svga_render_16bpp_highres;
                                break;
                                case 0xc0: case 0xd0:
                                ramdac->render = svga_render_24bpp_highres;
                                break;
                                case 0xe2:
                                ramdac->render = svga_render_32bpp_highres;
                                break;
                                case 0xf2:
                                ramdac->render = svga_render_RGBA8888_highres;
                                break;
                                default:
                                ramdac->render = svga_render_8bpp_highres;
                                break;
                        }
                        break;
                }
                break;
        }
}
コード例 #2
0
ファイル: vid_vga.c プロジェクト: MoochMcGee/PCem-mooch
void vga_out(uint16_t addr, uint8_t val, void *p)
{
        vga_t *vga = (vga_t *)p;
        svga_t *svga = &vga->svga;
        uint8_t old;
        
//        pclog("vga_out : %04X %02X  %04X:%04X  %02X  %i\n", addr, val, CS,pc, ram[0x489], ins);
                
        if (((addr & 0xfff0) == 0x3d0 || (addr & 0xfff0) == 0x3b0) && !(svga->miscout & 1)) 
                addr ^= 0x60;

        switch (addr)
        {
                case 0x3D4:
                svga->crtcreg = val & 0x1f;
                return;
                case 0x3D5:
                if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80))
                        return;
                if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80))
                        val = (svga->crtc[7] & ~0x10) | (val & 0x10);
                old = svga->crtc[svga->crtcreg];
                svga->crtc[svga->crtcreg] = val;
                if (old != val)
                {
                        if (svga->crtcreg < 0xe || svga->crtcreg > 0x10)
                        {
                                svga->fullchange = changeframecount;
                                svga_recalctimings(svga);
                        }
                }
                break;
        }
        svga_out(addr, val, svga);
}
コード例 #3
0
ファイル: vid_tvga.c プロジェクト: MoochMcGee/PCem-X-libretro
void tvga_out(uint16_t addr, uint8_t val, void *p)
{
        tvga_t *tvga = (tvga_t *)p;
        svga_t *svga = &tvga->svga;

        uint8_t old;

//	pclog("tvga_out : %04X %02X  %04X:%04X  %i\n", addr, val, CS,pc, svga->bpp);
        if (((addr&0xFFF0) == 0x3D0 || (addr&0xFFF0) == 0x3B0) && !(svga->miscout & 1)) addr ^= 0x60;

        switch (addr)
        {
                case 0x3C5:
                switch (svga->seqaddr & 0xf)
                {
                        case 0xB: 
                        tvga->oldmode=1; 
                        break;
                        case 0xC: 
                        if (svga->seqregs[0xe] & 0x80) 
                                svga->seqregs[0xc] = val; 
                        break;
                        case 0xd: 
                        if (tvga->oldmode) 
                                tvga->oldctrl2 = val;                                
                        else
                        {
                                tvga->newctrl2 = val;
                                svga_recalctimings(svga);
                        }
                        break;
                        case 0xE:
                        if (tvga->oldmode) 
                                tvga->oldctrl1 = val; 
                        else 
                        {
                                svga->seqregs[0xe] = val ^ 2;
                                svga->write_bank = (svga->seqregs[0xe] & 0xf) * 65536;
                                if (!(svga->gdcreg[0xf] & 1)) 
                                        svga->read_bank = svga->write_bank;
                        }
                        return;
                }
                break;

                case 0x3C6: case 0x3C7: case 0x3C8: case 0x3C9:
                tkd8001_ramdac_out(addr, val, &tvga->ramdac, svga);
                return;

                case 0x3CF:
                switch (svga->gdcaddr & 15)
                {
                        case 0xE:
                        svga->gdcreg[0xe] = val ^ 2;
                        if ((svga->gdcreg[0xf] & 1) == 1)
                           svga->read_bank = (svga->gdcreg[0xe] & 0xf) * 65536;
                        break;
                        case 0xF:
                        if (val & 1) svga->read_bank = (svga->gdcreg[0xe]  & 0xf)  *65536;
                        else         svga->read_bank = (svga->seqregs[0xe] & 0xf)  *65536;
                        svga->write_bank = (svga->seqregs[0xe] & 0xf) * 65536;
                        break;
                }
                break;
                case 0x3D4:
		svga->crtcreg = val & 0x3f;
                return;
                case 0x3D5:
                if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80))
                        return;
                if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80))
                        val = (svga->crtc[7] & ~0x10) | (val & 0x10);
                old = svga->crtc[svga->crtcreg];
                val &= crtc_mask[svga->crtcreg];
                svga->crtc[svga->crtcreg] = val;
//                if (svga->crtcreg != 0xC && svga->crtcreg != 0xE && svga->crtcreg != 0xF) pclog("CRTC R%02X = %02X %04X:%04X\n", svga->crtcreg, val, CS, pc);
                if (old != val)
                {
                        if (svga->crtcreg < 0xE || svga->crtcreg > 0x10)
                        {
                                svga->fullchange = changeframecount;
                                svga_recalctimings(svga);
                        }
                }
                switch (svga->crtcreg)
                {
                        case 0x1e:
                        svga->vrammask = (val & 0x80) ? tvga->vram_mask : 0x3ffff;
                        break;
                }
                return;
                case 0x3D8:
                tvga->tvga_3d8 = val;
                if (svga->gdcreg[0xf] & 4)
                {
                        svga->write_bank = (val & 0x1f) * 65536;
//                                pclog("SVGAWBANK 3D8 %08X %04X:%04X\n",svgawbank,CS,pc);
                        if (!(svga->gdcreg[0xf] & 1))
                        {
                                svga->read_bank = (val & 0x1f) * 65536;
//                                        pclog("SVGARBANK 3D8 %08X %04X:%04X\n",svgarbank,CS,pc);
                        }
                }
                return;
                case 0x3D9:
                tvga->tvga_3d9=val;
                if ((svga->gdcreg[0xf] & 5) == 5)
                {
                        svga->read_bank = (val & 0x1F) * 65536;
//                                pclog("SVGARBANK 3D9 %08X %04X:%04X\n",svgarbank,CS,pc);
                }
                return;
        }
        svga_out(addr, val, svga);
}
コード例 #4
0
ファイル: vid_ati68860_ramdac.c プロジェクト: Nado15/86Box
void ati68860_ramdac_out(uint16_t addr, uint8_t val, ati68860_ramdac_t *ramdac, svga_t *svga)
{
        switch (addr)
        {
                case 0: 
                svga_out(0x3c8, val, svga);
                break;
                case 1: 
                svga_out(0x3c9, val, svga); 
                break;
                case 2: 
                svga_out(0x3c6, val, svga); 
                break;
                case 3: 
                svga_out(0x3c7, val, svga); 
                break;
                default:
                ramdac->regs[addr & 0xf] = val;
                switch (addr & 0xf)
                {
                        case 0x4:
                        ramdac->dac_write = val;
                        ramdac->dac_pos = 0;
                        break;
                        case 0x5:
                        switch (ramdac->dac_pos)
                        {
                                case 0: 
                                ramdac->dac_r = val;
                                ramdac->dac_pos++; 
                                break;
                                case 1: 
                                ramdac->dac_g = val;
                                ramdac->dac_pos++; 
                                break;
                                case 2: 
                                if (ramdac->dac_write > 1)
                                        break;
                                ramdac->pal[ramdac->dac_write].r = ramdac->dac_r; 
                                ramdac->pal[ramdac->dac_write].g = ramdac->dac_g;
                                ramdac->pal[ramdac->dac_write].b = val; 
                                if (ramdac->ramdac_type == RAMDAC_8BIT)
                                        ramdac->pallook[ramdac->dac_write] = makecol32(ramdac->pal[ramdac->dac_write].r, ramdac->pal[ramdac->dac_write].g, ramdac->pal[ramdac->dac_write].b);
                                else
                                        ramdac->pallook[ramdac->dac_write] = makecol32((ramdac->pal[ramdac->dac_write].r & 0x3f) * 4, (ramdac->pal[ramdac->dac_write].g & 0x3f) * 4, (ramdac->pal[ramdac->dac_write].b & 0x3f) * 4); 
                                ramdac->dac_pos = 0; 
                                ramdac->dac_write = (ramdac->dac_write + 1) & 255; 
                                break;
                        }
                        break;
                        
                        case 0xb:
                        switch (val)
                        {
                                case 0x82:
                                ramdac->render = svga_render_4bpp_highres;
                                break;
                                case 0x83:
                                ramdac->render = svga_render_8bpp_highres;
                                break;
                                case 0xa0: case 0xb0:
                                ramdac->render = svga_render_15bpp_highres;
                                break;
                                case 0xa1: case 0xb1:
                                ramdac->render = svga_render_16bpp_highres;
                                break;
                                case 0xc0: case 0xd0:
                                ramdac->render = svga_render_24bpp_highres;
                                break;
                                case 0xe2: case 0xf7:
                                ramdac->render = svga_render_32bpp_highres;
                                break;
                                case 0xe3:
                                ramdac->render = svga_render_ABGR8888_highres;
                                break;
                                case 0xf2:
                                ramdac->render = svga_render_RGBA8888_highres;
                                break;
                                default:
                                ramdac->render = svga_render_8bpp_highres;
                                break;
                        }
                        break;
                        case 0xc:
                        svga_set_ramdac_type(svga, (val & 1) ? RAMDAC_6BIT : RAMDAC_8BIT);
                        break;
                }
                break;
        }
}