We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS

Decimal Mode: Difference between revisions

From SnesLab
Jump to: navigation, search
(Recovered from SMWiki, improvements are welcome.)
 
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
Decimal mode is one of the [[SNES]] CPU's processor flags. Toggling it on/off will only affect the instructions '''ADC''' and '''SBC'''. To toggle decimal mode on/off, use '''SED''' (Set decimal mode) and '''CLD''' (clear decimal mode)
Decimal mode is one of the [[SNES]] CPU's processor flags. Toggling it on/off will only affect the instructions '''[[ADC]]''' and '''[[SBC]]'''. To toggle decimal mode on/off, use '''[[SED]]''' (Set decimal mode) and '''[[CLD]]''' (clear decimal mode)
 
On the [[65c816]], it is cleared on reset.<sup>[2]</sup>


== Processes ==
== Processes ==
Line 22: Line 24:
</pre>
</pre>


The decimal mode has been documented more thoroughly in Ersanio's ASM tutorial V2.1.
The decimal mode has been documented more thoroughly in [https://www.smwcentral.net/?p=section&a=details&id=4750&r=0 Ersanio's ASM tutorial V2.1].
 
=== See Also ===
* [[DAA]]
* [[DAS]]
* [[Half-carry Flag]]
 
=== Reference ===
# Labiak, William.  Appendix C, page 357 conversion table: https://archive.org/details/Programming_the_65816/page/n367
# [[Eyes & Lichty]] page 262, https://archive.org/details/0893037893ProgrammingThe65816/page/n288
 
[[Category:ASM]]
[[Category:Flags]]

Latest revision as of 12:49, 15 December 2023

Decimal mode is one of the SNES CPU's processor flags. Toggling it on/off will only affect the instructions ADC and SBC. To toggle decimal mode on/off, use SED (Set decimal mode) and CLD (clear decimal mode)

On the 65c816, it is cleared on reset.[2]

Processes

Let's just assume A is 8-bit and holds the value #$00. When one is doing ADC #$0C for example, the following steps will take place.

  • Take the parameter after ADC
  • Convert it to Decimal
  • Add the conversion to A (execute ADC)
  • If A turns out to have a hexadecimal number after the addition, convert it it to a decimal number again.

In this case, #$0C gets converted to 12. Since $0C equals to 12, doing ADC #$12 would give you the same result.

Same story with SBC, except SBC subtracts of course.

Example usage of ADC:

 LDA #$09  ;A = $09
 CLC       ;Clear carry flag
 ADC #$02  ;A = $11

The decimal mode has been documented more thoroughly in Ersanio's ASM tutorial V2.1.

See Also

Reference

  1. Labiak, William. Appendix C, page 357 conversion table: https://archive.org/details/Programming_the_65816/page/n367
  2. Eyes & Lichty page 262, https://archive.org/details/0893037893ProgrammingThe65816/page/n288