REM >MyGame : REM I could stuck 1152 bytes of stack at &8A00-&8E7F : gamesize=544: REM 544k allocated normally version$="7.5" owner$="" MODE0 : REM below must be directly loadable in immediate mode mapalloc=&2000 maptotal=&4000 junkmapalloc=2000 junkinfoalloc=160 xyzinfoalloc=32*&2C xyzmapalloc=3200 finsize=512 numbombs=32 numfunnyxyzs=5: REM number of xyzs simultaneously opening lock etc. rclbufsize=12*7 : SYS "OS_File",5,"STPlayer" TO ,,l,x,stplayerlength *Set Phaethon$Dir adfs::4.games.Phaethon.!Phaethon *Set Zone$Dir adfs::4.games.Phaethon.!Zones *Set Zone$Path adfs::4.games.Phaethon.!Zones.,:0.!Zones. *UNSET ZONE$CUR saveprog=0 IF PAGE>&6D000 I%=&8F00:saveprog=-1 ELSE DIM I% 500*1024+4 memclear=saveprog IF memclear FORG=I%TO I%+400*1024 STEP4:!G=0:NEXT:PRINT"That's over with" hello=FNalloc(72) xyzlegal=FNalloc(4*16) actnames=FNalloc(200) obnames=FNalloc(200) comprscode=FNalloc(1300):compressor=comprscode+8 numcomp=FNalloc(1930) blipdata=FNalloc(400) chknoroom=FNalloc(14716) stplayer=FNalloc(stplayerlength+80) musicfiletrans=stplayer musicsamptrans=stplayer+8 musicinitsoundsys=stplayer+12 musicclosesound=stplayer+16 musicsetvolume=stplayer+20 musicposition=stplayer+28 musiceffect=stplayer+32 musicstart=stplayer+36 musicstop=stplayer+40 musicstorepos=stplayer+44 musicreloadpos=stplayer+48 musictosounddma=musicreloadpos+12 newpoint=FNalloc(112) fanspin=FNalloc(2954) scrollh=FNalloc(1400) flamecode=FNalloc(1900) dcompact=FNalloc(1024) mapFF=FNalloc(4):!mapFF=-1 map=FNalloc(maptotal) editcopy=FNalloc(mapalloc+junkinfoalloc+xyzinfoalloc) mapcopy=FNalloc(mapalloc+&40) code%=FNalloc(20500) : REM meaty code ball=FNalloc(&50A0) starmap=FNalloc(2720) utext=FNalloc(400) jm=FNalloc(junkmapalloc+12):junkmap=jm+4:!jm=-1 clear=FNalloc(3500) oldjunkif=FNalloc(junkinfoalloc+12) ji=FNalloc(junkinfoalloc+12):junkinfo=ji+8:ji!4=-1:!ji=-1 mapsdo=FNalloc(2900) : REM transform sprites icons=FNalloc(&129C) buy=FNalloc(&2FEC) code2%=FNalloc(6424) : REM preview mapper bigcharset=FNalloc(&1DE0) thetext=FNalloc(&DE0) xtras=FNalloc(&528):extras=xtras-&1EC mtext=FNalloc(&13BC) comments=FNalloc(2496) collision=FNalloc(1400) header=FNalloc(&13E7) title=FNalloc(2250) footer=FNalloc(&DAC) hispr=FNalloc(304) hischandle=FNalloc(512) hiscores=FNalloc(&524):options=FNalloc(64):templdat=hiscores+&4B0 nowhere=FNalloc(5200) spacestuff=FNalloc(&2500) mapspr=FNalloc(&8710): mapspr=(mapspr+&F)AND(NOT&F) backg=mapspr+&7000 logtable=FNalloc(1024) keycodes=FNalloc(558) analyser=FNalloc(3724): REM spectrum analyser code mapcolours=FNalloc(312) sldata=FNalloc(&11BA) bouncer=FNalloc(10000) passwords=FNalloc(32*8) wicked=FNalloc(1024) colourlist=FNalloc(312) xyzblip=FNalloc(xyzinfoalloc+&30) xyzinfo=FNalloc(xyzinfoalloc+&30) endxyzinfo=xyzinfo+xyzinfoalloc recoiled=FNalloc(rclbufsize) xyzcdee=FNalloc(2500) xyzobs=FNalloc(256) xyzmap=FNalloc(xyzmapalloc) FORT=0 TO xyzmapalloc-4 STEP 4:T!xyzmap=-2:NEXT FORT=0 TO junkmapalloc-4 STEP 4:T!junkmap=-2:NEXT xyzsprs=FNalloc(17596) messcode=FNalloc(2900) syscode=FNalloc(620) sysfreq=FNalloc(377) meterscode=FNalloc(784) logodata=FNalloc(&3C00) jetcode=FNalloc(1600) doneovercode=FNalloc(4216) buymeplease=FNalloc(270) doopts=FNalloc(3400) cockup=FNalloc(1832) wallbg=FNalloc(&162C) fllight=flamecode+4 flreset=flamecode+8 flsee=flamecode+12 flputout=flamecode+24 getstart=dcompact+12 getproject=dcompact+16 putproject=dcompact+20 chkproject=dcompact+24 projline=dcompact+32 decompress=dcompact+36 congrascr=FNalloc(624) entername2=FNalloc(4190) planetcode=FNalloc(2100):planetwrkspc=planetcode+&28 planetcols=planetcode+780 editor=FNalloc(28560) blocknames=FNalloc(924) minibdata=FNalloc(&5A0) editpreev=FNalloc(4628) firewcode=FNalloc(2100) ballsparks=FNalloc(264) spritereorder=FNalloc(2496) bigwaste=FNalloc(&2880): REM ****** AT END OF PROGRAM ******* fadetable=FNalloc(516) editcodes=FNalloc(25*4) prefint=FNalloc(4):!prefint=-1 fintxt=FNalloc(finsize) plancols=16*27 DIM bsrecord 256,xyzrecord 2000 : DIM bigblocks &21C20,xyzhrsprs &112F0,musix 168256 DIM sfxdata &19344 IF saveprog THEN assemtwomeg=bigwaste: real2Mend=bigwaste+&2880 twomeggoes=&8000+(gamesize+135)*1024 hiresxyzmod=(&8000+(gamesize+160)*1024)-4*xyzsprs musix=fintxt+finsize+8 IF (musix+168256)>(&8000+gamesize*1024) PRINT"Oh shit! Out of room!": END ELSE DIM assemtwomeg 16384, real2Mend 0 twomeggoes=assemtwomeg+9*4 hiresxyzmod=xyzhrsprs-4*xyzsprs ENDIF REM remember, copy routine isn't copied to twomeggoes : bigblocks=(bigblocks+&1F) AND (NOT&1F) OSCLI("L. Graphics.Ptr_mode15 "+STR$~newpoint) OSCLI("L. Graphics.Ptr_mode13 "+STR$~(newpoint-&38)) OSCLI("L. XYZRecord "+STR$~xyzrecord) newpoint!(16-&38)=0:newpoint!(20-&38)=0:newpoint!(24-&38)=0 xyzas%=xyzobs PROCdefinexyz(xyzas%,9,7,"deathball",0) PROCdefinexyz(xyzas%,8,8,"plas5",0) PROCdefinexyz(xyzas%,8,&82,"sparkle",0) PROCdefinexyz(xyzas%,6,1,"meany",0) PROCdefinexyz(xyzas%,6,1,"gun",0) PROCdefinexyz(xyzas%,5,1,"key",0): lockopener=lastxyz PROCdefinexyz(xyzas%,5,1,"bomb",0): bombdetonate=lastxyz PROCdefinexyz(xyzas%,5,&84,"cashgrab",0): cashsteal=lastxyz PROCdefinexyz(xyzas%,5,&84,"scoregrab",0): scoresteal=lastxyz PROCdefinexyz(xyzas%,7,&84,"cash1",1): REM frames+&7F for both ways PROCdefinexyz(xyzas%,3,1,"port",0) PROCdefinexyz(xyzas%,3,1,"wall",0) PROCdefinexyz(xyzas%,3,1,"wall2",0) PROCdefinexyz(xyzas%,3,1,"top",0) PROCdefinexyz(xyzas%,3,1,"chevron2",0) PROCdefinexyz(xyzas%,3,1,"chevron",0) PROCdefinexyz(xyzas%,8,1,"bullet",0) : REM rlrfncqpedmcf?? REM f b c g b PROClegal(0 ,"xxx-xxxx-----xx"): REM killer PROClegal(1 ,"xxx-xxxxx-x--xx"): REM plasma globe PROClegal(2 ,"xxx-xx-------xx"): REM sparkle PROClegal(3 ,"xxx-xx---xx--xx"): REM meanie PROClegal(4 ,"-----x--xxxx-xx"): REM gun PROClegal(5 ,"xxx-x------xxxx"): REM turn key PROClegal(6 ,"xxx-x------xxxx"): REM bomb blower PROClegal(7 ,"xxx-x------xxxx"): REM cash grabber PROClegal(8 ,"xxx-x------xxxx"): REM score thief PROClegal(9 ,"xxxx-------x-xx"): REM cash bonus PROClegal(10,"---------------"): REM portculis PROClegal(11,"---------------"): REM wall PROClegal(12,"---------------"): REM column PROClegal(13,"---------------"): REM top PROClegal(14,"---------------"): REM chevron l PROClegal(15,"---------------"): REM chevron r xyzas%!0=-1 : numobjs=16 : REM number of objects defined numact=23 : REM number of action types maxacts=20 : REM maximum number of actions available for one object : : fidal=&140*20 OSCLI("L. RvwText "+STR$~thetext) PROCcondensescroll(thetext) IF saveprog THEN OSCLI("L. 2MbText "+STR$~editcopy) PROCcondensescroll(editcopy) ENDIF a%=&FF2EFF2E b%=&FFD3FFD3 ipo=12*4: ipo2=12*4 FORT=0 TO 2 STEP 2:P%=chknoroom [OPT T .escoff STMFD R13!,{R0-R2,R14} MOV R0,#200: MOV R1,#1: SWI "OS_Byte" STR R1,oldbyte: LDMFD R13!,{R0-R2,R15} .escon STMFD R13!,{R0-R2,R14} MOV R0,#200: LDR R1,oldbyte: SWI "OS_Byte" LDMFD R13!,{R0-R2,R15} .oldbyte EQUD 0 : .startcpcs EQUD starmap+12 .endcpcs EQUD starmap+772 : .copyprotchecksum LDR R0,exitcpcs: STR R0,copyprotchecksum LDR R0,startcpcs: LDR R1,endcpcs MOV R2,#0:.loop LDR R3,[R0],#4 EOR R2,R2,R3: CMP R0,R1: BNE loop STR R2,mustbe96:.exitcpcs MOV R15,R14 : .mustbe96 EQUD 96*(saveprog+1) : .testfirebuts MOV R0,#0: SWI &63F40 ; XJoystick_Read MOVVSS R0,#0: MOVVS R15,R14 MOV R0,R0,LSR#16: ANDS R0,R0,#&FF: MOVNE R15,R14 MOV R0,#1: SWI &63F40 ; XJoystick_Read MOVVSS R0,#0: MOVVS R15,R14 MOV R0,R0,LSR#16: ANDS R0,R0,#&FF: MOV R15,R14 : .joystatus STMFD R13!,{R1,R2,R4,R14} MOV R4,#0 MOV R2,#1:.loop MOV R0,R2: SWI &63F40 ; XJoystick_Read MOVVS R0,R4: LDMVSFD R13!,{R1,R2,R4,R15} TST R0,#&FF<<16: ORRNE R4,R4,#16 MOV R0,R0,LSL#16: CMP R0,#32<<24: ORRGT R4,R4,#1 CMP R0,#224<<24: ORRLT R4,R4,#2 MOV R0,R0,LSL#8: CMP R0,#32<<24: ORRGT R4,R4,#8 CMP R0,#224<<24: ORRLT R4,R4,#4 SUBS R2,R2,#1: MOVPL R4,R4,LSL#8: BPL loop MOV R0,R4: LDMFD R13!,{R1,R2,R4,R15} : .bigscroll ADR R0,bsregs LDMIA R0!,{R1,R2,R3,R4} MOV R5,R2:.loop LDR R6,[R1],#4: STR R6,[R5],#4 SUBS R3,R3,#4: BGT loop .loop LDR R5,[R0],#4 STR R2,[R5]: SUBS R4,R4,#1: BGT loop MOV R15,R14 : .tocruisee EQUD cruiseen .bsregs EQUD editcopy: EQUD &8000+(gamesize+260)*1024 EQUD 10*1024 EQUD 5: EQUD totext2: EQUD totext3 EQUD tthe: EQUD totext: EQUD reptext .junkandfoot STMFD R13!,{R14} LDR R0,tocruisee: LDRB R0,[R0]: CMP R0,#16: LDMEQFD R13!,{R15} LDR R0,howmuchmoney: LDR R0,[R0]: MOVS R0,R0: LDMMIFD R13!,{R15} LDR R0,loadedmus: MOVS R0,R0: LDMEQFD R13!,{R15} BL rdcursc2: ADD R0,R0,#1: AND R0,R0,#255: BL getj2 BL vsync: MOV R0,#&FF: BL getfoot LDMFD R13!,{R15} .howmuchmoney EQUD cash .clloadedmus MOV R0,#0: STR R0,loadedmus: MOV R15,R14 .loadedmus EQUD 0 : .introdiff MOV R3,#0 MOV R0,#255: SWI "XOS_File" .errorload MOVVS R0,#0: LDR R1,todaymus: STRVS R0,[R1] MOVVS R15,R14 ADD R2,R1,R4 ; add length B decryptmus ; we've got intromusic! : .mem168256 EQUD 168256 .mem24360 EQUD 24360 .getmymusix ; R1 = filename ; R2 = destination LDR R0,musicloads: CMP R2,R0 STR R0,loadedmus LDR R0,currenttrackr: CMPEQ R0,#3: BEQ introdiff MOV R0,#5: SWI "XOS_File": BVS errorload LDR R2,buffere: SUB R2,R2,R4: BIC R2,R2,#3: STR R2,bufferl MOV R3,#0: MOV R0,#255: SWI "XOS_File" BVS errorload LDR R1,bufferl: ADD R2,R1,R4 STMFD R13!,{R1,R4,R14}: BL decryptmus: LDMFD R13!,{R2,R4,R14} MOV R0,#4: SUB R3,R4,#20 ; R2 is still bufferl ADD R2,R2,#20 LDR R4,todaymus: MOV R5,#172*1024 LDR R1,musicloads: LDREQ R5,mem168256 LDRNE R5,mem24360 LDR R1,towsquash SWI "XSquash_Decompress" MOV R15,R14 .buffere EQUD &1FE8000+77*1024 ; bodged .bufferl EQUD &1FE8000-10*1024 ; bodged .towsquash EQUD &1FE8000+78*1024 ; bodged .decryptmus LDR R0,decryptmus SUBS R0,R0,#0 ; R1 = data, R2 = end .loop LDR R3,[R1],#4: EOR R3,R3,R0: STR R3,[R1,#-4] ADDS R0,R0,R0,RRX: EORCC R0,R0,R0,ROR#3 CMP R1,R2: BLT loop MOV R15,R14 : .wheresampsgo EQUD &8000+(gamesize+284)*1024 .samplefile EQUS ".SoundFX": EQUB 13: ALIGN : .sampleload LDR R0,endsl: STR R0,sampleload MOV R0,#255: MOV R3,#0: ADR R1,samplefile: LDR R2,wheresampsgo SWI "XOS_File" LDR R1,wheresampsgo ADD R2,R1,#200*1024 .decryptsfx LDR R0,decryptsfx .loop LDR R3,[R1],#4: EOR R3,R3,R0: STR R3,[R1,#-4] ADDS R0,R0,R0,RRX: EORCC R0,R0,R0,ROR#3 CMP R1,R2: BLT loop LDR R0,wheresampsgo: STR R0,transed: B musicsamptrans .endsl MOV R15,R14 : .scoresnd STMFD R13!,{R1,R14} MOV R0,#14: MOV R1,#9: BL doeffect LDMFD R13!,{R1,R15} .warpsnd STMFD R13!,{R1,R14} CMP R0,#&FF MOV R0,#20: MOV R1,#19: BLNE doeffect LDMFD R13!,{R1,R15}^ .reversesnd STMFD R13!,{R1,R14} MOV R0,#23: MOV R1,#27: BL doeffect LDMFD R13!,{R1,R15} .cashsndcopy STMFD R13!,{R1,R14} MOV R0,#11: MOV R1,#20: BL doeffect LDMFD R13!,{R1,R14}: B cashcopy .ffwdsnd STMFD R13!,{R1,R14} MOV R0,#18: MOV R1,#12: BL doeffect LDMFD R13!,{R1,R15} .stopsnd STMFD R13!,{R1,R14} MOV R0,#19: MOV R1,#1: BL doeffect LDMFD R13!,{R1,R15} .toscrend1 EQUD &2000000 ; bodged .dai21FFB LDR R0,toscrend1: SUB R0,R0,#&5000 .decompressallicons ; to icons ; R0 to workspace LDR R1,toyiconz ADD R2,R1,#&1200: ADD R2,R2,#&9C .loop2 CMP R1,R2: MOVGE R15,R14 LDRB R3,[R1],#1: AND R4,R3,#&F0 CMP R4,#&40: STRNEB R3,[R0],#1 BNE loop2 EOR R4,R4,R3:LDRB R5,[R1],#1: SUB R5,R0,R5 .loop LDRB R6,[R5],#1: STRB R6,[R0],#1 SUBS R4,R4,#1: BNE loop B loop2 : .toyiconz EQUD icons : .musiccontrol2 MOV R1,#&80: B inmusctrl .musiccontrol MOV R1,#2:.inmusctrl STMFD R13!,{R14} LDR R0,wotsoundf: LDRB R0,[R0] TST R0,R1: BNE shouldBnomus LDRB R0,musicstatus: EORS R0,R0,#1: LDMEQFD R13!,{R15} STRB R0,musicstatus LDR R0,tomusload: LDR R1,wanttrackr: LDR R2,currenttrackr CMP R1,R2: BEQ unpauseandgo BL gettrackr:.backumus LDR R0,lastplaypos: BL playposition: LDMFD R13!,{R15} .shouldBnomus LDRB R0,musicstatus: EORS R0,R0,#1: LDMNEFD R13!,{R15} STRB R0,musicstatus LDMFD R13!,{R14}: B musicstop ; Tracker control here .ploffsettab EQUB 13: EQUB 5+25: EQUB 46: EQUB 5: EQUB 0: EQUB 5: EQUB 30: EQUB 5: EQUB 57: EQUB 5 EQUB 0: EQUB 4: EQUB 36: EQUB 4: EQUB 18: EQUB 4: EQUB 55: EQUB 2: EQUB 60: EQUB 3: EQUB 67: EQUB 3: EQUB 29: EQUB 3: EQUB 80: EQUB 2 EQUB 0: EQUB 5: EQUB 51: EQUB 5: EQUB 32: EQUB 5: EQUB 20: EQUB 5: EQUB 44: EQUB 5 EQUB 0: EQUB 5: EQUB 19: EQUB 5: EQUB 41: EQUB 5: EQUB 34: EQUB 5: EQUB 17: EQUB 5 EQUB 0: EQUB 100 ALIGN .unpauseandgo BL musicstart: B backumus .copycurrentpos LDR R0,lastplaypos:.nolastplaypos STR R0,lastplaypos2: MOV R15,R14 .lastplaypos2 EQUD 0 .transed EQUD -1 EOR saveprog .doeffect STMFD R13!,{R0-R12,R14} LDR R8,transed: MOVS R8,R8: LDMEQFD R13!,{R0-R12,R15} LDR R8,wotsoundf: LDRB R7,[R8]: TST R7,#1 BLEQ musiceffect LDMFD R13!,{R0-R12,R15} .currenttrackr EQUD -1 .lastplaypos EQUD 0 .musicstatus EQUD 0 ;0 = paused (wanttrackr as required) ;1 = playing (currenttrackr/lastplaypos as loaded) .interok EQUD 0 .playinginter EQUD 0 .wanttrackr EQUD 0 .tomusload EQUD 0 .wotsoundf EQUD soundflag .playlevmus ; R0 = level LDRB R1,stufznum: AND R1,R1,#15 CMP R1,#6: SUBGE R1,R1,#5 ADD R0,R0,#1: AND R0,R0,#255 ADD R1,R1,R1,LSL#2: ADD R1,R1,R1,LSL#2: ADD R6,R0,R1 ADR R1,ploffsettab:.loop LDRB R0,[R1],#1: LDRB R7,[R1],#1 SUBS R6,R6,R7: BPL loop LDR R1,lastplaypos2: CMP R0,R1: STREQ R0,lastplaypos: BEQ musicreloadpos .playposition STR R0,lastplaypos STMFD R13!,{R0,R14}: MOV R0,#255 BL musicsetvolume: LDMFD R13!,{R0,R14} B musicposition : .loadinter LDR R2,playinginter: MOVS R2,R2: MOVNE R15,R14 LDR R2,wotsoundf: LDRB R2,[R2] TST R2,#2: MOVNE R15,R14 LDR R0,interok: MOVS R0,R0: BEQ mustloadint STMFD R13!,{R14} MOV R0,#1: STR R0,playinginter BL musicstop: LDR R0,highmusic BL musicfiletrans MOV R0,#0: BL playposition BL musicstart: LDMFD R13!,{R15} .trackrwork EQUD &1FC0000+&14000+111*1024+&140*32 ;bodged .mustloadint LDR R0,currenttrackr: CMP R0,#1: MOVEQ R15,R14 ADR R0,playinter MOV R1,#1: STR R1,interok: STR R1,playinginter .gettrackr ; R1 = internal no., R0=> filename LDR R2,playinginter: MOVS R2,R2: BEQ noplayinter LDR R2,currenttrackr: CMP R2,R1: LDREQ R0,musicloads BEQ fulltransm5:.noplayinter STR R0,tomusload STR R1,wanttrackr: LDR R2,wotsoundf: LDRB R2,[R2] TST R2,#2: MOVNE R15,R14 LDR R2,currenttrackr: CMP R2,R1: MOVEQ R15,R14 CMP R1,#1: LDREQ R4,highmusic: LDRNE R4,musicloads: STR R4,todaymus MOVNE R4,#0: STRNE R4,playinginter STRNE R1,currenttrackr MOV R1,#1: STR R1,musicstatus STMFD R13!,{R0,R14}: BL musicstop LDR R0,currenttrackr: CMP R0,#10 MOV R0,#0: STRGT R0,lastplaypos2: BLLT musicposition: LDMFD R13!,{R1} LDR R2,todaymus STMFD R13!,{R2,R14} MOV R0,#0: BL stalloff BL escoff: BL getmymusix: BL escon MOV R0,#1: BL stalloff LDMFD R13!,{R1,R14} LDR R4,todaymus: STMFD R13!,{R4} .fulltransm LDMFD R13!,{R0}:.fulltransm2:BL musicfiletrans .musictrans MOV R0,#255: BL musicsetvolume BL musicstart LDMFD R13!,{R15} .fulltransm5 STMFD R13!,{R14} MOV R1,#0: STR R1,playinginter .fulltransm4 STMFD R13!,{R0}: BL musicstop: LDMFD R13!,{R0} B fulltransm2 .todaymus EQUD 0 .musicloads EQUD musix .highmusic EQUD musix+&23218 .endmusic EQUD musix+168256 .loadendz MOV R1,#2: ADR R0,playendz: B gettrackr .loadintro LDR R2,interok: MOVS R2,R2: MOVNE R2,#100: STRNE R2,currenttrackr MOV R1,#3: ADR R0,playintro: MOV R5,#0:STR R5,interok: B gettrackr .loadzonemus ; R0 = zone number MOV R1,#0: STR R1,lastplaypos CMP R0,#5: SUBGT R0,R0,#5 ADD R1,R0,#48: STRB R1,stufznum ADR R0,playinit: B gettrackr .stopmus MVN R0,#0: STR R0,currenttrackr MOV R0,#0: STR R0,musicstatus ; will keep music in memory to save time later STMFD R13!,{R14}: BL musicstop: BL musicclosesound: LDMFD R13!,{R15} : .playinit EQUS ".Trackers.Zone":.stufznum EQUB 0: EQUB 13 ALIGN .playinter EQUS ".Trackers.InterLevel": EQUB 13 .playendz EQUS ".Trackers.EndZone": EQUB 13 .playintro EQUS ".Trackers.IntroMusic": EQUB 13 ALIGN .poy EQUD editcopy .maysavephlog LDR R0,bsenable: MOVS R0,R0: MOVNE R15,R14 .savephlog LDR R0,numbersat: SUB R0,R0,#&28000: MOV R1,#&2E80 LDR R2,poy:.loop LDMIA R0!,{R3,R4,R5,R6,R7,R8,R9,R10} STMIA R2!,{R3,R4,R5,R6,R7,R8,R9,R10} SUBS R1,R1,#8*4: BNE loop .ballsparkon MOV R0,#1:.stbsonoff STR R0,bsenable: MOV R15,R14 .ballsparkoff MOV R0,#0: B stbsonoff .tobankhj EQUD bank .bsenable EQUD 0 .mightballspark LDR R2,bsenable: MOVS R2,R2: MOVEQ R15,R14 LDR R0,tobankhj: LDR R0,[R0] LDR R1,numbersat: SUB R1,R1,#&28000 ADD R0,R0,R1: STMFD R13!,{R0} MOV R1,#&2E80 LDR R2,poy:.loop LDMIA R2!,{R3,R4,R5,R6,R7,R8,R9,R10} STMIA R0!,{R3,R4,R5,R6,R7,R8,R9,R10} SUBS R1,R1,#8*4: BNE loop: LDMFD R13!,{R0}: B ballsparks+12 .bcfregs EQUD numcomp*2 .numbersat EQUD &1FC0000+&28000 ; bodged (MUST be scrnstart+&28000) .bcfregsplus EQUD &2CC0+bcfregs!4 ; bodged EQUD 0 EQUD 0 .buildcfont STMFD R13!,{R14} ADR R0,bcfregs: LDMIA R0,{R1,R2,R3,R4,R7} ADR R6,fonttrans .loop BL readcfont: LDRB R0,[R0,R6]: MOV R5,#1: BL outcfont CMP R0,#0: CMPNE R0,#&FF: BNE notsatur MOV R7,R0: BL readcfont MOV R5,R0: MOV R0,R7: BL outcfont B loop .notsatur CMN R7,#1: BEQ loop BL readcfont: EOR R7,R7,#&FF: MOV R5,R0: MOV R0,R7 CMP R5,#0: MVNEQ R7,#0 BL outcfont B loop : .readcfont LDRB R0,[R4,R1,ASR#1]: TST R1,#1: MOVEQ R0,R0,ASR#4 ADD R1,R1,#1 AND R0,R0,#&F: MOV R15,R14 : .fonttrans EQUD &45D0FF00: EQUD &23FDD146: EQUD &FED24744: EQUD &D32122FC : .outcfont ; R0=data ; R5=repetitions CMP R5,#0: MOVEQ R15,R14 .loop STRB R0,[R2],#1: CMP R2,R3: LDMEQFD R13!,{R15} SUBS R5,R5,#1: BGT loop MOV R15,R14 : .calchugelookup STMFD R13!,{R0,R1,R2,R4,R6,R12,R14} ; R0 is x in; R11 = SQR((&24<<20)-(&1800-x)^2)*&2000/3 RSB R2,R0,#&1800: MUL R12,R2,R2: RSB R12,R12,#&24<<20 BL sqr MOV R0,#&AA0: ADD R0,R0,#10: MUL R11,R2,R0 LDMFD R13!,{R0,R1,R2,R4,R6,R12,R15} : .findballspd ADR R7,balsregs: LDMIA R7,{R7,R8,R9} LDR R7,[R7]: LDR R8,[R8]: LDR R9,[R9] MOV R7,R7,ASR#11: MOV R8,R8,ASR#3: MOV R9,R9,ASR#3 MUL R2,R7,R7: MLA R2,R8,R8,R2: MLA R2,R9,R9,R2 MOV R15,R14 .balsregs EQUD velo: EQUD vdown: EQUD xa .minus1copy LDR R0,tomcc3C: MVN R1,#&80<<24: STR R1,[R0]: MOV R15,R14 .tomcc3C EQUD mapcopy+&3C : .checkcache STMFD R13!,{R14}: MOV R0,#0: MVN R1,#0: SWI &20000+&280 ; XCache_Control STR R0,cache: LDMVCFD R13!,{R15} ; Cache_Control recognised MOV R0,#129: MOV R1,#0: MOV R2,#&FF: SWI "OS_Byte" CMP R1,#&A5: MOVEQ R0,#1: MOVNE R0,#0 STR R0,cache LDMFD R13!,{R15} : .cache EQUD 0 .ttsprtt2 EQUD tosprite32 : .dashcurvR3 MOV R10,#1: LDR R11,toscrbuy: LDR R11,[R11] B clearcdit .cleardashcurv MOV R3,#0 LDR R11,stcc: MOV R10,#2 .clearcdit MOV R12,#0:.loop1 MOV R0,R11: SUBS R10,R10,#1: MOVMI R15,R14 ADR R6,cdtab .loop2 LDRB R5,[R6],#1: MOVS R2,R5: ADDEQ R11,R11,#&14000 BEQ loop1 .loop SUBS R5,R5,#1: STRB R3,[R0,R5]: BPL loop ADD R0,R0,#&140 .loop STRB R3,[R0,-R2]: SUBS R2,R2,#1: BGT loop B loop2 .stcc EQUD &1FD02C0 ; bodged .curveon LDR R0,curvescrnd:.strgoy STR R0,cdtab LDR R1,tospsp3: LDR R1,[R1]: ADD R1,R1,#32: STR R1,tospsp2: MOV R15,R14 .curveoff MOV R0,#0: B strgoy .rdgoy LDR R0,cdtab: MOV R15,R14 .toscrbuy EQUD scrnbot .cdtab EQUD 0 EQUB 6: EQUB 2: EQUW 0 .curvescrnd EQUB 56: EQUB 36: EQUB 20: EQUB 12 ALIGN .curvedash LDR R7,cdtab: MOVS R7,R7: MOVEQ R15,R14 STMFD R13!,{R14} ; R0- map ; R1 = 'lengthd' ; R2 = scrnbot-&140 ; R3 = x ; R4 = dw/dy ; R5 = bt : MOV R7,#0: B donecdrowa .loop STMFD R13!,{R2,R3,R5,R7} ADR R12,cdtab: LDRB R12,[R12,R7] SUB R11,R3,R5,LSL#2 ADD R9,R2,R11,ASR#16 BIC R14,R11,#&FF<<24: BIC R14,R14,#&FF<<16 ADD R10,R5,R14,LSL#1 MOV R6,#31 ADD R7,R2,R12 .loop1s BL clearcd .loop1 CMP R9,R7: BGE righthandcd SUBS R8,R2,R9:BCS offlftcd .plotleft BL docurvebit .justplottedcd SUBS R6,R6,#2: BMI donecdrow LDR R5,[R13,#8] ADD R10,R10,R5: B loop1 .righthandcd LDMFD R13,{R7}: CMP R7,R2: BNE donecdrow ADD R7,R2,#&140: SUB R2,R7,R12: B loop1s .donecdrow LDMFD R13!,{R2,R3,R5,R7} ADD R7,R7,#1: CMP R7,#6: LDMEQFD R13!,{R15} .donecdrowa ADD R2,R2,#&140 MOV R10,R5,LSR#15: LDR R8,bigpntcd LDR R8,[R8,R10,LSL#2]: LDR R10,[R0,#&20]: MOV R8,R8,LSR#18: RSB R8,R8,#0 MLA R4,R8,R10,R4: MOV R6,R4,ASR#8: LDR R10,[R0,#&24] MOVS R8,R10,ASR#8:RSBPL R8,R8,#0: MLANE R3,R6,R8,R3 ADDPL R5,R5,R10: SUBMI R5,R5,R10 MOV R8,R5,ASR#16 LDR R10,bigpntcd: LDR R6,[R10,R8,LSL#2]: ADD R1,R1,R6: LDR R6,[R0,#&2C] CMP R1,R6: BLT loop: SUB R0,R0,#48: SUB R1,R1,R6 LDR R6,minmap: CMP R0,R6: LDMLEFD R13!,{R15} B loop .minmap EQUD mapcopy+&40-&30 .bigpntcd EQUD bigtable : .clearcd ; R12 is pixels, R7 is righthandside MOV R8,#0: MOV R3,R12:.loop STRB R8,[R7,-R3] SUBS R3,R3,#1: BNE loop: MOV R15,R14 : .offlftcd CMP R10,R8,LSL#17: ADDLT R9,R9,R10,LSR#17: ANDLT R10,R10,#&1FC00 BLT nextcdl LDRB R5,[R0,R6]: CMP R5,#&FF: BEQ offlftcdn .whichbigcd2 EQUD 0 .offlftcdn SUB R10,R10,R8,LSL#17: MOV R9,R2: BL docurvebit .nextcdl SUBS R6,R6,#2: BMI donecdrow LDR R5,[R13,#8] ADD R10,R10,R5: B loop1 : .docurvebit ; R10 is pixels<<17 ; R9 is plot address; R7 is righthandside ; can use R3,R5 LDRB R8,[R0,R6]: CMP R8,#&FF:.whichbigcd EQUD 0 SUB R8,R6,#1: LDRB R8,[R0,R8] CMP R8,#0: BEQ spcend .loop3 CMP R9,R7: MOVEQ R15,R14 STRB R8,[R9],#1: SUBS R10,R10,#&20000: BPL loop3 MOV R15,R14 .spcend ADD R9,R9,R10,LSR#17: AND R10,R10,#&1FC00: MOV R15,R14 : .tospsp2 EQUD 0:.tospsp3 EQUD tosprite32 .bslf16 SUB R8,R6,#1: LDRB R8,[R0,R8]: LDR R3,tospsp1: ADD R3,R3,R8,LSL#8 AND R5,R1,#&3C00000: ADD R3,R3,R5,LSR#18: ; R3 is sprite address LDR R5,[R13,#8]: SUB R10,R10,R5 B oloopl16 .loop7 TST R3,#15: BEQ justplottedcd:.oloopl16 ADDS R10,R10,R5,LSR#4 LDRB R8,[R3,#-1]!: BMI loop7 .loopy CMP R9,R2: ADD R9,R9,#1: CMPGE R7,R9 STRGEB R8,[R9,#-1]: SUBS R10,R10,#&20000: BPL loopy B loop7 : .bslf32 SUB R8,R6,#1: LDRB R8,[R0,R8]: LDR R3,tospsp2: ADD R3,R3,R8,LSL#10 AND R5,R1,#&3E00000: ADD R3,R3,R5,LSR#16: ; R3 is sprite address LDR R5,[R13,#8]: SUB R10,R10,R5 B oloopl32 .loop7 TST R3,#31: BEQ justplottedcd:.oloopl32 ADDS R10,R10,R5,LSR#5 LDRB R8,[R3,#-1]!: BMI loop7 .loopy CMP R9,R2: ADD R9,R9,#1: CMPGE R7,R9 STRGEB R8,[R9,#-1]: SUBS R10,R10,#&20000: BPL loopy B loop7 : .bscd16 SUB R8,R6,#1: LDRB R8,[R0,R8]: LDR R3,tospsp1: ADD R3,R3,R8,LSL#8 AND R5,R1,#&3C00000: ADD R3,R3,R5,LSR#18: ; R3 is sprite address LDR R5,[R13,#8]: SUB R10,R10,R5 B oloopb16 .loop3 TST R3,#15: MOVEQ R15,R14:.oloopb16 ADDS R10,R10,R5,LSR#4 LDRB R8,[R3,#-1]!: BMI loop3 .loopy CMP R9,R7 STRLTB R8,[R9],#1: ADDGE R9,R9,#1: SUBS R10,R10,#&20000: BPL loopy B loop3 : .bscd32 SUB R8,R6,#1: LDRB R8,[R0,R8]: LDR R3,tospsp2: ADD R3,R3,R8,LSL#10 AND R5,R1,#&3E00000: ADD R3,R3,R5,LSR#16: ; R3 is sprite address LDR R5,[R13,#8]: SUB R10,R10,R5 B oloopb32 .loop3 TST R3,#31: MOVEQ R15,R14:.oloopb32 ADDS R10,R10,R5,LSR#5 LDRB R8,[R3,#-1]!: BMI loop3 .loopy CMP R9,R7 STRLTB R8,[R9],#1: ADDGE R9,R9,#1: SUBS R10,R10,#&20000: BPL loopy B loop3 : .tospsp1 EQUD mapspr+16 : .validateR5act STMFD R13!,{R1,R4,R5,R14} BL gxyzptr: LDRB R4,[R1,#&2A]: B validate .validateobact STMFD R13!,{R1,R4,R5,R14} BL gxyzptr: LDRB R4,[R1,#&2A] ; object LDRB R5,[R1,#6] ; action .validate LDR R1,txyzlegal: LDR R1,[R1,R4,LSL#2] CMP R5,#numact: LDMGEFD R13!,{R1,R4,R5,R15} ; CS no good SUBS R5,R5,#8: LDMLTFD R13!,{R1,R4,R5,R15} ; CC ok MOV R1,R1,ROR R5: MOVS R1,R1,RRX LDMFD R13!,{R1,R4,R5,R15} .txyzlegal EQUD xyzlegal : .howfsty EQUD spd:.tosadsed EQUD seed .tinfoxyzl EQUD xyzinfo-&2C .ensurerestart LDR R0,tinfoxyzl .loop ADD R0,R0,#&2C LDMIA R0,{R1,R2,R3,R4} CMN R1,#2: MOVHS R15,R14 SUB R2,R0,#-(xyzblip+&10-xyzinfo) STMIA R2,{R1,R3,R4} B loop : .thisisice STMFD R13!,{R14} LDR R9,howfsty:LDR R9,[R9]: LDR R3,tosadsed:LDR R0,[R3]:.loop EORS R0,R0,R0,ROR#6 RSBCS R0,R0,R0,ROR#3: STR R0,[R3]: TST R0,#3: BLEQ hissss SUBS R9,R9,#1: BGT loop: LDMFD R13!,{R15} .hissss STMFD R13!,{R0-R12,R14}: BL flputout LDMFD R13!,{R0-R12,R15} : .scgregs EQUD got: EQUD editcopy+64 EQUD cash: EQUD levelon EQUD mapstt : .storecg ADR R2,scgregs LDMIA R2!,{R0,R1} LDMIA R0,{R5,R6,R7,R8,R9,R10} STMIA R1!,{R5,R6,R7,R8,R9,R10} LDMIA R2!,{R0,R5,R6} LDR R0,[R0]: LDRB R5,[R5]: LDR R6,[R6] STMIA R1!,{R0,R5,R6} MOV R15,R14 : .resetasb4 ADR R2,scgregs LDMIA R2!,{R0,R1} LDMIA R1!,{R5,R6,R7,R8,R9,R10} STMIA R0!,{R5,R6,R7,R8,R9,R10} LDMIA R2!,{R0,R5,R6} LDMIA R1,{R1,R2,R3} STR R1,[R0]: STRB R2,[R5]: STRB R3,[R6] B cashcopy : .amiconting LDR R0,conthy: CMP R0,#1: MOV R15,R14 .conthy EQUD 0 ; definitely not if just loaded! .trivialgame MOV R0,#0: STR R0,contiw: MOV R15,R14 .shallicont STMFD R13!,{R14}: BL sic2: STR R0,conthy: LDMFD R13!,{R15} .contiw EQUD 1 .sic2 STMFD R13!,{R14} LDR R0,contiw: RSBS R1,R0,#1: STRNE R1,contiw: LDMNEFD R13!,{R15} BL readgames: ADD R0,R0,#1: STR R0,[R1] BL notdgame BL isbank0 BL videoCl BL buildcfont BL flip2: MOV R0,#0: BL wallpaper: BL flip2 BL vsync LDR R0,bodgethisone: ADD R1,R0,#&14000: MOV R2,R1 .loop LDMIA R0!,{R3,R4,R5,R6,R7,R8,R9,R10} STMIA R1!,{R3-R10}: CMP R0,R2: BNE loop ; R0 on exit=0 for no, 1 for yes MOV R0,#9 LDR R1,offsetcg: BL hugenumber .loop BL ackesc: SWI "OS_Mouse": TST R2,#7: BNE loop MOV R0,#&81: MOV R1,#1: MOV R2,#0: SWI "OS_Byte" CMP R2,#&FF: BNE loop BL ackesc MOV R0,#9 .loop1 STMFD R13!,{R0} BL vsync LDR R0,offsetcg2 MOV R1,#16*3: MOV R2,#16*5+1: BL getbck LDR R1,offsetcg LDMFD R13,{R0} ; no write back BL hugenumber SWI "XOS_ReadMonotonicTime": ADD R5,R0,#100 .loop BL scanesc:.nopey MOVEQ R0,#0: LDMEQFD R13!,{R1,R15} BL testfirebuts BNE okcont SWI "OS_Mouse": TST R2,#7: BNE okcont MOV R0,#&81: MOV R1,#1: MOV R2,#0: SWI "OS_Byte" CMP R2,#&FF: BEQ tout: CMP R2,#&1B: BNE okcont: BEQ nopey:.tout SWI "XOS_ReadMonotonicTime": CMP R0,R5 BLT loop LDMFD R13!,{R0} SUBS R0,R0,#1: BPL loop1 MOV R0,#0: LDMFD R13!,{R15} .bodgethisone EQUD &1FC0000 ; bodged .offsetcg EQUD &1FC0000+224+158*320 ; bodged .offsetcg2 EQUD !offsetcg-&141-&1FC0000 ; no need to bodge .okcont MOV R0,#1: LDMFD R13!,{R1,R15} : .toudigi EQUD utext+48*5 .hugenumber ; R0 = number ; R1 = screen address ADR R5,hnconv: LDRB R4,[R5,R0,LSL#1]!: LDRB R5,[R5,#1] ; R4=len;R5=start LDR R6,numbersat ADD R6,R6,R5: MOV R7,#47 ; height .loop SUB R8,R4,#1:.loop2 LDRB R9,[R6,R8]: MOVS R9,R9: STRNEB R9,[R1,R8] SUBS R8,R8,#1: BGE loop2 ADD R6,R6,#244: ADD R1,R1,#&140:SUBS R7,R7,#1: BNE loop MOV R15,R14 .hnconv EQUB 25: EQUB 217: EQUB 15: EQUB 0: EQUB 26: EQUB 15 EQUB 25: EQUB 41: EQUB 25: EQUB 66: EQUB 26: EQUB 91 EQUB 25: EQUB 117: EQUB 24: EQUB 142: EQUB 26: EQUB 166 EQUB 25: EQUB 192: ALIGN .levchans EQUD &10B80+0+&140*20: EQUD 56: EQUD 18: EQUD 0 EQUD &10B80+95+&140*20: EQUD 56: EQUD 18: EQUD 0 EQUD &10B80+191+&140*20: EQUD 80: EQUD 18: EQUD 0 EQUD -1 .lllzchans EQUD &10B80+2+&140*1: EQUD 170: EQUD 23: EQUD 0 EQUD -1 .zsdata EQUD 33+&140*20: EQUD 252: EQUD 57: EQUD 0 EQUD -1 .platedata EQUD 76-ipo/4+&140*52: EQUD 90: EQUD 28: EQUD 0 EQUD 76-ipo/4+&140*84: EQUD 90: EQUD 28: EQUD 0 EQUD 159+&140*52: EQUD 96: EQUD 19: EQUD 0 EQUD 159+&140*75: EQUD 96: EQUD 17: EQUD 0 EQUD 159+&140*96: EQUD 96: EQUD 16: EQUD 0 EQUD 64+&140*116: EQUD 191: EQUD 22: EQUD 0 .biglsz MOV R0,#230: STR R0,lllzchans+4: MOV R15,R14 .smllsz MOV R0,#170: STR R0,lllzchans+4: MOV R15,R14 .znechans EQUD &10B80+0+&140*20: EQUD 80: EQUD 18: EQUD 2 EQUD &10B80+95+&140*20: EQUD 64: EQUD 18: EQUD 2 EQUD &10B80+191+&140*20: EQUD 100: EQUD 18: EQUD 0 ; author field is quite long ; next MUST be a top bit set instruction or constant .upromls STMFD R13!,{R10,R14}: BL lszlsschan LDMFD R13,{R10,R14}: BL uprompt: LDMFD R13!,{R10,R15} .lszlsschan ADR R12,lllzchans: B doborders .levchannels ADR R12,levchans: B doborders .anotbase1 EQUD base1 .znechannels STMFD R13!,{R14}: BL idontknowok: MOVS R0,R0 LDMFD R13!,{R14} MOVNE R0,#2: STR R0,znechans+12+16: STR R0,znechans+12+32 ADR R12,znechans ; fall into doborders .doborders ; address; width; height; type ; border types ; 0- channel ; 1- ridge ; 2- recessed ; 3- raised ; 4- major channel ; 5- major ridge ; 255- no border .loop LDMIA R12!,{R0,R1,R2,R11}: MOVS R0,R0: MOVMI R15,R14 LDR R3,anotbase1: LDR R3,[R3]: ADD R0,R0,R3 TST R11,#1 MOVEQ R3,#&2F: MOVEQ R4,#&D1: MOV R5,#&D0 MOVNE R4,#&2F: MOVNE R3,#&D1 STMFD R13!,{R12,R14} MOVS R11,R11,ASR#1: BLEQ ridge CMP R11,#1: BLEQ recess CMP R11,#2: BLEQ majorridge LDMFD R13!,{R12,R14} B loop .plateos EQUD scrnbot .zsbords STMFD R13!,{R14}: BL idontknowok: MOVS R0,R0 LDMFD R13!,{R14} MOVNE R0,#2: STR R0,zsdata+12 ADR R12,zsdata: B bribord .platebords ; data as doborders ADR R12,platedata:.bribord:.loop LDMIA R12!,{R0,R1,R2,R11}: MOVS R0,R0: MOVMI R15,R14 LDR R3,plateos: LDR R3,[R3]: ADD R0,R0,R3 TST R11,#1 MOVEQ R3,#&D0: MOVEQ R4,#&D2: MOV R5,#&D1 MOVNE R4,#&D0: MOVNE R3,#&D2 STMFD R13!,{R12,R14} MOVS R11,R11,ASR#1: BLEQ ridge CMP R11,#1: BLEQ recess CMP R11,#2: BLEQ majorridge LDMFD R13!,{R12,R14} B loop .recess ; regs as ridge MOV R12,R5: MOV R5,R1: MOV R6,R2: MOV R7,R0: MOV R8,R0 .loop STRB R3,[R7],#1: SUBS R5,R5,#1: BGE loop: STRB R3,[R7],#1 .loop STRB R3,[R8],#&140: SUBS R6,R6,#1: BGE loop: STRB R3,[R8],#&140 STRB R12,[R7],#&140: STRB R12,[R8],#1 .loop STRB R4,[R8],#1: SUBS R1,R1,#1: BGE loop: STRB R4,[R8],#1 .loop STRB R4,[R7],#&140: SUBS R2,R2,#1: BGE loop: STRB R4,[R7],#&140 MOV R15,R14 : .majorridge STMFD R13!,{R0-R5,R14} ADD R0,R0,#&280: ADD R0,R0,#2 SUB R2,R2,#4: SUB R1,R1,#4: BL ridge LDMFD R13!,{R0-R5,R14} ; fall into ridge .ridge ; R0 = address ; R1 = width ; R2 = height ; R3 = top ; R4 = bottom ; R5 = mid MOV R12,R5 MOV R5,R1: MOV R6,R2: MOV R7,R0: MOV R8,R0 ADD R9,R8,#&140: ADD R9,R9,#1: MOV R10,R9 .loop STRB R3,[R7],#1: STRB R4,[R9],#1: SUBS R5,R5,#1 BGT loop: STRB R3,[R7],#1: STRB R3,[R7],#1 .loop STRB R3,[R8],#&140: STRB R4,[R10],#&140: SUBS R6,R6,#1 BGT loop: STRB R3,[R8],#&140: STRB R3,[R8],#&140 STRB R12,[R9],#&140: STRB R12,[R7],#&140 STRB R12,[R8],#1: STRB R12,[R10],#1 .loop STRB R4,[R8],#1: STRB R3,[R10],#1: SUBS R1,R1,#1 BGT loop: STRB R4,[R8],#1: STRB R4,[R8],#1 .loop STRB R4,[R7],#&140: STRB R3,[R9],#&140: SUBS R2,R2,#1 BGT loop: STRB R4,[R7] MOV R15,R14 ; .funnies ; xyzinfo; old x; old y; old z; need x; need y; need z ; old xv; old yv; old zv ]:P%+=numfunnyxyzs*40:[OPT T ; next should be a top bit set instruction !!!!!!!!!!!!!!!! .clrfunnyxyz ADR R1,funnies: MOV R2,#0: MOV R3,#numfunnyxyzs:.loop STR R2,[R1],#40: SUBS R3,R3,#1: BNE loop: MOV R15,R14 : .funnyxyz STMFD R13!,{R0} ; R0 to info, R1 is xyz object LDRB R2,[R0,#7]: TST R2,#&80: BNE retfunxyz2 ; delay before trying ADR R2,funnies:.funnyloop LDR R3,[R2],#40: CMP R3,R0: BEQ doingsummut MOVS R3,R3: BPL funnyloop LDMIA R0,{R2,R3,R4} MOV R2,R2,LSL#12: MOV R2,R2,LSR#12 AND R12,R3,#&FF: ADD R4,R4,R12,LSL#5 MOV R4,R4,ASR#10: RSBS R5,R4,#15 BMI retfunxyz2: CMP R5,#16: BGE retfunxyz2: LDR R3,[R2,R5,LSL#1] TST R3,#&FF00: BNE retfunxyz2 AND R3,R3,#&FF MOV R6,#80: CMP R1,#cashsteal: MOVEQ R6,#24 CMP R1,#bombdetonate: MOVEQ R6,#22 CMP R1,#scoresteal: MOVEQ R6,#26 CMP R3,R6: BNE retfunxyz2 ; right! xyz at R0 is gonna grab an R6 LDR R3,[R2,#&2C]: MOV R3,R3,ASR#21: ORR R6,R2,R3,LSL#20 ADR R2,funnies:.loop LDR R3,[R2],#40: MOVS R3,R3: BMI retfunxyz2 BNE loop SUB R12,R2,#40: LDR R1,[R0,#8]: LDR R2,[R0,#12]: LDR R3,[R0] MOV R4,R4,LSL#10: ADD R4,R4,#&200: MOV R5,#0 LDRB R8,[R0,#4]: SUB R4,R4,R8,LSL#5 STMFD R13!,{R12} STMIA R12,{R0,R1,R2,R3,R4,R5,R6} BL readvel897: STR R8,[R12,#28]: STR R9,[R12,#32]: STR R7,[R12,#36] B doingsummutA .doingsummut SUB R2,R2,#40 STMFD R13!,{R2} LDMIA R2,{R0,R1,R2,R3,R4,R5,R6} .doingsummutA BL readvel897 ; got just about everything! LDR R1,[R0,#8]: LDR R2,[R0,#12]: LDR R3,[R0] STMFD R13!,{R3-R5} MOV R5,R3: MOV R3,R6: BL subcomp SUB R7,R7,R7,ASR#2: ADD R7,R7,R12,ASR#7 LDR R3,[R0] SUB R4,R0,#xyzinfo-xyzblip: STR R7,[R4] BL addcomp: STR R4,[R0] LDMFD R13!,{R3-R5} ; x add = R4-R1 ; y add = R5-R2 ; z add = R6-R3 SUB R4,R4,R1: SUB R6,R5,R2 RSBS R12,R6,#0: CMPLT R6,#128: MOVLT R6,#128 RSBS R12,R6,#0: CMNGT R6,#128: MVNGT R6,#127 SUB R8,R8,R8,ASR#4: SUB R9,R9,R9,ASR#4 ADD R8,R8,R4,ASR#5: ADD R9,R9,R6,ASR#7 ; can't be bothered with z motion - too hard! SUB R4,R0,#xyzinfo-xyzblip STMIB R4,{R8,R9} ; write back velocity ADD R1,R1,R8: STR R1,[R0,#8] ADDS R2,R2,R9: RSBMI R12,R2,#0: MOVPL R12,R2: STR R12,[R0,#12] CMP R5,#0: BEQ nofinfun SUB R5,R5,#&40: CMP R2,R5 ADD R5,R5,#&80: CMPGE R5,R2: BLT nofinfun LDMFD R13,{R12} ; no write back!! LDR R5,[R12,#16]: SUB R5,R5,#&40: CMP R1,R5 ADD R5,R5,#&80: CMPGE R5,R1: BGE finishedfun .nofinfun MOVS R2,R2: RSBMI R7,R7,#0: STRMI R7,[R4] LDMFD R13,{R12} ; no write back!! BPL endsummut LDMMIIA R12!,{R0,R1,R2,R3} STMMIIA R12!,{R1,R2,R3} B activateandes .finishedfun ; back where we were! (almost) LDMFD R13!,{R2}: MOV R3,#0: STR R3,[R2] ADD R2,R2,#28: LDMIA R2,{R8,R9,R7} MOV R1,#&80+25; ie 1/2 second delay STRB R1,[R0,#7] STR R9,[R0,#xyzblip-xyzinfo]! STMIB R0,{R7,R8} ; fall into retfunxyz .retfunxyz LDMFD R13,{R1}: BL fullsortxyz LDMFD R13!,{R0} B backfunnyxyz .retfunxyz2 LDMFD R13!,{R0} B backfunnyxyz2 .activateandes LDMFD R13!,{R2} ; R2 to funnies LDR R0,[R2] LDMIA R0,{R2,R3,R4} MOV R2,R2,LSL#12: MOV R2,R2,LSR#12 AND R12,R3,#&FF: ADD R4,R4,R12,LSL#5 MOV R4,R4,ASR#10: RSBS R5,R4,#15 BMI retfunxyz: CMP R5,#16: BGE retfunxyz: LDR R3,[R2,R5,LSL#1] TST R3,#&FF00: BNE retfunxyz: AND R3,R3,#&FF LDRB R1,[R0,#&2A] MOV R6,#80: CMP R1,#bombdetonate: MOVEQ R6,#22 CMP R1,#cashsteal: MOVEQ R6,#24 CMP R1,#scoresteal: MOVEQ R6,#26 CMP R6,R3: BNE retfunxyz CMP R6,#22: BEQ blowfunbomb CMP R6,#24: MOVEQ R0,#25: MVNNE R0,#(-1 EOR &FFFFFF10) CMP R6,#26: MOVEQ R0,#27 STRB R0,[R2,R5,LSL#1]!: MOV R0,R0,ASR#8 STRB R0,[R2,#1]: B retfunxyz .endsummut LDMFD R13!,{R2}: B retfunxyz .blowfunbomb SUB R0,R0,#xyzinfo-xyzblip: LDR R1,[R0,#8] ADD R1,R1,#&200 ; a constant! STR R1,[R0,#8] ADD R0,R2,R5,LSL#24: ADD R0,R0,R5,LSL#1: BL detonate: B retfunxyz : .dcNFregs EQUD hispr*2 EQUD 0 ; for divide by two .bodgeanother EQUD &1FC0000+&3C000 ; bodged EQUD 0 ; sprite x EQUD 0 ; sprite y .decompresstab EQUB &F0: EQUB 0: EQUB 0: EQUB 0 EQUB &D3: EQUB 0: EQUB &FD: EQUB 0 EQUB &FF: EQUB 0: EQUB &D3: EQUB 19 EQUB &FD: EQUB 19: EQUB &FF: EQUB 19 EQUB &FD: EQUB 2: EQUB &F0: EQUB 8 EQUB &FD: EQUB 8: EQUB &FF: EQUB 1 EQUB 0: EQUB 7: EQUB &F0: EQUB 1 ALIGN .decompressNF STMFD R13!,{R14} ADR R0,dcNFregs LDMFD R0!,{R1,R2,R4,R5,R6} ; R0 to decompresstab .loop LDRB R12,[R2,R1,ASR#1]: TST R1,#1: MOVNE R12,R12,ASR#4 AND R12,R12,#&F: CMP R12,#14 ADD R1,R1,#1 BEQ aslastNF: BGT asagoNF LDR R11,[R0,R12,LSL#1] ; get data AND R12,R11,#&FF00 .loop2 BL outNFR11 SUBS R12,R12,#&100: BPL loop2 B loop .rdxxy ; R7 is substituted x ADD R8,R4,R7: ADD R8,R8,R6,LSL#8 SUB R8,R8,R6,LSL#6: LDRB R11,[R8,-R6,LSL#4] ; fall into outNFR11 .outNFR11 ADD R8,R4,R5: ADD R8,R8,R6,LSL#8 SUB R8,R8,R6,LSL#6: STRB R11,[R8,-R6,LSL#4] ADD R6,R6,#1: CMP R6,#25: MOVEQ R6,#0: ADDEQ R5,R5,#1: ADDEQ R7,R7,#1 CMP R5,#176: LDMEQFD R13!,{R15} MOV R15,R14 .asagoNF LDRB R12,[R2,R1,ASR#1]: TST R1,#1: MOVNE R12,R12,ASR#4: ADD R1,R1,#1 LDRB R11,[R2,R1,ASR#1]: TST R1,#1: MOVNE R11,R11,ASR#4: ADD R1,R1,#1 LDRB R9,[R2,R1,ASR#1]: TST R1,#1: MOVNE R9,R9,ASR#4: ADD R1,R1,#1 AND R11,R11,#&F: AND R9,R9,#&F: AND R12,R12,#&F: ADD R9,R11,R9,LSL#4 ADD R12,R12,R12,LSL#2: ADD R12,R12,R12,LSL#2 ; R9 is ago, R12 is pixels SUB R7,R5,R9 .loop1 BL rdxxy SUBS R12,R12,#1: BNE loop1 B loop .aslastNF LDRB R12,[R2,R1,ASR#1]: TST R1,#1: MOVNE R12,R12,ASR#4: ADD R1,R1,#1 AND R12,R12,#&F: ADD R12,R12,R12,LSL#2: ADD R12,R12,R12,LSL#2 MOV R10,R6 SUB R9,R5,#1: SUB R7,R5,#1:.loop1 CMP R6,R10: MOVEQ R7,R9 BL rdxxy SUBS R12,R12,#1: BNE loop1 B loop : .sfloop1 ADDS R3,R3,R9: ADDMI R10,R10,R4: BMI sfork:.sfloop4 MOV R2,R0 MOV R7,R4: SUB R8,R8,#&140: MOV R1,R8 CMP R1,R13: BLT sloop6 CMP R1,R11: ADD R10,R10,R7: BGE sforkie:.sfloop2 ADDS R2,R2,R9: BMI sfork2: LDRB R14,[R10,-R7]: MOVS R14,R14 BEQ sfnoseexyz:.sfloop3 STRB R14,[R1],#1: SUBS R2,R2,#&200000: BPL sfloop3 .sfork2 SUBS R7,R7,#1: BNE sfloop2 .sforkie SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL sfloop4 .sfork SUBS R5,R5,#1: BNE sfloop1 B sloop6 : .bsfloop1 ADDS R3,R3,R9: ADDMI R10,R10,R4: BMI bsfork:.bsfloop4 MOV R2,R0 MOV R7,R4: SUB R8,R8,#&140: MOV R1,R8 CMP R1,R13: BLT sloop6 CMP R1,R11: ADD R10,R10,R7: BGE bsforkie:.bsfloop2 ADDS R2,R2,R9: BMI bsfork2: LDRB R14,[R10,-R7]: MOVS R14,R14 BEQ bsfnoseexyz STRB R14,[R1],#1: SUBS R2,R2,#&200000 .bsfloop3 STRPLB R14,[R1],#1: SUBPLS R2,R2,#&200000: BPL bsfloop3 .bsfork2 SUBS R7,R7,#1: BNE bsfloop2 .bsforkie SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL bsfloop4 .bsfork SUBS R5,R5,#1: BNE bsfloop1 B sloop6 : .sfnoseexyz ADD R1,R1,R2,LSR#21 BIC R2,R2,#&FE00000: SUB R2,R2,#&200000: ADD R1,R1,#1 SUBS R7,R7,#1: BNE sfloop2 CMP R1,R11: BGE sloop6 SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL sfloop4 SUBS R5,R5,#1: BNE sfloop1: B sloop6 : .bsfnoseexyz ADD R1,R1,R2,LSR#21 BIC R2,R2,#&FE00000: SUB R2,R2,#&200000: ADD R1,R1,#1 SUBS R7,R7,#1: BNE bsfloop2 CMP R1,R11: BGE sloop6 SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL bsfloop4 SUBS R5,R5,#1: BNE bsfloop1: B sloop6 : .TAFregs EQUD thatsallfolks EQUD numofscrs EQUD map .ensureTAF ; this wouldn't be necessary if garbage didn't keep appearing ; I don't think it occurs any more, but ... ADR R0,TAFregs: LDMIA R0,{R0,R1,R2} LDR R1,[R1] .loop ADD R2,R2,#64:.loop2 LDR R3,[R2],#4: CMN R3,#1: BNE loop2 SUBS R1,R1,#1 BGT loop LDMIA R2,{R5,R6,R7,R8} LDMIA R0,{R0,R1,R3,R4} CMP R5,R0: CMPEQ R6,R1: CMPEQ R7,R3: CMPEQ R8,R4: SWINE &107 STMIA R2,{R0,R1,R3,R4} MOV R15,R14 : .usinfothenblip STMFD R13!,{R14} BL unishift SUB R0,R0,#xyzinfo-xyzblip SUB R1,R1,#xyzinfo-xyzblip SUB R2,R2,#xyzinfo-xyzblip LDMFD R13!,{R14}: B unishift : .dbregs EQUD -&20000 ; x destroy position .xyzinfstart EQUD xyzinfo-&2C EQUD mapptr EQUD (mapcopy<<12) ; not +&40 since let it go back 1 tile .endoftrkdS EQUD mapcopy+&10+&2C .dsssy EQUD mapcopy+&10+&2C : .findeotdS LDR R9,dsssy .loop LDR R7,[R9,#&30]!: CMP R7,#0: BNE loop SUB R9,R9,#&60: MOV R9,R9,LSL#12: STR R9,endoftrkdS MOV R15,R14 : .destroySht STMFD R13!,{R14} ADR R0,dbregs: LDMIA R0,{R0,R1,R6,R8,R9} LDR R6,[R6]: MOV R6,R6,LSL#12 ADD R7,R6,#(&30*10)<<12 SUB R6,R6,#(&30*10)<<12 .loop LDR R2,[R1,#&2C]!: CMN R2,#2: LDMHSFD R13!,{R15} LDR R10,[R1,#&10+xyzblip-xyzinfo]: CMN R10,#1: BNE loop LDR R2,[R1,#&14+xyzblip-xyzinfo]: CMP R2,#&15<<16: BNE loop LDMIA R1,{R2,R3,R4,R5} MOV R2,R2,LSL#12: CMP R2,R6: BLO killbul CMP R2,R7: BHI killbul CMP R2,R8: BLO killbul ; beginning CMP R2,R9: BHI killbul ; chessboard CMP R4,#&20000: CMPLT R0,R4: CMPLT R5,#&4000 ; y BLT loop:.killbul STR R10,[R1]: STMFD R13!,{R0,R1,R6,R7,R8,R9} BL sortxyzatR1: LDMFD R13!,{R0,R1,R6,R7,R8,R9} SUB R1,R1,#&2C B loop : .torecoiled EQUD recoiled .recoilsize EQUD rclbufsize .tfunnies EQUD funnies : .thisisthesort STMFD R13!,{R0-R6,R14} ; R0 is dest, R1 is source end, R2 is source SUB R0,R0,R2 LDR R3,tfunnies:.loop LDR R4,[R3],#40: CMP R4,#0: BLT endlists CMP R4,R1: CMPEQS R15,#0 ; ie force GT CMPLE R2,R4: ADDLE R4,R4,R0: STRLE R4,[R3,#-40] B loop:.endlists LDR R5,recoilsize LDR R3,torecoiled:.loop LDR R4,[R3],#12: SUBS R5,R5,#12: LDMEQFD R13!,{R0-R6,R15} CMN R4,#1: BEQ loop CMP R4,R1: CMPEQS R15,#0 ; ie force GT CMPLE R2,R4 ADDLE R4,R4,R0: STRLE R4,[R3,#-12]: B loop : .unrecoil STMFD R13!,{R14} LDR R0,torecoiled LDR R10,recoilsize .loop2 MVN R11,#0 .loop ; 0 - address of xyz /-1 empty ; 4 - (Y recoil)<<16+(X recoil) ; 8 - Z recoil ; Contents are distance MOVED by original recoil LDMIA R0!,{R1,R2,R7} SUBS R10,R10,#12: LDMEQFD R13!,{R15} CMP R1,R11: BEQ loop STR R11,[R0,#-12] LDMIA R1,{R3,R6,R8,R9} RSB R7,R7,#0: BL addcomp ; R4 is new z SUB R9,R9,R2,ASR#16: MOV R2,R2,LSL#16 SUB R8,R8,R2,ASR#16 STMIA R1,{R4,R6,R8,R9} STMFD R13!,{R0,R10}: BL fullsortxyz: LDMFD R13!,{R0,R10} B loop2 : .rstrecoil LDR R0,torecoiled: MVN R1,#0: LDR R2,recoilsize .loop STR R1,[R0],#12: SUBS R2,R2,#12: BGT loop: B clrfunnyxyz : .Rcl897at0 STMFD R13!,{R14} LDR R3,torecoiled: LDR R4,recoilsize .loop LDR R5,[R3],#12: CMP R5,R0: BEQ addrclhere SUBS R4,R4,#12: LDMLEFD R13!,{R15} ; sod it CMN R5,#1: BNE loop MOV R5,R8,LSL#16: MOV R4,R9,LSL#16 ORR R6,R4,R5,LSR#16 SUB R3,R3,#12: STMIA R3!,{R0,R6,R7} LDMFD R13!,{R15} .addrclhere SUB R3,R3,#8: LDMIA R3,{R4,R5} ADD R6,R5,R7 MOV R5,R4,LSL#16 ; R5 is (X<<16) ; R4 is (Y<<16)+crap ADD R5,R5,R8,LSL#16: ADD R4,R4,R9,LSL#16 MOV R4,R4,LSR#16: MOV R5,R5,LSR#16 ADD R4,R5,R4,LSL#16 STMIA R3,{R4,R6} LDMFD R13!,{R15} : .boxaddr EQUD &A40 .txyzsprSht EQUD xyzsprs .cmpR4R5oc CMP R4,R5: MOVEQ R0,#60: MOVNE R0,#66: B owncolz : .xyzmenu MOV R12,#192: MOV R3,#140: LDR R1,boxaddr: BL dobox BL tweakbot MOV R1,#&FF<<16 LDR R2,menucols: LDR R3,bangoes: MOV R0,#2: BL commentB .redrawxyzmenu BL gxyzptr: LDRB R4,[R1,#&2A] ; object LDR R0,obsgo: LDR R1,menucols: BL stcar MOV R5,#0 MOV R7,R0 LDR R1,tobxm:.loop3 BL cmpR4R5oc MVN R0,#0: MOV R2,R5:.loop SUBS R2,R2,#10: ADD R0,R0,#1: BGE loop CMP R0,#0: MOVEQ R0,#66 BL owncolz: ADD R0,R2,#10: BL owncolz BL ocs66 .loop2 LDRB R2,[R1],#1: AND R0,R2,#&7F: BL owncolz TST R2,#&80: BEQ loop2 ADD R7,R7,#&780: BL stcar2 ADD R5,R5,#1: CMP R5,#numobjs: BNE loop3 LDR R7,actsgo: BL stcar2 BL gxyzptr: LDRB R4,[R1,#6] LDR R1,tobxm: SUB R1,R1,#obnames-actnames MOV R5,#0 ; actual action number MOV R12,#0 ; displayed action number .loop3 BL validateR5act: BCS rubbishvoa BL cmpR4R5oc MVN R0,#0: MOV R2,R12:.loop SUBS R2,R2,#10: ADD R0,R0,#1: BGE loop CMP R0,#0: MOVEQ R0,#66 BL owncolz: ADD R0,R2,#10: BL owncolz BL ocs66 MOV R11,#13 ; maximum characters .loop2 SUB R11,R11,#1 LDRB R2,[R1],#1: AND R0,R2,#&7F: BL owncolz TST R2,#&80: BEQ loop2 .loop2 BL ocs66: SUBS R11,R11,#1: BGT loop2 ADD R7,R7,#&780: BL stcar2 ADD R12,R12,#1 .xzloop ADD R5,R5,#1: CMP R5,#numact: BNE loop3 .loop3 MOV R11,#16:.loop2 BL ocs66: SUBS R11,R11,#1: BGT loop2 ADD R7,R7,#&780: BL stcar2 ADD R12,R12,#1: CMP R12,#maxacts: BLT loop3 BL gxyzptr: MOV R5,R4: BL registeractR5 .loop SWI "OS_Mouse": CMP R2,#0: BNE loop .loop BL testkeys: CMP R1,#27: CMPNE R1,#ASC("Q"): CMPNE R1,#ASC("q") BEQ exitxm SWI "OS_Mouse": CMP R2,#0: BEQ loop CMP R0,#256: RSBGES R4,R0,#(256+192*4) CMPGE R1,#(992-140*4): RSBGES R4,R1,#992 BLT exitxm RSBS R1,R1,#920 CMPGE R0,#&50*4: RSBGES R4,R0,#1000: BLT loop CMP R0,#&90*4: MOV R0,R1: MOV R1,#24: BGT isanacti BL divide32 CMP R2,#numobjs: BGE loop BL gxyzptr: MOV R4,R2: BL registerobR4 B redrawxyzmenu .isanacti BL divide32 MVN R5,#0:.loop2 ADD R5,R5,#1 CMP R5,#100: BGT loop BL validateR5act SUBCC R2,R2,#1: CMP R2,#0: BPL loop2 BL gxyzptr: BL registeractR5: B redrawxyzmenu .exitxm ; ensure rest of xyzinfo agrees BL untweak B xyzloop2 : .rubbishvoa CMP R4,R5: ADDEQ R4,R4,#1 .loop2 LDRB R2,[R1],#1: TST R2,#&80: BEQ loop2 B xzloop : .tobxm EQUD obnames .bangoes EQUD 15*&140+&60 .obsgo EQUD 26*&140+&50 .actsgo EQUD 26*&140+&98 .menucols EQUD &D12D2C01 .maxSht EQUD xyzinfo+xyzinfoalloc+4 ; -1 can be here-4, but no higher .Sht ; R0 to xyzinfo+..., R11 to first parameter STMFD R13!,{R0,R11} MOV R2,R0: ADD R0,R0,#&2C: MOV R1,R2 .loop LDR R3,[R1,#&2C]!: CMN R3,#2: BLO loop ADD R1,R1,#4 LDR R3,maxSht: CMP R1,R3: BGT exitSht : BL usinfothenblip LDMIA R0,{R1,R2,R3} ; xyzblip+&2C+... RSB R1,R1,#0 RSB R2,R2,#0 RSB R3,R3,#0 STMIA R0,{R1,R2,R3} MVN R1,#0: STR R1,[R0,#&20]: STR R1,[R0,#&24] STR R1,[R0,#&10] ; -1 at start composite map will ; force to end at reinit and cause (-1=end) MOV R1,#&15<<16: STR R1,[R0,#&14] ADD R0,R0,#xyzinfo-xyzblip LDRB R1,[R11],#1: LDRB R11,[R11] LDR R2,txyzbo: LDR R4,[R2,R1,LSL#3]! BIC R3,R4,#&FF0000: ORR R3,R3,R11,LSL#16 STR R3,[R0,#4] MOV R4,R4,LSR#16: STRB R4,[R0,#&20] LDR R3,[R2,#4]: BIC R3,R3,#&FF<<24 LDR R4,txyzsprSht: ADD R3,R3,R4 STR R3,[R0,#&18]: STR R3,[R0,#&1C] LDRB R4,[R2]: LDRB R5,[R2,#1]: LDRB R3,[R0,#4-&2C]: LDRB R6,[R0,#5-&2C] SUB R3,R3,R4: SUB R6,R6,R5 LDR R10,[R0,#8]: ADD R10,R10,R3,LSL#5: STR R10,[R0,#8] LDR R10,[R0,#12]: ADD R10,R10,R6,LSL#5: STR R10,[R0,#12] MUL R4,R5,R4: ORR R4,R4,R1,LSL#16 STR R4,[R0,#&28] ; displayed animation is zero BL getaction11: SUB R0,R0,#xyzinfo-xyzblip STR R11,[R0,#12]: STR R11,[R0,#&1C]: STR R11,[R0,#&28] MOV R0,#9: MOV R1,#16:BL doeffect .exitSht LDMFD R13!,{R0,R11}: ADD R11,R11,#2 MOV R12,#0 B Nll .exitSht LDMFD R13!,{R0,R11}: ADD R11,R11,#2 MOV R12,#0 B Nll : .txyzbo EQUD xyzobs : .scaleXYZ MOVS R1,R2,ASR#4: MOVEQ R15,R14: STMFD R13!,{R0,R14} MOV R0,R7: BL divide32: MOV R7,R2 MOV R0,R8: BL divide32: MOV R8,R2 MOV R0,R9: BL divide32: MOV R9,R2 LDMFD R13!,{R0,R15} .sqr ; calc R2 as sqr(R12) MOVS R6,#1 MOV R2,#0 .loop1 MOVLTS R6,R6,LSL#2: MOVEQ R15,R14 CMP R6,R12 MOVLT R6,R6,LSL#2 CMPLT R6,R12 BLT loop1 .loop2 ]:FORT1=0 TO 7:[OPT T ADD R4,R6,R2 MOV R2,R2,LSR#1 CMP R12,R4 SUBGE R12,R12,R4 ADDGE R2,R2,R6 MOVS R6,R6,LSR#2 BEQ outloop3 ]NEXT [OPT T B loop2 .outloop3 CMP R2,R12 ADDLT R2,R2,#1 MOV R15,R14 .tbhit EQUD height .whereball EQUD mapptr .ballthru EQUD index .tI994A EQUD I .wherebigws EQUD bigwaste .xyztohome ; regs as xyztoball STMFD R13!,{R14} CMP R6,#&200000: BGE outhere SUB R7,R0,#-(xyzblip+&10-xyzinfo): LDMIA R7,{R7,R8,R9} RSB R9,R6,R9: MOV R9,R9,ASR#1: RSB R8,R5,R8 MOV R5,R7: B xtbin ; : .xyztoball ; on entry; R3-comp, R5-x, R6-y, R0 to info ; on exit; R7 - Z distance, R8 - X, R9 - Y ; R12 - total square of distance STMFD R13!,{R14} LDR R12,tbhit: LDR R12,[R12]: CMP R12,#0: MOVMI R12,#0 ADD R12,R12,#10<<9 CMP R6,#&200000:.outhere MOVGE R7,#0: MOVGE R8,#0: MOVGE R9,#0: MOVGE R12,#1 LDMGEFD R13!,{R15} RSB R9,R6,R12,ASR#3 MOV R9,R9,ASR#1 CMP R12,#&200000: MOVGT R9,#0 LDRB R6,[R0,#5] SUB R9,R9,R6,LSL#5 LDRB R12,[R0,#4]: ADD R5,R5,R12,LSL#5 LDR R12,tI994A: LDR R12,[R12] RSB R12,R12,#&1000 RSB R8,R5,R12,LSL#2 LDR R12,whereball: LDR R12,[R12] LDR R5,wherebigws: CMP R12,R5: BGE outhere LDR R5,ballthru: LDR R5,[R5]: MOV R5,R5,LSR#20 ADD R5,R12,R5,LSL#20 .xtbin BL subcomp RSB R7,R12,#0: MOV R5,R12,ASR#18: MUL R12,R5,R5 MOV R5,R8,ASR#3: MLA R12,R5,R5,R12 MOV R5,R9,ASR#2: MLA R12,R5,R5,R12 LDMFD R13!,{R15} : .addcomp ; R4(comp)=R7(distance)+R3(comp) ; R5,R12 as workspace BIC R5,R3,#&FF<<24: BIC R5,R5,#&F<<20 CMP R7,#0: MOVEQ R4,R3: MOVEQ R15,R14: BLT towardsviewer .loop MOV R4,R3: SUBS R3,R3,R7: BPL recombineac ADD R5,R5,#48: LDR R3,[R5,#&2C]: CMP R3,#0: MVNEQ R7,#0 SUBNE R7,R7,R4 BNE loop .towardsviewer LDR R12,[R5,#&2C]: SUB R4,R12,R3: SUB R3,R3,R7: CMP R3,R12 BLT recombineac MOV R3,#0: ADD R7,R7,R4: SUB R5,R5,#48: B towardsviewer .recombineac MOV R3,R3,LSR#20 ADD R4,R5,R3,LSL#20: MOV R15,R14 : .subcomp ; R12(distance)=R3(comp)-R5(comp) ; use R6,R4 SUB R12,R5,R3 BIC R6,R3,#&FF<<24: BIC R6,R6,#&F<<20 BIC R4,R5,#&FF<<24: BIC R4,R4,#&F<<20 CMP R6,R4: BLT negadist .findic CMP R4,R6: MOVGE R15,R14 ADD R4,R4,#48: LDR R3,[R4,#&2C]: ADD R12,R12,R3 CMP R12,#&20<<24: MOVGE R12,#&20<<24: MOVGE R15,R14 B findic .negadist CMP R4,R6: MOVLE R15,R14 ADD R6,R6,#48: LDR R3,[R6,#&2C]: SUB R12,R12,R3 CMN R12,#&20<<24: MVNLT R12,#&20<<24: MOVLT R15,R14 B negadist : ; can corrupt R4,R12 .readwordR7 ANDS R4,R11,#3 LDREQ R7,[R11],#4: MOVEQ R15,R14 BIC R12,R11,#3: LDMIA R12,{R7,R12} ADD R11,R11,#4 MOV R4,R4,LSL#3: MOV R7,R7,LSR R4 RSB R4,R4,#&20: ORR R7,R7,R12,LSL R4: MOV R15,R14 : .readwordR8 ANDS R4,R11,#3 LDREQ R8,[R11],#4: MOVEQ R15,R14 BIC R12,R11,#3: LDMIA R12,{R8,R12} ADD R11,R11,#4 MOV R4,R4,LSL#3: MOV R8,R8,LSR R4 RSB R4,R4,#&20: ORR R8,R8,R12,LSL R4: MOV R15,R14 : .readwordR9 ANDS R4,R11,#3 LDREQ R9,[R11],#4: MOVEQ R15,R14 BIC R12,R11,#3: LDMIA R12,{R9,R12} ADD R11,R11,#4 MOV R4,R4,LSL#3: MOV R9,R9,LSR R4 RSB R4,R4,#&20: ORR R9,R9,R12,LSL R4: MOV R15,R14 : .getaction11 STMFD R13!,{R0-R1,R14} MOVS R0,R11: LDR R11,tblipdata: LDMEQFD R13!,{R0-R1,R15} .loop LDRB R1,[R11],#1: CMP R1,#&C0: ADDGE R11,R11,#4 CMPNE R1,#&C4: ADDEQ R11,R11,#8 CMP R1,#16: ADDEQ R11,R11,#2 CMP R1,#&1B: CMPNE R1,#6 CMPNE R1,#&B: CMPNE R1,#&44: CMPNE R1,#&45 ADDEQ R11,R11,#1 CMP R1,#5: BNE loop SUBS R0,R0,#1: BNE loop LDMFD R13!,{R0-R1,R15} : .firstobrst EQUD xyzobs+7 .resetxyzs STMFD R13!,{R14} BL rstrecoil LDR R11,firstobrst MOV R12,#0 .reloadR0 LDR R0,txyzinfobt .loop LDR R1,[R0,#&2C]!: CMN R1,#2: LDMHSFD R13!,{R15} LDRB R1,[R0,#&2A]: LDRB R1,[R11,R1,LSL#3] MOV R4,R0 TST R1,#&80: BLEQ exeRet CMP R4,R0: BNE reloadR0 B loop : .txyzinfobt EQUD xyzinfo-&2C .tblipdata EQUD blipdata .globaltrigger EQUD 0 .errorbt EQUD 0 .howmanytimes EQUD spd : .BlipTracker LDR R0,txyzinfobt: LDR R0,[R0,#&2C]: CMN R0,#2: MOVHS R15,R14 STMFD R13!,{R14} BL unrecoil BL destroySht LDR R0,howmanytimes: LDR R0,[R0]: LDR R1,errorbt ADD R0,R0,R1: AND R1,R0,#1: STR R1,errorbt MOVS R0,R0,ASR#1 .loop BEQ chkendxy STMFD R13!,{R0} BL Blip1vsync LDMFD R13!,{R0} SUBS R0,R0,#1: B loop .globaltrig MOV R0,#1: STR R0,globaltrigger: MOV R15,R14 : .chkendxy LDR R0,globaltrigger: CMP R0,#1: MOVEQ R0,#0 STREQ R0,globaltrigger: LDMFD R13!,{R15} .Blip1vsync STMFD R13!,{R14} LDR R0,txyzinfobt:.loop .backfunnyxyz LDR R1,[R0,#&2C]!: CMN R1,#2: BHS continueBt LDRB R1,[R0,#&2A] CMP R1,#bombdetonate: CMPNE R1,#lockopener: CMPNE R1,#cashsteal: CMPNE R1,#scoresteal: BEQ funnyxyz .backfunnyxyz2 LDRB R2,[R0,#&22]: SUBS R2,R2,#1: STRPLB R2,[R0,#&22] B loop .continueBt LDR R0,txyzinfobt .bliploop LDR R1,[R0,#&2C]!: CMN R1,#2: LDMHSFD R13!,{R15} LDR R11,[R0,#xyzblip-xyzinfo+&C] .inexecute ; execute one instruction for blip ; R0 points to its xyzinfo ; R11 to program step ; LDRB R2,[R0,#7]: SUBS R2,R2,#1: STRPLB R2,[R0,#7] LDRB R2,[R0,#&22]: CMP R2,#0: BGT bliploop LDR R7,globaltrigger: CMP R7,R0: MOV R12,#0 STREQ R12,globaltrigger LDRB R2,[R11],#1: MOV R7,R2: CMP R2,#&40 SUBGE R7,R7,#&40-(conditionals-opaddrs)/4 CMP R2,#&C0:SUBGE R7,R7,#&80-(vectors-conditionals)/4 LDMIA R0,{R3,R4,R5,R6} STMFD R13!,{R3,R4,R5,R6} ; record info block also! LDR R15,[R15,R7,LSL#2] MOV R0,R0 .opaddrs EQUD Lbl: EQUD Gto: EQUD Dtn: EQUD WGT: EQUD Mve: EQUD End EQUD Sub: EQUD Awy: EQUD Rnd: EQUD WNT: EQUD Ran: EQUD WPC EQUD WPS: EQUD AGT: EQUD Dly: EQUD DlR: EQUD Sht: EQUD Opp EQUD Nll: EQUD Sme: EQUD Ml2: EQUD Ml3: EQUD Ml4: EQUD Ml5 EQUD Ml6: EQUD Ml7: EQUD Ret: EQUD For: EQUD Nxt: EQUD Skp EQUD M14: EQUD M12: EQUD M34: EQUD OpX: EQUD OpY: EQUD OpZ EQUD AdM: EQUD Rcl: EQUD RcS: EQUD Hme: EQUD Far: EQUD SHm .conditionals EQUD Lft: EQUD Rgt: EQUD NLt: EQUD NRt: EQUD XPC: EQUD XPF EQUD XHC: EQUD XHF .vectors EQUD XYZ: EQUD XXX: EQUD YYY: EQUD ZZZ: EQUD Add: EQUD AdX EQUD AdY: EQUD AdZ ; ; R0 to xyzinfo - preserve ; R11 to program step being executed +1 - preserve ; R2 is instruction opcode being executed ; R3 is composite address ; R5 is x position ; R6 is y position ; set R12 to distance moved, Z; originally zero : .WPS BL findballspd: CMP R2,#&14000: SUBGT R11,R11,#1: MOV R12,#0: B Nll : .Hme BL xyztohome: BL sqr: BL scaleXYZ B rdmoveit .SHm BL xyztohome: BL sqr: BL scaleXYZ: MOV R2,R2,LSL#1 B rdmoveit .Mve BL xyztoball: BL sqr: BL scaleXYZ B rdmoveit .AdM BL xyztoball: BL sqr: MOV R2,R2,LSL#2: BL scaleXYZ LDMIA R0,{R3,R4,R5,R6}: B addmoveit .Far BL xyztohome: BL sqr: RSB R2,R2,#0: BL scaleXYZ B rdmoveit .Awy BL xyztoball: BL sqr: RSB R2,R2,#0: BL scaleXYZ B rdmoveit .RcS BL xyztoball: BL sqr: RSB R2,R2,#0: MOV R2,R2,LSL#1: B inRcl .Rcl BL xyztoball: BL sqr: RSB R2,R2,#0 .inRcl BL scaleXYZ BL Rcl897at0 B rdmoveit .WPC BL xyztoball: LDRB R1,[R11],#1: CMP R12,R1,LSL#16: SUBGT R11,R11,#2 B Nll .XHC BL xyztohome: LDRB R1,[R11],#1: CMP R12,R1,LSL#16: MOV R12,#0 BGE Skp: B execute .XPC BL xyztoball: LDRB R1,[R11],#1: CMP R12,R1,LSL#16: MOV R12,#0 BGE Skp: B execute .XHF BL xyztohome: LDRB R1,[R11],#1: CMP R12,R1,LSL#16: MOV R12,#0 BLT Skp: B execute .XPF BL xyztoball: LDRB R1,[R11],#1: CMP R12,R1,LSL#16: MOV R12,#0 BLT Skp: B execute .Dtn MOV R5,#&7F<<24: STR R5,[R0,#12]: B Nll .Ret BL exeRet: ADD R13,R13,#16: B inmvedNll .exeRet STMFD R13!,{R4,R11,R12,R14} SUB R8,R0,#xyzinfo-xyzblip STR R12,[R8]: STR R12,[R8,#4]: STR R12,[R8,#8] LDR R6,[R8,#&14]: STR R6,[R0,#8] LDR R6,[R8,#&18]: STR R6,[R0,#12] LDR R6,[R8,#&24]: CMN R6,#1 LDREQ R6,[R8,#&20]: CMN R6,#1 LDREQ R6,[R8,#&1C]: STR R6,[R8,#&0C]: STR R6,[R8,#&1C] MVN R6,#0: STR R6,[R8,#&20]: STR R6,[R8,#&24] LDR R6,[R8,#&10]: LDR R1,[R0]: CMP R6,R1: STRNE R6,[R0] MOV R1,R0 ADD R2,R0,#&2C BLNE fullsortxyz: SUB R0,R2,#&2C: LDMFD R13!,{R4,R11,R12,R15} : .Rnd STMFD R13!,{R0}: BL getrand: TST R0,#&10: LDMFD R13!,{R0} BEQ Skp: B execute .Ran STMFD R13!,{R0} BL getrand: AND R0,R0,#&FF: SUB R0,R0,#&80: MOV R7,R0,LSL#16 BL getrand: AND R0,R0,#&FF: SUB R0,R0,#&80: MOV R8,R0,LSL#2 BL getrand: AND R0,R0,#&FF: SUB R0,R0,#&80: MOV R9,R0,LSL#1 LDMFD R13!,{R0}: B moveit .Skp LDRB R1,[R11],#1 CMP R1,#16: ADDEQ R11,R11,#2 CMP R1,#6: CMPNE R1,#&1B CMPNE R1,#&B: CMPNE R1,#&44: CMPNE R1,#&45 ADDEQ R11,R11,#1 CMP R1,#&C0: ADDGE R11,R11,#4: CMPNE R1,#&C4: ADDEQ R11,R11,#8 B execute .Lft LDR R1,[R0,#8]: CMP R1,#0: BGT Skp: B execute .NLt LDR R1,[R0,#8]: CMP R1,#0: BLT Skp: B execute .Rgt LDR R1,[R0,#8]: CMP R1,#&4000: BLT Skp: B execute .NRt LDR R1,[R0,#8]: CMP R1,#&4000: BGT Skp: B execute .XYZ BL readwordR8: BL readwordR9: BL readwordR7: B moveit .XXX BL readwordR8: MOV R9,#0: MOV R7,#0: B moveit .YYY BL readwordR9: MOV R8,#0: MOV R7,#0: B moveit .ZZZ BL readwordR7: MOV R8,#0: MOV R9,#0: B moveit .Sme BL readvel897: B moveit .Opp BL readvel897 RSB R8,R8,#0: RSB R9,R9,#0: RSB R7,R7,#0: B moveit .Ml2 BL readvel897 MOV R8,R8,LSL#1: MOV R9,R9,LSL#1: MOV R7,R7,LSL#1: B moveit .Ml3 BL readvel897 ADD R8,R8,R8,LSL#1: ADD R9,R9,R9,LSL#1: ADD R7,R7,R7,LSL#1: B moveit .Ml4 BL readvel897 MOV R8,R8,LSL#2: MOV R9,R9,LSL#2: MOV R7,R7,LSL#2: B moveit .Ml5 BL readvel897 ADD R8,R8,R8,LSL#2: ADD R9,R9,R9,LSL#2: ADD R7,R7,R7,LSL#2: B moveit .Ml6 BL readvel897 ADD R8,R8,R8,LSL#1: ADD R9,R9,R9,LSL#1: ADD R7,R7,R7,LSL#1 MOV R8,R8,LSL#1: MOV R9,R9,LSL#1: MOV R7,R7,LSL#1: B moveit .Ml7 BL readvel897 RSB R8,R8,R8,LSL#3: RSB R9,R9,R9,LSL#3: RSB R7,R7,R7,LSL#3: B moveit .M12 BL readvel897 MOV R8,R8,ASR#1: MOV R9,R9,ASR#1: MOV R7,R7,ASR#1: B moveit .M14 BL readvel897 MOV R8,R8,ASR#2: MOV R9,R9,ASR#2: MOV R7,R7,ASR#2: B moveit .M34 BL readvel897 SUB R8,R8,R8,ASR#2: SUB R9,R9,R9,ASR#2: SUB R7,R7,R7,ASR#2: B moveit .OpX BL readvel897 RSB R8,R8,#0: B moveit .OpY BL readvel897 RSB R9,R9,#0: B moveit .OpZ BL readvel897 RSB R7,R7,#0: B moveit : .readvel897 SUB R8,R0,#xyzinfo-xyzblip: LDMIA R8,{R7,R8,R9}: MOV R15,R14 : .Add BL readwordR8: BL readwordR9: BL readwordR7: B addmoveit .AdX BL readwordR8: MOV R9,#0: MOV R7,#0: B addmoveit .AdY BL readwordR9: MOV R8,#0: MOV R7,#0: B addmoveit .AdZ BL readwordR7: MOV R8,#0: MOV R9,#0 ; fall into addmoveit .addmoveit SUB R10,R0,#xyzinfo-xyzblip: LDMIA R10,{R3,R5,R6} ADD R7,R7,R3: ADD R8,R8,R5: ADD R9,R9,R6 .rdmoveit LDMIA R0,{R3,R4,R5,R6} .moveit ; R3 is composite address ; R5 is x pos ; R6 is y pos ; R7 is Z velocity ; R8 is X velocity ; R9 is Y velocity ; make R12 as R7, sort etc. ADD R5,R5,R8: STR R5,[R0,#8] ADDS R6,R6,R9: RSBMI R6,R6,#0: STR R6,[R0,#12] LDRMI R9,[R13,#12]: RSBMI R9,R9,#0 STRMI R9,[R13,#12] ; R7 is Z vel, R3 is composite address STMFD R13!,{R7,R11} BL addcomp: STR R4,[R0]: LDR R12,[R13] ; was R7 MOVS R12,R12 MOV R1,R0: ADDEQ R13,R13,#8: BEQ Nll ADD R2,R0,#&2C BLNE fullsortxyz: SUB R0,R2,#&2C: LDMFD R13!,{R7,R11}: MOV R12,R7 B mvedNll : .DlR STMFD R13!,{R0}: BL getrand: AND R5,R0,#&7F: LDMFD R13!,{R0} STRB R5,[R0,#&22]: B Nll .Sub SUB R5,R0,#xyzinfo-xyzblip: ADD R5,R5,#&1C LDMIA R5,{R3,R4} ADD R1,R11,#1: STMIA R5,{R1,R3,R4} LDRB R11,[R1,#-1]: BL getaction11 B execute : .Dly MOV R5,#50: STRB R5,[R0,#&22]: B Nll .End LDR R5,[R0,#xyzblip-xyzinfo+&20]: CMN R5,#1 LDR R11,[R0,#xyzblip-xyzinfo+&1C] STREQ R11,[R0,#xyzblip-xyzinfo+&20] SUB R3,R0,#xyzinfo-xyzblip: ADD R3,R3,#&1C LDMIA R3,{R4,R5,R6}: MVN R7,#0 STMIA R3,{R5,R6,R7} .execute ADD R13,R13,#16: B inexecute .For LDR R5,[R11],#1: STR R11,[R0,#xyzblip-xyzinfo+&28] STRB R5,[R0,#&23]: B execute .Lbl STR R11,[R0,#xyzblip-xyzinfo+&28]: B execute .Nxt LDRB R5,[R0,#&23]: SUBS R5,R5,#1: STRPLB R5,[R0,#&23] LDRPL R11,[R0,#xyzblip-xyzinfo+&28] B execute .Gto LDR R11,[R0,#xyzblip-xyzinfo+&28]: B execute .AGT STR R0,globaltrigger: B Nll .WGT LDR R5,globaltrigger: MOVS R5,R5: SUBEQ R11,R11,#1: B Nll .WNT LDR R5,globaltrigger: MOVS R5,R5: SUBNE R11,R11,#1: B Nll : .Nll LDRB R3,[R0,#&22]: RSBS R3,R3,#1: STRGTB R3,[R0,#&22] LDMFD R13!,{R3,R4,R5,R6} LDMIA R0,{R7,R8,R9,R10} SUB R9,R9,R5 SUB R10,R10,R6: CMP R10,#&7F00000: MOVGE R10,#0 ; disable Smes on Dtn MOV R8,R12 SUB R7,R0,#xyzinfo-xyzblip STMIA R7,{R8,R9,R10,R11} B bliploop : .mvedNll LDMFD R13!,{R3,R4,R5,R6} LDMIA R0,{R7,R8,R9,R10} SUB R9,R9,R5 SUB R10,R10,R6 MOV R8,R12 SUB R7,R0,#xyzinfo-xyzblip STMIA R7,{R8,R9,R10,R11} .inmvedNll LDRB R3,[R0,#&22]: RSBS R3,R3,#1: STRGTB R3,[R0,#&22] LDR R0,mvenllxi: B bliploop .mvenllxi EQUD xyzinfo : .storeposb4 STMFD R13!,{R0,R1,R14} LDR R1,tmpest: LDR R0,[R1]: STR R0,oldbbmap LDR R0,[R1,#index-mapptr]: STR R0,oldbbindx LDMFD R13!,{R0,R1,R15} .oldbbindx EQUD 0 .oldbbmap EQUD 0 .tmpest EQUD mapptr .fakeshad LDR R12,fakeball: B plotmyshad : .cadjbackdrop STMFD R13!,{R0-R12,R14} LDR R0,tmpest: LDR R3,[R0] ; new mapptr LDR R2,[R0,#index-mapptr] LDR R0,oldbbindx: LDR R1,oldbbmap LDR R7,[R1,#&2C]: MOVS R7,R7: LDMEQFD R13!,{R0-R12,R15} CMP R1,R3: BLT movedcbbfwd SUBNE R0,R0,R7 SUB R3,R0,R2 ; +ve if going forwards .cadjbit MOV R3,R3,ASR#14: LDR R7,[R1,#&20]: MUL R3,R7,R3 STR R3,modifyax: LDMFD R13!,{R0-R12,R15} .modifyax EQUD 0 ; ; ; .movedcbbfwd LDR R7,[R3,#&2C] SUB R3,R0,R2: ADD R3,R3,R7 B cadjbit ; .adjbackdrop ; copes if moves less than (or equal to) one tile length ; since last call to storeposb4 STMFD R13!,{R0-R12,R14} LDR R0,tmpest LDR R3,[R0]: LDR R2,[R0,#index-mapptr]: LDR R0,oldbbindx LDR R1,oldbbmap LDR R7,[R1,#&2C]: MOVS R7,R7: LDMEQFD R13!,{R0-R12,R15} ; R0,R1; index,map (old) ; R2,R3; index,map (new) CMP R1,R3: BGT movedbbwd: BLT movebbfwd SUBS R7,R0,R2: LDMEQFD R13!,{R0-R12,R15} RSBMI R7,R7,#0: MOVMI R0,#1: MVNPL R0,#0 MOV R10,R1:.mnplanback BL mnplansp LDMFD R13!,{R0-R12,R15} .movedbbwd LDR R4,[R1,#&2C]: SUB R7,R4,R0 MOV R10,R1: MVN R0,#0: BL mnplansp MOV R10,R3: MOV R7,R2: B mnplanback .movebbfwd MOV R10,R1: MOV R7,R0: MOV R0,#1: BL mnplansp MOV R10,R3: LDR R4,[R10,#&2C] SUB R7,R4,R2: B mnplanback : .invisifx SUBS R3,R2,#400: RSBLES R3,R2,#100: BLE flamesee ; now R3 is counter 0-99, 100=perfect RSB R3,R3,#99 MOV R4,R0: LDR R0,fakeball MOV R5,#0: MOV R8,R5: MOV R2,#24*20:.loop STMIA R0!,{R5,R8}: SUBS R2,R2,#4: BNE loop ; R8 is line length (24) ---> 1 ; R5 is 2x line gap (0) ---> 24 MOV R5,R3,ASR#2: RSB R8,R5,#24: CMP R8,#1: MOVLT R8,#1 LDR R0,fakeball: ADD R2,R0,#24*20 .loop MOV R7,R8:.loop2 LDRB R6,[R4],#1: STRB R6,[R0],#1: SUBS R7,R7,#1: BPL loop2 ADD R0,R0,R5,ASR#1: CMP R0,R2: BLT loop: LDR R0,fakeball MOV R4,#&128: B intofakeb : .bodgskid LDR R0,tobigwst LDR R2,tmopt: LDR R10,[R2]: CMP R10,R0: MOVLT R15,R14 LDR R0,txyzifno2 .loop LDR R8,[R0],#&2C: CMN R8,#2: BLO loop MOV R1,#164: LDR R8,[R0,#&14-&2C-&2C]: BIC R7,R8,#&FF<<24 EOR R6,R7,R8: MUL R1,R7,R1: ORR R1,R6,R1,ASR#8 STR R1,[R0,#&14-&2C-&2C] MOV R1,#159<<16: SUB R1,R1,R7,ASR#2: STR R1,[R0,#&24-&2C-&2C] MOV R15,R14 : .maypurgeskid LDR R0,tobigwst LDR R2,tmopt: LDR R10,[R2]: CMP R10,R0: MOVLT R15,R14 LDR R0,txyzifno2 .loop LDR R8,[R0],#&2C: CMN R8,#2: BLO loop STR R8,[R0,#-&2C-&2C] MOV R15,R14 : .flreset2 MOV R0,#0: STR R0,anyflames: B flreset .litit MOV R0,#1: STR R0,anyflames: MOV R15,R14 .anyflames EQUD 0 .initskidoff ; R10 is mapptr ; R9 is index STMFD R13!,{R9} STMFD R13!,{R14}: MOV R0,#24: MOV R1,#20: BL doeffect: LDMFD R13!,{R14} LDR R0,fakeball: MOV R1,#24*20: MOV R2,#0: MOV R3,#0 .loop STMIA R0!,{R2,R3}: SUBS R1,R1,#8: BNE loop LDR R0,tobigwst: LDR R1,tobogy LDR R2,tmopt CMP R10,R0: MOVGE R15,R14 LDR R3,tmapcp2C .loop LDR R4,[R3],#&30: MOVS R4,R4: BNE loop SUB R3,R3,#&2C+&30+&30+&30 MOV R4,#0: STR R4,[R3,#&30+&20] MOV R11,#3:.loop2 LDMIA R3!,{R4,R5,R6,R7,R8,R9,R10,R12} STMIA R0!,{R4,R5,R6,R7,R8,R9,R10,R12} SUBS R11,R11,#1: BNE loop2 MOV R10,#50 .loop2 MOV R12,R1 MOV R11,#4:.loop LDMIA R12!,{R4,R5,R6,R7,R8,R9} STMIA R0!,{R4,R5,R6,R7,R8,R9} SUBS R11,R11,#1: BNE loop SUBS R10,R10,#1: BNE loop2 MOV R6,#0: STR R6,[R0],#4 LDR R10,tobigwst: ADD R10,R10,#48*2 STR R10,[R2] LDR R0,anyflames: MOVS R0,R0: LDRNE R10,tobigwst ADDNE R10,R10,#48*2: LDMNEFD R13!,{R9}: MOVNE R15,R14 LDR R0,tncs: MOV R1,#&7F<<24: STR R1,[R0] STMFD R13!,{R0-R12,R14}: BL xyzcode: LDMFD R13!,{R0-R12,R14} LDR R0,txyzifno2 .loop LDR R8,[R0],#&2C: CMN R8,#2: BLO loop LDMFD R13!,{R1}: STR R1,myindex MOV R1,R1,LSR#20: ADD R1,R10,R1,LSL#20 STR R10,mymapptr STR R1,[R0,#-&2C] MOV R1,#24: ADD R1,R1,#20<<8 STR R1,[R0,#4-&2C] MOV R1,#0: STR R1,[R0,#8-&2C] LDR R1,howhie: LDR R1,[R1] MOV R1,R1,ASR#3 STR R1,[R0,#12-&2C] MOV R1,#0: STR R1,[R0,#&10-&2C]: STR R1,[R0,#&14-&2C] LDR R1,fakeball: STR R1,[R0,#&18-&2C] STR R1,[R0,#&1C-&2C] MOV R1,#0: STR R1,[R0,#&28-&2C]: STR R1,[R0,#&20-&2C] STR R8,[R0] SUB R8,R0,#xyzinfo-xyzblip LDR R1,tlpst: STR R1,[R8,#&C-&2C]: STR R1,[R8,#&1C-&2C] STR R1,[R8,#&28-&2C] MVN R1,#0: STR R1,[R8,#&10-&2C]: STR R1,[R8,#&14-&2C] STR R1,[R8,#&20-&2C]: STR R1,[R8,#&24-&2C] LDR R8,torealvelo: LDR R8,[R8]: STR R8,myvelo MOV R15,R14 .tlpst EQUD blipdata : ; R10 = mapptr on exit .fakeball EQUD bigwaste+6000 .myvelo EQUD 0 .myindex EQUD 0:.mymapptr EQUD mapptr : .tsprpoint EQUD sprpnt .torealvelo EQUD velo .txyzifno2 EQUD xyzinfo .tncs EQUD nocansee .tindx2 EQUD index .howhie EQUD height .spdARM EQUD spd .onfloor EQUD gnd : .killskidoff LDR R0,tncs: LDR R1,[R0]: CMP R1,#&40<<24: MOVLT R15,R14 STMFD R13!,{R0,R8,R14} LDR R0,txyzifno2:.loop LDR R8,[R0],#&2C: CMN R8,#2: BLO loop STR R8,[R0,#-&2C-&2C] LDR R0,tncs: MOV R8,#0: STR R8,[R0] LDMFD R13!,{R0,R8,R15} : .skidoffcode LDR R0,tncs: LDR R1,[R0]: CMP R1,#&40<<24: MOVLT R15,R14 LDR R5,spdARM: LDR R5,[R5] LDR R9,torealvelo: LDR R3,myvelo RSBS R7,R3,#&500000: MUL R4,R7,R5: ADD R8,R3,R4,ASR#7 MOVPL R3,R8 LDR R11,onfloor: LDR R11,[R11]: MOVS R11,R11: LDREQ R8,myvelo BNE noslower MOV R6,#63:MOV R0,R5:.loop MUL R8,R6,R8: MOV R8,R8,ASR#6: SUBS R0,R0,#1: BPL loop .noslower LDR R9,[R9]: MOVS R9,R9: MOVMI R15,R14: CMP R8,R9: MOVLT R8,R9 STR R8,myvelo LDR R11,mymapptr LDR R6,myindex MUL R5,R3,R5 SUBS R6,R6,R5:.loop ADDMI R11,R11,#48: ADDMIS R6,R6,#&4000000 BMI loop: STR R11,mymapptr: STR R6,myindex LDR R0,txyzifno2 .loop LDR R8,[R0],#&2C: CMN R8,#2: BLO loop MOV R6,R6,LSR#20: ADD R11,R11,R6,LSL#20 STR R11,[R0,#-&2C-&2C] LDR R1,howhie: LDR R1,[R1] MOV R1,R1,ASR#3 STR R1,[R0,#12-&2C-&2C] MOV R15,R14 : .tobigwst EQUD bigwaste .tobogy EQUD bogey .tmopt EQUD mapptr .tmapcp2C EQUD mapcopy+&40+&2C : .cmpR1R0 STMFD R13!,{R3,R10,R14}: MOV R3,R1: MOV R10,R0 BL cmpR3R10: LDMFD R13!,{R3,R10,R15} : .cmpR3R10 ; full compare for xyz ; remember; top 12 bits = index, bottom 20 bits = address STMFD R13!,{R0,R1,R14} BIC R0,R3,#&FF<<24: BIC R0,R0,#&F<<20 BIC R1,R10,#&FF<<24: BIC R1,R1,#&F<<20 CMP R0,R1 EOREQ R0,R0,R3: EOREQ R1,R1,R10 CMPEQ R1,R0: LDMFD R13!,{R0,R1,R15} : .hairs ; R0 to screen MOV R1,#&D0 MOV R2,R0: ADD R3,R0,#&280: SUB R4,R3,#1 ADD R5,R0,#&28000: SUB R6,R5,#1: SUB R7,R5,#&280: MOV R8,R7 MOV R12,#10:.loop STRB R1,[R0],#1: STRB R1,[R2],#&280 STRB R1,[R3,#-1]!: STRB R1,[R4],#&280 STRB R1,[R5,#-1]!: STRB R1,[R6],#-&280 STRB R1,[R8],#1: STRB R1,[R7],#-&280 SUBS R12,R12,#1: BNE loop MOV R15,R14 .chkanimate ADR R0,listan:.loop0 LDMIA R0!,{R10,R11} MOVS R10,R10: MOVLT R15,R14: MOV R12,#0: STR R12,[R10] LDR R1,torealmap .loop MOV R2,#16:.loop2 LDRB R3,[R1],#2: CMP R3,R11: BNE nother LDRB R3,[R1,#-1]: CMP R3,#&FF: STRNE R1,[R10] ; anything other than zero BNE loop0:.nother SUBS R2,R2,#1: BNE loop2: ADD R1,R1,#&10 LDR R4,[R1,#&2C]: MOVS R4,R4: BNE loop B loop0 : .allanimate ADR R0,listan: MVN R1,#0 .loop LDR R2,[R0],#8 MOVS R2,R2: MOVLT R15,R14: STR R1,[R2]: B loop : .listan EQUD aport: EQUD 105: EQUD aport: EQUD 98 EQUD adeth: EQUD 32: EQUD awarp: EQUD 65 EQUD -1 : .capstrans1to0 MOV R0,R1: CMP R1,#ASC("a"): MOVLT R15,R14 CMP R1,#ASC("z"): SUBLE R0,R1,#32: MOV R15,R14 : .torealmap EQUD mapcopy+&40 .toflip3 EQUD bank2 .tedpoc EQUD editcopy .antscre EQUD &1FC0000 ; bodged .resetit STMFD R13!,{R14} BL rddg: CMP R0,#&140*4: LDMGEFD R13!,{R15} LDR R11,toflip3: LDR R11,[R11] LDR R0,playtst: LDR R0,[R0]: MOVS R0,R0: LDRNE R0,tedpoc: BNE goforti SUBS R11,R11,#&14000: ADDMI R11,R11,#&3C000: LDR R0,antscre: ADD R11,R11,R0 ADD R0,R11,#&90: STMFD R13!,{R0}: BL maptoR0 LDMFD R13!,{R0}: ADD R0,R0,#&40:.goforti LDR R1,torealmap .loop MOV R4,#16:.loop2 LDRB R3,[R0,#1]: LDRB R2,[R0]: CMP R3,#0: BNE okstore CMP R2,#24: CMPNE R2,#26: BEQ loopag .okstore STRB R2,[R1] STRB R3,[R1,#1] .loopag ADD R0,R0,#2: ADD R1,R1,#2 SUBS R4,R4,#1: BNE loop2: ADD R1,R1,#&10: ADD R0,R0,#&10 LDR R5,[R1,#-4]: CMP R5,#0: BNE loop LDMFD R13!,{R15} .playtst EQUD playtesting : .bombstack ]:P%+=numbombs*4+4:[OPT T ; address for each bomb detonated .initbombstack MVN R0,#0: ADR R1,bombstack: MOV R2,#numbombs .loop STR R0,[R1],#4: SUBS R2,R2,#1: BPL loop MOV R15,R14 : .amionfloor EQUD gnd .detonate ; R0 is address to detonate + (x index<<24) LDR R2,tofsets: LDR R6,[R2]: ADD R6,R6,#&30000: STR R6,[R2] ADR R1,bombstack: MOV R2,#numbombs BIC R6,R0,#&FF000000: LDRB R4,[R6]: LDRB R5,[R6,#1] CMP R5,#0: CMPEQ R4,#22 MOVNE R3,#0: STRNEB R3,[R6]: ADDNE R3,R3,#&FF: STRNEB R3,[R6,#1] MOVNE R15,R14 STMFD R13!,{R0,R1,R14}: MOV R0,#5: MOV R1,#15: BL doeffect LDMFD R13!,{R0,R1,R14} .loop LDR R3,[R1],#4: CMP R3,R0: MOVEQ R15,R14 SUBS R2,R2,#1: BPL loop ADR R1,bombstack: MOV R2,#numbombs .loop LDR R3,[R1],#4: CMN R3,#1: STREQ R0,[R1,#-4]: MOVEQ R15,R14 SUBS R2,R2,#1: BPL loop: MOV R15,R14 : .tofsets EQUD ofsetus .tttspud EQUD spd .tounderme EQUD squareon:.toII EQUD sqI .tvvvvd EQUD vdown .togi EQUD goesit .countbomb EQUD 0 .tokfloor EQUD okgnd .bombcode STMFD R13!,{R14} LDR R0,amionfloor: LDR R3,[R0]: MOVS R3,R3: BEQ continue LDREQ R0,tokfloor: LDREQB R3,[R0]: MOVEQS R3,R3: BEQ continue LDR R0,tounderme: LDR R0,[R0]: CMP R0,#22: BNE continue LDR R0,togi: LDR R0,[R0]: LDR R10,toII: LDR R10,[R10] MOV R10,R10,ASR#8: ADD R0,R0,R10,LSL#24 BL detonate LDR R0,tvvvvd: MVN R1,#&200: STR R1,[R0] LDR R0,toseedd: MOV R1,#&80: STR R1,[R0] .continue LDR R0,countbomb: LDR R1,tttspud: LDR R1,[R1] SUBS R0,R0,R1: ADDMI R0,R0,#15: STR R0,countbomb: LDMPLFD R13!,{R15} ADR R11,bombstack: MOV R12,#numbombs MOV R10,#5 .loop LDR R0,[R11],#4: CMN R0,#1: BEQ notonehere TST R0,#&80<<24: BICNE R0,R0,#&FF<<24 MOVNE R3,#0: STRNEB R3,[R0]: ADDNE R3,R3,#&FF: STRNEB R3,[R0,#1] MVNMI R9,#0: STRMI R9,[R11,#-4]: BMI notonehere ORR R7,R0,#&80<<24: STR R7,[R11,#-4] BIC R6,R0,#&FF000000 MOV R5,#&FF: STRB R5,[R6]: STRB R5,[R6,#1] MOV R9,R0: SUBS R0,R0,#&1<<24: SUB R0,R0,#2: BMI noblow1 BL detonate: ADD R0,R0,#&30: BL detonate: SUB R0,R0,#&60: BL detonate .noblow1 ADD R0,R9,#&30: BL detonate: SUB R0,R0,#&60: BL detonate ADD R0,R9,#&1<<24: ADD R0,R0,#2: CMP R0,#&10<<24: BGE notonehere BL detonate: ADD R0,R0,#&30: BL detonate: SUB R0,R0,#&60: BL detonate SUBS R10,R10,#1: LDMMIFD R13!,{R15} .notonehere SUBS R12,R12,#1: BPL loop: LDMFD R13!,{R15} : .toseedd EQUD seed .tuggot EQUD got .calcupgprice LDR R0,tuggot:.loop LDRB R1,[R0],#1: CMP R1,#&FF: MOVEQ R15,R14 CMP R1,#4: BGE loop ADR R0,upgprices: LDR R0,[R0,R1,LSL#2] LDR R1,tupgp STR R0,[R1]: MOV R15,R14 .upgprices EQUD 200: EQUD 400: EQUD 750: EQUD 1250 .tupgp EQUD upgprice .ttsprtt EQUD tosprite32 .twbs EQUD whichbigsprite .arm3twbs EQUD arm3whichbigsprite .toresc EQUD options+&30 .hiresbs BNE bigsprite32+hiresbs-whichbigsprite .lowresbs BNE bigsprite+lowresbs-whichbigsprite .arm3hiresbs BNE arm3bigsprite32+arm3hiresbs-arm3whichbigsprite .arm3lowresbs BNE arm3bigsprite+arm3lowresbs-arm3whichbigsprite .hirescd BNE bscd32+hirescd-whichbigcd .lowrescd BNE bscd16+lowrescd-whichbigcd .hireslftcd B bslf32+hireslftcd-whichbigcd2 .lowreslftcd B bslf16+lowreslftcd-whichbigcd2 .mulhilow EQUD whichbigsprite2-whichbigsprite .downf8 EQUD 0 .hiresmessg EQUS "*Quad Res Track": EQUB 13 .loresmessg EQUS "*Low Res Track": EQUB 13 .hi2resmessg EQUS "*Quad Res Objects": EQUB 13 .lo2resmessg EQUS "*Low Res Objects": EQUB 13 .hiresno EQUS "*Not enough memory for Quad Res": EQUB 13 ALIGN .tubannerb EQUD bannerb .downf7 EQUD 0 .hrxyzsprs EQUD tosprite32 ; cache code if hires sprites .tacproject MOV R0,#&81: MOV R1,#256-23: MOV R2,#&FF: SWI "OS_Byte" CMP R1,#&FF: STRNE R1,downf7: BNE tacproject2 LDR R0,downf7: CMP R0,#&FF: BEQ tacproject2 STMFD R13!,{R14} STR R1,downf7 LDR R0,toresc: LDRB R1,[R0,#1]: EORS R1,R1,#1: STRB R1,[R0,#1] ADREQ R2,lo2resmessg: ADRNE R2,hi2resmessg BEQ notlow LDR R3,hrxyzsprs: LDR R3,[R3]: B intacp2 .tacproject2 MOV R0,#&81: MOV R1,#256-119: MOV R2,#&FF: SWI "OS_Byte" CMP R1,#&FF: STRNE R1,downf8: BNE chkproject LDR R0,downf8: CMP R0,#&FF: BEQ chkproject STMFD R13!,{R14} STR R1,downf8 LDR R0,toresc: LDRB R1,[R0]: EORS R1,R1,#1: STRB R1,[R0] ADREQ R2,loresmessg: ADRNE R2,hiresmessg BEQ notlow: LDR R3,ttsprtt: LDR R3,[R3]:.intacp2 MOVS R3,R3 ADREQ R2,hiresno:.notlow LDR R3,tubannerb: STR R2,[R3,#bannerptr-bannerb] MOV R2,#32: STRB R2,[R3] BL res1632: LDMFD R13!,{R14}: B chkproject : .res1632 LDR R2,twbs: LDR R7,arm3twbs LDR R0,toresc LDRB R4,[R0,#1] CMP R4,#0: LDR R3,ttsprtt: LDRNE R4,[R3]: MOVNES R4,R4 LDR R5,txyzsprmod: LDRNE R4,hexyzmd: STR R4,[R5] LDRB R0,[R0] LDR R4,onbig CMP R0,#0: BEQ lowres LDR R0,[R3]: MOVS R0,R0 LDRNE R0,hiresbs: LDRNE R5,arm3hiresbs MOVNE R3,#1 .lowres MOVEQ R3,#0 LDREQ R0,lowresbs: STR R0,[R2]: STR R3,[R4] LDR R4,mulhilow: SUB R0,R0,R4,LSR#2: STR R0,[R2,R4] LDR R2,ttsprtt: LDR R2,[R2] LDREQ R5,arm3lowresbs: MOVS R2,R2: STRNE R5,[R7] LDR R2,torescd: LDREQ R0,lowrescd: LDRNE R0,hirescd: STR R0,[R2] LDREQ R0,lowreslftcd: LDRNE R0,hireslftcd STR R0,[R2,#whichbigcd2-whichbigcd] MOV R15,R14 .onbig EQUD bigenable .torescd EQUD whichbigcd .txyzsprmod EQUD xyzsprmod .hexyzmd EQUD hiresxyzmod : .chkroomins STMFD R13!,{R0,R14} \ R0 = length to add MOV R0,#0: BL findmapstats LDMFD R13!,{R3,R14} ADD R3,R3,R1: LDR R2,endoftrk: CMP R3,R2: BGE nocopyrm2 MOV R15,R14 .scrn2chk EQUD 0 EQUD junkmap+junkmapalloc-16 EQUD xyzmap+xyzmapalloc-16 .endoftrk EQUD map+maptotal-20 .chkroomcopy \ R0 =screen to copy STMFD R13!,{R14} STR R0,scrn2chk: BL extramapstats STMFD R13!,{R1,R5} LDR R0,scrn2chk: ADD R0,R0,#1: BL extramapstats LDMFD R13!,{R3,R4} SUB R0,R1,R3: ADD R9,R0,R2 ; R9 is new end of junk SUB R1,R5,R4: ADD R10,R10,R6 ; R1 is new end of xyz ADR R0,scrn2chk: LDMIA R0,{R0,R1,R2} CMP R9,R1: BGE nocopyrm CMP R10,R2: BGE nocopyrm BL findmapstats: STMFD R13!,{R2} LDR R0,scrn2chk: ADD R0,R0,#1: BL findmapstats MOVMI R2,R1: LDMFD R13!,{R3} SUB R2,R2,R3: ADD R2,R2,R1: LDR R3,endoftrk CMP R2,R3: LDMLTFD R13!,{R15} .nocopyrm LDMFD R13!,{R14} .nocopyrm2 ADR R12,memorylow: B nowayman2 .memorylow FNut("MEMORY TOO LOW FOR THIS FUNCTION - DELETE A SCREEN",0): EQUB -1 FNut("OR SHORTEN ONE OR MORE, SORRY",0): EQUB -1 EQUB -1: EQUD -1: EQUD -1: EQUW -1: EQUW -1 FNut("QUIT",0): EQUB -1 ALIGN .minimum2 ADR R12,mini2: B nowayman2 .mini2 FNut("MINIMUM ONE SCREEN PER ZONE ",0): EQUB -1 EQUW -1: EQUD -1: EQUD -1: EQUW -1: EQUW -1 FNut("QUIT",0): EQUB -1 .carch FNut("NOT ENOUGH MEMORY TO ARCHIVE CURRENT SCREEN INTO ZONE",0): EQUB -1 FNut("TO DESTROY CURRENT SCREEN, USE SELECT LEVEL TO UNDO CHANGES",0): EQUB -1 FNut("ALTERNATIVELY, DELETE A SCREEN (OR TWO) AND SAVE UNDER DIFFERENT NAME",0): EQUB -1 EQUW -1: EQUD -1: EQUD -1: EQUW -1 FNut("QUIT",0): EQUB -1 ALIGN .cantarchive ADR R12,carch: B nowayman2 ] endchknoroom=P%:O%=assemtwomeg:P%=twomeggoes-9*4 [OPT 4+T ; ;;; only loaded by two megabyte version ; .relocatetwomeg ADR R0,twmregs: LDMIA R0!,{R1,R2} .loop LDR R3,[R0],#4: STR R3,[R1],#4 CMP R0,R2: BNE loop MOV R15,R14 .twmregs EQUD twomeggoes: EQUD EndProg:.twomegwas .ctosprite32 EQUD bigblocks .bigsprite32 CMP R5,#8<<17: BLT bigsprite SUB R6,R6,#1: LDRB R7,[R0,R6]: SUB R6,R6,#2 LDR R12,ctosprite32: ADD R7,R12,R7,LSL#10 AND R12,R1,#&3E00000 ADD R7,R7,R12,LSR#16 ADD R14,R9,R10,LSR#17 CMP R9,R2: BLT offend32 CMP R14,R4: BGE chkrowdone32 .big32 SUB R14,R10,R5: ADDS R14,R14,R5,LSR#5 LDR R8,[R7,#28]: MOV R12,R8,LSR#24 .endin41 STRPLB R12,[R9],#1: CMP R14,#&20000: MOV R14,R14,LSL#15 MOV R0,R0 STRGEB R12,[R9],#1 ] FORT1=24 TO 0 STEP -4 [OPT 4+T ADDS R14,R14,R5,LSL#10 MOVCS R12,R8,LSR#16 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#10 MOVCS R12,R8,LSR#8 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#10 STRCSB R8,[R9],#1 ADDS R14,R14,R5,LSL#10 LDR R8,[R7,#T1]: MOVCS R12,R8,LSR#24 STRCSB R12,[R9],#1 ]NEXT [OPT 4+T ADDS R14,R14,R5,LSL#10 MOVCS R12,R8,LSR#16 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#10 MOVCS R12,R8,LSR#8 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#10 STRCSB R8,[R9],#1 MOV R14,R14,ASR#1: ORR R14,R14,#&80<<24 ADDS R6,R6,#1:ADD R10,R5,R14,ASR#14: BLT rowdone .anddoitagain LDRB R7,[R0,R6]: CMP R7,#&FF: BEQ notabigsp .adia2 SUB R6,R6,#1: LDRB R7,[R0,R6]:SUB R6,R6,#2 LDR R12,ctosprite32: ADD R7,R12,R7,LSL#10 AND R12,R1,#&3E00000 ADD R7,R7,R12,LSR#16 ADD R14,R9,R10,LSR#17 CMP R9,R2: BLT offend32 CMP R14,R4: BLT big32 CMP R9,R4: BGT rowdone SUB R14,R10,R5: ADDS R14,R14,R5,LSR#5 LDR R8,[R7,#28]: MOVPL R12,R8,LSR#24 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT rowdone ; fall .chkrowdone32 CMP R9,R4: BGT rowdone SUB R14,R10,R5: ADDS R14,R14,R5,LSR#5 LDR R8,[R7,#28]: MOVPL R12,R8,LSR#24 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT rowdone ] FORT1=24 TO 0 STEP -4 [OPT 4+T ADDS R14,R14,R5,LSR#5 MOVPL R12,R8,LSR#16 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT rowdone ADDS R14,R14,R5,LSR#5 MOVPL R12,R8,LSR#8 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT rowdone ADDS R14,R14,R5,LSR#5 STRPLB R8,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT rowdone ADDS R14,R14,R5,LSR#5 LDR R8,[R7,#T1]: MOVPL R12,R8,LSR#24 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT rowdone ]NEXT [OPT 4+T ADDS R14,R14,R5,LSR#5 MOVPL R12,R8,LSR#16 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT rowdone ADDS R14,R14,R5,LSR#5 MOVPL R12,R8,LSR#8 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT rowdone ADDS R14,R14,R5,LSR#5 STRPLB R8,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT rowdone ADDS R6,R6,#1:ADD R10,R5,R14: BLT rowdone B anddoitagain ; should never get here (or chkrowdone2 shouldn't have been ; called) .imfine32 ADDS R6,R6,#1:ADD R10,R14,R5: BLT rowdone LDRB R7,[R0,R6]: CMP R7,#&FF: BNE bigsprite32 ; notabigsp copy SUB R6,R6,#1: LDRB R7,[R0,R6] SUB R6,R6,#1: LDRB R8,[R0,R6] SUBS R6,R6,#1: CMPCS R8,#&FF: LDRCSB R8,[R0,R6] CMPCS R8,R7 ADDEQ R10,R10,R5: BEQ updateloop4 MOVS R7,R7: BEQ eqlot SUBS R8,R4,R9: BMI rowdone:CMP R10,R8,LSL#17 MOVGT R10,R8,LSL#17:MVNGT R6,#10 SUBS R8,R2,R9:BCS offlft CMP R13,#0: BNE docheck CMP R10,#&120000: BLT bytefill: B updatenw2 .offend32 CMP R14,R2 ADDLT R9,R9,R10,LSR#17: ANDLT R10,R10,#&1FC00: BLT fine MOV R12,#31 MOVS R14,R10,LSR#5: BMI offend3 CMP R9,R2:BGE onend32: ADD R9,R9,#1 SUB R14,R14,#&20000 .offend3 ]:FORT2=0 TO 30:[OPT 4+T SUBS R12,R12,#1:; BMI imfine32 ADDS R14,R14,R10,LSR#5: BMI offend3 CMP R9,R2:BGE onend32: ADD R9,R9,#1 SUB R14,R14,#&20000 ]NEXT:[OPT 4+T B offend3 .onend32 LDRB R8,[R7,R12] STRB R8,[R9],#1: SUB R14,R14,#&20000 ]:FORT2=0 TO 31:[OPT 4+T .loop SUBS R12,R12,#1: BMI imfine32 ADDS R14,R14,R10,LSR#5: BMI loop LDRB R8,[R7,R12] STRB R8,[R9],#1: SUB R14,R14,#&20000 ]NEXT : [OPT 4+T : : : : : : .arm3docheck .loopA LDRB R8,[R9],#1 MOVS R8,R8 STREQB R7,[R9,#-1] SUBS R10,R10,#&20000 BPL loopA: B arm3fine : .arm3stackgo EQUD 0 .tonormstack EQUD stackgo EQUD scrnbot EQUD tinfo EQUD overme : .arm3bigpnt EQUD bigtable .arm3eqlot ADDEQ R9,R9,R10,ASR#17:ORR R10,R10,#&FF000000 ADD R9,R9,#1: ORR R10,R10,#&FE0000 BEQ arm3fine .arm3offlft CMP R10,R8,LSL#17 ADDLT R9,R9,R10,LSR#17: ANDLT R10,R10,#&1FC00 BLT arm3fine SUB R10,R10,R8,LSL#17: MOV R9,R2: B arm3noworry : .arm3end EQUD end : .arm3scrnbot EQUD 0 .arm3scrntop2 EQUD 0 .arm3save1 EQUD 0 .arm3updatescr ADR R9,tonormstack: LDMIA R9,{R9,R10,R11,R14} LDR R9,[R9]: STR R9,arm3stackgo LDR R9,[R10]: STR R9,arm3scrnbot LDR R9,[R10,#scrntop2-scrnbot]: STR R9,arm3scrntop2 LDR R11,[R11]: STR R11,arm3tinfo LDR R14,[R14]: STR R14,arm3overme STR R4,arm3dyatstart STR R1,arm3lengthd : .loop LDR R10,arm3scrnbot CMP R2,R10: BGE arm3row2 SUB R11,R3,R5,LSL#2 ADD R9,R2,R11,ASR#16 BIC R14,R11,#&FF000000: BIC R14,R14,#&FF0000 ADD R10,R5,R14,LSL#1 STR R4,arm3save1 LDR R8,arm3scrntop2: CMP R9,R8: LDRLT R15,arm3end MOV R6,#31 ADD R4,R2,#&140: SUB R4,R4,#1 .loop2 .arm3loop2big LDRB R7,[R0,R6]: CMP R7,#&FF:.arm3whichbigsprite MOV R0,R0 .arm3notabigsp SUB R6,R6,#1: LDRB R7,[R0,R6] .loop4 SUB R6,R6,#1: LDRB R8,[R0,R6] SUBS R6,R6,#1 CMPCS R8,#&FF: LDRCSB R8,[R0,R6] CMPCS R8,R7 ADDEQ R10,R10,R5: BEQ loop4 MOVS R7,R7: BEQ arm3eqlot SUBS R8,R4,R9: BMI arm3rowdone:CMP R10,R8,LSL#17 MOVGT R10,R8,LSL#17:MVNGT R6,#10 SUBS R8,R2,R9:BCS arm3offlft .arm3noworry CMP R13,#0: BNE arm3docheck CMP R10,#&120000: BLT arm3bytefill ANDS R14,R9,#3: RSBNE R14,R14,#4: RSBS R8,R14,#3: ADD R15,R15,R8,LSL#2 MOV R0,R0 STRB R7,[R9],#1: STRB R7,[R9],#1: STRB R7,[R9],#1 SUB R10,R10,R14,LSL#17 .arm3word ORR R7,R7,R7,LSL#8: ORR R7,R7,R7,LSL#16 .loop5a CMP R10,#&60000: STRGE R7,[R9],#4: SUBGE R10,R10,#&80000: BPL loop5a .arm3bytefill MOVS R10,R10: BMI arm3fine .arm3here .loop5b STRB R7,[R9],#1: SUBS R10,R10,#&20000: BPL loop5b .arm3fine ADDS R6,R6,#1 ADD R10,R10,R5 BGE loop2 .arm3rowdone LDR R4,arm3save1:.arm3row2 MOV R10,R5,LSR#15 LDR R8,arm3bigpnt LDR R8,[R8,R10,LSL#2] LDR R10,[R0,#&20] MOV R8,R8,LSR#18 MLA R4,R8,R10,R4 MOV R6,R4,ASR#8 LDR R10,[R0,#&24] MOVS R8,R10,ASR#8:RSBMI R8,R8,#0 MOV R7,R3: MLANE R3,R6,R8,R3 STR R5,arm3st1 SUBPL R5,R5,R10: ADDMI R5,R5,R10 CMP R5,#&80000 BLT arm3update2 MOVS R10,R10 SUBPL R2,R2,#&140 ADDMI R2,R2,#&140 SUBPLS R13,R13,#1 ADDMI R13,R13,#1 MOV R8,R5,LSR#16 LDR R10,arm3bigpnt LDR R6,[R10,R8,LSL#2] SUB R1,R1,R6 LDR R8,arm3overme: CMP R8,R1: CMNGT R8,#1: BGT arm3gottadoanxyz .arm3justdidxyz CMP R1,#0: BGE loop .loop2a LDR R4,arm3dyatstart: MOV R8,#210 LDR R11,[R0,#&20]: MOV R11,R11,ASR#6: MUL R11,R8,R11: LDR R8,arm3lengthd MOV R8,R8,LSR#21: MLA R4,R8,R11,R4: STR R4,arm3dyatstart LDR R8,[R0,#92]: STR R8,arm3lengthd MOVS R8,R8 LDREQ R0,arm3gbogeee MOVEQ R8,#&4000000 ADDNE R0,R0,#48 ADD R1,R1,R8 LDR R10,arm3gbogeee3 CMP R10,R0: SUBEQ R0,R10,#bogey3-bogey LDR R10,arm3tinfo: LDR R8,[R10]: BIC R11,R8,#&FF<<24 BIC R11,R11,#&F<<20 CMP R0,R11: MVNNE R8,#0: STR R8,arm3overme MOVS R1,R1:BMI loop2a: B loop .arm3gbogeee3 EQUD bogey3 : .a3loop3 LDR R11,[R10]: CMP R11,R1: STRMI R11,arm3overme: BMI arm3nopexyz B arm3dontreloadR10 .arm3gottadoanxyz LDR R10,arm3tinfo STR R6,arm3st2 STR R8,arm3st8: STR R7,arm3st7 .arm3dontreloadR10 ; R8 is 'overme' RSB R9,R1,R8: MOV R8,R6,LSR#8: LDR R6,arm3stackgo STR R2,[R10,#&10]: ADD R10,R10,#&2C BL arm3dividetwo \ R11=R9/R8 RSB R9,R11,#256: LDR R6,arm3st1: MUL R6,R11,R6: MLA R6,R9,R5,R6 MOV R6,R6,ASR#8: STR R6,[R10,#-&18] MOV R7,R7,ASR#8: MOV R14,R3,ASR#8 MUL R14,R9,R14: MLA R14,R7,R11,R14 SUB R11,R14,R6,LSL#2 ;;;;;; why!!!!!!!!!!!??? STR R11,[R10,#-8] LDR R8,arm3st8: LDR R7,arm3st7 LDR R6,arm3st2: LDR R11,[R10]: BIC R11,R11,#&FF<<24: BIC R11,R11,#&F<<20 CMP R0,R11: MVN R11,#0: STR R11,arm3overme: BEQ a3loop3 MVN R11,#0: STR R11,arm3overme .arm3nopexyz STR R10,arm3tinfo LDR R10,[R0,#&24] B arm3justdidxyz : .arm3gbogeee EQUD bogey .arm3st1 EQUD 0 .arm3st2 EQUD 0 .arm3st8 EQUD 0:.arm3st7 EQUD 0 .arm3lengthd EQUD 0:.arm3dyatstart EQUD 0 .arm3overme EQUD 0 : .arm3tinfo EQUD 0:.arm3tinfo2 EQUD xyzinfo .arm3dividetwo CMP R8,R9: MOV R11,#0: MOVGT R15,R14 STMFD R6!,{R0-R1,R14} MVN R0,#0:.loop CMP R9,R8,LSL R0: ADDGT R0,R0,#1 BGT loop: SUBNE R0,R0,#1: MOV R1,#1 .loop CMP R9,R8,LSL R0 SUBCS R9,R9,R8,LSL R0 ADDCS R11,R11,R1,LSL R0 SUBS R0,R0,#1: BPL loop LDMFD R6,{R0-R1,R15} ; arm3update2 code follows .loop LDR R10,arm3scrnbot SUB R10,R10,#&140: CMP R2,R10: BGE arm3row3 SUB R11,R3,R5,LSL#2 ADD R9,R2,R11,ASR#16 LDR R8,arm3scrntop2: ADD R8,R8,#&140: CMP R9,R8: LDRLT R15,arm3end BIC R14,R11,#&FF000000: BIC R14,R14,#&FF0000 ADD R10,R5,R14,LSL#1 STR R4,arm3save1 MOV R6,#31 ADD R4,R2,#&140 SUB R4,R4,#1 .arm3loop2b .loop2 LDRB R7,[R0,R6]: CMP R7,#&FF: BNE arm3bigsprite2 .arm3notabigs2 SUB R6,R6,#1: LDRB R7,[R0,R6] .arm3loop4:.loop4 SUBS R6,R6,#1: LDRB R8,[R0,R6] SUBS R6,R6,#1: CMPCS R8,#&FF LDRCSB R8,[R0,R6]: CMPCS R8,R7 ADDEQ R10,R10,R5: BEQ loop4 MOVS R7,R7: BEQ arm3cleq CMP R10,#0: BLT arm3fine2 .arm3maycheck3 CMP R13,#0: BNE arm3check CMP R9,R2:.loop3 ADDLT R9,R9,#1: SUBLTS R10,R10,#&20000: BLT arm3fine2 CMP R9,R2: BLT loop3 .loop3 CMP R4,R9: STRGEB R7,[R9],#1 SUBS R10,R10,#&20000: BMI arm3fine2 CMP R9,R4: BGT arm3rowdone2: STRLEB R7,[R9],#1 .arm3here2 SUBS R10,R10,#&20000 BPL loop3 .arm3fine2 ADDS R6,R6,#1: BLT arm3rowdone2 ADDS R10,R10,R5 BPL loop2:.loop5c SUBS R6,R6,#2: BMI arm3rowdone2 ADDS R10,R10,R5: BMI loop5c B loop2 .arm3rowdone2 LDR R4,arm3save1:.arm3row3 MOV R10,R5,LSR#15 LDR R8,arm3bigpnt LDR R8,[R8,R10,LSL#2] MOV R8,R8,LSR#18 LDR R10,[R0,#&20] MLA R4,R8,R10,R4 MOV R6,R4,ASR#8 LDR R10,[R0,#&24] MOVS R8,R10,ASR#8:RSBMI R8,R8,#0 MOV R7,R3: MLA R3,R6,R8,R3 MOVPL R6,R10: RSBMI R6,R10,#0 STR R5,arm3st1: SUBS R5,R5,R6 LDRLT R15,arm3end .arm3update2 MOVS R10,R10 SUBPL R2,R2,#&140 ADDMI R2,R2,#&140 SUBPLS R13,R13,#1 ADDMI R13,R13,#1 MOV R8,R5,LSR#16 LDR R10,arm3bigpnt LDR R6,[R10,R8,LSL#2] SUB R1,R1,R6 LDR R8,arm3overme: CMP R8,R1: CMNGT R8,#1: BGT arm3gottadoasmxyz .arm3justdidsmxyz CMP R1,#0: BGE loop .loop2 LDR R4,arm3dyatstart: MOV R8,#210 LDR R11,[R0,#&20]: MOV R11,R11,ASR#6: MUL R11,R8,R11: LDR R8,arm3lengthd MOV R8,R8,LSR#21: MLA R4,R8,R11,R4: STR R4,arm3dyatstart LDR R8,[R0,#92]: STR R8,arm3lengthd MOVS R8,R8 LDREQ R0,arm3tbog MOVEQ R8,#&4000000 ADDNE R0,R0,#48 ADD R1,R1,R8 LDR R10,arm3tbog3 CMP R10,R0: SUBEQ R0,R10,#bogey3-bogey LDR R10,arm3tinfo: LDR R8,[R10]: BIC R11,R8,#&FF<<24 BIC R11,R11,#&F<<20 CMP R0,R11: MVNNE R8,#0: STR R8,arm3overme MOVS R1,R1: BMI loop2: B loop : .aloop3 LDR R11,[R10]: CMP R11,R1: STRMI R11,arm3overme: BMI arm3nopesmxyz B arm3dontreloadsm10 .arm3gottadoasmxyz LDR R10,arm3tinfo STR R8,arm3st8: STR R7,arm3st7: STR R6,arm3st2 .arm3dontreloadsm10 RSB R9,R1,R8: MOV R8,R6,LSR#8:LDR R6,arm3stackgo STR R2,[R10,#&10]: BL arm3dividetwo RSB R9,R11,#256: LDR R6,arm3st1: MUL R6,R11,R6: MLA R6,R9,R5,R6 MOV R6,R6,ASR#8: STR R6,[R10,#&14] MOV R7,R7,ASR#8: MOV R14,R3,ASR#8 MUL R14,R9,R14: MLA R14,R7,R11,R14 SUB R11,R14,R6,LSL#2:STR R11,[R10,#&24] LDR R8,arm3st8: LDR R7,arm3st7: LDR R6,arm3st2 LDR R11,[R10,#&2C]!: BIC R11,R11,#&FF<<24: BIC R11,R11,#&F<<20 CMP R0,R11: MVN R11,#0: STR R11,arm3overme: BEQ aloop3 MVN R11,#0: STR R11,arm3overme .arm3nopesmxyz STR R10,arm3tinfo LDR R10,[R0,#&24] B arm3justdidsmxyz .arm3tbog EQUD bogey .arm3tbog3 EQUD bogey3 .arm3tosprite1 EQUD mapspr .arm3tosprite32 EQUD 0 .arm3bigsprite2 STR R5,arm3storeR5 SUB R6,R6,#1: LDRB R7,[R0,R6]:SUB R6,R6,#2 LDR R5,arm3tosprite1: ADD R7,R5,R7,LSL#8 AND R12,R1,#&3C00000: ADD R7,R7,R12,LSR#18: MOV R5,#16 STR R0,arm3gor0: STR R1,arm3gor1: STR R13,arm3gor13 LDRB R8,[R7,#14]: MOV R14,#0:.loop SUBS R5,R5,#2: BMI arm3retbackf:.loop3 ADDS R14,R14,R10,ASR#3: BPL arm3dorrit: MOV R0,R8: LDRB R8,[R7,R5] CMP R0,R8: BEQ loop AND R13,R8,#&60: AND R1,R0,#&60 CMP R13,R1: MOVLE R13,R1 AND R12,R8,#&88: AND R1,R0,#&88 CMP R12,R1: ORRGT R13,R13,R12: ORRLE R13,R13,R1 AND R12,R8,#&14: AND R1,R0,#&14 CMP R12,R1: ORRGT R13,R13,R12: ORRLE R13,R13,R1 AND R12,R8,#&03: AND R1,R0,#&03 CMP R12,R1: ORRLE R8,R13,R12: ORRGT R8,R13,R1 SUBS R5,R5,#2: BPL loop3 .arm3retbackf LDR R0,arm3gor0:LDR R5,arm3storeR5: MOV R10,R14 LDR R1,arm3gor1: LDR R13,arm3gor13 ADDS R6,R6,#1: BLT arm3rowdone2 ADDS R10,R10,R5: BMI loop5c B arm3loop2b .arm3dorrit CMP R9,R2: CMPGE R4,R9: STRGEB R8,[R9]: ADD R9,R9,#1 LDRB R8,[R7,R5]: SUB R14,R14,#&20000: SUBS R5,R5,#2: BPL loop3 LDR R0,arm3gor0: LDR R5,arm3storeR5: MOV R10,R14 LDR R1,arm3gor1: LDR R13,arm3gor13 ADDS R6,R6,#1: BLT arm3rowdone2 ADDS R10,R10,R5: BMI loop5c B arm3loop2b .arm3gor0 EQUD 0 .arm3gor1 EQUD 0 .arm3gor13 EQUD 0 .arm3storeR5 EQUD 0 .arm3cleq ADD R9,R9,R10,ASR#17:ADD R9,R9,#1: ORR R10,R10,#&FF000000 ORR R10,R10,#&FE0000 ADDS R6,R6,#1: BLT arm3rowdone2 ADDS R10,R10,R5: BPL arm3loop2b: B loop5c : .arm3check LDRB R8,[R9],#1 MOVS R8,R8 SUBS R10,R10,#&20000 BPL arm3check ADDS R6,R6,#1: BLT arm3rowdone2 B arm3loop2b : .arm3bigsprite32 CMP R5,#8<<17: BLT arm3bigsprite SUB R6,R6,#1: LDRB R7,[R0,R6]: SUB R6,R6,#2 LDR R12,arm3tosprite32: ADD R7,R12,R7,LSL#10 AND R12,R1,#&3E00000 ADD R7,R7,R12,LSR#16 ADD R14,R9,R10,LSR#17 CMP R9,R2: BLT arm3offend32 CMP R14,R4: BGE arm3chkrowdone32 .arm3big32 SUB R14,R10,R5: ADDS R14,R14,R5,LSR#5 LDR R8,[R7,#28]: MOV R12,R8,LSR#24 .arm3endin41 STRPLB R12,[R9],#1: CMP R14,#&20000: MOV R14,R14,LSL#15 STRGEB R12,[R9],#1 MOV R10,#24 .arm332loop ADDS R14,R14,R5,LSL#10 MOVCS R12,R8,LSR#16 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#10 MOVCS R12,R8,LSR#8 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#10 STRCSB R8,[R9],#1 ADDS R14,R14,R5,LSL#10 LDR R8,[R7,R10]: MOVCS R12,R8,LSR#24 STRCSB R12,[R9],#1 SUBS R10,R10,#4: BPL arm332loop ADDS R14,R14,R5,LSL#10 MOVCS R12,R8,LSR#16 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#10 MOVCS R12,R8,LSR#8 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#10 STRCSB R8,[R9],#1 MOV R14,R14,ASR#1: ORR R14,R14,#&80<<24 ADDS R6,R6,#1:ADD R10,R5,R14,ASR#14: BLT arm3rowdone B arm3loop2big : .arm3offend32 CMP R14,R2 ADDLT R9,R9,R10,LSR#17: ANDLT R10,R10,#&1FC00: BLT arm3fine MOV R12,#31 MOVS R14,R10,LSR#5: BMI arm3offend3 CMP R9,R2: BGE arm3onend32: ADD R9,R9,#1 SUB R14,R14,#&20000 .arm3offend3 SUBS R12,R12,#1: BMI arm3imfine32 ADDS R14,R14,R10,LSR#5: BMI arm3offend3 CMP R9,R2:BGE arm3onend32: ADD R9,R9,#1 SUB R14,R14,#&20000 B arm3offend3 .arm3onend32 LDRB R8,[R7,R12] STRB R8,[R9],#1: SUB R14,R14,#&20000 SUBS R12,R12,#1: BMI arm3imfine32:.loop ADDS R14,R14,R10,LSR#5: BMI arm3nextp32 LDRB R8,[R7,R12] STRB R8,[R9],#1: SUB R14,R14,#&20000 .arm3nextp32 SUBS R12,R12,#1: BPL loop .arm3imfine32 MOV R10,R14: ADDS R6,R6,#1:ADD R10,R10,R5: BLT arm3rowdone B arm3loop2big : .arm3chkrowdone32 CMP R9,R4: BGT arm3rowdone SUB R14,R10,R5: ADDS R14,R14,R5,LSR#5 LDR R8,[R7,#28]: MOVPL R12,R8,LSR#24 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT arm3rowdone MOV R10,#24 .acr32loop ADDS R14,R14,R5,LSR#5 MOVPL R12,R8,LSR#16 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT arm3rowdone ADDS R14,R14,R5,LSR#5 MOVPL R12,R8,LSR#8 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT arm3rowdone ADDS R14,R14,R5,LSR#5 STRPLB R8,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT arm3rowdone ADDS R14,R14,R5,LSR#5 LDR R8,[R7,R10]: MOVPL R12,R8,LSR#24 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT arm3rowdone SUBS R10,R10,#4: BPL acr32loop ADDS R14,R14,R5,LSR#5 MOVPL R12,R8,LSR#16 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT arm3rowdone ADDS R14,R14,R5,LSR#5 MOVPL R12,R8,LSR#8 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT arm3rowdone ADDS R14,R14,R5,LSR#5 STRPLB R8,[R9],#1: SUBPL R14,R14,#&20000 CMP R9,R4: BGT arm3rowdone ADDS R6,R6,#1:ADD R10,R5,R14: BLT arm3rowdone: B arm3loop2big : .arm3tosprite1 EQUD mapspr : .arm3bigsprite SUB R6,R6,#1: LDRB R7,[R0,R6]:SUB R6,R6,#2 LDR R12,arm3tosprite1: ADD R7,R12,R7,LSL#8 AND R12,R1,#&3C00000: ADD R7,R7,R12,LSR#18: ADD R14,R9,R10,LSR#17 CMP R9,R2: BLT arm3offend1 CMP R14,R4: BGE arm3chkrowdone .arm3almostbig ; just one routine here for cache optimisation SUB R14,R10,R5:.loop ADDS R14,R14,R5,LSR#4 LDR R12,[R7,#12]: MOVPL R8,R12,LSR#24 STRPLB R8,[R9],#1: SUBPLS R14,R14,#&20000 STRPLB R8,[R9],#1: SUBPL R14,R14,#&20000 MOV R10,#12 .arm3abloop ADDS R14,R14,R5,LSR#4 MOVPL R8,R12,ASR#16 STRPLB R8,[R9],#1: SUBPLS R14,R14,#&20000 STRPLB R8,[R9],#1: SUBPL R14,R14,#&20000 ADDS R14,R14,R5,LSR#4 MOVPL R8,R12,ASR#8 STRPLB R8,[R9],#1: SUBPLS R14,R14,#&20000 STRPLB R8,[R9],#1: SUBPL R14,R14,#&20000 ADDS R14,R14,R5,LSR#4 STRPLB R12,[R9],#1: SUBPLS R14,R14,#&20000 STRPLB R12,[R9],#1: SUBPL R14,R14,#&20000 SUBS R10,R10,#4: BMI arm3imfine ADDS R14,R14,R5,LSR#4 LDR R12,[R7,R10]: MOV R8,R12,ASR#24 STRPLB R8,[R9],#1: SUBPLS R14,R14,#&20000 STRPLB R8,[R9],#1: SUBPL R14,R14,#&20000 B arm3abloop : .arm3offend1 CMP R14,R2 ADDLT R9,R9,R10,LSR#17: ANDLT R10,R10,#&1FC00: BLT arm3fine SUB R8,R2,R9: MOV R9,R2: MOV R12,#15 MOVS R14,R10,LSR#4: BMI arm3offend:.loop2 SUBS R8,R8,#1: BEQ arm3onendS SUBS R14,R14,#&20000: SUBPLS R8,R8,#1: BEQ arm3onendS SUBPL R14,R14,#&20000 .arm3offend SUB R12,R12,#1: ADDS R14,R14,R10,LSR#4: BMI arm3offend B loop2 .arm3onendS SUBS R14,R14,#&20000 ADDMI R14,R14,R10,LSR#4: SUBMI R12,R12,#1 .arm3onend LDRB R8,[R7,R12]:.loop2 STRB R8,[R9],#1: SUBS R14,R14,#&20000: BPL loop2 .loop SUBS R12,R12,#1: BMI arm3imfine ADDS R14,R14,R10,LSR#4: BMI loop LDRB R8,[R7,R12]:.loop2 STRPLB R8,[R9],#1: SUBPLS R14,R14,#&20000: BPL loop2 B loop : .arm3chkrowdone SUB R14,R10,R5: MOV R10,#15 .loop ADDS R14,R14,R5,LSR#4: BMI arm3nextp LDRB R8,[R7,R10] .loop2 CMP R9,R4: BGT arm3rowdone SUBS R14,R14,#&20000: STRB R8,[R9],#1: BPL loop2 .arm3nextp SUBS R10,R10,#1: BPL loop .arm3imfine ADDS R6,R6,#1:ADD R10,R14,R5: BLT arm3rowdone B arm3loop2big : ] EndProg=O%:endtwomeg=O%:P%=buymeplease [OPT T .messageout ADR R9,endseq MOV R10,#&7E: ADR R11,vduseq:.loop LDRB R12,[R11],#1: ADD R0,R12,R10: SWI "OS_WriteC" EOR R10,R10,R10,LSL#5: EOR R10,R10,R10,ASR#4 CMP R11,R9:BNE loop SWI "OS_RemoveCursors" LDR R0,toshrt: MOV R1,#&8000 MOV R5,#&10: LDR R6,nothing: STR R6,[R5]: STR R6,[R5,#-4] STR R0,[R1],#4: STR R0,[R1],#4: STR R0,[R1],#4: MOV R15,#&8000 .nothing SUB R15,R15,#8 .toshrt STR R0,[R1],#4 .vduseq FNencrypt(CHR$22+CHR$0+"Frequently asked Questions number 1: How can I buy Phaethon?"+CHR$13+CHR$10+CHR$10+"Just send 25 pounds to: The Serial Port, Burcott Manor, Wells, SomerSet, BA5 1NH(tel: (0749) 670058)_") .endseq ] endbuymeplease=P%:P%=spritereorder [OPT T .endspcft LDR R1,tofintux:.loop LDRB R0,[R1],#1:CMP R0,#&1F: BNE loop MOV R0,#&FF: STRB R0,[R1,#-2] MOV R15,R14 .wontcrash EQUD 0 .tofintux EQUD fintxt .seedo EQUD 0 .caniedit EQUD 0 .allow1 MOV R0,#0: STR R0,caniedit: MOV R15,R14 .maycab LDR R0,seedo: MOV R10,#25:.loop EOR R0,R0,R0,LSL#1: SUBS R10,R10,#1: BPL loop LDR R1,wontcrash: CMP R0,R1: BNE messageout: MOV R15,R14 .chkallow1 STMFD R13!,{R14}: BL decodecodes BL idontknowok: MOVS R1,R0: BEQ allowok BL getR1at: EQUD editcodes+4 SUBS R1,R1,#123 .allowok STR R1,caniedit: BL encryptcodes: LDMFD R13!,{R15} .r0isokallow LDR R0,caniedit: MOV R15,R14 .canieditit LDRB R0,caniedit: MOVS R0,R0: BNE nowayman MOV R15,R14 .chkpctr EQUD 0 .tomapcopyyetag EQUD mapcopy+&40 .maychkproject LDR R0,chkpctr: ADD R0,R0,#1: TST R0,#3: STR R0,chkpctr MOVNE R15,R14: B tacproject .findtelep MOV R2,#0 LDR R0,tomapcopyyetag .loop2 MOV R1,#31:.loop LDRB R3,[R1,R0]: CMP R3,#255: ORRNE R2,R2,R3 SUBS R1,R1,#2: BPL loop LDR R3,[R0,#&2C]: CMP R3,#0: ADDNE R0,R0,#&30: BNE loop2 MOV R15,R14 .toedtcr EQUD editcodes .decodecodes LDR R1,crseed: MOVS R1,R1: MOVEQ R15,R14 MOV R0,#0: STR R0,crseed: B hideecodes .encrypto1 MOV R1,#0: STR R1,crseed .encryptcodes LDR R1,crseed: MOVS R1,R1: MOVNE R15,R14 SWI "OS_ReadMonotonicTime": ADD R1,R0,R1: STR R1,crseed \ fall into hideecodes .hideecodes \ R1 = seed LDR R0,toedtcr: MOV R2,#100:.loop LDRB R3,[R0],#1: EOR R3,R3,R1: STRB R3,[R0,#-1] ADDS R1,R1,R1,LSL#14: EORCS R1,R1,R1,ROR#3 SUBS R2,R2,#1: BNE loop MOV R15,R14 .clearmap LDR R0,tomapcl: LDR R1,endmapcl MOV R2,#0:.loop STR R2,[R0],#4: CMP R0,R1: BNE loop MOV R15,R14 .crseed EQUD 0 .tomapcl EQUD map .endmapcl EQUD map+mapalloc .templreadc MOV R0,#&81: MOV R1,#256-113: MOV R2,#255: SWI "OS_Byte" CMP R1,#255: BEQ escprsdU STMFD R13!,{R0-R1,R4-R12} BL chkcn: MOVS R7,R7: BEQ notpress BL rettnum3: BL getdoin4 MOVS R2,R2: MOVEQ R3,R4 CMP R3,R4 .notpress LDMFD R13!,{R0-R1,R4-R12}: BNE clickitynew MOV R0,#&81: MOV R2,#0: MOV R1,#2: SWI "OS_Byte" CMP R1,#255: BEQ templreadc B readit : .clickitynew LDMFD R13!,{R0} STMFD R13!,{R2,R3} CMP R3,#2: MOVHI R0,#0: MOVLS R0,#1: BL stfoT BL inlsttempl BL bank32 MOV R0,#0: BL stfoT LDMFD R13!,{R2,R3} CMP R3,#2: BHI giveupnow BLLS pushinct B intemplscan2 .giveupnow BL tempenon LDMFD R13!,{R14}: LDMFD R13!,{R15} .escprsdU STMFD R13!,{R0-R12,R14}: BL mayquits LDMFD R13!,{R0-R12,R14}: BEQ templreadc LDMFD R13!,{R0,R1,R2}: B lshop .chclickmen SWI "OS_Mouse" MOVS R0,R0: MOVEQ R15,R14 CMP R1,#&2E0: MOVGT R15,R14 CMP R1,#&254: MOVLT R15,R14 SUBS R0,R0,#37: MOVCC R15,R14: STMFD R13!,{R14}: MOV R1,#160: BL divide32 MUL R3,R2,R1: SUB R4,R0,R3: CMP R4,#132: LDMGTFD R13!,{R15} \ R5 is item2 : .tonumsc EQUD numofscrs .findxyzjen LDR R0,tonumsc LDRB R0,[R0] LDR R2,mapftot LDR R6,jnkmpp MOVS R3,R0: ADDEQ R2,R2,#4: ADDEQ R6,R6,#4: MOVEQ R15,R14 .loop LDR R4,[R2],#16: CMN R4,#2: BLO loop SUB R2,R2,#12: SUBNES R3,R3,#1: BNE loop .loop LDR R4,[R6],#16: CMN R4,#2: BLO loop SUB R6,R6,#12: SUBNES R0,R0,#1: BNE loop: MOV R15,R14 .chkjnkins LDR R0,jnktot: MOV R1,#1:.loop LDR R2,[R0],#16: CMN R2,#2: ADDLO R1,R1,#1 BLO loop CMP R1,#(junkinfoalloc-12)/16: BGE noroominsbd LDR R0,jnkmpp MOV R5,R0 .loop LDR R4,[R0],#16: CMN R4,#2: SUBHI R0,R0,#12 BNE loop SUB R0,R0,R5 CMP R0,#junkmapalloc MOVLT R15,R14 ADR R12,errorjnkm: BL domenu: BL clbuf: BL testkeys1: B bdloop .mapftot EQUD xyzmap .jnktot EQUD junkinfo .jnkmpp EQUD junkmap .byejunk MVN R0,#0: LDR R1,jnktot: STR R0,[R1]: MOV R15,R14 .chkxyzins LDR R0,inftot MOV R1,#0:.loop LDR R2,[R0],#&2C: MOVS R2,R2: ADDPL R1,R1,#1 BPL loop CMP R1,#(xyzinfoalloc/&2C)-4: BGE noroominsscr LDR R0,mapftot MOV R5,R0 .loop LDR R4,[R0],#16: CMN R4,#2: SUBHI R0,R0,#12 BNE loop SUB R0,R0,R5 CMP R0,#xyzmapalloc MOVLT R15,R14 ADR R12,errorxyzm: BL domenu: BL clbuf: BL testkeys1: B xyzloop2 .noroominsscr ADR R12,errorxyzi: BL domenu: BL clbuf: BL testkeys1: B xyzloop2 .noroominsbd ADR R12,errorjnki: BL domenu: BL clbuf: BL testkeys1: B bdloop .errorxyzm FNut("TOO MANY OBJECTS FOR ZONE",0): EQUD -1: EQUD -1: EQUD -1: EQUD -1 .errorxyzi FNut("TOO MANY OBJECTS FOR THIS SCREEN",0) EQUD -1: EQUD -1: EQUD -1: EQUD -1 .errorjnki FNut("TOO MANY PLANETS FOR THIS SCREEN",0) EQUD -1: EQUD -1: EQUD -1: EQUD -1 ALIGN .errorjnkm FNut("TOO MANY PLANETS FOR ZONE",0) EQUD -1: EQUD -1: EQUD -1: EQUD -1 ALIGN .copyfirstrow LDR R0,tomapcf MOV R10,#&FF: MOV R11,#0 MOV R3,#16:.loop STRB R11,[R0],#1: STRB R10,[R0],#1 SUBS R3,R3,#1: BNE loop MOV R15,R14 .tomapcf EQUD mapcopy+&40 .trecod EQUD recoiled .getmappo EQUD mapptr .endofxi EQUD 0 \ xyzendobi .bullo EQUD xyzsprs+&1D30: EQUD &1404: EQUD &14*4+&80000 EQUD xyzsprs+&2D78: EQUD &031C: EQUD &03*&1C+&80000 EQUD xyzsprs+&2DCC: EQUD &031C: EQUD &03*&1C+&80000 EQUD xyzsprs+&2F9C: EQUD &1404: EQUD &14*4+&80000 .bulofst EQUB 12: EQUB 10: EQUB 0: EQUB 0 EQUB 12: EQUB 10: EQUB 12: EQUB 10 EQUB 0: EQUB 10: EQUB 12: EQUB 10 EQUB 4: EQUB 3: EQUB 0: EQUB 10: EQUB 17: EQUB 10 EQUB 0: EQUB 0: EQUB 0: EQUB 0 EQUB 0: EQUB 0: EQUB 0: EQUB 0 EQUB 0: EQUB 0: EQUB 10: EQUB 10 EQUB 10: EQUB 10: EQUB 0: EQUB 10 EQUB 10: EQUB 10 ALIGN .firingregs .inftot EQUD xyzinfo \ R3 .inftosea EQUD xyzinfo+&2C \ R4 EQUD spd \ R5 .fireseed EQUD RND \R6 EQUD endxyzinfo-&2C \ R7 : .toenafft EQUD enable .updatetempls STMFD R13!,{R14}: BL rdleftok: MOVS R0,R0: LDMEQFD R13!,{R15} LDR R0,templenum: MOVS R0,R0: LDMMIFD R13!,{R15} LDMFD R13!,{R14} LDR R1,totempldt: ADD R2,R1,R0,LSL#3: ADD R2,R2,R0,LSL#2 LDR R3,totxtin MOV R7,#11:.loop LDRB R4,[R3],#1: SUB R4,R4,#33 STRB R4,[R2],#1: SUBS R7,R7,#1: BPL loop MOV R4,#0: STRB R4,[R2,#-1] LDR R3,togoyt: LDMIA R3,{R4,R5,R6,R7,R8,R9} ADD R3,R1,#12*3: ADD R3,R3,R0,LSL#4 ADD R3,R3,R0,LSL#3 LDR R10,toenafft LDRB R11,[R10]: BIC R11,R11,#0 STMIA R3,{R4,R5,R6,R7,R8,R9} B puthiscores .newfoot LDR R10,toenafft: LDRB R11,[R10]: BIC R11,R11,#0: LDR R3,togoyt MOV R12,#0 MOV R0,#0:.loop LDRB R2,[R3,R0]: CMP R2,#14 ORREQ R11,R11,#1 CMP R2,#11: MOVEQ R12,#32: AND R4,R2,#&3F CMP R4,#10: EOREQ R4,R4,R2: MOVEQ R12,R4,LSR#3 ADD R0,R0,#1: CMP R2,#255: BNE loop STRB R11,[R10] MOV R0,R12: B getfoot .togoyt EQUD got .yabodger EQUD &1FC0000 ; bodged .bank2blackst LDR R0,yabodger: ADD R1,R0,#&14000: MOV R4,#&14000 MOV R5,R4 MOV R2,#0:.loop LDR R3,[R1]: STR R3,[R1,R5] STR R2,[R1],#4: SUBS R4,R4,#4: BNE loop MOV R15,R14 .totempldt EQUD templdat .totxtin EQUD txtin .bank32 LDR R0,yabodger: ADD R1,R0,#&14000: ADD R0,R0,#&28000 MOV R4,#&14000:.loop LDMIA R0!,{R5,R6,R7,R8,R9,R10,R11,R12} STMIA R1!,{R5,R6,R7,R8,R9,R10,R11,R12} SUBS R4,R4,#4*8: BNE loop MOV R15,R14 .notemplen MVN R0,#1: STR R0,templenum: MOV R15,R14 .chkcn ADR R4,newtempic: B checkicons .prapsnewt \ R0=x,R1=y,R2=buttons TST R2,#7: MOVEQ R15,R14 STMFD R13!,{R14} BL chkcn MOVS R7,R7: LDMMIFD R13!,{R15} MOV R0,#1: STR R0,faroutT: BL tempenoff BL inlsttempl BL pushinct BL hurryup .loop BL chkcn: MOVS R7,R7: BLMI intemplscanA BL chhurry BL scanesc: MOVS R1,R1: BLNE mayquits: BEQ loop LDMFD R13!,{R14}: B lshop .qhere FNaddr(96,467):.incool EQUD &101213 .noonom EQUD !qhere-4 .templenum EQUD -1 .getdoin4 LDR R4,templenum: MOV R15,R14 .nonewtemplate MOV R0,#0: STR R0,faroutT: BL tempenon BL inlsttempl BL wantwelc LDMFD R13!,{R14} LDMFD R13!,{R15} .newtemplateR3 CMP R3,#2: BHI nonewtemplate STR R3,templenum BL box BL bank2blackst LDR R2,fierceness: LDR R3,posofit SUB R3,R3,#12 LDR R0,mynewreadc: BL strreadcpoke MOV R0,#131: BL handycomment MOV R0,#0: STR R0,faroutT MOV R8,#ASC("-"): LDR R0,qhere: LDR R9,noonom LDR R7,templenum: CMP R7,#1: ADDEQ R9,R9,#&1900: ADDGT R9,R9,#&1900*2 ADDEQ R0,R0,#&1900: ADDGT R0,R0,#&1900*2 STMFD R13!,{R0-R12}: MOV R0,R9: MOV R2,#10: MOV R1,#92 BL getbck: MOV R0,#0: BL wrleftok LDMFD R13!,{R0-R12} MOV R7,#11: MOV R10,#92: LDR R1,incool: BL wordinpute BL normreadc BL bank32 BL bckshpII BL box LDR R2,fierceness: LDR R3,posofit3 MOV R0,#132: BL handycomment LDR R2,fierceness: LDR R3,posofit4 MOV R0,#133: BL handycomment LDMFD R13!,{R14} BL nowelc LDMFD R13!,{R15} .mynewreadc EQUD &EA000000+(templreadc-8-readcpoke)/4 .hurryup STMFD R13!,{R14} BL box LDR R2,fierceness: LDR R3,posofit MOV R0,#128: BL handycomment LDR R2,fierceness: LDR R3,posofit2 MOV R0,#129: BL handycomment LDMFD R13!,{R15} .stfoT STR R0,faroutT: MOV R15,R14 .faroutT EQUD 0 .toseedr EQUD seed .posofit EQUD -&6C10+24 .posofit3 EQUD -&6C10+&140*20+20 .posofit4 EQUD -&6C10+&140*40+30 .mightcomm LDR R10,faroutT: CMP R10,#0: MOVNE R0,#130: B handycomment .posofit2 EQUD -&6C10+&140*60 .newtempic EQUW 32: EQUW 1024-4*(128-12): EQUW 32+80*4: EQUW 1024-4*128 EQUD -1 .fierceness EQUD &D32C0302 .savezcrypt SWI "XOS_ReadMonotonicTime" ADD R0,R0,R10 LDR R10,toseedr: LDR R10,[R10] EOR R0,R0,R10 LDR R10,[R4,#superseed-zinfoblk] EOR R0,R0,R10: ORR R0,R0,#&80000000 STR R0,[R4,#superseed-zinfoblk] \ R4 = start \ R5 = end MOV R2,R4: SUB R3,R5,R4 .loadzcrypt \ R2 is start \ R3 is length TST R0,#&80000000: MOVEQ R15,R14 ADD R2,R2,#12 SUB R3,R3,#12 .loop LDRB R5,[R2] EOR R5,R5,R0 ADDS R0,R0,R0,RRX STRB R5,[R2],#1 EORCS R0,R0,R0,ROR#25 SUBS R3,R3,#1: BNE loop MOV R15,R14 : .activatereinc STMFD R13!,{R0-R12,R14} MOV R4,#16 LDR R0,tomapc:.loop MOV R1,#30:ADD R2,R0,#1:.loop2 LDRB R3,[R0,R1]: CMP R3,#17: LDREQB R3,[R2,R1]: CMPEQ R3,#0 STREQB R4,[R0,R1]: SUBS R1,R1,#2: BPL loop2 ADD R0,R0,#&30: LDR R1,[R0,#&2C]: MOVS R1,R1: BNE loop LDR R0,tomappoi: LDR R0,[R0]: SUB R0,R0,#48 LDR R1,Ispyeye: LDR R1,[R1]: MOV R1,R1,LSR#7: BIC R1,R1,#1 BL myreincar LDMFD R13!,{R0-R12,R15} .tomappoi EQUD mapptr .Ispyeye EQUD I .tomapc EQUD mapcopy+&40 .btrans0 ADR R11,sordertab: AND R12,R0,#&FF: MOV R0,#0 .loop LDRB R1,[R11,R0]: CMP R1,R12: ADDNE R0,R0,#1: BNE loop MOV R15,R14 .trans11 ADR R0,sordertab: LDRB R11,[R0,R11]: MOV R15,R14 .trans5to8 ADR R8,sordertab: LDRB R8,[R5,R8]: MOV R15,R14 .trans9 ADR R1,sordertab: LDRB R9,[R1,R9]: MOV R15,R14 .sordertab EQUB 0: EQUB 107: EQUB 2: EQUB 3: EQUB 4: EQUB 5: EQUB 6: EQUB 7 EQUB 8: EQUB 9: EQUB 10: EQUB 11: EQUB 12: EQUB 13: EQUB 14: EQUB 15 EQUB 64: EQUB 1: EQUB 61: EQUB 22: EQUB 23: EQUB 96: EQUB 60: EQUB 99 EQUB 100: EQUB 67: EQUB 62: EQUB 63: EQUB 102: EQUB 65: EQUB 66: EQUB 108 EQUB 24: EQUB 26: EQUB 28: EQUB 30: EQUB 104: EQUB 32: EQUB 98: EQUB 105 EQUB 16: EQUB 18: EQUB 19: EQUB 81: EQUB 90: EQUB 91: EQUB 92: EQUB 93 EQUB 34: EQUB 35: EQUB 36: EQUB 37: EQUB 38: EQUB 39: EQUB 40: EQUB 41 EQUB 42: EQUB 43: EQUB 44: EQUB 80: EQUB 82: EQUB 83: EQUB 86: EQUB 87 EQUB 45: EQUB 46: EQUB 47: EQUB 48: EQUB 49: EQUB 50: EQUB 51: EQUB 52 EQUB 53: EQUB 54: EQUB 55: EQUB 122: EQUB 84: EQUB 85: EQUB 88: EQUB 89 EQUB 56: EQUB 57: EQUB 58: EQUB 59 EQUB 20: EQUB 21: EQUB 134: EQUB 79: EQUB 119: EQUB 121: EQUB 69 EQUB 73: EQUB 74: EQUB 75: EQUB 111: EQUB 70: EQUB 71 EQUB 72: EQUB 76: EQUB 77: EQUB 78: EQUB 112: EQUB 113: EQUB 114 EQUB 115: EQUB 116: EQUB 117: EQUB 118: EQUB 120 EQUB 123: EQUB 124: EQUB 125: EQUB 126: EQUB 127: EQUB 128 EQUB 129: EQUB 130: EQUB 131: EQUB 132: EQUB 133: EQUB 135 ALIGN ] endspritereorder=P%:P%=hischandle [OPT T .blankhis MOV R10,#0 STMFD R13!,{R15}: BL innhstf: BL gethiscores \ last instruction not executed BL puthiscores B editloop2 .blackout MOV R5,#5:MOV R4,#0:.loop STRB R4,[R1],#&140: SUBS R5,R5,#1: BNE loop LDMFD R13!,{R1,R4,R5,R15} .newhstfile2 STMFD R13!,{R14} .newhstfile MOV R10,#1:.innhstf ADR R0,hiscores MOV R1,#0: MVN R2,#0:MOV R3,#50: MOV R4,#3 .loop STR R1,[R0],#4: STR R2,[R0],#4 STR R2,[R0],#4: STR R2,[R0],#4 STR R2,[R0],#4: STR R2,[R0],#4 SUBS R3,R3,#1: BNE loop CMP R10,#1: LDMNEFD R13!,{R15} MOV R3,R2: MOV R5,R2 .loop STMIA R0!,{R2,R3,R5} STRB R1,[R0,#-1]: SUBS R4,R4,#1: BNE loop STR R2,[R0],#24: STR R2,[R0],#24: STR R2,[R0],#24 LDMFD R13!,{R15} .totcrc EQUD hiscores+&51C .zhiscfsp EQUS ".HiScores":.myzono EQUS "0": EQUB 13:ALIGN .crypthsfile ADR R0,hiscores: LDR R1,totcrc LDR R2,[R1,#4]:.loop LDR R5,[R0]: EOR R5,R5,R2: STR R5,[R0],#4 EOR R2,R2,R2,LSL#17 ADD R2,R2,R2,ASR#5 CMP R0,R1: BNE loop: MOV R15,R14 .gethiscores \ R0 is ASCII zone number STMFD R13!,{R14} STRB R0,myzono MOV R0,#&FF: ADR R1,zhiscfsp: ADR R2,hiscores: MOV R3,R3,LSL#9 SWI "XOS_File": BVS newhstfile BL crypthsfile MOV R0,#0: MOV R3,#1: ADR R1,hiscores: LDR R2,totcrc SWI "OS_CRC" LDR R5,totcrc: LDR R5,[R5] CMP R0,R5: BNE newhstfile: LDMFD R13!,{R15} .puthiscores STMFD R13!,{R14} LDR R5,totcrc: LDR R7,[R5,#4]!: SWI "OS_ReadMonotonicTime" ADD R7,R7,R0: STR R7,[R5] MOV R0,#0: MOV R3,#1: ADR R1,hiscores: LDR R2,totcrc SWI "OS_CRC": LDR R5,totcrc: STR R0,[R5] BL crypthsfile MOV R0,#10: ADR R1,zhiscfsp: MOV R2,#&FF0: ORR R2,R2,#13 ADR R4,hiscores: LDR R5,totcrc: ADD R5,R5,#8 SWI "XOS_File": BL crypthsfile: LDMFD R13!,{R15} \ don't put anything between this and hiscores ] endhischandle=P%:P%=editpreev [OPT T .chkprivelege MOV R2,R14: BL idontknowok: MOVS R0,R0: MOVEQ R15,R2 .nowayman ADR R12,sorrymate:.nowayman2 BL domenu .loop BL scanesc: BEQ aceditloop2 BL getmenu: CMP R0,#15: BNE loop: B editloop2 .mayblankhis BL chkprivelege ADR R12,blankyesno: BL domenu .loop BL scanesc: BEQ aceditloop2 BL getmenu: CMP R0,#15: BEQ editloop2 CMP R0,#3: BEQ blankhis: B loop .blankyesno FNut("ARE YOU SURE YOU WANT TO BLANK THE HI-SCORE TABLE?",0): EQUB -1: EQUW -1 FNut("BLANK",0): EQUB -1 EQUD -1: EQUD -1: EQUW -1: EQUB -1 FNut("CANCEL",0): EQUB -1 .sorrymate FNut("YOU ARE INSUFFICIENTLY PRIVELEGED FOR THIS OPERATION",0): EQUB -1 FNut("USE CHANGE SCREEN AND ENTER FINAL EDITOR CODE",0): EQUB -1 EQUB -1: EQUD -1: EQUD -1: EQUW -1: EQUW -1 FNut("QUIT",0): EQUB -1 .happytext ]:FORT2=0 TO 4:[OPT T LDRB R0,[R2],#1 AND R6,R5,R0,LSR#6-3: AND R3,R14,R10,LSR R6 AND R6,R5,R0,LSR#4-3: AND R6,R14,R10,LSR R6: ORR R3,R6,R3,LSL#8 AND R6,R5,R0,LSL#1: AND R6,R14,R10,LSR R6: ORR R3,R6,R3,LSL#8 AND R6,R5,R0,LSL#3: AND R6,R14,R10,LSR R6: ORR R3,R6,R3,LSL#8 STR R3,[R1],#320 ]NEXT:[OPT T LDMFD R13!,{R0-R6,R10,R15} .zonebuts EQUD (0<<24)+((4096-138)<<12)+(265): EQUD zonegdn EQUD (1<<24)+((4096-138)<<12)+(313): EQUD zonegup EQUD -1 .tobaseagain EQUD base2 .toscrnbotagain EQUD scrnbot .testzbuts ADR R12,zonebuts: B testmbuts .zonetopbit LDR R0,tobaseagain: LDR R0,[R0]: LDR R1,toscrnbotagain STR R0,[R1] MOV R0,#&6800: ORR R0,R0,#&D0 ADR R12,zonebuts: B dispmbuts .getR4fint LDR R4,tofint34: MOV R15,R14 .tofint34 EQUD fintxt .rdftlenR1 STMFD R13!,{R2,R4,R14} LDR R4,tofint34:MOV R1,R4:.loop LDRB R2,[R1],#1 CMP R2,#31: BNE loop: SUB R1,R1,R4 LDMFD R13!,{R2,R4,R15} .ftshift \ R0 = dest \ R1 = source STMFD R13!,{R0-R4,R14} LDR R4,tofint34: ADD R1,R1,R4: ADD R0,R0,R4 MOV R2,R1:.loop LDRB R3,[R1],#1 CMP R3,#31: BNE loop: BL unishift LDMFD R13!,{R0-R4,R15} .mulfh EQUD &28F5 .point2map EQUD mapptr .stopfix MOV R0,#&400000: STR R0,localwasxpos: B comebackball .oldpox EQUD 0 .toI EQUD I .newoldpox2 STR R0,oldpox: MOV R15,R14 .barrierfix STMFD R13!,{R14} MOV R6,#94 LDR R8,point2map: LDR R8,[R8] ADD R9,R8,#1 LDR R5,localwasxpos LDR R0,towonderx: LDR R10,[R0]: MOV R0,R10,ASR#9 ADD R0,R0,#&1400: LDR R1,mulfh: MUL R1,R0,R1: MOV R0,R1,ASR#17 LDR R1,oldpox:CMP R0,R1: STR R0,oldpox MOV R11,R0,ASR#8 STR R11,localwasxpos ADDGE R0,R0,#&78: SUBLT R0,R0,#&78 MOV R11,R0,ASR#8 CMP R5,#&400000: LDMEQFD R13!,{R15} MOV R10,R5 CMP R11,R5: LDMEQFD R13!,{R15}: BLT bfind1 .loop ADD R5,R5,#1: BL readmag: MOV R10,R5: CMP R5,R11: BLT loop LDMFD R13!,{R15} .bfind1 SUB R5,R5,#1: BL readmag: MOV R10,R5: CMP R5,R11: BGT bfind1 LDMFD R13!,{R15} .rdkeys EQUD keys \ r5 increasing \ was at 5, trying to goto 11 .readmag CMP R5,#0: MOVLT R15,R14 CMP R5,#16: MOVGE R15,R14 LDRB R12,[R9,R5,LSL#1]: CMP R12,#0: MOVNE R15,R14 LDRB R12,[R8,R5,LSL#1]: CMP R6,R12: CMPGT R12,#79 MOVLE R15,R14 CMP R12,#80: BNE nrkeys: LDR R12,rdkeys: LDR R12,[R12] CMP R12,#0: BEQ nrkeys STMFD R13!,{R5,R10}: MOV R10,R5: BL nrkeysO LDMFD R13!,{R5,R10} LDR R0,toI: LDR R0,[R0]: MOVS R0,R0,ASR#8 CMP R5,R10: LDRB R11,[R9,R5,LSL#1]: CMP R11,#0: BNE repoB LDRB R11,[R8,R5,LSL#1]: CMP R6,R11: CMPGT R11,#79 BLE repoB: CMP R11,#80: BNE norepoB LDR R12,rdkeys: LDR R12,[R12] CMP R12,#80: SUBEQ R12,R12,#1: CMP R12,#0: BGT repoB .norepoB MOV R5,R10 .repoB CMP R5,R10: LDR R5,dio: ADDLT R5,R5,#&9F000: SUBGT R5,R5,#&9F000 LDMEQFD R13!,{R15}: B indiot .nrkeysO STMFD R13!,{R14} .nrkeys STR R10,localwasxpos MOV R5,#&190000: MUL R5,R10,R5: SUB R5,R5,#&1C8000 MOV R0,R5,ASR#9: ADD R0,R0,#&1400: LDR R1,mulfh: MUL R1,R0,R1: MOV R0,R1,ASR#17 STR R0,oldpox: STR R5,dio .indiot LDR R0,towonderx: STR R5,[R0]: RSB R5,R5,#&A00000 MOV R1,#99: MOV R0,R5,LSL#1: BL divide32: LDR R0,todeewhy STR R2,[R0] LDMFD R13!,{R15} .todeewhy EQUD dy : .dio EQUD 0 .slimecount EQUD 0 .patindx EQUD 0 .slimesprite EQUD mapspr .localwasxpos EQUD 0 .towonderx EQUD x .teaspeed EQUD spd .wheresbig EQUD tosprite32 .isbig EQUD bigenable .slimer LDR R0,teaspeed: LDR R2,[R0] LDR R1,slimecount: SUBS R1,R1,R2: ADDMI R2,R2,#10 STR R1,slimecount: MOVPL R15,R14 ADD R4,R2,#1: AND R4,R4,#3: STR R4,patindx LDR R7,slimesprite MOV R6,R7 LDMIA R6!,{R0,R1,R2,R3} ] FORT2=0 TO 14 [OPT T LDMIA R6!,{R8,R9,R10,R11} STMIA R7!,{R8,R9,R10,R11} ]NEXT [OPT T STMIA R7,{R0,R1,R2,R3} LDR R7,isbig: LDR R7,[R7]: MOVS R6,R7: MOVEQ R15,R14 LDR R7,wheresbig: LDR R7,[R7]: MOV R6,R7 .bigslime MOV R5,#15 LDMIA R6!,{R0,R1,R2,R3,R8,R9,R10,R11} STMFD R13!,{R0,R1,R2,R3,R8,R9,R10,R11} LDMIA R6!,{R0,R1,R2,R3,R8,R9,R10,R11} STMFD R13!,{R0,R1,R2,R3,R8,R9,R10,R11} MOV R5,#2 .loop ] FORT2=0 TO 14 [OPT T LDMIA R6!,{R0,R1,R2,R3,R8,R9,R10,R11} STMIA R7!,{R0,R1,R2,R3,R8,R9,R10,R11} ]NEXT [OPT T SUBS R5,R5,#1: BNE loop LDMFD R13!,{R0,R1,R2,R3,R8,R9,R10,R11} STMIA R7!,{R0,R1,R2,R3,R8,R9,R10,R11} LDMFD R13!,{R0,R1,R2,R3,R8,R9,R10,R11} STMIA R7!,{R0,R1,R2,R3,R8,R9,R10,R11} MOV R15,R14 : .clscroller LDR R0,pathvar: SUB R0,R0,#&28000: MOV R1,#&2800 MOV R2,#0:.loop STR R2,[R0],#4: SUBS R1,R1,#4: BNE loop MOV R15,R14 .wrzcur EQUS ".Zones." .getfspfnd EQUS " ":.endcur EQUB 0 ALIGN .fspisithere EQUS ".Zones": EQUB 13 .zonepath EQUS "": EQUB 13 .zonedir EQUS "Zone$Dir": EQUB 13 .zonecur EQUS "Zone$Cur": EQUB 13:ALIGN .pathvar EQUD &1FFC000 ; bodged, MUST be scrnend-&4000 .pathindex EQUD -1 .findmezones MVN R0,#0: STR R0,pathindex STMFD R13!,{R14}:BL nofsmes: LDMFD R13!,{R14} .loopfmz ADR R0,zonepath LDR R1,pathvar MOV R2,#&FF: SWI "XOS_GSTrans" LDR R0,pathvar LDR R1,pathindex MOVS R1,R1: MOVMI R1,#0: BMI gotcha .loop LDRB R4,[R0,R1]: ADD R1,R1,#1: CMP R4,#13 MOVEQ R1,#0: STREQ R1,pathindex: MOVEQ R15,R14 CMPNE R4,#ASC(","): BNE loop .gotcha STR R1,pathindex MOV R4,#0: ADD R1,R0,R1: ADR R0,zonedir MOV R3,#0: MOV R2,#0 .loop LDRB R5,[R1,R2]: CMP R5,#13: CMPNE R5,#ASC(",") ADDNE R2,R2,#1: BNE loop ADD R6,R1,R2: MOV R7,#13: STRB R7,[R6,#-1] SWI "XOS_SetVarVal" MOV R0,#5: ADR R1,fspisithere: SWI "XOS_File" CMP R0,#2: BNE loopfmz MOV R4,#0:.ingetz ADR R1,fspisithere SUB R2,R1,#fspisithere-getfspfnd: MOV R3,#1 MOV R5,#16: MOV R6,#0: MOV R0,#9: SWI "XOS_GBPB" ADR R0,zonecur: ADR R1,wrzcur: MOV R2,#endcur-wrzcur MOV R4,#0 SWI "XOS_SetVarVal": MOVS R0,#10 MOV R15,R14 .poso EQUD 0 .zonegdn BL ackesc LDRB R2,poso: SUBS R2,R2,#1 BPL finzg BL readmaxz SUB R2,R3,#1: B finzg .zonegup BL ackesc BL readmaxz LDRB R2,poso: ADD R2,R2,#1: CMP R3,R2 MOVLE R2,#0:.finzg STRB R2,poso: MOV R4,R2: BL ingetz MOV R2,#1: BL fige: BL dozonename BL scanzones B backfromtesto .readmaxz MOV R4,#0 ADR R1,fspisithere: LDR R2,toscrend2: SUB R2,R2,#&4000 MOV R3,#256 MOV R5,#256: MOV R6,#0: MOV R0,#9: SWI "OS_GBPB" MOV R15,R14 : .toscrend2 EQUD &2000000 ; bodged : .bottlestopper STMFD R13!,{R14} BL findxyzjen MVN R9,#1: STR R9,[R2,#-4]: STR R9,[R6,#-4] LDMFD R13!,{R15} : .unstopper STMFD R13!,{R0-R12,R14} BL findxyzjen MVN R9,#0: STR R9,[R2,#-4]: STR R9,[R6,#-4] LDMFD R13!,{R0-R12,R14} : .findmapstats \ on exit, R1=end of map data \ R2=start of screen R0 (or -1 if not defined) STMFD R13!,{R0,R3,R4-12,R14}: LDR R4,ttalf MVN R2,#0 LDMIA R4,{R9,R10,R11,R12} LDR R1,mdatato:.loop MOVS R0,R0: SUB R0,R0,#1: MOVEQ R2,R1 .loop1 LDR R3,[R1],#4: CMN R3,#1:BNE loop1 LDMIA R1,{R5,R6,R7,R8} CMP R5,R9: CMPEQ R6,R10: CMPEQ R7,R11: CMPEQ R8,R12: BNE loop MOVS R0,R0: MOVEQ R2,R1 ADD R1,R1,#20 MOVS R2,R2 LDMIA R13!,{R0,R3,R4-R12,R15} : .removelast BL findmapstats LDR R1,ttalf: LDMIA R1,{R3,R4,R5,R6} STMIA R2,{R3,R4,R5,R6} BL extramapstats MVN R9,#1: STR R9,[R5,#-4]: STR R9,[R1,#-4] MVN R0,#0: BL addnsc: B aftermovedl : .extramapstats \ on exit, R1=junk for R0 \ R2=junk end \ R3=passwords \ R4=passwords end \ R5=XYZ \ R6=XYZ end \ R7=editor code \ R8=editor code end STMFD R13!,{R14}: MOV R11,R0 BL getnome: ADR R10,pointers LDMIA R10,{R1,R3,R5,R7} ADD R4,R3,R0,LSL#3 ADD R3,R3,R11,LSL#3 ADD R8,R7,R0,LSL#2 ADD R7,R7,R11,LSL#2 MOV R12,R0: MOV R9,R0 MOVS R0,R11:.loop BEQ xyzfound:.loop1 LDR R10,[R5],#16: CMN R10,#2: BLO loop1 SUB R5,R5,#12: SUB R9,R9,#1 SUBS R0,R0,#1: B loop .xyzfound MOV R6,R5:MOVS R9,R9:.loop BLE xyzfounds:.loop1 LDR R10,[R6],#16: CMN R10,#2: BLO loop1 SUB R6,R6,#12: SUBS R9,R9,#1: B loop .xyzfounds MOVS R0,R11:.loop BEQ jnkfound:.loop1 LDR R10,[R1],#16: CMN R10,#2: BLO loop1: SUB R1,R1,#12 SUB R12,R12,#1 SUBS R11,R11,#1: B loop .jnkfound MOV R2,R1: MOVS R12,R12:.loop ADDLE R6,R6,#8 ADDLE R2,R2,#8: LDMLEFD R13!,{R15}:.loop1 LDR R10,[R2],#16: CMN R10,#2: BLO loop1: SUB R2,R2,#12 SUBS R12,R12,#1: B loop : .pointers EQUD junkmap: EQUD passwords+6*8: EQUD xyzmap: EQUD editcodes .insdata EQUD eachscr .mdatato EQUD map .ttalf EQUD thatsallfolks .just25 ADR R12,error25: BL domenu: BL testkeys1: B besensible2 .cpyline MOV R10,#1: B incline .insline MOV R10,#0:.incline BL getmapcis MOV R2,#&40: SUB R0,R0,#&40-&2C:.loop LDR R3,[R0,R2]: MOVS R3,R3: ADDNE R2,R2,#&30: BNE loop CMP R2,#mapalloc: BLT inslineok ADR R12,errorlong: BL domenu: BL clbuf: BL testkeys1: B trkloop2 .errorlong FNut("TRACK TOO LONG FOR INSERT",0): EQUD -1 EQUD -1: EQUD -1: EQUD -1: EQUD -1 .error25 FNut("MAXIMUM 25 SCREENS PER ZONE ",0): EQUB -1 FNut("REMEMBER THAT MOVE REQUIRES A SPARE SCREEN TO FUNCTION",0): EQUB -1 EQUB -1: EQUB -1 EQUD -1: EQUD -1: EQUD -1: ALIGN .desttest MOVS R0,R0: BMI conting CMP R0,#8: BLT conting: CMP R0,#12: BGE conting LDMFD R13!,{R14}: B changemind .reqedest STMFD R13!,{R14} BL rslsr .loop SWI "OS_Mouse": MOVS R2,R2: BNE loop ADR R12,whatadest: BL xtramenus ADR R0,desttest .loop BL inputno2 SUBS R0,R0,#1: BMI loop LDMFD R13!,{R15} .whatadest FNut("ENTER DESTINATION SCREEN NUMBER",0): EQUB -1 FNut(" ",0): EQUW -1: EQUB -1 EQUD -1: EQUD -1: EQUW -1: EQUB -1: FNut("QUIT",0): EQUB -1 ALIGN .xyzdest EQUD -1 .xyzdend EQUD -1 .junksrc EQUD -1 .movescrn LDR R1,gotodel: B copymvs .gotoel2 EQUD editzone .gotodel EQUD removescrn .copyscrn LDR R1,gotoel2 .copymvs STR R1,wheretogo STR R0,victime3 BL getnome1: CMP R1,#25: BGE just25 CMP R0,R1: BGE besensible BL unstopper BL reqedest: LDR R1,wheretogo: LDR R2,gotoel2 LDR R3,victime3: CMP R0,R3: MOVLT R2,R1 CMP R2,R1: ADDNE R0,R0,#1: STR R0,victime4 LDR R0,victime3: BL chkroomcopy: LDR R0,victime4 BL findmapstats: BMI besensible: MOV R5,R2 LDR R0,victime3: BL findmapstats MOV R12,R2 ADD R0,R0,#1: BL findmapstats: BMI besensible SUB R6,R2,R12: MOV R2,R5: ADD R0,R2,R6: BL unishift CMP R2,R12: ADDLT R12,R12,R6 MOV R0,R2: MOV R2,R12: ADD R1,R2,R6: BL unishift : LDRB R0,victime4: BL extramapstats STR R1,junkdest: STR R2,jenddest MOV R2,R3: MOV R1,R4: ADD R0,R2,#8: BL unishift STR R2,pokepass: STR R1,passend MOV R2,R7: MOV R1,R8: ADD R0,R2,#4: BL unishift STR R2,pokeedit STR R5,xyzdest: STR R6,xyzdend LDR R0,victime3: BL extramapstats LDR R10,victime4: CMP R0,R10 SUBLE R3,R3,#8: ADDGT R7,R7,#4 LDMIA R3,{R10,R11,R12,R14} EOR R10,R10,R12: EOR R11,R11,R14 LDR R3,pokepass: SUB R3,R3,#8 LDMIA R3!,{R12,R14}: EOR R10,R10,R12: EOR R11,R11,R14 STMIA R3!,{R10,R11} LDR R10,[R7]: LDR R7,pokeedit: STR R10,[R7] STR R1,junksrc MOV R12,R5:.loop LDR R10,[R5],#16: CMN R10,#1: CMNNE R10,#2 BNE loop SUB R11,R5,#12 SUB R11,R11,R12 \ R11 is length of XYZ, including final -1 LDR R2,xyzdest: ADD R0,R2,R11: MOV R1,R6 BL unishift ADD R1,R11,R12 MOV R0,R2: MOV R2,R12 CMP R0,R2: ADDLT R2,R2,R11: ADDLT R1,R1,R11 BL unishift LDR R10,junkdest: LDR R11,jenddest: LDR R12,junksrc MOV R9,R12 .loop LDR R8,[R9],#16: CMN R8,#2: BLO loop: SUB R9,R9,#12 SUB R7,R9,R12 \ R7 is length of junk, including final -1 MOV R2,R10: ADD R0,R2,R7: MOV R1,R11 BL unishift ADD R1,R12,R7: MOV R0,R2: MOV R2,R12 CMP R0,R2: ADDLT R2,R2,R7: ADDLT R1,R1,R7 BL unishift MOV R0,#1: BL addnsc LDR R5,pokepass LDR R4,passend LDR R11,[R5,#-8]: LDR R12,[R5,#-4] LDR R9,[R5],#8: LDR R10,[R5,#-4] EOR R9,R9,R11: EOR R10,R10,R12 .loop LDR R11,[R5]: EOR R11,R11,R9: STR R11,[R5],#4 LDR R11,[R5]: EOR R11,R11,R10: STR R11,[R5],#4 CMP R5,R4: BLE loop LDR R1,victime4: BL rdcursc: CMP R1,R0: ADDLE R0,R0,#1: BLLE wrcursc LDR R0,victime3 CMP R1,R0: ADDLT R0,R0,#1 LDR R15,wheretogo .wheretogo EQUD 0 : .addlast BL getnome1: MOV R0,R1 BL poknscr: MOV R0,#0: BL findmapstats SUB R0,R1,#20: LDR R1,ttalf: ADD R1,R1,#20: LDR R2,insdata BL unishift MOV R0,#0: BL extramapstats MOV R0,#0: STR R0,[R8] MVN R0,#0: MVN R1,#1 STR R0,[R6,#-12]: STR R1,[R6,#-8] STR R0,[R2,#-12]: STR R1,[R2,#-8] MOV R5,R4: BL randpas B finins .insertscrn STR R0,victime3 MOV R0,#150: BL chkroomins BL getnome1: CMP R1,#25: BEQ just25 LDR R0,victime3: ADD R2,R0,#1: CMP R2,R1: BEQ addlast BL poknscr: LDR R0,victime3 BL findmapstats BMI besensible BL unstopper ADD R0,R2,#thatsallfolks-eachscr BL unishift MOV R0,R2: LDR R1,ttalf: LDR R2,insdata BL unishift LDR R1,victime3: BL rdcursc: CMP R1,R0: ADDLE R0,R0,#1: BLLE wrcursc MOV R0,R1 BL extramapstats ADD R0,R1,#4: MVN R9,#0: MOV R1,R2: SUB R2,R0,#4 BL unishift: STR R9,[R2] MOV R1,R6:MOV R2,R5: ADD R0,R2,#4: BL unishift STR R9,[R2] MOV R1,R8: MOV R2,R7: ADD R0,R2,#4: BL unishift MOV R9,#0: STR R9,[R2] MOV R1,R4: MOV R2,R3: ADD R0,R2,#8: BL unishift STMFD R13!,{R0-R2}: MOV R5,R2: BL randpas: LDMFD R13!,{R0-R2} LDR R11,[R2,#-8]: LDR R12,[R2,#-4] LDR R9,[R2],#8: LDR R10,[R2,#-4] EOR R9,R9,R11: EOR R10,R10,R12:.loop LDR R11,[R2]: EOR R11,R11,R9: STR R11,[R2],#4 LDR R11,[R2]: EOR R11,R11,R10: STR R11,[R2],#4 CMP R2,R1: BLE loop .finins MOV R0,#1: BL addnsc B editzone .eppabort TEQP R15,#0: MOV R0,R0 LDR R13,excepR13 LDR R0,ppstate: MOVS R0,R0 BEQ wasfirst ADR R0,oldie: LDMIA R0,{R2,R3,R4,R5} LDR R1,tomaps: STMIA R1,{R2,R3,R4,R5} B pploop2 .getvic4R1 LDRB R1,victime4: MOV R15,R14 .wasfirst LDR R1,tomaps: LDR R2,[R1,#8]: SUBS R2,R2,#&10: MOVMI R2,#0 STR R2,[R1,#8]: B pploop2 .ppabort EQUD eppabort .scabort EQUD sccabort .osbyte4Y0 MOV R2,#0 .osbyte4 MOV R0,#4: B osbyte .victime3 .oldie EQUD 0:.pokeedit:EQUD 0:.pokepass EQUD 0:.passend EQUD0 .victime4 .ppstate EQUD 0 .junkdest .excepR13 EQUD 0 .jenddest .oldabort EQUD 0 EQUD -1:.bankpsw EQUD 0 .fiddleabort STR R13,excepR13 MOV R0,#3: ADR R1,gmmabort: SWI "XOS_ChangeEnvironment" STR R1,oldabort: MOV R15,R14 .unfdabort MOV R0,#3: LDR R1,oldabort: SWI "XOS_ChangeEnvironment" MOV R15,R14 .gmmabort TEQP R15,#0: MOV R0,R0 LDR R13,excepR13 B endgmws .sccabort TEQP R15,#0: MOV R0,R0 LDR R13,excepR13: B didsupercl .tempscrstart EQUD 0 .scrstartnow EQUD 0 .sizescrnow EQUD 0 .previewplay MOV R0,#2: MOV R1,#(320-256)*1024 SWI "XOS_ChangeDynamicArea" MOV R0,#2: BVC got320k MOV R1,#(256-160)*1024: RSB R1,R1,#0 SWI "XOS_ChangeDynamicArea" .got320k SWI "XOS_ReadDynamicArea" STR R0,scrstartnow STR R0,tempscrstart STR R1,sizescrnow STMFD R13!,{R14}: BL vsync MOV R0,#0: BL wrsnps BL rdcursc: SUB R0,R0,#1: BL wrcursc2 MOV R1,#1: BL osbyte4 SWI &100+22: SWI &100+15: SWI "XOS_RemoveCursors" MOV R0,#3: MOV R1,#0: SWI "XOS_ChangeEnvironment": STR R1,oldabort STR R13,excepR13 MOV R0,#0: STR R0,ppstate .pploop2 MOV R0,#&FF: BL oldlevstr .didsupercl MOV R0,#3: LDR R1,scabort: SWI "XOS_ChangeEnvironment" LDR R11,scrstartnow: ADD R12,R11,#&28000: BL superclear LDR R0,scrstartnow: LDR R1,sizescrnow CMP R1,#320*1024: ADDGE R0,R0,#&28000 BLGE hairs .didsupercl LDR R0,scrstartnow: BL hairs MOV R0,#3: LDR R1,ppabort: SWI "XOS_ChangeEnvironment" LDR R0,scrstartnow: BL clipws: MOV R3,R0: BL awsin ; BL decodecodes ; BL bumph ; BL encryptcodes LDR R3,sizescrnow: CMP R3,#320*1024: BLT pauper LDR R3,scrstartnow: LDR R0,tempscrstart: SUB R4,R3,R0 STR R4,bankpsw: EOR R3,R4,#&28000: ADD R3,R3,R0 STR R3,scrstartnow: MOV R0,#&16: ADR R1,bankpsw: SUB R1,R1,#1 SWI "OS_Word" .pauper .loop MOV R1,#256-1: BL scanne: MOVEQ R10,#4: MOVNE R10,#1 BL clbuf SWI "XOS_ReadC" BCS escepp CMP R0,#13: BEQ escepp LDR R1,tomaps: LDMIA R1,{R2,R3,R4,R5} ADR R6,oldie: STMIA R6,{R2,R3,R4,R5} CMP R0,#&2B: CMPNE R0,#&3D: BEQ biggerpp CMP R0,#&2D: CMPNE R0,#95: BEQ smallerpp CMP R0,#139: BEQ ppup CMP R0,#138: BEQ ppdn CMP R0,#136: BEQ pplf CMP R0,#137: BEQ pprg AND R0,R0,#&DF CMP R0,#90: BEQ ppccw CMP R0,#88: BEQ ppcw B loop .escepp BL ackesc LDR R0,sizescrnow: RSBS R1,R0,#256*1024 MOV R0,#2: SWINE "XOS_ChangeDynamicArea" BL vsync: SWI &100+22: SWI &100+13: SWI "XOS_RemoveCursors" SWI 256+18: SWI 256+0: SWI 256+&2A BL pon MOV R0,#3: LDR R1,oldabort: SWI "XOS_ChangeEnvironment" BL rdcursc: BL getj2 LDMFD R13!,{R15} .tomaps EQUD mapcopy+&28 .biggerpp ADD R4,R4,R10: CMP R4,#255: MOVGT R4,#255 .wrteanddo STMIA R1,{R2,R3,R4,R5}: MOV R0,#1: STR R0,ppstate: B pploop2 .smallerpp SUBS R4,R4,R10: MOVLT R4,#0: B wrteanddo .ppup ADD R10,R10,R10,LSL#2: SUB R3,R3,R10,LSL#7: ADR R15,wrteanddo .ppdn ADD R10,R10,R10,LSL#2: ADD R3,R3,R10,LSL#7 CMP R3,#&28000: BGE ppup B wrteanddo .pplf SUB R3,R3,R10: ADR R15,wrteanddo .pprg ADD R3,R3,R10: ADR R15,wrteanddo .ppccw ADD R5,R5,R10,LSL#25: B wrteanddo .ppcw SUB R5,R5,R10,LSL#25: B wrteanddo ] endeditpreev=P%:P%=hello [OPT T B beginning ALIGN ] P%=fanspin [OPT T STMFD R13!,{R14} BL getR0at: EQUD velo BL getR1at: EQUD vdown: MOV R1,R1,LSL#14 BL getR2at: EQUD spd ADD R0,R0,R1: MUL R0,R2,R0 LDR R1,baselftfan: ADR R2,fanpos LDR R12,fanpos+4: SUB R11,R0,R12: ADD R12,R12,R11,ASR#5: STR R12,fanpos+4 LDR R3,fanpos: ADD R3,R3,R12,LSL#5 CMP R3,#240<<24: BLO noworfan: MOVS R12,R12: SUBMI R3,R3,#16<<24 ADDPL R3,R3,#16<<24:.noworfan STR R3,fanpos: MOV R3,R3,LSR#28 BL getR2at: EQUD bank2: MOV R2,R2,ASR#16: MOV R2,R2,LSL#3 MOV R4,#&FF: MOV R4,R4,LSL R2 LDR R7,fanframes AND R5,R7,R4: EOR R6,R5,R7: ORR R6,R6,R3,LSL R2: STR R6,fanframes MOV R5,R5,ASR R2: CMP R5,#&FF: ADDEQ R5,R3,#40 CMP R5,R3: LDMEQFD R13!,{R15} STMFD R13!,{R3}: BL spinner LDMFD R13!,{R3}: LDR R1,basergtfan: BL spinner LDMFD R13!,{R15} .fanframes EQUD 0 .rstfanframes MVN R0,#0: STR R0,fanframes: MOV R15,R14 .scrnb1 LDR R7,teascbto: LDR R6,[R7]: STMFD R13!,{R6} LDR R6,specsb: STR R6,[R7]: MOV R15,R14 .scrnb2 LDR R7,teascbto: LDMFD R13!,{R6}: STR R6,[R7]: MOV R15,R14 .specsb EQUD &1FE42C0+&14000 ;bodged .teascbto EQUD scrnbot .tobgiwant EQUD backg .minustoo SUB R1,R1,#4:.loop STR R4,[R1],#4: SUBS R12,R12,#1: BNE loop MVN R8,#1: B arch2xyz .spinner LDR R6,teascbto: LDR R6,[R6]: ADD R2,R1,R6 ADR R5,spindat: ADD R4,R5,#144 ADD R4,R4,R3,LSL#4: ADD R4,R4,R3,LSL#7 MOV R10,#12:.loop ]:FORT1=0 TO 3:[OPT T LDMIA R4!,{R8,R9,R12}: LDMIA R5!,{R0,R1,R6} LDMIA R2,{R3,R7,R11} AND R0,R0,R3: AND R1,R1,R7: AND R6,R6,R11 ORR R8,R8,R0: ORR R9,R9,R1: ORR R12,R12,R6 STMIA R2,{R8,R9,R12} ADD R2,R2,#&140 ]NEXT:[OPT T SUBS R10,R10,#4: BNE loop MOV R15,R14 .baselftfan EQUD &A3C .basergtfan EQUD &AF0 .fanpos EQUD 0: EQUD 0 .vsync MOV R0,#19:.osbyte SWI "XOS_Byte": MOV R15,R14 .nofsmes SWI &100+28: SWI &100+0: SWI &100+1: SWI &100+1: SWI &100+0 MOV R0,#22: ADR R1,blkans: SWI "XOS_Word" MOV R15,R14 .blkans EQUB 1: EQUD &28000:ALIGN .spindat ] endfanspin=P%+2304:P%=editor [OPT T .fspzs EQUS ".":.zonscb EQUB 0:EQUB 0:ALIGN .zonelist ]:P%+=160 [OPT T .dateformat EQUS " %W3,%DY %M3 %CE%YR.%24:%MI:%SE": EQUB 0 .returnedstr EQUS " ": EQUB 0 ALIGN .escznum BL ackesc: MVN R0,#0: LDMFD R13!,{R14}: B editloop2 .zonelind EQUD &1938 .tozono EQUD zono .getzonenum STMFD R13!,{R14} STR R0,wahcr BL rcol MOV R6,#&1E00: ADD R7,R6,#&10: BL stcar2 MOV R0,#68: BL Dutext2 BL copybnks BL bckspc BL clbuf .loop SWI "OS_Mouse": TST R2,#5: BEQ nomousepz CMP R0,#225: BLT nomousepz: CMP R0,#&3E0: BGT nomousepz SUBS R0,R1,#&240: BMI nomousepz MOV R1,#40: BL divide32: RSB R0,R2,#&39: B gotb .nomousepz BL getmenu: CMP R0,#15: BEQ escznum BL testkeys: MOV R0,R1: CMP R2,#&1B: BEQ escznum CMP R0,#13: BEQ crhandl .gotb CMP R0,#&31: BLT loop: CMP R0,#&3A: BGE loop LDR R1,tozono: STRB R0,[R1]: SUB R0,R0,#&30 BL Dutext2 BL copybnks LDMFD R13!,{R15} .wahcr EQUD &E0000000 .crhandl LDR R0,wahcr: MOVS R0,R0: BEQ escznum: LDR R0,tozono LDRB R0,[R0]: B gotb .listzones STMFD R13!,{R14} MOV R12,#192 MOV R3,#94 LDR R1,zonelind: BL dobox BL tweakbot BL colmy LDR R7,zonelind: ADD R7,R7,#&510 ADR R10,zonelist LDR R11,tozono: LDRB R11,[R11] MOV R0,#1:.loop1 BL stcar2: STRB R0,zonscb SUB R11,R11,#1: CMP R11,#&30: STMFD R13!,{R0} MOVEQ R0,#60: MOVNE R0,#66: BL Dutext2: LDMFD R13!,{R0} BL Dutext2: BL Dutext66 LDR R4,[R10],#4: CMP R4,#0: BEQ notazonel ADD R6,R10,#4:MOV R4,#7:.loop LDRB R0,[R6],#1: BL Dutext2 SUBS R4,R4,#1: BPL loop SUB R0,R10,#4: ADR R1,returnedstr: MOV R2,#31: ADR R3,dateformat SWI "XOS_ConvertDateAndTime" ADR R12,returnedstr:.loop LDRB R1,[R12],#1: CMP R1,#0: BEQ notazonel BL asctoint: BL Dutext2: B loop .notazonel ADD R10,R10,#12 ADD R7,R7,#&140*10: LDRB R0,zonscb: ADD R0,R0,#1: CMP R0,#10: BNE loop1 BL untweak: LDMFD R13!,{R15} .scanzones STMFD R13!,{R14}: MOV R14,#&3A ADR R10,zonelist MOV R0,#&31 .loop STRB R0,zonscb ADR R1,fspzs MOV R0,#5: SWI "XOS_File" MOVS R0,R0 STREQ R0,[R10],#4: STREQ R0,[R10],#12: BEQ onlyz STR R3,[R10],#4: STR R2,[R10],#4 MOV R0,#&40: SWI "XOS_Find": MOV R1,R0 MOV R0,#3: MOV R2,R10: MOV R3,#8: MOV R4,#0: SWI "XOS_GBPB" MOV R0,#0: SWI "XOS_Find" ADD R10,R10,#8 .onlyz LDRB R0,zonscb: ADD R0,R0,#1: CMP R0,R14: BNE loop LDMFD R13!,{R15} .updatezl LDR R10,tozono: LDRB R0,[R10]: STMFD R13!,{R14}: ADD R14,R0,#1: ADR R10,zonelist: SUB R1,R0,#&31: ADD R10,R10,R1,LSL#4: B loop .fierce3 EQUD &D12F2E2C .ttbindx EQUD 60*&140+&A0-45 .mool EQUD 68*&140+&A0-20 .totime EQUD time .whichct EQUD timetip .playagmenu EQUB -1: EQUW -1: FNut("PLAY AGAIN",0): EQUB -1 EQUD -1: EQUD -1: EQUB -1: EQUW -1 FNut("QUIT",0): EQUB -1: ALIGN .timetaken BL clbuf BL isbank0 ADR R12,playagmenu: BL domenu BL tweakbot LDR R1,ttbindx: MOV R3,#40: MOV R12,#90: BL dobox MOV R1,#&400000 LDR R10,whichct: LDRB R10,[R10] LDR R2,fierce3: LDR R3,mool: MOV R0,#125: CMP R10,#255 ADDNE R0,R0,#1: BL commentB BL bckspc: ADD R1,R1,#&140*10: SUB R1,R1,#4*9: BL putca LDR R5,totime LDRB R0,[R5],#1: CMP R0,#9: BEQ noneleft: MOVS R0,R0: MOVEQ R0,#66 BL Dutext2 BL getnexto: MOV R0,#10: BL Dutext2 BL getnexto BL getnexto MOV R0,#10: BL Dutext2 BL getnexto BL getnexto .shownit BL untweak BL ackesc .loop BL getmenu: CMP R0,#15: CMPNE R0,#3: BEQ loop .loop BL getmenu: CMP R0,#15: CMPNE R0,#3: BNE loop CMP R0,#15: BEQ editloop2 B playtest .noneleft MOV R0,#0: BL Dutext2: BL Dutext2: MOV R0,#10: BL Dutext2 MOV R0,#0: BL Dutext2: BL Dutext2: MOV R0,#10: BL Dutext2 MOV R0,#0: BL Dutext2: BL Dutext2: B shownit .getnexto LDRB R0,[R5],#1: B Dutext2 .videoCl2 STMFD R13!,{R14} LDR R11,bodgeanother3:.inVCl2 ADD R12,R11,#&10000: ADD R12,R12,#&2C0 .loop STMFD R13!,{R11,R12}: BL superclear: LDMFD R13!,{R11,R12} ADD R11,R11,#&14000: ADD R12,R12,#&14000 LDR R0,bodgeanother3: ADD R0,R0,#&40000: CMP R12,R0: BLT loop LDMFD R13!,{R15} .videoCl32 STMFD R13!,{R14} LDR R11,bodgeanother3: ADD R11,R11,#&14000: B inVCl2 .isbliflg EQUD blindflag .bodgeanother3 EQUD &1FC0000 ; bodged .darkscrn .loop MOV R3,#24 CMP R1,R12: ADDLT R1,R1,#&140:ADDLT R0,R0,#24:BLT orange4 CMP R1,R9: BGT gobehind4 LDR R12,remapo: LDR R12,[R12] .loop2 LDRB R5,[R0],#1: CMP R5,#0: BEQ noplty CMP R5,#&F7: LDRGTB R5,[R12,R5]: MOVLE R5,#1 MOVS R5,R5:.noplty STRNEB R5,[R1],#1: ADDEQ R1,R1,#1 SUBS R3,R3,#1: BNE loop2 ADD R1,R1,R4 .orange4 SUBS R2,R2,#1:BNE loop B orange3 .gobehind4 .loop2 LDRB R5,[R0],#1: CMP R5,#0: BEQ noplty2 CMP R5,#&F7: LDRGTB R5,[R12,R5]: MOVLE R5,#1 MOVS R5,R5:.noplty2 STRNEB R5,[R1],#1: ADDEQ R1,R1,#1 CMP R1,R10: BGE flamesee SUBS R3,R3,#1: BNE loop2 ADD R1,R1,R4 SUBS R2,R2,#1:BNE loop: B flamesee : .drawtinted LDR R3,isbliflg: LDRB R3,[R3]: MOVS R3,R3: BNE darkscrn .loop MOV R3,#24 CMP R1,R12: ADDLT R1,R1,#&140:ADDLT R0,R0,#24:BLT orange2 CMP R1,R9: BGT gobehind2 LDR R12,remapo: LDR R12,[R12] .loop2 ] FORT2=0 TO 7:[OPT T LDRB R5,[R0],#1: AND R8,R5,#&FC CMP R8,#&28: SUBEQ R5,R5,#&28 CMP R8,#&C0: SUBEQ R5,R5,#&C0-&2C CMP R8,#&EC: SUBEQ R5,R5,#&EC-&D0 CMP R8,#&4C: ADDEQ R5,R5,#&D0-&4E CMP R5,#&F7: LDRGTB R5,[R12,R5] MOVS R5,R5:STRNEB R5,[R1],#1 ADDEQ R1,R1,#1 ]NEXT [OPT T SUBS R3,R3,#8: BNE loop2 ADD R1,R1,R4 .orange2 SUBS R2,R2,#1:BNE loop B orange3 .gobehind2 .loop2 CMP R1,R10: BGE flamesee LDRB R5,[R0],#1: AND R8,R5,#&FC CMP R8,#&28: SUBEQ R5,R5,#&28 CMP R8,#&C0: SUBEQ R5,R5,#&C0-&2C CMP R8,#&C4: SUBEQ R5,R5,#&C4-&2C CMP R8,#&EC: SUBEQ R5,R5,#&EC-&D0 CMP R5,#&F7: LDRGTB R5,[R12,R5] LDRB R11,[R1],#1: MOVS R11,R11 STREQB R5,[R1,#-1] SUBS R3,R3,#1: BNE loop2 ADD R1,R1,R4 SUBS R2,R2,#1:BNE loop: B flamesee .tempen EQUD 0 .remapo EQUD remap .intemplscanA STMFD R13!,{R14}:.intemplscan2A BL rettnum3: B inthy .templscan LDR R0,tempen: CMP R0,#0: MOVEQ R15,R14 .intemplscan STMFD R13!,{R14}:.intemplscan2 BL rettnum3M .inthy LDR R4,tempno: STRB R3,tempno: CMP R3,R4: BEQ eqnod STMFD R13!,{R0-R11} LDR R3,tempno: CMP R3,#255: BEQ yoman BL vsync: BL box: LDR R3,tempno LDR R6,totempldat: ADD R6,R6,#36 ADD R6,R6,R3,LSL#4 ADD R6,R6,R3,LSL#3 MOV R0,#113 BL gotR6 LDRB R3,tempno: ADR R4,tprc: LDR R5,[R4,R3,LSL#2] LDR R3,midk: LDR R3,[R3]: ADD R3,R3,#4*10: BL outmoni .eqnodII LDMFD R13!,{R0-R11} .eqnod CMP R3,#255: LDMEQFD R13!,{R15} .midk EQUD wenttop .loop BL scanesc: LDMEQFD R13!,{R15} BL rettnum3M TST R2,#5: BNE buyyit: LDR R4,tempno: CMP R3,R4: BEQ loop LDMFD R13!,{R15} .buyyit LDR R4,tempen: MOVS R4,R4: BEQ newtemplateR3 CMP R3,#2: BHI loop STR R2,tempen ADR R4,tprc: LDR R4,[R4,R3,LSL#2]: LDR R6,cashrd: LDR R5,[R6] SUBS R4,R5,R4: BMI loop: STR R4,[R6] BL cashcopy LDR R4,totempldat: ADD R4,R4,#36 ADD R4,R4,R3,LSL#3: ADD R4,R4,R3,LSL#4: LDMIA R4,{R5-R10} LDR R4,togotlst: STMIA R4,{R5-R10}: BL dcash BL bckshpII BL ensureeok BL wantinventory BL newfoot BL initcsh: BL dtime: BL dcash: BL dscore LDR R2,tempen MOV R0,#0: STR R0,tempen CMP R2,#1: LDMEQFD R13!,{R14}: BEQ leaveshop BL calcupgprice LDMFD R13!,{R15} .wantinventory SWI "XOS_ReadMonotonicTime": ADD R0,R0,#15: STR R0,mintimei MOV R15,R14 .chinv SWI "XOS_ReadMonotonicTime": LDR R2,mintimei: CMP R0,R2: BLT chwelc ADD R0,R0,#&140000: STR R0,mintimei STMFD R13!,{R14}: BL vsync: BL box: LDMFD R13!,{R14}: B inventory .wantwelc SWI "XOS_ReadMonotonicTime": ADD R0,R0,#20: STR R0,mintimei2 MOV R15,R14 .nowelc MOV R0,#&7F000000: STR R0,mintimei2: MOV R15,R14 .chwelc LDR R2,mintimei2: CMP R0,R2: MOVLT R15,R14 ADD R0,R0,#&140000: STR R0,mintimei2 STMFD R13!,{R14}: BL vsync: BL box: LDMFD R13!,{R14}: B welcomes .chhurry SWI "XOS_ReadMonotonicTime" LDR R2,mintimei2: CMP R0,R2: MOVLT R15,R14 ADD R0,R0,#&140000: STR R0,mintimei2 STMFD R13!,{R14}: BL vsync: LDMFD R13!,{R14}: B hurryup .mintimei2 EQUD 0 .mintimei EQUD 0 .outmon LDR R3,m1FE42:.outmoni STMFD R13!,{R14} STMFD R13!,{R5} MOV R1,#1: LDR R2,feint2: MOV R0,#7: BL handycomment LDR R2,bold2: BL cashcolz LDMFD R13!,{R5}: LDR R6,cashrd: LDR R6,[R6] LDR R3,m14A42: MOV R0,#8: CMP R5,R6: ADDLE R0,R0,#1 LDR R10,midk: LDR R10,[R10,#inventries-wenttop] CMP R10,#11: ADDGT R3,R3,#&140*7: ADDEQ R3,R3,#&140*3 BL mightcomm LDMFD R13!,{R15} .m1FE42 EQUD -&1FE4-&140*10 .m14A42 EQUD -&14A4-&140*5 .yoman BL wantwelc: B eqnodII .feint2 EQUD &D32F2E2C:.bold2 EQUD &D32D2C01 .togotlst EQUD got .rettnum3M SWI "OS_Mouse" .rettnum3 MOV R3,#255: SUBS R1,R1,#256: MOVLT R15,R14 CMP R0,#32: MOVLT R15,R14 CMP R0,#&1E0: MOVGT R15,R14 CMP R1,#296: MOVGT R15,R14 MOV R4,#3:.loop SUBS R1,R1,#20*4: SUB R4,R4,#1: BPL loop CMN R1,#24: MOVLT R3,R4: MOV R15,R14 .tempno EQUD 255 .eprix EQUD prices .tempenon MOV R0,#1:.tempctrl STR R0,tempen: MOV R15,R14 .tempenoff MOV R0,#0: B tempctrl .calctempprc LDR R5,eprix LDR R6,totempldat: ADD R4,R6,#36 ADR R7,tprc MOV R8,#2:.loop MOV R9,#0:MOV R10,#0:.loop2 LDRB R11,[R4,R9] CMP R11,#255: ANDNE R6,R11,#&1F: CMP R6,#18: MOVEQ R6,R11,LSR#5 ADDEQ R10,R10,#300: MOVEQ R12,#300: MLAEQ R10,R12,R6,R10 CMPNE R11,#255: LDRNE R6,[R5,R6,LSL#2]: ADDNE R10,R10,R6: ADD R9,R9,#1 CMP R11,#255: BNE loop2 STR R10,[R7],#4: ADD R4,R4,#24: SUBS R8,R8,#1: BPL loop MOV R15,R14 .tprc EQUD 0: EQUD 0: EQUD 0 .tticw EQUD &1FFB000+&3E80-5*8*7 ; bodged .pushinct MOV R5,#&2F: MOV R4,#&D1: MOV R10,#&D3 MOV R0,#&A000: ADD R0,R0,#8: LDR R1,tticw: MOV R2,#80: MOV R3,#13 B ownhin .purplet MOV R5,#&3F: MOV R4,#&3D: MOV R10,#&3C: BL ownhin: B bkohst .faroutT2 EQUD faroutT .templscrdx EQUD &1FD7000 ; bodged .lsttemplates LDR R0,tempen: MOVS R0,R0: MOVEQ R15,R14 .inlsttempl STMFD R13!,{R14} MOV R0,#&A000: ADD R0,R0,#8 LDR R1,tticw: MOV R2,#80: MOV R3,#13: BL ownhig LDR R1,templscrdx MOV R4,#&600: MOV R12,#0:.loop STR R12,[R1,R4] SUBS R4,R4,#4: BPL loop MOV R0,#&BE00: ADD R0,R0,#&18 MOV R5,#2: LDR R6,totempldat .loop2 MOV R2,#112: MOV R3,#14 SUB R9,R0,#&140*13 ADR R11,putoad: STR R9,[R11],#8 LDMIA R6!,{R9,R10,R12} STMIA R11,{R9,R10,R12} STMFD R13!,{R0-R12} SUB R0,R0,#16 LDR R9,faroutT2: LDRB R9,[R9]: CMP R9,#0: BNE purplet ADR R9,tprc+8: LDR R9,[R9,-R5,LSL#2] LDR R10,cashrd: LDR R10,[R10]: CMP R9,R10: BGT darkon BL ownhig .bkohst BL securetxt:.putoad EQUD 0 EQUD &101213: EQUD 0: EQUD 0: EQUD 0 LDMFD R13!,{R0-R12} ADD R0,R0,#&140*20 SUBS R5,R5,#1: BPL loop2 LDMFD R13!,{R15} .cashrd EQUD cash .totempldat EQUD templdat .darkon MOV R5,#&2F: MOV R4,#&2D: MOV R10,#&2C: BL ownhin: B bkohst .clickity CMP R1,#448: BGT clickity1 CMP R1,#312: BLT cloop CMP R1,#380: MOVLT R2,#16: MOVGE R2,#0: MVN R6,#0 SUBS R0,R0,#72: BLT cloop MVN R6,#0:.loop SUBS R0,R0,#18*4: ADD R6,R6,#1: BPL loop CMP R6,#15: BGT cloop ADD R6,R6,R2 CMP R6,#20: BGE cloop: ADD R1,R6,#ASC("f"): B fintinR1 .clfint ADR R4,inftboxz: BL checkicons: MOVS R7,R7: BMI zstatsloop .clickity1 SWI "OS_Mouse": SUBS R0,R0,#144: MOVLE R0,#0: MOV R5,R0,ASR#4 CMP R5,#62: MOVHS R5,#61: RSB R0,R1,#920: MOV R1,#24 BL divide32: ADD R5,R5,R2,LSL#6: SUB R5,R5,R2,LSL#1 MOV R0,#0: BL getR4fint:.loop ADD R0,R0,#1: LDRB R6,[R0,R4]: CMP R6,#31: MOVEQ R5,#0: SUBS R5,R5,#1 BPL loop: SUB R0,R0,#1 BL wrftcurspos MOV R1,#1: BL osbyte4Y0 .loop SWI "OS_Mouse": TST R2,#7: BNE loop .cloop1 BL outputft BL clbuf .loop SWI "OS_Mouse": TST R2,#7: BNE loop .cloop SWI "OS_Mouse": TST R2,#7: BNE clickity BL testkeys CMP R1,#135: BEQ deleterhs CMP R1,#139: BEQ goyup CMP R1,#138: BEQ godwn CMP R1,#137: BEQ gorig CMP R1,#136: BEQ golft CMP R1,#8: CMPNE R1,#127: BEQ deleteft CMP R1,#64: BEQ cloop: CMP R1,#94: BEQ cloop CMP R1,#65: ANDGE R1,R1,#&DF CMP R1,#32: BLT noichd: CMP R1,#90: BGT noichd STMFD R13!,{R1}: MOV R2,#&FE: BL asctoint2: LDMFD R13!,{R1} CMP R2,#&FE: BEQ noichd .fintinR1 SUB R2,R1,#33: BL rdftlenR1: CMP R1,#finsize BGE cloop: BL rdftcurspos1: ADD R0,R1,#1: BL wrftcurspos BL ftshift BL getR4fint:AND R2,R2,#&FF: STRB R2,[R1,R4]: B cloop1 .noichd BL getmenu: MOVS R0,R0: BMI cloop STMFD R13!,{R0} MVN R0,#0: BL wrftcurspos: BL outputft MOV R1,#2: MOV R2,#0: BL osbyte4Y0 BL rcol LDMFD R13!,{R0}: B gotmenu2 .goyup BL rdftcurspos: SUBS R0,R0,#62:.mayisok BGE isokk: B cloop .godwn BL rdftcurspos: BL getR4fint: MOV R5,#62 .loop ADD R0,R0,#1: LDRB R3,[R0,R4]: CMP R3,#31: MOVEQ R5,#0 SUBS R5,R5,#1: BPL loop: SUB R0,R0,#1: B isokk .gorig BL rdftcurspos: BL getR4fint: ADD R0,R0,#1: LDRB R2,[R0,R4] CMP R2,#31: BEQ cloop:.isokk BL wrftcurspos: B cloop1 .golft BL rdftcurspos: SUBS R0,R0,#1: B mayisok .deleterhs BL getR4fint BL rdftcurspos: ADD R1,R0,#1: LDRB R2,[R1,R4] CMP R2,#31: BEQ cloop: BL ftshift: B cloop1 BL rdftcurspos: ADD R1,R0,#1: BL ftshift: B cloop1 .deleteft BL rdftcurspos1: MOVS R1,R1: BEQ cloop SUB R0,R1,#1: BL ftshift BL wrftcurspos: B cloop1 .inftboxz EQUW 128: EQUW 1200: EQUW 1152: EQUW 688: EQUD -1 .oly EQUD mapspr .olyII EQUD 0 .olyIII EQUD backg .ofstscr EQUD 0 .r1692 EQUD &1692 .rmapo EQUD &1692+&1680*7 .modifek EQUD modifet .iscontin EQUD continedit .rstce LDR R6,iscontin:.rstce2 LDR R7,modifek: STR R6,[R7]: MOV R15,R14 .showbgic STMFD R13!,{R14} LDR R0,rmapo: STR R0,ofstscr LDR R1,olyIII: MOV R0,#20: B wondersc .boringbodge EQUD &1FC0000 ; bodged .choosespr LDR R0,r1692: STR R0,ofstscr ADR R6,exitet: BL rstce2 MOV R0,#120 LDR R1,oly .wondersc STR R1,olyII STMFD R13!,{R0}: MOV R1,#&1400: ADD R1,R1,#16: MOV R3,#168 MOV R12,#18*16:ADD R12,R12,#2 BL dobox BL tweakbot LDR R1,ofstscr: CMP R1,#&2000: BGT notypeza LDR R7,cpos: BL stcar2 MOV R7,#24: MOV R0,#66:.loop BL Dutext2: SUBS R7,R7,#1: BNE loop .notypez LDR R7,olyII BL getbank: LDR R6,boringbodge: ADD R6,R1,R6 LDR R10,ofstscr: ADD R6,R6,R10 MOV R5,#0: \LDR R10,oly: \CMP R10,R7: \MOVNE R5,#1024 LDMFD R13!,{R10}: .loop MOV R11,#16:MOV R12,R6: .loop2 LDR R7,ofstscr: CMP R7,#&2000 LDRGT R7,olyII: ADDGT R7,R7,R5,LSL#8: BGT notrans CMP R5,#1024: BGT notrans: LDR R7,olyII: BL trans5to8 ADD R7,R7,R8,LSL#8:.notrans MOV R8,#16:.loop3 MOV R9,#15:.loop4 LDRB R0,[R7],#1: STRB R0,[R6,R9] SUBS R9,R9,#1: BPL loop4: ADD R6,R6,#&140 SUBS R8,R8,#1: BNE loop3 ADD R12,R12,#18: MOV R6,R12: SUBS R10,R10,#1: BEQ donebsprs ADD R5,R5,#1 SUBS R11,R11,#1: BNE loop2 ADD R6,R6,#&60: ADD R6,R6,#&1500: B loop .notypeza BL idontknowok: MOVS R0,R0: BEQ notypez: LDMFD R13!,{R0} .donebsprs LDR R1,ofstscr: CMP R1,#&2000: LDMGTFD R13!,{R15} .loop SWI "OS_Mouse": MOVS R2,R2: BNE loop .loop2 BL cketkeys .exitet SWI "OS_Mouse": STRB R2,clioss SUBS R0,R0,#72: BLT exitsels MVN R6,#16:.loop SUBS R0,R0,#18*4: ADD R6,R6,#1: BPL loop CMP R6,#0: BEQ exitsels CMP R0,#&4C0: BGE exitsels SUBS R1,R1,#&3B4: BPL exitsels .loop ADDS R1,R1,#18*4: ADD R6,R6,#16: BMI loop CMP R6,#120: BGE exitsels MOV R0,R6: LDRB R7,clioss: MOVS R7,R7: BNE clickedo LDRB R7,says: CMP R0,R7: BEQ loop2 STRB R0,says LDR R7,cpos: BL stcar2 LDR R7,tblknms .loop SUBS R0,R0,#1: BMI foundblko .loop3 LDRB R1,[R7],#1: CMP R1,#255: BNE loop3: B loop .foundblko LDRB R0,[R7],#1: CMP R0,#255: BEQ spcthen: BL Dutext2 B foundblko:.spcthen MOV R0,#66: MOV R1,#12:.loop BL Dutext2: SUBS R1,R1,#1: BNE loop: B loop2 .cpos EQUD &D7B4 .clickedo STMFD R13!,{R0-R12} .loop SWI "OS_Mouse": MOVS R2,R2: BNE loop LDMFD R13!,{R0-R12} BL rstce B r0isspr .clioss EQUB 0:.says EQUB &FF ALIGN .tblknms EQUD blocknames .loadzne BL clmenu: ADR R10,ldznms: BL upromls BL listzones: MOV R0,#0: BL getzonenum BL loadzone: BL chkallow1: BL pendnews BL initstmapst: MOV R1,#0: B okdoit3 .exitsels LDRB R7,clioss: MOVS R7,R7: MOVEQ R7,#&FF: STREQB R7,says BLNE rstce: BNE trkloop LDR R7,cpos: BL stcar2: BL spcthen .ldznms FNut("LOAD WHICH ZONE?",0): EQUB 255: ALIGN .cownhigi CMP R5,R2: MOV R2,#24:.cownhigi3 MOV R3,#17: BNE ownhig MOV R5,#&2F: MOV R10,#&D3: MOV R4,#&D1: B ownhin .cownhigi2 CMP R5,#2: CMPNE R5,#1: MOV R2,#48: B cownhigi3 : .requestor ADR R12,reqmenu BL domenu .loop SWI "OS_Mouse": MOVS R2,R2: BNE loop .loop ADR R9,continuereq: STMFD R13!,{R9}: BL clickonlist LDMFD R13!,{R9} BL getmenu: CMP R0,#15: BEQ editloop2 CMP R0,#3: BEQ okdoit2: B loop .continuereq B redoR0 : .reqmenu FNut("UNDO RECENT CHANGES?",0): EQUB -1: EQUW -1 FNut("YES",0): EQUD -1: EQUD -1: EQUD -1 FNut("NO",0): EQUB -1:ALIGN .tocuscr EQUD current .toldji EQUD oldjunkif .tooji EQUD junkmap .savebdjnk LDR R0,toldji: LDR R1,tooji LDR R9,tocuscr: LDR R9,[R9]:.loop MOVS R9,R9: BLE floopy LDMIA R1!,{R6,R7,R8,R11}: CMN R6,#2: SUBHS R9,R9,#1: MOVEQ R9,#0 SUBHS R1,R1,#12 B loop:.floopy .loop LDMIA R1!,{R2,R3,R4,R5} STMIA R0!,{R2,R3,R4,R5} CMN R2,#2: BLO loop: MOV R15,R14 .rstrbdjunk LDR R2,toldji: LDR R5,tooji: MOV R1,R2 LDR R9,tocuscr: LDR R9,[R9]:.loop MOVS R9,R9: BLE floopy2 LDMIA R5!,{R6,R7,R8,R11}: CMN R6,#2: SUBHS R9,R9,#1 SUBHS R5,R5,#12: SUBEQ R5,R5,#4 BNE loop:.floopy2 .loop LDMIA R1!,{R6,R7,R8,R9}: CMN R6,#2: BLO loop: SUB R1,R1,#16 SUB R6,R1,R2: ADD R0,R5,R6 MOV R2,R5:.loop LDMIA R2!,{R6,R7,R8,R9}: CMN R6,#2: BLO loop: SUB R2,R2,#16 ADD R1,R2,#4:SUBEQ R1,R1,#4: .loop LDMIA R1!,{R6,R7,R8,R9}: CMN R6,#2: SUBHS R1,R1,#12 BNE loop STMFD R13!,{R14} BL unishift LDR R2,toldji: MOV R0,R5:MOV R1,R2:.loop LDMIA R1!,{R6,R7,R8,R9}: CMN R6,#2: BLO loop: SUB R1,R1,#12 BL unishift BL clgot LDMFD R13!,{R15} .rspas LDR R5,oputpas MOV R6,#9:.loop BL getrand: AND R0,R0,#63: CMP R0,#36: BGE loop SUBS R0,R0,#26: ADDLT R0,R0,#40: STRB R0,[R5],#1 SUBS R6,R6,#1: BPL loop: B istatloop .rsedit LDR R5,ostedit MOV R6,#6:MOV R0,#66:.loop STRB R0,[R6,R5]: SUBS R6,R6,#1: BPL loop MOV R7,#0 MOV R6,#4:.loop BL getrand AND R0,R0,#&F: CMP R0,#10: BGE loop ORRS R7,R7,R0: STRNEB R0,[R5],#1 SUBS R6,R6,#1: BPL loop .istatloop MOV R0,#19: SWI "OS_Byte" MOV R0,#0: STR R0,keydowner: B ostatloop .keydowner EQUD 0 .ostedit EQUD stedit .oputpas EQUD putpas .testtrkbuts ADR R12,trkmbuts .testmbuts SWI "OS_ReadMonotonicTime": MOV R3,R0 ; bodge for serialmouse driver SWI "OS_Mouse" RSB R1,R1,#195 MOV R0,R0,ASR#2: MOV R1,R1,ASR#2 .loop LDMIA R12!,{R10,R11} CMN R10,#1: MOVEQ R15,R14 MOV R7,R10,LSR#24 BIC R10,R10,#&FF000000 BIC R4,R10,#&FF0000: BIC R4,R4,#&F000: MOV R10,R10,LSL#8 MOV R10,R10,ASR#12+8 SUBS R4,R0,R4: CMP R4,#7: BHI loop SUBS R10,R1,R10: CMP R10,#7: BHI loop STMFD R13!,{R14}:BL readmse: LDMFD R13!,{R14} LDR R6,keydowner: ANDS R2,R2,#5: STREQ R2,keydowner MOVEQ R15,R14: SUB R6,R3,R6: CMP R6,#25: MOVLO R15,R14: STR R3,keydowner TST R2,#4: MOVNE R15,R11 CMP R7,#4: MOVEQ R15,R11 TST R7,#1: LDREQ R10,[R12]: LDRNE R10,[R12,#-16]! MOV R10,R10,LSR#24: EOR R7,R7,R10: CMP R7,#1: MOVNE R15,R11 LDR R15,[R12,#4] .lsmbuts EQUD (4<<24)+(38<<12)+(0): EQUD rspas EQUD (4<<24)+(38<<12)+(96): EQUD rsedit EQUD -1 .displsmbuts ADR R12,lsmbuts: B dispmbuts .testlsbut ADR R12,lsmbuts: B testmbuts .trkmbuts EQUD (0<<24)+(38<<12)+(0): EQUD dwnspr EQUD (1<<24)+(38<<12)+(56): EQUD upspr EQUD (0<<24)+(29<<12)+(91): EQUD curvlft EQUD (1<<24)+(29<<12)+(160): EQUD curvrgt EQUD (2<<24)+(20<<12)+(91): EQUD gradup EQUD (3<<24)+(20<<12)+(160): EQUD graddn EQUD (2<<24)+(11<<12)+(91): EQUD longer EQUD (3<<24)+(11<<12)+(160): EQUD shorter EQUD -1 .fullbdbuts ADR R12,bdmbuts .endbdbuts STR R12,bdbase: BL dispmbuts: B frombdbuts .noneatal ADR R12,bdmbut3s: B endbdbuts .justbdtype ADR R12,bdmbut2s: B endbdbuts .testbdbut LDR R12,bdbase: B testmbuts .bdbase EQUD 0 .bdmbuts EQUD (2<<24)+(20<<12)+(91): EQUD sizeup EQUD (3<<24)+(20<<12)+(160): EQUD sizedn EQUD (4<<24)+(29<<12)+(91): EQUD randomise EQUD (0<<24)+(38<<12)+(91): EQUD paldn EQUD (1<<24)+(38<<12)+(160): EQUD palup .bdmbut2s EQUD (0<<24)+(11<<12)+(91): EQUD lftbdt EQUD (1<<24)+(11<<12)+(180): EQUD rgtbdt .bdmbut3s EQUD -1 .xyzbuts EQUD (0<<24)+(11<<12)+(91): EQUD xyzobup EQUD (1<<24)+(11<<12)+(160): EQUD xyzobdn EQUD (0<<24)+(20<<12)+(91): EQUD xyzactup EQUD (1<<24)+(20<<12)+(160): EQUD xyzactdn EQUD -1 .dispxyzmbuts ADR R12,xyzbuts: B dispmbuts .testxyzbut ADR R12,xyzbuts: B testmbuts .disptrkmbuts ADR R12,trkmbuts .dispmbuts \ -1/ xxyyyzzz xx=sprite,yyy=y,zzz=z \ sprites in a pair must be in order 0,1 or 2,3 if adjust is to work STMFD R13!,{R14} ADR R0,dmregs LDMIA R0,{R0-R4} LDR R0,[R0] .loop LDR R11,[R12],#8 CMN R11,#1: LDMEQFD R13!,{R15} BIC R10,R11,#&FF000000: MOV R11,R11,LSR#24 BIC R4,R10,#&FF0000: BIC R4,R4,#&F000: MOV R10,R10,LSL#8 MOV R10,R10,ASR#12+8 ADD R10,R10,R10,LSL#2: ADD R10,R0,R10,LSL#6: ADD R5,R1,R11,LSL#6 ADD R4,R4,R10 SUB R5,R5,R11,LSL#3 MOV R6,#7:.loop2 MOV R10,#6:.loop3 LDRB R8,[R10,R5] STRB R8,[R10,R4] SUBS R10,R10,#1: BPL loop3: ADD R5,R5,#8 ADD R4,R4,#&140: SUBS R6,R6,#1: BNE loop2 B loop .dmregs EQUD scrnbot EQUD icons+&1183 ;;; fixed? .oshiftr EQUD shifted .sizeup BL getbdes: LDR R5,[R0]: MOV R4,R5,LSR#27: BIC R5,R5,#&FC000000 LDR R2,oshiftr: LDR R2,[R2]: ADD R4,R4,R2: B storesize .sizedn BL getbdes: LDR R5,[R0]: MOV R4,R5,LSR#27: BIC R5,R5,#&FC000000 LDR R2,oshiftr: LDR R2,[R2]: SUB R4,R4,R2: B storesize .paldn MVN R6,#0: MOV R15,R15 .palup MOV R6,#1:.palchng BL getbdes: LDR R5,[R0] BIC R4,R5,#&FF0000: BIC R4,R4,#&3000000: EOR R4,R4,R5 LDR R2,oshiftr: LDR R2,[R2]: MUL R6,R2,R6 MOV R4,R4,LSR#16: ADDS R4,R4,R6: MOVMI R4,#0 CMP R4,#plancols: MOVGT R4,#plancols: B r4ispal .tstip3a CMP R0,#ASC("-"): BEQ contisp .tstip3b B tstip3 .uniin EQUD -1: EQUD -1 .hin1 EQUD 0:.hin2 EQUD 0:.hin3 EQUD 0 .handlenve ADR R10,tstip3a STMFD R13!,{R5,R11,R12,R14} BL tweaking: BL stcar2: BL bckspc: BL Dutext66 BL untweak LDMFD R13!,{R5,R11,R12,R14} LDRB R0,[R12]: CMP R0,#13: ADDNE R12,R12,#1 .handlein STR R14,hin1 STR R12,hin2: STR R11,hin3 BL nvestrg BL ackret LDR R0,hin2: LDR R1,hin3 LDRB R10,[R0]: CMP R10,#13: ADDEQ R0,R0,#1: SUBEQ R1,R1,#1 BL dnumc CMP R10,#13: RSBEQ R4,R4,#0 BL getabs10: LDR R15,hin1 .igrscrn EQUD &1AD0 .decodemip B chktrkmse .icvscrn EQUD &1AD0+&B40 .directip ADR R5,decodemip BEQ ipcurve CMP R0,#5: BLT iplen .ipgrad ADR R12,gradpok LDR R7,igrscrn MOV R11,#2: BL handlenve CMN R4,#9: MVNLT R4,#9: CMP R4,#9: MOVGT R4,#10 MOV R5,R4: B projo .ipcurve ADR R12,curvpok LDR R7,icvscrn MOV R11,#3: BL handlenve CMN R4,#18: MVNLT R4,#17: CMP R4,#18: MOVGT R4,#18 MOV R0,R4,LSL#6: STR R0,[R10,#&20]: B continedit .ilnscrn EQUD &1AD0-&B40 .iplen ADR R12,lenpok LDR R7,ilnscrn MOV R11,#3: ADR R10,tstip3b: BL handlein CMP R4,#4: MOVLT R4,#4: CMP R4,#500: MOVGT R4,#500 MOV R0,R4,LSL#21: SUB R0,R0,#1: STR R0,[R10,#&2C]: B continedit .trkstuff STMFD R13!,{R14} BL getabs10 LDR R0,[R10,#&2C]: ADR R1,lenpok: MOV R0,R0,ASR#21 ADD R0,R0,#1 BL dcnum2 LDR R0,[R10,#&20]: ADR R1,curvpok: MOVS R0,R0,ASR#6 RSBMI R0,R0,#0 MOVMI R5,#13: MOVPL R5,#66: STRB R5,[R1],#1 BL dcnum2 LDR R0,[R10,#&28]: ADR R1,gradpok: MOVS R0,R0: RSBMI R0,R0,#0 MOVMI R5,#13: MOVPL R5,#66: STRB R5,[R1],#1: BL dcnum2 LDMFD R13!,{R14} ADR R12,xtratrk: B xtramenus .xtratrk EQUD -1 FNut("LENGTH: ",0):.lenpok FNut(" ",0): EQUB -1 FNut("GRADIENT:",0):.gradpok FNut(" ",0): EQUB -1 FNut("CURVE: ",0):.curvpok FNut(" ",0): EQUB -1 FNut("PICK TILE",0) EQUB -1: EQUD -1: EQUD -1: EQUD -1:ALIGN .whereit EQUD logodata .bodge1FFC EQUD &1FFC000 ; bodged .storelogo LDR R0,bodge1FFC LDR R1,whereit: B copylogo .restorelogo LDR R1,bodge1FFC LDR R0,whereit: .copylogo MOV R2,#&3C00:.loop LDMIA R1!,{R3,R4,R5,R6,R7,R8,R9,R10} STMIA R0!,{R3,R4,R5,R6,R7,R8,R9,R10} SUBS R2,R2,#8*4: BNE loop: MOV R15,R14 .maychngpal B gbde2dit:.bd2t LDR R5,[R1]: CMP R5,#200: MOVLO R15,R14 SWI "OS_Mouse": RSB R1,R1,#&3F8: BIC R4,R1,#&F TST R2,#5: MOVEQ R15,R14 CMP R4,#plancols+16: MOVHI R15,R14 CMP R0,#&108: MOVGE R15,R14: SUBS R0,R0,#8 ADDPL R4,R4,R0,LSR#4: CMP R4,#plancols: MOVHI R4,#plancols B r4ispal .sidebp EQUD &142 .bdcoles EQUD planetcols .bdpalette STMFD R13!,{R14} BIC R12,R1,#&FC000000 MVN R11,#0 MOV R10,#&FC LDR R0,gscboy: LDR R0,[R0] LDR R1,sidebp: ADD R0,R0,R1 LDR R2,bdcoles: MOV R3,#1+plancols/16 .loop MOV R4,#16 .loop2 LDRB R6,[R2],#1 SUBS R12,R12,#&10000: MOVMI R11,#16: MVNMI R12,#&C0000000 SUBMI R0,R0,#1:BLMI vline: ADDMI R0,R0,#1 MOVS R11,R11: SUBGT R11,R11,#1 STRGTB R10,[R0,#320*3]: STRGTB R10,[R0,#-320] STRB R6,[R0,#640]: STRB R6,[R0,#320]: STRB R6,[R0],#1 STRGTB R10,[R0,#320*3]: STRGTB R10,[R0,#-320] STRB R6,[R0,#640]: STRB R6,[R0,#320]: STRB R6,[R0],#1 STRGTB R10,[R0,#320*3]: STRGTB R10,[R0,#-320] STRB R6,[R0,#640]: STRB R6,[R0,#320]: STRB R6,[R0],#1 STRGTB R10,[R0,#320*3]: STRGTB R10,[R0,#-320] CMP R11,#0: BLEQ vline: SUBEQ R11,R11,#1 ADD R0,R0,#1 SUBS R4,R4,#1: BNE loop2 ADD R0,R0,#&4C0: SUBS R3,R3,#1: BNE loop LDMFD R13!,{R15} .vline STRB R10,[R0,#-320]: STRB R10,[R0,#320*2] STRB R10,[R0,#320*3] STRB R10,[R0,#320*1]: STRB R10,[R0]: MOV R15,R14 .iwonttellyou BL encrypttxt FNaddr(448,600): EQUD &D0D2FC FNencrypt("You cheated!"):ALIGN ADR R1,finaltxt: LDR R0,tottxt: STR R1,[R0]: STR R1,[R0,#4] B backfrcht .finaltxt FNscrolltext("w SINCE YOU CHEATED, I WON$T GIVE YOU A USEFUL CODE ") FNscrolltext("OR GIVE YOU LOTS OF PRAISE. DON$T YOU THINK ") FNscrolltext("THAT$S REALLY UNKIND AND I SHOULD SPEND MY TIME ") FNscrolltext("IMPROVING THE GAME? ... @"): ALIGN .teditcd2 EQUD editcodes .tottxt EQUD totext .gscboy EQUD scrntop .finalecode STMFD R13!,{R14} BL decodecodes LDR R12,teditcd2: BL getnome: SUB R0,R0,#1: LDR R0,[R12,R0,LSL#2] SUBS R0,R0,#123: MOVMI R0,#0 ADR R1,storz: MOV R2,#0: STR R2,[R1]: STR R2,[R1,#4]: STR R2,[R1,#8] MOV R2,#12: SWI "XOS_ConvertInteger4" MOV R0,#&BD00: ADD R0,R0,#&30: ADD R0,R0,R2,LSL#2: STR R0,posye BL asctxt:.posye FNaddr(400,420): EQUD &EDEEEF .storz EQUD0: EQUD 0: EQUD 0: EQUD 0:ALIGN BL encryptcodes LDMFD R13!,{R15} .unishift \ R0 =dest \ R1 =source end \ R2 =source CMP R2,R1: MOVGE R15,R14 CMP R0,R2: MOVEQ R15,R14 STMFD R13!,{R0-R2,R4,R14} TST R0,#3: TSTEQ R1,#3: TSTEQ R2,#3: BEQ fastshift CMP R0,R2: BGT ushftup .loop LDRB R4,[R2],#1: STRB R4,[R0],#1 CMP R2,R1: BNE loop LDMFD R13!,{R0-R2,R4,R15} .ushftup SUB R4,R1,R2: ADD R0,R0,R4 .loop LDRB R4,[R1,#-1]!: STRB R4,[R0,#-1]! CMP R1,R2: BNE loop LDMFD R13!,{R0-R2,R4,R15} : .fastshift CMP R0,R2: BGT fshftup .loop LDR R4,[R2],#4: STR R4,[R0],#4 CMP R2,R1: BNE loop LDMFD R13!,{R0-R2,R4,R15} .fshftup SUB R4,R1,R2: ADD R0,R0,R4 .loop LDR R4,[R1,#-4]!: STR R4,[R0,#-4]! CMP R1,R2: BNE loop LDMFD R13!,{R0-R2,R4,R15} : .sftup .nobb4 EQUD mapcopy+&40 .getmapcis LDR R0,nobb4: MOV R15,R14 .begxyzif EQUD xyzinfo-&2C .fastxyzbwd BL gxyzptr: LDR R0,[R1] BIC R9,R0,#&FF<<24: BIC R9,R9,#&F<<20 SUB R9,R9,#48 LDR R8,[R9,#&2C]: MOV R8,R8,LSR#21 ADD R10,R9,R8,LSL#20: MOV R0,#1: B chkthensm .movexyzbwd BL gxyzptr: LDR R0,[R1]: BL R9shift ADD R10,R0,R9,LSL#20 BIC R9,R10,#&FF<<24: BIC R9,R9,#&F<<20 LDR R8,[R9,#&2C]: CMP R10,R8 MOVGE R8,R8,LSR#20: SUBGE R10,R10,R8,LSL#20 SUBGE R10,R10,#48: MOVGE R0,#1: MOVLT R0,#0 BIC R9,R10,#&FF<<24: BIC R9,R9,#&F<<20 .chkthensm LDR R5,nobb4: ADD R5,R5,#48: CMP R9,R5: BLT retxyzc MOV R9,R10 .sortxyzmve STMFD R13!,{R1,R9} BIC R10,R10,#&FF<<24: BIC R10,R10,#&F<<20 MOVS R0,R0: BLNE moveplans LDMFD R13!,{R1,R10} STR R10,[R1]: STR R10,[R1,#xyzblip-xyzinfo+&10] MOV R0,#1: BL streflsh MOV R8,R10 BIC R10,R10,#&FF<<24: BIC R10,R10,#&F<<20: BL putabs10 MOV R10,R8 BL sortxyzatR1 SUB R8,R2,#&2C: BL strR8ex: BL exyzcnst BL ensureseee B reseexyz : .getridofit ; remove -1 (dead bullet) MOV R0,R1: ADD R2,R0,#&2C .loop LDR R3,[R1,#&2C]!: CMN R3,#2: BLO loop: ADD R1,R1,#4 ADD R3,R1,#&2C-4: BL thisisthesort: BL usinfothenblip MOV R2,R3: LDMFD R13!,{R15} .fullsortxyz LDR R10,[R1] .sortxyzatR1 STMFD R13!,{R14} LDR R2,begxyzif CMN R10,#2: BHS getridofit .loop LDR R3,[R2,#&2C]! BL cmpR3R10: BLO loop \ no check for -1/-2 since hopefully byte just stored will be found CMP R1,R2: BEQ nolower ADD R0,R2,#&2C SUB R3,R1,#xyzinfo-xyzblip LDMIA R3,{R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R14} STMFD R13!,{R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R14} LDMIA R1,{R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R14} .shifton STMFD R13!,{R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R14} \ R1=xyz was \ R2=current xyz goes SUB R0,R0,#xyzinfo-xyzblip SUB R1,R1,#xyzinfo-xyzblip SUB R2,R2,#xyzinfo-xyzblip BL unishift ADD R0,R0,#xyzinfo-xyzblip ADD R1,R1,#xyzinfo-xyzblip ADD R2,R2,#xyzinfo-xyzblip BL thisisthesort BL unishift CMP R0,R2 LDMFD R13!,{R0,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12} SUBLT R2,R1,#&2C SUB R14,R2,#xyzinfo-xyzblip STMIA R2!,{R0,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12} LDMFD R13!,{R0,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12} STMIA R14,{R0,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12} LDMFD R13!,{R15} .nolower LDR R3,[R2,#&2C]! BL cmpR3R10: ADDHI R2,R1,#&2C: LDMHIFD R13!,{R15} .loop LDR R3,[R2,#&2C]!: BL cmpR3R10 BLO loop \ unsigned ops deal with -1/-2 correctly I think MOV R0,R1: MOV R1,R2: MOV R2,R0 SUB R3,R2,#xyzinfo-xyzblip LDMIA R3,{R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R14} STMFD R13!,{R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R14} LDMIA R2!,{R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R14} B shifton : .movexyzfwd BL gxyzptr: LDR R0,[R1]: BL R9shift SUBS R10,R0,R9,LSL#20: ADDMI R10,R10,#48 MVNMI R0,#0: MOVPL R0,#0 BICMI R9,R10,#&FF<<24: BICMI R9,R9,#&F<<20 LDRMI R9,[R9,#&2C] MOVMI R9,R9,LSR#20: ADDMI R10,R10,R9,LSL#20 BIC R9,R10,#&FF<<24: BIC R9,R9,#&F<<20 LDR R9,[R9,#&2C]: MOVS R9,R9: BEQ retxyzc .goonfwd MOV R9,R10: SUB R10,R10,#48: STR R10,[R1,#xyzblip-xyzinfo+&10]: B sortxyzmve : .fastxyzfwd BL gxyzptr: LDR R0,[R1] BIC R9,R0,#&FF<<24: BIC R9,R9,#&F<<20 ADD R9,R9,#48 LDR R8,[R9,#&2C]: MOVS R8,R8,LSR#21: BEQ retxyzc ADD R10,R9,R8,LSL#20: MVN R0,#0: B goonfwd : .readjoykey STMFD R13!,{R14}: BL joystatus: LDMFD R13!,{R14} MOVVS R15,R14: MOVS R0,R0: MOVEQ R15,R14 MOV R1,#&7D: MOV R2,#1:.loop TST R2,R0: BNE strkey: MOV R2,R2,LSL#1: ADD R1,R1,#1 CMP R2,#&10000: BLT loop: MOV R15,R14 .ensureseee STMFD R13!,{R14}: B ensuresee .nowaysucker B editloop2 .anytype ADR R5,ftypes: ADR R12,pokspc-1:.loop SUBS R0,R0,#1: BMI endyF:.loop2 LDRB R3,[R5],#1 CMP R3,#&FF: BNE loop2: B loop:.endyF MOV R4,#13:.loop LDRB R3,[R5],#1: STRB R3,[R12,#1]!: SUB R4,R4,#1: CMP R3,#&FF BNE loop: MOV R6,#66:.loop STRB R6,[R12],#1: SUBS R4,R4,#1: BNE loop ADR R12,bdop2: BL xtramenus: LDMFD R13!,{R15} .bdop2 EQUD -1: FNut("TYPE: ",0):.pokspc EQUD 0: EQUD 0: EQUD 0: EQUD -1: EQUD -1: EQUD -1:EQUD -1:ALIGN .ftypes FNut("NEBULA",0): EQUB &FF FNut("GAS PLANET",0): EQUB &FF FNut("MOON",0): EQUB &FF FNut("POTATO",0): EQUB &FF FNut("STAR",0): EQUB &FF FNut("SM POTATO",0): EQUB &FF FNut("ECLIPSE",0): EQUB &FF FNut("MOON RISE",0): EQUB &FF ALIGN .rgtbdt BL getbdes: LDR R2,[R0]:CMP R2,#512: MOVHI R2,#0: ADDLS R2,R2,#1 CMP R2,#8:.bdbdt LDREQ R2,[R0,#4]: STR R2,[R0]: STR R2,[R1] B bdloop2 .lftbdt BL getbdes: LDR R2,[R0]:CMP R2,#512: MOVHI R2,#7 SUBLO R2,R2,#1: CMN R2,#1: B bdbdt .refr1disp STMFD R13!,{R14}: BL dscore: BL dtime: BL dcash: LDMFD R13!,{R15} .maygo BL mayquits: LDMNEFD R13!,{R0}: BNE lshop: BEQ butwont .yastartscreen EQUD &1FC0000 ; bodged .mayquits LDR R0,tplaytt: LDR R0,[R0]: MOVS R0,R0: MOVNE R15,R14 STMFD R13!,{R14}: MOV R0,#&7E: SWI "OS_Byte" LDR R1,yastartscreen: ADD R4,R1,#&14000 BL bankit LDR R4,tbo: MOV R0,#0: STR R0,[R4] BL chkquitg: MOVEQ R10,#1: MOVNE R10,#0 LDR R4,yastartscreen: ADD R1,R4,#&14000 BL bankit: MOVS R10,R10: STR R10,qflag: LDMFD R13!,{R15} .tplaytt EQUD playtesting .getqflag LDR R5,qflag: CMP R5,#1: MOV R0,#0: STREQ R0,qflag: MOV R15,R14 .spyqflag LDR R5,qflag: CMP R5,#1: MOV R15,R14 .bankit MOV R3,#&7000:.loop LDMIA R1!,{R2,R5,R6,R7,R8,R9,R11,R12} STMIA R4!,{R2,R5,R6,R7,R8,R9,R11,R12} SUBS R3,R3,#32: BNE loop: MOV R15,R14 .tbo EQUD bank2 .qflag EQUD 0 .newpointer ADR R1,npparam: MOV R0,#&15: SWI "OS_Word" ADR R1,npparam2: MOV R0,#&15: SWI "OS_Word" MOV R0,#106: MOV R1,#3: MOV R2,#0: SWI "OS_Byte" STR R1,oldlk .mousecols ADR R6,mousepal:.loop LDRB R0,[R6],#1: SWI "OS_WriteC": CMP R0,#0: BNE loop MOV R15,R14 .mousepal EQUD &50190113: EQUD &02135050: EQUD &70707019: EQUD &B0190313: EQUW &C0D0 EQUB 0 ALIGN .npparam EQUB 0: EQUB 3: EQUB 4 EQUB 14: EQUB 2: EQUB 2: EQUD newpoint ALIGN .oldpointer LDR R1,oldlk: MOV R0,#106: SWI "OS_Byte" MOV R15,R14 .npparam2 EQUB 0: EQUB 2: EQUB 4 EQUB 14: EQUB 2: EQUB 2: EQUD newpoint+&38 ALIGN .oldlk EQUD 0 .clbdopts ADR R12,nobding: B xtramenus .nobding EQUD -1 FNut(" ",0): EQUB &FF FNut(" ",0): EQUB &FF FNut(" ",0): EQUB &FF FNut(" ",0): EQUB &FF EQUD -1: EQUD -1:EQUD -1:ALIGN .anfr EQUD 0 .goesvarz EQUD mapcopy .getvz EQUS "": EQUB 13 \ not aligned .noscroller FNscrolltext(" @") .instxt FNscrolltext(" INSERT ZONE DISC z ... @"):ALIGN .ttex EQUD totext .gotmetxt EQUD 0 .gotzone EQUD 0 .righttxt EQUD 0 .rdgz LDR R0,gotzone: MOVS R0,R0: MOV R15,R14 .mightgetmusic LDR R0,gotzone: MOVS R0,R0: MOVEQ R15,R14 B loadintro .letmehaveit LDR R0,gotzone: MOVS R0,R0: MOVNE R15,R14 LDR R0,ttex: LDR R1,[R0]: LDR R2,[R0,#reptext-totext] ADR R3,noscroller: STR R3,[R0]: STR R3,[R0,#reptext-totext] STMFD R13!,{R0-R2,R14} ADR R0,getvz: LDR R1,goesvarz: MOV R2,#&FF: SWI "XOS_GSTrans" LDR R1,goesvarz: LDRB R1,[R1]: CMP R1,#13: BNE wkwii1 ADR R0,setzvar: SWI "OS_CLI" MOV R0,#1: STR R0,noupc .wkwii1 BL findmezones BNE wkwii LDR R0,gotmetxt: CMP R0,#0 LDREQ R0,ttex: ADREQ R1,instxt: STREQ R1,[R0]: STREQ R1,[R0,#reptext-totext] STR R1,gotmetxt .loop BL findmezones: BEQ loop .wkwii BL escoff: BL loadzone: BL escon MOV R0,#0: STR R0,righttxt BL scanzones BL getopts BL nomentxt BL loadintro MOV R4,#&27:BL zoneno BL clscroller LDMFD R13!,{R0-R2,R14} STR R2,[R0,#reptext-totext] STR R2,[R0] MOV R5,#1: STR R5,gotzone MOV R0,#0: STR R0,noupc MOV R15,R14 .noupc EQUD 0 .upcall CMP R0,#1: MOVNE R15,R14 LDR R0,noupc: MOVS R0,R0: MOVEQ R15,R14 STMFD R13!,{R0-R2,R14} LDR R0,ttex: ADR R1,instxt: STR R1,[R0]: STR R1,[R0,#reptext-totext] LDMFD R13!,{R0-R2,R14} MOV R0,#0: MOV R15,R14 .setzvar EQUS "Set Zone$Path .^.,:0.!Zones.,:1.!Zones.,:RAM.!Zones.": EQUB 13 ALIGN .wherespr EQUD xyzsprs .whereobs EQUD xyzobs .chxyzact SWI "OS_Mouse": TST R2,#1: BEQ xyzactdn .xyzactdn BL gxyzptr: LDRB R5,[R1,#6]: ADD R5,R5,#1: CMP R5,#numact: MOVEQ R5,#0 BL registeractR5 BL validateobact: BCS xyzactdn B xyzloop2 .xyzactup BL gxyzptr: LDRB R5,[R1,#6]: SUBS R5,R5,#1: MOVMI R5,#numact-1 BL registeractR5 BL validateobact: BCS xyzactup: B xyzloop2 : .registeractR5 STMFD R13!,{R14}: MOV R11,R5 STRB R5,[R1,#6] BL getaction11: SUB R1,R1,#xyzinfo-xyzblip STR R11,[R1,#&C]: STR R11,[R1,#&1C]: STR R11,[R1,#&28] MVN R11,#0: STR R11,[R1,#&20]: STR R11,[R1,#&24]: STR R11,[R1,#&28] LDMFD R13!,{R15} .chxyztyp SWI "OS_Mouse": TST R2,#1: BEQ xyzobdn .xyzobdn BL gxyzptr: LDRB R4,[R1,#&2A] ADD R4,R4,#1: CMP R4,#numobjs: MOVGE R4,#0: B newxyzobj .xyzobup BL gxyzptr: LDRB R4,[R1,#&2A] SUBS R4,R4,#1: MOVMI R4,#numobjs-1 .newxyzobj BL registerobR4 BL resetspd: BL editf: BL nouge: BL editf BL validateobact: BCS xyzactup: B xyzloop2 .registerobR4 STMFD R13!,{R14} BL getxyzpts: LDR R8,whereobs: LDR R9,[R8,R4,LSL#3]! LDR R7,wherespr LDRB R10,[R1,#6]: STR R9,[R1,#4]: STRB R10,[R1,#6] LDR R9,[R8,#4]: BIC R9,R9,#&FF<<24: ADD R9,R9,R7 STR R9,[R1,#&18]: STR R9,[R1,#&1C] LDRB R9,[R8,#2]: STRB R9,[R1,#&20] LDRB R9,[R8,#0]: LDRB R7,[R8,#1]: MUL R7,R9,R7 STR R7,[R1,#&28]: STRB R4,[R1,#&2A] LDMFD R13!,{R15} : .wibbledo EQUD 0 ; 0 = growing , then counts up ; >n = shrinking .emt EQUD 0 .normpk ADD R14,R1,R6,ASR#1 .brpk MOV R14,#&DF .lamda EQUD 5 .stacking EQUS "wavy" .random EQUS "Ran#" .emphasize MOV R9,#1: STR R9,emt: B over2 .wibblest LDR R0,emt: SUBS R0,R0,#1: STRGE R0,emt TST R0,#1: LDRNE R0,normpk: LDREQ R0,brpk: STR R0,pk1: STR R0,pk2 SWI "OS_ReadMonotonicTime": LDR R1,random EOR R0,R0,R1,LSL#4: STR R0,random TST R0,#&FC0: BNE norandom2 TST R0,#&8000: AND R0,R0,#&1F: SUB R0,R0,#16: STRNE R0,wantlamda MOVEQ R0,R0,LSL#2: STREQ R0,wantfrequ:.norandom2 LDR R1,lamda: LDR R2,wantfrequ: CMP R1,R2 ADDLT R1,R1,#1: SUBGT R1,R1,#1: STR R1,lamda LDR R3,swincr: LDR R2,wantlamda: CMP R3,R2 ADDLT R3,R3,#1: SUBGT R3,R3,#1: STR R3,swincr LDR R0,swindx: ADD R0,R0,R1: STR R0,swindx STMFD R13!,{R14}: STR R13,stacking LDR R14,wibbledo ADR R0,twcopy LDMIA R0,{R1,R2,R3,R4,R5,R6} .loop LDMIA R1!,{R7,R8}: STMIA R5!,{R7,R8} SUBS R6,R6,#8: BGT loop LDMIA R0,{R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R12} ADD R10,R10,#&20: CMP R10,#&140: MOVGT R10,#&140: STR R10,factorh ADDGT R14,R14,#1 CMP R14,#150: SUBGE R10,R10,#&40: CMP R10,#0: MOVLT R10,#0 STR R10,factorh: STR R14,wibbledo CMP R10,#0: BNE noquickstswap STMFD R13!,{R0-R12}: BL swapst: LDMFD R13!,{R0-R12} .noquickstswap MOV R1,#&80 LDR R13,a08 \ R1 = &80 \ R4 = st pointer \ R5 = background \ R7 = sinewave \ R8 = sine wave index \ R9 = sine wave increment \ R10 = factorh \ R12 = to translation table \ R13 = &A08 .loop2 MOV R0,R8,ASR#2: AND R0,R0,#&FF: LDR R0,[R7,R0,LSL#2]: ADD R8,R8,R9 MOV R0,R0,ASR#4: ADD R11,R5,R0,LSL#8 ADD R0,R4,#16 MOV R2,#72 ADD R11,R11,#16 ADD R11,R11,#69*256: ADD R13,R11,#&A00: ADD R13,R13,#8 .loop SUBS R2,R2,#1: BEQ outloop:.inloop LDRB R6,[R0],R10 MOVS R6,R6: BEQ loop LDRB R6,[R13,-R2,LSL#8]: SUBS R14,R6,#&30: MOVLT R14,#0: STRB R14,[R13,-R2,LSL#8] .pk1 ADD R14,R1,R6,ASR#1: STRB R14,[R11,-R2,LSL#8] SUBS R2,R2,#1: BEQ outloop LDRB R6,[R0],R10 MOVS R6,R6: BEQ loop LDRB R6,[R13,-R2,LSL#8]: SUBS R14,R6,#&30: MOVLT R14,#0: STRB R14,[R13,-R2,LSL#8] .pk2 ADD R14,R1,R6,ASR#1: STRB R14,[R11,-R2,LSL#8] SUBS R2,R2,#1: BNE inloop .outloop ADD R5,R5,#1: ADD R4,R4,#1 LDR R14,endr4: CMP R4,R14: BNE loop2 MOV R13,#&F LDR R4,twcopy3 ADD R4,R4,#16 ADD R4,R4,#&100*3 LDR R8,threshld LDR R10,scrpoke MOV R3,#&14000 MOV R0,#93:.loop2 MOV R1,#183:.loop ]:FORT1=0 TO 3:[OPT T LDR R6,[R4],#4 AND R7,R13,R6,LSR#4: LDRB R14,[R12,R7] AND R7,R13,R6,LSR#12: LDRB R11,[R12,R7]: ORR R14,R14,R11,LSL#8 AND R7,R13,R6,LSR#20: LDRB R11,[R12,R7]: ORR R14,R14,R11,LSL#16 AND R7,R13,R6,LSR#28: LDRB R11,[R12,R7]: ORR R14,R14,R11,LSL#24 STR R14,[R10],#4 SUBS R1,R1,#4: BMI outloop2 ]NEXT:[OPT T LDR R6,[R4],#4 AND R7,R13,R6,LSR#4: LDRB R14,[R12,R7] AND R7,R13,R6,LSR#12: LDRB R11,[R12,R7]: ORR R14,R14,R11,LSL#8 AND R7,R13,R6,LSR#20: LDRB R11,[R12,R7]: ORR R14,R14,R11,LSL#16 AND R7,R13,R6,LSR#28: LDRB R11,[R12,R7]: ORR R14,R14,R11,LSL#24 STR R14,[R10],#4 SUBS R1,R1,#4: BPL loop .outloop2 ADD R4,R4,#256-184 ADD R10,R10,#&140-184 CMP R10,R8: ADDGT R10,R10,R3: ADDGT R8,R10,#&13C0: RSBGTS R3,R3,#0 MOVGT R3,#0 SUBS R0,R0,#1: BNE loop2 LDR R13,stacking LDMFD R13!,{R15} .scrpoke EQUD &1FC0000+&140*113+&40 ; bodged .threshld EQUD &1FC0000+&D5C0 ; bodged .ctk EQUD &1FC0000+&140*110+&30 ; bodged .twcopy EQUD &1FC0000+&18000 ; bodged .twallbug EQUD wallbg .twcopy2 EQUD &1FEDEC8 ; bodged .indexst EQUD !twcopy2+&1ED2+&140*7-&6C ; bodged .twcopy3 EQUD &2000000-&18000+&9000+&140*17+&50A0 ; bodged EQUD &6000 .sinewavy EQUD specsin .swindx EQUD 0 .swincr EQUD 5 .factorh EQUD 212 .transcols EQUD table1 .a08 EQUD &A08 .endr4 EQUD !indexst+184 ; bodged .wantlamda EQUD 3 .wantfrequ EQUD 3 .stlame CMP R4,#92: LDRB R4,[R1,#1]!: STREQ R4,wantfrequ: STRNE R4,wantlamda B over2 .grabbckG MOV R0,#0: STR R0,factorh: STR R0,lamda: STR R0,swincr LDR R1,threshld LDR R4,ctk LDR R9,twcopy LDR R10,transcols MOV R0,#98 .loop MOV R5,#255:.loop2 LDRB R12,[R4,R5] CMP R12,#&28: SUBGE R12,R12,#&24 CMP R12,#&C4-&24: SUBGE R12,R12,#&BC-&24 CMP R12,#&F8-&98-&24: SUBGE R12,R12,#&EC-&98-&24 MOV R12,R12,LSL#4: STRB R12,[R9,R5] SUBS R5,R5,#1: BPL loop2: ADD R4,R4,#&140 ADD R9,R9,#256 CMP R4,R1: ADDGT R4,R4,#&14000: MOVGT R1,#&40000000 SUBS R0,R0,#1: BNE loop MOV R15,R14 .swapst LDR R1,stcurrent: EOR R1,R1,#(2*4) EOR (6*4): STR R1,stcurrent .getst LDR R1,stcurrent LDR R0,twallbug LDR R8,[R0,R1]: ADD R1,R1,#4 LDR R9,[R0,R1]: ADD R9,R9,R0: ADD R0,R8,R0 ADD R0,R0,#50 LDR R1,twcopy2 MOV R6,#0:.loop2 LDRB R12,[R0],#1 MOVS R10,R12: MOVEQ R10,#255:.loop STRB R6,[R1],#1: SUBS R10,R10,#1: BNE loop MOVS R12,R12: EORNE R6,R6,#255 CMP R0,R9: BNE loop2 MOV R0,#0: STR R0,wibbledo MOV R15,R14 .nogood1 ADR R0,pe1-4: SWI "XOS_GenerateError" .pe1 EQUS "Error": EQUB 0: ALIGN .stcurrent EQUD 6*4 .enoughmem LDR R5,bdeptr: LDR R5,[R5]:.loop LDR R6,[R5,#-4]: CMN R6,#1: SUBNE R5,R5,#16: BNE loop .loop LDR R6,[R5],#16: CMN R6,#2: CMNNE R6,#1: BEQ fenghmem MOV R6,R6,LSR#26: MLA R0,R6,R6,R0 B loop .fenghmem SUBS R0,R0,#&E40: MOVMI R15,R14 LDR R8,bdeptr: LDR R1,[R8]: LDR R2,[R1] MOV R6,R2,LSR#26: MUL R7,R6,R6: SUBS R0,R0,R7 BPL nogood1 STMFD R13!,{R14} MVN R10,#1:.loop ADD R10,R10,#2 MLA R11,R10,R10,R0: MOVS R11,R11: BMI loop SUB R10,R10,#2 BIC R2,R2,#&FC000000 ORR R2,R2,R10,LSL#26 BIC R2,R2,#&4000000 STR R2,[R1]: STR R2,[R1,#4] LDR R1,[R8,#4]: STR R2,[R1,#4] STMFD R13!,{R10} BL clmenu LDMFD R13!,{R10}: CMP R10,#12: BLE noroom ADR R10,limitsiz: BL uprompt: BL clbuf BL testkeys1: BL bdpanel LDMFD R13!,{R15} .noroom ADR R10,zerosiz: BL uprompt: BL clbuf .loop SWI "OS_Mouse": CMP R2,#0: BNE loop BL testkeys1: BL bdpanel LDMFD R13!,{R0,R1}: B delbd .zerosiz FNut("NO ROOM FOR PLANET WORKSPACE",0): EQUB &FF .limitsiz FNut("BACKDROP WORKSPACE FULL - PLANET SIZE DECREASED",0): EQUB &FF:ALIGN .newbd BL chkjnkins BL getbdes MOV R2,R0: MOV R3,R1 .loop LDR R5,[R0],#16: CMN R5,#2: SUBHS R0,R0,#12: BNE loop .loop LDR R5,[R1],#16: CMN R5,#2: BLO loop: SUB R1,R1,#12 ADD R6,R0,#16: ADD R7,R1,#16 .loop LDR R5,[R0],#-4: STR R5,[R6],#-4: CMP R0,R2: BGE loop .loop LDR R5,[R1],#-4: STR R5,[R7],#-4: CMP R1,R3: BGE loop LDR R5,[R1,#4]: CMN R5,#1: BNE unrealnew LDR R2,[R0,#4] BL gmovedps: MOV R7,#&4000: STR R7,[R1,#16]: SUB R7,R7,R8 STR R7,[R0,#16]: MOV R7,#50*&280: STR R7,[R1,#12]: STR R7,[R0,#12] STR R7,[R1,#4] BL getrand CMP R0,#&C8<<24: SUBHS R0,R0,#&58<<24 CMP R0,#&30<<24: ADDLO R0,R0,#&40<<24 BL gbdedit BIC R0,R0,#&2800000 BIC R0,R0,#&7<<24: BIC R0,R0,#&F0000 MOV R2,#0: B wrrnd : .delbd BL getbdes LDR R5,[R1]: CMN R5,#1: BEQ bdloop ADD R6,R0,#16:.loop LDR R5,[R6],#4: STR R5,[R0],#4 CMN R5,#2: BNE loop ADD R7,R1,#16:.loop LDR R5,[R7],#4: STR R5,[R1],#4 CMN R5,#2: BLO loop BL fullbdedit: LDR R5,[R0],#-16: CMN R5,#1: BNE bdloop2 LDR R5,[R0,#8]: CMN R5,#1: BEQ bdloop2 \ fall into nxtbd .nxtbd BL fullbdedit LDR R5,[R0]: CMN R5,#1: LDR R6,[R0,#-8]: CMNEQ R6,#1: BEQ bdloop CMN R5,#1: BNE noworrydn: CMN R6,#1: BNE srchdwn:.noworrydn LDR R5,[R0,#16]!: CMN R5,#1:.storgot BLNE strfulbdA: BNE bdloop2 .srchdwn .loop SUB R0,R0,#16: LDR R5,[R0,#8]: CMN R5,#1: BNE loop: ADDS R0,R0,#16 BNE storgot ; will never fall through BNE above : .unrealnew BL gmovedps: MOV R7,#&4000: STR R7,[R1,#16]: SUB R7,R7,R8 STR R7,[R0,#16]: MOV R7,#50*&280: STR R7,[R1,#12]: STR R7,[R0,#12] STR R7,[R1,#4] BL gbdedit B bdloop2 : .getbdes \ on exit, R0= map, R1= info, R11=shifted ADR R1,bdregs2: LDMIA R1,{R0,R1,R2}: LDR R11,[R0] LDR R0,[R2]: LDR R1,[R2,#4]: MOV R15,R14 .tjkif2 EQUD junkinfo .bdregs2 EQUD shifted .bdregs EQUD junkmap:.bdeptr EQUD bdeditptr .cucurrent EQUD current .rstbdxypos LDR R0,cucurrent: LDRB R0,[R0]:LDR R2,bdregs: MOVS R0,R0: BEQ yuit .loop LDR R1,[R2],#4: CMN R1,#1: BNE loop: SUBS R0,R0,#1: BNE loop .yuit LDR R0,tjkif2:.loop LDMIA R2!,{R3,R4,R5,R10}: ADD R0,R0,#8: STMIA R0!,{R5,R10} CMN R3,#2: BLO loop: MOV R15,R14 .getfbd ADR R0,bdregs: LDMIA R0!,{R1,R2,R3} LDRB R3,[R3]: MOVS R3,R3: BEQ fineded .loop LDR R6,[R1],#4: CMN R6,#2: BLO loop SUBS R3,R3,#1: BNE loop .fineded LDR R6,obdN: STR R6,[R2,#4] STR R1,[R2]: MOV R15,R14 .obdN EQUD junkinfo .dnumc \ R0 to number (internal codes) \ R1 is length \ on exit, R4 = number MOV R4,#0 .loop LDRB R5,[R0],#1 CMP R5,#10: MOVGT R15,R14 ADD R4,R4,R4,LSL#2: ADD R4,R5,R4,LSL#1 SUBS R1,R1,#1: BNE loop: MOV R15,R14 .refrshjunk STMFD R13!,{R14} BL enoughmem LDR R1,obdN:.loop LDMIA R1!,{R6,R7,R8,R9}: STMFD R13!,{R9}: CMN R6,#1: BNE loop LDR R0,cucurrent: LDRB R0,[R0]: BL getj2 LDR R1,obdN: MOV R12,R1:.loop LDR R9,[R1],#16: CMN R9,#1: BNE loop SUB R1,R1,#4:.loop LDMFD R13!,{R9}: STR R9,[R1],#-16: CMP R1,R12: BGT loop LDMFD R13!,{R15} .tplsze EQUD plsize .tplpal EQUD plpal .tplsed EQUD plseed .inputsize MOV R11,#2: LDR R12,tplsze: LDR R7,scroif BL handleit BL getbdes: LDR R5,[R0]: BIC R5,R5,#&FC000000 .storesize CMP R4,#6: MOVLE R4,#6: CMP R4,#25: MOVGT R4,#25 ORR R5,R5,R4,LSL#27:.writeseed MOV R6,R5: STMIA R0,{R5,R6} STR R6,[R1,#4]: B bdloop2 .scroif EQUD &1AC0:.scroif2 EQUD &1AC0+&B40: .scroif3 EQUD &1ACC+&B40*2 .inputseed MOV R11,#5: LDR R12,tplsed: LDR R7,scroif2 BL handleit BL getbdes: LDR R5,[R0]: BIC R5,R5,#&FF: BIC R5,R5,#&FF00 ORR R5,R5,R4: B writeseed .inputpal MOV R11,#3: LDR R12,tplpal: LDR R7,scroif3 BL handleit .r4ispal BL getbdes: LDR R5,[R0]: BIC R5,R5,#&FF0000: BIC R5,R5,#&3000000 ORR R5,R5,R4,LSL#16: B writeseed .handleit STR R14,lik3 STR R11,lik: STR R12,lik2: BL planstrg LDR R1,lik: LDR R0,lik2 BL dnumc LDR R15,lik3 .lik EQUD 0:.lik2 EQUD 0:.lik3 EQUD 0 .bdloop BL gbdedit: LDR R1,[R1]: CMN R1,#1: BEQ nonudge BL getbdes: LDR R5,[R1]: LDR R6,tysiz: LDRB R7,[R5,R6] MOV R6,#&10000: ADD R6,R6,#&2C0: SUB R6,R6,R7,LSL#8: SUB R6,R6,R7,LSL#6 LDR R5,[R0,#8]: CMP R5,R6: MOVGT R5,R6: STR R5,[R0,#8]: STR R5,[R1,#8] .nonudge BL editf BL maybdpal BL nouge BL maychngpal .decoderB BL testbdbut SWI "OS_Mouse": MOV R1,#192: CMP R1,R0 BL readmse CMPLE R0,#3: MVNLE R0,#0 .decoder ADR R5,decoderA CMP R0,#0: BEQ newbd CMP R0,#1: BEQ nxtbd BL gbdedit: LDR R1,[R1]: CMN R1,#1 ADREQ R10,bdkeys2: BEQ ckekeyz CMP R0,#2: BEQ delbd CMP R1,#100: MOVLO R0,#100 CMP R0,#5: BEQ inputsize CMP R0,#6: BEQ inputseed CMP R0,#7: BEQ inputpal ADR R10,bdkeys: B ckekeyz .decoderA MOV R1,R0: BL wrmse B decoderB .bcursfwd BL fowar:.stit3 BL redocurs: B bdloop .bcursbwd BL backwar: B stit3 .bdopts STMFD R13!,{R14} BL clbdopts BL getbdes: LDR R0,[R0]: CMN R0,#1: LDMEQFD R13!,{R15} CMP R0,#100: BLO anytype BIC R0,R0,#&FF000000: BIC R0,R0,#&FF0000 LDR R1,tplseed: ADD R12,R1,#4: BL dcnum BL getbdes: LDR R0,[R0]: MOV R0,R0,LSR#27: LDR R1,tplsize ADD R12,R1,#1: BL dcnum BL getbdes: LDR R0,[R0]: MOV R0,R0,LSR#16: BIC R0,R0,#&FC00 LDR R1,tplpal:ADD R12,R1,#2: BL dcnum ADR R12,bdop: BL xtramenus LDMFD R13!,{R15} .tplseed EQUD plseed .tplsize EQUD plsize .tplpal EQUD plpal .randomise BL getrand: BL gbdedit BIC R0,R0,#&FF000000: BIC R0,R0,#&FF0000 LDR R2,[R1]: BIC R2,R2,#&FF: BIC R2,R2,#&FF00 .wrrnd ORR R2,R2,R0: STR R2,[R1]: STR R2,[R1,#4] .bdloop2 BL bdpanel BL refrshjunk B bdloop .bddwn BL getbdes: LDR R5,[R1]: LDR R6,tysiz: LDRB R7,[R5,R6] MOV R6,#&10000: ADD R6,R6,#&2C0: SUB R6,R6,R7,LSL#8: SUB R6,R6,R7,LSL#6 LDR R5,[R0,#8]: ADD R5,R5,R11,LSL#6 ADD R5,R5,R11,LSL#8: CMP R5,R6: MOVGT R5,R6 .stit STR R5,[R0,#8]: STR R5,[R1,#8]: B bdloop .bdup BL getbdes LDR R5,[R0,#8]: SUB R5,R5,R11,LSL#6 SUB R5,R5,R11,LSL#8: CMP R5,#&140: BGE stit: B bdloop .bdleft BL getbdes:.stit2 LDR R5,[R0,#12]: SUB R5,R5,R11,LSL#9: STR R5,[R0,#12] LDR R5,[R1,#12]: SUB R5,R5,R11,LSL#9: STR R5,[R1,#12]: B bdloop .bdrgt BL getbdes: RSB R11,R11,#0: B stit2 .tysiz EQUD ysize .bdop EQUD -1 FNut("TYPE: PSEUDORANDOM",0): EQUB &FF FNut("SIZE: ",0):.plsize FNut(" ",0): EQUB &FF FNut("SEED: ",0):.plseed FNut(" ",0): EQUB &FF FNut("PALETTE: ",0):.plpal FNut(" ",0): EQUB &FF EQUD -1 EQUD -1: EQUD -1:ALIGN .thatklo EQUS "Thatolks" .bdkeys EQUD -17: EQUD editloop2 EQUD -105: EQUD bddwn EQUD -80: EQUD bdup EQUD -98: EQUD bdleft EQUD -67: EQUD bdrgt EQUD -99: EQUD randomise .bdkeys2 EQUD -58: EQUD bcursfwd EQUD -42: EQUD bcursbwd EQUD 0: EQUD editcontrol .findendmap \ R0 is end on exit LDR R0,mapet: ADR R1,thatklo LDMIA R1,{R1,R2} .loop LDR R3,[R0],#4: CMP R3,R1: BNE loop LDR R3,[R0,#8]: CMP R3,R2: BNE loop ADD R0,R0,#20: MOV R15,R14 : .mapet EQUD map .picky ADR R10,pickyerror: BL uprompt BL clbuf BL testkeys1: B editzone .pickyerror FNut("YOU CAN'T DELETE THE CURRENT SCREEN",0) EQUB &FF:ALIGN .tendnomc EQUD endnomc .removescrn STR R0,victime2: BL getnome1 MOV R1,R0: LDR R0,mapet: BL getstart STR R0,todels: MOV R11,R0: MOV R1,#1: BL getstart STR R0,todel2: B deleteit .reqokdel STR R0,victime2 BL getnome: CMP R0,#1: BEQ minimum2 LDR R0,victime2 LDR R10,oc: LDRB R10,[R10]: CMP R10,R0: BEQ picky BL getnome1 CMP R0,R1: BGE besensible .goaway STMFD R13!,{R0} MOV R1,R0: LDR R0,mapet: BL getstart STR R0,todels MOV R11,R0: MOV R1,#1: BL getstart: STR R0,todel2: ADR R12,scrnnom MOV R10,#40 .loop LDRB R1,[R11],#1: MOV R2,#66: BL asctoint2: STRB R0,[R12],#1 CMP R1,#32: MOVLT R10,#1:SUBS R10,R10,#1: BNE loop .loop SUBEQ R12,R12,#1: LDRB R1,[R11,#-1]!: CMP R1,#32: BEQ loop MOV R0,#58: STRB R0,[R12,#1]! MOV R0,#47: STRB R0,[R12,#1]! MOV R0,#66: LDR R11,tendnomc:.loop CMP R11,R12: STRGTB R0,[R12,#1]!: BGT loop LDMFD R13!,{R0}: BL inlists ADR R12,chisok: BL domenu .loop MOV R1,#256-86: BL scanne: BEQ editloop2 MOV R1,#256-69: BL scanne: BEQ deleteit BL getmenu: CMP R0,#0: BLT loop: CMP R0,#3: BNE editloop2 .deleteit LDRB R0,victime2: BL getnome1: SUB R4,R1,R0: CMP R4,#1: BEQ removelast BL findendmap ADR R2,todels LDMIA R2,{R1,R2,R4-R9} LDRB R3,[R9] : CMP R3,R4: SUBGT R3,R3,#1: STRGTB R3,[R9] .loop LDR R3,[R2],#4: STR R3,[R1],#4: CMP R2,R0: BLT loop MOVS R0,R4: ADD R5,R5,R0,LSL#2 MOV R2,R0 ADD R6,R6,R0,LSL#3 BEQ nons .loop LDR R10,[R7],#16: CMN R10,#2: SUBEQ R7,R7,#4: CMNNE R10,#1: BNE loop SUB R7,R7,#12: SUBS R2,R2,#1: BNE loop .loop LDR R10,[R8],#16: CMN R10,#2: SUBEQ R8,R8,#4: CMNNE R10,#1: BNE loop SUB R8,R8,#12: SUBS R0,R0,#1: BNE loop .nons MVN R0,#0: BL addnsc MOV R11,R7: MOV R12,R8 .loop2 LDR R10,[R7],#16: CMN R10,#2: BLO loop2: SUB R7,R7,#12 .loop LDR R10,[R8],#16: CMN R10,#2 BLO loop: SUB R8,R8,#12 LDR R1,[R7,#-4]: CMN R1,#2: BEQ nomovir .loop LDMIA R7!,{R1,R10,R9,R14} CMN R1,#1: CMNNE R1,#2: STMNEIA R11!,{R1,R10,R9,R14}: STREQ R1,[R11],#4 SUBEQ R7,R7,#12 CMN R1,#2: BNE loop STR R1,[R11] .nomovir LDR R1,[R8,#-4]: CMN R1,#2: BEQ nomovir2 .loop LDMIA R8!,{R1,R7,R10,R11} CMN R1,#2: CMNNE R1,#1:STMNEIA R12!,{R1,R7,R10,R11}: STREQ R1,[R12],#4 SUBEQ R8,R8,#12 CMN R1,#2: BNE loop STR R1,[R12] .nomovir2 SUB R1,R6,#8: LDMIA R1,{R1,R7,R10,R11} EOR R12,R11,R7: EOR R8,R10,R1 .loop LDR R1,[R5,#4]: STR R1,[R5],#4 LDMIA R6,{R1,R7,R10,R11}: EOR R11,R11,R12: EOR R10,R10,R8 STMIA R6!,{R10,R11}: ADD R4,R4,#1: CMP R4,R0: BNE loop B aftermove .todels EQUD 0 \ R1 .todel2 EQUD 0 \ R2 .victime2 EQUD 0 \ R4 EQUD editcodes \ R5 EQUD passwords+6*8 \ R6 EQUD junkmap \ R7 EQUD xyzmap \ R8 .oc EQUD current \ R9 .chisok FNut("DELETE SCREEN: """,0):.scrnnom FNut(" ",0) .endnomc EQUB 0 EQUW -1: EQUB &FF FNut("YES",0): EQUB &FF EQUD -1: EQUD -1: EQUW -1: EQUB -1 FNut("NO",0): EQUB &FF ALIGN .insxyz BL chkxyzins BL getabs10 LDR R0,[R10,#&2C]: MOV R0,R0,LSR#21: ADD R10,R10,R0,LSL#20 ; R10 is full where it's gonna go LDR R1,txyinfoz: MOV R12,#0:.loop LDR R3,[R1],#&2C ADD R12,R12,#1 BL cmpR3R10: BGT fouxyz ; R1-&2C to one above, R12 is num. CMN R9,#1: CMNNE R9,#2: BNE loop .fouxyz SUB R1,R1,#&2C MOV R8,R1 .loop LDR R10,[R1],#&2C: CMN R10,#2: BLO loop SUB R2,R1,#&2C SUB R6,R2,#xyzinfo-xyzblip: SUB R5,R1,#xyzinfo-xyzblip .loop LDR R7,[R2],#-4: STR R7,[R1],#-4 LDR R7,[R6],#-4: STR R7,[R5],#-4 CMP R2,R8: BGE loop BL stxyzdo2 BL getabs10 LDR R5,[R8]: BL strR8ex LDR R0,[R10,#&2C]: MOV R0,R0,LSR#21: ADD R10,R10,R0,LSL#20 STR R10,[R8]: CMN R5,#1: CMNNE R5,#2: LDRNE R5,[R8,#8]: ADDNE R5,R5,#&100 STRNE R5,[R8,#8]: BNE xyzloop3 LDR R12,txysprz: STR R12,[R8,#&1C]: STR R12,[R8,#&18] LDR R9,objo: LDR R5,[R9]: BIC R5,R5,#&FF0000: STR R5,[R8,#4] \ create action type 0 AND R5,R5,#&FF: LDRB R7,[R9,#1]: MUL R7,R5,R7 STR R7,[R8,#&28] \ create object num 0 LDRB R7,[R9,#2]: STR R7,[R8,#&20] MOV R5,#&2000: STR R5,[R8,#8] STR R0,[R8,#12]: STR R0,[R8,#16] STR R0,[R8,#20]: LDR R5,[R9,#4]: ADD R5,R5,R12 STR R5,[R8,#24]: STR R5,[R8,#28] LDRB R5,[R9,#2]: STR R5,[R8,#32] SUB R7,R8,#xyzinfo-xyzblip MOV R0,#0 STR R0,[R7]: STR R0,[R7,#4]: STR R0,[R7,#8] LDRB R11,[R8,#6]: BL getaction11: STR R11,[R7,#&C] STR R11,[R7,#&1C]: SUB R0,R0,#1 STR R0,[R7,#&20]: STR R0,[R7,#&24]: STR R0,[R7,#&28] B xyzloop3 .txysprz EQUD xyzsprs .staygoc EQUD 0 .objo EQUD xyzobs .exoin EQUD exyzing .storR10 EQUD 0 .thresher EQUD mapcopy+&10 .inslineok STR R10,storR10 BL redocurs STR R13,staygoc BL getabs10:MOV R12,R10:.loop .loop LDR R9,[R10,#&2C]: CMP R9,#0: ADDNE R10,R10,#48 BNE loop: ADD R11,R10,#48 .loop LDMIA R10,{R0,R1,R2,R3, R4,R5,R6,R7, R8,R9,R13,R14} STMIA R11,{R0,R1,R2,R3, R4,R5,R6,R7, R8,R9,R13,R14} SUB R10,R10,#48: SUB R11,R11,#48 CMP R10,R12: BGE loop SUB R10,R10,#48 LDR R0,thresher: CMP R10,R0: LDRNE R6,storR10 CMPNE R6,#0 LDMIA R10!,{R0,R1,R2,R3, R4,R5,R6,R7, R8,R9,R13,R14} STMNEIA R11,{R0,R1,R2,R3, R4,R5,R6,R7, R8,R9,R13,R14} MOV R9,#48 .movexyzs LDR R0,txyinfoz:.loop LDR R5,[R0],#&2C: CMN R5,#2: LDRHS R13,staygoc: BHS endmxz BIC R7,R5,#&FF<<24: BIC R7,R7,#&F<<20 CMP R7,R12: ADDGE R5,R5,R9: STRGE R5,[R0,#-&2C] B loop .endmxz BL getabs10 LDR R9,[R10,#&2C]: CMP R9,#0: SUBEQ R10,R10,#48 STMEQFD R13!,{R15}: BLEQ yobk .contineditA BL getundercurs: B continedit .opamtnp EQUD mapcopy+&40 .delline LDR R4,opamtnp: LDR R5,[R4,#&2C+&60]: MOVS R5,R5: BEQ continedit BL redocurs BL getabs10:ADD R11,R10,#48 MOV R12,R10 STR R13,staygoc .loop LDMIA R11!,{R0,R1,R2,R3, R4,R5,R6,R7, R8,R9,R13,R14} STMIA R10!,{R0,R1,R2,R3, R4,R5,R6,R7, R8,R9,R13,R14} CMP R14,#0: BNE loop ADD R12,R12,#48 MVN R9,#47 B movexyzs : .delxyz ADR R10,fnregs: LDMIA R10,{R0,R1,R2,R3,R4} STMFD R13!,{R14} BL gxyzptr \R1 LDRB R12,[R3]: CMP R12,#0: LDMEQFD R13!,{R15} SUB R2,R1,#xyzinfo-xyzblip .loop LDR R10,[R2,#&2C]: STR R10,[R2],#4 LDR R10,[R1,#&2C]: STR R10,[R1],#4: CMN R10,#1: BNE loop BL gxyzptr: LDR R2,[R1]: CMN R2,#2 BLHS findnxtxyz: LDMFD R13!,{R14} B xyzloop2 .getxyzpts LDR R6,txyinfoz: B gxyzptr .fnregs EQUD index \ R0 EQUD mapptr .txyinfoz EQUD xyzinfo .txyingz EQUD exyzing \R3 .blowit MOV R0,#0: STRB R0,[R3]: B seenone .atend SUB R5,R5,#&2C*2: SUB R6,R6,#1: LDR R11,txyinfoz CMP R5,R11: ADDLT R5,R5,#&2C: ADDLT R6,R6,#1 B foundxyz .backtostart LDR R14,[R9,#-&2C] BIC R14,R14,#&F<<28: BIC R14,R14,#&FF<<20 BIC R11,R11,#&F<<28: BIC R11,R11,#&FF<<20 CMP R14,R11: BEQ nobtst: LDMFD R13!,{R15} .findnxtxyz STMFD R13!,{R14} MVN R0,#1: BL streflsh .infnx BL redocurs MOV R6,#0 BL gxyzptr: MOV R9,R1 ADR R10,fnregs: LDMIA R10,{R0,R1,R2,R3,R4} LDRB R5,[R3]: MOVS R5,R5: ADREQ R9,findnxtxyz MOV R5,R2 LDR R12,[R1]: ADD R12,R12,#48: LDR R11,[R5]: CMN R11,#2 BHS blowit LDR R11,[R9]: CMN R11,#2: BHS justdellast .loop ADD R6,R6,#1: LDR R11,[R5],#&2C: CMN R11,#2 BHS atend BIC R11,R11,#&FF<<24: BIC R11,R11,#&F<<20 CMP R11,R12: BLT loop SUB R5,R5,#&2C .foundxyz LDR R11,[R5] LDR R8,[R9]: EOR R8,R8,R11: MOVS R8,R8,LSL#12: BNE notsxyz LDR R8,[R9,#&2C]: CMN R8,#2: BHS backtostart .nobtst EOR R8,R8,R11: MOVS R8,R8,LSL#12 LDREQB R6,[R3]: ADDEQ R5,R9,#&2C: ADDEQ R6,R6,#1 BEQ notsxyz LDR R8,[R5,#&2C] EOR R11,R8,R11: MOVS R11,R11,LSL#12 ADDNE R5,R5,#&2C: ADDNE R6,R6,#1 .notsxyz LDR R11,[R5]: BIC R11,R11,#&FF<<24: BIC R11,R11,#&F<<20 BL stxyzdo SUB R11,R11,#48 LDR R12,[R1] CMP R11,R12 BLT zoombkwd: BEQ endforw .loop LDR R8,[R0]: BL get10spd: SUBS R8,R8,R10,LSL#22 LDR R10,[R1]: ADDCC R10,R10,#48 LDR R9,[R10,#&2C]: ADDCC R8,R8,R9 CMP R9,#0: BEQ endforw CMP R10,R11: BGT endforw STR R10,[R1]: STR R8,[R0] STMFD R13!,{R0,R1,R11,R14}: MVN R0,#0: BL mnplans2 LDMFD R13!,{R0,R1,R11,R14} BL feditr B loop .justdellast BL ldxyzdo: SUB R6,R6,#1: SUB R5,R5,#&2C: B notsxyz .endforw MOV R8,#&10000: STR R8,[R0]: ADD R11,R11,#48: BL wrcurs .seenone BL getundercurs BL feditr: BL nouge: BL feditr LDMFD R13!,{R15} .xyzcontrol2 ADR R10,xyzkeyz2: B ckekeyz .xyzcontrol ADR R10,xyzkeyz: B ckekeyz .feditr STMFD R13!,{R0,R1,R11,R14}: BL resetspd: BL editf LDMFD R13!,{R0,R1,R11,R15} .loop STMFD R13!,{R0,R1,R11,R14}: MOV R0,#1: BL mnplans2 LDMFD R13!,{R0,R1,R11,R14} BL feditr .zoombkwd LDR R8,[R0]: BL get10spd: ADD R8,R8,R10,LSL#22 LDR R10,[R1]: LDR R9,[R10,#&2C]: SUBS R9,R8,R9: MOVPL R8,R9 STR R8,[R0]: SUBPL R10,R10,#48: STR R10,[R1] CMP R10,R11: BNE loop B endforw .xyzkeyz EQUD -87: EQUD movexyzfwd EQUD -103: EQUD movexyzbwd EQUD -88: EQUD fastxyzfwd EQUD -104: EQUD fastxyzbwd EQUD -80: EQUD xyzup EQUD -105: EQUD xyzdwn EQUD -98: EQUD mxyzlft EQUD -67: EQUD mxyzrgt EQUD -66: EQUD xyzobup EQUD -82: EQUD xyzobdn EQUD -51: EQUD xyzactup EQUD -68: EQUD xyzactup .xyzkeyz2 EQUD -58: EQUD xyzfwd EQUD -42: EQUD xyzbwd EQUD 0: EQUD retxyzc .xyzbwd BL backwar: BL redocurs: B reseexyz .xyzfwd BL fowar: BL redocurs: B reseexyz .xyzup BL getshifted: LDR R5,[R1,#&C]: ADD R5,R5,R0,LSL#6 .updwncpy STR R5,[R1,#&C] B reseexyz .mxyzlft BL getshifted: LDR R5,[R1,#&8]: SUB R5,R5,R0,LSL#6 B lfrgtcpy .xyzdwn BL getshifted: LDR R5,[R1,#&C]: SUBS R5,R5,R0,LSL#6 MOVMI R5,#0 B updwncpy .mxyzrgt BL getshifted: LDR R5,[R1,#&8]: ADD R5,R5,R0,LSL#6 .lfrgtcpy STR R5,[R1,#8] .reseexyz BL resetspd BL editf: BL nouge: BL editf: B retxyzc : .tobnames EQUD obnames .gettypeact LDRB R12,[R0,#&2A]: LDR R10,tobnames CMP R12,#numobjs: MOVGE R12,#0 SUB R9,R10,#obnames-actnames .loop RSBS R4,R12,#0 ; ensure LT unless R12=0 .loop1 LDRLTB R4,[R10],#1: CMPLT R4,#&80: BLT loop1 SUBS R12,R12,#1: BGT loop LDRB R12,[R0,#6] CMP R12,#numact: MOVGE R12,#0 .loop RSBS R4,R12,#0 .loop1 LDRLTB R4,[R9],#1: CMPLT R4,#&80: BLT loop1 SUBS R12,R12,#1: BGT loop MOV R4,#66: MOV R0,#11:.loop STRB R4,[R1,R0]: STRB R4,[R2,R0] SUBS R0,R0,#1: BPL loop .loop LDRB R4,[R10],#1: TST R4,#&80: AND R4,R4,#&7F STRB R4,[R1],#1: BEQ loop .loop LDRB R4,[R9],#1: TST R4,#&80: AND R4,R4,#&7F STRB R4,[R2],#1: BEQ loop MOV R15,R14 : .goin EQUD 0:.hdoin EQUD 0 .limitrect MOV R0,#21: ADR R1,hiscrect1: SWI "OS_Word" MOV R0,#21: ADR R1,hiscrect: SWI "OS_Word": MOV R15,R14 .hiscrect EQUB 1: EQUW 0: EQUW 330: EQUW 1279: EQUW 710 .hiscrect1 EQUB 1: EQUW 0: EQUW 350: EQUW 1279: EQUW 690 ALIGN .okad EQUD okdoit:.noad EQUD editloop2 .rstdoin MOV R0,#1: STR R0,hdoin: MOV R15,R14 .getr2spdh SWI "OS_Mouse" LDR R2,hdoin: CMP R1,#&150: MOVLT R2,#2: CMP R1,#&2C0: MVNGT R2,#0 STR R2,goin:STR R2,hdoin: MOV R15,R14 .getr10w LDR R10,goin: CMP R10,#1: MVNLT R10,#&3F: SUBLT R10,R10,#&100 MOVEQ R10,#&140: MOVGT R10,#&280: MOV R15,R14 .unicode ADD R0,R6,#7 .enteritthen FNut("SELECT SCREEN TO EDIT: ENTER EDITOR CODE:",0): EQUB &FF:ALIGN .mayclfint LDR R1,unicode: MOVS R1,R1: MOVNE R15,R14: B clfint .maybeok STMFD R13!,{R14} BL getnome: SUB R0,R0,#1: LDR R12,teditcd: LDR R9,[R12,R0,LSL#2] SUBS R9,R9,#123: MOVLT R9,#0: ORRGT R9,R9,#1: STR R9,unicode: LDMFD R13!,{R15} .reqecode BL archivecur: CMP R0,#1: BEQ cantarchive LDR R0,okad: LDR R1,noad .entercodez STMFD R13!,{R0,R1}: LDR R12,teditcd BL decodecodes BL getR0at: EQUD changing: LDR R8,[R12,R0,LSL#2] CMP R8,#123 MOVLES R8,#0: BEQ okecode: BL encryptcodes \ R0 is ok address \ R1 is not ok address LDR R0,unicode: MOVS R0,R0: BEQ okecode ADR R10,enteritthen: BL uprompt MOV R0,#&1E00: ORR R7,R0,#&10: BL stcar2 BL getR0at: EQUD changing: ADD R0,R0,#1 MOV R1,#10: BL divide32: MUL R1,R2,R1: SUB R12,R0,R1 MOVS R0,R2: BLNE Dutext2: MOV R0,R12: BL Dutext2 BL Dutext66: BL copybnks MOV R0,#&1E80: ADD R7,R0,#8: ADR R12,enterscode: MOV R11,#8 LDR R5,sixsixes: STR R5,[R12]: STR R5,[R12,#4] ADR R5,nogoode ADR R14,editin B editstrg .sixsixes EQUD &42424242 .notokuc LDR R0,editin: STR R0,unicode: MOV R15,R14 .idontknowok LDR R0,unicode: MOV R15,R14 .calcay MOV R10,#25:.loop EOR R0,R0,R0,LSL#1: SUBS R10,R10,#1: BPL loop: MOV R15,R14 .editin BL decodecodes MOV R0,#&1E80: ADD R7,R0,#8: BL stcar2 ADR R4,enterscode: MOV R10,#8:.loop LDRB R0,[R4],#1: BL Dutext2: SUBS R10,R10,#1: BNE loop BL copybnks ADR R5,enterscode: BL tobinary LDR R12,teditcd BL getR0at: EQUD changing: LDR R8,[R12,R0,LSL#2] \ R8 is current BL getnome: SUB R0,R0,#1: LDR R9,[R12,R0,LSL#2] \ R9 is universal LDR R10,backdoor CMP R4,R9: BEQ isunick CMP R4,#&F4000: MVNEQS R10,#5: BLT isunick MOV R1,R4 MOV R10,#25:.loop EOR R1,R1,R1,LSL#1: SUBS R10,R10,#1: BPL loop LDR R10,backdoor: CMP R1,R10 .isunick MOVEQ R10,#0: STREQ R10,unicode BEQ isuni: CMPNE R4,R8 .okecode LDMEQFD R13!,{R0,R1}: MOVEQ R15,R0 ADR R0,ero-4: BL outerror BL copybnks .nogoode LDMFD R13!,{R0,R15} .teditcd EQUD editcodes .isuni ADR R0,ero2-4: BL outerror: LDMFD R13!,{R0,R1}: MOV R15,R0 .enterscode BL getword: BL getword B editin .backdoor EQUD 31416050 .ero EQUS "SoRrY, tHaT's wRoNg": EQUB 0 .ero2 EQUS "Universal code entered": EQUB 0 ALIGN .iblk EQUD xyzinfo EQUD xyzmap EQUD 0 EQUD current EQUD -1 EQUD mapcopy+&40 .info2map STMFD R13!,{R14} ADR R6,iblk: LDMIA R6,{R0-R4,R14} MOV R8,R4 LDRB R12,[R3] MOVS R12,R12: BEQ archxyz .loop LDR R9,[R1],#4: CMN R9,#2: BEQ minustoo CMN R9,#1: BNE loop: \ R1 is start SUBS R12,R12,#1: BNE loop .archxyz STR R8,endword MOV R11,R1:.loop LDR R9,[R11],#4:CMN R9,#1: CMNNE R9,#2: BNE loop MOV R10,R11:.loop CMN R9,#2: LDRNE R9,[R10],#4 BNE loop .gettynum LDR R2,iblk: MOV R8,#4:.loop LDR R9,[R2],#&2C CMN R9,#2: ADDLO R8,R8,#16: BLO loop: ADD R7,R8,R1 \ R10 is end of map \ R1 is start new map \ R7 is copy to \ R11 is move from SUBS R6,R7,R11: BEQ finmvexyz: BLT movexyzdown ADD R6,R10,R6:.loop LDRB R9,[R10],#-1: STRB R9,[R6],#-1 CMP R10,R1: BGE loop .finmvexyz \ R0 = xyz info \ R1 = store address \ \ R8 is num \ R14 = mapcopy+&40 .loop SUBS R8,R8,#16: LDRLT R8,endword: STRLT R8,[R1]: LDMLTFD R13!,{R15} LDR R9,[R0],#&2C: SUB R9,R9,R14: STR R9,[R1],#16 LDR R9,[R0,#8-&2C]: STR R9,[R1,#4-16] LDR R9,[R0,#12-&2C]: STR R9,[R1,#8-16] LDRB R9,[R0,#&2A-&2C]: STRB R9,[R1,#12-16] LDRB R9,[R0,#6-&2C]: STRB R9,[R1,#13-16] B loop .arch2xyz STR R8,endword LDR R2,iblk: MOV R8,#4:.loop LDR R9,[R2],#&2C CMN R9,#2: ADDLO R8,R8,#16: BLO loop B finmvexyz .endword EQUD 0 .movexyzdown MOV R4,R7: MOV R5,R11:.loop LDRB R9,[R5],#1: STRB R9,[R4],#1 CMP R5,R10: BLE loop B finmvexyz .editxyz MOV R8,#0: BL strR8ex BL redocurs BL editf: BL editf BL findnxtxyz .xyzloop2 BL xyzpanel .xyzloop BL flashing2 BL editf BL getundercurs ; or next etc sometimes changes colour of tile BL testxyzbut SWI "OS_Mouse": MOV R1,#192: CMP R1,R0 BL readmse CMPLE R0,#3: MVNLE R0,#0 CMP R0,#0: BEQ insxyz LDRB R1,exyzing: MOVS R1,R1: BEQ xyzcontrol2 CMP R0,#7: BEQ xyzmenu CMP R0,#1: BEQ nxtxyzv CMP R0,#2: BEQ delxyz CMP R0,#3: LDREQ R1,xyzeditptr: STREQ R0,[R1,#8]: STREQ R0,[R1,#12] B xyzcontrol:.retxyzc B editcontrol .yzif EQUD xyzinfo .xyzloop3 BL editf: BL editf: B xyzloop2 .nxtxyzv BL findnxtxyz: B xyzloop2 .editpv BL gettimel BL previewplay: MOV R1,#2: BL osbyte4 BL editf: BL editf BL prvpanel .pvloop BL readmse: CMP R0,#3: BEQ editpv B editcontrol .editbckdp BL editf: BL editf BL getfbd BL bdpanel B bdloop : .gxyzptr LDR R1,xyzeditptr: MOV R15,R14 .strR8ex STR R8,xyzeditptr: MOV R15,R14 .fullbdedit LDR R0,bdeditptr2 .gbdedit LDR R1,bdeditptr: MOV R15,R14 .gbde2dit LDR R1,bdeditptr: B bd2t .strfulbd LDR R2,bdeditptr2: LDR R3,bdeditptr SUB R2,R2,R3: ADD R2,R2,R1: STR R2,bdeditptr2 .strR1bd STR R1,bdeditptr: MOV R15,R14 .strfulbdA LDR R2,bdeditptr2: LDR R3,bdeditptr SUB R2,R2,R3: SUB R2,R0,R2: STR R2,bdeditptr STR R0,bdeditptr2: MOV R15,R14 .controllflsh LDREQ R0,xyzeditptr: B streflsh .txyfo EQUD xyzinfo .xyzeditptr EQUD xyzinfo .bdeditptr EQUD junkmap:.bdeditptr2 EQUD junkinfo .stxyzdo \ R6 is xyz number (or zero) \ R5 is address STRB R6,exyzing: STR R5,xyzeditptr: MOV R15,R14 .stxyzdo2 STRB R12,exyzing: MOV R15,R14 .ldxyzdo LDRB R6,exyzing: LDR R5,xyzeditptr: MOV R15,R14 .exyzcnst STMFD R13!,{R0-R12,R14} LDR R0,txyfo: LDR R1,xyzeditptr: SUB R0,R1,R0: MOV R1,#&2C BL divide32: ADD R2,R2,#1: STRB R2,exyzing: LDMFD R13!,{R0-R12,R15} .odelsk EQUD delski .xyzpanel STMFD R13!,{R14} BL editmenu LDR R3,odelsk LDRB R4,exyzing: BL xypvopts LDRB R12,exyzing: MOVS R12,R12: BEQ nomorx BL dispxyzmbuts LDRB R12,exyzing LDR R0,xyzeditptr: ADR R1,dba: ADR R2,sta: BL gettypeact BL getR0at: EQUD base2 ADR R12,xtrabd: BL xtramenus .nomorx BL copybnks LDMFD R13!,{R15} .xtrabd EQUD -1 .dba FNut("0123456789AB",0): EQUB &FF .sta FNut("0123456789AB",0): EQUB &FF EQUB &FF: FNut("OBJECT MENU",0): EQUB &FF EQUD -1: EQUD -1 ALIGN : .xypvopts \ R4 is editing flag MOVS R4,R4: ADREQ R5,delski3: ADRNE R5,delski2 MOV R6,#12:.loop LDRB R7,[R5],#1: STRB R7,[R3],#1 SUBS R6,R6,#1: BNE loop ADR R12,xymenu: B xtramenus : .prvpanel STMFD R13!,{R14} BL editmenu ADR R12,ppbck: BL xtramenus BL copybnks LDMFD R13!,{R15} .ppbck EQUB -1: EQUW -1 FNut("CONTINUE",0): EQUB -1: EQUD -1: EQUD -1: EQUD -1 ALIGN : .bdpanel STMFD R13!,{R14} BL editmenu BL gbdedit: LDR R1,[R1]: CMN R1,#2: BHS noneatal CMP R1,#100: BHI fullbdbuts: B justbdtype:.frombdbuts ADR R3,delski BL gbdedit: LDR R1,[R1]: CMN R1,#2: MVNHS R1,#0 ADD R4,R1,#1: BL xypvopts BL bdopts BL copybnks LDMFD R13!,{R15} .maybdpal STMFD R13!,{R14}: BL gbdedit: LDMFD R13!,{R14} LDR R1,[R1]: CMN R1,#2: MOVHS R15,R14: CMP R1,#100 BHI bdpalette: MOV R15,R14 .xymenu FNut("NEW",0): EQUB &FF FNut("NEXT",0): EQUB &FF .delski FNut("DELETE",0): EQUB &FF EQUB &FF EQUD -1:EQUD -1: EQUW -1: EQUW -1: FNut("QUIT",0): EQUB -1 .delski3 FNut(" ",0): EQUB &FF: EQUD -1:EQUD -1:ALIGN .delski2 FNut("DELETE",0): EQUB &FF EQUB &FF: EQUD -1 .exyzing EQUB 0 \ number-1 ALIGN .shownoch STMFD R13!,{R14} MOV R7,#&1900: ADD R0,R7,#&38: LDR R1,fierce2: BL stcar MOV R0,#16: BL Dutext2 MOV R0,#21: BL Dutext2 MOV R0,#10: BL Dutext2 MOV R9,R12,LSR#8: AND R9,R9,#&FF: BL out9hex MOV R7,#&1000: ADD R7,R7,#&78: BL stcar2 AND R9,R12,#&FF: BL out9hex LDMFD R13!,{R15} .fierce2 EQUD &D02F2E2C .rcol LDR R1,fierce2: B stcol .randpas \ R5 to password MOV R12,R14 BL randpas1: MOV R14,R12 .randpas1 MOV R9,R14 MOV R1,#1: MOV R2,#41: MOV R3,#63:MOV R4,#0: MOV R6,#5:.loop BL getrand: EOR R0,R0,R4: AND R0,R0,R3: CMP R0,#36: BGE loop MLA R4,R0,R1,R4: MUL R1,R2,R1: SUBS R6,R6,#1: MOVEQ R3,#15 BPL loop LDR R10,[R5,#-8]: EOR R10,R10,R4 STR R10,[R5],#4: MOV R15,R9 : .sameb4 LDRB R0,jobdoing ADR R14,jobconts LDR R15,[R14,R0,LSL#2] .frommse EQUD 0 .readmse LDR R0,frommse: MVN R1,#0:.wrmse STR R1,frommse: MOV R15,R14 .wrmse2 STR R0,frommse: MOV R15,R14 .editcontrol BL getmenu: STR R0,frommse: CMP R0,#15: BEQ editloopi2 CMP R0,#12: BGE sameb4: SUBS R0,R0,#8: BMI sameb4 STRB R0,jobdoing:.gotojob BL redocurs BL notwhite LDRB R0,jobdoing: ADR R14,jumpintos LDR R15,[R14,R0,LSL#2] .editloopi2 BL redocurs: B editloop2 .jumpintos EQUD edittrk: EQUD editxyz EQUD editbckdp: EQUD editpv .jobconts EQUD trkloop: EQUD xyzloop EQUD bdloop: EQUD pvloop : .jobdoing EQUD 0 .lookupjb EQUD &FC0 EQUD &FC0+&B40: EQUD &FC0+&B40*2 EQUD &FC0+&B40*3 .editmenu MOV R0,#19: SWI "OS_Byte" STMFD R13!,{R14}: ADR R12,emenu: BL domenu LDR R4,jobdoing:.hlit ADR R5,lookupjb LDR R7,[R5,R4,LSL#2]: BL stcar2 MOV R0,#60: BL Dutext2 LDMFD R13!,{R15} .hlito STMFD R13!,{R14}: B hlit .wipesar STMFD R13!,{R14} MOV R7,#&FC0:MOV R11,#3:MOV R0,#66:.loop BL stcar2: BL Dutext2: ADD R7,R7,#&B40: SUBS R11,R11,#1: BPL loop LDMFD R13!,{R15} .emenu EQUD-1: EQUD -1 FNut("TRACK",0): EQUB &FF FNut("OBJECTS",0): EQUB &FF FNut("BACKDROP",0): EQUB &FF FNut("PREVIEW",0): EQUB &FF EQUB &FF: EQUB &FF: EQUB &FF: FNut("QUIT",0): EQUB &FF ALIGN .standardfintxt FNequadd("YOU HAVE COMPLETED THIS ZONE. WHAT A GREAT ACHIEVEMENT ") FNequadd(" - GIVE THIS PERSON A LOLLIPOP. @") ALIGN .eachscr EQUS "SCREEN ":.pokscr EQUS "00 " EQUD &00010300: EQUD &1E7D0: EQUD &100: EQUD &2200000: EQUD 0:EQUD 0 EQUD &003020FF EQUD &D07FE083: EQUD &30303030: EQUB &30 EQUD &2C7FE083: EQUD &30303030: EQUB &30 EQUD &03030303: EQUD &03030303 EQUD &03030303: EQUD &03030303: EQUD &03030303: EQUD &03030303 EQUD &03030303: EQUD &03030303: EQUD &03030303: EQUD &03030303 EQUD &D07F0080: EQUD &30303030: EQUB &30: EQUD -1:EQUB -1 ALIGN .tafol .thatsallfolks EQUS "That's all folks" ALIGN .poknscr ADD R0,R0,#1: MOV R1,#&2F:.loop ADD R1,R1,#1: SUBS R0,R0,#10 BGE loop STRB R1,pokscr: ADD R0,R0,#10+&30: STRB R0,pokscr+1: MOV R15,R14 .tfinetx EQUD fintxt .ormarp EQUD map .createnewz LDR R0,tfinetx: ADR R1,standardfintxt .loop LDRB R2,[R1],#1: STRB R2,[R0],#1: CMP R2,#31: BNE loop LDR R0,ormarp: MOV R1,#0: BL getstart MOV R5,#0:.loop2 CMP R5,#9: MOVGE R6,#&31: MOVLT R6,#&30: STRB R6,pokscr ADDGE R6,R5,#39: ADDLT R6,R5,#&31: STRB R6,pokscr+1 ADR R7,eachscr:.loop LDR R8,[R7],#4: STR R8,[R0],#4 CMN R8,#1: BNE loop ADD R5,R5,#1: CMP R5,#10: BNE loop2 ADR R7,tafol LDMIA R7!,{R1,R2,R3,R4}: STMIA R0!,{R1,R2,R3,R4} LDR R1,zinf: ADR R2,newblkz LDMIA R2,{R0,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12} STMIA R1,{R0,R3,R4,R5,R6,R7} MOV R6,#123 .loop STR R6,[R9],#4: STR R8,[R10],#4 STR R8,[R11],#4 SUBS R5,R5,#1: BNE loop MVN R5,#1: STR R5,[R11]: STR R5,[R10] MOV R5,R12: MOV R11,#10:.loop BL randpas: SUBS R11,R11,#1: BPL loop BL maybeok BL justjen1 BL newhstfile2 BL encrypto1 LDMFD R13!,{R15} .newblkz FNut("NEW ZONE",0) EQUD &ABCDE1 EQUD 10 EQUD 0 EQUD 5000 EQUD -1 EQUD editcodes \ R9 EQUD junkmap \ R10 EQUD xyzmap \ R11 EQUD passwords+6*8 \ R12 .zgroupname EQUD getfspfnd .dozonename STMFD R13!,{R14} MOV R5,#4 MOV R0,#0: BL tweakit2 MOV R7,#&5800: ADD R0,R7,#&8D: LDR R1,cools BL stcar BL blackline LDR R10,zgroupname: MOV R11,#0:.loop CMP R11,#10: BEQ endoutzname LDRB R1,[R10,R11]: BL asctoint: BL Dutext2 ADD R11,R11,#1: CMP R1,#32: BGE loop MOV R0,#66:.loop CMP R11,#10: BLLT Dutext2: ADD R11,R11,#1: CMP R11,#11: BLT loop .endoutzname LDR R10,justjen: MOVS R10,R10 MOV R7,#&8B00: ADD R0,R7,#&D1: LDR R1,cools LDRNE R1,cools2: BL stcar BL blackline LDR R10,zinf MOV R5,#7:.loop LDRB R0,[R10],#1: BL Dutext2 SUBS R5,R5,#1: BPL loop BL untweak: BL zonetopbit: LDMFD R13!,{R15} .cools EQUD &101314 .cools2 EQUD &101010 .justjen EQUD 1 .justjen0 MOV R0,#0: STR R0,justjen: MOV R15,R14 .justjen1 MOV R0,#1: STR R0,justjen: MOV R15,R14 .botofsw EQUD scrnbot .tmbd EQUD minibdata .gocar EQUD carriage .aiconv EQUS "0123456789:Cr-ABCDEFGHIJKLMNOPQRSTUVWXYZ[/]'"",.?0123456789""<>_|##+ -@$!)(" ALIGN .inttoasc CMP R1,#78: MOVEQ R0,#ASC("*"): MOVEQ R15,R14 ADR R2,aiconv: CMP R1,#(inttoasc-aiconv): MOVGE R0,#&2E LDRLTB R0,[R1,R2]: MOV R15,R14 .cari2 EQUD 0 .auni EQUD unicode .mayinstcsh LDR R0,auni: LDRB R0,[R0]: MOVS R0,R0: BNE zstatsloop: MOVEQ R15,R14 .outputft STMFD R13!,{R14}: BL colmy: BL tweakbot BL endspcft MOV R0,#&1E00: ADD R7,R0,#&24 MOV R6,#0: LDR R4,tofint LDR R1,auni: LDRB R1,[R1]: MOVS R1,R1: ADRNE R4,saynogood LDR R11,ftcurspos BL stcar2: STR R7,cari2: MOVS R11,R11 ADDEQ R6,R6,#1: MOVEQ R0,#68: BLEQ Dutext2 B intoftloop .loop2 BL stcar2:STR R7,cari2 .loop .intoftloop LDRB R0,[R4],#1: CMP R0,#31: BNE conttxt BL untweak: LDMFD R13!,{R15}:.conttxt CMP R0,#64: BGE chcole .chendk2 CMP R0,#&7F: MOVEQ R1,#32: ADDNE R1,R0,#33: AND R1,R1,#&FF BL asctoint: BL Dutext2 .chendk0 SUBS R11,R11,#1: BNE chendk ADD R6,R6,#1: CMP R6,#62: MOVEQ R6,#0: ADDEQ R7,R7,#&780 BLEQ stcar2: STREQ R7,cari2: MOV R0,#68: BL Dutext2 .chendk ADD R6,R6,#1: CMP R6,#62: BNE loop MOV R6,#0: ADD R7,R7,#&780: B loop2 .saynogood FNequadd("CONGRATULARY MESSAGE HIDDEN"): EQUB 31 ALIGN .ftcurspos EQUD 1 .wrftcurspos STR R0,ftcurspos .rdftcurspos LDR R0,ftcurspos: MOV R15,R14 .rdftcurspos1 LDR R1,ftcurspos: MOV R15,R14 .chcole CMP R0,#&FF: BEQ chendk2 LDR R1,gocar: LDR R2,tmbd ADD R0,R0,#112-69: STMFD R13!,{R1-R12,R14}: BL btrans0 LDMFD R13!,{R1-R12,R14} CMP R0,#255: BGT chendk0 ADD R0,R0,R0,LSL#1: ADD R2,R2,R0,LSL#2 STMFD R13!,{R11} LDR R3,[R1]: ADD R12,R3,#4: STR R12,[R1] LDR R11,botofsw: LDR R11,[R11]: ADD R3,R3,R11 LDR R11,[R2]: ORR R11,R11,#&D1000000: STR R11,[R3,#&140] LDR R11,[R2,#4]: ORR R11,R11,#&D1000000: STR R11,[R3,#&280] LDR R11,[R2,#8]: ORR R11,R11,#&D1000000: STR R11,[R3,#&3C0] LDR R11,somed1d1s: STR R11,[R3,#&500]: STR R11,[R3] LDMFD R13!,{R11} B chendk0 .somed1d1s EQUD &D1D1D1D1 .getaname MOV R9,R0: ADD R0,R0,#24:.storar MOV R4,#24 ADR R8,credits:.loop LDRB R3,[R9],#1: STRB R3,[R8],#1: SUBS R4,R4,#1: BNE loop MOVS R15,R14 .putaname MOV R9,R0: ADD R0,R0,#24:MOV R4,#24 ADR R8,credits:.loop LDRB R3,[R8],#1: STRB R3,[R9],#1: SUBS R4,R4,#1: BNE loop MOV R15,R14 .noauthor ADR R9,noaufor: B storar .zinf EQUD zinfoblk .statusz FNut(" ",0): EQUB &FF EQUB &FF:FNut("NUMBER OF SCREENS:",0):EQUB &FF .nsc FNut(" ",0): EQUB &FF EQUB &FF: EQUB &FF: FNut("START CASH",0): EQUB &FF .tcsh FNut(" ",0): EQUB &FF EQUB &FF: EQUB &FF: FNut("AUTHOR:",0): EQUB &FF .credits FNut(" ",0): EQUB &FF EQUB &FF: EQUB &FF: EQUB &FF: FNut("QUIT",0) EQUB &FF .noaufor FNut("OBSOLETE FORMAT ZONE ",0) ALIGN .tofint EQUD fintxt .znestats BL showbgic: BL zsbords: BL untweak MVN R0,#0: BL wrftcurspos BL outputft BL getnome ADR R1,nsc: ADR R12,nsc+1: BL dcnum BL getmony ADR R1,tcsh: ADR R12,tcsh+5: BL dcnum BL untweak ADR R6,statusz: LDR R5,zinf LDMIA R5,{R0,R1}: STMIA R6,{R0,R1} ADR R12,statusz: BL domenu BL znechannels: BL copybnks .loop BL mayclfint .zstatsloop BL rcol BL getmenu:.gotmenu2 CMP R0,#15: BEQ exitxon: ADR R5,gotmenu2 TST R0,#3: BEQ inznom CMP R0,#11: BEQ inzaf CMP R0,#7: BNE loop BL mayinstcsh .instcsh ADR R12,tcsh: MOV R11,#5: B getcsh .exitxon ADR R5,statusz: LDR R6,zinf LDMIA R5,{R0,R1}: STMIA R6,{R0,R1} LDR R5,tcsh2:MOV R0,#0:.loop LDRB R1,[R5],#1: CMP R1,#66 ADDNE R0,R0,R0,LSL#2: ADDNE R0,R1,R0,LSL#1: BNE loop STR R0,[R6,#stmoney-zinfoblk] B editloop2 .tcsh2 EQUD tcsh .inznom ADR R12,statusz: MOV R11,#8 MOV R7,#&F10: SUB R7,R7,#8 B inputstrg .inzaf BL mayinstcsh LDR R12,tocreds: MOV R11,#23 MOV R7,#&3100: ADD R7,R7,#&88: B inputstrg .testkeys MOV R0,#&81: MOV R1,#0: MOV R2,#0: B osbyte .testkeys1 MOV R0,#&81: MOV R1,#0: MOV R2,#1: B osbyte .tocreds EQUD credits .getpok ADR R12,whatado: LDRB R4,doings:.loop LDRB R6,[R12],#1: CMP R6,#&FF: BNE loop SUBS R4,R4,#1: BNE loop MOV R5,#6: ADR R7,pokert:.loop LDRB R6,[R12],#1: STRB R6,[R7],#1: SUBS R5,R5,#1: BNE loop MOV R15,R14 .doings EQUB 8 .whatado FNut("ENTER NUMBER OF SCREEN TO ",0):.pokert FNut(" ",0): EQUB &FF: EQUB &FF EQUB &FF:EQUB&FF: EQUD -1 FNut("DELETE",0): EQUB &FF FNut("MOVE ",0): EQUB &FF FNut("COPY ",0): EQUB &FF FNut("INSERT",0): EQUB &FF EQUB &FF:EQUB&FF: EQUB&FF FNut("QUIT",0): EQUB &FF .victime EQUB 0 ALIGN .redrez BL editf: BL editf: BL editf .editzone BL chkprivelege BL decodecodes \ if you can get this far it doesn't matter \ if the editor codes are revealed .besensible2 BL swallow BL getpok ADR R12,whatado: BL domenu BL lszlsschan LDRB R4,doings: SUB R4,R4,#8: BL hlito BL listscrns: BL lgy .besensible .loop SWI "OS_Mouse": CMP R2,#0: BNE loop BL rdcursc: STR R0,curcop ADR R0,testmen2 BL inputno2 SUBS R0,R0,#1: BMI editloop2 STRB R0,victime LDRB R1,doings CMP R1,#8: BEQ reqokdel CMP R1,#9: BEQ movescrn CMP R1,#10: BEQ copyscrn CMP R1,#11: BEQ insertscrn B editloop2 .aftermovedl LDRB R1,doings: CMP R1,#9: BNE redrez: BEQ editzone .aftermove LDRB R1,doings: CMP R1,#9: BNE redrez LDR R0,curcop: LDRB R2,victime: BL getvic4R1 CMP R0,R2: BNE editzone CMP R2,R1: SUBLT R1,R1,#1: MOV R0,R1: BL wrcursc: B editzone .curcop EQUD 0 .testmen2 MOVS R0,R0: BMI conting .changemind CMP R0,#8: BLT conting: CMP R0,#12: BGE conting STRB R0,doings STMFD R13!,{R0-R12,R14} BL getpok LDR R10,twaddled: BL uprompt BL wipesar: LDRB R4,doings: SUB R4,R4,#8: BL hlito LDMFD R13!,{R0-R12,R14} B conting .tred EQUD dead .dcash LDR R3,playtesting: MOVS R3,R3: BEQ dcash2: MOV R1,#1 B ishertz .twaddled EQUD whatado .dopl LDR R0,playtesting: MOVS R0,R0: MOV R15,R14 .playtesting EQUD 0 .goingup EQUD 0 .whatgot EQUD got .tmop EQUD mapcopy+&40:.teditcop EQUD editcopy .theg EQUD height .tebee EQUD ebe .tetim EQUD time .readies EQUD cash .cursx EQUD xpos .oldcursx0 EQUD 0 .stcursx LDR R0,cursx: LDR R0,[R0]: STR R0,oldcursx0: MOV R15,R14 .ldcursx LDR R0,oldcursx0: LDR R1,cursx: STR R0,[R1]: MOV R15,R14 .wris EQUD s .jtifn EQUD junkinfo .txyfn EQUD xyzinfo .letsgo BL clrshopgoing BL curveon BL ensurerestart BL initbombstack BL nokeys BL normalrst BL stcursx BL nowarpffwd BL resetballanim BL Irest BL restartfoff: BL nopurplemess \ don't split these or let R0=0 LDR R4,wris: MOV R0,#0: STRB R0,[R4] BL rdcursc: SUB R0,R0,#1: BL wrcursc2 BL stari LDR R6,tred: MOV R5,#0: STRB R5,[R6] LDRB R0,seldata+7: STRB R0,goingup MOVS R0,R0: LDREQ R6,tmop: LDREQ R6,[R6,#&28-&40] MOVNE R6,#0: MOV R7,#0: LDR R0,tetim: STMIA R0,{R6,R7} LDR R5,theg: MOV R0,#0: STR R0,[R5] BL scoreR0 LDR R5,tebee: MOV R0,#12: STRB R0,[R5] STR R5,playtesting MOV R0,#&400000: LDR R5,readies: STR R0,[R5] BL cashcopy LDR R5,gmapte: LDR R5,[R5]: STR R5,sik LDR R5,sindx: LDR R5,[R5]: STR R5,sik4 LDR R6,tmop: LDR R7,teditcop .loop LDMIA R6!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12,R14} STMIA R7!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12,R14} CMP R14,#0: BNE loop LDR R6,jtifn .loop LDMIA R6!,{R0,R1,R2,R3} STMIA R7!,{R0,R1,R2,R3}: CMN R0,#2:BLO loop LDR R6,txyfn .loop SUB R2,R6,#xyzinfo-xyzblip LDMIA R2,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12} STMIA R7!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12} LDMIA R6!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12} STMIA R7!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12} CMN R0,#2: BLO loop LDRB R0,seldata+6: CMP R0,#&FE: BLEQ rstbdxypos LDR R0,whatgot LDR R10,oseldt ADR R6,datif MOV R1,#10:.loop LDRB R5,[R1,R10] CMP R5,#0: BNE notzero: CMP R1,#1 STREQB R5,[R0],#1: B xonloop .oseldt EQUD seldata .notzero CMP R5,#255: LDREQB R5,[R6,R1] STRB R5,[R0],#1 .xonloop SUBS R1,R1,#1: BNE loop MOV R10,#&FF: STRB R10,[R0],#1 LDRB R7,startopt: CMP R7,#&FD LDRNE R6,tmop: ADDNE R6,R6,#48: LDR R8,gmapte: STRNE R6,[R8] LDR R0,sux18: LDR R1,[R8]: LDR R1,[R6,#&2C] SUB R1,R1,#&20000: STR R1,[R0] BNE atbeg LDR R8,gmapte: LDR R5,[R8]: STR R5,mapstrs BL tocurscode .atbeg BL noFFT BL stopfixi BL flreset2 BL dgame BL calc MOV R0,#0: BL getfoot BL centremouse BL resettime BL initcsh2 BL rstrecoil BL chkanimate BL Hz50stars BL findeotdS BL poff:BL gameframe:BL gameframe:BL gameframe:.loop LDR R7,tebee: LDRB R7,[R7]: MOVS R7,R7: BEQ endgf BL gameframe LDR R0,howcsh: LDR R0,[R0]: CMN R0,#2: BEQ endgf LDR R7,tebee: LDRB R7,[R7]: MOVS R7,R7: BEQ endgf BL gameframe LDR R0,howcsh: LDR R0,[R0]: CMN R0,#2: BEQ endgf BL scanesc: BNE loop .endgf BL dostars: BL flip3 BL No50stars BL notdgame BL pon LDR R6,tmop: LDR R7,teditcop .loop LDMIA R7!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12,R14} STMIA R6!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12,R14} CMP R14,#0: BNE loop LDR R6,jtifn .loop LDMIA R7!,{R0,R1,R2,R3} STMIA R6!,{R0,R1,R2,R3}: CMN R0,#2: BLO loop LDR R6,txyfn .loop SUB R14,R6,#xyzinfo-xyzblip LDMIA R7!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12} STMIA R14!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12} LDMIA R7!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12} STMIA R6!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12} CMN R0,#2: BLO loop BL noangeldust ADR R0,sux: MOV R3,#4: BL shove MOV R0,#0: STR R0,playtesting: STRB R0,goingup LDR R5,yiddish: STR R0,[R5] LDR R5,tebee: STRB R0,[R5] BL normalrst BL rstrecoil BL allanimate: BL initwd BL curveoff BL ldcursx LDR R10,tmop:.loop LDR R6,[R10,#&2C]: MOVS R6,R6: BEQ timetaken BL projline: ADD R10,R10,#&30: B loop .howcsh EQUD cash : .tocurscode STMFD R13!,{R14} LDR R0,cursx: LDR R0,[R0]: MOV R5,#&C8000 MOV R1,R0,LSL#7: BL Inrest MUL R5,R0,R5: SUB R5,R5,#&21C000: LDR R0,sux: STR R5,[R0] RSB R5,R5,#&A00000: MOV R1,#99: MOV R0,R5,LSL#1: BL divide32 LDR R0,yiddish: STR R2,[R0] LDR R6,tmop: ADD R6,R6,#48: LDR R8,gmapte: LDR R5,mapstrs ADD R5,R5,#48: CMP R5,R6: STRLT R6,[R8]: STR R5,[R8] LDR R5,[R5,#&2C]: MOV R5,R5,ASR#1: LDR R0,sindx: STR R5,[R0] ADR R0,restcode: BL atcursrst LDMFD R13!,{R15} .myreincar STR R0,mapstrs: LDR R2,cursx: STR R1,[R2] ADR R0,restcode: B atcursrst .mapstrs EQUD 0 .restcode BL tocurscode: B normalr .sux EQUD x: EQUD &A00000 .gmapte EQUD mapptr:.sik EQUD 0 .sindx EQUD index:.sik4 EQUD 0 EQUD enableall: EQUD 1 .sux18 EQUD index .rstmap2 SUB R3,R3,R2: STR R3,[R1]: BL cashcopy LDR R4,playtesting: MOVS R4,R4: BEQ rstmap LDR R6,tmop: LDR R7,teditcop .loop LDMIA R7!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12,R14} STMIA R6!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12,R14} CMP R14,#0: BNE loop .loop LDMIA R7!,{R0,R1,R2,R3}: CMN R0,#2: BLO loop LDR R6,txyfn .loop SUB R14,R6,#xyzinfo-xyzblip LDMIA R7!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12} LDMIA R7!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12} STMIA R14!,{R0,R1,R2,R3,R4,R5,R8,R9,R10,R11,R12} CMN R0,#2: BLO loop B endrstmap .yiddish EQUD dy .playmenu EQUB 255:EQUB255: EQUB 255:FNut("PLAY",0): EQUB 255 EQUD -1: EQUD -1 EQUB 255: EQUB 255: EQUB 255 FNut("QUIT",0): EQUB &FF .datif EQUD 0: EQUB 22: EQUB 23: EQUB 254: EQUB 254 EQUB 0: EQUB 6: EQUB 7 ALIGN .playtest BL canieditit BL blindoff BL whitecurs: BL editf: BL editf: BL editf ADR R12,playmenu: BL domenu MOV R12,#200: LDR R1,sofst: MOV R3,#118 BL dobox BL colmy BL tweakbot ADR R11,playopts ADR R10,seldata BL radiobuts: BL platebords BL redocurs .loop ADR R11,playopts: ADR R10,seldata: BL testbuts BL getmenu: CMP R0,#3: BEQ letsgo: CMP R0,#15: BNE loop B editloop2 .sofst EQUD &1F7C .playopts EQUD 512: EQUD 880: EQUD 0: FNut("PLAYTEST OPTIONS",0): EQUB 255:ALIGN EQUD 318-ipo: EQUD 800: EQUD 0: FNut("ENGINE:",0):EQUB 255: ALIGN EQUD 448-ipo: EQUD 800: EQUD &100: FNut("SHRIMP",0):EQUB 255: ALIGN EQUD 448-ipo: EQUD 775: EQUD &101: FNut("SHRIMP+",0):EQUB 255: ALIGN EQUD 448-ipo: EQUD 750: EQUD &102: FNut("GREYHOUND",0):EQUB 255: ALIGN EQUD 448-ipo: EQUD 725: EQUD &103: FNut("SUPAPOWER",0):EQUB 255: ALIGN EQUD 318-ipo: EQUD 675: EQUD 0: FNut("BRAKES:",0):EQUB 255:ALIGN EQUD 448-ipo: EQUD 675: EQUD &804: FNut("CANTILEVER",0):EQUB 255:ALIGN EQUD 448-ipo: EQUD 650: EQUD &805: FNut("DISC",0):EQUB 255:ALIGN EQUD 448-ipo: EQUD 621: EQUD &9FF: FNut("AIR BRAKES",0):EQUB255:ALIGN EQUD 448-ipo: EQUD 596: EQUD &AFF: FNut("ANTIROLL",0):EQUB255:ALIGN EQUD 648: EQUD 800: EQUD 0:FNut("THRUSTERS:",0):EQUB 255: ALIGN EQUD 824: EQUD 800: EQUD &208: FNut("NUDGE",0): EQUB 255:ALIGN EQUD 824: EQUD 775: EQUD &209: FNut("HIGH POWER",0): EQUB 255:ALIGN EQUD 728: EQUD 725-5*4: EQUD 0:FNut("JETS:",0):EQUB 255: ALIGN EQUD 824: EQUD 725-5*4: EQUD &313:FNut("VTO",0):EQUB 255: ALIGN EQUD 824: EQUD 704-5*4: EQUD &314:FNut("TWIN VTO",0):EQUB 255: ALIGN EQUD 824: EQUD 650-8*4: EQUD &4FF:FNut("REVERSE",0):EQUB 255: ALIGN EQUD 824: EQUD 625-8*4: EQUD &5FF:FNut("CRUISE",0):EQUB 255: ALIGN EQUD 318: EQUD 544: EQUD &6FD: FNut("START AT CURSOR",0): EQUB 255:ALIGN EQUD 318:EQUD 519:EQUD &6FE: FNut("START AT BEGINNING",0):EQUB 255:ALIGN EQUD 318: EQUD 490: EQUD &7FF: FNut("DISPLAY ELAPSED TIME (NO LIMIT)",0) EQUB 255:ALIGN EQUD -1 .seldata EQUB 255: EQUB 2 EQUB 9: EQUB 20: EQUB 255: EQUB 0:.startopt EQUB &FE:.timetip EQUB 0 EQUB 5: EQUB 255:EQUB 0 ; 255 for antiroll ALIGN .outrad2 LDR R6,[R11]: MOVS R6,R6: LDMMIFD R13!,{R15} LDR R7,[R11,#8]: MOV R7,R7,LSR#8: CMP R7,R12: ADDNE R11,R11,#12 BEQ outradio:STMFD R13!,{R14} .loop LDRB R0,[R11],#1: CMP R0,#255: BEQ enditrb:B loop .outradio LDMIA R11!,{R6,R7}: MOVS R6,R6,ASR#2: LDMMIFD R13!,{R15} STMFD R13!,{R14} RSB R7,R7,#1024: BIC R7,R7,#3 ADD R7,R7,R7,LSL#2: ADD R7,R6,R7,LSL#4: BL stcar2 LDR R7,[R11],#4: MOVS R6,R7,LSR#8: BEQ nopo: LDRB R6,[R10,R6] AND R7,R7,#&FF: CMP R7,R6: MOVEQ R0,#68: MOVNE R0,#48 BL Dutext2 BL blankspc .nopo LDRB R0,[R11],#1: CMP R0,#255: BEQ enditrb BL Dutext2: B nopo .enditrb SUB R11,R11,#1: ORR R11,R11,#3: ADD R11,R11,#1 LDMFD R13!,{R15} : .radiobuts STMFD R13!,{R14}:.radioloop \ R11 to data \ R10 to sel data BL outradio B radioloop : .st11r EQUD 0 .lastdone EQUD 0 .testbuts SWI "OS_Mouse": TST R2,#5 .endbts MOVEQ R12,#0: STREQ R12,lastdone: MOVEQ R15,R14 STMFD R13!,{R14}: STR R11,st11r .loop LDMIA R11!,{R6,R7,R8}: CMN R6,#1: LDMEQFD R13!,{R14}:BEQ endbts SUB R6,R6,#5: CMP R0,R6 ADD R6,R6,#22: CMPGT R6,R0: BLT loopy3 CMP R1,R7: SUB R7,R7,#18: CMPLT R7,R1: BGT loopy3 AND R9,R8,#&FF LDR R6,lastdone: CMP R6,R8: LDMEQFD R13!,{R15} LDRB R6,[R10,R8,LSR#8] STR R8,lastdone CMP R9,#&FF: EOREQ R12,R6,#255 MOVNE R12,R9 STRB R12,[R10,R8,LSR#8] MOV R12,R8,LSR#8: LDR R11,st11r .loop2 BL outrad2: B loop2 .asctoint3 MOV R2,#66: B asctoint2 .loopy3 LDRB R6,[R11],#1: CMP R6,#255: BNE loopy3 SUB R11,R11,#1: ORR R11,R11,#3: ADD R11,R11,#1: B loop .addrpos EQUD 0 .normcolms EQUD &D12D2C01 .redcolms EQUD &15050401 .makeredcolms LDR R0,redcolms:.strcolms STR R0,colms: MOV R15,R14 .colms EQUD &D12D2C01 .makenormcolms LDR R0,normcolms: B strcolms .mapdac2 EQUD map .balhgt EQUD height .gchurt EQUD current .pointto EQUD 0 .lsregs EQUD 0 .lsregsA EQUD 0 .rslsr LDR R0,lsregsA: STR R0,lsregs: MOV R15,R14 .nolist1 MOV R12,#0: STRB R12,lsregs: B inputno2 .nolistA MOV R12,#0: STRB R12,lsregs: B inputnoA2 .nolistL MOV R12,#0: STRB R12,lsregs: MOV R15,R14 .clickonlist LDRB R3,lsregs: MOVS R3,R3: MOVEQ R15,R14 SWI "OS_Mouse": SUBS R0,R0,#196: MOVMI R15,R14 CMP R0,#948-196: MOVGT R15,R14 TST R2,#5: MOVEQ R15,R14 LDRB R2,lsregs+1: MOV R2,R2,LSL#2 RSB R0,R2,#712: CMP R1,R0 ADD R0,R2,#712: SUBGTS R1,R0,R1: MOVLT R15,R14 MVN R0,#0:.loop SUBS R1,R1,#24: ADD R0,R0,#1: BPL loop LDMFD R13!,{R15} .clickonlist2 STMFD R13!,{R14} ADR R0,fudgeit: STMFD R13!,{R0}: BL clickonlist LDMFD R13!,{R0}: LDMFD R13!,{R15} .screndagain EQUD &2000000 ; bodged .fudgeit STMFD R13!,{R0}: BL untweak: LDMFD R13!,{R0} LDMFD R13!,{R1,R2,R3,R4,R5}: B anothernum .listscrns LDR R0,gchurt: LDR R0,[R0]:.inlists STR R0,pointto STMFD R13!,{R14} MOV R5,#&20000000: LDR R4,balhgt: STR R5,[R4] ; not a screen refer. BL getR0at: EQUD numofscrs: STRB R0,lsregs: ADD R4,R0,R0,LSL#1 ADD R4,R4,#3 MOV R3,R4,LSL#1: MOV R12,#192 STRB R4,lsregs+1 ADD R4,R4,R4,LSL#2: MOV R4,R4,LSL#6: RSB R1,R4,#&6200 SUB R1,R1,#&50 ADD R4,R1,#&510: STR R4,addrpos STR R0,howmany BL dobox BL tweakbot LDR R10,howmany BEQ notoshow LDR R0,addrpos MOV R3,#0:.loop2 BL colmy LDR R0,pointto: CMP R3,R0: MOVEQ R0,#60: MOVNE R0,#66 BL Dutext2 MVN R0,#0: ADD R6,R3,#1:.loop SUBS R6,R6,#10: ADD R0,R0,#1: BGE loop CMP R0,#0: MOVEQ R0,#66: BL Dutext2 ADD R0,R6,#10: BL Dutext2: MOV R0,#46: BL Dutext2 LDR R0,mapdac2: MOV R1,R3: BL getstart MOV R12,R0:MOV R9,#40:.loop LDRB R1,[R12],#1: CMP R1,#32: SUBLT R12,R12,#1 BL asctoint3: BL Dutext2 SUBS R9,R9,#1: BNE loop ADD R3,R3,#1 LDR R0,addrpos: ADD R0,R0,#&780: STR R0,addrpos SUBS R10,R10,#1: BNE loop2 .notoshow BL untweak LDR R0,lsregs: STR R0,lsregsA LDMFD R13!,{R15} .colmy LDR R1,colms: B stcar : .howmany EQUD 0 .their EQUD height .bal10 EQUD enableall .editcode STMFD R13!,{R14} BL musiccontrol2 BL curveoff BL stopstars MOV R0,#0: BL stbank2: BL videoCl LDR R6,bal10: MOV R5,#1: STRB R5,[R6] BL noangeldust LDR R0,tbalgo: LDR R1,screndagain: STR R1,[R0] LDR R0,their: STR R1,[R0] BL nouge MVN R0,#0: BL wrcursc2 LDR R0,tomap: MOV R1,#0: BL getstart LDR R1,tmapst2: STR R0,[R1]: ADD R0,R0,#64 LDR R1,d2ptr: STR R0,[R1]: BL initmap: BL minus1copy MOV R0,#0: BL wrcursc MOV R2,#0: BL getxyzmap BL newstars: MOV R1,#1: BL irest: BL resettime BL rstcurs: MOV R1,#0 BL getundercurs BL clgot: MOV R0,#0: BL getj LDR R0,tindecks: STR R1,[R0]:BL editf STR R13,stackpreserve BL savebdjnk BL pendnews BL chkallow1 .aceditloop2 BL ackesc .editloop2 LDR R13,stackpreserve BL ensureTAF BL encryptcodes BL allanimate: BL initwd BL bottlestopper MOV R0,#0: BL streflsh BL resetspd BL redocurs: BL editf: BL editf: BL editf: BL nouge LDR R0,nspend: EORS R1,R0,#1: STREQ R1,nspend: BEQ newscrnA BL rdsoundflag: BL ensureqm: BL musiccontrol2 ADR R12,menudata BL domenu .loop LDR R4,tomustbe96 SUB R4,R4,#4: LDR R4,[R4,#-240]: LDR R3,almgm EOR R4,R4,R4,ASR#1: EOR R4,R4,R4,LSL#2 BIC R4,R4,#&FF<<24: BIC R4,R4,#&FF<<16 MOV R14,R15: ADD R15,R4,R3 ; BL getmenu CMP R0,#15: BEQ loop BL scanquit: BEQ loop .editloop BL ackesc: BL clbuf ADR R10,mnkeys: B ckekeyz .tomustbe96 EQUD mustbe96+244 .almgm EQUD getmenu-272 .continemenu BL swallow LDR R4,tomustbe96 SUB R4,R4,#4: LDR R4,[R4,#-240]: LDR R3,almgm EOR R4,R4,R4,ASR#1: EOR R4,R4,R4,LSL#2 BIC R4,R4,#&FF<<24: BIC R4,R4,#&FF<<16 MOV R14,R15: ADD R15,R4,R3 ; BL getmenu ADD R15,R15,R0,LSL#2 B editloop B editlevel B stats B loadscrn B savescrn B newscrn B playtest B editloop B mayblankhis B editzone: B znestats B loadzne: B savezne B swopqm:B editloop:B editloop ; fall into endeditor .endeditor BL archivecur CMP R0,#1: BEQ cantarchive BL musiccontrol LDMFD R13!,{R15} .pendnews MOV R0,#1: STR R0,nspend: MOV R15,R14 .stackpreserve EQUD 0 .nspend EQUD 0 .mnkeys EQUD -58: EQUD viewfwd EQUD -42: EQUD viewbwd EQUD -17: EQUD endeditor EQUD 0: EQUD continemenu .tmapst2 EQUD mapstt:.d2ptr EQUD dptr .tomap EQUD map .origpnt EQUD mapcopy+&40 .tbalgo EQUD ballgo .tommpnt EQUD mapptr:.tindecks EQUD index .dodo EQUD &D0D0D0D0 .to2bso EQUD base2 .bot2sc EQUD scrnbot .rstmpt LDR R0,tommpnt: LDR R1,origpnt: STR R1,[R0]: B nomovedps .menudata FNut("EDIT LEVEL",0): EQUB &FF FNut("LEVEL STATS",0): EQUB &FF FNut("LOAD LEVEL",0): EQUB &FF FNut("SAVE LEVEL",0): EQUB &FF FNut("SELECT LEVEL",0): EQUB &FF FNut("PLAY TEST",0): EQUB &FF: EQUB &FF FNut("BLANK HISCORES",0): EQUB &FF FNut("EDIT ZONE",0): EQUB &FF FNut("ZONE STATS",0): EQUB &FF FNut("LOAD ZONE",0): EQUB &FF FNut("SAVE ZONE",0): EQUB &FF .quietmusic FNut("QUIET",0): EQUB &FF EQUB &FF: EQUB &FF FNut("QUIT",0): EQUB &FF .quiettext FNut("MUSICQUIET",0) ALIGN .swopqm BL rdsoundflag: EOR R0,R0,#&80: BL wrsoundflag: B editloop2 .ensureqm ANDS R0,R0,#&80: SUBNE R0,R0,#&80-5 ; music or not ADR R1,quietmusic: ADR R2,quiettext: ADD R2,R2,R0 MOV R0,#4:.loop LDRB R3,[R2],#1: STRB R3,[R1],#1 SUBS R0,R0,#1: BPL loop MOV R15,R14 .quitmenu EQUD -1:EQUD-1:EQUD-1: EQUB &FF:EQUB&FF:EQUB&FF FNut("QUIT",0): EQUB &FF ALIGN .tcargm EQUD carriage .crp EQUD 0:.tabpnt EQUD 0 .fierce EQUD &D02F2E2C .lightbg EQUD &D12F2E2C .redcols EQUD &D1232120 .cols EQUD &03020100: EQUD &2F2E2D2C:EQUB &D0:.colend ALIGN .uprompt STMFD R13!,{R14} LDR R2,tcargm: MOV R1,#&F00: ADD R1,R1,#8: STR R1,[R2]:.loop LDRB R0,[R10],#1: CMP R0,#&FF: BLNE Dutext2 LDRB R0,[R10,#-1]: CMP R0,#&FF: BNE loop: BL copybnks LDMFD R13!,{R15} .lgy LDR R1,fierce: B stcol .clmenu ADR R12,quitmenu .domenu \ R12 points to menudata LDR R1,to2bso: MOV R2,#&3200: LDR R1,[R1] ADR R10,cols:ADR R8,colend .loop LDRB R3,[R10],#1: ORR R3,R3,R3,LSL#8: ORR R3,R3,R3,LSL#16 MOV R9,#&140:.loop2 STR R3,[R1],#4: SUBS R9,R9,#4: BNE loop2 CMP R10,R8: BNE loop .loop STR R3,[R1],#4: SUBS R2,R2,#4: BNE loop .xtramenus LDR R1,to2bso: LDR R1,[R1] LDR R6,bot2sc: STR R1,[R6] MOV R1,#&F00: ADD R1,R1,#8: LDR R2,tcargm: STR R1,[R2]: STR R1,crp LDR R10,fierce: STR R10,[R2,#colmapm-carriage] STR R1,tabpnt MOV R10,#4 .loop2 MOV R11,#4 .loop LDRB R0,[R12],#1 STMFD R13!,{R0,R1,R2,R10,R11,R12,R14} CMP R0,#&FF: BLNE Dutext2 LDMFD R13!,{R0,R1,R2,R10,R11,R12,R14} CMP R0,#&FF: BNE loop LDR R1,crp: ADD R1,R1,#&B40: STR R1,crp: STR R1,[R2] SUBS R11,R11,#1: BNE loop LDR R1,tabpnt: ADD R1,R1,#&60: STR R1,tabpnt: STR R1,crp: STR R1,[R2] SUBS R10,R10,#1: BNE loop2 .copybnks LDR R1,to2bso: LDR R1,[R1]: ADD R4,R1,#&14000 ADD R5,R4,#&14000:.zapbnks MOV R2,#&3C00:ADD R2,R2,#&140:.loop LDMIA R1!,{R6,R7,R8,R9}: STMIA R4!,{R6,R7,R8,R9} STMIA R5!,{R6,R7,R8,R9}: SUBS R2,R2,#16: BNE loop MOV R15,R14 .copybnks2 LDR R1,scsbd: ADD R4,R1,#&14000: LDR R2,bodgescrfin CMP R4,R2: SUBGE R4,R4,#&3C000 ADD R5,R4,#&14000: CMP R5,R2: SUBGE R5,R5,#&3C000 B zapbnks .scsbd EQUD scrnbot .bodgescrfin EQUD &2000000 ; bodged .getmenu MOV R0,#&81: MOV R2,#&FF MOV R1,#256-113: SWI "OS_Byte": CMP R1,#&FF MOVEQ R0,#15: MOVEQ R15,R14 SWI "OS_Mouse" LDR R4,keydown: MOVS R4,R4: STR R2,keydown MOVNE R2,#0 CMP R0,#384: MOVLT R3,#0: MOVGE R3,#1 CMP R0,#768: MOVGE R3,#2 CMP R0,#1152: MOVGE R3,#3 CMP R1,#156: MVNGT R4,#0: MOVLT R4,#0 CMP R1,#120: MOVLT R4,#1 CMP R1,#84: MOVLT R4,#2 CMP R1,#48: MOVLT R4,#3 CMP R1,#12: MVNLT R4,#0 MOVS R4,R4: ADDPL R0,R4,R3,LSL#2: MVNMI R0,#0 TST R2,#5: MVNEQ R0,#0 MOV R15,R14 .keydown EQUD 0 .trkpanel STMFD R13!,{R14} BL editmenu ADR R12,trk3d: BL doborders BL disptrkmbuts BL showspr BL trkstuff BL copybnks LDMFD R13!,{R15} .trk3d EQUD &10B80+88+&140*2: EQUD 79: EQUD 35: EQUD 0 EQUD &10B80+4+&140*30: EQUD 53: EQUD 6: EQUD 0 EQUD -1 .tmpspr EQUD mapspr .bknms EQUD blocknames .out9hex MOV R1,R14 MOV R0,R9,LSR#4: CMP R0,#10: ADDGE R0,R0,#4: BL Dutext2 AND R0,R9,#15: CMP R0,#10: ADDGE R0,R0,#4: BL Dutext2: MOV R15,R1 .tuttut LDRB R1,[R10],#1 .tuttut2 MOV R1,R9 .showspr STMFD R13!,{R14} LDR R1,to2bso: LDR R12,[R1] LDR R6,bot2sc: STR R12,[R6] LDR R12,undercurs: BL shownoch MOV R7,#&1900: ADD R0,R7,#8: LDR R1,fierce: BL stcar MOV R0,#16: BL Dutext2 MOV R0,#21: BL Dutext2 MOV R0,#10: BL Dutext2 LDR R9,currspr: LDR R8,currch CMP R9,#38: CMPNE R9,#39: MOVNE R8,#0 ORR R9,R8,R9,LSR#8 BL out9hex LDR R1,to2bso: LDR R12,[R1] ADD R11,R12,#&F20: LDR R9,currspr: CMP R9,#&FF00: BLLT trans9 LDR R10,tmpspr: ADD R10,R10,R9,LSL#8 LDR R9,currspr CMP R9,#&FF00: LDRGE R1,tuttut2: LDRLT R1,tuttut STR R1,pokeit MOV R8,#16:.loop MOV R0,#15:.loop2 .pokeit LDRB R1,[R10],#1: STRB R1,[R11,R0]: SUBS R0,R0,#1: BPL loop2 ADD R11,R11,#&140: SUBS R8,R8,#1: BNE loop MOV R0,#&1040: ADD R7,R0,#8: BL stcar2 AND R9,R9,#&FF BL out9hex BL blankspc: MOV R0,#73: BL Dutext2: BL Dutext2: BL Dutext2 ADD R0,R11,#&C80: ADD R0,R0,#8: LDR R9,currspr LDR R2,bknms: MOVS R9,R9: BEQ firstsp .loop LDRB R12,[R2],#1: CMP R12,#&FF: BNE loop: SUBS R9,R9,#1 LDRB R12,[R2]: CMPNE R12,#&FF: BNE loop .firstsp ADR R12,xorot: ADR R11,xorot2end LDR R10,sssssx: MOV R9,R10 STMDB R11!,{R9,R10}: STMDB R11!,{R9} LDRB R7,[R2]: CMP R7,#&FF: ADREQ R2,blanktile .loop LDRB R7,[R2],#1: CMP R7,#&FF STRNEB R7,[R11],#1: BNE loop BL xtramenus LDMFD R13!,{R15} EQUB 0:.xorot EQUW -1: EQUB -1:FNut(" ",0):.xorot2end EQUD-1:EQUD -1: EQUD -1:EQUD -1 .blanktile FNut("SOLID COLOUR",0): EQUB -1:ALIGN .sssssx EQUD &42424242 .d1d1 EQUD &D1D1D1D1 .currspr EQUD 97 .currch EQUD 1 .upspr LDR R0,currspr: CMP R0,#119: MVNEQ R0,#0 ADD R0,R0,#1:STRB R0,currspr: B trkloop2 .r0isspr STR R0,currspr: B trkloop2 .dwnspr LDR R0,currspr: SUBS R0,R0,#1: MOVMI R0,#119 STRB R0,currspr: B trkloop2 .setcarg LDR R1,tcargm: STR R0,[R1]: MOV R15,R14 .editlevel BL canieditit B gotojob .edittrk BL getundercurs BL allanimate: BL initwd .trkloop2 BL trkpanel BL resetspd .trkloop BL copyfirstrow BL trkstuff BL testkeys: CMP R1,#27: BEQ editloop2 SUBS R1,R1,#48: BMI nochch: CMP R1,#10: BGE nochch STRLTB R1,currch: BL showspr: BL copybnks:.nochch BL rstce .cketkeys ADR R10,etkeys \ fall into ckekeyz .ckekeyz MOV R1,#256-1:BL scanne: MOVEQ R1,#4: MOVNE R1,#1: STR R1,shifted MOV R5,R10:.loop LDR R1,[R5],#8: MOVS R1,R1: LDREQ R15,[R5,#-4] BL scanne: LDR R2,[R5,#-8] BICNE R2,R2,#&FF00: STRNE R2,[R5,#-8]: BNE loop TST R2,#&FF00: ORR R2,R2,#&FF00: STR R2,[R5,#-8] LDREQ R15,[R5,#-4]: B loop : .getundercurs LDR R5,curs: LDR R6,[R5]: STR R6,undercurs MOV R15,R14 : .flsh EQUD 0 .storespd2 STR R0,tspder: LDMFD R13!,{R15} .redocurs MOV R0,#0: STRB R0,flsh .redocurs2 LDR R5,curs: LDR R6,undercurs: STRB R6,[R5] MOV R6,R6,ASR#8: STRB R6,[R5,#1] STMFD R13!,{R0-R12,R14}: BL copyfirstrow LDMFD R13!,{R0-R12,R15} .flashing2 LDR R0,flsh: LDR R6,tspder: ADDS R0,R0,R6,LSL#29 EORCS R0,R0,#1: STR R0,flsh: TST R0,#&FF: B controllflsh : .flashing LDR R0,flsh: LDR R6,tspder: ADDS R0,R0,R6,LSL#29 EORCS R0,R0,#1: STR R0,flsh: TST R0,#&FF: BEQ redocurs2 .whitecurs MOV R0,#1: STRB R0,flsh LDR R5,curs: MOV R7,#&FF: STRB R7,[R5]: STRB R7,[R5,#1] MOV R15,R14 .get10spd LDR R10,tspder: MOV R15,R14 .tspder EQUD 0 .curs EQUD mapcopy+&40+48+16 .becurs EQUD mapcopy+&40+48+16 .rstcurs LDR R0,becurs: STR R0,curs LDR R0,xpos2: STR R0,xpos: B rstmpt .undercurs EQUD 0 : .putabs10 LDR R9,xpos: ADD R9,R10,R9: STR R9,curs: MOV R15,R14 .getabs10s LDR R11,shifted .getabs10 LDR R10,curs: LDR R9,xpos: SUB R10,R10,R9: MOV R15,R14 .wrcurs LDR R9,xpos: ADD R11,R11,R9: STR R11,curs: MOV R15,R14 .longer BL getabs10s: LDR R5,[R10,#&2C]: ADD R5,R5,R11,LSL#21 CMP R5,#500<<21: MOVGT R5,#500<<21: SUBGE R5,R5,#1<<21 .strlencont STR R5,[R10,#&2C]: B continedit .shorter BL getabs10s: LDR R5,[R10,#&2C]: SUB R5,R5,R11,LSL#21 CMP R5,#&600000: MOVLT R5,#&600000: B strlencont .curvlft BL getabs10s: LDR R5,[R10,#&20]: SUB R5,R5,R11,LSL#6 CMN R5,#18<<6: MVNLT R5,#17<<6 .strcurvcont STR R5,[R10,#&20]: B continedit .curvrgt BL getabs10s: LDR R5,[R10,#&20]: ADD R5,R5,R11,LSL#6 CMP R5,#18<<6: MOVGT R5,#18<<6 B strcurvcont .gradup BL getabs10s: LDR R5,[R10,#&28]: ADD R5,R5,R11 CMP R5,#10: MOVGT R5,#10 .projo STR R5,[R10,#&28]: BL projline: B continedit .graddn BL getabs10s: LDR R5,[R10,#&28]: SUB R5,R5,R11 CMN R5,#9: MVNLT R5,#8 B projo : .etkeys EQUD -24: EQUD shorter EQUD -94: EQUD longer EQUD -113: EQUD editloop2 EQUD -17: EQUD editloop2 EQUD -54: EQUD upspr EQUD -51: EQUD dwnspr .retmi EQUD -74: EQUD placespr EQUD -122: EQUD curslft EQUD -26: EQUD cursrgt EQUD -58: EQUD cursfwd EQUD -42: EQUD cursbwd EQUD -98: EQUD curvlft EQUD -67: EQUD curvrgt EQUD -80: EQUD gradup EQUD -105: EQUD graddn EQUD -56: EQUD pick EQUD -62: EQUD insline EQUD -106: EQUD cpyline EQUD -90: EQUD delline EQUD 0:.modifet EQUD continedit \ no key pressed branch .shifted EQUD 0 .ackret LDR R0,retmi: ORR R0,R0,#&FF00: STR R0,retmi: MOV R15,R14 EQUS "Mathematicians talk hyperbolics":EQUB 0:ALIGN : .getshifted LDR R0,shifted: B gxyzptr .R9shift LDR R9,shifted: MOV R15,R14 .getuh STMFD R13!,{R14} BL getundercurs: BL whitecurs LDMFD R13!,{R15} .continedit BL testtrkbuts LDR R12,undercurs: BL shownoch BL editf LDR R10,currspr BL getR0at: EQUD scrntop: ADD R1,R0,#&140: BL colourbank LDR R9,currspr BL getR0at: EQUD scrntop: ADD R1,R0,#&240: BL mapbank .chktrkmse SWI "OS_Mouse": TST R2,#5: BEQ nocolsel CMP R1,#&2F8: BLT nocolsel: RSBS R3,R1,#&3F8: BMI nocolsel BIC R3,R3,#15 CMP R0,#255: BGT nosold ADD R3,R3,R0,ASR#4 ORR R3,R3,#&FF00: B placerec .nosold CMP R0,#1024: BLT nocolsel SUB R4,R0,#1024: ADD R3,R3,R4,ASR#4: CMP R3,#120: BLT placerec .nocolsel BL readmse: CMP R0,#3 BLE jovial: CMP R0,#6: BLE directip:.jovial CMP R0,#7: BEQ choosespr BL nouge BL flashing B editcontrol : .xpos EQUD 16:.xpos2 EQUD 16 .cursrgt LDR R0,xpos: CMP R0,#30: BEQ continedit: ADD R0,R0,#2: STR R0,xpos LDR R10,curs BL redocurs: ADD R10,R10,#2: STR R10,curs: BL getuh B continedit : .curslft LDR R0,xpos: SUBS R0,R0,#2: BMI continedit: STR R0,xpos LDR R10,curs BL redocurs: SUB R10,R10,#2: STR R10,curs: BL getuh B continedit : .pick LDR R0,undercurs:BIC R0,R0,#&FF000000: BIC R0,R0,#&FF0000 STMFD R13!,{R0} CMP R0,#&FF00: BLLT btrans0 LDMFD R13!,{R12}: ANDS R12,R12,#&FF00 CMPNE R12,#&FF00: BICNE R0,R0,#&FF00 MOVNE R12,R12,LSR#8: STRNE R12,currch STR R0,currspr: BL showspr: BL copybnks: B continedit .cursfwd BL fowar: B continedit .viewfwd BL fowar:.backit BL resetspd: BL redocurs: BL editf: BL nouge BL editf: B continemenu .fowar STMFD R13!,{R14} BL redocurs: LDR R10,curs: LDR R9,xpos: SUB R8,R10,R9 ADD R10,R10,#48: LDR R11,[R8,#&5C] MOVS R11,R11: LDMEQFD R13!,{R15}: STRNE R10,curs BL getuh BL getabs10: SUB R10,R10,#48: MOVS R11,R11: MVN R0,#0: BLNE moveplans B ensuresee : .cursbwd BL backwar: B continedit .viewbwd BL backwar: B backit .backwar STMFD R13!,{R14} LDR R10,curs: LDR R11,nob4: SUB R10,R10,#48: CMP R10,R11 LDMLTFD R13!,{R15} BL redocurs:.inyobk STR R10,curs BL getuh BL getabs10: MOV R0,#1: BL moveplans .ensuresee LDR R10,curs: LDR R9,nob4: CMP R10,R9 BL getabs10: LDRLT R0,[R10,#&2C] SUBLT R0,R0,#&2C0000 MOVGE R0,#&10000: SUBGE R10,R10,#48 LDR R7,tomper STR R10,[R7]: STR R0,[R7,#index-mapptr] LDMFD R13!,{R15} .yobk LDR R10,curs: LDR R11,nob4: SUB R10,R10,#48: CMP R10,R11 LDMLTFD R13!,{R15}: B inyobk : .nob4 EQUD mapcopy+&70 : .ocurs LDR R10,curs: MOV R15,R14 .placerec STR R3,currspr BL trkpanel .placespr LDR R10,curs: LDR R11,currspr: LDR R8,currch CMP R11,#&FF00: BLLT trans11 CMP R11,#105: CMPNE R11,#98: MOVNE R8,#0: ORR R12,R8,R11,LSR#8 STRB R11,[R10]: STRB R12,[R10,#1] BL getundercurs: B continedit .tomper EQUD mapptr : .mnplans2 MOV R7,#&700000: ADR R15,mnplans .moveplans \ R0 is dir \ R10 is mappos LDR R7,[R10,#&2C]:.mnplans LDR R5,tonuge LDR R6,[R10,#&20]: MOV R7,R7,ASR#14: MUL R7,R6,R7: MUL R7,R0,R7 STR R7,[R5]: LDR R6,movedps: ADD R6,R6,R7,ASR#8: STR R6,movedps MOV R15,R14 .mnplansp LDR R5,tonuge2 LDR R6,[R10,#&20]: MOV R7,R7,ASR#14: MUL R7,R6,R7: MUL R7,R0,R7 LDR R6,[R5]: ADD R6,R7,R6: STR R6,[R5]: LDR R5,tonuge LDR R6,[R5]: ADD R6,R7,R6: STR R6,[R5]: MOV R15,R14 : .tonuge EQUD ax .tonuge2 EQUD starsadj2 .movedps EQUD 0 .nouge MOV R0,#0: LDR R5,tonuge: STR R0,[R5]: MOV R15,R14 .nomovedps MOV R0,#0: STR R0,movedps: MOV R15,R14 .gmovedps LDR R8,movedps: MOV R15,R14 : .loadscrn BL canieditit BL clmenu ADR R10,lsnon: LDR R5,loady: STR R5,[R10] BL upromls BL inputfsp LDRB R0,inputstr2: CMP R0,#13: BEQ editloop2 BL intodir BL nofsmes MOV R0,#5: ADR R1,inputstr2: SWI "XOS_File" LDR R3,msk5: LDR R4,i666: AND R2,R2,R3: CMP R2,R4: BEQ obsolete MOV R0,#&FF: ADR R1,inputstr2: LDR R2,tedtcpy ADD R2,R2,#&40: MOV R3,#0: SWI "XOS_File" BVS loaderror LDR R0,tmapc0: LDR R1,tedtcpy:ADD R1,R1,#&40: MOV R10,#&1000 BL decompress BL minus1copy .endload BL rstcurs BL outtadir BL getundercurs B editloop2 .obsolete MOV R0,#&FF: ADR R1,inputstr2: LDR R2,tmapc0 ADD R2,R2,#&40: MOV R3,#0: SWI "XOS_File" BVS loaderror ADR R0,messo-4: BL outerror B endload : .messo EQUS "Loaded obsolete non-compressed file" EQUB &00:ALIGN .tmapc0 EQUD mapcopy .tedtcpy EQUD editcopy .tobwrk EQUD bigwaste .i666 EQUD &66600:.msk5 EQUD &FFF00 .savescrn BL clmenu ADR R10,lsnon: LDR R5,savey: STR R5,[R10] BL upromls BL inputfsp LDRB R0,inputstr2: CMP R0,#13: BEQ editloop2 BL nofsmes BL intodir LDR R0,tmapc0 LDR R1,tobwrk: LDR R2,tedtcpy: BL compressor ADR R1,inputstr2 MOV R4,R2: MOV R5,R3: MOV R0,#10: MOV R2,#&FF0: ORR R2,R2,#13 SWI "XOS_File" BL outtadir BVS saveerror B editloop2 .saveerror BL outerror: B savescrn .loaderror BL outtadir BL outerror: B loadscrn .clio EQUS "Dir .Courses":EQUB 13 .clio2 EQUS "Back": EQUB 13:ALIGN .lsnon FNut("LOAD RAW MAP (NO OBJECTS OR BACKDROP):",0): EQUB &FF: ALIGN .loady FNut("LOAD",0) .savey FNut("SAVE",0) .intodir ADR R0,clio: SWI "XOS_CLI": MOV R15,R14 .outtadir STMFD R13!,{R0,R14}:ADR R0,clio2: SWI "XOS_CLI": LDMFD R13!,{R0,R15}^ .retff MOV R0,#&7E: SWI "OS_Byte": MVN R0,#0: LDMFD R13!,{R15} .handlmen EQUD 0 .nokpd BL clickonlist: BL getmenu: CMP R0,#15: BEQ retff LDR R15,handlmen .inputno B nolist1 .inputnoA B nolistA .inputnoA2 ADR R0,conting .inputno2 STMFD R13!,{R14} STR R0,handlmen BL clbuf MVN R12,#0 .conting LDR R4,tcargm: MOV R6,#&1E00: ADD R6,R6,#&10: STR R6,[R4] MOVS R4,R12: BLT zilchow MOV R0,#0:.loop SUBS R4,R4,#10: ADDPL R0,R0,#1: BPL loop ADD R5,R4,#10 MOVS R11,R0: ADDEQ R0,R4,#10: MOVEQ R4,#58: BL Dutext2 ADD R0,R4,#10: BL Dutext2 .inpit STMFD R13!,{R5}: BL copybnks: LDMFD R13!,{R5} BL testkeys CMP R1,#27: BEQ retff CMP R1,#&FF: BEQ nokpd CMP R1,#127: CMPNE R1,#8: MOVEQ R12,R11 CMPEQ R12,#0: MVNEQ R12,#0 CMP R1,#13:.crinuo MOVEQ R0,R12: LDMEQFD R13!,{R15} CMP R12,#10: BGE conting CMP R1,#58: BGE conting: SUBS R1,R1,#48: BMI conting ADD R12,R5,R5,LSL#2: ADD R12,R1,R12,LSL#1 B conting .zilchow MOV R0,#68: BL Dutext2 MOV R0,#13: BL Dutext2: MOV R5,#0 STMFD R13!,{R5}: BL copybnks: LDMFD R13!,{R5} BL testkeys CMP R1,#27: BEQ retff CMP R1,#&FF: BEQ nokpd CMP R1,#13: BEQ crinuo CMP R1,#58: BGE conting: SUBS R1,R1,#48: MOVPL R12,R1 B conting .inputfsp STMFD R13!,{R14} BL clbuf ADR R11,inputstr: MOV R2,#13: MOV R1,#20:.loop STRB R2,[R11],#1: SUBS R1,R1,#1: BNE loop MOV R3,#0:.loop2 LDR R4,tcargm: MOV R6,#&1E00: ADD R6,R6,#&10: STR R6,[R4] ADR R11,inputstr: MOV R5,#68: STRB R5,[R11,R3] ADR R12,inputstr2 MOV R5,#20:.loop LDRB R0,[R11],#1: BL Dutext2 SUBS R5,R5,#1: BNE loop STMFD R13!,{R0-R12} BL copybnks LDMFD R13!,{R0-R12} BL testkeys ADR R11,inputstr CMP R1,#27: BEQ quitnow CMP R1,#&FF: BEQ nokprsd CMP R1,#13: BEQ crprsd CMP R1,#127: CMPNE R1,#8: BEQ delprsd CMP R3,#19: BEQ loop2 STRB R1,[R12,R3] MOV R2,#&FF CMP R1,#47: BLE nonumb: CMP R1,#58 SUBLT R2,R1,#48:.nonumb CMP R1,#ASC("."): MOVEQ R2,#46 CMP R1,#ASC(":"): MOVEQ R2,#10 CMP R1,#ASC("$"): MOVEQ R2,#69 CMP R1,#ASC("*"): MOVEQ R2,#78 BIC R5,R1,#32: CMP R5,#65: BLT nolet2: CMP R5,#91: SUBLE R2,R5,#51 .nolet2 STRB R2,[R11,R3]: CMP R2,#&FF: ADDNE R3,R3,#1 B loop2 .inputstr FNut(" ",0):ALIGN .inputstr2 EQUS " ":ALIGN .crprsd STRB R1,[R12,R3]: LDMFD R13!,{R15} .delprsd MOVS R3,R3: BEQ loop2 MOV R1,#13: STRB R1,[R11,R3]: SUB R3,R3,#1 B loop2 .nokprsd STMFD R13!,{R1-R12}:BL getmenu LDMFD R13!,{R1-R12}: CMP R0,#15: BNE loop2 .quitnow MOV R3,#&7E: SWI "XOS_Byte": MOV R3,#0: MOV R1,#13: B crprsd .outerror \ R0 to ASCII string STMFD R13!,{R14} ADD R12,R0,#4 MOV R1,#&2A00: ADD R1,R1,#&90: LDR R4,tcargm: STR R1,[R4] .loop LDRB R0,[R12],#1 MOVS R1,R0: BEQ ender BL asctoint BL Dutext2 B loop .ender BL copybnks: BL testkeys1 LDMFD R13!,{R15} .asctoint MOV R2,#&FF: .asctoint2 CMP R1,#47: BLE nonumb2 CMP R1,#58:SUBLT R2,R1,#48:.nonumb2 CMP R1,#ASC("."): MOVEQ R2,#46 CMP R1,#ASC(":"): MOVEQ R2,#10 CMP R1,#ASC("$"): MOVEQ R2,#69 CMP R1,#ASC("?"): MOVEQ R2,#47 CMP R1,#ASC("'"): MOVEQ R2,#43 CMP R1,#ASC("("): MOVEQ R2,#72 CMP R1,#ASC(")"): MOVEQ R2,#71 CMP R1,#ASC("!"): MOVEQ R2,#70 CMP R1,#ASC("-"): MOVEQ R2,#13 CMP R1,#ASC(","): MOVEQ R2,#45 CMP R1,#ASC("*"): MOVEQ R2,#78 CMP R1,#34: MOVEQ R2,#44 CMP R1,#ASC("#"): MOVEQ R2,#58 CMP R1,#32: MOVLE R2,#66 BIC R5,R1,#32: CMP R5,#65: BLT nolet: CMP R5,#91: SUBLE R2,R5,#51 .nolet MOV R0,R2: MOV R15,R14 .superencoder \ R0 to data \ R1 is info word \ R2 is end+1 \ on exit R0 is encoding checksum \ R1 is decoding checksum STMFD R13!,{R14}: STR R13,go13r MOV R13,#0: MOV R14,R13 ADR R12,superencoder AND R3,R1,#&3F: AND R4,R1,#&3F00: MOV R4,R4,ASR#8 AND R5,R1,#&70000: AND R6,R1,#&700000 MOV R7,#61: MOV R8,#59 .loop ADD R3,R3,R5,LSR#16: CMP R3,R7: SUBGT R3,R3,R7 ADD R4,R4,R6,LSR#20: CMP R4,R8: SUBGT R4,R4,R8 EOR R7,R7,R8: ADD R8,R8,#1: AND R8,R8,#&3F LDRB R10,[R12,R3]: LDRB R11,[R12,R4] LDRB R9,[R0],#1: ADD R14,R14,R9 EOR R9,R9,R10: EOR R9,R9,R11: STRB R9,[R0,#-1] ADD R13,R13,R9 CMP R0,R2: BNE loop MOV R0,R14: MOV R1,R13: LDR R13,go13r LDMFD R13!,{R15} .go13r EQUD 0 .newscrnno FNut("SELECT SCREEN TO EDIT: ",0): EQUB &FF:ALIGN .tmapdac EQUD map .tmapc1 EQUD mapcopy .tobwrk2 EQUD bigwaste:.tedtcpy2 EQUD editcopy .redoR0 STMFD R13!,{R0} BL clmenu: BL lgy: ADR R10,newscrnno: BL uprompt LDMFD R13!,{R0}: B tryag .newscrn MOV R1,#1:.newscrnA STR R1,nolow BL r0isokallow:STR R0,noreqestr: BL clmenu BL listscrns: BL lgy BL biglsz:ADR R10,newscrnno: BL upromls: BL smllsz BL inputnoA2:.tryag STMFD R13!,{R0} CMP R0,#10: BLLT bckspc: BL Dutext66: BL Dutext2 LDMFD R13!,{R0}:.anothernum SUB R0,R0,#1 CMP R0,#0: BLT editloop2: STR R0,changing LDR R1,numofscrs: CMP R0,R1: BGE editloop2 LDR R1,current: CMP R1,R0: LDREQB R5,noreqestr CMPEQ R5,#0: LDREQB R5,nolow: CMPEQ R5,#1: BEQ requestor BL reqecode BL encryptcodes .okdoit BL allow1:.okdoitH LDR R1,changing: STR R1,current: LDR R0,tmapdac BL getstart: MOV R1,R0: BL stmapst: LDR R0,tmapc1 MOV R10,#&1000: BL decompress BL savebdjnk BL rstcurs: LDR R0,current: BL getj LDR R2,current: BL getxyzmap BL getundercurs: B editloop2 .noreqestr EQUD 0 \ would be one if not request .nolow EQUD 0 \ zero means no request .okdoit2 BL rstrbdjunk: B okdoit .okdoit3 STR R1,changing: ADR R15,okdoitH .current EQUD 0:.changing EQUD 0 .wrcursc STR R0,current: MOV R15,R14 .rdcursc LDRB R0,current: MOV R15,R14 : .thatsall EQUS "Thatolks" .archivecur ; Important; R0=1 means not enough memory STMFD R13!,{R14} BL redocurs LDR R0,tmapc1: LDR R1,tobwrk2: LDR R2,tedtcpy2: BL compressor LDR R0,tmapdac LDR R1,current: BL getstart MOV R4,R0: MOV R1,#1: BL getstart \ R2 start new \ R3 end new \ R4 archive addr \ R0 end archive LDR R7,thatsall: LDR R8,thatsall+4:MOV R10,R0:.loop LDR R6,[R10],#4: CMP R6,R7: BNE loop: LDR R9,[R10,#8] CMP R9,R8: BNE loop: ADD R10,R10,#32 SUB R7,R3,R2: ADD R7,R7,R4: SUB R12,R7,R0: ADD R11,R12,R10 LDR R12,toendmapt: CMP R11,R12: MOVGE R0,#1: LDMGEFD R13!,{R15} SUBS R12,R7,R0: BLT movedown BEQ endmove \ R7 is new end archive \ R10 is end map \ R12 is difference ADD R12,R12,R10:.loop LDR R11,[R10],#-4: STR R11,[R12],#-4 CMP R12,R7: BGE loop .endmove .loop LDRB R6,[R2],#1: STRB R6,[R4],#1 CMP R2,R3: BLT loop BL info2map MOV R0,#0 LDMIA R13!,{R15} .toendmapt EQUD map+maptotal-24 .movedown .loop LDR R11,[R0],#4: STR R11,[R7],#4: CMP R0,R10 BLT loop: B endmove : .getnome LDR R0,numofscrs: MOV R15,R14 .getnome1 LDR R1,numofscrs: MOV R15,R14 .addnsc LDR R1,numofscrs: ADD R0,R1,R0 \ fall into strnome .strnome STR R0,numofscrs: MOV R15,R14 .getmony LDR R0,stmoney: MOV R15,R14 .zinfoblk FNut("--------",0) .superseed EQUD 12345 .numofscrs EQUD 20\ number of screens EQUD 0 \ undefined .stmoney EQUD 5000 \ start cash .tcodes EQUD editcodes .gpasses EQUD passwords .workstt EQUD 0 .tocoursd EQUD map .txyzmp EQUD xyzmap:.txyzos EQUD xyzobs .tojunkm EQUD junkmap .eorseed SWI "OS_ReadMonotonicTime": LDR R4,superseed: EOR R4,R4,R0 STR R4,superseed: MOV R15,R14 .savezne BL clmenu: ADR R10,svznms: BL upromls: BL makeredcolms BL makeboxred: BL listzones: BL makeboxnorm: BL makenormcolms MOV R0,#1: BL getzonenum BL savezone: B editloop2 .svznms FNut("SAVE AS WHICH ZONE?",0): EQUB &FF: ALIGN .thisbore EQUD &1FC0000 ; bodged .savezone STMFD R13!,{R14} BL maycab BL decodecodes BL eorseed BL archivecur: CMP R0,#1: ADDEQ R13,R13,#4: BEQ cantarchive BL getR0at: EQUD bank2 SUBS R0,R0,#&14000: ADDMI R0,R0,#&3C000 LDR R1,thisbore: ADD R0,R0,R1 STR R0,workstt MOV R1,R0 \ R0 is workspace ADR R2,zinfoblk: LDMIA R2!,{R3-R8} MOV R7,#1 STMIA R0!,{R3-R8} BL putaname LDR R4,tcodes MOV R12,R6:.loop LDR R5,[R4],#4: STR R5,[R0],#4 SUBS R12,R12,#1: BGT loop LDR R4,gpasses ADD R12,R6,#7:.loop LDMIA R4!,{R5,R7}: STMIA R0!,{R5,R7} SUBS R12,R12,#1: BGT loop LDR R7,tocoursd: LDR R8,thatsall: LDR R9,thatsall+4 .loop LDR R5,[R7],#4: STR R5,[R0],#4: CMP R5,R9 LDREQ R5,[R7,#-16]: CMPEQ R5,R8: BNE loop LDR R7,tojunkm .loop LDR R5,[R7],#4: STR R5,[R0],#4: CMN R5,#2: BNE loop LDR R7,txyzmp .loop LDMIA R7!,{R8,R9,R10,R11}: STMIA R0!,{R8,R9,R10,R11} CMN R8,#1: CMNNE R8,#2: SUBEQ R7,R7,#12: SUBEQ R0,R0,#12 CMN R8,#2: BNE loop MVN R8,#0: STR R8,[R0],#4 LDR R12,tfint:.loop LDRB R5,[R12],#1: CMP R5,#31: STRB R5,[R0],#1 BNE loop MOV R5,R0: MOV R4,R1: MOV R2,#&FF0: ORR R2,R2,#13 ADR R1,zonefsp: STMFD R13!,{R1,R2,R4,R5} BL savezcrypt: LDMFD R13!,{R1,R2,R4,R5}: MOV R0,#10 SWI "XOS_File" BL encryptcodes BL updatezl BL justjen0 LDMFD R13!,{R15} .tosl EQUD startlev .zonefsp EQUS ".":.zono EQUS "1": EQUB 13:ALIGN .getzono0 LDRB R0,zono: AND R0,R0,#15: MOV R15,R14 .tfint EQUD fintxt .newzone ORR R0,R0,#&30: STRB R0,zono STMFD R13!,{R14}: BL nofsmes: MOV R0,#&28000: B supzone \ fall into loadzone .loadzone STMFD R13!,{R14} BL nofsmes .fileloop BL getR0at: EQUD bank2 SUBS R0,R0,#&14000: ADDMI R0,R0,#&3C000 .supzone MVN R2,#0: LDR R1,tosl: STRB R2,[R1] LDR R1,thisbore: ADD R2,R0,R1 STR R2,workstt MOV R3,#0 BL notokuc BL justjen0 STMFD R13!,{R2} MOV R0,#&FF: ADR R1,zonefsp: SWI "XOS_File" LDMFD R13!,{R2} BVS createnewz MOV R3,R4 LDR R0,[R2,#superseed-zinfoblk]: BL loadzcrypt LDR R0,workstt MOV R1,R0 ADR R2,zinfoblk: LDMIA R0!,{R3-R8} STMIA R2!,{R3-R8} CMP R7,#1: BLEQ getaname: BLNE noauthor LDR R4,tcodes MOV R12,R6:.loop LDR R5,[R0],#4: STR R5,[R4],#4 SUBS R12,R12,#1: BGT loop LDR R4,gpasses ADD R12,R6,#7:.loop LDMIA R0!,{R5,R7}: STMIA R4!,{R5,R7} SUBS R12,R12,#1: BGT loop LDR R7,tocoursd: LDR R8,thatsall: LDR R9,thatsall+4 .loop LDR R5,[R0],#4: STR R5,[R7],#4: CMP R5,R9 LDREQ R5,[R0,#-16]: CMPEQ R5,R8: BNE loop LDR R7,tojunkm .loop LDR R5,[R0],#4: STR R5,[R7],#4: CMN R5,#2: BNE loop LDR R7,txyzmp .loop LDMIA R0!,{R8,R9,R10,R11}: STMIA R7!,{R8,R9,R10,R11} CMN R8,#1: CMNNE R8,#2: SUBEQ R7,R7,#12: SUBEQ R0,R0,#12 CMN R8,#2: BNE loop .loop LDR R8,[R0],#4: CMN R8,#1: BNE loop LDR R12,tfint:.loop LDRB R5,[R0],#1: CMP R5,#31: STRB R5,[R12],#1 BNE loop BL maybeok LDRB R0,zono: BL gethiscores BL clearhscrap BL encrypto1 LDMFD R13!,{R15} ] endeditor=P%:P%=entername2 [OPT T .hashtable EQUB 32-45: EQUB &FF-45:FNjustsub("|¤CURRENCY|0ZERO|1ONE|2TWO|3THREE|4FOUR|") FNjustsub("¤5FIVE|6SIX|7SEVEN|8EIGHT|9NINE|-MINUS") FNjustsub("~TILDE|`QUOTE|+PLUS|;SEMICOLON|'APOSTROPHE") FNjustsub("#HASH|*STAR|=EQUALITY|,COMMA|.PERIOD|") FNjustsub("/SLASH|\BACKSLASH|"): EQUB -45 ALIGN .towhat EQUD input-4 .tokeyks EQUD keycodes .tNewq EQUD Newquays-&14 .wotmsetyp EQUD msetyp .readcruisekey STMFD R13!,{R0-R9,R14} ADR R6,cruisey: MVN R0,#0: MVN R1,#0: MOV R2,R0: MOV R3,R1 STMIA R6,{R0,R1,R2,R3} LDR R0,towhat: LDR R1,[R0,#4] LDR R0,tNewq CMP R1,#1: MOVLT R2,#&19: MOVGT R2,#&29 BNE gotindxc LDR R1,wotmsetyp: LDRB R1,[R1]: CMP R1,#0: MOVEQ R2,#&1D MOVNE R2,#&2E:.gotindxc LDRB R2,[R0,R2]: EOR R2,R2,#&FF: LDR R1,tokeyks ADR R0,hashtable MOVS R3,R2:BEQ gotkey:.loop .loop2 LDRB R4,[R1],#1: CMP R4,#10 SUBEQS R3,R3,#1:BNE loop .gotkey MOV R3,#16 MOV R5,R1:.loop LDRB R4,[R1],#1: CMP R4,#10: BEQ gotlenck CMP R4,#ASC("A"): BLT gottaprob CMP R4,#ASC("z"): BGT gottaprob CMP R4,#ASC("a"): BGE noprobs CMP R4,#ASC("Z"): BGT gottaprob:.noprobs SUB R3,R3,#1: B loop .gottaprob MOV R7,R0:.loop LDRB R8,[R7],#1: ADD R8,R8,#45: AND R8,R8,#255: CMP R8,R4: MOVEQ R9,R7 BEQ gothash CMP R8,#0: BEQ noprobs .loop2 LDRB R8,[R7],#1: CMP R8,#79: BNE loop2: B loop .gothash LDRB R8,[R7],#1: CMP R8,#79: SUBNE R3,R3,#1: BNE gothash B noprobs .gotlenck ; R3 is 16-length, R5 to ascii string, R9 to hash (if exists) ; R6 to cruisey ADD R6,R6,R3,ASR#1 .loop LDRB R8,[R5],#1 CMP R8,#10: LDMEQFD R13!,{R0-R9,R15} CMP R8,#32: MOVEQ R8,#255: BEQ stickit CMP R8,#ASC("A"): BLT expandh CMP R8,#ASC("z"): BGT expandh CMP R8,#ASC("a"): BGE noxpnd CMP R8,#ASC("Z"): BGT expandh:.noxpnd AND R8,R8,#&DF: SUB R8,R8,#31 .stickit STRB R8,[R6],#1: B loop .expandh .loop2 LDRB R8,[R9],#1: CMP R8,#79: BEQ loop ADD R8,R8,#45-31: STRB R8,[R6],#1: B loop2 : .insertline0 STMFD R13!,{R0-R12,R14} CMP R0,#3: BLEQ readcruisekey MOV R5,#0: MOV R6,#&2D ADR R1,tilescroll: ADD R1,R1,R0,LSL#4 LDR R2,tmapoz MOV R3,#16:.loop LDRB R4,[R1],#1 CMP R4,#&FF: STREQB R4,[R2,#1]: STREQB R6,[R2],#-2 STRNEB R5,[R2,#1]: STRNEB R4,[R2],#-2 SUBS R3,R3,#1: BNE loop: LDMFD R13!,{R0-R12,R15} : .tmapoz EQUD mapcopy+&40+&30*6+30 .tilescroll FNtiletext(" WELL DONE ") FNtiletext("ENTER YOUR NAME ") FNtiletext(" BY PRESSING ") .cruisey FNtiletext("ABCDEFGHIJKLMNOP") FNtiletext(" TO ACTIVATE ") FNtiletext("CHARACTER UNDER ") FNtiletext(" YOUR BALL ") FNtiletext(" x TO FINISH ") FNtiletext(" y TO DELETE ") ALIGN .scrollpos EQUD 0 .enm2 EQUD velo: EQUD 0 EQUD vdown: EQUD 0 EQUD height: EQUD 0 EQUD h: EQUD 0 EQUD cruiseon: EQUD &FF00 EQUD reverse: EQUD &FFFFFF00 EQUD xyzinfo: EQUD -1 EQUD junkinfo: EQUD -1 .enm3 EQUD enableall: EQUD 1 EQUD reverse+&FF000000: EQUD &FF EQUD index: EQUD &4000000 EQUD index: EQUD &4000000 .nameenter2 STMFD R13!,{R1,R2} MOV R0,#0: BL storegob BL curveoff BL flreset2 BL noangeldust BL notdgame BL calc \ should cope if die during handbrake turn ADR R0,enm2: MOV R3,#12: BL shove LDMFD R13!,{R1,R2} ADR R5,snames:LDR R3,[R1]: CMP R2,R3: ADDLT R5,R5,#16 LDR R3,[R1,#24]: CMP R2,R3: ADDLT R5,R5,#16 LDR R3,[R1,#48]: CMP R2,R3: ADDLT R5,R5,#16 LDR R0,olscore: LDR R1,[R0]: STR R1,stscre LDR R0,getabot: LDR R1,gesabot: LDR R2,endabot .loop LDMIA R0!,{R3,R4,R6,R7,R8,R9,R10,R11} STMIA R1!,{R3,R4,R6,R7,R8,R9,R10,R11} CMP R1,R2: BLT loop LDR R0,tmcopee: ADR R1,congrascr+1024: SUB R1,R1,#1024 MOV R2,#624:.loop LDMIA R1!,{R3,R4,R6,R7,R8,R9,R10,R11} STMIA R0!,{R3,R4,R6,R7,R8,R9,R10,R11} SUBS R2,R2,#32: BPL loop LDR R10,tmcopee:MOV R1,#624:.loop BL projline ADD R10,R10,#&30: SUBS R1,R1,#48: BNE loop MOV R10,#16 LDR R0,tmcopee: ADD R0,R0,#&100: MOV R7,#&2D: ADD R0,R0,#14:MOV R8,#0:.loop LDRB R6,[R5],#1: CMP R6,#&FF:STREQB R6,[R0,#1]: STREQB R7,[R0],#-2 STRNEB R8,[R0,#1]: STRNEB R6,[R0],#-2 SUBS R10,R10,#1: BNE loop LDR R0,tzyxif: MVN R1,#0: STR R1,[R0] LDR R0,twrtb: MOV R3,#11: BL shove LDR R0,twrtb2: MOV R3,#6: BL shove BL centremouse MOV R0,#30: STR R0,indXe LDR R0,tosses: MOV R1,#0: STR R1,[R0]: STR R1,[R0,#4] MOV R0,#0: STR R0,scrollpos: BL insertline0 LDR R1,tmcopee MOV R0,#24<<24: STR R0,[R1,#&EC] LDR R0,tospdoz: MOV R1,#0: STR R1,[R0] BL resettime BL Hz50stars .loop LDR R0,tospdoz: LDR R1,scrollpos: LDR R0,[R0] LDR R2,tmcopee LDR R3,[R2,#&EC]: SUB R3,R3,R0,LSL#20: CMP R3,#4<<24 MOVLT R3,#4<<24 LDR R6,aptrp: LDR R4,[R6]: ADD R5,R2,#&C0 CMP R4,R5: BNE okpokeitlen LDR R4,[R6,#index-mapptr] CMP R4,R3: BGE nokpokeitlen .okpokeitlen STR R3,[R2,#&EC] .nokpokeitlen ADD R4,R0,R1: ADD R0,R4,R0,LSL#1: CMP R0,#&1200: SUBGE R0,R0,#&1200 STR R0,scrollpos MOV R0,R0,ASR#9: CMP R0,R1,ASR#9 BEQ nonewline BL insertline0:.nonewline ADR R0,enm3: MOV R3,#1: BL shove: BL noangeldust LDR R5,tjkif: MVN R4,#0: STR R4,[R5] MOV R10,#16: LDR R1,tcrunb: STR R10,[R1] BL gameframe2 LDR R0,aptrp: LDR R1,tmcopee: ADD R1,R1,#48*9 LDR R2,[R0]: CMP R2,R1: STRGT R1,[R0] BL noangeldust LDR R0,tcruon: LDRB R0,[R0]: MOVS R0,R0: BEQ noclk LDR R0,tsquaon: LDR R1,[R0]: LDR R7,indXe TST R1,#&FF00: BICNE R1,R1,#&D2 CMPEQ R1,#110: BEQ bckspce: CMP R1,#109: BEQ caret CMP R7,#0: BEQ nodoclk LDR R8,tmcopee: ADD R8,R8,#&F0 STRB R1,[R8,R7]!: MOV R0,R1,LSR#8: STRB R0,[R8,#1] MOV R0,#&FF: CMP R7,#2: STRGEB R0,[R8,#-1]: STRGEB R0,[R8,#-2]! SUBS R7,R7,#2: STRPL R7,indXe CMP R7,#2 MOV R0,#&FF: MOV R1,#&2D:.loop1 STRGEB R0,[R8,#-1]: STRGEB R1,[R8,#-2]! SUB R7,R7,#2: CMP R7,#2: BGE loop1 .nodoclk .noclk LDR R0,tcruon: MOV R1,#0: STRB R1,[R0] BL scanesc: BEQ caret B loop .tospdoz EQUD spd .caret BL No50stars BL ackesc MOV R6,#16 ADR R10,winput+15:LDR R8,tmcopee: ADD R8,R8,#&F0:.loop1 MOV R4,#32: LDR R0,[R8],#2 AND R7,R0,#&FF: CMP R7,#24: MOVEQ R0,#42-31 CMP R7,#123: MOVEQ R0,#45-31 TST R0,#&FF00: ADDEQ R4,R0,#31: STRB R4,[R10],#-1 SUBS R6,R6,#1: BNE loop1 LDR R0,olscore: LDR R1,stscre: STR R1,[R0] MOV R1,#1 B uename .tjkif EQUD junkinfo .tcrunb EQUD cruiseen .tcruon EQUD cruiseon .bonnet EQUD bannerptr .aptrp EQUD mapptr .bckspce CMP R7,#30: BEQ nodoclk LDR R8,tmcopee: ADD R8,R8,#&F2: MOV R0,#&FF: MOV R2,#&2D CMN R7,#2 STRB R0,[R8,R7]!: STRB R0,[R8,#1]: STRNEB R2,[R8,#-2]: STRNEB R0,[R8,#-1] ADD R7,R7,#2: STR R7,indXe: B nodoclk .olscore EQUD score:.stscre EQUS "STst" .winput EQUS"Enter Password: " \ for people searching through my code! ALIGN .snames FNtiletext(" **** GOD **** ") FNtiletext(" * MEGABEING * ") FNtiletext(" * SUPER MAN * ") FNtiletext(" -- NO NAME -- ") .oldclk EQUD 13 .bustate EQUD buttonstate .indXe EQUD 30 .tsquaon EQUD squareon .tzyxif EQUD xyzinfo .tmcopee EQUD mapcopy+&40 .tosses EQUD s .twrtb EQUD wrtab:.twrtb2 EQUD wrtab2 .oldptrptr EQUD oldtop .gesabot EQUD &1FC0000+&102C0+&28000+&140 ; bodged .endabot EQUD &1FC0000+&3C000 ; bodged .getabot EQUD logodata .bot2sc EQUD scrnbot .gameframe2 STMFD R13!,{R14} BL cashcopy BL nokgnd BL getsquareon: BL firststopst BL storeoldpos: BL tacproject: BL flip3 BL dmjunk:BL cls:BL spacejunk:BL updatescr: BL plotshadow: BL xyzcode BL mightdobanner BL timer: BL mightpause BL cruise BL descend: BL motion: BL chalign: BL vmotion: BL collision MOV R12,#0: BL vmotion2: BL endgloopcd B noselfdi .playicon EQUD &1FFB000+&2D1C+4-&400*3 ; bodged .fromscr EQUD &1FF2000+12+4 ; bodged .endascreen EQUD &2000000 ; bodged .glevo EQUD levelon .izx EQUD x .twayup EQUD height .wickedicon STMFD R13!,{R14} BL chkcash BL findtelep: BL storetelepen BL restartfoff LDR R0,glevo: LDR R0,[R0]: ADD R0,R0,#1: AND R0,R0,#255: BL getj LDR R1,twayup: MOV R0,#0: STR R0,[R1] LDR R1,izx: MOV R0,#200*&10000: STR R0,[R1] MOV R0,#0: STR R0,[R1,#dy-x]: LDR R1,tindex: STR R0,[R1] LDR R0,tmcopee: STR R0,[R1,#mapptr-index] LDR R0,endascreen: SUB R0,R0,#&4000: LDR R1,bot2sc STR R0,[R1]: SUB R2,R0,#&10000: STR R2,[R1,#scrntop-scrnbot] SUB R0,R0,#&1F00: SUB R0,R0,#&C0: STR R0,[R1,#scrnpnt-scrnbot] BL cls: BL spacejunk: BL curveoff: BL updatescr: BL spdisz BL plotshadow: BL xyzcode BL dai21FFB LDR R0,fromscr: LDR R1,playicon MOV R10,#160: MOV R11,#6 LDR R12,tooot .loop MOV R4,R0: MOV R5,#&140:.loop2 EOR R11,R11,#3 LDRB R9,[R1],#1 LDRB R6,[R4],R11: MOVS R3,R6 MOVEQ R3,R9: CMP R9,#255: MOVEQ R3,#0 STRB R3,[R12],#1 SUBS R5,R5,R11: BPL loop2 ADD R1,R1,#1: MOV R6,#0: STRB R6,[R12],#1 ADD R0,R0,#&A00: SUBS R10,R10,#10: BNE loop LDR R0,glevo: LDR R0,[R0]: ADD R0,R0,#1: AND R0,R0,#255: BL getj2 LDR R1,bot2sc: MOV R0,#&4000000: STR R0,[R1,#scrnpnt-scrnbot] BL spacejunk BL updatescr: BL curveon: BL spdisz: BL xyzcode BL dai21FFB LDR R0,fromscr: LDR R1,playicon: ADD R1,R1,#960 MOV R10,#160: MOV R11,#6 LDR R12,tooot: ADD R12,R12,#960 .loop MOV R4,R0: MOV R5,#&140:.loop2 EOR R11,R11,#3 LDRB R3,[R1,#-960]: LDRB R2,[R1],#1: LDRB R6,[R4],R11 CMP R3,#255: MOVEQ R3,#0: MOVNES R6,R6: MOVNE R3,R6 MOVS R2,R2: STREQB R3,[R12],#1 STRNEB R2,[R12],#1 SUBS R5,R5,R11: BPL loop2 ADD R1,R1,#1: MOV R6,#0: STRB R6,[R12],#1 ADD R0,R0,#&A00: SUBS R10,R10,#10: BNE loop LDMFD R13!,{R15} .tindex EQUD index .tooot EQUD bigwaste .dobox LDR R6,boxcols MOV R7,#&28000:.loop3 LDR R0,osctp: \ R1 is box index LDR R0,[R0] ADD R0,R0,R7 ADD R0,R0,R1: LDR R2,boxcols+1: MOV R5,R2 \ R3 is height \ R12 is width MOV R8,R3 .loop2 SUB R4,R12,#1 STRB R5,[R0]: .loop STRB R2,[R0,R4] SUBS R4,R4,#1: BNE loop: STRB R6,[R0,R12]: ADD R0,R0,#&140 CMP R3,#2: MOVEQ R2,#1: LDRNE R2,boxcols+2 SUBS R8,R8,#1: BNE loop2 SUBS R7,R7,#&14000: BPL loop3 MOV R15,R14 .boxcols EQUD &D1D02F .normbcols EQUD &D1D02F .dangercols EQUD &151414 .makeboxred LDR R0,dangercols:.makeboxstr STR R0,boxcols: MOV R15,R14 .makeboxnorm LDR R0,normbcols: B makeboxstr .tmapname EQUD mapcopy .tstedit EQUD stedit .tlimin EQUD timelim .ohputpas2 EQUD putpas2 .ohstatif EQUD statif .tpp2 EQUD putpas2 .stats BL canieditit LDR R12,tmapname:LDR R11,ohstatif: MOV R10,#40 LDR R1,tlimin: LDRB R0,[R12,#&28]: STRB R0,[R1] LDRB R0,[R12,#&29]: STRB R0,[R1,#1] LDRB R0,[R12,#&2A]: STRB R0,[R1,#3]: LDRB R0,[R12,#&2B]: STRB R0,[R1,#4] MOV R0,#10: STRB R0,[R1,#2] .loop LDRB R1,[R12],#1: MOV R2,#66: BL asctoint2: STRB R0,[R11],#1 CMP R1,#32: SUBLT R12,R12,#1: SUBS R10,R10,#1 BNE loop BL decodecodes LDR R6,tpasses2: BL getR0at: EQUD current: ADD R6,R6,R0,LSL#3 LDR R10,ohputpas2 LDR R0,[R6],#4:BL getword LDR R0,[R6],#4:BL getword LDR R6,tedits2: BL getR0at: EQUD current: ADD R6,R6,R0,LSL#2 LDR R0,[R6]: LDR R1,tstedit: ADD R12,R1,#ended-stedit SUBS R0,R0,#123: MOVMI R0,#0: \ pathetic encryption BL dcnum BL encryptcodes LDR R0,tpp2:MOV R1,#9:.loop LDRB R2,[R1,R0]: SUBS R2,R2,#26: ADDLT R2,R2,#14+26 STRB R2,[R1,R0]: SUBS R1,R1,#1: BPL loop ADR R1,putpas: MOV R2,#9: LDR R3,ctrlp .loop AND R4,R3,#&F: LDRB R5,[R0,R2] STRB R5,[R1,R4]: MOVS R3,R3,LSR#4: LDREQ R3,ctrl2p SUBS R2,R2,#1: BPL loop .ostatloop ADR R12,statif BL domenu BL levchannels BL displsmbuts: BL copybnks BL clbuf .loop BL scanquit: BEQ endstats BL getmenu:BL wrmse2:.menugot BL testlsbut .menuloop BL readmse: CMP R0,#15: BEQ endstats TST R0,#3: BEQ inputnom CMP R0,#3: BEQ inputpss CMP R0,#7: BEQ inputecd CMP R0,#11: BNE loop .inputtme ADR R12,timelim: MOV R11,#5: ADR R10,tstip: LDR R7,tmeofst .inpsp BL simpleip: B loop .getcsh ADR R10,tstip3: LDR R7,cdeofst .inzstf BL simplein: B zstatsloop .inputnom ADR R12,statif: MOV R11,#40 ADR R10,tstip2: MOV R7,#&F10 SUB R7,R7,#8: B inpsp .inputstrg ADR R10,tstip2: B inzstf .inputecd LDR R12,tstedit: MOV R11,#8: ADR R10,tstip3: LDR R7,cdeofst B inpsp .inputpss ADR R12,putpas: MOV R11,#10: ADR R10,tstip4: LDR R7,pssofst B inpsp .editstrg ADR R10,tstip3 STR R5,prsdit: STMFD R13!,{R12,R14} B insimpleip .planstrg ADR R10,tstip3:.nvestrg STR R14,spare1: BL simplein: LDR R15,spare1 .prsdit EQUD 0 .spare1 MOV R0,#0 .simpleip ADR R5,menugot:.simplein STR R5,prsdit STMFD R13!,{R12,R14} BL nolistL .insimpleip LDR R12,toisp BL tweaking BL clbuf BL stcar2 ADR R2,tstip SUB R9,R11,#1:.loop CMP R2,R10: CMPEQ R9,#2: MOVEQ R0,#10: MOVNE R0,#13 MOVEQ R1,#10: MOVNE R1,#66: BL Dutext2 STRB R1,[R9,R12]: SUBS R9,R9,#1: BPL loop BL stcar2 MOV R9,#0:.loops CMP R9,R11: BEQ noallow MOV R0,#68: BL Dutext2: BL bckspc .noallow BL getmenu: MOVS R0,R0: BPL news BL clickonlist2 BL testkeys BL capstrans1to0 CMP R2,#&FF: BEQ noallow CMP R0,#127: CMPNE R0,#8: BEQ simpbck CMP R2,#&1B: BEQ refrshold CMP R0,#13: BEQ putnew CMP R11,R9: BEQ noallow MOV R15,R10 .refrshold LDMFD R13!,{R12} BL stcar2: SUB R9,R11,#1:.loop LDRB R0,[R12],#1: BL Dutext2 SUBS R9,R9,#1: BPL loop: MOV R0,#&7E: SWI "OS_Byte" LDMFD R13!,{R14} B untweak .news BL wrmse2: MOV R5,R12 CMP R11,R9: LDMFD R13!,{R12}: MOVNE R5,R12 STMFD R13!,{R0}: BL stcar2 SUB R9,R11,#1:.loop LDRB R0,[R5],#1: STRB R0,[R12],#1 BL Dutext2 SUBS R9,R9,#1: BPL loop: BL untweak: LDMFD R13!,{R0,R14} LDR R15,prsdit .putnew LDMFD R13!,{R5} BL stcar2: MOV R8,#0:CMP R9,R8: BEQ novery2:.loop CMP R9,R8: BNE overy2 .novery2 MOV R0,#66:.loop2 STRB R0,[R5],#1: BL Dutext2 ADD R8,R8,#1: CMP R8,R11: BNE loop2: B utend .simpbck ADR R0,tstip: CMP R10,R0: BNE nodbl CMP R9,#3: BNE nodbl SUB R9,R9,#2: MOV R0,#13: BL Dutext2 BL bckspc: BL bckspc: BL bckspc: B loops .nodbl CMP R9,#0: BEQ noallow CMP R9,R11: SUB R9,R9,#1: BEQ noline MOV R0,#13: BL Dutext2: BL bckspc:.noline BL bckspc B loops .overy2 LDRB R0,[R12],#1: STRB R0,[R5],#1: BL Dutext2 ADD R8,R8,#1: CMP R8,R11: BNE loop: .utend BL untweak: LDMFD R13!,{R15} .tstip CMP R0,#58: BGE noallow: CMP R0,#48: BLT noallow CMP R9,#0: CMPEQ R0,#57:BEQ noallow CMP R9,#3: BNE notthr: CMP R0,#48+5: BGT noallow:.notthr CMP R9,#1: BNE contisp MOV R1,R0: BL asctoint3 STRB R0,[R12,R9]: ADD R9,R9,#2: BL Dutext2: BL blankspc: B loops .contisp MOV R1,R0: BL asctoint3 STRB R0,[R12,R9]: ADD R9,R9,#1: BL Dutext2: B loops : .tstip2 B contisp .tedits2 EQUD editcodes .tstip3 CMP R0,#58: BGE noallow: CMP R0,#48: BLT noallow B contisp .tstip4 CMP R0,#48: BLT noallow: CMP R0,#58: BLT contisp CMP R0,#65: BLT noallow CMP R0,#91: BLT contisp: B noallow .tedits2 EQUD editcodes .tmeofst EQUD &3188 .cdeofst EQUD &3128 .pssofst EQUD &30C8 .toisp EQUD inputstr .statif FNut(" ",0): EQUB &FF EQUB &FF: FNut("PASSWORD:",0): EQUB &FF .putpas FNut(" ",0): EQUB &FF EQUB &FF: EQUB &FF: FNut("EDITOR CODE:",0): EQUB &FF .stedit EQUS " ":.ended EQUS " ": EQUB &FF EQUB &FF:EQUB&FF: FNut("TIME LIMIT (MM:SS)",0): EQUB &FF .timelim FNut(" : ",0): EQUB &FF EQUB &FF:EQUB&FF: EQUB&FF: FNut("QUIT",0): EQUB &FF ALIGN .putpas2 EQUS " " ALIGN .togetty EQUD mapcopy .endstats BL decodecodes ADR R12,statif: MOV R10,#40: LDR R11,togetty .loop LDRB R1,[R12],#1: BL inttoasc: STRB R0,[R11],#1 SUBS R10,R10,#1: BNE loop LDR R4,togetty: LDRB R7,timelim: STRB R7,[R4,#&28] LDRB R7,timelim+1: STRB R7,[R4,#&29] LDRB R7,timelim+3: STRB R7,[R4,#&2A] LDRB R7,timelim+4: STRB R7,[R4,#&2B] ADR R5,stedit:BL tobinary LDR R6,tedits3: BL getR0at:.gcurt EQUD current: ADD R6,R6,R0,LSL#2 STR R4,[R6] LDR R1,gcurt: LDR R1,[R1]: ADR R0,putpas: BL newpass B editloop2 .tobinary \ R5 to ascii, R4=> binary MOV R4,#0:.loop LDRB R0,[R5],#1: CMP R0,#66 ADDLT R4,R4,R4,LSL#2: ADDLT R4,R0,R4,LSL#1: BLT loop ADD R4,R4,#123: MOV R15,R14 .tedits3 EQUD editcodes .ctrlp EQUD &21098765 .ctrl2p EQUS "Corp" .osctp EQUD base1 .tpasses2 EQUD passwords+8*6 .dcnum2 ADD R12,R1,#3 .dcnum \ R0 is num, R1 to buff, R12 to end buf (or .Diagnosis": EQUB 13:ALIGN .regdump .oldvectors EQUD 0:EQUD0:EQUD0:EQUD0 ] endcockup=P%:P%=doopts [OPT T .chkallow LDR R5,tinpt: LDR R5,[R5]: CMP R5,#2: MOVNE R15,R14 LDR R5,aljoy: LDR R5,[R5]: MOVS R5,R5: MOVNE R15,R14 BL storescr: MOV R0,#1: MOV R7,#0: BL inoptcode: B playplease .continuingg BL curveon: BL resetasb4: BL dgame: BL clgot: B ggc .gameloop STMFD R13!,{R14}: BL amiconting: BEQ continuingg BL getqflag: BL tempenon: BL wantwelc BL entershop: BL tempenoff: MOV R0,#1: BL infade .ggc BL getqflag: BEQ exscp BL findeotdS BL poff: BL contng .loop2 BL resettime BL Hz50stars .loop BL gameframe BL getqflag: BEQ exscp3 LDR R4,jcash: LDR R4,[R4]: MOVS R4,R4: BMI endnow BL gameframe BL getqflag: BEQ exscp3 LDR R4,jcash: LDR R4,[R4]: MOVS R4,R4: BMI endnow BL scanesc: BNE loop BL vsync BL No50stars BL chkquitg: BNE loop2:BEQ exscp3:.endnow BL No50stars BL gameover ADR R0,lastshove: MOV R3,#2: BL shove MOV R6,#25:MOV R0,#19:.loop SWI "OS_Byte" SUBS R6,R6,#1: BNE loop .endnow2 BL No50stars BL clbuf BL ackesc MOV R0,#&81: MOV R1,#100: MOV R2,#0: SWI "OS_Byte" .exscp2 BL clbuf: BL ackesc BL qcl2 .exscp3 ADR R0,wRtab: MOV R3,#5: BL shove: BL totalclear BL copy BL maycab LDMFD R13!,{R15} .exscp BL trivialgame: BL clbuf: BL ackesc: B exscp2 .wRtab EQUD ebe+&FF000000: EQUD 0 .jcash EQUD cash: EQUD 0 EQUD lastpos: EQUD 1 .lastshove EQUD enableall: EQUD 1 EQUD enad: EQUD 0 .ctrlt CMP R0,#700: MOVLT R2,#0: MOVGE R2,#1 LDR R0,mctrltype: LDR R1,[R0]: CMP R1,R2: BEQ nodrag EOR R1,R1,#1: STR R1,[R0] B nodrag2 .qcl2 STMFD R13!,{R14} BL getR0at: EQUD base1:MOV R4,R0 BL getR0at: EQUD bank: ADD R0,R0,R4 LDMFD R13!,{R14}: B qclear .mousesk LDR R2,mctrltype: LDRB R0,[R2] ADD R2,R0,#4: CMP R10,R2,LSL#1: BGE ignoreit CMP R0,#1: RSB R0,R10,#11: LDR R2,tokeyn ADDEQ R2,R2,#&DD-&CC STRB R11,[R2,R0]: B endstkey .mouseinp CMP R1,#&1E0: BLT norminp CMP R1,#&250: BGT nowaysd LDR R2,mctrltype: LDRB R2,[R2]: CMP R2,#1: BEQ norminp:.nowaysd CMP R0,#420: BLT nodrag CMP R0,#&3C0: BGT nodrag CMP R1,#632+20*4: BGT nodrag CMP R1,#632-23*4: BLT nodrag CMP R1,#632-16*4: BLT ysens CMP R1,#632-10*4: BLT nodrag CMP R1,#632+7*4: BGT ctrlt BL fixpntr .loop SUB R0,R0,#420: LDR R6,getsense: STR R0,[R6] LDR R2,mctrltype: LDRB R0,[R2] BL drawmbar SWI "OS_Mouse": TST R2,#5: BNE loop .endmlp BL fullrect .nodrag LDRB R0,redefkey: STRB R0,oldrkey MOV R5,#&FF: STRB R5,redefkey STRB R5,oldin: STRB R5,newin B redotxt .nodrag2 LDRB R0,redefkey: STRB R0,oldrkey MOV R5,#&FF: STRB R5,redefkey: MOV R5,#8: STRB R5,oldin B redotxt .fullrect MOV R0,#21: ADR R1,fullpos: SWI "OS_Word": MOV R15,R14 .fixpntr STMFD R13!,{R0,R14} STRB R1,limitpos+3: ADD R2,R1,#0: STRB R2,limitpos+7 MOV R1,R1,LSR#8: MOV R2,R2,LSR#8 STRB R1,limitpos+4: STRB R2,limitpos+8 MOV R0,#21: ADR R1,limitpos: SWI "OS_Word" LDMFD R13!,{R0,R15} .ysens LDR R2,mctrltype: LDRB R2,[R2]: CMP R2,#0: BNE nodrag BL fixpntr .loop SUB R0,R0,#420: LDR R6,getsense: STR R0,[R6,#4] BL drawmbar: SWI "OS_Mouse": TST R2,#5: BNE loop: B endmlp .limitpos EQUB 1:EQUW 420: EQUW 0: EQUW 956: EQUW 0 .fullpos EQUB 1: EQUW 0: EQUW 0: EQUW 1279: EQUW 1023 ALIGN .mctrltype EQUD msetyp .moussens STMFD R13!,{R3,R6,R8,R12} LDR R0,mctrltype: LDR R0,[R0]: MOVS R0,R0 MOVEQ R1,#ASC("_")-33: MOVNE R1,#98 STRB R1,isyactrl: EOR R1,R1,#(ASC("_")-33) EOR 98 STRB R1,isbctrl BL securetxt FNaddr(192,700-17*4): EQUD !colA OPT FNequadd("(x):") EQUB 0:ALIGN BL securetxt .msbwg FNaddr(400,700-17*4): EQUD &D0D1D2 OPT FNequadd(CHR$129+STRING$(15,CHR$128)+CHR$130) EQUB 0:ALIGN LDR R0,mctrltype: LDR R0,[R0]: CMP R0,#1: BEQ nowhy BL securetxt FNaddr(192,700-30*4): EQUD !colA OPT FNequadd("(y):") EQUB 0:ALIGN BL securetxt .msbwg2 FNaddr(400,700-30*4): EQUD &D0D1D2 OPT FNequadd(CHR$129+STRING$(15,CHR$128)+CHR$130) EQUB 0:ALIGN MOV R0,#0: .nowhy BL drawmbar BL securetxt FNaddr(192,700): EQUD !colA OPT FNequadd("Velocity:#"):.isyactrl OPT FNequadd("?#Y-axis#/#"):.isbctrl OPT FNequadd("?#Button") EQUB 0:ALIGN LDMFD R13!,{R3,R6,R8,R12} ADD R12,R12,#&140*64: SUB R12,R12,#&140*7 LDR R0,mctrltype: LDR R0,[R0]: MOVS R0,R0 SUBNE R12,R12,#&140*31 ADDEQ R8,R8,#8: ADDNE R8,R8,#&DB-&C4 ADDEQ R6,R6,#keytypes2-keytypes ADDNE R6,R6,#keytypesAD-keytypes MOVEQ R7,#3: MOVNE R7,#5 B retmusse .drawmbar STMFD R13!,{R14} STMFD R13!,{R0} BL vsync LDR R0,realmsbwg: MOV R1,#137: MOV R2,#3: BL getbck BL getR0at: EQUD base1: LDR R1,realmsbwg: ADD R0,R0,R1 LDR R1,getsense:LDR R1,[R1] BL drawmbar2 LDMFD R13!,{R0}: CMP R0,#1: LDMEQFD R13!,{R15} LDR R0,realmsbwg2: MOV R1,#137: MOV R2,#3: BL getbck BL getR0at: EQUD base1: LDR R1,realmsbwg2: ADD R0,R0,R1 LDR R1,getsense:LDR R1,[R1,#4]: LDMFD R13!,{R14} .drawmbar2 MOV R6,#&30:.loop STRB R6,[R0,#&280] STRB R6,[R0,#&140] STRB R6,[R0],#1 SUBS R1,R1,#4: BPL loop MOV R7,#3 STRB R7,[R0,#&280] STRB R7,[R0,#&140] STRB R7,[R0] MOV R15,R14 .tab12 EQUD tab1:.tsflag2 EQUD soundflag ALIGN .realmsbwg EQUD !msbwg+&140*3+3 .realmsbwg2 EQUD !msbwg2+&140*3+3 .getsense EQUD msesens .opttype EQUD 1 \ 0=from titles,1=from pause .drawics STMFD R13!,{R14} LDR R1,sound1 BL dopl: ADDNE R1,R1,#&7E0: BNE nosysond MOV R0,#&8200: ADD R0,R0,#4 LDR R10,tab12: LDR R11,tsflag2: LDR R11,[R11] MOV R9,#3:.loop LDRB R5,[R10],#1: TST R11,R5: MOVEQ R5,#&D3: MOVNE R5,#&24 STMFD R13!,{R0,R1,R9-R11} MOVEQ R10,#&D0: MOVNE R10,#&27 MOVEQ R4,#&D1: MOVNE R4,#&25 MOV R2,#32: MOV R3,#22: BL ownhin LDMFD R13!,{R0,R1,R9-R11} ADD R0,R0,#&140*28 ADD R1,R1,#672 SUBS R9,R9,#1:BNE loop .nosysond MOV R0,#&8300: ADD R0,R0,#&18 LDR R5,talloj: LDRB R5,[R5] LDR R11,tinpt: LDR R11,[R11] MOV R9,#3:.loop STMFD R13!,{R0,R1,R5,R9,R11} RSB R10,R9,#3: CMP R11,R10: MOVEQ R5,#&D3: MOVNE R5,#&24 MOVEQ R10,#&D0: MOVNE R10,#&27 MOVEQ R4,#&D1: MOVNE R4,#&25 MOV R2,#32: MOV R3,#22: BL ownhin LDMFD R13!,{R0,R1,R5,R9,R11} ADD R0,R0,#&140*28 ADD R1,R1,#672 CMP R9,#2: MOVEQS R5,R5: ADDEQ R1,R1,#672 SUBS R9,R9,#1:BNE loop LDMFD R13!,{R15} .tkt EQUD keytypes .exitis EQUD &1FD4000+&2660-&C00 ; bodged .saveis EQUD &1FD4000+&2660+24*16-&C00 ; bodged .playis EQUD &1FD4000+&3C08-&1000 ; bodged .savego EQUD &10160-&280:.playgo EQUD &10140-&280:.exitgo EQUD&10120-&280 .optspr EQUD &1FD4000+&3D88-&1000 ; bodged .oldin EQUB &FF:.newin EQUB &FF:ALIGN .flauto EQUD 0 .singlec SUB R0,R0,#32 LDR R1,contiis: BL ownhigi2: LDMFD R13!,{R7,R15} .contiis EQUD &1FD4000+&46E8-&1000 ; bodged .optcode2 STR R0,opttype MOV R7,#1:STR R7,flauto STMFD R13!,{R14}:MOV R0,#&FF: STRB R0,redefkey BL clearaall: B inoptc2 .svplex STMFD R13!,{R7,R14}: STR R0,dpnum LDR R0,exitgo: LDR R1,exitis: MOV R2,#0: BL ownhigi LDR R0,savego: LDR R2,opttype: MOVS R2,R2: BNE singlec LDR R1,saveis: MOV R2,#1: BL ownhigi LDR R0,playgo: LDR R1,playis: MOV R2,#2: BL ownhigi LDMFD R13!,{R7,R15} .dpnum EQUD 0 .ownhigi LDR R5,dpnum: B cownhigi .ownhigi2 LDR R5,dpnum: B cownhigi2 .boringbod EQUD &1FD4000 ; bodged .optcode STR R0,opttype MOV R7,#1:.inoptcode STR R7,flauto:STR R0,opttype STMFD R13!,{R14} MOV R0,#&FF: STRB R0,redefkey MOV R0,#1: BL infade: BL clearall: BL copy BL copyica MOV R0,#&FF: STRB R0,oldin: LDR R0,tinpt: LDRB R0,[R0] STRB R0,newin .inoptc2 MOV R0,#5: BL noowall2 LDR R0,boringbod: BL decompressallicons BL tstdg BLNE overbiglogo: BL yesangeldust BL pensureon BL copy: BL drawics MOV R0,#24 LDR R1,optspr BL insprout2 MVN R0,#0 BL svplex .redotxt LDR R12,stpos MOV R0,#19: SWI "OS_Byte" LDRB R0,newin: LDRB R1,oldin: CMP R1,#8: BEQ wipeall CMP R0,R1:BEQ noforty .wipeall SUB R0,R12,#1: MOV R2,#14*4:.retaa MOV R1,#224: BL getbck ADD R0,R12,#&4700: ADD R0,R0,#&D6: MOV R2,#36:MOV R1,#74 BL getbck .noforty LDR R6,tkt LDR R12,stpos: LDR R3,colorz MOV R7,#7: LDR R8,tokeyn LDR R11,tinpt: LDR R11,[R11]: CMP R11,#1: BEQ moussens CMP R11,#2: ADDEQ R8,R8,#16 .retmusse LDR R0,tkeyc STR R0,tkeycodes .loop2 MOV R5,R12 LDR R11,wtg: STR R12,[R11] LDRB R4,redefkey: CMP R7,R4: LDREQ R0,redcol LDRNE R0,colA MOV R4,#19 STR R0,[R3] .loop LDRB R0,[R6],#1 SUB R4,R4,#1 CMP R0,#32: SUB R0,R0,#33: BLCS niceDm: BCS loop LDRB R1,[R8],#1 EOR R1,R1,#&FF LDR R10,tkeycodes: CMP R1,#0: BEQ battery .loop LDRB R2,[R10],#1: CMP R2,#10: BNE loop SUBS R1,R1,#1: BNE loop .battery LDR R0,colB: STR R0,[R3] MOV R0,#ASC(".")-33:.loop BL niceDm: SUBS R4,R4,#1: BPL loop LDR R0,colA: STR R0,[R3] LDRB R4,redefkey: CMP R7,R4:BEQ block LDRB R4,oldrkey: CMP R7,R4:BNE noned STMFD R13!,{R3,R5,R7} LDR R4,wtg: LDR R0,[R4]: SUB R0,R0,#1: MOV R2,#10: MOV R1,#73: BL getbck LDMFD R13!,{R3,R5,R7} .noned LDRB R0,[R10],#1: CMP R0,#10: SUBNE R0,R0,#33: BLNE niceDm BNE noned .globdule ADD R12,R5,#&140*13 CMP R7,#4: ADDEQ R12,R12,#&140*5 SUBS R7,R7,#1: BNE loop2 .loop MOV R0,#121: MOV R1,#0: MOV R2,#0: SWI "OS_Byte" CMP R1,#255: BNE strkey LDR R6,tinpt: LDRB R6,[R6]: CMP R6,#2: BNE ignoreit BL readjoykey .ignoreit ADR R4,optics: BL checkicons CMP R7,#3: BLT nopurg: CMP R7,#6: BGE nopurg BL dopl: MVNNE R7,#0:.nopurg LDRB R8,flauto: MOVS R8,R8: MOVEQ R7,#6: STREQB R7,flauto MOVS R7,R7: BMI noclick CMP R7,#10: LDREQ R6,opttype: CMPEQS R6,#1: MOVEQ R7,#6 CMP R7,#10: BEQ noclick CMP R7,#9: BEQ redef CMP R7,#6: BGE specsk CMP R7,#3: LDR R6,tinpt: LDRB R3,newin: STRB R3,oldin STRLTB R7,newin: STRLT R7,[R6] LDR R6,tab13: LDRGEB R6,[R6,R7]: LDRGE R5,tsflag LDR R4,[R5]: EORGE R4,R4,R6 BICGE R4,R4,#&80: ORRGE R4,R4,R4,LSL#6: STR R4,[R5] ; if music off, disable editor music LDRB R0,redefkey: STRB R0,oldrkey:MOV R0,#&FF: STRB R0,redefkey STMFD R13!,{R7} BL drawics BL dopl: BLEQ soundctrl LDMFD R13!,{R7}: CMP R7,#6: BLT redotxt .noclick BL scanesc BNE loop BL ackesc .loop2 MOV R0,#0: STR R0,forceplay LDR R5,opttype: MOVS R5,R5: LDMEQFD R13!,{R15} LDR R0,tinpt: LDR R0,[R0]: CMP R0,#2: BNE empire LDR R0,aljoy: LDR R0,[R0]: MOVS R0,R0: BNE empire BL warn: B loop:.empire BL scanesc BEQ loop2: MOV R0,#&7E: SWI "OS_Byte" LDMFD R13!,{R15} .strkey LDRB R10,redefkey: EOR R11,R1,#&FF CMP R1,#119: CMPNE R1,#30: CMPNE R1,#29: CMPNE R1,#28 CMPNE R1,#55: CMPNE R1,#112: BEQ ignoreit LDR R3,tinpt: LDR R3,[R3]: CMP R3,#1: BEQ mousesk CMP R1,#9: BLT nigno: CMP R1,#11: BLE ignoreit:.nigno CMP R10,#7: BGT loop RSB R0,R10,#7: LDR R2,tokeyn: CMP R3,#2: ADDEQ R2,R2,#16 STRB R11,[R2,R0] .endstkey STRB R10,oldrkey:SUBS R10,R10,#1: MVNEQ R10,#0: STRB R10,redefkey .loop2 MOV R0,#121: MOV R1,#0: MOV R2,#0: SWI "OS_Byte" CMP R1,#&FF: BNE loop2 BL joystatus: BVS redotxt: CMP R0,#0: BNE loop2 B redotxt .tab13 EQUD tab1-3 : .specsk CMP R7,#8: BEQ wannasave LDR R0,tinpt: LDR R0,[R0]: CMP R0,#2: BNE jedi LDR R0,aljoy: LDR R0,[R0]: MOVS R0,R0: BNE jedi SUB R0,R7,#5: BL svplex BL warn MVN R0,#0: BL svplex B loop:.jedi CMP R7,#6: BEQ exfade CMP R7,#7: LDREQ R0,opttype: EOREQ R0,R0,#1: STREQ R0,forceplay .exfade SUB R0,R7,#5: BL svplex MOV R0,#1: BL infade: LDMEQFD R13!,{R15} .wannasave MOV R0,#0: BL svplex BL sall .loop2 SWI "OS_Mouse": TST R2,#5: BNE loop2 MVN R0,#0: BL svplex B loop .aljoy EQUD allowjoy .block MOV R0,#ASC("_")-33: BL niceDm STMFD R13!,{R3,R5,R7} LDR R4,wtg: LDR R0,[R4]: MOV R2,#10: MOV R1,#64: BL getbck LDMFD R13!,{R3,R5,R7} B globdule .redef LDR R3,tinpt: LDR R3,[R3]: CMP R3,#1: BEQ mouseinp .norminp ADR R6,yad: MOV R8,#7:.loop3 LDRB R5,[R6],#1: CMP R5,R1,ASR#2: SUBGT R8,R8,#1: BGT loop3 LDRB R5,redefkey: CMP R8,R5: BEQ loop STRB R5,oldrkey: STRB R5,newin: STRB R5,oldin .loop SWI "OS_Mouse": TST R2,#5: BNE loop STRB R8,redefkey: B redotxt .forceplay EQUD 0 .yad EQUB660/4: EQUB 608/4: EQUB 556/4: EQUB490/4 EQUB 430/4: EQUB 378/4 EQUB 0 .redefkey EQUB &FF:.oldrkey EQUB &FF:ALIGN .tkeycodes EQUD 0:.tkeyc EQUD keycodes .colorz EQUD colmapm .colA EQUD&FFFDD3 .colB EQUD&D3D2D0 .redcol EQUD &101213 .sound1 EQUD &1FD4000+&1400-&400*3 ; bodged .tinpt EQUD input .talloj EQUD allowjoy .tsflag EQUD soundflag .tokeyn EQUD Newquays .stpos FNaddr(192,700) .wtg EQUD carriagem .tab1 EQUB 1:EQUB4: EQUB 2 .keytypes EQUS "Left":EQUB0:EQUS"Right":EQUB0 .keytypesAD EQUS "Accelerate":EQUB0:EQUS"Decelerate":EQUB0 .keytypes2 EQUS "Brakes":EQUB0 EQUS "Cruise Control":EQUB0 EQUS "Jets":EQUB13 ALIGN .h24 EQUS "Cash Bonus": EQUB 13 .h60 EQUS "Reverse Controls": EQUB 13 .h256 EQUS "Restart Screen":.h32 EQUB 13 .h62 EQUS "Fast Forwards": EQUB 13 .h63 EQUS "Stop": EQUB 13 .h30 EQUS "Deduct 5 seconds": EQUB 13 .h28 EQUS "Bonus 5 seconds": EQUB 13 .h65 EQUS "Time Warp": EQUB 13 .h26 EQUS "Bonus Score": EQUB 13 ALIGN .optics EQUW 1150: EQUW 680: EQUW 1240: EQUW 580 EQUW 1150: EQUW 680-112: EQUW 1240: EQUW 580-112 EQUW 1150: EQUW 680-224: EQUW 1240: EQUW 580-224 EQUW 32: EQUW 680: EQUW 120: EQUW 580 EQUW 32: EQUW 680-112: EQUW 120: EQUW 580-112 EQUW 32: EQUW 680-224: EQUW 120: EQUW 580-224 EQUW 1140+20: EQUW 270: EQUW 1262+20: EQUW 210 EQUW 1010+20: EQUW 270: EQUW 1120+20: EQUW 210 EQUW 880+20: EQUW 270: EQUW 990+20: EQUW 210 EQUW 150: EQUW 700: EQUW 1100: EQUW 330 EQUW 1110+20: EQUW 270: EQUW 1160+20: EQUW 210 EQUD -1 .soundctrl STMFD R13!,{R14} BL musiccontrol LDR R5,tsflag: LDR R6,[R5] TST R6,#4: MOVEQ R0,#2: MOVNE R0,#1 SWI "Sound_Speaker" \ what a guess! .loop SWI "OS_Mouse": TST R2,#5: BNE loop LDMFD R13!,{R15} .offset EQUB &4C:EQUB&4C:EQUB&50:EQUB&50:EQUB&50 ALIGN .tugtu EQUD got .oldtx EQUD oldxpos2 .howfar2 EQUD spd .furryen EQUD 0 .tscry EQUD scrntop .diceang EQUD 0 .xysiz \ y then x EQUB 28: EQUB 4 EQUB 27: EQUB 3 EQUB 27: EQUB 4 EQUB 29: EQUB 3 EQUB 31: EQUB 3 ALIGN ] enddoopts=P%:P%=doneovercode [OPT T \ R12=screen address \ R1 =decode from \ R2 =colour map \ R3 =read from \ R4 =y-increment \ R5 =y fraction \ R6 =colourmap increment \ R7 =colourmap fraction \ R8 =xsize STMFD R13!,{R14} MOV R14,R3 MOV R5,#64: MOV R7,#64 MOV R9,#31 .loop STR R9,countf:SUB R9,R8,#8: MOV R0,R12 LDRB R11,[R2]:.loop2 LDRB R10,[R1,R9,ASR#2] LDR R3,[R14],#-4 TST R10,#&C0: BICNE R3,R3,#&FF000000 TST R10,#&80: ORRNE R3,R3,R11,LSL#24 TST R10,#&30: BICNE R3,R3,#&FF0000 TST R10,#&20: ORRNE R3,R3,R11,LSL#16 TST R10,#&C: BICNE R3,R3,#&FF00 TST R10,#&8: ORRNE R3,R3,R11,LSL#8 TST R10,#3: BICNE R3,R3,#&FF TST R10,#2: ORRNE R3,R3,R11 STR R3,[R0],#-4 SUBS R9,R9,#4: BPL loop2 ADD R14,R14,R8: SUB R14,R14,#4 ADDS R7,R7,R6,LSL#8: ADC R2,R2,R6,LSR#24 ADDS R5,R5,R4,LSL#1:BCC same:.nosame ADD R12,R12,#&140 ADD R14,R14,#&140 ADD R1,R1,R8,ASR#2 LDR R9,countf SUBS R9,R9,#1: BPL loop LDMFD R13!,{R15}^ .same ADD R1,R1,R8,ASR#2 ADR R11,doneover+60: CMP R11,R2: SUBLT R2,R2,#60 LDR R9,countf:SUBS R9,R9,#1: BPL sameloop LDMFD R13!,{R15}^ .sameloop STR R9,countf:SUB R9,R8,#8: MOV R0,R12 LDRB R11,[R2]:.loop2 LDRB R10,[R1,R9,ASR#2] LDR R3,[R0] TST R10,#&C0: BICNE R3,R3,#&FF000000 TST R10,#&80: ORRNE R3,R3,R11,LSL#24 TST R10,#&30: BICNE R3,R3,#&FF0000 TST R10,#&20: ORRNE R3,R3,R11,LSL#16 TST R10,#&C: BICNE R3,R3,#&FF00 TST R10,#&8: ORRNE R3,R3,R11,LSL#8 TST R10,#3: BICNE R3,R3,#&FF TST R10,#2: ORRNE R3,R3,R11 STR R3,[R0],#-4 SUBS R9,R9,#4: BPL loop2 ADDS R7,R7,R6,LSL#8: ADC R2,R2,R6,LSR#24 ADDS R5,R5,R4,LSL#1:BCC same B nosame .tobanek EQUDbank .countf EQUD 0 .obase1 EQUD base1 .okgamevr EQUD 0 .nogameover MOV R0,#1:.gamevrctrl STR R0,okgamevr: MOV R15,R14 .yesgameover MOV R0,#0: B gamevrctrl .gameover LDR R0,okgamevr: MOVS R0,R0: MOVNE R15,R14 STMFD R13!,{R14} LDR R0,obase1: LDR R0,[R0] LDR R1,tobanek: LDR R1,[R1] ADD R0,R1,R0: ADD R1,R0,#&8000 ADD R0,R1,#160: STR R0,togo2 LDR R0,tbigwas: STR R1,togo SUB R1,R1,#100 MOV R10,#&2800:.loop LDMIA R1!,{R2,R3,R4,R5,R6,R7,R8,R9} STMIA R0!,{R2,R3,R4,R5,R6,R7,R8,R9} SUBS R10,R10,#32: BNE loop MOV R6,#&C0000: MOV R4,#&2000000 ; not a screen reference .loop BL vsync LDR R3,tbigwas:ADD R3,R3,#100 STR R6,dec1o: STR R4,dec2o LDR R12,togo ADR R1,doneover+100 ADR R2,doneover MOV R8,#100: BL doneovercode LDR R6,dec1o: LDR R4,dec2o LDR R12,togo2 LDR R1,tover LDR R3,tbigwas: ADD R3,R3,#260 ADR R2,doneover MOV R8,#104: BL doneovercode LDR R6,dec1o: LDR R4,dec2o ADD R6,R6,#&60000: ADDS R4,R4,#&1000000 ADDCCS R4,R4,R4,ASR#6 BCC loop LDMFD R13!,{R15}^ .togo EQUD &1FE0000-&14000 ; bodged .togo2 EQUD &1FE0000+110-&14000 ; bodged .dec1o EQUD 0 .dec2o EQUD 0 .tover EQUD doneover+&384 .tbigwas EQUD bigwaste .doD44 EQUD doneover+&9C4 .do9A4 EQUD doneover+&6C4 .bodgethistoo EQUD &1FC0000 ; bodged .chkquitg STMFD R13!,{R14}: BL getR0at: EQUD bank2 LDR R12,bodgethistoo: ADD R0,R0,R12 ADD R12,R0,#&4900 LDR R1,do9A4 LDR R2,aFF: MOV R3,R12 MOV R4,#&7F000000: MOV R5,#&1000000: MOV R6,R5: MOV R7,#32: MOV R8,#96 BL doneovercode BL getR0at: EQUD bank2: LDR R12,bodgethistoo: ADD R0,R0,R12 ADD R12,R0,#&4900: ADD R12,R12,#140 LDR R1,doD44 LDR R2,aFF: MOV R3,R12 MOV R4,#&7F000000: MOV R5,#&1000000: MOV R6,R5: MOV R7,#32: MOV R8,#116 BL doneovercode BL ackesc BL clbuf: SWI "OS_ReadC": AND R0,R0,#&DF CMP R0,#ASC("Y") LDMFD R13!,{R15} .aFF EQUD planetcols+180 .doneover ] enddoneovercode=P%+3428:P%=jetcode [OPT T STMFD R13!,{R14} BL goingaway: LDMGTFD R13!,{R15} BL flsee LDR R3,findspeed: LDR R3,[R3] LDR R11,frameno LDR R0,tjflag: LDR R0,[R0]:LDR R4,flsize: MOVS R0,R0 CMPGT R11,#9*8: MOVGT R11,#0: MOVGT R4,#0: MOVS R0,R0 ADD R11,R11,R3: MOVNE R12,R11: RSBEQ R12,R11,#72 ADDNE R4,R4,R3: SUBEQ R4,R4,R3,ASR#2 CMP R12,#36: RSBGE R11,R11,#72 MOVS R4,R4: MOVMI R4,#0 MOVS R11,R11: MOVMIS R11,#0: MOVEQ R4,#0: STR R11,frameno CMP R4,#20*4: MOVGT R4,#20*4: STR R4,flsize LDR R0,twball: LDR R0,[R0]: ADD R0,R0,#&140*20 ADD R0,R0,#12 LDR R1,toscrb100: LDR R12,[R1,#scrntop-scrnbot]: LDR R1,[R1] SUB R2,R1,#&3C0 MOVS R0,R0: LDMMIFD R13!,{R15} CMP R0,R1: LDMGEFD R13!,{R15} CMP R11,#10*8: LDMGEFD R13!,{R15} LDR R3,seed2: MOV R11,R11,ASR#3 MOV R8,R4,LSR#3:ADR R10,flamedata+&38 LDR R9,whatcolf: LDRB R9,[R9]: CMP R9,#6: ADDGT R10,R10,#20*10 ADD R10,R10,R11,LSL#4 ADD R10,R10,R11,LSL#2 MOV R9,#64 MOV R2,#0 SUB R14,R1,#&140*5 .loop EOR R3,R3,R3,RRX ADDCS R3,R3,R3,LSL#13 AND R5,R3,#&FF0000 AND R6,R3,#&FF ADD R6,R6,R5,ASR#16: SUBS R6,R6,#&40: RSBMI R6,R6,#0 MUL R5,R4,R6: MOV R5,R5,ASR#11 ADD R5,R5,R5,LSL#2: MOV R5,R5,LSL#6 RSB R6,R6,#&1FC:AND R7,R3,#&FF00: MUL R7,R6,R7: SUB R7,R7,R6,LSL#15 ADD R6,R5,R7,ASR#22 MOVS R7,R7,ASR#18: RSBMI R7,R7,#0: ADD R7,R7,R5,LSR#9: CMP R7,#40 MOVGE R7,#39: LDRB R8,[R10,R7,ASR#1] ADD R6,R0,R6:CMP R6,R14: BGT maybesmoke CMP R12,R6 CMPLT R2,R8:.dostore STRLTB R8,[R6]:.nosmoke SUBS R9,R9,#1: BNE loop STR R3,seed2: LDMFD R13!,{R15} .whatcolf EQUD upthr .maybesmoke CMP R6,R1: CMPLT R12,R6: CMPLT R2,R8: BGE nosmoke LDRB R5,[R6]: CMP R5,#1: STRLTB R8,[R6] B nosmoke .endlink STMFD R13!,{R14} BL dcash: BL dscore: BL flip: BL dcash: BL dscore LDMFD R13!,{R15} .findspeed EQUD spd .toscrb100 EQUD scrnbot .twball EQUD ballgo .seed2 EQUD &E4536DEA .flsize EQUD 24 .tjflag EQUD jetflag .frameno EQUD 0 .to2cst EQUD base2:.tobcst EQUD scrnbot .refr2disp STMFD R13!,{R14} BL initcsh BL nouge LDR R3,to2cst: LDR R3,[R3]: LDR R4,tobcst: STR R3,[R4] BL refr1disp LDR R3,to2cst: LDR R3,[R3]: LDR R4,tobcst: ADD R3,R3,#&14000 STR R3,[R4] BL refr1disp LDR R3,to2cst: LDR R3,[R3]: LDR R4,tobcst: ADD R3,R3,#&28000 STR R3,[R4] BL refr1disp LDMFD R13!,{R15} : .sfalg EQUD 0 .gbigwase EQUD &2000000-&4000 ; bodged .annoyance \ R12=-1 if not saved MOVVC R12,#0: MVNVS R12,#0: BVC noannoy: STR R12,sfalg MOVS R2,R2: BNE noannoy SWI "OS_ReadEscapeState": BCS eannoy MOV R0,#&FF: LDR R2,gbigwase: MOV R3,#0: SWI "XOS_File" BVS missingd BL goannoy BL securetxt .getgo FNaddr(100,280): EQUD &1F1D1C FNequadd("Protected Disc"): EQUB 0:ALIGN B eannoy .goannoy STMFD R13!,{R14} .noannoy LDR R0,getgo: SUB R0,R0,#19: MOV R1,#222: MOV R2,#14: BL getbck LDMFD R13!,{R15} .missingd BL goannoy BL securetxt: FNaddr(100,280): EQUD &1F1D1C FNequadd("Insert Zones Disc"): EQUB 0:ALIGN BL ackesc .eannoy LDR R12,sfalg: LDMFD R13!,{R15} : .plshde LDR R4,to1esab: LDR R4,[R4]: ADD R4,R4,#&8E00 ADD R4,R4,#&20 LDR R0,topsd: MOV R1,#3:.loop MOV R3,#16:.loop2 LDMIA R0!,{R5,R6,R7,R8,R9,R10,R11,R12} STMIA R4!,{R5,R6,R7,R8,R9,R10,R11,R12} LDMIA R0!,{R5,R6,R7,R8,R9,R10,R11} STMIA R4,{R5,R6,R7,R8,R9,R10,R11} ADD R4,R4,#&260: SUBS R3,R3,#1: BNE loop2 ADD R4,R4,#&280*4: LDR R10,bogw2: LDR R5,boittoo CMP R0,R5: MOVGT R0,R10 SUBS R1,R1,#1: BNE loop MOV R15,R14 .bogw2 EQUD bigwaste .to1esab EQUD base1 .topsd EQUD &1FFB000+&2920+60+4-&C00 ; bodged .boittoo EQUD &1FC0000 ; bodged .pausecont LDR R0,timbanktwo LDR R0,boittoo: ADD R0,R0,#&14000 STMFD R13!,{R0,R14}: BL decompressallicons LDMFD R13!,{R12,R14} LDR R4,to1esab: LDR R4,[R4]: ADD R4,R4,#&9A00 MOV R2,#1 LDR R0,tocoga:.loop3 ADD R0,R0,R12: MOV R3,#14:.loop2 ]:FORG1=0 TO 3:[OPT T LDMIA R0!,{R5,R6,R7,R8} STMIA R4!,{R5,R6,R7,R8} ]NEXT:[OPT T ADD R4,R4,#&100: SUBS R3,R3,#1: BNE loop2 SUBS R2,R2,#1: MOVMI R15,R14 LDR R4,to1esab: LDR R4,[R4]: ADD R4,R4,#&9A00: ADD R4,R4,#&80 LDR R0,toopto: B loop3 .tocoga EQUD &28A0:.toopto EQUD &39E8 .timbanktwo EQUD bank2 .checkicons SWI "OS_Mouse":.ici \ R4 points to icon table \ [0],[2] (-1)=end \ [4,6] \ on exit; R7=icon no./-1 ANDS R2,R2,#5 MVN R9,#0:BEQ exitci:.loop ADD R9,R9,#1 LDMIA R4!,{R5,R6} MOVS R7,R5,ASR#16: MOVMI R15,R14: MOV R8,R6,ASR#16 BIC R5,R5,R7,LSL#16: BIC R6,R6,R8,LSL#16 CMP R0,R5: BLT loop: CMP R0,R6: BGT loop ADD R12,R1,#&1A000 CMP R1,R7: BGT loop: CMP R1,R8: BLT loop .exitci MOV R7,R9: MOV R15,R14 .flamedata ] IF T<>0 THENIF mapcopy>mapptr PRINT "collision problems" endjetcode=P%+456:P%=collision [OPT T STMFD R13!,{R14} MOV R8,#&100:\ ball width LDR R9,TI: LDR R9,[R9]: RSB R9,R9,#&1000: MOV R9,R9,LSL#2 LDR R12,tmcptr LDR R0,[R12]: LDR R1,oldmptr CMP R0,R12: LDMGEFD R13!,{R15} STR R0,oldmptr LDR R4,tvlo2: LDR R5,[R4]: MOVS R5,R5 LDR R4,oldindx: LDR R11,tindx: LDR R11,[R11]: STR R11,oldindx MOVPL R5,R11: MOVPL R11,R4: MOVPL R4,R5 MOVMI R5,R0: MOVMI R0,R1: MOVMI R1,R5 SUBS R4,R4,#&1400000:.loop ADDLT R0,R0,#48: LDRLT R5,[R0,#&2C] ADDLTS R4,R4,R5: BLT loop MOV R4,R4,LSR#20: ADD R0,R0,R4,LSL#20 ADD R4,R11,#&1400000 .loop LDR R5,[R1,#&2C]: CMP R4,R5: SUBGE R1,R1,#48 SUBGE R4,R4,R5: BGE loop MOV R4,R4,LSR#20: ADD R1,R1,R4,LSL#20 .comebk LDR R10,theig: LDR R10,[R10]: MOV R10,R10,ASR#4 \ satisfies R1> object pos >R0 where all are full BL cmpR1R0: MOVLT R2,R0: MOVLT R0,R1: MOVLT R1,R2 LDR R2,txyzif:.loop LDR R3,[R2],#&2C CMN R3,#2: LDMHSFD R13!,{R15} FNfullcmp(3,0): BLE loop: FNfullcmp(1,3): LDMLEFD R13!,{R15} LDR R3,[R2,#8-&2C]: LDRB R5,[R2,#4-&2C] SUB R4,R3,R9: CMP R4,R8: BGT loop ADD R3,R3,R5,LSL#6: SUB R4,R9,R3: CMP R4,R8: BGT loop LDR R3,[R2,#12-&2C]: LDRB R5,[R2,#5-&2C] SUB R4,R3,#&300: CMP R10,R4: BLT loop ADD R4,R3,R5,LSL#5: CMP R10,R4: BGT loop : LDRB R3,[R2,#&2A-&2C]: \ byte7 will do for collision FX LDR R4,tobsjd: LDRB R3,[R4,R3,LSL#3] \ ADD R15,R15,R3,LSL#2 .theig EQUD height \ nothing else between above instruction \ and FXtable .FXtable B die: B bouncelots: B bouncecode: B bouncebit B loop: B bouncer1: B bouncernd: B bonus B destroyXYZ: B engulf .tobsjd EQUD xyzobs+3 .stopfixi LDR R12,tmcptr: LDR R0,[R12]: STR R0,oldmptr MOV R12,#2: STR R12,nomotionha LDR R12,tindx: LDR R12,[R12]: STR R12,oldindx: B stopfix .maymotion LDR R0,nomotionha: SUBS R0,R0,#1: STRGE R0,nomotionha BLT motion: B barrierfix .nomh MOV R12,#2: STR R12,nomotionha: MOV R15,R14 .nomotionha EQUD 0 .oldindx EQUD 0 .initxyzA LDR R12,tmcptr: LDR R0,[R12]: STR R0,oldmptr: LDMFD R13!,{R15} .bouncelots MOV R7,#0: B inb .bouncebit MOV R7,#3: B inb .bouncecode MOV R7,#1:.inb BL storeposb4 LDR R7,tindx: LDR R6,[R7]: LDR R4,[R12] LDR R0,tvlo2A: CMP R0,#&100000: BGE alignback: CMN R0,#&100000: BLT bokgo MOV R0,R6,LSR#20: ADD R10,R4,R0,LSL#20 LDR R3,[R2,#-&2C] MOV R6,R3,LSR#20: MOV R6,R6,LSL#20: EOR R4,R3,R6 BL cmpR3R10 BGE alignback .bokgo SUBS R6,R6,#&1400000: ADDLT R4,R4,#48: LDRLT R10,[R4,#&2C] ADDLT R6,R6,R10 .alignedb MOV R11,R4 LDR R4,cantb4: CMP R11,R4: MOVLT R11,R4 BGE nostopatend LDR R5,[R11,#&2C]: SUB R6,R5,#&20000 MOV R5,R5,ASR#20: ORR R5,R11,R5,LSL#20 SUBS R5,R5,#&1500000: ADDLT R5,R5,#&30 LDRLT R4,[R11,#&2C+&30]: MOVLT R4,R4,ASR#20: ADDLT R5,R5,R4,LSL#20 STR R5,[R2,#-&2C] .nostopatend LDR R4,tvlo2A: LDR R5,[R4]: MOV R5,R5,ASR R7: RSBS R5,R5,#0 LDR R4,tvlo2: STR R5,[R4] LDR R7,tindx: STR R6,[R7] STR R11,oldmptr: STR R11,[R12] BL adjbackdrop B loop .cantb4 EQUD mapcopy+64+48 .alignback ADD R6,R6,#&1400000: LDR R10,[R4,#&2C]: CMP R6,R10 SUBGE R6,R6,R10: SUBGE R4,R4,#48 B alignedb .tvlo2A EQUD velom .engulf STMFD R13!,{R0-R12,R14} MOV R0,#0: MOV R1,#7: BL fllight: BL litit: LDMFD R13!,{R0-R12,R14} B destroyXYZ .bonus STMFD R13!,{R14}: MOV R0,#500: BL incscoreR0: LDMFD R13!,{R14} MOV R5,#&7F000000: STR R5,[R2,#12-&2C]: B loop .bouncer1 BL fullrandR6 LDR R7,txnew: MOV R6,R6,LSL#32-11: MOV R6,R6,LSR#32-11 TST R6,#1: RSBNE R6,R6,#0:STR R6,[R7] LDR R7,redovelo: LDR R6,[R7]: LDR R7,wrvdown: LDR R5,[R7] LDR R7,getrnd: LDR R7,[R7]: EOR R7,R7,R6 AND R4,R7,#&7F00: MOVS R6,R6: SUBPL R6,R6,R4,LSL#7 ADDMI R6,R6,R4,LSL#7 AND R4,R7,#&FF: SUB R4,R4,#&80: ADD R5,R5,R4,LSL#2 LDR R7,redovelo: STR R6,[R7]: LDR R7,wrvdown: STR R5,[R7] B loop .bouncernd BL fullrandR6 LDR R7,txnew: MOV R6,R6,LSL#32-11: MOV R6,R6,LSR#32-11 TST R6,#1: RSBNE R6,R6,#0:STR R6,[R7] LDR R7,redovelo: LDR R6,[R7]: LDR R7,wrvdown: LDR R5,[R7] LDR R7,getrnd: LDR R7,[R7]: EOR R7,R7,R6 AND R4,R7,#&FF00: MOVS R6,R6: SUBPL R6,R6,R4,LSL#7 ADDMI R6,R6,R4,LSL#7 AND R4,R7,#&FF: SUB R4,R4,#&80: ADD R5,R5,R4,LSL#3 LDR R7,redovelo: STR R6,[R7]: LDR R7,wrvdown: STR R5,[R7] B loop .destroyXYZ BL fullrandR6: LDR R7,txnew: MOV R6,R6,LSL#32-12: MOV R6,R6,LSR#32-12 TST R6,#1: RSBNE R6,R6,#0:STR R6,[R7] LDR R7,redovelo: LDR R6,[R7]: LDR R7,wrvdown: LDR R5,[R7] LDR R7,getrnd: LDR R7,[R7]: EOR R7,R7,R6 AND R4,R7,#&FF00: MOVS R6,R6: SUBPL R6,R6,R4,LSL#7 ADDMI R6,R6,R4,LSL#7 AND R4,R7,#&FF: SUB R4,R4,#&80: ADD R5,R5,R4,LSL#3 LDR R7,redovelo: STR R6,[R7]: LDR R7,wrvdown: STR R5,[R7] MOV R5,#&7F000000: STR R5,[R2,#12-&2C]: B loop .die MOV R7,#1: LDR R6,tdeadf: STRB R7,[R6]: B loop .tdeadf EQUD dead .txnew EQUD xnew .wrvdown EQUD vdown:.redovelo EQUD velo .getrnd EQUD time .getR0at BIC R14,R14,#&FC000003: LDR R0,[R14],#4 LDR R0,[R0]: MOV R15,R14 .getR1at BIC R14,R14,#&FC000003: LDR R1,[R14],#4 LDR R1,[R1]: MOV R15,R14 .getR2at BIC R14,R14,#&FC000003: LDR R2,[R14],#4 LDR R2,[R2]: MOV R15,R14 .initxyz LDR R0,isatst: STR R0,oldmptr LDMFD R13!,{R15} .TI EQUD I .tmcptr EQUD mapptr .isatst EQUD mapcopy+64 .oldmptr EQUD mapcopy+64 .txyzif EQUD xyzinfo .tvlo2 EQUD velo .tindx EQUD index .resetprice \ R1 is alterred CMP R1,#2: MOVNE R1,#3: LDR R0,tnum: STRB R1,[R0,#6] LDR R0,ttab: STRB R1,[R0,#24] LDR R1,tmcop MOV R4,#200 \ start price .loop MOV R5,#30:.loop2 LDRB R12,[R1,R5]: CMP R12,#25: BNE nospr ADD R6,R5,#1: LDRB R12,[R1,R6]: CMP R12,#&FF: ADDNE R4,R4,#50 .nospr SUBS R5,R5,#2: BPL loop2 ADD R1,R1,#48: LDR R0,[R1,#&2C]: MOVS R0,R0: BNE loop LDR R0,twr: STR R4,[R0]: MOV R15,R14 .tnum EQUD num:.ttab EQUD tab .tmcop EQUD mapcopy+64 .twr EQUD rstprc ] endcollision=P%:P%=meterscode [OPT T .tvdnwo EQUD vdown .tohei EQUD h .doalt LDR R0,tbotos: LDR R0,[R0] LDR R2,tohei: LDR R1,[R2] CMP R1,#&1C000:MOVGT R4,#&1C000: STRGT R4,[R2] LDRGT R4,tvdnwo: LDRGT R6,[R4]: RSBGT R6,R6,#0 STRGT R6,[R4] MOV R12,#1 ADR R2,altsprs:MOVS R1,R1,ASR#14:ADD R0,R0,#&1500: ADD R0,R0,#&B4:.loop MOVMI R1,#0: CMP R1,#7: MOVGT R1,#7 ADD R2,R2,R1,LSL#3: ADD R2,R2,R1,LSL#4 LDMIA R2!,{R5,R6}: STMIA R0,{R5,R6} ADD R0,R0,#&140 LDMIA R2!,{R5,R6}: STMIA R0,{R5,R6} ADD R0,R0,#&140 LDMIA R2!,{R5,R6}: STMIA R0,{R5,R6} SUBS R12,R12,#1:MOVMI R15,R14 LDR R4,tovelc: LDR R1,[R4]: LDR R2,oldspd: STR R1,oldspd LDR R4,tovdwn: LDR R11,[R4]: LDR R10,oldvdn: STR R11,oldvdn SUB R1,R1,R2: SUB R11,R10,R11: MOV R1,R1,ASR#14 MOV R11,R11,ASR#3: MUL R2,R1,R1: MLA R2,R11,R11,R2 MVN R1,#3:ADR R8,sqrot .loop2 ADD R1,R1,#4:LDR R9,[R8,R1]: CMP R2,R9: BGT loop2 LDR R2,needle: SUB R2,R2,#1: CMP R1,R2: MOVLT R1,R2: STR R1,needle MOVS R1,R1,ASR#2:ADR R2,altsprs+192 ADD R0,R0,#&140*8 B loop .tovdwn EQUD vdown .tbotos EQUD scrnbot .sqrot EQUD 10000:EQUD 40000: EQUD 90000: EQUD 16000 EQUD 25000:EQUD 36000: EQUD 49000: EQUD &7FFFFFFF .oldspd EQUD 0:.tovelc EQUD velo .oldvdn EQUD 0 .needle EQUD 0 .altsprs ] endmeterscode=P%+384:P%=title [OPT T STMFD R13!,{R14} BL allanimate: BL initwd BL yesgameover BL swallow .intitle2 BL vsync BL nomentxt ADR R0,tabwr: MOV R3,#6: BL shove .intital LDR R0,basgon1: LDR R0,[R0]: LDR R1,scrsee: STR R0,[R1] BL clear1 .showtitle .intitle BL notdgame MOV R1,#&14000: MOV R0,R1: BL wrbase BL copyica BL biglogo MVN R0,#&FE: BL noowall2 BL timeoutcl BL swbank BL pensureon LDR R0,tcheat: LDRB R0,[R0]: MOVS R0,R0: BLNE iamacheat BL registration LDR R0,basgon1: LDR R0,[R0]: LDR R1,scrsee: STR R0,[R1] MOV R0,#&7300: ORR R0,R0,#8: MOV R2,#32 MOV R5,#&F6: MOV R4,#&F5: MOV R3,#&F4: BL playicond LDR R0,tndesko: LDRB R0,[R0]: MOVS R0,R0 MOVEQ R0,#&7300: ORREQ R0,R0,#&D8: MOVEQ R2,#32 LDREQ R1,ic1024: BLEQ drawicon MOV R4,#&27 BL zoneno BL titlegrp BL swbank: BL seeme LDR R0,getmes: MOVS R0,R0: BLNE getscr BL overbiglogo2 BL paperFX: BL overbiglogo: BL flip MOV R1,#0: BL wrbbase BL scrollon BL delhead1: LDR R0,getmes: MOVS R0,R0: BLNE getscr2 BL getst: BL grabbckG BL yesangeldust BL letmehaveit MOV R0,#0: STR R0,getmes BL maysavephlog BL ballsparkon .titleloop .loop SWI "OS_Mouse": STR R0,xp: STR R1,yp STR R2,bste MOV R1,#256-71: BL scanne: BEQ goopti BL testzbuts:.backfromtesto BL wibblest BL getxyb: BL chkconzone BL scanesc: BEQ egsitts BL timeout: BGT egsitts2 BL testfirebuts BNE qplay MOV R1,#256-74: BL scanne MOV R1,#256-99: BLNE scanne: BEQ qplay MOV R1,#256-35: BL scanne: BEQ qeditor LDRB R6,bste: TST R6,#5: BEQ loop LDR R4,yp: CMP R4,#584: BLT loop: CMP R4,#716: BGT loop LDR R5,xp MOV R2,#0: MOV R1,#1:ADR R9,tdata:.loop2 LDMIA R9!,{R7,R8}: CMP R5,R7: CMPGT R8,R5: MOVGT R2,R1 ADD R1,R1,#1: CMP R1,#6: BLT loop2 BL hlitet2 ADD R15,R15,R2,LSL#2 LDMFD R13!,{R15} B loop \ if R2 is 0 B playplease B gopassw B goopti B qeditor \ B noeditor \ byebye LDR R0,tnodesk: LDRB R0,[R0]: CMP R0,#1: BEQ nodesktop BL ballsparkoff BL bekind: BL scrolloff: BL bigfadeout: B gooh .finish STMFD R13!,{R14}: BL stopmus BL endvnt: MOV R0,#13: MOV R1,#4:.osbldm SWI "XOS_Byte": LDMFD R13!,{R15} : .gopassw BL scrolloff BL storescr BL pass: .mloop MOV R0,#1: STR R0,getmes B intital .getmes EQUD 0 : .goopti BL scrolloff: BL storescr: MOV R0,#0: BL optcode BL videoCl32 LDR R6,tfp: LDR R5,[R6]: MOVS R5,R5: MOVNE R5,#0: STRNE R5,[R6] BEQ mloop : .playplease BL ballsparkoff BL scrolloff BL curveon BL chkallow: BL bigfadeout: BL clear1 BL swallow: LDMFD R13!,{R15} .qplay BL ballsparkoff: BL scrolloff: BL copyica: BL chkallow: BL bigfadeout: BL clear1 LDMFD R13!,{R15} .qeditor BL ballsparkoff BL scrolloff: BL chkallow: MOV R12,#2: BL inbigfout BL editcode: MOV R1,#0: BL wrbank: BL loadintro BL videoCl B intitle2 .tfp EQUD forceplay .xp EQUD 0:.yp EQUD 0:.bste EQUD 0 .scanquit MOV R1,#256-17: B scanne .scanesc MOV R1,#256-113 .scanne MOV R0,#&81: MOV R2,#&FF: SWI "OS_Byte" CMP R1,#255: MOV R15,R14 .tdata EQUD 32: EQUD 168: EQUD 240: EQUD 376 EQUD 448: EQUD 584: EQUD 656: EQUD 792 EQUD 864: EQUD 1000 .egsitts2 BL scrolloff: MOV R0,#1: BL infade .egsitts BL scrolloff: BL storescr:BL clearall: BL copy: BL copyica BL chexit: BL dohighscores: B mloop .tnodesk EQUD nodesk .tenal EQUD enableall .tabwr EQUD messyes: EQUD 0 EQUD ebe+&FF000000: EQUD 0 EQUD time: EQUD 0 EQUD time+4: EQUD 0 EQUD totext:.totext2 EQUD thetext EQUD reptext:.totext3 EQUD thetext .basgon1 EQUD base1:.basgon2 EQUD base2 .scrsee EQUD scrnbot .tcheat EQUD cheat:.tndesko EQUD nodesk .ic1024 EQUD icons+1024 .getxyb LDR R0,xp: LDR R1,yp: LDR R2,bste MOV R15,R14 .chexit STMFD R13!,{R14} MOV R1,#256-2: BL scanne: BEQ byeb .nobyeb .loop BL scanesc: BEQ loop MOV R0,#&7E: SWI "OS_Byte" LDMFD R13!,{R15}:.byeb LDR R0,tnodesk: LDRB R0,[R0]: CMP R0,#1: BEQ nobyeb BL ballsparkoff MOV R0,#200: MOV R1,#0: SWI "OS_Byte" B gooh .listo STMFD R13!,{R14} BL ackesc BL newgame: BL loadinter BL gameloop BL intable: BL shallicont STMFD R13!,{R0}: BL ackesc: LDMFD R13!,{R0} CMP R0,#1: LDMEQFD R13!,{R15} BL loadintro MOV R0,#&7E: SWI "OS_Byte" BL dohighscores: BL vsync: LDMFD R13!,{R15} .paperFX B getdinfo: .redinfo MOV R5,#&10000: ADD R5,R5,#&B40 ADD R1,R1,#&140*48 ADD R7,R2,#&14000 MOV R12,#0: SUB R4,R5,#4:.loop STR R12,[R7,R4]: SUBS R4,R4,#4 BPL loop \ R2 = wr1 R8= wr2 \ R1=max wr2 .FX01 .loop MOV R12,#5:.loopy2 MOV R4,#0:.loop2 CMP R8,R1: BGE chkride:.override LDR R0,[R7],#4: ADD R8,R8,#4: ADD R2,R2,#4 MOVS R0,R0: BNE loop2 SUBS R12,R12,#1: BPL loopy2 LDR R0,[R8,#-4]: STR R0,[R2,#-4]: MOVS R0,R0: MOVEQ R0,#1: STR R0,[R7,#-4] B loop .chkride SUB R8,R8,R5: SUB R2,R2,R5: SUB R7,R7,R5 CMP R4,#1: MOVGE R15,R14: MOV R4,#1:B override : .boxes MOV R7,#4 ADR R4,binfo MOV R0,#0:.loopE LDR R1,basgon2 SUBS R7,R7,#1: MOVEQ R15,R4 LDR R1,[R1] LDR R2,[R4],#4: LDR R3,[R4],#4 STMFD R13!,{R15} ADD R2,R2,R1 MOV R11,#13 MOV R12,#17:.loop STRB R0,[R2,R12] SUBS R12,R12,#1: BPL loop MOVS R11,R11: BEQ loopE .loop3 ADD R6,R2,#&140 STRB R0,[R6],#1:MOV R12,#16:.loop STR R3,[R6],#4: SUBS R12,R12,#4: BNE loop STRB R0,[R6],#1 SUBS R11,R11,#1: ADD R2,R2,#&140: BNE loop3 LDMFD R13!,{R15} .thingy EQUD &BFDFFF .binfo EQUD-&29C1:EQUD &1A1A1A1A EQUD-&29A1: EQUD &22222222 EQUD-&2981: EQUD &82828282 .loop SWI "OS_Mouse" TST R2,#7: BEQ loop LDR R3,thingy MOV R5,#&CA:.loop2 AND R4,R3,#&FF: CMP R0,R4,LSL#2: SUBGT R6,R0,#64 MOVGT R6,R6,ASR#2: CMPGT R4,R6: MOVGT R15,R14 SUB R5,R5,#&40: MOV R3,R3,LSR#8: CMP R5,#&2A: BLT loop B loop2 .newgame STMFD R13!,{R14} MVN R0,#0: BL nolastplaypos BL nokeys BL totalclear BL flreset2 BL blindoff LDR R0,tstlev: LDRB R0,[R0]: STRB R0,wrlevst BL new BL noshowecode BL getmony: STR R0,startupcsh ADR R0,newgwr: MOV R3,#16: BL shove BL cashcopy BL amiconting: LDMEQFD R13!,{R15} MOV R0,#0: BL getfoot MOV R0,#&14000:.loop LDR R1,accb2: LDR R1,[R1]: ADD R1,R1,R0: LDR R2,accsb STR R1,[R2]: STMFD R13!,{R0} BL dscore:BL dcash: BL dtime: BL dspd LDMFD R13!,{R0}:MOVS R0,R0: MOVNE R0,#0: BNE loop MOV R0,#112: MOV R1,#1: SWI "OS_Byte" BL speedo LDMFD R13!,{R15} .contng STMFD R13!,{R14} BL clearall2 BL clbuf LDR R0,ismp: BL startup: LDR R1,tdpt: STR R0,[R1] BL storecg BL get BL clloadedmus: BL getzono0: BL loadzonemus: BL rdcursc2: BL playlevmus BL junkandfoot BL mnxy: LDMFD R13!,{R14}: B resettime .ismp EQUD map .tdpt EQUD dptr .tstlev EQUD startlev .haltscore ADR R0,kayz: MOV R3,#2: B shove .newgwr EQUD levelon+&FF000000:.wrlevst EQUD 0 .kayz EQUD k1: EQUD 0 EQUD k2: EQUD 500 EQUD xa: EQUD 0 ; why did it used to be &10000 ? EQUD oldsc: EQUD 0 EQUD score: EQUD 0 EQUD ballgo:.bodgeballgo EQUD &2000000 ; bodged EQUD dead+&FF000000:EQUD 0 EQUD squareon: EQUD &FFFF EQUD wicdone+&FF000000: EQUD 0 EQUD got+&FF000000: EQUD &FF EQUD enable: EQUD 0 EQUD score: EQUD 0 EQUD time: EQUD 0 EQUD time+4: EQUD 0 EQUD cash:.startupcsh EQUD 0 .accb2 EQUD base2:.accsb EQUD scrnbot .updatelogo STMFD R13!,{R14} LDR R0,tenal: MOV R1,#1: STR R1,[R0] LDR R0,tbbs2: LDR R0,[R0] ADD R0,R0,#&140 ADD R11,R0,#&28000: B udlogo .biglogo STMFD R13!,{R14}: BL savelogo .udlogo LDR R0,tenal: MOV R1,#1: STR R1,[R0] LDR R0,tbbs2: LDR R0,[R0] ADD R0,R0,#&140 ADD R11,R0,#&14000 .udlogo LDR R1,tlogo LDR R2,screndd2 .loop LDMIA R1!,{R3,R4,R5,R6,R7,R8,R9,R10} STMIA R0!,{R3,R4,R5,R6,R7,R8,R9,R10} STMIA R11!,{R3,R4,R5,R6,R7,R8,R9,R10} CMP R11,R2: BLT loop LDMFD R13!,{R15} .tbbs2 EQUD base2 .tlogo EQUD logodata .wrcomplflg STR R0,complflg: MOV R15,R14 .complflg EQUD 0 .overbiglogo2 MOV R12,#0: B inobl .overbiglogo MOV R12,#&14000:.inobl STMFD R13!,{R14}: BL savelogo LDR R0,tenal: MOV R1,#1: STR R1,[R0] LDR R0,tbbs2: LDR R0,[R0] ADD R0,R0,#&140 ADD R11,R0,R12 LDR R1,tlogo LDR R2,screndd2 SUB R2,R2,#&14000: ADD R2,R2,R12 LDR R10,tabtoy LDRB R3,complflg: MOVS R3,R3 LDRNE R3,moveq: LDREQ R3,ldreq: STR R3,pokeq .loop LDRB R3,[R1],#1: MOVS R12,R3: LDREQB R3,[R0] STREQB R3,[R1,#-1] .pokeq LDREQB R9,[R10,R3]: CMPEQ R3,R9: MOVEQ R3,R12 STREQB R3,[R1,#-1] STRNEB R3,[R0],#1: STRNEB R3,[R11],#1: ADDEQ R0,R0,#1 ADDEQ R11,R11,#1 CMP R11,R2: BLT loop LDMFD R13!,{R15} .ldreq LDREQ R9,[R10,R3] .moveq ADD R9,R3,#1 .screndd2 EQUD &2000000-&18000 ; bodged .savelogo LDR R1,tlogo: MOV R0,#&3C00 MOV R8,#0 LDR R2,tabtoy:.loop LDRB R4,[R1],#1: LDRB R7,[R2,R4]: CMP R7,R4 STRNEB R8,[R1,#-1]: SUBS R0,R0,#1: BNE loop MOV R15,R14 .tabtoy EQUD fadetable+256 ] endtitle=P%:P%=syscode [OPT T STMFD R13!,{R14} ADR R12,sysintro:.loop LDRB R0,[R12],#1: CMP R0,#0: BLNE smtxt CMP R0,#0: BNE loop ADD R11,R10,R11 MOV R8,#26 MOV R9,#28 MOV R7,#0 EOR R11,R11,R11,LSL#8: EOR R11,R11,R11,LSL#17 EOR R11,R11,R11,LSL#23 \ R11 =seed, R8=lastchar .loop2 ADR R12,sysfreq: MOV R0,#0 EOR R11,R11,R11,ASR#17 ADD R2,R8,#&77 MUL R11,R2,R11 ADD R11,R11,R9 AND R2,R11,#&FF MUL R6,R8,R9: BL getsysindR6 MUL R4,R5,R2 MVN R2,#0:.loop ADD R2,R2,#1: MOV R6,#1: BL getsysindR6 SUBS R4,R4,R5,LSL#8: BPL loop CMP R2,#26 MOVNE R8,R2:ADDNE R0,R2,#14: BLNE smtxt ADD R7,R7,#&100 AND R2,R11,#&700: ADD R2,R2,#&300 CMP R8,#26: SUBEQ R2,R2,#&200 CMP R7,R2: BLT loop2 LDMFD R13!,{R15} .getsysindR6 ; R12 to sys ; R6 bytes through ; R0 is pending zeros ; can use R1,R3 ; R5 is read .loop CMP R0,#&100: ANDGE R5,R0,#&F: BGE readsysbyte SUBS R0,R0,#1: MOVGT R5,#0: BGT readsysbyte LDRB R5,[R12],#1: CMP R5,#&70: BLT readsysbyte SUBS R0,R5,#&80: MOVPL R5,#0: ADDPL R0,R0,#&180: BPL readsysbyte SUBS R6,R6,#1: MOVEQ R5,#0: ANDNE R5,R5,#15 .readsysbyte SUBS R6,R6,#1: BGT loop MOV R15,R14 .sysintro OPT FNut("SYSTEM: ",0): EQUB 0 ALIGN .joined \ R0=no. STMFD R13!,{R14} STMFD R13!,{R0}: BL vsync: LDMFD R13!,{R0} MOV R11,#0 ADR R1,t2: LDRB R1,[R1,R0] LDR R4,gonebs: LDR R4,[R4]: SUB R4,R4,#&1400 TST R1,#1: LDR R2,adr1: BL horizjn TST R1,#2: LDR R2,adr2: BL horizjn TST R1,#4: LDR R2,adr3: BL vertjn TST R1,#8: LDR R2,adr4: BL vertjn LDMFD R13!,{R15} .adr1 EQUD &AF2C:.adr2 EQUD &DEAC .adr3 EQUD &D988:.adr4 EQUD &D9B0 .t2 EQUD&010101FF:EQUD1 .horizjn ADD R0,R2,R4: BNE horizjo ADD R6,R0,#&14000 MOV R5,#34:.loop LDRB R7,[R6,#-1]: STRB R7,[R0,#-1] LDR R7,[R6],#&140: MOV R12,R7,LSR#16: STRB R12,[R0,#2] MOV R12,R7,LSR#8: STRB R12,[R0,#1]: STRB R7,[R0],#&140 SUBS R5,R5,#1:BNE loop MOV R15,R14 .horizjo STRB R11,[R0,#-1]: STRB R11,[R0,#-2] STR R11,[R0],#&140 MOV R5,#32:LDR R6,dodododo:LDR R7,therop: .loop STRB R6,[R0,#-1]: STRB R6,[R0,#-2] STR R6,[R0],#&140: EOR R6,R6,R7: SUBS R5,R5,#1 BNE loop STRB R11,[R0,#-1]: STRB R11,[R0,#-2] STR R11,[R0],#&140 MOV R15,R14 .gonebs EQUD base1 .dodododo EQUD &D0D0D0D0 .therop EQUD &03030303 .vertjn ADD R0,R2,R4: BNE vertjo ADD R6,R0,#&14000 MOV R5,#36:.loop LDR R7,[R6,#&140]: STR R7,[R0,#&140] LDR R7,[R6,#&280]: STR R7,[R0,#&280] ADD R6,R6,#4: ADD R0,R0,#4: SUBS R5,R5,#4: BNE loop: MOV R15,R14 .vertjo MOV R6,#0:MOV R5,#34:.loop STRB R6,[R0,#&140] STRB R6,[R0,#&280] STRB R6,[R0,#&3C0] STRB R6,[R0],#1 MOVS R6,R6: MOVEQ R6,#&D3 SUB R5,R5,#1: CMP R5,#1: MOVEQ R6,#0: EORNE R6,R6,#3 BGE loop MOV R15,R14 ] endsyscode=P%:P%=xyzcdee [OPT T .bothwaysa CMP R6,#&80: BGE subsways ADD R6,R6,#1 BIC R7,R7,#&80 CMP R6,R7: ORRGE R6,R6,#&80: STRB R6,[R0,#&2B] LDR R5,[R0,#&28]: BIC R5,R5,#&FF000000 BIC R5,R5,#&FF0000: LDR R6,[R0,#&18]: ADD R6,R6,R5 STR R6,[R0,#&18]: B noanimate : .subsways SUB R6,R6,#1: CMP R6,#&80 MOVEQ R6,#0: STRB R6,[R0,#&2B] LDR R5,[R0,#&28]: BIC R5,R5,#&FF000000 BIC R5,R5,#&FF0000: LDR R6,[R0,#&18]: SUB R6,R6,R5 STR R6,[R0,#&18]: B noanimate .txyzifno EQUD xyzinfo .xyzstack EQUD 0 .xyzcode STMFD R13!,{R14} BL BlipTracker STR R13,xyzstack LDR R13,tscbott: LDR R13,[R13,#scrntop-scrnbot] MOV R0,#0: STR R0,didit LDR R0,txyzifno .loop LDR R1,[R0],#&2C: CMN R1,#2: BLO loop SUB R0,R0,#&2C .loop6 MOV R12,#0: MOV R11,#&FF .loop SUB R0,R0,#&2C LDR R4,txyzifno: CMP R0,R4: BLT mayBmore LDR R4,gtdps: LDRB R4,[R4]: LDRB R6,[R0,#&21] SUBS R6,R6,R4: ADDMI R6,R6,#8 STRB R6,[R0,#&21]: BPL noanimate LDRB R6,[R0,#&2B] LDRB R7,[R0,#&20]: TST R7,#&80: BNE bothwaysa ADD R6,R6,#1 CMP R6,R7: MOVGE R6,#0: STRB R6,[R0,#&2B] LDRLT R5,[R0,#&28]: BICLT R5,R5,#&FF000000 BICLT R5,R5,#&FF0000: LDRLT R6,[R0,#&18]: ADDLT R6,R6,R5 LDRGE R6,[R0,#&1C]: STR R6,[R0,#&18] .noanimate LDMIA R0,{R4-R10} CMP R7,#&2000000: BGT loop ; not a screen refer. LDR R4,gtdps: LDR R4,[R4] MOVS R9,R9: BEQ loop STR R12,[R0,#&14] AND R4,R5,R11: AND R5,R11,R5,LSR#8 LDR R11,tscbott: LDR R11,[R11] SUB R3,R11,#&3C0:CMP R8,R3: BGE maydbal:.retmdb MOV R14,R9,LSR#24: EOR R9,R9,R14,LSL#24 MOV R3,R9,ASR#8: MUL R12,R3,R7: MOV R7,R12,ASR#19: ADD R7,R7,R7,LSL#2 SUB R12,R8,R7,LSL#6:MUL R6,R3,R6: ADD R8,R12,R6,ASR#19 LDR R3,[R0,#&24]: ADD R8,R8,R3,ASR#16 MOV R1,R8 MOV R7,R3,LSL#32-16 MOV R3,R6 ADD R6,R12,#&140: SUB R6,R6,#1 LDR R2,hnuml: CMP R2,R0 STR R0,ournought: BEQ intowloop1 MOV R0,R3,LSL#32-19: MOV R0,R0,LSR#32-21: ADD R0,R0,R7,LSR#32-21 SUBS R0,R0,#&200000: SUBGE R0,R0,#&200000: ADDGE R8,R8,#1 SUB R0,R0,R9 MOV R3,R14,LSL#21-8:SUB R3,R3,#&200000 LDR R2,xyzsprmod: MOVS R2,R2: BEQ nohiresxyz LDR R7,cfhirez: CMP R10,R7: BGT nohiresxyz ; bigwaste+6000 >bigwaste ADD R10,R2,R10,LSL#2 MOV R9,R9,ASR#1: MOV R5,R5,LSL#1: MOV R4,R4,LSL#1 ADD R0,R0,R9,ASR#1: ADD R3,R3,R9,ASR#1 .nohiresxyz ; this first loop is to find out which plotter to use ; .loop1 ADDS R3,R3,R9: ADDMI R10,R10,R4: BMI ork:.loop4 MOV R2,R0 MOV R7,R4: SUB R6,R6,#&140: SUB R12,R12,#&140: SUB R8,R8,#&140: MOV R1,R8 CMP R1,R13: BLT sloop6 CMP R1,R12: BLT intoLHS CMP R1,R11: ADD R10,R10,R7: BGE orkie:.loop2 ADDS R2,R2,R9:BMI ork2:LDRB R14,[R10,-R7]: MOVS R14,R14 BEQ noseexyz:.loop3 CMP R6,R1: BLT endrow STRGEB R14,[R1],#1: SUBS R2,R2,#&200000: BPL loop3 SUBS R7,R7,#1: BNE loop2 ; hey wow! did a row and no clipping necessary! CMP R9,#&210000: BGT bsforkie B sforkie .cfhirez EQUD bigwaste .ork2 SUBS R7,R7,#1: BNE loop2 .orkie SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL loop4 .ork SUBS R5,R5,#1: BNE loop1 .sloop6 LDR R0,ournought B loop6 .xyzsprmod EQUD xyzhrsprs-4*(xyzsprs) ; ; draw it in white (selected) ; .intowloop1 MOV R0,R3,LSL#32-19: MOV R0,R0,LSR#32-21: ADD R0,R0,R7,LSR#32-21 SUBS R0,R0,#&200000: SUBGE R0,R0,#&200000: ADDGE R8,R8,#1 SUB R0,R0,R9: MOV R3,R14,LSL#21-8 .wloop1 ADDS R3,R3,R9: ADDMI R10,R10,R4: BMI work:.wloop4 MOV R2,R0 MOV R7,R4: SUB R6,R6,#&140: SUB R12,R12,#&140: SUB R8,R8,#&140: MOV R1,R8 CMP R1,R13: BLT sloop6 CMP R1,R11: ADD R10,R10,R7: BGE workie:.wloop2 ADDS R2,R2,R9: BMI work2: LDRB R14,[R10,-R7]: MOVS R14,R14 BEQ wnoseexyz:MOV R14,#&FF:.wloop3 CMP R6,R1: BLT endwrow CMP R1,R12: ADDLT R1,R1,#1 STRGEB R14,[R1],#1: SUBS R2,R2,#&200000: BPL wloop3 .work2 SUBS R7,R7,#1: BNE wloop2 .workie SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL wloop4 .work SUBS R5,R5,#1: BNE wloop1 B sloop6 ; next version if starts off LHS ; .lloop1 ADDS R3,R3,R9: ADDMI R10,R10,R4: BMI lork:.lloop4 MOV R2,R0 MOV R7,R4: SUB R12,R12,#&140: SUB R8,R8,#&140: MOV R1,R8 CMP R1,R13: BLT sloop6 .intoLHS CMP R1,R11: ADD R10,R10,R7: BGE lorkie:.lloop2 ADDS R2,R2,R9:BMI lork2:LDRB R14,[R10,-R7]: MOVS R14,R14 BEQ lnoseexyz:.lloop3 CMP R1,R12: ADDLT R1,R1,#1 STRGEB R14,[R1],#1: SUBS R2,R2,#&200000: BPL lloop3 .lork2 SUBS R7,R7,#1: BNE lloop2 .lorkie SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL lloop4 .lork SUBS R5,R5,#1: BNE lloop1 B sloop6 ; ; next version if went off RHS once ; .rloop1 ADDS R3,R3,R9: ADDMI R10,R10,R4: BMI rork:.rloop4 MOV R2,R0 MOV R7,R4: SUB R6,R6,#&140: SUB R8,R8,#&140: MOV R1,R8 CMP R1,R13: BLT sloop6 CMP R1,R11: ADD R10,R10,R7: BGE rorkie:.rloop2 ADDS R2,R2,R9: BMI rork2:LDRB R14,[R10,-R7]: MOVS R14,R14 BEQ rnoseexyz:.rloop3 CMP R6,R1: BLT endrow STRGEB R14,[R1],#1: SUBS R2,R2,#&200000: BPL rloop3 .rork2 SUBS R7,R7,#1: BNE rloop2 .rorkie SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL rloop4 .rork SUBS R5,R5,#1: BNE rloop1 B sloop6 : .ournought EQUD 0 .hnuml EQUD 0 .notwhite MOV R0,#0 .streflsh STR R0,hnuml: MOV R15,R14 .manspd EQUD velo .gtdps EQUD spd .mitg EQUD time .endrow SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL rloop4 SUBS R5,R5,#1: BNE rloop1: B sloop6 .endwrow SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL wloop4 SUBS R5,R5,#1: BNE wloop1: B sloop6 : .noseexyz ADD R1,R1,R2,LSR#21 BIC R2,R2,#&FE00000: SUB R2,R2,#&200000: ADD R1,R1,#1 SUBS R7,R7,#1: BNE loop2 CMP R1,R11: BGE sloop6 SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL loop4 SUBS R5,R5,#1: BNE loop1: B sloop6 : .rnoseexyz ADD R1,R1,R2,LSR#21 BIC R2,R2,#&FE00000: SUB R2,R2,#&200000: ADD R1,R1,#1 SUBS R7,R7,#1: BNE rloop2 CMP R1,R11: BGE sloop6 SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL rloop4 SUBS R5,R5,#1: BNE rloop1: B sloop6 : .lnoseexyz ADD R1,R1,R2,LSR#21 BIC R2,R2,#&FE00000: SUB R2,R2,#&200000: ADD R1,R1,#1 SUBS R7,R7,#1: BNE lloop2 CMP R1,R11: BGE sloop6 SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL lloop4 SUBS R5,R5,#1: BNE lloop1: B sloop6 : .wnoseexyz ADD R1,R1,R2,LSR#21 BIC R2,R2,#&FE00000: SUB R2,R2,#&200000: ADD R1,R1,#1 SUBS R7,R7,#1: BNE wloop2 CMP R1,R11: BGE sloop6 SUBS R3,R3,#&200000: SUBPL R10,R10,R4: BPL wloop4 SUBS R5,R5,#1: BNE wloop1: B sloop6 : .tscbott EQUD scrnbot .didit EQUD0 .mayBmore LDR R3,didit: MOVS R3,R3 LDR R13,xyzstack: BLEQ stick LDMFD R13!,{R15} .t11base EQUD base1 .maydbal LDR R3,didit: MOVS R3,R3: BNE retmdb: STR R11,didit LDR R13,xyzstack STMFD R13!,{R0-R2,R4-R12,R14} BL stick LDMFD R13!,{R0-R2,R4-R12,R14} LDR R13,tscbott: LDR R13,[R13,#scrntop-scrnbot] B retmdb .initstarpat STMFD R13!,{R14} LDR R0,t11base: LDR R5,[R0] LDR R10,mapstar \ 0-1=X<<8, 2-3=Y<<6, 4=col,5=dist, 6-7=oldcols MOV R3,#150 LDR R0,tstab1 .loop .loop1 BL randR6:AND R2,R6,#&FF: CMP R2,#&E0: BGT loop1 BL randR6:BIC R6,R6,#1 AND R6,R6,#&3F8: CMP R6,#&280: SUBGT R6,R6,#&280 ORR R6,R6,R2,LSL#18: MOV R6,R6,LSL#6: STR R6,[R10],#4 MOV R9,R6,LSR#24: MOV R12,R9,LSL#9 ADD R12,R12,R9,LSL#7: MOV R9,R6,LSL#16 ADD R12,R12,R9,LSR#21 BL randR6: MOV R11,R6,LSL#8 .loop3 BL randR6: AND R6,R6,#&1F: CMP R6,#&14: BGE loop3 LDRB R6,[R0,R6] LDRB R7,[R12,R5]!:ORR R6,R6,R11 ORR R6,R6,R7,LSL#16 LDRB R7,[R12,#1]:ORR R6,R6,R7,LSL#24 STR R6,[R10],#4 SUBS R3,R3,#1: BNE loop BL swallow LDMFD R13!,{R15} .mapstar EQUD starmap .tstab1 EQUD startable : .currpat EQUB 2:.chcount EQUB 0:.phi EQUB 0:ALIGN .seedd EQUS "Qn7" .tspsi EQUD specsin .dosomething STMFD R13!,{R14} BL vsync LDR R0,tspsi ADD R6,R6,R0 LDRB R2,phi: ADD R2,R2,#7: STRB R2,phi AND R2,R2,#&FF LDR R0,[R0,R2,LSL#2]: SUB R0,R0,#&80 LDR R4,seedd LDRB R2,currpat: LDRB R1,chcount: BL randR6 AND R6,R6,#3: ADD R1,R1,R6: CMP R1,#&100 STRB R1,chcount: BLT noch BL randR6: AND R2,R6,#3: STRB R2,currpat:.noch STR R4,seedd LDR R10,t11base: LDR R5,[R10] LDR R10,mapstar MOV R3,#150:.loop LDR R7,[R10]: MOV R9,R7,LSR#24: MOV R12,R9,LSL#9 ADD R12,R12,R9,LSL#7: MOV R9,R7,LSL#16 ADD R12,R12,R9,LSR#21: LDRB R9,[R10,#4]: LDRB R8,[R10,#6] LDRB R11,[R12,R5]!: CMP R11,R9: STREQB R8,[R12] LDRB R11,[R12,#1]: LDRB R8,[R10,#7]: CMP R11,R9 STREQB R8,[R12,#1] : CMP R2,#1: BEQ rotate CMP R2,#2: BEQ rotate2 CMP R2,#3: BEQ sinusoid .lateral LDRB R8,[R10,#5]: ADD R8,R8,#&100: ADD R7,R7,R8,LSR#4: AND R8,R7,#&FF00: CMP R8,#&10000: SUBGE R7,R7,#&10000 : .retfrpat STR R7,[R10],#8: MOV R9,R7,LSR#24: MOV R12,R9,LSL#9 ADD R12,R12,R9,LSL#7: MOV R9,R7,LSL#16 ADD R12,R12,R9,LSR#21: LDRB R8,[R10,#-4]: LDRB R9,[R12,R5]! STRB R9,[R10,#-2]: MOVS R9,R9: STREQB R8,[R12] LDRB R9,[R12,#1]: STRB R9,[R10,#-1]: MOVS R9,R9 STREQB R8,[R12,#1] SUBS R3,R3,#1: BNE loop ADR R4,bugash: BL checkicons STMFD R13!,{R0-R2} CMN R7,#1: BNE prsdbj: BL testfirebuts MOVNE R7,#0:.prsdbj LDMFD R13!,{R0-R2} STMFD R13!,{R7}: BL scandash: LDMFD R13!,{R7} LDMFD R13!,{R15} .rotate MOV R8,R7,LSR#16: BIC R9,R7,R8,LSL#16 RSB R11,R8,#&6000:RSB R12,R9,#&5000 SUBS R8,R8,R12,ASR#9: ADDMI R8,R8,#&10000 CMP R8,#&10000: SUBGT R8,R8,#&10000 ADDS R9,R9,R11,ASR#9 ADDMI R9,R9,#&A000: CMP R9,#&10000: SUBGT R9,R9,#&10000 ORR R7,R9,R8,LSL#16 B retfrpat .rotate2 MOV R8,R7,LSR#16: BIC R9,R7,R8,LSL#16 RSB R11,R8,#&6000:RSB R12,R9,#&2800 ADDS R8,R8,R12,ASR#8: ADDMI R8,R8,#&10000 CMP R8,#&10000: SUBGT R8,R8,#&10000 SUBS R9,R9,R11,ASR#9 ADDMI R9,R9,#&A000: CMP R9,#&10000: SUBGT R9,R9,#&10000 ORR R7,R9,R8,LSL#16: B retfrpat .bugash EQUW 1090: EQUW 710:EQUW 1200: EQUW 660 EQUW 1090: EQUW 620:EQUW 1200: EQUW 570 EQUW 1085: EQUW 800: EQUW 1205: EQUW 730 EQUW 0: EQUW 1023: EQUW 1279: EQUW 0 EQUD -1 .txyzinfo EQUD xyzinfo .txyzspr EQUD xyzsprs .tmapcopy EQUD mapcopy+&40 .sinusoid \ R0 = sine LDRB R8,[R10,#5]: MUL R8,R0,R8: MOV R8,R8,ASR#6: ADDS R7,R7,R8,LSL#16 AND R8,R7,#&C0000000 B lateral : .getxyzmap2 ADD R2,R2,#1 AND R2,R2,#255 .getxyzmap \ R2 = start level LDR R0,txyzinfo ADR R1,xyzobs LDR R3,txyzspr ADR R4,xyzmap LDR R12,tmapcopy MOV R11,#0 CMP R2,#0: BEQ mapfound .clexinf MVNEQ R2,#0: STREQ R2,[R0]: BEQ rstrecoil .loop LDR R5,[R4],#16: CMN R5,#2: BEQ clexinf:BLO loop SUB R4,R4,#12 SUBS R2,R2,#1: BNE loop .mapfound LDR R6,[R4]: MOVS R6,R6: STRMI R6,[R0]: BMI rstrecoil ADD R6,R6,R12: STR R6,[R0]: STR R6,[R0,#xyzblip-xyzinfo+&10] LDR R6,[R4,#4]: STR R6,[R0,#8]: STR R6,[R0,#xyzblip-xyzinfo+&14] LDR R6,[R4,#8]: STR R6,[R0,#12]: STR R6,[R0,#xyzblip-xyzinfo+&18] LDRB R9,[R4,#12]: ADD R6,R1,R9,LSL#3 LDRB R8,[R6]: LDRB R7,[R6,#1]: MUL R8,R7,R8 ADD R9,R8,R9,LSL#16: STR R9,[R0,#&28] LDR R7,[R6,#4]: BIC R7,R7,#&FF<<24 ADD R7,R7,R3: STR R7,[R0,#&18]: STR R7,[R0,#&1C] LDR R7,[R6]: BIC R8,R7,#&FF0000 LDRB R9,[R4,#13]: ORR R8,R8,R9,LSL#16: STR R8,[R0,#4] LDRB R9,[R6,#2]: STR R9,[R0,#&20] STR R11,[R0,#&10]: STR R11,[R0,#&14] SUB R8,R0,#xyzinfo-xyzblip MOV R11,#0: STR R11,[R8]: STR R11,[R8,#4]: STR R11,[R8,#8] LDRB R11,[R0,#6]: STMFD R13!,{R14}: BL getaction11: STR R11,[R8,#12] STR R11,[R8,#&1C]: STR R11,[R8,#&28] LDMFD R13!,{R14} MVN R11,#0: STR R11,[R8,#&20]: STR R11,[R8,#&24]: STR R11,[R8,#&28] ADD R4,R4,#16: ADD R0,R0,#&2C: B mapfound ] endxyzcdee=P%:P%=bouncer [OPT T .toebe EQUD ebe .ddead EQUD dead .dsqon EQUD squareon .tocsh EQUD cash .glon EQUD levelon .toscbot EQUD scrnbot .tobas2 EQUD base2 .ttimo EQUD time .goscor EQUD score .amiediting EQUD playtesting .again LDR R0,toebe: MOV R1,#0: STRB R1,[R0] LDR R0,amiediting: LDR R0,[R0]: MOVS R0,R0: MOVNE R15,R14 STMFD R13!,{R14} BL haltscore BL nokeys BL chkcash BL letseecode BL flip3 LDR R0,ttimo: MOV R1,#100: LDRB R2,[R0,#3]: CMP R2,#9: BEQ nomore LDRB R1,[R0,#3] LDRB R2,[R0,#2]: ADD R2,R2,R2,LSL#2: ADD R1,R1,R2,LSL#1 LDRB R2,[R0,#1]: ADD R2,R2,R2,LSL#2: ADD R2,R2,R2,LSL#1 ADD R1,R1,R2,LSL#2 LDRB R2,[R0]: MOV R3,#600: MLA R1,R2,R3,R1:.nomore LDR R2,tocsh: LDR R3,[R2]: ADD R3,R3,#50: ADD R3,R3,R1,LSL#1 STR R3,[R2] LDR R3,goscor: LDR R2,[R3]: ADD R2,R2,#250: STR R2,[R3] BL cashcopy BL refr2disp MOV R2,#25:.loop BL vsync SUBS R2,R2,#1: BPL loop BL clbuf LDR R0,glon: LDRB R1,[R0]: ADD R1,R1,#1: STRB R1,[R0] BL get BL clloadedmus: BL getzono0: BL loadzonemus: BL rdcursc2: BL playlevmus BL junkandfoot \\\\ LDR R1,toebe: MOV R0,#12: STRB R0,[R1] BL blindoff BL flreset2 BL calc BL storecg ; for continuegame LDMFD R13!,{R15} .doom STMFD R13!,{R14} BL maypurgeskid BL haltscore BL nowarpffwd BL chkcash BL blindoff BL flreset2: BL calc BL resetxyzs LDR R0,toebe: MOV R1,#0: STRB R1,[R0] LDR R0,ddead: STRB R1,[R0] LDR R0,dsqon: MOV R1,#&FF: ORR R1,R1,#&FF00: STR R1,[R0] LDR R0,tocsh: LDR R1,[R0]: SUBS R1,R1,#250: MVNCC R1,#0 STR R1,[R0]: BL cashcopy: LDMCCFD R13!,{R15} BL resetit: BL nokeys: BL initbombstack BL restart: BL oldstars LDR R0,toebe: MOV R1,#12: STRB R1,[R0] LDMFD R13!,{R15} : .mopo EQUD &D32F0201:.coro EQUD -&5590-18*&140 .mopo2 EQUD&D31F1D1C .togoy EQUD got .engtype EQUD 0 .wenttop EQUD 0 .inventries EQUD 0 .inventory MOV R0,#114 LDR R6,togoy:.gotR6 STR R0,comno MOV R11,#255: STR R11,engtype MOV R12,R6:.loop LDRB R3,[R12],#1: AND R4,R3,#&1F: CMP R4,#18 MOVEQ R4,R3,LSR#5: STREQ R4,engtype: CMP R3,#255: BNE loop STMFD R13!,{R14} MVN R11,#0: MVN R12,#0 LDR R2,mopo: LDR R3,coro MVN R4,#0: MVN R5,#0 \ R4 = 'ij' num. rows \ R5 = 'j' num items .loop ADD R5,R5,#1 LDRB R0,[R6,R5] CMP R0,R11: CMPNE R0,R12: BEQ ignit ADD R4,R4,#1 CMP R0,#12: BLE ignit CMP R0,#17: BGE ignit SUB R10,R0,#13: EOR R10,R10,#1: ADD R10,R10,#13 MOV R11,R12: MOVNE R12,R10 .ignit CMP R0,#&FF: BNE loop MVN R11,#0: MVN R12,#0 STR R4,inventries CMP R4,#10: SUBGE R3,R3,#&780 CMP R4,#11: SUBGT R3,R3,#&280 STR R3,wenttop ADD R10,R3,#&12C LDR R0,comno: BL handycomment MOV R3,R10:MVN R5,#0:STR R5,gotaeng:.loop ADD R5,R5,#1: LDRB R0,[R6,R5] CMP R0,#3: STRLE R0,gotaeng AND R7,R0,#&1F: CMP R7,#18: BEQ loop CMP R0,#&FE: CMPNE R0,#&FD: BEQ loop CMP R0,R11: CMPNE R0,R12: BEQ loop ADD R3,R3,#&780 CMP R0,#&FF: BEQ chkgoteng AND R0,R0,#&3F: ADD R0,R0,#10:BL handycomment LDRB R0,[R6,R5]: CMP R0,#3: BLE engo: CMP R0,#12: BLE loop CMP R0,#17: BGE loop MOV R7,R5: SUB R10,R0,#13: EOR R10,R10,#1: ADD R10,R10,#13 .loop2 ADD R7,R7,#1: LDRB R0,[R6,R7] CMP R0,#&FF: BEQ loop CMP R0,R10: BNE loop2: MOV R0,#62: BL hcomment ADD R0,R10,#10: BL hcomment MOV R12,R11: MOV R11,R10 B loop .engo LDRB R0,engtype: CMP R0,#255: BEQ loop ADD R0,R0,#117: BL hcomment: B loop .comno EQUD 0 .chkgoteng LDR R0,gotaeng: MOVS R0,R0:LDMPLFD R13!,{R15} LDR R2,mopo2: MOV R0,#3: BL handycomment LDMFD R13!,{R15} .hcomment STMFD R13!,{R0-R12,R14} BL dcomment LDMFD R13!,{R0-R12,R15} .gotaeng EQUD -1 .loseeupgs LDR R0,gote:.loop LDRB R1,[R0],#1: CMP R1,#255: MOVEQ R15,R14 AND R1,R1,#&1F: CMP R1,#18: BNE loop .loop LDRB R1,[R0],#1: STRB R1,[R0,#-2] CMP R1,#255: BNE loop: MOV R15,R14 : .gote EQUD got .stbe EQUD 0 .refer EQUD 0 .ensureeok MVN R2,#0:LDR R10,gote:.loop LDRB R1,[R10],#1: CMP R1,#3: MOVLE R2,R1 CMP R1,#255: BNE loop STR R2,gotaeng: MOVS R2,R2: MOVPL R10,#5: MOVMI R10,#4 LDR R3,numengo: STRB R10,[R3] STRB R10,tab: MOV R15,R14 .numengo EQUD num .getstbe ADR R10,tab: LDR R1,[R10,R0,LSL#2] STR R1,stbe: STR R0,refer MOV R15,R14 .shopi LDR R0,stbe MOV R1,R0,LSR#16: BIC R0,R0,R1,LSL#16: B shopicons .joino LDR R0,refer: B joined : .tab EQUW 5: EQUW 84: EQUW 4:EQUW 144: EQUW 2: EQUW 192 EQUW 3: EQUW 216: EQUW 2:EQUW 312: EQUW 4: EQUW 252 EQUW 3: EQUW 336 .anon EQUS " -- NO NAME -- ": ALIGN .banking EQUD bank .dolevl EQUD startlev .gtxtin EQUD txtin .offsetgp FNaddr(640-16*LEN("Games played: ")-144,350) .assem ADR R0,playednum: MOV R1,#32: ADR R2,zilchnum:.loop STRB R1,[R0],#1: CMP R0,R2: BNE loop BL readgames ADR R1,playednum: MOV R2,#10: SWI "XOS_ConvertCardinal4" MOV R0,#32: STRB R0,[R1] LDR R0,offsetgp: ADD R0,R0,R2,LSL#2: STR R0,plgus BL easytxt .plgus EQUD 0: EQUD &2FD2F0 EQUS"Games played: ":.playednum EQUS"xxxxxxxxxx":.zilchnum EQUB 0: ALIGN BL securetxt FNaddr(64-16*LEN(version$),400): EQUD &2FD2F0 FNequadd(" Release "+version$+" - "+TIME$) EQUB 0:ALIGN: B debounce .tryagain BL typepw2: B checkp .pass STMFD R13!,{R14} BL normreadc MOV R0,#1: BL infade BL clearall: BL copy: BL copyica BL copyica: MOV R0,#2: BL noowall2: BL overbiglogo2: BL encrypttxt FNaddr(400,600): EQUD &848BAB FNencrypt("Enter Password:"): ALIGN BL yesangeldust BL typepword .checkp LDR R1,gtxtin: LDRB R4,[R1]: CMP R4,#32: BEQ cont STMFD R13!,{R0,R8} BL encodeword \ R0 is num LDMFD R13!,{R2,R8} CMN R0,#1: CMPEQ R2,#13: BEQ tryagain: CMN R0,#1: BEQ noways CMP R0,#5: ADRLE R10,comtab ADRLE R7,pketab: ADDLE R6,R7,#28 LDRLE R5,[R7,R0,LSL#2]: LDRLEB R4,[R6,R0] STRLEB R4,[R5] LDRLE R15,[R10,R0,LSL#2]: SUB R0,R0,#7 LDR R4,dolevl: STRB R0,[R4]: ADD R0,R0,#2 ADR R1,leevpok3-3: MOV R2,#4: SWI "XOS_ConvertInteger4" LDRB R0,leevpok3-3: LDRB R1,addl1: ADD R0,R0,R1: STRB R0,leevpok3-3 LDRB R0,leevpok3-2: LDRB R1,addl1+1: ADD R0,R0,R1: STRB R0,leevpok3-2 LDRB R0,addl1+2: STRB R0,leevpok3-1 BL encrypttxt FNaddr(280,350): EQUD &2CD0FC FNencrypt("Pass For Screen "+CHR$0+CHR$0):.leevpok3 \ leevpok+3 ALIGN LDMFD R13!,{R14}: B playplease .addl1 EQUD leevpok3!-3 .debounce SWI "OS_Mouse": MOVS R2,R2: BNE debounce MOV R0,#&81: MOV R1,#0: MOV R2,#0: SWI "OS_Byte" MOVCS R0,#&7E: SWICS "OS_Byte" MOVS R2,R2: BEQ debounce .loop SWI "OS_Mouse": MOVS R2,R2: BNE cont MOV R0,#&81: MOV R1,#0: MOV R2,#0: SWI "OS_Byte" MOVCS R0,#&7E: SWICS "OS_Byte" MOVS R2,R2: BNE loop .cont MOV R0,#1: BL infade: BL clearall: BL copy:BL copyica LDMFD R13!,{R15} .comtab EQUD seepoint EQUD assem EQUD testspon EQUD cheaton: EQUD deskoff: EQUD cheatoff: EQUD noways .pketab EQUD bigwaste EQUD bigwaste EQUD spdtestfl EQUD cheat:EQUDbigwaste: EQUDcheat: EQUD bigwaste .wastepok EQUB 1: EQUB 1 EQUB 1:EQUB 1:EQUB1:EQUB0:EQUB78 ALIGN .tnooswis EQUD nooswordis .seepoint MOV R0,#0: LDR R1,tnooswis: STR R0,[R1] BL encrypttxt FNaddr(240,400): EQUD &B0B1B3 FNencrypt(" ST Emulation Mode On") ALIGN B debounce .paws MOV R10,#17: MOV R0,#19:.loop SWI "OS_Byte" SUBS R10,R10,#1: BNE loop: MOV R15,R14 .testspon BL encrypttxt FNaddr(160,400): EQUD &B0B1B3 FNencrypt("Cash reads frames per second") ALIGN B debounce .cheaton BL encrypttxt FNaddr(160,400): EQUD &232627 FNencrypt("You Cheat! - Use 'V' in game") ALIGN BL encrypttxt FNaddr(578,350): EQUD &232627 FNencrypt("and 'F' at shop"): ALIGN B debounce .cheatoff BL encrypttxt FNaddr(390,400):EQUD &131417 FNencrypt("Glad to hear it"): ALIGN B debounce .toggledesk EQUD nodesk .deskoff LDR R0,toggledesk: LDRB R1,[R0]: EOR R1,R1,#1: STRB R1,[R0] BL encrypttxt FNaddr(270,400): EQUD &C0C1C2 FNencrypt("Disable Back to Desk Option"): ALIGN B debounce .noways BL encrypttxt FNaddr(400,400): EQUD &444363 FNencrypt("Incorrect Code"): ALIGN B debounce : .ghies EQUD hiscores .intable STMFD R13!,{R14}: BL biglogo BL normreadc BL noangeldust LDR R5,ascore: LDR R0,[R5]: BL record LDR R1,ghies: LDR R5,ascore: LDR R2,[R5] LDR R3,[R1,#1176]: CMP R2,R3: LDMLEFD R13!,{R15} LDR R3,[R1,#(24*20)]: CMP R2,R3: B nameenter2 .uename MOVS R1,R1 LDREQ R1,tanon:LDMEQIA R1,{R2,R3,R4,R5} STMEQIA R10,{R2,R3,R4,R5} MOV R0,#0: LDR R1,ghies: LDR R5,ascore: LDR R2,[R5] STR R0,[R5] MOV R5,#1152:.loop LDR R6,[R5,R1]: CMP R6,R2: ADDGT R0,R5,#24: MOVGT R5,#0 SUBS R5,R5,#24: BPL loop CMP R0,#25: LDRLT R7,[R1]: CMPLT R7,R2: MOVLT R0,#0 ADD R12,R0,R1: LDR R11,tlpos: STR R12,[R11] BEQ noshift SUB R12,R1,#24 MOV R5,#596: ADD R5,R5,#600:ADD R3,R0,#24:.loop LDR R11,[R12,R5]: STR R11,[R1,R5] SUB R5,R5,#4: CMP R5,R3: BGE loop .noshift STR R2,[R1,R0]!: ADD R1,R1,#4 MOV R0,#18:.loop LDRB R5,[R10],#1 SUB R5,R5,#33: STRB R5,[R1],#1 SUBS R0,R0,#1: BPL loop LDR R5,levonel: LDRB R5,[R5]: ADD R5,R5,#1: STRB R5,[R1] BL ackesc .loop SWI "OS_ReadEscapeState": BCS nosavehs BL puthiscores: MOVS R12,R12: BMI loop:.nosavehs BL fadeoutlots BL ackesc BL videoCl2 LDMFD R13!,{R15} .tanon EQUD anon .gopt EQUD options .ascore EQUD score .tlpos EQUD lastpos .levonel EQUD levelon : .incol EQUD &D3FDFF:.pasadr FNaddr(450,454) .getbad FNaddr(445,454) .typename MOV R8,#ASC(".") LDR R9,getbad2 LDR R0,nomadr: MOV R7,#18 LDR R1,incol: MOV R10,#160 .wordinpute ADR R6,chkasc2 B wordinput .getbad2 FNaddr(363,454) .incol2 EQUD &FFFDD3:.nomadr FNaddr(365,454) .typepw2 STMFD R13!,{R14} MOV R1,#0: STR R1,autoCR MOV R10,#84: STR R10,pokt LDR R9,getbad: ADR R6,chkasc: MOV R7,#10: MOV R11,#10 MOV R0,#32: STRB R0,txtin+10 LDR R1,incol: ADR R10,txtin: LDR R0,pasadr: B init .typepword MOV R0,#21: MOV R1,#0: SWI "OS_Byte" MOV R8,#ASC("-") LDR R9,getbad LDR R0,pasadr: ADR R6,chkasc: MOV R7,#10 LDR R1,incol: MOV R10,#84 .wordinput STMFD R13!,{R14} STR R0,i1: STR R1,i1+4 MOV R1,#0: STR R1,autoCR MOV R1,#1: STR R1,veil STR R10,pokt \ not needed any more \ R0 is input scraddr. \ R1 is input colour \ R8 is blank char \ R9 is scraddr \ R10 is width \ R6 is addr of range checker \ R7 is length \ on exit R11 is length MOV R0,#32: MOV R11,#18:ADR R10,txtin .loop SUBS R11,R11,#1:STRB R0,[R10,R11]: BNE loop MOV R11,R7:.loop SUBS R11,R11,#1:STRB R8,[R10,R11]: BNE loop .init .loop CMP R11,R7: MOVNE R0,#ASC("_"): STRNEB R0,[R10,R11] LDR R1,veil: BL easytxt .i1 EQUD0:.i2 EQUD0:.txtin EQUS " " EQUB 0:ALIGN .readcpoke MOV R0,#&81 MOV R1,#&FF: MOV R2,#&7F CMP R7,#10: CMPEQ R11,#10: MOVEQ R2,#0: MOVEQ R1,#50 SWI "OS_Byte" CMP R2,#&FF: MOVEQ R1,#13: STREQ R1,autoCR:.readit MOV R0,R1 CMP R0,#163: MOVEQ R0,#96 CMP R0,#13: BNE noret .retpressed MOV R0,#32: MOV R1,R11 STR R0,leftok .loop2 CMP R11,R7:LDRGT R0,autoCR:LDMGTFD R13!,{R15} STRB R0,[R10,R11]: ADD R11,R11,#1: B loop2 .leftok EQUD 0 .wrleftok STR R0,leftok .rdleftok LDR R0,leftok: MOV R15,R14 .ackesc MOV R0,#&7C: SWI "OS_Byte": MOV R0,#&1B: MOV R15,R14 .ackesc2 MOV R0,#&7C:SWI "OS_Byte": MOV R11,#0: B retpressed .autoCR EQUD 0 .normcpoke MOV R0,#&81 .normreadc LDR R0,normcpoke .strreadcpoke STR R0,readcpoke: MOV R15,R14 .noret CMP R0,#&1B:BEQ nogopl STMFD R13!,{R0} MOV R0,#19: SWI "OS_Byte" MOV R0,R9: LDR R1,pokt: MOV R2,#10: BL getbck LDMFD R13!,{R0}:.nogopl CMP R0,#8: MOVEQ R0,#127 CMPNE R0,#127: BGT yomkip CMPCSS R11,#1: STRCSB R8,[R10,R11]: SUBCS R11,R11,#1 .yomkip MOV R1,#32: STRB R1,[R10,R7] CMP R0,#127: BEQ loop CMP R11,R7: MOVNE R15,R6 CMP R0,#&1B: BNE loop: MOV R15,R6 .veil EQUD 1 .chkasc2 CMP R0,#&1B: BLEQ ackesc CMP R0,#32: BLT loop B continueinp .chkasc CMP R0,#&1B: BEQ ackesc2 CMP R0,#42: STREQ R0,veil BNE noveil: MOV R8,#ASC("#") MOV R2,#9:.loop3 LDRB R1,[R10,R2]: CMP R1,#ASC("-"): MOVEQ R1,R8 STRB R1,[R10,R2]: SUBS R2,R2,#1: BPL loop3 .noveil CMP R0,#48: BLT loop: CMP R0,#ASC("z"): BGT loop CMP R0,#ASC("a"): SUBGE R0,R0,#32: BGE continueinp CMP R0,#ASC("Z"): BGT loop CMP R0,#65: BGE continueinp CMP R0,#58: BGE loop .continueinp STRB R0,[R10,R11]: ADD R11,R11,#1: B loop : .iamacheat STMFD R13!,{R14} BL securetxt FNaddr(10,268) EQUD &949B9B: OPT FNequadd("Cheating"):EQUB 0:ALIGN LDMFD R13!,{R15} : .registration STMFD R13!,{R14} BL encrypttxt FNaddr(640-LENowner$*16,800) EQUD &949B9B FNencrypt(owner$): ALIGN LDMFD R13!,{R15} : .tthe EQUD thetext .pokt EQUS "POKENAMEHERE" .findpokead ADR R8,pokt+12 LDR R0,tthe:.loop ADR R1,pokt:.loop2 LDRB R2,[R0],#1: LDRB R3,[R1]: CMP R2,R3: BNE loop ADD R1,R1,#1: CMP R1,R8:BNE loop2 SUB R0,R0,#16: STR R0,wig LDR R0,endmov: STR R0,findpokead:.endmov MOV R15,R14 : .nomentxt MOV R5,#&5A LDR R0,wig:LDR R1,thigh: MOV R2,#16:.loop LDRB R3,[R1],#1 CMP R3,#64: BLT notlowc: CMP R3,#89: SUBLE R3,R3,#32 .notlowc AND R3,R3,#&7F STRB R3,[R0],#1 SUBS R2,R2,#1: BNE loop MOV R15,R14 : .thigh EQUD hiscores+5 .wig EQUD 0 .indic2 EQUD &6292+&C80+&DC0:EQUD &6291+&C80:EQUD &6290 EQUD 8:EQUD9:EQUD 8 .tbbb1 EQUD base1 .held EQUD 0 .zoneic EQUD &1FFB000+2047-&800 ; bodged .context EQUD 0 .chkconzone MOV R10,#0: STR R10,context .chkon2 STMFD R13!,{R0-R2} MOV R0,#&81: MOV R1,#0: MOV R2,#0: SWI "OS_Byte" MOVS R2,R2: BNE chkmou SUBS R2,R1,#&30: BLE chkmou CMP R2,#10: BGE chkmou LDMFD R13!,{R10-R12}: B fige .chkmou LDMFD R13!,{R0-R2} LDR R3,held: STR R2,held: MOVS R3,R3: MOVNE R15,R14 ANDS R2,R2,#5: MOVEQ R15,R14 SUB R0,R0,#&400 CMP R0,#&48: MOVLT R15,R14 CMP R0,#&E8: MOVGT R15,R14 CMP R1,#&250: MOVLT R15,R14 CMP R1,#&2CC: MOVGT R15,R14 MOV R2,#1 CMP R0,#&7C: ADDGE R2,R2,#1 CMP R0,#&AC: ADDGE R2,R2,#1 CMP R1,#&2A0: ADDGT R2,R2,#3 CMP R1,#&278: ADDGT R2,R2,#3 .fige LDR R0,context: CMP R0,#1: MOVEQ R0,#2: STREQ R0,context MOVEQ R15,R14:STMFD R13!,{R14} MOV R0,R2: BL newzone MOV R4,#&FF: BL zoneno .loop MOV R0,#1: STR R0,context SWI "OS_Mouse" BL chkon2 LDR R0,context: CMP R0,#1: BNE loop MOV R4,#&27: BL zoneno: LDMFD R13!,{R15} .zoneno STMFD R13!,{R4,R14} BL dai21FFB MOV R0,#&7400: ORR R0,R0,#&10: LDR R1,zoneic: MOV R2,#40 BL drawicon BL zonetopbit BL dozonename BL getzono0: SUB R0,R0,#1 MOV R1,#3 BL divide32: SUB R0,R0,R2,LSL#1: SUB R0,R0,R2 ADR R1,indic2: LDR R10,[R1,R2,LSL#2]!: LDR R9,[R1,#12]: ADR R1,indices LDRB R11,[R1,R0]!:ADD R2,R2,R11 LDR R1,tbbb1: LDR R1,[R1]: ADD R0,R10,R1 LDMFD R13!,{R4,R14} ADD R0,R0,R2:.loop MOV R3,R0 SUB R5,R4,#1: SUB R6,R5,#1 MOV R2,#11:.loop1 STRB R6,[R3],#1 SUBS R2,R2,#1: BPL loop1 .loop2 ADD R0,R0,#&140: STRB R4,[R0,#11] MOV R7,#10:.loop3 LDRB R8,[R0,R7]: CMP R8,#&2D: STREQB R5,[R0,R7] SUBS R7,R7,#1: BNE loop3 STRB R6,[R0] SUBS R9,R9,#1: BNE loop2 MOV R2,#11:.loop STRB R4,[R0],#1: SUBS R2,R2,#1: BPL loop MOV R15,R14 .indices EQUB0: EQUB 13: EQUB 26 ALIGN : .startup \ R0 = mappoint, on exit R0=start address ADD R0,R0,#&40 LDR R1,tolevonm: LDRB R1,[R1]: CMP R1,#255: SUBEQ R0,R0,#72 ;? MOVEQ R15,R14 B getstart .tolevonm EQUD levelon : .startlev EQUD -1 .getword STMFD R13!,{R14} \ R0 is word from password list \ R10 is where to go LDR R3,[R6,#-12]: EOR R0,R0,R3 MOV R12,#20:ADR R11,divtab:.loop LDR R1,[R11,R12]: BL divide32 CMP R12,#20: STRNEB R2,[R10],#1 MUL R3,R2,R1: SUB R0,R0,R3: SUBS R12,R12,#4 BPL loop LDMFD R13!,{R15} .divtab EQUD 1 EQUD 41:EQUD41*41:EQUD41^3:EQUD41^4: EQUD 41^5 .buying EQUB 0 ALIGN .tpc EQUD carriage:.bpos EQUD -&47BC .txx EQUD xx .tene EQUD enable .rstmap BL initmap: LDR R4,txmin: STR R0,[R4] BL mnxy: BL minus1copy .endrstmap BL new: BL resetprice BL getR0at: EQUD shopit MOV R1,#&28: STRB R1,[R0]: MOV R1,#&FF: STRB R1,[R0,#1] BL dcash MOV R2,#6: BL bckshp: MOV R0,#6: BL getstbe: BL shopi: LDMFD R13!,{R15} .txmin EQUD xmin .buyit CMP R3,R2: LDMLTFD R13!,{R15} CMP R0,#3: BLLT loseeupgs CMP R0,#24: BEQ rstmap2 CMP R0,#10: BNE nocoloured BL box LDR R1,bpos: LDR R2,tpc: STR R1,[R2] MOV R0,#58: BL dcomment BL boxes STR R5,buying: MOV R0,R5,LSR#3: SUB R0,R0,#1: BL getfoot LDRB R0,buying:.nocoloured CMP R0,#11: MOVEQ R0,#32: BLEQ getfoot: LDRB R0,buying LDR R1,txx: LDR R1,[R1] LDR R2,togot: CMN R1,#1: BEQ noPE .loop LDRB R3,[R2],#1: AND R3,R3,#&3F: CMP R3,R1 BNE loop: STRB R0,[R2,#-1] B ghir .noPE .loop LDRB R3,[R2],#1: CMP R3,R0: BEQ algot CMP R3,#&FF: BNE loop STRB R0,[R2,#-1]: STRB R3,[R2] .ghir LDR R10,tsh: LDR R11,[R10]: LDR R12,theprice SUB R11,R11,R12: STR R11,[R10]: BL cashcopy:.algot CMP R0,#12: BLE nogFF: CMP R0,#19 MOVLT R0,#&FF: BLLT getfoot: LDRB R0,buying .nogFF CMP R0,#14:LDREQ R2,tene: LDREQ R1,[R2]: ORREQ R1,R1,#1: STREQ R1,[R2] BL initcsh: BL dtime BL dcash: BL dscore BL joino: BL shopi BL sortoutfft BL calcupgprice LDMFD R13!,{R15} .byupgeng MOV R0,#4 LDR R1,tsh: LDR R3,[R1]: LDR R2,theprice CMP R3,R2: LDMLTFD R13!,{R15} LDR R2,togot:.loop LDRB R3,[R2],#1: AND R8,R3,#&1F: CMP R8,#18 BEQ upit: CMP R3,#&FF: BNE loop: MOV R8,#18: STRB R8,[R2,#-1] STRB R3,[R2]: B ghir:.upit CMP R3,#&E0: LDMGEFD R13!,{R15} ADD R3,R3,#&20: STRB R3,[R2,#-1]: B ghir .resetballanim LDR R0,balpnt:LDR R1,resttspt: STR R0,[R1] MOV R0,#0: STRB R0,[R1,#frames-sprpnt] MOV R15,R14 .buysell STMFD R13!,{R14} \ A%=item STRB R0,buying CMP R0,#18: BEQ byupgeng TSTS R2,#4: \ sel LDRB R12,have: MOVNES R12,R12: LDMNEFD R13!,{R15} LDR R1,tsh: LDR R3,[R1]: LDR R2,theprice MOVS R12,R12: BEQ buyit ADD R3,R3,R2,ASR#1: STR R3,[R1] BL cashcopy CMP R0,#10: CMPNE R0,#11 LDREQ R0,balpnt:LDREQ R1,resttspt: STREQ R0,[R1] MOVEQ R0,#0:BLEQ getfoot LDRB R0,buying LDR R1,togot .loop LDRB R2,[R1],#1 AND R2,R2,#&1F: CMP R2,R0: BNE loop .loop LDRB R2,[R1],#1 STRB R2,[R1,#-2]: CMP R2,#&FF: BNE loop CMP R0,#14: LDREQ R1,tene: LDREQ R2,[R1]: BICEQ R2,R2,#1: STREQ R2,[R1] STMFD R13!,{R0}: BL sortoutfft: LDMFD R13!,{R0} CMP R0,#12: BLE nogf: CMP R0,#19 MOVLT R0,#&FF: BLLT getfoot:.nogf BL dcash: BL dscore BL joino: BL shopi LDMFD R13!,{R15} .resttspt EQUD sprpnt .balpnt EQUD ball : .divide32 STMFD R13!,{R0-R1,R3-R4,R6,R14} \ R2=R0/R1 MOVS R0,R0: RSBMI R0,R0,#0: MOVMI R6,#1: MOVPL R6,#0 MOVS R1,R1: RSBMI R1,R1,#0: EORMI R6,R6,#1: MOVEQ R1,#1 CMP R1,R0: MOV R2,#0: LDMGTFD R13!,{R0-R1,R3-R4,R6,R15} MVN R3,#0 .loop CMP R3,#40: BGT forgd32 CMP R0,R1,LSL R3 ADDHI R3,R3,#1 BHI loop SUBNE R3,R3,#1 .forgd32 .loop CMP R0,R1,LSL R3 SUBCS R0,R0,R1,LSL R3 ADC R2,R2,R2 SUBS R3,R3,#1: BGE loop MOVS R6,R6: RSBNE R2,R2,#0 LDMFD R13!,{R0-R1,R3-R4,R6,R15} : .dividetwo \ R11=R9/R8 CMP R8,R9: MOV R11,#0: MOVGT R15,R14 STMFD R6!,{R0-R1,R14} MVN R0,#0:.loop CMP R9,R8,LSL R0: ADDGT R0,R0,#1 BGT loop: SUBNE R0,R0,#1: MOV R1,#1 ]FORT2=0 TO 30:[OPT T CMP R9,R8,LSL R0 SUBCS R9,R9,R8,LSL R0 ADDCS R11,R11,R1,LSL R0 SUBS R0,R0,#1: LDMMIFD R6,{R0-R1,R15} ]NEXT:[OPT T CMP R9,R8,LSL R0 SUBCS R9,R9,R8,LSL R0 ADDCS R11,R11,R1,LSL R0 LDMFD R6,{R0-R1,R15} .shopgoing EQUD 0 .clrshopgoing MOV R0,#0: STR R0,shopgoing: MOV R15,R14 .procend STMFD R13!,{R14} LDR R0,goon: MOV R1,#0: STR R1,[R0] LDR R0,heres: LDR R0,[R0]: CMP R0,#2: BEQ notime LDR R1,icheated: MOVS R1,R1: BNE cheatag LDR R1,tomymapptr: LDR R2,tomapthres: LDR R1,[R1] CMP R1,R2: LDMLTFD R13!,{R15} .cheatag MOV R1,#0: STR R1,icheated BL again: BL resettime: BL new ADR R0,wrtab3: MOV R3,#9: BL shove LDMFD R13!,{R15} .icheated EQUD 0 .stcheated STR R0,icheated: MOV R15,R14 .tomymapptr EQUD mymapptr .tomapthres EQUD bigwaste+&30*10 .notime LDR R0,tbb: BIC R0,R0,#&FF000000 LDRB R0,[R0]: MOVS R0,R0: LDMNEFD R13!,{R15} BL reinitar BL doom: BL resettime: LDMFD R13!,{R15} .heres EQUD s .wrtab EQUD ebe+&FF000000: EQUD 12 .wrtab3 EQUD lockjaw+&FF000000: EQUD 0 EQUD warper+&FF000000: EQUD 0 EQUD cruiseon+&FF000000: EQUD 0 EQUD invert: EQUD 0 EQUD goesit: EQUD bigwaste EQUD goesit2: EQUD 0 EQUD restsq: EQUD 0 EQUD frameno: EQUD 90 EQUD flsize: EQUD 0 EQUD restartflag: EQUD 0 .wrtab2 EQUD mapptr: EQUD mapcopy+&70 .writta EQUD x: EQUD &A00000 EQUD dy: EQUD 0 EQUD P: EQUD 1 EQUD vdown: EQUD 0 EQUD velo: EQUD 0 EQUD height: EQUD &40000000 .tindxe EQUD index:.wrind EQUD 0 .goon EQUD squareon: EQUD &FFFF EQUD zap: EQUD-1 .tbb EQUD bannerb+&FF000000: EQUD 0 EQUD shopgoing: EQUD 0 EQUD power: EQUD &3000000 EQUD xa: EQUD 0 .tfc EQUD fcount .gind EQUD mapcopy+&70+&2C .dptr EQUD 0:.oldsc EQUD 0 .wicdone EQUB 0 .levelon EQUB 0 .oldon EQUB 0 ALIGN .rdcursc2 LDRB R0,levelon ; fall into wrcursc2 .wrcursc2 STRB R0,levelon: MOV R15,R14 .mnxy LDR R2,levelon: B getxyzmap2 .stari ADR R0,writta: MOV R3,#4: B shove .temit EQUD time:.gettim EQUD mapcopy+&28 .toss EQUD s .tigbarr EQUD igbarr .tdf EQUD demoflag .tmapst EQUD mapstt .a74616854 EQUD &74616854 .a736B6C6F EQUD &736B6C6F .togot EQUD got .tmuf EQUD map .shove LDR R1,[R0],#4: LDR R2,[R0],#4: MOVS R1,R1 BICMI R1,R1,#&FF000000:STRMIB R2,[R1]: STRPL R2,[R1] SUBS R3,R3,#1: BNE shove: MOV R15,R14 .sabotage EQUD normalr .normalrst ADR R0,normalr .atcursrst STR R0,sabotage: MOV R15,R14 .restart MOV R1,#0:.irest STMFD R13!,{R14} STMFD R13!,{R1} BL Irest BL blindoff BL initball ADR R0,wrtab:MOV R3,#11:BL shove LDRB R0,levelon: LDRB R1,wicdone: MOVS R1,R1: BNE addr STRB R0,levelon .addr ADD R0,R0,#1: AND R0,R0,#255: BL getj LDR R0,gind: LDR R0,[R0]: SUB R0,R0,#&20000: STR R0,wrind ADR R0,wrtab2: MOV R3,#14:BL shove LDR R15,sabotage .normalr BL tstdg: BLNE byejunk BL spyqflag: BEQ nosee BL vsync: BL videoCl2 BL flip3: BL cls: BL spacejunk BL updatescr: BL xyzcode BL flip3: BL cls: BL spacejunk: BL updatescr: BL flip3: BL cls BL spacejunk: BL updatescr .nosee BL nomh BL Hz50stars LDR R0,toss: MOV R1,#0 STR R1,[R0]: STR R1,[R0,#4] LDR R0,tdf: LDRB R2,[R0]: MOVS R2,R2: LDREQ R2,theit STREQ R1,[R2] LDMFD R13!,{R1} CMP R1,#0: BLEQ centremouse MOV R1,#0 LDR R0,gup: LDR R0,[R0]: MOVS R0,R0: MOVNE R2,#0 LDR R0,temit: LDREQ R2,gettim: LDREQ R2,[R2]: STR R2,[R0] STR R1,[R0,#4] LDR R0,tfc: MOV R1,#10: STRB R1,[R0] B initxyzA .gup EQUD goingup : .mighthavedone LDR R11,a736B6C6F: LDR R1,[R0,#12]: CMP R11,R1: BNE hasnt BL qcl2 BL completed: LDR R0,tsh: MVN R1,#0: STR R1,[R0] BL isbank0: BL gameover: BL mayfirewcode: BL nogameover BL Hz50stars LDMFD R13!,{R15} .get STMFD R13!,{R14} BL No50stars MOV R0,#0: BL stcheated LDR R10,a74616854 LDR R0,dptr: ADD R0,R0,#4:.loop LDR R1,[R0,#4]! CMP R1,R10: BEQ mighthavedone .hasnt LDR R1,[R0,#-4]: CMN R1,#1: BNE loop .backhere2 STR R0,dptr .backhere LDR R10,tigbarr: MOV R1,#&FF: STRB R1,[R10] LDR R1,tmapst: STR R0,[R1] ADD R0,R0,#64: STR R0,dptr BL initmap: BL mnxy: BL preview BL findeotdS BL allanimate: BL initwd: BL chkanimate BL initbombstack BL normalrst BL videoCl2 BL newstars BL minus1copy LDR R0,tdf: LDRB R1,[R0]: CMP R1,#1:BLEQ flyinit BL restart LDR R0,tdf: LDRB R1,[R0]: MOVS R1,R1: LDMEQFD R13!,{R15} .loop2 BL flyframe SWI "OS_Mouse": CMP R2,#0: BNE loop2 BL testkeys CMP R1,#&1B:BEQ escprsd: CMP R2,#&FF: BNE loop2 .loop2 BL flyframe SWI "OS_Mouse": CMP R2,#0: BNE nescb BL testkeys CMP R1,#&1B:BEQ escprsd: CMP R2,#&FF: BNE nescb LDR R0,toss: LDR R1,[R0]: MOVS R1,R1: BEQ loop2 LDR R1,[R0,#4]: MOVS R1,R1: BNE loop2 .nescb BL endfly BL No50stars LDR R0,dptr: SUB R0,R0,#&40 B backhere .escprsd BL ackesc BL scanesc BEQ escprsd: B nescb .feint EQUD &D32F2E2C:.bold EQUD &D32D2C01 .m5BE4 EQUD-&5BE4-&140*17:.m5324 EQUD -&5324-&140*15 .m4A64 EQUD-&4A64-&140*15:.m38E4 EQUD -&38E4-&140*15 .m14A4 EQUD-&14A4-&140*5:.m1FE4 EQUD -&1FE4-&140*10 .mman EQUD-&52EC-&140*15:.mspc EQUD-&4A24-&140*15 .tpric EQUD prices .theprice EQUD 0 .mpm EQUD-&38BC-&140*15 .have EQUB 0:.item EQUB0:.ifit EQUB 0:EQUB0 .xmax EQUD 0:.xmin EQUD 0:.ymin EQUD 0:.ymax EQUD 0 .tfust EQUD first .scan1 \ R0 =x%, R1=y%, R4=i CMP R1,#180: MOVLT R15,R14 CMP R1,#&14C: MOVLE R3,#&134: SUBLE R3,R3,#1 CMPLE R3,R1: MOVLE R15,R14 SUBS R0,R0,#37: MOVCC R15,R14 MOV R3,R1: STMFD R13!,{R14} MOV R1,#160: BL divide32 MUL R10,R2,R1: SUB R9,R0,R10: CMP R9,#132: LDMGEFD R13!,{R15} CMP R3,#&134: MOVGT R9,R2: ADDLE R9,R2,#2 LDR R5,tfust: LDRB R6,[R5,R4]! CMP R0,#&124: ADDGT R9,R9,#2 \ R9 is j-i?first LDRB R8,[R5,#num-first]: CMP R9,R8: LDMGEFD R13!,{R15} CMP R9,#4: CMPEQ R6,#0: MOVEQ R9,#18 ADDNE R9,R9,R6: \ R9 is j STRB R9,item CMP R3,#&134: MOVLT R11,#372: MOVGE R11,#&20C STR R11,ymax: SUB R11,R11,#128: STR R11,ymin ADD R10,R10,#37: STR R10,xmin ADD R10,R10,#132: STR R10,xmax .loop2 BL vsync: BL box: LDRB R0,item: BL giveinfo .loop SWI "OS_Mouse": ANDS R2,R2,#5: BNE loop: BL vsync .loop MOV R0,#&81: MOV R1,#256-113: MOV R2,#255: SWI "OS_Byte" CMP R1,#&FF: BEQ maygo:.butwont SWI "OS_Mouse" STMFD R13!,{R0-R2,R14}: BL chcht LDMFD R13!,{R0-R2,R14} ANDS R2,R2,#5: BNE farout LDR R4,xmax: CMP R0,R4: BGT fin LDR R4,xmin: CMP R0,R4: BLT fin LDR R4,ymin: CMP R1,R4: BLT fin LDR R4,ymax: CMP R1,R4: BLE loop .fin LDMFD R13!,{R14}: B wantinventory .farout LDRB R0,item: BL buysell BL gitem2: CMP R0,#0: BNE notebs BL ensureeok: BL vsync: MOV R0,#0: BL bckshp BL joino: MOV R0,#0: BL getstbe:BL shopi:.notebs B loop2 .giveinfo \ R0 = item MOV R12,R0 LDR R1,tpric: AND R11,R12,#&3F: LDR R5,[R1,R11,LSL#2] STR R5,theprice MOV R1,#1: STMFD R13!,{R14} LDR R2,bold: LDR R3,m5BE4: ADD R0,R11,#10: BL handycomment LDR R2,feint: LDR R3,m5324: MOV R0,#4: BL handycomment LDR R2,bold: LDR R3,mman CMP R11,#24: ADDLT R0,R11,#63: BLLT handycomment LDR R2,feint:LDR R3,m4A64: MOV R0,#5: BL handycomment LDR R2,bold: LDR R3,mspc CMP R11,#24: ADDLT R0,R11,#87: BLLT handycomment LDR R2,feint: LDR R3,m38E4: MOV R0,#6: BL handycomment LDR R2,bold: ADD R0,R11,#37 LDR R3,mpm: LDR R1,m38E4: BL handycomment .priceshow MOV R1,#1 LDR R2,feint: LDR R3,m1FE4:MOV R0,#7: BL handycomment LDR R2,bold: STMFD R13!,{R0-R12}: BL cashcolz LDMFD R13!,{R0-R12}: MOV R0,R12 STMFD R13!,{R5,R12}: BL getpartext: LDMIA R13!,{R10,R12} MOVS R5,R0: BEQ norefund MOV R0,#1: STMFD R13!,{R5,R10,R12} BL acomment: LDMFD R13!,{R5,R10,R12} STMFD R13!,{R5,R10,R12}: BL anycash LDMFD R13!,{R5,R10,R12} SUB R10,R10,R5:STR R10,theprice:.norefund LDR R3,m14A4: LDR R2,bold: LDR R6,tghi MOV R7,#0:CMP R12,#18: MOVEQ R12,#30:.loop LDRB R8,[R6],#1 EOR R9,R8,R12: ANDS R9,R9,#&3F: MVNEQ R7,#0 CMP R8,#&FF: BNE loop: MOVS R7,R7: MOVNE R0,#36 BNE outwi: LDR R1,tsh: LDR R1,[R1]: CMP R1,R10 MOVGE R0,#9: MOVLT R0,#8:.outwi STRB R7,have LDMFD R13!,{R14} .handycomment STMFD R13!,{R0-R12,R14} \ R0=num. \ R2=colmap, R3=carriage BL comment LDMFD R13!,{R0-R12,R15} .tsh EQUD cash:.tghi EQUD got .tvlo EQUD velo:.theit EQUD height .tx2 EQUD x .mulf EQUD &51EB .tptmap EQUD mapptr : .chalign STMFD R13!,{R14} LDR R0,tx2: LDR R10,[R0]: MOV R0,R10,ASR#9 ADD R1,R0,#&1400: LDR R0,mulf: MUL R1,R0,R1 MOV R11,R1,ASR#18 LDR R0,h: MOVS R0,R0: BPL herp CMN R0,#&3000: BLE herp BL readPs ORRS R1,R2,R3: BLNE alignx LDR R0,tx2: LDR R10,[R0]: MOV R0,R10,ASR#9 ADD R1,R0,#&1400: LDR R0,mulf: MUL R1,R0,R1 MOV R11,R1,ASR#18:.herp STR R11,I MOV R5,R11,ASR#8:MOVS R5,R5,LSL#1:MOVMI R5,#&FF CMP R5,#32: MOVGT R5,#&FF: BL doI STR R10,xold LDMFD R13!,{R15} : .readPs STMFD R13!,{R14} LDR R0,h RSB R0,R0,#0 CMP R0,#&1800: RSBGE R0,R0,#&3000 STMFD R13!,{R11}: BL calchugelookup SUB R0,R11,R11,ASR#4: LDMFD R13!,{R11} LDR R12,tptmap: LDR R12,[R12] \ R0 is dI \ R12 is !mapptr \ R11 is !I \ R8 is dd ADD R6,R11,R0,ASR#17: MOVS R6,R6,ASR#8 LDRB R2,[R12,R6,LSL#1] MOVMI R2,#0 CMP R6,#16: MOVGE R2,#0 SUB R6,R11,R0,ASR#17: MOVS R6,R6,ASR#8 LDRB R3,[R12,R6,LSL#1] MOVMI R3,#0 CMP R6,#16: MOVGE R3,#0 LDMFD R13!,{R15} : .descend LDR R10,tvlo: LDR R11,tptmap: LDR R11,[R11]: LDR R11,[R11,#&28] LDR R10,[R10]: MOV R10,R10,ASR#18: MUL R5,R11,R10 LDR R3,goon: LDRB R3,[R3] LDR R0,tbf: LDR R0,[R0] CMP R3,#64: SUBEQ R0,R0,R0,ASR#2 STR R0,bounce LDR R0,h: LDR R7,tvdwn: LDR R11,[R7] STR R5,k LDR R2,gspud: LDR R2,[R2]: ADD R1,R5,R11: MUL R1,R2,R1 SUBS R6,R0,R1: STR R6,h: MOVPL R15,R14 CMN R11,R5: MOVLE R15,R14 LDR R0,P: MOVS R0,R0: MOVEQ R15,R14 LDR R0,hold: MOVS R0,R0: MOVMI R15,R14 LDR R1,bounce RSB R6,R6,#0: MUL R6,R1,R6: MOV R6,R6,LSR#6: STR R6,h LDR R0,tokgn ADD R4,R5,R11: MUL R4,R1,R4: MOV R4,R4,ASR#6: ADD R4,R4,R5 RSB R11,R4,#0: STR R11,[R7] MVN R3,R11,ASR#8: ADD R3,R3,#1: STR R3,[R0] MOV R15,R14 : .getsquareon LDR R11,I: STR R11,sqI LDR R12,tptmap: LDR R12,[R12] MOV R2,R11,ASR#8: ADD R2,R12,R2,LSL#1: LDR R3,[R2] BIC R3,R3,#&FF000000: BIC R3,R3,#&FF0000 STR R3,channel: CMP R3,#&FF00: BICLT R3,R3,#&FF00 MOVS R11,R11: MOVMI R3,#&FF00: LDRMI R2,tbew CMP R11,#&1000: MOVGE R3,#&FF00: LDRGE R2,tbew ORR R3,R3,R3,LSR#8: LDR R4,amidun: LDR R4,[R4]: CMP R4,#0 CMPEQ R3,#61: MOVEQ R3,#&FF: ORREQ R3,R3,#&FF00 LDR R4,tsqo: STR R3,[R4] LDR R4,tgi: STR R2,[R4] MOV R15,R14 .sqI EQUD 0 .amidun EQUD gnd .newoldpox LDR R0,sqI: B newoldpox2 .channel EQUD 0 .porter STMFD R13!,{R0-R12,R14} MOV R0,#21: MOV R1,#12: BL doeffect LDR R10,channel: MOV R10,R10,LSR#8 LDR R9,tptmap: LDR R12,[R9] LDR R11,gettim: ADD R11,R11,#&30 .loop2 ADD R12,R12,#48 LDR R6,[R12,#&2C]: MOVS R6,R6: ADDEQ R12,R11,#&18 MOV R2,#31:.loop LDRB R6,[R2,R12]: CMP R6,R10: BEQ gottit SUBS R2,R2,#2: BPL loop: B loop2 .gottit LDR R6,[R12,#&2C]: MOV R6,R6,ASR#1: LDR R8,tindxe STR R6,[R8] MOV R5,#&C8000: MUL R5,R2,R5: SUB R5,R5,#&280000 LDR R4,txosop: STR R5,[R4] LDR R4,spddwn: MVN R5,#&140: STR R5,[R4] LDR R0,iehthg: MOV R1,#&600: STR R1,[R0] LDR R1,tjgn: MOV R0,#0: STR R0,[R1] STR R12,[R9]: BL stopfixi: LDMFD R13!,{R0-R12,R15} .tjgn EQUD gnd .txosop EQUD x .spddwn EQUD vdown .iehthg EQUD h .iehthg2 EQUD height : .alignx MOV R6,#0: LDR R12,tx2a MOVS R2,R2: MOVNES R3,R3 BNE xmxold: MOVS R2,R2: MVNEQ R6,#0: B dxfound .xmxold LDR R7,[R12]: LDR R8,xold CMP R7,R8 MVNLT R6,#0:.dxfound LDR R1,Iold: BIC R2,R1,#&FF: ADD R2,R2,#&100: MOV R5,R0,ASR#1 MOVS R7,R6: RSBMI R5,R5,#0 ADD R2,R6,R2,ASR#8 \! \ R2 is nI, R5 is dx x dI MOV R2,R2,LSL#8 SUB R6,R2,R5,ASR#16: MOV R5,#&1900: MUL R5,R6,R5 SUB R5,R5,#&280000 STR R5,[R12] SWI "OS_Mouse": CMP R0,#640: BGT pntrig MOVS R7,R7: SUBEQ R0,R0,#640:MOVEQ R0,R0,ASR#1: RSBEQ R0,R0,#640 .wrbc MOV R0,R0,LSL#8: ADD R0,R0,#3: STR R0,pushpnt2 STRB R1,pushpnt2+3: MOV R1,R1,ASR#8 STRB R1,pushpnt2+4: ADR R1,pushpnt2 MOV R0,#21: SWI "OS_Word" MOV R15,R14 .pntrig MOVS R7,R7 SUBNE R0,R0,#640:MOVNE R0,R0,ASR#1: RSBNE R0,R0,#640: B wrbc .pushpnt2 EQUD0:EQUD0 .tx2a EQUD x .tvdwn EQUD vdown:.gspud EQUD spd .tbf EQUD bf .h EQUD 0 .a EQUD 0 .P EQUD 0 EQUD 0:.dI EQUD 0:.dd EQUD 0 .I EQUD0:.k EQUD 0:.hold EQUD 0 .Iold EQUD 0 .nI EQUD 0 .bhold EQUD 0:.hold EQUD 0 .bounce EQUD 0 .xold EQUD 0 .tbew EQUD bigwaste .tsqo EQUD squareon:.tgi EQUD goesit .velom EQUD 0 .vmotion LDR R0,tvlo: LDR R0,[R0]: STR R0,velom: B contvm .b4bogey STR R10,bogeywas: B b2bogey .bogeywas EQUD 0 .Irest MOV R1,#7*&100:.Inrest STR R1,I: MOV R15,R14 .bouncez \ R7<>0 \ no adjust index, map STMFD R13!,{R14} .bounceza LDR R10,h: RSB R0,R10,#0: BIC R0,R0,#3 CMP R0,#&1800: RSBGE R0,R0,#&3000 BL calchugelookup LDR R8,tvlo: LDR R3,velom: MOVS R4,R3,ASR#14 RSBMI R4,R4,#0 MOV R1,R11,ASR#12:MUL R4,R1,R4: MOV R4,R4,ASR#12 ADDS R10,R10,#&1800: RSBMI R1,R10,#0: MOVPL R1,R10 LDR R5,tvdwn: LDR R9,[R5]: MUL R0,R1,R9 MOV R1,#&1800: BL divide32 ADD R2,R2,R4: LDR R12,tbf: LDR R12,[R12]: MUL R2,R12,R2 MOV R2,R2,ASR#6: ADD R2,R2,R2,LSL#1 \ R2 is 'vv' MOVS R7,R7: BNE nadj LDR R4,tptmap: LDR R6,[R4]: LDR R4,tobogie:CMP R6,R4 LDRGE R6,bogeywas: LDR R4,tptmap: STR R6,[R4] BL storeposb4 MOVS R3,R3 SUBPL R6,R6,#48: ADDMI R6,R6,#48 MOVPL R7,R11: LDRMI R7,[R6,#&2C] SUBMI R7,R7,R11: STR R6,[R4] LDR R6,pindex: STR R7,[R6] BL cadjbackdrop BL killskidoff .nadj \ R11 is 'o' MOV R11,R11,ASR#10: MUL R4,R2,R11: MOVS R3,R3 RSBMI R4,R4,#0: SUB R3,R3,R4: STR R3,[R8] MUL R0,R10,R2: MOV R1,#&1800: BL divide32 SUB R9,R9,R2: STR R9,[R5] LDR R11,hold: \ R9 is vdown LDR R0,k: ADD R0,R0,R9 LDR R9,gspud: LDR R9,[R9]: MUL R9,R0,R9: LDR R1,hold LDMFD R13!,{R15} .tobogie EQUD bogey : .try2B3D MOV R12,#2 LDR R2,I: MOVS R2,R2,ASR#8: MOVMI R15,R14 CMP R2,#16: MOVGE R15,R14 LDR R10,h: RSB R0,R10,#0: BIC R0,R0,#3 CMP R0,#&1800: RSBGE R0,R0,#&3000 STMFD R13!,{R14}: BL calchugelookup LDR R6,pindex: LDR R7,[R6] LDR R4,tptmap: LDR R3,[R4] CMP R7,R11: BGT norollback ADD R1,R3,#48: LDR R0,[R1,#&2C]: MOVS R0,R0: BEQ yesrollback LDRB R0,[R1,R2,LSL#1]: MOVS R0,R0: BEQ norollback .yesrollback MOV R7,R11: SUB R12,R12,#1 STR R7,[R6] .norollback LDR R9,[R3,#&2C]: SUB R9,R9,R11 CMP R9,R7:BGT norollforw SUB R1,R3,#48: LDRB R0,[R1,R2,LSL#1]: MOVS R0,R0: BEQ norollforw MOV R7,R9: STR R7,[R6]: SUBS R12,R12,#1: BEQ holdup LDR R0,todxdt: LDR R0,[R0]: MOVS R0,R0 MOVMI R7,#1 BMI bounceza LDMFD R13!,{R15} .norollforw CMP R12,#2: LDMEQFD R13!,{R15} LDR R0,todxdt: LDR R0,[R0]: MOVS R0,R0: MOVPL R7,#1: BPL bounceza LDMFD R13!,{R15} .todxdt EQUD velo .holdup MOV R1,#&1200: ADD R1,R1,#&4A: LDR R0,[R3,#&2C] MOV R7,R0,LSR#1: STR R7,[R6] BL divide32 ADD R0,R2,#&1800: BL calchugelookup MOV R0,R11 BL divide32 RSB R11,R2,#&1800: RSB R11,R11,#0: STR R11,h LDR R11,tbf: LDR R11,[R11] LDR R0,P: ORR R0,R0,#&100: STR R0,P LDR R0,tvdwn: LDR R1,[R0]: MOVS R1,R1: MOVPL R1,R1,ASR#5 MULPL R1,R11,R1 RSBPL R1,R1,#0: STRPL R1,[R0] LDR R0,tvlo: LDR R1,[R0]: MOVS R1,R1,ASR#1: STR R1,[R0] LDMFD R13!,{R15} .pindex EQUD index .firststopst LDR R0,I: STR R0,Iold LDR R0,theit: LDR R0,[R0]: STR R0,bhold: STR R0,hold: STR R0,h MOV R15,R14 .tokgn EQUD okgnd .toieh EQUD height .endgloopcd STMFD R13!,{R14} LDR R0,I: MOVS R0,R0: RSBGES R1,R0,#&1000 MOVGE R0,R0,LSR#8 LDRGE R2,tptmap: LDRGE R2,[R2]: LDRGEB R2,[R2,R0,LSL#1] MOVLT R2,#0: STR R2,P LDR R6,toieh: LDR R7,h: STR R7,[R6] LDR R6,tokgn: LDRB R6,[R6]: MOVS R6,R6: BNE gnd0 MOV R6,#0: LDR R0,P: MOVS R0,R0: BEQ gnd0 MOVS R8,R7: RSBMI R8,R8,#0: CMP R8,#512: BGE gnd0 LDR R0,bhold: MOVS R0,R0: BMI gnd0:.gnd1 MVN R6,#0:.gnd0 LDR R0,tgv:STR R6,[R0] MOV R0,#4 LDR R10,tvdwn: LDR R12,[R10] LDR R5,I: MOVS R5,R5: BMI gis4 CMP R5,#&1000: BGE gis4 MOV R5,R5,LSR#8 LDR R6,tptmap: LDR R6,[R6]: LDRB R4,[R6,R5,LSL#1]!: MOVS R4,R4 LDREQB R4,[R6,#1]: MOVEQS R4,R4: BNE gis4 MOV R0,#4: CMP R7,#0: MOVLT R0,#3 CMN R7,#&400: MOVLT R0,#2 CMN R7,#&E00: MOVLT R0,#1 CMN R7,#&2800: MVNLT R7,#&20000 RSBS R1,R0,#3 LDRPL R11,gspud: LDRPL R11,[R11] .loop MULPL R4,R12,R1: SUBPL R12,R12,R4,ASR#4 SUBPLS R11,R11,#1: BPL loop STR R12,[R10] .gis4 MOVS R7,R7: BNE fall: LDR R12,P: MOVS R12,R12: BNE nofl .fall LDR R11,gspud: LDR R11,[R11]: MLA R12,R0,R11,R12 STR R12,[R10]:.nofl LDR R12,theit: STR R7,[R12] LDR R2,P:MOVS R2,R2: BEQ nobz: MOVS R7,R7: BPL nobz CMN R7,#&3000: MOVGT R7,#0: BLGT bouncez:.nobz LDR R0,P: MOVS R0,R0: BNE no2B3D LDR R7,h: MOVS R7,R7: BPL no2B3D CMN R7,#&3000: BLGT try2B3D:.no2B3D LDR R0,tox: LDR R0,[R0]: RSB R0,R0,#&A00000 MOV R1,#99: MOV R0,R0,LSL#1: BL divide32 LDR R0,tdoy: STR R2,[R0] LDR R0,pshopg: LDR R0,[R0]: MOVS R0,R0: BNE dobrake LDR R0,ginput: LDR R0,[R0]: MOVS R0,R0: BNE ormouse CMP R0,#2: MOVEQ R0,#20: MOVNE R0,#4: BL chkey: MOVNE R0,#&400: BNE onIV2 .dobrake LDR R0,gspud: LDR R0,[R0] LDR R1,tgv: LDR R1,[R1] LDR R10,tvlo: LDR R3,[R10] LDR R2,tobrakg: MOVS R1,R1: LDREQB R2,[R2,#4] LDRNEB R2,[R2] LDR R1,underyou: LDR R1,[R1] MOVS R1,R1: CMPNE R1,#61: MOVEQ R2,R2,ASR#1: ADDEQ R2,R2,#64 MOVEQ R0,R0,ASR#1 ANDS R7,R3,#&FF000000: CMPNE R7,#&FF000000 MOVEQ R7,#7: MOVNE R7,#6: MOVNE R2,R2,ASR#1 MOV R8,#&400 .loop MUL R3,R2,R3: MOV R3,R3,ASR R7 MUL R8,R2,R8: MOV R8,R8,ASR R7 SUBS R0,R0,#1: BPL loop: STR R3,[R10] MOV R0,R8 .onIV2 BL amibraking LDR R7,h: CMN R7,#&6000: BLT diing LDR R8,tdead: LDRB R8,[R8]: CMP R8,#1 BNE ndiing:.diing BL reinitar:BL doom: BL resettime:.ndiing LDR R7,h: CMP R7,#&100: BGT onIV3 LDR R0,squarez: LDR R0,[R0]: CMP R0,#0 LDRNE R0,tuPe: LDRNE R0,[R0]: MOVNES R0,R0: BEQ onIV3 .nonIV3 LDR R0,tstime: LDR R1,[R0]: MOVS R1,R1: BNE onIV3 LDR R1,tfrs: LDRB R1,[R1]: MOVS R1,R1: BNE onIV3 LDR R1,[R0,#-4]: MOVS R1,R1: BLNE procend:.onIV3 LDMFD R13!,{R15} .underyou EQUD squareon .squarez EQUD squareon .tfrs EQUD frames .tuPe EQUD P:.tstime EQUD stimer .tdead EQUD dead .ormouse MOV R0,#8: BL chmkey: BEQ dobrake: MOV R0,#&400: B onIV2 BNE dobrake: MOV R0,#&400: B onIV2 .tgv EQUD gnd .tox EQUD x:.tdoy EQUD dy .tobrakg EQUD braking .ginput EQUD input .pshopg EQUD shopgoing .tbste EQUD buttonstate ] endbouncer=P%:P%=analyser [OPT T .gcarg EQUD carriagem .stcarg EQUD &70B0 .tmapc EQUD colmapm .promptcol EQUD &FFFDD3 .keycol EQUD &444363 .keysgo EQUD options+&14 .okgnd EQUD 0 .tgoest EQUD goesit .ttime EQUD time .tbanptr EQUD bannerptr .tws EQUD s .gouptime EQUD goingup .nokgnd MOV R10,#0: STRB R10,okgnd: MOV R15,R14 .wrsq STMFD R13!,{R14} MOV R10,#0: STRB R10,okgnd LDR R0,tgoest: LDR R1,[R0,#zap-goesit] CMN R1,#1: LDR R2,[R0] ORRNE R5,R2,#&FF0000: STRNE R5,alterred STRNEB R1,[R2]: MOVNE R5,R1,LSR#8: STRNEB R5,[R2,#1] LDR R4,[R0,#goesit2-goesit]: CMP R4,#0 MOVNE R5,#16: STRNEB R5,[R4] MOVNE R5,#0: STRNEB R5,[R4,#1] CMP R1,#18: LDREQ R6,[R0]: MOVNE R6,#0: STR R6,[R0,#goesit2-goesit] MVN R2,#0: STR R2,[R0,#zap-goesit] LDR R0,ttime: LDRB R1,[R0]: CMP R1,#9: BNE notimup LDR R6,gouptime: LDR R6,[R6]: MOVS R6,R6: BNE notimup STR R10,[R0]: STR R10,[R0,#4] LDR R0,tbanptr: ADD R1,R0,#timeup-bannerptr: STR R1,[R0] MOV R1,#32: STRB R1,[R0,#bannerb-bannerptr] LDR R0,tws: LDR R1,[R0]: MOVS R1,R1: MOVEQ R1,#2: STREQ R1,[R0] .notimup LDMFD R13!,{R15} .alterred EQUD 2 .new MOV R1,#2: STR R1,alterred: MOV R15,R14 .getalturd LDR R1,alterred: MOV R15,R14 .smltb EQUD 1024 EQUD .94*1024 EQUD .94^2*1024 EQUD .94^3*1024 EQUD .94^4*1024 EQUD .94^5*1024 EQUD .94^6*1024 EQUD .94^7*1024 EQUD .94^8*1024 EQUD .94^9*1024 EQUD .94^10*1024 EQUD .94^11*1024 EQUD .94^12*1024 .demoflag EQUD 0 .slowdown LDR R0,tspdo: LDR R2,[R0,#s-spd]: MOVS R2,R2: MOVEQ R15,R14 LDR R0,[R0]: ADR R1,smltb: CMP R0,#12: MOVGT R0,#12 LDR R1,[R1,R0,LSL#2] LDR R2,tvell: LDR R0,[R2]: MOV R0,R0,ASR#10:MUL R0,R1,R0 STR R0,[R2] MOV R15,R14 .thei EQUD height .tvell EQUD velo .flyinit STMFD R13!,{R14} BL refr2disp MOV R0,#0: BL wrbarr LDR R0,thei: MOV R1,#&40000000: STR R1,[R0] \Cannot see ball LDR R0,tvell: MOV R1,#0: STR R1,[R0] LDR R0,tbt: LDR R1,smaller: STR R1,[R0] BL initcsh BL resettime BL spdisz LDMFD R13!,{R15} .endfly LDR R0,tbt: LDR R1,bigger: STR R1,[R0] MOV R15,R14 .tbt EQUD bt .bigger EQUD 1+200/4*&10000 .smaller EQUD 1+140/4*&10000 .tbanptr EQUD bannerptr .flyframe STMFD R13!,{R14} BL storeoldpos: BL flip3: BL dmjunk BL cls: BL spacejunk: BL updatescr:BL xyzcode BL mightdobanner BL timer LDR R0,tbanptr: LDRB R1,[R0,#bannerb-bannerptr]: LDR R2,[R0] STMFD R13!,{R0-R2} BL vmotion BL slowdown BL deathdo BL speedoas0 BL dcash BL dtime MOV R1,#256-58: BL scanne: MOVEQ R5,#&1000000: MOVNE R5,#&400000 MOV R1,#256-42: BL scanne: MOVEQ R5,R5,ASR#3 LDR R0,tvell: LDR R1,[R0]: RSB R2,R1,R5 ADD R1,R1,R2,ASR#6: STR R1,[R0] LDMFD R13!,{R0-R2}: STRB R1,[R0,#bannerb-bannerptr]: STR R2,[R0] MOVS R1,R1: LDMNEFD R13!,{R15} LDR R2,[R0]: ADR R3,demofl: CMP R2,R3 ADREQ R3,spacefl: STR R3,[R0] MOV R1,#16: STRB R1,[R0,#bannerb-bannerptr] LDMFD R13!,{R15} .demofl EQUS " Demo Mode":EQUB 13 .spacefl EQUS " ":EQUB 13:ALIGN .tspdo EQUD spd .tnewto EQUD newt .togote EQUD got .trices EQUD prices .getpartext \ R0 = num. \ on exit, R0 = price to deduct AND R0,R0,#&1F LDR R3,togote: ADR R10,dedtab MOV R4,#5 MVN R5,#0:.loop2 LDRB R11,[R10],#1: LDRB R12,[R10],#1 CMP R0,R11: BLT noth CMP R0,R12: BGT noth CMP R0,#10: MOVEQ R9,#0: MOVNE R9,R0 MVN R7,#0: .loop ADD R7,R7,#1: LDRB R6,[R7,R3] CMP R6,#&FF: BEQ endo AND R6,R6,#&3F CMP R6,R11: BLT loop: CMP R6,R12: BGT loop CMP R6,R9: BEQ loop MOV R5,R6:.endo .noth SUBS R4,R4,#1: BNE loop2 STR R5,xx MOVS R5,R5: MOVMI R0,#0: MOVMI R15,R14 LDR R0,trices: LDR R0,[R0,R5,LSL#2]: MOV R0,R0,LSR#1 MOV R15,R14 .dedtab EQUB 0:EQUB 3:EQUB 4:EQUB 5:EQUB 8:EQUB 9 EQUB 19:EQUB 20:EQUB 10:EQUB 11 ALIGN .xx EQUD 0 .tx EQUD x .tosmap EQUD starmap .azero EQUD 0 .newstars \ R4 is seed MOV R0,R14: MOV R2,#&FF0000: ORR R2,R2,#&1000000 LDR R3,tosmap MOV R1,#84:.loop BL randR6: AND R6,R2,R6,LSL#16: STR R6,[R3],#4:STR R6,[R3,#8] BL randR6: AND R6,R6,#&FF: MOV R10,#&BC: MUL R6,R10,R6 MOV R6,R6,LSR#8: STR R6,[R3],#4 BL randR6: AND R6,R6,#&1F: ADD R6,R6,#200: STR R6,[R3],#8 MOV R6,#0: STR R6,[R3,#-4] SUBS R1,R1,#1: BNE loop MOV R1,#&550:.loop LDR R4,[R3,#-4]!:STR R4,[R3,#&550] SUBS R1,R1,#4: BNE loop MOV R15,R0 .randR6 RSB R6,R4,#&1D0: ADD R4,R4,#&E5:MUL R6,R4,R6 SUB R6,R6,R6,ROR#15 EOR R6,R6,R6,ASR#8: EOR R4,R6,R6,RRX: MOV R15,R14 : .oldstars MOV R1,#&550:LDR R3,tosmap: ADD R2,R3,#&550 .loop LDMIA R2!,{R4,R5,R6,R7} STMIA R3!,{R4,R5,R6,R7}:SUBS R1,R1,#16: BNE loop MOV R15,R14 : .sndDma EQUD musictosounddma .tostab EQUD logtable .last EQUD 0 .barsgo EQUD &1FC0000+&11000+&2737-&D40+&15+&140*7+&3C0-60 ; bodged .barsgo2 EQUD &1FC0000+&11000+&2737-&D40+&15+&140*7+&3C0-60 ; bodged .m15go EQUD&1FC0000+2*(&11000+&2737-&D40+&15+&140*7+&3C0-60)+14 ; bodged .follow EQUD 0 .freqtab ]FORT1=1 TO 7:[OPT T EQUB (1.71^(T1-1))*4 ; was (1.56^(T1-1))*4 ]NEXT FORT1=1 TO 7:[OPT T EQUB 16-1.5*T ]NEXT:[OPT T ALIGN .stena MOV R0,#0: STR R0,enableall:.fgt MOV R0,#&14000: STR R0,ofst4 MOV R15,R14 .fftoff MOV R0,#0: STR R0,enable: B fgt .sortoutfft LDR R0,enable: TST R0,#2: BEQ shopbxk .shopxts LDR R0,enable LDR R4,ofst2: LDR R5,barsgo2: TST R0,#1: ADDEQ R5,R5,#&23000 SUBEQ R4,R4,#&23000: STR R4,ofst1: STR R5,barsgo MOV R0,#0: STR R0,ofst4 LDR R0,enable: ORR R0,R0,#2: STR R0,enable MOV R15,R14 .shopbxk LDR R0,enable: BIC R0,R0,#2: STR R0,enable LDR R0,barsgo2: MOV R1,#&14000: STR R0,barsgo: STR R1,ofst1 STR R1,ofst4 MOV R15,R14 .noFFT MOV R0,#0: STR R0,enable: MOV R15,R14 .enable EQUD 0 .ofst1 EQUD &14000 .ofst2 EQUD -&7BD1 .ofst4 EQUD &14000 .enableall EQUD 1 .htable EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0 .tupcall EQUD upcall .initvnt MOV R0,#16: ADR R1,analyse: MOV R2,#200: SWI "OS_Claim" MOV R0,#&1D: LDR R1,tupcall: MOV R2,#200: SWI "XOS_Claim" MOV R0,#&1C: LDR R1,ttickerv: MOV R2,#0: SWI "XOS_Claim" MOV R15,R14 .endvnt MOV R0,#16: ADR R1,analyse: MOV R2,#200: SWI "XOS_Release" MOV R0,#&1D: LDR R1,tupcall: MOV R2,#200: SWI "XOS_Release" MOV R0,#&1C: LDR R1,ttickerv: MOV R2,#0: SWI "XOS_Release" STMFD R13!,{R14}: BL stopmus: LDMFD R13!,{R14} B oldpointer .tsinsp EQUD specsin .sparks BL sparkleframe: BL mayscroll: LDMFD R13!,{R0-R12,R15}^ .ttickerv EQUD tickerv .alloff EQUD 1 .stalloff STR R0,alloff: MOV R15,R14 .analyse CMP R0,#4: MOVNE R15,R14 STMFD R13!,{R0-R12,R14} LDR R0,alloff: MOVS R0,R0: LDMEQFD R13!,{R0-R12,R15} BL irqstars BL nottoofast BL mightballspark LDR R0,enableall: MOVS R0,R0: BNE sparks BL controllight LDR R0,enable: MOVS R0,R0: LDRB R0,mode: CMPNE R0,#15: BEQ incclock STR R13,follow ADR R13,freqtab: ADD R13,R13,#7 MOV R11,#7 LDR R0,tsinsp LDR R6,tostab LDR R10,barsgo .loop3 LDRB R4,[R13,-R11] MOV R9,#0 MOV R8,#2 MOV R1,#&E0: \ phase .loop2 LDR R2,sndDma: LDR R2,[R2] MOV R3,#0: \ Amplitude ]FORT1=0 TO 7:[OPT T ADD R1,R1,R4: AND R1,R1,#&FF LDR R7,[R0,R1,LSL#2] ]FORT2=0 TO 3:[OPT T LDRB R5,[R2],#1: LDR R5,[R6,R5,LSL#2] MLA R3,R7,R5,R3 SUB R3,R3,R5,LSL#7 ]NEXT:NEXT:[OPT T MOVS R3,R3,ASR#6:RSBMI R3,R3,#0 MLA R9,R3,R3,R9 MOV R1,#&20: SUBS R8,R8,#1: BNE loop2 SUB R3,R13,R11: LDRB R3,[R3,#7]: MUL R9,R3,R9 LDR R3,thtab: LDR R5,[R3,R11,LSL#2] SUB R5,R5,R5,ASR#2: CMP R9,R5: MOVLT R9,R5 STR R9,[R3,R11,LSL#2] MOV R9,R9,ASR#1 LDR R3,ofst1: ADD R1,R10,R3 LDR R3,ofst4: ADD R4,R1,R3 MOV R3,#80 CMP R9,#&100000: MOVLT R3,#36: STRB R3,[R10] STRB R3,[R1]: STRB R3,[R4] CMP R9,#&400000: MOVLT R3,#36: STRB R3,[R10,#-&140] STRB R3,[R1,#-&140]: STRB R3,[R4,#-&140] MOV R3,#39 CMP R9,#&900000: MOVLT R3,#36: STRB R3,[R10,#-&280] STRB R3,[R1,#-&280]: STRB R3,[R4,#-&280] CMP R9,#&1000000: MOVLT R3,#36: STRB R3,[R10,#-&3C0] STRB R3,[R1,#-&3C0]: STRB R3,[R4,#-&3C0] CMP R9,#&1900000: MOVLT R3,#36: STRB R3,[R10,#-&500] STRB R3,[R1,#-&500]: STRB R3,[R4,#-&500] MOV R3,#38 CMP R9,#&2400000: MOVLT R3,#36: STRB R3,[R10,#-&640] STRB R3,[R1,#-&640]: STRB R3,[R4,#-&640] ADD R10,R10,#1: SUBS R11,R11,#1: BNE loop3 LDR R13,follow B incclock .mode EQUD 13 .thtab EQUD htable-4 .passtoascii LDR R4,tchea: LDRB R4,[R4]: MOVS R4,R4: BNE asterix ADR R4,temp MOV R5,#10:.loop LDRB R0,[R10],#1: ADD R0,R0,#22 CMP R0,#48: ADDLT R0,R0,#43: STRB R0,[R4],#1 SUBS R5,R5,#1: BNE loop SUB R10,R10,#5: SUB R4,R4,#1 MOV R6,#5:.loop LDRB R0,[R4],#-5: STRB R0,[R10],#-5 LDRB R0,[R4],#4: STRB R0,[R10],#6 SUBS R6,R6,#1: BNE loop MOV R15,R14 .asterix MOV R4,#9:MOV R3,#42:.loop STRB R3,[R10,R4]: SUBS R4,R4,#1: BPL loop: MOV R15,R14 .tchea EQUD cheat .temp EQUS " " .specsin ]endanalyser=P%+&400:P%=mapsdo FORH=0 TO &3FC STEP4: specsin!H=SIN(H/&200*PI)*&80+&80:NEXT [OPT T .tosprite32 EQUD 0 FNalignme(12) .tosprite1 EQUD mapspr .storeR5 EQUD 0 .tlowresbs BNE bigsprite+tlowresbs-whichbigsprite .towbs EQUD whichbigsprite FNalignme(4) .bigsprite \ R0 = mapptr, R1=yindex, R2=scrnbot \ R10 =width (pixels*20000), R9 = display position \ R7= spriteno., R6=column index, R8=free \ R5 = used as x counter SUB R6,R6,#1: LDRB R7,[R0,R6]:SUB R6,R6,#2 LDR R12,tosprite1: ADD R7,R12,R7,LSL#8 AND R12,R1,#&3C00000 ADD R7,R7,R12,LSR#18 ADD R14,R9,R10,LSR#17 CMP R9,R2: BLT offend1 CMP R14,R4: BGE chkrowdone CMP R10,#&220000: BGE maybebig CMP R10,#&1E0000: BGE almostbig .normalsprite .loop SUB R14,R10,R5: ADDS R14,R14,R5,LSR#4 LDR R8,[R7,#12]: MOV R12,R8,LSR#24 .endin42 STRPLB R12,[R9],#1 CMP R14,#&20000: MOV R14,R14,LSL#15: STRGEB R12,[R9],#1 .begloop3 ] FORT1=8 TO 0 STEP -4 [OPT T ADDS R14,R14,R5,LSL#11 MOVCS R12,R8,LSR#16 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#11 MOVCS R12,R8,LSR#8 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#11 STRCSB R8,[R9],#1 ADDS R14,R14,R5,LSL#11 LDR R8,[R7,#T1]: MOVCS R12,R8,LSR#24 STRCSB R12,[R9],#1 ]NEXT [OPT T ADDS R14,R14,R5,LSL#11 MOVCS R12,R8,LSR#16 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#11 MOVCS R12,R8,LSR#8 STRCSB R12,[R9],#1 ADDS R14,R14,R5,LSL#11 STRCSB R8,[R9],#1 MOV R14,R14,ASR#1:ORR R14,R14,#&80<<24 ADDS R6,R6,#1:ADD R10,R5,R14,ASR#14: BLT rowdone LDRB R7,[R0,R6]: CMP R7,#&FF: BEQ notabigsp SUB R6,R6,#1: LDRB R7,[R0,R6]:SUB R6,R6,#2 LDR R12,tosprite1: ADD R7,R12,R7,LSL#8 AND R12,R1,#&3C00000 ADD R7,R7,R12,LSR#18 ADD R14,R9,R10,LSR#17 CMP R14,R4: BGE chkrowdone CMP R10,#&220000: BGE maybebig CMP R10,#&1E0000 BLT normalsprite : FNalignme(0) .almostbig SUB R14,R10,R5 .loop ADDS R14,R14,R5,LSR#4 LDR R12,[R7,#12]: MOVPL R8,R12,LSR#24 STRPLB R8,[R9],#1: SUBPLS R14,R14,#&20000 STRPLB R8,[R9],#1: SUBPL R14,R14,#&20000 ] FORT1=0 TO 14:[OPT T ADDS R14,R14,R5,LSR#4 ] IF (T1 MOD 4)=0 T=FNmovpl81216: sri=8 IF (T1 MOD 4)=1 T=FNmovpl8128: sri=8 IF (T1 MOD 4)=2 sri=12 IF (T1 MOD 4)=3 T=FNldritpl(T1): sri=8 [OPT T STRPLB sri,[R9],#1: SUBPLS R14,R14,#&20000 STRPLB sri,[R9],#1: SUBPL R14,R14,#&20000 ]NEXT:[OPT T ADDS R6,R6,#1: ADD R10,R5,R14: BLT rowdone LDRB R7,[R0,R6]: CMP R7,#&FF: BEQ notabigsp B wmam2 : FNalignme(12) .maybebig SUB R14,R10,R5 .loop ADDS R14,R14,R5,LSR#4 LDR R12,[R7,#12]: MOVPL R8,R12,LSR#24 STRPLB R8,[R9],#1: SUBPLS R14,R14,#&20000 STRPLB R8,[R9],#1 SUBPLS R14,R14,#&20000: STRPLB R8,[R9],#1 ;;;;;;;; check MOV R14,R14,LSL#15 .begloop1 ] FORT1=0 TO 14:[OPT T .begloop ADDS R14,R14,R5,LSL#11 ] IF (T1 MOD 4)=0 T=FNmov81216: sri=8 IF (T1 MOD 4)=1 T=FNmov8128: sri=8 IF (T1 MOD 4)=2 sri=12 IF (T1 MOD 4)=3 T=FNldrit(T1): sri=8 [OPT T STRCSB sri,[R9],#1 .endin43 STRB sri,[R9],#1 ]NEXT:[OPT T : MOV R14,R14,ASR#1: ORR R14,R14,#&80<<24 ADDS R6,R6,#1:ADD R10,R5,R14,ASR#14: BLT rowdone .wontmulanymore LDRB R7,[R0,R6]: CMP R7,#&FF: BEQ notabigsp .wmam2 SUB R6,R6,#1: LDRB R7,[R0,R6]:SUB R6,R6,#2 LDR R12,tosprite1: ADD R7,R12,R7,LSL#8 AND R12,R1,#&3C00000 ADD R7,R7,R12,LSR#18 ADD R14,R9,R10,LSR#17 CMP R14,R4: BGE chkrowdone CMP R10,#&220000: BGE maybebig CMP R10,#&1E0000: BGE almostbig: BLT normalsprite FNalignme(8) : .chkrowdone SUB R14,R10,R5: ADDS R14,R14,R5,LSR#5: BMI begloop2 LDRB R8,[R7,#15]:.loop2 CMP R9,R4: BGT rowdone SUBS R14,R14,#&20000: STRB R8,[R9],#1: BPL loop2 .begloop2 ] FORT1=0 TO 14:[OPT T .begloop ADDS R14,R14,R5,LSR#4: BMI begloop+32 LDRB R8,[R7,#14-T1]:.loop2 CMP R9,R4: BGT rowdone SUBS R14,R14,#&20000: STRB R8,[R9],#1: BPL loop2 ]NEXT:[OPT T .imfine ADDS R6,R6,#1:ADD R10,R14,R5: BLT rowdone LDRB R7,[R0,R6]: CMP R7,#&FF: BNE bigsprite: B notabigsp : FNalignme(0) .offend1 CMP R14,R2 ADDLT R9,R9,R10,LSR#17: ANDLT R10,R10,#&1FC00: BLT fine SUB R8,R2,R9 ; R8 is pixels not plotted ; gotta make R12 first plotted pixel MOV R9,R2 MOV R12,#15 MOVS R14,R10,LSR#4: BMI offend:.loop2 SUBS R8,R8,#1: BEQ onendS SUBS R14,R14,#&20000: SUBPLS R8,R8,#1: BEQ onendS SUBPL R14,R14,#&20000 .offend SUB R12,R12,#1: ADDS R14,R14,R10,LSR#4: BMI offend SUBS R8,R8,#1: BEQ onendS SUBS R14,R14,#&20000: SUBPLS R8,R8,#1: BEQ onendS SUBPL R14,R14,#&20000 SUB R12,R12,#1: ADDS R14,R14,R10,LSR#4: BMI offend B loop2 : .onendS SUBS R14,R14,#&20000 ADDMI R14,R14,R10,LSR#4: SUBMI R12,R12,#1 .onend LDRB R8,[R7,R12]:.loop2 STRB R8,[R9],#1: SUBS R14,R14,#&20000: BPL loop2 ]:FORT2=0 TO 15:[OPT T .loop SUBS R12,R12,#1: BMI imfine ADDS R14,R14,R10,LSR#4: BMI loop LDRB R8,[R7,R12]:.loop2 STRPLB R8,[R9],#1: SUBPLS R14,R14,#&20000: BPL loop2 ]NEXT:[OPT T : FNalignme(4) .bigsprite2 STR R5,storeR5 SUB R6,R6,#1: LDRB R7,[R0,R6]:SUB R6,R6,#2 LDR R5,tosprite1: ADD R7,R5,R7,LSL#8 AND R12,R1,#&3C00000 ADD R7,R7,R12,LSR#18 MOV R5,#16 STR R0,gor0 STR R1,gor1 STR R13,gor13 LDRB R8,[R7,#14] MOV R14,#0:.loop SUBS R5,R5,#2: BMI retbackf:.loop3 ADDS R14,R14,R10,ASR#3: BPL dorrit: MOV R0,R8: LDRB R8,[R7,R5] CMP R0,R8: BEQ loop AND R13,R8,#&60: AND R1,R0,#&60 CMP R13,R1: MOVLE R13,R1 AND R12,R8,#&88: AND R1,R0,#&88 CMP R12,R1: ORRGT R13,R13,R12: ORRLE R13,R13,R1 AND R12,R8,#&14: AND R1,R0,#&14 CMP R12,R1: ORRGT R13,R13,R12: ORRLE R13,R13,R1 AND R12,R8,#&03: AND R1,R0,#&03 CMP R12,R1: ORRLE R8,R13,R12: ORRGT R8,R13,R1 SUBS R5,R5,#2: BPL loop3 .retbackf LDR R0,gor0:LDR R5,storeR5: MOV R10,R14 LDR R1,gor1: LDR R13,gor13 ADDS R6,R6,#1: BLT rowdone2 ADDS R10,R10,R5 BMI loop5 LDRB R7,[R0,R6]: CMP R7,#&FF: BNE bigsprite2 ; notabigs2 copy SUB R6,R6,#1: LDRB R7,[R0,R6] .loop4 SUBS R6,R6,#1: LDRB R8,[R0,R6] SUBS R6,R6,#1:CMPCS R8,#&FF LDRCSB R8,[R0,R6]: CMPCS R8,R7 ADDEQ R10,R10,R5: BEQ realloop4 MOVS R7,R7: BEQ cleq CMP R10,#0:BLT fine2 B maycheck3 .dorrit CMP R9,R2: CMPGE R4,R9: STRGEB R8,[R9]: ADD R9,R9,#1 LDRB R8,[R7,R5] SUB R14,R14,#&20000 SUBS R5,R5,#2: BPL loop3 LDR R0,gor0:LDR R5,storeR5: MOV R10,R14 LDR R1,gor1: LDR R13,gor13 ADDS R6,R6,#1: BLT rowdone2 ADDS R10,R10,R5 BMI loop5 LDRB R7,[R0,R6]: CMP R7,#&FF: BNE bigsprite2 ; notabigs2 copy SUB R6,R6,#1: LDRB R7,[R0,R6] .loop4 SUBS R6,R6,#1: LDRB R8,[R0,R6] SUBS R6,R6,#1:CMPCS R8,#&FF LDRCSB R8,[R0,R6]: CMPCS R8,R7 ADDEQ R10,R10,R5: BEQ realloop4 MOVS R7,R7: BEQ cleq CMP R10,#0:BLT fine2 B maycheck3 .gor0 EQUD 0 .gor1 EQUD0 .gor13 EQUD 0 ] endmapsdo=P%:P%=clear [OPT T MOV R0,#0:.incl STMFD R13!,{R14}: STR R13,st13 MOV R1,R0: MOV R2,R0 MOV R3,R0: MOV R4,R0: MOV R5,R0 MOV R6,R0: MOV R7,R0: MOV R8,R0 MOV R9,R0: MOV R10,R0 MOV R13,R0: MOV R14,R0 .loop STMIA R11!,{R0-R10,R13-R14} STMIA R11!,{R0-R10,R13-R14} STMIA R11!,{R0-R10,R13-R14} STMIA R11!,{R0-R10,R13-R14} STMIA R11!,{R0-R10,R13-R14} STMIA R11!,{R0-R10,R13-R14} STMIA R11!,{R0-R1} CMP R11,R12: BLT loop LDR R13,st13: LDMFD R13!,{R14} MOV R15,R14 .superclear MOV R0,#0:STMFD R13!,{R14}: STR R13,st13 MOV R1,R0: MOV R2,R0 MOV R3,R0: MOV R4,R0: MOV R5,R0 MOV R6,R0: MOV R7,R0: MOV R8,R0 MOV R9,R0: MOV R10,R0 MOV R13,R0: MOV R14,R0 STR R12,s12 .loop MOV R12,#0 ]FORT1=1 TO 74:[OPT T STMIA R11!,{R0-R10,R12-R14} ]NEXT [OPT T STMIA R11!,{R0-R3} LDR R12,s12 CMP R11,R12: BLT loop LDR R13,st13: LDMFD R13!,{R15} .s12 EQUD 0 .blinded \ count up LDR R0,tbk: LDR R0,[R0]: MOVS R0,R0: MOVEQ R15,R14 LDRB R0,blindflag:MOVS R0,R0: MOVEQ R15,R14 ADD R0,R0,#5: CMP R0,#&100: MOVGE R0,#0: STRB R0,blindflag LDR R3,totinton: LDR R3,[R3]: MOVS R3,R3: MOVNE R15,R14 CMPLT R0,#&100-5: LDRLT R0,dimmer: MOVGE R0,#0 CMP R0,#&30: MVNLT R0,#0 STMFD R13!,{R0,R11,R12,R14} MOV R3,R0: BL dashcurvR3 LDMFD R13!,{R0,R11,R12,R14} B incl .blindflag EQUD 0 .dimmer EQUD &FCFCFCFC .blindon MOV R3,#1: STR R3,blindflag: MOV R3,#&66: MOV R15,R14 .blindoff MOV R3,#0: STR R3,blindflag: B stopfix .totinton EQUD tintgot .tbk EQUD bank .tbast2 EQUD base2:.tsbot EQUD scrnbot .tcarge EQUD carriage .tsldata EQUD sldata .theshop STMFD R13!,{R14} BL ensureeok BL initcsh: BL dcash LDR R0,tsldata: LDR R1,evenmorescrstart: ADD R11,R1,#&14000 ADD R2,R1,#&2E40:.loop CMP R1,R2:BGE doneshoplog LDRB R3,[R0],#1: AND R6,R3,#&F0: CMP R6,#&50 STRNEB R3,[R1],#1: STRNEB R3,[R11],#1 BNE loop: EOR R4,R6,R3 LDRB R6,[R0],#1:.loop2 CMP R1,R2: BGE doneshoplog LDRB R5,[R1,-R6]: STRB R5,[R1],#1: STRB R5,[R11],#1 SUBS R4,R4,#1: BNE loop2 B loop .evenmorescrstart EQUD &1FC0000 ; bodged .doneshoplog BL dai21FFB BL clearall2 LDR R6,tcmmap: LDR R5,colsr: STR R5,[R6] LDR R6,tbk: MOV R5,#0: STR R5,[R6] MOV R0,#6: BL newwall: MOV R0,#&5B00: ORR R0,R0,#&20 LDR R1,i1100: MOV R2,#24: BL drawicon LDR R0,tsbot: LDR R1,tbast2: LDR R1,[R1]: STR R1,[R0] BL box MOV R0,#7: MOV R1,#0: BL shopicons BL welcomes BL lsttemplates BL swallow MOV R10,#50:.loop BL scanesc MOVS R1,R1:BLNE mayquits: LDMNEFD R13!,{R0}: BNE lshop MOV R0,#&7E: SWI "OS_Byte" BL vsync: SWI "OS_Mouse" STR R0,xper: STR R1,yper STRB R2,newread: MOVS R2,R2: BNE yourout BL scanquit SUBNES R10,R10,#1: BNE loop:.yourout BL box LDMFD R13!,{R15} .welcomes LDR R6,tcmmap: LDR R5,colsr: STR R5,[R6] LDR R5,tcarge: LDR R6,m5590: STR R6,[R5]: MOV R0,#0: B dcomment .newread EQUB 0:.cl2 EQUB 0:.bstate EQUB 0:ALIGN .scan CMP R4,#&FF: BEQ templscan B scan1 .xper EQUD 0:.yper EQUD 0 .getmouse LDRB R0,newread:MOVS R0,R0:LDR R0,xper: LDR R1,yper MOV R6,#0: STR R6,newread MOV R2,#0: SWIEQ "OS_Mouse": STR R0,xper SUB R3,R1,#64: STR R3,yper: STRB R2,bstate: B scandash .entershop STMFD R13!,{R14} BL calctempprc BL notemplen BL dgame BL delhead1: BL delhead0 BL getalturd: BL resetprice BL theshop: MVN R0,#0: STRB R0,item2 .shoploop BL chkcash BL scanesc MOVS R1,R1:BLNE mayquits: BNE lshop BL chinv BL chcht: BL getmouse LDRB R5,item2: CMP R5,#&FF: BLEQ prapsnewt LDR R0,xper: CMP R0,#&204: BGT noscun LDR R1,yper: CMP R1,#460: BGE noscun CMP R1,#80: LDRGEB R4,item2: BLGE scan:.noscun BL scanquit BEQ leaveshop LDRB R0,bstate: TST R0,#4: BEQ hui LDR R11,xper: CMP R11,#&4F0: BGE hui LDR R11,yper: CMP R11,#&2E0: BGE hui CMP R11,#&254: BLT hui LDR R0,xper: SUBS R0,R0,#37: BCC hui: MOV R1,#160: BL divide32 MUL R3,R2,R1: SUB R4,R0,R3: CMP R4,#132: BGT shoploop LDRB R5,item2: CMP R5,R2: BEQ hui CMP R5,#255: BLEQ bckshpII .r2isitm2 STRB R2,item2: BL hlitei: BL shopbxk: BL bckshp LDRB R0,item2: CMP R0,#5: BLEQ shopxts LDRB R0,item2: CMP R0,#7: BEQ leaveshop BGE hui: BL getstbe: BL joino: BL shopi .hui LDR R1,warncol: MOV R0,#0: STR R0,warncol: MOVS R1,R1 BNE dogeteng: B saidit .lshop LDR R0,tmon: MVN R1,#1: STR R1,[R0]: BL fftoff: LDMFD R13!,{R15} .tmon EQUD cash .whatigot EQUD got .leaveshop BL shopbxk LDR R0,whatigot: MVN R1,#0:.loop LDRB R2,[R0],#1: CMP R2,#3: MOVLE R1,R2 CMP R2,#&FF: BNE loop MOVS R1,R1: BPL leaveshopII LDR R1,warnclo: STR R1,warncol .dogeteng BL vsync LDR R0,warncol: MOVS R0,R0: BEQ saidit BL bckshpII BL securetxt .itdogo FNaddr(50,450):.warncol EQUD 0 OPT FNequadd("Get an Engine!") EQUB 0:ALIGN .saidit LDR R0,warncol: MOVS R0,R0: BEQ shoploop SWI "XOS_ReadMonotonicTime": ADD R10,R0,#50 .loop SWI "OS_Mouse": MOVS R2,R2: BNE loop SWI "XOS_ReadMonotonicTime": CMP R0,R10: BLT loop BL scanquit: BEQ loop MOV R0,#19: SWI "OS_Byte" MOV R2,#&FF: STRB R2,item2: BL hlitei LDR R0,itdogo: MOV R1,#14*8 MOV R2,#10: SUB R0,R0,#2: BL getbck MOV R2,#0: B r2isitm2 .leaveshopII BL updatetempls BL calc: LDMFD R13!,{R15} .warnclo EQUD &141517 .tcmmap EQUD colmapm:.colsr EQUD &D32D0302 .m5590 EQUD -&5590 .i1100 EQUD &1FFB000+&1100-&C00 ; bodged .st13 EQUD0:.item2 EQUB 0 ALIGN .gitem2 LDRB R0,item2: MOV R15,R14 .xsize EQUB 16: EQUB 8: EQUB 44: EQUB 20 EQUB 8: EQUB 8: EQUB 40: EQUB 100 EQUD0: EQUD0: EQUD 0: EQUD 0 .ysize EQUB 16: EQUB 7: EQUB 44: EQUB 17 EQUB 7: EQUB 6: EQUB 37: EQUB 53 EQUD0: EQUD0 EQUD0: EQUD0 ALIGN .spstart EQUD spacestuff: EQUD spacestuff+&100 EQUD spacestuff+&138: EQUD spacestuff+&8C8 EQUD spacestuff+&A1C: EQUD spacestuff+&A54 EQUD spacestuff+&A84: EQUD spacestuff+&104C .restpoke EQUD 0: EQUD0: EQUD 0:EQUD 0 EQUD 0: EQUD0: EQUD 0:EQUD 0 EQUD 0: EQUD0: EQUD 0:EQUD 0 .t2base1 EQUD base1: .t2bank EQUD bank .tstctop EQUD scrntop .lastplonk EQUD &2000000-&4000+&500 ; bodged .tax EQUD ax .gjunkmap EQUD junkmap .gotmap EQUD -1 .stwork EQUD planetwrkspc .oflip3 EQUD bank2 .lmoder EQUD mode .clgot STR R15,gotmap: MOV R15,R14 .getj2 STR R15,gotmap .getj \R0=level STMFD R13!,{R14} LDR R11,oflip3: LDR R11,[R11]: LDR R12,stwork LDR R2,lmoder: LDRB R2,[R2]: CMP R2,#13: MOVNE R11,#&3C000 SUBS R11,R11,#&14000: ADDMI R11,R11,#&3C000 LDR R2,evenmorescrstart: ADD R11,R11,R2 ADD R11,R11,#&90: STR R11,[R12]: SUB R11,R11,#&90 MOV R12,#0: MOV R2,#0: STMIA R11!,{R2,R12}: STMIA R11!,{R2,R12} STMIA R11!,{R2,R12} LDR R11,gotmap: STR R0,gotmap CMP R0,R11: BEQ noclearp: LDR R12,lastplonk LDR R1,evenmorescrstart: ADD R1,R1,#&40000 MOV R5,#0: MOV R6,#0:.loop STMIA R12!,{R5,R6} CMP R12,R1: BLT loop .noclearp MOV R5,R0 MOV R12,#8 LDR R1,gjunkmap: LDR R2,tinfjnk LDR R6,lastplonk: ADR R8,restpoke MOVS R0,R0: BEQ okthn:.loop .loop2 LDR R3,[R1],#16: CMN R3,#2: BLO loop2: SUB R1,R1,#12 SUBS R0,R0,#1: BNE loop:.okthn LDR R4,[R1],#4: CMN R4,#2: MVNHS R4,#0: STRHS R4,[R2] LDMHSFD R13!,{R15} CMP R4,#&1000: BLS nochange CMP R11,R5: BEQ noreget ADD R6,R6,#3: BIC R6,R6,#3 STR R6,[R8],#4 BL planetcode ADR R7,xsize: STRB R4,[R7,R12]!: STRB R4,[R7,#xsize-xsize] STRB R9,[R7,#ysize-xsize] .noreget STR R12,[R2],#4: LDMIA R1!,{R7,R9,R10}:ADD R12,R12,#1 STMIA R2!,{R7,R9,R10} B okthn .nochange STR R4,[R2],#4: LDMIA R1!,{R7,R9,R10} STMIA R2!,{R7,R9,R10}: B okthn .initmap LDR R0,mapcopyptr:.maptoR0 LDR R1,mapstt: MOV R10,#&1000 B decompress .initstmapst LDR R1,mapcopyptr .stmapst STR R1,mapstt: MOV R15,R14 .tinfjnk EQUD junkinfo .mapstt EQUD map .mapcopyptr EQUD mapcopy .tedit EQUD editcopy : .dmjunk LDR R0,tinfjnk LDR R1,tstctop: LDR R5,[R1] LDR R12,tax: LDR R12,[R12] .loop LDR R2,[R0],#16 MOVS R2,R2: MOVMI R15,R14 LDR R3,[R0,#-4] ADD R3,R3,R12,ASR#8: STR R3,[R0,#-4] B loop .tysize EQUD ysize .sgoes EQUD 0 .spacejunk STMFD R13!,{R14}: STR R13,sgoes LDR R0,tinfjnk \ type, xold, screen address y, xposition .loop LDR R1,tstctop: LDR R5,[R1] LDR R2,[R0],#16 MOVS R2,R2: LDRMI R13,sgoes: LDMMIFD R13!,{R15} LDR R3,[R0,#-4]: MOV R14,R3,ASR#8:CMP R14,#320: BGE loop: LDR R6,[R0,#-8] LDR R7,tysize: LDRB R8,[R7,R2]! LDRB R12,[R7,#xsize-ysize] ADR R7,spstart: LDR R7,[R7,R2,LSL#2] MOVS R3,R14: MOVPL R4,R12: MOVPLS R9,#1: ADDMIS R4,R12,R3: BLE loop MOVS R3,R3: SUBMI R7,R7,R3: ADDPL R6,R6,R3 ANDMI R9,R7,#3: BICMI R7,R7,#3: SUBMI R6,R6,R9 \ must be a better way to do the above, but if it works... ADDPL R9,R3,R12: SUBPLS R9,R9,#320: SUBPL R4,R12,R9 SUB R10,R0,#32: STR R0,stco: MOVPL R0,#1: MOVMI R0,#0 ADD R6,R5,R6 MOV R13,R12 CMP R12,#1: LDRLE R0,stco: BLE loop \ R0 = sacred, 4 = xsize, R6 =scr addr, R7 = spaddr, R8=ysize \ R13 = x add AND R2,R6,#3: MOV R2,R2,LSL#3: RSB R1,R2,#32: BIC R6,R6,#3 .loopchk LDR R11,[R10,#12]: CMN R11,#1: BEQ nosuperpos MOV R11,R11,ASR#8: SUBS R11,R11,R14: RSBMI R11,R11,#0 CMP R11,R4: BGT noworryloopchk LDR R11,[R10,#8]: ADD R11,R11,R5: SUBS R11,R11,R6: RSBMI R11,R11,#0 ADD R9,R8,R8,LSL#2: CMP R11,R9,LSL#6: BLE superpos .noworryloopchk SUB R10,R10,#16: B loopchk .superpos CMP R1,#32: BEQ wordplanet .nochklap MOV R10,R6: MOV R11,R7 LDR R9,[R7]:MOVS R5,R9,LSL R2: LDREQ R5,[R6] MOVS R3,R3: CMPMI R1,#32 STRPL R5,[R6],#4:ADDMI R6,R6,#4 MOV R12,R4: SUB R12,R12,#4 SUBS R12,R12,#1: BMI endcol3 SUBS R12,R12,#16: BMI mustfalloutpl .loop3 LDR R14,[R7,#4]!:MOV R9,R9,LSR R1 ORRS R5,R9,R14,LSL R2: LDREQ R5,[R6] LDR R9,[R7,#4]!:MOV R14,R14,LSR R1 ORRS R14,R14,R9,LSL R2: STREQ R5,[R6],#8: STMNEIA R6!,{R5,R14} LDR R14,[R7,#4]!:MOV R9,R9,LSR R1 ORRS R5,R9,R14,LSL R2: LDREQ R5,[R6] LDR R9,[R7,#4]!:MOV R14,R14,LSR R1 ORRS R14,R14,R9,LSL R2: STREQ R5,[R6],#8: STMNEIA R6!,{R5,R14} SUBS R12,R12,#16: BGE loop3 .mustfalloutpl AND R12,R12,#15 LDR R14,[R7,#4]!:MOV R9,R9,LSR R1 ORRS R5,R9,R14,LSL R2: LDREQ R5,[R6] SUBS R12,R12,#4: BMI endcol LDR R9,[R7,#4]!:MOV R14,R14,LSR R1 ORRS R14,R14,R9,LSL R2: STREQ R5,[R6],#8: STMNEIA R6!,{R5,R14} SUBS R12,R12,#4: BMI endcol2 LDR R14,[R7,#4]!:MOV R9,R9,LSR R1 ORRS R5,R9,R14,LSL R2: LDREQ R5,[R6] SUBS R12,R12,#4: BMI endcol LDR R9,[R7,#4]!:MOV R14,R14,LSR R1 ORRS R14,R14,R9,LSL R2: STREQ R5,[R6],#8: STMNEIA R6!,{R5,R14} .endcol2 MOVS R9,R9,LSR R1: LDREQ R9,[R6]: CMP R0,#0: STREQ R9,[R6] ADD R6,R10,#&140: ADD R7,R11,R13: SUBS R8,R8,#1: BNE nochklap LDR R0,stco:B loop .endcol MOVS R14,R14,LSR R1: LDREQ R14,[R6,#4] CMP R0,#0: STR R5,[R6]: STREQ R14,[R6,#4] ADD R6,R10,#&140: ADD R7,R11,R13: SUBS R8,R8,#1: BNE nochklap LDR R0,stco:B loop .endcol3 MOVS R9,R9,LSR R1: LDREQ R9,[R6]: CMP R0,#0: STREQ R9,[R6] ADD R6,R10,#&140: ADD R7,R11,R13: SUBS R8,R8,#1: BNE nochklap LDR R0,stco:B loop .wordplanet MOV R10,R6: MOV R11,R7 SUBS R12,R4,#17: BMI chkendplan .loop3 LDMIA R7!,{R1,R2,R9,R14} MOVS R1,R1: STRNE R1,[R6] MOVS R2,R2: STRNE R2,[R6,#4] MOVS R9,R9: STRNE R9,[R6,#8] MOVS R14,R14: STRNE R14,[R6,#12] ADD R6,R6,#16 SUBS R12,R12,#16: BPL loop3 .chkendplan AND R12,R12,#15 LDMIA R7,{R1,R2,R9,R14} MOVS R1,R1: STRNE R1,[R6] SUBS R12,R12,#4: BMI endwordrow MOVS R2,R2: STRNE R2,[R6,#4] SUBS R12,R12,#4: BMI endwordrow MOVS R9,R9: STRNE R9,[R6,#8] SUBS R12,R12,#4: BMI endwordrow MOVS R14,R14: STRNE R14,[R6,#12] .endwordrow ADD R6,R10,#&140: ADD R7,R11,R13: SUBS R8,R8,#1: BNE wordplanet LDR R0,stco:B loop .stco EQUD 0 .nosuperpos CMP R1,#32: BEQ ncwordplanet MOV R9,R2,LSR#1: ADD R9,R9,#&E0 STRB R9,orrlslr2+1: STRB R9,orrlslr2a+1 SUB R9,R9,#&E0-&50: STRB R9,orrlslr2b+1: STRB R9,orrlslr2c+1 MOV R9,R1,LSR#1: ADD R9,R9,#&E0 STRB R9,movlsr+1: STRB R9,movlsra+1 SUB R9,R9,#&E0-&90 STRB R9,movlsrb+1: STRB R9,movlsrc+1 .realnochklap MOV R10,R6: MOV R11,R7 LDR R9,[R7]:MOVS R5,R9,LSL R2: LDREQ R5,[R6] MOVS R3,R3: CMPMI R1,#32 STRPL R5,[R6],#4:ADDMI R6,R6,#4 MOV R12,R4: SUB R12,R12,#4 SUBS R12,R12,#1: BMI ncendcol3 SUBS R12,R12,#16: BMI ncmustfalloutpl .loop3 LDR R14,[R7,#4]!:.movlsrb MOV R9,R9,LSR#8 .orrlslr2b ORR R5,R9,R14,LSL#18 LDR R9,[R7,#4]!:.movlsra MOV R14,R14,LSR#12 .orrlslr2a ORR R14,R14,R9,LSL#2: STMIA R6!,{R5,R14} LDR R14,[R7,#4]!:.movlsrc MOV R9,R9,LSR#30 .orrlslr2c ORR R5,R9,R14,LSL#22 LDR R9,[R7,#4]!:.movlsr MOV R14,R14,LSR#16 .orrlslr2 ORR R14,R14,R9,LSL#12: STMIA R6!,{R5,R14} SUBS R12,R12,#16: BGE loop3 .ncmustfalloutpl AND R12,R12,#15 LDR R14,[R7,#4]!:MOV R9,R9,LSR R1 ORR R5,R9,R14,LSL R2: SUBS R12,R12,#4: BMI ncendcol LDR R9,[R7,#4]!:MOV R14,R14,LSR R1 ORR R14,R14,R9,LSL R2: STMIA R6!,{R5,R14} SUBS R12,R12,#4: BMI ncendcol2 LDR R14,[R7,#4]!:MOV R9,R9,LSR R1 ORR R5,R9,R14,LSL R2: SUBS R12,R12,#4: BMI ncendcol LDR R9,[R7,#4]!:MOV R14,R14,LSR R1 ORR R14,R14,R9,LSL R2: STMIA R6!,{R5,R14} .ncendcol2 MOV R9,R9,LSR R1: CMP R0,#0: STREQ R9,[R6] ADD R6,R10,#&140: ADD R7,R11,R13: SUBS R8,R8,#1: BNE realnochklap LDR R0,stco:B loop .ncendcol MOV R14,R14,LSR R1: CMP R0,#0: STR R5,[R6]: STREQ R14,[R6,#4] ADD R6,R10,#&140: ADD R7,R11,R13: SUBS R8,R8,#1: BNE realnochklap LDR R0,stco:B loop .ncendcol3 MOV R9,R9,LSR R1: CMP R0,#0: STREQ R9,[R6] ADD R6,R10,#&140: ADD R7,R11,R13: SUBS R8,R8,#1: BNE realnochklap LDR R0,stco:B loop .ncwordplanet MOV R10,R6: MOV R11,R7 SUBS R12,R4,#17: BMI ncchkendplan .loop3 LDMIA R7!,{R1,R2,R9,R14} STMIA R6!,{R1,R2,R9,R14} SUBS R12,R12,#16: BPL loop3 .ncchkendplan AND R12,R12,#15 LDMIA R7,{R1,R2,R9,R14} STR R1,[R6]: SUBS R12,R12,#4: BMI ncendwordrow STR R2,[R6,#4]: SUBS R12,R12,#4: BMI ncendwordrow STR R9,[R6,#8]: SUBS R12,R12,#4: BMI ncendwordrow STR R14,[R6,#12] .ncendwordrow ADD R6,R10,#&140: ADD R7,R11,R13: SUBS R8,R8,#1: BNE ncwordplanet LDR R0,stco:B loop ]endclear=P%:P%=nowhere [OPT T .Newquays EQUD 0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0: EQUD 0 .heresmct EQUD msetyp .heresip EQUD input .chm2key LDR R1,heresip: LDRB R1,[R1]: CMP R1,#1 ADDEQ R0,R0,#&DB-&C6: B chkey .chmkey LDR R1,heresmct:LDRB R1,[R1]: CMP R1,#1 ADDEQ R0,R0,#&DD-&CC .chkey \ R0 = key number ADR R1,Newquays: LDRB R1,[R1,R0]: CMP R1,#256-126: BLE readjoy MOV R0,#&81 MOV R2,#&FF: SWI "OS_Byte": CMP R1,#255: MOV R15,R14 .chkey2 STMFD R13!,{R0,R14}: BL chkey LDMFD R13!,{R0,R15} .readjoy STMFD R13!,{R1-R12,R14}: BL joystatus: MOVVS R0,#0: LDMFD R13!,{R1-R12,R14} SUB R1,R1,#131:.loop ADDS R1,R1,#1: MOVMI R0,R0,ASR#1 BMI loop: AND R0,R0,#1: EORS R0,R0,#1: MOV R15,R14 : .tbott EQUD scrnbot:.tbbase2 EQUD base2 .noowall MOV R1,#0: B noowall .newwall \ R0=paper MOV R1,#1:.noowall STR R1,angelon STMFD R13!,{R0} STMFD R13!,{R0,R14} BL vsync .inwal2 MOV R1,#&14000: BL wrbbase BL flip:BL noangeldust:LDMFD R13!,{R0}: AND R0,R0,#&7F: BL wallpaper BL mightobl2 LDR R1,angelon: MOVS R1,R1: BLNE yesangeldust BL streal: BLEQ getreal LDMFD R13!,{R12,R14}: MOVS R14,R14 MOVMI R15,R12: BL flip: B copybk .newwall2 MOV R1,#1:.oowall2 STR R1,angelon: STMFD R13!,{R0} STMFD R13!,{R0,R14}:B inwal2 .noowall2 MOV R1,#0: B oowall2 .angelon EQUD 0 .toptfile EQUD options .getopts STMFD R13!,{R14}:BL nofsmes: LDMFD R13!,{R14} MOV R0,#&FF: ADR R1,com2: LDR R2,toptfile: MOV R3,#0 SWI "XOS_File" LDR R0,options+4: LDR R1,tinp: STR R0,[R1] LDR R1,options+8: STR R1,soundflag LDR R2,options+&C: STR R2,msesens LDR R2,options+&10: STR R2,msesens+4 LDRB R2,options+&22: STR R2,msetyp LDR R2,options+&24: STR R2,joymap ADR R2,options+&14: ADR R3,Newquays LDMIA R2,{R4,R5,R6,R7,R8,R9,R10}: STMIA R3,{R4,R5,R6,R7,R8,R9,R10} ANDS R1,R1,#1: MOVNE R0,#13 MOVNE R1,#4: SWINE "OS_Byte" STMFD R13!,{R14}:BL res1632: BL deathdo: LDMFD R13!,{R14} LDRB R0,options+&21: B putproject .readgames LDR R1,toptfile: LDR R0,[R1]: MOV R15,R14 .com2 EQUS ".Options": EQUB 13:ALIGN .joymap EQUD 0 .saveopts2 LDMFD R13!,{R14} .saveopts MOV R2,#0:.saveopts3 STMFD R13!,{R2} STMFD R13!,{R14}:BL nofsmes: LDMFD R13!,{R14} ADR R1,com2 MOV R0,#10: MOV R2,#&FF0: ORR R2,R2,#13: LDR R4,toptfile ADD R5,R4,#64 SWI "XOS_File" LDMFD R13!,{R2} STMFD R13!,{R14}:B annoyance : .lastpos EQUD1 .clearhscrap MOV R0,#1: STR R0,lastpos: B nobestd .niceDm STMFD R13!,{R0-R7,R10-R11,R14} BL Dmtext LDMFD R13!,{R0-R7,R10-R11,R15}^ .gbank EQUD bank .tscores EQUD hiscores .startpos EQUD &22000 .tendhs EQUD hiscores+49*24 .hsframe \ R0 = hiscore index STMFD R13!,{R14} LDR R6,lastpos LDR R8,tcma: LDR R7,tmca LDR R10,tscores: LDR R9,startpos ADD R10,R10,R0 MOV R11,#312:.loop2 CMP R0,#0: ADDLT R10,R10,#24: ADDLT R9,R9,#&140*12 ADDLT R0,R0,#24: BLT loop2 .loop1 LDR R12,tendhs: CMP R10,R12: LDMGTFD R13!,{R15} LDR R12,col1: STR R12,[R8] LDR R0,[R10],#4: ADR R1,buffer: MOV R2,#8 SWI "XOS_ConvertInteger4" ADD R12,R9,R2,LSL#3: STR R12,[R7] ADR R1,buffer: .loop LDRB R0,[R1],#1: MOVS R0,R0 SUBNE R0,R0,#&21: BLNE niceDm BNE loop SUB R3,R10,R6: CMP R3,#4: LDREQ R12,lcol: LDRNE R12,col2 STR R12,[R8]: ADD R12,R9,#&69 STR R12,[R7] MOV R3,#0:.loop LDRB R0,[R10,R3]: BL niceDm ADD R3,R3,#1: CMP R3,#19: BNE loop LDR R12,col3: STR R12,[R8]: ADD R12,R9,#&110 LDRB R0,[R10,#19] CMP R0,#&FF: BEQ dblank ADD R0,R0,#1 ADR R1,buffer: MOV R2,#4 SWI "XOS_ConvertInteger4" ADD R12,R12,R2,LSL#3: STR R12,[R7] ADR R1,buffer: .loop LDRB R0,[R1],#1: MOVS R0,R0 SUBNE R0,R0,#&21: BLNE niceDm:BNE loop .comeback ADD R10,R10,#20: ADD R9,R9,#&F00 SUBS R11,R11,#24: BPL loop1 LDMFD R13!,{R15} .dohighscores STMFD R13!,{R14}: BL noangeldust: BL notdgame: BL clearall BL ballsparkoff: BL copyica: BL savephlog: BL ballsparkon BL copy BL limitrect LDR R0,gbank: MOV R1,#0: STR R1,[R0] BL flip: MOV R0,#3: BL wallpaper: BL overbiglogo2: BL flip: BL copywall BL yesangeldust BL pensureon: BL decompressNF: BL specialhi LDR R0,best2day: MOVS R0,R0: BMI noban ADR R1,best: MOV R2,#7 SWI "XOS_ConvertInteger4" MOV R5,#32: ADR R6,nothere: ADR R1,best .loop LDRB R4,[R1],#1: CMP R4,#0: STREQB R5,[R1,#-1] CMP R6,R1: BNE loop BL asctxt FNaddr(8,280): EQUD &E1E2E3 EQUS "Last Score: ":.lasts EQUS " Best Today: ":.best EQUS " " .nothere EQUB 0:ALIGN .noban BL scrollup BL swallow BL fullrect LDMFD R13!,{R15} \ .record LDR R4,best2day: CMP R0,R4: STRGT R0,best2day ADR R1,lasts: MOV R2,#7: SWI "XOS_ConvertInteger4" ADR R1,lasts:MOV R5,#32:.loop LDRB R4,[R1,#1]! CMP R4,#0: BNE loop:.loop LDRB R4,[R1],#1 CMP R4,#32: STRNEB R5,[R1,#-1]: BNE loop: MOV R15,R14 .dblank ADD R12,R12,#24: STR R12,[R7] MOV R0,#ASC("-")-33: BL niceDm: B comeback .nobestd MVN R0,#0: STR R0,best2day ADR R0,best:ADR R1,lasts: MOV R2,#4: MOV R3,#32 .loop STRB R3,[R0,R2]: STRB R2,[R1,R2]: SUBS R2,R2,#1: BPL loop MOV R15,R14 .best2day EQUD -1 .tofadtab EQUD fadetable .tcma EQUD colmapm .tmca EQUD carriagem .col1 EQUD&174777E:.col2 EQUD&18BA9AB .col3 EQUD &1444363 .lcol EQUD &1C3E9EB .buffer EQUS " " .swallow MOV R0,#&15: MOV R1,#9: SWI "OS_Byte": MOV R15,R14 .gentab LDR R0,tofadtab ADD R10,R0,#256 MOV R3,#255:.loop MOVS R2,R3: BEQ skippy ANDS R4,R2,#3: SUBNE R2,R2,#1:BNE skippy ORR R2,R2,#3:ANDS R4,R2,#&14: EORNES R2,R2,#4 ANDNES R4,R2,#4: EORNE R2,R2,#&10 ANDS R4,R2,#&60: SUBNE R2,R2,#&20 ANDS R4,R2,#&88: EORNES R2,R2,#8 ANDNES R4,R2,#8: EORNE R2,R2,#&80 .skippy STRB R2,[R0,R3] STRB R2,[R10,R3] CMP R3,#&F8: BGE sodoff: CMP R3,#&F4: BGE leaveoff CMP R3,#&5C: BGE sodoff: CMP R3,#&58: BGE leaveoff CMP R3,#&28: BGE sodoff: CMP R3,#&24: BGE leaveoff CMP R3,#&18: BGE sodoff: CMP R3,#&10: BGE leaveoff CMP R3,#1: BNE sodoff:.leaveoff STRB R3,[R10,R3] .sodoff SUBS R3,R3,#1: BPL loop MOV R0,#0: STRB R0,[R10,#2] MOV R15,R14 : .idle STMFD R13!,{R14} BL clbuf:.loop BL scanesc LDMEQFD R13!,{R15} BL testkeys CMP R2,#&FF: LDMEQFD R13!,{R15} SWI "OS_Mouse" MOVS R2,R2: BEQ loop LDMFD R13!,{R15} : .pensureon LDRB R0,isnow: CMP R0,#ASC("0"): MOVNE R15,R14 .pon MOV R0,#21: ADR R1,rpnt: SWI "OS_Word" MOV R0,#&31 .pctrl \A%=0 off\ A%=1 on STRB R0,isnow: ANDS R1,R0,#&F: MOVNE R1,#3: MOV R0,#106 SWI "OS_Byte" MOV R15,R14 .poff MOV R4,#50:.loop SWI "OS_Mouse": SUBS R4,R4,#1: MOVEQ R2,#0: MOVS R2,R2: BNE loop MOVS R2,R2: BNE poff STRB R0,rpnt+1: STRB R1,rpnt+3 MOV R0,R0,LSR#8: MOV R1,R1,LSR#8 STRB R0,rpnt+2: STRB R1,rpnt+4 MOV R0,#&30: B pctrl .pon2 STMFD R13!,{R14}: BL pon: MOV R0,#106: MOV R1,#2 B osbldm .flagwhereshop LDR R0,goesit: STR R0,shopit: MOV R15,R14 .rpnt EQUB3: EQUW 640:EQUW 512 \ not word aligned .isnow EQUS "1" .nowarpffwd MOV R0,#0: STRB R0,lockjaw: STRB R0,warper STR R0,invert: MOV R15,R14 .pnt ALIGN .goesit EQUD 0:.goesit2 EQUD 0 .shopit EQUD bigwaste .restsq EQUD 0 .sqon EQUD squareon .tsco EQUD score:.tcas EQUD cash .zap EQUD 0 .fcount EQUB 7 .dead EQUB 0 .lockjaw EQUB0:.warper EQUB0 ALIGN .ospol EQUD s .dolesstime STMFD R13!,{R1,R2,R5,R6,R7,R8,R14} LDR R1,ospol: LDR R1,[R1]: CMP R1,#2 MOV R0,#&0500 BLNE nobcdconv: MOV R3,#31: STR R3,zap MOV R0,#16: MOV R1,#1: BL doeffect LDMFD R13!,{R1,R2,R5,R6,R7,R8,R15} .domoretime STMFD R13!,{R1,R2,R5,R6,R7,R8,R14} LDR R1,ospol: LDR R1,[R1]: CMP R1,#2 LDR R0,addthis BLNE nobcdconv: MOV R3,#29: STR R3,zap MOV R0,#15: MOV R1,#10: BL doeffect LDMFD R13!,{R1,R2,R5,R6,R7,R8,R15} .addthis EQUD&995500 .qm LDR R0,totimer: LDR R0,[R0]: ADD R0,R0,R0,LSR#8: AND R0,R0,#&F CMP R0,#10:SUBGE R0,R0,#10 LDR R3,tbanb: MOV R11,#32: STRB R11,[R3] ADR R11,textad: LDR R11,[R11,R0,LSL#2]: STR R11,[R3,#bannerptr-bannerb] ADR R3,list:LDRB R3,[R3,R0]:MVN R11,#0: B retqm .totimer EQUD time+4 .list EQUB 24:EQUB60:EQUB255:EQUB32:EQUB62 EQUB 63:EQUB 30:EQUB 28:EQUB 65:EQUB 26:ALIGN .textad EQUD h24: EQUD h60: EQUD h256: EQUD h32: EQUDh62 EQUD h63: EQUDh30:EQUDh28:EQUD h65:EQUD h26 .wastit EQUD 0 .tsgo EQUD shopgoing .tbanb EQUD bannerb .xdie STMFD R13!,{R0-R12,R14} MOV R0,#6: MOV R1,#12: BL doeffect BL getR0at: EQUD I: AND R0,R0,#&FF MOV R0,R0,ASR#2: SUB R0,R0,#32 RSBPL R1,R0,#32: ADDMI R1,R0,#32 MOV R1,R1,ASR#4: ADD R1,R1,#4 BL fllight: BL litit LDMFD R13!,{R0-R12,R15} .ptime EQUD 0 .ballalt EQUD height .vm2testmpptr EQUD mapptr .vm2bigwaste EQUD bigwaste .tmyvel EQUD myvelo .vmotion2 STMFD R13!,{R14} MOVS R12,R12: BNE restartcode LDR R1,tbst: LDR R1,[R1] LDR R2,tinp: LDR R2,[R2] LDR R10,tvel LDR R5,vm2testmpptr: LDR R3,vm2bigwaste LDR R5,[R5]: CMP R5,R3: LDRGE R5,tmyvel LDRLT R4,[R10]: LDRGE R4,[R5] LDR R5,tthr: LDR R5,[R5] LDR R12,tsgo: LDR R12,[R12]: MOVS R12,R12: MOVNE R5,#0 MOV R12,#6 LDR R3,sqon: LDR R3,[R3] LDR R0,ptime: SUBS R0,R0,#1: STRPL R0,ptime: MOVPL R9,#0 LDRMI R9,gnd CMP R3,#0: BNE notslimey LDR R3,ballalt: LDR R3,[R3]: MOVS R3,R3: MOV R3,#0: BGE notslimey LDR R0,[R10,#spd-velo] MOV R5,R5,ASR#2: RSB R9,R4,#&230000: MUL R9,R0,R9 ADD R4,R4,R9,ASR#6: MOV R9,#1: .notslimey MOVS R9,R9: BEQ lessb CMP R3,#61: BLEQ thisisice ; go away flames CMP R3,#19: BLEQ invisiball CMP R3,#18: BLEQ globaltrig CMP R3,#16: MOVEQ R0,#17: STREQ R0,zap: BLEQ activatereinc CMP R3,#108: MOVEQ R0,#&FF00: ORREQ R0,R0,#&28: STREQ R0,zap BLEQ flagwhereshop: LDREQ R0,tsgo: STREQ R3,[R0] CMP R3,#122: BLEQ gettakey: STREQ R0,zap CMP R3,#&66: BLEQ blindon CMP R3,#98: MOVEQ R0,#3: STREQ R0,ptime: BLEQ porter CMP R3,#63: LDREQB R9,lockjaw: MOVEQ R0,#0: STREQB R0,lockjaw CMPEQ R9,#&FF: BLEQ stopsnd LDR R0,[R10,#spd-velo]: MOVEQ R0,R0,LSR#1: MOVEQ R4,R4,ASR R0 CMP R3,#104:BLEQ subcashR0 CMP R3,#67: LDREQ R0,goesit: STREQ R0,restsq:BEQ setflag:.return CMP R3,#100: LDREQ R0,goesit: STREQ R0,restsq:BEQ setflag2:.return2 CMP R3,#66:BEQ qm: MOV R11,#0:.retqm CMP R3,#255: LDREQ R0,wastit: STREQ R0,restsq \restart if? BEQ setflag3:.return3 CMP R3,#32: BLEQ xdie CMP R3,#1: MOVEQ R5,R5,LSR#4:MOVEQ R12,#8 CMP R3,#64: MOVEQ R5,R5,LSR#2:MOVEQ R12,#8 CMP R3,#62: LDREQB R9,lockjaw:MOVEQ R0,#&FF: STREQB R0,lockjaw CMPEQ R9,#0: BLEQ ffwdsnd CMP R3,#24 LDREQ R9,tcas: LDREQ R0,[R9]: ADDEQ R0,R0,#50: STREQ R0,[R9] MOVEQ R0,#25: STREQ R0,zap: BLEQ cashsndcopy CMP R3,#65: LDREQB R0,warper BLEQ warpsnd: MOVEQ R0,#&FF: STREQB R0,warper CMP R3,#26 LDREQ R9,tsco: LDREQ R0,[R9]: ADDEQ R0,R0,#100: STREQ R0,[R9] MOVEQ R0,#27: STREQ R0,zap BLEQ scoresnd CMP R3,#28: BLEQ domoretime CMP R3,#30: BLEQ dolesstime CMP R3,#60: LDREQ R0,invert: EOREQ R0,R0,#&FF: STREQ R0,invert MOVEQ R3,#94: STREQ R3,zap BLEQ reversesnd CMP R3,#61: MOVEQ R12,#10: MOVEQ R5,R5,LSR#4 \ ice? LDRB R0,fcount: LDR R9,gnd: CMP R9,#1: BLE nospec CMP R3,#15: BGT nospec CMP R3,#2: BLT nospec ADD R3,R3,R9: CMP R3,#16: MOVGE R3,#&FF00: STR R3,zap:.nospec LDR R9,[R10,#spd-velo] SUBS R0,R0,R9: ADDCC R0,R0,#10: AND R0,R0,#15 \ had some strange problems STRB R0,fcount:BCS nofrag CMP R3,#15:BGT nofrag: CMP R3,#2:BLT nofrag ADD R3,R3,#1: CMP R3,#16 MOVEQ R3,#&FF00 STR R3,zap:.nofrag CMP R3,#107: MOVEQ R3,#2: STREQ R3,zap CMP R11,#0:MOVNE R3,#95: STRNE R3,zap: MOVNE R11,#0 LDR R0,tcron: LDRB R0,[R0]: MOVS R0,R0: BNE cruisedo CMP R2,#1:BGT vstix: BEQ vmouse2 .actuallykeys MOV R0,#2: BL chm2key LDRB R0,lockjaw: ORR R1,R0,R1 CMP R1,#&FF: MOVEQ R11,R5 MOVS R0,R0: BNE noctrl MOV R0,#3: BL chm2key SUBEQ R11,R11,R5 .noctrl LDR R6,trev: LDR R6,[R6] LDR R0,[R10,#spd-velo]: MOVS R0,R0: BEQ dojets LDR R3,sqon: LDR R3,[R3] CMP R3,#96 LDR R9,invert: EOREQS R9,R9,#&FF: MOVNES R9,R9 RSBNE R11,R11,#0 LDR R1,sptr2:LDR R1,[R1]: CMP R1,#1: MOVEQ R6,#0 MOVS R6,R6: BNE ok: MOVS R11,R11: MOVMI R11,#0:.ok LDR R9,g2pow: LDR R8,[R9] .loop ADD R4,R4,R11 RSB R7,R8,#&3000000:ADD R8,R8,R7,LSR#6 SUB R4,R4,R4,ASR R12: SUBS R0,R0,#1: BNE loop B strdojets .invert EQUD 0 : .cruisedo MOV R11,#0:LDR R0,tokeep: LDR R0,[R0] LDR R9,[R10,#spd-velo]: MUL R5,R9,R5 SUBS R0,R0,R4: BMI decer CMP R0,R5: ADDGT R4,R4,R5: ADDLE R4,R0,R4: B noctrl .decer CMN R0,R5: SUBLT R4,R4,R5: ADDGE R4,R0,R4: B noctrl .tcron EQUD cruiseon:.tokeep EQUD stickto .g2pow EQUD power .sptr2 EQUD s .lessb LDR R9,g2pow: LDR R8,[R9] MOV R6,#7 CMP R3,#23: MOVEQ R6,#1 LDR R0,[R10,#spd-velo] MOVS R0,R0: BEQ dojets MOV R5,#255:.loop RSB R7,R8,#&3000000:ADD R8,R8,R7,ASR#6 SUB R4,R4,R4,ASR R6: SUBS R0,R0,#1: BNE loop .strdojets LDR R5,vm2testmpptr: LDR R3,vm2bigwaste LDR R5,[R5]: CMP R5,R3: LDRGE R10,tmyvel STR R4,[R10]: STR R8,[R9]:B dojets .vmouse LDRB R0,lockjaw: MOVS R0,R0 TSTEQ R1,#1: MOVNE R11,R5 MOVS R0,R0: BNE noctrl TST R1,#4: SUBNE R11,R11,R5 B noctrl .vstix LDRB R1,lockjaw: MOVS R1,R1 MOVEQ R0,#19: BLEQ chkey: MOVNE R11,R5 LDRB R1,lockjaw: MOVS R1,R1: BNE noctrl MOV R0,#18: BL chkey: SUBNE R11,R11,R5: B noctrl .vmouse2 LDR R0,whatt: LDRB R0,[R0]: CMP R0,#1: BEQ actuallykeys LDRB R0,lockjaw: MOVS R0,R0 MOVNE R1,#1024: MOVEQ R1,R1,LSR#8 SUB R1,R1,#512: MUL R1,R5,R1: ADD R11,R11,R1,ASR#9 B noctrl .whatt EQUD msetyp .tbst EQUD buttonstate .tinp EQUD input:.tvel EQUD velo .tthr EQUD thrust .trev EQUD reverse .gnd EQUD0 .startinp EQUD &1FD4000+&1400-1056 ; bodged .ttcar EQUD carriagem .soundflag EQUD0 .topt EQUD options .rdsoundflag LDR R0,soundflag .wrsoundflag STR R0,soundflag: MOV R15,R14 .showinp LDR R3,startinp LDR R2,tinp: LDR R2,[R2]:STMFD R13!,{R2,R14} MOV R1,#672: MLA R1,R2,R1,R3 MOV R0,#&C900: ADD R0,R0,#&18: MOV R2,#32: MOV R3,#22 BL ownhig LDMFD R13!,{R2,R15} .ttmap EQUD colmapm .msesens EQUD 256 .msesensy EQUD 180 .msetyp EQUD 0 .tban EQUD bank:.tbas EQUDbase1 .sall LDR R5,tinp: LDR R3,[R5]: LDR R0,topt STMFD R13!,{R14} LDR R4,soundflag: STR R4,[R0,#8]: STR R3,[R0,#4] LDR R4,msesens: STR R4,[R0,#&C] LDR R4,msesens: STR R4,[R0,#&10] STMFD R13!,{R0}: BL getproject: LDMFD R13!,{R1} ADD R2,R1,#&14: LDR R3,tnq: LDMIA R3,{R5,R6,R7,R8,R9,R10,R11} STMIA R2,{R5,R6,R7,R8,R9,R10,R11}: LDR R5,[R3,#&10]: STR R5,[R2,#&10] LDR R5,[R3,#&14]: STR R5,[R2,#&14] LDR R5,[R3,#&14]: STR R5,[R2,#&14] STRB R0,[R1,#&21] LDRB R0,msetyp: STRB R0,[R1,#&22] B saveopts2 .tnq EQUD Newquays .bekind STMFD R13!,{R14} LDR R0,topt:STMFD R13!,{R0}: BL getproject: LDMFD R13!,{R1} STRB R0,[R1,#&21]: LDMFD R13!,{R14}: MOV R2,#1: B saveopts3 : .tcolm EQUD colmapm .messyes EQUD 0 .mayscroll LDR R0,messyes2: MOVS R0,R0: BEQ message: MOV R15,R14 .messyes2 EQUD 1 .scrollon MOV R0,#0:.scrctrl STR R0,messyes2: MOV R15,R14 .scrolloff MOV R0,#1: B scrctrl .taljoy EQUD allowjoy .tpowr EQUD power .tupth EQUD upthr .tspd EQUD spd .doing EQUD s .orsf EQUD restartflag .sqrno EQUD squareon .restartcode LDR R4,sqrno: LDR R4,[R4]: CMP R4,#23: LDREQ R4,orsf MOVEQ R2,#0: STREQ R2,[R4] LDR R4,doing: LDR R4,[R4]: MOVS R4,R4: BNE clrfl LDR R4,tvelo: LDR R4,[R4] LDR R2,tohe: LDR R1,vdown: LDR R0,[R2] LDR R3,tspd: LDR R4,[R3] CMP R0,#&100: MOVLT R0,#&100 CMP R0,#&A000: MOVGT R0,#&A000: SUBLT R1,R1,R4,LSL#3 STR R1,vdown: STR R0,[R2] LDR R0,tvelo: LDR R1,[R0] CMP R12,#2: RSBEQ R1,R1,#0 CMN R1,#&6000000: SUBGT R1,R1,R4,LSL#14 CMP R12,#2: RSBEQ R1,R1,#0: STR R1,[R0] LDR R0,restsq: MOVS R0,R0: BEQ dojets: LDRB R1,[R0,#1]: CMP R1,#0 BNE dojets: LDRB R1,[R0] LDR R7,orsf: LDRB R7,[R7]: MOVS R7,R7: BNE notendfn CMP R1,#100: MOVEQ R1,#101: CMP R1,#67: MOVEQ R1,#68 .notendfn CMP R1,#100 MOVGT R1,#100: MOVEQ R1,#101: CMP R1,#68: MOVEQ R1,#67 MOVLT R1,#68: STRB R1,[R0] .dojets MOV R0,#0: STR R0,jetflag LDR R0,minput: LDRB R0,[R0]: CMP R0,#1:BEQ mbut MOV R0,#6: ADDGT R0,R0,#16: BL chkey LDMNEFD R13!,{R15}:.jetwant LDR R0,tpowr: LDR R1,[R0] LDR R7,tupth: LDR R2,[R7]: STR R2,jetflag LDR R10,tspd:LDR R10,[R10]: MUL R2,R10,R2 LDR R3,[R7,#4]: LDR R6,[R7,#12] LDR R5,vdown MUL R4,R2,R3: MOV R4,R4,LSL#1: CMP R1,R4 SUBGT R1,R1,R4: SUBGT R5,R5,R2 MOVLE R1,R1,LSR#16: MULLE R1,R6,R1 SUBLE R5,R5,R1,LSR#17 MOVLE R1,#0 STR R1,[R0] STR R5,vdown LDMFD R13!,{R15}:.mbut MOV R0,#10: BL chmkey LDMNEFD R13!,{R15}: B jetwant .reinitar LDR R0,restsq: MOVS R0,R0: MOVEQ R15,R14 LDRB R1,[R0]: CMP R1,#100: MOVGT R1,#100 CMP R1,#68: MOVEQ R1,#67 STRB R1,[R0]: MOV R15,R14 .jetflag EQUD 0 .minput EQUD input .bbstat EQUD buttonstate .vdown EQUD0 .tohe EQUD h .tvelo EQUD velo .controllight LDR R1,tcen: LDRB R1,[R1]: MOVS R1,R1: MOVNE R1,#12 LDR R0,tmodei: LDR R0,[R0]: CMP R0,#13: MOVNE R15,R14 LDRB R0,lcurr: CMP R0,R1: ADDLT R0,R0,#1 SUBGT R0,R0,#1:ADR R1,lightdata: STRNEB R0,lcurr LDRB R2,ebe: LDRB R3,ecurr: CMP R3,R2 ADDLT R3,R3,#1: SUBGT R3,R3,#1: STRNEB R3,ecurr MOVS R2,R2: LDREQ R4,tcen: STREQ R2,[R4] MOV R0,R0,LSR#2 MOV R3,R3,LSR#2 LDR R0,[R1,R0,LSL#2]: LDR R2,sobo2 LDR R2,[R2]: ADD R1,R1,#16: LDR R3,[R1,R3,LSL#2] LDR R1,addr1 MOV R4,#&14000 ADD R1,R1,R2: STR R3,[R1,#-&280]: STR R0,[R1],R4 STR R3,[R1,#-&280]: STR R0,[R1],R4 STR R3,[R1,#-&280]: STR R0,[R1] MOV R15,R14 .tmodei EQUD mode .sobo2 EQUD base2 .lightdata EQUD&02303130:EQUD&02313231:EQUD&02335533:EQUD&02545754 EQUD&02214121:EQUD&02234323:EQUD&02416541:EQUD&02436743 .lcurr EQUB 0 .ecurr EQUB 0 .ebe EQUB 0 ALIGN .tscbotag EQUD scrnbot .addr1 EQUD &124C-76+&3C0 .tcen EQUD cruiseon .tflm EQUD flmode .oldb EQUB 0:.alturd EQUB 0:EQUW0 .scandash LDRB R3,oldb: STRB R2,oldb: MOVS R3,R3: MOVNE R15,R14 ANDS R2,R2,#5: MOVEQ R15,R14 CMP R0,#36: MOVLT R15,R14 CMP R0,#58: MOVGE R15,R14 CMP R1,#70: MOVLT R15,R14 LDR R0,tflm CMP R1,#82: BLE hrbut CMP R1,#107: MOVGT R15,R14 CMP R1,#95: MOVLT R15,R14 LDRB R1,[R0]: ADD R1,R1,#1: CMP R1,#3: MOVEQ R1,#0: STRB R1,[R0] B dclock .hrbut LDRB R1,[R0]: CMP R1,#0: LDREQB R1,[R0,#1]: EOREQ R1,R1,#255 STREQB R1,[R0,#1]: BEQ dclock CMP R2,#1: MVNNE R2,#0 CMP R1,#1: MOVEQ R12,#4+findtime-flmode: MOVEQ R5,#&24 MOVNE R12,#5+findtime-flmode: MOVNE R5,#&60 LDRB R3,[R0,R12]: SUBS R3,R3,R2: ADDMI R3,R3,R5 AND R4,R3,#15: CMP R4,#10 SUBGE R3,R3,R2,LSL#2: SUBGE R3,R3,R2,LSL#1 CMP R3,R5: MOVEQ R3,#0: STRB R3,[R0,R12] CMP R1,#2: MOVEQ R12,#0: STREQB R12,[R0,#6+findtime-flmode] MOV R3,#15 STRB R3,alturd: B dclock .streal LDR R0,tflm: LDRB R1,alturd: MOVS R1,R1: MOVEQ R15,R14 MOV R3,#15 LDRB R1,[R0,#4+findtime-flmode]: AND R2,R1,R3: ORR R2,R2,#&30 STRB R2,wrclck+2: AND R2,R3,R1,LSR#4: ORR R2,R2,#&30: STRB R2,wrclck+1 LDRB R1,[R0,#5+findtime-flmode]: AND R2,R1,#15: ORR R2,R2,#&30 STRB R2,wrclck+5: AND R2,R3,R1,LSR#4: ORR R2,R2,#&30: STRB R2,wrclck+4 LDRB R1,[R0,#6+findtime-flmode]: AND R2,R1,#15: ORR R2,R2,#&30 STRB R2,wrclck+8: AND R2,R3,R1,LSR#4: ORR R2,R2,#&30: STRB R2,wrclck+7 ADR R1,wrclck: MOV R0,#15: SWI "OS_Word" MOV R0,#0: STRB R0,alturd: MOVS R1,#15 MOV R15,R14 .wrclck EQUB 8:EQUS "AB:CD:EF":EQUW 0:EQUB0 .bodge1FC0 EQUD &1FC0000 ; bodged .mightpause STMFD R13!,{R14} MOV R0,#7: BL chkey LDMNEFD R13!,{R15} BL pon BL vsync BL No50stars BL normo: LDR R0,tob2: LDR R1,tscbotag: LDR R0,[R0]: STR R0,[R1] LDR R0,bodge1FC0: STR R0,[R1,#scrntop-scrnbot]: BL dostars ;;;;;;;;;;; BL pausecont MOV R0,#1: STR R0,messyes: STRB R0,pmflash .loop MOV R0,#7: BL chkey BEQ loop BL clbuf .loop2 ADR R4,piconpos: BL checkicons: MOVS R7,R7: BEQ egsit BGT topts STMFD R13!,{R0-R2}: BL scandash LDMFD R13!,{R0-R2} LDRB R0,pmflash: SUBS R0,R0,#9:STRB R0,pmflash BLMI wrpause BL vsync BL testkeys CMP R2,#&FF:BEQ loop2 CMP R2,#&1B: MOVEQ R0,#&7C: SWIEQ "OS_Byte" .egsit BL poff .inrest BL vsync LDR R0,toasx: LDR R1,[R0]: STMFD R13!,{R0,R1} MOV R1,#0: STR R1,[R0]: MOV R0,#&28000: BL stbank2 LDR R0,tojunkinfy: LDR R1,[R0]: STMFD R13!,{R0,R1} BL rdcursc2: ADD R0,R0,#1: AND R0,R0,#255: BL getj2 LDMFD R13!,{R0,R1} LDR R7,[R0]: SUB R7,R7,R1 ; constant to SUBTRACT .loop LDR R6,[R0,#-12]: CMN R6,#2: LDR R6,[R0],#16 SUBLO R6,R6,R7: STRLO R6,[R0,#-16] BLO loop BL videoCl32 MOV R0,#0: BL stbank2 BL stuff: BL stuff: BL stuff BL Hz50stars .loop MOV R0,#7: BL chkey: BEQ loop MOV R0,#21: ADR R1,mpnt: SWI "OS_Word" LDMFD R13!,{R0,R1}: STR R1,[R0] BL resettime LDMFD R13!,{R15} .stuff STMFD R13!,{R14} BL flip3: BL dmjunk: BL cls: BL spacejunk: BL updatescr BL plotshadow: BL xyzcode BL tstdg: BEQ gameep BL biglogo: LDMFD R13!,{R15} .tojunkinfy EQUD junkinfo+12 .gameep BL dclock: LDMFD R13!,{R15} .topts BL cleardashcurv MOV R0,#1: BL optcode2: BL rdgoy: MOVS R0,R0: MOV R0,#&FF: BEQ en2optend BL getfoot .afteren2end BL vsync: BL videoCl2: B egsit .en2optend BL updatelogo: B afteren2end .fljoy MOV R0,#56:BL warn: B loop2 .ginp EQUD input .toasx EQUD ax .tsctop EQUD scrntop .mpnt EQUB 3: EQUW 640: EQUW 512: EQUW 0:EQUB 0 ALIGN .piconpos EQUW 260: EQUW 523: EQUW 510: EQUW 483 EQUW 770: EQUW 523: EQUW 1020: EQUW 483 .centremouse MOV R0,#21: ADR R1,mpnt: SWI "OS_Word": B initoldyxo .restore STMFD R13!,{R14}: B inrest .tob2 EQUD base2 .wrpause LDRB R0,pmflash+1: EOR R0,R0,#1: STRB R0,pmflash+1 ADR R1,pausecols: LDR R0,[R1,R0,LSL#2]: STR R0,pcols STMFD R13!,{R14} BL securetxt FNaddr(32,700):.pcols EQUD &88898B OPT FNequadd("Pause"): EQUB 0:ALIGN LDMFD R13!,{R15} .pmflash EQUD 0 .pausecols EQUD &ACADAF EQUD &D0D1D3 ] endnowhere=P%:P%=code2% [OPT T .promptb EQUS "Password: ":.pgoesit EQUS "__________": EQUB 0 .promptb2 FNequadd("Previous Editor Code: "): EQUB 0 ALIGN .prompta OPT FNut("SCREEN: ",0):.buf1 EQUS " ":EQUB&C0:ALIGN .promptc OPT FNut("LENGTH: ",48):.buf2 EQUS" ":EQUB13:ALIGN .promptd OPT FNut("TIME LIMIT: ",48):EQUB0:ALIGN .bumph STMFD R13!,{R14} MOV R0,#&5000:STR R0,carm15 LDR R0,tmap: SUB R11,R0,#64 MOV R9,#40:.loop LDRB R0,[R11],#1 CMP R0,#13: BEQ onI: CMP R0,#96: SUBGE R0,R0,#32 SUB R0,R0,#33:BL bigtxt15 SUBS R9,R9,#1: BNE loop .onI LDR R3,tmap: ADD R3,R3,#&2C: MOV R0,#0:.loop LDR R2,[R3],#48: ADD R0,R0,R2,LSR#20 MOVS R2,R2: BNE loop ADR R1,buf2: MOV R2,#8 SWI "XOS_ConvertInteger4" LDR R5,tolevon: LDRB R0,[R5] ADR R12,prompta ADD R0,R0,#2: AND R0,R0,#255 CMP R0,#10: STRLTB R0,buf1: MOVLT R0,#&C0: STRLTB R0,buf1+1 BLT hiuj MOV R1,#10: BL divide32 STRB R2,buf1 MUL R4,R2,R1: SUB R0,R0,R4: STRB R0,buf1+1 .hiuj LDR R1,lengo:ADR R10,colr .loop LDRB R0,[R12],#1: CMP R0,#&C0: BEQ onII BL smtxt B loop .onII LDR R1,lengo2 ADR R12,promptc:.loop LDRB R0,[R12],#1: SUBS R0,R0,#48: BMI onIII BL smtxt: B loop .lengo EQUD-&A780:.colr EQUB&FF:EQUB&D3:EQUB&D0:EQUB&F7 .sysgo EQUD-&A780+&A00*3 .onIII LDR R0,tolevon: LDRB R11,[R0]: LDR R1,sysgo: ADR R10,colr BL syscode LDR R0,tolevon: LDRB R11,[R0]: CMP R11,#&FF: BEQ onIV LDRB R0,seenopas: MOVS R0,R0: BEQ onIV MOV R1,#&23000: ADD R1,R1,#&890: STR R1,carm15 ADR R12,promptb:.loop LDRB R0,[R12],#1: CMP R0,#0: BEQ onIV SUB R0,R0,#33:BL Dmtxt15 B loop .seenopas EQUD 1 .wrsnps STR R0,seenopas: MOV R15,R14 .noshowecode MOV R0,#0: STR R0,enablecode: MOV R15,R14 .oldlevon EQUW -1:.enablecode EQUB 0:ALIGN .oldlevstr STRB R0,oldlevon: MOV R15,R14 .toedits EQUD editcodes .big10power EQUD 100000000 .chsod EQUD cheat .stestf LDR R0,oldlevon: STR R0,ooldlevon: MOV R15,R14 .rvestf LDR R0,ooldlevon: STR R0,oldlevon: MOV R15,R14 .mayfirewcode LDR R0,chsod: LDRB R0,[R0] MOVS R0,R0: BEQ firewcode: MOV R15,R14 .ooldlevon EQUD 0 .letseecode MOV R0,#1: STRB R0,enablecode: MOV R15,R14 .onIV LDR R0,chsod: LDRB R0,[R0]: MOVS R0,R0: BNE onIVI LDR R0,tolevon: LDRB R11,[R0] LDRB R1,oldlevon: LDRB R2,oldlevon+1 STRB R11,oldlevon CMP R2,R11: STRNEB R1,oldlevon+1 LDRB R0,enablecode: MOVS R0,R0 BEQ onIVI LDR R1,toedits: LDR R1,[R1,R11,LSL#2] SUBS R1,R1,#123: BLE onIVI CMP R11,#&FF: BEQ onIVI STMFD R13!,{R1} MOV R2,#&25000: ADD R2,R2,#&8B0: STR R2,carm15 LDR R12,tpromptb2:.loop LDRB R0,[R12],#1: CMP R0,#0: BEQ onIVI2 CMP R0,#&FF: MVNEQ R0,#0 BL Dmtxt15: B loop .tpromptb2 EQUD promptb2 .onIVI2 LDMFD R13!,{R8} LDR R12,big10power MOV R9,#0 .loop MOV R0,R8: MOV R1,R12: BL divide32 ORR R9,R9,R2 ADD R4,R2,#15: MUL R5,R12,R2: SUB R8,R8,R5 MOV R0,R12: MOV R1,#10: BL divide32 MOV R12,R2 MOV R0,R4: CMP R9,#0: BLNE Dmtxt15: CMP R12,#1: BGE loop .onIVI LDR R1,lengo3: ADR R10,colr ADR R12,promptd:.loop LDRB R0,[R12],#1: SUBS R0,R0,#48:BPL onloop LDR R12,teatime: LDR R12,[R12] BIC R9,R12,#&FF000000: BICS R9,R9,#&FF0000 BEQ nomins ANDS R0,R12,#&F: BLNE smtxt AND R0,R12,#&F00: MOV R0,R0,LSR#8: BL smtxt BL smspc MOV R0,#ASC("M")-51: BL smtxt MOV R0,#ASC("I")-51: BL smtxt MOV R0,#ASC("N")-51: BL smtxt CMP R9,#&100: MOVNE R0,#ASC("S")-51: BLNE smtxt BL smspc .nomins MOVS R12,R12,LSR#16 LDMEQFD R13!,{R15} ANDS R0,R12,#&F: BLNE smtxt AND R0,R12,#&F00: MOVS R0,R0,LSR#8: BL smtxt BL smspc MOV R0,#ASC("S")-51: BL smtxt MOV R0,#ASC("E")-51: BL smtxt MOV R0,#ASC("C")-51: BL smtxt CMP R12,#&100: MOVNE R0,#ASC("S")-51: BLNE smtxt LDMFD R13!,{R15} .lengo3 EQUD-&A780+&A00*2 .lenst MOVS R6,R6 .lengo2 EQUD-&A780+&A00 .onloop BL smtxt: B loop .teatime EQUD time : .mtxtpnt2 EQUD mtext .carm15 EQUD0 .bigtxt15 LDR R3,carm15: ADD R5,R3,#16: STR R5,carm15 MOVS R0,R0: MOVMI R15,R14: ADR R7,bigcols-1 LDR R2,g2base1: LDR R2,[R2] ADD R1,R2,R3: LDR R2,charaddr2: LDR R3,[R2,R0,LSL#2] ADD R2,R2,R3 MOV R12,#0 MOV R3,#16:.loop MOV R4,#&2580:.loop2 TST R12,#&1F: LDREQB R12,[R2],#1: SUB R12,R12,#1 LDRB R6,[R7,R12,ASR#5] TST R12,#&E0:STRNEB R6,[R1,-R4]: SUBS R4,R4,#&280: BPL loop2 ADD R1,R1,#1: SUBS R3,R3,#1: BNE loop: MOV R15,R14 .colm15 EQUB 255:EQUB211:EQUB208:EQUB0 .bigcols EQUD&00F6F5F4 .charaddr2 EQUD bigcharset : .Dmtxt15 ADR R11,colm15-1 LDR R1,carm15 ADD R2,R1,#16: STR R2,carm15 LDR R2,g2base1: LDR R2,[R2] MOVS R0,R0:MOVMI R15,R14 ADD R1,R2,R1 LDR R3,mtxtpnt2 MOV R10,#&F ADD R2,R3,R0,LSL#5 ADD R2,R2,R0,LSL#4 ADD R2,R2,R0,LSL#1 MOV R3,#10: .loop MOV R4,#5: .loop2 LDRB R7,[R2],#1 ANDS R5,R10,R7,LSR#4 LDRNEB R6,[R11,R5] STRNEB R6,[R1],#1:STRNEB R6,[R1],#1 ADDEQ R1,R1,#2:ANDS R5,R10,R7 LDRNEB R6,[R11,R5] STRNEB R6,[R1],#1:STRNEB R6,[R1],#1 ADDEQ R1,R1,#2:SUBS R4,R4,#1 BNE loop2 ADD R1,R1,#&270: SUB R1,R1,#4 SUBS R3,R3,#1: BNE loop: MOV R15,R14 .tmode EQUD mode .ttim EQUD time .tpasses EQUD passwords+8*7 .tleon EQUD pgoesit .tolevon EQUD levelon .wondersee2 LDR R3,g2base1: LDR R3,[R3]:.awsin LDR R0,tmap LDR R10,[R0,#&2C-&40]: ADD R3,R3,R10 LDR R10,[R0,#&30-&40]: STR R10,scale LDR R6,[R0,#&34-&40]: ADD R0,R0,#&30: B wondersee .gettimel LDR R0,tmap: LDR R0,[R0,#&28-&40] LDR R1,ttim: STR R0,[R1]: MOV R0,#0: STR R0,[R1,#4] MOV R15,R14 .preview STMFD R13!,{R14} BL musicstorepos: BL copycurrentpos BL loadinter BL ackesc ORR R0,R0,#1: BL wrsnps BL stestf BL new:.repreview BL rvestf LDR R4,hmm: LDR R4,[R4]: MOVS R4,R4 LDRMI R7,wrdf: MOVMI R4,#0: STRMI R4,[R7]: LDMMIFD R13!,{R15} LDR R10,tolevon: LDRB R10,[R10] LDR R6,tpasses: ADD R6,R6,R10,LSL#3: LDR R10,tleon LDR R0,[R6],#4:BL getword LDR R0,[R6],#4:BL getword BL gettimel LDR R0,tmode: MOV R1,#15: STR R1,[R0] BL tmode15 BL wickedicon LDR R10,tleon: BL passtoascii BL fiddleabort BL normwsclip: BL wondersee2 .endgmws BL unfdabort BL decodecodes BL bumph BL encryptcodes BL clbuf BL plshde BL rdcursc2: ADD R0,R0,#1: AND R0,R0,#255: BL getj2 BL initstarpat .loop BL dosomething: SWI "OS_Mouse": CMP R2,#0: BNE loop .loop BL dosomething:MOVS R7,R7: BPL oho BL scanesc: MOV R7,#0: BEQ oho MOV R0,#&81: MOV R1,#0: MOV R2,#0: SWI "OS_Byte" CMP R2,#&1B: BEQ oho CMP R2,#&FF: BEQ loop AND R1,R1,#&DF: CMP R1,#83: MOVEQ R7,#2 CMP R1,#68:MOVEQ R7,#1:.oho CMP R7,#3: MOVEQ R7,#0 LDR R4,wrdf: STR R7,[R4] MOV R0,#&7E: SWI "OS_Byte" BL poff SWI 256+12 SWI 256+22: SWI 256+13 LDR R0,tmode: MOV R1,#13: STR R1,[R0] SWI "XOS_RemoveCursors" SWI 256+18: SWI 256+0: SWI 256+&2A MOV R0,#&FF BL getfoot:LDR R4,wrdf:LDR R7,[R4]: CMP R7,#2:LDMNEFD R13!,{R15} BL mousecols BL pon BL refr2disp: BL wantinventory BL entershop: BL ackesc BL spyqflag: BNE repreview2: BL fadeout: BL qcl2: BL totalclear LDR R4,wrdf:MOV R7,#0: STR R7,[R4]: LDMFD R13!,{R15} .wrdf EQUD demoflag .hmm EQUD cash .repreview2 BL vsync: SWI "OS_Byte": BL totalclear: B repreview : .tmap EQUD mapcopy+&40 .g2base1 EQUD base1 .tstore EQUD bigwaste .scale EQUD0 .tmode15 STMFD R13!,{R14} BL vsync BL totalclear BL vsync BL poff SWI 256+12 SWI 256+22:SWI 256+15 SWI "XOS_RemoveCursors" BL mousecols BL pon2 LDMFD R13!,{R15} LDR R2,g2base1: LDR R0,tstore LDR R2,[R2] ADD R2,R2,#&20800 MOV R3,#&3C00:.loop LDRB R4,[R0],#1 STRB R4,[R2],#1: STRB R4,[R2],#1 SUBS R3,R3,#1: BNE loop LDMFD R13!,{R15} .tsine EQUD sine .tcbdm EQUD mapcolours+&38 .normwsclip LDR R0,g2base1: LDR R0,[R0] .clipws ADD R1,R0,#&28000: STR R1,botws: STR R0,topws: MOV R15,R14 .botws EQUD 0:.topws EQUD 0 .wondersee STMFD R13!,{R14} STR R13,stackg \ R0 = mapptr \ R1 = x inc. \ R2 = y inc. (signed) \ R3 = screen address \ R4 = y 32-bit fraction \ R5 = x 32-bit fraction \ R6 = angle (32-bit fraction) \ R7 = index \ R8 = update screen address \ R9 = update y-fraction \ R10 = update x-fraction \ R11 = to colourmap \ R14 = sine pointer MOV R7,#0 LDR R11,tcbdm LDR R14,tsine .loop1 MOV R8,R6,LSR#24: LDR R1,[R14,R8,LSL#2] ADD R8,R8,#&40: AND R8,R8,#&FF LDR R2,[R14,R8,LSL#2] LDR R12,scale: MUL R1,R12,R1: MUL R2,R12,R2 MOV R8,R3: MOV R9,#0: MOV R10,#0 ] FORG=0 TO 15:[OPT T LDR R12,[R0,#2*(15-G)] TST R12,#&FF00 AND R12,R12,#&FF LDREQB R12,[R11,R12] MOVS R12,R12 STRNEB R12,[R8] ADDS R10,R10,R1,LSL#1:ADC R13,R8,R1,ASR#31 CMP R13,R8: MOVNE R8,R13: MOVNES R12,R12:STRNEB R12,[R8] ADDS R10,R10,R1,LSL#1:ADC R13,R8,R1,ASR#31 CMP R13,R8: MOVNE R8,R13: MOVNES R12,R12:STRNEB R12,[R8] ADDS R9,R9,R2,LSL#1: MOV R13,#0: ADCS R13,R13,R2,ASR#31 SUBMI R8,R8,#&280: ADDGT R8,R8,#&280 ]NEXT [OPT T .notagain ADDS R5,R5,R2: ADC R12,R3,R2,ASR#31 CMP R12,R3: BEQ notagain2: MOV R3,R12 MOV R8,R3: MOV R9,#0: MOV R10,#0 ]FOR G=0 TO 15:[OPT T LDR R12,[R0,#2*(15-G)] TST R12,#&FF00 AND R12,R12,#&FF LDREQB R12,[R11,R12] MOVS R12,R12 STRNEB R12,[R8] ADDS R10,R10,R1,LSL#1:ADC R13,R8,R1,ASR#31 CMP R13,R8: MOVNE R8,R13: MOVNES R12,R12:STRNEB R12,[R8] ADDS R10,R10,R1,LSL#1:ADC R13,R8,R1,ASR#31 CMP R13,R8: MOVNE R8,R13: MOVNES R12,R12:STRNEB R12,[R8] ADDS R9,R9,R2,LSL#1: MOV R13,#0: ADCS R13,R13,R2,ASR#31 SUBMI R8,R8,#&280: ADDGT R8,R8,#&280 ]NEXT [OPT T .notagain2 LDR R12,topws: LDR R10,botws CMP R3,R12: CMPGT R8,R12: CMPGT R10,R3: CMPGT R10,R8 MOVLE R15,#&10 MOV R8,R3 LDR R12,[R0,#&28]: ADDS R4,R4,R12,LSL#24 SUBCS R3,R3,#&280 MOVS R12,R12: ADDMI R3,R3,#&280 ADDS R4,R4,R1,ASR#2: SUBCS R3,R3,#&280 MOVS R1,R1: ADDMI R3,R3,#&280 LDR R12,[R0,#&20]: MOVS R12,R12: CMPEQS R8,R3: BEQ noredo SUB R6,R6,R12,LSL#13 ADD R7,R7,#&300000: LDR R12,[R0,#&2C] CMP R7,R12: BLT loop1 SUB R7,R7,R12: ADD R0,R0,#48 LDR R12,[R0,#&2C]:MOVS R12,R12 BNE loop1 LDR R13,stackg LDMFD R13!,{R15} .noredo ADD R7,R7,#&300000: LDR R12,[R0,#&2C] CMP R7,R12: BLT notagain SUB R7,R7,R12: ADD R0,R0,#48 LDR R12,[R0,#&2C]:MOVS R12,R12 BNE loop1 LDR R13,stackg LDMFD R13!,{R15} .stackg EQUD0 .tovelo EQUD velo .speedo0 LDR R10,tovelo: MOV R9,#0: STR R9,[R10] B speedo .back2speedo \ R1 is bank offset MOV R5,R1,ASR#16 LDR R10,tovelo: LDR R10,[R10] CMN R10,#&CC000: MVNLT R10,#&CC000 MOV R10,R10,ASR#16: ADD R10,R10,#&9A AND R10,R10,#&FF:.inspeedo ADR R11,sine LDR R12,[R11,R10,LSL#2] MOV R0,R12,ASR#18:ADD R1,R0,#&244 ADD R10,R10,#&40: AND R10,R10,#&FF LDR R12,[R11,R10,LSL#2] MOV R0,R12,ASR#18:ADD R2,R0,#&5C BIC R1,R1,#3: BIC R2,R2,#3 ADR R4,xspes: LDR R6,[R4,R5,LSL#2]! STR R1,[R4]: CMP R1,R6 LDR R6,[R4,#12]!: STR R2,[R4]: CMPEQ R2,R6: MOVEQ R15,R14 STMFD R13!,{R0-R2,R14}: BL bmeter: LDMFD R13!,{R0-R2,R14} MOV R0,#4: SWI "XOS_Plot" MOV R0,#5: MOV R1,#&244 MOV R2,#&5C: SWI "XOS_Plot" MOV R15,R14 .xspes EQUD 0: EQUD 0: EQUD 0 .yspes EQUD 0: EQUD 0: EQUD 0 .initspeedo MOV R0,#1: STR R0,xspes: STR R0,yspes+4 STR R0,xspes+8: B initdtm .sine : ] endcode2%=P%+1024:P%=code% [OPT T .noeditor .nodesktop BL hlitet2 STMFD R13!,{R2}:BL ballsparkon:.loop BL wibblest SWI "OS_Mouse": MOVS R2,R2: BNE loop MOV R1,#256-35: BL scanne: BEQ loop LDMFD R13!,{R2} SUBS R2,R2,#1: MOV R1,#&2F: MOV R0,#&D3: MOV R12,#&D1 ADD R4,R2,R2,LSL#2: ADD R2,R4,R2,LSL#3 MOV R5,R2,LSL#2: ADD R5,R5,#fidal: BL hliteIII B titleloop .offst1 EQUD &7308-fidal .offsth EQUD &140*33+33 .oldp EQUD 0 .hlitet2 STMFD R13!,{R0-R12,R14} SUBS R2,R2,#1: LDMMIFD R13!,{R0-R12,R15} MOV R1,#&D3: MOV R0,#&2F: MOV R12,#&D1 MOVEQ R1,#&F5: MOVEQ R0,#&F4: MOVEQ R12,#&F4 ADD R4,R2,R2,LSL#2: ADD R2,R4,R2,LSL#3 MOV R5,R2,LSL#2: ADD R5,R5,#fidal: BL hliteIII LDMFD R13!,{R0-R12,R15} .hlitei STMFD R13!,{R0-R11,R14} LDR R5,oldp STR R2,oldp STMFD R13!,{R2} MOV R1,#&2F: MOV R0,#&D3: MOV R12,#&D1: BL hliteII LDMFD R13!,{R5} MOV R1,#&D0: MOV R0,#&2C: MOV R12,#&2E: BL hliteII LDMFD R13!,{R0-R11,R15} .hliteII CMP R5,#&FF: MOVEQ R15,R14 ADD R5,R5,R5,LSL#2: MOV R5,R5,LSL#3 .hliteIII LDR R4,gbasone1: LDR R4,[R4] SUB R4,R4,#&1400:ADD R6,R4,R5 CMP R5,#7*5*8 LDR R7,offst1: ADD R6,R6,R7 LDR R7,offsth: SUBEQ R7,R7,#8: ADD R3,R7,R6: MOV R2,R6: ADD R4,R7,R6 MOV R8,#33:.loop STRB R0,[R6],#&140: STRB R1,[R3],#-&140 SUBS R8,R8,#1: BNE loop CMP R5,#7*5*8: MOVEQ R8,#25: MOVNE R8,#33 .loop STRB R0,[R2],#1: STRB R1,[R4],#-1 SUBS R8,R8,#1: BNE loop STRB R12,[R4]: STRB R12,[R3] MOV R15,R14 .countdn EQUD 0 .titlegrp STMFD R13!,{R14} ADR R8,tlist:.loop LDR R0,[R8],#4: LDR R1,[R8],#4: MOV R2,#32 MOVS R0,R0: LDMMIFD R13!,{R15} STMFD R13!,{R8} MOV R3,#&2F: MOV R4,#&D1: MOV R5,#&D3 BL cIIicon LDMFD R13!,{R8} B loop .tlist EQUD &733C:.s1 EQUD &6C00 EQUD &7370: EQUD &7000 EQUD &73D8: EQUD &6800 EQUD &73A4: EQUD &7400 EQUD -1:.s3 EQUD &6400 .playicond LDR R1,s3: B cIIicon .dshopic MOV R3,#&D0 MOV R4,#&D1 MOV R5,#&D3:.cIIicon STMFD R13!,{R14} MOV R14,#31 LDRB R10,[R1],#1: LDRB R11,[R1],#1: LDRB R12,[R1],#1 CMP R10,#1: MOVEQ R2,#1: MOVNE R2,#&140 MOV R7,#33 MOV R9,#0:MOV R8,R7:LDR R6,gbasone1: LDR R6,[R6] SUB R6,R6,#&1400:ADD R0,R0,R6: STMFD R13!,{R0,R4} STR R13,stackput: MOV R13,#0 .loop2 STR R7,countdn CMP R10,#1: MOVEQ R4,#&140: MOVNE R4,#1 ADD R6,R0,R4 CMP R8,R7: SUBEQ R6,R0,R4: BNE nobl2 MOVS R8,R8: ADDEQ R6,R0,R4 MOV R4,#33 MOV R7,#0 STRB R7,[R0,-R2]: STRB R7,[R6,-R2] .loop STRB R5,[R0,R7]: STRB R9,[R6,R7]: ADD R7,R7,R2 SUBS R4,R4,#1: BPL loop STRB R9,[R6,R7]: STRB R9,[R0,R7]: B on2 .nobl2 STRB R9,[R0,-R2]: STRB R5,[R0],R2: MOV R7,#0:MOV R4,#0 MOV R6,#0: STRB R6,[R0,R4]: ADD R4,R4,R2 .loop SUBS R14,R14,#1: BGT norku LDRB R6,[R1],#1: CMP R6,R11: MOVEQ R14,#2: BEQ norku CMP R6,R12: LDREQB R14,[R1],#1:MOVNE R13,R6: ADDNE R14,R14,#1 .norku STRB R13,[R0,R4] ADD R4,R4,R2 ADD R7,R7,#1: CMP R7,#30: BNE loop STRB R9,[R4,R0]! STRB R3,[R4,R2]!: STRB R9,[R4,R2] SUB R0,R0,R2:.on2 CMP R10,#1: ADDEQ R0,R0,#&140: ADDNE R0,R0,#1 LDR R7,countdn CMP R7,#2:MOVEQ R13,#0: MOVEQ R14,#100: SUBS R7,R7,#1 MOVEQ R5,R3: MOVEQ R8,#0: BPL loop2 LDR R13,stackput: LDMFD R13!,{R0,R4}: STRB R4,[R0,#33] LDR R8,stofo: STRB R4,[R0,R8] LDMFD R13!,{R15} .stackput EQUD 0 .stofo EQUD &140*33 .getspnum CMP R0,#256: MVNGT R0,#0: ADD R0,R0,#1 ADR R2,spnoms:.loop SUBS R0,R0,#1: MOVMI R15,R14 .loop2 LDRB R7,[R2],#1: CMP R7,#255: BNE loop2 B loop .gbasone1 EQUD base1 .spnoms FNut("FRACTAL",0): EQUB &FF FNut("NEBULA",0): EQUB &FF FNut("GAS",0): EQUB &FF FNut("MOON",0): EQUB &FF FNut("POTATO",0): EQUB &FF FNut("POLE STAR",0): EQUB &FF FNut("SM POTATO",0): EQUB &FF FNut("ECLIPSE",0): EQUB &FF FNut("LUNAR",0): EQUB &FF .clbuf MOV R0,#21: MOV R1,#0: B osbyte .twordlist EQUD passwords .encodeword \ R1 points to word (Ascii) \ on exit R8 is level number (or -1 if incorrect) LDR R7,twordlist STMFD R13!,{R14} MOV R10,#2 BL encodefirst .encodefirst MOV R3,#1: MOV R4,#41 MOV R2,#0:MOV R5,#5: .loop LDRB R0,[R1],#1: SUBS R0,R0,#65: ADDCC R0,R0,#43 MLA R2,R0,R3,R2 MUL R3,R4,R3 SUBS R5,R5,#1: BNE loop SUBS R10,R10,#1: MOVNE R8,R2 MOVNE R15,R14 MOV R1,#0: MOV R3,#0 LDR R10,subfac MOV R0,#0:.loop LDMIA R7!,{R4,R5} EOR R1,R4,R1: EOR R3,R5,R3 .loop2 SUBS R1,R1,R10 BCS loop2: ADD R1,R1,R10 .loop2 SUBS R3,R3,R10 BCS loop2: ADD R3,R3,R10 CMP R1,R8: CMPEQ R3,R2: LDMEQFD R13!,{R15} MOV R1,R4: MOV R3,R5 ADD R0,R0,#1: CMP R0,#138: BNE loop MVN R0,#0: LDMFD R13!,{R15} .subfac EQUD 41^5 .deathcols EQUD&07060504:EQUD&13121110:EQUD&07101112:EQUD&01040506 EQUD&07060504:EQUD&13121110:EQUD&07101112:EQUD&01040506 .cycleindex EQUD0 .initdeath MOV R0,#0: STR R0,cycleindex: B deathdo .tbigen EQUD bigenable .bigcycle LDR R1,tobigdeath: LDR R9,togenbig B deathloop .symbig LDR R1,tobigdeath: ADD R9,R1,#&3E0 MOV R4,#512:.loop LDMIA R1!,{R0,R3,R5,R7}: STMIA R9!,{R0,R3,R5,R7} LDMIA R1!,{R0,R3,R5,R7}: STMIA R9!,{R0,R3,R5,R7}: SUB R9,R9,#&40 SUBS R4,R4,#32: BNE loop: B symlittle .awarp EQUD 0 .adeth EQUD 0 .deathcycle STMFD R13!,{R1,R3,R4-R12} LDR R0,adeth: MOVS R0,R0: BEQ dowarp LDR R0,cycleindex ADD R0,R0,#1: AND R0,R0,#15: STR R0,cycleindex ADR R1,deathcols: ADD R0,R1,R0 LDR R1,tothedeath: LDR R9,togendeath MOV R4,#128 .deathloop .loop ]FORT2=0 TO 7:[OPT T LDRB R3,[R9],#1: CMP R3,#36 LDRNEB R3,[R0,R3]: STRB R3,[R1],#1 ]NEXT:[OPT T SUBS R4,R4,#8: BNE loop LDR R4,tobigdeath: CMP R1,R4: BGE symbig LDR R4,tbigen: LDR R4,[R4]: MOVS R4,R4,LSL#9 BNE bigcycle .symlittle LDR R1,tothedeath: ADD R9,R1,#&F0 MOV R4,#128:.loop LDMIA R1!,{R0,R3,R5,R7}: STMIA R9,{R0,R3,R5,R7}: SUB R9,R9,#&10 SUBS R4,R4,#16: BNE loop .dowarp LDR R1,awarp: MOVS R1,R1: BEQ exitwrp LDR R1,tothewarp LDR R9,begin: LDR R8,begind: ADD R8,R8,#&1E4 BIC R8,R8,#&30000: STR R8,begind: ADD R9,R8,R9 MOV R4,#256:.loop LDMIA R9!,{R3,R5,R6,R7,R8,R10,R11,R12} STMIA R1!,{R3,R5,R6,R7,R8,R10,R11,R12} LDMIA R9!,{R3,R5,R6,R7,R8,R10,R11,R12} STMIA R1!,{R3,R5,R6,R7,R8,R10,R11,R12} SUBS R4,R4,#64: BNE loop LDR R4,tobigwarp: CMP R1,R4: BGT exitwrp LDR R4,tbigen: LDR R4,[R4]: MOVS R4,R4,LSL#10 LDRNE R1,tobigwarp: SUBNE R9,R9,#256: BNE loop .exitwrp LDMFD R13!,{R1,R3,R4-R12}: MOV R15,R14 .tothedeath EQUDmapspr+32*256 .togendeath EQUDmapspr+33*256 .tobigwarp EQUD bigblocks+&41*1024 .tothewarp EQUD mapspr+&41*256 .tobigdeath EQUDbigblocks+32*1024 .togenbig EQUDbigblocks+33*1024 .begin EQUD hello .begind EQUD &1234 .initwd MOV R0,#0: STR R0,begind: B deathinit .tvdown EQUD vdown .cmap EQUD colmapm .tototext EQUD totext .fint EQUD fintxt-1 .mymap EQUD &F0F1F3 .gcarria EQUD carriagem .old EQUD0 .tbank EQUD bank .completed LDR R0,tototext LDR R1,fint: STR R1,[R0],#4 STR R1,[R0] STMFD R13!,{R14} BL trivialgame ; well, just no continue option BL noangeldust BL vsync MOV R0,#0: BL stalloff BL videoCl BL notdgame LDR R1,tbank: MOV R0,#0: STR R0,[R1] BL flip: BL flip: BL loadendz: BL videoCl MOV R1,#0: MOV R0,R1: BL wrbase BL copyica BL savelogo: BL storelogo MOV R0,#1: BL wrcomplflg BL biglogo MOV R0,#4: BL noowall2 BL overbiglogo2 MOV R0,#0: BL wrcomplflg BL yesangeldust BL delhead1 MOV R1,#1: BL stalloff BL didicheat: MOVS R0,R0: BNE iwonttellyou BL securetxt FNaddr(496,800): EQUD &F4F5F6 FNequadd("Well Done"): EQUB 0:ALIGN BL securetxt FNaddr(48,636): EQUD &D0D2FC FNequadd("Final editor code which will give you") EQUB 0:ALIGN BL securetxt FNaddr(176,572): EQUD &D0D2FC FNequadd("unlimited access to this zone"): EQUB0:ALIGN BL securetxt FNaddr(368,508): EQUD &D0D2FC FNequadd("in the editor is:"): EQUB0:ALIGN BL finalecode LDR R0,cmap: LDR R1,mymap: STR R1,[R0] LDR R1,gcarria: MOV R0,#&6200: SUB R0,R0,#&80: STR R0,[R1] STR R0,old .backfrcht MOV R10,#50:MOV R0,#19 .loop SWI "OS_Byte" SUBS R10,R10,#1: BNE loop BL swallow .loop BL vsync BL message SWI "OS_Mouse" ANDS R2,R2,#4: BEQ loop BL copyica BL noangeldust BL restorelogo BL qcl2 LDMFD R13!,{R15} .flmode EQUB 0 .hrmode EQUB 0 EQUW 0 .findtime EQUD0:EQUD0 .dclock STMFD R13!,{R0-R12,R14}: LDR R10,tscrb LDR R0,[R10]: STR R0,oldscr: B indy .gcarriage2 EQUD carriage .getreal MOV R0,#1:STR R0,findtime ADR R1,findtime: MOV R0,#14: SWI "XOS_Word" MOV R0,#49: STRB R0,findtime+7 MOV R15,R14 .incclock LDRB R0,findtime+7: SUB R0,R0,#1: STRB R0,findtime+7 LDRB R1,flmode: MOVS R1,R1 BEQ nolook: CMP R0,#25: BEQ isok: CMP R0,#26: BEQ isok CMP R0,#27: BEQ isok .nolook CMP R0,#97: BEQ otherflip CMP R0,#98: BEQ otherflip MOVS R0,R0:LDMNEFD R13!,{R0-R12,R15}^ MOV R0,#99: STRB R0,findtime+7 \ decrease binary from 99 to 0 LDRB R0,findtime+6: ADD R0,R0,#1: AND R1,R0,#&F: CMP R1,#10 ADDEQ R0,R0,#6: CMP R0,#&59: MOVCS R0,#0: STRB R0,findtime+6 LDRB R0,findtime+5: ADC R0,R0,#0: AND R1,R0,#&F: CMP R1,#10 ADDEQ R0,R0,#6: CMP R0,#&59: MOVCS R0,#0: STRB R0,findtime+5 LDRB R0,findtime+4: ADC R0,R0,#0: AND R1,R0,#&F: CMP R1,#10 ADDEQ R0,R0,#6: CMP R0,#&24: MOVCS R0,#0: STRB R0,findtime+4 .otherflip LDRB R3,flmode: MOVS R3,R3: BNE isok LDREQB R3,findtime+6:MOVS R3,R3: LDMNEFD R13!,{R0-R12,R15}^ .isok LDRB R3,findtime+7 LDR R10,tscrb: LDR R0,[R10]: STR R0,oldscr SUB R3,R3,#1: AND R3,R3,#3: ADD R3,R3,R3,LSL#2: LDR R9,tbase2t LDR R9,[R9]: ADD R9,R9,R3,LSL#14: STR R9,[R10] .indy LDR R0,gcarriage2: LDR R1,[R0]: STR R1,oldcari MOV R1,#&1E00: ADD R1,R1,#&13 STR R1,[R0] LDR R0,gcmmm: LDR R1,[R0]: STR R1,oldmam LDRB R12,findtime+7: CMP R12,#28: MOVGT R12,#0: LDRLEB R12,flmode MOV R8,#2 BL gethr:MOVS R0,R0,LSR#4: MOVEQ R0,#61 BL chkmdetxt BL gethr:AND R0,R0,#15 BL chkmdetxt BL blankspc LDRB R0,findtime+5:MOV R0,R0,LSR#4 BL chkmdetxt LDRB R0,findtime+5:AND R0,R0,#15 BL chkmdetxt LDR R10,tscrb: LDR R0,oldscr: STR R0,[R10] LDR R0,gcarriage2: LDR R1,oldcari: STR R1,[R0] LDR R0,gcmmm: LDR R1,oldmam: STR R1,[R0] LDMFD R13!,{R0-R12,R15}^ .tscrb EQUDscrnbot .gcmmm EQUD colmapm .oldscr EQUD0: .tbase2t EQUD base2 .oldcari EQUD 0:.oldmam EQUD 0 .gethr LDRB R0,findtime+4: LDRB R10,hrmode: MOVS R10,R10 MOVEQ R15,R14: MOVS R0,R0: MOVEQ R0,#&12: MOVEQ R15,R14 CMP R0,#&12: MOVLE R15,R14 SUB R0,R0,#&12: CMP R0,#&E: SUBGE R0,R0,#6 CMP R0,#10: ADDGE R0,R0,#6: MOV R15,R14 : .specialhi MOV R0,#25 LDR R1,hiptr MOV R8,#176 MOV R9,#&C400 ADD R2,R1,#&1100: ADD R2,R2,#&30: MOV R4,#&F0: STRB R4,[R2] .insprout LDR R2,tbase2: LDR R2,[R2] SUB R2,R2,R9 ADD R2,R2,#11 .loop MOV R4,R8:.loop2 LDRB R3,[R1,R4] CMP R3,#&F0: STRNEB R3,[R2,R4] SUBS R4,R4,#1: BNE loop2 ADD R1,R1,R8: ADD R2,R2,#&140 SUBS R0,R0,#1: BNE loop MOV R15,R14 .insprout2 LDR R2,tbase2: LDR R2,[R2] SUB R2,R2,#&C300: ADD R2,R2,#&6E .loop MOV R4,#99:.loop2 LDRB R3,[R1,R4] CMP R3,#&F0: STRNEB R3,[R2,R4] SUBS R4,R4,#1: BPL loop2 ADD R1,R1,#100: ADD R2,R2,#&140 SUBS R0,R0,#1: BNE loop MOV R15,R14 .hiptr EQUD &1FC0000+&3C000 ; bodged .sprite \ R0 = from addres \ R1 = index from scrnbot \ R3 = x-size-1 \ R4 = y-size-1 \ R5 = horiz. adj LDR R2,tbase2 LDR R2,[R2] ADD R1,R1,R2 ADD R8,R1,#&14000 .loop2 MOV R7,R3 .loop LDRB R6,[R0,R7] CMP R6,#&F0 STRNEB R6,[R8,R7] SUBS R7,R7,#1: BPL loop ADD R8,R8,#&140 ADD R0,R0,R5 SUBS R4,R4,#1: BPL loop2 MOV R15,R14 : .tbase2 EQUD base2 .theight EQUD height .input EQUD 0 .squareon EQUD0 .oldxpos EQUD 0:.oldxpos2 EQUD 0:.oldxpos3 EQUD 0 .earthstrap EQUD gnd .warns .warn STMFD R13!,{R14} BL securetxt: FNaddr(40,264): EQUD &1F1D1C FNequadd("No Joystick Software Found"): EQUB 0: ALIGN MOV R6,#2:MOV R5,#12:.loop STMFD R13!,{R0,R5,R6,R14}: STRB R6,input BL vsync BL showinp: LDMFD R13!,{R0,R5,R6,R14}: EOR R6,R6,#1: SUBS R5,R5,#1 BNE loop: STRB R6,input: LDMFD R13!,{R15} : .taxi EQUD ax .myeye EQUD I .toldm EQUD mapcopy+64 .become EQUB 97:.flcot EQUB 0:EQUW 0 .tspdcof EQUD spd .tosqoon EQUD squareon .xnew EQUD 0 .motion STMFD R13!,{R14} LDR R0,tosqoon: LDR R0,[R0]: CMP R0,#80: BLEQ subkey MOV R6,#0: MOV R10,#99 STR R6,force LDR R0,toldm: MOV R2,#15:.loop LDRB R12,[R0],#1 CMP R12,#97: LDRB R12,[R0],#1: CMPEQ R12,#0 STREQB R10,[R0,#-2]: SUBS R2,R2,#1: BPL loop LDR R0,tmmap: LDR R0,[R0]: STR R0,toldm MOV R2,#15: LDRB R10,become:.loop LDRB R12,[R0],#1 CMP R12,#97: CMPNE R12,#99: LDRB R12,[R0],#1: CMPEQ R12,#0 STREQB R10,[R0,#-2]: SUBS R2,R2,#1: BPL loop LDR R0,tmmap: LDR R0,[R0]: LDR R2,myeye:LDR R2,[R2]:ADD R3,R0,#1 SUB R2,R2,#&80 LDRB R12,flcot: LDR R11,tspdcof: LDR R11,[R11] SUBS R12,R12,R11: AND R12,R12,#7: STRB R12,flcot EORCC R10,R10,#2: STRCCB R10,become MOV R1,#&F00:.loop LDRB R4,[R0,R1,LSR#7]: CMP R4,#99 CMPNE R4,#97: BNE nopull LDRB R4,[R3,R1,LSR#7]: CMP R4,#&FF: BEQ nopull SUBS R9,R1,R2: ADDMI R7,R9,#&1000: RSBMI R7,R7,#0 RSBPL R7,R9,#&1000: ADD R6,R6,R7 CMP R9,#&80: BGT nopull: CMN R9,#&80: MOVGT R6,#0: BGT zeropull .nopull SUBS R1,R1,#&100: BPL loop .zeropull MUL R6,R11,R6 LDR R2,theight:LDR R0,[R2]: LDR R10,sthr LDR R3,squareon: CMP R3,#23: MOVEQ R10,#0 LDR R4,squareon: MOV R9,R10 CMP R4,#1: MOVEQ R10,#&800: MOVNE R10,#&1800 CMP R4,#64: MOVEQ R10,#&1000 LDR R11,brakeson: MUL R10,R11,R10: MOV R10,R10,ASR#10 LDR R12,[R2,#xa-height]: MUL R12,R11,R12: MOV R12,R12,ASR#10 CMP R0,#512: MOVGT R10,R9 CMN R0,#512: MOVLT R10,R9 CMN R12,#1: MOVEQ R12,#0 LDR R11,earthstrap: LDR R11,[R11]: MOVS R11,R11: MOVEQ R4,#0 LDR R11,tinv: LDR R11,[R11]: CMP R4,#96: EOREQS R11,R11,#&FF MOVNES R11,R11:MOVNE R0,#0: MOVEQ R0,#1 LDR R11,[R2,#x-height] STR R11,oldxpos: LDR R1,taxi: LDR R1,[R1]: SUB R11,R11,R1 STR R11,oldxpos3: ADD R11,R11,R6,LSL#4: STR R6,force AND R1,R11,#&FF: CMP R1,R6: BICLT R11,R11,#0:SUBEQ R11,R11,#1 SUB R1,R1,#&100: CMN R1,R6: ORRGT R11,R11,#&FF: ADDEQ R11,R11,#1 LDR R1,input: LDR R9,spd CMP R10,#0: MOVEQ R12,#0 CMP R1,#1: BEQ mouse: SUB R10,R10,R10,ASR#2:EORGT R0,R0,#16 LDR R1,asqoon: LDR R1,[R1]: CMP R1,#61: MOVEQ R10,#&600 MOVNE R7,#220: MOVEQ R7,#250 BL chkey2: EOR R0,R0,#1 BNE nothis RSB R1,R10,#0 MLA R12,R1,R9,R12 CMP R7,#250: MOVNE R7,#230 .nothis BL chkey BNE nothat MLA R12,R10,R9,R12 CMP R7,#250: MOVNE R7,#230 .nothat MLA R11,R12,R9,R11 MUL R12,R7,R12: MOV R12,R12,ASR#8 .nothato LDR R9,spd LDR R10,xnew: MUL R7,R10,R9: ADD R11,R11,R7,LSL#7 MOV R8,#250:.loop MUL R10,R8,R10: MOV R10,R10,ASR#8 SUBS R9,R9,#1: BGT loop CMN R10,#42: MOVHS R10,#0 STR R10,xnew LDR R10,theight STR R12,[R10,#xa-height]: STR R11,[R10,#x-height] STR R11,oldxpos2 BL barrierfix LDMFD R13!,{R15} .amibraking STR R0,brakeson: MOV R15,R14 .brakeson EQUD 0 .force EQUD 0 .tinv EQUD invert .ttx EQUD x .tmmap EQUD mapptr .asqoon EQUD squareon .mouse MOVS R0,R0: RSBEQ R10,R10,#0 STMFD R13!,{R10} SWI "OS_Mouse" LDR R12,asqoon: LDR R12,[R12]: CMP R12,#61: BNE noice LDR R12,oldyxo: SUB R0,R12,R0: SUB R0,R12,R0,ASR#2:.noice STR R0,oldyxo RSB R0,R0,#640: SUB R10,R1,#512 LDR R12,brakeson: MUL R0,R12,R0: MOV R0,R0,ASR#10 LDR R12,mseptr: LDR R12,[R12,#4]: MUL R10,R12,R10: MOV R10,R10,ASR#7 ADDS R10,R10,#512: MOVMI R10,#0: CMP R10,#1024: MOVGE R10,#1024 STMFD R13!,{R0}: ORR R2,R2,R10,LSL#8: STR R2,buttonstate RSB R1,R1,#512 LDR R12,asqoon: LDR R12,[R12]: CMP R12,#61 MOVNE R12,#230: MOVEQ R12,#250: MUL R0,R12,R0 MOV R12,#248:MUL R1,R12,R1: MOV R1,R1,ASR#8: RSB R1,R1,#512 MOVS R0,R0,ASR#8: ADDMI R0,R0,#1: RSB R0,R0,#640 MOV R0,R0,LSL#8: ADD R0,R0,#3: STR R0,pushpnt STRB R1,pushpnt+3: MOV R1,R1,LSR#8: STRB R1,pushpnt+4 MOV R0,#21: ADR R1,pushpnt: SWI "OS_Word" LDMFD R13!,{R0} LDR R12,mseptr: LDR R12,[R12]: MUL R0,R12,R0: MOV R0,R0,ASR#7 LDMFD R13!,{R10} CMP R0,#640: MOVGT R0,#640: CMN R0,#640: MVNLT R0,#640: MUL R0,R10,R0 MOV R12,R0,ASR#5: MLA R11,R12,R9,R11: B nothato .oldyxo EQUD 640 .initoldyxo MOV R0,#640: STR R0,oldyxo: MOV R15,R14 .mseptr EQUD msesens .pushpnt EQUD 0: EQUD 0 : .buttonstate EQUD0 .icascrbodge EQUD &1FC0000 ; bodged .copyica LDR R0,gica LDR R1,icascrbodge: ADD R11,R1,#&14000 ADD R2,R1,#&2E40:.loop CMP R1,R2: MOVGE R15,R14 LDRB R3,[R0],#1: SUBS R4,R3,#&F0 STRLTB R3,[R1],#1: STRLTB R3,[R11],#1 BLT loop LDRB R6,[R0],#1:.loop2 CMP R1,R2: MOVGE R15,R14 LDRB R5,[R1,-R6]: STRB R5,[R1],#1: STRB R5,[R11],#1 SUBS R4,R4,#1: BNE loop2 B loop .gica EQUD header : .colourbank MOV R0,#0: \ R1= scrntop MOV R12,R0 MOV R8,#&FF00 LDR R9,addfc MOV R2,#16:.loop2 MOV R3,#16:.loop MOV R4,R0: CMP R8,R10:ORREQ R4,R4,#&FF0000: ORREQ R4,R4,#&FF STR R12,[R1,#&3C0]: STR R4,[R1,#&140] ORREQ R4,R4,#&FF00 STR R4,[R1,#&280]: STR R4,[R1],#4 ADD R8,R8,#1 ADD R0,R0,R9 SUBS R3,R3,#1: BNE loop ADD R1,R1,#&500: SUB R1,R1,#64 SUBS R2,R2,#1: BNE loop2 MOV R15,R14 .addfc EQUD&10101 .tomao EQUD minibdata .mapbank LDR R11,tomao MOV R0,#0: \ R1= scrntop MOV R8,#&FF: ORR R8,R8,#&FF0000 MOV R12,R0 MOV R2,#8:.loop2 CMP R2,#1: MOVEQ R3,#8 MOVNE R3,#16:.loop LDR R10,[R11,#4] CMP R0,R9: ORREQ R10,R10,R8 STR R12,[R1,#&3C0]: STR R10,[R1,#&140] LDR R10,[R11,#8]:ORREQ R10,R10,R8: ORREQ R10,R10,#&FF00 STR R10,[R1,#&280] LDR R10,[R11],#12: ORREQ R10,R10,R8: ORREQ R10,R10,#&FF00 STR R10,[R1],#4 ADD R0,R0,#1 SUBS R3,R3,#1: BNE loop ADD R1,R1,#&500: SUB R1,R1,#64 SUBS R2,R2,#1: BNE loop2 MOV R15,R14 .stickto EQUD 0 .cruiseon EQUB0:.buttondown EQUB0:ALIGN .findin EQUD input .cruise MOV R12,R14 LDR R10,cruiseen: MOVS R10,R10: MOVEQ R15,R14 LDR R0,findin: LDR R0,[R0]: CMP R0,#1: BEQ muscrs MOVGT R0,#16+5: MOVLT R0,#5: BL chkey .bkol LDRB R0,buttondown: STRB R1,buttondown: LDRB R2,cruiseon LDR R3,velo EOR R0,R0,#&FF: ANDS R0,R0,R1:STRNE R3,stickto EORNE R2,R2,#&FF:STRNEB R2,cruiseon:MOVS R2,R2 MOVEQ R15,R12 CMP R10,#16: MOVEQ R15,R12 \ no lower speed limit for entername2 CMP R3,#&40000: MOVGT R15,R12: CMN R3,#&40000: MOVLT R15,R12 MOV R0,#0: STRB R0,cruiseon: MOV R15,R12 .muscrs MOV R0,#9: BL chmkey: EOR R1,R1,#255: B bkol .thrust EQUD0:.reverse EQUD0 .braking EQUD64:.flybrake EQUD64 .upthr EQUD0:.factor EQUD0 \ please don't separate these .sthr EQUD0:.factdiv EQUD0 .bf EQUD0:.cruiseen EQUD 0 .rollen EQUD 0 .ballpnt EQUDball .sprpnt2 EQUD sprpnt : .togt EQUD got .calc ADR R4,redet-&F8: LDR R3,tremap: STR R4,[R3] LDR R0,ballpnt: LDR R1,sprpnt2: STR R0,[R1] STR R0,[R1,#oldpnt-sprpnt] ADR R0,thrust MOV R2,#0:STR R2,[R0]:STR R2,[R0,#4]: STR R2,[R0,#16] STR R2,[R0,#40] STR R2,[R0,#20]: STR R2,[R0,#36]: MOV R2,#&400: STR R2,[R0,#24] MOV R2,#32: STR R2,[R0,#32] MOV R2,#128:STR R2,[R0,#8]:STR R2,[R0,#12] LDR R0,togt MVN R4,#0 .loop LDRB R3,[R0],#1: AND R2,R3,#&1F: CMP R2,#18 MOVEQ R4,R3,ASR#5: CMP R3,#255: BNE loop STR R4,upgendgt LDR R0,togt .loop LDRB R3,[R0],#1 CMP R3,#&FF: MOVEQ R15,R14 CMP R3,#&FD: BGE loop AND R3,R3,#&1F CMP R3,#4: BLT doengine CMP R3,#6: BLE dobrakes CMP R3,#7: STREQ R3,rollen: BEQ loop CMP R3,#9: BLE thrst CMP R3,#13: BLT skin CMP R3,#18: BLE loop CMP R3,#22 MVNEQ R3,#&FF: STREQ R3,reverse BEQ loop MVNGT R3,#&FF: STRGT R3,cruiseen BGT loop CMP R3,#20: MOVEQ R2,#8: MOVNE R2,#5 STR R2,upthr: B loop .doengine ADR R4,epower LDR R5,[R4,R3,LSL#2]! LDR R3,upgendgt:.loop2 MOVS R3,R3: ADDPL R5,R5,R5,ASR#4: SUB R3,R3,#1: BPL loop2 STR R5,thrust LDR R5,[R4,#powerf-epower]! LDR R3,upgendgt:.loop2 MOVS R3,R3: SUBPL R5,R5,R5,ASR#5: SUB R3,R3,#1: BPL loop2 STR R5,factor LDR R5,[R4,#dfact-powerf] STR R5,factdiv B loop .upgendgt EQUD 0 .epower EQUD&14000:EQUD&18000:EQUD&1C000:EQUD&2F000 .powerf EQUD&2324F:EQUD&21111:EQUD&1F350:EQUD&1DE05 .dfact EQUD&30000/13:EQUD&400000/&D4:EQUD&600000/&D8:EQUD&80000/14 .dobrakes BEQ aid CMP R3,#5: MOVEQ R3,#122: MOVNE R3,#123 STR R3,braking: B loop .aid MOV R3,#125: STR R3,flybrake LDR R2,braking: CMP R2,R3: STRGT R3,braking B loop .thrst MOVEQ R2,#&1400: MOVNE R2,#&D00: STR R2,sthr B loop .skin CMP R3,#10: BNE nowor: LDRB R3,[R0,#-1] AND R3,R3,#&C0 ADR R4,remaps-256: ADD R4,R4,R3,ASR#3 LDR R3,tremap: STR R4,[R3] .nowor CMP R3,#11 LDR R4,ballpnt LDR R2,tsprpnt:ADDEQ R4,R4,#&2700: ADDEQ R4,R4,#&60: STR R4,[R2] STR R4,[R2,#oldpnt-sprpnt] CMP R3,#12: MOVEQ R4,#50: STREQ R4,bf B loop .remaps EQUD &1B1A1918: EQUD &B7B6B5B4 EQUD &23222120: EQUD &43424140 EQUD &83828180: EQUD &8B8A8988 .redet EQUD &27262524: EQUD &5B5A5958 .tremap EQUD remap : .fcount1 EQUD 0 .fcount3 EQUD 0 .tsprpnt EQUD sprpnt .deathinit MVN R0,#0: STR R0,fcount1:MOV R0,#0:STR R0,fcount3: B initdeath .storetelepen STR R2,entelepe: MOV R15,R14 .entelepe EQUD 0 .bigenable EQUD 0 .aport EQUD 0 .dobigp LDR R10,bigportergen: SUB R11,R10,#&500*4 LDR R6,bigeportgen: SUB R7,R6,#&100*4 MOV R9,#512: B portloop .maydeathdo LDR R0,entelepe: MOVS R0,R0: STMEQFD R13!,{R14} BEQ donetelep .deathdo STMFD R13!,{R14} LDR R1,spd LDR R0,aport: MOVS R0,R0: BEQ donetelep LDR R0,fcount3: ADD R0,R0,R1: STR R0,fcount3 LDR R10,portergen: SUB R11,R10,#&500 LDR R6,eportgen: SUB R7,R6,#&100 LDR R12,tcmap MOV R0,R0,ASR#2: AND R0,R0,#127 ADD R12,R12,R0 MOV R9,#128:.loop:.portloop ]:FORT2=0 TO 3:[OPT T LDRB R4,[R10],#4:CMP R4,#43 LDRNEB R4,[R12,R4] LDRB R5,[R6],#1:CMP R5,#43 LDRNEB R5,[R12,R5] : LDRB R8,[R10,#-3]:CMP R8,#43 LDRNEB R8,[R12,R8]: ORR R4,R4,R8,LSL#8 LDRB R8,[R6],#1:CMP R8,#43 LDRNEB R8,[R12,R8]: ORR R5,R5,R8,LSL#8 : LDRB R8,[R10,#-2]:CMP R8,#43 LDRNEB R8,[R12,R8]: ORR R4,R4,R8,LSL#16 LDRB R8,[R6],#1:CMP R8,#43 LDRNEB R8,[R12,R8]: ORR R5,R5,R8,LSL#16 : LDRB R8,[R10,#-1]:CMP R8,#43 LDRNEB R8,[R12,R8]: ORR R4,R4,R8,LSL#24: STR R4,[R11],#4 LDRB R8,[R6],#1:CMP R8,#43 LDRNEB R8,[R12,R8]: ORR R5,R5,R8,LSL#24: STR R5,[R7],#4 ]NEXT:[OPT T SUBS R9,R9,#16: BNE loop LDR R9,bigenable: MOVS R9,R9: BEQ didporters LDR R9,bigportergen: CMP R10,R9: BLE dobigp SUB R10,R9,#&500*4: ADD R11,R10,#&3E0 LDR R6,bigeportgen: SUB R6,R6,#&400: ADD R7,R6,#&3E0 MOV R9,#512:.loop LDMIA R10!,{R4,R8,R12,R14}: STMIA R11!,{R4,R8,R12,R14} LDMIA R10!,{R4,R8,R12,R14}: STMIA R11!,{R4,R8,R12,R14}: SUB R11,R11,#&40 LDMIA R6!,{R4,R8,R12,R14}: STMIA R7!,{R4,R8,R12,R14} LDMIA R6!,{R4,R8,R12,R14}: STMIA R7!,{R4,R8,R12,R14}: SUB R7,R7,#&40 SUBS R9,R9,#32: BNE loop .didporters LDR R10,portergen: SUB R10,R10,#&500: ADD R11,R10,#&F0 LDR R6,eportgen: SUB R6,R6,#&100: ADD R7,R6,#&F0 MOV R9,#128:.loop LDMIA R10!,{R4,R8,R12,R14}: STMIA R11,{R4,R8,R12,R14}: SUB R11,R11,#&10 LDMIA R6!,{R4,R8,R12,R14}: STMIA R7,{R4,R8,R12,R14}: SUB R7,R7,#&10 SUBS R9,R9,#16: BNE loop .donetelep LDR R0,fcount1:SUBS R0,R0,R1:ADDLT R0,R0,#17 STR R0,fcount1: BLLT deathcycle: LDMFD R13!,{R15} .portergen EQUD mapspr+103*256 .eportgen EQUD mapspr+106*256 .bigportergen EQUD bigblocks+103*1024 .bigeportgen EQUD bigblocks+106*1024 .tcmap EQUD colourlist+&38 .dhs EQUD height .editf2 STMFD R13!,{R14} BL resettime: LDMFD R13!,{R14} .editf STMFD R13!,{R14} BL spdisz MOV R0,#&200000: LDR R1,dhs: STR R0,[R1] BL tacproject BL flip3 BL dmjunk BL cls BL spacejunk BL dostars BL updatescr BL xyzcode B timer2 .s EQUD0 \ Don't separate .stimer EQUD0 \ .oldptr EQUDoldtop .restartflag EQUD0 .clrfl MOV R4,#0: STR R4,restartflag: B byebye .restartfoff MOV R0,#0: STR R0,restartflag: MOV R15,R14 .tognr EQUD gnd .setflag MOV R0,#1: STR R0,restartflag MOVS R4,R4:RSBPL R4,R4,#0 B return .setflag2 MOV R0,#2: STR R0,restartflag MOVS R4,R4:RSBMI R4,R4,#0 B return2 .setflag3 MOV R0,#1: STR R0,restartflag MOVS R4,R4:RSBPL R4,R4,#0 B return3 .sgoin EQUD shopgoing .dpgame EQUD 0 .tvdowny EQUD vdown .deadman2 EQUD dead .gameframe STMFD R13!,{R14} LDRB R0,dpgame: MOVS R0,R0: BLNE pensureon LDR R1,sgoin: LDR R1,[R1]: MOVS R1,R1: BEQ nogosh LDR R0,velo: CMP R0,#&30000: BGT nogosh: CMN R0,#&30000 BLT nogosh LDR R0,tognr: LDR R0,[R0]: MOVS R0,R0: BEQ nogosh BL No50stars BL normo: BL pon: BL cleardashcurv BL wantinventory: BL entershop: BL ackesc: BL poff MOV R0,#1: BL infade MOV R0,#255: BL getfoot LDR R0,sgoin: MOV R1,#0: STR R1,[R0] BL Hz50stars LDR R4,mymoney: LDR R4,[R4]: MOVS R4,R4: LDMMIFD R13!,{R15} BL restore BL resettime .nogosh BL chkcash BL wrsq: BL getsquareon BL firststopst BL storeoldpos BL doblinded LDR R1,tvdowny: LDR R1,[R1]: MOV R1,R1,ASR#5 LDR R11,spd: MOV R11,R11,LSL#1 BL flamecode:CMP R10,#&140000 LDRGT R4,deadman2: MOVGT R0,#1: STRGTB R0,[R4] BL maychkproject BL fanspin BL flip3 BL dmjunk BL cls BL spacejunk BL invischk BL updatescr: BL plotshadow BL xyzcode BL mightdobanner LDR R1,oldptr LDR R0,[R1]: MOVS R0,R0: LDREQ R0,[R1,#scrntop-oldtop] STREQ R0,[R1] LDR R0,velo MOV R3,#0 MOVS R0,R0: MOVPL R3,#53 CMP R0,#&1000000: MOVGT R3,#19 MOVS R0,R0: RSBMI R0,R0,#0: LDR R1,gvel: STR R0,[R1] BL dbar BL dopow: BL dscore: BL dtime: BL dcash: BL maydeathdo BL dspd BL timer BL mightpause LDR R0,twerp: LDRB R0,[R0]:MOVS R0,R0 LDRNE R0,spd: MOVNE R0,R0,LSL#1:STRNE R0,spd LDR R0,s: CMP R0,#2: LDRNE R0,spd: BLNE adt \ decrease time if not up BL deathdo BL slimer BL descend BL maymotion BL chalign BL cruise BL speedo BL vmotion BL collision BL doalt LDR R12,restartflag BL vmotion2 BL bombcode BL endgloopcd MOV R0,#12: BL chkey: BNE noselfdi LDR R6,pntball: LDR R7,tsprpn LDRB R8,[R7,#4]: MOVS R8,R8: BNE noselfdi LDR R8,[R7]: STR R8,[R7,#8]: CMP R8,R6: ADDEQ R6,R6,#&1E0*8 ADDNE R6,R6,#&2900: ADDNE R6,R6,#&40 STR R6,[R7]: MOVEQ R6,#5: MOVNE R6,#7: STR R6,[R7,#4] MOV R8,#1: STRB R8,[R7,#deadbe-sprpnt] LDR R8,gdwnv: LDR R7,[R8]: SUB R7,R7,#&A0: STR R7,[R8] LDR R8,gihe: LDR R7,[R8]: ADD R7,R7,#&F000: STR R7,[R8] .noselfdi LDR R0,canroll: LDR R0,[R0]: MOVS R0,R0: LDMNEFD R13!,{R15} LDR R5,tgrnd: LDR R5,[R5]: MOVS R5,R5: LDMEQFD R13!,{R15} LDR R5,tmmap: LDR R5,[R5]: LDR R5,[R5,#&28]: LDR R4,spd MUL R4,R5,R4: LDR R5,velo: SUB R5,R5,R4,LSL#12: STR R5,velo LDMFD R13!,{R15} .resettime MOV R0,#0: STR R0,tickercount: B initcsh .timer MOV R0,#0:LDR R2,tickercount:STR R0,tickercount: STR R2,spd MOV R15,R14 .gdwnv EQUD vdown .tickercount EQUD 0 .gihe EQUD h .tickerv LDR R0,tickercount: ADD R0,R0,#1: STR R0,tickercount MOV R15,R14 .stanim LDR R0,pntball LDR R4,tsprpn:LDRB R5,[R4,#4]: MOVS R5,R5: BNE finanim LDR R5,[R4]: STR R5,[R4,#8]: CMP R5,R0: ADDEQ R0,R0,#&1E0*14 SUBEQ R0,R0,#&1E0 STREQ R0,[R4]: MOV R0,#7: STREQ R0,[R4,#4]: B finanim .timer2 BL timer LDR R0,spd: MOV R1,#0: STRB R1,spd: B storespd2 .canroll EQUD rollen .pntball EQUD ball .tsprpn EQUD sprpnt .velo EQUD0 .gvel EQUD vel .twerp EQUD warper .spd EQUD 5:.in EQUD149:EQUD-1 .tgrnd EQUD gnd : .tsg EQUD shopgoing .newt EQUD0:EQUD0 .got EQUD&FFFFFFFF:EQUD&FFFFFFFF EQUD&FFFFFFFF:EQUD&FFFFFFFF EQUD&FFFFFFFF:EQUD&FFFFFFFF .prices EQUD 450:EQUD900:EQUD2500:EQUD5000 EQUD250:EQUD650:EQUD700:EQUD500:EQUD200:EQUD350 EQUD 100:EQUD300:EQUD500 EQUD 500:EQUD950:EQUD450:EQUD800 EQUD 500:.upgprice:EQUD 0:EQUD400:EQUD800 EQUD0:EQUD 750:EQUD 325 .rstprc EQUD 10000 \ dummy .iconsbase EQUD&7308-fidal:EQUD&1C00:EQUS"...." EQUD&7330-fidal:EQUD&4C00:EQUS"...." EQUD&7358-fidal:EQUD&2800:EQUS"...." EQUD&7380-fidal:EQUD&2C00:EQUS"...." EQUD&73A8-fidal:EQUD&0C00:EQUS"...." EQUD&73D0-fidal:EQUD&3400:EQUS"...." EQUD&73F8-fidal:EQUD&0000:EQUS"...." EQUD&AF08:EQUD&1400:EQUD0 EQUD&AF30:EQUD&1800:EQUD1 EQUD&DE88:EQUD&1000:EQUD2 EQUD&DEB0:EQUD&1C00:EQUD3 \ engines EQUD&AF58:EQUD&5C00:EQUD18 \ tweak EQUD&AF08:EQUD&2000:EQUD4 EQUD&AF30:EQUD&4C00:EQUD5 \ brakes EQUD&DE88:EQUD&0400:EQUD6 \ AI-D EQUD&DEB0:EQUD&5800:EQUD7 \ no roll-back EQUD&AF08:EQUD&2400:EQUD8 EQUD&AF30:EQUD&2800:EQUD9 \ thrusters EQUD&AF08:EQUD&0800:EQUD10 EQUD&AF30:EQUD&2C00:EQUD11 EQUD&DE88:EQUD&3000:EQUD12 \ skin EQUD&AF08:EQUD&3400:EQUD13 EQUD&AF30:EQUD&5000:EQUD14 \ extras EQUD&DE88:EQUD&4000:EQUD15 EQUD&DEB0:EQUD&4400:EQUD16 EQUD&AF58:EQUD&3800:EQUD17 EQUD&AF08:EQUD&3C00:EQUD19 \ jets EQUD&AF30:EQUD&0C00:EQUD20 EQUD&AF08:EQUD&0000:EQUD22 \ reverse EQUD&AF30:EQUD&5400:EQUD23 \ cruise control EQUD&DE88:EQUD&4800:EQUD24 \ reset map .first EQUB0:EQUB4:EQUB8:EQUB10:EQUB19:EQUB13:EQUB22 ALIGN .num EQUB5:EQUB4:EQUB2:EQUB3:EQUB2:EQUB4:EQUB3 ALIGN : .buyptr EQUD buy .resetspd MOV R0,#0: STR R0,spd: B resettime .spdisz MOV R0,#0: STR R0,spd: MOV R15,R14 .invischk LDR R0,spd: B invisigo .shopicons \ R0= no. \ R1= first icon MOV R8,R0 ADR R2,iconsbase ADD R2,R2,R1 .decompressicons STMFD R13!,{R14} LDR R3,buyptr .loop2 LDR R0,[R2],#4 LDR R1,[R2],#8 STMFD R13!,{R2,R3,R8} ADD R1,R1,R3 LDR R9,[R2,#-4]: CMP R9,#255: BLE chkco BL dshopic .tolife LDMFD R13!,{R2,R3,R8} SUBS R8,R8,#1: BNE loop2 LDMFD R13!,{R15} .twrbck EQUD wrbck:.bwr EQUD &D3D3D3D3 .mymoney EQUD cash .chkco ADR R6,got: MOV R5,#255 .loop LDRB R7,[R6],#1: CMP R7,#&E0+18: CMPEQ R9,#18 BEQ gottall: CMP R7,#255: BNE loop: ADR R6,got CMP R9,#18: BEQ caniafford .loop LDRB R7,[R6],#1: AND R7,R7,#&3F: CMP R7,R9 .gottall MOVEQ R5,#&10 MOVEQ R3,#&13 MOVEQ R4,#&11 CMP R7,#&3F: BNE loop CMP R5,#255: BNE giotto .caniafford STMFD R13!,{R0-R1} ADR R8,prices: LDR R8,[R8,R9,LSL#2] MOV R0,R9: BL getpartext: SUB R8,R8,R0 LDR R6,mymoney: LDR R6,[R6] CMP R6,R8: MOVLT R5,#&2F: MOVGE R5,#&FF MOVLT R3,#&2C: MOVGE R3,#&D2 MOVLT R4,#&2D: MOVGE R4,#&FC LDMFD R13!,{R0-R1} .giotto MOV R2,#32: BL cIIicon: B tolife : .gbase1 EQUD base1 .barsgoptr EQUD barsgo:.barind EQUD&11000+&2737-&D40+&15+&140*7 .allowjoy EQUD 0 .genesis STMFD R13!,{R14} SWI 256+18: SWI 256: SWI 256+&2A BL newpointer MOV R0,#0: SWI &63F40 ; XJoystick_Read MOVVS R1,#0: MVNVC R1,#0: STR R1,allowjoy MOV R0,#149: STR R0,in ADR R0,in: LDR R1,gbase1 SWI "XOS_ReadVduVariables" LDR R0,base1 SUB R1,R0,#&D40: ADD R1,R1,#&11000 STR R1,base2: SUB R1,R1,#&1F00:SUB R1,R1,#&EC STR R1,base3 BL flip BL flip BL gentab BL initvnt BL findpokead BL eorseed MOV R0,#14: MOV R1,#4: SWI "OS_Byte" MOV R0,#14: MOV R1,#4: SWI "OS_Byte" BL checkcache: MOV R0,#0 ; R0=0 cache BL musicinitsoundsys LDMFD R13!,{R15} : .blsiz EQUW &99C6+36*&140: EQUB 80: EQUB 44 EQUW &99C6+36*&140+40: EQUB 40: EQUB 44 EQUW &99C6+36*&140: EQUB 80: EQUB 44 EQUW &99C6: EQUB 80: EQUB 80 EQUW &99C6+36*&140: EQUB 80: EQUB 44 EQUW &99C6: EQUB 80: EQUB 80 .bckshpII STMFD R13!,{R0-R12,R14} BL vsync MOV R0,#&8A00: ADD R0,R0,#&C6: MOV R1,#120: MOV R2,#92: BL getbck LDMFD R13!,{R0-R12,R15} .totabby EQUD tab .bckshp \ R2 = new icon set CMP R2,#0 LDREQ R1,totabby: LDREQB R1,[R1] STMFD R13!,{R14} STMFD R13!,{R2} BL vsync LDMFD R13!,{R2} CMP R2,#2: BLT onlyfurry ADR R10,blsiz-8: LDR R0,[R10,R2,LSL#2]!: BIC R0,R0,#&FF000000 BIC R0,R0,#&FF0000: LDRB R1,[R10,#2]: LDRB R2,[R10,#3] BL getbck .onlyfurry LDMFD R13!,{R14} MOV R1,#40: MOV R2,#40 MOV R0,#&9A00: ORR R0,R0,#&16 .getbck LDR R4,base1: ADD R0,R0,R4 ADD R3,R0,#&14000 .loop MOV R4,R1 .loop2 LDRB R5,[R3,R4] STRB R5,[R0,R4] SUBS R4,R4,#1: BNE loop2 ADD R0,R0,#&140 ADD R3,R3,#&140: SUBS R2,R2,#1 BNE loop MOV R15,R14 .boxidX EQUD&A1D8-&140*20 .box LDR R0,base1 LDR R1,boxidX ADD R0,R0,R1 MOV R2,#&2C:MOV R3,#90 MOV R5,#&2C:MOV R6,#1 .loop2 MOV R4,#160 STRB R5,[R0],#1 .loop STRB R2,[R0],#1 SUBS R4,R4,#1: BNE loop STRB R6,[R0],#&9F CMP R3,#2: MOVEQ R2,#1 MOVNE R2,#&D3 SUBS R3,R3,#1: BNE loop2 MOV R15,R14 : .footd EQUD footer .from EQUD&1FF8400 ; bodged (MUST be 1FF8400, used in ADD R11,R0,#&3C00) .to EQUD&1FF8400-&28000 ; bodged .screndd EQUD &2000000-&4000 ; bodged : .toscrnb56 EQUD scrnbot .chcol LDRB R0,b4 ADR R5,pattern-4: ADD R5,R5,R0 LDR R0,from: LDR R1,to ADD R2,R1,#&14000 MOV R4,#7: MOV R6,#&37 SUB R7,R5,#&30 LDR R10,screndd .loop LDRB R3,[R0] CMP R3,#&04: CMPGE R4,R3 LDRGEB R3,[R5,R3] CMPLT R3,#&3C: CMPLT R6,R3 LDRLTB R3,[R7,R3] STRB R3,[R0],#1 STRB R3,[R1],#1 STRB R3,[R2],#1 CMP R0,R10: BNE loop LDR R0,toscrnb56: LDR R0,[R0]:STMFD R13!,{R0,R14} BL streal: BLEQ getreal LDR R0,base2: LDR R1,toscrnb56: STR R0,[R1] BL dclock LDR R0,base2:ADD R0,R0,#&14000:BL R0isbot BL dclock LDR R0,base2:ADD R0,R0,#&28000:BL R0isbot BL dclock LDMFD R13!,{R0,R14} .R0isbot LDR R1,plodbot: STR R0,[R1]: MOV R15,R14 .plodbot EQUD scrnbot .tgot EQUDgot .rVDUb EQUB 1: EQUD &28000: ALIGN .getfoot \ R0 =pattern no. \ FF=same as before CMP R0,#&FF: LDREQB R0,b4 STRB R0,b4 LDR R0,from: LDR R2,footd ADD R2,R2,#320 MOV R4,#7: MOV R6,#&37 ADD R11,R0,#&3C00 SUB R7,R5,#&30 .loop LDRB R3,[R2],#1: AND R8,R3,#&FC: CMP R8,#&F0: STRNEB R3,[R0],#1 BNE endogf CMP R3,#&F2: LDRB R3,[R2],#1: LDRNEB R8,[R2],#1: MOVEQ R8,#2 .loop2 STRB R3,[R0],#1: SUBS R8,R8,#1: BNE loop2 .endogf CMP R0,R11: BLT loop ADR R1,rVDUb: MOV R0,#22: SWI "OS_Word" STMFD R13!,{R14}: BL scrnb1 BL initcsh: BL speedo0 BL fanspin: BL scrnb2 LDMFD R13!,{R14} MOV R3,#0: STR R3,tintgot LDR R1,tgot ADR R3,getinf-(13*16) .loop LDRB R2,[R1],#1 CMP R2,#&FF: BEQ chcol CMP R2,#17:BGE loop CMP R2,#13:BLT loop CMP R2,#15: MOVEQ R2,#1: STREQ R2,tintgot: BEQ loop STMFD R13!,{R1-R3,R14} LDR R0,[R3,R2,LSL#4]! LDR R1,[R3,#4]! LDRB R6,[R3,#4]! LDRB R5,[R3,#1]! LDRB R4,[R3,#1]! MOV R3,R6 BL sprite LDMFD R13!,{R1-R3,R14} B loop .getinf EQUDextras+&373-3:EQUD&1837+&3C0-77+&14000:EQUB40:EQUB44:EQUB9:EQUB0:.b4 EQUD0 EQUD extras+&52C+&28:EQUD&2737+&500-60+&14000:EQUB44:EQUB48:EQUB8:EQUB0:EQUD0 EQUD 0: EQUD 0: EQUD 0: EQUD 0 EQUD extras+&224:EQUD&811+&3C0+125+&14000:EQUB20:EQUB24:EQUB11:EQUB0:EQUD0 .pattern EQUW &0302: EQUD&2F2E2D2C: EQUW&D1D0 EQUD &1B1A1918: EQUD &B7B6B5B4 EQUD &23222120: EQUD &43424140 EQUD &83828180: EQUD &8B8A8988 EQUD &03020100: EQUD &2F2E2D2C .copy LDR R0,from: LDR R1,to SUB R0,R0,#&14000 LDR R10,endft .loop LDMIA R0!,{R2-R9} STMIA R1!,{R2-R9} CMP R0,R10: BLT loop MOV R15,R14 .endft EQUD &2000000-&18000 ; bodged : .bmeter LDR R0,scrnbutt: LDR R0,[R0]: LDR R4,footd MOV R2,#&1500: ADD R2,R2,#&C8 ADD R0,R2,R0: ADD R0,R0,#&140 MOV R3,#16:.loop LDMIA R4!,{R5-R8,R12} STMIA R0!,{R5-R8}: STR R12,[R0],#320-16 SUBS R3,R3,#1: BNE loop MOV R15,R14 .scrnbutt EQUD scrnbot : ]T2=P%:P%=messcode:[OPT T .chrindex EQUD0 .charaddr EQUD bigcharset .messbase EQUD &D5C0 .totext EQUD thetext .reptext EQUD thetext .t1b1s EQUD base1 .spc MOV R6,#0 ]FORT1=0 TO 15 [OPT T STRB R6,[R2,#&140]! STRB R6,[R2,#1] ]NEXT [OPT T B shift .mpause LDR R3,t1b1s: LDR R3,[R3]: ADD R3,R3,#&15000: LDR R2,messbase LDR R1,t1b1s: LDR R1,[R1]: ADD R2,R2,R1: B inpuse .smapadr EQUD backg+&B00 .smapbase EQUD backg-69*256 .smapbase2 EQUD mapspr .pausing EQUB 0:.pendspc EQUB 0:.doin EQUB &7F: ALIGN .message STMFD R13!,{R14} MOV R0,R15: TEQP R0,#&8<<24 LDRB R0,pausing: SUBS R0,R0,#1: STRCSB R0,pausing: BCS mpause LDR R1,totext: LDRB R4,doin: LDR R2,reptext: CMP R1,R2: MOVEQ R4,#&7F MOV R2,#16 AND R0,R4,#&7F CMP R0,#3: MOVEQ R2,#10: CMPNE R0,#6: CMPNE R0,#4: MOVEQ R2,#8 CMP R0,#4: ORREQ R0,R0,#&7F LDR R0,chrindex ADD R0,R0,#2: CMP R0,R2 MOVEQ R0,#0: STR R0,chrindex: BNE nogetb LDRB R4,pendspc: TST R4,#&80 LDREQB R4,[R1,#1]!: MOVNE R4,#&7F: STRB R4,pendspc .nogetb AND R4,R4,#&7F LDR R8,charaddr LDR R3,t1b1s: LDR R3,[R3] ADD R3,R3,#&15000 MOV R2,R3 \\\\\ .loop CMP R4,#93: CMPNE R4,#92: BEQ stlame CMP R4,#ASC(";")-33: LDREQB R4,[R1,#1]!: LDREQ R9,smapbase2 BEQ wally2 CMP R4,#28: BEQ emphasize CMP R4,#69: BLT over: CMP R4,#ASC("Y"): BGE over LDR R9,smapbase:.wally2 ADD R9,R9,R4,LSL#8: STR R9,smapadr .over2 MOV R4,#&7E:.over CMP R4,#&7E: LDREQB R4,[R1,#1]! STREQB R4,pendspc: ANDEQ R4,R4,#&7F: BEQ loop AND R10,R4,#&7F CMP R10,#ASC("Y"): MOVEQ R4,#50: STREQB R4,pausing: MOVEQ R4,#&7F STREQB R4,doin: STREQ R1,totext: LDMEQFD R13!,{R15}^ STR R1,totext LDRB R10,pendspc: ORR R10,R10,R4: STRB R10,pendspc: AND R4,R4,#&7F STRB R4,doin CMP R4,#4: MOVEQ R4,#&7F CMP R4,#&7F: BEQ spc CMP R4,#31: LDREQ R1,reptext: STREQ R1,totext MOVEQ R4,#&7F: BEQ spc CMP R4,#58 LDR R4,[R8,R4,LSL#2]: ADD R4,R4,R8 MOV R10,#16 LDR R9,smapadr ADD R9,R9,R0: ADDGT R4,R4,R0 BGT directpoke MOVS R0,R0: MOVEQ R5,#0: LDRNEB R5,mescol: LDRNE R4,mespos LDR R1,totabl: MOV R12,#2 .loop TST R5,#&1F: LDREQB R5,[R4],#1: LDRB R6,[R9],#16 SUB R5,R5,#1 ANDS R11,R5,#&E0: MOVEQ R6,#0 CMP R11,#&20: LDREQB R6,[R1,R6]: LDREQB R6,[R1,R6] CMP R11,#&80: MOVEQ R6,#1 CMP R11,#&60: BNE nobirg1 EOR R11,R6,#&FF ADD R6,R6,#2: TST R6,#2: BNE nobirg1: SUB R6,R6,#4 TST R6,#&88: ORREQ R6,R6,#&88 TST R11,#&88: BICEQ R6,R6,#8: ORREQ R6,R6,#3 TST R6,#8: EOR R6,R6,#8: EORNE R6,R6,#&80 TST R6,#&60: ORREQ R6,R6,#&60 TST R11,#&60: BICEQ R6,R6,#&20: ORREQ R6,R6,#3 TST R6,#&20: EOR R6,R6,#&20: EORNE R6,R6,#&40 TST R6,#&14: ORREQ R6,R6,#&14 TST R11,#&14: BICEQ R6,R6,#4: ORREQ R6,R6,#3 TST R6,#4: EOR R6,R6,#&4: EORNE R6,R6,#&10 .nobirg1 STRB R6,[R2,#&140]! SUBS R10,R10,#1: BNE loop SUBS R12,R12,#1: BEQ shire4 SUB R2,R2,#&1400: ADD R2,R2,#1: MOV R10,#16 SUB R9,R9,#256:ADD R9,R9,#1 B loop .shire4 STRB R5,mescol: STR R4,mespos B shift .mescol EQUD 0:.mespos EQUD 0 .totabl EQUD fadetable .directpoke LDRB R6,[R4],#1: STRB R6,[R2,#&140]! LDRB R6,[R4],#15: STRB R6,[R2,#1] SUBS R10,R10,#1: BNE directpoke .shift MOV R12,#16*&140 LDR R1,t1b1s: LDR R1,[R1] LDR R2,messbase ADD R2,R2,R1 LDR R6,[R3],#-4 SUB R4,R3,#4 .loop ]FORT1=0 TO 15:[OPT T LDMIA R3!,{R7,R8,R9,R10} MOV R5,R7,LSR#16 ORR R7,R6,R7,LSL#16 MOV R6,R8,LSR#16 ORR R8,R5,R8,LSL#16 MOV R5,R9,LSR#16 ORR R9,R6,R9,LSL#16 MOV R6,R10,LSR#16 ORR R10,R5,R10,LSL#16 STMIA R4!,{R7,R8,R9,R10} ]NEXT:[OPT T SUBS R12,R12,#256: BPL loop .inpuse MOV R11,#&140*16 ADD R5,R1,#&15000 ADD R9,R2,#&14000 MOV R10,R2 .loop ]FORT1=0 TO 7:[OPT T LDMIA R5!,{R0-R3} LDMIA R9!,{R4,R6-R8} : TST R0,#&FF: BICNE R4,R4,#&FF TST R0,#&FF00: BICNE R4,R4,#&FF00 TST R0,#&FF0000: BICNE R4,R4,#&FF0000 TST R0,#&FF000000: BICNE R4,R4,#&FF000000: ORR R0,R4,R0 : TST R1,#&FF: BICNE R6,R6,#&FF TST R1,#&FF00: BICNE R6,R6,#&FF00 TST R1,#&FF0000: BICNE R6,R6,#&FF0000 TST R1,#&FF000000: BICNE R6,R6,#&FF000000: ORR R1,R6,R1 : TST R2,#&FF: BICNE R7,R7,#&FF TST R2,#&FF00: BICNE R7,R7,#&FF00 TST R2,#&FF0000: BICNE R7,R7,#&FF0000 TST R2,#&FF000000: BICNE R7,R7,#&FF000000: ORR R2,R7,R2 : TST R3,#&FF: BICNE R8,R8,#&FF TST R3,#&FF00: BICNE R8,R8,#&FF00 TST R3,#&FF0000: BICNE R8,R8,#&FF0000 TST R3,#&FF000000: BICNE R8,R8,#&FF000000: ORR R3,R8,R3 STMIA R10!,{R0-R3} ]NEXT [OPT T SUBS R11,R11,#128: BNE loop LDMFD R13!,{R15}^ .endmesscode ]P%=T2:[OPT T .normo LDR R0,bank: STR R0,stbk MOV R0,#&14000: STR R0,bank: B flip .goodbye LDR R0,bank:.goody LDR R1,base1: LDR R2,base2 ADD R11,R1,R0: ADD R11,R11,#&2F80: ADD R12,R2,R0 B clear .timbank2 EQUD bank2 .goodbye2 LDR R0,bank: SUBS R0,R0,#&14000: MOVMI R0,#&28000:B goody .backo LDR R0,stbk: EOR R0,R0,#&14000: STR R0,bank LDR R1,timbank2: STR R0,[R1] .flip LDR R0,bank LDR R1,base1: LDR R2,base2 ADD R1,R1,R0: LDR R11,ascrntopee: STR R1,[R11] ADD R10,R1,#&140: STR R10,[R11,#scrntop2-scrntop] ADD R2,R2,R0: STR R2,[R11,#scrnbot-scrntop] LDR R1,base3 ADD R1,R1,R0: STR R1,[R11,#scrnpnt-scrntop] .infl MOV R11,R0,LSR#16 EOR R10,R0,#&14000 STR R10,bank MOV R0,#&16: ADR R1,bank-1 SWI "OS_Word" ADD R1,R11,#1: MOV R0,#&70 SWI "OS_Byte" MOV R0,#19: SWI "OS_Byte" MOV R15,R14 .ascrntopee EQUD scrntop : .base1 EQUD0:.base2 EQUD0 ; fadeoutlots assumes these consequetive .base3 EQUD 0 EQUD&FFFFFFFF \ for switching .bank EQUD0 .stbk EQUD 0 .flip2 LDR R0,bank: B infl .seeme LDR R11,bank: MOV R11,R11,LSR#16 MOV R0,#&70: ADD R1,R11,#1 B osbyte .swbank LDR R0,bank: EOR R0,R0,#&14000: STR R0,bank: MOV R15,R14 : .delhead1 LDR R11,base1 ADD R11,R11,#&14000: .begon ADD R12,R11,#&2F80 B clear .delhead0 LDR R11,base1: B begon .clear1 LDR R11,base1:ADD R11,R11,#&2F80 LDR R12,base2: ADD R11,R11,#&14000 ADD R12,R12,#&14000: B clear .totalclear LDR R11,base1:ADD R12,R11,#&3C000: B clear .clearall STMFD R13!,{R14} BL vsync LDR R11,base1:ADD R11,R11,#&2F00 LDR R12,base2: ADD R12,R12,#&100 BL clear BL biglogo LDR R11,base1: ADD R11,R11,#&14000 LDR R12,base2: ADD R12,R12,#&14000 ADD R11,R11,#&2F00: ADD R12,R12,#&100 BL clear LDMFD R13!,{R15} : .clearall2 STMFD R13!,{R14} LDR R11,base1:ADD R11,R11,#&2F00 LDR R12,base2: BL clear LDR R11,base1: ADD R11,R11,#&14000 LDR R12,base2: ADD R12,R12,#&14000 ADD R11,R11,#&2F00: BL clear LDMFD R13!,{R15} : .clearaall STMFD R13!,{R14} LDR R11,base1: LDR R12,base2: BL clear LDR R11,base1: ADD R11,R11,#&14000 LDR R12,base2: ADD R12,R12,#&14000 BL clear LDMFD R13!,{R15} .cls LDR R11,scrntop LDR R12,scrnbot B superclear : .ballgo EQUD &2000000 ; bodged .saveh EQUD0 .toadI EQUD I .topntm2 EQUD stupd .toldx EQUD oldxpos2:.tnewxpos EQUD x .tballpnt EQUD ballpnt .oldang EQUD 2*16 .howfar EQUD spd .ftball EQUD fadetable .plotshadow2 LDR R12,sprpnt:.plotmyshad LDR R4,height: MOV R4,R4,ASR#11 LDR R10,ftball CMN R4,#2: MOVLT R15,R14 ADD R4,R4,#&140*23: ADD R4,R4,#2 LDR R0,scrnpnt: ADD R0,R0,R4 ADD R9,R0,#1: ADD R8,R9,#1: ADD R5,R8,#1 MOV R7,#24:.loop2 MOV R6,#20 ADD R9,R0,#1: ADD R8,R9,#1: ADD R5,R8,#1:.loop LDR R11,[R12,R6] TST R11,#&FF: BEQ nodarken0 LDRB R1,[R0,R6] LDRB R1,[R1,R10]: LDRB R1,[R1,R10] STRB R1,[R0,R6] .nodarken0 TST R11,#&FF00: BEQ nodarken1 LDRB R1,[R9,R6] LDRB R1,[R1,R10]: LDRB R1,[R1,R10] STRB R1,[R9,R6] .nodarken1 TST R11,#&FF0000: BEQ nodarken2 LDRB R1,[R8,R6] LDRB R1,[R1,R10]: LDRB R1,[R1,R10] STRB R1,[R8,R6] .nodarken2 TST R11,#&FF000000: BEQ nodarken3 LDRB R1,[R5,R6] LDRB R1,[R1,R10]: LDRB R1,[R1,R10] STRB R1,[R5,R6] .nodarken3 SUBS R6,R6,#4: BPL loop SUB R0,R0,#&140: ADD R12,R12,#24*4: SUBS R7,R7,#4 BNE loop2 MOV R15,R14 .whatB EQUD force .trob EQUD velo .nodor2e STR R0,oldang: MOV R0,R0,LSR#4:RSB R0,R0,R0,LSL#4: B nodor2 .stick LDR R4,height: MOV R4,R4,ASR#9 MVN R5,#&140:ADD R5,R5,#1 LDR R12,scrntop .inseeball LDR R0,sprpnt LDRB R11,frames: MOVS R11,R11: BEQ noanimball LDRB R6,framec: LDR R7,howfar: LDRB R7,[R7]: SUBS R6,R6,R7,LSL#4 ADDMI R0,R0,#&1E0: SUBMIS R11,R11,#1: STRB R11,frames MOVS R11,R11 LDREQ R1,deadman: LDREQB R8,deadbe: STREQB R8,[R1] STRB R6,framec: STRNE R0,sprpnt CMPEQ R8,#1: LDREQ R1,oldpnt: STREQ R1,sprpnt .noanimball LDR R1,tballpnt: LDR R1,[R1]: CMP R1,R0: BNE nodor: MOV R8,R0 LDR R10,toldx: LDR R1,[R10,#oldxpos3-oldxpos2]: LDR R10,[R10] SUB R0,R1,R10: LDR R9,whatB: MOV R0,R0,ASR#2 LDR R9,[R9]: ADD R0,R0,R9,LSL#5 ADDS R0,R0,#72 MOVMI R0,#0: CMP R0,#128: MOVGT R0,#128 LDR R1,oldang: LDR R9,howfar: LDR R9,[R9] ADD R10,R1,R9: CMP R10,R0: MOVLT R0,R10 SUB R10,R1,R9: CMP R10,R0: MOVGT R0,R10 CMP R0,#72: MOVGT R1,#1: MVNLT R1,#0: MOVEQ R1,#0 STR R0,oldang: MOV R0,R0,LSR#4:RSB R0,R0,R0,LSL#4 LDR R9,trob: LDR R9,[R9]: CMN R9,#&1000: MOVGT R1,#0 CMN R9,#&200000: MOVLT R1,R1,LSL#1 LDR R2,dir: MULS R9,R2,R1: MOVMI R1,#0: STR R1,dir MOVS R1,R1: RSBMI R1,R1,#0: BEQ nodor2: CMP R1,#1 BLE halfrev ADD R0,R0,#&1B0: ADD R0,R0,#&3: B nodor2 .initball LDR R0,oldpnt: STR R0,sprpnt: MOV R15,R14 .plotshadow LDR R0,nocansee: MOVS R0,R0: BEQ plotshadow2 CMP R0,#&600: MOVGT R15,R14 CMP R0,#100: BLT fakeshad: CMP R0,#400: BGT fakeshad: MOV R15,R14 .comebackball MOV R0,#0: B storegob .dir EQUD 0 .nocansee EQUD 0 .goingaway LDR R1,nocansee: CMP R1,#1000: MOV R15,R14 .invisiball STMFD R13!,{R0-R1,R14}: BL ivball2: CMP R0,#&1F0 MOV R0,#3: MOV R1,#20: BLGT doeffect LDMFD R13!,{R0-R1,R15} .ivball2 LDR R0,nocansee: CMP R0,#100: RSBLT R0,R0,#500 BLT storegob: CMP R0,#400: MOVLT R0,#400 .storegob STR R0,nocansee: MOV R15,R14 .invisigo LDR R1,nocansee: SUBS R1,R1,R0: MOVMI R1,#0 STR R1,nocansee: MOV R15,R14 .halfrev SUBS R0,R0,#15*2: MOVMI R0,#0 CMP R0,#15*5: MOVGE R0,#15*4 ADD R0,R0,#&230: ADD R0,R0,#10 .nodor2 ADD R0,R8,R0,LSL#5 .nodor LDR R1,scrnpnt LDR R10,scrnbot MLA R1,R4,R5,R1 STR R1,ballgo ADD R1,R1,#&280 SUB R9,R10,#&280 LDR R3,toadI: LDR R4,topntm2: LDR R3,[R3]: LDR R4,[R4] MOV R3,R3,ASR#8: LDR R3,[R4,R3,LSL#1]: BIC R3,R3,#&FF000000 BIC R3,R3,#&FF0000: CMP R3,#&FF00: MOVEQ R9,R10 LDR R2,nocansee: CMP R2,#1024: BGT intostore MOVS R2,R2: BNE invisifx MOV R4,#&140-&18 .intofakeb LDR R2,tintgot: MOVS R2,R2: MOV R2,#20 BNE drawtinted .loop MOV R3,#24 CMP R1,R12: ADDLT R1,R1,#&140:ADDLT R0,R0,#24:BLT orange CMP R1,R9: BGT gobehind LDR R12,remap .loop2 ] FORT2=0 TO 7:[OPT T LDRB R5,[R0],#1 CMP R5,#&F7: LDRGTB R5,[R12,R5] MOVS R5,R5:STRNEB R5,[R1],#1 ADDEQ R1,R1,#1 ]NEXT [OPT T SUBS R3,R3,#8: BNE loop2 ADD R1,R1,R4 .orange SUBS R2,R2,#1:BNE loop .orange3 LDR R0,ballgo LDR R12,scrntop B jetcode .intostore LDR R1,fakebuf: MOV R12,#24*20: MOV R4,#0 .loop2 STR R4,[R1],#4: SUBS R12,R12,#4: BNE loop2 SUB R1,R1,#24 SUB R12,R1,#&7000: MVN R4,#47: B intofakeb .fakebuf EQUD bigwaste+6000 .gobehind .loop2 CMP R1,R10: BGE flamesee LDRB R5,[R0],#1 CMP R5,#&F7: LDRGTB R5,[R12,R5] LDRB R11,[R1],#1: MOVS R11,R11 STREQB R5,[R1,#-1] SUBS R3,R3,#1: BNE loop2 ADD R1,R1,R4 SUBS R2,R2,#1:BNE loop .flamesee LDR R0,ballgo LDR R12,scrntop B flsee .tintgot EQUD 0 : .remap EQUD0 .sprpnt EQUD ball .frames EQUB 0:.framec EQUB0:.deadbe EQUW 0 .oldpnt EQUD 0 .deadman EQUD dead .scrnpnt EQUD &2000000-&140*16+160-12 ; bodged .save1 EQUD0 EQUDb%:EQUDa%:EQUDb%:EQUDa% EQUDb%:EQUDa%:EQUDb%:EQUDa% EQUD0:EQUD&AAAA:EQUD0:EQUD&7F00000 .bogey EQUDa% EQUDb%:EQUDa%:EQUDb% EQUDa%:EQUDb%:EQUDa%:EQUDb% EQUD 0:EQUD&AAAA EQUD 0:EQUD&4000000 .bogey2 EQUDb% EQUDa%:EQUDb%:EQUDa% EQUDb%:EQUDa%:EQUDb%:EQUDa% EQUD0:EQUD&AAAA EQUD0: EQUD&4000000 .bogey3 EQUDa% EQUDb%:EQUDa%:EQUDb% EQUDa%:EQUDb%:EQUDa%:EQUDb% EQUD 0:EQUD&AAAA EQUD0: EQUD&4000000 : .constant EQUD0 .ofsetus EQUD &600000 .ofsetac EQUD 0 .bigpnt EQUD bigtable .eqlot ADDEQ R9,R9,R10,ASR#17:ORR R10,R10,#&FF000000 ADD R9,R9,#1: ORR R10,R10,#&FE0000 BEQ fine .stupd EQUD 0 .arm3ornotq EQUD cache .offlft CMP R10,R8,LSL#17 ADDLT R9,R9,R10,LSR#17: ANDLT R10,R10,#&1FC00 BLT fine SUB R10,R10,R8,LSL#17: MOV R9,R2: B noworry FNalignme(0) .updatescr STMFD R13!,{R14} LDR R2,ofsetus: LDR R1,ofsetac SUB R2,R2,#&600000:.loop ADD R1,R1,R2,ASR#2: SUB R2,R2,R1,ASR#3 SUB R2,R2,R2,ASR#3 ADDS R2,R2,#&600000: MOVMI R2,#0 STR R2,ofsetus: STR R1,ofsetac STR R13,stackgo \ 00 - 1C - colour map \ 20 - Curve (to right) \ 24 - dw/dy \ 28 -absolute gradient \ 2C -tile length BL res1632 LDR R0,mapptr LDR R1,index: LDR R2,ofsetus: ADD R1,R1,R2 .loop LDR R2,[R0,#&2C]: CMP R1,R2: SUBGT R1,R1,R2 SUBGT R0,R0,#48: BGT loop STR R0,stupd LDR R3,tinfo2:.loop LDR R2,[R3] CMP R0,R2:.loopA ADDHI R3,R3,#&2C: BHI loop: STR R3,tinfo LDR R4,[R3]: BIC R2,R4,#&FF<<24: BIC R2,R2,#&F<<20 CMP R2,R0: MVNHI R4,#0: STR R4,overme: BHI noxyzhire ADDNE R3,R3,#&2C: BNE loop EOR R2,R2,R4: CMP R2,R1: BHI loopA:.noxyzhire LDR R2,scrnbot SUB R2,R2,#&140 STR R1,lengthd LDR R3,x LDR R4,dy: STR R4,dyatstart LDR R5,bt STMFD R13!,{R0-R12}: BL curvedash: LDMFD R13!,{R0-R12} MOV R13,#0 \ height on screen \ R14- Scratch LDR R10,arm3ornotq: LDR R10,[R10]: MOVS R10,R10: BNE arm3updatescr .loop LDR R10,scrnbot CMP R2,R10: BGE row2 SUB R11,R3,R5,LSL#2 ADD R9,R2,R11,ASR#16 BIC R14,R11,#&FF000000: BIC R14,R14,#&FF0000 ADD R10,R5,R14,LSL#1 STR R4,save1 LDR R8,scrntop2: CMP R9,R8: BLT end ;;;;;;;; was rowdone MOV R6,#31 ADD R4,R2,#&140: SUB R4,R4,#1 .loop2 LDRB R7,[R0,R6]: CMP R7,#&FF:.whichbigsprite MOV R0,R0 .notabigsp SUB R6,R6,#1: LDRB R7,[R0,R6] .updateloop4 .loop4 SUB R6,R6,#1: LDRB R8,[R0,R6] SUBS R6,R6,#1 CMPCS R8,#&FF: LDRCSB R8,[R0,R6] CMPCS R8,R7 ADDEQ R10,R10,R5: BEQ loop4 MOVS R7,R7: BEQ eqlot SUBS R8,R4,R9: BMI rowdone:CMP R10,R8,LSL#17 MOVGT R10,R8,LSL#17:MVNGT R6,#10 SUBS R8,R2,R9:BCS offlft .noworry CMP R13,#0: BNE docheck CMP R10,#&120000: BLT bytefill .updatenw2 ANDS R14,R9,#3: RSBNE R14,R14,#4: RSBS R8,R14,#3: ADD R15,R15,R8,LSL#2 MOV R0,R0 STRB R7,[R9],#1 STRB R7,[R9],#1 STRB R7,[R9],#1 SUB R10,R10,R14,LSL#17 .word ORR R7,R7,R7,LSL#8: ORR R7,R7,R7,LSL#16 MOV R8,R7 ADD R14,R10,#&20000 MOV R14,R14,ASR#19: SUB R10,R10,R14,LSL#19 RSB R14,R14,#81: ADD R15,R15,R14,LSL#1 ]FORT2=0 TO 40:[OPT T:STMIA R9!,{R7,R8} ]NEXT:[OPT T TST R14,#1: STREQ R7,[R9],#4 .bytefill MOVS R10,R10: BMI fine .here ADD R8,R10,#&20000 MOV R8,R8,LSR#17: SUB R10,R10,R8,LSL#17: RSB R14,R8,#9 ADD R15,R15,R14,LSL#2:MOV R0,R0 ]FORT2=0 TO 8:[OPT T:STRB R7,[R9],#1 ]NEXT [OPT T .fine ADDS R6,R6,#1 ADD R10,R10,R5 BLT rowdone ; loop2 copy LDRB R7,[R0,R6]: CMP R7,#&FF:.whichbigsprite2 MOV R0,R0 SUB R6,R6,#1: LDRB R7,[R0,R6] SUB R6,R6,#1: LDRB R8,[R0,R6] SUBS R6,R6,#1 CMPCS R8,#&FF: LDRCSB R8,[R0,R6] CMPCS R8,R7 ADDEQ R10,R10,R5: BEQ updateloop4 MOVS R7,R7: BEQ eqlot SUBS R8,R4,R9: BMI rowdone: CMP R10,R8,LSL#17 MOVGT R10,R8,LSL#17: MVNGT R6,#10 SUBS R8,R2,R9:BCS offlft CMP R13,#0: BNE docheck CMP R10,#&120000: BLT bytefill B updatenw2 .rowdone LDR R4,save1 :.row2 MOV R10,R5,LSR#15 LDR R8,bigpnt LDR R8,[R8,R10,LSL#2] LDR R10,[R0,#&20] MOV R8,R8,LSR#18 MLA R4,R8,R10,R4 MOV R6,R4,ASR#8 LDR R10,[R0,#&24] MOVS R8,R10,ASR#8:RSBMI R8,R8,#0 MOV R7,R3: MLANE R3,R6,R8,R3 ;MOVPL R6,R10: ;RSBMI R6,R10,#0 STR R5,st1 SUBPL R5,R5,R10: ADDMI R5,R5,R10 CMP R5,#&80000 BLT update2 MOVS R10,R10 SUBPL R2,R2,#&140 ADDMI R2,R2,#&140 SUBPLS R13,R13,#1 ADDMI R13,R13,#1 MOV R8,R5,LSR#16 LDR R10,bigpnt LDR R6,[R10,R8,LSL#2] SUB R1,R1,R6 LDR R8,overme: CMP R8,R1: CMNGT R8,#1: BGT gottadoanxyz .justdidxyz CMP R1,#0: BGE loop .loop2 LDR R4,dyatstart: MOV R8,#210 LDR R11,[R0,#&20]: MOV R11,R11,ASR#6: MUL R11,R8,R11: LDR R8,lengthd MOV R8,R8,LSR#21: MLA R4,R8,R11,R4: STR R4,dyatstart LDR R8,[R0,#92]: STR R8,lengthd MOVS R8,R8 LDREQ R0,gbogeee MOVEQ R8,#&4000000 ADDNE R0,R0,#48 ADD R1,R1,R8 LDR R10,gbogeee3 CMP R10,R0: SUBEQ R0,R10,#bogey3-bogey LDR R10,tinfo: LDR R8,[R10]: BIC R11,R8,#&FF<<24 BIC R11,R11,#&F<<20 CMP R0,R11: MVNNE R8,#0: STR R8,overme MOVS R1,R1:BMI loop2: B loop .gbogeee3 EQUD bogey3 : .aloop3 LDR R11,[R10]: CMP R11,R1: STRMI R11,overme: BMI nopexyz B dontreloadR10 .gottadoanxyz LDR R10,tinfo STR R6,st2 STR R8,st8: STR R7,st7 .dontreloadR10 ; R8 is 'overme' RSB R9,R1,R8: MOV R8,R6,LSR#8:LDR R6,stackgo STR R2,[R10,#&10]: ADD R10,R10,#&2C BL dividetwo \ R11=R9/R8 RSB R9,R11,#256: LDR R6,st1: MUL R6,R11,R6: MLA R6,R9,R5,R6 MOV R6,R6,ASR#8: ORR R14,R6,R9,LSL#24: STR R14,[R10,#-&18] MOV R14,R3,ASR#4: MOV R7,R7,ASR#4 MUL R14,R9,R14: MLA R14,R7,R11,R14 MOV R14,R14,ASR#4 SUB R11,R14,R6,LSL#2 ;;;;;; why!!!!!!!!!!!??? STR R11,[R10,#-8] LDR R8,st8: LDR R7,st7 LDR R6,st2: LDR R11,[R10]: BIC R11,R11,#&FF<<24: BIC R11,R11,#&F<<20 CMP R0,R11: MVN R11,#0: STR R11,overme: BEQ aloop3 MVN R11,#0: STR R11,overme .nopexyz STR R10,tinfo LDR R10,[R0,#&24] B justdidxyz .gbogeee EQUD bogey .st1 EQUD 0 .st2 EQUD 0 .st8 EQUD 0:.st7 EQUD 0 .lengthd EQUD 0:.dyatstart EQUD 0 .overme EQUD -1 : .tinfo EQUD 0:.tinfo2 EQUD xyzinfo \ Update2 Code follows .loop LDR R10,scrnbot SUB R10,R10,#&140: CMP R2,R10: BGE row3 SUB R11,R3,R5,LSL#2 ADD R9,R2,R11,ASR#16 LDR R8,scrntop: ADD R8,R8,#&140: CMP R9,R8: BLT end ;;;; was row3 BIC R14,R11,#&FF000000: BIC R14,R14,#&FF0000 ADD R10,R5,R14,LSL#1 STR R4,save1 MOV R6,#31 ADD R4,R2,#&140 SUB R4,R4,#1 .loop2 LDRB R7,[R0,R6]: CMP R7,#&FF: BNE bigsprite2 .notabigs2 SUB R6,R6,#1: LDRB R7,[R0,R6] .realloop4:.loop4 SUBS R6,R6,#1: LDRB R8,[R0,R6] SUBS R6,R6,#1:CMPCS R8,#&FF LDRCSB R8,[R0,R6]: CMPCS R8,R7 ADDEQ R10,R10,R5: BEQ loop4 MOVS R7,R7: BEQ cleq CMP R10,#0:BLT fine2 .maycheck3 CMP R13,#0: BNE check CMP R9,R2:.loop3 ADDLT R9,R9,#1: SUBLTS R10,R10,#&20000: BLT fine2 CMP R9,R2: BLT loop3 .loop3 CMP R4,R9: STRGEB R7,[R9],#1 SUBS R10,R10,#&20000: BMI fine2 CMP R9,R4: BGT rowdone2: STRLEB R7,[R9],#1 .here2 SUBS R10,R10,#&20000 BPL loop3 .fine2 ADDS R6,R6,#1: BLT rowdone2 ADDS R10,R10,R5 BPL loop2:.loop5 SUBS R6,R6,#2: BMI rowdone2 ADDS R10,R10,R5: BMI loop5 LDRB R7,[R0,R6]: CMP R7,#&FF: BNE bigsprite2 SUB R6,R6,#1: LDRB R7,[R0,R6] SUBS R6,R6,#1: LDRB R8,[R0,R6] SUBS R6,R6,#1:CMPCS R8,#&FF LDRCSB R8,[R0,R6]: CMPCS R8,R7 ADDEQ R10,R10,R5: BEQ loop4 CMP R10,#0: BLT fine2 MOVS R7,R7: BNE maycheck3 .cleq ADD R9,R9,R10,ASR#17:ADD R9,R9,#1: ORR R10,R10,#&FF000000 ORR R10,R10,#&FE0000 ADDS R6,R6,#1: BLT rowdone2 ADDS R10,R10,R5: BPL loop2 .loop5 SUBS R6,R6,#2: BMI rowdone2 ADDS R10,R10,R5: BMI loop5 LDRB R7,[R0,R6]: CMP R7,#&FF: BNE bigsprite2: B notabigs2 .check LDRB R8,[R9],#1 MOVS R8,R8 STREQB R7,[R9,#-1] SUBS R10,R10,#&20000 BPL check ADDS R6,R6,#1: BLT rowdone2 ADDS R10,R10,R5: BMI loop5 LDRB R7,[R0,R6]: CMP R7,#&FF: BNE bigsprite2 B notabigs2 : .rowdone2 LDR R4,save1 :.row3 MOV R10,R5,LSR#15 LDR R8,bigpnt LDR R8,[R8,R10,LSL#2] MOV R8,R8,LSR#18 LDR R10,[R0,#&20] MLA R4,R8,R10,R4 MOV R6,R4,ASR#8 LDR R10,[R0,#&24] MOVS R8,R10,ASR#8:RSBMI R8,R8,#0 MOV R7,R3: MLA R3,R6,R8,R3 MOVPL R6,R10: RSBMI R6,R10,#0 STR R5,st1: SUBS R5,R5,R6 BMI end .update2 MOVS R10,R10 SUBPL R2,R2,#&140 ADDMI R2,R2,#&140 SUBPLS R13,R13,#1 ADDMI R13,R13,#1 MOV R8,R5,LSR#16 LDR R10,bigpnt LDR R6,[R10,R8,LSL#2] SUB R1,R1,R6 LDR R8,overme: CMP R8,R1: CMNGT R8,#1: BGT gottadoasmxyz .justdidsmxyz CMP R1,#0: BGE loop .loop2 LDR R4,dyatstart: MOV R8,#210 LDR R11,[R0,#&20]: MOV R11,R11,ASR#6: MUL R11,R8,R11: LDR R8,lengthd MOV R8,R8,LSR#21: MLA R4,R8,R11,R4: STR R4,dyatstart LDR R8,[R0,#92]: STR R8,lengthd MOVS R8,R8 LDREQ R0,tbog MOVEQ R8,#&4000000 ADDNE R0,R0,#48 ADD R1,R1,R8 LDR R10,tbog3 CMP R10,R0: SUBEQ R0,R10,#bogey3-bogey LDR R10,tinfo: LDR R8,[R10]: BIC R11,R8,#&FF<<24 BIC R11,R11,#&F<<20 CMP R0,R11: MVNNE R8,#0: STR R8,overme MOVS R1,R1:BMI loop2: B loop : .aloop3 LDR R11,[R10]: CMP R11,R1: STRMI R11,overme: BMI nopesmxyz B dontreloadsm10 .gottadoasmxyz LDR R10,tinfo STR R8,st8: STR R7,st7: STR R6,st2 .dontreloadsm10 RSB R9,R1,R8: MOV R8,R6,LSR#8:LDR R6,stackgo STR R2,[R10,#&10]: BL dividetwo RSB R9,R11,#256: LDR R6,st1: MUL R6,R11,R6: MLA R6,R9,R5,R6 MOV R6,R6,ASR#8: STR R6,[R10,#&14] MOV R7,R7,ASR#8: MOV R14,R3,ASR#8 MUL R14,R9,R14: MLA R14,R7,R11,R14 SUB R11,R14,R6,LSL#2:STR R11,[R10,#&24] LDR R8,st8: LDR R7,st7: LDR R6,st2 LDR R11,[R10,#&2C]!: BIC R11,R11,#&FF<<24: BIC R11,R11,#&F<<20 CMP R0,R11: MVN R11,#0: STR R11,overme: BEQ aloop3 MVN R11,#0: STR R11,overme .nopesmxyz STR R10,tinfo LDR R10,[R0,#&24] B justdidsmxyz .tbog EQUD bogey .tbog3 EQUD bogey3 .ohdear ANDS R14,R8,#&FF000000: STREQB R7,[R9,#-1] ANDS R14,R8,#&FF0000: STREQB R7,[R9,#-2] ANDS R14,R8,#&FF00: STREQB R7,[R9,#-3] ANDS R14,R8,#&FF: STREQB R7,[R9,#-4] SUBS R10,R10,#&80000 CMP R10,#&80000: BGT wordech2 .loop3 LDRB R8,[R9],#1 MOVS R8,R8 STREQB R7,[R9,#-1] SUBS R10,R10,#&20000 BPL loop3: B fine .docheck CMP R10,#&120000: BLT bytechfil ANDS R14,R9,#3: BEQ wordech .loopA LDRB R8,[R9],#1 MOVS R8,R8 STREQB R7,[R9,#-1] SUBS R10,R10,#&20000 ANDS R14,R9,#3: BNE loopA .wordech ORR R7,R7,R7,LSL#8: ORR R7,R7,R7,LSL#16 .wordech2 MOV R14,R7:MOV R8,R7:.loop4 LDR R8,[R9],#4 MOVS R8,R8 BNE ohdear STR R7,[R9,#-4] SUB R10,R10,#&80000 CMP R10,#&80000: BGT loop4 .bytechfil .loop3 LDRB R8,[R9],#1 MOVS R8,R8 STREQB R7,[R9,#-1] SUBS R10,R10,#&20000 BPL loop3: B fine : .end LDR R13,stackgo:LDMFD R13!,{R14}: B bodgskid : .stackgo EQUD0 .dy EQUD0 .mapst EQUD map .mapptr EQUD mapcopy .index EQUD&4000000 .speed EQUD-&1000000 .mask EQUD&3FFFFFF .scrntop2 EQUD 0 .scrntop EQUD&1FFFD80-&28000 ; bodged .scrnbot EQUD&1FFFFFF-&14000 ; bodged .x EQUD200*&10000 .bt EQUD 1+200/4*&10000 .index2 EQUD &140*14+12 .height EQUD 0 .oldtop EQUD0 : .doblinded LDR R11,scrntop: LDR R12,scrnbot: B blinded .enablestarirq EQUD0 .tobankh EQUD bank2 .Hz50stars MOV R1,#1:.star5 STR R1,enablestarirq .stopstars MOV R0,#0: STR R0,axstars: MOV R15,R14 .No50stars MOV R1,#0: B star5 .is1FC00 EQUD &1FC0000 ; bodged .dostars STMFD R13!,{R14} MOV R4,#1 ; never clear stars LDR R5,scrntop: LDR R14,ax: B instars .starswere EQUD 0 .dispbank EQUD 0 .starsadj2 EQUD 0 .irqstars LDR R0,enablestarirq: MOVS R0,R0: MOVEQ R15,R14 STMFD R13!,{R14} MOV R0,#&16: LDR R2,tobankh LDR R9,[R2]: STR R9,dispbank LDR R14,starswere: LDR R5,is1FC00: SUB R14,R14,R5 CMP R14,R9: BEQ nobanksw MOV R9,R15 ORR R8,R9,#3 TEQP R8,#0 SUB R1,R2,#1 STMFD R13!,{R14} .nooswordis SWI "OS_Word" LDMFD R13!,{R14} TEQP R9,#0 .nobanksw LDR R5,tobankh: LDR R5,[R5]: LDR R14,is1FC00: ADD R5,R5,R14 LDR R14,starswere: STR R5,starswere: SUBS R4,R5,R14 LDR R14,axstars: RSB R14,R14,#0 LDR R7,starsadj2: MOV R0,#0: STR R0,starsadj2 ADD R14,R7,R14,LSL#1 BNE instars: MOVS R14,R14: LDMEQFD R13!,{R15} .instars MOV R7,#0 LDR R0,startab ADR R11,startable MOV R14,R14,ASR#8 MOV R3,#160: MOV R8,#&140 ADD R8,R8,#&1FF-&140 .loop LDMIA R0,{R2,R6,R9,R12} MLA R10,R9,R14,R2 MOVS R4,R4: STREQB R4,[R12] STR R10,[R0],#16 AND R10,R8,R10,ASR#16 CMP R10,#&140: ADRGE R6,starzero: BGE donxt2 LDRB R9,[R11,R3,LSR#4] ADDLT R6,R6,R6,LSL#2: ADDLT R6,R5,R6,LSL#6 LDRB R1,[R6,R10]! MOVS R1,R1: STREQB R9,[R6] ADRNE R6,starzero:.donxt2 STR R6,[R0,#-4] SUBS R3,R3,#2: BNE loop STR R12,oldtop LDMFD R13!,{R15} .startable EQUD&D02EC880:EQUD&2D2C2F2D EQUD&F42E1110:EQUD&77F4F52F EQUD&F42E1110 .startab EQUD starmap .ax EQUD0 .axstars EQUD 0 .stopstars MOV R0,#0: STR R0,axstars: MOV R15,R14 .starzero EQUD 1 ; used to blank invisible stars : .dbar LDR R0,dbase LDR R1,scrnbot ADD R0,R0,R1 ADD R10,R0,#&3C0 ADD R10,R10,#&1B:LDR R5,xa MOV R6,#&10 MOV R12,#16 SUB R8,R10,#8: MOV R7,#2:.loop STRB R7,[R8],#1 STRB R7,[R8],#1: SUBS R12,R12,#2: BNE loop CMP R5,#0: BEQ finit: BMI backw CMP R5,#&4800*8: MOVGT R5,#&4800*8 .loop STRB R6,[R10],#-1 SUB R12,R12,#1 SUBS R5,R5,#&4800: BCS loop .finit MOV R6,#&06 STRB R6,[R10],#-1 MOV R15,R14 .backw CMN R5,#&4800*8: MVNLT R5,#&4800*8: ADDLT R5,R5,#1 STRB R6,[R10],#1 SUB R12,R12,#1 ADDS R5,R5,#&4800: BMI backw MOV R6,#&06 STRB R6,[R10],#1 MOV R15,R14 .xa EQUD0 : .dopow MOV R3,#24 LDR R0,pbase LDR R1,scrnbot ADD R0,R0,R1 LDR R2,power MOV R4,#16: .loop STRB R3,[R0],#-&140 SUBS R2,R2,#&380000 MOVCC R3,#68 STRB R3,[R0],#-&140 SUBS R2,R2,#&380000 MOVCC R3,#68 SUBS R4,R4,#2:BNE loop MOV R15,R14 .pbase EQUD&140*29+&B8-76+&3C0 .dbase EQUD&140*24+&E0-76+&3C0 .vel EQUD0:.power EQUD0 .colmapm EQUB 255:EQUB253:EQUB211:EQUB0 EQUB 20:EQUB20:ALIGN : .niceOs STMFD R13!,{R0-R12,R14} ADR R11,colmapm-1 LDR R1,carriagem: ADD R2,R1,#8: STR R2,carriagem MOVS R2,R0,LSL#24: LDMMIFD R13!,{R0-R12,R15}^ LDR R2,scrntop: BL doso LDMFD R13!,{R0-R12,R15}^ .tbase1agn EQUD base1 .Dmtext \ R0 = char ADR R11,colmapm-1 LDR R1,carriagem CMP R0,#127-33: SUBEQ R1,R1,#4 ADD R2,R1,#8: STR R2,carriagem MOVEQ R15,R14 CMP R0,#165-33: MOVEQ R0,#0 CMP R0,#164-33: MOVEQ R0,#127-33 MOVS R2,R0,LSL#24: MOVMI R15,R14 LDR R2,tbase1agn LDR R3,[R2,#bank-base1]: LDR R2,[R2] ADD R2,R2,R3:.doso ADD R1,R2,R1 LDR R3,mtxtpnt MOV R10,#&F ADD R2,R3,R0,LSL#5 ADD R2,R2,R0,LSL#4 ADD R2,R2,R0,LSL#1 MOV R3,#10: .loop MOV R4,#5: .loop2 LDRB R7,[R2],#1 ANDS R5,R10,R7,LSR#4 LDRNEB R6,[R11,R5] STRNEB R6,[R1],#1: ADDEQ R1,R1,#1 ANDS R5,R10,R7 LDRNEB R6,[R11,R5] STRNEB R6,[R1],#1: ADDEQ R1,R1,#1 SUBS R4,R4,#1: BNE loop2 ADD R1,R1,#&138: SUB R1,R1,#2 SUBS R3,R3,#1: BNE loop MOV R15,R14 : .commentB STR R2,colmapm: STR R3,carriage: B commentA .acomment LDR R2,carriage ADD R2,R2,#3: STR R2,carriage: B dcomment .comment STR R2,colmapm: STR R3,carriage .dcomment \ R0 = Comment no. MOVS R1,R1: MOVPL R1,R0 ADD R1,R1,#150 .commentA STMFD R13!,{R14} LDR R2,comptr .loop SUBS R0,R0,#1: BMI outwidit .loop2 LDRB R3,[R2],#1 CMP R3,#&FF: BNE loop2 B loop .outwidit LDR R4,carriage: CMP R4,R1: BLT okr ADD R1,R1,#&780:SUB R4,R1,#150: STR R4,carriage .okr LDRB R0,[R2],#1 CMP R0,#&FF LDMEQFD R13!,{R15} BL owncolz: B outwidit .comptr EQUD comments .norm EQUD&22200201 .tmod EQUD mode .ocs66 MOV R0,#66 .owncolz STMFD R13!,{R0-R6,R10,R14} ADR R10,colmapm B intxt .smspc MOV R0,#66: B smtxt .chkmdetxt CMP R12,R8,LSR#1: MOVEQ R0,#61: ADD R8,R8,#1 LDR R2,tmod: LDR R2,[R2]: CMP R2,#13: BEQ Dutext MOV R15,R14 .smtxt \ R1 =carriage, R10 to colmap STMFD R13!,{R14} ADD R3,R1,#4 STR R3,carriage LDR R4,g1bs1: LDR R4,[R4]: ADD R4,R4,#&20000: ADD R4,R4,#&580 ADD R1,R4,R1,LSL#1 LDR R2,utxtpnt ADD R2,R2,R0,LSL#2: ADD R2,R2,R0 MOV R4,#5:.loop LDRB R14,[R2],#1 MOV R5,#3:.loop2 AND R3,R14,#3:LDRB R3,[R10,R3]:CMP R3,#&F7: ADDEQ R1,R1,#2 MOV R14,R14,ASR#2 STRNEB R3,[R1],#1:STRNEB R3,[R1],#1 SUBS R5,R5,#1: BPL loop2: ADD R1,R1,#&278 SUBS R4,R4,#1:BNE loop LDR R1,carriage LDMFD R13!,{R15} .g1bs1 EQUD base1 .stcar STR R0,carriage:.stcol STR R1,colmapm: MOV R15,R14 .stcar2 STR R7,carriage: MOV R15,R14 .rdcar LDR R6,carriage: MOV R15,R14 .normic EQUD &D02F2E2C .blankspc LDR R1,carriage: ADD R1,R1,#4:.putca STR R1,carriage: MOV R15,R14 .bckspc LDR R1,carriage: SUB R1,R1,#4: B putca .Dutext66 MOV R0,#66 .Dutext2 STMFD R13!,{R0-R6,R10,R14}: ADR R10,colmapm: B intxt .blackline STMFD R13!,{R1,R4,R5,R14} LDR R1,carriage:LDR R4,scrnbot: ADD R1,R1,R4: SUB R1,R1,#1 B blackout .Dutext \ R0 = char STMFD R13!,{R0-R6,R10,R14} ADR R10,colmapm LDR R1,norm: STR R1,[R10] .intxt LDR R1,carriage ADD R3,R1,#4 STR R3,carriage LDR R4,scrnbot ADD R1,R1,R4 STR R1,wrbck LDR R2,utxtpnt ADD R2,R2,R0,LSL#2: ADD R2,R2,R0 MOV R14,#&FF LDR R10,[R10]: MOV R5,#3*8: TST R1,#3: BEQ happytext ]:FORT2=0 TO 4:[OPT T LDRB R0,[R2],#1 AND R6,R5,R0,LSR#6-3 AND R6,R14,R10,LSR R6 STRB R6,[R1,#3] AND R3,R5,R0,LSR#4-3 AND R3,R14,R10,LSR R3 STRB R3,[R1,#2] AND R6,R5,R0,LSL#1 AND R6,R14,R10,LSR R6 STRB R6,[R1,#1] AND R3,R5,R0,LSL#3 AND R3,R14,R10,LSR R3 STRB R3,[R1],#320 ]NEXT:[OPT T LDMFD R13!,{R0-R6,R10,R15} .wrbck EQUD 0 : .carriage EQUD &10000 .carriagem EQUD&8000 .mtxtpnt EQUD mtext .utxtpnt EQUD utext .securetxt MOV R1,#0: B easytxt .asctxt MOV R1,#1 .easytxt \ call; bl easytxt, addr.,colmap.,text,00,align \ R1=42, replace chars with * \ R1=0, dont sub 33 BIC R12,R14,#&FC000003 LDR R0,[R12],#4: STR R0,carriagem LDR R0,[R12],#3: STR R0,colmapm .loop LDRB R0,[R12,#1]! MOVS R0,R0: BICEQ R14,R12,#3: ADDEQ R15,R14,#4 CMP R1,#42: BNE norepl: MOVS R0,R0: CMPNE R0,#ASC("_") CMPNE R0,#ASC("#"): CMPNE R0,#32: MOVNE R0,R1:.norepl MOVS R1,R1: SUBNE R0,R0,#33 BL niceDm: B loop : .encrypttxt BIC R12,R14,#&FC000003 LDR R0,[R12],#4: STR R0,carriagem LDR R0,[R12],#3: STR R0,colmapm MOV R11,#&7E:.loop LDRB R0,[R12,#1]!: ADD R0,R0,R11 EOR R11,R11,R11,LSL#5: EOR R11,R11,R11,ASR#4 ANDS R0,R0,#&FF: SUBNE R0,R0,#33: BLNE niceDm BNE loop: BIC R14,R12,#3: ADD R15,R14,#4 : .dscore LDR R0,scbase STR R0,carriage LDR R5,score ADR R6,scores LDMIA R6,{R1,R2,R3} STMIA R6,{R2,R3,R5} CMP R1,R5: MOVEQ R15,R14 ADR R6,divtabl: MOV R10,#8 B outnum .scoreR0 STR R0,score: MOV R15,R14 .scores EQUD 6: EQUD 6: EQUD 6 .score EQUD0 .scbase EQUD&1A44+223+&3C0 .chbase EQUD&1A6B+223+&3C0 .spbase EQUD&1273-76+&3C0 .spdtestfl EQUD 0 .incscoreR0 LDR R1,score: ADD R1,R1,R0: STR R1,score MOV R15,R14 : .initcsh MVN R0,#66: STR R0,cashool: STR R0,cashool+4 STR R0,scores: STR R0,scores+4: STR R0,scores+8 STR R0,cashool+8: LDRB R0,spdtestfl: MOVS R0,R0 MOVNE R0,#3: STRB R0,spdtestfl2: B initspeedo : .initcsh2 MOV R5,#3: STRB R5,spdtestfl2: B stopfix : .dcash2 LDR R1,spdtestfl:.ishertz LDR R3,cashool+8: LDR R0,cashool+4: STR R0,cashool+8 LDR R0,cashool: STR R0,cashool+4 MOVS R1,R1: MVNNE R3,#44 LDR R0,chbase STR R0,carriage LDR R5,cash:STR R5,cashool: CMP R5,R3: MOVEQ R15,R14 MOVS R1,R1 LDRNE R4,tspeed: LDRNE R4,[R4] ADRNE R5,spdtab-1: LDRNEB R5,[R5,R4] STMFD R13!,{R14} ADR R6,divtabl+4 MOV R10,#7 BL outnum LDRB R0,spdtestfl2: MOVS R0,R0: LDMEQFD R13!,{R15} SUBS R0,R0,#1: STRB R0,spdtestfl2 MOV R0,#ASC("H")-65+14: BL Dutext2 MOV R0,#79: BL Dutext2: LDMFD R13!,{R15} LDMFD R13!,{R15} .cashool EQUD -100: EQUD -100: EQUD -100 .spdtestfl2 EQUD 0 .tspeed EQUD spd .spdtab EQUB100:EQUB 50 EQUB 33:EQUB 25:EQUB20: EQUB 17:EQUB 14:EQUB 13 EQUB 11:EQUB 9:EQUB 8:EQUB 8:EQUB 7: EQUB 7:EQUB 6 EQUB 6 : .spdmap EQUD&24545454 .dspd LDR R0,spdmap: STR R0,colmapm LDR R0,spbase STR R0,carriage LDR R5,veloptr: LDR R5,[R5] MOVS R5,R5: RSBMI R5,R5,#0: MOV R5,R5,LSR#3 STMFD R13!,{R14} ADR R6,divtabl+4 MOV R10,#3 MOV R12,#48 BL anynum LDMFD R13!,{R15} : .cashcolz STR R2,colmapm .anycash STMFD R13!,{R14} ADR R6,divtabl+8 MOV R10,#6 MOV R12,#0 BL anynum MOV R0,#11: BL owncolz MOV R0,#12: BL owncolz LDMFD R13!,{R15} .anynum STMFD R13!,{R14} STR R12,addfad MOV R9,#0 .loop2 LDR R7,[R6],#4 MOV R0,#0:.loop SUBS R5,R5,R7 ADDCS R0,R0,#1 BCS loop ADD R5,R5,R7 ORR R9,R9,R0 CMP R0,#0: CMPEQ R9,#0: MOVEQ R0,#13 LDR R12,addfad:ADD R0,R0,R12 BL owncolz CMP R10,#2: MVNEQ R9,#0 SUBS R10,R10,#1: BNE loop2 LDMFD R13!,{R15} : .outnum .inonum STMFD R13!,{R14} MOV R9,#0 .loop2 LDR R7,[R6],#4 MOV R0,#0: .loop SUBS R5,R5,R7 ADDCS R0,R0,#1 BCS loop ADD R5,R5,R7 ORR R9,R9,R0 CMP R0,#0: CMPEQ R9,#0: MOVEQ R0,#13 BL Dutext CMP R10,#2: MVNEQ R9,#0 SUBS R10,R10,#1: BNE loop2 LDMFD R13!,{R15} .divtabl EQUD10000000:EQUD1000000 EQUD100000:EQUD10000:EQUD1000:EQUD100:EQUD10:EQUD1 .cash EQUD1000 .addfad EQUD 0 .subcashR0 LDR R6,cash: SUBS R6,R6,R0: MVNMI R6,#0: STR R6,cash .cashcopy STMFD R13!,{R0,R14} LDR R0,cash: EORS R0,R0,R0,ASL#7: ADDCC R0,R0,#1 ADDS R0,R0,R0,ASL#8: ADDCS R0,R0,#9 STR R0,cashencr: LDMFD R13!,{R0,R15}^ .cashencr EQUD 0 .chkcash STMFD R13!,{R0,R14} LDR R0,cash: EORS R0,R0,R0,ASL#7: ADDCC R0,R0,#1 ADDS R0,R0,R0,ASL#8: ADDCS R0,R0,#9 LDR R1,cashencr: CMP R1,R0 LDMEQFD R13!,{R0,R15} MOV R0,#0: STR R0,cash LDMFD R13!,{R0,R14} STMFD R13!,{R0-R12,R14}: BL dcash: LDMFD R13!,{R0-R12,R15} .cad .loop MOV R0,#&81: MOV R1,#256-68: MOV R2,#255: SWI "OS_Byte" CMP R2,#255: LDMNEFD R13!,{R14}: BNE cashcopy: BL vsync LDR R0,cash: ADD R0,R0,#1: STR R0,cash:BL dcash B loop : .initdtm MVN R0,#0: ADR R1,timecopy: MOV R2,R0 STMIA R1!,{R0,R2}: STMIA R1!,{R0,R2}: STMIA R1!,{R0,R2}: B rstfanframes .upgostime EQUD goingup .dtime MOV R8,R14 LDR R6,upgostime: LDR R6,[R6] LDR R0,timebase STR R0,carriage ADR R5,time LDRB R0,[R5],#1: CMP R0,#9: MOVEQS R6,R6: MOVEQ R15,R8 ADR R6,timecopy BL getbank: MOV R1,R1,ASR#16: ADD R6,R6,R1,LSL#3 LDRB R1,[R6],#1: CMP R1,R0: STRB R0,[R6,#-1]: BEQ nodasho MOVS R0,R0 MOVEQ R0,#13: BL Dutext .nodashod BL timetext BL blankspc BL timetext BL timetext BL blankspc BL timetext MOV R14,R8 .timetext LDRB R0,[R5],#1: LDRB R1,[R6],#1 CMP R0,R1: STRB R0,[R6,#-1]: BNE Dutext: B blankspc .timecopy EQUD 0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0 .nodasho BL blankspc: B nodashod .adsc \ R0 = score boost (BCD!) CMP R0,R1: STRB R0,[R6,#-1]: BNE Dutext B blankspc MOV R6,#7: ADR R1,score ADD R1,R1,#7 MOV R5,#0 .loop AND R2,R0,#15 LDRB R3,[R1],#-1 CMP R5,#10 ADC R5,R3,R2 CMP R5,#10: SUBGE R3,R5,#10 MOVLT R3,R5 STRB R3,[R1,#1] MOV R0,R0,LSR#4 SUBS R6,R6,#1: BNE loop MOV R15,R14 : .goup EQUD goingup .adt CMP R0,#20:ADDGE R0,R0,#6 CMP R0,#10:ADDGE R0,R0,#6 .nobcdconv LDR R6,tword LDR R6,goup: LDR R6,[R6]: MOVS R6,R6: BNE addup LDR R6,tword MOV R8,#5: ADR R1,time+5 MOV R5,#0 .loop AND R7,R6,#15 AND R2,R0,#15 LDRB R3,[R1],#-1 MOVS R5,R5: ADDMI R2,R2,#1 SUB R5,R3,R2 CMP R5,#0: ADDLT R3,R5,R7 MOVGE R3,R5 STRB R3,[R1,#1] MOV R0,R0,LSR#4 MOV R6,R6,LSR#4 SUBS R8,R8,#1: BPL loop MOV R15,R14 : .addup LDR R6,tword: MOV R8,#5: ADR R1,time+5: MOV R5,#0 .loop AND R7,R6,#15 AND R2,R0,#15 LDRB R3,[R1],#-1 CMP R5,#100 ADC R5,R3,R2 CMP R5,R7: SUBGE R3,R5,R7 MOVLT R3,R5 MOVGE R5,#100 STRB R3,[R1,#1] MOV R0,R0,LSR#4:MOV R6,R6,LSR#4 SUBS R8,R8,#1: BPL loop MOV R15,R14 : .timebase EQUD&2D2E+223+&3C0 .time EQUW512:EQUD0: ALIGN .tword EQUD&AA6AAA : .getdinfo LDR R11,seed LDR R1,totopbase: LDR R0,[R1]: ADD R0,R0,#&3000: ADD R8,R0,#&C0 ADD R2,R8,#&14000: LDR R1,[R1,#base2-base1]: B redinfo .copybk2 MOV R12,R14 .copybk LDR R1,totopbase: LDR R0,[R1]:ADD R0,R0,#&3000 ADD R8,R0,#&C0 ADD R2,R8,#&14000: LDR R1,[R1,#base2-base1]:.loop LDMIA R8!,{R3,R4,R5,R6} STMIA R2!,{R3,R4,R5,R6}: CMP R8,R1: BLT loop MOV R1,#0: BL wrbbase MOV R15,R12 .totopbase EQUD base1 .copywall STMFD R13!,{R14} LDR R0,totopbase: LDR R1,[R0,#base2-base1]:LDR R0,[R0] ADD R12,R0,#&14000 SUBS R1,R1,#&140 ADD R0,R0,#&3100 ADD R0,R0,#&098 .loop LDMIA R0!,{R2-R11} STMIA R12!,{R2-R11} LDMIA R0!,{R2-R11} STMIA R12!,{R2-R11} CMP R0,R1: BLT loop SUB R0,R12,R0: SUB R0,R0,#&140: MOV R1,#0: BL wrbase LDR R0,totopbase: LDR R0,[R0]: ADD R0,R0,#&2C000 LDMIA R12!,{R2-R11} .loop STMIA R12!,{R2-R11} STMIA R12!,{R2-R11} CMP R12,R0: BLT loop: LDMFD R13!,{R15} .mightobl2 LDR R0,duringgame: CMP R0,#&140*5: MOVLT R15,R14: B overbiglogo2 .duringgame EQUD 0 .notdgame MOV R0,#&140*48:.stdyg STR R0,duringgame: MOV R15,R14 .dgame MOV R0,#0: STR R0,duringgame: B stena .rddg LDR R0,duringgame: MOV R15,R14 .tstdg LDR R0,duringgame: CMP R0,#0: MOV R15,R14 .atab0 EQUD table0 .wallpaper \ R0 =paper no. STR R0,type LDR R10,atab0 ADD R10,R10,R0,LSL#4 MOV R7,R14 LDR R0,totopbase: LDR R1,[R0,#base2-base1]:LDR R0,[R0] MOV R5,R1: LDR R8,duringgame: ADD R1,R1,R8 ADD R0,R0,#&3000 ADD R0,R0,#&0C0 MOV R8,R0 ADD R0,R0,#&38 LDR R11,seed .loop LDRB R2,[R0,#1]! LDRB R4,[R0,#&13E] ADD R4,R2,R4 ADD R11,R11,R11,ASR#1 ADD R11,R11,#&E7000000 AND R6,R11,#63: CMP R6,#32: SUBGT R6,R6,#64 CMP R0,R5: SUBGT R6,R6,#3 ADDS R4,R6,R4,LSR#1 MOVMI R4,#0:CMP R4,#&100:MOVGE R4,#&FF STRB R4,[R0,#&13F] CMP R0,R1: BNE loop LDR R12,toWBG: MOV R6,R12 LDR R4,type: ADR R5,ttrans: LDRB R4,[R4,R5] LDR R9,[R6,R4]!: LDR R3,[R6,#4]: ADD R9,R9,R12: ADD R3,R3,R12 ADD R1,R1,#&140 .loop2 LDRB R6,[R9],#1 CMP R9,R3: MOVGT R9,R3: MOVGT R6,#0 MOVS R5,R6,LSL#24: MOVEQ R5,#&FF<<24 LDRB R0,[R8],#1 SUBS R0,R0,#64: MOVMI R0,#0: LDRB R0,[R10,R0,LSR#4] STRB R0,[R8,#-1]: SUBS R5,R5,#1<<24: BEQ change CMP R8,R1: BGE endme .loop LDRB R0,[R8],#1 LDRB R0,[R10,R0,LSR#4] STRB R0,[R8,#-1] SUBS R5,R5,#1<<24: BEQ change CMP R8,R1: BLT loop:.endme SWI "OS_ReadMonotonicTime": EOR R11,R11,R0 STR R11,seed MOV R15,R7 .loop2e LDRB R6,[R9],#1 CMP R9,R3: MOVGT R9,R3: MOVGT R6,#0 MOVS R5,R6,LSL#24: MOVEQ R5,#&FF<<24 CMP R5,#0: BEQ change CMP R8,R1: BGE endme: B loop .toWBG EQUD wallbg .grabBG EQUD 0 .type EQUD 0 .ttrans EQUB 16: EQUB 32: EQUB 20: EQUB 4: EQUB 12: EQUB 32: EQUB 32 ALIGN .change MOVS R6,R6: BEQ loop2e ADD R2,R8,#&A00: ADD R2,R2,#8 .loop3 LDRB R6,[R9],#1: MOVS R5,R6,LSL#24: MOVEQ R5,#&FF<<24 CMP R9,R3: SUBGT R9,R9,#1: BGT loop2 LDRB R0,[R8],#1 SUBS R0,R0,#80: MOVMI R0,#0: LDRB R0,[R10,R0,LSR#4] STRB R0,[R8,#-1]: SUBS R5,R5,#1<<24: BEQ change2 CMP R8,R1: BGE endme .loop LDRB R0,[R2],#1 SUBS R4,R0,#&30: MOVLT R4,#0: STRB R4,[R2,#-1] MOV R0,R0,ASR#1: ADD R0,R0,#&80 LDRB R0,[R10,R0,LSR#4] STRB R0,[R8],#1 SUBS R5,R5,#1<<24:BEQ change2 CMP R8,R1: BLT loop:B endme .change2 MOVS R6,R6: BEQ loop3 B loop2 .totab EQUD fadetable .sflr EQUD soundflag : .fadeoutlots LDR R0,gbasone: LDMIA R0,{R1,R2} STMFD R13!,{R0,R1,R2,R14} LDR R1,bankj LDR R1,[R1]: LDR R2,an1FC0: ADD R1,R1,R2: ADD R2,R1,#&14000 SUB R1,R1,#&3000: SUB R1,R1,#&C0: STMIA R0,{R1,R2} MOV R0,#1: BL infade LDMFD R13!,{R0,R1,R2,R14}: STMIA R0,{R1,R2} MOV R15,R14 .bankj EQUD bank2 .an1FC0 EQUD &1FC0000 ; bodged : .fadeout LDR R1,sflr: LDRB R0,[R1]: MOV R0,R0,ASR#1 .infade MOV R12,R0 STMFD R13!,{R14} BL savelogo MOV R10,#16:.loop2 BL vsync LDR R0,gbasone: LDR R1,[R0,#base2-base1]: LDR R0,[R0] ADD R0,R0,#&3000 ADD R0,R0,#&0C0 LDR R4,totab MOV R5,#&FF ADD R1,R1,#&140 .loop LDR R2,[R0] AND R3,R2,R5: LDRB R6,[R4,R3] AND R3,R5,R2,LSR#8: LDRB R7,[R4,R3]: ORR R6,R6,R7,LSL#8 AND R3,R5,R2,LSR#16: LDRB R7,[R4,R3]: ORR R6,R6,R7,LSL#16 LDRB R7,[R4,R2,LSR#24]: ORR R6,R6,R7,LSL#24 STR R6,[R0],#4 CMP R0,R1: BNE loop LDR R2,duringgame: CMP R2,#&140*5: BLT nofurder ADD R1,R1,#&140*48: ADD R4,R4,#256 .loop LDR R2,[R0] AND R3,R2,R5: LDRB R6,[R4,R3] AND R3,R5,R2,LSR#8: LDRB R7,[R4,R3]: ORR R6,R6,R7,LSL#8 AND R3,R5,R2,LSR#16: LDRB R7,[R4,R3]: ORR R6,R6,R7,LSL#16 LDRB R7,[R4,R2,LSR#24]: ORR R6,R6,R7,LSL#24 STR R6,[R0],#4: CMP R0,R1: BNE loop .nofurder TST R12,#1 SUBEQ R0,R10,#1: MOVEQ R0,R0,LSL#4: BLEQ musicsetvolume SUBS R10,R10,#1:BNE loop2 LDMFD R13!,{R15} .tempsflag EQUD 0 .bigfadeout LDR R1,sflr: LDRB R12,[R1]:.inbigfout MOV R12,R12,ASR#1 STR R12,tempsflag STMFD R13!,{R14} BL savelogo LDMFD R13!,{R14} LDR R0,gbasone: LDR R0,[R0]:.inbigfo STR R0,fstart LDR R12,tempsflag STMFD R13!,{R14} BL noangeldust MOV R10,#16:.loop2 BL vsync LDR R0,fstart: ADD R1,R0,#&14000 LDR R4,totab MOV R5,#&FF .loop ] FORT2=0 TO 1:[OPT T LDMIA R0,{R2,R11} AND R3,R2,R5: LDRB R6,[R4,R3] AND R3,R5,R2,LSR#8: LDRB R7,[R4,R3]: ORR R6,R6,R7,LSL#8 AND R3,R5,R2,LSR#16: LDRB R7,[R4,R3]: ORR R6,R6,R7,LSL#16 LDRB R7,[R4,R2,LSR#24]: ORR R6,R6,R7,LSL#24 AND R3,R11,R5: LDRB R8,[R4,R3] AND R3,R5,R11,LSR#8: LDRB R7,[R4,R3]: ORR R8,R8,R7,LSL#8 AND R3,R5,R11,LSR#16: LDRB R7,[R4,R3]: ORR R8,R8,R7,LSL#16 LDRB R7,[R4,R11,LSR#24]: ORR R8,R8,R7,LSL#24 STMIA R0!,{R6,R8} ]NEXT:[OPT T CMP R0,R1: BNE loop TST R12,#1 SUBEQ R0,R10,#1: MOVEQ R0,R0,LSL#4: BLEQ musicsetvolume SUBS R10,R10,#1:BNE loop2 LDMFD R13!,{R15} .fstart EQUD 0 .qclear STMFD R13!,{R14} LDR R2,isiton: LDRB R2,[R2] STR R0,fstart: MOV R5,#0 MOV R10,#31 .loop2 LDR R0,fstart: ADD R1,R0,#&14000 ADD R0,R0,R5:MOV R6,#0:.loop STRB R6,[R0],#27: CMP R0,R1: BLT loop SUB R0,R10,#1: TST R2,#1: MOVEQ R0,R0,LSL#3: ;BLEQ musicsetvolume SUB R10,R10,#1 BL vsync SUB R5,R5,#5: ANDS R5,R5,#31: BNE loop2 LDMFD R13!,{R15} .isiton EQUD soundflag : .table0 EQUD&20030201: EQUD &23222121 EQUD &45454423: EQUD &47474646 .table1 EQUD&03020200 EQUD&2B2A2928:EQUD&C7C6C5C4:EQUD&FBFAF9F8 .table2 EQUD&0F0E0D0C:EQUD&93929190 EQUD&9F9E9D9C:EQUD&BFBEBDBC .table3 EQUD&03020200:EQUD&2F2E2D2C EQUD &D3D2D1D0:EQUD&FFFEFDFC .table4 EQUD&07060504: EQUD &11111010 EQUD&13131212: EQUD &15151414 .table5 EQUD&0B0A0908:EQUD&83828180 EQUD&8B8A8988:EQUD &ABAAA9A8 .table6 EQUD &25252424: EQUD &27272626 EQUD &59595858: EQUD &5B5B5A5A .table7 EQUD &20212223: EQUD &23222120 EQUD &10111213: EQUD &13121110 : .seed EQUD RND:.seed1 EQUD RND .fullrandR6 STMFD R13!,{R0,R14}: BL getrand: MOV R6,R0: LDMFD R13!,{R0,R15} .getrand STMFD R13!,{R1,R2,R14} LDR R0,seed: LDR R1,seed1: TST R1,R1,LSR#1 MOVS R2,R0,RRX: ADC R1,R1,R1: EOR R2,R2,R0,LSL#12 EOR R0,R2,R2,LSR#20: STR R0,seed: STR R1,seed1 LDMFD R13!,{R1,R2,R15} : .tbostwo EQUD base2 : .ownhig MOV R5,#&D3: MOV R10,#&2F:.ownhigo MOV R4,#&D1: B ownhin .drawicon \ R0 = scrn index \ R1 = stored address-1 \ R2 = width MOV R5,#&D3: MOV R10,#&2F MOV R4,#&D1 .cicon \ R5 = border colour \ R10 = dark colour MOV R3,#33 .ownhin MOV R9,#0 MOV R8,R3 LDR R6,gbasone: LDR R6,[R6] SUB R6,R6,#&1400 ADD R0,R0,R6 STMFD R13!,{R0,R2,R3,R4} .loop2 ADD R6,R0,#&140 CMP R8,R3: SUBEQ R6,R0,#&140: MOVNES R8,R8: BNE nobl ADD R4,R2,#2: STRB R9,[R6,R4] STRB R9,[R0,R4] ADD R4,R2,#1 .loop STRB R5,[R0,R4] STRB R9,[R6,R4] SUBS R4,R4,#1: BPL loop STRB R9,[R6,R4] STRB R9,[R0,R4] B on .gbasone EQUD base1 .nobl STRB R9,[R0,#-1] STR R5,[R0],#1 MOV R7,R2:.loop LDRB R6,[R1,R7] STRB R6,[R0,R7] SUBS R7,R7,#1:BNE loop ADD R1,R1,R2 ADD R4,R2,R0 STRB R10,[R4]: STRB R9,[R4,#1] SUB R0,R0,#1 .on ADD R0,R0,#&140 SUBS R8,R8,#1: MOVEQ R5,R10: BPL loop2 LDMFD R13!,{R0,R2,R3,R4}: ADD R2,R2,#1 STRB R4,[R0,R2]: ADD R3,R3,R3,LSL#2 STRB R4,[R0,R3,LSL#6] MOV R15,R14 : .mapptrptr EQUD mapptr .indexptr EQUD index .spdptr EQUDspd .veloptr EQUDvelo .bogeyptr EQUDbogey .sptr EQUDs .getbT EQUD bt .keys EQUD 0 .nokeys MOV R0,#0: STR R0,keys: MOV R15,R14 : .subkey LDR R0,keys: SUBS R0,R0,#1: STRPL R0,keys MOVMI R15,R14: STMFD R13!,{R14} STMFD R13!,{R0,R1}: MOV R0,#1: MOV R1,#1: BL doeffect LDMFD R13!,{R0,R1}: BL showkeys BL newoldpox LDMFD R13!,{R14} MOV R0,#&FF00: ORR R0,R0,#&10 LDR R1,zappit: STR R0,[R1] MOVS R15,R14 .zappit EQUD zap : .gettakey STMFD R13!,{R1,R14}: MOV R0,#17: MOV R1,#10: BL doeffect LDMFD R13!,{R1,R14} LDR R0,keys: ADDS R0,R0,#1: STR R0,keys .showkeys STMFD R13!,{R0-R5} LDR R1,belli: STRPL R1,likkle: LDR R1,belli+4: STRPL R1,likkle+4 ADR R1,likkle+1: MOV R2,#6: SWIPL "XOS_BinaryToDecimal" LDR R0,tbanp: MOV R1,#32: STRB R1,[R0,#bannerb-bannerptr] ADR R1,likkle: STR R1,[R0] LDMFD R13!,{R0-R5} MOV R0,#&FF00: ORR R0,R0,#&31: MOVS R15,R14 .tbanp EQUD bannerptr .likkle EQUS "*9 " EQUS " ": EQUB 13 .belli EQUS "* " EQUS " ": EQUB 13 ALIGN : .contvm LDR R11,spdptr: LDR R12,veloptr LDR R10,mapptrptr: LDR R10,[R10] LDR R9,indexptr: LDR R9,[R9] LDR R0,k1: LDR R3,k2 LDR R1,[R11]: LDR R2,[R12] MOV R8,R2,ASR#16 RSB R7,R2,#0: MLA R9,R1,R7,R9 MLA R0,R8,R1,R0: CMP R0,R3: BLE nosco ADD R3,R3,#500: STR R3,k2 LDR R4,getbT: LDR R4,[R4]: CMP R4,#&280000: BLT nosco LDR R3,sptr LDR R4,[R3]: CMP R4,#1 LDRNE R4,score: ADDNE R4,R4,#5: STRNE R4,score .nosco LDR R3,sptr LDR R4,[R3,#4]:SUBS R4,R4,R1:MOVMI R4,#0: STR R4,[R3,#4] STR R0,k1 LDR R1,stmap .loop LDR R0,[R10,#&2C]: CMP R9,R0: BLE nobackw SUB R9,R9,R0: SUB R10,R10,#48 LDRB R5,xmapindex: CMP R5,#&FF: LDRB R4,[R5,R10]!: MOVEQ R4,#0 CMP R4,#80: BLT leave2 BNE notlock3: LDR R4,keys: MOVS R4,R4 BNE leave2:.notlock3 CMP R4,#93: BGT leave2: LDRB R4,[R5,#1]: CMP R4,#&FF:BEQ leave2 LDRB R4,[R5,#49]: CMP R4,#&FF: BEQ dlev2 LDRB R4,[R5,#48]: CMP R4,#80: BLE dlev2 .notlock CMP R4,#94: BLT leave2:.dlev2 LDR R0,veloptr: MOV R1,#0: STR R1,[R0] ADD R10,R10,#48: LDR R9,[R10,#&2C]: SUB R9,R9,#&1000: B nobackw .leave2 CMP R10,R1: BGE loop MOV R10,R1 MOV R9,R0 LDR R2,[R12]: MOV R2,R2,ASR#2 RSB R2,R2,#0: STR R2,[R12] LDR R1,trestf: MOV R0,#0: STR R0,[R1] LDR R1,trestsq LDR R1,trestsq: LDR R1,[R1]: LDRB R0,[R1] CMP R0,#68: MOVEQ R0,#67: CMP R0,#101: MOVEQ R0,#100 CMP R1,#0: STRNEB R0,[R1] .nobackw LDR R1,bigwptr: CMP R10,R1: BLT nobogey .nobackw2 MOVS R9,R9: BPL nobogeyA ADD R10,R10,#48 ADD R9,R9,#&4000000 B nobackw2 .bigwptr EQUD bigwaste+&30 .storeoldpos LDR R1,tindexy: LDR R0,[R1]: STR R0,oldindex LDR R0,[R1,#mapptr-index]: STR R0,oldmapptr MOV R15,R14 .byebye LDR R1,trestsq: LDR R1,[R1]: LDRB R0,[R1] CMP R0,#68: MOVEQ R0,#67: CMP R0,#101: MOVEQ R0,#100 STRB R0,[R1]: B dojets .oldindex EQUD 0:.oldmapptr EQUD 0 .trestf EQUD restartflag .trestsq EQUD restsq .igbarr EQUD &FF .wrbarr STR R0,igbarr: MOV R15,R14 .tindexy EQUD index .nobogeyA STMFD R13!,{R0-R12,R14}: BL skidoffcode: LDMFD R13!,{R0-R12,R14} .nobogey LDRB R0,cheat: MOVS R0,R0: BEQ nocheat MOV R1,#156:MOV R2,#&FF:MOV R0,#&81: SWI "XOS_Byte" MOVS R1,R1:BEQ nocheat LDR R4,sptr: MOV R0,#1: STR R0,[R4]: STR R0,[R4,#4] STMFD R13!,{R14}: BL stcheated: LDMFD R13!,{R14} .nocheat .loop MOVS R9,R9: BPL noforw ADD R10,R10,#48: LDR R0,[R10,#&2C]: ADD R9,R9,R0 MOVS R0,R0: BEQ weldon LDRB R0,igbarr: MOVS R0,R0: BEQ leave LDRB R0,xmapindex: CMP R0,#&FF: LDRB R4,[R0,R10]!: MOVEQ R4,#0 CMP R4,#80: BLT leave BNE notlock2: LDR R4,keys: MOVS R4,R4 BNE leave:.notlock2 CMP R4,#93: BGT leave: LDRB R4,[R0,#1]: CMP R4,#&FF:BEQ leave LDRB R4,[R0,#-47]: CMP R4,#&FF: BEQ dlev LDRB R4,[R0,#-48]: CMP R4,#80: BLE dlev .notlock4 CMP R4,#94: BLT leave:.dlev LDR R0,veloptr: MOV R1,#0: STR R1,[R0]: MOV R9,#&1000 SUB R10,R10,#48: B noforw .leave LDR R0,the: LDR R0,[R0]: MOVS R0,R0: BPL loop MOVS R9,R9: MOVMI R9,#0:B noforw:.weldon B b4bogey:.b2bogey ADD R9,R9,#&4000000 LDR R4,sptr: MOV R0,#1: STR R0,[R4]: MOV R0,#100: STR R0,[R4,#4] B stanim:.finanim STMFD R13!,{R0-R8,R11-R12,R14}: BL initskidoff LDMFD R13!,{R0-R8,R11-R12,R14} .noforw LDR R1,mapptrptr: STR R10,[R1] LDR R1,indexptr: STR R9,[R1] LDR R1,spdptr: LDR R8,[R1] LDR R7,[R10,#32] LDR R1,veloptr: LDR R6,[R1] LDR R1,modax: LDR R0,[R1]: MOV R6,R6,ASR#14 MUL R6,R7,R6: ADD R6,R6,R0 MOV R0,#0: STR R0,[R1] LDR R0,sgax: STR R6,[R0]: MUL R8,R6,R8 RSB R8,R8,#0 LDR R6,gax: STR R8,[R6] B slowdown .nopurplemess STRB R0,bannerb: MOV R15,R14 .gax EQUD ax .sgax EQUD axstars .modax EQUD modifyax .k1 EQUD0:.k2 EQUD 500<<16 .stmap EQUD mapcopy+&70 .bannerptr EQUD 0 .cheat EQUB 0:.nodesk EQUB 0 .bannerb EQUB 0 .timeup EQUS "Time up":EQUB 13 ALIGN .didicheat LDRB R0,cheat: MOV R15,R14 .the EQUD height .xmapindex EQUB 0:ALIGN .doI STRB R5,xmapindex: MOV R15,R14 .chcht LDRB R0,cheat: MOVS R0,R0: MOVEQ R15,R14 STMFD R13!,{R14}: B cad : .mightdobanner LDRB R0,bannerb: SUBS R10,R0,#1: MOVCC R15,R14 STRB R10,bannerb STMFD R13!,{R14} LDR R0,tcarg:LDR R1,bbase: LDR R2,bannerptr MVN R3,#0:.loop ADD R3,R3,#1:LDRB R4,[R2,R3]: CMP R4,#13: BNE loop SUB R1,R1,R3,LSL#2: STR R1,[R0] LDR R1,bancol LDRB R3,[R2]: CMP R3,#ASC("*"): ADDEQ R2,R2,#1 MOVEQ R1,#0: STREQ R1,[R0]: LDREQ R1,bancolA STR R1,[R0,#colmapm-carriagem] MOV R3,#0:.loop LDRB R0,[R2],#1: CMP R0,#13: SUBNE R0,R0,#33: BLNE niceOs BNE loop LDMFD R13!,{R15} .tcarg EQUD carriagem:.bbase EQUD &6FE0 .bancol EQUD &01BF9D90 .bancolA EQUD &838281 .bigtable ]NEXT IF NOT saveprog !tosprite32=bigblocks:!arm3tosprite32=bigblocks IF saveprog !(ctosprite32+assemtwomeg-twomeggoes+9*4)=&8000+(gamesize*1024) A%=5394226+123: !backdoor=USRcalcay A%=&17568122: !wontcrash=USRcalcay !seedo=&17568122 !calcay=0:calcay!4=0:calcay!8=0:calcay!12=0:calcay!16=0 PROCshopibase FOR T=0 TO &3FC STEP4 T!sine=SIN(T/&200*PI)*&7F0000 NEXT FORT=0 TO 1016 STEP 8 G=2^(T/128) T!logtable=G:!(T+logtable+4)=-G NEXT : FOR G=4 TO 1000 STEP4:G!bigtable=&10000000/G:NEXT !bigtable=&10000000/3 MODE15:CLS:MODE13:OFF: GCOL 3,127 TINT 0 OSCLI("L.BlipData "+STR$~blipdata) OSCLI("L.SmPhlog "+STR$~header) OSCLI("L.BallData "+STR$~ball) OSCLI("L.CompNF "+STR$~hispr) OSCLI("L.Courses.Congrats "+STR$~congrascr) OSCLI("L.uTextData "+STR$~utext) OSCLI("L.mTextData "+STR$~mtext) OSCLI("L.SmIcons "+STR$~icons) OSCLI("L.BuySprs "+STR$~buy) OSCLI("L.SmCharSet "+STR$~bigcharset) OSCLI("L.Comments "+STR$~comments) OSCLI("L.Graphics.Extras "+STR$~xtras) FORX=0 TO 11:X?pokt-=33:NEXT PROCdecodeut(comments,2495) OSCLI("L.Blocknames "+STR$~blocknames) PROCdecodeut(blocknames,924) OSCLI("L.ActNames "+STR$~actnames) OSCLI("L.ObNames "+STR$~obnames) OSCLI("L.FootData2 "+STR$~footer) OSCLI("L.SpaceDat "+STR$~spacestuff) OSCLI("L.BlockData "+STR$~mapspr) OSCLI("L.BBlockData "+STR$~bigblocks) OSCLI("L.XYZHires "+STR$~xyzhrsprs) OSCLI("L.NumComp "+STR$~numcomp) OSCLI("L.Graphics.BlockMap2 "+STR$~mapcolours) FORn=mapcolours TO mapcolours+&34:!n=0:NEXT OSCLI("L.KeyCodes "+STR$~keycodes) REMOSCLI("L.RootTab "+STR$~hugelookup) OSCLI("L.ComprsCode "+STR$~comprscode) OSCLI("L.Colourlist "+STR$~(colourlist+128)) OSCLI("L.Colourlist "+STR$~colourlist) OSCLI("L.SysComp "+STR$~sysfreq) OSCLI("L.MeterData "+STR$~altsprs) OSCLI("L.Graphics.JetFlame2 "+STR$~flamedata) FORn=flamedata TO flamedata+&34:!n=0:NEXT OSCLI("L.LogoData "+STR$~logodata) OSCLI("L.DoneOver "+STR$~doneover) OSCLI("L.FlameCode "+STR$~flamecode) flamecode!20=thrust OSCLI("L.DCompact "+STR$~(dcompact+12)) OSCLI("L.XYZData "+STR$~xyzsprs) OSCLI("L.BacMan "+STR$~wallbg) OSCLI("L.Planetcode "+STR$~planetcode) OSCLI("L.SmSLData "+STR$~sldata) OSCLI("L.MiniBData "+STR$~minibdata) OSCLI("L.FanData "+STR$~spindat) OSCLI("L.FireWkode "+STR$~firewcode) OSCLI("L.Sparking "+STR$~ballsparks) OSCLI("L.STplayer "+STR$~stplayer) IF saveprog OSCLI("L.^.Gift "+STR$~map) IF saveprog OSCLI("L.Prot "+STR$~starmap) endcode%=P%+1004:P%=dcompact:[OPT 2: B dividetwo: EQUD save1+4:EQUD mapcopy+&40 ] IF NOTsaveprog THEN P%=endadjust:[OPT 2 MOV R15,R14 ]CALL adjust ENDIF !junkinfo=-1 ::::::::::: *FX 4,2 !xyzmap=-2 : !xyzinfo=-1 IF saveprog OSCLI("L..Options "+STR$~options) IF saveprog OSCLI("Save ^.Assembly.!RunImage "+STR$~hello+" "+STR$~EndProg) IF saveprog PRINT"Saved": END REMSYS "XSMaster_Claim" OSCLI("L.^.LoadBigSpr.SFX "+STR$~sfxdata) A%=sfxdata: CALL musicsamptrans CALL genesis *FX 200,1 ON ERROR GOTO52212 CALL majorloop1 CALL listo GOTO 52194 : : REM error code : CALLpoff CALLseeme OSCLI("FX200,0"):OSCLI("FX4"):MODE0:REPORT:PRINT" at line ";ERL:PROCfin:END : DEFPROCfin ON ERROR END CALL musicclosesound COLOUR3:VDU4:ON:CALLendvnt *FX 13,4 ENDPROC : DEFPROCeditor *FX 200 CALL editcode *FX 200,1 ENDPROC : DEFPROCtext:REPEATUNTILNOTINKEY-36:REPEAT:ptrO=ptr2+2*X CALL editf:CALLeditf I=GET:IF I=127 AND X<>15 X+=1:?ptrO=7:ptrO?1=&FF:GOTO52281 IF I<>13 M=FNascii(I):?ptrO=M:ptrO?1=M/256 IF X<>0 X-=1 UNTILI=13:ENDPROC DEFFNascii(J): K=J AND &DF: IF K>64 AND K<91 =K-31 IF K=ASC("?") =66 =&FF07 ptr2=mst ENDPROC : DEFFNaddr(x%,y%) !P%=INT((1024-y%)/4)*&140+(x%/4) P%+=4:=0 : DEFFNut(E$,K) LOCAL P FORX=0 TO LENE$-1 P=ASCMID$(E$,X+1,1) IF P>47 AND P<57 P=P-48:GOTO52365 IF P=32 P=66:GOTO52365 IF P=ASC(":") P=10:GOTO52365 IF P=ASC("-") P=13:GOTO52365 IF P=ASC("?") P=47:GOTO52365 IF P=ASC(",") P=45:GOTO52365 IF P=ASC(")") P=71:GOTO52365 IF P=ASC("(") P=72:GOTO52365 IF P=ASC("+") P=65:GOTO52365 IF P=ASC("`") P=58:GOTO52365 IF P=ASC("'") P=43:GOTO52365 IF P=34 P=44:GOTO52365 P=P-51 P%?X=P+K:NEXT:P%+=LENE$ =T : DEFFNspeedtest:TIME=0:FORT=1 TO 1000:CALLcls:NEXT:PRINTTIME : DEFFNequadd(E$) FORX=0 TO LENE$-1 P%?X=ASCMID$(E$,X+1,1)-33 IF P%?X=ASC("#")-33 P%?X=127-33 IF P%?X=0 P%?X=165-33 NEXT P%+=LENE$:=T : DEFFNjustsub(E$) FORX=0 TO LENE$-1 P%?X=ASCMID$(E$,X+1,1)-45 NEXT P%+=LENE$:=T : DEFFNequand(B$) Y=P%: X=FNequadd(B$) FORX=Y TO P%:?X=?X AND &7F:NEXT =T : DEFFNalloc(a) I%=((I%-1)AND&FFFFC)+4 I%+=a:=I%-a : DEFFNalignme(z) [OPT T:MOV R0,R0: MOV R0,R0: MOV R0,R0: MOV R0,R0 ]P%=P%-16 P%=z+((P%+12) DIV 16)*16 =T : DEFFNtiletext(z$) FORG=0 TO 15:J=ASCMID$(z$,G+1,1) IF J=32 G?P%=&FF ELSE G?P%=J-31 IF J=ASC("x") G?P%=109 IF J=ASC("y") G?P%=110 IF J=ASC("-") G?P%=123 IF J=ASC("*") G?P%=24 NEXT:P%+=16:=T : : DEFFNscrolltext(Z$) FORX=0 TO LENZ$-1 J=ASCMID$(Z$,X+1,1): IF J=32 X?P%=127 ELSE X?P%=J-33 NEXT:P%+=X =T : DEFPROCdecodeut(Z%,n) FORX=0 TO n:t=X?Z% IF t=10 t=&FF:GOTO52566 IF t>47 AND t<57 t=t-48:GOTO52566 IF t=32 t=66:GOTO52566 IF t=ASC(":") t=10:GOTO52566 IF t=ASC("-") t=13:GOTO52566 IF t=ASC("?") t=47:GOTO52566 IF t=34 t=44:GOTO52566 IF t=ASC(".") t=46:GOTO52566 IF t=ASC(",") t=45:GOTO52566 IF t=ASC("(") t=40:GOTO52566 IF t=ASC(")") t=42:GOTO52566 IF t=ASC("/") t=41:GOTO52566 IF t=ASC("'") t=43:GOTO52566 IF t=ASC("`") t=58:GOTO52566 t=t-51 X?Z%=t:NEXT ENDPROC : DEFPROCdcut(I%) B%=?I%:VDUUSRinttoasc: I%+=1: GOTO 52578 : DEFPROCshopibase OSCLI("L. BSRecord "+STR$~bsrecord) FORJ=iconsbase+4 TO first-4 STEP 12 !J=!(bsrecord+(!J)/256) NEXT FORJ=s1 TO s3 STEP 8 !J=!(bsrecord+(!J)/256)+buy NEXT ENDPROC : DEFFNmov81216 [OPT T MOV R8,R12,ASR#16 ] =T : DEFFNmovpl81216 [OPT T MOVPL R8,R12,ASR#16 ] =T : DEFFNmov8128 [OPT T MOV R8,R12,ASR#8 ] =T : DEFFNmovpl8128 [OPT T MOVPL R8,R12,ASR#8 ] =T : DEFFNldrit(teeone) [OPT T LDR R12,[R7,#11-teeone]: MOV R8,R12,ASR#24 ] =T : DEFFNldritpl(teeone) [OPT T LDR R12,[R7,#11-teeone]: MOVPL R8,R12,ASR#24 ] =T : DEFFNencrypt(A$) seedef=&7E: FOR T1=1 TO LENA$ ?P%=(ASCMID$(A$,T1,1)-seedef):P%+=1 seedef=(seedef) EOR (seedef<<5) seedef=(seedef) EOR (seedef>>4) NEXT ?P%=-seedef:P%+=1:=T : REM ----------------------- REM composite map routines follow REM ----------------------- : DEFFNfullcmp(reg0,reg1) [OPT T STMFD R13!,{R11,R12} BIC R11,reg0,#&FF<<24: BIC R11,R11,#&F<<20 BIC R12,reg1,#&FF<<24: BIC R12,R12,#&F<<20 CMP R11,R12 EOREQ R11,R11,reg0: EOREQ R12,R12,reg1 CMPEQ R12,R11 LDMFD R13!,{R11,R12} ] =T : DEFPROCshowfree PRINT "twomeg: ";(real2Mend-assemtwomeg)-(endtwomeg-assemtwomeg) PRINT"chknoroom: ";(stplayer-chknoroom)-(endchknoroom-chknoroom) PRINT"fanspin: ";(scrollh-fanspin)-(endfanspin-fanspin) PRINT"scrollh: ";(flamecode-scrollh)-(endscrollh-scrollh) PRINT"code%: ";(ball-code%)-(endcode%-code%) PRINT"mapsdo: ";(icons-mapsdo)-(endmapsdo-mapsdo) PRINT"code2%: ";(bigcharset-code2%)-(endcode2%-code2%) PRINT"collision: ";(header-collision)-(endcollision-collision) PRINT"title: ";(footer-title)-(endtitle-title) PRINT"hischandle: ";(hiscores-hischandle)-(endhischandle-hischandle) PRINT"nowhere: ";(spacestuff-nowhere)-(endnowhere-nowhere) PRINT"analyser: ";(mapcolours-analyser)-(endanalyser-analyser) PRINT"bouncer: ";(passwords-bouncer)-(endbouncer-bouncer) PRINT"wicked: ";(colourlist-wicked)-(endwicked-wicked) PRINT"xyzcdee: ";(xyzobs-xyzcdee)-(endxyzcdee-xyzcdee) PRINT "messcode: ";(syscode-messcode)-(endmesscode-messcode) PRINT "syscode: ";(sysfreq-syscode)-(endsyscode-syscode) PRINT "meterscode: ";(logodata-meterscode)-(endmeterscode-meterscode) PRINT "doneovercode:";(buymeplease-doneovercode)-(enddoneovercode-doneovercode) PRINT "buymeplease: ";(doopts-buymeplease)-(endbuymeplease-buymeplease) PRINT "doopts: ";(cockup-doopts)-(enddoopts-doopts) PRINT "cockup: ";(wallbg-cockup)-(endcockup-cockup) PRINT "entername2: ";(planetcode-entername2)-(endentername2-entername2) PRINT "editor: ";(blocknames-editor)-(endeditor-editor) PRINT "editpreev: ";(firewcode-editpreev)-(endeditpreev-editpreev) PRINT "spritereorder:";(bigwaste-spritereorder)-(endspritereorder-spritereorder) PRINT "jetcode: ";(doneovercode-jetcode)-(endjetcode-jetcode) PRINT "clear: ";(oldjunkif-clear)-(endclear-clear) PRINT "Total Size: ";EndProg-hello PRINT END : DEFPROCdefinexyz(address,coincidence,frames,name$,rst) jy%=xyzrecord: gottit=0 REPEAT fh$="": FORY=0 TO 11: g=Y?jy% IF g<>0 fh$+=CHR$g NEXT IF fh$=name$ THEN ?address=jy%!12: REM x address?1=jy%!16: REM y address?2=frames address?3=coincidence address!4=jy%!20: REM address IF rst address?7=&80 gottit=TRUE ENDIF jy%+=24 UNTIL gottit OR fh$="NOMORE!" IF name$="NOMORE!" PRINT "XYZ definition ";names;" not found!": END xyzas%=address+8 lastxyz=(address-xyzobs)/8 ENDPROC : DEFPROClegal(num,string$) REM first digit of string$ is bottom bit m=0 l=1 FORj=1 TO LENstring$ k=(MID$(string$,j,1)<>"x") AND 1 m+=k*l l=l*2 NEXT !(xyzlegal+num*4)=m ENDPROC : DEFPROCcondensescroll(A%) A%?-1=0 o=A%:w=A% ok=TRUE:ok1=TRUE:ok2=TRUE REPEAT:a=?w:?w=0: IFa=10 OR a=32 a=&FF ELSE a=a-33 IF a=ASC(";")-33 ?o=a:o?1=w?1:w?1=0:o+=2:w+=2:ok1=0:GOTO 53031 IF a=131 THEN a=92 ok=TRUE IF ?(o-1)=93 OR ?(o-1)=92 THEN ?o=(a-15)*4:ok=FALSE ELSE ?o=(a AND &7F) IF ?o=&7F AND ?(o-1)<128 AND ok1 AND ok THEN o-=1:?o=?o+128 o+=1:w+=1 ok1=ok UNTIL a=31 OR w-A%>&4000 PRINT~o-A% ENDPROC