Subversion Repositories pentevo

Rev

Rev 471 | Rev 543 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. `include "../include/tune.v"
  2.  
  3. // Pentevo project (c) NedoPC 2008-2011
  4. //
  5. // top-level
  6.  
  7. module top(
  8.  
  9.         // clocks
  10.         input fclk,
  11.         output clkz_out,
  12.         input clkz_in,
  13.  
  14.         // z80
  15.         input iorq_n,
  16.         input mreq_n,
  17.         input rd_n,
  18.         input wr_n,
  19.         input m1_n,
  20.         input rfsh_n,
  21.         output int_n,
  22.         output nmi_n,
  23.         output wait_n,
  24.         output res,
  25.  
  26.         inout [7:0] d,
  27.         input [15:0] a,
  28.  
  29.         // zxbus and related
  30.         output csrom,
  31.         output romoe_n,
  32.         output romwe_n,
  33.  
  34.         output rompg0_n,
  35.         output dos_n, // aka rompg1
  36.         output rompg2,
  37.         output rompg3,
  38.         output rompg4,
  39.  
  40.         input iorqge1,
  41.         input iorqge2,
  42.         output iorq1_n,
  43.         output iorq2_n,
  44.  
  45.         // DRAM
  46.         inout [15:0] rd,
  47.         output [9:0] ra,
  48.         output rwe_n,
  49.         output rucas_n,
  50.         output rlcas_n,
  51.         output rras0_n,
  52.         output rras1_n,
  53.  
  54.         // video
  55.         output [1:0] vred,
  56.         output [1:0] vgrn,
  57.         output [1:0] vblu,
  58.  
  59.         output vhsync,
  60.         output vvsync,
  61.         output vcsync,
  62.  
  63.         // AY control and audio/tape
  64.         output ay_clk,
  65.         output ay_bdir,
  66.         output ay_bc1,
  67.  
  68.         output beep,
  69.  
  70.         // IDE
  71.         output [2:0] ide_a,
  72.         inout [15:0] ide_d,
  73.  
  74.         output ide_dir,
  75.  
  76.         input ide_rdy,
  77.  
  78.         output ide_cs0_n,
  79.         output ide_cs1_n,
  80.         output ide_rs_n,
  81.         output ide_rd_n,
  82.         output ide_wr_n,
  83.  
  84.         // VG93 and diskdrive
  85.         output vg_clk,
  86.  
  87.         output vg_cs_n,
  88.         output vg_res_n,
  89.  
  90.         output vg_hrdy,
  91.         output vg_rclk,
  92.         output vg_rawr,
  93.         output [1:0] vg_a, // disk drive selection
  94.         output vg_wrd,
  95.         output vg_side,
  96.  
  97.         input step,
  98.         input vg_sl,
  99.         input vg_sr,
  100.         input vg_tr43,
  101.         input rdat_b_n,
  102.         input vg_wf_de,
  103.         input vg_drq,
  104.         input vg_irq,
  105.         input vg_wd,
  106.  
  107.         // serial links (atmega-fpga, sdcard)
  108.         output sdcs_n,
  109.         output sddo,
  110.         output sdclk,
  111.         input sddi,
  112.  
  113.         input spics_n,
  114.         input spick,
  115.         input spido,
  116.         output spidi,
  117.         output spiint_n
  118. );
  119.  
  120.         wire dos;
  121.  
  122.  
  123.         wire zclk; // z80 clock for short
  124.  
  125.         wire zpos,zneg;
  126.  
  127.         wire rst_n; // global reset
  128.  
  129.         wire rrdy;
  130.         wire [15:0] rddata;
  131.  
  132.         wire [4:0] rompg;
  133.  
  134.         wire [7:0] zports_dout;
  135.         wire zports_dataout;
  136.         wire porthit;
  137.  
  138.  
  139.         wire [39:0] kbd_data;
  140.         wire [ 7:0] mus_data;
  141.         wire kbd_stb,mus_xstb,mus_ystb,mus_btnstb,kj_stb;
  142.  
  143.         wire [ 4:0] kbd_port_data;
  144.         wire [ 4:0] kj_port_data;
  145.         wire [ 7:0] mus_port_data;
  146.  
  147.  
  148.  
  149.  
  150.         wire [7:0] wait_read,wait_write;
  151.         wire wait_rnw;
  152.         wire wait_start_gluclock;
  153.         wire wait_start_comport;
  154.         wire wait_end;
  155.         wire [7:0] gluclock_addr;
  156.         wire [2:0] comport_addr;
  157.         wire [6:0] waits;
  158.  
  159.  
  160.  
  161.  
  162.         // config signals
  163.         wire [7:0] not_used;
  164.         wire cfg_vga_on;
  165.         wire [1:0] set_nmi;
  166.  
  167.         // nmi signals
  168.         wire gen_nmi;
  169.         wire clr_nmi;
  170.         wire in_nmi;
  171.  
  172.  
  173.  
  174.         wire tape_in;
  175.  
  176.         wire [15:0] ideout;
  177.         wire [15:0] idein;
  178.         wire idedataout;
  179.  
  180.  
  181.         wire [7:0] zmem_dout;
  182.         wire zmem_dataout;
  183.  
  184.  
  185.  
  186.         reg [3:0] ayclk_gen;
  187.  
  188.  
  189.         wire [7:0] received;
  190.         wire [7:0] tobesent;
  191.  
  192.  
  193.         wire intrq,drq;
  194.         wire vg_wrFF;
  195.  
  196.         wire [1:0] rstrom;
  197.  
  198.  
  199.  
  200.  
  201.         assign zclk = clkz_in;
  202.  
  203.  
  204.         // RESETTER
  205.         wire genrst;
  206.  
  207.         resetter myrst( .clk(fclk),
  208.                         .rst_in_n(~genrst),
  209.                         .rst_out_n(rst_n) );
  210.         defparam myrst.RST_CNT_SIZE = 6;
  211.  
  212.  
  213.  
  214.         assign nmi_n=gen_nmi ? 1'b0 : 1'bZ;
  215.  
  216.         assign res= ~rst_n;
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.         assign ide_rs_n = rst_n;
  226.  
  227.         assign ide_d = idedataout ? ideout : 16'hZZZZ;
  228.         assign idein = ide_d;
  229.  
  230.         assign ide_dir = ~idedataout;
  231.  
  232.  
  233.  
  234.  
  235.  
  236.         wire [7:0] peff7;
  237.         wire [7:0] p7ffd;
  238.  
  239.  
  240.         wire romrw_en;
  241.         wire cpm_n;
  242.         wire fnt_wr;
  243.  
  244.  
  245.  
  246.         wire cpu_req,cpu_rnw,cpu_wrbsel,cpu_strobe;
  247.         wire [20:0] cpu_addr;
  248.         wire [15:0] cpu_rddata;
  249.         wire [7:0] cpu_wrdata;
  250.  
  251.         wire cbeg,post_cbeg,pre_cend,cend;
  252.  
  253.         wire go;
  254.  
  255.  
  256.         wire sd_start;
  257.         wire [7:0] sd_dataout,sd_datain;
  258.  
  259.  
  260.         wire tape_read; // data for tapein
  261.  
  262.         wire beeper_mux; // what is mixed to FPGA beeper output - beeper (0) or tapeout (1)
  263.  
  264.         wire [2:0] atm_scr_mode;
  265.  
  266.         wire atm_turbo;
  267.  
  268.  
  269.         wire beeper_wr, covox_wr;
  270.  
  271.  
  272.  
  273.         wire [5:0] palcolor; // palette readback
  274.  
  275.  
  276.  
  277.  
  278.         wire [1:0] int_turbo;
  279.         wire cpu_next;
  280.         wire cpu_stall;
  281.  
  282.         wire external_port;
  283.  
  284.  
  285.  
  286. //AY control
  287.         always @(posedge fclk)
  288.         begin
  289.                 ayclk_gen <= ayclk_gen + 4'd1;
  290.         end
  291.  
  292.         assign ay_clk = ayclk_gen[3];
  293.  
  294.  
  295.  
  296.  
  297.  
  298.         // fix ATM2-style ROM addressing for PENT-like ROM layout.
  299.         // this causes compications when writing to the flashROM from Z80
  300.         // and need to split and re-build old ATM romfiles before burning in
  301.         // flash
  302. //      wire [1:0] adr_fix;
  303. //      assign adr_fix = ~{ rompg[0], rompg[1] };
  304. //      assign rompg0_n = ~adr_fix[0];
  305. //      assign dos_n    =  adr_fix[1];
  306. //      assign rompg2   =  1'b0;//rompg[2];
  307. //      assign rompg3   =  1'b0;//rompg[3];
  308. //      assign rompg4   =  1'b0;//rompg[4];
  309.  
  310.         assign rompg0_n = ~rompg[0];
  311.         assign dos_n    =  rompg[1];
  312.         assign rompg2   =  rompg[2];
  313.         assign rompg3   =  rompg[3];
  314.         assign rompg4   =  rompg[4];
  315.  
  316.         wire [3:0] zclk_stall;
  317.  
  318.         zclock zclock
  319.         (
  320.                 .fclk(fclk), .rst_n(rst_n), .zclk(zclk), .rfsh_n(rfsh_n), .zclk_out(clkz_out),
  321.                 .zpos(zpos), .zneg(zneg),
  322.                 .turbo( {atm_turbo,~(peff7[4])} ), .pre_cend(pre_cend), .cbeg(cbeg),
  323.                 .zclk_stall( cpu_stall | (|zclk_stall) ), .int_turbo(int_turbo),
  324.                 .external_port(external_port), .iorq_n(iorq_n), .m1_n(m1_n)
  325.         );
  326.  
  327.  
  328.  
  329.         wire [7:0] dout_ram;
  330.         wire ena_ram;
  331.         wire [7:0] dout_ports;
  332.         wire ena_ports;
  333.  
  334.  
  335.         wire [3:0] border;
  336.  
  337.         wire drive_ff;
  338.  
  339.  
  340.         wire       atm_palwr;
  341.         wire [5:0] atm_paldata;
  342.  
  343.         wire int_start;
  344.  
  345.  
  346.         // data bus out: either RAM data or internal ports data or 0xFF with unused ports
  347.         assign d = ena_ram ? dout_ram : ( ena_ports ? dout_ports : ( drive_ff ? 8'hFF : 8'bZZZZZZZZ ) );
  348.  
  349.  
  350.  
  351.  
  352.         zbus zxbus( .iorq_n(iorq_n), .rd_n(rd_n), .wr_n(wr_n), .m1_n(m1_n),
  353.                     .iorq1_n(iorq1_n), .iorq2_n(iorq2_n), .iorqge1(iorqge1), .iorqge2(iorqge2),
  354.                     .porthit(porthit), .drive_ff(drive_ff) );
  355.  
  356.  
  357.  
  358.  
  359.         /////////////////////////////////////
  360.         // ATM memory pagers instantiation //
  361.         /////////////////////////////////////
  362.  
  363.         wire pager_off;
  364.  
  365.         wire        pent1m_ROM;
  366.         wire [ 5:0] pent1m_page;
  367.         wire        pent1m_ram0_0;
  368.         wire        pent1m_1m_on;
  369.  
  370.         wire atmF7_wr_fclk;
  371.  
  372.         wire [3:0] dos_turn_off,
  373.                    dos_turn_on;
  374.  
  375.         wire [ 7:0] page [0:3];
  376.         wire [ 3:0] romnram;
  377.  
  378.         // for reading back data via xxBE port
  379.         wire [ 7:0] rd_pages [0:7];
  380.         wire [ 7:0] rd_ramnrom;
  381.         wire [ 7:0] rd_dos7ffd;
  382.  
  383.         generate
  384.  
  385.                 genvar i;
  386.  
  387.                 for(i=0;i<4;i=i+1)
  388.                 begin : instantiate_atm_pagers
  389.  
  390.                         atm_pager #( .ADDR(i) )
  391.                                   atm_pager( .rst_n(rst_n),
  392.                                              .fclk (fclk),
  393.                                              .zpos (zpos),
  394.                                              .zneg (zneg),
  395.  
  396.                                              .za(a),
  397.                                              .zd(d),
  398.                                              .mreq_n(mreq_n),
  399.                                              .rd_n  (rd_n),
  400.                                              .m1_n  (m1_n),
  401.  
  402.                                              .pager_off(pager_off),
  403.  
  404.                                              .pent1m_ROM   (pent1m_ROM),
  405.                                              .pent1m_page  (pent1m_page),
  406.                                              .pent1m_ram0_0(pent1m_ram0_0),
  407.                                              .pent1m_1m_on (pent1m_1m_on),
  408.  
  409.  
  410.                                              .in_nmi(in_nmi),
  411.  
  412.                                              .atmF7_wr(atmF7_wr_fclk),
  413.  
  414.                                              .dos(dos),
  415.  
  416.                                              .dos_turn_on (dos_turn_on[i]),
  417.                                              .dos_turn_off(dos_turn_off[i]),
  418.  
  419.                                              .zclk_stall(zclk_stall[i]),
  420.  
  421.                                              .page   (page[i]),
  422.                                              .romnram(romnram[i]),
  423.  
  424.  
  425.                                              .rd_page0  (rd_pages[i  ]),
  426.                                              .rd_page1  (rd_pages[i+4]),
  427.  
  428.                                              .rd_ramnrom( {rd_ramnrom[i+4], rd_ramnrom[i]} ),
  429.                                              .rd_dos7ffd( {rd_dos7ffd[i+4], rd_dos7ffd[i]} )
  430.                                            );
  431.                 end
  432.  
  433.         endgenerate
  434.  
  435.  
  436.         ///////////////////////////
  437.         // DOS signal controller //
  438.         ///////////////////////////
  439.  
  440.         zdos zdos( .rst_n(rst_n),
  441.  
  442.                    .fclk(fclk),
  443.  
  444.                    .dos_turn_on ( |dos_turn_on  ),
  445.                    .dos_turn_off( |dos_turn_off ),
  446.  
  447.                    .cpm_n(cpm_n),
  448.  
  449.                    .dos(dos)
  450.                  );
  451.  
  452.  
  453.  
  454.  
  455.         ///////////////////////////
  456.         // Z80 memory controller //
  457.         ///////////////////////////
  458.  
  459.         zmem z80mem
  460.         (
  461.                 .fclk (fclk ),
  462.                 .rst_n(rst_n),
  463.                
  464.                 .zpos(zpos),
  465.                 .zneg(zneg),
  466.  
  467.                 .cbeg     (cbeg     ),
  468.                 .post_cbeg(post_cbeg),
  469.                 .pre_cend (pre_cend ),
  470.                 .cend     (cend     ),
  471.                
  472.                 .za    (a       ),
  473.                 .zd_in (d       ),
  474.                 .zd_out(dout_ram),
  475.                 .zd_ena(ena_ram ),
  476.                 .m1_n  (m1_n    ),
  477.                 .rfsh_n(rfsh_n  ),
  478.                 .iorq_n(iorq_n  ),
  479.                 .mreq_n(mreq_n  ),
  480.                 .rd_n  (rd_n    ),
  481.                 .wr_n  (wr_n    ),
  482.  
  483.                 .win0_romnram(romnram[0]),
  484.                 .win1_romnram(romnram[1]),
  485.                 .win2_romnram(romnram[2]),
  486.                 .win3_romnram(romnram[3]),
  487.  
  488.                 .win0_page(page[0]),
  489.                 .win1_page(page[1]),
  490.                 .win2_page(page[2]),
  491.                 .win3_page(page[3]),
  492.  
  493.                 .romrw_en(romrw_en),
  494.  
  495.                 .rompg  (rompg  ),
  496.                 .romoe_n(romoe_n),
  497.                 .romwe_n(romwe_n),
  498.                 .csrom  (csrom  ),
  499.  
  500.                 .cpu_req   (cpu_req   ),
  501.                 .cpu_rnw   (cpu_rnw   ),
  502.                 .cpu_wrbsel(cpu_wrbsel),
  503.                 .cpu_strobe(cpu_strobe),
  504.                 .cpu_addr  (cpu_addr  ),
  505.                 .cpu_wrdata(cpu_wrdata),
  506.                 .cpu_rddata(cpu_rddata),
  507.                 .cpu_stall (cpu_stall ),
  508.                 .cpu_next  (cpu_next  ),
  509.  
  510.                 .int_turbo(int_turbo)
  511.         );
  512.  
  513.  
  514.  
  515.  
  516.         wire [20:0] daddr;
  517.         wire dreq;
  518.         wire drnw;
  519.         wire [15:0] drddata;
  520.         wire [15:0] dwrdata;
  521.         wire [1:0] dbsel;
  522.  
  523.  
  524.  
  525.  
  526.         dram dram( .clk(fclk),
  527.                    .rst_n(rst_n),
  528.  
  529.                    .addr(daddr),
  530.                    .req(dreq),
  531.                    .rnw(drnw),
  532.                    .cbeg(cbeg),
  533.                    .rrdy(drrdy),
  534.                    .rddata(drddata),
  535.                    .wrdata(dwrdata),
  536.                    .bsel(dbsel),
  537.  
  538.                    .ra(ra),
  539.                    .rd(rd),
  540.                    .rwe_n(rwe_n),
  541.                    .rucas_n(rucas_n),
  542.                    .rlcas_n(rlcas_n),
  543.                    .rras0_n(rras0_n),
  544.                    .rras1_n(rras1_n)
  545.                  );
  546.  
  547.  
  548.         wire [1:0] bw;
  549.  
  550.         wire [20:0] video_addr;
  551.         wire [15:0] video_data;
  552.         wire video_strobe;
  553.         wire video_next;
  554.  
  555.         arbiter dramarb( .clk(fclk),
  556.                          .rst_n(rst_n),
  557.  
  558.                          .dram_addr(daddr),
  559.                          .dram_req(dreq),
  560.                          .dram_rnw(drnw),
  561.                          .dram_cbeg(cbeg),
  562.                          .dram_rrdy(drrdy),
  563.                          .dram_bsel(dbsel),
  564.                          .dram_rddata(drddata),
  565.                          .dram_wrdata(dwrdata),
  566.  
  567.                          .post_cbeg(post_cbeg),
  568.                          .pre_cend (pre_cend ),
  569.                          .cend     (cend     ),
  570.  
  571.                          .go(go),
  572.                          .bw(bw),
  573.  
  574.                          .video_addr(video_addr),
  575.                          .video_data(video_data),
  576.                          .video_strobe(video_strobe),
  577.                          .video_next(video_next),
  578.  
  579.                          //.cpu_waitcyc(cpu_waitcyc),
  580.                          .cpu_next (cpu_next),
  581.                          .cpu_req(cpu_req),
  582.                          .cpu_rnw(cpu_rnw),
  583.                          .cpu_addr(cpu_addr),
  584.                          .cpu_wrbsel(cpu_wrbsel),
  585.                          .cpu_wrdata(cpu_wrdata),
  586.                          .cpu_rddata(cpu_rddata),
  587.                          .cpu_strobe(cpu_strobe) );
  588.  
  589.         video_top video_top(
  590.  
  591.                 .clk(fclk),
  592.  
  593.                 .vred(vred),
  594.                 .vgrn(vgrn),
  595.                 .vblu(vblu),
  596.                 .vhsync(vhsync),
  597.                 .vvsync(vvsync),
  598.                 .vcsync(vcsync),
  599.  
  600.                 .zxborder(border),
  601.  
  602.                 .pent_vmode( {peff7[0],peff7[5]} ),
  603.                 .atm_vmode (atm_scr_mode),
  604.  
  605.                 .scr_page(p7ffd[3]),
  606.  
  607.                 .vga_on(cfg_vga_on),
  608.  
  609.                 .cbeg     (cbeg     ),
  610.                 .post_cbeg(post_cbeg),
  611.                 .pre_cend (pre_cend ),
  612.                 .cend     (cend     ),
  613.  
  614.                 .video_go    (go          ),
  615.                 .video_bw    (bw          ),
  616.                 .video_addr  (video_addr  ),
  617.                 .video_data  (video_data  ),
  618.                 .video_strobe(video_strobe),
  619.                 .video_next  (video_next  ),
  620.  
  621.                 .atm_palwr  (atm_palwr  ),
  622.                 .atm_paldata(atm_paldata),
  623.  
  624.                 .int_start(int_start),
  625.  
  626.                 .fnt_a (a[10:0]),
  627.                 .fnt_d (d      ),
  628.                 .fnt_wr(fnt_wr ),
  629.  
  630.                 .palcolor(palcolor)
  631.         );
  632.  
  633.  
  634.         slavespi slavespi(
  635.                 .fclk(fclk), .rst_n(rst_n),
  636.  
  637.                 .spics_n(spics_n), .spidi(spidi),
  638.                 .spido(spido), .spick(spick),
  639.                 .status_in({/* wait_rnw */ wr_n, waits[6:0]}), .genrst(genrst),
  640.                 .rstrom(rstrom), .kbd_out(kbd_data),
  641.                 .kbd_stb(kbd_stb), .mus_out(mus_data),
  642.                 .mus_xstb(mus_xstb), .mus_ystb(mus_ystb),
  643.                 .mus_btnstb(mus_btnstb), .kj_stb(kj_stb),
  644.                 .gluclock_addr(gluclock_addr),
  645.                 .comport_addr (comport_addr),
  646.                 .wait_write(wait_write),
  647.                 .wait_read(wait_read),
  648.                 .wait_rnw(wait_rnw),
  649.                 .wait_end(wait_end),
  650.                 .config0( { not_used[7:4], beeper_mux, tape_read, set_nmi[0], cfg_vga_on} )
  651.         );
  652.  
  653.         zkbdmus zkbdmus( .fclk(fclk), .rst_n(rst_n),
  654.                          .kbd_in(kbd_data), .kbd_stb(kbd_stb),
  655.                          .mus_in(mus_data), .mus_xstb(mus_xstb),
  656.                          .mus_ystb(mus_ystb), .mus_btnstb(mus_btnstb),
  657.                          .kj_stb(kj_stb), .kj_data(kj_port_data),
  658.                          .zah(a[15:8]), .kbd_data(kbd_port_data),
  659.                          .mus_data(mus_port_data)
  660.                        );
  661.  
  662.  
  663.         zports zports( .zclk(zclk), .fclk(fclk), .rst_n(rst_n), .zpos(zpos), .zneg(zneg),
  664.                        .din(d), .dout(dout_ports), .dataout(ena_ports),
  665.                        .a(a), .iorq_n(iorq_n), .rd_n(rd_n), .wr_n(wr_n), .porthit(porthit),
  666.                        .ay_bdir(ay_bdir), .ay_bc1(ay_bc1), .border(border),
  667.                        .p7ffd(p7ffd), .peff7(peff7), .mreq_n(mreq_n), .m1_n(m1_n), .dos(dos),
  668.                        .rstrom(rstrom), .vg_intrq(intrq), .vg_drq(drq), .vg_wrFF(vg_wrFF),
  669.                        .vg_cs_n(vg_cs_n), .sd_start(sd_start), .sd_dataout(sd_dataout),
  670.                        .sd_datain(sd_datain), .sdcs_n(sdcs_n),
  671.                        .idein(idein), .ideout(ideout), .idedataout(idedataout),
  672.                        .ide_a(ide_a), .ide_cs0_n(ide_cs0_n), .ide_cs1_n(ide_cs1_n),
  673.                        .ide_wr_n(ide_wr_n), .ide_rd_n(ide_rd_n),
  674.  
  675.                        .keys_in(kbd_port_data),
  676.                        .mus_in (mus_port_data),
  677.                        .kj_in  (kj_port_data ),
  678.  
  679.                        .tape_read(tape_read),
  680.  
  681.                        .gluclock_addr(gluclock_addr),
  682.                        .comport_addr (comport_addr ),
  683.                        .wait_start_gluclock(wait_start_gluclock),
  684.                        .wait_start_comport (wait_start_comport ),
  685.                        .wait_rnw  (wait_rnw  ),
  686.                        .wait_write(wait_write),
  687. `ifndef SIMULATE
  688.                        .wait_read (wait_read ),
  689. `else
  690.                        .wait_read(8'hFF),
  691. `endif
  692.                 .atmF7_wr_fclk(atmF7_wr_fclk),
  693.  
  694.                 .atm_scr_mode(atm_scr_mode),
  695.                 .atm_turbo   (atm_turbo),
  696.                 .atm_pen     (pager_off),
  697.                 .atm_cpm_n   (cpm_n),
  698.                 .atm_pen2    (atm_pen2),
  699.  
  700.                 .romrw_en(romrw_en),
  701.  
  702.                 .pent1m_ram0_0(pent1m_ram0_0),
  703.                 .pent1m_1m_on (pent1m_1m_on),
  704.                 .pent1m_page  (pent1m_page),
  705.                 .pent1m_ROM   (pent1m_ROM),
  706.  
  707.                 .atm_palwr  (atm_palwr  ),
  708.                 .atm_paldata(atm_paldata),
  709.  
  710.                 .beeper_wr(beeper_wr),
  711.                 .covox_wr (covox_wr ),
  712.  
  713.                 .fnt_wr(fnt_wr),
  714.                 .clr_nmi(clr_nmi),
  715.  
  716.  
  717.                 .pages(~{ rd_pages[7], rd_pages[6],
  718.                           rd_pages[5], rd_pages[4],
  719.                           rd_pages[3], rd_pages[2],
  720.                           rd_pages[1], rd_pages[0] }),
  721.  
  722.                 .ramnroms( rd_ramnrom ),
  723.                 .dos7ffds( rd_dos7ffd ),
  724.  
  725.                 .palcolor(palcolor),
  726.  
  727.                 .external_port(external_port),
  728.  
  729.  
  730.                 .set_nmi(set_nmi[1])
  731.         );
  732.  
  733.  
  734.         zint zint(
  735.                 .fclk(fclk),
  736.                 .zpos(zpos),
  737.                 .zneg(zneg),
  738.  
  739.                 .int_start(int_start),
  740.  
  741.                 .iorq_n(iorq_n),
  742.                 .m1_n  (m1_n  ),
  743.  
  744.                 .int_n(int_n)
  745.         );
  746.  
  747.         znmi znmi
  748.         (
  749.                 .rst_n(rst_n),
  750.                 .fclk(fclk),
  751.                 .zpos(zpos),
  752.                 .zneg(zneg),
  753.  
  754.                 .rfsh_n(rfsh_n),
  755.  
  756.                 .int_start(int_start),
  757.  
  758.                 .set_nmi(set_nmi),
  759.                 .clr_nmi(clr_nmi),
  760.  
  761.                 .in_nmi (in_nmi ),
  762.                 .gen_nmi(gen_nmi)
  763.         );
  764.  
  765.  
  766.  
  767.  
  768.         zwait zwait( .wait_start_gluclock(wait_start_gluclock),
  769.                      .wait_start_comport (wait_start_comport),
  770.                      .wait_end(wait_end),
  771.                      .rst_n(rst_n),
  772.                      .wait_n(wait_n),
  773.                      .waits(waits),
  774.                      .spiint_n(spiint_n) );
  775.  
  776.  
  777.  
  778.  
  779.         wire [1:0] vg_ddrv;
  780.         assign vg_a[0] = vg_ddrv[0] ? 1'b1 : 1'b0; // possibly open drain?
  781.         assign vg_a[1] = vg_ddrv[1] ? 1'b1 : 1'b0;
  782.  
  783.         vg93 vgshka( .zclk(zclk), .rst_n(rst_n), .fclk(fclk), .vg_clk(vg_clk),
  784.                      .vg_res_n(vg_res_n), .din(d), .intrq(intrq), .drq(drq), .vg_wrFF(vg_wrFF),
  785.                      .vg_hrdy(vg_hrdy), .vg_rclk(vg_rclk), .vg_rawr(vg_rawr), .vg_a(vg_ddrv),
  786.                      .vg_wrd(vg_wrd), .vg_side(vg_side), .step(step), .vg_sl(vg_sl), .vg_sr(vg_sr),
  787.                      .vg_tr43(vg_tr43), .rdat_n(rdat_b_n), .vg_wf_de(vg_wf_de), .vg_drq(vg_drq),
  788.                      .vg_irq(vg_irq), .vg_wd(vg_wd) );
  789.  
  790.  
  791.  
  792.  
  793.         spi2 zspi( .clock(fclk), .sck(sdclk), .sdo(sddo), .sdi(sddi), .start(sd_start),
  794.                    .speed(2'b00), .din(sd_datain), .dout(sd_dataout) );
  795.  
  796.  
  797.  
  798.  
  799.  
  800.           //////////////////////////////////////
  801.          // sound: beeper, tapeout and covox //
  802.         //////////////////////////////////////
  803.  
  804.         sound sound(
  805.  
  806.                 .clk(fclk),
  807.  
  808.                 .din(d),
  809.  
  810.                 .beeper_wr(beeper_wr),
  811.                 .covox_wr (covox_wr ),
  812.  
  813.                 .beeper_mux(beeper_mux),
  814.  
  815.                 .sound_bit(beep)
  816.         );
  817.  
  818.  
  819. endmodule
  820.  
  821.