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

Subversion Repositories cpu65c02_true_cycle

[/] [cpu65c02_true_cycle/] [trunk/] [released/] [rtl/] [v1_53/] [vhdl/] [fsm_execution_unit.vhd] - Blame information for rev 24

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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