Mercurial > repos > blastem
diff vdp.h @ 1120:e9369d6f0101
Somewhat broken implementation of Mode 4
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 27 Dec 2016 11:31:17 -0800 |
parents | 928a65750345 |
children | 8506b305e0e8 |
line wrap: on
line diff
--- a/vdp.h Thu Dec 22 20:39:35 2016 -0800 +++ b/vdp.h Tue Dec 27 11:31:17 2016 -0800 @@ -18,6 +18,7 @@ #define BORDER_BOTTOM 13 //TODO: Replace with actual value #define MAX_DRAWS 40 #define MAX_DRAWS_H32 32 +#define MAX_DRAWS_H32_MODE4 16 #define MAX_SPRITES_LINE 20 #define MAX_SPRITES_LINE_H32 16 #define MAX_SPRITES_FRAME 80 @@ -26,6 +27,7 @@ #define FBUF_SHADOW 0x0001 #define FBUF_HILIGHT 0x0010 +#define FBUF_MODE4 0x0100 #define DBG_SHADOW 0x10 #define DBG_HILIGHT 0x20 #define DBG_PRIORITY 0x8 @@ -64,12 +66,16 @@ REG_WINDOW, REG_SCROLL_B, REG_SAT, - REG_BG_COLOR=7, - REG_HINT=0xA, + REG_STILE_BASE, + REG_BG_COLOR, + REG_X_SCROLL, + REG_Y_SCROLL, + REG_HINT, REG_MODE_3, REG_MODE_4, REG_HSCROLL, - REG_AUTOINC=0xF, + REG_BGTILE_BASE, + REG_AUTOINC, REG_SCROLL, REG_WINDOW_H, REG_WINDOW_V, @@ -81,8 +87,13 @@ } vdp_regs; //Mode reg 1 +#define BIT_VSCRL_LOCK 0x80 +#define BIT_HSCRL_LOCK 0x40 +#define BIT_COL0_MASK 0x20 #define BIT_HINT_EN 0x10 +#define BIT_SPRITE_8PX 0x08 #define BIT_PAL_SEL 0x04 +#define BIT_MODE_4 BIT_PAL_SEL #define BIT_HVC_LATCH 0x02 #define BIT_DISP_DIS 0x01 @@ -92,6 +103,7 @@ #define BIT_DMA_ENABLE 0x10 #define BIT_PAL 0x08 #define BIT_MODE_5 0x04 +#define BIT_SPRITE_SZ 0x02 //Mode reg 3 #define BIT_EINT_EN 0x10 @@ -145,7 +157,7 @@ uint32_t *output; system_header *system; uint16_t cram[CRAM_SIZE]; - uint32_t colors[CRAM_SIZE*3]; + uint32_t colors[CRAM_SIZE*4]; uint32_t debugcolors[1 << (3 + 1 + 1 + 1)];//3 bits for source, 1 bit for priority, 1 bit for shadow, 1 bit for hilight uint16_t vsram[VSRAM_SIZE]; uint16_t vscroll_latch[2]; @@ -168,6 +180,7 @@ uint16_t col_2; uint16_t hv_latch; uint16_t prefetch; + uint8_t fetch_tmp[2]; uint8_t v_offset; uint8_t dma_cd; uint8_t hint_counter; @@ -210,8 +223,7 @@ void vdp_print_reg_explain(vdp_context * context); void latch_mode(vdp_context * context); uint32_t vdp_cycles_to_frame_end(vdp_context * context); +void write_cram(vdp_context * context, uint16_t address, uint16_t value); void write_vram_byte(vdp_context *context, uint16_t address, uint8_t value); -extern int32_t color_map[1 << 12]; - #endif //VDP_H_