Language…
12 users online: Anas, cletus_deletus,  Donut, GRIMMKIN, Gutawer, Isikoro, JezJitzu, masl,  Ringo,  RussianMan, Skewer, toady - Guests: 225 - Bots: 349
Users: 64,795 (2,375 active)
Latest user: mathew

Code created with the Effect tool does not work on the SA-1 LM 3.04 ROM.

How can I modify this code to work with SA-1 ROM LM 3.04?
※ I checked ‘SA-1 Code’. but don't work.
※ I removed ‘.MainCode:’ and ‘.InitCode:’.

Parallax
Code
init: REP #$20 ; | LDA #$1142 ; | Use indeirect and mode 2 on register 2111 STA $4330 ; | 4330 = Mode, 4331 = Register LDA #ParallaxTable_220020132 ; | Address of HDMA table, get high and low byte STA $4332 ; | 4332 = Low-Byte of table, 4333 = High-Byte of table SEP #$20 ; | LDA.b #ParallaxTable_220020132>>16 ; | Address of HDMA table, get bank byte STA $4334 ; | 4334 = Bank-Byte of table LDA #$7F ; | Address of indirect table in RAM bank byte STA $4337 ; | 4334 = Bank-Byte of indirect table LDA #$08 ; | TSB $6D9F ; | Enable HDMA channel 3 RTL main: REP #$20 ;/ 16 bit action starts here. (To load the x position of the BG) LDA $22 ;\ Load BG x Position LSR #1 ; | Multiplied by 0.5 STA $7F9E00 ;/ Store to FreeRAM for indirect HDMA LDA $22 ;\ Load BG x Position LSR #2 ; | Multiplied by 0.25 STA $7F9E02 ;/ Store to FreeRAM for indirect HDMA LDA $22 ;\ Load BG x Position STA $7F9E04 ;/ Store to FreeRAM for indirect HDMA SEP #$20 ; Back to 8bit RTS ; Return ParallaxTable_220020132: ;\ db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E00 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $01 : dw $9E02 ; | db $00 ;/ RTL


Vertical wave
Code
init: REP #$20 ; | LDA #$1002 ; | Use Mode 02 on register 2110 STA $4330 ; | 4330 = Mode, 4331 = Register LDA #$9E00 ; | Address of HDMA table STA $4332 ; | 4332 = Low-Byte of table, 4333 = High-Byte of table SEP #$20 ; | LDA.b #$7F ; | Address of HDMA table, get bank byte STA $4334 ; | 4334 = Bank-Byte of table LDA #$08 ; | TSB $6D9F ; | Enable HDMA channel 3 RTS ;/ End HDMA setup ;The Table takes up 115 bytes of the free RAM ;It ranges from $7F9E00 - $7F9E72 (both addresses included) main: LDY #$00 ; | Y will be the loop counter. LDX #$00 ; | X the index for writing the table to the RAM LDA $13 ; | Speed of waves LSR #2 ; | Slowing down A STA $00 ;/ Save for later use. PHB : PHK : PLB ;\ Preservev bank .Loop: ; | Jump back if not finished writing table LDA #$06 ; | Set scanline height STA $7F9E00,x ; | for each wave TYA ; | Transfer Y to A, to calculate next index ADC $00 ; | Add frame counter AND #$0F ; | PHY ; | Preserve loop counter TAY ;/ Get the index in Y LDA.w .WaveTable,y ;\ Load in wave value LSR ; | Half only CLC ; | Clear Carry for addition ADC $20 ; | Add value to layer Y position (low byte) STA $7F9E01,x ; | store to HDMA table (low byte) LDA $21 ; | Get high byte of X position ADC #$00 ; | Add value to layer X position (low byte) STA $7F9E02,x ;/ store to HDMA table (high byte) PLY ;\ Pull original loop counter CPY #$25 ; | Compare if we have written enough HDMA entries. BPL .End ; | If bigger, end HDMA INX ; | Increase X, so that in the next loop, it writes the new table data... INX ; | ... at the end of the old one instead of overwritting it. INX ; | INY ; | Increase loop counter BRA .Loop ;/ Repeat loop .End: ;\ Jump here when at the end of HDMA PLB ; | Pull back data bank. LDA #$00 ; | End HDMA by writting 00... STA $7F9E03,x ; | ...at the end of the table. RTS ;/ .WaveTable: ;\ db $00 ; | db $01 ; | db $02 ; | db $03 ; | db $04 ; | db $05 ; | db $06 ; | db $07 ; | db $07 ; | db $06 ; | db $05 ; | db $04 ; | db $03 ; | db $02 ; | db $01 ; | db $00 ;/ RTS


FG Gradient
Code
init: LDA #$17 ;\ BG1, BG2, BG3, OBJ on main screen (TM) STA $212C ; | LDA #$00 ; | 0 on main screen should use windowing. (TMW) STA $212E ;/ LDA #$00 ;\ 0 on sub screen (TS) STA $212D ; | LDA #$00 ; | 0 on sub screen should use windowing. (TSW) STA $212F ;/ LDA #$37 ; BG1, BG2, BG3, OBJ, Backdrop for color math STA $40 ;/ mirror of $2131 REP #$20 LDA #$3200 STA $4330 LDA #.RedTable STA $4332 LDY.b #.RedTable>>16 STY $4334 LDA #$3200 STA $4340 LDA #.GreenTable STA $4342 LDY.b #.GreenTable>>16 STY $4344 LDA #$3200 STA $4350 LDA #.BlueTable STA $4352 LDY.b #.BlueTable>>16 STY $4354 SEP #$20 LDA #$38 TSB $6D9F RTS .RedTable: ; db $09 : db $21 ; db $7A : db $20 ; db $38 : db $21 ; db $25 : db $22 ; db $00 ; .GreenTable: ; db $0A : db $4F ; db $0D : db $4E ; db $0D : db $4D ; db $0D : db $4C ; db $0C : db $4B ; db $0D : db $4A ; db $0C : db $49 ; db $0F : db $48 ; db $25 : db $47 ; db $2A : db $46 ; db $27 : db $45 ; db $05 : db $44 ; db $00 ; .BlueTable: ; db $33 : db $91 ; db $80 : db $92 ; db $2D : db $92 ; db $00 ; RTS


Or is there something wrong?
The first thing to know is whether you're using all these effects in the same level or not. You only have so many HDMA channels available to use (for SMW's case, four per level). Your gradient as of now uses 3 channels alone, and the parallax and wave use one each.
My recommendation is to rewrite the foreground table so it only uses two channels instead of three; that way you'll be able to fit the three efects in one level. But if these all go in separate levels, that's not a problem.

Now then, there's still issues in the converted code. UberASMTool expects all of those RTS you still have to be RTL, so you have to change any that went unnoticed.
Not sure if this is also causing problems, but your parallax/wave table is in work RAM which SA-1 can't normally access - but if the solution above works, then this isn't an issue.
Originally posted by Erik
Not sure if this is also causing problems, but your parallax/wave table is in work RAM which SA-1 can't normally access - but if the solution above works, then this isn't an issue.

That shouldn't be an issue here as UberASM runs its code by default from the SNES so if you want to use SA-1, you have to invoke it.
I replaced RTS with RTL.

Parallax is worked.

But FG Gradient and Wave is not worked
(I used one effect on one level.)
The other two also work. It turned out that the problem was that I ran in Overworld. Moving code from IMIT to MAIN works fine. (However, FG gradients are not suitable for use in Overworld.)
With SA-1 you need to put $6D9F|!addr. It should work
My released ROM hack: Yoshi Saves Summer Vacation
|!addr turns $0D9F into $6D9F, so if you already have $6D9F, you don't need |!addr.

It looks like the problem has already been solved, too.