Discussion:
6502 ROL Bug In AppleWin?
(too old to reply)
John Public
2022-04-11 18:54:14 UTC
Permalink
Not sure but I think I found a bug.
Look at this table then at the 6502 and the results

0 00 0000
1 01 0001
2 02 0010
3 03 0011
4 04 0100
5 05 0101
6 06 0110
7 07 0111
8 08 1000
9 09 1001
10 0A 1010
11 0B 1011
12 0C 1100
13 0D 1101
14 0E 1110
15 0F 1111


19 ROL become 32
32 XOR 58 = 6A
6A ROL become D4
D4 XOR 79 = AD
AD ROL SHOULD BE 5B but it's 5A

Is this a bug in the CPU itself or AppleWin?

If I take AD
10101101

rotate left

01011011 = 5B

The debugger shows 5A in the accumulator with the
carry flag being set?









32 EOR 58
I am Rob
2022-04-11 20:28:16 UTC
Permalink
Post by John Public
Not sure but I think I found a bug.
Look at this table then at the 6502 and the results
0 00 0000
1 01 0001
2 02 0010
3 03 0011
4 04 0100
5 05 0101
6 06 0110
7 07 0111
8 08 1000
9 09 1001
10 0A 1010
11 0B 1011
12 0C 1100
13 0D 1101
14 0E 1110
15 0F 1111
19 ROL become 32
32 XOR 58 = 6A
6A ROL become D4
D4 XOR 79 = AD
AD ROL SHOULD BE 5B but it's 5A
Is this a bug in the CPU itself or AppleWin?
If I take AD
10101101
rotate left
01011011 = 5B
The debugger shows 5A in the accumulator with the
carry flag being set?
I think your logic might be incorrect.
When you rotate 6A to become D4, the hi-bit of 6A is clear, which rotates into the carry.
The XOR with 79 does not affect the carry so the carry is still clear.
Lastly when AD is rotated, the hi-bit is set and goes into the carry and and the carry (which was preiously clear) goes into the lo-bit, so the result is 5A, which is correct and the carry should now be set.
I am Rob
2022-04-11 20:29:25 UTC
Permalink
Post by John Public
Not sure but I think I found a bug.
Look at this table then at the 6502 and the results
0 00 0000
1 01 0001
2 02 0010
3 03 0011
4 04 0100
5 05 0101
6 06 0110
7 07 0111
8 08 1000
9 09 1001
10 0A 1010
11 0B 1011
12 0C 1100
13 0D 1101
14 0E 1110
15 0F 1111
19 ROL become 32
32 XOR 58 = 6A
6A ROL become D4
D4 XOR 79 = AD
AD ROL SHOULD BE 5B but it's 5A
Is this a bug in the CPU itself or AppleWin?
If I take AD
10101101
rotate left
01011011 = 5B
The debugger shows 5A in the accumulator with the
carry flag being set?
think your logic might be incorrect.
When you rotate 6A to become D4, the hi-bit of 6A is clear, which rotates into the carry.
The XOR with 79 does not affect the carry so the carry is still clear.
Lastly when AD is rotated, the hi-bit is set and goes into the carry and and the carry (which was previously clear) goes into the lo-bit, so the result is 5A, which is correct and the carry should now be set.
John Public
2022-04-11 22:39:20 UTC
Permalink
Thank you Rob.
I saw the difference as Windows Calculator was showing 5B.
Your explanation makes perfect sense.
I think my logic was OK based on the information I had at hand.
I'd like to find a VB or C# function to show this process.
Learned something ne. Thank you again.

Loading...