Home » Archimedes archive » Acorn User » AU 1997-08 B.adf » Regulars » starinfo/Vlietinck/!Flynghi/Flynhi

starinfo/Vlietinck/!Flynghi/Flynhi

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 1997-08 B.adf » Regulars
Filename: starinfo/Vlietinck/!Flynghi/Flynhi
Read OK:
File size: 6C29 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM> FLYNhi
   20REM (c) Jan Vlietinck
   30
   40REMON ERROR:ON ERROR OFF:REPORT:PRINT ERL:END
   50
   60DIM stack 100000
   70
   80MOUSE ON
   90*POINTER
  100banks=2
  110SH=7             :REM Determines the number of patches: 2^SH
  120ED=2^SH:D1=ED:D2=ED
  130FX=3:FIX=2^FX
  140HORIZON=1024       :REM Determines how deep the land extends
  150ZOOM=5            :REM Determines the phycical measures of patch
  160DIM PUNT 16*D1*D2
  170DIM VLAK 12*D1*D2
  180REM The array PUNT is of size 2^SH and contains four words:
  190REM the height, projected x, projected y and colour
  200DIM map_sprite_height% 4000+(ED*ED)
  210DIM map_sprite_colors% 4000+(ED*ED)
  220SYS "OS_File",16,"<Flyn$Dir>.MAP_H2",map_sprite_height%,0
  230SYS "OS_File",16,"<Flyn$Dir>.MAP_C",map_sprite_colors%,0
  240
  270PROCPUNTEN(PUNT)
  280PROCgouraud
  290CALL set_mode
  300DIM BLK 40
  310!BLK=7:BLK!4=150:BLK!8=-1
  320SYS "OS_ReadVduVariables",BLK,BLK
  330IF (banks>1) AND (BLK!4<2*!BLK) THEN
  340SYS "OS_ChangeDynamicArea",2,banks*!BLK-BLK!4
  350ENDIF
  360P1=2*PI/3
  370FOR I=1 TO 255
  380 P=I/256*2*PI
  390 R=128*(1+COS(P))
  400 G=128*(1+COS(2*P+P1))
  410 B=128*(1+COS(P-P1))
  420 COLOUR I,R,G,B
  430NEXT I
  440CALL set
  450
  460PROCASS2
  470PROCmain
  480CALL CALC_DIVTABLE
  490MOUSE TO 640,512
  500TIME=0
  510CALL main
  520T=TIME
  530MODE 0
  540PRINT T/100
  550END
  560
  570DEF PROCPUNTEN(PUNT)
  580LOCAL I%,J%
  590FOR J%=0 TO D2-1
  600FOR I%=0 TO D1-1
  610height%=?(map_sprite_height%+56+I%+(J%*ED))
  620height%=(height%AND 255)-128
  630!PUNT=height%*FIX*8
  640col%=?(map_sprite_colors%+56+I%+(J%*ED))
  650col%=col% AND 255: IF col%=0 col%=1
  660PUNT!12=col%
  670PUNT+=16
  680NEXT
  690NEXT
  700ENDPROC
  710
  720DEF PROCmain
  730LOCAL P%,Q%
  740DIM Q% 1000
  750FOR PASS=0 TO 2 STEP 2
  760P%=Q%
  770[OPT PASS
  780.spd DCD 0
  790.main
  800          STMFD     13!,{14}
  810          STR       13,spd
  820          FNadr(13,stack)
  830          BL        claim_interrupt
  840.mainloop
  850          MOV       0,#&70
  860          LDR       1,bankrear
  870          MOV       2,#0
  880          SWI       "OS_Byte"
  890
  900          BL        set
  910          BL        clear
  920          BL        show
  930          BL        display_fps
  940          BL        next_frame
  950          
  960          SWI       "OS_ReadEscapeState"
  970          BCC       mainloop
  980          
  990          BL        release_interrupt
 1000          LDR 13,spd
 1010          LDMFD     13!,{PC}
 1020
 1030
 1040.next_frame
 1050          SWI       "OS_IntOff"
 1060          LDR       1,bankcount
 1070          ADD       1,1,#1
 1080          STR       1,bankcount
 1090          SWI       "OS_IntOn"
 1100          LDR       1,bankrear
 1110          CMP       1,#banks
 1120          MOVEQ     1,#0
 1130          ADD       1,1,#1
 1140          STR       1,bankrear
 1150.decim    LDR       0,bankfront
 1160          CMP       0,1
 1170          BEQ       decim
 1180          MOV       PC,R14
 1190
 1200.time_counter       EQUD 0
 1210.frame_counter      EQUD 0
 1220.frame_average      EQUD 0
 1230.output_buffer      DCD 0:DCD 0:DCD 0:DCD 0
 1240.display_fps
 1250          STMFD     13!,{0-2,14}
 1260          SWI       &11E
 1270          LDR       R0,frame_average
 1280          ADR       R1,output_buffer
 1290          MOV       R2,#16
 1300          SWI       "OS_ConvertInteger1"
 1310          SWI       "OS_Write0"
 1320          LDMFD     13!,{0-2,PC}
 1330
 1340.marker DCD 0
 1350.ticker   STMFD     13!,{0-3,14}
 1360          LDR       0,marker
 1370          EORS      0,0,#1
 1380          STR       0,marker
 1390          LDMEQFD   13!,{0-3,PC}
 1400          LDR       0,time_counter  ; execute at 50 Hz
 1410          ADD       0,0,#1
 1420          CMP       0,#50
 1430          MOVEQ     0,#0
 1440          STR       0,time_counter
 1450          LDREQ     1,frame_counter
 1460          STREQ     1,frame_average
 1470          STREQ     0,frame_counter
 1480          LDMFD     13!,{0-3,PC}
 1490
 1500
 1510 .bankfront EQUD 1      ; the front frame is displayed
 1520 .bankrear  EQUD 2      ; the rear frame is drawn
 1530 .bankcount EQUD 0      ; nr. of ready frames in queue
 1540
 1550.time_stamp DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0
 1560.sync_time  EQUD 0
 1570
 1580 .vsync
 1590          CMP       0,#4      ; check if event is vsync
 1600          MOVNES    PC,14     ; else exit
 1610          STMFD     13!,{0-1}
 1620          MOV       R0,PC
 1630          ORR       R1,R0,#1     ; put in scv mode
 1640          TEQP      R1,#0
 1650          MOV       R0,R0
 1660          STMFD     13!,{0-2,14}
 1670
 1680          LDR       0,sync_time     ; increment sync time every
 1690          ADD       0,0,#1          ; vsync
 1700          STR       0,sync_time
 1710
 1720          LDR       R0,bankcount   ; if no new frames available
 1730          CMP       R0,#0          ; then display the previous frame
 1740          BEQ       no_hurry
 1750
 1760          SUB       R0,R0,#1       ; else display new frame and update queue
 1770          STR       R0,bankcount
 1780          LDR       R1,bankfront
 1790          CMP       R1,#banks
 1800          MOVEQ     R1,#0
 1810          ADD       R1,R1,#1
 1820          STR       R1,bankfront
 1830          MOV       R0,#&71
 1840          SWI       6                ; "OS_Byte"
 1850
 1860          LDR       R0,frame_counter
 1870          ADD       R0,R0,#1
 1880          STR       R0,frame_counter
 1890
 1900 .no_hurry
 1910          LDMFD     13!,{0-2,14}
 1920          TEQP      R0,#0     ; put back in irq mode
 1930          MOV       R0,R0
 1940          LDMFD     13!,{0-1}
 1950          MOVS      PC,R14
 1960
 1970.claim_interrupt
 1980          MOV       R0,#&70
 1990          LDR       R1,bankfront
 2000          SWI       "OS_Byte"
 2010          SWI       &10C                ; clear frame at front
 2020          MOV       R0,#&1C   ; claim ticker
 2030          ADR       R1,ticker
 2040          MOV       R2,#0
 2050          SWI       "OS_Claim"
 2060          MOV       R0,#&10
 2070          ADR       R1,vsync
 2080          MOV       R2,#0
 2090          SWI       "OS_Claim"
 2100          MOV       R0,#14
 2110          MOV       R1,#4
 2120          SWI       "OS_Byte"
 2130          MOV       PC,R14
 2140
 2150.release_interrupt
 2160          LDR       R0,bankcount
 2170          CMP       R0,#0
 2180          BNE       release_interrupt   ; display remaining frames in queue
 2190          MOV       R0,#13
 2200          MOV       R1,#4
 2210          SWI       "OS_Byte"
 2220          MOV       R0,#&10
 2230          ADR       R1,vsync
 2240          MOV       R2,#0
 2250          SWI       "OS_Release"
 2260          MOV       R0,#&1C
 2270          ADR       R1,ticker
 2280          MOV       R2,#0
 2290          SWI       "OS_Release"
 2300          MOV       PC,R14
 2310]
 2320NEXT
 2330Q%=P%
 2340ENDPROC
 2350
 2360DEF PROCASS2
 2370LOCAL P%,Q%
 2380DIM Q% 20000
 2390
 2400DIM CSTAB 8*1024
 2410FOR I=0 TO 1023
 2420H=PI/512*I
 2430CSTAB!(I*8)=COS(H)*256
 2440CSTAB!(I*8+4)=SIN(H)*256
 2450NEXT
 2460
 2470DIM DITABLE 4000*16*4
 2480FOR PASS=0 TO 2 STEP 2
 2490A=0:B=1:TAB=2:T=3:NR=4:X=5:Y=6:I=7:J=8:CS=9:SN=10:H=11:DIT=12
 2500Z=T:N=4:Q=2
 2510P0=A:P1=B:P2=I:P3=J:P4=SN
 2520P%=Q%
 2530[OPT PASS
 2540
 2550.FREED EQUD 0
 2560.VLTAB EQUD VLAK
 2570.PUTAB EQUD PUNT
 2580.nr EQUD D1*D2
 2590.nr2 EQUD D1*D2
 2600.RX EQUD 0
 2610.RY EQUD 0
 2620.CSD EQUD COS(PI/20)*256
 2630.SND EQUD SIN(PI/20)*256
 2640.CSTABD EQUD CSTAB
 2650.H1D EQUD 16*8
 2660.H2D EQUD 0
 2670.DITD EQUD DITABLE
 2680.DNRD EQUD 4000*16
 2690.yrot EQUD 0:EQUD 0
 2700.hight EQUD 0
 2710
 2720
 2730.CALC_DIVTABLE
 2740LDR DIT,DITD
 2750LDR I,DNRD
 2760.DVLOOP2
 2770MOV T,#200<<16
 2780MOV N,I
 2790MOV J,#0
 2800MOV Q,#0
 2810.DVLOOP3
 2820CMP N,T
 2830MOVLO N,N,LSL #1
 2840ADDLO J,J,#1
 2850BLO DVLOOP3
 2860MOV N,N,LSR J
 2870.DVLOOP1
 2880CMP T,N,LSL J
 2890SUBHS T,T,N,LSL J
 2900ADC Q,Q,Q
 2910SUBS J,J,#1
 2920BPL DVLOOP1
 2930STR Q,[DIT,I,LSL #2]
 2940SUBS I,I,#1
 2950BNE DVLOOP2
 2960MOV PC,R14
 2970
 2980.DEB DCD 0:DCD 0
 2990.show
 3000STMFD 13!,{14}
 3010SWI "OS_Mouse"
 3020SUB A,A,#640
 3030
 3040
 3050LDR T,H1D
 3060CMP Q,#4:ADDEQ T,T,#16
 3070CMP Q,#1:SUBEQ T,T,#16
 3080STR T,H1D
 3090
 3100LDR T,H2D
 3110CMP Q,#6:ADDEQ T,T,#16
 3120CMP Q,#3:SUBEQ T,T,#16
 3130STR T,H2D
 3140
 3150LDR T,hight
 3160CMP Q,#5:ADDEQ T,T,#32*FIX
 3170CMP Q,#2:SUBEQ T,T,#32*FIX
 3180CMP T,#256*FIX*6
 3190MOVGE T,#256*FIX*6
 3200CMN T,#256*FIX*6
 3210MVNLE T,#256*FIX*6
 3220STR T,hight
 3230
 3240
 3250
 3260LDR TAB,CSTABD
 3270MVN T,#0
 3280MOV T,T,LSR #22
 3290MVN H,#0
 3300MOV H,H,LSR #16
 3310
 3320AND I,A,T
 3330ADD I,TAB,I,LSL #3    ; get cos and sin y-angle
 3340LDMIA I,{CS,SN}
 3350ADR  J,yrot
 3360STMIA J,{CS,SN}
 3370
 3380
 3390RSB SN,SN,#0
 3400MUL A,SN,B
 3410MUL B,CS,B
 3420
 3430LDR X,RX
 3440LDR Y,RY
 3450ADDS X,X,A,ASR #8
 3460ADDLT X,X,#D1*ED*16
 3470CMP X,#D1*ED*16
 3480SUBGE X,X,#D1*ED*16
 3490ADDS Y,Y,B,ASR #8
 3500ADDLT Y,Y,#D2*ED*16
 3510CMP Y,#D2*ED*16
 3520SUBGE Y,Y,#D2*ED*16
 3530STR X,RX
 3540STR Y,RY
 3550MOV A,X
 3560MOV B,Y
 3570
 3580
 3590
 3600
 3610LDR I,H1D
 3620MOV I,I,LSR #1
 3630AND I,I,T
 3640ADD I,TAB,I,LSL #3
 3650LDMIA I,{CS,SN}
 3660AND CS,CS,H
 3670AND SN,SN,H
 3680
 3690LDR I,H2D
 3700MOV I,I,LSR #1
 3710AND I,I,T
 3720ADD I,TAB,I,LSL #3
 3730LDMIA I,{I,J}
 3740ADD CS,CS,I,LSL #16
 3750ADD SN,SN,J,LSL #16
 3760
 3770LDR DIT,DITD
 3780
 3790; configure bins
 3800LDR N,VLTAB
 3810MOV I,#HORIZON/8
 3820MOV J,#0
 3830.initbin
 3840STR J,[N],#4
 3850SUBS I,I,#1
 3860BNE initbin
 3870STR N,FREED
 3880
 3890
 3900MOV J,#0
 3910MOV I,#0
 3920
 3930MOV H,#0
 3940.vlop
 3950MOV I,H
 3960BL checkpoint
 3970CMP T,#100:BEQ vfound
 3980RSB I,I,#0
 3990BL checkpoint
 4000CMP T,#100:BEQ vfound
 4010MOV I,#0
 4020MOV J,H
 4030BL checkpoint
 4040CMP T,#100:BEQ vfound
 4050RSB J,J,#0
 4060BL checkpoint
 4070CMP T,#100:BEQ vfound
 4080MOV J,#0
 4090ADD H,H,#1
 4100CMP H,#ED/2
 4110BNE vlop
 4120LDMFD 13!,{PC}
 4130.vfound
 4140
 4150
 4160FNadr(T,SCREEN2)
 4170LDR H,[T]
 4180ADD H,H,#640*64
 4190ADD H,H,#64
 4200;STR H,[T]
 4210
 4220
 4230LDR N,VLTAB
 4240BL rec
 4250MOV T,#1<<31
 4260;STR T,[N]
 4270
 4280LDR H,VLTAB
 4290BL tek
 4300LDMFD 13!,{PC}
 4310
 4320; check point (I,J) to be visible
 4330; X*,Y*,Z*=T*,N*, A,B,I,J,CS,SN,DIT
 4340.checkpoint
 4350STMFD 13!,{I,J,N,Q,14}^
 4360ADD X,I,A,ASR #SH+FX
 4370ADD Z,J,B,ASR #SH+FX
 4380
 4390AND Q,X,#D1-1
 4400ADD Q,Q,Z,LSL #SH
 4410MOV Q,Q,LSL #(32-2*SH)
 4420
 4430LDR N,PUTAB
 4440ADD N,N,Q,LSR #(32-2*SH-4)
 4450
 4460LDR J,hight
 4470RSB X,A,X,LSL #SH+FX
 4480LDR Y,[N],#4
 4490ADD Y,Y,J
 4500RSB Z,B,Z,LSL #SH+FX:]
 4510
 4520IF SH-ZOOM > 0 THEN
 4530[OPT PASS
 4540MOV X,X,ASR #SH-ZOOM
 4550MOV Y,Y,ASR #SH-ZOOM
 4560MOV Z,Z,ASR #SH-ZOOM:]
 4570ENDIF
 4580
 4590IF SH-ZOOM <0 THEN
 4600[OPT PASS
 4610MOV X,X,LSL #ZOOM-SH
 4620MOV Y,Y,LSL #ZOOM-SH
 4630MOV Z,Z,LSL #ZOOM-SH:]
 4640ENDIF
 4650
 4660[ OPT PASS
 4670
 4680ADR  J,yrot
 4690LDMIA J,{I,J}
 4700MUL Q,I,X
 4710MLA Q,J,Z,Q
 4720MUL X,J,X
 4730MUL Z,I,Z
 4740SUB Z,Z,X
 4750MOV X,Q,ASR #8
 4760MOV Z,Z,ASR #8
 4770
 4780MOV I,CS,LSL #16
 4790MOV J,SN,LSL #16
 4800MOV I,I,ASR #16
 4810MOV J,J,ASR #16
 4820MUL Q,I,Y
 4830MLA Q,J,Z,Q
 4840MUL Y,J,Y
 4850MUL Z,I,Z
 4860SUB Z,Z,Y
 4870MOV Y,Q,ASR #8
 4880MOV Z,Z,ASR #8
 4890
 4900MOV I,CS,ASR #16
 4910MOV J,SN,ASR #16
 4920MUL Q,I,X
 4930MLA Q,J,Y,Q
 4940MUL X,J,X
 4950MUL Y,I,Y
 4960SUB Y,Y,X
 4970MOV X,Q,ASR #8
 4980MOV Y,Y,ASR #8
 4990
 5000ADD I,Z,#300*FIX
 5010CMP I,#0
 5020LDRPL Z,[DIT,I,LSL #2]
 5030MUL X,Z,X
 5040MUL Y,Z,Y
 5050MOV X,X,ASR #15
 5060MOV Y,Y,ASR #15
 5070ADD X,X,#160*2
 5080RSB Y,Y,#120*2
 5090STMIA N,{X,Y}   ;perspective transformed (x,y,z)
 5100
 5110CMP   I,#10*FIX   ; to close
 5120;MOVLT T,#101
 5130BLT       toclose
 5140
 5150CMP   I,#HORIZON*FIX  ; too far
 5160BGE       outscreen
 5170
 5180CMP X,#640      ; out left or right
 5190BHS      outscreen
 5200
 5210CMP Y,#480      ; out up or down
 5220BHS       outscreen
 5230
 5240MOV T,#100
 5250MOV X,N        ; place where transformed coord is stored
 5260MOV Y,I        ; z-coord used for depth bin sort
 5270LDMFD 13!,{I,J,N,Q,PC}^
 5280
 5290.outscreen
 5300MOV T,#101
 5310MOV X,N        ; place where transformed coord is stored
 5320MOV Y,I        ; z-coord used for depth bin sort
 5330LDMFD 13!,{I,J,N,Q,PC}^
 5340
 5350.toclose
 5360MOV T,#104
 5370MOV X,N        ; place where transformed coord is stored
 5380MOV Y,I        ; z-coord used for depth bin sort
 5390LDMFD 13!,{I,J,N,Q,PC}^
 5400
 5410
 5420
 5430; Q*, H*
 5440.rec
 5450; T=101 => point out of screen
 5460STMFD 13!,{14}
 5470;SWI 4
 5480
 5490MOV Q,#100
 5500ADD H,H,#640-2*64-32
 5510
 5520ADD I,I,#1
 5530LDRB T,[H,#1]:CMP T,#0
 5540BLEQ checkpoint
 5550STREQB T,[H,#1]
 5560CMP T,#101
 5570ADD Q,Q,T
 5580
 5590ADD J,J,#1
 5600LDRB T,[H,#641]:CMP T,#0
 5610BLEQ checkpoint
 5620STREQB T,[H,#641]
 5630CMP T,#101
 5640ADD Q,Q,T
 5650
 5660SUB I,I,#1
 5670LDRB T,[H,#640]:CMP T,#0
 5680BLEQ checkpoint
 5690STREQB T,[H,#640]
 5700CMP T,#101
 5710ADD Q,Q,T
 5720
 5730SUB J,J,#1
 5740BL   checkpoint
 5750STRB T,[H]
 5760CMP T,#101
 5770ADD Q,Q,T ;flag on if beyond horizon or off screen
 5780
 5790LDRB T,[X,#8]
 5800STRB T,[H,#-(640-2*64-32)]!
 5810
 5820
 5830CMP Q,#504         ; all four points of patch out of screen
 5840LDMHSFD 13!,{PC}   ; so reject this one
 5850
 5860STMFD 13!,{I,J,H}
 5870
 5880MOVS  Y,Y,ASR #FX+3 ; depth of patch
 5890MOVMI Y,#0
 5900CMP Y,#HORIZON/8
 5910MOVHS Y,#HORIZON/8
 5920SUBHS Y,Y,#1
 5930
 5940LDR N,VLTAB
 5950LDR Y,[N,Y,LSL #2]!      ; load depth link pointer
 5960LDR T,FREED
 5970STR T,[N]                ; replace with new link pointer
 5980;CMP Q,#100
 5990STMIA (T)!,{X,Y}  ; insert new patch node in depth linked list
 6000STR T,FREED
 6010
 6020SUB J,J,#1
 6030LDRB Q,[H,#-640]!
 6040CMP Q,#0
 6050BLEQ rec
 6060LDMFD 13,{I,J,H}
 6070SUB I,I,#1
 6080LDRB Q,[H,#-1]!
 6090CMP Q,#0
 6100BLEQ rec
 6110LDMFD 13,{I,J,H}
 6120ADD I,I,#1
 6130LDRB Q,[H,#1]!
 6140CMP Q,#0
 6150BLEQ rec
 6160LDMFD 13!,{I,J,H}
 6170ADD J,J,#1
 6180LDRB Q,[H,#640]!
 6190CMP Q,#0
 6200BLEQ rec
 6210LDMFD 13!,{PC}
 6220
 6230
 6240.tek
 6250STMFD 13!,{14}
 6260
 6270ADR TAB,vlak
 6280MOV NR,#4
 6290LDR DIT,PUTAB
 6300ADD DIT,DIT,#4
 6310MOV NR,#4
 6320ADR TAB,vlak
 6330MOV CS,#HORIZON/8
 6340LDR H,VLTAB
 6350ADD H,H,CS,LSL #2      ; put at bin with highest z
 6360.next_bin
 6370LDR Y,[H,#-4]!
 6380CMP   Y,#0
 6390BEQ end_bin
 6400LDMIA Y,{P0,Y}
 6410.draw_bin
 6420SUB X,P0,DIT
 6430MOV X,X,LSL #32-2*SH-4
 6440ADD T,X,#1 << (32-SH)      ; j+=1
 6450ADD P1,DIT,T,LSR #32-2*SH-4
 6460MOV T,T,ROR #32-SH
 6470ADD T,T,#1 << (32-SH)      ; i+=1
 6480ADD P2,DIT,T,ROR #32-SH-4
 6490MOV T,T,ROR #SH
 6500SUB T,T,#1 << (32-SH)      ; j-=1
 6510ADD P3,DIT,T,ROR #32-2*SH-4
 6520
 6530SUBS X,CS,#100/8
 6540MOVMI X,#0
 6550MOV X,X,LSR #7-3             ; depth queue color of patch
 6560LDR T,[P0,#8]
 6570ORR T,T,#3
 6580EOR P4,T,X
 6590STMIA TAB,{P0,P1,P2}
 6600BL poly_fill
 6610STMIA TAB,{P0,P2,P3}
 6620BL poly_fill
 6630CMP   Y,#0
 6640LDMNEIA Y,{P0,Y}
 6650BNE draw_bin
 6660.end_bin
 6670SUBS CS,CS,#1
 6680BNE next_bin
 6690LDMFD 13!,{PC}
 6700
 6710
 6720.vlak
 6730EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
 6740]
 6750NEXT
 6760Q%=P%
 6770ENDPROC
 6780
 6790
 6800DEF PROCcalc_invers
 6810DIM INVERS 4094*4*4
 6820!INVERS=1
 6830K=1<<21
 6840FOR I=1 TO 4*4094-1:INVERS!(4*I)=K/(I+0.5):NEXT
 6850ENDPROC
 6860
 6870
 6880DEF PROCgouraud
 6890LOCAL SF,FIX,SM,FP,I,G
 6900LOCAL DXD,DYD,TXD,TYD,XD,YD
 6910
 6920
 6930PROCcalc_invers
 6940
 6950SF=12:FIX=2^SF
 6960SM=10
 6970FP=SF+SM
 6980
 6990H=0:C1=1:L=2:R=3:CT=4:I=5:XL=6:XR=7:C2=8:T=9:O=10:LA=11:RA=12
 7000
 7010X1=0:Y1=1:X2=2:Y2=3:X3=4:Y3=5
 7020I1=6:I2=7:I3=8
 7030SCREEN=12:BITMAP=13:Tmp=14
 7040
 7050A=0:B=1:C=9:D=10:Tmp2=12:Help=13
 7060
 7070DIM Q% 20000
 7080FOR PASS=0 TO 2 STEP 2
 7090P%=Q%
 7100[OPT PASS
 7110
 7120.clear
 7130MOV R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#0
 7140MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
 7150MOV R8,#0:MOV R9,#0
 7160LDR R10,SCREEN2:MOV R11,#640*480
 7170.cloop
 7180STMIA R10!,{R0-R9}
 7190STMIA R10!,{R0-R9}
 7200STMIA R10!,{R0-R9}
 7210STMIA R10!,{R0-R9}
 7220SUBS R11,R11,#4*10*4
 7230BNE cloop
 7240MOV PC,R14
 7250
 7260.SCREEN1 EQUD 148:EQUD -1
 7270.SCREEN2 EQUD 0
 7280.SCREEN3 DCD 0
 7290.set
 7300ADR R0,SCREEN1
 7310ADR R1,SCREEN2
 7320SWI "OS_ReadVduVariables"
 7330MOV 15,14
 7340
 7350.mode     DCD 1
 7360          DCD 640
 7370          DCD 480
 7380          DCD 3
 7390          DCD -1
 7400          DCD 0:DCD 128
 7410          DCD 3:DCD 255
 7420          DCD -1
 7430.set_mode
 7440MOV R0,#0
 7450ADR R1,mode
 7460SWI "OS_ScreenMode"
 7470SWI "OS_RemoveCursors"
 7480MOV pc,r14
 7490
 7500FNpredef
 7510.poly_fill
 7520FNprecalc
 7530FNpiece
 7540]
 7550NEXT
 7560Q%=P%
 7570ENDPROC
 7580
 7590
 7600
 7610
 7620DEF FNadr(reg,address)
 7630offset=address-P%-8
 7640IF offset>0 THEN
 7650offset1=offset AND 255*4
 7660offset2=offset AND 255*256*4
 7670offset3=offset AND 255*256*256*4
 7680               [OPT PASS:ADD       reg, 15,#offset1:]
 7690IF offset2<>0  [OPT PASS:ADD       reg,reg,#offset2:]
 7700IF offset3<>0  [OPT PASS:ADD       reg,reg,#offset3:]
 7710ELSE
 7720offset1=-offset AND 255*4
 7730offset2=-offset AND 255*256*4
 7740offset3=-offset AND 255*256*256*4
 7750               [OPT PASS:SUB       reg, 15,#offset1:]
 7760IF offset2<>0  [OPT PASS:SUB       reg,reg,#offset2:]
 7770IF offset3<>0  [OPT PASS:SUB       reg,reg,#offset3:]
 7780ENDIF
 7790ENDIF
 7800=""
 7810
 7820DEF FNpredef
 7830[OPT PASS
 7840.save_regs DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0
 7850
 7860.X1D EQUD 0
 7870.X2D EQUD 0
 7880
 7890.DX21 EQUD 0
 7900.DX32 EQUD 0
 7910.DX31 EQUD 0
 7920
 7930.DY21 EQUD 0
 7940.DY32 EQUD 0
 7950
 7960
 7970.SCREEND EQUD 0
 7980.spd      DCD 0
 7990
 8000]
 8010=""
 8020
 8030
 8040DEF FNprecalc
 8050[OPT PASS
 8060;REM paramters R0-R8=x0,y0,x1,y1,x2,y2,i0,i1,i2
 8070
 8080          STMFD     13!,{0-12,14}
 8090          STR       13,spd
 8100
 8110LDMIA 2,{0,1,2}
 8120LDMIA 2,{4,5,8}
 8130LDMIA 1,{2,3,7}
 8140LDMIA 0,{0,1,6}
 8150
 8160MOV 6,6,LSL #6
 8170MOV 7,7,LSL #6
 8180MOV 8,8,LSL #6
 8190
 8200
 8210;sort vertices so that y1,y2,y3 are in ascending order
 8220          CMP       Y1,Y2
 8230          BLE       inorder1
 8240; if y1 > y2 then swap(x1,x2) swap(y1,y2) swap(u1,u2) swap(v1,v2)
 8250          EOR       Y1,Y1,Y2
 8260          EOR       X1,X1,X2
 8270          EOR       I1,I1,I2
 8280          EOR       Y2,Y2,Y1
 8290          EOR       X2,X2,X1
 8300          EOR       I2,I2,I1
 8310          EOR       Y1,Y1,Y2
 8320          EOR       X1,X1,X2
 8330          EOR       I1,I1,I2
 8340.inorder1
 8350          CMP       Y2,Y3
 8360          BLE       inorder2
 8370; if y2 > y3 then swap(x2,x3) swap(y2,y3) swap(u2,u3) swap(v2,v3)
 8380          EOR       Y2,Y2,Y3
 8390          EOR       X2,X2,X3
 8400          EOR       I2,I2,I3
 8410          EOR       Y3,Y3,Y2
 8420          EOR       X3,X3,X2
 8430          EOR       I3,I3,I2
 8440          EOR       Y2,Y2,Y3
 8450          EOR       X2,X2,X3
 8460          EOR       I2,I2,I3
 8470.inorder2
 8480          CMP       Y1,Y2
 8490          BLE       inorder3
 8500; if (y1 > y2) or (y1=y2 and x1>x2) then
 8510; swap(x1,x2) swap(y1,y2) swap(u1,u2) swap(v1,v2)
 8520          EOR       Y1,Y1,Y2
 8530          EOR       X1,X1,X2
 8540          EOR       I1,I1,I2
 8550          EOR       Y2,Y2,Y1
 8560          EOR       X2,X2,X1
 8570          EOR       I2,I2,I1
 8580          EOR       Y1,Y1,Y2
 8590          EOR       X1,X1,X2
 8600          EOR       I1,I1,I2
 8610.inorder3
 8620          STR       X1,X1D
 8630          STR       X2,X2D
 8640          STR       I1,I1D
 8650          SUB       X2,X2,X1
 8660          SUB       Y2,Y2,Y1
 8670          SUB       X3,X3,X1
 8680          SUB       Y3,Y3,Y1
 8690          SUB       I2,I2,I1
 8700          SUB       I3,I3,I1
 8710
 8720; screen'=screen + 320*y1    (mode 13)
 8730          FNadr     (SCREEN,SCREEN2)
 8740          LDR       SCREEN,[SCREEN]
 8750          ADD       Tmp,Y1,Y1,LSL #2
 8760          ADD       SCREEN,SCREEN,Tmp,LSL #6+1
 8770          STR       SCREEN,SCREEND
 8780
 8790          FNadr     (Help,INVERS)
 8800          STR       Y2,DY21
 8810; calc  x2/y2
 8820          LDR       Tmp,[Help,Y2,LSL #2]
 8830          MUL       Tmp,X2,Tmp
 8840          MOV       Tmp,Tmp,ASR #9
 8850          STR       Tmp,DX21
 8860          SUB       Y1,Y3,Y2
 8870          STR       Y1,DY32
 8880; calc (x3-x2)/(y3-y2)
 8890          LDR       Tmp,[Help,Y1,LSL #2]
 8900          SUB       X1,X3,X2
 8910          MUL       Tmp,X1,Tmp
 8920          MOV       Tmp,Tmp,ASR #9
 8930          STR       Tmp,DX32
 8940; calc dx1 = x3/y3
 8950          LDR       Tmp,[Help,Y3,LSL #2]
 8960          MUL       Tmp2,X3,Tmp
 8970          MOV       Tmp2,Tmp2,ASR #9
 8980          STR       Tmp2,DX31
 8990          
 9000; shading increment in y direction
 9010; calc di1 = i3/y3       ; i 8.6 di 8.16
 9020          MOV       Tmp,Tmp,LSR #4       ; .17
 9030          MUL       I3,Tmp,I3              ; 8.23
 9040          MOV       I3,I3,ASR #17-10     ; 8.16
 9050          MOV       I1,I1,LSL #10
 9060          ADD       I1,I1,I3,ASR #1
 9070          STR       I3,I3D
 9080          STR       I1,I1D
 9090          
 9100; calc 2^21/floor(abs(x2 - dx1*y2))
 9110          MUL       Tmp,Y2,Tmp2         ; (x3/y3)*y2
 9120          RSB       Tmp,Tmp,X2,LSL #12  ; x2-(x3/y3)*y2
 9130          MOVS      Tmp,Tmp,ASR #10     ; int( ... )
 9140          RSBMI     Tmp,Tmp,#0
 9150          LDR       Tmp,[Help,Tmp,LSL #2]  ; .19
 9160          
 9170          
 9180; shading increment in x direction
 9190; calc di2 = (i2-di1*y2) / abs( x2 - dx1*y2)
 9200          MOV       I2,I2,LSL #10    ; 8.16
 9210          MUL       I3,Y2,I3
 9220          RSB       I2,I3,I2       ; 8.16
 9230          MOV       I2,I2,ASR #8   ; 8.8
 9240          MOV       Tmp,Tmp,LSR #3  ; .16
 9250          MUL       I2,Tmp,I2     ;  8.24
 9260          MOV       I2,I2,ASR #16
 9270          STR       I2,I2D         ; 8.8
 9280          LDR       I1,I1D
 9290          ADD       I1,I1,I2,LSL #7
 9300          STR       I1,I1D
 9310
 9320          LDR       O,SCREEND
 9330
 9340          LDR       T,X1D
 9350          MOV       L,T,LSL #12  ; xl = (X1+0.5)*FIX
 9360          ADD       L,L,#1<<11
 9370          LDR       LA,DX31      ; dxl = dx31
 9380          MOV       R,L          ; xr = (X1+0.5)*FIX
 9390          LDR       RA,DX21      ; dxr = dx21
 9400          ADD       L,L,LA,ASR #1  ; xl += 0.5*dxl
 9410          ADD       R,R,RA,ASR #1  ; xr += 0.5*dxr
 9420          LDR       CT,DY21
 9430          CMP       CT,#0          ; count = dy21
 9440          BLNE      PIECE
 9450
 9460          LDR       T,X2D
 9470          MOV       R,T,LSL #12   ; dxr = dx32
 9480          ADD       R,R,#1<<11    ; xr = (X2+0.5)*FIX
 9490          LDR       LA,DX31
 9500          LDR       RA,DX32
 9510          ADD       R,R,RA,ASR #1  ; xr+= 0.5*dxr
 9520          LDR       CT,DY32
 9530          CMP       CT,#0          ; count= dy32
 9540          BLNE      PIECE
 9550.end
 9560          LDR       13,spd
 9570          LDMFD     13!,{0-12,PC}^
 9580]
 9590=""
 9600
 9610
 9620DEF FNpiece
 9630[OPT PASS
 9640.I1D DCD 0
 9650.I2D DCD 0
 9660.I3D DCD 0
 9670
 9680.PIECE STMFD     13!,{CT,14}
 9690
 9700; clip to top
 9710          FNadr     (T,SCREEN2)
 9720          LDR       T,[T]
 9730          CMP       O,T
 9740          BHS       eclip
 9750.clip
 9760          ADD       L,L,LA
 9770          ADD       R,R,RA
 9780          ADD       O,O,#320*2
 9790; increment y shading
 9800
 9810          LDR       I,I1D
 9820          LDR       H,I3D
 9830          ADD       I,I,H
 9840          STR       I,I1D
 9850
 9860          SUBS      CT,CT,#1
 9870          LDMEQFD   13!,{CT,15}
 9880          CMP       O,T
 9890          BLO       clip
 9900.eclip
 9910; clip to bottom
 9920          ADD       T,T,#640*480
 9930          SUBS      T,T,O
 9940          LDMLSFD   13!,{CT,15}
 9950          ADD       CT,CT,CT,LSL #2
 9960          CMP       CT,T,LSR #6+1
 9970          MOVHI     CT,T,LSR #6+1
 9980          CMP       L,R          ; left or right oriented ?
 9990          BGT       span_2
10000          BAL       span
10010.endspan
10020          ADD       O,O,#320*2
10030          ADD       L,L,LA
10040          ADD       R,R,RA
10050          SUBS      CT,CT,#5
10060; increment y shading
10070
10080          LDR       T,I1D
10090          LDR       I,I3D
10100          ADD       I,I,T
10110          STR       I,I1D
10120
10130          LDMEQFD   13!,{CT,15}
10140.span
10150
10160
10170; clip to right
10180          CMP       R,#640<<12
10190          ADD       XR,O,R,ASR #12
10200          ADDGT     XR,O,#320*2
10210; Clip to left
10220          MOVS      T,L,ASR #12
10230          ADD       XL,O,T
10240          MOVLT     XL,O
10250          RSBMI     T,T,#0
10260
10270
10280; Load line shade and shade increment
10290          LDR       I,I1D           ; 10.4
10300          MOV       I,I,ASR #8
10310          LDR       H,I2D           ; 10.4
10320          MLAMI     I,T,H,I
10330
10340         MOV       T,L,ASR #4
10350         AND       T,T,#255
10360         MUL       T,H,T
10370         SUB       I,I,T,ASR #8
10380
10390          MOV       I,I,LSL #16      ; 10.22
10400          MOV       H,H,LSL #16      ; 10.22
10410          ADD       I,I,H,LSR #16
10420
10430          SUB       T,XR,XL
10440          CMP       T,#3
10450          BLE       smallspan
10460          TST       XL,#3
10470          BEQ       endloop1
10480.loop1    FNmapbyte(C1)
10490          STRB      C1,[XL],#1
10500          TST       XL,#3
10510          BNE       loop1
10520
10530.endloop1 SUB       H,XR,XL
10540          MOVS      H,H,LSR #3
10550          BCC       doit
10560          FNmapbyte(C1)
10570          FNmapbyte(T)
10580          ADD       C1,C1,T,LSL #8
10590          FNmapbyte(T)
10600          ADD       C1,C1,T,LSL #16
10610          FNmapbyte(T)
10620          ADD       C1,C1,T,LSL #24
10630          STR       C1,[XL],#4
10640          CMP       H,#0
10650.doit     BEQ       smallspan
10660
10670.loop2    FNmapbyte(C1)
10680          FNmapbyte(T)
10690          ADD       C1,C1,T,LSL #8
10700          FNmapbyte(T)
10710          ADD       C1,C1,T,LSL #16
10720          FNmapbyte(T)
10730          ADD       C1,C1,T,LSL #24
10740          FNmapbyte(C2)
10750          FNmapbyte(T)
10760          ADD       C2,C2,T,LSL #8
10770          FNmapbyte(T)
10780          ADD       C2,C2,T,LSL #16
10790          FNmapbyte(T)
10800          ADD       C2,C2,T,LSL #24
10810          STMIA     (XL)!,{C1,C2}
10820          SUBS      H,H,#1
10830          BNE       loop2
10840.smallspan
10850          CMP       XL,XR
10860          BGE       endspan
10870          FNmapbyte(C1)
10880          STRB      C1,[XL],#1
10890          CMP       XL,XR
10900          BEQ       endspan
10910          FNmapbyte(C1)
10920          STRB      C1,[XL],#1
10930          CMP       XL,XR
10940          BEQ       endspan
10950          FNmapbyte(C1)
10960          STRB      C1,[XL],#1
10970          BAL       endspan
10980.endspan_2
10990          ADD       O,O,#320*2
11000          ADD       L,L,LA
11010          ADD       R,R,RA
11020          SUBS      CT,CT,#5
11030; increment y shading
11040          LDR       T,I1D
11050          LDR       I,I3D
11060          ADD       I,I,T
11070          STR       I,I1D
11080          LDMEQFD   13!,{CT,15}
11090.span_2
11100; Clip to left
11110          MOVS      T,R,ASR #12
11120          ADDPL     XR,O,R,ASR #12
11130          MOVMI     XR,O
11140; clip to right
11150          MOV       T,#320*2
11160          RSBS      T,T,L,ASR #12
11170          ADD       XL,O,L,ASR #12
11180          ADDPL     XL,O,#320*2
11190; Load line shade and shade increment
11200          LDR       I,I1D
11210          MOV       I,I,ASR #8
11220          LDR       H,I2D
11230          MLAPL     I,T,H,I
11240
11250          MOV       T,L,ASR #4
11260          AND       T,T,#255
11270          MUL       T,H,T
11280          ADD       I,I,T,ASR #8          
11290          
11300          MOV       I,I,LSL #16
11310          MOV       H,H,LSL #16
11320          ADD       I,I,H,LSR#16
11330          SUB       T,XL,XR
11340          CMP       T,#3
11350          BLE       smallspan_2
11360          TST       XL,#3
11370          BEQ       endloop1_2
11380.loop1_2  FNmapbyte(C1)
11390          STRB      C1,[XL,#-1]!
11400          TST       XL,#3
11410          BNE       loop1_2
11420.endloop1_2
11430          SUB       H,XL,XR
11440          MOVS      H,H,LSR #3
11450          BCC       doit_2
11460          FNmapbyte(C1)
11470          FNmapbyte(T)
11480          ADD       C1,C1,T,LSL #24
11490          FNmapbyte(T)
11500          ADD       C1,C1,T,LSL #16
11510          FNmapbyte(T)
11520          ADD       C1,T,C1,ROR #8
11530          STR       C1,[XL,#-4]!
11540          CMP       H,#0
11550.doit_2   BEQ       smallspan_2
11560.loop2_2
11570          FNmapbyte(C2)
11580          FNmapbyte(T)
11590          ADD       C2,C2,T,LSL #24
11600          FNmapbyte(T)
11610          ADD       C2,C2,T,LSL #16
11620          FNmapbyte(T)
11630          ADD       C2,T,C2,ROR #8
11640          FNmapbyte(C1)
11650          FNmapbyte(T)
11660          ADD       C1,C1,T,LSL #24
11670          FNmapbyte(T)
11680          ADD       C1,C1,T,LSL #16
11690          FNmapbyte(T)
11700          ADD       C1,T,C1,ROR #8
11710          STMDB     (XL)!,{C1,C2}
11720          SUBS      H,H,#1
11730          BNE       loop2_2
11740.smallspan_2
11750          CMP       XR,XL
11760          BGE       endspan_2
11770          FNmapbyte(C1)
11780          STRB      C1,[XL,#-1]!
11790          CMP       XR,XL
11800          BEQ       endspan_2
11810          FNmapbyte(C1)
11820          STRB      C1,[XL,#-1]!
11830          CMP       XR,XL
11840          BEQ       endspan_2
11850          FNmapbyte(C1)
11860          STRB      C1,[XL,#-1]!
11870          BAL       endspan_2
11880]
11890=""
11900
11910DEF FNmapbyte(reg)
11920[OPT PASS
11930      MOV       reg,I,LSR #24
11940      ADD       I,I,I,LSL #16
11950]
11960 =""


�> FLYNhi
� (c) Jan Vlietinck

(/�ON ERROR:ON ERROR OFF:REPORT:PRINT ERL:END
2
<� stack 100000
F
Pȗ �
Z*POINTER
dbanks=2
n>SH=7             :� Determines the number of patches: 2^SH
xED=2^SH:D1=ED:D2=ED
�FX=3:FIX=2^FX
�>HORIZON=1024       :� Determines how deep the land extends
�BZOOM=5            :� Determines the phycical measures of patch
�� PUNT 16*D1*D2
�� VLAK 12*D1*D2
�=� The array PUNT is of size 2^SH and contains four words:
�5� the height, projected x, projected y and colour
�%� map_sprite_height% 4000+(ED*ED)
�%� map_sprite_colors% 4000+(ED*ED)
�<ș "OS_File",16,"<Flyn$Dir>.MAP_H2",map_sprite_height%,0
�;ș "OS_File",16,"<Flyn$Dir>.MAP_C",map_sprite_colors%,0
�
�PUNTEN(PUNT)
�gouraud
"� set_mode
,� BLK 40
6!BLK=7:BLK!4=150:BLK!8=-1
@$ș "OS_ReadVduVariables",BLK,BLK
J"� (banks>1) � (BLK!4<2*!BLK) �
T0ș "OS_ChangeDynamicArea",2,banks*!BLK-BLK!4
^�
hP1=2*�/3
r� I=1 � 255
| P=I/256*2*�
� R=128*(1+�(P))
� G=128*(1+�(2*P+P1))
� B=128*(1+�(P-P1))
� � I,R,G,B
�� I
�	� set
�
�	�ASS2
�	�main
�� CALC_DIVTABLE
�ȗ � 640,512
��=0
�
� main
T=�
� 0
� T/100
&�
0
:� �PUNTEN(PUNT)
D� I%,J%
N� J%=0 � D2-1
X� I%=0 � D1-1
b/height%=?(map_sprite_height%+56+I%+(J%*ED))
lheight%=(height%� 255)-128
v!PUNT=height%*FIX*8
�,col%=?(map_sprite_colors%+56+I%+(J%*ED))
�$col%=col% � 255: � col%=0 col%=1
�PUNT!12=col%
�PUNT+=16
��
��
��
�
�� �main
�� P%,Q%
�
� Q% 1000
�� PASS=0 � 2 � 2
�	P%=Q%

[OPT PASS
.spd DCD 0
	.main
            STMFD     13!,{14}
*          STR       13,spd
4          �adr(13,stack)
>'          BL        claim_interrupt
H
.mainloop
R          MOV       0,#&70
\"          LDR       1,bankrear
f          MOV       2,#0
p!          SWI       "OS_Byte"
z
�          BL        set
�          BL        clear
�          BL        show
�#          BL        display_fps
�"          BL        next_frame
�          
�,          SWI       "OS_ReadEscapeState"
�           BCC       mainloop
�          
�)          BL        release_interrupt
�          LDR 13,spd
�           LDMFD     13!,{PC}
�

.next_frame
#          SWI       "OS_IntOff"
$#          LDR       1,bankcount
.          ADD       1,1,#1
8#          STR       1,bankcount
B"          SWI       "OS_IntOn"
L"          LDR       1,bankrear
V           CMP       1,#banks
`          �Q     1,#0
j          ADD       1,1,#1
t"          STR       1,bankrear
~#.decim    LDR       0,bankfront
�          CMP       0,1
�          BEQ       decim
�          MOV       PC,R14
�
�.time_counter       EQUD 0
�.frame_counter      EQUD 0
�.frame_average      EQUD 0
�/.output_buffer      DCD 0:DCD 0:DCD 0:DCD 0
�.display_fps
�$          STMFD     13!,{0-2,14}
�          SWI       &11E
�(          LDR       R0,frame_average
(          ADR       R1,output_buffer

          MOV       R2,#16
,          SWI       "OS_ConvertInteger1"
#          SWI       "OS_Write0"
($          LDMFD     13!,{0-2,PC}
2
<.marker DCD 0
F$.ticker   STMFD     13!,{0-3,14}
P           LDR       0,marker
Z          �S      0,0,#1
d           STR       0,marker
n$          LDMEQFD   13!,{0-3,PC}
x:          LDR       0,time_counter  ; execute at 50 Hz
�          ADD       0,0,#1
�          CMP       0,#50
�          �Q     0,#0
�&          STR       0,time_counter
�'          LDREQ     1,frame_counter
�'          STREQ     1,frame_average
�'          STREQ     0,frame_counter
�$          LDMFD     13!,{0-3,PC}
�
�
�: .bankfront EQUD 1      ; the front frame is displayed
�5 .bankrear  EQUD 2      ; the rear frame is drawn
�: .bankcount EQUD 0      ; nr. of ready frames in queue

?.time_stamp DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0
.sync_time  EQUD 0
"
, .vsync
6;          CMP       0,#4      ; check if event is vsync
@-          MOVNES    PC,14     ; else exit
J!          STMFD     13!,{0-1}
T          MOV       R0,PC
^5          �R       R1,R0,#1     ; put in scv mode
h          TEQP      R1,#0
r          MOV       R0,R0
|$          STMFD     13!,{0-2,14}
�
�C          LDR       0,sync_time     ; increment sync time every
�/          ADD       0,0,#1          ; vsync
�#          STR       0,sync_time
�
�C          LDR       R0,bankcount   ; if no new frames available
�H          CMP       R0,#0          ; then display the previous frame
�           BEQ       no_hurry
�
�P          SUB       R0,R0,#1       ; else display new frame and update queue
�$          STR       R0,bankcount
�$          LDR       R1,bankfront
�!          CMP       R1,#banks
          �Q     R1,#0
           ADD       R1,R1,#1
$          STR       R1,bankfront
&          MOV       R0,#&71
04          SWI       6                ; "OS_Byte"
:
D(          LDR       R0,frame_counter
N           ADD       R0,R0,#1
X(          STR       R0,frame_counter
b
l .no_hurry
v$          LDMFD     13!,{0-2,14}
�8          TEQP      R0,#0     ; put back in irq mode
�          MOV       R0,R0
�!          LDMFD     13!,{0-1}
�          MOVS      PC,R14
�
�.claim_interrupt
�          MOV       R0,#&70
�$          LDR       R1,bankfront
�!          SWI       "OS_Byte"
�B          SWI       &10C                ; clear frame at front
�0          MOV       R0,#&1C   ; claim ticker
�!          ADR       R1,ticker
�          MOV       R2,#0
"          SWI       "OS_Claim"
          MOV       R0,#&10
           ADR       R1,vsync
           MOV       R2,#0
*"          SWI       "OS_Claim"
4          MOV       R0,#14
>          MOV       R1,#4
H!          SWI       "OS_Byte"
R          MOV       PC,R14
\
f.release_interrupt
p$          LDR       R0,bankcount
z          CMP       R0,#0
�O          BNE       release_interrupt   ; display remaining frames in queue
�          MOV       R0,#13
�          MOV       R1,#4
�!          SWI       "OS_Byte"
�          MOV       R0,#&10
�           ADR       R1,vsync
�          MOV       R2,#0
�$          SWI       "OS_Release"
�          MOV       R0,#&1C
�!          ADR       R1,ticker
�          MOV       R2,#0
�$          SWI       "OS_Release"
�          MOV       PC,R14
	]
	�
		Q%=P%
	$�
	.
	8� �ASS2
	B� P%,Q%
	L� Q% 20000
	V
	`� CSTAB 8*1024
	j� I=0 � 1023
	t
H=�/512*I
	~CSTAB!(I*8)=�(H)*256
	�CSTAB!(I*8+4)=�(H)*256
	��
	�
	�� DITABLE 4000*16*4
	�� PASS=0 � 2 � 2
	�AA=0:B=1:TAB=2:T=3:NR=4:X=5:Y=6:I=7:J=8:CS=9:SN=10:H=11:DIT=12
	�Z=T:N=4:Q=2
	�P0=A:P1=B:P2=I:P3=J:P4=SN
	�	P%=Q%
	�
[OPT PASS
	�
	�.FREED EQUD 0
.VLTAB EQUD VLAK

.PUTAB EQUD PUNT
.nr EQUD D1*D2
.nr2 EQUD D1*D2
(.RX EQUD 0
2.RY EQUD 0
<.CSD EQUD �(�/20)*256
F.SND EQUD �(�/20)*256
P.CSTABD EQUD CSTAB
Z.H1D EQUD 16*8
d.H2D EQUD 0
n.DITD EQUD DITABLE
x.DNRD EQUD 4000*16
�.yrot EQUD 0:EQUD 0
�.hight EQUD 0
�
�
�.CALC_DIVTABLE
�LDR DIT,DITD
�LDR I,DNRD
�.DVLOOP2
�MOV T,#200<<16
�MOV N,I
�MOV J,#0
�MOV Q,#0
�.DVLOOP3
CMP N,T
MOVLO N,N,LSL #1
ADDLO J,J,#1
"BLO DVLOOP3
,MOV N,N,LSR J
6.DVLOOP1
@CMP T,N,LSL J
JSUBHS T,T,N,LSL J
T
ADC Q,Q,Q
^SUBS J,J,#1
hBPL DVLOOP1
rSTR Q,[DIT,I,LSL #2]
|SUBS I,I,#1
�BNE DVLOOP2
�MOV PC,R14
�
�.DEB DCD 0:DCD 0
�	.show
�STMFD 13!,{14}
�SWI "OS_Mouse"
�SUB A,A,#640
�
�
�
LDR T,H1D
�CMP Q,#4:ADDEQ T,T,#16
�CMP Q,#1:SUBEQ T,T,#16

STR T,H1D


LDR T,H2D
&CMP Q,#6:ADDEQ T,T,#16
0CMP Q,#3:SUBEQ T,T,#16
:
STR T,H2D
D
NLDR T,hight
XCMP Q,#5:ADDEQ T,T,#32*FIX
bCMP Q,#2:SUBEQ T,T,#32*FIX
lCMP T,#256*FIX*6
vMOVGE T,#256*FIX*6
�CMN T,#256*FIX*6
�MVNLE T,#256*FIX*6
�STR T,hight
�
�
�
�LDR TAB,CSTABD
�MVN T,#0
�MOV T,T,LSR #22
�MVN H,#0
�MOV H,H,LSR #16
�
�� I,A,T

3ADD I,TAB,I,LSL #3    ; get cos and sin y-angle

LDMIA I,{CS,SN}

ADR  J,yrot

 STMIA J,{CS,SN}

*

4

>RSB SN,SN,#0

HMUL A,SN,B

RMUL B,CS,B

\

fLDR X,RX

pLDR Y,RY

zADDS X,X,A,ASR #8

�ADDLT X,X,#D1*ED*16

�CMP X,#D1*ED*16

�SUBGE X,X,#D1*ED*16

�ADDS Y,Y,B,ASR #8

�ADDLT Y,Y,#D2*ED*16

�CMP Y,#D2*ED*16

�SUBGE Y,Y,#D2*ED*16

�STR X,RX

�STR Y,RY

�MOV A,X

�MOV B,Y

�

�



LDR I,H1D
$MOV I,I,LSR #1
.� I,I,T
8ADD I,TAB,I,LSL #3
BLDMIA I,{CS,SN}
L
� CS,CS,H
V
� SN,SN,H
`
j
LDR I,H2D
tMOV I,I,LSR #1
~� I,I,T
�ADD I,TAB,I,LSL #3
�LDMIA I,{I,J}
�ADD CS,CS,I,LSL #16
�ADD SN,SN,J,LSL #16
�
�LDR DIT,DITD
�
�; configure bins
�LDR N,VLTAB
�MOV I,#HORIZON/8
�MOV J,#0
�.initbin
STR J,[N],#4

SUBS I,I,#1
BNE initbin
STR N,FREED
(
2
<MOV J,#0
FMOV I,#0
P
ZMOV H,#0
d	.vlop
nMOV I,H
xBL checkpoint
�CMP T,#100:BEQ vfound
�RSB I,I,#0
�BL checkpoint
�CMP T,#100:BEQ vfound
�MOV I,#0
�MOV J,H
�BL checkpoint
�CMP T,#100:BEQ vfound
�RSB J,J,#0
�BL checkpoint
�CMP T,#100:BEQ vfound
�MOV J,#0
�ADD H,H,#1
CMP H,#ED/2
BNE vlop
LDMFD 13!,{PC}
".vfound
,
6
@�adr(T,SCREEN2)
J
LDR H,[T]
TADD H,H,#640*64
^ADD H,H,#64
h;STR H,[T]
r
|
�LDR N,VLTAB
�
BL rec
�MOV T,#1<<31
�;STR T,[N]
�
�LDR H,VLTAB
�
BL tek
�LDMFD 13!,{PC}
�
�%; check point (I,J) to be visible
�'; X*,Y*,Z*=T*,N*, A,B,I,J,CS,SN,DIT
�.checkpoint
�STMFD 13!,{I,J,N,Q,14}^
ADD X,I,A,ASR #SH+FX
ADD Z,J,B,ASR #SH+FX

&� Q,X,#D1-1
0ADD Q,Q,Z,LSL #SH
:MOV Q,Q,LSL #(32-2*SH)
D
NLDR N,PUTAB
XADD N,N,Q,LSR #(32-2*SH-4)
b
lLDR J,hight
vRSB X,A,X,LSL #SH+FX
�LDR Y,[N],#4
�
ADD Y,Y,J
�RSB Z,B,Z,LSL #SH+FX:]
�
�� SH-ZOOM > 0 �
�
[OPT PASS
�MOV X,X,ASR #SH-ZOOM
�MOV Y,Y,ASR #SH-ZOOM
�MOV Z,Z,ASR #SH-ZOOM:]
��
�
�� SH-ZOOM <0 �
�
[OPT PASS
MOV X,X,LSL #ZOOM-SH
MOV Y,Y,LSL #ZOOM-SH
MOV Z,Z,LSL #ZOOM-SH:]
 �
*
4[ OPT PASS
>
HADR  J,yrot
RLDMIA J,{I,J}
\
MUL Q,I,X
fMLA Q,J,Z,Q
p
MUL X,J,X
z
MUL Z,I,Z
�
SUB Z,Z,X
�MOV X,Q,ASR #8
�MOV Z,Z,ASR #8
�
�MOV I,CS,LSL #16
�MOV J,SN,LSL #16
�MOV I,I,ASR #16
�MOV J,J,ASR #16
�
MUL Q,I,Y
�MLA Q,J,Z,Q
�
MUL Y,J,Y
�
MUL Z,I,Z
�
SUB Z,Z,Y
MOV Y,Q,ASR #8
MOV Z,Z,ASR #8

$MOV I,CS,ASR #16
.MOV J,SN,ASR #16
8
MUL Q,I,X
BMLA Q,J,Y,Q
L
MUL X,J,X
V
MUL Y,I,Y
`
SUB Y,Y,X
jMOV X,Q,ASR #8
tMOV Y,Y,ASR #8
~
�ADD I,Z,#300*FIX
�CMP I,#0
�LDRPL Z,[DIT,I,LSL #2]
�
MUL X,Z,X
�
MUL Y,Z,Y
�MOV X,X,ASR #15
�MOV Y,Y,ASR #15
�ADD X,X,#160*2
�RSB Y,Y,#120*2
�4STMIA N,{X,Y}   ;perspective transformed (x,y,z)
�
� CMP   I,#10*FIX   ; to close
;MOVLT T,#101

BLT       toclose

#CMP   I,#HORIZON*FIX  ; too far
(BGE       outscreen
2
<'CMP X,#640      ; out left or right
FBHS      outscreen
P
Z$CMP Y,#480      ; out up or down
dBHS       outscreen
n
xMOV T,#100
�<MOV X,N        ; place where transformed coord is stored
�4MOV Y,I        ; z-coord used for depth bin sort
�LDMFD 13!,{I,J,N,Q,PC}^
�
�.outscreen
�MOV T,#101
�<MOV X,N        ; place where transformed coord is stored
�4MOV Y,I        ; z-coord used for depth bin sort
�LDMFD 13!,{I,J,N,Q,PC}^
�
�.toclose
�MOV T,#104
�<MOV X,N        ; place where transformed coord is stored
4MOV Y,I        ; z-coord used for depth bin sort
LDMFD 13!,{I,J,N,Q,PC}^

"
,
6; Q*, H*
@.rec
J"; T=101 => point out of screen
TSTMFD 13!,{14}
^
;SWI 4
h
rMOV Q,#100
|ADD H,H,#640-2*64-32
�
�ADD I,I,#1
�LDRB T,[H,#1]:CMP T,#0
�BLEQ checkpoint
�STREQB T,[H,#1]
�CMP T,#101
�
ADD Q,Q,T
�
�ADD J,J,#1
�LDRB T,[H,#641]:CMP T,#0
�BLEQ checkpoint
�STREQB T,[H,#641]
�CMP T,#101

ADD Q,Q,T

SUB I,I,#1
&LDRB T,[H,#640]:CMP T,#0
0BLEQ checkpoint
:STREQB T,[H,#640]
DCMP T,#101
N
ADD Q,Q,T
X
bSUB J,J,#1
lBL   checkpoint
vSTRB T,[H]
�CMP T,#101
�6ADD Q,Q,T ;flag on if beyond horizon or off screen
�
�LDRB T,[X,#8]
�STRB T,[H,#-(640-2*64-32)]!
�
�
�?CMP Q,#504         ; all four points of patch out of screen
�+LDMHSFD 13!,{PC}   ; so reject this one
�
�STMFD 13!,{I,J,H}
�
�(MOVS  Y,Y,ASR #FX+3 ; depth of patch
MOVMI Y,#0
CMP Y,#HORIZON/8
MOVHS Y,#HORIZON/8
 SUBHS Y,Y,#1
*
4LDR N,VLTAB
>6LDR Y,[N,Y,LSL #2]!      ; load depth link pointer
HLDR T,FREED
R<STR T,[N]                ; replace with new link pointer
\;CMP Q,#100
fBSTMIA (T)!,{X,Y}  ; insert new patch node in depth linked list
pSTR T,FREED
z
�SUB J,J,#1
�LDRB Q,[H,#-640]!
�CMP Q,#0
�BLEQ rec
�LDMFD 13,{I,J,H}
�SUB I,I,#1
�LDRB Q,[H,#-1]!
�CMP Q,#0
�BLEQ rec
�LDMFD 13,{I,J,H}
�ADD I,I,#1
�LDRB Q,[H,#1]!
�CMP Q,#0
BLEQ rec
LDMFD 13!,{I,J,H}
ADD J,J,#1
$LDRB Q,[H,#640]!
.CMP Q,#0
8BLEQ rec
BLDMFD 13!,{PC}
L
V
`.tek
jSTMFD 13!,{14}
t
~ADR TAB,vlak
�
MOV NR,#4
�LDR DIT,PUTAB
�ADD DIT,DIT,#4
�
MOV NR,#4
�ADR TAB,vlak
�MOV CS,#HORIZON/8
�LDR H,VLTAB
�6ADD H,H,CS,LSL #2      ; put at bin with highest z
�
.next_bin
�LDR Y,[H,#-4]!
�CMP   Y,#0
�BEQ end_bin
LDMIA Y,{P0,Y}


.draw_bin
SUB X,P0,DIT
MOV X,X,LSL #32-2*SH-4
(%ADD T,X,#1 << (32-SH)      ; j+=1
2ADD P1,DIT,T,LSR #32-2*SH-4
<MOV T,T,ROR #32-SH
F%ADD T,T,#1 << (32-SH)      ; i+=1
PADD P2,DIT,T,ROR #32-SH-4
ZMOV T,T,ROR #SH
d%SUB T,T,#1 << (32-SH)      ; j-=1
nADD P3,DIT,T,ROR #32-2*SH-4
x
�SUBS X,CS,#100/8
�MOVMI X,#0
�=MOV X,X,LSR #7-3             ; depth queue color of patch
�LDR T,[P0,#8]
�
�R T,T,#3
�� P4,T,X
�STMIA TAB,{P0,P1,P2}
�BL poly_fill
�STMIA TAB,{P0,P2,P3}
�BL poly_fill
�CMP   Y,#0
�LDMNEIA Y,{P0,Y}
�BNE draw_bin
.end_bin
SUBS CS,CS,#1
BNE next_bin
"LDMFD 13!,{PC}
,
6
@	.vlak
J&EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
T]
^�
h	Q%=P%
r�
|
�
�� �calc_invers
�� INVERS 4094*4*4
�
!INVERS=1
�K=1<<21
�-� I=1 � 4*4094-1:INVERS!(4*I)=K/(I+0.5):�
��
�
�
�� �gouraud
�� SF,FIX,SM,FP,I,G
�� DXD,DYD,TXD,TYD,XD,YD
�

�calc_invers

&SF=12:FIX=2^SF
0	SM=10
:FP=SF+SM
D
NAH=0:C1=1:L=2:R=3:CT=4:I=5:XL=6:XR=7:C2=8:T=9:O=10:LA=11:RA=12
X
b!X1=0:Y1=1:X2=2:Y2=3:X3=4:Y3=5
lI1=6:I2=7:I3=8
vSCREEN=12:BITMAP=13:Tmp=14
�
�$A=0:B=1:C=9:D=10:Tmp2=12:Help=13
�
�� Q% 20000
�� PASS=0 � 2 � 2
�	P%=Q%
�
[OPT PASS
�
�
.clear
�+MOV R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#0
�+MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
�MOV R8,#0:MOV R9,#0
�$LDR R10,SCREEN2:MOV R11,#640*480

.cloop
STMIA R10!,{R0-R9}
STMIA R10!,{R0-R9}
 STMIA R10!,{R0-R9}
*STMIA R10!,{R0-R9}
4SUBS R11,R11,#4*10*4
>
BNE cloop
HMOV PC,R14
R
\.SCREEN1 EQUD 148:EQUD -1
f.SCREEN2 EQUD 0
p.SCREEN3 DCD 0
z.set
�ADR R0,SCREEN1
�ADR R1,SCREEN2
�SWI "OS_ReadVduVariables"
�
MOV 15,14
�
�.mode     DCD 1
�          DCD 640
�          DCD 480
�          DCD 3
�          DCD -1
�          DCD 0:DCD 128
�          DCD 3:DCD 255
�          DCD -1

.set_mode

MOV R0,#0
ADR R1,mode
$SWI "OS_ScreenMode"
.SWI "OS_RemoveCursors"
8MOV pc,r14
B
L�predef
V.poly_fill
`�precalc
j
�piece
t]
~�
�	Q%=P%
��
�
�
�
�
�� �adr(reg,address)
�offset=address-P%-8
�� offset>0 �
�offset1=offset � 255*4
�offset2=offset � 255*256*4
�"offset3=offset � 255*256*256*4
9               [OPT PASS:ADD       reg, 15,#offset1:]

8� offset2<>0  [OPT PASS:ADD       reg,reg,#offset2:]
8� offset3<>0  [OPT PASS:ADD       reg,reg,#offset3:]
�
(offset1=-offset � 255*4
2offset2=-offset � 255*256*4
<#offset3=-offset � 255*256*256*4
F9               [OPT PASS:SUB       reg, 15,#offset1:]
P8� offset2<>0  [OPT PASS:SUB       reg,reg,#offset2:]
Z8� offset3<>0  [OPT PASS:SUB       reg,reg,#offset3:]
d�
n�
x=""
�
�
� �predef
�
[OPT PASS
�8.save_regs DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0
�
�.X1D EQUD 0
�.X2D EQUD 0
�
�.DX21 EQUD 0
�.DX32 EQUD 0
�.DX31 EQUD 0
�
�.DY21 EQUD 0
.DY32 EQUD 0


".SCREEND EQUD 0
,.spd      DCD 0
6
@]
J=""
T
^
h� �precalc
r
[OPT PASS
|1;� paramters R0-R8=x0,y0,x1,y1,x2,y2,i0,i1,i2
�
�%          STMFD     13!,{0-12,14}
�          STR       13,spd
�
�LDMIA 2,{0,1,2}
�LDMIA 2,{4,5,8}
�LDMIA 1,{2,3,7}
�LDMIA 0,{0,1,6}
�
�MOV 6,6,LSL #6
�MOV 7,7,LSL #6
�MOV 8,8,LSL #6
�
 
 :;sort vertices so that y1,y2,y3 are in ascending order
           CMP       Y1,Y2
 &           BLE       inorder1
 0E; if y1 > y2 then swap(x1,x2) swap(y1,y2) swap(u1,u2) swap(v1,v2)
 :          �       Y1,Y1,Y2
 D          �       X1,X1,X2
 N          �       I1,I1,I2
 X          �       Y2,Y2,Y1
 b          �       X2,X2,X1
 l          �       I2,I2,I1
 v          �       Y1,Y1,Y2
 �          �       X1,X1,X2
 �          �       I1,I1,I2
 �
.inorder1
 �          CMP       Y2,Y3
 �           BLE       inorder2
 �E; if y2 > y3 then swap(x2,x3) swap(y2,y3) swap(u2,u3) swap(v2,v3)
 �          �       Y2,Y2,Y3
 �          �       X2,X2,X3
 �          �       I2,I2,I3
 �          �       Y3,Y3,Y2
 �          �       X3,X3,X2
 �          �       I3,I3,I2
 �          �       Y2,Y2,Y3
!          �       X2,X2,X3
!          �       I2,I2,I3
!
.inorder2
!           CMP       Y1,Y2
!*           BLE       inorder3
!4,; if (y1 > y2) or (y1=y2 and x1>x2) then
!>5; swap(x1,x2) swap(y1,y2) swap(u1,u2) swap(v1,v2)
!H          �       Y1,Y1,Y2
!R          �       X1,X1,X2
!\          �       I1,I1,I2
!f          �       Y2,Y2,Y1
!p          �       X2,X2,X1
!z          �       I2,I2,I1
!�          �       Y1,Y1,Y2
!�          �       X1,X1,X2
!�          �       I1,I1,I2
!�
.inorder3
!�          STR       X1,X1D
!�          STR       X2,X2D
!�          STR       I1,I1D
!�           SUB       X2,X2,X1
!�           SUB       Y2,Y2,Y1
!�           SUB       X3,X3,X1
!�           SUB       Y3,Y3,Y1
!�           SUB       I2,I2,I1
!�           SUB       I3,I3,I1
"
"*; screen'=screen + 320*y1    (mode 13)
"'          �adr     (SCREEN,SCREEN2)
"$'          LDR       SCREEN,[SCREEN]
".(          ADD       Tmp,Y1,Y1,LSL #2
"82          ADD       SCREEN,SCREEN,Tmp,LSL #6+1
"B&          STR       SCREEN,SCREEND
"L
"V$          �adr     (Help,INVERS)
"`          STR       Y2,DY21
"j; calc  x2/y2
"t,          LDR       Tmp,[Help,Y2,LSL #2]
"~"          MUL       Tmp,X2,Tmp
"�&          MOV       Tmp,Tmp,ASR #9
"�           STR       Tmp,DX21
"�           SUB       Y1,Y3,Y2
"�          STR       Y1,DY32
"�; calc (x3-x2)/(y3-y2)
"�,          LDR       Tmp,[Help,Y1,LSL #2]
"�           SUB       X1,X3,X2
"�"          MUL       Tmp,X1,Tmp
"�&          MOV       Tmp,Tmp,ASR #9
"�           STR       Tmp,DX32
"�; calc dx1 = x3/y3
"�,          LDR       Tmp,[Help,Y3,LSL #2]
##          MUL       Tmp2,X3,Tmp
#
(          MOV       Tmp2,Tmp2,ASR #9
#!          STR       Tmp2,DX31
#          
#(&; shading increment in y direction
#2,; calc di1 = i3/y3       ; i 8.6 di 8.16
#<2          MOV       Tmp,Tmp,LSR #4       ; .17
#F5          MUL       I3,Tmp,I3              ; 8.23
#P3          MOV       I3,I3,ASR #17-10     ; 8.16
#Z%          MOV       I1,I1,LSL #10
#d'          ADD       I1,I1,I3,ASR #1
#n          STR       I3,I3D
#x          STR       I1,I1D
#�          
#�'; calc 2^21/floor(abs(x2 - dx1*y2))
#�8          MUL       Tmp,Y2,Tmp2         ; (x3/y3)*y2
#�;          RSB       Tmp,Tmp,X2,LSL #12  ; x2-(x3/y3)*y2
#�8          MOVS      Tmp,Tmp,ASR #10     ; int( ... )
#�"          RSBMI     Tmp,Tmp,#0
#�4          LDR       Tmp,[Help,Tmp,LSL #2]  ; .19
#�          
#�          
#�&; shading increment in x direction
#�0; calc di2 = (i2-di1*y2) / abs( x2 - dx1*y2)
#�/          MOV       I2,I2,LSL #10    ; 8.16
#�           MUL       I3,Y2,I3
$-          RSB       I2,I3,I2       ; 8.16
$,          MOV       I2,I2,ASR #8   ; 8.8
$-          MOV       Tmp,Tmp,LSR #3  ; .16
$"-          MUL       I2,Tmp,I2     ;  8.24
$,%          MOV       I2,I2,ASR #16
$6,          STR       I2,I2D         ; 8.8
$@          LDR       I1,I1D
$J'          ADD       I1,I1,I2,LSL #7
$T          STR       I1,I1D
$^
$h!          LDR       O,SCREEND
$r
$|          LDR       T,X1D
$�8          MOV       L,T,LSL #12  ; xl = (X1+0.5)*FIX
$�"          ADD       L,L,#1<<11
$�1          LDR       LA,DX31      ; dxl = dx31
$�8          MOV       R,L          ; xr = (X1+0.5)*FIX
$�1          LDR       RA,DX21      ; dxr = dx21
$�6          ADD       L,L,LA,ASR #1  ; xl += 0.5*dxl
$�6          ADD       R,R,RA,ASR #1  ; xr += 0.5*dxr
$�          LDR       CT,DY21
$�5          CMP       CT,#0          ; count = dy21
$�          BLNE      PIECE
$�
$�          LDR       T,X2D
$�2          MOV       R,T,LSL #12   ; dxr = dx32
%9          ADD       R,R,#1<<11    ; xr = (X2+0.5)*FIX
%          LDR       LA,DX31
%          LDR       RA,DX32
%&5          ADD       R,R,RA,ASR #1  ; xr+= 0.5*dxr
%0          LDR       CT,DY32
%:4          CMP       CT,#0          ; count= dy32
%D          BLNE      PIECE
%N.end
%X          LDR       13,spd
%b&          LDMFD     13!,{0-12,PC}^
%l]
%v=""
%�
%�
%�� �piece
%�
[OPT PASS
%�.I1D DCD 0
%�.I2D DCD 0
%�.I3D DCD 0
%�
%� .PIECE STMFD     13!,{CT,14}
%�
%�; clip to top
%�"          �adr     (T,SCREEN2)
%�          LDR       T,[T]
&          CMP       O,T
&          BHS       eclip
&	.clip
&           ADD       L,L,LA
&*          ADD       R,R,RA
&4"          ADD       O,O,#320*2
&>; increment y shading
&H
&R          LDR       I,I1D
&\          LDR       H,I3D
&f          ADD       I,I,H
&p          STR       I,I1D
&z
&�           SUBS      CT,CT,#1
&�#          LDMEQFD   13!,{CT,15}
&�          CMP       O,T
&�          BLO       clip
&�
.eclip
&�; clip to bottom
&�$          ADD       T,T,#640*480
&�          SUBS      T,T,O
&�#          LDMLSFD   13!,{CT,15}
&�'          ADD       CT,CT,CT,LSL #2
&�%          CMP       CT,T,LSR #6+1
&�%          MOVHI     CT,T,LSR #6+1
&�?          CMP       L,R          ; left or right oriented ?
'          BGT       span_2
'          BAL       span
'.endspan
'$"          ADD       O,O,#320*2
'.          ADD       L,L,LA
'8          ADD       R,R,RA
'B           SUBS      CT,CT,#5
'L; increment y shading
'V
'`          LDR       T,I1D
'j          LDR       I,I3D
't          ADD       I,I,T
'~          STR       I,I1D
'�
'�#          LDMEQFD   13!,{CT,15}
'�	.span
'�
'�
'�; clip to right
'�"          CMP       R,#640<<12
'�&          ADD       XR,O,R,ASR #12
'�#          ADDGT     XR,O,#320*2
'�; Clip to left
'�#          MOVS      T,L,ASR #12
'�          ADD       XL,O,T
(          MOVLT     XL,O
(
          RSBMI     T,T,#0
(
(
((); Load line shade and shade increment
(2.          LDR       I,I1D           ; 10.4
(<"          MOV       I,I,ASR #8
(F.          LDR       H,I2D           ; 10.4
(P          MLAMI     I,T,H,I
(Z
(d!         MOV       T,L,ASR #4
(n         �       T,T,#255
(x         MUL       T,H,T
(�#         SUB       I,I,T,ASR #8
(�
(�0          MOV       I,I,LSL #16      ; 10.22
(�0          MOV       H,H,LSL #16      ; 10.22
(�%          ADD       I,I,H,LSR #16
(�
(�          SUB       T,XR,XL
(�          CMP       T,#3
(�!          BLE       smallspan
(�          TST       XL,#3
(�           BEQ       endloop1
(�.loop1    �mapbyte(C1)
(�"          STRB      C1,[XL],#1
)          TST       XL,#3
)          BNE       loop1
)
)".endloop1 SUB       H,XR,XL
),"          MOVS      H,H,LSR #3
)6          BCC       doit
)@          �mapbyte(C1)
)J          �mapbyte(T)
)T&          ADD       C1,C1,T,LSL #8
)^          �mapbyte(T)
)h'          ADD       C1,C1,T,LSL #16
)r          �mapbyte(T)
)|'          ADD       C1,C1,T,LSL #24
)�"          STR       C1,[XL],#4
)�          CMP       H,#0
)�!.doit     BEQ       smallspan
)�
)�.loop2    �mapbyte(C1)
)�          �mapbyte(T)
)�&          ADD       C1,C1,T,LSL #8
)�          �mapbyte(T)
)�'          ADD       C1,C1,T,LSL #16
)�          �mapbyte(T)
)�'          ADD       C1,C1,T,LSL #24
)�          �mapbyte(C2)
)�          �mapbyte(T)
*&          ADD       C2,C2,T,LSL #8
*          �mapbyte(T)
*'          ADD       C2,C2,T,LSL #16
*&          �mapbyte(T)
*0'          ADD       C2,C2,T,LSL #24
*:%          STMIA     (XL)!,{C1,C2}
*D          SUBS      H,H,#1
*N          BNE       loop2
*X.smallspan
*b          CMP       XL,XR
*l          BGE       endspan
*v          �mapbyte(C1)
*�"          STRB      C1,[XL],#1
*�          CMP       XL,XR
*�          BEQ       endspan
*�          �mapbyte(C1)
*�"          STRB      C1,[XL],#1
*�          CMP       XL,XR
*�          BEQ       endspan
*�          �mapbyte(C1)
*�"          STRB      C1,[XL],#1
*�          BAL       endspan
*�.endspan_2
*�"          ADD       O,O,#320*2
*�          ADD       L,L,LA
+          ADD       R,R,RA
+           SUBS      CT,CT,#5
+; increment y shading
+           LDR       T,I1D
+*          LDR       I,I3D
+4          ADD       I,I,T
+>          STR       I,I1D
+H#          LDMEQFD   13!,{CT,15}
+R.span_2
+\; Clip to left
+f#          MOVS      T,R,ASR #12
+p&          ADDPL     XR,O,R,ASR #12
+z          MOVMI     XR,O
+�; clip to right
+�           MOV       T,#320*2
+�%          RSBS      T,T,L,ASR #12
+�&          ADD       XL,O,L,ASR #12
+�#          ADDPL     XL,O,#320*2
+�); Load line shade and shade increment
+�          LDR       I,I1D
+�"          MOV       I,I,ASR #8
+�          LDR       H,I2D
+�          MLAPL     I,T,H,I
+�
+�"          MOV       T,L,ASR #4
+�          �       T,T,#255
,          MUL       T,H,T
,.          ADD       I,I,T,ASR #8          
,          
,$#          MOV       I,I,LSL #16
,.#          MOV       H,H,LSL #16
,8$          ADD       I,I,H,LSR#16
,B          SUB       T,XL,XR
,L          CMP       T,#3
,V#          BLE       smallspan_2
,`          TST       XL,#3
,j"          BEQ       endloop1_2
,t.loop1_2  �mapbyte(C1)
,~$          STRB      C1,[XL,#-1]!
,�          TST       XL,#3
,�          BNE       loop1_2
,�.endloop1_2
,�          SUB       H,XL,XR
,�"          MOVS      H,H,LSR #3
,�          BCC       doit_2
,�          �mapbyte(C1)
,�          �mapbyte(T)
,�'          ADD       C1,C1,T,LSL #24
,�          �mapbyte(T)
,�'          ADD       C1,C1,T,LSL #16
,�          �mapbyte(T)
-&          ADD       C1,T,C1,ROR #8
-
$          STR       C1,[XL,#-4]!
-          CMP       H,#0
-#.doit_2   BEQ       smallspan_2
-(.loop2_2
-2          �mapbyte(C2)
-<          �mapbyte(T)
-F'          ADD       C2,C2,T,LSL #24
-P          �mapbyte(T)
-Z'          ADD       C2,C2,T,LSL #16
-d          �mapbyte(T)
-n&          ADD       C2,T,C2,ROR #8
-x          �mapbyte(C1)
-�          �mapbyte(T)
-�'          ADD       C1,C1,T,LSL #24
-�          �mapbyte(T)
-�'          ADD       C1,C1,T,LSL #16
-�          �mapbyte(T)
-�&          ADD       C1,T,C1,ROR #8
-�%          STMDB     (XL)!,{C1,C2}
-�          SUBS      H,H,#1
-�          BNE       loop2_2
-�.smallspan_2
-�          CMP       XR,XL
-�!          BGE       endspan_2
-�          �mapbyte(C1)
.$          STRB      C1,[XL,#-1]!
.          CMP       XR,XL
.!          BEQ       endspan_2
."          �mapbyte(C1)
.,$          STRB      C1,[XL,#-1]!
.6          CMP       XR,XL
.@!          BEQ       endspan_2
.J          �mapbyte(C1)
.T$          STRB      C1,[XL,#-1]!
.^!          BAL       endspan_2
.h]
.r=""
.|
.�� �mapbyte(reg)
.�
[OPT PASS
.�!      MOV       reg,I,LSR #24
.�!      ADD       I,I,I,LSL #16
.�]
.� =""
�
00000000  0d 00 0a 0d f4 3e 20 46  4c 59 4e 68 69 0d 00 14  |.....> FLYNhi...|
00000010  17 f4 20 28 63 29 20 4a  61 6e 20 56 6c 69 65 74  |.. (c) Jan Vliet|
00000020  69 6e 63 6b 0d 00 1e 04  0d 00 28 2f f4 4f 4e 20  |inck......(/.ON |
00000030  45 52 52 4f 52 3a 4f 4e  20 45 52 52 4f 52 20 4f  |ERROR:ON ERROR O|
00000040  46 46 3a 52 45 50 4f 52  54 3a 50 52 49 4e 54 20  |FF:REPORT:PRINT |
00000050  45 52 4c 3a 45 4e 44 0d  00 32 04 0d 00 3c 12 de  |ERL:END..2...<..|
00000060  20 73 74 61 63 6b 20 31  30 30 30 30 30 0d 00 46  | stack 100000..F|
00000070  04 0d 00 50 08 c8 97 20  ee 0d 00 5a 0c 2a 50 4f  |...P... ...Z.*PO|
00000080  49 4e 54 45 52 0d 00 64  0b 62 61 6e 6b 73 3d 32  |INTER..d.banks=2|
00000090  0d 00 6e 3e 53 48 3d 37  20 20 20 20 20 20 20 20  |..n>SH=7        |
000000a0  20 20 20 20 20 3a f4 20  44 65 74 65 72 6d 69 6e  |     :. Determin|
000000b0  65 73 20 74 68 65 20 6e  75 6d 62 65 72 20 6f 66  |es the number of|
000000c0  20 70 61 74 63 68 65 73  3a 20 32 5e 53 48 0d 00  | patches: 2^SH..|
000000d0  78 17 45 44 3d 32 5e 53  48 3a 44 31 3d 45 44 3a  |x.ED=2^SH:D1=ED:|
000000e0  44 32 3d 45 44 0d 00 82  11 46 58 3d 33 3a 46 49  |D2=ED....FX=3:FI|
000000f0  58 3d 32 5e 46 58 0d 00  8c 3e 48 4f 52 49 5a 4f  |X=2^FX...>HORIZO|
00000100  4e 3d 31 30 32 34 20 20  20 20 20 20 20 3a f4 20  |N=1024       :. |
00000110  44 65 74 65 72 6d 69 6e  65 73 20 68 6f 77 20 64  |Determines how d|
00000120  65 65 70 20 74 68 65 20  6c 61 6e 64 20 65 78 74  |eep the land ext|
00000130  65 6e 64 73 0d 00 96 42  5a 4f 4f 4d 3d 35 20 20  |ends...BZOOM=5  |
00000140  20 20 20 20 20 20 20 20  20 20 3a f4 20 44 65 74  |          :. Det|
00000150  65 72 6d 69 6e 65 73 20  74 68 65 20 70 68 79 63  |ermines the phyc|
00000160  69 63 61 6c 20 6d 65 61  73 75 72 65 73 20 6f 66  |ical measures of|
00000170  20 70 61 74 63 68 0d 00  a0 13 de 20 50 55 4e 54  | patch..... PUNT|
00000180  20 31 36 2a 44 31 2a 44  32 0d 00 aa 13 de 20 56  | 16*D1*D2..... V|
00000190  4c 41 4b 20 31 32 2a 44  31 2a 44 32 0d 00 b4 3d  |LAK 12*D1*D2...=|
000001a0  f4 20 54 68 65 20 61 72  72 61 79 20 50 55 4e 54  |. The array PUNT|
000001b0  20 69 73 20 6f 66 20 73  69 7a 65 20 32 5e 53 48  | is of size 2^SH|
000001c0  20 61 6e 64 20 63 6f 6e  74 61 69 6e 73 20 66 6f  | and contains fo|
000001d0  75 72 20 77 6f 72 64 73  3a 0d 00 be 35 f4 20 74  |ur words:...5. t|
000001e0  68 65 20 68 65 69 67 68  74 2c 20 70 72 6f 6a 65  |he height, proje|
000001f0  63 74 65 64 20 78 2c 20  70 72 6f 6a 65 63 74 65  |cted x, projecte|
00000200  64 20 79 20 61 6e 64 20  63 6f 6c 6f 75 72 0d 00  |d y and colour..|
00000210  c8 25 de 20 6d 61 70 5f  73 70 72 69 74 65 5f 68  |.%. map_sprite_h|
00000220  65 69 67 68 74 25 20 34  30 30 30 2b 28 45 44 2a  |eight% 4000+(ED*|
00000230  45 44 29 0d 00 d2 25 de  20 6d 61 70 5f 73 70 72  |ED)...%. map_spr|
00000240  69 74 65 5f 63 6f 6c 6f  72 73 25 20 34 30 30 30  |ite_colors% 4000|
00000250  2b 28 45 44 2a 45 44 29  0d 00 dc 3c c8 99 20 22  |+(ED*ED)...<.. "|
00000260  4f 53 5f 46 69 6c 65 22  2c 31 36 2c 22 3c 46 6c  |OS_File",16,"<Fl|
00000270  79 6e 24 44 69 72 3e 2e  4d 41 50 5f 48 32 22 2c  |yn$Dir>.MAP_H2",|
00000280  6d 61 70 5f 73 70 72 69  74 65 5f 68 65 69 67 68  |map_sprite_heigh|
00000290  74 25 2c 30 0d 00 e6 3b  c8 99 20 22 4f 53 5f 46  |t%,0...;.. "OS_F|
000002a0  69 6c 65 22 2c 31 36 2c  22 3c 46 6c 79 6e 24 44  |ile",16,"<Flyn$D|
000002b0  69 72 3e 2e 4d 41 50 5f  43 22 2c 6d 61 70 5f 73  |ir>.MAP_C",map_s|
000002c0  70 72 69 74 65 5f 63 6f  6c 6f 72 73 25 2c 30 0d  |prite_colors%,0.|
000002d0  00 f0 04 0d 01 0e 11 f2  50 55 4e 54 45 4e 28 50  |........PUNTEN(P|
000002e0  55 4e 54 29 0d 01 18 0c  f2 67 6f 75 72 61 75 64  |UNT).....gouraud|
000002f0  0d 01 22 0e d6 20 73 65  74 5f 6d 6f 64 65 0d 01  |..".. set_mode..|
00000300  2c 0c de 20 42 4c 4b 20  34 30 0d 01 36 1d 21 42  |,.. BLK 40..6.!B|
00000310  4c 4b 3d 37 3a 42 4c 4b  21 34 3d 31 35 30 3a 42  |LK=7:BLK!4=150:B|
00000320  4c 4b 21 38 3d 2d 31 0d  01 40 24 c8 99 20 22 4f  |LK!8=-1..@$.. "O|
00000330  53 5f 52 65 61 64 56 64  75 56 61 72 69 61 62 6c  |S_ReadVduVariabl|
00000340  65 73 22 2c 42 4c 4b 2c  42 4c 4b 0d 01 4a 22 e7  |es",BLK,BLK..J".|
00000350  20 28 62 61 6e 6b 73 3e  31 29 20 80 20 28 42 4c  | (banks>1) . (BL|
00000360  4b 21 34 3c 32 2a 21 42  4c 4b 29 20 8c 0d 01 54  |K!4<2*!BLK) ...T|
00000370  30 c8 99 20 22 4f 53 5f  43 68 61 6e 67 65 44 79  |0.. "OS_ChangeDy|
00000380  6e 61 6d 69 63 41 72 65  61 22 2c 32 2c 62 61 6e  |namicArea",2,ban|
00000390  6b 73 2a 21 42 4c 4b 2d  42 4c 4b 21 34 0d 01 5e  |ks*!BLK-BLK!4..^|
000003a0  05 cd 0d 01 68 0c 50 31  3d 32 2a af 2f 33 0d 01  |....h.P1=2*./3..|
000003b0  72 0f e3 20 49 3d 31 20  b8 20 32 35 35 0d 01 7c  |r.. I=1 . 255..||
000003c0  10 20 50 3d 49 2f 32 35  36 2a 32 2a af 0d 01 86  |. P=I/256*2*....|
000003d0  13 20 52 3d 31 32 38 2a  28 31 2b 9b 28 50 29 29  |. R=128*(1+.(P))|
000003e0  0d 01 90 18 20 47 3d 31  32 38 2a 28 31 2b 9b 28  |.... G=128*(1+.(|
000003f0  32 2a 50 2b 50 31 29 29  0d 01 9a 16 20 42 3d 31  |2*P+P1)).... B=1|
00000400  32 38 2a 28 31 2b 9b 28  50 2d 50 31 29 29 0d 01  |28*(1+.(P-P1))..|
00000410  a4 0e 20 fb 20 49 2c 52  2c 47 2c 42 0d 01 ae 07  |.. . I,R,G,B....|
00000420  ed 20 49 0d 01 b8 09 d6  20 73 65 74 0d 01 c2 04  |. I..... set....|
00000430  0d 01 cc 09 f2 41 53 53  32 0d 01 d6 09 f2 6d 61  |.....ASS2.....ma|
00000440  69 6e 0d 01 e0 13 d6 20  43 41 4c 43 5f 44 49 56  |in..... CALC_DIV|
00000450  54 41 42 4c 45 0d 01 ea  10 c8 97 20 b8 20 36 34  |TABLE...... . 64|
00000460  30 2c 35 31 32 0d 01 f4  07 d1 3d 30 0d 01 fe 0a  |0,512.....=0....|
00000470  d6 20 6d 61 69 6e 0d 02  08 07 54 3d 91 0d 02 12  |. main....T=....|
00000480  07 eb 20 30 0d 02 1c 0b  f1 20 54 2f 31 30 30 0d  |.. 0..... T/100.|
00000490  02 26 05 e0 0d 02 30 04  0d 02 3a 13 dd 20 f2 50  |.&....0...:.. .P|
000004a0  55 4e 54 45 4e 28 50 55  4e 54 29 0d 02 44 0b ea  |UNTEN(PUNT)..D..|
000004b0  20 49 25 2c 4a 25 0d 02  4e 11 e3 20 4a 25 3d 30  | I%,J%..N.. J%=0|
000004c0  20 b8 20 44 32 2d 31 0d  02 58 11 e3 20 49 25 3d  | . D2-1..X.. I%=|
000004d0  30 20 b8 20 44 31 2d 31  0d 02 62 2f 68 65 69 67  |0 . D1-1..b/heig|
000004e0  68 74 25 3d 3f 28 6d 61  70 5f 73 70 72 69 74 65  |ht%=?(map_sprite|
000004f0  5f 68 65 69 67 68 74 25  2b 35 36 2b 49 25 2b 28  |_height%+56+I%+(|
00000500  4a 25 2a 45 44 29 29 0d  02 6c 1e 68 65 69 67 68  |J%*ED))..l.heigh|
00000510  74 25 3d 28 68 65 69 67  68 74 25 80 20 32 35 35  |t%=(height%. 255|
00000520  29 2d 31 32 38 0d 02 76  17 21 50 55 4e 54 3d 68  |)-128..v.!PUNT=h|
00000530  65 69 67 68 74 25 2a 46  49 58 2a 38 0d 02 80 2c  |eight%*FIX*8...,|
00000540  63 6f 6c 25 3d 3f 28 6d  61 70 5f 73 70 72 69 74  |col%=?(map_sprit|
00000550  65 5f 63 6f 6c 6f 72 73  25 2b 35 36 2b 49 25 2b  |e_colors%+56+I%+|
00000560  28 4a 25 2a 45 44 29 29  0d 02 8a 24 63 6f 6c 25  |(J%*ED))...$col%|
00000570  3d 63 6f 6c 25 20 80 20  32 35 35 3a 20 e7 20 63  |=col% . 255: . c|
00000580  6f 6c 25 3d 30 20 63 6f  6c 25 3d 31 0d 02 94 10  |ol%=0 col%=1....|
00000590  50 55 4e 54 21 31 32 3d  63 6f 6c 25 0d 02 9e 0c  |PUNT!12=col%....|
000005a0  50 55 4e 54 2b 3d 31 36  0d 02 a8 05 ed 0d 02 b2  |PUNT+=16........|
000005b0  05 ed 0d 02 bc 05 e1 0d  02 c6 04 0d 02 d0 0b dd  |................|
000005c0  20 f2 6d 61 69 6e 0d 02  da 0b ea 20 50 25 2c 51  | .main..... P%,Q|
000005d0  25 0d 02 e4 0d de 20 51  25 20 31 30 30 30 0d 02  |%..... Q% 1000..|
000005e0  ee 14 e3 20 50 41 53 53  3d 30 20 b8 20 32 20 88  |... PASS=0 . 2 .|
000005f0  20 32 0d 02 f8 09 50 25  3d 51 25 0d 03 02 0d 5b  | 2....P%=Q%....[|
00000600  4f 50 54 20 50 41 53 53  0d 03 0c 0e 2e 73 70 64  |OPT PASS.....spd|
00000610  20 44 43 44 20 30 0d 03  16 09 2e 6d 61 69 6e 0d  | DCD 0.....main.|
00000620  03 20 20 20 20 20 20 20  20 20 20 20 20 53 54 4d  |.            STM|
00000630  46 44 20 20 20 20 20 31  33 21 2c 7b 31 34 7d 0d  |FD     13!,{14}.|
00000640  03 2a 1e 20 20 20 20 20  20 20 20 20 20 53 54 52  |.*.          STR|
00000650  20 20 20 20 20 20 20 31  33 2c 73 70 64 0d 03 34  |       13,spd..4|
00000660  1c 20 20 20 20 20 20 20  20 20 20 a4 61 64 72 28  |.          .adr(|
00000670  31 33 2c 73 74 61 63 6b  29 0d 03 3e 27 20 20 20  |13,stack)..>'   |
00000680  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 20  |       BL       |
00000690  20 63 6c 61 69 6d 5f 69  6e 74 65 72 72 75 70 74  | claim_interrupt|
000006a0  0d 03 48 0d 2e 6d 61 69  6e 6c 6f 6f 70 0d 03 52  |..H..mainloop..R|
000006b0  1e 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.          MOV  |
000006c0  20 20 20 20 20 30 2c 23  26 37 30 0d 03 5c 22 20  |     0,#&70..\" |
000006d0  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |         LDR    |
000006e0  20 20 20 31 2c 62 61 6e  6b 72 65 61 72 0d 03 66  |   1,bankrear..f|
000006f0  1c 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.          MOV  |
00000700  20 20 20 20 20 32 2c 23  30 0d 03 70 21 20 20 20  |     2,#0..p!   |
00000710  20 20 20 20 20 20 20 53  57 49 20 20 20 20 20 20  |       SWI      |
00000720  20 22 4f 53 5f 42 79 74  65 22 0d 03 7a 04 0d 03  | "OS_Byte"..z...|
00000730  84 1b 20 20 20 20 20 20  20 20 20 20 42 4c 20 20  |..          BL  |
00000740  20 20 20 20 20 20 73 65  74 0d 03 8e 1d 20 20 20  |      set....   |
00000750  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 20  |       BL       |
00000760  20 63 6c 65 61 72 0d 03  98 1c 20 20 20 20 20 20  | clear....      |
00000770  20 20 20 20 42 4c 20 20  20 20 20 20 20 20 73 68  |    BL        sh|
00000780  6f 77 0d 03 a2 23 20 20  20 20 20 20 20 20 20 20  |ow...#          |
00000790  42 4c 20 20 20 20 20 20  20 20 64 69 73 70 6c 61  |BL        displa|
000007a0  79 5f 66 70 73 0d 03 ac  22 20 20 20 20 20 20 20  |y_fps..."       |
000007b0  20 20 20 42 4c 20 20 20  20 20 20 20 20 6e 65 78  |   BL        nex|
000007c0  74 5f 66 72 61 6d 65 0d  03 b6 0e 20 20 20 20 20  |t_frame....     |
000007d0  20 20 20 20 20 0d 03 c0  2c 20 20 20 20 20 20 20  |     ...,       |
000007e0  20 20 20 53 57 49 20 20  20 20 20 20 20 22 4f 53  |   SWI       "OS|
000007f0  5f 52 65 61 64 45 73 63  61 70 65 53 74 61 74 65  |_ReadEscapeState|
00000800  22 0d 03 ca 20 20 20 20  20 20 20 20 20 20 20 42  |"...           B|
00000810  43 43 20 20 20 20 20 20  20 6d 61 69 6e 6c 6f 6f  |CC       mainloo|
00000820  70 0d 03 d4 0e 20 20 20  20 20 20 20 20 20 20 0d  |p....          .|
00000830  03 de 29 20 20 20 20 20  20 20 20 20 20 42 4c 20  |..)          BL |
00000840  20 20 20 20 20 20 20 72  65 6c 65 61 73 65 5f 69  |       release_i|
00000850  6e 74 65 72 72 75 70 74  0d 03 e8 18 20 20 20 20  |nterrupt....    |
00000860  20 20 20 20 20 20 4c 44  52 20 31 33 2c 73 70 64  |      LDR 13,spd|
00000870  0d 03 f2 20 20 20 20 20  20 20 20 20 20 20 4c 44  |...           LD|
00000880  4d 46 44 20 20 20 20 20  31 33 21 2c 7b 50 43 7d  |MFD     13!,{PC}|
00000890  0d 03 fc 04 0d 04 06 04  0d 04 10 0f 2e 6e 65 78  |.............nex|
000008a0  74 5f 66 72 61 6d 65 0d  04 1a 23 20 20 20 20 20  |t_frame...#     |
000008b0  20 20 20 20 20 53 57 49  20 20 20 20 20 20 20 22  |     SWI       "|
000008c0  4f 53 5f 49 6e 74 4f 66  66 22 0d 04 24 23 20 20  |OS_IntOff"..$#  |
000008d0  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
000008e0  20 20 31 2c 62 61 6e 6b  63 6f 75 6e 74 0d 04 2e  |  1,bankcount...|
000008f0  1e 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |.          ADD  |
00000900  20 20 20 20 20 31 2c 31  2c 23 31 0d 04 38 23 20  |     1,1,#1..8# |
00000910  20 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |         STR    |
00000920  20 20 20 31 2c 62 61 6e  6b 63 6f 75 6e 74 0d 04  |   1,bankcount..|
00000930  42 22 20 20 20 20 20 20  20 20 20 20 53 57 49 20  |B"          SWI |
00000940  20 20 20 20 20 20 22 4f  53 5f 49 6e 74 4f 6e 22  |      "OS_IntOn"|
00000950  0d 04 4c 22 20 20 20 20  20 20 20 20 20 20 4c 44  |..L"          LD|
00000960  52 20 20 20 20 20 20 20  31 2c 62 61 6e 6b 72 65  |R       1,bankre|
00000970  61 72 0d 04 56 20 20 20  20 20 20 20 20 20 20 20  |ar..V           |
00000980  43 4d 50 20 20 20 20 20  20 20 31 2c 23 62 61 6e  |CMP       1,#ban|
00000990  6b 73 0d 04 60 19 20 20  20 20 20 20 20 20 20 20  |ks..`.          |
000009a0  ec 51 20 20 20 20 20 31  2c 23 30 0d 04 6a 1e 20  |.Q     1,#0..j. |
000009b0  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
000009c0  20 20 20 31 2c 31 2c 23  31 0d 04 74 22 20 20 20  |   1,1,#1..t"   |
000009d0  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 20  |       STR      |
000009e0  20 31 2c 62 61 6e 6b 72  65 61 72 0d 04 7e 23 2e  | 1,bankrear..~#.|
000009f0  64 65 63 69 6d 20 20 20  20 4c 44 52 20 20 20 20  |decim    LDR    |
00000a00  20 20 20 30 2c 62 61 6e  6b 66 72 6f 6e 74 0d 04  |   0,bankfront..|
00000a10  88 1b 20 20 20 20 20 20  20 20 20 20 43 4d 50 20  |..          CMP |
00000a20  20 20 20 20 20 20 30 2c  31 0d 04 92 1d 20 20 20  |      0,1....   |
00000a30  20 20 20 20 20 20 20 42  45 51 20 20 20 20 20 20  |       BEQ      |
00000a40  20 64 65 63 69 6d 0d 04  9c 1e 20 20 20 20 20 20  | decim....      |
00000a50  20 20 20 20 4d 4f 56 20  20 20 20 20 20 20 50 43  |    MOV       PC|
00000a60  2c 52 31 34 0d 04 a6 04  0d 04 b0 1e 2e 74 69 6d  |,R14.........tim|
00000a70  65 5f 63 6f 75 6e 74 65  72 20 20 20 20 20 20 20  |e_counter       |
00000a80  45 51 55 44 20 30 0d 04  ba 1e 2e 66 72 61 6d 65  |EQUD 0.....frame|
00000a90  5f 63 6f 75 6e 74 65 72  20 20 20 20 20 20 45 51  |_counter      EQ|
00000aa0  55 44 20 30 0d 04 c4 1e  2e 66 72 61 6d 65 5f 61  |UD 0.....frame_a|
00000ab0  76 65 72 61 67 65 20 20  20 20 20 20 45 51 55 44  |verage      EQUD|
00000ac0  20 30 0d 04 ce 2f 2e 6f  75 74 70 75 74 5f 62 75  | 0.../.output_bu|
00000ad0  66 66 65 72 20 20 20 20  20 20 44 43 44 20 30 3a  |ffer      DCD 0:|
00000ae0  44 43 44 20 30 3a 44 43  44 20 30 3a 44 43 44 20  |DCD 0:DCD 0:DCD |
00000af0  30 0d 04 d8 10 2e 64 69  73 70 6c 61 79 5f 66 70  |0.....display_fp|
00000b00  73 0d 04 e2 24 20 20 20  20 20 20 20 20 20 20 53  |s...$          S|
00000b10  54 4d 46 44 20 20 20 20  20 31 33 21 2c 7b 30 2d  |TMFD     13!,{0-|
00000b20  32 2c 31 34 7d 0d 04 ec  1c 20 20 20 20 20 20 20  |2,14}....       |
00000b30  20 20 20 53 57 49 20 20  20 20 20 20 20 26 31 31  |   SWI       &11|
00000b40  45 0d 04 f6 28 20 20 20  20 20 20 20 20 20 20 4c  |E...(          L|
00000b50  44 52 20 20 20 20 20 20  20 52 30 2c 66 72 61 6d  |DR       R0,fram|
00000b60  65 5f 61 76 65 72 61 67  65 0d 05 00 28 20 20 20  |e_average...(   |
00000b70  20 20 20 20 20 20 20 41  44 52 20 20 20 20 20 20  |       ADR      |
00000b80  20 52 31 2c 6f 75 74 70  75 74 5f 62 75 66 66 65  | R1,output_buffe|
00000b90  72 0d 05 0a 1e 20 20 20  20 20 20 20 20 20 20 4d  |r....          M|
00000ba0  4f 56 20 20 20 20 20 20  20 52 32 2c 23 31 36 0d  |OV       R2,#16.|
00000bb0  05 14 2c 20 20 20 20 20  20 20 20 20 20 53 57 49  |..,          SWI|
00000bc0  20 20 20 20 20 20 20 22  4f 53 5f 43 6f 6e 76 65  |       "OS_Conve|
00000bd0  72 74 49 6e 74 65 67 65  72 31 22 0d 05 1e 23 20  |rtInteger1"...# |
00000be0  20 20 20 20 20 20 20 20  20 53 57 49 20 20 20 20  |         SWI    |
00000bf0  20 20 20 22 4f 53 5f 57  72 69 74 65 30 22 0d 05  |   "OS_Write0"..|
00000c00  28 24 20 20 20 20 20 20  20 20 20 20 4c 44 4d 46  |($          LDMF|
00000c10  44 20 20 20 20 20 31 33  21 2c 7b 30 2d 32 2c 50  |D     13!,{0-2,P|
00000c20  43 7d 0d 05 32 04 0d 05  3c 11 2e 6d 61 72 6b 65  |C}..2...<..marke|
00000c30  72 20 44 43 44 20 30 0d  05 46 24 2e 74 69 63 6b  |r DCD 0..F$.tick|
00000c40  65 72 20 20 20 53 54 4d  46 44 20 20 20 20 20 31  |er   STMFD     1|
00000c50  33 21 2c 7b 30 2d 33 2c  31 34 7d 0d 05 50 20 20  |3!,{0-3,14}..P  |
00000c60  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |         LDR    |
00000c70  20 20 20 30 2c 6d 61 72  6b 65 72 0d 05 5a 1c 20  |   0,marker..Z. |
00000c80  20 20 20 20 20 20 20 20  20 82 53 20 20 20 20 20  |         .S     |
00000c90  20 30 2c 30 2c 23 31 0d  05 64 20 20 20 20 20 20  | 0,0,#1..d      |
00000ca0  20 20 20 20 20 53 54 52  20 20 20 20 20 20 20 30  |     STR       0|
00000cb0  2c 6d 61 72 6b 65 72 0d  05 6e 24 20 20 20 20 20  |,marker..n$     |
00000cc0  20 20 20 20 20 4c 44 4d  45 51 46 44 20 20 20 31  |     LDMEQFD   1|
00000cd0  33 21 2c 7b 30 2d 33 2c  50 43 7d 0d 05 78 3a 20  |3!,{0-3,PC}..x: |
00000ce0  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |         LDR    |
00000cf0  20 20 20 30 2c 74 69 6d  65 5f 63 6f 75 6e 74 65  |   0,time_counte|
00000d00  72 20 20 3b 20 65 78 65  63 75 74 65 20 61 74 20  |r  ; execute at |
00000d10  35 30 20 48 7a 0d 05 82  1e 20 20 20 20 20 20 20  |50 Hz....       |
00000d20  20 20 20 41 44 44 20 20  20 20 20 20 20 30 2c 30  |   ADD       0,0|
00000d30  2c 23 31 0d 05 8c 1d 20  20 20 20 20 20 20 20 20  |,#1....         |
00000d40  20 43 4d 50 20 20 20 20  20 20 20 30 2c 23 35 30  | CMP       0,#50|
00000d50  0d 05 96 19 20 20 20 20  20 20 20 20 20 20 ec 51  |....          .Q|
00000d60  20 20 20 20 20 30 2c 23  30 0d 05 a0 26 20 20 20  |     0,#0...&   |
00000d70  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 20  |       STR      |
00000d80  20 30 2c 74 69 6d 65 5f  63 6f 75 6e 74 65 72 0d  | 0,time_counter.|
00000d90  05 aa 27 20 20 20 20 20  20 20 20 20 20 4c 44 52  |..'          LDR|
00000da0  45 51 20 20 20 20 20 31  2c 66 72 61 6d 65 5f 63  |EQ     1,frame_c|
00000db0  6f 75 6e 74 65 72 0d 05  b4 27 20 20 20 20 20 20  |ounter...'      |
00000dc0  20 20 20 20 53 54 52 45  51 20 20 20 20 20 31 2c  |    STREQ     1,|
00000dd0  66 72 61 6d 65 5f 61 76  65 72 61 67 65 0d 05 be  |frame_average...|
00000de0  27 20 20 20 20 20 20 20  20 20 20 53 54 52 45 51  |'          STREQ|
00000df0  20 20 20 20 20 30 2c 66  72 61 6d 65 5f 63 6f 75  |     0,frame_cou|
00000e00  6e 74 65 72 0d 05 c8 24  20 20 20 20 20 20 20 20  |nter...$        |
00000e10  20 20 4c 44 4d 46 44 20  20 20 20 20 31 33 21 2c  |  LDMFD     13!,|
00000e20  7b 30 2d 33 2c 50 43 7d  0d 05 d2 04 0d 05 dc 04  |{0-3,PC}........|
00000e30  0d 05 e6 3a 20 2e 62 61  6e 6b 66 72 6f 6e 74 20  |...: .bankfront |
00000e40  45 51 55 44 20 31 20 20  20 20 20 20 3b 20 74 68  |EQUD 1      ; th|
00000e50  65 20 66 72 6f 6e 74 20  66 72 61 6d 65 20 69 73  |e front frame is|
00000e60  20 64 69 73 70 6c 61 79  65 64 0d 05 f0 35 20 2e  | displayed...5 .|
00000e70  62 61 6e 6b 72 65 61 72  20 20 45 51 55 44 20 32  |bankrear  EQUD 2|
00000e80  20 20 20 20 20 20 3b 20  74 68 65 20 72 65 61 72  |      ; the rear|
00000e90  20 66 72 61 6d 65 20 69  73 20 64 72 61 77 6e 0d  | frame is drawn.|
00000ea0  05 fa 3a 20 2e 62 61 6e  6b 63 6f 75 6e 74 20 45  |..: .bankcount E|
00000eb0  51 55 44 20 30 20 20 20  20 20 20 3b 20 6e 72 2e  |QUD 0      ; nr.|
00000ec0  20 6f 66 20 72 65 61 64  79 20 66 72 61 6d 65 73  | of ready frames|
00000ed0  20 69 6e 20 71 75 65 75  65 0d 06 04 04 0d 06 0e  | in queue.......|
00000ee0  3f 2e 74 69 6d 65 5f 73  74 61 6d 70 20 44 43 44  |?.time_stamp DCD|
00000ef0  20 30 3a 44 43 44 20 30  3a 44 43 44 20 30 3a 44  | 0:DCD 0:DCD 0:D|
00000f00  43 44 20 30 3a 44 43 44  20 30 3a 44 43 44 20 30  |CD 0:DCD 0:DCD 0|
00000f10  3a 44 43 44 20 30 3a 44  43 44 20 30 0d 06 18 16  |:DCD 0:DCD 0....|
00000f20  2e 73 79 6e 63 5f 74 69  6d 65 20 20 45 51 55 44  |.sync_time  EQUD|
00000f30  20 30 0d 06 22 04 0d 06  2c 0b 20 2e 76 73 79 6e  | 0.."...,. .vsyn|
00000f40  63 0d 06 36 3b 20 20 20  20 20 20 20 20 20 20 43  |c..6;          C|
00000f50  4d 50 20 20 20 20 20 20  20 30 2c 23 34 20 20 20  |MP       0,#4   |
00000f60  20 20 20 3b 20 63 68 65  63 6b 20 69 66 20 65 76  |   ; check if ev|
00000f70  65 6e 74 20 69 73 20 76  73 79 6e 63 0d 06 40 2d  |ent is vsync..@-|
00000f80  20 20 20 20 20 20 20 20  20 20 4d 4f 56 4e 45 53  |          MOVNES|
00000f90  20 20 20 20 50 43 2c 31  34 20 20 20 20 20 3b 20  |    PC,14     ; |
00000fa0  65 6c 73 65 20 65 78 69  74 0d 06 4a 21 20 20 20  |else exit..J!   |
00000fb0  20 20 20 20 20 20 20 53  54 4d 46 44 20 20 20 20  |       STMFD    |
00000fc0  20 31 33 21 2c 7b 30 2d  31 7d 0d 06 54 1d 20 20  | 13!,{0-1}..T.  |
00000fd0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00000fe0  20 20 52 30 2c 50 43 0d  06 5e 35 20 20 20 20 20  |  R0,PC..^5     |
00000ff0  20 20 20 20 20 84 52 20  20 20 20 20 20 20 52 31  |     .R       R1|
00001000  2c 52 30 2c 23 31 20 20  20 20 20 3b 20 70 75 74  |,R0,#1     ; put|
00001010  20 69 6e 20 73 63 76 20  6d 6f 64 65 0d 06 68 1d  | in scv mode..h.|
00001020  20 20 20 20 20 20 20 20  20 20 54 45 51 50 20 20  |          TEQP  |
00001030  20 20 20 20 52 31 2c 23  30 0d 06 72 1d 20 20 20  |    R1,#0..r.   |
00001040  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 20  |       MOV      |
00001050  20 52 30 2c 52 30 0d 06  7c 24 20 20 20 20 20 20  | R0,R0..|$      |
00001060  20 20 20 20 53 54 4d 46  44 20 20 20 20 20 31 33  |    STMFD     13|
00001070  21 2c 7b 30 2d 32 2c 31  34 7d 0d 06 86 04 0d 06  |!,{0-2,14}......|
00001080  90 43 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |.C          LDR |
00001090  20 20 20 20 20 20 30 2c  73 79 6e 63 5f 74 69 6d  |      0,sync_tim|
000010a0  65 20 20 20 20 20 3b 20  69 6e 63 72 65 6d 65 6e  |e     ; incremen|
000010b0  74 20 73 79 6e 63 20 74  69 6d 65 20 65 76 65 72  |t sync time ever|
000010c0  79 0d 06 9a 2f 20 20 20  20 20 20 20 20 20 20 41  |y.../          A|
000010d0  44 44 20 20 20 20 20 20  20 30 2c 30 2c 23 31 20  |DD       0,0,#1 |
000010e0  20 20 20 20 20 20 20 20  20 3b 20 76 73 79 6e 63  |         ; vsync|
000010f0  0d 06 a4 23 20 20 20 20  20 20 20 20 20 20 53 54  |...#          ST|
00001100  52 20 20 20 20 20 20 20  30 2c 73 79 6e 63 5f 74  |R       0,sync_t|
00001110  69 6d 65 0d 06 ae 04 0d  06 b8 43 20 20 20 20 20  |ime.......C     |
00001120  20 20 20 20 20 4c 44 52  20 20 20 20 20 20 20 52  |     LDR       R|
00001130  30 2c 62 61 6e 6b 63 6f  75 6e 74 20 20 20 3b 20  |0,bankcount   ; |
00001140  69 66 20 6e 6f 20 6e 65  77 20 66 72 61 6d 65 73  |if no new frames|
00001150  20 61 76 61 69 6c 61 62  6c 65 0d 06 c2 48 20 20  | available...H  |
00001160  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00001170  20 20 52 30 2c 23 30 20  20 20 20 20 20 20 20 20  |  R0,#0         |
00001180  20 3b 20 74 68 65 6e 20  64 69 73 70 6c 61 79 20  | ; then display |
00001190  74 68 65 20 70 72 65 76  69 6f 75 73 20 66 72 61  |the previous fra|
000011a0  6d 65 0d 06 cc 20 20 20  20 20 20 20 20 20 20 20  |me...           |
000011b0  42 45 51 20 20 20 20 20  20 20 6e 6f 5f 68 75 72  |BEQ       no_hur|
000011c0  72 79 0d 06 d6 04 0d 06  e0 50 20 20 20 20 20 20  |ry.......P      |
000011d0  20 20 20 20 53 55 42 20  20 20 20 20 20 20 52 30  |    SUB       R0|
000011e0  2c 52 30 2c 23 31 20 20  20 20 20 20 20 3b 20 65  |,R0,#1       ; e|
000011f0  6c 73 65 20 64 69 73 70  6c 61 79 20 6e 65 77 20  |lse display new |
00001200  66 72 61 6d 65 20 61 6e  64 20 75 70 64 61 74 65  |frame and update|
00001210  20 71 75 65 75 65 0d 06  ea 24 20 20 20 20 20 20  | queue...$      |
00001220  20 20 20 20 53 54 52 20  20 20 20 20 20 20 52 30  |    STR       R0|
00001230  2c 62 61 6e 6b 63 6f 75  6e 74 0d 06 f4 24 20 20  |,bankcount...$  |
00001240  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00001250  20 20 52 31 2c 62 61 6e  6b 66 72 6f 6e 74 0d 06  |  R1,bankfront..|
00001260  fe 21 20 20 20 20 20 20  20 20 20 20 43 4d 50 20  |.!          CMP |
00001270  20 20 20 20 20 20 52 31  2c 23 62 61 6e 6b 73 0d  |      R1,#banks.|
00001280  07 08 1a 20 20 20 20 20  20 20 20 20 20 ec 51 20  |...          .Q |
00001290  20 20 20 20 52 31 2c 23  30 0d 07 12 20 20 20 20  |    R1,#0...    |
000012a0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
000012b0  20 52 31 2c 52 31 2c 23  31 0d 07 1c 24 20 20 20  | R1,R1,#1...$   |
000012c0  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 20  |       STR      |
000012d0  20 52 31 2c 62 61 6e 6b  66 72 6f 6e 74 0d 07 26  | R1,bankfront..&|
000012e0  1f 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.          MOV  |
000012f0  20 20 20 20 20 52 30 2c  23 26 37 31 0d 07 30 34  |     R0,#&71..04|
00001300  20 20 20 20 20 20 20 20  20 20 53 57 49 20 20 20  |          SWI   |
00001310  20 20 20 20 36 20 20 20  20 20 20 20 20 20 20 20  |    6           |
00001320  20 20 20 20 20 3b 20 22  4f 53 5f 42 79 74 65 22  |     ; "OS_Byte"|
00001330  0d 07 3a 04 0d 07 44 28  20 20 20 20 20 20 20 20  |..:...D(        |
00001340  20 20 4c 44 52 20 20 20  20 20 20 20 52 30 2c 66  |  LDR       R0,f|
00001350  72 61 6d 65 5f 63 6f 75  6e 74 65 72 0d 07 4e 20  |rame_counter..N |
00001360  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00001370  20 20 20 20 52 30 2c 52  30 2c 23 31 0d 07 58 28  |    R0,R0,#1..X(|
00001380  20 20 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |          STR   |
00001390  20 20 20 20 52 30 2c 66  72 61 6d 65 5f 63 6f 75  |    R0,frame_cou|
000013a0  6e 74 65 72 0d 07 62 04  0d 07 6c 0e 20 2e 6e 6f  |nter..b...l. .no|
000013b0  5f 68 75 72 72 79 0d 07  76 24 20 20 20 20 20 20  |_hurry..v$      |
000013c0  20 20 20 20 4c 44 4d 46  44 20 20 20 20 20 31 33  |    LDMFD     13|
000013d0  21 2c 7b 30 2d 32 2c 31  34 7d 0d 07 80 38 20 20  |!,{0-2,14}...8  |
000013e0  20 20 20 20 20 20 20 20  54 45 51 50 20 20 20 20  |        TEQP    |
000013f0  20 20 52 30 2c 23 30 20  20 20 20 20 3b 20 70 75  |  R0,#0     ; pu|
00001400  74 20 62 61 63 6b 20 69  6e 20 69 72 71 20 6d 6f  |t back in irq mo|
00001410  64 65 0d 07 8a 1d 20 20  20 20 20 20 20 20 20 20  |de....          |
00001420  4d 4f 56 20 20 20 20 20  20 20 52 30 2c 52 30 0d  |MOV       R0,R0.|
00001430  07 94 21 20 20 20 20 20  20 20 20 20 20 4c 44 4d  |..!          LDM|
00001440  46 44 20 20 20 20 20 31  33 21 2c 7b 30 2d 31 7d  |FD     13!,{0-1}|
00001450  0d 07 9e 1e 20 20 20 20  20 20 20 20 20 20 4d 4f  |....          MO|
00001460  56 53 20 20 20 20 20 20  50 43 2c 52 31 34 0d 07  |VS      PC,R14..|
00001470  a8 04 0d 07 b2 14 2e 63  6c 61 69 6d 5f 69 6e 74  |.......claim_int|
00001480  65 72 72 75 70 74 0d 07  bc 1f 20 20 20 20 20 20  |errupt....      |
00001490  20 20 20 20 4d 4f 56 20  20 20 20 20 20 20 52 30  |    MOV       R0|
000014a0  2c 23 26 37 30 0d 07 c6  24 20 20 20 20 20 20 20  |,#&70...$       |
000014b0  20 20 20 4c 44 52 20 20  20 20 20 20 20 52 31 2c  |   LDR       R1,|
000014c0  62 61 6e 6b 66 72 6f 6e  74 0d 07 d0 21 20 20 20  |bankfront...!   |
000014d0  20 20 20 20 20 20 20 53  57 49 20 20 20 20 20 20  |       SWI      |
000014e0  20 22 4f 53 5f 42 79 74  65 22 0d 07 da 42 20 20  | "OS_Byte"...B  |
000014f0  20 20 20 20 20 20 20 20  53 57 49 20 20 20 20 20  |        SWI     |
00001500  20 20 26 31 30 43 20 20  20 20 20 20 20 20 20 20  |  &10C          |
00001510  20 20 20 20 20 20 3b 20  63 6c 65 61 72 20 66 72  |      ; clear fr|
00001520  61 6d 65 20 61 74 20 66  72 6f 6e 74 0d 07 e4 30  |ame at front...0|
00001530  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00001540  20 20 20 20 52 30 2c 23  26 31 43 20 20 20 3b 20  |    R0,#&1C   ; |
00001550  63 6c 61 69 6d 20 74 69  63 6b 65 72 0d 07 ee 21  |claim ticker...!|
00001560  20 20 20 20 20 20 20 20  20 20 41 44 52 20 20 20  |          ADR   |
00001570  20 20 20 20 52 31 2c 74  69 63 6b 65 72 0d 07 f8  |    R1,ticker...|
00001580  1d 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.          MOV  |
00001590  20 20 20 20 20 52 32 2c  23 30 0d 08 02 22 20 20  |     R2,#0..."  |
000015a0  20 20 20 20 20 20 20 20  53 57 49 20 20 20 20 20  |        SWI     |
000015b0  20 20 22 4f 53 5f 43 6c  61 69 6d 22 0d 08 0c 1f  |  "OS_Claim"....|
000015c0  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
000015d0  20 20 20 20 52 30 2c 23  26 31 30 0d 08 16 20 20  |    R0,#&10...  |
000015e0  20 20 20 20 20 20 20 20  20 41 44 52 20 20 20 20  |         ADR    |
000015f0  20 20 20 52 31 2c 76 73  79 6e 63 0d 08 20 1d 20  |   R1,vsync.. . |
00001600  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |         MOV    |
00001610  20 20 20 52 32 2c 23 30  0d 08 2a 22 20 20 20 20  |   R2,#0..*"    |
00001620  20 20 20 20 20 20 53 57  49 20 20 20 20 20 20 20  |      SWI       |
00001630  22 4f 53 5f 43 6c 61 69  6d 22 0d 08 34 1e 20 20  |"OS_Claim"..4.  |
00001640  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00001650  20 20 52 30 2c 23 31 34  0d 08 3e 1d 20 20 20 20  |  R0,#14..>.    |
00001660  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 20 20  |      MOV       |
00001670  52 31 2c 23 34 0d 08 48  21 20 20 20 20 20 20 20  |R1,#4..H!       |
00001680  20 20 20 53 57 49 20 20  20 20 20 20 20 22 4f 53  |   SWI       "OS|
00001690  5f 42 79 74 65 22 0d 08  52 1e 20 20 20 20 20 20  |_Byte"..R.      |
000016a0  20 20 20 20 4d 4f 56 20  20 20 20 20 20 20 50 43  |    MOV       PC|
000016b0  2c 52 31 34 0d 08 5c 04  0d 08 66 16 2e 72 65 6c  |,R14..\...f..rel|
000016c0  65 61 73 65 5f 69 6e 74  65 72 72 75 70 74 0d 08  |ease_interrupt..|
000016d0  70 24 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |p$          LDR |
000016e0  20 20 20 20 20 20 52 30  2c 62 61 6e 6b 63 6f 75  |      R0,bankcou|
000016f0  6e 74 0d 08 7a 1d 20 20  20 20 20 20 20 20 20 20  |nt..z.          |
00001700  43 4d 50 20 20 20 20 20  20 20 52 30 2c 23 30 0d  |CMP       R0,#0.|
00001710  08 84 4f 20 20 20 20 20  20 20 20 20 20 42 4e 45  |..O          BNE|
00001720  20 20 20 20 20 20 20 72  65 6c 65 61 73 65 5f 69  |       release_i|
00001730  6e 74 65 72 72 75 70 74  20 20 20 3b 20 64 69 73  |nterrupt   ; dis|
00001740  70 6c 61 79 20 72 65 6d  61 69 6e 69 6e 67 20 66  |play remaining f|
00001750  72 61 6d 65 73 20 69 6e  20 71 75 65 75 65 0d 08  |rames in queue..|
00001760  8e 1e 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |..          MOV |
00001770  20 20 20 20 20 20 52 30  2c 23 31 33 0d 08 98 1d  |      R0,#13....|
00001780  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00001790  20 20 20 20 52 31 2c 23  34 0d 08 a2 21 20 20 20  |    R1,#4...!   |
000017a0  20 20 20 20 20 20 20 53  57 49 20 20 20 20 20 20  |       SWI      |
000017b0  20 22 4f 53 5f 42 79 74  65 22 0d 08 ac 1f 20 20  | "OS_Byte"....  |
000017c0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000017d0  20 20 52 30 2c 23 26 31  30 0d 08 b6 20 20 20 20  |  R0,#&10...    |
000017e0  20 20 20 20 20 20 20 41  44 52 20 20 20 20 20 20  |       ADR      |
000017f0  20 52 31 2c 76 73 79 6e  63 0d 08 c0 1d 20 20 20  | R1,vsync....   |
00001800  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 20  |       MOV      |
00001810  20 52 32 2c 23 30 0d 08  ca 24 20 20 20 20 20 20  | R2,#0...$      |
00001820  20 20 20 20 53 57 49 20  20 20 20 20 20 20 22 4f  |    SWI       "O|
00001830  53 5f 52 65 6c 65 61 73  65 22 0d 08 d4 1f 20 20  |S_Release"....  |
00001840  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00001850  20 20 52 30 2c 23 26 31  43 0d 08 de 21 20 20 20  |  R0,#&1C...!   |
00001860  20 20 20 20 20 20 20 41  44 52 20 20 20 20 20 20  |       ADR      |
00001870  20 52 31 2c 74 69 63 6b  65 72 0d 08 e8 1d 20 20  | R1,ticker....  |
00001880  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00001890  20 20 52 32 2c 23 30 0d  08 f2 24 20 20 20 20 20  |  R2,#0...$     |
000018a0  20 20 20 20 20 53 57 49  20 20 20 20 20 20 20 22  |     SWI       "|
000018b0  4f 53 5f 52 65 6c 65 61  73 65 22 0d 08 fc 1e 20  |OS_Release".... |
000018c0  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |         MOV    |
000018d0  20 20 20 50 43 2c 52 31  34 0d 09 06 05 5d 0d 09  |   PC,R14....]..|
000018e0  10 05 ed 0d 09 1a 09 51  25 3d 50 25 0d 09 24 05  |.......Q%=P%..$.|
000018f0  e1 0d 09 2e 04 0d 09 38  0b dd 20 f2 41 53 53 32  |.......8.. .ASS2|
00001900  0d 09 42 0b ea 20 50 25  2c 51 25 0d 09 4c 0e de  |..B.. P%,Q%..L..|
00001910  20 51 25 20 32 30 30 30  30 0d 09 56 04 0d 09 60  | Q% 20000..V...`|
00001920  12 de 20 43 53 54 41 42  20 38 2a 31 30 32 34 0d  |.. CSTAB 8*1024.|
00001930  09 6a 10 e3 20 49 3d 30  20 b8 20 31 30 32 33 0d  |.j.. I=0 . 1023.|
00001940  09 74 0d 48 3d af 2f 35  31 32 2a 49 0d 09 7e 18  |.t.H=./512*I..~.|
00001950  43 53 54 41 42 21 28 49  2a 38 29 3d 9b 28 48 29  |CSTAB!(I*8)=.(H)|
00001960  2a 32 35 36 0d 09 88 1a  43 53 54 41 42 21 28 49  |*256....CSTAB!(I|
00001970  2a 38 2b 34 29 3d b5 28  48 29 2a 32 35 36 0d 09  |*8+4)=.(H)*256..|
00001980  92 05 ed 0d 09 9c 04 0d  09 a6 17 de 20 44 49 54  |............ DIT|
00001990  41 42 4c 45 20 34 30 30  30 2a 31 36 2a 34 0d 09  |ABLE 4000*16*4..|
000019a0  b0 14 e3 20 50 41 53 53  3d 30 20 b8 20 32 20 88  |... PASS=0 . 2 .|
000019b0  20 32 0d 09 ba 41 41 3d  30 3a 42 3d 31 3a 54 41  | 2...AA=0:B=1:TA|
000019c0  42 3d 32 3a 54 3d 33 3a  4e 52 3d 34 3a 58 3d 35  |B=2:T=3:NR=4:X=5|
000019d0  3a 59 3d 36 3a 49 3d 37  3a 4a 3d 38 3a 43 53 3d  |:Y=6:I=7:J=8:CS=|
000019e0  39 3a 53 4e 3d 31 30 3a  48 3d 31 31 3a 44 49 54  |9:SN=10:H=11:DIT|
000019f0  3d 31 32 0d 09 c4 0f 5a  3d 54 3a 4e 3d 34 3a 51  |=12....Z=T:N=4:Q|
00001a00  3d 32 0d 09 ce 1d 50 30  3d 41 3a 50 31 3d 42 3a  |=2....P0=A:P1=B:|
00001a10  50 32 3d 49 3a 50 33 3d  4a 3a 50 34 3d 53 4e 0d  |P2=I:P3=J:P4=SN.|
00001a20  09 d8 09 50 25 3d 51 25  0d 09 e2 0d 5b 4f 50 54  |...P%=Q%....[OPT|
00001a30  20 50 41 53 53 0d 09 ec  04 0d 09 f6 11 2e 46 52  | PASS.........FR|
00001a40  45 45 44 20 45 51 55 44  20 30 0d 0a 00 14 2e 56  |EED EQUD 0.....V|
00001a50  4c 54 41 42 20 45 51 55  44 20 56 4c 41 4b 0d 0a  |LTAB EQUD VLAK..|
00001a60  0a 14 2e 50 55 54 41 42  20 45 51 55 44 20 50 55  |...PUTAB EQUD PU|
00001a70  4e 54 0d 0a 14 12 2e 6e  72 20 45 51 55 44 20 44  |NT.....nr EQUD D|
00001a80  31 2a 44 32 0d 0a 1e 13  2e 6e 72 32 20 45 51 55  |1*D2.....nr2 EQU|
00001a90  44 20 44 31 2a 44 32 0d  0a 28 0e 2e 52 58 20 45  |D D1*D2..(..RX E|
00001aa0  51 55 44 20 30 0d 0a 32  0e 2e 52 59 20 45 51 55  |QUD 0..2..RY EQU|
00001ab0  44 20 30 0d 0a 3c 19 2e  43 53 44 20 45 51 55 44  |D 0..<..CSD EQUD|
00001ac0  20 9b 28 af 2f 32 30 29  2a 32 35 36 0d 0a 46 19  | .(./20)*256..F.|
00001ad0  2e 53 4e 44 20 45 51 55  44 20 b5 28 af 2f 32 30  |.SND EQUD .(./20|
00001ae0  29 2a 32 35 36 0d 0a 50  16 2e 43 53 54 41 42 44  |)*256..P..CSTABD|
00001af0  20 45 51 55 44 20 43 53  54 41 42 0d 0a 5a 12 2e  | EQUD CSTAB..Z..|
00001b00  48 31 44 20 45 51 55 44  20 31 36 2a 38 0d 0a 64  |H1D EQUD 16*8..d|
00001b10  0f 2e 48 32 44 20 45 51  55 44 20 30 0d 0a 6e 16  |..H2D EQUD 0..n.|
00001b20  2e 44 49 54 44 20 45 51  55 44 20 44 49 54 41 42  |.DITD EQUD DITAB|
00001b30  4c 45 0d 0a 78 16 2e 44  4e 52 44 20 45 51 55 44  |LE..x..DNRD EQUD|
00001b40  20 34 30 30 30 2a 31 36  0d 0a 82 17 2e 79 72 6f  | 4000*16.....yro|
00001b50  74 20 45 51 55 44 20 30  3a 45 51 55 44 20 30 0d  |t EQUD 0:EQUD 0.|
00001b60  0a 8c 11 2e 68 69 67 68  74 20 45 51 55 44 20 30  |....hight EQUD 0|
00001b70  0d 0a 96 04 0d 0a a0 04  0d 0a aa 12 2e 43 41 4c  |.............CAL|
00001b80  43 5f 44 49 56 54 41 42  4c 45 0d 0a b4 10 4c 44  |C_DIVTABLE....LD|
00001b90  52 20 44 49 54 2c 44 49  54 44 0d 0a be 0e 4c 44  |R DIT,DITD....LD|
00001ba0  52 20 49 2c 44 4e 52 44  0d 0a c8 0c 2e 44 56 4c  |R I,DNRD.....DVL|
00001bb0  4f 4f 50 32 0d 0a d2 12  4d 4f 56 20 54 2c 23 32  |OOP2....MOV T,#2|
00001bc0  30 30 3c 3c 31 36 0d 0a  dc 0b 4d 4f 56 20 4e 2c  |00<<16....MOV N,|
00001bd0  49 0d 0a e6 0c 4d 4f 56  20 4a 2c 23 30 0d 0a f0  |I....MOV J,#0...|
00001be0  0c 4d 4f 56 20 51 2c 23  30 0d 0a fa 0c 2e 44 56  |.MOV Q,#0.....DV|
00001bf0  4c 4f 4f 50 33 0d 0b 04  0b 43 4d 50 20 4e 2c 54  |LOOP3....CMP N,T|
00001c00  0d 0b 0e 14 4d 4f 56 4c  4f 20 4e 2c 4e 2c 4c 53  |....MOVLO N,N,LS|
00001c10  4c 20 23 31 0d 0b 18 10  41 44 44 4c 4f 20 4a 2c  |L #1....ADDLO J,|
00001c20  4a 2c 23 31 0d 0b 22 0f  42 4c 4f 20 44 56 4c 4f  |J,#1..".BLO DVLO|
00001c30  4f 50 33 0d 0b 2c 11 4d  4f 56 20 4e 2c 4e 2c 4c  |OP3..,.MOV N,N,L|
00001c40  53 52 20 4a 0d 0b 36 0c  2e 44 56 4c 4f 4f 50 31  |SR J..6..DVLOOP1|
00001c50  0d 0b 40 11 43 4d 50 20  54 2c 4e 2c 4c 53 4c 20  |..@.CMP T,N,LSL |
00001c60  4a 0d 0b 4a 15 53 55 42  48 53 20 54 2c 54 2c 4e  |J..J.SUBHS T,T,N|
00001c70  2c 4c 53 4c 20 4a 0d 0b  54 0d 41 44 43 20 51 2c  |,LSL J..T.ADC Q,|
00001c80  51 2c 51 0d 0b 5e 0f 53  55 42 53 20 4a 2c 4a 2c  |Q,Q..^.SUBS J,J,|
00001c90  23 31 0d 0b 68 0f 42 50  4c 20 44 56 4c 4f 4f 50  |#1..h.BPL DVLOOP|
00001ca0  31 0d 0b 72 18 53 54 52  20 51 2c 5b 44 49 54 2c  |1..r.STR Q,[DIT,|
00001cb0  49 2c 4c 53 4c 20 23 32  5d 0d 0b 7c 0f 53 55 42  |I,LSL #2]..|.SUB|
00001cc0  53 20 49 2c 49 2c 23 31  0d 0b 86 0f 42 4e 45 20  |S I,I,#1....BNE |
00001cd0  44 56 4c 4f 4f 50 32 0d  0b 90 0e 4d 4f 56 20 50  |DVLOOP2....MOV P|
00001ce0  43 2c 52 31 34 0d 0b 9a  04 0d 0b a4 14 2e 44 45  |C,R14.........DE|
00001cf0  42 20 44 43 44 20 30 3a  44 43 44 20 30 0d 0b ae  |B DCD 0:DCD 0...|
00001d00  09 2e 73 68 6f 77 0d 0b  b8 12 53 54 4d 46 44 20  |..show....STMFD |
00001d10  31 33 21 2c 7b 31 34 7d  0d 0b c2 12 53 57 49 20  |13!,{14}....SWI |
00001d20  22 4f 53 5f 4d 6f 75 73  65 22 0d 0b cc 10 53 55  |"OS_Mouse"....SU|
00001d30  42 20 41 2c 41 2c 23 36  34 30 0d 0b d6 04 0d 0b  |B A,A,#640......|
00001d40  e0 04 0d 0b ea 0d 4c 44  52 20 54 2c 48 31 44 0d  |......LDR T,H1D.|
00001d50  0b f4 1a 43 4d 50 20 51  2c 23 34 3a 41 44 44 45  |...CMP Q,#4:ADDE|
00001d60  51 20 54 2c 54 2c 23 31  36 0d 0b fe 1a 43 4d 50  |Q T,T,#16....CMP|
00001d70  20 51 2c 23 31 3a 53 55  42 45 51 20 54 2c 54 2c  | Q,#1:SUBEQ T,T,|
00001d80  23 31 36 0d 0c 08 0d 53  54 52 20 54 2c 48 31 44  |#16....STR T,H1D|
00001d90  0d 0c 12 04 0d 0c 1c 0d  4c 44 52 20 54 2c 48 32  |........LDR T,H2|
00001da0  44 0d 0c 26 1a 43 4d 50  20 51 2c 23 36 3a 41 44  |D..&.CMP Q,#6:AD|
00001db0  44 45 51 20 54 2c 54 2c  23 31 36 0d 0c 30 1a 43  |DEQ T,T,#16..0.C|
00001dc0  4d 50 20 51 2c 23 33 3a  53 55 42 45 51 20 54 2c  |MP Q,#3:SUBEQ T,|
00001dd0  54 2c 23 31 36 0d 0c 3a  0d 53 54 52 20 54 2c 48  |T,#16..:.STR T,H|
00001de0  32 44 0d 0c 44 04 0d 0c  4e 0f 4c 44 52 20 54 2c  |2D..D...N.LDR T,|
00001df0  68 69 67 68 74 0d 0c 58  1e 43 4d 50 20 51 2c 23  |hight..X.CMP Q,#|
00001e00  35 3a 41 44 44 45 51 20  54 2c 54 2c 23 33 32 2a  |5:ADDEQ T,T,#32*|
00001e10  46 49 58 0d 0c 62 1e 43  4d 50 20 51 2c 23 32 3a  |FIX..b.CMP Q,#2:|
00001e20  53 55 42 45 51 20 54 2c  54 2c 23 33 32 2a 46 49  |SUBEQ T,T,#32*FI|
00001e30  58 0d 0c 6c 14 43 4d 50  20 54 2c 23 32 35 36 2a  |X..l.CMP T,#256*|
00001e40  46 49 58 2a 36 0d 0c 76  16 4d 4f 56 47 45 20 54  |FIX*6..v.MOVGE T|
00001e50  2c 23 32 35 36 2a 46 49  58 2a 36 0d 0c 80 14 43  |,#256*FIX*6....C|
00001e60  4d 4e 20 54 2c 23 32 35  36 2a 46 49 58 2a 36 0d  |MN T,#256*FIX*6.|
00001e70  0c 8a 16 4d 56 4e 4c 45  20 54 2c 23 32 35 36 2a  |...MVNLE T,#256*|
00001e80  46 49 58 2a 36 0d 0c 94  0f 53 54 52 20 54 2c 68  |FIX*6....STR T,h|
00001e90  69 67 68 74 0d 0c 9e 04  0d 0c a8 04 0d 0c b2 04  |ight............|
00001ea0  0d 0c bc 12 4c 44 52 20  54 41 42 2c 43 53 54 41  |....LDR TAB,CSTA|
00001eb0  42 44 0d 0c c6 0c 4d 56  4e 20 54 2c 23 30 0d 0c  |BD....MVN T,#0..|
00001ec0  d0 13 4d 4f 56 20 54 2c  54 2c 4c 53 52 20 23 32  |..MOV T,T,LSR #2|
00001ed0  32 0d 0c da 0c 4d 56 4e  20 48 2c 23 30 0d 0c e4  |2....MVN H,#0...|
00001ee0  13 4d 4f 56 20 48 2c 48  2c 4c 53 52 20 23 31 36  |.MOV H,H,LSR #16|
00001ef0  0d 0c ee 04 0d 0c f8 0b  80 20 49 2c 41 2c 54 0d  |......... I,A,T.|
00001f00  0d 02 33 41 44 44 20 49  2c 54 41 42 2c 49 2c 4c  |..3ADD I,TAB,I,L|
00001f10  53 4c 20 23 33 20 20 20  20 3b 20 67 65 74 20 63  |SL #3    ; get c|
00001f20  6f 73 20 61 6e 64 20 73  69 6e 20 79 2d 61 6e 67  |os and sin y-ang|
00001f30  6c 65 0d 0d 0c 13 4c 44  4d 49 41 20 49 2c 7b 43  |le....LDMIA I,{C|
00001f40  53 2c 53 4e 7d 0d 0d 16  0f 41 44 52 20 20 4a 2c  |S,SN}....ADR  J,|
00001f50  79 72 6f 74 0d 0d 20 13  53 54 4d 49 41 20 4a 2c  |yrot.. .STMIA J,|
00001f60  7b 43 53 2c 53 4e 7d 0d  0d 2a 04 0d 0d 34 04 0d  |{CS,SN}..*...4..|
00001f70  0d 3e 10 52 53 42 20 53  4e 2c 53 4e 2c 23 30 0d  |.>.RSB SN,SN,#0.|
00001f80  0d 48 0e 4d 55 4c 20 41  2c 53 4e 2c 42 0d 0d 52  |.H.MUL A,SN,B..R|
00001f90  0e 4d 55 4c 20 42 2c 43  53 2c 42 0d 0d 5c 04 0d  |.MUL B,CS,B..\..|
00001fa0  0d 66 0c 4c 44 52 20 58  2c 52 58 0d 0d 70 0c 4c  |.f.LDR X,RX..p.L|
00001fb0  44 52 20 59 2c 52 59 0d  0d 7a 15 41 44 44 53 20  |DR Y,RY..z.ADDS |
00001fc0  58 2c 58 2c 41 2c 41 53  52 20 23 38 0d 0d 84 17  |X,X,A,ASR #8....|
00001fd0  41 44 44 4c 54 20 58 2c  58 2c 23 44 31 2a 45 44  |ADDLT X,X,#D1*ED|
00001fe0  2a 31 36 0d 0d 8e 13 43  4d 50 20 58 2c 23 44 31  |*16....CMP X,#D1|
00001ff0  2a 45 44 2a 31 36 0d 0d  98 17 53 55 42 47 45 20  |*ED*16....SUBGE |
00002000  58 2c 58 2c 23 44 31 2a  45 44 2a 31 36 0d 0d a2  |X,X,#D1*ED*16...|
00002010  15 41 44 44 53 20 59 2c  59 2c 42 2c 41 53 52 20  |.ADDS Y,Y,B,ASR |
00002020  23 38 0d 0d ac 17 41 44  44 4c 54 20 59 2c 59 2c  |#8....ADDLT Y,Y,|
00002030  23 44 32 2a 45 44 2a 31  36 0d 0d b6 13 43 4d 50  |#D2*ED*16....CMP|
00002040  20 59 2c 23 44 32 2a 45  44 2a 31 36 0d 0d c0 17  | Y,#D2*ED*16....|
00002050  53 55 42 47 45 20 59 2c  59 2c 23 44 32 2a 45 44  |SUBGE Y,Y,#D2*ED|
00002060  2a 31 36 0d 0d ca 0c 53  54 52 20 58 2c 52 58 0d  |*16....STR X,RX.|
00002070  0d d4 0c 53 54 52 20 59  2c 52 59 0d 0d de 0b 4d  |...STR Y,RY....M|
00002080  4f 56 20 41 2c 58 0d 0d  e8 0b 4d 4f 56 20 42 2c  |OV A,X....MOV B,|
00002090  59 0d 0d f2 04 0d 0d fc  04 0d 0e 06 04 0d 0e 10  |Y...............|
000020a0  04 0d 0e 1a 0d 4c 44 52  20 49 2c 48 31 44 0d 0e  |.....LDR I,H1D..|
000020b0  24 12 4d 4f 56 20 49 2c  49 2c 4c 53 52 20 23 31  |$.MOV I,I,LSR #1|
000020c0  0d 0e 2e 0b 80 20 49 2c  49 2c 54 0d 0e 38 16 41  |..... I,I,T..8.A|
000020d0  44 44 20 49 2c 54 41 42  2c 49 2c 4c 53 4c 20 23  |DD I,TAB,I,LSL #|
000020e0  33 0d 0e 42 13 4c 44 4d  49 41 20 49 2c 7b 43 53  |3..B.LDMIA I,{CS|
000020f0  2c 53 4e 7d 0d 0e 4c 0d  80 20 43 53 2c 43 53 2c  |,SN}..L.. CS,CS,|
00002100  48 0d 0e 56 0d 80 20 53  4e 2c 53 4e 2c 48 0d 0e  |H..V.. SN,SN,H..|
00002110  60 04 0d 0e 6a 0d 4c 44  52 20 49 2c 48 32 44 0d  |`...j.LDR I,H2D.|
00002120  0e 74 12 4d 4f 56 20 49  2c 49 2c 4c 53 52 20 23  |.t.MOV I,I,LSR #|
00002130  31 0d 0e 7e 0b 80 20 49  2c 49 2c 54 0d 0e 88 16  |1..~.. I,I,T....|
00002140  41 44 44 20 49 2c 54 41  42 2c 49 2c 4c 53 4c 20  |ADD I,TAB,I,LSL |
00002150  23 33 0d 0e 92 11 4c 44  4d 49 41 20 49 2c 7b 49  |#3....LDMIA I,{I|
00002160  2c 4a 7d 0d 0e 9c 17 41  44 44 20 43 53 2c 43 53  |,J}....ADD CS,CS|
00002170  2c 49 2c 4c 53 4c 20 23  31 36 0d 0e a6 17 41 44  |,I,LSL #16....AD|
00002180  44 20 53 4e 2c 53 4e 2c  4a 2c 4c 53 4c 20 23 31  |D SN,SN,J,LSL #1|
00002190  36 0d 0e b0 04 0d 0e ba  10 4c 44 52 20 44 49 54  |6........LDR DIT|
000021a0  2c 44 49 54 44 0d 0e c4  04 0d 0e ce 14 3b 20 63  |,DITD........; c|
000021b0  6f 6e 66 69 67 75 72 65  20 62 69 6e 73 0d 0e d8  |onfigure bins...|
000021c0  0f 4c 44 52 20 4e 2c 56  4c 54 41 42 0d 0e e2 14  |.LDR N,VLTAB....|
000021d0  4d 4f 56 20 49 2c 23 48  4f 52 49 5a 4f 4e 2f 38  |MOV I,#HORIZON/8|
000021e0  0d 0e ec 0c 4d 4f 56 20  4a 2c 23 30 0d 0e f6 0c  |....MOV J,#0....|
000021f0  2e 69 6e 69 74 62 69 6e  0d 0f 00 10 53 54 52 20  |.initbin....STR |
00002200  4a 2c 5b 4e 5d 2c 23 34  0d 0f 0a 0f 53 55 42 53  |J,[N],#4....SUBS|
00002210  20 49 2c 49 2c 23 31 0d  0f 14 0f 42 4e 45 20 69  | I,I,#1....BNE i|
00002220  6e 69 74 62 69 6e 0d 0f  1e 0f 53 54 52 20 4e 2c  |nitbin....STR N,|
00002230  46 52 45 45 44 0d 0f 28  04 0d 0f 32 04 0d 0f 3c  |FREED..(...2...<|
00002240  0c 4d 4f 56 20 4a 2c 23  30 0d 0f 46 0c 4d 4f 56  |.MOV J,#0..F.MOV|
00002250  20 49 2c 23 30 0d 0f 50  04 0d 0f 5a 0c 4d 4f 56  | I,#0..P...Z.MOV|
00002260  20 48 2c 23 30 0d 0f 64  09 2e 76 6c 6f 70 0d 0f  | H,#0..d..vlop..|
00002270  6e 0b 4d 4f 56 20 49 2c  48 0d 0f 78 11 42 4c 20  |n.MOV I,H..x.BL |
00002280  63 68 65 63 6b 70 6f 69  6e 74 0d 0f 82 19 43 4d  |checkpoint....CM|
00002290  50 20 54 2c 23 31 30 30  3a 42 45 51 20 76 66 6f  |P T,#100:BEQ vfo|
000022a0  75 6e 64 0d 0f 8c 0e 52  53 42 20 49 2c 49 2c 23  |und....RSB I,I,#|
000022b0  30 0d 0f 96 11 42 4c 20  63 68 65 63 6b 70 6f 69  |0....BL checkpoi|
000022c0  6e 74 0d 0f a0 19 43 4d  50 20 54 2c 23 31 30 30  |nt....CMP T,#100|
000022d0  3a 42 45 51 20 76 66 6f  75 6e 64 0d 0f aa 0c 4d  |:BEQ vfound....M|
000022e0  4f 56 20 49 2c 23 30 0d  0f b4 0b 4d 4f 56 20 4a  |OV I,#0....MOV J|
000022f0  2c 48 0d 0f be 11 42 4c  20 63 68 65 63 6b 70 6f  |,H....BL checkpo|
00002300  69 6e 74 0d 0f c8 19 43  4d 50 20 54 2c 23 31 30  |int....CMP T,#10|
00002310  30 3a 42 45 51 20 76 66  6f 75 6e 64 0d 0f d2 0e  |0:BEQ vfound....|
00002320  52 53 42 20 4a 2c 4a 2c  23 30 0d 0f dc 11 42 4c  |RSB J,J,#0....BL|
00002330  20 63 68 65 63 6b 70 6f  69 6e 74 0d 0f e6 19 43  | checkpoint....C|
00002340  4d 50 20 54 2c 23 31 30  30 3a 42 45 51 20 76 66  |MP T,#100:BEQ vf|
00002350  6f 75 6e 64 0d 0f f0 0c  4d 4f 56 20 4a 2c 23 30  |ound....MOV J,#0|
00002360  0d 0f fa 0e 41 44 44 20  48 2c 48 2c 23 31 0d 10  |....ADD H,H,#1..|
00002370  04 0f 43 4d 50 20 48 2c  23 45 44 2f 32 0d 10 0e  |..CMP H,#ED/2...|
00002380  0c 42 4e 45 20 76 6c 6f  70 0d 10 18 12 4c 44 4d  |.BNE vlop....LDM|
00002390  46 44 20 31 33 21 2c 7b  50 43 7d 0d 10 22 0b 2e  |FD 13!,{PC}.."..|
000023a0  76 66 6f 75 6e 64 0d 10  2c 04 0d 10 36 04 0d 10  |vfound..,...6...|
000023b0  40 13 a4 61 64 72 28 54  2c 53 43 52 45 45 4e 32  |@..adr(T,SCREEN2|
000023c0  29 0d 10 4a 0d 4c 44 52  20 48 2c 5b 54 5d 0d 10  |)..J.LDR H,[T]..|
000023d0  54 13 41 44 44 20 48 2c  48 2c 23 36 34 30 2a 36  |T.ADD H,H,#640*6|
000023e0  34 0d 10 5e 0f 41 44 44  20 48 2c 48 2c 23 36 34  |4..^.ADD H,H,#64|
000023f0  0d 10 68 0e 3b 53 54 52  20 48 2c 5b 54 5d 0d 10  |..h.;STR H,[T]..|
00002400  72 04 0d 10 7c 04 0d 10  86 0f 4c 44 52 20 4e 2c  |r...|.....LDR N,|
00002410  56 4c 54 41 42 0d 10 90  0a 42 4c 20 72 65 63 0d  |VLTAB....BL rec.|
00002420  10 9a 10 4d 4f 56 20 54  2c 23 31 3c 3c 33 31 0d  |...MOV T,#1<<31.|
00002430  10 a4 0e 3b 53 54 52 20  54 2c 5b 4e 5d 0d 10 ae  |...;STR T,[N]...|
00002440  04 0d 10 b8 0f 4c 44 52  20 48 2c 56 4c 54 41 42  |.....LDR H,VLTAB|
00002450  0d 10 c2 0a 42 4c 20 74  65 6b 0d 10 cc 12 4c 44  |....BL tek....LD|
00002460  4d 46 44 20 31 33 21 2c  7b 50 43 7d 0d 10 d6 04  |MFD 13!,{PC}....|
00002470  0d 10 e0 25 3b 20 63 68  65 63 6b 20 70 6f 69 6e  |...%; check poin|
00002480  74 20 28 49 2c 4a 29 20  74 6f 20 62 65 20 76 69  |t (I,J) to be vi|
00002490  73 69 62 6c 65 0d 10 ea  27 3b 20 58 2a 2c 59 2a  |sible...'; X*,Y*|
000024a0  2c 5a 2a 3d 54 2a 2c 4e  2a 2c 20 41 2c 42 2c 49  |,Z*=T*,N*, A,B,I|
000024b0  2c 4a 2c 43 53 2c 53 4e  2c 44 49 54 0d 10 f4 0f  |,J,CS,SN,DIT....|
000024c0  2e 63 68 65 63 6b 70 6f  69 6e 74 0d 10 fe 1b 53  |.checkpoint....S|
000024d0  54 4d 46 44 20 31 33 21  2c 7b 49 2c 4a 2c 4e 2c  |TMFD 13!,{I,J,N,|
000024e0  51 2c 31 34 7d 5e 0d 11  08 18 41 44 44 20 58 2c  |Q,14}^....ADD X,|
000024f0  49 2c 41 2c 41 53 52 20  23 53 48 2b 46 58 0d 11  |I,A,ASR #SH+FX..|
00002500  12 18 41 44 44 20 5a 2c  4a 2c 42 2c 41 53 52 20  |..ADD Z,J,B,ASR |
00002510  23 53 48 2b 46 58 0d 11  1c 04 0d 11 26 0f 80 20  |#SH+FX......&.. |
00002520  51 2c 58 2c 23 44 31 2d  31 0d 11 30 15 41 44 44  |Q,X,#D1-1..0.ADD|
00002530  20 51 2c 51 2c 5a 2c 4c  53 4c 20 23 53 48 0d 11  | Q,Q,Z,LSL #SH..|
00002540  3a 1a 4d 4f 56 20 51 2c  51 2c 4c 53 4c 20 23 28  |:.MOV Q,Q,LSL #(|
00002550  33 32 2d 32 2a 53 48 29  0d 11 44 04 0d 11 4e 0f  |32-2*SH)..D...N.|
00002560  4c 44 52 20 4e 2c 50 55  54 41 42 0d 11 58 1e 41  |LDR N,PUTAB..X.A|
00002570  44 44 20 4e 2c 4e 2c 51  2c 4c 53 52 20 23 28 33  |DD N,N,Q,LSR #(3|
00002580  32 2d 32 2a 53 48 2d 34  29 0d 11 62 04 0d 11 6c  |2-2*SH-4)..b...l|
00002590  0f 4c 44 52 20 4a 2c 68  69 67 68 74 0d 11 76 18  |.LDR J,hight..v.|
000025a0  52 53 42 20 58 2c 41 2c  58 2c 4c 53 4c 20 23 53  |RSB X,A,X,LSL #S|
000025b0  48 2b 46 58 0d 11 80 10  4c 44 52 20 59 2c 5b 4e  |H+FX....LDR Y,[N|
000025c0  5d 2c 23 34 0d 11 8a 0d  41 44 44 20 59 2c 59 2c  |],#4....ADD Y,Y,|
000025d0  4a 0d 11 94 1a 52 53 42  20 5a 2c 42 2c 5a 2c 4c  |J....RSB Z,B,Z,L|
000025e0  53 4c 20 23 53 48 2b 46  58 3a 5d 0d 11 9e 04 0d  |SL #SH+FX:].....|
000025f0  11 a8 13 e7 20 53 48 2d  5a 4f 4f 4d 20 3e 20 30  |.... SH-ZOOM > 0|
00002600  20 8c 0d 11 b2 0d 5b 4f  50 54 20 50 41 53 53 0d  | .....[OPT PASS.|
00002610  11 bc 18 4d 4f 56 20 58  2c 58 2c 41 53 52 20 23  |...MOV X,X,ASR #|
00002620  53 48 2d 5a 4f 4f 4d 0d  11 c6 18 4d 4f 56 20 59  |SH-ZOOM....MOV Y|
00002630  2c 59 2c 41 53 52 20 23  53 48 2d 5a 4f 4f 4d 0d  |,Y,ASR #SH-ZOOM.|
00002640  11 d0 1a 4d 4f 56 20 5a  2c 5a 2c 41 53 52 20 23  |...MOV Z,Z,ASR #|
00002650  53 48 2d 5a 4f 4f 4d 3a  5d 0d 11 da 05 cd 0d 11  |SH-ZOOM:].......|
00002660  e4 04 0d 11 ee 12 e7 20  53 48 2d 5a 4f 4f 4d 20  |....... SH-ZOOM |
00002670  3c 30 20 8c 0d 11 f8 0d  5b 4f 50 54 20 50 41 53  |<0 .....[OPT PAS|
00002680  53 0d 12 02 18 4d 4f 56  20 58 2c 58 2c 4c 53 4c  |S....MOV X,X,LSL|
00002690  20 23 5a 4f 4f 4d 2d 53  48 0d 12 0c 18 4d 4f 56  | #ZOOM-SH....MOV|
000026a0  20 59 2c 59 2c 4c 53 4c  20 23 5a 4f 4f 4d 2d 53  | Y,Y,LSL #ZOOM-S|
000026b0  48 0d 12 16 1a 4d 4f 56  20 5a 2c 5a 2c 4c 53 4c  |H....MOV Z,Z,LSL|
000026c0  20 23 5a 4f 4f 4d 2d 53  48 3a 5d 0d 12 20 05 cd  | #ZOOM-SH:].. ..|
000026d0  0d 12 2a 04 0d 12 34 0e  5b 20 4f 50 54 20 50 41  |..*...4.[ OPT PA|
000026e0  53 53 0d 12 3e 04 0d 12  48 0f 41 44 52 20 20 4a  |SS..>...H.ADR  J|
000026f0  2c 79 72 6f 74 0d 12 52  11 4c 44 4d 49 41 20 4a  |,yrot..R.LDMIA J|
00002700  2c 7b 49 2c 4a 7d 0d 12  5c 0d 4d 55 4c 20 51 2c  |,{I,J}..\.MUL Q,|
00002710  49 2c 58 0d 12 66 0f 4d  4c 41 20 51 2c 4a 2c 5a  |I,X..f.MLA Q,J,Z|
00002720  2c 51 0d 12 70 0d 4d 55  4c 20 58 2c 4a 2c 58 0d  |,Q..p.MUL X,J,X.|
00002730  12 7a 0d 4d 55 4c 20 5a  2c 49 2c 5a 0d 12 84 0d  |.z.MUL Z,I,Z....|
00002740  53 55 42 20 5a 2c 5a 2c  58 0d 12 8e 12 4d 4f 56  |SUB Z,Z,X....MOV|
00002750  20 58 2c 51 2c 41 53 52  20 23 38 0d 12 98 12 4d  | X,Q,ASR #8....M|
00002760  4f 56 20 5a 2c 5a 2c 41  53 52 20 23 38 0d 12 a2  |OV Z,Z,ASR #8...|
00002770  04 0d 12 ac 14 4d 4f 56  20 49 2c 43 53 2c 4c 53  |.....MOV I,CS,LS|
00002780  4c 20 23 31 36 0d 12 b6  14 4d 4f 56 20 4a 2c 53  |L #16....MOV J,S|
00002790  4e 2c 4c 53 4c 20 23 31  36 0d 12 c0 13 4d 4f 56  |N,LSL #16....MOV|
000027a0  20 49 2c 49 2c 41 53 52  20 23 31 36 0d 12 ca 13  | I,I,ASR #16....|
000027b0  4d 4f 56 20 4a 2c 4a 2c  41 53 52 20 23 31 36 0d  |MOV J,J,ASR #16.|
000027c0  12 d4 0d 4d 55 4c 20 51  2c 49 2c 59 0d 12 de 0f  |...MUL Q,I,Y....|
000027d0  4d 4c 41 20 51 2c 4a 2c  5a 2c 51 0d 12 e8 0d 4d  |MLA Q,J,Z,Q....M|
000027e0  55 4c 20 59 2c 4a 2c 59  0d 12 f2 0d 4d 55 4c 20  |UL Y,J,Y....MUL |
000027f0  5a 2c 49 2c 5a 0d 12 fc  0d 53 55 42 20 5a 2c 5a  |Z,I,Z....SUB Z,Z|
00002800  2c 59 0d 13 06 12 4d 4f  56 20 59 2c 51 2c 41 53  |,Y....MOV Y,Q,AS|
00002810  52 20 23 38 0d 13 10 12  4d 4f 56 20 5a 2c 5a 2c  |R #8....MOV Z,Z,|
00002820  41 53 52 20 23 38 0d 13  1a 04 0d 13 24 14 4d 4f  |ASR #8......$.MO|
00002830  56 20 49 2c 43 53 2c 41  53 52 20 23 31 36 0d 13  |V I,CS,ASR #16..|
00002840  2e 14 4d 4f 56 20 4a 2c  53 4e 2c 41 53 52 20 23  |..MOV J,SN,ASR #|
00002850  31 36 0d 13 38 0d 4d 55  4c 20 51 2c 49 2c 58 0d  |16..8.MUL Q,I,X.|
00002860  13 42 0f 4d 4c 41 20 51  2c 4a 2c 59 2c 51 0d 13  |.B.MLA Q,J,Y,Q..|
00002870  4c 0d 4d 55 4c 20 58 2c  4a 2c 58 0d 13 56 0d 4d  |L.MUL X,J,X..V.M|
00002880  55 4c 20 59 2c 49 2c 59  0d 13 60 0d 53 55 42 20  |UL Y,I,Y..`.SUB |
00002890  59 2c 59 2c 58 0d 13 6a  12 4d 4f 56 20 58 2c 51  |Y,Y,X..j.MOV X,Q|
000028a0  2c 41 53 52 20 23 38 0d  13 74 12 4d 4f 56 20 59  |,ASR #8..t.MOV Y|
000028b0  2c 59 2c 41 53 52 20 23  38 0d 13 7e 04 0d 13 88  |,Y,ASR #8..~....|
000028c0  14 41 44 44 20 49 2c 5a  2c 23 33 30 30 2a 46 49  |.ADD I,Z,#300*FI|
000028d0  58 0d 13 92 0c 43 4d 50  20 49 2c 23 30 0d 13 9c  |X....CMP I,#0...|
000028e0  1a 4c 44 52 50 4c 20 5a  2c 5b 44 49 54 2c 49 2c  |.LDRPL Z,[DIT,I,|
000028f0  4c 53 4c 20 23 32 5d 0d  13 a6 0d 4d 55 4c 20 58  |LSL #2]....MUL X|
00002900  2c 5a 2c 58 0d 13 b0 0d  4d 55 4c 20 59 2c 5a 2c  |,Z,X....MUL Y,Z,|
00002910  59 0d 13 ba 13 4d 4f 56  20 58 2c 58 2c 41 53 52  |Y....MOV X,X,ASR|
00002920  20 23 31 35 0d 13 c4 13  4d 4f 56 20 59 2c 59 2c  | #15....MOV Y,Y,|
00002930  41 53 52 20 23 31 35 0d  13 ce 12 41 44 44 20 58  |ASR #15....ADD X|
00002940  2c 58 2c 23 31 36 30 2a  32 0d 13 d8 12 52 53 42  |,X,#160*2....RSB|
00002950  20 59 2c 59 2c 23 31 32  30 2a 32 0d 13 e2 34 53  | Y,Y,#120*2...4S|
00002960  54 4d 49 41 20 4e 2c 7b  58 2c 59 7d 20 20 20 3b  |TMIA N,{X,Y}   ;|
00002970  70 65 72 73 70 65 63 74  69 76 65 20 74 72 61 6e  |perspective tran|
00002980  73 66 6f 72 6d 65 64 20  28 78 2c 79 2c 7a 29 0d  |sformed (x,y,z).|
00002990  13 ec 04 0d 13 f6 20 43  4d 50 20 20 20 49 2c 23  |...... CMP   I,#|
000029a0  31 30 2a 46 49 58 20 20  20 3b 20 74 6f 20 63 6c  |10*FIX   ; to cl|
000029b0  6f 73 65 0d 14 00 11 3b  4d 4f 56 4c 54 20 54 2c  |ose....;MOVLT T,|
000029c0  23 31 30 31 0d 14 0a 15  42 4c 54 20 20 20 20 20  |#101....BLT     |
000029d0  20 20 74 6f 63 6c 6f 73  65 0d 14 14 04 0d 14 1e  |  toclose.......|
000029e0  23 43 4d 50 20 20 20 49  2c 23 48 4f 52 49 5a 4f  |#CMP   I,#HORIZO|
000029f0  4e 2a 46 49 58 20 20 3b  20 74 6f 6f 20 66 61 72  |N*FIX  ; too far|
00002a00  0d 14 28 17 42 47 45 20  20 20 20 20 20 20 6f 75  |..(.BGE       ou|
00002a10  74 73 63 72 65 65 6e 0d  14 32 04 0d 14 3c 27 43  |tscreen..2...<'C|
00002a20  4d 50 20 58 2c 23 36 34  30 20 20 20 20 20 20 3b  |MP X,#640      ;|
00002a30  20 6f 75 74 20 6c 65 66  74 20 6f 72 20 72 69 67  | out left or rig|
00002a40  68 74 0d 14 46 16 42 48  53 20 20 20 20 20 20 6f  |ht..F.BHS      o|
00002a50  75 74 73 63 72 65 65 6e  0d 14 50 04 0d 14 5a 24  |utscreen..P...Z$|
00002a60  43 4d 50 20 59 2c 23 34  38 30 20 20 20 20 20 20  |CMP Y,#480      |
00002a70  3b 20 6f 75 74 20 75 70  20 6f 72 20 64 6f 77 6e  |; out up or down|
00002a80  0d 14 64 17 42 48 53 20  20 20 20 20 20 20 6f 75  |..d.BHS       ou|
00002a90  74 73 63 72 65 65 6e 0d  14 6e 04 0d 14 78 0e 4d  |tscreen..n...x.M|
00002aa0  4f 56 20 54 2c 23 31 30  30 0d 14 82 3c 4d 4f 56  |OV T,#100...<MOV|
00002ab0  20 58 2c 4e 20 20 20 20  20 20 20 20 3b 20 70 6c  | X,N        ; pl|
00002ac0  61 63 65 20 77 68 65 72  65 20 74 72 61 6e 73 66  |ace where transf|
00002ad0  6f 72 6d 65 64 20 63 6f  6f 72 64 20 69 73 20 73  |ormed coord is s|
00002ae0  74 6f 72 65 64 0d 14 8c  34 4d 4f 56 20 59 2c 49  |tored...4MOV Y,I|
00002af0  20 20 20 20 20 20 20 20  3b 20 7a 2d 63 6f 6f 72  |        ; z-coor|
00002b00  64 20 75 73 65 64 20 66  6f 72 20 64 65 70 74 68  |d used for depth|
00002b10  20 62 69 6e 20 73 6f 72  74 0d 14 96 1b 4c 44 4d  | bin sort....LDM|
00002b20  46 44 20 31 33 21 2c 7b  49 2c 4a 2c 4e 2c 51 2c  |FD 13!,{I,J,N,Q,|
00002b30  50 43 7d 5e 0d 14 a0 04  0d 14 aa 0e 2e 6f 75 74  |PC}^.........out|
00002b40  73 63 72 65 65 6e 0d 14  b4 0e 4d 4f 56 20 54 2c  |screen....MOV T,|
00002b50  23 31 30 31 0d 14 be 3c  4d 4f 56 20 58 2c 4e 20  |#101...<MOV X,N |
00002b60  20 20 20 20 20 20 20 3b  20 70 6c 61 63 65 20 77  |       ; place w|
00002b70  68 65 72 65 20 74 72 61  6e 73 66 6f 72 6d 65 64  |here transformed|
00002b80  20 63 6f 6f 72 64 20 69  73 20 73 74 6f 72 65 64  | coord is stored|
00002b90  0d 14 c8 34 4d 4f 56 20  59 2c 49 20 20 20 20 20  |...4MOV Y,I     |
00002ba0  20 20 20 3b 20 7a 2d 63  6f 6f 72 64 20 75 73 65  |   ; z-coord use|
00002bb0  64 20 66 6f 72 20 64 65  70 74 68 20 62 69 6e 20  |d for depth bin |
00002bc0  73 6f 72 74 0d 14 d2 1b  4c 44 4d 46 44 20 31 33  |sort....LDMFD 13|
00002bd0  21 2c 7b 49 2c 4a 2c 4e  2c 51 2c 50 43 7d 5e 0d  |!,{I,J,N,Q,PC}^.|
00002be0  14 dc 04 0d 14 e6 0c 2e  74 6f 63 6c 6f 73 65 0d  |........toclose.|
00002bf0  14 f0 0e 4d 4f 56 20 54  2c 23 31 30 34 0d 14 fa  |...MOV T,#104...|
00002c00  3c 4d 4f 56 20 58 2c 4e  20 20 20 20 20 20 20 20  |<MOV X,N        |
00002c10  3b 20 70 6c 61 63 65 20  77 68 65 72 65 20 74 72  |; place where tr|
00002c20  61 6e 73 66 6f 72 6d 65  64 20 63 6f 6f 72 64 20  |ansformed coord |
00002c30  69 73 20 73 74 6f 72 65  64 0d 15 04 34 4d 4f 56  |is stored...4MOV|
00002c40  20 59 2c 49 20 20 20 20  20 20 20 20 3b 20 7a 2d  | Y,I        ; z-|
00002c50  63 6f 6f 72 64 20 75 73  65 64 20 66 6f 72 20 64  |coord used for d|
00002c60  65 70 74 68 20 62 69 6e  20 73 6f 72 74 0d 15 0e  |epth bin sort...|
00002c70  1b 4c 44 4d 46 44 20 31  33 21 2c 7b 49 2c 4a 2c  |.LDMFD 13!,{I,J,|
00002c80  4e 2c 51 2c 50 43 7d 5e  0d 15 18 04 0d 15 22 04  |N,Q,PC}^......".|
00002c90  0d 15 2c 04 0d 15 36 0c  3b 20 51 2a 2c 20 48 2a  |..,...6.; Q*, H*|
00002ca0  0d 15 40 08 2e 72 65 63  0d 15 4a 22 3b 20 54 3d  |..@..rec..J"; T=|
00002cb0  31 30 31 20 3d 3e 20 70  6f 69 6e 74 20 6f 75 74  |101 => point out|
00002cc0  20 6f 66 20 73 63 72 65  65 6e 0d 15 54 12 53 54  | of screen..T.ST|
00002cd0  4d 46 44 20 31 33 21 2c  7b 31 34 7d 0d 15 5e 0a  |MFD 13!,{14}..^.|
00002ce0  3b 53 57 49 20 34 0d 15  68 04 0d 15 72 0e 4d 4f  |;SWI 4..h...r.MO|
00002cf0  56 20 51 2c 23 31 30 30  0d 15 7c 18 41 44 44 20  |V Q,#100..|.ADD |
00002d00  48 2c 48 2c 23 36 34 30  2d 32 2a 36 34 2d 33 32  |H,H,#640-2*64-32|
00002d10  0d 15 86 04 0d 15 90 0e  41 44 44 20 49 2c 49 2c  |........ADD I,I,|
00002d20  23 31 0d 15 9a 1a 4c 44  52 42 20 54 2c 5b 48 2c  |#1....LDRB T,[H,|
00002d30  23 31 5d 3a 43 4d 50 20  54 2c 23 30 0d 15 a4 13  |#1]:CMP T,#0....|
00002d40  42 4c 45 51 20 63 68 65  63 6b 70 6f 69 6e 74 0d  |BLEQ checkpoint.|
00002d50  15 ae 13 53 54 52 45 51  42 20 54 2c 5b 48 2c 23  |...STREQB T,[H,#|
00002d60  31 5d 0d 15 b8 0e 43 4d  50 20 54 2c 23 31 30 31  |1]....CMP T,#101|
00002d70  0d 15 c2 0d 41 44 44 20  51 2c 51 2c 54 0d 15 cc  |....ADD Q,Q,T...|
00002d80  04 0d 15 d6 0e 41 44 44  20 4a 2c 4a 2c 23 31 0d  |.....ADD J,J,#1.|
00002d90  15 e0 1c 4c 44 52 42 20  54 2c 5b 48 2c 23 36 34  |...LDRB T,[H,#64|
00002da0  31 5d 3a 43 4d 50 20 54  2c 23 30 0d 15 ea 13 42  |1]:CMP T,#0....B|
00002db0  4c 45 51 20 63 68 65 63  6b 70 6f 69 6e 74 0d 15  |LEQ checkpoint..|
00002dc0  f4 15 53 54 52 45 51 42  20 54 2c 5b 48 2c 23 36  |..STREQB T,[H,#6|
00002dd0  34 31 5d 0d 15 fe 0e 43  4d 50 20 54 2c 23 31 30  |41]....CMP T,#10|
00002de0  31 0d 16 08 0d 41 44 44  20 51 2c 51 2c 54 0d 16  |1....ADD Q,Q,T..|
00002df0  12 04 0d 16 1c 0e 53 55  42 20 49 2c 49 2c 23 31  |......SUB I,I,#1|
00002e00  0d 16 26 1c 4c 44 52 42  20 54 2c 5b 48 2c 23 36  |..&.LDRB T,[H,#6|
00002e10  34 30 5d 3a 43 4d 50 20  54 2c 23 30 0d 16 30 13  |40]:CMP T,#0..0.|
00002e20  42 4c 45 51 20 63 68 65  63 6b 70 6f 69 6e 74 0d  |BLEQ checkpoint.|
00002e30  16 3a 15 53 54 52 45 51  42 20 54 2c 5b 48 2c 23  |.:.STREQB T,[H,#|
00002e40  36 34 30 5d 0d 16 44 0e  43 4d 50 20 54 2c 23 31  |640]..D.CMP T,#1|
00002e50  30 31 0d 16 4e 0d 41 44  44 20 51 2c 51 2c 54 0d  |01..N.ADD Q,Q,T.|
00002e60  16 58 04 0d 16 62 0e 53  55 42 20 4a 2c 4a 2c 23  |.X...b.SUB J,J,#|
00002e70  31 0d 16 6c 13 42 4c 20  20 20 63 68 65 63 6b 70  |1..l.BL   checkp|
00002e80  6f 69 6e 74 0d 16 76 0e  53 54 52 42 20 54 2c 5b  |oint..v.STRB T,[|
00002e90  48 5d 0d 16 80 0e 43 4d  50 20 54 2c 23 31 30 31  |H]....CMP T,#101|
00002ea0  0d 16 8a 36 41 44 44 20  51 2c 51 2c 54 20 3b 66  |...6ADD Q,Q,T ;f|
00002eb0  6c 61 67 20 6f 6e 20 69  66 20 62 65 79 6f 6e 64  |lag on if beyond|
00002ec0  20 68 6f 72 69 7a 6f 6e  20 6f 72 20 6f 66 66 20  | horizon or off |
00002ed0  73 63 72 65 65 6e 0d 16  94 04 0d 16 9e 11 4c 44  |screen........LD|
00002ee0  52 42 20 54 2c 5b 58 2c  23 38 5d 0d 16 a8 1f 53  |RB T,[X,#8]....S|
00002ef0  54 52 42 20 54 2c 5b 48  2c 23 2d 28 36 34 30 2d  |TRB T,[H,#-(640-|
00002f00  32 2a 36 34 2d 33 32 29  5d 21 0d 16 b2 04 0d 16  |2*64-32)]!......|
00002f10  bc 04 0d 16 c6 3f 43 4d  50 20 51 2c 23 35 30 34  |.....?CMP Q,#504|
00002f20  20 20 20 20 20 20 20 20  20 3b 20 61 6c 6c 20 66  |         ; all f|
00002f30  6f 75 72 20 70 6f 69 6e  74 73 20 6f 66 20 70 61  |our points of pa|
00002f40  74 63 68 20 6f 75 74 20  6f 66 20 73 63 72 65 65  |tch out of scree|
00002f50  6e 0d 16 d0 2b 4c 44 4d  48 53 46 44 20 31 33 21  |n...+LDMHSFD 13!|
00002f60  2c 7b 50 43 7d 20 20 20  3b 20 73 6f 20 72 65 6a  |,{PC}   ; so rej|
00002f70  65 63 74 20 74 68 69 73  20 6f 6e 65 0d 16 da 04  |ect this one....|
00002f80  0d 16 e4 15 53 54 4d 46  44 20 31 33 21 2c 7b 49  |....STMFD 13!,{I|
00002f90  2c 4a 2c 48 7d 0d 16 ee  04 0d 16 f8 28 4d 4f 56  |,J,H}.......(MOV|
00002fa0  53 20 20 59 2c 59 2c 41  53 52 20 23 46 58 2b 33  |S  Y,Y,ASR #FX+3|
00002fb0  20 3b 20 64 65 70 74 68  20 6f 66 20 70 61 74 63  | ; depth of patc|
00002fc0  68 0d 17 02 0e 4d 4f 56  4d 49 20 59 2c 23 30 0d  |h....MOVMI Y,#0.|
00002fd0  17 0c 14 43 4d 50 20 59  2c 23 48 4f 52 49 5a 4f  |...CMP Y,#HORIZO|
00002fe0  4e 2f 38 0d 17 16 16 4d  4f 56 48 53 20 59 2c 23  |N/8....MOVHS Y,#|
00002ff0  48 4f 52 49 5a 4f 4e 2f  38 0d 17 20 10 53 55 42  |HORIZON/8.. .SUB|
00003000  48 53 20 59 2c 59 2c 23  31 0d 17 2a 04 0d 17 34  |HS Y,Y,#1..*...4|
00003010  0f 4c 44 52 20 4e 2c 56  4c 54 41 42 0d 17 3e 36  |.LDR N,VLTAB..>6|
00003020  4c 44 52 20 59 2c 5b 4e  2c 59 2c 4c 53 4c 20 23  |LDR Y,[N,Y,LSL #|
00003030  32 5d 21 20 20 20 20 20  20 3b 20 6c 6f 61 64 20  |2]!      ; load |
00003040  64 65 70 74 68 20 6c 69  6e 6b 20 70 6f 69 6e 74  |depth link point|
00003050  65 72 0d 17 48 0f 4c 44  52 20 54 2c 46 52 45 45  |er..H.LDR T,FREE|
00003060  44 0d 17 52 3c 53 54 52  20 54 2c 5b 4e 5d 20 20  |D..R<STR T,[N]  |
00003070  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00003080  72 65 70 6c 61 63 65 20  77 69 74 68 20 6e 65 77  |replace with new|
00003090  20 6c 69 6e 6b 20 70 6f  69 6e 74 65 72 0d 17 5c  | link pointer..\|
000030a0  0f 3b 43 4d 50 20 51 2c  23 31 30 30 0d 17 66 42  |.;CMP Q,#100..fB|
000030b0  53 54 4d 49 41 20 28 54  29 21 2c 7b 58 2c 59 7d  |STMIA (T)!,{X,Y}|
000030c0  20 20 3b 20 69 6e 73 65  72 74 20 6e 65 77 20 70  |  ; insert new p|
000030d0  61 74 63 68 20 6e 6f 64  65 20 69 6e 20 64 65 70  |atch node in dep|
000030e0  74 68 20 6c 69 6e 6b 65  64 20 6c 69 73 74 0d 17  |th linked list..|
000030f0  70 0f 53 54 52 20 54 2c  46 52 45 45 44 0d 17 7a  |p.STR T,FREED..z|
00003100  04 0d 17 84 0e 53 55 42  20 4a 2c 4a 2c 23 31 0d  |.....SUB J,J,#1.|
00003110  17 8e 15 4c 44 52 42 20  51 2c 5b 48 2c 23 2d 36  |...LDRB Q,[H,#-6|
00003120  34 30 5d 21 0d 17 98 0c  43 4d 50 20 51 2c 23 30  |40]!....CMP Q,#0|
00003130  0d 17 a2 0c 42 4c 45 51  20 72 65 63 0d 17 ac 14  |....BLEQ rec....|
00003140  4c 44 4d 46 44 20 31 33  2c 7b 49 2c 4a 2c 48 7d  |LDMFD 13,{I,J,H}|
00003150  0d 17 b6 0e 53 55 42 20  49 2c 49 2c 23 31 0d 17  |....SUB I,I,#1..|
00003160  c0 13 4c 44 52 42 20 51  2c 5b 48 2c 23 2d 31 5d  |..LDRB Q,[H,#-1]|
00003170  21 0d 17 ca 0c 43 4d 50  20 51 2c 23 30 0d 17 d4  |!....CMP Q,#0...|
00003180  0c 42 4c 45 51 20 72 65  63 0d 17 de 14 4c 44 4d  |.BLEQ rec....LDM|
00003190  46 44 20 31 33 2c 7b 49  2c 4a 2c 48 7d 0d 17 e8  |FD 13,{I,J,H}...|
000031a0  0e 41 44 44 20 49 2c 49  2c 23 31 0d 17 f2 12 4c  |.ADD I,I,#1....L|
000031b0  44 52 42 20 51 2c 5b 48  2c 23 31 5d 21 0d 17 fc  |DRB Q,[H,#1]!...|
000031c0  0c 43 4d 50 20 51 2c 23  30 0d 18 06 0c 42 4c 45  |.CMP Q,#0....BLE|
000031d0  51 20 72 65 63 0d 18 10  15 4c 44 4d 46 44 20 31  |Q rec....LDMFD 1|
000031e0  33 21 2c 7b 49 2c 4a 2c  48 7d 0d 18 1a 0e 41 44  |3!,{I,J,H}....AD|
000031f0  44 20 4a 2c 4a 2c 23 31  0d 18 24 14 4c 44 52 42  |D J,J,#1..$.LDRB|
00003200  20 51 2c 5b 48 2c 23 36  34 30 5d 21 0d 18 2e 0c  | Q,[H,#640]!....|
00003210  43 4d 50 20 51 2c 23 30  0d 18 38 0c 42 4c 45 51  |CMP Q,#0..8.BLEQ|
00003220  20 72 65 63 0d 18 42 12  4c 44 4d 46 44 20 31 33  | rec..B.LDMFD 13|
00003230  21 2c 7b 50 43 7d 0d 18  4c 04 0d 18 56 04 0d 18  |!,{PC}..L...V...|
00003240  60 08 2e 74 65 6b 0d 18  6a 12 53 54 4d 46 44 20  |`..tek..j.STMFD |
00003250  31 33 21 2c 7b 31 34 7d  0d 18 74 04 0d 18 7e 10  |13!,{14}..t...~.|
00003260  41 44 52 20 54 41 42 2c  76 6c 61 6b 0d 18 88 0d  |ADR TAB,vlak....|
00003270  4d 4f 56 20 4e 52 2c 23  34 0d 18 92 11 4c 44 52  |MOV NR,#4....LDR|
00003280  20 44 49 54 2c 50 55 54  41 42 0d 18 9c 12 41 44  | DIT,PUTAB....AD|
00003290  44 20 44 49 54 2c 44 49  54 2c 23 34 0d 18 a6 0d  |D DIT,DIT,#4....|
000032a0  4d 4f 56 20 4e 52 2c 23  34 0d 18 b0 10 41 44 52  |MOV NR,#4....ADR|
000032b0  20 54 41 42 2c 76 6c 61  6b 0d 18 ba 15 4d 4f 56  | TAB,vlak....MOV|
000032c0  20 43 53 2c 23 48 4f 52  49 5a 4f 4e 2f 38 0d 18  | CS,#HORIZON/8..|
000032d0  c4 0f 4c 44 52 20 48 2c  56 4c 54 41 42 0d 18 ce  |..LDR H,VLTAB...|
000032e0  36 41 44 44 20 48 2c 48  2c 43 53 2c 4c 53 4c 20  |6ADD H,H,CS,LSL |
000032f0  23 32 20 20 20 20 20 20  3b 20 70 75 74 20 61 74  |#2      ; put at|
00003300  20 62 69 6e 20 77 69 74  68 20 68 69 67 68 65 73  | bin with highes|
00003310  74 20 7a 0d 18 d8 0d 2e  6e 65 78 74 5f 62 69 6e  |t z.....next_bin|
00003320  0d 18 e2 12 4c 44 52 20  59 2c 5b 48 2c 23 2d 34  |....LDR Y,[H,#-4|
00003330  5d 21 0d 18 ec 0e 43 4d  50 20 20 20 59 2c 23 30  |]!....CMP   Y,#0|
00003340  0d 18 f6 0f 42 45 51 20  65 6e 64 5f 62 69 6e 0d  |....BEQ end_bin.|
00003350  19 00 12 4c 44 4d 49 41  20 59 2c 7b 50 30 2c 59  |...LDMIA Y,{P0,Y|
00003360  7d 0d 19 0a 0d 2e 64 72  61 77 5f 62 69 6e 0d 19  |}.....draw_bin..|
00003370  14 10 53 55 42 20 58 2c  50 30 2c 44 49 54 0d 19  |..SUB X,P0,DIT..|
00003380  1e 1a 4d 4f 56 20 58 2c  58 2c 4c 53 4c 20 23 33  |..MOV X,X,LSL #3|
00003390  32 2d 32 2a 53 48 2d 34  0d 19 28 25 41 44 44 20  |2-2*SH-4..(%ADD |
000033a0  54 2c 58 2c 23 31 20 3c  3c 20 28 33 32 2d 53 48  |T,X,#1 << (32-SH|
000033b0  29 20 20 20 20 20 20 3b  20 6a 2b 3d 31 0d 19 32  |)      ; j+=1..2|
000033c0  1f 41 44 44 20 50 31 2c  44 49 54 2c 54 2c 4c 53  |.ADD P1,DIT,T,LS|
000033d0  52 20 23 33 32 2d 32 2a  53 48 2d 34 0d 19 3c 16  |R #32-2*SH-4..<.|
000033e0  4d 4f 56 20 54 2c 54 2c  52 4f 52 20 23 33 32 2d  |MOV T,T,ROR #32-|
000033f0  53 48 0d 19 46 25 41 44  44 20 54 2c 54 2c 23 31  |SH..F%ADD T,T,#1|
00003400  20 3c 3c 20 28 33 32 2d  53 48 29 20 20 20 20 20  | << (32-SH)     |
00003410  20 3b 20 69 2b 3d 31 0d  19 50 1d 41 44 44 20 50  | ; i+=1..P.ADD P|
00003420  32 2c 44 49 54 2c 54 2c  52 4f 52 20 23 33 32 2d  |2,DIT,T,ROR #32-|
00003430  53 48 2d 34 0d 19 5a 13  4d 4f 56 20 54 2c 54 2c  |SH-4..Z.MOV T,T,|
00003440  52 4f 52 20 23 53 48 0d  19 64 25 53 55 42 20 54  |ROR #SH..d%SUB T|
00003450  2c 54 2c 23 31 20 3c 3c  20 28 33 32 2d 53 48 29  |,T,#1 << (32-SH)|
00003460  20 20 20 20 20 20 3b 20  6a 2d 3d 31 0d 19 6e 1f  |      ; j-=1..n.|
00003470  41 44 44 20 50 33 2c 44  49 54 2c 54 2c 52 4f 52  |ADD P3,DIT,T,ROR|
00003480  20 23 33 32 2d 32 2a 53  48 2d 34 0d 19 78 04 0d  | #32-2*SH-4..x..|
00003490  19 82 14 53 55 42 53 20  58 2c 43 53 2c 23 31 30  |...SUBS X,CS,#10|
000034a0  30 2f 38 0d 19 8c 0e 4d  4f 56 4d 49 20 58 2c 23  |0/8....MOVMI X,#|
000034b0  30 0d 19 96 3d 4d 4f 56  20 58 2c 58 2c 4c 53 52  |0...=MOV X,X,LSR|
000034c0  20 23 37 2d 33 20 20 20  20 20 20 20 20 20 20 20  | #7-3           |
000034d0  20 20 3b 20 64 65 70 74  68 20 71 75 65 75 65 20  |  ; depth queue |
000034e0  63 6f 6c 6f 72 20 6f 66  20 70 61 74 63 68 0d 19  |color of patch..|
000034f0  a0 11 4c 44 52 20 54 2c  5b 50 30 2c 23 38 5d 0d  |..LDR T,[P0,#8].|
00003500  19 aa 0d 84 52 20 54 2c  54 2c 23 33 0d 19 b4 0c  |....R T,T,#3....|
00003510  82 20 50 34 2c 54 2c 58  0d 19 be 18 53 54 4d 49  |. P4,T,X....STMI|
00003520  41 20 54 41 42 2c 7b 50  30 2c 50 31 2c 50 32 7d  |A TAB,{P0,P1,P2}|
00003530  0d 19 c8 10 42 4c 20 70  6f 6c 79 5f 66 69 6c 6c  |....BL poly_fill|
00003540  0d 19 d2 18 53 54 4d 49  41 20 54 41 42 2c 7b 50  |....STMIA TAB,{P|
00003550  30 2c 50 32 2c 50 33 7d  0d 19 dc 10 42 4c 20 70  |0,P2,P3}....BL p|
00003560  6f 6c 79 5f 66 69 6c 6c  0d 19 e6 0e 43 4d 50 20  |oly_fill....CMP |
00003570  20 20 59 2c 23 30 0d 19  f0 14 4c 44 4d 4e 45 49  |  Y,#0....LDMNEI|
00003580  41 20 59 2c 7b 50 30 2c  59 7d 0d 19 fa 10 42 4e  |A Y,{P0,Y}....BN|
00003590  45 20 64 72 61 77 5f 62  69 6e 0d 1a 04 0c 2e 65  |E draw_bin.....e|
000035a0  6e 64 5f 62 69 6e 0d 1a  0e 11 53 55 42 53 20 43  |nd_bin....SUBS C|
000035b0  53 2c 43 53 2c 23 31 0d  1a 18 10 42 4e 45 20 6e  |S,CS,#1....BNE n|
000035c0  65 78 74 5f 62 69 6e 0d  1a 22 12 4c 44 4d 46 44  |ext_bin..".LDMFD|
000035d0  20 31 33 21 2c 7b 50 43  7d 0d 1a 2c 04 0d 1a 36  | 13!,{PC}..,...6|
000035e0  04 0d 1a 40 09 2e 76 6c  61 6b 0d 1a 4a 26 45 51  |...@..vlak..J&EQ|
000035f0  55 44 20 30 3a 45 51 55  44 20 30 3a 45 51 55 44  |UD 0:EQUD 0:EQUD|
00003600  20 30 3a 45 51 55 44 20  30 3a 45 51 55 44 20 30  | 0:EQUD 0:EQUD 0|
00003610  0d 1a 54 05 5d 0d 1a 5e  05 ed 0d 1a 68 09 51 25  |..T.]..^....h.Q%|
00003620  3d 50 25 0d 1a 72 05 e1  0d 1a 7c 04 0d 1a 86 04  |=P%..r....|.....|
00003630  0d 1a 90 12 dd 20 f2 63  61 6c 63 5f 69 6e 76 65  |..... .calc_inve|
00003640  72 73 0d 1a 9a 15 de 20  49 4e 56 45 52 53 20 34  |rs..... INVERS 4|
00003650  30 39 34 2a 34 2a 34 0d  1a a4 0d 21 49 4e 56 45  |094*4*4....!INVE|
00003660  52 53 3d 31 0d 1a ae 0b  4b 3d 31 3c 3c 32 31 0d  |RS=1....K=1<<21.|
00003670  1a b8 2d e3 20 49 3d 31  20 b8 20 34 2a 34 30 39  |..-. I=1 . 4*409|
00003680  34 2d 31 3a 49 4e 56 45  52 53 21 28 34 2a 49 29  |4-1:INVERS!(4*I)|
00003690  3d 4b 2f 28 49 2b 30 2e  35 29 3a ed 0d 1a c2 05  |=K/(I+0.5):.....|
000036a0  e1 0d 1a cc 04 0d 1a d6  04 0d 1a e0 0e dd 20 f2  |.............. .|
000036b0  67 6f 75 72 61 75 64 0d  1a ea 16 ea 20 53 46 2c  |gouraud..... SF,|
000036c0  46 49 58 2c 53 4d 2c 46  50 2c 49 2c 47 0d 1a f4  |FIX,SM,FP,I,G...|
000036d0  1b ea 20 44 58 44 2c 44  59 44 2c 54 58 44 2c 54  |.. DXD,DYD,TXD,T|
000036e0  59 44 2c 58 44 2c 59 44  0d 1a fe 04 0d 1b 08 04  |YD,XD,YD........|
000036f0  0d 1b 12 10 f2 63 61 6c  63 5f 69 6e 76 65 72 73  |.....calc_invers|
00003700  0d 1b 1c 04 0d 1b 26 12  53 46 3d 31 32 3a 46 49  |......&.SF=12:FI|
00003710  58 3d 32 5e 53 46 0d 1b  30 09 53 4d 3d 31 30 0d  |X=2^SF..0.SM=10.|
00003720  1b 3a 0c 46 50 3d 53 46  2b 53 4d 0d 1b 44 04 0d  |.:.FP=SF+SM..D..|
00003730  1b 4e 41 48 3d 30 3a 43  31 3d 31 3a 4c 3d 32 3a  |.NAH=0:C1=1:L=2:|
00003740  52 3d 33 3a 43 54 3d 34  3a 49 3d 35 3a 58 4c 3d  |R=3:CT=4:I=5:XL=|
00003750  36 3a 58 52 3d 37 3a 43  32 3d 38 3a 54 3d 39 3a  |6:XR=7:C2=8:T=9:|
00003760  4f 3d 31 30 3a 4c 41 3d  31 31 3a 52 41 3d 31 32  |O=10:LA=11:RA=12|
00003770  0d 1b 58 04 0d 1b 62 21  58 31 3d 30 3a 59 31 3d  |..X...b!X1=0:Y1=|
00003780  31 3a 58 32 3d 32 3a 59  32 3d 33 3a 58 33 3d 34  |1:X2=2:Y2=3:X3=4|
00003790  3a 59 33 3d 35 0d 1b 6c  12 49 31 3d 36 3a 49 32  |:Y3=5..l.I1=6:I2|
000037a0  3d 37 3a 49 33 3d 38 0d  1b 76 1e 53 43 52 45 45  |=7:I3=8..v.SCREE|
000037b0  4e 3d 31 32 3a 42 49 54  4d 41 50 3d 31 33 3a 54  |N=12:BITMAP=13:T|
000037c0  6d 70 3d 31 34 0d 1b 80  04 0d 1b 8a 24 41 3d 30  |mp=14.......$A=0|
000037d0  3a 42 3d 31 3a 43 3d 39  3a 44 3d 31 30 3a 54 6d  |:B=1:C=9:D=10:Tm|
000037e0  70 32 3d 31 32 3a 48 65  6c 70 3d 31 33 0d 1b 94  |p2=12:Help=13...|
000037f0  04 0d 1b 9e 0e de 20 51  25 20 32 30 30 30 30 0d  |...... Q% 20000.|
00003800  1b a8 14 e3 20 50 41 53  53 3d 30 20 b8 20 32 20  |.... PASS=0 . 2 |
00003810  88 20 32 0d 1b b2 09 50  25 3d 51 25 0d 1b bc 0d  |. 2....P%=Q%....|
00003820  5b 4f 50 54 20 50 41 53  53 0d 1b c6 04 0d 1b d0  |[OPT PASS.......|
00003830  0a 2e 63 6c 65 61 72 0d  1b da 2b 4d 4f 56 20 52  |..clear...+MOV R|
00003840  30 2c 23 30 3a 4d 4f 56  20 52 31 2c 23 30 3a 4d  |0,#0:MOV R1,#0:M|
00003850  4f 56 20 52 32 2c 23 30  3a 4d 4f 56 20 52 33 2c  |OV R2,#0:MOV R3,|
00003860  23 30 0d 1b e4 2b 4d 4f  56 20 52 34 2c 23 30 3a  |#0...+MOV R4,#0:|
00003870  4d 4f 56 20 52 35 2c 23  30 3a 4d 4f 56 20 52 36  |MOV R5,#0:MOV R6|
00003880  2c 23 30 3a 4d 4f 56 20  52 37 2c 23 30 0d 1b ee  |,#0:MOV R7,#0...|
00003890  17 4d 4f 56 20 52 38 2c  23 30 3a 4d 4f 56 20 52  |.MOV R8,#0:MOV R|
000038a0  39 2c 23 30 0d 1b f8 24  4c 44 52 20 52 31 30 2c  |9,#0...$LDR R10,|
000038b0  53 43 52 45 45 4e 32 3a  4d 4f 56 20 52 31 31 2c  |SCREEN2:MOV R11,|
000038c0  23 36 34 30 2a 34 38 30  0d 1c 02 0a 2e 63 6c 6f  |#640*480.....clo|
000038d0  6f 70 0d 1c 0c 16 53 54  4d 49 41 20 52 31 30 21  |op....STMIA R10!|
000038e0  2c 7b 52 30 2d 52 39 7d  0d 1c 16 16 53 54 4d 49  |,{R0-R9}....STMI|
000038f0  41 20 52 31 30 21 2c 7b  52 30 2d 52 39 7d 0d 1c  |A R10!,{R0-R9}..|
00003900  20 16 53 54 4d 49 41 20  52 31 30 21 2c 7b 52 30  | .STMIA R10!,{R0|
00003910  2d 52 39 7d 0d 1c 2a 16  53 54 4d 49 41 20 52 31  |-R9}..*.STMIA R1|
00003920  30 21 2c 7b 52 30 2d 52  39 7d 0d 1c 34 18 53 55  |0!,{R0-R9}..4.SU|
00003930  42 53 20 52 31 31 2c 52  31 31 2c 23 34 2a 31 30  |BS R11,R11,#4*10|
00003940  2a 34 0d 1c 3e 0d 42 4e  45 20 63 6c 6f 6f 70 0d  |*4..>.BNE cloop.|
00003950  1c 48 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 1c 52  |.H.MOV PC,R14..R|
00003960  04 0d 1c 5c 1d 2e 53 43  52 45 45 4e 31 20 45 51  |...\..SCREEN1 EQ|
00003970  55 44 20 31 34 38 3a 45  51 55 44 20 2d 31 0d 1c  |UD 148:EQUD -1..|
00003980  66 13 2e 53 43 52 45 45  4e 32 20 45 51 55 44 20  |f..SCREEN2 EQUD |
00003990  30 0d 1c 70 12 2e 53 43  52 45 45 4e 33 20 44 43  |0..p..SCREEN3 DC|
000039a0  44 20 30 0d 1c 7a 08 2e  73 65 74 0d 1c 84 12 41  |D 0..z..set....A|
000039b0  44 52 20 52 30 2c 53 43  52 45 45 4e 31 0d 1c 8e  |DR R0,SCREEN1...|
000039c0  12 41 44 52 20 52 31 2c  53 43 52 45 45 4e 32 0d  |.ADR R1,SCREEN2.|
000039d0  1c 98 1d 53 57 49 20 22  4f 53 5f 52 65 61 64 56  |...SWI "OS_ReadV|
000039e0  64 75 56 61 72 69 61 62  6c 65 73 22 0d 1c a2 0d  |duVariables"....|
000039f0  4d 4f 56 20 31 35 2c 31  34 0d 1c ac 04 0d 1c b6  |MOV 15,14.......|
00003a00  13 2e 6d 6f 64 65 20 20  20 20 20 44 43 44 20 31  |..mode     DCD 1|
00003a10  0d 1c c0 15 20 20 20 20  20 20 20 20 20 20 44 43  |....          DC|
00003a20  44 20 36 34 30 0d 1c ca  15 20 20 20 20 20 20 20  |D 640....       |
00003a30  20 20 20 44 43 44 20 34  38 30 0d 1c d4 13 20 20  |   DCD 480....  |
00003a40  20 20 20 20 20 20 20 20  44 43 44 20 33 0d 1c de  |        DCD 3...|
00003a50  14 20 20 20 20 20 20 20  20 20 20 44 43 44 20 2d  |.          DCD -|
00003a60  31 0d 1c e8 1b 20 20 20  20 20 20 20 20 20 20 44  |1....          D|
00003a70  43 44 20 30 3a 44 43 44  20 31 32 38 0d 1c f2 1b  |CD 0:DCD 128....|
00003a80  20 20 20 20 20 20 20 20  20 20 44 43 44 20 33 3a  |          DCD 3:|
00003a90  44 43 44 20 32 35 35 0d  1c fc 14 20 20 20 20 20  |DCD 255....     |
00003aa0  20 20 20 20 20 44 43 44  20 2d 31 0d 1d 06 0d 2e  |     DCD -1.....|
00003ab0  73 65 74 5f 6d 6f 64 65  0d 1d 10 0d 4d 4f 56 20  |set_mode....MOV |
00003ac0  52 30 2c 23 30 0d 1d 1a  0f 41 44 52 20 52 31 2c  |R0,#0....ADR R1,|
00003ad0  6d 6f 64 65 0d 1d 24 17  53 57 49 20 22 4f 53 5f  |mode..$.SWI "OS_|
00003ae0  53 63 72 65 65 6e 4d 6f  64 65 22 0d 1d 2e 1a 53  |ScreenMode"....S|
00003af0  57 49 20 22 4f 53 5f 52  65 6d 6f 76 65 43 75 72  |WI "OS_RemoveCur|
00003b00  73 6f 72 73 22 0d 1d 38  0e 4d 4f 56 20 70 63 2c  |sors"..8.MOV pc,|
00003b10  72 31 34 0d 1d 42 04 0d  1d 4c 0b a4 70 72 65 64  |r14..B...L..pred|
00003b20  65 66 0d 1d 56 0e 2e 70  6f 6c 79 5f 66 69 6c 6c  |ef..V..poly_fill|
00003b30  0d 1d 60 0c a4 70 72 65  63 61 6c 63 0d 1d 6a 0a  |..`..precalc..j.|
00003b40  a4 70 69 65 63 65 0d 1d  74 05 5d 0d 1d 7e 05 ed  |.piece..t.]..~..|
00003b50  0d 1d 88 09 51 25 3d 50  25 0d 1d 92 05 e1 0d 1d  |....Q%=P%.......|
00003b60  9c 04 0d 1d a6 04 0d 1d  b0 04 0d 1d ba 04 0d 1d  |................|
00003b70  c4 17 dd 20 a4 61 64 72  28 72 65 67 2c 61 64 64  |... .adr(reg,add|
00003b80  72 65 73 73 29 0d 1d ce  17 6f 66 66 73 65 74 3d  |ress)....offset=|
00003b90  61 64 64 72 65 73 73 2d  50 25 2d 38 0d 1d d8 10  |address-P%-8....|
00003ba0  e7 20 6f 66 66 73 65 74  3e 30 20 8c 0d 1d e2 1a  |. offset>0 .....|
00003bb0  6f 66 66 73 65 74 31 3d  6f 66 66 73 65 74 20 80  |offset1=offset .|
00003bc0  20 32 35 35 2a 34 0d 1d  ec 1e 6f 66 66 73 65 74  | 255*4....offset|
00003bd0  32 3d 6f 66 66 73 65 74  20 80 20 32 35 35 2a 32  |2=offset . 255*2|
00003be0  35 36 2a 34 0d 1d f6 22  6f 66 66 73 65 74 33 3d  |56*4..."offset3=|
00003bf0  6f 66 66 73 65 74 20 80  20 32 35 35 2a 32 35 36  |offset . 255*256|
00003c00  2a 32 35 36 2a 34 0d 1e  00 39 20 20 20 20 20 20  |*256*4...9      |
00003c10  20 20 20 20 20 20 20 20  20 5b 4f 50 54 20 50 41  |         [OPT PA|
00003c20  53 53 3a 41 44 44 20 20  20 20 20 20 20 72 65 67  |SS:ADD       reg|
00003c30  2c 20 31 35 2c 23 6f 66  66 73 65 74 31 3a 5d 0d  |, 15,#offset1:].|
00003c40  1e 0a 38 e7 20 6f 66 66  73 65 74 32 3c 3e 30 20  |..8. offset2<>0 |
00003c50  20 5b 4f 50 54 20 50 41  53 53 3a 41 44 44 20 20  | [OPT PASS:ADD  |
00003c60  20 20 20 20 20 72 65 67  2c 72 65 67 2c 23 6f 66  |     reg,reg,#of|
00003c70  66 73 65 74 32 3a 5d 0d  1e 14 38 e7 20 6f 66 66  |fset2:]...8. off|
00003c80  73 65 74 33 3c 3e 30 20  20 5b 4f 50 54 20 50 41  |set3<>0  [OPT PA|
00003c90  53 53 3a 41 44 44 20 20  20 20 20 20 20 72 65 67  |SS:ADD       reg|
00003ca0  2c 72 65 67 2c 23 6f 66  66 73 65 74 33 3a 5d 0d  |,reg,#offset3:].|
00003cb0  1e 1e 05 cc 0d 1e 28 1b  6f 66 66 73 65 74 31 3d  |......(.offset1=|
00003cc0  2d 6f 66 66 73 65 74 20  80 20 32 35 35 2a 34 0d  |-offset . 255*4.|
00003cd0  1e 32 1f 6f 66 66 73 65  74 32 3d 2d 6f 66 66 73  |.2.offset2=-offs|
00003ce0  65 74 20 80 20 32 35 35  2a 32 35 36 2a 34 0d 1e  |et . 255*256*4..|
00003cf0  3c 23 6f 66 66 73 65 74  33 3d 2d 6f 66 66 73 65  |<#offset3=-offse|
00003d00  74 20 80 20 32 35 35 2a  32 35 36 2a 32 35 36 2a  |t . 255*256*256*|
00003d10  34 0d 1e 46 39 20 20 20  20 20 20 20 20 20 20 20  |4..F9           |
00003d20  20 20 20 20 5b 4f 50 54  20 50 41 53 53 3a 53 55  |    [OPT PASS:SU|
00003d30  42 20 20 20 20 20 20 20  72 65 67 2c 20 31 35 2c  |B       reg, 15,|
00003d40  23 6f 66 66 73 65 74 31  3a 5d 0d 1e 50 38 e7 20  |#offset1:]..P8. |
00003d50  6f 66 66 73 65 74 32 3c  3e 30 20 20 5b 4f 50 54  |offset2<>0  [OPT|
00003d60  20 50 41 53 53 3a 53 55  42 20 20 20 20 20 20 20  | PASS:SUB       |
00003d70  72 65 67 2c 72 65 67 2c  23 6f 66 66 73 65 74 32  |reg,reg,#offset2|
00003d80  3a 5d 0d 1e 5a 38 e7 20  6f 66 66 73 65 74 33 3c  |:]..Z8. offset3<|
00003d90  3e 30 20 20 5b 4f 50 54  20 50 41 53 53 3a 53 55  |>0  [OPT PASS:SU|
00003da0  42 20 20 20 20 20 20 20  72 65 67 2c 72 65 67 2c  |B       reg,reg,|
00003db0  23 6f 66 66 73 65 74 33  3a 5d 0d 1e 64 05 cd 0d  |#offset3:]..d...|
00003dc0  1e 6e 05 cd 0d 1e 78 07  3d 22 22 0d 1e 82 04 0d  |.n....x.="".....|
00003dd0  1e 8c 0d dd 20 a4 70 72  65 64 65 66 0d 1e 96 0d  |.... .predef....|
00003de0  5b 4f 50 54 20 50 41 53  53 0d 1e a0 38 2e 73 61  |[OPT PASS...8.sa|
00003df0  76 65 5f 72 65 67 73 20  44 43 44 20 30 3a 44 43  |ve_regs DCD 0:DC|
00003e00  44 20 30 3a 44 43 44 20  30 3a 44 43 44 20 30 3a  |D 0:DCD 0:DCD 0:|
00003e10  44 43 44 20 30 3a 44 43  44 20 30 3a 44 43 44 20  |DCD 0:DCD 0:DCD |
00003e20  30 0d 1e aa 04 0d 1e b4  0f 2e 58 31 44 20 45 51  |0.........X1D EQ|
00003e30  55 44 20 30 0d 1e be 0f  2e 58 32 44 20 45 51 55  |UD 0.....X2D EQU|
00003e40  44 20 30 0d 1e c8 04 0d  1e d2 10 2e 44 58 32 31  |D 0.........DX21|
00003e50  20 45 51 55 44 20 30 0d  1e dc 10 2e 44 58 33 32  | EQUD 0.....DX32|
00003e60  20 45 51 55 44 20 30 0d  1e e6 10 2e 44 58 33 31  | EQUD 0.....DX31|
00003e70  20 45 51 55 44 20 30 0d  1e f0 04 0d 1e fa 10 2e  | EQUD 0.........|
00003e80  44 59 32 31 20 45 51 55  44 20 30 0d 1f 04 10 2e  |DY21 EQUD 0.....|
00003e90  44 59 33 32 20 45 51 55  44 20 30 0d 1f 0e 04 0d  |DY32 EQUD 0.....|
00003ea0  1f 18 04 0d 1f 22 13 2e  53 43 52 45 45 4e 44 20  |....."..SCREEND |
00003eb0  45 51 55 44 20 30 0d 1f  2c 13 2e 73 70 64 20 20  |EQUD 0..,..spd  |
00003ec0  20 20 20 20 44 43 44 20  30 0d 1f 36 04 0d 1f 40  |    DCD 0..6...@|
00003ed0  05 5d 0d 1f 4a 07 3d 22  22 0d 1f 54 04 0d 1f 5e  |.]..J.=""..T...^|
00003ee0  04 0d 1f 68 0e dd 20 a4  70 72 65 63 61 6c 63 0d  |...h.. .precalc.|
00003ef0  1f 72 0d 5b 4f 50 54 20  50 41 53 53 0d 1f 7c 31  |.r.[OPT PASS..|1|
00003f00  3b f4 20 70 61 72 61 6d  74 65 72 73 20 52 30 2d  |;. paramters R0-|
00003f10  52 38 3d 78 30 2c 79 30  2c 78 31 2c 79 31 2c 78  |R8=x0,y0,x1,y1,x|
00003f20  32 2c 79 32 2c 69 30 2c  69 31 2c 69 32 0d 1f 86  |2,y2,i0,i1,i2...|
00003f30  04 0d 1f 90 25 20 20 20  20 20 20 20 20 20 20 53  |....%          S|
00003f40  54 4d 46 44 20 20 20 20  20 31 33 21 2c 7b 30 2d  |TMFD     13!,{0-|
00003f50  31 32 2c 31 34 7d 0d 1f  9a 1e 20 20 20 20 20 20  |12,14}....      |
00003f60  20 20 20 20 53 54 52 20  20 20 20 20 20 20 31 33  |    STR       13|
00003f70  2c 73 70 64 0d 1f a4 04  0d 1f ae 13 4c 44 4d 49  |,spd........LDMI|
00003f80  41 20 32 2c 7b 30 2c 31  2c 32 7d 0d 1f b8 13 4c  |A 2,{0,1,2}....L|
00003f90  44 4d 49 41 20 32 2c 7b  34 2c 35 2c 38 7d 0d 1f  |DMIA 2,{4,5,8}..|
00003fa0  c2 13 4c 44 4d 49 41 20  31 2c 7b 32 2c 33 2c 37  |..LDMIA 1,{2,3,7|
00003fb0  7d 0d 1f cc 13 4c 44 4d  49 41 20 30 2c 7b 30 2c  |}....LDMIA 0,{0,|
00003fc0  31 2c 36 7d 0d 1f d6 04  0d 1f e0 12 4d 4f 56 20  |1,6}........MOV |
00003fd0  36 2c 36 2c 4c 53 4c 20  23 36 0d 1f ea 12 4d 4f  |6,6,LSL #6....MO|
00003fe0  56 20 37 2c 37 2c 4c 53  4c 20 23 36 0d 1f f4 12  |V 7,7,LSL #6....|
00003ff0  4d 4f 56 20 38 2c 38 2c  4c 53 4c 20 23 36 0d 1f  |MOV 8,8,LSL #6..|
00004000  fe 04 0d 20 08 04 0d 20  12 3a 3b 73 6f 72 74 20  |... ... .:;sort |
00004010  76 65 72 74 69 63 65 73  20 73 6f 20 74 68 61 74  |vertices so that|
00004020  20 79 31 2c 79 32 2c 79  33 20 61 72 65 20 69 6e  | y1,y2,y3 are in|
00004030  20 61 73 63 65 6e 64 69  6e 67 20 6f 72 64 65 72  | ascending order|
00004040  0d 20 1c 1d 20 20 20 20  20 20 20 20 20 20 43 4d  |. ..          CM|
00004050  50 20 20 20 20 20 20 20  59 31 2c 59 32 0d 20 26  |P       Y1,Y2. &|
00004060  20 20 20 20 20 20 20 20  20 20 20 42 4c 45 20 20  |           BLE  |
00004070  20 20 20 20 20 69 6e 6f  72 64 65 72 31 0d 20 30  |     inorder1. 0|
00004080  45 3b 20 69 66 20 79 31  20 3e 20 79 32 20 74 68  |E; if y1 > y2 th|
00004090  65 6e 20 73 77 61 70 28  78 31 2c 78 32 29 20 73  |en swap(x1,x2) s|
000040a0  77 61 70 28 79 31 2c 79  32 29 20 73 77 61 70 28  |wap(y1,y2) swap(|
000040b0  75 31 2c 75 32 29 20 73  77 61 70 28 76 31 2c 76  |u1,u2) swap(v1,v|
000040c0  32 29 0d 20 3a 1e 20 20  20 20 20 20 20 20 20 20  |2). :.          |
000040d0  82 20 20 20 20 20 20 20  59 31 2c 59 31 2c 59 32  |.       Y1,Y1,Y2|
000040e0  0d 20 44 1e 20 20 20 20  20 20 20 20 20 20 82 20  |. D.          . |
000040f0  20 20 20 20 20 20 58 31  2c 58 31 2c 58 32 0d 20  |      X1,X1,X2. |
00004100  4e 1e 20 20 20 20 20 20  20 20 20 20 82 20 20 20  |N.          .   |
00004110  20 20 20 20 49 31 2c 49  31 2c 49 32 0d 20 58 1e  |    I1,I1,I2. X.|
00004120  20 20 20 20 20 20 20 20  20 20 82 20 20 20 20 20  |          .     |
00004130  20 20 59 32 2c 59 32 2c  59 31 0d 20 62 1e 20 20  |  Y2,Y2,Y1. b.  |
00004140  20 20 20 20 20 20 20 20  82 20 20 20 20 20 20 20  |        .       |
00004150  58 32 2c 58 32 2c 58 31  0d 20 6c 1e 20 20 20 20  |X2,X2,X1. l.    |
00004160  20 20 20 20 20 20 82 20  20 20 20 20 20 20 49 32  |      .       I2|
00004170  2c 49 32 2c 49 31 0d 20  76 1e 20 20 20 20 20 20  |,I2,I1. v.      |
00004180  20 20 20 20 82 20 20 20  20 20 20 20 59 31 2c 59  |    .       Y1,Y|
00004190  31 2c 59 32 0d 20 80 1e  20 20 20 20 20 20 20 20  |1,Y2. ..        |
000041a0  20 20 82 20 20 20 20 20  20 20 58 31 2c 58 31 2c  |  .       X1,X1,|
000041b0  58 32 0d 20 8a 1e 20 20  20 20 20 20 20 20 20 20  |X2. ..          |
000041c0  82 20 20 20 20 20 20 20  49 31 2c 49 31 2c 49 32  |.       I1,I1,I2|
000041d0  0d 20 94 0d 2e 69 6e 6f  72 64 65 72 31 0d 20 9e  |. ...inorder1. .|
000041e0  1d 20 20 20 20 20 20 20  20 20 20 43 4d 50 20 20  |.          CMP  |
000041f0  20 20 20 20 20 59 32 2c  59 33 0d 20 a8 20 20 20  |     Y2,Y3. .   |
00004200  20 20 20 20 20 20 20 20  42 4c 45 20 20 20 20 20  |        BLE     |
00004210  20 20 69 6e 6f 72 64 65  72 32 0d 20 b2 45 3b 20  |  inorder2. .E; |
00004220  69 66 20 79 32 20 3e 20  79 33 20 74 68 65 6e 20  |if y2 > y3 then |
00004230  73 77 61 70 28 78 32 2c  78 33 29 20 73 77 61 70  |swap(x2,x3) swap|
00004240  28 79 32 2c 79 33 29 20  73 77 61 70 28 75 32 2c  |(y2,y3) swap(u2,|
00004250  75 33 29 20 73 77 61 70  28 76 32 2c 76 33 29 0d  |u3) swap(v2,v3).|
00004260  20 bc 1e 20 20 20 20 20  20 20 20 20 20 82 20 20  | ..          .  |
00004270  20 20 20 20 20 59 32 2c  59 32 2c 59 33 0d 20 c6  |     Y2,Y2,Y3. .|
00004280  1e 20 20 20 20 20 20 20  20 20 20 82 20 20 20 20  |.          .    |
00004290  20 20 20 58 32 2c 58 32  2c 58 33 0d 20 d0 1e 20  |   X2,X2,X3. .. |
000042a0  20 20 20 20 20 20 20 20  20 82 20 20 20 20 20 20  |         .      |
000042b0  20 49 32 2c 49 32 2c 49  33 0d 20 da 1e 20 20 20  | I2,I2,I3. ..   |
000042c0  20 20 20 20 20 20 20 82  20 20 20 20 20 20 20 59  |       .       Y|
000042d0  33 2c 59 33 2c 59 32 0d  20 e4 1e 20 20 20 20 20  |3,Y3,Y2. ..     |
000042e0  20 20 20 20 20 82 20 20  20 20 20 20 20 58 33 2c  |     .       X3,|
000042f0  58 33 2c 58 32 0d 20 ee  1e 20 20 20 20 20 20 20  |X3,X2. ..       |
00004300  20 20 20 82 20 20 20 20  20 20 20 49 33 2c 49 33  |   .       I3,I3|
00004310  2c 49 32 0d 20 f8 1e 20  20 20 20 20 20 20 20 20  |,I2. ..         |
00004320  20 82 20 20 20 20 20 20  20 59 32 2c 59 32 2c 59  | .       Y2,Y2,Y|
00004330  33 0d 21 02 1e 20 20 20  20 20 20 20 20 20 20 82  |3.!..          .|
00004340  20 20 20 20 20 20 20 58  32 2c 58 32 2c 58 33 0d  |       X2,X2,X3.|
00004350  21 0c 1e 20 20 20 20 20  20 20 20 20 20 82 20 20  |!..          .  |
00004360  20 20 20 20 20 49 32 2c  49 32 2c 49 33 0d 21 16  |     I2,I2,I3.!.|
00004370  0d 2e 69 6e 6f 72 64 65  72 32 0d 21 20 1d 20 20  |..inorder2.! .  |
00004380  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00004390  20 20 59 31 2c 59 32 0d  21 2a 20 20 20 20 20 20  |  Y1,Y2.!*      |
000043a0  20 20 20 20 20 42 4c 45  20 20 20 20 20 20 20 69  |     BLE       i|
000043b0  6e 6f 72 64 65 72 33 0d  21 34 2c 3b 20 69 66 20  |norder3.!4,; if |
000043c0  28 79 31 20 3e 20 79 32  29 20 6f 72 20 28 79 31  |(y1 > y2) or (y1|
000043d0  3d 79 32 20 61 6e 64 20  78 31 3e 78 32 29 20 74  |=y2 and x1>x2) t|
000043e0  68 65 6e 0d 21 3e 35 3b  20 73 77 61 70 28 78 31  |hen.!>5; swap(x1|
000043f0  2c 78 32 29 20 73 77 61  70 28 79 31 2c 79 32 29  |,x2) swap(y1,y2)|
00004400  20 73 77 61 70 28 75 31  2c 75 32 29 20 73 77 61  | swap(u1,u2) swa|
00004410  70 28 76 31 2c 76 32 29  0d 21 48 1e 20 20 20 20  |p(v1,v2).!H.    |
00004420  20 20 20 20 20 20 82 20  20 20 20 20 20 20 59 31  |      .       Y1|
00004430  2c 59 31 2c 59 32 0d 21  52 1e 20 20 20 20 20 20  |,Y1,Y2.!R.      |
00004440  20 20 20 20 82 20 20 20  20 20 20 20 58 31 2c 58  |    .       X1,X|
00004450  31 2c 58 32 0d 21 5c 1e  20 20 20 20 20 20 20 20  |1,X2.!\.        |
00004460  20 20 82 20 20 20 20 20  20 20 49 31 2c 49 31 2c  |  .       I1,I1,|
00004470  49 32 0d 21 66 1e 20 20  20 20 20 20 20 20 20 20  |I2.!f.          |
00004480  82 20 20 20 20 20 20 20  59 32 2c 59 32 2c 59 31  |.       Y2,Y2,Y1|
00004490  0d 21 70 1e 20 20 20 20  20 20 20 20 20 20 82 20  |.!p.          . |
000044a0  20 20 20 20 20 20 58 32  2c 58 32 2c 58 31 0d 21  |      X2,X2,X1.!|
000044b0  7a 1e 20 20 20 20 20 20  20 20 20 20 82 20 20 20  |z.          .   |
000044c0  20 20 20 20 49 32 2c 49  32 2c 49 31 0d 21 84 1e  |    I2,I2,I1.!..|
000044d0  20 20 20 20 20 20 20 20  20 20 82 20 20 20 20 20  |          .     |
000044e0  20 20 59 31 2c 59 31 2c  59 32 0d 21 8e 1e 20 20  |  Y1,Y1,Y2.!..  |
000044f0  20 20 20 20 20 20 20 20  82 20 20 20 20 20 20 20  |        .       |
00004500  58 31 2c 58 31 2c 58 32  0d 21 98 1e 20 20 20 20  |X1,X1,X2.!..    |
00004510  20 20 20 20 20 20 82 20  20 20 20 20 20 20 49 31  |      .       I1|
00004520  2c 49 31 2c 49 32 0d 21  a2 0d 2e 69 6e 6f 72 64  |,I1,I2.!...inord|
00004530  65 72 33 0d 21 ac 1e 20  20 20 20 20 20 20 20 20  |er3.!..         |
00004540  20 53 54 52 20 20 20 20  20 20 20 58 31 2c 58 31  | STR       X1,X1|
00004550  44 0d 21 b6 1e 20 20 20  20 20 20 20 20 20 20 53  |D.!..          S|
00004560  54 52 20 20 20 20 20 20  20 58 32 2c 58 32 44 0d  |TR       X2,X2D.|
00004570  21 c0 1e 20 20 20 20 20  20 20 20 20 20 53 54 52  |!..          STR|
00004580  20 20 20 20 20 20 20 49  31 2c 49 31 44 0d 21 ca  |       I1,I1D.!.|
00004590  20 20 20 20 20 20 20 20  20 20 20 53 55 42 20 20  |           SUB  |
000045a0  20 20 20 20 20 58 32 2c  58 32 2c 58 31 0d 21 d4  |     X2,X2,X1.!.|
000045b0  20 20 20 20 20 20 20 20  20 20 20 53 55 42 20 20  |           SUB  |
000045c0  20 20 20 20 20 59 32 2c  59 32 2c 59 31 0d 21 de  |     Y2,Y2,Y1.!.|
000045d0  20 20 20 20 20 20 20 20  20 20 20 53 55 42 20 20  |           SUB  |
000045e0  20 20 20 20 20 58 33 2c  58 33 2c 58 31 0d 21 e8  |     X3,X3,X1.!.|
000045f0  20 20 20 20 20 20 20 20  20 20 20 53 55 42 20 20  |           SUB  |
00004600  20 20 20 20 20 59 33 2c  59 33 2c 59 31 0d 21 f2  |     Y3,Y3,Y1.!.|
00004610  20 20 20 20 20 20 20 20  20 20 20 53 55 42 20 20  |           SUB  |
00004620  20 20 20 20 20 49 32 2c  49 32 2c 49 31 0d 21 fc  |     I2,I2,I1.!.|
00004630  20 20 20 20 20 20 20 20  20 20 20 53 55 42 20 20  |           SUB  |
00004640  20 20 20 20 20 49 33 2c  49 33 2c 49 31 0d 22 06  |     I3,I3,I1.".|
00004650  04 0d 22 10 2a 3b 20 73  63 72 65 65 6e 27 3d 73  |..".*; screen'=s|
00004660  63 72 65 65 6e 20 2b 20  33 32 30 2a 79 31 20 20  |creen + 320*y1  |
00004670  20 20 28 6d 6f 64 65 20  31 33 29 0d 22 1a 27 20  |  (mode 13).".' |
00004680  20 20 20 20 20 20 20 20  20 a4 61 64 72 20 20 20  |         .adr   |
00004690  20 20 28 53 43 52 45 45  4e 2c 53 43 52 45 45 4e  |  (SCREEN,SCREEN|
000046a0  32 29 0d 22 24 27 20 20  20 20 20 20 20 20 20 20  |2)."$'          |
000046b0  4c 44 52 20 20 20 20 20  20 20 53 43 52 45 45 4e  |LDR       SCREEN|
000046c0  2c 5b 53 43 52 45 45 4e  5d 0d 22 2e 28 20 20 20  |,[SCREEN].".(   |
000046d0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
000046e0  20 54 6d 70 2c 59 31 2c  59 31 2c 4c 53 4c 20 23  | Tmp,Y1,Y1,LSL #|
000046f0  32 0d 22 38 32 20 20 20  20 20 20 20 20 20 20 41  |2."82          A|
00004700  44 44 20 20 20 20 20 20  20 53 43 52 45 45 4e 2c  |DD       SCREEN,|
00004710  53 43 52 45 45 4e 2c 54  6d 70 2c 4c 53 4c 20 23  |SCREEN,Tmp,LSL #|
00004720  36 2b 31 0d 22 42 26 20  20 20 20 20 20 20 20 20  |6+1."B&         |
00004730  20 53 54 52 20 20 20 20  20 20 20 53 43 52 45 45  | STR       SCREE|
00004740  4e 2c 53 43 52 45 45 4e  44 0d 22 4c 04 0d 22 56  |N,SCREEND."L.."V|
00004750  24 20 20 20 20 20 20 20  20 20 20 a4 61 64 72 20  |$          .adr |
00004760  20 20 20 20 28 48 65 6c  70 2c 49 4e 56 45 52 53  |    (Help,INVERS|
00004770  29 0d 22 60 1f 20 20 20  20 20 20 20 20 20 20 53  |)."`.          S|
00004780  54 52 20 20 20 20 20 20  20 59 32 2c 44 59 32 31  |TR       Y2,DY21|
00004790  0d 22 6a 11 3b 20 63 61  6c 63 20 20 78 32 2f 79  |."j.; calc  x2/y|
000047a0  32 0d 22 74 2c 20 20 20  20 20 20 20 20 20 20 4c  |2."t,          L|
000047b0  44 52 20 20 20 20 20 20  20 54 6d 70 2c 5b 48 65  |DR       Tmp,[He|
000047c0  6c 70 2c 59 32 2c 4c 53  4c 20 23 32 5d 0d 22 7e  |lp,Y2,LSL #2]."~|
000047d0  22 20 20 20 20 20 20 20  20 20 20 4d 55 4c 20 20  |"          MUL  |
000047e0  20 20 20 20 20 54 6d 70  2c 58 32 2c 54 6d 70 0d  |     Tmp,X2,Tmp.|
000047f0  22 88 26 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |".&          MOV|
00004800  20 20 20 20 20 20 20 54  6d 70 2c 54 6d 70 2c 41  |       Tmp,Tmp,A|
00004810  53 52 20 23 39 0d 22 92  20 20 20 20 20 20 20 20  |SR #9.".        |
00004820  20 20 20 53 54 52 20 20  20 20 20 20 20 54 6d 70  |   STR       Tmp|
00004830  2c 44 58 32 31 0d 22 9c  20 20 20 20 20 20 20 20  |,DX21.".        |
00004840  20 20 20 53 55 42 20 20  20 20 20 20 20 59 31 2c  |   SUB       Y1,|
00004850  59 33 2c 59 32 0d 22 a6  1f 20 20 20 20 20 20 20  |Y3,Y2."..       |
00004860  20 20 20 53 54 52 20 20  20 20 20 20 20 59 31 2c  |   STR       Y1,|
00004870  44 59 33 32 0d 22 b0 1a  3b 20 63 61 6c 63 20 28  |DY32."..; calc (|
00004880  78 33 2d 78 32 29 2f 28  79 33 2d 79 32 29 0d 22  |x3-x2)/(y3-y2)."|
00004890  ba 2c 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |.,          LDR |
000048a0  20 20 20 20 20 20 54 6d  70 2c 5b 48 65 6c 70 2c  |      Tmp,[Help,|
000048b0  59 31 2c 4c 53 4c 20 23  32 5d 0d 22 c4 20 20 20  |Y1,LSL #2].".   |
000048c0  20 20 20 20 20 20 20 20  53 55 42 20 20 20 20 20  |        SUB     |
000048d0  20 20 58 31 2c 58 33 2c  58 32 0d 22 ce 22 20 20  |  X1,X3,X2."."  |
000048e0  20 20 20 20 20 20 20 20  4d 55 4c 20 20 20 20 20  |        MUL     |
000048f0  20 20 54 6d 70 2c 58 31  2c 54 6d 70 0d 22 d8 26  |  Tmp,X1,Tmp.".&|
00004900  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00004910  20 20 20 20 54 6d 70 2c  54 6d 70 2c 41 53 52 20  |    Tmp,Tmp,ASR |
00004920  23 39 0d 22 e2 20 20 20  20 20 20 20 20 20 20 20  |#9.".           |
00004930  53 54 52 20 20 20 20 20  20 20 54 6d 70 2c 44 58  |STR       Tmp,DX|
00004940  33 32 0d 22 ec 16 3b 20  63 61 6c 63 20 64 78 31  |32."..; calc dx1|
00004950  20 3d 20 78 33 2f 79 33  0d 22 f6 2c 20 20 20 20  | = x3/y3.".,    |
00004960  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 20 20  |      LDR       |
00004970  54 6d 70 2c 5b 48 65 6c  70 2c 59 33 2c 4c 53 4c  |Tmp,[Help,Y3,LSL|
00004980  20 23 32 5d 0d 23 00 23  20 20 20 20 20 20 20 20  | #2].#.#        |
00004990  20 20 4d 55 4c 20 20 20  20 20 20 20 54 6d 70 32  |  MUL       Tmp2|
000049a0  2c 58 33 2c 54 6d 70 0d  23 0a 28 20 20 20 20 20  |,X3,Tmp.#.(     |
000049b0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 20 20 54  |     MOV       T|
000049c0  6d 70 32 2c 54 6d 70 32  2c 41 53 52 20 23 39 0d  |mp2,Tmp2,ASR #9.|
000049d0  23 14 21 20 20 20 20 20  20 20 20 20 20 53 54 52  |#.!          STR|
000049e0  20 20 20 20 20 20 20 54  6d 70 32 2c 44 58 33 31  |       Tmp2,DX31|
000049f0  0d 23 1e 0e 20 20 20 20  20 20 20 20 20 20 0d 23  |.#..          .#|
00004a00  28 26 3b 20 73 68 61 64  69 6e 67 20 69 6e 63 72  |(&; shading incr|
00004a10  65 6d 65 6e 74 20 69 6e  20 79 20 64 69 72 65 63  |ement in y direc|
00004a20  74 69 6f 6e 0d 23 32 2c  3b 20 63 61 6c 63 20 64  |tion.#2,; calc d|
00004a30  69 31 20 3d 20 69 33 2f  79 33 20 20 20 20 20 20  |i1 = i3/y3      |
00004a40  20 3b 20 69 20 38 2e 36  20 64 69 20 38 2e 31 36  | ; i 8.6 di 8.16|
00004a50  0d 23 3c 32 20 20 20 20  20 20 20 20 20 20 4d 4f  |.#<2          MO|
00004a60  56 20 20 20 20 20 20 20  54 6d 70 2c 54 6d 70 2c  |V       Tmp,Tmp,|
00004a70  4c 53 52 20 23 34 20 20  20 20 20 20 20 3b 20 2e  |LSR #4       ; .|
00004a80  31 37 0d 23 46 35 20 20  20 20 20 20 20 20 20 20  |17.#F5          |
00004a90  4d 55 4c 20 20 20 20 20  20 20 49 33 2c 54 6d 70  |MUL       I3,Tmp|
00004aa0  2c 49 33 20 20 20 20 20  20 20 20 20 20 20 20 20  |,I3             |
00004ab0  20 3b 20 38 2e 32 33 0d  23 50 33 20 20 20 20 20  | ; 8.23.#P3     |
00004ac0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 20 20 49  |     MOV       I|
00004ad0  33 2c 49 33 2c 41 53 52  20 23 31 37 2d 31 30 20  |3,I3,ASR #17-10 |
00004ae0  20 20 20 20 3b 20 38 2e  31 36 0d 23 5a 25 20 20  |    ; 8.16.#Z%  |
00004af0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00004b00  20 20 49 31 2c 49 31 2c  4c 53 4c 20 23 31 30 0d  |  I1,I1,LSL #10.|
00004b10  23 64 27 20 20 20 20 20  20 20 20 20 20 41 44 44  |#d'          ADD|
00004b20  20 20 20 20 20 20 20 49  31 2c 49 31 2c 49 33 2c  |       I1,I1,I3,|
00004b30  41 53 52 20 23 31 0d 23  6e 1e 20 20 20 20 20 20  |ASR #1.#n.      |
00004b40  20 20 20 20 53 54 52 20  20 20 20 20 20 20 49 33  |    STR       I3|
00004b50  2c 49 33 44 0d 23 78 1e  20 20 20 20 20 20 20 20  |,I3D.#x.        |
00004b60  20 20 53 54 52 20 20 20  20 20 20 20 49 31 2c 49  |  STR       I1,I|
00004b70  31 44 0d 23 82 0e 20 20  20 20 20 20 20 20 20 20  |1D.#..          |
00004b80  0d 23 8c 27 3b 20 63 61  6c 63 20 32 5e 32 31 2f  |.#.'; calc 2^21/|
00004b90  66 6c 6f 6f 72 28 61 62  73 28 78 32 20 2d 20 64  |floor(abs(x2 - d|
00004ba0  78 31 2a 79 32 29 29 0d  23 96 38 20 20 20 20 20  |x1*y2)).#.8     |
00004bb0  20 20 20 20 20 4d 55 4c  20 20 20 20 20 20 20 54  |     MUL       T|
00004bc0  6d 70 2c 59 32 2c 54 6d  70 32 20 20 20 20 20 20  |mp,Y2,Tmp2      |
00004bd0  20 20 20 3b 20 28 78 33  2f 79 33 29 2a 79 32 0d  |   ; (x3/y3)*y2.|
00004be0  23 a0 3b 20 20 20 20 20  20 20 20 20 20 52 53 42  |#.;          RSB|
00004bf0  20 20 20 20 20 20 20 54  6d 70 2c 54 6d 70 2c 58  |       Tmp,Tmp,X|
00004c00  32 2c 4c 53 4c 20 23 31  32 20 20 3b 20 78 32 2d  |2,LSL #12  ; x2-|
00004c10  28 78 33 2f 79 33 29 2a  79 32 0d 23 aa 38 20 20  |(x3/y3)*y2.#.8  |
00004c20  20 20 20 20 20 20 20 20  4d 4f 56 53 20 20 20 20  |        MOVS    |
00004c30  20 20 54 6d 70 2c 54 6d  70 2c 41 53 52 20 23 31  |  Tmp,Tmp,ASR #1|
00004c40  30 20 20 20 20 20 3b 20  69 6e 74 28 20 2e 2e 2e  |0     ; int( ...|
00004c50  20 29 0d 23 b4 22 20 20  20 20 20 20 20 20 20 20  | ).#."          |
00004c60  52 53 42 4d 49 20 20 20  20 20 54 6d 70 2c 54 6d  |RSBMI     Tmp,Tm|
00004c70  70 2c 23 30 0d 23 be 34  20 20 20 20 20 20 20 20  |p,#0.#.4        |
00004c80  20 20 4c 44 52 20 20 20  20 20 20 20 54 6d 70 2c  |  LDR       Tmp,|
00004c90  5b 48 65 6c 70 2c 54 6d  70 2c 4c 53 4c 20 23 32  |[Help,Tmp,LSL #2|
00004ca0  5d 20 20 3b 20 2e 31 39  0d 23 c8 0e 20 20 20 20  |]  ; .19.#..    |
00004cb0  20 20 20 20 20 20 0d 23  d2 0e 20 20 20 20 20 20  |      .#..      |
00004cc0  20 20 20 20 0d 23 dc 26  3b 20 73 68 61 64 69 6e  |    .#.&; shadin|
00004cd0  67 20 69 6e 63 72 65 6d  65 6e 74 20 69 6e 20 78  |g increment in x|
00004ce0  20 64 69 72 65 63 74 69  6f 6e 0d 23 e6 30 3b 20  | direction.#.0; |
00004cf0  63 61 6c 63 20 64 69 32  20 3d 20 28 69 32 2d 64  |calc di2 = (i2-d|
00004d00  69 31 2a 79 32 29 20 2f  20 61 62 73 28 20 78 32  |i1*y2) / abs( x2|
00004d10  20 2d 20 64 78 31 2a 79  32 29 0d 23 f0 2f 20 20  | - dx1*y2).#./  |
00004d20  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00004d30  20 20 49 32 2c 49 32 2c  4c 53 4c 20 23 31 30 20  |  I2,I2,LSL #10 |
00004d40  20 20 20 3b 20 38 2e 31  36 0d 23 fa 20 20 20 20  |   ; 8.16.#.    |
00004d50  20 20 20 20 20 20 20 4d  55 4c 20 20 20 20 20 20  |       MUL      |
00004d60  20 49 33 2c 59 32 2c 49  33 0d 24 04 2d 20 20 20  | I3,Y2,I3.$.-   |
00004d70  20 20 20 20 20 20 20 52  53 42 20 20 20 20 20 20  |       RSB      |
00004d80  20 49 32 2c 49 33 2c 49  32 20 20 20 20 20 20 20  | I2,I3,I2       |
00004d90  3b 20 38 2e 31 36 0d 24  0e 2c 20 20 20 20 20 20  |; 8.16.$.,      |
00004da0  20 20 20 20 4d 4f 56 20  20 20 20 20 20 20 49 32  |    MOV       I2|
00004db0  2c 49 32 2c 41 53 52 20  23 38 20 20 20 3b 20 38  |,I2,ASR #8   ; 8|
00004dc0  2e 38 0d 24 18 2d 20 20  20 20 20 20 20 20 20 20  |.8.$.-          |
00004dd0  4d 4f 56 20 20 20 20 20  20 20 54 6d 70 2c 54 6d  |MOV       Tmp,Tm|
00004de0  70 2c 4c 53 52 20 23 33  20 20 3b 20 2e 31 36 0d  |p,LSR #3  ; .16.|
00004df0  24 22 2d 20 20 20 20 20  20 20 20 20 20 4d 55 4c  |$"-          MUL|
00004e00  20 20 20 20 20 20 20 49  32 2c 54 6d 70 2c 49 32  |       I2,Tmp,I2|
00004e10  20 20 20 20 20 3b 20 20  38 2e 32 34 0d 24 2c 25  |     ;  8.24.$,%|
00004e20  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00004e30  20 20 20 20 49 32 2c 49  32 2c 41 53 52 20 23 31  |    I2,I2,ASR #1|
00004e40  36 0d 24 36 2c 20 20 20  20 20 20 20 20 20 20 53  |6.$6,          S|
00004e50  54 52 20 20 20 20 20 20  20 49 32 2c 49 32 44 20  |TR       I2,I2D |
00004e60  20 20 20 20 20 20 20 20  3b 20 38 2e 38 0d 24 40  |        ; 8.8.$@|
00004e70  1e 20 20 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.          LDR  |
00004e80  20 20 20 20 20 49 31 2c  49 31 44 0d 24 4a 27 20  |     I1,I1D.$J' |
00004e90  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00004ea0  20 20 20 49 31 2c 49 31  2c 49 32 2c 4c 53 4c 20  |   I1,I1,I2,LSL |
00004eb0  23 37 0d 24 54 1e 20 20  20 20 20 20 20 20 20 20  |#7.$T.          |
00004ec0  53 54 52 20 20 20 20 20  20 20 49 31 2c 49 31 44  |STR       I1,I1D|
00004ed0  0d 24 5e 04 0d 24 68 21  20 20 20 20 20 20 20 20  |.$^..$h!        |
00004ee0  20 20 4c 44 52 20 20 20  20 20 20 20 4f 2c 53 43  |  LDR       O,SC|
00004ef0  52 45 45 4e 44 0d 24 72  04 0d 24 7c 1d 20 20 20  |REEND.$r..$|.   |
00004f00  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 20  |       LDR      |
00004f10  20 54 2c 58 31 44 0d 24  86 38 20 20 20 20 20 20  | T,X1D.$.8      |
00004f20  20 20 20 20 4d 4f 56 20  20 20 20 20 20 20 4c 2c  |    MOV       L,|
00004f30  54 2c 4c 53 4c 20 23 31  32 20 20 3b 20 78 6c 20  |T,LSL #12  ; xl |
00004f40  3d 20 28 58 31 2b 30 2e  35 29 2a 46 49 58 0d 24  |= (X1+0.5)*FIX.$|
00004f50  90 22 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |."          ADD |
00004f60  20 20 20 20 20 20 4c 2c  4c 2c 23 31 3c 3c 31 31  |      L,L,#1<<11|
00004f70  0d 24 9a 31 20 20 20 20  20 20 20 20 20 20 4c 44  |.$.1          LD|
00004f80  52 20 20 20 20 20 20 20  4c 41 2c 44 58 33 31 20  |R       LA,DX31 |
00004f90  20 20 20 20 20 3b 20 64  78 6c 20 3d 20 64 78 33  |     ; dxl = dx3|
00004fa0  31 0d 24 a4 38 20 20 20  20 20 20 20 20 20 20 4d  |1.$.8          M|
00004fb0  4f 56 20 20 20 20 20 20  20 52 2c 4c 20 20 20 20  |OV       R,L    |
00004fc0  20 20 20 20 20 20 3b 20  78 72 20 3d 20 28 58 31  |      ; xr = (X1|
00004fd0  2b 30 2e 35 29 2a 46 49  58 0d 24 ae 31 20 20 20  |+0.5)*FIX.$.1   |
00004fe0  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 20  |       LDR      |
00004ff0  20 52 41 2c 44 58 32 31  20 20 20 20 20 20 3b 20  | RA,DX21      ; |
00005000  64 78 72 20 3d 20 64 78  32 31 0d 24 b8 36 20 20  |dxr = dx21.$.6  |
00005010  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00005020  20 20 4c 2c 4c 2c 4c 41  2c 41 53 52 20 23 31 20  |  L,L,LA,ASR #1 |
00005030  20 3b 20 78 6c 20 2b 3d  20 30 2e 35 2a 64 78 6c  | ; xl += 0.5*dxl|
00005040  0d 24 c2 36 20 20 20 20  20 20 20 20 20 20 41 44  |.$.6          AD|
00005050  44 20 20 20 20 20 20 20  52 2c 52 2c 52 41 2c 41  |D       R,R,RA,A|
00005060  53 52 20 23 31 20 20 3b  20 78 72 20 2b 3d 20 30  |SR #1  ; xr += 0|
00005070  2e 35 2a 64 78 72 0d 24  cc 1f 20 20 20 20 20 20  |.5*dxr.$..      |
00005080  20 20 20 20 4c 44 52 20  20 20 20 20 20 20 43 54  |    LDR       CT|
00005090  2c 44 59 32 31 0d 24 d6  35 20 20 20 20 20 20 20  |,DY21.$.5       |
000050a0  20 20 20 43 4d 50 20 20  20 20 20 20 20 43 54 2c  |   CMP       CT,|
000050b0  23 30 20 20 20 20 20 20  20 20 20 20 3b 20 63 6f  |#0          ; co|
000050c0  75 6e 74 20 3d 20 64 79  32 31 0d 24 e0 1d 20 20  |unt = dy21.$..  |
000050d0  20 20 20 20 20 20 20 20  42 4c 4e 45 20 20 20 20  |        BLNE    |
000050e0  20 20 50 49 45 43 45 0d  24 ea 04 0d 24 f4 1d 20  |  PIECE.$...$.. |
000050f0  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |         LDR    |
00005100  20 20 20 54 2c 58 32 44  0d 24 fe 32 20 20 20 20  |   T,X2D.$.2    |
00005110  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 20 20  |      MOV       |
00005120  52 2c 54 2c 4c 53 4c 20  23 31 32 20 20 20 3b 20  |R,T,LSL #12   ; |
00005130  64 78 72 20 3d 20 64 78  33 32 0d 25 08 39 20 20  |dxr = dx32.%.9  |
00005140  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00005150  20 20 52 2c 52 2c 23 31  3c 3c 31 31 20 20 20 20  |  R,R,#1<<11    |
00005160  3b 20 78 72 20 3d 20 28  58 32 2b 30 2e 35 29 2a  |; xr = (X2+0.5)*|
00005170  46 49 58 0d 25 12 1f 20  20 20 20 20 20 20 20 20  |FIX.%..         |
00005180  20 4c 44 52 20 20 20 20  20 20 20 4c 41 2c 44 58  | LDR       LA,DX|
00005190  33 31 0d 25 1c 1f 20 20  20 20 20 20 20 20 20 20  |31.%..          |
000051a0  4c 44 52 20 20 20 20 20  20 20 52 41 2c 44 58 33  |LDR       RA,DX3|
000051b0  32 0d 25 26 35 20 20 20  20 20 20 20 20 20 20 41  |2.%&5          A|
000051c0  44 44 20 20 20 20 20 20  20 52 2c 52 2c 52 41 2c  |DD       R,R,RA,|
000051d0  41 53 52 20 23 31 20 20  3b 20 78 72 2b 3d 20 30  |ASR #1  ; xr+= 0|
000051e0  2e 35 2a 64 78 72 0d 25  30 1f 20 20 20 20 20 20  |.5*dxr.%0.      |
000051f0  20 20 20 20 4c 44 52 20  20 20 20 20 20 20 43 54  |    LDR       CT|
00005200  2c 44 59 33 32 0d 25 3a  34 20 20 20 20 20 20 20  |,DY32.%:4       |
00005210  20 20 20 43 4d 50 20 20  20 20 20 20 20 43 54 2c  |   CMP       CT,|
00005220  23 30 20 20 20 20 20 20  20 20 20 20 3b 20 63 6f  |#0          ; co|
00005230  75 6e 74 3d 20 64 79 33  32 0d 25 44 1d 20 20 20  |unt= dy32.%D.   |
00005240  20 20 20 20 20 20 20 42  4c 4e 45 20 20 20 20 20  |       BLNE     |
00005250  20 50 49 45 43 45 0d 25  4e 08 2e 65 6e 64 0d 25  | PIECE.%N..end.%|
00005260  58 1e 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |X.          LDR |
00005270  20 20 20 20 20 20 31 33  2c 73 70 64 0d 25 62 26  |      13,spd.%b&|
00005280  20 20 20 20 20 20 20 20  20 20 4c 44 4d 46 44 20  |          LDMFD |
00005290  20 20 20 20 31 33 21 2c  7b 30 2d 31 32 2c 50 43  |    13!,{0-12,PC|
000052a0  7d 5e 0d 25 6c 05 5d 0d  25 76 07 3d 22 22 0d 25  |}^.%l.].%v.="".%|
000052b0  80 04 0d 25 8a 04 0d 25  94 0c dd 20 a4 70 69 65  |...%...%... .pie|
000052c0  63 65 0d 25 9e 0d 5b 4f  50 54 20 50 41 53 53 0d  |ce.%..[OPT PASS.|
000052d0  25 a8 0e 2e 49 31 44 20  44 43 44 20 30 0d 25 b2  |%...I1D DCD 0.%.|
000052e0  0e 2e 49 32 44 20 44 43  44 20 30 0d 25 bc 0e 2e  |..I2D DCD 0.%...|
000052f0  49 33 44 20 44 43 44 20  30 0d 25 c6 04 0d 25 d0  |I3D DCD 0.%...%.|
00005300  20 2e 50 49 45 43 45 20  53 54 4d 46 44 20 20 20  | .PIECE STMFD   |
00005310  20 20 31 33 21 2c 7b 43  54 2c 31 34 7d 0d 25 da  |  13!,{CT,14}.%.|
00005320  04 0d 25 e4 11 3b 20 63  6c 69 70 20 74 6f 20 74  |..%..; clip to t|
00005330  6f 70 0d 25 ee 22 20 20  20 20 20 20 20 20 20 20  |op.%."          |
00005340  a4 61 64 72 20 20 20 20  20 28 54 2c 53 43 52 45  |.adr     (T,SCRE|
00005350  45 4e 32 29 0d 25 f8 1d  20 20 20 20 20 20 20 20  |EN2).%..        |
00005360  20 20 4c 44 52 20 20 20  20 20 20 20 54 2c 5b 54  |  LDR       T,[T|
00005370  5d 0d 26 02 1b 20 20 20  20 20 20 20 20 20 20 43  |].&..          C|
00005380  4d 50 20 20 20 20 20 20  20 4f 2c 54 0d 26 0c 1d  |MP       O,T.&..|
00005390  20 20 20 20 20 20 20 20  20 20 42 48 53 20 20 20  |          BHS   |
000053a0  20 20 20 20 65 63 6c 69  70 0d 26 16 09 2e 63 6c  |    eclip.&...cl|
000053b0  69 70 0d 26 20 1e 20 20  20 20 20 20 20 20 20 20  |ip.& .          |
000053c0  41 44 44 20 20 20 20 20  20 20 4c 2c 4c 2c 4c 41  |ADD       L,L,LA|
000053d0  0d 26 2a 1e 20 20 20 20  20 20 20 20 20 20 41 44  |.&*.          AD|
000053e0  44 20 20 20 20 20 20 20  52 2c 52 2c 52 41 0d 26  |D       R,R,RA.&|
000053f0  34 22 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |4"          ADD |
00005400  20 20 20 20 20 20 4f 2c  4f 2c 23 33 32 30 2a 32  |      O,O,#320*2|
00005410  0d 26 3e 19 3b 20 69 6e  63 72 65 6d 65 6e 74 20  |.&>.; increment |
00005420  79 20 73 68 61 64 69 6e  67 0d 26 48 04 0d 26 52  |y shading.&H..&R|
00005430  1d 20 20 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.          LDR  |
00005440  20 20 20 20 20 49 2c 49  31 44 0d 26 5c 1d 20 20  |     I,I1D.&\.  |
00005450  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00005460  20 20 48 2c 49 33 44 0d  26 66 1d 20 20 20 20 20  |  H,I3D.&f.     |
00005470  20 20 20 20 20 41 44 44  20 20 20 20 20 20 20 49  |     ADD       I|
00005480  2c 49 2c 48 0d 26 70 1d  20 20 20 20 20 20 20 20  |,I,H.&p.        |
00005490  20 20 53 54 52 20 20 20  20 20 20 20 49 2c 49 31  |  STR       I,I1|
000054a0  44 0d 26 7a 04 0d 26 84  20 20 20 20 20 20 20 20  |D.&z..&.        |
000054b0  20 20 20 53 55 42 53 20  20 20 20 20 20 43 54 2c  |   SUBS      CT,|
000054c0  43 54 2c 23 31 0d 26 8e  23 20 20 20 20 20 20 20  |CT,#1.&.#       |
000054d0  20 20 20 4c 44 4d 45 51  46 44 20 20 20 31 33 21  |   LDMEQFD   13!|
000054e0  2c 7b 43 54 2c 31 35 7d  0d 26 98 1b 20 20 20 20  |,{CT,15}.&..    |
000054f0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 20 20  |      CMP       |
00005500  4f 2c 54 0d 26 a2 1c 20  20 20 20 20 20 20 20 20  |O,T.&..         |
00005510  20 42 4c 4f 20 20 20 20  20 20 20 63 6c 69 70 0d  | BLO       clip.|
00005520  26 ac 0a 2e 65 63 6c 69  70 0d 26 b6 14 3b 20 63  |&...eclip.&..; c|
00005530  6c 69 70 20 74 6f 20 62  6f 74 74 6f 6d 0d 26 c0  |lip to bottom.&.|
00005540  24 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |$          ADD  |
00005550  20 20 20 20 20 54 2c 54  2c 23 36 34 30 2a 34 38  |     T,T,#640*48|
00005560  30 0d 26 ca 1d 20 20 20  20 20 20 20 20 20 20 53  |0.&..          S|
00005570  55 42 53 20 20 20 20 20  20 54 2c 54 2c 4f 0d 26  |UBS      T,T,O.&|
00005580  d4 23 20 20 20 20 20 20  20 20 20 20 4c 44 4d 4c  |.#          LDML|
00005590  53 46 44 20 20 20 31 33  21 2c 7b 43 54 2c 31 35  |SFD   13!,{CT,15|
000055a0  7d 0d 26 de 27 20 20 20  20 20 20 20 20 20 20 41  |}.&.'          A|
000055b0  44 44 20 20 20 20 20 20  20 43 54 2c 43 54 2c 43  |DD       CT,CT,C|
000055c0  54 2c 4c 53 4c 20 23 32  0d 26 e8 25 20 20 20 20  |T,LSL #2.&.%    |
000055d0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 20 20  |      CMP       |
000055e0  43 54 2c 54 2c 4c 53 52  20 23 36 2b 31 0d 26 f2  |CT,T,LSR #6+1.&.|
000055f0  25 20 20 20 20 20 20 20  20 20 20 4d 4f 56 48 49  |%          MOVHI|
00005600  20 20 20 20 20 43 54 2c  54 2c 4c 53 52 20 23 36  |     CT,T,LSR #6|
00005610  2b 31 0d 26 fc 3f 20 20  20 20 20 20 20 20 20 20  |+1.&.?          |
00005620  43 4d 50 20 20 20 20 20  20 20 4c 2c 52 20 20 20  |CMP       L,R   |
00005630  20 20 20 20 20 20 20 3b  20 6c 65 66 74 20 6f 72  |       ; left or|
00005640  20 72 69 67 68 74 20 6f  72 69 65 6e 74 65 64 20  | right oriented |
00005650  3f 0d 27 06 1e 20 20 20  20 20 20 20 20 20 20 42  |?.'..          B|
00005660  47 54 20 20 20 20 20 20  20 73 70 61 6e 5f 32 0d  |GT       span_2.|
00005670  27 10 1c 20 20 20 20 20  20 20 20 20 20 42 41 4c  |'..          BAL|
00005680  20 20 20 20 20 20 20 73  70 61 6e 0d 27 1a 0c 2e  |       span.'...|
00005690  65 6e 64 73 70 61 6e 0d  27 24 22 20 20 20 20 20  |endspan.'$"     |
000056a0  20 20 20 20 20 41 44 44  20 20 20 20 20 20 20 4f  |     ADD       O|
000056b0  2c 4f 2c 23 33 32 30 2a  32 0d 27 2e 1e 20 20 20  |,O,#320*2.'..   |
000056c0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
000056d0  20 4c 2c 4c 2c 4c 41 0d  27 38 1e 20 20 20 20 20  | L,L,LA.'8.     |
000056e0  20 20 20 20 20 41 44 44  20 20 20 20 20 20 20 52  |     ADD       R|
000056f0  2c 52 2c 52 41 0d 27 42  20 20 20 20 20 20 20 20  |,R,RA.'B        |
00005700  20 20 20 53 55 42 53 20  20 20 20 20 20 43 54 2c  |   SUBS      CT,|
00005710  43 54 2c 23 35 0d 27 4c  19 3b 20 69 6e 63 72 65  |CT,#5.'L.; incre|
00005720  6d 65 6e 74 20 79 20 73  68 61 64 69 6e 67 0d 27  |ment y shading.'|
00005730  56 04 0d 27 60 1d 20 20  20 20 20 20 20 20 20 20  |V..'`.          |
00005740  4c 44 52 20 20 20 20 20  20 20 54 2c 49 31 44 0d  |LDR       T,I1D.|
00005750  27 6a 1d 20 20 20 20 20  20 20 20 20 20 4c 44 52  |'j.          LDR|
00005760  20 20 20 20 20 20 20 49  2c 49 33 44 0d 27 74 1d  |       I,I3D.'t.|
00005770  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00005780  20 20 20 20 49 2c 49 2c  54 0d 27 7e 1d 20 20 20  |    I,I,T.'~.   |
00005790  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 20  |       STR      |
000057a0  20 49 2c 49 31 44 0d 27  88 04 0d 27 92 23 20 20  | I,I1D.'...'.#  |
000057b0  20 20 20 20 20 20 20 20  4c 44 4d 45 51 46 44 20  |        LDMEQFD |
000057c0  20 20 31 33 21 2c 7b 43  54 2c 31 35 7d 0d 27 9c  |  13!,{CT,15}.'.|
000057d0  09 2e 73 70 61 6e 0d 27  a6 04 0d 27 b0 04 0d 27  |..span.'...'...'|
000057e0  ba 13 3b 20 63 6c 69 70  20 74 6f 20 72 69 67 68  |..; clip to righ|
000057f0  74 0d 27 c4 22 20 20 20  20 20 20 20 20 20 20 43  |t.'."          C|
00005800  4d 50 20 20 20 20 20 20  20 52 2c 23 36 34 30 3c  |MP       R,#640<|
00005810  3c 31 32 0d 27 ce 26 20  20 20 20 20 20 20 20 20  |<12.'.&         |
00005820  20 41 44 44 20 20 20 20  20 20 20 58 52 2c 4f 2c  | ADD       XR,O,|
00005830  52 2c 41 53 52 20 23 31  32 0d 27 d8 23 20 20 20  |R,ASR #12.'.#   |
00005840  20 20 20 20 20 20 20 41  44 44 47 54 20 20 20 20  |       ADDGT    |
00005850  20 58 52 2c 4f 2c 23 33  32 30 2a 32 0d 27 e2 12  | XR,O,#320*2.'..|
00005860  3b 20 43 6c 69 70 20 74  6f 20 6c 65 66 74 0d 27  |; Clip to left.'|
00005870  ec 23 20 20 20 20 20 20  20 20 20 20 4d 4f 56 53  |.#          MOVS|
00005880  20 20 20 20 20 20 54 2c  4c 2c 41 53 52 20 23 31  |      T,L,ASR #1|
00005890  32 0d 27 f6 1e 20 20 20  20 20 20 20 20 20 20 41  |2.'..          A|
000058a0  44 44 20 20 20 20 20 20  20 58 4c 2c 4f 2c 54 0d  |DD       XL,O,T.|
000058b0  28 00 1c 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |(..          MOV|
000058c0  4c 54 20 20 20 20 20 58  4c 2c 4f 0d 28 0a 1e 20  |LT     XL,O.(.. |
000058d0  20 20 20 20 20 20 20 20  20 52 53 42 4d 49 20 20  |         RSBMI  |
000058e0  20 20 20 54 2c 54 2c 23  30 0d 28 14 04 0d 28 1e  |   T,T,#0.(...(.|
000058f0  04 0d 28 28 29 3b 20 4c  6f 61 64 20 6c 69 6e 65  |..((); Load line|
00005900  20 73 68 61 64 65 20 61  6e 64 20 73 68 61 64 65  | shade and shade|
00005910  20 69 6e 63 72 65 6d 65  6e 74 0d 28 32 2e 20 20  | increment.(2.  |
00005920  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00005930  20 20 49 2c 49 31 44 20  20 20 20 20 20 20 20 20  |  I,I1D         |
00005940  20 20 3b 20 31 30 2e 34  0d 28 3c 22 20 20 20 20  |  ; 10.4.(<"    |
00005950  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 20 20  |      MOV       |
00005960  49 2c 49 2c 41 53 52 20  23 38 0d 28 46 2e 20 20  |I,I,ASR #8.(F.  |
00005970  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00005980  20 20 48 2c 49 32 44 20  20 20 20 20 20 20 20 20  |  H,I2D         |
00005990  20 20 3b 20 31 30 2e 34  0d 28 50 1f 20 20 20 20  |  ; 10.4.(P.    |
000059a0  20 20 20 20 20 20 4d 4c  41 4d 49 20 20 20 20 20  |      MLAMI     |
000059b0  49 2c 54 2c 48 2c 49 0d  28 5a 04 0d 28 64 21 20  |I,T,H,I.(Z..(d! |
000059c0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000059d0  20 20 54 2c 4c 2c 41 53  52 20 23 34 0d 28 6e 1d  |  T,L,ASR #4.(n.|
000059e0  20 20 20 20 20 20 20 20  20 80 20 20 20 20 20 20  |         .      |
000059f0  20 54 2c 54 2c 23 32 35  35 0d 28 78 1c 20 20 20  | T,T,#255.(x.   |
00005a00  20 20 20 20 20 20 4d 55  4c 20 20 20 20 20 20 20  |      MUL       |
00005a10  54 2c 48 2c 54 0d 28 82  23 20 20 20 20 20 20 20  |T,H,T.(.#       |
00005a20  20 20 53 55 42 20 20 20  20 20 20 20 49 2c 49 2c  |  SUB       I,I,|
00005a30  54 2c 41 53 52 20 23 38  0d 28 8c 04 0d 28 96 30  |T,ASR #8.(...(.0|
00005a40  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00005a50  20 20 20 20 49 2c 49 2c  4c 53 4c 20 23 31 36 20  |    I,I,LSL #16 |
00005a60  20 20 20 20 20 3b 20 31  30 2e 32 32 0d 28 a0 30  |     ; 10.22.(.0|
00005a70  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00005a80  20 20 20 20 48 2c 48 2c  4c 53 4c 20 23 31 36 20  |    H,H,LSL #16 |
00005a90  20 20 20 20 20 3b 20 31  30 2e 32 32 0d 28 aa 25  |     ; 10.22.(.%|
00005aa0  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00005ab0  20 20 20 20 49 2c 49 2c  48 2c 4c 53 52 20 23 31  |    I,I,H,LSR #1|
00005ac0  36 0d 28 b4 04 0d 28 be  1f 20 20 20 20 20 20 20  |6.(...(..       |
00005ad0  20 20 20 53 55 42 20 20  20 20 20 20 20 54 2c 58  |   SUB       T,X|
00005ae0  52 2c 58 4c 0d 28 c8 1c  20 20 20 20 20 20 20 20  |R,XL.(..        |
00005af0  20 20 43 4d 50 20 20 20  20 20 20 20 54 2c 23 33  |  CMP       T,#3|
00005b00  0d 28 d2 21 20 20 20 20  20 20 20 20 20 20 42 4c  |.(.!          BL|
00005b10  45 20 20 20 20 20 20 20  73 6d 61 6c 6c 73 70 61  |E       smallspa|
00005b20  6e 0d 28 dc 1d 20 20 20  20 20 20 20 20 20 20 54  |n.(..          T|
00005b30  53 54 20 20 20 20 20 20  20 58 4c 2c 23 33 0d 28  |ST       XL,#3.(|
00005b40  e6 20 20 20 20 20 20 20  20 20 20 20 42 45 51 20  |.           BEQ |
00005b50  20 20 20 20 20 20 65 6e  64 6c 6f 6f 70 31 0d 28  |      endloop1.(|
00005b60  f0 1a 2e 6c 6f 6f 70 31  20 20 20 20 a4 6d 61 70  |...loop1    .map|
00005b70  62 79 74 65 28 43 31 29  0d 28 fa 22 20 20 20 20  |byte(C1).(."    |
00005b80  20 20 20 20 20 20 53 54  52 42 20 20 20 20 20 20  |      STRB      |
00005b90  43 31 2c 5b 58 4c 5d 2c  23 31 0d 29 04 1d 20 20  |C1,[XL],#1.)..  |
00005ba0  20 20 20 20 20 20 20 20  54 53 54 20 20 20 20 20  |        TST     |
00005bb0  20 20 58 4c 2c 23 33 0d  29 0e 1d 20 20 20 20 20  |  XL,#3.)..     |
00005bc0  20 20 20 20 20 42 4e 45  20 20 20 20 20 20 20 6c  |     BNE       l|
00005bd0  6f 6f 70 31 0d 29 18 04  0d 29 22 1f 2e 65 6e 64  |oop1.)...)"..end|
00005be0  6c 6f 6f 70 31 20 53 55  42 20 20 20 20 20 20 20  |loop1 SUB       |
00005bf0  48 2c 58 52 2c 58 4c 0d  29 2c 22 20 20 20 20 20  |H,XR,XL.),"     |
00005c00  20 20 20 20 20 4d 4f 56  53 20 20 20 20 20 20 48  |     MOVS      H|
00005c10  2c 48 2c 4c 53 52 20 23  33 0d 29 36 1c 20 20 20  |,H,LSR #3.)6.   |
00005c20  20 20 20 20 20 20 20 42  43 43 20 20 20 20 20 20  |       BCC      |
00005c30  20 64 6f 69 74 0d 29 40  1a 20 20 20 20 20 20 20  | doit.)@.       |
00005c40  20 20 20 a4 6d 61 70 62  79 74 65 28 43 31 29 0d  |   .mapbyte(C1).|
00005c50  29 4a 19 20 20 20 20 20  20 20 20 20 20 a4 6d 61  |)J.          .ma|
00005c60  70 62 79 74 65 28 54 29  0d 29 54 26 20 20 20 20  |pbyte(T).)T&    |
00005c70  20 20 20 20 20 20 41 44  44 20 20 20 20 20 20 20  |      ADD       |
00005c80  43 31 2c 43 31 2c 54 2c  4c 53 4c 20 23 38 0d 29  |C1,C1,T,LSL #8.)|
00005c90  5e 19 20 20 20 20 20 20  20 20 20 20 a4 6d 61 70  |^.          .map|
00005ca0  62 79 74 65 28 54 29 0d  29 68 27 20 20 20 20 20  |byte(T).)h'     |
00005cb0  20 20 20 20 20 41 44 44  20 20 20 20 20 20 20 43  |     ADD       C|
00005cc0  31 2c 43 31 2c 54 2c 4c  53 4c 20 23 31 36 0d 29  |1,C1,T,LSL #16.)|
00005cd0  72 19 20 20 20 20 20 20  20 20 20 20 a4 6d 61 70  |r.          .map|
00005ce0  62 79 74 65 28 54 29 0d  29 7c 27 20 20 20 20 20  |byte(T).)|'     |
00005cf0  20 20 20 20 20 41 44 44  20 20 20 20 20 20 20 43  |     ADD       C|
00005d00  31 2c 43 31 2c 54 2c 4c  53 4c 20 23 32 34 0d 29  |1,C1,T,LSL #24.)|
00005d10  86 22 20 20 20 20 20 20  20 20 20 20 53 54 52 20  |."          STR |
00005d20  20 20 20 20 20 20 43 31  2c 5b 58 4c 5d 2c 23 34  |      C1,[XL],#4|
00005d30  0d 29 90 1c 20 20 20 20  20 20 20 20 20 20 43 4d  |.)..          CM|
00005d40  50 20 20 20 20 20 20 20  48 2c 23 30 0d 29 9a 21  |P       H,#0.).!|
00005d50  2e 64 6f 69 74 20 20 20  20 20 42 45 51 20 20 20  |.doit     BEQ   |
00005d60  20 20 20 20 73 6d 61 6c  6c 73 70 61 6e 0d 29 a4  |    smallspan.).|
00005d70  04 0d 29 ae 1a 2e 6c 6f  6f 70 32 20 20 20 20 a4  |..)...loop2    .|
00005d80  6d 61 70 62 79 74 65 28  43 31 29 0d 29 b8 19 20  |mapbyte(C1).).. |
00005d90  20 20 20 20 20 20 20 20  20 a4 6d 61 70 62 79 74  |         .mapbyt|
00005da0  65 28 54 29 0d 29 c2 26  20 20 20 20 20 20 20 20  |e(T).).&        |
00005db0  20 20 41 44 44 20 20 20  20 20 20 20 43 31 2c 43  |  ADD       C1,C|
00005dc0  31 2c 54 2c 4c 53 4c 20  23 38 0d 29 cc 19 20 20  |1,T,LSL #8.)..  |
00005dd0  20 20 20 20 20 20 20 20  a4 6d 61 70 62 79 74 65  |        .mapbyte|
00005de0  28 54 29 0d 29 d6 27 20  20 20 20 20 20 20 20 20  |(T).).'         |
00005df0  20 41 44 44 20 20 20 20  20 20 20 43 31 2c 43 31  | ADD       C1,C1|
00005e00  2c 54 2c 4c 53 4c 20 23  31 36 0d 29 e0 19 20 20  |,T,LSL #16.)..  |
00005e10  20 20 20 20 20 20 20 20  a4 6d 61 70 62 79 74 65  |        .mapbyte|
00005e20  28 54 29 0d 29 ea 27 20  20 20 20 20 20 20 20 20  |(T).).'         |
00005e30  20 41 44 44 20 20 20 20  20 20 20 43 31 2c 43 31  | ADD       C1,C1|
00005e40  2c 54 2c 4c 53 4c 20 23  32 34 0d 29 f4 1a 20 20  |,T,LSL #24.)..  |
00005e50  20 20 20 20 20 20 20 20  a4 6d 61 70 62 79 74 65  |        .mapbyte|
00005e60  28 43 32 29 0d 29 fe 19  20 20 20 20 20 20 20 20  |(C2).)..        |
00005e70  20 20 a4 6d 61 70 62 79  74 65 28 54 29 0d 2a 08  |  .mapbyte(T).*.|
00005e80  26 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |&          ADD  |
00005e90  20 20 20 20 20 43 32 2c  43 32 2c 54 2c 4c 53 4c  |     C2,C2,T,LSL|
00005ea0  20 23 38 0d 2a 12 19 20  20 20 20 20 20 20 20 20  | #8.*..         |
00005eb0  20 a4 6d 61 70 62 79 74  65 28 54 29 0d 2a 1c 27  | .mapbyte(T).*.'|
00005ec0  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00005ed0  20 20 20 20 43 32 2c 43  32 2c 54 2c 4c 53 4c 20  |    C2,C2,T,LSL |
00005ee0  23 31 36 0d 2a 26 19 20  20 20 20 20 20 20 20 20  |#16.*&.         |
00005ef0  20 a4 6d 61 70 62 79 74  65 28 54 29 0d 2a 30 27  | .mapbyte(T).*0'|
00005f00  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00005f10  20 20 20 20 43 32 2c 43  32 2c 54 2c 4c 53 4c 20  |    C2,C2,T,LSL |
00005f20  23 32 34 0d 2a 3a 25 20  20 20 20 20 20 20 20 20  |#24.*:%         |
00005f30  20 53 54 4d 49 41 20 20  20 20 20 28 58 4c 29 21  | STMIA     (XL)!|
00005f40  2c 7b 43 31 2c 43 32 7d  0d 2a 44 1e 20 20 20 20  |,{C1,C2}.*D.    |
00005f50  20 20 20 20 20 20 53 55  42 53 20 20 20 20 20 20  |      SUBS      |
00005f60  48 2c 48 2c 23 31 0d 2a  4e 1d 20 20 20 20 20 20  |H,H,#1.*N.      |
00005f70  20 20 20 20 42 4e 45 20  20 20 20 20 20 20 6c 6f  |    BNE       lo|
00005f80  6f 70 32 0d 2a 58 0e 2e  73 6d 61 6c 6c 73 70 61  |op2.*X..smallspa|
00005f90  6e 0d 2a 62 1d 20 20 20  20 20 20 20 20 20 20 43  |n.*b.          C|
00005fa0  4d 50 20 20 20 20 20 20  20 58 4c 2c 58 52 0d 2a  |MP       XL,XR.*|
00005fb0  6c 1f 20 20 20 20 20 20  20 20 20 20 42 47 45 20  |l.          BGE |
00005fc0  20 20 20 20 20 20 65 6e  64 73 70 61 6e 0d 2a 76  |      endspan.*v|
00005fd0  1a 20 20 20 20 20 20 20  20 20 20 a4 6d 61 70 62  |.          .mapb|
00005fe0  79 74 65 28 43 31 29 0d  2a 80 22 20 20 20 20 20  |yte(C1).*."     |
00005ff0  20 20 20 20 20 53 54 52  42 20 20 20 20 20 20 43  |     STRB      C|
00006000  31 2c 5b 58 4c 5d 2c 23  31 0d 2a 8a 1d 20 20 20  |1,[XL],#1.*..   |
00006010  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 20  |       CMP      |
00006020  20 58 4c 2c 58 52 0d 2a  94 1f 20 20 20 20 20 20  | XL,XR.*..      |
00006030  20 20 20 20 42 45 51 20  20 20 20 20 20 20 65 6e  |    BEQ       en|
00006040  64 73 70 61 6e 0d 2a 9e  1a 20 20 20 20 20 20 20  |dspan.*..       |
00006050  20 20 20 a4 6d 61 70 62  79 74 65 28 43 31 29 0d  |   .mapbyte(C1).|
00006060  2a a8 22 20 20 20 20 20  20 20 20 20 20 53 54 52  |*."          STR|
00006070  42 20 20 20 20 20 20 43  31 2c 5b 58 4c 5d 2c 23  |B      C1,[XL],#|
00006080  31 0d 2a b2 1d 20 20 20  20 20 20 20 20 20 20 43  |1.*..          C|
00006090  4d 50 20 20 20 20 20 20  20 58 4c 2c 58 52 0d 2a  |MP       XL,XR.*|
000060a0  bc 1f 20 20 20 20 20 20  20 20 20 20 42 45 51 20  |..          BEQ |
000060b0  20 20 20 20 20 20 65 6e  64 73 70 61 6e 0d 2a c6  |      endspan.*.|
000060c0  1a 20 20 20 20 20 20 20  20 20 20 a4 6d 61 70 62  |.          .mapb|
000060d0  79 74 65 28 43 31 29 0d  2a d0 22 20 20 20 20 20  |yte(C1).*."     |
000060e0  20 20 20 20 20 53 54 52  42 20 20 20 20 20 20 43  |     STRB      C|
000060f0  31 2c 5b 58 4c 5d 2c 23  31 0d 2a da 1f 20 20 20  |1,[XL],#1.*..   |
00006100  20 20 20 20 20 20 20 42  41 4c 20 20 20 20 20 20  |       BAL      |
00006110  20 65 6e 64 73 70 61 6e  0d 2a e4 0e 2e 65 6e 64  | endspan.*...end|
00006120  73 70 61 6e 5f 32 0d 2a  ee 22 20 20 20 20 20 20  |span_2.*."      |
00006130  20 20 20 20 41 44 44 20  20 20 20 20 20 20 4f 2c  |    ADD       O,|
00006140  4f 2c 23 33 32 30 2a 32  0d 2a f8 1e 20 20 20 20  |O,#320*2.*..    |
00006150  20 20 20 20 20 20 41 44  44 20 20 20 20 20 20 20  |      ADD       |
00006160  4c 2c 4c 2c 4c 41 0d 2b  02 1e 20 20 20 20 20 20  |L,L,LA.+..      |
00006170  20 20 20 20 41 44 44 20  20 20 20 20 20 20 52 2c  |    ADD       R,|
00006180  52 2c 52 41 0d 2b 0c 20  20 20 20 20 20 20 20 20  |R,RA.+.         |
00006190  20 20 53 55 42 53 20 20  20 20 20 20 43 54 2c 43  |  SUBS      CT,C|
000061a0  54 2c 23 35 0d 2b 16 19  3b 20 69 6e 63 72 65 6d  |T,#5.+..; increm|
000061b0  65 6e 74 20 79 20 73 68  61 64 69 6e 67 0d 2b 20  |ent y shading.+ |
000061c0  1d 20 20 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.          LDR  |
000061d0  20 20 20 20 20 54 2c 49  31 44 0d 2b 2a 1d 20 20  |     T,I1D.+*.  |
000061e0  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
000061f0  20 20 49 2c 49 33 44 0d  2b 34 1d 20 20 20 20 20  |  I,I3D.+4.     |
00006200  20 20 20 20 20 41 44 44  20 20 20 20 20 20 20 49  |     ADD       I|
00006210  2c 49 2c 54 0d 2b 3e 1d  20 20 20 20 20 20 20 20  |,I,T.+>.        |
00006220  20 20 53 54 52 20 20 20  20 20 20 20 49 2c 49 31  |  STR       I,I1|
00006230  44 0d 2b 48 23 20 20 20  20 20 20 20 20 20 20 4c  |D.+H#          L|
00006240  44 4d 45 51 46 44 20 20  20 31 33 21 2c 7b 43 54  |DMEQFD   13!,{CT|
00006250  2c 31 35 7d 0d 2b 52 0b  2e 73 70 61 6e 5f 32 0d  |,15}.+R..span_2.|
00006260  2b 5c 12 3b 20 43 6c 69  70 20 74 6f 20 6c 65 66  |+\.; Clip to lef|
00006270  74 0d 2b 66 23 20 20 20  20 20 20 20 20 20 20 4d  |t.+f#          M|
00006280  4f 56 53 20 20 20 20 20  20 54 2c 52 2c 41 53 52  |OVS      T,R,ASR|
00006290  20 23 31 32 0d 2b 70 26  20 20 20 20 20 20 20 20  | #12.+p&        |
000062a0  20 20 41 44 44 50 4c 20  20 20 20 20 58 52 2c 4f  |  ADDPL     XR,O|
000062b0  2c 52 2c 41 53 52 20 23  31 32 0d 2b 7a 1c 20 20  |,R,ASR #12.+z.  |
000062c0  20 20 20 20 20 20 20 20  4d 4f 56 4d 49 20 20 20  |        MOVMI   |
000062d0  20 20 58 52 2c 4f 0d 2b  84 13 3b 20 63 6c 69 70  |  XR,O.+..; clip|
000062e0  20 74 6f 20 72 69 67 68  74 0d 2b 8e 20 20 20 20  | to right.+.    |
000062f0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 20  |       MOV      |
00006300  20 54 2c 23 33 32 30 2a  32 0d 2b 98 25 20 20 20  | T,#320*2.+.%   |
00006310  20 20 20 20 20 20 20 52  53 42 53 20 20 20 20 20  |       RSBS     |
00006320  20 54 2c 54 2c 4c 2c 41  53 52 20 23 31 32 0d 2b  | T,T,L,ASR #12.+|
00006330  a2 26 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |.&          ADD |
00006340  20 20 20 20 20 20 58 4c  2c 4f 2c 4c 2c 41 53 52  |      XL,O,L,ASR|
00006350  20 23 31 32 0d 2b ac 23  20 20 20 20 20 20 20 20  | #12.+.#        |
00006360  20 20 41 44 44 50 4c 20  20 20 20 20 58 4c 2c 4f  |  ADDPL     XL,O|
00006370  2c 23 33 32 30 2a 32 0d  2b b6 29 3b 20 4c 6f 61  |,#320*2.+.); Loa|
00006380  64 20 6c 69 6e 65 20 73  68 61 64 65 20 61 6e 64  |d line shade and|
00006390  20 73 68 61 64 65 20 69  6e 63 72 65 6d 65 6e 74  | shade increment|
000063a0  0d 2b c0 1d 20 20 20 20  20 20 20 20 20 20 4c 44  |.+..          LD|
000063b0  52 20 20 20 20 20 20 20  49 2c 49 31 44 0d 2b ca  |R       I,I1D.+.|
000063c0  22 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |"          MOV  |
000063d0  20 20 20 20 20 49 2c 49  2c 41 53 52 20 23 38 0d  |     I,I,ASR #8.|
000063e0  2b d4 1d 20 20 20 20 20  20 20 20 20 20 4c 44 52  |+..          LDR|
000063f0  20 20 20 20 20 20 20 48  2c 49 32 44 0d 2b de 1f  |       H,I2D.+..|
00006400  20 20 20 20 20 20 20 20  20 20 4d 4c 41 50 4c 20  |          MLAPL |
00006410  20 20 20 20 49 2c 54 2c  48 2c 49 0d 2b e8 04 0d  |    I,T,H,I.+...|
00006420  2b f2 22 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |+."          MOV|
00006430  20 20 20 20 20 20 20 54  2c 4c 2c 41 53 52 20 23  |       T,L,ASR #|
00006440  34 0d 2b fc 1e 20 20 20  20 20 20 20 20 20 20 80  |4.+..          .|
00006450  20 20 20 20 20 20 20 54  2c 54 2c 23 32 35 35 0d  |       T,T,#255.|
00006460  2c 06 1d 20 20 20 20 20  20 20 20 20 20 4d 55 4c  |,..          MUL|
00006470  20 20 20 20 20 20 20 54  2c 48 2c 54 0d 2c 10 2e  |       T,H,T.,..|
00006480  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00006490  20 20 20 20 49 2c 49 2c  54 2c 41 53 52 20 23 38  |    I,I,T,ASR #8|
000064a0  20 20 20 20 20 20 20 20  20 20 0d 2c 1a 0e 20 20  |          .,..  |
000064b0  20 20 20 20 20 20 20 20  0d 2c 24 23 20 20 20 20  |        .,$#    |
000064c0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 20 20  |      MOV       |
000064d0  49 2c 49 2c 4c 53 4c 20  23 31 36 0d 2c 2e 23 20  |I,I,LSL #16.,.# |
000064e0  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |         MOV    |
000064f0  20 20 20 48 2c 48 2c 4c  53 4c 20 23 31 36 0d 2c  |   H,H,LSL #16.,|
00006500  38 24 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |8$          ADD |
00006510  20 20 20 20 20 20 49 2c  49 2c 48 2c 4c 53 52 23  |      I,I,H,LSR#|
00006520  31 36 0d 2c 42 1f 20 20  20 20 20 20 20 20 20 20  |16.,B.          |
00006530  53 55 42 20 20 20 20 20  20 20 54 2c 58 4c 2c 58  |SUB       T,XL,X|
00006540  52 0d 2c 4c 1c 20 20 20  20 20 20 20 20 20 20 43  |R.,L.          C|
00006550  4d 50 20 20 20 20 20 20  20 54 2c 23 33 0d 2c 56  |MP       T,#3.,V|
00006560  23 20 20 20 20 20 20 20  20 20 20 42 4c 45 20 20  |#          BLE  |
00006570  20 20 20 20 20 73 6d 61  6c 6c 73 70 61 6e 5f 32  |     smallspan_2|
00006580  0d 2c 60 1d 20 20 20 20  20 20 20 20 20 20 54 53  |.,`.          TS|
00006590  54 20 20 20 20 20 20 20  58 4c 2c 23 33 0d 2c 6a  |T       XL,#3.,j|
000065a0  22 20 20 20 20 20 20 20  20 20 20 42 45 51 20 20  |"          BEQ  |
000065b0  20 20 20 20 20 65 6e 64  6c 6f 6f 70 31 5f 32 0d  |     endloop1_2.|
000065c0  2c 74 1a 2e 6c 6f 6f 70  31 5f 32 20 20 a4 6d 61  |,t..loop1_2  .ma|
000065d0  70 62 79 74 65 28 43 31  29 0d 2c 7e 24 20 20 20  |pbyte(C1).,~$   |
000065e0  20 20 20 20 20 20 20 53  54 52 42 20 20 20 20 20  |       STRB     |
000065f0  20 43 31 2c 5b 58 4c 2c  23 2d 31 5d 21 0d 2c 88  | C1,[XL,#-1]!.,.|
00006600  1d 20 20 20 20 20 20 20  20 20 20 54 53 54 20 20  |.          TST  |
00006610  20 20 20 20 20 58 4c 2c  23 33 0d 2c 92 1f 20 20  |     XL,#3.,..  |
00006620  20 20 20 20 20 20 20 20  42 4e 45 20 20 20 20 20  |        BNE     |
00006630  20 20 6c 6f 6f 70 31 5f  32 0d 2c 9c 0f 2e 65 6e  |  loop1_2.,...en|
00006640  64 6c 6f 6f 70 31 5f 32  0d 2c a6 1f 20 20 20 20  |dloop1_2.,..    |
00006650  20 20 20 20 20 20 53 55  42 20 20 20 20 20 20 20  |      SUB       |
00006660  48 2c 58 4c 2c 58 52 0d  2c b0 22 20 20 20 20 20  |H,XL,XR.,."     |
00006670  20 20 20 20 20 4d 4f 56  53 20 20 20 20 20 20 48  |     MOVS      H|
00006680  2c 48 2c 4c 53 52 20 23  33 0d 2c ba 1e 20 20 20  |,H,LSR #3.,..   |
00006690  20 20 20 20 20 20 20 42  43 43 20 20 20 20 20 20  |       BCC      |
000066a0  20 64 6f 69 74 5f 32 0d  2c c4 1a 20 20 20 20 20  | doit_2.,..     |
000066b0  20 20 20 20 20 a4 6d 61  70 62 79 74 65 28 43 31  |     .mapbyte(C1|
000066c0  29 0d 2c ce 19 20 20 20  20 20 20 20 20 20 20 a4  |).,..          .|
000066d0  6d 61 70 62 79 74 65 28  54 29 0d 2c d8 27 20 20  |mapbyte(T).,.'  |
000066e0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000066f0  20 20 43 31 2c 43 31 2c  54 2c 4c 53 4c 20 23 32  |  C1,C1,T,LSL #2|
00006700  34 0d 2c e2 19 20 20 20  20 20 20 20 20 20 20 a4  |4.,..          .|
00006710  6d 61 70 62 79 74 65 28  54 29 0d 2c ec 27 20 20  |mapbyte(T).,.'  |
00006720  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00006730  20 20 43 31 2c 43 31 2c  54 2c 4c 53 4c 20 23 31  |  C1,C1,T,LSL #1|
00006740  36 0d 2c f6 19 20 20 20  20 20 20 20 20 20 20 a4  |6.,..          .|
00006750  6d 61 70 62 79 74 65 28  54 29 0d 2d 00 26 20 20  |mapbyte(T).-.&  |
00006760  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00006770  20 20 43 31 2c 54 2c 43  31 2c 52 4f 52 20 23 38  |  C1,T,C1,ROR #8|
00006780  0d 2d 0a 24 20 20 20 20  20 20 20 20 20 20 53 54  |.-.$          ST|
00006790  52 20 20 20 20 20 20 20  43 31 2c 5b 58 4c 2c 23  |R       C1,[XL,#|
000067a0  2d 34 5d 21 0d 2d 14 1c  20 20 20 20 20 20 20 20  |-4]!.-..        |
000067b0  20 20 43 4d 50 20 20 20  20 20 20 20 48 2c 23 30  |  CMP       H,#0|
000067c0  0d 2d 1e 23 2e 64 6f 69  74 5f 32 20 20 20 42 45  |.-.#.doit_2   BE|
000067d0  51 20 20 20 20 20 20 20  73 6d 61 6c 6c 73 70 61  |Q       smallspa|
000067e0  6e 5f 32 0d 2d 28 0c 2e  6c 6f 6f 70 32 5f 32 0d  |n_2.-(..loop2_2.|
000067f0  2d 32 1a 20 20 20 20 20  20 20 20 20 20 a4 6d 61  |-2.          .ma|
00006800  70 62 79 74 65 28 43 32  29 0d 2d 3c 19 20 20 20  |pbyte(C2).-<.   |
00006810  20 20 20 20 20 20 20 a4  6d 61 70 62 79 74 65 28  |       .mapbyte(|
00006820  54 29 0d 2d 46 27 20 20  20 20 20 20 20 20 20 20  |T).-F'          |
00006830  41 44 44 20 20 20 20 20  20 20 43 32 2c 43 32 2c  |ADD       C2,C2,|
00006840  54 2c 4c 53 4c 20 23 32  34 0d 2d 50 19 20 20 20  |T,LSL #24.-P.   |
00006850  20 20 20 20 20 20 20 a4  6d 61 70 62 79 74 65 28  |       .mapbyte(|
00006860  54 29 0d 2d 5a 27 20 20  20 20 20 20 20 20 20 20  |T).-Z'          |
00006870  41 44 44 20 20 20 20 20  20 20 43 32 2c 43 32 2c  |ADD       C2,C2,|
00006880  54 2c 4c 53 4c 20 23 31  36 0d 2d 64 19 20 20 20  |T,LSL #16.-d.   |
00006890  20 20 20 20 20 20 20 a4  6d 61 70 62 79 74 65 28  |       .mapbyte(|
000068a0  54 29 0d 2d 6e 26 20 20  20 20 20 20 20 20 20 20  |T).-n&          |
000068b0  41 44 44 20 20 20 20 20  20 20 43 32 2c 54 2c 43  |ADD       C2,T,C|
000068c0  32 2c 52 4f 52 20 23 38  0d 2d 78 1a 20 20 20 20  |2,ROR #8.-x.    |
000068d0  20 20 20 20 20 20 a4 6d  61 70 62 79 74 65 28 43  |      .mapbyte(C|
000068e0  31 29 0d 2d 82 19 20 20  20 20 20 20 20 20 20 20  |1).-..          |
000068f0  a4 6d 61 70 62 79 74 65  28 54 29 0d 2d 8c 27 20  |.mapbyte(T).-.' |
00006900  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00006910  20 20 20 43 31 2c 43 31  2c 54 2c 4c 53 4c 20 23  |   C1,C1,T,LSL #|
00006920  32 34 0d 2d 96 19 20 20  20 20 20 20 20 20 20 20  |24.-..          |
00006930  a4 6d 61 70 62 79 74 65  28 54 29 0d 2d a0 27 20  |.mapbyte(T).-.' |
00006940  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00006950  20 20 20 43 31 2c 43 31  2c 54 2c 4c 53 4c 20 23  |   C1,C1,T,LSL #|
00006960  31 36 0d 2d aa 19 20 20  20 20 20 20 20 20 20 20  |16.-..          |
00006970  a4 6d 61 70 62 79 74 65  28 54 29 0d 2d b4 26 20  |.mapbyte(T).-.& |
00006980  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00006990  20 20 20 43 31 2c 54 2c  43 31 2c 52 4f 52 20 23  |   C1,T,C1,ROR #|
000069a0  38 0d 2d be 25 20 20 20  20 20 20 20 20 20 20 53  |8.-.%          S|
000069b0  54 4d 44 42 20 20 20 20  20 28 58 4c 29 21 2c 7b  |TMDB     (XL)!,{|
000069c0  43 31 2c 43 32 7d 0d 2d  c8 1e 20 20 20 20 20 20  |C1,C2}.-..      |
000069d0  20 20 20 20 53 55 42 53  20 20 20 20 20 20 48 2c  |    SUBS      H,|
000069e0  48 2c 23 31 0d 2d d2 1f  20 20 20 20 20 20 20 20  |H,#1.-..        |
000069f0  20 20 42 4e 45 20 20 20  20 20 20 20 6c 6f 6f 70  |  BNE       loop|
00006a00  32 5f 32 0d 2d dc 10 2e  73 6d 61 6c 6c 73 70 61  |2_2.-...smallspa|
00006a10  6e 5f 32 0d 2d e6 1d 20  20 20 20 20 20 20 20 20  |n_2.-..         |
00006a20  20 43 4d 50 20 20 20 20  20 20 20 58 52 2c 58 4c  | CMP       XR,XL|
00006a30  0d 2d f0 21 20 20 20 20  20 20 20 20 20 20 42 47  |.-.!          BG|
00006a40  45 20 20 20 20 20 20 20  65 6e 64 73 70 61 6e 5f  |E       endspan_|
00006a50  32 0d 2d fa 1a 20 20 20  20 20 20 20 20 20 20 a4  |2.-..          .|
00006a60  6d 61 70 62 79 74 65 28  43 31 29 0d 2e 04 24 20  |mapbyte(C1)...$ |
00006a70  20 20 20 20 20 20 20 20  20 53 54 52 42 20 20 20  |         STRB   |
00006a80  20 20 20 43 31 2c 5b 58  4c 2c 23 2d 31 5d 21 0d  |   C1,[XL,#-1]!.|
00006a90  2e 0e 1d 20 20 20 20 20  20 20 20 20 20 43 4d 50  |...          CMP|
00006aa0  20 20 20 20 20 20 20 58  52 2c 58 4c 0d 2e 18 21  |       XR,XL...!|
00006ab0  20 20 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |          BEQ   |
00006ac0  20 20 20 20 65 6e 64 73  70 61 6e 5f 32 0d 2e 22  |    endspan_2.."|
00006ad0  1a 20 20 20 20 20 20 20  20 20 20 a4 6d 61 70 62  |.          .mapb|
00006ae0  79 74 65 28 43 31 29 0d  2e 2c 24 20 20 20 20 20  |yte(C1)..,$     |
00006af0  20 20 20 20 20 53 54 52  42 20 20 20 20 20 20 43  |     STRB      C|
00006b00  31 2c 5b 58 4c 2c 23 2d  31 5d 21 0d 2e 36 1d 20  |1,[XL,#-1]!..6. |
00006b10  20 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |         CMP    |
00006b20  20 20 20 58 52 2c 58 4c  0d 2e 40 21 20 20 20 20  |   XR,XL..@!    |
00006b30  20 20 20 20 20 20 42 45  51 20 20 20 20 20 20 20  |      BEQ       |
00006b40  65 6e 64 73 70 61 6e 5f  32 0d 2e 4a 1a 20 20 20  |endspan_2..J.   |
00006b50  20 20 20 20 20 20 20 a4  6d 61 70 62 79 74 65 28  |       .mapbyte(|
00006b60  43 31 29 0d 2e 54 24 20  20 20 20 20 20 20 20 20  |C1)..T$         |
00006b70  20 53 54 52 42 20 20 20  20 20 20 43 31 2c 5b 58  | STRB      C1,[X|
00006b80  4c 2c 23 2d 31 5d 21 0d  2e 5e 21 20 20 20 20 20  |L,#-1]!..^!     |
00006b90  20 20 20 20 20 42 41 4c  20 20 20 20 20 20 20 65  |     BAL       e|
00006ba0  6e 64 73 70 61 6e 5f 32  0d 2e 68 05 5d 0d 2e 72  |ndspan_2..h.]..r|
00006bb0  07 3d 22 22 0d 2e 7c 04  0d 2e 86 13 dd 20 a4 6d  |.=""..|...... .m|
00006bc0  61 70 62 79 74 65 28 72  65 67 29 0d 2e 90 0d 5b  |apbyte(reg)....[|
00006bd0  4f 50 54 20 50 41 53 53  0d 2e 9a 21 20 20 20 20  |OPT PASS...!    |
00006be0  20 20 4d 4f 56 20 20 20  20 20 20 20 72 65 67 2c  |  MOV       reg,|
00006bf0  49 2c 4c 53 52 20 23 32  34 0d 2e a4 21 20 20 20  |I,LSR #24...!   |
00006c00  20 20 20 41 44 44 20 20  20 20 20 20 20 49 2c 49  |   ADD       I,I|
00006c10  2c 49 2c 4c 53 4c 20 23  31 36 0d 2e ae 05 5d 0d  |,I,LSL #16....].|
00006c20  2e b8 08 20 3d 22 22 0d  ff                       |... =""..|
00006c29