summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authormrb0nk500 <b0nk@b0nk.xyz>2020-10-05 11:15:21 -0400
committermrb0nk500 <b0nk@b0nk.xyz>2020-10-05 11:15:21 -0400
commit8c880c339000010260a927c3a0f28f9049b8a0b8 (patch)
treeab89f3ae43206e1ea11164e5883a77ad99f61f76 /test
parent96ae48f8a79f33cff0a89fac211b6862866e1a44 (diff)
- Fixed the rotate instructions.
The carry flag is now set properly, and the rotation now is set properly by the carry flag, even for shift values greater than one. - Added a test program for properly testing the rotate instructions.
Diffstat (limited to 'test')
-rw-r--r--test/rotate.s61
1 files changed, 61 insertions, 0 deletions
diff --git a/test/rotate.s b/test/rotate.s
new file mode 100644
index 0000000..6115e94
--- /dev/null
+++ b/test/rotate.s
@@ -0,0 +1,61 @@
+; Test rol, and ror.
+
+.org 0
+count:
+ .res 1
+tmp:
+ .res 8
+
+.org $8000
+reset:
+ cps ;
+ ldx.w #$FFFF ;
+ txs ;
+ and #0 ;
+ tax ;
+ tab ;
+ tay ;
+
+
+start:
+ ldb #8 ; Set the loop count to 8.
+@loop:
+ lda #$AA ; Set A to magic byte.
+ deb ; Decrement the loop count.
+ beq @savemagic ; Save the magic number, if the loop count is zero.
+ lsl #8 ; Shift the magic number by one byte, if the loop count is non zero.
+ bra @loop ; Keep looping.
+@savemagic:
+ sta.q tmp ; Save the magic number.
+
+
+rotate:
+ ldb #0 ; Reset B.
+@loop:
+ and #0 ; Reset A.
+ lda #$40 ; Set the shift count to 64.
+ sta count ;
+ lda.q tmp ; Get our magic number.
+ inb ; Increment our shift amount by one.
+ cpb #$40 ; Is the shift amount greater than, or equal to 64?
+ bcs rotate ; Yes, so reset B.
+@rotl:
+ rol b ; Rotate the magic number left by our shift amount.
+ dec count ; Decrement the shift count.
+ beq @rotr ; Start rotating right, if the shift count is zero.
+ bra @rotl ; Keep looping, if the shift count is non zero.
+@rotr:
+ and #0 ; Reset A.
+ lda #$40 ; Set the shift count to 64.
+ sta count ;
+ lda.q tmp ; Get our magic number.
+@rotr2:
+ ror b ; Rotate the magic number right by our shift amount.
+ dec count ; Decrement the shift count.
+ beq @loop ; Increment the shift amount, if the shift count is zero.
+ bra @rotr2 ; Keep looping, if the shift count is non zero.
+
+.org $FFC0
+.qword reset
+a
+d