diff options
Diffstat (limited to 'src/mame/video/destroyr.c')
-rw-r--r-- | src/mame/video/destroyr.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/mame/video/destroyr.c b/src/mame/video/destroyr.c new file mode 100644 index 00000000000..5d67fe1596b --- /dev/null +++ b/src/mame/video/destroyr.c @@ -0,0 +1,90 @@ +/*************************************************************************** + +Atari Destroyer video emulation + +***************************************************************************/ + +#include "driver.h" + +int destroyr_wavemod; +int destroyr_cursor; + +UINT8* destroyr_major_obj_ram; +UINT8* destroyr_minor_obj_ram; +UINT8* destroyr_alpha_num_ram; + + +VIDEO_UPDATE( destroyr ) +{ + int i; + int j; + + fillbitmap(bitmap, machine->pens[0], cliprect); + + /* draw major objects */ + + for (i = 0; i < 16; i++) + { + int attr = destroyr_major_obj_ram[2 * i + 0] ^ 0xff; + int horz = destroyr_major_obj_ram[2 * i + 1]; + + int num = attr & 3; + int scan = attr & 4; + int flipx = attr & 8; + + if (scan == 0) + { + if (horz >= 192) + horz -= 256; + } + else + { + if (horz < 192) + continue; + } + + drawgfx(bitmap, machine->gfx[2], num, 0, flipx, 0, + horz, 16 * i, cliprect, TRANSPARENCY_PEN, 0); + } + + /* draw alpha numerics */ + + for (i = 0; i < 8; i++) + { + for (j = 0; j < 32; j++) + { + int num = destroyr_alpha_num_ram[32 * i + j]; + + drawgfx(bitmap, machine->gfx[0], num, 0, 0, 0, + 8 * j, 8 * i, cliprect, TRANSPARENCY_PEN, 0); + } + } + + /* draw minor objects */ + + for (i = 0; i < 2; i++) + { + int horz = 256 - destroyr_minor_obj_ram[i + 2]; + int vert = 256 - destroyr_minor_obj_ram[i + 4]; + + drawgfx(bitmap, machine->gfx[1], destroyr_minor_obj_ram[i + 0], 0, 0, 0, + horz, vert, cliprect, TRANSPARENCY_PEN, 0); + } + + /* draw waves */ + + for (i = 0; i < 4; i++) + { + drawgfx(bitmap, machine->gfx[3], destroyr_wavemod ? 1 : 0, 0, 0, 0, + 64 * i, 0x4e, cliprect, TRANSPARENCY_PEN, 0); + } + + /* draw cursor */ + + for (i = 0; i < 256; i++) + { + if (i & 4) + *BITMAP_ADDR16(bitmap, destroyr_cursor ^ 0xff, i) = machine->pens[7]; + } + return 0; +} |