We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS
Useful Code Snippets: Difference between revisions
From SnesLab
Nambona890 (talk | contribs) m (changed some summaries a tad) |
|||
Line 17: | Line 17: | ||
==== Inverse the accumulator (8-bit) ==== | ==== Inverse the accumulator (8-bit) ==== | ||
By [[User:Nambona890|Nambona890]] | |||
Works with SA-1. | |||
<pre> | <pre> | ||
Line 24: | Line 27: | ||
==== Inverse the accumulator (16-bit) ==== | ==== Inverse the accumulator (16-bit) ==== | ||
By [[User:Nambona890|Nambona890]] | |||
Works with SA-1. | |||
<pre> | <pre> | ||
Line 31: | Line 37: | ||
==== Toggle Carry Flag Macro ==== | ==== Toggle Carry Flag Macro ==== | ||
Works with SA-1. | |||
<pre> | <pre> | ||
Line 43: | Line 50: | ||
==== Toggle Carry Flag Alternative (8-bit) ==== | ==== Toggle Carry Flag Alternative (8-bit) ==== | ||
Works with SA-1. | |||
<pre> | <pre> | ||
Line 51: | Line 59: | ||
==== Toggle Carry Flag Alternative (16-bit) ==== | ==== Toggle Carry Flag Alternative (16-bit) ==== | ||
Works with SA-1. | |||
<pre> | <pre> | ||
Line 59: | Line 68: | ||
==== Long Branch Macros ==== | ==== Long Branch Macros ==== | ||
Useful if | Useful if you want to branch more than 0x80 bytes forward/backwards. | ||
Works with SA-1. | |||
<pre> | <pre> | ||
Line 114: | Line 125: | ||
==== Custom block template ==== | ==== Custom block template ==== | ||
By [[User:Alcaro|Alcaro]] | |||
Works with SA-1. | Works with SA-1. | ||
Line 144: | Line 156: | ||
==== Decompress GFX File ==== | ==== Decompress GFX File ==== | ||
By [[User:Vitor Vilela|Vitor Vilela]] | |||
Works with SA-1. | Works with SA-1. | ||
Line 161: | Line 174: | ||
==== Get acts like from map16 number ==== | ==== Get acts like from map16 number ==== | ||
By [[User:Vitor Vilela|Vitor Vilela]] | |||
Works with SA-1. | Works with SA-1. | ||
Line 186: | Line 200: | ||
==== Find free OAM slot ==== | ==== Find free OAM slot ==== | ||
By [[User:Vitor Vilela|Vitor Vilela]] | |||
SA-1 hybrid. | SA-1 hybrid. | ||
Line 209: | Line 224: | ||
==== Erase current save file ==== | ==== Erase current save file ==== | ||
By [[User:Sixtare|Sixtare]] | |||
<pre> | <pre> | ||
Line 246: | Line 261: | ||
==== Unsigned 16 bit x 16 bit = 32 bit multiplication ==== | ==== Unsigned 16 bit x 16 bit = 32 bit multiplication ==== | ||
By [[User:Akaginite|Akaginite]] | |||
<pre> | <pre> |
Revision as of 01:21, 7 September 2019
Useful code snippets for the 65c816 ASM and general SNES hardware.
65c816 S-CPU
General
Wait for H-Blank
- BIT $4212 BVS - - BIT $4212 BVC -
Inverse the accumulator (8-bit)
By Nambona890
Works with SA-1.
EOR #$FF INC
Inverse the accumulator (16-bit)
By Nambona890
Works with SA-1.
EOR #$FFFF INC
Toggle Carry Flag Macro
Works with SA-1.
macro XOC() BCC ?set CLC BRA ?done ?set: SEC ?done: endmacro
Toggle Carry Flag Alternative (8-bit)
Works with SA-1.
ROL EOR #$01 ROR
Toggle Carry Flag Alternative (16-bit)
Works with SA-1.
ROL EOR #$0001 ROR
Long Branch Macros
Useful if you want to branch more than 0x80 bytes forward/backwards.
Works with SA-1.
macro JEQ(branch) BNE ?branch JMP <branch> ?branch: endmacro macro JNE(branch) BEQ ?branch JMP <branch> ?branch: endmacro macro JCC(branch) BCS ?branch JMP <branch> ?branch: endmacro macro JCS(branch) BCC ?branch JMP <branch> ?branch: endmacro macro JPL(branch) BMI ?branch JMP <branch> ?branch: endmacro macro JMI(branch) BPL ?branch JMP <branch> ?branch: endmacro macro JVC(branch) BVS ?branch JMP <branch> ?branch: endmacro macro JVS(branch) BVC ?branch JMP <branch> ?branch: endmacro
SMW Hacking
Custom block template
By Alcaro
Works with SA-1.
db $42 ; or db $37 JMP MarioBelow : JMP MarioAbove : JMP MarioSide JMP SpriteV : JMP SpriteH : JMP MarioCape : JMP MarioFireball JMP TopCorner : JMP BodyInside : JMP HeadInside ; JMP WallFeet : JMP WallBody ; if using db $37 MarioBelow: MarioAbove: MarioSide: TopCorner: BodyInside: HeadInside: WallFeet: WallBody: SpriteV: SpriteH: MarioCape: MarioFireball: RTL
Decompress GFX File
By Vitor Vilela
Works with SA-1.
; Decompress input GFX file ; Must be called from SNES CPU. ; SA-1 is automatically invoked on SA-1 Pack ROMs. STZ $00 REP #$20 LDA #$7EAD ; destination buffer = $7EAD00 STA $01 LDA #$0080 ; deoompress ExGFX80.bin .. JSL $0FF900
Get acts like from map16 number
By Vitor Vilela
Works with SA-1.
; $00 = map16 tile get_act_like: LDA $06F624 STA $02 LDA $06F625 STA $03 LDA $06F626 STA $04 REP #$30 LDA $00 AND #$3FFF ASL TAY LDA [$02],y STA $00 SEP #$30 RTS
Find free OAM slot
By Vitor Vilela
SA-1 hybrid.
; Routine for finding a free OAM slot ; NMSTL compatible. Tested against Level ASM, Overworld ASM. find_oam: LDY #$FC - LDA $02FD|!addr,y CMP #$F0 BNE + CPY #$3C BEQ + DEY DEY DEY DEY BRA - + RTS
Erase current save file
By Sixtare
Erase: REP #$10 LDA $010A CMP #$01 BEQ .01 BCS .02 .00 LDX #$008F JMP .delete .01 LDX #$011E JMP .delete .02 LDX #$01AD .delete LDY #$008F LDA #$00 - STA $700000,x STA $7001AD,x DEX DEY BPL - SEP #$10 RTS
65c816 SA-1 CPU
Some snippets present on S-CPU section works with SA-1 CPU as well.
General
Unsigned 16 bit x 16 bit = 32 bit multiplication
By Akaginite
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 16bit * 16bit Multiplication SA-1 version ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Parameters ; $00-$01 : Multiplicand ; $02-$03 : Multiplier ; Return values ; $04-$07 : Product ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MathMul16_16: STZ $2250 REP #$20 LDA $00 STA $2251 ASL A LDA $02 STA $2253 BCS + LDA.w #$0000 + BIT $02 BPL + CLC ADC $00 + CLC ADC $2308 STA $06 LDA $2306 STA $04 SEP #$20 RTS