Mercurial > repos > blastem
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 |