blob: 8272c25e39eb8aef31d8e0816cd7e67206268fb8 (
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
|
// cia.h
//
// 20060803 Markku Alén
#ifndef __CIA_H__
#define __CIA_H__ 1
typedef struct __cia_interrupt
{
int mask;
int request;
}cia_interrupt_t;
typedef struct __cia_port
{
int pins;
int input;
int output;
int direction;
}cia_port_t;
#define UPDATE_CIA_PORT_PINS(CIA_PORT) ((CIA_PORT)->pins = ((CIA_PORT)->output & (CIA_PORT)->direction) | ((CIA_PORT)->input & ~((CIA_PORT)->direction)))
typedef struct __cia_timer
{
int latch;
int counter;
int running;
int toggle_mode;
int one_shot;
cia_interrupt_t interrupt;
}cia_timer_t;
typedef struct __cia
{
cia_port_t port_a, port_b;
cia_timer_t timer_a, timer_b;
int inmode_a, inmode_b;
int irq_pin;
}cia_t;
void cia_init(cia_t *cia);
int cia_read(cia_t *cia, int address);
void cia_write(cia_t *cia, int address, int data);
int cia_a_port_output(cia_t *cia);
int cia_b_port_output(cia_t *cia);
void cia_port_a_input(cia_t *cia, int data);
void cia_port_b_input(cia_t *cia, int data);
void cia_exec(cia_t *cia, unsigned int cycles);
#endif
|