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

starinfo/Vlietinck/!Flyng/Flyn

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

(7�ON ERROR:ON ERROR OFF:MODE 13:REPORT:PRINT ERL:END
2
<� stack 100000
F
P
Zȗ �
d*POINTER
nbanks=4
x>SH=7             :� Determines the number of patches: 2^SH
�ED=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
6� BLK 40
@!BLK=7:BLK!4=150:BLK!8=-1
J$ș "OS_ReadVduVariables",BLK,BLK
T"� (banks>1) � (BLK!4<2*!BLK) �
^0ș "OS_ChangeDynamicArea",2,banks*!BLK-BLK!4
h�
rP1=2*�/3
|� 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�
:
D� �PUNTEN(PUNT)
N� I%,J%
X� J%=0 � D2-1
b� I%=0 � D1-1
l3height%=?(map_sprite_height%+56+I%+(J%*ED))-128
v� height%=-130
�!PUNT=height%*FIX*8
�,col%=?(map_sprite_colors%+56+I%+(J%*ED))
��IF 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
4	.main
>           STMFD     13!,{14}
H          STR 13,spd
R          �adr(13,stack)
\'          BL        claim_interrupt
f
.mainloop
p          MOV       0,#&70
z"          LDR       1,bankrear
�          MOV       2,#0
�!          SWI       "OS_Byte"
� 
�          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
8#          SWI       "OS_IntOff"
B#          LDR       1,bankcount
L          ADD       1,1,#1
V#          STR       1,bankcount
`"          SWI       "OS_IntOn"
j"          LDR       1,bankrear
t           CMP       1,#banks
~          �Q     1,#0
�          ADD       1,1,#1
�"          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
2,          SWI       "OS_ConvertInteger1"
<#          SWI       "OS_Write0"
F$          LDMFD     13!,{0-2,PC}
P
Z.marker DCD 0
d$.ticker   STMFD     13!,{0-3,14}
n           LDR       0,marker
x          �S      0,0,#1
�           STR       0,marker
�$          LDMEQFD   13!,{0-3,PC}
�:          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
6.sync_time  EQUD 0
@
J .vsync
T;          CMP       0,#4      ; check if event is vsync
^-          MOVNES    PC,14     ; else exit
h!          STMFD     13!,{0-1}
r          MOV       R0,PC
|5          �R       R1,R0,#1     ; put in scv mode
�          TEQP      R1,#0
�          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
0           ADD       R1,R1,#1
:$          STR       R1,bankfront
D          MOV       R0,#&71
N4          SWI       6                ; "OS_Byte"
X
b(          LDR       R0,frame_counter
l           ADD       R0,R0,#1
v(          STR       R0,frame_counter
�
� .no_hurry
�$          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
4           ADR       R1,vsync
>          MOV       R2,#0
H"          SWI       "OS_Claim"
R          MOV       R0,#14
\          MOV       R1,#4
f!          SWI       "OS_Byte"
p          MOV       PC,R14
z
�.release_interrupt
�$          LDR       R0,bankcount
�          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
	$]
	.�
	8	Q%=P%
	B�
	L
	V� �ASS2
	`� P%,Q%
	j� Q% 20000
	t
	~� CSTAB 8*1024
	�� I=0 � 1023
	�
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
2.nr EQUD D1*D2
<.nr2 EQUD D1*D2
F.RX EQUD 0
P.RY EQUD 0
Z.CSD EQUD �(�/20)*256
d.SND EQUD �(�/20)*256
n.CSTABD EQUD CSTAB
x.H1D EQUD 16*8
�.H2D EQUD 0
�.DITD EQUD DITABLE
�.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
6ADDLO J,J,#1
@BLO DVLOOP3
JMOV N,N,LSR J
T.DVLOOP1
^CMP T,N,LSL J
hSUBHS T,T,N,LSL J
r
ADC Q,Q,Q
|SUBS J,J,#1
�BPL DVLOOP1
�STR 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
&
0
LDR T,H2D
:CMP Q,#6:ADDEQ T,T,#16
DCMP Q,#3:SUBEQ T,T,#16
N
STR T,H2D
X
bLDR T,hight
lCMP Q,#5:ADDEQ T,T,#32*FIX
vCMP Q,#2:SUBEQ T,T,#32*FIX
�CMP T,#256*FIX*6
�MOVGE 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,T,A,LSL #1

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

 LDMIA I,{CS,SN}

*ADR  J,yrot

4STMIA J,{CS,SN}

>

H

RRSB SN,SN,#0

\MUL A,SN,B

fMUL B,CS,B

p

zLDR X,RX

�LDR Y,RY

�ADDS 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
8MOV I,I,LSR #1
B� I,I,T
LADD I,TAB,I,LSL #3
VLDMIA I,{CS,SN}
`
� CS,CS,H
j
� SN,SN,H
t
~
LDR I,H2D
�MOV 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
2STR N,FREED
<
F
PMOV J,#0
ZMOV I,#0
d
nMOV H,#0
x	.vlop
�MOV I,H
�BL 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}
6.vfound
@
J
T�adr(T,SCREEN2)
^
LDR H,[T]
hADD H,H,#320*64
rADD H,H,#40
|;STR H,[T]
�
�
�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
0
:� Q,X,#D1-1
DADD Q,Q,Z,LSL #SH
NMOV Q,Q,LSL #(32-2*SH)
X
bLDR N,PUTAB
lADD N,N,Q,LSR #(32-2*SH-4)
v
�LDR J,hight
�RSB 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�
>
H[ OPT PASS
R
\ADR  J,yrot
fLDMIA J,{I,J}
p
MUL Q,I,X
zMLA Q,J,Z,Q
�
MUL X,J,X
�
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
.
8MOV I,CS,ASR #16
BMOV J,SN,ASR #16
L
MUL Q,I,X
VMLA Q,J,Y,Q
`
MUL X,J,X
j
MUL Y,I,Y
t
SUB Y,Y,X
~MOV X,Q,ASR #8
�MOV 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 #16
�MOV Y,Y,ASR #16
�ADD X,X,#160
�RSB Y,Y,#128
�4STMIA N,{X,Y}   ;perspective transformed (x,y,z)


 CMP   I,#10*FIX   ; to close
;MOVLT T,#101
BLT       toclose
(
2#CMP   I,#HORIZON*FIX  ; too far
<BGE       outscreen
F
P'CMP X,#320      ; out left or right
ZBHS      outscreen
d
n$CMP Y,#256      ; out up or down
xBHS       outscreen
�
�MOV 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
@
J; Q*, H*
T.rec
^"; T=101 => point out of screen
hSTMFD 13!,{14}
r
;SWI 4
|
�MOV Q,#100
�ADD H,H,#320-64-32
�
�ADD I,I,#1
�LDRB T,[H,#1]:CMP T,#0
�BLEQ checkpoint
�STREQB T,[H,#1]
�
ADD Q,Q,T
�
�ADD J,J,#1
�LDRB T,[H,#321]:CMP T,#0
�BLEQ checkpoint
�STREQB T,[H,#321]

ADD Q,Q,T

SUB I,I,#1
&LDRB T,[H,#320]:CMP T,#0
0BLEQ checkpoint
:STREQB T,[H,#320]
D
ADD Q,Q,T
N
XSUB J,J,#1
bBL  checkpoint
lSTRB T,[H]
v6ADD Q,Q,T ;flag on if beyond horizon or off screen
�
�LDRB T,[X,#8]
�CMP T,#0:�Q T,#1
�STRB T,[H,#-(320-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
 
*LDR N,VLTAB
46LDR Y,[N,Y,LSL #2]!      ; load depth link pointer
>LDR T,FREED
H<STR T,[N]                ; replace with new link pointer
R;CMP Q,#100
\BSTMIA (T)!,{X,Y}  ; insert new patch node in depth linked list
fSTR T,FREED
p
zSUB J,J,#1
�LDRB Q,[H,#-320]!
�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,#320]!
$CMP Q,#0
.BLEQ rec
8LDMFD 13!,{PC}
B
L
V.tek
`STMFD 13!,{14}
j
tADR 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
(ADD P1,DIT,T,LSR #32-2*SH-4
2MOV T,T,ROR #32-SH
<%ADD T,T,#1 << (32-SH)      ; i+=1
FADD P2,DIT,T,ROR #32-SH-4
PMOV T,T,ROR #SH
Z%SUB T,T,#1 << (32-SH)      ; j-=1
dADD P3,DIT,T,ROR #32-2*SH-4
n
xSUBS 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
@&EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
J]
T�
^	Q%=P%
h�
r
|
�� �calc_invers
�� INVERS 4094*4*2
�
!INVERS=1
�K=1<<21
�-� I=1 � 2*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
&	SM=10
0FP=SF+SM
:
DAH=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
N
X!X1=0:Y1=1:X2=2:Y2=3:X3=4:Y3=5
bI1=6:I2=7:I3=8
lSCREEN=12:BITMAP=13:Tmp=14
v
�$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,#256*320
�
.cloop
STMIA R10!,{R0-R9}
STMIA R10!,{R0-R9}
STMIA R10!,{R0-R9}
 STMIA R10!,{R0-R9}
*SUBS R11,R11,#4*10*4
4
BNE cloop
>MOV PC,R14
H
R.SCREEN1 EQUD 148:EQUD -1
\.SCREEN2 EQUD 0
f.SCREEN3 DCD 0
p.set
zADR R0,SCREEN1
�ADR R1,SCREEN2
�SWI "OS_ReadVduVariables"
�
MOV 15,14
�
�.mode     DCD 1
�          DCD 320
�          DCD 256
�          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"
.MOV pc,r14
8
B�predef
L.poly_fill
V�precalc
`
�piece
j]
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
(offset2=-offset � 255*256*4
2#offset3=-offset � 255*256*256*4
<9               [OPT PASS:SUB       reg, 15,#offset1:]
F8� offset2<>0  [OPT PASS:SUB       reg,reg,#offset2:]
P8� offset3<>0  [OPT PASS:SUB       reg,reg,#offset3:]
Z�
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
^� �precalc
h
[OPT PASS
r1;� 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
 E; if y1 > y2 then swap(x1,x2) swap(y1,y2) swap(u1,u2) swap(v1,v2)
 &          �       Y1,Y1,Y2
 0          �       X1,X1,X2
 :          �       I1,I1,I2
 D          �       Y2,Y2,Y1
 N          �       X2,X2,X1
 X          �       I2,I2,I1
 b          �       Y1,Y1,Y2
 l          �       X1,X1,X2
 v          �       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
! ,; if (y1 > y2) or (y1=y2 and x1>x2) then
!*5; swap(x1,x2) swap(y1,y2) swap(u1,u2) swap(v1,v2)
!4          �       Y1,Y1,Y2
!>          �       X1,X1,X2
!H          �       I1,I1,I2
!R          �       Y2,Y2,Y1
!\          �       X2,X2,X1
!f          �       I2,I2,I1
!p          �       Y1,Y1,Y2
!z          �       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
"$0          ADD       SCREEN,SCREEN,Tmp,LSL #6
".&          STR       SCREEN,SCREEND
"8
"B$          �adr     (Help,INVERS)
"L          STR       Y2,DY21
"V; calc  x2/y2
"`,          LDR       Tmp,[Help,Y2,LSL #2]
"j"          MUL       Tmp,X2,Tmp
"t&          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
#,; calc di1 = i3/y3       ; i 8.6 di 8.16
#(2          MOV       Tmp,Tmp,LSR #4       ; .17
#25          MUL       I3,Tmp,I3              ; 8.23
#<3          MOV       I3,I3,ASR #17-10     ; 8.16
#F%          MOV       I1,I1,LSL #10
#P'          ADD       I1,I1,I3,ASR #1
#Z          STR       I3,I3D
#d          STR       I1,I1D
#n
#x'; 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
$,          STR       I2,I2D         ; 8.8
$"          LDR       I1,I1D
$,'          ADD       I1,I1,I2,LSL #7
$6          STR       I1,I1D
$@          
$J!          LDR       O,SCREEND
$T
$^          LDR       T,X1D
$h8          MOV       L,T,LSL #12  ; xl = (X1+0.5)*FIX
$r"          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
%          LDR       CT,DY32
%4          CMP       CT,#0          ; count= dy32
%&          BLNE      PIECE
%0.end
%:          LDR       13,spd
%D&          LDMFD     13!,{0-12,PC}^
%N]
%X=""
%b
%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
&           ADD       O,O,#320
& ; increment y shading
&*
&4          LDR       I,I1D
&>          LDR       H,I3D
&H          ADD       I,I,H
&R          STR       I,I1D
&\
&f           SUBS      CT,CT,#1
&p#          LDMEQFD   13!,{CT,15}
&z          CMP       O,T
&�          BLO       clip
&�
.eclip
&�; clip to bottom
&�$          ADD       T,T,#320*256
&�          SUBS      T,T,O
&�#          LDMLSFD   13!,{CT,15}
&�'          ADD       CT,CT,CT,LSL #2
&�#          CMP       CT,T,LSR #6
&�#          MOVHI     CT,T,LSR #6
&�?          CMP       L,R          ; left or right oriented ?
&�          BGT       span_2
&�          BAL       span
&�.endspan
'           ADD       O,O,#320
'          ADD       L,L,LA
'          ADD       R,R,RA
'$           SUBS      CT,CT,#5
'.; increment y shading
'8
'B          LDR       T,I1D
'L          LDR       I,I3D
'V          ADD       I,I,T
'`          STR       I,I1D
'j
't#          LDMEQFD   13!,{CT,15}
'~	.span
'�
'�
'�; clip to right
'�"          CMP       R,#320<<12
'�&          ADD       XR,O,R,ASR #12
'�!          ADDGT     XR,O,#320
'�; 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
(.          LDR       I,I1D           ; 10.4
("          MOV       I,I,ASR #8
((.          LDR       H,I2D           ; 10.4
(2          MLAMI     I,T,H,I
(<
(F"          MOV       T,L,ASR #4
(P          �       T,T,#255
(Z          MUL       T,H,T
(d$          SUB       I,I,T,ASR #8
(n
(x0          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
)          BCC       doit
)"          �mapbyte(C1)
),          �mapbyte(T)
)6&          ADD       C1,C1,T,LSL #8
)@          �mapbyte(T)
)J'          ADD       C1,C1,T,LSL #16
)T          �mapbyte(T)
)^'          ADD       C1,C1,T,LSL #24
)h"          STR       C1,[XL],#4
)r          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)
*'          ADD       C2,C2,T,LSL #24
*%          STMIA     (XL)!,{C1,C2}
*&          SUBS      H,H,#1
*0          BNE       loop2
*:.smallspan
*D          CMP       XL,XR
*N          BGE       endspan
*X          �mapbyte(C1)
*b"          STRB      C1,[XL],#1
*l          CMP       XL,XR
*v          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
*�          ADD       L,L,LA
*�          ADD       R,R,RA
*�           SUBS      CT,CT,#5
*�; increment y shading
+          LDR       T,I1D
+          LDR       I,I3D
+          ADD       I,I,T
+           STR       I,I1D
+*#          LDMEQFD   13!,{CT,15}
+4.span_2
+>; Clip to left
+H#          MOVS      T,R,ASR #12
+R&          ADDPL     XR,O,R,ASR #12
+\          MOVMI     XR,O
+f; clip to right
+p          MOV       T,#320
+z%          RSBS      T,T,L,ASR #12
+�&          ADD       XL,O,L,ASR #12
+�!          ADDPL     XL,O,#320
+�); 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
,$          ADD       I,I,H,LSR#16
,$          SUB       T,XL,XR
,.          CMP       T,#3
,8#          BLE       smallspan_2
,B          TST       XL,#3
,L"          BEQ       endloop1_2
,V.loop1_2  �mapbyte(C1)
,`$          STRB      C1,[XL,#-1]!
,j          TST       XL,#3
,t          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
-          �mapbyte(C2)
-          �mapbyte(T)
-('          ADD       C2,C2,T,LSL #24
-2          �mapbyte(T)
-<'          ADD       C2,C2,T,LSL #16
-F          �mapbyte(T)
-P&          ADD       C2,T,C2,ROR #8
-Z          �mapbyte(C1)
-d          �mapbyte(T)
-n'          ADD       C1,C1,T,LSL #24
-x          �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]!
.          CMP       XR,XL
."!          BEQ       endspan_2
.,          �mapbyte(C1)
.6$          STRB      C1,[XL,#-1]!
.@!          BAL       endspan_2
.J]
.T=""
.^
.h� �mapbyte(reg)
.r
[OPT PASS
.|!      MOV       reg,I,LSR #24
.�!      ADD       I,I,I,LSL #16
.�]
.� =""
�
00000000  0d 00 0a 0b f4 3e 20 46  4c 59 4e 0d 00 14 17 f4  |.....> FLYN.....|
00000010  20 28 63 29 20 4a 61 6e  20 56 6c 69 65 74 69 6e  | (c) Jan Vlietin|
00000020  63 6b 0d 00 1e 04 0d 00  28 37 f4 4f 4e 20 45 52  |ck......(7.ON ER|
00000030  52 4f 52 3a 4f 4e 20 45  52 52 4f 52 20 4f 46 46  |ROR:ON ERROR OFF|
00000040  3a 4d 4f 44 45 20 31 33  3a 52 45 50 4f 52 54 3a  |:MODE 13:REPORT:|
00000050  50 52 49 4e 54 20 45 52  4c 3a 45 4e 44 0d 00 32  |PRINT ERL:END..2|
00000060  04 0d 00 3c 12 de 20 73  74 61 63 6b 20 31 30 30  |...<.. stack 100|
00000070  30 30 30 0d 00 46 04 0d  00 50 04 0d 00 5a 08 c8  |000..F...P...Z..|
00000080  97 20 ee 0d 00 64 0c 2a  50 4f 49 4e 54 45 52 0d  |. ...d.*POINTER.|
00000090  00 6e 0b 62 61 6e 6b 73  3d 34 0d 00 78 3e 53 48  |.n.banks=4..x>SH|
000000a0  3d 37 20 20 20 20 20 20  20 20 20 20 20 20 20 3a  |=7             :|
000000b0  f4 20 44 65 74 65 72 6d  69 6e 65 73 20 74 68 65  |. Determines the|
000000c0  20 6e 75 6d 62 65 72 20  6f 66 20 70 61 74 63 68  | number of patch|
000000d0  65 73 3a 20 32 5e 53 48  0d 00 82 17 45 44 3d 32  |es: 2^SH....ED=2|
000000e0  5e 53 48 3a 44 31 3d 45  44 3a 44 32 3d 45 44 0d  |^SH:D1=ED:D2=ED.|
000000f0  00 8c 11 46 58 3d 33 3a  46 49 58 3d 32 5e 46 58  |...FX=3:FIX=2^FX|
00000100  0d 00 96 3d 48 4f 52 49  5a 4f 4e 3d 31 30 32 34  |...=HORIZON=1024|
00000110  20 20 20 20 20 20 3a f4  20 44 65 74 65 72 6d 69  |      :. Determi|
00000120  6e 65 73 20 68 6f 77 20  64 65 65 70 20 74 68 65  |nes how deep the|
00000130  20 6c 61 6e 64 20 65 78  74 65 6e 64 73 0d 00 a0  | land extends...|
00000140  42 5a 4f 4f 4d 3d 35 20  20 20 20 20 20 20 20 20  |BZOOM=5         |
00000150  20 20 20 3a f4 20 44 65  74 65 72 6d 69 6e 65 73  |   :. Determines|
00000160  20 74 68 65 20 70 68 79  63 69 63 61 6c 20 6d 65  | the phycical me|
00000170  61 73 75 72 65 73 20 6f  66 20 70 61 74 63 68 0d  |asures of patch.|
00000180  00 aa 13 de 20 50 55 4e  54 20 31 36 2a 44 31 2a  |.... PUNT 16*D1*|
00000190  44 32 0d 00 b4 13 de 20  56 4c 41 4b 20 31 32 2a  |D2..... VLAK 12*|
000001a0  44 31 2a 44 32 0d 00 c8  3d f4 20 54 68 65 20 61  |D1*D2...=. The a|
000001b0  72 72 61 79 20 50 55 4e  54 20 69 73 20 6f 66 20  |rray PUNT is of |
000001c0  73 69 7a 65 20 32 5e 53  48 20 61 6e 64 20 63 6f  |size 2^SH and co|
000001d0  6e 74 61 69 6e 73 20 66  6f 75 72 20 77 6f 72 64  |ntains four word|
000001e0  73 3a 0d 00 d2 35 f4 20  74 68 65 20 68 65 69 67  |s:...5. the heig|
000001f0  68 74 2c 20 70 72 6f 6a  65 63 74 65 64 20 78 2c  |ht, projected x,|
00000200  20 70 72 6f 6a 65 63 74  65 64 20 79 20 61 6e 64  | projected y and|
00000210  20 63 6f 6c 6f 75 72 0d  00 dc 04 0d 00 e6 25 de  | colour.......%.|
00000220  20 6d 61 70 5f 73 70 72  69 74 65 5f 68 65 69 67  | map_sprite_heig|
00000230  68 74 25 20 34 30 30 30  2b 28 45 44 2a 45 44 29  |ht% 4000+(ED*ED)|
00000240  0d 00 f0 25 de 20 6d 61  70 5f 73 70 72 69 74 65  |...%. map_sprite|
00000250  5f 63 6f 6c 6f 72 73 25  20 34 30 30 30 2b 28 45  |_colors% 4000+(E|
00000260  44 2a 45 44 29 0d 00 fa  3c c8 99 20 22 4f 53 5f  |D*ED)...<.. "OS_|
00000270  46 69 6c 65 22 2c 31 36  2c 22 3c 46 6c 79 6e 24  |File",16,"<Flyn$|
00000280  44 69 72 3e 2e 4d 41 50  5f 48 32 22 2c 6d 61 70  |Dir>.MAP_H2",map|
00000290  5f 73 70 72 69 74 65 5f  68 65 69 67 68 74 25 2c  |_sprite_height%,|
000002a0  30 0d 01 04 3b c8 99 20  22 4f 53 5f 46 69 6c 65  |0...;.. "OS_File|
000002b0  22 2c 31 36 2c 22 3c 46  6c 79 6e 24 44 69 72 3e  |",16,"<Flyn$Dir>|
000002c0  2e 4d 41 50 5f 43 22 2c  6d 61 70 5f 73 70 72 69  |.MAP_C",map_spri|
000002d0  74 65 5f 63 6f 6c 6f 72  73 25 2c 30 0d 01 0e 04  |te_colors%,0....|
000002e0  0d 01 18 11 f2 50 55 4e  54 45 4e 28 50 55 4e 54  |.....PUNTEN(PUNT|
000002f0  29 0d 01 22 0c f2 67 6f  75 72 61 75 64 0d 01 2c  |).."..gouraud..,|
00000300  0e d6 20 73 65 74 5f 6d  6f 64 65 0d 01 36 0c de  |.. set_mode..6..|
00000310  20 42 4c 4b 20 34 30 0d  01 40 1d 21 42 4c 4b 3d  | BLK 40..@.!BLK=|
00000320  37 3a 42 4c 4b 21 34 3d  31 35 30 3a 42 4c 4b 21  |7:BLK!4=150:BLK!|
00000330  38 3d 2d 31 0d 01 4a 24  c8 99 20 22 4f 53 5f 52  |8=-1..J$.. "OS_R|
00000340  65 61 64 56 64 75 56 61  72 69 61 62 6c 65 73 22  |eadVduVariables"|
00000350  2c 42 4c 4b 2c 42 4c 4b  0d 01 54 22 e7 20 28 62  |,BLK,BLK..T". (b|
00000360  61 6e 6b 73 3e 31 29 20  80 20 28 42 4c 4b 21 34  |anks>1) . (BLK!4|
00000370  3c 32 2a 21 42 4c 4b 29  20 8c 0d 01 5e 30 c8 99  |<2*!BLK) ...^0..|
00000380  20 22 4f 53 5f 43 68 61  6e 67 65 44 79 6e 61 6d  | "OS_ChangeDynam|
00000390  69 63 41 72 65 61 22 2c  32 2c 62 61 6e 6b 73 2a  |icArea",2,banks*|
000003a0  21 42 4c 4b 2d 42 4c 4b  21 34 0d 01 68 05 cd 0d  |!BLK-BLK!4..h...|
000003b0  01 72 0c 50 31 3d 32 2a  af 2f 33 0d 01 7c 0f e3  |.r.P1=2*./3..|..|
000003c0  20 49 3d 31 20 b8 20 32  35 35 0d 01 86 10 20 50  | I=1 . 255.... P|
000003d0  3d 49 2f 32 35 36 2a 32  2a af 0d 01 90 13 20 52  |=I/256*2*..... R|
000003e0  3d 31 32 38 2a 28 31 2b  9b 28 50 29 29 0d 01 9a  |=128*(1+.(P))...|
000003f0  18 20 47 3d 31 32 38 2a  28 31 2b 9b 28 32 2a 50  |. G=128*(1+.(2*P|
00000400  2b 50 31 29 29 0d 01 a4  16 20 42 3d 31 32 38 2a  |+P1)).... B=128*|
00000410  28 31 2b 9b 28 50 2d 50  31 29 29 0d 01 ae 0e 20  |(1+.(P-P1)).... |
00000420  fb 20 49 2c 52 2c 47 2c  42 0d 01 b8 07 ed 20 49  |. I,R,G,B..... I|
00000430  0d 01 c2 09 d6 20 73 65  74 0d 01 cc 04 0d 01 d6  |..... set.......|
00000440  09 f2 41 53 53 32 0d 01  e0 09 f2 6d 61 69 6e 0d  |..ASS2.....main.|
00000450  01 ea 13 d6 20 43 41 4c  43 5f 44 49 56 54 41 42  |.... CALC_DIVTAB|
00000460  4c 45 0d 01 f4 10 c8 97  20 b8 20 36 34 30 2c 35  |LE...... . 640,5|
00000470  31 32 0d 01 fe 07 d1 3d  30 0d 02 08 0a d6 20 6d  |12.....=0..... m|
00000480  61 69 6e 0d 02 12 07 54  3d 91 0d 02 1c 07 eb 20  |ain....T=...... |
00000490  30 0d 02 26 0b f1 20 54  2f 31 30 30 0d 02 30 05  |0..&.. T/100..0.|
000004a0  e0 0d 02 3a 04 0d 02 44  13 dd 20 f2 50 55 4e 54  |...:...D.. .PUNT|
000004b0  45 4e 28 50 55 4e 54 29  0d 02 4e 0b ea 20 49 25  |EN(PUNT)..N.. I%|
000004c0  2c 4a 25 0d 02 58 11 e3  20 4a 25 3d 30 20 b8 20  |,J%..X.. J%=0 . |
000004d0  44 32 2d 31 0d 02 62 11  e3 20 49 25 3d 30 20 b8  |D2-1..b.. I%=0 .|
000004e0  20 44 31 2d 31 0d 02 6c  33 68 65 69 67 68 74 25  | D1-1..l3height%|
000004f0  3d 3f 28 6d 61 70 5f 73  70 72 69 74 65 5f 68 65  |=?(map_sprite_he|
00000500  69 67 68 74 25 2b 35 36  2b 49 25 2b 28 4a 25 2a  |ight%+56+I%+(J%*|
00000510  45 44 29 29 2d 31 32 38  0d 02 76 12 f4 20 68 65  |ED))-128..v.. he|
00000520  69 67 68 74 25 3d 2d 31  33 30 0d 02 80 17 21 50  |ight%=-130....!P|
00000530  55 4e 54 3d 68 65 69 67  68 74 25 2a 46 49 58 2a  |UNT=height%*FIX*|
00000540  38 0d 02 8a 2c 63 6f 6c  25 3d 3f 28 6d 61 70 5f  |8...,col%=?(map_|
00000550  73 70 72 69 74 65 5f 63  6f 6c 6f 72 73 25 2b 35  |sprite_colors%+5|
00000560  36 2b 49 25 2b 28 4a 25  2a 45 44 29 29 0d 02 94  |6+I%+(J%*ED))...|
00000570  15 f4 49 46 20 63 6f 6c  25 3d 30 20 63 6f 6c 25  |..IF col%=0 col%|
00000580  3d 31 0d 02 9e 10 50 55  4e 54 21 31 32 3d 63 6f  |=1....PUNT!12=co|
00000590  6c 25 0d 02 a8 0c 50 55  4e 54 2b 3d 31 36 0d 02  |l%....PUNT+=16..|
000005a0  b2 05 ed 0d 02 bc 05 ed  0d 02 c6 05 e1 0d 02 d0  |................|
000005b0  04 0d 02 da 04 0d 02 e4  04 0d 02 ee 0b dd 20 f2  |.............. .|
000005c0  6d 61 69 6e 0d 02 f8 0b  ea 20 50 25 2c 51 25 0d  |main..... P%,Q%.|
000005d0  03 02 0d de 20 51 25 20  31 30 30 30 0d 03 0c 14  |.... Q% 1000....|
000005e0  e3 20 50 41 53 53 3d 30  20 b8 20 32 20 88 20 32  |. PASS=0 . 2 . 2|
000005f0  0d 03 16 09 50 25 3d 51  25 0d 03 20 0d 5b 4f 50  |....P%=Q%.. .[OP|
00000600  54 20 50 41 53 53 0d 03  2a 0e 2e 73 70 64 20 44  |T PASS..*..spd D|
00000610  43 44 20 30 0d 03 34 09  2e 6d 61 69 6e 0d 03 3e  |CD 0..4..main..>|
00000620  20 20 20 20 20 20 20 20  20 20 20 53 54 4d 46 44  |           STMFD|
00000630  20 20 20 20 20 31 33 21  2c 7b 31 34 7d 0d 03 48  |     13!,{14}..H|
00000640  18 20 20 20 20 20 20 20  20 20 20 53 54 52 20 31  |.          STR 1|
00000650  33 2c 73 70 64 0d 03 52  1c 20 20 20 20 20 20 20  |3,spd..R.       |
00000660  20 20 20 a4 61 64 72 28  31 33 2c 73 74 61 63 6b  |   .adr(13,stack|
00000670  29 0d 03 5c 27 20 20 20  20 20 20 20 20 20 20 42  |)..\'          B|
00000680  4c 20 20 20 20 20 20 20  20 63 6c 61 69 6d 5f 69  |L        claim_i|
00000690  6e 74 65 72 72 75 70 74  0d 03 66 0d 2e 6d 61 69  |nterrupt..f..mai|
000006a0  6e 6c 6f 6f 70 0d 03 70  1e 20 20 20 20 20 20 20  |nloop..p.       |
000006b0  20 20 20 4d 4f 56 20 20  20 20 20 20 20 30 2c 23  |   MOV       0,#|
000006c0  26 37 30 0d 03 7a 22 20  20 20 20 20 20 20 20 20  |&70..z"         |
000006d0  20 4c 44 52 20 20 20 20  20 20 20 31 2c 62 61 6e  | LDR       1,ban|
000006e0  6b 72 65 61 72 0d 03 84  1c 20 20 20 20 20 20 20  |krear....       |
000006f0  20 20 20 4d 4f 56 20 20  20 20 20 20 20 32 2c 23  |   MOV       2,#|
00000700  30 0d 03 8e 21 20 20 20  20 20 20 20 20 20 20 53  |0...!          S|
00000710  57 49 20 20 20 20 20 20  20 22 4f 53 5f 42 79 74  |WI       "OS_Byt|
00000720  65 22 0d 03 98 05 20 0d  03 a2 1b 20 20 20 20 20  |e".... ....     |
00000730  20 20 20 20 20 42 4c 20  20 20 20 20 20 20 20 73  |     BL        s|
00000740  65 74 0d 03 ac 1d 20 20  20 20 20 20 20 20 20 20  |et....          |
00000750  42 4c 20 20 20 20 20 20  20 20 63 6c 65 61 72 0d  |BL        clear.|
00000760  03 b6 1c 20 20 20 20 20  20 20 20 20 20 42 4c 20  |...          BL |
00000770  20 20 20 20 20 20 20 73  68 6f 77 0d 03 c0 23 20  |       show...# |
00000780  20 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |         BL     |
00000790  20 20 20 64 69 73 70 6c  61 79 5f 66 70 73 0d 03  |   display_fps..|
000007a0  ca 22 20 20 20 20 20 20  20 20 20 20 42 4c 20 20  |."          BL  |
000007b0  20 20 20 20 20 20 6e 65  78 74 5f 66 72 61 6d 65  |      next_frame|
000007c0  0d 03 d4 0e 20 20 20 20  20 20 20 20 20 20 0d 03  |....          ..|
000007d0  de 2c 20 20 20 20 20 20  20 20 20 20 53 57 49 20  |.,          SWI |
000007e0  20 20 20 20 20 20 22 4f  53 5f 52 65 61 64 45 73  |      "OS_ReadEs|
000007f0  63 61 70 65 53 74 61 74  65 22 0d 03 e8 20 20 20  |capeState"...   |
00000800  20 20 20 20 20 20 20 20  42 43 43 20 20 20 20 20  |        BCC     |
00000810  20 20 6d 61 69 6e 6c 6f  6f 70 0d 03 f2 0e 20 20  |  mainloop....  |
00000820  20 20 20 20 20 20 20 20  0d 03 fc 29 20 20 20 20  |        ...)    |
00000830  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 20 20  |      BL        |
00000840  72 65 6c 65 61 73 65 5f  69 6e 74 65 72 72 75 70  |release_interrup|
00000850  74 0d 04 06 18 20 20 20  20 20 20 20 20 20 20 4c  |t....          L|
00000860  44 52 20 31 33 2c 73 70  64 0d 04 10 20 20 20 20  |DR 13,spd...    |
00000870  20 20 20 20 20 20 20 4c  44 4d 46 44 20 20 20 20  |       LDMFD    |
00000880  20 31 33 21 2c 7b 50 43  7d 0d 04 1a 04 0d 04 24  | 13!,{PC}......$|
00000890  04 0d 04 2e 0f 2e 6e 65  78 74 5f 66 72 61 6d 65  |......next_frame|
000008a0  0d 04 38 23 20 20 20 20  20 20 20 20 20 20 53 57  |..8#          SW|
000008b0  49 20 20 20 20 20 20 20  22 4f 53 5f 49 6e 74 4f  |I       "OS_IntO|
000008c0  66 66 22 0d 04 42 23 20  20 20 20 20 20 20 20 20  |ff"..B#         |
000008d0  20 4c 44 52 20 20 20 20  20 20 20 31 2c 62 61 6e  | LDR       1,ban|
000008e0  6b 63 6f 75 6e 74 0d 04  4c 1e 20 20 20 20 20 20  |kcount..L.      |
000008f0  20 20 20 20 41 44 44 20  20 20 20 20 20 20 31 2c  |    ADD       1,|
00000900  31 2c 23 31 0d 04 56 23  20 20 20 20 20 20 20 20  |1,#1..V#        |
00000910  20 20 53 54 52 20 20 20  20 20 20 20 31 2c 62 61  |  STR       1,ba|
00000920  6e 6b 63 6f 75 6e 74 0d  04 60 22 20 20 20 20 20  |nkcount..`"     |
00000930  20 20 20 20 20 53 57 49  20 20 20 20 20 20 20 22  |     SWI       "|
00000940  4f 53 5f 49 6e 74 4f 6e  22 0d 04 6a 22 20 20 20  |OS_IntOn"..j"   |
00000950  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 20  |       LDR      |
00000960  20 31 2c 62 61 6e 6b 72  65 61 72 0d 04 74 20 20  | 1,bankrear..t  |
00000970  20 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |         CMP    |
00000980  20 20 20 31 2c 23 62 61  6e 6b 73 0d 04 7e 19 20  |   1,#banks..~. |
00000990  20 20 20 20 20 20 20 20  20 ec 51 20 20 20 20 20  |         .Q     |
000009a0  31 2c 23 30 0d 04 88 1e  20 20 20 20 20 20 20 20  |1,#0....        |
000009b0  20 20 41 44 44 20 20 20  20 20 20 20 31 2c 31 2c  |  ADD       1,1,|
000009c0  23 31 0d 04 92 22 20 20  20 20 20 20 20 20 20 20  |#1..."          |
000009d0  53 54 52 20 20 20 20 20  20 20 31 2c 62 61 6e 6b  |STR       1,bank|
000009e0  72 65 61 72 0d 04 9c 23  2e 64 65 63 69 6d 20 20  |rear...#.decim  |
000009f0  20 20 4c 44 52 20 20 20  20 20 20 20 30 2c 62 61  |  LDR       0,ba|
00000a00  6e 6b 66 72 6f 6e 74 0d  04 a6 1b 20 20 20 20 20  |nkfront....     |
00000a10  20 20 20 20 20 43 4d 50  20 20 20 20 20 20 20 30  |     CMP       0|
00000a20  2c 31 0d 04 b0 1d 20 20  20 20 20 20 20 20 20 20  |,1....          |
00000a30  42 45 51 20 20 20 20 20  20 20 64 65 63 69 6d 0d  |BEQ       decim.|
00000a40  04 ba 1e 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |...          MOV|
00000a50  20 20 20 20 20 20 20 50  43 2c 52 31 34 0d 04 c4  |       PC,R14...|
00000a60  04 0d 04 ce 1e 2e 74 69  6d 65 5f 63 6f 75 6e 74  |......time_count|
00000a70  65 72 20 20 20 20 20 20  20 45 51 55 44 20 30 0d  |er       EQUD 0.|
00000a80  04 d8 1e 2e 66 72 61 6d  65 5f 63 6f 75 6e 74 65  |....frame_counte|
00000a90  72 20 20 20 20 20 20 45  51 55 44 20 30 0d 04 e2  |r      EQUD 0...|
00000aa0  1e 2e 66 72 61 6d 65 5f  61 76 65 72 61 67 65 20  |..frame_average |
00000ab0  20 20 20 20 20 45 51 55  44 20 30 0d 04 ec 2f 2e  |     EQUD 0.../.|
00000ac0  6f 75 74 70 75 74 5f 62  75 66 66 65 72 20 20 20  |output_buffer   |
00000ad0  20 20 20 44 43 44 20 30  3a 44 43 44 20 30 3a 44  |   DCD 0:DCD 0:D|
00000ae0  43 44 20 30 3a 44 43 44  20 30 0d 04 f6 10 2e 64  |CD 0:DCD 0.....d|
00000af0  69 73 70 6c 61 79 5f 66  70 73 0d 05 00 24 20 20  |isplay_fps...$  |
00000b00  20 20 20 20 20 20 20 20  53 54 4d 46 44 20 20 20  |        STMFD   |
00000b10  20 20 31 33 21 2c 7b 30  2d 32 2c 31 34 7d 0d 05  |  13!,{0-2,14}..|
00000b20  0a 1c 20 20 20 20 20 20  20 20 20 20 53 57 49 20  |..          SWI |
00000b30  20 20 20 20 20 20 26 31  31 45 0d 05 14 28 20 20  |      &11E...(  |
00000b40  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00000b50  20 20 52 30 2c 66 72 61  6d 65 5f 61 76 65 72 61  |  R0,frame_avera|
00000b60  67 65 0d 05 1e 28 20 20  20 20 20 20 20 20 20 20  |ge...(          |
00000b70  41 44 52 20 20 20 20 20  20 20 52 31 2c 6f 75 74  |ADR       R1,out|
00000b80  70 75 74 5f 62 75 66 66  65 72 0d 05 28 1e 20 20  |put_buffer..(.  |
00000b90  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00000ba0  20 20 52 32 2c 23 31 36  0d 05 32 2c 20 20 20 20  |  R2,#16..2,    |
00000bb0  20 20 20 20 20 20 53 57  49 20 20 20 20 20 20 20  |      SWI       |
00000bc0  22 4f 53 5f 43 6f 6e 76  65 72 74 49 6e 74 65 67  |"OS_ConvertInteg|
00000bd0  65 72 31 22 0d 05 3c 23  20 20 20 20 20 20 20 20  |er1"..<#        |
00000be0  20 20 53 57 49 20 20 20  20 20 20 20 22 4f 53 5f  |  SWI       "OS_|
00000bf0  57 72 69 74 65 30 22 0d  05 46 24 20 20 20 20 20  |Write0"..F$     |
00000c00  20 20 20 20 20 4c 44 4d  46 44 20 20 20 20 20 31  |     LDMFD     1|
00000c10  33 21 2c 7b 30 2d 32 2c  50 43 7d 0d 05 50 04 0d  |3!,{0-2,PC}..P..|
00000c20  05 5a 11 2e 6d 61 72 6b  65 72 20 44 43 44 20 30  |.Z..marker DCD 0|
00000c30  0d 05 64 24 2e 74 69 63  6b 65 72 20 20 20 53 54  |..d$.ticker   ST|
00000c40  4d 46 44 20 20 20 20 20  31 33 21 2c 7b 30 2d 33  |MFD     13!,{0-3|
00000c50  2c 31 34 7d 0d 05 6e 20  20 20 20 20 20 20 20 20  |,14}..n         |
00000c60  20 20 4c 44 52 20 20 20  20 20 20 20 30 2c 6d 61  |  LDR       0,ma|
00000c70  72 6b 65 72 0d 05 78 1c  20 20 20 20 20 20 20 20  |rker..x.        |
00000c80  20 20 82 53 20 20 20 20  20 20 30 2c 30 2c 23 31  |  .S      0,0,#1|
00000c90  0d 05 82 20 20 20 20 20  20 20 20 20 20 20 53 54  |...           ST|
00000ca0  52 20 20 20 20 20 20 20  30 2c 6d 61 72 6b 65 72  |R       0,marker|
00000cb0  0d 05 8c 24 20 20 20 20  20 20 20 20 20 20 4c 44  |...$          LD|
00000cc0  4d 45 51 46 44 20 20 20  31 33 21 2c 7b 30 2d 33  |MEQFD   13!,{0-3|
00000cd0  2c 50 43 7d 0d 05 96 3a  20 20 20 20 20 20 20 20  |,PC}...:        |
00000ce0  20 20 4c 44 52 20 20 20  20 20 20 20 30 2c 74 69  |  LDR       0,ti|
00000cf0  6d 65 5f 63 6f 75 6e 74  65 72 20 20 3b 20 65 78  |me_counter  ; ex|
00000d00  65 63 75 74 65 20 61 74  20 35 30 20 48 7a 0d 05  |ecute at 50 Hz..|
00000d10  a0 1e 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |..          ADD |
00000d20  20 20 20 20 20 20 30 2c  30 2c 23 31 0d 05 aa 1d  |      0,0,#1....|
00000d30  20 20 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |          CMP   |
00000d40  20 20 20 20 30 2c 23 35  30 0d 05 b4 19 20 20 20  |    0,#50....   |
00000d50  20 20 20 20 20 20 20 ec  51 20 20 20 20 20 30 2c  |       .Q     0,|
00000d60  23 30 0d 05 be 26 20 20  20 20 20 20 20 20 20 20  |#0...&          |
00000d70  53 54 52 20 20 20 20 20  20 20 30 2c 74 69 6d 65  |STR       0,time|
00000d80  5f 63 6f 75 6e 74 65 72  0d 05 c8 27 20 20 20 20  |_counter...'    |
00000d90  20 20 20 20 20 20 4c 44  52 45 51 20 20 20 20 20  |      LDREQ     |
00000da0  31 2c 66 72 61 6d 65 5f  63 6f 75 6e 74 65 72 0d  |1,frame_counter.|
00000db0  05 d2 27 20 20 20 20 20  20 20 20 20 20 53 54 52  |..'          STR|
00000dc0  45 51 20 20 20 20 20 31  2c 66 72 61 6d 65 5f 61  |EQ     1,frame_a|
00000dd0  76 65 72 61 67 65 0d 05  dc 27 20 20 20 20 20 20  |verage...'      |
00000de0  20 20 20 20 53 54 52 45  51 20 20 20 20 20 30 2c  |    STREQ     0,|
00000df0  66 72 61 6d 65 5f 63 6f  75 6e 74 65 72 0d 05 e6  |frame_counter...|
00000e00  24 20 20 20 20 20 20 20  20 20 20 4c 44 4d 46 44  |$          LDMFD|
00000e10  20 20 20 20 20 31 33 21  2c 7b 30 2d 33 2c 50 43  |     13!,{0-3,PC|
00000e20  7d 0d 05 f0 04 0d 05 fa  04 0d 06 04 3a 20 2e 62  |}...........: .b|
00000e30  61 6e 6b 66 72 6f 6e 74  20 45 51 55 44 20 31 20  |ankfront EQUD 1 |
00000e40  20 20 20 20 20 3b 20 74  68 65 20 66 72 6f 6e 74  |     ; the front|
00000e50  20 66 72 61 6d 65 20 69  73 20 64 69 73 70 6c 61  | frame is displa|
00000e60  79 65 64 0d 06 0e 35 20  2e 62 61 6e 6b 72 65 61  |yed...5 .bankrea|
00000e70  72 20 20 45 51 55 44 20  32 20 20 20 20 20 20 3b  |r  EQUD 2      ;|
00000e80  20 74 68 65 20 72 65 61  72 20 66 72 61 6d 65 20  | the rear frame |
00000e90  69 73 20 64 72 61 77 6e  0d 06 18 3a 20 2e 62 61  |is drawn...: .ba|
00000ea0  6e 6b 63 6f 75 6e 74 20  45 51 55 44 20 30 20 20  |nkcount EQUD 0  |
00000eb0  20 20 20 20 3b 20 6e 72  2e 20 6f 66 20 72 65 61  |    ; nr. of rea|
00000ec0  64 79 20 66 72 61 6d 65  73 20 69 6e 20 71 75 65  |dy frames in que|
00000ed0  75 65 0d 06 22 04 0d 06  2c 3f 2e 74 69 6d 65 5f  |ue.."...,?.time_|
00000ee0  73 74 61 6d 70 20 44 43  44 20 30 3a 44 43 44 20  |stamp DCD 0:DCD |
00000ef0  30 3a 44 43 44 20 30 3a  44 43 44 20 30 3a 44 43  |0:DCD 0:DCD 0:DC|
00000f00  44 20 30 3a 44 43 44 20  30 3a 44 43 44 20 30 3a  |D 0:DCD 0:DCD 0:|
00000f10  44 43 44 20 30 0d 06 36  16 2e 73 79 6e 63 5f 74  |DCD 0..6..sync_t|
00000f20  69 6d 65 20 20 45 51 55  44 20 30 0d 06 40 04 0d  |ime  EQUD 0..@..|
00000f30  06 4a 0b 20 2e 76 73 79  6e 63 0d 06 54 3b 20 20  |.J. .vsync..T;  |
00000f40  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00000f50  20 20 30 2c 23 34 20 20  20 20 20 20 3b 20 63 68  |  0,#4      ; ch|
00000f60  65 63 6b 20 69 66 20 65  76 65 6e 74 20 69 73 20  |eck if event is |
00000f70  76 73 79 6e 63 0d 06 5e  2d 20 20 20 20 20 20 20  |vsync..^-       |
00000f80  20 20 20 4d 4f 56 4e 45  53 20 20 20 20 50 43 2c  |   MOVNES    PC,|
00000f90  31 34 20 20 20 20 20 3b  20 65 6c 73 65 20 65 78  |14     ; else ex|
00000fa0  69 74 0d 06 68 21 20 20  20 20 20 20 20 20 20 20  |it..h!          |
00000fb0  53 54 4d 46 44 20 20 20  20 20 31 33 21 2c 7b 30  |STMFD     13!,{0|
00000fc0  2d 31 7d 0d 06 72 1d 20  20 20 20 20 20 20 20 20  |-1}..r.         |
00000fd0  20 4d 4f 56 20 20 20 20  20 20 20 52 30 2c 50 43  | MOV       R0,PC|
00000fe0  0d 06 7c 35 20 20 20 20  20 20 20 20 20 20 84 52  |..|5          .R|
00000ff0  20 20 20 20 20 20 20 52  31 2c 52 30 2c 23 31 20  |       R1,R0,#1 |
00001000  20 20 20 20 3b 20 70 75  74 20 69 6e 20 73 63 76  |    ; put in scv|
00001010  20 6d 6f 64 65 0d 06 86  1d 20 20 20 20 20 20 20  | mode....       |
00001020  20 20 20 54 45 51 50 20  20 20 20 20 20 52 31 2c  |   TEQP      R1,|
00001030  23 30 0d 06 90 1d 20 20  20 20 20 20 20 20 20 20  |#0....          |
00001040  4d 4f 56 20 20 20 20 20  20 20 52 30 2c 52 30 0d  |MOV       R0,R0.|
00001050  06 9a 24 20 20 20 20 20  20 20 20 20 20 53 54 4d  |..$          STM|
00001060  46 44 20 20 20 20 20 31  33 21 2c 7b 30 2d 32 2c  |FD     13!,{0-2,|
00001070  31 34 7d 0d 06 a4 04 0d  06 ae 43 20 20 20 20 20  |14}.......C     |
00001080  20 20 20 20 20 4c 44 52  20 20 20 20 20 20 20 30  |     LDR       0|
00001090  2c 73 79 6e 63 5f 74 69  6d 65 20 20 20 20 20 3b  |,sync_time     ;|
000010a0  20 69 6e 63 72 65 6d 65  6e 74 20 73 79 6e 63 20  | increment sync |
000010b0  74 69 6d 65 20 65 76 65  72 79 0d 06 b8 2f 20 20  |time every.../  |
000010c0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000010d0  20 20 30 2c 30 2c 23 31  20 20 20 20 20 20 20 20  |  0,0,#1        |
000010e0  20 20 3b 20 76 73 79 6e  63 0d 06 c2 23 20 20 20  |  ; vsync...#   |
000010f0  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 20  |       STR      |
00001100  20 30 2c 73 79 6e 63 5f  74 69 6d 65 0d 06 cc 04  | 0,sync_time....|
00001110  0d 06 d6 43 20 20 20 20  20 20 20 20 20 20 4c 44  |...C          LD|
00001120  52 20 20 20 20 20 20 20  52 30 2c 62 61 6e 6b 63  |R       R0,bankc|
00001130  6f 75 6e 74 20 20 20 3b  20 69 66 20 6e 6f 20 6e  |ount   ; if no n|
00001140  65 77 20 66 72 61 6d 65  73 20 61 76 61 69 6c 61  |ew frames availa|
00001150  62 6c 65 0d 06 e0 48 20  20 20 20 20 20 20 20 20  |ble...H         |
00001160  20 43 4d 50 20 20 20 20  20 20 20 52 30 2c 23 30  | CMP       R0,#0|
00001170  20 20 20 20 20 20 20 20  20 20 3b 20 74 68 65 6e  |          ; then|
00001180  20 64 69 73 70 6c 61 79  20 74 68 65 20 70 72 65  | display the pre|
00001190  76 69 6f 75 73 20 66 72  61 6d 65 0d 06 ea 20 20  |vious frame...  |
000011a0  20 20 20 20 20 20 20 20  20 42 45 51 20 20 20 20  |         BEQ    |
000011b0  20 20 20 6e 6f 5f 68 75  72 72 79 0d 06 f4 04 0d  |   no_hurry.....|
000011c0  06 fe 50 20 20 20 20 20  20 20 20 20 20 53 55 42  |..P          SUB|
000011d0  20 20 20 20 20 20 20 52  30 2c 52 30 2c 23 31 20  |       R0,R0,#1 |
000011e0  20 20 20 20 20 20 3b 20  65 6c 73 65 20 64 69 73  |      ; else dis|
000011f0  70 6c 61 79 20 6e 65 77  20 66 72 61 6d 65 20 61  |play new frame a|
00001200  6e 64 20 75 70 64 61 74  65 20 71 75 65 75 65 0d  |nd update queue.|
00001210  07 08 24 20 20 20 20 20  20 20 20 20 20 53 54 52  |..$          STR|
00001220  20 20 20 20 20 20 20 52  30 2c 62 61 6e 6b 63 6f  |       R0,bankco|
00001230  75 6e 74 0d 07 12 24 20  20 20 20 20 20 20 20 20  |unt...$         |
00001240  20 4c 44 52 20 20 20 20  20 20 20 52 31 2c 62 61  | LDR       R1,ba|
00001250  6e 6b 66 72 6f 6e 74 0d  07 1c 21 20 20 20 20 20  |nkfront...!     |
00001260  20 20 20 20 20 43 4d 50  20 20 20 20 20 20 20 52  |     CMP       R|
00001270  31 2c 23 62 61 6e 6b 73  0d 07 26 1a 20 20 20 20  |1,#banks..&.    |
00001280  20 20 20 20 20 20 ec 51  20 20 20 20 20 52 31 2c  |      .Q     R1,|
00001290  23 30 0d 07 30 20 20 20  20 20 20 20 20 20 20 20  |#0..0           |
000012a0  41 44 44 20 20 20 20 20  20 20 52 31 2c 52 31 2c  |ADD       R1,R1,|
000012b0  23 31 0d 07 3a 24 20 20  20 20 20 20 20 20 20 20  |#1..:$          |
000012c0  53 54 52 20 20 20 20 20  20 20 52 31 2c 62 61 6e  |STR       R1,ban|
000012d0  6b 66 72 6f 6e 74 0d 07  44 1f 20 20 20 20 20 20  |kfront..D.      |
000012e0  20 20 20 20 4d 4f 56 20  20 20 20 20 20 20 52 30  |    MOV       R0|
000012f0  2c 23 26 37 31 0d 07 4e  34 20 20 20 20 20 20 20  |,#&71..N4       |
00001300  20 20 20 53 57 49 20 20  20 20 20 20 20 36 20 20  |   SWI       6  |
00001310  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00001320  22 4f 53 5f 42 79 74 65  22 0d 07 58 04 0d 07 62  |"OS_Byte"..X...b|
00001330  28 20 20 20 20 20 20 20  20 20 20 4c 44 52 20 20  |(          LDR  |
00001340  20 20 20 20 20 52 30 2c  66 72 61 6d 65 5f 63 6f  |     R0,frame_co|
00001350  75 6e 74 65 72 0d 07 6c  20 20 20 20 20 20 20 20  |unter..l        |
00001360  20 20 20 41 44 44 20 20  20 20 20 20 20 52 30 2c  |   ADD       R0,|
00001370  52 30 2c 23 31 0d 07 76  28 20 20 20 20 20 20 20  |R0,#1..v(       |
00001380  20 20 20 53 54 52 20 20  20 20 20 20 20 52 30 2c  |   STR       R0,|
00001390  66 72 61 6d 65 5f 63 6f  75 6e 74 65 72 0d 07 80  |frame_counter...|
000013a0  04 0d 07 8a 0e 20 2e 6e  6f 5f 68 75 72 72 79 0d  |..... .no_hurry.|
000013b0  07 94 24 20 20 20 20 20  20 20 20 20 20 4c 44 4d  |..$          LDM|
000013c0  46 44 20 20 20 20 20 31  33 21 2c 7b 30 2d 32 2c  |FD     13!,{0-2,|
000013d0  31 34 7d 0d 07 9e 38 20  20 20 20 20 20 20 20 20  |14}...8         |
000013e0  20 54 45 51 50 20 20 20  20 20 20 52 30 2c 23 30  | TEQP      R0,#0|
000013f0  20 20 20 20 20 3b 20 70  75 74 20 62 61 63 6b 20  |     ; put back |
00001400  69 6e 20 69 72 71 20 6d  6f 64 65 0d 07 a8 1d 20  |in irq mode.... |
00001410  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |         MOV    |
00001420  20 20 20 52 30 2c 52 30  0d 07 b2 21 20 20 20 20  |   R0,R0...!    |
00001430  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 20 20  |      LDMFD     |
00001440  31 33 21 2c 7b 30 2d 31  7d 0d 07 bc 1e 20 20 20  |13!,{0-1}....   |
00001450  20 20 20 20 20 20 20 4d  4f 56 53 20 20 20 20 20  |       MOVS     |
00001460  20 50 43 2c 52 31 34 0d  07 c6 04 0d 07 d0 14 2e  | PC,R14.........|
00001470  63 6c 61 69 6d 5f 69 6e  74 65 72 72 75 70 74 0d  |claim_interrupt.|
00001480  07 da 1f 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |...          MOV|
00001490  20 20 20 20 20 20 20 52  30 2c 23 26 37 30 0d 07  |       R0,#&70..|
000014a0  e4 24 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |.$          LDR |
000014b0  20 20 20 20 20 20 52 31  2c 62 61 6e 6b 66 72 6f  |      R1,bankfro|
000014c0  6e 74 0d 07 ee 21 20 20  20 20 20 20 20 20 20 20  |nt...!          |
000014d0  53 57 49 20 20 20 20 20  20 20 22 4f 53 5f 42 79  |SWI       "OS_By|
000014e0  74 65 22 0d 07 f8 42 20  20 20 20 20 20 20 20 20  |te"...B         |
000014f0  20 53 57 49 20 20 20 20  20 20 20 26 31 30 43 20  | SWI       &10C |
00001500  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00001510  20 63 6c 65 61 72 20 66  72 61 6d 65 20 61 74 20  | clear frame at |
00001520  66 72 6f 6e 74 0d 08 02  30 20 20 20 20 20 20 20  |front...0       |
00001530  20 20 20 4d 4f 56 20 20  20 20 20 20 20 52 30 2c  |   MOV       R0,|
00001540  23 26 31 43 20 20 20 3b  20 63 6c 61 69 6d 20 74  |#&1C   ; claim t|
00001550  69 63 6b 65 72 0d 08 0c  21 20 20 20 20 20 20 20  |icker...!       |
00001560  20 20 20 41 44 52 20 20  20 20 20 20 20 52 31 2c  |   ADR       R1,|
00001570  74 69 63 6b 65 72 0d 08  16 1d 20 20 20 20 20 20  |ticker....      |
00001580  20 20 20 20 4d 4f 56 20  20 20 20 20 20 20 52 32  |    MOV       R2|
00001590  2c 23 30 0d 08 20 22 20  20 20 20 20 20 20 20 20  |,#0.. "         |
000015a0  20 53 57 49 20 20 20 20  20 20 20 22 4f 53 5f 43  | SWI       "OS_C|
000015b0  6c 61 69 6d 22 0d 08 2a  1f 20 20 20 20 20 20 20  |laim"..*.       |
000015c0  20 20 20 4d 4f 56 20 20  20 20 20 20 20 52 30 2c  |   MOV       R0,|
000015d0  23 26 31 30 0d 08 34 20  20 20 20 20 20 20 20 20  |#&10..4         |
000015e0  20 20 41 44 52 20 20 20  20 20 20 20 52 31 2c 76  |  ADR       R1,v|
000015f0  73 79 6e 63 0d 08 3e 1d  20 20 20 20 20 20 20 20  |sync..>.        |
00001600  20 20 4d 4f 56 20 20 20  20 20 20 20 52 32 2c 23  |  MOV       R2,#|
00001610  30 0d 08 48 22 20 20 20  20 20 20 20 20 20 20 53  |0..H"          S|
00001620  57 49 20 20 20 20 20 20  20 22 4f 53 5f 43 6c 61  |WI       "OS_Cla|
00001630  69 6d 22 0d 08 52 1e 20  20 20 20 20 20 20 20 20  |im"..R.         |
00001640  20 4d 4f 56 20 20 20 20  20 20 20 52 30 2c 23 31  | MOV       R0,#1|
00001650  34 0d 08 5c 1d 20 20 20  20 20 20 20 20 20 20 4d  |4..\.          M|
00001660  4f 56 20 20 20 20 20 20  20 52 31 2c 23 34 0d 08  |OV       R1,#4..|
00001670  66 21 20 20 20 20 20 20  20 20 20 20 53 57 49 20  |f!          SWI |
00001680  20 20 20 20 20 20 22 4f  53 5f 42 79 74 65 22 0d  |      "OS_Byte".|
00001690  08 70 1e 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |.p.          MOV|
000016a0  20 20 20 20 20 20 20 50  43 2c 52 31 34 0d 08 7a  |       PC,R14..z|
000016b0  04 0d 08 84 16 2e 72 65  6c 65 61 73 65 5f 69 6e  |......release_in|
000016c0  74 65 72 72 75 70 74 0d  08 8e 24 20 20 20 20 20  |terrupt...$     |
000016d0  20 20 20 20 20 4c 44 52  20 20 20 20 20 20 20 52  |     LDR       R|
000016e0  30 2c 62 61 6e 6b 63 6f  75 6e 74 0d 08 98 1d 20  |0,bankcount.... |
000016f0  20 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |         CMP    |
00001700  20 20 20 52 30 2c 23 30  0d 08 a2 4f 20 20 20 20  |   R0,#0...O    |
00001710  20 20 20 20 20 20 42 4e  45 20 20 20 20 20 20 20  |      BNE       |
00001720  72 65 6c 65 61 73 65 5f  69 6e 74 65 72 72 75 70  |release_interrup|
00001730  74 20 20 20 3b 20 64 69  73 70 6c 61 79 20 72 65  |t   ; display re|
00001740  6d 61 69 6e 69 6e 67 20  66 72 61 6d 65 73 20 69  |maining frames i|
00001750  6e 20 71 75 65 75 65 0d  08 ac 1e 20 20 20 20 20  |n queue....     |
00001760  20 20 20 20 20 4d 4f 56  20 20 20 20 20 20 20 52  |     MOV       R|
00001770  30 2c 23 31 33 0d 08 b6  1d 20 20 20 20 20 20 20  |0,#13....       |
00001780  20 20 20 4d 4f 56 20 20  20 20 20 20 20 52 31 2c  |   MOV       R1,|
00001790  23 34 0d 08 c0 21 20 20  20 20 20 20 20 20 20 20  |#4...!          |
000017a0  53 57 49 20 20 20 20 20  20 20 22 4f 53 5f 42 79  |SWI       "OS_By|
000017b0  74 65 22 0d 08 ca 1f 20  20 20 20 20 20 20 20 20  |te"....         |
000017c0  20 4d 4f 56 20 20 20 20  20 20 20 52 30 2c 23 26  | MOV       R0,#&|
000017d0  31 30 0d 08 d4 20 20 20  20 20 20 20 20 20 20 20  |10...           |
000017e0  41 44 52 20 20 20 20 20  20 20 52 31 2c 76 73 79  |ADR       R1,vsy|
000017f0  6e 63 0d 08 de 1d 20 20  20 20 20 20 20 20 20 20  |nc....          |
00001800  4d 4f 56 20 20 20 20 20  20 20 52 32 2c 23 30 0d  |MOV       R2,#0.|
00001810  08 e8 24 20 20 20 20 20  20 20 20 20 20 53 57 49  |..$          SWI|
00001820  20 20 20 20 20 20 20 22  4f 53 5f 52 65 6c 65 61  |       "OS_Relea|
00001830  73 65 22 0d 08 f2 1f 20  20 20 20 20 20 20 20 20  |se"....         |
00001840  20 4d 4f 56 20 20 20 20  20 20 20 52 30 2c 23 26  | MOV       R0,#&|
00001850  31 43 0d 08 fc 21 20 20  20 20 20 20 20 20 20 20  |1C...!          |
00001860  41 44 52 20 20 20 20 20  20 20 52 31 2c 74 69 63  |ADR       R1,tic|
00001870  6b 65 72 0d 09 06 1d 20  20 20 20 20 20 20 20 20  |ker....         |
00001880  20 4d 4f 56 20 20 20 20  20 20 20 52 32 2c 23 30  | MOV       R2,#0|
00001890  0d 09 10 24 20 20 20 20  20 20 20 20 20 20 53 57  |...$          SW|
000018a0  49 20 20 20 20 20 20 20  22 4f 53 5f 52 65 6c 65  |I       "OS_Rele|
000018b0  61 73 65 22 0d 09 1a 1e  20 20 20 20 20 20 20 20  |ase"....        |
000018c0  20 20 4d 4f 56 20 20 20  20 20 20 20 50 43 2c 52  |  MOV       PC,R|
000018d0  31 34 0d 09 24 05 5d 0d  09 2e 05 ed 0d 09 38 09  |14..$.].......8.|
000018e0  51 25 3d 50 25 0d 09 42  05 e1 0d 09 4c 04 0d 09  |Q%=P%..B....L...|
000018f0  56 0b dd 20 f2 41 53 53  32 0d 09 60 0b ea 20 50  |V.. .ASS2..`.. P|
00001900  25 2c 51 25 0d 09 6a 0e  de 20 51 25 20 32 30 30  |%,Q%..j.. Q% 200|
00001910  30 30 0d 09 74 04 0d 09  7e 12 de 20 43 53 54 41  |00..t...~.. CSTA|
00001920  42 20 38 2a 31 30 32 34  0d 09 88 10 e3 20 49 3d  |B 8*1024..... I=|
00001930  30 20 b8 20 31 30 32 33  0d 09 92 0d 48 3d af 2f  |0 . 1023....H=./|
00001940  35 31 32 2a 49 0d 09 9c  18 43 53 54 41 42 21 28  |512*I....CSTAB!(|
00001950  49 2a 38 29 3d 9b 28 48  29 2a 32 35 36 0d 09 a6  |I*8)=.(H)*256...|
00001960  1a 43 53 54 41 42 21 28  49 2a 38 2b 34 29 3d b5  |.CSTAB!(I*8+4)=.|
00001970  28 48 29 2a 32 35 36 0d  09 b0 05 ed 0d 09 ba 04  |(H)*256.........|
00001980  0d 09 c4 17 de 20 44 49  54 41 42 4c 45 20 34 30  |..... DITABLE 40|
00001990  30 30 2a 31 36 2a 34 0d  09 ce 14 e3 20 50 41 53  |00*16*4..... PAS|
000019a0  53 3d 30 20 b8 20 32 20  88 20 32 0d 09 d8 41 41  |S=0 . 2 . 2...AA|
000019b0  3d 30 3a 42 3d 31 3a 54  41 42 3d 32 3a 54 3d 33  |=0:B=1:TAB=2:T=3|
000019c0  3a 4e 52 3d 34 3a 58 3d  35 3a 59 3d 36 3a 49 3d  |:NR=4:X=5:Y=6:I=|
000019d0  37 3a 4a 3d 38 3a 43 53  3d 39 3a 53 4e 3d 31 30  |7:J=8:CS=9:SN=10|
000019e0  3a 48 3d 31 31 3a 44 49  54 3d 31 32 0d 09 e2 0f  |:H=11:DIT=12....|
000019f0  5a 3d 54 3a 4e 3d 34 3a  51 3d 32 0d 09 ec 1d 50  |Z=T:N=4:Q=2....P|
00001a00  30 3d 41 3a 50 31 3d 42  3a 50 32 3d 49 3a 50 33  |0=A:P1=B:P2=I:P3|
00001a10  3d 4a 3a 50 34 3d 53 4e  0d 09 f6 09 50 25 3d 51  |=J:P4=SN....P%=Q|
00001a20  25 0d 0a 00 0d 5b 4f 50  54 20 50 41 53 53 0d 0a  |%....[OPT PASS..|
00001a30  0a 04 0d 0a 14 11 2e 46  52 45 45 44 20 45 51 55  |.......FREED EQU|
00001a40  44 20 30 0d 0a 1e 14 2e  56 4c 54 41 42 20 45 51  |D 0.....VLTAB EQ|
00001a50  55 44 20 56 4c 41 4b 0d  0a 28 14 2e 50 55 54 41  |UD VLAK..(..PUTA|
00001a60  42 20 45 51 55 44 20 50  55 4e 54 0d 0a 32 12 2e  |B EQUD PUNT..2..|
00001a70  6e 72 20 45 51 55 44 20  44 31 2a 44 32 0d 0a 3c  |nr EQUD D1*D2..<|
00001a80  13 2e 6e 72 32 20 45 51  55 44 20 44 31 2a 44 32  |..nr2 EQUD D1*D2|
00001a90  0d 0a 46 0e 2e 52 58 20  45 51 55 44 20 30 0d 0a  |..F..RX EQUD 0..|
00001aa0  50 0e 2e 52 59 20 45 51  55 44 20 30 0d 0a 5a 19  |P..RY EQUD 0..Z.|
00001ab0  2e 43 53 44 20 45 51 55  44 20 9b 28 af 2f 32 30  |.CSD EQUD .(./20|
00001ac0  29 2a 32 35 36 0d 0a 64  19 2e 53 4e 44 20 45 51  |)*256..d..SND EQ|
00001ad0  55 44 20 b5 28 af 2f 32  30 29 2a 32 35 36 0d 0a  |UD .(./20)*256..|
00001ae0  6e 16 2e 43 53 54 41 42  44 20 45 51 55 44 20 43  |n..CSTABD EQUD C|
00001af0  53 54 41 42 0d 0a 78 12  2e 48 31 44 20 45 51 55  |STAB..x..H1D EQU|
00001b00  44 20 31 36 2a 38 0d 0a  82 0f 2e 48 32 44 20 45  |D 16*8.....H2D E|
00001b10  51 55 44 20 30 0d 0a 8c  16 2e 44 49 54 44 20 45  |QUD 0.....DITD E|
00001b20  51 55 44 20 44 49 54 41  42 4c 45 0d 0a 96 16 2e  |QUD DITABLE.....|
00001b30  44 4e 52 44 20 45 51 55  44 20 34 30 30 30 2a 31  |DNRD EQUD 4000*1|
00001b40  36 0d 0a a0 17 2e 79 72  6f 74 20 45 51 55 44 20  |6.....yrot EQUD |
00001b50  30 3a 45 51 55 44 20 30  0d 0a aa 11 2e 68 69 67  |0:EQUD 0.....hig|
00001b60  68 74 20 45 51 55 44 20  30 0d 0a b4 04 0d 0a be  |ht EQUD 0.......|
00001b70  04 0d 0a c8 12 2e 43 41  4c 43 5f 44 49 56 54 41  |......CALC_DIVTA|
00001b80  42 4c 45 0d 0a d2 10 4c  44 52 20 44 49 54 2c 44  |BLE....LDR DIT,D|
00001b90  49 54 44 0d 0a dc 0e 4c  44 52 20 49 2c 44 4e 52  |ITD....LDR I,DNR|
00001ba0  44 0d 0a e6 0c 2e 44 56  4c 4f 4f 50 32 0d 0a f0  |D.....DVLOOP2...|
00001bb0  12 4d 4f 56 20 54 2c 23  32 30 30 3c 3c 31 36 0d  |.MOV T,#200<<16.|
00001bc0  0a fa 0b 4d 4f 56 20 4e  2c 49 0d 0b 04 0c 4d 4f  |...MOV N,I....MO|
00001bd0  56 20 4a 2c 23 30 0d 0b  0e 0c 4d 4f 56 20 51 2c  |V J,#0....MOV Q,|
00001be0  23 30 0d 0b 18 0c 2e 44  56 4c 4f 4f 50 33 0d 0b  |#0.....DVLOOP3..|
00001bf0  22 0b 43 4d 50 20 4e 2c  54 0d 0b 2c 14 4d 4f 56  |".CMP N,T..,.MOV|
00001c00  4c 4f 20 4e 2c 4e 2c 4c  53 4c 20 23 31 0d 0b 36  |LO N,N,LSL #1..6|
00001c10  10 41 44 44 4c 4f 20 4a  2c 4a 2c 23 31 0d 0b 40  |.ADDLO J,J,#1..@|
00001c20  0f 42 4c 4f 20 44 56 4c  4f 4f 50 33 0d 0b 4a 11  |.BLO DVLOOP3..J.|
00001c30  4d 4f 56 20 4e 2c 4e 2c  4c 53 52 20 4a 0d 0b 54  |MOV N,N,LSR J..T|
00001c40  0c 2e 44 56 4c 4f 4f 50  31 0d 0b 5e 11 43 4d 50  |..DVLOOP1..^.CMP|
00001c50  20 54 2c 4e 2c 4c 53 4c  20 4a 0d 0b 68 15 53 55  | T,N,LSL J..h.SU|
00001c60  42 48 53 20 54 2c 54 2c  4e 2c 4c 53 4c 20 4a 0d  |BHS T,T,N,LSL J.|
00001c70  0b 72 0d 41 44 43 20 51  2c 51 2c 51 0d 0b 7c 0f  |.r.ADC Q,Q,Q..|.|
00001c80  53 55 42 53 20 4a 2c 4a  2c 23 31 0d 0b 86 0f 42  |SUBS J,J,#1....B|
00001c90  50 4c 20 44 56 4c 4f 4f  50 31 0d 0b 90 18 53 54  |PL DVLOOP1....ST|
00001ca0  52 20 51 2c 5b 44 49 54  2c 49 2c 4c 53 4c 20 23  |R Q,[DIT,I,LSL #|
00001cb0  32 5d 0d 0b 9a 0f 53 55  42 53 20 49 2c 49 2c 23  |2]....SUBS I,I,#|
00001cc0  31 0d 0b a4 0f 42 4e 45  20 44 56 4c 4f 4f 50 32  |1....BNE DVLOOP2|
00001cd0  0d 0b ae 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 0b  |....MOV PC,R14..|
00001ce0  b8 04 0d 0b c2 14 2e 44  45 42 20 44 43 44 20 30  |.......DEB DCD 0|
00001cf0  3a 44 43 44 20 30 0d 0b  cc 09 2e 73 68 6f 77 0d  |:DCD 0.....show.|
00001d00  0b d6 12 53 54 4d 46 44  20 31 33 21 2c 7b 31 34  |...STMFD 13!,{14|
00001d10  7d 0d 0b e0 12 53 57 49  20 22 4f 53 5f 4d 6f 75  |}....SWI "OS_Mou|
00001d20  73 65 22 0d 0b ea 10 53  55 42 20 41 2c 41 2c 23  |se"....SUB A,A,#|
00001d30  36 34 30 0d 0b f4 04 0d  0b fe 0d 4c 44 52 20 54  |640........LDR T|
00001d40  2c 48 31 44 0d 0c 08 1a  43 4d 50 20 51 2c 23 34  |,H1D....CMP Q,#4|
00001d50  3a 41 44 44 45 51 20 54  2c 54 2c 23 31 36 0d 0c  |:ADDEQ T,T,#16..|
00001d60  12 1a 43 4d 50 20 51 2c  23 31 3a 53 55 42 45 51  |..CMP Q,#1:SUBEQ|
00001d70  20 54 2c 54 2c 23 31 36  0d 0c 1c 0d 53 54 52 20  | T,T,#16....STR |
00001d80  54 2c 48 31 44 0d 0c 26  04 0d 0c 30 0d 4c 44 52  |T,H1D..&...0.LDR|
00001d90  20 54 2c 48 32 44 0d 0c  3a 1a 43 4d 50 20 51 2c  | T,H2D..:.CMP Q,|
00001da0  23 36 3a 41 44 44 45 51  20 54 2c 54 2c 23 31 36  |#6:ADDEQ T,T,#16|
00001db0  0d 0c 44 1a 43 4d 50 20  51 2c 23 33 3a 53 55 42  |..D.CMP Q,#3:SUB|
00001dc0  45 51 20 54 2c 54 2c 23  31 36 0d 0c 4e 0d 53 54  |EQ T,T,#16..N.ST|
00001dd0  52 20 54 2c 48 32 44 0d  0c 58 04 0d 0c 62 0f 4c  |R T,H2D..X...b.L|
00001de0  44 52 20 54 2c 68 69 67  68 74 0d 0c 6c 1e 43 4d  |DR T,hight..l.CM|
00001df0  50 20 51 2c 23 35 3a 41  44 44 45 51 20 54 2c 54  |P Q,#5:ADDEQ T,T|
00001e00  2c 23 33 32 2a 46 49 58  0d 0c 76 1e 43 4d 50 20  |,#32*FIX..v.CMP |
00001e10  51 2c 23 32 3a 53 55 42  45 51 20 54 2c 54 2c 23  |Q,#2:SUBEQ T,T,#|
00001e20  33 32 2a 46 49 58 0d 0c  80 14 43 4d 50 20 54 2c  |32*FIX....CMP T,|
00001e30  23 32 35 36 2a 46 49 58  2a 36 0d 0c 8a 16 4d 4f  |#256*FIX*6....MO|
00001e40  56 47 45 20 54 2c 23 32  35 36 2a 46 49 58 2a 36  |VGE T,#256*FIX*6|
00001e50  0d 0c 94 14 43 4d 4e 20  54 2c 23 32 35 36 2a 46  |....CMN T,#256*F|
00001e60  49 58 2a 36 0d 0c 9e 16  4d 56 4e 4c 45 20 54 2c  |IX*6....MVNLE T,|
00001e70  23 32 35 36 2a 46 49 58  2a 36 0d 0c a8 0f 53 54  |#256*FIX*6....ST|
00001e80  52 20 54 2c 68 69 67 68  74 0d 0c b2 04 0d 0c bc  |R T,hight.......|
00001e90  04 0d 0c c6 04 0d 0c d0  12 4c 44 52 20 54 41 42  |.........LDR TAB|
00001ea0  2c 43 53 54 41 42 44 0d  0c da 0c 4d 56 4e 20 54  |,CSTABD....MVN T|
00001eb0  2c 23 30 0d 0c e4 13 4d  4f 56 20 54 2c 54 2c 4c  |,#0....MOV T,T,L|
00001ec0  53 52 20 23 32 32 0d 0c  ee 0c 4d 56 4e 20 48 2c  |SR #22....MVN H,|
00001ed0  23 30 0d 0c f8 13 4d 4f  56 20 48 2c 48 2c 4c 53  |#0....MOV H,H,LS|
00001ee0  52 20 23 31 36 0d 0d 02  04 0d 0d 0c 12 80 20 49  |R #16......... I|
00001ef0  2c 54 2c 41 2c 4c 53 4c  20 23 31 0d 0d 16 33 41  |,T,A,LSL #1...3A|
00001f00  44 44 20 49 2c 54 41 42  2c 49 2c 4c 53 4c 20 23  |DD I,TAB,I,LSL #|
00001f10  33 20 20 20 20 3b 20 67  65 74 20 63 6f 73 20 61  |3    ; get cos a|
00001f20  6e 64 20 73 69 6e 20 79  2d 61 6e 67 6c 65 0d 0d  |nd sin y-angle..|
00001f30  20 13 4c 44 4d 49 41 20  49 2c 7b 43 53 2c 53 4e  | .LDMIA I,{CS,SN|
00001f40  7d 0d 0d 2a 0f 41 44 52  20 20 4a 2c 79 72 6f 74  |}..*.ADR  J,yrot|
00001f50  0d 0d 34 13 53 54 4d 49  41 20 4a 2c 7b 43 53 2c  |..4.STMIA J,{CS,|
00001f60  53 4e 7d 0d 0d 3e 04 0d  0d 48 04 0d 0d 52 10 52  |SN}..>...H...R.R|
00001f70  53 42 20 53 4e 2c 53 4e  2c 23 30 0d 0d 5c 0e 4d  |SB SN,SN,#0..\.M|
00001f80  55 4c 20 41 2c 53 4e 2c  42 0d 0d 66 0e 4d 55 4c  |UL A,SN,B..f.MUL|
00001f90  20 42 2c 43 53 2c 42 0d  0d 70 04 0d 0d 7a 0c 4c  | B,CS,B..p...z.L|
00001fa0  44 52 20 58 2c 52 58 0d  0d 84 0c 4c 44 52 20 59  |DR X,RX....LDR Y|
00001fb0  2c 52 59 0d 0d 8e 15 41  44 44 53 20 58 2c 58 2c  |,RY....ADDS X,X,|
00001fc0  41 2c 41 53 52 20 23 38  0d 0d 98 17 41 44 44 4c  |A,ASR #8....ADDL|
00001fd0  54 20 58 2c 58 2c 23 44  31 2a 45 44 2a 31 36 0d  |T X,X,#D1*ED*16.|
00001fe0  0d a2 13 43 4d 50 20 58  2c 23 44 31 2a 45 44 2a  |...CMP X,#D1*ED*|
00001ff0  31 36 0d 0d ac 17 53 55  42 47 45 20 58 2c 58 2c  |16....SUBGE X,X,|
00002000  23 44 31 2a 45 44 2a 31  36 0d 0d b6 15 41 44 44  |#D1*ED*16....ADD|
00002010  53 20 59 2c 59 2c 42 2c  41 53 52 20 23 38 0d 0d  |S Y,Y,B,ASR #8..|
00002020  c0 17 41 44 44 4c 54 20  59 2c 59 2c 23 44 32 2a  |..ADDLT Y,Y,#D2*|
00002030  45 44 2a 31 36 0d 0d ca  13 43 4d 50 20 59 2c 23  |ED*16....CMP Y,#|
00002040  44 32 2a 45 44 2a 31 36  0d 0d d4 17 53 55 42 47  |D2*ED*16....SUBG|
00002050  45 20 59 2c 59 2c 23 44  32 2a 45 44 2a 31 36 0d  |E Y,Y,#D2*ED*16.|
00002060  0d de 0c 53 54 52 20 58  2c 52 58 0d 0d e8 0c 53  |...STR X,RX....S|
00002070  54 52 20 59 2c 52 59 0d  0d f2 0b 4d 4f 56 20 41  |TR Y,RY....MOV A|
00002080  2c 58 0d 0d fc 0b 4d 4f  56 20 42 2c 59 0d 0e 06  |,X....MOV B,Y...|
00002090  04 0d 0e 10 04 0d 0e 1a  04 0d 0e 24 04 0d 0e 2e  |...........$....|
000020a0  0d 4c 44 52 20 49 2c 48  31 44 0d 0e 38 12 4d 4f  |.LDR I,H1D..8.MO|
000020b0  56 20 49 2c 49 2c 4c 53  52 20 23 31 0d 0e 42 0b  |V I,I,LSR #1..B.|
000020c0  80 20 49 2c 49 2c 54 0d  0e 4c 16 41 44 44 20 49  |. I,I,T..L.ADD I|
000020d0  2c 54 41 42 2c 49 2c 4c  53 4c 20 23 33 0d 0e 56  |,TAB,I,LSL #3..V|
000020e0  13 4c 44 4d 49 41 20 49  2c 7b 43 53 2c 53 4e 7d  |.LDMIA I,{CS,SN}|
000020f0  0d 0e 60 0d 80 20 43 53  2c 43 53 2c 48 0d 0e 6a  |..`.. CS,CS,H..j|
00002100  0d 80 20 53 4e 2c 53 4e  2c 48 0d 0e 74 04 0d 0e  |.. SN,SN,H..t...|
00002110  7e 0d 4c 44 52 20 49 2c  48 32 44 0d 0e 88 12 4d  |~.LDR I,H2D....M|
00002120  4f 56 20 49 2c 49 2c 4c  53 52 20 23 31 0d 0e 92  |OV I,I,LSR #1...|
00002130  0b 80 20 49 2c 49 2c 54  0d 0e 9c 16 41 44 44 20  |.. I,I,T....ADD |
00002140  49 2c 54 41 42 2c 49 2c  4c 53 4c 20 23 33 0d 0e  |I,TAB,I,LSL #3..|
00002150  a6 11 4c 44 4d 49 41 20  49 2c 7b 49 2c 4a 7d 0d  |..LDMIA I,{I,J}.|
00002160  0e b0 17 41 44 44 20 43  53 2c 43 53 2c 49 2c 4c  |...ADD CS,CS,I,L|
00002170  53 4c 20 23 31 36 0d 0e  ba 17 41 44 44 20 53 4e  |SL #16....ADD SN|
00002180  2c 53 4e 2c 4a 2c 4c 53  4c 20 23 31 36 0d 0e c4  |,SN,J,LSL #16...|
00002190  04 0d 0e ce 10 4c 44 52  20 44 49 54 2c 44 49 54  |.....LDR DIT,DIT|
000021a0  44 0d 0e d8 04 0d 0e e2  14 3b 20 63 6f 6e 66 69  |D........; confi|
000021b0  67 75 72 65 20 62 69 6e  73 0d 0e ec 0f 4c 44 52  |gure bins....LDR|
000021c0  20 4e 2c 56 4c 54 41 42  0d 0e f6 14 4d 4f 56 20  | N,VLTAB....MOV |
000021d0  49 2c 23 48 4f 52 49 5a  4f 4e 2f 38 0d 0f 00 0c  |I,#HORIZON/8....|
000021e0  4d 4f 56 20 4a 2c 23 30  0d 0f 0a 0c 2e 69 6e 69  |MOV J,#0.....ini|
000021f0  74 62 69 6e 0d 0f 14 10  53 54 52 20 4a 2c 5b 4e  |tbin....STR J,[N|
00002200  5d 2c 23 34 0d 0f 1e 0f  53 55 42 53 20 49 2c 49  |],#4....SUBS I,I|
00002210  2c 23 31 0d 0f 28 0f 42  4e 45 20 69 6e 69 74 62  |,#1..(.BNE initb|
00002220  69 6e 0d 0f 32 0f 53 54  52 20 4e 2c 46 52 45 45  |in..2.STR N,FREE|
00002230  44 0d 0f 3c 04 0d 0f 46  04 0d 0f 50 0c 4d 4f 56  |D..<...F...P.MOV|
00002240  20 4a 2c 23 30 0d 0f 5a  0c 4d 4f 56 20 49 2c 23  | J,#0..Z.MOV I,#|
00002250  30 0d 0f 64 04 0d 0f 6e  0c 4d 4f 56 20 48 2c 23  |0..d...n.MOV H,#|
00002260  30 0d 0f 78 09 2e 76 6c  6f 70 0d 0f 82 0b 4d 4f  |0..x..vlop....MO|
00002270  56 20 49 2c 48 0d 0f 8c  11 42 4c 20 63 68 65 63  |V I,H....BL chec|
00002280  6b 70 6f 69 6e 74 0d 0f  96 19 43 4d 50 20 54 2c  |kpoint....CMP T,|
00002290  23 31 30 30 3a 42 45 51  20 76 66 6f 75 6e 64 0d  |#100:BEQ vfound.|
000022a0  0f a0 0e 52 53 42 20 49  2c 49 2c 23 30 0d 0f aa  |...RSB I,I,#0...|
000022b0  11 42 4c 20 63 68 65 63  6b 70 6f 69 6e 74 0d 0f  |.BL checkpoint..|
000022c0  b4 19 43 4d 50 20 54 2c  23 31 30 30 3a 42 45 51  |..CMP T,#100:BEQ|
000022d0  20 76 66 6f 75 6e 64 0d  0f be 0c 4d 4f 56 20 49  | vfound....MOV I|
000022e0  2c 23 30 0d 0f c8 0b 4d  4f 56 20 4a 2c 48 0d 0f  |,#0....MOV J,H..|
000022f0  d2 11 42 4c 20 63 68 65  63 6b 70 6f 69 6e 74 0d  |..BL checkpoint.|
00002300  0f dc 19 43 4d 50 20 54  2c 23 31 30 30 3a 42 45  |...CMP T,#100:BE|
00002310  51 20 76 66 6f 75 6e 64  0d 0f e6 0e 52 53 42 20  |Q vfound....RSB |
00002320  4a 2c 4a 2c 23 30 0d 0f  f0 11 42 4c 20 63 68 65  |J,J,#0....BL che|
00002330  63 6b 70 6f 69 6e 74 0d  0f fa 19 43 4d 50 20 54  |ckpoint....CMP T|
00002340  2c 23 31 30 30 3a 42 45  51 20 76 66 6f 75 6e 64  |,#100:BEQ vfound|
00002350  0d 10 04 0c 4d 4f 56 20  4a 2c 23 30 0d 10 0e 0e  |....MOV J,#0....|
00002360  41 44 44 20 48 2c 48 2c  23 31 0d 10 18 0f 43 4d  |ADD H,H,#1....CM|
00002370  50 20 48 2c 23 45 44 2f  32 0d 10 22 0c 42 4e 45  |P H,#ED/2..".BNE|
00002380  20 76 6c 6f 70 0d 10 2c  12 4c 44 4d 46 44 20 31  | vlop..,.LDMFD 1|
00002390  33 21 2c 7b 50 43 7d 0d  10 36 0b 2e 76 66 6f 75  |3!,{PC}..6..vfou|
000023a0  6e 64 0d 10 40 04 0d 10  4a 04 0d 10 54 13 a4 61  |nd..@...J...T..a|
000023b0  64 72 28 54 2c 53 43 52  45 45 4e 32 29 0d 10 5e  |dr(T,SCREEN2)..^|
000023c0  0d 4c 44 52 20 48 2c 5b  54 5d 0d 10 68 13 41 44  |.LDR H,[T]..h.AD|
000023d0  44 20 48 2c 48 2c 23 33  32 30 2a 36 34 0d 10 72  |D H,H,#320*64..r|
000023e0  0f 41 44 44 20 48 2c 48  2c 23 34 30 0d 10 7c 0e  |.ADD H,H,#40..|.|
000023f0  3b 53 54 52 20 48 2c 5b  54 5d 0d 10 86 04 0d 10  |;STR H,[T]......|
00002400  90 04 0d 10 9a 0f 4c 44  52 20 4e 2c 56 4c 54 41  |......LDR N,VLTA|
00002410  42 0d 10 a4 0a 42 4c 20  72 65 63 0d 10 ae 10 4d  |B....BL rec....M|
00002420  4f 56 20 54 2c 23 31 3c  3c 33 31 0d 10 b8 0e 3b  |OV T,#1<<31....;|
00002430  53 54 52 20 54 2c 5b 4e  5d 0d 10 c2 04 0d 10 cc  |STR T,[N].......|
00002440  0f 4c 44 52 20 48 2c 56  4c 54 41 42 0d 10 d6 0a  |.LDR H,VLTAB....|
00002450  42 4c 20 74 65 6b 0d 10  e0 12 4c 44 4d 46 44 20  |BL tek....LDMFD |
00002460  31 33 21 2c 7b 50 43 7d  0d 10 ea 04 0d 10 f4 25  |13!,{PC}.......%|
00002470  3b 20 63 68 65 63 6b 20  70 6f 69 6e 74 20 28 49  |; check point (I|
00002480  2c 4a 29 20 74 6f 20 62  65 20 76 69 73 69 62 6c  |,J) to be visibl|
00002490  65 0d 10 fe 27 3b 20 58  2a 2c 59 2a 2c 5a 2a 3d  |e...'; X*,Y*,Z*=|
000024a0  54 2a 2c 4e 2a 2c 20 41  2c 42 2c 49 2c 4a 2c 43  |T*,N*, A,B,I,J,C|
000024b0  53 2c 53 4e 2c 44 49 54  0d 11 08 0f 2e 63 68 65  |S,SN,DIT.....che|
000024c0  63 6b 70 6f 69 6e 74 0d  11 12 1b 53 54 4d 46 44  |ckpoint....STMFD|
000024d0  20 31 33 21 2c 7b 49 2c  4a 2c 4e 2c 51 2c 31 34  | 13!,{I,J,N,Q,14|
000024e0  7d 5e 0d 11 1c 18 41 44  44 20 58 2c 49 2c 41 2c  |}^....ADD X,I,A,|
000024f0  41 53 52 20 23 53 48 2b  46 58 0d 11 26 18 41 44  |ASR #SH+FX..&.AD|
00002500  44 20 5a 2c 4a 2c 42 2c  41 53 52 20 23 53 48 2b  |D Z,J,B,ASR #SH+|
00002510  46 58 0d 11 30 04 0d 11  3a 0f 80 20 51 2c 58 2c  |FX..0...:.. Q,X,|
00002520  23 44 31 2d 31 0d 11 44  15 41 44 44 20 51 2c 51  |#D1-1..D.ADD Q,Q|
00002530  2c 5a 2c 4c 53 4c 20 23  53 48 0d 11 4e 1a 4d 4f  |,Z,LSL #SH..N.MO|
00002540  56 20 51 2c 51 2c 4c 53  4c 20 23 28 33 32 2d 32  |V Q,Q,LSL #(32-2|
00002550  2a 53 48 29 0d 11 58 04  0d 11 62 0f 4c 44 52 20  |*SH)..X...b.LDR |
00002560  4e 2c 50 55 54 41 42 0d  11 6c 1e 41 44 44 20 4e  |N,PUTAB..l.ADD N|
00002570  2c 4e 2c 51 2c 4c 53 52  20 23 28 33 32 2d 32 2a  |,N,Q,LSR #(32-2*|
00002580  53 48 2d 34 29 0d 11 76  04 0d 11 80 0f 4c 44 52  |SH-4)..v.....LDR|
00002590  20 4a 2c 68 69 67 68 74  0d 11 8a 18 52 53 42 20  | J,hight....RSB |
000025a0  58 2c 41 2c 58 2c 4c 53  4c 20 23 53 48 2b 46 58  |X,A,X,LSL #SH+FX|
000025b0  0d 11 94 10 4c 44 52 20  59 2c 5b 4e 5d 2c 23 34  |....LDR Y,[N],#4|
000025c0  0d 11 9e 0d 41 44 44 20  59 2c 59 2c 4a 0d 11 a8  |....ADD Y,Y,J...|
000025d0  1a 52 53 42 20 5a 2c 42  2c 5a 2c 4c 53 4c 20 23  |.RSB Z,B,Z,LSL #|
000025e0  53 48 2b 46 58 3a 5d 0d  11 b2 04 0d 11 bc 13 e7  |SH+FX:].........|
000025f0  20 53 48 2d 5a 4f 4f 4d  20 3e 20 30 20 8c 0d 11  | SH-ZOOM > 0 ...|
00002600  c6 0d 5b 4f 50 54 20 50  41 53 53 0d 11 d0 18 4d  |..[OPT PASS....M|
00002610  4f 56 20 58 2c 58 2c 41  53 52 20 23 53 48 2d 5a  |OV X,X,ASR #SH-Z|
00002620  4f 4f 4d 0d 11 da 18 4d  4f 56 20 59 2c 59 2c 41  |OOM....MOV Y,Y,A|
00002630  53 52 20 23 53 48 2d 5a  4f 4f 4d 0d 11 e4 1a 4d  |SR #SH-ZOOM....M|
00002640  4f 56 20 5a 2c 5a 2c 41  53 52 20 23 53 48 2d 5a  |OV Z,Z,ASR #SH-Z|
00002650  4f 4f 4d 3a 5d 0d 11 ee  05 cd 0d 11 f8 04 0d 12  |OOM:]...........|
00002660  02 12 e7 20 53 48 2d 5a  4f 4f 4d 20 3c 30 20 8c  |... SH-ZOOM <0 .|
00002670  0d 12 0c 0d 5b 4f 50 54  20 50 41 53 53 0d 12 16  |....[OPT PASS...|
00002680  18 4d 4f 56 20 58 2c 58  2c 4c 53 4c 20 23 5a 4f  |.MOV X,X,LSL #ZO|
00002690  4f 4d 2d 53 48 0d 12 20  18 4d 4f 56 20 59 2c 59  |OM-SH.. .MOV Y,Y|
000026a0  2c 4c 53 4c 20 23 5a 4f  4f 4d 2d 53 48 0d 12 2a  |,LSL #ZOOM-SH..*|
000026b0  1a 4d 4f 56 20 5a 2c 5a  2c 4c 53 4c 20 23 5a 4f  |.MOV Z,Z,LSL #ZO|
000026c0  4f 4d 2d 53 48 3a 5d 0d  12 34 05 cd 0d 12 3e 04  |OM-SH:]..4....>.|
000026d0  0d 12 48 0e 5b 20 4f 50  54 20 50 41 53 53 0d 12  |..H.[ OPT PASS..|
000026e0  52 04 0d 12 5c 0f 41 44  52 20 20 4a 2c 79 72 6f  |R...\.ADR  J,yro|
000026f0  74 0d 12 66 11 4c 44 4d  49 41 20 4a 2c 7b 49 2c  |t..f.LDMIA J,{I,|
00002700  4a 7d 0d 12 70 0d 4d 55  4c 20 51 2c 49 2c 58 0d  |J}..p.MUL Q,I,X.|
00002710  12 7a 0f 4d 4c 41 20 51  2c 4a 2c 5a 2c 51 0d 12  |.z.MLA Q,J,Z,Q..|
00002720  84 0d 4d 55 4c 20 58 2c  4a 2c 58 0d 12 8e 0d 4d  |..MUL X,J,X....M|
00002730  55 4c 20 5a 2c 49 2c 5a  0d 12 98 0d 53 55 42 20  |UL Z,I,Z....SUB |
00002740  5a 2c 5a 2c 58 0d 12 a2  12 4d 4f 56 20 58 2c 51  |Z,Z,X....MOV X,Q|
00002750  2c 41 53 52 20 23 38 0d  12 ac 12 4d 4f 56 20 5a  |,ASR #8....MOV Z|
00002760  2c 5a 2c 41 53 52 20 23  38 0d 12 b6 04 0d 12 c0  |,Z,ASR #8.......|
00002770  14 4d 4f 56 20 49 2c 43  53 2c 4c 53 4c 20 23 31  |.MOV I,CS,LSL #1|
00002780  36 0d 12 ca 14 4d 4f 56  20 4a 2c 53 4e 2c 4c 53  |6....MOV J,SN,LS|
00002790  4c 20 23 31 36 0d 12 d4  13 4d 4f 56 20 49 2c 49  |L #16....MOV I,I|
000027a0  2c 41 53 52 20 23 31 36  0d 12 de 13 4d 4f 56 20  |,ASR #16....MOV |
000027b0  4a 2c 4a 2c 41 53 52 20  23 31 36 0d 12 e8 0d 4d  |J,J,ASR #16....M|
000027c0  55 4c 20 51 2c 49 2c 59  0d 12 f2 0f 4d 4c 41 20  |UL Q,I,Y....MLA |
000027d0  51 2c 4a 2c 5a 2c 51 0d  12 fc 0d 4d 55 4c 20 59  |Q,J,Z,Q....MUL Y|
000027e0  2c 4a 2c 59 0d 13 06 0d  4d 55 4c 20 5a 2c 49 2c  |,J,Y....MUL Z,I,|
000027f0  5a 0d 13 10 0d 53 55 42  20 5a 2c 5a 2c 59 0d 13  |Z....SUB Z,Z,Y..|
00002800  1a 12 4d 4f 56 20 59 2c  51 2c 41 53 52 20 23 38  |..MOV Y,Q,ASR #8|
00002810  0d 13 24 12 4d 4f 56 20  5a 2c 5a 2c 41 53 52 20  |..$.MOV Z,Z,ASR |
00002820  23 38 0d 13 2e 04 0d 13  38 14 4d 4f 56 20 49 2c  |#8......8.MOV I,|
00002830  43 53 2c 41 53 52 20 23  31 36 0d 13 42 14 4d 4f  |CS,ASR #16..B.MO|
00002840  56 20 4a 2c 53 4e 2c 41  53 52 20 23 31 36 0d 13  |V J,SN,ASR #16..|
00002850  4c 0d 4d 55 4c 20 51 2c  49 2c 58 0d 13 56 0f 4d  |L.MUL Q,I,X..V.M|
00002860  4c 41 20 51 2c 4a 2c 59  2c 51 0d 13 60 0d 4d 55  |LA Q,J,Y,Q..`.MU|
00002870  4c 20 58 2c 4a 2c 58 0d  13 6a 0d 4d 55 4c 20 59  |L X,J,X..j.MUL Y|
00002880  2c 49 2c 59 0d 13 74 0d  53 55 42 20 59 2c 59 2c  |,I,Y..t.SUB Y,Y,|
00002890  58 0d 13 7e 12 4d 4f 56  20 58 2c 51 2c 41 53 52  |X..~.MOV X,Q,ASR|
000028a0  20 23 38 0d 13 88 12 4d  4f 56 20 59 2c 59 2c 41  | #8....MOV Y,Y,A|
000028b0  53 52 20 23 38 0d 13 92  04 0d 13 9c 14 41 44 44  |SR #8........ADD|
000028c0  20 49 2c 5a 2c 23 33 30  30 2a 46 49 58 0d 13 a6  | I,Z,#300*FIX...|
000028d0  0c 43 4d 50 20 49 2c 23  30 0d 13 b0 1a 4c 44 52  |.CMP I,#0....LDR|
000028e0  50 4c 20 5a 2c 5b 44 49  54 2c 49 2c 4c 53 4c 20  |PL Z,[DIT,I,LSL |
000028f0  23 32 5d 0d 13 ba 0d 4d  55 4c 20 58 2c 5a 2c 58  |#2]....MUL X,Z,X|
00002900  0d 13 c4 0d 4d 55 4c 20  59 2c 5a 2c 59 0d 13 ce  |....MUL Y,Z,Y...|
00002910  13 4d 4f 56 20 58 2c 58  2c 41 53 52 20 23 31 36  |.MOV X,X,ASR #16|
00002920  0d 13 d8 13 4d 4f 56 20  59 2c 59 2c 41 53 52 20  |....MOV Y,Y,ASR |
00002930  23 31 36 0d 13 e2 10 41  44 44 20 58 2c 58 2c 23  |#16....ADD X,X,#|
00002940  31 36 30 0d 13 ec 10 52  53 42 20 59 2c 59 2c 23  |160....RSB Y,Y,#|
00002950  31 32 38 0d 13 f6 34 53  54 4d 49 41 20 4e 2c 7b  |128...4STMIA N,{|
00002960  58 2c 59 7d 20 20 20 3b  70 65 72 73 70 65 63 74  |X,Y}   ;perspect|
00002970  69 76 65 20 74 72 61 6e  73 66 6f 72 6d 65 64 20  |ive transformed |
00002980  28 78 2c 79 2c 7a 29 0d  14 00 04 0d 14 0a 20 43  |(x,y,z)....... C|
00002990  4d 50 20 20 20 49 2c 23  31 30 2a 46 49 58 20 20  |MP   I,#10*FIX  |
000029a0  20 3b 20 74 6f 20 63 6c  6f 73 65 0d 14 14 11 3b  | ; to close....;|
000029b0  4d 4f 56 4c 54 20 54 2c  23 31 30 31 0d 14 1e 15  |MOVLT T,#101....|
000029c0  42 4c 54 20 20 20 20 20  20 20 74 6f 63 6c 6f 73  |BLT       toclos|
000029d0  65 0d 14 28 04 0d 14 32  23 43 4d 50 20 20 20 49  |e..(...2#CMP   I|
000029e0  2c 23 48 4f 52 49 5a 4f  4e 2a 46 49 58 20 20 3b  |,#HORIZON*FIX  ;|
000029f0  20 74 6f 6f 20 66 61 72  0d 14 3c 17 42 47 45 20  | too far..<.BGE |
00002a00  20 20 20 20 20 20 6f 75  74 73 63 72 65 65 6e 0d  |      outscreen.|
00002a10  14 46 04 0d 14 50 27 43  4d 50 20 58 2c 23 33 32  |.F...P'CMP X,#32|
00002a20  30 20 20 20 20 20 20 3b  20 6f 75 74 20 6c 65 66  |0      ; out lef|
00002a30  74 20 6f 72 20 72 69 67  68 74 0d 14 5a 16 42 48  |t or right..Z.BH|
00002a40  53 20 20 20 20 20 20 6f  75 74 73 63 72 65 65 6e  |S      outscreen|
00002a50  0d 14 64 04 0d 14 6e 24  43 4d 50 20 59 2c 23 32  |..d...n$CMP Y,#2|
00002a60  35 36 20 20 20 20 20 20  3b 20 6f 75 74 20 75 70  |56      ; out up|
00002a70  20 6f 72 20 64 6f 77 6e  0d 14 78 17 42 48 53 20  | or down..x.BHS |
00002a80  20 20 20 20 20 20 6f 75  74 73 63 72 65 65 6e 0d  |      outscreen.|
00002a90  14 82 04 0d 14 8c 0e 4d  4f 56 20 54 2c 23 31 30  |.......MOV T,#10|
00002aa0  30 0d 14 96 3c 4d 4f 56  20 58 2c 4e 20 20 20 20  |0...<MOV X,N    |
00002ab0  20 20 20 20 3b 20 70 6c  61 63 65 20 77 68 65 72  |    ; place wher|
00002ac0  65 20 74 72 61 6e 73 66  6f 72 6d 65 64 20 63 6f  |e transformed co|
00002ad0  6f 72 64 20 69 73 20 73  74 6f 72 65 64 0d 14 a0  |ord is stored...|
00002ae0  34 4d 4f 56 20 59 2c 49  20 20 20 20 20 20 20 20  |4MOV Y,I        |
00002af0  3b 20 7a 2d 63 6f 6f 72  64 20 75 73 65 64 20 66  |; z-coord used f|
00002b00  6f 72 20 64 65 70 74 68  20 62 69 6e 20 73 6f 72  |or depth bin sor|
00002b10  74 0d 14 aa 1b 4c 44 4d  46 44 20 31 33 21 2c 7b  |t....LDMFD 13!,{|
00002b20  49 2c 4a 2c 4e 2c 51 2c  50 43 7d 5e 0d 14 b4 04  |I,J,N,Q,PC}^....|
00002b30  0d 14 be 0e 2e 6f 75 74  73 63 72 65 65 6e 0d 14  |.....outscreen..|
00002b40  c8 0e 4d 4f 56 20 54 2c  23 31 30 31 0d 14 d2 3c  |..MOV T,#101...<|
00002b50  4d 4f 56 20 58 2c 4e 20  20 20 20 20 20 20 20 3b  |MOV X,N        ;|
00002b60  20 70 6c 61 63 65 20 77  68 65 72 65 20 74 72 61  | place where tra|
00002b70  6e 73 66 6f 72 6d 65 64  20 63 6f 6f 72 64 20 69  |nsformed coord i|
00002b80  73 20 73 74 6f 72 65 64  0d 14 dc 34 4d 4f 56 20  |s stored...4MOV |
00002b90  59 2c 49 20 20 20 20 20  20 20 20 3b 20 7a 2d 63  |Y,I        ; z-c|
00002ba0  6f 6f 72 64 20 75 73 65  64 20 66 6f 72 20 64 65  |oord used for de|
00002bb0  70 74 68 20 62 69 6e 20  73 6f 72 74 0d 14 e6 1b  |pth bin sort....|
00002bc0  4c 44 4d 46 44 20 31 33  21 2c 7b 49 2c 4a 2c 4e  |LDMFD 13!,{I,J,N|
00002bd0  2c 51 2c 50 43 7d 5e 0d  14 f0 04 0d 14 fa 0c 2e  |,Q,PC}^.........|
00002be0  74 6f 63 6c 6f 73 65 0d  15 04 0e 4d 4f 56 20 54  |toclose....MOV T|
00002bf0  2c 23 31 30 34 0d 15 0e  3c 4d 4f 56 20 58 2c 4e  |,#104...<MOV X,N|
00002c00  20 20 20 20 20 20 20 20  3b 20 70 6c 61 63 65 20  |        ; place |
00002c10  77 68 65 72 65 20 74 72  61 6e 73 66 6f 72 6d 65  |where transforme|
00002c20  64 20 63 6f 6f 72 64 20  69 73 20 73 74 6f 72 65  |d coord is store|
00002c30  64 0d 15 18 34 4d 4f 56  20 59 2c 49 20 20 20 20  |d...4MOV Y,I    |
00002c40  20 20 20 20 3b 20 7a 2d  63 6f 6f 72 64 20 75 73  |    ; z-coord us|
00002c50  65 64 20 66 6f 72 20 64  65 70 74 68 20 62 69 6e  |ed for depth bin|
00002c60  20 73 6f 72 74 0d 15 22  1b 4c 44 4d 46 44 20 31  | sort..".LDMFD 1|
00002c70  33 21 2c 7b 49 2c 4a 2c  4e 2c 51 2c 50 43 7d 5e  |3!,{I,J,N,Q,PC}^|
00002c80  0d 15 2c 04 0d 15 36 04  0d 15 40 04 0d 15 4a 0c  |..,...6...@...J.|
00002c90  3b 20 51 2a 2c 20 48 2a  0d 15 54 08 2e 72 65 63  |; Q*, H*..T..rec|
00002ca0  0d 15 5e 22 3b 20 54 3d  31 30 31 20 3d 3e 20 70  |..^"; T=101 => p|
00002cb0  6f 69 6e 74 20 6f 75 74  20 6f 66 20 73 63 72 65  |oint out of scre|
00002cc0  65 6e 0d 15 68 12 53 54  4d 46 44 20 31 33 21 2c  |en..h.STMFD 13!,|
00002cd0  7b 31 34 7d 0d 15 72 0a  3b 53 57 49 20 34 0d 15  |{14}..r.;SWI 4..|
00002ce0  7c 04 0d 15 86 0e 4d 4f  56 20 51 2c 23 31 30 30  ||.....MOV Q,#100|
00002cf0  0d 15 90 16 41 44 44 20  48 2c 48 2c 23 33 32 30  |....ADD H,H,#320|
00002d00  2d 36 34 2d 33 32 0d 15  9a 04 0d 15 a4 0e 41 44  |-64-32........AD|
00002d10  44 20 49 2c 49 2c 23 31  0d 15 ae 1a 4c 44 52 42  |D I,I,#1....LDRB|
00002d20  20 54 2c 5b 48 2c 23 31  5d 3a 43 4d 50 20 54 2c  | T,[H,#1]:CMP T,|
00002d30  23 30 0d 15 b8 13 42 4c  45 51 20 63 68 65 63 6b  |#0....BLEQ check|
00002d40  70 6f 69 6e 74 0d 15 c2  13 53 54 52 45 51 42 20  |point....STREQB |
00002d50  54 2c 5b 48 2c 23 31 5d  0d 15 cc 0d 41 44 44 20  |T,[H,#1]....ADD |
00002d60  51 2c 51 2c 54 0d 15 d6  04 0d 15 e0 0e 41 44 44  |Q,Q,T........ADD|
00002d70  20 4a 2c 4a 2c 23 31 0d  15 ea 1c 4c 44 52 42 20  | J,J,#1....LDRB |
00002d80  54 2c 5b 48 2c 23 33 32  31 5d 3a 43 4d 50 20 54  |T,[H,#321]:CMP T|
00002d90  2c 23 30 0d 15 f4 13 42  4c 45 51 20 63 68 65 63  |,#0....BLEQ chec|
00002da0  6b 70 6f 69 6e 74 0d 15  fe 15 53 54 52 45 51 42  |kpoint....STREQB|
00002db0  20 54 2c 5b 48 2c 23 33  32 31 5d 0d 16 08 0d 41  | T,[H,#321]....A|
00002dc0  44 44 20 51 2c 51 2c 54  0d 16 12 04 0d 16 1c 0e  |DD Q,Q,T........|
00002dd0  53 55 42 20 49 2c 49 2c  23 31 0d 16 26 1c 4c 44  |SUB I,I,#1..&.LD|
00002de0  52 42 20 54 2c 5b 48 2c  23 33 32 30 5d 3a 43 4d  |RB T,[H,#320]:CM|
00002df0  50 20 54 2c 23 30 0d 16  30 13 42 4c 45 51 20 63  |P T,#0..0.BLEQ c|
00002e00  68 65 63 6b 70 6f 69 6e  74 0d 16 3a 15 53 54 52  |heckpoint..:.STR|
00002e10  45 51 42 20 54 2c 5b 48  2c 23 33 32 30 5d 0d 16  |EQB T,[H,#320]..|
00002e20  44 0d 41 44 44 20 51 2c  51 2c 54 0d 16 4e 04 0d  |D.ADD Q,Q,T..N..|
00002e30  16 58 0e 53 55 42 20 4a  2c 4a 2c 23 31 0d 16 62  |.X.SUB J,J,#1..b|
00002e40  12 42 4c 20 20 63 68 65  63 6b 70 6f 69 6e 74 0d  |.BL  checkpoint.|
00002e50  16 6c 0e 53 54 52 42 20  54 2c 5b 48 5d 0d 16 76  |.l.STRB T,[H]..v|
00002e60  36 41 44 44 20 51 2c 51  2c 54 20 3b 66 6c 61 67  |6ADD Q,Q,T ;flag|
00002e70  20 6f 6e 20 69 66 20 62  65 79 6f 6e 64 20 68 6f  | on if beyond ho|
00002e80  72 69 7a 6f 6e 20 6f 72  20 6f 66 66 20 73 63 72  |rizon or off scr|
00002e90  65 65 6e 0d 16 80 04 0d  16 8a 11 4c 44 52 42 20  |een........LDRB |
00002ea0  54 2c 5b 58 2c 23 38 5d  0d 16 94 14 43 4d 50 20  |T,[X,#8]....CMP |
00002eb0  54 2c 23 30 3a ec 51 20  54 2c 23 31 0d 16 9e 1d  |T,#0:.Q T,#1....|
00002ec0  53 54 52 42 20 54 2c 5b  48 2c 23 2d 28 33 32 30  |STRB T,[H,#-(320|
00002ed0  2d 36 34 2d 33 32 29 5d  21 0d 16 a8 04 0d 16 b2  |-64-32)]!.......|
00002ee0  04 0d 16 bc 3f 43 4d 50  20 51 2c 23 35 30 34 20  |....?CMP Q,#504 |
00002ef0  20 20 20 20 20 20 20 20  3b 20 61 6c 6c 20 66 6f  |        ; all fo|
00002f00  75 72 20 70 6f 69 6e 74  73 20 6f 66 20 70 61 74  |ur points of pat|
00002f10  63 68 20 6f 75 74 20 6f  66 20 73 63 72 65 65 6e  |ch out of screen|
00002f20  0d 16 c6 2b 4c 44 4d 48  53 46 44 20 31 33 21 2c  |...+LDMHSFD 13!,|
00002f30  7b 50 43 7d 20 20 20 3b  20 73 6f 20 72 65 6a 65  |{PC}   ; so reje|
00002f40  63 74 20 74 68 69 73 20  6f 6e 65 0d 16 d0 04 0d  |ct this one.....|
00002f50  16 da 15 53 54 4d 46 44  20 31 33 21 2c 7b 49 2c  |...STMFD 13!,{I,|
00002f60  4a 2c 48 7d 0d 16 e4 04  0d 16 ee 28 4d 4f 56 53  |J,H}.......(MOVS|
00002f70  20 20 59 2c 59 2c 41 53  52 20 23 46 58 2b 33 20  |  Y,Y,ASR #FX+3 |
00002f80  3b 20 64 65 70 74 68 20  6f 66 20 70 61 74 63 68  |; depth of patch|
00002f90  0d 16 f8 0e 4d 4f 56 4d  49 20 59 2c 23 30 0d 17  |....MOVMI Y,#0..|
00002fa0  02 14 43 4d 50 20 59 2c  23 48 4f 52 49 5a 4f 4e  |..CMP Y,#HORIZON|
00002fb0  2f 38 0d 17 0c 16 4d 4f  56 48 53 20 59 2c 23 48  |/8....MOVHS Y,#H|
00002fc0  4f 52 49 5a 4f 4e 2f 38  0d 17 16 10 53 55 42 48  |ORIZON/8....SUBH|
00002fd0  53 20 59 2c 59 2c 23 31  0d 17 20 04 0d 17 2a 0f  |S Y,Y,#1.. ...*.|
00002fe0  4c 44 52 20 4e 2c 56 4c  54 41 42 0d 17 34 36 4c  |LDR N,VLTAB..46L|
00002ff0  44 52 20 59 2c 5b 4e 2c  59 2c 4c 53 4c 20 23 32  |DR Y,[N,Y,LSL #2|
00003000  5d 21 20 20 20 20 20 20  3b 20 6c 6f 61 64 20 64  |]!      ; load d|
00003010  65 70 74 68 20 6c 69 6e  6b 20 70 6f 69 6e 74 65  |epth link pointe|
00003020  72 0d 17 3e 0f 4c 44 52  20 54 2c 46 52 45 45 44  |r..>.LDR T,FREED|
00003030  0d 17 48 3c 53 54 52 20  54 2c 5b 4e 5d 20 20 20  |..H<STR T,[N]   |
00003040  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
00003050  65 70 6c 61 63 65 20 77  69 74 68 20 6e 65 77 20  |eplace with new |
00003060  6c 69 6e 6b 20 70 6f 69  6e 74 65 72 0d 17 52 0f  |link pointer..R.|
00003070  3b 43 4d 50 20 51 2c 23  31 30 30 0d 17 5c 42 53  |;CMP Q,#100..\BS|
00003080  54 4d 49 41 20 28 54 29  21 2c 7b 58 2c 59 7d 20  |TMIA (T)!,{X,Y} |
00003090  20 3b 20 69 6e 73 65 72  74 20 6e 65 77 20 70 61  | ; insert new pa|
000030a0  74 63 68 20 6e 6f 64 65  20 69 6e 20 64 65 70 74  |tch node in dept|
000030b0  68 20 6c 69 6e 6b 65 64  20 6c 69 73 74 0d 17 66  |h linked list..f|
000030c0  0f 53 54 52 20 54 2c 46  52 45 45 44 0d 17 70 04  |.STR T,FREED..p.|
000030d0  0d 17 7a 0e 53 55 42 20  4a 2c 4a 2c 23 31 0d 17  |..z.SUB J,J,#1..|
000030e0  84 15 4c 44 52 42 20 51  2c 5b 48 2c 23 2d 33 32  |..LDRB Q,[H,#-32|
000030f0  30 5d 21 0d 17 8e 0c 43  4d 50 20 51 2c 23 30 0d  |0]!....CMP Q,#0.|
00003100  17 98 0c 42 4c 45 51 20  72 65 63 0d 17 a2 14 4c  |...BLEQ rec....L|
00003110  44 4d 46 44 20 31 33 2c  7b 49 2c 4a 2c 48 7d 0d  |DMFD 13,{I,J,H}.|
00003120  17 ac 0e 53 55 42 20 49  2c 49 2c 23 31 0d 17 b6  |...SUB I,I,#1...|
00003130  13 4c 44 52 42 20 51 2c  5b 48 2c 23 2d 31 5d 21  |.LDRB Q,[H,#-1]!|
00003140  0d 17 c0 0c 43 4d 50 20  51 2c 23 30 0d 17 ca 0c  |....CMP Q,#0....|
00003150  42 4c 45 51 20 72 65 63  0d 17 d4 14 4c 44 4d 46  |BLEQ rec....LDMF|
00003160  44 20 31 33 2c 7b 49 2c  4a 2c 48 7d 0d 17 de 0e  |D 13,{I,J,H}....|
00003170  41 44 44 20 49 2c 49 2c  23 31 0d 17 e8 12 4c 44  |ADD I,I,#1....LD|
00003180  52 42 20 51 2c 5b 48 2c  23 31 5d 21 0d 17 f2 0c  |RB Q,[H,#1]!....|
00003190  43 4d 50 20 51 2c 23 30  0d 17 fc 0c 42 4c 45 51  |CMP Q,#0....BLEQ|
000031a0  20 72 65 63 0d 18 06 15  4c 44 4d 46 44 20 31 33  | rec....LDMFD 13|
000031b0  21 2c 7b 49 2c 4a 2c 48  7d 0d 18 10 0e 41 44 44  |!,{I,J,H}....ADD|
000031c0  20 4a 2c 4a 2c 23 31 0d  18 1a 14 4c 44 52 42 20  | J,J,#1....LDRB |
000031d0  51 2c 5b 48 2c 23 33 32  30 5d 21 0d 18 24 0c 43  |Q,[H,#320]!..$.C|
000031e0  4d 50 20 51 2c 23 30 0d  18 2e 0c 42 4c 45 51 20  |MP Q,#0....BLEQ |
000031f0  72 65 63 0d 18 38 12 4c  44 4d 46 44 20 31 33 21  |rec..8.LDMFD 13!|
00003200  2c 7b 50 43 7d 0d 18 42  04 0d 18 4c 04 0d 18 56  |,{PC}..B...L...V|
00003210  08 2e 74 65 6b 0d 18 60  12 53 54 4d 46 44 20 31  |..tek..`.STMFD 1|
00003220  33 21 2c 7b 31 34 7d 0d  18 6a 04 0d 18 74 10 41  |3!,{14}..j...t.A|
00003230  44 52 20 54 41 42 2c 76  6c 61 6b 0d 18 7e 0d 4d  |DR TAB,vlak..~.M|
00003240  4f 56 20 4e 52 2c 23 34  0d 18 88 11 4c 44 52 20  |OV NR,#4....LDR |
00003250  44 49 54 2c 50 55 54 41  42 0d 18 92 12 41 44 44  |DIT,PUTAB....ADD|
00003260  20 44 49 54 2c 44 49 54  2c 23 34 0d 18 9c 0d 4d  | DIT,DIT,#4....M|
00003270  4f 56 20 4e 52 2c 23 34  0d 18 a6 10 41 44 52 20  |OV NR,#4....ADR |
00003280  54 41 42 2c 76 6c 61 6b  0d 18 b0 15 4d 4f 56 20  |TAB,vlak....MOV |
00003290  43 53 2c 23 48 4f 52 49  5a 4f 4e 2f 38 0d 18 ba  |CS,#HORIZON/8...|
000032a0  0f 4c 44 52 20 48 2c 56  4c 54 41 42 0d 18 c4 36  |.LDR H,VLTAB...6|
000032b0  41 44 44 20 48 2c 48 2c  43 53 2c 4c 53 4c 20 23  |ADD H,H,CS,LSL #|
000032c0  32 20 20 20 20 20 20 3b  20 70 75 74 20 61 74 20  |2      ; put at |
000032d0  62 69 6e 20 77 69 74 68  20 68 69 67 68 65 73 74  |bin with highest|
000032e0  20 7a 0d 18 ce 0d 2e 6e  65 78 74 5f 62 69 6e 0d  | z.....next_bin.|
000032f0  18 d8 12 4c 44 52 20 59  2c 5b 48 2c 23 2d 34 5d  |...LDR Y,[H,#-4]|
00003300  21 0d 18 e2 0e 43 4d 50  20 20 20 59 2c 23 30 0d  |!....CMP   Y,#0.|
00003310  18 ec 0f 42 45 51 20 65  6e 64 5f 62 69 6e 0d 18  |...BEQ end_bin..|
00003320  f6 12 4c 44 4d 49 41 20  59 2c 7b 50 30 2c 59 7d  |..LDMIA Y,{P0,Y}|
00003330  0d 19 00 0d 2e 64 72 61  77 5f 62 69 6e 0d 19 0a  |.....draw_bin...|
00003340  10 53 55 42 20 58 2c 50  30 2c 44 49 54 0d 19 14  |.SUB X,P0,DIT...|
00003350  1a 4d 4f 56 20 58 2c 58  2c 4c 53 4c 20 23 33 32  |.MOV X,X,LSL #32|
00003360  2d 32 2a 53 48 2d 34 0d  19 1e 25 41 44 44 20 54  |-2*SH-4...%ADD T|
00003370  2c 58 2c 23 31 20 3c 3c  20 28 33 32 2d 53 48 29  |,X,#1 << (32-SH)|
00003380  20 20 20 20 20 20 3b 20  6a 2b 3d 31 0d 19 28 1f  |      ; j+=1..(.|
00003390  41 44 44 20 50 31 2c 44  49 54 2c 54 2c 4c 53 52  |ADD P1,DIT,T,LSR|
000033a0  20 23 33 32 2d 32 2a 53  48 2d 34 0d 19 32 16 4d  | #32-2*SH-4..2.M|
000033b0  4f 56 20 54 2c 54 2c 52  4f 52 20 23 33 32 2d 53  |OV T,T,ROR #32-S|
000033c0  48 0d 19 3c 25 41 44 44  20 54 2c 54 2c 23 31 20  |H..<%ADD T,T,#1 |
000033d0  3c 3c 20 28 33 32 2d 53  48 29 20 20 20 20 20 20  |<< (32-SH)      |
000033e0  3b 20 69 2b 3d 31 0d 19  46 1d 41 44 44 20 50 32  |; i+=1..F.ADD P2|
000033f0  2c 44 49 54 2c 54 2c 52  4f 52 20 23 33 32 2d 53  |,DIT,T,ROR #32-S|
00003400  48 2d 34 0d 19 50 13 4d  4f 56 20 54 2c 54 2c 52  |H-4..P.MOV T,T,R|
00003410  4f 52 20 23 53 48 0d 19  5a 25 53 55 42 20 54 2c  |OR #SH..Z%SUB T,|
00003420  54 2c 23 31 20 3c 3c 20  28 33 32 2d 53 48 29 20  |T,#1 << (32-SH) |
00003430  20 20 20 20 20 3b 20 6a  2d 3d 31 0d 19 64 1f 41  |     ; j-=1..d.A|
00003440  44 44 20 50 33 2c 44 49  54 2c 54 2c 52 4f 52 20  |DD P3,DIT,T,ROR |
00003450  23 33 32 2d 32 2a 53 48  2d 34 0d 19 6e 04 0d 19  |#32-2*SH-4..n...|
00003460  78 14 53 55 42 53 20 58  2c 43 53 2c 23 31 30 30  |x.SUBS X,CS,#100|
00003470  2f 38 0d 19 82 0e 4d 4f  56 4d 49 20 58 2c 23 30  |/8....MOVMI X,#0|
00003480  0d 19 8c 3d 4d 4f 56 20  58 2c 58 2c 4c 53 52 20  |...=MOV X,X,LSR |
00003490  23 37 2d 33 20 20 20 20  20 20 20 20 20 20 20 20  |#7-3            |
000034a0  20 3b 20 64 65 70 74 68  20 71 75 65 75 65 20 63  | ; depth queue c|
000034b0  6f 6c 6f 72 20 6f 66 20  70 61 74 63 68 0d 19 96  |olor of patch...|
000034c0  11 4c 44 52 20 54 2c 5b  50 30 2c 23 38 5d 0d 19  |.LDR T,[P0,#8]..|
000034d0  a0 0d 84 52 20 54 2c 54  2c 23 33 0d 19 aa 0c 82  |...R T,T,#3.....|
000034e0  20 50 34 2c 54 2c 58 0d  19 b4 18 53 54 4d 49 41  | P4,T,X....STMIA|
000034f0  20 54 41 42 2c 7b 50 30  2c 50 31 2c 50 32 7d 0d  | TAB,{P0,P1,P2}.|
00003500  19 be 10 42 4c 20 70 6f  6c 79 5f 66 69 6c 6c 0d  |...BL poly_fill.|
00003510  19 c8 18 53 54 4d 49 41  20 54 41 42 2c 7b 50 30  |...STMIA TAB,{P0|
00003520  2c 50 32 2c 50 33 7d 0d  19 d2 10 42 4c 20 70 6f  |,P2,P3}....BL po|
00003530  6c 79 5f 66 69 6c 6c 0d  19 dc 0e 43 4d 50 20 20  |ly_fill....CMP  |
00003540  20 59 2c 23 30 0d 19 e6  14 4c 44 4d 4e 45 49 41  | Y,#0....LDMNEIA|
00003550  20 59 2c 7b 50 30 2c 59  7d 0d 19 f0 10 42 4e 45  | Y,{P0,Y}....BNE|
00003560  20 64 72 61 77 5f 62 69  6e 0d 19 fa 0c 2e 65 6e  | draw_bin.....en|
00003570  64 5f 62 69 6e 0d 1a 04  11 53 55 42 53 20 43 53  |d_bin....SUBS CS|
00003580  2c 43 53 2c 23 31 0d 1a  0e 10 42 4e 45 20 6e 65  |,CS,#1....BNE ne|
00003590  78 74 5f 62 69 6e 0d 1a  18 12 4c 44 4d 46 44 20  |xt_bin....LDMFD |
000035a0  31 33 21 2c 7b 50 43 7d  0d 1a 22 04 0d 1a 2c 04  |13!,{PC}.."...,.|
000035b0  0d 1a 36 09 2e 76 6c 61  6b 0d 1a 40 26 45 51 55  |..6..vlak..@&EQU|
000035c0  44 20 30 3a 45 51 55 44  20 30 3a 45 51 55 44 20  |D 0:EQUD 0:EQUD |
000035d0  30 3a 45 51 55 44 20 30  3a 45 51 55 44 20 30 0d  |0:EQUD 0:EQUD 0.|
000035e0  1a 4a 05 5d 0d 1a 54 05  ed 0d 1a 5e 09 51 25 3d  |.J.]..T....^.Q%=|
000035f0  50 25 0d 1a 68 05 e1 0d  1a 72 04 0d 1a 7c 04 0d  |P%..h....r...|..|
00003600  1a 86 12 dd 20 f2 63 61  6c 63 5f 69 6e 76 65 72  |.... .calc_inver|
00003610  73 0d 1a 90 15 de 20 49  4e 56 45 52 53 20 34 30  |s..... INVERS 40|
00003620  39 34 2a 34 2a 32 0d 1a  9a 0d 21 49 4e 56 45 52  |94*4*2....!INVER|
00003630  53 3d 31 0d 1a a4 0b 4b  3d 31 3c 3c 32 31 0d 1a  |S=1....K=1<<21..|
00003640  ae 2d e3 20 49 3d 31 20  b8 20 32 2a 34 30 39 34  |.-. I=1 . 2*4094|
00003650  2d 31 3a 49 4e 56 45 52  53 21 28 34 2a 49 29 3d  |-1:INVERS!(4*I)=|
00003660  4b 2f 28 49 2b 30 2e 35  29 3a ed 0d 1a b8 05 e1  |K/(I+0.5):......|
00003670  0d 1a c2 04 0d 1a cc 04  0d 1a d6 0e dd 20 f2 67  |............. .g|
00003680  6f 75 72 61 75 64 0d 1a  e0 16 ea 20 53 46 2c 46  |ouraud..... SF,F|
00003690  49 58 2c 53 4d 2c 46 50  2c 49 2c 47 0d 1a ea 1b  |IX,SM,FP,I,G....|
000036a0  ea 20 44 58 44 2c 44 59  44 2c 54 58 44 2c 54 59  |. DXD,DYD,TXD,TY|
000036b0  44 2c 58 44 2c 59 44 0d  1a f4 04 0d 1a fe 04 0d  |D,XD,YD.........|
000036c0  1b 08 10 f2 63 61 6c 63  5f 69 6e 76 65 72 73 0d  |....calc_invers.|
000036d0  1b 12 04 0d 1b 1c 12 53  46 3d 31 32 3a 46 49 58  |.......SF=12:FIX|
000036e0  3d 32 5e 53 46 0d 1b 26  09 53 4d 3d 31 30 0d 1b  |=2^SF..&.SM=10..|
000036f0  30 0c 46 50 3d 53 46 2b  53 4d 0d 1b 3a 04 0d 1b  |0.FP=SF+SM..:...|
00003700  44 41 48 3d 30 3a 43 31  3d 31 3a 4c 3d 32 3a 52  |DAH=0:C1=1:L=2:R|
00003710  3d 33 3a 43 54 3d 34 3a  49 3d 35 3a 58 4c 3d 36  |=3:CT=4:I=5:XL=6|
00003720  3a 58 52 3d 37 3a 43 32  3d 38 3a 54 3d 39 3a 4f  |:XR=7:C2=8:T=9:O|
00003730  3d 31 30 3a 4c 41 3d 31  31 3a 52 41 3d 31 32 0d  |=10:LA=11:RA=12.|
00003740  1b 4e 04 0d 1b 58 21 58  31 3d 30 3a 59 31 3d 31  |.N...X!X1=0:Y1=1|
00003750  3a 58 32 3d 32 3a 59 32  3d 33 3a 58 33 3d 34 3a  |:X2=2:Y2=3:X3=4:|
00003760  59 33 3d 35 0d 1b 62 12  49 31 3d 36 3a 49 32 3d  |Y3=5..b.I1=6:I2=|
00003770  37 3a 49 33 3d 38 0d 1b  6c 1e 53 43 52 45 45 4e  |7:I3=8..l.SCREEN|
00003780  3d 31 32 3a 42 49 54 4d  41 50 3d 31 33 3a 54 6d  |=12:BITMAP=13:Tm|
00003790  70 3d 31 34 0d 1b 76 04  0d 1b 80 24 41 3d 30 3a  |p=14..v....$A=0:|
000037a0  42 3d 31 3a 43 3d 39 3a  44 3d 31 30 3a 54 6d 70  |B=1:C=9:D=10:Tmp|
000037b0  32 3d 31 32 3a 48 65 6c  70 3d 31 33 0d 1b 8a 04  |2=12:Help=13....|
000037c0  0d 1b 94 0e de 20 51 25  20 32 30 30 30 30 0d 1b  |..... Q% 20000..|
000037d0  9e 14 e3 20 50 41 53 53  3d 30 20 b8 20 32 20 88  |... PASS=0 . 2 .|
000037e0  20 32 0d 1b a8 09 50 25  3d 51 25 0d 1b b2 0d 5b  | 2....P%=Q%....[|
000037f0  4f 50 54 20 50 41 53 53  0d 1b bc 04 0d 1b c6 0a  |OPT PASS........|
00003800  2e 63 6c 65 61 72 0d 1b  d0 2b 4d 4f 56 20 52 30  |.clear...+MOV R0|
00003810  2c 23 30 3a 4d 4f 56 20  52 31 2c 23 30 3a 4d 4f  |,#0:MOV R1,#0:MO|
00003820  56 20 52 32 2c 23 30 3a  4d 4f 56 20 52 33 2c 23  |V R2,#0:MOV R3,#|
00003830  30 0d 1b da 2b 4d 4f 56  20 52 34 2c 23 30 3a 4d  |0...+MOV R4,#0:M|
00003840  4f 56 20 52 35 2c 23 30  3a 4d 4f 56 20 52 36 2c  |OV R5,#0:MOV R6,|
00003850  23 30 3a 4d 4f 56 20 52  37 2c 23 30 0d 1b e4 17  |#0:MOV R7,#0....|
00003860  4d 4f 56 20 52 38 2c 23  30 3a 4d 4f 56 20 52 39  |MOV R8,#0:MOV R9|
00003870  2c 23 30 0d 1b ee 24 4c  44 52 20 52 31 30 2c 53  |,#0...$LDR R10,S|
00003880  43 52 45 45 4e 32 3a 4d  4f 56 20 52 31 31 2c 23  |CREEN2:MOV R11,#|
00003890  32 35 36 2a 33 32 30 0d  1b f8 0a 2e 63 6c 6f 6f  |256*320.....cloo|
000038a0  70 0d 1c 02 16 53 54 4d  49 41 20 52 31 30 21 2c  |p....STMIA R10!,|
000038b0  7b 52 30 2d 52 39 7d 0d  1c 0c 16 53 54 4d 49 41  |{R0-R9}....STMIA|
000038c0  20 52 31 30 21 2c 7b 52  30 2d 52 39 7d 0d 1c 16  | R10!,{R0-R9}...|
000038d0  16 53 54 4d 49 41 20 52  31 30 21 2c 7b 52 30 2d  |.STMIA R10!,{R0-|
000038e0  52 39 7d 0d 1c 20 16 53  54 4d 49 41 20 52 31 30  |R9}.. .STMIA R10|
000038f0  21 2c 7b 52 30 2d 52 39  7d 0d 1c 2a 18 53 55 42  |!,{R0-R9}..*.SUB|
00003900  53 20 52 31 31 2c 52 31  31 2c 23 34 2a 31 30 2a  |S R11,R11,#4*10*|
00003910  34 0d 1c 34 0d 42 4e 45  20 63 6c 6f 6f 70 0d 1c  |4..4.BNE cloop..|
00003920  3e 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 1c 48 04  |>.MOV PC,R14..H.|
00003930  0d 1c 52 1d 2e 53 43 52  45 45 4e 31 20 45 51 55  |..R..SCREEN1 EQU|
00003940  44 20 31 34 38 3a 45 51  55 44 20 2d 31 0d 1c 5c  |D 148:EQUD -1..\|
00003950  13 2e 53 43 52 45 45 4e  32 20 45 51 55 44 20 30  |..SCREEN2 EQUD 0|
00003960  0d 1c 66 12 2e 53 43 52  45 45 4e 33 20 44 43 44  |..f..SCREEN3 DCD|
00003970  20 30 0d 1c 70 08 2e 73  65 74 0d 1c 7a 12 41 44  | 0..p..set..z.AD|
00003980  52 20 52 30 2c 53 43 52  45 45 4e 31 0d 1c 84 12  |R R0,SCREEN1....|
00003990  41 44 52 20 52 31 2c 53  43 52 45 45 4e 32 0d 1c  |ADR R1,SCREEN2..|
000039a0  8e 1d 53 57 49 20 22 4f  53 5f 52 65 61 64 56 64  |..SWI "OS_ReadVd|
000039b0  75 56 61 72 69 61 62 6c  65 73 22 0d 1c 98 0d 4d  |uVariables"....M|
000039c0  4f 56 20 31 35 2c 31 34  0d 1c a2 04 0d 1c ac 13  |OV 15,14........|
000039d0  2e 6d 6f 64 65 20 20 20  20 20 44 43 44 20 31 0d  |.mode     DCD 1.|
000039e0  1c b6 15 20 20 20 20 20  20 20 20 20 20 44 43 44  |...          DCD|
000039f0  20 33 32 30 0d 1c c0 15  20 20 20 20 20 20 20 20  | 320....        |
00003a00  20 20 44 43 44 20 32 35  36 0d 1c ca 13 20 20 20  |  DCD 256....   |
00003a10  20 20 20 20 20 20 20 44  43 44 20 33 0d 1c d4 14  |       DCD 3....|
00003a20  20 20 20 20 20 20 20 20  20 20 44 43 44 20 2d 31  |          DCD -1|
00003a30  0d 1c de 1b 20 20 20 20  20 20 20 20 20 20 44 43  |....          DC|
00003a40  44 20 30 3a 44 43 44 20  31 32 38 0d 1c e8 1b 20  |D 0:DCD 128.... |
00003a50  20 20 20 20 20 20 20 20  20 44 43 44 20 33 3a 44  |         DCD 3:D|
00003a60  43 44 20 32 35 35 0d 1c  f2 14 20 20 20 20 20 20  |CD 255....      |
00003a70  20 20 20 20 44 43 44 20  2d 31 0d 1c fc 0d 2e 73  |    DCD -1.....s|
00003a80  65 74 5f 6d 6f 64 65 0d  1d 06 0d 4d 4f 56 20 52  |et_mode....MOV R|
00003a90  30 2c 23 30 0d 1d 10 0f  41 44 52 20 52 31 2c 6d  |0,#0....ADR R1,m|
00003aa0  6f 64 65 0d 1d 1a 17 53  57 49 20 22 4f 53 5f 53  |ode....SWI "OS_S|
00003ab0  63 72 65 65 6e 4d 6f 64  65 22 0d 1d 24 1a 53 57  |creenMode"..$.SW|
00003ac0  49 20 22 4f 53 5f 52 65  6d 6f 76 65 43 75 72 73  |I "OS_RemoveCurs|
00003ad0  6f 72 73 22 0d 1d 2e 0e  4d 4f 56 20 70 63 2c 72  |ors"....MOV pc,r|
00003ae0  31 34 0d 1d 38 04 0d 1d  42 0b a4 70 72 65 64 65  |14..8...B..prede|
00003af0  66 0d 1d 4c 0e 2e 70 6f  6c 79 5f 66 69 6c 6c 0d  |f..L..poly_fill.|
00003b00  1d 56 0c a4 70 72 65 63  61 6c 63 0d 1d 60 0a a4  |.V..precalc..`..|
00003b10  70 69 65 63 65 0d 1d 6a  05 5d 0d 1d 74 05 ed 0d  |piece..j.]..t...|
00003b20  1d 7e 09 51 25 3d 50 25  0d 1d 88 05 e1 0d 1d 92  |.~.Q%=P%........|
00003b30  04 0d 1d 9c 04 0d 1d a6  04 0d 1d b0 04 0d 1d ba  |................|
00003b40  17 dd 20 a4 61 64 72 28  72 65 67 2c 61 64 64 72  |.. .adr(reg,addr|
00003b50  65 73 73 29 0d 1d c4 17  6f 66 66 73 65 74 3d 61  |ess)....offset=a|
00003b60  64 64 72 65 73 73 2d 50  25 2d 38 0d 1d ce 10 e7  |ddress-P%-8.....|
00003b70  20 6f 66 66 73 65 74 3e  30 20 8c 0d 1d d8 1a 6f  | offset>0 .....o|
00003b80  66 66 73 65 74 31 3d 6f  66 66 73 65 74 20 80 20  |ffset1=offset . |
00003b90  32 35 35 2a 34 0d 1d e2  1e 6f 66 66 73 65 74 32  |255*4....offset2|
00003ba0  3d 6f 66 66 73 65 74 20  80 20 32 35 35 2a 32 35  |=offset . 255*25|
00003bb0  36 2a 34 0d 1d ec 22 6f  66 66 73 65 74 33 3d 6f  |6*4..."offset3=o|
00003bc0  66 66 73 65 74 20 80 20  32 35 35 2a 32 35 36 2a  |ffset . 255*256*|
00003bd0  32 35 36 2a 34 0d 1d f6  39 20 20 20 20 20 20 20  |256*4...9       |
00003be0  20 20 20 20 20 20 20 20  5b 4f 50 54 20 50 41 53  |        [OPT PAS|
00003bf0  53 3a 41 44 44 20 20 20  20 20 20 20 72 65 67 2c  |S:ADD       reg,|
00003c00  20 31 35 2c 23 6f 66 66  73 65 74 31 3a 5d 0d 1e  | 15,#offset1:]..|
00003c10  00 38 e7 20 6f 66 66 73  65 74 32 3c 3e 30 20 20  |.8. offset2<>0  |
00003c20  5b 4f 50 54 20 50 41 53  53 3a 41 44 44 20 20 20  |[OPT PASS:ADD   |
00003c30  20 20 20 20 72 65 67 2c  72 65 67 2c 23 6f 66 66  |    reg,reg,#off|
00003c40  73 65 74 32 3a 5d 0d 1e  0a 38 e7 20 6f 66 66 73  |set2:]...8. offs|
00003c50  65 74 33 3c 3e 30 20 20  5b 4f 50 54 20 50 41 53  |et3<>0  [OPT PAS|
00003c60  53 3a 41 44 44 20 20 20  20 20 20 20 72 65 67 2c  |S:ADD       reg,|
00003c70  72 65 67 2c 23 6f 66 66  73 65 74 33 3a 5d 0d 1e  |reg,#offset3:]..|
00003c80  14 05 cc 0d 1e 1e 1b 6f  66 66 73 65 74 31 3d 2d  |.......offset1=-|
00003c90  6f 66 66 73 65 74 20 80  20 32 35 35 2a 34 0d 1e  |offset . 255*4..|
00003ca0  28 1f 6f 66 66 73 65 74  32 3d 2d 6f 66 66 73 65  |(.offset2=-offse|
00003cb0  74 20 80 20 32 35 35 2a  32 35 36 2a 34 0d 1e 32  |t . 255*256*4..2|
00003cc0  23 6f 66 66 73 65 74 33  3d 2d 6f 66 66 73 65 74  |#offset3=-offset|
00003cd0  20 80 20 32 35 35 2a 32  35 36 2a 32 35 36 2a 34  | . 255*256*256*4|
00003ce0  0d 1e 3c 39 20 20 20 20  20 20 20 20 20 20 20 20  |..<9            |
00003cf0  20 20 20 5b 4f 50 54 20  50 41 53 53 3a 53 55 42  |   [OPT PASS:SUB|
00003d00  20 20 20 20 20 20 20 72  65 67 2c 20 31 35 2c 23  |       reg, 15,#|
00003d10  6f 66 66 73 65 74 31 3a  5d 0d 1e 46 38 e7 20 6f  |offset1:]..F8. o|
00003d20  66 66 73 65 74 32 3c 3e  30 20 20 5b 4f 50 54 20  |ffset2<>0  [OPT |
00003d30  50 41 53 53 3a 53 55 42  20 20 20 20 20 20 20 72  |PASS:SUB       r|
00003d40  65 67 2c 72 65 67 2c 23  6f 66 66 73 65 74 32 3a  |eg,reg,#offset2:|
00003d50  5d 0d 1e 50 38 e7 20 6f  66 66 73 65 74 33 3c 3e  |]..P8. offset3<>|
00003d60  30 20 20 5b 4f 50 54 20  50 41 53 53 3a 53 55 42  |0  [OPT PASS:SUB|
00003d70  20 20 20 20 20 20 20 72  65 67 2c 72 65 67 2c 23  |       reg,reg,#|
00003d80  6f 66 66 73 65 74 33 3a  5d 0d 1e 5a 05 cd 0d 1e  |offset3:]..Z....|
00003d90  64 05 cd 0d 1e 6e 07 3d  22 22 0d 1e 78 04 0d 1e  |d....n.=""..x...|
00003da0  82 0d dd 20 a4 70 72 65  64 65 66 0d 1e 8c 0d 5b  |... .predef....[|
00003db0  4f 50 54 20 50 41 53 53  0d 1e 96 38 2e 73 61 76  |OPT PASS...8.sav|
00003dc0  65 5f 72 65 67 73 20 44  43 44 20 30 3a 44 43 44  |e_regs DCD 0:DCD|
00003dd0  20 30 3a 44 43 44 20 30  3a 44 43 44 20 30 3a 44  | 0:DCD 0:DCD 0:D|
00003de0  43 44 20 30 3a 44 43 44  20 30 3a 44 43 44 20 30  |CD 0:DCD 0:DCD 0|
00003df0  0d 1e a0 04 0d 1e aa 0f  2e 58 31 44 20 45 51 55  |.........X1D EQU|
00003e00  44 20 30 0d 1e b4 0f 2e  58 32 44 20 45 51 55 44  |D 0.....X2D EQUD|
00003e10  20 30 0d 1e be 04 0d 1e  c8 10 2e 44 58 32 31 20  | 0.........DX21 |
00003e20  45 51 55 44 20 30 0d 1e  d2 10 2e 44 58 33 32 20  |EQUD 0.....DX32 |
00003e30  45 51 55 44 20 30 0d 1e  dc 10 2e 44 58 33 31 20  |EQUD 0.....DX31 |
00003e40  45 51 55 44 20 30 0d 1e  e6 04 0d 1e f0 10 2e 44  |EQUD 0.........D|
00003e50  59 32 31 20 45 51 55 44  20 30 0d 1e fa 10 2e 44  |Y21 EQUD 0.....D|
00003e60  59 33 32 20 45 51 55 44  20 30 0d 1f 04 04 0d 1f  |Y32 EQUD 0......|
00003e70  0e 04 0d 1f 18 13 2e 53  43 52 45 45 4e 44 20 45  |.......SCREEND E|
00003e80  51 55 44 20 30 0d 1f 22  13 2e 73 70 64 20 20 20  |QUD 0.."..spd   |
00003e90  20 20 20 44 43 44 20 30  0d 1f 2c 04 0d 1f 36 05  |   DCD 0..,...6.|
00003ea0  5d 0d 1f 40 07 3d 22 22  0d 1f 4a 04 0d 1f 54 04  |]..@.=""..J...T.|
00003eb0  0d 1f 5e 0e dd 20 a4 70  72 65 63 61 6c 63 0d 1f  |..^.. .precalc..|
00003ec0  68 0d 5b 4f 50 54 20 50  41 53 53 0d 1f 72 31 3b  |h.[OPT PASS..r1;|
00003ed0  f4 20 70 61 72 61 6d 74  65 72 73 20 52 30 2d 52  |. paramters R0-R|
00003ee0  38 3d 78 30 2c 79 30 2c  78 31 2c 79 31 2c 78 32  |8=x0,y0,x1,y1,x2|
00003ef0  2c 79 32 2c 69 30 2c 69  31 2c 69 32 0d 1f 7c 04  |,y2,i0,i1,i2..|.|
00003f00  0d 1f 86 25 20 20 20 20  20 20 20 20 20 20 53 54  |...%          ST|
00003f10  4d 46 44 20 20 20 20 20  31 33 21 2c 7b 30 2d 31  |MFD     13!,{0-1|
00003f20  32 2c 31 34 7d 0d 1f 90  1e 20 20 20 20 20 20 20  |2,14}....       |
00003f30  20 20 20 53 54 52 20 20  20 20 20 20 20 31 33 2c  |   STR       13,|
00003f40  73 70 64 0d 1f 9a 04 0d  1f a4 13 4c 44 4d 49 41  |spd........LDMIA|
00003f50  20 32 2c 7b 30 2c 31 2c  32 7d 0d 1f ae 13 4c 44  | 2,{0,1,2}....LD|
00003f60  4d 49 41 20 32 2c 7b 34  2c 35 2c 38 7d 0d 1f b8  |MIA 2,{4,5,8}...|
00003f70  13 4c 44 4d 49 41 20 31  2c 7b 32 2c 33 2c 37 7d  |.LDMIA 1,{2,3,7}|
00003f80  0d 1f c2 13 4c 44 4d 49  41 20 30 2c 7b 30 2c 31  |....LDMIA 0,{0,1|
00003f90  2c 36 7d 0d 1f cc 12 4d  4f 56 20 36 2c 36 2c 4c  |,6}....MOV 6,6,L|
00003fa0  53 4c 20 23 36 0d 1f d6  12 4d 4f 56 20 37 2c 37  |SL #6....MOV 7,7|
00003fb0  2c 4c 53 4c 20 23 36 0d  1f e0 12 4d 4f 56 20 38  |,LSL #6....MOV 8|
00003fc0  2c 38 2c 4c 53 4c 20 23  36 0d 1f ea 04 0d 1f f4  |,8,LSL #6.......|
00003fd0  04 0d 1f fe 3a 3b 73 6f  72 74 20 76 65 72 74 69  |....:;sort verti|
00003fe0  63 65 73 20 73 6f 20 74  68 61 74 20 79 31 2c 79  |ces so that y1,y|
00003ff0  32 2c 79 33 20 61 72 65  20 69 6e 20 61 73 63 65  |2,y3 are in asce|
00004000  6e 64 69 6e 67 20 6f 72  64 65 72 0d 20 08 1d 20  |nding order. .. |
00004010  20 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |         CMP    |
00004020  20 20 20 59 31 2c 59 32  0d 20 12 20 20 20 20 20  |   Y1,Y2. .     |
00004030  20 20 20 20 20 20 42 4c  45 20 20 20 20 20 20 20  |      BLE       |
00004040  69 6e 6f 72 64 65 72 31  0d 20 1c 45 3b 20 69 66  |inorder1. .E; if|
00004050  20 79 31 20 3e 20 79 32  20 74 68 65 6e 20 73 77  | y1 > y2 then sw|
00004060  61 70 28 78 31 2c 78 32  29 20 73 77 61 70 28 79  |ap(x1,x2) swap(y|
00004070  31 2c 79 32 29 20 73 77  61 70 28 75 31 2c 75 32  |1,y2) swap(u1,u2|
00004080  29 20 73 77 61 70 28 76  31 2c 76 32 29 0d 20 26  |) swap(v1,v2). &|
00004090  1e 20 20 20 20 20 20 20  20 20 20 82 20 20 20 20  |.          .    |
000040a0  20 20 20 59 31 2c 59 31  2c 59 32 0d 20 30 1e 20  |   Y1,Y1,Y2. 0. |
000040b0  20 20 20 20 20 20 20 20  20 82 20 20 20 20 20 20  |         .      |
000040c0  20 58 31 2c 58 31 2c 58  32 0d 20 3a 1e 20 20 20  | X1,X1,X2. :.   |
000040d0  20 20 20 20 20 20 20 82  20 20 20 20 20 20 20 49  |       .       I|
000040e0  31 2c 49 31 2c 49 32 0d  20 44 1e 20 20 20 20 20  |1,I1,I2. D.     |
000040f0  20 20 20 20 20 82 20 20  20 20 20 20 20 59 32 2c  |     .       Y2,|
00004100  59 32 2c 59 31 0d 20 4e  1e 20 20 20 20 20 20 20  |Y2,Y1. N.       |
00004110  20 20 20 82 20 20 20 20  20 20 20 58 32 2c 58 32  |   .       X2,X2|
00004120  2c 58 31 0d 20 58 1e 20  20 20 20 20 20 20 20 20  |,X1. X.         |
00004130  20 82 20 20 20 20 20 20  20 49 32 2c 49 32 2c 49  | .       I2,I2,I|
00004140  31 0d 20 62 1e 20 20 20  20 20 20 20 20 20 20 82  |1. b.          .|
00004150  20 20 20 20 20 20 20 59  31 2c 59 31 2c 59 32 0d  |       Y1,Y1,Y2.|
00004160  20 6c 1e 20 20 20 20 20  20 20 20 20 20 82 20 20  | l.          .  |
00004170  20 20 20 20 20 58 31 2c  58 31 2c 58 32 0d 20 76  |     X1,X1,X2. v|
00004180  1e 20 20 20 20 20 20 20  20 20 20 82 20 20 20 20  |.          .    |
00004190  20 20 20 49 31 2c 49 31  2c 49 32 0d 20 80 0d 2e  |   I1,I1,I2. ...|
000041a0  69 6e 6f 72 64 65 72 31  0d 20 8a 1d 20 20 20 20  |inorder1. ..    |
000041b0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 20 20  |      CMP       |
000041c0  59 32 2c 59 33 0d 20 94  20 20 20 20 20 20 20 20  |Y2,Y3. .        |
000041d0  20 20 20 42 4c 45 20 20  20 20 20 20 20 69 6e 6f  |   BLE       ino|
000041e0  72 64 65 72 32 0d 20 9e  45 3b 20 69 66 20 79 32  |rder2. .E; if y2|
000041f0  20 3e 20 79 33 20 74 68  65 6e 20 73 77 61 70 28  | > y3 then swap(|
00004200  78 32 2c 78 33 29 20 73  77 61 70 28 79 32 2c 79  |x2,x3) swap(y2,y|
00004210  33 29 20 73 77 61 70 28  75 32 2c 75 33 29 20 73  |3) swap(u2,u3) s|
00004220  77 61 70 28 76 32 2c 76  33 29 0d 20 a8 1e 20 20  |wap(v2,v3). ..  |
00004230  20 20 20 20 20 20 20 20  82 20 20 20 20 20 20 20  |        .       |
00004240  59 32 2c 59 32 2c 59 33  0d 20 b2 1e 20 20 20 20  |Y2,Y2,Y3. ..    |
00004250  20 20 20 20 20 20 82 20  20 20 20 20 20 20 58 32  |      .       X2|
00004260  2c 58 32 2c 58 33 0d 20  bc 1e 20 20 20 20 20 20  |,X2,X3. ..      |
00004270  20 20 20 20 82 20 20 20  20 20 20 20 49 32 2c 49  |    .       I2,I|
00004280  32 2c 49 33 0d 20 c6 1e  20 20 20 20 20 20 20 20  |2,I3. ..        |
00004290  20 20 82 20 20 20 20 20  20 20 59 33 2c 59 33 2c  |  .       Y3,Y3,|
000042a0  59 32 0d 20 d0 1e 20 20  20 20 20 20 20 20 20 20  |Y2. ..          |
000042b0  82 20 20 20 20 20 20 20  58 33 2c 58 33 2c 58 32  |.       X3,X3,X2|
000042c0  0d 20 da 1e 20 20 20 20  20 20 20 20 20 20 82 20  |. ..          . |
000042d0  20 20 20 20 20 20 49 33  2c 49 33 2c 49 32 0d 20  |      I3,I3,I2. |
000042e0  e4 1e 20 20 20 20 20 20  20 20 20 20 82 20 20 20  |..          .   |
000042f0  20 20 20 20 59 32 2c 59  32 2c 59 33 0d 20 ee 1e  |    Y2,Y2,Y3. ..|
00004300  20 20 20 20 20 20 20 20  20 20 82 20 20 20 20 20  |          .     |
00004310  20 20 58 32 2c 58 32 2c  58 33 0d 20 f8 1e 20 20  |  X2,X2,X3. ..  |
00004320  20 20 20 20 20 20 20 20  82 20 20 20 20 20 20 20  |        .       |
00004330  49 32 2c 49 32 2c 49 33  0d 21 02 0d 2e 69 6e 6f  |I2,I2,I3.!...ino|
00004340  72 64 65 72 32 0d 21 0c  1d 20 20 20 20 20 20 20  |rder2.!..       |
00004350  20 20 20 43 4d 50 20 20  20 20 20 20 20 59 31 2c  |   CMP       Y1,|
00004360  59 32 0d 21 16 20 20 20  20 20 20 20 20 20 20 20  |Y2.!.           |
00004370  42 4c 45 20 20 20 20 20  20 20 69 6e 6f 72 64 65  |BLE       inorde|
00004380  72 33 0d 21 20 2c 3b 20  69 66 20 28 79 31 20 3e  |r3.! ,; if (y1 >|
00004390  20 79 32 29 20 6f 72 20  28 79 31 3d 79 32 20 61  | y2) or (y1=y2 a|
000043a0  6e 64 20 78 31 3e 78 32  29 20 74 68 65 6e 0d 21  |nd x1>x2) then.!|
000043b0  2a 35 3b 20 73 77 61 70  28 78 31 2c 78 32 29 20  |*5; swap(x1,x2) |
000043c0  73 77 61 70 28 79 31 2c  79 32 29 20 73 77 61 70  |swap(y1,y2) swap|
000043d0  28 75 31 2c 75 32 29 20  73 77 61 70 28 76 31 2c  |(u1,u2) swap(v1,|
000043e0  76 32 29 0d 21 34 1e 20  20 20 20 20 20 20 20 20  |v2).!4.         |
000043f0  20 82 20 20 20 20 20 20  20 59 31 2c 59 31 2c 59  | .       Y1,Y1,Y|
00004400  32 0d 21 3e 1e 20 20 20  20 20 20 20 20 20 20 82  |2.!>.          .|
00004410  20 20 20 20 20 20 20 58  31 2c 58 31 2c 58 32 0d  |       X1,X1,X2.|
00004420  21 48 1e 20 20 20 20 20  20 20 20 20 20 82 20 20  |!H.          .  |
00004430  20 20 20 20 20 49 31 2c  49 31 2c 49 32 0d 21 52  |     I1,I1,I2.!R|
00004440  1e 20 20 20 20 20 20 20  20 20 20 82 20 20 20 20  |.          .    |
00004450  20 20 20 59 32 2c 59 32  2c 59 31 0d 21 5c 1e 20  |   Y2,Y2,Y1.!\. |
00004460  20 20 20 20 20 20 20 20  20 82 20 20 20 20 20 20  |         .      |
00004470  20 58 32 2c 58 32 2c 58  31 0d 21 66 1e 20 20 20  | X2,X2,X1.!f.   |
00004480  20 20 20 20 20 20 20 82  20 20 20 20 20 20 20 49  |       .       I|
00004490  32 2c 49 32 2c 49 31 0d  21 70 1e 20 20 20 20 20  |2,I2,I1.!p.     |
000044a0  20 20 20 20 20 82 20 20  20 20 20 20 20 59 31 2c  |     .       Y1,|
000044b0  59 31 2c 59 32 0d 21 7a  1e 20 20 20 20 20 20 20  |Y1,Y2.!z.       |
000044c0  20 20 20 82 20 20 20 20  20 20 20 58 31 2c 58 31  |   .       X1,X1|
000044d0  2c 58 32 0d 21 84 1e 20  20 20 20 20 20 20 20 20  |,X2.!..         |
000044e0  20 82 20 20 20 20 20 20  20 49 31 2c 49 31 2c 49  | .       I1,I1,I|
000044f0  32 0d 21 8e 0d 2e 69 6e  6f 72 64 65 72 33 0d 21  |2.!...inorder3.!|
00004500  98 1e 20 20 20 20 20 20  20 20 20 20 53 54 52 20  |..          STR |
00004510  20 20 20 20 20 20 58 31  2c 58 31 44 0d 21 a2 1e  |      X1,X1D.!..|
00004520  20 20 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |          STR   |
00004530  20 20 20 20 58 32 2c 58  32 44 0d 21 ac 1e 20 20  |    X2,X2D.!..  |
00004540  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00004550  20 20 49 31 2c 49 31 44  0d 21 b6 20 20 20 20 20  |  I1,I1D.!.     |
00004560  20 20 20 20 20 20 53 55  42 20 20 20 20 20 20 20  |      SUB       |
00004570  58 32 2c 58 32 2c 58 31  0d 21 c0 20 20 20 20 20  |X2,X2,X1.!.     |
00004580  20 20 20 20 20 20 53 55  42 20 20 20 20 20 20 20  |      SUB       |
00004590  59 32 2c 59 32 2c 59 31  0d 21 ca 20 20 20 20 20  |Y2,Y2,Y1.!.     |
000045a0  20 20 20 20 20 20 53 55  42 20 20 20 20 20 20 20  |      SUB       |
000045b0  58 33 2c 58 33 2c 58 31  0d 21 d4 20 20 20 20 20  |X3,X3,X1.!.     |
000045c0  20 20 20 20 20 20 53 55  42 20 20 20 20 20 20 20  |      SUB       |
000045d0  59 33 2c 59 33 2c 59 31  0d 21 de 20 20 20 20 20  |Y3,Y3,Y1.!.     |
000045e0  20 20 20 20 20 20 53 55  42 20 20 20 20 20 20 20  |      SUB       |
000045f0  49 32 2c 49 32 2c 49 31  0d 21 e8 20 20 20 20 20  |I2,I2,I1.!.     |
00004600  20 20 20 20 20 20 53 55  42 20 20 20 20 20 20 20  |      SUB       |
00004610  49 33 2c 49 33 2c 49 31  0d 21 f2 04 0d 21 fc 2a  |I3,I3,I1.!...!.*|
00004620  3b 20 73 63 72 65 65 6e  27 3d 73 63 72 65 65 6e  |; screen'=screen|
00004630  20 2b 20 33 32 30 2a 79  31 20 20 20 20 28 6d 6f  | + 320*y1    (mo|
00004640  64 65 20 31 33 29 0d 22  06 27 20 20 20 20 20 20  |de 13).".'      |
00004650  20 20 20 20 a4 61 64 72  20 20 20 20 20 28 53 43  |    .adr     (SC|
00004660  52 45 45 4e 2c 53 43 52  45 45 4e 32 29 0d 22 10  |REEN,SCREEN2).".|
00004670  27 20 20 20 20 20 20 20  20 20 20 4c 44 52 20 20  |'          LDR  |
00004680  20 20 20 20 20 53 43 52  45 45 4e 2c 5b 53 43 52  |     SCREEN,[SCR|
00004690  45 45 4e 5d 0d 22 1a 28  20 20 20 20 20 20 20 20  |EEN].".(        |
000046a0  20 20 41 44 44 20 20 20  20 20 20 20 54 6d 70 2c  |  ADD       Tmp,|
000046b0  59 31 2c 59 31 2c 4c 53  4c 20 23 32 0d 22 24 30  |Y1,Y1,LSL #2."$0|
000046c0  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
000046d0  20 20 20 20 53 43 52 45  45 4e 2c 53 43 52 45 45  |    SCREEN,SCREE|
000046e0  4e 2c 54 6d 70 2c 4c 53  4c 20 23 36 0d 22 2e 26  |N,Tmp,LSL #6.".&|
000046f0  20 20 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |          STR   |
00004700  20 20 20 20 53 43 52 45  45 4e 2c 53 43 52 45 45  |    SCREEN,SCREE|
00004710  4e 44 0d 22 38 04 0d 22  42 24 20 20 20 20 20 20  |ND."8.."B$      |
00004720  20 20 20 20 a4 61 64 72  20 20 20 20 20 28 48 65  |    .adr     (He|
00004730  6c 70 2c 49 4e 56 45 52  53 29 0d 22 4c 1f 20 20  |lp,INVERS)."L.  |
00004740  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00004750  20 20 59 32 2c 44 59 32  31 0d 22 56 11 3b 20 63  |  Y2,DY21."V.; c|
00004760  61 6c 63 20 20 78 32 2f  79 32 0d 22 60 2c 20 20  |alc  x2/y2."`,  |
00004770  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00004780  20 20 54 6d 70 2c 5b 48  65 6c 70 2c 59 32 2c 4c  |  Tmp,[Help,Y2,L|
00004790  53 4c 20 23 32 5d 0d 22  6a 22 20 20 20 20 20 20  |SL #2]."j"      |
000047a0  20 20 20 20 4d 55 4c 20  20 20 20 20 20 20 54 6d  |    MUL       Tm|
000047b0  70 2c 58 32 2c 54 6d 70  0d 22 74 26 20 20 20 20  |p,X2,Tmp."t&    |
000047c0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 20 20  |      MOV       |
000047d0  54 6d 70 2c 54 6d 70 2c  41 53 52 20 23 39 0d 22  |Tmp,Tmp,ASR #9."|
000047e0  7e 20 20 20 20 20 20 20  20 20 20 20 53 54 52 20  |~           STR |
000047f0  20 20 20 20 20 20 54 6d  70 2c 44 58 32 31 0d 22  |      Tmp,DX21."|
00004800  88 20 20 20 20 20 20 20  20 20 20 20 53 55 42 20  |.           SUB |
00004810  20 20 20 20 20 20 59 31  2c 59 33 2c 59 32 0d 22  |      Y1,Y3,Y2."|
00004820  92 1f 20 20 20 20 20 20  20 20 20 20 53 54 52 20  |..          STR |
00004830  20 20 20 20 20 20 59 31  2c 44 59 33 32 0d 22 9c  |      Y1,DY32.".|
00004840  1a 3b 20 63 61 6c 63 20  28 78 33 2d 78 32 29 2f  |.; calc (x3-x2)/|
00004850  28 79 33 2d 79 32 29 0d  22 a6 2c 20 20 20 20 20  |(y3-y2).".,     |
00004860  20 20 20 20 20 4c 44 52  20 20 20 20 20 20 20 54  |     LDR       T|
00004870  6d 70 2c 5b 48 65 6c 70  2c 59 31 2c 4c 53 4c 20  |mp,[Help,Y1,LSL |
00004880  23 32 5d 0d 22 b0 20 20  20 20 20 20 20 20 20 20  |#2].".          |
00004890  20 53 55 42 20 20 20 20  20 20 20 58 31 2c 58 33  | SUB       X1,X3|
000048a0  2c 58 32 0d 22 ba 22 20  20 20 20 20 20 20 20 20  |,X2."."         |
000048b0  20 4d 55 4c 20 20 20 20  20 20 20 54 6d 70 2c 58  | MUL       Tmp,X|
000048c0  31 2c 54 6d 70 0d 22 c4  26 20 20 20 20 20 20 20  |1,Tmp.".&       |
000048d0  20 20 20 4d 4f 56 20 20  20 20 20 20 20 54 6d 70  |   MOV       Tmp|
000048e0  2c 54 6d 70 2c 41 53 52  20 23 39 0d 22 ce 20 20  |,Tmp,ASR #9.".  |
000048f0  20 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |         STR    |
00004900  20 20 20 54 6d 70 2c 44  58 33 32 0d 22 d8 16 3b  |   Tmp,DX32."..;|
00004910  20 63 61 6c 63 20 64 78  31 20 3d 20 78 33 2f 79  | calc dx1 = x3/y|
00004920  33 0d 22 e2 2c 20 20 20  20 20 20 20 20 20 20 4c  |3.".,          L|
00004930  44 52 20 20 20 20 20 20  20 54 6d 70 2c 5b 48 65  |DR       Tmp,[He|
00004940  6c 70 2c 59 33 2c 4c 53  4c 20 23 32 5d 0d 22 ec  |lp,Y3,LSL #2].".|
00004950  23 20 20 20 20 20 20 20  20 20 20 4d 55 4c 20 20  |#          MUL  |
00004960  20 20 20 20 20 54 6d 70  32 2c 58 33 2c 54 6d 70  |     Tmp2,X3,Tmp|
00004970  0d 22 f6 28 20 20 20 20  20 20 20 20 20 20 4d 4f  |.".(          MO|
00004980  56 20 20 20 20 20 20 20  54 6d 70 32 2c 54 6d 70  |V       Tmp2,Tmp|
00004990  32 2c 41 53 52 20 23 39  0d 23 00 21 20 20 20 20  |2,ASR #9.#.!    |
000049a0  20 20 20 20 20 20 53 54  52 20 20 20 20 20 20 20  |      STR       |
000049b0  54 6d 70 32 2c 44 58 33  31 0d 23 0a 0e 20 20 20  |Tmp2,DX31.#..   |
000049c0  20 20 20 20 20 20 20 0d  23 14 26 3b 20 73 68 61  |       .#.&; sha|
000049d0  64 69 6e 67 20 69 6e 63  72 65 6d 65 6e 74 20 69  |ding increment i|
000049e0  6e 20 79 20 64 69 72 65  63 74 69 6f 6e 0d 23 1e  |n y direction.#.|
000049f0  2c 3b 20 63 61 6c 63 20  64 69 31 20 3d 20 69 33  |,; calc di1 = i3|
00004a00  2f 79 33 20 20 20 20 20  20 20 3b 20 69 20 38 2e  |/y3       ; i 8.|
00004a10  36 20 64 69 20 38 2e 31  36 0d 23 28 32 20 20 20  |6 di 8.16.#(2   |
00004a20  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 20  |       MOV      |
00004a30  20 54 6d 70 2c 54 6d 70  2c 4c 53 52 20 23 34 20  | Tmp,Tmp,LSR #4 |
00004a40  20 20 20 20 20 20 3b 20  2e 31 37 0d 23 32 35 20  |      ; .17.#25 |
00004a50  20 20 20 20 20 20 20 20  20 4d 55 4c 20 20 20 20  |         MUL    |
00004a60  20 20 20 49 33 2c 54 6d  70 2c 49 33 20 20 20 20  |   I3,Tmp,I3    |
00004a70  20 20 20 20 20 20 20 20  20 20 3b 20 38 2e 32 33  |          ; 8.23|
00004a80  0d 23 3c 33 20 20 20 20  20 20 20 20 20 20 4d 4f  |.#<3          MO|
00004a90  56 20 20 20 20 20 20 20  49 33 2c 49 33 2c 41 53  |V       I3,I3,AS|
00004aa0  52 20 23 31 37 2d 31 30  20 20 20 20 20 3b 20 38  |R #17-10     ; 8|
00004ab0  2e 31 36 0d 23 46 25 20  20 20 20 20 20 20 20 20  |.16.#F%         |
00004ac0  20 4d 4f 56 20 20 20 20  20 20 20 49 31 2c 49 31  | MOV       I1,I1|
00004ad0  2c 4c 53 4c 20 23 31 30  0d 23 50 27 20 20 20 20  |,LSL #10.#P'    |
00004ae0  20 20 20 20 20 20 41 44  44 20 20 20 20 20 20 20  |      ADD       |
00004af0  49 31 2c 49 31 2c 49 33  2c 41 53 52 20 23 31 0d  |I1,I1,I3,ASR #1.|
00004b00  23 5a 1e 20 20 20 20 20  20 20 20 20 20 53 54 52  |#Z.          STR|
00004b10  20 20 20 20 20 20 20 49  33 2c 49 33 44 0d 23 64  |       I3,I3D.#d|
00004b20  1e 20 20 20 20 20 20 20  20 20 20 53 54 52 20 20  |.          STR  |
00004b30  20 20 20 20 20 49 31 2c  49 31 44 0d 23 6e 04 0d  |     I1,I1D.#n..|
00004b40  23 78 27 3b 20 63 61 6c  63 20 32 5e 32 31 2f 66  |#x'; calc 2^21/f|
00004b50  6c 6f 6f 72 28 61 62 73  28 78 32 20 2d 20 64 78  |loor(abs(x2 - dx|
00004b60  31 2a 79 32 29 29 0d 23  82 38 20 20 20 20 20 20  |1*y2)).#.8      |
00004b70  20 20 20 20 4d 55 4c 20  20 20 20 20 20 20 54 6d  |    MUL       Tm|
00004b80  70 2c 59 32 2c 54 6d 70  32 20 20 20 20 20 20 20  |p,Y2,Tmp2       |
00004b90  20 20 3b 20 28 78 33 2f  79 33 29 2a 79 32 0d 23  |  ; (x3/y3)*y2.#|
00004ba0  8c 3b 20 20 20 20 20 20  20 20 20 20 52 53 42 20  |.;          RSB |
00004bb0  20 20 20 20 20 20 54 6d  70 2c 54 6d 70 2c 58 32  |      Tmp,Tmp,X2|
00004bc0  2c 4c 53 4c 20 23 31 32  20 20 3b 20 78 32 2d 28  |,LSL #12  ; x2-(|
00004bd0  78 33 2f 79 33 29 2a 79  32 0d 23 96 38 20 20 20  |x3/y3)*y2.#.8   |
00004be0  20 20 20 20 20 20 20 4d  4f 56 53 20 20 20 20 20  |       MOVS     |
00004bf0  20 54 6d 70 2c 54 6d 70  2c 41 53 52 20 23 31 30  | Tmp,Tmp,ASR #10|
00004c00  20 20 20 20 20 3b 20 69  6e 74 28 20 2e 2e 2e 20  |     ; int( ... |
00004c10  29 0d 23 a0 22 20 20 20  20 20 20 20 20 20 20 52  |).#."          R|
00004c20  53 42 4d 49 20 20 20 20  20 54 6d 70 2c 54 6d 70  |SBMI     Tmp,Tmp|
00004c30  2c 23 30 0d 23 aa 34 20  20 20 20 20 20 20 20 20  |,#0.#.4         |
00004c40  20 4c 44 52 20 20 20 20  20 20 20 54 6d 70 2c 5b  | LDR       Tmp,[|
00004c50  48 65 6c 70 2c 54 6d 70  2c 4c 53 4c 20 23 32 5d  |Help,Tmp,LSL #2]|
00004c60  20 20 3b 20 2e 31 39 0d  23 b4 0e 20 20 20 20 20  |  ; .19.#..     |
00004c70  20 20 20 20 20 0d 23 be  26 3b 20 73 68 61 64 69  |     .#.&; shadi|
00004c80  6e 67 20 69 6e 63 72 65  6d 65 6e 74 20 69 6e 20  |ng increment in |
00004c90  78 20 64 69 72 65 63 74  69 6f 6e 0d 23 c8 30 3b  |x direction.#.0;|
00004ca0  20 63 61 6c 63 20 64 69  32 20 3d 20 28 69 32 2d  | calc di2 = (i2-|
00004cb0  64 69 31 2a 79 32 29 20  2f 20 61 62 73 28 20 78  |di1*y2) / abs( x|
00004cc0  32 20 2d 20 64 78 31 2a  79 32 29 0d 23 d2 2f 20  |2 - dx1*y2).#./ |
00004cd0  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |         MOV    |
00004ce0  20 20 20 49 32 2c 49 32  2c 4c 53 4c 20 23 31 30  |   I2,I2,LSL #10|
00004cf0  20 20 20 20 3b 20 38 2e  31 36 0d 23 dc 20 20 20  |    ; 8.16.#.   |
00004d00  20 20 20 20 20 20 20 20  4d 55 4c 20 20 20 20 20  |        MUL     |
00004d10  20 20 49 33 2c 59 32 2c  49 33 0d 23 e6 2d 20 20  |  I3,Y2,I3.#.-  |
00004d20  20 20 20 20 20 20 20 20  52 53 42 20 20 20 20 20  |        RSB     |
00004d30  20 20 49 32 2c 49 33 2c  49 32 20 20 20 20 20 20  |  I2,I3,I2      |
00004d40  20 3b 20 38 2e 31 36 0d  23 f0 2c 20 20 20 20 20  | ; 8.16.#.,     |
00004d50  20 20 20 20 20 4d 4f 56  20 20 20 20 20 20 20 49  |     MOV       I|
00004d60  32 2c 49 32 2c 41 53 52  20 23 38 20 20 20 3b 20  |2,I2,ASR #8   ; |
00004d70  38 2e 38 0d 23 fa 2d 20  20 20 20 20 20 20 20 20  |8.8.#.-         |
00004d80  20 4d 4f 56 20 20 20 20  20 20 20 54 6d 70 2c 54  | MOV       Tmp,T|
00004d90  6d 70 2c 4c 53 52 20 23  33 20 20 3b 20 2e 31 36  |mp,LSR #3  ; .16|
00004da0  0d 24 04 2d 20 20 20 20  20 20 20 20 20 20 4d 55  |.$.-          MU|
00004db0  4c 20 20 20 20 20 20 20  49 32 2c 54 6d 70 2c 49  |L       I2,Tmp,I|
00004dc0  32 20 20 20 20 20 3b 20  20 38 2e 32 34 0d 24 0e  |2     ;  8.24.$.|
00004dd0  25 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |%          MOV  |
00004de0  20 20 20 20 20 49 32 2c  49 32 2c 41 53 52 20 23  |     I2,I2,ASR #|
00004df0  31 36 0d 24 18 2c 20 20  20 20 20 20 20 20 20 20  |16.$.,          |
00004e00  53 54 52 20 20 20 20 20  20 20 49 32 2c 49 32 44  |STR       I2,I2D|
00004e10  20 20 20 20 20 20 20 20  20 3b 20 38 2e 38 0d 24  |         ; 8.8.$|
00004e20  22 1e 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |".          LDR |
00004e30  20 20 20 20 20 20 49 31  2c 49 31 44 0d 24 2c 27  |      I1,I1D.$,'|
00004e40  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00004e50  20 20 20 20 49 31 2c 49  31 2c 49 32 2c 4c 53 4c  |    I1,I1,I2,LSL|
00004e60  20 23 37 0d 24 36 1e 20  20 20 20 20 20 20 20 20  | #7.$6.         |
00004e70  20 53 54 52 20 20 20 20  20 20 20 49 31 2c 49 31  | STR       I1,I1|
00004e80  44 0d 24 40 0e 20 20 20  20 20 20 20 20 20 20 0d  |D.$@.          .|
00004e90  24 4a 21 20 20 20 20 20  20 20 20 20 20 4c 44 52  |$J!          LDR|
00004ea0  20 20 20 20 20 20 20 4f  2c 53 43 52 45 45 4e 44  |       O,SCREEND|
00004eb0  0d 24 54 04 0d 24 5e 1d  20 20 20 20 20 20 20 20  |.$T..$^.        |
00004ec0  20 20 4c 44 52 20 20 20  20 20 20 20 54 2c 58 31  |  LDR       T,X1|
00004ed0  44 0d 24 68 38 20 20 20  20 20 20 20 20 20 20 4d  |D.$h8          M|
00004ee0  4f 56 20 20 20 20 20 20  20 4c 2c 54 2c 4c 53 4c  |OV       L,T,LSL|
00004ef0  20 23 31 32 20 20 3b 20  78 6c 20 3d 20 28 58 31  | #12  ; xl = (X1|
00004f00  2b 30 2e 35 29 2a 46 49  58 0d 24 72 22 20 20 20  |+0.5)*FIX.$r"   |
00004f10  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
00004f20  20 4c 2c 4c 2c 23 31 3c  3c 31 31 0d 24 7c 31 20  | L,L,#1<<11.$|1 |
00004f30  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |         LDR    |
00004f40  20 20 20 4c 41 2c 44 58  33 31 20 20 20 20 20 20  |   LA,DX31      |
00004f50  3b 20 64 78 6c 20 3d 20  64 78 33 31 0d 24 86 38  |; dxl = dx31.$.8|
00004f60  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00004f70  20 20 20 20 52 2c 4c 20  20 20 20 20 20 20 20 20  |    R,L         |
00004f80  20 3b 20 78 72 20 3d 20  28 58 31 2b 30 2e 35 29  | ; xr = (X1+0.5)|
00004f90  2a 46 49 58 0d 24 90 31  20 20 20 20 20 20 20 20  |*FIX.$.1        |
00004fa0  20 20 4c 44 52 20 20 20  20 20 20 20 52 41 2c 44  |  LDR       RA,D|
00004fb0  58 32 31 20 20 20 20 20  20 3b 20 64 78 72 20 3d  |X21      ; dxr =|
00004fc0  20 64 78 32 31 0d 24 9a  36 20 20 20 20 20 20 20  | dx21.$.6       |
00004fd0  20 20 20 41 44 44 20 20  20 20 20 20 20 4c 2c 4c  |   ADD       L,L|
00004fe0  2c 4c 41 2c 41 53 52 20  23 31 20 20 3b 20 78 6c  |,LA,ASR #1  ; xl|
00004ff0  20 2b 3d 20 30 2e 35 2a  64 78 6c 0d 24 a4 36 20  | += 0.5*dxl.$.6 |
00005000  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00005010  20 20 20 52 2c 52 2c 52  41 2c 41 53 52 20 23 31  |   R,R,RA,ASR #1|
00005020  20 20 3b 20 78 72 20 2b  3d 20 30 2e 35 2a 64 78  |  ; xr += 0.5*dx|
00005030  72 0d 24 ae 1f 20 20 20  20 20 20 20 20 20 20 4c  |r.$..          L|
00005040  44 52 20 20 20 20 20 20  20 43 54 2c 44 59 32 31  |DR       CT,DY21|
00005050  0d 24 b8 35 20 20 20 20  20 20 20 20 20 20 43 4d  |.$.5          CM|
00005060  50 20 20 20 20 20 20 20  43 54 2c 23 30 20 20 20  |P       CT,#0   |
00005070  20 20 20 20 20 20 20 3b  20 63 6f 75 6e 74 20 3d  |       ; count =|
00005080  20 64 79 32 31 0d 24 c2  1d 20 20 20 20 20 20 20  | dy21.$..       |
00005090  20 20 20 42 4c 4e 45 20  20 20 20 20 20 50 49 45  |   BLNE      PIE|
000050a0  43 45 0d 24 cc 04 0d 24  d6 1d 20 20 20 20 20 20  |CE.$...$..      |
000050b0  20 20 20 20 4c 44 52 20  20 20 20 20 20 20 54 2c  |    LDR       T,|
000050c0  58 32 44 0d 24 e0 32 20  20 20 20 20 20 20 20 20  |X2D.$.2         |
000050d0  20 4d 4f 56 20 20 20 20  20 20 20 52 2c 54 2c 4c  | MOV       R,T,L|
000050e0  53 4c 20 23 31 32 20 20  20 3b 20 64 78 72 20 3d  |SL #12   ; dxr =|
000050f0  20 64 78 33 32 0d 24 ea  39 20 20 20 20 20 20 20  | dx32.$.9       |
00005100  20 20 20 41 44 44 20 20  20 20 20 20 20 52 2c 52  |   ADD       R,R|
00005110  2c 23 31 3c 3c 31 31 20  20 20 20 3b 20 78 72 20  |,#1<<11    ; xr |
00005120  3d 20 28 58 32 2b 30 2e  35 29 2a 46 49 58 0d 24  |= (X2+0.5)*FIX.$|
00005130  f4 1f 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |..          LDR |
00005140  20 20 20 20 20 20 4c 41  2c 44 58 33 31 0d 24 fe  |      LA,DX31.$.|
00005150  1f 20 20 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.          LDR  |
00005160  20 20 20 20 20 52 41 2c  44 58 33 32 0d 25 08 35  |     RA,DX32.%.5|
00005170  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00005180  20 20 20 20 52 2c 52 2c  52 41 2c 41 53 52 20 23  |    R,R,RA,ASR #|
00005190  31 20 20 3b 20 78 72 2b  3d 20 30 2e 35 2a 64 78  |1  ; xr+= 0.5*dx|
000051a0  72 0d 25 12 1f 20 20 20  20 20 20 20 20 20 20 4c  |r.%..          L|
000051b0  44 52 20 20 20 20 20 20  20 43 54 2c 44 59 33 32  |DR       CT,DY32|
000051c0  0d 25 1c 34 20 20 20 20  20 20 20 20 20 20 43 4d  |.%.4          CM|
000051d0  50 20 20 20 20 20 20 20  43 54 2c 23 30 20 20 20  |P       CT,#0   |
000051e0  20 20 20 20 20 20 20 3b  20 63 6f 75 6e 74 3d 20  |       ; count= |
000051f0  64 79 33 32 0d 25 26 1d  20 20 20 20 20 20 20 20  |dy32.%&.        |
00005200  20 20 42 4c 4e 45 20 20  20 20 20 20 50 49 45 43  |  BLNE      PIEC|
00005210  45 0d 25 30 08 2e 65 6e  64 0d 25 3a 1e 20 20 20  |E.%0..end.%:.   |
00005220  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 20  |       LDR      |
00005230  20 31 33 2c 73 70 64 0d  25 44 26 20 20 20 20 20  | 13,spd.%D&     |
00005240  20 20 20 20 20 4c 44 4d  46 44 20 20 20 20 20 31  |     LDMFD     1|
00005250  33 21 2c 7b 30 2d 31 32  2c 50 43 7d 5e 0d 25 4e  |3!,{0-12,PC}^.%N|
00005260  05 5d 0d 25 58 07 3d 22  22 0d 25 62 04 0d 25 6c  |.].%X.="".%b..%l|
00005270  04 0d 25 76 0c dd 20 a4  70 69 65 63 65 0d 25 80  |..%v.. .piece.%.|
00005280  0d 5b 4f 50 54 20 50 41  53 53 0d 25 8a 0e 2e 49  |.[OPT PASS.%...I|
00005290  31 44 20 44 43 44 20 30  0d 25 94 0e 2e 49 32 44  |1D DCD 0.%...I2D|
000052a0  20 44 43 44 20 30 0d 25  9e 0e 2e 49 33 44 20 44  | DCD 0.%...I3D D|
000052b0  43 44 20 30 0d 25 a8 04  0d 25 b2 20 2e 50 49 45  |CD 0.%...%. .PIE|
000052c0  43 45 20 53 54 4d 46 44  20 20 20 20 20 31 33 21  |CE STMFD     13!|
000052d0  2c 7b 43 54 2c 31 34 7d  0d 25 bc 04 0d 25 c6 11  |,{CT,14}.%...%..|
000052e0  3b 20 63 6c 69 70 20 74  6f 20 74 6f 70 0d 25 d0  |; clip to top.%.|
000052f0  22 20 20 20 20 20 20 20  20 20 20 a4 61 64 72 20  |"          .adr |
00005300  20 20 20 20 28 54 2c 53  43 52 45 45 4e 32 29 0d  |    (T,SCREEN2).|
00005310  25 da 1d 20 20 20 20 20  20 20 20 20 20 4c 44 52  |%..          LDR|
00005320  20 20 20 20 20 20 20 54  2c 5b 54 5d 0d 25 e4 1b  |       T,[T].%..|
00005330  20 20 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |          CMP   |
00005340  20 20 20 20 4f 2c 54 0d  25 ee 1d 20 20 20 20 20  |    O,T.%..     |
00005350  20 20 20 20 20 42 48 53  20 20 20 20 20 20 20 65  |     BHS       e|
00005360  63 6c 69 70 0d 25 f8 09  2e 63 6c 69 70 0d 26 02  |clip.%...clip.&.|
00005370  1e 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |.          ADD  |
00005380  20 20 20 20 20 4c 2c 4c  2c 4c 41 0d 26 0c 1e 20  |     L,L,LA.&.. |
00005390  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
000053a0  20 20 20 52 2c 52 2c 52  41 0d 26 16 20 20 20 20  |   R,R,RA.&.    |
000053b0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
000053c0  20 4f 2c 4f 2c 23 33 32  30 0d 26 20 19 3b 20 69  | O,O,#320.& .; i|
000053d0  6e 63 72 65 6d 65 6e 74  20 79 20 73 68 61 64 69  |ncrement y shadi|
000053e0  6e 67 0d 26 2a 04 0d 26  34 1d 20 20 20 20 20 20  |ng.&*..&4.      |
000053f0  20 20 20 20 4c 44 52 20  20 20 20 20 20 20 49 2c  |    LDR       I,|
00005400  49 31 44 0d 26 3e 1d 20  20 20 20 20 20 20 20 20  |I1D.&>.         |
00005410  20 4c 44 52 20 20 20 20  20 20 20 48 2c 49 33 44  | LDR       H,I3D|
00005420  0d 26 48 1d 20 20 20 20  20 20 20 20 20 20 41 44  |.&H.          AD|
00005430  44 20 20 20 20 20 20 20  49 2c 49 2c 48 0d 26 52  |D       I,I,H.&R|
00005440  1d 20 20 20 20 20 20 20  20 20 20 53 54 52 20 20  |.          STR  |
00005450  20 20 20 20 20 49 2c 49  31 44 0d 26 5c 04 0d 26  |     I,I1D.&\..&|
00005460  66 20 20 20 20 20 20 20  20 20 20 20 53 55 42 53  |f           SUBS|
00005470  20 20 20 20 20 20 43 54  2c 43 54 2c 23 31 0d 26  |      CT,CT,#1.&|
00005480  70 23 20 20 20 20 20 20  20 20 20 20 4c 44 4d 45  |p#          LDME|
00005490  51 46 44 20 20 20 31 33  21 2c 7b 43 54 2c 31 35  |QFD   13!,{CT,15|
000054a0  7d 0d 26 7a 1b 20 20 20  20 20 20 20 20 20 20 43  |}.&z.          C|
000054b0  4d 50 20 20 20 20 20 20  20 4f 2c 54 0d 26 84 1c  |MP       O,T.&..|
000054c0  20 20 20 20 20 20 20 20  20 20 42 4c 4f 20 20 20  |          BLO   |
000054d0  20 20 20 20 63 6c 69 70  0d 26 8e 0a 2e 65 63 6c  |    clip.&...ecl|
000054e0  69 70 0d 26 98 14 3b 20  63 6c 69 70 20 74 6f 20  |ip.&..; clip to |
000054f0  62 6f 74 74 6f 6d 0d 26  a2 24 20 20 20 20 20 20  |bottom.&.$      |
00005500  20 20 20 20 41 44 44 20  20 20 20 20 20 20 54 2c  |    ADD       T,|
00005510  54 2c 23 33 32 30 2a 32  35 36 0d 26 ac 1d 20 20  |T,#320*256.&..  |
00005520  20 20 20 20 20 20 20 20  53 55 42 53 20 20 20 20  |        SUBS    |
00005530  20 20 54 2c 54 2c 4f 0d  26 b6 23 20 20 20 20 20  |  T,T,O.&.#     |
00005540  20 20 20 20 20 4c 44 4d  4c 53 46 44 20 20 20 31  |     LDMLSFD   1|
00005550  33 21 2c 7b 43 54 2c 31  35 7d 0d 26 c0 27 20 20  |3!,{CT,15}.&.'  |
00005560  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00005570  20 20 43 54 2c 43 54 2c  43 54 2c 4c 53 4c 20 23  |  CT,CT,CT,LSL #|
00005580  32 0d 26 ca 23 20 20 20  20 20 20 20 20 20 20 43  |2.&.#          C|
00005590  4d 50 20 20 20 20 20 20  20 43 54 2c 54 2c 4c 53  |MP       CT,T,LS|
000055a0  52 20 23 36 0d 26 d4 23  20 20 20 20 20 20 20 20  |R #6.&.#        |
000055b0  20 20 4d 4f 56 48 49 20  20 20 20 20 43 54 2c 54  |  MOVHI     CT,T|
000055c0  2c 4c 53 52 20 23 36 0d  26 de 3f 20 20 20 20 20  |,LSR #6.&.?     |
000055d0  20 20 20 20 20 43 4d 50  20 20 20 20 20 20 20 4c  |     CMP       L|
000055e0  2c 52 20 20 20 20 20 20  20 20 20 20 3b 20 6c 65  |,R          ; le|
000055f0  66 74 20 6f 72 20 72 69  67 68 74 20 6f 72 69 65  |ft or right orie|
00005600  6e 74 65 64 20 3f 0d 26  e8 1e 20 20 20 20 20 20  |nted ?.&..      |
00005610  20 20 20 20 42 47 54 20  20 20 20 20 20 20 73 70  |    BGT       sp|
00005620  61 6e 5f 32 0d 26 f2 1c  20 20 20 20 20 20 20 20  |an_2.&..        |
00005630  20 20 42 41 4c 20 20 20  20 20 20 20 73 70 61 6e  |  BAL       span|
00005640  0d 26 fc 0c 2e 65 6e 64  73 70 61 6e 0d 27 06 20  |.&...endspan.'. |
00005650  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00005660  20 20 20 20 4f 2c 4f 2c  23 33 32 30 0d 27 10 1e  |    O,O,#320.'..|
00005670  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00005680  20 20 20 20 4c 2c 4c 2c  4c 41 0d 27 1a 1e 20 20  |    L,L,LA.'..  |
00005690  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000056a0  20 20 52 2c 52 2c 52 41  0d 27 24 20 20 20 20 20  |  R,R,RA.'$     |
000056b0  20 20 20 20 20 20 53 55  42 53 20 20 20 20 20 20  |      SUBS      |
000056c0  43 54 2c 43 54 2c 23 35  0d 27 2e 19 3b 20 69 6e  |CT,CT,#5.'..; in|
000056d0  63 72 65 6d 65 6e 74 20  79 20 73 68 61 64 69 6e  |crement y shadin|
000056e0  67 0d 27 38 04 0d 27 42  1d 20 20 20 20 20 20 20  |g.'8..'B.       |
000056f0  20 20 20 4c 44 52 20 20  20 20 20 20 20 54 2c 49  |   LDR       T,I|
00005700  31 44 0d 27 4c 1d 20 20  20 20 20 20 20 20 20 20  |1D.'L.          |
00005710  4c 44 52 20 20 20 20 20  20 20 49 2c 49 33 44 0d  |LDR       I,I3D.|
00005720  27 56 1d 20 20 20 20 20  20 20 20 20 20 41 44 44  |'V.          ADD|
00005730  20 20 20 20 20 20 20 49  2c 49 2c 54 0d 27 60 1d  |       I,I,T.'`.|
00005740  20 20 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |          STR   |
00005750  20 20 20 20 49 2c 49 31  44 0d 27 6a 04 0d 27 74  |    I,I1D.'j..'t|
00005760  23 20 20 20 20 20 20 20  20 20 20 4c 44 4d 45 51  |#          LDMEQ|
00005770  46 44 20 20 20 31 33 21  2c 7b 43 54 2c 31 35 7d  |FD   13!,{CT,15}|
00005780  0d 27 7e 09 2e 73 70 61  6e 0d 27 88 04 0d 27 92  |.'~..span.'...'.|
00005790  04 0d 27 9c 13 3b 20 63  6c 69 70 20 74 6f 20 72  |..'..; clip to r|
000057a0  69 67 68 74 0d 27 a6 22  20 20 20 20 20 20 20 20  |ight.'."        |
000057b0  20 20 43 4d 50 20 20 20  20 20 20 20 52 2c 23 33  |  CMP       R,#3|
000057c0  32 30 3c 3c 31 32 0d 27  b0 26 20 20 20 20 20 20  |20<<12.'.&      |
000057d0  20 20 20 20 41 44 44 20  20 20 20 20 20 20 58 52  |    ADD       XR|
000057e0  2c 4f 2c 52 2c 41 53 52  20 23 31 32 0d 27 ba 21  |,O,R,ASR #12.'.!|
000057f0  20 20 20 20 20 20 20 20  20 20 41 44 44 47 54 20  |          ADDGT |
00005800  20 20 20 20 58 52 2c 4f  2c 23 33 32 30 0d 27 c4  |    XR,O,#320.'.|
00005810  12 3b 20 43 6c 69 70 20  74 6f 20 6c 65 66 74 0d  |.; Clip to left.|
00005820  27 ce 23 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |'.#          MOV|
00005830  53 20 20 20 20 20 20 54  2c 4c 2c 41 53 52 20 23  |S      T,L,ASR #|
00005840  31 32 0d 27 d8 1e 20 20  20 20 20 20 20 20 20 20  |12.'..          |
00005850  41 44 44 20 20 20 20 20  20 20 58 4c 2c 4f 2c 54  |ADD       XL,O,T|
00005860  0d 27 e2 1c 20 20 20 20  20 20 20 20 20 20 4d 4f  |.'..          MO|
00005870  56 4c 54 20 20 20 20 20  58 4c 2c 4f 0d 27 ec 1e  |VLT     XL,O.'..|
00005880  20 20 20 20 20 20 20 20  20 20 52 53 42 4d 49 20  |          RSBMI |
00005890  20 20 20 20 54 2c 54 2c  23 30 0d 27 f6 04 0d 28  |    T,T,#0.'...(|
000058a0  00 04 0d 28 0a 29 3b 20  4c 6f 61 64 20 6c 69 6e  |...(.); Load lin|
000058b0  65 20 73 68 61 64 65 20  61 6e 64 20 73 68 61 64  |e shade and shad|
000058c0  65 20 69 6e 63 72 65 6d  65 6e 74 0d 28 14 2e 20  |e increment.(.. |
000058d0  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |         LDR    |
000058e0  20 20 20 49 2c 49 31 44  20 20 20 20 20 20 20 20  |   I,I1D        |
000058f0  20 20 20 3b 20 31 30 2e  34 0d 28 1e 22 20 20 20  |   ; 10.4.(."   |
00005900  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 20  |       MOV      |
00005910  20 49 2c 49 2c 41 53 52  20 23 38 0d 28 28 2e 20  | I,I,ASR #8.((. |
00005920  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |         LDR    |
00005930  20 20 20 48 2c 49 32 44  20 20 20 20 20 20 20 20  |   H,I2D        |
00005940  20 20 20 3b 20 31 30 2e  34 0d 28 32 1f 20 20 20  |   ; 10.4.(2.   |
00005950  20 20 20 20 20 20 20 4d  4c 41 4d 49 20 20 20 20  |       MLAMI    |
00005960  20 49 2c 54 2c 48 2c 49  0d 28 3c 04 0d 28 46 22  | I,T,H,I.(<..(F"|
00005970  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00005980  20 20 20 20 54 2c 4c 2c  41 53 52 20 23 34 0d 28  |    T,L,ASR #4.(|
00005990  50 1e 20 20 20 20 20 20  20 20 20 20 80 20 20 20  |P.          .   |
000059a0  20 20 20 20 54 2c 54 2c  23 32 35 35 0d 28 5a 1d  |    T,T,#255.(Z.|
000059b0  20 20 20 20 20 20 20 20  20 20 4d 55 4c 20 20 20  |          MUL   |
000059c0  20 20 20 20 54 2c 48 2c  54 0d 28 64 24 20 20 20  |    T,H,T.(d$   |
000059d0  20 20 20 20 20 20 20 53  55 42 20 20 20 20 20 20  |       SUB      |
000059e0  20 49 2c 49 2c 54 2c 41  53 52 20 23 38 0d 28 6e  | I,I,T,ASR #8.(n|
000059f0  04 0d 28 78 30 20 20 20  20 20 20 20 20 20 20 4d  |..(x0          M|
00005a00  4f 56 20 20 20 20 20 20  20 49 2c 49 2c 4c 53 4c  |OV       I,I,LSL|
00005a10  20 23 31 36 20 20 20 20  20 20 3b 20 31 30 2e 32  | #16      ; 10.2|
00005a20  32 0d 28 82 30 20 20 20  20 20 20 20 20 20 20 4d  |2.(.0          M|
00005a30  4f 56 20 20 20 20 20 20  20 48 2c 48 2c 4c 53 4c  |OV       H,H,LSL|
00005a40  20 23 31 36 20 20 20 20  20 20 3b 20 31 30 2e 32  | #16      ; 10.2|
00005a50  32 0d 28 8c 25 20 20 20  20 20 20 20 20 20 20 41  |2.(.%          A|
00005a60  44 44 20 20 20 20 20 20  20 49 2c 49 2c 48 2c 4c  |DD       I,I,H,L|
00005a70  53 52 20 23 31 36 0d 28  96 04 0d 28 a0 1f 20 20  |SR #16.(...(..  |
00005a80  20 20 20 20 20 20 20 20  53 55 42 20 20 20 20 20  |        SUB     |
00005a90  20 20 54 2c 58 52 2c 58  4c 0d 28 aa 1c 20 20 20  |  T,XR,XL.(..   |
00005aa0  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 20  |       CMP      |
00005ab0  20 54 2c 23 33 0d 28 b4  21 20 20 20 20 20 20 20  | T,#3.(.!       |
00005ac0  20 20 20 42 4c 45 20 20  20 20 20 20 20 73 6d 61  |   BLE       sma|
00005ad0  6c 6c 73 70 61 6e 0d 28  be 1d 20 20 20 20 20 20  |llspan.(..      |
00005ae0  20 20 20 20 54 53 54 20  20 20 20 20 20 20 58 4c  |    TST       XL|
00005af0  2c 23 33 0d 28 c8 20 20  20 20 20 20 20 20 20 20  |,#3.(.          |
00005b00  20 42 45 51 20 20 20 20  20 20 20 65 6e 64 6c 6f  | BEQ       endlo|
00005b10  6f 70 31 0d 28 d2 1a 2e  6c 6f 6f 70 31 20 20 20  |op1.(...loop1   |
00005b20  20 a4 6d 61 70 62 79 74  65 28 43 31 29 0d 28 dc  | .mapbyte(C1).(.|
00005b30  22 20 20 20 20 20 20 20  20 20 20 53 54 52 42 20  |"          STRB |
00005b40  20 20 20 20 20 43 31 2c  5b 58 4c 5d 2c 23 31 0d  |     C1,[XL],#1.|
00005b50  28 e6 1d 20 20 20 20 20  20 20 20 20 20 54 53 54  |(..          TST|
00005b60  20 20 20 20 20 20 20 58  4c 2c 23 33 0d 28 f0 1d  |       XL,#3.(..|
00005b70  20 20 20 20 20 20 20 20  20 20 42 4e 45 20 20 20  |          BNE   |
00005b80  20 20 20 20 6c 6f 6f 70  31 0d 28 fa 04 0d 29 04  |    loop1.(...).|
00005b90  1f 2e 65 6e 64 6c 6f 6f  70 31 20 53 55 42 20 20  |..endloop1 SUB  |
00005ba0  20 20 20 20 20 48 2c 58  52 2c 58 4c 0d 29 0e 22  |     H,XR,XL.)."|
00005bb0  20 20 20 20 20 20 20 20  20 20 4d 4f 56 53 20 20  |          MOVS  |
00005bc0  20 20 20 20 48 2c 48 2c  4c 53 52 20 23 33 0d 29  |    H,H,LSR #3.)|
00005bd0  18 1c 20 20 20 20 20 20  20 20 20 20 42 43 43 20  |..          BCC |
00005be0  20 20 20 20 20 20 64 6f  69 74 0d 29 22 1a 20 20  |      doit.)".  |
00005bf0  20 20 20 20 20 20 20 20  a4 6d 61 70 62 79 74 65  |        .mapbyte|
00005c00  28 43 31 29 0d 29 2c 19  20 20 20 20 20 20 20 20  |(C1).),.        |
00005c10  20 20 a4 6d 61 70 62 79  74 65 28 54 29 0d 29 36  |  .mapbyte(T).)6|
00005c20  26 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |&          ADD  |
00005c30  20 20 20 20 20 43 31 2c  43 31 2c 54 2c 4c 53 4c  |     C1,C1,T,LSL|
00005c40  20 23 38 0d 29 40 19 20  20 20 20 20 20 20 20 20  | #8.)@.         |
00005c50  20 a4 6d 61 70 62 79 74  65 28 54 29 0d 29 4a 27  | .mapbyte(T).)J'|
00005c60  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00005c70  20 20 20 20 43 31 2c 43  31 2c 54 2c 4c 53 4c 20  |    C1,C1,T,LSL |
00005c80  23 31 36 0d 29 54 19 20  20 20 20 20 20 20 20 20  |#16.)T.         |
00005c90  20 a4 6d 61 70 62 79 74  65 28 54 29 0d 29 5e 27  | .mapbyte(T).)^'|
00005ca0  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00005cb0  20 20 20 20 43 31 2c 43  31 2c 54 2c 4c 53 4c 20  |    C1,C1,T,LSL |
00005cc0  23 32 34 0d 29 68 22 20  20 20 20 20 20 20 20 20  |#24.)h"         |
00005cd0  20 53 54 52 20 20 20 20  20 20 20 43 31 2c 5b 58  | STR       C1,[X|
00005ce0  4c 5d 2c 23 34 0d 29 72  1c 20 20 20 20 20 20 20  |L],#4.)r.       |
00005cf0  20 20 20 43 4d 50 20 20  20 20 20 20 20 48 2c 23  |   CMP       H,#|
00005d00  30 0d 29 7c 21 2e 64 6f  69 74 20 20 20 20 20 42  |0.)|!.doit     B|
00005d10  45 51 20 20 20 20 20 20  20 73 6d 61 6c 6c 73 70  |EQ       smallsp|
00005d20  61 6e 0d 29 86 04 0d 29  90 1a 2e 6c 6f 6f 70 32  |an.)...)...loop2|
00005d30  20 20 20 20 a4 6d 61 70  62 79 74 65 28 43 31 29  |    .mapbyte(C1)|
00005d40  0d 29 9a 19 20 20 20 20  20 20 20 20 20 20 a4 6d  |.)..          .m|
00005d50  61 70 62 79 74 65 28 54  29 0d 29 a4 26 20 20 20  |apbyte(T).).&   |
00005d60  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
00005d70  20 43 31 2c 43 31 2c 54  2c 4c 53 4c 20 23 38 0d  | C1,C1,T,LSL #8.|
00005d80  29 ae 19 20 20 20 20 20  20 20 20 20 20 a4 6d 61  |)..          .ma|
00005d90  70 62 79 74 65 28 54 29  0d 29 b8 27 20 20 20 20  |pbyte(T).).'    |
00005da0  20 20 20 20 20 20 41 44  44 20 20 20 20 20 20 20  |      ADD       |
00005db0  43 31 2c 43 31 2c 54 2c  4c 53 4c 20 23 31 36 0d  |C1,C1,T,LSL #16.|
00005dc0  29 c2 19 20 20 20 20 20  20 20 20 20 20 a4 6d 61  |)..          .ma|
00005dd0  70 62 79 74 65 28 54 29  0d 29 cc 27 20 20 20 20  |pbyte(T).).'    |
00005de0  20 20 20 20 20 20 41 44  44 20 20 20 20 20 20 20  |      ADD       |
00005df0  43 31 2c 43 31 2c 54 2c  4c 53 4c 20 23 32 34 0d  |C1,C1,T,LSL #24.|
00005e00  29 d6 1a 20 20 20 20 20  20 20 20 20 20 a4 6d 61  |)..          .ma|
00005e10  70 62 79 74 65 28 43 32  29 0d 29 e0 19 20 20 20  |pbyte(C2).)..   |
00005e20  20 20 20 20 20 20 20 a4  6d 61 70 62 79 74 65 28  |       .mapbyte(|
00005e30  54 29 0d 29 ea 26 20 20  20 20 20 20 20 20 20 20  |T).).&          |
00005e40  41 44 44 20 20 20 20 20  20 20 43 32 2c 43 32 2c  |ADD       C2,C2,|
00005e50  54 2c 4c 53 4c 20 23 38  0d 29 f4 19 20 20 20 20  |T,LSL #8.)..    |
00005e60  20 20 20 20 20 20 a4 6d  61 70 62 79 74 65 28 54  |      .mapbyte(T|
00005e70  29 0d 29 fe 27 20 20 20  20 20 20 20 20 20 20 41  |).).'          A|
00005e80  44 44 20 20 20 20 20 20  20 43 32 2c 43 32 2c 54  |DD       C2,C2,T|
00005e90  2c 4c 53 4c 20 23 31 36  0d 2a 08 19 20 20 20 20  |,LSL #16.*..    |
00005ea0  20 20 20 20 20 20 a4 6d  61 70 62 79 74 65 28 54  |      .mapbyte(T|
00005eb0  29 0d 2a 12 27 20 20 20  20 20 20 20 20 20 20 41  |).*.'          A|
00005ec0  44 44 20 20 20 20 20 20  20 43 32 2c 43 32 2c 54  |DD       C2,C2,T|
00005ed0  2c 4c 53 4c 20 23 32 34  0d 2a 1c 25 20 20 20 20  |,LSL #24.*.%    |
00005ee0  20 20 20 20 20 20 53 54  4d 49 41 20 20 20 20 20  |      STMIA     |
00005ef0  28 58 4c 29 21 2c 7b 43  31 2c 43 32 7d 0d 2a 26  |(XL)!,{C1,C2}.*&|
00005f00  1e 20 20 20 20 20 20 20  20 20 20 53 55 42 53 20  |.          SUBS |
00005f10  20 20 20 20 20 48 2c 48  2c 23 31 0d 2a 30 1d 20  |     H,H,#1.*0. |
00005f20  20 20 20 20 20 20 20 20  20 42 4e 45 20 20 20 20  |         BNE    |
00005f30  20 20 20 6c 6f 6f 70 32  0d 2a 3a 0e 2e 73 6d 61  |   loop2.*:..sma|
00005f40  6c 6c 73 70 61 6e 0d 2a  44 1d 20 20 20 20 20 20  |llspan.*D.      |
00005f50  20 20 20 20 43 4d 50 20  20 20 20 20 20 20 58 4c  |    CMP       XL|
00005f60  2c 58 52 0d 2a 4e 1f 20  20 20 20 20 20 20 20 20  |,XR.*N.         |
00005f70  20 42 47 45 20 20 20 20  20 20 20 65 6e 64 73 70  | BGE       endsp|
00005f80  61 6e 0d 2a 58 1a 20 20  20 20 20 20 20 20 20 20  |an.*X.          |
00005f90  a4 6d 61 70 62 79 74 65  28 43 31 29 0d 2a 62 22  |.mapbyte(C1).*b"|
00005fa0  20 20 20 20 20 20 20 20  20 20 53 54 52 42 20 20  |          STRB  |
00005fb0  20 20 20 20 43 31 2c 5b  58 4c 5d 2c 23 31 0d 2a  |    C1,[XL],#1.*|
00005fc0  6c 1d 20 20 20 20 20 20  20 20 20 20 43 4d 50 20  |l.          CMP |
00005fd0  20 20 20 20 20 20 58 4c  2c 58 52 0d 2a 76 1f 20  |      XL,XR.*v. |
00005fe0  20 20 20 20 20 20 20 20  20 42 45 51 20 20 20 20  |         BEQ    |
00005ff0  20 20 20 65 6e 64 73 70  61 6e 0d 2a 80 1a 20 20  |   endspan.*..  |
00006000  20 20 20 20 20 20 20 20  a4 6d 61 70 62 79 74 65  |        .mapbyte|
00006010  28 43 31 29 0d 2a 8a 22  20 20 20 20 20 20 20 20  |(C1).*."        |
00006020  20 20 53 54 52 42 20 20  20 20 20 20 43 31 2c 5b  |  STRB      C1,[|
00006030  58 4c 5d 2c 23 31 0d 2a  94 1d 20 20 20 20 20 20  |XL],#1.*..      |
00006040  20 20 20 20 43 4d 50 20  20 20 20 20 20 20 58 4c  |    CMP       XL|
00006050  2c 58 52 0d 2a 9e 1f 20  20 20 20 20 20 20 20 20  |,XR.*..         |
00006060  20 42 45 51 20 20 20 20  20 20 20 65 6e 64 73 70  | BEQ       endsp|
00006070  61 6e 0d 2a a8 1a 20 20  20 20 20 20 20 20 20 20  |an.*..          |
00006080  a4 6d 61 70 62 79 74 65  28 43 31 29 0d 2a b2 22  |.mapbyte(C1).*."|
00006090  20 20 20 20 20 20 20 20  20 20 53 54 52 42 20 20  |          STRB  |
000060a0  20 20 20 20 43 31 2c 5b  58 4c 5d 2c 23 31 0d 2a  |    C1,[XL],#1.*|
000060b0  bc 1f 20 20 20 20 20 20  20 20 20 20 42 41 4c 20  |..          BAL |
000060c0  20 20 20 20 20 20 65 6e  64 73 70 61 6e 0d 2a c6  |      endspan.*.|
000060d0  0e 2e 65 6e 64 73 70 61  6e 5f 32 0d 2a d0 20 20  |..endspan_2.*.  |
000060e0  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
000060f0  20 20 20 4f 2c 4f 2c 23  33 32 30 0d 2a da 1e 20  |   O,O,#320.*.. |
00006100  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00006110  20 20 20 4c 2c 4c 2c 4c  41 0d 2a e4 1e 20 20 20  |   L,L,LA.*..   |
00006120  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
00006130  20 52 2c 52 2c 52 41 0d  2a ee 20 20 20 20 20 20  | R,R,RA.*.      |
00006140  20 20 20 20 20 53 55 42  53 20 20 20 20 20 20 43  |     SUBS      C|
00006150  54 2c 43 54 2c 23 35 0d  2a f8 19 3b 20 69 6e 63  |T,CT,#5.*..; inc|
00006160  72 65 6d 65 6e 74 20 79  20 73 68 61 64 69 6e 67  |rement y shading|
00006170  0d 2b 02 1d 20 20 20 20  20 20 20 20 20 20 4c 44  |.+..          LD|
00006180  52 20 20 20 20 20 20 20  54 2c 49 31 44 0d 2b 0c  |R       T,I1D.+.|
00006190  1d 20 20 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.          LDR  |
000061a0  20 20 20 20 20 49 2c 49  33 44 0d 2b 16 1d 20 20  |     I,I3D.+..  |
000061b0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000061c0  20 20 49 2c 49 2c 54 0d  2b 20 1d 20 20 20 20 20  |  I,I,T.+ .     |
000061d0  20 20 20 20 20 53 54 52  20 20 20 20 20 20 20 49  |     STR       I|
000061e0  2c 49 31 44 0d 2b 2a 23  20 20 20 20 20 20 20 20  |,I1D.+*#        |
000061f0  20 20 4c 44 4d 45 51 46  44 20 20 20 31 33 21 2c  |  LDMEQFD   13!,|
00006200  7b 43 54 2c 31 35 7d 0d  2b 34 0b 2e 73 70 61 6e  |{CT,15}.+4..span|
00006210  5f 32 0d 2b 3e 12 3b 20  43 6c 69 70 20 74 6f 20  |_2.+>.; Clip to |
00006220  6c 65 66 74 0d 2b 48 23  20 20 20 20 20 20 20 20  |left.+H#        |
00006230  20 20 4d 4f 56 53 20 20  20 20 20 20 54 2c 52 2c  |  MOVS      T,R,|
00006240  41 53 52 20 23 31 32 0d  2b 52 26 20 20 20 20 20  |ASR #12.+R&     |
00006250  20 20 20 20 20 41 44 44  50 4c 20 20 20 20 20 58  |     ADDPL     X|
00006260  52 2c 4f 2c 52 2c 41 53  52 20 23 31 32 0d 2b 5c  |R,O,R,ASR #12.+\|
00006270  1c 20 20 20 20 20 20 20  20 20 20 4d 4f 56 4d 49  |.          MOVMI|
00006280  20 20 20 20 20 58 52 2c  4f 0d 2b 66 13 3b 20 63  |     XR,O.+f.; c|
00006290  6c 69 70 20 74 6f 20 72  69 67 68 74 0d 2b 70 1e  |lip to right.+p.|
000062a0  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
000062b0  20 20 20 20 54 2c 23 33  32 30 0d 2b 7a 25 20 20  |    T,#320.+z%  |
000062c0  20 20 20 20 20 20 20 20  52 53 42 53 20 20 20 20  |        RSBS    |
000062d0  20 20 54 2c 54 2c 4c 2c  41 53 52 20 23 31 32 0d  |  T,T,L,ASR #12.|
000062e0  2b 84 26 20 20 20 20 20  20 20 20 20 20 41 44 44  |+.&          ADD|
000062f0  20 20 20 20 20 20 20 58  4c 2c 4f 2c 4c 2c 41 53  |       XL,O,L,AS|
00006300  52 20 23 31 32 0d 2b 8e  21 20 20 20 20 20 20 20  |R #12.+.!       |
00006310  20 20 20 41 44 44 50 4c  20 20 20 20 20 58 4c 2c  |   ADDPL     XL,|
00006320  4f 2c 23 33 32 30 0d 2b  98 29 3b 20 4c 6f 61 64  |O,#320.+.); Load|
00006330  20 6c 69 6e 65 20 73 68  61 64 65 20 61 6e 64 20  | line shade and |
00006340  73 68 61 64 65 20 69 6e  63 72 65 6d 65 6e 74 0d  |shade increment.|
00006350  2b a2 1d 20 20 20 20 20  20 20 20 20 20 4c 44 52  |+..          LDR|
00006360  20 20 20 20 20 20 20 49  2c 49 31 44 0d 2b ac 22  |       I,I1D.+."|
00006370  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00006380  20 20 20 20 49 2c 49 2c  41 53 52 20 23 38 0d 2b  |    I,I,ASR #8.+|
00006390  b6 1d 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |..          LDR |
000063a0  20 20 20 20 20 20 48 2c  49 32 44 0d 2b c0 1f 20  |      H,I2D.+.. |
000063b0  20 20 20 20 20 20 20 20  20 4d 4c 41 50 4c 20 20  |         MLAPL  |
000063c0  20 20 20 49 2c 54 2c 48  2c 49 0d 2b ca 04 0d 2b  |   I,T,H,I.+...+|
000063d0  d4 22 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |."          MOV |
000063e0  20 20 20 20 20 20 54 2c  4c 2c 41 53 52 20 23 34  |      T,L,ASR #4|
000063f0  0d 2b de 1e 20 20 20 20  20 20 20 20 20 20 80 20  |.+..          . |
00006400  20 20 20 20 20 20 54 2c  54 2c 23 32 35 35 0d 2b  |      T,T,#255.+|
00006410  e8 1d 20 20 20 20 20 20  20 20 20 20 4d 55 4c 20  |..          MUL |
00006420  20 20 20 20 20 20 54 2c  48 2c 54 0d 2b f2 2e 20  |      T,H,T.+.. |
00006430  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00006440  20 20 20 49 2c 49 2c 54  2c 41 53 52 20 23 38 20  |   I,I,T,ASR #8 |
00006450  20 20 20 20 20 20 20 20  20 0d 2b fc 0e 20 20 20  |         .+..   |
00006460  20 20 20 20 20 20 20 0d  2c 06 23 20 20 20 20 20  |       .,.#     |
00006470  20 20 20 20 20 4d 4f 56  20 20 20 20 20 20 20 49  |     MOV       I|
00006480  2c 49 2c 4c 53 4c 20 23  31 36 0d 2c 10 23 20 20  |,I,LSL #16.,.#  |
00006490  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000064a0  20 20 48 2c 48 2c 4c 53  4c 20 23 31 36 0d 2c 1a  |  H,H,LSL #16.,.|
000064b0  24 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |$          ADD  |
000064c0  20 20 20 20 20 49 2c 49  2c 48 2c 4c 53 52 23 31  |     I,I,H,LSR#1|
000064d0  36 0d 2c 24 1f 20 20 20  20 20 20 20 20 20 20 53  |6.,$.          S|
000064e0  55 42 20 20 20 20 20 20  20 54 2c 58 4c 2c 58 52  |UB       T,XL,XR|
000064f0  0d 2c 2e 1c 20 20 20 20  20 20 20 20 20 20 43 4d  |.,..          CM|
00006500  50 20 20 20 20 20 20 20  54 2c 23 33 0d 2c 38 23  |P       T,#3.,8#|
00006510  20 20 20 20 20 20 20 20  20 20 42 4c 45 20 20 20  |          BLE   |
00006520  20 20 20 20 73 6d 61 6c  6c 73 70 61 6e 5f 32 0d  |    smallspan_2.|
00006530  2c 42 1d 20 20 20 20 20  20 20 20 20 20 54 53 54  |,B.          TST|
00006540  20 20 20 20 20 20 20 58  4c 2c 23 33 0d 2c 4c 22  |       XL,#3.,L"|
00006550  20 20 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |          BEQ   |
00006560  20 20 20 20 65 6e 64 6c  6f 6f 70 31 5f 32 0d 2c  |    endloop1_2.,|
00006570  56 1a 2e 6c 6f 6f 70 31  5f 32 20 20 a4 6d 61 70  |V..loop1_2  .map|
00006580  62 79 74 65 28 43 31 29  0d 2c 60 24 20 20 20 20  |byte(C1).,`$    |
00006590  20 20 20 20 20 20 53 54  52 42 20 20 20 20 20 20  |      STRB      |
000065a0  43 31 2c 5b 58 4c 2c 23  2d 31 5d 21 0d 2c 6a 1d  |C1,[XL,#-1]!.,j.|
000065b0  20 20 20 20 20 20 20 20  20 20 54 53 54 20 20 20  |          TST   |
000065c0  20 20 20 20 58 4c 2c 23  33 0d 2c 74 1f 20 20 20  |    XL,#3.,t.   |
000065d0  20 20 20 20 20 20 20 42  4e 45 20 20 20 20 20 20  |       BNE      |
000065e0  20 6c 6f 6f 70 31 5f 32  0d 2c 7e 0f 2e 65 6e 64  | loop1_2.,~..end|
000065f0  6c 6f 6f 70 31 5f 32 0d  2c 88 1f 20 20 20 20 20  |loop1_2.,..     |
00006600  20 20 20 20 20 53 55 42  20 20 20 20 20 20 20 48  |     SUB       H|
00006610  2c 58 4c 2c 58 52 0d 2c  92 22 20 20 20 20 20 20  |,XL,XR.,."      |
00006620  20 20 20 20 4d 4f 56 53  20 20 20 20 20 20 48 2c  |    MOVS      H,|
00006630  48 2c 4c 53 52 20 23 33  0d 2c 9c 1e 20 20 20 20  |H,LSR #3.,..    |
00006640  20 20 20 20 20 20 42 43  43 20 20 20 20 20 20 20  |      BCC       |
00006650  64 6f 69 74 5f 32 0d 2c  a6 1a 20 20 20 20 20 20  |doit_2.,..      |
00006660  20 20 20 20 a4 6d 61 70  62 79 74 65 28 43 31 29  |    .mapbyte(C1)|
00006670  0d 2c b0 19 20 20 20 20  20 20 20 20 20 20 a4 6d  |.,..          .m|
00006680  61 70 62 79 74 65 28 54  29 0d 2c ba 27 20 20 20  |apbyte(T).,.'   |
00006690  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
000066a0  20 43 31 2c 43 31 2c 54  2c 4c 53 4c 20 23 32 34  | C1,C1,T,LSL #24|
000066b0  0d 2c c4 19 20 20 20 20  20 20 20 20 20 20 a4 6d  |.,..          .m|
000066c0  61 70 62 79 74 65 28 54  29 0d 2c ce 27 20 20 20  |apbyte(T).,.'   |
000066d0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
000066e0  20 43 31 2c 43 31 2c 54  2c 4c 53 4c 20 23 31 36  | C1,C1,T,LSL #16|
000066f0  0d 2c d8 19 20 20 20 20  20 20 20 20 20 20 a4 6d  |.,..          .m|
00006700  61 70 62 79 74 65 28 54  29 0d 2c e2 26 20 20 20  |apbyte(T).,.&   |
00006710  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
00006720  20 43 31 2c 54 2c 43 31  2c 52 4f 52 20 23 38 0d  | C1,T,C1,ROR #8.|
00006730  2c ec 24 20 20 20 20 20  20 20 20 20 20 53 54 52  |,.$          STR|
00006740  20 20 20 20 20 20 20 43  31 2c 5b 58 4c 2c 23 2d  |       C1,[XL,#-|
00006750  34 5d 21 0d 2c f6 1c 20  20 20 20 20 20 20 20 20  |4]!.,..         |
00006760  20 43 4d 50 20 20 20 20  20 20 20 48 2c 23 30 0d  | CMP       H,#0.|
00006770  2d 00 23 2e 64 6f 69 74  5f 32 20 20 20 42 45 51  |-.#.doit_2   BEQ|
00006780  20 20 20 20 20 20 20 73  6d 61 6c 6c 73 70 61 6e  |       smallspan|
00006790  5f 32 0d 2d 0a 0c 2e 6c  6f 6f 70 32 5f 32 0d 2d  |_2.-...loop2_2.-|
000067a0  14 1a 20 20 20 20 20 20  20 20 20 20 a4 6d 61 70  |..          .map|
000067b0  62 79 74 65 28 43 32 29  0d 2d 1e 19 20 20 20 20  |byte(C2).-..    |
000067c0  20 20 20 20 20 20 a4 6d  61 70 62 79 74 65 28 54  |      .mapbyte(T|
000067d0  29 0d 2d 28 27 20 20 20  20 20 20 20 20 20 20 41  |).-('          A|
000067e0  44 44 20 20 20 20 20 20  20 43 32 2c 43 32 2c 54  |DD       C2,C2,T|
000067f0  2c 4c 53 4c 20 23 32 34  0d 2d 32 19 20 20 20 20  |,LSL #24.-2.    |
00006800  20 20 20 20 20 20 a4 6d  61 70 62 79 74 65 28 54  |      .mapbyte(T|
00006810  29 0d 2d 3c 27 20 20 20  20 20 20 20 20 20 20 41  |).-<'          A|
00006820  44 44 20 20 20 20 20 20  20 43 32 2c 43 32 2c 54  |DD       C2,C2,T|
00006830  2c 4c 53 4c 20 23 31 36  0d 2d 46 19 20 20 20 20  |,LSL #16.-F.    |
00006840  20 20 20 20 20 20 a4 6d  61 70 62 79 74 65 28 54  |      .mapbyte(T|
00006850  29 0d 2d 50 26 20 20 20  20 20 20 20 20 20 20 41  |).-P&          A|
00006860  44 44 20 20 20 20 20 20  20 43 32 2c 54 2c 43 32  |DD       C2,T,C2|
00006870  2c 52 4f 52 20 23 38 0d  2d 5a 1a 20 20 20 20 20  |,ROR #8.-Z.     |
00006880  20 20 20 20 20 a4 6d 61  70 62 79 74 65 28 43 31  |     .mapbyte(C1|
00006890  29 0d 2d 64 19 20 20 20  20 20 20 20 20 20 20 a4  |).-d.          .|
000068a0  6d 61 70 62 79 74 65 28  54 29 0d 2d 6e 27 20 20  |mapbyte(T).-n'  |
000068b0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000068c0  20 20 43 31 2c 43 31 2c  54 2c 4c 53 4c 20 23 32  |  C1,C1,T,LSL #2|
000068d0  34 0d 2d 78 19 20 20 20  20 20 20 20 20 20 20 a4  |4.-x.          .|
000068e0  6d 61 70 62 79 74 65 28  54 29 0d 2d 82 27 20 20  |mapbyte(T).-.'  |
000068f0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00006900  20 20 43 31 2c 43 31 2c  54 2c 4c 53 4c 20 23 31  |  C1,C1,T,LSL #1|
00006910  36 0d 2d 8c 19 20 20 20  20 20 20 20 20 20 20 a4  |6.-..          .|
00006920  6d 61 70 62 79 74 65 28  54 29 0d 2d 96 26 20 20  |mapbyte(T).-.&  |
00006930  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00006940  20 20 43 31 2c 54 2c 43  31 2c 52 4f 52 20 23 38  |  C1,T,C1,ROR #8|
00006950  0d 2d a0 25 20 20 20 20  20 20 20 20 20 20 53 54  |.-.%          ST|
00006960  4d 44 42 20 20 20 20 20  28 58 4c 29 21 2c 7b 43  |MDB     (XL)!,{C|
00006970  31 2c 43 32 7d 0d 2d aa  1e 20 20 20 20 20 20 20  |1,C2}.-..       |
00006980  20 20 20 53 55 42 53 20  20 20 20 20 20 48 2c 48  |   SUBS      H,H|
00006990  2c 23 31 0d 2d b4 1f 20  20 20 20 20 20 20 20 20  |,#1.-..         |
000069a0  20 42 4e 45 20 20 20 20  20 20 20 6c 6f 6f 70 32  | BNE       loop2|
000069b0  5f 32 0d 2d be 10 2e 73  6d 61 6c 6c 73 70 61 6e  |_2.-...smallspan|
000069c0  5f 32 0d 2d c8 1d 20 20  20 20 20 20 20 20 20 20  |_2.-..          |
000069d0  43 4d 50 20 20 20 20 20  20 20 58 52 2c 58 4c 0d  |CMP       XR,XL.|
000069e0  2d d2 21 20 20 20 20 20  20 20 20 20 20 42 47 45  |-.!          BGE|
000069f0  20 20 20 20 20 20 20 65  6e 64 73 70 61 6e 5f 32  |       endspan_2|
00006a00  0d 2d dc 1a 20 20 20 20  20 20 20 20 20 20 a4 6d  |.-..          .m|
00006a10  61 70 62 79 74 65 28 43  31 29 0d 2d e6 24 20 20  |apbyte(C1).-.$  |
00006a20  20 20 20 20 20 20 20 20  53 54 52 42 20 20 20 20  |        STRB    |
00006a30  20 20 43 31 2c 5b 58 4c  2c 23 2d 31 5d 21 0d 2d  |  C1,[XL,#-1]!.-|
00006a40  f0 1d 20 20 20 20 20 20  20 20 20 20 43 4d 50 20  |..          CMP |
00006a50  20 20 20 20 20 20 58 52  2c 58 4c 0d 2d fa 21 20  |      XR,XL.-.! |
00006a60  20 20 20 20 20 20 20 20  20 42 45 51 20 20 20 20  |         BEQ    |
00006a70  20 20 20 65 6e 64 73 70  61 6e 5f 32 0d 2e 04 1a  |   endspan_2....|
00006a80  20 20 20 20 20 20 20 20  20 20 a4 6d 61 70 62 79  |          .mapby|
00006a90  74 65 28 43 31 29 0d 2e  0e 24 20 20 20 20 20 20  |te(C1)...$      |
00006aa0  20 20 20 20 53 54 52 42  20 20 20 20 20 20 43 31  |    STRB      C1|
00006ab0  2c 5b 58 4c 2c 23 2d 31  5d 21 0d 2e 18 1d 20 20  |,[XL,#-1]!....  |
00006ac0  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00006ad0  20 20 58 52 2c 58 4c 0d  2e 22 21 20 20 20 20 20  |  XR,XL.."!     |
00006ae0  20 20 20 20 20 42 45 51  20 20 20 20 20 20 20 65  |     BEQ       e|
00006af0  6e 64 73 70 61 6e 5f 32  0d 2e 2c 1a 20 20 20 20  |ndspan_2..,.    |
00006b00  20 20 20 20 20 20 a4 6d  61 70 62 79 74 65 28 43  |      .mapbyte(C|
00006b10  31 29 0d 2e 36 24 20 20  20 20 20 20 20 20 20 20  |1)..6$          |
00006b20  53 54 52 42 20 20 20 20  20 20 43 31 2c 5b 58 4c  |STRB      C1,[XL|
00006b30  2c 23 2d 31 5d 21 0d 2e  40 21 20 20 20 20 20 20  |,#-1]!..@!      |
00006b40  20 20 20 20 42 41 4c 20  20 20 20 20 20 20 65 6e  |    BAL       en|
00006b50  64 73 70 61 6e 5f 32 0d  2e 4a 05 5d 0d 2e 54 07  |dspan_2..J.]..T.|
00006b60  3d 22 22 0d 2e 5e 04 0d  2e 68 13 dd 20 a4 6d 61  |=""..^...h.. .ma|
00006b70  70 62 79 74 65 28 72 65  67 29 0d 2e 72 0d 5b 4f  |pbyte(reg)..r.[O|
00006b80  50 54 20 50 41 53 53 0d  2e 7c 21 20 20 20 20 20  |PT PASS..|!     |
00006b90  20 4d 4f 56 20 20 20 20  20 20 20 72 65 67 2c 49  | MOV       reg,I|
00006ba0  2c 4c 53 52 20 23 32 34  0d 2e 86 21 20 20 20 20  |,LSR #24...!    |
00006bb0  20 20 41 44 44 20 20 20  20 20 20 20 49 2c 49 2c  |  ADD       I,I,|
00006bc0  49 2c 4c 53 4c 20 23 31  36 0d 2e 90 05 5d 0d 2e  |I,LSL #16....]..|
00006bd0  9a 08 20 3d 22 22 0d ff                           |.. =""..|
00006bd8