fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
at master 151 lines 5.0 kB view raw
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