blob: 538656a302710e65cf2e58a50f704c95cc8a25bf (
plain) (
blame)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/*****************************************************************************
*
* includes/z80ne.h
*
* Nuova Elettronica Z80NE
*
* http://www.z80ne.com/
*
****************************************************************************/
#ifndef Z80NE_H_
#define Z80NE_H_
#include "video/mc6847.h"
/***************************************************************************
CONSTANTS
***************************************************************************/
#define Z80NE_CPU_SPEED_HZ 1920000 /* 1.92 MHz */
#define LX383_KEYS 16
#define LX383_DOWNSAMPLING 16
#define LX385_TAPE_SAMPLE_FREQ 38400
/* wave duration threshold */
typedef enum
{
TAPE_300BPS = 300, /* 300 bps */
TAPE_600BPS = 600, /* 600 bps */
TAPE_1200BPS = 1200 /* 1200 bps */
} z80netape_speed;
typedef struct {
struct {
int length; /* time cassette level is at input.level */
int level; /* cassette level */
int bit; /* bit being read */
} input;
struct {
int length; /* time cassette level is at output.level */
int level; /* cassette level */
int bit; /* bit to to output */
} output;
z80netape_speed speed; /* 300 - 600 - 1200 */
int wave_filter;
int wave_length;
int wave_short;
int wave_long;
} cass_data_t;
typedef struct {
int drq;
int intrq;
UINT8 drive; /* current drive */
UINT8 head; /* current head */
} wd17xx_state_t;
class z80ne_state : public driver_device
{
public:
z80ne_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_vdg(*this, "mc6847"),
m_videoram(*this,"videoram") {}
optional_device<mc6847_base_device> m_vdg;
optional_shared_ptr<UINT8> m_videoram;
UINT8 m_lx383_scan_counter;
UINT8 m_lx383_key[LX383_KEYS];
int m_lx383_downsampler;
int m_nmi_delay_counter;
int m_reset_delay_counter;
device_t *m_ay31015;
UINT8 m_lx385_ctrl;
device_t *m_lx388_kr2376;
emu_timer *m_cassette_timer;
cass_data_t m_cass_data;
wd17xx_state_t m_wd17xx_state;
DECLARE_READ8_MEMBER(lx383_r);
DECLARE_WRITE8_MEMBER(lx383_w);
DECLARE_READ8_MEMBER(lx385_data_r);
DECLARE_READ8_MEMBER(lx385_ctrl_r);
DECLARE_WRITE8_MEMBER(lx385_data_w);
DECLARE_WRITE8_MEMBER(lx385_ctrl_w);
DECLARE_READ8_MEMBER(lx388_data_r);
DECLARE_READ8_MEMBER(lx388_read_field_sync);
DECLARE_DIRECT_UPDATE_MEMBER(z80ne_default);
DECLARE_DIRECT_UPDATE_MEMBER(z80ne_nmi_delay_count);
DECLARE_DIRECT_UPDATE_MEMBER(z80ne_reset_delay_count);
DECLARE_DRIVER_INIT(z80netf);
DECLARE_DRIVER_INIT(z80net);
DECLARE_DRIVER_INIT(z80netb);
DECLARE_DRIVER_INIT(z80ne);
};
/*----------- defined in machine/z80ne.c -----------*/
READ8_DEVICE_HANDLER(lx388_mc6847_videoram_r);
READ8_DEVICE_HANDLER(lx390_fdc_r);
WRITE8_DEVICE_HANDLER(lx390_fdc_w);
READ8_DEVICE_HANDLER(lx390_reset_bank);
WRITE8_DEVICE_HANDLER(lx390_motor_w);
MACHINE_RESET(z80ne);
MACHINE_RESET(z80net);
MACHINE_RESET(z80netb);
MACHINE_RESET(z80netf);
MACHINE_START(z80ne);
MACHINE_START(z80net);
MACHINE_START(z80netb);
MACHINE_START(z80netf);
INPUT_CHANGED(z80ne_reset);
INPUT_CHANGED(z80ne_nmi);
#endif /* Z80NE_H_ */
|