If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Notes:Shin Megami Tensei (SNES)

From The Cutting Room Floor
Jump to navigation Jump to search

This page contains notes for the game Shin Megami Tensei (SNES).

Version Differences - 1.0 and 1.1

Bank $00

This subroutine checks flags. The upper 5 bits is an index in RAM (7E07C0-7E07DF), and the lower 3 bits are a bit index (8 possibilities)

Version 1.1 preserves the contents of the X register, necessary because of the changes made in bank $01.

v1.0                                                                                                v1.1
                                                                                                    $00/BD92 DA          PHX
$00/BD92 08          PHP                                                                            $00/BD93 08          PHP
$00/BD93 E2 30       SEP #$30                                                                       $00/BD94 E2 30       SEP #$30
$00/BD95 A8          TAY                                                                            $00/BD96 A8          TAY 
$00/BD96 4A          LSR A                                                                          $00/BD97 4A          LSR A
$00/BD97 4A          LSR A                                                                          $00/BD98 4A          LSR A
$00/BD98 4A          LSR A                                                                          $00/BD99 4A          LSR A
$00/BD99 AA          TAX                                                                            $00/BD9A AA          TAX
$00/BD9A 98          TYA                                                                            $00/BD9B 98          TYA
$00/BD9B 29 07       AND #$07                                                                       $00/BD9C 29 07       AND #$07
$00/BD9D A8          TAY                                                                            $00/BD9E A8          TAY
$00/BD9E A9 00       LDA #$00                                                                       $00/BD9F A9 00       LDA #$00
$00/BDA0 38          SEC                                                                            $00/BDA1 38          SEC
$00/BDA1 2A          ROL A                                                                          $00/BDA2 2A          ROL A
$00/BDA2 88          DEY                                                                            $00/BDA3 88          DEY
$00/BDA3 10 FC       BPL $FC    [$BDA1]                                                             $00/BDA4 10 FC       BPL $FC    [$BDA2]
$00/BDA5 3D C0 07    AND $07C0,x                                                                    $00/BDA6 3D C0 07    AND $07C0,x
$00/BDA8 F0 03       BEQ $03    [$BDAD]                                                             $00/BDA9 F0 04       BEQ $04    [$BDAF]
$00/BDAA 28          PLP                                                                            $00/BDAB 28          PLP
                                                                                                    $00/BDAC FA          PLX
$00/BDAB 18          CLC                                                                            $00/BDAD 18          CLC
$00/BDAC 6B          RTL                                                                            $00/BDAE 6B          RTL
$00/BDAD 28          PLP                                                                            $00/BDAF 28          PLP
                                                                                                    $00/BDB0 FA          PLX
$00/BDAE 38          SEC                                                                            $00/BDB1 38          SEC
$00/BDAF 6B          RTL                                                                            $00/BDB2 6B          RTL

Bank $01

Version 1.1 checks flag $FB first.

v1.0                                                                                                v1.1
                                                                                                    $01/94B5 A9 FB 00    LDA #$00FB
                                                                                                    $01/94B8 22 92 BD 00 JSL $00BD92[$00:BD92]
                                                                                                    $01/94BC 90 0D       BCC $0D    [$94CB]
$01/94B5 BD 1C 10    LDA $101C,x                                                                    $01/94BE BD 1C 10    LDA $101C,x
$01/94B8 C9 70 00    CMP #$0070                                                                     $01/94C1 C9 70 00    CMP #$0070
$01/94BB 90 25       BCC $25    [$94E2]                                                             $01/94C4 90 25       BCC $25    [$94EB]
$01/94BD C9 91 00    CMP #$0091                                                                     $01/94C6 C9 91 00    CMP #$0091
$01/94C0 B0 01       BCS $01    [$94C3]                                                             $01/94C9 B0 01       BCS $01    [$94CC]
$01/94C2 60          RTS                                                                            $01/94CB 60          RTS

Version 1.1 checks flag $FB first.

v1.0                                                                                                v1.1
                                                                                                    $01/96D2 A9 FB 00    LDA #$00FB
                                                                                                    $01/96D5 22 92 BD 00 JSL $00BD92[$00:BD92]
                                                                                                    $01/96D9 90 26       BCC $26    [$9701]
$01/96C9 AD 1C 10    LDA $101C  [$00:101C]                                                          $01/96DB AD 1C 10    LDA $101C  [$00:101C]
$01/96CC C9 FF 00    CMP #$00FF                                                                     $01/96DE C9 FF 00    CMP #$00FF
$01/96CF B0 1E       BCS $1E    [$96EF]                                                             $01/96E1 B0 1E       BCS $1E    [$9701]
$01/96D1 A9 9A 19    LDA #$199A                                                                     $01/96E3 A9 9A 19    LDA #$199A
$01/96D4 BC 02 10    LDY $1002,x                                                                    $01/96E6 BC 02 10    LDY $1002,x
$01/96D7 F0 03       BEQ $03    [$96DC]                                                             $01/96E9 F0 03       BEQ $03    [$96EE]
$01/96D9 A9 68 66    LDA #$6668                                                                     $01/96EB A9 68 66    LDA #$6668
$01/96DC 18          CLC                                                                            $01/96EE 18          CLC
$01/96DD 6D 26 07    ADC $0726  [$00:0726]                                                          $01/96EF 6D 26 07    ADC $0726  [$00:0726]
$01/96E0 8D 26 07    STA $0726  [$00:0726]                                                          $01/96F2 8D 26 07    STA $0726  [$00:0726]
$01/96E3 AD 1C 10    LDA $101C  [$00:101C]                                                          $01/96F5 AD 1C 10    LDA $101C  [$00:101C]
$01/96E6 69 00 00    ADC #$0000                                                                     $01/96F8 69 00 00    ADC #$0000
$01/96E9 8D 1C 10    STA $101C  [$00:101C]                                                          $01/96FB 8D 1C 10    STA $101C  [$00:101C]
$01/96EC 8D 7C 10    STA $107C  [$00:107C]                                                          $01/96FE 8D 7C 10    STA $107C  [$00:107C]
$01/96EF 60          RTS                                                                            $01/9701 60          RTS

Bank $03

  • Five subroutines had hardcoded pointers to bank $08 changed (ie, there's unknown changes bank $08 that caused the data to shift)
address    v1.0       v1.1
0381A3     A99BFF     A9CAFF
0381E7     A99BFF     A9CAFF
03B3C4     A9C1FF     A9F0FF
03E1BD     A989FF     A9B8FF
03E4D3     A989FF     A9B8FF

Here's an example of the third address listed above that executes when loading a shop (version 1.0). It appears to be loading decision text strings from $08FFC1.

...
$03/B3C2 C2 20       REP #$20
$03/B3C4 A9 C1 FF    LDA #$FFC1
$03/B3C7 8D C3 00    STA $00C3  [$03:00C3]
$03/B3CA E2 20       SEP #$20
$03/B3CC A9 08       LDA #$08
$03/B3CE 8D C5 00    STA $00C5  [$03:00C5]
...
  • Version 1.1 adds a check for zero when comparing table value to RAM address 7E0C0B.
v1.0                                                                                                v1.1
$03/EDFD C2 30       REP #$30                                                                       $03/EDFD C2 30       REP #$30
$03/EDFF A2 02 00    LDX #$0002                                                                     $03/EDFF A2 02 00    LDX #$0002
$03/EE02 A0 00 00    LDY #$0000                                                                     $03/EE02 A0 00 00    LDY #$0000
$03/EE05 BD 48 ED    LDA $ED48,x                                                                    $03/EE05 BD 48 ED    LDA $ED48,x
$03/EE08 CD 0B 0C    CMP $0C0B                                                                      $03/EE08 CD 0B 0C    CMP $0C0B
                                                                                                    $03/EE0B F0 02       BEQ $02    [$EE0F]
$03/EE0B B0 05       BCS $05    [$EE12]                                                             $03/EE0D B0 05       BCS $05    [$EE14]
$03/EE0D E8          INX                                                                            $03/EE0F E8          INX
$03/EE0E E8          INX                                                                            $03/EE10 E8          INX
$03/EE0F C8          INY                                                                            $03/EE11 C8          INY
$03/EE10 80 F3       BRA $F3    [$EE05]                                                             $03/EE12 80 F1       BRA $F1    [$EE05]
$03/EE12 8C 0D 0C    STY $0C0D  [$00:0C0D]                                                          $03/EE14 8C 0D 0C    STY $0C0D  [$00:0C0D]
$03/EE15 60          RTS                                                                            $03/EE17 60          RTS