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

Subversion Repositories cpu6502_true_cycle

[/] [cpu6502_true_cycle/] [trunk/] [rtl/] [vhdl/] [fsm_execution_unit.vhd] - Blame information for rev 26

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 26 fpga_is_fu
-- VHDL Entity r6502_tc.fsm_execution_unit.symbol
2 24 fpga_is_fu
--
3
-- Created:
4 26 fpga_is_fu
--          by - eda.UNKNOWN (ENTW-7HPZ200)
5
--          at - 11:35:43 11.09.2018
6 24 fpga_is_fu
--
7 26 fpga_is_fu
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
8 24 fpga_is_fu
--
9
LIBRARY ieee;
10
USE ieee.std_logic_1164.all;
11
USE ieee.std_logic_arith.all;
12
 
13 26 fpga_is_fu
entity fsm_execution_unit is
14
   port(
15
      adr_nxt_pc_i    : in     std_logic_vector (15 downto 0);
16
      adr_pc_i        : in     std_logic_vector (15 downto 0);
17
      adr_sp_i        : in     std_logic_vector (15 downto 0);
18
      clk_clk_i       : in     std_logic;
19
      d_alu_i         : in     std_logic_vector ( 7 downto 0 );
20
      d_i             : in     std_logic_vector ( 7 downto 0 );
21
      d_regs_out_i    : in     std_logic_vector ( 7 downto 0 );
22
      irq_n_i         : in     std_logic;
23
      nmi_i           : in     std_logic;
24
      q_a_i           : in     std_logic_vector ( 7 downto 0 );
25
      q_x_i           : in     std_logic_vector ( 7 downto 0 );
26
      q_y_i           : in     std_logic_vector ( 7 downto 0 );
27
      rdy_i           : in     std_logic;
28
      reg_0flag_i     : in     std_logic;
29
      reg_1flag_i     : in     std_logic;
30
      reg_7flag_i     : in     std_logic;
31
      rst_rst_n_i     : in     std_logic;
32
      so_n_i          : in     std_logic;
33
      a_o             : out    std_logic_vector (15 downto 0);
34
      adr_o           : out    std_logic_vector (15 downto 0);
35
      ch_a_o          : out    std_logic_vector ( 7 downto 0 );
36
      ch_b_o          : out    std_logic_vector ( 7 downto 0 );
37
      d_o             : out    std_logic_vector ( 7 downto 0 );
38
      d_regs_in_o     : out    std_logic_vector ( 7 downto 0 );
39
      int_fetch_o     : out    std_logic;
40
      int_reg_2flag_o : out    std_logic;
41
      ld_o            : out    std_logic_vector ( 1 downto 0 );
42
      ld_pc_o         : out    std_logic;
43
      ld_sp_o         : out    std_logic;
44
      load_regs_o     : out    std_logic;
45
      offset_o        : out    std_logic_vector ( 15 downto 0 );
46
      rd_o            : out    std_logic;
47
      rst_nmi_o       : out    std_logic;
48
      sel_pc_in_o     : out    std_logic;
49
      sel_pc_val_o    : out    std_logic_vector ( 1 downto 0 );
50
      sel_rb_in_o     : out    std_logic_vector ( 1 downto 0 );
51
      sel_rb_out_o    : out    std_logic_vector ( 1 downto 0 );
52
      sel_reg_o       : out    std_logic_vector ( 1 downto 0 );
53
      sel_sp_as_o     : out    std_logic;
54
      sel_sp_in_o     : out    std_logic;
55
      sync_o          : out    std_logic;
56
      wr_n_o          : out    std_logic;
57
      wr_o            : out    std_logic
58 24 fpga_is_fu
   );
59
 
60
-- Declarations
61
 
62 26 fpga_is_fu
end fsm_execution_unit ;
63 24 fpga_is_fu
 
64 26 fpga_is_fu
-- (C) 2008 - 2018 Jens Gutschmidt
65
-- (email: opencores@vivare-services.com)
66
-- 
67
-- Versions:
68
-- Revision 1.11  2018/09/11 11:50:00  jens
69
-- - RESET generates SYNC now, 1 dead cycle delayed
70
-- - ADC / SBC flags and A like R6502 now
71
-- - Bug Fix ADC and SBC in decimal mode (all op codes -
72
--   "Overflow" flag was computed wrong)
73
-- - Interrupt priority order is now: BRK - NMI - IRQ
74
-- - Performance improvements on-going (Mealy -> Moore)
75
-- - Bug Fixes All Branch Instructions 
76
--   (BCC, BCS, BEQ, BNE, BPL, BMI, BVC, BVS)
77
--   3 cycles now if branch forward occur and the branch
78
--   instruction lies on a xxFEh location.
79
-- - Bug Fix Hardware Interrupts NMI & IRQ - "SYNC" now
80
-- 
81
-- Revision 1.11  BETA 2013/07/24 15:46:00  jens
82
-- - Changing the title block and internal revision history
83
-- - Bug Fix ADC and SBC (all op codes - "Overflow" flag was computed wrong)
84
-- 
85
-- Revision 1.10  2010/02/08 17:34:20  eda
86
-- BUGFIX for IRQn, NMIn and RTI
87
-- After detection of NMI or IRQ the address of the next instruction stacked wrong.
88
-- NMI now overwrites the vector address of IRQ if NMI asserted after IRQ and the
89
-- vector address is not loaded yet.
90
-- 
91
-- Revision 1.9  2010/02/08 17:32:19  eda
92
-- BUGFIX for IRQn, NMIn and RTI
93
-- After detection of NMI or IRQ the address of the next instruction stacked wrong.
94
-- NMI now overwrites the vector address of IRQ if NMI asserted after IRQ and the
95
-- vector address is not loaded yet.
96
-- 
97
-- Revision 1.8  2009/01/04 20:23:42  eda
98
-- *** EMERGENCY BUGFIX ***
99
-- - Signal rd_o was corrupted in last version. wr_o and wr_n are not effected.
100
-- - OP JMP (indirect) produced a 65C02 like jump. On 6502 a special case exist
101
--  when the (indirect) address cross the page boundary (e.g. JMP (02FF) reads from
102
--  $02FF and $0200, instead of $02FF and $0300)
103
-- 
104
-- Revision 1.7  2009/01/04 16:54:59  eda
105
-- - Removed unused bits in ALU (zw_ALUx)
106
-- 
107
-- Revision 1.6  2009/01/04 10:27:49  eda
108
-- Changes for cosmetic issues only
109
-- 
110
-- Revision 1.5  2009/01/04 10:25:04  eda
111
-- Changes for cosmetic issues only
112
-- 
113
-- Revision 1.4  2009/01/03 16:53:01  eda
114
-- - Unused nets and blocks deleted
115
-- - Re-arragend symbols in block FSM_Execution_Unit
116
-- - Renamed blocks
117
-- - Input SO implemented
118
-- 
119
-- Revision 1.3  2009/01/03 16:42:02  eda
120
-- - Unused nets and blocks deleted
121
-- - Re-arragend symbols in block FSM_Execution_Unit
122
-- - Renamed blocks
123
-- - Input SO implemented
124
-- 
125
-- Revision 1.2  2008/12/31 19:31:24  eda
126
-- Production Release
127
--  
128
-- 
129 24 fpga_is_fu
--
130 26 fpga_is_fu
-- VHDL Architecture r6502_tc.fsm_execution_unit.fsm
131 24 fpga_is_fu
--
132
-- Created:
133 26 fpga_is_fu
--          by - eda.UNKNOWN (ENTW-7HPZ200)
134
--          at - 22:31:13 15.09.2018
135 24 fpga_is_fu
--
136 26 fpga_is_fu
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
137 24 fpga_is_fu
--
138 26 fpga_is_fu
-- COPYRIGHT (C) 2008 - 2018 by Jens Gutschmidt
139
-- 
140
-- 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.
141
-- 
142
-- 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.
143
-- 
144
-- You should have received a copy of the GNU General Public License along with this program.  If not, see <http://www.gnu.org/licenses/>.
145
-- 
146
-- 
147 24 fpga_is_fu
LIBRARY ieee;
148
USE ieee.std_logic_1164.all;
149
USE ieee.std_logic_arith.all;
150
 
151 26 fpga_is_fu
architecture fsm of fsm_execution_unit is
152 24 fpga_is_fu
 
153
   -- Architecture Declarations
154 26 fpga_is_fu
   signal reg_F : std_logic_vector( 7 DOWNTO 0 );
155
   signal reg_sel_pc_in : std_logic;
156
   signal reg_sel_pc_val : std_logic_vector( 1 DOWNTO 0 );
157
   signal reg_sel_rb_in : std_logic_vector( 1 DOWNTO 0 );
158
   signal reg_sel_rb_out : std_logic_vector( 1 DOWNTO 0 );
159
   signal reg_sel_reg : std_logic_vector( 1 DOWNTO 0 );
160
   signal reg_sel_sp_as : std_logic;
161
   signal reg_sel_sp_in : std_logic;
162
   signal sig_D_OUT : std_logic_vector( 7 DOWNTO 0 );
163
   signal sig_PC : std_logic_vector(15 DOWNTO 0);
164
   signal sig_RD : std_logic;
165
   signal sig_RWn : std_logic;
166
   signal sig_SYNC : std_logic;
167
   signal sig_WR : std_logic;
168
   signal zw_REG_OP : std_logic_vector( 7 DOWNTO 0 );
169
   signal zw_alu : std_logic_vector(9 DOWNTO 0);
170
   signal zw_alu1 : std_logic_vector(9 DOWNTO 0);
171
   signal zw_alu2 : std_logic_vector(9 DOWNTO 0);
172
   signal zw_alu3 : std_logic_vector(9 DOWNTO 0);
173
   signal zw_alu4 : std_logic_vector(9 DOWNTO 0);
174
   signal zw_b1 : std_logic_vector( 7 DOWNTO 0 );
175
   signal zw_b2 : std_logic_vector( 7 DOWNTO 0 );
176
   signal zw_b3 : std_logic_vector( 7 DOWNTO 0 );
177
   signal zw_b4 : std_logic_vector( 7 DOWNTO 0 );
178
   signal zw_bit : std_logic;
179
   signal zw_irq : std_logic;
180
   signal zw_ninebits4 : std_logic_vector(8 DOWNTO 0);
181
   signal zw_nmi : std_logic;
182
   signal zw_so : std_logic;
183 24 fpga_is_fu
 
184 26 fpga_is_fu
   subtype state_type is
185
      std_logic_vector(7 downto 0);
186 24 fpga_is_fu
 
187
   -- Hard encoding
188 26 fpga_is_fu
   constant FETCH : state_type := "00000000";
189
   constant s0001 : state_type := "00000001";
190
   constant s0101 : state_type := "00000011";
191
   constant s0201 : state_type := "00000010";
192
   constant s0301 : state_type := "00000110";
193
   constant s0401 : state_type := "00000111";
194
   constant s1001 : state_type := "00000101";
195
   constant s1101 : state_type := "00000100";
196
   constant s1201 : state_type := "00001100";
197
   constant s1301 : state_type := "00001101";
198
   constant s1501 : state_type := "00001111";
199
   constant s1601 : state_type := "00001110";
200
   constant s1602 : state_type := "00001010";
201
   constant s1603 : state_type := "00001011";
202
   constant s1604 : state_type := "00001001";
203
   constant s2601 : state_type := "00001000";
204
   constant s2605 : state_type := "00011000";
205
   constant s2604 : state_type := "00011001";
206
   constant s2603 : state_type := "00011011";
207
   constant s2602 : state_type := "00011010";
208
   constant s2606 : state_type := "00011110";
209
   constant s2607 : state_type := "00011111";
210
   constant s2608 : state_type := "00011101";
211
   constant s2609 : state_type := "00011100";
212
   constant s2610 : state_type := "00010100";
213
   constant s2611 : state_type := "00010101";
214
   constant s1901 : state_type := "00010111";
215
   constant s1902 : state_type := "00010110";
216
   constant s2001 : state_type := "00010010";
217
   constant s2002 : state_type := "00010011";
218
   constant s2101 : state_type := "00010001";
219
   constant s2102 : state_type := "00010000";
220
   constant s2103 : state_type := "00110000";
221
   constant s2201 : state_type := "00110001";
222
   constant s2202 : state_type := "00110011";
223
   constant s2203 : state_type := "00110010";
224
   constant s2301 : state_type := "00110110";
225
   constant s2302 : state_type := "00110111";
226
   constant s2303 : state_type := "00110101";
227
   constant s2304 : state_type := "00110100";
228
   constant s2305 : state_type := "00111100";
229
   constant s2401 : state_type := "00111101";
230
   constant s2402 : state_type := "00111111";
231
   constant s2403 : state_type := "00111110";
232
   constant s2404 : state_type := "00111010";
233
   constant s2405 : state_type := "00111011";
234
   constant s1701 : state_type := "00111001";
235
   constant s1702 : state_type := "00111000";
236
   constant s1703 : state_type := "00101000";
237
   constant s1704 : state_type := "00101001";
238
   constant s1705 : state_type := "00101011";
239
   constant s0901 : state_type := "00101010";
240
   constant s0902 : state_type := "00101110";
241
   constant s0903 : state_type := "00101111";
242
   constant s9901 : state_type := "00101101";
243
   constant s9903 : state_type := "00101100";
244
   constant s9904 : state_type := "00100100";
245
   constant s9905 : state_type := "00100101";
246
   constant s9906 : state_type := "00100111";
247
   constant s9902 : state_type := "00100110";
248
   constant s2801 : state_type := "00100010";
249
   constant s2901 : state_type := "00100011";
250
   constant s3001 : state_type := "00100001";
251
   constant s3101 : state_type := "00100000";
252
   constant s1801 : state_type := "01100000";
253
   constant s1803 : state_type := "01100001";
254
   constant s1805 : state_type := "01100011";
255
   constant s1806 : state_type := "01100010";
256
   constant s1802 : state_type := "01100110";
257
   constant s1804 : state_type := "01100111";
258
   constant s1808 : state_type := "01100101";
259
   constant s1807 : state_type := "01100100";
260
   constant s1810 : state_type := "01101100";
261
   constant s1809 : state_type := "01101101";
262
   constant s1401 : state_type := "01101111";
263
   constant s1403 : state_type := "01101110";
264
   constant s1404 : state_type := "01101010";
265
   constant s1402 : state_type := "01101011";
266
   constant s1405 : state_type := "01101001";
267
   constant s1406 : state_type := "01101000";
268
   constant s1407 : state_type := "01111000";
269
   constant s1408 : state_type := "01111001";
270
   constant s0801 : state_type := "01111011";
271
   constant s0803 : state_type := "01111010";
272
   constant s0802 : state_type := "01111110";
273
   constant s0601 : state_type := "01111111";
274
   constant s0603 : state_type := "01111101";
275
   constant s0604 : state_type := "01111100";
276
   constant s0602 : state_type := "01110100";
277
   constant s0605 : state_type := "01110101";
278
   constant s0606 : state_type := "01110111";
279
   constant s0607 : state_type := "01110110";
280
   constant s0608 : state_type := "01110010";
281
   constant s0501 : state_type := "01110011";
282
   constant s0503 : state_type := "01110001";
283
   constant s0505 : state_type := "01110000";
284
   constant s0506 : state_type := "01010000";
285
   constant s0502 : state_type := "01010001";
286
   constant s0504 : state_type := "01010011";
287
   constant s0507 : state_type := "01010010";
288
   constant s0509 : state_type := "01010110";
289
   constant s0510 : state_type := "01010111";
290
   constant s0508 : state_type := "01010101";
291
   constant s0701 : state_type := "01010100";
292
   constant s0702 : state_type := "01011100";
293
   constant s0703 : state_type := "01011101";
294
   constant s2501 : state_type := "01011111";
295
   constant s2503 : state_type := "01011110";
296
   constant s2505 : state_type := "01011010";
297
   constant s2506 : state_type := "01011011";
298
   constant s2502 : state_type := "01011001";
299
   constant s2504 : state_type := "01011000";
300
   constant s2507 : state_type := "01001000";
301
   constant s2508 : state_type := "01001001";
302
   constant s2509 : state_type := "01001011";
303
   constant s2510 : state_type := "01001010";
304
   constant s2701 : state_type := "01001110";
305
   constant s2702 : state_type := "01001111";
306
   constant s2703 : state_type := "01001101";
307
   constant s2704 : state_type := "01001100";
308
   constant s2707 : state_type := "01000100";
309
   constant s2706 : state_type := "01000101";
310
   constant s2705 : state_type := "01000111";
311
   constant s0905 : state_type := "01000110";
312
   constant s0907 : state_type := "01000010";
313
   constant s0906 : state_type := "01000011";
314
   constant s0904 : state_type := "01000001";
315
   constant RES : state_type := "01000000";
316
   constant RES7 : state_type := "11000000";
317 24 fpga_is_fu
 
318
   -- Declare current and next state signals
319 26 fpga_is_fu
   signal current_state : state_type;
320
   signal next_state : state_type;
321 24 fpga_is_fu
 
322
   -- Declare any pre-registered internal signals
323 26 fpga_is_fu
   signal d_o_cld : std_logic_vector ( 7 downto 0 );
324
   signal rd_o_cld : std_logic ;
325
   signal sync_o_cld : std_logic ;
326
   signal wr_n_o_cld : std_logic ;
327
   signal wr_o_cld : std_logic ;
328 24 fpga_is_fu
 
329 26 fpga_is_fu
begin
330 24 fpga_is_fu
 
331
   -----------------------------------------------------------------
332 26 fpga_is_fu
   clocked_proc : process (
333 24 fpga_is_fu
      clk_clk_i,
334
      rst_rst_n_i
335
   )
336
   -----------------------------------------------------------------
337 26 fpga_is_fu
   begin
338
      if (rst_rst_n_i = '0') then
339 24 fpga_is_fu
         current_state <= RES;
340
         -- Default Reset Values
341
         d_o_cld <= X"00";
342
         rd_o_cld <= '0';
343
         sync_o_cld <= '0';
344
         wr_n_o_cld <= '1';
345
         wr_o_cld <= '0';
346 26 fpga_is_fu
         reg_F <= "00110100";
347 24 fpga_is_fu
         reg_sel_pc_in <= '0';
348
         reg_sel_pc_val <= "00";
349
         reg_sel_rb_in <= "00";
350
         reg_sel_rb_out <= "00";
351
         reg_sel_reg <= "00";
352
         reg_sel_sp_as <= '0';
353
         reg_sel_sp_in <= '0';
354
         sig_PC <= X"0000";
355
         zw_REG_OP <= X"00";
356
         zw_b1 <= X"00";
357
         zw_b2 <= X"00";
358
         zw_b3 <= X"00";
359
         zw_b4 <= X"00";
360 26 fpga_is_fu
         zw_bit <= '0';
361
         zw_irq <= '0';
362
         zw_nmi <= '0';
363 24 fpga_is_fu
         zw_so <= '0';
364 26 fpga_is_fu
      elsif (clk_clk_i'event and clk_clk_i = '1') then
365 24 fpga_is_fu
         current_state <= next_state;
366
         -- Default Assignment To Internals
367
         reg_F <= reg_F(7) & (zw_so OR reg_F(6)) & reg_F(5 downto 0);
368
         reg_sel_pc_in <= reg_sel_pc_in;
369
         reg_sel_pc_val <= reg_sel_pc_val;
370
         reg_sel_rb_in <= reg_sel_rb_in;
371
         reg_sel_rb_out <= reg_sel_rb_out;
372
         reg_sel_reg <= reg_sel_reg;
373
         reg_sel_sp_as <= reg_sel_sp_as;
374
         reg_sel_sp_in <= reg_sel_sp_in;
375
         sig_PC <= sig_PC;
376
         zw_REG_OP <= zw_REG_OP;
377
         zw_b1 <= zw_b1;
378
         zw_b2 <= zw_b2;
379
         zw_b3 <= zw_b3;
380
         zw_b4 <= zw_b4;
381 26 fpga_is_fu
         zw_bit <= zw_bit;
382
         zw_irq <= zw_irq;
383
         zw_nmi <= zw_nmi;
384 24 fpga_is_fu
         zw_so <= (zw_so OR (NOT(so_n_i))) AND (NOT(reg_F(6)));
385
         d_o_cld <= sig_D_OUT;
386
         rd_o_cld <= sig_RD;
387
         sync_o_cld <= sig_SYNC;
388
         wr_n_o_cld <= sig_RWn;
389
         wr_o_cld <= sig_WR;
390
 
391
         -- Combined Actions
392 26 fpga_is_fu
         case current_state is
393
            when FETCH =>
394 24 fpga_is_fu
               zw_REG_OP <= d_i;
395 26 fpga_is_fu
               if ((d_i = X"00") and (rdy_i = '1')) then
396
                  sig_PC <= adr_nxt_pc_i;
397
               elsif ((nmi_i = '1') and (rdy_i = '1')) then
398
                  reg_sel_pc_in <= '0';
399
                  reg_sel_pc_val <= "00";
400
                  reg_sel_sp_in <= '0';
401
                  reg_sel_sp_as <= '1';
402
                  zw_nmi <= '0';
403
               elsif ((irq_n_i = '0' and
404
                      reg_F(2) = '0') and (rdy_i = '1')) then
405
                  reg_sel_pc_in <= '0';
406
                  reg_sel_pc_val <= "00";
407
                  reg_sel_sp_in <= '0';
408
                  reg_sel_sp_as <= '1';
409
                  zw_irq <= '0';
410
               elsif ((d_i = X"69" or
411 24 fpga_is_fu
                      d_i = X"65" or
412
                      d_i = X"75" or
413
                      d_i = X"6D" or
414
                      d_i = X"7D" or
415
                      d_i = X"79" or
416
                      d_i = X"61" or
417 26 fpga_is_fu
                      d_i = X"71") and (rdy_i = '1')) then
418 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
419
                  reg_sel_reg <= "00";
420
                  reg_sel_rb_in <= "11";
421 26 fpga_is_fu
               elsif ((d_i = X"06" or
422 24 fpga_is_fu
                      d_i = X"16" or
423
                      d_i = X"0E" or
424 26 fpga_is_fu
                      d_i = X"1E") and (rdy_i = '1')) then
425 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
426 26 fpga_is_fu
               elsif ((d_i = X"90" or
427 24 fpga_is_fu
                      d_i = X"B0" or
428
                      d_i = X"F0" or
429
                      d_i = X"30" or
430
                      d_i = X"D0" or
431
                      d_i = X"10" or
432
                      d_i = X"50" or
433 26 fpga_is_fu
                      d_i = X"70") and (rdy_i = '1')) then
434 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
435 26 fpga_is_fu
               elsif ((d_i = X"24" or
436
                      d_i = X"2C") and (rdy_i = '1')) then
437 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
438 26 fpga_is_fu
               elsif ((d_i = X"18") and (rdy_i = '1')) then
439
               elsif ((d_i = X"D8") and (rdy_i = '1')) then
440
               elsif ((d_i = X"58") and (rdy_i = '1')) then
441
                  reg_F(2) <= '0';
442
               elsif ((d_i = X"B8") and (rdy_i = '1')) then
443
               elsif ((d_i = X"E0" or
444 24 fpga_is_fu
                      d_i = X"E4" or
445 26 fpga_is_fu
                      d_i = X"EC") and (rdy_i = '1')) then
446 24 fpga_is_fu
                  reg_sel_rb_out <= "01";
447
                  sig_PC <= adr_nxt_pc_i;
448 26 fpga_is_fu
               elsif ((d_i = X"C0" or
449 24 fpga_is_fu
                      d_i = X"C4" or
450 26 fpga_is_fu
                      d_i = X"CC") and (rdy_i = '1')) then
451 24 fpga_is_fu
                  reg_sel_rb_out <= "10";
452
                  sig_PC <= adr_nxt_pc_i;
453 26 fpga_is_fu
               elsif ((d_i = X"C6" or
454 24 fpga_is_fu
                      d_i = X"D6" or
455
                      d_i = X"CE" or
456 26 fpga_is_fu
                      d_i = X"DE") and (rdy_i = '1')) then
457 24 fpga_is_fu
                  zw_b4 <= X"FF";
458
                  sig_PC <= adr_nxt_pc_i;
459 26 fpga_is_fu
               elsif ((d_i = X"CA") and (rdy_i = '1')) then
460 24 fpga_is_fu
                  reg_sel_rb_out <= "01";
461
                  reg_sel_reg <= "01";
462
                  reg_sel_rb_in <= "11";
463
                  zw_b4 <= X"FF";
464 26 fpga_is_fu
               elsif ((d_i = X"88") and (rdy_i = '1')) then
465 24 fpga_is_fu
                  reg_sel_rb_out <= "10";
466
                  reg_sel_reg <= "10";
467
                  reg_sel_rb_in <= "11";
468
                  zw_b4 <= X"FF";
469 26 fpga_is_fu
               elsif ((d_i = X"49" or
470 24 fpga_is_fu
                      d_i = X"45" or
471
                      d_i = X"55" or
472
                      d_i = X"4D" or
473
                      d_i = X"5D" or
474
                      d_i = X"59" or
475
                      d_i = X"41" or
476
                      d_i = X"51" or
477
                      d_i = X"09" or
478
                      d_i = X"05" or
479
                      d_i = X"15" or
480
                      d_i = X"0D" or
481
                      d_i = X"1D" or
482
                      d_i = X"19" or
483
                      d_i = X"01" or
484
                      d_i = X"11" or
485
                      d_i = X"29" or
486
                      d_i = X"25" or
487
                      d_i = X"35" or
488
                      d_i = X"2D" or
489
                      d_i = X"3D" or
490
                      d_i = X"39" or
491
                      d_i = X"21" or
492
                      d_i = X"31" or
493
                      d_i = X"C9" or
494
                      d_i = X"C5" or
495
                      d_i = X"D5" or
496
                      d_i = X"CD" or
497
                      d_i = X"DD" or
498
                      d_i = X"D9" or
499
                      d_i = X"C1" or
500 26 fpga_is_fu
                      d_i = X"D1") and (rdy_i = '1')) then
501 24 fpga_is_fu
                  reg_sel_rb_out <= "00";
502
                  reg_sel_reg <= "00";
503
                  reg_sel_rb_in <= "11";
504
                  sig_PC <= adr_nxt_pc_i;
505 26 fpga_is_fu
               elsif ((d_i = X"E6" or
506 24 fpga_is_fu
                      d_i = X"F6" or
507
                      d_i = X"EE" or
508 26 fpga_is_fu
                      d_i = X"FE") and (rdy_i = '1')) then
509 24 fpga_is_fu
                  zw_b4 <= X"01";
510
                  sig_PC <= adr_nxt_pc_i;
511 26 fpga_is_fu
               elsif ((d_i = X"E8") and (rdy_i = '1')) then
512 24 fpga_is_fu
                  reg_sel_rb_out <= "01";
513
                  reg_sel_reg <= "01";
514
                  reg_sel_rb_in <= "11";
515
                  zw_b4 <= X"01";
516 26 fpga_is_fu
               elsif ((d_i = X"C8") and (rdy_i = '1')) then
517 24 fpga_is_fu
                  reg_sel_rb_out <= "10";
518
                  reg_sel_reg <= "10";
519
                  reg_sel_rb_in <= "11";
520
                  zw_b4 <= X"01";
521 26 fpga_is_fu
               elsif ((d_i = X"4C" or
522
                      d_i = X"6C") and (rdy_i = '1')) then
523 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
524 26 fpga_is_fu
               elsif ((d_i = X"20") and (rdy_i = '1')) then
525 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
526 26 fpga_is_fu
               elsif ((d_i = X"A9" or
527 24 fpga_is_fu
                      d_i = X"A5" or
528
                      d_i = X"B5" or
529
                      d_i = X"AD" or
530
                      d_i = X"BD" or
531
                      d_i = X"B9" or
532
                      d_i = X"A1" or
533 26 fpga_is_fu
                      d_i = X"B1") and (rdy_i = '1')) then
534 24 fpga_is_fu
                  reg_sel_reg <= "00";
535
                  reg_sel_rb_in <= "11";
536
                  sig_PC <= adr_nxt_pc_i;
537 26 fpga_is_fu
               elsif ((d_i = X"A2" or
538 24 fpga_is_fu
                      d_i = X"A6" or
539
                      d_i = X"B6" or
540
                      d_i = X"AE" or
541 26 fpga_is_fu
                      d_i = X"BE") and (rdy_i = '1')) then
542 24 fpga_is_fu
                  reg_sel_reg <= "01";
543
                  reg_sel_rb_in <= "11";
544
                  sig_PC <= adr_nxt_pc_i;
545 26 fpga_is_fu
               elsif ((d_i = X"A0" or
546 24 fpga_is_fu
                      d_i = X"A4" or
547
                      d_i = X"B4" or
548
                      d_i = X"AC" or
549 26 fpga_is_fu
                      d_i = X"BC") and (rdy_i = '1')) then
550 24 fpga_is_fu
                  reg_sel_reg <= "10";
551
                  reg_sel_rb_in <= "11";
552
                  sig_PC <= adr_nxt_pc_i;
553 26 fpga_is_fu
               elsif ((d_i = X"46" or
554 24 fpga_is_fu
                      d_i = X"56" or
555
                      d_i = X"4E" or
556 26 fpga_is_fu
                      d_i = X"5E") and (rdy_i = '1')) then
557 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
558 26 fpga_is_fu
               elsif ((d_i = X"EA") and (rdy_i = '1')) then
559
               elsif ((d_i = X"48") and (rdy_i = '1')) then
560 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
561 26 fpga_is_fu
               elsif ((d_i = X"08") and (rdy_i = '1')) then
562 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
563 26 fpga_is_fu
               elsif ((d_i = X"68") and (rdy_i = '1')) then
564 24 fpga_is_fu
                  reg_sel_sp_in <= '0';
565
                  reg_sel_sp_as <= '0';
566
 
567
                  reg_sel_reg <= "00";
568
                  reg_sel_rb_in <= "11";
569 26 fpga_is_fu
               elsif ((d_i = X"28") and (rdy_i = '1')) then
570 24 fpga_is_fu
                  reg_sel_sp_in <= '0';
571
                  reg_sel_sp_as <= '0';
572 26 fpga_is_fu
               elsif ((d_i = X"26" or
573 24 fpga_is_fu
                      d_i = X"36" or
574
                      d_i = X"2E" or
575 26 fpga_is_fu
                      d_i = X"3E") and (rdy_i = '1')) then
576 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
577 26 fpga_is_fu
               elsif ((d_i = X"66" or
578 24 fpga_is_fu
                      d_i = X"76" or
579
                      d_i = X"6E" or
580 26 fpga_is_fu
                      d_i = X"7E") and (rdy_i = '1')) then
581 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
582 26 fpga_is_fu
               elsif ((d_i = X"40") and (rdy_i = '1')) then
583 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
584
                  reg_sel_sp_in <= '0';
585
                  reg_sel_sp_as <= '0';
586 26 fpga_is_fu
               elsif ((d_i = X"60") and (rdy_i = '1')) then
587 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
588
                  reg_sel_sp_in <= '0';
589
                  reg_sel_sp_as <= '0';
590 26 fpga_is_fu
               elsif ((d_i = X"E9" or
591 24 fpga_is_fu
                      d_i = X"E5" or
592
                      d_i = X"F5" or
593
                      d_i = X"ED" or
594
                      d_i = X"FD" or
595
                      d_i = X"F9" or
596
                      d_i = X"E1" or
597 26 fpga_is_fu
                      d_i = X"F1") and (rdy_i = '1')) then
598 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
599
                  reg_sel_reg <= "00";
600
                  reg_sel_rb_in <= "11";
601 26 fpga_is_fu
               elsif ((d_i = X"38") and (rdy_i = '1')) then
602
               elsif ((d_i = X"F8") and (rdy_i = '1')) then
603
               elsif ((d_i = X"78") and (rdy_i = '1')) then
604
                  reg_F(2) <= '1';
605
               elsif ((d_i = X"85" or
606 24 fpga_is_fu
                      d_i = X"95" or
607
                      d_i = X"8D" or
608
                      d_i = X"9D" or
609
                      d_i = X"99" or
610
                      d_i = X"81" or
611 26 fpga_is_fu
                      d_i = X"91") and (rdy_i = '1')) then
612 24 fpga_is_fu
                  reg_sel_rb_out <= "00";
613
                  sig_PC <= adr_nxt_pc_i;
614 26 fpga_is_fu
               elsif ((d_i = X"86" or
615 24 fpga_is_fu
                      d_i = X"96" or
616 26 fpga_is_fu
                      d_i = X"8E") and (rdy_i = '1')) then
617 24 fpga_is_fu
                  reg_sel_rb_out <= "01";
618
                  sig_PC <= adr_nxt_pc_i;
619 26 fpga_is_fu
               elsif ((d_i = X"84" or
620 24 fpga_is_fu
                      d_i = X"94" or
621 26 fpga_is_fu
                      d_i = X"8C") and (rdy_i = '1')) then
622 24 fpga_is_fu
                  reg_sel_rb_out <= "10";
623
                  sig_PC <= adr_nxt_pc_i;
624 26 fpga_is_fu
               elsif ((d_i = X"AA") and (rdy_i = '1')) then
625 24 fpga_is_fu
                  reg_sel_rb_out <= "00";
626
                  reg_sel_reg <= "01";
627
                  reg_sel_rb_in <= "00";
628
                  reg_sel_sp_in <= '1';
629
                  reg_sel_sp_as <= '0';
630 26 fpga_is_fu
               elsif ((d_i = X"0A") and (rdy_i = '1')) then
631 24 fpga_is_fu
                  reg_sel_rb_out <= "00";
632
                  reg_sel_reg <= "00";
633
                  reg_sel_rb_in <= "11";
634 26 fpga_is_fu
               elsif ((d_i = X"4A") and (rdy_i = '1')) then
635 24 fpga_is_fu
                  reg_sel_rb_out <= "00";
636
                  reg_sel_reg <= "00";
637
                  reg_sel_rb_in <= "11";
638 26 fpga_is_fu
               elsif ((d_i = X"2A") and (rdy_i = '1')) then
639 24 fpga_is_fu
                  reg_sel_rb_out <= "00";
640
                  reg_sel_reg <= "00";
641
                  reg_sel_rb_in <= "11";
642 26 fpga_is_fu
               elsif ((d_i = X"6A") and (rdy_i = '1')) then
643 24 fpga_is_fu
                  reg_sel_rb_out <= "00";
644
                  reg_sel_reg <= "00";
645
                  reg_sel_rb_in <= "11";
646 26 fpga_is_fu
               elsif ((d_i = X"A8") and (rdy_i = '1')) then
647 24 fpga_is_fu
                  reg_sel_rb_out <= "00";
648
                  reg_sel_reg <= "10";
649
                  reg_sel_rb_in <= "00";
650
                  reg_sel_sp_in <= '1';
651
                  reg_sel_sp_as <= '0';
652 26 fpga_is_fu
               elsif ((d_i = X"98") and (rdy_i = '1')) then
653 24 fpga_is_fu
                  reg_sel_rb_out <= "10";
654
                  reg_sel_reg <= "00";
655
                  reg_sel_rb_in <= "01";
656
                  reg_sel_sp_in <= '1';
657
                  reg_sel_sp_as <= '0';
658 26 fpga_is_fu
               elsif ((d_i = X"BA") and (rdy_i = '1')) then
659 24 fpga_is_fu
                  reg_sel_rb_out <= "01";
660
                  reg_sel_reg <= "01";
661
                  reg_sel_rb_in <= "11";
662
                  reg_sel_sp_in <= '1';
663
                  reg_sel_sp_as <= '0';
664 26 fpga_is_fu
               elsif ((d_i = X"8A") and (rdy_i = '1')) then
665 24 fpga_is_fu
                  reg_sel_rb_out <= "01";
666
                  reg_sel_reg <= "00";
667
                  reg_sel_rb_in <= "10";
668
                  reg_sel_sp_in <= '1';
669
                  reg_sel_sp_as <= '0';
670 26 fpga_is_fu
               elsif ((d_i = X"9A") and (rdy_i = '1')) then
671 24 fpga_is_fu
                  reg_sel_rb_out <= "01";
672
                  reg_sel_reg <= "11";
673
                  reg_sel_rb_in <= "11";
674
                  reg_sel_sp_in <= '1';
675
                  reg_sel_sp_as <= '0';
676 26 fpga_is_fu
               end if;
677
            when s0001 =>
678
               if (rdy_i = '1') then
679 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
680
                  reg_sel_pc_in <= '0';
681
                  reg_sel_pc_val <= "00";
682
                  reg_sel_sp_in <= '0';
683
                  reg_sel_sp_as <= '1';
684 26 fpga_is_fu
               end if;
685
            when s0101 =>
686
               if (rdy_i = '1') then
687 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
688
                  reg_F(0) <= '1';
689
                  reg_sel_pc_in <= '0';
690
                  reg_sel_pc_val <= "00";
691
                  reg_sel_sp_in <= '0';
692
                  reg_sel_sp_as <= '1';
693 26 fpga_is_fu
               end if;
694
            when s0201 =>
695
               if (rdy_i = '1') then
696 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
697
                  reg_F(3) <= '1';
698
                  reg_sel_pc_in <= '0';
699
                  reg_sel_pc_val <= "00";
700
                  reg_sel_sp_in <= '0';
701
                  reg_sel_sp_as <= '1';
702 26 fpga_is_fu
               end if;
703
            when s0301 =>
704
               if (rdy_i = '1') then
705 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
706
                  reg_sel_pc_in <= '0';
707
                  reg_sel_pc_val <= "00";
708
                  reg_sel_sp_in <= '0';
709
                  reg_sel_sp_as <= '1';
710 26 fpga_is_fu
               end if;
711
            when s0401 =>
712
               if (rdy_i = '1' and
713
                   zw_REG_OP = X"9A") then
714 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
715
                  reg_sel_pc_in <= '0';
716
                  reg_sel_pc_val <= "00";
717
                  reg_sel_sp_in <= '0';
718
                  reg_sel_sp_as <= '1';
719 26 fpga_is_fu
               elsif (rdy_i = '1' and
720
                      zw_REG_OP = X"BA") then
721 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
722
                  reg_F(7) <= reg_7flag_i;
723
                  reg_F(1) <= reg_1flag_i;
724
                  reg_sel_pc_in <= '0';
725
                  reg_sel_pc_val <= "00";
726
                  reg_sel_sp_in <= '0';
727
                  reg_sel_sp_as <= '1';
728 26 fpga_is_fu
               elsif (rdy_i = '1') then
729 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
730
                  reg_F(7) <= reg_7flag_i;
731
                  reg_F(1) <= reg_1flag_i;
732
                  reg_sel_pc_in <= '0';
733
                  reg_sel_pc_val <= "00";
734
                  reg_sel_sp_in <= '0';
735
                  reg_sel_sp_as <= '1';
736 26 fpga_is_fu
               end if;
737
            when s1001 =>
738
               if (rdy_i = '1') then
739 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
740
                  reg_F(0) <= '0';
741
                  reg_sel_pc_in <= '0';
742
                  reg_sel_pc_val <= "00";
743
                  reg_sel_sp_in <= '0';
744
                  reg_sel_sp_as <= '1';
745 26 fpga_is_fu
               end if;
746
            when s1101 =>
747
               if (rdy_i = '1') then
748 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
749
                  reg_F(3) <= '0';
750
                  reg_sel_pc_in <= '0';
751
                  reg_sel_pc_val <= "00";
752
                  reg_sel_sp_in <= '0';
753
                  reg_sel_sp_as <= '1';
754 26 fpga_is_fu
               end if;
755
            when s1201 =>
756
               if (rdy_i = '1') then
757 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
758
                  reg_sel_pc_in <= '0';
759
                  reg_sel_pc_val <= "00";
760
                  reg_sel_sp_in <= '0';
761
                  reg_sel_sp_as <= '1';
762 26 fpga_is_fu
               end if;
763
            when s1301 =>
764
               if (rdy_i = '1') then
765 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
766
                  reg_F(6) <= '0';
767
                  reg_sel_pc_in <= '0';
768
                  reg_sel_pc_val <= "00";
769
                  reg_sel_sp_in <= '0';
770
                  reg_sel_sp_as <= '1';
771 26 fpga_is_fu
               end if;
772
            when s1501 =>
773
               if (rdy_i = '1') then
774 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
775
                  reg_F(7) <= reg_7flag_i;
776
                  reg_F(1) <= reg_1flag_i;
777
                  reg_sel_pc_in <= '0';
778
                  reg_sel_pc_val <= "00";
779
                  reg_sel_sp_in <= '0';
780
                  reg_sel_sp_as <= '1';
781 26 fpga_is_fu
               end if;
782
            when s1601 =>
783
               if (rdy_i = '1' and
784
                   zw_REG_OP = X"4C") then
785 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
786
                  reg_sel_pc_in <= '1';
787 26 fpga_is_fu
                  reg_sel_pc_val <= "01";
788 24 fpga_is_fu
                  zw_b1 <= d_i;
789 26 fpga_is_fu
               elsif (rdy_i = '1' and
790
                      zw_REG_OP = X"6C") then
791 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
792
                  reg_sel_pc_in <= '1';
793
                  reg_sel_pc_val <= "00";
794
                  zw_b1 <= d_i;
795 26 fpga_is_fu
               end if;
796
            when s1602 =>
797
               if (rdy_i = '1') then
798 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
799
                  reg_sel_pc_in <= '0';
800
                  reg_sel_pc_val <= "00";
801
                  zw_b2 <= d_i;
802 26 fpga_is_fu
               end if;
803
            when s1603 =>
804
               if (rdy_i = '1') then
805
                  sig_PC <= adr_pc_i;
806 24 fpga_is_fu
                  reg_sel_pc_in <= '1';
807 26 fpga_is_fu
                  reg_sel_pc_val <= "01";
808 24 fpga_is_fu
                  zw_b1 <= d_i;
809 26 fpga_is_fu
               end if;
810
            when s1604 =>
811
               if (rdy_i = '1') then
812 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
813
                  reg_sel_pc_in <= '0';
814
                  reg_sel_pc_val <= "00";
815
                  reg_sel_sp_in <= '0';
816
                  reg_sel_sp_as <= '1';
817 26 fpga_is_fu
               end if;
818
            when s2601 =>
819
               if (rdy_i = '1' and
820 24 fpga_is_fu
                   (zw_REG_OP = X"85" OR
821
                   zw_REG_OP = X"86" OR
822 26 fpga_is_fu
                   zw_REG_OP = X"84")) then
823 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
824 26 fpga_is_fu
               elsif (rdy_i = '1' and
825 24 fpga_is_fu
                      (zw_REG_OP = X"95" OR
826 26 fpga_is_fu
                      zw_REG_OP = X"94")) then
827 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
828
                  zw_b1 <= d_alu_i;
829 26 fpga_is_fu
               elsif (rdy_i = '1' and
830 24 fpga_is_fu
                      (zw_REG_OP = X"8D" OR
831
                      zw_REG_OP = X"8E" OR
832 26 fpga_is_fu
                      zw_REG_OP = X"8C")) then
833 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
834
                  zw_b1 <= d_i;
835 26 fpga_is_fu
               elsif (rdy_i = '1' and
836
                      zw_REG_OP = X"9D") then
837 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
838
                  zw_b1 <= d_alu_i;
839
                  zw_b2(0) <= reg_0flag_i;
840 26 fpga_is_fu
               elsif (rdy_i = '1' and
841
                      zw_REG_OP = X"99") then
842 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
843
                  zw_b1 <= d_alu_i;
844
                  zw_b2(0) <= reg_0flag_i;
845 26 fpga_is_fu
               elsif (rdy_i = '1' and
846
                      zw_REG_OP = X"91") then
847 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
848
                  zw_b1 <= d_alu_i;
849 26 fpga_is_fu
               elsif (rdy_i = '1' and
850
                      zw_REG_OP = X"81") then
851 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
852
                  zw_b1 <= d_alu_i;
853 26 fpga_is_fu
               elsif (rdy_i = '1' and
854
                      zw_REG_OP = X"96") then
855 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
856
                  zw_b1 <= d_alu_i;
857 26 fpga_is_fu
               end if;
858
            when s2605 =>
859
               if (rdy_i = '1') then
860 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
861
                  zw_b1 <= d_alu_i;
862
                  zw_b2(0) <= reg_0flag_i;
863 26 fpga_is_fu
               end if;
864
            when s2604 =>
865
               if (rdy_i = '1') then
866 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
867
                  zw_b3 <= d_alu_i;
868 26 fpga_is_fu
               end if;
869
            when s2603 =>
870
               if (rdy_i = '1') then
871 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
872 26 fpga_is_fu
               end if;
873
            when s2602 =>
874
               if (rdy_i = '1') then
875 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
876 26 fpga_is_fu
               end if;
877
            when s2606 =>
878
               if (rdy_i = '1') then
879 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
880 26 fpga_is_fu
               end if;
881
            when s2607 =>
882
               if (rdy_i = '1') then
883 24 fpga_is_fu
                  sig_PC <= X"00" & d_alu_i;
884
                  zw_b1 <= d_i;
885 26 fpga_is_fu
               end if;
886
            when s2608 =>
887
               if (rdy_i = '1') then
888 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
889
                  zw_b3 <= d_alu_i;
890 26 fpga_is_fu
               end if;
891
            when s2609 =>
892
               if (rdy_i = '1') then
893
                  sig_PC <= zw_b3 & zw_b1;
894
               end if;
895
            when s2610 =>
896
               if (rdy_i = '1') then
897
                  sig_PC <= d_i & zw_b1;
898
               end if;
899
            when s2611 =>
900 24 fpga_is_fu
               sig_PC <= adr_pc_i;
901
               reg_sel_pc_in <= '0';
902
               reg_sel_pc_val <= "00";
903
               reg_sel_sp_in <= '0';
904
               reg_sel_sp_as <= '1';
905 26 fpga_is_fu
            when s1901 =>
906
               if (rdy_i = '1') then
907 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
908 26 fpga_is_fu
               end if;
909
            when s1902 =>
910 24 fpga_is_fu
               sig_PC <= adr_pc_i;
911
               reg_sel_pc_in <= '0';
912
               reg_sel_pc_val <= "00";
913
               reg_sel_sp_in <= '0';
914
               reg_sel_sp_as <= '1';
915 26 fpga_is_fu
            when s2001 =>
916
               if (rdy_i = '1') then
917 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
918 26 fpga_is_fu
               end if;
919
            when s2002 =>
920 24 fpga_is_fu
               sig_PC <= adr_pc_i;
921
               reg_sel_pc_in <= '0';
922
               reg_sel_pc_val <= "00";
923
               reg_sel_sp_in <= '0';
924
               reg_sel_sp_as <= '1';
925 26 fpga_is_fu
            when s2102 =>
926
               if (rdy_i = '1') then
927 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
928 26 fpga_is_fu
               end if;
929
            when s2103 =>
930
               if (rdy_i = '1') then
931 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
932
                  reg_F(7) <= reg_7flag_i;
933
                  reg_F(1) <= reg_1flag_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 26 fpga_is_fu
               end if;
939
            when s2202 =>
940
               if (rdy_i = '1') then
941 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
942 26 fpga_is_fu
               end if;
943
            when s2203 =>
944
               if (rdy_i = '1') then
945 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
946 26 fpga_is_fu
                  reg_F(7 downto 6) <= d_i(7 downto 6);
947
                  reg_F(3 downto 0) <= d_i(3 downto 0);
948 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
949
                  reg_sel_pc_val <= "00";
950
                  reg_sel_sp_in <= '0';
951
                  reg_sel_sp_as <= '1';
952 26 fpga_is_fu
               end if;
953
            when s2301 =>
954
               if (rdy_i = '1') then
955 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
956 26 fpga_is_fu
               end if;
957
            when s2302 =>
958
               if (rdy_i = '1') then
959 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
960 26 fpga_is_fu
               end if;
961
            when s2303 =>
962
               if (rdy_i = '1') then
963 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
964
                  reg_F <= d_i;
965
                  reg_sel_pc_in <= '1';
966 26 fpga_is_fu
                  reg_sel_pc_val <= "01";
967
               end if;
968
            when s2304 =>
969
               if (rdy_i = '1') then
970 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
971
                  zw_b1 <= d_i;
972 26 fpga_is_fu
               end if;
973
            when s2305 =>
974
               if (rdy_i = '1') then
975 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
976
                  reg_sel_pc_in <= '0';
977
                  reg_sel_pc_val <= "00";
978
                  reg_sel_sp_in <= '0';
979
                  reg_sel_sp_as <= '1';
980 26 fpga_is_fu
               end if;
981
            when s2401 =>
982
               if (rdy_i = '1') then
983 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
984 26 fpga_is_fu
               end if;
985
            when s2402 =>
986
               if (rdy_i = '1') then
987 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
988 26 fpga_is_fu
               end if;
989
            when s2403 =>
990
               if (rdy_i = '1') then
991 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
992
                  zw_b1 <= d_i;
993
                  reg_sel_pc_in <= '1';
994
                  reg_sel_pc_val <= "00";
995 26 fpga_is_fu
               end if;
996
            when s2404 =>
997
               if (rdy_i = '1') then
998 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
999 26 fpga_is_fu
               end if;
1000
            when s2405 =>
1001
               if (rdy_i = '1') then
1002 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1003
                  reg_sel_pc_in <= '0';
1004
                  reg_sel_pc_val <= "00";
1005
                  reg_sel_sp_in <= '0';
1006
                  reg_sel_sp_as <= '1';
1007 26 fpga_is_fu
               end if;
1008
            when s1701 =>
1009
               if (rdy_i = '1') then
1010 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
1011
                  zw_b1 <= d_i;
1012 26 fpga_is_fu
               end if;
1013
            when s1703 =>
1014 24 fpga_is_fu
               sig_PC <= adr_sp_i;
1015 26 fpga_is_fu
            when s1704 =>
1016 24 fpga_is_fu
               sig_PC <= adr_pc_i;
1017
               reg_sel_pc_in <= '1';
1018 26 fpga_is_fu
               reg_sel_pc_val <= "01";
1019
            when s1705 =>
1020
               if (rdy_i = '1') then
1021 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1 (7 downto 0);
1022
                  reg_sel_pc_in <= '0';
1023
                  reg_sel_pc_val <= "00";
1024
                  reg_sel_sp_in <= '0';
1025
                  reg_sel_sp_as <= '1';
1026 26 fpga_is_fu
               end if;
1027
            when s0901 =>
1028
               if (rdy_i = '1') then
1029 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
1030 26 fpga_is_fu
               end if;
1031
            when s0902 =>
1032 24 fpga_is_fu
               sig_PC <= adr_sp_i;
1033 26 fpga_is_fu
            when s0903 =>
1034 24 fpga_is_fu
               sig_PC <= adr_sp_i;
1035 26 fpga_is_fu
            when s9901 =>
1036
               if (rdy_i = '1') then
1037
                  sig_PC <= adr_sp_i;
1038
               end if;
1039
            when s9903 =>
1040 24 fpga_is_fu
               reg_sel_pc_in <= '0';
1041
               reg_sel_pc_val <= "00";
1042 26 fpga_is_fu
               if (rdy_i = '1') then
1043
                  sig_PC <= adr_sp_i;
1044
               end if;
1045
            when s9904 =>
1046
               if (rdy_i = '1') then
1047 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1048 26 fpga_is_fu
               end if;
1049
            when s9905 =>
1050
               zw_b1 <= d_i;
1051
               if (rdy_i = '1') then
1052
                  sig_PC <= adr_pc_i;
1053 24 fpga_is_fu
                  reg_sel_pc_in <= '1';
1054 26 fpga_is_fu
                  reg_sel_pc_val <= "01";
1055
               end if;
1056
            when s9906 =>
1057
               reg_F(2) <= '1';
1058
               reg_F(5) <= '1';
1059
               if (rdy_i = '1') then
1060 24 fpga_is_fu
                  sig_PC  <= d_i & zw_b1;
1061
                  reg_sel_pc_in <= '0';
1062
                  reg_sel_pc_val <= "00";
1063
                  reg_sel_sp_in <= '0';
1064
                  reg_sel_sp_as <= '1';
1065 26 fpga_is_fu
               end if;
1066
            when s9902 =>
1067 24 fpga_is_fu
               reg_sel_pc_in <= '1';
1068
               reg_sel_pc_val <= "00";
1069 26 fpga_is_fu
               if (rdy_i = '1') then
1070
                  sig_PC <= adr_sp_i;
1071
               end if;
1072
            when s2801 =>
1073
               if (rdy_i = '1') then
1074 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1075
                  reg_F(0) <= q_a_i(7);
1076
                  reg_F(7) <= reg_7flag_i;
1077
                  reg_F(1) <= reg_1flag_i;
1078
                  reg_sel_pc_in <= '0';
1079
                  reg_sel_pc_val <= "00";
1080
                  reg_sel_sp_in <= '0';
1081
                  reg_sel_sp_as <= '1';
1082 26 fpga_is_fu
               end if;
1083
            when s2901 =>
1084
               if (rdy_i = '1') then
1085 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1086
                  reg_F(0) <= q_a_i(0);
1087
                  reg_F(7) <= reg_7flag_i;
1088
                  reg_F(1) <= reg_1flag_i;
1089
                  reg_sel_pc_in <= '0';
1090
                  reg_sel_pc_val <= "00";
1091
                  reg_sel_sp_in <= '0';
1092
                  reg_sel_sp_as <= '1';
1093 26 fpga_is_fu
               end if;
1094
            when s3001 =>
1095
               if (rdy_i = '1') then
1096 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1097
                  reg_F(0) <= q_a_i(7);
1098
                  reg_F(0) <= q_a_i(7);
1099
                  reg_F(7) <= reg_7flag_i;
1100
                  reg_F(1) <= reg_1flag_i;
1101
                  reg_sel_pc_in <= '0';
1102
                  reg_sel_pc_val <= "00";
1103
                  reg_sel_sp_in <= '0';
1104
                  reg_sel_sp_as <= '1';
1105 26 fpga_is_fu
               end if;
1106
            when s3101 =>
1107
               if (rdy_i = '1') then
1108 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1109
                  reg_F(0) <= q_a_i(0);
1110
                  reg_F(7) <= reg_7flag_i;
1111
                  reg_F(1) <= reg_1flag_i;
1112
                  reg_sel_pc_in <= '0';
1113
                  reg_sel_pc_val <= "00";
1114
                  reg_sel_sp_in <= '0';
1115
                  reg_sel_sp_as <= '1';
1116 26 fpga_is_fu
               end if;
1117
            when s1801 =>
1118
               if (rdy_i = '1' and
1119 24 fpga_is_fu
                   (zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR
1120
                   zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR
1121
                   zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR
1122 26 fpga_is_fu
                   zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) then
1123 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1124 26 fpga_is_fu
               elsif ((rdy_i = '1' and
1125 24 fpga_is_fu
                      (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
1126 26 fpga_is_fu
                      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
1127 24 fpga_is_fu
                      zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
1128
                      zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
1129 26 fpga_is_fu
                      zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
1130 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1131
                  reg_F(7) <= reg_7flag_i;
1132
                  reg_F(1) <= reg_1flag_i;
1133
                  reg_sel_pc_in <= '0';
1134
                  reg_sel_pc_val <= "00";
1135
                  reg_sel_sp_in <= '0';
1136
                  reg_sel_sp_as <= '1';
1137 26 fpga_is_fu
               elsif ((rdy_i = '1' and
1138 24 fpga_is_fu
                      (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
1139 26 fpga_is_fu
                      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
1140 24 fpga_is_fu
                      zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
1141
                      zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
1142 26 fpga_is_fu
                      zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
1143 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1144
                  reg_F(7) <= reg_7flag_i;
1145
                  reg_F(1) <= reg_1flag_i;
1146
                  reg_sel_pc_in <= '0';
1147
                  reg_sel_pc_val <= "00";
1148
                  reg_sel_sp_in <= '0';
1149
                  reg_sel_sp_as <= '1';
1150 26 fpga_is_fu
               elsif ((rdy_i = '1' and
1151 24 fpga_is_fu
                      (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
1152 26 fpga_is_fu
                      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
1153 24 fpga_is_fu
                      zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
1154
                      zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
1155 26 fpga_is_fu
                       zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
1156 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1157
                  reg_F(7) <= reg_7flag_i;
1158
                  reg_F(1) <= reg_1flag_i;
1159
                  reg_sel_pc_in <= '0';
1160
                  reg_sel_pc_val <= "00";
1161
                  reg_sel_sp_in <= '0';
1162
                  reg_sel_sp_as <= '1';
1163 26 fpga_is_fu
               elsif ((rdy_i = '1' and
1164 24 fpga_is_fu
                      (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
1165 26 fpga_is_fu
                      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
1166 24 fpga_is_fu
                      zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
1167
                      zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
1168
                      zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
1169
                       zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
1170
                       zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
1171 26 fpga_is_fu
                       zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
1172 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1173
                  reg_F(7) <= zw_ALU(7);
1174
                  reg_F(0) <= zw_ALU(8);
1175
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1176
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1177
                  (zw_ALU(0)));
1178
                  reg_sel_pc_in <= '0';
1179
                  reg_sel_pc_val <= "00";
1180
                  reg_sel_sp_in <= '0';
1181
                  reg_sel_sp_as <= '1';
1182 26 fpga_is_fu
               elsif (rdy_i = '1' and
1183 24 fpga_is_fu
                      (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
1184 26 fpga_is_fu
                      zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) then
1185 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1186
                  reg_F(7) <= reg_7flag_i;
1187
                  reg_F(1) <= reg_1flag_i;
1188
                  reg_sel_pc_in <= '0';
1189
                  reg_sel_pc_val <= "00";
1190
                  reg_sel_sp_in <= '0';
1191
                  reg_sel_sp_as <= '1';
1192 26 fpga_is_fu
               elsif (rdy_i = '1' and
1193 24 fpga_is_fu
                      (zw_REG_OP = X"B5" OR
1194
                      zw_REG_OP = X"B4" OR
1195
                      zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR
1196
                      zw_REG_OP = X"35" OR
1197 26 fpga_is_fu
                      zw_REG_OP = X"D5")) then
1198 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1199
                  zw_b1 <= d_alu_i;
1200 26 fpga_is_fu
               elsif (rdy_i = '1' and
1201 24 fpga_is_fu
                      (zw_REG_OP = X"AD" OR
1202
                      zw_REG_OP = X"AE" OR
1203
                      zw_REG_OP = X"AC" OR
1204
                      zw_REG_OP = X"4D" OR
1205
                      zw_REG_OP = X"0D" OR
1206
                      zw_REG_OP = X"2D" OR
1207
                      zw_REG_OP = X"CD" OR
1208
                      zw_REG_OP = X"EC" OR
1209 26 fpga_is_fu
                      zw_REG_OP = X"CC")) then
1210 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1211
                  zw_b1 <= d_i;
1212 26 fpga_is_fu
               elsif (rdy_i = '1' and
1213 24 fpga_is_fu
                      (zw_REG_OP = X"BD" OR
1214
                      zw_REG_OP = X"BC" OR
1215
                      zw_REG_OP = X"5D" OR
1216
                      zw_REG_OP = X"1D" OR
1217
                      zw_REG_OP = X"3D" OR
1218 26 fpga_is_fu
                      zw_REG_OP = X"DD")) then
1219 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1220
                  zw_b1 <= d_alu_i;
1221
                  zw_b2(0) <= reg_0flag_i;
1222 26 fpga_is_fu
               elsif (rdy_i = '1' and
1223 24 fpga_is_fu
                      (zw_REG_OP = X"B9" OR
1224
                      zw_REG_OP = X"BE" OR
1225
                      zw_REG_OP = X"59" OR
1226
                      zw_REG_OP = X"19" OR
1227
                      zw_REG_OP = X"39" OR
1228 26 fpga_is_fu
                      zw_REG_OP = X"D9")) then
1229 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1230
                  zw_b1 <= d_alu_i;
1231
                  zw_b2(0) <= reg_0flag_i;
1232 26 fpga_is_fu
               elsif (rdy_i = '1' and
1233 24 fpga_is_fu
                      (zw_REG_OP = X"B1" OR
1234
                      zw_REG_OP = X"51" OR
1235
                      zw_REG_OP = X"11" OR
1236
                      zw_REG_OP = X"31" OR
1237 26 fpga_is_fu
                      zw_REG_OP = X"D1")) then
1238 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1239
                  zw_b1 <= d_alu_i;
1240 26 fpga_is_fu
               elsif (rdy_i = '1' and
1241 24 fpga_is_fu
                      (zw_REG_OP = X"A1" OR
1242
                      zw_REG_OP = X"41" OR
1243
                      zw_REG_OP = X"01" OR
1244
                      zw_REG_OP = X"21" OR
1245 26 fpga_is_fu
                      zw_REG_OP = X"C1")) then
1246 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1247
                  zw_b1 <= d_alu_i;
1248 26 fpga_is_fu
               elsif (rdy_i = '1' and
1249
                      zw_REG_OP = X"B6") then
1250 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1251
                  zw_b1 <= d_alu_i;
1252 26 fpga_is_fu
               end if;
1253
            when s1803 =>
1254
               if (rdy_i = '1') then
1255 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1256 26 fpga_is_fu
               end if;
1257
            when s1805 =>
1258
               if (rdy_i = '1') then
1259 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1260
                  zw_b3 <= d_alu_i;
1261 26 fpga_is_fu
               end if;
1262
            when s1806 =>
1263
               if (rdy_i = '1') then
1264 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
1265
                  zw_b1 <= d_alu_i;
1266
                  zw_b2(0) <= reg_0flag_i;
1267 26 fpga_is_fu
               end if;
1268
            when s1802 =>
1269
               if (rdy_i = '1') then
1270 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
1271 26 fpga_is_fu
               end if;
1272
            when s1804 =>
1273
               if (rdy_i = '1') then
1274 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
1275 26 fpga_is_fu
               end if;
1276
            when s1808 =>
1277
               if (rdy_i = '1') then
1278 24 fpga_is_fu
                  sig_PC <= X"00" & d_alu_i;
1279
                  zw_b1 <= d_i;
1280 26 fpga_is_fu
               end if;
1281
            when s1807 =>
1282
               if (rdy_i = '1') then
1283 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1284
                  zw_b3 <= d_alu_i;
1285 26 fpga_is_fu
               end if;
1286
            when s1810 =>
1287
               if ((rdy_i = '1') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
1288 24 fpga_is_fu
                   zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
1289
                   zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
1290 26 fpga_is_fu
                   zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
1291 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1292
                  reg_F(7) <= reg_7flag_i;
1293
                  reg_F(1) <= reg_1flag_i;
1294
                  reg_sel_pc_in <= '0';
1295
                  reg_sel_pc_val <= "00";
1296
                  reg_sel_sp_in <= '0';
1297
                  reg_sel_sp_as <= '1';
1298 26 fpga_is_fu
               elsif ((rdy_i = '1') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
1299 24 fpga_is_fu
                      zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
1300
                      zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
1301 26 fpga_is_fu
                      zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
1302 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1303
                  reg_F(7) <= reg_7flag_i;
1304
                  reg_F(1) <= reg_1flag_i;
1305
                  reg_sel_pc_in <= '0';
1306
                  reg_sel_pc_val <= "00";
1307
                  reg_sel_sp_in <= '0';
1308
                  reg_sel_sp_as <= '1';
1309 26 fpga_is_fu
               elsif ((rdy_i = '1') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
1310 24 fpga_is_fu
                      zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
1311
                      zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
1312 26 fpga_is_fu
                       zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
1313 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1314
                  reg_F(7) <= reg_7flag_i;
1315
                  reg_F(1) <= reg_1flag_i;
1316
                  reg_sel_pc_in <= '0';
1317
                  reg_sel_pc_val <= "00";
1318
                  reg_sel_sp_in <= '0';
1319
                  reg_sel_sp_as <= '1';
1320 26 fpga_is_fu
               elsif ((rdy_i = '1') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
1321 24 fpga_is_fu
                      zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
1322
                      zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
1323
                      zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
1324
                       zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
1325
                       zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
1326 26 fpga_is_fu
                       zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
1327 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1328
                  reg_F(7) <= zw_ALU(7);
1329
                  reg_F(0) <= zw_ALU(8);
1330
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1331
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1332
                  (zw_ALU(0)));
1333
                  reg_sel_pc_in <= '0';
1334
                  reg_sel_pc_val <= "00";
1335
                  reg_sel_sp_in <= '0';
1336
                  reg_sel_sp_as <= '1';
1337 26 fpga_is_fu
               elsif (rdy_i = '1') then
1338 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1339
                  reg_F(7) <= reg_7flag_i;
1340
                  reg_F(1) <= reg_1flag_i;
1341
                  reg_sel_pc_in <= '0';
1342
                  reg_sel_pc_val <= "00";
1343
                  reg_sel_sp_in <= '0';
1344
                  reg_sel_sp_as <= '1';
1345 26 fpga_is_fu
               end if;
1346
            when s1809 =>
1347
               if ((rdy_i = '1' AND
1348
                   zw_b2(0) = '0') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
1349 24 fpga_is_fu
                   zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
1350
                   zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
1351 26 fpga_is_fu
                   zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
1352 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1353
                  reg_F(7) <= reg_7flag_i;
1354
                  reg_F(1) <= reg_1flag_i;
1355
                  reg_sel_pc_in <= '0';
1356
                  reg_sel_pc_val <= "00";
1357
                  reg_sel_sp_in <= '0';
1358
                  reg_sel_sp_as <= '1';
1359 26 fpga_is_fu
               elsif ((rdy_i = '1' AND
1360
                      zw_b2(0) = '0') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
1361 24 fpga_is_fu
                      zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
1362
                      zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
1363 26 fpga_is_fu
                      zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
1364 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1365
                  reg_F(7) <= reg_7flag_i;
1366
                  reg_F(1) <= reg_1flag_i;
1367
                  reg_sel_pc_in <= '0';
1368
                  reg_sel_pc_val <= "00";
1369
                  reg_sel_sp_in <= '0';
1370
                  reg_sel_sp_as <= '1';
1371 26 fpga_is_fu
               elsif ((rdy_i = '1' AND
1372
                      zw_b2(0) = '0') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
1373 24 fpga_is_fu
                      zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
1374
                      zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
1375 26 fpga_is_fu
                       zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
1376 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1377
                  reg_F(7) <= reg_7flag_i;
1378
                  reg_F(1) <= reg_1flag_i;
1379
                  reg_sel_pc_in <= '0';
1380
                  reg_sel_pc_val <= "00";
1381
                  reg_sel_sp_in <= '0';
1382
                  reg_sel_sp_as <= '1';
1383 26 fpga_is_fu
               elsif ((rdy_i = '1' AND
1384
                      zw_b2(0) = '0') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
1385 24 fpga_is_fu
                      zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
1386
                      zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
1387
                      zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
1388
                       zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
1389
                       zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
1390 26 fpga_is_fu
                       zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
1391 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1392
                  reg_F(7) <= zw_ALU(7);
1393
                  reg_F(0) <= zw_ALU(8);
1394
                  reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR
1395
                  (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR
1396
                  (zw_ALU(0)));
1397
                  reg_sel_pc_in <= '0';
1398
                  reg_sel_pc_val <= "00";
1399
                  reg_sel_sp_in <= '0';
1400
                  reg_sel_sp_as <= '1';
1401 26 fpga_is_fu
               elsif (rdy_i = '1' AND
1402
                      zw_b2(0) = '0') then
1403 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1404
                  reg_F(7) <= reg_7flag_i;
1405
                  reg_F(1) <= reg_1flag_i;
1406
                  reg_sel_pc_in <= '0';
1407
                  reg_sel_pc_val <= "00";
1408
                  reg_sel_sp_in <= '0';
1409
                  reg_sel_sp_as <= '1';
1410 26 fpga_is_fu
               elsif (rdy_i = '1') then
1411 24 fpga_is_fu
                  sig_PC <= zw_b3 & zw_b1;
1412 26 fpga_is_fu
               end if;
1413
            when s1401 =>
1414
               if (rdy_i = '1' and
1415 24 fpga_is_fu
                   (zw_REG_OP = X"C6" OR
1416 26 fpga_is_fu
                   zw_REG_OP = X"E6")) then
1417 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1418 26 fpga_is_fu
               elsif (rdy_i = '1' and
1419 24 fpga_is_fu
                      (zw_REG_OP = X"D6" OR
1420 26 fpga_is_fu
                      zw_REG_OP = X"F6")) then
1421 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1422
                  zw_b1 <= d_alu_i;
1423 26 fpga_is_fu
               elsif (rdy_i = '1' and
1424 24 fpga_is_fu
                      (zw_REG_OP = X"CE" OR
1425 26 fpga_is_fu
                      zw_REG_OP = X"EE")) then
1426 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1427
                  zw_b1 <= d_i;
1428 26 fpga_is_fu
               elsif (rdy_i = '1' and
1429 24 fpga_is_fu
                      (zw_REG_OP = X"DE" OR
1430 26 fpga_is_fu
                      zw_REG_OP = X"FE")) then
1431 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1432
                  zw_b1 <= d_alu_i;
1433
                  zw_b2(0) <= reg_0flag_i;
1434 26 fpga_is_fu
               end if;
1435
            when s1403 =>
1436
               if (rdy_i = '1') then
1437 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1438 26 fpga_is_fu
               end if;
1439
            when s1404 =>
1440
               if (rdy_i = '1') then
1441 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1442
                  zw_b3 <= d_alu_i;
1443 26 fpga_is_fu
               end if;
1444
            when s1402 =>
1445
               if (rdy_i = '1') then
1446 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
1447 26 fpga_is_fu
               end if;
1448
            when s1405 =>
1449
               if (rdy_i = '1') then
1450 24 fpga_is_fu
                  sig_PC <= zw_b3 & zw_b1;
1451 26 fpga_is_fu
               end if;
1452
            when s1406 =>
1453
               if (rdy_i = '1') then
1454 24 fpga_is_fu
                  zw_b1 <= d_alu_i;
1455 26 fpga_is_fu
               end if;
1456
            when s1408 =>
1457 24 fpga_is_fu
               sig_PC <= adr_pc_i;
1458
               reg_F(7) <= reg_7flag_i;
1459
               reg_F(1) <= reg_1flag_i;
1460
               reg_sel_pc_in <= '0';
1461
               reg_sel_pc_val <= "00";
1462
               reg_sel_sp_in <= '0';
1463
               reg_sel_sp_as <= '1';
1464 26 fpga_is_fu
            when s0801 =>
1465
               if (rdy_i = '1' and
1466
                   zw_REG_OP = X"24") then
1467 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1468 26 fpga_is_fu
               elsif (rdy_i = '1' and
1469
                      zw_REG_OP = X"2C") then
1470 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1471
                  zw_b1 <= d_i;
1472 26 fpga_is_fu
               end if;
1473
            when s0803 =>
1474
               if (rdy_i = '1') then
1475 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1476
                  reg_F(7) <= d_i(7);
1477
                  reg_F(6) <= d_i(6);
1478
                  reg_F(1) <= reg_1flag_i;
1479
                  reg_sel_pc_in <= '0';
1480
                  reg_sel_pc_val <= "00";
1481
                  reg_sel_sp_in <= '0';
1482
                  reg_sel_sp_as <= '1';
1483 26 fpga_is_fu
               end if;
1484
            when s0802 =>
1485
               if (rdy_i = '1') then
1486 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1487 26 fpga_is_fu
               end if;
1488
            when s0601 =>
1489
               if (rdy_i = '1' and
1490 24 fpga_is_fu
                   (zw_REG_OP = X"1E" or
1491
                   zw_REG_OP = X"7E" or
1492
                   zw_REG_OP = X"3E" or
1493 26 fpga_is_fu
                   zw_REG_OP = X"5E")) then
1494 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1495
                  zw_b1 <= d_alu_i;
1496
                  zw_b2(0) <= reg_0flag_i;
1497 26 fpga_is_fu
               elsif (rdy_i = '1' and
1498 24 fpga_is_fu
                      (zw_REG_OP = X"06" or
1499
                      zw_REG_OP = X"66" or
1500
                      zw_REG_OP = X"26" or
1501 26 fpga_is_fu
                      zw_REG_OP = X"46")) then
1502 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1503 26 fpga_is_fu
               elsif (rdy_i = '1' and
1504 24 fpga_is_fu
                      (zw_REG_OP = X"16" or
1505
                      zw_REG_OP = X"76" or
1506
                      zw_REG_OP = X"36" or
1507 26 fpga_is_fu
                      zw_REG_OP = X"56")) then
1508 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1509
                  zw_b1 <= d_alu_i;
1510 26 fpga_is_fu
               elsif (rdy_i = '1' and
1511 24 fpga_is_fu
                      (zw_REG_OP = X"0E" or
1512
                      zw_REG_OP = X"6E" or
1513
                      zw_REG_OP = X"2E" or
1514 26 fpga_is_fu
                      zw_REG_OP = X"4E")) then
1515 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1516
                  zw_b1 <= d_i;
1517 26 fpga_is_fu
               end if;
1518
            when s0603 =>
1519
               if (rdy_i = '1') then
1520 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1521 26 fpga_is_fu
               end if;
1522
            when s0604 =>
1523
               if (rdy_i = '1') then
1524 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1525
                  zw_b3 <= d_alu_i;
1526 26 fpga_is_fu
               end if;
1527
            when s0602 =>
1528
               if (rdy_i = '1') then
1529 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
1530 26 fpga_is_fu
               end if;
1531
            when s0605 =>
1532
               if (rdy_i = '1') then
1533 24 fpga_is_fu
                  sig_PC <= zw_b3 & zw_b1;
1534 26 fpga_is_fu
               end if;
1535
            when s0607 =>
1536
               if (rdy_i = '1' and
1537 24 fpga_is_fu
                   (zw_REG_OP = X"06" or
1538
                   zw_REG_OP = X"16" or
1539
                   zw_REG_OP = X"0E" or
1540 26 fpga_is_fu
                   zw_REG_OP = X"1E")) then
1541 24 fpga_is_fu
                  zw_b1 <= d_i(6 downto 0) & '0';
1542
                  zw_b2(0) <= d_i(7);
1543 26 fpga_is_fu
               elsif (rdy_i = '1' and
1544 24 fpga_is_fu
                      (zw_REG_OP = X"46" or
1545
                      zw_REG_OP = X"56" or
1546
                      zw_REG_OP = X"4E" or
1547 26 fpga_is_fu
                      zw_REG_OP = X"5E")) then
1548 24 fpga_is_fu
                  zw_b1 <= '0' & d_i(7 downto 1);
1549
                  zw_b2(0) <= d_i(0);
1550 26 fpga_is_fu
               elsif (rdy_i = '1' and
1551 24 fpga_is_fu
                      (zw_REG_OP = X"26" or
1552
                      zw_REG_OP = X"36" or
1553
                      zw_REG_OP = X"2E" or
1554 26 fpga_is_fu
                      zw_REG_OP = X"3E")) then
1555 24 fpga_is_fu
                  zw_b1 <= d_i(6 downto 0) & reg_F(0);
1556
                  zw_b2(0) <= d_i(7);
1557 26 fpga_is_fu
               elsif (rdy_i = '1' and
1558 24 fpga_is_fu
                      (zw_REG_OP = X"66" or
1559
                      zw_REG_OP = X"76" or
1560
                      zw_REG_OP = X"6E" or
1561 26 fpga_is_fu
                      zw_REG_OP = X"7E")) then
1562 24 fpga_is_fu
                  zw_b1 <= reg_F(0) & d_i(7 downto 1);
1563
                  zw_b2(0) <= d_i(0);
1564 26 fpga_is_fu
               end if;
1565
            when s0608 =>
1566 24 fpga_is_fu
               sig_PC <= adr_pc_i;
1567
               reg_F(0) <= zw_b2(0);
1568
               reg_F(7) <= reg_7flag_i;
1569
               reg_F(1) <= reg_1flag_i;
1570
               reg_sel_pc_in <= '0';
1571
               reg_sel_pc_val <= "00";
1572
               reg_sel_sp_in <= '0';
1573
               reg_sel_sp_as <= '1';
1574 26 fpga_is_fu
            when s0501 =>
1575
               if (rdy_i = '1' and
1576
                   zw_REG_OP = X"65") then
1577 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1578 26 fpga_is_fu
               elsif (rdy_i = '1' and
1579 24 fpga_is_fu
                      zw_REG_OP = X"69" and
1580 26 fpga_is_fu
                      reg_F(3) = '0') then
1581 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1582
 
1583 26 fpga_is_fu
                  reg_F(7) <= zw_alu(7);
1584
                  reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (NOT d_i(7))) OR
1585
                  (NOT zw_alu(7) AND (q_a_i(7)) AND (d_i(7)));
1586
                  reg_F(1) <= NOT ((zw_alu(7)) OR zw_alu(6) OR zw_alu(5) OR
1587
                  zw_alu(4) OR zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR
1588
                  zw_alu(0));
1589
                  reg_F(0) <= zw_alu(8);
1590 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1591
                  reg_sel_pc_val <= "00";
1592
                  reg_sel_sp_in <= '0';
1593
                  reg_sel_sp_as <= '1';
1594 26 fpga_is_fu
               elsif (rdy_i = '1' and
1595
                      zw_REG_OP = X"75") then
1596 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1597
                  zw_b1 <= d_alu_i;
1598 26 fpga_is_fu
               elsif (rdy_i = '1' and
1599
                      zw_REG_OP = X"6D") then
1600 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1601
                  zw_b1 <= d_i;
1602 26 fpga_is_fu
               elsif (rdy_i = '1' and
1603
                      zw_REG_OP = X"7D") then
1604 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1605
                  zw_b1 <= d_alu_i;
1606
                  zw_b2(0) <= reg_0flag_i;
1607 26 fpga_is_fu
               elsif (rdy_i = '1' and
1608
                      zw_REG_OP = X"79") then
1609 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1610
                  zw_b1 <= d_alu_i;
1611
                  zw_b2(0) <= reg_0flag_i;
1612 26 fpga_is_fu
               elsif (rdy_i = '1' and
1613
                      zw_REG_OP = X"71") then
1614 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1615
                  zw_b1 <= d_alu_i;
1616 26 fpga_is_fu
               elsif (rdy_i = '1' and
1617
                      zw_REG_OP = X"61") then
1618 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1619
                  zw_b1 <= d_alu_i;
1620 26 fpga_is_fu
               elsif (rdy_i = '1' and
1621 24 fpga_is_fu
                      zw_REG_OP = X"69" and
1622 26 fpga_is_fu
                      reg_F(3) = '1') then
1623 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1624
 
1625 26 fpga_is_fu
                  reg_F(0) <= zw_alu(9) OR
1626
                                       (zw_alu1(4) AND zw_alu(8) AND zw_alu(5)) OR
1627
                                       (zw_alu(8) AND zw_alu(7)) OR
1628
                                       (zw_alu(8) AND zw_alu(6));
1629
 
1630
                  reg_F(1) <=  (NOT(zw_alu(4) OR
1631
                                              zw_alu(8) OR zw_alu(7) OR zw_alu(6) OR zw_alu(5) OR
1632
                                              zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0)) OR
1633
                                              (zw_alu(4) AND
1634
                                              zw_alu(8) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5) AND
1635
                                              NOT(zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0))));
1636
 
1637
                  reg_F(6) <= (zw_alu2(5) XOR q_a_i(7)) AND (NOT (q_a_i(7) XOR d_i(7)));
1638
                  reg_F(7) <= zw_alu2(5);
1639 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1640
                  reg_sel_pc_val <= "00";
1641
                  reg_sel_sp_in <= '0';
1642
                  reg_sel_sp_as <= '1';
1643 26 fpga_is_fu
               end if;
1644
            when s0503 =>
1645
               if (rdy_i = '1') then
1646 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1647 26 fpga_is_fu
               end if;
1648
            when s0505 =>
1649
               if (rdy_i = '1') then
1650 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1651
                  zw_b3 <= d_alu_i;
1652 26 fpga_is_fu
               end if;
1653
            when s0506 =>
1654
               if (rdy_i = '1') then
1655 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
1656
                  zw_b1 <= d_alu_i;
1657
                  zw_b2(0) <= reg_0flag_i;
1658 26 fpga_is_fu
               end if;
1659
            when s0502 =>
1660
               if (rdy_i = '1') then
1661 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
1662 26 fpga_is_fu
               end if;
1663
            when s0504 =>
1664
               if (rdy_i = '1') then
1665 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
1666 26 fpga_is_fu
               end if;
1667
            when s0507 =>
1668
               if (rdy_i = '1') then
1669 24 fpga_is_fu
                  sig_PC <= X"00" & d_alu_i;
1670
                  zw_b1 <= d_i;
1671 26 fpga_is_fu
               end if;
1672
            when s0509 =>
1673
               if (rdy_i = '1' AND
1674 24 fpga_is_fu
                   zw_b2(0) = '0' and
1675 26 fpga_is_fu
                   reg_F(3) = '0') then
1676 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1677
 
1678 26 fpga_is_fu
                  reg_F(7) <= zw_alu(7);
1679
                  reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (NOT d_i(7))) OR
1680
                  (NOT zw_alu(7) AND (q_a_i(7)) AND (d_i(7)));
1681
                  reg_F(1) <= NOT ((zw_alu(7)) OR zw_alu(6) OR zw_alu(5) OR
1682
                  zw_alu(4) OR zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR
1683
                  zw_alu(0));
1684
                  reg_F(0) <= zw_alu(8);
1685 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1686
                  reg_sel_pc_val <= "00";
1687
                  reg_sel_sp_in <= '0';
1688
                  reg_sel_sp_as <= '1';
1689 26 fpga_is_fu
               elsif (rdy_i = '1' AND
1690 24 fpga_is_fu
                      zw_b2(0) = '0' and
1691 26 fpga_is_fu
                      reg_F(3) = '1') then
1692 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1693
 
1694 26 fpga_is_fu
                  reg_F(0) <= zw_alu(9) OR
1695
                                       (zw_alu1(4) AND zw_alu(8) AND zw_alu(5)) OR
1696
                                       (zw_alu(8) AND zw_alu(7)) OR
1697
                                       (zw_alu(8) AND zw_alu(6));
1698
 
1699
                  reg_F(1) <=  (NOT(zw_alu(4) OR
1700
                                              zw_alu(8) OR zw_alu(7) OR zw_alu(6) OR zw_alu(5) OR
1701
                                              zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0)) OR
1702
                                              (zw_alu(4) AND
1703
                                              zw_alu(8) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5) AND
1704
                                              NOT(zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0))));
1705
 
1706
                  reg_F(6) <= (zw_alu2(5) XOR q_a_i(7)) AND (NOT (q_a_i(7) XOR d_i(7)));
1707
                  reg_F(7) <= zw_alu2(5);
1708 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1709
                  reg_sel_pc_val <= "00";
1710
                  reg_sel_sp_in <= '0';
1711
                  reg_sel_sp_as <= '1';
1712 26 fpga_is_fu
               elsif (rdy_i = '1') then
1713 24 fpga_is_fu
                  sig_PC <= zw_b3 & zw_b1;
1714 26 fpga_is_fu
               end if;
1715
            when s0510 =>
1716
               if (rdy_i = '1' and
1717
                   reg_F(3) = '0') then
1718 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1719
 
1720 26 fpga_is_fu
                  reg_F(7) <= zw_alu(7);
1721
                  reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (NOT d_i(7))) OR
1722
                  (NOT zw_alu(7) AND (q_a_i(7)) AND (d_i(7)));
1723
                  reg_F(1) <= NOT ((zw_alu(7)) OR zw_alu(6) OR zw_alu(5) OR
1724
                  zw_alu(4) OR zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR
1725
                  zw_alu(0));
1726
                  reg_F(0) <= zw_alu(8);
1727 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1728
                  reg_sel_pc_val <= "00";
1729
                  reg_sel_sp_in <= '0';
1730
                  reg_sel_sp_as <= '1';
1731 26 fpga_is_fu
               elsif (rdy_i = '1' and
1732
                      reg_F(3) = '1') then
1733 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1734
 
1735 26 fpga_is_fu
                  reg_F(0) <= zw_alu(9) OR
1736
                                       (zw_alu1(4) AND zw_alu(8) AND zw_alu(5)) OR
1737
                                       (zw_alu(8) AND zw_alu(7)) OR
1738
                                       (zw_alu(8) AND zw_alu(6));
1739
 
1740
                  reg_F(1) <=  (NOT(zw_alu(4) OR
1741
                                              zw_alu(8) OR zw_alu(7) OR zw_alu(6) OR zw_alu(5) OR
1742
                                              zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0)) OR
1743
                                              (zw_alu(4) AND
1744
                                              zw_alu(8) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5) AND
1745
                                              NOT(zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0))));
1746
 
1747
                  reg_F(6) <= (zw_alu2(5) XOR q_a_i(7)) AND (NOT (q_a_i(7) XOR d_i(7)));
1748
                  reg_F(7) <= zw_alu2(5);
1749 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1750
                  reg_sel_pc_val <= "00";
1751
                  reg_sel_sp_in <= '0';
1752
                  reg_sel_sp_as <= '1';
1753 26 fpga_is_fu
               end if;
1754
            when s0508 =>
1755
               if (rdy_i = '1') then
1756 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1757
                  zw_b3 <= d_alu_i;
1758 26 fpga_is_fu
               end if;
1759
            when s0701 =>
1760
               zw_b3 <= adr_nxt_pc_i (15 downto 8);
1761
               if (rdy_i = '1' and (
1762 24 fpga_is_fu
                   (reg_F(0) = '1' and zw_REG_OP = X"90") or
1763
                   (reg_F(0) = '0' and zw_REG_OP = X"B0") or
1764
                   (reg_F(1) = '0' and zw_REG_OP = X"F0") or
1765
                   (reg_F(7) = '0' and zw_REG_OP = X"30") or
1766
                   (reg_F(1) = '1' and zw_REG_OP = X"D0") or
1767
                   (reg_F(7) = '1' and zw_REG_OP = X"10") or
1768
                   (reg_F(6) = '1' and zw_REG_OP = X"50") or
1769 26 fpga_is_fu
                   (reg_F(6) = '0' and zw_REG_OP = X"70"))) then
1770 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1771
                  reg_sel_pc_in <= '0';
1772
                  reg_sel_pc_val <= "00";
1773
                  reg_sel_sp_in <= '0';
1774
                  reg_sel_sp_as <= '1';
1775 26 fpga_is_fu
               elsif (rdy_i = '1') then
1776 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1777
                  reg_sel_pc_in <= '0';
1778
                  reg_sel_pc_val <= "10";
1779
                  zw_b2 <= d_i;
1780 26 fpga_is_fu
               end if;
1781
            when s0702 =>
1782
               if (rdy_i = '1' and
1783
                   zw_b3 = adr_nxt_pc_i (15 downto 8)) then
1784 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1785
                  reg_sel_pc_in <= '0';
1786
                  reg_sel_pc_val <= "00";
1787
                  reg_sel_sp_in <= '0';
1788
                  reg_sel_sp_as <= '1';
1789 26 fpga_is_fu
               elsif (rdy_i = '1') then
1790 24 fpga_is_fu
                  sig_PC <= zw_b3 & adr_nxt_pc_i (7 downto 0);
1791 26 fpga_is_fu
               end if;
1792
            when s0703 =>
1793
               if (rdy_i = '1') then
1794 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1795
                  reg_sel_pc_in <= '0';
1796
                  reg_sel_pc_val <= "00";
1797
                  reg_sel_sp_in <= '0';
1798
                  reg_sel_sp_as <= '1';
1799 26 fpga_is_fu
               end if;
1800
            when s2501 =>
1801
               if (rdy_i = '1' and
1802
                   zw_REG_OP = X"E5") then
1803 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1804 26 fpga_is_fu
               elsif (rdy_i = '1' and
1805 24 fpga_is_fu
                      zw_REG_OP = X"E9" and
1806 26 fpga_is_fu
                      reg_F(3) = '0') then
1807 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1808
 
1809 26 fpga_is_fu
                  reg_F(7) <= zw_alu(7);
1810
                  reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (d_i(7))) OR
1811
                  (NOT zw_alu(7) AND (q_a_i(7)) AND (NOT d_i(7)));
1812
                  reg_F(1) <= NOT ((zw_alu(7)) OR zw_alu(6) OR zw_alu(5) OR
1813
                  zw_alu(4) OR zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR
1814
                  zw_alu(0));
1815
                  reg_F(0) <= zw_alu(8);
1816 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1817
                  reg_sel_pc_val <= "00";
1818
                  reg_sel_sp_in <= '0';
1819
                  reg_sel_sp_as <= '1';
1820 26 fpga_is_fu
               elsif (rdy_i = '1' and
1821
                      zw_REG_OP = X"F5") then
1822 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1823
                  zw_b1 <= d_alu_i;
1824 26 fpga_is_fu
               elsif (rdy_i = '1' and
1825
                      zw_REG_OP = X"ED") then
1826 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1827
                  zw_b1 <= d_i;
1828 26 fpga_is_fu
               elsif (rdy_i = '1' and
1829
                      zw_REG_OP = X"FD") then
1830 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1831
                  zw_b1 <= d_alu_i;
1832
                  zw_b2(0) <= reg_0flag_i;
1833 26 fpga_is_fu
               elsif (rdy_i = '1' and
1834
                      zw_REG_OP = X"F9") then
1835 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1836
                  zw_b1 <= d_alu_i;
1837
                  zw_b2(0) <= reg_0flag_i;
1838 26 fpga_is_fu
               elsif (rdy_i = '1' and
1839
                      zw_REG_OP = X"F1") then
1840 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1841
                  zw_b1 <= d_alu_i;
1842 26 fpga_is_fu
               elsif (rdy_i = '1' and
1843
                      zw_REG_OP = X"E1") then
1844 24 fpga_is_fu
                  sig_PC <= X"00" & d_i;
1845
                  zw_b1 <= d_alu_i;
1846 26 fpga_is_fu
               elsif (rdy_i = '1' and
1847 24 fpga_is_fu
                      zw_REG_OP = X"E9" and
1848 26 fpga_is_fu
                      reg_F(3) = '1') then
1849 24 fpga_is_fu
                  sig_PC <= adr_nxt_pc_i;
1850
 
1851 26 fpga_is_fu
                  reg_F(0) <= (zw_alu2(4));
1852
 
1853
                  reg_F(1) <=  NOT(zw_alu2(3) OR zw_alu2(2) OR zw_alu2(1) OR zw_alu2(0) OR
1854
                                              zw_alu1(3) OR zw_alu1(2) OR zw_alu1(1) OR zw_alu1(0));
1855
 
1856
                  reg_F(6) <= (zw_alu2(3) XOR q_a_i(7)) AND ((q_a_i(7) XOR d_i(7)));
1857
                  reg_F(7) <= zw_alu2(6);
1858 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1859
                  reg_sel_pc_val <= "00";
1860
                  reg_sel_sp_in <= '0';
1861
                  reg_sel_sp_as <= '1';
1862 26 fpga_is_fu
               end if;
1863
            when s2503 =>
1864
               if (rdy_i = '1') then
1865 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1866 26 fpga_is_fu
               end if;
1867
            when s2505 =>
1868
               if (rdy_i = '1') then
1869 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1870
                  zw_b3 <= d_alu_i;
1871 26 fpga_is_fu
               end if;
1872
            when s2506 =>
1873
               if (rdy_i = '1') then
1874 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
1875
                  zw_b1 <= d_alu_i;
1876
                  zw_b2(0) <= reg_0flag_i;
1877 26 fpga_is_fu
               end if;
1878
            when s2502 =>
1879
               if (rdy_i = '1') then
1880 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
1881 26 fpga_is_fu
               end if;
1882
            when s2504 =>
1883
               if (rdy_i = '1') then
1884 24 fpga_is_fu
                  sig_PC <= X"00" & zw_b1;
1885 26 fpga_is_fu
               end if;
1886
            when s2507 =>
1887
               if (rdy_i = '1') then
1888 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
1889
                  zw_b3 <= d_alu_i;
1890 26 fpga_is_fu
               end if;
1891
            when s2508 =>
1892
               if (rdy_i = '1') then
1893 24 fpga_is_fu
                  sig_PC <= X"00" & d_alu_i;
1894
                  zw_b1 <= d_i;
1895 26 fpga_is_fu
               end if;
1896
            when s2509 =>
1897
               if (rdy_i = '1' AND
1898 24 fpga_is_fu
                   zw_b2(0) = '0' and
1899 26 fpga_is_fu
                   reg_F(3) = '0') then
1900 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1901
 
1902 26 fpga_is_fu
                  reg_F(7) <= zw_alu(7);
1903
                  reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (d_i(7))) OR
1904
                  (NOT zw_alu(7) AND (q_a_i(7)) AND (NOT d_i(7)));
1905
                  reg_F(1) <= NOT ((zw_alu(7)) OR zw_alu(6) OR zw_alu(5) OR
1906
                  zw_alu(4) OR zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR
1907
                  zw_alu(0));
1908
                  reg_F(0) <= zw_alu(8);
1909 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1910
                  reg_sel_pc_val <= "00";
1911
                  reg_sel_sp_in <= '0';
1912
                  reg_sel_sp_as <= '1';
1913 26 fpga_is_fu
               elsif (rdy_i = '1' AND
1914 24 fpga_is_fu
                      zw_b2(0) = '0' and
1915 26 fpga_is_fu
                      reg_F(3) = '1') then
1916 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1917
 
1918 26 fpga_is_fu
                  reg_F(0) <= (zw_alu2(4));
1919
 
1920
                  reg_F(1) <=  NOT(zw_alu2(3) OR zw_alu2(2) OR zw_alu2(1) OR zw_alu2(0) OR
1921
                                              zw_alu1(3) OR zw_alu1(2) OR zw_alu1(1) OR zw_alu1(0));
1922
 
1923
                  reg_F(6) <= (zw_alu2(3) XOR q_a_i(7)) AND ((q_a_i(7) XOR d_i(7)));
1924
                  reg_F(7) <= zw_alu2(6);
1925 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1926
                  reg_sel_pc_val <= "00";
1927
                  reg_sel_sp_in <= '0';
1928
                  reg_sel_sp_as <= '1';
1929 26 fpga_is_fu
               elsif (rdy_i = '1') then
1930 24 fpga_is_fu
                  sig_PC <= zw_b3 & zw_b1;
1931 26 fpga_is_fu
               end if;
1932
            when s2510 =>
1933
               if (rdy_i = '1' and
1934
                   reg_F(3) = '0') then
1935 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1936
 
1937 26 fpga_is_fu
                  reg_F(7) <= zw_alu(7);
1938
                  reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (d_i(7))) OR
1939
                  (NOT zw_alu(7) AND (q_a_i(7)) AND (NOT d_i(7)));
1940
                  reg_F(1) <= NOT ((zw_alu(7)) OR zw_alu(6) OR zw_alu(5) OR
1941
                  zw_alu(4) OR zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR
1942
                  zw_alu(0));
1943
                  reg_F(0) <= zw_alu(8);
1944 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1945
                  reg_sel_pc_val <= "00";
1946
                  reg_sel_sp_in <= '0';
1947
                  reg_sel_sp_as <= '1';
1948 26 fpga_is_fu
               elsif (rdy_i = '1' and
1949
                      reg_F(3) = '1') then
1950 24 fpga_is_fu
                  sig_PC <= adr_pc_i;
1951
 
1952 26 fpga_is_fu
                  reg_F(0) <= (zw_alu2(4));
1953
 
1954
                  reg_F(1) <=  NOT(zw_alu2(3) OR zw_alu2(2) OR zw_alu2(1) OR zw_alu2(0) OR
1955
                                              zw_alu1(3) OR zw_alu1(2) OR zw_alu1(1) OR zw_alu1(0));
1956
 
1957
                  reg_F(6) <= (zw_alu2(3) XOR q_a_i(7)) AND ((q_a_i(7) XOR d_i(7)));
1958
                  reg_F(7) <= zw_alu2(6);
1959 24 fpga_is_fu
                  reg_sel_pc_in <= '0';
1960
                  reg_sel_pc_val <= "00";
1961
                  reg_sel_sp_in <= '0';
1962
                  reg_sel_sp_as <= '1';
1963 26 fpga_is_fu
               end if;
1964
            when s2701 =>
1965
               if (rdy_i = '1') then
1966 24 fpga_is_fu
                  sig_PC <= adr_sp_i;
1967 26 fpga_is_fu
               end if;
1968
            when s2702 =>
1969 24 fpga_is_fu
               sig_PC <= adr_sp_i;
1970 26 fpga_is_fu
            when s2703 =>
1971 24 fpga_is_fu
               sig_PC <= adr_sp_i;
1972 26 fpga_is_fu
            when s2704 =>
1973
               if (nmi_i = '1') then
1974
                  sig_PC <= X"FFFA";
1975
               else
1976
                  sig_PC <= X"FFFE";
1977
               end if;
1978
            when s2707 =>
1979
               reg_F(2) <= '1';
1980
               if (rdy_i = '1') then
1981
                  sig_PC <= d_i & zw_b1;
1982
                  reg_sel_pc_in <= '0';
1983
                  reg_sel_pc_val <= "00";
1984
                  reg_sel_sp_in <= '0';
1985
                  reg_sel_sp_as <= '1';
1986
               end if;
1987
            when s2706 =>
1988
               if (rdy_i = '1') then
1989
                  sig_PC <= X"FFFB";
1990
                  reg_sel_pc_in <= '1';
1991
                  reg_sel_pc_val <= "01";
1992
                  zw_b1 <= d_i;
1993
               end if;
1994
            when s2705 =>
1995
               if (rdy_i = '1') then
1996 24 fpga_is_fu
                  sig_PC <= X"FFFF";
1997
                  reg_sel_pc_in <= '1';
1998 26 fpga_is_fu
                  reg_sel_pc_val <= "01";
1999 24 fpga_is_fu
                  zw_b1 <= d_i;
2000 26 fpga_is_fu
               end if;
2001
            when s0905 =>
2002
               if (rdy_i = '1') then
2003
                  sig_PC <= X"FFFF";
2004
                  reg_sel_pc_in <= '1';
2005
                  reg_sel_pc_val <= "01";
2006
                  zw_b1 <= d_i;
2007
               end if;
2008
            when s0907 =>
2009
               reg_F(2) <= '1';
2010
               if (rdy_i = '1') then
2011 24 fpga_is_fu
                  sig_PC <= d_i & zw_b1;
2012
                  reg_sel_pc_in <= '0';
2013
                  reg_sel_pc_val <= "00";
2014
                  reg_sel_sp_in <= '0';
2015
                  reg_sel_sp_as <= '1';
2016 26 fpga_is_fu
               end if;
2017
            when s0906 =>
2018
               if (rdy_i = '1') then
2019 24 fpga_is_fu
                  sig_PC <= X"FFFB";
2020
                  reg_sel_pc_in <= '1';
2021 26 fpga_is_fu
                  reg_sel_pc_val <= "01";
2022 24 fpga_is_fu
                  zw_b1 <= d_i;
2023 26 fpga_is_fu
               end if;
2024
            when s0904 =>
2025
               if (nmi_i = '1') then
2026
                  sig_PC <= X"FFFA";
2027
               else
2028
                  sig_PC <= X"FFFE";
2029
               end if;
2030
            when RES =>
2031
               reg_sel_pc_in <= '0';
2032
               reg_sel_pc_val <= "00";
2033
            when RES7 =>
2034
               sig_PC <= adr_nxt_pc_i;
2035
               reg_sel_pc_in <= '0';
2036
               reg_sel_pc_val <= "00";
2037
               reg_sel_sp_in <= '0';
2038
               reg_sel_sp_as <= '1';
2039
            when others =>
2040
               null;
2041
         end case;
2042
      end if;
2043
   end process clocked_proc;
2044 24 fpga_is_fu
 
2045
   -----------------------------------------------------------------
2046 26 fpga_is_fu
   nextstate_proc : process (
2047 24 fpga_is_fu
      adr_nxt_pc_i,
2048
      adr_pc_i,
2049
      adr_sp_i,
2050
      current_state,
2051
      d_alu_i,
2052
      d_i,
2053
      d_regs_out_i,
2054
      irq_n_i,
2055
      nmi_i,
2056
      q_a_i,
2057
      q_x_i,
2058
      q_y_i,
2059
      rdy_i,
2060
      reg_F,
2061
      reg_sel_pc_in,
2062
      reg_sel_pc_val,
2063
      reg_sel_rb_in,
2064
      reg_sel_rb_out,
2065
      reg_sel_reg,
2066
      reg_sel_sp_as,
2067
      reg_sel_sp_in,
2068
      sig_PC,
2069
      zw_REG_OP,
2070 26 fpga_is_fu
      zw_alu,
2071
      zw_alu1,
2072
      zw_alu2,
2073
      zw_alu3,
2074 24 fpga_is_fu
      zw_b1,
2075
      zw_b2,
2076
      zw_b3,
2077
      zw_b4
2078
   )
2079
   -----------------------------------------------------------------
2080 26 fpga_is_fu
   begin
2081 24 fpga_is_fu
      -- Default Assignment
2082
      a_o <= sig_PC;
2083
      adr_o <= X"0000";
2084
      ch_a_o <= X"00";
2085
      ch_b_o <= X"00";
2086
      d_regs_in_o <= X"00";
2087 26 fpga_is_fu
      int_fetch_o <= '0';
2088
      int_reg_2flag_o <= reg_F(2);
2089 24 fpga_is_fu
      ld_o <= "00";
2090
      ld_pc_o <= '0';
2091
      ld_sp_o <= '0';
2092
      load_regs_o <= '0';
2093
      offset_o <= X"0000";
2094
      rst_nmi_o <= '0';
2095
      sel_pc_in_o <= reg_sel_pc_in;
2096
      sel_pc_val_o <= reg_sel_pc_val;
2097
      sel_rb_in_o <= reg_sel_rb_in;
2098
      sel_rb_out_o <= reg_sel_rb_out;
2099
      sel_reg_o <= reg_sel_reg;
2100
      sel_sp_as_o <= reg_sel_sp_as;
2101
      sel_sp_in_o <= reg_sel_sp_in;
2102
      -- Default Assignment To Internals
2103
      sig_D_OUT <= X"00";
2104
      sig_RD <= '1';
2105
      sig_RWn <= '1';
2106
      sig_SYNC <= '0';
2107
      sig_WR <= '0';
2108 26 fpga_is_fu
      zw_alu <= "00" & X"00";
2109
      zw_alu1 <= "00" & X"00";
2110
      zw_alu2 <= "00" & X"00";
2111
      zw_alu3 <= "00" & X"00";
2112
      zw_alu4 <= "00" & X"00";
2113
      zw_ninebits4 <= '0' & X"00";
2114 24 fpga_is_fu
 
2115
      -- Combined Actions
2116 26 fpga_is_fu
      case current_state is
2117
         when FETCH =>
2118 24 fpga_is_fu
            sig_RWn <= '1';
2119
            sig_RD <= '1';
2120
            sig_SYNC <= NOT (rdy_i);
2121 26 fpga_is_fu
            int_fetch_o <= '1';
2122
            if ((d_i = X"00") and (rdy_i = '1')) then
2123
               ld_o <= "11";
2124
               ld_pc_o <= '1';
2125
               next_state <= s0901;
2126
            elsif ((nmi_i = '1') and (rdy_i = '1')) then
2127
               next_state <= s2701;
2128
            elsif ((irq_n_i = '0' and
2129
                   reg_F(2) = '0') and (rdy_i = '1')) then
2130
               next_state <= s2701;
2131
            elsif ((d_i = X"69" or
2132 24 fpga_is_fu
                   d_i = X"65" or
2133
                   d_i = X"75" or
2134
                   d_i = X"6D" or
2135
                   d_i = X"7D" or
2136
                   d_i = X"79" or
2137
                   d_i = X"61" or
2138 26 fpga_is_fu
                   d_i = X"71") and (rdy_i = '1')) then
2139 24 fpga_is_fu
               ld_o <= "11";
2140
               ld_pc_o <= '1';
2141 26 fpga_is_fu
               next_state <= s0501;
2142
            elsif ((d_i = X"06" or
2143 24 fpga_is_fu
                   d_i = X"16" or
2144
                   d_i = X"0E" or
2145 26 fpga_is_fu
                   d_i = X"1E") and (rdy_i = '1')) then
2146 24 fpga_is_fu
               ld_o <= "11";
2147
               ld_pc_o <= '1';
2148 26 fpga_is_fu
               next_state <= s0601;
2149
            elsif ((d_i = X"90" or
2150 24 fpga_is_fu
                   d_i = X"B0" or
2151
                   d_i = X"F0" or
2152
                   d_i = X"30" or
2153
                   d_i = X"D0" or
2154
                   d_i = X"10" or
2155
                   d_i = X"50" or
2156 26 fpga_is_fu
                   d_i = X"70") and (rdy_i = '1')) then
2157 24 fpga_is_fu
               ld_o <= "11";
2158
               ld_pc_o <= '1';
2159 26 fpga_is_fu
               next_state <= s0701;
2160
            elsif ((d_i = X"24" or
2161
                   d_i = X"2C") and (rdy_i = '1')) then
2162 24 fpga_is_fu
               ld_o <= "11";
2163
               ld_pc_o <= '1';
2164 26 fpga_is_fu
               next_state <= s0801;
2165
            elsif ((d_i = X"18") and (rdy_i = '1')) then
2166 24 fpga_is_fu
               ld_o <= "11";
2167
               ld_pc_o <= '1';
2168 26 fpga_is_fu
               next_state <= s1001;
2169
            elsif ((d_i = X"D8") and (rdy_i = '1')) then
2170 24 fpga_is_fu
               ld_o <= "11";
2171
               ld_pc_o <= '1';
2172 26 fpga_is_fu
               next_state <= s1101;
2173
            elsif ((d_i = X"58") and (rdy_i = '1')) then
2174 24 fpga_is_fu
               ld_o <= "11";
2175
               ld_pc_o <= '1';
2176 26 fpga_is_fu
               next_state <= s1201;
2177
            elsif ((d_i = X"B8") and (rdy_i = '1')) then
2178 24 fpga_is_fu
               ld_o <= "11";
2179
               ld_pc_o <= '1';
2180 26 fpga_is_fu
               next_state <= s1301;
2181
            elsif ((d_i = X"E0" or
2182 24 fpga_is_fu
                   d_i = X"E4" or
2183 26 fpga_is_fu
                   d_i = X"EC") and (rdy_i = '1')) then
2184 24 fpga_is_fu
               ld_o <= "11";
2185
               ld_pc_o <= '1';
2186 26 fpga_is_fu
               next_state <= s1801;
2187
            elsif ((d_i = X"C0" or
2188 24 fpga_is_fu
                   d_i = X"C4" or
2189 26 fpga_is_fu
                   d_i = X"CC") and (rdy_i = '1')) then
2190 24 fpga_is_fu
               ld_o <= "11";
2191
               ld_pc_o <= '1';
2192 26 fpga_is_fu
               next_state <= s1801;
2193
            elsif ((d_i = X"C6" or
2194 24 fpga_is_fu
                   d_i = X"D6" or
2195
                   d_i = X"CE" or
2196 26 fpga_is_fu
                   d_i = X"DE") and (rdy_i = '1')) then
2197 24 fpga_is_fu
               ld_o <= "11";
2198
               ld_pc_o <= '1';
2199 26 fpga_is_fu
               next_state <= s1401;
2200
            elsif ((d_i = X"CA") and (rdy_i = '1')) then
2201 24 fpga_is_fu
               ld_o <= "11";
2202
               ld_pc_o <= '1';
2203 26 fpga_is_fu
               next_state <= s1501;
2204
            elsif ((d_i = X"88") and (rdy_i = '1')) then
2205 24 fpga_is_fu
               ld_o <= "11";
2206
               ld_pc_o <= '1';
2207 26 fpga_is_fu
               next_state <= s1501;
2208
            elsif ((d_i = X"49" or
2209 24 fpga_is_fu
                   d_i = X"45" or
2210
                   d_i = X"55" or
2211
                   d_i = X"4D" or
2212
                   d_i = X"5D" or
2213
                   d_i = X"59" or
2214
                   d_i = X"41" or
2215
                   d_i = X"51" or
2216
                   d_i = X"09" or
2217
                   d_i = X"05" or
2218
                   d_i = X"15" or
2219
                   d_i = X"0D" or
2220
                   d_i = X"1D" or
2221
                   d_i = X"19" or
2222
                   d_i = X"01" or
2223
                   d_i = X"11" or
2224
                   d_i = X"29" or
2225
                   d_i = X"25" or
2226
                   d_i = X"35" or
2227
                   d_i = X"2D" or
2228
                   d_i = X"3D" or
2229
                   d_i = X"39" or
2230
                   d_i = X"21" or
2231
                   d_i = X"31" or
2232
                   d_i = X"C9" or
2233
                   d_i = X"C5" or
2234
                   d_i = X"D5" or
2235
                   d_i = X"CD" or
2236
                   d_i = X"DD" or
2237
                   d_i = X"D9" or
2238
                   d_i = X"C1" or
2239 26 fpga_is_fu
                   d_i = X"D1") and (rdy_i = '1')) then
2240 24 fpga_is_fu
               ld_o <= "11";
2241
               ld_pc_o <= '1';
2242 26 fpga_is_fu
               next_state <= s1801;
2243
            elsif ((d_i = X"E6" or
2244 24 fpga_is_fu
                   d_i = X"F6" or
2245
                   d_i = X"EE" or
2246 26 fpga_is_fu
                   d_i = X"FE") and (rdy_i = '1')) then
2247 24 fpga_is_fu
               ld_o <= "11";
2248
               ld_pc_o <= '1';
2249 26 fpga_is_fu
               next_state <= s1401;
2250
            elsif ((d_i = X"E8") and (rdy_i = '1')) then
2251 24 fpga_is_fu
               ld_o <= "11";
2252
               ld_pc_o <= '1';
2253 26 fpga_is_fu
               next_state <= s1501;
2254
            elsif ((d_i = X"C8") and (rdy_i = '1')) then
2255 24 fpga_is_fu
               ld_o <= "11";
2256
               ld_pc_o <= '1';
2257 26 fpga_is_fu
               next_state <= s1501;
2258
            elsif ((d_i = X"4C" or
2259
                   d_i = X"6C") and (rdy_i = '1')) then
2260 24 fpga_is_fu
               ld_o <= "11";
2261
               ld_pc_o <= '1';
2262 26 fpga_is_fu
               next_state <= s1601;
2263
            elsif ((d_i = X"20") and (rdy_i = '1')) then
2264 24 fpga_is_fu
               ld_o <= "11";
2265
               ld_pc_o <= '1';
2266 26 fpga_is_fu
               next_state <= s1701;
2267
            elsif ((d_i = X"A9" or
2268 24 fpga_is_fu
                   d_i = X"A5" or
2269
                   d_i = X"B5" or
2270
                   d_i = X"AD" or
2271
                   d_i = X"BD" or
2272
                   d_i = X"B9" or
2273
                   d_i = X"A1" or
2274 26 fpga_is_fu
                   d_i = X"B1") and (rdy_i = '1')) then
2275 24 fpga_is_fu
               ld_o <= "11";
2276
               ld_pc_o <= '1';
2277 26 fpga_is_fu
               next_state <= s1801;
2278
            elsif ((d_i = X"A2" or
2279 24 fpga_is_fu
                   d_i = X"A6" or
2280
                   d_i = X"B6" or
2281
                   d_i = X"AE" or
2282 26 fpga_is_fu
                   d_i = X"BE") and (rdy_i = '1')) then
2283 24 fpga_is_fu
               ld_o <= "11";
2284
               ld_pc_o <= '1';
2285 26 fpga_is_fu
               next_state <= s1801;
2286
            elsif ((d_i = X"A0" or
2287 24 fpga_is_fu
                   d_i = X"A4" or
2288
                   d_i = X"B4" or
2289
                   d_i = X"AC" or
2290 26 fpga_is_fu
                   d_i = X"BC") and (rdy_i = '1')) then
2291 24 fpga_is_fu
               ld_o <= "11";
2292
               ld_pc_o <= '1';
2293 26 fpga_is_fu
               next_state <= s1801;
2294
            elsif ((d_i = X"46" or
2295 24 fpga_is_fu
                   d_i = X"56" or
2296
                   d_i = X"4E" or
2297 26 fpga_is_fu
                   d_i = X"5E") and (rdy_i = '1')) then
2298 24 fpga_is_fu
               ld_o <= "11";
2299
               ld_pc_o <= '1';
2300 26 fpga_is_fu
               next_state <= s0601;
2301
            elsif ((d_i = X"EA") and (rdy_i = '1')) then
2302 24 fpga_is_fu
               ld_o <= "11";
2303
               ld_pc_o <= '1';
2304 26 fpga_is_fu
               next_state <= s0001;
2305
            elsif ((d_i = X"48") and (rdy_i = '1')) then
2306 24 fpga_is_fu
               ld_o <= "11";
2307
               ld_pc_o <= '1';
2308 26 fpga_is_fu
               next_state <= s1901;
2309
            elsif ((d_i = X"08") and (rdy_i = '1')) then
2310 24 fpga_is_fu
               ld_o <= "11";
2311
               ld_pc_o <= '1';
2312 26 fpga_is_fu
               next_state <= s2001;
2313
            elsif ((d_i = X"68") and (rdy_i = '1')) then
2314 24 fpga_is_fu
               ld_o <= "11";
2315
               ld_pc_o <= '1';
2316 26 fpga_is_fu
               next_state <= s2101;
2317
            elsif ((d_i = X"28") and (rdy_i = '1')) then
2318 24 fpga_is_fu
               ld_o <= "11";
2319
               ld_pc_o <= '1';
2320 26 fpga_is_fu
               next_state <= s2201;
2321
            elsif ((d_i = X"26" or
2322 24 fpga_is_fu
                   d_i = X"36" or
2323
                   d_i = X"2E" or
2324 26 fpga_is_fu
                   d_i = X"3E") and (rdy_i = '1')) then
2325 24 fpga_is_fu
               ld_o <= "11";
2326
               ld_pc_o <= '1';
2327 26 fpga_is_fu
               next_state <= s0601;
2328
            elsif ((d_i = X"66" or
2329 24 fpga_is_fu
                   d_i = X"76" or
2330
                   d_i = X"6E" or
2331 26 fpga_is_fu
                   d_i = X"7E") and (rdy_i = '1')) then
2332 24 fpga_is_fu
               ld_o <= "11";
2333
               ld_pc_o <= '1';
2334 26 fpga_is_fu
               next_state <= s0601;
2335
            elsif ((d_i = X"40") and (rdy_i = '1')) then
2336 24 fpga_is_fu
               ld_o <= "11";
2337
               ld_pc_o <= '1';
2338 26 fpga_is_fu
               next_state <= s2301;
2339
            elsif ((d_i = X"60") and (rdy_i = '1')) then
2340 24 fpga_is_fu
               ld_o <= "11";
2341
               ld_pc_o <= '1';
2342 26 fpga_is_fu
               next_state <= s2401;
2343
            elsif ((d_i = X"E9" or
2344 24 fpga_is_fu
                   d_i = X"E5" or
2345
                   d_i = X"F5" or
2346
                   d_i = X"ED" or
2347
                   d_i = X"FD" or
2348
                   d_i = X"F9" or
2349
                   d_i = X"E1" or
2350 26 fpga_is_fu
                   d_i = X"F1") and (rdy_i = '1')) then
2351 24 fpga_is_fu
               ld_o <= "11";
2352
               ld_pc_o <= '1';
2353 26 fpga_is_fu
               next_state <= s2501;
2354
            elsif ((d_i = X"38") and (rdy_i = '1')) then
2355 24 fpga_is_fu
               ld_o <= "11";
2356
               ld_pc_o <= '1';
2357 26 fpga_is_fu
               next_state <= s0101;
2358
            elsif ((d_i = X"F8") and (rdy_i = '1')) then
2359 24 fpga_is_fu
               ld_o <= "11";
2360
               ld_pc_o <= '1';
2361 26 fpga_is_fu
               next_state <= s0201;
2362
            elsif ((d_i = X"78") and (rdy_i = '1')) then
2363 24 fpga_is_fu
               ld_o <= "11";
2364
               ld_pc_o <= '1';
2365 26 fpga_is_fu
               next_state <= s0301;
2366
            elsif ((d_i = X"85" or
2367 24 fpga_is_fu
                   d_i = X"95" or
2368
                   d_i = X"8D" or
2369
                   d_i = X"9D" or
2370
                   d_i = X"99" or
2371
                   d_i = X"81" or
2372 26 fpga_is_fu
                   d_i = X"91") and (rdy_i = '1')) then
2373 24 fpga_is_fu
               ld_o <= "11";
2374
               ld_pc_o <= '1';
2375 26 fpga_is_fu
               next_state <= s2601;
2376
            elsif ((d_i = X"86" or
2377 24 fpga_is_fu
                   d_i = X"96" or
2378 26 fpga_is_fu
                   d_i = X"8E") and (rdy_i = '1')) then
2379 24 fpga_is_fu
               ld_o <= "11";
2380
               ld_pc_o <= '1';
2381 26 fpga_is_fu
               next_state <= s2601;
2382
            elsif ((d_i = X"84" or
2383 24 fpga_is_fu
                   d_i = X"94" or
2384 26 fpga_is_fu
                   d_i = X"8C") and (rdy_i = '1')) then
2385 24 fpga_is_fu
               ld_o <= "11";
2386
               ld_pc_o <= '1';
2387 26 fpga_is_fu
               next_state <= s2601;
2388
            elsif ((d_i = X"AA") and (rdy_i = '1')) then
2389 24 fpga_is_fu
               ld_o <= "11";
2390
               ld_pc_o <= '1';
2391 26 fpga_is_fu
               next_state <= s0401;
2392
            elsif ((d_i = X"0A") and (rdy_i = '1')) then
2393 24 fpga_is_fu
               ld_o <= "11";
2394
               ld_pc_o <= '1';
2395 26 fpga_is_fu
               next_state <= s2801;
2396
            elsif ((d_i = X"4A") and (rdy_i = '1')) then
2397 24 fpga_is_fu
               ld_o <= "11";
2398
               ld_pc_o <= '1';
2399 26 fpga_is_fu
               next_state <= s2901;
2400
            elsif ((d_i = X"2A") and (rdy_i = '1')) then
2401 24 fpga_is_fu
               ld_o <= "11";
2402
               ld_pc_o <= '1';
2403 26 fpga_is_fu
               next_state <= s3001;
2404
            elsif ((d_i = X"6A") and (rdy_i = '1')) then
2405 24 fpga_is_fu
               ld_o <= "11";
2406
               ld_pc_o <= '1';
2407 26 fpga_is_fu
               next_state <= s3101;
2408
            elsif ((d_i = X"A8") and (rdy_i = '1')) then
2409 24 fpga_is_fu
               ld_o <= "11";
2410
               ld_pc_o <= '1';
2411 26 fpga_is_fu
               next_state <= s0401;
2412
            elsif ((d_i = X"98") and (rdy_i = '1')) then
2413 24 fpga_is_fu
               ld_o <= "11";
2414
               ld_pc_o <= '1';
2415 26 fpga_is_fu
               next_state <= s0401;
2416
            elsif ((d_i = X"BA") and (rdy_i = '1')) then
2417 24 fpga_is_fu
               ld_o <= "11";
2418
               ld_pc_o <= '1';
2419 26 fpga_is_fu
               next_state <= s0401;
2420
            elsif ((d_i = X"8A") and (rdy_i = '1')) then
2421 24 fpga_is_fu
               ld_o <= "11";
2422
               ld_pc_o <= '1';
2423 26 fpga_is_fu
               next_state <= s0401;
2424
            elsif ((d_i = X"9A") and (rdy_i = '1')) then
2425 24 fpga_is_fu
               ld_o <= "11";
2426
               ld_pc_o <= '1';
2427 26 fpga_is_fu
               next_state <= s0401;
2428
            elsif (rdy_i = '1') then
2429 24 fpga_is_fu
               ld_o <= "11";
2430
               ld_pc_o <= '1';
2431 26 fpga_is_fu
               next_state <= s0001;
2432
            else
2433
               next_state <= FETCH;
2434
            end if;
2435
         when s0001 =>
2436
            if (rdy_i = '1') then
2437 24 fpga_is_fu
               sig_SYNC <= '1';
2438 26 fpga_is_fu
               next_state <= FETCH;
2439
            else
2440
               next_state <= s0001;
2441
            end if;
2442
         when s0101 =>
2443
            if (rdy_i = '1') then
2444 24 fpga_is_fu
               sig_SYNC <= '1';
2445 26 fpga_is_fu
               next_state <= FETCH;
2446
            else
2447
               next_state <= s0101;
2448
            end if;
2449
         when s0201 =>
2450
            if (rdy_i = '1') then
2451 24 fpga_is_fu
               sig_SYNC <= '1';
2452 26 fpga_is_fu
               next_state <= FETCH;
2453
            else
2454
               next_state <= s0201;
2455
            end if;
2456
         when s0301 =>
2457
            if (rdy_i = '1') then
2458 24 fpga_is_fu
               sig_SYNC <= '1';
2459 26 fpga_is_fu
               next_state <= FETCH;
2460
            else
2461
               next_state <= s0301;
2462
            end if;
2463
         when s0401 =>
2464
            if (rdy_i = '1' and
2465
                zw_REG_OP = X"9A") then
2466 24 fpga_is_fu
               adr_o <= X"01" & d_regs_out_i;
2467
               ld_o <= "11";
2468
               ld_sp_o <= '1';
2469
               sig_SYNC <= '1';
2470 26 fpga_is_fu
               next_state <= FETCH;
2471
            elsif (rdy_i = '1' and
2472
                   zw_REG_OP = X"BA") then
2473 24 fpga_is_fu
               d_regs_in_o <= adr_sp_i (7 downto 0);
2474
               ch_a_o <= adr_sp_i (7 downto 0);
2475
               ch_b_o <= X"00";
2476
               load_regs_o <= '1';
2477
               sig_SYNC <= '1';
2478 26 fpga_is_fu
               next_state <= FETCH;
2479
            elsif (rdy_i = '1') then
2480 24 fpga_is_fu
               ch_a_o <= d_regs_out_i;
2481
               ch_b_o <= X"00";
2482
               load_regs_o <= '1';
2483
               sig_SYNC <= '1';
2484 26 fpga_is_fu
               next_state <= FETCH;
2485
            else
2486
               next_state <= s0401;
2487
            end if;
2488
         when s1001 =>
2489
            if (rdy_i = '1') then
2490 24 fpga_is_fu
               sig_SYNC <= '1';
2491 26 fpga_is_fu
               next_state <= FETCH;
2492
            else
2493
               next_state <= s1001;
2494
            end if;
2495
         when s1101 =>
2496
            if (rdy_i = '1') then
2497 24 fpga_is_fu
               sig_SYNC <= '1';
2498 26 fpga_is_fu
               next_state <= FETCH;
2499
            else
2500
               next_state <= s1101;
2501
            end if;
2502
         when s1201 =>
2503
            if (rdy_i = '1') then
2504 24 fpga_is_fu
               sig_SYNC <= '1';
2505 26 fpga_is_fu
               next_state <= FETCH;
2506
            else
2507
               next_state <= s1201;
2508
            end if;
2509
         when s1301 =>
2510
            if (rdy_i = '1') then
2511 24 fpga_is_fu
               sig_SYNC <= '1';
2512 26 fpga_is_fu
               next_state <= FETCH;
2513
            else
2514
               next_state <= s1301;
2515
            end if;
2516
         when s1501 =>
2517
            if (rdy_i = '1') then
2518 24 fpga_is_fu
               d_regs_in_o <= d_alu_i;
2519
               ch_a_o <= d_regs_out_i;
2520
               ch_b_o <= zw_b4;
2521
               load_regs_o <= '1';
2522
               sig_SYNC <= '1';
2523 26 fpga_is_fu
               next_state <= FETCH;
2524
            else
2525
               next_state <= s1501;
2526
            end if;
2527
         when s1601 =>
2528
            if (rdy_i = '1' and
2529
                zw_REG_OP = X"4C") then
2530
               ld_pc_o <= '1';
2531
               next_state <= s1604;
2532
            elsif (rdy_i = '1' and
2533
                   zw_REG_OP = X"6C") then
2534
               next_state <= s1602;
2535
            else
2536
               next_state <= s1601;
2537
            end if;
2538
         when s1602 =>
2539
            if (rdy_i = '1') then
2540 24 fpga_is_fu
               adr_o <= d_i & zw_b1;
2541
               ld_o <= "11";
2542
               ld_pc_o <= '1';
2543 26 fpga_is_fu
               next_state <= s1603;
2544
            else
2545
               next_state <= s1602;
2546
            end if;
2547
         when s1603 =>
2548
            if (rdy_i = '1') then
2549
               next_state <= s1604;
2550
            else
2551
               next_state <= s1603;
2552
            end if;
2553
         when s1604 =>
2554
            if (rdy_i = '1') then
2555 24 fpga_is_fu
               adr_o <= d_i & zw_b1;
2556
               ld_o <= "11";
2557
               ld_pc_o <= '1';
2558
               sig_SYNC <= '1';
2559 26 fpga_is_fu
               next_state <= FETCH;
2560
            else
2561
               next_state <= s1604;
2562
            end if;
2563
         when s2601 =>
2564
            if (rdy_i = '1' and
2565 24 fpga_is_fu
                (zw_REG_OP = X"85" OR
2566
                zw_REG_OP = X"86" OR
2567 26 fpga_is_fu
                zw_REG_OP = X"84")) then
2568 24 fpga_is_fu
               sig_RWn <= '0';
2569
               sig_RD <= '0';
2570
               sig_WR <= '1';
2571
               sig_D_OUT <= d_regs_out_i;
2572
               ld_o <= "11";
2573
               ld_pc_o <= '1';
2574 26 fpga_is_fu
               next_state <= s2611;
2575
            elsif (rdy_i = '1' and
2576 24 fpga_is_fu
                   (zw_REG_OP = X"95" OR
2577 26 fpga_is_fu
                   zw_REG_OP = X"94")) then
2578 24 fpga_is_fu
               ch_a_o <=  d_i;
2579
               ch_b_o <= q_x_i;
2580 26 fpga_is_fu
               next_state <= s2602;
2581
            elsif (rdy_i = '1' and
2582 24 fpga_is_fu
                   (zw_REG_OP = X"8D" OR
2583
                   zw_REG_OP = X"8E" OR
2584 26 fpga_is_fu
                   zw_REG_OP = X"8C")) then
2585 24 fpga_is_fu
               ld_o <= "11";
2586
               ld_pc_o <= '1';
2587 26 fpga_is_fu
               next_state <= s2603;
2588
            elsif (rdy_i = '1' and
2589
                   zw_REG_OP = X"9D") then
2590 24 fpga_is_fu
               ld_o <= "11";
2591
               ld_pc_o <= '1';
2592
               ch_a_o <= d_i;
2593
               ch_b_o <= q_x_i;
2594 26 fpga_is_fu
               next_state <= s2604;
2595
            elsif (rdy_i = '1' and
2596
                   zw_REG_OP = X"99") then
2597 24 fpga_is_fu
               ld_o <= "11";
2598
               ld_pc_o <= '1';
2599
               ch_a_o <= d_i;
2600
               ch_b_o <= q_y_i;
2601 26 fpga_is_fu
               next_state <= s2604;
2602
            elsif (rdy_i = '1' and
2603
                   zw_REG_OP = X"91") then
2604 24 fpga_is_fu
               ch_a_o <= d_i;
2605
               ch_b_o <= X"01";
2606 26 fpga_is_fu
               next_state <= s2605;
2607
            elsif (rdy_i = '1' and
2608
                   zw_REG_OP = X"81") then
2609 24 fpga_is_fu
               ch_a_o <=  d_i;
2610
               ch_b_o <= q_x_i;
2611 26 fpga_is_fu
               next_state <= s2606;
2612
            elsif (rdy_i = '1' and
2613
                   zw_REG_OP = X"96") then
2614 24 fpga_is_fu
               ch_a_o <=  d_i;
2615
               ch_b_o <= q_y_i;
2616 26 fpga_is_fu
               next_state <= s2602;
2617
            else
2618
               next_state <= s2601;
2619
            end if;
2620
         when s2605 =>
2621
            if (rdy_i = '1') then
2622 24 fpga_is_fu
               ch_a_o <= d_i;
2623
               ch_b_o <= q_y_i;
2624 26 fpga_is_fu
               next_state <= s2608;
2625
            else
2626
               next_state <= s2605;
2627
            end if;
2628
         when s2604 =>
2629
            if (rdy_i = '1') then
2630 24 fpga_is_fu
               ch_a_o <= d_i;
2631
               ch_b_o <= "0000000" & zw_b2(0);
2632
               ld_o <= "11";
2633
               ld_pc_o <= '1';
2634 26 fpga_is_fu
               next_state <= s2609;
2635
            else
2636
               next_state <= s2604;
2637
            end if;
2638
         when s2603 =>
2639
            if (rdy_i = '1') then
2640 24 fpga_is_fu
               sig_RWn <= '0';
2641
               sig_RD <= '0';
2642
               sig_WR <= '1';
2643
               sig_D_OUT <= d_regs_out_i;
2644
               ld_o <= "11";
2645
               ld_pc_o <= '1';
2646 26 fpga_is_fu
               next_state <= s2611;
2647
            else
2648
               next_state <= s2603;
2649
            end if;
2650
         when s2602 =>
2651
            if (rdy_i = '1') then
2652 24 fpga_is_fu
               sig_RWn <= '0';
2653
               sig_RD <= '0';
2654
               sig_WR <= '1';
2655
               sig_D_OUT <= d_regs_out_i;
2656
               ld_o <= "11";
2657
               ld_pc_o <= '1';
2658 26 fpga_is_fu
               next_state <= s2611;
2659
            else
2660
               next_state <= s2602;
2661
            end if;
2662
         when s2606 =>
2663
            if (rdy_i = '1') then
2664
               next_state <= s2607;
2665
            else
2666
               next_state <= s2606;
2667
            end if;
2668
         when s2607 =>
2669
            if (rdy_i = '1') then
2670 24 fpga_is_fu
               ch_a_o <=  zw_b1;
2671
               ch_b_o <= X"01";
2672 26 fpga_is_fu
               next_state <= s2610;
2673
            else
2674
               next_state <= s2607;
2675
            end if;
2676
         when s2608 =>
2677
            if (rdy_i = '1') then
2678 24 fpga_is_fu
               ch_a_o <= d_i;
2679
               ch_b_o <= "0000000" & zw_b2(0);
2680
               ld_o <= "11";
2681
               ld_pc_o <= '1';
2682 26 fpga_is_fu
               next_state <= s2609;
2683
            else
2684
               next_state <= s2608;
2685
            end if;
2686
         when s2609 =>
2687
            if (rdy_i = '1') then
2688
               sig_RWn <= '0';
2689
               sig_RD <= '0';
2690
               sig_WR <= '1';
2691
               sig_D_OUT <= d_regs_out_i;
2692
               next_state <= s2611;
2693
            else
2694
               next_state <= s2609;
2695
            end if;
2696
         when s2610 =>
2697
            if (rdy_i = '1') then
2698
               sig_RWn <= '0';
2699
               sig_RD <= '0';
2700
               sig_WR <= '1';
2701
               sig_D_OUT <= d_regs_out_i;
2702
               ld_o <= "11";
2703
               ld_pc_o <= '1';
2704
               next_state <= s2611;
2705
            else
2706
               next_state <= s2610;
2707
            end if;
2708
         when s2611 =>
2709 24 fpga_is_fu
            sig_SYNC <= '1';
2710 26 fpga_is_fu
            next_state <= FETCH;
2711
         when s1901 =>
2712
            if (rdy_i = '1') then
2713 24 fpga_is_fu
               sig_RWn <= '0';
2714
               sig_RD <= '0';
2715
               sig_WR <= '1';
2716
               sig_D_OUT <= q_a_i;
2717
               ld_o <= "11";
2718
               ld_sp_o <= '1';
2719 26 fpga_is_fu
               next_state <= s1902;
2720
            else
2721
               next_state <= s1901;
2722
            end if;
2723
         when s1902 =>
2724 24 fpga_is_fu
            sig_SYNC <= '1';
2725 26 fpga_is_fu
            next_state <= FETCH;
2726
         when s2001 =>
2727
            if (rdy_i = '1') then
2728 24 fpga_is_fu
               sig_RWn <= '0';
2729
               sig_RD <= '0';
2730
               sig_WR <= '1';
2731 26 fpga_is_fu
               sig_D_OUT <= reg_F OR X"30";
2732 24 fpga_is_fu
               ld_o <= "11";
2733
               ld_sp_o <= '1';
2734 26 fpga_is_fu
               next_state <= s2002;
2735
            else
2736
               next_state <= s2001;
2737
            end if;
2738
         when s2002 =>
2739 24 fpga_is_fu
            sig_SYNC <= '1';
2740 26 fpga_is_fu
            next_state <= FETCH;
2741
         when s2101 =>
2742
            if (rdy_i = '1') then
2743 24 fpga_is_fu
               ld_o <= "11";
2744
               ld_sp_o <= '1';
2745 26 fpga_is_fu
               next_state <= s2102;
2746
            else
2747
               next_state <= s2101;
2748
            end if;
2749
         when s2102 =>
2750
            if (rdy_i = '1') then
2751
               next_state <= s2103;
2752
            else
2753
               next_state <= s2102;
2754
            end if;
2755
         when s2103 =>
2756
            if (rdy_i = '1') then
2757 24 fpga_is_fu
               d_regs_in_o <= d_i;
2758
               load_regs_o <= '1';
2759
               ch_a_o <= d_i;
2760
               ch_b_o <= X"00";
2761
               sig_SYNC <= '1';
2762 26 fpga_is_fu
               next_state <= FETCH;
2763
            else
2764
               next_state <= s2103;
2765
            end if;
2766
         when s2201 =>
2767
            if (rdy_i = '1') then
2768 24 fpga_is_fu
               ld_o <= "11";
2769
               ld_sp_o <= '1';
2770 26 fpga_is_fu
               next_state <= s2202;
2771
            else
2772
               next_state <= s2201;
2773
            end if;
2774
         when s2202 =>
2775
            if (rdy_i = '1') then
2776
               next_state <= s2203;
2777
            else
2778
               next_state <= s2202;
2779
            end if;
2780
         when s2203 =>
2781
            if (rdy_i = '1') then
2782 24 fpga_is_fu
               sig_SYNC <= '1';
2783 26 fpga_is_fu
               next_state <= FETCH;
2784
            else
2785
               next_state <= s2203;
2786
            end if;
2787
         when s2301 =>
2788
            if (rdy_i = '1') then
2789 24 fpga_is_fu
               ld_o <= "11";
2790
               ld_sp_o <= '1';
2791 26 fpga_is_fu
               next_state <= s2302;
2792
            else
2793
               next_state <= s2301;
2794
            end if;
2795
         when s2302 =>
2796
            if (rdy_i = '1') then
2797 24 fpga_is_fu
               ld_o <= "11";
2798
               ld_sp_o <= '1';
2799 26 fpga_is_fu
               next_state <= s2303;
2800
            else
2801
               next_state <= s2302;
2802
            end if;
2803
         when s2303 =>
2804
            if (rdy_i = '1') then
2805 24 fpga_is_fu
               ld_o <= "11";
2806
               ld_sp_o <= '1';
2807 26 fpga_is_fu
               next_state <= s2304;
2808
            else
2809
               next_state <= s2303;
2810
            end if;
2811
         when s2304 =>
2812
            if (rdy_i = '1') then
2813
               next_state <= s2305;
2814
            else
2815
               next_state <= s2304;
2816
            end if;
2817
         when s2305 =>
2818
            if (rdy_i = '1') then
2819 24 fpga_is_fu
               adr_o <= d_i & zw_b1;
2820
               ld_o <= "11";
2821
               ld_pc_o <= '1';
2822
               sig_SYNC <= '1';
2823 26 fpga_is_fu
               next_state <= FETCH;
2824
            else
2825
               next_state <= s2305;
2826
            end if;
2827
         when s2401 =>
2828
            if (rdy_i = '1') then
2829 24 fpga_is_fu
               ld_o <= "11";
2830
               ld_sp_o <= '1';
2831 26 fpga_is_fu
               next_state <= s2402;
2832
            else
2833
               next_state <= s2401;
2834
            end if;
2835
         when s2402 =>
2836
            if (rdy_i = '1') then
2837 24 fpga_is_fu
               ld_o <= "11";
2838
               ld_sp_o <= '1';
2839 26 fpga_is_fu
               next_state <= s2403;
2840
            else
2841
               next_state <= s2402;
2842
            end if;
2843
         when s2403 =>
2844
            if (rdy_i = '1') then
2845
               next_state <= s2404;
2846
            else
2847
               next_state <= s2403;
2848
            end if;
2849
         when s2404 =>
2850
            if (rdy_i = '1') then
2851 24 fpga_is_fu
               adr_o <= d_i & zw_b1;
2852
               ld_o <= "11";
2853
               ld_pc_o <= '1';
2854 26 fpga_is_fu
               next_state <= s2405;
2855
            else
2856
               next_state <= s2404;
2857
            end if;
2858
         when s2405 =>
2859
            if (rdy_i = '1') then
2860 24 fpga_is_fu
               sig_SYNC <= '1';
2861 26 fpga_is_fu
               next_state <= FETCH;
2862
            else
2863
               next_state <= s2405;
2864
            end if;
2865
         when s1701 =>
2866
            if (rdy_i = '1') then
2867 24 fpga_is_fu
               ld_o <= "11";
2868
               ld_sp_o <= '1';
2869
               ld_pc_o <= '1';
2870 26 fpga_is_fu
               next_state <= s1702;
2871
            else
2872
               next_state <= s1701;
2873
            end if;
2874
         when s1702 =>
2875
            if (rdy_i = '1') then
2876 24 fpga_is_fu
               sig_RWn <= '0';
2877
               sig_RD <= '0';
2878
               sig_WR <= '1';
2879
               sig_D_OUT <= adr_pc_i (15 downto 8);
2880 26 fpga_is_fu
               next_state <= s1703;
2881
            else
2882
               next_state <= s1702;
2883
            end if;
2884
         when s1703 =>
2885 24 fpga_is_fu
            ld_o <= "11";
2886
            ld_sp_o <= '1';
2887
            sig_RWn <= '0';
2888
            sig_RD <= '0';
2889
            sig_WR <= '1';
2890
            sig_D_OUT <= adr_pc_i (7 downto 0);
2891 26 fpga_is_fu
            next_state <= s1704;
2892
         when s1704 =>
2893
            next_state <= s1705;
2894
         when s1705 =>
2895
            if (rdy_i = '1') then
2896 24 fpga_is_fu
               adr_o <= d_i & zw_b1;
2897
               ld_o <= "11";
2898
               ld_pc_o <= '1';
2899
               sig_SYNC <= '1';
2900 26 fpga_is_fu
               next_state <= FETCH;
2901
            else
2902
               next_state <= s1705;
2903
            end if;
2904
         when s0901 =>
2905
            if (rdy_i = '1') then
2906 24 fpga_is_fu
               ld_o <= "11";
2907
               ld_sp_o <= '1';
2908
               ld_pc_o <= '1';
2909
               sig_RWn <= '0';
2910
               sig_RD <= '0';
2911
               sig_WR <= '1';
2912 26 fpga_is_fu
               sig_D_OUT <= adr_nxt_pc_i (15 downto 8);
2913
               next_state <= s0902;
2914
            else
2915
               next_state <= s0901;
2916
            end if;
2917
         when s0902 =>
2918 24 fpga_is_fu
            ld_o <= "11";
2919
            ld_sp_o <= '1';
2920
            sig_RWn <= '0';
2921
            sig_RD <= '0';
2922
            sig_WR <= '1';
2923
            sig_D_OUT <= adr_pc_i (7 downto 0);
2924 26 fpga_is_fu
            next_state <= s0903;
2925
         when s0903 =>
2926 24 fpga_is_fu
            ld_o <= "11";
2927
            ld_sp_o <= '1';
2928
            sig_RWn <= '0';
2929
            sig_RD <= '0';
2930
            sig_WR <= '1';
2931 26 fpga_is_fu
            sig_D_OUT <= reg_F OR
2932
            ("001" & '1' & X"0");
2933
            next_state <= s0904;
2934
         when s9901 =>
2935
            ld_sp_o <= '1';
2936
            if (rdy_i = '1') then
2937 24 fpga_is_fu
               ld_o <= "11";
2938 26 fpga_is_fu
               next_state <= s9902;
2939
            else
2940
               next_state <= s9901;
2941
            end if;
2942
         when s9903 =>
2943 24 fpga_is_fu
            adr_o <= X"FFFB";
2944
            ld_pc_o <= '1';
2945 26 fpga_is_fu
            if (rdy_i = '1') then
2946
               ld_o <= "11";
2947
               next_state <= s9904;
2948
            else
2949
               next_state <= s9903;
2950
            end if;
2951
         when s9904 =>
2952 24 fpga_is_fu
            ld_pc_o <= '1';
2953 26 fpga_is_fu
            if (rdy_i = '1') then
2954
               ld_o <= "11";
2955
               next_state <= s9905;
2956
            else
2957
               next_state <= s9904;
2958
            end if;
2959
         when s9905 =>
2960
            if (rdy_i = '1') then
2961
               next_state <= s9906;
2962
            else
2963
               next_state <= s9905;
2964
            end if;
2965
         when s9906 =>
2966
            ld_pc_o <= '1';
2967
            if (rdy_i = '1') then
2968 24 fpga_is_fu
               adr_o <= d_i & zw_b1;
2969
               ld_o <= "11";
2970
               sig_SYNC <= '1';
2971 26 fpga_is_fu
               next_state <= FETCH;
2972
            else
2973
               next_state <= s9906;
2974
            end if;
2975
         when s9902 =>
2976 24 fpga_is_fu
            ld_sp_o <= '1';
2977 26 fpga_is_fu
            if (rdy_i = '1') then
2978
               ld_o <= "11";
2979
               next_state <= s9903;
2980
            else
2981
               next_state <= s9902;
2982
            end if;
2983
         when s2801 =>
2984
            if (rdy_i = '1') then
2985 24 fpga_is_fu
               ch_a_o <= q_a_i (6 downto 0) & '0';
2986
               ch_b_o <= X"00";
2987
               d_regs_in_o <= q_a_i (6 downto 0) & '0';
2988
               load_regs_o <= '1';
2989
               sig_SYNC <= '1';
2990 26 fpga_is_fu
               next_state <= FETCH;
2991
            else
2992
               next_state <= s2801;
2993
            end if;
2994
         when s2901 =>
2995
            if (rdy_i = '1') then
2996 24 fpga_is_fu
               ch_a_o <= '0' & q_a_i (7 downto 1);
2997
               ch_b_o <= X"00";
2998
               d_regs_in_o <= '0' & q_a_i (7 downto 1);
2999
               load_regs_o <= '1';
3000
               sig_SYNC <= '1';
3001 26 fpga_is_fu
               next_state <= FETCH;
3002
            else
3003
               next_state <= s2901;
3004
            end if;
3005
         when s3001 =>
3006
            if (rdy_i = '1') then
3007 24 fpga_is_fu
               ch_a_o <= q_a_i (6 downto 0) & reg_F(0);
3008
               ch_b_o <= X"00";
3009
               d_regs_in_o <= q_a_i (6 downto 0) & reg_F(0);
3010
               load_regs_o <= '1';
3011
               sig_SYNC <= '1';
3012 26 fpga_is_fu
               next_state <= FETCH;
3013
            else
3014
               next_state <= s3001;
3015
            end if;
3016
         when s3101 =>
3017
            if (rdy_i = '1') then
3018 24 fpga_is_fu
               ch_a_o <= reg_F(0) & q_a_i (7 downto 1);
3019
               ch_b_o <= X"00";
3020
               d_regs_in_o <= reg_F(0) & q_a_i (7 downto 1);
3021
               load_regs_o <= '1';
3022
               sig_SYNC <= '1';
3023 26 fpga_is_fu
               next_state <= FETCH;
3024
            else
3025
               next_state <= s3101;
3026
            end if;
3027
         when s1801 =>
3028
            if (rdy_i = '1' and
3029 24 fpga_is_fu
                (zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR
3030
                zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR
3031
                zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR
3032 26 fpga_is_fu
                zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) then
3033 24 fpga_is_fu
               ld_o <= "11";
3034
               ld_pc_o <= '1';
3035 26 fpga_is_fu
               next_state <= s1810;
3036
            elsif ((rdy_i = '1' and
3037 24 fpga_is_fu
                   (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
3038 26 fpga_is_fu
                   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
3039 24 fpga_is_fu
                   zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
3040
                   zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
3041 26 fpga_is_fu
                   zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
3042 24 fpga_is_fu
               ld_o <= "11";
3043
               ld_pc_o <= '1';
3044
               d_regs_in_o <= d_i OR q_a_i;
3045
               load_regs_o <= '1';
3046
               ch_a_o <= d_i OR q_a_i;
3047
               ch_b_o <= X"00";
3048
               sig_SYNC <= '1';
3049 26 fpga_is_fu
               next_state <= FETCH;
3050
            elsif ((rdy_i = '1' and
3051 24 fpga_is_fu
                   (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
3052 26 fpga_is_fu
                   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
3053 24 fpga_is_fu
                   zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
3054
                   zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
3055 26 fpga_is_fu
                   zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
3056 24 fpga_is_fu
               ld_o <= "11";
3057
               ld_pc_o <= '1';
3058
               d_regs_in_o <= d_i XOR q_a_i;
3059
               load_regs_o <= '1';
3060
               ch_a_o <= d_i XOR q_a_i;
3061
               ch_b_o <= X"00";
3062
               sig_SYNC <= '1';
3063 26 fpga_is_fu
               next_state <= FETCH;
3064
            elsif ((rdy_i = '1' and
3065 24 fpga_is_fu
                   (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
3066 26 fpga_is_fu
                   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
3067 24 fpga_is_fu
                   zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
3068
                   zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
3069 26 fpga_is_fu
                    zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
3070 24 fpga_is_fu
               ld_o <= "11";
3071
               ld_pc_o <= '1';
3072
               d_regs_in_o <= d_i AND q_a_i;
3073
               load_regs_o <= '1';
3074
               ch_a_o <= d_i AND q_a_i;
3075
               ch_b_o <= X"00";
3076
               sig_SYNC <= '1';
3077 26 fpga_is_fu
               next_state <= FETCH;
3078
            elsif ((rdy_i = '1' and
3079 24 fpga_is_fu
                   (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
3080 26 fpga_is_fu
                   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
3081 24 fpga_is_fu
                   zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
3082
                   zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
3083
                   zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
3084
                    zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
3085
                    zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
3086 26 fpga_is_fu
                    zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
3087 24 fpga_is_fu
               ld_o <= "11";
3088
               ld_pc_o <= '1';
3089 26 fpga_is_fu
               zw_ALU <= unsigned ("00" & d_regs_out_i) + unsigned ("00" & NOT (d_i)) + 1;
3090 24 fpga_is_fu
               sig_SYNC <= '1';
3091 26 fpga_is_fu
               next_state <= FETCH;
3092
            elsif (rdy_i = '1' and
3093 24 fpga_is_fu
                   (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
3094 26 fpga_is_fu
                   zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) then
3095 24 fpga_is_fu
               ld_o <= "11";
3096
               ld_pc_o <= '1';
3097
               d_regs_in_o <= d_i;
3098
               load_regs_o <= '1';
3099
               ch_a_o <= d_i;
3100
               ch_b_o <= X"00";
3101
               sig_SYNC <= '1';
3102 26 fpga_is_fu
               next_state <= FETCH;
3103
            elsif (rdy_i = '1' and
3104 24 fpga_is_fu
                   (zw_REG_OP = X"B5" OR
3105
                   zw_REG_OP = X"B4" OR
3106
                   zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR
3107
                   zw_REG_OP = X"35" OR
3108 26 fpga_is_fu
                   zw_REG_OP = X"D5")) then
3109 24 fpga_is_fu
               ch_a_o <=  d_i;
3110
               ch_b_o <= q_x_i;
3111 26 fpga_is_fu
               next_state <= s1802;
3112
            elsif (rdy_i = '1' and
3113 24 fpga_is_fu
                   (zw_REG_OP = X"AD" OR
3114
                   zw_REG_OP = X"AE" OR
3115
                   zw_REG_OP = X"AC" OR
3116
                   zw_REG_OP = X"4D" OR
3117
                   zw_REG_OP = X"0D" OR
3118
                   zw_REG_OP = X"2D" OR
3119
                   zw_REG_OP = X"CD" OR
3120
                   zw_REG_OP = X"EC" OR
3121 26 fpga_is_fu
                   zw_REG_OP = X"CC")) then
3122 24 fpga_is_fu
               ld_o <= "11";
3123
               ld_pc_o <= '1';
3124 26 fpga_is_fu
               next_state <= s1803;
3125
            elsif (rdy_i = '1' and
3126 24 fpga_is_fu
                   (zw_REG_OP = X"BD" OR
3127
                   zw_REG_OP = X"BC" OR
3128
                   zw_REG_OP = X"5D" OR
3129
                   zw_REG_OP = X"1D" OR
3130
                   zw_REG_OP = X"3D" OR
3131 26 fpga_is_fu
                   zw_REG_OP = X"DD")) then
3132 24 fpga_is_fu
               ld_o <= "11";
3133
               ld_pc_o <= '1';
3134
               ch_a_o <= d_i;
3135
               ch_b_o <= q_x_i;
3136 26 fpga_is_fu
               next_state <= s1805;
3137
            elsif (rdy_i = '1' and
3138 24 fpga_is_fu
                   (zw_REG_OP = X"B9" OR
3139
                   zw_REG_OP = X"BE" OR
3140
                   zw_REG_OP = X"59" OR
3141
                   zw_REG_OP = X"19" OR
3142
                   zw_REG_OP = X"39" OR
3143 26 fpga_is_fu
                   zw_REG_OP = X"D9")) then
3144 24 fpga_is_fu
               ld_o <= "11";
3145
               ld_pc_o <= '1';
3146
               ch_a_o <= d_i;
3147
               ch_b_o <= q_y_i;
3148 26 fpga_is_fu
               next_state <= s1805;
3149
            elsif (rdy_i = '1' and
3150 24 fpga_is_fu
                   (zw_REG_OP = X"B1" OR
3151
                   zw_REG_OP = X"51" OR
3152
                   zw_REG_OP = X"11" OR
3153
                   zw_REG_OP = X"31" OR
3154 26 fpga_is_fu
                   zw_REG_OP = X"D1")) then
3155 24 fpga_is_fu
               ch_a_o <= d_i;
3156
               ch_b_o <= X"01";
3157 26 fpga_is_fu
               next_state <= s1806;
3158
            elsif (rdy_i = '1' and
3159 24 fpga_is_fu
                   (zw_REG_OP = X"A1" OR
3160
                   zw_REG_OP = X"41" OR
3161
                   zw_REG_OP = X"01" OR
3162
                   zw_REG_OP = X"21" OR
3163 26 fpga_is_fu
                   zw_REG_OP = X"C1")) then
3164 24 fpga_is_fu
               ch_a_o <=  d_i;
3165
               ch_b_o <= q_x_i;
3166 26 fpga_is_fu
               next_state <= s1804;
3167
            elsif (rdy_i = '1' and
3168
                   zw_REG_OP = X"B6") then
3169 24 fpga_is_fu
               ch_a_o <=  d_i;
3170
               ch_b_o <= q_y_i;
3171 26 fpga_is_fu
               next_state <= s1802;
3172
            else
3173
               next_state <= s1801;
3174
            end if;
3175
         when s1803 =>
3176
            if (rdy_i = '1') then
3177 24 fpga_is_fu
               ld_o <= "11";
3178
               ld_pc_o <= '1';
3179 26 fpga_is_fu
               next_state <= s1810;
3180
            else
3181
               next_state <= s1803;
3182
            end if;
3183
         when s1805 =>
3184
            if (rdy_i = '1') then
3185 24 fpga_is_fu
               ch_a_o <= d_i;
3186
               ch_b_o <= "0000000" & zw_b2(0);
3187
               ld_o <= "11";
3188
               ld_pc_o <= '1';
3189 26 fpga_is_fu
               next_state <= s1809;
3190
            else
3191
               next_state <= s1805;
3192
            end if;
3193
         when s1806 =>
3194
            if (rdy_i = '1') then
3195 24 fpga_is_fu
               ch_a_o <= d_i;
3196
               ch_b_o <= q_y_i;
3197 26 fpga_is_fu
               next_state <= s1807;
3198
            else
3199
               next_state <= s1806;
3200
            end if;
3201
         when s1802 =>
3202
            if (rdy_i = '1') then
3203 24 fpga_is_fu
               ld_o <= "11";
3204
               ld_pc_o <= '1';
3205 26 fpga_is_fu
               next_state <= s1810;
3206
            else
3207
               next_state <= s1802;
3208
            end if;
3209
         when s1804 =>
3210
            if (rdy_i = '1') then
3211
               next_state <= s1808;
3212
            else
3213
               next_state <= s1804;
3214
            end if;
3215
         when s1808 =>
3216
            if (rdy_i = '1') then
3217 24 fpga_is_fu
               ch_a_o <=  zw_b1;
3218
               ch_b_o <= X"01";
3219 26 fpga_is_fu
               next_state <= s1803;
3220
            else
3221
               next_state <= s1808;
3222
            end if;
3223
         when s1807 =>
3224
            if (rdy_i = '1') then
3225 24 fpga_is_fu
               ch_a_o <= d_i;
3226
               ch_b_o <= "0000000" & zw_b2(0);
3227
               ld_o <= "11";
3228
               ld_pc_o <= '1';
3229 26 fpga_is_fu
               next_state <= s1809;
3230
            else
3231
               next_state <= s1807;
3232
            end if;
3233
         when s1810 =>
3234
            if ((rdy_i = '1') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
3235 24 fpga_is_fu
                zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
3236
                zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
3237 26 fpga_is_fu
                zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
3238 24 fpga_is_fu
               d_regs_in_o <= d_i OR q_a_i;
3239
               load_regs_o <= '1';
3240
               ch_a_o <= d_i OR q_a_i;
3241
               ch_b_o <= X"00";
3242
               sig_SYNC <= '1';
3243 26 fpga_is_fu
               next_state <= FETCH;
3244
            elsif ((rdy_i = '1') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
3245 24 fpga_is_fu
                   zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
3246
                   zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
3247 26 fpga_is_fu
                   zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
3248 24 fpga_is_fu
               d_regs_in_o <= d_i XOR q_a_i;
3249
               load_regs_o <= '1';
3250
               ch_a_o <= d_i XOR q_a_i;
3251
               ch_b_o <= X"00";
3252
               sig_SYNC <= '1';
3253 26 fpga_is_fu
               next_state <= FETCH;
3254
            elsif ((rdy_i = '1') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
3255 24 fpga_is_fu
                   zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
3256
                   zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
3257 26 fpga_is_fu
                    zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
3258 24 fpga_is_fu
               d_regs_in_o <= d_i AND q_a_i;
3259
               load_regs_o <= '1';
3260
               ch_a_o <= d_i AND q_a_i;
3261
               ch_b_o <= X"00";
3262
               sig_SYNC <= '1';
3263 26 fpga_is_fu
               next_state <= FETCH;
3264
            elsif ((rdy_i = '1') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
3265 24 fpga_is_fu
                   zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
3266
                   zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
3267
                   zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
3268
                    zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
3269
                    zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
3270 26 fpga_is_fu
                    zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
3271
               zw_ALU <= unsigned ("00" & d_regs_out_i) + unsigned ("00" & NOT (d_i)) + 1;
3272 24 fpga_is_fu
               sig_SYNC <= '1';
3273 26 fpga_is_fu
               next_state <= FETCH;
3274
            elsif (rdy_i = '1') then
3275 24 fpga_is_fu
               d_regs_in_o <= d_i;
3276
               load_regs_o <= '1';
3277
               ch_a_o <= d_i;
3278
               ch_b_o <= X"00";
3279
               sig_SYNC <= '1';
3280 26 fpga_is_fu
               next_state <= FETCH;
3281
            else
3282
               next_state <= s1810;
3283
            end if;
3284
         when s1809 =>
3285
            if ((rdy_i = '1' AND
3286
                zw_b2(0) = '0') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
3287 24 fpga_is_fu
                zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
3288
                zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
3289 26 fpga_is_fu
                zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
3290 24 fpga_is_fu
               d_regs_in_o <= d_i OR q_a_i;
3291
               load_regs_o <= '1';
3292
               ch_a_o <= d_i OR q_a_i;
3293
               ch_b_o <= X"00";
3294
               sig_SYNC <= '1';
3295 26 fpga_is_fu
               next_state <= FETCH;
3296
            elsif ((rdy_i = '1' AND
3297
                   zw_b2(0) = '0') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
3298 24 fpga_is_fu
                   zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
3299
                   zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
3300 26 fpga_is_fu
                   zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
3301 24 fpga_is_fu
               d_regs_in_o <= d_i XOR q_a_i;
3302
               load_regs_o <= '1';
3303
               ch_a_o <= d_i XOR q_a_i;
3304
               ch_b_o <= X"00";
3305
               sig_SYNC <= '1';
3306 26 fpga_is_fu
               next_state <= FETCH;
3307
            elsif ((rdy_i = '1' AND
3308
                   zw_b2(0) = '0') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
3309 24 fpga_is_fu
                   zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
3310
                   zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
3311 26 fpga_is_fu
                    zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
3312 24 fpga_is_fu
               d_regs_in_o <= d_i AND q_a_i;
3313
               load_regs_o <= '1';
3314
               ch_a_o <= d_i AND q_a_i;
3315
               ch_b_o <= X"00";
3316
               sig_SYNC <= '1';
3317 26 fpga_is_fu
               next_state <= FETCH;
3318
            elsif ((rdy_i = '1' AND
3319
                   zw_b2(0) = '0') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
3320 24 fpga_is_fu
                   zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
3321
                   zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
3322
                   zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
3323
                    zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
3324
                    zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
3325 26 fpga_is_fu
                    zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
3326
               zw_ALU <= unsigned ("00" & d_regs_out_i) + unsigned ("00" & NOT (d_i)) + 1;
3327 24 fpga_is_fu
               sig_SYNC <= '1';
3328 26 fpga_is_fu
               next_state <= FETCH;
3329
            elsif (rdy_i = '1' AND
3330
                   zw_b2(0) = '0') then
3331 24 fpga_is_fu
               d_regs_in_o <= d_i;
3332
               load_regs_o <= '1';
3333
               ch_a_o <= d_i;
3334
               ch_b_o <= X"00";
3335
               sig_SYNC <= '1';
3336 26 fpga_is_fu
               next_state <= FETCH;
3337
            elsif (rdy_i = '1') then
3338
               next_state <= s1810;
3339
            else
3340
               next_state <= s1809;
3341
            end if;
3342
         when s1401 =>
3343
            if (rdy_i = '1' and
3344 24 fpga_is_fu
                (zw_REG_OP = X"C6" OR
3345 26 fpga_is_fu
                zw_REG_OP = X"E6")) then
3346 24 fpga_is_fu
               ld_o <= "11";
3347
               ld_pc_o <= '1';
3348 26 fpga_is_fu
               next_state <= s1406;
3349
            elsif (rdy_i = '1' and
3350 24 fpga_is_fu
                   (zw_REG_OP = X"D6" OR
3351 26 fpga_is_fu
                   zw_REG_OP = X"F6")) then
3352 24 fpga_is_fu
               ch_a_o <=  d_i;
3353
               ch_b_o <= q_x_i;
3354 26 fpga_is_fu
               next_state <= s1402;
3355
            elsif (rdy_i = '1' and
3356 24 fpga_is_fu
                   (zw_REG_OP = X"CE" OR
3357 26 fpga_is_fu
                   zw_REG_OP = X"EE")) then
3358 24 fpga_is_fu
               ld_o <= "11";
3359
               ld_pc_o <= '1';
3360 26 fpga_is_fu
               next_state <= s1403;
3361
            elsif (rdy_i = '1' and
3362 24 fpga_is_fu
                   (zw_REG_OP = X"DE" OR
3363 26 fpga_is_fu
                   zw_REG_OP = X"FE")) then
3364 24 fpga_is_fu
               ld_o <= "11";
3365
               ld_pc_o <= '1';
3366
               ch_a_o <= d_i;
3367
               ch_b_o <= q_x_i;
3368 26 fpga_is_fu
               next_state <= s1404;
3369
            else
3370
               next_state <= s1401;
3371
            end if;
3372
         when s1403 =>
3373
            if (rdy_i = '1') then
3374 24 fpga_is_fu
               ld_o <= "11";
3375
               ld_pc_o <= '1';
3376 26 fpga_is_fu
               next_state <= s1406;
3377
            else
3378
               next_state <= s1403;
3379
            end if;
3380
         when s1404 =>
3381
            if (rdy_i = '1') then
3382 24 fpga_is_fu
               ch_a_o <= d_i;
3383
               ch_b_o <= "0000000" & zw_b2(0);
3384
               ld_o <= "11";
3385
               ld_pc_o <= '1';
3386 26 fpga_is_fu
               next_state <= s1405;
3387
            else
3388
               next_state <= s1404;
3389
            end if;
3390
         when s1402 =>
3391
            if (rdy_i = '1') then
3392 24 fpga_is_fu
               ld_o <= "11";
3393
               ld_pc_o <= '1';
3394 26 fpga_is_fu
               next_state <= s1406;
3395
            else
3396
               next_state <= s1402;
3397
            end if;
3398
         when s1405 =>
3399
            if (rdy_i = '1') then
3400
               next_state <= s1406;
3401
            else
3402
               next_state <= s1405;
3403
            end if;
3404
         when s1406 =>
3405
            if (rdy_i = '1') then
3406 24 fpga_is_fu
               ch_a_o <= d_i;
3407
               ch_b_o <= zw_b4;
3408 26 fpga_is_fu
               next_state <= s1407;
3409
            else
3410
               next_state <= s1406;
3411
            end if;
3412
         when s1407 =>
3413
            if (rdy_i = '1') then
3414 24 fpga_is_fu
               sig_RWn <= '0';
3415
               sig_RD <= '0';
3416
               sig_WR <= '1';
3417
               sig_D_OUT <= zw_b1;
3418 26 fpga_is_fu
               next_state <= s1408;
3419
            else
3420
               next_state <= s1407;
3421
            end if;
3422
         when s1408 =>
3423 24 fpga_is_fu
            ch_a_o <= zw_b1;
3424
            ch_b_o <= X"00";
3425
            sig_SYNC <= '1';
3426 26 fpga_is_fu
            next_state <= FETCH;
3427
         when s0801 =>
3428
            if (rdy_i = '1' and
3429
                zw_REG_OP = X"24") then
3430 24 fpga_is_fu
               ld_o <= "11";
3431
               ld_pc_o <= '1';
3432 26 fpga_is_fu
               next_state <= s0803;
3433
            elsif (rdy_i = '1' and
3434
                   zw_REG_OP = X"2C") then
3435 24 fpga_is_fu
               ld_o <= "11";
3436
               ld_pc_o <= '1';
3437 26 fpga_is_fu
               next_state <= s0802;
3438
            else
3439
               next_state <= s0801;
3440
            end if;
3441
         when s0803 =>
3442
            if (rdy_i = '1') then
3443 24 fpga_is_fu
               ch_a_o <= q_a_i AND d_i;
3444
               ch_b_o <= X"00";
3445
               sig_SYNC <= '1';
3446 26 fpga_is_fu
               next_state <= FETCH;
3447
            else
3448
               next_state <= s0803;
3449
            end if;
3450
         when s0802 =>
3451
            if (rdy_i = '1') then
3452 24 fpga_is_fu
               ld_o <= "11";
3453
               ld_pc_o <= '1';
3454 26 fpga_is_fu
               next_state <= s0803;
3455
            else
3456
               next_state <= s0802;
3457
            end if;
3458
         when s0601 =>
3459
            if (rdy_i = '1' and
3460 24 fpga_is_fu
                (zw_REG_OP = X"1E" or
3461
                zw_REG_OP = X"7E" or
3462
                zw_REG_OP = X"3E" or
3463 26 fpga_is_fu
                zw_REG_OP = X"5E")) then
3464 24 fpga_is_fu
               ld_o <= "11";
3465
               ld_pc_o <= '1';
3466
               ch_a_o <= d_i;
3467
               ch_b_o <= q_x_i;
3468 26 fpga_is_fu
               next_state <= s0604;
3469
            elsif (rdy_i = '1' and
3470 24 fpga_is_fu
                   (zw_REG_OP = X"06" or
3471
                   zw_REG_OP = X"66" or
3472
                   zw_REG_OP = X"26" or
3473 26 fpga_is_fu
                   zw_REG_OP = X"46")) then
3474 24 fpga_is_fu
               ld_o <= "11";
3475
               ld_pc_o <= '1';
3476 26 fpga_is_fu
               next_state <= s0606;
3477
            elsif (rdy_i = '1' and
3478 24 fpga_is_fu
                   (zw_REG_OP = X"16" or
3479
                   zw_REG_OP = X"76" or
3480
                   zw_REG_OP = X"36" or
3481 26 fpga_is_fu
                   zw_REG_OP = X"56")) then
3482 24 fpga_is_fu
               ch_a_o <=  d_i;
3483
               ch_b_o <= q_x_i;
3484 26 fpga_is_fu
               next_state <= s0602;
3485
            elsif (rdy_i = '1' and
3486 24 fpga_is_fu
                   (zw_REG_OP = X"0E" or
3487
                   zw_REG_OP = X"6E" or
3488
                   zw_REG_OP = X"2E" or
3489 26 fpga_is_fu
                   zw_REG_OP = X"4E")) then
3490 24 fpga_is_fu
               ld_o <= "11";
3491
               ld_pc_o <= '1';
3492 26 fpga_is_fu
               next_state <= s0603;
3493
            else
3494
               next_state <= s0601;
3495
            end if;
3496
         when s0603 =>
3497
            if (rdy_i = '1') then
3498 24 fpga_is_fu
               ld_o <= "11";
3499
               ld_pc_o <= '1';
3500 26 fpga_is_fu
               next_state <= s0606;
3501
            else
3502
               next_state <= s0603;
3503
            end if;
3504
         when s0604 =>
3505
            if (rdy_i = '1') then
3506 24 fpga_is_fu
               ch_a_o <= d_i;
3507
               ch_b_o <= "0000000" & zw_b2(0);
3508
               ld_o <= "11";
3509
               ld_pc_o <= '1';
3510 26 fpga_is_fu
               next_state <= s0605;
3511
            else
3512
               next_state <= s0604;
3513
            end if;
3514
         when s0602 =>
3515
            if (rdy_i = '1') then
3516 24 fpga_is_fu
               ld_o <= "11";
3517
               ld_pc_o <= '1';
3518 26 fpga_is_fu
               next_state <= s0606;
3519
            else
3520
               next_state <= s0602;
3521
            end if;
3522
         when s0605 =>
3523
            if (rdy_i = '1') then
3524
               next_state <= s0606;
3525
            else
3526
               next_state <= s0605;
3527
            end if;
3528
         when s0606 =>
3529
            if (rdy_i = '1') then
3530
               next_state <= s0607;
3531
            else
3532
               next_state <= s0606;
3533
            end if;
3534
         when s0607 =>
3535
            if (rdy_i = '1' and
3536 24 fpga_is_fu
                (zw_REG_OP = X"06" or
3537
                zw_REG_OP = X"16" or
3538
                zw_REG_OP = X"0E" or
3539 26 fpga_is_fu
                zw_REG_OP = X"1E")) then
3540 24 fpga_is_fu
               sig_D_OUT <= d_i(6 downto 0) & '0';
3541
               sig_RWn <= '0';
3542
               sig_RD <= '0';
3543
               sig_WR <= '1';
3544 26 fpga_is_fu
               next_state <= s0608;
3545
            elsif (rdy_i = '1' and
3546 24 fpga_is_fu
                   (zw_REG_OP = X"46" or
3547
                   zw_REG_OP = X"56" or
3548
                   zw_REG_OP = X"4E" or
3549 26 fpga_is_fu
                   zw_REG_OP = X"5E")) then
3550 24 fpga_is_fu
               sig_D_OUT <= '0' & d_i(7 downto 1);
3551
               sig_RWn <= '0';
3552
               sig_RD <= '0';
3553
               sig_WR <= '1';
3554 26 fpga_is_fu
               next_state <= s0608;
3555
            elsif (rdy_i = '1' and
3556 24 fpga_is_fu
                   (zw_REG_OP = X"26" or
3557
                   zw_REG_OP = X"36" or
3558
                   zw_REG_OP = X"2E" or
3559 26 fpga_is_fu
                   zw_REG_OP = X"3E")) then
3560 24 fpga_is_fu
               sig_D_OUT <= d_i(6 downto 0) & reg_F(0);
3561
               sig_RWn <= '0';
3562
               sig_RD <= '0';
3563
               sig_WR <= '1';
3564 26 fpga_is_fu
               next_state <= s0608;
3565
            elsif (rdy_i = '1' and
3566 24 fpga_is_fu
                   (zw_REG_OP = X"66" or
3567
                   zw_REG_OP = X"76" or
3568
                   zw_REG_OP = X"6E" or
3569 26 fpga_is_fu
                   zw_REG_OP = X"7E")) then
3570 24 fpga_is_fu
               sig_D_OUT <= reg_F(0) & d_i(7 downto 1);
3571
               sig_RWn <= '0';
3572
               sig_RD <= '0';
3573
               sig_WR <= '1';
3574 26 fpga_is_fu
               next_state <= s0608;
3575
            else
3576
               next_state <= s0607;
3577
            end if;
3578
         when s0608 =>
3579 24 fpga_is_fu
            ch_a_o <= zw_b1;
3580
            ch_b_o <= X"00";
3581
            sig_SYNC <= '1';
3582 26 fpga_is_fu
            next_state <= FETCH;
3583
         when s0501 =>
3584
            if (rdy_i = '1' and
3585
                zw_REG_OP = X"65") then
3586 24 fpga_is_fu
               ld_o <= "11";
3587
               ld_pc_o <= '1';
3588 26 fpga_is_fu
               next_state <= s0510;
3589
            elsif (rdy_i = '1' and
3590 24 fpga_is_fu
                   zw_REG_OP = X"69" and
3591 26 fpga_is_fu
                   reg_F(3) = '0') then
3592 24 fpga_is_fu
               ld_o <= "11";
3593
               ld_pc_o <= '1';
3594 26 fpga_is_fu
               d_regs_in_o <= zw_alu(7 downto 0);
3595 24 fpga_is_fu
               load_regs_o <= '1';
3596 26 fpga_is_fu
               zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0);
3597 24 fpga_is_fu
               sig_SYNC <= '1';
3598 26 fpga_is_fu
               next_state <= FETCH;
3599
            elsif (rdy_i = '1' and
3600
                   zw_REG_OP = X"75") then
3601 24 fpga_is_fu
               ch_a_o <=  d_i;
3602
               ch_b_o <= q_x_i;
3603 26 fpga_is_fu
               next_state <= s0502;
3604
            elsif (rdy_i = '1' and
3605
                   zw_REG_OP = X"6D") then
3606 24 fpga_is_fu
               ld_o <= "11";
3607
               ld_pc_o <= '1';
3608 26 fpga_is_fu
               next_state <= s0503;
3609
            elsif (rdy_i = '1' and
3610
                   zw_REG_OP = X"7D") then
3611 24 fpga_is_fu
               ld_o <= "11";
3612
               ld_pc_o <= '1';
3613
               ch_a_o <= d_i;
3614
               ch_b_o <= q_x_i;
3615 26 fpga_is_fu
               next_state <= s0505;
3616
            elsif (rdy_i = '1' and
3617
                   zw_REG_OP = X"79") then
3618 24 fpga_is_fu
               ld_o <= "11";
3619
               ld_pc_o <= '1';
3620
               ch_a_o <= d_i;
3621
               ch_b_o <= q_y_i;
3622 26 fpga_is_fu
               next_state <= s0505;
3623
            elsif (rdy_i = '1' and
3624
                   zw_REG_OP = X"71") then
3625 24 fpga_is_fu
               ch_a_o <= d_i;
3626
               ch_b_o <= X"01";
3627 26 fpga_is_fu
               next_state <= s0506;
3628
            elsif (rdy_i = '1' and
3629
                   zw_REG_OP = X"61") then
3630 24 fpga_is_fu
               ch_a_o <=  d_i;
3631
               ch_b_o <= q_x_i;
3632 26 fpga_is_fu
               next_state <= s0504;
3633
            elsif (rdy_i = '1' and
3634 24 fpga_is_fu
                   zw_REG_OP = X"69" and
3635 26 fpga_is_fu
                   reg_F(3) = '1') then
3636 24 fpga_is_fu
               ld_o <= "11";
3637
               ld_pc_o <= '1';
3638 26 fpga_is_fu
               d_regs_in_o <= zw_alu3(7 downto 0);
3639 24 fpga_is_fu
               load_regs_o <= '1';
3640
 
3641 26 fpga_is_fu
               zw_alu3(7 downto 4) <= unsigned (zw_alu2(3 downto 0)) +
3642
                                                    unsigned (zw_alu(8 downto 5));
3643 24 fpga_is_fu
 
3644 26 fpga_is_fu
               zw_alu3(3 downto 0) <= unsigned (zw_alu1(3 downto 0)) +
3645
                                                    unsigned (zw_alu(3 downto 0));
3646 24 fpga_is_fu
 
3647 26 fpga_is_fu
               zw_alu2(3 downto 0) <= '0' &
3648
                                                    (zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
3649
                                                    (zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
3650
                                                    zw_alu1(4);
3651
 
3652
               zw_alu2(5) <= (zw_alu1(4) AND zw_alu(8) AND (NOT(zw_alu(5)) OR NOT(zw_alu(6)) OR NOT(zw_alu(7)))) OR
3653
                                     (NOT(zw_alu1(4)) AND zw_alu(8)) OR
3654
                                     (zw_alu1(4) AND NOT(zw_alu(8)) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5));
3655
 
3656
               zw_alu2(6) <= zw_alu(9) OR
3657
                                     (zw_alu(8) AND zw_alu(7)) OR
3658
                                     (zw_alu(8) AND zw_alu(6));
3659
 
3660
               zw_alu2(4) <= (zw_alu(8) AND NOT(zw_alu(7)) AND NOT(zw_alu(6)) AND zw_alu(5));
3661
 
3662
               zw_alu1(3 downto 0) <= '0' & ((zw_alu1(4))) & ((zw_alu1(4))) & '0';
3663
               zw_alu1(4) <= zw_alu(4) OR
3664
                                     (zw_alu(3) AND zw_alu(2)) OR
3665
                                     (zw_alu(3) AND zw_alu(1));
3666
 
3667
               zw_alu(9 downto 5) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & d_i(7 downto 4));
3668
               zw_alu(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & d_i(3 downto 0)) +
3669
                                                  reg_F(0);
3670 24 fpga_is_fu
               sig_SYNC <= '1';
3671 26 fpga_is_fu
               next_state <= FETCH;
3672
            else
3673
               next_state <= s0501;
3674
            end if;
3675
         when s0503 =>
3676
            if (rdy_i = '1') then
3677 24 fpga_is_fu
               ld_o <= "11";
3678
               ld_pc_o <= '1';
3679 26 fpga_is_fu
               next_state <= s0510;
3680
            else
3681
               next_state <= s0503;
3682
            end if;
3683
         when s0505 =>
3684
            if (rdy_i = '1') then
3685 24 fpga_is_fu
               ch_a_o <= d_i;
3686
               ch_b_o <= X"01";
3687
               ld_o <= "11";
3688
               ld_pc_o <= '1';
3689 26 fpga_is_fu
               next_state <= s0509;
3690
            else
3691
               next_state <= s0505;
3692
            end if;
3693
         when s0506 =>
3694
            if (rdy_i = '1') then
3695 24 fpga_is_fu
               ch_a_o <= d_i;
3696
               ch_b_o <= q_y_i;
3697 26 fpga_is_fu
               next_state <= s0508;
3698
            else
3699
               next_state <= s0506;
3700
            end if;
3701
         when s0502 =>
3702
            if (rdy_i = '1') then
3703 24 fpga_is_fu
               ld_o <= "11";
3704
               ld_pc_o <= '1';
3705 26 fpga_is_fu
               next_state <= s0510;
3706
            else
3707
               next_state <= s0502;
3708
            end if;
3709
         when s0504 =>
3710
            if (rdy_i = '1') then
3711
               next_state <= s0507;
3712
            else
3713
               next_state <= s0504;
3714
            end if;
3715
         when s0507 =>
3716
            if (rdy_i = '1') then
3717 24 fpga_is_fu
               ch_a_o <=  zw_b1;
3718
               ch_b_o <= X"01";
3719 26 fpga_is_fu
               next_state <= s0503;
3720
            else
3721
               next_state <= s0507;
3722
            end if;
3723
         when s0509 =>
3724
            if (rdy_i = '1' AND
3725 24 fpga_is_fu
                zw_b2(0) = '0' and
3726 26 fpga_is_fu
                reg_F(3) = '0') then
3727
               d_regs_in_o <= zw_alu(7 downto 0);
3728 24 fpga_is_fu
               load_regs_o <= '1';
3729 26 fpga_is_fu
               zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0);
3730 24 fpga_is_fu
               sig_SYNC <= '1';
3731 26 fpga_is_fu
               next_state <= FETCH;
3732
            elsif (rdy_i = '1' AND
3733 24 fpga_is_fu
                   zw_b2(0) = '0' and
3734 26 fpga_is_fu
                   reg_F(3) = '1') then
3735
               d_regs_in_o <= zw_alu3(7 downto 0);
3736 24 fpga_is_fu
               load_regs_o <= '1';
3737
 
3738 26 fpga_is_fu
               zw_alu3(7 downto 4) <= unsigned (zw_alu2(3 downto 0)) +
3739
                                                    unsigned (zw_alu(8 downto 5));
3740 24 fpga_is_fu
 
3741 26 fpga_is_fu
               zw_alu3(3 downto 0) <= unsigned (zw_alu1(3 downto 0)) +
3742
                                                    unsigned (zw_alu(3 downto 0));
3743 24 fpga_is_fu
 
3744 26 fpga_is_fu
               zw_alu2(3 downto 0) <= '0' &
3745
                                                    (zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
3746
                                                    (zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
3747
                                                    zw_alu1(4);
3748
 
3749
               zw_alu2(5) <= (zw_alu1(4) AND zw_alu(8) AND (NOT(zw_alu(5)) OR NOT(zw_alu(6)) OR NOT(zw_alu(7)))) OR
3750
                                     (NOT(zw_alu1(4)) AND zw_alu(8)) OR
3751
                                     (zw_alu1(4) AND NOT(zw_alu(8)) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5));
3752
 
3753
               zw_alu2(6) <= zw_alu(9) OR
3754
                                     (zw_alu(8) AND zw_alu(7)) OR
3755
                                     (zw_alu(8) AND zw_alu(6));
3756
 
3757
               zw_alu2(4) <= (zw_alu(8) AND NOT(zw_alu(7)) AND NOT(zw_alu(6)) AND zw_alu(5));
3758
 
3759
               zw_alu1(3 downto 0) <= '0' & ((zw_alu1(4))) & ((zw_alu1(4))) & '0';
3760
               zw_alu1(4) <= zw_alu(4) OR
3761
                                     (zw_alu(3) AND zw_alu(2)) OR
3762
                                     (zw_alu(3) AND zw_alu(1));
3763
 
3764
               zw_alu(9 downto 5) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & d_i(7 downto 4));
3765
               zw_alu(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & d_i(3 downto 0)) +
3766
                                                  reg_F(0);
3767 24 fpga_is_fu
               sig_SYNC <= '1';
3768 26 fpga_is_fu
               next_state <= FETCH;
3769
            elsif (rdy_i = '1') then
3770
               next_state <= s0510;
3771
            else
3772
               next_state <= s0509;
3773
            end if;
3774
         when s0510 =>
3775
            if (rdy_i = '1' and
3776
                reg_F(3) = '0') then
3777
               d_regs_in_o <= zw_alu(7 downto 0);
3778 24 fpga_is_fu
               load_regs_o <= '1';
3779 26 fpga_is_fu
               zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0);
3780 24 fpga_is_fu
               sig_SYNC <= '1';
3781 26 fpga_is_fu
               next_state <= FETCH;
3782
            elsif (rdy_i = '1' and
3783
                   reg_F(3) = '1') then
3784
               d_regs_in_o <= zw_alu3(7 downto 0);
3785 24 fpga_is_fu
               load_regs_o <= '1';
3786
 
3787 26 fpga_is_fu
               zw_alu3(7 downto 4) <= unsigned (zw_alu2(3 downto 0)) +
3788
                                                    unsigned (zw_alu(8 downto 5));
3789 24 fpga_is_fu
 
3790 26 fpga_is_fu
               zw_alu3(3 downto 0) <= unsigned (zw_alu1(3 downto 0)) +
3791
                                                    unsigned (zw_alu(3 downto 0));
3792 24 fpga_is_fu
 
3793 26 fpga_is_fu
               zw_alu2(3 downto 0) <= '0' &
3794
                                                    (zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
3795
                                                    (zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
3796
                                                    zw_alu1(4);
3797
 
3798
               zw_alu2(5) <= (zw_alu1(4) AND zw_alu(8) AND (NOT(zw_alu(5)) OR NOT(zw_alu(6)) OR NOT(zw_alu(7)))) OR
3799
                                     (NOT(zw_alu1(4)) AND zw_alu(8)) OR
3800
                                     (zw_alu1(4) AND NOT(zw_alu(8)) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5));
3801
 
3802
               zw_alu2(6) <= zw_alu(9) OR
3803
                                     (zw_alu(8) AND zw_alu(7)) OR
3804
                                     (zw_alu(8) AND zw_alu(6));
3805
 
3806
               zw_alu2(4) <= (zw_alu(8) AND NOT(zw_alu(7)) AND NOT(zw_alu(6)) AND zw_alu(5));
3807
 
3808
               zw_alu1(3 downto 0) <= '0' & ((zw_alu1(4))) & ((zw_alu1(4))) & '0';
3809
               zw_alu1(4) <= zw_alu(4) OR
3810
                                     (zw_alu(3) AND zw_alu(2)) OR
3811
                                     (zw_alu(3) AND zw_alu(1));
3812
 
3813
               zw_alu(9 downto 5) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & d_i(7 downto 4));
3814
               zw_alu(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & d_i(3 downto 0)) +
3815
                                                  reg_F(0);
3816 24 fpga_is_fu
               sig_SYNC <= '1';
3817 26 fpga_is_fu
               next_state <= FETCH;
3818
            else
3819
               next_state <= s0510;
3820
            end if;
3821
         when s0508 =>
3822
            if (rdy_i = '1') then
3823 24 fpga_is_fu
               ch_a_o <= d_i;
3824
               ch_b_o <= X"01";
3825
               ld_o <= "11";
3826
               ld_pc_o <= '1';
3827 26 fpga_is_fu
               next_state <= s0509;
3828
            else
3829
               next_state <= s0508;
3830
            end if;
3831
         when s0701 =>
3832
            if (rdy_i = '1' and (
3833 24 fpga_is_fu
                (reg_F(0) = '1' and zw_REG_OP = X"90") or
3834
                (reg_F(0) = '0' and zw_REG_OP = X"B0") or
3835
                (reg_F(1) = '0' and zw_REG_OP = X"F0") or
3836
                (reg_F(7) = '0' and zw_REG_OP = X"30") or
3837
                (reg_F(1) = '1' and zw_REG_OP = X"D0") or
3838
                (reg_F(7) = '1' and zw_REG_OP = X"10") or
3839
                (reg_F(6) = '1' and zw_REG_OP = X"50") or
3840 26 fpga_is_fu
                (reg_F(6) = '0' and zw_REG_OP = X"70"))) then
3841 24 fpga_is_fu
               ld_o <= "11";
3842
               ld_pc_o <= '1';
3843
               sig_SYNC <= '1';
3844 26 fpga_is_fu
               next_state <= FETCH;
3845
            elsif (rdy_i = '1') then
3846 24 fpga_is_fu
               ld_o <= "11";
3847
               ld_pc_o <= '1';
3848 26 fpga_is_fu
               next_state <= s0702;
3849
            else
3850
               next_state <= s0701;
3851
            end if;
3852
         when s0702 =>
3853
            if (rdy_i = '1' and
3854
                zw_b3 = adr_nxt_pc_i (15 downto 8)) then
3855 24 fpga_is_fu
               offset_o <= (zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) &
3856
               zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(6 downto 0));
3857
               ld_o <= "11";
3858
               ld_pc_o <= '1';
3859
               sig_SYNC <= '1';
3860 26 fpga_is_fu
               next_state <= FETCH;
3861
            elsif (rdy_i = '1') then
3862
               offset_o <= (zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7)
3863
                & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7)
3864
                & zw_b2(6 downto 0));
3865 24 fpga_is_fu
               ld_o <= "11";
3866
               ld_pc_o <= '1';
3867 26 fpga_is_fu
               next_state <= s0703;
3868
            else
3869
               next_state <= s0702;
3870
            end if;
3871
         when s0703 =>
3872
            if (rdy_i = '1') then
3873 24 fpga_is_fu
               sig_SYNC <= '1';
3874 26 fpga_is_fu
               next_state <= FETCH;
3875
            else
3876
               next_state <= s0703;
3877
            end if;
3878
         when s2501 =>
3879
            if (rdy_i = '1' and
3880
                zw_REG_OP = X"E5") then
3881 24 fpga_is_fu
               ld_o <= "11";
3882
               ld_pc_o <= '1';
3883 26 fpga_is_fu
               next_state <= s2510;
3884
            elsif (rdy_i = '1' and
3885 24 fpga_is_fu
                   zw_REG_OP = X"E9" and
3886 26 fpga_is_fu
                   reg_F(3) = '0') then
3887 24 fpga_is_fu
               ld_o <= "11";
3888
               ld_pc_o <= '1';
3889 26 fpga_is_fu
               d_regs_in_o <= zw_alu(7 downto 0);
3890 24 fpga_is_fu
               load_regs_o <= '1';
3891 26 fpga_is_fu
               zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0);
3892 24 fpga_is_fu
               sig_SYNC <= '1';
3893 26 fpga_is_fu
               next_state <= FETCH;
3894
            elsif (rdy_i = '1' and
3895
                   zw_REG_OP = X"F5") then
3896 24 fpga_is_fu
               ch_a_o <=  d_i;
3897
               ch_b_o <= q_x_i;
3898 26 fpga_is_fu
               next_state <= s2502;
3899
            elsif (rdy_i = '1' and
3900
                   zw_REG_OP = X"ED") then
3901 24 fpga_is_fu
               ld_o <= "11";
3902
               ld_pc_o <= '1';
3903 26 fpga_is_fu
               next_state <= s2503;
3904
            elsif (rdy_i = '1' and
3905
                   zw_REG_OP = X"FD") then
3906 24 fpga_is_fu
               ld_o <= "11";
3907
               ld_pc_o <= '1';
3908
               ch_a_o <= d_i;
3909
               ch_b_o <= q_x_i;
3910 26 fpga_is_fu
               next_state <= s2505;
3911
            elsif (rdy_i = '1' and
3912
                   zw_REG_OP = X"F9") then
3913 24 fpga_is_fu
               ld_o <= "11";
3914
               ld_pc_o <= '1';
3915
               ch_a_o <= d_i;
3916
               ch_b_o <= q_y_i;
3917 26 fpga_is_fu
               next_state <= s2505;
3918
            elsif (rdy_i = '1' and
3919
                   zw_REG_OP = X"F1") then
3920 24 fpga_is_fu
               ch_a_o <= d_i;
3921
               ch_b_o <= X"01";
3922 26 fpga_is_fu
               next_state <= s2506;
3923
            elsif (rdy_i = '1' and
3924
                   zw_REG_OP = X"E1") then
3925 24 fpga_is_fu
               ch_a_o <=  d_i;
3926
               ch_b_o <= q_x_i;
3927 26 fpga_is_fu
               next_state <= s2504;
3928
            elsif (rdy_i = '1' and
3929 24 fpga_is_fu
                   zw_REG_OP = X"E9" and
3930 26 fpga_is_fu
                   reg_F(3) = '1') then
3931 24 fpga_is_fu
               ld_o <= "11";
3932
               ld_pc_o <= '1';
3933 26 fpga_is_fu
               d_regs_in_o <= zw_alu(7 downto 0);
3934 24 fpga_is_fu
               load_regs_o <= '1';
3935
 
3936 26 fpga_is_fu
               zw_ALU(7 downto 4) <= unsigned ((zw_alu2(3 downto 0))) -
3937
                                                    unsigned (zw_alu3(7 downto 4));
3938
               zw_ALU(3 downto 0) <= unsigned ((zw_alu1(3 downto 0))) -
3939
                                                    unsigned (zw_alu3(3 downto 0));
3940 24 fpga_is_fu
 
3941 26 fpga_is_fu
               zw_ALU3(7 downto 0) <=  '0' &
3942
                                                            (NOT zw_alu2(4)) &
3943
                                                            (NOT zw_alu2(4)) &
3944
                                                           '0' &
3945
                                                           '0' &
3946
                                                            (NOT zw_alu1(4)) &
3947
                                                            (NOT zw_alu1(4)) &
3948
                                                           '0';
3949 24 fpga_is_fu
 
3950 26 fpga_is_fu
 
3951
               zw_alu2(5) <= (zw_alu1(4) AND zw_alu2(3) AND (NOT(zw_alu2(0)) OR NOT(zw_alu2(1)) OR NOT(zw_alu2(2)))) OR
3952
                                     (NOT(zw_alu1(4)) AND zw_alu2(3)) OR
3953
                                     (zw_alu1(4) AND NOT(zw_alu2(3)) AND zw_alu2(2) AND zw_alu2(1) AND zw_alu2(0));
3954
 
3955
               zw_alu2(6) <= (zw_alu2(3));
3956
 
3957
               zw_alu2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & NOT(d_i(7 downto 4))) +
3958
                                                   zw_alu1(4);
3959
               zw_alu1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & NOT(d_i(3 downto 0))) +
3960
                                                  reg_F(0);
3961 24 fpga_is_fu
               sig_SYNC <= '1';
3962 26 fpga_is_fu
               next_state <= FETCH;
3963
            else
3964
               next_state <= s2501;
3965
            end if;
3966
         when s2503 =>
3967
            if (rdy_i = '1') then
3968 24 fpga_is_fu
               ld_o <= "11";
3969
               ld_pc_o <= '1';
3970 26 fpga_is_fu
               next_state <= s2510;
3971
            else
3972
               next_state <= s2503;
3973
            end if;
3974
         when s2505 =>
3975
            if (rdy_i = '1') then
3976 24 fpga_is_fu
               ch_a_o <= d_i;
3977
               ch_b_o <= X"01";
3978
               ld_o <= "11";
3979
               ld_pc_o <= '1';
3980 26 fpga_is_fu
               next_state <= s2509;
3981
            else
3982
               next_state <= s2505;
3983
            end if;
3984
         when s2506 =>
3985
            if (rdy_i = '1') then
3986 24 fpga_is_fu
               ch_a_o <= d_i;
3987
               ch_b_o <= q_y_i;
3988 26 fpga_is_fu
               next_state <= s2507;
3989
            else
3990
               next_state <= s2506;
3991
            end if;
3992
         when s2502 =>
3993
            if (rdy_i = '1') then
3994 24 fpga_is_fu
               ld_o <= "11";
3995
               ld_pc_o <= '1';
3996 26 fpga_is_fu
               next_state <= s2510;
3997
            else
3998
               next_state <= s2502;
3999
            end if;
4000
         when s2504 =>
4001
            if (rdy_i = '1') then
4002
               next_state <= s2508;
4003
            else
4004
               next_state <= s2504;
4005
            end if;
4006
         when s2507 =>
4007
            if (rdy_i = '1') then
4008 24 fpga_is_fu
               ch_a_o <= d_i;
4009
               ch_b_o <= X"01";
4010
               ld_o <= "11";
4011
               ld_pc_o <= '1';
4012 26 fpga_is_fu
               next_state <= s2509;
4013
            else
4014
               next_state <= s2507;
4015
            end if;
4016
         when s2508 =>
4017
            if (rdy_i = '1') then
4018 24 fpga_is_fu
               ch_a_o <=  zw_b1;
4019
               ch_b_o <= X"01";
4020 26 fpga_is_fu
               next_state <= s2503;
4021
            else
4022
               next_state <= s2508;
4023
            end if;
4024
         when s2509 =>
4025
            if (rdy_i = '1' AND
4026 24 fpga_is_fu
                zw_b2(0) = '0' and
4027 26 fpga_is_fu
                reg_F(3) = '0') then
4028
               d_regs_in_o <= zw_alu(7 downto 0);
4029 24 fpga_is_fu
               load_regs_o <= '1';
4030 26 fpga_is_fu
               zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0);
4031 24 fpga_is_fu
               sig_SYNC <= '1';
4032 26 fpga_is_fu
               next_state <= FETCH;
4033
            elsif (rdy_i = '1' AND
4034 24 fpga_is_fu
                   zw_b2(0) = '0' and
4035 26 fpga_is_fu
                   reg_F(3) = '1') then
4036
               d_regs_in_o <= zw_alu(7 downto 0);
4037 24 fpga_is_fu
               load_regs_o <= '1';
4038
 
4039 26 fpga_is_fu
               zw_ALU(7 downto 4) <= unsigned ((zw_alu2(3 downto 0))) -
4040
                                                    unsigned (zw_alu3(7 downto 4));
4041
               zw_ALU(3 downto 0) <= unsigned ((zw_alu1(3 downto 0))) -
4042
                                                    unsigned (zw_alu3(3 downto 0));
4043 24 fpga_is_fu
 
4044 26 fpga_is_fu
               zw_ALU3(7 downto 0) <=  '0' &
4045
                                                            (NOT zw_alu2(4)) &
4046
                                                            (NOT zw_alu2(4)) &
4047
                                                           '0' &
4048
                                                           '0' &
4049
                                                            (NOT zw_alu1(4)) &
4050
                                                            (NOT zw_alu1(4)) &
4051
                                                           '0';
4052 24 fpga_is_fu
 
4053 26 fpga_is_fu
 
4054
               zw_alu2(5) <= (zw_alu1(4) AND zw_alu2(3) AND (NOT(zw_alu2(0)) OR NOT(zw_alu2(1)) OR NOT(zw_alu2(2)))) OR
4055
                                     (NOT(zw_alu1(4)) AND zw_alu2(3)) OR
4056
                                     (zw_alu1(4) AND NOT(zw_alu2(3)) AND zw_alu2(2) AND zw_alu2(1) AND zw_alu2(0));
4057
 
4058
               zw_alu2(6) <= (zw_alu2(3));
4059
 
4060
               zw_alu2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & NOT(d_i(7 downto 4))) +
4061
                                                   zw_alu1(4);
4062
               zw_alu1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & NOT(d_i(3 downto 0))) +
4063
                                                  reg_F(0);
4064 24 fpga_is_fu
               sig_SYNC <= '1';
4065 26 fpga_is_fu
               next_state <= FETCH;
4066
            elsif (rdy_i = '1') then
4067
               next_state <= s2510;
4068
            else
4069
               next_state <= s2509;
4070
            end if;
4071
         when s2510 =>
4072
            if (rdy_i = '1' and
4073
                reg_F(3) = '0') then
4074
               d_regs_in_o <= zw_alu(7 downto 0);
4075 24 fpga_is_fu
               load_regs_o <= '1';
4076 26 fpga_is_fu
               zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0);
4077 24 fpga_is_fu
               sig_SYNC <= '1';
4078 26 fpga_is_fu
               next_state <= FETCH;
4079
            elsif (rdy_i = '1' and
4080
                   reg_F(3) = '1') then
4081
               d_regs_in_o <= zw_alu(7 downto 0);
4082 24 fpga_is_fu
               load_regs_o <= '1';
4083
 
4084 26 fpga_is_fu
               zw_ALU(7 downto 4) <= unsigned ((zw_alu2(3 downto 0))) -
4085
                                                    unsigned (zw_alu3(7 downto 4));
4086
               zw_ALU(3 downto 0) <= unsigned ((zw_alu1(3 downto 0))) -
4087
                                                    unsigned (zw_alu3(3 downto 0));
4088 24 fpga_is_fu
 
4089 26 fpga_is_fu
               zw_ALU3(7 downto 0) <=  '0' &
4090
                                                            (NOT zw_alu2(4)) &
4091
                                                            (NOT zw_alu2(4)) &
4092
                                                           '0' &
4093
                                                           '0' &
4094
                                                            (NOT zw_alu1(4)) &
4095
                                                            (NOT zw_alu1(4)) &
4096
                                                           '0';
4097 24 fpga_is_fu
 
4098 26 fpga_is_fu
 
4099
               zw_alu2(5) <= (zw_alu1(4) AND zw_alu2(3) AND (NOT(zw_alu2(0)) OR NOT(zw_alu2(1)) OR NOT(zw_alu2(2)))) OR
4100
                                     (NOT(zw_alu1(4)) AND zw_alu2(3)) OR
4101
                                     (zw_alu1(4) AND NOT(zw_alu2(3)) AND zw_alu2(2) AND zw_alu2(1) AND zw_alu2(0));
4102
 
4103
               zw_alu2(6) <= (zw_alu2(3));
4104
 
4105
               zw_alu2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & NOT(d_i(7 downto 4))) +
4106
                                                   zw_alu1(4);
4107
               zw_alu1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & NOT(d_i(3 downto 0))) +
4108
                                                  reg_F(0);
4109 24 fpga_is_fu
               sig_SYNC <= '1';
4110 26 fpga_is_fu
               next_state <= FETCH;
4111
            else
4112
               next_state <= s2510;
4113
            end if;
4114
         when s2701 =>
4115
            if (rdy_i = '1') then
4116 24 fpga_is_fu
               ld_o <= "11";
4117
               ld_sp_o <= '1';
4118
               sig_RWn <= '0';
4119
               sig_RD <= '0';
4120
               sig_WR <= '1';
4121
               sig_D_OUT <= adr_pc_i (15 downto 8);
4122 26 fpga_is_fu
               next_state <= s2702;
4123
            else
4124
               next_state <= s2701;
4125
            end if;
4126
         when s2702 =>
4127 24 fpga_is_fu
            ld_o <= "11";
4128
            ld_sp_o <= '1';
4129
            sig_RWn <= '0';
4130
            sig_RD <= '0';
4131
            sig_WR <= '1';
4132
            sig_D_OUT <= adr_pc_i (7 downto 0);
4133 26 fpga_is_fu
            next_state <= s2703;
4134
         when s2703 =>
4135 24 fpga_is_fu
            ld_o <= "11";
4136
            ld_sp_o <= '1';
4137
            sig_RWn <= '0';
4138
            sig_RD <= '0';
4139
            sig_WR <= '1';
4140 26 fpga_is_fu
            sig_D_OUT <= (reg_F AND X"EF");
4141
            next_state <= s2704;
4142
         when s2704 =>
4143
            if (nmi_i = '1') then
4144
               next_state <= s2706;
4145
            else
4146
               next_state <= s2705;
4147
            end if;
4148
         when s2707 =>
4149
            if (rdy_i = '1') then
4150
               adr_o <= d_i & zw_b1;
4151 24 fpga_is_fu
               rst_nmi_o <= '1';
4152 26 fpga_is_fu
               ld_o <= "11";
4153
               ld_pc_o <= '1';
4154
               sig_SYNC <= '1';
4155
               next_state <= FETCH;
4156
            else
4157
               next_state <= s2707;
4158
            end if;
4159
         when s2706 =>
4160
            if (rdy_i = '1') then
4161
               next_state <= s2707;
4162
            else
4163
               next_state <= s2706;
4164
            end if;
4165
         when s2705 =>
4166
            if (rdy_i = '1') then
4167
               next_state <= s2707;
4168
            else
4169
               next_state <= s2705;
4170
            end if;
4171
         when s0905 =>
4172
            if (rdy_i = '1') then
4173
               next_state <= s0907;
4174
            else
4175
               next_state <= s0905;
4176
            end if;
4177
         when s0907 =>
4178
            if (rdy_i = '1') then
4179 24 fpga_is_fu
               adr_o <= d_i & zw_b1;
4180
               ld_o <= "11";
4181
               ld_pc_o <= '1';
4182
               sig_SYNC <= '1';
4183 26 fpga_is_fu
               next_state <= FETCH;
4184
            else
4185
               next_state <= s0907;
4186
            end if;
4187
         when s0906 =>
4188
            if (rdy_i = '1') then
4189
               next_state <= s0907;
4190
            else
4191
               next_state <= s0906;
4192
            end if;
4193
         when s0904 =>
4194
            if (nmi_i = '1') then
4195
               rst_nmi_o <= '1';
4196
               next_state <= s0906;
4197
            else
4198
               next_state <= s0905;
4199
            end if;
4200
         when RES =>
4201
            sig_RWn <= '1';
4202
            sig_RD <= '1';
4203
            sig_SYNC <= '1';
4204
            next_state <= RES7;
4205
         when RES7 =>
4206
            ld_o <= "11";
4207
            ld_pc_o <= '1';
4208
            ld_sp_o <= '1';
4209
            sig_RWn <= '1';
4210
            sig_RD <= '1';
4211
            next_state <= s9901;
4212
         when others =>
4213
            next_state <= RES;
4214
      end case;
4215
   end process nextstate_proc;
4216 24 fpga_is_fu
 
4217
   -- Concurrent Statements
4218
   -- Clocked output assignments
4219
   d_o <= d_o_cld;
4220
   rd_o <= rd_o_cld;
4221
   sync_o <= sync_o_cld;
4222
   wr_n_o <= wr_n_o_cld;
4223
   wr_o <= wr_o_cld;
4224 26 fpga_is_fu
end fsm;

powered by: WebSVN 2.1.0

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