Subversion Repositories pentevo

Rev

Rev 608 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6 lvd 1
#ifndef ZX_H
2
#define ZX_H
3
 
129 chrv 4
/**
5
 * @file
6
 * @brief Interchange with FPGA registers (ZX ports) via SPI.
7
 * @author http://www.nedopc.com
8
 *
9
 * Interchange with ZX ports:
10
 * - keyboard port (nowait);
11
 * - mouse port (nowait);
12
 * - kempstone joystick (nowait);
13
 * - gluk clock (wait).
14
 *
15
 * Configure internal FPGA registers (set modes):
16
 * - vga/tv mode;
17
 * - reset CPU.
18
 */
6 lvd 19
 
20
// key code is 7 bits, 8th bit is press/release (1=press,0=release)
21
//
12 lvd 22
// ACHTUNG!!!! DO NOT CHANGE THESE DEFINES, OTHERWISE MUCH OF CODE WILL BREAK!!!!
23
//
6 lvd 24
#define PRESS_BIT  7
25
#define PRESS_MASK 128
8 lvd 26
#define KEY_MASK   127
6 lvd 27
 
28
 
129 chrv 29
/** ZX keyboard data. */
110 lvd 30
#define SPI_KBD_DAT   0x10
129 chrv 31
/** ZX keyboard stop bit. */
110 lvd 32
#define SPI_KBD_STB   0x11
94 chrv 33
 
129 chrv 34
/** ZX mouse X coordinate register. */
110 lvd 35
#define SPI_MOUSE_X   0x20
129 chrv 36
/** ZX mouse Y coordinate register. */
110 lvd 37
#define SPI_MOUSE_Y   0x21
129 chrv 38
/** ZX mouse Y coordinate register. */
110 lvd 39
#define SPI_MOUSE_BTN 0x22
94 chrv 40
 
129 chrv 41
/** Kempston joystick register. */
113 chrv 42
#define SPI_KEMPSTON_JOYSTICK 0x23
43
 
129 chrv 44
/** ZX reset register. */
110 lvd 45
#define SPI_RST_REG   0x30
67 lvd 46
 
163 chrv 47
/** ZX configuration register. */
48
#define SPI_CONFIG_REG   0x50
49
/** ZX NMI bit flag of configuration register. */
50
#define SPI_CONFIG_NMI_FLAG 0x02
217 lvd 51
/** ZX $FE.D6 (tape in) bit flag of configuration register. */
52
#define SPI_TAPE_FLAG 0x04
292 chrv 53
/** ZX tapeout mode bit flag of configuration register. */
54
#define SPI_TAPEOUT_MODE_FLAG 0x08
100 chrv 55
 
263 chrv 56
/** ZX all data for wait registers. */
57
#define SPI_WAIT_DATA  0x40
129 chrv 58
/** ZX Gluk address register. */
263 chrv 59
#define SPI_GLUK_ADDR  0x41
60
/** ZX Kondratiev's rs232 address register. */
61
#define SPI_RS232_ADDR 0x42
67 lvd 62
 
94 chrv 63
/** Send/recv data for spi registers. */
64
UBYTE zx_spi_send(UBYTE addr, UBYTE data, UBYTE mask);
67 lvd 65
 
66
 
129 chrv 67
/** Pause between (CS|SS) and not(CS|SS). */
12 lvd 68
#define SHIFT_PAUSE 8
219 chrv 69
/** Pause between (CS|SS) and not(CS|SS) counter. */
6 lvd 70
extern volatile UBYTE shift_pause;
71
 
115 ddp 72
// real keys bitmap. send order: LSbit first, from [4] to [0]
119 ddp 73
// [5]..[9] - received data
117 ddp 74
// [10] - end scan flag
75
extern UBYTE zx_realkbd[11];
115 ddp 76
 
8 lvd 77
/*struct zx {
6 lvd 78
        UBYTE counters[40];
79
        UBYTE map[5]; // send order: LSbit first, from [4] to [0]
80
        UBYTE reset_type;
8 lvd 81
};*/
6 lvd 82
 
672 chrv 83
/** PS/2 keyboard LCTRL key status. */
84
#define KB_LCTRL_MASK   0x01
85
/** PS/2 keyboard LCTRL key status. */
86
#define KB_RCTRL_MASK   0x02
87
/** PS/2 keyboard LALT key status. */
88
#define KB_LALT_MASK    0x04
89
/** PS/2 keyboard LALT key status. */
90
#define KB_RALT_MASK    0x08
219 chrv 91
/** PS/2 keyboard LEFT SHIFT key status. */
672 chrv 92
#define KB_LSHIFT_MASK 0x10
219 chrv 93
/** PS/2 keyboard RIGHT SHIFT key status. */
672 chrv 94
#define KB_RSHIFT_MASK 0x20
219 chrv 95
/** PS/2 keyboard F12 key status. */
672 chrv 96
#define KB_F12_MASK    0x40
219 chrv 97
/** PS/2 keyboard CTRL,ALT,DEL mapped status (set = mapped all keys). */
672 chrv 98
//#define KB_CTRL_ALT_DEL_MAPPED_MASK 0x80
219 chrv 99
/** PS/2 keyboard control keys status (for additional functons). */
672 chrv 100
extern volatile UBYTE kb_ctrl_status;
101
/** PS/2 keyboard control keys mapped to zx keyboard (mapped keys not used in additional functions). */
102
extern volatile UBYTE kb_ctrl_mapped;
6 lvd 103
 
67 lvd 104
 
8 lvd 105
#define ZX_TASK_INIT 0
106
#define ZX_TASK_WORK 1
6 lvd 107
 
129 chrv 108
/**
109
 * Interchange via SPI.
110
 * @param operation [in] - operation type.
111
 */
8 lvd 112
void zx_task(UBYTE operation);
6 lvd 113
 
11 lvd 114
void zx_init(void);
8 lvd 115
 
6 lvd 116
void to_zx(UBYTE scancode, UBYTE was_E0, UBYTE was_release);
11 lvd 117
 
6 lvd 118
void update_keys(UBYTE zxcode, UBYTE was_release);
119
 
151 chrv 120
/** Clear zx keyboard buffers. */
11 lvd 121
void zx_clr_kb(void);
6 lvd 122
 
11 lvd 123
 
6 lvd 124
void  zx_fifo_put(UBYTE input);
125
UBYTE zx_fifo_isfull(void);
126
UBYTE zx_fifo_isempty(void);
127
UBYTE zx_fifo_get(void);
128
UBYTE zx_fifo_copy(void);
129
 
75 chrv 130
/**
131
 * ZX mouse button register.
132
 * Bits description:
133
 * 7..4 - wheel code (if present) or 1111 if wheel not present;
115 ddp 134
 * 3    - always 1;
135
 * 2    - middle button (0, if pressed);
136
 * 1    - right button (0, if pressed);
137
 * 0    - left button (0, if pressed).
75 chrv 138
 */
139
extern volatile UBYTE zx_mouse_button;
6 lvd 140
 
75 chrv 141
/** ZX mouse X coordinate register. */
142
extern volatile UBYTE zx_mouse_x;
6 lvd 143
 
75 chrv 144
/** ZX mouse Y coordinate register. */
145
extern volatile UBYTE zx_mouse_y;
6 lvd 146
 
75 chrv 147
/**
148
 * Reset ZX mouse registers to default value.
129 chrv 149
 * @param enable [in] - 0: values like no mouse connected, other: values like mouse connected
75 chrv 150
 */
151
void zx_mouse_reset(UBYTE enable);
6 lvd 152
 
75 chrv 153
/** Send values of ZX mouse registers to fpga. */
71 chrv 154
void zx_mouse_task(void);
6 lvd 155
 
71 chrv 156
 
263 chrv 157
/** Gluk clock ZX port out. */
158
#define ZXW_GLUK_CLOCK  0x01
94 chrv 159
 
263 chrv 160
/** Kondratiev's modem ZX port out. */
161
#define ZXW_KONDR_RS232 0x02
162
 
94 chrv 163
/**
164
 * Work with WAIT ports.
129 chrv 165
 * @param status [in] - bit 7 - CPU is 0 -write, 1-read wait port
608 ddp 166
 *                      bits 6..0 is index of port
94 chrv 167
 */
168
void zx_wait_task(UBYTE status);
169
 
292 chrv 170
/**
171
 * Switch mode on ZX.
172
 * @param mode - mode flag
173
 */
174
void zx_mode_switcher(UBYTE mode);
94 chrv 175
 
163 chrv 176
/**
177
 * Set configuration register on zx.
608 ddp 178
 * @param flags [in] - bit 2: SPI_TAPE_FLAG
179
 *                     bit 5: not used
180
 *                     bit 6: not used
181
 *                     bit 7: not used
163 chrv 182
 */
183
void zx_set_config(UBYTE flags);
184
 
6 lvd 185
#endif
186