1 // license:BSD-3-Clause 2 // copyright-holders:Ryan Holtz 3 4 /*************************************************************************** 5 6 Netlist (hazelvid) included from hazeltin.cpp 7 8 ***************************************************************************/ 9 10 #include "netlist/devices/net_lib.h" 11 12 #ifndef __PLIB_PREPROCESSOR__ 13 #endif 14 15 NETLIST_START(hazelvid) 16 17 SOLVER(Solver, 48000) 18 PARAM(Solver.PARALLEL, 0) // Don't do parallel solvers 19 PARAM(Solver.ACCURACY, 1e-4) // works and is sufficient 20 PARAM(NETLIST.USE_DEACTIVATE, 1) 21 22 ANALOG_INPUT(V5, 5) 23 ALIAS(VCC, V5) // no-ttl-dip devices need VCC! 24 25 ALIAS(VSS, V5) // CMOS/MOS default + 26 ALIAS(VDD, GND) // CMOS/MOS default - 27 28 TTL_INPUT(high, 1) 29 TTL_INPUT(low, 0) 30 31 MAINCLOCK(video_clk, 16632000.0) 32 33 /* Character line counter, divide-by-9 */ 34 TTL_74161_FIXME(u88, high, high, high, low, high, u87_6.Q, video_clk, high, high) 35 36 TTL_7404_INVERT(u87_6, u88.RC) 37 38 TTL_74175(u81, video_clk, u88.RC, u81.Q1, low, u88.QC, high) 39 40 TTL_7404_INVERT(u87_5, u81.Q1) 41 ALIAS(ndot, u87_5.Q) 42 TTL_7404_INVERT(u59_4, u81.Q1Q) 43 ALIAS(dot, u59_4.Q) 44 45 /* Character bucket counter */ 46 47 /* least significant 4 bits */ 48 TTL_74161_FIXME(u70, low, low, low, low, high, u59_5.Q, u81.Q2Q, high, high) 49 50 /* most significant 4 bits */ 51 TTL_74161_FIXME(u69, low, low, low, low, high, u59_5.Q, u81.Q2Q, u70.RC, u70.RC) 52 /* Horizontal/Vertical timing signals */ 53 54 /* signal lookup PROM */ 55 PROM_82S126(u71, low, low, u70.QA, u70.QB, u70.QC, u70.QD, u69.QA, u69.QB, u69.QC, low) 56 PARAM(u71.ROM, "u90_702128_82s129.bin") 57 // The prom is always enabled and outputs are only connected to logic inputs 58 PARAM(u71.FORCE_TRISTATE_LOGIC, 1) 59 60 /* signal decoding */ 61 TTL_9334(u72, high, u81.Q1Q, u71.O4, u71.O1, u71.O2, u71.O3) 62 ALIAS(hms, u72.Q1) 63 ALIAS(hmsd, u72.Q2) 64 ALIAS(hblank, u72.Q3) 65 ALIAS(vstrobe, u72.Q4) 66 ALIAS(hdriveq, u72.Q5) 67 ALIAS(vidbus, u72.Q6) 68 TTL_7404_INVERT(u59_5, u72.Q7) 69 70 TTL_7400_NAND(u83_1, high, vstrobe) 71 ALIAS(char_line_clk, u83_1.Q) 72 73 /* Character line counter */ 74 TTL_74161_FIXME(u84, low, low, low, low, high, u83_3.Q, char_line_clk, high, high) 75 ALIAS(lc20, u84.QA) 76 ALIAS(lc21, u84.QB) 77 ALIAS(lc22, u84.QC) 78 ALIAS(lc23, u84.QD) 79 TTL_7400_NAND(u83_3, u84.QB, u84.QD) 80 TTL_7404_INVERT(u92_5, u90.QD) 81 82 TTL_7410_NAND(u89_3, u90.QD, u90.QC, u90.QA) 83 84 /* Character row counter */ 85 TTL_74161_FIXME(u90, low, low, low, low, high, u89_3.Q, u92_3.Q, high, high) 86 TTL_7404_INVERT(u92_3, u84.QD) 87 TTL_7404_INVERT(u92_1, u90.QB) 88 89 TTL_7474(u95_2, u92_5.Q, u95_2.QQ, high, high) 90 91 TTL_7411_AND(u91_3, u84.QA, u84.QD, u90.QB) 92 TTL_7411_AND(u91_1, u92_1.Q, u90.QA, u84.QC) 93 94 TTL_7404_INVERT(u92_2, u90.QC) 95 TTL_7411_AND(u91_2, u95_2.QQ, u92_2.Q, u92_5.Q) 96 TTL_7404_INVERT(u92_6, u91_2.Q) 97 98 /* Vertical blanking and drive */ 99 TTL_7473(u85_vdrive, char_line_clk, u91_1.Q, u91_3.Q, u85_vblankq.QQ) 100 TTL_7473(u85_vblankq, char_line_clk, u92_6.Q, u91_2.Q, high) 101 102 /* Outgoing signals */ 103 TTL_7404_INVERT(u73_4, hdriveq) 104 ALIAS(hdrive, u73_4.Q) 105 106 TTL_7404_INVERT(u61_6, hmsd) 107 TTL_7402_NOR(u60_1, u61_6.Q, u81.Q4) 108 ALIAS(lbc, u60_1.Q) 109 110 TTL_7404_INVERT(u74_1, u84.QB) 111 TTL_7410_NAND(u89_2, vidbus, vidbus, u82_2.Q) 112 ALIAS(ncntbenq, u89_2.Q) 113 114 TTL_7410_NAND(u89_1, u81.Q2, hmsd, u82_2.Q) 115 TTL_7400_NAND(u83_4, u89_1.Q, high) 116 ALIAS(cntclk, u83_4.Q) 117 118 TTL_7402_NOR(u60_2, hblank, u85_vblankq.QQ) 119 ALIAS(clr_vid_sr, u60_2.Q) 120 121 TTL_7404_INVERT(u92_4, u84.QB) 122 TTL_74260_NOR(u82_2, u85_vblankq.QQ, u92_3.Q, u84.QC, u92_4.Q, u84.QA) 123 TTL_7400_NAND(u83_2, vstrobe, u82_2.Q) 124 ALIAS(sync_bus_disable_q, u83_2.Q) 125 126 ALIAS(vdrive, u85_vdrive.Q) 127 TTL_7404_INVERT(u73_5, vdrive) 128 ALIAS(vdriveq, u73_5.Q) 129 130 TTL_7474(u95_1, u84.QD, u85_vblankq.QQ, high, high) 131 ALIAS(vblank, u95_1.Q) 132 133 TTL_74260_NOR(u82_1, u85_vblankq.QQ, u92_4.Q, u84.QD, u84.QC, low) 134 TTL_7404_INVERT(u61_3, u82_1.Q) 135 ALIAS(tvinterq, u61_3.Q) 136 137 TTL_INPUT(cpu_iowq, 1) 138 TTL_INPUT(cpu_ba4, 1) 139 TTL_7432_OR(u36_1, cpu_iowq, cpu_ba4) 140 141 /* Character address counter */ 142 TTL_74193(u7, low, low, low, low, low, u36_1.Q, cntclk, high) 143 TTL_74193(u5, cpu_db0, cpu_db1, cpu_db2, cpu_db3, low, u36_1.Q, u7.CARRYQ, u7.BORROWQ) 144 TTL_74193(u3, cpu_db4, cpu_db5, cpu_db6, cpu_db7, low, u36_1.Q, u5.CARRYQ, u5.BORROWQ) 145 146 TTL_74365(u6, low, ncntbenq, u7.QA, u7.QB, u7.QC, u7.QD, u5.QA, u5.QB) 147 TTL_74365(u4, low, ncntbenq, u5.QC, u5.QD, u3.QA, u3.QB, u3.QC, low) 148 ALIAS(ba0, u6.Y1) 149 ALIAS(ba1, u6.Y2) 150 ALIAS(ba2, u6.Y3) 151 ALIAS(ba3, u6.Y4) 152 ALIAS(ba4, u6.Y5) 153 ALIAS(ba5, u6.Y6) 154 ALIAS(ba6, u4.Y1) 155 ALIAS(ba7, u4.Y2) 156 ALIAS(ba8, u4.Y3) 157 ALIAS(ba9, u4.Y4) 158 ALIAS(ba10, u4.Y5) 159 160 /* Video RAM */ 161 TTL_INPUT(memwq, 1) 162 TTL_INPUT(mrq, 1) 163 TTL_INPUT(ba13, 0) 164 165 TTL_7432_OR(u36_2, memwq, memwq) 166 TTL_7400_NAND(u37_2, u36_2.Q, mrq) 167 TTL_7400_NAND(u37_3, u37_2.Q, ba13) 168 TTL_7400_NAND(u37_4, u37_3.Q, ncntbenq) 169 TTL_7404_INVERT(u17_2, u4.Y5) 170 TTL_7400_NAND(u30_2, u17_2.Q, u37_4.Q) 171 TTL_7400_NAND(u37_1, u4.Y5, u37_4.Q) 172 TTL_INPUT(rwq, 1) 173 174 /* Lower 1K */ 175 RAM_2102A(u22, u30_2.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u22.DO) 176 RAM_2102A(u23, u30_2.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u23.DO) 177 RAM_2102A(u24, u30_2.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u24.DO) 178 RAM_2102A(u25, u30_2.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u25.DO) 179 RAM_2102A(u26, u30_2.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u26.DO) 180 RAM_2102A(u27, u30_2.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u27.DO) 181 RAM_2102A(u28, u30_2.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u28.DO) 182 RAM_2102A(u29, u30_2.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u29.DO) 183 184 /* Upper 1K */ 185 RAM_2102A(u9, u37_1.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u9.DO) 186 RAM_2102A(u10, u37_1.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u10.DO) 187 RAM_2102A(u11, u37_1.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u11.DO) 188 RAM_2102A(u12, u37_1.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u12.DO) 189 RAM_2102A(u13, u37_1.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u13.DO) 190 RAM_2102A(u14, u37_1.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u14.DO) 191 RAM_2102A(u15, u37_1.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u15.DO) 192 RAM_2102A(u16, u37_1.Q, ba0, ba1, ba2, ba3, ba4, ba5, ba6, ba7, ba8, ba9, rwq, u16.DO) 193 194 TTL_INPUT(cpu_db0, 0) 195 TTL_INPUT(cpu_db1, 0) 196 TTL_INPUT(cpu_db2, 0) 197 TTL_INPUT(cpu_db3, 0) 198 TTL_INPUT(cpu_db4, 0) 199 TTL_INPUT(cpu_db5, 0) 200 TTL_INPUT(cpu_db6, 0) 201 TTL_INPUT(cpu_db7, 0) 202 203 TTL_TRISTATE(db0, u30_2.Q, u29.DO, u37_1.Q, u16.DO) 204 TTL_TRISTATE(db1, u30_2.Q, u28.DO, u37_1.Q, u15.DO) 205 TTL_TRISTATE(db2, u30_2.Q, u27.DO, u37_1.Q, u14.DO) 206 TTL_TRISTATE(db3, u30_2.Q, u26.DO, u37_1.Q, u13.DO) 207 TTL_TRISTATE(db4, u30_2.Q, u25.DO, u37_1.Q, u12.DO) 208 TTL_TRISTATE(db5, u30_2.Q, u24.DO, u37_1.Q, u11.DO) 209 TTL_TRISTATE(db6, u30_2.Q, u23.DO, u37_1.Q, u10.DO) 210 TTL_TRISTATE(db7, u30_2.Q, u22.DO, u37_1.Q, u9.DO) 211 212 /* Character generation */ 213 TTL_74175(u68, dot, db0.Q, db1.Q, db2.Q, db3.Q, high) // least significant 4 bits of each character 214 TTL_AM2847(u67, lbc, u68.Q1, u68.Q2, u68.Q3, u68.Q4, sync_bus_disable_q, sync_bus_disable_q, sync_bus_disable_q, sync_bus_disable_q) 215 216 TTL_74175(u58, dot, db4.Q, db5.Q, db6.Q, db7.Q, high) // most signifcant 4 bits of each character 217 TTL_AM2847(u57, lbc, u58.Q1, u58.Q2, u58.Q3, u58.Q4, sync_bus_disable_q, sync_bus_disable_q, sync_bus_disable_q, sync_bus_disable_q) 218 219 TTL_74174(u66, ndot, u67.OUTA, u67.OUTB, u67.OUTC, u67.OUTD, u57.OUTA, u57.OUTB, high) 220 TTL_74175(u56, ndot, u57.OUTC, clr_vid_sr, u79_1.Q, u57.OUTD, high) 221 TTL_7400_NAND(u79_1, u56.Q4, clr_vid_sr) 222 ALIAS(fgbit_q, u56.Q3Q) 223 224 EPROM_2716(u78, low, low, lc20, lc21, lc22, lc23, u66.Q1, u66.Q2, u66.Q3, u66.Q4, u66.Q5, u66.Q6, u56.Q1) 225 PARAM(u78.ROM, "u83_chr.bin") 226 227 // The eprom is always enabled and outputs are only connected to logic inputs 228 PARAM(u78.FORCE_TRISTATE_LOGIC, 1) 229 230 TTL_74166(u77, video_clk, low, ndot, low, u78.O0, u78.O1, u78.O2, u78.O3, u78.O4, u78.O5, u78.O6, low, clr_vid_sr) 231 ALIAS(raw_dot, u77.QH) 232 233 TTL_7400_NAND(u79_4, fgbit_q, fgbit_q) 234 ALIAS(highlight, u79_4.Q) 235 236 ALIAS(video_out, raw_dot) 237 238 /* Highlight and contrast - not yet hooked up */ 239 RES(R40, 160) 240 RES(R41, 270) 241 POT(R21_POT, 500) 242 243 NET_C(R40.1, V5) 244 NET_C(R40.2, R21_POT.1) 245 NET_C(raw_dot, R21_POT.1) 246 NET_C(highlight, R41.1) 247 NET_C(R41.2, R21_POT.1) 248 249 NET_C(R21_POT.3, GND) 250 NET_C(R21_POT.2, GND) 251 252 NET_C(VCC, high.VCC, low.VCC, cpu_ba4.VCC, cpu_iowq.VCC, ba13.VCC, memwq.VCC, rwq.VCC, mrq.VCC, 253 cpu_db0.VCC, cpu_db1.VCC, cpu_db2.VCC, cpu_db3.VCC, cpu_db4.VCC, cpu_db5.VCC, cpu_db6.VCC, cpu_db7.VCC) 254 NET_C(GND, high.GND, low.GND, cpu_ba4.GND, cpu_iowq.GND, ba13.GND, memwq.GND, rwq.GND, mrq.GND, 255 cpu_db0.GND, cpu_db1.GND, cpu_db2.GND, cpu_db3.GND, cpu_db4.GND, cpu_db5.GND, cpu_db6.GND, cpu_db7.GND) 256 257 NETLIST_END() 258