summaryrefslogtreecommitdiff
path: root/vdp.h
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2012-12-21 20:56:32 -0800
committerMike Pavone <pavone@retrodev.com>2012-12-21 20:56:32 -0800
commit8ac9006be0170d550147873ca1f5169f3a443149 (patch)
treee0fc50dded3d28356418d4a39a94f606fae4fc3b /vdp.h
parent30e36fd405aa5d8879ac9992d4ed9f44da5aa5ba (diff)
Implement DMA (untested)
Diffstat (limited to 'vdp.h')
-rw-r--r--vdp.h23
1 files changed, 21 insertions, 2 deletions
diff --git a/vdp.h b/vdp.h
index 173fd43..484eb14 100644
--- a/vdp.h
+++ b/vdp.h
@@ -28,6 +28,17 @@
#define MCLKS_LINE 3420
+#define FLAG_DOT_OFLOW 0x1
+#define FLAG_CAN_MASK 0x2
+#define FLAG_MASKED 0x4
+#define FLAG_WINDOW 0x8
+#define FLAG_PENDING 0x10
+#define FLAG_UNUSED_SLOT 0x20
+#define FLAG_DMA_RUN 0x40
+#define FLAG_DMA_PROG 0x80
+
+#define DISPLAY_ENABLE 0x40
+
enum {
REG_MODE_1=0,
REG_MODE_2,
@@ -43,7 +54,12 @@ enum {
REG_AUTOINC=0xF,
REG_SCROLL,
REG_WINDOW_H,
- REG_WINDOW_V
+ REG_WINDOW_V,
+ REG_DMALEN_L,
+ REG_DMALEN_H,
+ REG_DMASRC_L,
+ REG_DMASRC_M,
+ REG_DMASRC_H
} vdp_regs;
typedef struct {
@@ -92,6 +108,7 @@ typedef struct {
sprite_info sprite_info_list[MAX_SPRITES_LINE];
uint16_t col_1;
uint16_t col_2;
+ uint16_t dma_val;
uint8_t v_offset;
uint8_t *tmp_buf_a;
uint8_t *tmp_buf_b;
@@ -101,9 +118,11 @@ 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);
+//runs until the target cycle is reached or the current DMA operation has completed, whicever comes first
+void vdp_run_dma_done(vdp_context * context, uint32_t target_cycles);
void vdp_load_savestate(vdp_context * context, FILE * state_file);
void vdp_save_state(vdp_context * context, FILE * outfile);
-void vdp_control_port_write(vdp_context * context, uint16_t value);
+int vdp_control_port_write(vdp_context * context, uint16_t value);
void vdp_data_port_write(vdp_context * context, uint16_t value);
uint16_t vdp_control_port_read(vdp_context * context);
uint16_t vdp_data_port_read(vdp_context * context);