static struct dma_rec *dma_record[2];
static int dma_record_toggle, dma_record_frame[2];
-void record_dma_reset (void)
+static void dma_record_init(void)
+{
+ if (!dma_record[0]) {
+ dma_record[0] = xmalloc(struct dma_rec, NR_DMA_REC_HPOS * NR_DMA_REC_VPOS);
+ dma_record[1] = xmalloc(struct dma_rec, NR_DMA_REC_HPOS * NR_DMA_REC_VPOS);
+ record_dma_reset(0);
+ dma_record_toggle = 0;
+ dma_record_frame[0] = -1;
+ dma_record_frame[1] = -1;
+ }
+}
+
+void record_dma_reset(int start)
{
int v, h;
struct dma_rec *dr, *dr2;
- if (!dma_record[0])
+ if (start && !dma_record[0]) {
+ dma_record_init();
+ }
+ if (!dma_record[0]) {
return;
+ }
dma_record_toggle ^= 1;
dr = dma_record[dma_record_toggle];
for (v = 0; v < NR_DMA_REC_VPOS; v++) {
dr2->addr = 0xffffffff;
}
}
+ if (start && !debug_dma) {
+ debug_dma = start;
+ }
}
void record_copper_reset (void)
struct dma_rec *dr;
if (!dma_record[0]) {
- dma_record[0] = xmalloc(struct dma_rec, NR_DMA_REC_HPOS * NR_DMA_REC_VPOS);
- dma_record[1] = xmalloc(struct dma_rec, NR_DMA_REC_HPOS * NR_DMA_REC_VPOS);
- dma_record_toggle = 0;
- record_dma_reset();
- dma_record_frame[0] = -1;
- dma_record_frame[1] = -1;
+ dma_record_init();
}
if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS)
dr->cf_reg = 0xffff;
}
-static void dma_record_init(void)
-{
- if (!dma_record[0]) {
- dma_record[0] = xmalloc(struct dma_rec, NR_DMA_REC_HPOS * NR_DMA_REC_VPOS);
- dma_record[1] = xmalloc(struct dma_rec, NR_DMA_REC_HPOS * NR_DMA_REC_VPOS);
- dma_record_toggle = 0;
- record_dma_reset();
- dma_record_frame[0] = -1;
- dma_record_frame[1] = -1;
- }
-}
-
void record_cia_access(int r, int mask, uae_u16 value, bool rw, int hpos, int vpos)
{
struct dma_rec* dr;
} else if (*inptr == 'o') {
if (debug_dma) {
console_out_f (_T("DMA debugger disabled\n"), debug_dma);
- record_dma_reset();
+ record_dma_reset(0);
reset_drawing();
debug_dma = 0;
}
decode_dma_record (v2, v1, cmd == 'v', nextcmd == 'l');
} else {
if (debug_dma) {
- record_dma_reset();
+ record_dma_reset(0);
reset_drawing();
}
debug_dma = v1 < 0 ? -v1 : 1;
extern void record_dma_read_value(uae_u32 v);
extern void record_dma_read_value_wide(uae_u64 v, bool quad);
extern void record_dma_replace(int hpos, int vpos, int type, int extra);
-extern void record_dma_reset(void);
+extern void record_dma_reset(int);
extern void record_dma_event(uae_u32 evt, int hpos, int vpos);
extern void record_dma_event_data(uae_u32 evt, int hpos, int vpos, uae_u32 data);
extern void record_dma_clear(int hpos, int vpos);