We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS
DAS (SPC700): Difference between revisions
From SnesLab
(→See Also: already have BCD in body) |
(which column correcting) |
||
Line 36: | Line 36: | ||
'''DAS''' (Decimal Adjust for Subtraction) is an [[SPC700]] instruction that corrects a [[BCD]] difference: | '''DAS''' (Decimal Adjust for Subtraction) is an [[SPC700]] instruction that corrects a [[BCD]] difference: | ||
# If either the [[carry flag]] is clear or the accumulator exceeds 0x99, subtract 0x60 from the accumulator and clear the carry flag. | # If either the [[carry flag]] is clear or the accumulator exceeds 0x99, subtract 0x60 from the accumulator and clear the carry flag. This corrects the tens column. | ||
# Then, if either the [[half-carry flag]] is clear or the low nibble of the accumulator exceeds 0x09, subtract 0x06 from the accumulator. | # Then, if either the [[half-carry flag]] is clear or the low nibble of the accumulator exceeds 0x09, subtract 0x06 from the accumulator. This corrects the ones column. | ||
The SPC700 has no [[decimal mode]]. | After DAS, the value in the accumulator will be encoded in binary/hexadecimal. The SPC700 has no [[decimal mode]], so that is why this command is important when working with decimal data. | ||
==== Syntax ==== | ==== Syntax ==== |
Revision as of 19:14, 15 August 2024
Basic Info | |||||||
---|---|---|---|---|---|---|---|
Addressing Mode | Opcode | Length | Speed | ||||
Accumulator | BE | 1 byte | 3 cycles |
Flags Affected | |||||||
---|---|---|---|---|---|---|---|
N | V | P | B | H | I | Z | C |
N | . | . | . | . | . | Z | C |
DAS (Decimal Adjust for Subtraction) is an SPC700 instruction that corrects a BCD difference:
- If either the carry flag is clear or the accumulator exceeds 0x99, subtract 0x60 from the accumulator and clear the carry flag. This corrects the tens column.
- Then, if either the half-carry flag is clear or the low nibble of the accumulator exceeds 0x09, subtract 0x06 from the accumulator. This corrects the ones column.
After DAS, the value in the accumulator will be encoded in binary/hexadecimal. The SPC700 has no decimal mode, so that is why this command is important when working with decimal data.
Syntax
DAS DAS A
See Also
External Links
- Official Super Nintendo development manual on DAS: Table C-14 in Appendix C-8 of Book I
- page 3-8-2 of Book I, lbid
- ares source code, SPC700::instructionDecimalAdjustSub
- anomie: https://github.com/yupferris/TasmShiz/blob/8fabc9764c33a7ae2520a76d80ed7220bb939f12/spc700.txt#L410