Mercurial > repos > blastem
annotate m68k.cpu @ 2587:e04c7e753bf6
Implement divs and divu in new CPU core
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 08 Feb 2025 20:04:18 -0800 |
parents | 6c58cadeabe1 |
children | 0ea26288d983 |
rev | line source |
---|---|
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 info |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 prefix m68k_ |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 opcode_size 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 body m68k_run_op |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 header m68k.h |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 interrupt m68k_interrupt |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 include m68k_util.c |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 sync_cycle m68k_sync_cycle |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 declare |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
11 typedef m68k_context *(sync_fun)(m68k_context * context, uint32_t address); |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
12 typedef m68k_context *(*int_ack_fun)(m68k_context * context); |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 typedef m68k_context *(*m68k_reset_handler)(m68k_context *context); |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
14 void init_m68k_opts(m68k_options *opts, memmap_chunk * memmap, uint32_t num_chunks, uint32_t clock_divider, sync_fun *sync_components, int_ack_fun int_ack); |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
15 m68k_context *init_68k_context(m68k_options * opts, m68k_reset_handler *reset_handler); |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 void m68k_reset(m68k_context *context); |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 void m68k_print_regs(m68k_context *context); |
2499
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
18 void m68k_serialize(m68k_context *context, uint32_t pc, serialize_buffer *buf); |
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
19 void m68k_deserialize(deserialize_buffer *buf, void *vcontext); |
2500
d44fe974fb85
Get blastem compiling with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2499
diff
changeset
|
20 void start_68k_context(m68k_context *context, uint32_t pc); |
2499
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
21 define NUM_MEM_AREAS 10 |
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
22 define M68K_OPT_BROKEN_READ_MODIFY 1 |
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
23 define INT_PENDING_SR_CHANGE 254 |
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
24 define INT_PENDING_NONE 255 |
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
25 define M68K_STATUS_TRACE 0x80 |
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
26 define m68k_invalidate_code_range(context, start, end) |
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
27 define m68k_options_free free |
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
28 define m68k_handle_code_write(address, context) |
2500
d44fe974fb85
Get blastem compiling with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2499
diff
changeset
|
29 define resume_68k(context) m68k_execute(context, context->target_cycle) |
d44fe974fb85
Get blastem compiling with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2499
diff
changeset
|
30 define insert_breakpoint(context, address, handler) |
d44fe974fb85
Get blastem compiling with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2499
diff
changeset
|
31 define remove_breakpoint(context, address) |
d44fe974fb85
Get blastem compiling with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2499
diff
changeset
|
32 define m68k_add_watchpoint(context, address, size) |
d44fe974fb85
Get blastem compiling with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2499
diff
changeset
|
33 define m68k_remove_watchpoint(context, address, size) |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 regs |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 dregs 32 d0 d1 d2 d3 d4 d5 d6 d7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 aregs 32 a0 a1 a2 a3 a4 a5 a6 a7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 pc 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 other_sp 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 scratch1 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 scratch2 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 int_cycle 32 |
2499
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
43 target_cycle 32 |
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
44 wp_hit_address 32 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 prefetch 16 |
2499
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
46 wp_hit_value 16 |
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
47 wp_old_value 16 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 int_priority 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 int_num 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 int_pending 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 int_pending_num 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 int_ack 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 status 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 ccr 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 xflag 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 nflag 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 zflag 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 vflag 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 cflag 8 |
2499
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
60 wp_hit 8 |
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
61 trace_pending 8 |
2500
d44fe974fb85
Get blastem compiling with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2499
diff
changeset
|
62 should_return 8 |
2499
d74d3998482c
Make some progress on compiling full emulator with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2498
diff
changeset
|
63 system ptrvoid |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 reset_handler ptrvoid |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
65 int_ack_handler ptrvoid |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
66 sync_components ptrsync_fun |
2500
d44fe974fb85
Get blastem compiling with new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2499
diff
changeset
|
67 mem_pointers ptr16 10 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 flags |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 register ccr |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 X 4 carry xflag |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 N 3 sign nflag |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 Z 2 zero zflag |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 V 1 overflow vflag |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 C 0 carry cflag |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 if dynarec |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 ccall m68k_read16_noinc context pc |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 mov result prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 if interp |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 mov pc scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 ocall read_16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
89 mov scratch1 prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
90 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
92 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 add 2 pc pc |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
94 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
95 check_user_mode_swap_ssp_usp |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
96 local tmp 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
97 and 0x20 status tmp |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 if tmp |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 else |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
100 xchg other_sp a7 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
101 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
103 m68k_get_sr |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
104 lsl status 8 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
105 or ccr scratch1 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
106 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 m68k_write32_lowfirst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
108 arg value 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
109 add 2 scratch2 scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
110 mov value scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
111 ocall write_16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
112 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
113 sub 2 scratch2 scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
114 lsr value 16 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
115 ocall write_16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
116 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
117 m68k_write32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
118 arg value 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
119 local tmp 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
120 mov value tmp |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
121 lsr value 16 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
122 ocall write_16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
123 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
124 add 2 scratch2 scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
125 mov tmp scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
126 ocall write_16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
127 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
128 m68k_read32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
129 local tmp 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
130 add 2 scratch1 tmp |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
131 ocall read_16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
132 xchg scratch1 tmp |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
133 ocall read_16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
134 lsl tmp 16 tmp |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
135 or tmp scratch1 scratch1 |
2562
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
136 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
137 m68k_trap |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
138 arg vector 32 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
139 check_user_mode_swap_ssp_usp |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
140 #save PC |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
141 a7 -= 4 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
142 scratch2 = a7 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
143 m68k_write32_lowfirst pc |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
144 #save SR |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
145 a7 -= 2 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
146 scratch2 = a7 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
147 m68k_get_sr |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
148 ocall write_16 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
149 #set supervisor bit |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
150 status |= 0x20 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
151 #clear trace bit |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
152 status &= 0x7F |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
153 trace_pending = 0 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
154 scratch1 = vector << 2 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
155 m68k_read32 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
156 pc = scratch1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
157 cycles 10 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
158 m68k_prefetch |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
159 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
160 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
161 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
162 m68k_interrupt |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
163 if cycles >=U int_cycle |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
164 |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
165 #INT_PENDING_NONE |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
166 if 255 = int_pending |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
167 int_pending = int_priority |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
168 int_pending_num = int_num |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
169 else |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
170 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
171 #INT_PENDING_SR_CHANGE |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
172 if 254 = int_pending |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
173 int_pending = int_priority |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
174 int_pending_num = int_num |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
175 |
2580
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
176 end |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
177 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
178 check_user_mode_swap_ssp_usp |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
179 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
180 cycles 6 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
181 #save status reg |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
182 a7 -= 6 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
183 m68k_get_sr |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
184 scratch2 = a7 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
185 ocall write_16 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
186 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
187 #update status register |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
188 status &= 0x78 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
189 status |= int_pending |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
190 status |= 0x20 |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
191 |
2580
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
192 #Interrupt ack cycle |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
193 int_ack = int_pending |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
194 cycles 4 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
195 if int_ack_handler |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
196 pcall int_ack_handler int_ack_fun context |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
197 end |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
198 if int_pending_num |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
199 else |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
200 int_pending_num = int_pending + 24 |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
201 end |
2580
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
202 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
203 #save pc |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
204 scratch2 = a7 + 2 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
205 scratch1 = pc - 2 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
206 m68k_write32_lowfirst scratch1 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
207 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
208 scratch1 = int_pending_num << 2 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
209 int_pending = 255 #INT_PENDING_NONE |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
210 int_pending_num = 0 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
211 m68k_read32 |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
212 mov scratch1 pc |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
213 m68k_prefetch |
939b818df589
Get 68K interrupts working in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2578
diff
changeset
|
214 update_sync |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
215 end |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
216 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
217 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
218 m68k_run_op |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
219 dispatch prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
220 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
221 m68k_mem_src |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
222 arg address 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
223 arg size 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
224 arg isdst 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
225 mov address scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
226 if isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
227 mov address scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
228 meta ismem 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
229 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
230 switch size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
231 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
232 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
233 ocall read_8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
234 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
235 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
236 ocall read_16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
237 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
238 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
239 m68k_read32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
240 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
241 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
242 meta op scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
243 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
244 m68k_write_size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
245 arg size 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
246 arg lowfirst 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
247 switch size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
248 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
249 ocall write_8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
250 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
251 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
252 ocall write_16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
253 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
254 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
255 if lowfirst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
256 m68k_write32_lowfirst scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
257 else |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
258 m68k_write32 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
259 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
260 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
261 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
262 m68k_index_word |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
263 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
264 local disp 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
265 and prefetch 255 disp |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
266 sext 16 disp disp |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
267 sext 32 disp disp |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
268 local index 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
269 lsr prefetch 12 index |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
270 local isareg 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
271 and index 8 isareg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
272 and index 7 index |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
273 local islong 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
274 and prefetch 2048 islong |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
275 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
276 switch isareg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
277 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
278 switch islong |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
279 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
280 sext 32 dregs.index scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
281 case 2048 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
282 mov dregs.index scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
283 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
284 case 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
285 switch islong |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
286 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
287 sext 32 aregs.index scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
288 case 2048 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
289 mov aregs.index scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
290 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
291 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
292 add disp scratch1 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
293 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
294 m68k_fetch_op_ea |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
295 arg mode 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
296 arg reg 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
297 arg Z 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
298 arg isdst 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
299 switch mode |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
300 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
301 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
302 #data reg direct |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
303 meta op dregs.reg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
304 if isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
305 meta ismem 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
306 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
307 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
308 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
309 #address reg direct |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
310 meta op aregs.reg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
311 if isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
312 meta ismem 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
313 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
314 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
315 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
316 #address reg indirect |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
317 m68k_mem_src aregs.reg Z isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
318 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
319 case 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
320 #postincrement |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
321 m68k_mem_src aregs.reg Z isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
322 switch reg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
323 case 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
324 if Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
325 addsize Z aregs.reg aregs.reg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
326 else |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
327 addsize 1 aregs.reg aregs.reg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
328 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
329 default |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
330 addsize Z aregs.reg aregs.reg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
331 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
332 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
333 case 4 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
334 #predecrement |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
335 switch reg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
336 case 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
337 if Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
338 decsize Z aregs.reg aregs.reg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
339 else |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
340 decsize 1 aregs.reg aregs.reg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
341 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
342 default |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
343 decsize Z aregs.reg aregs.reg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
344 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
345 cycles 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
346 m68k_mem_src aregs.reg Z isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
347 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
348 case 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
349 #displacement |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
350 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
351 sext 32 prefetch scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
352 add scratch1 aregs.reg scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
353 m68k_mem_src scratch1 Z isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
354 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
355 case 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
356 #indexed |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
357 m68k_index_word |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
358 cycles 2 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
359 add aregs.reg scratch1 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
360 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
361 m68k_mem_src scratch1 Z isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
362 case 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
363 #pc-relative and absolute modes |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
364 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
365 switch reg |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
366 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
367 #absolute short |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
368 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
369 sext 32 prefetch scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
370 m68k_mem_src scratch1 Z isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
371 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
372 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
373 #absolute long |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
374 local address 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
375 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
376 lsl prefetch 16 address |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
377 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
378 or prefetch address scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
379 m68k_mem_src scratch1 Z isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
380 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
381 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
382 #pc displaceent |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
383 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
384 sext 32 prefetch scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
385 add scratch1 pc scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
386 sub 2 scratch1 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
387 m68k_mem_src scratch1 Z isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
388 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
389 case 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
390 #pc indexed |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
391 m68k_index_word |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
392 cycles 2 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
393 add pc scratch1 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
394 sub 2 scratch1 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
395 m68k_mem_src scratch1 Z isdst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
396 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
397 case 4 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
398 #immediate |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
399 switch Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
400 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
401 local tmp32 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
402 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
403 lsl prefetch 16 tmp32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
404 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
405 or prefetch tmp32 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
406 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
407 default |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
408 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
409 mov prefetch scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
410 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
411 meta op scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
412 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
413 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
414 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
415 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
416 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
417 m68k_fetch_src_ea |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
418 arg mode 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
419 arg reg 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
420 arg Z 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
421 m68k_fetch_op_ea mode reg Z 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
422 meta src op |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
423 switch mode |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
424 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
425 meta src_is_mem 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
426 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
427 meta src_is_mem 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
428 default |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
429 meta src_is_mem 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
430 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
431 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
432 m68k_fetch_dst_ea |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
433 arg mode 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
434 arg reg 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
435 arg Z 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
436 m68k_fetch_op_ea mode reg Z 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
437 meta dst op |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
438 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
439 m68k_save_dst |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
440 arg Z 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
441 if ismem |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
442 m68k_write_size Z 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
443 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
444 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
445 1101DDD0ZZMMMRRR add_ea_dn |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
446 invalid M 7 R 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
447 invalid M 7 R 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
448 invalid M 7 R 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
449 invalid Z 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
450 m68k_fetch_src_ea M R Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
451 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
452 add src dregs.D dregs.D Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
453 update_flags XNZVC |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
454 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
455 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
456 1101DDD1ZZMMMRRR add_dn_ea |
1941
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
457 invalid M 0 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
458 invalid M 1 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
459 invalid M 7 R 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
460 invalid M 7 R 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
461 invalid M 7 R 4 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
462 invalid M 7 R 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
463 invalid M 7 R 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
464 invalid M 7 R 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
465 invalid Z 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
466 m68k_fetch_dst_ea M R Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
467 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
468 add dregs.D dst dst Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
469 update_flags XNZVC |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
470 m68k_save_dst Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
471 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
472 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
473 1101AAAZ11MMMRRR adda |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
474 invalid M 7 R 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
475 invalid M 7 R 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
476 invalid M 7 R 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
477 local size 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
478 local ext_src 32 |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
479 #TODO: ensure "penalty" cycles are in the right place |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
480 if Z |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
481 size = 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
482 switch M |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
483 case 0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
484 #dreg src |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
485 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
486 case 1 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
487 #areg src |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
488 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
489 case 7 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
490 if R = 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
491 #immediate |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
492 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
493 else |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
494 cycles 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
495 end |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
496 default |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
497 cycles 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
498 end |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
499 else |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
500 size = 1 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
501 cycles 4 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
502 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
503 m68k_fetch_src_ea M R size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
504 switch size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
505 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
506 sext 32 src ext_src |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
507 meta src ext_src |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
508 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
509 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
510 add src aregs.A aregs.A |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
511 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
512 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
513 00000110ZZMMMRRR addi |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
514 local immed 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
515 invalid Z 3 |
1941
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
516 invalid M 1 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
517 invalid M 7 R 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
518 invalid M 7 R 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
519 invalid M 7 R 4 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
520 invalid M 7 R 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
521 invalid M 7 R 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
522 invalid M 7 R 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
523 #fetch immediate operand |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
524 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
525 switch Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
526 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
527 lsl prefetch 16 immed |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
528 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
529 or prefetch immed immed |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
530 if M = 0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
531 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
532 end |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
533 default |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
534 mov prefetch immed |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
535 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
536 #fetch dst EA |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
537 m68k_fetch_dst_ea M R Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
538 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
539 add immed dst dst Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
540 update_flags XNZVC |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
541 m68k_save_dst Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
542 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
543 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
544 0101III0ZZMMMRRR addq |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
545 invalid Z 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
546 invalid M 7 R 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
547 invalid M 7 R 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
548 invalid M 7 R 4 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
549 invalid M 7 R 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
550 invalid M 7 R 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
551 invalid M 7 R 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
552 local src 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
553 switch I |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
554 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
555 mov 8 src |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
556 default |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
557 mov I src |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
558 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
559 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
560 m68k_fetch_dst_ea M R Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
561 switch M |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
562 case 1 |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
563 cycles 4 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
564 add src dst dst Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
565 default |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
566 add src dst dst Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
567 update_flags XNZVC |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
568 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
569 m68k_save_dst Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
570 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
571 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
572 1101DDD1ZZ000SSS addx_dy_dx |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
573 invalid Z 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
574 adc dregs.S dregs.D dregs.D Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
575 update_flags XNVC |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
576 switch Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
577 case 0 |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
578 local tmp8 8 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
579 mov dregs.D tmp8 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
580 if tmp8 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
581 update_flags Z0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
582 end |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
583 case 1 |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
584 local tmp16 16 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
585 mov dregs.D tmp16 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
586 if tmp16 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
587 update_flags Z0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
588 end |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
589 case 2 |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
590 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
591 if dregs.D |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
592 update_flags Z0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
593 end |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
594 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
595 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
596 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
597 1101DDD1ZZ001SSS addx_ay_ax |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
598 invalid Z 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
599 if Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
600 decsize Z aregs.S aregs.S |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
601 else |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
602 switch S |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
603 case 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
604 sub 2 aregs.S aregs.S |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
605 default |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
606 decsize Z aregs.S aregs.S |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
607 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
608 end |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
609 #predec penalty on src only |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
610 cycles 2 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
611 mov aregs.S scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
612 switch Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
613 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
614 ocall read_8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
615 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
616 ocall read_16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
617 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
618 m68k_read32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
619 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
620 mov scratch1 scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
621 if Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
622 decsize Z aregs.D aregs.D |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
623 else |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
624 switch D |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
625 case 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
626 sub 2 aregs.D aregs.D |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
627 default |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
628 decsize Z aregs.D aregs.D |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
629 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
630 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
631 mov aregs.D scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
632 switch Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
633 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
634 ocall read_8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
635 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
636 ocall read_16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
637 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
638 m68k_read32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
639 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
640 adc scratch2 scratch1 scratch1 Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
641 update_flags XNVC |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
642 switch Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
643 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
644 local tmp8 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
645 mov dregs.D tmp8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
646 if tmp8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
647 update_flags Z0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
648 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
649 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
650 local tmp16 16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
651 mov dregs.D tmp16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
652 if tmp16 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
653 update_flags Z0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
654 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
655 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
656 if dregs.D |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
657 update_flags Z0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
658 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
659 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
660 mov aregs.D scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
661 m68k_write_size Z 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
662 m68k_prefetch |
1939
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
663 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
664 1100DDD0ZZMMMRRR and_ea_dn |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
665 invalid M 1 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
666 invalid M 7 R 5 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
667 invalid M 7 R 6 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
668 invalid M 7 R 7 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
669 invalid Z 3 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
670 m68k_fetch_src_ea M R Z |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
671 |
1939
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
672 and src dregs.D dregs.D Z |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
673 update_flags NZV0C0 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
674 m68k_prefetch |
2562
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
675 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
676 1100XXX101000YYY exg_dn_dn |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
677 scratch1 = dregs.X |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
678 dregs.X = dregs.Y |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
679 dregs.Y = scratch1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
680 cycles 2 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
681 m68k_prefetch |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
682 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
683 1100XXX101001YYY exg_an_an |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
684 scratch1 = aregs.X |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
685 aregs.X = aregs.Y |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
686 aregs.Y = scratch1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
687 cycles 2 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
688 m68k_prefetch |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
689 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
690 1100XXX110001YYY exg_dn_an |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
691 scratch1 = dregs.X |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
692 dregs.X = aregs.Y |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
693 aregs.Y = scratch1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
694 cycles 2 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
695 m68k_prefetch |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
696 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
697 1100DDD011MMMRRR mulu |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
698 local a 16 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
699 local b 16 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
700 invalid M 1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
701 invalid M 7 R 5 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
702 invalid M 7 R 6 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
703 invalid M 7 R 7 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
704 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
705 m68k_fetch_src_ea M R 1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
706 #2-cycles per bit x 16, 2 for cleanup |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
707 cycles 34 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
708 #popcnt |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
709 a = src & 0b1010101010101010 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
710 a >>= 1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
711 b = src & 0b0101010101010101 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
712 b += a |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
713 a = b & 0b1100110011001100 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
714 a >>= 2 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
715 b &= 0b0011001100110011 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
716 b += a |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
717 a = b & 0b1111000011110000 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
718 a >>= 4 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
719 b &= 0b0000111100001111 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
720 b += a |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
721 a = b & 0b1111111100000000 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
722 a >>= 8 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
723 b &= 0b0000000011111111 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
724 b += a |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
725 #2 cycles per set bit |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
726 b += b |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
727 cycles b |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
728 dregs.D = src * dregs.D |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
729 update_flags NZV0C0 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
730 m68k_prefetch |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
731 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
732 1100DDD111MMMRRR muls |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
733 local a 16 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
734 local b 16 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
735 invalid M 1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
736 invalid M 7 R 5 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
737 invalid M 7 R 6 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
738 invalid M 7 R 7 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
739 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
740 m68k_fetch_src_ea M R 1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
741 #2-cycles per bit x 16, 2 for cleanup |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
742 cycles 34 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
743 #muls timing is essentially the same as muls, but it's based on the number of 0/1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
744 #transitions rather than the number of 1 bits. xoring the value with itself shifted |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
745 #by one effectively sets one bit for every transition |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
746 b = src << 1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
747 b ^= src |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
748 #popcnt |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
749 a = b & 0b1010101010101010 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
750 a >>= 1 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
751 b &= 0b0101010101010101 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
752 b += a |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
753 a = b & 0b1100110011001100 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
754 a >>= 2 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
755 b &= 0b0011001100110011 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
756 b += a |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
757 a = b & 0b1111000011110000 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
758 a >>= 4 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
759 b &= 0b0000111100001111 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
760 b += a |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
761 a = b & 0b1111111100000000 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
762 a >>= 8 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
763 b &= 0b0000000011111111 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
764 b += a |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
765 #2 cycles per set bit |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
766 b += b |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
767 cycles b |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
768 dregs.D = src *S dregs.D |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
769 update_flags NZV0C0 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
770 m68k_prefetch |
1939
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
771 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
772 1100DDD1ZZMMMRRR and_dn_ea |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
773 invalid M 0 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
774 invalid M 1 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
775 invalid M 7 R 2 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
776 invalid M 7 R 3 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
777 invalid M 7 R 4 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
778 invalid M 7 R 5 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
779 invalid M 7 R 6 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
780 invalid M 7 R 7 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
781 invalid Z 3 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
782 m68k_fetch_dst_ea M R Z |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
783 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
784 and dregs.D dst dst Z |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
785 update_flags NZV0C0 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
786 m68k_save_dst Z |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
787 m68k_prefetch |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
788 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
789 00000010ZZMMMRRR andi |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
790 local immed 32 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
791 invalid Z 3 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
792 invalid M 1 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
793 invalid M 7 R 2 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
794 invalid M 7 R 3 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
795 invalid M 7 R 4 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
796 invalid M 7 R 5 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
797 invalid M 7 R 6 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
798 invalid M 7 R 7 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
799 #fetch immediate operand |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
800 m68k_prefetch |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
801 switch Z |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
802 case 2 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
803 lsl prefetch 16 immed |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
804 m68k_prefetch |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
805 or prefetch immed immed |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
806 if M = 0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
807 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
808 end |
1939
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
809 default |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
810 mov prefetch immed |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
811 end |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
812 #fetch dst EA |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
813 m68k_fetch_dst_ea M R Z |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
814 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
815 and immed dst dst Z |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
816 update_flags NZV0C0 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
817 m68k_save_dst Z |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
818 m68k_prefetch |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
819 |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
820 0000001000111100 andi_to_ccr |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
821 #fetch immediate operand |
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
822 m68k_prefetch |
2583
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
823 ccr &= prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
824 cycles 12 #TODO: where do these occur relative to fetches |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
825 m68k_prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
826 |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
827 0000001001111100 andi_to_sr |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
828 #TODO: privilege violation exception if in user mode |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
829 #fetch immediate operand |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
830 m68k_prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
831 ccr &= prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
832 scratch1 = prefetch >> 8 |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
833 status &= scratch1 |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
834 m68k_prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
835 check_user_mode_swap_ssp_usp |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
836 update_sync |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
837 cycles 12 #TODO: where do these occur relative to fetches |
1939
84b32010ef8d
Implement 68K and instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1838
diff
changeset
|
838 m68k_prefetch |
1940
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
839 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
840 1011DDD1ZZMMMRRR eor_dn_ea |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
841 invalid M 1 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
842 invalid M 7 R 2 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
843 invalid M 7 R 3 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
844 invalid M 7 R 4 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
845 invalid M 7 R 5 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
846 invalid M 7 R 6 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
847 invalid M 7 R 7 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
848 invalid Z 3 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
849 m68k_fetch_dst_ea M R Z |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
850 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
851 if Z = 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
852 if M = 0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
853 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
854 end |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
855 end |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
856 |
1940
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
857 xor dregs.D dst dst Z |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
858 update_flags NZV0C0 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
859 m68k_save_dst Z |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
860 m68k_prefetch |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
861 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
862 00001010ZZMMMRRR eori |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
863 local immed 32 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
864 invalid Z 3 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
865 invalid M 1 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
866 invalid M 7 R 2 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
867 invalid M 7 R 3 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
868 invalid M 7 R 4 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
869 invalid M 7 R 5 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
870 invalid M 7 R 6 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
871 invalid M 7 R 7 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
872 #fetch immediate operand |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
873 m68k_prefetch |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
874 switch Z |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
875 case 2 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
876 lsl prefetch 16 immed |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
877 m68k_prefetch |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
878 or prefetch immed immed |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
879 if M = 0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
880 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
881 end |
1940
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
882 default |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
883 mov prefetch immed |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
884 end |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
885 #fetch dst EA |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
886 m68k_fetch_dst_ea M R Z |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
887 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
888 xor immed dst dst Z |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
889 update_flags NZV0C0 |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
890 m68k_save_dst Z |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
891 m68k_prefetch |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
892 |
2583
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
893 0000101000111100 eori_to_ccr |
1940
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
894 #fetch immediate operand |
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
895 m68k_prefetch |
2583
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
896 ccr ^= prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
897 cycles 12 #TODO: where do these occur relative to fetches |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
898 m68k_prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
899 |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
900 0000101001111100 eori_to_sr |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
901 #TODO: privilege violation exception if in user mode |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
902 #fetch immediate operand |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
903 m68k_prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
904 ccr ^= prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
905 scratch1 = prefetch >> 8 |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
906 status ^= scratch1 |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
907 check_user_mode_swap_ssp_usp |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
908 update_sync |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
909 cycles 12 #TODO: where do these occur relative to fetches |
1940
048442b0cb62
Implement 68K eor instruction in new core
Michael Pavone <pavone@retrodev.com>
parents:
1939
diff
changeset
|
910 m68k_prefetch |
1941
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
911 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
912 1000DDD0ZZMMMRRR or_ea_dn |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
913 invalid M 1 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
914 invalid M 7 R 5 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
915 invalid M 7 R 6 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
916 invalid M 7 R 7 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
917 invalid Z 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
918 m68k_fetch_src_ea M R Z |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
919 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
920 if Z = 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
921 switch M |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
922 case 0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
923 #dreg |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
924 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
925 case 7 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
926 if R = 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
927 #immediate |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
928 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
929 else |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
930 cycles 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
931 end |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
932 default |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
933 cycles 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
934 end |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
935 end |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
936 |
1941
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
937 or src dregs.D dregs.D Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
938 update_flags NZV0C0 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
939 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
940 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
941 1000DDD1ZZMMMRRR or_dn_ea |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
942 invalid M 0 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
943 invalid M 1 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
944 invalid M 7 R 2 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
945 invalid M 7 R 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
946 invalid M 7 R 4 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
947 invalid M 7 R 5 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
948 invalid M 7 R 6 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
949 invalid M 7 R 7 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
950 invalid Z 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
951 m68k_fetch_dst_ea M R Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
952 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
953 or dregs.D dst dst Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
954 update_flags NZV0C0 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
955 m68k_save_dst Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
956 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
957 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
958 00000000ZZMMMRRR ori |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
959 local immed 32 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
960 invalid Z 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
961 invalid M 1 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
962 invalid M 7 R 2 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
963 invalid M 7 R 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
964 invalid M 7 R 4 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
965 invalid M 7 R 5 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
966 invalid M 7 R 6 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
967 invalid M 7 R 7 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
968 #fetch immediate operand |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
969 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
970 switch Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
971 case 2 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
972 lsl prefetch 16 immed |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
973 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
974 or prefetch immed immed |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
975 if M = 0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
976 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
977 end |
1941
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
978 default |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
979 mov prefetch immed |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
980 end |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
981 #fetch dst EA |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
982 m68k_fetch_dst_ea M R Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
983 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
984 or immed dst dst Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
985 update_flags NZV0C0 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
986 m68k_save_dst Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
987 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
988 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
989 0000000000111100 ori_to_ccr |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
990 #fetch immediate operand |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
991 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
992 or prefetch ccr ccr |
2583
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
993 cycles 12 #TODO: where do these occur relative to fetches |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
994 m68k_prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
995 |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
996 0000000001111100 ori_to_sr |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
997 #TODO: privilege violation exception if in user mode |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
998 #fetch immediate operand |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
999 m68k_prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
1000 ccr |= prefetch |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
1001 scratch1 = prefetch >> 8 |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
1002 status |= scratch1 |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
1003 update_sync |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
1004 cycles 12 #TODO: where do these occur relative to fetches |
1941
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1005 m68k_prefetch |
2587
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1006 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1007 1000DDD011MMMRRR divu |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1008 invalid M 1 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1009 invalid M 7 R 5 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1010 invalid M 7 R 6 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1011 invalid M 7 R 7 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1012 m68k_fetch_src_ea M R 1 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1013 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1014 if src = 0 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1015 cycles 4 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1016 update_flags N0Z0V0 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1017 m68k_trap 5 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1018 else |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1019 ccall divu context D src |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1020 m68k_prefetch |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1021 end |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1022 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1023 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1024 1000DDD111MMMRRR divs |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1025 invalid M 1 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1026 invalid M 7 R 5 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1027 invalid M 7 R 6 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1028 invalid M 7 R 7 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1029 local tmp 32 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1030 m68k_fetch_src_ea M R 1 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1031 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1032 if src = 0 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1033 cycles 4 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1034 update_flags N0Z0V0 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1035 m68k_trap 5 |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1036 else |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1037 ccall divs context D src |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1038 m68k_prefetch |
e04c7e753bf6
Implement divs and divu in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2586
diff
changeset
|
1039 end |
1941
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1040 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1041 1001DDD0ZZMMMRRR sub_ea_dn |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1042 invalid M 7 R 5 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1043 invalid M 7 R 6 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1044 invalid M 7 R 7 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1045 invalid Z 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1046 m68k_fetch_src_ea M R Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1047 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1048 sub src dregs.D dregs.D Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1049 update_flags XNZVC |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1050 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1051 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1052 1001DDD1ZZMMMRRR sub_dn_ea |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1053 invalid M 0 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1054 invalid M 1 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1055 invalid M 7 R 2 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1056 invalid M 7 R 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1057 invalid M 7 R 4 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1058 invalid M 7 R 5 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1059 invalid M 7 R 6 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1060 invalid M 7 R 7 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1061 invalid Z 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1062 m68k_fetch_dst_ea M R Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1063 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1064 sub dregs.D dst dst Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1065 update_flags XNZVC |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1066 m68k_save_dst Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1067 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1068 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1069 1001AAAZ11MMMRRR suba |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1070 invalid M 7 R 5 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1071 invalid M 7 R 6 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1072 invalid M 7 R 7 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1073 local size 16 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1074 local ext_src 32 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1075 if Z |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1076 size = 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1077 switch M |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1078 case 0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1079 #dreg src |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1080 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1081 case 1 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1082 #areg src |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1083 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1084 case 7 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1085 if R = 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1086 #immediate |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1087 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1088 else |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1089 cycles 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1090 end |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1091 default |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1092 cycles 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1093 end |
1941
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1094 else |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1095 size = 1 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1096 cycles 4 |
1941
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1097 end |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1098 m68k_fetch_src_ea M R size |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1099 switch size |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1100 case 1 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1101 sext 32 src ext_src |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1102 meta src ext_src |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1103 end |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1104 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1105 sub src aregs.A aregs.A |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1106 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1107 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1108 00000100ZZMMMRRR subi |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1109 local immed 32 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1110 invalid Z 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1111 invalid M 1 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1112 invalid M 7 R 2 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1113 invalid M 7 R 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1114 invalid M 7 R 4 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1115 invalid M 7 R 5 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1116 invalid M 7 R 6 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1117 invalid M 7 R 7 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1118 #fetch immediate operand |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1119 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1120 switch Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1121 case 2 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1122 lsl prefetch 16 immed |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1123 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1124 or prefetch immed immed |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1125 if M = 0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1126 cycles 4 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1127 end |
1941
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1128 default |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1129 mov prefetch immed |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1130 end |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1131 #fetch dst EA |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1132 m68k_fetch_dst_ea M R Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1133 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1134 sub immed dst dst Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1135 update_flags XNZVC |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1136 m68k_save_dst Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1137 m68k_prefetch |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1138 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1139 0101III1ZZMMMRRR subq |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1140 invalid Z 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1141 invalid M 7 R 2 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1142 invalid M 7 R 3 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1143 invalid M 7 R 4 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1144 invalid M 7 R 5 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1145 invalid M 7 R 6 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1146 invalid M 7 R 7 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1147 local src 32 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1148 switch I |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1149 case 0 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1150 mov 8 src |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1151 default |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1152 mov I src |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1153 end |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1154 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1155 m68k_fetch_dst_ea M R Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1156 switch M |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1157 case 1 |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1158 sub src dst dst Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1159 default |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1160 sub src dst dst Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1161 update_flags XNZVC |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1162 end |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1163 m68k_save_dst Z |
9eec86183aae
Implement 68K or and sub instructions in new core
Michael Pavone <pavone@retrodev.com>
parents:
1940
diff
changeset
|
1164 m68k_prefetch |
2586
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1165 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1166 1001DDD1ZZ000SSS subx_dy_dx |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1167 invalid Z 3 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1168 sbc dregs.S dregs.D dregs.D Z |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1169 update_flags XNVC |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1170 switch Z |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1171 case 0 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1172 local tmp8 8 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1173 mov dregs.D tmp8 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1174 if tmp8 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1175 update_flags Z0 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1176 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1177 case 1 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1178 local tmp16 16 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1179 mov dregs.D tmp16 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1180 if tmp16 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1181 update_flags Z0 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1182 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1183 case 2 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1184 cycles 4 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1185 if dregs.D |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1186 update_flags Z0 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1187 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1188 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1189 m68k_prefetch |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1190 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1191 1001DDD1ZZ001SSS subx_ay_ax |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1192 invalid Z 3 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1193 if Z |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1194 decsize Z aregs.S aregs.S |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1195 else |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1196 switch S |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1197 case 7 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1198 sub 2 aregs.S aregs.S |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1199 default |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1200 decsize Z aregs.S aregs.S |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1201 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1202 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1203 #predec penalty on src only |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1204 cycles 2 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1205 mov aregs.S scratch1 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1206 switch Z |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1207 case 0 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1208 ocall read_8 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1209 case 1 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1210 ocall read_16 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1211 case 2 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1212 m68k_read32 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1213 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1214 mov scratch1 scratch2 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1215 if Z |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1216 decsize Z aregs.D aregs.D |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1217 else |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1218 switch D |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1219 case 7 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1220 sub 2 aregs.D aregs.D |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1221 default |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1222 decsize Z aregs.D aregs.D |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1223 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1224 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1225 mov aregs.D scratch1 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1226 switch Z |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1227 case 0 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1228 ocall read_8 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1229 case 1 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1230 ocall read_16 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1231 case 2 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1232 m68k_read32 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1233 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1234 sbc scratch2 scratch1 scratch1 Z |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1235 update_flags XNVC |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1236 switch Z |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1237 case 0 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1238 local tmp8 8 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1239 mov dregs.D tmp8 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1240 if tmp8 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1241 update_flags Z0 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1242 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1243 case 1 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1244 local tmp16 16 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1245 mov dregs.D tmp16 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1246 if tmp16 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1247 update_flags Z0 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1248 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1249 case 2 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1250 if dregs.D |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1251 update_flags Z0 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1252 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1253 end |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1254 mov aregs.D scratch2 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1255 m68k_write_size Z 0 |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1256 m68k_prefetch |
6c58cadeabe1
Implement subx in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2585
diff
changeset
|
1257 |
1991
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1258 1110CCC0ZZ001RRR lsri |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1259 invalid Z 3 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1260 switch C |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1261 case 0 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1262 meta shift 8 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1263 default |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1264 meta shift C |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1265 end |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1266 lsr dregs.R shift dregs.R Z |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1267 update_flags XNZV0C |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1268 local cyc 32 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1269 cyc = shift + shift |
1991
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1270 switch Z |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1271 case 2 |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1272 cyc += 4 |
1991
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1273 default |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1274 cyc += 2 |
1991
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1275 end |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1276 cycles cyc |
1991
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1277 #TODO: should this happen before or after the majority of the shift? |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1278 m68k_prefetch |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1279 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1280 1110CCC0ZZ101RRR lsr_dn |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1281 invalid Z 3 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1282 local shift 8 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1283 and dregs.C 63 shift |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1284 lsr dregs.R shift dregs.R Z |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1285 update_flags XNZV0C |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1286 add shift shift shift |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1287 switch Z |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1288 case 2 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1289 add 4 shift shift |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1290 default |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1291 add 2 shift shift |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1292 end |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1293 cycles shift |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1294 #TODO: should this happen before or after the majority of the shift? |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1295 m68k_prefetch |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1296 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1297 1110001011MMMRRR lsr_ea |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1298 invalid M 0 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1299 invalid M 1 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1300 invalid M 7 R 2 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1301 invalid M 7 R 3 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1302 invalid M 7 R 4 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1303 invalid M 7 R 5 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1304 invalid M 7 R 6 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1305 invalid M 7 R 7 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1306 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1307 m68k_fetch_dst_ea M R 0 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1308 lsr dst 1 dst |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1309 update_flags XNZV0C |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1310 m68k_save_dst 0 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1311 m68k_prefetch |
2502
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1312 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1313 1110CCC0ZZ000RRR asri |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1314 invalid Z 3 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1315 switch C |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1316 case 0 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1317 meta shift 8 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1318 default |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1319 meta shift C |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1320 end |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1321 asr dregs.R shift dregs.R Z |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1322 update_flags XNZV0C |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1323 local cyc 32 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1324 cyc = shift + shift |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1325 switch Z |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1326 case 2 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1327 cyc += 4 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1328 default |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1329 cyc += 2 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1330 end |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1331 cycles cyc |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1332 #TODO: should this happen before or after the majority of the shift? |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1333 m68k_prefetch |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1334 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1335 1110CCC0ZZ100RRR asr_dn |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1336 invalid Z 3 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1337 local shift 32 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1338 local shift_cycles 32 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1339 and dregs.C 63 shift |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1340 shift_cycles = shift |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1341 if shift = 0 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1342 cmp 0 dregs.R Z |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1343 update_flags NZV0C0 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1344 else |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1345 switch Z |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1346 case 0 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1347 if shift >=U 9 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1348 shift = 8 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1349 end |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1350 case 1 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1351 if shift >=U 17 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1352 shift = 16 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1353 end |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1354 case 2 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1355 if shift >=U 33 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1356 shift = 32 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1357 end |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1358 end |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1359 asr dregs.R shift dregs.R Z |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1360 update_flags XNZV0C |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1361 end |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1362 shift_cycles += shift_cycles |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1363 switch Z |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1364 case 2 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1365 shift_cycles += 4 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1366 default |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1367 shift_cycles += 2 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1368 end |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1369 cycles shift_cycles |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1370 #TODO: should this happen before or after the majority of the shift? |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1371 m68k_prefetch |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1372 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1373 1110000011MMMRRR asr_ea |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1374 invalid M 0 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1375 invalid M 1 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1376 invalid M 7 R 2 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1377 invalid M 7 R 3 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1378 invalid M 7 R 4 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1379 invalid M 7 R 5 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1380 invalid M 7 R 6 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1381 invalid M 7 R 7 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1382 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1383 m68k_fetch_dst_ea M R 0 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1384 asr dst 1 dst |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1385 update_flags XNZV0C |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1386 m68k_save_dst 0 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1387 m68k_prefetch |
1991
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1388 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1389 1110CCC1ZZ001RRR lsli |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1390 invalid Z 3 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1391 switch C |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1392 case 0 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1393 meta shift 8 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1394 default |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1395 meta shift C |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1396 end |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1397 lsl dregs.R shift dregs.R Z |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1398 update_flags XNZV0C |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1399 local cyc 32 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1400 cyc = shift + shift |
1991
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1401 switch Z |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1402 case 2 |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1403 cyc += 4 |
1991
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1404 default |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1405 cyc += 2 |
1991
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1406 end |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1407 cycles cyc |
1991
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1408 #TODO: should this happen before or after the majority of the shift? |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1409 m68k_prefetch |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1410 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1411 1110CCC1ZZ101RRR lsl_dn |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1412 invalid Z 3 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1413 local shift 8 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1414 and dregs.C 63 shift |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1415 lsl dregs.R shift dregs.R Z |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1416 update_flags XNZV0C |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1417 add shift shift shift |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1418 switch Z |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1419 case 2 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1420 add 4 shift shift |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1421 default |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1422 add 2 shift shift |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1423 end |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1424 cycles shift |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1425 #TODO: should this happen before or after the majority of the shift? |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1426 m68k_prefetch |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1427 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1428 1110001111MMMRRR lsl_ea |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1429 invalid M 0 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1430 invalid M 1 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1431 invalid M 7 R 2 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1432 invalid M 7 R 3 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1433 invalid M 7 R 4 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1434 invalid M 7 R 5 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1435 invalid M 7 R 6 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1436 invalid M 7 R 7 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1437 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1438 m68k_fetch_dst_ea M R 0 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1439 lsl dst 1 dst |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1440 update_flags XNZV0C |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1441 m68k_save_dst 0 |
7d4df6b74263
Somewhat buggy implementations of shift instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
1941
diff
changeset
|
1442 m68k_prefetch |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1443 |
2502
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1444 1110CCC1ZZ000RRR asli |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1445 invalid Z 3 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1446 switch C |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1447 case 0 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1448 meta shift 8 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1449 default |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1450 meta shift C |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1451 end |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1452 lsl dregs.R shift dregs.R Z |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1453 update_flags XNZV0C |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1454 local cyc 32 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1455 cyc = shift + shift |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1456 switch Z |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1457 case 2 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1458 cyc += 4 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1459 default |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1460 cyc += 2 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1461 end |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1462 cycles cyc |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1463 #TODO: should this happen before or after the majority of the shift? |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1464 m68k_prefetch |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1465 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1466 1110CCC1ZZ100RRR asl_dn |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1467 invalid Z 3 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1468 local shift 8 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1469 and dregs.C 63 shift |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1470 lsl dregs.R shift dregs.R Z |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1471 update_flags XNZV0C |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1472 add shift shift shift |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1473 switch Z |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1474 case 2 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1475 add 4 shift shift |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1476 default |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1477 add 2 shift shift |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1478 end |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1479 cycles shift |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1480 #TODO: should this happen before or after the majority of the shift? |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1481 m68k_prefetch |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1482 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1483 1110000111MMMRRR asl_ea |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1484 invalid M 0 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1485 invalid M 1 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1486 invalid M 7 R 2 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1487 invalid M 7 R 3 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1488 invalid M 7 R 4 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1489 invalid M 7 R 5 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1490 invalid M 7 R 6 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1491 invalid M 7 R 7 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1492 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1493 m68k_fetch_dst_ea M R 0 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1494 lsl dst 1 dst |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1495 update_flags XNZV0C |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1496 m68k_save_dst 0 |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1497 m68k_prefetch |
ad50530a7c27
Partially functional asr/asl implementations in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2501
diff
changeset
|
1498 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1499 00ZZRRRMMMEEESSS move |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1500 invalid Z 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1501 invalid M 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1502 invalid M 7 #not actually invalid, but will be handled separately due to DSL limitations |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1503 invalid E 7 S 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1504 invalid E 7 S 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1505 invalid E 7 S 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1506 local size 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1507 local memsrc 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1508 #move uses a different size format than most instructions |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1509 switch Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1510 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1511 mov 0 size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1512 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1513 mov 2 size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1514 case 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1515 mov 1 size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1516 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1517 m68k_fetch_src_ea E S size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1518 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1519 if src_is_mem |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1520 #avoid clobbering src if we need scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1521 mov src memsrc |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1522 meta src memsrc |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1523 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1524 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1525 cmp 0 src size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1526 update_flags NZV0C0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1527 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1528 switch M |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1529 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1530 mov src dregs.R size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1531 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1532 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1533 mov aregs.R scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1534 mov src scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1535 m68k_write_size size 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1536 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1537 case 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1538 mov aregs.R scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1539 mov src scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1540 switch R |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1541 case 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1542 if size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1543 addsize size aregs.R aregs.R |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1544 else |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1545 addsize 1 aregs.R aregs.R |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1546 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1547 default |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1548 addsize size aregs.R aregs.R |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1549 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1550 m68k_write_size size 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1551 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1552 case 4 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1553 mov src scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1554 switch R |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1555 case 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1556 if size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1557 decsize size aregs.R aregs.R |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1558 else |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1559 decsize 1 aregs.R aregs.R |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1560 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1561 default |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1562 decsize size aregs.R aregs.R |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1563 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1564 mov aregs.R scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1565 m68k_write_size size 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1566 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1567 case 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1568 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1569 sext 32 prefetch scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1570 add aregs.R scratch2 scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1571 mov src scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1572 m68k_write_size size 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1573 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1574 case 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1575 m68k_index_word |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1576 add aregs.R scratch1 scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1577 mov src scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1578 m68k_write_size size 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1579 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1580 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1581 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1582 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1583 00ZZ00M111EEESSS move_abs |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1584 invalid E 7 S 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1585 invalid E 7 S 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1586 invalid E 7 S 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1587 invalid Z 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1588 local size 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1589 local memsrc 32 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1590 #move uses a different size format than most instructions |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1591 switch Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1592 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1593 mov 0 size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1594 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1595 mov 2 size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1596 case 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1597 mov 1 size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1598 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1599 m68k_fetch_src_ea E S size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1600 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1601 if src_is_mem |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1602 #avoid clobbering src if we need scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1603 mov src memsrc |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1604 meta src memsrc |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1605 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1606 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1607 cmp 0 src size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1608 update_flags NZV0C0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1609 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1610 switch M |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1611 case 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1612 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1613 sext 32 prefetch scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1614 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1615 case 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1616 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1617 lsl prefetch 16 scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1618 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1619 or prefetch scratch2 scratch2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1620 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1621 mov src scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1622 m68k_write_size size 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1623 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1624 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1625 00ZZRRR001EEESSS movea |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1626 local size 8 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1627 invalid Z 0 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1628 invalid Z 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1629 invalid E 7 S 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1630 invalid E 7 S 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1631 invalid E 7 S 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1632 switch Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1633 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1634 mov 2 size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1635 case 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1636 mov 1 size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1637 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1638 m68k_fetch_src_ea E S size |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1639 switch Z |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1640 case 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1641 mov src aregs.R |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1642 case 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1643 sext 32 src aregs.R |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1644 end |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1645 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1646 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1647 0100010011MMMRRR move_to_ccr |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1648 invalid M 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1649 invalid M 7 R 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1650 invalid M 7 R 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1651 invalid M 7 R 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1652 m68k_fetch_src_ea M R 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1653 mov scratch1 ccr |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1654 cycles 8 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1655 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1656 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1657 0100011011MMMRRR move_to_sr |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1658 invalid M 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1659 invalid M 7 R 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1660 invalid M 7 R 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1661 invalid M 7 R 7 |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
1662 #TODO: privilege violation exception if in user mode |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1663 m68k_fetch_src_ea M R 1 |
2583
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
1664 ccr = scratch1 |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
1665 status = scratch1 >> 8 |
0f7609fe03f2
Implement andi/ori/eori to sr, fix eori to ccr in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2580
diff
changeset
|
1666 check_user_mode_swap_ssp_usp |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1667 update_sync |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1668 cycles 8 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1669 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1670 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1671 0100000011MMMRRR move_from_sr |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1672 invalid M 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1673 invalid M 7 R 2 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1674 invalid M 7 R 3 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1675 invalid M 7 R 4 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1676 invalid M 7 R 5 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1677 invalid M 7 R 6 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1678 invalid M 7 R 7 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1679 m68k_fetch_dst_ea M R 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1680 lsl status 8 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1681 or ccr scratch1 scratch1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1682 mov scratch1 dst |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1683 if M |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1684 cycles 4 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1685 else |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1686 cycles 2 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1687 end |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1688 m68k_save_dst 1 |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1689 m68k_prefetch |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1690 |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1691 01000000ZZMMMRRR negx |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1692 invalid M 1 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1693 invalid M 7 R 2 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1694 invalid M 7 R 3 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1695 invalid M 7 R 4 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1696 invalid M 7 R 5 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1697 invalid M 7 R 6 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1698 invalid M 7 R 7 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1699 m68k_fetch_dst_ea M R Z |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1700 sbc dst 0 dst Z |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1701 update_flags XNZVC |
2464
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
1702 if Z = 2 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
1703 if M = 0 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
1704 cycles 2 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
1705 end |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
1706 end |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1707 m68k_save_dst Z |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1708 m68k_prefetch |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1709 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1710 01000010ZZMMMRRR clr |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1711 invalid M 1 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1712 invalid M 7 R 2 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1713 invalid M 7 R 3 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1714 invalid M 7 R 4 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1715 invalid M 7 R 5 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1716 invalid M 7 R 6 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1717 invalid M 7 R 7 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1718 invalid Z 3 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1719 m68k_fetch_dst_ea M R Z |
2450
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1720 if Z = 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1721 if M = 0 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1722 #register clears have 2 cycle penalty for longword size |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1723 cycles 2 |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1724 end |
6c93869babc1
Fix cycle counts for a number of instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2448
diff
changeset
|
1725 end |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1726 dst:Z = 0 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1727 update_flags N0Z1V0C0 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1728 m68k_save_dst Z |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1729 m68k_prefetch |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
1730 |
2453
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1731 00001100ZZMMMRRR cmpi |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1732 local immed 32 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1733 invalid Z 3 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1734 invalid M 1 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1735 invalid M 7 R 2 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1736 invalid M 7 R 3 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1737 invalid M 7 R 4 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1738 invalid M 7 R 5 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1739 invalid M 7 R 6 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1740 invalid M 7 R 7 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1741 #fetch immediate operand |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1742 m68k_prefetch |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1743 switch Z |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1744 case 2 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1745 immed = prefetch << 16 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1746 m68k_prefetch |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1747 immed |= prefetch |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1748 if M = 0 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1749 cycles 2 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1750 end |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1751 default |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1752 immed = prefetch |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1753 end |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1754 #fetch dst EA |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1755 m68k_fetch_dst_ea M R Z |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1756 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1757 cmp immed dst Z |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1758 update_flags NZVC |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1759 m68k_prefetch |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1760 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1761 1011DDD1ZZ001SSS cmpm |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1762 invalid Z 3 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1763 scratch1 = aregs.S |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1764 switch Z |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1765 case 0 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1766 ocall read_8 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1767 case 1 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1768 ocall read_16 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1769 case 2 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1770 m68k_read32 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1771 end |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1772 scratch2 = scratch1 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1773 if Z |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1774 addsize Z aregs.S aregs.S |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1775 else |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1776 if S = 7 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1777 aregs.S += 2 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1778 else |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1779 aregs.S += 1 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1780 end |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1781 end |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1782 scratch1 = aregs.D |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1783 switch Z |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1784 case 0 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1785 ocall read_8 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1786 case 1 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1787 ocall read_16 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1788 case 2 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1789 m68k_read32 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1790 end |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1791 if Z |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1792 addsize Z aregs.D aregs.D |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1793 else |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1794 if D = 7 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1795 aregs.D += 2 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1796 else |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1797 aregs.D += 1 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1798 end |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1799 end |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1800 cmp scratch2 scratch1 Z |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1801 update_flags NZVC |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1802 m68k_prefetch |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1803 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1804 1011DDD0ZZMMMRRR cmp |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1805 invalid M 7 R 5 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1806 invalid M 7 R 6 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1807 invalid M 7 R 7 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1808 invalid Z 3 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1809 m68k_fetch_src_ea M R Z |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1810 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1811 if Z = 2 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1812 cycles 2 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1813 end |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1814 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1815 cmp src dregs.D Z |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1816 update_flags NZVC |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1817 m68k_prefetch |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1818 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1819 1011DDDZ11MMMRRR cmpa |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1820 invalid M 7 R 5 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1821 invalid M 7 R 6 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1822 invalid M 7 R 7 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1823 local size 16 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1824 local ext_src 32 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1825 if Z |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1826 size = 2 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1827 else |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1828 size = 1 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1829 end |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1830 m68k_fetch_src_ea M R size |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1831 cycles 2 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1832 if size = 1 |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1833 sext 32 src ext_src |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1834 meta src ext_src |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1835 end |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1836 cmp src aregs.D |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1837 update_flags NZVC |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1838 m68k_prefetch |
7d7525769ce2
Implement cmp instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2450
diff
changeset
|
1839 |
2454
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1840 0000100000MMMRRR btsti |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1841 invalid M 1 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1842 invalid M 7 R 5 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1843 invalid M 7 R 6 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1844 invalid M 7 R 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1845 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1846 local tmp 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1847 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1848 if M |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1849 tmp = scratch1 & 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1850 meta size 0 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1851 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1852 cycles 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1853 tmp = scratch1 & 31 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1854 meta size 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1855 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1856 tmp = 1 << tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1857 m68k_fetch_src_ea M R size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1858 tmp &= src |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1859 update_flags Z |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1860 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1861 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1862 0000100001MMMRRR bchgi |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1863 invalid M 1 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1864 invalid M 7 R 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1865 invalid M 7 R 3 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1866 invalid M 7 R 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1867 invalid M 7 R 5 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1868 invalid M 7 R 6 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1869 invalid M 7 R 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1870 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1871 local tmp 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1872 local tmp2 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1873 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1874 if M |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1875 tmp = scratch1 & 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1876 meta size 0 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1877 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1878 tmp = scratch1 & 31 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1879 meta size 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1880 if tmp >=U 16 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1881 cycles 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1882 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1883 cycles 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1884 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1885 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1886 tmp = 1 << tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1887 m68k_fetch_dst_ea M R size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1888 tmp2 = tmp & dst |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1889 update_flags Z |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1890 dst ^= tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1891 m68k_save_dst size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1892 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1893 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1894 0000100010MMMRRR bclri |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1895 invalid M 1 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1896 invalid M 7 R 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1897 invalid M 7 R 3 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1898 invalid M 7 R 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1899 invalid M 7 R 5 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1900 invalid M 7 R 6 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1901 invalid M 7 R 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1902 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1903 local tmp 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1904 local tmp2 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1905 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1906 if M |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1907 tmp = scratch1 & 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1908 meta size 0 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1909 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1910 tmp = scratch1 & 31 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1911 meta size 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1912 if tmp >=U 16 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1913 cycles 6 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1914 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1915 cycles 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1916 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1917 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1918 tmp = 1 << tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1919 m68k_fetch_dst_ea M R size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1920 tmp2 = tmp & dst |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1921 update_flags Z |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1922 tmp = ~tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1923 dst &= tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1924 m68k_save_dst size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1925 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1926 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1927 0000100011MMMRRR bseti |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1928 invalid M 1 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1929 invalid M 7 R 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1930 invalid M 7 R 3 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1931 invalid M 7 R 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1932 invalid M 7 R 5 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1933 invalid M 7 R 6 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1934 invalid M 7 R 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1935 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1936 local tmp 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1937 local tmp2 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1938 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1939 if M |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1940 tmp = scratch1 & 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1941 meta size 0 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1942 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1943 tmp = scratch1 & 31 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1944 meta size 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1945 if tmp >=U 16 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1946 cycles 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1947 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1948 cycles 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1949 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1950 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1951 tmp = 1 << tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1952 m68k_fetch_dst_ea M R size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1953 tmp2 = tmp & dst |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1954 update_flags Z |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1955 dst |= tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1956 m68k_save_dst size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1957 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1958 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1959 0000SSS100MMMRRR btst_dn |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1960 invalid M 1 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1961 invalid M 7 R 5 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1962 invalid M 7 R 6 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1963 invalid M 7 R 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1964 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1965 local tmp 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1966 if M |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1967 tmp = dregs.S & 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1968 meta size 0 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1969 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1970 tmp = dregs.S & 31 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1971 meta size 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1972 cycles 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1973 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1974 tmp = 1 << tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1975 m68k_fetch_src_ea M R size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1976 tmp &= src |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1977 update_flags Z |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1978 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1979 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1980 0000SSS101MMMRRR bchg_dn |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1981 invalid M 1 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1982 invalid M 7 R 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1983 invalid M 7 R 3 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1984 invalid M 7 R 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1985 invalid M 7 R 5 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1986 invalid M 7 R 6 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1987 invalid M 7 R 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1988 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1989 local tmp 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1990 local tmp2 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1991 if M |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1992 tmp = dregs.S & 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1993 meta size 0 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1994 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1995 tmp = dregs.S & 31 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1996 meta size 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1997 if tmp >=U 16 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1998 cycles 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
1999 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2000 cycles 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2001 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2002 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2003 tmp = 1 << tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2004 m68k_fetch_dst_ea M R size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2005 tmp2 = tmp & dst |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2006 update_flags Z |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2007 dst ^= tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2008 m68k_save_dst size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2009 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2010 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2011 0000SSS110MMMRRR bclr_dn |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2012 invalid M 1 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2013 invalid M 7 R 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2014 invalid M 7 R 3 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2015 invalid M 7 R 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2016 invalid M 7 R 5 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2017 invalid M 7 R 6 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2018 invalid M 7 R 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2019 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2020 local tmp 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2021 local tmp2 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2022 if M |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2023 tmp = dregs.S & 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2024 meta size 0 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2025 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2026 tmp = dregs.S & 31 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2027 meta size 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2028 if tmp >=U 16 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2029 cycles 6 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2030 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2031 cycles 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2032 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2033 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2034 tmp = 1 << tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2035 m68k_fetch_dst_ea M R size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2036 tmp2 = tmp & dst |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2037 update_flags Z |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2038 tmp = ~tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2039 dst &= tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2040 m68k_save_dst size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2041 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2042 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2043 0000SSS111MMMRRR bset_dn |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2044 invalid M 1 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2045 invalid M 7 R 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2046 invalid M 7 R 3 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2047 invalid M 7 R 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2048 invalid M 7 R 5 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2049 invalid M 7 R 6 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2050 invalid M 7 R 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2051 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2052 local tmp 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2053 local tmp2 32 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2054 if M |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2055 tmp = dregs.S & 7 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2056 meta size 0 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2057 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2058 tmp = dregs.S & 31 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2059 meta size 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2060 if tmp >=U 16 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2061 cycles 4 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2062 else |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2063 cycles 2 |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2064 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2065 end |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2066 tmp = 1 << tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2067 m68k_fetch_dst_ea M R size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2068 tmp2 = tmp & dst |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2069 update_flags Z |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2070 dst |= tmp |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2071 m68k_save_dst size |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2072 m68k_prefetch |
b1e8e7554f2f
Implement bit instructions in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2453
diff
changeset
|
2073 |
2456
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2074 0000DDD10Z001AAA movep_ay_dx |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2075 local address 32 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2076 m68k_prefetch |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2077 scratch1 += aregs.A |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2078 address = scratch1 + 2 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2079 ocall read_8 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2080 dregs.D:1 = scratch1 << 8 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2081 scratch1 = address |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2082 ocall read_8 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2083 dregs.D:0 = scratch1 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2084 if Z |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2085 address += 2 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2086 scratch1 = address |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2087 dregs.D <<= 16 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2088 ocall read_8 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2089 dregs.D:1 = scratch1 << 8 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2090 scratch1 = address + 2 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2091 ocall read_8 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2092 dregs.D:0 = scratch1 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2093 end |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2094 m68k_prefetch |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2095 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2096 0000DDD11Z001AAA movep_dx_ay |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2097 m68k_prefetch |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2098 scratch2 = scratch1 + aregs.A |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2099 if Z |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2100 scratch1 = dregs.D >> 24 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2101 ocall write_8 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2102 scratch2 += 2 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2103 scratch1 = dregs.D >> 16 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2104 ocall write_8 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2105 scratch2 += 2 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2106 end |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2107 scratch1 = dregs.D >> 8 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2108 ocall write_8 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2109 scratch2 += 2 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2110 scratch1 = dregs.D |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2111 ocall write_8 |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2112 m68k_prefetch |
72d0eac49507
Implement movep in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2454
diff
changeset
|
2113 |
2464
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2114 01000100ZZMMMRRR neg |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2115 invalid Z 3 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2116 invalid M 1 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2117 invalid M 7 R 2 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2118 invalid M 7 R 3 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2119 invalid M 7 R 4 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2120 invalid M 7 R 5 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2121 invalid M 7 R 6 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2122 invalid M 7 R 7 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2123 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2124 m68k_fetch_dst_ea M R Z |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2125 dst:Z = -dst |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2126 update_flags XNZVC |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2127 if Z = 2 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2128 if M = 0 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2129 cycles 2 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2130 end |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2131 end |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2132 m68k_save_dst Z |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2133 m68k_prefetch |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2134 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2135 01000110ZZMMMRRR not |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2136 invalid Z 3 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2137 invalid M 1 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2138 invalid M 7 R 2 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2139 invalid M 7 R 3 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2140 invalid M 7 R 4 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2141 invalid M 7 R 5 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2142 invalid M 7 R 6 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2143 invalid M 7 R 7 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2144 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2145 m68k_fetch_dst_ea M R Z |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2146 dst:Z = ~dst |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2147 update_flags NZV0C0 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2148 if Z = 2 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2149 if M = 0 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2150 cycles 2 |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2151 end |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2152 end |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2153 m68k_save_dst Z |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2154 m68k_prefetch |
f9d5c137c74b
Implement neg and not instructions in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2456
diff
changeset
|
2155 |
2468
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2156 01001000ZZ000RRR ext |
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2157 invalid Z 0 |
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2158 invalid Z 1 |
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2159 if Z = 3 |
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2160 meta bits 32 |
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2161 else |
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2162 meta bits 16 |
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2163 end |
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2164 sext bits dregs.R dregs.R |
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2165 update_flags NZV0C0 |
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2166 m68k_prefetch |
0ca78837e4d2
Implement ext instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2464
diff
changeset
|
2167 |
2562
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
2168 010011100100VVVV trap |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
2169 local vector 32 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
2170 scratch1 = pc |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
2171 vector = V + 32 |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
2172 m68k_trap vector |
595719fe69f2
Implement exg, muls and mulu in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2502
diff
changeset
|
2173 |
2470
6bec9e66d0db
Implement link instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2468
diff
changeset
|
2174 0100111001010RRR link |
6bec9e66d0db
Implement link instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2468
diff
changeset
|
2175 a7 -= 4 |
6bec9e66d0db
Implement link instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2468
diff
changeset
|
2176 scratch2 = a7 |
6bec9e66d0db
Implement link instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2468
diff
changeset
|
2177 #TODO: confirm order of fetch and write |
6bec9e66d0db
Implement link instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2468
diff
changeset
|
2178 m68k_write32 aregs.R |
6bec9e66d0db
Implement link instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2468
diff
changeset
|
2179 m68k_prefetch |
6bec9e66d0db
Implement link instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2468
diff
changeset
|
2180 aregs.R = a7 |
6bec9e66d0db
Implement link instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2468
diff
changeset
|
2181 sext 32 scratch1 scratch1 |
6bec9e66d0db
Implement link instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2468
diff
changeset
|
2182 a7 += scratch1 |
6bec9e66d0db
Implement link instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2468
diff
changeset
|
2183 m68k_prefetch |
6bec9e66d0db
Implement link instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2468
diff
changeset
|
2184 |
2479
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2185 0100111001011RRR unlk |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2186 a7 = aregs.R |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2187 scratch1 = a7 |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2188 m68k_read32 |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2189 a7 += 4 |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2190 aregs.R = scratch1 |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2191 m68k_prefetch |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2192 |
2472
f171a12fc98c
Implement swap instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2470
diff
changeset
|
2193 0100100001000RRR swap |
f171a12fc98c
Implement swap instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2470
diff
changeset
|
2194 ror dregs.R 16 dregs.R |
f171a12fc98c
Implement swap instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2470
diff
changeset
|
2195 update_flags NZV0C0 |
f171a12fc98c
Implement swap instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2470
diff
changeset
|
2196 m68k_prefetch |
2478
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2197 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2198 m68k_calc_ea |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2199 arg mode 16 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2200 arg reg 16 |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2201 arg index_penalty 32 |
2478
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2202 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2203 switch mode |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2204 case 2 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2205 #address reg indirect |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2206 meta ea aregs.reg |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2207 case 3 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2208 #postincrement |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2209 meta ea aregs.reg |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2210 case 4 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2211 #predecrement |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2212 #note: this case is only used when m68k_calc_ea |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2213 #is called from movem_reg_to_mem which does its own decrementing |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2214 meta ea aregs.reg |
2478
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2215 case 5 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2216 #displacement |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2217 m68k_prefetch |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2218 sext 32 prefetch scratch1 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2219 scratch1 += aregs.reg |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2220 meta ea scratch1 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2221 case 6 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2222 #index |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2223 m68k_index_word |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2224 cycles index_penalty |
2478
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2225 scratch1 += aregs.reg |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2226 meta ea scratch1 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2227 case 7 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2228 switch reg |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2229 case 0 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2230 #absolute short |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2231 m68k_prefetch |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2232 sext 32 prefetch scratch1 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2233 case 1 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2234 #absoltue long |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2235 m68k_prefetch |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2236 scratch2 = prefetch << 16 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2237 m68k_prefetch |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2238 scratch1 = scratch2 | prefetch |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2239 case 2 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2240 #pc displacement |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2241 m68k_prefetch |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2242 sext 32 prefetch scratch1 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2243 scratch1 += pc |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2244 scratch1 -= 2 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2245 case 3 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2246 #pc indexed |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2247 m68k_index_word |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2248 cycles index_penalty |
2478
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2249 scratch1 += pc |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2250 scratch1 -= 2 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2251 end |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2252 meta ea scratch1 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2253 end |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2254 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2255 0100100001MMMRRR pea |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2256 invalid M 0 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2257 invalid M 1 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2258 invalid M 3 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2259 invalid M 4 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2260 invalid M 7 R 4 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2261 invalid M 7 R 5 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2262 invalid M 7 R 6 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2263 invalid M 7 R 7 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2264 |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2265 m68k_calc_ea M R 4 |
2478
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2266 scratch2 = a7 - 4 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2267 m68k_write32_lowfirst ea |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2268 a7 -= 4 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2269 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2270 m68k_prefetch |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2271 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2272 0100DDD111MMMRRR lea |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2273 invalid M 0 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2274 invalid M 1 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2275 invalid M 3 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2276 invalid M 4 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2277 invalid M 7 R 4 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2278 invalid M 7 R 5 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2279 invalid M 7 R 6 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2280 invalid M 7 R 7 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2281 |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2282 m68k_calc_ea M R 4 |
2478
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2283 aregs.D = ea |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2284 |
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2285 m68k_prefetch |
2479
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2286 |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2287 01001010ZZMMMRRR tst |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2288 invalid M 7 R 5 |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2289 invalid M 7 R 6 |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2290 invalid M 7 R 7 |
2478
ea37200967c7
Implement lea and pea in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2472
diff
changeset
|
2291 |
2479
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2292 m68k_fetch_dst_ea M R Z |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2293 |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2294 cmp 0 dst Z |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2295 update_flags NZV0C0 |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2296 m68k_prefetch |
2472
f171a12fc98c
Implement swap instruction in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2470
diff
changeset
|
2297 |
1838
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2298 0100111001110000 reset |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2299 if reset_handler |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2300 pcall reset_handler m68k_reset_handler context |
0c1491818f4b
WIP new 68K core using CPU DSL
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2301 end |
2448
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
2302 cycles 128 |
d1eec03dca09
Fix some issues in new 68K core and add implementations of negx and clr instructions
Michael Pavone <pavone@retrodev.com>
parents:
1991
diff
changeset
|
2303 m68k_prefetch |
2479
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2304 |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2305 0100111001110001 nop |
29baf8d5a579
Implement unlk, tst and nop in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2478
diff
changeset
|
2306 m68k_prefetch |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2307 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2308 0100111001110011 rte |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2309 #TODO: privilege violation exception if in user mode |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2310 #Read saved SR |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2311 scratch1 = a7 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2312 ocall read_16 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2313 a7 += 2 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2314 ccr = scratch1 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2315 status = scratch1 >> 8 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2316 #Read saved PC |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2317 scratch1 = a7 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2318 m68k_read32 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2319 a7 += 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2320 pc = scratch1 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2321 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2322 check_user_mode_swap_ssp_usp |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2323 cycles 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2324 update_sync |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2325 m68k_prefetch |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2326 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2327 0100111001110101 m68k_rts |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2328 scratch1 = a7 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2329 m68k_read32 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2330 a7 += 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2331 pc = scratch1 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2332 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2333 cycles 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2334 m68k_prefetch |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2335 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2336 0100111001110111 rtr |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2337 #Read saved CCR |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2338 scratch1 = a7 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2339 ocall read_16 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2340 a7 += 2 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2341 ccr = scratch1 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2342 #Read saved PC |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2343 scratch1 = a7 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2344 m68k_read32 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2345 a7 += 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2346 pc = scratch1 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2347 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2348 cycles 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2349 m68k_prefetch |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2350 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2351 0100111010MMMRRR jsr |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2352 invalid M 0 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2353 invalid M 1 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2354 invalid M 3 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2355 invalid M 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2356 invalid M 7 R 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2357 invalid M 7 R 5 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2358 invalid M 7 R 6 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2359 invalid M 7 R 7 |
2585
c730067d5f77
Fix jsr in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2584
diff
changeset
|
2360 local tmp 32 |
c730067d5f77
Fix jsr in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2584
diff
changeset
|
2361 |
c730067d5f77
Fix jsr in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2584
diff
changeset
|
2362 m68k_calc_ea M R 2 |
c730067d5f77
Fix jsr in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2584
diff
changeset
|
2363 tmp = ea |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2364 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2365 a7 -= 4 |
2501
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2366 scratch2 = a7 |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2367 m68k_write32 pc |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2368 |
2585
c730067d5f77
Fix jsr in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2584
diff
changeset
|
2369 pc = tmp |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2370 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2371 cycles 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2372 m68k_prefetch |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2373 |
2501
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2374 0100111011MMMRRR jmp |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2375 invalid M 0 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2376 invalid M 1 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2377 invalid M 3 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2378 invalid M 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2379 invalid M 7 R 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2380 invalid M 7 R 5 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2381 invalid M 7 R 6 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2382 invalid M 7 R 7 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2383 |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2384 m68k_calc_ea M R 2 |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2385 pc = ea |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2386 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2387 cycles 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2388 m68k_prefetch |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2389 |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2390 m68k_movem_reg_to_mem |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2391 arg reglist 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2392 arg mask 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2393 arg reg 32 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2394 arg size 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2395 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2396 scratch1 = reglist & mask |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2397 if scratch1 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2398 scratch2 = addr |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2399 scratch1 = reg |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2400 m68k_write_size size 1 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2401 addsize size addr addr |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2402 end |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2403 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2404 m68k_movem_reg_to_mem_dec |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2405 arg reglist 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2406 arg mask 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2407 arg reg 32 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2408 arg size 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2409 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2410 scratch1 = reglist & mask |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2411 if scratch1 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2412 decsize size addr addr |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2413 scratch2 = addr |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2414 scratch1 = reg |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2415 m68k_write_size size 1 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2416 end |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2417 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2418 |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2419 010010001ZMMMRRR movem_reg_to_mem |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2420 invalid M 0 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2421 invalid M 1 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2422 invalid M 3 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2423 invalid M 7 R 2 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2424 invalid M 7 R 3 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2425 invalid M 7 R 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2426 invalid M 7 R 5 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2427 invalid M 7 R 6 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2428 invalid M 7 R 7 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2429 local reglist 16 |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2430 local address 32 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2431 local sz 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2432 sz = Z + 1 |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2433 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2434 m68k_prefetch |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2435 reglist = scratch1 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2436 |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2437 m68k_calc_ea M R 2 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2438 address = ea |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2439 meta addr address |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2440 if M = 4 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2441 m68k_movem_reg_to_mem_dec reglist 1 a7 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2442 m68k_movem_reg_to_mem_dec reglist 2 a6 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2443 m68k_movem_reg_to_mem_dec reglist 4 a5 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2444 m68k_movem_reg_to_mem_dec reglist 8 a4 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2445 m68k_movem_reg_to_mem_dec reglist 16 a3 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2446 m68k_movem_reg_to_mem_dec reglist 32 a2 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2447 m68k_movem_reg_to_mem_dec reglist 64 a1 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2448 m68k_movem_reg_to_mem_dec reglist 128 a0 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2449 m68k_movem_reg_to_mem_dec reglist 256 d7 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2450 m68k_movem_reg_to_mem_dec reglist 512 d6 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2451 m68k_movem_reg_to_mem_dec reglist 1024 d5 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2452 m68k_movem_reg_to_mem_dec reglist 2048 d4 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2453 m68k_movem_reg_to_mem_dec reglist 4096 d3 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2454 m68k_movem_reg_to_mem_dec reglist 8192 d2 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2455 m68k_movem_reg_to_mem_dec reglist 16384 d1 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2456 m68k_movem_reg_to_mem_dec reglist 32768 d0 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2457 ea = address |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2458 else |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2459 m68k_movem_reg_to_mem reglist 1 d0 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2460 m68k_movem_reg_to_mem reglist 2 d1 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2461 m68k_movem_reg_to_mem reglist 4 d2 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2462 m68k_movem_reg_to_mem reglist 8 d3 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2463 m68k_movem_reg_to_mem reglist 16 d4 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2464 m68k_movem_reg_to_mem reglist 32 d5 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2465 m68k_movem_reg_to_mem reglist 64 d6 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2466 m68k_movem_reg_to_mem reglist 128 d7 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2467 m68k_movem_reg_to_mem reglist 256 a0 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2468 m68k_movem_reg_to_mem reglist 512 a1 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2469 m68k_movem_reg_to_mem reglist 1024 a2 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2470 m68k_movem_reg_to_mem reglist 2048 a3 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2471 m68k_movem_reg_to_mem reglist 4096 a4 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2472 m68k_movem_reg_to_mem reglist 8192 a5 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2473 m68k_movem_reg_to_mem reglist 16384 a6 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2474 m68k_movem_reg_to_mem reglist 32768 a7 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2475 end |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2476 m68k_prefetch |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2477 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2478 m68k_movem_mem_to_dreg |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2479 arg reglist 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2480 arg mask 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2481 arg reg 32 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2482 arg size 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2483 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2484 scratch1 = reglist & mask |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2485 if scratch1 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2486 scratch1 = addr |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2487 if sz = 1 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2488 ocall read_16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2489 sext 32 scratch1 dregs.reg |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2490 else |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2491 m68k_read32 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2492 dregs.reg = scratch1 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2493 end |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2494 addsize size addr addr |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2495 end |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2496 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2497 m68k_movem_mem_to_areg |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2498 arg reglist 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2499 arg mask 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2500 arg reg 32 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2501 arg size 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2502 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2503 scratch1 = reglist & mask |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2504 if scratch1 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2505 scratch1 = addr |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2506 if sz = 1 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2507 ocall read_16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2508 sext 32 scratch1 aregs.reg |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2509 else |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2510 m68k_read32 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2511 aregs.reg = scratch1 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2512 end |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2513 addsize size addr addr |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2514 end |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2515 |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2516 010011001ZMMMRRR movem_mem_to_reg |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2517 invalid M 0 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2518 invalid M 1 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2519 invalid M 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2520 invalid M 7 R 4 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2521 invalid M 7 R 5 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2522 invalid M 7 R 6 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2523 invalid M 7 R 7 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2524 local reglist 16 |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2525 local address 32 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2526 local sz 16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2527 sz = Z + 1 |
2481
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2528 |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2529 m68k_prefetch |
f0645adddf0d
Implement some flow control instructions in new 68K core. WIP implementation of movem in new 68K core.
Michael Pavone <pavone@retrodev.com>
parents:
2479
diff
changeset
|
2530 reglist = scratch1 |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2531 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2532 m68k_calc_ea M R 2 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2533 address = ea |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2534 meta addr address |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2535 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2536 m68k_movem_mem_to_dreg reglist 1 0 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2537 m68k_movem_mem_to_dreg reglist 2 1 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2538 m68k_movem_mem_to_dreg reglist 4 2 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2539 m68k_movem_mem_to_dreg reglist 8 3 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2540 m68k_movem_mem_to_dreg reglist 16 4 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2541 m68k_movem_mem_to_dreg reglist 32 5 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2542 m68k_movem_mem_to_dreg reglist 64 6 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2543 m68k_movem_mem_to_dreg reglist 128 7 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2544 m68k_movem_mem_to_areg reglist 256 0 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2545 m68k_movem_mem_to_areg reglist 512 1 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2546 m68k_movem_mem_to_areg reglist 1024 2 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2547 m68k_movem_mem_to_areg reglist 2048 3 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2548 m68k_movem_mem_to_areg reglist 4096 4 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2549 m68k_movem_mem_to_areg reglist 8192 5 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2550 m68k_movem_mem_to_areg reglist 16384 6 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2551 m68k_movem_mem_to_areg reglist 32768 7 sz |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2552 #dummy read |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2553 scratch1 = address |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2554 ocall read_16 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2555 if M = 3 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2556 ea = address |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2557 end |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2558 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2559 m68k_prefetch |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2560 |
2501
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2561 0100111001100RRR move_to_usp |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2562 #TODO: trap if not in supervisor mode |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2563 other_sp = aregs.R |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2564 m68k_prefetch |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2565 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2566 0100111001101RRR move_from_usp |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2567 #TODO: trap if not in supervisor mode |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2568 aregs.R = other_sp |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2569 m68k_prefetch |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2570 |
2498
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2571 0111RRR0IIIIIIII moveq |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2572 local tmp 32 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2573 sext 16 I tmp |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2574 sext 32 tmp dregs.R |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2575 cmp 0 dregs.R |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2576 update_flags NZV0C0 |
dffda054d218
Implement movem and moveq in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2481
diff
changeset
|
2577 m68k_prefetch |
2501
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2578 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2579 0110000100000000 bsr_w |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2580 #mid-instruction timing isn't quite right |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2581 #becuase I'm only emulating a 1-word prefetch buffer instead of 2 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2582 local offset 32 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2583 m68k_prefetch |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2584 sext 32 prefetch offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2585 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2586 a7 -= 4 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2587 scratch2 = a7 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2588 m68k_write32 pc |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2589 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2590 pc += offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2591 pc -= 2 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2592 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2593 cycles 2 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2594 m68k_prefetch |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2595 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2596 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2597 01100001DDDDDDDD bsr |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2598 #mid-instruction timing isn't quite right |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2599 #becuase I'm only emulating a 1-word prefetch buffer instead of 2 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2600 local offset 32 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2601 sext 16 D offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2602 sext 32 offset offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2603 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2604 a7 -= 4 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2605 scratch2 = a7 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2606 m68k_write32 pc |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2607 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2608 pc += offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2609 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2610 cycles 6 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2611 m68k_prefetch |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2612 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2613 m68k_check_cond |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2614 arg cond 16 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2615 local invert 8 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2616 switch cond |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2617 case 0 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2618 #true |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2619 meta istrue 1 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2620 case 1 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2621 #false |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2622 meta istrue 0 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2623 case 2 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2624 #high |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2625 meta istrue invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2626 invert = zflag | cflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2627 invert = !invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2628 case 3 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2629 #low or same |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2630 meta istrue invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2631 invert = zflag | cflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2632 case 4 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2633 #carry clear |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2634 meta istrue invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2635 invert = !cflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2636 case 5 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2637 #carry set |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2638 meta istrue cflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2639 case 6 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2640 #not equal |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2641 meta istrue invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2642 invert = !zflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2643 case 7 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2644 #equal |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2645 meta istrue zflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2646 case 8 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2647 #overflow clear |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2648 meta istrue invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2649 invert = !vflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2650 case 9 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2651 #overflow set |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2652 meta istrue vflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2653 case 10 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2654 #plus |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2655 meta istrue invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2656 invert = !nflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2657 case 11 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2658 #minus |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2659 meta istrue nflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2660 case 12 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2661 #greater or equal |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2662 meta istrue invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2663 invert = nflag - vflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2664 invert = !invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2665 case 13 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2666 #less |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2667 meta istrue invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2668 invert = nflag - vflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2669 case 14 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2670 #greater |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2671 meta istrue invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2672 invert = vflag ^ nflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2673 invert |= zflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2674 invert = !invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2675 case 15 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2676 #less or equal |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2677 meta istrue invert |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2678 invert = vflag ^ nflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2679 invert |= zflag |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2680 end |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2681 |
2584
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2682 0101CCCC11MMMDDD scc |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2683 invalid M 1 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2684 invalid M 7 D 2 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2685 invalid M 7 D 3 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2686 invalid M 7 D 4 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2687 invalid M 7 D 5 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2688 invalid M 7 D 6 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2689 invalid M 7 D 7 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2690 m68k_fetch_dst_ea M D 0 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2691 m68k_check_cond C |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2692 if istrue |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2693 if M = 0 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2694 cycles 2 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2695 end |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2696 dst:0 = 0xFF |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2697 else |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2698 dst:0 = 0 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2699 end |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2700 m68k_save_dst 0 |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2701 m68k_prefetch |
5851240f71c9
Implement scc in new 68K core
Michael Pavone <pavone@retrodev.com>
parents:
2583
diff
changeset
|
2702 |
2501
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2703 0110CCCC00000000 bcc_w |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2704 #mid-instruction timing isn't quite right |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2705 #becuase I'm only emulating a 1-word prefetch buffer instead of 2 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2706 local offset 32 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2707 m68k_prefetch |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2708 m68k_check_cond C |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2709 if istrue |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2710 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2711 sext 32 prefetch offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2712 pc += offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2713 pc -= 2 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2714 cycles 2 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2715 else |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2716 cycles 4 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2717 end |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2718 m68k_prefetch |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2719 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2720 0110CCCCDDDDDDDD bcc |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2721 #mid-instruction timing isn't quite right |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2722 #becuase I'm only emulating a 1-word prefetch buffer instead of 2 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2723 local offset 32 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2724 m68k_check_cond C |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2725 if istrue |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2726 sext 16 D offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2727 sext 32 offset offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2728 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2729 pc += offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2730 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2731 cycles 6 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2732 else |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2733 cycles 4 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2734 end |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2735 m68k_prefetch |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2736 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2737 0101CCCC11001RRR dbcc |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2738 local offset 32 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2739 local tmp 16 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2740 m68k_prefetch |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2741 m68k_check_cond C |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2742 if istrue |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2743 cycles 4 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2744 else |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2745 dregs.R:1 -= 1 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2746 tmp = dregs.R |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2747 if tmp = 65535 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2748 cycles 6 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2749 else |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2750 sext 32 prefetch offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2751 pc += offset |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2752 pc -= 2 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2753 cycles 2 |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2754 end |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2755 end |
6cd5a1d76e34
Implement some more instructions in new 68K core. First light with some old demos
Michael Pavone <pavone@retrodev.com>
parents:
2500
diff
changeset
|
2756 m68k_prefetch |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2757 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2758 1110CCC0ZZ011RRR rori |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2759 invalid Z 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2760 switch C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2761 case 0 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2762 meta shift 8 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2763 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2764 meta shift C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2765 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2766 ror dregs.R shift dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2767 update_flags NZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2768 local cyc 32 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2769 cyc = shift + shift |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2770 switch Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2771 case 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2772 cyc += 4 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2773 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2774 cyc += 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2775 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2776 cycles cyc |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2777 #TODO: should this happen before or after the majority of the rotate? |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2778 m68k_prefetch |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2779 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2780 1110CCC0ZZ111RRR ror_dn |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2781 invalid Z 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2782 local shift 8 |
2578
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2783 shift = dregs.C & 63 |
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2784 ror dregs.R shift dregs.R Z |
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2785 update_flags NZV0C |
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2786 shift += shift |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2787 switch Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2788 case 2 |
2578
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2789 shift += 4 |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2790 default |
2578
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2791 shift += 2 |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2792 end |
2578
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2793 cycles shift |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2794 #TODO: should this happen before or after the majority of the rotate? |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2795 m68k_prefetch |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2796 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2797 1110011011MMMRRR ror_ea |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2798 invalid M 0 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2799 invalid M 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2800 invalid M 7 R 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2801 invalid M 7 R 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2802 invalid M 7 R 4 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2803 invalid M 7 R 5 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2804 invalid M 7 R 6 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2805 invalid M 7 R 7 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2806 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2807 m68k_fetch_dst_ea M R 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2808 ror dst 1 dst 1 |
2578
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2809 update_flags NZV0C |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2810 m68k_save_dst 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2811 m68k_prefetch |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2812 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2813 1110CCC1ZZ011RRR roli |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2814 invalid Z 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2815 switch C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2816 case 0 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2817 meta shift 8 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2818 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2819 meta shift C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2820 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2821 rol dregs.R shift dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2822 update_flags NZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2823 local cyc 32 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2824 cyc = shift + shift |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2825 switch Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2826 case 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2827 cyc += 4 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2828 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2829 cyc += 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2830 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2831 cycles cyc |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2832 #TODO: should this happen before or after the majority of the rotate? |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2833 m68k_prefetch |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2834 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2835 1110CCC1ZZ111RRR rol_dn |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2836 invalid Z 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2837 local shift 8 |
2578
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2838 shift = dregs.C & 63 |
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2839 rol dregs.R shift dregs.R Z |
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2840 update_flags NZV0C |
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2841 shift += shift |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2842 switch Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2843 case 2 |
2578
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2844 shift += 4 |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2845 default |
2578
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2846 shift += 2 |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2847 end |
2578
9b01541cbd60
Fix rol and ror in new CPU core
Michael Pavone <pavone@retrodev.com>
parents:
2577
diff
changeset
|
2848 cycles shift |
2577
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2849 #TODO: should this happen before or after the majority of the rotate? |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2850 m68k_prefetch |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2851 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2852 1110011111MMMRRR rol_ea |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2853 invalid M 0 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2854 invalid M 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2855 invalid M 7 R 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2856 invalid M 7 R 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2857 invalid M 7 R 4 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2858 invalid M 7 R 5 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2859 invalid M 7 R 6 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2860 invalid M 7 R 7 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2861 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2862 m68k_fetch_dst_ea M R 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2863 rol dst 1 dst 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2864 update_flags NZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2865 m68k_save_dst 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2866 m68k_prefetch |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2867 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2868 1110CCC0ZZ010RRR roxri |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2869 invalid Z 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2870 switch C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2871 case 0 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2872 meta shift 8 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2873 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2874 meta shift C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2875 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2876 rrc dregs.R shift dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2877 update_flags XNZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2878 local cyc 32 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2879 cyc = shift + shift |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2880 switch Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2881 case 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2882 cyc += 4 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2883 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2884 cyc += 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2885 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2886 cycles cyc |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2887 #TODO: should this happen before or after the majority of the rotate? |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2888 m68k_prefetch |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2889 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2890 1110CCC0ZZ110RRR roxr_dn |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2891 invalid Z 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2892 local shift 8 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2893 local cycle_shift 8 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2894 cycle_shift = dregs.C & 63 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2895 switch Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2896 case 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2897 if cycle_shift = 32 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2898 rrc dregs.R 31 dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2899 rrc dregs.R 1 dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2900 update_flags NZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2901 else |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2902 shift = dregs.C & 31 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2903 rrc dregs.R shift dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2904 update_flags NZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2905 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2906 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2907 shift = dregs.C & 31 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2908 rrc dregs.R shift dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2909 update_flags XNZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2910 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2911 cycle_shift += cycle_shift |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2912 switch Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2913 case 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2914 cycle_shift += 4 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2915 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2916 cycle_shift += 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2917 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2918 cycles cycle_shift |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2919 #TODO: should this happen before or after the majority of the rotate? |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2920 m68k_prefetch |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2921 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2922 1110010011MMMRRR roxr_ea |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2923 invalid M 0 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2924 invalid M 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2925 invalid M 7 R 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2926 invalid M 7 R 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2927 invalid M 7 R 4 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2928 invalid M 7 R 5 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2929 invalid M 7 R 6 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2930 invalid M 7 R 7 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2931 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2932 m68k_fetch_dst_ea M R 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2933 rrc dst 1 dst 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2934 update_flags XNZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2935 m68k_save_dst 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2936 m68k_prefetch |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2937 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2938 1110CCC1ZZ010RRR roxli |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2939 invalid Z 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2940 switch C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2941 case 0 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2942 meta shift 8 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2943 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2944 meta shift C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2945 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2946 rlc dregs.R shift dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2947 update_flags XNZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2948 local cyc 32 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2949 cyc = shift + shift |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2950 switch Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2951 case 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2952 cyc += 4 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2953 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2954 cyc += 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2955 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2956 cycles cyc |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2957 #TODO: should this happen before or after the majority of the rotate? |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2958 m68k_prefetch |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2959 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2960 1110CCC1ZZ110RRR roxl_dn |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2961 invalid Z 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2962 local shift 8 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2963 local cycle_shift 8 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2964 cycle_shift = dregs.C & 63 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2965 switch Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2966 case 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2967 if cycle_shift = 32 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2968 rrc dregs.R 31 dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2969 rlc dregs.R 1 dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2970 update_flags NZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2971 else |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2972 shift = dregs.C & 31 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2973 rlc dregs.R shift dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2974 update_flags NZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2975 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2976 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2977 shift = dregs.C & 31 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2978 rlc dregs.R shift dregs.R Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2979 update_flags XNZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2980 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2981 cycle_shift += cycle_shift |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2982 switch Z |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2983 case 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2984 cycle_shift += 4 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2985 default |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2986 cycle_shift += 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2987 end |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2988 cycles cycle_shift |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2989 #TODO: should this happen before or after the majority of the rotate? |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2990 m68k_prefetch |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2991 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2992 1110010111MMMRRR roxl_ea |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2993 invalid M 0 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2994 invalid M 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2995 invalid M 7 R 2 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2996 invalid M 7 R 3 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2997 invalid M 7 R 4 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2998 invalid M 7 R 5 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
2999 invalid M 7 R 6 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
3000 invalid M 7 R 7 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
3001 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
3002 m68k_fetch_dst_ea M R 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
3003 rlc dst 1 dst 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
3004 update_flags XNZV0C |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
3005 m68k_save_dst 1 |
5f725429d08f
WIP changes to new CPU core for rotate instructions and to get interrupts more functional
Michael Pavone <pavone@retrodev.com>
parents:
2562
diff
changeset
|
3006 m68k_prefetch |