+++ /dev/null
-#include <conio.h>\r
-#include <dos.h>\r
-#include <mem.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <time.h>\r
-\r
-#include "fixed32.hpp"\r
-#include "modex.hpp"\r
-#include "xprim.hpp"\r
-#include "xpal.hpp"\r
-#include "xblitbuf.hpp"\r
-\r
-#define FIRE_DEMO 0\r
-#define ROTATE_DEMO 0\r
-#define MONSTER_DEMO_ONE 0\r
-#define MONSTER_DEMO_TWO 0\r
-#define MATH_DEMO 0\r
-\r
-int\r
-monster_demo1(void)\r
-{\r
- clock_t begin, end;\r
- short int i;\r
- blitbuf sprite_image, blit_image;\r
-\r
- clearX(0);\r
-\r
- load_blitbufPCX("chikyuu.pcx", &sprite_image);\r
- aligned_bitblitX(0, 20, &sprite_image);\r
- getch();\r
-\r
- blit_image.image = NULL;\r
-\r
- i=99;\r
-\r
- begin = clock();\r
-\r
- while (i > 0) {\r
- scale_blitbuf(120 + (i << 1), (i << 1), &sprite_image, &blit_image);\r
- boxX((99 - i), (119 - i), (220 + i), (120 + i), 0);\r
- vanilla_bitblitX(100 - i, 120 - i, &blit_image);\r
- i--;\r
- }\r
-\r
- end = clock();\r
-\r
- i=120;\r
- while (i > 0) {\r
- scale_blitbuf(i, 2, &sprite_image, &blit_image);\r
-\r
- putpixelX(159 - (i >> 1), 119, 0);\r
- putpixelX(159 - (i >> 1), 120, 0);\r
- putpixelX(160 + (i >> 1), 119, 0);\r
- putpixelX(160 + (i >> 1), 120, 0);\r
-\r
- vanilla_bitblitX(160 - (i >> 1), 119, &blit_image);\r
- delay(10);\r
- i -= 2;\r
- }\r
-\r
- filledboxX(156, 119, 163, 120, 0);\r
- putpixelX(159, 120, 1);\r
- delay(250);\r
- putpixelX(159, 120, 0);\r
-\r
- filledboxX(156, 119, 163, 120, 0);\r
- clear_blitbuf(&sprite_image);\r
- clear_blitbuf(&blit_image);\r
-\r
- getch();\r
-\r
- return (end - begin);\r
-}\r
-\r
-\r
-void\r
-monster_demo2(void)\r
-{\r
- short int i;\r
- blitbuf sprite_image, blit_image;\r
-\r
- clearX(0);\r
-\r
- load_blitbufPCX("chikyuu.pcx", &sprite_image);\r
- aligned_bitblitX(0, 20, &sprite_image);\r
- getch();\r
-\r
- blit_image.image = NULL;\r
-\r
- i=99;\r
- while (i) {\r
- vertical_scale_blitbuf((i << 1), &sprite_image, &blit_image);\r
- boxX(0, (119 - i), 319, (120 + i), 0);\r
- aligned_bitblitX(0, 120 - i, &blit_image);\r
- i--;\r
- }\r
-\r
- filledboxX(0, 120, 319, 120, 0);\r
-\r
- i=318;\r
- while (i > 0) {\r
- scale_blitbuf(i, 1, &blit_image, &sprite_image);\r
-\r
- putpixelX(159 - (i >> 1), 119, 0);\r
- putpixelX(159 - (i >> 1), 120, 0);\r
- putpixelX(160 + (i >> 1), 119, 0);\r
- putpixelX(160 + (i >> 1), 120, 0);\r
-\r
- vanilla_bitblitX(160 - (i >> 1), 119, &sprite_image);\r
- delay(5);\r
- i -= 2;\r
- }\r
-\r
- filledboxX(156, 119, 163, 120, 0);\r
- putpixelX(159, 120, 1);\r
- delay(250);\r
- putpixelX(159, 120, 0);\r
- filledboxX(156, 119, 163, 120, 0);\r
- clear_blitbuf(&sprite_image);\r
- clear_blitbuf(&blit_image);\r
-\r
- getch();\r
-}\r
-\r
-\r
-void\r
-fire_demo(void)\r
-{\r
- #define V_WIDTH 80\r
- #define V_HEIGHT 50\r
- #define BUF_WIDTH 80\r
- #define BUF_HEIGHT 56\r
- #define REWIND (V_WIDTH * 3)\r
- #define BUF_SIZE (BUF_WIDTH * BUF_HEIGHT)\r
-\r
-unsigned char fire_pal[768] = {\r
- 0, 0, 0, 0, 0, 24, 0, 0, 24, 0, 0, 28,\r
- 0, 0, 32, 0, 0, 32, 0, 0, 36, 0, 0, 40,\r
- 8, 0, 40, 16, 0, 36, 24, 0, 36, 32, 0, 32,\r
- 40, 0, 28, 48, 0, 28, 56, 0, 24, 64, 0, 20,\r
- 72, 0, 20, 80, 0, 16, 88, 0, 16, 96, 0, 12,\r
- 104, 0, 8, 112, 0, 8, 120, 0, 4, 128, 0, 0,\r
- 128, 0, 0, 132, 0, 0, 136, 0, 0, 140, 0, 0,\r
- 144, 0, 0, 144, 0, 0, 148, 0, 0, 152, 0, 0,\r
- 156, 0, 0, 160, 0, 0, 160, 0, 0, 164, 0, 0,\r
- 168, 0, 0, 172, 0, 0, 176, 0, 0, 180, 0, 0,\r
- 184, 4, 0, 188, 4, 0, 192, 8, 0, 196, 8, 0,\r
- 200, 12, 0, 204, 12, 0, 208, 16, 0, 212, 16, 0,\r
- 216, 20, 0, 220, 20, 0, 224, 24, 0, 228, 24, 0,\r
- 232, 28, 0, 236, 28, 0, 240, 32, 0, 244, 32, 0,\r
- 252, 36, 0, 252, 36, 0, 252, 40, 0, 252, 40, 0,\r
- 252, 44, 0, 252, 44, 0, 252, 48, 0, 252, 48, 0,\r
- 252, 52, 0, 252, 52, 0, 252, 56, 0, 252, 56, 0,\r
- 252, 60, 0, 252, 60, 0, 252, 64, 0, 252, 64, 0,\r
- 252, 68, 0, 252, 68, 0, 252, 72, 0, 252, 72, 0,\r
- 252, 76, 0, 252, 76, 0, 252, 80, 0, 252, 80, 0,\r
- 252, 84, 0, 252, 84, 0, 252, 88, 0, 252, 88, 0,\r
- 252, 92, 0, 252, 96, 0, 252, 96, 0, 252, 100, 0,\r
- 252, 100, 0, 252, 104, 0, 252, 104, 0, 252, 108, 0,\r
- 252, 108, 0, 252, 112, 0, 252, 112, 0, 252, 116, 0,\r
- 252, 116, 0, 252, 120, 0, 252, 120, 0, 252, 124, 0,\r
- 252, 124, 0, 252, 128, 0, 252, 128, 0, 252, 132, 0,\r
- 252, 132, 0, 252, 136, 0, 252, 136, 0, 252, 140, 0,\r
- 252, 140, 0, 252, 144, 0, 252, 144, 0, 252, 148, 0,\r
- 252, 152, 0, 252, 152, 0, 252, 156, 0, 252, 156, 0,\r
- 252, 160, 0, 252, 160, 0, 252, 164, 0, 252, 164, 0,\r
- 252, 168, 0, 252, 168, 0, 252, 172, 0, 252, 172, 0,\r
- 252, 176, 0, 252, 176, 0, 252, 180, 0, 252, 180, 0,\r
- 252, 184, 0, 252, 184, 0, 252, 188, 0, 252, 188, 0,\r
- 252, 192, 0, 252, 192, 0, 252, 196, 0, 252, 196, 0,\r
- 252, 200, 0, 252, 200, 0, 252, 204, 0, 252, 208, 0,\r
- 252, 208, 0, 252, 208, 0, 252, 208, 0, 252, 208, 0,\r
- 252, 212, 0, 252, 212, 0, 252, 212, 0, 252, 212, 0,\r
- 252, 216, 0, 252, 216, 0, 252, 216, 0, 252, 216, 0,\r
- 252, 216, 0, 252, 220, 0, 252, 220, 0, 252, 220, 0,\r
- 252, 220, 0, 252, 224, 0, 252, 224, 0, 252, 224, 0,\r
- 252, 224, 0, 252, 228, 0, 252, 228, 0, 252, 228, 0,\r
- 252, 228, 0, 252, 228, 0, 252, 232, 0, 252, 232, 0,\r
- 252, 232, 0, 252, 232, 0, 252, 236, 0, 252, 236, 0,\r
- 252, 236, 0, 252, 236, 0, 252, 240, 0, 252, 240, 0,\r
- 252, 240, 0, 252, 240, 0, 252, 240, 0, 252, 244, 0,\r
- 252, 244, 0, 252, 244, 0, 252, 244, 0, 252, 248, 0,\r
- 252, 248, 0, 252, 248, 0, 252, 248, 0, 252, 252, 0,\r
- 252, 252, 4, 252, 252, 8, 252, 252, 12, 252, 252, 16,\r
- 252, 252, 20, 252, 252, 24, 252, 252, 28, 252, 252, 32,\r
- 252, 252, 36, 252, 252, 40, 252, 252, 40, 252, 252, 44,\r
- 252, 252, 48, 252, 252, 52, 252, 252, 56, 252, 252, 60,\r
- 252, 252, 64, 252, 252, 68, 252, 252, 72, 252, 252, 76,\r
- 252, 252, 80, 252, 252, 84, 252, 252, 84, 252, 252, 88,\r
- 252, 252, 92, 252, 252, 96, 252, 252, 100, 252, 252, 104,\r
- 252, 252, 108, 252, 252, 112, 252, 252, 116, 252, 252, 120,\r
- 252, 252, 124, 252, 252, 124, 252, 252, 128, 252, 252, 132,\r
- 252, 252, 136, 252, 252, 140, 252, 252, 144, 252, 252, 148,\r
- 252, 252, 152, 252, 252, 156, 252, 252, 160, 252, 252, 164,\r
- 252, 252, 168, 252, 252, 168, 252, 252, 172, 252, 252, 176,\r
- 252, 252, 180, 252, 252, 184, 252, 252, 188, 252, 252, 192,\r
- 252, 252, 196, 252, 252, 200, 252, 252, 204, 252, 252, 208,\r
- 252, 252, 208, 252, 252, 212, 252, 252, 216, 252, 252, 220,\r
- 252, 252, 224, 252, 252, 228, 252, 252, 232, 252, 252, 236,\r
- 252, 252, 240, 252, 252, 244, 252, 252, 248, 252, 252, 252\r
-};\r
-\r
- unsigned char *screen;\r
- unsigned char *flamebuf_ptr;\r
- unsigned char *flamebuf;\r
- unsigned char temp;\r
- unsigned short int i, j, skip;\r
- unsigned char temp_byte;\r
-\r
- set_paletteX(fire_pal);\r
- set_write_plane(ALL_PLANES);\r
- flamebuf = new unsigned char[BUF_SIZE];\r
- skip = V_WIDTH;\r
-\r
- // Initialize the video buffer to 0's\r
- memset(flamebuf, 0, BUF_SIZE);\r
-\r
- while (!kbhit()) {\r
- // Transform current buffer\r
- flamebuf_ptr = flamebuf;\r
- i = (BUF_HEIGHT - 2);\r
- while (i--) {\r
- *flamebuf_ptr = (*(flamebuf_ptr + BUF_WIDTH) +\r
- *(flamebuf_ptr + (BUF_WIDTH - 1)) +\r
- *(flamebuf_ptr + (BUF_WIDTH + 1)) +\r
- *(flamebuf_ptr + (BUF_WIDTH * 2))) >> 2;\r
-\r
- flamebuf_ptr += BUF_WIDTH;\r
- temp = *flamebuf_ptr;\r
- if (temp > 11) {\r
- *flamebuf_ptr -= 12;\r
- } else if (temp > 3) {\r
- *flamebuf_ptr -= 4;\r
- } else {\r
- *flamebuf_ptr = 0;\r
- }\r
- flamebuf_ptr += (1 - BUF_WIDTH);\r
-\r
- j = (BUF_WIDTH - 2);\r
- while (j--) {\r
- *flamebuf_ptr = (*(flamebuf_ptr + BUF_WIDTH) +\r
- *(flamebuf_ptr + (BUF_WIDTH - 1)) +\r
- *(flamebuf_ptr + (BUF_WIDTH + 1)) +\r
- *(flamebuf_ptr + (BUF_WIDTH * 2))) >> 2;\r
-\r
- flamebuf_ptr += BUF_WIDTH;\r
- temp = *flamebuf_ptr;\r
- if (temp > 11) {\r
- *flamebuf_ptr -= 12;\r
- } else if (temp > 3) {\r
- *flamebuf_ptr -= 4;\r
- } else {\r
- *flamebuf_ptr = 0;\r
- }\r
- flamebuf_ptr += (1 - BUF_WIDTH);\r
- }\r
-\r
- *flamebuf_ptr = (*(flamebuf_ptr + BUF_WIDTH) +\r
- *(flamebuf_ptr + (BUF_WIDTH - 1)) +\r
- *(flamebuf_ptr + (BUF_WIDTH * 2)) +\r
- *(flamebuf_ptr + (BUF_WIDTH * 2) +\r
- (BUF_WIDTH - 1))) >> 2;\r
-\r
- flamebuf_ptr += BUF_WIDTH;\r
- temp = *flamebuf_ptr;\r
- if (temp > 11) {\r
- *flamebuf_ptr -= 12;\r
- } else if (temp > 3) {\r
- *flamebuf_ptr -= 4;\r
- } else {\r
- *flamebuf_ptr = 0;\r
- }\r
- flamebuf_ptr += (1 - BUF_WIDTH);\r
- }\r
-\r
- // Set new bottom line with random white or black\r
- temp = 0;\r
- flamebuf_ptr = flamebuf + (BUF_WIDTH * (BUF_HEIGHT - 2));\r
-\r
- j = BUF_WIDTH;\r
- temp = 0;\r
- while (j--) {\r
- // We change the value 1/4 of the time\r
- if ((rand() & 0x03) == 3) {\r
- temp = (255 - temp);\r
- }\r
-\r
- *(flamebuf_ptr + BUF_WIDTH) = temp;\r
- *flamebuf_ptr++ = temp;\r
- }\r
-\r
- // Write the buffer to the screen\r
-// wait_for_retrace();\r
- screen = RowsX[40];\r
- flamebuf_ptr = flamebuf;\r
- i = V_HEIGHT;\r
- while (i--) {\r
- j = V_WIDTH;\r
- while (j--) {\r
- temp_byte = *flamebuf_ptr++;\r
- *screen = temp_byte;\r
- screen += skip;\r
- *screen = temp_byte;\r
- screen += skip;\r
- *screen = temp_byte;\r
- screen += skip;\r
- *screen++ = temp_byte;\r
- screen -= REWIND;\r
- }\r
- screen += REWIND;\r
- }\r
- }\r
-\r
- getch();\r
-\r
- delete flamebuf;\r
-}\r
-\r
-\r
-void\r
-main(void)\r
-{\r
- FILE *fp;\r
- char ch;\r
- unsigned char pal[768];\r
- COORD x1, y1, x2, y2;\r
- Iangle theta1, theta2;\r
- Fixed32 trigSin, trigCos;\r
- blitbuf blit_image, sprite_image;\r
- clock_t begin, end;\r
- short int x, y, temp, done;\r
- long i, time1, time2, time3, count, mtime;\r
- BYTE *ptr1;\r
- BYTE *ptr2;\r
-\r
- set320x240x256_X();\r
- clearX(0);\r
-\r
- getch();\r
-\r
- temp = loadfontX("vga8x8.fnt");\r
-\r
- if (temp) {\r
- putstringX(0, 0, "Hello!", 2);\r
- } else {\r
- return;\r
- }\r
-\r
- getch();\r
-\r
-#if ROTATE_DEMO\r
- get_BIOSpaletteX(pal, 0);\r
- set_paletteX(pal, 0);\r
-\r
- clearX(0);\r
- for (x=0; x < 320; x++) {\r
- for (y=0; y < 240; y++) {\r
- putpixelX(x, y, (x & 0xFF));\r
- }\r
- }\r
-\r
- getch();\r
-\r
- while (!kbhit()) {\r
- wait_for_retrace();\r
- rot_palette(-1);\r
- }\r
-\r
- getch();\r
-#endif\r
-\r
- load_blitbufPCX("chikyuu.pcx", &blit_image);\r
- scale_blitbuf(160, 100, &blit_image);\r
- aligned_bitblitX(0, 0, &blit_image);\r
-\r
- getch();\r
-\r
- clearX(0);\r
-\r
- getch();\r
-\r
- scale_blitbuf(224, 140, &blit_image);\r
- aligned_bitblitX(0, 0, &blit_image);\r
-\r
- getch();\r
-\r
- greyscale_blitbuf(&blit_image);\r
- grey_paletteX();\r
- aligned_bitblitX(0, 0, &blit_image);\r
-\r
- getch();\r
-\r
- clearX(0);\r
-\r
- getch();\r
-\r
- scale_blitbuf(160, 100, &blit_image);\r
- aligned_bitblitX(0, 0, &blit_image);\r
-\r
- getch();\r
-\r
- clear_blitbuf(&blit_image);\r
- load_blitbufPCX("chikyuu.pcx", &blit_image);\r
- greyscale_blitbuf(&blit_image);\r
- smooth64_paletteX(1, 0, 1);\r
- aligned_bitblitX(0, 0, &blit_image);\r
-\r
- getch();\r
-\r
- flip_vertical_blitbuf(&blit_image);\r
- aligned_bitblitX(0, 0, &blit_image);\r
-\r
- getch();\r
-\r
- clear_blitbuf(&blit_image);\r
- load_blitbufPCX("chikyuu.pcx", &blit_image);\r
- aligned_bitblitX(0, 0, &blit_image);\r
-\r
- done = 0;\r
- while (!done) {\r
- ch = getch();\r
- switch (ch) {\r
- case 'q':\r
- case 'Q':\r
- done = 1;\r
- break;\r
-\r
- case '+':\r
- brighten_paletteX(1, 1, 1);\r
- break;\r
-\r
- case '-':\r
- brighten_paletteX(-1, -1, -1);\r
- break;\r
-\r
- case '<':\r
- stretch_paletteX(11, 11, 11);\r
- break;\r
-\r
- case '>':\r
- stretch_paletteX(24, 24, 24);\r
- break;\r
-\r
- case 'S':\r
- case 's':\r
- save_blitbufPCX("dump.pcx", &blit_image);\r
- break;\r
-\r
- case 'L':\r
- case 'l':\r
- load_blitbufPCX("chikyuu.pcx", &blit_image);\r
- break;\r
-\r
- case 'R':\r
- brighten_paletteX(1, 0, 0);\r
- break;\r
-\r
- case 'G':\r
- brighten_paletteX(0, 1, 0);\r
- break;\r
-\r
- case 'B':\r
- brighten_paletteX(0, 0, 1);\r
- break;\r
-\r
- case 'r':\r
- brighten_paletteX(-1, 0, 0);\r
- break;\r
-\r
- case 'g':\r
- brighten_paletteX(0, -1, 0);\r
- break;\r
-\r
- case 'b':\r
- brighten_paletteX(0, 0, -1);\r
- break;\r
-\r
- }\r
- }\r
-\r
- clearX(0);\r
- srand(0);\r
- grey_paletteX();\r
-\r
- begin = clock();\r
-\r
- for (i=0; i < 10000; i++) {\r
- x1 = rand() % 320;\r
- y1 = rand() % 200;\r
- x2 = rand() % 320;\r
- y2 = rand() % 200;\r
-\r
- lineX(x1, y1, x2, y2, (i & 0x3F));\r
- }\r
-\r
- end = clock();\r
-\r
- time1 = (end - begin);\r
-\r
- begin = end;\r
-\r
- for (i=0; i < 10000; i++) {\r
- x1 = rand() % 320;\r
- y1 = rand() % 200;\r
- x2 = rand() % 320;\r
- y2 = rand() % 200;\r
-\r
- temp = ((x1 + x2 + y1 + y2) & 0x3F);\r
- }\r
-\r
- end = clock();\r
-\r
- time2 = (end - begin);\r
-\r
- getch();\r
-\r
- for (i=0; i < 120; i++) {\r
- filledboxX(i, i, (319-i), (239-i), (i & 0x3F));\r
- }\r
-\r
- getch();\r
-\r
- load_blitbufPCX("chikyuu.pcx", &sprite_image);\r
- transparent_bitblitX(100, 100, &sprite_image);\r
-\r
- getch();\r
-\r
- clearX(0);\r
- clear_blitbuf(&blit_image);\r
- scale_blitbuf(152, 168, &sprite_image);\r
- alloc_blitbuf(&blit_image, 152, 168);\r
-\r
- // 152x168 image\r
- aligned_bitblitX(84, 36, &sprite_image);\r
- getch();\r
-\r
- initFixed32();\r
-\r
- theta1=0;\r
- count=0;\r
-\r
- begin = clock();\r
-\r
- while (!kbhit()) {\r
- ptr1 = sprite_image.image;\r
- ptr2 = blit_image.image;\r
- theta2 = theta1;\r
-\r
- y=168;\r
- while (y--) {\r
- CosSin(theta2, &trigCos, &trigSin);\r
- scale_scanline(ptr1, ptr2, 152, 152, (trigCos >> 10) + 88);\r
-#if 0\r
- memcpy(ptr2+152, ptr2, 152);\r
- ptr1 += 304;\r
- ptr2 += 304;\r
- theta2 += 4;\r
- y--;\r
-#else\r
- ptr1 += 152;\r
- ptr2 += 152;\r
- theta2 += 2;\r
-#endif\r
- }\r
-\r
- theta1 += 2;\r
-\r
- aligned_bitblitX(84, 36, &blit_image);\r
- count++;\r
- }\r
-\r
- end = clock();\r
-\r
- getch();\r
- getch();\r
-\r
- clear_blitbuf(&blit_image);\r
- clear_blitbuf(&sprite_image);\r
-\r
-#if FIRE_DEMO\r
- clearX(0);\r
- fire_demo();\r
-#endif\r
-\r
-#if MONSTER_DEMO_ONE\r
- mtime = monster_demo1();\r
-#endif\r
-\r
-#if MONSTER_DEMO_TWO\r
- monster_demo2();\r
-#endif\r
-\r
- set80x25();\r
-\r
-/*#if MATH_DEMO\r
- Fixed32 c1, c2, c3, a1, a2, a3;\r
-\r
- c1 = INT_TO_FIXED(50);\r
- c2 = INT_TO_FIXED(70);\r
- c3 = INT_TO_FIXED(50 * 70);\r
-\r
- a1 = FixedMul(c1, c2);\r
- a2 = FixedMulASM(c1, c2);\r
-\r
- printf("MUL C version = %d\n", FIXED_TO_INT(a1));\r
- printf("MUL ASM version = %d\n", FIXED_TO_INT(a2));\r
-\r
- getch();\r
-\r
- a1 = FixedDiv(c3, c1);\r
- a2 = FixedDivASM(c3, c1);\r
-\r
- printf("DIV C version = %d\n", FIXED_TO_INT(a1));\r
- printf("DIV ASM version = %d\n", FIXED_TO_INT(a2));\r
-\r
- getch();\r
-#endif*/\r
-\r
- temp = (time1 - time2);\r
- printf("10000 lines took %4d ticks\n", time1);\r
- printf("rand() overhead = %4d ticks\n", time2);\r
- printf("Time in lineX = %4d ticks\n", temp);\r
- printf("%d lines per second!\n\n", (10000 * 1000) / (55 * temp));\r
-\r
- temp = (end-begin);\r
- printf("Buddha = %4d blits\n", count);\r
- printf(" = %4d per second\n", (count * 1000) / (55 * temp));\r
- printf("Buddha = %4d scanline stretches\n", (count * 168));\r
- printf(" = %4d per second!\n\n", (count * 168000) / (55 * temp));\r
-\r
- printf("Monster took %d ticks for 99 frames\n", mtime);\r
-}\r
-\r