pizza: change internal rendering pipeline to 32 bit colors
This commit is contained in:
parent
04d4880564
commit
a4c6d04a18
File diff suppressed because it is too large
Load Diff
|
@ -28,7 +28,6 @@ typedef void (*gpu_frame_ready_cb_t) ();
|
||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
void gpu_dump_oam();
|
void gpu_dump_oam();
|
||||||
uint16_t *gpu_get_frame_buffer();
|
|
||||||
void gpu_init(gpu_frame_ready_cb_t cb);
|
void gpu_init(gpu_frame_ready_cb_t cb);
|
||||||
void gpu_reset();
|
void gpu_reset();
|
||||||
void gpu_set_speed(char speed);
|
void gpu_set_speed(char speed);
|
||||||
|
@ -105,27 +104,26 @@ typedef struct gpu_s
|
||||||
uint_fast16_t frame_counter;
|
uint_fast16_t frame_counter;
|
||||||
|
|
||||||
/* BG palette */
|
/* BG palette */
|
||||||
uint16_t bg_palette[4];
|
uint32_t bg_palette[4];
|
||||||
|
|
||||||
/* Obj palette 0/1 */
|
/* Obj palette 0/1 */
|
||||||
uint16_t obj_palette_0[4];
|
uint32_t obj_palette_0[4];
|
||||||
uint16_t obj_palette_1[4];
|
uint32_t obj_palette_1[4];
|
||||||
|
|
||||||
/* CGB palette for background */
|
/* CGB palette for background */
|
||||||
uint16_t cgb_palette_bg_rgb565[0x20];
|
uint32_t cgb_palette_bg_rgb888[0x20];
|
||||||
uint16_t cgb_palette_bg[0x20];
|
uint16_t cgb_palette_bg[0x20];
|
||||||
uint8_t cgb_palette_bg_idx;
|
uint8_t cgb_palette_bg_idx;
|
||||||
uint8_t cgb_palette_bg_autoinc;
|
uint8_t cgb_palette_bg_autoinc;
|
||||||
|
|
||||||
/* CGB palette for sprites */
|
/* CGB palette for sprites */
|
||||||
uint16_t cgb_palette_oam_rgb565[0x20];
|
uint32_t cgb_palette_oam_rgb888[0x20];
|
||||||
uint16_t cgb_palette_oam[0x20];
|
uint16_t cgb_palette_oam[0x20];
|
||||||
uint8_t cgb_palette_oam_idx;
|
uint8_t cgb_palette_oam_idx;
|
||||||
uint8_t cgb_palette_oam_autoinc;
|
uint8_t cgb_palette_oam_autoinc;
|
||||||
|
|
||||||
/* frame buffer */
|
/* frame buffer */
|
||||||
uint16_t frame_buffer_prev[160 * 144];
|
uint32_t frame_buffer[160 * 144];
|
||||||
uint16_t frame_buffer[160 * 144];
|
|
||||||
uint8_t priority[160 * 144];
|
uint8_t priority[160 * 144];
|
||||||
uint8_t palette_idx[160 * 144];
|
uint8_t palette_idx[160 * 144];
|
||||||
} gpu_t;
|
} gpu_t;
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
//
|
|
||||||
// Created by DVDN on 14/07/2016.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef PIZZABOY_TESTONE_H
|
|
||||||
#define PIZZABOY_TESTONE_H
|
|
||||||
|
|
||||||
#endif //PIZZABOY_TESTONE_H
|
|
|
@ -38,7 +38,7 @@
|
||||||
#include "sound_output.h"
|
#include "sound_output.h"
|
||||||
|
|
||||||
/* proto */
|
/* proto */
|
||||||
void cb();
|
void frame_cb();
|
||||||
void connected_cb();
|
void connected_cb();
|
||||||
void disconnected_cb();
|
void disconnected_cb();
|
||||||
void rumble_cb(uint8_t rumble);
|
void rumble_cb(uint8_t rumble);
|
||||||
|
@ -46,12 +46,6 @@ void network_send_data(uint8_t v);
|
||||||
void *start_thread(void *args);
|
void *start_thread(void *args);
|
||||||
void *start_thread_network(void *args);
|
void *start_thread_network(void *args);
|
||||||
|
|
||||||
/* frame buffer pointer */
|
|
||||||
uint16_t *fb;
|
|
||||||
|
|
||||||
/* magnify rate */
|
|
||||||
float magnify_rate = 1.f;
|
|
||||||
|
|
||||||
/* cartridge name */
|
/* cartridge name */
|
||||||
char cart_name[64];
|
char cart_name[64];
|
||||||
|
|
||||||
|
@ -73,21 +67,16 @@ EXPORT int Init(const void *rom, int romlen)
|
||||||
gameboy_init();
|
gameboy_init();
|
||||||
|
|
||||||
/* init GPU */
|
/* init GPU */
|
||||||
gpu_init(&cb);
|
gpu_init(frame_cb);
|
||||||
|
|
||||||
/* set rumble cb */
|
/* set rumble cb */
|
||||||
mmu_set_rumble_cb(&rumble_cb);
|
mmu_set_rumble_cb(&rumble_cb);
|
||||||
|
|
||||||
/* get frame buffer reference */
|
|
||||||
fb = gpu_get_frame_buffer();
|
|
||||||
|
|
||||||
sound_output_init(2 * 1024 * 1024, 44100);
|
sound_output_init(2 * 1024 * 1024, 44100);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t fb32[160 * 144];
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint32_t* vbuff;
|
uint32_t* vbuff;
|
||||||
|
@ -97,15 +86,17 @@ typedef struct
|
||||||
uint16_t keys; // keypad input
|
uint16_t keys; // keypad input
|
||||||
} frameinfo_t;
|
} frameinfo_t;
|
||||||
|
|
||||||
|
static uint32_t* current_vbuff;
|
||||||
|
|
||||||
EXPORT void FrameAdvance(frameinfo_t* frame)
|
EXPORT void FrameAdvance(frameinfo_t* frame)
|
||||||
{
|
{
|
||||||
input_set_keys(frame->keys);
|
input_set_keys(frame->keys);
|
||||||
uint64_t current = cycles.sampleclock;
|
uint64_t current = cycles.sampleclock;
|
||||||
|
current_vbuff = frame->vbuff;
|
||||||
gameboy_run(current + frame->clocks);
|
gameboy_run(current + frame->clocks);
|
||||||
frame->clocks = cycles.sampleclock - current;
|
frame->clocks = cycles.sampleclock - current;
|
||||||
memcpy(frame->vbuff, fb32, 160 * 144 * sizeof(uint32_t));
|
|
||||||
frame->samples = sound_output_read(frame->sbuff);
|
frame->samples = sound_output_read(frame->sbuff);
|
||||||
|
current_vbuff = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT int IsCGB(void)
|
EXPORT int IsCGB(void)
|
||||||
|
@ -113,20 +104,9 @@ EXPORT int IsCGB(void)
|
||||||
return global_cgb;
|
return global_cgb;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cb()
|
void frame_cb()
|
||||||
{
|
{
|
||||||
// frame received into fb
|
memcpy(current_vbuff, gpu.frame_buffer, sizeof(gpu.frame_buffer));
|
||||||
uint16_t *src = fb;
|
|
||||||
uint8_t *dst = (uint8_t *)fb32;
|
|
||||||
|
|
||||||
for (int i = 0; i < 160 * 144; i++)
|
|
||||||
{
|
|
||||||
uint16_t c = *src++;
|
|
||||||
*dst++ = c << 3 & 0xf8 | c >> 2 & 7;
|
|
||||||
*dst++ = c >> 3 & 0xfa | c >> 9 & 3;
|
|
||||||
*dst++ = c >> 8 & 0xf8 | c >> 13 & 7;
|
|
||||||
*dst++ = 0xff;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void connected_cb()
|
void connected_cb()
|
||||||
|
|
Loading…
Reference in New Issue