src/mess/drivers/gp32.c
| r6547 | r6548 | |
| 31 | 31 | #define BPPMODE_TFT_08 0x0B |
| 32 | 32 | #define BPPMODE_TFT_16 0x0C |
| 33 | 33 | |
| 34 | // 76543210 76543210 76543210 76543210 |
| 35 | // 5551 16-bit 00000000 00000000 RRRRRGGG GGBBBBB0 |
| 36 | // 5551 32-bit 00000000 RRRRRI00 GGGGGI00 BBBBBI00 |
| 37 | // 565 16-bit 00000000 00000000 RRRRRGGG GGBBBBB0 |
| 38 | // 565 32-bit 00000000 RRRRR000 GGGGG000 BBBBB000 |
| 39 | |
| 34 | 40 | static VIDEO_UPDATE( gp32 ) |
| 35 | 41 | { |
| 36 | 42 | if (s3c240x_vidregs[0] & 1) // display enabled? |
| 37 | 43 | { |
| 38 | 44 | int x, y, bppmode; |
| 39 | 45 | // int hwswp, tpal, offsize; |
| 40 | | UINT8 *vram; |
| 41 | 46 | UINT32 vramaddr; |
| 42 | 47 | |
| 43 | 48 | // logerror("vramaddr 1 = %08X\n", s3c240x_vidregs[5] << 1); |
| 44 | 49 | // logerror("vramaddr 2 = %08X\n", ((s3c240x_vidregs[5] & 0xFFE00000) | s3c240x_vidregs[6]) << 1); |
| 45 | 50 | vramaddr = s3c240x_vidregs[5] << 1; |
| 46 | 51 | |
| 47 | | vram = (UINT8 *)&s3c240x_ram[(vramaddr-0x0c000000)/4]; |
| 48 | | |
| 49 | 52 | bppmode = (s3c240x_vidregs[0] >> 1) & 0xF; |
| 50 | 53 | |
| 51 | 54 | // hwswp = (s3c240x_vidregs[4] >> 0) & 0x1; |
| r6547 | r6548 | |
| 57 | 60 | { |
| 58 | 61 | case BPPMODE_TFT_08 : |
| 59 | 62 | { |
| 63 | UINT8 *vram; |
| 64 | vram = (UINT8 *)&s3c240x_ram[(vramaddr-0x0c000000)/4]; |
| 60 | 65 | for (y = 0; y < 320; y++) |
| 61 | 66 | { |
| 62 | | UINT16 *scanline = BITMAP_ADDR16( bitmap, y, 0); |
| 67 | UINT32 *scanline = BITMAP_ADDR32( bitmap, y, 0); |
| 63 | 68 | for (x = 0; x < 240; x++) |
| 64 | 69 | { |
| 65 | | *scanline++ = vram[(240*y)+x]; |
| 70 | *scanline++ = palette_get_color( screen->machine, *vram++); |
| 66 | 71 | } |
| 67 | 72 | } |
| 68 | 73 | } |
| 69 | 74 | break; |
| 75 | case BPPMODE_TFT_16 : |
| 76 | { |
| 77 | UINT16 *vram; |
| 78 | vram = (UINT16 *)&s3c240x_ram[(vramaddr-0x0c000000)/4]; |
| 79 | for (y = 0; y < 320; y++) |
| 80 | { |
| 81 | UINT32 *scanline = BITMAP_ADDR32( bitmap, y, 0); |
| 82 | for (x = 0; x < 240; x++) |
| 83 | { |
| 84 | UINT16 data; |
| 85 | UINT8 r, g, b; |
| 86 | data = *vram++; |
| 87 | r = ((data >> 11) & 0x1F) << 3; |
| 88 | g = ((data >> 6) & 0x1F) << 3; |
| 89 | b = ((data >> 1) & 0x1F) << 3; |
| 90 | *scanline++ = MAKE_RGB( r, g, b); |
| 91 | } |
| 92 | } |
| 93 | } |
| 94 | break; |
| 95 | default : |
| 96 | { |
| 97 | printf( "bppmode %d not supported\n", bppmode); |
| 98 | } |
| 99 | break; |
| 70 | 100 | } |
| 71 | 101 | } |
| 72 | 102 | return 0; |
| r6547 | r6548 | |
| 96 | 126 | |
| 97 | 127 | static WRITE32_HANDLER( s3c240x_palette_w ) |
| 98 | 128 | { |
| 129 | UINT8 r, g, b; |
| 99 | 130 | if (mem_mask != 0xffffffff) |
| 100 | 131 | { |
| 101 | 132 | logerror("s3c240x_palette_w: unknown mask %08x\n", mem_mask); |
| 102 | 133 | } |
| 103 | | palette_set_color_rgb(space->machine, offset, ((data>>11)&0x1f)<<3, ((data>>5)&0x3f)<<2, (data&0x1f)<<3); |
| 134 | r = ((data >> 11) & 0x1F) << 3; |
| 135 | g = ((data >> 6) & 0x1F) << 3; |
| 136 | b = ((data >> 1) & 0x1F) << 3; |
| 137 | palette_set_color_rgb(space->machine, offset, r, g, b); |
| 104 | 138 | } |
| 105 | 139 | |
| 106 | 140 | // CLOCK & POWER MANAGEMENT |
| r6547 | r6548 | |
| 815 | 849 | MDRV_PALETTE_LENGTH(32768) |
| 816 | 850 | |
| 817 | 851 | MDRV_SCREEN_ADD("screen", LCD) |
| 818 | | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| 852 | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32) |
| 819 | 853 | MDRV_SCREEN_REFRESH_RATE(60) |
| 820 | 854 | MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 821 | 855 | MDRV_SCREEN_SIZE(240, 320) |
| r6547 | r6548 | |
| 835 | 869 | |
| 836 | 870 | ROM_START( gp32 ) |
| 837 | 871 | ROM_REGION( 0x80000, "maincpu", 0 ) |
| 838 | | ROM_SYSTEM_BIOS( 0, "157e", "GP32 Firmware 1.57 (English)" ) |
| 872 | ROM_SYSTEM_BIOS( 0, "157e", "GP32 Firmware 1.5.7 (English)" ) |
| 839 | 873 | ROMX_LOAD( "gp32157e.bin", 0x000000, 0x080000, CRC(b1e35643) SHA1(1566bc2a27980602e9eb501cf8b2d62939bfd1e5), ROM_BIOS(1) ) |
| 840 | | ROM_SYSTEM_BIOS( 1, "100k", "GP32 Firmware 1.00 (Korean)" ) |
| 874 | ROM_SYSTEM_BIOS( 1, "100k", "GP32 Firmware 1.0.0 (Korean)" ) |
| 841 | 875 | ROMX_LOAD( "gp32100k.bin", 0x000000, 0x080000, CRC(d9925ac9) SHA1(3604d0d7210ed72eddd3e3e0c108f1102508423c), ROM_BIOS(2) ) |
| 842 | | ROM_SYSTEM_BIOS( 2, "156k", "GP32 Firmware 1.56 (Korean)" ) |
| 876 | ROM_SYSTEM_BIOS( 2, "156k", "GP32 Firmware 1.5.6 (Korean)" ) |
| 843 | 877 | ROMX_LOAD( "gp32156k.bin", 0x000000, 0x080000, CRC(667fb1c8) SHA1(d179ab8e96411272b6a1d683e59da752067f9da8), ROM_BIOS(3) ) |
| 878 | ROM_SYSTEM_BIOS( 3, "166m", "GP32 Firmware 1.6.6 (European)" ) |
| 879 | ROMX_LOAD( "gp32166m.bin", 0x000000, 0x080000, CRC(4548a840) SHA1(1ad0cab0af28fb45c182e5e8c87ead2aaa4fffe1), ROM_BIOS(4) ) |
| 880 | // ROM_SYSTEM_BIOS( 4, "test", "test" ) |
| 881 | // ROMX_LOAD( "test.bin", 0x000000, 0x080000, CRC(00000000) SHA1(0000000000000000000000000000000000000000), ROM_BIOS(5) ) |
| 844 | 882 | ROM_END |
| 845 | 883 | |
| 846 | 884 | CONS(2001, gp32, 0, 0, gp32, gp32, 0, 0, "Game Park", "GP32", ROT270|GAME_NOT_WORKING|GAME_NO_SOUND) |