diff --git a/Export/ZX-EQ.html b/Export/ZX-EQ.html new file mode 100644 index 0000000..36b2e1c --- /dev/null +++ b/Export/ZX-EQ.html @@ -0,0 +1,4717 @@ + + + + + + + Interactive BOM for KiCAD + + + + + + +
+
+
+ + + + + + + + + + + +
+ Title + + Revision +
+ Company + + Date +
+
+
+ +
+ + + +
+
+ + + +
+
+ + + +
+ + +
+
+
+
+
+
+
+
+
+
+ + +
+ +
+
+
+ + + + + +
+
+
+
+
+ + + + +
+
+
+
+ + + + +
+
+
+
+
+ + + + diff --git a/Export/ZX-EQ.pdf b/Export/ZX-EQ.pdf new file mode 100644 index 0000000..a92a00d Binary files /dev/null and b/Export/ZX-EQ.pdf differ diff --git a/Firmware/ZX_EQ7160.pof b/Firmware/ZX_EQ7160.pof new file mode 100644 index 0000000..83ea04d Binary files /dev/null and b/Firmware/ZX_EQ7160.pof differ diff --git a/Firmware/epm7160-leds-right__upper.pof b/Firmware/epm7160-leds-right__upper.pof new file mode 100644 index 0000000..43430e0 Binary files /dev/null and b/Firmware/epm7160-leds-right__upper.pof differ diff --git a/Firmware/epm7160-leds-right__upper.tdf b/Firmware/epm7160-leds-right__upper.tdf new file mode 100644 index 0000000..e345184 --- /dev/null +++ b/Firmware/epm7160-leds-right__upper.tdf @@ -0,0 +1,261 @@ +% ver 10.01.22% +TITLE "MSX_EQ"; +-- Libs +include "lpm_counter.inc"; +include "lpm_shiftreg.inc"; + +%-----------------------------% +SUBDESIGN MSX_EQ +( + gclk : INPUT; + a15, a14, a1 : INPUT; + data[7..0] : INPUT; + ioreq : INPUT; + wr : INPUT; + m1 : INPUT; + led_plus[8..0] : OUTPUT; + led_minus[2..0][9..0] : OUTPUT; + +) +VARIABLE + --cnt_to_3 : lpm_counter with (LPM_WIDTH = 2, LPM_MODULUS = H"3"); -- refresh led + cnt_div : lpm_counter with (LPM_WIDTH = 16); -- 3.7MHz + spec[8..0] : lpm_counter with (LPM_WIDTH = 4, LPM_DIRECTION = "DOWN"); + RegAddr[3..0] : DFFE; + --RegValue[7..0] : DFFE; + FreqA[6..2], FreqB[6..2], FreqC[6..2] : DFFE; + ValA[3..0], ValB[3..0], ValC[3..0] : DFFE; +-- NODES + cnt_to_3[1..0] : NODE; + Val_ch[3..0] : NODE; + wr_addr : NODE; + wr_data : NODE; + ssg : NODE; + bc1 : NODE; + bdir : NODE; +-- clk20M, Clk40M, clk320M : NODE; +-- Modules +-- DFFE +-- CommandPC[7..0], CommandNVI[7..0] : DFFE; +-- Test and Led Signal + +BEGIN + ssg = not (a15 and (not (a1 or ioreq))); + bc1 = not (ssg or (not (a14 and m1))); + bdir = not (ssg or wr); + + wr_addr = bdir and bc1; + wr_data = bdir and (not bc1); + + cnt_to_3[] = cnt_div.q[13..12]; + + (spec[8..0], cnt_div).clock = gclk; + (RegAddr[], FreqA[], FreqB[], FreqC[], ValA[], ValB[], ValC[]).clk = gclk; + + RegAddr[] = data[3..0]; + RegAddr[].ena = wr_addr; + + (FreqA[3..2], FreqB[3..2], FreqC[3..2]) = data[7..6]; + (FreqA[6..4], FreqB[6..4], FreqC[6..4]) = data[2..0]#data[3]; + ( ValA[3..0], ValB[3..0], ValC[3..0]) = data[3..0]; + FreqA[3..2].ena = wr_data&(RegAddr[]==H"00"); + FreqB[3..2].ena = wr_data&(RegAddr[]==H"02"); + FreqC[3..2].ena = wr_data&(RegAddr[]==H"04"); + FreqA[6..4].ena = wr_data&(RegAddr[]==H"01"); + FreqB[6..4].ena = wr_data&(RegAddr[]==H"03"); + FreqC[6..4].ena = wr_data&(RegAddr[]==H"05"); + ValA[].ena = wr_data&(RegAddr[]==H"08"); + ValB[].ena = wr_data&(RegAddr[]==H"09"); + ValC[].ena = wr_data&(RegAddr[]==H"0A"); + +-- spec[0].cnt_en = !spec[0].cout&cnt_div.cout; +-- spec[1].cnt_en = !spec[1].cout&cnt_div.cout; +-- spec[2].cnt_en = !spec[2].cout&cnt_div.cout; +-- spec[3].cnt_en = !spec[3].cout&cnt_div.cout; +-- spec[4].cnt_en = !spec[4].cout&cnt_div.cout; +-- spec[5].cnt_en = !spec[5].cout&cnt_div.cout; +-- spec[6].cnt_en = !spec[6].cout&cnt_div.cout; +-- spec[7].cnt_en = !spec[7].cout&cnt_div.cout; +-- spec[8].cnt_en = !spec[8].cout&cnt_div.cout; +-- spec[6].cnt_en = !spec[6].cout&cnt_div.cout; -- (spec[6].q[]>0); + spec[0].cnt_en = (spec[0].q[]>0)&cnt_div.cout; -- (spec[7].q[]>0); + spec[1].cnt_en = (spec[1].q[]>0)&cnt_div.cout; -- (spec[7].q[]>0); + spec[2].cnt_en = (spec[2].q[]>0)&cnt_div.cout; -- (spec[7].q[]>0); + spec[3].cnt_en = (spec[3].q[]>0)&cnt_div.cout; -- (spec[7].q[]>0); + spec[4].cnt_en = (spec[4].q[]>0)&cnt_div.cout; -- (spec[7].q[]>0); + spec[5].cnt_en = (spec[5].q[]>0)&cnt_div.cout; -- (spec[7].q[]>0); + spec[6].cnt_en = (spec[6].q[]>0)&cnt_div.cout; -- (spec[7].q[]>0); + spec[7].cnt_en = (spec[7].q[]>0)&cnt_div.cout; -- (spec[7].q[]>0); + spec[8].cnt_en = (spec[8].q[]>0)&cnt_div.cout; -- (spec[8].q[]>0); + + if wr_data then + if (RegAddr[]==H"00")#(RegAddr[]==H"01")#(RegAddr[]==H"08") then + Val_ch[] = ValA[]; + spec[8].sload = (FreqA[6..2] =H"02")&(FreqA[6..2] =H"03")&(FreqA[6..2] =H"05")&(FreqA[6..2] =H"07")&(FreqA[6..2] =H"0A")&(FreqA[6..2] =H"0D")&(FreqA[6..2] =H"10")&(FreqA[6..2] =H"17"); + end if; + if (RegAddr[]==H"02")#(RegAddr[]==H"03")#(RegAddr[]==H"09") then + Val_ch[] = ValB[]; + spec[8].sload = (FreqB[6..2] =H"02")&(FreqB[6..2] =H"03")&(FreqB[6..2] =H"05")&(FreqB[6..2] =H"07")&(FreqB[6..2] =H"0A")&(FreqB[6..2] =H"0D")&(FreqB[6..2] =H"10")&(FreqB[6..2] =H"17"); + end if; + if (RegAddr[]==H"04")#(RegAddr[]==H"05")#(RegAddr[]==H"0A") then + Val_ch[] = ValC[]; + spec[8].sload = (FreqC[6..2] =H"02")&(FreqC[6..2] =H"03")&(FreqC[6..2] =H"05")&(FreqC[6..2] =H"07")&(FreqC[6..2] =H"0A")&(FreqC[6..2] =H"0D")&(FreqC[6..2] =H"10")&(FreqC[6..2] =H"17"); + end if; + end if; + + spec[0].data[] = Val_ch[]; + spec[1].data[] = Val_ch[]; + spec[2].data[] = Val_ch[]; + spec[3].data[] = Val_ch[]; + spec[4].data[] = Val_ch[]; + spec[5].data[] = Val_ch[]; + spec[6].data[] = Val_ch[]; + spec[7].data[] = Val_ch[]; + spec[8].data[] = Val_ch[]; + + if cnt_to_3[] == H"00" then + led_plus[0] = VCC; led_plus[1] = GND; led_plus[2] = GND; + led_plus[3] = VCC; led_plus[4] = GND; led_plus[5] = GND; + led_plus[6] = VCC; led_plus[7] = GND; led_plus[8] = GND; + + led_minus[0][0] = !(spec[0].q[]> 0); + led_minus[0][1] = !(spec[0].q[]> 2); + led_minus[0][2] = !(spec[0].q[]> 4); + led_minus[0][3] = !(spec[0].q[]> 5); + led_minus[0][4] = !(spec[0].q[]> 6); + led_minus[0][5] = !(spec[0].q[]> 7); + led_minus[0][6] = !(spec[0].q[]> 8); + led_minus[0][7] = !(spec[0].q[]> 9); + led_minus[0][8] = !(spec[0].q[]>10); + led_minus[0][9] = !(spec[0].q[]>11); + + led_minus[1][0] = !(spec[3].q[]> 0); + led_minus[1][1] = !(spec[3].q[]> 2); + led_minus[1][2] = !(spec[3].q[]> 4); + led_minus[1][3] = !(spec[3].q[]> 5); + led_minus[1][4] = !(spec[3].q[]> 6); + led_minus[1][5] = !(spec[3].q[]> 7); + led_minus[1][6] = !(spec[3].q[]> 8); + led_minus[1][7] = !(spec[3].q[]> 9); + led_minus[1][8] = !(spec[3].q[]>10); + led_minus[1][9] = !(spec[3].q[]>11); + + led_minus[2][0] = !(spec[6].q[]> 0); + led_minus[2][1] = !(spec[6].q[]> 2); + led_minus[2][2] = !(spec[6].q[]> 4); + led_minus[2][3] = !(spec[6].q[]> 5); + led_minus[2][4] = !(spec[6].q[]> 6); + led_minus[2][5] = !(spec[6].q[]> 7); + led_minus[2][6] = !(spec[6].q[]> 8); + led_minus[2][7] = !(spec[6].q[]> 9); + led_minus[2][8] = !(spec[6].q[]>10); + led_minus[2][9] = !(spec[6].q[]>11); + + end if; + + if cnt_to_3[] == H"01" then + led_plus[1] = VCC; led_plus[0] = GND; led_plus[2] = GND; + led_plus[4] = VCC; led_plus[3] = GND; led_plus[5] = GND; + led_plus[7] = VCC; led_plus[6] = GND; led_plus[8] = GND; + led_minus[0][0] = !(spec[1].q[]> 0); + led_minus[0][1] = !(spec[1].q[]> 2); + led_minus[0][2] = !(spec[1].q[]> 4); + led_minus[0][3] = !(spec[1].q[]> 5); + led_minus[0][4] = !(spec[1].q[]> 6); + led_minus[0][5] = !(spec[1].q[]> 7); + led_minus[0][6] = !(spec[1].q[]> 8); + led_minus[0][7] = !(spec[1].q[]> 9); + led_minus[0][8] = !(spec[1].q[]>10); + led_minus[0][9] = !(spec[1].q[]>11); + + led_minus[1][0] = !(spec[4].q[]> 0); + led_minus[1][1] = !(spec[4].q[]> 2); + led_minus[1][2] = !(spec[4].q[]> 4); + led_minus[1][3] = !(spec[4].q[]> 5); + led_minus[1][4] = !(spec[4].q[]> 6); + led_minus[1][5] = !(spec[4].q[]> 7); + led_minus[1][6] = !(spec[4].q[]> 8); + led_minus[1][7] = !(spec[4].q[]> 9); + led_minus[1][8] = !(spec[4].q[]>10); + led_minus[1][9] = !(spec[4].q[]>11); + + led_minus[2][0] = !(spec[7].q[]> 0); + led_minus[2][1] = !(spec[7].q[]> 2); + led_minus[2][2] = !(spec[7].q[]> 4); + led_minus[2][3] = !(spec[7].q[]> 5); + led_minus[2][4] = !(spec[7].q[]> 6); + led_minus[2][5] = !(spec[7].q[]> 7); + led_minus[2][6] = !(spec[7].q[]> 8); + led_minus[2][7] = !(spec[7].q[]> 9); + led_minus[2][8] = !(spec[7].q[]>10); + led_minus[2][9] = !(spec[7].q[]>11); + end if; + + if cnt_to_3[] == H"02" then + led_plus[2] = VCC; led_plus[0] = GND; led_plus[1] = GND; + led_plus[5] = VCC; led_plus[3] = GND; led_plus[4] = GND; + led_plus[8] = VCC; led_plus[6] = GND; led_plus[7] = GND; + led_minus[0][0] = !(spec[2].q[]> 0); + led_minus[0][1] = !(spec[2].q[]> 2); + led_minus[0][2] = !(spec[2].q[]> 4); + led_minus[0][3] = !(spec[2].q[]> 5); + led_minus[0][4] = !(spec[2].q[]> 6); + led_minus[0][5] = !(spec[2].q[]> 7); + led_minus[0][6] = !(spec[2].q[]> 8); + led_minus[0][7] = !(spec[2].q[]> 9); + led_minus[0][8] = !(spec[2].q[]>10); + led_minus[0][9] = !(spec[2].q[]>11); + + led_minus[1][0] = !(spec[5].q[]> 0); + led_minus[1][1] = !(spec[5].q[]> 2); + led_minus[1][2] = !(spec[5].q[]> 4); + led_minus[1][3] = !(spec[5].q[]> 5); + led_minus[1][4] = !(spec[5].q[]> 6); + led_minus[1][5] = !(spec[5].q[]> 7); + led_minus[1][6] = !(spec[5].q[]> 8); + led_minus[1][7] = !(spec[5].q[]> 9); + led_minus[1][8] = !(spec[5].q[]>10); + led_minus[1][9] = !(spec[5].q[]>11); + + led_minus[2][0] = !(spec[8].q[]> 0); + led_minus[2][1] = !(spec[8].q[]> 2); + led_minus[2][2] = !(spec[8].q[]> 4); + led_minus[2][3] = !(spec[8].q[]> 5); + led_minus[2][4] = !(spec[8].q[]> 6); + led_minus[2][5] = !(spec[8].q[]> 7); + led_minus[2][6] = !(spec[8].q[]> 8); + led_minus[2][7] = !(spec[8].q[]> 9); + led_minus[2][8] = !(spec[8].q[]>10); + led_minus[2][9] = !(spec[8].q[]>11); + end if; + if cnt_to_3[] == H"03" then + led_plus[2] = GND; led_plus[0] = GND; led_plus[1] = GND; + led_plus[5] = GND; led_plus[3] = GND; led_plus[4] = GND; + led_plus[8] = GND; led_plus[6] = GND; led_plus[7] = GND; + led_minus[][] = GND; + end if; +End; \ No newline at end of file diff --git a/Firmware/zx_eq_10bit_neg.pof b/Firmware/zx_eq_10bit_neg.pof new file mode 100644 index 0000000..6c2eee7 Binary files /dev/null and b/Firmware/zx_eq_10bit_neg.pof differ diff --git a/Firmware/zx_eq_10bit_pos.pof b/Firmware/zx_eq_10bit_pos.pof new file mode 100644 index 0000000..e46eb64 Binary files /dev/null and b/Firmware/zx_eq_10bit_pos.pof differ diff --git a/Firmware/zx_eq_8bit_neg.pof b/Firmware/zx_eq_8bit_neg.pof new file mode 100644 index 0000000..a9fda5a Binary files /dev/null and b/Firmware/zx_eq_8bit_neg.pof differ diff --git a/Firmware/zx_eq_8bit_pos.pof b/Firmware/zx_eq_8bit_pos.pof new file mode 100644 index 0000000..103714b Binary files /dev/null and b/Firmware/zx_eq_8bit_pos.pof differ diff --git a/Foto/2026-05-20 22.11.42.jpg b/Foto/2026-05-20 22.11.42.jpg new file mode 100644 index 0000000..854d3b7 Binary files /dev/null and b/Foto/2026-05-20 22.11.42.jpg differ diff --git a/Foto/2026-05-20 22.20.54.jpg b/Foto/2026-05-20 22.20.54.jpg new file mode 100644 index 0000000..514a79f Binary files /dev/null and b/Foto/2026-05-20 22.20.54.jpg differ diff --git a/Foto/2026-05-20 22.21.01.jpg b/Foto/2026-05-20 22.21.01.jpg new file mode 100644 index 0000000..a77b919 Binary files /dev/null and b/Foto/2026-05-20 22.21.01.jpg differ diff --git a/Foto/2026-05-21 11.46.21.jpg b/Foto/2026-05-21 11.46.21.jpg new file mode 100644 index 0000000..ebaa908 Binary files /dev/null and b/Foto/2026-05-21 11.46.21.jpg differ diff --git a/Foto/ZX-EQ_PCB.png b/Foto/ZX-EQ_PCB.png new file mode 100644 index 0000000..dbd4f7b Binary files /dev/null and b/Foto/ZX-EQ_PCB.png differ diff --git a/Gerber/ZX-EQ_Gerber.zip b/Gerber/ZX-EQ_Gerber.zip new file mode 100644 index 0000000..985146a Binary files /dev/null and b/Gerber/ZX-EQ_Gerber.zip differ