OpenCores
URL https://opencores.org/ocsvn/socgen/socgen/trunk

Subversion Repositories socgen

[/] [socgen/] [trunk/] [Projects/] [opencores.org/] [Mos6502/] [ip/] [core/] [rtl/] [verilog/] [inst_decode] - Rev 134

Go to most recent revision | Compare with Previous | Blame | View Log


module `VARIANT`INST_DECODE

#(parameter STATE_SIZE=3)

(

    input  wire                            clk,         
    input  wire                          reset,        
    input  wire                         enable,
    input  wire                         disable_ir,
    input  wire                       fetch_op,
    input  wire  [STATE_SIZE:0]         state,            
    input  wire            [7:0]     prog_data,            

    output  reg                   now_fetch_op,
 
    output  reg            [7:0]            ir,            
    output  reg            [1:0]        length,            

    output  reg                      immediate,
    output  reg                       absolute,
    output  reg                      zero_page,
    output  reg                      indirectx,
    output  reg                      indirecty,
    output  reg                        implied,
    output  reg                       relative,
    output  reg                          stack,

    output  reg                            jsr,
    output  reg                           jump,
    output  reg                  jump_indirect,
    output  reg                            brk,
    output  reg                            rti,
    output  reg                            rts,

    output  reg                        invalid,

    output  reg            [1:0]      ins_type,

    output  reg            [2:0]          ctrl,
    output  reg            [2:0]          dest, 
 
    output  reg            [2:0]  alu_op_a_sel, 
    output  reg            [1:0]  alu_op_b_sel, 
    output  reg                   alu_op_b_inv,
    output  reg            [1:0]  alu_op_c_sel,

    output  reg            [1:0]       idx_sel, 
 

    output reg             [2:0]      alu_mode,
    output reg             [4:0] alu_status_update,    
 
    output  reg            [7:0]     brn_value,
    output  reg            [7:0]    brn_enable
);



reg  [1:0]  n_length;

reg  n_immediate;
reg  n_absolute;
reg  n_zero_page;
reg  n_indirectx;
reg  n_indirecty;
reg  n_implied;
reg  n_relative;
reg  n_stack;
reg  n_jsr;
reg  n_jump;
reg  n_jump_indirect;
reg  n_brk;
reg  n_rti;
reg  n_rts;
reg  n_invalid;
reg [1:0]  n_ins_type;

reg [2:0]  n_ctrl;
reg [2:0]  n_dest; 
reg [2:0]  n_alu_op_a_sel; 
reg [1:0]  n_alu_op_b_sel;
reg [1:0]  n_idx_sel;    
reg        n_alu_op_b_inv;
reg [1:0]  n_alu_op_c_sel; 
reg [2:0]  n_alu_mode;
reg [4:0]  n_alu_status_update;    
reg [7:0]  n_brn_value;
reg [7:0]  n_brn_enable;




always@(*)
 now_fetch_op = (state == `FETCH_OP) ||  fetch_op  ||  implied || stack  ;
   
   

always@(posedge clk)
  if (reset || disable_ir)
    begin
    ir                 <= 8'h00;
    length             <= 2'b00;
    absolute           <= 1'b0;
    immediate          <= 1'b0;
    implied            <= 1'b0;
    indirectx          <= 1'b0;
    indirecty          <= 1'b0;
    relative           <= 1'b0;
    zero_page          <= 1'b0;
    stack              <= 1'b0;
    jump               <= 1'b0;
    jump_indirect      <= 1'b0;
    jsr                <= 1'b0;
    brk                <= 1'b0;
    rti                <= 1'b0;
    rts                <= 1'b0;
    ins_type           <= `ins_type_none;     
    alu_mode           <= `alu_mode_add;
    alu_op_a_sel       <= `alu_op_a_00;
    alu_op_b_sel       <= `alu_op_b_00;
    alu_op_b_inv       <= 1'b0; 
    alu_op_c_sel       <= `alu_op_c_00;   
    idx_sel            <= `idx_sel_00;   
    alu_status_update  <= `alu_status_update_none;  
    brn_value          <= 8'h00;
    brn_enable         <= 8'h00;
    dest               <= `dest_none;   
    ctrl               <= `ctrl_none;   
    invalid            <= 1'b0;
    end
  else
  if((!enable) || (!now_fetch_op)  )  
   begin
    ir                 <= ir                ;
    length             <= length            ;
    absolute           <= absolute          ;
    immediate          <= immediate         ;
    implied            <= implied           ;
    indirectx          <= indirectx         ;
    indirecty          <= indirecty         ;
    relative           <= relative          ;
    zero_page          <= zero_page         ;
    stack              <= stack             ;
    jump               <= jump              ;
    jump_indirect      <= jump_indirect     ;
    jsr                <= jsr               ;
    brk                <= brk               ;
    rti                <= rti               ;
    rts                <= rts               ;
    ins_type           <= ins_type          ;     
    alu_mode           <= alu_mode          ;
    alu_op_a_sel       <= alu_op_a_sel      ;
    alu_op_b_sel       <= alu_op_b_sel      ;
    alu_op_b_inv       <= alu_op_b_inv      ; 
    alu_op_c_sel       <= alu_op_c_sel      ;
    idx_sel            <= idx_sel           ;
    alu_status_update  <= alu_status_update ;  
    brn_value          <= brn_value         ;
    brn_enable         <= brn_enable        ;
    dest               <= dest              ;   
    ctrl               <= ctrl              ;   
    invalid            <= invalid           ;
    end    
  else
   begin
    ir                 <= prog_data           ;
    length             <= n_length            ;
    absolute           <= n_absolute          ;
    immediate          <= n_immediate         ;
    implied            <= n_implied           ;
    indirectx          <= n_indirectx         ;
    indirecty          <= n_indirecty         ;
    relative           <= n_relative          ;
    zero_page          <= n_zero_page         ;
    stack              <= n_stack             ;
    jump               <= n_jump              ;
    jump_indirect      <= n_jump_indirect     ;
    jsr                <= n_jsr               ;
    brk                <= n_brk               ;
    rti                <= n_rti               ;
    rts                <= n_rts               ;
    ins_type           <= n_ins_type          ;     
    alu_mode           <= n_alu_mode          ;
    alu_op_a_sel       <= n_alu_op_a_sel      ;
    alu_op_b_sel       <= n_alu_op_b_sel      ;
    alu_op_b_inv       <= n_alu_op_b_inv      ; 
    alu_op_c_sel       <= n_alu_op_c_sel      ;   
    idx_sel            <= n_idx_sel           ;   
    alu_status_update  <= n_alu_status_update ;  
    brn_value          <= n_brn_value         ;
    brn_enable         <= n_brn_enable        ;
    dest               <= n_dest              ;   
    ctrl               <= n_ctrl              ;   
    invalid            <= n_invalid           ;
   end
    


always @ (*) 
  begin  
   n_length             = 2'b00;
   n_absolute           = 1'b0;
   n_immediate          = 1'b0;
   n_implied            = 1'b0;
   n_indirectx          = 1'b0;
   n_indirecty          = 1'b0;
   n_relative           = 1'b0;
   n_zero_page          = 1'b0;
   n_stack              = 1'b0;
   n_jump               = 1'b0;
   n_jump_indirect      = 1'b0;
   n_jsr                = 1'b0;
   n_brk                = 1'b0;
   n_rti                = 1'b0;
   n_rts                = 1'b0;
   n_ins_type           = `ins_type_none;     
   n_alu_mode           = `alu_mode_add;
   n_alu_op_a_sel       = `alu_op_a_00;
   n_alu_op_b_sel       = `alu_op_b_00;
   n_alu_op_b_inv       = 1'b0; 
   n_alu_op_c_sel       = `alu_op_c_00;
   n_idx_sel            = `idx_sel_00;   
   n_alu_status_update  = `alu_status_update_none;  
   n_brn_value          = 8'h00;
   n_brn_enable         = 8'h00;
   n_dest               = `dest_none;   
   n_ctrl               = `ctrl_none;   
   n_invalid            = 1'b0;
 
   case (prog_data)

// implied

      
       `CLC_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_status_update                  = `alu_status_update_wr;  
           n_brn_value                          = 8'h00;
           n_brn_enable                         = 8'h01;
           n_dest                               = `dest_none;
           end

       `CLD_IMP:  
           begin
           n_length                             = 2'b01;            
           n_implied                            = 1'b1;
           n_alu_status_update                  = `alu_status_update_wr;  
           n_brn_value                          = 8'h00;
           n_brn_enable                         = 8'h08;
           n_dest                               = `dest_none;    
           end

       `CLI_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_status_update                  = `alu_status_update_wr;  
           n_brn_value                          = 8'h00;
           n_brn_enable                         = 8'h04;
           n_dest                               = `dest_none;    
           end

       `CLV_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_status_update                  = `alu_status_update_wr;  
           n_brn_value                          = 8'h00;
           n_brn_enable                         = 8'h40;
           n_dest                               = `dest_none;    
           end

       `DEX_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_x;
           n_alu_op_b_inv                       = 1'b1;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_x;    
           end

       `DEY_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_y;
           n_alu_op_b_inv                       = 1'b1;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_y;    
           end

       `INX_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_x;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_x;    
           end

       `INY_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_y;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_y;    
           end

       `SEC_IMP: 
           begin
           n_length                             = 2'b01;            
           n_implied                            = 1'b1;
           n_alu_status_update                  = `alu_status_update_wr;  
           n_brn_value                          = 8'h01;
           n_brn_enable                         = 8'h01;
           n_dest                               = `dest_none;    
           end

       `SED_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_status_update                  = `alu_status_update_wr;  
           n_brn_value                          = 8'h08;
           n_brn_enable                         = 8'h08;
           n_dest                               = `dest_none;    
           end

       `SEI_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_status_update                  = `alu_status_update_wr;  
           n_brn_value                          = 8'h04;
           n_brn_enable                         = 8'h04;
           n_dest                               = `dest_none;    
           end

       `TAX_IMP:
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_x;     
           end

       `TAY_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_y;     
           end

       `TXA_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_x;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;    
           end

       `TYA_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_y;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;    
           end


       `NOP_IMP: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_dest                               = `dest_none;    
           end
     
       `ASL_ACC:
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;   
           n_alu_mode                           = `alu_mode_sfl;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nzc; 
           n_dest                               = `dest_alu_a;        
           end
 
       `LSR_ACC: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_mode                           = `alu_mode_sfr;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nzc;      
           n_dest                               = `dest_alu_a;                  
           end


       `ROL_ACC:
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_mode                           = `alu_mode_sfl;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzc;      
           n_dest                               = `dest_alu_a;                  
           end 

       `ROR_ACC: 
           begin
           n_length                             = 2'b01;
           n_implied                            = 1'b1;
           n_alu_mode                           = `alu_mode_sfr;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzc;      
           n_dest                               = `dest_alu_a;                  
           end

// immediate

       `ADC_IMM: 
           begin
           n_length                             = 2'b10;
           n_immediate                          = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_imm;
           n_alu_op_b_inv                       = 1'b0; 
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;
           n_dest                               = `dest_alu_a;                   
           end

       `AND_IMM: 
           begin
           n_length                             = 2'b10;
           n_immediate                          = 1'b1;
           n_alu_mode                           = `alu_mode_and;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_imm;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;                  
           end

       `CMP_IMM: 
           begin
           n_length                             = 2'b10;
           n_immediate                          = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_imm;
           n_alu_op_b_inv                       = 1'b1;        
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_none;                  
           end

       `CPX_IMM: 
           begin
           n_length                             = 2'b10;
           n_immediate                          = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_x;
           n_alu_op_b_sel                       = `alu_op_b_imm;
           n_alu_op_b_inv                       = 1'b1;  
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_none;                 
           end

       `CPY_IMM: 
           begin
           n_length                             = 2'b10;
           n_immediate                          = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_y;
           n_alu_op_b_sel                       = `alu_op_b_imm;
           n_alu_op_b_inv                       = 1'b1;
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_none;           
           end

       `EOR_IMM: 
           begin
           n_length                             = 2'b10;
           n_immediate                          = 1'b1;
           n_alu_mode                           = `alu_mode_eor;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_imm;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;        
           end

       `LDA_IMM: 
           begin
           n_length                             = 2'b10;
           n_immediate                          = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_imm;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;        
           n_dest                               = `dest_alu_a;                   
           end

       `LDX_IMM: 
           begin
           n_length                             = 2'b10;
           n_immediate                          = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_imm;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;       
           n_dest                               = `dest_alu_x;                    
           end

       `LDY_IMM: 
           begin
           n_length                             = 2'b10;
           n_immediate                          = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_imm;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz; 
           n_dest                               = `dest_alu_y;        
           end

       `ORA_IMM: 
           begin
           n_length                             = 2'b10;
           n_immediate                          = 1'b1;
           n_alu_mode                           = `alu_mode_orr;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_imm;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;                        
           end

       `SBC_IMM: 
           begin
           n_length                             = 2'b10;
           n_immediate                          = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_imm;
           n_alu_op_b_inv                       = 1'b1;  
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;     
           n_dest                               = `dest_alu_a;                   
           end

// zero_page
     

       `ADC_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;              
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0; 
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;
           n_dest                               = `dest_alu_a;                  
           end    


       `AND_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;        
           n_alu_mode                           = `alu_mode_and;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;        
           end    


       `ASL_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_rmw;              
           n_alu_mode                           = `alu_mode_sfl;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;                  
           end    


       `BIT_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;   
           n_alu_mode                           = `alu_mode_and;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_z67;
           n_dest                               = `dest_mem;        
           end    


       `CMP_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;         
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;        
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;                  
           end    


       `CPX_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_x;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;  
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;                        
           end    


       `CPY_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_y;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc; 
           n_dest                               = `dest_mem;                       
           end    


       `DEC_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_ff;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;                  
           end    


       `EOR_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_eor;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;                            
           end    


       `INC_ZPG: 
           begin
           n_length                             = 2'b10;            
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;                            
           end    


       `LDA_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;       
           n_dest                               = `dest_alu_a;                     
           end    


       `LDX_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_x;                               
           end    


       `LDY_ZPG:
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_y;                                        
           end    


       `LSR_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_sfr;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;                     
           end    


       `ORA_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_orr;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;                               
           end    


       `ROL_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_sfl;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;                               
           end    


       `ROR_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_sfr;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;                               
           end    


       `SBC_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;  
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;
           n_dest                               = `dest_mem;                               
           end    


       `STA_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_write;                     
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;  
           n_dest                               = `dest_mem;                     
           end    


       `STX_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_x;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;
           n_dest                               = `dest_mem;                     
           end    


       `STY_ZPG: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_ins_type                           = `ins_type_write;                     
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_y;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;
           n_dest                               = `dest_mem;                     
           end    

// zero_page_indexed
     

       `ADC_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0; 
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;
           n_dest                               = `dest_alu_a;          
           end

       `AND_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_and;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;                               
           end

       `ASL_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_sfl;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;                               
           end

       `CMP_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;        
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_none;                     
           end

       `DEC_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_ff;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;                               
           end

       `EOR_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_eor;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;                               
           end

       `INC_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;                               
           end

       `LDA_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;                               
           end

       `LDY_ZPX: 
           begin
           n_length                             = 2'b10;            
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;          
           n_dest                               = `dest_alu_y;                     
           end

       `LSR_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_sfr;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;                                     
           end

       `ORA_ZPX:  
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_orr;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;                                               
           end

       `ROL_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_rmw;              
           n_alu_mode                           = `alu_mode_sfl;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;                                               
           end

       `ROR_ZPX:
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_sfr;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;                                               
           end

       `SBC_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;  
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;
           n_dest                               = `dest_mem;                                               
           end

       `STA_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_write;                     
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;
           n_dest                               = `dest_mem;                                               
           end

       `STY_ZPX: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_write;                     
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_y;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;
           n_dest                               = `dest_mem;                                               
           end


       `LDX_ZPY:
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_y;   
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_x;                                               
           end
 
       `STX_ZPY: 
           begin
           n_length                             = 2'b10;
           n_zero_page                          = 1'b1;
           n_idx_sel                            = `idx_sel_y;      
           n_ins_type                           = `ins_type_write;                     
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_x;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;
           n_dest                               = `dest_mem;                                               
           end

// Branch

       `BCC_REL: 
           begin
           n_length                             = 2'b10;
           n_relative                           = 1'b1;
           n_ctrl                               = `ctrl_branch;   
           n_brn_enable[`C]                     = 1'b1;
           n_brn_value[`C]                      = 1'b0;
           n_dest                               = `dest_none;                                               
           end 



       `BCS_REL: 
           begin
           n_length                             = 2'b10;
           n_relative                           = 1'b1;
           n_ctrl                               = `ctrl_branch;   
           n_brn_enable[`C]                     = 1'b1;
           n_brn_value[`C]                      = 1'b1;
           n_dest                               = `dest_none;                                               
           end 


       `BNE_REL: 
           begin
           n_length                             = 2'b10;
           n_relative                           = 1'b1;
           n_ctrl                               = `ctrl_branch;   
           n_brn_enable[`Z]                     = 1'b1;
           n_brn_value[`Z]                      = 1'b0;
           n_dest                               = `dest_none;                                               
           end 



       `BEQ_REL: 
           begin
           n_length                             = 2'b10;
           n_relative                           = 1'b1;
           n_ctrl                               = `ctrl_branch;   
           n_brn_enable[`Z]                     = 1'b1;
           n_brn_value[`Z]                      = 1'b1; 
           n_dest                               = `dest_none;                                               
           end 







       `BPL_REL: 
           begin
           n_length                             = 2'b10;
           n_relative                           = 1'b1;
           n_ctrl                               = `ctrl_branch;   
           n_brn_enable[`N]                     = 1'b1;
           n_brn_value[`N]                      = 1'b0;   
           n_dest                               = `dest_none;                                               
           end 



       `BMI_REL: 
           begin
           n_length                             = 2'b10;
           n_relative                           = 1'b1;
           n_ctrl                               = `ctrl_branch;   
           n_brn_enable[`N]                     = 1'b1;
           n_brn_value[`N]                      = 1'b1;   
           n_dest                               = `dest_none;                  
           end 



       `BVC_REL: 
           begin
           n_length                             = 2'b10;
           n_relative                           = 1'b1;
           n_ctrl                               = `ctrl_branch;   
           n_brn_enable[`V]                     = 1'b1;
           n_brn_value[`V]                      = 1'b0;   
           n_dest                               = `dest_none;                                                         
           end 



       `BVS_REL: 
           begin
           n_length                             = 2'b10;
           n_relative                           = 1'b1;
           n_ctrl                               = `ctrl_branch;   
           n_brn_enable[`V]                     = 1'b1;
           n_brn_value[`V]                      = 1'b1;   
           n_dest                               = `dest_none;                                                         
           end 

// absolute
     
       `ADC_ABS:
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0; 
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;
           n_dest                               = `dest_alu_a;                                                         
           end 
    
       `AND_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_and;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;             
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;                                                                   
           end 

       `ASL_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_sfl;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;                                                                   
           end 

       `BIT_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_and;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_z67;
           n_dest                               = `dest_none;                                                                   
           end 

       `CMP_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;        
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_none;                                                                   
           end 

       `CPX_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                             
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_x;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;  
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc; 
           n_dest                               = `dest_none;                                                                        
           end 

       `CPY_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_y;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_none;                                                                                  
           end 

       `DEC_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_ff;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;                                                                                  
           end 

       `EOR_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_eor;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;                                                                         
          end 

       `INC_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;                                                                         
           end 

       `LDA_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;          
           n_dest                               = `dest_alu_a;                                                                         
           end 

       `LDX_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;          
           n_dest                               = `dest_alu_x;                                                                         
           end 

       `LDY_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;          
           n_dest                               = `dest_alu_y;                                                                         
           end 

       `LSR_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_sfr;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nzc;       
           n_dest                               = `dest_mem;
           end 

       `ORA_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_orr;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;       
           n_dest                               = `dest_alu_a;
           end 

       `ROL_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_sfl;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzc;       
           n_dest                               = `dest_mem;
           end 

       `ROR_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_rmw;                       
           n_alu_mode                           = `alu_mode_sfr;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzc;       
           n_dest                               = `dest_mem;
           end 

       `SBC_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_read;                      
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;             
           n_alu_op_b_inv                       = 1'b1;  
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;       
           n_dest                               = `dest_alu_a; 
           end 

       `STA_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_write;                     
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;  
           n_dest                               = `dest_mem;
           end 

       `STX_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_write;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_x;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;
           n_dest                               = `dest_mem;
           end 

       `STY_ABS: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_ins_type                           = `ins_type_write;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_y;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;
           n_dest                               = `dest_mem;
           end  

// absolute_indexed
     
       `ADC_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0; 
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;  
           n_dest                               = `dest_alu_a;
           end 

       `AND_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_and;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;
           end 

       `ASL_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;  
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_rmw;
           n_alu_mode                           = `alu_mode_sfl;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_mem;
           end 

       `CMP_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;        
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_none;
           end 

       `DEC_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_rmw;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_ff;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;
           end 

       `EOR_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_eor;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;
           end 

       `INC_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_rmw;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_mem;
           end  

       `LDA_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;          
           n_dest                               = `dest_alu_a;
           end 

       `LDY_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;          
           n_dest                               = `dest_alu_y;
           end 

       `LSR_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_rmw;
           n_alu_mode                           = `alu_mode_sfr;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nzc;       
           n_dest                               = `dest_mem;
           end 

       `ORA_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_read;             
           n_alu_mode                           = `alu_mode_orr;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;       
           n_dest                               = `dest_mem;
           end 

       `ROL_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_rmw;
           n_alu_mode                           = `alu_mode_sfl;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzc;       
           n_dest                               = `dest_mem;
           end 

       `ROR_ABX:
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_rmw;
           n_alu_mode                           = `alu_mode_sfr;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzc;       
           n_dest                               = `dest_mem;
           end  

       `SBC_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;  
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;       
           n_dest                               = `dest_alu_a;
           end 

       `STA_ABX: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_write;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;  
           n_dest                               = `dest_mem;
           end 

       `ADC_ABY: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_y;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0; 
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;  
           n_dest                               = `dest_alu_a;
           end 


       `AND_ABY: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_y;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_and;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd; 
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;        
           end  


       `CMP_ABY: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_y;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;        
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_none;
           end 


       `EOR_ABY: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_y;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_eor;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;
           end 


       `LDA_ABY: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_y;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;       
           n_dest                               = `dest_alu_a;
           end 


       `LDX_ABY: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_y;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;    
           n_dest                               = `dest_alu_x;
           end 


       `ORA_ABY: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_y;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_orr;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;      
           n_dest                               = `dest_alu_a;
           end 


       `SBC_ABY: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_y;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;  
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;      
           n_dest                               = `dest_alu_a;
           end 


       `STA_ABY: 
           begin
           n_length                             = 2'b11;
           n_absolute                           = 1'b1;
           n_idx_sel                            = `idx_sel_y;   
           n_ins_type                           = `ins_type_write;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;  
           n_dest                               = `dest_mem;
           end 
// indirectx
     
       `ADC_IDX: 
           begin
           n_length                             = 2'b10;            
           n_indirectx                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0; 
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;  
           n_dest                               = `dest_alu_a;
           end 

       `AND_IDX: 
           begin
           n_length                             = 2'b10;
           n_indirectx                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_and;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;
           end 

       `CMP_IDX: 
           begin
           n_length                             = 2'b10;
           n_indirectx                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;        
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_none;
           end 

       `EOR_IDX: 
           begin
           n_length                             = 2'b10;
           n_indirectx                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_eor;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;
           end 

       `LDA_IDX: 
           begin
           n_length                             = 2'b10;
           n_indirectx                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;       
           n_dest                               = `dest_alu_a;
           end 

       `ORA_IDX: 
           begin
           n_length                             = 2'b10;
           n_indirectx                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_orr;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;      
           n_dest                               = `dest_alu_a;
           end 

       `SBC_IDX: 
           begin
           n_length                             = 2'b10;
           n_indirectx                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd; 
           n_alu_op_b_inv                       = 1'b1;  
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;      
           n_dest                               = `dest_alu_a;
           end 

       `STA_IDX: 
           begin
           n_length                             = 2'b10;
           n_indirectx                          = 1'b1;
           n_idx_sel                            = `idx_sel_x;   
           n_ins_type                           = `ins_type_write;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;  
           n_dest                               = `dest_mem;
           end 

// indirecty
     
       `ADC_IDY: 
           begin 
           n_length                             = 2'b10;
           n_indirecty                          = 1'b1;
           n_idx_sel                            = `idx_sel_y;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0; 
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;  
           n_dest                               = `dest_alu_a;
           end 

       `AND_IDY: 
           begin 
           n_length                             = 2'b10;
           n_indirecty                          = 1'b1;
           n_idx_sel                            = `idx_sel_y;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_and;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;
           end 

       `CMP_IDY: 
           begin 
           n_length                             = 2'b10;
           n_indirecty                          = 1'b1;
           n_idx_sel                            = `idx_sel_y;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;        
           n_alu_op_c_sel                       = `alu_op_c_01;
           n_alu_status_update                  = `alu_status_update_nzc;
           n_dest                               = `dest_none;
           end 

       `EOR_IDY: 
           begin 
           n_length                             = 2'b10;
           n_indirecty                          = 1'b1;
           n_idx_sel                            = `idx_sel_y;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_eor;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;             
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;
           end 

       `LDA_IDY: 
           begin 
           n_length                             = 2'b10;
           n_indirecty                          = 1'b1;
           n_idx_sel                            = `idx_sel_y;      
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;  
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;       
           n_dest                               = `dest_alu_a;
           end 

       `ORA_IDY: 
           begin 
           n_length                             = 2'b10;
           n_indirecty                          = 1'b1;
           n_idx_sel                            = `idx_sel_y;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_orr;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;      
           n_dest                               = `dest_alu_a;
           end 

       `SBC_IDY: 
           begin 
           n_length                             = 2'b10;
           n_indirecty                          = 1'b1;
           n_idx_sel                            = `idx_sel_y;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b1;  
           n_alu_op_c_sel                       = `alu_op_c_cin;
           n_alu_status_update                  = `alu_status_update_nzcv;      
           n_dest                               = `dest_alu_a;
           end 

       `STA_IDY: 
           begin 
           n_length                             = 2'b10;
           n_indirecty                          = 1'b1;
           n_idx_sel                            = `idx_sel_y;   
           n_ins_type                           = `ins_type_write;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;  
           n_dest                               = `dest_mem;
           end 



// stack



       `PHA_IMP: 
           begin
           n_length                             = 2'b01;
           n_stack                              = 1'b1;
           n_ins_type                           = `ins_type_write;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_acc;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;  
           n_dest                               = `dest_none;         
           end

       `PHP_IMP: 
           begin
           n_length                             = 2'b01;
           n_stack                              = 1'b1;       
           n_ins_type                           = `ins_type_write;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_psr;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_none;  
           n_dest                               = `dest_mem;          
           end

       `PLA_IMP: 
           begin
           n_length                             = 2'b01;
           n_stack                              = 1'b1;
           n_ins_type                           = `ins_type_read;             
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_stk;
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_nz;
           n_dest                               = `dest_alu_a;        
           end

       `PLP_IMP: 
           begin
           n_length                             = 2'b01;
           n_stack                              = 1'b1;
           n_ins_type                           = `ins_type_read;             
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_stk;              
           n_alu_op_b_inv                       = 1'b0;        
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_res;
           n_dest                               = `dest_none;                  
           end



// jump
     
       `JMP_ABS: 
           begin
           n_length                             = 2'b11;
           n_jump                               = 1'b1;
           n_ctrl                               = `ctrl_jmp;   
           end

// jump_indirect     
       `JMP_IND: 
           begin
           n_length                             = 2'b11;
           n_jump_indirect                      = 1'b1;
           n_ctrl                               = `ctrl_jmp_ind;   
           end

// jump_subroutine
     
       `JSR_ABS: 
           begin
           n_length                             = 2'b11;
           n_jsr                                = 1'b1;
           n_ctrl                               = `ctrl_jsr;   
           end


// break     
// ??????????  Need to update alu_status at the end of this instruction
     
       `BRK_IMP: 
           begin
           n_length                             = 2'b01;
           n_brk                                = 1'b1;
           n_ctrl                               = `ctrl_brk;   
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_psr;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_wr;  
           n_brn_value                          = 8'h10; // BRK bit in psr
           n_brn_enable                         = 8'h10;
           n_dest                               = `dest_none;
          end


// return for int
     
       `RTI_IMP: 
           begin
           n_length                             = 2'b01;
           n_rti                                = 1'b1;
           n_ctrl                               = `ctrl_rti;   
           n_ins_type                           = `ins_type_read;
           n_alu_mode                           = `alu_mode_add;
           n_alu_op_a_sel                       = `alu_op_a_00;
           n_alu_op_b_sel                       = `alu_op_b_opnd;
           n_alu_op_b_inv                       = 1'b0;
           n_alu_op_c_sel                       = `alu_op_c_00;
           n_alu_status_update                  = `alu_status_update_res; 
           n_dest                               = `dest_none;
         end

// return from sub
     
       `RTS_IMP: 
           begin
           n_length                             = 2'b01;
           n_rts                                = 1'b1;
           n_ctrl                               = `ctrl_rts;   
           end




       default: 
           begin
           n_invalid                            = 1'b1;
           n_ins_type                           = `ins_type_none;
           end

  endcase

 end // always @ (*)

   

 


endmodule



Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.