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

Subversion Repositories ao68000

[/] [ao68000/] [trunk/] [sw/] [ao68000_tool/] [Microcode.java] - Blame information for rev 17

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 alfik
/*
2
 * Copyright 2010, Aleksander Osman, alfik@poczta.fm. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or without modification, are
5
 * permitted provided that the following conditions are met:
6
 *
7
 *  1. Redistributions of source code must retain the above copyright notice, this list of
8
 *     conditions and the following disclaimer.
9
 *
10
 *  2. Redistributions in binary form must reproduce the above copyright notice, this list
11
 *     of conditions and the following disclaimer in the documentation and/or other materials
12
 *     provided with the distribution.
13
 *
14
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
15
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
17
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
 */
24
 
25
package ao68000_tool;
26
 
27
public class Microcode {
28
    static void microcode(Parser p) throws Exception {
29
 
30
        p.label("reset");
31
 
32
        p       .GROUP_0_FLAG_SET();
33
 
34
                // wait for instruction prefetch
35
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
36
 
37
                // move SSP and PC from prefetch
38
        p       .AN_INPUT_FROM_PREFETCH_IR().AN_ADDRESS_SSP().AN_WRITE_ENABLE_SET()
39
                .PC_FROM_PREFETCH_IR()
40
                // jump to main loop
41
                .BRANCH_procedure().PROCEDURE_jump_to_main_loop();
42
 
43
 
44
        p.label("MICROPC_ADDRESS_BUS_TRAP");
45
 
46
                // save trap number and bus cycle extended information
47
        p       .TRAP_FROM_INTERRUPT()
48
                .OP2_MOVE_ADDRESS_BUS_INFO()
49
                // clear internal flags
50
                .READ_MODIFY_WRITE_FLAG_CLEAR()
51
                .INSTRUCTION_FLAG_SET()
52
                .DO_READ_FLAG_CLEAR()
53
                .DO_WRITE_FLAG_CLEAR()
54
                .DO_INTERRUPT_FLAG_CLEAR()
55
 
56
                // check if group_0_flag already active
57
                .BRANCH_group_0_flag().offset("address_bus_trap_group_0_flag_cleared");
58
 
59
                        // if group_0_flag active: block processor
60
        p               .DO_BLOCKED_FLAG_SET()
61
                        .BRANCH_procedure()
62
                        .PROCEDURE_wait_finished();
63
 
64
                // continue processing trap
65
        p       .label("address_bus_trap_group_0_flag_cleared");
66
        p       .GROUP_0_FLAG_SET();
67
 
68
        //--
69
                // move PC to OP1
70
        p       .OP1_FROM_PC();
71
                // move OP1 to result
72
        p       .ALU_SIMPLE_MOVE()
73
                // move SR to OP1
74
                .OP1_FROM_SR();
75
 
76
                // set supervisor, clear trace
77
        p       .ALU_SR_SET_TRAP();
78
 
79
        //--
80
                // stack PC
81
        p       .SIZE_LONG().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
82
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
83
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
84
        p       .BRANCH_procedure().PROCEDURE_call_save_ea()
85
                // move SR to result
86
                .ALU_SIMPLE_MOVE()
87
                // move IR to OP1
88
                .OP1_FROM_IR();
89
 
90
                // stack SR
91
        p       .SIZE_WORD().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
92
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
93
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
94
        p       .BRANCH_procedure().PROCEDURE_call_save_ea()
95
                // move IR to result
96
                .ALU_SIMPLE_MOVE()
97
                // move fault address to OP1
98
                .OP1_FROM_FAULT_ADDRESS();
99
 
100
        //--
101
                // stack IR
102
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
103
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
104
        p       .BRANCH_procedure().PROCEDURE_call_save_ea()
105
                // move fault address to result
106
                .ALU_SIMPLE_MOVE()
107
                // move bus cycle info stored in OP2 to OP1
108
                .OP1_FROM_OP2();
109
 
110
                // stack fault address
111
        p       .SIZE_LONG().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
112
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
113
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
114
        p       .BRANCH_procedure().PROCEDURE_call_save_ea()
115
                // move bus cycle info from OP1 to result
116
                .ALU_SIMPLE_MOVE();
117
 
118
                // stack bus cycle info
119
        p       .SIZE_WORD().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
120
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
121
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
122
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
123
 
124
        //--
125
                // load PC from exception vector table
126
        p       .ADDRESS_FROM_TRAP()
127
                .SIZE_LONG().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
128
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
129
        p       .ALU_SIMPLE_MOVE();
130
 
131
                // wait for instruction prefetch
132
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
133
 
134
        p       .PC_FROM_RESULT();
135
 
136
                // wait one cycle to check loaded PC: is it even ?
137
        p       .OP1_FROM_OP2();
138
        //--
139
                // jump to main loop
140
        p       .BRANCH_procedure().PROCEDURE_jump_to_main_loop();
141
 
142
        p.label("MICROPC_TRAP_ENTRY");
143
 
144
        //--
145
                // move PC to OP1
146
        p       .OP1_FROM_PC();
147
                // move OP1 to result
148
        p       .ALU_SIMPLE_MOVE()
149
                // move SR to OP1
150
                .OP1_FROM_SR();
151
 
152
                // set supervisor, clear trace
153
        p       .ALU_SR_SET_TRAP();
154
 
155
        //--
156
                // stack PC
157
        p       .SIZE_LONG().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
158
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
159
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
160
        p       .BRANCH_procedure().PROCEDURE_call_save_ea()
161
                // move SR to result
162
                .ALU_SIMPLE_MOVE();
163
 
164
                // stack SR
165
        p       .SIZE_WORD().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
166
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
167
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
168
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
169
 
170
        //--
171
                // load PC from exception vector table
172
        p       .ADDRESS_FROM_TRAP()
173
                .SIZE_LONG().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
174
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
175
        p       .ALU_SIMPLE_MOVE();
176
 
177
                // wait for instruction prefetch
178
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
179
 
180
        p       .PC_FROM_RESULT();
181
 
182
                // wait one cycle to check loaded PC: is it even ?
183
        p       .OP1_FROM_OP2();
184
 
185
        //--
186
                // return
187
        p       .BRANCH_procedure().PROCEDURE_return();
188
 
189
 
190
        p.label("MICROPC_MAIN_LOOP");
191
 
192
                // check if stop flag set and wait for valid prefetch and decode instruction
193
                // execute instruction, instruction generated trap possible
194
        p       .BRANCH_stop_flag_wait_ir_decode().offset("main_loop_after_execution")
195
                // clear read-modify-write flag always
196
                .READ_MODIFY_WRITE_FLAG_CLEAR()
197
 
198
                // save trace flag, only when valid prefetch and valid instruction and stop flag cleared
199
                .TRACE_FLAG_COPY_WHEN_NO_STOP()
200
 
201
                // save first instruction word, only when prefetch valid and stop flag cleared
202
                .IR_LOAD_WHEN_PREFETCH_VALID()
203
                // clear group 0 flag, only when valid prefetch and stop flag cleared
204
                .GROUP_0_FLAG_CLEAR_WHEN_VALID_PREFETCH()
205
 
206
                // increment PC by 2, only when valid prefetch and valid instruction and stop flag cleared
207
                .PC_INCR_BY_2_IN_MAIN_LOOP()
208
                // clear instruction flag, only when valid prefetch and valid instruction and stop flag cleared
209
                .INSTRUCTION_FLAG_CLEAR_IN_MAIN_LOOP();
210
 
211
                        // call trap
212
        p               .TRAP_FROM_DECODER()
213
                        .INSTRUCTION_FLAG_SET()
214
                        .BRANCH_procedure().PROCEDURE_call_trap();
215
                                // after trap jump to main loop
216
        p                       .BRANCH_procedure().PROCEDURE_jump_to_main_loop();
217
 
218
                // jump here after execution
219
        p       .label("main_loop_after_execution");
220
 
221
                // check if trace flag set and check external interrupt
222
        p       .BRANCH_trace_flag_and_interrupt().offset("main_loop_interrupt")
223
                // set instruction flag, always
224
                .INSTRUCTION_FLAG_SET();
225
 
226
                        // call trap
227
        p               .TRAP_TRACE()
228
                        .STOP_FLAG_CLEAR()
229
                        .BRANCH_procedure().PROCEDURE_call_trap();
230
                        // after trap continue
231
 
232
                // jump here if trace flag not set and interupt pending
233
        p       .label("main_loop_interrupt");
234
 
235
                // check external interrupt
236
        p       .DO_INTERRUPT_FLAG_SET_IF_ACTIVE()
237
                .BRANCH_procedure().PROCEDURE_interrupt_mask();
238
 
239
        p               .BRANCH_procedure().PROCEDURE_wait_finished()
240
                        .ALU_SR_SET_INTERRUPT();
241
 
242
        p               .DO_INTERRUPT_FLAG_CLEAR()
243
                        .TRAP_FROM_INTERRUPT()
244
                        .STOP_FLAG_CLEAR()
245
                        .BRANCH_procedure().PROCEDURE_call_trap();
246
 
247
                        // after trap jump to main loop
248
                        p       .BRANCH_procedure().PROCEDURE_jump_to_main_loop();
249
 
250
        // **************************************************************** EA
251
 
252
        // load ea: to address register
253
 
254
        // (An), (An)+:
255
        p.label("MICROPC_LOAD_EA_An");
256
        p.label("MICROPC_LOAD_EA_An_plus");
257
 
258
        p       .ADDRESS_FROM_AN_OUTPUT()
259
                .BRANCH_procedure().PROCEDURE_return();
260
 
261
        // -(An):
262
        p.label("MICROPC_LOAD_EA_minus_An");
263
 
264
        p       .ADDRESS_FROM_AN_OUTPUT();
265
        p       .ADDRESS_DECR_BY_SIZE()
266
                .BRANCH_procedure().PROCEDURE_return();
267
 
268
        // (d16, An):
269
        p.label("MICROPC_LOAD_EA_d16_An");
270
 
271
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
272
 
273
        p       .INDEX_0()
274
                .OFFSET_IMM_16()
275
                .PC_INCR_BY_2()
276
                .ADDRESS_FROM_AN_OUTPUT();
277
 
278
        p       .ADDRESS_FROM_BASE_INDEX_OFFSET()
279
                .BRANCH_procedure().PROCEDURE_return();
280
 
281
        // (d8, An, Xn):
282
        p.label("MICROPC_LOAD_EA_d8_An_Xn");
283
 
284
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid()
285
                .ADDRESS_FROM_AN_OUTPUT();
286
 
287
        p       .AN_ADDRESS_FROM_EXTENDED()
288
                .DN_ADDRESS_FROM_EXTENDED()
289
                .OFFSET_IMM_8();
290
 
291
        p       .AN_ADDRESS_FROM_EXTENDED()
292
                .INDEX_LOAD_EXTENDED()
293
                .PC_INCR_BY_2();
294
 
295
        p       .ADDRESS_FROM_BASE_INDEX_OFFSET()
296
                .BRANCH_procedure().PROCEDURE_return();
297
 
298
        // (xxx).W:
299
        p.label("MICROPC_LOAD_EA_xxx_W");
300
 
301
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
302
 
303
        p       .ADDRESS_FROM_IMM_16()
304
                .PC_INCR_BY_2()
305
                .BRANCH_procedure().PROCEDURE_return();
306
 
307
        // (xxx).L:
308
        p.label("MICROPC_LOAD_EA_xxx_L");
309
 
310
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
311
 
312
        p       .ADDRESS_FROM_IMM_32()
313
                .PC_INCR_BY_4()
314
                .BRANCH_procedure().PROCEDURE_return();
315
 
316
        // (d16, PC):
317
        p.label("MICROPC_LOAD_EA_d16_PC");
318
 
319
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
320
 
321
        p       .INDEX_0()
322
                .OFFSET_IMM_16();
323
 
324
        p       .ADDRESS_FROM_PC_INDEX_OFFSET()
325
                .PC_INCR_BY_2()
326
                .BRANCH_procedure().PROCEDURE_return();
327
 
328
        // (d8, PC, Xn):
329
        p.label("MICROPC_LOAD_EA_d8_PC_Xn");
330
 
331
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
332
 
333
        p       .AN_ADDRESS_FROM_EXTENDED()
334
                .DN_ADDRESS_FROM_EXTENDED()
335
                .OFFSET_IMM_8();
336
 
337
        p       .AN_ADDRESS_FROM_EXTENDED()
338
                .INDEX_LOAD_EXTENDED();
339
 
340
        p       .ADDRESS_FROM_PC_INDEX_OFFSET()
341
                .PC_INCR_BY_2()
342
                .BRANCH_procedure().PROCEDURE_return();
343
 
344
        p.label("MICROPC_LOAD_EA_illegal_command");
345
 
346
                // call trap
347
        p       .TRAP_ILLEGAL_INSTR()
348
                .BRANCH_procedure().PROCEDURE_call_trap();
349
                // after trap jump to main loop
350
        p       .BRANCH_procedure().PROCEDURE_jump_to_main_loop();
351
 
352
 
353
        // perform_ea_read: memory, Dn,An,immediate
354
 
355
        // Dn:
356
        p.label("MICROPC_PERFORM_EA_READ_Dn");
357
 
358
        p       .OP1_FROM_DN()
359
                .BRANCH_procedure().PROCEDURE_return();
360
 
361
        // An:
362
        p.label("MICROPC_PERFORM_EA_READ_An");
363
 
364
        p       .OP1_FROM_AN()
365
                .BRANCH_procedure().PROCEDURE_return();
366
 
367
        // immediate
368
        p.label("MICROPC_PERFORM_EA_READ_imm");
369
 
370
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
371
 
372
        p       .OP1_FROM_IMMEDIATE()
373
                .PC_INCR_BY_SIZE()
374
                .BRANCH_procedure().PROCEDURE_return();
375
 
376
        // memory
377
        p.label("MICROPC_PERFORM_EA_READ_memory");
378
 
379
        p       .DO_READ_FLAG_SET()
380
                .BRANCH_procedure().PROCEDURE_wait_finished();
381
 
382
        p       .DO_READ_FLAG_CLEAR()
383
                .OP1_FROM_DATA()
384
                .BRANCH_procedure().PROCEDURE_return();
385
 
386
        // perform ea write: memory, Dn,An
387
        // size of operand matters: select in memory write
388
 
389
        // Dn:
390
        p.label("MICROPC_PERFORM_EA_WRITE_Dn");
391
 
392
        p       .DN_WRITE_ENABLE_SET()
393
                .BRANCH_procedure().PROCEDURE_return();
394
 
395
 
396
        // An:
397
        p.label("MICROPC_PERFORM_EA_WRITE_An");
398
 
399
        p       .AN_WRITE_ENABLE_SET()
400
                .BRANCH_procedure().PROCEDURE_return();
401
 
402
        // memory:
403
        p.label("MICROPC_PERFORM_EA_WRITE_memory");
404
 
405
        p       .DATA_WRITE_FROM_RESULT()
406
                .DO_WRITE_FLAG_SET()
407
                .BRANCH_procedure().PROCEDURE_wait_finished();
408
 
409
        p       .DO_WRITE_FLAG_CLEAR()
410
                .BRANCH_procedure().PROCEDURE_return();
411
 
412
        // save ea: (An)+,-(An)
413
 
414
        // (An)+:
415
        p.label("MICROPC_SAVE_EA_An_plus");
416
 
417
        p       .ADDRESS_INCR_BY_SIZE();
418
 
419
        p       .AN_INPUT_FROM_ADDRESS()
420
                .AN_WRITE_ENABLE_SET()
421
                .BRANCH_procedure().PROCEDURE_return();
422
 
423
        // -(An)
424
        p.label("MICROPC_SAVE_EA_minus_An");
425
 
426
        p       .AN_INPUT_FROM_ADDRESS()
427
                .AN_WRITE_ENABLE_SET()
428
                .BRANCH_procedure().PROCEDURE_return();
429
 
430
        // **************************************************************** Instructions
431
 
432
        p.label("MICROPC_MOVEP_memory_to_register");
433
 
434
        p       .SIZE_BYTE().EA_REG_IR_2_0().EA_MOD_INDIRECTOFFSET().EA_TYPE_ALL();
435
        p       .BRANCH_procedure().PROCEDURE_call_read();
436
 
437
        p       .ALU_MOVEP_M2R_1()
438
                .ADDRESS_INCR_BY_2()
439
                .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
440
 
441
        p       .ALU_MOVEP_M2R_2()
442
                .ADDRESS_INCR_BY_2()
443
                .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
444
 
445
        p       .ALU_MOVEP_M2R_3()
446
                .ADDRESS_INCR_BY_2()
447
                .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
448
 
449
        p       .ALU_MOVEP_M2R_4()
450
                .SIZE_1().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
451
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
452
 
453
        p       .BRANCH_procedure().PROCEDURE_return();
454
 
455
        p.label("MICROPC_MOVEP_register_to_memory");
456
 
457
        p       .SIZE_1_PLUS().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
458
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
459
 
460
        p       .SIZE_BYTE().EA_REG_IR_2_0().EA_MOD_INDIRECTOFFSET().EA_TYPE_ALL();
461
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
462
 
463
        p       .ALU_MOVEP_R2M_1()
464
                .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
465
 
466
        p       .ADDRESS_INCR_BY_2()
467
                .ALU_MOVEP_R2M_2()
468
                .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
469
 
470
        p       .BRANCH_movep_16().offset("movep_16");
471
 
472
        p               .ADDRESS_INCR_BY_2()
473
                        .ALU_MOVEP_R2M_3()
474
                        .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
475
 
476
        p               .ADDRESS_INCR_BY_2()
477
                        .ALU_MOVEP_R2M_4()
478
                        .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
479
 
480
                // jump here if word operation
481
        p       .label("movep_16");
482
 
483
        p       .BRANCH_procedure().PROCEDURE_return();
484
 
485
        p.label("MICROPC_MOVEM_memory_to_register");
486
 
487
        p       .SIZE_WORD().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
488
                .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
489
 
490
        p       .OP1_FROM_IMMEDIATE()
491
                .PC_INCR_BY_SIZE();
492
 
493
        p       .MOVEM_REG_FROM_OP1()
494
                .MOVEM_MODREG_LOAD_0()
495
                .MOVEM_LOOP_LOAD_0()
496
                .SIZE_2().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_CONTROL_POSTINC();
497
 
498
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
499
 
500
                // push current micro pc on stack
501
        p       .BRANCH_procedure().PROCEDURE_push_micropc();
502
 
503
                // check if loop finished
504
        p       .BRANCH_movem_loop().offset("movem_memory_to_register_loop");
505
 
506
                        // check if operation on register required
507
        p               .BRANCH_movem_reg().offset("movem_memory_to_register_reg");
508
 
509
        p                       .SIZE_2().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_CONTROL_POSTINC();
510
        p                       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
511
 
512
        p                       .ALU_SIGN_EXTEND()
513
                                .ADDRESS_INCR_BY_SIZE()
514
                                .SIZE_LONG().EA_REG_MOVEM_REG_2_0().EA_MOD_MOVEM_MOD_5_3().EA_TYPE_DN_AN();
515
        p                       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
516
 
517
                        // jump here if operation on register not required
518
        p               .label("movem_memory_to_register_reg");
519
 
520
        p               .MOVEM_MODREG_INCR_BY_1()
521
                        .MOVEM_REG_SHIFT_RIGHT()
522
                        .MOVEM_LOOP_INCR_BY_1()
523
                        .BRANCH_procedure().PROCEDURE_return();
524
 
525
                // jump here if loop finished
526
        p       .label("movem_memory_to_register_loop");
527
 
528
        p       .BRANCH_procedure().PROCEDURE_pop_micropc()
529
                .SIZE_2().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_CONTROL_POSTINC();
530
 
531
        p       .BRANCH_procedure().PROCEDURE_call_save_ea()
532
                .ADDRESS_DECR_BY_SIZE();
533
 
534
        p       .BRANCH_procedure().PROCEDURE_return();
535
 
536
        p.label("MICROPC_MOVEM_register_to_memory_predecrement");
537
 
538
        p       .SIZE_WORD().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
539
                .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
540
 
541
        p       .OP1_FROM_IMMEDIATE()
542
                .PC_INCR_BY_SIZE();
543
 
544
        p       .MOVEM_REG_FROM_OP1()
545
                .MOVEM_MODREG_LOAD_6b001111()
546
                .MOVEM_LOOP_LOAD_0()
547
                .SIZE_2().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_CONTROLALTER_PREDEC();
548
 
549
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
550
 
551
                // push current micro pc on stack
552
        p       .BRANCH_procedure().PROCEDURE_push_micropc();
553
 
554
                 // check if loop finished
555
        p       .BRANCH_movem_loop().offset("movem_register_to_memory_predecrement_loop");
556
 
557
                        // check if operation on register required
558
        p               .BRANCH_movem_reg().offset("movem_register_to_memory_predecrement_reg");
559
 
560
        p                       .SIZE_2().EA_REG_MOVEM_REG_2_0().EA_MOD_MOVEM_MOD_5_3().EA_TYPE_DN_AN();
561
        p                       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
562
 
563
        p                       .ALU_SIGN_EXTEND()
564
                                .SIZE_2().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_CONTROLALTER_PREDEC();
565
        p                       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
566
 
567
        p                       .ADDRESS_DECR_BY_SIZE();
568
 
569
                        // jump here if operation on register not required
570
        p               .label("movem_register_to_memory_predecrement_reg");
571
 
572
        p               .MOVEM_MODREG_DECR_BY_1()
573
                        .MOVEM_REG_SHIFT_RIGHT()
574
                        .MOVEM_LOOP_INCR_BY_1()
575
                        .BRANCH_procedure().PROCEDURE_return();
576
 
577
                // jump here if loop finished
578
        p       .label("movem_register_to_memory_predecrement_loop");
579
 
580
        p       .BRANCH_procedure().PROCEDURE_pop_micropc()
581
                .ADDRESS_INCR_BY_SIZE();
582
 
583
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
584
 
585
        p       .BRANCH_procedure().PROCEDURE_return();
586
 
587
        p.label("MICROPC_MOVEM_register_to_memory_control");
588
 
589
        p       .SIZE_WORD().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
590
                .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
591
 
592
        p       .OP1_FROM_IMMEDIATE()
593
                .PC_INCR_BY_SIZE();
594
 
595
        p       .MOVEM_REG_FROM_OP1()
596
                .MOVEM_MODREG_LOAD_0()
597
                .MOVEM_LOOP_LOAD_0()
598
                .SIZE_2().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_CONTROLALTER_PREDEC();
599
 
600
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
601
 
602
                // push current micro pc on stack
603
        p       .BRANCH_procedure().PROCEDURE_push_micropc();
604
 
605
                 // check if loop finished
606
        p       .BRANCH_movem_loop().offset("movem_register_to_memory_control_loop");
607
 
608
                        // check if operation on register required
609
        p               .BRANCH_movem_reg().offset("movem_register_to_memory_control_reg");
610
 
611
        p                       .SIZE_2().EA_REG_MOVEM_REG_2_0().EA_MOD_MOVEM_MOD_5_3().EA_TYPE_DN_AN();
612
        p                       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
613
 
614
        p                       .ALU_SIGN_EXTEND()
615
                                .SIZE_2().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_CONTROLALTER_PREDEC();
616
        p                       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
617
 
618
        p                       .ADDRESS_INCR_BY_SIZE();
619
 
620
                        // jump here if operation on register not required
621
        p               .label("movem_register_to_memory_control_reg");
622
 
623
        p               .MOVEM_MODREG_INCR_BY_1()
624
                        .MOVEM_REG_SHIFT_RIGHT()
625
                        .MOVEM_LOOP_INCR_BY_1()
626
                        .BRANCH_procedure().PROCEDURE_return();
627
 
628
                // jump here if loop finished
629
        p       .label("movem_register_to_memory_control_loop");
630
 
631
        p       .BRANCH_procedure().PROCEDURE_pop_micropc();
632
 
633
        p       .BRANCH_procedure().PROCEDURE_return();
634
 
635
        p.label("MICROPC_LEA");
636
 
637
        p       .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_CONTROL();
638
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
639
 
640
        p       .OP1_FROM_ADDRESS();
641
 
642
        p       .ALU_SIMPLE_MOVE()
643
                .SIZE_LONG().EA_REG_IR_11_9().EA_MOD_AN().EA_TYPE_ALL();
644
 
645
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
646
 
647
        p       .BRANCH_procedure().PROCEDURE_return();
648
 
649
        p.label("MICROPC_PEA");
650
 
651
        p       .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_CONTROL();
652
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
653
 
654
        p       .OP1_FROM_ADDRESS();
655
 
656
        p       .ALU_SIMPLE_MOVE()
657
                .SIZE_LONG().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
658
 
659
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
660
 
661
        p       .BRANCH_procedure().PROCEDURE_call_write();
662
 
663
        p.label("MICROPC_ANDI_EORI_ORI_ADDI_SUBI");
664
//+++
665
        p       .SIZE_3().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
666
                .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
667
 
668
        p       .OP1_FROM_IMMEDIATE()
669
                .PC_INCR_BY_SIZE()
670
 
671
                .SIZE_3().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATAALTER();
672
 
673
        p       .OP2_FROM_OP1()
674
                .BRANCH_procedure().PROCEDURE_call_read();
675
 
676
        p       .ALU_ARITHMETIC_LOGIC()
677
                .BRANCH_procedure().PROCEDURE_call_write();
678
 
679
        p.label("MICROPC_ORI_to_CCR_ORI_to_SR_ANDI_to_CCR_ANDI_to_SR_EORI_to_CCR_EORI_to_SR");
680
//+
681
        p       .SIZE_3().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
682
                .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
683
 
684
        p       .OP1_FROM_IMMEDIATE()
685
                .PC_INCR_BY_SIZE();
686
 
687
        p       .OP2_FROM_OP1()
688
                .OP1_FROM_SR();
689
 
690
        p       .ALU_ARITHMETIC_LOGIC();
691
 
692
        p       .OP1_FROM_RESULT();
693
 
694
        p       .ALU_MOVE_TO_CCR_SR_RTE_RTR_STOP_LOGIC_TO_CCR_SR()
695
                .BRANCH_procedure().PROCEDURE_return();
696
 
697
        p.label("MICROPC_CMPI");
698
//+
699
        p       .SIZE_3().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
700
                .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
701
 
702
        p       .OP1_FROM_IMMEDIATE()
703
                .PC_INCR_BY_SIZE()
704
 
705
                .SIZE_3().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATAALTER();
706
 
707
        p       .OP2_FROM_OP1()
708
                .BRANCH_procedure().PROCEDURE_call_read();
709
 
710
        p       .ALU_ARITHMETIC_LOGIC()
711
                .BRANCH_procedure().PROCEDURE_call_save_ea();
712
 
713
        p       .BRANCH_procedure().PROCEDURE_return();
714
 
715
        p.label("MICROPC_ABCD_SBCD_ADDX_SUBX");
716
 
717
        p       .SIZE_3().EA_REG_IR_2_0().EA_MOD_DN_PREDEC().EA_TYPE_ALL();
718
 
719
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
720
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
721
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
722
 
723
        p       .OP2_FROM_OP1()
724
                .SIZE_3().EA_REG_IR_11_9().EA_MOD_DN_PREDEC().EA_TYPE_ALL();
725
 
726
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
727
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
728
 
729 17 alfik
        p       .ALU_ABCD_SBCD_ADDX_SUBX_prepare();
730 12 alfik
        p       .ALU_ABCD_SBCD_ADDX_SUBX()
731
                .BRANCH_procedure().PROCEDURE_call_write();
732
 
733
        p.label("MICROPC_EXG");
734
 
735
        p       .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DN_AN();
736
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
737
 
738
        p       .ALU_SIMPLE_MOVE()
739
                .SIZE_LONG().EA_REG_IR_11_9().EA_MOD_DN_AN_EXG().EA_TYPE_ALL();
740
 
741
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
742
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
743
 
744
        p       .ALU_SIMPLE_MOVE()
745
                .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DN_AN();
746
 
747
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
748
 
749
        p       .BRANCH_procedure().PROCEDURE_return();
750
 
751
 
752
        p.label("MICROPC_CMPM");
753
 
754
        p       .SIZE_3().EA_REG_IR_2_0().EA_MOD_POSTINC().EA_TYPE_ALL();
755
 
756
        p       .BRANCH_procedure().PROCEDURE_call_read();
757
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
758
 
759
        p       .OP2_FROM_OP1()
760
                .SIZE_3().EA_REG_IR_11_9().EA_MOD_POSTINC().EA_TYPE_ALL();
761
 
762
        p       .BRANCH_procedure().PROCEDURE_call_read();
763
 
764
        p       .ALU_ARITHMETIC_LOGIC()
765
                .BRANCH_procedure().PROCEDURE_call_save_ea();
766
 
767
        p       .BRANCH_procedure().PROCEDURE_return();
768
 
769
        p.label("MICROPC_ASL_LSL_ROL_ROXL_ASR_LSR_ROR_ROXR_all_immediate_register");
770
 
771
        p       .SIZE_3().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
772
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
773
 
774
        p       .OP2_FROM_OP1()
775
                .SIZE_3().EA_REG_IR_2_0().EA_MOD_DN().EA_TYPE_ALL();
776
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
777
 
778
        p       .OP2_LOAD_COUNT();
779
 
780
        p       .ALU_ASL_LSL_ROL_ROXL_ASR_LSR_ROR_ROXR_prepare();
781
 
782
        p       .BRANCH_procedure().PROCEDURE_push_micropc();
783
 
784
        p       .BRANCH_operand2().offset("shift_rotate_immediate_loop");
785
 
786
        p               .ALU_ASL_LSL_ROL_ROXL_ASR_LSR_ROR_ROXR();
787
        p               .OP1_FROM_RESULT()
788
                        .OP2_DECR_BY_1()
789
                        .BRANCH_procedure().PROCEDURE_return();
790
 
791
                // jump here if loop finished
792
        p       .label("shift_rotate_immediate_loop");
793
 
794
        p       .BRANCH_procedure().PROCEDURE_pop_micropc();
795
 
796
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
797
 
798
        p       .BRANCH_procedure().PROCEDURE_return();
799
 
800
        p.label("MICROPC_ASL_LSL_ROL_ROXL_ASR_LSR_ROR_ROXR_all_memory");
801
 
802
        p       .SIZE_WORD().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_MEMORYALTER();
803
 
804
        p       .BRANCH_procedure().PROCEDURE_call_read();
805
 
806
        p       .OP2_LOAD_1();
807
 
808
        p       .ALU_ASL_LSL_ROL_ROXL_ASR_LSR_ROR_ROXR_prepare();
809
        p       .ALU_ASL_LSL_ROL_ROXL_ASR_LSR_ROR_ROXR();
810
 
811
        p       .BRANCH_procedure().PROCEDURE_call_write();
812
 
813
        p.label("MICROPC_MOVE");
814
 
815
        p       .SIZE_4().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_ALL();
816
 
817
        p       .BRANCH_procedure().PROCEDURE_call_read();
818
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
819
 
820
        p       .ALU_SIMPLE_MOVE()
821
                .SIZE_4().EA_REG_IR_11_9().EA_MOD_IR_8_6().EA_TYPE_DATAALTER();
822
 
823
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
824
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
825
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
826
        p       .ALU_MOVE()
827
                .BRANCH_procedure().PROCEDURE_return();
828
 
829
        p.label("MICROPC_MOVEA");
830
 
831
        p       .SIZE_4().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_ALL();
832
 
833
        p       .BRANCH_procedure().PROCEDURE_call_read();
834
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
835
 
836
        p       .ALU_SIGN_EXTEND()
837
                .SIZE_4().EA_REG_IR_11_9().EA_MOD_AN().EA_TYPE_ALL();
838
 
839
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
840
 
841
        p       .BRANCH_procedure().PROCEDURE_return();
842
 
843
        p.label("MICROPC_EOR");
844
 
845
        p       .SIZE_3().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
846
 
847
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
848
 
849
        p       .OP2_FROM_OP1()
850
                .SIZE_3().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATAALTER();
851
 
852
        p       .BRANCH_procedure().PROCEDURE_call_read();
853
 
854
        p       .ALU_ARITHMETIC_LOGIC()
855
                .BRANCH_procedure().PROCEDURE_call_write();
856
 
857
        p.label("MICROPC_ADD_to_mem_SUB_to_mem_AND_to_mem_OR_to_mem");
858
 
859
        p       .SIZE_3().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
860
 
861
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
862
 
863
        p       .OP2_FROM_OP1()
864
                .SIZE_3().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_MEMORYALTER();
865
 
866
        p       .BRANCH_procedure().PROCEDURE_call_read();
867
 
868
        p       .ALU_ARITHMETIC_LOGIC()
869
                .BRANCH_procedure().PROCEDURE_call_write();
870
 
871
        p.label("MICROPC_ADD_to_Dn_SUB_to_Dn_AND_to_Dn_OR_to_Dn");
872
 
873
        p       .SIZE_3().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_ALL();
874
 
875
        p       .BRANCH_procedure().PROCEDURE_call_read();
876
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
877
 
878
        p       .OP2_FROM_OP1()
879
                .SIZE_3().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
880
 
881
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
882
 
883
        p       .ALU_ARITHMETIC_LOGIC()
884
                .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
885
 
886
        p       .BRANCH_procedure().PROCEDURE_return();
887
 
888
        p.label("MICROPC_CMP");
889
 
890
        p       .SIZE_3().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_ALL();
891
 
892
        p       .BRANCH_procedure().PROCEDURE_call_read();
893
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
894
 
895
        p       .OP2_FROM_OP1()
896
                .SIZE_3().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
897
 
898
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
899
 
900
        p       .ALU_ARITHMETIC_LOGIC()
901
                .BRANCH_procedure().PROCEDURE_return();
902
 
903
        p.label("MICROPC_ADDA_SUBA");
904
 
905
        p       .SIZE_5().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_ALL();
906
 
907
        p       .BRANCH_procedure().PROCEDURE_call_read();
908
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
909
 
910
        p       .OP2_FROM_OP1()
911
                .SIZE_LONG().EA_REG_IR_11_9().EA_MOD_AN().EA_TYPE_ALL();
912
 
913
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
914
 
915
        p       .ALU_ADDA_SUBA_CMPA_ADDQ_SUBQ()
916
                .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
917
 
918
        p       .BRANCH_procedure().PROCEDURE_return();
919
 
920
        p.label("MICROPC_CMPA");
921
 
922
        p       .SIZE_5().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_ALL();
923
 
924
        p       .BRANCH_procedure().PROCEDURE_call_read();
925
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
926
 
927
        p       .OP2_FROM_OP1()
928
                .SIZE_LONG().EA_REG_IR_11_9().EA_MOD_AN().EA_TYPE_ALL();
929
 
930
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
931
 
932
        p       .ALU_ADDA_SUBA_CMPA_ADDQ_SUBQ()
933
                .BRANCH_procedure().PROCEDURE_return();
934
 
935
        p.label("MICROPC_CHK");
936
 
937
        p       .SIZE_WORD().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATA();
938
 
939
        p       .BRANCH_procedure().PROCEDURE_call_read();
940
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
941
 
942
        p       .OP2_FROM_OP1()
943
                .SIZE_WORD().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
944
 
945
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
946
 
947
        p       .ALU_CHK();
948
 
949 13 alfik
        p       .BRANCH_alu_signal().offset("chk_no_trap");
950 12 alfik
        p               .TRAP_CHK()
951
                        .BRANCH_procedure().PROCEDURE_call_trap();
952
                        // after return continue
953
 
954
                // jump here if no trap
955
        p       .label("chk_no_trap");
956
 
957
        p       .BRANCH_procedure().PROCEDURE_return();
958
 
959
        p.label("MICROPC_MULS_MULU_DIVS_DIVU");
960
 
961
        p       .SIZE_WORD().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATA();
962
 
963
        p       .BRANCH_procedure().PROCEDURE_call_read();
964
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
965
 
966
        p       .OP2_FROM_OP1()
967
                .SIZE_LONG().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
968
 
969
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
970
 
971 13 alfik
        p       .ALU_MULS_MULU_DIVS_DIVU();
972 12 alfik
 
973 13 alfik
        p       .BRANCH_alu_signal().offset("div_no_div_by_zero_trap");
974 12 alfik
        p               .TRAP_DIV_BY_ZERO()
975
                        .BRANCH_procedure().PROCEDURE_call_trap();
976
                        // return after return
977
        p               .BRANCH_procedure().PROCEDURE_return();
978
 
979
                // jump here if no trap
980
        p       .label("div_no_div_by_zero_trap");
981
 
982
                // push current micro pc on stack
983
        p       .BRANCH_procedure().PROCEDURE_push_micropc();
984
 
985 13 alfik
                 // check if operation finished
986
        p       .BRANCH_alu_mult_div_ready().offset("mult_div_loop");
987
        p               .BRANCH_procedure().PROCEDURE_return();
988 12 alfik
 
989
                // jump here after first loop finished
990 13 alfik
        p       .label("mult_div_loop");
991 12 alfik
 
992
        p       .ALU_MULS_MULU_DIVS_DIVU()
993
                .BRANCH_procedure().PROCEDURE_pop_micropc();
994
 
995 13 alfik
        p       .BRANCH_alu_signal().offset("mult_div_no_overflow");
996
        p           .BRANCH_procedure().PROCEDURE_return();
997 12 alfik
 
998
                // jump here if overflow
999 13 alfik
        p       .label("mult_div_no_overflow");
1000
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1001 12 alfik
        p       .BRANCH_procedure().PROCEDURE_return();
1002
 
1003
        p.label("MICROPC_MOVEQ");
1004
 
1005
        p       .OP1_MOVEQ()
1006
                .SIZE_LONG().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
1007
 
1008
        p       .ALU_MOVE()
1009
                .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1010
 
1011
        p       .BRANCH_procedure().PROCEDURE_return();
1012
 
1013
        p.label("MICROPC_BCHG_BCLR_BSET_immediate");
1014
 
1015
        p       .SIZE_BYTE().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
1016
                .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
1017
 
1018
        p       .OP1_FROM_IMMEDIATE()
1019
                .PC_INCR_BY_SIZE();
1020
 
1021
        p       .OP2_FROM_OP1()
1022
                .SIZE_6().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATAALTER();
1023
 
1024
        p       .BRANCH_procedure().PROCEDURE_call_read();
1025
 
1026
        p       .ALU_BCHG_BCLR_BSET_BTST()
1027
                .BRANCH_procedure().PROCEDURE_call_write();
1028
 
1029
        p.label("MICROPC_BTST_immediate");
1030
 
1031
        p       .SIZE_BYTE().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
1032
                .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
1033
 
1034
        p       .OP1_FROM_IMMEDIATE()
1035
                .PC_INCR_BY_SIZE();
1036
 
1037
        p       .OP2_FROM_OP1()
1038
                .SIZE_6().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATA();
1039
 
1040
        p       .BRANCH_procedure().PROCEDURE_call_read();
1041
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
1042
 
1043
        p       .ALU_BCHG_BCLR_BSET_BTST()
1044
                .BRANCH_procedure().PROCEDURE_return();
1045
 
1046
        p.label("MICROPC_BCHG_BCLR_BSET_register");
1047
 
1048
        p       .SIZE_6().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
1049
 
1050
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
1051
 
1052
        p       .OP2_FROM_OP1()
1053
                .SIZE_6().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATAALTER();
1054
 
1055
        p       .BRANCH_procedure().PROCEDURE_call_read();
1056
 
1057
        p       .ALU_BCHG_BCLR_BSET_BTST()
1058
                .BRANCH_procedure().PROCEDURE_call_write();
1059
 
1060
        p.label("MICROPC_BTST_register");
1061
 
1062
        p       .SIZE_6().EA_REG_IR_11_9().EA_MOD_DN().EA_TYPE_ALL();
1063
 
1064
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
1065
 
1066
        p       .OP2_FROM_OP1()
1067
                .SIZE_6().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATA();
1068
 
1069
        p       .BRANCH_procedure().PROCEDURE_call_read();
1070
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
1071
 
1072
        p       .ALU_BCHG_BCLR_BSET_BTST()
1073
                .BRANCH_procedure().PROCEDURE_return();
1074
 
1075
        p.label("MICROPC_TAS");
1076
 
1077
        p       .READ_MODIFY_WRITE_FLAG_SET()
1078
                .SIZE_BYTE().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATAALTER();
1079
 
1080
        p       .BRANCH_procedure().PROCEDURE_call_read();
1081
 
1082
        p       .ALU_TAS()
1083
                .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1084
 
1085
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
1086
 
1087
        p       .READ_MODIFY_WRITE_FLAG_CLEAR()
1088
                .BRANCH_procedure().PROCEDURE_return();
1089
 
1090
        p.label("MICROPC_NEGX_CLR_NEG_NOT_NBCD");
1091
 
1092
        p       .SIZE_3().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATAALTER();
1093
 
1094
        p       .BRANCH_procedure().PROCEDURE_call_read();
1095
 
1096
        p       .ALU_NEGX_CLR_NEG_NOT_NBCD_SWAP_EXT()
1097
                .BRANCH_procedure().PROCEDURE_call_write();
1098
 
1099
        p.label("MICROPC_SWAP_EXT");
1100
 
1101
        p       .SIZE_2().EA_REG_IR_2_0().EA_MOD_DN().EA_TYPE_ALL();
1102
 
1103
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
1104
 
1105
        p       .ALU_NEGX_CLR_NEG_NOT_NBCD_SWAP_EXT()
1106
                .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1107
 
1108
        p       .BRANCH_procedure().PROCEDURE_return();
1109
 
1110
        p.label("MICROPC_TST");
1111
 
1112
        p       .SIZE_3().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATAALTER();
1113
 
1114
        p       .BRANCH_procedure().PROCEDURE_call_read();
1115
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
1116
 
1117
        p       .ALU_MOVE()
1118
                .BRANCH_procedure().PROCEDURE_return();
1119
 
1120
        p.label("MICROPC_ADDQ_SUBQ_not_An");
1121
 
1122
        p       .OP2_ADDQ_SUBQ()
1123
                .SIZE_3().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATAALTER();
1124
 
1125
        p       .BRANCH_procedure().PROCEDURE_call_read();
1126
 
1127
        p       .ALU_ARITHMETIC_LOGIC()
1128
                .BRANCH_procedure().PROCEDURE_call_write();
1129
 
1130
        p.label("MICROPC_ADDQ_SUBQ_An");
1131
 
1132
        p       .OP2_ADDQ_SUBQ()
1133
                .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_AN().EA_TYPE_ALL();
1134
 
1135
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
1136
 
1137
        p       .ALU_ADDA_SUBA_CMPA_ADDQ_SUBQ()
1138
                .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1139
 
1140
        p       .BRANCH_procedure().PROCEDURE_return();
1141
 
1142
        p.label("MICROPC_Scc");
1143
 
1144
        p       .BRANCH_condition_0().offset("scc_condition_0");
1145
        p               .OP1_LOAD_ONES();
1146
 
1147
                // jump here if condition is false
1148
        p       .label("scc_condition_0");
1149
 
1150
        p       .BRANCH_condition_1().offset("scc_condition_1");
1151
        p               .OP1_LOAD_ZEROS();
1152
 
1153
                // jump here if condition is true
1154
        p       .label("scc_condition_1");
1155
 
1156
        p       .ALU_SIMPLE_MOVE()
1157
                .SIZE_BYTE().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATAALTER();
1158
 
1159
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
1160
        p       .BRANCH_procedure().PROCEDURE_call_write();
1161
 
1162
        p.label("MICROPC_Bcc_BRA");
1163
 
1164
        p       .OP1_FROM_PC();
1165
 
1166
        p       .ALU_SIMPLE_MOVE()
1167
                .BRANCH_ir().offset("bcc_bra_no_word");
1168
 
1169
        p               .SIZE_WORD().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
1170
                        .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
1171
 
1172
        p               .OP1_FROM_IMMEDIATE()
1173
                        .PC_INCR_BY_SIZE();
1174
 
1175
                // jump here if no need to load extra immediate word
1176
        p       .label("bcc_bra_no_word");
1177
 
1178
        p       .BRANCH_condition_0().offset("bcc_bra_no_branch");
1179
 
1180
        p               .OP2_FROM_OP1();
1181
        p               .OP2_MOVE_OFFSET()
1182
                        .OP1_FROM_RESULT();
1183
 
1184
        p               .ALU_SIMPLE_LONG_ADD();
1185
 
1186
                        // wait for instruction prefetch
1187
        p               .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
1188
 
1189
        p               .PC_FROM_RESULT();
1190
 
1191
                        // wait for PC check
1192
        p               .ALU_SIMPLE_MOVE();
1193
 
1194
                // jump here if no branch
1195
        p       .label("bcc_bra_no_branch");
1196
 
1197
        p       .BRANCH_procedure().PROCEDURE_return();
1198
 
1199
        p.label("MICROPC_DBcc");
1200
 
1201
        p       .BRANCH_condition_1().offset("dbcc_condition_true");
1202
 
1203
        p               .OP2_LOAD_1()
1204
                        .SIZE_WORD().EA_REG_IR_2_0().EA_MOD_DN().EA_TYPE_ALL();
1205
 
1206
        p               .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
1207
 
1208
        p               .ALU_SIMPLE_LONG_SUB();
1209
 
1210
        p               .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1211
 
1212
        p               .OP1_FROM_PC()
1213
                        .SIZE_WORD().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
1214
                        .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
1215
 
1216
        p               .BRANCH_result().offset("dbcc_condition_true");
1217
 
1218
        p                       .OP1_FROM_IMMEDIATE()
1219
                                .ALU_SIMPLE_MOVE();
1220
 
1221
        p                       .OP2_FROM_OP1()
1222
                                .OP1_FROM_RESULT();
1223
 
1224
        p                       .ALU_SIMPLE_LONG_ADD()
1225
                                // wait for instruction prefetch
1226
                                .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
1227
 
1228
        p                       .PC_FROM_RESULT();
1229
 
1230
                                // wait for PC check
1231
        p                       .ALU_SIMPLE_MOVE();
1232
 
1233
        p                       .BRANCH_procedure().PROCEDURE_return();
1234
 
1235
                // jump here if condition is true
1236
        p       .label("dbcc_condition_true");
1237
 
1238
        p       .PC_INCR_BY_2()
1239
                .BRANCH_procedure().PROCEDURE_return();
1240
 
1241
        p.label("MICROPC_MOVE_FROM_SR");
1242
 
1243
        p       .OP1_FROM_SR()
1244
                .SIZE_WORD().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATAALTER();
1245
 
1246
        p       .ALU_SIMPLE_MOVE()
1247
                .BRANCH_procedure().PROCEDURE_call_load_ea();
1248
 
1249
        p       .BRANCH_procedure().PROCEDURE_call_write();
1250
 
1251
        p.label("MICROPC_MOVE_TO_CCR_MOVE_TO_SR");
1252
 
1253
        p       .SIZE_WORD().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_DATA();
1254
 
1255
        p       .BRANCH_procedure().PROCEDURE_call_read();
1256
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
1257
 
1258
        p       .ALU_MOVE_TO_CCR_SR_RTE_RTR_STOP_LOGIC_TO_CCR_SR()
1259
                .BRANCH_procedure().PROCEDURE_return();
1260
 
1261
        p.label("MICROPC_MOVE_USP_to_USP");
1262
 
1263
        p       .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_AN().EA_TYPE_ALL();
1264
 
1265
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
1266
 
1267
        p       .ALU_SIMPLE_MOVE();
1268
 
1269
        p       .AN_ADDRESS_USP()
1270
                .AN_WRITE_ENABLE_SET();
1271
 
1272
        p       .BRANCH_procedure().PROCEDURE_return();
1273
 
1274
 
1275
        p.label("MICROPC_MOVE_USP_to_An");
1276
 
1277
        p       .OP1_FROM_USP()
1278
                .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_AN().EA_TYPE_ALL();
1279
 
1280
        p       .ALU_SIMPLE_MOVE()
1281
                .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1282
 
1283
        p       .BRANCH_procedure().PROCEDURE_return();
1284
 
1285
        p.label("MICROPC_LINK");
1286
 
1287
                // load An to OP1
1288
        p       .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_AN().EA_TYPE_ALL();
1289
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
1290
 
1291
                // move OP1 to result
1292
        p       .ALU_LINK_MOVE()
1293
                .SIZE_LONG().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
1294
 
1295
                // write result to (SP)
1296
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
1297
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1298
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
1299
 
1300
                // load SP to OP1
1301
        p       .SIZE_LONG().EA_REG_3b111().EA_MOD_AN().EA_TYPE_ALL();
1302
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
1303
 
1304
                // move OP1 to result
1305
        p       .ALU_SIMPLE_MOVE()
1306
                .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_AN().EA_TYPE_ALL();
1307
 
1308
                // save result to An
1309
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1310
 
1311
                // load offset word to OP1
1312
        p       .SIZE_WORD().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
1313
                .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
1314
 
1315
        p       .OP1_FROM_IMMEDIATE()
1316
                .PC_INCR_BY_SIZE();
1317
 
1318
                // move OP1 to OP2
1319
        p       .OP2_FROM_OP1()
1320
                .SIZE_LONG().EA_REG_3b111().EA_MOD_AN().EA_TYPE_ALL();
1321
 
1322
                // load SP to OP1
1323
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
1324
 
1325
                // add offset and SP to SP
1326
        p       .ALU_SIMPLE_LONG_ADD()
1327
                .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1328
 
1329
        p       .BRANCH_procedure().PROCEDURE_return();
1330
 
1331
        p.label("MICROPC_ULNK");
1332
                // load An to OP1
1333
        p       .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_AN().EA_TYPE_ALL();
1334
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
1335
 
1336
                // move OP1 to result
1337
        p       .ALU_SIMPLE_MOVE()
1338
                .SIZE_LONG().EA_REG_3b111().EA_MOD_AN().EA_TYPE_ALL();
1339
 
1340
                // save result to SP
1341
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1342
 
1343
                // load (SP) to OP1
1344
        p       .SIZE_LONG().EA_REG_3b111().EA_MOD_POSTINC().EA_TYPE_ALL();
1345
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
1346
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_read();
1347
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
1348
 
1349
                // move OP1 to result
1350
        p       .ALU_SIMPLE_MOVE()
1351
                .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_AN().EA_TYPE_ALL();
1352
 
1353
                // save result to An
1354
        p       .BRANCH_procedure().PROCEDURE_call_perform_ea_write();
1355
 
1356
        p       .BRANCH_procedure().PROCEDURE_return();
1357
 
1358
        p.label("MICROPC_BSR");
1359
 
1360
        p       .OP1_FROM_PC();
1361
 
1362
        p       .ALU_SIMPLE_MOVE()
1363
                .BRANCH_ir().offset("bsr_no_word");
1364
        p               .SIZE_WORD().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
1365
                        .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
1366
 
1367
        p               .OP1_FROM_IMMEDIATE()
1368
                        .PC_INCR_BY_SIZE();
1369
 
1370
                // jump here if no need to load extra immediate word
1371
        p       .label("bsr_no_word");
1372
 
1373
        p       .OP2_FROM_OP1();
1374
        p       .OP2_MOVE_OFFSET()
1375
                .OP1_FROM_RESULT();
1376
 
1377
        p       .ALU_SIMPLE_LONG_ADD();
1378
 
1379
                // wait for instruction prefetch
1380
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
1381
 
1382
        p       .OP1_FROM_PC()
1383
                .PC_FROM_RESULT();
1384
 
1385
        p       .SIZE_LONG().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
1386
 
1387
        p       .ALU_SIMPLE_MOVE()
1388
                .BRANCH_procedure().PROCEDURE_call_load_ea();
1389
 
1390
        p       .BRANCH_procedure().PROCEDURE_call_write();
1391
 
1392
        p.label("MICROPC_JMP");
1393
 
1394
        p       .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_CONTROL();
1395
 
1396
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
1397
 
1398
        p       .OP1_FROM_ADDRESS();
1399
        p       .ALU_SIMPLE_MOVE();
1400
 
1401
                // wait for instruction prefetch
1402
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
1403
 
1404
        p       .PC_FROM_RESULT();
1405
 
1406
                // wait for PC check
1407
        p       .ALU_SIMPLE_MOVE();
1408
 
1409
        p       .BRANCH_procedure().PROCEDURE_return();
1410
 
1411
        p.label("MICROPC_JSR");
1412
 
1413
        p       .SIZE_LONG().EA_REG_IR_2_0().EA_MOD_IR_5_3().EA_TYPE_CONTROL();
1414
 
1415
        p       .BRANCH_procedure().PROCEDURE_call_load_ea();
1416
 
1417
        p       .OP1_FROM_ADDRESS();
1418
        p       .ALU_SIMPLE_MOVE();
1419
 
1420
                // wait for instruction prefetch
1421
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
1422
 
1423
        p       .OP1_FROM_PC()
1424
                .PC_FROM_RESULT();
1425
 
1426
        p       .SIZE_LONG().EA_REG_3b111().EA_MOD_PREDEC().EA_TYPE_ALL();
1427
 
1428
        p       .ALU_SIMPLE_MOVE()
1429
                .BRANCH_procedure().PROCEDURE_call_load_ea();
1430
 
1431
        p       .BRANCH_procedure().PROCEDURE_call_write();
1432
 
1433
        p.label("MICROPC_RTE_RTR");
1434
 
1435
        p       .SIZE_WORD().EA_REG_3b111().EA_MOD_POSTINC().EA_TYPE_ALL();
1436
 
1437
        p       .BRANCH_procedure().PROCEDURE_call_read();
1438
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
1439
 
1440
        p       .ALU_SIMPLE_MOVE()
1441
                .SIZE_LONG().EA_REG_3b111().EA_MOD_POSTINC().EA_TYPE_ALL();
1442
 
1443
        p       .BRANCH_procedure().PROCEDURE_call_read();
1444
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
1445
 
1446
        p       .ALU_SIMPLE_MOVE()
1447
                .OP1_FROM_RESULT();
1448
        p       .ALU_MOVE_TO_CCR_SR_RTE_RTR_STOP_LOGIC_TO_CCR_SR();
1449
 
1450
                // wait for instruction prefetch
1451
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
1452
 
1453
        p       .PC_FROM_RESULT();
1454
 
1455
                // wait for PC check
1456
        p       .ALU_SIMPLE_MOVE();
1457
 
1458
        p       .BRANCH_procedure().PROCEDURE_return();
1459
 
1460
        p.label("MICROPC_RTS");
1461
 
1462
        p       .SIZE_LONG().EA_REG_3b111().EA_MOD_POSTINC().EA_TYPE_ALL();
1463
 
1464
        p       .BRANCH_procedure().PROCEDURE_call_read();
1465
        p       .BRANCH_procedure().PROCEDURE_call_save_ea();
1466
 
1467
        p       .ALU_SIMPLE_MOVE();
1468
 
1469
                // wait for instruction prefetch
1470
        p       .BRANCH_procedure().PROCEDURE_wait_prefetch_valid();
1471
 
1472
        p       .PC_FROM_RESULT();
1473
 
1474
                // wait for PC check
1475
        p       .ALU_SIMPLE_MOVE();
1476
 
1477
        p       .BRANCH_procedure().PROCEDURE_return();
1478
 
1479
        p.label("MICROPC_NOP");
1480
 
1481
        p       .BRANCH_procedure().PROCEDURE_return();
1482
 
1483
        p.label("MICROPC_TRAP");
1484
 
1485
        p       .TRAP_TRAP()
1486
                .BRANCH_procedure().PROCEDURE_call_trap();
1487
 
1488
        p       .BRANCH_procedure().PROCEDURE_return();
1489
 
1490
        p.label("MICROPC_TRAPV");
1491
 
1492
        p       .BRANCH_V().offset("trapv_no_trap");
1493
 
1494
        p               .TRAP_TRAPV()
1495
                        .BRANCH_procedure().PROCEDURE_call_trap();
1496
 
1497
                // jump here if overflow == 0
1498
        p       .label("trapv_no_trap");
1499
 
1500
        p       .BRANCH_procedure().PROCEDURE_return();
1501
 
1502
        p.label("MICROPC_RESET");
1503
 
1504
        p       .DO_RESET_FLAG_SET();
1505
        p       .BRANCH_procedure().PROCEDURE_wait_finished();
1506
 
1507
        p       .DO_RESET_FLAG_CLEAR()
1508
                .BRANCH_procedure().PROCEDURE_return();
1509
 
1510
        p.label("MICROPC_STOP");
1511
 
1512
        p       .SIZE_WORD().EA_REG_3b100().EA_MOD_3b111().EA_TYPE_ALL()
1513
                .BRANCH_procedure().PROCEDURE_wait_prefetch_valid_32();
1514
 
1515
        p       .OP1_FROM_IMMEDIATE()
1516
                .PC_INCR_BY_SIZE();
1517
 
1518
        p       .ALU_MOVE_TO_CCR_SR_RTE_RTR_STOP_LOGIC_TO_CCR_SR()
1519
                .STOP_FLAG_SET()
1520
                .BRANCH_procedure().PROCEDURE_return();
1521
    }
1522
}

powered by: WebSVN 2.1.0

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