Rev 1042 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
826 | lvd | 1 | // ZX-Evo Base Configuration (c) NedoPC 2008,2009,2010,2011,2012,2013,2014,2015,2016,2019 |
360 | lvd | 2 | // |
3 | // top-level |
||
4 | |||
668 | lvd | 5 | /* |
6 | This file is part of ZX-Evo Base Configuration firmware. |
||
7 | |||
8 | ZX-Evo Base Configuration firmware is free software: |
||
9 | you can redistribute it and/or modify it under the terms of |
||
10 | the GNU General Public License as published by |
||
11 | the Free Software Foundation, either version 3 of the License, or |
||
12 | (at your option) any later version. |
||
13 | |||
14 | ZX-Evo Base Configuration firmware is distributed in the hope that |
||
15 | it will be useful, but WITHOUT ANY WARRANTY; without even |
||
16 | the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||
17 | See the GNU General Public License for more details. |
||
18 | |||
19 | You should have received a copy of the GNU General Public License |
||
20 | along with ZX-Evo Base Configuration firmware. |
||
21 | If not, see <http://www.gnu.org/licenses/>. |
||
22 | */ |
||
23 | |||
24 | `include "../include/tune.v" |
||
25 | |||
4 | lvd | 26 | module top( |
27 | |||
28 | // clocks |
||
29 | input fclk, |
||
30 | output clkz_out, |
||
31 | input clkz_in, |
||
32 | |||
33 | // z80 |
||
34 | input iorq_n, |
||
35 | input mreq_n, |
||
36 | input rd_n, |
||
37 | input wr_n, |
||
38 | input m1_n, |
||
39 | input rfsh_n, |
||
40 | output int_n, |
||
41 | output nmi_n, |
||
42 | output wait_n, |
||
43 | output res, |
||
44 | |||
45 | inout [7:0] d, |
||
46 | input [15:0] a, |
||
47 | |||
48 | // zxbus and related |
||
49 | output csrom, |
||
50 | output romoe_n, |
||
51 | output romwe_n, |
||
52 | |||
53 | output rompg0_n, |
||
54 | output dos_n, // aka rompg1 |
||
55 | output rompg2, |
||
56 | output rompg3, |
||
57 | output rompg4, |
||
58 | |||
59 | input iorqge1, |
||
60 | input iorqge2, |
||
61 | output iorq1_n, |
||
62 | output iorq2_n, |
||
63 | |||
64 | // DRAM |
||
65 | inout [15:0] rd, |
||
66 | output [9:0] ra, |
||
67 | output rwe_n, |
||
68 | output rucas_n, |
||
69 | output rlcas_n, |
||
70 | output rras0_n, |
||
71 | output rras1_n, |
||
72 | |||
73 | // video |
||
74 | output [1:0] vred, |
||
75 | output [1:0] vgrn, |
||
76 | output [1:0] vblu, |
||
77 | |||
78 | output vhsync, |
||
79 | output vvsync, |
||
80 | output vcsync, |
||
81 | |||
82 | // AY control and audio/tape |
||
83 | output ay_clk, |
||
84 | output ay_bdir, |
||
85 | output ay_bc1, |
||
86 | |||
87 | output beep, |
||
88 | |||
89 | // IDE |
||
90 | output [2:0] ide_a, |
||
91 | inout [15:0] ide_d, |
||
92 | |||
93 | output ide_dir, |
||
94 | |||
95 | input ide_rdy, |
||
96 | |||
97 | output ide_cs0_n, |
||
98 | output ide_cs1_n, |
||
99 | output ide_rs_n, |
||
100 | output ide_rd_n, |
||
101 | output ide_wr_n, |
||
102 | |||
103 | // VG93 and diskdrive |
||
104 | output vg_clk, |
||
105 | |||
106 | output vg_cs_n, |
||
107 | output vg_res_n, |
||
108 | |||
109 | output vg_hrdy, |
||
110 | output vg_rclk, |
||
111 | output vg_rawr, |
||
112 | output [1:0] vg_a, // disk drive selection |
||
113 | output vg_wrd, |
||
114 | output vg_side, |
||
115 | |||
116 | input step, |
||
117 | input vg_sl, |
||
118 | input vg_sr, |
||
119 | input vg_tr43, |
||
120 | input rdat_b_n, |
||
121 | input vg_wf_de, |
||
122 | input vg_drq, |
||
123 | input vg_irq, |
||
124 | input vg_wd, |
||
125 | |||
126 | // serial links (atmega-fpga, sdcard) |
||
127 | output sdcs_n, |
||
128 | output sddo, |
||
129 | output sdclk, |
||
130 | input sddi, |
||
131 | |||
132 | input spics_n, |
||
133 | input spick, |
||
134 | input spido, |
||
135 | output spidi, |
||
136 | output spiint_n |
||
137 | ); |
||
138 | |||
139 | wire dos; |
||
140 | |||
141 | |||
142 | wire zclk; // z80 clock for short |
||
143 | |||
200 | lvd | 144 | wire zpos,zneg; |
145 | |||
4 | lvd | 146 | wire rst_n; // global reset |
147 | |||
148 | wire rrdy; |
||
149 | wire [15:0] rddata; |
||
150 | |||
151 | wire [4:0] rompg; |
||
152 | |||
153 | wire [7:0] zports_dout; |
||
154 | wire zports_dataout; |
||
155 | wire porthit; |
||
156 | |||
699 | lvd | 157 | wire csrom_int; |
67 | lvd | 158 | |
699 | lvd | 159 | |
67 | lvd | 160 | wire [39:0] kbd_data; |
161 | wire [ 7:0] mus_data; |
||
110 | lvd | 162 | wire kbd_stb,mus_xstb,mus_ystb,mus_btnstb,kj_stb; |
67 | lvd | 163 | |
164 | wire [ 4:0] kbd_port_data; |
||
1022 | lvd | 165 | wire [ 7:0] kj_port_data; |
67 | lvd | 166 | wire [ 7:0] mus_port_data; |
167 | |||
168 | |||
88 | lvd | 169 | |
170 | |||
171 | wire [7:0] wait_read,wait_write; |
||
172 | wire wait_rnw; |
||
173 | wire wait_start_gluclock; |
||
228 | lvd | 174 | wire wait_start_comport; |
88 | lvd | 175 | wire wait_end; |
176 | wire [7:0] gluclock_addr; |
||
228 | lvd | 177 | wire [2:0] comport_addr; |
88 | lvd | 178 | wire [6:0] waits; |
179 | |||
180 | |||
181 | |||
182 | |||
98 | lvd | 183 | // config signals |
826 | lvd | 184 | wire [7:0] not_used0; |
185 | wire [7:0] not_used1; |
||
98 | lvd | 186 | wire cfg_vga_on; |
684 | lvd | 187 | // |
188 | wire [1:0] modes_raster; |
||
189 | wire mode_contend_type = 1'b0; // 48/128/+2 or +2a/+3 TODO: take these signals from somewhere |
||
190 | wire mode_contend_ena = 1'b1; // contention enable |
||
191 | wire contend; |
||
826 | lvd | 192 | // |
193 | wire [3:0] fdd_mask; |
||
88 | lvd | 194 | |
425 | lvd | 195 | // nmi signals |
196 | wire gen_nmi; |
||
197 | wire clr_nmi; |
||
198 | wire in_nmi; |
||
859 | lvd | 199 | wire in_trdemu; |
929 | lvd | 200 | wire trdemu_wr_disable; |
576 | lvd | 201 | wire [1:0] set_nmi; |
202 | wire imm_nmi; |
||
737 | lvd | 203 | wire nmi_buf_clr; |
98 | lvd | 204 | |
576 | lvd | 205 | // breakpoint signals |
206 | wire brk_ena; |
||
207 | wire [15:0] brk_addr; |
||
98 | lvd | 208 | |
209 | |||
4 | lvd | 210 | wire tape_in; |
211 | |||
212 | wire [15:0] ideout; |
||
213 | wire [15:0] idein; |
||
214 | wire idedataout; |
||
215 | |||
216 | |||
217 | wire [7:0] zmem_dout; |
||
218 | wire zmem_dataout; |
||
219 | |||
220 | |||
221 | |||
222 | reg [3:0] ayclk_gen; |
||
223 | |||
224 | |||
225 | wire [7:0] received; |
||
226 | wire [7:0] tobesent; |
||
227 | |||
228 | |||
229 | wire intrq,drq; |
||
856 | lvd | 230 | wire vg_wrFF_fclk; |
862 | lvd | 231 | wire vg_rdwr_fclk; |
863 | lvd | 232 | wire [1:0] vg_ddrv; |
4 | lvd | 233 | |
234 | |||
668 | lvd | 235 | wire up_ena; |
236 | wire [ 5:0] up_paladdr; |
||
237 | wire [ 7:0] up_paldata; |
||
238 | wire up_palwr; |
||
4 | lvd | 239 | |
240 | |||
241 | |||
668 | lvd | 242 | |
4 | lvd | 243 | assign zclk = clkz_in; |
244 | |||
245 | |||
246 | // RESETTER |
||
247 | wire genrst; |
||
248 | |||
249 | resetter myrst( .clk(fclk), |
||
134 | ddp | 250 | .rst_in_n(~genrst), |
251 | .rst_out_n(rst_n) ); |
||
4 | lvd | 252 | defparam myrst.RST_CNT_SIZE = 6; |
253 | |||
254 | |||
123 | lvd | 255 | |
425 | lvd | 256 | assign nmi_n=gen_nmi ? 1'b0 : 1'bZ; |
123 | lvd | 257 | |
4 | lvd | 258 | assign res= ~rst_n; |
259 | |||
260 | |||
261 | |||
262 | |||
263 | |||
284 | lvd | 264 | |
265 | |||
266 | |||
4 | lvd | 267 | assign ide_rs_n = rst_n; |
268 | |||
269 | assign ide_d = idedataout ? ideout : 16'hZZZZ; |
||
270 | assign idein = ide_d; |
||
271 | |||
272 | assign ide_dir = ~idedataout; |
||
273 | |||
274 | |||
275 | |||
276 | |||
30 | lvd | 277 | |
278 | wire [7:0] peff7; |
||
279 | wire [7:0] p7ffd; |
||
280 | |||
281 | |||
200 | lvd | 282 | wire romrw_en; |
283 | wire cpm_n; |
||
395 | lvd | 284 | wire fnt_wr; |
30 | lvd | 285 | |
200 | lvd | 286 | |
287 | |||
30 | lvd | 288 | wire cpu_req,cpu_rnw,cpu_wrbsel,cpu_strobe; |
289 | wire [20:0] cpu_addr; |
||
290 | wire [15:0] cpu_rddata; |
||
291 | wire [7:0] cpu_wrdata; |
||
292 | |||
340 | lvd | 293 | wire cbeg,post_cbeg,pre_cend,cend; |
30 | lvd | 294 | |
340 | lvd | 295 | wire go; |
30 | lvd | 296 | |
297 | |||
543 | lvd | 298 | // AVR SDcard control |
299 | wire avr_lock_claim, |
||
300 | avr_lock_grant, |
||
301 | avr_sdcs_n, |
||
302 | avr_sd_start; |
||
303 | wire [7:0] avr_sd_datain; |
||
304 | wire [7:0] avr_sd_dataout; |
||
30 | lvd | 305 | |
543 | lvd | 306 | // ZX SDcard control |
307 | wire zx_sdcs_n_val, |
||
308 | zx_sdcs_n_stb, |
||
309 | zx_sd_start; |
||
310 | wire [7:0] zx_sd_datain; |
||
311 | wire [7:0] zx_sd_dataout; |
||
30 | lvd | 312 | |
543 | lvd | 313 | |
284 | lvd | 314 | wire tape_read; // data for tapein |
30 | lvd | 315 | |
284 | lvd | 316 | wire beeper_mux; // what is mixed to FPGA beeper output - beeper (0) or tapeout (1) |
213 | lvd | 317 | |
340 | lvd | 318 | wire [2:0] atm_scr_mode; |
284 | lvd | 319 | |
471 | lvd | 320 | wire atm_turbo; |
340 | lvd | 321 | |
471 | lvd | 322 | |
360 | lvd | 323 | wire beeper_wr, covox_wr; |
340 | lvd | 324 | |
325 | |||
284 | lvd | 326 | |
425 | lvd | 327 | wire [5:0] palcolor; // palette readback |
1112 | lvd | 328 | wire atm_pen2; // ATM palette write enable |
284 | lvd | 329 | |
330 | |||
331 | |||
467 | lvd | 332 | wire [1:0] int_turbo; |
333 | wire cpu_next; |
||
334 | wire cpu_stall; |
||
335 | |||
336 | wire external_port; |
||
337 | |||
338 | |||
339 | |||
4 | lvd | 340 | //AY control |
341 | always @(posedge fclk) |
||
342 | begin |
||
343 | ayclk_gen <= ayclk_gen + 4'd1; |
||
344 | end |
||
345 | |||
346 | assign ay_clk = ayclk_gen[3]; |
||
347 | |||
348 | |||
349 | |||
350 | |||
351 | |||
200 | lvd | 352 | // fix ATM2-style ROM addressing for PENT-like ROM layout. |
353 | // this causes compications when writing to the flashROM from Z80 |
||
354 | // and need to split and re-build old ATM romfiles before burning in |
||
355 | // flash |
||
256 | lvd | 356 | // wire [1:0] adr_fix; |
357 | // assign adr_fix = ~{ rompg[0], rompg[1] }; |
||
358 | // assign rompg0_n = ~adr_fix[0]; |
||
359 | // assign dos_n = adr_fix[1]; |
||
360 | // assign rompg2 = 1'b0;//rompg[2]; |
||
361 | // assign rompg3 = 1'b0;//rompg[3]; |
||
362 | // assign rompg4 = 1'b0;//rompg[4]; |
||
4 | lvd | 363 | |
256 | lvd | 364 | assign rompg0_n = ~rompg[0]; |
365 | assign dos_n = rompg[1]; |
||
366 | assign rompg2 = rompg[2]; |
||
367 | assign rompg3 = rompg[3]; |
||
368 | assign rompg4 = rompg[4]; |
||
4 | lvd | 369 | |
200 | lvd | 370 | wire [3:0] zclk_stall; |
4 | lvd | 371 | |
467 | lvd | 372 | zclock zclock |
373 | ( |
||
684 | lvd | 374 | .fclk (fclk ), |
375 | .zclk (zclk ), |
||
376 | .rst_n(rst_n), |
||
377 | |||
378 | .a(a), |
||
379 | |||
380 | .mreq_n(mreq_n), |
||
381 | .iorq_n(iorq_n), |
||
382 | .m1_n (m1_n ), |
||
383 | .rfsh_n(rfsh_n), |
||
384 | |||
385 | .modes_raster (modes_raster ), |
||
386 | .mode_contend_type(mode_contend_type), |
||
387 | .mode_contend_ena (mode_contend_ena ), |
||
388 | .mode_7ffd_bits (p7ffd[2:0] ), |
||
389 | .contend (contend ), |
||
390 | |||
391 | .zclk_out(clkz_out), |
||
392 | |||
393 | .zpos(zpos), |
||
394 | .zneg(zneg), |
||
395 | |||
396 | |||
397 | .pre_cend(pre_cend), |
||
398 | .cbeg (cbeg ), |
||
399 | |||
400 | .zclk_stall( cpu_stall | (|zclk_stall) ), |
||
401 | .turbo ( {atm_turbo,~(peff7[4])} ), |
||
402 | .int_turbo (int_turbo ), |
||
403 | |||
404 | .external_port(external_port) |
||
467 | lvd | 405 | ); |
4 | lvd | 406 | |
407 | |||
408 | |||
409 | wire [7:0] dout_ram; |
||
410 | wire ena_ram; |
||
411 | wire [7:0] dout_ports; |
||
412 | wire ena_ports; |
||
413 | |||
414 | |||
287 | ddp | 415 | wire [3:0] border; |
30 | lvd | 416 | |
417 | wire drive_ff; |
||
699 | lvd | 418 | wire drive_00; |
30 | lvd | 419 | |
200 | lvd | 420 | |
340 | lvd | 421 | wire atm_palwr; |
422 | wire [5:0] atm_paldata; |
||
972 | alone | 423 | wire [5:0] atm_paldatalow; |
973 | alone | 424 | wire pal444_ena; |
200 | lvd | 425 | |
543 | lvd | 426 | wire [7:0] fontrom_readback; |
427 | |||
428 | |||
429 | |||
430 | |||
340 | lvd | 431 | wire int_start; |
200 | lvd | 432 | |
433 | |||
699 | lvd | 434 | |
4 | lvd | 435 | // data bus out: either RAM data or internal ports data or 0xFF with unused ports |
722 | lvd | 436 | // assign d = ena_ram ? dout_ram : ( ena_ports ? dout_ports : ( (drive_ff|drive_00) ? {8{drive_ff}} : 8'bZZZZZZZZ ) ); |
4 | lvd | 437 | |
722 | lvd | 438 | wire [7:0] d_pre_out; |
439 | wire d_ena; |
||
440 | |||
441 | assign d_pre_out = ({8{ena_ram&(~drive_00)}} & dout_ram) | ({8{ena_ports}} & dout_ports) | {8{drive_ff}} ; |
||
442 | assign d_ena = (ena_ram|ena_ports|drive_ff|drive_00); |
||
443 | // |
||
444 | assign d = d_ena ? d_pre_out : 8'bZZZZ_ZZZZ; |
||
445 | // |
||
699 | lvd | 446 | assign csrom = csrom_int && !drive_00; |
4 | lvd | 447 | |
448 | |||
449 | zbus zxbus( .iorq_n(iorq_n), .rd_n(rd_n), .wr_n(wr_n), .m1_n(m1_n), |
||
134 | ddp | 450 | .iorq1_n(iorq1_n), .iorq2_n(iorq2_n), .iorqge1(iorqge1), .iorqge2(iorqge2), |
451 | .porthit(porthit), .drive_ff(drive_ff) ); |
||
4 | lvd | 452 | |
453 | |||
454 | |||
200 | lvd | 455 | |
456 | ///////////////////////////////////// |
||
457 | // ATM memory pagers instantiation // |
||
458 | ///////////////////////////////////// |
||
459 | |||
460 | wire pager_off; |
||
461 | |||
462 | wire pent1m_ROM; |
||
463 | wire [ 5:0] pent1m_page; |
||
464 | wire pent1m_ram0_0; |
||
465 | wire pent1m_1m_on; |
||
466 | |||
467 | wire atmF7_wr_fclk; |
||
468 | |||
469 | wire [3:0] dos_turn_off, |
||
470 | dos_turn_on; |
||
471 | |||
472 | wire [ 7:0] page [0:3]; |
||
473 | wire [ 3:0] romnram; |
||
674 | lvd | 474 | wire [ 3:0] wrdisable; |
200 | lvd | 475 | |
425 | lvd | 476 | // for reading back data via xxBE port |
477 | wire [ 7:0] rd_pages [0:7]; |
||
478 | wire [ 7:0] rd_ramnrom; |
||
479 | wire [ 7:0] rd_dos7ffd; |
||
674 | lvd | 480 | wire [ 7:0] rd_wrdisables; |
425 | lvd | 481 | |
200 | lvd | 482 | generate |
483 | |||
484 | genvar i; |
||
485 | |||
486 | for(i=0;i<4;i=i+1) |
||
487 | begin : instantiate_atm_pagers |
||
674 | lvd | 488 | atm_pager #( .ADDR(i) ) atm_pager |
489 | ( |
||
490 | .rst_n(rst_n), |
||
491 | .fclk (fclk), |
||
492 | .zpos (zpos), |
||
493 | .zneg (zneg), |
||
494 | |||
495 | .za(a), |
||
496 | .zd(d), |
||
497 | .mreq_n(mreq_n), |
||
498 | .rd_n (rd_n), |
||
499 | .m1_n (m1_n), |
||
500 | |||
501 | .pager_off(pager_off), |
||
502 | |||
503 | .pent1m_ROM (pent1m_ROM), |
||
504 | .pent1m_page (pent1m_page), |
||
505 | .pent1m_ram0_0(pent1m_ram0_0), |
||
506 | .pent1m_1m_on (pent1m_1m_on), |
||
507 | |||
508 | |||
859 | lvd | 509 | .in_nmi (in_nmi ), |
510 | .in_trdemu(in_trdemu), |
||
929 | lvd | 511 | |
512 | .trdemu_wr_disable(trdemu_wr_disable), |
||
674 | lvd | 513 | |
514 | .atmF7_wr(atmF7_wr_fclk), |
||
515 | |||
516 | .dos(dos), |
||
517 | |||
518 | .dos_turn_on (dos_turn_on[i]), |
||
519 | .dos_turn_off(dos_turn_off[i]), |
||
520 | |||
521 | .zclk_stall(zclk_stall[i]), |
||
522 | |||
523 | .page (page[i] ), |
||
524 | .romnram (romnram[i] ), |
||
684 | lvd | 525 | .wrdisable(wrdisable[i]), |
674 | lvd | 526 | |
527 | .rd_page0 (rd_pages[i ]), |
||
528 | .rd_page1 (rd_pages[i+4]), |
||
529 | |||
530 | .rd_ramnrom ( {rd_ramnrom [i+4], rd_ramnrom [i]} ), |
||
531 | .rd_dos7ffd ( {rd_dos7ffd [i+4], rd_dos7ffd [i]} ), |
||
532 | .rd_wrdisables( {rd_wrdisables[i+4], rd_wrdisables[i]} ) |
||
533 | ); |
||
684 | lvd | 534 | |
200 | lvd | 535 | end |
536 | |||
537 | endgenerate |
||
538 | |||
539 | |||
540 | /////////////////////////// |
||
541 | // DOS signal controller // |
||
542 | /////////////////////////// |
||
543 | |||
544 | zdos zdos( .rst_n(rst_n), |
||
545 | |||
546 | .fclk(fclk), |
||
547 | |||
548 | .dos_turn_on ( |dos_turn_on ), |
||
549 | .dos_turn_off( |dos_turn_off ), |
||
550 | |||
551 | .cpm_n(cpm_n), |
||
1112 | lvd | 552 | .atm_pen2(atm_pen2), |
200 | lvd | 553 | |
862 | lvd | 554 | .dos(dos), |
555 | |||
929 | lvd | 556 | .zpos(zpos), |
557 | .m1_n(m1_n), |
||
862 | lvd | 558 | |
929 | lvd | 559 | |
560 | .trdemu_wr_disable(trdemu_wr_disable), |
||
561 | |||
862 | lvd | 562 | .in_trdemu (in_trdemu ), |
1042 | lvd | 563 | .in_nmi (in_nmi ), |
862 | lvd | 564 | .clr_nmi (clr_nmi ), |
565 | .vg_rdwr_fclk(vg_rdwr_fclk), |
||
566 | .fdd_mask (fdd_mask ), |
||
891 | lvd | 567 | .vg_a (vg_ddrv ), |
568 | .romnram (romnram[0] ) |
||
200 | lvd | 569 | ); |
570 | |||
571 | |||
572 | |||
573 | |||
574 | /////////////////////////// |
||
575 | // Z80 memory controller // |
||
576 | /////////////////////////// |
||
577 | |||
467 | lvd | 578 | zmem z80mem |
579 | ( |
||
580 | .fclk (fclk ), |
||
581 | .rst_n(rst_n), |
||
582 | |||
583 | .zpos(zpos), |
||
584 | .zneg(zneg), |
||
4 | lvd | 585 | |
467 | lvd | 586 | .cbeg (cbeg ), |
587 | .post_cbeg(post_cbeg), |
||
588 | .pre_cend (pre_cend ), |
||
589 | .cend (cend ), |
||
590 | |||
591 | .za (a ), |
||
592 | .zd_in (d ), |
||
593 | .zd_out(dout_ram), |
||
594 | .zd_ena(ena_ram ), |
||
595 | .m1_n (m1_n ), |
||
596 | .rfsh_n(rfsh_n ), |
||
597 | .iorq_n(iorq_n ), |
||
598 | .mreq_n(mreq_n ), |
||
599 | .rd_n (rd_n ), |
||
600 | .wr_n (wr_n ), |
||
4 | lvd | 601 | |
467 | lvd | 602 | .win0_romnram(romnram[0]), |
603 | .win1_romnram(romnram[1]), |
||
604 | .win2_romnram(romnram[2]), |
||
605 | .win3_romnram(romnram[3]), |
||
4 | lvd | 606 | |
467 | lvd | 607 | .win0_page(page[0]), |
608 | .win1_page(page[1]), |
||
609 | .win2_page(page[2]), |
||
610 | .win3_page(page[3]), |
||
4 | lvd | 611 | |
674 | lvd | 612 | .win0_wrdisable(wrdisable[0]), |
613 | .win1_wrdisable(wrdisable[1]), |
||
614 | .win2_wrdisable(wrdisable[2]), |
||
615 | .win3_wrdisable(wrdisable[3]), |
||
616 | |||
467 | lvd | 617 | .romrw_en(romrw_en), |
4 | lvd | 618 | |
467 | lvd | 619 | .rompg (rompg ), |
620 | .romoe_n(romoe_n), |
||
621 | .romwe_n(romwe_n), |
||
699 | lvd | 622 | .csrom (csrom_int), |
4 | lvd | 623 | |
467 | lvd | 624 | .cpu_req (cpu_req ), |
625 | .cpu_rnw (cpu_rnw ), |
||
626 | .cpu_wrbsel(cpu_wrbsel), |
||
627 | .cpu_strobe(cpu_strobe), |
||
628 | .cpu_addr (cpu_addr ), |
||
629 | .cpu_wrdata(cpu_wrdata), |
||
630 | .cpu_rddata(cpu_rddata), |
||
631 | .cpu_stall (cpu_stall ), |
||
632 | .cpu_next (cpu_next ), |
||
4 | lvd | 633 | |
737 | lvd | 634 | .int_turbo(int_turbo), |
635 | .nmi_buf_clr(nmi_buf_clr) |
||
467 | lvd | 636 | ); |
4 | lvd | 637 | |
638 | |||
467 | lvd | 639 | |
640 | |||
4 | lvd | 641 | wire [20:0] daddr; |
642 | wire dreq; |
||
643 | wire drnw; |
||
644 | wire [15:0] drddata; |
||
645 | wire [15:0] dwrdata; |
||
646 | wire [1:0] dbsel; |
||
647 | |||
30 | lvd | 648 | |
649 | |||
650 | |||
200 | lvd | 651 | dram dram( .clk(fclk), |
652 | .rst_n(rst_n), |
||
4 | lvd | 653 | |
200 | lvd | 654 | .addr(daddr), |
655 | .req(dreq), |
||
656 | .rnw(drnw), |
||
657 | .cbeg(cbeg), |
||
658 | .rrdy(drrdy), |
||
659 | .rddata(drddata), |
||
660 | .wrdata(dwrdata), |
||
661 | .bsel(dbsel), |
||
4 | lvd | 662 | |
200 | lvd | 663 | .ra(ra), |
664 | .rd(rd), |
||
665 | .rwe_n(rwe_n), |
||
666 | .rucas_n(rucas_n), |
||
667 | .rlcas_n(rlcas_n), |
||
668 | .rras0_n(rras0_n), |
||
669 | .rras1_n(rras1_n) |
||
670 | ); |
||
4 | lvd | 671 | |
672 | |||
673 | wire [1:0] bw; |
||
674 | |||
675 | wire [20:0] video_addr; |
||
676 | wire [15:0] video_data; |
||
677 | wire video_strobe; |
||
678 | wire video_next; |
||
679 | |||
680 | arbiter dramarb( .clk(fclk), |
||
134 | ddp | 681 | .rst_n(rst_n), |
4 | lvd | 682 | |
134 | ddp | 683 | .dram_addr(daddr), |
684 | .dram_req(dreq), |
||
685 | .dram_rnw(drnw), |
||
686 | .dram_cbeg(cbeg), |
||
687 | .dram_rrdy(drrdy), |
||
688 | .dram_bsel(dbsel), |
||
689 | .dram_rddata(drddata), |
||
690 | .dram_wrdata(dwrdata), |
||
4 | lvd | 691 | |
340 | lvd | 692 | .post_cbeg(post_cbeg), |
693 | .pre_cend (pre_cend ), |
||
694 | .cend (cend ), |
||
4 | lvd | 695 | |
134 | ddp | 696 | .go(go), |
697 | .bw(bw), |
||
4 | lvd | 698 | |
134 | ddp | 699 | .video_addr(video_addr), |
700 | .video_data(video_data), |
||
701 | .video_strobe(video_strobe), |
||
702 | .video_next(video_next), |
||
4 | lvd | 703 | |
134 | ddp | 704 | //.cpu_waitcyc(cpu_waitcyc), |
467 | lvd | 705 | .cpu_next (cpu_next), |
134 | ddp | 706 | .cpu_req(cpu_req), |
707 | .cpu_rnw(cpu_rnw), |
||
708 | .cpu_addr(cpu_addr), |
||
709 | .cpu_wrbsel(cpu_wrbsel), |
||
710 | .cpu_wrdata(cpu_wrdata), |
||
711 | .cpu_rddata(cpu_rddata), |
||
712 | .cpu_strobe(cpu_strobe) ); |
||
4 | lvd | 713 | |
684 | lvd | 714 | video_top video_top |
715 | ( |
||
340 | lvd | 716 | .clk(fclk), |
134 | ddp | 717 | |
340 | lvd | 718 | .vred(vred), |
719 | .vgrn(vgrn), |
||
720 | .vblu(vblu), |
||
721 | .vhsync(vhsync), |
||
722 | .vvsync(vvsync), |
||
723 | .vcsync(vcsync), |
||
134 | ddp | 724 | |
340 | lvd | 725 | .zxborder(border), |
134 | ddp | 726 | |
340 | lvd | 727 | .pent_vmode( {peff7[0],peff7[5]} ), |
728 | .atm_vmode (atm_scr_mode), |
||
729 | |||
730 | .scr_page(p7ffd[3]), |
||
731 | |||
732 | .vga_on(cfg_vga_on), |
||
733 | |||
684 | lvd | 734 | .modes_raster (modes_raster ), |
735 | .mode_contend_type(mode_contend_type), |
||
736 | |||
737 | .contend(contend), |
||
738 | |||
340 | lvd | 739 | .cbeg (cbeg ), |
740 | .post_cbeg(post_cbeg), |
||
741 | .pre_cend (pre_cend ), |
||
742 | .cend (cend ), |
||
743 | |||
744 | .video_go (go ), |
||
745 | .video_bw (bw ), |
||
746 | .video_addr (video_addr ), |
||
747 | .video_data (video_data ), |
||
748 | .video_strobe(video_strobe), |
||
749 | .video_next (video_next ), |
||
750 | |||
751 | .atm_palwr (atm_palwr ), |
||
752 | .atm_paldata(atm_paldata), |
||
972 | alone | 753 | .atm_paldatalow(atm_paldatalow), |
973 | alone | 754 | .pal444_ena(pal444_ena), |
668 | lvd | 755 | |
756 | .up_ena (up_ena ), |
||
757 | .up_paladdr(up_paladdr), |
||
758 | .up_paldata(up_paldata), |
||
759 | .up_palwr (up_palwr ), |
||
340 | lvd | 760 | |
394 | tsl | 761 | .int_start(int_start), |
762 | |||
395 | lvd | 763 | .fnt_a (a[10:0]), |
764 | .fnt_d (d ), |
||
425 | lvd | 765 | .fnt_wr(fnt_wr ), |
766 | |||
543 | lvd | 767 | .palcolor(palcolor), |
768 | |||
769 | .fontrom_readback(fontrom_readback) |
||
340 | lvd | 770 | ); |
771 | |||
772 | |||
284 | lvd | 773 | slavespi slavespi( |
774 | .fclk(fclk), .rst_n(rst_n), |
||
4 | lvd | 775 | |
284 | lvd | 776 | .spics_n(spics_n), .spidi(spidi), |
777 | .spido(spido), .spick(spick), |
||
372 | lvd | 778 | .status_in({/* wait_rnw */ wr_n, waits[6:0]}), .genrst(genrst), |
543 | lvd | 779 | .kbd_out(kbd_data), |
284 | lvd | 780 | .kbd_stb(kbd_stb), .mus_out(mus_data), |
781 | .mus_xstb(mus_xstb), .mus_ystb(mus_ystb), |
||
782 | .mus_btnstb(mus_btnstb), .kj_stb(kj_stb), |
||
783 | .gluclock_addr(gluclock_addr), |
||
784 | .comport_addr (comport_addr), |
||
785 | .wait_write(wait_write), |
||
786 | .wait_read(wait_read), |
||
787 | .wait_rnw(wait_rnw), |
||
788 | .wait_end(wait_end), |
||
826 | lvd | 789 | .config0( {not_used0[7:6], modes_raster, beeper_mux, tape_read, set_nmi[0], cfg_vga_on} ), |
543 | lvd | 790 | |
791 | .sd_lock_out(avr_lock_claim), |
||
792 | .sd_lock_in (avr_lock_grant), |
||
793 | .sd_cs_n (avr_sdcs_n ), |
||
794 | .sd_start (avr_sd_start ), |
||
795 | .sd_datain (avr_sd_datain ), |
||
796 | .sd_dataout (avr_sd_dataout) |
||
284 | lvd | 797 | ); |
798 | |||
67 | lvd | 799 | zkbdmus zkbdmus( .fclk(fclk), .rst_n(rst_n), |
134 | ddp | 800 | .kbd_in(kbd_data), .kbd_stb(kbd_stb), |
801 | .mus_in(mus_data), .mus_xstb(mus_xstb), |
||
802 | .mus_ystb(mus_ystb), .mus_btnstb(mus_btnstb), |
||
803 | .kj_stb(kj_stb), .kj_data(kj_port_data), |
||
804 | .zah(a[15:8]), .kbd_data(kbd_port_data), |
||
805 | .mus_data(mus_port_data) |
||
806 | ); |
||
4 | lvd | 807 | |
808 | |||
200 | lvd | 809 | zports zports( .zclk(zclk), .fclk(fclk), .rst_n(rst_n), .zpos(zpos), .zneg(zneg), |
810 | .din(d), .dout(dout_ports), .dataout(ena_ports), |
||
811 | .a(a), .iorq_n(iorq_n), .rd_n(rd_n), .wr_n(wr_n), .porthit(porthit), |
||
360 | lvd | 812 | .ay_bdir(ay_bdir), .ay_bc1(ay_bc1), .border(border), |
200 | lvd | 813 | .p7ffd(p7ffd), .peff7(peff7), .mreq_n(mreq_n), .m1_n(m1_n), .dos(dos), |
871 | lvd | 814 | |
815 | .vg_cs_n (vg_cs_n ), |
||
816 | .vg_intrq (intrq ), |
||
817 | .vg_drq (drq ), |
||
818 | .vg_wrFF_fclk(vg_wrFF_fclk), |
||
866 | lvd | 819 | .vg_rdwr_fclk(vg_rdwr_fclk), |
871 | lvd | 820 | .vg_a (vg_ddrv ), |
821 | .vg_res_n (vg_res_n ), |
||
822 | .vg_hrdy (vg_hrdy ), |
||
823 | .vg_side (vg_side ), |
||
824 | |||
825 | |||
826 | |||
200 | lvd | 827 | .idein(idein), .ideout(ideout), .idedataout(idedataout), |
828 | .ide_a(ide_a), .ide_cs0_n(ide_cs0_n), .ide_cs1_n(ide_cs1_n), |
||
829 | .ide_wr_n(ide_wr_n), .ide_rd_n(ide_rd_n), |
||
67 | lvd | 830 | |
543 | lvd | 831 | .sd_cs_n_val(zx_sdcs_n_val), |
832 | .sd_cs_n_stb(zx_sdcs_n_stb), |
||
833 | .sd_start (zx_sd_start ), |
||
834 | .sd_datain (zx_sd_datain ), |
||
835 | .sd_dataout (zx_sd_dataout), |
||
836 | |||
200 | lvd | 837 | .keys_in(kbd_port_data), |
340 | lvd | 838 | .mus_in (mus_port_data), |
839 | .kj_in (kj_port_data ), |
||
88 | lvd | 840 | |
213 | lvd | 841 | .tape_read(tape_read), |
842 | |||
200 | lvd | 843 | .gluclock_addr(gluclock_addr), |
340 | lvd | 844 | .comport_addr (comport_addr ), |
200 | lvd | 845 | .wait_start_gluclock(wait_start_gluclock), |
340 | lvd | 846 | .wait_start_comport (wait_start_comport ), |
847 | .wait_rnw (wait_rnw ), |
||
200 | lvd | 848 | .wait_write(wait_write), |
340 | lvd | 849 | .wait_read (wait_read ), |
684 | lvd | 850 | |
476 | lvd | 851 | .atmF7_wr_fclk(atmF7_wr_fclk), |
4 | lvd | 852 | |
476 | lvd | 853 | .atm_scr_mode(atm_scr_mode), |
854 | .atm_turbo (atm_turbo), |
||
855 | .atm_pen (pager_off), |
||
856 | .atm_cpm_n (cpm_n), |
||
857 | .atm_pen2 (atm_pen2), |
||
200 | lvd | 858 | |
476 | lvd | 859 | .romrw_en(romrw_en), |
200 | lvd | 860 | |
476 | lvd | 861 | .pent1m_ram0_0(pent1m_ram0_0), |
862 | .pent1m_1m_on (pent1m_1m_on), |
||
863 | .pent1m_page (pent1m_page), |
||
864 | .pent1m_ROM (pent1m_ROM), |
||
200 | lvd | 865 | |
476 | lvd | 866 | .atm_palwr (atm_palwr ), |
867 | .atm_paldata(atm_paldata), |
||
972 | alone | 868 | .atm_paldatalow(atm_paldatalow), |
973 | alone | 869 | .pal444_ena(pal444_ena), |
340 | lvd | 870 | |
476 | lvd | 871 | .beeper_wr(beeper_wr), |
872 | .covox_wr (covox_wr ), |
||
360 | lvd | 873 | |
467 | lvd | 874 | .fnt_wr(fnt_wr), |
875 | .clr_nmi(clr_nmi), |
||
425 | lvd | 876 | |
877 | |||
467 | lvd | 878 | .pages(~{ rd_pages[7], rd_pages[6], |
879 | rd_pages[5], rd_pages[4], |
||
880 | rd_pages[3], rd_pages[2], |
||
881 | rd_pages[1], rd_pages[0] }), |
||
425 | lvd | 882 | |
674 | lvd | 883 | .ramnroms ( rd_ramnrom ), |
884 | .dos7ffds ( rd_dos7ffd ), |
||
885 | .wrdisables( rd_wrdisables ), |
||
425 | lvd | 886 | |
467 | lvd | 887 | .palcolor(palcolor), |
543 | lvd | 888 | .fontrom_readback(fontrom_readback), |
668 | lvd | 889 | |
890 | .up_ena (up_ena ), |
||
891 | .up_paladdr(up_paladdr), |
||
892 | .up_paldata(up_paldata), |
||
893 | .up_palwr (up_palwr ), |
||
425 | lvd | 894 | |
476 | lvd | 895 | .external_port(external_port), |
200 | lvd | 896 | |
576 | lvd | 897 | .set_nmi(set_nmi[1]), |
476 | lvd | 898 | |
576 | lvd | 899 | .brk_ena (brk_ena ), |
849 | lvd | 900 | .brk_addr(brk_addr), |
901 | |||
902 | .fdd_mask(fdd_mask) |
||
467 | lvd | 903 | ); |
200 | lvd | 904 | |
467 | lvd | 905 | |
425 | lvd | 906 | zint zint( |
907 | .fclk(fclk), |
||
908 | .zpos(zpos), |
||
909 | .zneg(zneg), |
||
4 | lvd | 910 | |
425 | lvd | 911 | .int_start(int_start), |
4 | lvd | 912 | |
425 | lvd | 913 | .iorq_n(iorq_n), |
914 | .m1_n (m1_n ), |
||
4 | lvd | 915 | |
651 | lvd | 916 | .wait_n(spiint_n), // spiint_n is 1-0 signal, wait_n is Z-0 |
917 | |||
425 | lvd | 918 | .int_n(int_n) |
919 | ); |
||
920 | |||
921 | znmi znmi |
||
922 | ( |
||
923 | .rst_n(rst_n), |
||
924 | .fclk(fclk), |
||
925 | .zpos(zpos), |
||
926 | .zneg(zneg), |
||
927 | |||
928 | .rfsh_n(rfsh_n), |
||
518 | lvd | 929 | .m1_n (m1_n ), |
930 | .mreq_n(mreq_n), |
||
931 | .csrom (csrom ), |
||
932 | .a (a ), |
||
425 | lvd | 933 | |
934 | .int_start(int_start), |
||
935 | |||
936 | .set_nmi(set_nmi), |
||
576 | lvd | 937 | .imm_nmi(imm_nmi), |
425 | lvd | 938 | .clr_nmi(clr_nmi), |
939 | |||
699 | lvd | 940 | .drive_00(drive_00), |
941 | |||
425 | lvd | 942 | .in_nmi (in_nmi ), |
737 | lvd | 943 | .gen_nmi(gen_nmi), |
944 | .nmi_buf_clr(nmi_buf_clr) |
||
425 | lvd | 945 | ); |
946 | |||
947 | |||
576 | lvd | 948 | zbreak zbreak |
949 | ( |
||
950 | .rst_n(rst_n), |
||
951 | .fclk(fclk), |
||
952 | .zpos(zpos), |
||
953 | .zneg(zneg), |
||
425 | lvd | 954 | |
576 | lvd | 955 | .m1_n (m1_n ), |
956 | .mreq_n(mreq_n), |
||
957 | .a (a ), |
||
425 | lvd | 958 | |
576 | lvd | 959 | .imm_nmi(imm_nmi), |
960 | |||
961 | .brk_ena (brk_ena ), |
||
962 | .brk_addr(brk_addr) |
||
963 | ); |
||
964 | |||
965 | |||
966 | |||
967 | |||
968 | |||
969 | |||
88 | lvd | 970 | zwait zwait( .wait_start_gluclock(wait_start_gluclock), |
228 | lvd | 971 | .wait_start_comport (wait_start_comport), |
134 | ddp | 972 | .wait_end(wait_end), |
973 | .rst_n(rst_n), |
||
974 | .wait_n(wait_n), |
||
975 | .waits(waits), |
||
976 | .spiint_n(spiint_n) ); |
||
88 | lvd | 977 | |
978 | |||
979 | |||
980 | |||
4 | lvd | 981 | assign vg_a[0] = vg_ddrv[0] ? 1'b1 : 1'b0; // possibly open drain? |
982 | assign vg_a[1] = vg_ddrv[1] ? 1'b1 : 1'b0; |
||
983 | |||
984 | vg93 vgshka( .zclk(zclk), .rst_n(rst_n), .fclk(fclk), .vg_clk(vg_clk), |
||
856 | lvd | 985 | .vg_res_n(vg_res_n), .din(d), .intrq(intrq), .drq(drq), .vg_wrFF_fclk(vg_wrFF_fclk), |
134 | ddp | 986 | .vg_hrdy(vg_hrdy), .vg_rclk(vg_rclk), .vg_rawr(vg_rawr), .vg_a(vg_ddrv), |
987 | .vg_wrd(vg_wrd), .vg_side(vg_side), .step(step), .vg_sl(vg_sl), .vg_sr(vg_sr), |
||
988 | .vg_tr43(vg_tr43), .rdat_n(rdat_b_n), .vg_wf_de(vg_wf_de), .vg_drq(vg_drq), |
||
989 | .vg_irq(vg_irq), .vg_wd(vg_wd) ); |
||
4 | lvd | 990 | |
991 | |||
992 | |||
993 | |||
543 | lvd | 994 | // spi2 zspi( .clock(fclk), .sck(sdclk), .sdo(sddo), .sdi(sddi), .start(sd_start), |
995 | // .speed(2'b00), .din(sd_datain), .dout(sd_dataout) ); |
||
996 | spihub spihub( |
||
4 | lvd | 997 | |
543 | lvd | 998 | .fclk (fclk ), |
999 | .rst_n(rst_n), |
||
360 | lvd | 1000 | |
543 | lvd | 1001 | .sdcs_n(sdcs_n), |
1002 | .sdclk (sdclk ), |
||
1003 | .sddo (sddo ), |
||
1004 | .sddi (sddi ), |
||
360 | lvd | 1005 | |
543 | lvd | 1006 | .zx_sdcs_n_val(zx_sdcs_n_val), |
1007 | .zx_sdcs_n_stb(zx_sdcs_n_stb), |
||
1008 | .zx_sd_start (zx_sd_start ), |
||
1009 | .zx_sd_datain (zx_sd_datain ), |
||
1010 | .zx_sd_dataout(zx_sd_dataout), |
||
360 | lvd | 1011 | |
543 | lvd | 1012 | .avr_lock_in (avr_lock_claim), |
1013 | .avr_lock_out (avr_lock_grant), |
||
1014 | .avr_sdcs_n (avr_sdcs_n ), |
||
1015 | .avr_sd_start (avr_sd_start ), |
||
1016 | .avr_sd_datain (avr_sd_datain ), |
||
1017 | .avr_sd_dataout(avr_sd_dataout) |
||
360 | lvd | 1018 | |
543 | lvd | 1019 | |
1020 | ); |
||
1021 | |||
1022 | |||
1023 | |||
1024 | |||
1025 | |||
360 | lvd | 1026 | ////////////////////////////////////// |
1027 | // sound: beeper, tapeout and covox // |
||
1028 | ////////////////////////////////////// |
||
1029 | |||
1030 | sound sound( |
||
1031 | |||
1032 | .clk(fclk), |
||
1033 | |||
1034 | .din(d), |
||
1035 | |||
1036 | .beeper_wr(beeper_wr), |
||
1037 | .covox_wr (covox_wr ), |
||
1038 | |||
1039 | .beeper_mux(beeper_mux), |
||
1040 | |||
1041 | .sound_bit(beep) |
||
1042 | ); |
||
1043 | |||
1044 | |||
4 | lvd | 1045 | endmodule |
1046 |