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

Subversion Repositories lattice6502

[/] [lattice6502/] [ispLeaver/] [65C02.vhd] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 stanley82
------------------------------------------------------------------
2
--      6502 principal module.
3
--
4
--      Copyright Ian Chapman October 28 2010
5
--
6
--      This file is part of the Lattice 6502 project
7
--      It is used to compile with Linux ghdl and ispLeaver.
8 6 stanley82
--      email author@kool.kor
9
--      author  EQU     ichapman
10
--      kool    EQU     videotron
11
--      kor     EQU     ca
12 2 stanley82
--
13
--      To do
14
--              Detailed test of all instructions.
15
--
16
--      *************************************************************
17
--      Distributed under the GNU Lesser General Public License.    *
18 6 stanley82
--      This can be obtained from www.gnu.org.                      *
19 2 stanley82
--      *************************************************************
20
--      This program is free software: you can redistribute it and/or modify
21
--      it under the terms of the GNU General Public License as published by
22
--      the Free Software Foundation, either version 3 of the License, or
23
--      (at your option) any later version.
24
--
25
--      This program is distributed in the hope that it will be useful,
26
--      but WITHOUT ANY WARRANTY; without even the implied warranty of
27
--      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
28
--      GNU General Public License for more details.
29
--
30
--      You should have received a copy of the GNU General Public License
31
--      along with this program.  If not, see <http://www.gnu.org/licenses/>
32
--
33
--      65C02.vhd
34
 
35
 
36
---  Purpose to test and exercise my VHLD skills
37
---- I've decided not to support 65C02 instructions
38
---- nor BCD arithmetic.
39
---- I will make it run as fast as I can.  Timing not per a real 6502
40
---- Lattice EBI has clocked address inputs, so as not to add a cycle
41
---- 6502 address outputs are not latched.  The data output of the EBI ROM and
42
---- RAM is not clocked.
43
---- To maintain speed the 6502 address to ROM/RAM is not clocked and the data
44
---- returned is not clocked by ROM/RAM.  Structures of form address <= address + "1";
45
---- cause a race condition.  I had to store the address from the  mux for
46
---- INC type instructions ie read then write.
47
----
48
---- One boob I've just noticed jsr and pha in the 6502 work opposite to 
49
---- what I expected ie jsr decrements the stack and I inc it.  I guess
50
---- that was the way my first computer the SDS sigma 2 did it.  I'll keep
51
---- like that for now in case a bigger stack is needed.  Oh no a sigma 2
52
---- did not have a stack only L link register.
53
----
54
--      I used this to set the hold timing default "-exp parHoldLimit=999"
55
--      Also path based placement on
56
--      When generating a Lattice ROM/RAM untick latche outputs and use
57
--      the *.mem file generated with my asm2rom.pl script.
58
------------------------------------------------------------------------------------
59
--                      TO Do
60
--      1       DONE Update all address modes of cmp, cpx and cpy per #mode
61
--      2       DONE Add rol, ror, asl, lsr,  per inc and dec
62
--      3       DONE Correct flags in all modes of item 2
63 6 stanley82
--      4       DONE Update the stack instructions, I've it pushing up not down.
64 2 stanley82
--      5       Continue testing
65
--      6       DONE Get a kernel up to test each and every instruction
66
--      7       Test all instructions
67
--      7       Add the 65C02 stuff.  I think the most needed is phx, phy, plx
68
--              and ply are the most useful.
69
------------------------------------------------------------------------------------
70 3 stanley82
--      Revision history
71 6 stanley82
--      Dec 3, 2010
72
--      Interrupts BRK, IRQ and NMI checked out seem okay.
73
--      Fixed stack to push down pull up.
74
--      addressing      (zero,x) corrected.
75
--      CLV error corrected.
76
--      rol, ror, asl and lsr shift instructions checked and fixed.
77
--      Nov 17, 2010
78
--      Corrected BRK, IRQ, NMI and RTI due to error in status byte.
79 3 stanley82
--      Nov 4, 2010
80
--      Rationalized all flavours of cmp, cpy and cpx.
81
--      Changed jsr to combine out_dat1 and out_dat2 into out_dat.
82
--      Changed wr_ctr to wr_fg.
83
--      This saved 43 slices, 69% of slices are used.
84
--      Removed many redundant comment lines.
85
--      ******************************************************************
86
--      Nov 1, 2010
87
--      Double quotes inside a comment line rejected by ghdl
88
--      cmp carry not set when equal
89
--      php not saving flags, had to add a cycle for flags to prop in cycle 0
90
--
91
--      ******************************************************************************
92 2 stanley82
 
93
library IEEE;                   --Use standard IEEE libs as recommended by Tristan.
94
use IEEE.STD_LOGIC_1164.ALL;
95
use IEEE.numeric_std.all;
96
 
97
entity P65C02 is
98
 
99
Port (
100
        clock: in std_logic;
101
        reset : in std_logic;
102
        data_wr: out unsigned(7 downto 0);
103
        data_rd: in unsigned(7 downto 0);
104
        proc_write:  inout std_logic;
105
        irq: in std_logic;              --Active 0
106
        nmi: in std_logic;              --Neg transition.
107
        address: inout unsigned(15 downto 0)
108
    );
109
end P65C02;
110
 
111
architecture P65C02_architecture of P65C02 is
112
------------------------------------------------------------------------
113
-- Signal Declarations
114
------------------------------------------------------------------------
115
signal reg_pc : unsigned(15 downto 0);
116
signal add_hold : unsigned(15 downto 0);
117
signal reg_a  : unsigned(8 downto 0);
118
signal reg_x, reg_y, reg_s, reg_sp : unsigned(7 downto 0);
119 3 stanley82
signal Instruction_in, dat_in1, dat_in2, dat_out : unsigned(7 downto 0);
120
signal n_fg, v_fg, b_fg, d_fg, i_fg, z_fg, v_ff, wr_fg : std_logic;
121 2 stanley82
signal cycle_ctr, add_fg : unsigned(3 downto 0);
122 3 stanley82
signal flags_fg : unsigned(1 downto 0);
123 2 stanley82
 
124
 
125 6 stanley82
signal reset_fg, irq_fg, nmi_ff1, nmi_ff2, nmi_req, nmi_fg, start_fg, pc_inc_fg, branch_fg: std_logic;
126 2 stanley82
signal pc_dec_fg, dat2pc_fg : std_logic;
127
--      End of signal declarations
128
 
129
begin   --architecture
130
--      =======================================================
131
read_mem:process (clock, reset)
132
begin
133
if reset = '0' then
134
        dat_in1 <= (others => '0');
135
        dat_in2 <= (others => '0');
136
        instruction_in <= (others => '0');
137
 
138
        elsif rising_edge(clock) then
139
                dat_in2 <= dat_in1;
140
                dat_in1 <= data_rd;
141
 
142
                if cycle_ctr = x"0" then
143 6 stanley82
--                      if (i_fg = '0' and (irq = '0' or nmi_req = '0')) or (reset = '1' and reset_fg = '0') then
144
                        if (i_fg = '0' and irq = '0') or nmi_req = '0' or (reset = '1' and reset_fg = '0') then
145 2 stanley82
                                Instruction_in <= x"00";
146
                        else
147
                                Instruction_in <= data_rd;
148
                        end if;
149
                end if;
150
end if;
151
end process read_mem;
152
 
153
--      =======================================================
154
Prog_ptr:process (clock, reset, pc_dec_fg)
155
begin
156
if reset = '0' then
157
        reg_pc <= x"FFFC";
158
        elsif rising_edge(clock) then
159
                if dat2pc_fg = '1' then
160
                        reg_pc(15 downto 8) <= data_rd;
161
                        reg_pc(7 downto 0) <= dat_in1;
162
 
163 6 stanley82
--              elsif (cycle_ctr = X"0" and not(irq = '0' or nmi = '0' )) or pc_inc_fg = '1' then
164
                elsif cycle_ctr = X"0" or pc_inc_fg = '1' then
165 2 stanley82
                        reg_pc <= reg_pc + x"0001";
166
 
167
                elsif pc_dec_fg = '1' then
168
                        reg_pc <= reg_pc - x"0001";
169
 
170
--              elsif cycle_ctr = x"0" and irq = '0' and i_fg = '0' then
171
--                      reg_pc <= reg_pc - x"0001";
172
 
173
                elsif branch_fg = '1' then
174
                        reg_pc <= reg_pc + (dat_in1(7) & dat_in1(7) & dat_in1(7) & dat_in1(7) & dat_in1(7) & dat_in1(7) & dat_in1(7) & dat_in1(7) &  dat_in1);
175
                end if;
176
end if;
177
end process Prog_ptr;
178
 
179 6 stanley82
addressing:process (reset, proc_write, data_rd, dat_in1, dat_in2, reg_x, reg_y, reg_sp, add_hold, reg_PC, add_fg)
180 2 stanley82
begin
181 6 stanley82
 
182 2 stanley82
if reset = '0' then
183
address <= reg_pc;
184
        else
185
                Case add_fg is
186
                when x"0" =>
187
                        address <= reg_pc;
188
                when x"1" =>                    --Zero page
189
                        if proc_write = '0' then
190
                                address(7 downto 0) <= data_rd;
191
                        else
192
                                address(7 downto 0) <= dat_in1;
193
                        end if;
194
                        address(15 downto 8) <= x"00";
195
                when x"2" =>                    --Zero page, x
196
                        if proc_write = '0' then
197
                                address(7 downto 0) <= data_rd + reg_x;
198
                        else
199
                                address(7 downto 0) <= dat_in1 + reg_x;
200
                        end if;
201
                        address(15 downto 8) <= x"00";
202
 
203
                when x"3" =>                    --Zero page, y
204
                        if proc_write = '0' then
205
                                address(7 downto 0) <= data_rd + reg_y;
206
                        else
207
                                address(7 downto 0) <= dat_in1 + reg_y;
208
                        end if;
209
                        address(15 downto 8) <= x"00";
210
                when x"4" =>                    --Absolute Return sub etc
211
                        if proc_write = '0' then
212
                                address <= data_rd & dat_in1;
213
                        else
214
                                address <= dat_in1 & dat_in2;
215
                        end if;
216
                when x"5" =>                    --Absolute, x
217
                        if proc_write = '0' then
218
                                address <= data_rd & dat_in1 + reg_x;
219
                        else
220
                                address <= dat_in1 & dat_in2 + reg_x;
221
                        end if;
222
                when x"6" =>                    --Absolute, y
223 6 stanley82
--                      address <= (data_rd & dat_in1) + reg_y;
224 2 stanley82
 
225
                        if proc_write = '0' then
226
                                address <= data_rd & dat_in1 + reg_y;
227
                        else
228
                                address <= dat_in1 & dat_in2 + reg_y;
229
                        end if;
230
 
231
                when x"7" =>                    --Stack pointer
232
                        address <= x"01" & reg_sp;              --msb should be hex 01
233
                when x"8" =>                    --Reset 1st byte
234
                        address <= x"FFFC";
235
                when x"9" =>                    --IRQ and Break 1st byte
236
                        address <= x"FFFE";
237
                when x"A" =>                    --NMI and Break 1st byte
238
                        address <= x"FFFA";
239
                when x"B" =>                    --address + 1
240
                        address <= add_hold + "1";
241
                when x"C" =>                    --(zero),y
242
                        address(7 downto 0) <= dat_in1 + "1";
243
                        address(15 downto 8) <= x"00";
244
                when x"D" =>                    --(zero,x)
245
                        address(7 downto 0) <= dat_in1 + reg_x + "1";
246
                        address(15 downto 8) <= x"00";
247 6 stanley82
                when x"F" =>                    --Hold addre    nmi_ff1 <= '0';ss steady for INC etc
248 2 stanley82
                        address <= add_hold;
249
                when others =>
250
                        address <= reg_pc;
251
        end case;
252
end if;
253
end process addressing;
254
 
255
hold_address:process(clock, reset, address)
256
begin                   --hold address bus for inc type instructions.
257
if reset = '0' then
258
        add_hold <= (others => '0');
259
elsif rising_edge(clock) then
260
        add_hold <= address;
261
end if;
262
end process hold_address;
263
 
264 3 stanley82
memory_proc_write:process(clock, reset, wr_fg)
265 2 stanley82
begin
266
if reset = '0' then
267
        data_wr <= (others => '0');
268
        proc_write <= '0';
269 6 stanley82
 
270 2 stanley82
elsif rising_edge(clock) then
271 3 stanley82
        proc_write <= wr_fg;
272 6 stanley82
--      if wr_fg = '1' then
273 3 stanley82
                data_wr <= dat_out;
274 6 stanley82
--      end if;
275 2 stanley82
end if;
276
end process memory_proc_write;
277
 
278
instruction_decode:process (clock, reset, irq, nmi)
279
begin
280
if reset = '0' then
281
        cycle_ctr <= (others => '0');
282
        pc_inc_fg <= '0';
283
        pc_dec_fg <= '0';
284
        dat2pc_fg <= '0';
285
        add_fg <= (others => '0');
286
        branch_fg <= '0';
287
        flags_fg <= (others => '0');
288 3 stanley82
        wr_fg <= '0';
289 2 stanley82
        reg_a <= (others => '0');
290
        reg_x <= (others => '0');
291
        reg_y <= (others => '0');
292 6 stanley82
        reg_sp <= (others => '1');
293 2 stanley82
        n_fg <= '0';
294
        v_fg <= '0';
295
        b_fg <= '0';
296
        d_fg <= '0';
297 6 stanley82
        i_fg <= '1';
298 2 stanley82
        z_fg <= '0';
299
        reset_fg <= '0';
300
        start_fg <= '0';
301
        v_ff <= '0';
302 6 stanley82
        nmi_ff1 <= '1';
303
        nmi_ff2 <= '1';
304
        nmi_req <= '1';
305 2 stanley82
        nmi_fg <= '0';
306
        irq_fg <= '0';
307 3 stanley82
        dat_out <= (others => '0');
308 2 stanley82
 
309
elsif rising_edge(clock) then
310
        reset_fg <= reset;
311 6 stanley82
--      This is to generate a nmi_req from neg transition on nmi input
312
        nmi_ff1 <= nmi;
313
        nmi_ff2 <= nmi_ff1;
314
        if nmi_fg = '0' and nmi_ff2 = '1' and nmi = '0' then
315
                nmi_req <= '0';
316
        end if;
317 2 stanley82
 
318
--      This section is to get started
319
                if reset = '1' and reset_fg = '0' then
320
                        start_fg <= '1';
321 3 stanley82
                        wr_fg <= '0';
322 2 stanley82
                        add_fg <= x"8";         --get start up vectors FFFC FFFD
323 6 stanley82
                        cycle_ctr <= x"7";      --Jump into cycle 7 add_fg <= x'8'
324 2 stanley82
--              end if;
325
        else
326
 
327
 
328
        case cycle_ctr is               --cycle counter case
329
                when x"0" =>
330
 
331
                        if  reset_fg = '1' and reset = '1' then
332
 
333
                                if flags_fg /= "00" then
334 3 stanley82
                                        n_fg <= dat_out(7);
335
                                        if dat_out = x"00" then
336 2 stanley82
                                                z_fg <= '1';
337
                                        else
338
                                                z_fg <= '0';
339
                                        end if;
340
                                end if;
341
                                if flags_fg = "10" then
342
                                        start_fg <= '0';
343
                                        v_fg <= reg_a(7) xnor v_ff;     --Add V_ff true overflow possible
344
--                                                                      --Sub V_ff false underflow possible
345
                                end if;
346
                        flags_fg <= "00";
347
                        end if;
348
 
349
                        if irq = '0' and i_fg = '0' then
350
                                irq_fg <= '1';
351
                                pc_dec_fg <= '1';
352
                                cycle_ctr <= cycle_ctr + x"1";
353 6 stanley82
                        elsif nmi_req = '0' then
354 2 stanley82
                                nmi_fg <= '1';
355
                                pc_dec_fg <= '1';
356
                                cycle_ctr <= cycle_ctr + x"1";
357
                        else
358
 
359
                        case data_rd is
360
 
361
--      ===========================================================================================
362
                                when x"48" =>                   --PHA 1st part accumulator onto stack
363 3 stanley82
                                        wr_fg <= '1';
364
                                        dat_out <= reg_a(7 downto 0);
365 2 stanley82
                                        pc_dec_fg <= '1';
366
                                        cycle_ctr <= cycle_ctr + x"1";
367
 
368
                                when x"08" =>                   --PHP 1st part status onto stack
369 6 stanley82
                                        pc_dec_fg <= '1';       --php needs extra cycle to propagate flags 
370 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
371
 
372
                                when x"68" =>                   --PLA  1st part Pull Accumulator from Stack
373 6 stanley82
                                        reg_sp <= reg_sp + "1";         --plus
374 2 stanley82
                                        pc_dec_fg <= '1';
375
                                        cycle_ctr <= cycle_ctr + x"1";
376
 
377
                                when x"28" =>                   --PLP 1st part pull old status from stack
378 6 stanley82
                                        reg_sp <= reg_sp + "1";         --plus
379 2 stanley82
                                        pc_dec_fg <= '1';
380
                                        cycle_ctr <= cycle_ctr + x"1";
381
 
382
                                when x"18" =>                   --CLC clear carry
383
                                        reg_a(8) <= '0';
384
                                        cycle_ctr <= x"0";
385
 
386
                                when x"38" =>                   --SEC set carry
387
                                        reg_a(8) <= '1';
388
                                        cycle_ctr <= x"0";
389
                                when x"58" =>                   --CLI  Clear interrupt Disable Bit
390
                                        i_fg <= '0';
391
                                        cycle_ctr <= x"0";
392
 
393
                                when x"78" =>                   --SEI  Set interrupt Disable Status
394
                                        i_fg <= '1';
395
                                        cycle_ctr <= x"0";
396
                                when x"88" =>                   --DEY Decrement y reg
397
                                        reg_y <= reg_y - "1";
398
                                        flags_fg <= "01";
399 3 stanley82
                                        dat_out <= reg_y - "1";
400 2 stanley82
                                        cycle_ctr <= x"0";
401
                                when x"98" =>                   --TYA transfer Y to A
402
                                        reg_a(7 downto 0) <= reg_y;
403
                                        flags_fg <= "01";
404 3 stanley82
                                        dat_out <= reg_y;
405 2 stanley82
                                        cycle_ctr <= x"0";
406
                                when x"A8" =>                   --TAY transfer A to Y
407
                                        reg_y <= reg_a(7 downto 0);
408
                                        flags_fg <= "01";
409 3 stanley82
                                        dat_out <= reg_a(7 downto 0);
410 2 stanley82
                                        cycle_ctr <= x"0";
411
                                when x"B8" =>                   --CLV clear overflow flag
412
                                        v_fg <= '0';
413
                                        cycle_ctr <= x"0";
414
                                when x"C8" =>                   --INY increment Y reg
415
                                        reg_y <= reg_y + x"1";
416
                                        flags_fg <= "01";
417 3 stanley82
                                        dat_out <= reg_y + x"1";
418 2 stanley82
                                        cycle_ctr <= x"0";
419
                                when x"D8" =>                   --CLD Clear decimnal flag
420
                                        d_fg <= '0';
421
                                        cycle_ctr <= x"0";
422
                                when x"E8" =>                   --INX increment X reg
423
                                        reg_x <= reg_x + x"1";
424
                                        flags_fg <= "01";
425 3 stanley82
                                        dat_out <= reg_x + x"1";
426 2 stanley82
                                        cycle_ctr <= x"0";
427
                                when x"F8" =>                   --SLD Set decimnal flag
428
                                        d_fg <= '1';
429
                                        cycle_ctr <= x"0";
430
                                when x"2A" =>                   --ROL A Rotate Left one bit 1st part.
431
                                        reg_a(8 downto 1) <= reg_a(7 downto 0);
432
                                        reg_a(0) <= reg_a(8);
433 3 stanley82
                                        dat_out(7 downto 1) <= reg_a(6 downto 0);
434
                                        dat_out(0) <= reg_a(8);
435 2 stanley82
                                        flags_fg <= "01";
436
                                        cycle_ctr <=  x"0";
437
                                when x"6A" =>                   --ROR A Rotateft right one bit 1st part.
438
                                        reg_a(7 downto 0) <= reg_a(8 downto 1);
439
                                        reg_a(8) <= reg_a(0);
440 3 stanley82
                                        dat_out <= reg_a(8 downto 1);
441 2 stanley82
                                        flags_fg <= "01";
442
                                        cycle_ctr <=  x"0";
443
                                when x"0A" =>                   --ASL A Shift Left one bit 1st part.
444
                                        reg_a <= reg_a(7 downto 0) & '0';
445 3 stanley82
                                        dat_out <= reg_a(6 downto 0) & '0';
446 2 stanley82
                                        flags_fg <= "01";
447
                                        cycle_ctr <=  x"0";
448
                                when x"4A" =>                   --LSR A Logical Shift Right one bit 1st part.
449
                                        reg_a(7 downto 0) <= '0' & reg_a(7 downto 1);
450
                                        reg_a(8) <= reg_a(0);
451 3 stanley82
                                        dat_out <= '0' & reg_a(7 downto 1);
452 2 stanley82
                                        flags_fg <= "01";
453
                                        cycle_ctr <=  x"0";
454
                                when x"9A" =>                   --TXS
455
                                        reg_sp <= reg_x;
456
                                        cycle_ctr <= x"0";
457
                                when x"AA" =>                   --TAX
458
                                        reg_x <= reg_a(7 downto 0);
459
                                        flags_fg <= "01";
460 3 stanley82
                                        dat_out <= reg_a(7 downto 0);
461 2 stanley82
                                        cycle_ctr <= x"0";
462
                                when x"8A" =>                   --TXA
463
                                        reg_a(7 downto 0) <= reg_x;
464
                                        flags_fg <= "01";
465 3 stanley82
                                        dat_out <= reg_a(7 downto 0);
466 2 stanley82
                                        cycle_ctr <= x"0";
467
                                when x"BA" =>                   --TSX
468
                                        reg_x <= reg_sp;
469
                                        flags_fg <= "01";
470 3 stanley82
                                        dat_out <= reg_sp;
471 2 stanley82
                                        cycle_ctr <= x"0";
472
                                when x"CA" =>                   --DEX
473
                                        reg_x <= reg_X - X"01";
474
                                        flags_fg <= "01";
475 3 stanley82
                                        dat_out <= reg_x - X"01";
476 2 stanley82
                                        cycle_ctr <= x"0";
477
--      =============================================================================================
478
                                when x"F0" =>                   --BEQ branch true 1st part.
479
                                                cycle_ctr <= cycle_ctr + "1";
480
                                when x"D0" =>                   --BNE branch true 1st part.
481
                                                cycle_ctr <= cycle_ctr + "1";
482
                                when x"10" =>                   --BPL plus true 1st part.
483
                                                cycle_ctr <= cycle_ctr + "1";
484
                                when x"30" =>                   --BM1 negative true 1st part.
485
                                                cycle_ctr <= cycle_ctr + "1";
486
                                when x"50" =>                   --BVC overflow false 1st part.
487
                                                cycle_ctr <= cycle_ctr + "1";
488
                                when x"70" =>                   --BVS overflow true 1st part.
489
                                                cycle_ctr <= cycle_ctr + "1";
490
                                when x"90" =>                   --BCC carry false 1st part.
491
                                                cycle_ctr <= cycle_ctr + "1";
492
                                when x"B0" =>                   --BCS carry true 1st part.
493
                                                cycle_ctr <= cycle_ctr + "1";
494
 
495
--      =============================================================================================
496
                                when x"A2" =>                   --LDX #.  1st partProto imediate instruction
497
                                        pc_inc_fg <= '1';
498
                                        cycle_ctr <= cycle_ctr + "1";
499
                                when x"A9" =>                   --LDA #.  1st part Proto imediate instruction
500
                                        pc_inc_fg <= '1';
501
                                        cycle_ctr <= cycle_ctr + "1";
502
                                when x"09" =>                   --ORA #.  1st part Proto imediate instruction
503
                                        pc_inc_fg <= '1';
504
                                        cycle_ctr <= cycle_ctr + "1";
505
                                when x"29" =>                   --AND #.  1st part Proto imediate instruction
506
                                        pc_inc_fg <= '1';
507
                                        cycle_ctr <= cycle_ctr + "1";
508
                                when x"49" =>                   --EOR #.  1st part Proto imediate instruction
509
                                        pc_inc_fg <= '1';
510
                                        cycle_ctr <= cycle_ctr + "1";
511
                                when x"69" =>                   --ADC #.  1st part Proto imediate instruction
512
                                        pc_inc_fg <= '1';
513
                                        cycle_ctr <= cycle_ctr + "1";
514
                                when x"A0" =>                   --LDY #.  1st part Proto imediate instruction
515
                                        pc_inc_fg <= '1';
516
                                        cycle_ctr <= cycle_ctr + "1";
517
                                when x"C0" =>                   --CPY #.  1st part Proto imediate instruction
518
                                        pc_inc_fg <= '1';
519
                                        cycle_ctr <= cycle_ctr + "1";
520
                                when x"C9" =>                   --CMP #.  1st part Proto imediate instruction
521
                                        pc_inc_fg <= '1';
522
                                        cycle_ctr <= cycle_ctr + "1";
523
                                when x"E0" =>                   --CPX #.  1st part Proto imediate instruction
524
                                        pc_inc_fg <= '1';
525
                                        cycle_ctr <= cycle_ctr + "1";
526
                                when x"E9" =>                   --SBC #.  1st part Proto imediate instruction
527
                                        pc_inc_fg <= '1';
528
                                        cycle_ctr <= cycle_ctr + "1";
529
 
530
--      =============================================================================================
531
                                when x"84" =>                   --STY zero 1st part proto
532 3 stanley82
                                        dat_out <= reg_y;
533
                                        wr_fg <= '1';
534 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
535
                                when x"85" =>                   --STA zero 1st part proto
536 3 stanley82
                                        dat_out <= reg_a(7 downto 0);
537
                                        wr_fg <= '1';
538 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
539
                                when x"86" =>                   --STX zero 1st part proto
540 3 stanley82
                                        dat_out <= reg_x;
541
                                        wr_fg <= '1';
542 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
543
                                when x"94" =>                   --STY zero, X 1st part proto
544 3 stanley82
                                        dat_out <= reg_y;
545 2 stanley82
                                        add_fg <= x"2";
546 3 stanley82
                                        wr_fg <= '1';
547 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
548
                                when x"95" =>                   --STA zero, X 1st part proto
549 3 stanley82
                                        dat_out <= reg_a(7 downto 0);
550
                                        wr_fg <= '1';
551 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
552
                                when x"96" =>                   --STX zero, Y 1st part proto
553 3 stanley82
                                        dat_out <= reg_x;
554
                                        wr_fg <= '1';
555 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
556
 
557
--      ===============================================================================================
558
 
559
                                when x"A1" =>                   --LDA (zero,x) 1st part proto
560
                                        add_fg <= x"2";
561
                                        cycle_ctr <= cycle_ctr + "1";
562
                                when x"B1" =>                   --LDA (zero),y 1st part proto
563
                                        add_fg <= x"1";
564
                                        cycle_ctr <= cycle_ctr + "1";
565
 
566
                                when x"21" =>                   --AND (zero,x) 1st part proto
567
                                        add_fg <= x"2";
568
                                        cycle_ctr <= cycle_ctr + "1";
569
                                when x"31" =>                   --AND (zero),y 1st part proto
570
                                        add_fg <= x"1";
571
                                        cycle_ctr <= cycle_ctr + "1";
572
 
573
                                when x"41" =>                   --EOR (zero,x) 1st part proto
574
                                        add_fg <= x"2";
575
                                        cycle_ctr <= cycle_ctr + "1";
576
                                when x"51" =>                   --EOR (zero),y 1st part proto
577
                                        add_fg <= x"1";
578
                                        cycle_ctr <= cycle_ctr + "1";
579
 
580
                                when x"01" =>                   --OR (zero,x) 1st part proto
581
                                        add_fg <= x"2";
582
                                        cycle_ctr <= cycle_ctr + "1";
583
                                when x"11" =>                   --OR (zero),y 1st part proto
584
                                        add_fg <= x"1";
585
                                        cycle_ctr <= cycle_ctr + "1";
586
 
587
                                when x"61" =>                   --ADC (zero,x) 1st part proto
588
                                        add_fg <= x"2";
589
                                        cycle_ctr <= cycle_ctr + "1";
590
                                when x"71" =>                   --ADC (zero),y 1st part proto
591
                                        add_fg <= x"1";
592
                                        cycle_ctr <= cycle_ctr + "1";
593
 
594
                                when x"E1" =>                   --SBC (zero,x) 1st part proto
595
                                        add_fg <= x"2";
596
                                        cycle_ctr <= cycle_ctr + "1";
597
                                when x"F1" =>                   --SBC (zero),y 1st part proto
598
                                        add_fg <= x"1";
599
                                        cycle_ctr <= cycle_ctr + "1";
600
 
601
                                when x"C1" =>                   --CMP (zero,x) 1st part proto
602
                                        add_fg <= x"2";
603
                                        cycle_ctr <= cycle_ctr + "1";
604
                                when x"D1" =>                   --CMP (zero),y 1st part proto
605
                                        add_fg <= x"1";
606
                                        cycle_ctr <= cycle_ctr + "1";
607
 
608
                                when x"81" =>                   --STA (zero,x) 1st part proto
609
                                        add_fg <= x"2";
610
                                        cycle_ctr <= cycle_ctr + "1";
611
                                when x"91" =>                   --STA (zero),y 1st part proto
612
                                        add_fg <= x"1";
613
                                        cycle_ctr <= cycle_ctr + "1";
614
 
615
 
616
--      ==============================================================================================
617
                                when x"A5" =>                   --LDA zero 1st part proto
618
                                        add_fg <= x"1";
619
                                        cycle_ctr <= cycle_ctr + x"1";
620
                                when x"A4" =>                   --LDY zero 1st part
621
                                        add_fg <= x"1";
622
                                        cycle_ctr <= cycle_ctr + x"1";
623
                                when x"A6" =>                   --LDX zero 1st part
624
                                        add_fg <= x"1";
625
                                        cycle_ctr <= cycle_ctr + x"1";
626
                                when x"B5" =>                   --LDA zero,x 1st part
627
                                        add_fg <= x"2";
628
                                        cycle_ctr <= cycle_ctr + x"1";
629
                                when x"B4" =>                   --LDY zero,x 1st part
630
                                        add_fg <= x"2";
631
                                        cycle_ctr <= cycle_ctr + x"1";
632
                                when x"B6" =>                   --LDX zero,y 1st part
633
                                        add_fg <= x"3";
634
                                        cycle_ctr <= cycle_ctr + x"1";
635
                                when x"05" =>                   --ORA zero 1st part
636
                                        add_fg <= x"1";
637
                                        cycle_ctr <= cycle_ctr + x"1";
638
                                when x"15" =>                   --ORA zero,X 1st part
639
                                        add_fg <= x"2";
640
                                        cycle_ctr <= cycle_ctr + x"1";
641
                                when x"24" =>                   --BIT zero 1st part
642
                                        add_fg <= x"1";
643
                                        cycle_ctr <= cycle_ctr + x"1";
644
                                when x"25" =>                   --AND zero 1st part
645
                                        add_fg <= x"1";
646
                                        cycle_ctr <= cycle_ctr + x"1";
647
                                when x"26" =>                   --ROL zero 1st part
648
                                        add_fg <= x"1";
649
                                        cycle_ctr <= cycle_ctr + x"1";
650
                                when x"35" =>                   --AND zero,X 1st part
651
                                        add_fg <= x"2";
652
                                        cycle_ctr <= cycle_ctr + x"1";
653
                                when x"36" =>                   --ROL zero,X 1st part
654 6 stanley82
                                        add_fg <= x"2";
655 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
656
                                when x"45" =>                   --EOR zero 1st part
657
                                        add_fg <= x"1";
658
                                        cycle_ctr <= cycle_ctr + x"1";
659
                                when x"46" =>                   --LSR zero 1st part
660
                                        add_fg <= x"1";
661
                                        cycle_ctr <= cycle_ctr + x"1";
662
                                when x"55" =>                   --EOR zero,X 1st part
663
                                        add_fg <= x"2";
664
                                        cycle_ctr <= cycle_ctr + x"1";
665
--      =========================================================================================
666
                                when x"E6" =>                   --INC zero 1st part
667
                                        add_fg <= x"1";
668
                                        cycle_ctr <= cycle_ctr + x"1";
669
                                when x"56" =>                   --LSR zero,X 1st part
670
                                        add_fg <= x"2";
671
                                        cycle_ctr <= cycle_ctr + x"1";
672
                                when x"65" =>                   --ADC zero 1st part
673
                                        add_fg <= x"1";
674
                                        cycle_ctr <= cycle_ctr + x"1";
675
                                when x"66" =>                   --ROR zero 1st part
676
                                        add_fg <= x"1";
677
                                        cycle_ctr <= cycle_ctr + x"1";
678
                                when x"75" =>                   --ADC zero,X 1st part
679
                                        add_fg <= x"2";
680
                                        cycle_ctr <= cycle_ctr + x"1";
681
                                when x"76" =>                   --ROR zero,X 1st part
682
                                        add_fg <= x"2";
683
                                        cycle_ctr <= cycle_ctr + x"1";
684
                                when x"C4" =>                   --CPY zero 1st part
685
                                        add_fg <= x"1";
686
                                        cycle_ctr <= cycle_ctr + x"1";
687
                                when x"C5" =>                   --CMP zero 1st part
688
                                        add_fg <= x"1";
689
                                        cycle_ctr <= cycle_ctr + x"1";
690
                                when x"C6" =>                   --DEC zero 1st part
691
                                        add_fg <= x"1";
692
                                        cycle_ctr <= cycle_ctr + x"1";
693
                                when x"D5" =>                   --CMP zero,X 1st part
694
                                        add_fg <= x"2";
695
                                        cycle_ctr <= cycle_ctr + x"1";
696
                                when x"D6" =>                   --DEC zero,X 1st part
697
                                        add_fg <= x"2";
698
                                        cycle_ctr <= cycle_ctr + x"1";
699
                                when x"E4" =>                   --CPX zero 1st part
700
                                        add_fg <= x"1";
701
                                        cycle_ctr <= cycle_ctr + x"1";
702
                                when x"E5" =>                   --SBC zero 1st part
703
                                        add_fg <= x"1";
704
                                        cycle_ctr <= cycle_ctr + x"1";
705
                                when x"F5" =>                   --SBC zero,X 1st part
706
                                        add_fg <= x"2";
707
                                        cycle_ctr <= cycle_ctr + x"1";
708
                                when x"F6" =>                   --INC zero,X 1st part
709
                                        add_fg <= x"2";
710
                                        cycle_ctr <= cycle_ctr + x"1";
711
                                when x"06" =>                   --ASL zero, 1st part
712
                                        add_fg <= x"1";
713
                                        cycle_ctr <= cycle_ctr + x"1";
714
                                when x"16" =>                   --ASL zero, x 1st part
715
                                        add_fg <= x"2";
716
                                        cycle_ctr <= cycle_ctr + x"1";
717
--      ==============================================================================
718
                                when x"AD" =>                   --LDA abs 1st part.
719
                                        cycle_ctr <= cycle_ctr + x"1";
720
                                when x"BD" =>                   --LDA, x abs 1st part.
721
                                        cycle_ctr <= cycle_ctr + x"1";
722
                                when x"B9" =>                   --LDA, Y abs 1st part
723
                                        cycle_ctr <= cycle_ctr + x"1";
724
 
725
                                when x"2D" =>                   --AND abs 1st part.
726
                                        cycle_ctr <= cycle_ctr + x"1";
727
                                when x"3D" =>                   --AND, x abs 1st part.
728
                                        cycle_ctr <= cycle_ctr + x"1";
729
                                when x"39" =>                   --AND, Y abs 1st part.
730
                                        cycle_ctr <= cycle_ctr + x"1";
731
 
732
                                when x"0D" =>                   --ORA abs 1st part.
733
                                        cycle_ctr <= cycle_ctr + x"1";
734
                                when x"1D" =>                   --ORA, x abs 1st part.
735
                                        cycle_ctr <= cycle_ctr + x"1";
736
 
737
                                when x"19" =>                   --ORA, Y abs 1st part.
738
                                        cycle_ctr <= cycle_ctr + x"1";
739
 
740
                                when x"4D" =>                   --EOR abs 1st part.
741
                                        cycle_ctr <= cycle_ctr + x"1";
742
                                when x"5D" =>                   --EOR, x abs 1st part.
743
                                        cycle_ctr <= cycle_ctr + x"1";
744
                                when x"59" =>                   --EOR, Y abs 1st part.
745
                                        cycle_ctr <= cycle_ctr + x"1";
746
 
747
                                when x"6D" =>                   --ADC abs 1st part.
748
                                        cycle_ctr <= cycle_ctr + x"1";
749
                                when x"7D" =>                   --ADC, x abs 1st part.
750
                                        cycle_ctr <= cycle_ctr + x"1";
751
                                when x"79" =>                   --ADC, Y abs 1st part.
752
                                        cycle_ctr <= cycle_ctr + x"1";
753
 
754
                                when x"ED" =>                   --SBC abs 1st part.
755
                                        cycle_ctr <= cycle_ctr + x"1";
756
                                when x"FD" =>                   --SBC, x abs 1st part.
757
                                        cycle_ctr <= cycle_ctr + x"1";
758
                                when x"F9" =>                   --SBC, Y abs 1st part.
759
                                        cycle_ctr <= cycle_ctr + x"1";
760
 
761
                                when x"AE" =>                   --LDX abs 1st part.
762
                                        cycle_ctr <= cycle_ctr + x"1";
763
                                when x"BE" =>                   --LDX, y abs 1st part.
764
                                        cycle_ctr <= cycle_ctr + x"1";
765
                                when x"AC" =>                   --LDY abs 1st part.
766
                                        cycle_ctr <= cycle_ctr + x"1";
767
                                when x"BC" =>                   --LDY, x abs 1st part.
768
                                        cycle_ctr <= cycle_ctr + x"1";
769
                                when x"2C" =>                   --BIT abs 1st part.
770
                                        cycle_ctr <= cycle_ctr + x"1";
771
 
772
                                when x"CD" =>                   --CMP abs 1st part.
773
                                        cycle_ctr <= cycle_ctr + x"1";
774
                                when x"DD" =>                   --CMP, x abs 1st part.
775
                                        cycle_ctr <= cycle_ctr + x"1";
776
                                when x"D9" =>                   --CMP, Y abs 1st part.
777
                                        cycle_ctr <= cycle_ctr + x"1";
778
                                when x"EC" =>                   --CPX abs 1st part.
779
                                        cycle_ctr <= cycle_ctr + x"1";
780
                                when x"CC" =>                   --CPY abs 1st part.
781
                                        cycle_ctr <= cycle_ctr + x"1";
782
--.........................................................................................
783
                                when x"8D" =>                   --STA abs 1st part.
784 3 stanley82
                                        dat_out <= reg_a(7 downto 0);
785 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
786
                                when x"9D" =>                   --STA,x abs 1st part.
787 3 stanley82
                                        dat_out <= reg_a(7 downto 0);
788 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
789
                                when x"99" =>                   --STA, y abs 1st part.
790 3 stanley82
                                        dat_out <= reg_a(7 downto 0);
791 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
792
                                when x"8E" =>                   --STX abs 1st part.
793 3 stanley82
                                        dat_out <= reg_x;
794 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";--
795
                                when x"8C" =>                   --STY abs 1st part.
796 3 stanley82
                                        dat_out <= reg_y;
797 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
798
--.........................................................................................
799
 
800
                                when x"EE" =>                   --INC abs 1st part.
801
                                        cycle_ctr <= cycle_ctr + x"1";
802
                                when x"FE" =>                   --INC, x abs 1st part.
803
                                        cycle_ctr <= cycle_ctr + x"1";
804
                                when x"CE" =>                   --DEC abs 1st part.
805
                                        cycle_ctr <= cycle_ctr + x"1";
806
                                when x"DE" =>                   --DEC, x abs 1st part.
807
                                        cycle_ctr <= cycle_ctr + x"1";
808
                                when x"2E" =>                   --ROL abs 1st part.
809
                                        cycle_ctr <= cycle_ctr + x"1";
810
                                when x"3E" =>                   --ROL, x abs 1st part.
811
                                        cycle_ctr <= cycle_ctr + x"1";
812
                                when x"6E" =>                   --ROR abs 1st part.
813
                                        cycle_ctr <= cycle_ctr + x"1";
814
                                when x"7E" =>                   --ROR, x abs 1st part.
815
                                        cycle_ctr <= cycle_ctr + x"1";
816
                                when x"4E" =>                   --LSR abs 1st part.
817
                                        cycle_ctr <= cycle_ctr + x"1";
818
                                when x"5E" =>                   --LSR, x abs 1st part.
819
                                        cycle_ctr <= cycle_ctr + x"1";
820
                                when x"0E" =>                   --ASL abs 1st part.
821
                                        cycle_ctr <= cycle_ctr + x"1";
822
                                when x"1E" =>                   --ASL, x abs 1st part.
823
                                        cycle_ctr <= cycle_ctr + x"1";
824
--      ............................................................................
825
--      ==============================================================================
826
 
827
 
828 6 stanley82
                                when x"4C" =>                   --JMP abs 1st part
829 2 stanley82
                                        pc_inc_fg <= '1';
830
                                        cycle_ctr <= cycle_ctr + x"1";
831 6 stanley82
                                when x"6C" =>                   --JMP indirect 1st part
832 2 stanley82
                                        pc_inc_fg <= '1';
833
                                        cycle_ctr <= cycle_ctr + x"1";
834 6 stanley82
                                when x"20" =>                   --JSR abs 1st part
835 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
836 6 stanley82
                                when x"60" =>                   --RTS 1st part
837
                                        reg_sp <= reg_sp + "1";         --plus
838 2 stanley82
                                        add_fg <= x"7";
839
                                        cycle_ctr <= cycle_ctr + x"1";
840
                                when x"40" =>                   --RTI 1st part pull old status from stack
841 6 stanley82
                                        reg_sp <= reg_sp + "1";         --plus
842 2 stanley82
                                        add_fg <= x"7";
843
                                        cycle_ctr <= cycle_ctr + x"1";
844
 
845 6 stanley82
                                when x"00" =>                           --Break 1st part cyc 0
846
                                        pc_dec_fg <= '1';               --Start up, irq and nmi also use.
847
                                        cycle_ctr <= cycle_ctr + x"1";  --this set of logic.
848 2 stanley82
 
849
                                when others =>
850
                                        cycle_ctr <= x"0";
851
 
852
                        end case;       --Cycle 0
853
                        end if; --Initiated by nmi irq detection.
854
 
855
 
856
--      End cycle 0     =========================================================
857
 
858
 
859
                when x"1" =>
860
                                case Instruction_in is
861
--      ================================================================================================
862
 
863
                                when x"48" =>                   --PHA 2nd part accumulator onto stack
864
                                        pc_dec_fg <= '0';
865
                                        add_fg <= x"7";
866 3 stanley82
                                        wr_fg <= '0';
867 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
868
                                when x"08" =>                   --PHP 2nd part Status reg onto stack
869 3 stanley82
                                        wr_fg <= '1';
870 2 stanley82
                                        pc_dec_fg <= '0';
871 3 stanley82
                                        dat_out <= n_fg & v_fg & '1' & b_fg & d_fg & i_fg & z_fg & reg_a(8);
872 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
873
 
874
                                when x"68" =>                   --PLA 2nd part  Pull Accumulator from Stack
875
                                        add_fg <= x"7";
876
                                        pc_dec_fg <= '0';
877
                                        cycle_ctr <= cycle_ctr + x"1";
878
                                when x"28" =>                   --PLP 2nd part  Pull Status from Stack
879
                                        add_fg <= x"7";
880
                                        pc_dec_fg <= '0';
881
                                        cycle_ctr <= cycle_ctr + x"1";
882
 
883
                                when x"F0" =>                   --BEQ branch true 2nd part.
884
                                        if z_fg = '1' then      --Should work like a nop
885
                                                branch_fg <= '1';       --branch true 1st part.
886
                                        else
887
                                                pc_inc_fg <= '1';
888
                                        end if;
889
                                                cycle_ctr <= cycle_ctr + x"1";
890
                                when x"D0" =>                   --BNE branch true 2nd part.
891
                                        if z_fg = '0' then       --Should work like a nop
892
                                                branch_fg <= '1';       --branch true 1st part.
893
                                        else
894
                                                pc_inc_fg <= '1';
895
                                        end if;
896
                                                cycle_ctr <= cycle_ctr + x"1";
897
                                when x"10" =>                   --BPL plus true 2nd part.
898
                                        if n_fg = '0' then       --Should work like a nop
899
                                                branch_fg <= '1';       --branch true 1st part.
900
                                        else
901
                                                pc_inc_fg <= '1';
902
                                        end if;
903
                                                cycle_ctr <= cycle_ctr + x"1";
904
                                when x"30" =>                   --BM1 negative true 2nd part.
905
                                        if n_fg = '1' then      --Should work like a nop
906
                                                branch_fg <= '1';       --branch true 1st part.
907
                                        else
908
                                                pc_inc_fg <= '1';
909
                                        end if;
910
                                                cycle_ctr <= cycle_ctr + x"1";
911
                                when x"50" =>                   --BVC overflow false 2nd part.
912
                                        if v_fg = '0' then       --Should work like a nop
913
                                                branch_fg <= '1';       --branch true 1st part.
914
                                        else
915
                                                pc_inc_fg <= '1';
916
                                        end if;
917
                                                cycle_ctr <= cycle_ctr + x"1";
918
                                when x"70" =>                   --BVS overflow true 2nd part.
919
                                        if v_fg = '1' then      --Should work like a nop
920
                                                branch_fg <= '1';       --branch true 1st part.
921
                                        else
922
                                                pc_inc_fg <= '1';
923
                                        end if;
924
                                                cycle_ctr <= cycle_ctr + x"1";
925
                                when x"90" =>                   --BCC carry false 2nd part.
926
                                        if reg_a(8) = '0' then   --Should work like a nop
927
                                                branch_fg <= '1';       --branch true 1st part.
928
                                        else
929
                                                pc_inc_fg <= '1';
930
                                        end if;
931
                                                cycle_ctr <= cycle_ctr + x"1";
932
                                when x"B0" =>                   --BCS carry true 2nd part.
933
                                        if reg_a(8) = '1' then  --Should work like a nop
934
                                                branch_fg <= '1';       --branch true 1st part.
935
                                        else
936
                                                pc_inc_fg <= '1';
937
                                        end if;
938
                                                cycle_ctr <= cycle_ctr + x"1";
939
--      ================================================================================================
940
 
941
                                when x"A2" =>                   --LDX #.  2nd part Proto imediate instruction
942
                                        pc_inc_fg <= '0';
943
                                        reg_x <= data_rd;
944 3 stanley82
                                        dat_out <= data_rd;
945 2 stanley82
                                        cycle_ctr <= x"0";
946
                                when x"A9" =>                   --LDA #.  2nd part Proto imediate instruction
947
                                        pc_inc_fg <= '0';
948
                                        flags_fg <= "01";
949
                                        reg_a(7 downto 0) <= data_rd;
950 3 stanley82
                                        dat_out <= data_rd;
951 2 stanley82
                                        cycle_ctr <= x"0";
952
                                when x"A0" =>                   --LDY #
953
                                        pc_inc_fg <= '0';
954
                                        flags_fg <= "01";
955
                                        reg_y <= data_rd;
956 3 stanley82
                                        dat_out <= data_rd;
957 2 stanley82
                                        cycle_ctr <= x"0";
958
                                when x"09" =>                   --ORA #
959
                                        pc_inc_fg <= '0';
960
                                        add_fg <= x"0";
961
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) and data_rd;
962 3 stanley82
                                        dat_out <= reg_a(7 downto 0) and data_rd;
963 2 stanley82
                                        cycle_ctr <= x"0";
964
                                when x"29" =>                   --AND # 2nd part
965
                                        pc_inc_fg <= '0';
966
                                        flags_fg <= "01";
967
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) and data_rd;
968 3 stanley82
                                        dat_out <= reg_a(7 downto 0) and data_rd;
969 2 stanley82
                                        cycle_ctr <= x"0";
970
                                when x"49" =>                   --EOR #
971
                                        pc_inc_fg <= '0';
972
                                        flags_fg <= "01";
973
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) xor data_rd;
974 3 stanley82
                                        dat_out <= reg_a(7 downto 0) xor data_rd;
975 2 stanley82
                                        cycle_ctr <= x"0";
976
                                when x"69" =>                   --ADC #
977
                                        pc_inc_fg <= '0';
978
                                        v_ff <= not reg_a(7) and not data_rd(7);        --Pos+Pos=Overflow possible
979
                                        flags_fg <= "10";
980
                                        reg_a <= reg_a + ("0" & data_rd) + ("00000000" & reg_a(8));
981 3 stanley82
                                        dat_out <= reg_a(7 downto 0) + data_rd + ("0000000" & reg_a(8));
982 2 stanley82
                                        cycle_ctr <= x"0";
983
                                when x"E9" =>                   --SBC # 2nd part
984
                                        pc_inc_fg <= '0';
985
                                        v_ff <= reg_a(7) and data_rd(7);                --Neg-Neg=Underflow possible
986
                                        flags_fg <= "10";
987
                                        reg_a <= reg_a - ("0" & data_rd) - ("00000000" & reg_a(8));
988 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd - ("0000000" & reg_a(8));
989 2 stanley82
                                        cycle_ctr <= x"0";
990
 
991
                                when x"C9" =>                   --CMP # 2nd part.
992
                                        pc_inc_fg <= '0';
993
                                        flags_fg <= "01";
994 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd;
995
                                        if reg_a(7 downto 0) >= data_rd then
996 2 stanley82
                                                reg_a(8) <= '1';
997
                                        else
998
                                                reg_a(8) <= '0';
999
                                        end if;
1000
                                        cycle_ctr <= x"0";
1001
                                when x"E0" =>                   --CPX #.
1002
                                        pc_inc_fg <= '0';
1003
                                        flags_fg <= "01";
1004 3 stanley82
                                        dat_out <= reg_x - data_rd;
1005
                                        if reg_x >= data_rd then
1006 2 stanley82
                                                reg_a(8) <= '1';
1007
                                        else
1008
                                                reg_a(8) <= '0';
1009
                                        end if;
1010
                                        cycle_ctr <= x"0";
1011
                                when x"C0" =>                   --CPY #.
1012
                                        pc_inc_fg <= '0';
1013
                                        flags_fg <= "01";
1014 3 stanley82
                                        dat_out <= reg_y - data_rd;
1015
                                        if reg_y >= data_rd then
1016 2 stanley82
                                                reg_a(8) <= '1';
1017
                                        else
1018
                                                reg_a(8) <= '0';
1019
                                        end if;
1020
                                        cycle_ctr <= x"0";
1021
 
1022
--      ===================================================================================================
1023
                                when x"84" =>                   --STY zero 2nd part proto
1024
                                        add_fg <= x"1";
1025 3 stanley82
                                        wr_fg <= '0';
1026 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1027
                                when x"85" =>                   --STA zero 2nd part proto
1028
                                        add_fg <= x"1";
1029 3 stanley82
                                        wr_fg <= '0';
1030 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1031
                                when x"86" =>                   --STX zero 2nd part proto
1032
                                        add_fg <= x"1";
1033 3 stanley82
                                        wr_fg <= '0';
1034 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1035
                                when x"94" =>                   --STY zero, X 2nd part proto
1036
                                        add_fg <= x"2";
1037 3 stanley82
                                        wr_fg <= '0';
1038 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1039
                                when x"95" =>                   --STA zero, X 2nd part proto
1040
                                        add_fg <= x"2";
1041 3 stanley82
                                        wr_fg <= '0';
1042 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1043
                                when x"96" =>                   --STX zero, Y 2nd part proto
1044
                                        add_fg <= x"3";
1045 3 stanley82
                                        wr_fg <= '0';
1046 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1047
 
1048
--      =================================================================================
1049
                                when x"A5" =>                   --LDA zero 2nd part proto
1050
                                        pc_inc_fg <= '1';
1051
                                        add_fg <= x"0";
1052
                                        cycle_ctr <= cycle_ctr + "1";
1053
                                when x"A4" =>                   --LDY zero 2nd part
1054
                                        pc_inc_fg <= '1';
1055
                                        add_fg <= x"0";
1056
                                        cycle_ctr <= cycle_ctr + "1";
1057
                                when x"A6" =>                   --LDX zero 2nd part
1058
                                        pc_inc_fg <= '1';
1059
                                        add_fg <= x"0";
1060
                                        cycle_ctr <= cycle_ctr + "1";
1061
                                when x"B5" =>                   --LDA zero,X 2nd part
1062
                                        pc_inc_fg <= '1';
1063
                                        add_fg <= x"0";
1064
                                        cycle_ctr <= cycle_ctr + "1";
1065
                                when x"B4" =>                   --LDY zero,X 2nd part
1066
                                        pc_inc_fg <= '1';
1067
                                        add_fg <= x"0";
1068
                                        cycle_ctr <= cycle_ctr + "1";
1069
 
1070
                                when x"B6" =>                   --LDX zero,Y 2nd part
1071
                                        pc_inc_fg <= '1';
1072
                                        add_fg <= x"0";
1073
                                        cycle_ctr <= cycle_ctr + "1";
1074
                                when x"05" =>                   --ORA zero 2nd part
1075
                                        pc_inc_fg <= '1';
1076
                                        add_fg <= x"0";
1077
                                        cycle_ctr <= cycle_ctr + "1";
1078
 
1079
                                when x"15" =>                   --ORA zero,X 2nd part
1080
                                        pc_inc_fg <= '1';
1081
                                        add_fg <= x"0";
1082
                                        cycle_ctr <= cycle_ctr + "1";
1083
                                when x"24" =>                   --BIT zero 2nd part
1084
                                        pc_inc_fg <= '1';
1085
                                        add_fg <= x"0";
1086
                                        cycle_ctr <= cycle_ctr + "1";
1087
 
1088
                                when x"25" =>                   --AND zero 2nd part
1089
                                        pc_inc_fg <= '1';
1090
                                        add_fg <= x"0";
1091
                                        cycle_ctr <= cycle_ctr + "1";
1092
 
1093
                                when x"35" =>                   --AND zero,X 2nd part
1094
                                        pc_inc_fg <= '1';
1095
                                        add_fg <= x"0";
1096
                                        cycle_ctr <= cycle_ctr + "1";
1097
 
1098
                                when x"45" =>                   --EOR zero,Y 2nd part
1099
                                        pc_inc_fg <= '1';
1100
                                        add_fg <= x"0";
1101
                                        cycle_ctr <= cycle_ctr + "1";
1102
 
1103
                                when x"55" =>                   --EOR zero,X 2nd part
1104
                                        pc_inc_fg <= '1';
1105
                                        add_fg <= x"0";
1106
                                        cycle_ctr <= cycle_ctr + "1";
1107
 
1108
                                when x"65" =>                   --ADC zero 2nd part
1109
                                        pc_inc_fg <= '1';
1110
                                        add_fg <= x"0";
1111
                                        cycle_ctr <= cycle_ctr + "1";
1112
 
1113
                                when x"75" =>                   --ADC zero,X 2nd part
1114
                                        pc_inc_fg <= '1';
1115
                                        add_fg <= x"0";
1116
                                        cycle_ctr <= cycle_ctr + "1";
1117
 
1118
                                when x"C4" =>                   --CPY zero 2nd part
1119
                                        pc_inc_fg <= '1';
1120
                                        add_fg <= x"0";
1121
                                        cycle_ctr <= cycle_ctr + "1";
1122
 
1123
                                when x"C5" =>                   --CMP zero 2nd part
1124
                                        pc_inc_fg <= '1';
1125 3 stanley82
                                        add_fg <= x"0";
1126 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1127
                                when x"C6" =>                   --DEC zero 2nd part
1128
                                        add_fg <= x"f";
1129
                                        cycle_ctr <= cycle_ctr + "1";
1130
                                when x"D5" =>                   --CMP zero,X 2nd part
1131
                                        pc_inc_fg <= '1';
1132
                                        add_fg <= x"0";
1133
                                        cycle_ctr <= cycle_ctr + "1";
1134
                                when x"D6" =>                   --DEC zero,X 2nd part
1135
                                        pc_inc_fg <= '1';
1136
                                        add_fg <= x"0";
1137
                                        cycle_ctr <= cycle_ctr + "1";
1138
 
1139
                                when x"E4" =>                   --CPX zero 2nd part
1140
                                        pc_inc_fg <= '1';
1141
                                        add_fg <= x"0";
1142
                                        cycle_ctr <= cycle_ctr + "1";
1143
                                when x"E5" =>                   --SBC zero 2nd part
1144
                                        pc_inc_fg <= '1';
1145
                                        add_fg <= x"0";
1146
                                        cycle_ctr <= cycle_ctr + "1";
1147
                                when x"F5" =>                   --SBC zero,X 2nd part
1148
                                        pc_inc_fg <= '1';
1149
                                        add_fg <= x"0";
1150
                                        cycle_ctr <= cycle_ctr + "1";
1151
--      ===================================================================================
1152
                                when x"E6" =>                   --INC zero 2nd part
1153
                                        add_fg <= x"f";
1154
                                        cycle_ctr <= cycle_ctr + "1";
1155
                                when x"F6" =>                   --INC zero,X 2nd part
1156
                                        add_fg <= x"f";
1157
                                        cycle_ctr <= cycle_ctr + "1";
1158
                                when x"46" =>                   --LSR zero 2nd part
1159
                                        add_fg <= x"f";
1160
                                        cycle_ctr <= cycle_ctr + "1";
1161
                                when x"56" =>                   --LSR zero,X 2nd part
1162
                                        add_fg <= x"f";
1163
                                        cycle_ctr <= cycle_ctr + "1";
1164
 
1165
                                when x"66" =>                   --ROR zero 2nd part
1166
                                        add_fg <= x"f";
1167
                                        cycle_ctr <= cycle_ctr + "1";
1168
                                when x"76" =>                   --ROR zero,X 2nd part
1169
                                        add_fg <= x"f";
1170
                                        cycle_ctr <= cycle_ctr + "1";
1171
                                when x"26" =>                   --ROL zero 2nd part
1172
                                        add_fg <= x"f";
1173
                                        cycle_ctr <= cycle_ctr + "1";
1174
                                when x"36" =>                   --ROL zero,X 2nd part
1175
                                        add_fg <= x"f";
1176
                                        cycle_ctr <= cycle_ctr + "1";
1177
                                when x"06" =>                   --ASL zero 2nd part
1178
                                        add_fg <= x"f";
1179
                                        cycle_ctr <= cycle_ctr + "1";
1180
                                when x"16" =>                   --ASL zero,X 2nd part
1181
                                        add_fg <= x"f";
1182
                                        cycle_ctr <= cycle_ctr + "1";
1183
 
1184
 
1185
--      ==============================================================================
1186
                                when x"A1" =>                   --LDA (zero,x) 2nd part proto
1187
                                        add_fg <= x"D";
1188
                                        cycle_ctr <= cycle_ctr + "1";
1189
                                when x"B1" =>                   --LDA (zero),y 2nd part proto
1190
                                        add_fg <= x"C";
1191
                                        cycle_ctr <= cycle_ctr + "1";
1192
 
1193
                                when x"21" =>                   --AND (zero,x) 2nd part proto
1194
                                        add_fg <= x"D";
1195
                                        cycle_ctr <= cycle_ctr + "1";
1196
                                when x"31" =>                   --AND (zero),y 2nd part proto
1197
                                        add_fg <= x"C";
1198
                                        cycle_ctr <= cycle_ctr + "1";
1199
 
1200
                                when x"41" =>                   --EOR (zero,x) 2nd part proto
1201
                                        add_fg <= x"D";
1202
                                        cycle_ctr <= cycle_ctr + "1";
1203
                                when x"51" =>                   --EOR (zero),y 2nd part proto
1204
                                        add_fg <= x"C";
1205
                                        cycle_ctr <= cycle_ctr + "1";
1206
 
1207
                                when x"01" =>                   --OR (zero,x) 2nd part proto
1208
                                        add_fg <= x"D";
1209
                                        cycle_ctr <= cycle_ctr + "1";
1210
                                when x"11" =>                   --OR (zero),y 2nd part proto
1211
                                        add_fg <= x"C";
1212
                                        cycle_ctr <= cycle_ctr + "1";
1213
 
1214
                                when x"61" =>                   --ADC (zero,x) 2nd part proto
1215
                                        add_fg <= x"D";
1216
                                        cycle_ctr <= cycle_ctr + "1";
1217
                                when x"71" =>                   --ADC (zero),y 2nd part proto
1218
                                        add_fg <= x"C";
1219
                                        cycle_ctr <= cycle_ctr + "1";
1220
 
1221
                                when x"E1" =>                   --SBC (zero,x) 2nd part proto
1222
                                        add_fg <= x"D";
1223
                                        cycle_ctr <= cycle_ctr + "1";
1224
                                when x"F1" =>                   --SBC (zero),y 2nd part proto
1225
                                        add_fg <= x"C";
1226
                                        cycle_ctr <= cycle_ctr + "1";
1227
 
1228
                                when x"C1" =>                   --CMP (zero,x) 2nd part proto
1229
                                        add_fg <= x"D";
1230
                                        cycle_ctr <= cycle_ctr + "1";
1231
                                when x"D1" =>                   --CMP (zero),y 2nd part proto
1232
                                        add_fg <= x"C";
1233
                                        cycle_ctr <= cycle_ctr + "1";
1234
 
1235
                                when x"81" =>                   --STA (zero,x) 2nd part proto
1236
                                        add_fg <= x"D";
1237
                                        cycle_ctr <= cycle_ctr + "1";
1238
                                when x"91" =>                   --STA (zero),y 2nd part proto
1239
                                        add_fg <= x"C";
1240
                                        cycle_ctr <= cycle_ctr + "1";
1241
--      ==============================================================================
1242
                                when x"AD" =>                   --LDA abs 2nd part.
1243
                                        add_fg <= x"4";
1244
                                        cycle_ctr <= cycle_ctr + x"1";
1245
                                when x"BD" =>                   --LDA, x abs 2nd part.
1246
                                        add_fg <= x"5";
1247
                                        cycle_ctr <= cycle_ctr + x"1";
1248
                                when x"B9" =>                   --LDA, Y abs 2nd part.
1249 6 stanley82
 
1250
 
1251 2 stanley82
                                        add_fg <= x"6";
1252
                                        cycle_ctr <= cycle_ctr + x"1";
1253
 
1254 6 stanley82
 
1255 2 stanley82
                                when x"2D" =>                   --AND abs 2nd part.
1256
                                        add_fg <= x"4";
1257
                                        cycle_ctr <= cycle_ctr + x"1";
1258
 
1259
                                when x"3D" =>                   --AND, x abs 2nd part.
1260 3 stanley82
 
1261 2 stanley82
                                        add_fg <= x"5";
1262
                                        cycle_ctr <= cycle_ctr + x"1";
1263
                                when x"39" =>                   --AND, Y abs 2nd part.
1264
                                        add_fg <= x"6";
1265
                                        cycle_ctr <= cycle_ctr + x"1";
1266
 
1267
                                when x"0D" =>                   --ORA abs 2nd part.
1268
                                        add_fg <= x"4";
1269
                                        cycle_ctr <= cycle_ctr + x"1";
1270
                                when x"1D" =>                   --ORA, x abs 2nd part.
1271
                                        add_fg <= x"5";
1272
                                        cycle_ctr <= cycle_ctr + x"1";
1273
                                when x"19" =>                   --ORA, Y abs 2nd part.
1274
                                        add_fg <= x"6";
1275
                                        cycle_ctr <= cycle_ctr + x"1";
1276
 
1277
                                when x"4D" =>                   --EOR abs 2nd part.
1278
                                        add_fg <= x"4";
1279
                                        cycle_ctr <= cycle_ctr + x"1";
1280
                                when x"5D" =>                   --EOR, x abs 2nd part.
1281
                                        add_fg <= x"5";
1282
                                        cycle_ctr <= cycle_ctr + x"1";
1283
                                when x"59" =>                   --EOR, Y abs 2nd part.
1284
                                        add_fg <= x"6";
1285
                                        cycle_ctr <= cycle_ctr + x"1";
1286
 
1287
                                when x"6D" =>                   --ADC abs 2nd part.
1288
                                        add_fg <= x"4";
1289
                                        cycle_ctr <= cycle_ctr + x"1";
1290
                                when x"7D" =>                   --ADC, x abs 2nd part.
1291
                                        add_fg <= x"5";
1292
                                        cycle_ctr <= cycle_ctr + x"1";
1293
                                when x"79" =>                   --ADC, Y abs 2nd part.
1294
                                        add_fg <= x"6";
1295
                                        cycle_ctr <= cycle_ctr + x"1";
1296
 
1297
                                when x"ED" =>                   --SBC abs 2nd part.
1298
                                        add_fg <= x"4";
1299
                                        cycle_ctr <= cycle_ctr + x"1";
1300
                                when x"FD" =>                   --SBC, x abs 2nd part.
1301
                                        add_fg <= x"5";
1302
                                        cycle_ctr <= cycle_ctr + x"1";
1303
                                when x"F9" =>                   --SBC, Y abs 2nd part.
1304
                                        add_fg <= x"6";
1305
                                        cycle_ctr <= cycle_ctr + x"1";
1306
 
1307
                                when x"AE" =>                   --LDX abs 2nd part.
1308
                                        add_fg <= x"4";
1309
                                        cycle_ctr <= cycle_ctr + x"1";
1310
                                when x"BE" =>                   --LDX, y abs 2nd part.
1311
                                        add_fg <= x"6";
1312
                                        cycle_ctr <= cycle_ctr + x"1";
1313
                                when x"AC" =>                   --LDY abs 2nd part.
1314
                                        add_fg <= x"4";
1315
                                        cycle_ctr <= cycle_ctr + x"1";
1316
                                when x"BC" =>                   --LDY, x abs 2nd part.
1317
                                        add_fg <= x"5";
1318
                                        cycle_ctr <= cycle_ctr + x"1";
1319
 
1320
                                when x"2C" =>                   --BIT abs 2nd part.
1321
                                        add_fg <= x"4";
1322
                                        cycle_ctr <= cycle_ctr + x"1";
1323
 
1324
                                when x"CD" =>                   --CMP abs 2nd part.
1325
                                        add_fg <= x"4";
1326
                                        cycle_ctr <= cycle_ctr + x"1";
1327
                                when x"DD" =>                   --CMP, x abs 2nd part.
1328
                                        add_fg <= x"5";
1329
                                        cycle_ctr <= cycle_ctr + x"1";
1330
                                when x"D9" =>                   --CMP, Y abs 2nd part.
1331
                                        add_fg <= x"6";
1332
                                        cycle_ctr <= cycle_ctr + x"1";
1333
                                when x"EC" =>                   --CPX abs 2nd part.
1334
                                        add_fg <= x"4";
1335
                                        cycle_ctr <= cycle_ctr + x"1";
1336
                                when x"CC" =>                   --CPY abs 2nd part.
1337
                                        add_fg <= x"4";
1338
                                        cycle_ctr <= cycle_ctr + x"1";
1339
--      ...............................................................................
1340
                                when x"8D" =>                   --STA abs 2nd part.
1341 3 stanley82
                                        wr_fg <= '1';
1342 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
1343
                                when x"9D" =>                   --STA,x abs 2nd part.
1344 3 stanley82
                                        wr_fg <= '1';
1345 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
1346
                                when x"99" =>                   --STA, y abs 2nd part.
1347 3 stanley82
                                        wr_fg <= '1';
1348 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
1349
                                when x"8E" =>                   --STX abs 2nd part.
1350 3 stanley82
                                        wr_fg <= '1';
1351 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
1352
                                when x"8C" =>                   --STY abs 2nd part.
1353 3 stanley82
                                        wr_fg <= '1';
1354 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
1355
--      ........................................................................
1356
 
1357
                                when x"EE" =>                   --INC abs 2nd part.
1358
                                        add_fg <= x"4";
1359
                                        cycle_ctr <= cycle_ctr + x"1";
1360
                                when x"FE" =>                   --INC, x abs 2nd part.
1361
                                        add_fg <= x"5";
1362
                                        cycle_ctr <= cycle_ctr + x"1";
1363
                                when x"CE" =>                   --DEC abs 2nd part.
1364
                                        add_fg <= x"4";
1365
                                        cycle_ctr <= cycle_ctr + x"1";
1366
                                when x"DE" =>                   --DEC, x abs 2nd part.
1367
                                        add_fg <= x"4";
1368
                                        cycle_ctr <= cycle_ctr + x"1";
1369
                                when x"2E" =>                   --ROL abs 2nd part.
1370
                                        add_fg <= x"4";
1371
                                        cycle_ctr <= cycle_ctr + x"1";
1372
                                when x"3E" =>                   --ROL, x abs 2nd part.
1373
                                        add_fg <= x"5";
1374
                                        cycle_ctr <= cycle_ctr + x"1";
1375
                                when x"6E" =>                   --ROR abs 2nd part.
1376
                                        add_fg <= x"4";
1377
                                        cycle_ctr <= cycle_ctr + x"1";
1378
                                when x"7E" =>                   --ROR, x abs 2nd part.
1379
                                        add_fg <= x"5";
1380
                                        cycle_ctr <= cycle_ctr + x"1";
1381
                                when x"4E" =>                   --LSR abs 2nd part.
1382
                                        add_fg <= x"4";
1383
                                        cycle_ctr <= cycle_ctr + x"1";
1384
                                when x"5E" =>                   --LSR, x abs 2nd part.
1385
                                        add_fg <= x"5";
1386
                                        cycle_ctr <= cycle_ctr + x"1";
1387
                                when x"0E" =>                   --ASL abs 2nd part.
1388
                                        add_fg <= x"4";
1389
                                        cycle_ctr <= cycle_ctr + x"1";
1390
                                when x"1E" =>                   --ASL, x abs 2nd part.
1391
                                        add_fg <= x"5";
1392
                                        cycle_ctr <= cycle_ctr + x"1";
1393
--      ............................................................................
1394
--      ==============================================================================
1395
                                when x"4C" =>                   --JMP abs 2nd part
1396
                                        pc_inc_fg <= '0';
1397
                                        dat2pc_fg <= '1';
1398
                                        cycle_ctr <= cycle_ctr + "1";
1399
                                when x"6C" =>                   --JMP indirect 2nd part
1400
                                        add_fg <= x"4";
1401
                                        pc_inc_fg <= '0';
1402
                                        cycle_ctr <= cycle_ctr + "1";
1403
                                when x"20" =>                   --JSR abs 2nd part
1404
                                        dat2pc_fg <= '1';
1405 3 stanley82
                                        wr_fg <= '1';
1406
                                        dat_out <= reg_pc(15 downto 8);
1407 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
1408
 
1409
                                when x"60" =>                   --RTS second part
1410 6 stanley82
                                        reg_sp <= reg_sp + "1";         --plus
1411 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
1412
                                when x"40" =>                   --RTI second part pull old status from stack
1413 6 stanley82
                                        reg_sp <= reg_sp + "1";         --plus
1414 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
1415
 
1416 6 stanley82
                                when x"00" =>                                   --Break 2nd part cyc 1
1417
                                        if irq_fg = '0' and nmi_fg = '0' then     --Start up, irq and nmi also use
1418
                                                pc_dec_fg <= '0';                --this set of logic.
1419
                                        end if;
1420 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
1421
 
1422
                                when others =>
1423
                                cycle_ctr <= cycle_ctr + x"1";
1424
                        end case;       --Cycle 1
1425
 
1426
 
1427
--      End cycle 1     =========================================================
1428
 
1429
                when x"2" =>
1430
 
1431
                        case instruction_in(7 downto 0) is
1432
--      ====================================================================================
1433
 
1434
                                when x"48" =>                   --PHA 3rd part accumulator onto stack
1435
                                        pc_inc_fg <= '1';
1436
                                        add_fg <= x"0";
1437 6 stanley82
                                        reg_sp <= reg_sp - "1";         --neg
1438 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
1439
                                when x"08" =>                   --PHP 3rd part Status reg onto stack
1440 3 stanley82
                                        wr_fg <= '0';
1441
                                        add_fg <= x"7";
1442 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
1443
 
1444
                                when x"68" =>                   --PLA 3rd part  Pull Accumulator from Stack
1445 3 stanley82
--                                      pc_dec_fg <= '0';
1446 2 stanley82
                                        add_fg <= x"0";
1447
                                        pc_inc_fg <= '1';
1448
                                        cycle_ctr <= cycle_ctr + x"1";
1449
                                when x"28" =>                   --PLP 3rd part  Pull Status from Stack
1450 3 stanley82
--                                      pc_dec_fg <= '0';
1451 2 stanley82
                                        add_fg <= x"0";
1452
                                        pc_inc_fg <= '1';
1453
                                        cycle_ctr <= cycle_ctr + x"1";
1454
 
1455
                                when x"F0" =>                   --BEQ branch true 3rd part.
1456
                                        if branch_fg = '1' then
1457
                                                branch_fg <= '0';
1458
                                                cycle_ctr <= cycle_ctr + x"1";
1459
                                        else
1460
                                                pc_inc_fg <= '0';
1461
                                                cycle_ctr <= x"0";
1462
                                        end if;
1463
                                when x"D0" =>                   --BNE branch true 3rd part.
1464
                                        if branch_fg = '1' then
1465
                                                branch_fg <= '0';
1466
                                                cycle_ctr <= cycle_ctr + x"1";
1467
                                        else
1468
                                                pc_inc_fg <= '0';
1469
                                                cycle_ctr <= x"0";
1470
                                        end if;
1471
                                when x"10" =>                   --BPL plus true 3rd part.
1472
                                        if branch_fg = '1' then
1473
                                                branch_fg <= '0';
1474
                                                cycle_ctr <= cycle_ctr + x"1";
1475
                                        else
1476
                                                pc_inc_fg <= '0';
1477
                                                cycle_ctr <= x"0";
1478
                                        end if;
1479
                                when x"30" =>                   --BM1 negative true 3rd part.
1480
                                        if branch_fg = '1' then
1481
                                                branch_fg <= '0';
1482
                                                cycle_ctr <= cycle_ctr + x"1";
1483
                                        else
1484
                                                pc_inc_fg <= '0';
1485
                                                cycle_ctr <= x"0";
1486
                                        end if;
1487
                                when x"50" =>                   --BVC overflow false 3rd part.
1488
                                        if branch_fg = '1' then
1489
                                                branch_fg <= '0';
1490
                                                cycle_ctr <= cycle_ctr + x"1";
1491
                                        else
1492
                                                pc_inc_fg <= '0';
1493
                                                cycle_ctr <= x"0";
1494
                                        end if;
1495
                                when x"70" =>                   --BVS overflow true 3rd part.
1496
                                        if branch_fg = '1' then
1497
                                                branch_fg <= '0';
1498
                                                cycle_ctr <= cycle_ctr + x"1";
1499
                                        else
1500
                                                pc_inc_fg <= '0';
1501
                                                cycle_ctr <= x"0";
1502
                                        end if;
1503
                                when x"90" =>                   --BCC carry false 3rd part.
1504
                                        if branch_fg = '1' then
1505
                                                branch_fg <= '0';
1506
                                                cycle_ctr <= cycle_ctr + x"1";
1507
                                        else
1508
                                                pc_inc_fg <= '0';
1509
                                                cycle_ctr <= x"0";
1510
                                        end if;
1511
                                when x"B0" =>                   --BCS carry true 3rd part.
1512
                                        if branch_fg = '1' then
1513
                                                branch_fg <= '0';
1514
                                                cycle_ctr <= cycle_ctr + x"1";
1515
                                        else
1516
                                                pc_inc_fg <= '0';
1517
                                                cycle_ctr <= x"0";
1518
                                        end if;
1519 3 stanley82
 
1520 2 stanley82
--      ====================================================================================
1521
                                when x"84" =>                   --STY zero 3rd part proto
1522
                                        pc_inc_fg <= '1';
1523
                                        add_fg <= x"0";
1524
                                        cycle_ctr <= cycle_ctr + x"1";
1525
                                when x"85" =>                   --STA zero 3rd part proto
1526
                                        pc_inc_fg <= '1';
1527
                                        add_fg <= x"0";
1528
                                        cycle_ctr <= cycle_ctr + x"1";
1529
                                when x"86" =>                   --STX zero 3rd part proto
1530
                                        pc_inc_fg <= '1';
1531
                                        add_fg <= x"0";
1532
                                        cycle_ctr <= cycle_ctr + x"1";
1533
                                when x"94" =>                   --STY zero, X 3rd part proto
1534
                                        pc_inc_fg <= '1';
1535
                                        add_fg <= x"0";
1536
                                        cycle_ctr <= cycle_ctr + x"1";
1537
                                when x"95" =>                   --STA zero, X 3rd part proto
1538
                                        pc_inc_fg <= '1';
1539
                                        add_fg <= x"0";
1540
                                        cycle_ctr <= cycle_ctr + x"1";
1541
                                when x"96" =>                   --STX zero, Y 3rd part proto
1542
                                        pc_inc_fg <= '1';
1543
                                        add_fg <= x"0";
1544
                                        cycle_ctr <= cycle_ctr + x"1";
1545
 
1546
--      ========================================================================================
1547
                                when x"A5" =>                   --LDA zero 3rd part proto
1548
                                        pc_inc_fg <= '0';
1549
                                        reg_a(7 downto 0) <= data_rd;
1550
                                        flags_fg <= "01";
1551 3 stanley82
                                        dat_out <= data_rd;
1552 2 stanley82
                                        cycle_ctr <= x"0";
1553
                                when x"A4" =>                   --LDY zero 3rd part
1554
                                        pc_inc_fg <= '0';
1555
                                        reg_y <= data_rd;
1556
                                        flags_fg <= "01";
1557 3 stanley82
                                        dat_out <= data_rd;
1558 2 stanley82
                                        cycle_ctr <= x"0";
1559
                                when x"A6" =>                   --LDX zero 3rd part
1560
                                        pc_inc_fg <= '0';
1561
                                        reg_x <= data_rd;
1562
                                        flags_fg <= "01";
1563 3 stanley82
                                        dat_out <= data_rd;
1564 2 stanley82
                                        cycle_ctr <= x"0";
1565
                                when x"B5" =>                   --LDA zero,X 3rd part
1566
                                        pc_inc_fg <= '0';
1567
                                        reg_a(7 downto 0) <= data_rd;
1568
                                        flags_fg <= "01";
1569 3 stanley82
                                        dat_out <= data_rd;
1570 2 stanley82
                                        cycle_ctr <= x"0";
1571
                                when x"B4" =>                   --LDY zero,X 3rd part
1572
                                        pc_inc_fg <= '0';
1573
                                        reg_y <= data_rd;
1574
                                        flags_fg <= "01";
1575 3 stanley82
                                        dat_out <= data_rd;
1576 2 stanley82
                                        cycle_ctr <= x"0";
1577
                                when x"B6" =>                   --LDX zero,Y 3rd part
1578 3 stanley82
                                        wr_fg <= '0';
1579 2 stanley82
                                        pc_inc_fg <= '0';
1580
                                        reg_x <= data_rd;
1581
                                        flags_fg <= "01";
1582 3 stanley82
                                        dat_out <= data_rd;
1583 2 stanley82
                                        cycle_ctr <= x"0";
1584
                                when x"05" =>                   --ORA zero 3rd part
1585
                                        pc_inc_fg <= '0';
1586
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) or data_rd;
1587
                                        flags_fg <= "01";
1588 3 stanley82
                                        dat_out <= reg_a(7 downto 0) or data_rd;
1589 2 stanley82
                                        cycle_ctr <= x"0";
1590
                                when x"15" =>                   --ORA zero,X 3rd part
1591
                                        pc_inc_fg <= '0';
1592
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) or data_rd;
1593
                                        flags_fg <= "01";
1594 3 stanley82
                                        dat_out <= reg_a(7 downto 0) or data_rd;
1595 2 stanley82
                                        cycle_ctr <= x"0";
1596
                                when x"24" =>                   --BIT zero 3rd part
1597
                                        pc_inc_fg <= '0';
1598
                                        n_fg <= data_rd(7);
1599
                                        v_fg <= data_rd(6);
1600 3 stanley82
                                        dat_out <= reg_a(7 downto 0) and data_rd;
1601 2 stanley82
                                        flags_fg <= "01";
1602
                                        cycle_ctr <= x"0";
1603
                                when x"25" =>                   --AND zero 3rd part
1604
                                        pc_inc_fg <= '0';
1605
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) and data_rd;
1606
                                        flags_fg <= "01";
1607 3 stanley82
                                        dat_out <= reg_a(7 downto 0) and data_rd;
1608 2 stanley82
                                        cycle_ctr <= x"0";
1609
 
1610
                                when x"35" =>                   --AND zero,X 3rd part
1611
                                        pc_inc_fg <= '0';
1612
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) and data_rd;
1613
                                        flags_fg <= "01";
1614 3 stanley82
                                        dat_out <= reg_a(7 downto 0) and data_rd;
1615 2 stanley82
                                        cycle_ctr <= x"0";
1616
 
1617
                                when x"45" =>                   --EOR zero 3rd part
1618
                                        pc_inc_fg <= '0';
1619
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) xor data_rd;
1620
                                        flags_fg <= "01";
1621 3 stanley82
                                        dat_out <= reg_a(7 downto 0) xor data_rd;
1622 2 stanley82
                                        cycle_ctr <= x"0";
1623
 
1624
                                when x"55" =>                   --EOR zero,X 3rd part
1625
                                        pc_inc_fg <= '0';
1626
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) xor data_rd;
1627
                                        flags_fg <= "01";
1628 3 stanley82
                                        dat_out <= reg_a(7 downto 0) xor data_rd;
1629 2 stanley82
                                        cycle_ctr <= x"0";
1630
 
1631
                                when x"65" =>                   --ADC zero 3rd part
1632
                                        pc_inc_fg <= '0';
1633
                                        reg_a <= reg_a + ("0" & data_rd) + ("00000000" & reg_a(8));
1634
                                        flags_fg <= "01";
1635 3 stanley82
                                        dat_out <= reg_a(7 downto 0) + data_rd + ("0000000" & reg_a(8));
1636 2 stanley82
                                        cycle_ctr <= x"0";
1637
 
1638
                                when x"75" =>                   --ADC zero,X 3rd part
1639
                                        pc_inc_fg <= '0';
1640
                                        reg_a <= reg_a + ("0" & data_rd) + ("00000000" & reg_a(8));
1641
                                        flags_fg <= "01";
1642 3 stanley82
                                        dat_out <= reg_a(7 downto 0) + data_rd + ("0000000" & reg_a(8));
1643 2 stanley82
                                        cycle_ctr <= x"0";
1644
 
1645
                                when x"C4" =>                   --CPY zero 3rd part
1646 3 stanley82
                                        flags_fg <= "01";
1647
                                        dat_out <= reg_y - data_rd;
1648
                                        if reg_y >= data_rd then
1649
                                                reg_a(8) <= '1';
1650
                                        else
1651
                                                reg_a(8) <= '0';
1652
                                        end if;
1653 2 stanley82
                                        pc_inc_fg <= '0';
1654
                                        cycle_ctr <= x"0";
1655
                                when x"C5" =>                   --CMP zero 3rd part
1656
                                        flags_fg <= "01";
1657 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd;
1658
                                        if reg_a(7 downto 0) >= data_rd then
1659 2 stanley82
                                                reg_a(8) <= '1';
1660
                                        else
1661
                                                reg_a(8) <= '0';
1662
                                        end if;
1663
                                        pc_inc_fg <= '0';
1664
                                        cycle_ctr <= x"0";
1665
                                when x"C6" =>                   --DEC zero 3rd part
1666 3 stanley82
                                        dat_out <= data_rd - x"01";
1667
                                        dat_out <= data_rd - x"01";
1668
                                        wr_fg <= '1';
1669 2 stanley82
                                        flags_fg <= "01";
1670
                                        cycle_ctr <= cycle_ctr + "1";
1671
                                when x"D5" =>                   --CMP zero,X 3rd part
1672
                                        flags_fg <= "01";
1673 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd;
1674
                                        if reg_a(7 downto 0) >= data_rd then
1675 2 stanley82
                                                reg_a(8) <= '1';
1676
                                        else
1677
                                                reg_a(8) <= '0';
1678
                                        end if;
1679
                                        pc_inc_fg <= '0';
1680
                                        cycle_ctr <= x"0";
1681
                                when x"D6" =>                   --DEC zero,X 3rd part
1682
                                        pc_inc_fg <= '0';
1683
                                        add_fg <= x"0";
1684
                                        reg_a(7 downto 0) <= data_rd;
1685
                                        flags_fg <= "01";
1686 3 stanley82
                                        dat_out <= data_rd;
1687 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1688
                                when x"E4" =>                   --CPX zero 3rd part
1689 3 stanley82
                                        flags_fg <= "01";
1690
                                        dat_out <= reg_x - data_rd;
1691
                                        if reg_X >= data_rd then
1692
                                                reg_a(8) <= '1';
1693
                                        else
1694
                                                reg_a(8) <= '0';
1695
                                        end if;
1696 2 stanley82
                                        pc_inc_fg <= '0';
1697
                                        cycle_ctr <= x"0";
1698
                                when x"E5" =>                   --SBC zero 3rd part
1699
                                        pc_inc_fg <= '0';
1700
                                        reg_a <= reg_a - ("0" & data_rd) - ("00000000" & reg_a(8));
1701 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd - ("0000000" & reg_a(8));
1702 2 stanley82
                                        flags_fg <= "01";
1703
                                        cycle_ctr <= x"0";
1704
 
1705
 
1706
                                when x"F5" =>                   --SBC zero,X 3rd part
1707
                                        pc_inc_fg <= '0';
1708
                                        reg_a <= reg_a - ('0' & data_rd) - ("00000000" & reg_a(8));
1709 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd - ("0000000" & reg_a(8));
1710 2 stanley82
                                        flags_fg <= "01";
1711
                                        cycle_ctr <= x"0";
1712
 
1713
                                when x"E6" =>                   --INC zero 3rd part
1714 3 stanley82
                                        dat_out <= data_rd + x"01";
1715
                                        wr_fg <= '1';
1716 2 stanley82
                                        flags_fg <= "01";
1717
                                        cycle_ctr <= cycle_ctr + "1";
1718
                                when x"F6" =>                   --INC zero,X 3rd part
1719 3 stanley82
                                        dat_out <= data_rd + x"01";
1720
                                        wr_fg <= '1';
1721 2 stanley82
                                        flags_fg <= "01";
1722
                                        cycle_ctr <= cycle_ctr + "1";
1723
 
1724
                                when x"66" =>                   --ROR zero 3rd part
1725 6 stanley82
                                        dat_out(6 downto 0) <= data_rd(7 downto 1);
1726
                                        dat_out(7) <= reg_a(8);
1727 2 stanley82
                                        reg_a(8) <= data_rd(0);
1728 6 stanley82
                                        flags_fg <= "01";
1729 3 stanley82
                                        wr_fg <= '1';
1730 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1731
 
1732
                                when x"76" =>                   --ROR zero,X 3rd part
1733 6 stanley82
                                        dat_out(6 downto 0) <= data_rd(7 downto 1);
1734
                                        dat_out(7) <= reg_a(8);
1735 2 stanley82
                                        reg_a(8) <= data_rd(0);
1736 6 stanley82
                                        flags_fg <= "01";
1737 3 stanley82
                                        wr_fg <= '1';
1738 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1739
                                when x"26" =>                   --ROL zero 3rd part
1740 6 stanley82
                                        dat_out(7 downto 0) <= data_rd(6 downto 0) & reg_a(8);
1741
                                        reg_a(8) <= data_rd(7);
1742 2 stanley82
                                        flags_fg <= "01";
1743 3 stanley82
                                        wr_fg <= '1';
1744 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1745
                                when x"36" =>                   --ROL zero,X 3rd part
1746 6 stanley82
                                        dat_out(7 downto 0) <= data_rd(6 downto 0) & reg_a(8);
1747
                                        reg_a(8) <= data_rd(7);
1748 2 stanley82
                                        flags_fg <= "01";
1749 3 stanley82
                                        wr_fg <= '1';
1750 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1751
                                when x"46" =>                   --LSR zero 3rd part
1752 6 stanley82
                                        dat_out <= '0' & data_rd(7 downto 1);
1753 2 stanley82
                                        reg_a(8) <= data_rd(0);
1754 6 stanley82
                                        flags_fg <= "01";
1755 3 stanley82
                                        wr_fg <= '1';
1756 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1757
                                when x"56" =>                   --LSR zero,X 3rd part
1758 6 stanley82
                                        dat_out <= '0' & data_rd(7 downto 1);
1759 2 stanley82
                                        reg_a(8) <= data_rd(0);
1760 6 stanley82
                                        flags_fg <= "01";
1761 3 stanley82
                                        wr_fg <= '1';
1762 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1763
                                when x"06" =>                   --ASL zero 3rd part
1764
                                        reg_a(8) <= data_rd(7);
1765 3 stanley82
                                        dat_out <= data_rd(6 downto 0) & '0';
1766 6 stanley82
                                        flags_fg <= "01";
1767 3 stanley82
                                        wr_fg <= '1';
1768 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1769
                                when x"16" =>                   --ASL zero,X 3rd part
1770
                                        reg_a(8) <= data_rd(7);
1771 6 stanley82
                                        dat_out <= data_rd(6 downto 0) & '0';
1772 2 stanley82
                                        flags_fg <= "01";
1773 6 stanley82
                                        wr_fg <= '1';                                   wr_fg <= '1';
1774 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1775
--      =============================================================================================
1776
                                when x"A1" =>                   --LDA (zero,x) 3rd part proto
1777 6 stanley82
                                        add_fg <= x"4";
1778 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1779
                                when x"B1" =>                   --LDA (zero),y 3rd part proto
1780
                                        add_fg <= x"6";
1781
                                        cycle_ctr <= cycle_ctr + "1";
1782
 
1783
                                when x"21" =>                   --AMD (zero,x) 3rd part proto
1784 6 stanley82
                                        add_fg <= x"4";
1785 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1786
                                when x"31" =>                   --AND (zero),y 3rd part proto
1787
                                        add_fg <= x"6";
1788
                                        cycle_ctr <= cycle_ctr + "1";
1789
 
1790
                                when x"41" =>                   --EOR (zero,x) 3rd part proto
1791 6 stanley82
                                        add_fg <= x"4";
1792 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1793
                                when x"51" =>                   --EOR (zero),y 3rd part proto
1794
                                        add_fg <= x"6";
1795
                                        cycle_ctr <= cycle_ctr + "1";
1796
 
1797
                                when x"01" =>                   --OR (zero,x) 3rd part proto
1798 6 stanley82
                                        add_fg <= x"4";
1799 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1800
                                when x"11" =>                   --OR (zero),y 3rd part proto
1801
                                        add_fg <= x"6";
1802
                                        cycle_ctr <= cycle_ctr + "1";
1803
 
1804
                                when x"61" =>                   --ADC (zero,x) 3rd part proto
1805 6 stanley82
                                        add_fg <= x"4";
1806 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1807
                                when x"71" =>                   --ADC (zero),y 3rd part proto
1808
                                        add_fg <= x"6";
1809
                                        cycle_ctr <= cycle_ctr + "1";
1810
 
1811
                                when x"E1" =>                   --SBC (zero,x) 3rd part proto
1812 6 stanley82
                                        add_fg <= x"4";
1813 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1814
                                when x"F1" =>                   --SBC (zero),y 3rd part proto
1815
                                        add_fg <= x"6";
1816
                                        cycle_ctr <= cycle_ctr + "1";
1817
 
1818
                                when x"C1" =>                   --CMP (zero,x) 3rd part proto
1819 6 stanley82
                                        add_fg <= x"4";
1820 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1821
                                when x"D1" =>                   --CMP (zero),y 3rd part proto
1822
                                        add_fg <= x"6";
1823
                                        cycle_ctr <= cycle_ctr + "1";
1824
 
1825
                                when x"81" =>                   --STA (zero,x) 3rd part proto
1826
                                        add_fg <= x"4";
1827 3 stanley82
                                        wr_fg <= '1';
1828
                                        dat_out <= reg_a(7 downto 0);
1829 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1830
                                when x"91" =>                   --STA (zero),y 3rd part proto
1831
                                        add_fg <= x"6";
1832 3 stanley82
                                        wr_fg <= '1';
1833
                                        dat_out <= reg_a(7 downto 0);
1834 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
1835
--      ==============================================================================
1836
                                when x"AD" =>                   --LDA abs 3rd part.
1837
                                        add_fg <= x"0";
1838
                                        pc_inc_fg <= '1';
1839
                                        cycle_ctr <= cycle_ctr + "1";
1840
 
1841
                                when x"BD" =>                   --LDA, x abs 3rd part.
1842
                                        add_fg <= x"0";
1843
                                        pc_inc_fg <= '1';
1844
                                        cycle_ctr <= cycle_ctr + "1";
1845
 
1846
                                when x"B9" =>                   --LDA, Y abs 3rd part
1847
                                        add_fg <= x"0";
1848
                                        pc_inc_fg <= '1';
1849
                                        cycle_ctr <= cycle_ctr + "1";
1850
 
1851
 
1852
                                when x"2D" =>                   --AND abs 3rd part.
1853
                                        add_fg <= x"0";
1854
                                        pc_inc_fg <= '1';
1855
                                        cycle_ctr <= cycle_ctr + "1";
1856
 
1857
                                when x"3D" =>                   --AND, x abs 3rd part.
1858
                                        add_fg <= x"0";
1859
                                        pc_inc_fg <= '1';
1860
                                        cycle_ctr <= cycle_ctr + "1";
1861
                                when x"39" =>                   --AND, Y abs 3rd part.
1862
                                        add_fg <= x"0";
1863
                                        pc_inc_fg <= '1';
1864
                                        cycle_ctr <= cycle_ctr + "1";
1865
 
1866
                                when x"0D" =>                   --ORA abs 3rd part.
1867
                                        add_fg <= x"0";
1868
                                        pc_inc_fg <= '1';
1869
                                        cycle_ctr <= cycle_ctr + "1";
1870
                                when x"1D" =>                   --ORA, x abs 3rd part.
1871
                                        add_fg <= x"0";
1872
                                        pc_inc_fg <= '1';
1873
                                        cycle_ctr <= cycle_ctr + "1";
1874
                                when x"19" =>                   --ORA, Y abs 3rd part.
1875
                                        add_fg <= x"0";
1876
                                        pc_inc_fg <= '1';
1877
                                        cycle_ctr <= cycle_ctr + "1";
1878
 
1879
                                when x"4D" =>                   --EOR abs 3rd part.
1880
                                        add_fg <= x"0";
1881
                                        pc_inc_fg <= '1';
1882
                                        cycle_ctr <= cycle_ctr + "1";
1883
                                when x"5D" =>                   --EOR, x abs 3rd part.
1884
                                        add_fg <= x"0";
1885
                                        pc_inc_fg <= '1';
1886
                                        cycle_ctr <= cycle_ctr + "1";
1887
                                when x"59" =>                   --EOR, Y abs 3rd part.
1888
                                        add_fg <= x"0";
1889
                                        pc_inc_fg <= '1';
1890
                                        cycle_ctr <= cycle_ctr + "1";
1891
 
1892
                                when x"6D" =>                   --ADC abs 3rd part.
1893
                                        add_fg <= x"0";
1894
                                        pc_inc_fg <= '1';
1895
                                        cycle_ctr <= cycle_ctr + "1";
1896
                                when x"7D" =>                   --ADC, x abs 3rd part.
1897
                                        add_fg <= x"0";
1898
                                        pc_inc_fg <= '1';
1899
                                        cycle_ctr <= cycle_ctr + "1";
1900
                                when x"79" =>                   --ADC, Y abs 3rd part.
1901
                                        add_fg <= x"0";
1902
                                        pc_inc_fg <= '1';
1903
                                        cycle_ctr <= cycle_ctr + "1";
1904
 
1905
                                when x"ED" =>                   --SBC abs 3rd part.
1906
                                        add_fg <= x"0";
1907
                                        pc_inc_fg <= '1';
1908
                                        cycle_ctr <= cycle_ctr + "1";
1909
                                when x"FD" =>                   --SBC, x abs 3rd part.
1910
                                        add_fg <= x"0";
1911
                                        pc_inc_fg <= '1';
1912
                                        cycle_ctr <= cycle_ctr + "1";
1913
                                when x"F9" =>                   --SBC, Y abs 3rd part.
1914
                                        add_fg <= x"0";
1915
                                        pc_inc_fg <= '1';
1916
                                        cycle_ctr <= cycle_ctr + "1";
1917
 
1918
                                when x"AE" =>                   --LDX abs 3rd part.
1919
                                        add_fg <= x"0";
1920
                                        pc_inc_fg <= '1';
1921
                                        cycle_ctr <= cycle_ctr + "1";
1922
                                when x"BE" =>                   --LDX, y abs 3rd part.
1923
                                        add_fg <= x"0";
1924
                                        pc_inc_fg <= '1';
1925
                                        cycle_ctr <= cycle_ctr + "1";
1926
                                when x"AC" =>                   --LDY abs 3rd part.
1927
                                        add_fg <= x"0";
1928
                                        pc_inc_fg <= '1';
1929
                                        cycle_ctr <= cycle_ctr + "1";
1930
                                when x"BC" =>                   --LDY, x abs 3rd part.
1931
                                        add_fg <= x"0";
1932
                                        pc_inc_fg <= '1';
1933
                                        cycle_ctr <= cycle_ctr + "1";
1934
 
1935
                                when x"2C" =>                   --BIT abs 3rd part.
1936
                                        add_fg <= x"0";
1937
                                        pc_inc_fg <= '1';
1938
                                        cycle_ctr <= cycle_ctr + "1";
1939
 
1940
                                when x"CD" =>                   --CMP abs 3rd part.
1941
                                        add_fg <= x"0";
1942
                                        pc_inc_fg <= '1';
1943
                                        cycle_ctr <= cycle_ctr + "1";
1944
                                when x"DD" =>                   --CMP, x abs 3rd part.
1945
                                        add_fg <= x"0";
1946
                                        pc_inc_fg <= '1';
1947
                                        cycle_ctr <= cycle_ctr + "1";
1948
                                when x"D9" =>                   --CMP, Y abs 3rd part.
1949
                                        add_fg <= x"0";
1950
                                        pc_inc_fg <= '1';
1951
                                        cycle_ctr <= cycle_ctr + "1";
1952
                                when x"EC" =>                   --CPX abs 3rd part.
1953
                                        add_fg <= x"0";
1954
                                        pc_inc_fg <= '1';
1955
                                        cycle_ctr <= cycle_ctr + "1";
1956
                                when x"CC" =>                   --CPY abs 3rd part.
1957
                                        add_fg <= x"0";
1958
                                        pc_inc_fg <= '1';
1959
                                        cycle_ctr <= cycle_ctr + "1";
1960
 
1961
--      ................................................................................
1962
                                when x"8D" =>                   --STA abs 3rd part.
1963 3 stanley82
                                        wr_fg <= '0';
1964 2 stanley82
                                        add_fg <= x"4";
1965
                                        pc_inc_fg <= '1';
1966
                                        cycle_ctr <= cycle_ctr + "1";
1967
                                when x"9D" =>                   --STA,x abs 3rd part.
1968 3 stanley82
                                        wr_fg <= '0';
1969 2 stanley82
                                        add_fg <= x"5";
1970
                                        pc_inc_fg <= '1';
1971
                                        cycle_ctr <= cycle_ctr + "1";
1972
                                when x"99" =>                   --STA, y abs 3rd part.
1973 3 stanley82
                                        wr_fg <= '0';
1974 2 stanley82
                                        add_fg <= x"6";
1975
                                        pc_inc_fg <= '1';
1976
                                        cycle_ctr <= cycle_ctr + "1";
1977
                                when x"8E" =>                   --STX abs 3rd part.
1978 3 stanley82
                                        wr_fg <= '0';
1979 2 stanley82
                                        add_fg <= x"4";
1980
                                        pc_inc_fg <= '1';
1981
                                        cycle_ctr <= cycle_ctr + "1";
1982
                                when x"8C" =>                   --STY abs 3rd part.
1983 3 stanley82
                                        wr_fg <= '0';
1984 2 stanley82
                                        add_fg <= x"4";
1985
                                        pc_inc_fg <= '1';
1986
                                        cycle_ctr <= cycle_ctr + "1";
1987
--      ................................................................................
1988
 
1989
                                when x"EE" =>                   --INC abs 3rd part.
1990
                                        add_fg <= x"f";
1991
                                        cycle_ctr <= cycle_ctr + "1";
1992
                                when x"FE" =>                   --INC, x abs 3rd part.
1993
                                        add_fg <= x"f";
1994
                                        cycle_ctr <= cycle_ctr + "1";
1995
                                when x"CE" =>                   --DEC abs 3rd part.
1996
                                        add_fg <= x"f";
1997
                                        cycle_ctr <= cycle_ctr + "1";
1998
                                when x"DE" =>                   --DEC, x abs 3rd part.
1999
                                        add_fg <= x"f";
2000
                                        cycle_ctr <= cycle_ctr + "1";
2001
                                when x"2E" =>                   --ROL abs 3rd part.
2002
                                        add_fg <= x"f";
2003
                                        cycle_ctr <= cycle_ctr + "1";
2004
                                when x"3E" =>                   --ROL, x abs 3rd part.
2005
                                        add_fg <= x"f";
2006
                                        cycle_ctr <= cycle_ctr + "1";
2007
                                when x"6E" =>                   --ROR abs 3rd part.
2008
                                        add_fg <= x"f";
2009
                                        cycle_ctr <= cycle_ctr + "1";
2010
                                when x"7E" =>                   --ROR, x abs 3rd part.
2011
                                        add_fg <= x"f";
2012
                                        cycle_ctr <= cycle_ctr + "1";
2013
                                when x"4E" =>                   --LSR abs 3rd part.
2014
                                        add_fg <= x"f";
2015
                                        cycle_ctr <= cycle_ctr + "1";
2016
                                when x"5E" =>                   --LSR, x abs 3rd part.
2017
                                        add_fg <= x"f";
2018
                                        cycle_ctr <= cycle_ctr + "1";
2019
                                when x"0E" =>                   --ASL abs 3rd part.
2020
                                        add_fg <= x"f";
2021
                                        cycle_ctr <= cycle_ctr + "1";
2022
                                when x"1E" =>                   --ASL, x abs 3rd part.
2023
                                        add_fg <= x"f";
2024
                                        cycle_ctr <= cycle_ctr + "1";
2025
--      ............................................................................
2026
--      ==============================================================================
2027
                                when x"4C"  =>                  --JMP abs 3rd part
2028
                                        dat2pc_fg <= '0';
2029
                                        cycle_ctr <= cycle_ctr + x"1";
2030
                                when x"6C" =>                   --JMP indirect 3rd part
2031
                                        add_fg <= x"B";
2032
                                        cycle_ctr <= cycle_ctr + x"1";
2033
                                when x"20" =>                   --JSR abs 3rd part
2034
                                        dat2pc_fg <= '0';
2035
                                        add_fg <= x"7";
2036 3 stanley82
                                        wr_fg <= '1';
2037
                                        dat_out <= reg_pc(7 downto 0);
2038 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2039 6 stanley82
                                when x"60" =>                   --RTS 3rd part
2040 2 stanley82
                                        dat2pc_fg <= '1';
2041
                                        add_fg <= x"0";
2042
                                        cycle_ctr <= cycle_ctr + x"1";
2043
                                when x"40" =>           --RTI 3rd part pull old status from stack
2044
                                        pc_dec_fg <= '0';        --Get 1st PC byte
2045
                                        n_fg <= data_rd(7);     --cyc 6
2046
                                        v_fg <= data_rd(6);
2047
                                        b_fg <= data_rd(4);
2048
                                        d_fg <= data_rd(3);
2049
                                        i_fg <= data_rd(2);
2050
                                        z_fg <= data_rd(1);
2051
                                        reg_a(8) <= data_rd(0);
2052 6 stanley82
                                        reg_sp <= reg_sp + "1";         --plus
2053 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2054
 
2055 6 stanley82
                                when x"00" =>                                   --Break 3rd part  cyc 2
2056
                                        if irq_fg = '0' and nmi_fg = '0' then     --Start up, irq and nmi also use
2057
                                                b_fg <= '1';                    --this set of logic.
2058
                                        else
2059
                                                b_fg <= '0';
2060
                                        end if;
2061
                                        wr_fg <= '1';                   --put dat_out onto stack
2062
                                        dat_out <= reg_pc(15 downto 8);
2063
                                        add_fg <= x"7";
2064
                                        pc_dec_fg <= '0';
2065 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2066
 
2067
                                when others =>
2068
                                cycle_ctr <= cycle_ctr + x"1";
2069
                        end case;       --Cycle 2
2070
 
2071
------------------------------------------------------------------------
2072
--      Cycle 3 is for single byte instructions ie TAY
2073
                when x"3" =>
2074
 
2075
 
2076
 
2077
                        if      instruction_in(7 downto 0) /= x"A2" and
2078
                                (
2079
                                instruction_in(3 downto 0) = x"3" or
2080
                                instruction_in(3 downto 0) = x"7" or
2081
                                instruction_in(3 downto 0) = x"B" or
2082
                                instruction_in(3 downto 0) = x"F"
2083
                                                                ) then          --NOPs
2084
                                        cycle_ctr <= x"0";
2085
                                        pc_dec_fg <= '1';
2086
                        else
2087
 
2088
                        case instruction_in(7 downto 0) is
2089
--      ======================================================================================
2090
                                when x"84" =>                   --STY zero 4th part proto
2091
                                        pc_inc_fg <= '0';
2092
                                        cycle_ctr <= x"0";
2093
                                when x"85" =>                   --STA zero 4th part proto
2094
                                        pc_inc_fg <= '0';
2095
                                        cycle_ctr <= x"0";
2096
                                when x"86" =>                   --STX zero 4th part proto
2097
                                        pc_inc_fg <= '0';
2098
                                        cycle_ctr <= x"0";
2099
                                when x"94" =>                   --STY zero, X 4th part proto
2100
                                        pc_inc_fg <= '0';
2101
                                        cycle_ctr <= x"0";
2102
                                when x"95" =>                   --STA zero, X 4th part proto
2103
                                        pc_inc_fg <= '0';
2104
                                        cycle_ctr <= x"0";
2105
                                when x"96" =>                   --STX zero, Y 4th part proto
2106
                                        pc_inc_fg <= '0';
2107
                                        cycle_ctr <= x"0";
2108
--      =======================================================================================
2109
 
2110
 
2111
                                when x"08" =>                   --PHP 4th part accumulator onto stack
2112 3 stanley82
                                        pc_inc_fg <= '1';
2113
                                        add_fg <= x"0";
2114 6 stanley82
                                        reg_sp <= reg_sp - "1";         --neg
2115 3 stanley82
                                        cycle_ctr <=  cycle_ctr + x"1";
2116 2 stanley82
 
2117
                                when x"48" =>                   --PHA 4th part accumulator onto stack
2118
                                        pc_inc_fg <= '0';
2119
                                        cycle_ctr <=  x"0";
2120
 
2121
 
2122
                                when x"68" =>                   --PLA 4th part  Pull Accumulator from Stack
2123
                                        reg_a(7 downto 0) <= data_rd;
2124
                                        pc_inc_fg <= '0';
2125
                                        cycle_ctr <= x"0";
2126
                                when x"28" =>                   --PLP 4th part  Pull Status from Stack
2127
                                        n_fg <= data_rd(7);
2128
                                        v_fg <= data_rd(6);
2129 6 stanley82
                                        b_fg <= data_rd(4);
2130 2 stanley82
                                        d_fg <= data_rd(3);
2131
                                        i_fg <= data_rd(2);
2132
                                        z_fg <= data_rd(1);
2133
                                        reg_a(8) <= data_rd(0);
2134
                                        pc_inc_fg <= '0';
2135
                                        cycle_ctr <= x"0";
2136
 
2137
                                when x"F0" =>                   --BEQ branch true 4th part.
2138
                                                branch_fg <= '0';
2139
                                                pc_inc_fg <= '1';
2140
                                                cycle_ctr <= cycle_ctr + x"1";
2141
                                when x"D0" =>                   --BNE branch true 4th part.
2142
                                                branch_fg <= '0';
2143
                                                pc_inc_fg <= '1';
2144
                                                cycle_ctr <= cycle_ctr + x"1";
2145
                                when x"10" =>                   --BPL plus true 4th part.
2146
                                                branch_fg <= '0';
2147
                                                pc_inc_fg <= '1';
2148
                                                cycle_ctr <= cycle_ctr + x"1";
2149
                                when x"30" =>                   --BM1 negative true 4th part.
2150
                                                branch_fg <= '0';
2151
                                                pc_inc_fg <= '1';
2152
                                                cycle_ctr <= cycle_ctr + x"1";
2153
                                when x"50" =>                   --BVC overflow false 4th part.
2154
                                                branch_fg <= '0';
2155
                                                pc_inc_fg <= '1';
2156
                                                cycle_ctr <= cycle_ctr + x"1";
2157
                                when x"70" =>                   --BVS overflow true 4th part.
2158
                                                branch_fg <= '0';
2159
                                                pc_inc_fg <= '1';
2160
                                                cycle_ctr <= cycle_ctr + x"1";
2161
                                when x"90" =>                   --BCC carry false 4th part.
2162
                                                branch_fg <= '0';
2163
                                                pc_inc_fg <= '1';
2164
                                                cycle_ctr <= cycle_ctr + x"1";
2165
                                when x"B0" =>                   --BCS carry true 4th part.
2166
                                                branch_fg <= '0';
2167
                                                pc_inc_fg <= '1';
2168
                                                cycle_ctr <= cycle_ctr + x"1";
2169
 
2170
--      ======================================================================================
2171
 
2172
                                when x"E6" =>                   --INC zero fourth part
2173 3 stanley82
                                        wr_fg <= '0';
2174 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2175
 
2176
                                when x"F6" =>                   --INC zero,X fourth part
2177 3 stanley82
                                        wr_fg <= '0';
2178 2 stanley82
                                        cycle_ctr <= x"0";
2179
                                when x"C6" =>                   --DEC zero fourth part
2180 3 stanley82
                                        wr_fg <= '0';
2181 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2182
                                when x"D6" =>                   --DEC zero,X fourth part
2183 3 stanley82
                                        wr_fg <= '0';
2184 2 stanley82
                                        cycle_ctr <= x"0";
2185
 
2186
                                when x"26" =>                   --ROL zero fourth part
2187 3 stanley82
                                        wr_fg <= '0';
2188 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2189
                                when x"36" =>                   --ROL zero,X fourth part
2190 3 stanley82
                                        wr_fg <= '0';
2191 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2192
                                when x"66" =>                   --ROR zero fourth part
2193 3 stanley82
                                        wr_fg <= '0';
2194 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2195
                                when x"76" =>                   --ROR zero,X fourth part
2196 3 stanley82
                                        wr_fg <= '0';
2197 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2198
                                when x"06" =>                   --ASL zero fourth part
2199 3 stanley82
                                        wr_fg <= '0';
2200 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2201
                                when x"16" =>                   --ASL zero,X fourth part
2202 3 stanley82
                                        wr_fg <= '0';
2203 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2204
                                when x"46" =>                   --LSR zero fourth part
2205 3 stanley82
                                        wr_fg <= '0';
2206 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2207
                                when x"56" =>                   --LSR zero,X fourth part
2208 3 stanley82
                                        wr_fg <= '0';
2209 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2210
--
2211
--      ==============================================================================
2212
                                when x"AD" =>                   --LDA abs 4th part.
2213
                                        reg_a(7 downto 0) <= data_rd;
2214
                                        flags_fg <= "01";
2215 3 stanley82
                                        dat_out <= data_rd;
2216 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2217
                                when x"BD" =>                   --LDA, x abs 4th part.
2218
                                        reg_a(7 downto 0) <= data_rd;
2219
                                        flags_fg <= "01";
2220 3 stanley82
                                        dat_out <= data_rd;
2221 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2222
 
2223
                                when x"B9" =>                   --LDA, Y abs 4th part
2224
                                        reg_a(7 downto 0) <= data_rd;
2225
                                        flags_fg <= "01";
2226 3 stanley82
                                        dat_out <= data_rd;
2227 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2228
                                when x"2D" =>                   --AND abs 4th part.
2229
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) and data_rd;
2230
                                        flags_fg <= "01";
2231 3 stanley82
                                        dat_out <= reg_a(7 downto 0) and data_rd;
2232 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2233
                                when x"3D" =>                   --AND, x abs 4th part.
2234
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) and data_rd;
2235
                                        flags_fg <= "01";
2236 3 stanley82
                                        dat_out <= reg_a(7 downto 0) and data_rd;
2237 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2238
                                when x"39" =>                   --AND, Y abs 4th part.
2239
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) and data_rd;
2240
                                        flags_fg <= "01";
2241 3 stanley82
                                        dat_out <= reg_a(7 downto 0) and data_rd;
2242 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2243
 
2244
                                when x"0D" =>                   --ORA abs 4th part.
2245
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) or data_rd;
2246
                                        flags_fg <= "01";
2247 3 stanley82
                                        dat_out <= reg_a(7 downto 0) or data_rd;
2248 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2249
                                when x"1D" =>                   --ORA, x abs 4th part.
2250
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) or data_rd;
2251
                                        flags_fg <= "01";
2252 3 stanley82
                                        dat_out <= reg_a(7 downto 0) or data_rd;
2253 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2254
                                when x"19" =>                   --ORA, Y abs 4th part.
2255
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) or data_rd;
2256
                                        flags_fg <= "01";
2257 3 stanley82
                                        dat_out <= reg_a(7 downto 0) or data_rd;
2258 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2259
 
2260
                                when x"4D" =>                   --EOR abs 4th part.
2261
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) xor data_rd;
2262
                                        flags_fg <= "01";
2263 3 stanley82
                                        dat_out <= reg_a(7 downto 0) xor data_rd;
2264 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2265
                                when x"5D" =>                   --EOR, x abs 4th part.
2266
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) xor data_rd;
2267
                                        flags_fg <= "01";
2268 3 stanley82
                                        dat_out <= reg_a(7 downto 0) xor data_rd;
2269 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2270
                                when x"59" =>                   --EOR, Y abs 4th part.
2271
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) xor data_rd;
2272
                                        flags_fg <= "01";
2273 3 stanley82
                                        dat_out <= reg_a(7 downto 0) xor data_rd;
2274 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2275
 
2276
                                when x"6D" =>                   --ADC abs 4th part.
2277
                                        reg_a <= reg_a + ("0" & data_rd) + ("00000000" & reg_a(8));
2278
                                        flags_fg <= "01";
2279 3 stanley82
                                        dat_out <= reg_a(7 downto 0) + data_rd + ("0000000" & reg_a(8));
2280 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2281
                                when x"7D" =>                   --ADC, x abs 4th part.
2282
                                        reg_a <= reg_a + ("0" & data_rd) + ("00000000" & reg_a(8));
2283
                                        flags_fg <= "01";
2284 3 stanley82
                                        dat_out <= reg_a(7 downto 0) + data_rd + ("0000000" & reg_a(8));
2285 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2286
                                when x"79" =>                   --ADC, Y abs 4th part.
2287
                                        reg_a <= reg_a + ("0" & data_rd) + ("00000000" & reg_a(8));
2288
                                        flags_fg <= "01";
2289 3 stanley82
                                        dat_out <= reg_a(7 downto 0) + data_rd + ("0000000" & reg_a(8));
2290 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2291
 
2292
                                when x"ED" =>                   --SBC abs 4th part.
2293
                                        reg_a <= reg_a - ("0" & data_rd) - ("00000000" & reg_a(8));
2294
                                        flags_fg <= "01";
2295 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd - ("0000000" & reg_a(8));
2296 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2297
                                when x"FD" =>                   --SBC, x abs 4th part.
2298
                                        reg_a <= reg_a - ("0" & data_rd) - ("00000000" & reg_a(8));
2299
                                        flags_fg <= "01";
2300 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd - ("0000000" & reg_a(8));
2301 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2302
                                when x"F9" =>                   --SBC, Y abs 4th part.
2303
                                        reg_a <= reg_a - ("0" & data_rd) - ("00000000" & reg_a(8));
2304
                                        flags_fg <= "01";
2305 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd - ("0000000" & reg_a(8));
2306 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2307
 
2308
                                when x"AE" =>                   --LDX abs 4th part.
2309
                                        reg_x <= data_rd;
2310
                                        flags_fg <= "01";
2311 3 stanley82
                                        dat_out <= data_rd;
2312 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2313
                                when x"BE" =>                   --LDX, y abs 4th part.
2314
                                        reg_x <= data_rd;
2315
                                        flags_fg <= "01";
2316 3 stanley82
                                        dat_out <= data_rd;
2317 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2318
                                when x"AC" =>                   --LDY abs 4th part.
2319
                                        reg_y <= data_rd;
2320
                                        flags_fg <= "01";
2321 3 stanley82
                                        dat_out <= data_rd;
2322 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2323
                                when x"BC" =>                   --LDY, x abs 4th part.
2324
                                        reg_y <= data_rd;
2325
                                        flags_fg <= "01";
2326 3 stanley82
                                        dat_out <= data_rd;
2327 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2328
                                when x"2C" =>                   --BIT abs 4th part.
2329
                                        flags_fg <= "01";
2330 3 stanley82
                                        dat_out <= reg_a(7 downto 0) and data_rd;
2331 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2332
 
2333
                                when x"CD" =>                   --CMP abs 4th part.
2334
                                        flags_fg <= "01";
2335 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd;
2336
                                        if reg_a(7 downto 0) >= data_rd then
2337 2 stanley82
                                                reg_a(8) <= '1';
2338
                                        else
2339
                                                reg_a(8) <= '0';
2340
                                        end if;
2341
                                        cycle_ctr <= cycle_ctr + x"1";
2342
                                when x"DD" =>                   --CMP, x abs 4th part.
2343
                                        flags_fg <= "01";
2344 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd;
2345
                                        if reg_a(7 downto 0) >= data_rd then
2346 2 stanley82
                                                reg_a(8) <= '1';
2347
                                        else
2348
                                                reg_a(8) <= '0';
2349
                                        end if;
2350
                                        cycle_ctr <= cycle_ctr + x"1";
2351
                                when x"D9" =>                   --CMP, Y abs 4th part.
2352
                                        flags_fg <= "01";
2353 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd;
2354
                                        if reg_a(7 downto 0) >= data_rd then
2355 2 stanley82
                                                reg_a(8) <= '1';
2356
                                        else
2357
                                                reg_a(8) <= '0';
2358
                                        end if;
2359
                                        cycle_ctr <= cycle_ctr + x"1";
2360
                                when x"EC" =>                   --CPX abs 4th part.
2361 3 stanley82
                                        flags_fg <= "01";
2362
                                        dat_out <= reg_x - data_rd;
2363 2 stanley82
                                        if reg_x >= data_rd then
2364
                                                reg_a(8) <= '1';
2365
                                        else
2366
                                                reg_a(8) <= '0';
2367
                                        end if;
2368
                                        cycle_ctr <= cycle_ctr + x"1";
2369
                                when x"CC" =>                   --CPY abs 4th part.
2370 3 stanley82
                                        flags_fg <= "01";
2371
                                        dat_out <= reg_y - data_rd;
2372 2 stanley82
                                        if reg_y >= data_rd then
2373
                                                reg_a(8) <= '1';
2374
                                        else
2375
                                                reg_a(8) <= '0';
2376
                                        end if;
2377
                                        cycle_ctr <= cycle_ctr + x"1";
2378
--      .................................................................................
2379
                                when x"8D" =>                   --STA abs 4th part.
2380
                                        add_fg <= x"0";
2381
                                        cycle_ctr <= cycle_ctr + x"1";
2382
                                when x"9D" =>                   --STA,x abs 4th part.
2383
                                        add_fg <= x"0";
2384
                                        cycle_ctr <= cycle_ctr + x"1";
2385
                                when x"99" =>                   --STA, y abs 4th part.
2386
                                        add_fg <= x"0";
2387
                                        pc_inc_fg <= '1';
2388
                                        cycle_ctr <= cycle_ctr + x"1";
2389
                                when x"8E" =>                   --STX abs 4th part.
2390
                                        add_fg <= x"0";
2391
                                        pc_inc_fg <= '1';
2392
                                        cycle_ctr <= cycle_ctr + x"1";
2393
                                when x"8C" =>                   --STY abs 4th part.
2394
                                        add_fg <= x"0";
2395
                                        pc_inc_fg <= '1';
2396
                                        cycle_ctr <= cycle_ctr + x"1";
2397
--      ........................................................................
2398
 
2399
                                when x"EE" =>                   --INC abs 4th part.
2400 3 stanley82
                                        dat_out <= data_rd + x"01";
2401
                                        wr_fg <= '1';
2402 2 stanley82
                                        flags_fg <= "01";
2403
                                        cycle_ctr <= cycle_ctr + x"1";
2404
                                when x"FE" =>                   --INC, x abs 4th part.
2405 3 stanley82
                                        dat_out <= data_rd + x"01";
2406
                                        wr_fg <= '1';
2407 2 stanley82
                                        flags_fg <= "01";
2408
                                        cycle_ctr <= cycle_ctr + x"1";
2409
                                when x"CE" =>                   --DEC abs 4th part.
2410 3 stanley82
                                        dat_out <= data_rd - x"01";
2411
                                        wr_fg <= '1';
2412 2 stanley82
                                        flags_fg <= "01";
2413
                                        cycle_ctr <= cycle_ctr + x"1";
2414
                                when x"DE" =>                   --DEC, x abs 4th part.
2415 3 stanley82
                                        dat_out <= data_rd - x"01";
2416
                                        wr_fg <= '1';
2417 2 stanley82
                                        flags_fg <= "01";
2418
                                        cycle_ctr <= cycle_ctr + x"1";
2419
 
2420
                                when x"2E" =>                   --ROL abs 4th part.
2421 6 stanley82
                                        dat_out(7 downto 0) <= data_rd(6 downto 0) & reg_a(8);
2422
                                        reg_a(8) <= data_rd(7);
2423 2 stanley82
                                        flags_fg <= "01";
2424 3 stanley82
                                        wr_fg <= '1';
2425 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
2426
                                when x"3E" =>                   --ROL, x abs 4th part.
2427 6 stanley82
                                        dat_out(7 downto 0) <= data_rd(6 downto 0) & reg_a(8);
2428
                                        reg_a(8) <= data_rd(7);
2429 2 stanley82
                                        flags_fg <= "01";
2430 3 stanley82
                                        wr_fg <= '1';
2431 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
2432
                                when x"6E" =>                   --ROR abs 4th part.
2433 6 stanley82
                                        dat_out(6 downto 0) <= data_rd(7 downto 1);
2434
                                        dat_out(7) <= reg_a(8);
2435 2 stanley82
                                        reg_a(8) <= data_rd(0);
2436 6 stanley82
                                        flags_fg <= "01";
2437 3 stanley82
                                        wr_fg <= '1';
2438 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2439
                                when x"7E" =>                   --ROR, x abs 4th part.
2440 6 stanley82
                                        dat_out(6 downto 0) <= data_rd(7 downto 1);
2441
                                        dat_out(7) <= reg_a(8);
2442 2 stanley82
                                        reg_a(8) <= data_rd(0);
2443 6 stanley82
                                        flags_fg <= "01";
2444 3 stanley82
                                        wr_fg <= '1';
2445 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2446
                                when x"4E" =>                   --LSR abs 4th part.
2447 6 stanley82
                                        dat_out <= '0' & data_rd(7 downto 1);
2448 2 stanley82
                                        reg_a(8) <= data_rd(0);
2449 6 stanley82
                                        flags_fg <= "01";
2450 3 stanley82
                                        wr_fg <= '1';
2451 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
2452
                                when x"5E" =>                   --LSR, x abs 4th part.
2453 6 stanley82
                                        dat_out <= '0' & data_rd(7 downto 1);
2454 2 stanley82
                                        reg_a(8) <= data_rd(0);
2455 6 stanley82
                                        flags_fg <= "01";
2456 3 stanley82
                                        wr_fg <= '1';
2457 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
2458
                                when x"0E" =>                   --ASL abs 4th part.
2459
                                        reg_a(8) <= data_rd(7);
2460 6 stanley82
                                        dat_out <= data_rd(6 downto 0) & '0';
2461
                                        flags_fg <= "01";
2462 3 stanley82
                                        wr_fg <= '1';
2463 6 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
2464 2 stanley82
                                when x"1E" =>                   --ASL, x abs 4th part.
2465
                                        reg_a(8) <= data_rd(7);
2466 6 stanley82
                                        dat_out <= data_rd(6 downto 0) & '0';
2467
                                        flags_fg <= "01";
2468 3 stanley82
                                        wr_fg <= '1';
2469 6 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
2470 2 stanley82
--      ............................................................................
2471
--      ==============================================================================
2472
                                when x"A1" =>                   --LDA (zero,x) 4th part proto
2473
                                        add_fg <= x"0";
2474
                                        pc_inc_fg <= '1';
2475
                                        cycle_ctr <= cycle_ctr + "1";
2476
 
2477
                                when x"B1" =>                   --LDA (zero),y 4th part proto
2478
                                        add_fg <= x"0";
2479
                                        pc_inc_fg <= '1';
2480
                                        cycle_ctr <= cycle_ctr + "1";
2481
 
2482
                                when x"21" =>                   --AND (zero,x) 4th part proto
2483
                                        add_fg <= x"0";
2484
                                        pc_inc_fg <= '1';
2485
                                        cycle_ctr <= cycle_ctr + "1";
2486
 
2487
                                when x"31" =>                   --AND (zero),y 4th part proto
2488
                                        add_fg <= x"0";
2489
                                        pc_inc_fg <= '1';
2490
                                        cycle_ctr <= cycle_ctr + "1";
2491
 
2492
                                when x"41" =>                   --EOR (zero,x) 4th part proto
2493
                                        add_fg <= x"0";
2494
                                        pc_inc_fg <= '1';
2495
                                        cycle_ctr <= cycle_ctr + "1";
2496
 
2497
                                when x"51" =>                   --EOR (zero),y 4th part proto
2498
                                        add_fg <= x"0";
2499
                                        pc_inc_fg <= '1';
2500
                                        cycle_ctr <= cycle_ctr + "1";
2501
 
2502
                                when x"01" =>                   --OR (zero,x) 4th part proto
2503
                                        add_fg <= x"0";
2504
                                        pc_inc_fg <= '1';
2505
                                        cycle_ctr <= cycle_ctr + "1";
2506
 
2507
                                when x"11" =>                   --OR (zero),y 4th part proto
2508
                                        add_fg <= x"0";
2509
                                        pc_inc_fg <= '1';
2510
                                        cycle_ctr <= cycle_ctr + "1";
2511
 
2512
 
2513
                                when x"61" =>                   --ADC (zero,x) 4th part proto
2514
                                        add_fg <= x"0";
2515
                                        pc_inc_fg <= '1';
2516
                                        cycle_ctr <= cycle_ctr + "1";
2517
 
2518
                                when x"71" =>                   --ADC (zero),y 4th part proto
2519
                                        add_fg <= x"0";
2520
                                        pc_inc_fg <= '1';
2521
                                        cycle_ctr <= cycle_ctr + "1";
2522
 
2523
                                when x"E1" =>                   --SBC (zero,x) 4th part proto
2524
                                        add_fg <= x"0";
2525
                                        pc_inc_fg <= '1';
2526
                                        cycle_ctr <= cycle_ctr + "1";
2527
 
2528
                                when x"F1" =>                   --SBC (zero),y 4th part proto
2529
                                        add_fg <= x"0";
2530
                                        pc_inc_fg <= '1';
2531
                                        cycle_ctr <= cycle_ctr + "1";
2532
 
2533
                                when x"C1" =>                   --CMP (zero,x) 4th part proto
2534
                                        add_fg <= x"0";
2535
                                        pc_inc_fg <= '1';
2536
                                        cycle_ctr <= cycle_ctr + "1";
2537
 
2538
                                when x"D1" =>                   --CMP (zero),y 4th part proto
2539
                                        add_fg <= x"0";
2540
                                        pc_inc_fg <= '1';
2541
                                        cycle_ctr <= cycle_ctr + "1";
2542
 
2543
 
2544
                                when x"81" =>                   --STA (zero,x) 4th part proto
2545 3 stanley82
                                        wr_fg <= '0';
2546 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
2547
                                when x"91" =>                   --STA (zero),y 4th part proto
2548 3 stanley82
                                        wr_fg <= '0';
2549 2 stanley82
                                        cycle_ctr <= cycle_ctr + "1";
2550
--      ==================================================================================
2551
 
2552
                                when x"4C"  =>                  --JMP abs 4th part
2553
                                        pc_inc_fg <= '1';
2554
                                        cycle_ctr <= cycle_ctr + x"1";
2555
                                when x"6C" =>                   --JMP abs 4th part
2556
                                        add_fg <= x"0";
2557
                                        dat2pc_fg <= '1';
2558
                                        pc_inc_fg <= '0';
2559
                                        cycle_ctr <= cycle_ctr + x"1";
2560
                                when x"20" =>                   --JSR indirect 4th part
2561 3 stanley82
                                        wr_fg <= '0';
2562 6 stanley82
                                        reg_sp <= reg_sp - "1";         --neg
2563 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2564
                                when x"60" =>                   --RTS fourth part
2565
                                        dat2pc_fg <= '0';
2566
                                        pc_inc_fg <= '1';
2567
                                        cycle_ctr <= cycle_ctr + x"1";
2568
 
2569
                                when x"40" =>                   --RTI forth part
2570
                                        add_fg <= x"7";         --Get 2nd PC byte
2571 6 stanley82
                                        dat2pc_fg <= '1';
2572 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2573
 
2574 6 stanley82
                                when x"00" =>                           --Break 4th part cyc 3
2575
                                        dat_out <= reg_pc(7 downto 0);   --put dat_out onto stack set up dat_out
2576 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2577
 
2578
--------------------------------------------------------------------------------------
2579
                                when others =>
2580
                                        cycle_ctr <= cycle_ctr + x"1";
2581
 
2582
                end case;       --Cycle 3
2583
                end if;                                         --End single byte stuff
2584
 
2585
--      End of cycle 3
2586
--      Cycle 4 is for 2 byte/cycle instructions ie LDA #
2587
--
2588
                when x"4" =>
2589
                        case Instruction_in is
2590
--      ======================================================================================
2591 3 stanley82
                                when x"08" =>                   --PHP 5th part accumulator onto stack
2592
                                        pc_inc_fg <= '0';
2593
                                        cycle_ctr <=  x"0";
2594
 
2595 2 stanley82
                                when x"F0" =>                   --BEQ branch true 5th part.
2596
                                                pc_inc_fg <= '0';
2597
                                                cycle_ctr <= x"0";
2598
                                when x"D0" =>                   --BNE branch true 5th part.
2599
                                                pc_inc_fg <= '0';
2600
                                                cycle_ctr <= x"0";
2601
                                when x"10" =>                   --BPL plus true 5th part.
2602
                                                pc_inc_fg <= '0';
2603
                                                cycle_ctr <= x"0";
2604
                                when x"30" =>                   --BM1 negative true 5th part.
2605
                                                pc_inc_fg <= '0';
2606
                                                cycle_ctr <= x"0";
2607
                                when x"50" =>                   --BVC overflow false 5th part.
2608
                                                pc_inc_fg <= '0';
2609
                                                cycle_ctr <= x"0";
2610
                                when x"70" =>                   --BVS overflow true 5th part.
2611
                                                pc_inc_fg <= '0';
2612
                                                cycle_ctr <= x"0";
2613
                                when x"90" =>                   --BCC carry false 5th part.
2614
                                                pc_inc_fg <= '0';
2615
                                                cycle_ctr <= x"0";
2616
                                when x"B0" =>                   --BCS carry true 5th part.
2617
                                                pc_inc_fg <= '0';
2618
                                                cycle_ctr <= x"0";
2619
--      ======================================================================================
2620
 
2621
                                when x"E6" =>                   --INC zero 5th part
2622
                                        pc_inc_fg <= '1';
2623
                                        add_fg <= x"0";
2624
                                        cycle_ctr <= cycle_ctr + x"1";
2625
 
2626
                                when x"F6" =>                   --INC zero,X 5th part
2627 3 stanley82
                                        wr_fg <= '0';
2628 2 stanley82
                                        pc_inc_fg <= '0';
2629
                                        add_fg <= x"0";
2630
                                        cycle_ctr <= x"0";
2631
                                when x"c6" =>                   --DEC zero 5th part
2632
                                        pc_inc_fg <= '1';
2633
                                        add_fg <= x"0";
2634
                                        cycle_ctr <= cycle_ctr + x"1";
2635
 
2636
                                when x"46" =>                   --LSR zero 5th part
2637
                                        pc_inc_fg <= '1';
2638
                                        add_fg <= x"0";
2639
                                        cycle_ctr <= cycle_ctr + x"1";
2640
                                when x"56" =>                   --LSR zero,X 5th part
2641
                                        pc_inc_fg <= '1';
2642
                                        add_fg <= x"0";
2643
                                        cycle_ctr <= cycle_ctr + x"1";
2644
 
2645
                                when x"66" =>                   --ROR zero 5th part
2646
                                        pc_inc_fg <= '1';
2647
                                        add_fg <= x"0";
2648
                                        cycle_ctr <= cycle_ctr + x"1";
2649
                                when x"76" =>                   --ROR zero,X 5th part
2650
                                        pc_inc_fg <= '1';
2651
                                        add_fg <= x"0";
2652
                                        cycle_ctr <= cycle_ctr + x"1";
2653
                                when x"26" =>                   --ROL zero 5th part
2654
                                        pc_inc_fg <= '1';
2655
                                        add_fg <= x"0";
2656
                                        cycle_ctr <= cycle_ctr + x"1";
2657
                                when x"36" =>                   --ROL zero,X 5th part
2658
                                        pc_inc_fg <= '1';
2659
                                        add_fg <= x"0";
2660
                                        cycle_ctr <= cycle_ctr + x"1";
2661
                                when x"06" =>                   --ASL zero 5th part
2662
                                        pc_inc_fg <= '1';
2663
                                        add_fg <= x"0";
2664
                                        cycle_ctr <= cycle_ctr + x"1";
2665
                                when x"16" =>                   --ASL zero,X 5th part
2666
                                        pc_inc_fg <= '1';
2667
                                        add_fg <= x"0";
2668
                                        cycle_ctr <= cycle_ctr + x"1";
2669
 
2670
 
2671
--
2672
--      ======================================================================================
2673
                                when x"AD" =>                   --LDA 5th part.
2674
                                        pc_inc_fg <= '0';
2675
                                        cycle_ctr <= x"0";
2676
                                when x"BD" =>                   --LDA, x 5th part.
2677
                                        pc_inc_fg <= '0';
2678
                                        cycle_ctr <= x"0";
2679
                                when x"B9" =>                   --LDA, Y 5th part
2680
                                        pc_inc_fg <= '0';
2681
                                        cycle_ctr <= x"0";
2682
 
2683
                                when x"2D" =>                   --AND 5th part.
2684
                                        pc_inc_fg <= '0';
2685
                                        cycle_ctr <= x"0";
2686
                                when x"3D" =>                   --AND, x 5th part.
2687
                                        pc_inc_fg <= '0';
2688
                                        cycle_ctr <= x"0";
2689
                                when x"39" =>                   --AND, Y 5th part.
2690
                                        pc_inc_fg <= '0';
2691
                                        cycle_ctr <= x"0";
2692
 
2693
                                when x"0D" =>                   --ORA 5th part.
2694
                                        pc_inc_fg <= '0';
2695
                                        cycle_ctr <= x"0";
2696
                                when x"1D" =>                   --ORA, x 5th part.
2697
                                        pc_inc_fg <= '0';
2698
                                        cycle_ctr <= x"0";
2699
                                when x"19" =>                   --ORA, Y 5th part.
2700
                                        pc_inc_fg <= '0';
2701
                                        cycle_ctr <= x"0";
2702
 
2703
                                when x"4D" =>                   --EOR 5th part.
2704
                                        pc_inc_fg <= '0';
2705
                                        cycle_ctr <= x"0";
2706
                                when x"5D" =>                   --EOR, x 5th part.
2707
                                        pc_inc_fg <= '0';
2708
                                        cycle_ctr <= x"0";
2709
                                when x"59" =>                   --EOR, Y 5th part.
2710
                                        pc_inc_fg <= '0';
2711
                                        cycle_ctr <= x"0";
2712
 
2713
                                when x"6D" =>                   --ADC 5th part.
2714
                                        pc_inc_fg <= '0';
2715
                                        cycle_ctr <= x"0";
2716
                                when x"7D" =>                   --ADC, x 5th part.
2717
                                        pc_inc_fg <= '0';
2718
                                        cycle_ctr <= x"0";
2719
                                when x"79" =>                   --ADC, Y 5th part.
2720
                                        pc_inc_fg <= '0';
2721
                                        cycle_ctr <= x"0";
2722
 
2723
                                when x"ED" =>                   --SBC 5th part.
2724
                                        pc_inc_fg <= '0';
2725
                                        cycle_ctr <= x"0";
2726
                                when x"FD" =>                   --SBC, x 5th part.
2727
                                        pc_inc_fg <= '0';
2728
                                        cycle_ctr <= x"0";
2729
                                when x"F9" =>                   --SBC, Y 5th part.
2730
                                        pc_inc_fg <= '0';
2731
                                        cycle_ctr <= x"0";
2732
 
2733
                                when x"AE" =>                   --LDX 5th part.
2734
                                        pc_inc_fg <= '0';
2735
                                        cycle_ctr <= x"0";
2736
                                when x"BE" =>                   --LDX, y 5th part.
2737
                                        pc_inc_fg <= '0';
2738
                                        cycle_ctr <= x"0";
2739
                                when x"AC" =>                   --LDY 5th part.
2740
                                        pc_inc_fg <= '0';
2741
                                        cycle_ctr <= x"0";
2742
                                when x"BC" =>                   --LDY, x 5th part.
2743
                                        pc_inc_fg <= '0';
2744
                                        cycle_ctr <= x"0";
2745
 
2746
                                when x"2C" =>                   --BIT 5th part.
2747
                                        pc_inc_fg <= '0';
2748
                                        cycle_ctr <= x"0";
2749
 
2750
                                when x"CD" =>                   --CMP 5th part.
2751 3 stanley82
                                        pc_inc_fg <= '0';
2752 2 stanley82
                                        cycle_ctr <= x"0";
2753
                                when x"DD" =>                   --CMP, x 5th part.
2754
                                        pc_inc_fg <= '0';
2755
                                        cycle_ctr <= x"0";
2756
                                when x"D9" =>                   --CMP, Y 5th part.
2757
                                        pc_inc_fg <= '0';
2758
                                        cycle_ctr <= x"0";
2759
                                when x"EC" =>                   --CPX 5th part.
2760
                                        pc_inc_fg <= '0';
2761
                                        cycle_ctr <= x"0";
2762
                                when x"CC" =>                   --CPY 5th part.
2763
                                        pc_inc_fg <= '0';
2764
                                        cycle_ctr <= x"0";
2765
--      ............................................................................
2766
                                when x"8D" =>                   --STA 5th part.
2767
                                        pc_inc_fg <= '0';
2768
                                        cycle_ctr <= x"0";
2769
                                when x"9D" =>                   --STA,x 5th part.
2770
                                        pc_inc_fg <= '0';
2771
                                        cycle_ctr <= x"0";
2772
                                when x"99" =>                   --STA, y 5th part.
2773
                                        pc_inc_fg <= '0';
2774
                                        cycle_ctr <= x"0";
2775
                                when x"8E" =>                   --STX 5th part.
2776
                                        pc_inc_fg <= '0';
2777
                                        cycle_ctr <= x"0";
2778
                                when x"8C" =>                   --STY 5th part.
2779
                                        pc_inc_fg <= '0';
2780
                                        cycle_ctr <= x"0";
2781
--      ............................................................................
2782
 
2783
                                when x"EE" =>                   --INC abs 5th part.
2784 3 stanley82
                                        wr_fg <= '0';
2785 2 stanley82
                                        pc_inc_fg <= '1';
2786
                                        cycle_ctr <= cycle_ctr + x"1";
2787
 
2788
                                when x"FE" =>                   --INC, x 5th part.
2789 3 stanley82
                                        wr_fg <= '0';
2790 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2791
                                when x"CE" =>                   --DEC 5th part.
2792 3 stanley82
                                        wr_fg <= '0';
2793 2 stanley82
                                        pc_inc_fg <= '1';
2794
                                        cycle_ctr <= cycle_ctr + x"1";
2795
                                when x"DE" =>                   --DEC, x 5th part.
2796 3 stanley82
                                        wr_fg <= '0';
2797 2 stanley82
                                        pc_inc_fg <= '1';
2798
                                        cycle_ctr <= cycle_ctr + x"1";
2799
 
2800
                                when x"2E" =>                   --ROL 5th part.
2801 3 stanley82
                                        wr_fg <= '0';
2802 2 stanley82
                                        pc_inc_fg <= '1';
2803
                                        cycle_ctr <= cycle_ctr + x"1";
2804
                                when x"3E" =>                   --ROL, x 5th part.
2805 3 stanley82
                                        wr_fg <= '0';
2806 2 stanley82
                                        pc_inc_fg <= '1';
2807
                                        cycle_ctr <= cycle_ctr + x"1";
2808
                                when x"6E" =>                   --ROR 5th part.
2809 3 stanley82
                                        wr_fg <= '0';
2810 2 stanley82
                                        pc_inc_fg <= '1';
2811
                                        cycle_ctr <= cycle_ctr + x"1";
2812
                                when x"7E" =>                   --ROR, x 5th part.
2813 3 stanley82
                                        wr_fg <= '0';
2814 2 stanley82
                                        pc_inc_fg <= '1';
2815
                                        cycle_ctr <= cycle_ctr + x"1";
2816
                                when x"4E" =>                   --LSR 5th part.
2817 3 stanley82
                                        wr_fg <= '0';
2818 2 stanley82
                                        pc_inc_fg <= '1';
2819
                                        cycle_ctr <= cycle_ctr + x"1";
2820
                                when x"5E" =>                   --LSR, x 5th part.
2821 3 stanley82
                                        wr_fg <= '0';
2822 2 stanley82
                                        pc_inc_fg <= '1';
2823
                                        cycle_ctr <= cycle_ctr + x"1";
2824
                                when x"0E" =>                   --ASL 5th part.
2825 3 stanley82
                                        wr_fg <= '0';
2826 2 stanley82
                                        pc_inc_fg <= '1';
2827
                                        cycle_ctr <= cycle_ctr + x"1";
2828
                                when x"1E" =>                   --ASL, x 5th part.
2829 3 stanley82
                                        wr_fg <= '0';
2830 2 stanley82
                                        pc_inc_fg <= '1';
2831
                                        cycle_ctr <= cycle_ctr + x"1";
2832
--      ............................................................................
2833
--      ==============================================================================
2834
                                when x"A1" =>                   --LDA (zero,x) 5th part proto
2835
                                        reg_a(7 downto 0) <= data_rd;
2836
                                        flags_fg <= "01";
2837 3 stanley82
                                        dat_out <= data_rd;
2838 2 stanley82
                                        pc_inc_fg <= '0';
2839
                                        cycle_ctr <= x"0";
2840
                                when x"B1" =>                   --LDA (zero),y 5th part proto
2841
                                        reg_a(7 downto 0) <= data_rd;
2842
                                        flags_fg <= "01";
2843 3 stanley82
                                        dat_out <= data_rd;
2844 2 stanley82
                                        pc_inc_fg <= '0';
2845
                                        cycle_ctr <= x"0";
2846
 
2847
                                when x"21" =>                   --AND (zero,x) 5th part proto
2848
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) and data_rd;
2849
                                        flags_fg <= "01";
2850 3 stanley82
                                        dat_out <= reg_a(7 downto 0) and data_rd;
2851 2 stanley82
                                        pc_inc_fg <= '0';
2852
                                        cycle_ctr <= x"0";
2853
                                when x"31" =>                   --AND (zero),y 5th part proto
2854
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) and data_rd;
2855
                                        flags_fg <= "01";
2856 3 stanley82
                                        dat_out <= reg_a(7 downto 0) and data_rd;
2857 2 stanley82
                                        pc_inc_fg <= '0';
2858
                                        cycle_ctr <= x"0";
2859
 
2860
                                when x"42" =>                   --EOR (zero,x) 5th part proto
2861
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) xor data_rd;
2862
                                        flags_fg <= "01";
2863 3 stanley82
                                        dat_out <= reg_a(7 downto 0) xor data_rd;
2864 2 stanley82
                                        pc_inc_fg <= '0';
2865
                                        cycle_ctr <= x"0";
2866
                                when x"51" =>                   --EOR (zero),y 5th part proto
2867
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) xor data_rd;
2868
                                        flags_fg <= "01";
2869 3 stanley82
                                        dat_out <= reg_a(7 downto 0) xor data_rd;
2870 2 stanley82
                                        pc_inc_fg <= '0';
2871
                                        cycle_ctr <= x"0";
2872
 
2873
                                when x"01" =>                   --OR (zero,x) 5th part proto
2874
                                        reg_a(7 downto 0) <= reg_a(7 downto 0)    or data_rd;
2875
                                        flags_fg <= "01";
2876 3 stanley82
                                        dat_out <= reg_a(7 downto 0) or data_rd;
2877 2 stanley82
                                        pc_inc_fg <= '0';
2878
                                        cycle_ctr <= x"0";
2879
                                when x"11" =>                   --OR (zero),y 5th part proto
2880
                                        reg_a(7 downto 0) <= reg_a(7 downto 0) or data_rd;
2881
                                        flags_fg <= "01";
2882 3 stanley82
                                        dat_out <= reg_a(7 downto 0) or data_rd;
2883 2 stanley82
                                        pc_inc_fg <= '0';
2884
                                        cycle_ctr <= x"0";
2885
 
2886
                                when x"61" =>                   --ADC (zero,x) 5th part proto
2887
                                        flags_fg <= "01";
2888
                                        reg_a <= reg_a + ("0" & data_rd) + ("00000000" & reg_a(8));
2889 3 stanley82
                                        dat_out <= reg_a(7 downto 0) + data_rd + ("0000000" & reg_a(8));
2890 2 stanley82
                                        pc_inc_fg <= '0';
2891
                                        cycle_ctr <= x"0";
2892
 
2893
                                when x"71" =>                   --ADC (zero),y 5th part proto
2894
                                        flags_fg <= "01";
2895
                                        reg_a <= reg_a + ("0" & data_rd) + ("00000000" & reg_a(8));
2896 3 stanley82
                                        dat_out <= reg_a(7 downto 0) + data_rd + ("0000000" & reg_a(8));
2897 2 stanley82
                                        pc_inc_fg <= '0';
2898
                                        cycle_ctr <= x"0";
2899
 
2900
                                when x"E1" =>                   --SBC (zero,x) 5th part proto
2901
                                        flags_fg <= "01";
2902
                                        reg_a <= reg_a - ("0" & data_rd) - ("00000000" & reg_a(8));
2903 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd - ("0000000" & reg_a(8));
2904 2 stanley82
                                        pc_inc_fg <= '0';
2905
                                        cycle_ctr <= x"0";
2906
 
2907
                                when x"F1" =>                   --SBC (zero),y 5th part proto
2908
                                        flags_fg <= "01";
2909
                                        reg_a <= reg_a - ("0" & data_rd) - ("00000000" & reg_a(8));
2910 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd - ("0000000" & reg_a(8));
2911 2 stanley82
                                        pc_inc_fg <= '0';
2912
                                        cycle_ctr <= x"0";
2913
                                when x"C1" =>                   --CMP (zero,x) 5th part proto
2914
                                        flags_fg <= "01";
2915 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd;
2916
                                        if reg_a(7 downto 0) >= data_rd then
2917 2 stanley82
                                                reg_a(8) <= '1';
2918
                                        else
2919
                                                reg_a(8) <= '0';
2920
                                        end if;
2921
                                        pc_inc_fg <= '0';
2922
                                        cycle_ctr <= x"0";
2923
 
2924
                                when x"D1" =>                   --CMP (zero),y 5th part proto
2925
                                        flags_fg <= "01";
2926 3 stanley82
                                        dat_out <= reg_a(7 downto 0) - data_rd;
2927
                                        if reg_a(7 downto 0) >= data_rd then
2928 2 stanley82
                                                reg_a(8) <= '1';
2929
                                        else
2930
                                                reg_a(8) <= '0';
2931
                                        end if;
2932
                                        pc_inc_fg <= '0';
2933
                                        cycle_ctr <= x"0";
2934
 
2935
                                when x"81" =>                   --STA (zero,x) 5th part proto
2936
                                        pc_inc_fg <= '1';
2937
                                        add_fg <= x"0";
2938
                                        cycle_ctr <= cycle_ctr + x"1";
2939
                                when x"91" =>                   --STA (zero),y 5th part proto
2940
                                        pc_inc_fg <= '1';
2941
                                        add_fg <= x"0";
2942
                                        cycle_ctr <= cycle_ctr + x"1";
2943
--      ==============================================================================
2944
                                when x"4C"  =>                  --JMP abs 5th part
2945
                                        pc_inc_fg <= '0';
2946
                                        cycle_ctr <= x"0";
2947
                                when x"6C" =>                   --JMP indirect 5th part
2948
                                        pc_inc_fg <= '1';
2949
                                        dat2pc_fg <= '0';
2950
                                        cycle_ctr <= cycle_ctr + x"1";
2951
                                when x"20" =>                   --JSR 5th part
2952
                                        pc_inc_fg <= '1';
2953
                                        add_fg <= x"0";
2954 6 stanley82
                                        reg_sp <= reg_sp - "1";         --neg
2955 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2956
                                when x"60" =>                   --RTS fifth part
2957
                                        dat2pc_fg <= '0';
2958
                                        cycle_ctr <= cycle_ctr + x"1";
2959
 
2960
                                when x"40" =>                   --RTI fifth part
2961
--                                      reg_sp <= reg_sp + "1";
2962
                                        add_fg <= x"0";
2963 6 stanley82
                                        dat2pc_fg <= '0';
2964 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2965
 
2966 6 stanley82
                                when x"00" =>                   --Break 5th extra part cyc 4
2967
                                        dat_out <= n_fg & v_fg & '1' & b_fg & d_fg & i_fg & z_fg & reg_a(8);
2968
                                        reg_sp <= reg_sp - "1";         --neg
2969 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
2970
 
2971
                                when others =>
2972
                                        cycle_ctr <= cycle_ctr + x"1";
2973
 
2974
                        end case;       --Cycle 4
2975
--                      end if;
2976
------------------------------------------------------------------------
2977
--      End of cycle 4
2978
--      Cycle 5 is for 3 byte instructions ie LDA abs
2979
 
2980
                when x"5" =>
2981
                        case Instruction_in is
2982
--      =========================================================================
2983
                                when x"81" =>                   --STA (zero,x) 6th part proto
2984
                                        pc_inc_fg <= '0';
2985
                                        cycle_ctr <= x"0";
2986
                                when x"91" =>                   --STA (zero),y 6th part proto
2987
                                        pc_inc_fg <= '0';
2988
                                        cycle_ctr <= x"0";
2989
 
2990
 
2991
--      ........................................................................................
2992
                                when x"E6" =>                   --INC zero 6th part
2993
                                        pc_inc_fg <= '0';
2994
                                        cycle_ctr <= x"0";
2995
                                when x"c6" =>                   --dec zero 6th part
2996
                                        pc_inc_fg <= '0';
2997
                                        cycle_ctr <= x"0";
2998
                                when x"26" =>                   --ROL zero 6th part
2999
                                        pc_inc_fg <= '0';
3000
                                        cycle_ctr <= x"0";
3001
 
3002
                                when x"F6" =>                   --INC zero,X 6th part
3003
                                        pc_inc_fg <= '0';
3004
                                        cycle_ctr <= x"0";
3005
                                when x"46" =>                   --LSR zero 6th part
3006
                                        pc_inc_fg <= '0';
3007
                                        cycle_ctr <= x"0";
3008
                                when x"56" =>                   --LSR zero,X 6th part
3009
                                        pc_inc_fg <= '0';
3010
                                        cycle_ctr <= x"0";
3011
 
3012
                                when x"66" =>                   --ROR zero 6th part
3013
                                        pc_inc_fg <= '0';
3014
                                        cycle_ctr <= x"0";
3015
                                when x"76" =>                   --ROR zero,X 6th part
3016
                                        pc_inc_fg <= '0';
3017
                                        cycle_ctr <= x"0";
3018
 
3019
                                when x"36" =>                   --ROL zero,X 6th part
3020
                                        pc_inc_fg <= '0';
3021
                                        cycle_ctr <= x"0";
3022
                                when x"06" =>                   --ASL zero 6th part
3023
                                        pc_inc_fg <= '0';
3024
                                        cycle_ctr <= x"0";
3025
                                when x"16" =>                   --ASL zero,X 6th part
3026
                                        pc_inc_fg <= '0';
3027
                                        cycle_ctr <= x"0";
3028
 
3029
 
3030
--==================================================
3031
 
3032
 
3033
                                when x"EE" =>                   --INC abs 6th part.
3034
                                        add_fg <= x"0";
3035
                                        cycle_ctr <= cycle_ctr + x"1";
3036
 
3037
                                when x"FE" =>                   --INC, x 6th part.
3038
                                        add_fg <= x"0";
3039
                                        cycle_ctr <= x"0";
3040
                                when x"CE" =>                   --DEC 6th part.
3041
                                        add_fg <= x"0";
3042
                                        cycle_ctr <= cycle_ctr + x"1";
3043
                                when x"DE" =>                   --DEC, x 6th part.
3044
                                        add_fg <= x"0";
3045
                                        cycle_ctr <= cycle_ctr + x"1";
3046
 
3047
                                when x"2E" =>                   --ROL 6th part.
3048
                                        add_fg <= x"0";
3049
                                        cycle_ctr <= cycle_ctr + x"1";
3050
                                when x"3E" =>                   --ROL, x 6th part.
3051
                                        add_fg <= x"0";
3052
                                        cycle_ctr <= cycle_ctr + x"1";
3053
                                when x"6E" =>                   --ROR 6th part.
3054
                                        add_fg <= x"0";
3055
                                        cycle_ctr <= cycle_ctr + x"1";
3056
                                when x"7E" =>                   --ROR, x 6th part.
3057
                                        add_fg <= x"0";
3058
                                        cycle_ctr <= cycle_ctr + x"1";
3059
                                when x"4E" =>                   --LSR 6th part.
3060
                                        add_fg <= x"0";
3061
                                        cycle_ctr <= cycle_ctr + x"1";
3062
                                when x"5E" =>                   --LSR, x 6th part.
3063
                                        add_fg <= x"0";
3064
                                        cycle_ctr <= cycle_ctr + x"1";
3065
                                when x"0E" =>                   --ASL 6th part.
3066
                                        add_fg <= x"0";
3067
                                        cycle_ctr <= cycle_ctr + x"1";
3068
                                when x"1E" =>                   --ASL, x 6th part.
3069
                                        add_fg <= x"0";
3070
                                        cycle_ctr <= cycle_ctr + x"1";
3071
--      ........................................................................................
3072 6 stanley82
 
3073 2 stanley82
                                when x"6C" =>                   --JMP indirect 6th part
3074
                                        pc_inc_fg <= '0';
3075
                                        cycle_ctr <= x"0";
3076
 
3077
                                when x"60" =>                   --RTS 6th part
3078
                                        pc_inc_fg <= '0';
3079
                                        cycle_ctr <= x"0";
3080
 
3081
                                when x"40" =>                   --RTI sixth part
3082 6 stanley82
                                        pc_inc_fg <= '1';
3083 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
3084
 
3085
                                when x"20" =>                   --JSR 6th part
3086
                                        pc_inc_fg <= '0';
3087
                                        cycle_ctr <= x"0";
3088
 
3089
                                when x"00" =>                   --Break 6th part cyc 5
3090 6 stanley82
                                        wr_fg <= '0';
3091
                                        reg_sp <= reg_sp - "1";         --neg
3092
                                        cycle_ctr <= cycle_ctr + x"1";
3093 2 stanley82
 
3094
                                when others =>
3095 3 stanley82
 
3096 2 stanley82
                                        cycle_ctr <= cycle_ctr + x"1";
3097
                        end  case;      --Cycle 5
3098
 
3099
------------------------------------------------------------------------
3100
--      End of cycle 5
3101
--      Cycle 6 is for 3 byte instructions ie LDA abs
3102
 
3103
                when x"6" =>
3104
                        case Instruction_in is
3105
 
3106
                                when x"EE" =>                   --INC abs 7th part.
3107
                                        pc_inc_fg <= '0';
3108
                                        cycle_ctr <= x"0";
3109
                                when x"cE" =>                   --DEC abs 7th part.
3110
                                        pc_inc_fg <= '0';
3111
                                        cycle_ctr <= x"0";
3112
                                when x"2E" =>                   --ROL abs 7th part.
3113
                                        pc_inc_fg <= '0';
3114
                                        cycle_ctr <= x"0";
3115
                                when x"3E" =>                   --ROL, x abs 7th part.
3116
                                        pc_inc_fg <= '0';
3117
                                        cycle_ctr <= x"0";
3118
                                when x"6E" =>                   --ROR abs 7th part.
3119
                                        pc_inc_fg <= '0';
3120
                                        cycle_ctr <= x"0";
3121
                                when x"7E" =>                   --ROR, x abs 7th part.
3122
                                        pc_inc_fg <= '0';
3123
                                        cycle_ctr <= x"0";
3124
                                when x"4E" =>                   --LSR abs 7th part.
3125
                                        pc_inc_fg <= '0';
3126
                                        cycle_ctr <= x"0";
3127
                                when x"5E" =>                   --LSR, x abs 7th part.
3128
                                        pc_inc_fg <= '0';
3129
                                        cycle_ctr <= x"0";
3130
                                when x"0E" =>                   --ASL abs 7th part.
3131
                                        pc_inc_fg <= '0';
3132
                                        cycle_ctr <= x"0";
3133
                                when x"1E" =>                   --ASL, x abs 7th part.
3134
                                        pc_inc_fg <= '0';
3135
                                        cycle_ctr <= x"0";
3136
--=============================================================================
3137
 
3138
                                when x"40" =>                   --RTI 7th part
3139
                                        pc_inc_fg <= '0';
3140
                                        cycle_ctr <= x"0";
3141
 
3142
                                when x"00" =>                   --Break 7th part cyc 6
3143 6 stanley82
                                        wr_fg <= '0';
3144
                                        reg_sp <= reg_sp - "1";         --neg
3145
                                        if nmi_fg = '0' then
3146
                                                add_fg <= x"9";         --Complete stacking start getting vector
3147
                                        else
3148
                                                add_fg <= x"A";
3149
                                        end if;
3150
                                        cycle_ctr <= cycle_ctr + x"1";
3151 2 stanley82
 
3152
                        when others =>
3153
                                cycle_ctr <=  x"0";
3154
                                --get_inst_fg <= '0';
3155
 
3156
 
3157
                        end  case;      --Cycle 6
3158
--      End of cycle 6
3159
 
3160
 
3161
--      Cycle 8 is for 3 byte instructions ie LDA abs
3162
 
3163
                when x"7" =>
3164
                        case Instruction_in is
3165
 
3166
                                when x"40" =>                   --RTI 8th cyc
3167
                                        cycle_ctr <= x"0";
3168
 
3169
                                when x"00" =>                   --Break 8th part cyc 7
3170 6 stanley82
                                        add_fg <= x"B";
3171
                                        irq_fg <= '0';
3172
                                        nmi_fg <= '0';
3173
                                        nmi_req <= '1';
3174
                                        if irq_fg = '1' then
3175
                                                i_fg <= '1';
3176 2 stanley82
                                        end if;
3177
                                        cycle_ctr <= cycle_ctr + "1";
3178
 
3179
                                when others =>
3180
                                        cycle_ctr <= x"0";
3181
 
3182
                        end  case;      --Cycle 7
3183
--      Cycle 7
3184
                when x"8" =>
3185
                        case Instruction_in is
3186 6 stanley82
                                when x"00" =>                   --Break 9th part cyc 8
3187
                                        dat2pc_fg <= '1';
3188
                                        add_fg <= x"0";
3189
                                        cycle_ctr <= cycle_ctr + "1";
3190 2 stanley82
 
3191 6 stanley82
                                when others =>
3192 2 stanley82
                                        cycle_ctr <= x"0";
3193
 
3194
                        end  case;      --Cycle 8
3195
--      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3196
--      Cycle 9
3197
                when x"9" =>
3198
                        case Instruction_in is
3199 6 stanley82
                                when x"00" =>                   --Break 10th part cyc 9
3200
                                        pc_inc_fg <= '1';
3201
                                        start_fg <= '0';
3202
                                        dat2pc_fg <= '0';
3203
                                        cycle_ctr <= cycle_ctr + "1";
3204 2 stanley82
 
3205
                                when others =>
3206 6 stanley82
                                        cycle_ctr <= x"0";
3207 2 stanley82
                        end  case;      --Cycle 9
3208
--      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3209
--      Cycle A
3210
 
3211
                when x"A" =>
3212
                        case Instruction_in is
3213 6 stanley82
                                when x"00" =>                   --Break 11th part cyc 10
3214
                                        pc_inc_fg <= '0';
3215
                                        cycle_ctr <= x"0";
3216 2 stanley82
 
3217
                                when others =>
3218
                                cycle_ctr <= cycle_ctr + "1";
3219
                                pc_inc_fg <= '0';
3220
 
3221
                        end  case;      --Cycle A
3222
--      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3223
--      Cycle B
3224
 
3225
                when x"B" =>
3226
                        case Instruction_in is
3227
 
3228
                                when others =>
3229
                                        cycle_ctr <= cycle_ctr + "1";
3230
                                        pc_inc_fg <= '0';
3231
 
3232
                        end  case;      --Cycle B
3233
--      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3234
--      Cycle C
3235
 
3236
                when x"C" =>
3237
                        case Instruction_in is
3238
 
3239
 
3240
                                when others =>
3241
                                cycle_ctr <=  x"0";
3242
 
3243
                        end  case;      --Cycle C
3244
 
3245
--      ==========================================================================
3246
 
3247
 
3248
                when others =>
3249
                        cycle_ctr<= x"0";
3250
        end case;       --cycle_ctr
3251
end if; --Reset stuff
3252
 
3253
end if; --rising edge
3254
 
3255
end process instruction_decode;
3256
 
3257
end P65C02_architecture;
3258
 

powered by: WebSVN 2.1.0

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