Home » Archimedes archive » Acorn User » Acorn User - Updated Shareware Collection (1994).adf » Programs » !WelcomeA/Source
!WelcomeA/Source
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Acorn User » Acorn User - Updated Shareware Collection (1994).adf » Programs |
Filename: | !WelcomeA/Source |
Read OK: | ✔ |
File size: | 5A1E bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
1REM >Source 2REM Create a module that provides an alternative desktop Welcome 3REM A sprite spinning from a random position to the center of the screen 4REM We use floating point because the parameters to PutSpriteTransformed 5REM are in draw units (1/256 OS) and multiplying would otherwise need 6REM 64-bit arithmetic 7REM Now has compressed picture (saves 4K) & only claims workspace while 8REM animating (saving about 200 bytes!) 9REM Assumes sprite needs no pixtrans to plot. Ie YOU must ensure 10REM sprites has same bits-per-pixel AND palette for configured desktop MODE 11REM Handles sprite in high/low rez on screen low/high rez 12REM 1.00 18-Jun-1993 working version 13REM 1.10 27-Jun-1993 distributed version with docs + exageratted y start pos 14: 15REM MACHINE: Archimedes 16REM LANGUAGE: BBC BASIC V v1.05 17REM AUTHOR: Cy Booker, 18REM 86 Church View, Main Road, Crockenhill, Swanley, Kent. 19REM BR8 8JW 20: 21LIBRARY "<BasicV$Lib>.LibHandler" : ON ERROR PROC_handle_library_error 22PROC_hard_initialise_LibHandler( 20, 011 ) 23Debug_Wimp%=FALSE:Debug%=TRUE:On_Lib_Error_MODE%=-1:REM Desktop Development 24SYS "XHourglass_On" 25ON ERROR:SYS "XHourglass_Off":PROC_handle_library_error 26: 27 In$ = FNsysvar("MakeDesktopWelcomeModule$Input") 28 Out$ = FNsysvar("MakeDesktopWelcomeModule$Output") 29 NFrames = VAL(FNsysvar("MakeDesktopWelcomeModule$NFrames")) 30 IF NFrames < 1 THEN ERROR 1, "Invalid value for system variable MakeDesktopWelcomeModule$NFrames" 31 Banked_P = (ASC(FNsysvar("MakeDesktopWelcomeModule$Buffered")) = ASC("Y")) :REM boolean, => no flicker 32 Test_P = TRUE :REM boolean, => test 33 ModuleTitle$ = "WelcomeAnimate" 34 ModuleHelp$ = "WelcomeAnimate"+ CHR$(9)+ "1.10 (27 Jun 1993)" :REM Module 35: 36REM Now to load in the library files used by this program. 37PROC_load_library( "<BasicV_Assembler$Lib>.Misc", 020 ) 38PROC_load_library( "<BasicV_Assembler$Lib>.Services", 008 ) 39PROC_load_library( "<BasicV_Assembler$Lib>.VduExt", 001 ) 40PROC_load_library( "<BasicV_Assembler$Lib>.Flop", 004 ) 41PROC_load_library( "<BasicV_Assembler$Lib>.SpriteVar", 004 ) 42: 43 PROC_assemble( 160000 ) :REM large for 32K decompress workspace 44 IF Test_P THEN 45 SYS "OS_ServiceCall",, Service_DesktopWelcome 46 ENDIF 47 PRINT "Created "+ Out$ 48 SYS "XHourglass_Off" 49END 50: 51REM ********************************************************************* 52REM * Assemble all the code. 53REM * IN: code_size% == size of code to use. 54REM * OUT: code% <-- Byte array containing code. 55: 56DEF PROC_assemble( code_size% ) 57LOCAL lr, sp, pc, gb 58LOCAL pass%, P%, O%, L% 59 DIM code% code_size% 60 gb = 12 61 sp = 13 62 lr = 14 63 pc = 15 64 PSR_Z = 1 << 30 65 PSR_C = 1 << 29 66 PSR_V = 1 << 28 67 L% = code% + code_size% 68 PROC_Services(code%, L%) 69 PROC_VduExt(code%, L%) 70 PROC_SpriteVar(code%, L%) 71 PROC_Load_And_Parse_SpriteFile :REM after SpriteVar 72 PROC_Constants(code%, L%) 73 SYS "XHourglass_Percentage", 10 74 FOR pass%= %1100 TO %1110 STEP %0010 75 P% = 0 : O% = code% 76 PROC_assemble_Module 77 IF (pass% AND 2)=0 THEN 78 FOR P%= code% TO O%-1 STEP 4 79 !P% = 0 80 NEXT P% 81 SYS "XHourglass_Percentage", 50 82 ENDIF 83 NEXT pass% 84 SYS "XHourglass_Percentage", 99 85 : 86 SYS "OS_File", 10, Out$, &FFA,, code%, O% 87 SYS "OS_Module", ModHandReason_CopyArea, code%, O% - code% 88ENDPROC 89: 90REM ********************************************************************* 91DEF PROC_assemble_Module 92[OPT pass% 93 EQUD 0 ;Module_Start_Code 94 EQUD Module_Initialisation_Code 95 EQUD 0 ;Module_Finalisation_Code 96 EQUD Module_Service_Call_Handler 97 EQUD Module_Title_String 98 EQUD Module_Help_String 99 EQUD 0 ;Module_Help_And_Command_Keyword_Table 100.Module_Title_String EQUS ModuleTitle$+ CHR$0 101.Module_Help_String EQUS ModuleHelp$+ CHR$0 102 ALIGN 103\------------------------------------------------------------------------ 104; 105; In R10 = pointer to environment string 106; R11 = instantination number 107; R12 = pointer to private word 108; Out PSR_V 109; Bad R0-R6, R12 110; 111.Module_Initialisation_Code 112 B xensure_screen 113\------------------------------------------------------------------------ 114; 115; In R1 = service number 116; R12 = pointer to private word 117; Out R1 = 0 if claiming, R0, R2-R8 may be altered if intercepting 118; Bad R12 119; 120.Module_Service_Call_Handler 121 TEQ R1, #Service_DesktopWelcome 122 MOVneS pc, lr 123 STMFD (sp)!, {R0-R5, lr} 124 MOV R0, #ModHandReason_Claim 125 FNmov("", 3, sizeof_G) 126 SWI "XOS_Module" 127 LDMvsFD (sp)!, {R0-R5, pc}^ ; Damn! 128 MOV gb, R2 129FNflop("SMFD sp!, {F0-F3}") 130 MOV lr, #0 131 MOV R3, #G_SpriteArea 132.loop SUBS R3, R3, #4 133 STRhs lr, [gb, R3] ; Zero workspace 134 Bhi loop 135 BL init_rnd 136 BL xensure_screen 137 BLvc xexpand_sprite 138 BLvc xinit_animation 139 BLvc xinit_screen 140 MOVvc R4, #0 141.loop MOVvc R0, R4 142 MOVvc R1, #NFrames 143 BLvc xplot_animation 144 Bvs err_service 145 ADD R4, R4, #1 146 CMP R4, #NFrames 147 Ble loop 148.err_service 149FNflop("LMFD sp!, {F0-F3}") 150 BL xrestore_screen 151 MOV R2, gb 152 MOV R0, #ModHandReason_Free 153 SWI "XOS_Module" ; Release workspace 154 LDMFD (sp)!, {R0-R5, lr} 155 MOV R1, #0 156 MOVS pc, lr 157; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 158; 159; Choose a random starting point, and a random rotation 160; 161.vars EQUD VduExt_XWindLimit 162 EQUD VduExt_YWindLimit 163 EQUD VduExt_XEigFactor 164 EQUD VduExt_YEigFactor 165 EQUD -1 166.sprite_width EQUD Width% ; set when load sprite 167.sprite_height EQUD Height% ; units are 1/256 os 168.xinit_animation 169 STMFD (sp)!, {R4-R5, lr} 170 SUB sp, sp, #16 171 ADR R0, vars 172 MOV R1, sp 173 SWI "XOS_ReadVduVariables" 174 LDMFD (sp)!, {R1-R4} 175 LDMvsFD (sp)!, {R4-R5, pc} 176 ADD R1, R1, #1 177 ADD R2, R2, #1 178 MOV R4, R2, LSL R4 ; OS height of screen 179 MOV R0, R1, LSL R3 180 MOV R5, R0, LSL #8 - 1 ; Screen center in 1/256 OS unit 181 ADD R0, R5, R5 182 BL rnd_lo ; Choose random point on screen 183FNflop("FLT F0, R0") 184FNflop("STF F0, [gb, #G_StartXC]") 185 SUB R0, R5, R0 186FNflop("FLT F0, R0") 187FNflop("STF F0, [gb, #G_DeltaXC]") ; Distance XC moves to get to center 188 ADD R0, R4, R4, LSL #1 189 MOV R0, R0, LSL #8 ; 3/2*height 190 BL rnd_lo 191 SUB R0, R0, R4, LSL #8 - 2 ; [-1/4, +5/4)*height 192FNflop("FLT F0, R0") 193FNflop("STF F0, [gb, #G_StartYC]") 194 ADD R4, R4, R4, LSL #2 195 MOV R4, R4, LSL #8 - 3 ; 5/8 up screen 196 SUB R0, R4, R0 197FNflop("FLT F0, R0") 198FNflop("STF F0, [gb, #G_DeltaYC]") 199 BL rnd 200 MOV R0, R0, LSR #2 201FNflop("FLT F0, R0") 202 MOV R1, #&40000000 / 8 ; / 8 to save a multiply by 8 later 203FNflop("FLT F1, R1") 204FNflop("DVF F0, F0, F1") ; F0 = random [0, 8.0) 205FNflop("ATN F1, #1.0") ; F1 = PI/4 206FNflop("MUF F0, F0, F1") ; F0 = random [0, 2*PI) 207FNflop("STF F0, [gb, #G_StartAngle]") 208 LDR R0, sprite_width 209 LDR R1, sprite_height 210FNflop("FLT F0, R0") 211FNflop("STF F0, [gb, #G_Width]") ; os width / 2 * 256 212FNflop("FLT F1, R1") 213FNflop("STF F1, [gb, #G_Height]") 214 LDMFD (sp)!, {R4-R5, pc} 215; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 216; 217; Prepare two bank screen (allocating memory) 218; And initialise ChangedBox 219; 220.xinit_screen 221 STMFD (sp)!, {lr} 222 MVN R0, #0 223 MOV R1, #VduExt_XEigFactor 224 SWI "XOS_ReadModeVariable" 225 STRvc R2, [gb, #G_XEigFactor] 226 MOVvc R1, #VduExt_YEigFactor 227 SWIvc "XOS_ReadModeVariable" 228 STRvc R2, [gb, #G_YEigFactor] 229 MVNvc R0, #0 230 SWIvc "XOS_ChangedBox" 231 STRvc R0, [gb, #G_ChangedBox] ; Note old state 232 BLvc xinit_two_banks 233 MOVvc R0, #1 ; Enable 234 SWIvc "XOS_ChangedBox" 235 MOVvc R0, #2 ; Reset 236 SWIvc "XOS_ChangedBox" 237 LDMFD (sp)!, {pc} 238; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 239; 240.xunplot_sprite 241 STMFD (sp)!, {R4-R8, lr} 242] 243 IF Banked_P THEN 244[OPT pass% 245 FNgb("", 4, G_UnPlotBBox) 246 LDMIA R4, {R5-R8} ; What need to unplot on next screen 247 MVN R0, #0 248 SWI "XOS_ChangedBox" 249 LDMvcIB R1, {R0-R3} ; What just plotted 250 STMvcIA R4, {R0-R3} ; Store for next frame 251 LDRvc R1, [gb, #G_PlotBank] 252 MOVvc R0, #113 253 SWIvc "XOS_Byte" ; Display what just plotted 254 LDRvc R1, [gb, #G_PlotBank] 255 RSBvc R1, R1, #3 ; Toggle 1/2 256 STRvc R1, [gb, #G_PlotBank] 257 MOVvc R0, #112 258 SWIvc "XOS_Byte" ; Plot to screen now hidden 259] 260 ELSE 261[OPT pass% 262 MVN R0, #0 263 SWI "XOS_ChangedBox" 264 LDMvcIB R1, {R5-R8} 265] 266 ENDIF 267[OPT pass% 268 SUBvc R5, R5, #1 269 SUBvc R6, R6, #1 270 ADDvc R7, R7, #1 271 ADDvc R8, R8, #1 272 MOVvc R0, #&84 273 SWIvc "XWimp_SetColour" ; Background, wimp colour 4 274 LDRvc R3, [gb, #G_XEigFactor] 275 LDRvc R4, [gb, #G_YEigFactor] 276 MOVvc R0, #19 277 SWIvc "XOS_Byte" ; Pause one frame 278 MOVvc R0, #&44 279 MOVvc R1, R5, LSL R3 280 MOVvc R2, R6, LSL R4 281 SWIvc "XOS_Plot" ; Move to bottom left 282 MOVvc R0, #&67 283 MOVvc R1, R7, LSL R3 284 MOVvc R2, R8, LSL R4 285 SWIvc "XOS_Plot" ; Rectangle fill background 286 MOVvc R0, #1 ; Enable 287 SWIvc "XOS_ChangedBox" 288 MOVvc R0, #2 ; Reset 289 SWIvc "XOS_ChangedBox" 290 LDMFD (sp)!, {R4-R8, pc} 291; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 292; 293.xrestore_screen 294 STMFD (sp)!, {lr} 295 LDRvc R0, [gb, #G_ChangedBox] 296 ANDvc R0, R0, #1 297 SWIvc "XOS_ChangedBox" ; Restore status 298 BLvc xinit_one_bank 299 LDMFD (sp)!, {pc} 300;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 301; 302; In - 303; Out - 304; 305.init_rnd 306 MOV R0, #3 307 STMFD (sp)!, {R0-R1, lr} 308 MOV R1, sp 309 MOV R0, #14 310 SWI "XOS_Word" 311 LDMFD (sp)!, {R1-R2} 312 ADDS R0, R0, R1, ROR #13 313 RSCS R0, R0, R2, ROR #11 314 ADDeq R0, R0, #&CB 315 STR R0, [gb, #G_Seed] 316 LDMFD (sp)!, {pc}^ 317;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 318; 319; In - 320; Out R0 = random 32-bit 321; 322.rnd 323 LDR R0, [gb, #G_Seed] 324 AND R1, R0, #1 << 29 ; These values obtained by trial 325 ADD R1, R1, R1 ; and error. The algorithm is 326 EOR R0, R1, R0, ROR #13 ; old hat, GFSR I think 327 STR R0, [gb, #G_Seed] 328 MOVS pc, lr 329;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 330; 331; In R0 = unsigned 32-bit 332; Out R0 = random in range [0, R0) 333; 334.rnd_lo 335 STMFD (sp)!, {R0, lr} 336 BL rnd 337 LDMFD (sp)!, {R1} 338 BL udivmod 339 MOV R0, R1 ; Remainder 340 LDMFD (sp)!, {pc}^ 341;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 342; 343; In R0 = unsigned 344; R1 = unsigned, non-zero 345; Out R0 = R0 / R1 (rounded down towards zero) 346; R1 = R0 MOD R1 347; Note if R1 = 0 then get stuck in infinite loop! 348; 349.udivmod 350 FNdivrem(2, 0, 1, 3) 351 MOV R1, R0 352 MOV R0, R2 353 MOVS pc, lr 354; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 355] 356 IF Banked_P THEN 357[OPT pass% 358; 359; This ensures there is enough screen memory for two banks 360; 361.xensure_screen 362 STMFD (sp)!, {lr} 363 MVN R0, #0 364 MOV R1, #VduExt_ScreenSize 365 SWI "XOS_ReadModeVariable" 366 ADDvc R3, R2, R2 ; Need twice screen memory 367 MOVvc R0, #2 ; Screen 368 SWIvc "XOS_ReadDynamicArea" 369 LDMvsFD (sp)!, {pc} 370 SUBS R1, R3, R1 371 MOVgt R0, #2 ; Screen 372 SWIgt "XOS_ChangeDynamicArea" ; Enlargen it 373 LDMFD (sp)!, {pc} 374; 375; This is called in init_screen to set up the G_UnPlotBBox bit 376; And to page the correct bank 377; 378.xinit_two_banks 379 STMFD (sp)!, {lr} 380 BL xensure_screen 381 MVNvc R0, #0 382 MOVvc R1, #VduExt_YWindLimit 383 SWIvc "XOS_ReadModeVariable" 384 MOVvc R3, R2 385 MOVvc R1, #VduExt_XWindLimit 386 SWIvc "XOS_ReadModeVariable" 387 MOVvc R0, #0 388 MOVvc R1, #0 389 FNgb("vc", lr, G_UnPlotBBox) 390 STMvcIA lr, {R0-R3} ; Set up so clear bank 2 first time use it 391 MOVvc R1, #1 392 STRvc R1, [gb, #G_PlotBank] 393 MOVvc R0, #113 394 SWIvc "XOS_Byte" ; Display bank 1 395 MOVvc R1, #1 396 MOVvc R0, #112 397 SWIvc "XOS_Byte" ; Write to bank 1 398 LDMFD (sp)!, {pc} 399; 400; Called when finished animation 401; Note that if we try restoring screen memory, then Wimp gets confused 402; 403.xinit_one_bank 404 STMFD (sp)!, {lr} 405 MOV R0, #113 406 MOV R1, #1 407 SWI "XOS_Byte" ; Display bank 1 408 MOV R0, #112 409 MOV R0, #1 410 SWI "XOS_Byte" 411 LDMFD (sp)!, {pc} 412] 413 ELSE 414[OPT pass% 415; If not banked then these routines do nothing 416; 417.xinit_one_bank 418.xinit_two_banks 419.xensure_screen 420 BICS pc, lr, #PSR_V 421] 422 ENDIF 423[OPT pass% 424; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 425; Plot one frame of animation 426; 427; In R0 = [0..R1] 428; R1 = number of frames 429; Out - 430; 431] 432 d = 7 433 xc = 6 434 yc = 5 435 angle = d :REM careful 436 cos = 4 437 sin = angle :REM careful 438 w = 3 439 h = 2 440 REM leaves F0/F1 free 441[OPT pass% 442.xplot_animation 443 STMFD (sp)!, {R4-R7, lr} 444FNflop("SMFD sp!, {F4-F7}") 445FNflop("FLT F0, R0") 446FNflop("FLT F1, R1") 447FNflop("DVF d, F0, F1") ; d= in range [0..1] 448FNflop("ATN F0, #1.0") 449FNflop("MUF F0, F0, #2.0") ; F0 = PI/2 450FNflop("MUF d, d, F0") 451FNflop("SIN d, d") ; d= SIN(d*PI/2) in range [0..1] 452FNflop("LDF F0, [gb, #G_DeltaXC]") 453FNflop("LDF F1, [gb, #G_DeltaYC]") 454FNflop("MUF F0, F0, d") 455FNflop("MUF F1, F1, d") 456FNflop("LDF xc, [gb, #G_StartXC]") 457FNflop("LDF yc, [gb, #G_StartYC]") 458FNflop("ADF xc, xc, F0") ; xc= StartXC + F4*DeltaXC 459FNflop("ADF yc, yc, F1") ; yc= StartYC + F4*DeltaYC 460FNflop("LDF w, [gb, #G_Width]") 461FNflop("LDF h, [gb, #G_Height]") 462FNflop("MUF w, w, d") ; w = w * d (linear size grow) 463FNflop("MUF h, h, d") 464FNflop("LDF F0, [gb, #G_StartAngle]") 465FNflop("RSF F1, d, #1.0") 466FNflop("MUF angle, F0, F1") 467FNflop("COS cos, angle") 468FNflop("SIN sin, angle") 469 ; x0 = xc-w*COS-h*SIN y0 = yc-w*SIN+h*COS 470 ; x1 = xc+w*COS-h*SIN y1 = yc+w*SIN+h*COS 471 ; x2 = xc+w*COS+h*SIN y2 = yc+w*SIN-h*COS 472FNflop("MUF F0, w, cos") 473FNflop("MUF F1, h, sin") 474FNflop("ADF F1, F0, F1") ; F1 = w*COS+h*SIN 475FNflop("SUF F0, xc, F1") 476FNflop("FIX R0, F0") ; R0 = x0 477FNflop("ADF F0, xc, F1") 478FNflop("FIX R4, F0") ; R4 = x2 479FNflop("MUF F1, h, sin") 480FNflop("MUF F1, F1, #2.0") 481FNflop("SUF F0, F0, F1") 482FNflop("FIX R2, F0") ; R2 = x1 483FNflop("MUF F0, w, sin") 484FNflop("MUF F1, h, cos") 485FNflop("SUF F1, F0, F1") ; F1 = w*SIN-h*COS 486FNflop("SUF F0, yc, F1") 487FNflop("FIX R1, F0") ; R1 = y0 488FNflop("ADF F0, yc, F1") 489FNflop("FIX R5, F0") ; R5 = y2 490FNflop("MUF F1, h, cos") 491FNflop("MUF F1, F1, #2.0") 492FNflop("ADF F0, F0, F1") 493FNflop("FIX R3, F0") ; R3 = y1 494FNflop("LMFD sp!, {F4-F7}") 495 SUB sp, sp, #4*2*4 496 MOV R6, sp 497 SUB R7, R0, R2 498 ADD R7, R4, R7 ; x3 = x2 + x0 - x1 499 SUB lr, R1, R3 500 ADD lr, R5, lr ; y3 = y2 + y0 - y1 501 STMIA R6, {R0,R1, R2,R3, R4,R5, R7,lr} 502 BL xunplot_sprite 503 MOVvc R0, #&200 OR SpriteReason_PutSpriteTransformed 504 FNgb("vc", 1, G_SpriteArea) 505 LDRvc R2, [R1, #saFirst] 506 ADDvc R2, R1, R2 507 MOVvc R3, #1 ; Transform, not matrix 508 MOVvc R5, #8 ; Use mask if exists 509 MOVvc R7, #0 ; No translation table 510 SWIvc "XOS_SpriteOp" 511 ADD sp, sp, #4*2*4 512 LDMFD (sp)!, {R4-R7, pc} 513; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 514; 515.xexpand_sprite 516 STMFD (sp)!, {R4-R5, lr} 517 MOV R0, #0 ; Flags (fast decompression) 518 FNgb("", 1, G_WorkSpace) 519 ADR R2, compressed_data 520 LDR R3, compressed_size 521 FNgb("", 4, G_SpriteArea) 522 LDR R5, decompressed_size 523 SWI "XSquash_Decompress" 524 LDMFD (sp)!, {R4-R5, pc} 525; 526.compressed_size EQUD sizeof_Compressed% 527.decompressed_size EQUD sizeof_SpriteArea% 528.compressed_data 529] 530 P% += sizeof_Compressed% 531 O% += sizeof_Compressed% 532 IF FNaadr(P%)>L% THEN ERROR 1, "Assembler out of space" 533 IF pass% AND 2 THEN 534 SYS "Squash_Compress", 0, WorkSpace%, SpriteArea%, sizeof_SpriteArea%, FNaadr(compressed_data), sizeof_Compressed% 535 ENDIF 536ENDPROC 537: 538DEF PROC_Constants(code%, L%) 539LOCAL O%, P%, pass% 540 pass% = %1110 541O%=code%:P%=0:[OPT pass% 542.G_PrivateWord EQUD 0 ; pointer to private word 543.G_XEigFactor EQUD 0 ; VduExt variable for current mode 544.G_YEigFactor EQUD 0 ; VduExt variable for current mode 545.G_ChangedBox EQUD 0 ; bit 0 is enable state before we changed it 546.G_Seed EQUD 0 ; random number seed 547.G_StartXC FNr(8) ; floating point 548.G_StartYC FNr(8) ; floating point 549.G_DeltaXC FNr(8) ; floating point 550.G_DeltaYC FNr(8) ; floating point 551.G_StartAngle FNr(8) ; floating point 552.G_Width FNr(8) ; floating point 553.G_Height FNr(8) ; floating point 554] 555 IF Banked_P THEN 556[OPT pass% 557.G_UnPlotBBox FNr(16) ; x0,y0,x1,y1 inclusive pixel co-ords 558.G_PlotBank EQUD 0 ; toggles 1/2 559] 560 ENDIF 561[OPT pass% 562.G_SpriteArea FNr(sizeof_SpriteArea%) 563.G_WorkSpace FNr(sizeof_WorkSpace%) ; all 32K of it! 564.sizeof_G 565] 566ENDPROC 567: 568DEF PROC_Load_And_Parse_SpriteFile 569LOCAL t%, length%, s%, sp%, size%, w%, h%, x%, y% 570 SYS "OS_File", 17, In$ TO t%,,,,length% 571 IF t%<>1 THEN ERROR 1, "Can't find file "+ In$ 572 length% += 4 573 DIM s% length% 574 !s% = length% 575 SYS "OS_SpriteOp", &100+SpriteReason_LoadSpriteFile, s%, In$ 576 sp% = s% + s%!saFirst 577 size% = s%!saFirst + sp%!spNext 578 s%!saEnd = size% 579 s%!saFree = size% 580 s%!saNumber = 1 581 REM the above makes the first sprite the only sprite 582 SYS "OS_SpriteOp", &200+SpriteReason_ReadSpriteSize, s%, sp% TO ,,, w%, h%,, mode% 583 SYS "OS_ReadModeVariable", mode%, VduExt_XEigFactor TO ,, x% 584 SYS "OS_ReadModeVariable", mode%, VduExt_YEigFactor TO ,, y% 585 w% = w% << x% 586 h% = h% << y% 587 Width% = w%/2 * 256 :REM width radius, in draw units 588 Height% = h%/2 * 256 :REM height radius, in draw units 589 sizeof_SpriteArea% = size% 590 SpriteArea% = s% 591 SYS "Squash_Compress", 8, size%, s% TO sizeof_WorkSpace%, sizeof_Compressed% 592 DIM WorkSpace% sizeof_WorkSpace% 593 DIM buffer% sizeof_Compressed% 594 SYS "Squash_Compress", 0, WorkSpace%, s%, size%, buffer%, sizeof_Compressed% TO ,,,,, n% 595 sizeof_Compressed% -= n% 596ENDPROC 597: 598REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 599DEF FNsysvar(var$) 600LOCAL size%, type%, buf% 601 SYS "XOS_ReadVarVal", var$, 0, -1, 0, 1 TO ,, size%,, type% 602 IF size% = 0 THEN 603 ERROR 1, "System variable `"+ var$+ "' undefined." 604 ELSE 605 IF type%=1 THEN ERROR 1, "Bad system variable `"+ var$+ "', it's a number." 606 size% = -size% 607 DIM buf% size% 608 SYS "OS_ReadVarVal", var$, buf%, size%, 0, 1 609 buf%?(size%-1) = 13 610 var$ = $buf% 611 ENDIF 612= var$ 613: 614DEF PROC_Wimp_Error(A%,A$):ENDPROC 615DEF PROC_Wimp_CloseDown:ENDPROC
� >Source C� Create a module that provides an alternative desktop Welcome N� A sprite spinning from a random position to the center of the screen N� We use floating point because the parameters to PutSpriteTransformed K� are in draw units (1/256 OS) and multiplying would otherwise need � 64-bit arithmetic M� Now has compressed picture (saves 4K) & only claims workspace while -� animating (saving about 200 bytes!) G� Assumes sprite needs no pixtrans to plot. Ie YOU must ensure Q� sprites has same bits-per-pixel AND palette for configured desktop MODE ?� Handles sprite in high/low rez on screen low/high rez &� 1.00 18-Jun-1993 working version N� 1.10 27-Jun-1993 distributed version with docs + exageratted y start pos : � MACHINE: Archimedes "� LANGUAGE: BBC BASIC V v1.05 � AUTHOR: Cy Booker, G� 86 Church View, Main Road, Crockenhill, Swanley, Kent. � BR8 8JW : ?ț "<BasicV$Lib>.LibHandler" : � � �_handle_library_error +�_hard_initialise_LibHandler( 20, 011 ) FDebug_Wimp%=�:Debug%=�:On_Lib_Error_MODE%=-1:� Desktop Development ș "XHourglass_On" 2� �:ș "XHourglass_Off":�_handle_library_error : 6 In$ = �sysvar("MakeDesktopWelcomeModule$Input") 7 Out$ = �sysvar("MakeDesktopWelcomeModule$Output") > NFrames = �(�sysvar("MakeDesktopWelcomeModule$NFrames")) _ � NFrames < 1 � � 1, "Invalid value for system variable MakeDesktopWelcomeModule$NFrames" k Banked_P = (�(�sysvar("MakeDesktopWelcomeModule$Buffered")) = �("Y")) :� boolean, => no flicker \ Test_P = � :� boolean, => test !% ModuleTitle$ = "WelcomeAnimate" "R ModuleHelp$ = "WelcomeAnimate"+ �(9)+ "1.10 (27 Jun 1993)" :� Module #: $=� Now to load in the library files used by this program. %8�_load_library( "<BasicV_Assembler$Lib>.Misc", 020 ) &<�_load_library( "<BasicV_Assembler$Lib>.Services", 008 ) ':�_load_library( "<BasicV_Assembler$Lib>.VduExt", 001 ) (8�_load_library( "<BasicV_Assembler$Lib>.Flop", 004 ) )=�_load_library( "<BasicV_Assembler$Lib>.SpriteVar", 004 ) *: +N �_assemble( 160000 ) :� large for 32K decompress workspace , � Test_P � -4 ș "OS_ServiceCall",, Service_DesktopWelcome . � / � "Created "+ Out$ 0 ș "XHourglass_Off" 1� 2: 3K� ********************************************************************* 4� * Assemble all the code. 50� * IN: code_size% == size of code to use. 63� * OUT: code% <-- Byte array containing code. 7: 8� �_assemble( code_size% ) 9� lr, sp, pc, gb :� pass%, P%, O%, L% ; � code% code_size% < gb = 12 = sp = 13 > lr = 14 ? pc = 15 @ PSR_Z = 1 << 30 A PSR_C = 1 << 29 B PSR_V = 1 << 28 C# L% = code% + code_size% D �_Services(code%, L%) E �_VduExt(code%, L%) F �_SpriteVar(code%, L%) GC �_Load_And_Parse_SpriteFile :� after SpriteVar H �_Constants(code%, L%) I% ș "XHourglass_Percentage", 10 J% � pass%= %1100 � %1110 � %0010 K P% = 0 : O% = code% L �_assemble_Module M � (pass% � 2)=0 � N" � P%= code% � O%-1 � 4 O !P% = 0 P � P% Q( ș "XHourglass_Percentage", 50 R � S � pass% T% ș "XHourglass_Percentage", 99 U : V/ ș "OS_File", 10, Out$, &FFA,, code%, O% W@ ș "OS_Module", ModHandReason_CopyArea, code%, O% - code% X� Y: ZK� ********************************************************************* [� �_assemble_Module \[OPT pass% ]( EQUD 0 ;Module_Start_Code ^. EQUD Module_Initialisation_Code _/ EQUD 0 ;Module_Finalisation_Code `/ EQUD Module_Service_Call_Handler a' EQUD Module_Title_String b& EQUD Module_Help_String c< EQUD 0 ;Module_Help_And_Command_Keyword_Table d1.Module_Title_String EQUS ModuleTitle$+ �0 e0.Module_Help_String EQUS ModuleHelp$+ �0 f ALIGN gM\------------------------------------------------------------------------ h; i/; In R10 = pointer to environment string j'; R11 = instantination number k); R12 = pointer to private word l; Out PSR_V m; Bad R0-R6, R12 n; o.Module_Initialisation_Code p" B xensure_screen qM\------------------------------------------------------------------------ r; s; In R1 = service number t); R12 = pointer to private word uH; Out R1 = 0 if claiming, R0, R2-R8 may be altered if intercepting v; Bad R12 w; x .Module_Service_Call_Handler y/ TEQ R1, #Service_DesktopWelcome z MOVneS pc, lr {& STMFD (sp)!, {R0-R5, lr} |, MOV R0, #ModHandReason_Claim }! �mov("", 3, sizeof_G) ~ SWI "XOS_Module" ; LDMvsFD (sp)!, {R0-R5, pc}^ ; Damn! � MOV gb, R2 �!�flop("SMFD sp!, {F0-F3}") � MOV lr, #0 �% MOV R3, #G_SpriteArea �.loop SUBS R3, R3, #4 �D STRhs lr, [gb, R3] ; Zero workspace � Bhi loop � BL init_rnd �" BL xensure_screen �" BLvc xexpand_sprite �# BLvc xinit_animation � BLvc xinit_screen � MOVvc R4, #0 �.loop MOVvc R0, R4 � MOVvc R1, #NFrames �# BLvc xplot_animation � Bvs err_service � ADD R4, R4, #1 � CMP R4, #NFrames � Ble loop �.err_service �!�flop("LMFD sp!, {F0-F3}") �# BL xrestore_screen � MOV R2, gb �+ MOV R0, #ModHandReason_Free �G SWI "XOS_Module" ; Release workspace �& LDMFD (sp)!, {R0-R5, lr} � MOV R1, #0 � MOVS pc, lr �R; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ �; �;; Choose a random starting point, and a random rotation �; �%.vars EQUD VduExt_XWindLimit �% EQUD VduExt_YWindLimit �% EQUD VduExt_XEigFactor �% EQUD VduExt_YEigFactor � EQUD -1 �J.sprite_width EQUD Width% ; set when load sprite �H.sprite_height EQUD Height% ; units are 1/256 os �.xinit_animation �& STMFD (sp)!, {R4-R5, lr} � SUB sp, sp, #16 � ADR R0, vars � MOV R1, sp �* SWI "XOS_ReadVduVariables" �" LDMFD (sp)!, {R1-R4} �& LDMvsFD (sp)!, {R4-R5, pc} � ADD R1, R1, #1 � ADD R2, R2, #1 �I MOV R4, R2, LSL R4 ; OS height of screen �# MOV R0, R1, LSL R3 �T MOV R5, R0, LSL #8 - 1 ; Screen center in 1/256 OS unit � ADD R0, R5, R5 �S BL rnd_lo ; Choose random point on screen ��flop("FLT F0, R0") �)�flop("STF F0, [gb, #G_StartXC]") � SUB R0, R5, R0 ��flop("FLT F0, R0") �W�flop("STF F0, [gb, #G_DeltaXC]") ; Distance XC moves to get to center �& ADD R0, R4, R4, LSL #1 �@ MOV R0, R0, LSL #8 ; 3/2*height � BL rnd_lo �I SUB R0, R0, R4, LSL #8 - 2 ; [-1/4, +5/4)*height ��flop("FLT F0, R0") �)�flop("STF F0, [gb, #G_StartYC]") �& ADD R4, R4, R4, LSL #2 �C MOV R4, R4, LSL #8 - 3 ; 5/8 up screen � SUB R0, R4, R0 ��flop("FLT F0, R0") �)�flop("STF F0, [gb, #G_DeltaYC]") � BL rnd �" MOV R0, R0, LSR #2 ��flop("FLT F0, R0") �W MOV R1, #&40000000 / 8 ; / 8 to save a multiply by 8 later ��flop("FLT F1, R1") �I�flop("DVF F0, F0, F1") ; F0 = random [0, 8.0) �=�flop("ATN F1, #1.0") ; F1 = �/4 �I�flop("MUF F0, F0, F1") ; F0 = random [0, 2*�) �,�flop("STF F0, [gb, #G_StartAngle]") �$ LDR R0, sprite_width �% LDR R1, sprite_height ��flop("FLT F0, R0") �G�flop("STF F0, [gb, #G_Width]") ; os width / 2 * 256 ��flop("FLT F1, R1") �(�flop("STF F1, [gb, #G_Height]") �& LDMFD (sp)!, {R4-R5, pc} �R; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ �; �1; Prepare two bank screen (allocating memory) �; And initialise ChangedBox �; �.xinit_screen � STMFD (sp)!, {lr} � MVN R0, #0 �* MOV R1, #VduExt_XEigFactor �* SWI "XOS_ReadModeVariable" �+ STRvc R2, [gb, #G_XEigFactor] �* MOVvc R1, #VduExt_YEigFactor �* SWIvc "XOS_ReadModeVariable" �+ STRvc R2, [gb, #G_YEigFactor] � MVNvc R0, #0 �$ SWIvc "XOS_ChangedBox" �D STRvc R0, [gb, #G_ChangedBox] ; Note old state �# BLvc xinit_two_banks �< MOVvc R0, #1 ; Enable �$ SWIvc "XOS_ChangedBox" �; MOVvc R0, #2 ; Reset �$ SWIvc "XOS_ChangedBox" � LDMFD (sp)!, {pc} �R; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ �; �.xunplot_sprite �& STMFD (sp)!, {R4-R8, lr} �] � � Banked_P � �[OPT pass% �$ �gb("", 4, G_UnPlotBBox) �X LDMIA R4, {R5-R8} ; What need to unplot on next screen � MVN R0, #0 �$ SWI "XOS_ChangedBox" �G LDMvcIB R1, {R0-R3} ; What just plotted �J STMvcIA R4, {R0-R3} ; Store for next frame �) LDRvc R1, [gb, #G_PlotBank] � MOVvc R0, #113 �O SWIvc "XOS_Byte" ; Display what just plotted �) LDRvc R1, [gb, #G_PlotBank] �@ RSBvc R1, R1, #3 ; Toggle 1/2 ) STRvc R1, [gb, #G_PlotBank] 4 MOVvc R0, #112 O SWIvc "XOS_Byte" ; Plot to screen now hidden ] � [OPT pass% MVN R0, #0 $ SWI "XOS_ChangedBox" LDMvcIB R1, {R5-R8} ] � [OPT pass% SUBvc R5, R5, #1 SUBvc R6, R6, #1 ADDvc R7, R7, #1 ADDvc R8, R8, #1 MOVvc R0, #&84 O SWIvc "XWimp_SetColour" ; Background, wimp colour 4 + LDRvc R3, [gb, #G_XEigFactor] + LDRvc R4, [gb, #G_YEigFactor] MOVvc R0, #19 E SWIvc "XOS_Byte" ; Pause one frame MOVvc R0, #&44 " MOVvc R1, R5, LSL R3 " MOVvc R2, R6, LSL R4 I SWIvc "XOS_Plot" ; Move to bottom left MOVvc R0, #&67 " MOVvc R1, R7, LSL R3 " MOVvc R2, R8, LSL R4 O SWIvc "XOS_Plot" ; Rectangle fill background < MOVvc R0, #1 ; Enable $ SWIvc "XOS_ChangedBox" ; MOVvc R0, #2 ; Reset !$ SWIvc "XOS_ChangedBox" "& LDMFD (sp)!, {R4-R8, pc} #R; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $; %.xrestore_screen & STMFD (sp)!, {lr} '+ LDRvc R0, [gb, #G_ChangedBox] ( �vc R0, R0, #1 )D SWIvc "XOS_ChangedBox" ; Restore status *" BLvc xinit_one_bank + LDMFD (sp)!, {pc} ,R;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ -; . ; In - / ; Out - 0; 1 .init_rnd 2 MOV R0, #3 3& STMFD (sp)!, {R0-R1, lr} 4 MOV R1, sp 5 MOV R0, #14 6 SWI "XOS_Word" 7" LDMFD (sp)!, {R1-R2} 8' ADDS R0, R0, R1, ROR #13 9' RSCS R0, R0, R2, ROR #11 : ADDeq R0, R0, #&CB ;% STR R0, [gb, #G_Seed] < LDMFD (sp)!, {pc}^ =R;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ >; ? ; In - @; Out R0 = random 32-bit A; B.rnd C% LDR R0, [gb, #G_Seed] DJ � R1, R0, #1 << 29 ; These values obtained by trial EJ ADD R1, R1, R1 ; and error. The algorithm is FA � R0, R1, R0, ROR #13 ; old hat, GFSR I think G% STR R0, [gb, #G_Seed] H MOVS pc, lr IR;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ J; K ; In R0 = unsigned 32-bit L(; Out R0 = random in range [0, R0) M; N.rnd_lo O# STMFD (sp)!, {R0, lr} P BL rnd Q LDMFD (sp)!, {R1} R BL udivmod S? MOV R0, R1 ; Remainder T LDMFD (sp)!, {pc}^ UR;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ V; W; In R0 = unsigned X#; R1 = unsigned, non-zero Y4; Out R0 = R0 / R1 (rounded down towards zero) Z; R1 = R0 � R1 [6; Note if R1 = 0 then get stuck in infinite loop! \; ].udivmod ^ �divrem(2, 0, 1, 3) _ MOV R1, R0 ` MOV R0, R2 a MOVS pc, lr bR; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c] d � Banked_P � e[OPT pass% f; g>; This ensures there is enough screen memory for two banks h; i.xensure_screen j STMFD (sp)!, {lr} k MVN R0, #0 l* MOV R1, #VduExt_ScreenSize m* SWI "XOS_ReadModeVariable" nN ADDvc R3, R2, R2 ; Need twice screen memory o< MOVvc R0, #2 ; Screen p) SWIvc "XOS_ReadDynamicArea" q LDMvsFD (sp)!, {pc} r SUBS R1, R3, R1 s< MOVgt R0, #2 ; Screen tA SWIgt "XOS_ChangeDynamicArea" ; Enlargen it u LDMFD (sp)!, {pc} v; wB; This is called in init_screen to set up the G_UnPlotBBox bit x"; And to page the correct bank y; z.xinit_two_banks { STMFD (sp)!, {lr} |" BL xensure_screen } MVNvc R0, #0 ~* MOVvc R1, #VduExt_YWindLimit * SWIvc "XOS_ReadModeVariable" � MOVvc R3, R2 �* MOVvc R1, #VduExt_XWindLimit �* SWIvc "XOS_ReadModeVariable" � MOVvc R0, #0 � MOVvc R1, #0 �' �gb("vc", lr, G_UnPlotBBox) �^ STMvcIA lr, {R0-R3} ; Set up so clear bank 2 first time use it � MOVvc R1, #1 �) STRvc R1, [gb, #G_PlotBank] � MOVvc R0, #113 �D SWIvc "XOS_Byte" ; Display bank 1 � MOVvc R1, #1 � MOVvc R0, #112 �E SWIvc "XOS_Byte" ; Write to bank 1 � LDMFD (sp)!, {pc} �; �$; Called when finished animation �J; Note that if we try restoring screen memory, then Wimp gets confused �; �.xinit_one_bank � STMFD (sp)!, {lr} � MOV R0, #113 � MOV R1, #1 �T SWI "XOS_Byte" ; Display bank 1 � MOV R0, #112 � MOV R0, #1 � SWI "XOS_Byte" � LDMFD (sp)!, {pc} �] � � �[OPT pass% �2; If not banked then these routines do nothing �; �.xinit_one_bank �.xinit_two_banks �.xensure_screen �" BICS pc, lr, #PSR_V �] � � �[OPT pass% �R; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ �!; Plot one frame of animation �; �; In R0 = [0..R1] �!; R1 = number of frames � ; Out - �; �] � d = 7 � xc = 6 � yc = 5 �. angle = d :� careful � cos = 4 �. sin = angle :� careful � w = 3 � h = 2 � � leaves F0/F1 free �[OPT pass% �.xplot_animation �& STMFD (sp)!, {R4-R7, lr} �!�flop("SMFD sp!, {F4-F7}") ��flop("FLT F0, R0") ��flop("FLT F1, R1") �G�flop("DVF d, F0, F1") ; d= in range [0..1] ��flop("ATN F0, #1.0") �=�flop("MUF F0, F0, #2.0") ; F0 = �/2 ��flop("MUF d, d, F0") �P�flop("SIN d, d") ; d= �(d*�/2) in range [0..1] �)�flop("LDF F0, [gb, #G_DeltaXC]") �)�flop("LDF F1, [gb, #G_DeltaYC]") ��flop("MUF F0, F0, d") ��flop("MUF F1, F1, d") �)�flop("LDF xc, [gb, #G_StartXC]") �)�flop("LDF yc, [gb, #G_StartYC]") �M�flop("ADF xc, xc, F0") ; xc= StartXC + F4*DeltaXC �M�flop("ADF yc, yc, F1") ; yc= StartYC + F4*DeltaYC �&�flop("LDF w, [gb, #G_Width]") �'�flop("LDF h, [gb, #G_Height]") �Q�flop("MUF w, w, d") ; w = w * d (linear size grow) ��flop("MUF h, h, d") �,�flop("LDF F0, [gb, #G_StartAngle]") � �flop("RSF F1, d, #1.0") �"�flop("MUF angle, F0, F1") ��flop("COS cos, angle") ��flop("SIN sin, angle") �. ; x0 = xc-w*�-h*� y0 = yc-w*�+h*� �. ; x1 = xc+w*�-h*� y1 = yc+w*�+h*� �. ; x2 = xc+w*�+h*� y2 = yc+w*�-h*� ��flop("MUF F0, w, cos") ��flop("MUF F1, h, sin") �A�flop("ADF F1, F0, F1") ; F1 = w*�+h*� ��flop("SUF F0, xc, F1") �<�flop("FIX R0, F0") ; R0 = x0 ��flop("ADF F0, xc, F1") �<�flop("FIX R4, F0") ; R4 = x2 ��flop("MUF F1, h, sin") �!�flop("MUF F1, F1, #2.0") �+�flop("SUF F0, F0, F1") �<�flop("FIX R2, F0") ; R2 = x1 ��flop("MUF F0, w, sin") ��flop("MUF F1, h, cos") �A�flop("SUF F1, F0, F1") ; F1 = w*�-h*� ��flop("SUF F0, yc, F1") �<�flop("FIX R1, F0") ; R1 = y0 ��flop("ADF F0, yc, F1") �<�flop("FIX R5, F0") ; R5 = y2 ��flop("MUF F1, h, cos") �!�flop("MUF F1, F1, #2.0") ��flop("ADF F0, F0, F1") �<�flop("FIX R3, F0") ; R3 = y1 �!�flop("LMFD sp!, {F4-F7}") �" SUB sp, sp, #4*2*4 � MOV R6, sp � SUB R7, R0, R2 �G ADD R7, R4, R7 ; x3 = x2 + x0 - x1 � SUB lr, R1, R3 �G ADD lr, R5, lr ; y3 = y2 + y0 - y1 �4 STMIA R6, {R0,R1, R2,R3, R4,R5, R7,lr} �" BL xunplot_sprite �A MOVvc R0, #&200 � SpriteReason_PutSpriteTransformed �& �gb("vc", 1, G_SpriteArea) �& LDRvc R2, [R1, #saFirst] � ADDvc R2, R1, R2 �K MOVvc R3, #1 ; Transform, not matrix �H MOVvc R5, #8 ; Use mask if exists �J MOVvc R7, #0 ; No translation table �" SWIvc "XOS_SpriteOp" �" ADD sp, sp, #4*2*4 & LDMFD (sp)!, {R4-R7, pc} R; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ; .xexpand_sprite & STMFD (sp)!, {R4-R5, lr} P MOV R0, #0 ; Flags (fast decompression) # �gb("", 1, G_WorkSpace) ' ADR R2, compressed_data ' LDR R3, compressed_size $ �gb("", 4, G_SpriteArea) ) LDR R5, decompressed_size ( SWI "XSquash_Decompress" & LDMFD (sp)!, {R4-R5, pc} ; 3.compressed_size EQUD sizeof_Compressed% 3.decompressed_size EQUD sizeof_SpriteArea% .compressed_data ] P% += sizeof_Compressed% O% += sizeof_Compressed% 4 � �aadr(P%)>L% � � 1, "Assembler out of space" � pass% � 2 � x ș "Squash_Compress", 0, WorkSpace%, SpriteArea%, sizeof_SpriteArea%, �aadr(compressed_data), sizeof_Compressed% � � : � �_Constants(code%, L%) � O%, P%, pass% pass% = %1110 O%=code%:P%=0:[OPT pass% =.G_PrivateWord EQUD 0 ; pointer to private word F.G_XEigFactor EQUD 0 ; VduExt variable for current mode F.G_YEigFactor EQUD 0 ; VduExt variable for current mode !P.G_ChangedBox EQUD 0 ; bit 0 is enable state before we changed it "8.G_Seed EQUD 0 ; random number seed #3.G_StartXC �r(8) ; floating point $3.G_StartYC �r(8) ; floating point %3.G_DeltaXC �r(8) ; floating point &3.G_DeltaYC �r(8) ; floating point '3.G_StartAngle �r(8) ; floating point (3.G_Width �r(8) ; floating point )3.G_Height �r(8) ; floating point *] + � Banked_P � ,[OPT pass% -H.G_UnPlotBBox �r(16) ; x0,y0,x1,y1 inclusive pixel co-ords .1.G_PlotBank EQUD 0 ; toggles 1/2 /] 0 � 1[OPT pass% 2*.G_SpriteArea �r(sizeof_SpriteArea%) 3C.G_WorkSpace �r(sizeof_WorkSpace%) ; all 32K of it! 4 .sizeof_G 5] 6� 7: 8!� �_Load_And_Parse_SpriteFile 91� t%, length%, s%, sp%, size%, w%, h%, x%, y% :+ ș "OS_File", 17, In$ � t%,,,,length% ;, � t%<>1 � � 1, "Can't find file "+ In$ < length% += 4 = � s% length% > !s% = length% ?A ș "OS_SpriteOp", &100+SpriteReason_LoadSpriteFile, s%, In$ @ sp% = s% + s%!saFirst A% size% = s%!saFirst + sp%!spNext B s%!saEnd = size% C s%!saFree = size% D s%!saNumber = 1 E8 � the above makes the first sprite the only sprite FV ș "OS_SpriteOp", &200+SpriteReason_ReadSpriteSize, s%, sp% � ,,, w%, h%,, mode% G@ ș "OS_ReadModeVariable", mode%, VduExt_XEigFactor � ,, x% H@ ș "OS_ReadModeVariable", mode%, VduExt_YEigFactor � ,, y% I w% = w% << x% J h% = h% << y% KJ Width% = w%/2 * 256 :� width radius, in draw units LK Height% = h%/2 * 256 :� height radius, in draw units M sizeof_SpriteArea% = size% N SpriteArea% = s% OP ș "Squash_Compress", 8, size%, s% � sizeof_WorkSpace%, sizeof_Compressed% P$ � WorkSpace% sizeof_WorkSpace% Q" � buffer% sizeof_Compressed% R\ ș "Squash_Compress", 0, WorkSpace%, s%, size%, buffer%, sizeof_Compressed% � ,,,,, n% S sizeof_Compressed% -= n% T� U: VG� ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ W� �sysvar(var$) X� size%, type%, buf% Y? ș "XOS_ReadVarVal", var$, 0, -1, 0, 1 � ,, size%,, type% Z � size% = 0 � [6 � 1, "System variable `"+ var$+ "' undefined." \ � ]K � type%=1 � � 1, "Bad system variable `"+ var$+ "', it's a number." ^ size% = -size% _ � buf% size% `3 ș "OS_ReadVarVal", var$, buf%, size%, 0, 1 a buf%?(size%-1) = 13 b var$ = $buf% c � d = var$ e: f� �_Wimp_Error(A%,A$):� g� �_Wimp_CloseDown:� �
00000000 0d 00 01 0e f4 20 20 3e 53 6f 75 72 63 65 0d 00 |..... >Source..| 00000010 02 43 f4 20 20 43 72 65 61 74 65 20 61 20 6d 6f |.C. Create a mo| 00000020 64 75 6c 65 20 74 68 61 74 20 70 72 6f 76 69 64 |dule that provid| 00000030 65 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 |es an alternativ| 00000040 65 20 64 65 73 6b 74 6f 70 20 57 65 6c 63 6f 6d |e desktop Welcom| 00000050 65 0d 00 03 4e f4 20 20 20 20 20 41 20 73 70 72 |e...N. A spr| 00000060 69 74 65 20 73 70 69 6e 6e 69 6e 67 20 66 72 6f |ite spinning fro| 00000070 6d 20 61 20 72 61 6e 64 6f 6d 20 70 6f 73 69 74 |m a random posit| 00000080 69 6f 6e 20 74 6f 20 74 68 65 20 63 65 6e 74 65 |ion to the cente| 00000090 72 20 6f 66 20 74 68 65 20 73 63 72 65 65 6e 0d |r of the screen.| 000000a0 00 04 4e f4 20 20 20 20 20 57 65 20 75 73 65 20 |..N. We use | 000000b0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 62 |floating point b| 000000c0 65 63 61 75 73 65 20 74 68 65 20 70 61 72 61 6d |ecause the param| 000000d0 65 74 65 72 73 20 74 6f 20 50 75 74 53 70 72 69 |eters to PutSpri| 000000e0 74 65 54 72 61 6e 73 66 6f 72 6d 65 64 0d 00 05 |teTransformed...| 000000f0 4b f4 20 20 20 20 20 61 72 65 20 69 6e 20 64 72 |K. are in dr| 00000100 61 77 20 75 6e 69 74 73 20 28 31 2f 32 35 36 20 |aw units (1/256 | 00000110 4f 53 29 20 61 6e 64 20 6d 75 6c 74 69 70 6c 79 |OS) and multiply| 00000120 69 6e 67 20 77 6f 75 6c 64 20 6f 74 68 65 72 77 |ing would otherw| 00000130 69 73 65 20 6e 65 65 64 0d 00 06 1b f4 20 20 20 |ise need..... | 00000140 20 20 36 34 2d 62 69 74 20 61 72 69 74 68 6d 65 | 64-bit arithme| 00000150 74 69 63 0d 00 07 4d f4 20 20 20 20 20 4e 6f 77 |tic...M. Now| 00000160 20 68 61 73 20 63 6f 6d 70 72 65 73 73 65 64 20 | has compressed | 00000170 70 69 63 74 75 72 65 20 28 73 61 76 65 73 20 34 |picture (saves 4| 00000180 4b 29 20 26 20 6f 6e 6c 79 20 63 6c 61 69 6d 73 |K) & only claims| 00000190 20 77 6f 72 6b 73 70 61 63 65 20 77 68 69 6c 65 | workspace while| 000001a0 0d 00 08 2d f4 20 20 20 20 20 61 6e 69 6d 61 74 |...-. animat| 000001b0 69 6e 67 20 28 73 61 76 69 6e 67 20 61 62 6f 75 |ing (saving abou| 000001c0 74 20 32 30 30 20 62 79 74 65 73 21 29 0d 00 09 |t 200 bytes!)...| 000001d0 47 f4 20 20 20 20 20 41 73 73 75 6d 65 73 20 73 |G. Assumes s| 000001e0 70 72 69 74 65 20 6e 65 65 64 73 20 6e 6f 20 70 |prite needs no p| 000001f0 69 78 74 72 61 6e 73 20 74 6f 20 70 6c 6f 74 2e |ixtrans to plot.| 00000200 20 20 49 65 20 59 4f 55 20 6d 75 73 74 20 65 6e | Ie YOU must en| 00000210 73 75 72 65 0d 00 0a 51 f4 20 20 20 20 20 73 70 |sure...Q. sp| 00000220 72 69 74 65 73 20 68 61 73 20 73 61 6d 65 20 62 |rites has same b| 00000230 69 74 73 2d 70 65 72 2d 70 69 78 65 6c 20 41 4e |its-per-pixel AN| 00000240 44 20 70 61 6c 65 74 74 65 20 66 6f 72 20 63 6f |D palette for co| 00000250 6e 66 69 67 75 72 65 64 20 64 65 73 6b 74 6f 70 |nfigured desktop| 00000260 20 4d 4f 44 45 0d 00 0b 3f f4 20 20 20 20 20 48 | MODE...?. H| 00000270 61 6e 64 6c 65 73 20 73 70 72 69 74 65 20 69 6e |andles sprite in| 00000280 20 68 69 67 68 2f 6c 6f 77 20 72 65 7a 20 6f 6e | high/low rez on| 00000290 20 73 63 72 65 65 6e 20 6c 6f 77 2f 68 69 67 68 | screen low/high| 000002a0 20 72 65 7a 0d 00 0c 26 f4 20 31 2e 30 30 20 31 | rez...&. 1.00 1| 000002b0 38 2d 4a 75 6e 2d 31 39 39 33 20 77 6f 72 6b 69 |8-Jun-1993 worki| 000002c0 6e 67 20 76 65 72 73 69 6f 6e 0d 00 0d 4e f4 20 |ng version...N. | 000002d0 31 2e 31 30 20 32 37 2d 4a 75 6e 2d 31 39 39 33 |1.10 27-Jun-1993| 000002e0 20 64 69 73 74 72 69 62 75 74 65 64 20 76 65 72 | distributed ver| 000002f0 73 69 6f 6e 20 77 69 74 68 20 64 6f 63 73 20 2b |sion with docs +| 00000300 20 65 78 61 67 65 72 61 74 74 65 64 20 79 20 73 | exageratted y s| 00000310 74 61 72 74 20 70 6f 73 0d 00 0e 05 3a 0d 00 0f |tart pos....:...| 00000320 1b f4 20 20 4d 41 43 48 49 4e 45 3a 20 20 41 72 |.. MACHINE: Ar| 00000330 63 68 69 6d 65 64 65 73 0d 00 10 22 f4 20 20 4c |chimedes...". L| 00000340 41 4e 47 55 41 47 45 3a 20 42 42 43 20 42 41 53 |ANGUAGE: BBC BAS| 00000350 49 43 20 56 20 76 31 2e 30 35 0d 00 11 1b f4 20 |IC V v1.05..... | 00000360 20 41 55 54 48 4f 52 3a 20 20 20 43 79 20 42 6f | AUTHOR: Cy Bo| 00000370 6f 6b 65 72 2c 0d 00 12 47 f4 20 20 20 20 20 20 |oker,...G. | 00000380 20 20 20 20 20 20 38 36 20 43 68 75 72 63 68 20 | 86 Church | 00000390 56 69 65 77 2c 20 4d 61 69 6e 20 52 6f 61 64 2c |View, Main Road,| 000003a0 20 43 72 6f 63 6b 65 6e 68 69 6c 6c 2c 20 53 77 | Crockenhill, Sw| 000003b0 61 6e 6c 65 79 2c 20 4b 65 6e 74 2e 0d 00 13 18 |anley, Kent.....| 000003c0 f4 20 20 20 20 20 20 20 20 20 20 20 20 42 52 38 |. BR8| 000003d0 20 38 4a 57 0d 00 14 05 3a 0d 00 15 3f c8 9b 20 | 8JW....:...?.. | 000003e0 22 3c 42 61 73 69 63 56 24 4c 69 62 3e 2e 4c 69 |"<BasicV$Lib>.Li| 000003f0 62 48 61 6e 64 6c 65 72 22 20 20 3a 20 20 ee 20 |bHandler" : . | 00000400 85 20 f2 5f 68 61 6e 64 6c 65 5f 6c 69 62 72 61 |. ._handle_libra| 00000410 72 79 5f 65 72 72 6f 72 0d 00 16 2b f2 5f 68 61 |ry_error...+._ha| 00000420 72 64 5f 69 6e 69 74 69 61 6c 69 73 65 5f 4c 69 |rd_initialise_Li| 00000430 62 48 61 6e 64 6c 65 72 28 20 32 30 2c 20 30 31 |bHandler( 20, 01| 00000440 31 20 29 0d 00 17 46 44 65 62 75 67 5f 57 69 6d |1 )...FDebug_Wim| 00000450 70 25 3d a3 3a 44 65 62 75 67 25 3d b9 3a 4f 6e |p%=.:Debug%=.:On| 00000460 5f 4c 69 62 5f 45 72 72 6f 72 5f 4d 4f 44 45 25 |_Lib_Error_MODE%| 00000470 3d 2d 31 3a f4 20 44 65 73 6b 74 6f 70 20 44 65 |=-1:. Desktop De| 00000480 76 65 6c 6f 70 6d 65 6e 74 0d 00 18 16 c8 99 20 |velopment...... | 00000490 22 58 48 6f 75 72 67 6c 61 73 73 5f 4f 6e 22 0d |"XHourglass_On".| 000004a0 00 19 32 ee 20 85 3a c8 99 20 22 58 48 6f 75 72 |..2. .:.. "XHour| 000004b0 67 6c 61 73 73 5f 4f 66 66 22 3a f2 5f 68 61 6e |glass_Off":._han| 000004c0 64 6c 65 5f 6c 69 62 72 61 72 79 5f 65 72 72 6f |dle_library_erro| 000004d0 72 0d 00 1a 05 3a 0d 00 1b 36 20 20 49 6e 24 20 |r....:...6 In$ | 000004e0 20 3d 20 a4 73 79 73 76 61 72 28 22 4d 61 6b 65 | = .sysvar("Make| 000004f0 44 65 73 6b 74 6f 70 57 65 6c 63 6f 6d 65 4d 6f |DesktopWelcomeMo| 00000500 64 75 6c 65 24 49 6e 70 75 74 22 29 0d 00 1c 37 |dule$Input")...7| 00000510 20 20 4f 75 74 24 20 3d 20 a4 73 79 73 76 61 72 | Out$ = .sysvar| 00000520 28 22 4d 61 6b 65 44 65 73 6b 74 6f 70 57 65 6c |("MakeDesktopWel| 00000530 63 6f 6d 65 4d 6f 64 75 6c 65 24 4f 75 74 70 75 |comeModule$Outpu| 00000540 74 22 29 0d 00 1d 3e 20 20 4e 46 72 61 6d 65 73 |t")...> NFrames| 00000550 20 3d 20 bb 28 a4 73 79 73 76 61 72 28 22 4d 61 | = .(.sysvar("Ma| 00000560 6b 65 44 65 73 6b 74 6f 70 57 65 6c 63 6f 6d 65 |keDesktopWelcome| 00000570 4d 6f 64 75 6c 65 24 4e 46 72 61 6d 65 73 22 29 |Module$NFrames")| 00000580 29 0d 00 1e 5f 20 20 e7 20 4e 46 72 61 6d 65 73 |)..._ . NFrames| 00000590 20 3c 20 31 20 8c 20 85 20 31 2c 20 22 49 6e 76 | < 1 . . 1, "Inv| 000005a0 61 6c 69 64 20 76 61 6c 75 65 20 66 6f 72 20 73 |alid value for s| 000005b0 79 73 74 65 6d 20 76 61 72 69 61 62 6c 65 20 4d |ystem variable M| 000005c0 61 6b 65 44 65 73 6b 74 6f 70 57 65 6c 63 6f 6d |akeDesktopWelcom| 000005d0 65 4d 6f 64 75 6c 65 24 4e 46 72 61 6d 65 73 22 |eModule$NFrames"| 000005e0 0d 00 1f 6b 20 20 42 61 6e 6b 65 64 5f 50 20 3d |...k Banked_P =| 000005f0 20 28 97 28 a4 73 79 73 76 61 72 28 22 4d 61 6b | (.(.sysvar("Mak| 00000600 65 44 65 73 6b 74 6f 70 57 65 6c 63 6f 6d 65 4d |eDesktopWelcomeM| 00000610 6f 64 75 6c 65 24 42 75 66 66 65 72 65 64 22 29 |odule$Buffered")| 00000620 29 20 3d 20 97 28 22 59 22 29 29 20 20 20 20 20 |) = .("Y")) | 00000630 20 20 3a f4 20 62 6f 6f 6c 65 61 6e 2c 20 3d 3e | :. boolean, =>| 00000640 20 6e 6f 20 66 6c 69 63 6b 65 72 0d 00 20 5c 20 | no flicker.. \ | 00000650 20 54 65 73 74 5f 50 20 3d 20 b9 20 20 20 20 20 | Test_P = . | 00000660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 00000690 20 20 20 20 3a f4 20 62 6f 6f 6c 65 61 6e 2c 20 | :. boolean, | 000006a0 3d 3e 20 74 65 73 74 0d 00 21 25 20 20 4d 6f 64 |=> test..!% Mod| 000006b0 75 6c 65 54 69 74 6c 65 24 20 3d 20 22 57 65 6c |uleTitle$ = "Wel| 000006c0 63 6f 6d 65 41 6e 69 6d 61 74 65 22 0d 00 22 52 |comeAnimate".."R| 000006d0 20 20 4d 6f 64 75 6c 65 48 65 6c 70 24 20 3d 20 | ModuleHelp$ = | 000006e0 22 57 65 6c 63 6f 6d 65 41 6e 69 6d 61 74 65 22 |"WelcomeAnimate"| 000006f0 2b 20 bd 28 39 29 2b 20 22 31 2e 31 30 20 28 32 |+ .(9)+ "1.10 (2| 00000700 37 20 4a 75 6e 20 31 39 39 33 29 22 20 20 20 20 |7 Jun 1993)" | 00000710 20 20 20 20 20 3a f4 20 4d 6f 64 75 6c 65 0d 00 | :. Module..| 00000720 23 05 3a 0d 00 24 3d f4 20 20 4e 6f 77 20 74 6f |#.:..$=. Now to| 00000730 20 6c 6f 61 64 20 69 6e 20 74 68 65 20 6c 69 62 | load in the lib| 00000740 72 61 72 79 20 66 69 6c 65 73 20 75 73 65 64 20 |rary files used | 00000750 62 79 20 74 68 69 73 20 70 72 6f 67 72 61 6d 2e |by this program.| 00000760 0d 00 25 38 f2 5f 6c 6f 61 64 5f 6c 69 62 72 61 |..%8._load_libra| 00000770 72 79 28 20 22 3c 42 61 73 69 63 56 5f 41 73 73 |ry( "<BasicV_Ass| 00000780 65 6d 62 6c 65 72 24 4c 69 62 3e 2e 4d 69 73 63 |embler$Lib>.Misc| 00000790 22 2c 20 30 32 30 20 29 0d 00 26 3c f2 5f 6c 6f |", 020 )..&<._lo| 000007a0 61 64 5f 6c 69 62 72 61 72 79 28 20 22 3c 42 61 |ad_library( "<Ba| 000007b0 73 69 63 56 5f 41 73 73 65 6d 62 6c 65 72 24 4c |sicV_Assembler$L| 000007c0 69 62 3e 2e 53 65 72 76 69 63 65 73 22 2c 20 30 |ib>.Services", 0| 000007d0 30 38 20 29 0d 00 27 3a f2 5f 6c 6f 61 64 5f 6c |08 )..':._load_l| 000007e0 69 62 72 61 72 79 28 20 22 3c 42 61 73 69 63 56 |ibrary( "<BasicV| 000007f0 5f 41 73 73 65 6d 62 6c 65 72 24 4c 69 62 3e 2e |_Assembler$Lib>.| 00000800 56 64 75 45 78 74 22 2c 20 30 30 31 20 29 0d 00 |VduExt", 001 )..| 00000810 28 38 f2 5f 6c 6f 61 64 5f 6c 69 62 72 61 72 79 |(8._load_library| 00000820 28 20 22 3c 42 61 73 69 63 56 5f 41 73 73 65 6d |( "<BasicV_Assem| 00000830 62 6c 65 72 24 4c 69 62 3e 2e 46 6c 6f 70 22 2c |bler$Lib>.Flop",| 00000840 20 30 30 34 20 29 0d 00 29 3d f2 5f 6c 6f 61 64 | 004 )..)=._load| 00000850 5f 6c 69 62 72 61 72 79 28 20 22 3c 42 61 73 69 |_library( "<Basi| 00000860 63 56 5f 41 73 73 65 6d 62 6c 65 72 24 4c 69 62 |cV_Assembler$Lib| 00000870 3e 2e 53 70 72 69 74 65 56 61 72 22 2c 20 30 30 |>.SpriteVar", 00| 00000880 34 20 29 0d 00 2a 05 3a 0d 00 2b 4e 20 20 f2 5f |4 )..*.:..+N ._| 00000890 61 73 73 65 6d 62 6c 65 28 20 31 36 30 30 30 30 |assemble( 160000| 000008a0 20 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ) | 000008b0 20 3a f4 20 6c 61 72 67 65 20 66 6f 72 20 33 32 | :. large for 32| 000008c0 4b 20 64 65 63 6f 6d 70 72 65 73 73 20 77 6f 72 |K decompress wor| 000008d0 6b 73 70 61 63 65 0d 00 2c 10 20 20 e7 20 54 65 |kspace..,. . Te| 000008e0 73 74 5f 50 20 8c 0d 00 2d 34 20 20 20 20 c8 99 |st_P ...-4 ..| 000008f0 20 22 4f 53 5f 53 65 72 76 69 63 65 43 61 6c 6c | "OS_ServiceCall| 00000900 22 2c 2c 20 53 65 72 76 69 63 65 5f 44 65 73 6b |",, Service_Desk| 00000910 74 6f 70 57 65 6c 63 6f 6d 65 0d 00 2e 07 20 20 |topWelcome.... | 00000920 cd 0d 00 2f 18 20 20 f1 20 22 43 72 65 61 74 65 |.../. . "Create| 00000930 64 20 22 2b 20 4f 75 74 24 0d 00 30 19 20 20 c8 |d "+ Out$..0. .| 00000940 99 20 22 58 48 6f 75 72 67 6c 61 73 73 5f 4f 66 |. "XHourglass_Of| 00000950 66 22 0d 00 31 05 e0 0d 00 32 05 3a 0d 00 33 4b |f"..1....2.:..3K| 00000960 f4 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |. **************| 00000970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 000009a0 2a 2a 2a 2a 2a 2a 2a 0d 00 34 1e f4 20 2a 20 41 |*******..4.. * A| 000009b0 73 73 65 6d 62 6c 65 20 61 6c 6c 20 74 68 65 20 |ssemble all the | 000009c0 63 6f 64 65 2e 0d 00 35 30 f4 20 2a 20 49 4e 3a |code...50. * IN:| 000009d0 20 20 20 63 6f 64 65 5f 73 69 7a 65 25 20 3d 3d | code_size% ==| 000009e0 20 73 69 7a 65 20 6f 66 20 63 6f 64 65 20 74 6f | size of code to| 000009f0 20 75 73 65 2e 0d 00 36 33 f4 20 2a 20 4f 55 54 | use...63. * OUT| 00000a00 3a 20 20 63 6f 64 65 25 20 3c 2d 2d 20 42 79 74 |: code% <-- Byt| 00000a10 65 20 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 69 |e array containi| 00000a20 6e 67 20 63 6f 64 65 2e 0d 00 37 05 3a 0d 00 38 |ng code...7.:..8| 00000a30 1e dd 20 f2 5f 61 73 73 65 6d 62 6c 65 28 20 63 |.. ._assemble( c| 00000a40 6f 64 65 5f 73 69 7a 65 25 20 29 0d 00 39 14 ea |ode_size% )..9..| 00000a50 20 6c 72 2c 20 73 70 2c 20 70 63 2c 20 67 62 0d | lr, sp, pc, gb.| 00000a60 00 3a 17 ea 20 70 61 73 73 25 2c 20 50 25 2c 20 |.:.. pass%, P%, | 00000a70 4f 25 2c 20 4c 25 0d 00 3b 19 20 20 20 de 20 63 |O%, L%..;. . c| 00000a80 6f 64 65 25 20 63 6f 64 65 5f 73 69 7a 65 25 0d |ode% code_size%.| 00000a90 00 3c 13 20 20 20 67 62 20 20 20 20 20 20 3d 20 |.<. gb = | 00000aa0 31 32 0d 00 3d 13 20 20 20 73 70 20 20 20 20 20 |12..=. sp | 00000ab0 20 3d 20 31 33 0d 00 3e 13 20 20 20 6c 72 20 20 | = 13..>. lr | 00000ac0 20 20 20 20 3d 20 31 34 0d 00 3f 13 20 20 20 70 | = 14..?. p| 00000ad0 63 20 20 20 20 20 20 3d 20 31 35 0d 00 40 18 20 |c = 15..@. | 00000ae0 20 20 50 53 52 5f 5a 20 20 20 3d 20 31 20 3c 3c | PSR_Z = 1 <<| 00000af0 20 33 30 0d 00 41 18 20 20 20 50 53 52 5f 43 20 | 30..A. PSR_C | 00000b00 20 20 3d 20 31 20 3c 3c 20 32 39 0d 00 42 18 20 | = 1 << 29..B. | 00000b10 20 20 50 53 52 5f 56 20 20 20 3d 20 31 20 3c 3c | PSR_V = 1 <<| 00000b20 20 32 38 0d 00 43 23 20 20 20 4c 25 20 20 20 20 | 28..C# L% | 00000b30 20 20 3d 20 63 6f 64 65 25 20 2b 20 63 6f 64 65 | = code% + code| 00000b40 5f 73 69 7a 65 25 0d 00 44 1c 20 20 20 f2 5f 53 |_size%..D. ._S| 00000b50 65 72 76 69 63 65 73 28 63 6f 64 65 25 2c 20 4c |ervices(code%, L| 00000b60 25 29 0d 00 45 1a 20 20 20 f2 5f 56 64 75 45 78 |%)..E. ._VduEx| 00000b70 74 28 63 6f 64 65 25 2c 20 4c 25 29 0d 00 46 1d |t(code%, L%)..F.| 00000b80 20 20 20 f2 5f 53 70 72 69 74 65 56 61 72 28 63 | ._SpriteVar(c| 00000b90 6f 64 65 25 2c 20 4c 25 29 0d 00 47 43 20 20 20 |ode%, L%)..GC | 00000ba0 f2 5f 4c 6f 61 64 5f 41 6e 64 5f 50 61 72 73 65 |._Load_And_Parse| 00000bb0 5f 53 70 72 69 74 65 46 69 6c 65 20 20 20 20 20 |_SpriteFile | 00000bc0 20 20 20 20 20 20 20 20 20 20 3a f4 20 61 66 74 | :. aft| 00000bd0 65 72 20 53 70 72 69 74 65 56 61 72 0d 00 48 1d |er SpriteVar..H.| 00000be0 20 20 20 f2 5f 43 6f 6e 73 74 61 6e 74 73 28 63 | ._Constants(c| 00000bf0 6f 64 65 25 2c 20 4c 25 29 0d 00 49 25 20 20 20 |ode%, L%)..I% | 00000c00 c8 99 20 22 58 48 6f 75 72 67 6c 61 73 73 5f 50 |.. "XHourglass_P| 00000c10 65 72 63 65 6e 74 61 67 65 22 2c 20 31 30 0d 00 |ercentage", 10..| 00000c20 4a 25 20 20 20 e3 20 70 61 73 73 25 3d 20 25 31 |J% . pass%= %1| 00000c30 31 30 30 20 b8 20 25 31 31 31 30 20 88 20 25 30 |100 . %1110 . %0| 00000c40 30 31 30 0d 00 4b 1d 20 20 20 20 20 20 50 25 20 |010..K. P% | 00000c50 3d 20 30 20 3a 20 4f 25 20 3d 20 63 6f 64 65 25 |= 0 : O% = code%| 00000c60 0d 00 4c 1b 20 20 20 20 20 20 f2 5f 61 73 73 65 |..L. ._asse| 00000c70 6d 62 6c 65 5f 4d 6f 64 75 6c 65 0d 00 4d 1b 20 |mble_Module..M. | 00000c80 20 20 20 20 20 e7 20 28 70 61 73 73 25 20 80 20 | . (pass% . | 00000c90 32 29 3d 30 20 8c 0d 00 4e 22 20 20 20 20 20 20 |2)=0 ...N" | 00000ca0 20 20 e3 20 50 25 3d 20 63 6f 64 65 25 20 b8 20 | . P%= code% . | 00000cb0 4f 25 2d 31 20 88 20 34 0d 00 4f 15 20 20 20 20 |O%-1 . 4..O. | 00000cc0 20 20 20 20 20 20 21 50 25 20 3d 20 30 0d 00 50 | !P% = 0..P| 00000cd0 10 20 20 20 20 20 20 20 20 ed 20 50 25 0d 00 51 |. . P%..Q| 00000ce0 28 20 20 20 20 20 20 c8 99 20 22 58 48 6f 75 72 |( .. "XHour| 00000cf0 67 6c 61 73 73 5f 50 65 72 63 65 6e 74 61 67 65 |glass_Percentage| 00000d00 22 2c 20 35 30 0d 00 52 0b 20 20 20 20 20 20 cd |", 50..R. .| 00000d10 0d 00 53 0e 20 20 20 ed 20 70 61 73 73 25 0d 00 |..S. . pass%..| 00000d20 54 25 20 20 20 c8 99 20 22 58 48 6f 75 72 67 6c |T% .. "XHourgl| 00000d30 61 73 73 5f 50 65 72 63 65 6e 74 61 67 65 22 2c |ass_Percentage",| 00000d40 20 39 39 0d 00 55 08 20 20 20 3a 0d 00 56 2f 20 | 99..U. :..V/ | 00000d50 20 20 c8 99 20 22 4f 53 5f 46 69 6c 65 22 2c 20 | .. "OS_File", | 00000d60 31 30 2c 20 4f 75 74 24 2c 20 26 46 46 41 2c 2c |10, Out$, &FFA,,| 00000d70 20 63 6f 64 65 25 2c 20 4f 25 0d 00 57 40 20 20 | code%, O%..W@ | 00000d80 20 c8 99 20 22 4f 53 5f 4d 6f 64 75 6c 65 22 2c | .. "OS_Module",| 00000d90 20 4d 6f 64 48 61 6e 64 52 65 61 73 6f 6e 5f 43 | ModHandReason_C| 00000da0 6f 70 79 41 72 65 61 2c 20 63 6f 64 65 25 2c 20 |opyArea, code%, | 00000db0 4f 25 20 2d 20 63 6f 64 65 25 0d 00 58 05 e1 0d |O% - code%..X...| 00000dc0 00 59 05 3a 0d 00 5a 4b f4 20 2a 2a 2a 2a 2a 2a |.Y.:..ZK. ******| 00000dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00000e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d |***************.| 00000e10 00 5b 17 dd 20 f2 5f 61 73 73 65 6d 62 6c 65 5f |.[.. ._assemble_| 00000e20 4d 6f 64 75 6c 65 0d 00 5c 0e 5b 4f 50 54 20 70 |Module..\.[OPT p| 00000e30 61 73 73 25 0d 00 5d 28 20 20 20 20 20 20 20 20 |ass%..]( | 00000e40 45 51 55 44 20 20 20 20 30 20 3b 4d 6f 64 75 6c |EQUD 0 ;Modul| 00000e50 65 5f 53 74 61 72 74 5f 43 6f 64 65 0d 00 5e 2e |e_Start_Code..^.| 00000e60 20 20 20 20 20 20 20 20 45 51 55 44 20 20 20 20 | EQUD | 00000e70 4d 6f 64 75 6c 65 5f 49 6e 69 74 69 61 6c 69 73 |Module_Initialis| 00000e80 61 74 69 6f 6e 5f 43 6f 64 65 0d 00 5f 2f 20 20 |ation_Code.._/ | 00000e90 20 20 20 20 20 20 45 51 55 44 20 20 20 20 30 20 | EQUD 0 | 00000ea0 3b 4d 6f 64 75 6c 65 5f 46 69 6e 61 6c 69 73 61 |;Module_Finalisa| 00000eb0 74 69 6f 6e 5f 43 6f 64 65 0d 00 60 2f 20 20 20 |tion_Code..`/ | 00000ec0 20 20 20 20 20 45 51 55 44 20 20 20 20 4d 6f 64 | EQUD Mod| 00000ed0 75 6c 65 5f 53 65 72 76 69 63 65 5f 43 61 6c 6c |ule_Service_Call| 00000ee0 5f 48 61 6e 64 6c 65 72 0d 00 61 27 20 20 20 20 |_Handler..a' | 00000ef0 20 20 20 20 45 51 55 44 20 20 20 20 4d 6f 64 75 | EQUD Modu| 00000f00 6c 65 5f 54 69 74 6c 65 5f 53 74 72 69 6e 67 0d |le_Title_String.| 00000f10 00 62 26 20 20 20 20 20 20 20 20 45 51 55 44 20 |.b& EQUD | 00000f20 20 20 20 4d 6f 64 75 6c 65 5f 48 65 6c 70 5f 53 | Module_Help_S| 00000f30 74 72 69 6e 67 0d 00 63 3c 20 20 20 20 20 20 20 |tring..c< | 00000f40 20 45 51 55 44 20 20 20 20 30 20 3b 4d 6f 64 75 | EQUD 0 ;Modu| 00000f50 6c 65 5f 48 65 6c 70 5f 41 6e 64 5f 43 6f 6d 6d |le_Help_And_Comm| 00000f60 61 6e 64 5f 4b 65 79 77 6f 72 64 5f 54 61 62 6c |and_Keyword_Tabl| 00000f70 65 0d 00 64 31 2e 4d 6f 64 75 6c 65 5f 54 69 74 |e..d1.Module_Tit| 00000f80 6c 65 5f 53 74 72 69 6e 67 20 20 20 20 45 51 55 |le_String EQU| 00000f90 53 20 4d 6f 64 75 6c 65 54 69 74 6c 65 24 2b 20 |S ModuleTitle$+ | 00000fa0 bd 30 0d 00 65 30 2e 4d 6f 64 75 6c 65 5f 48 65 |.0..e0.Module_He| 00000fb0 6c 70 5f 53 74 72 69 6e 67 20 20 20 20 20 45 51 |lp_String EQ| 00000fc0 55 53 20 4d 6f 64 75 6c 65 48 65 6c 70 24 2b 20 |US ModuleHelp$+ | 00000fd0 bd 30 0d 00 66 11 20 20 20 20 20 20 20 20 41 4c |.0..f. AL| 00000fe0 49 47 4e 0d 00 67 4d 5c 2d 2d 2d 2d 2d 2d 2d 2d |IGN..gM\--------| 00000ff0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001030 0d 00 68 05 3b 0d 00 69 2f 3b 20 49 6e 20 20 20 |..h.;..i/; In | 00001040 20 52 31 30 20 3d 20 70 6f 69 6e 74 65 72 20 74 | R10 = pointer t| 00001050 6f 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 73 74 |o environment st| 00001060 72 69 6e 67 0d 00 6a 27 3b 20 20 20 20 20 20 20 |ring..j'; | 00001070 52 31 31 20 3d 20 69 6e 73 74 61 6e 74 69 6e 61 |R11 = instantina| 00001080 74 69 6f 6e 20 6e 75 6d 62 65 72 0d 00 6b 29 3b |tion number..k);| 00001090 20 20 20 20 20 20 20 52 31 32 20 3d 20 70 6f 69 | R12 = poi| 000010a0 6e 74 65 72 20 74 6f 20 70 72 69 76 61 74 65 20 |nter to private | 000010b0 77 6f 72 64 0d 00 6c 11 3b 20 4f 75 74 20 20 20 |word..l.; Out | 000010c0 50 53 52 5f 56 0d 00 6d 16 3b 20 42 61 64 20 20 |PSR_V..m.; Bad | 000010d0 20 52 30 2d 52 36 2c 20 52 31 32 0d 00 6e 05 3b | R0-R6, R12..n.;| 000010e0 0d 00 6f 1f 2e 4d 6f 64 75 6c 65 5f 49 6e 69 74 |..o..Module_Init| 000010f0 69 61 6c 69 73 61 74 69 6f 6e 5f 43 6f 64 65 0d |ialisation_Code.| 00001100 00 70 22 20 20 20 20 20 20 20 20 42 20 20 20 20 |.p" B | 00001110 20 20 20 78 65 6e 73 75 72 65 5f 73 63 72 65 65 | xensure_scree| 00001120 6e 0d 00 71 4d 5c 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |n..qM\----------| 00001130 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 |--------------..| 00001170 72 05 3b 0d 00 73 1f 3b 20 49 6e 20 20 20 20 52 |r.;..s.; In R| 00001180 31 20 3d 20 73 65 72 76 69 63 65 20 6e 75 6d 62 |1 = service numb| 00001190 65 72 0d 00 74 29 3b 20 20 20 20 20 20 20 52 31 |er..t); R1| 000011a0 32 20 3d 20 70 6f 69 6e 74 65 72 20 74 6f 20 70 |2 = pointer to p| 000011b0 72 69 76 61 74 65 20 77 6f 72 64 0d 00 75 48 3b |rivate word..uH;| 000011c0 20 4f 75 74 20 20 20 52 31 20 3d 20 30 20 69 66 | Out R1 = 0 if| 000011d0 20 63 6c 61 69 6d 69 6e 67 2c 20 52 30 2c 20 52 | claiming, R0, R| 000011e0 32 2d 52 38 20 6d 61 79 20 62 65 20 61 6c 74 65 |2-R8 may be alte| 000011f0 72 65 64 20 69 66 20 69 6e 74 65 72 63 65 70 74 |red if intercept| 00001200 69 6e 67 0d 00 76 0f 3b 20 42 61 64 20 20 20 52 |ing..v.; Bad R| 00001210 31 32 0d 00 77 05 3b 0d 00 78 20 2e 4d 6f 64 75 |12..w.;..x .Modu| 00001220 6c 65 5f 53 65 72 76 69 63 65 5f 43 61 6c 6c 5f |le_Service_Call_| 00001230 48 61 6e 64 6c 65 72 0d 00 79 2f 20 20 20 20 20 |Handler..y/ | 00001240 20 20 20 54 45 51 20 20 20 20 20 52 31 2c 20 23 | TEQ R1, #| 00001250 53 65 72 76 69 63 65 5f 44 65 73 6b 74 6f 70 57 |Service_DesktopW| 00001260 65 6c 63 6f 6d 65 0d 00 7a 1a 20 20 20 20 20 20 |elcome..z. | 00001270 20 20 4d 4f 56 6e 65 53 20 20 70 63 2c 20 6c 72 | MOVneS pc, lr| 00001280 0d 00 7b 26 20 20 20 20 20 20 20 20 53 54 4d 46 |..{& STMF| 00001290 44 20 20 20 28 73 70 29 21 2c 20 7b 52 30 2d 52 |D (sp)!, {R0-R| 000012a0 35 2c 20 6c 72 7d 0d 00 7c 2c 20 20 20 20 20 20 |5, lr}..|, | 000012b0 20 20 4d 4f 56 20 20 20 20 20 52 30 2c 20 23 4d | MOV R0, #M| 000012c0 6f 64 48 61 6e 64 52 65 61 73 6f 6e 5f 43 6c 61 |odHandReason_Cla| 000012d0 69 6d 0d 00 7d 21 20 20 20 20 20 20 20 20 a4 6d |im..}! .m| 000012e0 6f 76 28 22 22 2c 20 33 2c 20 73 69 7a 65 6f 66 |ov("", 3, sizeof| 000012f0 5f 47 29 0d 00 7e 20 20 20 20 20 20 20 20 20 53 |_G)..~ S| 00001300 57 49 20 20 20 20 20 22 58 4f 53 5f 4d 6f 64 75 |WI "XOS_Modu| 00001310 6c 65 22 0d 00 7f 3b 20 20 20 20 20 20 20 20 4c |le"...; L| 00001320 44 4d 76 73 46 44 20 28 73 70 29 21 2c 20 7b 52 |DMvsFD (sp)!, {R| 00001330 30 2d 52 35 2c 20 70 63 7d 5e 20 20 20 20 20 20 |0-R5, pc}^ | 00001340 20 20 20 20 20 20 20 3b 20 44 61 6d 6e 21 0d 00 | ; Damn!..| 00001350 80 1a 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |.. MOV | 00001360 20 20 67 62 2c 20 52 32 0d 00 81 21 a4 66 6c 6f | gb, R2...!.flo| 00001370 70 28 22 53 4d 46 44 20 20 20 20 73 70 21 2c 20 |p("SMFD sp!, | 00001380 7b 46 30 2d 46 33 7d 22 29 0d 00 82 1a 20 20 20 |{F0-F3}").... | 00001390 20 20 20 20 20 4d 4f 56 20 20 20 20 20 6c 72 2c | MOV lr,| 000013a0 20 23 30 0d 00 83 25 20 20 20 20 20 20 20 20 4d | #0...% M| 000013b0 4f 56 20 20 20 20 20 52 33 2c 20 23 47 5f 53 70 |OV R3, #G_Sp| 000013c0 72 69 74 65 41 72 65 61 0d 00 84 1e 2e 6c 6f 6f |riteArea.....loo| 000013d0 70 20 20 20 53 55 42 53 20 20 20 20 52 33 2c 20 |p SUBS R3, | 000013e0 52 33 2c 20 23 34 0d 00 85 44 20 20 20 20 20 20 |R3, #4...D | 000013f0 20 20 53 54 52 68 73 20 20 20 6c 72 2c 20 5b 67 | STRhs lr, [g| 00001400 62 2c 20 52 33 5d 20 20 20 20 20 20 20 20 20 20 |b, R3] | 00001410 20 20 20 20 20 20 20 20 20 20 3b 20 5a 65 72 6f | ; Zero| 00001420 20 77 6f 72 6b 73 70 61 63 65 0d 00 86 18 20 20 | workspace.... | 00001430 20 20 20 20 20 20 42 68 69 20 20 20 20 20 6c 6f | Bhi lo| 00001440 6f 70 0d 00 87 1c 20 20 20 20 20 20 20 20 42 4c |op.... BL| 00001450 20 20 20 20 20 20 69 6e 69 74 5f 72 6e 64 0d 00 | init_rnd..| 00001460 88 22 20 20 20 20 20 20 20 20 42 4c 20 20 20 20 |." BL | 00001470 20 20 78 65 6e 73 75 72 65 5f 73 63 72 65 65 6e | xensure_screen| 00001480 0d 00 89 22 20 20 20 20 20 20 20 20 42 4c 76 63 |..." BLvc| 00001490 20 20 20 20 78 65 78 70 61 6e 64 5f 73 70 72 69 | xexpand_spri| 000014a0 74 65 0d 00 8a 23 20 20 20 20 20 20 20 20 42 4c |te...# BL| 000014b0 76 63 20 20 20 20 78 69 6e 69 74 5f 61 6e 69 6d |vc xinit_anim| 000014c0 61 74 69 6f 6e 0d 00 8b 20 20 20 20 20 20 20 20 |ation... | 000014d0 20 42 4c 76 63 20 20 20 20 78 69 6e 69 74 5f 73 | BLvc xinit_s| 000014e0 63 72 65 65 6e 0d 00 8c 1a 20 20 20 20 20 20 20 |creen.... | 000014f0 20 4d 4f 56 76 63 20 20 20 52 34 2c 20 23 30 0d | MOVvc R4, #0.| 00001500 00 8d 1a 2e 6c 6f 6f 70 20 20 20 4d 4f 56 76 63 |....loop MOVvc| 00001510 20 20 20 52 30 2c 20 52 34 0d 00 8e 20 20 20 20 | R0, R4... | 00001520 20 20 20 20 20 4d 4f 56 76 63 20 20 20 52 31 2c | MOVvc R1,| 00001530 20 23 4e 46 72 61 6d 65 73 0d 00 8f 23 20 20 20 | #NFrames...# | 00001540 20 20 20 20 20 42 4c 76 63 20 20 20 20 78 70 6c | BLvc xpl| 00001550 6f 74 5f 61 6e 69 6d 61 74 69 6f 6e 0d 00 90 1f |ot_animation....| 00001560 20 20 20 20 20 20 20 20 42 76 73 20 20 20 20 20 | Bvs | 00001570 65 72 72 5f 73 65 72 76 69 63 65 0d 00 91 1e 20 |err_service.... | 00001580 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 52 | ADD R| 00001590 34 2c 20 52 34 2c 20 23 31 0d 00 92 20 20 20 20 |4, R4, #1... | 000015a0 20 20 20 20 20 43 4d 50 20 20 20 20 20 52 34 2c | CMP R4,| 000015b0 20 23 4e 46 72 61 6d 65 73 0d 00 93 18 20 20 20 | #NFrames.... | 000015c0 20 20 20 20 20 42 6c 65 20 20 20 20 20 6c 6f 6f | Ble loo| 000015d0 70 0d 00 94 10 2e 65 72 72 5f 73 65 72 76 69 63 |p.....err_servic| 000015e0 65 0d 00 95 21 a4 66 6c 6f 70 28 22 4c 4d 46 44 |e...!.flop("LMFD| 000015f0 20 20 20 20 73 70 21 2c 20 7b 46 30 2d 46 33 7d | sp!, {F0-F3}| 00001600 22 29 0d 00 96 23 20 20 20 20 20 20 20 20 42 4c |")...# BL| 00001610 20 20 20 20 20 20 78 72 65 73 74 6f 72 65 5f 73 | xrestore_s| 00001620 63 72 65 65 6e 0d 00 97 1a 20 20 20 20 20 20 20 |creen.... | 00001630 20 4d 4f 56 20 20 20 20 20 52 32 2c 20 67 62 0d | MOV R2, gb.| 00001640 00 98 2b 20 20 20 20 20 20 20 20 4d 4f 56 20 20 |..+ MOV | 00001650 20 20 20 52 30 2c 20 23 4d 6f 64 48 61 6e 64 52 | R0, #ModHandR| 00001660 65 61 73 6f 6e 5f 46 72 65 65 0d 00 99 47 20 20 |eason_Free...G | 00001670 20 20 20 20 20 20 53 57 49 20 20 20 20 20 22 58 | SWI "X| 00001680 4f 53 5f 4d 6f 64 75 6c 65 22 20 20 20 20 20 20 |OS_Module" | 00001690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 000016a0 52 65 6c 65 61 73 65 20 77 6f 72 6b 73 70 61 63 |Release workspac| 000016b0 65 0d 00 9a 26 20 20 20 20 20 20 20 20 4c 44 4d |e...& LDM| 000016c0 46 44 20 20 20 28 73 70 29 21 2c 20 7b 52 30 2d |FD (sp)!, {R0-| 000016d0 52 35 2c 20 6c 72 7d 0d 00 9b 1a 20 20 20 20 20 |R5, lr}.... | 000016e0 20 20 20 4d 4f 56 20 20 20 20 20 52 31 2c 20 23 | MOV R1, #| 000016f0 30 0d 00 9c 1a 20 20 20 20 20 20 20 20 4d 4f 56 |0.... MOV| 00001700 53 20 20 20 20 70 63 2c 20 6c 72 0d 00 9d 52 3b |S pc, lr...R;| 00001710 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e | ~~~~~~~~~~~~~~~| 00001720 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e |~~~~~~~~~~~~~~~~| * 00001750 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 0d 00 9e |~~~~~~~~~~~~~...| 00001760 05 3b 0d 00 9f 3b 3b 20 43 68 6f 6f 73 65 20 61 |.;...;; Choose a| 00001770 20 72 61 6e 64 6f 6d 20 73 74 61 72 74 69 6e 67 | random starting| 00001780 20 70 6f 69 6e 74 2c 20 61 6e 64 20 61 20 72 61 | point, and a ra| 00001790 6e 64 6f 6d 20 72 6f 74 61 74 69 6f 6e 0d 00 a0 |ndom rotation...| 000017a0 05 3b 0d 00 a1 25 2e 76 61 72 73 20 20 20 45 51 |.;...%.vars EQ| 000017b0 55 44 20 20 20 20 56 64 75 45 78 74 5f 58 57 69 |UD VduExt_XWi| 000017c0 6e 64 4c 69 6d 69 74 0d 00 a2 25 20 20 20 20 20 |ndLimit...% | 000017d0 20 20 20 45 51 55 44 20 20 20 20 56 64 75 45 78 | EQUD VduEx| 000017e0 74 5f 59 57 69 6e 64 4c 69 6d 69 74 0d 00 a3 25 |t_YWindLimit...%| 000017f0 20 20 20 20 20 20 20 20 45 51 55 44 20 20 20 20 | EQUD | 00001800 56 64 75 45 78 74 5f 58 45 69 67 46 61 63 74 6f |VduExt_XEigFacto| 00001810 72 0d 00 a4 25 20 20 20 20 20 20 20 20 45 51 55 |r...% EQU| 00001820 44 20 20 20 20 56 64 75 45 78 74 5f 59 45 69 67 |D VduExt_YEig| 00001830 46 61 63 74 6f 72 0d 00 a5 13 20 20 20 20 20 20 |Factor.... | 00001840 20 20 45 51 55 44 20 2d 31 0d 00 a6 4a 2e 73 70 | EQUD -1...J.sp| 00001850 72 69 74 65 5f 77 69 64 74 68 20 20 20 45 51 55 |rite_width EQU| 00001860 44 20 57 69 64 74 68 25 20 20 20 20 20 20 20 20 |D Width% | 00001870 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 73 | ; s| 00001880 65 74 20 77 68 65 6e 20 6c 6f 61 64 20 73 70 72 |et when load spr| 00001890 69 74 65 0d 00 a7 48 2e 73 70 72 69 74 65 5f 68 |ite...H.sprite_h| 000018a0 65 69 67 68 74 20 20 45 51 55 44 20 48 65 69 67 |eight EQUD Heig| 000018b0 68 74 25 20 20 20 20 20 20 20 20 20 20 20 20 20 |ht% | 000018c0 20 20 20 20 20 20 20 3b 20 75 6e 69 74 73 20 61 | ; units a| 000018d0 72 65 20 31 2f 32 35 36 20 6f 73 0d 00 a8 14 2e |re 1/256 os.....| 000018e0 78 69 6e 69 74 5f 61 6e 69 6d 61 74 69 6f 6e 0d |xinit_animation.| 000018f0 00 a9 26 20 20 20 20 20 20 20 20 53 54 4d 46 44 |..& STMFD| 00001900 20 20 20 28 73 70 29 21 2c 20 7b 52 34 2d 52 35 | (sp)!, {R4-R5| 00001910 2c 20 6c 72 7d 0d 00 aa 1f 20 20 20 20 20 20 20 |, lr}.... | 00001920 20 53 55 42 20 20 20 20 20 73 70 2c 20 73 70 2c | SUB sp, sp,| 00001930 20 23 31 36 0d 00 ab 1c 20 20 20 20 20 20 20 20 | #16.... | 00001940 41 44 52 20 20 20 20 20 52 30 2c 20 76 61 72 73 |ADR R0, vars| 00001950 0d 00 ac 1a 20 20 20 20 20 20 20 20 4d 4f 56 20 |.... MOV | 00001960 20 20 20 20 52 31 2c 20 73 70 0d 00 ad 2a 20 20 | R1, sp...* | 00001970 20 20 20 20 20 20 53 57 49 20 20 20 20 20 22 58 | SWI "X| 00001980 4f 53 5f 52 65 61 64 56 64 75 56 61 72 69 61 62 |OS_ReadVduVariab| 00001990 6c 65 73 22 0d 00 ae 22 20 20 20 20 20 20 20 20 |les"..." | 000019a0 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c 20 7b |LDMFD (sp)!, {| 000019b0 52 31 2d 52 34 7d 0d 00 af 26 20 20 20 20 20 20 |R1-R4}...& | 000019c0 20 20 4c 44 4d 76 73 46 44 20 28 73 70 29 21 2c | LDMvsFD (sp)!,| 000019d0 20 7b 52 34 2d 52 35 2c 20 70 63 7d 0d 00 b0 1e | {R4-R5, pc}....| 000019e0 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 | ADD | 000019f0 52 31 2c 20 52 31 2c 20 23 31 0d 00 b1 1e 20 20 |R1, R1, #1.... | 00001a00 20 20 20 20 20 20 41 44 44 20 20 20 20 20 52 32 | ADD R2| 00001a10 2c 20 52 32 2c 20 23 31 0d 00 b2 49 20 20 20 20 |, R2, #1...I | 00001a20 20 20 20 20 4d 4f 56 20 20 20 20 20 52 34 2c 20 | MOV R4, | 00001a30 52 32 2c 20 4c 53 4c 20 52 34 20 20 20 20 20 20 |R2, LSL R4 | 00001a40 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 4f 53 | ; OS| 00001a50 20 68 65 69 67 68 74 20 6f 66 20 73 63 72 65 65 | height of scree| 00001a60 6e 0d 00 b3 23 20 20 20 20 20 20 20 20 4d 4f 56 |n...# MOV| 00001a70 20 20 20 20 20 52 30 2c 20 52 31 2c 20 4c 53 4c | R0, R1, LSL| 00001a80 20 52 33 20 0d 00 b4 54 20 20 20 20 20 20 20 20 | R3 ...T | 00001a90 4d 4f 56 20 20 20 20 20 52 35 2c 20 52 30 2c 20 |MOV R5, R0, | 00001aa0 4c 53 4c 20 23 38 20 2d 20 31 20 20 20 20 20 20 |LSL #8 - 1 | 00001ab0 20 20 20 20 20 20 20 20 3b 20 53 63 72 65 65 6e | ; Screen| 00001ac0 20 63 65 6e 74 65 72 20 69 6e 20 31 2f 32 35 36 | center in 1/256| 00001ad0 20 4f 53 20 75 6e 69 74 0d 00 b5 1e 20 20 20 20 | OS unit.... | 00001ae0 20 20 20 20 41 44 44 20 20 20 20 20 52 30 2c 20 | ADD R0, | 00001af0 52 35 2c 20 52 35 0d 00 b6 53 20 20 20 20 20 20 |R5, R5...S | 00001b00 20 20 42 4c 20 20 20 20 20 20 72 6e 64 5f 6c 6f | BL rnd_lo| 00001b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001b20 20 20 20 20 20 20 20 20 20 20 3b 20 43 68 6f 6f | ; Choo| 00001b30 73 65 20 72 61 6e 64 6f 6d 20 70 6f 69 6e 74 20 |se random point | 00001b40 6f 6e 20 73 63 72 65 65 6e 0d 00 b7 1b a4 66 6c |on screen.....fl| 00001b50 6f 70 28 22 46 4c 54 20 20 20 20 20 46 30 2c 20 |op("FLT F0, | 00001b60 52 30 22 29 0d 00 b8 29 a4 66 6c 6f 70 28 22 53 |R0")...).flop("S| 00001b70 54 46 20 20 20 20 20 46 30 2c 20 5b 67 62 2c 20 |TF F0, [gb, | 00001b80 23 47 5f 53 74 61 72 74 58 43 5d 22 29 0d 00 b9 |#G_StartXC]")...| 00001b90 1e 20 20 20 20 20 20 20 20 53 55 42 20 20 20 20 |. SUB | 00001ba0 20 52 30 2c 20 52 35 2c 20 52 30 0d 00 ba 1b a4 | R0, R5, R0.....| 00001bb0 66 6c 6f 70 28 22 46 4c 54 20 20 20 20 20 46 30 |flop("FLT F0| 00001bc0 2c 20 52 30 22 29 0d 00 bb 57 a4 66 6c 6f 70 28 |, R0")...W.flop(| 00001bd0 22 53 54 46 20 20 20 20 20 46 30 2c 20 5b 67 62 |"STF F0, [gb| 00001be0 2c 20 23 47 5f 44 65 6c 74 61 58 43 5d 22 29 20 |, #G_DeltaXC]") | 00001bf0 20 20 20 20 20 20 20 20 20 3b 20 44 69 73 74 61 | ; Dista| 00001c00 6e 63 65 20 58 43 20 6d 6f 76 65 73 20 74 6f 20 |nce XC moves to | 00001c10 67 65 74 20 74 6f 20 63 65 6e 74 65 72 0d 00 bc |get to center...| 00001c20 26 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 |& ADD | 00001c30 20 52 30 2c 20 52 34 2c 20 52 34 2c 20 4c 53 4c | R0, R4, R4, LSL| 00001c40 20 23 31 0d 00 bd 40 20 20 20 20 20 20 20 20 4d | #1...@ M| 00001c50 4f 56 20 20 20 20 20 52 30 2c 20 52 30 2c 20 4c |OV R0, R0, L| 00001c60 53 4c 20 23 38 20 20 20 20 20 20 20 20 20 20 20 |SL #8 | 00001c70 20 20 20 20 20 20 20 3b 20 33 2f 32 2a 68 65 69 | ; 3/2*hei| 00001c80 67 68 74 0d 00 be 1a 20 20 20 20 20 20 20 20 42 |ght.... B| 00001c90 4c 20 20 20 20 20 20 72 6e 64 5f 6c 6f 0d 00 bf |L rnd_lo...| 00001ca0 49 20 20 20 20 20 20 20 20 53 55 42 20 20 20 20 |I SUB | 00001cb0 20 52 30 2c 20 52 30 2c 20 52 34 2c 20 4c 53 4c | R0, R0, R4, LSL| 00001cc0 20 23 38 20 2d 20 32 20 20 20 20 20 20 20 20 20 | #8 - 2 | 00001cd0 20 3b 20 5b 2d 31 2f 34 2c 20 2b 35 2f 34 29 2a | ; [-1/4, +5/4)*| 00001ce0 68 65 69 67 68 74 0d 00 c0 1b a4 66 6c 6f 70 28 |height.....flop(| 00001cf0 22 46 4c 54 20 20 20 20 20 46 30 2c 20 52 30 22 |"FLT F0, R0"| 00001d00 29 0d 00 c1 29 a4 66 6c 6f 70 28 22 53 54 46 20 |)...).flop("STF | 00001d10 20 20 20 20 46 30 2c 20 5b 67 62 2c 20 23 47 5f | F0, [gb, #G_| 00001d20 53 74 61 72 74 59 43 5d 22 29 0d 00 c2 26 20 20 |StartYC]")...& | 00001d30 20 20 20 20 20 20 41 44 44 20 20 20 20 20 52 34 | ADD R4| 00001d40 2c 20 52 34 2c 20 52 34 2c 20 4c 53 4c 20 23 32 |, R4, R4, LSL #2| 00001d50 0d 00 c3 43 20 20 20 20 20 20 20 20 4d 4f 56 20 |...C MOV | 00001d60 20 20 20 20 52 34 2c 20 52 34 2c 20 4c 53 4c 20 | R4, R4, LSL | 00001d70 23 38 20 2d 20 33 20 20 20 20 20 20 20 20 20 20 |#8 - 3 | 00001d80 20 20 20 20 3b 20 35 2f 38 20 75 70 20 73 63 72 | ; 5/8 up scr| 00001d90 65 65 6e 0d 00 c4 1e 20 20 20 20 20 20 20 20 53 |een.... S| 00001da0 55 42 20 20 20 20 20 52 30 2c 20 52 34 2c 20 52 |UB R0, R4, R| 00001db0 30 0d 00 c5 1b a4 66 6c 6f 70 28 22 46 4c 54 20 |0.....flop("FLT | 00001dc0 20 20 20 20 46 30 2c 20 52 30 22 29 0d 00 c6 29 | F0, R0")...)| 00001dd0 a4 66 6c 6f 70 28 22 53 54 46 20 20 20 20 20 46 |.flop("STF F| 00001de0 30 2c 20 5b 67 62 2c 20 23 47 5f 44 65 6c 74 61 |0, [gb, #G_Delta| 00001df0 59 43 5d 22 29 0d 00 c7 17 20 20 20 20 20 20 20 |YC]").... | 00001e00 20 42 4c 20 20 20 20 20 20 72 6e 64 0d 00 c8 22 | BL rnd..."| 00001e10 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 | MOV | 00001e20 52 30 2c 20 52 30 2c 20 4c 53 52 20 23 32 0d 00 |R0, R0, LSR #2..| 00001e30 c9 1b a4 66 6c 6f 70 28 22 46 4c 54 20 20 20 20 |...flop("FLT | 00001e40 20 46 30 2c 20 52 30 22 29 0d 00 ca 57 20 20 20 | F0, R0")...W | 00001e50 20 20 20 20 20 4d 4f 56 20 20 20 20 20 52 31 2c | MOV R1,| 00001e60 20 23 26 34 30 30 30 30 30 30 30 20 2f 20 38 20 | #&40000000 / 8 | 00001e70 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 2f | ; /| 00001e80 20 38 20 74 6f 20 73 61 76 65 20 61 20 6d 75 6c | 8 to save a mul| 00001e90 74 69 70 6c 79 20 62 79 20 38 20 6c 61 74 65 72 |tiply by 8 later| 00001ea0 0d 00 cb 1b a4 66 6c 6f 70 28 22 46 4c 54 20 20 |.....flop("FLT | 00001eb0 20 20 20 46 31 2c 20 52 31 22 29 0d 00 cc 49 a4 | F1, R1")...I.| 00001ec0 66 6c 6f 70 28 22 44 56 46 20 20 20 20 20 46 30 |flop("DVF F0| 00001ed0 2c 20 46 30 2c 20 46 31 22 29 20 20 20 20 20 20 |, F0, F1") | 00001ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00001ef0 46 30 20 3d 20 72 61 6e 64 6f 6d 20 5b 30 2c 20 |F0 = random [0, | 00001f00 38 2e 30 29 0d 00 cd 3d a4 66 6c 6f 70 28 22 41 |8.0)...=.flop("A| 00001f10 54 4e 20 20 20 20 20 46 31 2c 20 23 31 2e 30 22 |TN F1, #1.0"| 00001f20 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |) | 00001f30 20 20 20 20 20 20 20 3b 20 46 31 20 3d 20 af 2f | ; F1 = ./| 00001f40 34 0d 00 ce 49 a4 66 6c 6f 70 28 22 4d 55 46 20 |4...I.flop("MUF | 00001f50 20 20 20 20 46 30 2c 20 46 30 2c 20 46 31 22 29 | F0, F0, F1")| 00001f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001f70 20 20 20 20 3b 20 46 30 20 3d 20 72 61 6e 64 6f | ; F0 = rando| 00001f80 6d 20 5b 30 2c 20 32 2a af 29 0d 00 cf 2c a4 66 |m [0, 2*.)...,.f| 00001f90 6c 6f 70 28 22 53 54 46 20 20 20 20 20 46 30 2c |lop("STF F0,| 00001fa0 20 5b 67 62 2c 20 23 47 5f 53 74 61 72 74 41 6e | [gb, #G_StartAn| 00001fb0 67 6c 65 5d 22 29 0d 00 d0 24 20 20 20 20 20 20 |gle]")...$ | 00001fc0 20 20 4c 44 52 20 20 20 20 20 52 30 2c 20 73 70 | LDR R0, sp| 00001fd0 72 69 74 65 5f 77 69 64 74 68 0d 00 d1 25 20 20 |rite_width...% | 00001fe0 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 52 31 | LDR R1| 00001ff0 2c 20 73 70 72 69 74 65 5f 68 65 69 67 68 74 0d |, sprite_height.| 00002000 00 d2 1b a4 66 6c 6f 70 28 22 46 4c 54 20 20 20 |....flop("FLT | 00002010 20 20 46 30 2c 20 52 30 22 29 0d 00 d3 47 a4 66 | F0, R0")...G.f| 00002020 6c 6f 70 28 22 53 54 46 20 20 20 20 20 46 30 2c |lop("STF F0,| 00002030 20 5b 67 62 2c 20 23 47 5f 57 69 64 74 68 5d 22 | [gb, #G_Width]"| 00002040 29 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 6f |) ; o| 00002050 73 20 77 69 64 74 68 20 2f 20 32 20 2a 20 32 35 |s width / 2 * 25| 00002060 36 0d 00 d4 1b a4 66 6c 6f 70 28 22 46 4c 54 20 |6.....flop("FLT | 00002070 20 20 20 20 46 31 2c 20 52 31 22 29 0d 00 d5 28 | F1, R1")...(| 00002080 a4 66 6c 6f 70 28 22 53 54 46 20 20 20 20 20 46 |.flop("STF F| 00002090 31 2c 20 5b 67 62 2c 20 23 47 5f 48 65 69 67 68 |1, [gb, #G_Heigh| 000020a0 74 5d 22 29 0d 00 d6 26 20 20 20 20 20 20 20 20 |t]")...& | 000020b0 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c 20 7b |LDMFD (sp)!, {| 000020c0 52 34 2d 52 35 2c 20 70 63 7d 0d 00 d7 52 3b 20 |R4-R5, pc}...R; | 000020d0 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e |~~~~~~~~~~~~~~~~| * 00002110 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 0d 00 d8 05 |~~~~~~~~~~~~....| 00002120 3b 0d 00 d9 31 3b 20 50 72 65 70 61 72 65 20 74 |;...1; Prepare t| 00002130 77 6f 20 62 61 6e 6b 20 73 63 72 65 65 6e 20 28 |wo bank screen (| 00002140 61 6c 6c 6f 63 61 74 69 6e 67 20 6d 65 6d 6f 72 |allocating memor| 00002150 79 29 0d 00 da 1f 3b 20 41 6e 64 20 69 6e 69 74 |y)....; And init| 00002160 69 61 6c 69 73 65 20 43 68 61 6e 67 65 64 42 6f |ialise ChangedBo| 00002170 78 0d 00 db 05 3b 0d 00 dc 11 2e 78 69 6e 69 74 |x....;.....xinit| 00002180 5f 73 63 72 65 65 6e 0d 00 dd 1f 20 20 20 20 20 |_screen.... | 00002190 20 20 20 53 54 4d 46 44 20 20 20 28 73 70 29 21 | STMFD (sp)!| 000021a0 2c 20 7b 6c 72 7d 0d 00 de 1a 20 20 20 20 20 20 |, {lr}.... | 000021b0 20 20 4d 56 4e 20 20 20 20 20 52 30 2c 20 23 30 | MVN R0, #0| 000021c0 0d 00 df 2a 20 20 20 20 20 20 20 20 4d 4f 56 20 |...* MOV | 000021d0 20 20 20 20 52 31 2c 20 23 56 64 75 45 78 74 5f | R1, #VduExt_| 000021e0 58 45 69 67 46 61 63 74 6f 72 0d 00 e0 2a 20 20 |XEigFactor...* | 000021f0 20 20 20 20 20 20 53 57 49 20 20 20 20 20 22 58 | SWI "X| 00002200 4f 53 5f 52 65 61 64 4d 6f 64 65 56 61 72 69 61 |OS_ReadModeVaria| 00002210 62 6c 65 22 0d 00 e1 2b 20 20 20 20 20 20 20 20 |ble"...+ | 00002220 53 54 52 76 63 20 20 20 52 32 2c 20 5b 67 62 2c |STRvc R2, [gb,| 00002230 20 23 47 5f 58 45 69 67 46 61 63 74 6f 72 5d 0d | #G_XEigFactor].| 00002240 00 e2 2a 20 20 20 20 20 20 20 20 4d 4f 56 76 63 |..* MOVvc| 00002250 20 20 20 52 31 2c 20 23 56 64 75 45 78 74 5f 59 | R1, #VduExt_Y| 00002260 45 69 67 46 61 63 74 6f 72 0d 00 e3 2a 20 20 20 |EigFactor...* | 00002270 20 20 20 20 20 53 57 49 76 63 20 20 20 22 58 4f | SWIvc "XO| 00002280 53 5f 52 65 61 64 4d 6f 64 65 56 61 72 69 61 62 |S_ReadModeVariab| 00002290 6c 65 22 0d 00 e4 2b 20 20 20 20 20 20 20 20 53 |le"...+ S| 000022a0 54 52 76 63 20 20 20 52 32 2c 20 5b 67 62 2c 20 |TRvc R2, [gb, | 000022b0 23 47 5f 59 45 69 67 46 61 63 74 6f 72 5d 0d 00 |#G_YEigFactor]..| 000022c0 e5 1a 20 20 20 20 20 20 20 20 4d 56 4e 76 63 20 |.. MVNvc | 000022d0 20 20 52 30 2c 20 23 30 0d 00 e6 24 20 20 20 20 | R0, #0...$ | 000022e0 20 20 20 20 53 57 49 76 63 20 20 20 22 58 4f 53 | SWIvc "XOS| 000022f0 5f 43 68 61 6e 67 65 64 42 6f 78 22 0d 00 e7 44 |_ChangedBox"...D| 00002300 20 20 20 20 20 20 20 20 53 54 52 76 63 20 20 20 | STRvc | 00002310 52 30 2c 20 5b 67 62 2c 20 23 47 5f 43 68 61 6e |R0, [gb, #G_Chan| 00002320 67 65 64 42 6f 78 5d 20 20 20 20 20 20 20 20 20 |gedBox] | 00002330 3b 20 4e 6f 74 65 20 6f 6c 64 20 73 74 61 74 65 |; Note old state| 00002340 0d 00 e8 23 20 20 20 20 20 20 20 20 42 4c 76 63 |...# BLvc| 00002350 20 20 20 20 78 69 6e 69 74 5f 74 77 6f 5f 62 61 | xinit_two_ba| 00002360 6e 6b 73 0d 00 e9 3c 20 20 20 20 20 20 20 20 4d |nks...< M| 00002370 4f 56 76 63 20 20 20 52 30 2c 20 23 31 20 20 20 |OVvc R0, #1 | 00002380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002390 20 20 20 20 20 20 20 3b 20 45 6e 61 62 6c 65 0d | ; Enable.| 000023a0 00 ea 24 20 20 20 20 20 20 20 20 53 57 49 76 63 |..$ SWIvc| 000023b0 20 20 20 22 58 4f 53 5f 43 68 61 6e 67 65 64 42 | "XOS_ChangedB| 000023c0 6f 78 22 0d 00 eb 3b 20 20 20 20 20 20 20 20 4d |ox"...; M| 000023d0 4f 56 76 63 20 20 20 52 30 2c 20 23 32 20 20 20 |OVvc R0, #2 | 000023e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000023f0 20 20 20 20 20 20 20 3b 20 52 65 73 65 74 0d 00 | ; Reset..| 00002400 ec 24 20 20 20 20 20 20 20 20 53 57 49 76 63 20 |.$ SWIvc | 00002410 20 20 22 58 4f 53 5f 43 68 61 6e 67 65 64 42 6f | "XOS_ChangedBo| 00002420 78 22 0d 00 ed 1f 20 20 20 20 20 20 20 20 4c 44 |x".... LD| 00002430 4d 46 44 20 20 20 28 73 70 29 21 2c 20 7b 70 63 |MFD (sp)!, {pc| 00002440 7d 0d 00 ee 52 3b 20 7e 7e 7e 7e 7e 7e 7e 7e 7e |}...R; ~~~~~~~~~| 00002450 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e |~~~~~~~~~~~~~~~~| * 00002490 7e 7e 7e 0d 00 ef 05 3b 0d 00 f0 13 2e 78 75 6e |~~~....;.....xun| 000024a0 70 6c 6f 74 5f 73 70 72 69 74 65 0d 00 f1 26 20 |plot_sprite...& | 000024b0 20 20 20 20 20 20 20 53 54 4d 46 44 20 20 20 28 | STMFD (| 000024c0 73 70 29 21 2c 20 7b 52 34 2d 52 38 2c 20 6c 72 |sp)!, {R4-R8, lr| 000024d0 7d 0d 00 f2 05 5d 0d 00 f3 12 20 20 e7 20 42 61 |}....].... . Ba| 000024e0 6e 6b 65 64 5f 50 20 8c 0d 00 f4 0e 5b 4f 50 54 |nked_P .....[OPT| 000024f0 20 70 61 73 73 25 0d 00 f5 24 20 20 20 20 20 20 | pass%...$ | 00002500 20 20 a4 67 62 28 22 22 2c 20 34 2c 20 47 5f 55 | .gb("", 4, G_U| 00002510 6e 50 6c 6f 74 42 42 6f 78 29 0d 00 f6 58 20 20 |nPlotBBox)...X | 00002520 20 20 20 20 20 20 4c 44 4d 49 41 20 20 20 52 34 | LDMIA R4| 00002530 2c 20 7b 52 35 2d 52 38 7d 20 20 20 20 20 20 20 |, {R5-R8} | 00002540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00002550 57 68 61 74 20 6e 65 65 64 20 74 6f 20 75 6e 70 |What need to unp| 00002560 6c 6f 74 20 6f 6e 20 6e 65 78 74 20 73 63 72 65 |lot on next scre| 00002570 65 6e 0d 00 f7 1a 20 20 20 20 20 20 20 20 4d 56 |en.... MV| 00002580 4e 20 20 20 20 20 52 30 2c 20 23 30 0d 00 f8 24 |N R0, #0...$| 00002590 20 20 20 20 20 20 20 20 53 57 49 20 20 20 20 20 | SWI | 000025a0 22 58 4f 53 5f 43 68 61 6e 67 65 64 42 6f 78 22 |"XOS_ChangedBox"| 000025b0 0d 00 f9 47 20 20 20 20 20 20 20 20 4c 44 4d 76 |...G LDMv| 000025c0 63 49 42 20 52 31 2c 20 7b 52 30 2d 52 33 7d 20 |cIB R1, {R0-R3} | 000025d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000025e0 20 20 20 20 3b 20 57 68 61 74 20 6a 75 73 74 20 | ; What just | 000025f0 70 6c 6f 74 74 65 64 0d 00 fa 4a 20 20 20 20 20 |plotted...J | 00002600 20 20 20 53 54 4d 76 63 49 41 20 52 34 2c 20 7b | STMvcIA R4, {| 00002610 52 30 2d 52 33 7d 20 20 20 20 20 20 20 20 20 20 |R0-R3} | 00002620 20 20 20 20 20 20 20 20 20 20 20 3b 20 53 74 6f | ; Sto| 00002630 72 65 20 66 6f 72 20 6e 65 78 74 20 66 72 61 6d |re for next fram| 00002640 65 0d 00 fb 29 20 20 20 20 20 20 20 20 4c 44 52 |e...) LDR| 00002650 76 63 20 20 20 52 31 2c 20 5b 67 62 2c 20 23 47 |vc R1, [gb, #G| 00002660 5f 50 6c 6f 74 42 61 6e 6b 5d 0d 00 fc 1c 20 20 |_PlotBank].... | 00002670 20 20 20 20 20 20 4d 4f 56 76 63 20 20 20 52 30 | MOVvc R0| 00002680 2c 20 23 31 31 33 0d 00 fd 4f 20 20 20 20 20 20 |, #113...O | 00002690 20 20 53 57 49 76 63 20 20 20 22 58 4f 53 5f 42 | SWIvc "XOS_B| 000026a0 79 74 65 22 20 20 20 20 20 20 20 20 20 20 20 20 |yte" | 000026b0 20 20 20 20 20 20 20 20 20 20 3b 20 44 69 73 70 | ; Disp| 000026c0 6c 61 79 20 77 68 61 74 20 6a 75 73 74 20 70 6c |lay what just pl| 000026d0 6f 74 74 65 64 0d 00 fe 29 20 20 20 20 20 20 20 |otted...) | 000026e0 20 4c 44 52 76 63 20 20 20 52 31 2c 20 5b 67 62 | LDRvc R1, [gb| 000026f0 2c 20 23 47 5f 50 6c 6f 74 42 61 6e 6b 5d 0d 00 |, #G_PlotBank]..| 00002700 ff 40 20 20 20 20 20 20 20 20 52 53 42 76 63 20 |.@ RSBvc | 00002710 20 20 52 31 2c 20 52 31 2c 20 23 33 20 20 20 20 | R1, R1, #3 | 00002720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002730 20 20 3b 20 54 6f 67 67 6c 65 20 31 2f 32 0d 01 | ; Toggle 1/2..| 00002740 00 29 20 20 20 20 20 20 20 20 53 54 52 76 63 20 |.) STRvc | 00002750 20 20 52 31 2c 20 5b 67 62 2c 20 23 47 5f 50 6c | R1, [gb, #G_Pl| 00002760 6f 74 42 61 6e 6b 5d 0d 01 01 34 20 20 20 20 20 |otBank]...4 | 00002770 20 20 20 4d 4f 56 76 63 20 20 20 52 30 2c 20 23 | MOVvc R0, #| 00002780 31 31 32 20 20 20 20 20 20 20 20 20 20 20 20 20 |112 | 00002790 20 20 20 20 20 20 20 20 20 20 20 0d 01 02 4f 20 | ...O | 000027a0 20 20 20 20 20 20 20 53 57 49 76 63 20 20 20 22 | SWIvc "| 000027b0 58 4f 53 5f 42 79 74 65 22 20 20 20 20 20 20 20 |XOS_Byte" | 000027c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 000027d0 20 50 6c 6f 74 20 74 6f 20 73 63 72 65 65 6e 20 | Plot to screen | 000027e0 6e 6f 77 20 68 69 64 64 65 6e 0d 01 03 05 5d 0d |now hidden....].| 000027f0 01 04 07 20 20 cc 0d 01 05 0e 5b 4f 50 54 20 70 |... .....[OPT p| 00002800 61 73 73 25 0d 01 06 1a 20 20 20 20 20 20 20 20 |ass%.... | 00002810 4d 56 4e 20 20 20 20 20 52 30 2c 20 23 30 0d 01 |MVN R0, #0..| 00002820 07 24 20 20 20 20 20 20 20 20 53 57 49 20 20 20 |.$ SWI | 00002830 20 20 22 58 4f 53 5f 43 68 61 6e 67 65 64 42 6f | "XOS_ChangedBo| 00002840 78 22 0d 01 08 1f 20 20 20 20 20 20 20 20 4c 44 |x".... LD| 00002850 4d 76 63 49 42 20 52 31 2c 20 7b 52 35 2d 52 38 |MvcIB R1, {R5-R8| 00002860 7d 0d 01 09 05 5d 0d 01 0a 07 20 20 cd 0d 01 0b |}....].... ....| 00002870 18 5b 4f 50 54 20 70 61 73 73 25 20 20 20 20 20 |.[OPT pass% | 00002880 20 20 20 20 20 0d 01 0c 1e 20 20 20 20 20 20 20 | .... | 00002890 20 53 55 42 76 63 20 20 20 52 35 2c 20 52 35 2c | SUBvc R5, R5,| 000028a0 20 23 31 0d 01 0d 1e 20 20 20 20 20 20 20 20 53 | #1.... S| 000028b0 55 42 76 63 20 20 20 52 36 2c 20 52 36 2c 20 23 |UBvc R6, R6, #| 000028c0 31 0d 01 0e 1e 20 20 20 20 20 20 20 20 41 44 44 |1.... ADD| 000028d0 76 63 20 20 20 52 37 2c 20 52 37 2c 20 23 31 0d |vc R7, R7, #1.| 000028e0 01 0f 1e 20 20 20 20 20 20 20 20 41 44 44 76 63 |... ADDvc| 000028f0 20 20 20 52 38 2c 20 52 38 2c 20 23 31 0d 01 10 | R8, R8, #1...| 00002900 1c 20 20 20 20 20 20 20 20 4d 4f 56 76 63 20 20 |. MOVvc | 00002910 20 52 30 2c 20 23 26 38 34 0d 01 11 4f 20 20 20 | R0, #&84...O | 00002920 20 20 20 20 20 53 57 49 76 63 20 20 20 22 58 57 | SWIvc "XW| 00002930 69 6d 70 5f 53 65 74 43 6f 6c 6f 75 72 22 20 20 |imp_SetColour" | 00002940 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 42 | ; B| 00002950 61 63 6b 67 72 6f 75 6e 64 2c 20 77 69 6d 70 20 |ackground, wimp | 00002960 63 6f 6c 6f 75 72 20 34 0d 01 12 2b 20 20 20 20 |colour 4...+ | 00002970 20 20 20 20 4c 44 52 76 63 20 20 20 52 33 2c 20 | LDRvc R3, | 00002980 5b 67 62 2c 20 23 47 5f 58 45 69 67 46 61 63 74 |[gb, #G_XEigFact| 00002990 6f 72 5d 0d 01 13 2b 20 20 20 20 20 20 20 20 4c |or]...+ L| 000029a0 44 52 76 63 20 20 20 52 34 2c 20 5b 67 62 2c 20 |DRvc R4, [gb, | 000029b0 23 47 5f 59 45 69 67 46 61 63 74 6f 72 5d 0d 01 |#G_YEigFactor]..| 000029c0 14 1b 20 20 20 20 20 20 20 20 4d 4f 56 76 63 20 |.. MOVvc | 000029d0 20 20 52 30 2c 20 23 31 39 0d 01 15 45 20 20 20 | R0, #19...E | 000029e0 20 20 20 20 20 53 57 49 76 63 20 20 20 22 58 4f | SWIvc "XO| 000029f0 53 5f 42 79 74 65 22 20 20 20 20 20 20 20 20 20 |S_Byte" | 00002a00 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 50 | ; P| 00002a10 61 75 73 65 20 6f 6e 65 20 66 72 61 6d 65 0d 01 |ause one frame..| 00002a20 16 1c 20 20 20 20 20 20 20 20 4d 4f 56 76 63 20 |.. MOVvc | 00002a30 20 20 52 30 2c 20 23 26 34 34 0d 01 17 22 20 20 | R0, #&44..." | 00002a40 20 20 20 20 20 20 4d 4f 56 76 63 20 20 20 52 31 | MOVvc R1| 00002a50 2c 20 52 35 2c 20 4c 53 4c 20 52 33 0d 01 18 22 |, R5, LSL R3..."| 00002a60 20 20 20 20 20 20 20 20 4d 4f 56 76 63 20 20 20 | MOVvc | 00002a70 52 32 2c 20 52 36 2c 20 4c 53 4c 20 52 34 0d 01 |R2, R6, LSL R4..| 00002a80 19 49 20 20 20 20 20 20 20 20 53 57 49 76 63 20 |.I SWIvc | 00002a90 20 20 22 58 4f 53 5f 50 6c 6f 74 22 20 20 20 20 | "XOS_Plot" | 00002aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002ab0 20 20 3b 20 4d 6f 76 65 20 74 6f 20 62 6f 74 74 | ; Move to bott| 00002ac0 6f 6d 20 6c 65 66 74 0d 01 1a 1c 20 20 20 20 20 |om left.... | 00002ad0 20 20 20 4d 4f 56 76 63 20 20 20 52 30 2c 20 23 | MOVvc R0, #| 00002ae0 26 36 37 0d 01 1b 22 20 20 20 20 20 20 20 20 4d |&67..." M| 00002af0 4f 56 76 63 20 20 20 52 31 2c 20 52 37 2c 20 4c |OVvc R1, R7, L| 00002b00 53 4c 20 52 33 0d 01 1c 22 20 20 20 20 20 20 20 |SL R3..." | 00002b10 20 4d 4f 56 76 63 20 20 20 52 32 2c 20 52 38 2c | MOVvc R2, R8,| 00002b20 20 4c 53 4c 20 52 34 0d 01 1d 4f 20 20 20 20 20 | LSL R4...O | 00002b30 20 20 20 53 57 49 76 63 20 20 20 22 58 4f 53 5f | SWIvc "XOS_| 00002b40 50 6c 6f 74 22 20 20 20 20 20 20 20 20 20 20 20 |Plot" | 00002b50 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 65 63 | ; Rec| 00002b60 74 61 6e 67 6c 65 20 66 69 6c 6c 20 62 61 63 6b |tangle fill back| 00002b70 67 72 6f 75 6e 64 0d 01 1e 3c 20 20 20 20 20 20 |ground...< | 00002b80 20 20 4d 4f 56 76 63 20 20 20 52 30 2c 20 23 31 | MOVvc R0, #1| 00002b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002ba0 20 20 20 20 20 20 20 20 20 20 3b 20 45 6e 61 62 | ; Enab| 00002bb0 6c 65 0d 01 1f 24 20 20 20 20 20 20 20 20 53 57 |le...$ SW| 00002bc0 49 76 63 20 20 20 22 58 4f 53 5f 43 68 61 6e 67 |Ivc "XOS_Chang| 00002bd0 65 64 42 6f 78 22 0d 01 20 3b 20 20 20 20 20 20 |edBox".. ; | 00002be0 20 20 4d 4f 56 76 63 20 20 20 52 30 2c 20 23 32 | MOVvc R0, #2| 00002bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002c00 20 20 20 20 20 20 20 20 20 20 3b 20 52 65 73 65 | ; Rese| 00002c10 74 0d 01 21 24 20 20 20 20 20 20 20 20 53 57 49 |t..!$ SWI| 00002c20 76 63 20 20 20 22 58 4f 53 5f 43 68 61 6e 67 65 |vc "XOS_Change| 00002c30 64 42 6f 78 22 0d 01 22 26 20 20 20 20 20 20 20 |dBox".."& | 00002c40 20 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c 20 | LDMFD (sp)!, | 00002c50 7b 52 34 2d 52 38 2c 20 70 63 7d 0d 01 23 52 3b |{R4-R8, pc}..#R;| 00002c60 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e | ~~~~~~~~~~~~~~~| 00002c70 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e |~~~~~~~~~~~~~~~~| * 00002ca0 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 0d 01 24 |~~~~~~~~~~~~~..$| 00002cb0 05 3b 0d 01 25 14 2e 78 72 65 73 74 6f 72 65 5f |.;..%..xrestore_| 00002cc0 73 63 72 65 65 6e 0d 01 26 1f 20 20 20 20 20 20 |screen..&. | 00002cd0 20 20 53 54 4d 46 44 20 20 20 28 73 70 29 21 2c | STMFD (sp)!,| 00002ce0 20 7b 6c 72 7d 0d 01 27 2b 20 20 20 20 20 20 20 | {lr}..'+ | 00002cf0 20 4c 44 52 76 63 20 20 20 52 30 2c 20 5b 67 62 | LDRvc R0, [gb| 00002d00 2c 20 23 47 5f 43 68 61 6e 67 65 64 42 6f 78 5d |, #G_ChangedBox]| 00002d10 0d 01 28 1c 20 20 20 20 20 20 20 20 80 76 63 20 |..(. .vc | 00002d20 20 20 52 30 2c 20 52 30 2c 20 23 31 0d 01 29 44 | R0, R0, #1..)D| 00002d30 20 20 20 20 20 20 20 20 53 57 49 76 63 20 20 20 | SWIvc | 00002d40 22 58 4f 53 5f 43 68 61 6e 67 65 64 42 6f 78 22 |"XOS_ChangedBox"| 00002d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002d60 3b 20 52 65 73 74 6f 72 65 20 73 74 61 74 75 73 |; Restore status| 00002d70 0d 01 2a 22 20 20 20 20 20 20 20 20 42 4c 76 63 |..*" BLvc| 00002d80 20 20 20 20 78 69 6e 69 74 5f 6f 6e 65 5f 62 61 | xinit_one_ba| 00002d90 6e 6b 0d 01 2b 1f 20 20 20 20 20 20 20 20 4c 44 |nk..+. LD| 00002da0 4d 46 44 20 20 20 28 73 70 29 21 2c 20 7b 70 63 |MFD (sp)!, {pc| 00002db0 7d 0d 01 2c 52 3b 7e 20 7e 20 7e 20 7e 20 7e 20 |}..,R;~ ~ ~ ~ ~ | 00002dc0 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 |~ ~ ~ ~ ~ ~ ~ ~ | * 00002e00 7e 20 7e 0d 01 2d 05 3b 0d 01 2e 0d 3b 20 49 6e |~ ~..-.;....; In| 00002e10 20 20 20 20 2d 0d 01 2f 0d 3b 20 4f 75 74 20 20 | -../.; Out | 00002e20 20 2d 0d 01 30 05 3b 0d 01 31 0d 2e 69 6e 69 74 | -..0.;..1..init| 00002e30 5f 72 6e 64 0d 01 32 1a 20 20 20 20 20 20 20 20 |_rnd..2. | 00002e40 4d 4f 56 20 20 20 20 20 52 30 2c 20 23 33 0d 01 |MOV R0, #3..| 00002e50 33 26 20 20 20 20 20 20 20 20 53 54 4d 46 44 20 |3& STMFD | 00002e60 20 20 28 73 70 29 21 2c 20 7b 52 30 2d 52 31 2c | (sp)!, {R0-R1,| 00002e70 20 6c 72 7d 0d 01 34 1a 20 20 20 20 20 20 20 20 | lr}..4. | 00002e80 4d 4f 56 20 20 20 20 20 52 31 2c 20 73 70 0d 01 |MOV R1, sp..| 00002e90 35 1b 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |5. MOV | 00002ea0 20 20 52 30 2c 20 23 31 34 0d 01 36 1e 20 20 20 | R0, #14..6. | 00002eb0 20 20 20 20 20 53 57 49 20 20 20 20 20 22 58 4f | SWI "XO| 00002ec0 53 5f 57 6f 72 64 22 0d 01 37 22 20 20 20 20 20 |S_Word"..7" | 00002ed0 20 20 20 4c 44 4d 46 44 20 20 20 28 73 70 29 21 | LDMFD (sp)!| 00002ee0 2c 20 7b 52 31 2d 52 32 7d 0d 01 38 27 20 20 20 |, {R1-R2}..8' | 00002ef0 20 20 20 20 20 41 44 44 53 20 20 20 20 52 30 2c | ADDS R0,| 00002f00 20 52 30 2c 20 52 31 2c 20 52 4f 52 20 23 31 33 | R0, R1, ROR #13| 00002f10 0d 01 39 27 20 20 20 20 20 20 20 20 52 53 43 53 |..9' RSCS| 00002f20 20 20 20 20 52 30 2c 20 52 30 2c 20 52 32 2c 20 | R0, R0, R2, | 00002f30 52 4f 52 20 23 31 31 0d 01 3a 20 20 20 20 20 20 |ROR #11..: | 00002f40 20 20 20 41 44 44 65 71 20 20 20 52 30 2c 20 52 | ADDeq R0, R| 00002f50 30 2c 20 23 26 43 42 0d 01 3b 25 20 20 20 20 20 |0, #&CB..;% | 00002f60 20 20 20 53 54 52 20 20 20 20 20 52 30 2c 20 5b | STR R0, [| 00002f70 67 62 2c 20 23 47 5f 53 65 65 64 5d 0d 01 3c 20 |gb, #G_Seed]..< | 00002f80 20 20 20 20 20 20 20 20 4c 44 4d 46 44 20 20 20 | LDMFD | 00002f90 28 73 70 29 21 2c 20 7b 70 63 7d 5e 0d 01 3d 52 |(sp)!, {pc}^..=R| 00002fa0 3b 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e |;~ ~ ~ ~ ~ ~ ~ ~| 00002fb0 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e | ~ ~ ~ ~ ~ ~ ~ ~| * 00002fe0 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e 0d 01 | ~ ~ ~ ~ ~ ~ ~..| 00002ff0 3e 05 3b 0d 01 3f 0d 3b 20 49 6e 20 20 20 20 2d |>.;..?.; In -| 00003000 0d 01 40 1e 3b 20 4f 75 74 20 20 20 52 30 20 3d |..@.; Out R0 =| 00003010 20 72 61 6e 64 6f 6d 20 33 32 2d 62 69 74 0d 01 | random 32-bit..| 00003020 41 05 3b 0d 01 42 08 2e 72 6e 64 0d 01 43 25 20 |A.;..B..rnd..C% | 00003030 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 52 | LDR R| 00003040 30 2c 20 5b 67 62 2c 20 23 47 5f 53 65 65 64 5d |0, [gb, #G_Seed]| 00003050 0d 01 44 4a 20 20 20 20 20 20 20 20 80 20 20 20 |..DJ . | 00003060 20 20 52 31 2c 20 52 30 2c 20 23 31 20 3c 3c 20 | R1, R0, #1 << | 00003070 32 39 20 20 20 20 20 20 20 20 3b 20 54 68 65 73 |29 ; Thes| 00003080 65 20 76 61 6c 75 65 73 20 6f 62 74 61 69 6e 65 |e values obtaine| 00003090 64 20 62 79 20 74 72 69 61 6c 0d 01 45 4a 20 20 |d by trial..EJ | 000030a0 20 20 20 20 20 20 41 44 44 20 20 20 20 20 52 31 | ADD R1| 000030b0 2c 20 52 31 2c 20 52 31 20 20 20 20 20 20 20 20 |, R1, R1 | 000030c0 20 20 20 20 20 20 3b 20 61 6e 64 20 65 72 72 6f | ; and erro| 000030d0 72 2e 20 20 54 68 65 20 61 6c 67 6f 72 69 74 68 |r. The algorith| 000030e0 6d 20 69 73 0d 01 46 41 20 20 20 20 20 20 20 20 |m is..FA | 000030f0 82 20 20 20 20 20 52 30 2c 20 52 31 2c 20 52 30 |. R0, R1, R0| 00003100 2c 20 52 4f 52 20 23 31 33 20 20 20 20 20 3b 20 |, ROR #13 ; | 00003110 6f 6c 64 20 68 61 74 2c 20 47 46 53 52 20 49 20 |old hat, GFSR I | 00003120 74 68 69 6e 6b 0d 01 47 25 20 20 20 20 20 20 20 |think..G% | 00003130 20 53 54 52 20 20 20 20 20 52 30 2c 20 5b 67 62 | STR R0, [gb| 00003140 2c 20 23 47 5f 53 65 65 64 5d 0d 01 48 1a 20 20 |, #G_Seed]..H. | 00003150 20 20 20 20 20 20 4d 4f 56 53 20 20 20 20 70 63 | MOVS pc| 00003160 2c 20 6c 72 0d 01 49 52 3b 7e 20 7e 20 7e 20 7e |, lr..IR;~ ~ ~ ~| 00003170 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e | ~ ~ ~ ~ ~ ~ ~ ~| * 000031b0 20 7e 20 7e 20 7e 0d 01 4a 05 3b 0d 01 4b 20 3b | ~ ~ ~..J.;..K ;| 000031c0 20 49 6e 20 20 20 20 52 30 20 3d 20 75 6e 73 69 | In R0 = unsi| 000031d0 67 6e 65 64 20 33 32 2d 62 69 74 0d 01 4c 28 3b |gned 32-bit..L(;| 000031e0 20 4f 75 74 20 20 20 52 30 20 3d 20 72 61 6e 64 | Out R0 = rand| 000031f0 6f 6d 20 69 6e 20 72 61 6e 67 65 20 5b 30 2c 20 |om in range [0, | 00003200 52 30 29 0d 01 4d 05 3b 0d 01 4e 0b 2e 72 6e 64 |R0)..M.;..N..rnd| 00003210 5f 6c 6f 0d 01 4f 23 20 20 20 20 20 20 20 20 53 |_lo..O# S| 00003220 54 4d 46 44 20 20 20 28 73 70 29 21 2c 20 7b 52 |TMFD (sp)!, {R| 00003230 30 2c 20 6c 72 7d 0d 01 50 17 20 20 20 20 20 20 |0, lr}..P. | 00003240 20 20 42 4c 20 20 20 20 20 20 72 6e 64 0d 01 51 | BL rnd..Q| 00003250 1f 20 20 20 20 20 20 20 20 4c 44 4d 46 44 20 20 |. LDMFD | 00003260 20 28 73 70 29 21 2c 20 7b 52 31 7d 0d 01 52 1b | (sp)!, {R1}..R.| 00003270 20 20 20 20 20 20 20 20 42 4c 20 20 20 20 20 20 | BL | 00003280 75 64 69 76 6d 6f 64 0d 01 53 3f 20 20 20 20 20 |udivmod..S? | 00003290 20 20 20 4d 4f 56 20 20 20 20 20 52 30 2c 20 52 | MOV R0, R| 000032a0 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |1 | 000032b0 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 65 6d | ; Rem| 000032c0 61 69 6e 64 65 72 0d 01 54 20 20 20 20 20 20 20 |ainder..T | 000032d0 20 20 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c | LDMFD (sp)!,| 000032e0 20 7b 70 63 7d 5e 0d 01 55 52 3b 7e 20 7e 20 7e | {pc}^..UR;~ ~ ~| 000032f0 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e 20 7e | ~ ~ ~ ~ ~ ~ ~ ~| * 00003330 20 7e 20 7e 20 7e 20 7e 0d 01 56 05 3b 0d 01 57 | ~ ~ ~ ~..V.;..W| 00003340 19 3b 20 49 6e 20 20 20 20 52 30 20 3d 20 75 6e |.; In R0 = un| 00003350 73 69 67 6e 65 64 0d 01 58 23 3b 20 20 20 20 20 |signed..X#; | 00003360 20 20 52 31 20 3d 20 75 6e 73 69 67 6e 65 64 2c | R1 = unsigned,| 00003370 20 6e 6f 6e 2d 7a 65 72 6f 0d 01 59 34 3b 20 4f | non-zero..Y4; O| 00003380 75 74 20 20 20 52 30 20 3d 20 52 30 20 2f 20 52 |ut R0 = R0 / R| 00003390 31 20 28 72 6f 75 6e 64 65 64 20 64 6f 77 6e 20 |1 (rounded down | 000033a0 74 6f 77 61 72 64 73 20 7a 65 72 6f 29 0d 01 5a |towards zero)..Z| 000033b0 18 3b 20 20 20 20 20 20 20 52 31 20 3d 20 52 30 |.; R1 = R0| 000033c0 20 83 20 52 31 0d 01 5b 36 3b 20 4e 6f 74 65 20 | . R1..[6; Note | 000033d0 20 69 66 20 52 31 20 3d 20 30 20 74 68 65 6e 20 | if R1 = 0 then | 000033e0 67 65 74 20 73 74 75 63 6b 20 69 6e 20 69 6e 66 |get stuck in inf| 000033f0 69 6e 69 74 65 20 6c 6f 6f 70 21 0d 01 5c 05 3b |inite loop!..\.;| 00003400 0d 01 5d 0c 2e 75 64 69 76 6d 6f 64 0d 01 5e 1f |..]..udivmod..^.| 00003410 20 20 20 20 20 20 20 20 a4 64 69 76 72 65 6d 28 | .divrem(| 00003420 32 2c 20 30 2c 20 31 2c 20 33 29 0d 01 5f 1a 20 |2, 0, 1, 3).._. | 00003430 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 52 | MOV R| 00003440 31 2c 20 52 30 0d 01 60 1a 20 20 20 20 20 20 20 |1, R0..`. | 00003450 20 4d 4f 56 20 20 20 20 20 52 30 2c 20 52 32 0d | MOV R0, R2.| 00003460 01 61 1a 20 20 20 20 20 20 20 20 4d 4f 56 53 20 |.a. MOVS | 00003470 20 20 20 70 63 2c 20 6c 72 0d 01 62 52 3b 20 7e | pc, lr..bR; ~| 00003480 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e |~~~~~~~~~~~~~~~~| * 000034c0 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 0d 01 63 05 5d |~~~~~~~~~~~..c.]| 000034d0 0d 01 64 12 20 20 e7 20 42 61 6e 6b 65 64 5f 50 |..d. . Banked_P| 000034e0 20 8c 0d 01 65 0e 5b 4f 50 54 20 70 61 73 73 25 | ...e.[OPT pass%| 000034f0 0d 01 66 05 3b 0d 01 67 3e 3b 20 54 68 69 73 20 |..f.;..g>; This | 00003500 65 6e 73 75 72 65 73 20 74 68 65 72 65 20 69 73 |ensures there is| 00003510 20 65 6e 6f 75 67 68 20 73 63 72 65 65 6e 20 6d | enough screen m| 00003520 65 6d 6f 72 79 20 66 6f 72 20 74 77 6f 20 62 61 |emory for two ba| 00003530 6e 6b 73 0d 01 68 05 3b 0d 01 69 13 2e 78 65 6e |nks..h.;..i..xen| 00003540 73 75 72 65 5f 73 63 72 65 65 6e 0d 01 6a 1f 20 |sure_screen..j. | 00003550 20 20 20 20 20 20 20 53 54 4d 46 44 20 20 20 28 | STMFD (| 00003560 73 70 29 21 2c 20 7b 6c 72 7d 0d 01 6b 1a 20 20 |sp)!, {lr}..k. | 00003570 20 20 20 20 20 20 4d 56 4e 20 20 20 20 20 52 30 | MVN R0| 00003580 2c 20 23 30 0d 01 6c 2a 20 20 20 20 20 20 20 20 |, #0..l* | 00003590 4d 4f 56 20 20 20 20 20 52 31 2c 20 23 56 64 75 |MOV R1, #Vdu| 000035a0 45 78 74 5f 53 63 72 65 65 6e 53 69 7a 65 0d 01 |Ext_ScreenSize..| 000035b0 6d 2a 20 20 20 20 20 20 20 20 53 57 49 20 20 20 |m* SWI | 000035c0 20 20 22 58 4f 53 5f 52 65 61 64 4d 6f 64 65 56 | "XOS_ReadModeV| 000035d0 61 72 69 61 62 6c 65 22 0d 01 6e 4e 20 20 20 20 |ariable"..nN | 000035e0 20 20 20 20 41 44 44 76 63 20 20 20 52 33 2c 20 | ADDvc R3, | 000035f0 52 32 2c 20 52 32 20 20 20 20 20 20 20 20 20 20 |R2, R2 | 00003600 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 4e 65 | ; Ne| 00003610 65 64 20 74 77 69 63 65 20 73 63 72 65 65 6e 20 |ed twice screen | 00003620 6d 65 6d 6f 72 79 0d 01 6f 3c 20 20 20 20 20 20 |memory..o< | 00003630 20 20 4d 4f 56 76 63 20 20 20 52 30 2c 20 23 32 | MOVvc R0, #2| 00003640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003650 20 20 20 20 20 20 20 20 20 20 3b 20 53 63 72 65 | ; Scre| 00003660 65 6e 0d 01 70 29 20 20 20 20 20 20 20 20 53 57 |en..p) SW| 00003670 49 76 63 20 20 20 22 58 4f 53 5f 52 65 61 64 44 |Ivc "XOS_ReadD| 00003680 79 6e 61 6d 69 63 41 72 65 61 22 0d 01 71 1f 20 |ynamicArea"..q. | 00003690 20 20 20 20 20 20 20 4c 44 4d 76 73 46 44 20 28 | LDMvsFD (| 000036a0 73 70 29 21 2c 20 7b 70 63 7d 0d 01 72 1e 20 20 |sp)!, {pc}..r. | 000036b0 20 20 20 20 20 20 53 55 42 53 20 20 20 20 52 31 | SUBS R1| 000036c0 2c 20 52 33 2c 20 52 31 0d 01 73 3c 20 20 20 20 |, R3, R1..s< | 000036d0 20 20 20 20 4d 4f 56 67 74 20 20 20 52 30 2c 20 | MOVgt R0, | 000036e0 23 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |#2 | 000036f0 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 53 63 | ; Sc| 00003700 72 65 65 6e 0d 01 74 41 20 20 20 20 20 20 20 20 |reen..tA | 00003710 53 57 49 67 74 20 20 20 22 58 4f 53 5f 43 68 61 |SWIgt "XOS_Cha| 00003720 6e 67 65 44 79 6e 61 6d 69 63 41 72 65 61 22 20 |ngeDynamicArea" | 00003730 20 20 20 20 20 20 20 20 3b 20 45 6e 6c 61 72 67 | ; Enlarg| 00003740 65 6e 20 69 74 0d 01 75 1f 20 20 20 20 20 20 20 |en it..u. | 00003750 20 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c 20 | LDMFD (sp)!, | 00003760 7b 70 63 7d 0d 01 76 05 3b 0d 01 77 42 3b 20 54 |{pc}..v.;..wB; T| 00003770 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 69 6e |his is called in| 00003780 20 69 6e 69 74 5f 73 63 72 65 65 6e 20 74 6f 20 | init_screen to | 00003790 73 65 74 20 75 70 20 74 68 65 20 47 5f 55 6e 50 |set up the G_UnP| 000037a0 6c 6f 74 42 42 6f 78 20 62 69 74 0d 01 78 22 3b |lotBBox bit..x";| 000037b0 20 41 6e 64 20 74 6f 20 70 61 67 65 20 74 68 65 | And to page the| 000037c0 20 63 6f 72 72 65 63 74 20 62 61 6e 6b 0d 01 79 | correct bank..y| 000037d0 05 3b 0d 01 7a 14 2e 78 69 6e 69 74 5f 74 77 6f |.;..z..xinit_two| 000037e0 5f 62 61 6e 6b 73 0d 01 7b 1f 20 20 20 20 20 20 |_banks..{. | 000037f0 20 20 53 54 4d 46 44 20 20 20 28 73 70 29 21 2c | STMFD (sp)!,| 00003800 20 7b 6c 72 7d 0d 01 7c 22 20 20 20 20 20 20 20 | {lr}..|" | 00003810 20 42 4c 20 20 20 20 20 20 78 65 6e 73 75 72 65 | BL xensure| 00003820 5f 73 63 72 65 65 6e 0d 01 7d 1a 20 20 20 20 20 |_screen..}. | 00003830 20 20 20 4d 56 4e 76 63 20 20 20 52 30 2c 20 23 | MVNvc R0, #| 00003840 30 0d 01 7e 2a 20 20 20 20 20 20 20 20 4d 4f 56 |0..~* MOV| 00003850 76 63 20 20 20 52 31 2c 20 23 56 64 75 45 78 74 |vc R1, #VduExt| 00003860 5f 59 57 69 6e 64 4c 69 6d 69 74 0d 01 7f 2a 20 |_YWindLimit...* | 00003870 20 20 20 20 20 20 20 53 57 49 76 63 20 20 20 22 | SWIvc "| 00003880 58 4f 53 5f 52 65 61 64 4d 6f 64 65 56 61 72 69 |XOS_ReadModeVari| 00003890 61 62 6c 65 22 0d 01 80 1a 20 20 20 20 20 20 20 |able".... | 000038a0 20 4d 4f 56 76 63 20 20 20 52 33 2c 20 52 32 0d | MOVvc R3, R2.| 000038b0 01 81 2a 20 20 20 20 20 20 20 20 4d 4f 56 76 63 |..* MOVvc| 000038c0 20 20 20 52 31 2c 20 23 56 64 75 45 78 74 5f 58 | R1, #VduExt_X| 000038d0 57 69 6e 64 4c 69 6d 69 74 0d 01 82 2a 20 20 20 |WindLimit...* | 000038e0 20 20 20 20 20 53 57 49 76 63 20 20 20 22 58 4f | SWIvc "XO| 000038f0 53 5f 52 65 61 64 4d 6f 64 65 56 61 72 69 61 62 |S_ReadModeVariab| 00003900 6c 65 22 0d 01 83 1a 20 20 20 20 20 20 20 20 4d |le".... M| 00003910 4f 56 76 63 20 20 20 52 30 2c 20 23 30 0d 01 84 |OVvc R0, #0...| 00003920 1a 20 20 20 20 20 20 20 20 4d 4f 56 76 63 20 20 |. MOVvc | 00003930 20 52 31 2c 20 23 30 0d 01 85 27 20 20 20 20 20 | R1, #0...' | 00003940 20 20 20 a4 67 62 28 22 76 63 22 2c 20 6c 72 2c | .gb("vc", lr,| 00003950 20 47 5f 55 6e 50 6c 6f 74 42 42 6f 78 29 0d 01 | G_UnPlotBBox)..| 00003960 86 5e 20 20 20 20 20 20 20 20 53 54 4d 76 63 49 |.^ STMvcI| 00003970 41 20 6c 72 2c 20 7b 52 30 2d 52 33 7d 20 20 20 |A lr, {R0-R3} | 00003980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003990 20 20 3b 20 53 65 74 20 75 70 20 73 6f 20 63 6c | ; Set up so cl| 000039a0 65 61 72 20 62 61 6e 6b 20 32 20 66 69 72 73 74 |ear bank 2 first| 000039b0 20 74 69 6d 65 20 75 73 65 20 69 74 0d 01 87 1a | time use it....| 000039c0 20 20 20 20 20 20 20 20 4d 4f 56 76 63 20 20 20 | MOVvc | 000039d0 52 31 2c 20 23 31 0d 01 88 29 20 20 20 20 20 20 |R1, #1...) | 000039e0 20 20 53 54 52 76 63 20 20 20 52 31 2c 20 5b 67 | STRvc R1, [g| 000039f0 62 2c 20 23 47 5f 50 6c 6f 74 42 61 6e 6b 5d 0d |b, #G_PlotBank].| 00003a00 01 89 1c 20 20 20 20 20 20 20 20 4d 4f 56 76 63 |... MOVvc| 00003a10 20 20 20 52 30 2c 20 23 31 31 33 0d 01 8a 44 20 | R0, #113...D | 00003a20 20 20 20 20 20 20 20 53 57 49 76 63 20 20 20 22 | SWIvc "| 00003a30 58 4f 53 5f 42 79 74 65 22 20 20 20 20 20 20 20 |XOS_Byte" | 00003a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00003a50 20 44 69 73 70 6c 61 79 20 62 61 6e 6b 20 31 0d | Display bank 1.| 00003a60 01 8b 1a 20 20 20 20 20 20 20 20 4d 4f 56 76 63 |... MOVvc| 00003a70 20 20 20 52 31 2c 20 23 31 0d 01 8c 1c 20 20 20 | R1, #1.... | 00003a80 20 20 20 20 20 4d 4f 56 76 63 20 20 20 52 30 2c | MOVvc R0,| 00003a90 20 23 31 31 32 0d 01 8d 45 20 20 20 20 20 20 20 | #112...E | 00003aa0 20 53 57 49 76 63 20 20 20 22 58 4f 53 5f 42 79 | SWIvc "XOS_By| 00003ab0 74 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20 |te" | 00003ac0 20 20 20 20 20 20 20 20 20 3b 20 57 72 69 74 65 | ; Write| 00003ad0 20 74 6f 20 62 61 6e 6b 20 31 0d 01 8e 1f 20 20 | to bank 1.... | 00003ae0 20 20 20 20 20 20 4c 44 4d 46 44 20 20 20 28 73 | LDMFD (s| 00003af0 70 29 21 2c 20 7b 70 63 7d 0d 01 8f 05 3b 0d 01 |p)!, {pc}....;..| 00003b00 90 24 3b 20 43 61 6c 6c 65 64 20 77 68 65 6e 20 |.$; Called when | 00003b10 66 69 6e 69 73 68 65 64 20 61 6e 69 6d 61 74 69 |finished animati| 00003b20 6f 6e 0d 01 91 4a 3b 20 4e 6f 74 65 20 74 68 61 |on...J; Note tha| 00003b30 74 20 69 66 20 77 65 20 74 72 79 20 72 65 73 74 |t if we try rest| 00003b40 6f 72 69 6e 67 20 73 63 72 65 65 6e 20 6d 65 6d |oring screen mem| 00003b50 6f 72 79 2c 20 74 68 65 6e 20 57 69 6d 70 20 67 |ory, then Wimp g| 00003b60 65 74 73 20 63 6f 6e 66 75 73 65 64 0d 01 92 05 |ets confused....| 00003b70 3b 0d 01 93 1b 2e 78 69 6e 69 74 5f 6f 6e 65 5f |;.....xinit_one_| 00003b80 62 61 6e 6b 20 20 20 20 20 20 20 20 0d 01 94 1f |bank ....| 00003b90 20 20 20 20 20 20 20 20 53 54 4d 46 44 20 20 20 | STMFD | 00003ba0 28 73 70 29 21 2c 20 7b 6c 72 7d 0d 01 95 1c 20 |(sp)!, {lr}.... | 00003bb0 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 52 | MOV R| 00003bc0 30 2c 20 23 31 31 33 0d 01 96 1a 20 20 20 20 20 |0, #113.... | 00003bd0 20 20 20 4d 4f 56 20 20 20 20 20 52 31 2c 20 23 | MOV R1, #| 00003be0 31 0d 01 97 54 20 20 20 20 20 20 20 20 53 57 49 |1...T SWI| 00003bf0 20 20 20 20 20 22 58 4f 53 5f 42 79 74 65 22 20 | "XOS_Byte" | 00003c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003c10 20 20 20 20 20 3b 20 44 69 73 70 6c 61 79 20 62 | ; Display b| 00003c20 61 6e 6b 20 31 20 20 20 20 20 20 20 20 20 20 20 |ank 1 | 00003c30 20 20 20 20 20 0d 01 98 1c 20 20 20 20 20 20 20 | .... | 00003c40 20 4d 4f 56 20 20 20 20 20 52 30 2c 20 23 31 31 | MOV R0, #11| 00003c50 32 0d 01 99 1a 20 20 20 20 20 20 20 20 4d 4f 56 |2.... MOV| 00003c60 20 20 20 20 20 52 30 2c 20 23 31 0d 01 9a 1e 20 | R0, #1.... | 00003c70 20 20 20 20 20 20 20 53 57 49 20 20 20 20 20 22 | SWI "| 00003c80 58 4f 53 5f 42 79 74 65 22 0d 01 9b 1f 20 20 20 |XOS_Byte".... | 00003c90 20 20 20 20 20 4c 44 4d 46 44 20 20 20 28 73 70 | LDMFD (sp| 00003ca0 29 21 2c 20 7b 70 63 7d 0d 01 9c 05 5d 0d 01 9d |)!, {pc}....]...| 00003cb0 07 20 20 cc 0d 01 9e 0e 5b 4f 50 54 20 70 61 73 |. .....[OPT pas| 00003cc0 73 25 0d 01 9f 32 3b 20 49 66 20 6e 6f 74 20 62 |s%...2; If not b| 00003cd0 61 6e 6b 65 64 20 74 68 65 6e 20 74 68 65 73 65 |anked then these| 00003ce0 20 72 6f 75 74 69 6e 65 73 20 64 6f 20 6e 6f 74 | routines do not| 00003cf0 68 69 6e 67 0d 01 a0 05 3b 0d 01 a1 13 2e 78 69 |hing....;.....xi| 00003d00 6e 69 74 5f 6f 6e 65 5f 62 61 6e 6b 0d 01 a2 14 |nit_one_bank....| 00003d10 2e 78 69 6e 69 74 5f 74 77 6f 5f 62 61 6e 6b 73 |.xinit_two_banks| 00003d20 0d 01 a3 13 2e 78 65 6e 73 75 72 65 5f 73 63 72 |.....xensure_scr| 00003d30 65 65 6e 0d 01 a4 22 20 20 20 20 20 20 20 20 42 |een..." B| 00003d40 49 43 53 20 20 20 20 70 63 2c 20 6c 72 2c 20 23 |ICS pc, lr, #| 00003d50 50 53 52 5f 56 0d 01 a5 05 5d 0d 01 a6 07 20 20 |PSR_V....].... | 00003d60 cd 0d 01 a7 0e 5b 4f 50 54 20 70 61 73 73 25 0d |.....[OPT pass%.| 00003d70 01 a8 52 3b 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e |..R; ~~~~~~~~~~~| 00003d80 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e |~~~~~~~~~~~~~~~~| * 00003dc0 7e 0d 01 a9 21 3b 20 50 6c 6f 74 20 6f 6e 65 20 |~...!; Plot one | 00003dd0 66 72 61 6d 65 20 6f 66 20 61 6e 69 6d 61 74 69 |frame of animati| 00003de0 6f 6e 0d 01 aa 05 3b 0d 01 ab 18 3b 20 49 6e 20 |on....;....; In | 00003df0 20 20 20 52 30 20 3d 20 5b 30 2e 2e 52 31 5d 0d | R0 = [0..R1].| 00003e00 01 ac 21 3b 20 20 20 20 20 20 20 52 31 20 3d 20 |..!; R1 = | 00003e10 6e 75 6d 62 65 72 20 6f 66 20 66 72 61 6d 65 73 |number of frames| 00003e20 0d 01 ad 0d 3b 20 4f 75 74 20 20 20 2d 0d 01 ae |....; Out -...| 00003e30 05 3b 0d 01 af 05 5d 0d 01 b0 17 20 20 20 20 20 |.;....].... | 00003e40 20 20 20 64 20 20 20 20 20 20 20 3d 20 37 0d 01 | d = 7..| 00003e50 b1 17 20 20 20 20 20 20 20 20 78 63 20 20 20 20 |.. xc | 00003e60 20 20 3d 20 36 0d 01 b2 17 20 20 20 20 20 20 20 | = 6.... | 00003e70 20 79 63 20 20 20 20 20 20 3d 20 35 0d 01 b3 2e | yc = 5....| 00003e80 20 20 20 20 20 20 20 20 61 6e 67 6c 65 20 20 20 | angle | 00003e90 3d 20 64 20 20 20 20 20 20 20 20 20 20 20 20 20 |= d | 00003ea0 3a f4 20 63 61 72 65 66 75 6c 0d 01 b4 17 20 20 |:. careful.... | 00003eb0 20 20 20 20 20 20 63 6f 73 20 20 20 20 20 3d 20 | cos = | 00003ec0 34 0d 01 b5 2e 20 20 20 20 20 20 20 20 73 69 6e |4.... sin| 00003ed0 20 20 20 20 20 3d 20 61 6e 67 6c 65 20 20 20 20 | = angle | 00003ee0 20 20 20 20 20 3a f4 20 63 61 72 65 66 75 6c 0d | :. careful.| 00003ef0 01 b6 17 20 20 20 20 20 20 20 20 77 20 20 20 20 |... w | 00003f00 20 20 20 3d 20 33 0d 01 b7 17 20 20 20 20 20 20 | = 3.... | 00003f10 20 20 68 20 20 20 20 20 20 20 3d 20 32 0d 01 b8 | h = 2...| 00003f20 1f 20 20 20 20 20 20 20 20 f4 20 6c 65 61 76 65 |. . leave| 00003f30 73 20 46 30 2f 46 31 20 66 72 65 65 0d 01 b9 0e |s F0/F1 free....| 00003f40 5b 4f 50 54 20 70 61 73 73 25 0d 01 ba 14 2e 78 |[OPT pass%.....x| 00003f50 70 6c 6f 74 5f 61 6e 69 6d 61 74 69 6f 6e 0d 01 |plot_animation..| 00003f60 bb 26 20 20 20 20 20 20 20 20 53 54 4d 46 44 20 |.& STMFD | 00003f70 20 20 28 73 70 29 21 2c 20 7b 52 34 2d 52 37 2c | (sp)!, {R4-R7,| 00003f80 20 6c 72 7d 0d 01 bc 21 a4 66 6c 6f 70 28 22 53 | lr}...!.flop("S| 00003f90 4d 46 44 20 20 20 20 73 70 21 2c 20 7b 46 34 2d |MFD sp!, {F4-| 00003fa0 46 37 7d 22 29 0d 01 bd 1b a4 66 6c 6f 70 28 22 |F7}").....flop("| 00003fb0 46 4c 54 20 20 20 20 20 46 30 2c 20 52 30 22 29 |FLT F0, R0")| 00003fc0 0d 01 be 1b a4 66 6c 6f 70 28 22 46 4c 54 20 20 |.....flop("FLT | 00003fd0 20 20 20 46 31 2c 20 52 31 22 29 0d 01 bf 47 a4 | F1, R1")...G.| 00003fe0 66 6c 6f 70 28 22 44 56 46 20 20 20 20 20 64 2c |flop("DVF d,| 00003ff0 20 46 30 2c 20 46 31 22 29 20 20 20 20 20 20 20 | F0, F1") | 00004000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00004010 64 3d 20 69 6e 20 72 61 6e 67 65 20 5b 30 2e 2e |d= in range [0..| 00004020 31 5d 0d 01 c0 1d a4 66 6c 6f 70 28 22 41 54 4e |1].....flop("ATN| 00004030 20 20 20 20 20 46 30 2c 20 23 31 2e 30 22 29 0d | F0, #1.0").| 00004040 01 c1 3d a4 66 6c 6f 70 28 22 4d 55 46 20 20 20 |..=.flop("MUF | 00004050 20 20 46 30 2c 20 46 30 2c 20 23 32 2e 30 22 29 | F0, F0, #2.0")| 00004060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004070 20 20 3b 20 46 30 20 3d 20 af 2f 32 0d 01 c2 1d | ; F0 = ./2....| 00004080 a4 66 6c 6f 70 28 22 4d 55 46 20 20 20 20 20 64 |.flop("MUF d| 00004090 2c 20 64 2c 20 46 30 22 29 0d 01 c3 50 a4 66 6c |, d, F0")...P.fl| 000040a0 6f 70 28 22 53 49 4e 20 20 20 20 20 64 2c 20 64 |op("SIN d, d| 000040b0 22 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |") | 000040c0 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 64 3d | ; d=| 000040d0 20 b5 28 64 2a af 2f 32 29 20 69 6e 20 72 61 6e | .(d*./2) in ran| 000040e0 67 65 20 5b 30 2e 2e 31 5d 0d 01 c4 29 a4 66 6c |ge [0..1]...).fl| 000040f0 6f 70 28 22 4c 44 46 20 20 20 20 20 46 30 2c 20 |op("LDF F0, | 00004100 5b 67 62 2c 20 23 47 5f 44 65 6c 74 61 58 43 5d |[gb, #G_DeltaXC]| 00004110 22 29 0d 01 c5 29 a4 66 6c 6f 70 28 22 4c 44 46 |")...).flop("LDF| 00004120 20 20 20 20 20 46 31 2c 20 5b 67 62 2c 20 23 47 | F1, [gb, #G| 00004130 5f 44 65 6c 74 61 59 43 5d 22 29 0d 01 c6 1e a4 |_DeltaYC]").....| 00004140 66 6c 6f 70 28 22 4d 55 46 20 20 20 20 20 46 30 |flop("MUF F0| 00004150 2c 20 46 30 2c 20 64 22 29 0d 01 c7 1e a4 66 6c |, F0, d").....fl| 00004160 6f 70 28 22 4d 55 46 20 20 20 20 20 46 31 2c 20 |op("MUF F1, | 00004170 46 31 2c 20 64 22 29 0d 01 c8 29 a4 66 6c 6f 70 |F1, d")...).flop| 00004180 28 22 4c 44 46 20 20 20 20 20 78 63 2c 20 5b 67 |("LDF xc, [g| 00004190 62 2c 20 23 47 5f 53 74 61 72 74 58 43 5d 22 29 |b, #G_StartXC]")| 000041a0 0d 01 c9 29 a4 66 6c 6f 70 28 22 4c 44 46 20 20 |...).flop("LDF | 000041b0 20 20 20 79 63 2c 20 5b 67 62 2c 20 23 47 5f 53 | yc, [gb, #G_S| 000041c0 74 61 72 74 59 43 5d 22 29 0d 01 ca 4d a4 66 6c |tartYC]")...M.fl| 000041d0 6f 70 28 22 41 44 46 20 20 20 20 20 78 63 2c 20 |op("ADF xc, | 000041e0 78 63 2c 20 46 30 22 29 20 20 20 20 20 20 20 20 |xc, F0") | 000041f0 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 78 63 | ; xc| 00004200 3d 20 53 74 61 72 74 58 43 20 2b 20 46 34 2a 44 |= StartXC + F4*D| 00004210 65 6c 74 61 58 43 0d 01 cb 4d a4 66 6c 6f 70 28 |eltaXC...M.flop(| 00004220 22 41 44 46 20 20 20 20 20 79 63 2c 20 79 63 2c |"ADF yc, yc,| 00004230 20 46 31 22 29 20 20 20 20 20 20 20 20 20 20 20 | F1") | 00004240 20 20 20 20 20 20 20 20 20 3b 20 79 63 3d 20 53 | ; yc= S| 00004250 74 61 72 74 59 43 20 2b 20 46 34 2a 44 65 6c 74 |tartYC + F4*Delt| 00004260 61 59 43 0d 01 cc 26 a4 66 6c 6f 70 28 22 4c 44 |aYC...&.flop("LD| 00004270 46 20 20 20 20 20 77 2c 20 5b 67 62 2c 20 23 47 |F w, [gb, #G| 00004280 5f 57 69 64 74 68 5d 22 29 0d 01 cd 27 a4 66 6c |_Width]")...'.fl| 00004290 6f 70 28 22 4c 44 46 20 20 20 20 20 68 2c 20 5b |op("LDF h, [| 000042a0 67 62 2c 20 23 47 5f 48 65 69 67 68 74 5d 22 29 |gb, #G_Height]")| 000042b0 0d 01 ce 51 a4 66 6c 6f 70 28 22 4d 55 46 20 20 |...Q.flop("MUF | 000042c0 20 20 20 77 2c 20 77 2c 20 64 22 29 20 20 20 20 | w, w, d") | 000042d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000042e0 20 20 20 3b 20 77 20 3d 20 77 20 2a 20 64 20 28 | ; w = w * d (| 000042f0 6c 69 6e 65 61 72 20 73 69 7a 65 20 67 72 6f 77 |linear size grow| 00004300 29 0d 01 cf 1c a4 66 6c 6f 70 28 22 4d 55 46 20 |).....flop("MUF | 00004310 20 20 20 20 68 2c 20 68 2c 20 64 22 29 0d 01 d0 | h, h, d")...| 00004320 2c a4 66 6c 6f 70 28 22 4c 44 46 20 20 20 20 20 |,.flop("LDF | 00004330 46 30 2c 20 5b 67 62 2c 20 23 47 5f 53 74 61 72 |F0, [gb, #G_Star| 00004340 74 41 6e 67 6c 65 5d 22 29 0d 01 d1 20 a4 66 6c |tAngle]")... .fl| 00004350 6f 70 28 22 52 53 46 20 20 20 20 20 46 31 2c 20 |op("RSF F1, | 00004360 64 2c 20 23 31 2e 30 22 29 0d 01 d2 22 a4 66 6c |d, #1.0")...".fl| 00004370 6f 70 28 22 4d 55 46 20 20 20 20 20 61 6e 67 6c |op("MUF angl| 00004380 65 2c 20 46 30 2c 20 46 31 22 29 0d 01 d3 1f a4 |e, F0, F1").....| 00004390 66 6c 6f 70 28 22 43 4f 53 20 20 20 20 20 63 6f |flop("COS co| 000043a0 73 2c 20 61 6e 67 6c 65 22 29 0d 01 d4 1f a4 66 |s, angle").....f| 000043b0 6c 6f 70 28 22 53 49 4e 20 20 20 20 20 73 69 6e |lop("SIN sin| 000043c0 2c 20 61 6e 67 6c 65 22 29 0d 01 d5 2e 20 20 20 |, angle").... | 000043d0 20 20 20 20 20 3b 20 78 30 20 3d 20 78 63 2d 77 | ; x0 = xc-w| 000043e0 2a 9b 2d 68 2a b5 20 20 79 30 20 3d 20 79 63 2d |*.-h*. y0 = yc-| 000043f0 77 2a b5 2b 68 2a 9b 0d 01 d6 2e 20 20 20 20 20 |w*.+h*..... | 00004400 20 20 20 3b 20 78 31 20 3d 20 78 63 2b 77 2a 9b | ; x1 = xc+w*.| 00004410 2d 68 2a b5 20 20 79 31 20 3d 20 79 63 2b 77 2a |-h*. y1 = yc+w*| 00004420 b5 2b 68 2a 9b 0d 01 d7 2e 20 20 20 20 20 20 20 |.+h*..... | 00004430 20 3b 20 78 32 20 3d 20 78 63 2b 77 2a 9b 2b 68 | ; x2 = xc+w*.+h| 00004440 2a b5 20 20 79 32 20 3d 20 79 63 2b 77 2a b5 2d |*. y2 = yc+w*.-| 00004450 68 2a 9b 0d 01 d8 1f a4 66 6c 6f 70 28 22 4d 55 |h*......flop("MU| 00004460 46 20 20 20 20 20 46 30 2c 20 77 2c 20 63 6f 73 |F F0, w, cos| 00004470 22 29 0d 01 d9 1f a4 66 6c 6f 70 28 22 4d 55 46 |").....flop("MUF| 00004480 20 20 20 20 20 46 31 2c 20 68 2c 20 73 69 6e 22 | F1, h, sin"| 00004490 29 0d 01 da 41 a4 66 6c 6f 70 28 22 41 44 46 20 |)...A.flop("ADF | 000044a0 20 20 20 20 46 31 2c 20 46 30 2c 20 46 31 22 29 | F1, F0, F1")| 000044b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000044c0 20 20 20 20 3b 20 46 31 20 3d 20 77 2a 9b 2b 68 | ; F1 = w*.+h| 000044d0 2a b5 0d 01 db 1f a4 66 6c 6f 70 28 22 53 55 46 |*......flop("SUF| 000044e0 20 20 20 20 20 46 30 2c 20 78 63 2c 20 46 31 22 | F0, xc, F1"| 000044f0 29 0d 01 dc 3c a4 66 6c 6f 70 28 22 46 49 58 20 |)...<.flop("FIX | 00004500 20 20 20 20 52 30 2c 20 46 30 22 29 20 20 20 20 | R0, F0") | 00004510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004520 20 20 20 20 3b 20 52 30 20 3d 20 78 30 0d 01 dd | ; R0 = x0...| 00004530 1f a4 66 6c 6f 70 28 22 41 44 46 20 20 20 20 20 |..flop("ADF | 00004540 46 30 2c 20 78 63 2c 20 46 31 22 29 0d 01 de 3c |F0, xc, F1")...<| 00004550 a4 66 6c 6f 70 28 22 46 49 58 20 20 20 20 20 52 |.flop("FIX R| 00004560 34 2c 20 46 30 22 29 20 20 20 20 20 20 20 20 20 |4, F0") | 00004570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00004580 20 52 34 20 3d 20 78 32 0d 01 df 1f a4 66 6c 6f | R4 = x2.....flo| 00004590 70 28 22 4d 55 46 20 20 20 20 20 46 31 2c 20 68 |p("MUF F1, h| 000045a0 2c 20 73 69 6e 22 29 0d 01 e0 21 a4 66 6c 6f 70 |, sin")...!.flop| 000045b0 28 22 4d 55 46 20 20 20 20 20 46 31 2c 20 46 31 |("MUF F1, F1| 000045c0 2c 20 23 32 2e 30 22 29 0d 01 e1 2b a4 66 6c 6f |, #2.0")...+.flo| 000045d0 70 28 22 53 55 46 20 20 20 20 20 46 30 2c 20 46 |p("SUF F0, F| 000045e0 30 2c 20 46 31 22 29 20 20 20 20 20 20 20 20 20 |0, F1") | 000045f0 20 20 20 0d 01 e2 3c a4 66 6c 6f 70 28 22 46 49 | ...<.flop("FI| 00004600 58 20 20 20 20 20 52 32 2c 20 46 30 22 29 20 20 |X R2, F0") | 00004610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004620 20 20 20 20 20 20 3b 20 52 32 20 3d 20 78 31 0d | ; R2 = x1.| 00004630 01 e3 1f a4 66 6c 6f 70 28 22 4d 55 46 20 20 20 |....flop("MUF | 00004640 20 20 46 30 2c 20 77 2c 20 73 69 6e 22 29 0d 01 | F0, w, sin")..| 00004650 e4 1f a4 66 6c 6f 70 28 22 4d 55 46 20 20 20 20 |...flop("MUF | 00004660 20 46 31 2c 20 68 2c 20 63 6f 73 22 29 0d 01 e5 | F1, h, cos")...| 00004670 41 a4 66 6c 6f 70 28 22 53 55 46 20 20 20 20 20 |A.flop("SUF | 00004680 46 31 2c 20 46 30 2c 20 46 31 22 29 20 20 20 20 |F1, F0, F1") | 00004690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000046a0 3b 20 46 31 20 3d 20 77 2a b5 2d 68 2a 9b 0d 01 |; F1 = w*.-h*...| 000046b0 e6 1f a4 66 6c 6f 70 28 22 53 55 46 20 20 20 20 |...flop("SUF | 000046c0 20 46 30 2c 20 79 63 2c 20 46 31 22 29 0d 01 e7 | F0, yc, F1")...| 000046d0 3c a4 66 6c 6f 70 28 22 46 49 58 20 20 20 20 20 |<.flop("FIX | 000046e0 52 31 2c 20 46 30 22 29 20 20 20 20 20 20 20 20 |R1, F0") | 000046f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004700 3b 20 52 31 20 3d 20 79 30 0d 01 e8 1f a4 66 6c |; R1 = y0.....fl| 00004710 6f 70 28 22 41 44 46 20 20 20 20 20 46 30 2c 20 |op("ADF F0, | 00004720 79 63 2c 20 46 31 22 29 0d 01 e9 3c a4 66 6c 6f |yc, F1")...<.flo| 00004730 70 28 22 46 49 58 20 20 20 20 20 52 35 2c 20 46 |p("FIX R5, F| 00004740 30 22 29 20 20 20 20 20 20 20 20 20 20 20 20 20 |0") | 00004750 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 35 20 | ; R5 | 00004760 3d 20 79 32 0d 01 ea 1f a4 66 6c 6f 70 28 22 4d |= y2.....flop("M| 00004770 55 46 20 20 20 20 20 46 31 2c 20 68 2c 20 63 6f |UF F1, h, co| 00004780 73 22 29 0d 01 eb 21 a4 66 6c 6f 70 28 22 4d 55 |s")...!.flop("MU| 00004790 46 20 20 20 20 20 46 31 2c 20 46 31 2c 20 23 32 |F F1, F1, #2| 000047a0 2e 30 22 29 0d 01 ec 1f a4 66 6c 6f 70 28 22 41 |.0").....flop("A| 000047b0 44 46 20 20 20 20 20 46 30 2c 20 46 30 2c 20 46 |DF F0, F0, F| 000047c0 31 22 29 0d 01 ed 3c a4 66 6c 6f 70 28 22 46 49 |1")...<.flop("FI| 000047d0 58 20 20 20 20 20 52 33 2c 20 46 30 22 29 20 20 |X R3, F0") | 000047e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000047f0 20 20 20 20 20 20 3b 20 52 33 20 3d 20 79 31 0d | ; R3 = y1.| 00004800 01 ee 21 a4 66 6c 6f 70 28 22 4c 4d 46 44 20 20 |..!.flop("LMFD | 00004810 20 20 73 70 21 2c 20 7b 46 34 2d 46 37 7d 22 29 | sp!, {F4-F7}")| 00004820 0d 01 ef 22 20 20 20 20 20 20 20 20 53 55 42 20 |..." SUB | 00004830 20 20 20 20 73 70 2c 20 73 70 2c 20 23 34 2a 32 | sp, sp, #4*2| 00004840 2a 34 0d 01 f0 1a 20 20 20 20 20 20 20 20 4d 4f |*4.... MO| 00004850 56 20 20 20 20 20 52 36 2c 20 73 70 0d 01 f1 1e |V R6, sp....| 00004860 20 20 20 20 20 20 20 20 53 55 42 20 20 20 20 20 | SUB | 00004870 52 37 2c 20 52 30 2c 20 52 32 0d 01 f2 47 20 20 |R7, R0, R2...G | 00004880 20 20 20 20 20 20 41 44 44 20 20 20 20 20 52 37 | ADD R7| 00004890 2c 20 52 34 2c 20 52 37 20 20 20 20 20 20 20 20 |, R4, R7 | 000048a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 000048b0 78 33 20 3d 20 78 32 20 2b 20 78 30 20 2d 20 78 |x3 = x2 + x0 - x| 000048c0 31 0d 01 f3 1e 20 20 20 20 20 20 20 20 53 55 42 |1.... SUB| 000048d0 20 20 20 20 20 6c 72 2c 20 52 31 2c 20 52 33 0d | lr, R1, R3.| 000048e0 01 f4 47 20 20 20 20 20 20 20 20 41 44 44 20 20 |..G ADD | 000048f0 20 20 20 6c 72 2c 20 52 35 2c 20 6c 72 20 20 20 | lr, R5, lr | 00004900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004910 20 20 20 3b 20 79 33 20 3d 20 79 32 20 2b 20 79 | ; y3 = y2 + y| 00004920 30 20 2d 20 79 31 0d 01 f5 34 20 20 20 20 20 20 |0 - y1...4 | 00004930 20 20 53 54 4d 49 41 20 20 20 52 36 2c 20 7b 52 | STMIA R6, {R| 00004940 30 2c 52 31 2c 20 52 32 2c 52 33 2c 20 52 34 2c |0,R1, R2,R3, R4,| 00004950 52 35 2c 20 52 37 2c 6c 72 7d 0d 01 f6 22 20 20 |R5, R7,lr}..." | 00004960 20 20 20 20 20 20 42 4c 20 20 20 20 20 20 78 75 | BL xu| 00004970 6e 70 6c 6f 74 5f 73 70 72 69 74 65 0d 01 f7 41 |nplot_sprite...A| 00004980 20 20 20 20 20 20 20 20 4d 4f 56 76 63 20 20 20 | MOVvc | 00004990 52 30 2c 20 23 26 32 30 30 20 84 20 53 70 72 69 |R0, #&200 . Spri| 000049a0 74 65 52 65 61 73 6f 6e 5f 50 75 74 53 70 72 69 |teReason_PutSpri| 000049b0 74 65 54 72 61 6e 73 66 6f 72 6d 65 64 0d 01 f8 |teTransformed...| 000049c0 26 20 20 20 20 20 20 20 20 a4 67 62 28 22 76 63 |& .gb("vc| 000049d0 22 2c 20 31 2c 20 47 5f 53 70 72 69 74 65 41 72 |", 1, G_SpriteAr| 000049e0 65 61 29 0d 01 f9 26 20 20 20 20 20 20 20 20 4c |ea)...& L| 000049f0 44 52 76 63 20 20 20 52 32 2c 20 5b 52 31 2c 20 |DRvc R2, [R1, | 00004a00 23 73 61 46 69 72 73 74 5d 0d 01 fa 1e 20 20 20 |#saFirst].... | 00004a10 20 20 20 20 20 41 44 44 76 63 20 20 20 52 32 2c | ADDvc R2,| 00004a20 20 52 31 2c 20 52 32 0d 01 fb 4b 20 20 20 20 20 | R1, R2...K | 00004a30 20 20 20 4d 4f 56 76 63 20 20 20 52 33 2c 20 23 | MOVvc R3, #| 00004a40 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |1 | 00004a50 20 20 20 20 20 20 20 20 20 20 20 3b 20 54 72 61 | ; Tra| 00004a60 6e 73 66 6f 72 6d 2c 20 6e 6f 74 20 6d 61 74 72 |nsform, not matr| 00004a70 69 78 0d 01 fc 48 20 20 20 20 20 20 20 20 4d 4f |ix...H MO| 00004a80 56 76 63 20 20 20 52 35 2c 20 23 38 20 20 20 20 |Vvc R5, #8 | 00004a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004aa0 20 20 20 20 20 20 3b 20 55 73 65 20 6d 61 73 6b | ; Use mask| 00004ab0 20 69 66 20 65 78 69 73 74 73 0d 01 fd 4a 20 20 | if exists...J | 00004ac0 20 20 20 20 20 20 4d 4f 56 76 63 20 20 20 52 37 | MOVvc R7| 00004ad0 2c 20 23 30 20 20 20 20 20 20 20 20 20 20 20 20 |, #0 | 00004ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00004af0 4e 6f 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 74 |No translation t| 00004b00 61 62 6c 65 0d 01 fe 22 20 20 20 20 20 20 20 20 |able..." | 00004b10 53 57 49 76 63 20 20 20 22 58 4f 53 5f 53 70 72 |SWIvc "XOS_Spr| 00004b20 69 74 65 4f 70 22 0d 01 ff 22 20 20 20 20 20 20 |iteOp"..." | 00004b30 20 20 41 44 44 20 20 20 20 20 73 70 2c 20 73 70 | ADD sp, sp| 00004b40 2c 20 23 34 2a 32 2a 34 0d 02 00 26 20 20 20 20 |, #4*2*4...& | 00004b50 20 20 20 20 4c 44 4d 46 44 20 20 20 28 73 70 29 | LDMFD (sp)| 00004b60 21 2c 20 7b 52 34 2d 52 37 2c 20 70 63 7d 0d 02 |!, {R4-R7, pc}..| 00004b70 01 52 3b 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e |.R; ~~~~~~~~~~~~| 00004b80 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e |~~~~~~~~~~~~~~~~| * 00004bc0 0d 02 02 05 3b 0d 02 03 13 2e 78 65 78 70 61 6e |....;.....xexpan| 00004bd0 64 5f 73 70 72 69 74 65 0d 02 04 26 20 20 20 20 |d_sprite...& | 00004be0 20 20 20 20 53 54 4d 46 44 20 20 20 28 73 70 29 | STMFD (sp)| 00004bf0 21 2c 20 7b 52 34 2d 52 35 2c 20 6c 72 7d 0d 02 |!, {R4-R5, lr}..| 00004c00 05 50 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |.P MOV | 00004c10 20 20 52 30 2c 20 23 30 20 20 20 20 20 20 20 20 | R0, #0 | 00004c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004c30 20 20 3b 20 46 6c 61 67 73 20 28 66 61 73 74 20 | ; Flags (fast | 00004c40 64 65 63 6f 6d 70 72 65 73 73 69 6f 6e 29 0d 02 |decompression)..| 00004c50 06 23 20 20 20 20 20 20 20 20 a4 67 62 28 22 22 |.# .gb(""| 00004c60 2c 20 31 2c 20 47 5f 57 6f 72 6b 53 70 61 63 65 |, 1, G_WorkSpace| 00004c70 29 0d 02 07 27 20 20 20 20 20 20 20 20 41 44 52 |)...' ADR| 00004c80 20 20 20 20 20 52 32 2c 20 63 6f 6d 70 72 65 73 | R2, compres| 00004c90 73 65 64 5f 64 61 74 61 0d 02 08 27 20 20 20 20 |sed_data...' | 00004ca0 20 20 20 20 4c 44 52 20 20 20 20 20 52 33 2c 20 | LDR R3, | 00004cb0 63 6f 6d 70 72 65 73 73 65 64 5f 73 69 7a 65 0d |compressed_size.| 00004cc0 02 09 24 20 20 20 20 20 20 20 20 a4 67 62 28 22 |..$ .gb("| 00004cd0 22 2c 20 34 2c 20 47 5f 53 70 72 69 74 65 41 72 |", 4, G_SpriteAr| 00004ce0 65 61 29 0d 02 0a 29 20 20 20 20 20 20 20 20 4c |ea)...) L| 00004cf0 44 52 20 20 20 20 20 52 35 2c 20 64 65 63 6f 6d |DR R5, decom| 00004d00 70 72 65 73 73 65 64 5f 73 69 7a 65 0d 02 0b 28 |pressed_size...(| 00004d10 20 20 20 20 20 20 20 20 53 57 49 20 20 20 20 20 | SWI | 00004d20 22 58 53 71 75 61 73 68 5f 44 65 63 6f 6d 70 72 |"XSquash_Decompr| 00004d30 65 73 73 22 0d 02 0c 26 20 20 20 20 20 20 20 20 |ess"...& | 00004d40 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c 20 7b |LDMFD (sp)!, {| 00004d50 52 34 2d 52 35 2c 20 70 63 7d 0d 02 0d 05 3b 0d |R4-R5, pc}....;.| 00004d60 02 0e 33 2e 63 6f 6d 70 72 65 73 73 65 64 5f 73 |..3.compressed_s| 00004d70 69 7a 65 20 20 20 20 20 20 20 20 45 51 55 44 20 |ize EQUD | 00004d80 73 69 7a 65 6f 66 5f 43 6f 6d 70 72 65 73 73 65 |sizeof_Compresse| 00004d90 64 25 0d 02 0f 33 2e 64 65 63 6f 6d 70 72 65 73 |d%...3.decompres| 00004da0 73 65 64 5f 73 69 7a 65 20 20 20 20 20 20 45 51 |sed_size EQ| 00004db0 55 44 20 73 69 7a 65 6f 66 5f 53 70 72 69 74 65 |UD sizeof_Sprite| 00004dc0 41 72 65 61 25 0d 02 10 14 2e 63 6f 6d 70 72 65 |Area%.....compre| 00004dd0 73 73 65 64 5f 64 61 74 61 0d 02 11 05 5d 0d 02 |ssed_data....]..| 00004de0 12 1e 20 20 50 25 20 2b 3d 20 73 69 7a 65 6f 66 |.. P% += sizeof| 00004df0 5f 43 6f 6d 70 72 65 73 73 65 64 25 0d 02 13 1e |_Compressed%....| 00004e00 20 20 4f 25 20 2b 3d 20 73 69 7a 65 6f 66 5f 43 | O% += sizeof_C| 00004e10 6f 6d 70 72 65 73 73 65 64 25 0d 02 14 34 20 20 |ompressed%...4 | 00004e20 e7 20 a4 61 61 64 72 28 50 25 29 3e 4c 25 20 8c |. .aadr(P%)>L% .| 00004e30 20 85 20 31 2c 20 22 41 73 73 65 6d 62 6c 65 72 | . 1, "Assembler| 00004e40 20 6f 75 74 20 6f 66 20 73 70 61 63 65 22 0d 02 | out of space"..| 00004e50 15 13 20 20 e7 20 70 61 73 73 25 20 80 20 32 20 |.. . pass% . 2 | 00004e60 8c 0d 02 16 78 20 20 20 20 c8 99 20 22 53 71 75 |....x .. "Squ| 00004e70 61 73 68 5f 43 6f 6d 70 72 65 73 73 22 2c 20 30 |ash_Compress", 0| 00004e80 2c 20 57 6f 72 6b 53 70 61 63 65 25 2c 20 53 70 |, WorkSpace%, Sp| 00004e90 72 69 74 65 41 72 65 61 25 2c 20 73 69 7a 65 6f |riteArea%, sizeo| 00004ea0 66 5f 53 70 72 69 74 65 41 72 65 61 25 2c 20 a4 |f_SpriteArea%, .| 00004eb0 61 61 64 72 28 63 6f 6d 70 72 65 73 73 65 64 5f |aadr(compressed_| 00004ec0 64 61 74 61 29 2c 20 73 69 7a 65 6f 66 5f 43 6f |data), sizeof_Co| 00004ed0 6d 70 72 65 73 73 65 64 25 0d 02 17 07 20 20 cd |mpressed%.... .| 00004ee0 0d 02 18 05 e1 0d 02 19 05 3a 0d 02 1a 1c dd 20 |.........:..... | 00004ef0 f2 5f 43 6f 6e 73 74 61 6e 74 73 28 63 6f 64 65 |._Constants(code| 00004f00 25 2c 20 4c 25 29 0d 02 1b 13 ea 20 4f 25 2c 20 |%, L%)..... O%, | 00004f10 50 25 2c 20 70 61 73 73 25 0d 02 1c 13 20 20 70 |P%, pass%.... p| 00004f20 61 73 73 25 20 3d 20 25 31 31 31 30 0d 02 1d 1c |ass% = %1110....| 00004f30 4f 25 3d 63 6f 64 65 25 3a 50 25 3d 30 3a 5b 4f |O%=code%:P%=0:[O| 00004f40 50 54 20 70 61 73 73 25 0d 02 1e 3d 2e 47 5f 50 |PT pass%...=.G_P| 00004f50 72 69 76 61 74 65 57 6f 72 64 20 20 20 20 20 20 |rivateWord | 00004f60 20 20 20 20 45 51 55 44 20 30 20 20 3b 20 70 6f | EQUD 0 ; po| 00004f70 69 6e 74 65 72 20 74 6f 20 70 72 69 76 61 74 65 |inter to private| 00004f80 20 77 6f 72 64 0d 02 1f 46 2e 47 5f 58 45 69 67 | word...F.G_XEig| 00004f90 46 61 63 74 6f 72 20 20 20 20 20 20 20 20 20 20 |Factor | 00004fa0 20 45 51 55 44 20 30 20 20 3b 20 56 64 75 45 78 | EQUD 0 ; VduEx| 00004fb0 74 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 63 |t variable for c| 00004fc0 75 72 72 65 6e 74 20 6d 6f 64 65 0d 02 20 46 2e |urrent mode.. F.| 00004fd0 47 5f 59 45 69 67 46 61 63 74 6f 72 20 20 20 20 |G_YEigFactor | 00004fe0 20 20 20 20 20 20 20 45 51 55 44 20 30 20 20 3b | EQUD 0 ;| 00004ff0 20 56 64 75 45 78 74 20 76 61 72 69 61 62 6c 65 | VduExt variable| 00005000 20 66 6f 72 20 63 75 72 72 65 6e 74 20 6d 6f 64 | for current mod| 00005010 65 0d 02 21 50 2e 47 5f 43 68 61 6e 67 65 64 42 |e..!P.G_ChangedB| 00005020 6f 78 20 20 20 20 20 20 20 20 20 20 20 45 51 55 |ox EQU| 00005030 44 20 30 20 20 3b 20 62 69 74 20 30 20 69 73 20 |D 0 ; bit 0 is | 00005040 65 6e 61 62 6c 65 20 73 74 61 74 65 20 62 65 66 |enable state bef| 00005050 6f 72 65 20 77 65 20 63 68 61 6e 67 65 64 20 69 |ore we changed i| 00005060 74 0d 02 22 38 2e 47 5f 53 65 65 64 20 20 20 20 |t.."8.G_Seed | 00005070 20 20 20 20 20 20 20 20 20 20 20 20 20 45 51 55 | EQU| 00005080 44 20 30 20 20 3b 20 72 61 6e 64 6f 6d 20 6e 75 |D 0 ; random nu| 00005090 6d 62 65 72 20 73 65 65 64 0d 02 23 33 2e 47 5f |mber seed..#3.G_| 000050a0 53 74 61 72 74 58 43 20 20 20 20 20 20 20 20 20 |StartXC | 000050b0 20 20 20 20 20 a4 72 28 38 29 20 20 3b 20 66 6c | .r(8) ; fl| 000050c0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0d 02 24 33 |oating point..$3| 000050d0 2e 47 5f 53 74 61 72 74 59 43 20 20 20 20 20 20 |.G_StartYC | 000050e0 20 20 20 20 20 20 20 20 a4 72 28 38 29 20 20 3b | .r(8) ;| 000050f0 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0d | floating point.| 00005100 02 25 33 2e 47 5f 44 65 6c 74 61 58 43 20 20 20 |.%3.G_DeltaXC | 00005110 20 20 20 20 20 20 20 20 20 20 20 a4 72 28 38 29 | .r(8)| 00005120 20 20 3b 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 | ; floating poi| 00005130 6e 74 0d 02 26 33 2e 47 5f 44 65 6c 74 61 59 43 |nt..&3.G_DeltaYC| 00005140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a4 72 | .r| 00005150 28 38 29 20 20 3b 20 66 6c 6f 61 74 69 6e 67 20 |(8) ; floating | 00005160 70 6f 69 6e 74 0d 02 27 33 2e 47 5f 53 74 61 72 |point..'3.G_Star| 00005170 74 41 6e 67 6c 65 20 20 20 20 20 20 20 20 20 20 |tAngle | 00005180 20 a4 72 28 38 29 20 20 3b 20 66 6c 6f 61 74 69 | .r(8) ; floati| 00005190 6e 67 20 70 6f 69 6e 74 0d 02 28 33 2e 47 5f 57 |ng point..(3.G_W| 000051a0 69 64 74 68 20 20 20 20 20 20 20 20 20 20 20 20 |idth | 000051b0 20 20 20 20 a4 72 28 38 29 20 20 3b 20 66 6c 6f | .r(8) ; flo| 000051c0 61 74 69 6e 67 20 70 6f 69 6e 74 0d 02 29 33 2e |ating point..)3.| 000051d0 47 5f 48 65 69 67 68 74 20 20 20 20 20 20 20 20 |G_Height | 000051e0 20 20 20 20 20 20 20 a4 72 28 38 29 20 20 3b 20 | .r(8) ; | 000051f0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0d 02 |floating point..| 00005200 2a 05 5d 0d 02 2b 12 20 20 e7 20 42 61 6e 6b 65 |*.]..+. . Banke| 00005210 64 5f 50 20 8c 0d 02 2c 0e 5b 4f 50 54 20 70 61 |d_P ...,.[OPT pa| 00005220 73 73 25 0d 02 2d 48 2e 47 5f 55 6e 50 6c 6f 74 |ss%..-H.G_UnPlot| 00005230 42 42 6f 78 20 20 20 20 20 20 20 20 20 20 20 a4 |BBox .| 00005240 72 28 31 36 29 20 3b 20 78 30 2c 79 30 2c 78 31 |r(16) ; x0,y0,x1| 00005250 2c 79 31 20 69 6e 63 6c 75 73 69 76 65 20 70 69 |,y1 inclusive pi| 00005260 78 65 6c 20 63 6f 2d 6f 72 64 73 0d 02 2e 31 2e |xel co-ords...1.| 00005270 47 5f 50 6c 6f 74 42 61 6e 6b 20 20 20 20 20 20 |G_PlotBank | 00005280 20 20 20 20 20 20 20 45 51 55 44 20 30 20 20 3b | EQUD 0 ;| 00005290 20 74 6f 67 67 6c 65 73 20 31 2f 32 0d 02 2f 05 | toggles 1/2../.| 000052a0 5d 0d 02 30 07 20 20 cd 0d 02 31 0e 5b 4f 50 54 |]..0. ...1.[OPT| 000052b0 20 70 61 73 73 25 0d 02 32 2a 2e 47 5f 53 70 72 | pass%..2*.G_Spr| 000052c0 69 74 65 41 72 65 61 20 20 20 a4 72 28 73 69 7a |iteArea .r(siz| 000052d0 65 6f 66 5f 53 70 72 69 74 65 41 72 65 61 25 29 |eof_SpriteArea%)| 000052e0 0d 02 33 43 2e 47 5f 57 6f 72 6b 53 70 61 63 65 |..3C.G_WorkSpace| 000052f0 20 20 20 20 a4 72 28 73 69 7a 65 6f 66 5f 57 6f | .r(sizeof_Wo| 00005300 72 6b 53 70 61 63 65 25 29 20 20 20 20 20 20 20 |rkSpace%) | 00005310 20 20 20 3b 20 61 6c 6c 20 33 32 4b 20 6f 66 20 | ; all 32K of | 00005320 69 74 21 0d 02 34 0d 2e 73 69 7a 65 6f 66 5f 47 |it!..4..sizeof_G| 00005330 0d 02 35 05 5d 0d 02 36 05 e1 0d 02 37 05 3a 0d |..5.]..6....7.:.| 00005340 02 38 21 dd 20 f2 5f 4c 6f 61 64 5f 41 6e 64 5f |.8!. ._Load_And_| 00005350 50 61 72 73 65 5f 53 70 72 69 74 65 46 69 6c 65 |Parse_SpriteFile| 00005360 0d 02 39 31 ea 20 74 25 2c 20 6c 65 6e 67 74 68 |..91. t%, length| 00005370 25 2c 20 73 25 2c 20 73 70 25 2c 20 73 69 7a 65 |%, s%, sp%, size| 00005380 25 2c 20 77 25 2c 20 68 25 2c 20 78 25 2c 20 79 |%, w%, h%, x%, y| 00005390 25 0d 02 3a 2b 20 20 c8 99 20 22 4f 53 5f 46 69 |%..:+ .. "OS_Fi| 000053a0 6c 65 22 2c 20 31 37 2c 20 49 6e 24 20 b8 20 74 |le", 17, In$ . t| 000053b0 25 2c 2c 2c 2c 6c 65 6e 67 74 68 25 0d 02 3b 2c |%,,,,length%..;,| 000053c0 20 20 e7 20 74 25 3c 3e 31 20 8c 20 85 20 31 2c | . t%<>1 . . 1,| 000053d0 20 22 43 61 6e 27 74 20 66 69 6e 64 20 66 69 6c | "Can't find fil| 000053e0 65 20 22 2b 20 49 6e 24 0d 02 3c 12 20 20 6c 65 |e "+ In$..<. le| 000053f0 6e 67 74 68 25 20 2b 3d 20 34 0d 02 3d 12 20 20 |ngth% += 4..=. | 00005400 de 20 73 25 20 6c 65 6e 67 74 68 25 0d 02 3e 13 |. s% length%..>.| 00005410 20 20 21 73 25 20 3d 20 6c 65 6e 67 74 68 25 0d | !s% = length%.| 00005420 02 3f 41 20 20 c8 99 20 22 4f 53 5f 53 70 72 69 |.?A .. "OS_Spri| 00005430 74 65 4f 70 22 2c 20 26 31 30 30 2b 53 70 72 69 |teOp", &100+Spri| 00005440 74 65 52 65 61 73 6f 6e 5f 4c 6f 61 64 53 70 72 |teReason_LoadSpr| 00005450 69 74 65 46 69 6c 65 2c 20 73 25 2c 20 49 6e 24 |iteFile, s%, In$| 00005460 0d 02 40 1b 20 20 73 70 25 20 3d 20 73 25 20 2b |..@. sp% = s% +| 00005470 20 73 25 21 73 61 46 69 72 73 74 0d 02 41 25 20 | s%!saFirst..A% | 00005480 20 73 69 7a 65 25 20 3d 20 73 25 21 73 61 46 69 | size% = s%!saFi| 00005490 72 73 74 20 2b 20 73 70 25 21 73 70 4e 65 78 74 |rst + sp%!spNext| 000054a0 0d 02 42 16 20 20 73 25 21 73 61 45 6e 64 20 3d |..B. s%!saEnd =| 000054b0 20 73 69 7a 65 25 0d 02 43 17 20 20 73 25 21 73 | size%..C. s%!s| 000054c0 61 46 72 65 65 20 3d 20 73 69 7a 65 25 0d 02 44 |aFree = size%..D| 000054d0 15 20 20 73 25 21 73 61 4e 75 6d 62 65 72 20 3d |. s%!saNumber =| 000054e0 20 31 0d 02 45 38 20 20 f4 20 74 68 65 20 61 62 | 1..E8 . the ab| 000054f0 6f 76 65 20 6d 61 6b 65 73 20 74 68 65 20 66 69 |ove makes the fi| 00005500 72 73 74 20 73 70 72 69 74 65 20 74 68 65 20 6f |rst sprite the o| 00005510 6e 6c 79 20 73 70 72 69 74 65 0d 02 46 56 20 20 |nly sprite..FV | 00005520 c8 99 20 22 4f 53 5f 53 70 72 69 74 65 4f 70 22 |.. "OS_SpriteOp"| 00005530 2c 20 26 32 30 30 2b 53 70 72 69 74 65 52 65 61 |, &200+SpriteRea| 00005540 73 6f 6e 5f 52 65 61 64 53 70 72 69 74 65 53 69 |son_ReadSpriteSi| 00005550 7a 65 2c 20 73 25 2c 20 73 70 25 20 b8 20 2c 2c |ze, s%, sp% . ,,| 00005560 2c 20 77 25 2c 20 68 25 2c 2c 20 6d 6f 64 65 25 |, w%, h%,, mode%| 00005570 0d 02 47 40 20 20 c8 99 20 22 4f 53 5f 52 65 61 |..G@ .. "OS_Rea| 00005580 64 4d 6f 64 65 56 61 72 69 61 62 6c 65 22 2c 20 |dModeVariable", | 00005590 6d 6f 64 65 25 2c 20 56 64 75 45 78 74 5f 58 45 |mode%, VduExt_XE| 000055a0 69 67 46 61 63 74 6f 72 20 b8 20 2c 2c 20 78 25 |igFactor . ,, x%| 000055b0 0d 02 48 40 20 20 c8 99 20 22 4f 53 5f 52 65 61 |..H@ .. "OS_Rea| 000055c0 64 4d 6f 64 65 56 61 72 69 61 62 6c 65 22 2c 20 |dModeVariable", | 000055d0 6d 6f 64 65 25 2c 20 56 64 75 45 78 74 5f 59 45 |mode%, VduExt_YE| 000055e0 69 67 46 61 63 74 6f 72 20 b8 20 2c 2c 20 79 25 |igFactor . ,, y%| 000055f0 0d 02 49 13 20 20 77 25 20 3d 20 77 25 20 3c 3c |..I. w% = w% <<| 00005600 20 78 25 0d 02 4a 13 20 20 68 25 20 3d 20 68 25 | x%..J. h% = h%| 00005610 20 3c 3c 20 79 25 0d 02 4b 4a 20 20 57 69 64 74 | << y%..KJ Widt| 00005620 68 25 20 3d 20 77 25 2f 32 20 2a 20 32 35 36 20 |h% = w%/2 * 256 | 00005630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00005640 20 20 3a f4 20 77 69 64 74 68 20 72 61 64 69 75 | :. width radiu| 00005650 73 2c 20 69 6e 20 64 72 61 77 20 75 6e 69 74 73 |s, in draw units| 00005660 0d 02 4c 4b 20 20 48 65 69 67 68 74 25 20 3d 20 |..LK Height% = | 00005670 68 25 2f 32 20 2a 20 32 35 36 20 20 20 20 20 20 |h%/2 * 256 | 00005680 20 20 20 20 20 20 20 20 20 20 20 20 3a f4 20 68 | :. h| 00005690 65 69 67 68 74 20 72 61 64 69 75 73 2c 20 69 6e |eight radius, in| 000056a0 20 64 72 61 77 20 75 6e 69 74 73 0d 02 4d 20 20 | draw units..M | 000056b0 20 73 69 7a 65 6f 66 5f 53 70 72 69 74 65 41 72 | sizeof_SpriteAr| 000056c0 65 61 25 20 3d 20 73 69 7a 65 25 0d 02 4e 16 20 |ea% = size%..N. | 000056d0 20 53 70 72 69 74 65 41 72 65 61 25 20 3d 20 73 | SpriteArea% = s| 000056e0 25 0d 02 4f 50 20 20 c8 99 20 22 53 71 75 61 73 |%..OP .. "Squas| 000056f0 68 5f 43 6f 6d 70 72 65 73 73 22 2c 20 38 2c 20 |h_Compress", 8, | 00005700 73 69 7a 65 25 2c 20 73 25 20 b8 20 73 69 7a 65 |size%, s% . size| 00005710 6f 66 5f 57 6f 72 6b 53 70 61 63 65 25 2c 20 73 |of_WorkSpace%, s| 00005720 69 7a 65 6f 66 5f 43 6f 6d 70 72 65 73 73 65 64 |izeof_Compressed| 00005730 25 0d 02 50 24 20 20 de 20 57 6f 72 6b 53 70 61 |%..P$ . WorkSpa| 00005740 63 65 25 20 73 69 7a 65 6f 66 5f 57 6f 72 6b 53 |ce% sizeof_WorkS| 00005750 70 61 63 65 25 0d 02 51 22 20 20 de 20 62 75 66 |pace%..Q" . buf| 00005760 66 65 72 25 20 73 69 7a 65 6f 66 5f 43 6f 6d 70 |fer% sizeof_Comp| 00005770 72 65 73 73 65 64 25 0d 02 52 5c 20 20 c8 99 20 |ressed%..R\ .. | 00005780 22 53 71 75 61 73 68 5f 43 6f 6d 70 72 65 73 73 |"Squash_Compress| 00005790 22 2c 20 30 2c 20 57 6f 72 6b 53 70 61 63 65 25 |", 0, WorkSpace%| 000057a0 2c 20 73 25 2c 20 73 69 7a 65 25 2c 20 62 75 66 |, s%, size%, buf| 000057b0 66 65 72 25 2c 20 73 69 7a 65 6f 66 5f 43 6f 6d |fer%, sizeof_Com| 000057c0 70 72 65 73 73 65 64 25 20 b8 20 2c 2c 2c 2c 2c |pressed% . ,,,,,| 000057d0 20 6e 25 0d 02 53 1e 20 20 73 69 7a 65 6f 66 5f | n%..S. sizeof_| 000057e0 43 6f 6d 70 72 65 73 73 65 64 25 20 2d 3d 20 6e |Compressed% -= n| 000057f0 25 0d 02 54 05 e1 0d 02 55 05 3a 0d 02 56 47 f4 |%..T....U.:..VG.| 00005800 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e | ~~~~~~~~~~~~~~~| 00005810 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e |~~~~~~~~~~~~~~~~| * 00005840 7e 7e 0d 02 57 13 dd 20 a4 73 79 73 76 61 72 28 |~~..W.. .sysvar(| 00005850 76 61 72 24 29 0d 02 58 18 ea 20 73 69 7a 65 25 |var$)..X.. size%| 00005860 2c 20 74 79 70 65 25 2c 20 62 75 66 25 0d 02 59 |, type%, buf%..Y| 00005870 3f 20 20 c8 99 20 22 58 4f 53 5f 52 65 61 64 56 |? .. "XOS_ReadV| 00005880 61 72 56 61 6c 22 2c 20 76 61 72 24 2c 20 30 2c |arVal", var$, 0,| 00005890 20 2d 31 2c 20 30 2c 20 31 20 b8 20 2c 2c 20 73 | -1, 0, 1 . ,, s| 000058a0 69 7a 65 25 2c 2c 20 74 79 70 65 25 0d 02 5a 13 |ize%,, type%..Z.| 000058b0 20 20 e7 20 73 69 7a 65 25 20 3d 20 30 20 8c 0d | . size% = 0 ..| 000058c0 02 5b 36 20 20 20 20 85 20 31 2c 20 22 53 79 73 |.[6 . 1, "Sys| 000058d0 74 65 6d 20 76 61 72 69 61 62 6c 65 20 60 22 2b |tem variable `"+| 000058e0 20 76 61 72 24 2b 20 22 27 20 75 6e 64 65 66 69 | var$+ "' undefi| 000058f0 6e 65 64 2e 22 0d 02 5c 07 20 20 cc 0d 02 5d 4b |ned."..\. ...]K| 00005900 20 20 20 20 e7 20 74 79 70 65 25 3d 31 20 8c 20 | . type%=1 . | 00005910 85 20 31 2c 20 22 42 61 64 20 73 79 73 74 65 6d |. 1, "Bad system| 00005920 20 76 61 72 69 61 62 6c 65 20 60 22 2b 20 76 61 | variable `"+ va| 00005930 72 24 2b 20 22 27 2c 20 69 74 27 73 20 61 20 6e |r$+ "', it's a n| 00005940 75 6d 62 65 72 2e 22 0d 02 5e 16 20 20 20 20 73 |umber."..^. s| 00005950 69 7a 65 25 20 3d 20 2d 73 69 7a 65 25 0d 02 5f |ize% = -size%.._| 00005960 14 20 20 20 20 de 20 62 75 66 25 20 73 69 7a 65 |. . buf% size| 00005970 25 0d 02 60 33 20 20 20 20 c8 99 20 22 4f 53 5f |%..`3 .. "OS_| 00005980 52 65 61 64 56 61 72 56 61 6c 22 2c 20 76 61 72 |ReadVarVal", var| 00005990 24 2c 20 62 75 66 25 2c 20 73 69 7a 65 25 2c 20 |$, buf%, size%, | 000059a0 30 2c 20 31 0d 02 61 1b 20 20 20 20 62 75 66 25 |0, 1..a. buf%| 000059b0 3f 28 73 69 7a 65 25 2d 31 29 20 3d 20 31 33 0d |?(size%-1) = 13.| 000059c0 02 62 14 20 20 20 20 76 61 72 24 20 3d 20 24 62 |.b. var$ = $b| 000059d0 75 66 25 0d 02 63 07 20 20 cd 0d 02 64 0a 3d 20 |uf%..c. ...d.= | 000059e0 76 61 72 24 0d 02 65 05 3a 0d 02 66 1b dd 20 f2 |var$..e.:..f.. .| 000059f0 5f 57 69 6d 70 5f 45 72 72 6f 72 28 41 25 2c 41 |_Wimp_Error(A%,A| 00005a00 24 29 3a e1 0d 02 67 18 dd 20 f2 5f 57 69 6d 70 |$):...g.. ._Wimp| 00005a10 5f 43 6c 6f 73 65 44 6f 77 6e 3a e1 0d ff |_CloseDown:...| 00005a1e