trunk/src/emu/video/pc_vga.c
| r17875 | r17876 | |
| 3103 | 3103 | } |
| 3104 | 3104 | } |
| 3105 | 3105 | |
| 3106 | READ8_HANDLER( ati_port_03c0_r ) |
| 3107 | { |
| 3108 | UINT8 data = 0xff; |
| 3109 | |
| 3110 | switch(offset) |
| 3111 | { |
| 3112 | case 1: |
| 3113 | if ((vga.attribute.index&0x1f) < sizeof(vga.attribute.data)) |
| 3114 | data = vga.attribute.data[vga.attribute.index&0x1f]; |
| 3115 | break; |
| 3116 | default: |
| 3117 | data = vga_port_03c0_r(space,offset); |
| 3118 | break; |
| 3119 | } |
| 3120 | return data; |
| 3121 | } |
| 3122 | |
| 3123 | |
| 3106 | 3124 | /* accelerated ports, TBD ... */ |
| 3107 | 3125 | |
| 3108 | | |
| 3109 | 3126 | static void s3_write_fg(UINT32 offset) |
| 3110 | 3127 | { |
| 3111 | 3128 | UINT8 dst = vga.memory[offset]; |
| r17875 | r17876 | |
| 4858 | 4875 | int clock; |
| 4859 | 4876 | UINT8 clock_type; |
| 4860 | 4877 | int div = ((ati.ext_reg[0x38] & 0xc0) >> 6) + 1; |
| 4878 | int divisor = 1; |
| 4861 | 4879 | |
| 4862 | 4880 | svga.rgb8_en = 0; |
| 4863 | 4881 | svga.rgb15_en = 0; |
| r17875 | r17876 | |
| 4922 | 4940 | clock = XTAL_42_9545MHz; |
| 4923 | 4941 | logerror("Invalid dot clock %i selected.\n",clock_type); |
| 4924 | 4942 | } |
| 4925 | | |
| 4926 | | recompute_params_clock(machine,1,clock / div); |
| 4943 | // logerror("ATI: Clock select type %i (%iHz / %i)\n",clock_type,clock,div); |
| 4944 | recompute_params_clock(machine,divisor,clock / div); |
| 4927 | 4945 | } |
| 4928 | 4946 | |
| 4929 | 4947 | READ8_HANDLER( ati_mem_r ) |
| r17875 | r17876 | |
| 4978 | 4996 | } |
| 4979 | 4997 | break; |
| 4980 | 4998 | } |
| 4981 | | |
| 4982 | 4999 | return ret; |
| 4983 | 5000 | } |
| 4984 | 5001 | |
| r17875 | r17876 | |
| 4996 | 5013 | case 0x23: |
| 4997 | 5014 | vga.crtc.start_addr = (vga.crtc.start_addr & 0xfffdffff) | ((data & 0x10) << 13); |
| 4998 | 5015 | vga.crtc.cursor_addr = (vga.crtc.cursor_addr & 0xfffdffff) | ((data & 0x08) << 14); |
| 5016 | logerror("ATI: ATI23 write %02x\n",data); |
| 4999 | 5017 | break; |
| 5000 | 5018 | case 0x2d: |
| 5001 | 5019 | if(data & 0x08) |
| r17875 | r17876 | |
| 5003 | 5021 | vga.crtc.horz_total = (vga.crtc.horz_total & 0x00ff) | (data & 0x01) << 8; |
| 5004 | 5022 | // bit 1 = bit 8 of horizontal blank start |
| 5005 | 5023 | // bit 2 = bit 8 of horizontal retrace start |
| 5006 | | logerror("ATI: ATI2D (extensions) write %02x\n",data); |
| 5007 | 5024 | } |
| 5025 | logerror("ATI: ATI2D (extensions) write %02x\n",data); |
| 5008 | 5026 | break; |
| 5009 | 5027 | case 0x30: |
| 5010 | 5028 | vga.crtc.start_addr = (vga.crtc.start_addr & 0xfffeffff) | ((data & 0x40) << 10); |
| 5011 | 5029 | vga.crtc.cursor_addr = (vga.crtc.cursor_addr & 0xfffeffff) | ((data & 0x04) << 14); |
| 5030 | logerror("ATI: ATI30 write %02x\n",data); |
| 5012 | 5031 | break; |
| 5013 | 5032 | case 0x32: // memory page select |
| 5014 | 5033 | if(ati.ext_reg[0x3e] & 0x08) |
| r17875 | r17876 | |
| 5021 | 5040 | svga.bank_r = ((data & 0x1e) >> 1); |
| 5022 | 5041 | svga.bank_w = ((data & 0x1e) >> 1); |
| 5023 | 5042 | } |
| 5024 | | logerror("ATI: Memory Page Select write %02x (read: %i write %i)\n",data,svga.bank_r,svga.bank_w); |
| 5043 | //logerror("ATI: Memory Page Select write %02x (read: %i write %i)\n",data,svga.bank_r,svga.bank_w); |
| 5025 | 5044 | break; |
| 5026 | 5045 | case 0x33: // EEPROM |
| 5027 | 5046 | if(data & 0x04) |
| r17875 | r17876 | |
| 5034 | 5053 | eep->set_cs_line((data & 0x08) ? CLEAR_LINE : ASSERT_LINE); |
| 5035 | 5054 | } |
| 5036 | 5055 | } |
| 5056 | else |
| 5057 | logerror("ATI: ATI33 write %02x\n",data); |
| 5037 | 5058 | break; |
| 5038 | 5059 | default: |
| 5039 | 5060 | logerror("ATI: Extended VGA register 0x01CE index %02x write %02x\n",ati.ext_reg_select,data); |
trunk/src/mess/video/isa_vga_ati.c
| r17875 | r17876 | |
| 81 | 81 | m_isa->install_device(this, 0x1ce, 0x1cf, 0, 0, FUNC(ati_port_ext_r), FUNC(ati_port_ext_w)); |
| 82 | 82 | m_isa->install16_device(0x2e8, 0x2eb, 0, 0, FUNC(mach8_status_r), FUNC(mach8_htotal_w)); |
| 83 | 83 | m_isa->install_device(0x3b0, 0x3bf, 0, 0, FUNC(vga_port_03b0_r), FUNC(vga_port_03b0_w)); |
| 84 | | m_isa->install_device(0x3c0, 0x3cf, 0, 0, FUNC(vga_port_03c0_r), FUNC(vga_port_03c0_w)); |
| 84 | m_isa->install_device(0x3c0, 0x3cf, 0, 0, FUNC(ati_port_03c0_r), FUNC(vga_port_03c0_w)); |
| 85 | 85 | m_isa->install_device(0x3d0, 0x3df, 0, 0, FUNC(vga_port_03d0_r), FUNC(vga_port_03d0_w)); |
| 86 | 86 | m_isa->install16_device(0x12e8, 0x12eb, 0, 0, FUNC(mach8_vtotal_r),FUNC(mach8_vtotal_w)); |
| 87 | 87 | m_isa->install16_device(0x12ec, 0x12ef, 0, 0, FUNC(mach8_config1_r),NULL,NULL); |