aboutsummaryrefslogtreecommitdiff
path: root/sim/txvu/dma.c
blob: 7f178aaefe176b9f424d42e307c527f3db5856c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*  Copyright (C) 1998, Cygnus Solutions

    */

#include "sim-main.h"

#include "device.h"
#include "dma.h"

int
dma_io_read_buffer(device *me,
                   void *dest,
                   int space,
                   address_word addr,
                   unsigned nr_bytes,
                   sim_cpu *processor,
                   sim_cia cia)
{
	printf("%s: Read!\n", me->name);
	return nr_bytes;
}

static sim_event_handler do_the_dma_thing_handler;

int
dma_io_write_buffer(device *me,
                    const void *source,
                    int space,
                    address_word addr,
                    unsigned nr_bytes,
                    sim_cpu *processor,
                    sim_cia cia)
{
	printf("%s: Write!\n", me->name);

	/* Do an event before the next instruction! */
	sim_events_schedule (CPU_STATE(processor), 
			     0 /*time*/, 
			     do_the_dma_thing_handler,
			     CPU_STATE(processor) /*data*/);
	return nr_bytes;
}

device dma_device = 
  { 
    "Dma Controller", 
    &dma_io_read_buffer,
    &dma_io_write_buffer 
  };

void 
dma_attach(SIM_DESC sd) 
{
  sim_core_attach (sd,
		   NULL,
                   0 /*level*/,
                   access_read_write,
                   0 /*space ???*/,
                   DMA_REGISTER_WINDOW_START,
                   DMA_REGISTER_WINDOW_SIZE /*nr_bytes*/,
                   0 /*modulo*/,
                   &dma_device,
                   NULL /*buffer*/);
}

static void
do_the_dma_thing_handler(SIM_DESC sd, void *data)
{
  printf("Dma Event!!!\n");
}