fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
1/*****************************************************************************
2 * pce *
3 *****************************************************************************/
4
5/*****************************************************************************
6 * File name: src/chipset/e68901.h *
7 * Created: 2011-06-13 by Hampa Hug <hampa@hampa.ch> *
8 * Copyright: (C) 2011-2013 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/* MFP 68901 */
24
25
26#ifndef PCE_CHIPSET_E68901_H
27#define PCE_CHIPSET_E68901_H 1
28
29
30typedef struct {
31 unsigned short int_mask;
32 unsigned char cr;
33 unsigned char dr[2];
34
35 char inp;
36 char out;
37
38 unsigned clk_div_inp;
39 unsigned clk_div_set;
40
41 unsigned clk_div;
42 unsigned clk_val;
43} e68901_timer_t;
44
45
46typedef struct {
47 unsigned addr_shift;
48
49 unsigned char gpip_xor;
50 unsigned char gpip_inp;
51 unsigned char gpip_val;
52 unsigned char gpip_aer;
53 unsigned char gpip_ddr;
54
55 unsigned short irr1;
56 unsigned short irr2;
57 unsigned short ier;
58 unsigned short ipr;
59 unsigned short isr;
60 unsigned short imr;
61 unsigned char ivr;
62 unsigned char vec;
63
64 unsigned char ucr;
65 unsigned char rsr[2];
66 unsigned char tsr[2];
67 unsigned char rdr[2];
68 unsigned char tdr[2];
69 unsigned recv_clk_cnt;
70 unsigned recv_clk_max;
71 unsigned send_clk_cnt;
72 unsigned send_clk_max;
73 unsigned char usart_timer;
74
75 e68901_timer_t timer[4];
76
77 void *recv_ext;
78 int (*recv_fct) (void *ext, unsigned char *val);
79
80 void *send_ext;
81 int (*send_fct) (void *ext, unsigned char val);
82
83 unsigned char irq_val;
84 void *irq_ext;
85 void (*irq_fct) (void *ext, unsigned char val);
86} e68901_t;
87
88
89void e68901_init (e68901_t *mfp, unsigned addr_shift);
90void e68901_free (e68901_t *mfp);
91
92void e68901_set_irq_fct (e68901_t *mfp, void *ext, void *fct);
93void e68901_set_recv_fct (e68901_t *mfp, void *ext, void *fct);
94void e68901_set_send_fct (e68901_t *mfp, void *ext, void *fct);
95
96void e68901_set_usart_timer (e68901_t *mfp, unsigned idx);
97
98void e68901_set_clk_div (e68901_t *mfp, unsigned div);
99
100unsigned e68901_inta (e68901_t *mfp);
101
102void e68901_set_inp (e68901_t *mfp, unsigned char val);
103void e68901_set_inp_n (e68901_t *mfp, unsigned idx, unsigned char val);
104void e68901_set_inp_4 (e68901_t *mfp, unsigned char val);
105void e68901_set_inp_5 (e68901_t *mfp, unsigned char val);
106
107void e68901_set_tbi (e68901_t *mfp, unsigned char val);
108
109unsigned char e68901_get_uint8 (e68901_t *mfp, unsigned long addr);
110unsigned short e68901_get_uint16 (e68901_t *mfp, unsigned long addr);
111unsigned long e68901_get_uint32 (e68901_t *mfp, unsigned long addr);
112
113void e68901_set_uint8 (e68901_t *mfp, unsigned long addr, unsigned char val);
114void e68901_set_uint16 (e68901_t *mfp, unsigned long addr, unsigned short val);
115void e68901_set_uint32 (e68901_t *mfp, unsigned long addr, unsigned long val);
116
117int e68901_receive (e68901_t *mfp, unsigned char val);
118
119void e68901_reset (e68901_t *mfp);
120
121void e68901_clock_usart (e68901_t *mfp, unsigned n);
122
123void e68901_clock (e68901_t *mfp, unsigned n);
124
125
126#endif