src/mess/drivers/supracan.c
| r6886 | r6887 | |
| 24 | 24 | #include "cpu/m68000/m68000.h" |
| 25 | 25 | #include "cpu/m6502/m6502.h" |
| 26 | 26 | #include "devices/cartslot.h" |
| 27 | #include "debugger.h" |
| 27 | 28 | |
| 28 | 29 | static UINT16 supracan_m6502_reset; |
| 29 | 30 | static UINT8 *supracan_soundram; |
| r6886 | r6887 | |
| 147 | 148 | } |
| 148 | 149 | |
| 149 | 150 | { |
| 150 | | int x,y,xtile,ytile,xsize,ysize,spr_offs,col,i,spr_base; |
| 151 | int x,y,xtile,ytile,xsize,ysize,bank,spr_offs,col,i,spr_base; |
| 151 | 152 | //UINT8 *sprdata = (UINT8*)(&supracan_vram[0x1d000/2]); |
| 152 | 153 | |
| 153 | 154 | spr_base = 0x1d000; |
| r6886 | r6887 | |
| 158 | 159 | y = supracan_vram[i+0] & 0x0ff; |
| 159 | 160 | spr_offs = supracan_vram[i+3] << 2; |
| 160 | 161 | col = (supracan_vram[i+1] & 0x000f); |
| 162 | bank = (supracan_vram[i+1] & 0xf000) >> 12; |
| 161 | 163 | |
| 162 | 164 | if(supracan_vram[i+3] != 0) |
| 163 | 165 | { |
| r6886 | r6887 | |
| 174 | 176 | ysize = 4; |
| 175 | 177 | break; |
| 176 | 178 | case 0x4028: |
| 177 | | xsize = 4; |
| 179 | xsize = 10; |
| 178 | 180 | ysize = 1; |
| 179 | 181 | break; |
| 180 | 182 | case 0x4228: |
| r6886 | r6887 | |
| 187 | 189 | break; |
| 188 | 190 | case 0x422e: |
| 189 | 191 | xsize = 2; |
| 190 | | ysize = 4; |
| 192 | ysize = 2; |
| 191 | 193 | break; |
| 192 | 194 | case 0x442a: |
| 193 | 195 | xsize = 4; |
| r6886 | r6887 | |
| 197 | 199 | xsize = 3; |
| 198 | 200 | ysize = 1; |
| 199 | 201 | break; |
| 202 | case 0x442c: |
| 203 | xsize = 8; |
| 204 | ysize = 8; |
| 205 | break; |
| 206 | case 0x4628: |
| 207 | xsize = 8; |
| 208 | ysize = 8; |
| 209 | break; |
| 200 | 210 | case 0x462a: |
| 201 | 211 | xsize = 4; |
| 202 | 212 | ysize = 4; |
| r6886 | r6887 | |
| 206 | 216 | ysize = 5; |
| 207 | 217 | break; |
| 208 | 218 | case 0x5028: |
| 209 | | xsize = 8; |
| 210 | | ysize = 1; |
| 219 | xsize = 16; |
| 220 | ysize = 9; |
| 211 | 221 | break; |
| 212 | 222 | case 0x522a: |
| 213 | | xsize = 4; |
| 214 | | ysize = 1; |
| 223 | xsize = 16; |
| 224 | ysize = 9; |
| 215 | 225 | break; |
| 216 | 226 | default: |
| 217 | 227 | printf( "Unknown size: %04x\n", (supracan_vram[i+0] & 0xff00) | (supracan_vram[i+2] >> 8)); |
| r6886 | r6887 | |
| 224 | 234 | for(xtile = 0; xtile < xsize; xtile++) |
| 225 | 235 | { |
| 226 | 236 | UINT16 data = supracan_vram[spr_offs/2+ytile*xsize+xtile]; |
| 227 | | int tile = 0x400 + (data & 0x03ff); |
| 237 | int tile = (bank * 0x200) + (data & 0x03ff); |
| 228 | 238 | int xflip = data & 0x0800; |
| 229 | 239 | int yflip = data & 0x0400; |
| 230 | 240 | drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[1],tile,col,xflip,yflip,x+xtile*8,y+ytile*8,0); |
| r6886 | r6887 | |
| 330 | 340 | } |
| 331 | 341 | #endif |
| 332 | 342 | |
| 343 | static READ16_HANDLER( supracan_inp0_r ) |
| 344 | { |
| 345 | return input_port_read(space->machine, "INP0"); |
| 346 | } |
| 347 | |
| 333 | 348 | static ADDRESS_MAP_START( supracan_mem, ADDRESS_SPACE_PROGRAM, 16 ) |
| 334 | 349 | AM_RANGE( 0x000000, 0x07ffff ) AM_ROM AM_REGION( "cart", 0 ) |
| 350 | AM_RANGE( 0xe80200, 0xe80201 ) AM_READ( supracan_inp0_r ) |
| 335 | 351 | AM_RANGE( 0xe80204, 0xe80205 ) AM_READ( supracan_unk1_r ) |
| 336 | 352 | AM_RANGE( 0xe80300, 0xe80301 ) AM_READ( supracan_unk1_r ) |
| 337 | 353 | AM_RANGE( 0xe88400, 0xe8efff ) AM_RAM /* sample table + sample data */ |
| r6886 | r6887 | |
| 369 | 385 | } |
| 370 | 386 | |
| 371 | 387 | static INPUT_PORTS_START( supracan ) |
| 388 | PORT_START("INP0") |
| 389 | PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_UNKNOWN) |
| 390 | PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_UNKNOWN) //PORT_PLAYER(1) PORT_NAME("P1 Joypad Button 1") |
| 391 | PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_UNKNOWN) |
| 392 | PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN) |
| 393 | PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN) |
| 394 | PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_UNKNOWN) |
| 395 | PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN) |
| 396 | PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN) |
| 397 | PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_PLAYER(1) PORT_NAME("P1 Joypad Right") |
| 398 | PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT) PORT_PLAYER(1) PORT_NAME("P1 Joypad Left") |
| 399 | PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_PLAYER(1) PORT_NAME("P1 Joypad Down") |
| 400 | PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_PLAYER(1) PORT_NAME("P1 Joypad Up") |
| 401 | PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN) |
| 402 | PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_UNKNOWN) |
| 403 | PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN) |
| 404 | PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_PLAYER(1) PORT_NAME("P1 Joypad B1") |
| 372 | 405 | INPUT_PORTS_END |
| 373 | 406 | |
| 374 | 407 | |