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

Subversion Repositories rtf65002

[/] [rtf65002/] [trunk/] [rtl/] [verilog/] [byte_decode.v] - Blame information for rev 20

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

Line No. Rev Author Line
1 20 robfinch
// ============================================================================
2
//        __
3
//   \\__/ o\    (C) 2013  Robert Finch, Stratford
4
//    \  __ /    All rights reserved.
5
//     \/_//     robfinch<remove>@opencores.org
6
//       ||
7
//
8
// This source file is free software: you can redistribute it and/or modify 
9
// it under the terms of the GNU Lesser General Public License as published 
10
// by the Free Software Foundation, either version 3 of the License, or     
11
// (at your option) any later version.                                      
12
//                                                                          
13
// This source file is distributed in the hope that it will be useful,      
14
// but WITHOUT ANY WARRANTY; without even the implied warranty of           
15
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            
16
// GNU General Public License for more details.                             
17
//                                                                          
18
// You should have received a copy of the GNU General Public License        
19
// along with this program.  If not, see <http://www.gnu.org/licenses/>.    
20
//                                                                          
21
// Byte mode decode/execute state
22
// ============================================================================
23
//
24
BYTE_DECODE:
25
        begin
26
                first_ifetch <= `TRUE;
27
                state <= IFETCH;
28
                case(ir[7:0])
29
                `STP:   begin clk_en <= 1'b0; pc <= pc + 32'd1; end
30
                `NAT:   begin em <= 1'b0; pc <= pc + 32'd1; end
31
                `NOP:   pc <= pc + 32'd1;
32
                `CLC:   begin cf <= 1'b0; pc <= pc + 32'd1; end
33
                `SEC:   begin cf <= 1'b1; pc <= pc + 32'd1; end
34
                `CLV:   begin vf <= 1'b0; pc <= pc + 32'd1; end
35
                `CLI:   begin im <= 1'b0; pc <= pc + 32'd1; end
36
                `SEI:   begin im <= 1'b1; pc <= pc + 32'd1; end
37
                `CLD:   begin df <= 1'b0; pc <= pc + 32'd1; end
38
                `SED:   begin df <= 1'b1; pc <= pc + 32'd1; end
39
                `WAI:   begin wai <= 1'b1; pc <= pc + 32'd1; end
40
                `DEX:   begin res8 <= x[7:0] - 8'd1; pc <= pc + 32'd1; end
41
                `INX:   begin res8 <= x[7:0] + 8'd1; pc <= pc + 32'd1; end
42
                `DEY:   begin res8 <= y[7:0] - 8'd1; pc <= pc + 32'd1; end
43
                `INY:   begin res8 <= y[7:0] + 8'd1; pc <= pc + 32'd1; end
44
                `DEA:   begin res8 <= acc[7:0] - 8'd1; pc <= pc + 32'd1; end
45
                `INA:   begin res8 <= acc[7:0] + 8'd1; pc <= pc + 32'd1; end
46
                `TSX,`TSA:      begin res8 <= sp[7:0]; pc <= pc + 32'd1; end
47
                `TXS,`TXA,`TXY: begin res8 <= x[7:0]; pc <= pc + 32'd1; end
48
                `TAX,`TAY,`TAS: begin res8 <= acc[7:0]; pc <= pc + 32'd1; end
49
                `TYA,`TYX:      begin res8 <= y[7:0]; pc <= pc + 32'd1; end
50
                `ASL_ACC:       begin res8 <= {acc8,1'b0}; pc <= pc + 32'd1; end
51
                `ROL_ACC:       begin res8 <= {acc8,cf}; pc <= pc + 32'd1; end
52
                `LSR_ACC:       begin res8 <= {acc8[0],1'b0,acc8[7:1]}; pc <= pc + 32'd1; end
53
                `ROR_ACC:       begin res8 <= {acc8[0],cf,acc8[7:1]}; pc <= pc + 32'd1; end
54
                // Handle # mode
55
                `LDA_IMM,`LDX_IMM,`LDY_IMM:
56
                        begin
57
                                pc <= pc + 32'd2;
58
                                res8 <= ir[15:8];
59
                        end
60
                `ADC_IMM:
61
                        begin
62
                                pc <= pc + 32'd2;
63
                                res8 <= acc8 + ir[15:8] + {7'b0,cf};
64
                                b8 <= ir[15:8];         // for overflow calc
65
                        end
66
                `SBC_IMM:
67
                        begin
68
                                pc <= pc + 32'd2;
69
//                              res8 <= acc8 - ir[15:8] - ~cf;
70
                                res8 <= acc8 - ir[15:8] - {7'b0,~cf};
71
                                $display("sbc: %h= %h-%h-%h", acc8 - ir[15:8] - {7'b0,~cf},acc8,ir[15:8],~cf);
72
                                b8 <= ir[15:8];         // for overflow calc
73
                        end
74
                `AND_IMM,`BIT_IMM:
75
                        begin
76
                                pc <= pc + 32'd2;
77
                                res8 <= acc8 & ir[15:8];
78
                                b8 <= ir[15:8]; // for bit flags
79
                        end
80
                `ORA_IMM:
81
                        begin
82
                                pc <= pc + 32'd2;
83
                                res8 <= acc8 | ir[15:8];
84
                        end
85
                `EOR_IMM:
86
                        begin
87
                                pc <= pc + 32'd2;
88
                                res8 <= acc8 ^ ir[15:8];
89
                        end
90
                `CMP_IMM:
91
                        begin
92
                                pc <= pc + 32'd2;
93
                                res8 <= acc8 - ir[15:8];
94
                        end
95
                `CPX_IMM:
96
                        begin
97
                                pc <= pc + 32'd2;
98
                                res8 <= x8 - ir[15:8];
99
                        end
100
                `CPY_IMM:
101
                        begin
102
                                pc <= pc + 32'd2;
103
                                res8 <= y8 - ir[15:8];
104
                        end
105
                // Handle zp mode
106
                `ADC_ZP,`SBC_ZP,`AND_ZP,`ORA_ZP,`EOR_ZP,`CMP_ZP,`LDA_ZP,
107
                `LDX_ZP,`LDY_ZP,`BIT_ZP,`CPX_ZP,`CPY_ZP,
108
                `ASL_ZP,`ROL_ZP,`LSR_ZP,`ROR_ZP,`INC_ZP,`DEC_ZP,`TRB_ZP,`TSB_ZP:
109
                        begin
110
                                pc <= pc + 32'd2;
111
                                radr <= zp_address[31:2];
112
                                radr2LSB <= zp_address[1:0];
113
                                state <= LOAD1;
114
                        end
115
                `STA_ZP:
116
                        begin
117
                                pc <= pc + 32'd2;
118
                                wadr <= zp_address[31:2];
119
                                wadr2LSB <= zp_address[1:0];
120
                                wdat <= {4{acc8}};
121
                                state <= STORE1;
122
                        end
123
                `STX_ZP:
124
                        begin
125
                                pc <= pc + 32'd2;
126
                                wadr <= zp_address[31:2];
127
                                wadr2LSB <= zp_address[1:0];
128
                                wdat <= {4{x8}};
129
                                state <= STORE1;
130
                        end
131
                `STY_ZP:
132
                        begin
133
                                pc <= pc + 32'd2;
134
                                wadr <= zp_address[31:2];
135
                                wadr2LSB <= zp_address[1:0];
136
                                wdat <= {4{y8}};
137
                                state <= STORE1;
138
                        end
139
                `STZ_ZP:
140
                        begin
141
                                pc <= pc + 32'd2;
142
                                wadr <= zp_address[31:2];
143
                                wadr2LSB <= zp_address[1:0];
144
                                wdat <= {4{8'h00}};
145
                                state <= STORE1;
146
                        end
147
                // Handle zp,x mode
148
                `ADC_ZPX,`SBC_ZPX,`AND_ZPX,`ORA_ZPX,`EOR_ZPX,`CMP_ZPX,`LDA_ZPX,
149
                `LDY_ZPX,`BIT_ZPX,
150
                `ASL_ZPX,`ROL_ZPX,`LSR_ZPX,`ROR_ZPX,`INC_ZPX,`DEC_ZPX:
151
                        begin
152
                                pc <= pc + 32'd2;
153
                                radr <= zpx_address[31:2];
154
                                radr2LSB <= zpx_address[1:0];
155
                                state <= LOAD1;
156
                        end
157
                `STA_ZPX:
158
                        begin
159
                                pc <= pc + 32'd2;
160
                                wadr <= zpx_address[31:2];
161
                                wadr2LSB <= zpx_address[1:0];
162
                                wdat <= {4{acc8}};
163
                                state <= STORE1;
164
                        end
165
                `STY_ZPX:
166
                        begin
167
                                pc <= pc + 32'd2;
168
                                wadr <= zpx_address[31:2];
169
                                wadr2LSB <= zpx_address[1:0];
170
                                wdat <= {4{y8}};
171
                                state <= STORE1;
172
                        end
173
                `STZ_ZPX:
174
                        begin
175
                                pc <= pc + 32'd2;
176
                                wadr <= zpx_address[31:2];
177
                                wadr2LSB <= zpx_address[1:0];
178
                                wdat <= {4{8'h00}};
179
                                state <= STORE1;
180
                        end
181
                // Handle zp,y
182
                `LDX_ZPY:
183
                        begin
184
                                pc <= pc + 32'd2;
185
                                radr <= zpy_address[31:2];
186
                                radr2LSB <= zpy_address[1:0];
187
                                state <= LOAD1;
188
                        end
189
                `STX_ZPY:
190
                        begin
191
                                pc <= pc + 32'd2;
192
                                wadr <= zpy_address[31:2];
193
                                wadr2LSB <= zpy_address[1:0];
194
                                wdat <= {4{x8}};
195
                                state <= STORE1;
196
                        end
197
                // Handle (zp,x)
198
                `ADC_IX,`SBC_IX,`AND_IX,`ORA_IX,`EOR_IX,`CMP_IX,`LDA_IX,`STA_IX:
199
                        begin
200
                                pc <= pc + 32'd2;
201
                                radr <= zpx_address[31:2];
202
                                radr2LSB <= zpx_address[1:0];
203
                                state <= BYTE_IX1;
204
                        end
205
                // Handle (zp),y
206
                `ADC_IY,`SBC_IY,`AND_IY,`ORA_IY,`EOR_IY,`CMP_IY,`LDA_IY,`STA_IY:
207
                        begin
208
                                pc <= pc + 32'd2;
209
                                radr <= zp_address[31:2];
210
                                radr2LSB <= zp_address[1:0];
211
                                state <= BYTE_IY1;
212
                        end
213
                // Handle abs
214
                `ADC_ABS,`SBC_ABS,`AND_ABS,`ORA_ABS,`EOR_ABS,`CMP_ABS,`LDA_ABS,
215
                `ASL_ABS,`ROL_ABS,`LSR_ABS,`ROR_ABS,`INC_ABS,`DEC_ABS,`TRB_ABS,`TSB_ABS,
216
                `LDX_ABS,`LDY_ABS,
217
                `CPX_ABS,`CPY_ABS,
218
                `BIT_ABS:
219
                        begin
220
                                pc <= pc + 32'd3;
221
                                radr <= abs_address[31:2];
222
                                radr2LSB <= abs_address[1:0];
223
                                state <= LOAD1;
224
                        end
225
                `STA_ABS:
226
                        begin
227
                                pc <= pc + 32'd3;
228
                                wadr <= abs_address[31:2];
229
                                wadr2LSB <= abs_address[1:0];
230
                                wdat <= {4{acc8}};
231
                                state <= STORE1;
232
                        end
233
                `STX_ABS:
234
                        begin
235
                                pc <= pc + 32'd3;
236
                                wadr <= abs_address[31:2];
237
                                wadr2LSB <= abs_address[1:0];
238
                                wdat <= {4{x8}};
239
                                state <= STORE1;
240
                        end
241
                `STY_ABS:
242
                        begin
243
                                pc <= pc + 32'd3;
244
                                wadr <= abs_address[31:2];
245
                                wadr2LSB <= abs_address[1:0];
246
                                wdat <= {4{y8}};
247
                                state <= STORE1;
248
                        end
249
                `STZ_ABS:
250
                        begin
251
                                pc <= pc + 32'd3;
252
                                wadr <= abs_address[31:2];
253
                                wadr2LSB <= abs_address[1:0];
254
                                wdat <= {4{8'h00}};
255
                                state <= STORE1;
256
                        end
257
                // Handle abs,x
258
                `ADC_ABSX,`SBC_ABSX,`AND_ABSX,`ORA_ABSX,`EOR_ABSX,`CMP_ABSX,`LDA_ABSX,
259
                `ASL_ABSX,`ROL_ABSX,`LSR_ABSX,`ROR_ABSX,`INC_ABSX,`DEC_ABSX,`BIT_ABSX,
260
                `LDY_ABSX:
261
                        begin
262
                                pc <= pc + 32'd3;
263
                                radr <= absx_address[31:2];
264
                                radr2LSB <= absx_address[1:0];
265
                                state <= LOAD1;
266
                        end
267
                `STA_ABSX:
268
                        begin
269
                                pc <= pc + 32'd3;
270
                                wadr <= absx_address[31:2];
271
                                wadr2LSB <= absx_address[1:0];
272
                                wdat <= {4{acc8}};
273
                                state <= STORE1;
274
                        end
275
                `STZ_ABSX:
276
                        begin
277
                                pc <= pc + 32'd3;
278
                                wadr <= absx_address[31:2];
279
                                wadr2LSB <= absx_address[1:0];
280
                                wdat <= {4{8'h00}};
281
                                state <= STORE1;
282
                        end
283
                // Handle abs,y
284
                `ADC_ABSY,`SBC_ABSY,`AND_ABSY,`ORA_ABSY,`EOR_ABSY,`CMP_ABSY,`LDA_ABSY,
285
                `LDX_ABSY:
286
                        begin
287
                                pc <= pc + 32'd3;
288
                                radr <= absy_address[31:2];
289
                                radr2LSB <= absy_address[1:0];
290
                                state <= LOAD1;
291
                        end
292
                `STA_ABSY:
293
                        begin
294
                                pc <= pc + 32'd3;
295
                                wadr <= absy_address[31:2];
296
                                wadr2LSB <= absy_address[1:0];
297
                                wdat <= {4{acc8}};
298
                                state <= STORE1;
299
                        end
300
                // Handle (zp)
301
                `ADC_I,`SBC_I,`AND_I,`ORA_I,`EOR_I,`CMP_I,`LDA_I,`STA_I:
302
                        begin
303
                                pc <= pc + 32'd2;
304
                                radr <= zp_address[31:2];
305
                                radr2LSB <= zp_address[1:0];
306
                                state <= BYTE_IX1;
307
                        end
308
                `BRK:
309
                        begin
310
                                radr <= {spage[31:8],sp[7:2]};
311
                                radr2LSB <= sp[1:0];
312
                                wadr <= {spage[31:8],sp[7:2]};
313
                                wadr2LSB <= sp[1:0];
314
                                wdat <= {4{pcp1[31:24]}};
315
                                cyc_o <= 1'b1;
316
                                stb_o <= 1'b1;
317
                                we_o <= 1'b1;
318
                                case(sp[1:0])
319
                                2'd0:   sel_o <= 4'b0001;
320
                                2'd1:   sel_o <= 4'b0010;
321
                                2'd2:   sel_o <= 4'b0100;
322
                                2'd3:   sel_o <= 4'b1000;
323
                                endcase
324
                                adr_o <= {spage[31:8],sp[7:2],2'b00};
325
                                dat_o <= {4{pcp1[31:24]}};
326
                                sp <= sp_dec;
327
                                vect <= `BYTE_IRQ_VECT;
328
                                state <= BYTE_IRQ1;
329
                                bf <= 1'b1;
330
                        end
331
                `JMP:
332
                        begin
333
                                pc[15:0] <= abs_address[15:0];
334
                        end
335
                `JML:
336
                        begin
337
                                pc <= ir[39:8];
338
                        end
339
                `JMP_IND:
340
                        begin
341
                                radr <= abs_address[31:2];
342
                                radr2LSB <= abs_address[1:0];
343
                                state <= BYTE_JMP_IND1;
344
                        end
345
                `JMP_INDX:
346
                        begin
347
                                radr <= absx_address[31:2];
348
                                radr2LSB <= absx_address[1:0];
349
                                state <= BYTE_JMP_IND1;
350
                        end
351
                `JSR:
352
                        begin
353
                                radr <= {spage[31:8],sp[7:2]};
354
                                wadr <= {spage[31:8],sp[7:2]};
355
                                radr2LSB <= sp[1:0];
356
                                wadr2LSB <= sp[1:0];
357
                                wdat <= {4{pcp2[15:8]}};
358
                                cyc_o <= 1'b1;
359
                                stb_o <= 1'b1;
360
                                we_o <= 1'b1;
361
                                case(sp[1:0])
362
                                2'd0:   sel_o <= 4'b0001;
363
                                2'd1:   sel_o <= 4'b0010;
364
                                2'd2:   sel_o <= 4'b0100;
365
                                2'd3:   sel_o <= 4'b1000;
366
                                endcase
367
                                adr_o <= {spage[31:8],sp[7:2],2'b00};
368
                                dat_o <= {4{pcp2[15:8]}};
369
                                sp <= sp_dec;
370
                                state <= BYTE_JSR1;
371
                        end
372
                `JSL:
373
                        begin
374
                                radr <= {spage[31:8],sp[7:2]};
375
                                wadr <= {spage[31:8],sp[7:2]};
376
                                radr2LSB <= sp[1:0];
377
                                wadr2LSB <= sp[1:0];
378
                                wdat <= {4{pcp4[31:24]}};
379
                                cyc_o <= 1'b1;
380
                                stb_o <= 1'b1;
381
                                we_o <= 1'b1;
382
                                case(sp[1:0])
383
                                2'd0:   sel_o <= 4'b0001;
384
                                2'd1:   sel_o <= 4'b0010;
385
                                2'd2:   sel_o <= 4'b0100;
386
                                2'd3:   sel_o <= 4'b1000;
387
                                endcase
388
                                adr_o <= {spage[31:8],sp[7:2],2'b00};
389
                                dat_o <= {4{pcp4[31:24]}};
390
                                sp <= sp_dec;
391
                                state <= BYTE_JSL1;
392
                        end
393
                `JSR_INDX:
394
                        begin
395
                                radr <= {spage[31:8],sp[7:2]};
396
                                wadr <= {spage[31:8],sp[7:2]};
397
                                radr2LSB <= sp[1:0];
398
                                wadr2LSB <= sp[1:0];
399
                                wdat <= {4{pcp2[15:8]}};
400
                                cyc_o <= 1'b1;
401
                                stb_o <= 1'b1;
402
                                we_o <= 1'b1;
403
                                case(sp_dec[1:0])
404
                                2'd0:   sel_o <= 4'b0001;
405
                                2'd1:   sel_o <= 4'b0010;
406
                                2'd2:   sel_o <= 4'b0100;
407
                                2'd3:   sel_o <= 4'b1000;
408
                                endcase
409
                                adr_o <= {spage[31:8],sp[7:2],2'b00};
410
                                dat_o <= {4{pcp2[15:8]}};
411
                                sp <= sp_dec;
412
                                state <= BYTE_JSR_INDX1;
413
                        end
414
                `RTS,`RTL:
415
                        begin
416
                                radr <= {spage[31:8],sp_inc[7:2]};
417
                                radr2LSB <= sp_inc[1:0];
418
                                sp <= sp_inc;
419
                                state <= BYTE_RTS1;
420
                        end
421
                `RTI:   begin
422
                                radr <= {spage[31:8],sp_inc[7:2]};
423
                                radr2LSB <= sp_inc[1:0];
424
                                sp <= sp_inc;
425
                                state <= BYTE_RTI9;
426
                                end
427
                `BEQ,`BNE,`BPL,`BMI,`BCC,`BCS,`BVC,`BVS,`BRA:
428
                        begin
429
//                              if (ir[15:8]==8'hFE) begin
430
//                                      radr <= {24'h1,sp[7:2]};
431
//                                      radr2LSB <= sp[1:0];
432
//                                      wadr <= {24'h1,sp[7:2]};
433
//                                      wadr2LSB <= sp[1:0];
434
//                                      case(sp[1:0])
435
//                                      2'd0:   sel_o <= 4'b0001;
436
//                                      2'd1:   sel_o <= 4'b0010;
437
//                                      2'd2:   sel_o <= 4'b0100;
438
//                                      2'd3:   sel_o <= 4'b1000;
439
//                                      endcase
440
//                                      wdat <= {4{pcp2[31:24]}};
441
//                                      cyc_o <= 1'b1;
442
//                                      stb_o <= 1'b1;
443
//                                      we_o <= 1'b1;
444
//                                      adr_o <= {24'h1,sp[7:2],2'b00};
445
//                                      dat_o <= {4{pcp2[31:24]}};
446
//                                      vect <= `SLP_VECT;
447
//                                      state <= BYTE_IRQ1;
448
//                              end
449
//                              else
450
                                if (ir[15:8]==8'hFF) begin
451
                                        if (takb)
452
                                                pc <= pc + {{16{ir[31]}},ir[31:16]};
453
                                        else
454
                                                pc <= pc + 32'd4;
455
                                end
456
                                else begin
457
                                        if (takb)
458
                                                pc <= pc + {{24{ir[15]}},ir[15:8]} + 32'd2;
459
                                        else
460
                                                pc <= pc + 32'd2;
461
                                end
462
                        end
463
                `PHP:
464
                        begin
465
                                cyc_o <= 1'b1;
466
                                stb_o <= 1'b1;
467
                                we_o <= 1'b1;
468
                                radr <= {spage[31:8],sp[7:2]};
469
                                radr2LSB <= sp[1:0];
470
                                wadr <= {spage[31:8],sp[7:2]};
471
                                wadr2LSB <= sp[1:0];
472
                                case(sp[1:0])
473
                                2'd0:   sel_o <= 4'b0001;
474
                                2'd1:   sel_o <= 4'b0010;
475
                                2'd2:   sel_o <= 4'b0100;
476
                                2'd3:   sel_o <= 4'b1000;
477
                                endcase
478
                                adr_o <= {spage[31:8],sp[7:2],2'b00};
479
                                dat_o <= {4{sr8}};
480
                                wdat <= {4{sr8}};
481
                                sp <= sp_dec;
482
                                state <= PHP1;
483
                        end
484
                `PHA:
485
                        begin
486
                                cyc_o <= 1'b1;
487
                                stb_o <= 1'b1;
488
                                we_o <= 1'b1;
489
                                radr <= {spage[31:8],sp[7:2]};
490
                                radr2LSB <= sp[1:0];
491
                                wadr <= {spage[31:8],sp[7:2]};
492
                                wadr2LSB <= sp[1:0];
493
                                case(sp[1:0])
494
                                2'd0:   sel_o <= 4'b0001;
495
                                2'd1:   sel_o <= 4'b0010;
496
                                2'd2:   sel_o <= 4'b0100;
497
                                2'd3:   sel_o <= 4'b1000;
498
                                endcase
499
                                adr_o <= {spage[31:8],sp[7:2],2'b00};
500
                                dat_o <= {4{acc8}};
501
                                wdat <= {4{acc8}};
502
                                sp <= sp_dec;
503
                                state <= PHP1;
504
                        end
505
                `PHX:
506
                        begin
507
                                cyc_o <= 1'b1;
508
                                stb_o <= 1'b1;
509
                                we_o <= 1'b1;
510
                                radr <= {spage[31:8],sp[7:2]};
511
                                radr2LSB <= sp[1:0];
512
                                wadr <= {spage[31:8],sp[7:2]};
513
                                wadr2LSB <= sp[1:0];
514
                                case(sp[1:0])
515
                                2'd0:   sel_o <= 4'b0001;
516
                                2'd1:   sel_o <= 4'b0010;
517
                                2'd2:   sel_o <= 4'b0100;
518
                                2'd3:   sel_o <= 4'b1000;
519
                                endcase
520
                                adr_o <= {spage[31:8],sp[7:2],2'b00};
521
                                dat_o <= {4{x8}};
522
                                wdat <= {4{x8}};
523
                                sp <= sp_dec;
524
                                state <= PHP1;
525
                        end
526
                `PHY:
527
                        begin
528
                                cyc_o <= 1'b1;
529
                                stb_o <= 1'b1;
530
                                we_o <= 1'b1;
531
                                radr <= {spage[31:8],sp[7:2]};
532
                                radr2LSB <= sp[1:0];
533
                                wadr <= {spage[31:8],sp[7:2]};
534
                                wadr2LSB <= sp[1:0];
535
                                case(sp[1:0])
536
                                2'd0:   sel_o <= 4'b0001;
537
                                2'd1:   sel_o <= 4'b0010;
538
                                2'd2:   sel_o <= 4'b0100;
539
                                2'd3:   sel_o <= 4'b1000;
540
                                endcase
541
                                adr_o <= {spage[31:8],sp[7:2],2'b00};
542
                                dat_o <= {4{y8}};
543
                                wdat <= {4{y8}};
544
                                sp <= sp_dec;
545
                                state <= PHP1;
546
                        end
547
                `PLP:
548
                        begin
549
                                radr <= {spage[31:8],sp_inc[7:2]};
550
                                radr2LSB <= sp_inc[1:0];
551
                                sp <= sp_inc;
552
                                state <= BYTE_PLP1;
553
                                pc <= pc + 32'd1;
554
                        end
555
                `PLA,`PLX,`PLY:
556
                        begin
557
                                radr <= {spage[31:8],sp_inc[7:2]};
558
                                radr2LSB <= sp_inc[1:0];
559
                                sp <= sp_inc;
560
                                state <= PLA1;
561
                                pc <= pc + 32'd1;
562
                        end
563
                default:        // unimplemented opcode
564
                        pc <= pc + 32'd1;
565
                endcase
566
        end
567
 

powered by: WebSVN 2.1.0

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