summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/destroyr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/destroyr.c')
-rw-r--r--src/mame/video/destroyr.c90
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;
+}