fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
1/*****************************************************************************
2 * pce *
3 *****************************************************************************/
4
5/*****************************************************************************
6 * File name: src/chipset/e8530.h *
7 * Created: 2007-11-11 by Hampa Hug <hampa@hampa.ch> *
8 * Copyright: (C) 2007-2020 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/* Zilog Z8530 SCC */
24
25
26#ifndef PCE_CHIPSET_E8530_H
27#define PCE_CHIPSET_E8530_H 1
28
29
30#define E8530_BUF_MAX 256
31
32
33typedef struct {
34 unsigned char wr[16];
35 unsigned char rr[16];
36
37 unsigned char rr0_latch_msk;
38 unsigned char rr0_latch_val;
39
40 unsigned char txd_empty;
41 unsigned char rxd_empty;
42
43 unsigned char int_on_next_rx;
44
45 unsigned long bps;
46 unsigned parity;
47 unsigned bpc;
48 unsigned stop;
49
50 unsigned char_clk_cnt;
51 unsigned char_clk_div;
52
53 unsigned read_char_cnt;
54 unsigned read_char_max;
55
56 unsigned write_char_cnt;
57 unsigned write_char_max;
58
59 unsigned long rtxc;
60
61 unsigned tx_i;
62 unsigned tx_j;
63 unsigned char txbuf[E8530_BUF_MAX];
64
65 unsigned rx_i;
66 unsigned rx_j;
67 unsigned char rxbuf[E8530_BUF_MAX];
68
69 void *set_inp_ext;
70 void (*set_inp) (void *ext, unsigned char val);
71
72 void *set_out_ext;
73 void (*set_out) (void *ext, unsigned char val);
74
75 void *set_rts_ext;
76 void (*set_rts) (void *ext, unsigned char val);
77
78 void *set_comm_ext;
79 void (*set_comm) (void *ext, unsigned long bps, unsigned parity, unsigned bpc, unsigned stop);
80} e8530_chn_t;
81
82
83typedef struct {
84 unsigned index;
85
86 e8530_chn_t chn[2];
87
88 unsigned long pclk;
89
90 void *irq_ext;
91 void (*irq) (void *ext, unsigned char val);
92 unsigned char irq_val;
93} e8530_t;
94
95
96void e8530_init (e8530_t *scc);
97void e8530_free (e8530_t *scc);
98
99e8530_t *e8530_new (void);
100void e8530_del (e8530_t *scc);
101
102void e8530_set_irq_fct (e8530_t *scc, void *ext, void *fct);
103
104void e8530_set_inp_fct (e8530_t *scc, unsigned chn, void *ext, void *fct);
105void e8530_set_out_fct (e8530_t *scc, unsigned chn, void *ext, void *fct);
106void e8530_set_rts_fct (e8530_t *scc, unsigned chn, void *ext, void *fct);
107void e8530_set_comm_fct (e8530_t *scc, unsigned chn, void *ext, void *fct);
108
109void e8530_set_multichar (e8530_t *scc, unsigned chn, unsigned read_max, unsigned write_max);
110
111void e8530_set_clock (e8530_t *scc, unsigned long pclk, unsigned long rtxca, unsigned long rtxcb);
112
113unsigned char e8530_get_ctl_a (e8530_t *scc);
114unsigned char e8530_get_ctl_b (e8530_t *scc);
115
116void e8530_set_ctl (e8530_t *scc, unsigned chn, unsigned char val);
117void e8530_set_ctl_a (e8530_t *scc, unsigned char val);
118void e8530_set_ctl_b (e8530_t *scc, unsigned char val);
119
120unsigned char e8530_get_data (e8530_t *scc, unsigned chn);
121unsigned char e8530_get_data_a (e8530_t *scc);
122unsigned char e8530_get_data_b (e8530_t *scc);
123
124void e8530_set_data (e8530_t *scc, unsigned chn, unsigned char val);
125void e8530_set_data_a (e8530_t *scc, unsigned char val);
126void e8530_set_data_b (e8530_t *scc, unsigned char val);
127
128void e8530_set_dcd (e8530_t *scc, unsigned chn, unsigned char val);
129void e8530_set_dcd_a (e8530_t *scc, unsigned char val);
130void e8530_set_dcd_b (e8530_t *scc, unsigned char val);
131
132void e8530_set_cts (e8530_t *scc, unsigned chn, unsigned char val);
133void e8530_set_cts_a (e8530_t *scc, unsigned char val);
134void e8530_set_cts_b (e8530_t *scc, unsigned char val);
135
136void e8530_receive (e8530_t *scc, unsigned chn, unsigned char val);
137void e8530_receive_a (e8530_t *scc, unsigned char val);
138void e8530_receive_b (e8530_t *scc, unsigned char val);
139
140unsigned char e8530_send (e8530_t *scc, unsigned chn);
141unsigned char e8530_send_a (e8530_t *scc);
142unsigned char e8530_send_b (e8530_t *scc);
143
144int e8530_inp_full (e8530_t *scc, unsigned chn);
145int e8530_out_empty (e8530_t *scc, unsigned chn);
146
147void e8530_reset (e8530_t *scc);
148void e8530_clock (e8530_t *scc, unsigned n);
149
150
151#endif