Banner
Views: 236,390,178
Time: 2013-05-23 07:07:13 AM
8 users online: o 1UPdudes, o Deeke, Lui37, metalgearhunter, Pokeymeister80, Skilllux, smkdan, WeegeeBen - Guests: 13 - Bots: 13Users: 22,868 (1,282 active)
Latest: LuckyDearly
Tip: Take advantage of easy to implement ASM hacks that can be found in the ROM map.
Posts by tehaxor69
tehaxor69's Profile - Posts by tehaxor69
Pages: « 1 2 3 4 5 6 ... 15 16 »
@Yoshis Fan:

I know why the FX-sprites are disabled, its cause of the FX-memory allocation flag.
SNES:0x037ECC - FX-Slot 1 usage: 0x00 = Free, 0xFF = Full
SNES:0x037ECD - FX-Slot 2 usage: 0x00 = Free, 0xFF = Full
SNES:0x037ECE - FX-Slot 3 usage: 0x00 = Free, 0xFF = Full
SNES:0x037ECF - FX-Slot 4 usage: 0x00 = Free, 0xFF = Full

Each sprites routine will check, use, and free it self from here.
If a sprite requires 1 FX-slot, and non are available, it will not show up, if four are required, the same thing, the only exception to this flag is Super Mario who uses a 5th FX-slot, strange thing is the snowballs, and flowers will work but not the piranha plants.

To get the snowball to claim half its normal allocation
change ROM:0x01B0F1 from 0xFFFF to 0x00FF

I got the other half of the snow ball to mirror the first half

Now I need to limit the FX-rendering from 4 to 2 slots, then I'll be done.
Sorry, I was referring to the usage of the other sprites with Super Mario
Super Mario + Snowball = 5 FX slots, works.
Super Mario + Flower = 2~5 FX slots, works.
Super Mario + Piranha Plant = 2~5 slots, does not work.

The flower + snowball, works but(setting the 4 FX flags to 0x00), would cause the objects to glitch and flicker.
@Yoshis Fan:

I just disassembled the code for the sprites 0x1BA-0x1C9.
It does claim FX-memory, Slots 1-2.

Code
$03/D55B AD 60 79 LDA $7960 [$03:7960] A:0002 X:0002 Y:0006 P:envmxdizc $03/D55E 4A LSR A A:0000 X:0002 Y:0006 P:envmxdiZc $03/D55F B0 1D BCS $1D [$D57E] A:0000 X:0002 Y:0006 P:envmxdiZc $03/D561 B9 04 0C LDA $0C04,y[$03:0C0A] A:0000 X:0002 Y:0006 P:envmxdiZc $03/D564 38 SEC A:0001 X:0002 Y:0006 P:envmxdizc $03/D565 E9 01 00 SBC #$0001 A:0001 X:0002 Y:0006 P:envmxdizC $03/D568 CD 36 01 CMP $0136 [$03:0136] A:0000 X:0002 Y:0006 P:envmxdiZC $03/D56B D0 03 BNE $03 [$D570] A:0000 X:0002 Y:0006 P:eNvmxdizc $03/D570 8D 36 01 STA $0136 [$03:0136] A:0000 X:0002 Y:0006 P:eNvmxdizc $03/D573 22 E4 D5 03 JSL $03D5E4[$03:D5E4] A:0000 X:0002 Y:0006 P:eNvmxdizc JSL Label_1 $03/D577 9C 14 0C STZ $0C14 [$03:0C14] A:FFFF X:0002 Y:0006 P:envmxdizc $03/D57A 9C 16 0C STZ $0C16 [$03:0C16] A:FFFF X:0002 Y:0006 P:envmxdizc $03/D57D 60 RTS A:FFFF X:0002 Y:0006 P:envmxdizc Label_1 $03/D5E4 DA PHX A:0000 X:0002 Y:0006 P:eNvmxdizc $03/D5E5 5A PHY A:0000 X:0002 Y:0006 P:eNvmxdizc $03/D5E6 08 PHP A:0000 X:0002 Y:0006 P:eNvmxdizc $03/D5E7 C2 20 REP #$20 A:0000 X:0002 Y:0006 P:eNvmxdizc $03/D5E9 E2 10 SEP #$10 A:0000 X:0002 Y:0006 P:eNvmxdizc $03/D5EB A2 5C LDX #$5C A:0000 X:0002 Y:0006 P:eNvmXdizc $03/D5ED BD 00 6F LDA $6F00,x[$03:6F5C] A:0000 X:005C Y:0006 P:envmXdizc $03/D5F0 F0 0D BEQ $0D [$D5FF] A:0010 X:005C Y:0006 P:envmXdizc $03/D5F2 22 0D AF 03 JSL $03AF0D[$03:AF0D] A:0010 X:005C Y:0006 P:envmXdizc JSL Label_2 $03/D5F6 BD 02 74 LDA $7402,x[$03:745E] A:0010 X:005C Y:00FF P:eNvmXdizc $03/D5F9 29 FF 00 AND #$00FF A:0000 X:005C Y:00FF P:envmXdiZc $03/D5FC 9D 02 74 STA $7402,x[$03:745E] A:0000 X:005C Y:00FF P:envmXdiZc $03/D5FF CA DEX A:0000 X:005C Y:00FF P:envmXdiZc $03/D600 CA DEX A:0000 X:005B Y:00FF P:envmXdizc $03/D601 CA DEX A:0000 X:005A Y:00FF P:envmXdizc $03/D602 CA DEX A:0000 X:0059 Y:00FF P:envmXdizc $03/D603 10 E8 BPL $E8 [$D5ED] A:0000 X:0058 Y:00FF P:envmXdizc $03/D605 A9 FF FF LDA #$FFFF A:000D X:00FC Y:00FF P:eNvmXdizc // $03/D608 8D CC 7E STA $7ECC [$03:7ECC] A:FFFF X:00FC Y:00FF P:eNvmXdizc //This is what kills our FX slots 1-2, but why use them? $03/D60B 28 PLP A:FFFF X:00FC Y:00FF P:eNvmXdizc $03/D60C 7A PLY A:FFFF X:00FC Y:00FF P:eNvmxdizc $03/D60D FA PLX A:FFFF X:00FC Y:0006 P:envmxdizc $03/D60E 6B RTL A:FFFF X:0002 Y:0006 P:envmxdizc Label_2 $03/AF0D BC 22 77 LDY $7722,x[$03:777E] A:0010 X:005C Y:0006 P:envmXdizc $03/AF10 30 0C BMI $0C [$AF1E] A:0010 X:005C Y:00FF P:eNvmXdizc $03/AF1E 6B RTL A:0010 X:005C Y:00FF P:eNvmXdizc
The FX slots would only be effected while the tile/palette changers are on the same screen as the doors, once scrolled past they would deallocate.

I think they allocate the FX this way because if you have a FX sprite on screen, like a snowball or door, then run across the tile/palette change while the sprite is still visible, it will glitch, because the tiles won't point to the FX render area anymore, untill the initialization code runs again. All these sprites have a initialization run, but no contiguous run loop like the sprites do from table 1 have.

It does seem that there are at least 5 FX slots, I'll disassemble the doors later to see how they work with FX allocations.
Extending Yoshi's Island



When a FX ROM is loaded, only half of the address space can normally be used, SuperFX-ROM banks are mapped like this:

0x800000-0xBFFFFF SNES MAP
0xC00000-0xFFFFFF SFX MAP

To extend your Yoshi's Island ROM change the ROM type from 0x15 to either 0x16 or 0x17. ROM offset 0x81D6
Change your ROM size to either 4MB or 8MB. ROM offset 0x81D7
Add padding to match ROM size.
Then fix the checksum.


There is no way to use the FX-Chip to swap ROM banks,
FX instruction 0xDFA3 sets the ROM bank the FX-Chip uses, but the max bank number is 0x7F.


However I have programed 2 modified FX-Chips for SNES9X, one with 0x16 and the other 0x17 ROM type. -Will require a compatible SNES emulator, I will provide them.
The 0x16 is limited to 3MB~(ROM+1MB), but only requires that you change where the pointers point in your ROM.
The 0x17 can use up to 8MB~(ROM+6MB), requires that you write your own code to swap the ROM banks.

0x17 chip info:
The 0x17 will swap ROM banks 0-7 mapped to the 0xA00000-0xBFFFFF range.
You will need to write your bank number to the 0xA00000-0xBFFFFF range to swap, (BANK# = VALUE&0x07),
and make sure you do this while the PC is not in the 0xA00000-0xBFFFFF.

I have more detailed docs on the mappings here:
0x16 map
0x17 map


ZSNES is not supported yet, because I have not been able to obtain a working source code that can boot a Super-FX ROM.



SNES9x Modifications-Changes the 0x15 Rom type

MAC OSX:
In the "memmap.cpp"

Code
Remove these lines of code: memmove(&ROM[0x200000 + c * 0x10000], &ROM[c * 0x8000], 0x8000); map_hirom_offset(0xc0, 0xff, 0x0000, 0xffff, CalculatedSize, 0); Add these codes before the bank rearrangement uint8 *memory_backup = (uint8 *)malloc(0x800000); for (int j = 0; j < 0x800000; j++) { memory_backup[j]=ROM[j]; } Add these codes after the bank rearrangement for (int j = 0; j < 32; j++) { for (int i = 0x000000; i < 0x000000 + 0x8000; i++) { ROM[i + j * 0x010000 + 0x200000] = memory_backup[i + j * 0x008000 + 0x200000]; } }


Windows:
Currently overhauling my DEV stuff right now.


Downloads: Currently just the 0x16 FX-Chip.
SNES9X-

MAC:
Snow leopard
OSX 10.5.1
PowerPC

Windows:
A work in progress.

The 0x15 SuperFX type is not effected, and you will notice the emulator reports EX Super FX as ROM type 0x16.


To test this out, move some data to one of the locations in the memory maps provided, and change its pointer so it points to it.
Now you can create extended graphics, palettes, levels, and game code.


I know that this whole method limits the emulator compatibility with the Yoshi's Island ROM,
but am modifying SNES9X, ZSNES, for both Windows, and MAC. Other ROM compatibility will not be effected, 0x15 ROM type SuperFX will be normal.

Allot of ASM hacks now need to be done.
Yoshis Fan:

Sorry for the late reply, I was on a breakthrough with the Super-FX-ROM mapping.

I'm still working on those objects.
@Yoshis Fan

For 0x16 yes, 0x17 no.

The 0x16 version maps an extra 1MB to the unused Super-FX maps.

The 0x17 leaves the Super-FX map intact, but allows you two swap the 2MB range 0xA00000-0xBFFFFF with one of the 8 1MB ROM slots.

That 32KB stride that the Super-FX-Chip uses after every 32KB, was really hard to get around, but no longer a problem.

This mod should also be compatible with other SuperFX-ROMs.
Both require the modified emulator.

The 0xA00000-0xBFFFFF is the SNES memory map, writing a value to this ROM range will swap the ROM bank in that area.


Here is a simplified explanation.

BANK = The value written to SNES address 0xA00000-0xBFFFFF, it will &0x07 the value, so range is always 0-7.
SNES_ADDRESS = The SNES offset.
ROM_ADDRESS = The data in ROM to switch with.

BANK:--SNES_ADDRESS:---------ROM_ADDRESS

0x00 : 0xA000000-0xBFFFFF <- 0x000000-0x0FFFFF
0x01 : 0xA000000-0xBFFFFF <- 0x100000-0x1FFFFF
0x02 : 0xA000000-0xBFFFFF <- 0x200000-0x2FFFFF
0x03 : 0xA000000-0xBFFFFF <- 0x300000-0x3FFFFF
0x04 : 0xA000000-0xBFFFFF <- 0x400000-0x4FFFFF
0x05 : 0xA000000-0xBFFFFF <- 0x500000-0x5FFFFF
0x06 : 0xA000000-0xBFFFFF <- 0x600000-0x6FFFFF
0x07 : 0xA000000-0xBFFFFF <- 0x700000-0x7FFFFF

The value of 0x01 would map the same way the ROM does in its normal mode.

I know its confusing cause 1MB ROM fills 2MB of SNES mapping.

It takes 32KB from ROM copies it twice to SNES mapping.
Once to the SNES offset and again to the SNES offset + 32KB.
Then repeats, increasing the ROM offset 32KB, and the SNES offset 64KB.
@Yoshis Fan

I believe this is what your looking for, effects both direction, and ski mode now.

Code
header lorom org $01B151 JSR hack LDA $608C CLC ADC.w table1,x STA $608C CLC ADC.w table2,x STA $6094 LDA $6090 SEC SBC #$0094 STA $609C LDA.w table3,x STA $60B4 JSL $04DC28 REP #$20 LDA #$0006 STA $60C0 org $108D8F BRA $0F ;must be in free space in the bank $01 ; org $01FFCA hack: INC $60C0 LDA $021A TAY AND #$0007 ASL A TAX TYA LSR A LSR A LSR A TAY LDA $E4E2,x LDX #$00 PHA PHX AND bitTable,y BEQ + INX INX + STX $60C4 PLX PLA ;Set our mode AND bitTable_2,y BEQ ++ LDA $000E ++ STA $7000AE RTS table1: dw $FF70,$009E table2: dw $0018,$FEE8 table3: dw $0280,$FD80 bitTable: db %00001000 ; 00 01 02 03 04 05 06 07 db %00000000 ; 08 09 0A 0B 0C 0D 0E 0F db %00100000 ; 10 11 12 13 14 15 16 17 db %00000000 ; 18 19 1A 1B 1C 1D 1E 1F db %00000000 ; 20 21 22 23 24 25 26 27 db %00000000 ; 28 29 2A 2B 2C 2D 2E 2F db %00000010 ; 30 31 32 33 34 35 36 37 db %00000000 ; 38 39 3A 3B 3C 3D 3E 3F db %00000000 ; 40 41 42 43 44 45 46 47 bitTable_2://Not sure whats wanted here. db %00000000 ; 00 01 02 03 04 05 06 07 db %00000000 ; 08 09 0A 0B 0C 0D 0E 0F db %00000000 ; 10 11 12 13 14 15 16 17 db %00000000 ; 18 19 1A 1B 1C 1D 1E 1F db %00000000 ; 20 21 22 23 24 25 26 27 db %00000000 ; 28 29 2A 2B 2C 2D 2E 2F db %00000000 ; 30 31 32 33 34 35 36 37 db %00000000 ; 38 39 3A 3B 3C 3D 3E 3F db %00000000 ; 40 41 42 43 44 45 46 47
Last edited on 2010-12-04 05:50:15 PM by tehaxor69.
I'm now releasing the PC version of the modified version of SNES9X 1.43.

I have decided to not use the 0x16-0x17 ROM types, and instead use a 0x18.
It is similar to the mapping of the 0x17, but now supports a external file.

You can swap 4 512KB banks out of SNES mapping-
SNES addresses:MBCs
0x808000-0x808FFF BANK 0
0x908000-0x908FFF BANK 1
0xA08000-0xA08FFF BANK 2
0xB08000-0xB08FFF BANK 3

Writing a value to these addresses will swap out either one of the 16 512KB slots in ROM, or one of the 4096 512KB slots in the external file.

To swap, just write 0x00-0x15 to one of the MBCs for a ROM slot or 0x16-0xFFF for a external slot.

The max ROM size is 8MB, the max external file size is 2GB.

You will need to use the STA instruction to access banks 0x100-0xFFF, STX and STY work fine for 0x00-0xFF.

Example:
Code
;Sets the BANKS to the normal ROM mapping- LDA $0000 STA $808000 LDA $0001 STA $908000 LDA $0002 STA $A08000 LDA $0003 STA $B08000


-Change your ROM type from 0x15 to 0x18.
-Change your ROM size from 2MB to 8MB.
-Add 6MB of padding to your ROM.
-The external file should be a multiple of 512KB.
-The external file name must have the same name as the ROM minus the ".*" and use ".bin" or ".iso",
so if your ROM name is "Super Mario World 2 - Yoshi's Island.smc" it would need to be
"Super Mario World 2 - Yoshi's Island.bin" or "Super Mario World 2 - Yoshi's Island.iso"


The ISO type was going to simulate a disk drive, but has not be implemented yet, so it works just like the .bin file right now.

Keep in mind that BANK 0 contains the interrupt vectors, so its not recommended to use it as a extended data bank.

You could have a whole sprite/tile/palette/level/code modification for each level, with out effecting how other levels function.


SNES9X windows version: Tested on Windows XP and Windows Vista

SNES9X WIN

0x18 Map


Here is some detailed info on the Super-FX-chip:I got this from ZSNES
Super-FX instruction set summary
Last edited on 2010-12-07 02:52:46 PM by tehaxor69.
@Yoshis Fan

I have tested this code, no crashes, will jump from the right or left when wanted, and will ski now.
Code
header lorom org $01B151 JSR hack LDA $608C CLC ADC.w table1,x STA $608C CLC ADC.w table2,x STA $6094 LDA $6090 SEC SBC #$0094 STA $609C LDA.w table3,x STA $60B4 JSL $04DC28 REP #$20 LDA #$0006 STA $60C0 org $108D8F BRA $0F ;must be in free space in the bank $01 ; org $01FFCA hack: INC $60C0 LDA $021A TAY AND #$0007 ASL A TAX TYA LSR A LSR A LSR A TAY LDA $E4E2,x LDX #$00 JML $BFFD00 hack_2: PHK PLB STX $60C4 RTS table1: dw $FF70,$009E table2: dw $0018,$FEE8 table3: dw $0280,$FD80 org $BFFD00 PHA PHK PLB ;Set our mode AND bitTable_2,y BEQ _Label_1 db $A9, $0E, $00 _Label_1: STA $7000AE PLA AND bitTable,y BEQ _Label_2 INX INX _Label_2: JML hack_2 bitTable: db %00001000 ; 00 01 02 03 04 05 06 07 db %00000000 ; 08 09 0A 0B 0C 0D 0E 0F db %00100000 ; 10 11 12 13 14 15 16 17 db %00000000 ; 18 19 1A 1B 1C 1D 1E 1F db %00000000 ; 20 21 22 23 24 25 26 27 db %00000000 ; 28 29 2A 2B 2C 2D 2E 2F db %00000010 ; 30 31 32 33 34 35 36 37 db %00000000 ; 38 39 3A 3B 3C 3D 3E 3F db %00000000 ; 40 41 42 43 44 45 46 47 bitTable_2: db %00000000 ; 00 01 02 03 04 05 06 07 db %00000000 ; 08 09 0A 0B 0C 0D 0E 0F db %00100000 ; 10 11 12 13 14 15 16 17 db %00000000 ; 18 19 1A 1B 1C 1D 1E 1F db %00000000 ; 20 21 22 23 24 25 26 27 db %10000000 ; 28 29 2A 2B 2C 2D 2E 2F db %00000000 ; 30 31 32 33 34 35 36 37 db %00000000 ; 38 39 3A 3B 3C 3D 3E 3F db %00000000 ; 40 41 42 43 44 45 46 47
@Yoshis Fan

Modify these addresses so they are:

ROM
019ADA = EA
019ADB = EA
019ADC = EA
019ADD = EA

or

SNES
0398DA = EA
0398DB = EA
0398DC = EA
0398DD = EA

And notice that even the red-coin sprites are really green at first.

All this code does is prevent the game from initializing the sprites all the way, it effectively seems to stop time as well.
Here is a code that will read the bits by index.

Code
CHECK_BIT LDA ICON_INDEX TAY AND A,$0007 TAX TYA LSR A LSR A LSR A TAY LDA DATA,Y AND AND_TABLE,X BEQ SKIP ;Do stuff SKIP STA $000000 DATA db %00000000 ; 00 01 02 03 04 05 06 07 db %00000000 ; 08 09 0A 0B 0C 0D 0E 0F db %00000000 ; 10 11 12 13 14 15 16 17 db %00000000 ; 18 19 1A 1B 1C 1D 1E 1F db %00000000 ; 20 21 22 23 24 25 26 27 db %00000000 ; 28 29 2A 2B 2C 2D 2E 2F db %00000000 ; 30 31 32 33 34 35 36 37 db %00000000 ; 38 39 3A 3B 3C 3D 3E 3F db %00000000 ; 40 41 42 43 44 45 46 47 AND_TABLE db %10000000 db %01000000 db %00100000 db %00010000 db %00001000 db %00000100 db %00000010 db %00000001
Im 75% done with writing a stand alone FX-Disassembler, for all 4 FX-Chip types, FX-Mario, FX-1, FX-Argonaut, and the FX-2, each very a little in protocols.


Yes it looks like the disassembler for VBA, but I like the layout.




I used this disassembler to help find the information in this post.


The following address was thought to be a FX initiation


Originally posted by The Frosty Heir - in YI.txt
$7EDE44 = SuperFX initiation (thanks smkdan)



This sub routine actually tells the Super FX processor where to jump(used 778 times), and execute data until STOP is hit. The registers X and A control what address to jump to, X=Bank, A=Short address. Writing a value to 0x01303A jumps the FX-processor

Code
$00/80B5 22 44 DE 7E JSL $7EDE44[$7E:DE44] A:A97B X:0008 Y:0001 P:eNvmXdizC In this case jump FX to 0x08A97B


$08/A97B - This code sets the FX RAM BANK

The first FX routine executed is at 0x08A97B
Code
0x60 0x3E 0xDF 0x00 SUB RS,RS,R0 //RS - R0 -> RS ALT 2 //Alt mode 2 RAMB //RS -> FX-Ram bank pointer STOP


I have found 778 FX routine jumps in Yoshi's Island - 124 different subroutines + the 10 STY which I have not yet looked at.

Edit:Here is a new link, all addresses in the other file ended in 00 for some reason
Here is a list of where the FX-Routines are.


I also took some time to check out other FX-Roms -Not related to YI, but to FX subroutine jumps.

Still need to trace where the FX code is for each one

Star Fox 1.0 (J)
15 Total FX jumps
0x10A5E:STA 0x303A
0x10A8E:STA 0x303A
0x10AB6:STA 0x303A
0x10AE6:STA 0x303A
0x10B71:STA 0x303A
0x10BA1:STA 0x303A
0x10BCE:STA 0x303A
0x10BFE:STA 0x303A
0x11F5E:STA 0x303A
0x11F6E:STA 0x303A
0x11F96:STA 0x303A
0x11FAB:STA 0x303A
0xFDECC:STA 0x303A
0xFDEEE:STA 0x303A
0xFDEFA:STA 0x303A

Star Fox 1.0 (U)
16 Total FX jumps
0xB9529:STX 0x303A
0x10A5E:STA 0x303A
0x10A8E:STA 0x303A
0x10AB6:STA 0x303A
0x10AE6:STA 0x303A
0x10B71:STA 0x303A
0x10BA1:STA 0x303A
0x10BCE:STA 0x303A
0x10BFE:STA 0x303A
0x11F5E:STA 0x303A
0x11F6E:STA 0x303A
0x11F96:STA 0x303A
0x11FAB:STA 0x303A
0xFDECC:STA 0x303A
0xFDEEE:STA 0x303A
0xFDEFA:STA 0x303A

Star Fox 1.2 (U)
16 Total FX jumps
0xB930D:STX 0x303A
0x10A64:STA 0x303A
0x10A94:STA 0x303A
0x10ABC:STA 0x303A
0x10AEC:STA 0x303A
0x10B77:STA 0x303A
0x10BA7:STA 0x303A
0x10BD4:STA 0x303A
0x10C04:STA 0x303A
0x11F64:STA 0x303A
0x11F74:STA 0x303A
0x11F9C:STA 0x303A
0x11FB1:STA 0x303A
0x100042:STA 0x303A
0x100064:STA 0x303A
0x100070:STA 0x303A

Star Fox 2 Beta
The TD and H1 versions only have 1
0x2578B:STA 0x303A

Star Fox 2 Beta - Unmodified
25 Total FX jumps
0x1018F:STA 0x303A
0x101BF:STA 0x303A
0x101FE:STA 0x303A
0x1022E:STA 0x303A
0x1026D:STA 0x303A
0x1029D:STA 0x303A
0x102BF:STA 0x303A
0x102EF:STA 0x303A
0x1032E:STA 0x303A
0x1035E:STA 0x303A
0x1039A:STA 0x303A
0x103CA:STA 0x303A
0x10408:STA 0x303A
0x10438:STA 0x303A
0x12250:STA 0x303A
0x12260:STA 0x303A
0x122A4:STA 0x303A
0x122BA:STA 0x303A
0x1230A:STA 0x303A
0x1231F:STA 0x303A
0x12342:STA 0x303A
0x12357:STA 0x303A
0x1C06B:STA 0x303A
0x1C08D:STA 0x303A
0x1C099:STA 0x303A

DOOM (E)
13 Total FX jumps
0x1C079B:STX 0x303A
0x1C07E7:STX 0x303A
0x1C0C40:STX 0x303A
0x1C0CAA:STX 0x303A
0x1C07D0:STY 0x303A
0x1C0814:STY 0x303A
0x1C0C6A:STY 0x303A
0x1C0CB0:STY 0x303A
0x1C116E:STY 0x303A
0x1C1195:STY 0x303A
0x1C030C:STA 0x303A
0x1C0337:STA 0x303A
0x1FA290:STA 0x303A

DOOM (J)
13 Total FX jumps
0x1C0987:STX 0x303A
0x1C09D3:STX 0x303A
0x1C0E2C:STX 0x303A
0x1C0E96:STX 0x303A
0x1C09BC:STY 0x303A
0x1C0A00:STY 0x303A
0x1C0E56:STY 0x303A
0x1C0E9C:STY 0x303A
0x1C135A:STY 0x303A
0x1C1381:STY 0x303A
0x1C0506:STA 0x303A
0x1C0531:STA 0x303A
0x1F8C05:STA 0x303A

DOOM (U)
13 Total FX jumps
0x1C0787:STX 0x303A
0x1C07D3:STX 0x303A
0x1C0C2C:STX 0x303A
0x1C0C96:STX 0x303A
0x1C07BC:STY 0x303A
0x1C0800:STY 0x303A
0x1C0C56:STY 0x303A
0x1C0C9C:STY 0x303A
0x1C115A:STY 0x303A
0x1C1181:STY 0x303A
0x1C0306:STA 0x303A
0x1C0331:STA 0x303A
0x1FA274:STA 0x303A

Could not trace any down in Winter Gold FX
Although my FX - Disassembler in SNES9X starts with
0x01 0x02 0xEF 0XDE 0X95 0X0B 0X1B 0X01 0X20 0X11 0X50 0X50 0XC0 0X3E
Which is at ROM:0x0050E4

Edit 2:
Here are some descriptions of the FX addresses

SNES address
0x09835F Draws Yoshi
0x09884C AI stuff
0x098084 AI stuff
0x099011 Snow ball control collisions
0x0993B3 Controls BG stuff draws and scrolls
0x0B9567 Screen scroll control ?

To make FX code changes with the SNES9X debugger, you need to save the ROM and then reload, because SNES9X debugger will not write back to the FX cache.
Last edited on 2011-01-10 03:01:05 PM by tehaxor69.
@Yoshis Fan

Here are the auto scroll tables

Scroll Table format:
There are 3 bytes per index
The first byte tells what X axis to scroll to
The second byte tells what Y axis to scroll to
The third byte tells what speed to go to
the speed value is signed so 0x01-7F left to right, 0xFF-0x80 right to left, both listed slowest to fastest
To terminate use value 0xFE or 0xFF only 1 byte required

Scroll Tables Start at SNES 0x03D6C5 ROM 0x01D8C5:
Scroll table Type A starts with offset 0x00 SNES 0x03D6C5 ROM 0x01D8C5
Scroll table Type B starts with offset 0x0D SNES 0x03D6D2 ROM 0x01D8D2
Scroll table Type C starts with offset 0x28 SNES 0x03D6ED ROM 0x01D8ED
Scroll table Type D starts with offset 0x8C SNES 0x03D751 ROM 0x01D951
Scroll table Type E starts with offset 0xAF SNES 0x03D774 ROM 0x01D974
Scroll table Type F starts with offset 0x3E SNES 0x03D703 ROM 0x01D903
Scroll table Type G starts with offset 0x90 SNES 0x03D755 ROM 0x01D955
Scroll table Type H starts with offset 0xBC SNES 0x03D781 ROM 0x01D981
Scroll table Type I starts with offset 0xF0 SNES 0x03D7B5 ROM 0x01D9B5
Scroll table Type J starts with offset 0xF7 SNES 0x03D7BC ROM 0x01D9BC
Scroll table Type K starts with offset 0x12E SNES 0x03D7F3 ROM 0x01D9F3


To get the offset of the Scroll table, use the following:
Type = Value
A = 0x11
B = 0x12
C = 0x13
D = 0x14
E = 0x15
F = 0x16
G = 0x17
H = 0x18
I = 0x19
J = 0x1A
K = 0x1B

offset = ((Type - 0x11) * 2) + SNES 0x03D6AD ROM 0x01D8AD:

SNES 0x03D6AD ROM 0x01D8AD:
00 00
0D 00
28 00
8C 00
AF 00
3E 00
90 00
BC 00
F0 00
F7 00
2E 01



I hope this diagram helps

SNES 0x03D6C5 ROM 0x01D8C5:

20 00 04 <- A
30 00 04
40 00 04
80 00 04
FF

6E 60 06 <- B
63 6A 08
5B 6C 08
3C 6C 06
1E 6C 05
16 69 05
10 65 05
0C 60 05
09 57 05
0A 4D 05 <- C
10 45 05
1A 36 05
21 2D 05
30 2B 08
40 2E 06
50 2F 05
FF

0B 30 08 <- F
13 36 08
1B 37 08
23 39 08
2A 3B 08
41 3D 08
4B 3E 08
60 4A 08
64 52 08
66 5D 08
6E 61 08
71 67 08
6E 6D 08
64 70 08
54 70 06
4B 70 04
46 68 04
41 5E 04
41 53 04
43 4D 04
48 4B 06
51 4C 08
61 51 08
70 55 08
82 58 06
8B 59 04
A0 59 08 <- D
FF

11 5C 10 <- G
18 5C 18
1F 5D 20
23 5F 1D
30 62 14
50 69 12
71 6A 12
8F 64 12
AA 5F 12
E0 5F 15
FF

10 70 05 <- E
40 70 07
70 70 09
A0 70 0B
FF

1A 50 05 <- H
20 4E 05
2C 50 05
39 4E 05
42 4A 05
4D 49 05
58 48 05
63 4B 05
6E 4E 05
7E 4A 05
8A 47 05
95 44 05
A2 43 05
AE 41 05
B9 3F 05
C0 3E 05
E0 3E 05
FF

02 20 02 <- I
02 19 03
FE

CB 5A 06 <- J
C0 5D 08
B0 5F 08
AA 5D 08
A6 5F 08
98 6C 08
88 6E 08
80 67 06
79 60 08
6B 60 08
4B 5A 08
40 5D 08
30 5F 08
2A 5D 08
26 5F 08
18 6C 08
08 6E 08
00 67 08
FE

20 6F 08 <-K
80 6F 08
D8 6F 08
FF
Last edited on 2011-01-08 08:15:00 AM by tehaxor69.
Seems that after applying the IPS the ROM is only 32KB, must be 2MB, and registers as a 0x00 ROM type instead of FX ROM type 0x15 as it should.

You either have a bad ROM or IPS or both.
@Yoshis Fan

To make Naval Piranha(small form) immune to eggs
Change
SNES 0x05A087 ROM 0x02A287 from 0xB9 to 0x6B

You could also move the position that starts the boss fight
Change 2 Bytes at
SNES 0x05A5F6 ROM 0x02A7F6, default value is 0x0300
Last edited on 2011-01-08 10:54:20 PM by tehaxor69.
The 2 Bytes at SNES 0x02E4B5 ROM 0x0166B5 is Naval Piranha's initial health

Code
$02/E4B4 A9 03 00 LDA #$0003 A:AA31 X:0030 Y:0000 P:eNVmXdizc $02/E4B7 8D 82 10 STA $1082 [$01:1082] A:0003 X:0030 Y:0000 P:eNVmXdizc


The RAM value you have works, its tells it how many hits are currently left, I'm sure if you made both the CV and PV something like 0x06 then turn the code off, it will work.
Last edited on 2011-01-09 07:01:44 AM by tehaxor69.
@Zeldara109

Untransformed Bowsers health is counted in number of hits.

RAM 0xD1062 Is the counter
SNES 0x0DCB11 ROM 0x06CD11 Is how many hits Bowser can take

Code
$0D/CB0D AC 62 10 LDY $1062 [$0D:1062] A:0056 X:0048 Y:0048 P:envmXdizC //Load hit count $0D/CB10 C0 03 CPY #$03 A:0056 X:0048 Y:0003 P:envmXdizC //Compare Max $0D/CB12 30 08 BMI $08 [$CB1C] A:0056 X:0048 Y:0002 P:eNvmXdizc



Transformed Bowsers health is counted in number of hits also.

RAM 0xD1076 Is his hit counter

Now the amount of hits he can take requires two ROM addresses to match to work right

SNES 0x0DD940 ROM 0x06DB40 Is how many hits Big Bowser can take code 1
SNES 0x0DD980 ROM 0x06DB80 Is how many hits Big Bowser can take code 2

Code
Code 1 $0D/D937 AC 76 10 LDY $1076 [$0D:1076] A:0000 X:0048 Y:0000 P:envmXdizc //Load hit count $0D/D93A BD F8 7A LDA $7AF8,x[$0D:7B40] A:0000 X:0048 Y:0007 P:envmXdizc $0D/D93D F0 40 BEQ $40 [$D97F] A:007F X:0048 Y:0007 P:envmXdizc $0D/D93F C0 07 CPY #$07 A:007F X:0048 Y:0007 P:envmXdizc //Check Max $0D/D941 F0 3B BEQ $3B [$D97E] A:007F X:0048 Y:0007 P:envmXdiZC Code 2 $0D/D97F C0 07 CPY #$07 A:007F X:0048 Y:0007 P:envmXdizc //Check Max $0D/D981 F0 0C BEQ $0C [$D98F] A:007F X:0048 Y:0007 P:envmXdiZC


RAM 0x7E1068 Bowsers Z cord 2 Byte
RAM 0x7E106A Bowsers Y cord 2 Byte
RAM 0x7E106C Bowsers X cord 2 Byte

RAM 0x701A1E Bowsers Area stat
0x0A Pounds ground
0x0F Small Bowser hit, final time
0x10 Grows
0x11 Rocks fall from sky
0x12 1st room into?
0x16 Screen transition
0x17 Screen transition
0x1A Rocks stop falling, Bowser rises, Yoshi looks forwards
0x1B Arms rise, Big rocks fall, stands still
0x1C moves towards
0x1D Fire balls
0x1E Hit, moves backwards
0x1F Dies
0x21 Kamek second appearance
0x23 Kamek takes bowser to the moon
0x26 Yoshi hops across screen to baby Luigi
Here is the offset that controls the defeat sound, must be one less than the defeat offset

SNES 0x0DF133 ROM 0x06F333 Bowsers defeat sound count

Code that plays Bowser's defeat sound
Code
$0D/F12F AC 62 10 LDY $1062 [$0D:1062] A:008A X:003C Y:0048 P:envmXdizc //Load hit count $0D/F132 C0 02 CPY #$02 A:008A X:003C Y:0002 P:envmXdizc //Compare Max $0D/F134 30 03 BMI $03 [$F139] A:008A X:003C Y:0002 P:envmXdiZC


(SNES 0x0DF133 ROM 0x06F333) = (SNES 0x0DCB11 ROM 0x06CD11) - 0x01
Pages: « 1 2 3 4 5 6 ... 15 16 »
tehaxor69's Profile - Posts by tehaxor69

The purpose of this site is not to distribute copyrighted material, but to honor one of our favourite games.

Copyright © 2005 - 2013 - SMW Central
Legal Information - Link To Us


Total queries: 27

Menu