Skip to content

Commit 5769b88

Browse files
committed
Implement CMPA,SUBA
1 parent 79df205 commit 5769b88

File tree

2 files changed

+122
-23
lines changed

2 files changed

+122
-23
lines changed

src/opcodes_ThomasKercheval.x68

+67-7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ LF EQU $0A * Line feed
1212
******************** Opcode Start *********************************************
1313
OP_START JSR READ_OP * Read opcode into D1
1414
BRA NOP_RTS_T * Check for NOP/RTS
15+
BRA EXTRA_CRED
1516
OP_TREE_C MOVE #0,CCR * Clear condition register
1617
BRA OP_TREE * Branch to decision tree
1718

@@ -22,18 +23,48 @@ READ_OP MOVE.W (A0)+,D1 * Read opcode into D1
2223
MOVE.L A2,START_BUFF
2324
RTS
2425

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+
2550
*******************************************************************************
2651
******************* Checks for NOP/RTS ****************************************
2752
NOP_RTS_T CMP.W (CON_NOP),D1 * Is the opcode NOP?
2853
BEQ O_NOP * Take care of NOP
2954
CMP.W (CON_RTS),D1 * Is the opcode RTS?
3055
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
3259

3360
********* NOP ******************************************************
3461
O_NOP LEA STR_NOP,A6 * Load NOP string into A6
3562
BRA WRITE_ANY
3663

64+
********* NOP ******************************************************
65+
O_TRAP LEA STR_TRAP,A6 * Load NOP string into A6
66+
BRA WRITE_ANY
67+
3768
********* RTS ******************************************************
3869
O_RTS LEA STR_RTS,A6 * Load RTS string into A6
3970
BRA WRITE_ANY
@@ -67,6 +98,9 @@ OP_TREE BTST #15,D1 * Test MSB in opcode
6798
CMPI.W #$0400,D2 * Will be zero if 8-11 are 0100
6899
BEQ O_NEG
69100

101+
CMPI.W #$0200,D2 * Will be zero if 8-11 are 0100
102+
BEQ O_CLR
103+
70104
CMPI.W #$0E00,D2 * Will be zero if 8-11 are 1110
71105
BEQ O_JSR
72106

@@ -353,6 +387,12 @@ O_NEG MOVE.W #1,EA_FLAG * Load flag for EA
353387
LEA STR_NEG,A6 * Load NEG string into A6
354388
BRA NORM_OP_FL * Write op, '.', get size, write size
355389

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+
356396
*******************************************************************************
357397
********** JSR ****************************************************************
358398
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
451491
********** MULS ***************************************************************
452492
O_MULS MOVE.W MASK_6_8,D2 * Load mask for validation
453493
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
456498

457-
MOVE.W #2,EA_FLAG * Load flag for EA
458499
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)
460502
LEA STR_PERI,A6 * Load '.' string into A6
461503
JSR WRITE_ANY * Write '.' to buffer
462504

463505
MOVE.W #1,SIZE_OP * 1 into size_op to represent word for API
464506
LEA STR_WORD,A6
465507

508+
MOVE.W #2,EA_FLAG * Load flag for EA
466509
BRA WR_PRP_EA
467510

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+
468522
*******************************************************************************
469523
********** ADD ****************************************************************
470524
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
473527

474528
*******************************************************************************
475529
********** 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
478532
JSR WRITE_ANY * Writes the op (previously loaded to A6)
479533

480534
LEA STR_PERI,A6 * Load '.' string into A6
@@ -703,7 +757,10 @@ STR_MOVEM DC.B 'MOVEM',0
703757
STR_MOVEA DC.B 'MOVEA',0
704758
STR_ORI DC.B 'ORI',0
705759
STR_ADD DC.B 'ADD',0
760+
STR_AND DC.B 'AND',0
706761
STR_ADDA DC.B 'ADDA',0
762+
STR_SUBA DC.B 'SUBA',0
763+
STR_CMPA DC.B 'CMPA',0
707764
STR_BCLR DC.B 'BCLR',0
708765
STR_BTST DC.B 'BTST',0
709766
STR_CMP DC.B 'CMP',0
@@ -723,11 +780,14 @@ STR_ASL DC.B 'ASL',0
723780
STR_ROR DC.B 'ROR',0
724781
STR_ROL DC.B 'ROL',0
725782
STR_MULS DC.B 'MULS',0
783+
STR_MULU DC.B 'MULU',0
726784
STR_NEG DC.B 'NEG',0
785+
STR_CLR DC.B 'CLR',0
727786
STR_OR DC.B 'OR',0
728787
STR_SUB DC.B 'SUB',0
729788
STR_SUBQ DC.B 'SUBQ',0
730789
STR_ADDQ DC.B 'ADDQ',0
790+
STR_TRAP DC.B 'TRAP #15',0
731791

732792
STR_PERI DC.B '.',0
733793
STR_SPACE DC.B ' ',0

src/test_code/op_codes_to_test.x68

+55-16
Original file line numberDiff line numberDiff line change
@@ -277,14 +277,14 @@ BRA_N DIVS.W D1,D2
277277
MOVEM.W A6,(A7)
278278
MOVEM.W D6,(A7)
279279

280-
* MOVEM.W D0-D1/D3/D5-D7,-(A7)
281-
* MOVEM.W D0-D1/D3/D5-D7/A1/A3-A6,-(A7)
282-
* MOVEM.W D0/D3/D5-D7/A4/A5-A6,-(A7)
283-
* MOVEM.W A1-A3/A4/A6,-(A7)
284-
* MOVEM.W D0/A1-A3/A4/A6,-(A7)
285-
* MOVEM.W D7/A1-A3/A4/A6,-(A7)
286-
* MOVEM.W A6,-(A7)
287-
* MOVEM.W D6,-(A7)
280+
MOVEM.W D0-D1/D3/D5-D7,-(A7)
281+
MOVEM.W D0-D1/D3/D5-D7/A1/A3-A6,-(A7)
282+
MOVEM.W D0/D3/D5-D7/A4/A5-A6,-(A7)
283+
MOVEM.W A1-A3/A4/A6,-(A7)
284+
MOVEM.W D0/A1-A3/A4/A6,-(A7)
285+
MOVEM.W D7/A1-A3/A4/A6,-(A7)
286+
MOVEM.W A6,-(A7)
287+
MOVEM.W D6,-(A7)
288288

289289
MOVEM.W D0-D1/D3/D5-D7,$FE
290290
MOVEM.W D0-D1/D3/D5-D7/A1/A3-A6,$FE
@@ -313,14 +313,14 @@ BRA_N DIVS.W D1,D2
313313
MOVEM.L A6,(A7)
314314
MOVEM.L D6,(A7)
315315

316-
* MOVEM.L D0-D1/D3/D5-D7,-(A7)
317-
* MOVEM.L D0-D1/D3/D5-D7/A1/A3-A6,-(A7)
318-
* MOVEM.L D0/D3/D5-D7/A4/A5-A6,-(A7)
319-
* MOVEM.L A1-A3/A4/A6,-(A7)
320-
* MOVEM.L D0/A1-A3/A4/A6,-(A7)
321-
* MOVEM.L D7/A1-A3/A4/A6,-(A7)
322-
* MOVEM.L A6,-(A7)
323-
* MOVEM.L D6,-(A7)
316+
MOVEM.L D0-D1/D3/D5-D7,-(A7)
317+
MOVEM.L D0-D1/D3/D5-D7/A1/A3-A6,-(A7)
318+
MOVEM.L D0/D3/D5-D7/A4/A5-A6,-(A7)
319+
MOVEM.L A1-A3/A4/A6,-(A7)
320+
MOVEM.L D0/A1-A3/A4/A6,-(A7)
321+
MOVEM.L D7/A1-A3/A4/A6,-(A7)
322+
MOVEM.L A6,-(A7)
323+
MOVEM.L D6,-(A7)
324324

325325
MOVEM.L D0-D1/D3/D5-D7,$FE
326326
MOVEM.L D0-D1/D3/D5-D7/A1/A3-A6,$FE
@@ -419,6 +419,45 @@ BRA_N DIVS.W D1,D2
419419
LEA $EF,A6
420420
LEA $FFFF,A7
421421

422+
ADDA.W D1,A1
423+
ADDA.W $88,A2
424+
ADDA.W $FFF88,A2
425+
ADDA.W (A1),A7
426+
ADDA.W (A1)+,A2
427+
ADDA.W -(A1),A5
428+
ADDA.L D1,A1
429+
ADDA.L $88,A2
430+
ADDA.L $FFF88,A2
431+
ADDA.L (A1),A7
432+
ADDA.L (A1)+,A2
433+
ADDA.L -(A1),A5
434+
435+
CMPA.W D1,A1
436+
CMPA.W $88,A2
437+
CMPA.W $FFF88,A2
438+
CMPA.W (A1),A7
439+
CMPA.W (A1)+,A2
440+
CMPA.W -(A1),A5
441+
CMPA.L D1,A1
442+
CMPA.L $88,A2
443+
CMPA.L $FFF88,A2
444+
CMPA.L (A1),A7
445+
CMPA.L (A1)+,A2
446+
CMPA.L -(A1),A5
447+
448+
SUBA.W D1,A1
449+
SUBA.W $88,A2
450+
SUBA.W $FFF88,A2
451+
SUBA.W (A1),A7
452+
SUBA.W (A1)+,A2
453+
SUBA.W -(A1),A5
454+
SUBA.L D1,A1
455+
SUBA.L $88,A2
456+
SUBA.L $FFF88,A2
457+
SUBA.L (A1),A7
458+
SUBA.L (A1)+,A2
459+
SUBA.L -(A1),A5
460+
422461
********* BIN 9 ***************
423462
BCLR D1,D4
424463
BCLR D3,(A4)

0 commit comments

Comments
 (0)