Advertisement
NovaYoshi

googoo gaagaa

Mar 19th, 2017
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `default_nettype none
  2.  
  3. module MAPBE(   //signal descriptions in powerpak.v
  4.     input m2,
  5.     input m2_n,
  6.     input clk20,
  7.  
  8.     input reset,
  9.     input nesprg_we,
  10.     output nesprg_oe,
  11.     input neschr_rd,
  12.     input neschr_wr,
  13.     input [15:0] prgain,
  14.     input [13:0] chrain,
  15.     input [7:0] nesprgdin,
  16.     input [7:0] ramprgdin,
  17.     output [7:0] nesprgdout,
  18.  
  19.     output [7:0] neschrdout,
  20.     output neschr_oe,
  21.  
  22.     output chrram_we,
  23.     output chrram_oe,
  24.     output wram_oe,
  25.     output wram_we,
  26.     output prgram_we,
  27.     output prgram_oe,
  28.     output [18:10] ramchraout,
  29.     output [18:13] ramprgaout,
  30.     output reg irq,
  31.     output ciram_ce,
  32.     output exp6,
  33.    
  34.     input cfg_boot,
  35.     input [18:12] cfg_chrmask,
  36.     input [18:13] cfg_prgmask,
  37.     input cfg_vertical,
  38.     input cfg_fourscreen,
  39.     input cfg_chrram
  40. );
  41.  
  42.     reg [3:0] prgbank_reg;
  43.      reg [6:0] chrbank_reg [3:0];
  44.      
  45.     always@(posedge m2) begin
  46.         if(nesprg_we & prgain[15]) begin
  47.             case({prgain[14:13]})
  48.                 0: prgbank_reg <= {1'b0, nesprgdin[2:0]}; // 8-9
  49.                 1: chrbank_reg[prgain[1:0]] = nesprgdin;  // a-b
  50.                 2: prgbank_reg <= {1'b1, nesprgdin[2:0]}; // c-d
  51.             endcase
  52.         end
  53.     end
  54.  
  55. //bankswitch
  56.     reg [18:13] prgbank_now;
  57.     always@(prgain,prgbank_reg)
  58.         case({prgain[14:13]})
  59.             0:prgbank_now=(prgbank_reg<<1);
  60.             1:prgbank_now=(prgbank_reg<<1)|1;
  61.             2:prgbank_now=0;
  62.             3:prgbank_now=1;
  63.         endcase
  64.  
  65.     reg [18:10] chrbank;
  66.     always@(cfg_fourscreen,cfg_vertical,chrain,chrbank_reg[0],chrbank_reg[1],chrbank_reg[2],chrbank_reg[3]) begin
  67.         chrbank[18]=chrain[13];
  68.         if(!chrain[13]) begin
  69.                 case({chrain[12:10]})
  70.                     0: chrbank[17:10] = {chrbank_reg[0],chrain[10]};
  71.                     1: chrbank[17:10] = {chrbank_reg[0],chrain[10]};
  72.                     2: chrbank[17:10] = {chrbank_reg[1],chrain[10]};
  73.                     3: chrbank[17:10] = {chrbank_reg[1],chrain[10]};
  74.                     4: chrbank[17:10] = {chrbank_reg[2],chrain[10]};
  75.                     5: chrbank[17:10] = {chrbank_reg[2],chrain[10]};
  76.                     6: chrbank[17:10] = {chrbank_reg[3],chrain[10]};
  77.                     7: chrbank[17:10] = {chrbank_reg[3],chrain[10]};
  78.                 endcase
  79.         end else begin
  80.             chrbank[17:12]=0;
  81.             chrbank[11]=chrain[11] & cfg_fourscreen;
  82.             chrbank[10]=((cfg_vertical & chrain[11]) | (~cfg_vertical & chrain[10]));
  83.         end
  84.     end
  85.  
  86. //rom size mask
  87.     assign ramprgaout[18:13]=(prgbank_now[18:13] & cfg_prgmask & {4'b1111, {2{prgain[15]}}});
  88.     assign ramchraout=chrbank & {1'b1, cfg_chrmask[17:12], 2'b11};
  89.  
  90. //bus control
  91.     assign ciram_ce=0;
  92.     assign chrram_we=neschr_wr & (cfg_chrram | chrain[13]);
  93.     assign chrram_oe=neschr_rd;
  94.  
  95.     assign prgram_oe= ~cfg_boot & m2_n & ~nesprg_we & prgain[15];
  96.     assign wram_oe=               m2_n & ~nesprg_we & prgain[15:13]==3'b011;
  97.  
  98.     assign wram_we=m2_n & nesprg_we & prgain[15:13]=='b011;
  99.  
  100.     assign prgram_we=0;
  101.  
  102.     wire config_rd;
  103.     gamegenie gg(m2, reset, nesprg_we, prgain, nesprgdin, ramprgdin, nesprgdout, config_rd);
  104.  
  105.     assign nesprg_oe=wram_oe | prgram_oe | config_rd;
  106.  
  107.     assign neschr_oe=0;
  108.     assign neschrdout=0;
  109.  
  110. //sound
  111.     assign exp6=1'bz;
  112.  
  113. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement