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

Subversion Repositories socgen

[/] [socgen/] [trunk/] [Projects/] [opencores.org/] [Mos6502/] [ip/] [core/] [rtl/] [verilog/] [inst_decode] - Blame information for rev 131

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 131 jt_eaton
 
2
module `VARIANT`INST_DECODE
3
 
4
#(parameter STATE_SIZE=3)
5
 
6
(
7
 
8
    input  wire                            clk,
9
    input  wire                          reset,
10
    input  wire                         enable,
11
    input  wire                         disable_ir,
12
    input  wire                       fetch_op,
13
    input  wire  [STATE_SIZE:0]         state,
14
    input  wire            [7:0]     prog_data,
15
 
16
    output  reg                   now_fetch_op,
17
 
18
    output  reg            [7:0]            ir,
19
    output  reg            [1:0]        length,
20
 
21
    output  reg                      immediate,
22
    output  reg                       absolute,
23
    output  reg                      zero_page,
24
    output  reg                      indirectx,
25
    output  reg                      indirecty,
26
    output  reg                        implied,
27
    output  reg                       relative,
28
    output  reg                          stack,
29
 
30
    output  reg                            jsr,
31
    output  reg                           jump,
32
    output  reg                  jump_indirect,
33
    output  reg                            brk,
34
    output  reg                            rti,
35
    output  reg                            rts,
36
 
37
    output  reg                        invalid,
38
 
39
    output  reg            [1:0]      ins_type,
40
 
41
    output  reg            [2:0]          ctrl,
42
    output  reg            [2:0]          dest,
43
 
44
    output  reg            [2:0]  alu_op_a_sel,
45
    output  reg            [1:0]  alu_op_b_sel,
46
    output  reg                   alu_op_b_inv,
47
    output  reg            [1:0]  alu_op_c_sel,
48
 
49
    output  reg            [1:0]       idx_sel,
50
 
51
 
52
    output reg             [2:0]      alu_mode,
53
    output reg             [4:0] alu_status_update,
54
 
55
    output  reg            [7:0]     brn_value,
56
    output  reg            [7:0]    brn_enable
57
);
58
 
59
 
60
 
61
reg  [1:0]  n_length;
62
 
63
reg  n_immediate;
64
reg  n_absolute;
65
reg  n_zero_page;
66
reg  n_indirectx;
67
reg  n_indirecty;
68
reg  n_implied;
69
reg  n_relative;
70
reg  n_stack;
71
reg  n_jsr;
72
reg  n_jump;
73
reg  n_jump_indirect;
74
reg  n_brk;
75
reg  n_rti;
76
reg  n_rts;
77
reg  n_invalid;
78
reg [1:0]  n_ins_type;
79
 
80
reg [2:0]  n_ctrl;
81
reg [2:0]  n_dest;
82
reg [2:0]  n_alu_op_a_sel;
83
reg [1:0]  n_alu_op_b_sel;
84
reg [1:0]  n_idx_sel;
85
reg        n_alu_op_b_inv;
86
reg [1:0]  n_alu_op_c_sel;
87
reg [2:0]  n_alu_mode;
88
reg [4:0]  n_alu_status_update;
89
reg [7:0]  n_brn_value;
90
reg [7:0]  n_brn_enable;
91
 
92
 
93
 
94
 
95
always@(*)
96
 now_fetch_op = (state == `FETCH_OP) ||  fetch_op  ||  implied || stack  ;
97
 
98
 
99
 
100
always@(posedge clk)
101
  if (reset || disable_ir)
102
    begin
103
    ir                 <= 8'h00;
104
    length             <= 2'b00;
105
    absolute           <= 1'b0;
106
    immediate          <= 1'b0;
107
    implied            <= 1'b0;
108
    indirectx          <= 1'b0;
109
    indirecty          <= 1'b0;
110
    relative           <= 1'b0;
111
    zero_page          <= 1'b0;
112
    stack              <= 1'b0;
113
    jump               <= 1'b0;
114
    jump_indirect      <= 1'b0;
115
    jsr                <= 1'b0;
116
    brk                <= 1'b0;
117
    rti                <= 1'b0;
118
    rts                <= 1'b0;
119
    ins_type           <= `ins_type_none;
120
    alu_mode           <= `alu_mode_add;
121
    alu_op_a_sel       <= `alu_op_a_00;
122
    alu_op_b_sel       <= `alu_op_b_00;
123
    alu_op_b_inv       <= 1'b0;
124
    alu_op_c_sel       <= `alu_op_c_00;
125
    idx_sel            <= `idx_sel_00;
126
    alu_status_update  <= `alu_status_update_none;
127
    brn_value          <= 8'h00;
128
    brn_enable         <= 8'h00;
129
    dest               <= `dest_none;
130
    ctrl               <= `ctrl_none;
131
    invalid            <= 1'b0;
132
    end
133
  else
134
  if((!enable) || (!now_fetch_op)  )
135
   begin
136
    ir                 <= ir                ;
137
    length             <= length            ;
138
    absolute           <= absolute          ;
139
    immediate          <= immediate         ;
140
    implied            <= implied           ;
141
    indirectx          <= indirectx         ;
142
    indirecty          <= indirecty         ;
143
    relative           <= relative          ;
144
    zero_page          <= zero_page         ;
145
    stack              <= stack             ;
146
    jump               <= jump              ;
147
    jump_indirect      <= jump_indirect     ;
148
    jsr                <= jsr               ;
149
    brk                <= brk               ;
150
    rti                <= rti               ;
151
    rts                <= rts               ;
152
    ins_type           <= ins_type          ;
153
    alu_mode           <= alu_mode          ;
154
    alu_op_a_sel       <= alu_op_a_sel      ;
155
    alu_op_b_sel       <= alu_op_b_sel      ;
156
    alu_op_b_inv       <= alu_op_b_inv      ;
157
    alu_op_c_sel       <= alu_op_c_sel      ;
158
    idx_sel            <= idx_sel           ;
159
    alu_status_update  <= alu_status_update ;
160
    brn_value          <= brn_value         ;
161
    brn_enable         <= brn_enable        ;
162
    dest               <= dest              ;
163
    ctrl               <= ctrl              ;
164
    invalid            <= invalid           ;
165
    end
166
  else
167
   begin
168
    ir                 <= prog_data           ;
169
    length             <= n_length            ;
170
    absolute           <= n_absolute          ;
171
    immediate          <= n_immediate         ;
172
    implied            <= n_implied           ;
173
    indirectx          <= n_indirectx         ;
174
    indirecty          <= n_indirecty         ;
175
    relative           <= n_relative          ;
176
    zero_page          <= n_zero_page         ;
177
    stack              <= n_stack             ;
178
    jump               <= n_jump              ;
179
    jump_indirect      <= n_jump_indirect     ;
180
    jsr                <= n_jsr               ;
181
    brk                <= n_brk               ;
182
    rti                <= n_rti               ;
183
    rts                <= n_rts               ;
184
    ins_type           <= n_ins_type          ;
185
    alu_mode           <= n_alu_mode          ;
186
    alu_op_a_sel       <= n_alu_op_a_sel      ;
187
    alu_op_b_sel       <= n_alu_op_b_sel      ;
188
    alu_op_b_inv       <= n_alu_op_b_inv      ;
189
    alu_op_c_sel       <= n_alu_op_c_sel      ;
190
    idx_sel            <= n_idx_sel           ;
191
    alu_status_update  <= n_alu_status_update ;
192
    brn_value          <= n_brn_value         ;
193
    brn_enable         <= n_brn_enable        ;
194
    dest               <= n_dest              ;
195
    ctrl               <= n_ctrl              ;
196
    invalid            <= n_invalid           ;
197
   end
198
 
199
 
200
 
201
always @ (*)
202
  begin
203
   n_length             = 2'b00;
204
   n_absolute           = 1'b0;
205
   n_immediate          = 1'b0;
206
   n_implied            = 1'b0;
207
   n_indirectx          = 1'b0;
208
   n_indirecty          = 1'b0;
209
   n_relative           = 1'b0;
210
   n_zero_page          = 1'b0;
211
   n_stack              = 1'b0;
212
   n_jump               = 1'b0;
213
   n_jump_indirect      = 1'b0;
214
   n_jsr                = 1'b0;
215
   n_brk                = 1'b0;
216
   n_rti                = 1'b0;
217
   n_rts                = 1'b0;
218
   n_ins_type           = `ins_type_none;
219
   n_alu_mode           = `alu_mode_add;
220
   n_alu_op_a_sel       = `alu_op_a_00;
221
   n_alu_op_b_sel       = `alu_op_b_00;
222
   n_alu_op_b_inv       = 1'b0;
223
   n_alu_op_c_sel       = `alu_op_c_00;
224
   n_idx_sel            = `idx_sel_00;
225
   n_alu_status_update  = `alu_status_update_none;
226
   n_brn_value          = 8'h00;
227
   n_brn_enable         = 8'h00;
228
   n_dest               = `dest_none;
229
   n_ctrl               = `ctrl_none;
230
   n_invalid            = 1'b0;
231
 
232
   case (prog_data)
233
 
234
// implied
235
 
236
 
237
       `CLC_IMP:
238
           begin
239
           n_length                             = 2'b01;
240
           n_implied                            = 1'b1;
241
           n_alu_status_update                  = `alu_status_update_wr;
242
           n_brn_value                          = 8'h00;
243
           n_brn_enable                         = 8'h01;
244
           n_dest                               = `dest_none;
245
           end
246
 
247
       `CLD_IMP:
248
           begin
249
           n_length                             = 2'b01;
250
           n_implied                            = 1'b1;
251
           n_alu_status_update                  = `alu_status_update_wr;
252
           n_brn_value                          = 8'h00;
253
           n_brn_enable                         = 8'h08;
254
           n_dest                               = `dest_none;
255
           end
256
 
257
       `CLI_IMP:
258
           begin
259
           n_length                             = 2'b01;
260
           n_implied                            = 1'b1;
261
           n_alu_status_update                  = `alu_status_update_wr;
262
           n_brn_value                          = 8'h00;
263
           n_brn_enable                         = 8'h04;
264
           n_dest                               = `dest_none;
265
           end
266
 
267
       `CLV_IMP:
268
           begin
269
           n_length                             = 2'b01;
270
           n_implied                            = 1'b1;
271
           n_alu_status_update                  = `alu_status_update_wr;
272
           n_brn_value                          = 8'h00;
273
           n_brn_enable                         = 8'h40;
274
           n_dest                               = `dest_none;
275
           end
276
 
277
       `DEX_IMP:
278
           begin
279
           n_length                             = 2'b01;
280
           n_implied                            = 1'b1;
281
           n_alu_mode                           = `alu_mode_add;
282
           n_alu_op_a_sel                       = `alu_op_a_x;
283
           n_alu_op_b_inv                       = 1'b1;
284
           n_alu_op_c_sel                       = `alu_op_c_00;
285
           n_alu_status_update                  = `alu_status_update_nz;
286
           n_dest                               = `dest_alu_x;
287
           end
288
 
289
       `DEY_IMP:
290
           begin
291
           n_length                             = 2'b01;
292
           n_implied                            = 1'b1;
293
           n_alu_mode                           = `alu_mode_add;
294
           n_alu_op_a_sel                       = `alu_op_a_y;
295
           n_alu_op_b_inv                       = 1'b1;
296
           n_alu_op_c_sel                       = `alu_op_c_00;
297
           n_alu_status_update                  = `alu_status_update_nz;
298
           n_dest                               = `dest_alu_y;
299
           end
300
 
301
       `INX_IMP:
302
           begin
303
           n_length                             = 2'b01;
304
           n_implied                            = 1'b1;
305
           n_alu_mode                           = `alu_mode_add;
306
           n_alu_op_a_sel                       = `alu_op_a_x;
307
           n_alu_op_b_inv                       = 1'b0;
308
           n_alu_op_c_sel                       = `alu_op_c_01;
309
           n_alu_status_update                  = `alu_status_update_nz;
310
           n_dest                               = `dest_alu_x;
311
           end
312
 
313
       `INY_IMP:
314
           begin
315
           n_length                             = 2'b01;
316
           n_implied                            = 1'b1;
317
           n_alu_mode                           = `alu_mode_add;
318
           n_alu_op_a_sel                       = `alu_op_a_y;
319
           n_alu_op_b_inv                       = 1'b0;
320
           n_alu_op_c_sel                       = `alu_op_c_01;
321
           n_alu_status_update                  = `alu_status_update_nz;
322
           n_dest                               = `dest_alu_y;
323
           end
324
 
325
       `SEC_IMP:
326
           begin
327
           n_length                             = 2'b01;
328
           n_implied                            = 1'b1;
329
           n_alu_status_update                  = `alu_status_update_wr;
330
           n_brn_value                          = 8'h01;
331
           n_brn_enable                         = 8'h01;
332
           n_dest                               = `dest_none;
333
           end
334
 
335
       `SED_IMP:
336
           begin
337
           n_length                             = 2'b01;
338
           n_implied                            = 1'b1;
339
           n_alu_status_update                  = `alu_status_update_wr;
340
           n_brn_value                          = 8'h08;
341
           n_brn_enable                         = 8'h08;
342
           n_dest                               = `dest_none;
343
           end
344
 
345
       `SEI_IMP:
346
           begin
347
           n_length                             = 2'b01;
348
           n_implied                            = 1'b1;
349
           n_alu_status_update                  = `alu_status_update_wr;
350
           n_brn_value                          = 8'h04;
351
           n_brn_enable                         = 8'h04;
352
           n_dest                               = `dest_none;
353
           end
354
 
355
       `TAX_IMP:
356
           begin
357
           n_length                             = 2'b01;
358
           n_implied                            = 1'b1;
359
           n_alu_mode                           = `alu_mode_add;
360
           n_alu_op_a_sel                       = `alu_op_a_acc;
361
           n_alu_op_b_inv                       = 1'b0;
362
           n_alu_op_c_sel                       = `alu_op_c_00;
363
           n_alu_status_update                  = `alu_status_update_nz;
364
           n_dest                               = `dest_alu_x;
365
           end
366
 
367
       `TAY_IMP:
368
           begin
369
           n_length                             = 2'b01;
370
           n_implied                            = 1'b1;
371
           n_alu_mode                           = `alu_mode_add;
372
           n_alu_op_a_sel                       = `alu_op_a_acc;
373
           n_alu_op_b_inv                       = 1'b0;
374
           n_alu_op_c_sel                       = `alu_op_c_00;
375
           n_alu_status_update                  = `alu_status_update_nz;
376
           n_dest                               = `dest_alu_y;
377
           end
378
 
379
       `TXA_IMP:
380
           begin
381
           n_length                             = 2'b01;
382
           n_implied                            = 1'b1;
383
           n_alu_mode                           = `alu_mode_add;
384
           n_alu_op_a_sel                       = `alu_op_a_x;
385
           n_alu_op_b_inv                       = 1'b0;
386
           n_alu_op_c_sel                       = `alu_op_c_00;
387
           n_alu_status_update                  = `alu_status_update_nz;
388
           n_dest                               = `dest_alu_a;
389
           end
390
 
391
       `TYA_IMP:
392
           begin
393
           n_length                             = 2'b01;
394
           n_implied                            = 1'b1;
395
           n_alu_mode                           = `alu_mode_add;
396
           n_alu_op_a_sel                       = `alu_op_a_y;
397
           n_alu_op_c_sel                       = `alu_op_c_00;
398
           n_alu_status_update                  = `alu_status_update_nz;
399
           n_dest                               = `dest_alu_a;
400
           end
401
 
402
 
403
       `NOP_IMP:
404
           begin
405
           n_length                             = 2'b01;
406
           n_implied                            = 1'b1;
407
           n_dest                               = `dest_none;
408
           end
409
 
410
       `ASL_ACC:
411
           begin
412
           n_length                             = 2'b01;
413
           n_implied                            = 1'b1;
414
           n_alu_mode                           = `alu_mode_sfl;
415
           n_alu_op_a_sel                       = `alu_op_a_acc;
416
           n_alu_op_b_inv                       = 1'b0;
417
           n_alu_op_c_sel                       = `alu_op_c_00;
418
           n_alu_status_update                  = `alu_status_update_nzc;
419
           n_dest                               = `dest_alu_a;
420
           end
421
 
422
       `LSR_ACC:
423
           begin
424
           n_length                             = 2'b01;
425
           n_implied                            = 1'b1;
426
           n_alu_mode                           = `alu_mode_sfr;
427
           n_alu_op_a_sel                       = `alu_op_a_acc;
428
           n_alu_op_b_inv                       = 1'b0;
429
           n_alu_op_c_sel                       = `alu_op_c_00;
430
           n_alu_status_update                  = `alu_status_update_nzc;
431
           n_dest                               = `dest_alu_a;
432
           end
433
 
434
 
435
       `ROL_ACC:
436
           begin
437
           n_length                             = 2'b01;
438
           n_implied                            = 1'b1;
439
           n_alu_mode                           = `alu_mode_sfl;
440
           n_alu_op_a_sel                       = `alu_op_a_acc;
441
           n_alu_op_b_inv                       = 1'b0;
442
           n_alu_op_c_sel                       = `alu_op_c_cin;
443
           n_alu_status_update                  = `alu_status_update_nzc;
444
           n_dest                               = `dest_alu_a;
445
           end
446
 
447
       `ROR_ACC:
448
           begin
449
           n_length                             = 2'b01;
450
           n_implied                            = 1'b1;
451
           n_alu_mode                           = `alu_mode_sfr;
452
           n_alu_op_a_sel                       = `alu_op_a_acc;
453
           n_alu_op_b_inv                       = 1'b0;
454
           n_alu_op_c_sel                       = `alu_op_c_cin;
455
           n_alu_status_update                  = `alu_status_update_nzc;
456
           n_dest                               = `dest_alu_a;
457
           end
458
 
459
// immediate
460
 
461
       `ADC_IMM:
462
           begin
463
           n_length                             = 2'b10;
464
           n_immediate                          = 1'b1;
465
           n_alu_mode                           = `alu_mode_add;
466
           n_alu_op_a_sel                       = `alu_op_a_acc;
467
           n_alu_op_b_sel                       = `alu_op_b_imm;
468
           n_alu_op_b_inv                       = 1'b0;
469
           n_alu_op_c_sel                       = `alu_op_c_cin;
470
           n_alu_status_update                  = `alu_status_update_nzcv;
471
           n_dest                               = `dest_alu_a;
472
           end
473
 
474
       `AND_IMM:
475
           begin
476
           n_length                             = 2'b10;
477
           n_immediate                          = 1'b1;
478
           n_alu_mode                           = `alu_mode_and;
479
           n_alu_op_a_sel                       = `alu_op_a_acc;
480
           n_alu_op_b_sel                       = `alu_op_b_imm;
481
           n_alu_op_b_inv                       = 1'b0;
482
           n_alu_op_c_sel                       = `alu_op_c_00;
483
           n_alu_status_update                  = `alu_status_update_nz;
484
           n_dest                               = `dest_alu_a;
485
           end
486
 
487
       `CMP_IMM:
488
           begin
489
           n_length                             = 2'b10;
490
           n_immediate                          = 1'b1;
491
           n_alu_mode                           = `alu_mode_add;
492
           n_alu_op_a_sel                       = `alu_op_a_acc;
493
           n_alu_op_b_sel                       = `alu_op_b_imm;
494
           n_alu_op_b_inv                       = 1'b1;
495
           n_alu_op_c_sel                       = `alu_op_c_01;
496
           n_alu_status_update                  = `alu_status_update_nzc;
497
           n_dest                               = `dest_none;
498
           end
499
 
500
       `CPX_IMM:
501
           begin
502
           n_length                             = 2'b10;
503
           n_immediate                          = 1'b1;
504
           n_alu_mode                           = `alu_mode_add;
505
           n_alu_op_a_sel                       = `alu_op_a_x;
506
           n_alu_op_b_sel                       = `alu_op_b_imm;
507
           n_alu_op_b_inv                       = 1'b1;
508
           n_alu_op_c_sel                       = `alu_op_c_01;
509
           n_alu_status_update                  = `alu_status_update_nzc;
510
           n_dest                               = `dest_none;
511
           end
512
 
513
       `CPY_IMM:
514
           begin
515
           n_length                             = 2'b10;
516
           n_immediate                          = 1'b1;
517
           n_alu_mode                           = `alu_mode_add;
518
           n_alu_op_a_sel                       = `alu_op_a_y;
519
           n_alu_op_b_sel                       = `alu_op_b_imm;
520
           n_alu_op_b_inv                       = 1'b1;
521
           n_alu_op_c_sel                       = `alu_op_c_01;
522
           n_alu_status_update                  = `alu_status_update_nzc;
523
           n_dest                               = `dest_none;
524
           end
525
 
526
       `EOR_IMM:
527
           begin
528
           n_length                             = 2'b10;
529
           n_immediate                          = 1'b1;
530
           n_alu_mode                           = `alu_mode_eor;
531
           n_alu_op_a_sel                       = `alu_op_a_acc;
532
           n_alu_op_b_sel                       = `alu_op_b_imm;
533
           n_alu_op_b_inv                       = 1'b0;
534
           n_alu_op_c_sel                       = `alu_op_c_00;
535
           n_alu_status_update                  = `alu_status_update_nz;
536
           n_dest                               = `dest_alu_a;
537
           end
538
 
539
       `LDA_IMM:
540
           begin
541
           n_length                             = 2'b10;
542
           n_immediate                          = 1'b1;
543
           n_alu_mode                           = `alu_mode_add;
544
           n_alu_op_a_sel                       = `alu_op_a_00;
545
           n_alu_op_b_sel                       = `alu_op_b_imm;
546
           n_alu_op_b_inv                       = 1'b0;
547
           n_alu_op_c_sel                       = `alu_op_c_00;
548
           n_alu_status_update                  = `alu_status_update_nz;
549
           n_dest                               = `dest_alu_a;
550
           end
551
 
552
       `LDX_IMM:
553
           begin
554
           n_length                             = 2'b10;
555
           n_immediate                          = 1'b1;
556
           n_alu_mode                           = `alu_mode_add;
557
           n_alu_op_a_sel                       = `alu_op_a_00;
558
           n_alu_op_b_sel                       = `alu_op_b_imm;
559
           n_alu_op_b_inv                       = 1'b0;
560
           n_alu_op_c_sel                       = `alu_op_c_00;
561
           n_alu_status_update                  = `alu_status_update_nz;
562
           n_dest                               = `dest_alu_x;
563
           end
564
 
565
       `LDY_IMM:
566
           begin
567
           n_length                             = 2'b10;
568
           n_immediate                          = 1'b1;
569
           n_alu_mode                           = `alu_mode_add;
570
           n_alu_op_a_sel                       = `alu_op_a_00;
571
           n_alu_op_b_sel                       = `alu_op_b_imm;
572
           n_alu_op_b_inv                       = 1'b0;
573
           n_alu_op_c_sel                       = `alu_op_c_00;
574
           n_alu_status_update                  = `alu_status_update_nz;
575
           n_dest                               = `dest_alu_y;
576
           end
577
 
578
       `ORA_IMM:
579
           begin
580
           n_length                             = 2'b10;
581
           n_immediate                          = 1'b1;
582
           n_alu_mode                           = `alu_mode_orr;
583
           n_alu_op_a_sel                       = `alu_op_a_acc;
584
           n_alu_op_b_sel                       = `alu_op_b_imm;
585
           n_alu_op_b_inv                       = 1'b0;
586
           n_alu_op_c_sel                       = `alu_op_c_00;
587
           n_alu_status_update                  = `alu_status_update_nz;
588
           n_dest                               = `dest_alu_a;
589
           end
590
 
591
       `SBC_IMM:
592
           begin
593
           n_length                             = 2'b10;
594
           n_immediate                          = 1'b1;
595
           n_alu_mode                           = `alu_mode_add;
596
           n_alu_op_a_sel                       = `alu_op_a_acc;
597
           n_alu_op_b_sel                       = `alu_op_b_imm;
598
           n_alu_op_b_inv                       = 1'b1;
599
           n_alu_op_c_sel                       = `alu_op_c_cin;
600
           n_alu_status_update                  = `alu_status_update_nzcv;
601
           n_dest                               = `dest_alu_a;
602
           end
603
 
604
// zero_page
605
 
606
 
607
       `ADC_ZPG:
608
           begin
609
           n_length                             = 2'b10;
610
           n_zero_page                          = 1'b1;
611
           n_ins_type                           = `ins_type_read;
612
           n_alu_mode                           = `alu_mode_add;
613
           n_alu_op_a_sel                       = `alu_op_a_acc;
614
           n_alu_op_b_sel                       = `alu_op_b_opnd;
615
           n_alu_op_b_inv                       = 1'b0;
616
           n_alu_op_c_sel                       = `alu_op_c_cin;
617
           n_alu_status_update                  = `alu_status_update_nzcv;
618
           n_dest                               = `dest_alu_a;
619
           end
620
 
621
 
622
       `AND_ZPG:
623
           begin
624
           n_length                             = 2'b10;
625
           n_zero_page                          = 1'b1;
626
           n_ins_type                           = `ins_type_read;
627
           n_alu_mode                           = `alu_mode_and;
628
           n_alu_op_a_sel                       = `alu_op_a_acc;
629
           n_alu_op_b_sel                       = `alu_op_b_opnd;
630
           n_alu_op_b_inv                       = 1'b0;
631
           n_alu_op_c_sel                       = `alu_op_c_00;
632
           n_alu_status_update                  = `alu_status_update_nz;
633
           n_dest                               = `dest_alu_a;
634
           end
635
 
636
 
637
       `ASL_ZPG:
638
           begin
639
           n_length                             = 2'b10;
640
           n_zero_page                          = 1'b1;
641
           n_ins_type                           = `ins_type_rmw;
642
           n_alu_mode                           = `alu_mode_sfl;
643
           n_alu_op_a_sel                       = `alu_op_a_00;
644
           n_alu_op_b_sel                       = `alu_op_b_opnd;
645
           n_alu_op_b_inv                       = 1'b0;
646
           n_alu_op_c_sel                       = `alu_op_c_00;
647
           n_alu_status_update                  = `alu_status_update_nzc;
648
           n_dest                               = `dest_mem;
649
           end
650
 
651
 
652
       `BIT_ZPG:
653
           begin
654
           n_length                             = 2'b10;
655
           n_zero_page                          = 1'b1;
656
           n_ins_type                           = `ins_type_read;
657
           n_alu_mode                           = `alu_mode_and;
658
           n_alu_op_a_sel                       = `alu_op_a_acc;
659
           n_alu_op_b_sel                       = `alu_op_b_opnd;
660
           n_alu_op_b_inv                       = 1'b0;
661
           n_alu_op_c_sel                       = `alu_op_c_00;
662
           n_alu_status_update                  = `alu_status_update_z67;
663
           n_dest                               = `dest_mem;
664
           end
665
 
666
 
667
       `CMP_ZPG:
668
           begin
669
           n_length                             = 2'b10;
670
           n_zero_page                          = 1'b1;
671
           n_ins_type                           = `ins_type_read;
672
           n_alu_mode                           = `alu_mode_add;
673
           n_alu_op_a_sel                       = `alu_op_a_acc;
674
           n_alu_op_b_sel                       = `alu_op_b_opnd;
675
           n_alu_op_b_inv                       = 1'b1;
676
           n_alu_op_c_sel                       = `alu_op_c_01;
677
           n_alu_status_update                  = `alu_status_update_nzc;
678
           n_dest                               = `dest_mem;
679
           end
680
 
681
 
682
       `CPX_ZPG:
683
           begin
684
           n_length                             = 2'b10;
685
           n_zero_page                          = 1'b1;
686
           n_ins_type                           = `ins_type_read;
687
           n_alu_mode                           = `alu_mode_add;
688
           n_alu_op_a_sel                       = `alu_op_a_x;
689
           n_alu_op_b_sel                       = `alu_op_b_opnd;
690
           n_alu_op_b_inv                       = 1'b1;
691
           n_alu_op_c_sel                       = `alu_op_c_01;
692
           n_alu_status_update                  = `alu_status_update_nzc;
693
           n_dest                               = `dest_mem;
694
           end
695
 
696
 
697
       `CPY_ZPG:
698
           begin
699
           n_length                             = 2'b10;
700
           n_zero_page                          = 1'b1;
701
           n_ins_type                           = `ins_type_read;
702
           n_alu_mode                           = `alu_mode_add;
703
           n_alu_op_a_sel                       = `alu_op_a_y;
704
           n_alu_op_b_sel                       = `alu_op_b_opnd;
705
           n_alu_op_b_inv                       = 1'b1;
706
           n_alu_op_c_sel                       = `alu_op_c_01;
707
           n_alu_status_update                  = `alu_status_update_nzc;
708
           n_dest                               = `dest_mem;
709
           end
710
 
711
 
712
       `DEC_ZPG:
713
           begin
714
           n_length                             = 2'b10;
715
           n_zero_page                          = 1'b1;
716
           n_ins_type                           = `ins_type_rmw;
717
           n_alu_mode                           = `alu_mode_add;
718
           n_alu_op_a_sel                       = `alu_op_a_ff;
719
           n_alu_op_b_sel                       = `alu_op_b_opnd;
720
           n_alu_op_b_inv                       = 1'b0;
721
           n_alu_op_c_sel                       = `alu_op_c_00;
722
           n_alu_status_update                  = `alu_status_update_nz;
723
           n_dest                               = `dest_mem;
724
           end
725
 
726
 
727
       `EOR_ZPG:
728
           begin
729
           n_length                             = 2'b10;
730
           n_zero_page                          = 1'b1;
731
           n_ins_type                           = `ins_type_read;
732
           n_alu_mode                           = `alu_mode_eor;
733
           n_alu_op_a_sel                       = `alu_op_a_acc;
734
           n_alu_op_b_sel                       = `alu_op_b_opnd;
735
           n_alu_op_b_inv                       = 1'b0;
736
           n_alu_op_c_sel                       = `alu_op_c_00;
737
           n_alu_status_update                  = `alu_status_update_nz;
738
           n_dest                               = `dest_mem;
739
           end
740
 
741
 
742
       `INC_ZPG:
743
           begin
744
           n_length                             = 2'b10;
745
           n_zero_page                          = 1'b1;
746
           n_ins_type                           = `ins_type_rmw;
747
           n_alu_mode                           = `alu_mode_add;
748
           n_alu_op_a_sel                       = `alu_op_a_00;
749
           n_alu_op_b_sel                       = `alu_op_b_opnd;
750
           n_alu_op_b_inv                       = 1'b0;
751
           n_alu_op_c_sel                       = `alu_op_c_01;
752
           n_alu_status_update                  = `alu_status_update_nz;
753
           n_dest                               = `dest_mem;
754
           end
755
 
756
 
757
       `LDA_ZPG:
758
           begin
759
           n_length                             = 2'b10;
760
           n_zero_page                          = 1'b1;
761
           n_ins_type                           = `ins_type_read;
762
           n_alu_mode                           = `alu_mode_add;
763
           n_alu_op_a_sel                       = `alu_op_a_00;
764
           n_alu_op_b_sel                       = `alu_op_b_opnd;
765
           n_alu_op_b_inv                       = 1'b0;
766
           n_alu_op_c_sel                       = `alu_op_c_00;
767
           n_alu_status_update                  = `alu_status_update_nz;
768
           n_dest                               = `dest_alu_a;
769
           end
770
 
771
 
772
       `LDX_ZPG:
773
           begin
774
           n_length                             = 2'b10;
775
           n_zero_page                          = 1'b1;
776
           n_ins_type                           = `ins_type_read;
777
           n_alu_mode                           = `alu_mode_add;
778
           n_alu_op_a_sel                       = `alu_op_a_00;
779
           n_alu_op_b_sel                       = `alu_op_b_opnd;
780
           n_alu_op_b_inv                       = 1'b0;
781
           n_alu_op_c_sel                       = `alu_op_c_00;
782
           n_alu_status_update                  = `alu_status_update_nz;
783
           n_dest                               = `dest_alu_x;
784
           end
785
 
786
 
787
       `LDY_ZPG:
788
           begin
789
           n_length                             = 2'b10;
790
           n_zero_page                          = 1'b1;
791
           n_ins_type                           = `ins_type_read;
792
           n_alu_mode                           = `alu_mode_add;
793
           n_alu_op_a_sel                       = `alu_op_a_00;
794
           n_alu_op_b_sel                       = `alu_op_b_opnd;
795
           n_alu_op_b_inv                       = 1'b0;
796
           n_alu_op_c_sel                       = `alu_op_c_00;
797
           n_alu_status_update                  = `alu_status_update_nz;
798
           n_dest                               = `dest_alu_y;
799
           end
800
 
801
 
802
       `LSR_ZPG:
803
           begin
804
           n_length                             = 2'b10;
805
           n_zero_page                          = 1'b1;
806
           n_ins_type                           = `ins_type_rmw;
807
           n_alu_mode                           = `alu_mode_sfr;
808
           n_alu_op_a_sel                       = `alu_op_a_00;
809
           n_alu_op_b_sel                       = `alu_op_b_opnd;
810
           n_alu_op_b_inv                       = 1'b0;
811
           n_alu_op_c_sel                       = `alu_op_c_00;
812
           n_alu_status_update                  = `alu_status_update_nzc;
813
           n_dest                               = `dest_mem;
814
           end
815
 
816
 
817
       `ORA_ZPG:
818
           begin
819
           n_length                             = 2'b10;
820
           n_zero_page                          = 1'b1;
821
           n_ins_type                           = `ins_type_read;
822
           n_alu_mode                           = `alu_mode_orr;
823
           n_alu_op_a_sel                       = `alu_op_a_acc;
824
           n_alu_op_b_sel                       = `alu_op_b_opnd;
825
           n_alu_op_b_inv                       = 1'b0;
826
           n_alu_op_c_sel                       = `alu_op_c_00;
827
           n_alu_status_update                  = `alu_status_update_nz;
828
           n_dest                               = `dest_mem;
829
           end
830
 
831
 
832
       `ROL_ZPG:
833
           begin
834
           n_length                             = 2'b10;
835
           n_zero_page                          = 1'b1;
836
           n_ins_type                           = `ins_type_rmw;
837
           n_alu_mode                           = `alu_mode_sfl;
838
           n_alu_op_a_sel                       = `alu_op_a_00;
839
           n_alu_op_b_sel                       = `alu_op_b_opnd;
840
           n_alu_op_b_inv                       = 1'b0;
841
           n_alu_op_c_sel                       = `alu_op_c_cin;
842
           n_alu_status_update                  = `alu_status_update_nzc;
843
           n_dest                               = `dest_mem;
844
           end
845
 
846
 
847
       `ROR_ZPG:
848
           begin
849
           n_length                             = 2'b10;
850
           n_zero_page                          = 1'b1;
851
           n_ins_type                           = `ins_type_rmw;
852
           n_alu_mode                           = `alu_mode_sfr;
853
           n_alu_op_a_sel                       = `alu_op_a_00;
854
           n_alu_op_b_sel                       = `alu_op_b_opnd;
855
           n_alu_op_b_inv                       = 1'b0;
856
           n_alu_op_c_sel                       = `alu_op_c_cin;
857
           n_alu_status_update                  = `alu_status_update_nzc;
858
           n_dest                               = `dest_mem;
859
           end
860
 
861
 
862
       `SBC_ZPG:
863
           begin
864
           n_length                             = 2'b10;
865
           n_zero_page                          = 1'b1;
866
           n_ins_type                           = `ins_type_read;
867
           n_alu_mode                           = `alu_mode_add;
868
           n_alu_op_a_sel                       = `alu_op_a_acc;
869
           n_alu_op_b_sel                       = `alu_op_b_opnd;
870
           n_alu_op_b_inv                       = 1'b1;
871
           n_alu_op_c_sel                       = `alu_op_c_cin;
872
           n_alu_status_update                  = `alu_status_update_nzcv;
873
           n_dest                               = `dest_mem;
874
           end
875
 
876
 
877
       `STA_ZPG:
878
           begin
879
           n_length                             = 2'b10;
880
           n_zero_page                          = 1'b1;
881
           n_ins_type                           = `ins_type_write;
882
           n_alu_mode                           = `alu_mode_add;
883
           n_alu_op_a_sel                       = `alu_op_a_acc;
884
           n_alu_op_b_inv                       = 1'b0;
885
           n_alu_op_c_sel                       = `alu_op_c_00;
886
           n_alu_status_update                  = `alu_status_update_none;
887
           n_dest                               = `dest_mem;
888
           end
889
 
890
 
891
       `STX_ZPG:
892
           begin
893
           n_length                             = 2'b10;
894
           n_zero_page                          = 1'b1;
895
           n_alu_mode                           = `alu_mode_add;
896
           n_alu_op_a_sel                       = `alu_op_a_x;
897
           n_alu_op_b_inv                       = 1'b0;
898
           n_alu_op_c_sel                       = `alu_op_c_00;
899
           n_alu_status_update                  = `alu_status_update_none;
900
           n_dest                               = `dest_mem;
901
           end
902
 
903
 
904
       `STY_ZPG:
905
           begin
906
           n_length                             = 2'b10;
907
           n_zero_page                          = 1'b1;
908
           n_ins_type                           = `ins_type_write;
909
           n_alu_mode                           = `alu_mode_add;
910
           n_alu_op_a_sel                       = `alu_op_a_y;
911
           n_alu_op_c_sel                       = `alu_op_c_00;
912
           n_alu_status_update                  = `alu_status_update_none;
913
           n_dest                               = `dest_mem;
914
           end
915
 
916
// zero_page_indexed
917
 
918
 
919
       `ADC_ZPX:
920
           begin
921
           n_length                             = 2'b10;
922
           n_zero_page                          = 1'b1;
923
           n_idx_sel                            = `idx_sel_x;
924
           n_ins_type                           = `ins_type_read;
925
           n_alu_mode                           = `alu_mode_add;
926
           n_alu_op_a_sel                       = `alu_op_a_acc;
927
           n_alu_op_b_sel                       = `alu_op_b_opnd;
928
           n_alu_op_b_inv                       = 1'b0;
929
           n_alu_op_c_sel                       = `alu_op_c_cin;
930
           n_alu_status_update                  = `alu_status_update_nzcv;
931
           n_dest                               = `dest_alu_a;
932
           end
933
 
934
       `AND_ZPX:
935
           begin
936
           n_length                             = 2'b10;
937
           n_zero_page                          = 1'b1;
938
           n_idx_sel                            = `idx_sel_x;
939
           n_ins_type                           = `ins_type_read;
940
           n_alu_mode                           = `alu_mode_and;
941
           n_alu_op_a_sel                       = `alu_op_a_acc;
942
           n_alu_op_b_sel                       = `alu_op_b_opnd;
943
           n_alu_op_b_inv                       = 1'b0;
944
           n_alu_op_c_sel                       = `alu_op_c_00;
945
           n_alu_status_update                  = `alu_status_update_nz;
946
           n_dest                               = `dest_alu_a;
947
           end
948
 
949
       `ASL_ZPX:
950
           begin
951
           n_length                             = 2'b10;
952
           n_zero_page                          = 1'b1;
953
           n_idx_sel                            = `idx_sel_x;
954
           n_ins_type                           = `ins_type_rmw;
955
           n_alu_mode                           = `alu_mode_sfl;
956
           n_alu_op_a_sel                       = `alu_op_a_00;
957
           n_alu_op_b_sel                       = `alu_op_b_opnd;
958
           n_alu_op_b_inv                       = 1'b0;
959
           n_alu_op_c_sel                       = `alu_op_c_00;
960
           n_alu_status_update                  = `alu_status_update_nzc;
961
           n_dest                               = `dest_mem;
962
           end
963
 
964
       `CMP_ZPX:
965
           begin
966
           n_length                             = 2'b10;
967
           n_zero_page                          = 1'b1;
968
           n_idx_sel                            = `idx_sel_x;
969
           n_ins_type                           = `ins_type_read;
970
           n_alu_mode                           = `alu_mode_add;
971
           n_alu_op_a_sel                       = `alu_op_a_acc;
972
           n_alu_op_b_sel                       = `alu_op_b_opnd;
973
           n_alu_op_b_inv                       = 1'b1;
974
           n_alu_op_c_sel                       = `alu_op_c_01;
975
           n_alu_status_update                  = `alu_status_update_nzc;
976
           n_dest                               = `dest_none;
977
           end
978
 
979
       `DEC_ZPX:
980
           begin
981
           n_length                             = 2'b10;
982
           n_zero_page                          = 1'b1;
983
           n_idx_sel                            = `idx_sel_x;
984
           n_ins_type                           = `ins_type_rmw;
985
           n_alu_mode                           = `alu_mode_add;
986
           n_alu_op_a_sel                       = `alu_op_a_ff;
987
           n_alu_op_b_sel                       = `alu_op_b_opnd;
988
           n_alu_op_b_inv                       = 1'b0;
989
           n_alu_op_c_sel                       = `alu_op_c_00;
990
           n_alu_status_update                  = `alu_status_update_nz;
991
           n_dest                               = `dest_mem;
992
           end
993
 
994
       `EOR_ZPX:
995
           begin
996
           n_length                             = 2'b10;
997
           n_zero_page                          = 1'b1;
998
           n_idx_sel                            = `idx_sel_x;
999
           n_ins_type                           = `ins_type_read;
1000
           n_alu_mode                           = `alu_mode_eor;
1001
           n_alu_op_a_sel                       = `alu_op_a_acc;
1002
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1003
           n_alu_op_b_inv                       = 1'b0;
1004
           n_alu_op_c_sel                       = `alu_op_c_00;
1005
           n_alu_status_update                  = `alu_status_update_nz;
1006
           n_dest                               = `dest_mem;
1007
           end
1008
 
1009
       `INC_ZPX:
1010
           begin
1011
           n_length                             = 2'b10;
1012
           n_zero_page                          = 1'b1;
1013
           n_idx_sel                            = `idx_sel_x;
1014
           n_ins_type                           = `ins_type_rmw;
1015
           n_alu_mode                           = `alu_mode_add;
1016
           n_alu_op_a_sel                       = `alu_op_a_00;
1017
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1018
           n_alu_op_b_inv                       = 1'b0;
1019
           n_alu_op_c_sel                       = `alu_op_c_01;
1020
           n_alu_status_update                  = `alu_status_update_nz;
1021
           n_dest                               = `dest_mem;
1022
           end
1023
 
1024
       `LDA_ZPX:
1025
           begin
1026
           n_length                             = 2'b10;
1027
           n_zero_page                          = 1'b1;
1028
           n_idx_sel                            = `idx_sel_x;
1029
           n_ins_type                           = `ins_type_rmw;
1030
           n_alu_mode                           = `alu_mode_add;
1031
           n_alu_op_a_sel                       = `alu_op_a_00;
1032
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1033
           n_alu_op_b_inv                       = 1'b0;
1034
           n_alu_op_c_sel                       = `alu_op_c_00;
1035
           n_alu_status_update                  = `alu_status_update_nz;
1036
           n_dest                               = `dest_alu_a;
1037
           end
1038
 
1039
       `LDY_ZPX:
1040
           begin
1041
           n_length                             = 2'b10;
1042
           n_zero_page                          = 1'b1;
1043
           n_idx_sel                            = `idx_sel_x;
1044
           n_ins_type                           = `ins_type_read;
1045
           n_alu_mode                           = `alu_mode_add;
1046
           n_alu_op_a_sel                       = `alu_op_a_00;
1047
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1048
           n_alu_op_b_inv                       = 1'b0;
1049
           n_alu_op_c_sel                       = `alu_op_c_00;
1050
           n_alu_status_update                  = `alu_status_update_nz;
1051
           n_dest                               = `dest_alu_y;
1052
           end
1053
 
1054
       `LSR_ZPX:
1055
           begin
1056
           n_length                             = 2'b10;
1057
           n_zero_page                          = 1'b1;
1058
           n_idx_sel                            = `idx_sel_x;
1059
           n_ins_type                           = `ins_type_rmw;
1060
           n_alu_mode                           = `alu_mode_sfr;
1061
           n_alu_op_a_sel                       = `alu_op_a_00;
1062
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1063
           n_alu_op_b_inv                       = 1'b0;
1064
           n_alu_op_c_sel                       = `alu_op_c_00;
1065
           n_alu_status_update                  = `alu_status_update_nzc;
1066
           n_dest                               = `dest_mem;
1067
           end
1068
 
1069
       `ORA_ZPX:
1070
           begin
1071
           n_length                             = 2'b10;
1072
           n_zero_page                          = 1'b1;
1073
           n_idx_sel                            = `idx_sel_x;
1074
           n_ins_type                           = `ins_type_read;
1075
           n_alu_mode                           = `alu_mode_orr;
1076
           n_alu_op_a_sel                       = `alu_op_a_acc;
1077
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1078
           n_alu_op_b_inv                       = 1'b0;
1079
           n_alu_op_c_sel                       = `alu_op_c_00;
1080
           n_alu_status_update                  = `alu_status_update_nz;
1081
           n_dest                               = `dest_mem;
1082
           end
1083
 
1084
       `ROL_ZPX:
1085
           begin
1086
           n_length                             = 2'b10;
1087
           n_zero_page                          = 1'b1;
1088
           n_idx_sel                            = `idx_sel_x;
1089
           n_ins_type                           = `ins_type_rmw;
1090
           n_alu_mode                           = `alu_mode_sfl;
1091
           n_alu_op_a_sel                       = `alu_op_a_00;
1092
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1093
           n_alu_op_b_inv                       = 1'b0;
1094
           n_alu_op_c_sel                       = `alu_op_c_cin;
1095
           n_alu_status_update                  = `alu_status_update_nzc;
1096
           n_dest                               = `dest_mem;
1097
           end
1098
 
1099
       `ROR_ZPX:
1100
           begin
1101
           n_length                             = 2'b10;
1102
           n_zero_page                          = 1'b1;
1103
           n_idx_sel                            = `idx_sel_x;
1104
           n_ins_type                           = `ins_type_rmw;
1105
           n_alu_mode                           = `alu_mode_sfr;
1106
           n_alu_op_a_sel                       = `alu_op_a_00;
1107
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1108
           n_alu_op_b_inv                       = 1'b0;
1109
           n_alu_op_c_sel                       = `alu_op_c_cin;
1110
           n_alu_status_update                  = `alu_status_update_nzc;
1111
           n_dest                               = `dest_mem;
1112
           end
1113
 
1114
       `SBC_ZPX:
1115
           begin
1116
           n_length                             = 2'b10;
1117
           n_zero_page                          = 1'b1;
1118
           n_idx_sel                            = `idx_sel_x;
1119
           n_ins_type                           = `ins_type_read;
1120
           n_alu_mode                           = `alu_mode_add;
1121
           n_alu_op_a_sel                       = `alu_op_a_acc;
1122
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1123
           n_alu_op_b_inv                       = 1'b1;
1124
           n_alu_op_c_sel                       = `alu_op_c_cin;
1125
           n_alu_status_update                  = `alu_status_update_nzcv;
1126
           n_dest                               = `dest_mem;
1127
           end
1128
 
1129
       `STA_ZPX:
1130
           begin
1131
           n_length                             = 2'b10;
1132
           n_zero_page                          = 1'b1;
1133
           n_idx_sel                            = `idx_sel_x;
1134
           n_ins_type                           = `ins_type_write;
1135
           n_alu_mode                           = `alu_mode_add;
1136
           n_alu_op_a_sel                       = `alu_op_a_acc;
1137
           n_alu_op_b_inv                       = 1'b0;
1138
           n_alu_op_c_sel                       = `alu_op_c_00;
1139
           n_alu_status_update                  = `alu_status_update_none;
1140
           n_dest                               = `dest_mem;
1141
           end
1142
 
1143
       `STY_ZPX:
1144
           begin
1145
           n_length                             = 2'b10;
1146
           n_zero_page                          = 1'b1;
1147
           n_idx_sel                            = `idx_sel_x;
1148
           n_ins_type                           = `ins_type_write;
1149
           n_alu_mode                           = `alu_mode_add;
1150
           n_alu_op_a_sel                       = `alu_op_a_y;
1151
           n_alu_op_c_sel                       = `alu_op_c_00;
1152
           n_alu_status_update                  = `alu_status_update_none;
1153
           n_dest                               = `dest_mem;
1154
           end
1155
 
1156
 
1157
       `LDX_ZPY:
1158
           begin
1159
           n_length                             = 2'b10;
1160
           n_zero_page                          = 1'b1;
1161
           n_idx_sel                            = `idx_sel_y;
1162
           n_ins_type                           = `ins_type_read;
1163
           n_alu_mode                           = `alu_mode_add;
1164
           n_alu_op_a_sel                       = `alu_op_a_00;
1165
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1166
           n_alu_op_b_inv                       = 1'b0;
1167
           n_alu_op_c_sel                       = `alu_op_c_00;
1168
           n_alu_status_update                  = `alu_status_update_nz;
1169
           n_dest                               = `dest_alu_x;
1170
           end
1171
 
1172
       `STX_ZPY:
1173
           begin
1174
           n_length                             = 2'b10;
1175
           n_zero_page                          = 1'b1;
1176
           n_idx_sel                            = `idx_sel_y;
1177
           n_ins_type                           = `ins_type_write;
1178
           n_alu_mode                           = `alu_mode_add;
1179
           n_alu_op_a_sel                       = `alu_op_a_x;
1180
           n_alu_op_b_inv                       = 1'b0;
1181
           n_alu_op_c_sel                       = `alu_op_c_00;
1182
           n_alu_status_update                  = `alu_status_update_none;
1183
           n_dest                               = `dest_mem;
1184
           end
1185
 
1186
// Branch
1187
 
1188
       `BCC_REL:
1189
           begin
1190
           n_length                             = 2'b10;
1191
           n_relative                           = 1'b1;
1192
           n_ctrl                               = `ctrl_branch;
1193
           n_brn_enable[`C]                     = 1'b1;
1194
           n_brn_value[`C]                      = 1'b0;
1195
           n_dest                               = `dest_none;
1196
           end
1197
 
1198
 
1199
 
1200
       `BCS_REL:
1201
           begin
1202
           n_length                             = 2'b10;
1203
           n_relative                           = 1'b1;
1204
           n_ctrl                               = `ctrl_branch;
1205
           n_brn_enable[`C]                     = 1'b1;
1206
           n_brn_value[`C]                      = 1'b1;
1207
           n_dest                               = `dest_none;
1208
           end
1209
 
1210
 
1211
       `BNE_REL:
1212
           begin
1213
           n_length                             = 2'b10;
1214
           n_relative                           = 1'b1;
1215
           n_ctrl                               = `ctrl_branch;
1216
           n_brn_enable[`Z]                     = 1'b1;
1217
           n_brn_value[`Z]                      = 1'b0;
1218
           n_dest                               = `dest_none;
1219
           end
1220
 
1221
 
1222
 
1223
       `BEQ_REL:
1224
           begin
1225
           n_length                             = 2'b10;
1226
           n_relative                           = 1'b1;
1227
           n_ctrl                               = `ctrl_branch;
1228
           n_brn_enable[`Z]                     = 1'b1;
1229
           n_brn_value[`Z]                      = 1'b1;
1230
           n_dest                               = `dest_none;
1231
           end
1232
 
1233
 
1234
 
1235
 
1236
 
1237
 
1238
 
1239
       `BPL_REL:
1240
           begin
1241
           n_length                             = 2'b10;
1242
           n_relative                           = 1'b1;
1243
           n_ctrl                               = `ctrl_branch;
1244
           n_brn_enable[`N]                     = 1'b1;
1245
           n_brn_value[`N]                      = 1'b0;
1246
           n_dest                               = `dest_none;
1247
           end
1248
 
1249
 
1250
 
1251
       `BMI_REL:
1252
           begin
1253
           n_length                             = 2'b10;
1254
           n_relative                           = 1'b1;
1255
           n_ctrl                               = `ctrl_branch;
1256
           n_brn_enable[`N]                     = 1'b1;
1257
           n_brn_value[`N]                      = 1'b1;
1258
           n_dest                               = `dest_none;
1259
           end
1260
 
1261
 
1262
 
1263
       `BVC_REL:
1264
           begin
1265
           n_length                             = 2'b10;
1266
           n_relative                           = 1'b1;
1267
           n_ctrl                               = `ctrl_branch;
1268
           n_brn_enable[`V]                     = 1'b1;
1269
           n_brn_value[`V]                      = 1'b0;
1270
           n_dest                               = `dest_none;
1271
           end
1272
 
1273
 
1274
 
1275
       `BVS_REL:
1276
           begin
1277
           n_length                             = 2'b10;
1278
           n_relative                           = 1'b1;
1279
           n_ctrl                               = `ctrl_branch;
1280
           n_brn_enable[`V]                     = 1'b1;
1281
           n_brn_value[`V]                      = 1'b1;
1282
           n_dest                               = `dest_none;
1283
           end
1284
 
1285
// absolute
1286
 
1287
       `ADC_ABS:
1288
           begin
1289
           n_length                             = 2'b11;
1290
           n_absolute                           = 1'b1;
1291
           n_ins_type                           = `ins_type_read;
1292
           n_alu_mode                           = `alu_mode_add;
1293
           n_alu_op_a_sel                       = `alu_op_a_acc;
1294
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1295
           n_alu_op_b_inv                       = 1'b0;
1296
           n_alu_op_c_sel                       = `alu_op_c_cin;
1297
           n_alu_status_update                  = `alu_status_update_nzcv;
1298
           n_dest                               = `dest_alu_a;
1299
           end
1300
 
1301
       `AND_ABS:
1302
           begin
1303
           n_length                             = 2'b11;
1304
           n_absolute                           = 1'b1;
1305
           n_ins_type                           = `ins_type_read;
1306
           n_alu_mode                           = `alu_mode_and;
1307
           n_alu_op_a_sel                       = `alu_op_a_acc;
1308
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1309
           n_alu_op_b_inv                       = 1'b0;
1310
           n_alu_op_c_sel                       = `alu_op_c_00;
1311
           n_alu_status_update                  = `alu_status_update_nz;
1312
           n_dest                               = `dest_alu_a;
1313
           end
1314
 
1315
       `ASL_ABS:
1316
           begin
1317
           n_length                             = 2'b11;
1318
           n_absolute                           = 1'b1;
1319
           n_ins_type                           = `ins_type_rmw;
1320
           n_alu_mode                           = `alu_mode_sfl;
1321
           n_alu_op_a_sel                       = `alu_op_a_00;
1322
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1323
           n_alu_op_b_inv                       = 1'b0;
1324
           n_alu_op_c_sel                       = `alu_op_c_00;
1325
           n_alu_status_update                  = `alu_status_update_nzc;
1326
           n_dest                               = `dest_mem;
1327
           end
1328
 
1329
       `BIT_ABS:
1330
           begin
1331
           n_length                             = 2'b11;
1332
           n_absolute                           = 1'b1;
1333
           n_ins_type                           = `ins_type_read;
1334
           n_alu_mode                           = `alu_mode_and;
1335
           n_alu_op_a_sel                       = `alu_op_a_acc;
1336
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1337
           n_alu_op_b_inv                       = 1'b0;
1338
           n_alu_op_c_sel                       = `alu_op_c_00;
1339
           n_alu_status_update                  = `alu_status_update_z67;
1340
           n_dest                               = `dest_none;
1341
           end
1342
 
1343
       `CMP_ABS:
1344
           begin
1345
           n_length                             = 2'b11;
1346
           n_absolute                           = 1'b1;
1347
           n_ins_type                           = `ins_type_read;
1348
           n_alu_mode                           = `alu_mode_add;
1349
           n_alu_op_a_sel                       = `alu_op_a_acc;
1350
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1351
           n_alu_op_b_inv                       = 1'b1;
1352
           n_alu_op_c_sel                       = `alu_op_c_01;
1353
           n_alu_status_update                  = `alu_status_update_nzc;
1354
           n_dest                               = `dest_none;
1355
           end
1356
 
1357
       `CPX_ABS:
1358
           begin
1359
           n_length                             = 2'b11;
1360
           n_absolute                           = 1'b1;
1361
           n_ins_type                           = `ins_type_read;
1362
           n_alu_mode                           = `alu_mode_add;
1363
           n_alu_op_a_sel                       = `alu_op_a_x;
1364
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1365
           n_alu_op_b_inv                       = 1'b1;
1366
           n_alu_op_c_sel                       = `alu_op_c_01;
1367
           n_alu_status_update                  = `alu_status_update_nzc;
1368
           n_dest                               = `dest_none;
1369
           end
1370
 
1371
       `CPY_ABS:
1372
           begin
1373
           n_length                             = 2'b11;
1374
           n_absolute                           = 1'b1;
1375
           n_ins_type                           = `ins_type_read;
1376
           n_alu_mode                           = `alu_mode_add;
1377
           n_alu_op_a_sel                       = `alu_op_a_y;
1378
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1379
           n_alu_op_b_inv                       = 1'b1;
1380
           n_alu_op_c_sel                       = `alu_op_c_01;
1381
           n_alu_status_update                  = `alu_status_update_nzc;
1382
           n_dest                               = `dest_none;
1383
           end
1384
 
1385
       `DEC_ABS:
1386
           begin
1387
           n_length                             = 2'b11;
1388
           n_absolute                           = 1'b1;
1389
           n_ins_type                           = `ins_type_rmw;
1390
           n_alu_mode                           = `alu_mode_add;
1391
           n_alu_op_a_sel                       = `alu_op_a_ff;
1392
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1393
           n_alu_op_b_inv                       = 1'b0;
1394
           n_alu_op_c_sel                       = `alu_op_c_00;
1395
           n_alu_status_update                  = `alu_status_update_nz;
1396
           n_dest                               = `dest_mem;
1397
           end
1398
 
1399
       `EOR_ABS:
1400
           begin
1401
           n_length                             = 2'b11;
1402
           n_absolute                           = 1'b1;
1403
           n_ins_type                           = `ins_type_read;
1404
           n_alu_mode                           = `alu_mode_eor;
1405
           n_alu_op_a_sel                       = `alu_op_a_acc;
1406
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1407
           n_alu_op_b_inv                       = 1'b0;
1408
           n_alu_op_c_sel                       = `alu_op_c_00;
1409
           n_alu_status_update                  = `alu_status_update_nz;
1410
           n_dest                               = `dest_alu_a;
1411
          end
1412
 
1413
       `INC_ABS:
1414
           begin
1415
           n_length                             = 2'b11;
1416
           n_absolute                           = 1'b1;
1417
           n_ins_type                           = `ins_type_rmw;
1418
           n_alu_mode                           = `alu_mode_add;
1419
           n_alu_op_a_sel                       = `alu_op_a_00;
1420
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1421
           n_alu_op_b_inv                       = 1'b0;
1422
           n_alu_op_c_sel                       = `alu_op_c_01;
1423
           n_alu_status_update                  = `alu_status_update_nz;
1424
           n_dest                               = `dest_mem;
1425
           end
1426
 
1427
       `LDA_ABS:
1428
           begin
1429
           n_length                             = 2'b11;
1430
           n_absolute                           = 1'b1;
1431
           n_ins_type                           = `ins_type_read;
1432
           n_alu_mode                           = `alu_mode_add;
1433
           n_alu_op_a_sel                       = `alu_op_a_00;
1434
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1435
           n_alu_op_b_inv                       = 1'b0;
1436
           n_alu_op_c_sel                       = `alu_op_c_00;
1437
           n_alu_status_update                  = `alu_status_update_nz;
1438
           n_dest                               = `dest_alu_a;
1439
           end
1440
 
1441
       `LDX_ABS:
1442
           begin
1443
           n_length                             = 2'b11;
1444
           n_absolute                           = 1'b1;
1445
           n_ins_type                           = `ins_type_read;
1446
           n_alu_mode                           = `alu_mode_add;
1447
           n_alu_op_a_sel                       = `alu_op_a_00;
1448
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1449
           n_alu_op_b_inv                       = 1'b0;
1450
           n_alu_op_c_sel                       = `alu_op_c_00;
1451
           n_alu_status_update                  = `alu_status_update_nz;
1452
           n_dest                               = `dest_alu_x;
1453
           end
1454
 
1455
       `LDY_ABS:
1456
           begin
1457
           n_length                             = 2'b11;
1458
           n_absolute                           = 1'b1;
1459
           n_ins_type                           = `ins_type_read;
1460
           n_alu_mode                           = `alu_mode_add;
1461
           n_alu_op_a_sel                       = `alu_op_a_00;
1462
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1463
           n_alu_op_b_inv                       = 1'b0;
1464
           n_alu_op_c_sel                       = `alu_op_c_00;
1465
           n_alu_status_update                  = `alu_status_update_nz;
1466
           n_dest                               = `dest_alu_y;
1467
           end
1468
 
1469
       `LSR_ABS:
1470
           begin
1471
           n_length                             = 2'b11;
1472
           n_absolute                           = 1'b1;
1473
           n_ins_type                           = `ins_type_rmw;
1474
           n_alu_mode                           = `alu_mode_sfr;
1475
           n_alu_op_a_sel                       = `alu_op_a_00;
1476
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1477
           n_alu_op_b_inv                       = 1'b0;
1478
           n_alu_op_c_sel                       = `alu_op_c_00;
1479
           n_alu_status_update                  = `alu_status_update_nzc;
1480
           n_dest                               = `dest_mem;
1481
           end
1482
 
1483
       `ORA_ABS:
1484
           begin
1485
           n_length                             = 2'b11;
1486
           n_absolute                           = 1'b1;
1487
           n_ins_type                           = `ins_type_read;
1488
           n_alu_mode                           = `alu_mode_orr;
1489
           n_alu_op_a_sel                       = `alu_op_a_acc;
1490
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1491
           n_alu_op_b_inv                       = 1'b0;
1492
           n_alu_op_c_sel                       = `alu_op_c_00;
1493
           n_alu_status_update                  = `alu_status_update_nz;
1494
           n_dest                               = `dest_alu_a;
1495
           end
1496
 
1497
       `ROL_ABS:
1498
           begin
1499
           n_length                             = 2'b11;
1500
           n_absolute                           = 1'b1;
1501
           n_ins_type                           = `ins_type_rmw;
1502
           n_alu_mode                           = `alu_mode_sfl;
1503
           n_alu_op_a_sel                       = `alu_op_a_00;
1504
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1505
           n_alu_op_b_inv                       = 1'b0;
1506
           n_alu_op_c_sel                       = `alu_op_c_cin;
1507
           n_alu_status_update                  = `alu_status_update_nzc;
1508
           n_dest                               = `dest_mem;
1509
           end
1510
 
1511
       `ROR_ABS:
1512
           begin
1513
           n_length                             = 2'b11;
1514
           n_absolute                           = 1'b1;
1515
           n_ins_type                           = `ins_type_rmw;
1516
           n_alu_mode                           = `alu_mode_sfr;
1517
           n_alu_op_a_sel                       = `alu_op_a_00;
1518
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1519
           n_alu_op_b_inv                       = 1'b0;
1520
           n_alu_op_c_sel                       = `alu_op_c_cin;
1521
           n_alu_status_update                  = `alu_status_update_nzc;
1522
           n_dest                               = `dest_mem;
1523
           end
1524
 
1525
       `SBC_ABS:
1526
           begin
1527
           n_length                             = 2'b11;
1528
           n_absolute                           = 1'b1;
1529
           n_ins_type                           = `ins_type_read;
1530
           n_alu_mode                           = `alu_mode_add;
1531
           n_alu_op_a_sel                       = `alu_op_a_acc;
1532
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1533
           n_alu_op_b_inv                       = 1'b1;
1534
           n_alu_op_c_sel                       = `alu_op_c_cin;
1535
           n_alu_status_update                  = `alu_status_update_nzcv;
1536
           n_dest                               = `dest_alu_a;
1537
           end
1538
 
1539
       `STA_ABS:
1540
           begin
1541
           n_length                             = 2'b11;
1542
           n_absolute                           = 1'b1;
1543
           n_ins_type                           = `ins_type_write;
1544
           n_alu_mode                           = `alu_mode_add;
1545
           n_alu_op_a_sel                       = `alu_op_a_acc;
1546
           n_alu_op_b_inv                       = 1'b0;
1547
           n_alu_op_c_sel                       = `alu_op_c_00;
1548
           n_alu_status_update                  = `alu_status_update_none;
1549
           n_dest                               = `dest_mem;
1550
           end
1551
 
1552
       `STX_ABS:
1553
           begin
1554
           n_length                             = 2'b11;
1555
           n_absolute                           = 1'b1;
1556
           n_ins_type                           = `ins_type_write;
1557
           n_alu_mode                           = `alu_mode_add;
1558
           n_alu_op_a_sel                       = `alu_op_a_x;
1559
           n_alu_op_b_inv                       = 1'b0;
1560
           n_alu_op_c_sel                       = `alu_op_c_00;
1561
           n_alu_status_update                  = `alu_status_update_none;
1562
           n_dest                               = `dest_mem;
1563
           end
1564
 
1565
       `STY_ABS:
1566
           begin
1567
           n_length                             = 2'b11;
1568
           n_absolute                           = 1'b1;
1569
           n_ins_type                           = `ins_type_write;
1570
           n_alu_mode                           = `alu_mode_add;
1571
           n_alu_op_a_sel                       = `alu_op_a_y;
1572
           n_alu_op_c_sel                       = `alu_op_c_00;
1573
           n_alu_status_update                  = `alu_status_update_none;
1574
           n_dest                               = `dest_mem;
1575
           end
1576
 
1577
// absolute_indexed
1578
 
1579
       `ADC_ABX:
1580
           begin
1581
           n_length                             = 2'b11;
1582
           n_absolute                           = 1'b1;
1583
           n_idx_sel                            = `idx_sel_x;
1584
           n_ins_type                           = `ins_type_read;
1585
           n_alu_mode                           = `alu_mode_add;
1586
           n_alu_op_a_sel                       = `alu_op_a_acc;
1587
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1588
           n_alu_op_b_inv                       = 1'b0;
1589
           n_alu_op_c_sel                       = `alu_op_c_cin;
1590
           n_alu_status_update                  = `alu_status_update_nzcv;
1591
           n_dest                               = `dest_alu_a;
1592
           end
1593
 
1594
       `AND_ABX:
1595
           begin
1596
           n_length                             = 2'b11;
1597
           n_absolute                           = 1'b1;
1598
           n_idx_sel                            = `idx_sel_x;
1599
           n_ins_type                           = `ins_type_read;
1600
           n_alu_mode                           = `alu_mode_and;
1601
           n_alu_op_a_sel                       = `alu_op_a_acc;
1602
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1603
           n_alu_op_b_inv                       = 1'b0;
1604
           n_alu_op_c_sel                       = `alu_op_c_00;
1605
           n_alu_status_update                  = `alu_status_update_nz;
1606
           n_dest                               = `dest_alu_a;
1607
           end
1608
 
1609
       `ASL_ABX:
1610
           begin
1611
           n_length                             = 2'b11;
1612
           n_absolute                           = 1'b1;
1613
           n_idx_sel                            = `idx_sel_x;
1614
           n_ins_type                           = `ins_type_rmw;
1615
           n_alu_mode                           = `alu_mode_sfl;
1616
           n_alu_op_a_sel                       = `alu_op_a_00;
1617
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1618
           n_alu_op_b_inv                       = 1'b0;
1619
           n_alu_op_c_sel                       = `alu_op_c_00;
1620
           n_alu_status_update                  = `alu_status_update_nzc;
1621
           n_dest                               = `dest_mem;
1622
           end
1623
 
1624
       `CMP_ABX:
1625
           begin
1626
           n_length                             = 2'b11;
1627
           n_absolute                           = 1'b1;
1628
           n_idx_sel                            = `idx_sel_x;
1629
           n_ins_type                           = `ins_type_read;
1630
           n_alu_mode                           = `alu_mode_add;
1631
           n_alu_op_a_sel                       = `alu_op_a_acc;
1632
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1633
           n_alu_op_b_inv                       = 1'b1;
1634
           n_alu_op_c_sel                       = `alu_op_c_01;
1635
           n_alu_status_update                  = `alu_status_update_nzc;
1636
           n_dest                               = `dest_none;
1637
           end
1638
 
1639
       `DEC_ABX:
1640
           begin
1641
           n_length                             = 2'b11;
1642
           n_absolute                           = 1'b1;
1643
           n_idx_sel                            = `idx_sel_x;
1644
           n_ins_type                           = `ins_type_rmw;
1645
           n_alu_mode                           = `alu_mode_add;
1646
           n_alu_op_a_sel                       = `alu_op_a_ff;
1647
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1648
           n_alu_op_b_inv                       = 1'b0;
1649
           n_alu_op_c_sel                       = `alu_op_c_00;
1650
           n_alu_status_update                  = `alu_status_update_nz;
1651
           n_dest                               = `dest_mem;
1652
           end
1653
 
1654
       `EOR_ABX:
1655
           begin
1656
           n_length                             = 2'b11;
1657
           n_absolute                           = 1'b1;
1658
           n_idx_sel                            = `idx_sel_x;
1659
           n_ins_type                           = `ins_type_read;
1660
           n_alu_mode                           = `alu_mode_eor;
1661
           n_alu_op_a_sel                       = `alu_op_a_acc;
1662
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1663
           n_alu_op_b_inv                       = 1'b0;
1664
           n_alu_op_c_sel                       = `alu_op_c_00;
1665
           n_alu_status_update                  = `alu_status_update_nz;
1666
           n_dest                               = `dest_alu_a;
1667
           end
1668
 
1669
       `INC_ABX:
1670
           begin
1671
           n_length                             = 2'b11;
1672
           n_absolute                           = 1'b1;
1673
           n_idx_sel                            = `idx_sel_x;
1674
           n_ins_type                           = `ins_type_rmw;
1675
           n_alu_mode                           = `alu_mode_add;
1676
           n_alu_op_a_sel                       = `alu_op_a_00;
1677
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1678
           n_alu_op_b_inv                       = 1'b0;
1679
           n_alu_op_c_sel                       = `alu_op_c_01;
1680
           n_alu_status_update                  = `alu_status_update_nz;
1681
           n_dest                               = `dest_mem;
1682
           end
1683
 
1684
       `LDA_ABX:
1685
           begin
1686
           n_length                             = 2'b11;
1687
           n_absolute                           = 1'b1;
1688
           n_idx_sel                            = `idx_sel_x;
1689
           n_ins_type                           = `ins_type_read;
1690
           n_alu_mode                           = `alu_mode_add;
1691
           n_alu_op_a_sel                       = `alu_op_a_00;
1692
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1693
           n_alu_op_b_inv                       = 1'b0;
1694
           n_alu_op_c_sel                       = `alu_op_c_00;
1695
           n_alu_status_update                  = `alu_status_update_nz;
1696
           n_dest                               = `dest_alu_a;
1697
           end
1698
 
1699
       `LDY_ABX:
1700
           begin
1701
           n_length                             = 2'b11;
1702
           n_absolute                           = 1'b1;
1703
           n_idx_sel                            = `idx_sel_x;
1704
           n_ins_type                           = `ins_type_read;
1705
           n_alu_mode                           = `alu_mode_add;
1706
           n_alu_op_a_sel                       = `alu_op_a_00;
1707
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1708
           n_alu_op_b_inv                       = 1'b0;
1709
           n_alu_op_c_sel                       = `alu_op_c_00;
1710
           n_alu_status_update                  = `alu_status_update_nz;
1711
           n_dest                               = `dest_alu_y;
1712
           end
1713
 
1714
       `LSR_ABX:
1715
           begin
1716
           n_length                             = 2'b11;
1717
           n_absolute                           = 1'b1;
1718
           n_idx_sel                            = `idx_sel_x;
1719
           n_ins_type                           = `ins_type_rmw;
1720
           n_alu_mode                           = `alu_mode_sfr;
1721
           n_alu_op_a_sel                       = `alu_op_a_00;
1722
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1723
           n_alu_op_b_inv                       = 1'b0;
1724
           n_alu_op_c_sel                       = `alu_op_c_00;
1725
           n_alu_status_update                  = `alu_status_update_nzc;
1726
           n_dest                               = `dest_mem;
1727
           end
1728
 
1729
       `ORA_ABX:
1730
           begin
1731
           n_length                             = 2'b11;
1732
           n_absolute                           = 1'b1;
1733
           n_idx_sel                            = `idx_sel_x;
1734
           n_ins_type                           = `ins_type_read;
1735
           n_alu_mode                           = `alu_mode_orr;
1736
           n_alu_op_a_sel                       = `alu_op_a_acc;
1737
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1738
           n_alu_op_b_inv                       = 1'b0;
1739
           n_alu_op_c_sel                       = `alu_op_c_00;
1740
           n_alu_status_update                  = `alu_status_update_nz;
1741
           n_dest                               = `dest_mem;
1742
           end
1743
 
1744
       `ROL_ABX:
1745
           begin
1746
           n_length                             = 2'b11;
1747
           n_absolute                           = 1'b1;
1748
           n_idx_sel                            = `idx_sel_x;
1749
           n_ins_type                           = `ins_type_rmw;
1750
           n_alu_mode                           = `alu_mode_sfl;
1751
           n_alu_op_a_sel                       = `alu_op_a_00;
1752
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1753
           n_alu_op_b_inv                       = 1'b0;
1754
           n_alu_op_c_sel                       = `alu_op_c_cin;
1755
           n_alu_status_update                  = `alu_status_update_nzc;
1756
           n_dest                               = `dest_mem;
1757
           end
1758
 
1759
       `ROR_ABX:
1760
           begin
1761
           n_length                             = 2'b11;
1762
           n_absolute                           = 1'b1;
1763
           n_idx_sel                            = `idx_sel_x;
1764
           n_ins_type                           = `ins_type_rmw;
1765
           n_alu_mode                           = `alu_mode_sfr;
1766
           n_alu_op_a_sel                       = `alu_op_a_00;
1767
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1768
           n_alu_op_b_inv                       = 1'b0;
1769
           n_alu_op_c_sel                       = `alu_op_c_cin;
1770
           n_alu_status_update                  = `alu_status_update_nzc;
1771
           n_dest                               = `dest_mem;
1772
           end
1773
 
1774
       `SBC_ABX:
1775
           begin
1776
           n_length                             = 2'b11;
1777
           n_absolute                           = 1'b1;
1778
           n_idx_sel                            = `idx_sel_x;
1779
           n_ins_type                           = `ins_type_read;
1780
           n_alu_mode                           = `alu_mode_add;
1781
           n_alu_op_a_sel                       = `alu_op_a_acc;
1782
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1783
           n_alu_op_b_inv                       = 1'b1;
1784
           n_alu_op_c_sel                       = `alu_op_c_cin;
1785
           n_alu_status_update                  = `alu_status_update_nzcv;
1786
           n_dest                               = `dest_alu_a;
1787
           end
1788
 
1789
       `STA_ABX:
1790
           begin
1791
           n_length                             = 2'b11;
1792
           n_absolute                           = 1'b1;
1793
           n_idx_sel                            = `idx_sel_x;
1794
           n_ins_type                           = `ins_type_write;
1795
           n_alu_mode                           = `alu_mode_add;
1796
           n_alu_op_a_sel                       = `alu_op_a_acc;
1797
           n_alu_op_b_inv                       = 1'b0;
1798
           n_alu_op_c_sel                       = `alu_op_c_00;
1799
           n_alu_status_update                  = `alu_status_update_none;
1800
           n_dest                               = `dest_mem;
1801
           end
1802
 
1803
       `ADC_ABY:
1804
           begin
1805
           n_length                             = 2'b11;
1806
           n_absolute                           = 1'b1;
1807
           n_idx_sel                            = `idx_sel_y;
1808
           n_ins_type                           = `ins_type_read;
1809
           n_alu_mode                           = `alu_mode_add;
1810
           n_alu_op_a_sel                       = `alu_op_a_acc;
1811
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1812
           n_alu_op_b_inv                       = 1'b0;
1813
           n_alu_op_c_sel                       = `alu_op_c_cin;
1814
           n_alu_status_update                  = `alu_status_update_nzcv;
1815
           n_dest                               = `dest_alu_a;
1816
           end
1817
 
1818
 
1819
       `AND_ABY:
1820
           begin
1821
           n_length                             = 2'b11;
1822
           n_absolute                           = 1'b1;
1823
           n_idx_sel                            = `idx_sel_y;
1824
           n_ins_type                           = `ins_type_read;
1825
           n_alu_mode                           = `alu_mode_and;
1826
           n_alu_op_a_sel                       = `alu_op_a_acc;
1827
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1828
           n_alu_op_b_inv                       = 1'b0;
1829
           n_alu_op_c_sel                       = `alu_op_c_00;
1830
           n_alu_status_update                  = `alu_status_update_nz;
1831
           n_dest                               = `dest_alu_a;
1832
           end
1833
 
1834
 
1835
       `CMP_ABY:
1836
           begin
1837
           n_length                             = 2'b11;
1838
           n_absolute                           = 1'b1;
1839
           n_idx_sel                            = `idx_sel_y;
1840
           n_ins_type                           = `ins_type_read;
1841
           n_alu_mode                           = `alu_mode_add;
1842
           n_alu_op_a_sel                       = `alu_op_a_acc;
1843
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1844
           n_alu_op_b_inv                       = 1'b1;
1845
           n_alu_op_c_sel                       = `alu_op_c_01;
1846
           n_alu_status_update                  = `alu_status_update_nzc;
1847
           n_dest                               = `dest_none;
1848
           end
1849
 
1850
 
1851
       `EOR_ABY:
1852
           begin
1853
           n_length                             = 2'b11;
1854
           n_absolute                           = 1'b1;
1855
           n_idx_sel                            = `idx_sel_y;
1856
           n_ins_type                           = `ins_type_read;
1857
           n_alu_mode                           = `alu_mode_eor;
1858
           n_alu_op_a_sel                       = `alu_op_a_acc;
1859
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1860
           n_alu_op_b_inv                       = 1'b0;
1861
           n_alu_op_c_sel                       = `alu_op_c_00;
1862
           n_alu_status_update                  = `alu_status_update_nz;
1863
           n_dest                               = `dest_alu_a;
1864
           end
1865
 
1866
 
1867
       `LDA_ABY:
1868
           begin
1869
           n_length                             = 2'b11;
1870
           n_absolute                           = 1'b1;
1871
           n_idx_sel                            = `idx_sel_y;
1872
           n_ins_type                           = `ins_type_read;
1873
           n_alu_mode                           = `alu_mode_add;
1874
           n_alu_op_a_sel                       = `alu_op_a_00;
1875
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1876
           n_alu_op_b_inv                       = 1'b0;
1877
           n_alu_op_c_sel                       = `alu_op_c_00;
1878
           n_alu_status_update                  = `alu_status_update_nz;
1879
           n_dest                               = `dest_alu_a;
1880
           end
1881
 
1882
 
1883
       `LDX_ABY:
1884
           begin
1885
           n_length                             = 2'b11;
1886
           n_absolute                           = 1'b1;
1887
           n_idx_sel                            = `idx_sel_y;
1888
           n_ins_type                           = `ins_type_read;
1889
           n_alu_mode                           = `alu_mode_add;
1890
           n_alu_op_a_sel                       = `alu_op_a_00;
1891
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1892
           n_alu_op_b_inv                       = 1'b0;
1893
           n_alu_op_c_sel                       = `alu_op_c_00;
1894
           n_alu_status_update                  = `alu_status_update_nz;
1895
           n_dest                               = `dest_alu_x;
1896
           end
1897
 
1898
 
1899
       `ORA_ABY:
1900
           begin
1901
           n_length                             = 2'b11;
1902
           n_absolute                           = 1'b1;
1903
           n_idx_sel                            = `idx_sel_y;
1904
           n_ins_type                           = `ins_type_read;
1905
           n_alu_mode                           = `alu_mode_orr;
1906
           n_alu_op_a_sel                       = `alu_op_a_acc;
1907
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1908
           n_alu_op_b_inv                       = 1'b0;
1909
           n_alu_op_c_sel                       = `alu_op_c_00;
1910
           n_alu_status_update                  = `alu_status_update_nz;
1911
           n_dest                               = `dest_alu_a;
1912
           end
1913
 
1914
 
1915
       `SBC_ABY:
1916
           begin
1917
           n_length                             = 2'b11;
1918
           n_absolute                           = 1'b1;
1919
           n_idx_sel                            = `idx_sel_y;
1920
           n_ins_type                           = `ins_type_read;
1921
           n_alu_mode                           = `alu_mode_add;
1922
           n_alu_op_a_sel                       = `alu_op_a_acc;
1923
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1924
           n_alu_op_b_inv                       = 1'b1;
1925
           n_alu_op_c_sel                       = `alu_op_c_cin;
1926
           n_alu_status_update                  = `alu_status_update_nzcv;
1927
           n_dest                               = `dest_alu_a;
1928
           end
1929
 
1930
 
1931
       `STA_ABY:
1932
           begin
1933
           n_length                             = 2'b11;
1934
           n_absolute                           = 1'b1;
1935
           n_idx_sel                            = `idx_sel_y;
1936
           n_ins_type                           = `ins_type_write;
1937
           n_alu_mode                           = `alu_mode_add;
1938
           n_alu_op_a_sel                       = `alu_op_a_acc;
1939
           n_alu_op_b_inv                       = 1'b0;
1940
           n_alu_op_c_sel                       = `alu_op_c_00;
1941
           n_alu_status_update                  = `alu_status_update_none;
1942
           n_dest                               = `dest_mem;
1943
           end
1944
// indirectx
1945
 
1946
       `ADC_IDX:
1947
           begin
1948
           n_length                             = 2'b10;
1949
           n_indirectx                          = 1'b1;
1950
           n_idx_sel                            = `idx_sel_x;
1951
           n_ins_type                           = `ins_type_read;
1952
           n_alu_mode                           = `alu_mode_add;
1953
           n_alu_op_a_sel                       = `alu_op_a_acc;
1954
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1955
           n_alu_op_b_inv                       = 1'b0;
1956
           n_alu_op_c_sel                       = `alu_op_c_cin;
1957
           n_alu_status_update                  = `alu_status_update_nzcv;
1958
           n_dest                               = `dest_alu_a;
1959
           end
1960
 
1961
       `AND_IDX:
1962
           begin
1963
           n_length                             = 2'b10;
1964
           n_indirectx                          = 1'b1;
1965
           n_idx_sel                            = `idx_sel_x;
1966
           n_ins_type                           = `ins_type_read;
1967
           n_alu_mode                           = `alu_mode_and;
1968
           n_alu_op_a_sel                       = `alu_op_a_acc;
1969
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1970
           n_alu_op_b_inv                       = 1'b0;
1971
           n_alu_op_c_sel                       = `alu_op_c_00;
1972
           n_alu_status_update                  = `alu_status_update_nz;
1973
           n_dest                               = `dest_alu_a;
1974
           end
1975
 
1976
       `CMP_IDX:
1977
           begin
1978
           n_length                             = 2'b10;
1979
           n_indirectx                          = 1'b1;
1980
           n_idx_sel                            = `idx_sel_x;
1981
           n_ins_type                           = `ins_type_read;
1982
           n_alu_mode                           = `alu_mode_add;
1983
           n_alu_op_a_sel                       = `alu_op_a_acc;
1984
           n_alu_op_b_sel                       = `alu_op_b_opnd;
1985
           n_alu_op_b_inv                       = 1'b1;
1986
           n_alu_op_c_sel                       = `alu_op_c_01;
1987
           n_alu_status_update                  = `alu_status_update_nzc;
1988
           n_dest                               = `dest_none;
1989
           end
1990
 
1991
       `EOR_IDX:
1992
           begin
1993
           n_length                             = 2'b10;
1994
           n_indirectx                          = 1'b1;
1995
           n_idx_sel                            = `idx_sel_x;
1996
           n_ins_type                           = `ins_type_read;
1997
           n_alu_mode                           = `alu_mode_eor;
1998
           n_alu_op_a_sel                       = `alu_op_a_acc;
1999
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2000
           n_alu_op_b_inv                       = 1'b0;
2001
           n_alu_op_c_sel                       = `alu_op_c_00;
2002
           n_alu_status_update                  = `alu_status_update_nz;
2003
           n_dest                               = `dest_alu_a;
2004
           end
2005
 
2006
       `LDA_IDX:
2007
           begin
2008
           n_length                             = 2'b10;
2009
           n_indirectx                          = 1'b1;
2010
           n_idx_sel                            = `idx_sel_x;
2011
           n_ins_type                           = `ins_type_read;
2012
           n_alu_mode                           = `alu_mode_add;
2013
           n_alu_op_a_sel                       = `alu_op_a_00;
2014
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2015
           n_alu_op_b_inv                       = 1'b0;
2016
           n_alu_op_c_sel                       = `alu_op_c_00;
2017
           n_alu_status_update                  = `alu_status_update_nz;
2018
           n_dest                               = `dest_alu_a;
2019
           end
2020
 
2021
       `ORA_IDX:
2022
           begin
2023
           n_length                             = 2'b10;
2024
           n_indirectx                          = 1'b1;
2025
           n_idx_sel                            = `idx_sel_x;
2026
           n_ins_type                           = `ins_type_read;
2027
           n_alu_mode                           = `alu_mode_orr;
2028
           n_alu_op_a_sel                       = `alu_op_a_acc;
2029
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2030
           n_alu_op_b_inv                       = 1'b0;
2031
           n_alu_op_c_sel                       = `alu_op_c_00;
2032
           n_alu_status_update                  = `alu_status_update_nz;
2033
           n_dest                               = `dest_alu_a;
2034
           end
2035
 
2036
       `SBC_IDX:
2037
           begin
2038
           n_length                             = 2'b10;
2039
           n_indirectx                          = 1'b1;
2040
           n_idx_sel                            = `idx_sel_x;
2041
           n_ins_type                           = `ins_type_read;
2042
           n_alu_mode                           = `alu_mode_add;
2043
           n_alu_op_a_sel                       = `alu_op_a_acc;
2044
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2045
           n_alu_op_b_inv                       = 1'b1;
2046
           n_alu_op_c_sel                       = `alu_op_c_cin;
2047
           n_alu_status_update                  = `alu_status_update_nzcv;
2048
           n_dest                               = `dest_alu_a;
2049
           end
2050
 
2051
       `STA_IDX:
2052
           begin
2053
           n_length                             = 2'b10;
2054
           n_indirectx                          = 1'b1;
2055
           n_idx_sel                            = `idx_sel_x;
2056
           n_ins_type                           = `ins_type_write;
2057
           n_alu_mode                           = `alu_mode_add;
2058
           n_alu_op_a_sel                       = `alu_op_a_acc;
2059
           n_alu_op_b_inv                       = 1'b0;
2060
           n_alu_op_c_sel                       = `alu_op_c_00;
2061
           n_alu_status_update                  = `alu_status_update_none;
2062
           n_dest                               = `dest_mem;
2063
           end
2064
 
2065
// indirecty
2066
 
2067
       `ADC_IDY:
2068
           begin
2069
           n_length                             = 2'b10;
2070
           n_indirecty                          = 1'b1;
2071
           n_idx_sel                            = `idx_sel_y;
2072
           n_ins_type                           = `ins_type_read;
2073
           n_alu_mode                           = `alu_mode_add;
2074
           n_alu_op_a_sel                       = `alu_op_a_acc;
2075
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2076
           n_alu_op_b_inv                       = 1'b0;
2077
           n_alu_op_c_sel                       = `alu_op_c_cin;
2078
           n_alu_status_update                  = `alu_status_update_nzcv;
2079
           n_dest                               = `dest_alu_a;
2080
           end
2081
 
2082
       `AND_IDY:
2083
           begin
2084
           n_length                             = 2'b10;
2085
           n_indirecty                          = 1'b1;
2086
           n_idx_sel                            = `idx_sel_y;
2087
           n_ins_type                           = `ins_type_read;
2088
           n_alu_mode                           = `alu_mode_and;
2089
           n_alu_op_a_sel                       = `alu_op_a_acc;
2090
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2091
           n_alu_op_b_inv                       = 1'b0;
2092
           n_alu_op_c_sel                       = `alu_op_c_00;
2093
           n_alu_status_update                  = `alu_status_update_nz;
2094
           n_dest                               = `dest_alu_a;
2095
           end
2096
 
2097
       `CMP_IDY:
2098
           begin
2099
           n_length                             = 2'b10;
2100
           n_indirecty                          = 1'b1;
2101
           n_idx_sel                            = `idx_sel_y;
2102
           n_ins_type                           = `ins_type_read;
2103
           n_alu_mode                           = `alu_mode_add;
2104
           n_alu_op_a_sel                       = `alu_op_a_acc;
2105
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2106
           n_alu_op_b_inv                       = 1'b1;
2107
           n_alu_op_c_sel                       = `alu_op_c_01;
2108
           n_alu_status_update                  = `alu_status_update_nzc;
2109
           n_dest                               = `dest_none;
2110
           end
2111
 
2112
       `EOR_IDY:
2113
           begin
2114
           n_length                             = 2'b10;
2115
           n_indirecty                          = 1'b1;
2116
           n_idx_sel                            = `idx_sel_y;
2117
           n_ins_type                           = `ins_type_read;
2118
           n_alu_mode                           = `alu_mode_eor;
2119
           n_alu_op_a_sel                       = `alu_op_a_acc;
2120
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2121
           n_alu_op_b_inv                       = 1'b0;
2122
           n_alu_op_c_sel                       = `alu_op_c_00;
2123
           n_alu_status_update                  = `alu_status_update_nz;
2124
           n_dest                               = `dest_alu_a;
2125
           end
2126
 
2127
       `LDA_IDY:
2128
           begin
2129
           n_length                             = 2'b10;
2130
           n_indirecty                          = 1'b1;
2131
           n_idx_sel                            = `idx_sel_y;
2132
           n_ins_type                           = `ins_type_read;
2133
           n_alu_mode                           = `alu_mode_add;
2134
           n_alu_op_a_sel                       = `alu_op_a_00;
2135
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2136
           n_alu_op_b_inv                       = 1'b0;
2137
           n_alu_op_c_sel                       = `alu_op_c_00;
2138
           n_alu_status_update                  = `alu_status_update_nz;
2139
           n_dest                               = `dest_alu_a;
2140
           end
2141
 
2142
       `ORA_IDY:
2143
           begin
2144
           n_length                             = 2'b10;
2145
           n_indirecty                          = 1'b1;
2146
           n_idx_sel                            = `idx_sel_y;
2147
           n_ins_type                           = `ins_type_read;
2148
           n_alu_mode                           = `alu_mode_orr;
2149
           n_alu_op_a_sel                       = `alu_op_a_acc;
2150
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2151
           n_alu_op_b_inv                       = 1'b0;
2152
           n_alu_op_c_sel                       = `alu_op_c_00;
2153
           n_alu_status_update                  = `alu_status_update_nz;
2154
           n_dest                               = `dest_alu_a;
2155
           end
2156
 
2157
       `SBC_IDY:
2158
           begin
2159
           n_length                             = 2'b10;
2160
           n_indirecty                          = 1'b1;
2161
           n_idx_sel                            = `idx_sel_y;
2162
           n_ins_type                           = `ins_type_read;
2163
           n_alu_mode                           = `alu_mode_add;
2164
           n_alu_op_a_sel                       = `alu_op_a_acc;
2165
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2166
           n_alu_op_b_inv                       = 1'b1;
2167
           n_alu_op_c_sel                       = `alu_op_c_cin;
2168
           n_alu_status_update                  = `alu_status_update_nzcv;
2169
           n_dest                               = `dest_alu_a;
2170
           end
2171
 
2172
       `STA_IDY:
2173
           begin
2174
           n_length                             = 2'b10;
2175
           n_indirecty                          = 1'b1;
2176
           n_idx_sel                            = `idx_sel_y;
2177
           n_ins_type                           = `ins_type_write;
2178
           n_alu_mode                           = `alu_mode_add;
2179
           n_alu_op_a_sel                       = `alu_op_a_acc;
2180
           n_alu_op_b_inv                       = 1'b0;
2181
           n_alu_op_c_sel                       = `alu_op_c_00;
2182
           n_alu_status_update                  = `alu_status_update_none;
2183
           n_dest                               = `dest_mem;
2184
           end
2185
 
2186
 
2187
 
2188
// stack
2189
 
2190
 
2191
 
2192
       `PHA_IMP:
2193
           begin
2194
           n_length                             = 2'b01;
2195
           n_stack                              = 1'b1;
2196
           n_ins_type                           = `ins_type_write;
2197
           n_alu_mode                           = `alu_mode_add;
2198
           n_alu_op_a_sel                       = `alu_op_a_acc;
2199
           n_alu_op_b_inv                       = 1'b0;
2200
           n_alu_op_c_sel                       = `alu_op_c_00;
2201
           n_alu_status_update                  = `alu_status_update_none;
2202
           n_dest                               = `dest_none;
2203
           end
2204
 
2205
       `PHP_IMP:
2206
           begin
2207
           n_length                             = 2'b01;
2208
           n_stack                              = 1'b1;
2209
           n_ins_type                           = `ins_type_write;
2210
           n_alu_mode                           = `alu_mode_add;
2211
           n_alu_op_a_sel                       = `alu_op_a_psr;
2212
           n_alu_op_b_inv                       = 1'b0;
2213
           n_alu_op_c_sel                       = `alu_op_c_00;
2214
           n_alu_status_update                  = `alu_status_update_none;
2215
           n_dest                               = `dest_mem;
2216
           end
2217
 
2218
       `PLA_IMP:
2219
           begin
2220
           n_length                             = 2'b01;
2221
           n_stack                              = 1'b1;
2222
           n_ins_type                           = `ins_type_read;
2223
           n_alu_mode                           = `alu_mode_add;
2224
           n_alu_op_a_sel                       = `alu_op_a_00;
2225
           n_alu_op_b_sel                       = `alu_op_b_stk;
2226
           n_alu_op_b_inv                       = 1'b0;
2227
           n_alu_op_c_sel                       = `alu_op_c_00;
2228
           n_alu_status_update                  = `alu_status_update_nz;
2229
           n_dest                               = `dest_alu_a;
2230
           end
2231
 
2232
       `PLP_IMP:
2233
           begin
2234
           n_length                             = 2'b01;
2235
           n_stack                              = 1'b1;
2236
           n_ins_type                           = `ins_type_read;
2237
           n_alu_mode                           = `alu_mode_add;
2238
           n_alu_op_a_sel                       = `alu_op_a_00;
2239
           n_alu_op_b_sel                       = `alu_op_b_stk;
2240
           n_alu_op_b_inv                       = 1'b0;
2241
           n_alu_op_c_sel                       = `alu_op_c_00;
2242
           n_alu_status_update                  = `alu_status_update_res;
2243
           n_dest                               = `dest_none;
2244
           end
2245
 
2246
 
2247
 
2248
// jump
2249
 
2250
       `JMP_ABS:
2251
           begin
2252
           n_length                             = 2'b11;
2253
           n_jump                               = 1'b1;
2254
           n_ctrl                               = `ctrl_jmp;
2255
           end
2256
 
2257
// jump_indirect
2258
       `JMP_IND:
2259
           begin
2260
           n_length                             = 2'b11;
2261
           n_jump_indirect                      = 1'b1;
2262
           n_ctrl                               = `ctrl_jmp_ind;
2263
           end
2264
 
2265
// jump_subroutine
2266
 
2267
       `JSR_ABS:
2268
           begin
2269
           n_length                             = 2'b11;
2270
           n_jsr                                = 1'b1;
2271
           n_ctrl                               = `ctrl_jsr;
2272
           end
2273
 
2274
 
2275
// break
2276
// ??????????  Need to update alu_status at the end of this instruction
2277
 
2278
       `BRK_IMP:
2279
           begin
2280
           n_length                             = 2'b01;
2281
           n_brk                                = 1'b1;
2282
           n_ctrl                               = `ctrl_brk;
2283
           n_alu_mode                           = `alu_mode_add;
2284
           n_alu_op_a_sel                       = `alu_op_a_psr;
2285
           n_alu_op_b_inv                       = 1'b0;
2286
           n_alu_op_c_sel                       = `alu_op_c_00;
2287
           n_alu_status_update                  = `alu_status_update_wr;
2288
           n_brn_value                          = 8'h10; // BRK bit in psr
2289
           n_brn_enable                         = 8'h10;
2290
           n_dest                               = `dest_none;
2291
          end
2292
 
2293
 
2294
// return for int
2295
 
2296
       `RTI_IMP:
2297
           begin
2298
           n_length                             = 2'b01;
2299
           n_rti                                = 1'b1;
2300
           n_ctrl                               = `ctrl_rti;
2301
           n_ins_type                           = `ins_type_read;
2302
           n_alu_mode                           = `alu_mode_add;
2303
           n_alu_op_a_sel                       = `alu_op_a_00;
2304
           n_alu_op_b_sel                       = `alu_op_b_opnd;
2305
           n_alu_op_b_inv                       = 1'b0;
2306
           n_alu_op_c_sel                       = `alu_op_c_00;
2307
           n_alu_status_update                  = `alu_status_update_res;
2308
           n_dest                               = `dest_none;
2309
         end
2310
 
2311
// return from sub
2312
 
2313
       `RTS_IMP:
2314
           begin
2315
           n_length                             = 2'b01;
2316
           n_rts                                = 1'b1;
2317
           n_ctrl                               = `ctrl_rts;
2318
           end
2319
 
2320
 
2321
 
2322
 
2323
       default:
2324
           begin
2325
           n_invalid                            = 1'b1;
2326
           n_ins_type                           = `ins_type_none;
2327
           end
2328
 
2329
  endcase
2330
 
2331
 end // always @ (*)
2332
 
2333
 
2334
 
2335
 
2336
 
2337
 
2338
endmodule
2339
 
2340
 
2341
 

powered by: WebSVN 2.1.0

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