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
(→‎References: hid archive URL for Labiak)
(→‎References: hid archive URL for E&L)
Line 35: Line 35:
=== References ===
=== References ===
# [[Labiak]], William.  Appendix C, [https://archive.org/details/Programming_the_65816/page/n367 page 357]. conversion table
# [[Labiak]], William.  Appendix C, [https://archive.org/details/Programming_the_65816/page/n367 page 357]. conversion table
# [[Eyes & Lichty]] page 262, https://archive.org/details/0893037893ProgrammingThe65816/page/262
# [[Eyes & Lichty]], [https://archive.org/details/0893037893ProgrammingThe65816/page/262 page 262]
# lbid, page 44: https://archive.org/details/0893037893ProgrammingThe65816/page/44
# lbid, [https://archive.org/details/0893037893ProgrammingThe65816/page/44 page 44]
# Pickens, John.  NMOS 6502 Opcodes.  http://www.6502.org/tutorials/6502opcodes.html#DFLAG
# Pickens, John.  NMOS 6502 Opcodes.  http://www.6502.org/tutorials/6502opcodes.html#DFLAG



Revision as of 22:50, 8 August 2024

Decimal mode is one of the SNES CPU's processor flags. It is bit 3 of the status register. 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] BRK clears it as well.

The negative, overflow, and zero flags are invalid in decimal mode.[3]

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

References

  1. Labiak, William. Appendix C, page 357. conversion table
  2. Eyes & Lichty, page 262
  3. lbid, page 44
  4. Pickens, John. NMOS 6502 Opcodes. http://www.6502.org/tutorials/6502opcodes.html#DFLAG