dep = $(obj:.o=.d)
bin = game
+def = -DUSE_MMX
inc = -Isrc -Isrc/sdl -Isrc/3dgfx -Ilibs/imago/src
warn = -pedantic -Wall
-CFLAGS = $(arch) $(warn) -g -MMD $(inc) `sdl-config --cflags`
+CFLAGS = $(arch) $(warn) -g -MMD $(def) $(inc) `sdl-config --cflags`
LDFLAGS = $(arch) -Llibs/imago -limago $(sdl_ldflags) -lm
ifneq ($(shell uname -m), i386)
obj = $(dosobj) $(gameobj) $(gfxobj) $(scrobj)
bin = game.exe
-def = -dM_PI=3.141592653589793
+def = -dM_PI=3.141592653589793 -dUSE_MMX
libs = imago.lib
CC = wcc386
static void blit_frame_lfb(void *pixels, int vsync)
{
- dbg_fps(pixels);
+ if(show_fps) dbg_fps(pixels);
if(vsync) wait_vsync();
memcpy64(vpgaddr[frontidx], pixels, pgsize >> 3);
}
unsigned int pending;
unsigned char *pptr = pixels;
- dbg_fps(pixels);
+ if(show_fps) dbg_fps(pixels);
if(vsync) wait_vsync();
pending = pgsize;
while(pending > 0) {
sz = pending > curmode->bank_size ? curmode->bank_size : pending;
- memcpy64((void*)0xa0000, pptr, sz >> 3);
+ //memcpy64((void*)0xa0000, pptr, sz >> 3);
+ memcpy((void*)0xa0000, pptr, sz);
pptr += sz;
pending -= sz;
vbe_setwin(0, ++offs);
uint16_t *fb_pixels, *vmem;
long time_msec;
+int show_fps = 1;
void (*draw)(void);
void (*key_event)(int key, int pressed);
extern uint16_t *fb_pixels, *vmem;
extern long time_msec;
+extern int show_fps;
extern void (*swap_buffers)(void*);
#include "gfxutil.h"
#include "game.h"
-#define USE_MMX
-
#define FADE_DUR 800
static void *logo;
fade = 256 - (tm - 2 * FADE_DUR) * 256 / FADE_DUR;
} else {
fade = 0;
- //menu_start();
+ menu_start();
+ return;
}
#ifdef USE_MMX
#include "gfx.h"
#include "gfxutil.h"
#include "game.h"
+#include "util.h"
static const struct menuent {
int x, y, len, height;
{
draw = menu_draw;
key_event = menu_keyb;
+
+ memcpy(fb_pixels, bgpix, fb_size);
}
void menu_stop(void)
void menu_draw(void)
{
static uint16_t blurbuf[2][BBW * BBH];
- int fboffs, bboffs, tmp;
+ int fboffs, bboffs, tmp, cleartop;
const struct menuent *ent = menuent + cur;
int blur_rad_x = (int)((sin(time_msec / 1000.0f) * 0.5f + 0.5f) * 50.0f);
blur_horiz(blurbuf[1], blurbuf[0], BBW, BBH, blur_rad_x + 3, 0x140);
blur_vert(blurbuf[0], blurbuf[1], BBW, BBH, blur_rad_y / 4 + 3, 0x140);
- wait_vsync();
+ //wait_vsync();
- memcpy(fb_pixels, bgpix, fb_size);
tmp = fboffs;
fboffs -= 8 * fb_width + 32;
bboffs -= 8 * BBW + 32;
+
+ cleartop = 280 * fb_width;
+ memcpy(fb_pixels + cleartop, bgpix + cleartop, (fb_height - 280) * fb_width << 1);
+
blit(fb_pixels + fboffs, fb_width, blurbuf[0] + bboffs, ent->len + 64, ent->height + 16, BBW);
fboffs = tmp;
blit_key(fb_pixels + fboffs, fb_width, bgpix + fboffs, ent->len, ent->height, bgwidth, 0);
+ if(show_fps) {
+ blit(fb_pixels, fb_width, bgpix, 64, 16, bgwidth);
+ }
+
blit_frame(fb_pixels, 0);
}
int i, j;
unsigned short *sptr, *dptr;
- dbg_fps(pixels);
+ if(show_fps) dbg_fps(pixels);
if(vsync) {
wait_vsync();
extern uint32_t perf_start_count, perf_interval_count;
#ifdef __WATCOMC__
+#ifdef USE_MMX
void memcpy64(void *dest, void *src, int count);
#pragma aux memcpy64 = \
"cploop:" \
"dec ecx" \
"jnz cploop" \
"emms" \
- parm[ebx][edx][ecx];
+ parm[ebx][edx][ecx] \
+ modify[8087];
+#else
+#define memcpy64(dest, src, count) memcpy(dest, src, (count) << 3)
+#endif
void perf_start(void);
#pragma aux perf_start = \
#endif
#ifdef __GNUC__
+#ifdef USE_MMX
#define memcpy64(dest, src, count) asm volatile ( \
"0:\n\t" \
"movq (%1), %%mm0\n\t" \
"dec %2\n\t" \
"jnz 0b\n\t" \
"emms\n\t" \
- :: "r"(dest), "r"(src), "r"(count))
+ :: "r"(dest), "r"(src), "r"(count) \
+ : "%mm0")
+#else
+#define memcpy64(dest, src, count) memcpy(dest, src, (count) << 3)
+#endif
#define perf_start() asm volatile ( \
"xor %%eax, %%eax\n" \