Skip to main content

Notes:Shin Megami Tensei (SNES)









Please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!




Notes:Shin Megami Tensei (SNES)



From The Cutting Room Floor


Revision as of 23:52, 30 January 2017 by JLukas (Talk | contribs) (→‎Bank $03: updates)


(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)



Jump to: navigation, search


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




Contents




  • 1 Version Differences - 1.0 and 1.1


    • 1.1 Bank $00


    • 1.2 Bank $01


    • 1.3 Bank $03






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








Retrieved from "https://tcrf.net/index.php?title=Notes:Shin_Megami_Tensei_(SNES)&oldid=431606"





Navigation menu
























if(window.jQuery)jQuery.ready();if(window.mw){
mw.loader.state({"site":"loading","user":"ready","user.groups":"ready"});
}if(window.mw){
mw.loader.load(["mediawiki.toc","mediawiki.action.view.postEdit","mediawiki.user","mediawiki.hidpi","mediawiki.page.ready","mediawiki.searchSuggest","ext.uls.pt"],null,true);
}if(window.mw){
document.write("u003Cscript src="https://tcrf.net/load.php?debug=falseu0026amp;lang=enu0026amp;modules=siteu0026amp;only=scriptsu0026amp;skin=vectoru0026amp;*"u003Eu003C/scriptu003E");
}
var pkBaseURL = (("https:" == document.location.protocol) ? "https://stats.tcrf.net/" : "http://stats.tcrf.net/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));

try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 2);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}


if(window.mw){
mw.config.set({"wgBackendResponseTime":221});
}

Popular posts from this blog

Mario Kart Wii

What does “Dominus providebit” mean?

Antonio Litta Visconti Arese