trunk/src/emu/bus/isa/trident.c
| r32243 | r32244 | |
| 14 | 14 | |
| 15 | 15 | #define CRTC_PORT_ADDR ((vga.miscellaneous_output&1)?0x3d0:0x3b0) |
| 16 | 16 | |
| 17 | | #define READPIXEL8(x,y) (vga.memory[((y & 0xfff)*offset() + (x & 0xfff)) % vga.svga_intf.vram_size]) |
| 18 | | #define WRITEPIXEL8(x,y,c) if((x & 0xfff)<tri.accel_dest_x_clip && (y & 0xfff)<tri.accel_dest_y_clip) \ |
| 19 | | (vga.memory[((y & 0xfff)*offset() + (x & 0xfff)) % vga.svga_intf.vram_size] = c) |
| 20 | | |
| 21 | 17 | #define LOG (1) |
| 22 | 18 | #define LOG_ACCEL (0) |
| 23 | 19 | |
| r32243 | r32244 | |
| 26 | 22 | { |
| 27 | 23 | } |
| 28 | 24 | |
| 25 | UINT8 trident_vga_device::READPIXEL8(INT16 x, INT16 y) |
| 26 | { |
| 27 | return (vga.memory[((y & 0xfff)*offset() + (x & 0xfff)) % vga.svga_intf.vram_size]); |
| 28 | } |
| 29 | |
| 30 | UINT16 trident_vga_device::READPIXEL15(INT16 x, INT16 y) |
| 31 | { |
| 32 | return (vga.memory[((y & 0xfff)*offset() + (x & 0xfff)*2) % vga.svga_intf.vram_size] | |
| 33 | (vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*2)+1) % vga.svga_intf.vram_size] << 8)); |
| 34 | } |
| 35 | |
| 36 | UINT16 trident_vga_device::READPIXEL16(INT16 x, INT16 y) |
| 37 | { |
| 38 | return (vga.memory[((y & 0xfff)*offset() + (x & 0xfff)*2) % vga.svga_intf.vram_size] | |
| 39 | (vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*2)+1) % vga.svga_intf.vram_size] << 8)); |
| 40 | } |
| 41 | |
| 42 | UINT32 trident_vga_device::READPIXEL32(INT16 x, INT16 y) |
| 43 | { |
| 44 | return (vga.memory[((y & 0xfff)*offset() + (x & 0xfff)*4) % vga.svga_intf.vram_size] | |
| 45 | (vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+1) % vga.svga_intf.vram_size] << 8) | |
| 46 | (vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+2) % vga.svga_intf.vram_size] << 16) | |
| 47 | (vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+3) % vga.svga_intf.vram_size] << 24)); |
| 48 | } |
| 49 | |
| 50 | void trident_vga_device::WRITEPIXEL8(INT16 x, INT16 y, UINT8 data) |
| 51 | { |
| 52 | if((x & 0xfff)<tri.accel_dest_x_clip && (y & 0xfff)<tri.accel_dest_y_clip) |
| 53 | vga.memory[((y & 0xfff)*offset() + (x & 0xfff)) % vga.svga_intf.vram_size] = data; |
| 54 | } |
| 55 | |
| 56 | void trident_vga_device::WRITEPIXEL15(INT16 x, INT16 y, UINT16 data) |
| 57 | { |
| 58 | if((x & 0xfff)<tri.accel_dest_x_clip && (y & 0xfff)<tri.accel_dest_y_clip) |
| 59 | { |
| 60 | vga.memory[((y & 0xfff)*offset() + (x & 0xfff)*2) % vga.svga_intf.vram_size] = data & 0x00ff; |
| 61 | vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*2)+1) % vga.svga_intf.vram_size] = (data & 0x7f00) >> 8; |
| 62 | } |
| 63 | } |
| 64 | |
| 65 | void trident_vga_device::WRITEPIXEL16(INT16 x, INT16 y, UINT16 data) |
| 66 | { |
| 67 | if((x & 0xfff)<tri.accel_dest_x_clip && (y & 0xfff)<tri.accel_dest_y_clip) |
| 68 | { |
| 69 | vga.memory[((y & 0xfff)*offset() + (x & 0xfff)*2) % vga.svga_intf.vram_size] = data & 0x00ff; |
| 70 | vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*2)+1) % vga.svga_intf.vram_size] = (data & 0xff00) >> 8; |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | void trident_vga_device::WRITEPIXEL32(INT16 x, INT16 y, UINT32 data) |
| 75 | { |
| 76 | if((x & 0xfff)<tri.accel_dest_x_clip && (y & 0xfff)<tri.accel_dest_y_clip) |
| 77 | { |
| 78 | vga.memory[((y & 0xfff)*offset() + (x & 0xfff)*4) % vga.svga_intf.vram_size] = data & 0x000000ff; |
| 79 | vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+1) % vga.svga_intf.vram_size] = (data & 0x0000ff00) >> 8; |
| 80 | vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+2) % vga.svga_intf.vram_size] = (data & 0x00ff0000) >> 16; |
| 81 | vga.memory[((y & 0xfff)*offset() + ((x & 0xfff)*4)+3) % vga.svga_intf.vram_size] = (data & 0xff000000) >> 24; |
| 82 | } |
| 83 | } |
| 84 | |
| 85 | UINT32 trident_vga_device::READPIXEL(INT16 x,INT16 y) |
| 86 | { |
| 87 | if(svga.rgb8_en) |
| 88 | return READPIXEL8(x,y) & 0xff; |
| 89 | if(svga.rgb15_en) |
| 90 | return READPIXEL15(x,y) & 0x7fff; |
| 91 | if(svga.rgb16_en) |
| 92 | return READPIXEL16(x,y) & 0xffff; |
| 93 | if(svga.rgb32_en) |
| 94 | return READPIXEL32(x,y); |
| 95 | return 0; // should never reach here |
| 96 | } |
| 97 | |
| 98 | void trident_vga_device::WRITEPIXEL(INT16 x,INT16 y, UINT32 data) |
| 99 | { |
| 100 | if(svga.rgb8_en) |
| 101 | WRITEPIXEL8(x,y,data & 0xff); |
| 102 | if(svga.rgb15_en) |
| 103 | WRITEPIXEL15(x,y,data & 0x7fff); |
| 104 | if(svga.rgb16_en) |
| 105 | WRITEPIXEL16(x,y,data & 0xffff); |
| 106 | if(svga.rgb32_en) |
| 107 | WRITEPIXEL32(x,y,data); |
| 108 | } |
| 109 | |
| 110 | |
| 29 | 111 | void trident_vga_device::device_start() |
| 30 | 112 | { |
| 31 | 113 | memset(&vga, 0, sizeof(vga)); |
| r32243 | r32244 | |
| 1034 | 1116 | { |
| 1035 | 1117 | if(tri.accel_drawflags & 0x4000) // Solid fill |
| 1036 | 1118 | { |
| 1037 | | WRITEPIXEL8(x,y,tri.accel_fgcolour); |
| 1119 | WRITEPIXEL(x,y,tri.accel_fgcolour); |
| 1038 | 1120 | } |
| 1039 | 1121 | else |
| 1040 | 1122 | { |
| 1041 | | WRITEPIXEL8(x,y,READPIXEL8(sx,sy)); |
| 1123 | WRITEPIXEL(x,y,READPIXEL(sx,sy)); |
| 1042 | 1124 | } |
| 1043 | 1125 | } |
| 1044 | 1126 | } |
| r32243 | r32244 | |
| 1067 | 1149 | } |
| 1068 | 1150 | for(;;) |
| 1069 | 1151 | { |
| 1070 | | WRITEPIXEL8(tri.accel_dest_x,tri.accel_dest_y,col); |
| 1152 | WRITEPIXEL(tri.accel_dest_x,tri.accel_dest_y,col); |
| 1071 | 1153 | if (count > tri.accel_dim_y) break; |
| 1072 | 1154 | count++; |
| 1073 | 1155 | if((err*2) > -dy) |
| r32243 | r32244 | |
| 1089 | 1171 | for(int x=31;x>=0;x--) |
| 1090 | 1172 | { |
| 1091 | 1173 | if(((data >> x) & 0x01) != 0) |
| 1092 | | WRITEPIXEL8(tri.accel_mem_x,tri.accel_mem_y,tri.accel_fgcolour); |
| 1174 | WRITEPIXEL(tri.accel_mem_x,tri.accel_mem_y,tri.accel_fgcolour); |
| 1093 | 1175 | tri.accel_mem_x++; |
| 1094 | 1176 | } |
| 1095 | 1177 | if(tri.accel_mem_x > tri.accel_dest_x+tri.accel_dim_x) |
trunk/src/emu/bus/isa/trident.h
| r32243 | r32244 | |
| 105 | 105 | void accel_bitblt(); |
| 106 | 106 | void accel_line(); |
| 107 | 107 | void accel_data_write(UINT32 data); |
| 108 | UINT8 READPIXEL8(INT16 x, INT16 y); |
| 109 | UINT16 READPIXEL15(INT16 x, INT16 y); |
| 110 | UINT16 READPIXEL16(INT16 x, INT16 y); |
| 111 | UINT32 READPIXEL32(INT16 x, INT16 y); |
| 112 | void WRITEPIXEL8(INT16 x, INT16 y, UINT8 data); |
| 113 | void WRITEPIXEL15(INT16 x, INT16 y, UINT16 data); |
| 114 | void WRITEPIXEL16(INT16 x, INT16 y, UINT16 data); |
| 115 | void WRITEPIXEL32(INT16 x, INT16 y, UINT32 data); |
| 116 | UINT32 READPIXEL(INT16 x,INT16 y); |
| 117 | void WRITEPIXEL(INT16 x,INT16 y, UINT32 data); |
| 108 | 118 | }; |
| 109 | 119 | |
| 110 | 120 | |