@@ -12,6 +12,7 @@ LF EQU $0A * Line feed
12
12
******************** Opcode Start *********************************************
13
13
OP_START JSR READ_OP * Read opcode into D1
14
14
BRA NOP_RTS_T * Check for NOP/RTS
15
+ BRA EXTRA_CRED
15
16
OP_TREE_C MOVE #0 ,CCR * Clear condition register
16
17
BRA OP_TREE * Branch to decision tree
17
18
@@ -22,18 +23,48 @@ READ_OP MOVE.W (A0)+,D1 * Read opcode into D1
22
23
MOVE.L A2 ,START_BUFF
23
24
RTS
24
25
26
+ *******************************************************************************
27
+ ******************* ADHOC checks for extra credit *****************************
28
+ ********** These checks are not good (uses linear serach) *********************
29
+ ********** Since these operators were not included in our original design *****
30
+ ********** They are not done in as efficient of a way *************************
31
+ *******************************************************************************
32
+ EXTRA_CRED MOVE.W #$F0C0 ,D2 * Move mask to D2
33
+ AND.W D1 ,D2 * Mask dem bits
34
+ CMPI.W #$B0C0 ,D2 * Check for CMPA
35
+ BEQ O_CMPA
36
+ CMPI.W #$90C0 ,D2 * Check for SUBA
37
+ BEQ O_SUBA
38
+
39
+ BRA OP_TREE_C * EXTRA_CRED ops not found
40
+
41
+
42
+ ********* CMPA *****************************************************
43
+ O_CMPA LEA STR_CMPA,A6 * Load CMPA string into A6
44
+ BRA CMPASUBA
45
+
46
+ ********* SUBA *****************************************************
47
+ O_SUBA LEA STR_SUBA,A6 * Load SUBA string into A6
48
+ BRA CMPASUBA
49
+
25
50
*******************************************************************************
26
51
******************* Checks for NOP/RTS ****************************************
27
52
NOP_RTS_T CMP.W (CON_NOP),D1 * Is the opcode NOP?
28
53
BEQ O_NOP * Take care of NOP
29
54
CMP.W (CON_RTS),D1 * Is the opcode RTS?
30
55
BEQ O_RTS * Take care of RTS
31
- BRA OP_TREE_C
56
+ CMPI.W #$4E4F ,D1 * Is it TRAP #15?
57
+ BEQ O_TRAP
58
+ BRA EXTRA_CRED
32
59
33
60
********* NOP ******************************************************
34
61
O_NOP LEA STR_NOP,A6 * Load NOP string into A6
35
62
BRA WRITE_ANY
36
63
64
+ ********* NOP ******************************************************
65
+ O_TRAP LEA STR_TRAP,A6 * Load NOP string into A6
66
+ BRA WRITE_ANY
67
+
37
68
********* RTS ******************************************************
38
69
O_RTS LEA STR_RTS,A6 * Load RTS string into A6
39
70
BRA WRITE_ANY
@@ -67,6 +98,9 @@ OP_TREE BTST #15,D1 * Test MSB in opcode
67
98
CMPI.W #$0400 ,D2 * Will be zero if 8-11 are 0100
68
99
BEQ O_NEG
69
100
101
+ CMPI.W #$0200 ,D2 * Will be zero if 8-11 are 0100
102
+ BEQ O_CLR
103
+
70
104
CMPI.W #$0E00 ,D2 * Will be zero if 8-11 are 1110
71
105
BEQ O_JSR
72
106
@@ -353,6 +387,12 @@ O_NEG MOVE.W #1,EA_FLAG * Load flag for EA
353
387
LEA STR_NEG,A6 * Load NEG string into A6
354
388
BRA NORM_OP_FL * Write op, '.', get size, write size
355
389
390
+ *******************************************************************************
391
+ ********** NEG ****************************************************************
392
+ O_CLR MOVE.W #1 ,EA_FLAG * Load flag for EA
393
+ LEA STR_CLR,A6 * Load CLR string into A6
394
+ BRA NORM_OP_FL * Write op, '.', get size, write size
395
+
356
396
*******************************************************************************
357
397
********** JSR ****************************************************************
358
398
O_JSR MOVE.W #1 ,EA_FLAG * Load flag for EA
@@ -451,20 +491,34 @@ O_EOR MOVE.W #9,EA_FLAG * Load flag for EA
451
491
********** MULS ***************************************************************
452
492
O_MULS MOVE.W MASK_6_8,D2 * Load mask for validation
453
493
AND.W D1 ,D2 * Mask to check bits 6-8
454
- CMPI.W #$01C0 ,D2 * They should be %111
455
- BNE INVALID_OP * Else, invalid op
494
+ CMPI.W #$00C0 ,D2 * They should be %011 for MULU
495
+ BEQ O_MULU * is mulu
496
+ CMPI.W #$01C0 ,D2 * They should be %111 for MULS
497
+ BEQ O_AND * Else, is AND
456
498
457
- MOVE.W #2 ,EA_FLAG * Load flag for EA
458
499
LEA STR_MULS,A6 * Load MULS string into A6
459
- JSR WRITE_ANY * Writes the op (previously loaded to A6)
500
+
501
+ WR_MULUS JSR WRITE_ANY * Writes the op (previously loaded to A6)
460
502
LEA STR_PERI,A6 * Load '.' string into A6
461
503
JSR WRITE_ANY * Write '.' to buffer
462
504
463
505
MOVE.W #1 ,SIZE_OP * 1 into size_op to represent word for API
464
506
LEA STR_WORD,A6
465
507
508
+ MOVE.W #2 ,EA_FLAG * Load flag for EA
466
509
BRA WR_PRP_EA
467
510
511
+ *******************************************************************************
512
+ ********** MULU ***************************************************************
513
+ O_MULU LEA STR_MULU,A6
514
+ BRA WR_MULUS
515
+
516
+ *******************************************************************************
517
+ ********** AND ****************************************************************
518
+ O_AND MOVE.W #3 ,EA_FLAG * Load flag for EA
519
+ LEA STR_ADD,A6 * Load AND string into A6
520
+ BRA NORM_OP_FL * Write op, '.', get size, write size
521
+
468
522
*******************************************************************************
469
523
********** ADD ****************************************************************
470
524
O_ADD MOVE.W #3 ,EA_FLAG * Load flag for EA
@@ -473,8 +527,8 @@ O_ADD MOVE.W #3,EA_FLAG * Load flag for EA
473
527
474
528
*******************************************************************************
475
529
********** ADDA ***************************************************************
476
- O_ADDA MOVE .W # 8 ,EA_FLAG * Load flag for EA
477
- LEA STR_ADDA, A6 * Load ADDA string into A6
530
+ O_ADDA LEA STR_ADDA, A6 * Load ADDA string into A6
531
+ CMPASUBA MOVE .W # 8 ,EA_FLAG * Load flag for EA
478
532
JSR WRITE_ANY * Writes the op (previously loaded to A6)
479
533
480
534
LEA STR_PERI,A6 * Load '.' string into A6
@@ -703,7 +757,10 @@ STR_MOVEM DC.B 'MOVEM',0
703
757
STR_MOVEA DC.B 'MOVEA ',0
704
758
STR_ORI DC.B 'ORI ',0
705
759
STR_ADD DC.B 'ADD ',0
760
+ STR_AND DC.B 'AND ',0
706
761
STR_ADDA DC.B 'ADDA ',0
762
+ STR_SUBA DC.B 'SUBA',0
763
+ STR_CMPA DC.B 'CMPA ',0
707
764
STR_BCLR DC.B 'BCLR ',0
708
765
STR_BTST DC.B 'BTST ',0
709
766
STR_CMP DC.B 'CMP ',0
@@ -723,11 +780,14 @@ STR_ASL DC.B 'ASL',0
723
780
STR_ROR DC.B 'ROR ',0
724
781
STR_ROL DC.B 'ROL ',0
725
782
STR_MULS DC.B 'MULS ',0
783
+ STR_MULU DC.B 'MULU ',0
726
784
STR_NEG DC.B 'NEG ',0
785
+ STR_CLR DC.B 'CLR ',0
727
786
STR_OR DC.B 'OR ',0
728
787
STR_SUB DC.B 'SUB ',0
729
788
STR_SUBQ DC.B 'SUBQ ',0
730
789
STR_ADDQ DC.B 'ADDQ ',0
790
+ STR_TRAP DC.B 'TRAP #15 ',0
731
791
732
792
STR_PERI DC.B '.' ,0
733
793
STR_SPACE DC.B ' ',0
0 commit comments