Home » Archimedes archive » Acorn User » AU 1993-04.adf » !GameDes/Files/HScapeFast

!GameDes/Files/HScapeFast

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 » AU 1993-04.adf
Filename: !GameDes/Files/HScapeFast
Read OK:
File size: 1D81 bytes
Load address: FFFFFB44
Exec address: 3A3F0DEA
File contents
   10REM >HScapeFast
   20REM by Antony Bruce Lytis
   30REM for 32 bit machines
   40REM (c) BAU January 1993
   50:
   60MODE 0
   70OFF
   80DIM land 64*1024,scenery 64*1024,scene_spr 4*256
   90!scenery=64*1024
  100scenery!4=0
  110scenery!8=16
  120scenery!12=16
  130*CAT Maps
  140REPEAT
  150 INPUT"Which landscape? "land$
  160 SYS "XOS_File",5,"Maps."+land$ TO exists%
  170UNTIL exists%=1
  180PROCload_map(land$)
  190PROCass
  200FOR b=0 TO 3
  210 bank_dat!(4*b)=banks+b*screen_size
  220 FOR col%=0 TO bytes_per_row STEP 4
  230  A%=banks+(screen_size*b)+col%
  240  B%=col%+b
  250  C%=land
  260  D%=scene_spr
  270  CALL show_column
  280 NEXT
  290NEXT
  300FOR b=0 TO 1
  310 MODE mode+128*b
  320 PRINTTAB(0,31)"Scrolling landscape (mode ";mode;")";
  330NEXT
  340IF mode=9 THEN
  350 SYS "OS_SpriteOp",&118,scenery,"palette" TO ,,pal_spr
  360 pal_dat=pal_spr+44
  370 FOR i=0 TO 15
  380  a=pal_dat+8*i
  390  COLOUR i,a?1,a?2,a?3
  400 NEXT
  410ENDIF
  420OFF
  430CALL scroll
  440MODE 0
  450END
  460:
  470DEF PROCload_map(file$)
  480in%=OPENIN("Maps."+file$)
  490x%=0
  500m%=0
  510FOR i=0 TO 255
  520 scene_spr!(4*i)=-1
  530NEXT
  540WHILE NOT EOF#in%
  550 s$=FNstrip(GET$#in%)
  560 IF s$<>"" THEN
  570  CASE s$ OF
  580   WHEN "Files:":m%=1
  590   WHEN "Used:":m%=2
  600   WHEN "Map:":m%=3
  610   WHEN "Type:":m%=4
  620  OTHERWISE
  630   CASE m% OF
  640    WHEN 1:SYS "OS_SpriteOp",&10B,scenery,"Scenery."+s$
  650    WHEN 2:
  660     i=EVAL("&"+LEFT$(s$,2))
  670     s$=FNstrip(MID$(s$,3))
  680     SYS "OS_SpriteOp",&118,scenery,s$ TO ,,d%
  690     scene_spr!(4*i)=d%
  700     IF s$="blank" THEN
  710      blnk=i
  720      SYS "OS_SpriteOp",&128,scenery,s$ TO ,,,,,,mode
  730     ENDIF
  740    WHEN 3:
  750     dash%=INSTR(s$,"-")
  760     IF dash%>0 THEN
  770      s1$=LEFT$(s$,dash%-1)
  780      s3$=MID$(s$,dash%+1)
  790      s2$=RIGHT$("0"+STR$~blnk,2)
  800      s$=s1$+STRING$(no-LEN(s1$+s3$)/2,s2$)+s3$
  810     ENDIF
  820     a%=land+no*x%
  830     FOR i=0 TO no-1
  840      a%?i=blnk
  850     NEXT
  860     y%=no-1
  870     WHILE s$<>""
  880      a%?y%=EVAL("&"+LEFT$(s$,2))
  890      s$=MID$(s$,3)
  900      y%-=1
  910     ENDWHILE
  920     x%+=1
  930    WHEN 4:
  940     size=VALMID$(s$,2)
  950     IF LEFT$(s$,1)="H" THEN
  960      IF size=32 total_size=224 ELSE total_size=240
  970     ELSE
  980      ERROR 17,"Only horizontal landscapes please!"
  990     ENDIF
 1000     no=total_size DIV size
 1010   ENDCASE
 1020  ENDCASE
 1030 ENDIF
 1040ENDWHILE
 1050SYS "OS_ReadModeVariable",mode,6 TO ,,bytes_per_row
 1060screen_size=total_size*bytes_per_row
 1070IF mode=9 sprite_width=size DIV 2 ELSE sprite_width=size
 1080land_ext=x%*sprite_width
 1090FOR i=0 TO 255
 1100 IF scene_spr!(4*i)=-1 THEN scene_spr!(4*i)=blnk
 1110NEXT
 1120CLOSE#in%
 1130ENDPROC
 1140:
 1150DEF FNstrip(s$)
 1160WHILE LEFT$(s$,1)=" "
 1170 s$=MID$(s$,2)
 1180ENDWHILE
 1190WHILE RIGHT$(s$)=" "
 1200 s$=LEFT$(s$)
 1210ENDWHILE
 1220=s$
 1230:
 1240DEF PROCass
 1250DIM code% &800+4*screen_size
 1260sp=13:link=14:pc=15
 1270VIDC=&3400000
 1280FOR pass%=0 TO 2 STEP 2
 1290P%=code%
 1300[OPT pass%
 1310.scroll  STMFD   (sp)!,{r0-r12,link}
 1320        MOV     r11,#1 ; bank number
 1330        MOV     r10,#0 ; position
 1340        MOV     r9,#0  ; sub-position
 1350.sloop  BL      swap_banks
 1360        MOV     r0,#&F00
 1370        BL      set_border
 1380        BL      copy_bank
 1390        MOV     r0,#&0F0
 1400        BL      set_border
 1410        BL      scroll_on
 1420        MOV     r0,#&000
 1430        BL      set_border
 1440        SWI     "XOS_ReadEscapeState"
 1450        BCC     sloop
 1460        MOV     r0,#126
 1470        SWI     "XOS_Byte"
 1480        LDMFD   (sp)!,{r0-r12,pc}
 1490
 1500.scroll_on
 1510        STMFD   (sp)!,{r0-r7,link}
 1520        LDR     r14,lands_end
 1530        CMP     r10,r14
 1540        LDMGEFD (sp)!,{r0-r7,pc}
 1550        AND     r0,r10,#3
 1560        ADR     r1,bank_dat
 1570        LDR     r0,[r1,r0,LSL #2]
 1580        BIC     r1,r9,#3
 1590        ADD     r0,r0,r1
 1600        ADD     r1,r10,#bytes_per_row
 1610        LDR     r2,land_addr
 1620        LDR     r3,spr_addr
 1630        BL      show_column
 1640        ADD     r9,r9,#1
 1650        CMP     r9,#bytes_per_row
 1660        MOVEQ   r9,#0
 1670        ADD     r10,r10,#1
 1680        LDMFD   (sp)!,{r0-r7,pc}
 1690
 1700.lands_end      EQUD    land_ext-bytes_per_row-16
 1710.spr_addr       EQUD    scene_spr
 1720.land_addr      EQUD    land
 1730
 1740.show_column
 1750        STMFD   (sp)!,{r0-r12,link}
 1760        MOV     r14,r1,LSR #FNlog2(sprite_width)
 1770        AND     r8,r1,#sprite_width-1
 1780        MOV     r6,#no
 1790        MLA     r7,r14,r6,r2
 1800.show_col1
 1810        LDRB    r9,[r7],#1
 1820        LDR     r9,[r3,r9,LSL #2]
 1830        LDR     r14,[r9,#32]
 1840        ADD     r9,r9,r14
 1850        BIC     r14,r8,#3
 1860        ADD     r9,r9,r14
 1870        CMP     r8,#sprite_width-4
 1880        ADDLT   r10,r9,#4
 1890        LDRGEB  r10,[r7,#no-1]
 1900        LDRGE   r10,[r3,r10,LSL #2]
 1910        LDRGE   r14,[r10,#32]
 1920        ADDGE   r10,r10,r14
 1930        AND     r14,r1,#3
 1940        MOV     r14,r14,LSL #3
 1950        RSB     r4,r14,#32
 1960]:FOR z%=0 TO size-1:[OPT pass%
 1970        LDR     r11,[r9],#sprite_width
 1980        LDR     r12,[r10],#sprite_width
 1990        MOV     r11,r11,LSR r14
 2000        ORR     r11,r11,r12,LSL r4
 2010        STR     r11,[r0],#bytes_per_row
 2020]:NEXT z%:[OPT pass%
 2030        SUBS    r6,r6,#1
 2040        BNE     show_col1
 2050        LDMFD   (sp)!,{r0-r12,pc}
 2060]
 2070bank_dat=FNalloc(16,0)
 2080[OPT pass%
 2090.copy_bank
 2100        STMFD   (sp)!,{r0-r12,link}
 2110        AND     r0,r10,#3
 2120        ADR     r1,bank_dat
 2130        LDR     r10,[r1,r0,LSL #2]
 2140        BIC     r9,r9,#3
 2150        ADD     r10,r10,r9
 2160        ADR     r7,routine ; where we're going to assemble our routine
 2170        MOV     r8,#bytes_per_row
 2180        MVN     r14,#0
 2190        ADR     r2,loadi
 2200.make_route
 2210        CMP     r8,#0
 2220        BEQ     made_route
 2230        RSB     r6,r9,#bytes_per_row
 2240        CMP     r6,r8
 2250        MOVGT   r6,r8
 2260        CMP     r6,#40
 2270        MOVGT   r6,#40
 2280        LDMIA   r2,{r3,r4}
 2290        MOV     r0,r6,LSR #2
 2300        RSB     r0,r0,#10
 2310        AND     r3,r3,r14,LSL r0
 2320        AND     r4,r4,r14,LSL r0
 2330        STMIA   r7!,{r3,r4}
 2340        SUB     r8,r8,r6
 2350        ADD     r9,r9,r6
 2360        CMP     r9,#bytes_per_row
 2370        LDREQ   r0,subi
 2380        STREQ   r0,[r7],#4
 2390        MOVEQ   r9,#0
 2400        B       make_route
 2410.made_route
 2420        ADR     r2,add10
 2430        LDMIA   r2,{r3-r6}
 2440        ADR     r5,routine-16
 2450        SUB     r5,r7,r5
 2460        MOV     r5,r5,ASR #2
 2470        RSB     r5,r5,#0
 2480        BIC     r5,r5,#&FF000000
 2490        ORR     r5,r5,#&1A000000
 2500        STMIA   r7,{r3-r6}
 2510        LDR     r11,vdu_o
 2520        MOV     r12,#total_size
 2530        BL      routine
 2540        LDMFD   (sp)!,{r0-r12,pc}
 2550
 2560.loadi  LDMIA   r10!,{r0-r9}
 2570        STMIA   r11!,{r0-r9}
 2580.subi   SUB     r10,r10,#bytes_per_row
 2590
 2600.add10  ADD     r10,r10,#bytes_per_row
 2610        SUBS    r12,r12,#1
 2620        DCD     0
 2630.reti   MOV     pc,link
 2640
 2650.swap_banks
 2660        STMFD   (sp)!,{r0-r2,link}
 2670        MOV     r0,#19
 2680        SWI     "XOS_Byte"
 2690        MOV     r0,#112
 2700        MOV     r1,r11
 2710        SWI     "XOS_Byte"
 2720        RSB     r11,r11,#3
 2730        MOV     r0,#113
 2740        MOV     r1,r11
 2750        SWI     "XOS_Byte"
 2760        ADR     r0,vdu_i
 2770        ADR     r1,vdu_o
 2780        SWI     "XOS_ReadVduVariables"
 2790        LDMFD   (sp)!,{r0-r2,pc}
 2800
 2810.vdu_i  EQUD    148
 2820        EQUD    -1
 2830.vdu_o  EQUD    0
 2840        EQUD    0
 2850
 2860.set_border
 2870        STMFD   (sp)!,{r0-r2,link}
 2880        SWI     "XOS_EnterOS"
 2890        MOV     r2,pc
 2900        MOV     r1,#VIDC
 2910        ORR     r0,r0,#1<<30
 2920        STR     r0,[r1]
 2930        TEQP    r2,#3
 2940        MOVNV   r0,r0
 2950        LDMFD   (sp)!,{r0-r2,pc}
 2960]
 2970routine=FNalloc(128,0)
 2980banks=FNalloc(4*screen_size,0)
 2990NEXT pass%
 3000ENDPROC
 3010:
 3020DEF FNalloc(size,align%)
 3030WHILE P% MOD 16<>align%
 3040 P%+=4
 3050ENDWHILE
 3060P%+=size
 3070=P%-size
 3080:
 3090DEF FNlog2(a%)=LOG(a%)/LOG(2)

� >HScapeFast
� by Antony Bruce Lytis
� for 32 bit machines
(� (c) BAU January 1993
2:
<� 0
F�
P2� land 64*1024,scenery 64*1024,scene_spr 4*256
Z!scenery=64*1024
dscenery!4=0
nscenery!8=16
xscenery!12=16
�
*CAT Maps
��
� �"Which landscape? "land$
�, ș "XOS_File",5,"Maps."+land$ � exists%
�� exists%=1
��load_map(land$)
��ass
�
� b=0 � 3
�' bank_dat!(4*b)=banks+b*screen_size
�! � col%=0 � bytes_per_row � 4
�#  A%=banks+(screen_size*b)+col%
�  B%=col%+b
�
  C%=land
  D%=scene_spr
  � show_column
 �
"�
,
� b=0 � 1
6 � mode+128*b
@2 �0,31)"Scrolling landscape (mode ";mode;")";
J�
T� mode=9 �
^8 ș "OS_SpriteOp",&118,scenery,"palette" � ,,pal_spr
h pal_dat=pal_spr+44
r � i=0 � 15
|  a=pal_dat+8*i
�  � i,a?1,a?2,a?3
� �
��
��
�� scroll
�� 0
��
�:
�� �load_map(file$)
�in%=�("Maps."+file$)
�x%=0
�m%=0
�� i=0 � 255
 scene_spr!(4*i)=-1
�
ȕ � �#in%
& s$=�strip(�#in%)
0 � s$<>"" �
:
  Ȏ s$ �
D   � "Files:":m%=1
N   � "Used:":m%=2
X   � "Map:":m%=3
b   � "Type:":m%=4
l  
v   Ȏ m% �
�7    � 1:ș "OS_SpriteOp",&10B,scenery,"Scenery."+s$
�    � 2:
�     i=�("&"+�s$,2))
�     s$=�strip(�s$,3))
�0     ș "OS_SpriteOp",&118,scenery,s$ � ,,d%
�     scene_spr!(4*i)=d%
�     � s$="blank" �
�      blnk=i
�7      ș "OS_SpriteOp",&128,scenery,s$ � ,,,,,,mode
�
     �
�    � 3:
�     dash%=�s$,"-")
�     � dash%>0 �
      s1$=�s$,dash%-1)
      s3$=�s$,dash%+1)
      s2$=�"0"+�~blnk,2)
 *      s$=s1$+�no-�(s1$+s3$)/2,s2$)+s3$
*
     �
4     a%=land+no*x%
>     � i=0 � no-1
H      a%?i=blnk
R
     �
\     y%=no-1
f     ȕ s$<>""
p      a%?y%=�("&"+�s$,2))
z      s$=�s$,3)
�      y%-=1
�
     �
�     x%+=1
�    � 4:
�     size=��s$,2)
�     � �s$,1)="H" �
�3      � size=32 total_size=224 � total_size=240
�
     �
�3      � 17,"Only horizontal landscapes please!"
�
     �
�     no=total_size � size
�   �
�  �
 �
�
5ș "OS_ReadModeVariable",mode,6 � ,,bytes_per_row
$(screen_size=total_size*bytes_per_row
.6� mode=9 sprite_width=size � 2 � sprite_width=size
8land_ext=x%*sprite_width
B� i=0 � 255
L0 � scene_spr!(4*i)=-1 � scene_spr!(4*i)=blnk
V�
`	�#in%
j�
t:
~� �strip(s$)
�ȕ �s$,1)=" "
� s$=�s$,2)
��
�ȕ �s$)=" "
� s$=�s$)
��
�=s$
�:
�
� �ass
�� code% &800+4*screen_size
�sp=13:link=14:pc=15
�VIDC=&3400000
� pass%=0 � 2 � 2

P%=code%
[OPT pass%
(.scroll  STMFD   (sp)!,{r0-r12,link}
((        MOV     r11,#1 ; bank number
2%        MOV     r10,#0 ; position
<)        MOV     r9,#0  ; sub-position
F.sloop  BL      swap_banks
P        MOV     r0,#&F00
Z        BL      set_border
d        BL      copy_bank
n        MOV     r0,#&0F0
x        BL      set_border
�        BL      scroll_on
�        MOV     r0,#&000
�        BL      set_border
�)        SWI     "XOS_ReadEscapeState"
�        BCC     sloop
�        MOV     r0,#126
�        SWI     "XOS_Byte"
�%        LDMFD   (sp)!,{r0-r12,pc}
�
�.scroll_on
�&        STMFD   (sp)!,{r0-r7,link}
�!        LDR     r14,lands_end
�        CMP     r10,r14
$        LDMGEFD (sp)!,{r0-r7,pc}
        �     r0,r10,#3
        ADR     r1,bank_dat
"%        LDR     r0,[r1,r0,LSL #2]
,        BIC     r1,r9,#3
6        ADD     r0,r0,r1
@)        ADD     r1,r10,#bytes_per_row
J         LDR     r2,land_addr
T        LDR     r3,spr_addr
^        BL      show_column
h        ADD     r9,r9,#1
r%        CMP     r9,#bytes_per_row
|        �Q   r9,#0
�        ADD     r10,r10,#1
�$        LDMFD   (sp)!,{r0-r7,pc}
�
�5.lands_end      EQUD    land_ext-bytes_per_row-16
�%.spr_addr       EQUD    scene_spr
� .land_addr      EQUD    land
�
�.show_column
�'        STMFD   (sp)!,{r0-r12,link}
�3        MOV     r14,r1,LSR #�log2(sprite_width)
�'        �     r8,r1,#sprite_width-1
�        MOV     r6,#no
�         MLA     r7,r14,r6,r2
.show_col1
        LDRB    r9,[r7],#1
%        LDR     r9,[r3,r9,LSL #2]
&         LDR     r14,[r9,#32]
0        ADD     r9,r9,r14
:        BIC     r14,r8,#3
D        ADD     r9,r9,r14
N&        CMP     r8,#sprite_width-4
X        ADDLT   r10,r9,#4
b"        LDRGEB  r10,[r7,#no-1]
l'        LDRGE   r10,[r3,r10,LSL #2]
v!        LDRGE   r14,[r10,#32]
�        ADDGE   r10,r10,r14
�        �     r14,r1,#3
�"        MOV     r14,r14,LSL #3
�        RSB     r4,r14,#32
� ]:� z%=0 � size-1:[OPT pass%
�*        LDR     r11,[r9],#sprite_width
�+        LDR     r12,[r10],#sprite_width
�#        MOV     r11,r11,LSR r14
�%        �R     r11,r11,r12,LSL r4
�+        STR     r11,[r0],#bytes_per_row
�]:� z%:[OPT pass%
�        SUBS    r6,r6,#1
�        BNE     show_col1
%        LDMFD   (sp)!,{r0-r12,pc}
]
bank_dat=�alloc(16,0)
 [OPT pass%
*.copy_bank
4'        STMFD   (sp)!,{r0-r12,link}
>        �     r0,r10,#3
H        ADR     r1,bank_dat
R&        LDR     r10,[r1,r0,LSL #2]
\        BIC     r9,r9,#3
f        ADD     r10,r10,r9
pJ        ADR     r7,routine ; where we're going to assemble our routine
z%        MOV     r8,#bytes_per_row
�        MVN     r14,#0
�        ADR     r2,loadi
�.make_route
�        CMP     r8,#0
�        BEQ     made_route
�(        RSB     r6,r9,#bytes_per_row
�        CMP     r6,r8
�        MOVGT   r6,r8
�        CMP     r6,#40
�        MOVGT   r6,#40
�        LDMIA   r2,{r3,r4}
�         MOV     r0,r6,LSR #2
�        RSB     r0,r0,#10
	"        �     r3,r3,r14,LSL r0
	"        �     r4,r4,r14,LSL r0
	        STMIA   r7!,{r3,r4}
	$        SUB     r8,r8,r6
	.        ADD     r9,r9,r6
	8%        CMP     r9,#bytes_per_row
	B        LDREQ   r0,subi
	L        STREQ   r0,[r7],#4
	V        �Q   r9,#0
	`        B       make_route
	j.made_route
	t        ADR     r2,add10
	~        LDMIA   r2,{r3-r6}
	�!        ADR     r5,routine-16
	�        SUB     r5,r7,r5
	�         MOV     r5,r5,ASR #2
	�        RSB     r5,r5,#0
	�$        BIC     r5,r5,#&FF000000
	�#        �R     r5,r5,#&1A000000
	�        STMIA   r7,{r3-r6}
	�        LDR     r11,vdu_o
	�#        MOV     r12,#total_size
	�        BL      routine
	�%        LDMFD   (sp)!,{r0-r12,pc}
	�
 .loadi  LDMIA   r10!,{r0-r9}

         STMIA   r11!,{r0-r9}
*.subi   SUB     r10,r10,#bytes_per_row

(*.add10  ADD     r10,r10,#bytes_per_row
2        SUBS    r12,r12,#1
<        DCD     0
F.reti   MOV     pc,link
P
Z.swap_banks
d&        STMFD   (sp)!,{r0-r2,link}
n        MOV     r0,#19
x        SWI     "XOS_Byte"
�        MOV     r0,#112
�        MOV     r1,r11
�        SWI     "XOS_Byte"
�        RSB     r11,r11,#3
�        MOV     r0,#113
�        MOV     r1,r11
�        SWI     "XOS_Byte"
�        ADR     r0,vdu_i
�        ADR     r1,vdu_o
�*        SWI     "XOS_ReadVduVariables"
�$        LDMFD   (sp)!,{r0-r2,pc}
�
�.vdu_i  EQUD    148
        EQUD    -1
.vdu_o  EQUD    0
        EQUD    0
"
,.set_border
6&        STMFD   (sp)!,{r0-r2,link}
@!        SWI     "XOS_EnterOS"
J        MOV     r2,pc
T        MOV     r1,#VIDC
^        �R     r0,r0,#1<<30
h        STR     r0,[r1]
r        TEQP    r2,#3
|        MOVNV   r0,r0
�$        LDMFD   (sp)!,{r0-r2,pc}
�]
�routine=�alloc(128,0)
�!banks=�alloc(4*screen_size,0)
�� pass%
��
�:
�� �alloc(size,align%)
�ȕ P% � 16<>align%
�
 P%+=4
��
�P%+=size
�=P%-size
:
� �log2(a%)=�(a%)/�(2)
�
00000000  0d 00 0a 11 f4 20 3e 48  53 63 61 70 65 46 61 73  |..... >HScapeFas|
00000010  74 0d 00 14 1b f4 20 62  79 20 41 6e 74 6f 6e 79  |t..... by Antony|
00000020  20 42 72 75 63 65 20 4c  79 74 69 73 0d 00 1e 19  | Bruce Lytis....|
00000030  f4 20 66 6f 72 20 33 32  20 62 69 74 20 6d 61 63  |. for 32 bit mac|
00000040  68 69 6e 65 73 0d 00 28  1a f4 20 28 63 29 20 42  |hines..(.. (c) B|
00000050  41 55 20 4a 61 6e 75 61  72 79 20 31 39 39 33 0d  |AU January 1993.|
00000060  00 32 05 3a 0d 00 3c 07  eb 20 30 0d 00 46 05 87  |.2.:..<.. 0..F..|
00000070  0d 00 50 32 de 20 6c 61  6e 64 20 36 34 2a 31 30  |..P2. land 64*10|
00000080  32 34 2c 73 63 65 6e 65  72 79 20 36 34 2a 31 30  |24,scenery 64*10|
00000090  32 34 2c 73 63 65 6e 65  5f 73 70 72 20 34 2a 32  |24,scene_spr 4*2|
000000a0  35 36 0d 00 5a 14 21 73  63 65 6e 65 72 79 3d 36  |56..Z.!scenery=6|
000000b0  34 2a 31 30 32 34 0d 00  64 0f 73 63 65 6e 65 72  |4*1024..d.scener|
000000c0  79 21 34 3d 30 0d 00 6e  10 73 63 65 6e 65 72 79  |y!4=0..n.scenery|
000000d0  21 38 3d 31 36 0d 00 78  11 73 63 65 6e 65 72 79  |!8=16..x.scenery|
000000e0  21 31 32 3d 31 36 0d 00  82 0d 2a 43 41 54 20 4d  |!12=16....*CAT M|
000000f0  61 70 73 0d 00 8c 05 f5  0d 00 96 1e 20 e8 22 57  |aps......... ."W|
00000100  68 69 63 68 20 6c 61 6e  64 73 63 61 70 65 3f 20  |hich landscape? |
00000110  22 6c 61 6e 64 24 0d 00  a0 2c 20 c8 99 20 22 58  |"land$..., .. "X|
00000120  4f 53 5f 46 69 6c 65 22  2c 35 2c 22 4d 61 70 73  |OS_File",5,"Maps|
00000130  2e 22 2b 6c 61 6e 64 24  20 b8 20 65 78 69 73 74  |."+land$ . exist|
00000140  73 25 0d 00 aa 0f fd 20  65 78 69 73 74 73 25 3d  |s%..... exists%=|
00000150  31 0d 00 b4 14 f2 6c 6f  61 64 5f 6d 61 70 28 6c  |1.....load_map(l|
00000160  61 6e 64 24 29 0d 00 be  08 f2 61 73 73 0d 00 c8  |and$).....ass...|
00000170  0d e3 20 62 3d 30 20 b8  20 33 0d 00 d2 27 20 62  |.. b=0 . 3...' b|
00000180  61 6e 6b 5f 64 61 74 21  28 34 2a 62 29 3d 62 61  |ank_dat!(4*b)=ba|
00000190  6e 6b 73 2b 62 2a 73 63  72 65 65 6e 5f 73 69 7a  |nks+b*screen_siz|
000001a0  65 0d 00 dc 21 20 e3 20  63 6f 6c 25 3d 30 20 b8  |e...! . col%=0 .|
000001b0  20 62 79 74 65 73 5f 70  65 72 5f 72 6f 77 20 88  | bytes_per_row .|
000001c0  20 34 0d 00 e6 23 20 20  41 25 3d 62 61 6e 6b 73  | 4...#  A%=banks|
000001d0  2b 28 73 63 72 65 65 6e  5f 73 69 7a 65 2a 62 29  |+(screen_size*b)|
000001e0  2b 63 6f 6c 25 0d 00 f0  0f 20 20 42 25 3d 63 6f  |+col%....  B%=co|
000001f0  6c 25 2b 62 0d 00 fa 0d  20 20 43 25 3d 6c 61 6e  |l%+b....  C%=lan|
00000200  64 0d 01 04 12 20 20 44  25 3d 73 63 65 6e 65 5f  |d....  D%=scene_|
00000210  73 70 72 0d 01 0e 13 20  20 d6 20 73 68 6f 77 5f  |spr....  . show_|
00000220  63 6f 6c 75 6d 6e 0d 01  18 06 20 ed 0d 01 22 05  |column.... ...".|
00000230  ed 0d 01 2c 0d e3 20 62  3d 30 20 b8 20 31 0d 01  |...,.. b=0 . 1..|
00000240  36 11 20 eb 20 6d 6f 64  65 2b 31 32 38 2a 62 0d  |6. . mode+128*b.|
00000250  01 40 32 20 f1 8a 30 2c  33 31 29 22 53 63 72 6f  |.@2 ..0,31)"Scro|
00000260  6c 6c 69 6e 67 20 6c 61  6e 64 73 63 61 70 65 20  |lling landscape |
00000270  28 6d 6f 64 65 20 22 3b  6d 6f 64 65 3b 22 29 22  |(mode ";mode;")"|
00000280  3b 0d 01 4a 05 ed 0d 01  54 0e e7 20 6d 6f 64 65  |;..J....T.. mode|
00000290  3d 39 20 8c 0d 01 5e 38  20 c8 99 20 22 4f 53 5f  |=9 ...^8 .. "OS_|
000002a0  53 70 72 69 74 65 4f 70  22 2c 26 31 31 38 2c 73  |SpriteOp",&118,s|
000002b0  63 65 6e 65 72 79 2c 22  70 61 6c 65 74 74 65 22  |cenery,"palette"|
000002c0  20 b8 20 2c 2c 70 61 6c  5f 73 70 72 0d 01 68 17  | . ,,pal_spr..h.|
000002d0  20 70 61 6c 5f 64 61 74  3d 70 61 6c 5f 73 70 72  | pal_dat=pal_spr|
000002e0  2b 34 34 0d 01 72 0f 20  e3 20 69 3d 30 20 b8 20  |+44..r. . i=0 . |
000002f0  31 35 0d 01 7c 13 20 20  61 3d 70 61 6c 5f 64 61  |15..|.  a=pal_da|
00000300  74 2b 38 2a 69 0d 01 86  15 20 20 fb 20 69 2c 61  |t+8*i....  . i,a|
00000310  3f 31 2c 61 3f 32 2c 61  3f 33 0d 01 90 06 20 ed  |?1,a?2,a?3.... .|
00000320  0d 01 9a 05 cd 0d 01 a4  05 87 0d 01 ae 0c d6 20  |............... |
00000330  73 63 72 6f 6c 6c 0d 01  b8 07 eb 20 30 0d 01 c2  |scroll..... 0...|
00000340  05 e0 0d 01 cc 05 3a 0d  01 d6 16 dd 20 f2 6c 6f  |......:..... .lo|
00000350  61 64 5f 6d 61 70 28 66  69 6c 65 24 29 0d 01 e0  |ad_map(file$)...|
00000360  18 69 6e 25 3d 8e 28 22  4d 61 70 73 2e 22 2b 66  |.in%=.("Maps."+f|
00000370  69 6c 65 24 29 0d 01 ea  08 78 25 3d 30 0d 01 f4  |ile$)....x%=0...|
00000380  08 6d 25 3d 30 0d 01 fe  0f e3 20 69 3d 30 20 b8  |.m%=0..... i=0 .|
00000390  20 32 35 35 0d 02 08 17  20 73 63 65 6e 65 5f 73  | 255.... scene_s|
000003a0  70 72 21 28 34 2a 69 29  3d 2d 31 0d 02 12 05 ed  |pr!(4*i)=-1.....|
000003b0  0d 02 1c 0e c8 95 20 ac  20 c5 23 69 6e 25 0d 02  |...... . .#in%..|
000003c0  26 15 20 73 24 3d a4 73  74 72 69 70 28 be 23 69  |&. s$=.strip(.#i|
000003d0  6e 25 29 0d 02 30 0f 20  e7 20 73 24 3c 3e 22 22  |n%)..0. . s$<>""|
000003e0  20 8c 0d 02 3a 0d 20 20  c8 8e 20 73 24 20 ca 0d  | ...:.  .. s$ ..|
000003f0  02 44 16 20 20 20 c9 20  22 46 69 6c 65 73 3a 22  |.D.   . "Files:"|
00000400  3a 6d 25 3d 31 0d 02 4e  15 20 20 20 c9 20 22 55  |:m%=1..N.   . "U|
00000410  73 65 64 3a 22 3a 6d 25  3d 32 0d 02 58 14 20 20  |sed:":m%=2..X.  |
00000420  20 c9 20 22 4d 61 70 3a  22 3a 6d 25 3d 33 0d 02  | . "Map:":m%=3..|
00000430  62 15 20 20 20 c9 20 22  54 79 70 65 3a 22 3a 6d  |b.   . "Type:":m|
00000440  25 3d 34 0d 02 6c 07 20  20 7f 0d 02 76 0e 20 20  |%=4..l.  ...v.  |
00000450  20 c8 8e 20 6d 25 20 ca  0d 02 80 37 20 20 20 20  | .. m% ....7    |
00000460  c9 20 31 3a c8 99 20 22  4f 53 5f 53 70 72 69 74  |. 1:.. "OS_Sprit|
00000470  65 4f 70 22 2c 26 31 30  42 2c 73 63 65 6e 65 72  |eOp",&10B,scener|
00000480  79 2c 22 53 63 65 6e 65  72 79 2e 22 2b 73 24 0d  |y,"Scenery."+s$.|
00000490  02 8a 0c 20 20 20 20 c9  20 32 3a 0d 02 94 18 20  |...    . 2:.... |
000004a0  20 20 20 20 69 3d a0 28  22 26 22 2b c0 73 24 2c  |    i=.("&"+.s$,|
000004b0  32 29 29 0d 02 9e 1a 20  20 20 20 20 73 24 3d a4  |2))....     s$=.|
000004c0  73 74 72 69 70 28 c1 73  24 2c 33 29 29 0d 02 a8  |strip(.s$,3))...|
000004d0  30 20 20 20 20 20 c8 99  20 22 4f 53 5f 53 70 72  |0     .. "OS_Spr|
000004e0  69 74 65 4f 70 22 2c 26  31 31 38 2c 73 63 65 6e  |iteOp",&118,scen|
000004f0  65 72 79 2c 73 24 20 b8  20 2c 2c 64 25 0d 02 b2  |ery,s$ . ,,d%...|
00000500  1b 20 20 20 20 20 73 63  65 6e 65 5f 73 70 72 21  |.     scene_spr!|
00000510  28 34 2a 69 29 3d 64 25  0d 02 bc 17 20 20 20 20  |(4*i)=d%....    |
00000520  20 e7 20 73 24 3d 22 62  6c 61 6e 6b 22 20 8c 0d  | . s$="blank" ..|
00000530  02 c6 10 20 20 20 20 20  20 62 6c 6e 6b 3d 69 0d  |...      blnk=i.|
00000540  02 d0 37 20 20 20 20 20  20 c8 99 20 22 4f 53 5f  |..7      .. "OS_|
00000550  53 70 72 69 74 65 4f 70  22 2c 26 31 32 38 2c 73  |SpriteOp",&128,s|
00000560  63 65 6e 65 72 79 2c 73  24 20 b8 20 2c 2c 2c 2c  |cenery,s$ . ,,,,|
00000570  2c 2c 6d 6f 64 65 0d 02  da 0a 20 20 20 20 20 cd  |,,mode....     .|
00000580  0d 02 e4 0c 20 20 20 20  c9 20 33 3a 0d 02 ee 17  |....    . 3:....|
00000590  20 20 20 20 20 64 61 73  68 25 3d a7 73 24 2c 22  |     dash%=.s$,"|
000005a0  2d 22 29 0d 02 f8 14 20  20 20 20 20 e7 20 64 61  |-")....     . da|
000005b0  73 68 25 3e 30 20 8c 0d  03 02 1a 20 20 20 20 20  |sh%>0 .....     |
000005c0  20 73 31 24 3d c0 73 24  2c 64 61 73 68 25 2d 31  | s1$=.s$,dash%-1|
000005d0  29 0d 03 0c 1a 20 20 20  20 20 20 73 33 24 3d c1  |)....      s3$=.|
000005e0  73 24 2c 64 61 73 68 25  2b 31 29 0d 03 16 1c 20  |s$,dash%+1).... |
000005f0  20 20 20 20 20 73 32 24  3d c2 22 30 22 2b c3 7e  |     s2$=."0"+.~|
00000600  62 6c 6e 6b 2c 32 29 0d  03 20 2a 20 20 20 20 20  |blnk,2).. *     |
00000610  20 73 24 3d 73 31 24 2b  c4 6e 6f 2d a9 28 73 31  | s$=s1$+.no-.(s1|
00000620  24 2b 73 33 24 29 2f 32  2c 73 32 24 29 2b 73 33  |$+s3$)/2,s2$)+s3|
00000630  24 0d 03 2a 0a 20 20 20  20 20 cd 0d 03 34 16 20  |$..*.     ...4. |
00000640  20 20 20 20 61 25 3d 6c  61 6e 64 2b 6e 6f 2a 78  |    a%=land+no*x|
00000650  25 0d 03 3e 15 20 20 20  20 20 e3 20 69 3d 30 20  |%..>.     . i=0 |
00000660  b8 20 6e 6f 2d 31 0d 03  48 13 20 20 20 20 20 20  |. no-1..H.      |
00000670  61 25 3f 69 3d 62 6c 6e  6b 0d 03 52 0a 20 20 20  |a%?i=blnk..R.   |
00000680  20 20 ed 0d 03 5c 10 20  20 20 20 20 79 25 3d 6e  |  ...\.     y%=n|
00000690  6f 2d 31 0d 03 66 12 20  20 20 20 20 c8 95 20 73  |o-1..f.     .. s|
000006a0  24 3c 3e 22 22 0d 03 70  1d 20 20 20 20 20 20 61  |$<>""..p.      a|
000006b0  25 3f 79 25 3d a0 28 22  26 22 2b c0 73 24 2c 32  |%?y%=.("&"+.s$,2|
000006c0  29 29 0d 03 7a 13 20 20  20 20 20 20 73 24 3d c1  |))..z.      s$=.|
000006d0  73 24 2c 33 29 0d 03 84  0f 20 20 20 20 20 20 79  |s$,3)....      y|
000006e0  25 2d 3d 31 0d 03 8e 0a  20 20 20 20 20 ce 0d 03  |%-=1....     ...|
000006f0  98 0e 20 20 20 20 20 78  25 2b 3d 31 0d 03 a2 0c  |..     x%+=1....|
00000700  20 20 20 20 c9 20 34 3a  0d 03 ac 15 20 20 20 20  |    . 4:....    |
00000710  20 73 69 7a 65 3d bb c1  73 24 2c 32 29 0d 03 b6  | size=..s$,2)...|
00000720  17 20 20 20 20 20 e7 20  c0 73 24 2c 31 29 3d 22  |.     . .s$,1)="|
00000730  48 22 20 8c 0d 03 c0 33  20 20 20 20 20 20 e7 20  |H" ....3      . |
00000740  73 69 7a 65 3d 33 32 20  74 6f 74 61 6c 5f 73 69  |size=32 total_si|
00000750  7a 65 3d 32 32 34 20 8b  20 74 6f 74 61 6c 5f 73  |ze=224 . total_s|
00000760  69 7a 65 3d 32 34 30 0d  03 ca 0a 20 20 20 20 20  |ize=240....     |
00000770  cc 0d 03 d4 33 20 20 20  20 20 20 85 20 31 37 2c  |....3      . 17,|
00000780  22 4f 6e 6c 79 20 68 6f  72 69 7a 6f 6e 74 61 6c  |"Only horizontal|
00000790  20 6c 61 6e 64 73 63 61  70 65 73 20 70 6c 65 61  | landscapes plea|
000007a0  73 65 21 22 0d 03 de 0a  20 20 20 20 20 cd 0d 03  |se!"....     ...|
000007b0  e8 1d 20 20 20 20 20 6e  6f 3d 74 6f 74 61 6c 5f  |..     no=total_|
000007c0  73 69 7a 65 20 81 20 73  69 7a 65 0d 03 f2 08 20  |size . size.... |
000007d0  20 20 cb 0d 03 fc 07 20  20 cb 0d 04 06 06 20 cd  |  .....  ..... .|
000007e0  0d 04 10 05 ce 0d 04 1a  35 c8 99 20 22 4f 53 5f  |........5.. "OS_|
000007f0  52 65 61 64 4d 6f 64 65  56 61 72 69 61 62 6c 65  |ReadModeVariable|
00000800  22 2c 6d 6f 64 65 2c 36  20 b8 20 2c 2c 62 79 74  |",mode,6 . ,,byt|
00000810  65 73 5f 70 65 72 5f 72  6f 77 0d 04 24 28 73 63  |es_per_row..$(sc|
00000820  72 65 65 6e 5f 73 69 7a  65 3d 74 6f 74 61 6c 5f  |reen_size=total_|
00000830  73 69 7a 65 2a 62 79 74  65 73 5f 70 65 72 5f 72  |size*bytes_per_r|
00000840  6f 77 0d 04 2e 36 e7 20  6d 6f 64 65 3d 39 20 73  |ow...6. mode=9 s|
00000850  70 72 69 74 65 5f 77 69  64 74 68 3d 73 69 7a 65  |prite_width=size|
00000860  20 81 20 32 20 8b 20 73  70 72 69 74 65 5f 77 69  | . 2 . sprite_wi|
00000870  64 74 68 3d 73 69 7a 65  0d 04 38 1c 6c 61 6e 64  |dth=size..8.land|
00000880  5f 65 78 74 3d 78 25 2a  73 70 72 69 74 65 5f 77  |_ext=x%*sprite_w|
00000890  69 64 74 68 0d 04 42 0f  e3 20 69 3d 30 20 b8 20  |idth..B.. i=0 . |
000008a0  32 35 35 0d 04 4c 30 20  e7 20 73 63 65 6e 65 5f  |255..L0 . scene_|
000008b0  73 70 72 21 28 34 2a 69  29 3d 2d 31 20 8c 20 73  |spr!(4*i)=-1 . s|
000008c0  63 65 6e 65 5f 73 70 72  21 28 34 2a 69 29 3d 62  |cene_spr!(4*i)=b|
000008d0  6c 6e 6b 0d 04 56 05 ed  0d 04 60 09 d9 23 69 6e  |lnk..V....`..#in|
000008e0  25 0d 04 6a 05 e1 0d 04  74 05 3a 0d 04 7e 10 dd  |%..j....t.:..~..|
000008f0  20 a4 73 74 72 69 70 28  73 24 29 0d 04 88 11 c8  | .strip(s$).....|
00000900  95 20 c0 73 24 2c 31 29  3d 22 20 22 0d 04 92 0e  |. .s$,1)=" "....|
00000910  20 73 24 3d c1 73 24 2c  32 29 0d 04 9c 05 ce 0d  | s$=.s$,2)......|
00000920  04 a6 0f c8 95 20 c2 73  24 29 3d 22 20 22 0d 04  |..... .s$)=" "..|
00000930  b0 0c 20 73 24 3d c0 73  24 29 0d 04 ba 05 ce 0d  |.. s$=.s$)......|
00000940  04 c4 07 3d 73 24 0d 04  ce 05 3a 0d 04 d8 0a dd  |...=s$....:.....|
00000950  20 f2 61 73 73 0d 04 e2  1e de 20 63 6f 64 65 25  | .ass..... code%|
00000960  20 26 38 30 30 2b 34 2a  73 63 72 65 65 6e 5f 73  | &800+4*screen_s|
00000970  69 7a 65 0d 04 ec 17 73  70 3d 31 33 3a 6c 69 6e  |ize....sp=13:lin|
00000980  6b 3d 31 34 3a 70 63 3d  31 35 0d 04 f6 11 56 49  |k=14:pc=15....VI|
00000990  44 43 3d 26 33 34 30 30  30 30 30 0d 05 00 15 e3  |DC=&3400000.....|
000009a0  20 70 61 73 73 25 3d 30  20 b8 20 32 20 88 20 32  | pass%=0 . 2 . 2|
000009b0  0d 05 0a 0c 50 25 3d 63  6f 64 65 25 0d 05 14 0e  |....P%=code%....|
000009c0  5b 4f 50 54 20 70 61 73  73 25 0d 05 1e 28 2e 73  |[OPT pass%...(.s|
000009d0  63 72 6f 6c 6c 20 20 53  54 4d 46 44 20 20 20 28  |croll  STMFD   (|
000009e0  73 70 29 21 2c 7b 72 30  2d 72 31 32 2c 6c 69 6e  |sp)!,{r0-r12,lin|
000009f0  6b 7d 0d 05 28 28 20 20  20 20 20 20 20 20 4d 4f  |k}..((        MO|
00000a00  56 20 20 20 20 20 72 31  31 2c 23 31 20 3b 20 62  |V     r11,#1 ; b|
00000a10  61 6e 6b 20 6e 75 6d 62  65 72 0d 05 32 25 20 20  |ank number..2%  |
00000a20  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 31  |      MOV     r1|
00000a30  30 2c 23 30 20 3b 20 70  6f 73 69 74 69 6f 6e 0d  |0,#0 ; position.|
00000a40  05 3c 29 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.<)        MOV  |
00000a50  20 20 20 72 39 2c 23 30  20 20 3b 20 73 75 62 2d  |   r9,#0  ; sub-|
00000a60  70 6f 73 69 74 69 6f 6e  0d 05 46 1e 2e 73 6c 6f  |position..F..slo|
00000a70  6f 70 20 20 42 4c 20 20  20 20 20 20 73 77 61 70  |op  BL      swap|
00000a80  5f 62 61 6e 6b 73 0d 05  50 1c 20 20 20 20 20 20  |_banks..P.      |
00000a90  20 20 4d 4f 56 20 20 20  20 20 72 30 2c 23 26 46  |  MOV     r0,#&F|
00000aa0  30 30 0d 05 5a 1e 20 20  20 20 20 20 20 20 42 4c  |00..Z.        BL|
00000ab0  20 20 20 20 20 20 73 65  74 5f 62 6f 72 64 65 72  |      set_border|
00000ac0  0d 05 64 1d 20 20 20 20  20 20 20 20 42 4c 20 20  |..d.        BL  |
00000ad0  20 20 20 20 63 6f 70 79  5f 62 61 6e 6b 0d 05 6e  |    copy_bank..n|
00000ae0  1c 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00000af0  20 72 30 2c 23 26 30 46  30 0d 05 78 1e 20 20 20  | r0,#&0F0..x.   |
00000b00  20 20 20 20 20 42 4c 20  20 20 20 20 20 73 65 74  |     BL      set|
00000b10  5f 62 6f 72 64 65 72 0d  05 82 1d 20 20 20 20 20  |_border....     |
00000b20  20 20 20 42 4c 20 20 20  20 20 20 73 63 72 6f 6c  |   BL      scrol|
00000b30  6c 5f 6f 6e 0d 05 8c 1c  20 20 20 20 20 20 20 20  |l_on....        |
00000b40  4d 4f 56 20 20 20 20 20  72 30 2c 23 26 30 30 30  |MOV     r0,#&000|
00000b50  0d 05 96 1e 20 20 20 20  20 20 20 20 42 4c 20 20  |....        BL  |
00000b60  20 20 20 20 73 65 74 5f  62 6f 72 64 65 72 0d 05  |    set_border..|
00000b70  a0 29 20 20 20 20 20 20  20 20 53 57 49 20 20 20  |.)        SWI   |
00000b80  20 20 22 58 4f 53 5f 52  65 61 64 45 73 63 61 70  |  "XOS_ReadEscap|
00000b90  65 53 74 61 74 65 22 0d  05 aa 19 20 20 20 20 20  |eState"....     |
00000ba0  20 20 20 42 43 43 20 20  20 20 20 73 6c 6f 6f 70  |   BCC     sloop|
00000bb0  0d 05 b4 1b 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00000bc0  20 20 20 20 72 30 2c 23  31 32 36 0d 05 be 1e 20  |    r0,#126.... |
00000bd0  20 20 20 20 20 20 20 53  57 49 20 20 20 20 20 22  |       SWI     "|
00000be0  58 4f 53 5f 42 79 74 65  22 0d 05 c8 25 20 20 20  |XOS_Byte"...%   |
00000bf0  20 20 20 20 20 4c 44 4d  46 44 20 20 20 28 73 70  |     LDMFD   (sp|
00000c00  29 21 2c 7b 72 30 2d 72  31 32 2c 70 63 7d 0d 05  |)!,{r0-r12,pc}..|
00000c10  d2 04 0d 05 dc 0e 2e 73  63 72 6f 6c 6c 5f 6f 6e  |.......scroll_on|
00000c20  0d 05 e6 26 20 20 20 20  20 20 20 20 53 54 4d 46  |...&        STMF|
00000c30  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 37  |D   (sp)!,{r0-r7|
00000c40  2c 6c 69 6e 6b 7d 0d 05  f0 21 20 20 20 20 20 20  |,link}...!      |
00000c50  20 20 4c 44 52 20 20 20  20 20 72 31 34 2c 6c 61  |  LDR     r14,la|
00000c60  6e 64 73 5f 65 6e 64 0d  05 fa 1b 20 20 20 20 20  |nds_end....     |
00000c70  20 20 20 43 4d 50 20 20  20 20 20 72 31 30 2c 72  |   CMP     r10,r|
00000c80  31 34 0d 06 04 24 20 20  20 20 20 20 20 20 4c 44  |14...$        LD|
00000c90  4d 47 45 46 44 20 28 73  70 29 21 2c 7b 72 30 2d  |MGEFD (sp)!,{r0-|
00000ca0  72 37 2c 70 63 7d 0d 06  0e 1b 20 20 20 20 20 20  |r7,pc}....      |
00000cb0  20 20 80 20 20 20 20 20  72 30 2c 72 31 30 2c 23  |  .     r0,r10,#|
00000cc0  33 0d 06 18 1f 20 20 20  20 20 20 20 20 41 44 52  |3....        ADR|
00000cd0  20 20 20 20 20 72 31 2c  62 61 6e 6b 5f 64 61 74  |     r1,bank_dat|
00000ce0  0d 06 22 25 20 20 20 20  20 20 20 20 4c 44 52 20  |.."%        LDR |
00000cf0  20 20 20 20 72 30 2c 5b  72 31 2c 72 30 2c 4c 53  |    r0,[r1,r0,LS|
00000d00  4c 20 23 32 5d 0d 06 2c  1c 20 20 20 20 20 20 20  |L #2]..,.       |
00000d10  20 42 49 43 20 20 20 20  20 72 31 2c 72 39 2c 23  | BIC     r1,r9,#|
00000d20  33 0d 06 36 1c 20 20 20  20 20 20 20 20 41 44 44  |3..6.        ADD|
00000d30  20 20 20 20 20 72 30 2c  72 30 2c 72 31 0d 06 40  |     r0,r0,r1..@|
00000d40  29 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |)        ADD    |
00000d50  20 72 31 2c 72 31 30 2c  23 62 79 74 65 73 5f 70  | r1,r10,#bytes_p|
00000d60  65 72 5f 72 6f 77 0d 06  4a 20 20 20 20 20 20 20  |er_row..J       |
00000d70  20 20 4c 44 52 20 20 20  20 20 72 32 2c 6c 61 6e  |  LDR     r2,lan|
00000d80  64 5f 61 64 64 72 0d 06  54 1f 20 20 20 20 20 20  |d_addr..T.      |
00000d90  20 20 4c 44 52 20 20 20  20 20 72 33 2c 73 70 72  |  LDR     r3,spr|
00000da0  5f 61 64 64 72 0d 06 5e  1f 20 20 20 20 20 20 20  |_addr..^.       |
00000db0  20 42 4c 20 20 20 20 20  20 73 68 6f 77 5f 63 6f  | BL      show_co|
00000dc0  6c 75 6d 6e 0d 06 68 1c  20 20 20 20 20 20 20 20  |lumn..h.        |
00000dd0  41 44 44 20 20 20 20 20  72 39 2c 72 39 2c 23 31  |ADD     r9,r9,#1|
00000de0  0d 06 72 25 20 20 20 20  20 20 20 20 43 4d 50 20  |..r%        CMP |
00000df0  20 20 20 20 72 39 2c 23  62 79 74 65 73 5f 70 65  |    r9,#bytes_pe|
00000e00  72 5f 72 6f 77 0d 06 7c  16 20 20 20 20 20 20 20  |r_row..|.       |
00000e10  20 ec 51 20 20 20 72 39  2c 23 30 0d 06 86 1e 20  | .Q   r9,#0.... |
00000e20  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00000e30  31 30 2c 72 31 30 2c 23  31 0d 06 90 24 20 20 20  |10,r10,#1...$   |
00000e40  20 20 20 20 20 4c 44 4d  46 44 20 20 20 28 73 70  |     LDMFD   (sp|
00000e50  29 21 2c 7b 72 30 2d 72  37 2c 70 63 7d 0d 06 9a  |)!,{r0-r7,pc}...|
00000e60  04 0d 06 a4 35 2e 6c 61  6e 64 73 5f 65 6e 64 20  |....5.lands_end |
00000e70  20 20 20 20 20 45 51 55  44 20 20 20 20 6c 61 6e  |     EQUD    lan|
00000e80  64 5f 65 78 74 2d 62 79  74 65 73 5f 70 65 72 5f  |d_ext-bytes_per_|
00000e90  72 6f 77 2d 31 36 0d 06  ae 25 2e 73 70 72 5f 61  |row-16...%.spr_a|
00000ea0  64 64 72 20 20 20 20 20  20 20 45 51 55 44 20 20  |ddr       EQUD  |
00000eb0  20 20 73 63 65 6e 65 5f  73 70 72 0d 06 b8 20 2e  |  scene_spr... .|
00000ec0  6c 61 6e 64 5f 61 64 64  72 20 20 20 20 20 20 45  |land_addr      E|
00000ed0  51 55 44 20 20 20 20 6c  61 6e 64 0d 06 c2 04 0d  |QUD    land.....|
00000ee0  06 cc 10 2e 73 68 6f 77  5f 63 6f 6c 75 6d 6e 0d  |....show_column.|
00000ef0  06 d6 27 20 20 20 20 20  20 20 20 53 54 4d 46 44  |..'        STMFD|
00000f00  20 20 20 28 73 70 29 21  2c 7b 72 30 2d 72 31 32  |   (sp)!,{r0-r12|
00000f10  2c 6c 69 6e 6b 7d 0d 06  e0 33 20 20 20 20 20 20  |,link}...3      |
00000f20  20 20 4d 4f 56 20 20 20  20 20 72 31 34 2c 72 31  |  MOV     r14,r1|
00000f30  2c 4c 53 52 20 23 a4 6c  6f 67 32 28 73 70 72 69  |,LSR #.log2(spri|
00000f40  74 65 5f 77 69 64 74 68  29 0d 06 ea 27 20 20 20  |te_width)...'   |
00000f50  20 20 20 20 20 80 20 20  20 20 20 72 38 2c 72 31  |     .     r8,r1|
00000f60  2c 23 73 70 72 69 74 65  5f 77 69 64 74 68 2d 31  |,#sprite_width-1|
00000f70  0d 06 f4 1a 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00000f80  20 20 20 20 72 36 2c 23  6e 6f 0d 06 fe 20 20 20  |    r6,#no...   |
00000f90  20 20 20 20 20 20 4d 4c  41 20 20 20 20 20 72 37  |      MLA     r7|
00000fa0  2c 72 31 34 2c 72 36 2c  72 32 0d 07 08 0e 2e 73  |,r14,r6,r2.....s|
00000fb0  68 6f 77 5f 63 6f 6c 31  0d 07 12 1e 20 20 20 20  |how_col1....    |
00000fc0  20 20 20 20 4c 44 52 42  20 20 20 20 72 39 2c 5b  |    LDRB    r9,[|
00000fd0  72 37 5d 2c 23 31 0d 07  1c 25 20 20 20 20 20 20  |r7],#1...%      |
00000fe0  20 20 4c 44 52 20 20 20  20 20 72 39 2c 5b 72 33  |  LDR     r9,[r3|
00000ff0  2c 72 39 2c 4c 53 4c 20  23 32 5d 0d 07 26 20 20  |,r9,LSL #2]..&  |
00001000  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 72  |       LDR     r|
00001010  31 34 2c 5b 72 39 2c 23  33 32 5d 0d 07 30 1d 20  |14,[r9,#32]..0. |
00001020  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00001030  39 2c 72 39 2c 72 31 34  0d 07 3a 1d 20 20 20 20  |9,r9,r14..:.    |
00001040  20 20 20 20 42 49 43 20  20 20 20 20 72 31 34 2c  |    BIC     r14,|
00001050  72 38 2c 23 33 0d 07 44  1d 20 20 20 20 20 20 20  |r8,#3..D.       |
00001060  20 41 44 44 20 20 20 20  20 72 39 2c 72 39 2c 72  | ADD     r9,r9,r|
00001070  31 34 0d 07 4e 26 20 20  20 20 20 20 20 20 43 4d  |14..N&        CM|
00001080  50 20 20 20 20 20 72 38  2c 23 73 70 72 69 74 65  |P     r8,#sprite|
00001090  5f 77 69 64 74 68 2d 34  0d 07 58 1d 20 20 20 20  |_width-4..X.    |
000010a0  20 20 20 20 41 44 44 4c  54 20 20 20 72 31 30 2c  |    ADDLT   r10,|
000010b0  72 39 2c 23 34 0d 07 62  22 20 20 20 20 20 20 20  |r9,#4..b"       |
000010c0  20 4c 44 52 47 45 42 20  20 72 31 30 2c 5b 72 37  | LDRGEB  r10,[r7|
000010d0  2c 23 6e 6f 2d 31 5d 0d  07 6c 27 20 20 20 20 20  |,#no-1]..l'     |
000010e0  20 20 20 4c 44 52 47 45  20 20 20 72 31 30 2c 5b  |   LDRGE   r10,[|
000010f0  72 33 2c 72 31 30 2c 4c  53 4c 20 23 32 5d 0d 07  |r3,r10,LSL #2]..|
00001100  76 21 20 20 20 20 20 20  20 20 4c 44 52 47 45 20  |v!        LDRGE |
00001110  20 20 72 31 34 2c 5b 72  31 30 2c 23 33 32 5d 0d  |  r14,[r10,#32].|
00001120  07 80 1f 20 20 20 20 20  20 20 20 41 44 44 47 45  |...        ADDGE|
00001130  20 20 20 72 31 30 2c 72  31 30 2c 72 31 34 0d 07  |   r10,r10,r14..|
00001140  8a 1b 20 20 20 20 20 20  20 20 80 20 20 20 20 20  |..        .     |
00001150  72 31 34 2c 72 31 2c 23  33 0d 07 94 22 20 20 20  |r14,r1,#3..."   |
00001160  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 31 34  |     MOV     r14|
00001170  2c 72 31 34 2c 4c 53 4c  20 23 33 0d 07 9e 1e 20  |,r14,LSL #3.... |
00001180  20 20 20 20 20 20 20 52  53 42 20 20 20 20 20 72  |       RSB     r|
00001190  34 2c 72 31 34 2c 23 33  32 0d 07 a8 20 5d 3a e3  |4,r14,#32... ]:.|
000011a0  20 7a 25 3d 30 20 b8 20  73 69 7a 65 2d 31 3a 5b  | z%=0 . size-1:[|
000011b0  4f 50 54 20 70 61 73 73  25 0d 07 b2 2a 20 20 20  |OPT pass%...*   |
000011c0  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 31 31  |     LDR     r11|
000011d0  2c 5b 72 39 5d 2c 23 73  70 72 69 74 65 5f 77 69  |,[r9],#sprite_wi|
000011e0  64 74 68 0d 07 bc 2b 20  20 20 20 20 20 20 20 4c  |dth...+        L|
000011f0  44 52 20 20 20 20 20 72  31 32 2c 5b 72 31 30 5d  |DR     r12,[r10]|
00001200  2c 23 73 70 72 69 74 65  5f 77 69 64 74 68 0d 07  |,#sprite_width..|
00001210  c6 23 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |.#        MOV   |
00001220  20 20 72 31 31 2c 72 31  31 2c 4c 53 52 20 72 31  |  r11,r11,LSR r1|
00001230  34 0d 07 d0 25 20 20 20  20 20 20 20 20 84 52 20  |4...%        .R |
00001240  20 20 20 20 72 31 31 2c  72 31 31 2c 72 31 32 2c  |    r11,r11,r12,|
00001250  4c 53 4c 20 72 34 0d 07  da 2b 20 20 20 20 20 20  |LSL r4...+      |
00001260  20 20 53 54 52 20 20 20  20 20 72 31 31 2c 5b 72  |  STR     r11,[r|
00001270  30 5d 2c 23 62 79 74 65  73 5f 70 65 72 5f 72 6f  |0],#bytes_per_ro|
00001280  77 0d 07 e4 15 5d 3a ed  20 7a 25 3a 5b 4f 50 54  |w....]:. z%:[OPT|
00001290  20 70 61 73 73 25 0d 07  ee 1c 20 20 20 20 20 20  | pass%....      |
000012a0  20 20 53 55 42 53 20 20  20 20 72 36 2c 72 36 2c  |  SUBS    r6,r6,|
000012b0  23 31 0d 07 f8 1d 20 20  20 20 20 20 20 20 42 4e  |#1....        BN|
000012c0  45 20 20 20 20 20 73 68  6f 77 5f 63 6f 6c 31 0d  |E     show_col1.|
000012d0  08 02 25 20 20 20 20 20  20 20 20 4c 44 4d 46 44  |..%        LDMFD|
000012e0  20 20 20 28 73 70 29 21  2c 7b 72 30 2d 72 31 32  |   (sp)!,{r0-r12|
000012f0  2c 70 63 7d 0d 08 0c 05  5d 0d 08 16 19 62 61 6e  |,pc}....]....ban|
00001300  6b 5f 64 61 74 3d a4 61  6c 6c 6f 63 28 31 36 2c  |k_dat=.alloc(16,|
00001310  30 29 0d 08 20 0e 5b 4f  50 54 20 70 61 73 73 25  |0).. .[OPT pass%|
00001320  0d 08 2a 0e 2e 63 6f 70  79 5f 62 61 6e 6b 0d 08  |..*..copy_bank..|
00001330  34 27 20 20 20 20 20 20  20 20 53 54 4d 46 44 20  |4'        STMFD |
00001340  20 20 28 73 70 29 21 2c  7b 72 30 2d 72 31 32 2c  |  (sp)!,{r0-r12,|
00001350  6c 69 6e 6b 7d 0d 08 3e  1b 20 20 20 20 20 20 20  |link}..>.       |
00001360  20 80 20 20 20 20 20 72  30 2c 72 31 30 2c 23 33  | .     r0,r10,#3|
00001370  0d 08 48 1f 20 20 20 20  20 20 20 20 41 44 52 20  |..H.        ADR |
00001380  20 20 20 20 72 31 2c 62  61 6e 6b 5f 64 61 74 0d  |    r1,bank_dat.|
00001390  08 52 26 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.R&        LDR  |
000013a0  20 20 20 72 31 30 2c 5b  72 31 2c 72 30 2c 4c 53  |   r10,[r1,r0,LS|
000013b0  4c 20 23 32 5d 0d 08 5c  1c 20 20 20 20 20 20 20  |L #2]..\.       |
000013c0  20 42 49 43 20 20 20 20  20 72 39 2c 72 39 2c 23  | BIC     r9,r9,#|
000013d0  33 0d 08 66 1e 20 20 20  20 20 20 20 20 41 44 44  |3..f.        ADD|
000013e0  20 20 20 20 20 72 31 30  2c 72 31 30 2c 72 39 0d  |     r10,r10,r9.|
000013f0  08 70 4a 20 20 20 20 20  20 20 20 41 44 52 20 20  |.pJ        ADR  |
00001400  20 20 20 72 37 2c 72 6f  75 74 69 6e 65 20 3b 20  |   r7,routine ; |
00001410  77 68 65 72 65 20 77 65  27 72 65 20 67 6f 69 6e  |where we're goin|
00001420  67 20 74 6f 20 61 73 73  65 6d 62 6c 65 20 6f 75  |g to assemble ou|
00001430  72 20 72 6f 75 74 69 6e  65 0d 08 7a 25 20 20 20  |r routine..z%   |
00001440  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 38 2c  |     MOV     r8,|
00001450  23 62 79 74 65 73 5f 70  65 72 5f 72 6f 77 0d 08  |#bytes_per_row..|
00001460  84 1a 20 20 20 20 20 20  20 20 4d 56 4e 20 20 20  |..        MVN   |
00001470  20 20 72 31 34 2c 23 30  0d 08 8e 1c 20 20 20 20  |  r14,#0....    |
00001480  20 20 20 20 41 44 52 20  20 20 20 20 72 32 2c 6c  |    ADR     r2,l|
00001490  6f 61 64 69 0d 08 98 0f  2e 6d 61 6b 65 5f 72 6f  |oadi.....make_ro|
000014a0  75 74 65 0d 08 a2 19 20  20 20 20 20 20 20 20 43  |ute....        C|
000014b0  4d 50 20 20 20 20 20 72  38 2c 23 30 0d 08 ac 1e  |MP     r8,#0....|
000014c0  20 20 20 20 20 20 20 20  42 45 51 20 20 20 20 20  |        BEQ     |
000014d0  6d 61 64 65 5f 72 6f 75  74 65 0d 08 b6 28 20 20  |made_route...(  |
000014e0  20 20 20 20 20 20 52 53  42 20 20 20 20 20 72 36  |      RSB     r6|
000014f0  2c 72 39 2c 23 62 79 74  65 73 5f 70 65 72 5f 72  |,r9,#bytes_per_r|
00001500  6f 77 0d 08 c0 19 20 20  20 20 20 20 20 20 43 4d  |ow....        CM|
00001510  50 20 20 20 20 20 72 36  2c 72 38 0d 08 ca 19 20  |P     r6,r8.... |
00001520  20 20 20 20 20 20 20 4d  4f 56 47 54 20 20 20 72  |       MOVGT   r|
00001530  36 2c 72 38 0d 08 d4 1a  20 20 20 20 20 20 20 20  |6,r8....        |
00001540  43 4d 50 20 20 20 20 20  72 36 2c 23 34 30 0d 08  |CMP     r6,#40..|
00001550  de 1a 20 20 20 20 20 20  20 20 4d 4f 56 47 54 20  |..        MOVGT |
00001560  20 20 72 36 2c 23 34 30  0d 08 e8 1e 20 20 20 20  |  r6,#40....    |
00001570  20 20 20 20 4c 44 4d 49  41 20 20 20 72 32 2c 7b  |    LDMIA   r2,{|
00001580  72 33 2c 72 34 7d 0d 08  f2 20 20 20 20 20 20 20  |r3,r4}...       |
00001590  20 20 4d 4f 56 20 20 20  20 20 72 30 2c 72 36 2c  |  MOV     r0,r6,|
000015a0  4c 53 52 20 23 32 0d 08  fc 1d 20 20 20 20 20 20  |LSR #2....      |
000015b0  20 20 52 53 42 20 20 20  20 20 72 30 2c 72 30 2c  |  RSB     r0,r0,|
000015c0  23 31 30 0d 09 06 22 20  20 20 20 20 20 20 20 80  |#10..."        .|
000015d0  20 20 20 20 20 72 33 2c  72 33 2c 72 31 34 2c 4c  |     r3,r3,r14,L|
000015e0  53 4c 20 72 30 0d 09 10  22 20 20 20 20 20 20 20  |SL r0..."       |
000015f0  20 80 20 20 20 20 20 72  34 2c 72 34 2c 72 31 34  | .     r4,r4,r14|
00001600  2c 4c 53 4c 20 72 30 0d  09 1a 1f 20 20 20 20 20  |,LSL r0....     |
00001610  20 20 20 53 54 4d 49 41  20 20 20 72 37 21 2c 7b  |   STMIA   r7!,{|
00001620  72 33 2c 72 34 7d 0d 09  24 1c 20 20 20 20 20 20  |r3,r4}..$.      |
00001630  20 20 53 55 42 20 20 20  20 20 72 38 2c 72 38 2c  |  SUB     r8,r8,|
00001640  72 36 0d 09 2e 1c 20 20  20 20 20 20 20 20 41 44  |r6....        AD|
00001650  44 20 20 20 20 20 72 39  2c 72 39 2c 72 36 0d 09  |D     r9,r9,r6..|
00001660  38 25 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |8%        CMP   |
00001670  20 20 72 39 2c 23 62 79  74 65 73 5f 70 65 72 5f  |  r9,#bytes_per_|
00001680  72 6f 77 0d 09 42 1b 20  20 20 20 20 20 20 20 4c  |row..B.        L|
00001690  44 52 45 51 20 20 20 72  30 2c 73 75 62 69 0d 09  |DREQ   r0,subi..|
000016a0  4c 1e 20 20 20 20 20 20  20 20 53 54 52 45 51 20  |L.        STREQ |
000016b0  20 20 72 30 2c 5b 72 37  5d 2c 23 34 0d 09 56 16  |  r0,[r7],#4..V.|
000016c0  20 20 20 20 20 20 20 20  ec 51 20 20 20 72 39 2c  |        .Q   r9,|
000016d0  23 30 0d 09 60 1e 20 20  20 20 20 20 20 20 42 20  |#0..`.        B |
000016e0  20 20 20 20 20 20 6d 61  6b 65 5f 72 6f 75 74 65  |      make_route|
000016f0  0d 09 6a 0f 2e 6d 61 64  65 5f 72 6f 75 74 65 0d  |..j..made_route.|
00001700  09 74 1c 20 20 20 20 20  20 20 20 41 44 52 20 20  |.t.        ADR  |
00001710  20 20 20 72 32 2c 61 64  64 31 30 0d 09 7e 1e 20  |   r2,add10..~. |
00001720  20 20 20 20 20 20 20 4c  44 4d 49 41 20 20 20 72  |       LDMIA   r|
00001730  32 2c 7b 72 33 2d 72 36  7d 0d 09 88 21 20 20 20  |2,{r3-r6}...!   |
00001740  20 20 20 20 20 41 44 52  20 20 20 20 20 72 35 2c  |     ADR     r5,|
00001750  72 6f 75 74 69 6e 65 2d  31 36 0d 09 92 1c 20 20  |routine-16....  |
00001760  20 20 20 20 20 20 53 55  42 20 20 20 20 20 72 35  |      SUB     r5|
00001770  2c 72 37 2c 72 35 0d 09  9c 20 20 20 20 20 20 20  |,r7,r5...       |
00001780  20 20 4d 4f 56 20 20 20  20 20 72 35 2c 72 35 2c  |  MOV     r5,r5,|
00001790  41 53 52 20 23 32 0d 09  a6 1c 20 20 20 20 20 20  |ASR #2....      |
000017a0  20 20 52 53 42 20 20 20  20 20 72 35 2c 72 35 2c  |  RSB     r5,r5,|
000017b0  23 30 0d 09 b0 24 20 20  20 20 20 20 20 20 42 49  |#0...$        BI|
000017c0  43 20 20 20 20 20 72 35  2c 72 35 2c 23 26 46 46  |C     r5,r5,#&FF|
000017d0  30 30 30 30 30 30 0d 09  ba 23 20 20 20 20 20 20  |000000...#      |
000017e0  20 20 84 52 20 20 20 20  20 72 35 2c 72 35 2c 23  |  .R     r5,r5,#|
000017f0  26 31 41 30 30 30 30 30  30 0d 09 c4 1e 20 20 20  |&1A000000....   |
00001800  20 20 20 20 20 53 54 4d  49 41 20 20 20 72 37 2c  |     STMIA   r7,|
00001810  7b 72 33 2d 72 36 7d 0d  09 ce 1d 20 20 20 20 20  |{r3-r6}....     |
00001820  20 20 20 4c 44 52 20 20  20 20 20 72 31 31 2c 76  |   LDR     r11,v|
00001830  64 75 5f 6f 0d 09 d8 23  20 20 20 20 20 20 20 20  |du_o...#        |
00001840  4d 4f 56 20 20 20 20 20  72 31 32 2c 23 74 6f 74  |MOV     r12,#tot|
00001850  61 6c 5f 73 69 7a 65 0d  09 e2 1b 20 20 20 20 20  |al_size....     |
00001860  20 20 20 42 4c 20 20 20  20 20 20 72 6f 75 74 69  |   BL      routi|
00001870  6e 65 0d 09 ec 25 20 20  20 20 20 20 20 20 4c 44  |ne...%        LD|
00001880  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 30 2d  |MFD   (sp)!,{r0-|
00001890  72 31 32 2c 70 63 7d 0d  09 f6 04 0d 0a 00 20 2e  |r12,pc}....... .|
000018a0  6c 6f 61 64 69 20 20 4c  44 4d 49 41 20 20 20 72  |loadi  LDMIA   r|
000018b0  31 30 21 2c 7b 72 30 2d  72 39 7d 0d 0a 0a 20 20  |10!,{r0-r9}...  |
000018c0  20 20 20 20 20 20 20 53  54 4d 49 41 20 20 20 72  |       STMIA   r|
000018d0  31 31 21 2c 7b 72 30 2d  72 39 7d 0d 0a 14 2a 2e  |11!,{r0-r9}...*.|
000018e0  73 75 62 69 20 20 20 53  55 42 20 20 20 20 20 72  |subi   SUB     r|
000018f0  31 30 2c 72 31 30 2c 23  62 79 74 65 73 5f 70 65  |10,r10,#bytes_pe|
00001900  72 5f 72 6f 77 0d 0a 1e  04 0d 0a 28 2a 2e 61 64  |r_row......(*.ad|
00001910  64 31 30 20 20 41 44 44  20 20 20 20 20 72 31 30  |d10  ADD     r10|
00001920  2c 72 31 30 2c 23 62 79  74 65 73 5f 70 65 72 5f  |,r10,#bytes_per_|
00001930  72 6f 77 0d 0a 32 1e 20  20 20 20 20 20 20 20 53  |row..2.        S|
00001940  55 42 53 20 20 20 20 72  31 32 2c 72 31 32 2c 23  |UBS    r12,r12,#|
00001950  31 0d 0a 3c 15 20 20 20  20 20 20 20 20 44 43 44  |1..<.        DCD|
00001960  20 20 20 20 20 30 0d 0a  46 1b 2e 72 65 74 69 20  |     0..F..reti |
00001970  20 20 4d 4f 56 20 20 20  20 20 70 63 2c 6c 69 6e  |  MOV     pc,lin|
00001980  6b 0d 0a 50 04 0d 0a 5a  0f 2e 73 77 61 70 5f 62  |k..P...Z..swap_b|
00001990  61 6e 6b 73 0d 0a 64 26  20 20 20 20 20 20 20 20  |anks..d&        |
000019a0  53 54 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |STMFD   (sp)!,{r|
000019b0  30 2d 72 32 2c 6c 69 6e  6b 7d 0d 0a 6e 1a 20 20  |0-r2,link}..n.  |
000019c0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
000019d0  2c 23 31 39 0d 0a 78 1e  20 20 20 20 20 20 20 20  |,#19..x.        |
000019e0  53 57 49 20 20 20 20 20  22 58 4f 53 5f 42 79 74  |SWI     "XOS_Byt|
000019f0  65 22 0d 0a 82 1b 20 20  20 20 20 20 20 20 4d 4f  |e"....        MO|
00001a00  56 20 20 20 20 20 72 30  2c 23 31 31 32 0d 0a 8c  |V     r0,#112...|
00001a10  1a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00001a20  20 72 31 2c 72 31 31 0d  0a 96 1e 20 20 20 20 20  | r1,r11....     |
00001a30  20 20 20 53 57 49 20 20  20 20 20 22 58 4f 53 5f  |   SWI     "XOS_|
00001a40  42 79 74 65 22 0d 0a a0  1e 20 20 20 20 20 20 20  |Byte"....       |
00001a50  20 52 53 42 20 20 20 20  20 72 31 31 2c 72 31 31  | RSB     r11,r11|
00001a60  2c 23 33 0d 0a aa 1b 20  20 20 20 20 20 20 20 4d  |,#3....        M|
00001a70  4f 56 20 20 20 20 20 72  30 2c 23 31 31 33 0d 0a  |OV     r0,#113..|
00001a80  b4 1a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
00001a90  20 20 72 31 2c 72 31 31  0d 0a be 1e 20 20 20 20  |  r1,r11....    |
00001aa0  20 20 20 20 53 57 49 20  20 20 20 20 22 58 4f 53  |    SWI     "XOS|
00001ab0  5f 42 79 74 65 22 0d 0a  c8 1c 20 20 20 20 20 20  |_Byte"....      |
00001ac0  20 20 41 44 52 20 20 20  20 20 72 30 2c 76 64 75  |  ADR     r0,vdu|
00001ad0  5f 69 0d 0a d2 1c 20 20  20 20 20 20 20 20 41 44  |_i....        AD|
00001ae0  52 20 20 20 20 20 72 31  2c 76 64 75 5f 6f 0d 0a  |R     r1,vdu_o..|
00001af0  dc 2a 20 20 20 20 20 20  20 20 53 57 49 20 20 20  |.*        SWI   |
00001b00  20 20 22 58 4f 53 5f 52  65 61 64 56 64 75 56 61  |  "XOS_ReadVduVa|
00001b10  72 69 61 62 6c 65 73 22  0d 0a e6 24 20 20 20 20  |riables"...$    |
00001b20  20 20 20 20 4c 44 4d 46  44 20 20 20 28 73 70 29  |    LDMFD   (sp)|
00001b30  21 2c 7b 72 30 2d 72 32  2c 70 63 7d 0d 0a f0 04  |!,{r0-r2,pc}....|
00001b40  0d 0a fa 17 2e 76 64 75  5f 69 20 20 45 51 55 44  |.....vdu_i  EQUD|
00001b50  20 20 20 20 31 34 38 0d  0b 04 16 20 20 20 20 20  |    148....     |
00001b60  20 20 20 45 51 55 44 20  20 20 20 2d 31 0d 0b 0e  |   EQUD    -1...|
00001b70  15 2e 76 64 75 5f 6f 20  20 45 51 55 44 20 20 20  |..vdu_o  EQUD   |
00001b80  20 30 0d 0b 18 15 20 20  20 20 20 20 20 20 45 51  | 0....        EQ|
00001b90  55 44 20 20 20 20 30 0d  0b 22 04 0d 0b 2c 0f 2e  |UD    0.."...,..|
00001ba0  73 65 74 5f 62 6f 72 64  65 72 0d 0b 36 26 20 20  |set_border..6&  |
00001bb0  20 20 20 20 20 20 53 54  4d 46 44 20 20 20 28 73  |      STMFD   (s|
00001bc0  70 29 21 2c 7b 72 30 2d  72 32 2c 6c 69 6e 6b 7d  |p)!,{r0-r2,link}|
00001bd0  0d 0b 40 21 20 20 20 20  20 20 20 20 53 57 49 20  |..@!        SWI |
00001be0  20 20 20 20 22 58 4f 53  5f 45 6e 74 65 72 4f 53  |    "XOS_EnterOS|
00001bf0  22 0d 0b 4a 19 20 20 20  20 20 20 20 20 4d 4f 56  |"..J.        MOV|
00001c00  20 20 20 20 20 72 32 2c  70 63 0d 0b 54 1c 20 20  |     r2,pc..T.  |
00001c10  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 31  |      MOV     r1|
00001c20  2c 23 56 49 44 43 0d 0b  5e 1f 20 20 20 20 20 20  |,#VIDC..^.      |
00001c30  20 20 84 52 20 20 20 20  20 72 30 2c 72 30 2c 23  |  .R     r0,r0,#|
00001c40  31 3c 3c 33 30 0d 0b 68  1b 20 20 20 20 20 20 20  |1<<30..h.       |
00001c50  20 53 54 52 20 20 20 20  20 72 30 2c 5b 72 31 5d  | STR     r0,[r1]|
00001c60  0d 0b 72 19 20 20 20 20  20 20 20 20 54 45 51 50  |..r.        TEQP|
00001c70  20 20 20 20 72 32 2c 23  33 0d 0b 7c 19 20 20 20  |    r2,#3..|.   |
00001c80  20 20 20 20 20 4d 4f 56  4e 56 20 20 20 72 30 2c  |     MOVNV   r0,|
00001c90  72 30 0d 0b 86 24 20 20  20 20 20 20 20 20 4c 44  |r0...$        LD|
00001ca0  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 30 2d  |MFD   (sp)!,{r0-|
00001cb0  72 32 2c 70 63 7d 0d 0b  90 05 5d 0d 0b 9a 19 72  |r2,pc}....]....r|
00001cc0  6f 75 74 69 6e 65 3d a4  61 6c 6c 6f 63 28 31 32  |outine=.alloc(12|
00001cd0  38 2c 30 29 0d 0b a4 21  62 61 6e 6b 73 3d a4 61  |8,0)...!banks=.a|
00001ce0  6c 6c 6f 63 28 34 2a 73  63 72 65 65 6e 5f 73 69  |lloc(4*screen_si|
00001cf0  7a 65 2c 30 29 0d 0b ae  0b ed 20 70 61 73 73 25  |ze,0)..... pass%|
00001d00  0d 0b b8 05 e1 0d 0b c2  05 3a 0d 0b cc 19 dd 20  |.........:..... |
00001d10  a4 61 6c 6c 6f 63 28 73  69 7a 65 2c 61 6c 69 67  |.alloc(size,alig|
00001d20  6e 25 29 0d 0b d6 16 c8  95 20 50 25 20 83 20 31  |n%)...... P% . 1|
00001d30  36 3c 3e 61 6c 69 67 6e  25 0d 0b e0 0a 20 50 25  |6<>align%.... P%|
00001d40  2b 3d 34 0d 0b ea 05 ce  0d 0b f4 0c 50 25 2b 3d  |+=4.........P%+=|
00001d50  73 69 7a 65 0d 0b fe 0c  3d 50 25 2d 73 69 7a 65  |size....=P%-size|
00001d60  0d 0c 08 05 3a 0d 0c 12  1a dd 20 a4 6c 6f 67 32  |....:..... .log2|
00001d70  28 61 25 29 3d ab 28 61  25 29 2f ab 28 32 29 0d  |(a%)=.(a%)/.(2).|
00001d80  ff                                                |.|
00001d81