fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
1/*****************************************************************************
2 * pce *
3 *****************************************************************************/
4
5/*****************************************************************************
6 * File name: src/chipset/e6522.h *
7 * Created: 2007-11-09 by Hampa Hug <hampa@hampa.ch> *
8 * Copyright: (C) 2007-2023 Hampa Hug <hampa@hampa.ch> *
9 *****************************************************************************/
10
11/*****************************************************************************
12 * This program is free software. You can redistribute it and / or modify it *
13 * under the terms of the GNU General Public License version 2 as published *
14 * by the Free Software Foundation. *
15 * *
16 * This program is distributed in the hope that it will be useful, but *
17 * WITHOUT ANY WARRANTY, without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General *
19 * Public License for more details. *
20 *****************************************************************************/
21
22
23/* VIA 6522 */
24
25
26#ifndef PCE_CHIPSET_E6522_H
27#define PCE_CHIPSET_E6522_H 1
28
29
30typedef struct {
31 unsigned addr_shift;
32
33 unsigned char ora;
34 unsigned char orb;
35
36 unsigned char ira;
37 unsigned char irb;
38
39 unsigned char ddra;
40 unsigned char ddrb;
41
42 unsigned char shift_val;
43 unsigned char shift_cnt;
44
45 unsigned char acr;
46 unsigned char pcr;
47
48 unsigned char ifr;
49 unsigned char ier;
50
51 char t1_reload;
52 char t1_timeout;
53 char t1_hot;
54 unsigned short t1_latch;
55 unsigned short t1_val;
56
57 char t2_timeout;
58 char t2_hot;
59 unsigned short t2_latch;
60 unsigned short t2_val;
61
62 unsigned char ca1_inp;
63 unsigned char ca2_inp;
64
65 unsigned char cb1_inp;
66 unsigned char cb2_inp;
67
68 void *set_ora_ext;
69 void (*set_ora) (void *ext, unsigned char val);
70 unsigned char set_ora_val;
71
72 void *set_orb_ext;
73 void (*set_orb) (void *ext, unsigned char val);
74 unsigned char set_orb_val;
75
76 void *set_ca2_ext;
77 void (*set_ca2) (void *ext, unsigned char val);
78 unsigned char set_ca2_val;
79
80 void *set_cb2_ext;
81 void (*set_cb2) (void *ext, unsigned char val);
82 unsigned char set_cb2_val;
83
84 void *set_shift_out_ext;
85 void (*set_shift_out) (void *ext, unsigned char val);
86
87 void *irq_ext;
88 void (*irq) (void *ext, unsigned char val);
89 unsigned char irq_val;
90} e6522_t;
91
92
93void e6522_init (e6522_t *via, unsigned addr_shift);
94void e6522_free (e6522_t *via);
95
96void e6522_set_ora_fct (e6522_t *via, void *ext, void *fct);
97void e6522_set_orb_fct (e6522_t *via, void *ext, void *fct);
98void e6522_set_ca2_fct (e6522_t *via, void *ext, void *fct);
99void e6522_set_cb2_fct (e6522_t *via, void *ext, void *fct);
100void e6522_set_shift_out_fct (e6522_t *via, void *ext, void *fct);
101void e6522_set_irq_fct (e6522_t *via, void *ext, void *fct);
102
103unsigned char e6522_shift_out (e6522_t *via);
104void e6522_shift_in (e6522_t *via, unsigned char val);
105
106void e6522_set_ca1_inp (e6522_t *via, unsigned char val);
107void e6522_set_ca2_inp (e6522_t *via, unsigned char val);
108
109void e6522_set_cb1_inp (e6522_t *via, unsigned char val);
110void e6522_set_cb2_inp (e6522_t *via, unsigned char val);
111
112void e6522_set_ira_inp (e6522_t *via, unsigned char val);
113void e6522_set_irb_inp (e6522_t *via, unsigned char val);
114
115void e6522_set_shift_inp (e6522_t *via, unsigned char val);
116
117unsigned char e6522_get_uint8 (e6522_t *via, unsigned long addr);
118unsigned short e6522_get_uint16 (e6522_t *via, unsigned long addr);
119unsigned long e6522_get_uint32 (e6522_t *via, unsigned long addr);
120
121void e6522_set_uint8 (e6522_t *via, unsigned long addr, unsigned char val);
122void e6522_set_uint16 (e6522_t *via, unsigned long addr, unsigned short val);
123void e6522_set_uint32 (e6522_t *via, unsigned long addr, unsigned long val);
124
125void e6522_reset (e6522_t *via);
126
127void e6522_clock (e6522_t *via, unsigned n);
128
129
130#endif