Mercurial > repos > blastem
diff vdp.h @ 20:f664eeb55cb4
Mostly broken VDP core and savestate viewer
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 08 Dec 2012 02:00:54 -0800 |
parents | |
children | 72ce60cb1711 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vdp.h Sat Dec 08 02:00:54 2012 -0800 @@ -0,0 +1,80 @@ +#ifndef VDP_H_ +#define VDP_H_ + +#include <stdint.h> +#include <stdio.h> + +#define VDP_REGS 24 +#define CRAM_SIZE 64 +#define VSRAM_SIZE 40 +#define VRAM_SIZE (64*1024) +#define LINEBUF_SIZE 320 +#define FRAMEBUF_ENTRIES 320*224 +#define FRAMEBUF_SIZE (FRAMEBUF_ENTRIES*sizeof(uint16_t)) +#define MAX_DRAWS 40 +#define MAX_SPRITES_LINE 20 + +enum { + REG_MODE_1=0, + REG_MODE_2, + REG_SCROLL_A, + REG_WINDOW, + REG_SCROLL_B, + REG_SAT, + REG_BG_COLOR, + REG_HINT=0xA, + REG_MODE_3, + REG_MODE_4, + REG_HSCROLL, + REG_AUTOINC=0xF, + REG_SCROLL, + REG_WINDOW_H, + REG_WINDOW_V +} vdp_regs; + +typedef struct { + uint16_t address; + int16_t x_pos; + uint8_t pal_priority; + uint8_t h_flip; +} sprite_draw; + +typedef struct { + uint8_t size; + uint8_t index; + int16_t y; +} sprite_info; + +typedef struct { + //cycle count in MCLKs + uint32_t cycles; + uint8_t *vdpmem; + //stores 2-bit palette + 4-bit palette index + priority for current sprite line + uint8_t *linebuf; + //stores 12-bit color + shadow/highlight bits + uint16_t *framebuf; + uint16_t cram[CRAM_SIZE]; + uint16_t vsram[VSRAM_SIZE]; + uint8_t latched_mode; + uint16_t hscroll_a; + uint16_t hscroll_b; + uint8_t sprite_index; + uint8_t sprite_draws; + uint8_t slot_counter; + uint8_t regs[VDP_REGS]; + sprite_draw sprite_draw_list[MAX_DRAWS]; + sprite_info sprite_info_list[MAX_SPRITES_LINE]; + uint16_t col_1; + uint16_t col_2; + uint8_t v_offset; + uint8_t *tmp_buf_a; + uint8_t *tmp_buf_b; +} vdp_context; + +void init_vdp_context(vdp_context * context); +void vdp_run_context(vdp_context * context, uint32_t target_cycles); +//runs from current cycle count to VBLANK for the current mode, returns ending cycle count +uint32_t vdp_run_to_vblank(vdp_context * context); +void vdp_load_savestate(vdp_context * context, FILE * state_file); + +#endif //VDP_H_