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
Vertical wave
FG Gradient
Or is there something wrong?
※ 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?