-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIO_OP_EA_SUBROUTINES.L68
More file actions
2055 lines (2051 loc) · 116 KB
/
IO_OP_EA_SUBROUTINES.L68
File metadata and controls
2055 lines (2051 loc) · 116 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
00001000 Starting Address
Assembler used: EASy68K Editor/Assembler v5.16.01
Created On: 12/9/2021 18:20:08
00000000 1 *-----------------------------------------------------------
00000000 =0000000D 2 CR EQU $0D
00000000 =0000000A 3 LF EQU $0A
00000000 =00000900 4 PBUFF EQU $900
00000000 5
00000000 6
00000000 7 *----- PRECONDITIONS ------*
00000000 8 * - Instruction addresses must be properly formatted hex values
00000000 9 * - Opcode must be properly formatted hex values ready to be read in memory, else outputted as DATA.
00000000 10 * - Operands/EA fields must be be properly formatted within opcode and supported, else outputted as DATA.
00000000 11 * - D7: Established as general good/bad flag to know if we should print a line (0 = good, 1 = bad)
00000000 12
00000000 13 *---- POSTCONDITIONS -----*
00000000 14 * - Output memory words to console in format (MEM LOCATION | OPCODE / DATA | OPERANDS / HEX VALUE OF WORD)
00000000 15 * - Outputs 25 lines at a time, using ENTER key to continue until given range is read.
00000000 16 * - Prompts the user to either decode another memory range, or terminate the program.
00000000 17
00001000 18 ORG $1000
00001000 19 START: ; first instruction of program
00001000 E12D 20 LSL.B D0,D5
00001002 21
00001002 22 * --Prompt user for starting address--
00001002 23 PROMPT_FOR_START
00001002 43F9 00001F24 24 LEA PROMPT_START,A1
00001008 103C 000E 25 MOVE.B #14,D0
0000100C 4E4F 26 TRAP #15
0000100E 227C 00000000 27 MOVEA.L #0,A1
00001014 28
00001014 303C 0002 29 MOVE.W #2,D0
00001018 4E4F 30 TRAP #15 Read a string from the keyboard into D1.L
0000101A 6000 001E 31 BRA CONV_STRING
0000101E 32
0000101E 33
0000101E 34 * --Prompt user for ending address--
0000101E 35 PROMPT_FOR_END
0000101E 43F9 00001F62 36 LEA PROMPT_END,A1
00001024 103C 000E 37 MOVE.B #14,D0
00001028 4E4F 38 TRAP #15
0000102A 227C 00000000 39 MOVEA.L #0,A1
00001030 40
00001030 303C 0002 41 MOVE.W #2,D0
00001034 4E4F 42 TRAP #15 Read a string from the keyboard into D1.L
00001036 6000 0002 43 BRA CONV_STRING
0000103A 44
0000103A 45
0000103A 46 *-- Converts ASCII string to Hex equivalent --
0000103A 47 CONV_STRING
0000103A 1019 48 MOVE.B (A1)+,D0 Get individual char in input string
0000103C B03C 0046 49 CMP.B #$46,D0 Check if char is more than F, the last valid hex value
00001040 6E00 001E 50 BGT DISPLAY_INVALID_HEX
00001044 B03C 0041 51 CMP.B #$41,D0 Check if char is a number or letter
00001048 6D00 0034 52 BLT CONV_NUM
0000104C 53
0000104C 54 **--Convert ASCII char to hex equivalent --
0000104C 0400 0037 55 SUB.B #$37, D0
00001050 D680 56 ADD.L D0,D3
00001052 5341 57 SUBI #1,D1
00001054 B23C 0000 58 CMP.B #0,D1
00001058 6700 0044 59 BEQ DONE_START_CONV
0000105C E98B 60 LSL.L #4,D3
0000105E 60DA 61 BRA CONV_STRING
00001060 62
00001060 63
00001060 64 * --Display invalid hex error upon invalid input--
00001060 65 DISPLAY_INVALID_HEX
00001060 43F9 00001FA8 66 LEA INVALID_HEX,A1
00001066 103C 000E 67 MOVE.B #14,D0
0000106A 4E4F 68 TRAP #15
0000106C 69
0000106C 43F9 0000209E 70 LEA LINE_BREAK,A1
00001072 103C 000E 71 MOVE.B #14,D0
00001076 4E4F 72 TRAP #15
00001078 4243 73 CLR D3
0000107A 4244 74 CLR D4
0000107C 75
0000107C 6084 76 BRA PROMPT_FOR_START
0000107E 77
0000107E 78
0000107E 79 * --Converts ASCII num char into hex equivalent--
0000107E 80 CONV_NUM
0000107E B03C 0030 81 CMP.B #$30,D0
00001082 6DDC 82 BLT DISPLAY_INVALID_HEX *check if char is less than 30, first valid hex num
00001084 B03C 0039 83 CMP.B #$39,D0
00001088 6ED6 84 BGT DISPLAY_INVALID_HEX *check if char is less than 30, last valid hex num
0000108A 0400 0030 85 SUB.B #$30,D0
0000108E D680 86 ADD.L D0,D3
00001090 5341 87 SUBI #1,D1
00001092 B23C 0000 88 CMP.B #0,D1
00001096 6700 0006 89 BEQ DONE_START_CONV
0000109A E98B 90 LSL.L #4,D3
0000109C 609C 91 BRA CONV_STRING
0000109E 92
0000109E 93
0000109E 94 * --Move converted starting address into A3--
0000109E 95 DONE_START_CONV
0000109E B87C 0001 96 CMP #1,D4
000010A2 6700 000C 97 BEQ DONE_END_CONV
000010A6 5244 98 ADDI #1,D4
000010A8 99
000010A8 2643 100 MOVEA.L D3,A3
000010AA 4243 101 CLR D3
000010AC 102
000010AC 6000 FF70 103 BRA PROMPT_FOR_END
000010B0 104
000010B0 105 * --Move converted ending address into A4 and prepare for opcodes--
000010B0 106 DONE_END_CONV
000010B0 4244 107 CLR.W D4
000010B2 2843 108 MOVEA.L D3,A4
000010B4 4243 109 CLR D3
000010B6 4244 110 CLR D4
000010B8 111
000010B8 B9CB 112 CMPA.L A3,A4 check if starting address is less than ending
000010BA 6B00 0006 113 BMI DISPLAY_INVALID_ORDER
000010BE 114
000010BE 6000 0026 115 BRA PRINT_INSTRUCTIONS
000010C2 116 *-- op code person takes over from here--
000010C2 117 *-- derive opcodes starting from start address --*
000010C2 118
000010C2 119 DISPLAY_INVALID_ORDER
000010C2 43F9 00002026 120 LEA INVALID_ORDER, A1
000010C8 103C 000E 121 MOVE.B #14,D0
000010CC 4E4F 122 TRAP #15
000010CE 123
000010CE 43F9 0000209E 124 LEA LINE_BREAK,A1
000010D4 103C 000E 125 MOVE.B #14,D0
000010D8 4E4F 126 TRAP #15
000010DA 4243 127 CLR D3
000010DC 5244 128 ADDI #1,D4 force to jump straight to DONE_END_CONV when back in DONE_START_CONV
000010DE 387C 0000 129 MOVE.W #$0000,A4 clear A4 for reprocessing
000010E2 130
000010E2 6000 FF3A 131 BRA PROMPT_FOR_END
000010E6 132
000010E6 133 *-- Use print buffer pointer to print out instructions. Set good/bad flag (D7) upon
000010E6 134 *-- invalid instruction and report back to here. A3 is opcode pointer.
000010E6 135 PRINT_INSTRUCTIONS
000010E6 4EB9 00001182 136 JSR NEEDS_NEW_SCREEN
000010EC 137
000010EC B9CB 138 CMPA.L A3,A4 *-- check if at end address
000010EE 6F00 00D8 139 BLE REACHED_END
000010F2 140
000010F2 320B 141 MOVE.W A3, D1 *-- print instruction address
000010F4 143C 0010 142 MOVE.B #16,D2
000010F8 103C 000F 143 MOVE.B #15,D0
000010FC 4E4F 144 TRAP #15
000010FE 145
000010FE 43F9 000020A2 146 LEA SPACE, A1
00001104 103C 000E 147 MOVE.B #14,D0
00001108 4E4F 148 TRAP #15
0000110A 149
0000110A 1E3C 0000 150 MOVE.B #0,D7 * Invalid flag is set to zero
0000110E 2C7C 00000900 151 MOVEA.L #PBUFF,A6 * Printbuff is A6
00001114 152
00001114 361B 153 MOVE.W (A3)+, D3
00001116 154
00001116 155 ** SAVE DATA REGISTERS (Except D7)
00001116 48E7 FE00 156 MOVEM.L D0-D6,-(SP)
0000111A 157
0000111A 4EB9 0000122A 158 JSR START_OP
00001120 159
00001120 4CDF 007F 160 MOVEM.L (SP)+,D0-D6
00001124 161 ** LOAD DATA REGISTERS (Except D7)
00001124 162
00001124 BE7C 0001 163 CMP #1,D7
00001128 6700 002C 164 BEQ DISPLAY_INVALID_INSTRUCTION
0000112C 165
0000112C 1CBC 0000 166 MOVE.B #0, (A6) * Add terminator to print buffer
00001130 227C 00000900 167 MOVEA.L #PBUFF,A1
00001136 103C 000E 168 MOVE.B #14, D0
0000113A 4E4F 169 TRAP #15 * Print print buffer
0000113C 170
0000113C 43F9 000020A2 171 LEA SPACE, A1
00001142 103C 000E 172 MOVE.B #14,D0
00001146 4E4F 173 TRAP #15
00001148 174
00001148 43F9 0000209E 175 LEA LINE_BREAK,A1
0000114E 103C 000E 176 MOVE.B #14,D0
00001152 4E4F 177 TRAP #15
00001154 178
00001154 6090 179 BRA PRINT_INSTRUCTIONS
00001156 180
00001156 181 *Display XXXXXXXX DATA YYYY if memory cannot be decoded to legitimate instruction
00001156 182 DISPLAY_INVALID_INSTRUCTION
00001156 183
00001156 43F9 00002090 184 LEA DATA, A1
0000115C 103C 000E 185 MOVE.B #14,D0
00001160 4E4F 186 TRAP #15
00001162 187
00001162 143C 0010 188 MOVE.B #16, D2
00001166 189
00001166 554B 190 SUBA.W #$0002,A3 * Offset to go back to bad data opcode word
00001168 3213 191 MOVE.W (A3),D1
0000116A 544B 192 ADDA.W #$0002,A3 * Go back to correct current position
0000116C 193
0000116C 194
0000116C 103C 000F 195 MOVE.B #15, D0
00001170 4E4F 196 TRAP #15 * Print print buffer
00001172 197
00001172 43F9 0000209E 198 LEA LINE_BREAK,A1
00001178 103C 000E 199 MOVE.B #14,D0
0000117C 4E4F 200 TRAP #15
0000117E 201
0000117E 6000 FF66 202 BRA PRINT_INSTRUCTIONS
00001182 203
00001182 204 *--Check if output reaches the end of screen
00001182 205 NEEDS_NEW_SCREEN
00001182 5244 206 ADD #1,D4
00001184 B87C 0019 207 CMP #25,D4 check if output reaches 25 lines
00001188 6700 0010 208 BEQ PROMPT_USER_FOR_ENTER
0000118C 43F9 000020A2 209 LEA SPACE,A1
00001192 303C 000E 210 MOVE #14,D0
00001196 4E4F 211 TRAP #15
00001198 4E75 212 RTS
0000119A 213
0000119A 214 *--Prompt user to press enter when display reaches line limit
0000119A 215 PROMPT_USER_FOR_ENTER
0000119A 43F9 000020A2 216 LEA SPACE,A1
000011A0 103C 000D 217 MOVE.B #13,D0
000011A4 4E4F 218 TRAP #15
000011A6 219
000011A6 43F9 00001FF6 220 LEA ENTER_MESSAGE, A1 *Prompt user to press enter to display new screen
000011AC 103C 000E 221 MOVE.B #14, D0
000011B0 4E4F 222 TRAP #15
000011B2 223
000011B2 4244 224 CLR D4
000011B4 103C 0005 225 MOVE.B #5,D0 read enter from keyboard
000011B8 4E4F 226 TRAP #15
000011BA 227
000011BA 43F9 000020A2 228 LEA SPACE, A1 fixed alignment issues
000011C0 103C 000E 229 MOVE.B #14,D0
000011C4 4E4F 230 TRAP #15
000011C6 4E75 231 RTS
000011C8 232
000011C8 233
000011C8 234 *--Ask if user wants to disassemble more memory--*
000011C8 235 REACHED_END
000011C8 43F9 000020A2 236 LEA SPACE, A1
000011CE 103C 000E 237 MOVE.B #14,D0
000011D2 4E4F 238 TRAP #15
000011D4 239
000011D4 43F9 0000205A 240 LEA ASK_REPEAT,A1
000011DA 103C 000E 241 MOVE.B #14,D0
000011DE 4E4F 242 TRAP #15
000011E0 243
000011E0 103C 0004 244 MOVE.B #4,D0
000011E4 4E4F 245 TRAP #15 Read num from the keyboard into D1.L
000011E6 246
000011E6 0C01 0000 247 CMPI.B #0, D1 0 = yes
000011EA 6700 000A 248 BEQ CLEAR_REG
000011EE 249
000011EE 0C01 0001 250 CMPI.B #1,D1 1 = no
000011F2 6700 0FE3 251 BEQ DONE
000011F6 252
000011F6 253 *--Clear all registers for reprocessing--*
000011F6 254 CLEAR_REG
000011F6 4241 255 CLR D1
000011F8 4242 256 CLR D2
000011FA 4243 257 CLR D3
000011FC 4244 258 CLR D4
000011FE 4245 259 CLR D5
00001200 4246 260 CLR D6
00001202 261
00001202 207C 00000000 262 MOVE.L #00000000,A0
00001208 227C 00000000 263 MOVE.L #00000000,A1
0000120E 267C 00000000 264 MOVE.L #00000000,A3
00001214 287C 00000000 265 MOVE.L #00000000,A4
0000121A 2A7C 00000000 266 MOVE.L #00000000,A5
00001220 2C7C 00000000 267 MOVE.L #00000000,A6
00001226 268
00001226 6000 FDDA 269 BRA PROMPT_FOR_START
0000122A 270
0000122A 271 START_OP
0000122A 272
0000122A 273 NOP
0000122A 383C 4E71 274 MOVE.W #$4E71,D4
0000122E B644 275 CMP.W D4,D3
00001230 6600 0010 276 BNE RTS
00001234 277 *Print instruction to output
00001234 43F9 0000212E 278 LEA PRNT_NOP,A1
0000123A 4EB9 00001EC6 279 JSR PRINT_BUFF
00001240 4E75 280 RTS *Return to I/O subroutine to find next instruction
00001242 281 RTS
00001242 383C 4E75 282 MOVE.W #$4E75,D4
00001246 B644 283 CMP.W D4,D3
00001248 6600 0010 284 BNE FIND_OP
0000124C 285 *Print instruction
0000124C 43F9 00002132 286 LEA PRNT_RTS,A1
00001252 4EB9 00001EC6 287 JSR PRINT_BUFF
00001258 4E75 288 RTS
0000125A 289
0000125A 290 FIND_OP *determine op code based on first 2 bits
0000125A 1C3C 000E 291 MOVE.B #14,D6
0000125E 3803 292 MOVE.W D3,D4
00001260 EC6C 293 LSR.W D6,D4
00001262 294
00001262 B83C 0000 295 CMP.B #%00,D4 *MOVE,MOVEA
00001266 6700 001A 296 BEQ OP_00
0000126A 297
0000126A B83C 0001 298 CMP.B #%01,D4 *MOVEQ, MOVEM, ADDQ, LEA, NOT, BGT/BLE/BEQ, JSR, BRA
0000126E 6700 00C6 299 BEQ OP_01
00001272 300
00001272 B83C 0002 301 CMP.B #%10,D4 *OR,SUB
00001276 6700 03B6 302 BEQ OP_10
0000127A 303
0000127A B83C 0003 304 CMP.B #%11,D4 *ADD,AND,LSL,LSR,ROL,ROR,ASL,ASR
0000127E 6700 0504 305 BEQ OP_11
00001282 306
00001282 307 OP_00 *Determine if MOVE or MOVEA op code
00001282 308 *Isolate bits 6,7,8
00001282 3803 309 MOVE.W D3,D4
00001284 EF4C 310 LSL.W #7,D4 *Remove first 7 bits
00001286 1C3C 000D 311 MOVE.B #13,D6
0000128A EC6C 312 LSR.W D6,D4 *Remove last 6 bits
0000128C B87C 0001 313 CMP.W #%001,D4
00001290 6700 0012 314 BEQ IS_MOVEA
00001294 315 IS_MOVE
00001294 316 *Print MOVE
00001294 43F9 00002136 317 LEA PRNT_MOVE,A1
0000129A 4EB9 00001EC6 318 JSR PRINT_BUFF
000012A0 319
000012A0 6000 000E 320 BRA MOVE_SIZE
000012A4 321
000012A4 322 IS_MOVEA
000012A4 323 *Print MOVEA
000012A4 43F9 0000213B 324 LEA PRNT_MOVEA,A1
000012AA 4EB9 00001EC6 325 JSR PRINT_BUFF
000012B0 326 MOVE_SIZE
000012B0 3803 327 MOVE.W D3,D4
000012B2 1C3C 000E 328 MOVE.B #14,D6
000012B6 E54C 329 LSL.W #2,D4 *Remove first 2 bits
000012B8 EC6C 330 LSR.W D6,D4 *Remove last 12 bits to find size code
000012BA 331
000012BA B83C 0001 332 CMP.B #%01,D4
000012BE 6700 0016 333 BEQ MOVE_B
000012C2 334
000012C2 B83C 0003 335 CMP.B #%11,D4
000012C6 6700 002E 336 BEQ MOVE_W
000012CA 337
000012CA B83C 0002 338 CMP.B #%10,D4
000012CE 6700 0046 339 BEQ MOVE_L
000012D2 6000 093C 340 BRA INVALID_OP
000012D6 341 MOVE_B
000012D6 342 *Print .B (byte)
000012D6 4EB9 00001BDA 343 JSR PRINT_B
000012DC 344 *Proceed to EA Subroutine
000012DC 4EB9 00001D20 345 JSR EA_SRC
000012E2 43F9 000020A6 346 LEA COMMA,A1
000012E8 4EB9 00001EC6 347 JSR PRINT_BUFF
000012EE 348
000012EE 4EB9 00001D38 349 JSR EA_DEST
000012F4 350
000012F4 4E75 351 RTS * Done printing move
000012F6 352 MOVE_W
000012F6 353 *Print .W (word)
000012F6 4EB9 00001BEC 354 JSR PRINT_W
000012FC 355 *Proceed to EA Subroutine
000012FC 4EB9 00001D20 356 JSR EA_SRC
00001302 43F9 000020A6 357 LEA COMMA,A1
00001308 4EB9 00001EC6 358 JSR PRINT_BUFF
0000130E 4EB9 00001D38 359 JSR EA_DEST
00001314 360
00001314 4E75 361 RTS
00001316 362 MOVE_L
00001316 363 *Print .L (long)
00001316 4EB9 00001BFE 364 JSR PRINT_L
0000131C 365 *Proceed to EA Subroutine
0000131C 4EB9 00001D20 366 JSR EA_SRC
00001322 43F9 000020A6 367 LEA COMMA,A1
00001328 4EB9 00001EC6 368 JSR PRINT_BUFF
0000132E 4EB9 00001D38 369 JSR EA_DEST
00001334 370
00001334 4E75 371 RTS
00001336 372
00001336 373 OP_01 *MOVEQ, MOVEM, ADDQ, LEA, NOT, BGT/BLE/BEQ, JSR, BRA
00001336 3803 374 MOVE.W D3,D4
00001338 1C3C 000C 375 MOVE.B #12,D6
0000133C EC6C 376 LSR.W D6,D4 *get first 4 bits
0000133E 377
0000133E B83C 0007 378 CMP.B #%0111,D4 *MOVEQ
00001342 6700 001A 379 BEQ OP_0111
00001346 B83C 0004 380 CMP.B #%0100,D4 *MOVEM, LEA, NOT, JSR
0000134A 6700 0066 381 BEQ OP_0100
0000134E B83C 0005 382 CMP.B #%0101,D4 *ADDQ
00001352 6700 0172 383 BEQ OP_0101
00001356 B83C 0006 384 CMP.B #%0110,D4 *Bcc, BRA
0000135A 6700 01FA 385 BEQ OP_0110
0000135E 386
0000135E 387 OP_0111 *MOVEQ
0000135E 388 *Check bit 8 to validate
0000135E 2803 389 MOVE.L D3,D4
00001360 EF4C 390 LSL.W #7,D4
00001362 1C3C 000F 391 MOVE.B #15,D6
00001366 EC6C 392 LSR.W D6,D4
00001368 B83C 0000 393 CMP.B #%0,D4
0000136C 6600 08A2 394 BNE INVALID_OP
00001370 395
00001370 396 *Print MOVEQ
00001370 43F9 00002147 397 LEA PRNT_MOVEQ,A1
00001376 4EB9 00001EC6 398 JSR PRINT_BUFF
0000137C 399
0000137C 2803 400 MOVE.L D3,D4
0000137E E14C 401 LSL.W #8,D4
00001380 E04C 402 LSR.W #8,D4
00001382 403 *Print data
00001382 404
00001382 405 ** NOW PRINTS #$ in front
00001382 406
00001382 43F9 000021B7 407 LEA PRNT_DT,A1
00001388 4EB9 00001EC6 408 JSR PRINT_BUFF
0000138E 409
0000138E 2204 410 MOVE.L D4,D1
00001390 4EB9 00001ED2 411 JSR PRINT_HEXBUFF
00001396 412
00001396 413 *** Move reg. bits into a bitfield for EA
00001396 3803 414 MOVE.W D3,D4
00001398 C87C 0E00 415 AND.W #%0000111000000000,D4
0000139C E64C 416 LSR.W #3,D4
0000139E EC4C 417 LSR.W #6,D4
000013A0 1C04 418 MOVE.B D4,D6
000013A2 419
000013A2 48E7 FE00 420 MOVEM.L D0-D6,-(SP) * D0-D6
000013A6 421
000013A6 4EB9 00001D64 422 JSR EA_SUB
000013AC 423
000013AC 4CDF 007F 424 MOVEM.L (SP)+,D0-D6 * D0-D6
000013B0 425
000013B0 4E75 426 RTS
000013B2 427
000013B2 428
000013B2 429 OP_0100 *MOVEM, LEA, NOT, JSR
000013B2 430 *Check if LEA (Now before MOVEM/JSR Check)
000013B2 2803 431 MOVE.L D3,D4
000013B4 EF4C 432 LSL.W #7,D4
000013B6 1C3C 000D 433 MOVE.B #13,D6
000013BA EC6C 434 LSR.W D6,D4
000013BC B83C 0007 435 CMP.B #%111,D4 *Check bits 8,7,6
000013C0 6700 0016 436 BEQ IS_LEA
000013C4 437
000013C4 2803 438 MOVE.L D3,D4
000013C6 1C3C 000B 439 MOVE.B #11,D6
000013CA EC6C 440 LSR.W D6,D4
000013CC B83C 0009 441 CMP.B #%01001,D4 *MOVEM or JSR
000013D0 6700 00A8 442 BEQ OP_01001
000013D4 443
000013D4 6000 0044 444 BRA IS_NOT
000013D8 445
000013D8 446
000013D8 447 IS_LEA
000013D8 43F9 00002172 448 LEA PRNT_LEA,A1
000013DE 4EB9 00001EC6 449 JSR PRINT_BUFF
000013E4 450 * HANDLE OPERANDS
000013E4 1A3C 0003 451 MOVE.B #3,D5 * Size operation is always longword for LEA, so set here.
000013E8 452
000013E8 4EB9 00001D20 453 JSR EA_SRC * Handle the source EA
000013EE 454
000013EE 2803 455 MOVE.L D3,D4
000013F0 C87C 0E00 456 AND.W #%0000111000000000,D4 * Isolate Register #
000013F4 E64C 457 LSR.W #3,D4
000013F6 EC4C 458 LSR.W #6,D4
000013F8 1C04 459 MOVE.B D4,D6 * Prime D6 register
000013FA 8C3C 0008 460 OR.B #%00001000,D6 * Add the An mode to D6
000013FE 461
000013FE 48E7 FE00 462 MOVEM.L D0-D6,-(SP) * D0-D6
00001402 463
00001402 43F9 000020A6 464 LEA COMMA,A1
00001408 4EB9 00001EC6 465 JSR PRINT_BUFF
0000140E 466
0000140E 4EB9 00001D64 467 JSR EA_SUB * Handle the destination EA (last 6 bits of D6)
00001414 468
00001414 4CDF 007F 469 MOVEM.L (SP)+,D0-D6 * D0-D6
00001418 470
00001418 4E75 471 RTS * Return to IO
0000141A 472
0000141A 473
0000141A 474
0000141A 475 IS_NOT
0000141A 2803 476 MOVE.L D3,D4
0000141C E04C 477 LSR.W #8,D4
0000141E B87C 0046 478 CMP.W #%01000110,D4
00001422 6600 07EC 479 BNE INVALID_OP
00001426 480
00001426 43F9 0000216B 481 LEA PRNT_NOT,A1
0000142C 4EB9 00001EC6 482 JSR PRINT_BUFF
00001432 483
00001432 2803 484 MOVE.L D3,D4
00001434 E14C 485 LSL.W #8,D4
00001436 1C3C 000E 486 MOVE.B #14,D6
0000143A EC6C 487 LSR.W D6,D4
0000143C B83C 0000 488 CMP.B #%00,D4
00001440 6700 0016 489 BEQ NOT_B
00001444 B83C 0001 490 CMP.B #%01,D4
00001448 6700 0018 491 BEQ NOT_W
0000144C B83C 0002 492 CMP.B #%10,D4
00001450 6700 001A 493 BEQ NOT_L
00001454 494
00001454 6000 07BA 495 BRA INVALID_OP
00001458 496 NOT_B
00001458 4EB9 00001BDA 497 JSR PRINT_B
0000145E 498 *Proceed to EA Subroutine
0000145E 6000 0012 499 BRA NOT_EA
00001462 500 NOT_W
00001462 4EB9 00001BEC 501 JSR PRINT_W
00001468 502 *Proceed to EA Subroutine
00001468 6000 0008 503 BRA NOT_EA
0000146C 504 NOT_L
0000146C 4EB9 00001BFE 505 JSR PRINT_L
00001472 506 *Proceed to EA Subroutine
00001472 507
00001472 508 NOT_EA
00001472 509
00001472 4EB9 00001D20 510 JSR EA_SRC
00001478 4E75 511 RTS *** Return to IO ***
0000147A 512
0000147A 513
0000147A 514 OP_01001
0000147A 2803 515 MOVE.L D3,D4
0000147C EC4C 516 LSR.W #6,D4
0000147E B87C 013A 517 CMP.W #%0100111010,D4 *Check if JSR
00001482 6600 0016 518 BNE IS_MOVEM
00001486 43F9 0000214E 519 LEA PRNT_JSR,A1
0000148C 4EB9 00001EC6 520 JSR PRINT_BUFF
00001492 4EB9 00001D20 521 JSR EA_SRC
00001498 4E75 522 RTS *Proceed to EA Subroutine
0000149A 523 IS_MOVEM
0000149A 524 *Check bits 9,8,7 to validate
0000149A 2803 525 MOVE.L D3,D4
0000149C ED4C 526 LSL.W #6,D4
0000149E 1C3C 000D 527 MOVE.B #13,D6
000014A2 EC6C 528 LSR.W D6,D4
000014A4 B83C 0001 529 CMP.B #%001,D4
000014A8 6600 0766 530 BNE INVALID_OP
000014AC 531
000014AC 43F9 00002141 532 LEA PRNT_MOVEM,A1
000014B2 4EB9 00001EC6 533 JSR PRINT_BUFF
000014B8 4E75 534 RTS
000014BA 535
000014BA 536 * MOVE.L D3,D4
000014BA 537 * MOVE.B #9,D6
000014BA 538 * LSL.W D6,D4
000014BA 539 * MOVE.B #15,D6
000014BA 540 * LSR.W D6,D4
000014BA 541
000014BA 542 * CMP.B #0,D4
000014BA 543 * BEQ MOVEM_W
000014BA 544 * CMP.B #1,D4
000014BA 545 * BEQ MOVEM_L
000014BA 546 * BRA INVALID_OP
000014BA 547 MOVEM_W
000014BA 4EB9 00001BEC 548 JSR PRINT_W
000014C0 549 *Proceed to EA Subroutine
000014C0 550 MOVEM_L
000014C0 4EB9 00001BFE 551 JSR PRINT_L
000014C6 552 *Proceed to EA Subroutine
000014C6 553 OP_0101 *ADDQ
000014C6 554 *Check bit 8 to validate
000014C6 2803 555 MOVE.L D3,D4
000014C8 EF4C 556 LSL.W #7,D4
000014CA 1C3C 000F 557 MOVE.B #15,D6
000014CE EC6C 558 LSR.W D6,D4
000014D0 B83C 0000 559 CMP.B #%0,D4
000014D4 6600 073A 560 BNE INVALID_OP
000014D8 561
000014D8 562 *Print ADDQ
000014D8 43F9 00002177 563 LEA PRNT_ADDQ,A1
000014DE 4EB9 00001EC6 564 JSR PRINT_BUFF
000014E4 565
000014E4 2803 566 MOVE.L D3,D4
000014E6 E14C 567 LSL.W #8,D4 *Remove first 8 bits
000014E8 1C3C 000E 568 MOVE.B #14,D6
000014EC EC6C 569 LSR.W D6,D4 *and last 6 bits to get size
000014EE 570
000014EE B83C 0000 571 CMP.B #%00,D4
000014F2 6700 0012 572 BEQ ADDQ_B
000014F6 B83C 0001 573 CMP.B #%01,D4
000014FA 6700 0014 574 BEQ ADDQ_W
000014FE B83C 0002 575 CMP.B #%10,D4
00001502 6700 0016 576 BEQ ADDQ_L
00001506 577
00001506 578 ADDQ_B
00001506 579 *Print .B
00001506 4EB9 00001BDA 580 JSR PRINT_B
0000150C 6000 0016 581 BRA ADDQ_DATA
00001510 582
00001510 583 ADDQ_W
00001510 584 *Print .W
00001510 4EB9 00001BEC 585 JSR PRINT_W
00001516 6000 000C 586 BRA ADDQ_DATA
0000151A 587
0000151A 588 ADDQ_L
0000151A 589 *Print .L
0000151A 4EB9 00001BFE 590 JSR PRINT_L
00001520 6000 0002 591 BRA ADDQ_DATA
00001524 592 ADDQ_DATA
00001524 2803 593 MOVE.L D3,D4
00001526 E94C 594 LSL.W #4,D4 *Remove first 4 bits
00001528 1C3C 000D 595 MOVE.B #13,D6
0000152C EC6C 596 LSR.W D6,D4
0000152E 597
0000152E 598 *Print data
0000152E 43F9 000021B5 599 LEA PRNT_Q,A1
00001534 4EB9 00001EC6 600 JSR PRINT_BUFF
0000153A 601
0000153A 3204 602 MOVE.W D4,D1
0000153C 4EB9 00001ED2 603 JSR PRINT_HEXBUFF
00001542 604
00001542 43F9 000020A6 605 LEA COMMA,A1
00001548 4EB9 00001EC6 606 JSR PRINT_BUFF
0000154E 607
0000154E 608 * Handle EA
0000154E 4EB9 00001D20 609 JSR EA_SRC
00001554 610
00001554 4E75 611 RTS * Return to IO
00001556 612
00001556 613 *Proceed to EA Subroutine
00001556 614 OP_0110
00001556 2803 615 MOVE.L D3,D4
00001558 1C3C 000C 616 MOVE.B #12,D6
0000155C E94C 617 LSL.W #4,D4
0000155E EC6C 618 LSR.W D6,D4
00001560 619
00001560 B87C 0000 620 CMP.W #%0000,D4
00001564 6700 001E 621 BEQ IS_BRA
00001568 622
00001568 B87C 000E 623 CMP.W #%1110,D4
0000156C 6700 002A 624 BEQ IS_BGT
00001570 625
00001570 B87C 000F 626 CMP.W #%1111,D4
00001574 6700 0036 627 BEQ IS_BLE
00001578 628
00001578 B87C 0007 629 CMP.W #%0111,D4
0000157C 6700 0042 630 BEQ IS_BEQ
00001580 631
00001580 6000 068E 632 BRA INVALID_OP
00001584 633 IS_BRA
00001584 43F9 00002165 634 LEA PRNT_BRA,A1
0000158A 4EB9 00001EC6 635 JSR PRINT_BUFF
00001590 4EB9 000015D4 636 JSR DISP
00001596 4E75 637 RTS
00001598 638
00001598 639 IS_BGT
00001598 43F9 00002153 640 LEA PRNT_BGT,A1
0000159E 4EB9 00001EC6 641 JSR PRINT_BUFF
000015A4 4EB9 000015D4 642 JSR DISP
000015AA 4E75 643 RTS
000015AC 644 IS_BLE
000015AC 43F9 00002159 645 LEA PRNT_BLE,A1
000015B2 4EB9 00001EC6 646 JSR PRINT_BUFF
000015B8 4EB9 000015D4 647 JSR DISP
000015BE 4E75 648 RTS
000015C0 649 IS_BEQ
000015C0 43F9 0000215F 650 LEA PRNT_BEQ,A1
000015C6 4EB9 00001EC6 651 JSR PRINT_BUFF
000015CC 4EB9 000015D4 652 JSR DISP
000015D2 4E75 653 RTS
000015D4 654
000015D4 655
000015D4 656 DISP *8 bit displacement field
000015D4 2803 657 MOVE.L D3,D4
000015D6 E14C 658 LSL.W #8,D4
000015D8 E04C 659 LSR.W #8,D4 *Holds displacement value
000015DA C87C 00FF 660 AND.W #$00FF,D4
000015DE 661
000015DE B87C 0000 662 CMP.W #$00,D4
000015E2 6700 001E 663 BEQ DISP_16
000015E6 B87C 00FF 664 CMP.W #$FF,D4
000015EA 6700 002C 665 BEQ DISP_32
000015EE 666
000015EE 2A4B 667 MOVEA.L A3,A5
000015F0 2C0D 668 MOVE.L A5,D6 *Holds next instruction address
000015F2 4604 669 NOT.B D4 *flip bits
000015F4 5284 670 ADD.L #%01,D4
000015F6 671
000015F6 9C44 672 SUB.W D4,D6
000015F8 2206 673 MOVE.L D6,D1
000015FA 674 *=MOVE.B #16,D2
000015FA 675 *=MOVE.B #15,D0
000015FA 676 *TRAP #15
000015FA 4EB9 00001ED2 677 JSR PRINT_HEXBUFF
00001600 4E75 678 RTS
00001602 679 DISP_16
00001602 381B 680 MOVE.W (A3)+,D4
00001604 2A4B 681 MOVEA.L A3,A5
00001606 2C0D 682 MOVE.L A5,D6 *Holds next instruction address
00001608 4604 683 NOT.B D4
0000160A 5284 684 ADD.L #%01,D4
0000160C 685
0000160C 9C44 686 SUB.W D4,D6
0000160E 2206 687 MOVE.L D6,D1
00001610 688 *=MOVE.B #16,D2
00001610 689 *=MOVE.B #15,D0
00001610 690 *TRAP #15
00001610 4EB9 00001ED2 691 JSR PRINT_HEXBUFF
00001616 4E75 692 RTS
00001618 693 DISP_32
00001618 281B 694 MOVE.L (A3)+,D4
0000161A 2A4B 695 MOVEA.L A3,A5
0000161C 2C0D 696 MOVE.L A5,D6 *Holds next instruction address
0000161E 4604 697 NOT.B D4
00001620 5284 698 ADD.L #%01,D4
00001622 699
00001622 9C44 700 SUB.W D4,D6
00001624 2206 701 MOVE.L D6,D1
00001626 4EB9 00001ED2 702 JSR PRINT_HEXBUFF
0000162C 703 * MOVE.B #16,D2
0000162C 704 * MOVE.B #15,D0
0000162C 705 * TRAP #15
0000162C 4E75 706 RTS
0000162E 707 OP_10 *OR,SUB
0000162E 2803 708 MOVE.L D3,D4
00001630 E54C 709 LSL.W #2,D4
00001632 1C3C 000E 710 MOVE.B #14,D6
00001636 EC6C 711 LSR.W D6,D4
00001638 B83C 0000 712 CMP.B #%00,D4 *Check bits 13 and 12
0000163C 6700 000E 713 BEQ IS_OR
00001640 714
00001640 B83C 0001 715 CMP.B #%01,D4
00001644 6700 00A4 716 BEQ IS_SUB
00001648 717
00001648 6000 05C6 718 BRA INVALID_OP
0000164C 719 IS_OR
0000164C 43F9 0000216F 720 LEA PRNT_OR,A1
00001652 4EB9 00001EC6 721 JSR PRINT_BUFF
00001658 722
00001658 2803 723 MOVE.L D3,D4
0000165A EF4C 724 LSL.W #7,D4
0000165C 1C3C 000D 725 MOVE.B #13,D6
00001660 EC6C 726 LSR.W D6,D4
00001662 727
00001662 728 * Destination is Dn
00001662 B83C 0000 729 CMP.B #%000,D4
00001666 6700 002E 730 BEQ OR_B_D
0000166A B83C 0001 731 CMP.B #%001,D4
0000166E 6700 0034 732 BEQ OR_W_D
00001672 B83C 0002 733 CMP.B #%010,D4
00001676 6700 003A 734 BEQ OR_L_D
0000167A 735
0000167A B83C 0004 736 CMP.B #%100,D4
0000167E 6700 0040 737 BEQ OR_B
00001682 B83C 0005 738 CMP.B #%101,D4
00001686 6700 0046 739 BEQ OR_W
0000168A B83C 0006 740 CMP.B #%110,D4
0000168E 6700 004C 741 BEQ OR_L
00001692 742
00001692 6000 057C 743 BRA INVALID_OP
00001696 744
00001696 745
00001696 746
00001696 747
00001696 748 * For these, handle EA first, then Data reg.
00001696 749 OR_B_D
00001696 4EB9 00001BDA 750 JSR PRINT_B
0000169C 751 *Proceed to EA Subroutine
0000169C 4EB9 00001CC2 752 JSR ADDFORMAT_DATA_DEST_EA
000016A2 753
000016A2 4E75 754 RTS * Return to IO
000016A4 755
000016A4 756 OR_W_D
000016A4 4EB9 00001BEC 757 JSR PRINT_W
000016AA 758 *Proceed to EA Subroutine
000016AA 4EB9 00001CC2 759 JSR ADDFORMAT_DATA_DEST_EA
000016B0 760
000016B0 4E75 761 RTS * Return to IO
000016B2 762 OR_L_D
000016B2 4EB9 00001BFE 763 JSR PRINT_L
000016B8 764 *Proceed to EA Subroutine
000016B8 4EB9 00001CC2 765 JSR ADDFORMAT_DATA_DEST_EA
000016BE 766
000016BE 4E75 767 RTS * Return to IO
000016C0 768
000016C0 769
000016C0 770 * For these, handle Data reg first, then EA
000016C0 771 OR_B
000016C0 4EB9 00001BDA 772 JSR PRINT_B
000016C6 773 *Proceed to EA Subroutine
000016C6 4EB9 00001CF0 774 JSR ADDFORMAT_EA_DEST_EA
000016CC 4E75 775 RTS * Return to IO
000016CE 776
000016CE 777 OR_W
000016CE 4EB9 00001BEC 778 JSR PRINT_W
000016D4 779 *Proceed to EA Subroutine
000016D4 4EB9 00001CF0 780 JSR ADDFORMAT_EA_DEST_EA
000016DA 4E75 781 RTS * Return to IO
000016DC 782
000016DC 783 OR_L
000016DC 4EB9 00001BFE 784 JSR PRINT_L
000016E2 785 *Proceed to EA Subroutine
000016E2 4EB9 00001CF0 786 JSR ADDFORMAT_EA_DEST_EA
000016E8 4E75 787 RTS * Return to IO
000016EA 788
000016EA 789 IS_SUB
000016EA 43F9 00002189 790 LEA PRNT_SUB,A1
000016F0 4EB9 00001EC6 791 JSR PRINT_BUFF
000016F6 792
000016F6 2803 793 MOVE.L D3,D4
000016F8 EF4C 794 LSL.W #7,D4
000016FA 1C3C 000D 795 MOVE.B #13,D6
000016FE EC6C 796 LSR.W D6,D4
00001700 797
00001700 798 * Data register as destination;
00001700 B83C 0000 799 CMP.B #%000,D4
00001704 6700 002A 800 BEQ SUB_B_D
00001708 B83C 0001 801 CMP.B #%001,D4
0000170C 6700 0030 802 BEQ SUB_W_D
00001710 B83C 0002 803 CMP.B #%010,D4
00001714 6700 0036 804 BEQ SUB_L_D
00001718 805
00001718 806 * EA as destination;
00001718 B83C 0004 807 CMP.B #%100,D4
0000171C 6700 003C 808 BEQ SUB_B
00001720 B83C 0005 809 CMP.B #%101,D4
00001724 6700 0042 810 BEQ SUB_W
00001728 B83C 0006 811 CMP.B #%110,D4
0000172C 6700 0048 812 BEQ SUB_L
00001730 813
00001730 814
00001730 815 * Handle EA, then Data Reg.
00001730 816 SUB_B_D
00001730 4EB9 00001BDA 817 JSR PRINT_B
00001736 818 *Proceed to EA Subroutine
00001736 4EB9 00001CC2 819 JSR ADDFORMAT_DATA_DEST_EA
0000173C 820
0000173C 4E75 821 RTS * Return to IO
0000173E 822 SUB_W_D
0000173E 4EB9 00001BEC 823 JSR PRINT_W
00001744 824 *Proceed to EA Subroutine
00001744 4EB9 00001CC2 825 JSR ADDFORMAT_DATA_DEST_EA
0000174A 826
0000174A 4E75 827 RTS * Return to IO
0000174C 828 SUB_L_D
0000174C 4EB9 00001BFE 829 JSR PRINT_L
00001752 830 *Proceed to EA Subroutine
00001752 4EB9 00001CC2 831 JSR ADDFORMAT_DATA_DEST_EA
00001758 832
00001758 4E75 833 RTS * Return to IO
0000175A 834
0000175A 835
0000175A 836 * Handle Data reg, then EA
0000175A 837 SUB_B
0000175A 4EB9 00001BDA 838 JSR PRINT_B
00001760 839 *Proceed to EA Subroutine
00001760 4EB9 00001CF0 840 JSR ADDFORMAT_EA_DEST_EA
00001766 4E75 841 RTS * Return to IO
00001768 842 SUB_W
00001768 4EB9 00001BEC 843 JSR PRINT_W
0000176E 844 *Proceed to EA Subroutine
0000176E 4EB9 00001CF0 845 JSR ADDFORMAT_EA_DEST_EA
00001774 4E75 846 RTS * Return to IO
00001776 847 SUB_L
00001776 4EB9 00001BFE 848 JSR PRINT_L
0000177C 849 *Proceed to EA Subroutine
0000177C 4EB9 00001CF0 850 JSR ADDFORMAT_EA_DEST_EA
00001782 4E75 851 RTS * Return to IO
00001784 852
00001784 853
00001784 854 OP_11
00001784 2803 855 MOVE.L D3,D4
00001786 1C3C 000C 856 MOVE.B #12,D6
0000178A EC6C 857 LSR.W D6,D4
0000178C 858
0000178C B83C 000C 859 CMP.B #%1100,D4 *AND
00001790 6700 0016 860 BEQ OP_1100
00001794 861
00001794 B83C 000D 862 CMP.B #%1101,D4 *ADD,ADDA
00001798 6700 00AC 863 BEQ OP_1101
0000179C 864
0000179C B83C 000E 865 CMP.B #%1110,D4 *LSL/LSR,ASL/ASR,ROL/ROR
000017A0 6700 019E 866 BEQ OP_1110
000017A4 867
000017A4 6000 046A 868 BRA INVALID_OP
000017A8 869 OP_1100 *AND
000017A8 43F9 00002185 870 LEA PRNT_AND,A1
000017AE 4EB9 00001EC6 871 JSR PRINT_BUFF
000017B4 872
000017B4 2803 873 MOVE.L D3,D4
000017B6 EF4C 874 LSL.W #7,D4
000017B8 1C3C 000D 875 MOVE.B #13,D6
000017BC EC6C 876 LSR.W D6,D4 *Get Opmode
000017BE 877 *< ea > Dn -> Dn (Data reg destination)
000017BE B83C 0000 878 CMP.B #%000,D4
000017C2 6700 002E 879 BEQ AND_B_D
000017C6 B83C 0001 880 CMP.B #%001,D4
000017CA 6700 0034 881 BEQ AND_W_D
000017CE B83C 0002 882 CMP.B #%010,D4
000017D2 6700 003A 883 BEQ AND_L_D
000017D6 884 *Dn < ea > -> < ea > (EA destination)
000017D6 B83C 0004 885 CMP.B #%100,D4
000017DA 6700 0040 886 BEQ AND_B
000017DE B83C 0005 887 CMP.B #%101,D4
000017E2 6700 0046 888 BEQ AND_W
000017E6 B83C 0006 889 CMP.B #%110,D4
000017EA 6700 004C 890 BEQ AND_L
000017EE 891
000017EE 6000 0420 892 BRA INVALID_OP
000017F2 893
000017F2 894 * Handle EA, then Data Reg.
000017F2 895 AND_B_D
000017F2 4EB9 00001BDA 896 JSR PRINT_B
000017F8 897 *Proceed to EA Subroutine
000017F8 4EB9 00001CC2 898 JSR ADDFORMAT_DATA_DEST_EA
000017FE 899
000017FE 4E75 900 RTS * Return to IO
00001800 901
00001800 902 AND_W_D
00001800 4EB9 00001BEC 903 JSR PRINT_W
00001806 904 *Proceed to EA Subroutine
00001806 4EB9 00001CC2 905 JSR ADDFORMAT_DATA_DEST_EA
0000180C 906
0000180C 4E75 907 RTS * Return to IO
0000180E 908
0000180E 909 AND_L_D
0000180E 4EB9 00001BFE 910 JSR PRINT_L
00001814 911 *Proceed to EA Subroutine
00001814 4EB9 00001CC2 912 JSR ADDFORMAT_DATA_DEST_EA
0000181A 913
0000181A 4E75 914 RTS * Return to IO
0000181C 915
0000181C 916
0000181C 917 * Handle data reg, then EA
0000181C 918 AND_B
0000181C 4EB9 00001BDA 919 JSR PRINT_B
00001822 920 *Proceed to EA Subroutine
00001822 4EB9 00001CF0 921 JSR ADDFORMAT_EA_DEST_EA
00001828 4E75 922 RTS * Return to IO
0000182A 923
0000182A 924 AND_W
0000182A 4EB9 00001BEC 925 JSR PRINT_W
00001830 926 *Proceed to EA Subroutine
00001830 4EB9 00001CF0 927 JSR ADDFORMAT_EA_DEST_EA
00001836 4E75 928 RTS * Return to IO
00001838 929
00001838 930 AND_L
00001838 4EB9 00001BFE 931 JSR PRINT_L
0000183E 932 *Proceed to EA Subroutine
0000183E 4EB9 00001CF0 933 JSR ADDFORMAT_EA_DEST_EA
00001844 4E75 934 RTS * Return to IO
00001846 935
00001846 936
00001846 937
00001846 938 OP_1101 *ADD,ADDA
00001846 2803 939 MOVE.L D3,D4
00001848 EF4C 940 LSL.W #7,D4
0000184A 1C3C 000D 941 MOVE.B #13,D6
0000184E EC6C 942 LSR.W D6,D4 *Get Opmode
00001850 943
00001850 944 *ADD Opmodes
00001850 945 *< ea > Dn -> Dn (Dn is the destination; Print <ea> first, then data register)
00001850 946 * Added new branches to differentiate between orders.
00001850 B83C 0000 947 CMP.B #%000,D4
00001854 6700 005A 948 BEQ ADD_B_D
00001858 B83C 0001 949 CMP.B #%001,D4
0000185C 6700 0064 950 BEQ ADD_W_D
00001860 B83C 0002 951 CMP.B #%010,D4
00001864 6700 006E 952 BEQ ADD_L_D
00001868 953
00001868 954
00001868 955 *Dn < ea > -> < ea > (EA is the destination; Print data reg first, then <ea>)
00001868 B83C 0004 956 CMP.B #%100,D4
0000186C 6700 0078 957 BEQ ADD_B
00001870 B83C 0005 958 CMP.B #%101,D4
00001874 6700 0082 959 BEQ ADD_W
00001878 B83C 0006 960 CMP.B #%110,D4
0000187C 6700 008C 961 BEQ ADD_L
00001880 962
00001880 963
00001880 964 *ADDA Opmodes (ALWAYS has An as the destination, so print <ea> first, then the register)
00001880 B83C 0003 965 CMP.B #%011,D4
00001884 6700 0096 966 BEQ ADDA_W
00001888 B83C 0007 967 CMP.B #%111,D4
0000188C 6700 00A0 968 BEQ ADDA_L
00001890 969
00001890 970
00001890 6000 037E 971 BRA INVALID_OP
00001894 972
00001894 973 IS_ADD
00001894 43F9 0000217C 974 LEA PRNT_ADD,A1
0000189A 4EB9 00001EC6 975 JSR PRINT_BUFF
000018A0 4E75 976 RTS
000018A2 977 IS_ADDA
000018A2 43F9 00002180 978 LEA PRNT_ADDA,A1
000018A8 4EB9 00001EC6 979 JSR PRINT_BUFF
000018AE 4E75 980 RTS
000018B0 981
000018B0 982 * For these, handle EA first, then Data reg.
000018B0 983 ADD_B_D
000018B0 4EB8 1894 984 JSR IS_ADD
000018B4 4EB9 00001BDA 985 JSR PRINT_B
000018BA 986 * Handle operands
000018BA 4EB9 00001CC2 987 JSR ADDFORMAT_DATA_DEST_EA
000018C0 988
000018C0 4E75 989 RTS * Return to IO
000018C2 990
000018C2 991 ADD_W_D
000018C2 4EB8 1894 992 JSR IS_ADD
000018C6 4EB9 00001BEC 993 JSR PRINT_W
000018CC 994 * Handle operands
000018CC 4EB9 00001CC2 995 JSR ADDFORMAT_DATA_DEST_EA
000018D2 996