forked from derekfountain/zx-spectrum-pico-interface-one
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patherrata.txt
317 lines (227 loc) · 10.5 KB
/
errata.txt
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
v1.0
====
Transistor Q1 is rotated. Needs turning 90deg anticlockwise.
- Done on board #2
"ROM Acc 3V3" is on the silkscreen, test point was removed.
Same for "GND" just above U4.
- Done on board #2
The direction for the data bus level shifter needs to be
ROM_READ_INV, not /RD.
- Cut ZXRD track on back of board #2
- Picked up ROM_READ_INV from OR output (pin 9) and
connected to DIR (pin 1) on level shifter U4
- Done on board #2
Move the GND via from pin 19 on U4, it's under the chip and
I can't get to it. This is /OE.
- Done on board #2
Remove level shifter U2
- Bridged across gap on board #2
- Removed on board #2
Remove level shifter U3
- Bridged across gap on board #2
- Removed on board #2
All the above were fixed (by hand) in v1.1
v1.1
====
Disconnect the 3V3s for all the Picos. I've got the outputs
of 3 regulators tied together. Separate into 3 supplies.
- Done on v1.2 of the board
- Cut 3V3 track to Pico2 on current board
: Need to cut 3v3 track to pico3 on current board
Change the dbus level shifter direction control from hardware to
software. Wire GPIO27 of Pico2 as an input for the ROM_READ_INV
signal, and GPIO28 as an output to the data bus level shifter's DIR
pin. This will allow the data bus to reverse direction on
memory reads, and also on IO request reads.
- Done on board #2,
- Done on v1.2 of the board
Remove the level shifter U202 which does IORQ, RD and WR.
These signals are permanently ZX->Pico so don't need shifting.
- Bridged on board #1
- Done on v1.2 of the board
I need to connect the /WAIT signal on the edge connector to GPIO18
on the IO Pico.
- Done on board #2
- Done on v1.2 of the board
v1.2
====
Make sure the GPIOs which share the ADC are not used for 5V. IO Pico
has ROM_READ_INV going into GPIO27. I need another level shifter.
I'm out of GPIOs.
- Level shifter has been added on v1.2 schematic
: I won't do it on board #1, adding the level shifter will be too
difficult.
Make IO PIco GPIO27 an output (it's an ADC GPIO)
- Moved ROM_READ_INV to GPIO15 and ZXWAIT to GPIO27. That makes
the signal on GPIO27 an output
- Done on board #1 and schematic
Set up the PSRAM connection on SPI0. That's GPIOs 16 to 19.
- Done on board #1 and schematic
Untangle the bus pins on all the Picos. Make databus D0 to D7
in sequence, then address lines. I thought simplifying the layout
process would make things easier, but actually, keeping the
software simple and fast has more benefit.
- Done on schematic, both Pico1 and Pico2
: Won't be doing this on board #1, too distruptive
Have Pico1 tell Pico2 that one of its ports (0xE7 or 0xEF) is on the
address bus. Then Pico2 can do away with 7 address lines.
- Done on board #1
- Signal from Pico1 GPIO27 to Pico2 GPIO13 done on board #1
- Keep A3 in place on Pico2
I need a signal from Pico2 to Pico1. Pico1 can't release the Z80
until Pico2 is ready to go. Pico2 changes the level shifter
direction, so Pico1 can't be the ROM until Pico2 is ready to go.
: Not required. If Pico1 boots slower than Pico2, then
Pico2 will be running by the time Pico1 releases the Z80.
I can just put a delay in the Pico1 code. Bit yuk, but I don't
have the GPIO spare on Pico1.
:: Skip this for now
Add another couple of LEDs to the IO pico so I can see at a glance
if it's responding to IOs. Low priority, but if I have a couple
of GPIOs left this will be handy. Make sure the tracks are easy
to cut so i can reuse the GPIOs if I need to.
: Needs doing
:: No GPIO available, but I could connect an LED to the SPI
slave enable signal? Check with AM whether that would
cause a problem
No pop the level shifter, I can probably just put a series resistor
on that signal line.
Test points required, bring them out to plated holes:
Test pin on Pico1, use pin 27, needed to trigger scope on particular
instruction, like INIR
Test pin on Pico2, use pin 27 here too, although there are more options
Test pin on Pico3, might as well use pin27 here too
ROM_READ_INV so I can see when Pico1 is telling Pico2 to change DIR
IORQ, RD and WR, make sure they're still available, they're useful
DIR_CHANGE from Pico2. I need to be able to see when Pico2 is changing the dbus direction.
: All need doing
v1.3 Final is for fabrication as board #2
v1.3 This version was made into board#2
====
Stagger the rows of data bus resistors. Offset each from the ones either side of
it so I can get the larger tweezers in. Or space them out a bit more.
: Done
First attempt NOPOPed the extra level shifter and added a series 100R resistor
into the ROM_READ signal. Need to confirm this worked. Its function is to protect
the Pico's ADC GPIO which I'm putting 5V into. I can't really tell if it works
unless and until the Pico fails, but I can at least confirm 100R is correct for
timing.
: It didn't work, the signal from the 3V3 side of the resistor was OK, but the
level was wrong. It went from 2.5V to about 1.5V. I didn't investigate, I
just took the R100 off and added the level shifter.
:: Remove the resistor footprint and NOPOP silkscreen
: Footprints removed
PSRAM footprint is missing the pin-1 dot on the silkscreen.
: Done on all components
ROMCS needs to support devices like Multiface which might be behind the device.
ROMCS into the ZX is permanently at 5V so as to disable the Spectrum's internal
ROM. Leave that alone. Link the rear edge connector ROMCS to the data bus level
shifter's /CE line via a weak pull down resistor. If a MF device pulls the line
up because it wants to supply the ROM, this will disable my level shifter and
the data bus will go HIZ.
: Done on schematic
: Tested on board, best I can
OLED CLK and SDA signals are transposed. I've labelled Pico3 GPIO4 as CLK and
GPIO5 and SDA. Check the A4 pin out diagram: GPIO4 is SDA and GPIO5 is CLK.
This is a hardware I2C bus so I can't switch them in software.
: Fixed on schematic and board
OLED screen is currently mounted upside and out the back. Work out where the
screen is going to be mounted and set the header correctly.
: Checked, mounting is correct
Rotary encoder connection is reversed on the board, it needs to stick out the
back for the pins to be connected up correctly. I think it needs flipping over
to have the encoder out the front.
: Checked, it's now correct
Rotary encoder pins are in sequence SW, DT, CLK, the example code I had ready
is CLK, DT, SW.
: Fixed in code
SPI is not suitable for the Pico to Pico comms. Switched to TP link, pins
GPIO0 and GPI1 on the UI Pico, crossed over to pins GPIO12 and GPIO13
on the IO Pico.
: Fixed on board (soldered wires)
: Fixed in code
: Fixed on schematic
: Fixed on new board
SD Card reader card detect pin needs connecting up.
: Done on board, I used GPIO28 as input
: Fixed on schematic
: Fixed on new board
LED output. I'm going to do it the easy way: 8 red LEDs connected to
8 GPIOs on the UI Pico. 330R with the 3mm reds I have looks perfect.
: Schematic updated, 2 LEDs tested on prototype
: New board has 8 signals and their return on a header
3-way RUN switch. I'm now having to power cycle the whole machine in order to
reset the UI Pico. A push to make switch which grounds all the RUN pins is
required.
: Tested, working on hardware
: Added to schematic
: Fixed on new board
ZX Reset switch, since mine is currently a dangling microswitch.
: Added to schematic
: Fixed on new board
Input switches. The GUI is too messy with just the rotary encoder. I need a couple
of switches as extra inputs, "Action" and "Cancel".
: Schematic updated
: Tested and working on breadboard. I used UI GPIOs 26 and 22.
: Fixed on new board
Test blipper points were on header connectors. Those header connectors have
been removed as they're no longer needed. The test blipper points are, so
ensure they're exposed to a footprint.
: Done
Case. 3D printed case required. I'm thinking of a tray to sit the lie-flat PCB in,
edge connectors front and back. Add a couple of holes for posts or screws.
: Holes in PCB added
Daughterboard, fits on top like a shield. The screen, 2 input switches and 8 LED
signals need to be on a separate daughterboard. This will be mounted over the top
of the PCB, above the Picos. Connected via 3 rows of header pins, sockets on PCB
which should be spaced out so they provide mechanical support for the top board.
The aluminium faceplate sits over the top of this. I need
3V3
GND
OLED CLK
OLED DAT
Action switch signal
Cancel switch signal
LEDs 0 to 7 inclusive
Common LEDs return
which is 15 signals, all carried via header pins.
This board should be 2.0mm if possible so it can handle the pressing of the buttons.
I've got the header right under the button so it should be OK at 1.6mm.
: Headers added to the PCB
: Daughterboard design needs doing
v1.4 This was the first lie-flat prototype
====
The rear edge connector footprint doesn't have the slot cut out.
I need to add that to the library footprint.
The LEDs on the daughterboard aren't connected properly. M0_LED
goes to the right most LED, which is correct. M1_LED goes to the
left most LED, it should go to the second rightmost. Not sure
how I managed that.
: Fixed in software
The rotary encoder's direction has somehow got reversed. I turn the
knob one way and the microdrive selector icon moves the other way.
...
On reflection, maybe it's right after all? I'm not sure which way
things should move in the MD selector or the files list.
: I tweaked the state machine, I think I'm happy with it now.
Sometimes a LED before the one which should light, lights. I think
this is due to the shift register approach of the LED motor-on design.
a CAT 8 sends the motor-on logic 1 to all 7 preceding microdrives. If
the status is picked up during that shift, whichever one has the current
shifted 1 will report as motor-on and the LED lights.
: Need to investigate and fix in software
The 3-way connector near the rotary encoder which is used to separate
the two boards is a bit flimsy. It bends over. Make it a 6 way.
: Needs doing
Any expansion which is plugged into the back will foul on the reset
switches if it's wider than the connector (many, probably most, are).
Move the switches. There's room for one near the SD card slot. The
other can stay in that corner but be turned out sideways, facing left.
The front of the case can't have a wall, it obstructs the connection
to the Spectrum. Knock out 2mm strips in the corners of the PCBs so
the case can go around at least a bit.
: Needs doing on main PCB
: Needs doing on daughterboard PCB
The Cancel and Action buttons are too far to the left. Spacing is correct,
but they need moving to the right so they centre on the rotary knob. The
distance moved will need to be reflected in the case holes.