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

Subversion Repositories cpu6502_true_cycle

[/] [cpu6502_true_cycle/] [branches/] [avendor/] [rtl/] [vhdl/] [fsm_core_v2_0.vhd] - Blame information for rev 18

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 fpga_is_fu
-- VHDL Entity R6502_TC.fsm_core_V2_0.symbol
2
--
3
-- Created:
4
--          by - eda.UNKNOWN (ENTWICKL4-XP-PR)
5
--          at - 19:06:55 08.04.2008
6
--
7
-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13)
8
--
9
LIBRARY ieee;
10
USE ieee.std_logic_1164.all;
11
USE ieee.std_logic_arith.all;
12
 
13
entity fsm_core_V2_0 is
14
   port(
15
      adr_nxt_pc_i    : in     std_logic_vector (15 downto 0);
16
      adr_nxt_sp_i    : in     std_logic_vector (15 downto 0);
17
      adr_pc_i        : in     std_logic_vector (15 downto 0);
18
      adr_sp_i        : in     std_logic_vector (15 downto 0);
19
      clk_clk_i       : in     std_logic;
20
      cout_pc_i       : in     std_logic;
21
      d_alu_i         : in     std_logic_vector ( 7 downto 0 );
22
      d_i             : in     std_logic_vector ( 7 downto 0 );
23
      d_regs_out_i    : in     std_logic_vector ( 7 downto 0 );
24
      irq_n_i         : in     std_logic;
25
      nmi_i           : in     std_logic;
26
      q_a_i           : in     std_logic_vector ( 7 downto 0 );
27
      q_x_i           : in     std_logic_vector ( 7 downto 0 );
28
      q_y_i           : in     std_logic_vector ( 7 downto 0 );
29
      rdy_i           : in     std_logic;
30
      reg_0flag_i     : in     std_logic;
31
      reg_1flag_i     : in     std_logic;
32
      reg_6flag_i     : in     std_logic;
33
      reg_7flag_i     : in     std_logic;
34
      rst_rst_n_i     : in     std_logic;
35
      so_n_i          : in     std_logic;
36
      a_o             : out    std_logic_vector (15 downto 0);
37
      adr_o           : out    std_logic_vector (15 downto 0);
38
      ch_a_o          : out    std_logic_vector ( 7 downto 0 );
39
      ch_b_o          : out    std_logic_vector ( 7 downto 0 );
40
      d_o             : out    std_logic_vector ( 7 downto 0 );
41
      d_regs_in_o     : out    std_logic_vector ( 7 downto 0 );
42
      ld_o            : out    std_logic_vector ( 1 downto 0 );
43
      ld_pc_o         : out    std_logic;
44
      ld_sp_o         : out    std_logic;
45
      load_regs_o     : out    std_logic;
46
      offset_o        : out    std_logic_vector ( 15 downto 0 );
47
      rd_o            : out    std_logic;
48
      reg_0flag_o     : out    std_logic;
49
      reg_1flag_o     : out    std_logic;
50
      reg_3flag_o     : out    std_logic;
51
      reg_7flag_o     : out    std_logic;
52
      sync_o          : out    std_logic;
53
      wr_n_o          : out    std_logic;
54
      wr_o            : out    std_logic;
55
      sel_alu_as_o_i  : inout  std_logic;
56
      sel_alu_out_o_i : inout  std_logic_vector ( 2 downto 0 );
57
      sel_pc_as_o_i   : inout  std_logic;
58
      sel_pc_in_o_i   : inout  std_logic_vector ( 1 downto 0 );
59
      sel_pc_val_o_i  : inout  std_logic_vector ( 1 downto 0 );
60
      sel_rb_in_o_i   : inout  std_logic_vector ( 2 downto 0 );
61
      sel_rb_out_o_i  : inout  std_logic_vector ( 2 downto 0 );
62
      sel_reg_o_i     : inout  std_logic_vector ( 1 downto 0 );
63
      sel_sp_as_o_i   : inout  std_logic;
64
      sel_sp_in_o_i   : inout  std_logic_vector ( 1 downto 0 );
65
      sel_sp_val_o_i  : inout  std_logic_vector ( 1 downto 0 )
66
   );
67
 
68
-- Declarations
69
 
70
end fsm_core_V2_0 ;
71
 
72
-- Jens-D. Gutschmidt     Project:  R6502_TC  
73
 
74
-- scantara2003@yahoo.de                      
75
 
76
-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG                                                                                     
77
 
78
--                                                                                                                                             
79
 
80
-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by   
81
 
82
-- the Free Software Foundation, either version 3 of the License, or any later version.                                                        
83
 
84
--                                                                                                                                             
85
 
86
-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of              
87
 
88
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.                                  
89
 
90
--                                                                                                                                             
91
 
92
-- You should have received a copy of the GNU General Public License along with this program.  If not, see <http://www.gnu.org/licenses/>.     
93
 
94
--                                                                                                                                             
95
 
96
-- CVS Revisins History                                                                                                                        
97
 
98
--                                                                                                                                             
99
 
100
-- $Log: not supported by cvs2svn $                                                                                                                                       
101
 
102
--                                                                                                                                             
103
 
104
-- Title:  FSM for all op codes  
105
 
106
-- Path:  R6502_TC/fsm_core_V2_0/fsm  
107
 
108
-- Edited:  by eda on 08 Apr 2008  
109
 
110
--
111
-- VHDL Architecture R6502_TC.fsm_core_V2_0.fsm
112
--
113
-- Created:
114
--          by - eda.UNKNOWN (ENTWICKL4-XP-PR)
115
--          at - 19:06:56 08.04.2008
116
--
117
-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13)
118
--
119
LIBRARY ieee;
120
USE ieee.std_logic_1164.all;
121
USE ieee.std_logic_arith.all;
122
 
123
architecture fsm of fsm_core_V2_0 is
124
 
125
   -- Architecture Declarations
126
   signal reg_F : std_logic_vector( 7 DOWNTO 0 );
127
   signal reg_PC : std_logic_vector(15 DOWNTO 0);
128
   signal reg_PC1 : std_logic_vector( 15 DOWNTO 0 );
129
   signal sig_D_OUT : std_logic_vector( 7 DOWNTO 0 );
130
   signal sig_PC : std_logic_vector(15 DOWNTO 0);
131
   signal sig_RD : std_logic;
132
   signal sig_RWn : std_logic;
133
   signal sig_SYNC : std_logic;
134
   signal sig_WR : std_logic;
135
   signal zw_ALU : std_logic_vector( 8 DOWNTO 0 );
136
   signal zw_ALU1 : std_logic_vector( 8 DOWNTO 0 );
137
   signal zw_ALU2 : std_logic_vector( 8 DOWNTO 0 );
138
   signal zw_ALU3 : std_logic_vector( 8 DOWNTO 0 );
139
   signal zw_ALU4 : std_logic_vector( 8 DOWNTO 0 );
140
   signal zw_ALU5 : std_logic_vector( 8 DOWNTO 0 );
141
   signal zw_ALU6 : std_logic_vector( 8 DOWNTO 0 );
142
   signal zw_PC : std_logic_vector( 15 DOWNTO 0 );
143
   signal zw_REG_ALU : std_logic_vector( 8 DOWNTO 0 );
144
   signal zw_REG_NMI : std_logic;
145
   signal zw_REG_OP : std_logic_vector( 7 DOWNTO 0 );
146
   signal zw_REG_sig_PC : std_logic_vector(15 DOWNTO 0);
147
   signal zw_b1 : std_logic_vector( 7 DOWNTO 0 );
148
   signal zw_b2 : std_logic_vector( 7 DOWNTO 0 );
149
   signal zw_b3 : std_logic_vector( 7 DOWNTO 0 );
150
   signal zw_b4 : std_logic_vector( 7 DOWNTO 0 );
151
   signal zw_w1 : std_logic_vector( 15 DOWNTO 0 );
152
   signal zw_w2 : std_logic_vector( 15 DOWNTO 0 );
153
   signal zw_w3 : std_logic_vector( 15 DOWNTO 0 );
154
 
155
   subtype state_type is
156
      std_logic_vector(7 downto 0);
157
 
158
   -- State vector declaration
159
   attribute state_vector : string;
160
   attribute state_vector of fsm : architecture is "current_state";
161
 
162
   -- Hard encoding
163
   constant FETCH : state_type := "00000000";
164
   constant s1 : state_type := "00000001";
165
   constant s2 : state_type := "00000011";
166
   constant s5 : state_type := "00000010";
167
   constant s3 : state_type := "00000110";
168
   constant s4 : state_type := "00000111";
169
   constant s12 : state_type := "00000101";
170
   constant s16 : state_type := "00000100";
171
   constant s17 : state_type := "00001100";
172
   constant s24 : state_type := "00001101";
173
   constant s25 : state_type := "00001111";
174
   constant s271 : state_type := "00001110";
175
   constant s273 : state_type := "00001010";
176
   constant s304 : state_type := "00001011";
177
   constant s307 : state_type := "00001001";
178
   constant s177 : state_type := "00001000";
179
   constant s180 : state_type := "00011000";
180
   constant s181 : state_type := "00011001";
181
   constant s182 : state_type := "00011011";
182
   constant s183 : state_type := "00011010";
183
   constant s184 : state_type := "00011110";
184
   constant s185 : state_type := "00011111";
185
   constant s186 : state_type := "00011101";
186
   constant s187 : state_type := "00011100";
187
   constant s188 : state_type := "00010100";
188
   constant s189 : state_type := "00010101";
189
   constant s190 : state_type := "00010111";
190
   constant s191 : state_type := "00010110";
191
   constant s192 : state_type := "00010010";
192
   constant s193 : state_type := "00010011";
193
   constant s377 : state_type := "00010001";
194
   constant s381 : state_type := "00010000";
195
   constant s378 : state_type := "00110000";
196
   constant s382 : state_type := "00110001";
197
   constant s379 : state_type := "00110011";
198
   constant s383 : state_type := "00110010";
199
   constant s384 : state_type := "00110110";
200
   constant s380 : state_type := "00110111";
201
   constant s385 : state_type := "00110101";
202
   constant s386 : state_type := "00110100";
203
   constant s387 : state_type := "00111100";
204
   constant s388 : state_type := "00111101";
205
   constant s389 : state_type := "00111111";
206
   constant s391 : state_type := "00111110";
207
   constant s392 : state_type := "00111010";
208
   constant s390 : state_type := "00111011";
209
   constant s393 : state_type := "00111001";
210
   constant s394 : state_type := "00111000";
211
   constant s395 : state_type := "00101000";
212
   constant s396 : state_type := "00101001";
213
   constant s397 : state_type := "00101011";
214
   constant s398 : state_type := "00101010";
215
   constant s399 : state_type := "00101110";
216
   constant s400 : state_type := "00101111";
217
   constant s401 : state_type := "00101101";
218
   constant s526 : state_type := "00101100";
219
   constant s527 : state_type := "00100100";
220
   constant s528 : state_type := "00100101";
221
   constant s529 : state_type := "00100111";
222
   constant s530 : state_type := "00100110";
223
   constant s531 : state_type := "00100010";
224
   constant s544 : state_type := "00100011";
225
   constant s545 : state_type := "00100001";
226
   constant s546 : state_type := "00100000";
227
   constant s547 : state_type := "01100000";
228
   constant s549 : state_type := "01100001";
229
   constant s550 : state_type := "01100011";
230
   constant s404 : state_type := "01100010";
231
   constant s556 : state_type := "01100110";
232
   constant s557 : state_type := "01100111";
233
   constant s579 : state_type := "01100101";
234
   constant s201 : state_type := "01100100";
235
   constant s202 : state_type := "01101100";
236
   constant s210 : state_type := "01101101";
237
   constant s211 : state_type := "01101111";
238
   constant s215 : state_type := "01101110";
239
   constant s217 : state_type := "01101010";
240
   constant s218 : state_type := "01101011";
241
   constant s222 : state_type := "01101001";
242
   constant s223 : state_type := "01101000";
243
   constant s224 : state_type := "01111000";
244
   constant s225 : state_type := "01111001";
245
   constant s226 : state_type := "01111011";
246
   constant s243 : state_type := "01111010";
247
   constant s244 : state_type := "01111110";
248
   constant s247 : state_type := "01111111";
249
   constant s344 : state_type := "01111101";
250
   constant s343 : state_type := "01111100";
251
   constant s250 : state_type := "01110100";
252
   constant s251 : state_type := "01110101";
253
   constant s351 : state_type := "01110111";
254
   constant s361 : state_type := "01110110";
255
   constant s360 : state_type := "01110010";
256
   constant s403 : state_type := "01110011";
257
   constant s406 : state_type := "01110001";
258
   constant s407 : state_type := "01110000";
259
   constant s409 : state_type := "01010000";
260
   constant s412 : state_type := "01010001";
261
   constant s413 : state_type := "01010011";
262
   constant s416 : state_type := "01010010";
263
   constant s418 : state_type := "01010110";
264
   constant s510 : state_type := "01010111";
265
   constant s553 : state_type := "01010101";
266
   constant s555 : state_type := "01010100";
267
   constant s558 : state_type := "01011100";
268
   constant s560 : state_type := "01011101";
269
   constant s561 : state_type := "01011111";
270
   constant s563 : state_type := "01011110";
271
   constant s564 : state_type := "01011010";
272
   constant s565 : state_type := "01011011";
273
   constant s566 : state_type := "01011001";
274
   constant s266 : state_type := "01011000";
275
   constant s301 : state_type := "01001000";
276
   constant s302 : state_type := "01001001";
277
   constant RES : state_type := "01001011";
278
   constant s511 : state_type := "01001010";
279
   constant s559 : state_type := "01001110";
280
   constant s562 : state_type := "01001111";
281
   constant s567 : state_type := "01001101";
282
   constant s568 : state_type := "01001100";
283
   constant s569 : state_type := "01000100";
284
   constant s570 : state_type := "01000101";
285
   constant s571 : state_type := "01000111";
286
   constant s572 : state_type := "01000110";
287
   constant s573 : state_type := "01000010";
288
   constant s574 : state_type := "01000011";
289
   constant s548 : state_type := "01000001";
290
   constant s551 : state_type := "01000000";
291
   constant s552 : state_type := "11000000";
292
   constant s575 : state_type := "11000001";
293
   constant s576 : state_type := "11000011";
294
   constant s577 : state_type := "11000010";
295
   constant s532 : state_type := "11000110";
296
   constant s533 : state_type := "11000111";
297
   constant s534 : state_type := "11000101";
298
   constant s535 : state_type := "11000100";
299
   constant s536 : state_type := "11001100";
300
   constant s537 : state_type := "11001101";
301
 
302
   -- Declare current and next state signals
303
   signal current_state : state_type;
304
   signal next_state : state_type;
305
 
306
   -- Declare any pre-registered internal signals
307
   signal d_o_cld : std_logic_vector ( 7 downto 0 );
308
   signal rd_o_cld : std_logic ;
309
   signal sync_o_cld : std_logic ;
310
   signal wr_n_o_cld : std_logic ;
311
   signal wr_o_cld : std_logic ;
312
   signal sel_alu_as_o_i_cld : std_logic ;
313
   signal sel_alu_out_o_i_cld : std_logic_vector ( 2 downto 0 );
314
   signal sel_pc_as_o_i_cld : std_logic ;
315
   signal sel_pc_in_o_i_cld : std_logic_vector ( 1 downto 0 );
316
   signal sel_pc_val_o_i_cld : std_logic_vector ( 1 downto 0 );
317
   signal sel_rb_in_o_i_cld : std_logic_vector ( 2 downto 0 );
318
   signal sel_rb_out_o_i_cld : std_logic_vector ( 2 downto 0 );
319
   signal sel_reg_o_i_cld : std_logic_vector ( 1 downto 0 );
320
   signal sel_sp_as_o_i_cld : std_logic ;
321
   signal sel_sp_in_o_i_cld : std_logic_vector ( 1 downto 0 );
322
   signal sel_sp_val_o_i_cld : std_logic_vector ( 1 downto 0 );
323
 
324
begin
325
 
326
   -----------------------------------------------------------------
327
   clocked_proc : process (
328
      clk_clk_i,
329
      rst_rst_n_i
330
   )
331
   -----------------------------------------------------------------
332
   begin
333
      if (rst_rst_n_i = '0') then
334
         current_state <= RES;
335
         -- Default Reset Values
336
         d_o_cld <= X"00";
337
         rd_o_cld <= '0';
338
         sync_o_cld <= '0';
339
         wr_n_o_cld <= '1';
340
         wr_o_cld <= '0';
341
         sel_alu_as_o_i_cld <= '0';
342
         sel_alu_out_o_i_cld <= "000";
343
         sel_pc_as_o_i_cld <= '0';
344
         sel_pc_in_o_i_cld <= "00";
345
         sel_pc_val_o_i_cld <= "00";
346
         sel_rb_in_o_i_cld <= "000";
347
         sel_rb_out_o_i_cld <= "000";
348
         sel_reg_o_i_cld <= "00";
349
         sel_sp_as_o_i_cld <= '0';
350
         sel_sp_in_o_i_cld <= "00";
351
         sel_sp_val_o_i_cld <= "00";
352
         reg_F <= "00000100";
353
         reg_PC <= X"0000";
354
         reg_PC1 <= X"0000";
355
         sig_PC <= X"0000";
356
         zw_PC <= X"0000";
357
         zw_REG_ALU <= '0' & X"00";
358
         zw_REG_NMI <= '0';
359
         zw_REG_OP <= X"00";
360
         zw_REG_sig_PC <= X"0000";
361
         zw_b1 <= X"00";
362
         zw_b2 <= X"00";
363
         zw_b3 <= X"00";
364
         zw_b4 <= X"00";
365
         zw_w1 <= X"0000";
366
         zw_w2 <= X"0000";
367
         zw_w3 <= X"0000";
368
      elsif (clk_clk_i'event and clk_clk_i = '1') then
369
         current_state <= next_state;
370
         -- Default Assignment To Internals
371
         reg_F <= reg_F or ('0' & (not so_n_i) & "000000");
372
         reg_PC <= reg_PC;
373
         reg_PC1 <= reg_PC1;
374
         sig_PC <= sig_PC;
375
         zw_PC <= zw_PC;
376
         zw_REG_ALU <= zw_REG_ALU;
377
         zw_REG_NMI <= zw_REG_NMI or nmi_i;
378
         zw_REG_OP <= zw_REG_OP;
379
         zw_REG_sig_PC <= zw_REG_sig_PC;
380
         zw_b1 <= zw_b1;
381
         zw_b2 <= zw_b2;
382
         zw_b3 <= zw_b3;
383
         zw_b4 <= zw_b4;
384
         zw_w1 <= zw_w1;
385
         zw_w2 <= zw_w2;
386
         zw_w3 <= zw_w3;
387
         d_o_cld <= sig_D_OUT;
388
         rd_o_cld <= sig_RD;
389
         sync_o_cld <= sig_SYNC;
390
         wr_n_o_cld <= sig_RWn;
391
         wr_o_cld <= sig_WR;
392
         sel_alu_as_o_i_cld <= sel_alu_as_o_i;
393
         sel_alu_out_o_i_cld <= sel_alu_out_o_i;
394
         sel_pc_as_o_i_cld <= sel_pc_as_o_i;
395
         sel_pc_in_o_i_cld <= sel_pc_in_o_i;
396
         sel_pc_val_o_i_cld <= sel_pc_val_o_i;
397
         sel_rb_in_o_i_cld <= sel_rb_in_o_i;
398
         sel_rb_out_o_i_cld <= sel_rb_out_o_i;
399
         sel_reg_o_i_cld <= sel_reg_o_i;
400
         sel_sp_as_o_i_cld <= sel_sp_as_o_i;
401
         sel_sp_in_o_i_cld <= sel_sp_in_o_i;
402
         sel_sp_val_o_i_cld <= sel_sp_val_o_i;
403
 
404
         -- Combined Actions
405
         case current_state is
406
            when FETCH =>
407
               zw_REG_OP <= d_i;
408
               if ((zw_REG_NMI = '1') and (rdy_i = '1')) then
409
                  sig_PC <= adr_nxt_pc_i;
410
                  sel_sp_in_o_i_cld <= "00";
411
                  sel_sp_as_o_i_cld <= '0';
412
                  sel_sp_val_o_i_cld <= "00";
413
                  zw_REG_NMI <= '0';
414
               elsif ((irq_n_i = '0' and
415
                      reg_F(2) = '0') and (rdy_i = '1')) then
416
                  sig_PC <= adr_nxt_pc_i;
417
                  sel_sp_in_o_i_cld <= "00";
418
                  sel_sp_as_o_i_cld <= '0';
419
                  sel_sp_val_o_i_cld <= "00";
420
               elsif ((d_i = X"69" or
421
                      d_i = X"65" or
422
                      d_i = X"75" or
423
                      d_i = X"6D" or
424
                      d_i = X"7D" or
425
                      d_i = X"79" or
426
                      d_i = X"61" or
427
                      d_i = X"71") and (rdy_i = '1')) then
428
                  sig_PC <= adr_nxt_pc_i;
429
                  sel_alu_out_o_i_cld <= "110";
430
                  sel_alu_as_o_i_cld <= '0';
431
                  sel_reg_o_i_cld <= "00";
432
                  sel_rb_in_o_i_cld <= "011";
433
                  zw_b1(0) <= reg_F(7);
434
               elsif ((d_i = X"06" or
435
                      d_i = X"16" or
436
                      d_i = X"0E" or
437
                      d_i = X"1E") and (rdy_i = '1')) then
438
                  sig_PC <= adr_nxt_pc_i;
439
                  sel_alu_out_o_i_cld <= "110";
440
                  sel_alu_as_o_i_cld <= '0';
441
               elsif ((d_i = X"90" or
442
                      d_i = X"B0" or
443
                      d_i = X"F0" or
444
                      d_i = X"30" or
445
                      d_i = X"D0" or
446
                      d_i = X"10" or
447
                      d_i = X"50" or
448
                      d_i = X"70") and (rdy_i = '1')) then
449
                  sig_PC <= adr_nxt_pc_i;
450
                  zw_b3 <= adr_nxt_pc_i (15 downto 8);
451
               elsif ((d_i = X"24" or
452
                      d_i = X"2C") and (rdy_i = '1')) then
453
                  sig_PC <= adr_nxt_pc_i;
454
                  sel_alu_out_o_i_cld <= "110";
455
                  sel_alu_as_o_i_cld <= '0';
456
               elsif ((d_i = X"00") and (rdy_i = '1')) then
457
                  sig_PC <= adr_nxt_pc_i;
458
                  sel_sp_in_o_i_cld <= "00";
459
                  sel_sp_as_o_i_cld <= '0';
460
                  sel_sp_val_o_i_cld <= "00";
461
               elsif ((d_i = X"18") and (rdy_i = '1')) then
462
               elsif ((d_i = X"D8") and (rdy_i = '1')) then
463
               elsif ((d_i = X"58") and (rdy_i = '1')) then
464
               elsif ((d_i = X"B8") and (rdy_i = '1')) then
465
               elsif ((d_i = X"E0" or
466
                      d_i = X"E4" or
467
                      d_i = X"EC") and (rdy_i = '1')) then
468
                  sel_rb_out_o_i_cld <= "001";
469
                  sig_PC <= adr_nxt_pc_i;
470
                  sel_alu_out_o_i_cld <= "110";
471
                  sel_alu_as_o_i_cld <= '0';
472
               elsif ((d_i = X"C0" or
473
                      d_i = X"C4" or
474
                      d_i = X"CC") and (rdy_i = '1')) then
475
                  sel_rb_out_o_i_cld <= "010";
476
                  sig_PC <= adr_nxt_pc_i;
477
                  sel_alu_out_o_i_cld <= "110";
478
                  sel_alu_as_o_i_cld <= '0';
479
               elsif ((d_i = X"C6" or
480
                      d_i = X"D6" or
481
                      d_i = X"CE" or
482
                      d_i = X"DE") and (rdy_i = '1')) then
483
                  zw_b4 <= X"FF";
484
                  sig_PC <= adr_nxt_pc_i;
485
                  sel_alu_out_o_i_cld <= "110";
486
                  sel_alu_as_o_i_cld <= '0';
487
               elsif ((d_i = X"CA") and (rdy_i = '1')) then
488
                  sel_rb_out_o_i_cld <= "001";
489
                  sel_reg_o_i_cld <= "01";
490
                  sel_rb_in_o_i_cld <= "011";
491
                  zw_b4 <= X"FF";
492
                  sel_alu_out_o_i_cld <= "110";
493
                  sel_alu_as_o_i_cld <= '0';
494
               elsif ((d_i = X"88") and (rdy_i = '1')) then
495
                  sel_rb_out_o_i_cld <= "010";
496
                  sel_reg_o_i_cld <= "10";
497
                  sel_rb_in_o_i_cld <= "011";
498
                  zw_b4 <= X"FF";
499
                  sel_alu_out_o_i_cld <= "110";
500
                  sel_alu_as_o_i_cld <= '0';
501
               elsif ((d_i = X"49" or
502
                      d_i = X"45" or
503
                      d_i = X"55" or
504
                      d_i = X"4D" or
505
                      d_i = X"5D" or
506
                      d_i = X"59" or
507
                      d_i = X"41" or
508
                      d_i = X"51" or
509
                      d_i = X"09" or
510
                      d_i = X"05" or
511
                      d_i = X"15" or
512
                      d_i = X"0D" or
513
                      d_i = X"1D" or
514
                      d_i = X"19" or
515
                      d_i = X"01" or
516
                      d_i = X"11" or
517
                      d_i = X"29" or
518
                      d_i = X"25" or
519
                      d_i = X"35" or
520
                      d_i = X"2D" or
521
                      d_i = X"3D" or
522
                      d_i = X"39" or
523
                      d_i = X"21" or
524
                      d_i = X"31" or
525
                      d_i = X"C9" or
526
                      d_i = X"C5" or
527
                      d_i = X"D5" or
528
                      d_i = X"CD" or
529
                      d_i = X"DD" or
530
                      d_i = X"D9" or
531
                      d_i = X"C1" or
532
                      d_i = X"D1") and (rdy_i = '1')) then
533
                  sel_rb_out_o_i_cld <= "000";
534
                  sel_reg_o_i_cld <= "00";
535
                  sel_rb_in_o_i_cld <= "011";
536
                  sel_alu_out_o_i_cld <= "110";
537
                  sel_alu_as_o_i_cld <= '0';
538
                  sig_PC <= adr_nxt_pc_i;
539
                  sel_alu_out_o_i_cld <= "110";
540
                  sel_alu_as_o_i_cld <= '0';
541
               elsif ((d_i = X"E6" or
542
                      d_i = X"F6" or
543
                      d_i = X"EE" or
544
                      d_i = X"FE") and (rdy_i = '1')) then
545
                  zw_b4 <= X"01";
546
                  sig_PC <= adr_nxt_pc_i;
547
                  sel_alu_out_o_i_cld <= "110";
548
                  sel_alu_as_o_i_cld <= '0';
549
               elsif ((d_i = X"E8") and (rdy_i = '1')) then
550
                  sel_rb_out_o_i_cld <= "001";
551
                  sel_reg_o_i_cld <= "01";
552
                  sel_rb_in_o_i_cld <= "011";
553
                  zw_b4 <= X"01";
554
                  sel_alu_out_o_i_cld <= "110";
555
                  sel_alu_as_o_i_cld <= '0';
556
               elsif ((d_i = X"C8") and (rdy_i = '1')) then
557
                  sel_rb_out_o_i_cld <= "010";
558
                  sel_reg_o_i_cld <= "10";
559
                  sel_rb_in_o_i_cld <= "011";
560
                  zw_b4 <= X"01";
561
                  sel_alu_out_o_i_cld <= "110";
562
                  sel_alu_as_o_i_cld <= '0';
563
               elsif ((d_i = X"4C" or
564
                      d_i = X"6C") and (rdy_i = '1')) then
565
                  sig_PC <= adr_nxt_pc_i;
566
               elsif ((d_i = X"20") and (rdy_i = '1')) then
567
                  sig_PC <= adr_nxt_pc_i;
568
               elsif ((d_i = X"A9" or
569
                      d_i = X"A5" or
570
                      d_i = X"B5" or
571
                      d_i = X"AD" or
572
                      d_i = X"BD" or
573
                      d_i = X"B9" or
574
                      d_i = X"A1" or
575
                      d_i = X"B1") and (rdy_i = '1')) then
576
                  sel_reg_o_i_cld <= "00";
577
                  sel_rb_in_o_i_cld <= "011";
578
                  sel_alu_out_o_i_cld <= "110";
579
                  sel_alu_as_o_i_cld <= '0';
580
                  sig_PC <= adr_nxt_pc_i;
581
                  sel_alu_out_o_i_cld <= "110";
582
                  sel_alu_as_o_i_cld <= '0';
583
               elsif ((d_i = X"A2" or
584
                      d_i = X"A6" or
585
                      d_i = X"B6" or
586
                      d_i = X"AE" or
587
                      d_i = X"BE") and (rdy_i = '1')) then
588
                  sel_reg_o_i_cld <= "01";
589
                  sel_rb_in_o_i_cld <= "011";
590
                  sel_alu_out_o_i_cld <= "110";
591
                  sel_alu_as_o_i_cld <= '0';
592
                  sig_PC <= adr_nxt_pc_i;
593
                  sel_alu_out_o_i_cld <= "110";
594
                  sel_alu_as_o_i_cld <= '0';
595
               elsif ((d_i = X"A0" or
596
                      d_i = X"A4" or
597
                      d_i = X"B4" or
598
                      d_i = X"AC" or
599
                      d_i = X"BC") and (rdy_i = '1')) then
600
                  sel_reg_o_i_cld <= "10";
601
                  sel_rb_in_o_i_cld <= "011";
602
                  sel_alu_out_o_i_cld <= "110";
603
                  sel_alu_as_o_i_cld <= '0';
604
                  sig_PC <= adr_nxt_pc_i;
605
                  sel_alu_out_o_i_cld <= "110";
606
                  sel_alu_as_o_i_cld <= '0';
607
               elsif ((d_i = X"46" or
608
                      d_i = X"56" or
609
                      d_i = X"4E" or
610
                      d_i = X"5E") and (rdy_i = '1')) then
611
                  sig_PC <= adr_nxt_pc_i;
612
                  sel_alu_out_o_i_cld <= "110";
613
                  sel_alu_as_o_i_cld <= '0';
614
               elsif ((d_i = X"EA") and (rdy_i = '1')) then
615
               elsif ((d_i = X"48") and (rdy_i = '1')) then
616
                  sig_PC <= adr_nxt_pc_i;
617
               elsif ((d_i = X"08") and (rdy_i = '1')) then
618
                  sig_PC <= adr_nxt_pc_i;
619
               elsif ((d_i = X"68") and (rdy_i = '1')) then
620
                  sel_sp_in_o_i_cld <= "00";
621
                  sel_sp_as_o_i_cld <= '0';
622
                  sel_sp_val_o_i_cld <= "00";
623
                  sel_alu_out_o_i_cld <= "110";
624
                  sel_alu_as_o_i_cld <= '0';
625
                  sel_reg_o_i_cld <= "00";
626
                  sel_rb_in_o_i_cld <= "011";
627
               elsif ((d_i = X"28") and (rdy_i = '1')) then
628
                  sel_sp_in_o_i_cld <= "00";
629
                  sel_sp_as_o_i_cld <= '0';
630
                  sel_sp_val_o_i_cld <= "00";
631
               elsif ((d_i = X"26" or
632
                      d_i = X"36" or
633
                      d_i = X"2E" or
634
                      d_i = X"3E") and (rdy_i = '1')) then
635
                  sig_PC <= adr_nxt_pc_i;
636
                  sel_alu_out_o_i_cld <= "110";
637
                  sel_alu_as_o_i_cld <= '0';
638
               elsif ((d_i = X"66" or
639
                      d_i = X"76" or
640
                      d_i = X"6E" or
641
                      d_i = X"7E") and (rdy_i = '1')) then
642
                  sig_PC <= adr_nxt_pc_i;
643
                  sel_alu_out_o_i_cld <= "110";
644
                  sel_alu_as_o_i_cld <= '0';
645
               elsif ((d_i = X"40") and (rdy_i = '1')) then
646
                  sig_PC <= adr_nxt_pc_i;
647
               elsif ((d_i = X"60") and (rdy_i = '1')) then
648
                  sig_PC <= adr_nxt_pc_i;
649
                  sel_sp_in_o_i_cld <= "00";
650
                  sel_sp_as_o_i_cld <= '0';
651
                  sel_sp_val_o_i_cld <= "00";
652
               elsif ((d_i = X"E9" or
653
                      d_i = X"E5" or
654
                      d_i = X"F5" or
655
                      d_i = X"ED" or
656
                      d_i = X"FD" or
657
                      d_i = X"F9" or
658
                      d_i = X"E1" or
659
                      d_i = X"F1") and (rdy_i = '1')) then
660
                  sig_PC <= adr_nxt_pc_i;
661
                  sel_alu_out_o_i_cld <= "110";
662
                  sel_alu_as_o_i_cld <= '0';
663
                  sel_reg_o_i_cld <= "00";
664
                  sel_rb_in_o_i_cld <= "011";
665
                  zw_b1(0) <= reg_F(7);
666
               elsif ((d_i = X"38") and (rdy_i = '1')) then
667
               elsif ((d_i = X"F8") and (rdy_i = '1')) then
668
               elsif ((d_i = X"78") and (rdy_i = '1')) then
669
               elsif ((d_i = X"85" or
670
                      d_i = X"95" or
671
                      d_i = X"8D" or
672
                      d_i = X"9D" or
673
                      d_i = X"99" or
674
                      d_i = X"81" or
675
                      d_i = X"91" or
676
                      d_i = X"11") and (rdy_i = '1')) then
677
                  sel_rb_out_o_i_cld <= "000";
678
                  sel_alu_out_o_i_cld <= "110";
679
                  sel_alu_as_o_i_cld <= '0';
680
                  sig_PC <= adr_nxt_pc_i;
681
                  sel_alu_out_o_i_cld <= "110";
682
                  sel_alu_as_o_i_cld <= '0';
683
               elsif ((d_i = X"86" or
684
                      d_i = X"96" or
685
                      d_i = X"8E") and (rdy_i = '1')) then
686
                  sel_rb_out_o_i_cld <= "001";
687
                  sel_alu_out_o_i_cld <= "110";
688
                  sel_alu_as_o_i_cld <= '0';
689
                  sig_PC <= adr_nxt_pc_i;
690
                  sel_alu_out_o_i_cld <= "110";
691
                  sel_alu_as_o_i_cld <= '0';
692
               elsif ((d_i = X"84" or
693
                      d_i = X"94" or
694
                      d_i = X"8C") and (rdy_i = '1')) then
695
                  sel_rb_out_o_i_cld <= "010";
696
                  sel_alu_out_o_i_cld <= "110";
697
                  sel_alu_as_o_i_cld <= '0';
698
                  sig_PC <= adr_nxt_pc_i;
699
                  sel_alu_out_o_i_cld <= "110";
700
                  sel_alu_as_o_i_cld <= '0';
701
               elsif ((d_i = X"AA") and (rdy_i = '1')) then
702
                  sel_rb_out_o_i_cld <= "000";
703
                  sel_reg_o_i_cld <= "01";
704
                  sel_rb_in_o_i_cld <= "000";
705
                  sel_alu_out_o_i_cld <= "110";
706
                  sel_alu_as_o_i_cld <= '0';
707
                  sel_sp_in_o_i_cld <= "01";
708
                  sel_sp_as_o_i_cld <= '0';
709
                  sel_sp_val_o_i_cld <= "00";
710
               elsif ((d_i = X"0A") and (rdy_i = '1')) then
711
                  sel_rb_out_o_i_cld <= "000";
712
                  sel_reg_o_i_cld <= "00";
713
                  sel_rb_in_o_i_cld <= "011";
714
                  sel_alu_out_o_i_cld <= "110";
715
                  sel_alu_as_o_i_cld <= '0';
716
               elsif ((d_i = X"4A") and (rdy_i = '1')) then
717
                  sel_rb_out_o_i_cld <= "000";
718
                  sel_reg_o_i_cld <= "00";
719
                  sel_rb_in_o_i_cld <= "011";
720
                  sel_alu_out_o_i_cld <= "110";
721
                  sel_alu_as_o_i_cld <= '0';
722
               elsif ((d_i = X"2A") and (rdy_i = '1')) then
723
                  sel_rb_out_o_i_cld <= "000";
724
                  sel_reg_o_i_cld <= "00";
725
                  sel_rb_in_o_i_cld <= "011";
726
                  sel_alu_out_o_i_cld <= "110";
727
                  sel_alu_as_o_i_cld <= '0';
728
               elsif ((d_i = X"6A") and (rdy_i = '1')) then
729
                  sel_rb_out_o_i_cld <= "000";
730
                  sel_reg_o_i_cld <= "00";
731
                  sel_rb_in_o_i_cld <= "011";
732
                  sel_alu_out_o_i_cld <= "110";
733
                  sel_alu_as_o_i_cld <= '0';
734
               elsif ((d_i = X"A8") and (rdy_i = '1')) then
735
                  sel_rb_out_o_i_cld <= "000";
736
                  sel_reg_o_i_cld <= "10";
737
                  sel_rb_in_o_i_cld <= "000";
738
                  sel_alu_out_o_i_cld <= "110";
739
                  sel_alu_as_o_i_cld <= '0';
740
                  sel_sp_in_o_i_cld <= "01";
741
                  sel_sp_as_o_i_cld <= '0';
742
                  sel_sp_val_o_i_cld <= "00";
743
               elsif ((d_i = X"98") and (rdy_i = '1')) then
744
                  sel_rb_out_o_i_cld <= "010";
745
                  sel_reg_o_i_cld <= "00";
746
                  sel_rb_in_o_i_cld <= "001";
747
                  sel_alu_out_o_i_cld <= "110";
748
                  sel_alu_as_o_i_cld <= '0';
749
                  sel_sp_in_o_i_cld <= "01";
750
                  sel_sp_as_o_i_cld <= '0';
751
                  sel_sp_val_o_i_cld <= "00";
752
               elsif ((d_i = X"BA") and (rdy_i = '1')) then
753
                  sel_rb_out_o_i_cld <= "001";
754
                  sel_reg_o_i_cld <= "01";
755
                  sel_rb_in_o_i_cld <= "011";
756
                  sel_alu_out_o_i_cld <= "110";
757
                  sel_alu_as_o_i_cld <= '0';
758
                  sel_sp_in_o_i_cld <= "01";
759
                  sel_sp_as_o_i_cld <= '0';
760
                  sel_sp_val_o_i_cld <= "00";
761
               elsif ((d_i = X"8A") and (rdy_i = '1')) then
762
                  sel_rb_out_o_i_cld <= "001";
763
                  sel_reg_o_i_cld <= "00";
764
                  sel_rb_in_o_i_cld <= "010";
765
                  sel_alu_out_o_i_cld <= "110";
766
                  sel_alu_as_o_i_cld <= '0';
767
                  sel_sp_in_o_i_cld <= "01";
768
                  sel_sp_as_o_i_cld <= '0';
769
                  sel_sp_val_o_i_cld <= "00";
770
               elsif ((d_i = X"9A") and (rdy_i = '1')) then
771
                  sel_rb_out_o_i_cld <= "001";
772
                  sel_reg_o_i_cld <= "11";
773
                  sel_rb_in_o_i_cld <= "111";
774
                  sel_alu_out_o_i_cld <= "110";
775
                  sel_alu_as_o_i_cld <= '0';
776
                  sel_sp_in_o_i_cld <= "01";
777
                  sel_sp_as_o_i_cld <= '0';
778
                  sel_sp_val_o_i_cld <= "00";
779
               end if;
780
            when s1 =>
781
               if (rdy_i = '1') then
782
                  sig_PC <= adr_pc_i;
783
                  sel_pc_in_o_i_cld <= "00";
784
                  sel_pc_as_o_i_cld <= '0';
785
                  sel_pc_val_o_i_cld <= "00";
786
                  sel_sp_in_o_i_cld <= "00";
787
                  sel_sp_as_o_i_cld <= '1';
788
                  sel_sp_val_o_i_cld <= "00";
789
               end if;
790
            when s2 =>
791
               if (rdy_i = '1') then
792
                  sig_PC <= adr_pc_i;
793
                  reg_F(0) <= '1';
794
                  sel_pc_in_o_i_cld <= "00";
795
                  sel_pc_as_o_i_cld <= '0';
796
                  sel_pc_val_o_i_cld <= "00";
797
                  sel_sp_in_o_i_cld <= "00";
798
                  sel_sp_as_o_i_cld <= '1';
799
                  sel_sp_val_o_i_cld <= "00";
800
               end if;
801
            when s5 =>
802
               if (rdy_i = '1') then
803
                  sig_PC <= adr_pc_i;
804
                  reg_F(3) <= '1';
805
                  sel_pc_in_o_i_cld <= "00";
806
                  sel_pc_as_o_i_cld <= '0';
807
                  sel_pc_val_o_i_cld <= "00";
808
                  sel_sp_in_o_i_cld <= "00";
809
                  sel_sp_as_o_i_cld <= '1';
810
                  sel_sp_val_o_i_cld <= "00";
811
               end if;
812
            when s3 =>
813
               sig_PC <= adr_pc_i;
814
               if (rdy_i = '1') then
815
                  sig_PC <= adr_pc_i;
816
                  reg_F(2) <= '1';
817
                  sel_pc_in_o_i_cld <= "00";
818
                  sel_pc_as_o_i_cld <= '0';
819
                  sel_pc_val_o_i_cld <= "00";
820
                  sel_sp_in_o_i_cld <= "00";
821
                  sel_sp_as_o_i_cld <= '1';
822
                  sel_sp_val_o_i_cld <= "00";
823
               end if;
824
            when s4 =>
825
               if (rdy_i = '1' and
826
                   zw_REG_OP = X"9A") then
827
                  sig_PC <= adr_pc_i;
828
                  sel_pc_in_o_i_cld <= "00";
829
                  sel_pc_as_o_i_cld <= '0';
830
                  sel_pc_val_o_i_cld <= "00";
831
                  sel_sp_in_o_i_cld <= "00";
832
                  sel_sp_as_o_i_cld <= '1';
833
                  sel_sp_val_o_i_cld <= "00";
834
               elsif (rdy_i = '1' and
835
                      zw_REG_OP = X"BA") then
836
                  sig_PC <= adr_pc_i;
837
                  reg_F(7) <= reg_7flag_i;
838
                  reg_F(1) <= reg_1flag_i;
839
                  sel_pc_in_o_i_cld <= "00";
840
                  sel_pc_as_o_i_cld <= '0';
841
                  sel_pc_val_o_i_cld <= "00";
842
                  sel_sp_in_o_i_cld <= "00";
843
                  sel_sp_as_o_i_cld <= '1';
844
                  sel_sp_val_o_i_cld <= "00";
845
               elsif (rdy_i = '1') then
846
                  sig_PC <= adr_pc_i;
847
                  reg_F(7) <= reg_7flag_i;
848
                  reg_F(1) <= reg_1flag_i;
849
                  sel_pc_in_o_i_cld <= "00";
850
                  sel_pc_as_o_i_cld <= '0';
851
                  sel_pc_val_o_i_cld <= "00";
852
                  sel_sp_in_o_i_cld <= "00";
853
                  sel_sp_as_o_i_cld <= '1';
854
                  sel_sp_val_o_i_cld <= "00";
855
               end if;
856
            when s12 =>
857
               if (rdy_i = '1') then
858
                  sig_PC <= adr_pc_i;
859
                  reg_F(0) <= '0';
860
                  sel_pc_in_o_i_cld <= "00";
861
                  sel_pc_as_o_i_cld <= '0';
862
                  sel_pc_val_o_i_cld <= "00";
863
                  sel_sp_in_o_i_cld <= "00";
864
                  sel_sp_as_o_i_cld <= '1';
865
                  sel_sp_val_o_i_cld <= "00";
866
               end if;
867
            when s16 =>
868
               if (rdy_i = '1') then
869
                  sig_PC <= adr_pc_i;
870
                  reg_F(3) <= '0';
871
                  sel_pc_in_o_i_cld <= "00";
872
                  sel_pc_as_o_i_cld <= '0';
873
                  sel_pc_val_o_i_cld <= "00";
874
                  sel_sp_in_o_i_cld <= "00";
875
                  sel_sp_as_o_i_cld <= '1';
876
                  sel_sp_val_o_i_cld <= "00";
877
               end if;
878
            when s17 =>
879
               if (rdy_i = '1') then
880
                  sig_PC <= adr_pc_i;
881
                  reg_F(2) <= '0';
882
                  sel_pc_in_o_i_cld <= "00";
883
                  sel_pc_as_o_i_cld <= '0';
884
                  sel_pc_val_o_i_cld <= "00";
885
                  sel_sp_in_o_i_cld <= "00";
886
                  sel_sp_as_o_i_cld <= '1';
887
                  sel_sp_val_o_i_cld <= "00";
888
               end if;
889
            when s24 =>
890
               if (rdy_i = '1') then
891
                  sig_PC <= adr_pc_i;
892
                  reg_F(6) <= '0';
893
                  sel_pc_in_o_i_cld <= "00";
894
                  sel_pc_as_o_i_cld <= '0';
895
                  sel_pc_val_o_i_cld <= "00";
896
                  sel_sp_in_o_i_cld <= "00";
897
                  sel_sp_as_o_i_cld <= '1';
898
                  sel_sp_val_o_i_cld <= "00";
899
               end if;
900
            when s25 =>
901
               if (rdy_i = '1') then
902
                  sig_PC <= adr_pc_i;
903
                  reg_F(7) <= reg_7flag_i;
904
                  reg_F(1) <= reg_1flag_i;
905
                  sel_pc_in_o_i_cld <= "00";
906
                  sel_pc_as_o_i_cld <= '0';
907
                  sel_pc_val_o_i_cld <= "00";
908
                  sel_sp_in_o_i_cld <= "00";
909
                  sel_sp_as_o_i_cld <= '1';
910
                  sel_sp_val_o_i_cld <= "00";
911
               end if;
912
            when s271 =>
913
               if (rdy_i = '1' and
914
                   zw_REG_OP = X"4C") then
915
                  sig_PC <= adr_nxt_pc_i;
916
                  sel_pc_in_o_i_cld <= "01";
917
                  sel_pc_as_o_i_cld <= '0';
918
                  sel_pc_val_o_i_cld <= "11";
919
                  zw_b1 <= d_i;
920
               elsif (rdy_i = '1' and
921
                      zw_REG_OP = X"6C") then
922
                  sig_PC <= adr_nxt_pc_i;
923
                  sel_pc_in_o_i_cld <= "01";
924
                  sel_pc_as_o_i_cld <= '0';
925
                  sel_pc_val_o_i_cld <= "00";
926
                  zw_b1 <= d_i;
927
               end if;
928
            when s273 =>
929
               if (rdy_i = '1') then
930
                  sig_PC <= d_i & zw_b1;
931
                  sel_pc_in_o_i_cld <= "00";
932
                  sel_pc_as_o_i_cld <= '0';
933
                  sel_pc_val_o_i_cld <= "00";
934
               end if;
935
            when s304 =>
936
               if (rdy_i = '1') then
937
                  sig_PC <= adr_pc_i;
938
                  sel_pc_in_o_i_cld <= "01";
939
                  sel_pc_as_o_i_cld <= '0';
940
                  sel_pc_val_o_i_cld <= "11";
941
                  zw_b1 <= d_i;
942
               end if;
943
            when s307 =>
944
               if (rdy_i = '1') then
945
                  sig_PC <= d_i & zw_b1;
946
                  sel_pc_in_o_i_cld <= "00";
947
                  sel_pc_as_o_i_cld <= '0';
948
                  sel_pc_val_o_i_cld <= "00";
949
                  sel_sp_in_o_i_cld <= "00";
950
                  sel_sp_as_o_i_cld <= '1';
951
                  sel_sp_val_o_i_cld <= "00";
952
               end if;
953
            when s177 =>
954
               if (rdy_i = '1' and
955
                   (zw_REG_OP = X"85" OR
956
                   zw_REG_OP = X"86" OR
957
                   zw_REG_OP = X"84")) then
958
                  sig_PC <= X"00" & d_i;
959
               elsif (rdy_i = '1' and
960
                      (zw_REG_OP = X"95" OR
961
                      zw_REG_OP = X"94")) then
962
                  sig_PC <= X"00" & d_i;
963
                  zw_b1 <= d_alu_i;
964
               elsif (rdy_i = '1' and
965
                      (zw_REG_OP = X"8D" OR
966
                      zw_REG_OP = X"8E" OR
967
                      zw_REG_OP = X"8C")) then
968
                  sig_PC <= adr_nxt_pc_i;
969
                  zw_b1 <= d_i;
970
               elsif (rdy_i = '1' and
971
                      zw_REG_OP = X"9D") then
972
                  sig_PC <= adr_nxt_pc_i;
973
                  zw_b1 <= d_alu_i;
974
                  zw_b2(0) <= reg_0flag_i;
975
               elsif (rdy_i = '1' and
976
                      zw_REG_OP = X"99") then
977
                  sig_PC <= adr_nxt_pc_i;
978
                  zw_b1 <= d_alu_i;
979
                  zw_b2(0) <= reg_0flag_i;
980
               elsif (rdy_i = '1' and
981
                      zw_REG_OP = X"91") then
982
                  sig_PC <= X"00" & d_i;
983
                  zw_b1 <= d_alu_i;
984
               elsif (rdy_i = '1' and
985
                      zw_REG_OP = X"81") then
986
                  sig_PC <= X"00" & d_i;
987
                  zw_b1 <= d_alu_i;
988
               elsif (rdy_i = '1' and
989
                      zw_REG_OP = X"96") then
990
                  sig_PC <= X"00" & d_i;
991
                  zw_b1 <= d_alu_i;
992
               end if;
993
            when s180 =>
994
               if (rdy_i = '1') then
995
                  sig_PC <= d_i & zw_b1;
996
                  zw_b3 <= d_alu_i;
997
               end if;
998
            when s181 =>
999
               if (rdy_i = '1') then
1000
                  sig_PC <= X"00" & zw_b1;
1001
                  zw_b1 <= d_alu_i;
1002
                  zw_b2(0) <= reg_0flag_i;
1003
               end if;
1004
            when s182 =>
1005
               if (rdy_i = '1') then
1006
                  sig_PC <= d_i & zw_b1;
1007
                  zw_b3 <= d_alu_i;
1008
               end if;
1009
            when s183 =>
1010
               if (rdy_i = '1') then
1011
                  sig_PC <= d_i & zw_b1;
1012
               end if;
1013
            when s184 =>
1014
               sig_PC <= adr_pc_i;
1015
               sel_pc_in_o_i_cld <= "00";
1016
               sel_pc_as_o_i_cld <= '0';
1017
               sel_pc_val_o_i_cld <= "00";
1018
               sel_sp_in_o_i_cld <= "00";
1019
               sel_sp_as_o_i_cld <= '1';
1020
               sel_sp_val_o_i_cld <= "00";
1021
            when s185 =>
1022
               if (rdy_i = '1') then
1023
                  sig_PC <= X"00" & zw_b1;
1024
               end if;
1025
            when s186 =>
1026
               if (rdy_i = '1') then
1027
                  sig_PC <= X"00" & zw_b1;
1028
               end if;
1029
            when s187 =>
1030
               sig_PC <= adr_pc_i;
1031
               sel_pc_in_o_i_cld <= "00";
1032
               sel_pc_as_o_i_cld <= '0';
1033
               sel_pc_val_o_i_cld <= "00";
1034
               sel_sp_in_o_i_cld <= "00";
1035
               sel_sp_as_o_i_cld <= '1';
1036
               sel_sp_val_o_i_cld <= "00";
1037
            when s188 =>
1038
               if (rdy_i = '1') then
1039
                  sig_PC <= X"00" & d_alu_i;
1040
                  zw_b1 <= d_i;
1041
               end if;
1042
            when s189 =>
1043
               if (rdy_i = '1') then
1044
                  sig_PC <= d_i & zw_b1;
1045
                  zw_b3 <= d_alu_i;
1046
               end if;
1047
            when s190 =>
1048
               sig_PC <= adr_pc_i;
1049
               sel_pc_in_o_i_cld <= "00";
1050
               sel_pc_as_o_i_cld <= '0';
1051
               sel_pc_val_o_i_cld <= "00";
1052
               sel_sp_in_o_i_cld <= "00";
1053
               sel_sp_as_o_i_cld <= '1';
1054
               sel_sp_val_o_i_cld <= "00";
1055
            when s191 =>
1056
               sig_PC <= zw_b3 & zw_b1;
1057
            when s192 =>
1058
               sig_PC <= d_i & zw_b1;
1059
            when s193 =>
1060
               sig_PC <= adr_pc_i;
1061
               sel_pc_in_o_i_cld <= "00";
1062
               sel_pc_as_o_i_cld <= '0';
1063
               sel_pc_val_o_i_cld <= "00";
1064
               sel_sp_in_o_i_cld <= "00";
1065
               sel_sp_as_o_i_cld <= '1';
1066
               sel_sp_val_o_i_cld <= "00";
1067
            when s377 =>
1068
               if (rdy_i = '1') then
1069
                  sig_PC <= adr_sp_i;
1070
               end if;
1071
            when s381 =>
1072
               sig_PC <= adr_pc_i;
1073
               sel_pc_in_o_i_cld <= "00";
1074
               sel_pc_as_o_i_cld <= '0';
1075
               sel_pc_val_o_i_cld <= "00";
1076
               sel_sp_in_o_i_cld <= "00";
1077
               sel_sp_as_o_i_cld <= '1';
1078
               sel_sp_val_o_i_cld <= "00";
1079
            when s378 =>
1080
               if (rdy_i = '1') then
1081
                  sig_PC <= adr_sp_i;
1082
               end if;
1083
            when s382 =>
1084
               sig_PC <= adr_pc_i;
1085
               sel_pc_in_o_i_cld <= "00";
1086
               sel_pc_as_o_i_cld <= '0';
1087
               sel_pc_val_o_i_cld <= "00";
1088
               sel_sp_in_o_i_cld <= "00";
1089
               sel_sp_as_o_i_cld <= '1';
1090
               sel_sp_val_o_i_cld <= "00";
1091
            when s383 =>
1092
               if (rdy_i = '1') then
1093
                  sig_PC <= adr_sp_i;
1094
               end if;
1095
            when s384 =>
1096
               if (rdy_i = '1') then
1097
                  sig_PC <= adr_pc_i;
1098
                  reg_F(7) <= reg_7flag_i;
1099
                  reg_F(1) <= reg_1flag_i;
1100
                  sel_pc_in_o_i_cld <= "00";
1101
                  sel_pc_as_o_i_cld <= '0';
1102
                  sel_pc_val_o_i_cld <= "00";
1103
                  sel_sp_in_o_i_cld <= "00";
1104
                  sel_sp_as_o_i_cld <= '1';
1105
                  sel_sp_val_o_i_cld <= "00";
1106
               end if;
1107
            when s385 =>
1108
               if (rdy_i = '1') then
1109
                  sig_PC <= adr_sp_i;
1110
               end if;
1111
            when s386 =>
1112
               if (rdy_i = '1') then
1113
                  sig_PC <= adr_pc_i;
1114
                  reg_F <= d_i;
1115
                  sel_pc_in_o_i_cld <= "00";
1116
                  sel_pc_as_o_i_cld <= '0';
1117
                  sel_pc_val_o_i_cld <= "00";
1118
                  sel_sp_in_o_i_cld <= "00";
1119
                  sel_sp_as_o_i_cld <= '1';
1120
                  sel_sp_val_o_i_cld <= "00";
1121
               end if;
1122
            when s387 =>
1123
               if (rdy_i = '1') then
1124
                  sig_PC <= adr_sp_i;
1125
               end if;
1126
            when s388 =>
1127
               if (rdy_i = '1') then
1128
                  sig_PC <= adr_sp_i;
1129
               end if;
1130
            when s389 =>
1131
               if (rdy_i = '1') then
1132
                  sig_PC <= adr_sp_i;
1133
                  reg_F <= d_i;
1134
                  sel_pc_in_o_i_cld <= "01";
1135
                  sel_pc_as_o_i_cld <= '0';
1136
                  sel_pc_val_o_i_cld <= "11";
1137
               end if;
1138
            when s391 =>
1139
               if (rdy_i = '1') then
1140
                  sig_PC <= adr_sp_i;
1141
                  zw_b1 <= d_i;
1142
               end if;
1143
            when s392 =>
1144
               if (rdy_i = '1') then
1145
                  sig_PC <= d_i & zw_b1;
1146
                  sel_pc_in_o_i_cld <= "00";
1147
                  sel_pc_as_o_i_cld <= '0';
1148
                  sel_pc_val_o_i_cld <= "00";
1149
                  sel_sp_in_o_i_cld <= "00";
1150
                  sel_sp_as_o_i_cld <= '1';
1151
                  sel_sp_val_o_i_cld <= "00";
1152
               end if;
1153
            when s390 =>
1154
               if (rdy_i = '1') then
1155
                  sig_PC <= adr_sp_i;
1156
               end if;
1157
            when s393 =>
1158
               if (rdy_i = '1') then
1159
                  sig_PC <= adr_sp_i;
1160
               end if;
1161
            when s394 =>
1162
               if (rdy_i = '1') then
1163
                  sig_PC <= adr_sp_i;
1164
                  zw_b1 <= d_i;
1165
                  sel_pc_in_o_i_cld <= "01";
1166
                  sel_pc_as_o_i_cld <= '0';
1167
                  sel_pc_val_o_i_cld <= "00";
1168
               end if;
1169
            when s395 =>
1170
               if (rdy_i = '1') then
1171
                  sig_PC <= d_i & zw_b1;
1172
               end if;
1173
            when s396 =>
1174
               if (rdy_i = '1') then
1175
                  sig_PC <= adr_pc_i;
1176
                  sel_pc_in_o_i_cld <= "00";
1177
                  sel_pc_as_o_i_cld <= '0';
1178
                  sel_pc_val_o_i_cld <= "00";
1179
                  sel_sp_in_o_i_cld <= "00";
1180
                  sel_sp_as_o_i_cld <= '1';
1181
                  sel_sp_val_o_i_cld <= "00";
1182
               end if;
1183
            when s397 =>
1184
               if (rdy_i = '1') then
1185
                  sig_PC <= adr_sp_i;
1186
                  zw_b1 <= d_i;
1187
               end if;
1188
            when s399 =>
1189
               sig_PC <= adr_sp_i;
1190
            when s400 =>
1191
               sig_PC <= adr_pc_i;
1192
               sel_pc_in_o_i_cld <= "01";
1193
               sel_pc_as_o_i_cld <= '0';
1194
               sel_pc_val_o_i_cld <= "11";
1195
            when s401 =>
1196
               if (rdy_i = '1') then
1197
                  sig_PC <= d_i & zw_b1 (7 downto 0);
1198
                  sel_pc_in_o_i_cld <= "00";
1199
                  sel_pc_as_o_i_cld <= '0';
1200
                  sel_pc_val_o_i_cld <= "00";
1201
                  sel_sp_in_o_i_cld <= "00";
1202
                  sel_sp_as_o_i_cld <= '1';
1203
                  sel_sp_val_o_i_cld <= "00";
1204
               end if;
1205
            when s526 =>
1206
               if (rdy_i = '1') then
1207
                  sig_PC <= adr_sp_i;
1208
               end if;
1209
            when s527 =>
1210
               sig_PC <= adr_sp_i;
1211
            when s528 =>
1212
               sig_PC <= adr_sp_i;
1213
            when s529 =>
1214
               sig_PC <= X"FFFE";
1215
            when s530 =>
1216
               if (rdy_i = '1') then
1217
                  sig_PC <= d_i & zw_b1;
1218
                  reg_F(4) <= '1';
1219
                  sel_pc_in_o_i_cld <= "00";
1220
                  sel_pc_as_o_i_cld <= '0';
1221
                  sel_pc_val_o_i_cld <= "00";
1222
                  sel_sp_in_o_i_cld <= "00";
1223
                  sel_sp_as_o_i_cld <= '1';
1224
                  sel_sp_val_o_i_cld <= "00";
1225
               end if;
1226
            when s531 =>
1227
               if (rdy_i = '1') then
1228
                  sig_PC <= X"FFFF";
1229
                  zw_b1 <= d_i;
1230
               end if;
1231
            when s544 =>
1232
               sig_PC <= adr_sp_i;
1233
            when s545 =>
1234
               sig_PC <= adr_sp_i;
1235
               sel_pc_in_o_i_cld <= "00";
1236
               sel_pc_as_o_i_cld <= '0';
1237
               sel_pc_val_o_i_cld <= "00";
1238
            when s546 =>
1239
               sig_PC <= adr_pc_i;
1240
            when s547 =>
1241
               if (rdy_i = '1') then
1242
                  sig_PC <= adr_pc_i;
1243
                  zw_w1 (7 downto 0) <= d_i;
1244
                  sel_pc_in_o_i_cld <= "01";
1245
                  sel_pc_as_o_i_cld <= '0';
1246
                  sel_pc_val_o_i_cld <= "11";
1247
               end if;
1248
            when s549 =>
1249
               if (rdy_i = '1') then
1250
                  sig_PC  <= d_i & zw_w1 (7 downto 0);
1251
                  sel_pc_in_o_i_cld <= "00";
1252
                  sel_pc_as_o_i_cld <= '0';
1253
                  sel_pc_val_o_i_cld <= "00";
1254
                  sel_sp_in_o_i_cld <= "00";
1255
                  sel_sp_as_o_i_cld <= '1';
1256
                  sel_sp_val_o_i_cld <= "00";
1257
               end if;
1258
            when s550 =>
1259
               sig_PC <= adr_sp_i;
1260
               sel_pc_in_o_i_cld <= "01";
1261
               sel_pc_as_o_i_cld <= '0';
1262
               sel_pc_val_o_i_cld <= "00";
1263
            when s404 =>
1264
               if (rdy_i = '1') then
1265
                  sig_PC <= adr_pc_i;
1266
                  reg_F(0) <= q_a_i(7);
1267
                  reg_F(7) <= reg_7flag_i;
1268
                  reg_F(1) <= reg_1flag_i;
1269
                  sel_pc_in_o_i_cld <= "00";
1270
                  sel_pc_as_o_i_cld <= '0';
1271
                  sel_pc_val_o_i_cld <= "00";
1272
                  sel_sp_in_o_i_cld <= "00";
1273
                  sel_sp_as_o_i_cld <= '1';
1274
                  sel_sp_val_o_i_cld <= "00";
1275
               end if;
1276
            when s556 =>
1277
               if (rdy_i = '1') then
1278
                  sig_PC <= adr_pc_i;
1279
                  reg_F(0) <= q_a_i(0);
1280
                  reg_F(7) <= reg_7flag_i;
1281
                  reg_F(1) <= reg_1flag_i;
1282
                  sel_pc_in_o_i_cld <= "00";
1283
                  sel_pc_as_o_i_cld <= '0';
1284
                  sel_pc_val_o_i_cld <= "00";
1285
                  sel_sp_in_o_i_cld <= "00";
1286
                  sel_sp_as_o_i_cld <= '1';
1287
                  sel_sp_val_o_i_cld <= "00";
1288
               end if;
1289
            when s557 =>
1290
               if (rdy_i = '1') then
1291
                  sig_PC <= adr_pc_i;
1292
                  reg_F(0) <= q_a_i(7);
1293
                  reg_F(0) <= q_a_i(7);
1294
                  reg_F(7) <= reg_7flag_i;
1295
                  reg_F(1) <= reg_1flag_i;
1296
                  sel_pc_in_o_i_cld <= "00";
1297
                  sel_pc_as_o_i_cld <= '0';
1298
                  sel_pc_val_o_i_cld <= "00";
1299
                  sel_sp_in_o_i_cld <= "00";
1300
                  sel_sp_as_o_i_cld <= '1';
1301
                  sel_sp_val_o_i_cld <= "00";
1302
               end if;
1303
            when s579 =>
1304
               if (rdy_i = '1') then
1305
                  sig_PC <= adr_pc_i;
1306
                  reg_F(0) <= q_a_i(0);
1307
                  reg_F(7) <= reg_7flag_i;
1308
                  reg_F(1) <= reg_1flag_i;
1309
                  sel_pc_in_o_i_cld <= "00";
1310
                  sel_pc_as_o_i_cld <= '0';
1311
                  sel_pc_val_o_i_cld <= "00";
1312
                  sel_sp_in_o_i_cld <= "00";
1313
                  sel_sp_as_o_i_cld <= '1';
1314
                  sel_sp_val_o_i_cld <= "00";
1315
               end if;
1316
            when s201 =>
1317
               if (rdy_i = '1' and
1318
                   (zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR
1319
                   zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR
1320
                   zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR
1321
                   zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) then
1322
                  sig_PC <= X"00" & d_i;
1323
               elsif ((rdy_i = '1' and
1324
                      (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
1325
                      zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
1326
                      zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
1327
                      zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
1328
                      zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
1329
                  sig_PC <= adr_nxt_pc_i;
1330
                  reg_F(7) <= reg_7flag_i;
1331
                  reg_F(1) <= reg_1flag_i;
1332
                  sel_pc_in_o_i_cld <= "00";
1333
                  sel_pc_as_o_i_cld <= '0';
1334
                  sel_pc_val_o_i_cld <= "00";
1335
                  sel_sp_in_o_i_cld <= "00";
1336
                  sel_sp_as_o_i_cld <= '1';
1337
                  sel_sp_val_o_i_cld <= "00";
1338
               elsif ((rdy_i = '1' and
1339
                      (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
1340
                      zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
1341
                      zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
1342
                      zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
1343
                      zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
1344
                  sig_PC <= adr_nxt_pc_i;
1345
                  reg_F(7) <= reg_7flag_i;
1346
                  reg_F(1) <= reg_1flag_i;
1347
                  sel_pc_in_o_i_cld <= "00";
1348
                  sel_pc_as_o_i_cld <= '0';
1349
                  sel_pc_val_o_i_cld <= "00";
1350
                  sel_sp_in_o_i_cld <= "00";
1351
                  sel_sp_as_o_i_cld <= '1';
1352
                  sel_sp_val_o_i_cld <= "00";
1353
               elsif ((rdy_i = '1' and
1354
                      (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
1355
                      zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
1356
                      zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
1357
                      zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
1358
                       zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
1359
                  sig_PC <= adr_nxt_pc_i;
1360
                  reg_F(7) <= reg_7flag_i;
1361
                  reg_F(1) <= reg_1flag_i;
1362
                  sel_pc_in_o_i_cld <= "00";
1363
                  sel_pc_as_o_i_cld <= '0';
1364
                  sel_pc_val_o_i_cld <= "00";
1365
                  sel_sp_in_o_i_cld <= "00";
1366
                  sel_sp_as_o_i_cld <= '1';
1367
                  sel_sp_val_o_i_cld <= "00";
1368
               elsif ((rdy_i = '1' and
1369
                      (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
1370
                      zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
1371
                      zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
1372
                      zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
1373
                      zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
1374
                       zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
1375
                       zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
1376
                       zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
1377
                  sig_PC <= adr_nxt_pc_i;
1378
                  reg_F(7) <= zw_ALU(7);
1379
                  reg_F(0) <= zw_ALU(8);
1380
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1381
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1382
                  (zw_ALU(0)));
1383
                  sel_pc_in_o_i_cld <= "00";
1384
                  sel_pc_as_o_i_cld <= '0';
1385
                  sel_pc_val_o_i_cld <= "00";
1386
                  sel_sp_in_o_i_cld <= "00";
1387
                  sel_sp_as_o_i_cld <= '1';
1388
                  sel_sp_val_o_i_cld <= "00";
1389
               elsif (rdy_i = '1' and
1390
                      (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
1391
                      zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) then
1392
                  sig_PC <= adr_nxt_pc_i;
1393
                  reg_F(7) <= reg_7flag_i;
1394
                  reg_F(1) <= reg_1flag_i;
1395
                  sel_pc_in_o_i_cld <= "00";
1396
                  sel_pc_as_o_i_cld <= '0';
1397
                  sel_pc_val_o_i_cld <= "00";
1398
                  sel_sp_in_o_i_cld <= "00";
1399
                  sel_sp_as_o_i_cld <= '1';
1400
                  sel_sp_val_o_i_cld <= "00";
1401
               elsif (rdy_i = '1' and
1402
                      (zw_REG_OP = X"B5" OR
1403
                      zw_REG_OP = X"B4" OR
1404
                      zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR
1405
                      zw_REG_OP = X"35" OR
1406
                      zw_REG_OP = X"D5")) then
1407
                  sig_PC <= X"00" & d_i;
1408
                  zw_b1 <= d_alu_i;
1409
               elsif (rdy_i = '1' and
1410
                      (zw_REG_OP = X"AD" OR
1411
                      zw_REG_OP = X"AE" OR
1412
                      zw_REG_OP = X"AC" OR
1413
                      zw_REG_OP = X"4D" OR
1414
                      zw_REG_OP = X"0D" OR
1415
                      zw_REG_OP = X"2D" OR
1416
                      zw_REG_OP = X"CD" OR
1417
                      zw_REG_OP = X"EC" OR
1418
                      zw_REG_OP = X"CC")) then
1419
                  sig_PC <= adr_nxt_pc_i;
1420
                  zw_b1 <= d_i;
1421
               elsif (rdy_i = '1' and
1422
                      (zw_REG_OP = X"BD" OR
1423
                      zw_REG_OP = X"BC" OR
1424
                      zw_REG_OP = X"5D" OR
1425
                      zw_REG_OP = X"1D" OR
1426
                      zw_REG_OP = X"3D" OR
1427
                      zw_REG_OP = X"DD")) then
1428
                  sig_PC <= adr_nxt_pc_i;
1429
                  zw_b1 <= d_alu_i;
1430
                  zw_b2(0) <= reg_0flag_i;
1431
               elsif (rdy_i = '1' and
1432
                      (zw_REG_OP = X"B9" OR
1433
                      zw_REG_OP = X"BE" OR
1434
                      zw_REG_OP = X"59" OR
1435
                      zw_REG_OP = X"19" OR
1436
                      zw_REG_OP = X"39" OR
1437
                      zw_REG_OP = X"D9")) then
1438
                  sig_PC <= adr_nxt_pc_i;
1439
                  zw_b1 <= d_alu_i;
1440
                  zw_b2(0) <= reg_0flag_i;
1441
               elsif (rdy_i = '1' and
1442
                      (zw_REG_OP = X"B1" OR
1443
                      zw_REG_OP = X"51" OR
1444
                      zw_REG_OP = X"11" OR
1445
                      zw_REG_OP = X"31" OR
1446
                      zw_REG_OP = X"D1")) then
1447
                  sig_PC <= X"00" & d_i;
1448
                  zw_b1 <= d_alu_i;
1449
               elsif (rdy_i = '1' and
1450
                      (zw_REG_OP = X"A1" OR
1451
                      zw_REG_OP = X"41" OR
1452
                      zw_REG_OP = X"01" OR
1453
                      zw_REG_OP = X"21" OR
1454
                      zw_REG_OP = X"C1")) then
1455
                  sig_PC <= X"00" & d_i;
1456
                  zw_b1 <= d_alu_i;
1457
               elsif (rdy_i = '1' and
1458
                      zw_REG_OP = X"B6") then
1459
                  sig_PC <= X"00" & d_i;
1460
                  zw_b1 <= d_alu_i;
1461
               end if;
1462
            when s202 =>
1463
               if (rdy_i = '1') then
1464
                  sig_PC <= d_i & zw_b1;
1465
               end if;
1466
            when s210 =>
1467
               if (rdy_i = '1') then
1468
                  sig_PC <= d_i & zw_b1;
1469
                  zw_b3 <= d_alu_i;
1470
               end if;
1471
            when s211 =>
1472
               if (rdy_i = '1') then
1473
                  sig_PC <= d_i & zw_b1;
1474
                  zw_b3 <= d_alu_i;
1475
               end if;
1476
            when s215 =>
1477
               if (rdy_i = '1') then
1478
                  sig_PC <= X"00" & zw_b1;
1479
                  zw_b1 <= d_alu_i;
1480
                  zw_b2(0) <= reg_0flag_i;
1481
               end if;
1482
            when s217 =>
1483
               if (rdy_i = '1') then
1484
                  sig_PC <= X"00" & zw_b1;
1485
               end if;
1486
            when s218 =>
1487
               if (rdy_i = '1') then
1488
                  sig_PC <= X"00" & zw_b1;
1489
               end if;
1490
            when s222 =>
1491
               if (rdy_i = '1') then
1492
                  sig_PC <= X"00" & d_alu_i;
1493
                  zw_b1 <= d_i;
1494
               end if;
1495
            when s223 =>
1496
               if (rdy_i = '1') then
1497
                  sig_PC <= d_i & zw_b1;
1498
                  zw_b3 <= d_alu_i;
1499
               end if;
1500
            when s224 =>
1501
               if ((rdy_i = '1') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
1502
                   zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
1503
                   zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
1504
                   zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
1505
                  sig_PC <= adr_pc_i;
1506
                  reg_F(7) <= reg_7flag_i;
1507
                  reg_F(1) <= reg_1flag_i;
1508
                  sel_pc_in_o_i_cld <= "00";
1509
                  sel_pc_as_o_i_cld <= '0';
1510
                  sel_pc_val_o_i_cld <= "00";
1511
                  sel_sp_in_o_i_cld <= "00";
1512
                  sel_sp_as_o_i_cld <= '1';
1513
                  sel_sp_val_o_i_cld <= "00";
1514
               elsif ((rdy_i = '1') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
1515
                      zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
1516
                      zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
1517
                      zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
1518
                  sig_PC <= adr_pc_i;
1519
                  reg_F(7) <= reg_7flag_i;
1520
                  reg_F(1) <= reg_1flag_i;
1521
                  sel_pc_in_o_i_cld <= "00";
1522
                  sel_pc_as_o_i_cld <= '0';
1523
                  sel_pc_val_o_i_cld <= "00";
1524
                  sel_sp_in_o_i_cld <= "00";
1525
                  sel_sp_as_o_i_cld <= '1';
1526
                  sel_sp_val_o_i_cld <= "00";
1527
               elsif ((rdy_i = '1') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
1528
                      zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
1529
                      zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
1530
                       zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
1531
                  sig_PC <= adr_pc_i;
1532
                  reg_F(7) <= reg_7flag_i;
1533
                  reg_F(1) <= reg_1flag_i;
1534
                  sel_pc_in_o_i_cld <= "00";
1535
                  sel_pc_as_o_i_cld <= '0';
1536
                  sel_pc_val_o_i_cld <= "00";
1537
                  sel_sp_in_o_i_cld <= "00";
1538
                  sel_sp_as_o_i_cld <= '1';
1539
                  sel_sp_val_o_i_cld <= "00";
1540
               elsif ((rdy_i = '1') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
1541
                      zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
1542
                      zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
1543
                      zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
1544
                       zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
1545
                       zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
1546
                       zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
1547
                  sig_PC <= adr_pc_i;
1548
                  reg_F(7) <= zw_ALU(7);
1549
                  reg_F(0) <= zw_ALU(8);
1550
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1551
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1552
                  (zw_ALU(0)));
1553
                  sel_pc_in_o_i_cld <= "00";
1554
                  sel_pc_as_o_i_cld <= '0';
1555
                  sel_pc_val_o_i_cld <= "00";
1556
                  sel_sp_in_o_i_cld <= "00";
1557
                  sel_sp_as_o_i_cld <= '1';
1558
                  sel_sp_val_o_i_cld <= "00";
1559
               elsif (rdy_i = '1') then
1560
                  sig_PC <= adr_pc_i;
1561
                  reg_F(7) <= reg_7flag_i;
1562
                  reg_F(1) <= reg_1flag_i;
1563
                  sel_pc_in_o_i_cld <= "00";
1564
                  sel_pc_as_o_i_cld <= '0';
1565
                  sel_pc_val_o_i_cld <= "00";
1566
                  sel_sp_in_o_i_cld <= "00";
1567
                  sel_sp_as_o_i_cld <= '1';
1568
                  sel_sp_val_o_i_cld <= "00";
1569
               end if;
1570
            when s225 =>
1571
               if ((rdy_i = '1' AND
1572
                   zw_b2(0) = '0') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
1573
                   zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
1574
                   zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
1575
                   zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
1576
                  sig_PC <= adr_pc_i;
1577
                  reg_F(7) <= reg_7flag_i;
1578
                  reg_F(1) <= reg_1flag_i;
1579
                  sel_pc_in_o_i_cld <= "00";
1580
                  sel_pc_as_o_i_cld <= '0';
1581
                  sel_pc_val_o_i_cld <= "00";
1582
                  sel_sp_in_o_i_cld <= "00";
1583
                  sel_sp_as_o_i_cld <= '1';
1584
                  sel_sp_val_o_i_cld <= "00";
1585
               elsif ((rdy_i = '1' AND
1586
                      zw_b2(0) = '0') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
1587
                      zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
1588
                      zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
1589
                      zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
1590
                  sig_PC <= adr_pc_i;
1591
                  reg_F(7) <= reg_7flag_i;
1592
                  reg_F(1) <= reg_1flag_i;
1593
                  sel_pc_in_o_i_cld <= "00";
1594
                  sel_pc_as_o_i_cld <= '0';
1595
                  sel_pc_val_o_i_cld <= "00";
1596
                  sel_sp_in_o_i_cld <= "00";
1597
                  sel_sp_as_o_i_cld <= '1';
1598
                  sel_sp_val_o_i_cld <= "00";
1599
               elsif ((rdy_i = '1' AND
1600
                      zw_b2(0) = '0') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
1601
                      zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
1602
                      zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
1603
                       zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
1604
                  sig_PC <= adr_pc_i;
1605
                  reg_F(7) <= reg_7flag_i;
1606
                  reg_F(1) <= reg_1flag_i;
1607
                  sel_pc_in_o_i_cld <= "00";
1608
                  sel_pc_as_o_i_cld <= '0';
1609
                  sel_pc_val_o_i_cld <= "00";
1610
                  sel_sp_in_o_i_cld <= "00";
1611
                  sel_sp_as_o_i_cld <= '1';
1612
                  sel_sp_val_o_i_cld <= "00";
1613
               elsif ((rdy_i = '1' AND
1614
                      zw_b2(0) = '0') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
1615
                      zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
1616
                      zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
1617
                      zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
1618
                       zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
1619
                       zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
1620
                       zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
1621
                  sig_PC <= adr_pc_i;
1622
                  reg_F(7) <= zw_ALU(7);
1623
                  reg_F(0) <= zw_ALU(8);
1624
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1625
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1626
                  (zw_ALU(0)));
1627
                  sel_pc_in_o_i_cld <= "00";
1628
                  sel_pc_as_o_i_cld <= '0';
1629
                  sel_pc_val_o_i_cld <= "00";
1630
                  sel_sp_in_o_i_cld <= "00";
1631
                  sel_sp_as_o_i_cld <= '1';
1632
                  sel_sp_val_o_i_cld <= "00";
1633
               elsif (rdy_i = '1' AND
1634
                      zw_b2(0) = '0') then
1635
                  sig_PC <= adr_pc_i;
1636
                  reg_F(7) <= reg_7flag_i;
1637
                  reg_F(1) <= reg_1flag_i;
1638
                  sel_pc_in_o_i_cld <= "00";
1639
                  sel_pc_as_o_i_cld <= '0';
1640
                  sel_pc_val_o_i_cld <= "00";
1641
                  sel_sp_in_o_i_cld <= "00";
1642
                  sel_sp_as_o_i_cld <= '1';
1643
                  sel_sp_val_o_i_cld <= "00";
1644
               elsif (rdy_i = '1') then
1645
                  sig_PC <= zw_b3 & zw_b1;
1646
               end if;
1647
            when s226 =>
1648
               if (rdy_i = '1' and
1649
                   (zw_REG_OP = X"C6" OR
1650
                   zw_REG_OP = X"E6")) then
1651
                  sig_PC <= X"00" & d_i;
1652
               elsif (rdy_i = '1' and
1653
                      (zw_REG_OP = X"D6" OR
1654
                      zw_REG_OP = X"F6")) then
1655
                  sig_PC <= X"00" & d_i;
1656
                  zw_b1 <= d_alu_i;
1657
               elsif (rdy_i = '1' and
1658
                      (zw_REG_OP = X"CE" OR
1659
                      zw_REG_OP = X"EE")) then
1660
                  sig_PC <= adr_nxt_pc_i;
1661
                  zw_b1 <= d_i;
1662
               elsif (rdy_i = '1' and
1663
                      (zw_REG_OP = X"DE" OR
1664
                      zw_REG_OP = X"FE")) then
1665
                  sig_PC <= adr_nxt_pc_i;
1666
                  zw_b1 <= d_alu_i;
1667
                  zw_b2(0) <= reg_0flag_i;
1668
               end if;
1669
            when s243 =>
1670
               if (rdy_i = '1') then
1671
                  sig_PC <= d_i & zw_b1;
1672
               end if;
1673
            when s244 =>
1674
               if (rdy_i = '1') then
1675
                  sig_PC <= d_i & zw_b1;
1676
                  zw_b3 <= d_alu_i;
1677
               end if;
1678
            when s247 =>
1679
               if (rdy_i = '1') then
1680
                  sig_PC <= X"00" & zw_b1;
1681
               end if;
1682
            when s344 =>
1683
               if (rdy_i = '1') then
1684
                  sig_PC <= zw_b3 & zw_b1;
1685
               end if;
1686
            when s343 =>
1687
               if (rdy_i = '1') then
1688
                  zw_b1 <= d_alu_i;
1689
               end if;
1690
            when s251 =>
1691
               sig_PC <= adr_pc_i;
1692
               reg_F(7) <= reg_7flag_i;
1693
               reg_F(1) <= reg_1flag_i;
1694
               sel_pc_in_o_i_cld <= "00";
1695
               sel_pc_as_o_i_cld <= '0';
1696
               sel_pc_val_o_i_cld <= "00";
1697
               sel_sp_in_o_i_cld <= "00";
1698
               sel_sp_as_o_i_cld <= '1';
1699
               sel_sp_val_o_i_cld <= "00";
1700
            when s351 =>
1701
               if (rdy_i = '1' and
1702
                   zw_REG_OP = X"24") then
1703
                  sig_PC <= X"00" & d_i;
1704
               elsif (rdy_i = '1' and
1705
                      zw_REG_OP = X"2C") then
1706
                  sig_PC <= adr_nxt_pc_i;
1707
                  zw_b1 <= d_i;
1708
               end if;
1709
            when s361 =>
1710
               if (rdy_i = '1') then
1711
                  sig_PC <= adr_pc_i;
1712
                  reg_F(7) <= d_i(7);
1713
                  reg_F(6) <= d_i(6);
1714
                  reg_F(1) <= reg_1flag_i;
1715
                  sel_pc_in_o_i_cld <= "00";
1716
                  sel_pc_as_o_i_cld <= '0';
1717
                  sel_pc_val_o_i_cld <= "00";
1718
                  sel_sp_in_o_i_cld <= "00";
1719
                  sel_sp_as_o_i_cld <= '1';
1720
                  sel_sp_val_o_i_cld <= "00";
1721
               end if;
1722
            when s360 =>
1723
               if (rdy_i = '1') then
1724
                  sig_PC <= d_i & zw_b1;
1725
               end if;
1726
            when s403 =>
1727
               if (rdy_i = '1' and
1728
                   (zw_REG_OP = X"1E" or
1729
                   zw_REG_OP = X"7E" or
1730
                   zw_REG_OP = X"3E" or
1731
                   zw_REG_OP = X"5E")) then
1732
                  sig_PC <= adr_nxt_pc_i;
1733
                  zw_b1 <= d_alu_i;
1734
                  zw_b2(0) <= reg_0flag_i;
1735
               elsif (rdy_i = '1' and
1736
                      (zw_REG_OP = X"06" or
1737
                      zw_REG_OP = X"66" or
1738
                      zw_REG_OP = X"26" or
1739
                      zw_REG_OP = X"46")) then
1740
                  sig_PC <= X"00" & d_i;
1741
               elsif (rdy_i = '1' and
1742
                      (zw_REG_OP = X"16" or
1743
                      zw_REG_OP = X"76" or
1744
                      zw_REG_OP = X"36" or
1745
                      zw_REG_OP = X"56")) then
1746
                  sig_PC <= X"00" & d_i;
1747
                  zw_b1 <= d_alu_i;
1748
               elsif (rdy_i = '1' and
1749
                      (zw_REG_OP = X"0E" or
1750
                      zw_REG_OP = X"6E" or
1751
                      zw_REG_OP = X"2E" or
1752
                      zw_REG_OP = X"4E")) then
1753
                  sig_PC <= adr_nxt_pc_i;
1754
                  zw_b1 <= d_i;
1755
               end if;
1756
            when s406 =>
1757
               if (rdy_i = '1') then
1758
                  sig_PC <= d_i & zw_b1;
1759
               end if;
1760
            when s407 =>
1761
               if (rdy_i = '1') then
1762
                  sig_PC <= d_i & zw_b1;
1763
                  zw_b3 <= d_alu_i;
1764
               end if;
1765
            when s409 =>
1766
               if (rdy_i = '1') then
1767
                  sig_PC <= X"00" & zw_b1;
1768
               end if;
1769
            when s412 =>
1770
               if (rdy_i = '1') then
1771
                  sig_PC <= zw_b3 & zw_b1;
1772
               end if;
1773
            when s416 =>
1774
               if (rdy_i = '1' and
1775
                   (zw_REG_OP = X"06" or
1776
                   zw_REG_OP = X"16" or
1777
                   zw_REG_OP = X"0E" or
1778
                   zw_REG_OP = X"1E")) then
1779
                  zw_b1 <= d_i(6 downto 0) & '0';
1780
                  zw_b2(0) <= d_i(7);
1781
               elsif (rdy_i = '1' and
1782
                      (zw_REG_OP = X"46" or
1783
                      zw_REG_OP = X"56" or
1784
                      zw_REG_OP = X"4E" or
1785
                      zw_REG_OP = X"5E")) then
1786
                  zw_b1 <= '0' & d_i(7 downto 1);
1787
                  zw_b2(0) <= d_i(0);
1788
               elsif (rdy_i = '1' and
1789
                      (zw_REG_OP = X"26" or
1790
                      zw_REG_OP = X"36" or
1791
                      zw_REG_OP = X"2E" or
1792
                      zw_REG_OP = X"3E")) then
1793
                  zw_b1 <= d_i(6 downto 0) & reg_F(0);
1794
                  zw_b2(0) <= d_i(7);
1795
               elsif (rdy_i = '1' and
1796
                      (zw_REG_OP = X"66" or
1797
                      zw_REG_OP = X"76" or
1798
                      zw_REG_OP = X"6E" or
1799
                      zw_REG_OP = X"7E")) then
1800
                  zw_b1 <= reg_F(0) & d_i(7 downto 1);
1801
                  zw_b2(0) <= d_i(0);
1802
               end if;
1803
            when s418 =>
1804
               sig_PC <= adr_pc_i;
1805
               reg_F(0) <= zw_b2(0);
1806
               reg_F(7) <= reg_7flag_i;
1807
               reg_F(1) <= reg_1flag_i;
1808
               sel_pc_in_o_i_cld <= "00";
1809
               sel_pc_as_o_i_cld <= '0';
1810
               sel_pc_val_o_i_cld <= "00";
1811
               sel_sp_in_o_i_cld <= "00";
1812
               sel_sp_as_o_i_cld <= '1';
1813
               sel_sp_val_o_i_cld <= "00";
1814
            when s510 =>
1815
               if (rdy_i = '1' and
1816
                   zw_REG_OP = X"65") then
1817
                  sig_PC <= X"00" & d_i;
1818
               elsif (rdy_i = '1' and
1819
                      zw_REG_OP = X"69" and
1820
                      reg_F(3) = '0') then
1821
                  sig_PC <= adr_nxt_pc_i;
1822
 
1823
                  reg_F(7) <= zw_ALU(7);
1824
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
1825
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1826
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1827
                  (zw_ALU(0)));
1828
                  reg_F(0) <= zw_ALU(8);
1829
                  sel_pc_in_o_i_cld <= "00";
1830
                  sel_pc_as_o_i_cld <= '0';
1831
                  sel_pc_val_o_i_cld <= "00";
1832
                  sel_sp_in_o_i_cld <= "00";
1833
                  sel_sp_as_o_i_cld <= '1';
1834
                  sel_sp_val_o_i_cld <= "00";
1835
               elsif (rdy_i = '1' and
1836
                      zw_REG_OP = X"75") then
1837
                  sig_PC <= X"00" & d_i;
1838
                  zw_b1 <= d_alu_i;
1839
               elsif (rdy_i = '1' and
1840
                      zw_REG_OP = X"6D") then
1841
                  sig_PC <= adr_nxt_pc_i;
1842
                  zw_b1 <= d_i;
1843
               elsif (rdy_i = '1' and
1844
                      zw_REG_OP = X"7D") then
1845
                  sig_PC <= adr_nxt_pc_i;
1846
                  zw_b1 <= d_alu_i;
1847
                  zw_b2(0) <= reg_0flag_i;
1848
               elsif (rdy_i = '1' and
1849
                      zw_REG_OP = X"79") then
1850
                  sig_PC <= adr_nxt_pc_i;
1851
                  zw_b1 <= d_alu_i;
1852
                  zw_b2(0) <= reg_0flag_i;
1853
               elsif (rdy_i = '1' and
1854
                      zw_REG_OP = X"71") then
1855
                  sig_PC <= X"00" & d_i;
1856
                  zw_b1 <= d_alu_i;
1857
               elsif (rdy_i = '1' and
1858
                      zw_REG_OP = X"61") then
1859
                  sig_PC <= X"00" & d_i;
1860
                  zw_b1 <= d_alu_i;
1861
               elsif (rdy_i = '1' and
1862
                      zw_REG_OP = X"69" and
1863
                      reg_F(3) = '1') then
1864
                  sig_PC <= adr_nxt_pc_i;
1865
 
1866
                  reg_F(7) <= zw_ALU(7);
1867
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
1868
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1869
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1870
                  (zw_ALU(0)));
1871
                  reg_F(0) <= zw_ALU4(4);
1872
                  sel_pc_in_o_i_cld <= "00";
1873
                  sel_pc_as_o_i_cld <= '0';
1874
                  sel_pc_val_o_i_cld <= "00";
1875
                  sel_sp_in_o_i_cld <= "00";
1876
                  sel_sp_as_o_i_cld <= '1';
1877
                  sel_sp_val_o_i_cld <= "00";
1878
               end if;
1879
            when s553 =>
1880
               if (rdy_i = '1') then
1881
                  sig_PC <= d_i & zw_b1;
1882
               end if;
1883
            when s555 =>
1884
               if (rdy_i = '1') then
1885
                  sig_PC <= d_i & zw_b1;
1886
                  zw_b3 <= d_alu_i;
1887
               end if;
1888
            when s558 =>
1889
               if (rdy_i = '1') then
1890
                  sig_PC <= X"00" & zw_b1;
1891
                  zw_b1 <= d_alu_i;
1892
                  zw_b2(0) <= reg_0flag_i;
1893
               end if;
1894
            when s560 =>
1895
               if (rdy_i = '1') then
1896
                  sig_PC <= X"00" & zw_b1;
1897
               end if;
1898
            when s561 =>
1899
               if (rdy_i = '1') then
1900
                  sig_PC <= X"00" & zw_b1;
1901
               end if;
1902
            when s563 =>
1903
               if (rdy_i = '1') then
1904
                  sig_PC <= X"00" & d_alu_i;
1905
                  zw_b1 <= d_i;
1906
               end if;
1907
            when s564 =>
1908
               if (rdy_i = '1' AND
1909
                   zw_b2(0) = '0' and
1910
                   reg_F(3) = '0') then
1911
                  sig_PC <= adr_pc_i;
1912
 
1913
                  reg_F(7) <= zw_ALU(7);
1914
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
1915
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1916
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1917
                  (zw_ALU(0)));
1918
                  reg_F(0) <= zw_ALU(8);
1919
                  sel_pc_in_o_i_cld <= "00";
1920
                  sel_pc_as_o_i_cld <= '0';
1921
                  sel_pc_val_o_i_cld <= "00";
1922
                  sel_sp_in_o_i_cld <= "00";
1923
                  sel_sp_as_o_i_cld <= '1';
1924
                  sel_sp_val_o_i_cld <= "00";
1925
               elsif (rdy_i = '1' AND
1926
                      zw_b2(0) = '0' and
1927
                      reg_F(3) = '1') then
1928
                  sig_PC <= adr_pc_i;
1929
 
1930
                  reg_F(7) <= zw_ALU(7);
1931
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
1932
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1933
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1934
                  (zw_ALU(0)));
1935
                  reg_F(0) <= zw_ALU4(4);
1936
                  sel_pc_in_o_i_cld <= "00";
1937
                  sel_pc_as_o_i_cld <= '0';
1938
                  sel_pc_val_o_i_cld <= "00";
1939
                  sel_sp_in_o_i_cld <= "00";
1940
                  sel_sp_as_o_i_cld <= '1';
1941
                  sel_sp_val_o_i_cld <= "00";
1942
               elsif (rdy_i = '1') then
1943
                  sig_PC <= zw_b3 & zw_b1;
1944
               end if;
1945
            when s565 =>
1946
               if (rdy_i = '1' and
1947
                   reg_F(3) = '0') then
1948
                  sig_PC <= adr_pc_i;
1949
 
1950
                  reg_F(7) <= zw_ALU(7);
1951
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
1952
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1953
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1954
                  (zw_ALU(0)));
1955
                  reg_F(0) <= zw_ALU(8);
1956
                  sel_pc_in_o_i_cld <= "00";
1957
                  sel_pc_as_o_i_cld <= '0';
1958
                  sel_pc_val_o_i_cld <= "00";
1959
                  sel_sp_in_o_i_cld <= "00";
1960
                  sel_sp_as_o_i_cld <= '1';
1961
                  sel_sp_val_o_i_cld <= "00";
1962
               elsif (rdy_i = '1' and
1963
                      reg_F(3) = '1') then
1964
                  sig_PC <= adr_pc_i;
1965
 
1966
                  reg_F(7) <= zw_ALU(7);
1967
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
1968
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1969
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1970
                  (zw_ALU(0)));
1971
                  reg_F(0) <= zw_ALU4(4);
1972
                  sel_pc_in_o_i_cld <= "00";
1973
                  sel_pc_as_o_i_cld <= '0';
1974
                  sel_pc_val_o_i_cld <= "00";
1975
                  sel_sp_in_o_i_cld <= "00";
1976
                  sel_sp_as_o_i_cld <= '1';
1977
                  sel_sp_val_o_i_cld <= "00";
1978
               end if;
1979
            when s566 =>
1980
               if (rdy_i = '1') then
1981
                  sig_PC <= d_i & zw_b1;
1982
                  zw_b3 <= d_alu_i;
1983
               end if;
1984
            when s266 =>
1985
               if (rdy_i = '1' and (
1986
                   (reg_F(0) = '1' and zw_REG_OP = X"90") or
1987
                   (reg_F(0) = '0' and zw_REG_OP = X"B0") or
1988
                   (reg_F(1) = '0' and zw_REG_OP = X"F0") or
1989
                   (reg_F(7) = '0' and zw_REG_OP = X"30") or
1990
                   (reg_F(1) = '1' and zw_REG_OP = X"D0") or
1991
                   (reg_F(7) = '1' and zw_REG_OP = X"10") or
1992
                   (reg_F(6) = '1' and zw_REG_OP = X"50") or
1993
                   (reg_F(6) = '0' and zw_REG_OP = X"70"))) then
1994
                  sig_PC <= adr_nxt_pc_i;
1995
                  sel_pc_in_o_i_cld <= "00";
1996
                  sel_pc_as_o_i_cld <= '0';
1997
                  sel_pc_val_o_i_cld <= "00";
1998
                  sel_sp_in_o_i_cld <= "00";
1999
                  sel_sp_as_o_i_cld <= '1';
2000
                  sel_sp_val_o_i_cld <= "00";
2001
               elsif (rdy_i = '1') then
2002
                  sig_PC <= adr_nxt_pc_i;
2003
                  sel_pc_in_o_i_cld <= "00";
2004
                  sel_pc_as_o_i_cld <= '0';
2005
                  sel_pc_val_o_i_cld <= "10";
2006
                  zw_b2 <= d_i;
2007
               end if;
2008
            when s301 =>
2009
               if (rdy_i = '1' and
2010
                   zw_b3 = adr_nxt_pc_i (15 downto 8)) then
2011
                  sig_PC <= adr_nxt_pc_i;
2012
                  sel_pc_in_o_i_cld <= "00";
2013
                  sel_pc_as_o_i_cld <= '0';
2014
                  sel_pc_val_o_i_cld <= "00";
2015
                  sel_sp_in_o_i_cld <= "00";
2016
                  sel_sp_as_o_i_cld <= '1';
2017
                  sel_sp_val_o_i_cld <= "00";
2018
               elsif (rdy_i = '1') then
2019
                  sig_PC <= zw_b3 & adr_nxt_pc_i (7 downto 0);
2020
               end if;
2021
            when s302 =>
2022
               if (rdy_i = '1') then
2023
                  sig_PC <= adr_pc_i;
2024
                  sel_pc_in_o_i_cld <= "00";
2025
                  sel_pc_as_o_i_cld <= '0';
2026
                  sel_pc_val_o_i_cld <= "00";
2027
                  sel_sp_in_o_i_cld <= "00";
2028
                  sel_sp_as_o_i_cld <= '1';
2029
                  sel_sp_val_o_i_cld <= "00";
2030
               end if;
2031
            when RES =>
2032
               sel_pc_in_o_i_cld <= "00";
2033
               sel_pc_val_o_i_cld <= "00";
2034
               sel_pc_as_o_i_cld <= '0';
2035
               sig_PC <= adr_nxt_pc_i;
2036
               sel_pc_in_o_i_cld <= "00";
2037
               sel_pc_as_o_i_cld <= '0';
2038
               sel_pc_val_o_i_cld <= "00";
2039
               sel_sp_in_o_i_cld <= "00";
2040
               sel_sp_as_o_i_cld <= '1';
2041
               sel_sp_val_o_i_cld <= "00";
2042
            when s511 =>
2043
               if (rdy_i = '1' and
2044
                   zw_REG_OP = X"E5") then
2045
                  sig_PC <= X"00" & d_i;
2046
               elsif (rdy_i = '1' and
2047
                      zw_REG_OP = X"E9" and
2048
                      reg_F(3) = '0') then
2049
                  sig_PC <= adr_nxt_pc_i;
2050
 
2051
                  reg_F(7) <= zw_ALU(7);
2052
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
2053
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
2054
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
2055
                  (zw_ALU(0)));
2056
                  reg_F(0) <= zw_ALU(8);
2057
                  sel_pc_in_o_i_cld <= "00";
2058
                  sel_pc_as_o_i_cld <= '0';
2059
                  sel_pc_val_o_i_cld <= "00";
2060
                  sel_sp_in_o_i_cld <= "00";
2061
                  sel_sp_as_o_i_cld <= '1';
2062
                  sel_sp_val_o_i_cld <= "00";
2063
               elsif (rdy_i = '1' and
2064
                      zw_REG_OP = X"F5") then
2065
                  sig_PC <= X"00" & d_i;
2066
                  zw_b1 <= d_alu_i;
2067
               elsif (rdy_i = '1' and
2068
                      zw_REG_OP = X"ED") then
2069
                  sig_PC <= adr_nxt_pc_i;
2070
                  zw_b1 <= d_i;
2071
               elsif (rdy_i = '1' and
2072
                      zw_REG_OP = X"FD") then
2073
                  sig_PC <= adr_nxt_pc_i;
2074
                  zw_b1 <= d_alu_i;
2075
                  zw_b2(0) <= reg_0flag_i;
2076
               elsif (rdy_i = '1' and
2077
                      zw_REG_OP = X"F9") then
2078
                  sig_PC <= adr_nxt_pc_i;
2079
                  zw_b1 <= d_alu_i;
2080
                  zw_b2(0) <= reg_0flag_i;
2081
               elsif (rdy_i = '1' and
2082
                      zw_REG_OP = X"F1") then
2083
                  sig_PC <= X"00" & d_i;
2084
                  zw_b1 <= d_alu_i;
2085
               elsif (rdy_i = '1' and
2086
                      zw_REG_OP = X"E1") then
2087
                  sig_PC <= X"00" & d_i;
2088
                  zw_b1 <= d_alu_i;
2089
               elsif (rdy_i = '1' and
2090
                      zw_REG_OP = X"E9" and
2091
                      reg_F(3) = '1') then
2092
                  sig_PC <= adr_nxt_pc_i;
2093
 
2094
                  reg_F(7) <= zw_ALU(7);
2095
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
2096
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
2097
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
2098
                  (zw_ALU(0)));
2099
                  reg_F(0) <= zw_ALU2(4);
2100
                  sel_pc_in_o_i_cld <= "00";
2101
                  sel_pc_as_o_i_cld <= '0';
2102
                  sel_pc_val_o_i_cld <= "00";
2103
                  sel_sp_in_o_i_cld <= "00";
2104
                  sel_sp_as_o_i_cld <= '1';
2105
                  sel_sp_val_o_i_cld <= "00";
2106
               end if;
2107
            when s559 =>
2108
               if (rdy_i = '1') then
2109
                  sig_PC <= d_i & zw_b1;
2110
               end if;
2111
            when s562 =>
2112
               if (rdy_i = '1') then
2113
                  sig_PC <= d_i & zw_b1;
2114
                  zw_b3 <= d_alu_i;
2115
               end if;
2116
            when s567 =>
2117
               if (rdy_i = '1') then
2118
                  sig_PC <= d_i & zw_b1;
2119
                  zw_b3 <= d_alu_i;
2120
               end if;
2121
            when s568 =>
2122
               if (rdy_i = '1') then
2123
                  sig_PC <= X"00" & zw_b1;
2124
                  zw_b1 <= d_alu_i;
2125
                  zw_b2(0) <= reg_0flag_i;
2126
               end if;
2127
            when s569 =>
2128
               if (rdy_i = '1') then
2129
                  sig_PC <= X"00" & zw_b1;
2130
               end if;
2131
            when s570 =>
2132
               if (rdy_i = '1') then
2133
                  sig_PC <= X"00" & zw_b1;
2134
               end if;
2135
            when s571 =>
2136
               if (rdy_i = '1') then
2137
                  sig_PC <= d_i & zw_b1;
2138
                  zw_b3 <= d_alu_i;
2139
               end if;
2140
            when s572 =>
2141
               if (rdy_i = '1') then
2142
                  sig_PC <= X"00" & d_alu_i;
2143
                  zw_b1 <= d_i;
2144
               end if;
2145
            when s573 =>
2146
               if (rdy_i = '1' AND
2147
                   zw_b2(0) = '0' and
2148
                   reg_F(3) = '0') then
2149
                  sig_PC <= adr_pc_i;
2150
 
2151
                  reg_F(7) <= zw_ALU(7);
2152
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
2153
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
2154
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
2155
                  (zw_ALU(0)));
2156
                  reg_F(0) <= zw_ALU(8);
2157
                  sel_pc_in_o_i_cld <= "00";
2158
                  sel_pc_as_o_i_cld <= '0';
2159
                  sel_pc_val_o_i_cld <= "00";
2160
                  sel_sp_in_o_i_cld <= "00";
2161
                  sel_sp_as_o_i_cld <= '1';
2162
                  sel_sp_val_o_i_cld <= "00";
2163
               elsif (rdy_i = '1' AND
2164
                      zw_b2(0) = '0' and
2165
                      reg_F(3) = '1') then
2166
                  sig_PC <= adr_pc_i;
2167
 
2168
                  reg_F(7) <= zw_ALU(7);
2169
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
2170
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
2171
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
2172
                  (zw_ALU(0)));
2173
                  reg_F(0) <= zw_ALU2(4);
2174
                  sel_pc_in_o_i_cld <= "00";
2175
                  sel_pc_as_o_i_cld <= '0';
2176
                  sel_pc_val_o_i_cld <= "00";
2177
                  sel_sp_in_o_i_cld <= "00";
2178
                  sel_sp_as_o_i_cld <= '1';
2179
                  sel_sp_val_o_i_cld <= "00";
2180
               elsif (rdy_i = '1') then
2181
                  sig_PC <= zw_b3 & zw_b1;
2182
               end if;
2183
            when s574 =>
2184
               if (rdy_i = '1' and
2185
                   reg_F(3) = '0') then
2186
                  sig_PC <= adr_pc_i;
2187
 
2188
                  reg_F(7) <= zw_ALU(7);
2189
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
2190
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
2191
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
2192
                  (zw_ALU(0)));
2193
                  reg_F(0) <= zw_ALU(8);
2194
                  sel_pc_in_o_i_cld <= "00";
2195
                  sel_pc_as_o_i_cld <= '0';
2196
                  sel_pc_val_o_i_cld <= "00";
2197
                  sel_sp_in_o_i_cld <= "00";
2198
                  sel_sp_as_o_i_cld <= '1';
2199
                  sel_sp_val_o_i_cld <= "00";
2200
               elsif (rdy_i = '1' and
2201
                      reg_F(3) = '1') then
2202
                  sig_PC <= adr_pc_i;
2203
 
2204
                  reg_F(7) <= zw_ALU(7);
2205
                  reg_F(6) <= zw_b1(0) XOR zw_ALU(7);
2206
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
2207
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
2208
                  (zw_ALU(0)));
2209
                  reg_F(0) <= zw_ALU2(4);
2210
                  sel_pc_in_o_i_cld <= "00";
2211
                  sel_pc_as_o_i_cld <= '0';
2212
                  sel_pc_val_o_i_cld <= "00";
2213
                  sel_sp_in_o_i_cld <= "00";
2214
                  sel_sp_as_o_i_cld <= '1';
2215
                  sel_sp_val_o_i_cld <= "00";
2216
               end if;
2217
            when s548 =>
2218
               if (rdy_i = '1') then
2219
                  sig_PC <= adr_sp_i;
2220
               end if;
2221
            when s551 =>
2222
               sig_PC <= adr_sp_i;
2223
            when s552 =>
2224
               sig_PC <= adr_sp_i;
2225
            when s575 =>
2226
               if (rdy_i = '1') then
2227
                  sig_PC <= X"FFFF";
2228
                  zw_b1 <= d_i;
2229
               end if;
2230
            when s576 =>
2231
               sig_PC <= X"FFFE";
2232
            when s577 =>
2233
               if (rdy_i = '1') then
2234
                  sig_PC <= d_i & zw_b1;
2235
                  reg_F(2) <= '1';
2236
                  sel_pc_in_o_i_cld <= "00";
2237
                  sel_pc_as_o_i_cld <= '0';
2238
                  sel_pc_val_o_i_cld <= "00";
2239
                  sel_sp_in_o_i_cld <= "00";
2240
                  sel_sp_as_o_i_cld <= '1';
2241
                  sel_sp_val_o_i_cld <= "00";
2242
               end if;
2243
            when s532 =>
2244
               if (rdy_i = '1') then
2245
                  sig_PC <= adr_sp_i;
2246
               end if;
2247
            when s533 =>
2248
               sig_PC <= adr_sp_i;
2249
            when s534 =>
2250
               sig_PC <= adr_sp_i;
2251
            when s535 =>
2252
               if (rdy_i = '1') then
2253
                  sig_PC <= X"FFFB";
2254
                  zw_b1 <= d_i;
2255
               end if;
2256
            when s536 =>
2257
               sig_PC <= X"FFFA";
2258
            when s537 =>
2259
               if (rdy_i = '1') then
2260
                  sig_PC <= d_i & zw_b1;
2261
                  sel_pc_in_o_i_cld <= "00";
2262
                  sel_pc_as_o_i_cld <= '0';
2263
                  sel_pc_val_o_i_cld <= "00";
2264
                  sel_sp_in_o_i_cld <= "00";
2265
                  sel_sp_as_o_i_cld <= '1';
2266
                  sel_sp_val_o_i_cld <= "00";
2267
               end if;
2268
            when others =>
2269
               null;
2270
         end case;
2271
      end if;
2272
   end process clocked_proc;
2273
 
2274
   -----------------------------------------------------------------
2275
   nextstate_proc : process (
2276
      adr_nxt_pc_i,
2277
      current_state,
2278
      d_i,
2279
      irq_n_i,
2280
      rdy_i,
2281
      reg_F,
2282
      zw_REG_NMI,
2283
      zw_REG_OP,
2284
      zw_b2,
2285
      zw_b3
2286
   )
2287
   -----------------------------------------------------------------
2288
   begin
2289
      case current_state is
2290
         when FETCH =>
2291
            if ((zw_REG_NMI = '1') and (rdy_i = '1')) then
2292
               next_state <= s532;
2293
            elsif ((irq_n_i = '0' and
2294
                   reg_F(2) = '0') and (rdy_i = '1')) then
2295
               next_state <= s548;
2296
            elsif ((d_i = X"69" or
2297
                   d_i = X"65" or
2298
                   d_i = X"75" or
2299
                   d_i = X"6D" or
2300
                   d_i = X"7D" or
2301
                   d_i = X"79" or
2302
                   d_i = X"61" or
2303
                   d_i = X"71") and (rdy_i = '1')) then
2304
               next_state <= s510;
2305
            elsif ((d_i = X"06" or
2306
                   d_i = X"16" or
2307
                   d_i = X"0E" or
2308
                   d_i = X"1E") and (rdy_i = '1')) then
2309
               next_state <= s403;
2310
            elsif ((d_i = X"90" or
2311
                   d_i = X"B0" or
2312
                   d_i = X"F0" or
2313
                   d_i = X"30" or
2314
                   d_i = X"D0" or
2315
                   d_i = X"10" or
2316
                   d_i = X"50" or
2317
                   d_i = X"70") and (rdy_i = '1')) then
2318
               next_state <= s266;
2319
            elsif ((d_i = X"24" or
2320
                   d_i = X"2C") and (rdy_i = '1')) then
2321
               next_state <= s351;
2322
            elsif ((d_i = X"00") and (rdy_i = '1')) then
2323
               next_state <= s526;
2324
            elsif ((d_i = X"18") and (rdy_i = '1')) then
2325
               next_state <= s12;
2326
            elsif ((d_i = X"D8") and (rdy_i = '1')) then
2327
               next_state <= s16;
2328
            elsif ((d_i = X"58") and (rdy_i = '1')) then
2329
               next_state <= s17;
2330
            elsif ((d_i = X"B8") and (rdy_i = '1')) then
2331
               next_state <= s24;
2332
            elsif ((d_i = X"E0" or
2333
                   d_i = X"E4" or
2334
                   d_i = X"EC") and (rdy_i = '1')) then
2335
               next_state <= s201;
2336
            elsif ((d_i = X"C0" or
2337
                   d_i = X"C4" or
2338
                   d_i = X"CC") and (rdy_i = '1')) then
2339
               next_state <= s201;
2340
            elsif ((d_i = X"C6" or
2341
                   d_i = X"D6" or
2342
                   d_i = X"CE" or
2343
                   d_i = X"DE") and (rdy_i = '1')) then
2344
               next_state <= s226;
2345
            elsif ((d_i = X"CA") and (rdy_i = '1')) then
2346
               next_state <= s25;
2347
            elsif ((d_i = X"88") and (rdy_i = '1')) then
2348
               next_state <= s25;
2349
            elsif ((d_i = X"49" or
2350
                   d_i = X"45" or
2351
                   d_i = X"55" or
2352
                   d_i = X"4D" or
2353
                   d_i = X"5D" or
2354
                   d_i = X"59" or
2355
                   d_i = X"41" or
2356
                   d_i = X"51" or
2357
                   d_i = X"09" or
2358
                   d_i = X"05" or
2359
                   d_i = X"15" or
2360
                   d_i = X"0D" or
2361
                   d_i = X"1D" or
2362
                   d_i = X"19" or
2363
                   d_i = X"01" or
2364
                   d_i = X"11" or
2365
                   d_i = X"29" or
2366
                   d_i = X"25" or
2367
                   d_i = X"35" or
2368
                   d_i = X"2D" or
2369
                   d_i = X"3D" or
2370
                   d_i = X"39" or
2371
                   d_i = X"21" or
2372
                   d_i = X"31" or
2373
                   d_i = X"C9" or
2374
                   d_i = X"C5" or
2375
                   d_i = X"D5" or
2376
                   d_i = X"CD" or
2377
                   d_i = X"DD" or
2378
                   d_i = X"D9" or
2379
                   d_i = X"C1" or
2380
                   d_i = X"D1") and (rdy_i = '1')) then
2381
               next_state <= s201;
2382
            elsif ((d_i = X"E6" or
2383
                   d_i = X"F6" or
2384
                   d_i = X"EE" or
2385
                   d_i = X"FE") and (rdy_i = '1')) then
2386
               next_state <= s226;
2387
            elsif ((d_i = X"E8") and (rdy_i = '1')) then
2388
               next_state <= s25;
2389
            elsif ((d_i = X"C8") and (rdy_i = '1')) then
2390
               next_state <= s25;
2391
            elsif ((d_i = X"4C" or
2392
                   d_i = X"6C") and (rdy_i = '1')) then
2393
               next_state <= s271;
2394
            elsif ((d_i = X"20") and (rdy_i = '1')) then
2395
               next_state <= s397;
2396
            elsif ((d_i = X"A9" or
2397
                   d_i = X"A5" or
2398
                   d_i = X"B5" or
2399
                   d_i = X"AD" or
2400
                   d_i = X"BD" or
2401
                   d_i = X"B9" or
2402
                   d_i = X"A1" or
2403
                   d_i = X"B1") and (rdy_i = '1')) then
2404
               next_state <= s201;
2405
            elsif ((d_i = X"A2" or
2406
                   d_i = X"A6" or
2407
                   d_i = X"B6" or
2408
                   d_i = X"AE" or
2409
                   d_i = X"BE") and (rdy_i = '1')) then
2410
               next_state <= s201;
2411
            elsif ((d_i = X"A0" or
2412
                   d_i = X"A4" or
2413
                   d_i = X"B4" or
2414
                   d_i = X"AC" or
2415
                   d_i = X"BC") and (rdy_i = '1')) then
2416
               next_state <= s201;
2417
            elsif ((d_i = X"46" or
2418
                   d_i = X"56" or
2419
                   d_i = X"4E" or
2420
                   d_i = X"5E") and (rdy_i = '1')) then
2421
               next_state <= s403;
2422
            elsif ((d_i = X"EA") and (rdy_i = '1')) then
2423
               next_state <= s1;
2424
            elsif ((d_i = X"48") and (rdy_i = '1')) then
2425
               next_state <= s377;
2426
            elsif ((d_i = X"08") and (rdy_i = '1')) then
2427
               next_state <= s378;
2428
            elsif ((d_i = X"68") and (rdy_i = '1')) then
2429
               next_state <= s379;
2430
            elsif ((d_i = X"28") and (rdy_i = '1')) then
2431
               next_state <= s380;
2432
            elsif ((d_i = X"26" or
2433
                   d_i = X"36" or
2434
                   d_i = X"2E" or
2435
                   d_i = X"3E") and (rdy_i = '1')) then
2436
               next_state <= s403;
2437
            elsif ((d_i = X"66" or
2438
                   d_i = X"76" or
2439
                   d_i = X"6E" or
2440
                   d_i = X"7E") and (rdy_i = '1')) then
2441
               next_state <= s403;
2442
            elsif ((d_i = X"40") and (rdy_i = '1')) then
2443
               next_state <= s387;
2444
            elsif ((d_i = X"60") and (rdy_i = '1')) then
2445
               next_state <= s390;
2446
            elsif ((d_i = X"E9" or
2447
                   d_i = X"E5" or
2448
                   d_i = X"F5" or
2449
                   d_i = X"ED" or
2450
                   d_i = X"FD" or
2451
                   d_i = X"F9" or
2452
                   d_i = X"E1" or
2453
                   d_i = X"F1") and (rdy_i = '1')) then
2454
               next_state <= s511;
2455
            elsif ((d_i = X"38") and (rdy_i = '1')) then
2456
               next_state <= s2;
2457
            elsif ((d_i = X"F8") and (rdy_i = '1')) then
2458
               next_state <= s5;
2459
            elsif ((d_i = X"78") and (rdy_i = '1')) then
2460
               next_state <= s3;
2461
            elsif ((d_i = X"85" or
2462
                   d_i = X"95" or
2463
                   d_i = X"8D" or
2464
                   d_i = X"9D" or
2465
                   d_i = X"99" or
2466
                   d_i = X"81" or
2467
                   d_i = X"91" or
2468
                   d_i = X"11") and (rdy_i = '1')) then
2469
               next_state <= s177;
2470
            elsif ((d_i = X"86" or
2471
                   d_i = X"96" or
2472
                   d_i = X"8E") and (rdy_i = '1')) then
2473
               next_state <= s177;
2474
            elsif ((d_i = X"84" or
2475
                   d_i = X"94" or
2476
                   d_i = X"8C") and (rdy_i = '1')) then
2477
               next_state <= s177;
2478
            elsif ((d_i = X"AA") and (rdy_i = '1')) then
2479
               next_state <= s4;
2480
            elsif ((d_i = X"0A") and (rdy_i = '1')) then
2481
               next_state <= s404;
2482
            elsif ((d_i = X"4A") and (rdy_i = '1')) then
2483
               next_state <= s556;
2484
            elsif ((d_i = X"2A") and (rdy_i = '1')) then
2485
               next_state <= s557;
2486
            elsif ((d_i = X"6A") and (rdy_i = '1')) then
2487
               next_state <= s579;
2488
            elsif ((d_i = X"A8") and (rdy_i = '1')) then
2489
               next_state <= s4;
2490
            elsif ((d_i = X"98") and (rdy_i = '1')) then
2491
               next_state <= s4;
2492
            elsif ((d_i = X"BA") and (rdy_i = '1')) then
2493
               next_state <= s4;
2494
            elsif ((d_i = X"8A") and (rdy_i = '1')) then
2495
               next_state <= s4;
2496
            elsif ((d_i = X"9A") and (rdy_i = '1')) then
2497
               next_state <= s4;
2498
            elsif (rdy_i = '1') then
2499
               next_state <= s1;
2500
            else
2501
               next_state <= FETCH;
2502
            end if;
2503
         when s1 =>
2504
            if (rdy_i = '1') then
2505
               next_state <= FETCH;
2506
            else
2507
               next_state <= s1;
2508
            end if;
2509
         when s2 =>
2510
            if (rdy_i = '1') then
2511
               next_state <= FETCH;
2512
            else
2513
               next_state <= s2;
2514
            end if;
2515
         when s5 =>
2516
            if (rdy_i = '1') then
2517
               next_state <= FETCH;
2518
            else
2519
               next_state <= s5;
2520
            end if;
2521
         when s3 =>
2522
            if (rdy_i = '1') then
2523
               next_state <= FETCH;
2524
            else
2525
               next_state <= s3;
2526
            end if;
2527
         when s4 =>
2528
            if (rdy_i = '1' and
2529
                zw_REG_OP = X"9A") then
2530
               next_state <= FETCH;
2531
            elsif (rdy_i = '1' and
2532
                   zw_REG_OP = X"BA") then
2533
               next_state <= FETCH;
2534
            elsif (rdy_i = '1') then
2535
               next_state <= FETCH;
2536
            else
2537
               next_state <= s4;
2538
            end if;
2539
         when s12 =>
2540
            if (rdy_i = '1') then
2541
               next_state <= FETCH;
2542
            else
2543
               next_state <= s12;
2544
            end if;
2545
         when s16 =>
2546
            if (rdy_i = '1') then
2547
               next_state <= FETCH;
2548
            else
2549
               next_state <= s16;
2550
            end if;
2551
         when s17 =>
2552
            if (rdy_i = '1') then
2553
               next_state <= FETCH;
2554
            else
2555
               next_state <= s17;
2556
            end if;
2557
         when s24 =>
2558
            if (rdy_i = '1') then
2559
               next_state <= FETCH;
2560
            else
2561
               next_state <= s24;
2562
            end if;
2563
         when s25 =>
2564
            if (rdy_i = '1') then
2565
               next_state <= FETCH;
2566
            else
2567
               next_state <= s25;
2568
            end if;
2569
         when s271 =>
2570
            if (rdy_i = '1' and
2571
                zw_REG_OP = X"4C") then
2572
               next_state <= s307;
2573
            elsif (rdy_i = '1' and
2574
                   zw_REG_OP = X"6C") then
2575
               next_state <= s273;
2576
            else
2577
               next_state <= s271;
2578
            end if;
2579
         when s273 =>
2580
            if (rdy_i = '1') then
2581
               next_state <= s304;
2582
            else
2583
               next_state <= s273;
2584
            end if;
2585
         when s304 =>
2586
            if (rdy_i = '1') then
2587
               next_state <= s307;
2588
            else
2589
               next_state <= s304;
2590
            end if;
2591
         when s307 =>
2592
            if (rdy_i = '1') then
2593
               next_state <= FETCH;
2594
            else
2595
               next_state <= s307;
2596
            end if;
2597
         when s177 =>
2598
            if (rdy_i = '1' and
2599
                (zw_REG_OP = X"85" OR
2600
                zw_REG_OP = X"86" OR
2601
                zw_REG_OP = X"84")) then
2602
               next_state <= s184;
2603
            elsif (rdy_i = '1' and
2604
                   (zw_REG_OP = X"95" OR
2605
                   zw_REG_OP = X"94")) then
2606
               next_state <= s185;
2607
            elsif (rdy_i = '1' and
2608
                   (zw_REG_OP = X"8D" OR
2609
                   zw_REG_OP = X"8E" OR
2610
                   zw_REG_OP = X"8C")) then
2611
               next_state <= s183;
2612
            elsif (rdy_i = '1' and
2613
                   zw_REG_OP = X"9D") then
2614
               next_state <= s182;
2615
            elsif (rdy_i = '1' and
2616
                   zw_REG_OP = X"99") then
2617
               next_state <= s180;
2618
            elsif (rdy_i = '1' and
2619
                   zw_REG_OP = X"91") then
2620
               next_state <= s181;
2621
            elsif (rdy_i = '1' and
2622
                   zw_REG_OP = X"81") then
2623
               next_state <= s186;
2624
            elsif (rdy_i = '1' and
2625
                   zw_REG_OP = X"96") then
2626
               next_state <= s185;
2627
            else
2628
               next_state <= s177;
2629
            end if;
2630
         when s180 =>
2631
            if (rdy_i = '1') then
2632
               next_state <= s191;
2633
            else
2634
               next_state <= s180;
2635
            end if;
2636
         when s181 =>
2637
            if (rdy_i = '1') then
2638
               next_state <= s189;
2639
            else
2640
               next_state <= s181;
2641
            end if;
2642
         when s182 =>
2643
            if (rdy_i = '1') then
2644
               next_state <= s191;
2645
            else
2646
               next_state <= s182;
2647
            end if;
2648
         when s183 =>
2649
            if (rdy_i = '1') then
2650
               next_state <= s187;
2651
            else
2652
               next_state <= s183;
2653
            end if;
2654
         when s184 =>
2655
            next_state <= FETCH;
2656
         when s185 =>
2657
            if (rdy_i = '1') then
2658
               next_state <= s190;
2659
            else
2660
               next_state <= s185;
2661
            end if;
2662
         when s186 =>
2663
            if (rdy_i = '1') then
2664
               next_state <= s188;
2665
            else
2666
               next_state <= s186;
2667
            end if;
2668
         when s187 =>
2669
            next_state <= FETCH;
2670
         when s188 =>
2671
            if (rdy_i = '1') then
2672
               next_state <= s192;
2673
            else
2674
               next_state <= s188;
2675
            end if;
2676
         when s189 =>
2677
            if (rdy_i = '1') then
2678
               next_state <= s191;
2679
            else
2680
               next_state <= s189;
2681
            end if;
2682
         when s190 =>
2683
            next_state <= FETCH;
2684
         when s191 =>
2685
            next_state <= s193;
2686
         when s192 =>
2687
            next_state <= s193;
2688
         when s193 =>
2689
            next_state <= FETCH;
2690
         when s377 =>
2691
            if (rdy_i = '1') then
2692
               next_state <= s381;
2693
            else
2694
               next_state <= s377;
2695
            end if;
2696
         when s381 =>
2697
            next_state <= FETCH;
2698
         when s378 =>
2699
            if (rdy_i = '1') then
2700
               next_state <= s382;
2701
            else
2702
               next_state <= s378;
2703
            end if;
2704
         when s382 =>
2705
            next_state <= FETCH;
2706
         when s379 =>
2707
            if (rdy_i = '1') then
2708
               next_state <= s383;
2709
            else
2710
               next_state <= s379;
2711
            end if;
2712
         when s383 =>
2713
            if (rdy_i = '1') then
2714
               next_state <= s384;
2715
            else
2716
               next_state <= s383;
2717
            end if;
2718
         when s384 =>
2719
            if (rdy_i = '1') then
2720
               next_state <= FETCH;
2721
            else
2722
               next_state <= s384;
2723
            end if;
2724
         when s380 =>
2725
            if (rdy_i = '1') then
2726
               next_state <= s385;
2727
            else
2728
               next_state <= s380;
2729
            end if;
2730
         when s385 =>
2731
            if (rdy_i = '1') then
2732
               next_state <= s386;
2733
            else
2734
               next_state <= s385;
2735
            end if;
2736
         when s386 =>
2737
            if (rdy_i = '1') then
2738
               next_state <= FETCH;
2739
            else
2740
               next_state <= s386;
2741
            end if;
2742
         when s387 =>
2743
            if (rdy_i = '1') then
2744
               next_state <= s388;
2745
            else
2746
               next_state <= s387;
2747
            end if;
2748
         when s388 =>
2749
            if (rdy_i = '1') then
2750
               next_state <= s389;
2751
            else
2752
               next_state <= s388;
2753
            end if;
2754
         when s389 =>
2755
            if (rdy_i = '1') then
2756
               next_state <= s391;
2757
            else
2758
               next_state <= s389;
2759
            end if;
2760
         when s391 =>
2761
            if (rdy_i = '1') then
2762
               next_state <= s392;
2763
            else
2764
               next_state <= s391;
2765
            end if;
2766
         when s392 =>
2767
            if (rdy_i = '1') then
2768
               next_state <= FETCH;
2769
            else
2770
               next_state <= s392;
2771
            end if;
2772
         when s390 =>
2773
            if (rdy_i = '1') then
2774
               next_state <= s393;
2775
            else
2776
               next_state <= s390;
2777
            end if;
2778
         when s393 =>
2779
            if (rdy_i = '1') then
2780
               next_state <= s394;
2781
            else
2782
               next_state <= s393;
2783
            end if;
2784
         when s394 =>
2785
            if (rdy_i = '1') then
2786
               next_state <= s395;
2787
            else
2788
               next_state <= s394;
2789
            end if;
2790
         when s395 =>
2791
            if (rdy_i = '1') then
2792
               next_state <= s396;
2793
            else
2794
               next_state <= s395;
2795
            end if;
2796
         when s396 =>
2797
            if (rdy_i = '1') then
2798
               next_state <= FETCH;
2799
            else
2800
               next_state <= s396;
2801
            end if;
2802
         when s397 =>
2803
            if (rdy_i = '1') then
2804
               next_state <= s398;
2805
            else
2806
               next_state <= s397;
2807
            end if;
2808
         when s398 =>
2809
            if (rdy_i = '1') then
2810
               next_state <= s399;
2811
            else
2812
               next_state <= s398;
2813
            end if;
2814
         when s399 =>
2815
            next_state <= s400;
2816
         when s400 =>
2817
            next_state <= s401;
2818
         when s401 =>
2819
            if (rdy_i = '1') then
2820
               next_state <= FETCH;
2821
            else
2822
               next_state <= s401;
2823
            end if;
2824
         when s526 =>
2825
            if (rdy_i = '1') then
2826
               next_state <= s527;
2827
            else
2828
               next_state <= s526;
2829
            end if;
2830
         when s527 =>
2831
            next_state <= s528;
2832
         when s528 =>
2833
            next_state <= s529;
2834
         when s529 =>
2835
            next_state <= s531;
2836
         when s530 =>
2837
            if (rdy_i = '1') then
2838
               next_state <= FETCH;
2839
            else
2840
               next_state <= s530;
2841
            end if;
2842
         when s531 =>
2843
            if (rdy_i = '1') then
2844
               next_state <= s530;
2845
            else
2846
               next_state <= s531;
2847
            end if;
2848
         when s544 =>
2849
            next_state <= s550;
2850
         when s545 =>
2851
            next_state <= s546;
2852
         when s546 =>
2853
            next_state <= s547;
2854
         when s547 =>
2855
            if (rdy_i = '1') then
2856
               next_state <= s549;
2857
            else
2858
               next_state <= s547;
2859
            end if;
2860
         when s549 =>
2861
            if (rdy_i = '1') then
2862
               next_state <= FETCH;
2863
            else
2864
               next_state <= s549;
2865
            end if;
2866
         when s550 =>
2867
            next_state <= s545;
2868
         when s404 =>
2869
            if (rdy_i = '1') then
2870
               next_state <= FETCH;
2871
            else
2872
               next_state <= s404;
2873
            end if;
2874
         when s556 =>
2875
            if (rdy_i = '1') then
2876
               next_state <= FETCH;
2877
            else
2878
               next_state <= s556;
2879
            end if;
2880
         when s557 =>
2881
            if (rdy_i = '1') then
2882
               next_state <= FETCH;
2883
            else
2884
               next_state <= s557;
2885
            end if;
2886
         when s579 =>
2887
            if (rdy_i = '1') then
2888
               next_state <= FETCH;
2889
            else
2890
               next_state <= s579;
2891
            end if;
2892
         when s201 =>
2893
            if (rdy_i = '1' and
2894
                (zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR
2895
                zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR
2896
                zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR
2897
                zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) then
2898
               next_state <= s224;
2899
            elsif ((rdy_i = '1' and
2900
                   (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
2901
                   zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
2902
                   zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
2903
                   zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
2904
                   zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
2905
               next_state <= FETCH;
2906
            elsif ((rdy_i = '1' and
2907
                   (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
2908
                   zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
2909
                   zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
2910
                   zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
2911
                   zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
2912
               next_state <= FETCH;
2913
            elsif ((rdy_i = '1' and
2914
                   (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
2915
                   zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
2916
                   zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
2917
                   zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
2918
                    zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
2919
               next_state <= FETCH;
2920
            elsif ((rdy_i = '1' and
2921
                   (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
2922
                   zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
2923
                   zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
2924
                   zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
2925
                   zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
2926
                    zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
2927
                    zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
2928
                    zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
2929
               next_state <= FETCH;
2930
            elsif (rdy_i = '1' and
2931
                   (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
2932
                   zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) then
2933
               next_state <= FETCH;
2934
            elsif (rdy_i = '1' and
2935
                   (zw_REG_OP = X"B5" OR
2936
                   zw_REG_OP = X"B4" OR
2937
                   zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR
2938
                   zw_REG_OP = X"35" OR
2939
                   zw_REG_OP = X"D5")) then
2940
               next_state <= s217;
2941
            elsif (rdy_i = '1' and
2942
                   (zw_REG_OP = X"AD" OR
2943
                   zw_REG_OP = X"AE" OR
2944
                   zw_REG_OP = X"AC" OR
2945
                   zw_REG_OP = X"4D" OR
2946
                   zw_REG_OP = X"0D" OR
2947
                   zw_REG_OP = X"2D" OR
2948
                   zw_REG_OP = X"CD" OR
2949
                   zw_REG_OP = X"EC" OR
2950
                   zw_REG_OP = X"CC")) then
2951
               next_state <= s202;
2952
            elsif (rdy_i = '1' and
2953
                   (zw_REG_OP = X"BD" OR
2954
                   zw_REG_OP = X"BC" OR
2955
                   zw_REG_OP = X"5D" OR
2956
                   zw_REG_OP = X"1D" OR
2957
                   zw_REG_OP = X"3D" OR
2958
                   zw_REG_OP = X"DD")) then
2959
               next_state <= s210;
2960
            elsif (rdy_i = '1' and
2961
                   (zw_REG_OP = X"B9" OR
2962
                   zw_REG_OP = X"BE" OR
2963
                   zw_REG_OP = X"59" OR
2964
                   zw_REG_OP = X"19" OR
2965
                   zw_REG_OP = X"39" OR
2966
                   zw_REG_OP = X"D9")) then
2967
               next_state <= s211;
2968
            elsif (rdy_i = '1' and
2969
                   (zw_REG_OP = X"B1" OR
2970
                   zw_REG_OP = X"51" OR
2971
                   zw_REG_OP = X"11" OR
2972
                   zw_REG_OP = X"31" OR
2973
                   zw_REG_OP = X"D1")) then
2974
               next_state <= s215;
2975
            elsif (rdy_i = '1' and
2976
                   (zw_REG_OP = X"A1" OR
2977
                   zw_REG_OP = X"41" OR
2978
                   zw_REG_OP = X"01" OR
2979
                   zw_REG_OP = X"21" OR
2980
                   zw_REG_OP = X"C1")) then
2981
               next_state <= s218;
2982
            elsif (rdy_i = '1' and
2983
                   zw_REG_OP = X"B6") then
2984
               next_state <= s217;
2985
            else
2986
               next_state <= s201;
2987
            end if;
2988
         when s202 =>
2989
            if (rdy_i = '1') then
2990
               next_state <= s224;
2991
            else
2992
               next_state <= s202;
2993
            end if;
2994
         when s210 =>
2995
            if (rdy_i = '1') then
2996
               next_state <= s225;
2997
            else
2998
               next_state <= s210;
2999
            end if;
3000
         when s211 =>
3001
            if (rdy_i = '1') then
3002
               next_state <= s225;
3003
            else
3004
               next_state <= s211;
3005
            end if;
3006
         when s215 =>
3007
            if (rdy_i = '1') then
3008
               next_state <= s223;
3009
            else
3010
               next_state <= s215;
3011
            end if;
3012
         when s217 =>
3013
            if (rdy_i = '1') then
3014
               next_state <= s224;
3015
            else
3016
               next_state <= s217;
3017
            end if;
3018
         when s218 =>
3019
            if (rdy_i = '1') then
3020
               next_state <= s222;
3021
            else
3022
               next_state <= s218;
3023
            end if;
3024
         when s222 =>
3025
            if (rdy_i = '1') then
3026
               next_state <= s202;
3027
            else
3028
               next_state <= s222;
3029
            end if;
3030
         when s223 =>
3031
            if (rdy_i = '1') then
3032
               next_state <= s225;
3033
            else
3034
               next_state <= s223;
3035
            end if;
3036
         when s224 =>
3037
            if ((rdy_i = '1') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
3038
                zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
3039
                zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
3040
                zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
3041
               next_state <= FETCH;
3042
            elsif ((rdy_i = '1') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
3043
                   zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
3044
                   zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
3045
                   zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
3046
               next_state <= FETCH;
3047
            elsif ((rdy_i = '1') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
3048
                   zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
3049
                   zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
3050
                    zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
3051
               next_state <= FETCH;
3052
            elsif ((rdy_i = '1') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
3053
                   zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
3054
                   zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
3055
                   zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
3056
                    zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
3057
                    zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
3058
                    zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
3059
               next_state <= FETCH;
3060
            elsif (rdy_i = '1') then
3061
               next_state <= FETCH;
3062
            else
3063
               next_state <= s224;
3064
            end if;
3065
         when s225 =>
3066
            if ((rdy_i = '1' AND
3067
                zw_b2(0) = '0') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
3068
                zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
3069
                zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
3070
                zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
3071
               next_state <= FETCH;
3072
            elsif ((rdy_i = '1' AND
3073
                   zw_b2(0) = '0') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
3074
                   zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
3075
                   zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
3076
                   zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
3077
               next_state <= FETCH;
3078
            elsif ((rdy_i = '1' AND
3079
                   zw_b2(0) = '0') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
3080
                   zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
3081
                   zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
3082
                    zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
3083
               next_state <= FETCH;
3084
            elsif ((rdy_i = '1' AND
3085
                   zw_b2(0) = '0') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
3086
                   zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
3087
                   zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
3088
                   zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
3089
                    zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
3090
                    zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
3091
                    zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
3092
               next_state <= FETCH;
3093
            elsif (rdy_i = '1' AND
3094
                   zw_b2(0) = '0') then
3095
               next_state <= FETCH;
3096
            elsif (rdy_i = '1') then
3097
               next_state <= s224;
3098
            else
3099
               next_state <= s225;
3100
            end if;
3101
         when s226 =>
3102
            if (rdy_i = '1' and
3103
                (zw_REG_OP = X"C6" OR
3104
                zw_REG_OP = X"E6")) then
3105
               next_state <= s343;
3106
            elsif (rdy_i = '1' and
3107
                   (zw_REG_OP = X"D6" OR
3108
                   zw_REG_OP = X"F6")) then
3109
               next_state <= s247;
3110
            elsif (rdy_i = '1' and
3111
                   (zw_REG_OP = X"CE" OR
3112
                   zw_REG_OP = X"EE")) then
3113
               next_state <= s243;
3114
            elsif (rdy_i = '1' and
3115
                   (zw_REG_OP = X"DE" OR
3116
                   zw_REG_OP = X"FE")) then
3117
               next_state <= s244;
3118
            else
3119
               next_state <= s226;
3120
            end if;
3121
         when s243 =>
3122
            if (rdy_i = '1') then
3123
               next_state <= s343;
3124
            else
3125
               next_state <= s243;
3126
            end if;
3127
         when s244 =>
3128
            if (rdy_i = '1') then
3129
               next_state <= s344;
3130
            else
3131
               next_state <= s244;
3132
            end if;
3133
         when s247 =>
3134
            if (rdy_i = '1') then
3135
               next_state <= s343;
3136
            else
3137
               next_state <= s247;
3138
            end if;
3139
         when s344 =>
3140
            if (rdy_i = '1') then
3141
               next_state <= s343;
3142
            else
3143
               next_state <= s344;
3144
            end if;
3145
         when s343 =>
3146
            if (rdy_i = '1') then
3147
               next_state <= s250;
3148
            else
3149
               next_state <= s343;
3150
            end if;
3151
         when s250 =>
3152
            if (rdy_i = '1') then
3153
               next_state <= s251;
3154
            else
3155
               next_state <= s250;
3156
            end if;
3157
         when s251 =>
3158
            next_state <= FETCH;
3159
         when s351 =>
3160
            if (rdy_i = '1' and
3161
                zw_REG_OP = X"24") then
3162
               next_state <= s361;
3163
            elsif (rdy_i = '1' and
3164
                   zw_REG_OP = X"2C") then
3165
               next_state <= s360;
3166
            else
3167
               next_state <= s351;
3168
            end if;
3169
         when s361 =>
3170
            if (rdy_i = '1') then
3171
               next_state <= FETCH;
3172
            else
3173
               next_state <= s361;
3174
            end if;
3175
         when s360 =>
3176
            if (rdy_i = '1') then
3177
               next_state <= s361;
3178
            else
3179
               next_state <= s360;
3180
            end if;
3181
         when s403 =>
3182
            if (rdy_i = '1' and
3183
                (zw_REG_OP = X"1E" or
3184
                zw_REG_OP = X"7E" or
3185
                zw_REG_OP = X"3E" or
3186
                zw_REG_OP = X"5E")) then
3187
               next_state <= s407;
3188
            elsif (rdy_i = '1' and
3189
                   (zw_REG_OP = X"06" or
3190
                   zw_REG_OP = X"66" or
3191
                   zw_REG_OP = X"26" or
3192
                   zw_REG_OP = X"46")) then
3193
               next_state <= s413;
3194
            elsif (rdy_i = '1' and
3195
                   (zw_REG_OP = X"16" or
3196
                   zw_REG_OP = X"76" or
3197
                   zw_REG_OP = X"36" or
3198
                   zw_REG_OP = X"56")) then
3199
               next_state <= s409;
3200
            elsif (rdy_i = '1' and
3201
                   (zw_REG_OP = X"0E" or
3202
                   zw_REG_OP = X"6E" or
3203
                   zw_REG_OP = X"2E" or
3204
                   zw_REG_OP = X"4E")) then
3205
               next_state <= s406;
3206
            else
3207
               next_state <= s403;
3208
            end if;
3209
         when s406 =>
3210
            if (rdy_i = '1') then
3211
               next_state <= s413;
3212
            else
3213
               next_state <= s406;
3214
            end if;
3215
         when s407 =>
3216
            if (rdy_i = '1') then
3217
               next_state <= s412;
3218
            else
3219
               next_state <= s407;
3220
            end if;
3221
         when s409 =>
3222
            if (rdy_i = '1') then
3223
               next_state <= s413;
3224
            else
3225
               next_state <= s409;
3226
            end if;
3227
         when s412 =>
3228
            if (rdy_i = '1') then
3229
               next_state <= s413;
3230
            else
3231
               next_state <= s412;
3232
            end if;
3233
         when s413 =>
3234
            if (rdy_i = '1') then
3235
               next_state <= s416;
3236
            else
3237
               next_state <= s413;
3238
            end if;
3239
         when s416 =>
3240
            if (rdy_i = '1' and
3241
                (zw_REG_OP = X"06" or
3242
                zw_REG_OP = X"16" or
3243
                zw_REG_OP = X"0E" or
3244
                zw_REG_OP = X"1E")) then
3245
               next_state <= s418;
3246
            elsif (rdy_i = '1' and
3247
                   (zw_REG_OP = X"46" or
3248
                   zw_REG_OP = X"56" or
3249
                   zw_REG_OP = X"4E" or
3250
                   zw_REG_OP = X"5E")) then
3251
               next_state <= s418;
3252
            elsif (rdy_i = '1' and
3253
                   (zw_REG_OP = X"26" or
3254
                   zw_REG_OP = X"36" or
3255
                   zw_REG_OP = X"2E" or
3256
                   zw_REG_OP = X"3E")) then
3257
               next_state <= s418;
3258
            elsif (rdy_i = '1' and
3259
                   (zw_REG_OP = X"66" or
3260
                   zw_REG_OP = X"76" or
3261
                   zw_REG_OP = X"6E" or
3262
                   zw_REG_OP = X"7E")) then
3263
               next_state <= s418;
3264
            else
3265
               next_state <= s416;
3266
            end if;
3267
         when s418 =>
3268
            next_state <= FETCH;
3269
         when s510 =>
3270
            if (rdy_i = '1' and
3271
                zw_REG_OP = X"65") then
3272
               next_state <= s565;
3273
            elsif (rdy_i = '1' and
3274
                   zw_REG_OP = X"69" and
3275
                   reg_F(3) = '0') then
3276
               next_state <= FETCH;
3277
            elsif (rdy_i = '1' and
3278
                   zw_REG_OP = X"75") then
3279
               next_state <= s560;
3280
            elsif (rdy_i = '1' and
3281
                   zw_REG_OP = X"6D") then
3282
               next_state <= s553;
3283
            elsif (rdy_i = '1' and
3284
                   zw_REG_OP = X"7D") then
3285
               next_state <= s555;
3286
            elsif (rdy_i = '1' and
3287
                   zw_REG_OP = X"79") then
3288
               next_state <= s555;
3289
            elsif (rdy_i = '1' and
3290
                   zw_REG_OP = X"71") then
3291
               next_state <= s558;
3292
            elsif (rdy_i = '1' and
3293
                   zw_REG_OP = X"61") then
3294
               next_state <= s561;
3295
            elsif (rdy_i = '1' and
3296
                   zw_REG_OP = X"69" and
3297
                   reg_F(3) = '1') then
3298
               next_state <= FETCH;
3299
            else
3300
               next_state <= s510;
3301
            end if;
3302
         when s553 =>
3303
            if (rdy_i = '1') then
3304
               next_state <= s565;
3305
            else
3306
               next_state <= s553;
3307
            end if;
3308
         when s555 =>
3309
            if (rdy_i = '1') then
3310
               next_state <= s564;
3311
            else
3312
               next_state <= s555;
3313
            end if;
3314
         when s558 =>
3315
            if (rdy_i = '1') then
3316
               next_state <= s566;
3317
            else
3318
               next_state <= s558;
3319
            end if;
3320
         when s560 =>
3321
            if (rdy_i = '1') then
3322
               next_state <= s565;
3323
            else
3324
               next_state <= s560;
3325
            end if;
3326
         when s561 =>
3327
            if (rdy_i = '1') then
3328
               next_state <= s563;
3329
            else
3330
               next_state <= s561;
3331
            end if;
3332
         when s563 =>
3333
            if (rdy_i = '1') then
3334
               next_state <= s553;
3335
            else
3336
               next_state <= s563;
3337
            end if;
3338
         when s564 =>
3339
            if (rdy_i = '1' AND
3340
                zw_b2(0) = '0' and
3341
                reg_F(3) = '0') then
3342
               next_state <= FETCH;
3343
            elsif (rdy_i = '1' AND
3344
                   zw_b2(0) = '0' and
3345
                   reg_F(3) = '1') then
3346
               next_state <= FETCH;
3347
            elsif (rdy_i = '1') then
3348
               next_state <= s565;
3349
            else
3350
               next_state <= s564;
3351
            end if;
3352
         when s565 =>
3353
            if (rdy_i = '1' and
3354
                reg_F(3) = '0') then
3355
               next_state <= FETCH;
3356
            elsif (rdy_i = '1' and
3357
                   reg_F(3) = '1') then
3358
               next_state <= FETCH;
3359
            else
3360
               next_state <= s565;
3361
            end if;
3362
         when s566 =>
3363
            if (rdy_i = '1') then
3364
               next_state <= s564;
3365
            else
3366
               next_state <= s566;
3367
            end if;
3368
         when s266 =>
3369
            if (rdy_i = '1' and (
3370
                (reg_F(0) = '1' and zw_REG_OP = X"90") or
3371
                (reg_F(0) = '0' and zw_REG_OP = X"B0") or
3372
                (reg_F(1) = '0' and zw_REG_OP = X"F0") or
3373
                (reg_F(7) = '0' and zw_REG_OP = X"30") or
3374
                (reg_F(1) = '1' and zw_REG_OP = X"D0") or
3375
                (reg_F(7) = '1' and zw_REG_OP = X"10") or
3376
                (reg_F(6) = '1' and zw_REG_OP = X"50") or
3377
                (reg_F(6) = '0' and zw_REG_OP = X"70"))) then
3378
               next_state <= FETCH;
3379
            elsif (rdy_i = '1') then
3380
               next_state <= s301;
3381
            else
3382
               next_state <= s266;
3383
            end if;
3384
         when s301 =>
3385
            if (rdy_i = '1' and
3386
                zw_b3 = adr_nxt_pc_i (15 downto 8)) then
3387
               next_state <= FETCH;
3388
            elsif (rdy_i = '1') then
3389
               next_state <= s302;
3390
            else
3391
               next_state <= s301;
3392
            end if;
3393
         when s302 =>
3394
            if (rdy_i = '1') then
3395
               next_state <= FETCH;
3396
            else
3397
               next_state <= s302;
3398
            end if;
3399
         when RES =>
3400
            next_state <= s544;
3401
         when s511 =>
3402
            if (rdy_i = '1' and
3403
                zw_REG_OP = X"E5") then
3404
               next_state <= s574;
3405
            elsif (rdy_i = '1' and
3406
                   zw_REG_OP = X"E9" and
3407
                   reg_F(3) = '0') then
3408
               next_state <= FETCH;
3409
            elsif (rdy_i = '1' and
3410
                   zw_REG_OP = X"F5") then
3411
               next_state <= s569;
3412
            elsif (rdy_i = '1' and
3413
                   zw_REG_OP = X"ED") then
3414
               next_state <= s559;
3415
            elsif (rdy_i = '1' and
3416
                   zw_REG_OP = X"FD") then
3417
               next_state <= s562;
3418
            elsif (rdy_i = '1' and
3419
                   zw_REG_OP = X"F9") then
3420
               next_state <= s567;
3421
            elsif (rdy_i = '1' and
3422
                   zw_REG_OP = X"F1") then
3423
               next_state <= s568;
3424
            elsif (rdy_i = '1' and
3425
                   zw_REG_OP = X"E1") then
3426
               next_state <= s570;
3427
            elsif (rdy_i = '1' and
3428
                   zw_REG_OP = X"E9" and
3429
                   reg_F(3) = '1') then
3430
               next_state <= FETCH;
3431
            else
3432
               next_state <= s511;
3433
            end if;
3434
         when s559 =>
3435
            if (rdy_i = '1') then
3436
               next_state <= s574;
3437
            else
3438
               next_state <= s559;
3439
            end if;
3440
         when s562 =>
3441
            if (rdy_i = '1') then
3442
               next_state <= s573;
3443
            else
3444
               next_state <= s562;
3445
            end if;
3446
         when s567 =>
3447
            if (rdy_i = '1') then
3448
               next_state <= s573;
3449
            else
3450
               next_state <= s567;
3451
            end if;
3452
         when s568 =>
3453
            if (rdy_i = '1') then
3454
               next_state <= s571;
3455
            else
3456
               next_state <= s568;
3457
            end if;
3458
         when s569 =>
3459
            if (rdy_i = '1') then
3460
               next_state <= s574;
3461
            else
3462
               next_state <= s569;
3463
            end if;
3464
         when s570 =>
3465
            if (rdy_i = '1') then
3466
               next_state <= s572;
3467
            else
3468
               next_state <= s570;
3469
            end if;
3470
         when s571 =>
3471
            if (rdy_i = '1') then
3472
               next_state <= s573;
3473
            else
3474
               next_state <= s571;
3475
            end if;
3476
         when s572 =>
3477
            if (rdy_i = '1') then
3478
               next_state <= s559;
3479
            else
3480
               next_state <= s572;
3481
            end if;
3482
         when s573 =>
3483
            if (rdy_i = '1' AND
3484
                zw_b2(0) = '0' and
3485
                reg_F(3) = '0') then
3486
               next_state <= FETCH;
3487
            elsif (rdy_i = '1' AND
3488
                   zw_b2(0) = '0' and
3489
                   reg_F(3) = '1') then
3490
               next_state <= FETCH;
3491
            elsif (rdy_i = '1') then
3492
               next_state <= s574;
3493
            else
3494
               next_state <= s573;
3495
            end if;
3496
         when s574 =>
3497
            if (rdy_i = '1' and
3498
                reg_F(3) = '0') then
3499
               next_state <= FETCH;
3500
            elsif (rdy_i = '1' and
3501
                   reg_F(3) = '1') then
3502
               next_state <= FETCH;
3503
            else
3504
               next_state <= s574;
3505
            end if;
3506
         when s548 =>
3507
            if (rdy_i = '1') then
3508
               next_state <= s551;
3509
            else
3510
               next_state <= s548;
3511
            end if;
3512
         when s551 =>
3513
            next_state <= s552;
3514
         when s552 =>
3515
            next_state <= s576;
3516
         when s575 =>
3517
            if (rdy_i = '1') then
3518
               next_state <= s577;
3519
            else
3520
               next_state <= s575;
3521
            end if;
3522
         when s576 =>
3523
            next_state <= s575;
3524
         when s577 =>
3525
            if (rdy_i = '1') then
3526
               next_state <= FETCH;
3527
            else
3528
               next_state <= s577;
3529
            end if;
3530
         when s532 =>
3531
            if (rdy_i = '1') then
3532
               next_state <= s533;
3533
            else
3534
               next_state <= s532;
3535
            end if;
3536
         when s533 =>
3537
            next_state <= s534;
3538
         when s534 =>
3539
            next_state <= s536;
3540
         when s535 =>
3541
            if (rdy_i = '1') then
3542
               next_state <= s537;
3543
            else
3544
               next_state <= s535;
3545
            end if;
3546
         when s536 =>
3547
            next_state <= s535;
3548
         when s537 =>
3549
            if (rdy_i = '1') then
3550
               next_state <= FETCH;
3551
            else
3552
               next_state <= s537;
3553
            end if;
3554
         when others =>
3555
            next_state <= RES;
3556
      end case;
3557
   end process nextstate_proc;
3558
 
3559
   -----------------------------------------------------------------
3560
   output_proc : process (
3561
      adr_nxt_pc_i,
3562
      adr_pc_i,
3563
      adr_sp_i,
3564
      current_state,
3565
      d_alu_i,
3566
      d_i,
3567
      d_regs_out_i,
3568
      irq_n_i,
3569
      q_a_i,
3570
      q_x_i,
3571
      q_y_i,
3572
      rdy_i,
3573
      reg_F,
3574
      sig_PC,
3575
      zw_ALU,
3576
      zw_ALU1,
3577
      zw_ALU2,
3578
      zw_ALU3,
3579
      zw_ALU4,
3580
      zw_ALU5,
3581
      zw_ALU6,
3582
      zw_REG_NMI,
3583
      zw_REG_OP,
3584
      zw_b1,
3585
      zw_b2,
3586
      zw_b3,
3587
      zw_b4,
3588
      zw_w1
3589
   )
3590
   -----------------------------------------------------------------
3591
   begin
3592
      -- Default Assignment
3593
      a_o <= sig_PC;
3594
      adr_o <= X"0000";
3595
      ch_a_o <= X"00";
3596
      ch_b_o <= X"00";
3597
      d_regs_in_o <= X"00";
3598
      ld_o <= "00";
3599
      ld_pc_o <= '0';
3600
      ld_sp_o <= '0';
3601
      load_regs_o <= '0';
3602
      offset_o <= X"0000";
3603
      reg_0flag_o <= reg_F(0);
3604
      reg_1flag_o <= reg_F(1);
3605
      reg_3flag_o <= reg_F(3);
3606
      reg_7flag_o <= reg_F(7);
3607
      -- Default Assignment To Internals
3608
      sig_D_OUT <= X"00";
3609
      sig_RD <= '0';
3610
      sig_RWn <= '1';
3611
      sig_SYNC <= '0';
3612
      sig_WR <= '0';
3613
      zw_ALU <= '0' & X"00";
3614
      zw_ALU1 <= '0' & X"00";
3615
      zw_ALU2 <= '0' & X"00";
3616
      zw_ALU3 <= '0' & X"00";
3617
      zw_ALU4 <= '0' & X"00";
3618
      zw_ALU5 <= '0' & X"00";
3619
      zw_ALU6 <= '0' & X"00";
3620
 
3621
      -- Combined Actions
3622
      case current_state is
3623
         when FETCH =>
3624
            sig_RWn <= '1';
3625
            sig_RD <= '1';
3626
            sig_SYNC <= NOT (rdy_i);
3627
            if ((zw_REG_NMI = '1') and (rdy_i = '1')) then
3628
               ld_o <= "11";
3629
               ld_pc_o <= '1';
3630
            elsif ((irq_n_i = '0' and
3631
                   reg_F(2) = '0') and (rdy_i = '1')) then
3632
               ld_o <= "11";
3633
               ld_pc_o <= '1';
3634
            elsif ((d_i = X"69" or
3635
                   d_i = X"65" or
3636
                   d_i = X"75" or
3637
                   d_i = X"6D" or
3638
                   d_i = X"7D" or
3639
                   d_i = X"79" or
3640
                   d_i = X"61" or
3641
                   d_i = X"71") and (rdy_i = '1')) then
3642
               ld_o <= "11";
3643
               ld_pc_o <= '1';
3644
            elsif ((d_i = X"06" or
3645
                   d_i = X"16" or
3646
                   d_i = X"0E" or
3647
                   d_i = X"1E") and (rdy_i = '1')) then
3648
               ld_o <= "11";
3649
               ld_pc_o <= '1';
3650
            elsif ((d_i = X"90" or
3651
                   d_i = X"B0" or
3652
                   d_i = X"F0" or
3653
                   d_i = X"30" or
3654
                   d_i = X"D0" or
3655
                   d_i = X"10" or
3656
                   d_i = X"50" or
3657
                   d_i = X"70") and (rdy_i = '1')) then
3658
               ld_o <= "11";
3659
               ld_pc_o <= '1';
3660
            elsif ((d_i = X"24" or
3661
                   d_i = X"2C") and (rdy_i = '1')) then
3662
               ld_o <= "11";
3663
               ld_pc_o <= '1';
3664
            elsif ((d_i = X"00") and (rdy_i = '1')) then
3665
               ld_o <= "11";
3666
               ld_pc_o <= '1';
3667
            elsif ((d_i = X"18") and (rdy_i = '1')) then
3668
               ld_o <= "11";
3669
               ld_pc_o <= '1';
3670
            elsif ((d_i = X"D8") and (rdy_i = '1')) then
3671
               ld_o <= "11";
3672
               ld_pc_o <= '1';
3673
            elsif ((d_i = X"58") and (rdy_i = '1')) then
3674
               ld_o <= "11";
3675
               ld_pc_o <= '1';
3676
            elsif ((d_i = X"B8") and (rdy_i = '1')) then
3677
               ld_o <= "11";
3678
               ld_pc_o <= '1';
3679
            elsif ((d_i = X"E0" or
3680
                   d_i = X"E4" or
3681
                   d_i = X"EC") and (rdy_i = '1')) then
3682
               ld_o <= "11";
3683
               ld_pc_o <= '1';
3684
            elsif ((d_i = X"C0" or
3685
                   d_i = X"C4" or
3686
                   d_i = X"CC") and (rdy_i = '1')) then
3687
               ld_o <= "11";
3688
               ld_pc_o <= '1';
3689
            elsif ((d_i = X"C6" or
3690
                   d_i = X"D6" or
3691
                   d_i = X"CE" or
3692
                   d_i = X"DE") and (rdy_i = '1')) then
3693
               ld_o <= "11";
3694
               ld_pc_o <= '1';
3695
            elsif ((d_i = X"CA") and (rdy_i = '1')) then
3696
               ld_o <= "11";
3697
               ld_pc_o <= '1';
3698
            elsif ((d_i = X"88") and (rdy_i = '1')) then
3699
               ld_o <= "11";
3700
               ld_pc_o <= '1';
3701
            elsif ((d_i = X"49" or
3702
                   d_i = X"45" or
3703
                   d_i = X"55" or
3704
                   d_i = X"4D" or
3705
                   d_i = X"5D" or
3706
                   d_i = X"59" or
3707
                   d_i = X"41" or
3708
                   d_i = X"51" or
3709
                   d_i = X"09" or
3710
                   d_i = X"05" or
3711
                   d_i = X"15" or
3712
                   d_i = X"0D" or
3713
                   d_i = X"1D" or
3714
                   d_i = X"19" or
3715
                   d_i = X"01" or
3716
                   d_i = X"11" or
3717
                   d_i = X"29" or
3718
                   d_i = X"25" or
3719
                   d_i = X"35" or
3720
                   d_i = X"2D" or
3721
                   d_i = X"3D" or
3722
                   d_i = X"39" or
3723
                   d_i = X"21" or
3724
                   d_i = X"31" or
3725
                   d_i = X"C9" or
3726
                   d_i = X"C5" or
3727
                   d_i = X"D5" or
3728
                   d_i = X"CD" or
3729
                   d_i = X"DD" or
3730
                   d_i = X"D9" or
3731
                   d_i = X"C1" or
3732
                   d_i = X"D1") and (rdy_i = '1')) then
3733
               ld_o <= "11";
3734
               ld_pc_o <= '1';
3735
            elsif ((d_i = X"E6" or
3736
                   d_i = X"F6" or
3737
                   d_i = X"EE" or
3738
                   d_i = X"FE") and (rdy_i = '1')) then
3739
               ld_o <= "11";
3740
               ld_pc_o <= '1';
3741
            elsif ((d_i = X"E8") and (rdy_i = '1')) then
3742
               ld_o <= "11";
3743
               ld_pc_o <= '1';
3744
            elsif ((d_i = X"C8") and (rdy_i = '1')) then
3745
               ld_o <= "11";
3746
               ld_pc_o <= '1';
3747
            elsif ((d_i = X"4C" or
3748
                   d_i = X"6C") and (rdy_i = '1')) then
3749
               ld_o <= "11";
3750
               ld_pc_o <= '1';
3751
            elsif ((d_i = X"20") and (rdy_i = '1')) then
3752
               ld_o <= "11";
3753
               ld_pc_o <= '1';
3754
            elsif ((d_i = X"A9" or
3755
                   d_i = X"A5" or
3756
                   d_i = X"B5" or
3757
                   d_i = X"AD" or
3758
                   d_i = X"BD" or
3759
                   d_i = X"B9" or
3760
                   d_i = X"A1" or
3761
                   d_i = X"B1") and (rdy_i = '1')) then
3762
               ld_o <= "11";
3763
               ld_pc_o <= '1';
3764
            elsif ((d_i = X"A2" or
3765
                   d_i = X"A6" or
3766
                   d_i = X"B6" or
3767
                   d_i = X"AE" or
3768
                   d_i = X"BE") and (rdy_i = '1')) then
3769
               ld_o <= "11";
3770
               ld_pc_o <= '1';
3771
            elsif ((d_i = X"A0" or
3772
                   d_i = X"A4" or
3773
                   d_i = X"B4" or
3774
                   d_i = X"AC" or
3775
                   d_i = X"BC") and (rdy_i = '1')) then
3776
               ld_o <= "11";
3777
               ld_pc_o <= '1';
3778
            elsif ((d_i = X"46" or
3779
                   d_i = X"56" or
3780
                   d_i = X"4E" or
3781
                   d_i = X"5E") and (rdy_i = '1')) then
3782
               ld_o <= "11";
3783
               ld_pc_o <= '1';
3784
            elsif ((d_i = X"EA") and (rdy_i = '1')) then
3785
               ld_o <= "11";
3786
               ld_pc_o <= '1';
3787
            elsif ((d_i = X"48") and (rdy_i = '1')) then
3788
               ld_o <= "11";
3789
               ld_pc_o <= '1';
3790
            elsif ((d_i = X"08") and (rdy_i = '1')) then
3791
               ld_o <= "11";
3792
               ld_pc_o <= '1';
3793
            elsif ((d_i = X"68") and (rdy_i = '1')) then
3794
               ld_o <= "11";
3795
               ld_pc_o <= '1';
3796
            elsif ((d_i = X"28") and (rdy_i = '1')) then
3797
               ld_o <= "11";
3798
               ld_pc_o <= '1';
3799
            elsif ((d_i = X"26" or
3800
                   d_i = X"36" or
3801
                   d_i = X"2E" or
3802
                   d_i = X"3E") and (rdy_i = '1')) then
3803
               ld_o <= "11";
3804
               ld_pc_o <= '1';
3805
            elsif ((d_i = X"66" or
3806
                   d_i = X"76" or
3807
                   d_i = X"6E" or
3808
                   d_i = X"7E") and (rdy_i = '1')) then
3809
               ld_o <= "11";
3810
               ld_pc_o <= '1';
3811
            elsif ((d_i = X"40") and (rdy_i = '1')) then
3812
               ld_o <= "11";
3813
               ld_pc_o <= '1';
3814
            elsif ((d_i = X"60") and (rdy_i = '1')) then
3815
               ld_o <= "11";
3816
               ld_pc_o <= '1';
3817
            elsif ((d_i = X"E9" or
3818
                   d_i = X"E5" or
3819
                   d_i = X"F5" or
3820
                   d_i = X"ED" or
3821
                   d_i = X"FD" or
3822
                   d_i = X"F9" or
3823
                   d_i = X"E1" or
3824
                   d_i = X"F1") and (rdy_i = '1')) then
3825
               ld_o <= "11";
3826
               ld_pc_o <= '1';
3827
            elsif ((d_i = X"38") and (rdy_i = '1')) then
3828
               ld_o <= "11";
3829
               ld_pc_o <= '1';
3830
            elsif ((d_i = X"F8") and (rdy_i = '1')) then
3831
               ld_o <= "11";
3832
               ld_pc_o <= '1';
3833
            elsif ((d_i = X"78") and (rdy_i = '1')) then
3834
               ld_o <= "11";
3835
               ld_pc_o <= '1';
3836
            elsif ((d_i = X"85" or
3837
                   d_i = X"95" or
3838
                   d_i = X"8D" or
3839
                   d_i = X"9D" or
3840
                   d_i = X"99" or
3841
                   d_i = X"81" or
3842
                   d_i = X"91" or
3843
                   d_i = X"11") and (rdy_i = '1')) then
3844
               ld_o <= "11";
3845
               ld_pc_o <= '1';
3846
            elsif ((d_i = X"86" or
3847
                   d_i = X"96" or
3848
                   d_i = X"8E") and (rdy_i = '1')) then
3849
               ld_o <= "11";
3850
               ld_pc_o <= '1';
3851
            elsif ((d_i = X"84" or
3852
                   d_i = X"94" or
3853
                   d_i = X"8C") and (rdy_i = '1')) then
3854
               ld_o <= "11";
3855
               ld_pc_o <= '1';
3856
            elsif ((d_i = X"AA") and (rdy_i = '1')) then
3857
               ld_o <= "11";
3858
               ld_pc_o <= '1';
3859
            elsif ((d_i = X"0A") and (rdy_i = '1')) then
3860
               ld_o <= "11";
3861
               ld_pc_o <= '1';
3862
            elsif ((d_i = X"4A") and (rdy_i = '1')) then
3863
               ld_o <= "11";
3864
               ld_pc_o <= '1';
3865
            elsif ((d_i = X"2A") and (rdy_i = '1')) then
3866
               ld_o <= "11";
3867
               ld_pc_o <= '1';
3868
            elsif ((d_i = X"6A") and (rdy_i = '1')) then
3869
               ld_o <= "11";
3870
               ld_pc_o <= '1';
3871
            elsif ((d_i = X"A8") and (rdy_i = '1')) then
3872
               ld_o <= "11";
3873
               ld_pc_o <= '1';
3874
            elsif ((d_i = X"98") and (rdy_i = '1')) then
3875
               ld_o <= "11";
3876
               ld_pc_o <= '1';
3877
            elsif ((d_i = X"BA") and (rdy_i = '1')) then
3878
               ld_o <= "11";
3879
               ld_pc_o <= '1';
3880
            elsif ((d_i = X"8A") and (rdy_i = '1')) then
3881
               ld_o <= "11";
3882
               ld_pc_o <= '1';
3883
            elsif ((d_i = X"9A") and (rdy_i = '1')) then
3884
               ld_o <= "11";
3885
               ld_pc_o <= '1';
3886
            elsif (rdy_i = '1') then
3887
               ld_o <= "11";
3888
               ld_pc_o <= '1';
3889
            end if;
3890
         when s1 =>
3891
            sig_RWn <= '1';
3892
            sig_RD <= '1';
3893
            if (rdy_i = '1') then
3894
               sig_SYNC <= '1';
3895
            end if;
3896
         when s2 =>
3897
            sig_RWn <= '1';
3898
            sig_RD <= '1';
3899
            if (rdy_i = '1') then
3900
               sig_SYNC <= '1';
3901
            end if;
3902
         when s5 =>
3903
            sig_RWn <= '1';
3904
            sig_RD <= '1';
3905
            if (rdy_i = '1') then
3906
               sig_SYNC <= '1';
3907
            end if;
3908
         when s3 =>
3909
            sig_RWn <= '1';
3910
            sig_RD <= '1';
3911
            if (rdy_i = '1') then
3912
               sig_SYNC <= '1';
3913
            end if;
3914
         when s4 =>
3915
            sig_RWn <= '1';
3916
            sig_RD <= '1';
3917
            if (rdy_i = '1' and
3918
                zw_REG_OP = X"9A") then
3919
               adr_o <= X"01" & d_regs_out_i;
3920
               ld_o <= "11";
3921
               ld_sp_o <= '1';
3922
               sig_SYNC <= '1';
3923
            elsif (rdy_i = '1' and
3924
                   zw_REG_OP = X"BA") then
3925
               d_regs_in_o <= adr_sp_i (7 downto 0);
3926
               ch_a_o <= adr_sp_i (7 downto 0);
3927
               ch_b_o <= X"00";
3928
               load_regs_o <= '1';
3929
               sig_SYNC <= '1';
3930
            elsif (rdy_i = '1') then
3931
               ch_a_o <= d_regs_out_i;
3932
               ch_b_o <= X"00";
3933
               load_regs_o <= '1';
3934
               sig_SYNC <= '1';
3935
            end if;
3936
         when s12 =>
3937
            sig_RWn <= '1';
3938
            sig_RD <= '1';
3939
            if (rdy_i = '1') then
3940
               sig_SYNC <= '1';
3941
            end if;
3942
         when s16 =>
3943
            sig_RWn <= '1';
3944
            sig_RD <= '1';
3945
            if (rdy_i = '1') then
3946
               sig_SYNC <= '1';
3947
            end if;
3948
         when s17 =>
3949
            sig_RWn <= '1';
3950
            sig_RD <= '1';
3951
            if (rdy_i = '1') then
3952
               sig_SYNC <= '1';
3953
            end if;
3954
         when s24 =>
3955
            sig_RWn <= '1';
3956
            sig_RD <= '1';
3957
            if (rdy_i = '1') then
3958
               sig_SYNC <= '1';
3959
            end if;
3960
         when s25 =>
3961
            sig_RWn <= '1';
3962
            sig_RD <= '1';
3963
            if (rdy_i = '1') then
3964
               d_regs_in_o <= d_alu_i;
3965
               ch_a_o <= d_regs_out_i;
3966
               ch_b_o <= zw_b4;
3967
               load_regs_o <= '1';
3968
               sig_SYNC <= '1';
3969
            end if;
3970
         when s271 =>
3971
            sig_RWn <= '1';
3972
            sig_RD <= '1';
3973
         when s273 =>
3974
            sig_RWn <= '1';
3975
            sig_RD <= '1';
3976
            if (rdy_i = '1') then
3977
               adr_o <= d_i & zw_b1;
3978
               ld_o <= "11";
3979
               ld_pc_o <= '1';
3980
            end if;
3981
         when s304 =>
3982
            sig_RWn <= '1';
3983
            sig_RD <= '1';
3984
         when s307 =>
3985
            sig_RWn <= '1';
3986
            sig_RD <= '1';
3987
            if (rdy_i = '1') then
3988
               adr_o <= d_i & zw_b1;
3989
               ld_o <= "11";
3990
               ld_pc_o <= '1';
3991
               sig_SYNC <= '1';
3992
            end if;
3993
         when s177 =>
3994
            sig_RWn <= '1';
3995
            sig_RD <= '1';
3996
            if (rdy_i = '1' and
3997
                (zw_REG_OP = X"85" OR
3998
                zw_REG_OP = X"86" OR
3999
                zw_REG_OP = X"84")) then
4000
               sig_RWn <= '0';
4001
               sig_RD <= '0';
4002
               sig_WR <= '1';
4003
               sig_D_OUT <= d_regs_out_i;
4004
               ld_o <= "11";
4005
               ld_pc_o <= '1';
4006
            elsif (rdy_i = '1' and
4007
                   (zw_REG_OP = X"95" OR
4008
                   zw_REG_OP = X"94")) then
4009
               ch_a_o <=  d_i;
4010
               ch_b_o <= q_x_i;
4011
            elsif (rdy_i = '1' and
4012
                   (zw_REG_OP = X"8D" OR
4013
                   zw_REG_OP = X"8E" OR
4014
                   zw_REG_OP = X"8C")) then
4015
               ld_o <= "11";
4016
               ld_pc_o <= '1';
4017
            elsif (rdy_i = '1' and
4018
                   zw_REG_OP = X"9D") then
4019
               ld_o <= "11";
4020
               ld_pc_o <= '1';
4021
               ch_a_o <= d_i;
4022
               ch_b_o <= q_x_i;
4023
            elsif (rdy_i = '1' and
4024
                   zw_REG_OP = X"99") then
4025
               ld_o <= "11";
4026
               ld_pc_o <= '1';
4027
               ch_a_o <= d_i;
4028
               ch_b_o <= q_y_i;
4029
            elsif (rdy_i = '1' and
4030
                   zw_REG_OP = X"91") then
4031
               ch_a_o <= d_i;
4032
               ch_b_o <= X"01";
4033
            elsif (rdy_i = '1' and
4034
                   zw_REG_OP = X"81") then
4035
               ch_a_o <=  d_i;
4036
               ch_b_o <= q_x_i;
4037
            elsif (rdy_i = '1' and
4038
                   zw_REG_OP = X"96") then
4039
               ch_a_o <=  d_i;
4040
               ch_b_o <= q_y_i;
4041
            end if;
4042
         when s180 =>
4043
            sig_RWn <= '1';
4044
            sig_RD <= '1';
4045
            if (rdy_i = '1') then
4046
               ch_a_o <= d_i;
4047
               ch_b_o <= "0000000" & zw_b2(0);
4048
               ld_o <= "11";
4049
               ld_pc_o <= '1';
4050
            end if;
4051
         when s181 =>
4052
            sig_RWn <= '1';
4053
            sig_RD <= '1';
4054
            if (rdy_i = '1') then
4055
               ch_a_o <= d_i;
4056
               ch_b_o <= q_y_i;
4057
            end if;
4058
         when s182 =>
4059
            sig_RWn <= '1';
4060
            sig_RD <= '1';
4061
            if (rdy_i = '1') then
4062
               ch_a_o <= d_i;
4063
               ch_b_o <= "0000000" & zw_b2(0);
4064
               ld_o <= "11";
4065
               ld_pc_o <= '1';
4066
            end if;
4067
         when s183 =>
4068
            sig_RWn <= '1';
4069
            sig_RD <= '1';
4070
            if (rdy_i = '1') then
4071
               sig_RWn <= '0';
4072
               sig_RD <= '0';
4073
               sig_WR <= '1';
4074
               sig_D_OUT <= d_regs_out_i;
4075
               ld_o <= "11";
4076
               ld_pc_o <= '1';
4077
            end if;
4078
         when s184 =>
4079
            sig_RWn <= '1';
4080
            sig_RD <= '1';
4081
            sig_SYNC <= '1';
4082
         when s185 =>
4083
            sig_RWn <= '1';
4084
            sig_RD <= '1';
4085
            if (rdy_i = '1') then
4086
               sig_RWn <= '0';
4087
               sig_RD <= '0';
4088
               sig_WR <= '1';
4089
               sig_D_OUT <= d_regs_out_i;
4090
               ld_o <= "11";
4091
               ld_pc_o <= '1';
4092
            end if;
4093
         when s186 =>
4094
            sig_RWn <= '1';
4095
            sig_RD <= '1';
4096
         when s187 =>
4097
            sig_RWn <= '1';
4098
            sig_RD <= '1';
4099
            sig_SYNC <= '1';
4100
         when s188 =>
4101
            sig_RWn <= '1';
4102
            sig_RD <= '1';
4103
            if (rdy_i = '1') then
4104
               ch_a_o <=  zw_b1;
4105
               ch_b_o <= X"01";
4106
            end if;
4107
         when s189 =>
4108
            sig_RWn <= '1';
4109
            sig_RD <= '1';
4110
            if (rdy_i = '1') then
4111
               ch_a_o <= d_i;
4112
               ch_b_o <= "0000000" & zw_b2(0);
4113
               ld_o <= "11";
4114
               ld_pc_o <= '1';
4115
            end if;
4116
         when s190 =>
4117
            sig_RWn <= '1';
4118
            sig_RD <= '1';
4119
            sig_SYNC <= '1';
4120
         when s191 =>
4121
            sig_RWn <= '1';
4122
            sig_RD <= '1';
4123
            sig_RWn <= '0';
4124
            sig_RD <= '0';
4125
            sig_WR <= '1';
4126
            sig_D_OUT <= d_regs_out_i;
4127
         when s192 =>
4128
            sig_RWn <= '1';
4129
            sig_RD <= '1';
4130
            sig_RWn <= '0';
4131
            sig_RD <= '0';
4132
            sig_WR <= '1';
4133
            sig_D_OUT <= d_regs_out_i;
4134
            ld_o <= "11";
4135
            ld_pc_o <= '1';
4136
         when s193 =>
4137
            sig_RWn <= '1';
4138
            sig_RD <= '1';
4139
            sig_SYNC <= '1';
4140
         when s377 =>
4141
            sig_RWn <= '1';
4142
            sig_RD <= '1';
4143
            if (rdy_i = '1') then
4144
               sig_RWn <= '0';
4145
               sig_RD <= '0';
4146
               sig_WR <= '1';
4147
               sig_D_OUT <= q_a_i;
4148
               ld_o <= "11";
4149
               ld_sp_o <= '1';
4150
            end if;
4151
         when s381 =>
4152
            sig_RWn <= '1';
4153
            sig_RD <= '1';
4154
            sig_SYNC <= '1';
4155
         when s378 =>
4156
            sig_RWn <= '1';
4157
            sig_RD <= '1';
4158
            if (rdy_i = '1') then
4159
               sig_RWn <= '0';
4160
               sig_RD <= '0';
4161
               sig_WR <= '1';
4162
               sig_D_OUT <= reg_F;
4163
               ld_o <= "11";
4164
               ld_sp_o <= '1';
4165
            end if;
4166
         when s382 =>
4167
            sig_RWn <= '1';
4168
            sig_RD <= '1';
4169
            sig_SYNC <= '1';
4170
         when s379 =>
4171
            sig_RWn <= '1';
4172
            sig_RD <= '1';
4173
            if (rdy_i = '1') then
4174
               ld_o <= "11";
4175
               ld_sp_o <= '1';
4176
            end if;
4177
         when s383 =>
4178
            sig_RWn <= '1';
4179
            sig_RD <= '1';
4180
         when s384 =>
4181
            sig_RWn <= '1';
4182
            sig_RD <= '1';
4183
            if (rdy_i = '1') then
4184
               d_regs_in_o <= d_i;
4185
               load_regs_o <= '1';
4186
               ch_a_o <= d_i;
4187
               ch_b_o <= X"00";
4188
               sig_SYNC <= '1';
4189
            end if;
4190
         when s380 =>
4191
            sig_RWn <= '1';
4192
            sig_RD <= '1';
4193
            if (rdy_i = '1') then
4194
               ld_o <= "11";
4195
               ld_sp_o <= '1';
4196
            end if;
4197
         when s385 =>
4198
            sig_RWn <= '1';
4199
            sig_RD <= '1';
4200
         when s386 =>
4201
            sig_RWn <= '1';
4202
            sig_RD <= '1';
4203
            if (rdy_i = '1') then
4204
               sig_SYNC <= '1';
4205
            end if;
4206
         when s387 =>
4207
            sig_RWn <= '1';
4208
            sig_RD <= '1';
4209
            if (rdy_i = '1') then
4210
               ld_o <= "11";
4211
               ld_sp_o <= '1';
4212
            end if;
4213
         when s388 =>
4214
            sig_RWn <= '1';
4215
            sig_RD <= '1';
4216
            if (rdy_i = '1') then
4217
               ld_o <= "11";
4218
               ld_sp_o <= '1';
4219
            end if;
4220
         when s389 =>
4221
            sig_RWn <= '1';
4222
            sig_RD <= '1';
4223
            if (rdy_i = '1') then
4224
               ld_o <= "11";
4225
               ld_sp_o <= '1';
4226
            end if;
4227
         when s391 =>
4228
            sig_RWn <= '1';
4229
            sig_RD <= '1';
4230
         when s392 =>
4231
            sig_RWn <= '1';
4232
            sig_RD <= '1';
4233
            if (rdy_i = '1') then
4234
               adr_o <= d_i & zw_b1;
4235
               ld_o <= "11";
4236
               ld_pc_o <= '1';
4237
               sig_SYNC <= '1';
4238
            end if;
4239
         when s390 =>
4240
            sig_RWn <= '1';
4241
            sig_RD <= '1';
4242
            if (rdy_i = '1') then
4243
               ld_o <= "11";
4244
               ld_sp_o <= '1';
4245
            end if;
4246
         when s393 =>
4247
            sig_RWn <= '1';
4248
            sig_RD <= '1';
4249
            if (rdy_i = '1') then
4250
               ld_o <= "11";
4251
               ld_sp_o <= '1';
4252
            end if;
4253
         when s394 =>
4254
            sig_RWn <= '1';
4255
            sig_RD <= '1';
4256
         when s395 =>
4257
            sig_RWn <= '1';
4258
            sig_RD <= '1';
4259
            if (rdy_i = '1') then
4260
               adr_o <= d_i & zw_b1;
4261
               ld_o <= "11";
4262
               ld_pc_o <= '1';
4263
            end if;
4264
         when s396 =>
4265
            sig_RWn <= '1';
4266
            sig_RD <= '1';
4267
            if (rdy_i = '1') then
4268
               sig_SYNC <= '1';
4269
            end if;
4270
         when s397 =>
4271
            sig_RWn <= '1';
4272
            sig_RD <= '1';
4273
            if (rdy_i = '1') then
4274
               ld_o <= "11";
4275
               ld_sp_o <= '1';
4276
               ld_pc_o <= '1';
4277
            end if;
4278
         when s398 =>
4279
            sig_RWn <= '1';
4280
            sig_RD <= '1';
4281
            if (rdy_i = '1') then
4282
               sig_RWn <= '0';
4283
               sig_RD <= '0';
4284
               sig_WR <= '1';
4285
               sig_D_OUT <= adr_pc_i (15 downto 8);
4286
            end if;
4287
         when s399 =>
4288
            sig_RWn <= '1';
4289
            sig_RD <= '1';
4290
            ld_o <= "11";
4291
            ld_sp_o <= '1';
4292
            sig_RWn <= '0';
4293
            sig_RD <= '0';
4294
            sig_WR <= '1';
4295
            sig_D_OUT <= adr_pc_i (7 downto 0);
4296
         when s400 =>
4297
            sig_RWn <= '1';
4298
            sig_RD <= '1';
4299
         when s401 =>
4300
            sig_RWn <= '1';
4301
            sig_RD <= '1';
4302
            if (rdy_i = '1') then
4303
               adr_o <= d_i & zw_b1;
4304
               ld_o <= "11";
4305
               ld_pc_o <= '1';
4306
               sig_SYNC <= '1';
4307
            end if;
4308
         when s526 =>
4309
            sig_RWn <= '1';
4310
            sig_RD <= '1';
4311
            if (rdy_i = '1') then
4312
               ld_o <= "11";
4313
               ld_sp_o <= '1';
4314
               ld_pc_o <= '1';
4315
            end if;
4316
         when s527 =>
4317
            sig_RWn <= '1';
4318
            sig_RD <= '1';
4319
            ld_o <= "11";
4320
            ld_sp_o <= '1';
4321
            sig_RWn <= '0';
4322
            sig_RD <= '0';
4323
            sig_WR <= '1';
4324
            sig_D_OUT <= adr_pc_i (15 downto 8);
4325
         when s528 =>
4326
            sig_RWn <= '1';
4327
            sig_RD <= '1';
4328
            ld_o <= "11";
4329
            ld_sp_o <= '1';
4330
            sig_RWn <= '0';
4331
            sig_RD <= '0';
4332
            sig_WR <= '1';
4333
            sig_D_OUT <= adr_pc_i (7 downto 0);
4334
         when s529 =>
4335
            sig_RWn <= '1';
4336
            sig_RD <= '1';
4337
            sig_RWn <= '0';
4338
            sig_RD <= '0';
4339
            sig_WR <= '1';
4340
            sig_D_OUT <= reg_F;
4341
         when s530 =>
4342
            sig_RWn <= '1';
4343
            sig_RD <= '1';
4344
            if (rdy_i = '1') then
4345
               sig_SYNC <= '1';
4346
            end if;
4347
         when s531 =>
4348
            sig_RWn <= '1';
4349
            sig_RD <= '1';
4350
         when s544 =>
4351
            sig_RWn <= '1';
4352
            sig_RD <= '1';
4353
            ld_o <= "11";
4354
            ld_sp_o <= '1';
4355
         when s545 =>
4356
            sig_RWn <= '1';
4357
            sig_RD <= '1';
4358
            adr_o <= X"FFFB";
4359
            ld_o <= "11";
4360
            ld_pc_o <= '1';
4361
         when s546 =>
4362
            sig_RWn <= '1';
4363
            sig_RD <= '1';
4364
            ld_o <= "11";
4365
            ld_pc_o <= '1';
4366
         when s547 =>
4367
            sig_RWn <= '1';
4368
            sig_RD <= '1';
4369
         when s549 =>
4370
            sig_RWn <= '1';
4371
            sig_RD <= '1';
4372
            if (rdy_i = '1') then
4373
               adr_o <= d_i & zw_w1 (7 downto 0);
4374
               ld_o <= "11";
4375
               ld_pc_o <= '1';
4376
               sig_SYNC <= '1';
4377
            end if;
4378
         when s550 =>
4379
            sig_RWn <= '1';
4380
            sig_RD <= '1';
4381
            ld_o <= "11";
4382
            ld_sp_o <= '1';
4383
         when s404 =>
4384
            sig_RWn <= '1';
4385
            sig_RD <= '1';
4386
            if (rdy_i = '1') then
4387
               ch_a_o <= q_a_i (6 downto 0) & '0';
4388
               ch_b_o <= X"00";
4389
               d_regs_in_o <= q_a_i (6 downto 0) & '0';
4390
               load_regs_o <= '1';
4391
               sig_SYNC <= '1';
4392
            end if;
4393
         when s556 =>
4394
            sig_RWn <= '1';
4395
            sig_RD <= '1';
4396
            if (rdy_i = '1') then
4397
               ch_a_o <= '0' & q_a_i (7 downto 1);
4398
               ch_b_o <= X"00";
4399
               d_regs_in_o <= '0' & q_a_i (7 downto 1);
4400
               load_regs_o <= '1';
4401
               sig_SYNC <= '1';
4402
            end if;
4403
         when s557 =>
4404
            sig_RWn <= '1';
4405
            sig_RD <= '1';
4406
            if (rdy_i = '1') then
4407
               ch_a_o <= q_a_i (6 downto 0) & reg_F(0);
4408
               ch_b_o <= X"00";
4409
               d_regs_in_o <= q_a_i (6 downto 0) & reg_F(0);
4410
               load_regs_o <= '1';
4411
               sig_SYNC <= '1';
4412
            end if;
4413
         when s579 =>
4414
            sig_RWn <= '1';
4415
            sig_RD <= '1';
4416
            if (rdy_i = '1') then
4417
               ch_a_o <= reg_F(0) & q_a_i (7 downto 1);
4418
               ch_b_o <= X"00";
4419
               d_regs_in_o <= reg_F(0) & q_a_i (7 downto 1);
4420
               load_regs_o <= '1';
4421
               sig_SYNC <= '1';
4422
            end if;
4423
         when s201 =>
4424
            sig_RWn <= '1';
4425
            sig_RD <= '1';
4426
            if (rdy_i = '1' and
4427
                (zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR
4428
                zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR
4429
                zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR
4430
                zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) then
4431
               ld_o <= "11";
4432
               ld_pc_o <= '1';
4433
            elsif ((rdy_i = '1' and
4434
                   (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
4435
                   zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
4436
                   zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
4437
                   zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
4438
                   zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
4439
               ld_o <= "11";
4440
               ld_pc_o <= '1';
4441
               d_regs_in_o <= d_i OR q_a_i;
4442
               load_regs_o <= '1';
4443
               ch_a_o <= d_i OR q_a_i;
4444
               ch_b_o <= X"00";
4445
               sig_SYNC <= '1';
4446
            elsif ((rdy_i = '1' and
4447
                   (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
4448
                   zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
4449
                   zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
4450
                   zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
4451
                   zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
4452
               ld_o <= "11";
4453
               ld_pc_o <= '1';
4454
               d_regs_in_o <= d_i XOR q_a_i;
4455
               load_regs_o <= '1';
4456
               ch_a_o <= d_i XOR q_a_i;
4457
               ch_b_o <= X"00";
4458
               sig_SYNC <= '1';
4459
            elsif ((rdy_i = '1' and
4460
                   (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
4461
                   zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
4462
                   zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
4463
                   zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
4464
                    zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
4465
               ld_o <= "11";
4466
               ld_pc_o <= '1';
4467
               d_regs_in_o <= d_i AND q_a_i;
4468
               load_regs_o <= '1';
4469
               ch_a_o <= d_i AND q_a_i;
4470
               ch_b_o <= X"00";
4471
               sig_SYNC <= '1';
4472
            elsif ((rdy_i = '1' and
4473
                   (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
4474
                   zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
4475
                   zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
4476
                   zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
4477
                   zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
4478
                    zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
4479
                    zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
4480
                    zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
4481
               ld_o <= "11";
4482
               ld_pc_o <= '1';
4483
               zw_ALU <= unsigned ('0' & d_regs_out_i) + unsigned ('0' & NOT (d_i)) + 1;
4484
               sig_SYNC <= '1';
4485
            elsif (rdy_i = '1' and
4486
                   (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
4487
                   zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) then
4488
               ld_o <= "11";
4489
               ld_pc_o <= '1';
4490
               d_regs_in_o <= d_i;
4491
               load_regs_o <= '1';
4492
               ch_a_o <= d_i;
4493
               ch_b_o <= X"00";
4494
               sig_SYNC <= '1';
4495
            elsif (rdy_i = '1' and
4496
                   (zw_REG_OP = X"B5" OR
4497
                   zw_REG_OP = X"B4" OR
4498
                   zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR
4499
                   zw_REG_OP = X"35" OR
4500
                   zw_REG_OP = X"D5")) then
4501
               ch_a_o <=  d_i;
4502
               ch_b_o <= q_x_i;
4503
            elsif (rdy_i = '1' and
4504
                   (zw_REG_OP = X"AD" OR
4505
                   zw_REG_OP = X"AE" OR
4506
                   zw_REG_OP = X"AC" OR
4507
                   zw_REG_OP = X"4D" OR
4508
                   zw_REG_OP = X"0D" OR
4509
                   zw_REG_OP = X"2D" OR
4510
                   zw_REG_OP = X"CD" OR
4511
                   zw_REG_OP = X"EC" OR
4512
                   zw_REG_OP = X"CC")) then
4513
               ld_o <= "11";
4514
               ld_pc_o <= '1';
4515
            elsif (rdy_i = '1' and
4516
                   (zw_REG_OP = X"BD" OR
4517
                   zw_REG_OP = X"BC" OR
4518
                   zw_REG_OP = X"5D" OR
4519
                   zw_REG_OP = X"1D" OR
4520
                   zw_REG_OP = X"3D" OR
4521
                   zw_REG_OP = X"DD")) then
4522
               ld_o <= "11";
4523
               ld_pc_o <= '1';
4524
               ch_a_o <= d_i;
4525
               ch_b_o <= q_x_i;
4526
            elsif (rdy_i = '1' and
4527
                   (zw_REG_OP = X"B9" OR
4528
                   zw_REG_OP = X"BE" OR
4529
                   zw_REG_OP = X"59" OR
4530
                   zw_REG_OP = X"19" OR
4531
                   zw_REG_OP = X"39" OR
4532
                   zw_REG_OP = X"D9")) then
4533
               ld_o <= "11";
4534
               ld_pc_o <= '1';
4535
               ch_a_o <= d_i;
4536
               ch_b_o <= q_y_i;
4537
            elsif (rdy_i = '1' and
4538
                   (zw_REG_OP = X"B1" OR
4539
                   zw_REG_OP = X"51" OR
4540
                   zw_REG_OP = X"11" OR
4541
                   zw_REG_OP = X"31" OR
4542
                   zw_REG_OP = X"D1")) then
4543
               ch_a_o <= d_i;
4544
               ch_b_o <= X"01";
4545
            elsif (rdy_i = '1' and
4546
                   (zw_REG_OP = X"A1" OR
4547
                   zw_REG_OP = X"41" OR
4548
                   zw_REG_OP = X"01" OR
4549
                   zw_REG_OP = X"21" OR
4550
                   zw_REG_OP = X"C1")) then
4551
               ch_a_o <=  d_i;
4552
               ch_b_o <= q_x_i;
4553
            elsif (rdy_i = '1' and
4554
                   zw_REG_OP = X"B6") then
4555
               ch_a_o <=  d_i;
4556
               ch_b_o <= q_y_i;
4557
            end if;
4558
         when s202 =>
4559
            sig_RWn <= '1';
4560
            sig_RD <= '1';
4561
            if (rdy_i = '1') then
4562
               ld_o <= "11";
4563
               ld_pc_o <= '1';
4564
            end if;
4565
         when s210 =>
4566
            sig_RWn <= '1';
4567
            sig_RD <= '1';
4568
            if (rdy_i = '1') then
4569
               ch_a_o <= d_i;
4570
               ch_b_o <= "0000000" & zw_b2(0);
4571
               ld_o <= "11";
4572
               ld_pc_o <= '1';
4573
            end if;
4574
         when s211 =>
4575
            sig_RWn <= '1';
4576
            sig_RD <= '1';
4577
            if (rdy_i = '1') then
4578
               ch_a_o <= d_i;
4579
               ch_b_o <= "0000000" & zw_b2(0);
4580
               ld_o <= "11";
4581
               ld_pc_o <= '1';
4582
            end if;
4583
         when s215 =>
4584
            sig_RWn <= '1';
4585
            sig_RD <= '1';
4586
            if (rdy_i = '1') then
4587
               ch_a_o <= d_i;
4588
               ch_b_o <= q_y_i;
4589
            end if;
4590
         when s217 =>
4591
            sig_RWn <= '1';
4592
            sig_RD <= '1';
4593
            if (rdy_i = '1') then
4594
               ld_o <= "11";
4595
               ld_pc_o <= '1';
4596
            end if;
4597
         when s218 =>
4598
            sig_RWn <= '1';
4599
            sig_RD <= '1';
4600
         when s222 =>
4601
            sig_RWn <= '1';
4602
            sig_RD <= '1';
4603
            if (rdy_i = '1') then
4604
               ch_a_o <=  zw_b1;
4605
               ch_b_o <= X"01";
4606
            end if;
4607
         when s223 =>
4608
            sig_RWn <= '1';
4609
            sig_RD <= '1';
4610
            if (rdy_i = '1') then
4611
               ch_a_o <= d_i;
4612
               ch_b_o <= "0000000" & zw_b2(0);
4613
               ld_o <= "11";
4614
               ld_pc_o <= '1';
4615
            end if;
4616
         when s224 =>
4617
            sig_RWn <= '1';
4618
            sig_RD <= '1';
4619
            if ((rdy_i = '1') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
4620
                zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
4621
                zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
4622
                zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
4623
               d_regs_in_o <= d_i OR q_a_i;
4624
               load_regs_o <= '1';
4625
               ch_a_o <= d_i OR q_a_i;
4626
               ch_b_o <= X"00";
4627
               sig_SYNC <= '1';
4628
            elsif ((rdy_i = '1') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
4629
                   zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
4630
                   zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
4631
                   zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
4632
               d_regs_in_o <= d_i XOR q_a_i;
4633
               load_regs_o <= '1';
4634
               ch_a_o <= d_i XOR q_a_i;
4635
               ch_b_o <= X"00";
4636
               sig_SYNC <= '1';
4637
            elsif ((rdy_i = '1') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
4638
                   zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
4639
                   zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
4640
                    zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
4641
               d_regs_in_o <= d_i AND q_a_i;
4642
               load_regs_o <= '1';
4643
               ch_a_o <= d_i AND q_a_i;
4644
               ch_b_o <= X"00";
4645
               sig_SYNC <= '1';
4646
            elsif ((rdy_i = '1') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
4647
                   zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
4648
                   zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
4649
                   zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
4650
                    zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
4651
                    zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
4652
                    zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
4653
               zw_ALU <= unsigned ('0' & d_regs_out_i) + unsigned ('0' & NOT (d_i)) + 1;
4654
               sig_SYNC <= '1';
4655
            elsif (rdy_i = '1') then
4656
               d_regs_in_o <= d_i;
4657
               load_regs_o <= '1';
4658
               ch_a_o <= d_i;
4659
               ch_b_o <= X"00";
4660
               sig_SYNC <= '1';
4661
            end if;
4662
         when s225 =>
4663
            sig_RWn <= '1';
4664
            sig_RD <= '1';
4665
            if ((rdy_i = '1' AND
4666
                zw_b2(0) = '0') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
4667
                zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
4668
                zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
4669
                zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
4670
               d_regs_in_o <= d_i OR q_a_i;
4671
               load_regs_o <= '1';
4672
               ch_a_o <= d_i OR q_a_i;
4673
               ch_b_o <= X"00";
4674
               sig_SYNC <= '1';
4675
            elsif ((rdy_i = '1' AND
4676
                   zw_b2(0) = '0') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
4677
                   zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
4678
                   zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
4679
                   zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
4680
               d_regs_in_o <= d_i XOR q_a_i;
4681
               load_regs_o <= '1';
4682
               ch_a_o <= d_i XOR q_a_i;
4683
               ch_b_o <= X"00";
4684
               sig_SYNC <= '1';
4685
            elsif ((rdy_i = '1' AND
4686
                   zw_b2(0) = '0') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
4687
                   zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
4688
                   zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
4689
                    zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
4690
               d_regs_in_o <= d_i AND q_a_i;
4691
               load_regs_o <= '1';
4692
               ch_a_o <= d_i AND q_a_i;
4693
               ch_b_o <= X"00";
4694
               sig_SYNC <= '1';
4695
            elsif ((rdy_i = '1' AND
4696
                   zw_b2(0) = '0') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
4697
                   zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
4698
                   zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
4699
                   zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
4700
                    zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
4701
                    zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
4702
                    zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
4703
               zw_ALU <= unsigned ('0' & d_regs_out_i) + unsigned ('0' & NOT (d_i)) + 1;
4704
               sig_SYNC <= '1';
4705
            elsif (rdy_i = '1' AND
4706
                   zw_b2(0) = '0') then
4707
               d_regs_in_o <= d_i;
4708
               load_regs_o <= '1';
4709
               ch_a_o <= d_i;
4710
               ch_b_o <= X"00";
4711
               sig_SYNC <= '1';
4712
            end if;
4713
         when s226 =>
4714
            sig_RWn <= '1';
4715
            sig_RD <= '1';
4716
            if (rdy_i = '1' and
4717
                (zw_REG_OP = X"C6" OR
4718
                zw_REG_OP = X"E6")) then
4719
               ld_o <= "11";
4720
               ld_pc_o <= '1';
4721
            elsif (rdy_i = '1' and
4722
                   (zw_REG_OP = X"D6" OR
4723
                   zw_REG_OP = X"F6")) then
4724
               ch_a_o <=  d_i;
4725
               ch_b_o <= q_x_i;
4726
            elsif (rdy_i = '1' and
4727
                   (zw_REG_OP = X"CE" OR
4728
                   zw_REG_OP = X"EE")) then
4729
               ld_o <= "11";
4730
               ld_pc_o <= '1';
4731
            elsif (rdy_i = '1' and
4732
                   (zw_REG_OP = X"DE" OR
4733
                   zw_REG_OP = X"FE")) then
4734
               ld_o <= "11";
4735
               ld_pc_o <= '1';
4736
               ch_a_o <= d_i;
4737
               ch_b_o <= q_x_i;
4738
            end if;
4739
         when s243 =>
4740
            sig_RWn <= '1';
4741
            sig_RD <= '1';
4742
            if (rdy_i = '1') then
4743
               ld_o <= "11";
4744
               ld_pc_o <= '1';
4745
            end if;
4746
         when s244 =>
4747
            sig_RWn <= '1';
4748
            sig_RD <= '1';
4749
            if (rdy_i = '1') then
4750
               ch_a_o <= d_i;
4751
               ch_b_o <= "0000000" & zw_b2(0);
4752
               ld_o <= "11";
4753
               ld_pc_o <= '1';
4754
            end if;
4755
         when s247 =>
4756
            sig_RWn <= '1';
4757
            sig_RD <= '1';
4758
            if (rdy_i = '1') then
4759
               ld_o <= "11";
4760
               ld_pc_o <= '1';
4761
            end if;
4762
         when s344 =>
4763
            sig_RWn <= '1';
4764
            sig_RD <= '1';
4765
         when s343 =>
4766
            sig_RWn <= '1';
4767
            sig_RD <= '1';
4768
            if (rdy_i = '1') then
4769
               ch_a_o <= d_i;
4770
               ch_b_o <= zw_b4;
4771
            end if;
4772
         when s250 =>
4773
            sig_RWn <= '1';
4774
            sig_RD <= '1';
4775
            if (rdy_i = '1') then
4776
               sig_RWn <= '0';
4777
               sig_RD <= '0';
4778
               sig_WR <= '1';
4779
               sig_D_OUT <= zw_b1;
4780
            end if;
4781
         when s251 =>
4782
            sig_RWn <= '1';
4783
            sig_RD <= '1';
4784
            ch_a_o <= zw_b1;
4785
            ch_b_o <= X"00";
4786
            sig_SYNC <= '1';
4787
         when s351 =>
4788
            sig_RWn <= '1';
4789
            sig_RD <= '1';
4790
            if (rdy_i = '1' and
4791
                zw_REG_OP = X"24") then
4792
               ld_o <= "11";
4793
               ld_pc_o <= '1';
4794
            elsif (rdy_i = '1' and
4795
                   zw_REG_OP = X"2C") then
4796
               ld_o <= "11";
4797
               ld_pc_o <= '1';
4798
            end if;
4799
         when s361 =>
4800
            sig_RWn <= '1';
4801
            sig_RD <= '1';
4802
            if (rdy_i = '1') then
4803
               ch_a_o <= q_a_i AND d_i;
4804
               ch_b_o <= X"00";
4805
               sig_SYNC <= '1';
4806
            end if;
4807
         when s360 =>
4808
            sig_RWn <= '1';
4809
            sig_RD <= '1';
4810
            if (rdy_i = '1') then
4811
               ld_o <= "11";
4812
               ld_pc_o <= '1';
4813
            end if;
4814
         when s403 =>
4815
            sig_RWn <= '1';
4816
            sig_RD <= '1';
4817
            if (rdy_i = '1' and
4818
                (zw_REG_OP = X"1E" or
4819
                zw_REG_OP = X"7E" or
4820
                zw_REG_OP = X"3E" or
4821
                zw_REG_OP = X"5E")) then
4822
               ld_o <= "11";
4823
               ld_pc_o <= '1';
4824
               ch_a_o <= d_i;
4825
               ch_b_o <= q_x_i;
4826
            elsif (rdy_i = '1' and
4827
                   (zw_REG_OP = X"06" or
4828
                   zw_REG_OP = X"66" or
4829
                   zw_REG_OP = X"26" or
4830
                   zw_REG_OP = X"46")) then
4831
               ld_o <= "11";
4832
               ld_pc_o <= '1';
4833
            elsif (rdy_i = '1' and
4834
                   (zw_REG_OP = X"16" or
4835
                   zw_REG_OP = X"76" or
4836
                   zw_REG_OP = X"36" or
4837
                   zw_REG_OP = X"56")) then
4838
               ch_a_o <=  d_i;
4839
               ch_b_o <= q_x_i;
4840
            elsif (rdy_i = '1' and
4841
                   (zw_REG_OP = X"0E" or
4842
                   zw_REG_OP = X"6E" or
4843
                   zw_REG_OP = X"2E" or
4844
                   zw_REG_OP = X"4E")) then
4845
               ld_o <= "11";
4846
               ld_pc_o <= '1';
4847
            end if;
4848
         when s406 =>
4849
            sig_RWn <= '1';
4850
            sig_RD <= '1';
4851
            if (rdy_i = '1') then
4852
               ld_o <= "11";
4853
               ld_pc_o <= '1';
4854
            end if;
4855
         when s407 =>
4856
            sig_RWn <= '1';
4857
            sig_RD <= '1';
4858
            if (rdy_i = '1') then
4859
               ch_a_o <= d_i;
4860
               ch_b_o <= "0000000" & zw_b2(0);
4861
               ld_o <= "11";
4862
               ld_pc_o <= '1';
4863
            end if;
4864
         when s409 =>
4865
            sig_RWn <= '1';
4866
            sig_RD <= '1';
4867
            if (rdy_i = '1') then
4868
               ld_o <= "11";
4869
               ld_pc_o <= '1';
4870
            end if;
4871
         when s412 =>
4872
            sig_RWn <= '1';
4873
            sig_RD <= '1';
4874
         when s413 =>
4875
            sig_RWn <= '1';
4876
            sig_RD <= '1';
4877
         when s416 =>
4878
            sig_RWn <= '1';
4879
            sig_RD <= '1';
4880
            if (rdy_i = '1' and
4881
                (zw_REG_OP = X"06" or
4882
                zw_REG_OP = X"16" or
4883
                zw_REG_OP = X"0E" or
4884
                zw_REG_OP = X"1E")) then
4885
               sig_D_OUT <= d_i(6 downto 0) & '0';
4886
               sig_RWn <= '0';
4887
               sig_RD <= '0';
4888
               sig_WR <= '1';
4889
            elsif (rdy_i = '1' and
4890
                   (zw_REG_OP = X"46" or
4891
                   zw_REG_OP = X"56" or
4892
                   zw_REG_OP = X"4E" or
4893
                   zw_REG_OP = X"5E")) then
4894
               sig_D_OUT <= '0' & d_i(7 downto 1);
4895
               sig_RWn <= '0';
4896
               sig_RD <= '0';
4897
               sig_WR <= '1';
4898
            elsif (rdy_i = '1' and
4899
                   (zw_REG_OP = X"26" or
4900
                   zw_REG_OP = X"36" or
4901
                   zw_REG_OP = X"2E" or
4902
                   zw_REG_OP = X"3E")) then
4903
               sig_D_OUT <= d_i(6 downto 0) & reg_F(0);
4904
               sig_RWn <= '0';
4905
               sig_RD <= '0';
4906
               sig_WR <= '1';
4907
            elsif (rdy_i = '1' and
4908
                   (zw_REG_OP = X"66" or
4909
                   zw_REG_OP = X"76" or
4910
                   zw_REG_OP = X"6E" or
4911
                   zw_REG_OP = X"7E")) then
4912
               sig_D_OUT <= reg_F(0) & d_i(7 downto 1);
4913
               sig_RWn <= '0';
4914
               sig_RD <= '0';
4915
               sig_WR <= '1';
4916
            end if;
4917
         when s418 =>
4918
            sig_RWn <= '1';
4919
            sig_RD <= '1';
4920
            ch_a_o <= zw_b1;
4921
            ch_b_o <= X"00";
4922
            sig_SYNC <= '1';
4923
         when s510 =>
4924
            sig_RWn <= '1';
4925
            sig_RD <= '1';
4926
            if (rdy_i = '1' and
4927
                zw_REG_OP = X"65") then
4928
               ld_o <= "11";
4929
               ld_pc_o <= '1';
4930
            elsif (rdy_i = '1' and
4931
                   zw_REG_OP = X"69" and
4932
                   reg_F(3) = '0') then
4933
               ld_o <= "11";
4934
               ld_pc_o <= '1';
4935
               d_regs_in_o <= zw_ALU(7 downto 0);
4936
               load_regs_o <= '1';
4937
               zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0);
4938
               sig_SYNC <= '1';
4939
            elsif (rdy_i = '1' and
4940
                   zw_REG_OP = X"75") then
4941
               ch_a_o <=  d_i;
4942
               ch_b_o <= q_x_i;
4943
            elsif (rdy_i = '1' and
4944
                   zw_REG_OP = X"6D") then
4945
               ld_o <= "11";
4946
               ld_pc_o <= '1';
4947
            elsif (rdy_i = '1' and
4948
                   zw_REG_OP = X"7D") then
4949
               ld_o <= "11";
4950
               ld_pc_o <= '1';
4951
               ch_a_o <= d_i;
4952
               ch_b_o <= q_x_i;
4953
            elsif (rdy_i = '1' and
4954
                   zw_REG_OP = X"79") then
4955
               ld_o <= "11";
4956
               ld_pc_o <= '1';
4957
               ch_a_o <= d_i;
4958
               ch_b_o <= q_y_i;
4959
            elsif (rdy_i = '1' and
4960
                   zw_REG_OP = X"71") then
4961
               ch_a_o <= d_i;
4962
               ch_b_o <= X"01";
4963
            elsif (rdy_i = '1' and
4964
                   zw_REG_OP = X"61") then
4965
               ch_a_o <=  d_i;
4966
               ch_b_o <= q_x_i;
4967
            elsif (rdy_i = '1' and
4968
                   zw_REG_OP = X"69" and
4969
                   reg_F(3) = '1') then
4970
               ld_o <= "11";
4971
               ld_pc_o <= '1';
4972
               d_regs_in_o <= zw_ALU(7 downto 0);
4973
               load_regs_o <= '1';
4974
               zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + unsigned (zw_ALU6(7 downto 5));
4975
               zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(7 downto 5));
4976
 
4977
               zw_ALU6(7 downto 5) <=  (zw_ALU2(4) OR zw_ALU4(4)) & (zw_ALU2(4) OR zw_ALU4(4)) & '0';
4978
               zw_ALU5(7 downto 5) <=  (zw_ALU1(4) OR zw_ALU3(4)) & (zw_ALU1(4) OR zw_ALU3(4)) & '0';
4979
 
4980
               zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6;
4981
               zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned
4982
               ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4));
4983
 
4984
               zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6;
4985
               zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned
4986
               ('0' & d_i(3 downto 0)) + reg_F(0);
4987
               sig_SYNC <= '1';
4988
            end if;
4989
         when s553 =>
4990
            sig_RWn <= '1';
4991
            sig_RD <= '1';
4992
            if (rdy_i = '1') then
4993
               ld_o <= "11";
4994
               ld_pc_o <= '1';
4995
            end if;
4996
         when s555 =>
4997
            sig_RWn <= '1';
4998
            sig_RD <= '1';
4999
            if (rdy_i = '1') then
5000
               ch_a_o <= d_i;
5001
               ch_b_o <= X"01";
5002
               ld_o <= "11";
5003
               ld_pc_o <= '1';
5004
            end if;
5005
         when s558 =>
5006
            sig_RWn <= '1';
5007
            sig_RD <= '1';
5008
            if (rdy_i = '1') then
5009
               ch_a_o <= d_i;
5010
               ch_b_o <= q_y_i;
5011
            end if;
5012
         when s560 =>
5013
            sig_RWn <= '1';
5014
            sig_RD <= '1';
5015
            if (rdy_i = '1') then
5016
               ld_o <= "11";
5017
               ld_pc_o <= '1';
5018
            end if;
5019
         when s561 =>
5020
            sig_RWn <= '1';
5021
            sig_RD <= '1';
5022
         when s563 =>
5023
            sig_RWn <= '1';
5024
            sig_RD <= '1';
5025
            if (rdy_i = '1') then
5026
               ch_a_o <=  zw_b1;
5027
               ch_b_o <= X"01";
5028
            end if;
5029
         when s564 =>
5030
            sig_RWn <= '1';
5031
            sig_RD <= '1';
5032
            if (rdy_i = '1' AND
5033
                zw_b2(0) = '0' and
5034
                reg_F(3) = '0') then
5035
               d_regs_in_o <= zw_ALU(7 downto 0);
5036
               load_regs_o <= '1';
5037
               zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0);
5038
               sig_SYNC <= '1';
5039
            elsif (rdy_i = '1' AND
5040
                   zw_b2(0) = '0' and
5041
                   reg_F(3) = '1') then
5042
               d_regs_in_o <= zw_ALU(7 downto 0);
5043
               load_regs_o <= '1';
5044
               zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + unsigned (zw_ALU6(7 downto 5));
5045
               zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(7 downto 5));
5046
 
5047
               zw_ALU6(7 downto 5) <=  (zw_ALU2(4) OR zw_ALU4(4)) & (zw_ALU2(4) OR zw_ALU4(4)) & '0';
5048
               zw_ALU5(7 downto 5) <=  (zw_ALU1(4) OR zw_ALU3(4)) & (zw_ALU1(4) OR zw_ALU3(4)) & '0';
5049
 
5050
               zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6;
5051
               zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned
5052
               ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4));
5053
 
5054
               zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6;
5055
               zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned
5056
               ('0' & d_i(3 downto 0)) + reg_F(0);
5057
               sig_SYNC <= '1';
5058
            end if;
5059
         when s565 =>
5060
            sig_RWn <= '1';
5061
            sig_RD <= '1';
5062
            if (rdy_i = '1' and
5063
                reg_F(3) = '0') then
5064
               d_regs_in_o <= zw_ALU(7 downto 0);
5065
               load_regs_o <= '1';
5066
               zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0);
5067
               sig_SYNC <= '1';
5068
            elsif (rdy_i = '1' and
5069
                   reg_F(3) = '1') then
5070
               d_regs_in_o <= zw_ALU(7 downto 0);
5071
               load_regs_o <= '1';
5072
               zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + unsigned (zw_ALU6(7 downto 5));
5073
               zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(7 downto 5));
5074
 
5075
               zw_ALU6(7 downto 5) <=  (zw_ALU2(4) OR zw_ALU4(4)) & (zw_ALU2(4) OR zw_ALU4(4)) & '0';
5076
               zw_ALU5(7 downto 5) <=  (zw_ALU1(4) OR zw_ALU3(4)) & (zw_ALU1(4) OR zw_ALU3(4)) & '0';
5077
 
5078
               zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6;
5079
               zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned
5080
               ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4));
5081
 
5082
               zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6;
5083
               zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned
5084
               ('0' & d_i(3 downto 0)) + reg_F(0);
5085
               sig_SYNC <= '1';
5086
            end if;
5087
         when s566 =>
5088
            sig_RWn <= '1';
5089
            sig_RD <= '1';
5090
            if (rdy_i = '1') then
5091
               ch_a_o <= d_i;
5092
               ch_b_o <= X"01";
5093
               ld_o <= "11";
5094
               ld_pc_o <= '1';
5095
            end if;
5096
         when s266 =>
5097
            sig_RWn <= '1';
5098
            sig_RD <= '1';
5099
            if (rdy_i = '1' and (
5100
                (reg_F(0) = '1' and zw_REG_OP = X"90") or
5101
                (reg_F(0) = '0' and zw_REG_OP = X"B0") or
5102
                (reg_F(1) = '0' and zw_REG_OP = X"F0") or
5103
                (reg_F(7) = '0' and zw_REG_OP = X"30") or
5104
                (reg_F(1) = '1' and zw_REG_OP = X"D0") or
5105
                (reg_F(7) = '1' and zw_REG_OP = X"10") or
5106
                (reg_F(6) = '1' and zw_REG_OP = X"50") or
5107
                (reg_F(6) = '0' and zw_REG_OP = X"70"))) then
5108
               ld_o <= "11";
5109
               ld_pc_o <= '1';
5110
               sig_SYNC <= '1';
5111
            elsif (rdy_i = '1') then
5112
               ld_o <= "11";
5113
               ld_pc_o <= '1';
5114
            end if;
5115
         when s301 =>
5116
            sig_RWn <= '1';
5117
            sig_RD <= '1';
5118
            if (rdy_i = '1' and
5119
                zw_b3 = adr_nxt_pc_i (15 downto 8)) then
5120
               offset_o <= (zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) &
5121
               zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(6 downto 0));
5122
               ld_o <= "11";
5123
               ld_pc_o <= '1';
5124
               sig_SYNC <= '1';
5125
            elsif (rdy_i = '1') then
5126
               offset_o <= (zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) &
5127
               zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(6 downto 0));
5128
               ld_o <= "11";
5129
               ld_pc_o <= '1';
5130
            end if;
5131
         when s302 =>
5132
            sig_RWn <= '1';
5133
            sig_RD <= '1';
5134
            if (rdy_i = '1') then
5135
               sig_SYNC <= '1';
5136
            end if;
5137
         when RES =>
5138
            sig_RWn <= '1';
5139
            sig_RD <= '1';
5140
            ld_o <= "11";
5141
            ld_pc_o <= '1';
5142
            ld_sp_o <= '1';
5143
            sig_RWn <= '1';
5144
            sig_RD <= '1';
5145
         when s511 =>
5146
            sig_RWn <= '1';
5147
            sig_RD <= '1';
5148
            if (rdy_i = '1' and
5149
                zw_REG_OP = X"E5") then
5150
               ld_o <= "11";
5151
               ld_pc_o <= '1';
5152
            elsif (rdy_i = '1' and
5153
                   zw_REG_OP = X"E9" and
5154
                   reg_F(3) = '0') then
5155
               ld_o <= "11";
5156
               ld_pc_o <= '1';
5157
               d_regs_in_o <= zw_ALU(7 downto 0);
5158
               load_regs_o <= '1';
5159
               zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0);
5160
               sig_SYNC <= '1';
5161
            elsif (rdy_i = '1' and
5162
                   zw_REG_OP = X"F5") then
5163
               ch_a_o <=  d_i;
5164
               ch_b_o <= q_x_i;
5165
            elsif (rdy_i = '1' and
5166
                   zw_REG_OP = X"ED") then
5167
               ld_o <= "11";
5168
               ld_pc_o <= '1';
5169
            elsif (rdy_i = '1' and
5170
                   zw_REG_OP = X"FD") then
5171
               ld_o <= "11";
5172
               ld_pc_o <= '1';
5173
               ch_a_o <= d_i;
5174
               ch_b_o <= q_x_i;
5175
            elsif (rdy_i = '1' and
5176
                   zw_REG_OP = X"F9") then
5177
               ld_o <= "11";
5178
               ld_pc_o <= '1';
5179
               ch_a_o <= d_i;
5180
               ch_b_o <= q_y_i;
5181
            elsif (rdy_i = '1' and
5182
                   zw_REG_OP = X"F1") then
5183
               ch_a_o <= d_i;
5184
               ch_b_o <= X"01";
5185
            elsif (rdy_i = '1' and
5186
                   zw_REG_OP = X"E1") then
5187
               ch_a_o <=  d_i;
5188
               ch_b_o <= q_x_i;
5189
            elsif (rdy_i = '1' and
5190
                   zw_REG_OP = X"E9" and
5191
                   reg_F(3) = '1') then
5192
               ld_o <= "11";
5193
               ld_pc_o <= '1';
5194
               d_regs_in_o <= zw_ALU(7 downto 0);
5195
               load_regs_o <= '1';
5196
               zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) +
5197
               unsigned ((zw_ALU6(8 downto 5)));
5198
               zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) +
5199
               unsigned ((zw_ALU5(8 downto 5)));
5200
 
5201
               zw_ALU6(8 downto 5) <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' &
5202
               (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0';
5203
               zw_ALU5(8 downto 5) <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' &
5204
               (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ;
5205
 
5206
               zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6;
5207
               zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned
5208
               ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4);
5209
 
5210
               zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6;
5211
               zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned
5212
               ('0' & NOT (d_i(3 downto 0))) + reg_F(0);
5213
               sig_SYNC <= '1';
5214
            end if;
5215
         when s559 =>
5216
            sig_RWn <= '1';
5217
            sig_RD <= '1';
5218
            if (rdy_i = '1') then
5219
               ld_o <= "11";
5220
               ld_pc_o <= '1';
5221
            end if;
5222
         when s562 =>
5223
            sig_RWn <= '1';
5224
            sig_RD <= '1';
5225
            if (rdy_i = '1') then
5226
               ch_a_o <= d_i;
5227
               ch_b_o <= X"01";
5228
               ld_o <= "11";
5229
               ld_pc_o <= '1';
5230
            end if;
5231
         when s567 =>
5232
            sig_RWn <= '1';
5233
            sig_RD <= '1';
5234
            if (rdy_i = '1') then
5235
               ch_a_o <= d_i;
5236
               ch_b_o <= X"01";
5237
               ld_o <= "11";
5238
               ld_pc_o <= '1';
5239
            end if;
5240
         when s568 =>
5241
            sig_RWn <= '1';
5242
            sig_RD <= '1';
5243
            if (rdy_i = '1') then
5244
               ch_a_o <= d_i;
5245
               ch_b_o <= q_y_i;
5246
            end if;
5247
         when s569 =>
5248
            sig_RWn <= '1';
5249
            sig_RD <= '1';
5250
            if (rdy_i = '1') then
5251
               ld_o <= "11";
5252
               ld_pc_o <= '1';
5253
            end if;
5254
         when s570 =>
5255
            sig_RWn <= '1';
5256
            sig_RD <= '1';
5257
         when s571 =>
5258
            sig_RWn <= '1';
5259
            sig_RD <= '1';
5260
            if (rdy_i = '1') then
5261
               ch_a_o <= d_i;
5262
               ch_b_o <= X"01";
5263
               ld_o <= "11";
5264
               ld_pc_o <= '1';
5265
            end if;
5266
         when s572 =>
5267
            sig_RWn <= '1';
5268
            sig_RD <= '1';
5269
            if (rdy_i = '1') then
5270
               ch_a_o <=  zw_b1;
5271
               ch_b_o <= X"01";
5272
            end if;
5273
         when s573 =>
5274
            sig_RWn <= '1';
5275
            sig_RD <= '1';
5276
            if (rdy_i = '1' AND
5277
                zw_b2(0) = '0' and
5278
                reg_F(3) = '0') then
5279
               d_regs_in_o <= zw_ALU(7 downto 0);
5280
               load_regs_o <= '1';
5281
               zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0);
5282
               sig_SYNC <= '1';
5283
            elsif (rdy_i = '1' AND
5284
                   zw_b2(0) = '0' and
5285
                   reg_F(3) = '1') then
5286
               d_regs_in_o <= zw_ALU(7 downto 0);
5287
               load_regs_o <= '1';
5288
               zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) +
5289
               unsigned ((zw_ALU6(8 downto 5)));
5290
               zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) +
5291
               unsigned ((zw_ALU5(8 downto 5)));
5292
 
5293
               zw_ALU6(8 downto 5) <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' &
5294
               (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0';
5295
               zw_ALU5(8 downto 5) <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' &
5296
               (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ;
5297
 
5298
               zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6;
5299
               zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned
5300
               ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4);
5301
 
5302
               zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6;
5303
               zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned
5304
               ('0' & NOT (d_i(3 downto 0))) + reg_F(0);
5305
               sig_SYNC <= '1';
5306
            end if;
5307
         when s574 =>
5308
            sig_RWn <= '1';
5309
            sig_RD <= '1';
5310
            if (rdy_i = '1' and
5311
                reg_F(3) = '0') then
5312
               d_regs_in_o <= zw_ALU(7 downto 0);
5313
               load_regs_o <= '1';
5314
               zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0);
5315
               sig_SYNC <= '1';
5316
            elsif (rdy_i = '1' and
5317
                   reg_F(3) = '1') then
5318
               d_regs_in_o <= zw_ALU(7 downto 0);
5319
               load_regs_o <= '1';
5320
               zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) +
5321
               unsigned ((zw_ALU6(8 downto 5)));
5322
               zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) +
5323
               unsigned ((zw_ALU5(8 downto 5)));
5324
 
5325
               zw_ALU6(8 downto 5) <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' &
5326
               (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0';
5327
               zw_ALU5(8 downto 5) <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' &
5328
               (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ;
5329
 
5330
               zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6;
5331
               zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned
5332
               ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4);
5333
 
5334
               zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6;
5335
               zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned
5336
               ('0' & NOT (d_i(3 downto 0))) + reg_F(0);
5337
               sig_SYNC <= '1';
5338
            end if;
5339
         when s548 =>
5340
            sig_RWn <= '1';
5341
            sig_RD <= '1';
5342
            if (rdy_i = '1') then
5343
               ld_o <= "11";
5344
               ld_sp_o <= '1';
5345
               ld_pc_o <= '1';
5346
            end if;
5347
         when s551 =>
5348
            sig_RWn <= '1';
5349
            sig_RD <= '1';
5350
            ld_o <= "11";
5351
            ld_sp_o <= '1';
5352
            sig_RWn <= '0';
5353
            sig_RD <= '0';
5354
            sig_WR <= '1';
5355
            sig_D_OUT <= adr_pc_i (15 downto 8);
5356
         when s552 =>
5357
            sig_RWn <= '1';
5358
            sig_RD <= '1';
5359
            ld_o <= "11";
5360
            ld_sp_o <= '1';
5361
            sig_RWn <= '0';
5362
            sig_RD <= '0';
5363
            sig_WR <= '1';
5364
            sig_D_OUT <= adr_pc_i (7 downto 0);
5365
         when s575 =>
5366
            sig_RWn <= '1';
5367
            sig_RD <= '1';
5368
         when s576 =>
5369
            sig_RWn <= '1';
5370
            sig_RD <= '1';
5371
            sig_RWn <= '0';
5372
            sig_RD <= '0';
5373
            sig_WR <= '1';
5374
            sig_D_OUT <= reg_F;
5375
         when s577 =>
5376
            sig_RWn <= '1';
5377
            sig_RD <= '1';
5378
            if (rdy_i = '1') then
5379
               sig_SYNC <= '1';
5380
            end if;
5381
         when s532 =>
5382
            sig_RWn <= '1';
5383
            sig_RD <= '1';
5384
            if (rdy_i = '1') then
5385
               ld_o <= "11";
5386
               ld_sp_o <= '1';
5387
               ld_pc_o <= '1';
5388
            end if;
5389
         when s533 =>
5390
            sig_RWn <= '1';
5391
            sig_RD <= '1';
5392
            ld_o <= "11";
5393
            ld_sp_o <= '1';
5394
            sig_RWn <= '0';
5395
            sig_RD <= '0';
5396
            sig_WR <= '1';
5397
            sig_D_OUT <= adr_pc_i (15 downto 8);
5398
         when s534 =>
5399
            sig_RWn <= '1';
5400
            sig_RD <= '1';
5401
            ld_o <= "11";
5402
            ld_sp_o <= '1';
5403
            sig_RWn <= '0';
5404
            sig_RD <= '0';
5405
            sig_WR <= '1';
5406
            sig_D_OUT <= adr_pc_i (7 downto 0);
5407
         when s535 =>
5408
            sig_RWn <= '1';
5409
            sig_RD <= '1';
5410
         when s536 =>
5411
            sig_RWn <= '1';
5412
            sig_RD <= '1';
5413
            sig_RWn <= '0';
5414
            sig_RD <= '0';
5415
            sig_WR <= '1';
5416
            sig_D_OUT <= reg_F;
5417
         when s537 =>
5418
            sig_RWn <= '1';
5419
            sig_RD <= '1';
5420
            if (rdy_i = '1') then
5421
               sig_SYNC <= '1';
5422
            end if;
5423
         when others =>
5424
            null;
5425
      end case;
5426
   end process output_proc;
5427
 
5428
   -- Concurrent Statements
5429
   -- Clocked output assignments
5430
   d_o <= d_o_cld;
5431
   rd_o <= rd_o_cld;
5432
   sync_o <= sync_o_cld;
5433
   wr_n_o <= wr_n_o_cld;
5434
   wr_o <= wr_o_cld;
5435
   sel_alu_as_o_i <= sel_alu_as_o_i_cld;
5436
   sel_alu_out_o_i <= sel_alu_out_o_i_cld;
5437
   sel_pc_as_o_i <= sel_pc_as_o_i_cld;
5438
   sel_pc_in_o_i <= sel_pc_in_o_i_cld;
5439
   sel_pc_val_o_i <= sel_pc_val_o_i_cld;
5440
   sel_rb_in_o_i <= sel_rb_in_o_i_cld;
5441
   sel_rb_out_o_i <= sel_rb_out_o_i_cld;
5442
   sel_reg_o_i <= sel_reg_o_i_cld;
5443
   sel_sp_as_o_i <= sel_sp_as_o_i_cld;
5444
   sel_sp_in_o_i <= sel_sp_in_o_i_cld;
5445
   sel_sp_val_o_i <= sel_sp_val_o_i_cld;
5446
end fsm;

powered by: WebSVN 2.1.0

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