trunk/src/mame/drivers/gunpey.c
| r21492 | r21493 | |
| 212 | 212 | DECLARE_READ8_MEMBER(gunpey_inputs_r); |
| 213 | 213 | DECLARE_WRITE8_MEMBER(gunpey_blitter_w); |
| 214 | 214 | DECLARE_WRITE8_MEMBER(gunpey_output_w); |
| 215 | DECLARE_WRITE16_MEMBER(gunpey_vram_bank_w); |
| 215 | 216 | DECLARE_DRIVER_INIT(gunpey); |
| 216 | 217 | virtual void video_start(); |
| 217 | 218 | virtual void palette_init(); |
| 218 | 219 | UINT32 screen_update_gunpey(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| 219 | 220 | TIMER_DEVICE_CALLBACK_MEMBER(gunpey_scanline); |
| 220 | 221 | void gunpey_irq_check(UINT8 irq_type); |
| 222 | UINT16 m_vram_bank; |
| 221 | 223 | }; |
| 222 | 224 | |
| 223 | 225 | |
| r21492 | r21493 | |
| 231 | 233 | //UINT16 *blit_buffer = m_blit_buffer; |
| 232 | 234 | int x,y; |
| 233 | 235 | int count; |
| 236 | UINT16 vram_bank = m_vram_bank & 0x7fff; |
| 234 | 237 | |
| 235 | 238 | bitmap.fill(machine().pens[0], cliprect); //black pen |
| 236 | 239 | |
| 237 | | for(count = 0x800/2;count<0x4800/2;count+=0x10/2) |
| 240 | vram_bank ^= 0x2000; |
| 241 | |
| 242 | for(count = vram_bank/2;count<(vram_bank+0x2000)/2;count+=0x10/2) |
| 238 | 243 | { |
| 239 | | if(!(m_wram[count+0/2] & 1)) |
| 244 | if(!(m_wram[count+0] & 1)) |
| 240 | 245 | { |
| 241 | 246 | x = (m_wram[count+3] >> 8) | ((m_wram[count+4] & 0xff) << 8); |
| 242 | 247 | y = m_wram[count+4] >> 8; |
| r21492 | r21493 | |
| 245 | 250 | |
| 246 | 251 | UINT32 val = (m_wram[count+1] << 16) | ((m_wram[count+2])); |
| 247 | 252 | int letter = -1; |
| 248 | | |
| 253 | /* |
| 254 | -- TEST MODE -- |
| 255 | I/O TEST |
| 256 | MONITOR TEST |
| 257 | CG-ROM VIEWER |
| 258 | CHARACTER CHECK |
| 259 | SOUND TEST |
| 260 | */ |
| 249 | 261 | // these are going to be co-ordinates in the bitmap, probably not the ROM, but the one the 'blitter' (gfx unpack device?) creates |
| 250 | | if (val == 0x8080a03a) { col = 0xffff00; letter ='I'; } // 18d0 - I |
| 251 | | if (val == 0x4080a03b) { col = 0xff0000; letter ='O'; } // - O |
| 262 | if (val == 0x2080203b) { letter = ' '; } |
| 263 | if (val == 0x0080203b) { letter = '-'; } |
| 264 | if (val == 0x4080203b) { letter = '/'; } |
| 265 | if (val == 0x6080203b) { letter = '0'; } |
| 266 | if (val == 0x8080403a) { letter = '1'; } |
| 267 | if (val == 0xa080403a) { letter = '2'; } |
| 268 | if (val == 0xc080403a) { letter = '3'; } |
| 269 | if (val == 0xe080403a) { letter = '4'; } |
| 270 | if (val == 0x0080403b) { letter = '5'; } |
| 271 | if (val == 0x2080403b) { letter = '6'; } |
| 272 | if (val == 0x4080403b) { letter = '7'; } |
| 273 | if (val == 0x6080403b) { letter = '8'; } |
| 274 | if (val == 0x8080603a) { letter = '9'; } |
| 252 | 275 | |
| 276 | if (val == 0x8080803a) { letter = 'A'; } |
| 277 | if (val == 0xa080803a) { letter = 'B'; } |
| 278 | if (val == 0xc080803a) { letter = 'C'; } |
| 279 | if (val == 0xe080803a) { letter = 'D'; } |
| 280 | if (val == 0x0080803b) { letter = 'E'; } |
| 281 | if (val == 0x2080803b) { letter = 'F'; } |
| 282 | if (val == 0x4080803b) { letter = 'G'; } |
| 283 | if (val == 0x6080803b) { letter = 'H'; } |
| 284 | if (val == 0x8080a03a) { letter = 'I'; } |
| 285 | if (val == 0xa080a03a) { letter = 'J'; } |
| 286 | if (val == 0xc080a03a) { letter = 'K'; } |
| 287 | if (val == 0xe080a03a) { letter = 'L'; } |
| 288 | if (val == 0x0080a03b) { letter = 'M'; } |
| 289 | if (val == 0x2080a03b) { letter = 'N'; } |
| 290 | if (val == 0x4080a03b) { letter = 'O'; } |
| 291 | if (val == 0x6080a03b) { letter = 'P'; } |
| 292 | if (val == 0x8080c03a) { letter = 'Q'; } |
| 293 | if (val == 0xa080c03a) { letter = 'R'; } |
| 294 | if (val == 0xc080c03a) { letter = 'S'; } |
| 295 | if (val == 0xe080c03a) { letter = 'T'; } |
| 296 | if (val == 0x0080c03b) { letter = 'U'; } |
| 297 | if (val == 0x2080c03b) { letter = 'V'; } |
| 298 | if (val == 0x4080c03b) { letter = 'W'; } |
| 299 | if (val == 0x6080c03b) { letter = 'X'; } |
| 300 | if (val == 0x8080e03a) { letter = 'Y'; } |
| 301 | if (val == 0xa080e03a) { letter = 'Z'; } |
| 302 | |
| 253 | 303 | #ifndef USE_FAKE_ROM |
| 254 | 304 | letter = -1; |
| 255 | 305 | #endif |
| 256 | 306 | x-=0x1100; |
| 257 | 307 | |
| 258 | 308 | if (letter != -1) |
| 259 | | drawgfx_opaque(bitmap,cliprect,machine().gfx[1],letter,0,0,0,x,y); |
| 309 | drawgfx_opaque(bitmap,cliprect,machine().gfx[1],letter,1,0,0,x,y); |
| 260 | 310 | else |
| 261 | 311 | { |
| 262 | 312 | for(int yi=0;yi<8;yi++) |
| r21492 | r21493 | |
| 410 | 460 | downcast<okim6295_device *>(m_oki)->set_bank_base((data & 0x0f) * 0x40000); |
| 411 | 461 | } |
| 412 | 462 | |
| 463 | WRITE16_MEMBER(gunpey_state::gunpey_vram_bank_w) |
| 464 | { |
| 465 | COMBINE_DATA(&m_vram_bank); |
| 466 | } |
| 467 | |
| 413 | 468 | /***************************************************************************************/ |
| 414 | 469 | |
| 415 | 470 | static ADDRESS_MAP_START( mem_map, AS_PROGRAM, 16, gunpey_state ) |
| r21492 | r21493 | |
| 430 | 485 | AM_RANGE(0x7fc8, 0x7fc9) AM_READWRITE8(gunpey_status_r, gunpey_status_w, 0xffff ) |
| 431 | 486 | AM_RANGE(0x7fd0, 0x7fdf) AM_WRITE8(gunpey_blitter_w, 0xffff ) |
| 432 | 487 | //AM_RANGE(0x7FF0, 0x7FF1) AM_RAM |
| 488 | AM_RANGE(0x7fee, 0x7fef) AM_WRITE(gunpey_vram_bank_w) |
| 433 | 489 | |
| 434 | 490 | ADDRESS_MAP_END |
| 435 | 491 | |
| r21492 | r21493 | |
| 593 | 649 | static GFXLAYOUT_RAW( gunpey, 2048, 1, 2048*8, 2048*8 ) |
| 594 | 650 | static GFXDECODE_START( gunpey ) |
| 595 | 651 | GFXDECODE_ENTRY( "blit_data", 0, gunpey, 0x0000, 0x1 ) |
| 596 | | GFXDECODE_ENTRY( "fakerom", 0x18000, fake_layout, 0x0, 2 ) |
| 652 | GFXDECODE_ENTRY( "fakerom", 0x18000, fake_layout, 0x0, 2 ) |
| 597 | 653 | |
| 598 | 654 | GFXDECODE_END |
| 599 | 655 | |