Subversion Repositories pentevo

Rev

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