src/mess/drivers/mz2500.c
| r8959 | r8960 | |
| 102 | 102 | |
| 103 | 103 | if(gfx_sel & 8) // Xevious, PCG 8 colors have priority above kanji roms |
| 104 | 104 | gfx_data = memory_region(machine,"pcg"); |
| 105 | | if(gfx_sel == 0x80) |
| 105 | else if(gfx_sel == 0x80) |
| 106 | 106 | { |
| 107 | 107 | gfx_data = memory_region(machine,"kanji"); |
| 108 | 108 | tile|= tile_bank << 8; |
| r8959 | r8960 | |
| 285 | 285 | } |
| 286 | 286 | } |
| 287 | 287 | |
| 288 | | static void draw_cg16_screen(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,int plane,int x_size) |
| 288 | static void draw_cg16_screen(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,int plane,int x_size,int pri) |
| 289 | 289 | { |
| 290 | 290 | static UINT32 count; |
| 291 | 291 | UINT8 *vram = memory_region(machine, "maincpu"); |
| r8959 | r8960 | |
| 317 | 317 | for(pen_i=0;pen_i<4;pen_i++) |
| 318 | 318 | pen |= pen_bit[pen_i]; |
| 319 | 319 | |
| 320 | | if(pen != 0 || clut16[pen] & 0x10) |
| 320 | if(pri == ((clut16[pen] & 0x10) >> 4)) |
| 321 | 321 | *BITMAP_ADDR16(bitmap, y, x+xi+s_x) = machine->pens[(clut16[pen] & 0x0f)+0x200]; |
| 322 | 322 | } |
| 323 | 323 | count++; |
| r8959 | r8960 | |
| 328 | 328 | } |
| 329 | 329 | } |
| 330 | 330 | |
| 331 | | static void draw_cg256_screen(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect) |
| 331 | static void draw_cg256_screen(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,int pri) |
| 332 | 332 | { |
| 333 | 333 | static UINT32 count; |
| 334 | 334 | UINT8 *vram = memory_region(machine, "maincpu"); |
| r8959 | r8960 | |
| 356 | 356 | for(pen_i=0;pen_i<8;pen_i++) |
| 357 | 357 | pen |= pen_bit[pen_i]; |
| 358 | 358 | |
| 359 | | if(pen != 0 || clut256[pen] & 0x100) |
| 359 | if(pri == ((clut256[pen] & 0x100) >> 8)) |
| 360 | 360 | *BITMAP_ADDR16(bitmap, y, x+xi) = machine->pens[(clut256[pen] & 0xff)+0x100]; |
| 361 | 361 | } |
| 362 | 362 | count++; |
| r8959 | r8960 | |
| 364 | 364 | } |
| 365 | 365 | } |
| 366 | 366 | |
| 367 | | static void draw_cg_screen(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect) |
| 367 | static void draw_cg_screen(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,int pri) |
| 368 | 368 | { |
| 369 | 369 | switch(cg_reg[0x0e]) |
| 370 | 370 | { |
| 371 | 371 | case 0x03: /* CG 4 color mode */ break; |
| 372 | 372 | case 0x14: |
| 373 | | draw_cg16_screen(machine,bitmap,cliprect,0,320); |
| 374 | | draw_cg16_screen(machine,bitmap,cliprect,1,320); |
| 373 | draw_cg16_screen(machine,bitmap,cliprect,0,320,pri); |
| 374 | draw_cg16_screen(machine,bitmap,cliprect,1,320,pri); |
| 375 | 375 | break; |
| 376 | 376 | case 0x15: |
| 377 | | draw_cg16_screen(machine,bitmap,cliprect,1,320); |
| 378 | | draw_cg16_screen(machine,bitmap,cliprect,0,320); |
| 377 | draw_cg16_screen(machine,bitmap,cliprect,1,320,pri); |
| 378 | draw_cg16_screen(machine,bitmap,cliprect,0,320,pri); |
| 379 | 379 | break; |
| 380 | 380 | case 0x17: |
| 381 | | draw_cg16_screen(machine,bitmap,cliprect,0,640); |
| 381 | draw_cg16_screen(machine,bitmap,cliprect,0,640,pri); |
| 382 | 382 | break; |
| 383 | 383 | case 0x1d: |
| 384 | | draw_cg256_screen(machine,bitmap,cliprect); |
| 384 | draw_cg256_screen(machine,bitmap,cliprect,pri); |
| 385 | 385 | break; |
| 386 | 386 | } |
| 387 | 387 | } |
| r8959 | r8960 | |
| 390 | 390 | { |
| 391 | 391 | bitmap_fill(bitmap, cliprect, screen->machine->pens[(clut16[0] & 0xf)+0x200]); //TODO: correct? |
| 392 | 392 | |
| 393 | popmessage("%02x",cg_mask); |
| 394 | |
| 393 | 395 | if(pal_select) |
| 394 | 396 | { |
| 397 | draw_cg_screen(screen->machine,bitmap,cliprect,0); |
| 395 | 398 | draw_tv_screen(screen->machine,bitmap,cliprect); |
| 396 | | draw_cg_screen(screen->machine,bitmap,cliprect); |
| 397 | | //draw_tv_screen(screen->machine,bitmap,cliprect); |
| 399 | draw_cg_screen(screen->machine,bitmap,cliprect,1); |
| 398 | 400 | // popmessage("%02x (%02x %02x) (%02x %02x) (%02x %02x) (%02x %02x)",cg_reg[0x0f],cg_reg[0x10],cg_reg[0x11],cg_reg[0x12],cg_reg[0x13],cg_reg[0x14],cg_reg[0x15],cg_reg[0x16],cg_reg[0x17]); |
| 399 | 401 | } |
| 400 | 402 | else //4096 mode colors |
| r8959 | r8960 | |
| 685 | 687 | ---- xxxx clut number |
| 686 | 688 | */ |
| 687 | 689 | clut16[text_reg_index & 0xf] = data & 0x1f; |
| 690 | //printf("%02x -> [%02x]\n",text_reg[text_reg_index],text_reg_index); |
| 688 | 691 | |
| 689 | 692 | { |
| 690 | 693 | int i; |
| r8959 | r8960 | |
| 695 | 698 | } |
| 696 | 699 | } |
| 697 | 700 | } |
| 698 | | //printf("[%02x]<- %02x\n",text_reg[text_reg_index],text_reg_index); |
| 699 | 701 | break; |
| 700 | 702 | case 2: /* CG Mask reg (priority mixer) */ |
| 701 | 703 | cg_mask = data; |