comparison vdp.h @ 75:108e587165c0

Implement DMA (untested)
author Mike Pavone <pavone@retrodev.com>
date Fri, 21 Dec 2012 20:56:32 -0800
parents aef6302770c2
children 8fc8e46be691
comparison
equal deleted inserted replaced
74:6396dc91f61e 75:108e587165c0
26 #define FBUF_SRC_S 0x6000 26 #define FBUF_SRC_S 0x6000
27 #define FBUF_SRC_BG 0x8000 27 #define FBUF_SRC_BG 0x8000
28 28
29 #define MCLKS_LINE 3420 29 #define MCLKS_LINE 3420
30 30
31 #define FLAG_DOT_OFLOW 0x1
32 #define FLAG_CAN_MASK 0x2
33 #define FLAG_MASKED 0x4
34 #define FLAG_WINDOW 0x8
35 #define FLAG_PENDING 0x10
36 #define FLAG_UNUSED_SLOT 0x20
37 #define FLAG_DMA_RUN 0x40
38 #define FLAG_DMA_PROG 0x80
39
40 #define DISPLAY_ENABLE 0x40
41
31 enum { 42 enum {
32 REG_MODE_1=0, 43 REG_MODE_1=0,
33 REG_MODE_2, 44 REG_MODE_2,
34 REG_SCROLL_A, 45 REG_SCROLL_A,
35 REG_WINDOW, 46 REG_WINDOW,
41 REG_MODE_4, 52 REG_MODE_4,
42 REG_HSCROLL, 53 REG_HSCROLL,
43 REG_AUTOINC=0xF, 54 REG_AUTOINC=0xF,
44 REG_SCROLL, 55 REG_SCROLL,
45 REG_WINDOW_H, 56 REG_WINDOW_H,
46 REG_WINDOW_V 57 REG_WINDOW_V,
58 REG_DMALEN_L,
59 REG_DMALEN_H,
60 REG_DMASRC_L,
61 REG_DMASRC_M,
62 REG_DMASRC_H
47 } vdp_regs; 63 } vdp_regs;
48 64
49 typedef struct { 65 typedef struct {
50 uint16_t address; 66 uint16_t address;
51 int16_t x_pos; 67 int16_t x_pos;
90 uint8_t regs[VDP_REGS]; 106 uint8_t regs[VDP_REGS];
91 sprite_draw sprite_draw_list[MAX_DRAWS]; 107 sprite_draw sprite_draw_list[MAX_DRAWS];
92 sprite_info sprite_info_list[MAX_SPRITES_LINE]; 108 sprite_info sprite_info_list[MAX_SPRITES_LINE];
93 uint16_t col_1; 109 uint16_t col_1;
94 uint16_t col_2; 110 uint16_t col_2;
111 uint16_t dma_val;
95 uint8_t v_offset; 112 uint8_t v_offset;
96 uint8_t *tmp_buf_a; 113 uint8_t *tmp_buf_a;
97 uint8_t *tmp_buf_b; 114 uint8_t *tmp_buf_b;
98 } vdp_context; 115 } vdp_context;
99 116
100 void init_vdp_context(vdp_context * context); 117 void init_vdp_context(vdp_context * context);
101 void vdp_run_context(vdp_context * context, uint32_t target_cycles); 118 void vdp_run_context(vdp_context * context, uint32_t target_cycles);
102 //runs from current cycle count to VBLANK for the current mode, returns ending cycle count 119 //runs from current cycle count to VBLANK for the current mode, returns ending cycle count
103 uint32_t vdp_run_to_vblank(vdp_context * context); 120 uint32_t vdp_run_to_vblank(vdp_context * context);
121 //runs until the target cycle is reached or the current DMA operation has completed, whicever comes first
122 void vdp_run_dma_done(vdp_context * context, uint32_t target_cycles);
104 void vdp_load_savestate(vdp_context * context, FILE * state_file); 123 void vdp_load_savestate(vdp_context * context, FILE * state_file);
105 void vdp_save_state(vdp_context * context, FILE * outfile); 124 void vdp_save_state(vdp_context * context, FILE * outfile);
106 void vdp_control_port_write(vdp_context * context, uint16_t value); 125 int vdp_control_port_write(vdp_context * context, uint16_t value);
107 void vdp_data_port_write(vdp_context * context, uint16_t value); 126 void vdp_data_port_write(vdp_context * context, uint16_t value);
108 uint16_t vdp_control_port_read(vdp_context * context); 127 uint16_t vdp_control_port_read(vdp_context * context);
109 uint16_t vdp_data_port_read(vdp_context * context); 128 uint16_t vdp_data_port_read(vdp_context * context);
110 void vdp_adjust_cycles(vdp_context * context, uint32_t deduction); 129 void vdp_adjust_cycles(vdp_context * context, uint32_t deduction);
111 130