OBJS=ppucore.o vram.o vscreen.o palette.o \
vga_xfer.o $(DUMMY_OBJS)
-LIBS=-L../../libs -lmotones -pthread
+LIBS=-L../../libs -lmotones -pthread -lrt
INCLUDE=-I../../include
void dump_vram(int type, int bank, unsigned short addr, int size);
void set_bgtile(int tile_id);
void set_sprite(int x, int y, int tile_id, struct sprite_attr sa);
+void set_monocolor (int mono);
struct timespec sleep_inteval = {0, 1000000 / VGA_REFRESH_RATE};
name_tbl_set(0, 300, 1);
attr_tbl_set(0, 0, 0x65);
+ set_monocolor(FALSE);
+
for (i = 0; i < 960; i++)
set_bgtile(i);
sa.flip_v = 1;
set_sprite(70, 105, 'd', sa);
+ struct timespec begin, end;
+ clock_gettime(CLOCK_REALTIME, &begin);
vga_xfer();
+ clock_gettime(CLOCK_REALTIME, &end);
+
+ dprint("vga_xfer elapsed time: %d.%09d, vga frame rate:0.%09d\n",
+ end.tv_sec - begin.tv_sec,
+ end.tv_nsec - begin.tv_nsec,
+ 1000000000 / 60);
+ fflush(stdout);
//void dump_vram(int type, int bank, unsigned short addr, int size);
/*
//copied from
//http://hlc6502.web.fc2.com/NesPal2.htm
//
-static unsigned int NES_PALETTE_RGB24[PALETTE_SIZE] = {
+static const unsigned int NES_PALETTE_RGB24[PALETTE_SIZE] = {
0x787878, 0x2000B0, 0x2800B8, 0x6010A0, 0x982078, 0xB01030, 0xA03000, 0x784000,
0x485800, 0x386800, 0x386C00, 0x306040, 0x305080, 0x000000, 0x000000, 0x000000,
0xB0B0B0, 0x4060F8, 0x4040FF, 0x9040F0, 0xD840C0, 0xD84060, 0xE05000, 0xC07000,
rgb->b = colto5bit(rgb24 & 0xFF);
}
+void set_monocolor (int mono) {
+ if (mono) {
+ int i;
+ for (i = 0; i < PALETTE_SIZE; i++) {
+ NES_PALETTE_RGB15[i].r = 0x1f;
+ NES_PALETTE_RGB15[i].g = 0x1f;
+ NES_PALETTE_RGB15[i].b = 0x1f;
+ }
+ }
+ else {
+ int i;
+ for (i = 0; i < PALETTE_SIZE; i++) {
+ from_rgb24(NES_PALETTE_RGB24[i], &NES_PALETTE_RGB15[i]);
+ }
+ }
+}
+
+
/*
* bank: 0 >> bg palette
* bank: 1 >> sprite palette
#include "tools.h"
#include "vram.h"
#include "ppucore.h"
+#include "vga_xfer.h"
int vscreen_init(void);
void clean_vscreen(void);
if (!ret)
return FALSE;
+ ret = vga_xfer_init();
+ if (!ret)
+ return FALSE;
+
ret = vscreen_init();
if (!ret)
return FALSE;
#include <string.h>
+#include "tools.h"
#include "vga.h"
#include "ppucore.h"
#define VSCREEN_WIDTH (H_SCREEN_TILE_SIZE * TILE_DOT_SIZE)
#define VSCREEN_HEIGHT (V_SCREEN_TILE_SIZE * TILE_DOT_SIZE)
+#define MAX_5_BIT 0x1f
+#define EMPHASIZE_MAX 0x1c
+/*emphasize 10% increase.*/
+#define EMPHASIZE_RATE 110
+
static struct rgb15 *vga_base;
+static int emp_red;
+static int emp_green;
+static int emp_blue;
+
+/*
+ * at this moment PPU emphasize r/g/b feature is not supported.
+ * TODO: emphasize color
+ * */
+void set_emphasize_red(int set) {
+ emp_red = set;
+}
+void set_emphasize_green(int set) {
+ emp_green = set;
+}
+void set_emphasize_blue(int set) {
+ emp_blue = set;
+}
+
void set_vga_base(unsigned char* base) {
vga_base = (struct rgb15*)base;
}
+/*
+ * show left 8 pixels of sprite/background function not supported.
+ * TODO: show left 8 pixels of sprite/bg
+ * */
+void show_leftside_sprite(void) {
+}
+
+void show_leftside_bg(void) {
+}
+
void vga_xfer(void) {
int vscrn_x, vscrn_y, vscrn_x_old, vscrn_y_old;
int vga_x, vga_y;
else {
*col = *col_old;
}
- /*
- col->r = to5bit(0xffff);
- col->g = 0;
- col->b = 0;
- */
vscrn_x_old = vscrn_x;
col_old = col;
}
}
+int vga_xfer_init(void) {
+ emp_red = FALSE;
+ emp_green = FALSE;
+ emp_blue = FALSE;
+ return TRUE;
+}
--- /dev/null
+#ifndef __vga_xfer_h__
+#define __vga_xfer_h__
+
+
+int vga_xfer_init(void);
+void set_emphasize_red(int set);
+void set_emphasize_green(int set);
+void set_emphasize_blue(int set);
+
+void show_leftside_sprite(void);
+void show_leftside_bg(void);
+
+#endif /*__vga_xfer_h__*/
+