src/mess/drivers/pc88va.c
| r9461 | r9462 | |
| 40 | 40 | |
| 41 | 41 | } |
| 42 | 42 | |
| 43 | static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) |
| 44 | { |
| 45 | UINT16 *tvram = (UINT16 *)memory_region(machine, "tvram"); |
| 46 | int offs,i; |
| 47 | |
| 48 | offs = tsp.spr_offset; |
| 49 | for(i=0;i<(0x100);i+=(8)) |
| 50 | { |
| 51 | int xp,yp,sw,md,xsize,ysize,spda,fg_col,bc; |
| 52 | int x_i,y_i; |
| 53 | |
| 54 | ysize = (tvram[(offs + i + 0) / 2] & 0xfc00) >> 10; |
| 55 | sw = (tvram[(offs + i + 0) / 2] & 0x200) >> 9; |
| 56 | yp = (tvram[(offs + i + 0) / 2] & 0x1ff); |
| 57 | xsize = (tvram[(offs + i + 2) / 2] & 0xf800) >> 11; |
| 58 | md = (tvram[(offs + i + 2) / 2] & 0x400) >> 10; |
| 59 | xp = (tvram[(offs + i + 2) / 2] & 0x3ff); |
| 60 | spda = (tvram[(offs + i + 4) / 2] & 0xffff); |
| 61 | fg_col = (tvram[(offs + i + 6) / 2] & 0xf0) >> 4; |
| 62 | bc = (tvram[(offs + i + 6) / 2] & 0x08) >> 3; |
| 63 | |
| 64 | if(!sw) |
| 65 | continue; |
| 66 | |
| 67 | if(yp & 0x100) |
| 68 | { |
| 69 | yp &= 0xff; |
| 70 | yp = 0x100 - yp; |
| 71 | } |
| 72 | |
| 73 | if(0) // uhm, makes more sense without the sign? |
| 74 | if(xp & 0x200) |
| 75 | { |
| 76 | xp &= 0x1ff; |
| 77 | xp = 0x200 - xp; |
| 78 | } |
| 79 | |
| 80 | if(md) // 1bpp mode |
| 81 | { |
| 82 | xsize = (xsize + 1) * 32; |
| 83 | ysize = (ysize + 1) * 4; |
| 84 | |
| 85 | for(y_i=0;y_i<ysize;y_i++) |
| 86 | { |
| 87 | for(x_i=0;x_i<xsize;x_i++) |
| 88 | { |
| 89 | //UINT8 pen; |
| 90 | |
| 91 | // TODO: hook up drawing routines |
| 92 | |
| 93 | *BITMAP_ADDR32(bitmap, yp+y_i, xp+x_i) = machine->pens[fg_col]; |
| 94 | } |
| 95 | } |
| 96 | } |
| 97 | else // 4bpp mode |
| 98 | { |
| 99 | xsize = (xsize + 1) * 8; |
| 100 | ysize = (ysize + 1) * 4; |
| 101 | // ... |
| 102 | } |
| 103 | } |
| 104 | } |
| 105 | |
| 43 | 106 | static VIDEO_UPDATE( pc88va ) |
| 44 | 107 | { |
| 108 | bitmap_fill(bitmap, cliprect, 0); |
| 109 | |
| 110 | if(tsp.spr_on) |
| 111 | draw_sprites(screen->machine,bitmap,cliprect); |
| 112 | |
| 45 | 113 | return 0; |
| 46 | 114 | } |
| 47 | 115 | |
| r9461 | r9462 | |
| 899 | 967 | |
| 900 | 968 | MDRV_SCREEN_ADD("screen", RASTER) |
| 901 | 969 | MDRV_SCREEN_REFRESH_RATE(60) |
| 902 | | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| 970 | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32) |
| 903 | 971 | MDRV_SCREEN_SIZE(640, 480) |
| 904 | 972 | MDRV_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) |
| 905 | 973 | MDRV_PALETTE_LENGTH(32) |