;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;LevelASM. ;Made by Ersanio with help from certain people. ;To be applied with Xkas ;You can access another level's code by modifying RAM $010B and $010C ;To do so, just store the new level number in RAM $010B when you are in 16-bit mode. ;An example code *(For use with Custom Blocks)* ; REP #$30 ; LDA #$0105 ;Access the levelASM code of level 105 ; STA $010B ; SEP #$30 ;When you touch this block, LevelASM will execute the codes that level 105. ;Simple as that. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HEADER LOROM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Defines ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; !FreeSpace = $2B8000 !FreeRAM = $010B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Levelnum.ips disassembly ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG $05D8B9 JSR Levelnummain ORG $05DC46 Levelnummain: LDA $0E ;Load level number STA !FreeRAM ;Store it in free stack RAM ASL A ;Multiply A by 2, probably to recover old code? RTS ;Return from subroutine ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Hijack routine for LevelASM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG $00A21B JSL MAIN ORG $00A2E2 JSL $01808C ;Point to new routine org $00A5EE JML NOTQUITEMAINBUTSTILLALITTLEBIT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;New main code ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG !FreeSpace db "STAR" ;\ dw MainEnd-MainStart-$01 ; |Write RATS tag #1 to protect main code dw MainEnd-MainStart-$01^$FFFF ;/ MainStart: MAIN: PHA ;\ PHY ; | PHX ; |Preserve 'everything' PHB ;/ PHK PLB REP #$30 ;16-bit AXY LDA !FreeRAM ;Load Level Number from stack ASL A ;x2 TAX ;Transfer level # x2 into X LDA LevelASMTable,x ;Load table, indexed with X STA $00 ;Store in $00 and $01 SEP #$30 ;8-bit AXY LDX #$00 ;Clear X JSR ($0000,x) ;And jump to subroutine in pointers PLB ;\ PLX ; |Recover 'everything' PLY ; | PLA ;/ LDA $16 AND #$10 ;Recover old code from hijacked routine. Don't touch this. RTL NOTQUITEMAINBUTSTILLALITTLEBIT: LDA !FreeRAM ASL A TAX LDA LevelInitTable,x STA $00 SEP #$30 LDX #$00 PHB PHK PLB JSR ($0000,x) PLB PHK PER RETURNADDR-1 PEA $84CE JML $00919B RETURNADDR: JML $00A5F3 MainEnd: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Pointers and Code. Don't touch this. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; db "STAR" ;\ dw PointersEnd-PointersStart-$01 ; | dw PointersEnd-PointersStart-$01^$FFFF ;/ PointersStart: LevelASMTable: incsrc Levelpointers.asm ;Pointers PointersEnd: db "STAR" dw InitEnd-InitStart-$01 dw InitEnd-InitStart-$01^$FFFF InitStart: LevelInitTable: incsrc Levelinit.asm InitEnd: db "STAR" ;\ dw CodeEnd-CodeStart-$01 ; | dw CodeEnd-CodeStart-$01^$FFFF ;/ CodeStart: incsrc Levelcode.asm ;True Level Codes. CodeEnd: db "STAR" ;\ dw InitCodeEnd-CodeStart-$01 ; | dw InitCodeEnd-CodeStart-$01^$FFFF ;/ InitCodeStart: incsrc Levelinitcode.asm ;True Level inits. InitCodeEnd: