Home » Archimedes archive » Micro User » MU 1991-07.adf » PD-Stuff » Fractals/!AFGSprite/!RunImage

Fractals/!AFGSprite/!RunImage

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 » Micro User » MU 1991-07.adf » PD-Stuff
Filename: Fractals/!AFGSprite/!RunImage
Read OK:
File size: 31D3 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM > !RunImage
   20REM AFG Sprite Editor v1.00
   30REM LEN Mike Curnow May 1991
   40SYS"Wimp_SlotSize",TRUE,TRUE TO slot%
   50LIBRARY "<AFGS$Dir>.WimpLib"
   60LIBRARY "<AFGS$Dir>.FPLib":PROCfpinit:PROCasm
   70maxv%=32:DIM V%(maxv%,1)
   80PROCWimpInit("AFG Sprite",512)
   90DIM Varw% 120+maxv%*32*4,Varsi% 20:Vars%=-1
  100DIM SaveAsi% 260:SaveAs2t%=SaveAsi%+0:SaveAs2v%=SaveAsi%+256:fn%=SaveAs2t%
  110DIM Infoi% 95:Infot%=Infoi%:Info2t%=Infoi%+19:Info3t%=Infoi%+37:Info4t%=Infoi%+55:Info5t%=Infoi%+75
  120PROCWimpOT("<AFGS$Dir>.Templates")
  130E%=FNWimpLT(Varsi%,Varsi%+20,"Vars"):PROCmove(b%,Varw%,248)
  140E%=FNWimpLT(SaveAsi%,SaveAsi%+260,"SaveAs"):SaveAs%=FNWimpCW(b%):Savew%=-1
  150E%=FNWimpLT(Infoi%,Infoi%+95,"Info"):Info%=FNWimpCW(b%)
  160PROCWimpCT
  170ONERROR PROCWimpStop
  180DIM conv% 256,data% 4096,pgmn 12:?pgmn=0:DIM strlen 4:$strlen="12"
  190DIM vint% 8:$vint%="A0-9\-+":DIM vflt% 11:$vflt%="A0-9Ee.+\-"
  200sa%=FALSE:dmode%=15
  210DIM fwb 124:!fwb=0:fw=fwb+4
  220fw!0=0:fw!4=0:fw!8=1280:fw!12=1024:fw!16=0:fw!20=0:fw!24=-1:fw!28=&80000010:fw!32=&FF:fw!36=0:fw!40=0:fw!44=0:fw!48=1280:fw!52=1024:fw!56=0:fw!60=0:fw!64=0:fw!68=0:fw!72=0:fw!84=1
  230fw!88=0:fw!92=0:fw!96=1280:fw!100=1024:fw!104=&102:fw!116=0
  240ic%=FNIconTask("!AFGSprite")
  250
  260REPEAT
  270SYS"Wimp_Poll",1,b% TO C%:*FX229,0
  280CASE C% OF
  290WHEN 1:PROCredrawwin(!b%)
  300WHEN 2:PROCopenw(b%)
  310WHEN 3:PROCCloseWin(!b%)
  320WHEN 6:PROCCheckMouse(!b%,b%!4,b%!8,b%!12,b%!16)
  330WHEN 7:PROCsave
  340WHEN 9:PROCmenusel
  350WHEN 17,18:PROCusermsg(b%)
  360ENDCASE
  370UNTIL FALSE
  380
  390DEFPROCopenw(b%)
  400SYS"Wimp_OpenWindow",,b%
  410ENDPROC
  420
  430DEFPROCWimpEnd
  440IF !fwb SYS"Wimp_SetMode",wmode%
  450SYS"Wimp_CloseDown"
  460END
  470
  480DEFPROCmenusel
  490PROCWimpSelect(b%,m$,but%)
  500CASE m$ OF
  510  WHEN "Data.Add.Integer":PROCaddvar(4,10)
  520  WHEN "Data.Add.Float":PROCaddvar(5,12)
  530  WHEN "Data.Add.Double":PROCaddvar(8,26)
  540  WHEN "Data.Add.String":PROCaddstr
  550  WHEN "Data.Delete":PROCdelvar
  560  WHEN "Display.Hide":IF !fwb PROCCloseWin(!fwb):!fwb=FALSE:SYS"Wimp_SetMode",wmode%
  570  WHEN "Display.Previous":PROCgetprev:IF !fwb PROCforce
  580  WHEN "Display.Mode.13":dmode%=13:IF !fwb SYS"Wimp_SetMode",13
  590  WHEN "Display.Mode.15":dmode%=15:IF !fwb SYS"Wimp_SetMode",15
  600  WHEN "Effects.Invert":A%=sp%:CALLinvert:IF !fwb PROCforce
  610  WHEN "Effects.Grey":PROCsaveprev:A%=sp%:CALLgrey:IF !fwb PROCforce
  620  WHEN "Effects.B & W":PROCsaveprev:A%=sp%:CALLbandw:IF !fwb PROCforce
  630  WHEN "Effects.Cycle 8":PROCcycle(8)
  640  WHEN "Effects.Cycle 1":PROCcycle(1)
  650  WHEN "Effects.Animate 1":PROCanimate(1)
  660  WHEN "Effects.Animate 2":PROCanimate(2)
  670  OTHERWISE:IF LEFT$(m$,15)="Data.Add.String" PROCaddstr
  680ENDCASE
  690IF but%=1 PROCmenu(0)
  700ENDPROC
  710
  720DEFPROCusermsg(b%)
  730mc%=b%!16
  740CASE mc% OF
  750WHEN 0:PROCWimpEnd
  760WHEN 2:PROCdosave(TRUE)
  770WHEN 3:PROCdoload
  780ENDCASE
  790ENDPROC
  800
  810DEFPROCCheckMouse(mousex%,mousey%,B%,handle%,icon%)
  820but%=B%
  830IF (but%AND2) AND handle%=-2 PROCmenu(0)
  840IF (but%AND2) AND handle%=!fwb PROCmenu(1)
  850IF (but%AND4) AND handle%=-2 PROCdispspr
  860IF (but%AND&50) AND handle%=SaveAs% AND icon%=0 PROCWimpSSave
  870IF (but%AND5) AND handle%=SaveAs% AND icon%=2 PROCdosave(FALSE)
  880ENDPROC
  890
  900DEFPROCmenu(h%)
  910IF sa% Pgm%=FNWimpMenu(-1,"$pgmn(12)","Program Name:") ELSE Pgm%=-1
  920Strlen%=FNWimpMenu(-1,"$strlen(4)"," Len:")
  930IF sa% Add%=FNWimpMenu(-1,"Integer,Float,Double,String>Strlen%","Add:") ELSE Add%=-1
  940Data%=FNWimpMenu(-1,"Program>Pgm%,Variables>Vars%,Add>Add%,Delete","Data:")
  950Mode%=FNWimpMenu(-1,"13,15","Mode:"):IF dmode%=13 PROCWimpTick(Mode%,0) ELSE PROCWimpTick(Mode%,1)
  960IF sa% Display%=FNWimpMenu(-1,"Hide,Previous,Mode>Mode%","Display:") ELSE Display%=-1
  970IF sa% Effects%=FNWimpMenu(-1,"Invert,Grey,B & W,Cycle 8,Cycle 1,Animate 1,Animate 2","Effects:") ELSE Effects%=-1
  980Z%=FNWimpMenu(h%,"Info>Info%,Data>Data%,Display>Display%,Effects>Effects%,Save>Savew%,Quit",taskn$)
  990ENDPROC
 1000
 1010DEFPROCsave
 1020fn$=FNLeaf(FNGetStr(fn%)):PROCWimpDoSave(fn$,&FF9)
 1030ENDPROC
 1040
 1050DEFPROCdosave(D%)
 1060IF D% fn$=FNGetStr(b%+44):$fn%=fn$ ELSE fn$=FNGetStr(fn%)
 1070IF INSTR(fn$,".")=0 Z%=FNWimpErr("To save, drag the sprite icon to a directory viewer"):ENDPROC
 1080PROCputvar
 1090LOCALERROR:ONERRORLOCAL:Z%=FNWimpErr(REPORT$):ENDPROC
 1100SYS"OS_SpriteOp",&10C,sa%,fn$
 1110RESTOREERROR
 1120IF D% PROCWimpAckSave
 1130IF but%AND&44 PROCWimpClM
 1140ENDPROC
 1150DEFPROCputvar
 1160PROCPutStr($pgmn,sa%+20):sa%?32=numv%:p%=sa%+33:v%=0
 1170WHILE v%<numv%
 1180  v%+=1:?p%=V%(v%,0):p%+=1
 1190ENDWHILE
 1200p%=(p%+3)AND-4:v%=0
 1210WHILE v%<numv%
 1220  v%+=1:V$=FNGetStr(V%(v%,1))
 1230  CASE V%(v%,0) OF
 1240    WHEN 4:!p%=VAL(V$):p%+=4
 1250    WHEN 5:|p%=VAL(V$):p%+=8
 1260    WHEN 8:PROCstrdbl
 1270    OTHERWISE:L%=V%(v%,0)AND&7F:PROCPutStr(FNGetStr(V%(v%,1)),p%):p%+=(L%+3)AND&FC
 1280  ENDCASE
 1290ENDWHILE
 1300ENDPROC
 1310DEFPROCstrdbl
 1320IF VAL(V$)=0 V$="0"
 1330FOR A%=0 TO 2 STEP 2
 1340P%=conv%
 1350[OPT A%
 1360FNfp("LDFP F0,strd")
 1370FNfp("STFD F0,[R0]")
 1380MOV PC,R14
 1390.strd FNfp("DFP "+V$)
 1400]:NEXT
 1410A%=p%:CALLconv%
 1420p%+=8
 1430ENDPROC
 1440
 1450DEFPROCdoload
 1460fn$=FNGetStr(b%+44):i%=b%!40
 1470IF i%<>&FF9 ENDPROC
 1480IF Vars%>0 PROCDelWin(Vars%):Vars%=-1
 1490Savew%=-1:$fn%=fn$:sa%=FALSE
 1500fh%=OPENIN(fn$):fl%=EXT#fh%:CLOSE#fh%
 1510SYS"Wimp_SlotSize",slot%,TRUE TO ,,F%
 1520IF F%<(fl%+2048) Z%=FNWimpErr("Insufficient Free Memory"):ENDPROC
 1530sal%=fl%+2048
 1540SYS"Wimp_SlotSize",slot%+sal%+sal%,TRUE:sa%=HIMEM:sa2%=sa%+sal%
 1550!sa%=sal%:SYS"OS_SpriteOp",&10A,sa%,fn$
 1560sp%=sa%!8+sa%:IF sp%!40=13 OR sp%!40=15 THEN ELSE K%=FNWimpErr("Only Mode 13 & 15 Sprites Accepted"):ENDPROC
 1570IF sa%!16<>&31474641 THEN
 1580  K%=FNWimpErr("Not An AFG Sprite. Click OK to convert.")
 1590  IF K%=2 sa%=FALSE:SYS"Wimp_SlotSize",slot%,TRUE:ENDPROC ELSE PROCmovespr(20):$(sa%+16)="AFG1":sa%?20=0:sa%?32=0
 1600ENDIF
 1610PROCgetvar:PROCsaveprev:Savew%=SaveAs%
 1620ENDPROC
 1630DEFPROCgetvar
 1640IF Vars%>0 PROCDelWin(Vars%):Vars%=-1
 1650$pgmn=FNGetStr(sa%+20):numv%=sa%?32:v%=0:p%=sa%+33:datap%=data%
 1660WHILE v%<numv%
 1670  v%+=1:V%(v%,0)=?p%:p%+=1
 1680ENDWHILE
 1690p%=(p%+3)AND-4:Varw%!44=-(numv%+1)*52:Varw%!84=1:ic%=Varw%+120:r%=ic%!96+8
 1700mr%=r%+112
 1710v%=0:WHILE v%<numv%
 1720  v%+=1:V%(v%,1)=datap%
 1730  CASE V%(v%,0) OF
 1740    WHEN 4:$datap%=STR$(!p%):p%+=4:$(ic%+52)="I":ic%!104=160+r%:ic%!120=vint%:ic%!124=10:datap%+=10
 1750    WHEN 5:$datap%=STR$(|p%):p%+=8:$(ic%+52)="F":ic%!104=192+r%:ic%!120=vflt%:ic%!124=12:datap%+=12
 1760    WHEN 8:PROCdstr(p%,datap%):p%+=8:$(ic%+52)="D":ic%!104=400+r%:ic%!120=vflt%:ic%!124=26:datap%+=26
 1770    OTHERWISE:IF V%(v%,0)AND &80 THEN
 1780      L%=V%(v%,0)AND&7F:$datap%=FNGetStr(p%):datap%+=L%:p%+=(L%+3)AND&FC:$(ic%+52)="S"
 1790      IF L%<65 ic%!104=L%*16+r% ELSE ic%!104=65*16+r%
 1800      ic%!120=-1:ic%!124=L%
 1810    ENDIF
 1820  ENDCASE
 1830  Varw%!84+=4:$(ic%+20)=STR$(v%):$(ic%+84)=STR$(V%(v%,0)AND&7F)
 1840  ic%!116=V%(v%,1):IF ic%!104>mr% mr%=ic%!104
 1850  PROCmove(ic%,ic%+128,128):ic%+=128
 1860  FOR Z%=ic% TO ic%+96 STEP32:Z%!4-=52:Z%!12-=52:NEXT
 1870ENDWHILE
 1880Varw%!48=mr%+8:Varw%!96=mr%:Vars%=FNWimpCW(Varw%)
 1890ENDPROC
 1900
 1910DEFPROCaddstr
 1920Z%=VAL($strlen):IF Z%>127 Z%=127 ELSEIF Z%<1 Z%=1
 1930PROCaddvar(Z%+&80,Z%)
 1940ENDPROC
 1950DEFPROCaddvar(T%,D%)
 1960numv%+=1:V%(numv%,0)=T%:V%(numv%,1)=datap%:?datap%=0:datap%+=D%
 1970T%=((T%AND&7F)+3)AND&FC:IF (numv%AND3)=0 T%+=4
 1980PROCmovespr(T%):PROCputvar:PROCgetvar
 1990ENDPROC
 2000
 2010DEFPROCdelvar
 2020IF numv%=0 ENDPROC
 2030K%=FNWimpErr("Click OK to delete last variable"):IF K%=2 ENDPROC
 2040L%=0:IF numv%AND3=0 L%-=4
 2050CASE V%(numv%,0) OF
 2060  WHEN 4:L%-=4
 2070  WHEN 5:L%-=8
 2080  WHEN 8:L%-=8
 2090  OTHERWISE L%-=((V%(numv%,0)AND&7F)+3)AND&FC
 2100ENDCASE
 2110numv%-=1:PROCmovespr(L%)
 2120PROCputvar:PROCgetvar
 2130ENDPROC
 2140
 2150REM Move Sprite up(+)/down(-)
 2160DEFPROCmovespr(n%)
 2170A%=sp%:B%=sp%+n%:C%=sal%-(sp%-sa%)-n%:CALLmove
 2180sp%+=n%:sa%!8+=n%:sa%!12+=n%
 2190ENDPROC
 2200REM Double to string
 2210DEFPROCdstr(A%,B%):CALLfpdblstr:ENDPROC
 2220
 2230DEFPROCforce
 2240SYS"Wimp_ForceRedraw",-1,0,0,1280,1024
 2250ENDPROC
 2260
 2270DEFPROCdispspr
 2280IF sa%=FALSE ENDPROC
 2290wmode%=MODE:SYS"Wimp_SetMode",dmode%:IF MODE<>dmode% Z%=FNWimpErr("Not enough memory for Mode "+STR$(dmode%)):ENDPROC
 2300fw!108=sp%:fw!112=sa%
 2310!fwb=FNWimpCW(fw):PROCopenw(fwb)
 2320ENDPROC
 2330
 2340DEFPROCredrawwin(h%)
 2350LOCAL f%,i%,w%,x%,y%:!b%=h%
 2360SYS"Wimp_RedrawWindow",,b% TO f%
 2370WHILE f%
 2380  x%=(b%!4)-(b%!20):y%=(b%!16)-(b%!24):REM Work Unit Origin
 2390  !b%=h%:SYS"Wimp_GetRectangle",,b% TO f%
 2400ENDWHILE
 2410ENDPROC
 2420
 2430DEFPROCsaveprev
 2440PROCputvar:PROCmove(sa%,sa2%,sal%)
 2450ENDPROC
 2460DEFPROCgetprev
 2470PROCmove(sa2%,sa%,sal%):PROCgetvar
 2480ENDPROC
 2490ENDPROC
 2500
 2510DEFPROCcycle(n%)
 2520PROCsaveprev
 2530IF but%=4 n%=0-n%
 2540A%=sp%:B%=n%:CALLcycle
 2550IF !fwb PROCforce
 2560ENDPROC
 2570
 2580DEFPROCanimate(T%)
 2590IF !fwb=FALSE ENDPROC
 2600PROCWimpClM:SYS"Wimp_Poll",1,b%:REM Allow Wimp to close menu
 2610LOCAL ERROR:ONERRORLOCAL Z%=FNWimpErr("Insufficient screen memory"):ENDPROC
 2620CALLaddrscrn:ssize=!scrsize:SYS"OS_ChangeDynamicArea",2,ssize
 2630RESTORE ERROR
 2640A%=T%:CALLanimate
 2650PROCforce
 2660SYS"XOS_ChangeDynamicArea",2,-ssize
 2670ENDPROC
 2680
 2690REM Move from,to,len
 2700DEFPROCmove(A%,B%,C%):CALLmove:ENDPROC
 2710DEFPROCasm
 2720DIM C% 2048
 2730FOR A%=0 TO 2 STEP 2
 2740P%=C%
 2750[OPT A%
 2760; Move from A%(R0) to B%(R1) length C%(R2)
 2770.move
 2780BICS R2,R2,#%11 ; Word length
 2790MOVLE PC,R14
 2800CMP R0,R1
 2810BGT movedown
 2820ADD R3,R0,R2
 2830CMP R3,R2
 2840BGT moveup
 2850.movedown
 2860LDR R3,[R0],#4
 2870STR R3,[R1],#4
 2880SUBS R2,R2,#4
 2890BNE movedown
 2900MOV PC,R14
 2910.moveup
 2920ADD R0,R0,R2
 2930ADD R1,R1,R2
 2940.moveupl
 2950LDR R3,[R0,#-4]!
 2960STR R3,[R1,#-4]!
 2970SUBS R2,R2,#4
 2980BNE moveupl
 2990MOV PC,R14
 3000; Invert Sprite @ R0
 3010.invert
 3020STMFD R13!,{R0-R12,R14}
 3030BL addrspr
 3040MVN R3,#0 ; R3=-1
 3050.invloop
 3060LDR R4,[R1]
 3070EOR R4,R4,R3
 3080STR R4,[R1],#4
 3090SUBS R2,R2,#4
 3100BNE invloop
 3110LDMFD R13!,{R0-R12,PC}
 3120; Sprite @ R0 to Grey
 3130.grey
 3140STMFD R13!,{R0-R12,R14}
 3150BL addrspr
 3160ADR R3,greytab
 3170.greyloop
 3180LDRB R4,[R1]
 3190LDRB R5,[R3,R4]
 3200STRB R5,[R1],#1
 3210SUBS R2,R2,#1
 3220BNE greyloop
 3230LDMFD R13!,{R0-R12,PC}
 3240.greytab
 3250DCD &2F2E2C00
 3260DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3270DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3280DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3290DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3300DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3310DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3320DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3330DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3340DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3350DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3360DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3370DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3380DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3390DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3400DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3410DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3420DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3430DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3440DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3450DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3460DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
 3470; Sprite @ R0 to B & W
 3480.bandw
 3490STMFD R13!,{R0-R12,R14}
 3500BL addrspr
 3510MOV R3,#0
 3520MOV R5,#255
 3530.bwloop
 3540LDRB R4,[R1]
 3550ANDS R4,R4,#1
 3560STREQB R3,[R1],#1 ; Black
 3570STRNEB R5,[R1],#1 ; White
 3580SUBS R2,R2,#1
 3590BNE bwloop
 3600LDMFD R13!,{R0-R12,PC}
 3610; Cycle Sprite @ R0, R1=adjust (+/-)
 3620.cycle
 3630STMFD R13!,{R0-R12,R14}
 3640MOV R3,R1
 3650BL addrspr
 3660.cyloop
 3670LDRB R4,[R1]
 3680ADD R4,R4,R3
 3690STRB R4,[R1],#1
 3700SUBS R2,R2,#1
 3710BNE cyloop
 3720LDMFD R13!,{R0-R12,PC}
 3730; Animate Screen. R0=1 all colours; R0=2 not black
 3740.animate
 3750STMFD R13!,{R0-R12,R14}
 3760STR R0,antype
 3770BL addrscrn
 3780MOV R10,R1
 3790MOV R11,R2
 3800ADD R12,R10,R11 ; Shadow screen addr
 3810MOV R9,#2 ; Screen bank
 3820.anloop
 3830MOV R0,#19
 3840SWI "OS_Byte"
 3850CMP R9,#1
 3860MOVNE R9,#1
 3870MOVEQ R9,#2
 3880MOV R0,#113
 3890MOV R1,R9
 3900SWI "OS_Byte" ; Switch display bank
 3910MOV R0,R12 ; Target bank
 3920MOV R1,R10 ; displayed bank
 3930MOV R2,R11
 3940MOV R10,R0 ; Next bank
 3950MOV R12,R1 ; Next source bank
 3960MOV R7,#&FF
 3970LDR R3,antype
 3980CMP R3,#2
 3990BEQ anblack
 4000; Note- following routine optimised for speed
 4010.ancycle
 4020LDMIA R1!,{R3-R6}
 4030FNaddword1(3)
 4040FNaddword1(4)
 4050FNaddword1(5)
 4060FNaddword1(6)
 4070STMIA R0!,{R3-R6}
 4080SUBS R2,R2,#16
 4090BNE ancycle
 4100B ancheck
 4110; Animate all colours except black
 4120.anblack
 4130LDMIA R1!,{R3-R6}
 4140FNaddword2(3)
 4150FNaddword2(4)
 4160FNaddword2(5)
 4170FNaddword2(6)
 4180STMIA R0!,{R3-R6}
 4190SUBS R2,R2,#16
 4200BNE anblack
 4210B ancheck
 4220;
 4230.ancheck
 4240SWI "OS_Mouse"; R0-R3 corrupted
 4250CMP R2,#0
 4260BEQ anloop
 4270CMP R2,#4 ; Select?
 4280BEQ anwait
 4290CMP R2,#2 ; Menu?
 4300BNE anloop
 4310.anexit
 4320MOV R0,#113
 4330MOV R1,#0
 4340SWI "OS_Byte" ; Reset display bank
 4350LDMFD R13!,{R0-R12,PC}
 4360; Wait until Menu or Adjust
 4370.anwait
 4380MOV R0,#21
 4390MOV R1,#9
 4400SWI "OS_Byte"; Flush mouse buffer
 4410.anwaitloop
 4420SWI "OS_Mouse"
 4430TST R2,#3 ; Menu or Adjust
 4440BEQ anwaitloop
 4450CMP R2,#2 ; Menu?
 4460BEQ anexit
 4470B anloop
 4480.antype DCD 0
 4490; R0=Sprite addr. On exit R1=data address, R2=data length
 4500.addrspr
 4510LDR R1,[R0,#16]
 4520ADD R1,R1,#1
 4530MOV R1,R1,LSL #2
 4540LDR R2,[R0,#20]
 4550ADD R2,R2,#1
 4560MUL R2,R1,R2
 4570LDR R1,[R0,#32]
 4580ADD R1,R1,R0
 4590MOV PC,R14
 4600; Get Screen address (R1) & length (R2)
 4610.addrscrn
 4620ADR R0,scrvari
 4630ADR R1,scrvaro
 4640SWI "OS_ReadVduVariables"
 4650LDR R1,scraddr
 4660LDR R2,scrsize
 4670MOV PC,R14
 4680.scrvari DCD 149:DCD 7: DCD -1
 4690.scrvaro
 4700.scraddr DCD 0
 4710.scrsize DCD 0
 4720]
 4730NEXT
 4740IF P%>C%+2048 ERROR 0,"Assembler buffer overflow"
 4750DIM C% 256:PROCfpconv(C%)
 4760ENDPROC
 4770
 4780DEFFNaddword1(Rn)
 4790[OPT A%
 4800FNaddbyte1(Rn)
 4810FNaddbyte1(Rn)
 4820FNaddbyte1(Rn)
 4830FNaddbyte1(Rn)
 4840]:=0
 4850DEFFNaddbyte1(Rn)
 4860[OPT A%
 4870TST Rn,R7
 4880SUBNE Rn,Rn,#1
 4890ORREQ Rn,Rn,#&FF
 4900MOV Rn,Rn,ROR #8
 4910]:=0
 4920DEFFNaddword2(Rn)
 4930[OPT A%
 4940FNaddbyte2(Rn)
 4950FNaddbyte2(Rn)
 4960FNaddbyte2(Rn)
 4970FNaddbyte2(Rn)
 4980]:=0
 4990DEFFNaddbyte2(Rn)
 5000[OPT A%
 5010TST Rn,R7
 5020BEQ P%+16
 5030SUB Rn,Rn,#1
 5040TST Rn,R7
 5050ORREQ Rn,Rn,#&FF
 5060MOV Rn,Rn,ROR #8
 5070]:=0
� > !RunImage
� AFG Sprite Editor v1.00
� � Mike Curnow May 1991
(!ș"Wimp_SlotSize",�,� � slot%
2ț "<AFGS$Dir>.WimpLib"
<&ț "<AFGS$Dir>.FPLib":�fpinit:�asm
Fmaxv%=32:� V%(maxv%,1)
P�WimpInit("AFG Sprite",512)
Z-� Varw% 120+maxv%*32*4,Varsi% 20:Vars%=-1
dL� SaveAsi% 260:SaveAs2t%=SaveAsi%+0:SaveAs2v%=SaveAsi%+256:fn%=SaveAs2t%
ne� Infoi% 95:Infot%=Infoi%:Info2t%=Infoi%+19:Info3t%=Infoi%+37:Info4t%=Infoi%+55:Info5t%=Infoi%+75
x#�WimpOT("<AFGS$Dir>.Templates")
�;E%=�WimpLT(Varsi%,Varsi%+20,"Vars"):�move(b%,Varw%,248)
�LE%=�WimpLT(SaveAsi%,SaveAsi%+260,"SaveAs"):SaveAs%=�WimpCW(b%):Savew%=-1
�9E%=�WimpLT(Infoi%,Infoi%+95,"Info"):Info%=�WimpCW(b%)
��WimpCT
�� �WimpStop
�B� conv% 256,data% 4096,pgmn 12:?pgmn=0:� strlen 4:$strlen="12"
�=� vint% 8:$vint%="A0-9\-+":� vflt% 11:$vflt%="A0-9Ee.+\-"
�sa%=�:dmode%=15
�� fwb 124:!fwb=0:fw=fwb+4
ܷfw!0=0:fw!4=0:fw!8=1280:fw!12=1024:fw!16=0:fw!20=0:fw!24=-1:fw!28=&80000010:fw!32=&FF:fw!36=0:fw!40=0:fw!44=0:fw!48=1280:fw!52=1024:fw!56=0:fw!60=0:fw!64=0:fw!68=0:fw!72=0:fw!84=1
�?fw!88=0:fw!92=0:fw!96=1280:fw!100=1024:fw!104=&102:fw!116=0
�ic%=�IconTask("!AFGSprite")
�
�
$ș"Wimp_Poll",1,b% � C%:*FX229,0
Ȏ C% �
"� 1:�redrawwin(!b%)
,� 2:�openw(b%)
6� 3:�CloseWin(!b%)
@.� 6:�CheckMouse(!b%,b%!4,b%!8,b%!12,b%!16)
J
� 7:�save
T� 9:�menusel
^� 17,18:�usermsg(b%)
h�
r� �
|
���openw(b%)
�ș"Wimp_OpenWindow",,b%
��
�
�
��WimpEnd
�"� !fwb ș"Wimp_SetMode",wmode%
�ș"Wimp_CloseDown"
��
�
�
��menusel
��WimpSelect(b%,m$,but%)
�Ȏ m$ �
�(  � "Data.Add.Integer":�addvar(4,10)
&  � "Data.Add.Float":�addvar(5,12)
'  � "Data.Add.Double":�addvar(8,26)
!  � "Data.Add.String":�addstr
&  � "Data.Delete":�delvar
0L  � "Display.Hide":� !fwb �CloseWin(!fwb):!fwb=�:ș"Wimp_SetMode",wmode%
:1  � "Display.Previous":�getprev:� !fwb �force
D>  � "Display.Mode.13":dmode%=13:� !fwb ș"Wimp_SetMode",13
N>  � "Display.Mode.15":dmode%=15:� !fwb ș"Wimp_SetMode",15
X5  � "Effects.Invert":A%=sp%:�invert:� !fwb �force
b;  � "Effects.Grey":�saveprev:A%=sp%:�grey:� !fwb �force
l=  � "Effects.B & W":�saveprev:A%=sp%:�bandw:� !fwb �force
v#  � "Effects.Cycle 8":�cycle(8)
�#  � "Effects.Cycle 1":�cycle(1)
�'  � "Effects.Animate 1":�animate(1)
�'  � "Effects.Animate 2":�animate(2)
�+  :� �m$,15)="Data.Add.String" �addstr
��
�� but%=1 �menu(0)
��
�
���usermsg(b%)
�
mc%=b%!16
�Ȏ mc% �
�� 0:�WimpEnd
�� 2:�dosave(�)
� 3:�doload
�
�
 
*2��CheckMouse(mousex%,mousey%,B%,handle%,icon%)
4but%=B%
>$� (but%�2) � handle%=-2 �menu(0)
H&� (but%�2) � handle%=!fwb �menu(1)
R$� (but%�4) � handle%=-2 �dispspr
\7� (but%�&50) � handle%=SaveAs% � icon%=0 �WimpSSave
f5� (but%�5) � handle%=SaveAs% � icon%=2 �dosave(�)
p�
z
���menu(h%)
�B� sa% Pgm%=�WimpMenu(-1,"$pgmn(12)","Program Name:") � Pgm%=-1
�.Strlen%=�WimpMenu(-1,"$strlen(4)"," Len:")
�S� sa% Add%=�WimpMenu(-1,"Integer,Float,Double,String>Strlen%","Add:") � Add%=-1
�NData%=�WimpMenu(-1,"Program>Pgm%,Variables>Vars%,Add>Add%,Delete","Data:")
�[Mode%=�WimpMenu(-1,"13,15","Mode:"):� dmode%=13 �WimpTick(Mode%,0) � �WimpTick(Mode%,1)
�T� sa% Display%=�WimpMenu(-1,"Hide,Previous,Mode>Mode%","Display:") � Display%=-1
�q� sa% Effects%=�WimpMenu(-1,"Invert,Grey,B & W,Cycle 8,Cycle 1,Animate 1,Animate 2","Effects:") � Effects%=-1
�fZ%=�WimpMenu(h%,"Info>Info%,Data>Data%,Display>Display%,Effects>Effects%,Save>Savew%,Quit",taskn$)
��
�
�
��save
�1fn$=�Leaf(�GetStr(fn%)):�WimpDoSave(fn$,&FF9)
�

��dosave(D%)
$7� D% fn$=�GetStr(b%+44):$fn%=fn$ � fn$=�GetStr(fn%)
.V� �fn$,".")=0 Z%=�WimpErr("To save, drag the sprite icon to a directory viewer"):�
8�putvar
B�:��:Z%=�WimpErr(�$):�
L ș"OS_SpriteOp",&10C,sa%,fn$
V��
`� D% �WimpAckSave
j� but%�&44 �WimpClM
t�
~��putvar
�5�PutStr($pgmn,sa%+20):sa%?32=numv%:p%=sa%+33:v%=0
�ȕ v%<numv%
�  v%+=1:?p%=V%(v%,0):p%+=1
��
�p%=(p%+3)�-4:v%=0
�ȕ v%<numv%
�   v%+=1:V$=�GetStr(V%(v%,1))
�  Ȏ V%(v%,0) �
�    � 4:!p%=�(V$):p%+=4
�    � 5:|p%=�(V$):p%+=8
�    � 8:�strdbl
�F    :L%=V%(v%,0)�&7F:�PutStr(�GetStr(V%(v%,1)),p%):p%+=(L%+3)�&FC
  �

�
�
��strdbl
(� �(V$)=0 V$="0"
2� A%=0 � 2 � 2
<P%=conv%
F[OPT A%
P�fp("LDFP F0,strd")
Z�fp("STFD F0,[R0]")
dMOV PC,R14
n.strd �fp("DFP "+V$)
x]:�
�A%=p%:�conv%
�	p%+=8
��
�
���doload
�fn$=�GetStr(b%+44):i%=b%!40
�� i%<>&FF9 �
�%� Vars%>0 �DelWin(Vars%):Vars%=-1
�Savew%=-1:$fn%=fn$:sa%=�
�fh%=�(fn$):fl%=�#fh%:�#fh%
�$ș"Wimp_SlotSize",slot%,� � ,,F%
�=� F%<(fl%+2048) Z%=�WimpErr("Insufficient Free Memory"):�
�sal%=fl%+2048
;ș"Wimp_SlotSize",slot%+sal%+sal%,�:sa%=�:sa2%=sa%+sal%
*!sa%=sal%:ș"OS_SpriteOp",&10A,sa%,fn$
asp%=sa%!8+sa%:� sp%!40=13 � sp%!40=15 � � K%=�WimpErr("Only Mode 13 & 15 Sprites Accepted"):�
"� sa%!16<>&31474641 �
,<  K%=�WimpErr("Not An AFG Sprite. Click OK to convert.")
6`  � K%=2 sa%=�:ș"Wimp_SlotSize",slot%,�:� � �movespr(20):$(sa%+16)="AFG1":sa%?20=0:sa%?32=0
@�
J$�getvar:�saveprev:Savew%=SaveAs%
T�
^��getvar
h%� Vars%>0 �DelWin(Vars%):Vars%=-1
rB$pgmn=�GetStr(sa%+20):numv%=sa%?32:v%=0:p%=sa%+33:datap%=data%
|ȕ v%<numv%
�  v%+=1:V%(v%,0)=?p%:p%+=1
��
�Lp%=(p%+3)�-4:Varw%!44=-(numv%+1)*52:Varw%!84=1:ic%=Varw%+120:r%=ic%!96+8
�mr%=r%+112
�v%=0:ȕ v%<numv%
�  v%+=1:V%(v%,1)=datap%
�  Ȏ V%(v%,0) �
�a    � 4:$datap%=�(!p%):p%+=4:$(ic%+52)="I":ic%!104=160+r%:ic%!120=vint%:ic%!124=10:datap%+=10
�a    � 5:$datap%=�(|p%):p%+=8:$(ic%+52)="F":ic%!104=192+r%:ic%!120=vflt%:ic%!124=12:datap%+=12
�c    � 8:�dstr(p%,datap%):p%+=8:$(ic%+52)="D":ic%!104=400+r%:ic%!120=vflt%:ic%!124=26:datap%+=26
�    :� V%(v%,0)� &80 �
�U      L%=V%(v%,0)�&7F:$datap%=�GetStr(p%):datap%+=L%:p%+=(L%+3)�&FC:$(ic%+52)="S"
�5      � L%<65 ic%!104=L%*16+r% � ic%!104=65*16+r%
      ic%!120=-1:ic%!124=L%
	    �
  �
&;  Varw%!84+=4:$(ic%+20)=�(v%):$(ic%+84)=�(V%(v%,0)�&7F)
00  ic%!116=V%(v%,1):� ic%!104>mr% mr%=ic%!104
:%  �move(ic%,ic%+128,128):ic%+=128
D0  � Z%=ic% � ic%+96 �32:Z%!4-=52:Z%!12-=52:�
N�
X4Varw%!48=mr%+8:Varw%!96=mr%:Vars%=�WimpCW(Varw%)
b�
l
v��addstr
�.Z%=�($strlen):� Z%>127 Z%=127 �� Z%<1 Z%=1
��addvar(Z%+&80,Z%)
��
���addvar(T%,D%)
�Cnumv%+=1:V%(numv%,0)=T%:V%(numv%,1)=datap%:?datap%=0:datap%+=D%
�+T%=((T%�&7F)+3)�&FC:� (numv%�3)=0 T%+=4
� �movespr(T%):�putvar:�getvar
��
�
���delvar
�� numv%=0 �
�<K%=�WimpErr("Click OK to delete last variable"):� K%=2 �
�L%=0:� numv%�3=0 L%-=4
Ȏ V%(numv%,0) �
  � 4:L%-=4
  � 5:L%-=8
   � 8:L%-=8
*%   L%-=((V%(numv%,0)�&7F)+3)�&FC
4�
>numv%-=1:�movespr(L%)
H�putvar:�getvar
R�
\
f� Move Sprite up(+)/down(-)
p��movespr(n%)
z/A%=sp%:B%=sp%+n%:C%=sal%-(sp%-sa%)-n%:�move
� sp%+=n%:sa%!8+=n%:sa%!12+=n%
��
�� Double to string
���dstr(A%,B%):�fpdblstr:�
�
���force
�)ș"Wimp_ForceRedraw",-1,0,0,1280,1024
��
�
�
��dispspr
�
� sa%=� �
�gwmode%=�:ș"Wimp_SetMode",dmode%:� �<>dmode% Z%=�WimpErr("Not enough memory for Mode "+�(dmode%)):�
�fw!108=sp%:fw!112=sa%
	 !fwb=�WimpCW(fw):�openw(fwb)
	�
	
	$��redrawwin(h%)
	.� f%,i%,w%,x%,y%:!b%=h%
	8"ș"Wimp_RedrawWindow",,b% � f%
	B	ȕ f%
	L=  x%=(b%!4)-(b%!20):y%=(b%!16)-(b%!24):� Work Unit Origin
	V+  !b%=h%:ș"Wimp_GetRectangle",,b% � f%
	`�
	j�
	t
	~��saveprev
	� �putvar:�move(sa%,sa2%,sal%)
	��
	�
��getprev
	� �move(sa2%,sa%,sal%):�getvar
	��
	��
	�
	���cycle(n%)
	�
�saveprev
	�� but%=4 n%=0-n%
	�A%=sp%:B%=n%:�cycle
	�� !fwb �force
�


��animate(T%)
� !fwb=� �
(:�WimpClM:ș"Wimp_Poll",1,b%:� Allow Wimp to close menu
27� �:�� Z%=�WimpErr("Insufficient screen memory"):�
<=�addrscrn:ssize=!scrsize:ș"OS_ChangeDynamicArea",2,ssize
F� �
PA%=T%:�animate
Z
�force
d&ș"XOS_ChangeDynamicArea",2,-ssize
n�
x
�� Move from,to,len
���move(A%,B%,C%):�move:�
�	��asm
�
� C% 2048
�� A%=0 � 2 � 2
�	P%=C%
�[OPT A%
�.; Move from A%(R0) to B%(R1) length C%(R2)
�	.move
�!BICS R2,R2,#%11 ; Word length
�MOVLE PC,R14
�
CMP R0,R1
�BGT movedown
ADD R3,R0,R2

CMP R3,R2
BGT moveup
"
.movedown
,LDR R3,[R0],#4
6STR R3,[R1],#4
@SUBS R2,R2,#4
JBNE movedown
TMOV PC,R14
^.moveup
hADD R0,R0,R2
rADD R1,R1,R2
|.moveupl
�LDR R3,[R0,#-4]!
�STR R3,[R1,#-4]!
�SUBS R2,R2,#4
�BNE moveupl
�MOV PC,R14
�; Invert Sprite @ R0
�.invert
�STMFD R13!,{R0-R12,R14}
�BL addrspr
�MVN R3,#0 ; R3=-1
�.invloop
�LDR R4,[R1]
�� R4,R4,R3
STR R4,[R1],#4
SUBS R2,R2,#4
BNE invloop
&LDMFD R13!,{R0-R12,PC}
0; Sprite @ R0 to Grey
:	.grey
DSTMFD R13!,{R0-R12,R14}
NBL addrspr
XADR R3,greytab
b
.greyloop
lLDRB R4,[R1]
vLDRB R5,[R3,R4]
�STRB R5,[R1],#1
�SUBS R2,R2,#1
�BNE greyloop
�LDMFD R13!,{R0-R12,PC}
�.greytab
�DCD &2F2E2C00
�-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
�-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
�-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
�-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
�-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
�-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F
�-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

 -DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

*-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

4-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

>-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

H-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

R-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

\-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

f-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

p-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

z-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

�-DCD &FCFDFEFF:DCD &D0D1D2D3:DCD &2C2D2E2F

�; Sprite @ R0 to B & W

�
.bandw

�STMFD R13!,{R0-R12,R14}

�BL addrspr

�
MOV R3,#0

�MOV R5,#255

�.bwloop

�LDRB R4,[R1]

��S R4,R4,#1

�STREQB R3,[R1],#1 ; Black

�STRNEB R5,[R1],#1 ; White

�SUBS R2,R2,#1
BNE bwloop
LDMFD R13!,{R0-R12,PC}
(; Cycle Sprite @ R0, R1=adjust (+/-)
$
.cycle
.STMFD R13!,{R0-R12,R14}
8
MOV R3,R1
BBL addrspr
L.cyloop
VLDRB R4,[R1]
`ADD R4,R4,R3
jSTRB R4,[R1],#1
tSUBS R2,R2,#1
~BNE cyloop
�LDMFD R13!,{R0-R12,PC}
�6; Animate Screen. R0=1 all colours; R0=2 not black
�.animate
�STMFD R13!,{R0-R12,R14}
�STR R0,antype
�BL addrscrn
�MOV R10,R1
�MOV R11,R2
�(ADD R12,R10,R11 ; Shadow screen addr
�MOV R9,#2 ; Screen bank
�.anloop
�MOV R0,#19
SWI "OS_Byte"


CMP R9,#1
MOVNE R9,#1
�Q R9,#2
(MOV R0,#113
2
MOV R1,R9
<'SWI "OS_Byte" ; Switch display bank
FMOV R0,R12 ; Target bank
PMOV R1,R10 ; displayed bank
ZMOV R2,R11
dMOV R10,R0 ; Next bank
n!MOV R12,R1 ; Next source bank
xMOV R7,#&FF
�LDR R3,antype
�
CMP R3,#2
�BEQ anblack
�1; Note- following routine optimised for speed
�.ancycle
�LDMIA R1!,{R3-R6}
��addword1(3)
��addword1(4)
��addword1(5)
��addword1(6)
�STMIA R0!,{R3-R6}
�SUBS R2,R2,#16
�BNE ancycle

B ancheck
&; Animate all colours except black
.anblack
"LDMIA R1!,{R3-R6}
,�addword2(3)
6�addword2(4)
@�addword2(5)
J�addword2(6)
TSTMIA R0!,{R3-R6}
^SUBS R2,R2,#16
hBNE anblack
r
B ancheck
|;
�.ancheck
�#SWI "OS_Mouse"; R0-R3 corrupted
�
CMP R2,#0
�BEQ anloop
�CMP R2,#4 ; Select?
�BEQ anwait
�CMP R2,#2 ; Menu?
�BNE anloop
�.anexit
�MOV R0,#113
�
MOV R1,#0
�&SWI "OS_Byte" ; Reset display bank
�LDMFD R13!,{R0-R12,PC}
; Wait until Menu or Adjust
.anwait
MOV R0,#21
&
MOV R1,#9
0%SWI "OS_Byte"; Flush mouse buffer
:.anwaitloop
DSWI "OS_Mouse"
NTST R2,#3 ; Menu or Adjust
XBEQ anwaitloop
bCMP R2,#2 ; Menu?
lBEQ anexit
vB anloop
�.antype DCD 0
�=; R0=Sprite addr. On exit R1=data address, R2=data length
�.addrspr
�LDR R1,[R0,#16]
�ADD R1,R1,#1
�MOV R1,R1,LSL #2
�LDR R2,[R0,#20]
�ADD R2,R2,#1
�MUL R2,R1,R2
�LDR R1,[R0,#32]
�ADD R1,R1,R0
�MOV PC,R14
�+; Get Screen address (R1) & length (R2)

.addrscrn
ADR R0,scrvari
ADR R1,scrvaro
 SWI "OS_ReadVduVariables"
*LDR R1,scraddr
4LDR R2,scrsize
>MOV PC,R14
H".scrvari DCD 149:DCD 7: DCD -1
R.scrvaro
\.scraddr DCD 0
f.scrsize DCD 0
p]
z�
�0� P%>C%+2048 � 0,"Assembler buffer overflow"
�� C% 256:�fpconv(C%)
��
�
�ݤaddword1(Rn)
�[OPT A%
��addbyte1(Rn)
��addbyte1(Rn)
��addbyte1(Rn)
��addbyte1(Rn)
�]:=0
�ݤaddbyte1(Rn)
�[OPT A%

TST Rn,R7
SUBNE Rn,Rn,#1
�REQ Rn,Rn,#&FF
$MOV Rn,Rn,ROR #8
.]:=0
8ݤaddword2(Rn)
B[OPT A%
L�addbyte2(Rn)
V�addbyte2(Rn)
`�addbyte2(Rn)
j�addbyte2(Rn)
t]:=0
~ݤaddbyte2(Rn)
�[OPT A%
�
TST Rn,R7
�
BEQ P%+16
�SUB Rn,Rn,#1
�
TST Rn,R7
��REQ Rn,Rn,#&FF
�MOV Rn,Rn,ROR #8
�]:=0
�
00000000  0d 00 0a 11 f4 20 3e 20  21 52 75 6e 49 6d 61 67  |..... > !RunImag|
00000010  65 0d 00 14 1d f4 20 41  46 47 20 53 70 72 69 74  |e..... AFG Sprit|
00000020  65 20 45 64 69 74 6f 72  20 76 31 2e 30 30 0d 00  |e Editor v1.00..|
00000030  1e 1c f4 20 a9 20 4d 69  6b 65 20 43 75 72 6e 6f  |... . Mike Curno|
00000040  77 20 4d 61 79 20 31 39  39 31 0d 00 28 21 c8 99  |w May 1991..(!..|
00000050  22 57 69 6d 70 5f 53 6c  6f 74 53 69 7a 65 22 2c  |"Wimp_SlotSize",|
00000060  b9 2c b9 20 b8 20 73 6c  6f 74 25 0d 00 32 1b c8  |.,. . slot%..2..|
00000070  9b 20 22 3c 41 46 47 53  24 44 69 72 3e 2e 57 69  |. "<AFGS$Dir>.Wi|
00000080  6d 70 4c 69 62 22 0d 00  3c 26 c8 9b 20 22 3c 41  |mpLib"..<&.. "<A|
00000090  46 47 53 24 44 69 72 3e  2e 46 50 4c 69 62 22 3a  |FGS$Dir>.FPLib":|
000000a0  f2 66 70 69 6e 69 74 3a  f2 61 73 6d 0d 00 46 1a  |.fpinit:.asm..F.|
000000b0  6d 61 78 76 25 3d 33 32  3a de 20 56 25 28 6d 61  |maxv%=32:. V%(ma|
000000c0  78 76 25 2c 31 29 0d 00  50 1f f2 57 69 6d 70 49  |xv%,1)..P..WimpI|
000000d0  6e 69 74 28 22 41 46 47  20 53 70 72 69 74 65 22  |nit("AFG Sprite"|
000000e0  2c 35 31 32 29 0d 00 5a  2d de 20 56 61 72 77 25  |,512)..Z-. Varw%|
000000f0  20 31 32 30 2b 6d 61 78  76 25 2a 33 32 2a 34 2c  | 120+maxv%*32*4,|
00000100  56 61 72 73 69 25 20 32  30 3a 56 61 72 73 25 3d  |Varsi% 20:Vars%=|
00000110  2d 31 0d 00 64 4c de 20  53 61 76 65 41 73 69 25  |-1..dL. SaveAsi%|
00000120  20 32 36 30 3a 53 61 76  65 41 73 32 74 25 3d 53  | 260:SaveAs2t%=S|
00000130  61 76 65 41 73 69 25 2b  30 3a 53 61 76 65 41 73  |aveAsi%+0:SaveAs|
00000140  32 76 25 3d 53 61 76 65  41 73 69 25 2b 32 35 36  |2v%=SaveAsi%+256|
00000150  3a 66 6e 25 3d 53 61 76  65 41 73 32 74 25 0d 00  |:fn%=SaveAs2t%..|
00000160  6e 65 de 20 49 6e 66 6f  69 25 20 39 35 3a 49 6e  |ne. Infoi% 95:In|
00000170  66 6f 74 25 3d 49 6e 66  6f 69 25 3a 49 6e 66 6f  |fot%=Infoi%:Info|
00000180  32 74 25 3d 49 6e 66 6f  69 25 2b 31 39 3a 49 6e  |2t%=Infoi%+19:In|
00000190  66 6f 33 74 25 3d 49 6e  66 6f 69 25 2b 33 37 3a  |fo3t%=Infoi%+37:|
000001a0  49 6e 66 6f 34 74 25 3d  49 6e 66 6f 69 25 2b 35  |Info4t%=Infoi%+5|
000001b0  35 3a 49 6e 66 6f 35 74  25 3d 49 6e 66 6f 69 25  |5:Info5t%=Infoi%|
000001c0  2b 37 35 0d 00 78 23 f2  57 69 6d 70 4f 54 28 22  |+75..x#.WimpOT("|
000001d0  3c 41 46 47 53 24 44 69  72 3e 2e 54 65 6d 70 6c  |<AFGS$Dir>.Templ|
000001e0  61 74 65 73 22 29 0d 00  82 3b 45 25 3d a4 57 69  |ates")...;E%=.Wi|
000001f0  6d 70 4c 54 28 56 61 72  73 69 25 2c 56 61 72 73  |mpLT(Varsi%,Vars|
00000200  69 25 2b 32 30 2c 22 56  61 72 73 22 29 3a f2 6d  |i%+20,"Vars"):.m|
00000210  6f 76 65 28 62 25 2c 56  61 72 77 25 2c 32 34 38  |ove(b%,Varw%,248|
00000220  29 0d 00 8c 4c 45 25 3d  a4 57 69 6d 70 4c 54 28  |)...LE%=.WimpLT(|
00000230  53 61 76 65 41 73 69 25  2c 53 61 76 65 41 73 69  |SaveAsi%,SaveAsi|
00000240  25 2b 32 36 30 2c 22 53  61 76 65 41 73 22 29 3a  |%+260,"SaveAs"):|
00000250  53 61 76 65 41 73 25 3d  a4 57 69 6d 70 43 57 28  |SaveAs%=.WimpCW(|
00000260  62 25 29 3a 53 61 76 65  77 25 3d 2d 31 0d 00 96  |b%):Savew%=-1...|
00000270  39 45 25 3d a4 57 69 6d  70 4c 54 28 49 6e 66 6f  |9E%=.WimpLT(Info|
00000280  69 25 2c 49 6e 66 6f 69  25 2b 39 35 2c 22 49 6e  |i%,Infoi%+95,"In|
00000290  66 6f 22 29 3a 49 6e 66  6f 25 3d a4 57 69 6d 70  |fo"):Info%=.Wimp|
000002a0  43 57 28 62 25 29 0d 00  a0 0b f2 57 69 6d 70 43  |CW(b%).....WimpC|
000002b0  54 0d 00 aa 10 ee 85 20  f2 57 69 6d 70 53 74 6f  |T...... .WimpSto|
000002c0  70 0d 00 b4 42 de 20 63  6f 6e 76 25 20 32 35 36  |p...B. conv% 256|
000002d0  2c 64 61 74 61 25 20 34  30 39 36 2c 70 67 6d 6e  |,data% 4096,pgmn|
000002e0  20 31 32 3a 3f 70 67 6d  6e 3d 30 3a de 20 73 74  | 12:?pgmn=0:. st|
000002f0  72 6c 65 6e 20 34 3a 24  73 74 72 6c 65 6e 3d 22  |rlen 4:$strlen="|
00000300  31 32 22 0d 00 be 3d de  20 76 69 6e 74 25 20 38  |12"...=. vint% 8|
00000310  3a 24 76 69 6e 74 25 3d  22 41 30 2d 39 5c 2d 2b  |:$vint%="A0-9\-+|
00000320  22 3a de 20 76 66 6c 74  25 20 31 31 3a 24 76 66  |":. vflt% 11:$vf|
00000330  6c 74 25 3d 22 41 30 2d  39 45 65 2e 2b 5c 2d 22  |lt%="A0-9Ee.+\-"|
00000340  0d 00 c8 13 73 61 25 3d  a3 3a 64 6d 6f 64 65 25  |....sa%=.:dmode%|
00000350  3d 31 35 0d 00 d2 1d de  20 66 77 62 20 31 32 34  |=15..... fwb 124|
00000360  3a 21 66 77 62 3d 30 3a  66 77 3d 66 77 62 2b 34  |:!fwb=0:fw=fwb+4|
00000370  0d 00 dc b7 66 77 21 30  3d 30 3a 66 77 21 34 3d  |....fw!0=0:fw!4=|
00000380  30 3a 66 77 21 38 3d 31  32 38 30 3a 66 77 21 31  |0:fw!8=1280:fw!1|
00000390  32 3d 31 30 32 34 3a 66  77 21 31 36 3d 30 3a 66  |2=1024:fw!16=0:f|
000003a0  77 21 32 30 3d 30 3a 66  77 21 32 34 3d 2d 31 3a  |w!20=0:fw!24=-1:|
000003b0  66 77 21 32 38 3d 26 38  30 30 30 30 30 31 30 3a  |fw!28=&80000010:|
000003c0  66 77 21 33 32 3d 26 46  46 3a 66 77 21 33 36 3d  |fw!32=&FF:fw!36=|
000003d0  30 3a 66 77 21 34 30 3d  30 3a 66 77 21 34 34 3d  |0:fw!40=0:fw!44=|
000003e0  30 3a 66 77 21 34 38 3d  31 32 38 30 3a 66 77 21  |0:fw!48=1280:fw!|
000003f0  35 32 3d 31 30 32 34 3a  66 77 21 35 36 3d 30 3a  |52=1024:fw!56=0:|
00000400  66 77 21 36 30 3d 30 3a  66 77 21 36 34 3d 30 3a  |fw!60=0:fw!64=0:|
00000410  66 77 21 36 38 3d 30 3a  66 77 21 37 32 3d 30 3a  |fw!68=0:fw!72=0:|
00000420  66 77 21 38 34 3d 31 0d  00 e6 3f 66 77 21 38 38  |fw!84=1...?fw!88|
00000430  3d 30 3a 66 77 21 39 32  3d 30 3a 66 77 21 39 36  |=0:fw!92=0:fw!96|
00000440  3d 31 32 38 30 3a 66 77  21 31 30 30 3d 31 30 32  |=1280:fw!100=102|
00000450  34 3a 66 77 21 31 30 34  3d 26 31 30 32 3a 66 77  |4:fw!104=&102:fw|
00000460  21 31 31 36 3d 30 0d 00  f0 1f 69 63 25 3d a4 49  |!116=0....ic%=.I|
00000470  63 6f 6e 54 61 73 6b 28  22 21 41 46 47 53 70 72  |conTask("!AFGSpr|
00000480  69 74 65 22 29 0d 00 fa  04 0d 01 04 05 f5 0d 01  |ite")...........|
00000490  0e 24 c8 99 22 57 69 6d  70 5f 50 6f 6c 6c 22 2c  |.$.."Wimp_Poll",|
000004a0  31 2c 62 25 20 b8 20 43  25 3a 2a 46 58 32 32 39  |1,b% . C%:*FX229|
000004b0  2c 30 0d 01 18 0b c8 8e  20 43 25 20 ca 0d 01 22  |,0...... C% ..."|
000004c0  17 c9 20 31 3a f2 72 65  64 72 61 77 77 69 6e 28  |.. 1:.redrawwin(|
000004d0  21 62 25 29 0d 01 2c 12  c9 20 32 3a f2 6f 70 65  |!b%)..,.. 2:.ope|
000004e0  6e 77 28 62 25 29 0d 01  36 16 c9 20 33 3a f2 43  |nw(b%)..6.. 3:.C|
000004f0  6c 6f 73 65 57 69 6e 28  21 62 25 29 0d 01 40 2e  |loseWin(!b%)..@.|
00000500  c9 20 36 3a f2 43 68 65  63 6b 4d 6f 75 73 65 28  |. 6:.CheckMouse(|
00000510  21 62 25 2c 62 25 21 34  2c 62 25 21 38 2c 62 25  |!b%,b%!4,b%!8,b%|
00000520  21 31 32 2c 62 25 21 31  36 29 0d 01 4a 0d c9 20  |!12,b%!16)..J.. |
00000530  37 3a f2 73 61 76 65 0d  01 54 10 c9 20 39 3a f2  |7:.save..T.. 9:.|
00000540  6d 65 6e 75 73 65 6c 0d  01 5e 18 c9 20 31 37 2c  |menusel..^.. 17,|
00000550  31 38 3a f2 75 73 65 72  6d 73 67 28 62 25 29 0d  |18:.usermsg(b%).|
00000560  01 68 05 cb 0d 01 72 07  fd 20 a3 0d 01 7c 04 0d  |.h....r.. ...|..|
00000570  01 86 0f dd f2 6f 70 65  6e 77 28 62 25 29 0d 01  |.....openw(b%)..|
00000580  90 1b c8 99 22 57 69 6d  70 5f 4f 70 65 6e 57 69  |...."Wimp_OpenWi|
00000590  6e 64 6f 77 22 2c 2c 62  25 0d 01 9a 05 e1 0d 01  |ndow",,b%.......|
000005a0  a4 04 0d 01 ae 0d dd f2  57 69 6d 70 45 6e 64 0d  |........WimpEnd.|
000005b0  01 b8 22 e7 20 21 66 77  62 20 c8 99 22 57 69 6d  |..". !fwb .."Wim|
000005c0  70 5f 53 65 74 4d 6f 64  65 22 2c 77 6d 6f 64 65  |p_SetMode",wmode|
000005d0  25 0d 01 c2 16 c8 99 22  57 69 6d 70 5f 43 6c 6f  |%......"Wimp_Clo|
000005e0  73 65 44 6f 77 6e 22 0d  01 cc 05 e0 0d 01 d6 04  |seDown".........|
000005f0  0d 01 e0 0d dd f2 6d 65  6e 75 73 65 6c 0d 01 ea  |......menusel...|
00000600  1b f2 57 69 6d 70 53 65  6c 65 63 74 28 62 25 2c  |..WimpSelect(b%,|
00000610  6d 24 2c 62 75 74 25 29  0d 01 f4 0b c8 8e 20 6d  |m$,but%)...... m|
00000620  24 20 ca 0d 01 fe 28 20  20 c9 20 22 44 61 74 61  |$ ....(  . "Data|
00000630  2e 41 64 64 2e 49 6e 74  65 67 65 72 22 3a f2 61  |.Add.Integer":.a|
00000640  64 64 76 61 72 28 34 2c  31 30 29 0d 02 08 26 20  |ddvar(4,10)...& |
00000650  20 c9 20 22 44 61 74 61  2e 41 64 64 2e 46 6c 6f  | . "Data.Add.Flo|
00000660  61 74 22 3a f2 61 64 64  76 61 72 28 35 2c 31 32  |at":.addvar(5,12|
00000670  29 0d 02 12 27 20 20 c9  20 22 44 61 74 61 2e 41  |)...'  . "Data.A|
00000680  64 64 2e 44 6f 75 62 6c  65 22 3a f2 61 64 64 76  |dd.Double":.addv|
00000690  61 72 28 38 2c 32 36 29  0d 02 1c 21 20 20 c9 20  |ar(8,26)...!  . |
000006a0  22 44 61 74 61 2e 41 64  64 2e 53 74 72 69 6e 67  |"Data.Add.String|
000006b0  22 3a f2 61 64 64 73 74  72 0d 02 26 1d 20 20 c9  |":.addstr..&.  .|
000006c0  20 22 44 61 74 61 2e 44  65 6c 65 74 65 22 3a f2  | "Data.Delete":.|
000006d0  64 65 6c 76 61 72 0d 02  30 4c 20 20 c9 20 22 44  |delvar..0L  . "D|
000006e0  69 73 70 6c 61 79 2e 48  69 64 65 22 3a e7 20 21  |isplay.Hide":. !|
000006f0  66 77 62 20 f2 43 6c 6f  73 65 57 69 6e 28 21 66  |fwb .CloseWin(!f|
00000700  77 62 29 3a 21 66 77 62  3d a3 3a c8 99 22 57 69  |wb):!fwb=.:.."Wi|
00000710  6d 70 5f 53 65 74 4d 6f  64 65 22 2c 77 6d 6f 64  |mp_SetMode",wmod|
00000720  65 25 0d 02 3a 31 20 20  c9 20 22 44 69 73 70 6c  |e%..:1  . "Displ|
00000730  61 79 2e 50 72 65 76 69  6f 75 73 22 3a f2 67 65  |ay.Previous":.ge|
00000740  74 70 72 65 76 3a e7 20  21 66 77 62 20 f2 66 6f  |tprev:. !fwb .fo|
00000750  72 63 65 0d 02 44 3e 20  20 c9 20 22 44 69 73 70  |rce..D>  . "Disp|
00000760  6c 61 79 2e 4d 6f 64 65  2e 31 33 22 3a 64 6d 6f  |lay.Mode.13":dmo|
00000770  64 65 25 3d 31 33 3a e7  20 21 66 77 62 20 c8 99  |de%=13:. !fwb ..|
00000780  22 57 69 6d 70 5f 53 65  74 4d 6f 64 65 22 2c 31  |"Wimp_SetMode",1|
00000790  33 0d 02 4e 3e 20 20 c9  20 22 44 69 73 70 6c 61  |3..N>  . "Displa|
000007a0  79 2e 4d 6f 64 65 2e 31  35 22 3a 64 6d 6f 64 65  |y.Mode.15":dmode|
000007b0  25 3d 31 35 3a e7 20 21  66 77 62 20 c8 99 22 57  |%=15:. !fwb .."W|
000007c0  69 6d 70 5f 53 65 74 4d  6f 64 65 22 2c 31 35 0d  |imp_SetMode",15.|
000007d0  02 58 35 20 20 c9 20 22  45 66 66 65 63 74 73 2e  |.X5  . "Effects.|
000007e0  49 6e 76 65 72 74 22 3a  41 25 3d 73 70 25 3a d6  |Invert":A%=sp%:.|
000007f0  69 6e 76 65 72 74 3a e7  20 21 66 77 62 20 f2 66  |invert:. !fwb .f|
00000800  6f 72 63 65 0d 02 62 3b  20 20 c9 20 22 45 66 66  |orce..b;  . "Eff|
00000810  65 63 74 73 2e 47 72 65  79 22 3a f2 73 61 76 65  |ects.Grey":.save|
00000820  70 72 65 76 3a 41 25 3d  73 70 25 3a d6 67 72 65  |prev:A%=sp%:.gre|
00000830  79 3a e7 20 21 66 77 62  20 f2 66 6f 72 63 65 0d  |y:. !fwb .force.|
00000840  02 6c 3d 20 20 c9 20 22  45 66 66 65 63 74 73 2e  |.l=  . "Effects.|
00000850  42 20 26 20 57 22 3a f2  73 61 76 65 70 72 65 76  |B & W":.saveprev|
00000860  3a 41 25 3d 73 70 25 3a  d6 62 61 6e 64 77 3a e7  |:A%=sp%:.bandw:.|
00000870  20 21 66 77 62 20 f2 66  6f 72 63 65 0d 02 76 23  | !fwb .force..v#|
00000880  20 20 c9 20 22 45 66 66  65 63 74 73 2e 43 79 63  |  . "Effects.Cyc|
00000890  6c 65 20 38 22 3a f2 63  79 63 6c 65 28 38 29 0d  |le 8":.cycle(8).|
000008a0  02 80 23 20 20 c9 20 22  45 66 66 65 63 74 73 2e  |..#  . "Effects.|
000008b0  43 79 63 6c 65 20 31 22  3a f2 63 79 63 6c 65 28  |Cycle 1":.cycle(|
000008c0  31 29 0d 02 8a 27 20 20  c9 20 22 45 66 66 65 63  |1)...'  . "Effec|
000008d0  74 73 2e 41 6e 69 6d 61  74 65 20 31 22 3a f2 61  |ts.Animate 1":.a|
000008e0  6e 69 6d 61 74 65 28 31  29 0d 02 94 27 20 20 c9  |nimate(1)...'  .|
000008f0  20 22 45 66 66 65 63 74  73 2e 41 6e 69 6d 61 74  | "Effects.Animat|
00000900  65 20 32 22 3a f2 61 6e  69 6d 61 74 65 28 32 29  |e 2":.animate(2)|
00000910  0d 02 9e 2b 20 20 7f 3a  e7 20 c0 6d 24 2c 31 35  |...+  .:. .m$,15|
00000920  29 3d 22 44 61 74 61 2e  41 64 64 2e 53 74 72 69  |)="Data.Add.Stri|
00000930  6e 67 22 20 f2 61 64 64  73 74 72 0d 02 a8 05 cb  |ng" .addstr.....|
00000940  0d 02 b2 15 e7 20 62 75  74 25 3d 31 20 f2 6d 65  |..... but%=1 .me|
00000950  6e 75 28 30 29 0d 02 bc  05 e1 0d 02 c6 04 0d 02  |nu(0)...........|
00000960  d0 11 dd f2 75 73 65 72  6d 73 67 28 62 25 29 0d  |....usermsg(b%).|
00000970  02 da 0d 6d 63 25 3d 62  25 21 31 36 0d 02 e4 0c  |...mc%=b%!16....|
00000980  c8 8e 20 6d 63 25 20 ca  0d 02 ee 10 c9 20 30 3a  |.. mc% ...... 0:|
00000990  f2 57 69 6d 70 45 6e 64  0d 02 f8 12 c9 20 32 3a  |.WimpEnd..... 2:|
000009a0  f2 64 6f 73 61 76 65 28  b9 29 0d 03 02 0f c9 20  |.dosave(.)..... |
000009b0  33 3a f2 64 6f 6c 6f 61  64 0d 03 0c 05 cb 0d 03  |3:.doload.......|
000009c0  16 05 e1 0d 03 20 04 0d  03 2a 32 dd f2 43 68 65  |..... ...*2..Che|
000009d0  63 6b 4d 6f 75 73 65 28  6d 6f 75 73 65 78 25 2c  |ckMouse(mousex%,|
000009e0  6d 6f 75 73 65 79 25 2c  42 25 2c 68 61 6e 64 6c  |mousey%,B%,handl|
000009f0  65 25 2c 69 63 6f 6e 25  29 0d 03 34 0b 62 75 74  |e%,icon%)..4.but|
00000a00  25 3d 42 25 0d 03 3e 24  e7 20 28 62 75 74 25 80  |%=B%..>$. (but%.|
00000a10  32 29 20 80 20 68 61 6e  64 6c 65 25 3d 2d 32 20  |2) . handle%=-2 |
00000a20  f2 6d 65 6e 75 28 30 29  0d 03 48 26 e7 20 28 62  |.menu(0)..H&. (b|
00000a30  75 74 25 80 32 29 20 80  20 68 61 6e 64 6c 65 25  |ut%.2) . handle%|
00000a40  3d 21 66 77 62 20 f2 6d  65 6e 75 28 31 29 0d 03  |=!fwb .menu(1)..|
00000a50  52 24 e7 20 28 62 75 74  25 80 34 29 20 80 20 68  |R$. (but%.4) . h|
00000a60  61 6e 64 6c 65 25 3d 2d  32 20 f2 64 69 73 70 73  |andle%=-2 .disps|
00000a70  70 72 0d 03 5c 37 e7 20  28 62 75 74 25 80 26 35  |pr..\7. (but%.&5|
00000a80  30 29 20 80 20 68 61 6e  64 6c 65 25 3d 53 61 76  |0) . handle%=Sav|
00000a90  65 41 73 25 20 80 20 69  63 6f 6e 25 3d 30 20 f2  |eAs% . icon%=0 .|
00000aa0  57 69 6d 70 53 53 61 76  65 0d 03 66 35 e7 20 28  |WimpSSave..f5. (|
00000ab0  62 75 74 25 80 35 29 20  80 20 68 61 6e 64 6c 65  |but%.5) . handle|
00000ac0  25 3d 53 61 76 65 41 73  25 20 80 20 69 63 6f 6e  |%=SaveAs% . icon|
00000ad0  25 3d 32 20 f2 64 6f 73  61 76 65 28 a3 29 0d 03  |%=2 .dosave(.)..|
00000ae0  70 05 e1 0d 03 7a 04 0d  03 84 0e dd f2 6d 65 6e  |p....z.......men|
00000af0  75 28 68 25 29 0d 03 8e  42 e7 20 73 61 25 20 50  |u(h%)...B. sa% P|
00000b00  67 6d 25 3d a4 57 69 6d  70 4d 65 6e 75 28 2d 31  |gm%=.WimpMenu(-1|
00000b10  2c 22 24 70 67 6d 6e 28  31 32 29 22 2c 22 50 72  |,"$pgmn(12)","Pr|
00000b20  6f 67 72 61 6d 20 4e 61  6d 65 3a 22 29 20 8b 20  |ogram Name:") . |
00000b30  50 67 6d 25 3d 2d 31 0d  03 98 2e 53 74 72 6c 65  |Pgm%=-1....Strle|
00000b40  6e 25 3d a4 57 69 6d 70  4d 65 6e 75 28 2d 31 2c  |n%=.WimpMenu(-1,|
00000b50  22 24 73 74 72 6c 65 6e  28 34 29 22 2c 22 20 4c  |"$strlen(4)"," L|
00000b60  65 6e 3a 22 29 0d 03 a2  53 e7 20 73 61 25 20 41  |en:")...S. sa% A|
00000b70  64 64 25 3d a4 57 69 6d  70 4d 65 6e 75 28 2d 31  |dd%=.WimpMenu(-1|
00000b80  2c 22 49 6e 74 65 67 65  72 2c 46 6c 6f 61 74 2c  |,"Integer,Float,|
00000b90  44 6f 75 62 6c 65 2c 53  74 72 69 6e 67 3e 53 74  |Double,String>St|
00000ba0  72 6c 65 6e 25 22 2c 22  41 64 64 3a 22 29 20 8b  |rlen%","Add:") .|
00000bb0  20 41 64 64 25 3d 2d 31  0d 03 ac 4e 44 61 74 61  | Add%=-1...NData|
00000bc0  25 3d a4 57 69 6d 70 4d  65 6e 75 28 2d 31 2c 22  |%=.WimpMenu(-1,"|
00000bd0  50 72 6f 67 72 61 6d 3e  50 67 6d 25 2c 56 61 72  |Program>Pgm%,Var|
00000be0  69 61 62 6c 65 73 3e 56  61 72 73 25 2c 41 64 64  |iables>Vars%,Add|
00000bf0  3e 41 64 64 25 2c 44 65  6c 65 74 65 22 2c 22 44  |>Add%,Delete","D|
00000c00  61 74 61 3a 22 29 0d 03  b6 5b 4d 6f 64 65 25 3d  |ata:")...[Mode%=|
00000c10  a4 57 69 6d 70 4d 65 6e  75 28 2d 31 2c 22 31 33  |.WimpMenu(-1,"13|
00000c20  2c 31 35 22 2c 22 4d 6f  64 65 3a 22 29 3a e7 20  |,15","Mode:"):. |
00000c30  64 6d 6f 64 65 25 3d 31  33 20 f2 57 69 6d 70 54  |dmode%=13 .WimpT|
00000c40  69 63 6b 28 4d 6f 64 65  25 2c 30 29 20 8b 20 f2  |ick(Mode%,0) . .|
00000c50  57 69 6d 70 54 69 63 6b  28 4d 6f 64 65 25 2c 31  |WimpTick(Mode%,1|
00000c60  29 0d 03 c0 54 e7 20 73  61 25 20 44 69 73 70 6c  |)...T. sa% Displ|
00000c70  61 79 25 3d a4 57 69 6d  70 4d 65 6e 75 28 2d 31  |ay%=.WimpMenu(-1|
00000c80  2c 22 48 69 64 65 2c 50  72 65 76 69 6f 75 73 2c  |,"Hide,Previous,|
00000c90  4d 6f 64 65 3e 4d 6f 64  65 25 22 2c 22 44 69 73  |Mode>Mode%","Dis|
00000ca0  70 6c 61 79 3a 22 29 20  8b 20 44 69 73 70 6c 61  |play:") . Displa|
00000cb0  79 25 3d 2d 31 0d 03 ca  71 e7 20 73 61 25 20 45  |y%=-1...q. sa% E|
00000cc0  66 66 65 63 74 73 25 3d  a4 57 69 6d 70 4d 65 6e  |ffects%=.WimpMen|
00000cd0  75 28 2d 31 2c 22 49 6e  76 65 72 74 2c 47 72 65  |u(-1,"Invert,Gre|
00000ce0  79 2c 42 20 26 20 57 2c  43 79 63 6c 65 20 38 2c  |y,B & W,Cycle 8,|
00000cf0  43 79 63 6c 65 20 31 2c  41 6e 69 6d 61 74 65 20  |Cycle 1,Animate |
00000d00  31 2c 41 6e 69 6d 61 74  65 20 32 22 2c 22 45 66  |1,Animate 2","Ef|
00000d10  66 65 63 74 73 3a 22 29  20 8b 20 45 66 66 65 63  |fects:") . Effec|
00000d20  74 73 25 3d 2d 31 0d 03  d4 66 5a 25 3d a4 57 69  |ts%=-1...fZ%=.Wi|
00000d30  6d 70 4d 65 6e 75 28 68  25 2c 22 49 6e 66 6f 3e  |mpMenu(h%,"Info>|
00000d40  49 6e 66 6f 25 2c 44 61  74 61 3e 44 61 74 61 25  |Info%,Data>Data%|
00000d50  2c 44 69 73 70 6c 61 79  3e 44 69 73 70 6c 61 79  |,Display>Display|
00000d60  25 2c 45 66 66 65 63 74  73 3e 45 66 66 65 63 74  |%,Effects>Effect|
00000d70  73 25 2c 53 61 76 65 3e  53 61 76 65 77 25 2c 51  |s%,Save>Savew%,Q|
00000d80  75 69 74 22 2c 74 61 73  6b 6e 24 29 0d 03 de 05  |uit",taskn$)....|
00000d90  e1 0d 03 e8 04 0d 03 f2  0a dd f2 73 61 76 65 0d  |...........save.|
00000da0  03 fc 31 66 6e 24 3d a4  4c 65 61 66 28 a4 47 65  |..1fn$=.Leaf(.Ge|
00000db0  74 53 74 72 28 66 6e 25  29 29 3a f2 57 69 6d 70  |tStr(fn%)):.Wimp|
00000dc0  44 6f 53 61 76 65 28 66  6e 24 2c 26 46 46 39 29  |DoSave(fn$,&FF9)|
00000dd0  0d 04 06 05 e1 0d 04 10  04 0d 04 1a 10 dd f2 64  |...............d|
00000de0  6f 73 61 76 65 28 44 25  29 0d 04 24 37 e7 20 44  |osave(D%)..$7. D|
00000df0  25 20 66 6e 24 3d a4 47  65 74 53 74 72 28 62 25  |% fn$=.GetStr(b%|
00000e00  2b 34 34 29 3a 24 66 6e  25 3d 66 6e 24 20 8b 20  |+44):$fn%=fn$ . |
00000e10  66 6e 24 3d a4 47 65 74  53 74 72 28 66 6e 25 29  |fn$=.GetStr(fn%)|
00000e20  0d 04 2e 56 e7 20 a7 66  6e 24 2c 22 2e 22 29 3d  |...V. .fn$,".")=|
00000e30  30 20 5a 25 3d a4 57 69  6d 70 45 72 72 28 22 54  |0 Z%=.WimpErr("T|
00000e40  6f 20 73 61 76 65 2c 20  64 72 61 67 20 74 68 65  |o save, drag the|
00000e50  20 73 70 72 69 74 65 20  69 63 6f 6e 20 74 6f 20  | sprite icon to |
00000e60  61 20 64 69 72 65 63 74  6f 72 79 20 76 69 65 77  |a directory view|
00000e70  65 72 22 29 3a e1 0d 04  38 0b f2 70 75 74 76 61  |er"):...8..putva|
00000e80  72 0d 04 42 1c ea 85 3a  ee 85 ea 3a 5a 25 3d a4  |r..B...:...:Z%=.|
00000e90  57 69 6d 70 45 72 72 28  f6 24 29 3a e1 0d 04 4c  |WimpErr(.$):...L|
00000ea0  20 c8 99 22 4f 53 5f 53  70 72 69 74 65 4f 70 22  | .."OS_SpriteOp"|
00000eb0  2c 26 31 30 43 2c 73 61  25 2c 66 6e 24 0d 04 56  |,&10C,sa%,fn$..V|
00000ec0  06 f7 85 0d 04 60 15 e7  20 44 25 20 f2 57 69 6d  |.....`.. D% .Wim|
00000ed0  70 41 63 6b 53 61 76 65  0d 04 6a 17 e7 20 62 75  |pAckSave..j.. bu|
00000ee0  74 25 80 26 34 34 20 f2  57 69 6d 70 43 6c 4d 0d  |t%.&44 .WimpClM.|
00000ef0  04 74 05 e1 0d 04 7e 0c  dd f2 70 75 74 76 61 72  |.t....~...putvar|
00000f00  0d 04 88 35 f2 50 75 74  53 74 72 28 24 70 67 6d  |...5.PutStr($pgm|
00000f10  6e 2c 73 61 25 2b 32 30  29 3a 73 61 25 3f 33 32  |n,sa%+20):sa%?32|
00000f20  3d 6e 75 6d 76 25 3a 70  25 3d 73 61 25 2b 33 33  |=numv%:p%=sa%+33|
00000f30  3a 76 25 3d 30 0d 04 92  0f c8 95 20 76 25 3c 6e  |:v%=0...... v%<n|
00000f40  75 6d 76 25 0d 04 9c 1e  20 20 76 25 2b 3d 31 3a  |umv%....  v%+=1:|
00000f50  3f 70 25 3d 56 25 28 76  25 2c 30 29 3a 70 25 2b  |?p%=V%(v%,0):p%+|
00000f60  3d 31 0d 04 a6 05 ce 0d  04 b0 15 70 25 3d 28 70  |=1.........p%=(p|
00000f70  25 2b 33 29 80 2d 34 3a  76 25 3d 30 0d 04 ba 0f  |%+3).-4:v%=0....|
00000f80  c8 95 20 76 25 3c 6e 75  6d 76 25 0d 04 c4 20 20  |.. v%<numv%...  |
00000f90  20 76 25 2b 3d 31 3a 56  24 3d a4 47 65 74 53 74  | v%+=1:V$=.GetSt|
00000fa0  72 28 56 25 28 76 25 2c  31 29 29 0d 04 ce 13 20  |r(V%(v%,1)).... |
00000fb0  20 c8 8e 20 56 25 28 76  25 2c 30 29 20 ca 0d 04  | .. V%(v%,0) ...|
00000fc0  d8 1b 20 20 20 20 c9 20  34 3a 21 70 25 3d bb 28  |..    . 4:!p%=.(|
00000fd0  56 24 29 3a 70 25 2b 3d  34 0d 04 e2 1b 20 20 20  |V$):p%+=4....   |
00000fe0  20 c9 20 35 3a 7c 70 25  3d bb 28 56 24 29 3a 70  | . 5:|p%=.(V$):p|
00000ff0  25 2b 3d 38 0d 04 ec 13  20 20 20 20 c9 20 38 3a  |%+=8....    . 8:|
00001000  f2 73 74 72 64 62 6c 0d  04 f6 46 20 20 20 20 7f  |.strdbl...F    .|
00001010  3a 4c 25 3d 56 25 28 76  25 2c 30 29 80 26 37 46  |:L%=V%(v%,0).&7F|
00001020  3a f2 50 75 74 53 74 72  28 a4 47 65 74 53 74 72  |:.PutStr(.GetStr|
00001030  28 56 25 28 76 25 2c 31  29 29 2c 70 25 29 3a 70  |(V%(v%,1)),p%):p|
00001040  25 2b 3d 28 4c 25 2b 33  29 80 26 46 43 0d 05 00  |%+=(L%+3).&FC...|
00001050  07 20 20 cb 0d 05 0a 05  ce 0d 05 14 05 e1 0d 05  |.  .............|
00001060  1e 0c dd f2 73 74 72 64  62 6c 0d 05 28 14 e7 20  |....strdbl..(.. |
00001070  bb 28 56 24 29 3d 30 20  56 24 3d 22 30 22 0d 05  |.(V$)=0 V$="0"..|
00001080  32 12 e3 20 41 25 3d 30  20 b8 20 32 20 88 20 32  |2.. A%=0 . 2 . 2|
00001090  0d 05 3c 0c 50 25 3d 63  6f 6e 76 25 0d 05 46 0b  |..<.P%=conv%..F.|
000010a0  5b 4f 50 54 20 41 25 0d  05 50 17 a4 66 70 28 22  |[OPT A%..P..fp("|
000010b0  4c 44 46 50 20 46 30 2c  73 74 72 64 22 29 0d 05  |LDFP F0,strd")..|
000010c0  5a 17 a4 66 70 28 22 53  54 46 44 20 46 30 2c 5b  |Z..fp("STFD F0,[|
000010d0  52 30 5d 22 29 0d 05 64  0e 4d 4f 56 20 50 43 2c  |R0]")..d.MOV PC,|
000010e0  52 31 34 0d 05 6e 18 2e  73 74 72 64 20 a4 66 70  |R14..n..strd .fp|
000010f0  28 22 44 46 50 20 22 2b  56 24 29 0d 05 78 07 5d  |("DFP "+V$)..x.]|
00001100  3a ed 0d 05 82 10 41 25  3d 70 25 3a d6 63 6f 6e  |:.....A%=p%:.con|
00001110  76 25 0d 05 8c 09 70 25  2b 3d 38 0d 05 96 05 e1  |v%....p%+=8.....|
00001120  0d 05 a0 04 0d 05 aa 0c  dd f2 64 6f 6c 6f 61 64  |..........doload|
00001130  0d 05 b4 1f 66 6e 24 3d  a4 47 65 74 53 74 72 28  |....fn$=.GetStr(|
00001140  62 25 2b 34 34 29 3a 69  25 3d 62 25 21 34 30 0d  |b%+44):i%=b%!40.|
00001150  05 be 10 e7 20 69 25 3c  3e 26 46 46 39 20 e1 0d  |.... i%<>&FF9 ..|
00001160  05 c8 25 e7 20 56 61 72  73 25 3e 30 20 f2 44 65  |..%. Vars%>0 .De|
00001170  6c 57 69 6e 28 56 61 72  73 25 29 3a 56 61 72 73  |lWin(Vars%):Vars|
00001180  25 3d 2d 31 0d 05 d2 1c  53 61 76 65 77 25 3d 2d  |%=-1....Savew%=-|
00001190  31 3a 24 66 6e 25 3d 66  6e 24 3a 73 61 25 3d a3  |1:$fn%=fn$:sa%=.|
000011a0  0d 05 dc 1e 66 68 25 3d  8e 28 66 6e 24 29 3a 66  |....fh%=.(fn$):f|
000011b0  6c 25 3d a2 23 66 68 25  3a d9 23 66 68 25 0d 05  |l%=.#fh%:.#fh%..|
000011c0  e6 24 c8 99 22 57 69 6d  70 5f 53 6c 6f 74 53 69  |.$.."Wimp_SlotSi|
000011d0  7a 65 22 2c 73 6c 6f 74  25 2c b9 20 b8 20 2c 2c  |ze",slot%,. . ,,|
000011e0  46 25 0d 05 f0 3d e7 20  46 25 3c 28 66 6c 25 2b  |F%...=. F%<(fl%+|
000011f0  32 30 34 38 29 20 5a 25  3d a4 57 69 6d 70 45 72  |2048) Z%=.WimpEr|
00001200  72 28 22 49 6e 73 75 66  66 69 63 69 65 6e 74 20  |r("Insufficient |
00001210  46 72 65 65 20 4d 65 6d  6f 72 79 22 29 3a e1 0d  |Free Memory"):..|
00001220  05 fa 11 73 61 6c 25 3d  66 6c 25 2b 32 30 34 38  |...sal%=fl%+2048|
00001230  0d 06 04 3b c8 99 22 57  69 6d 70 5f 53 6c 6f 74  |...;.."Wimp_Slot|
00001240  53 69 7a 65 22 2c 73 6c  6f 74 25 2b 73 61 6c 25  |Size",slot%+sal%|
00001250  2b 73 61 6c 25 2c b9 3a  73 61 25 3d 93 3a 73 61  |+sal%,.:sa%=.:sa|
00001260  32 25 3d 73 61 25 2b 73  61 6c 25 0d 06 0e 2a 21  |2%=sa%+sal%...*!|
00001270  73 61 25 3d 73 61 6c 25  3a c8 99 22 4f 53 5f 53  |sa%=sal%:.."OS_S|
00001280  70 72 69 74 65 4f 70 22  2c 26 31 30 41 2c 73 61  |priteOp",&10A,sa|
00001290  25 2c 66 6e 24 0d 06 18  61 73 70 25 3d 73 61 25  |%,fn$...asp%=sa%|
000012a0  21 38 2b 73 61 25 3a e7  20 73 70 25 21 34 30 3d  |!8+sa%:. sp%!40=|
000012b0  31 33 20 84 20 73 70 25  21 34 30 3d 31 35 20 8c  |13 . sp%!40=15 .|
000012c0  20 8b 20 4b 25 3d a4 57  69 6d 70 45 72 72 28 22  | . K%=.WimpErr("|
000012d0  4f 6e 6c 79 20 4d 6f 64  65 20 31 33 20 26 20 31  |Only Mode 13 & 1|
000012e0  35 20 53 70 72 69 74 65  73 20 41 63 63 65 70 74  |5 Sprites Accept|
000012f0  65 64 22 29 3a e1 0d 06  22 19 e7 20 73 61 25 21  |ed"):...".. sa%!|
00001300  31 36 3c 3e 26 33 31 34  37 34 36 34 31 20 8c 0d  |16<>&31474641 ..|
00001310  06 2c 3c 20 20 4b 25 3d  a4 57 69 6d 70 45 72 72  |.,<  K%=.WimpErr|
00001320  28 22 4e 6f 74 20 41 6e  20 41 46 47 20 53 70 72  |("Not An AFG Spr|
00001330  69 74 65 2e 20 43 6c 69  63 6b 20 4f 4b 20 74 6f  |ite. Click OK to|
00001340  20 63 6f 6e 76 65 72 74  2e 22 29 0d 06 36 60 20  | convert.")..6` |
00001350  20 e7 20 4b 25 3d 32 20  73 61 25 3d a3 3a c8 99  | . K%=2 sa%=.:..|
00001360  22 57 69 6d 70 5f 53 6c  6f 74 53 69 7a 65 22 2c  |"Wimp_SlotSize",|
00001370  73 6c 6f 74 25 2c b9 3a  e1 20 8b 20 f2 6d 6f 76  |slot%,.:. . .mov|
00001380  65 73 70 72 28 32 30 29  3a 24 28 73 61 25 2b 31  |espr(20):$(sa%+1|
00001390  36 29 3d 22 41 46 47 31  22 3a 73 61 25 3f 32 30  |6)="AFG1":sa%?20|
000013a0  3d 30 3a 73 61 25 3f 33  32 3d 30 0d 06 40 05 cd  |=0:sa%?32=0..@..|
000013b0  0d 06 4a 24 f2 67 65 74  76 61 72 3a f2 73 61 76  |..J$.getvar:.sav|
000013c0  65 70 72 65 76 3a 53 61  76 65 77 25 3d 53 61 76  |eprev:Savew%=Sav|
000013d0  65 41 73 25 0d 06 54 05  e1 0d 06 5e 0c dd f2 67  |eAs%..T....^...g|
000013e0  65 74 76 61 72 0d 06 68  25 e7 20 56 61 72 73 25  |etvar..h%. Vars%|
000013f0  3e 30 20 f2 44 65 6c 57  69 6e 28 56 61 72 73 25  |>0 .DelWin(Vars%|
00001400  29 3a 56 61 72 73 25 3d  2d 31 0d 06 72 42 24 70  |):Vars%=-1..rB$p|
00001410  67 6d 6e 3d a4 47 65 74  53 74 72 28 73 61 25 2b  |gmn=.GetStr(sa%+|
00001420  32 30 29 3a 6e 75 6d 76  25 3d 73 61 25 3f 33 32  |20):numv%=sa%?32|
00001430  3a 76 25 3d 30 3a 70 25  3d 73 61 25 2b 33 33 3a  |:v%=0:p%=sa%+33:|
00001440  64 61 74 61 70 25 3d 64  61 74 61 25 0d 06 7c 0f  |datap%=data%..|.|
00001450  c8 95 20 76 25 3c 6e 75  6d 76 25 0d 06 86 1e 20  |.. v%<numv%.... |
00001460  20 76 25 2b 3d 31 3a 56  25 28 76 25 2c 30 29 3d  | v%+=1:V%(v%,0)=|
00001470  3f 70 25 3a 70 25 2b 3d  31 0d 06 90 05 ce 0d 06  |?p%:p%+=1.......|
00001480  9a 4c 70 25 3d 28 70 25  2b 33 29 80 2d 34 3a 56  |.Lp%=(p%+3).-4:V|
00001490  61 72 77 25 21 34 34 3d  2d 28 6e 75 6d 76 25 2b  |arw%!44=-(numv%+|
000014a0  31 29 2a 35 32 3a 56 61  72 77 25 21 38 34 3d 31  |1)*52:Varw%!84=1|
000014b0  3a 69 63 25 3d 56 61 72  77 25 2b 31 32 30 3a 72  |:ic%=Varw%+120:r|
000014c0  25 3d 69 63 25 21 39 36  2b 38 0d 06 a4 0e 6d 72  |%=ic%!96+8....mr|
000014d0  25 3d 72 25 2b 31 31 32  0d 06 ae 14 76 25 3d 30  |%=r%+112....v%=0|
000014e0  3a c8 95 20 76 25 3c 6e  75 6d 76 25 0d 06 b8 1b  |:.. v%<numv%....|
000014f0  20 20 76 25 2b 3d 31 3a  56 25 28 76 25 2c 31 29  |  v%+=1:V%(v%,1)|
00001500  3d 64 61 74 61 70 25 0d  06 c2 13 20 20 c8 8e 20  |=datap%....  .. |
00001510  56 25 28 76 25 2c 30 29  20 ca 0d 06 cc 61 20 20  |V%(v%,0) ....a  |
00001520  20 20 c9 20 34 3a 24 64  61 74 61 70 25 3d c3 28  |  . 4:$datap%=.(|
00001530  21 70 25 29 3a 70 25 2b  3d 34 3a 24 28 69 63 25  |!p%):p%+=4:$(ic%|
00001540  2b 35 32 29 3d 22 49 22  3a 69 63 25 21 31 30 34  |+52)="I":ic%!104|
00001550  3d 31 36 30 2b 72 25 3a  69 63 25 21 31 32 30 3d  |=160+r%:ic%!120=|
00001560  76 69 6e 74 25 3a 69 63  25 21 31 32 34 3d 31 30  |vint%:ic%!124=10|
00001570  3a 64 61 74 61 70 25 2b  3d 31 30 0d 06 d6 61 20  |:datap%+=10...a |
00001580  20 20 20 c9 20 35 3a 24  64 61 74 61 70 25 3d c3  |   . 5:$datap%=.|
00001590  28 7c 70 25 29 3a 70 25  2b 3d 38 3a 24 28 69 63  |(|p%):p%+=8:$(ic|
000015a0  25 2b 35 32 29 3d 22 46  22 3a 69 63 25 21 31 30  |%+52)="F":ic%!10|
000015b0  34 3d 31 39 32 2b 72 25  3a 69 63 25 21 31 32 30  |4=192+r%:ic%!120|
000015c0  3d 76 66 6c 74 25 3a 69  63 25 21 31 32 34 3d 31  |=vflt%:ic%!124=1|
000015d0  32 3a 64 61 74 61 70 25  2b 3d 31 32 0d 06 e0 63  |2:datap%+=12...c|
000015e0  20 20 20 20 c9 20 38 3a  f2 64 73 74 72 28 70 25  |    . 8:.dstr(p%|
000015f0  2c 64 61 74 61 70 25 29  3a 70 25 2b 3d 38 3a 24  |,datap%):p%+=8:$|
00001600  28 69 63 25 2b 35 32 29  3d 22 44 22 3a 69 63 25  |(ic%+52)="D":ic%|
00001610  21 31 30 34 3d 34 30 30  2b 72 25 3a 69 63 25 21  |!104=400+r%:ic%!|
00001620  31 32 30 3d 76 66 6c 74  25 3a 69 63 25 21 31 32  |120=vflt%:ic%!12|
00001630  34 3d 32 36 3a 64 61 74  61 70 25 2b 3d 32 36 0d  |4=26:datap%+=26.|
00001640  06 ea 1b 20 20 20 20 7f  3a e7 20 56 25 28 76 25  |...    .:. V%(v%|
00001650  2c 30 29 80 20 26 38 30  20 8c 0d 06 f4 55 20 20  |,0). &80 ....U  |
00001660  20 20 20 20 4c 25 3d 56  25 28 76 25 2c 30 29 80  |    L%=V%(v%,0).|
00001670  26 37 46 3a 24 64 61 74  61 70 25 3d a4 47 65 74  |&7F:$datap%=.Get|
00001680  53 74 72 28 70 25 29 3a  64 61 74 61 70 25 2b 3d  |Str(p%):datap%+=|
00001690  4c 25 3a 70 25 2b 3d 28  4c 25 2b 33 29 80 26 46  |L%:p%+=(L%+3).&F|
000016a0  43 3a 24 28 69 63 25 2b  35 32 29 3d 22 53 22 0d  |C:$(ic%+52)="S".|
000016b0  06 fe 35 20 20 20 20 20  20 e7 20 4c 25 3c 36 35  |..5      . L%<65|
000016c0  20 69 63 25 21 31 30 34  3d 4c 25 2a 31 36 2b 72  | ic%!104=L%*16+r|
000016d0  25 20 8b 20 69 63 25 21  31 30 34 3d 36 35 2a 31  |% . ic%!104=65*1|
000016e0  36 2b 72 25 0d 07 08 1f  20 20 20 20 20 20 69 63  |6+r%....      ic|
000016f0  25 21 31 32 30 3d 2d 31  3a 69 63 25 21 31 32 34  |%!120=-1:ic%!124|
00001700  3d 4c 25 0d 07 12 09 20  20 20 20 cd 0d 07 1c 07  |=L%....    .....|
00001710  20 20 cb 0d 07 26 3b 20  20 56 61 72 77 25 21 38  |  ...&;  Varw%!8|
00001720  34 2b 3d 34 3a 24 28 69  63 25 2b 32 30 29 3d c3  |4+=4:$(ic%+20)=.|
00001730  28 76 25 29 3a 24 28 69  63 25 2b 38 34 29 3d c3  |(v%):$(ic%+84)=.|
00001740  28 56 25 28 76 25 2c 30  29 80 26 37 46 29 0d 07  |(V%(v%,0).&7F)..|
00001750  30 30 20 20 69 63 25 21  31 31 36 3d 56 25 28 76  |00  ic%!116=V%(v|
00001760  25 2c 31 29 3a e7 20 69  63 25 21 31 30 34 3e 6d  |%,1):. ic%!104>m|
00001770  72 25 20 6d 72 25 3d 69  63 25 21 31 30 34 0d 07  |r% mr%=ic%!104..|
00001780  3a 25 20 20 f2 6d 6f 76  65 28 69 63 25 2c 69 63  |:%  .move(ic%,ic|
00001790  25 2b 31 32 38 2c 31 32  38 29 3a 69 63 25 2b 3d  |%+128,128):ic%+=|
000017a0  31 32 38 0d 07 44 30 20  20 e3 20 5a 25 3d 69 63  |128..D0  . Z%=ic|
000017b0  25 20 b8 20 69 63 25 2b  39 36 20 88 33 32 3a 5a  |% . ic%+96 .32:Z|
000017c0  25 21 34 2d 3d 35 32 3a  5a 25 21 31 32 2d 3d 35  |%!4-=52:Z%!12-=5|
000017d0  32 3a ed 0d 07 4e 05 ce  0d 07 58 34 56 61 72 77  |2:...N....X4Varw|
000017e0  25 21 34 38 3d 6d 72 25  2b 38 3a 56 61 72 77 25  |%!48=mr%+8:Varw%|
000017f0  21 39 36 3d 6d 72 25 3a  56 61 72 73 25 3d a4 57  |!96=mr%:Vars%=.W|
00001800  69 6d 70 43 57 28 56 61  72 77 25 29 0d 07 62 05  |impCW(Varw%)..b.|
00001810  e1 0d 07 6c 04 0d 07 76  0c dd f2 61 64 64 73 74  |...l...v...addst|
00001820  72 0d 07 80 2e 5a 25 3d  bb 28 24 73 74 72 6c 65  |r....Z%=.($strle|
00001830  6e 29 3a e7 20 5a 25 3e  31 32 37 20 5a 25 3d 31  |n):. Z%>127 Z%=1|
00001840  32 37 20 8b e7 20 5a 25  3c 31 20 5a 25 3d 31 0d  |27 .. Z%<1 Z%=1.|
00001850  07 8a 16 f2 61 64 64 76  61 72 28 5a 25 2b 26 38  |....addvar(Z%+&8|
00001860  30 2c 5a 25 29 0d 07 94  05 e1 0d 07 9e 13 dd f2  |0,Z%)...........|
00001870  61 64 64 76 61 72 28 54  25 2c 44 25 29 0d 07 a8  |addvar(T%,D%)...|
00001880  43 6e 75 6d 76 25 2b 3d  31 3a 56 25 28 6e 75 6d  |Cnumv%+=1:V%(num|
00001890  76 25 2c 30 29 3d 54 25  3a 56 25 28 6e 75 6d 76  |v%,0)=T%:V%(numv|
000018a0  25 2c 31 29 3d 64 61 74  61 70 25 3a 3f 64 61 74  |%,1)=datap%:?dat|
000018b0  61 70 25 3d 30 3a 64 61  74 61 70 25 2b 3d 44 25  |ap%=0:datap%+=D%|
000018c0  0d 07 b2 2b 54 25 3d 28  28 54 25 80 26 37 46 29  |...+T%=((T%.&7F)|
000018d0  2b 33 29 80 26 46 43 3a  e7 20 28 6e 75 6d 76 25  |+3).&FC:. (numv%|
000018e0  80 33 29 3d 30 20 54 25  2b 3d 34 0d 07 bc 20 f2  |.3)=0 T%+=4... .|
000018f0  6d 6f 76 65 73 70 72 28  54 25 29 3a f2 70 75 74  |movespr(T%):.put|
00001900  76 61 72 3a f2 67 65 74  76 61 72 0d 07 c6 05 e1  |var:.getvar.....|
00001910  0d 07 d0 04 0d 07 da 0c  dd f2 64 65 6c 76 61 72  |..........delvar|
00001920  0d 07 e4 0f e7 20 6e 75  6d 76 25 3d 30 20 e1 0d  |..... numv%=0 ..|
00001930  07 ee 3c 4b 25 3d a4 57  69 6d 70 45 72 72 28 22  |..<K%=.WimpErr("|
00001940  43 6c 69 63 6b 20 4f 4b  20 74 6f 20 64 65 6c 65  |Click OK to dele|
00001950  74 65 20 6c 61 73 74 20  76 61 72 69 61 62 6c 65  |te last variable|
00001960  22 29 3a e7 20 4b 25 3d  32 20 e1 0d 07 f8 1a 4c  |"):. K%=2 .....L|
00001970  25 3d 30 3a e7 20 6e 75  6d 76 25 80 33 3d 30 20  |%=0:. numv%.3=0 |
00001980  4c 25 2d 3d 34 0d 08 02  14 c8 8e 20 56 25 28 6e  |L%-=4...... V%(n|
00001990  75 6d 76 25 2c 30 29 20  ca 0d 08 0c 0f 20 20 c9  |umv%,0) .....  .|
000019a0  20 34 3a 4c 25 2d 3d 34  0d 08 16 0f 20 20 c9 20  | 4:L%-=4....  . |
000019b0  35 3a 4c 25 2d 3d 38 0d  08 20 0f 20 20 c9 20 38  |5:L%-=8.. .  . 8|
000019c0  3a 4c 25 2d 3d 38 0d 08  2a 25 20 20 7f 20 4c 25  |:L%-=8..*%  . L%|
000019d0  2d 3d 28 28 56 25 28 6e  75 6d 76 25 2c 30 29 80  |-=((V%(numv%,0).|
000019e0  26 37 46 29 2b 33 29 80  26 46 43 0d 08 34 05 cb  |&7F)+3).&FC..4..|
000019f0  0d 08 3e 19 6e 75 6d 76  25 2d 3d 31 3a f2 6d 6f  |..>.numv%-=1:.mo|
00001a00  76 65 73 70 72 28 4c 25  29 0d 08 48 13 f2 70 75  |vespr(L%)..H..pu|
00001a10  74 76 61 72 3a f2 67 65  74 76 61 72 0d 08 52 05  |tvar:.getvar..R.|
00001a20  e1 0d 08 5c 04 0d 08 66  1f f4 20 4d 6f 76 65 20  |...\...f.. Move |
00001a30  53 70 72 69 74 65 20 75  70 28 2b 29 2f 64 6f 77  |Sprite up(+)/dow|
00001a40  6e 28 2d 29 0d 08 70 11  dd f2 6d 6f 76 65 73 70  |n(-)..p...movesp|
00001a50  72 28 6e 25 29 0d 08 7a  2f 41 25 3d 73 70 25 3a  |r(n%)..z/A%=sp%:|
00001a60  42 25 3d 73 70 25 2b 6e  25 3a 43 25 3d 73 61 6c  |B%=sp%+n%:C%=sal|
00001a70  25 2d 28 73 70 25 2d 73  61 25 29 2d 6e 25 3a d6  |%-(sp%-sa%)-n%:.|
00001a80  6d 6f 76 65 0d 08 84 20  73 70 25 2b 3d 6e 25 3a  |move... sp%+=n%:|
00001a90  73 61 25 21 38 2b 3d 6e  25 3a 73 61 25 21 31 32  |sa%!8+=n%:sa%!12|
00001aa0  2b 3d 6e 25 0d 08 8e 05  e1 0d 08 98 16 f4 20 44  |+=n%.......... D|
00001ab0  6f 75 62 6c 65 20 74 6f  20 73 74 72 69 6e 67 0d  |ouble to string.|
00001ac0  08 a2 1d dd f2 64 73 74  72 28 41 25 2c 42 25 29  |.....dstr(A%,B%)|
00001ad0  3a d6 66 70 64 62 6c 73  74 72 3a e1 0d 08 ac 04  |:.fpdblstr:.....|
00001ae0  0d 08 b6 0b dd f2 66 6f  72 63 65 0d 08 c0 29 c8  |......force...).|
00001af0  99 22 57 69 6d 70 5f 46  6f 72 63 65 52 65 64 72  |."Wimp_ForceRedr|
00001b00  61 77 22 2c 2d 31 2c 30  2c 30 2c 31 32 38 30 2c  |aw",-1,0,0,1280,|
00001b10  31 30 32 34 0d 08 ca 05  e1 0d 08 d4 04 0d 08 de  |1024............|
00001b20  0d dd f2 64 69 73 70 73  70 72 0d 08 e8 0d e7 20  |...dispspr..... |
00001b30  73 61 25 3d a3 20 e1 0d  08 f2 67 77 6d 6f 64 65  |sa%=. ....gwmode|
00001b40  25 3d eb 3a c8 99 22 57  69 6d 70 5f 53 65 74 4d  |%=.:.."Wimp_SetM|
00001b50  6f 64 65 22 2c 64 6d 6f  64 65 25 3a e7 20 eb 3c  |ode",dmode%:. .<|
00001b60  3e 64 6d 6f 64 65 25 20  5a 25 3d a4 57 69 6d 70  |>dmode% Z%=.Wimp|
00001b70  45 72 72 28 22 4e 6f 74  20 65 6e 6f 75 67 68 20  |Err("Not enough |
00001b80  6d 65 6d 6f 72 79 20 66  6f 72 20 4d 6f 64 65 20  |memory for Mode |
00001b90  22 2b c3 28 64 6d 6f 64  65 25 29 29 3a e1 0d 08  |"+.(dmode%)):...|
00001ba0  fc 19 66 77 21 31 30 38  3d 73 70 25 3a 66 77 21  |..fw!108=sp%:fw!|
00001bb0  31 31 32 3d 73 61 25 0d  09 06 20 21 66 77 62 3d  |112=sa%... !fwb=|
00001bc0  a4 57 69 6d 70 43 57 28  66 77 29 3a f2 6f 70 65  |.WimpCW(fw):.ope|
00001bd0  6e 77 28 66 77 62 29 0d  09 10 05 e1 0d 09 1a 04  |nw(fwb).........|
00001be0  0d 09 24 13 dd f2 72 65  64 72 61 77 77 69 6e 28  |..$...redrawwin(|
00001bf0  68 25 29 0d 09 2e 1b ea  20 66 25 2c 69 25 2c 77  |h%)..... f%,i%,w|
00001c00  25 2c 78 25 2c 79 25 3a  21 62 25 3d 68 25 0d 09  |%,x%,y%:!b%=h%..|
00001c10  38 22 c8 99 22 57 69 6d  70 5f 52 65 64 72 61 77  |8".."Wimp_Redraw|
00001c20  57 69 6e 64 6f 77 22 2c  2c 62 25 20 b8 20 66 25  |Window",,b% . f%|
00001c30  0d 09 42 09 c8 95 20 66  25 0d 09 4c 3d 20 20 78  |..B... f%..L=  x|
00001c40  25 3d 28 62 25 21 34 29  2d 28 62 25 21 32 30 29  |%=(b%!4)-(b%!20)|
00001c50  3a 79 25 3d 28 62 25 21  31 36 29 2d 28 62 25 21  |:y%=(b%!16)-(b%!|
00001c60  32 34 29 3a f4 20 57 6f  72 6b 20 55 6e 69 74 20  |24):. Work Unit |
00001c70  4f 72 69 67 69 6e 0d 09  56 2b 20 20 21 62 25 3d  |Origin..V+  !b%=|
00001c80  68 25 3a c8 99 22 57 69  6d 70 5f 47 65 74 52 65  |h%:.."Wimp_GetRe|
00001c90  63 74 61 6e 67 6c 65 22  2c 2c 62 25 20 b8 20 66  |ctangle",,b% . f|
00001ca0  25 0d 09 60 05 ce 0d 09  6a 05 e1 0d 09 74 04 0d  |%..`....j....t..|
00001cb0  09 7e 0e dd f2 73 61 76  65 70 72 65 76 0d 09 88  |.~...saveprev...|
00001cc0  20 f2 70 75 74 76 61 72  3a f2 6d 6f 76 65 28 73  | .putvar:.move(s|
00001cd0  61 25 2c 73 61 32 25 2c  73 61 6c 25 29 0d 09 92  |a%,sa2%,sal%)...|
00001ce0  05 e1 0d 09 9c 0d dd f2  67 65 74 70 72 65 76 0d  |........getprev.|
00001cf0  09 a6 20 f2 6d 6f 76 65  28 73 61 32 25 2c 73 61  |.. .move(sa2%,sa|
00001d00  25 2c 73 61 6c 25 29 3a  f2 67 65 74 76 61 72 0d  |%,sal%):.getvar.|
00001d10  09 b0 05 e1 0d 09 ba 05  e1 0d 09 c4 04 0d 09 ce  |................|
00001d20  0f dd f2 63 79 63 6c 65  28 6e 25 29 0d 09 d8 0d  |...cycle(n%)....|
00001d30  f2 73 61 76 65 70 72 65  76 0d 09 e2 14 e7 20 62  |.saveprev..... b|
00001d40  75 74 25 3d 34 20 6e 25  3d 30 2d 6e 25 0d 09 ec  |ut%=4 n%=0-n%...|
00001d50  17 41 25 3d 73 70 25 3a  42 25 3d 6e 25 3a d6 63  |.A%=sp%:B%=n%:.c|
00001d60  79 63 6c 65 0d 09 f6 11  e7 20 21 66 77 62 20 f2  |ycle..... !fwb .|
00001d70  66 6f 72 63 65 0d 0a 00  05 e1 0d 0a 0a 04 0d 0a  |force...........|
00001d80  14 11 dd f2 61 6e 69 6d  61 74 65 28 54 25 29 0d  |....animate(T%).|
00001d90  0a 1e 0e e7 20 21 66 77  62 3d a3 20 e1 0d 0a 28  |.... !fwb=. ...(|
00001da0  3a f2 57 69 6d 70 43 6c  4d 3a c8 99 22 57 69 6d  |:.WimpClM:.."Wim|
00001db0  70 5f 50 6f 6c 6c 22 2c  31 2c 62 25 3a f4 20 41  |p_Poll",1,b%:. A|
00001dc0  6c 6c 6f 77 20 57 69 6d  70 20 74 6f 20 63 6c 6f  |llow Wimp to clo|
00001dd0  73 65 20 6d 65 6e 75 0d  0a 32 37 ea 20 85 3a ee  |se menu..27. .:.|
00001de0  85 ea 20 5a 25 3d a4 57  69 6d 70 45 72 72 28 22  |.. Z%=.WimpErr("|
00001df0  49 6e 73 75 66 66 69 63  69 65 6e 74 20 73 63 72  |Insufficient scr|
00001e00  65 65 6e 20 6d 65 6d 6f  72 79 22 29 3a e1 0d 0a  |een memory"):...|
00001e10  3c 3d d6 61 64 64 72 73  63 72 6e 3a 73 73 69 7a  |<=.addrscrn:ssiz|
00001e20  65 3d 21 73 63 72 73 69  7a 65 3a c8 99 22 4f 53  |e=!scrsize:.."OS|
00001e30  5f 43 68 61 6e 67 65 44  79 6e 61 6d 69 63 41 72  |_ChangeDynamicAr|
00001e40  65 61 22 2c 32 2c 73 73  69 7a 65 0d 0a 46 07 f7  |ea",2,ssize..F..|
00001e50  20 85 0d 0a 50 12 41 25  3d 54 25 3a d6 61 6e 69  | ...P.A%=T%:.ani|
00001e60  6d 61 74 65 0d 0a 5a 0a  f2 66 6f 72 63 65 0d 0a  |mate..Z..force..|
00001e70  64 26 c8 99 22 58 4f 53  5f 43 68 61 6e 67 65 44  |d&.."XOS_ChangeD|
00001e80  79 6e 61 6d 69 63 41 72  65 61 22 2c 32 2c 2d 73  |ynamicArea",2,-s|
00001e90  73 69 7a 65 0d 0a 6e 05  e1 0d 0a 78 04 0d 0a 82  |size..n....x....|
00001ea0  16 f4 20 4d 6f 76 65 20  66 72 6f 6d 2c 74 6f 2c  |.. Move from,to,|
00001eb0  6c 65 6e 0d 0a 8c 1c dd  f2 6d 6f 76 65 28 41 25  |len......move(A%|
00001ec0  2c 42 25 2c 43 25 29 3a  d6 6d 6f 76 65 3a e1 0d  |,B%,C%):.move:..|
00001ed0  0a 96 09 dd f2 61 73 6d  0d 0a a0 0d de 20 43 25  |.....asm..... C%|
00001ee0  20 32 30 34 38 0d 0a aa  12 e3 20 41 25 3d 30 20  | 2048..... A%=0 |
00001ef0  b8 20 32 20 88 20 32 0d  0a b4 09 50 25 3d 43 25  |. 2 . 2....P%=C%|
00001f00  0d 0a be 0b 5b 4f 50 54  20 41 25 0d 0a c8 2e 3b  |....[OPT A%....;|
00001f10  20 4d 6f 76 65 20 66 72  6f 6d 20 41 25 28 52 30  | Move from A%(R0|
00001f20  29 20 74 6f 20 42 25 28  52 31 29 20 6c 65 6e 67  |) to B%(R1) leng|
00001f30  74 68 20 43 25 28 52 32  29 0d 0a d2 09 2e 6d 6f  |th C%(R2).....mo|
00001f40  76 65 0d 0a dc 21 42 49  43 53 20 52 32 2c 52 32  |ve...!BICS R2,R2|
00001f50  2c 23 25 31 31 20 3b 20  57 6f 72 64 20 6c 65 6e  |,#%11 ; Word len|
00001f60  67 74 68 0d 0a e6 10 4d  4f 56 4c 45 20 50 43 2c  |gth....MOVLE PC,|
00001f70  52 31 34 0d 0a f0 0d 43  4d 50 20 52 30 2c 52 31  |R14....CMP R0,R1|
00001f80  0d 0a fa 10 42 47 54 20  6d 6f 76 65 64 6f 77 6e  |....BGT movedown|
00001f90  0d 0b 04 10 41 44 44 20  52 33 2c 52 30 2c 52 32  |....ADD R3,R0,R2|
00001fa0  0d 0b 0e 0d 43 4d 50 20  52 33 2c 52 32 0d 0b 18  |....CMP R3,R2...|
00001fb0  0e 42 47 54 20 6d 6f 76  65 75 70 0d 0b 22 0d 2e  |.BGT moveup.."..|
00001fc0  6d 6f 76 65 64 6f 77 6e  0d 0b 2c 12 4c 44 52 20  |movedown..,.LDR |
00001fd0  52 33 2c 5b 52 30 5d 2c  23 34 0d 0b 36 12 53 54  |R3,[R0],#4..6.ST|
00001fe0  52 20 52 33 2c 5b 52 31  5d 2c 23 34 0d 0b 40 11  |R R3,[R1],#4..@.|
00001ff0  53 55 42 53 20 52 32 2c  52 32 2c 23 34 0d 0b 4a  |SUBS R2,R2,#4..J|
00002000  10 42 4e 45 20 6d 6f 76  65 64 6f 77 6e 0d 0b 54  |.BNE movedown..T|
00002010  0e 4d 4f 56 20 50 43 2c  52 31 34 0d 0b 5e 0b 2e  |.MOV PC,R14..^..|
00002020  6d 6f 76 65 75 70 0d 0b  68 10 41 44 44 20 52 30  |moveup..h.ADD R0|
00002030  2c 52 30 2c 52 32 0d 0b  72 10 41 44 44 20 52 31  |,R0,R2..r.ADD R1|
00002040  2c 52 31 2c 52 32 0d 0b  7c 0c 2e 6d 6f 76 65 75  |,R1,R2..|..moveu|
00002050  70 6c 0d 0b 86 14 4c 44  52 20 52 33 2c 5b 52 30  |pl....LDR R3,[R0|
00002060  2c 23 2d 34 5d 21 0d 0b  90 14 53 54 52 20 52 33  |,#-4]!....STR R3|
00002070  2c 5b 52 31 2c 23 2d 34  5d 21 0d 0b 9a 11 53 55  |,[R1,#-4]!....SU|
00002080  42 53 20 52 32 2c 52 32  2c 23 34 0d 0b a4 0f 42  |BS R2,R2,#4....B|
00002090  4e 45 20 6d 6f 76 65 75  70 6c 0d 0b ae 0e 4d 4f  |NE moveupl....MO|
000020a0  56 20 50 43 2c 52 31 34  0d 0b b8 18 3b 20 49 6e  |V PC,R14....; In|
000020b0  76 65 72 74 20 53 70 72  69 74 65 20 40 20 52 30  |vert Sprite @ R0|
000020c0  0d 0b c2 0b 2e 69 6e 76  65 72 74 0d 0b cc 1b 53  |.....invert....S|
000020d0  54 4d 46 44 20 52 31 33  21 2c 7b 52 30 2d 52 31  |TMFD R13!,{R0-R1|
000020e0  32 2c 52 31 34 7d 0d 0b  d6 0e 42 4c 20 61 64 64  |2,R14}....BL add|
000020f0  72 73 70 72 0d 0b e0 15  4d 56 4e 20 52 33 2c 23  |rspr....MVN R3,#|
00002100  30 20 3b 20 52 33 3d 2d  31 0d 0b ea 0c 2e 69 6e  |0 ; R3=-1.....in|
00002110  76 6c 6f 6f 70 0d 0b f4  0f 4c 44 52 20 52 34 2c  |vloop....LDR R4,|
00002120  5b 52 31 5d 0d 0b fe 0e  82 20 52 34 2c 52 34 2c  |[R1]..... R4,R4,|
00002130  52 33 0d 0c 08 12 53 54  52 20 52 34 2c 5b 52 31  |R3....STR R4,[R1|
00002140  5d 2c 23 34 0d 0c 12 11  53 55 42 53 20 52 32 2c  |],#4....SUBS R2,|
00002150  52 32 2c 23 34 0d 0c 1c  0f 42 4e 45 20 69 6e 76  |R2,#4....BNE inv|
00002160  6c 6f 6f 70 0d 0c 26 1a  4c 44 4d 46 44 20 52 31  |loop..&.LDMFD R1|
00002170  33 21 2c 7b 52 30 2d 52  31 32 2c 50 43 7d 0d 0c  |3!,{R0-R12,PC}..|
00002180  30 19 3b 20 53 70 72 69  74 65 20 40 20 52 30 20  |0.; Sprite @ R0 |
00002190  74 6f 20 47 72 65 79 0d  0c 3a 09 2e 67 72 65 79  |to Grey..:..grey|
000021a0  0d 0c 44 1b 53 54 4d 46  44 20 52 31 33 21 2c 7b  |..D.STMFD R13!,{|
000021b0  52 30 2d 52 31 32 2c 52  31 34 7d 0d 0c 4e 0e 42  |R0-R12,R14}..N.B|
000021c0  4c 20 61 64 64 72 73 70  72 0d 0c 58 12 41 44 52  |L addrspr..X.ADR|
000021d0  20 52 33 2c 67 72 65 79  74 61 62 0d 0c 62 0d 2e  | R3,greytab..b..|
000021e0  67 72 65 79 6c 6f 6f 70  0d 0c 6c 10 4c 44 52 42  |greyloop..l.LDRB|
000021f0  20 52 34 2c 5b 52 31 5d  0d 0c 76 13 4c 44 52 42  | R4,[R1]..v.LDRB|
00002200  20 52 35 2c 5b 52 33 2c  52 34 5d 0d 0c 80 13 53  | R5,[R3,R4]....S|
00002210  54 52 42 20 52 35 2c 5b  52 31 5d 2c 23 31 0d 0c  |TRB R5,[R1],#1..|
00002220  8a 11 53 55 42 53 20 52  32 2c 52 32 2c 23 31 0d  |..SUBS R2,R2,#1.|
00002230  0c 94 10 42 4e 45 20 67  72 65 79 6c 6f 6f 70 0d  |...BNE greyloop.|
00002240  0c 9e 1a 4c 44 4d 46 44  20 52 31 33 21 2c 7b 52  |...LDMFD R13!,{R|
00002250  30 2d 52 31 32 2c 50 43  7d 0d 0c a8 0c 2e 67 72  |0-R12,PC}.....gr|
00002260  65 79 74 61 62 0d 0c b2  11 44 43 44 20 26 32 46  |eytab....DCD &2F|
00002270  32 45 32 43 30 30 0d 0c  bc 2d 44 43 44 20 26 46  |2E2C00...-DCD &F|
00002280  43 46 44 46 45 46 46 3a  44 43 44 20 26 44 30 44  |CFDFEFF:DCD &D0D|
00002290  31 44 32 44 33 3a 44 43  44 20 26 32 43 32 44 32  |1D2D3:DCD &2C2D2|
000022a0  45 32 46 0d 0c c6 2d 44  43 44 20 26 46 43 46 44  |E2F...-DCD &FCFD|
000022b0  46 45 46 46 3a 44 43 44  20 26 44 30 44 31 44 32  |FEFF:DCD &D0D1D2|
000022c0  44 33 3a 44 43 44 20 26  32 43 32 44 32 45 32 46  |D3:DCD &2C2D2E2F|
000022d0  0d 0c d0 2d 44 43 44 20  26 46 43 46 44 46 45 46  |...-DCD &FCFDFEF|
000022e0  46 3a 44 43 44 20 26 44  30 44 31 44 32 44 33 3a  |F:DCD &D0D1D2D3:|
000022f0  44 43 44 20 26 32 43 32  44 32 45 32 46 0d 0c da  |DCD &2C2D2E2F...|
00002300  2d 44 43 44 20 26 46 43  46 44 46 45 46 46 3a 44  |-DCD &FCFDFEFF:D|
00002310  43 44 20 26 44 30 44 31  44 32 44 33 3a 44 43 44  |CD &D0D1D2D3:DCD|
00002320  20 26 32 43 32 44 32 45  32 46 0d 0c e4 2d 44 43  | &2C2D2E2F...-DC|
00002330  44 20 26 46 43 46 44 46  45 46 46 3a 44 43 44 20  |D &FCFDFEFF:DCD |
00002340  26 44 30 44 31 44 32 44  33 3a 44 43 44 20 26 32  |&D0D1D2D3:DCD &2|
00002350  43 32 44 32 45 32 46 0d  0c ee 2d 44 43 44 20 26  |C2D2E2F...-DCD &|
00002360  46 43 46 44 46 45 46 46  3a 44 43 44 20 26 44 30  |FCFDFEFF:DCD &D0|
00002370  44 31 44 32 44 33 3a 44  43 44 20 26 32 43 32 44  |D1D2D3:DCD &2C2D|
00002380  32 45 32 46 0d 0c f8 2d  44 43 44 20 26 46 43 46  |2E2F...-DCD &FCF|
00002390  44 46 45 46 46 3a 44 43  44 20 26 44 30 44 31 44  |DFEFF:DCD &D0D1D|
000023a0  32 44 33 3a 44 43 44 20  26 32 43 32 44 32 45 32  |2D3:DCD &2C2D2E2|
000023b0  46 0d 0d 02 2d 44 43 44  20 26 46 43 46 44 46 45  |F...-DCD &FCFDFE|
000023c0  46 46 3a 44 43 44 20 26  44 30 44 31 44 32 44 33  |FF:DCD &D0D1D2D3|
000023d0  3a 44 43 44 20 26 32 43  32 44 32 45 32 46 0d 0d  |:DCD &2C2D2E2F..|
000023e0  0c 2d 44 43 44 20 26 46  43 46 44 46 45 46 46 3a  |.-DCD &FCFDFEFF:|
000023f0  44 43 44 20 26 44 30 44  31 44 32 44 33 3a 44 43  |DCD &D0D1D2D3:DC|
00002400  44 20 26 32 43 32 44 32  45 32 46 0d 0d 16 2d 44  |D &2C2D2E2F...-D|
00002410  43 44 20 26 46 43 46 44  46 45 46 46 3a 44 43 44  |CD &FCFDFEFF:DCD|
00002420  20 26 44 30 44 31 44 32  44 33 3a 44 43 44 20 26  | &D0D1D2D3:DCD &|
00002430  32 43 32 44 32 45 32 46  0d 0d 20 2d 44 43 44 20  |2C2D2E2F.. -DCD |
00002440  26 46 43 46 44 46 45 46  46 3a 44 43 44 20 26 44  |&FCFDFEFF:DCD &D|
00002450  30 44 31 44 32 44 33 3a  44 43 44 20 26 32 43 32  |0D1D2D3:DCD &2C2|
00002460  44 32 45 32 46 0d 0d 2a  2d 44 43 44 20 26 46 43  |D2E2F..*-DCD &FC|
00002470  46 44 46 45 46 46 3a 44  43 44 20 26 44 30 44 31  |FDFEFF:DCD &D0D1|
00002480  44 32 44 33 3a 44 43 44  20 26 32 43 32 44 32 45  |D2D3:DCD &2C2D2E|
00002490  32 46 0d 0d 34 2d 44 43  44 20 26 46 43 46 44 46  |2F..4-DCD &FCFDF|
000024a0  45 46 46 3a 44 43 44 20  26 44 30 44 31 44 32 44  |EFF:DCD &D0D1D2D|
000024b0  33 3a 44 43 44 20 26 32  43 32 44 32 45 32 46 0d  |3:DCD &2C2D2E2F.|
000024c0  0d 3e 2d 44 43 44 20 26  46 43 46 44 46 45 46 46  |.>-DCD &FCFDFEFF|
000024d0  3a 44 43 44 20 26 44 30  44 31 44 32 44 33 3a 44  |:DCD &D0D1D2D3:D|
000024e0  43 44 20 26 32 43 32 44  32 45 32 46 0d 0d 48 2d  |CD &2C2D2E2F..H-|
000024f0  44 43 44 20 26 46 43 46  44 46 45 46 46 3a 44 43  |DCD &FCFDFEFF:DC|
00002500  44 20 26 44 30 44 31 44  32 44 33 3a 44 43 44 20  |D &D0D1D2D3:DCD |
00002510  26 32 43 32 44 32 45 32  46 0d 0d 52 2d 44 43 44  |&2C2D2E2F..R-DCD|
00002520  20 26 46 43 46 44 46 45  46 46 3a 44 43 44 20 26  | &FCFDFEFF:DCD &|
00002530  44 30 44 31 44 32 44 33  3a 44 43 44 20 26 32 43  |D0D1D2D3:DCD &2C|
00002540  32 44 32 45 32 46 0d 0d  5c 2d 44 43 44 20 26 46  |2D2E2F..\-DCD &F|
00002550  43 46 44 46 45 46 46 3a  44 43 44 20 26 44 30 44  |CFDFEFF:DCD &D0D|
00002560  31 44 32 44 33 3a 44 43  44 20 26 32 43 32 44 32  |1D2D3:DCD &2C2D2|
00002570  45 32 46 0d 0d 66 2d 44  43 44 20 26 46 43 46 44  |E2F..f-DCD &FCFD|
00002580  46 45 46 46 3a 44 43 44  20 26 44 30 44 31 44 32  |FEFF:DCD &D0D1D2|
00002590  44 33 3a 44 43 44 20 26  32 43 32 44 32 45 32 46  |D3:DCD &2C2D2E2F|
000025a0  0d 0d 70 2d 44 43 44 20  26 46 43 46 44 46 45 46  |..p-DCD &FCFDFEF|
000025b0  46 3a 44 43 44 20 26 44  30 44 31 44 32 44 33 3a  |F:DCD &D0D1D2D3:|
000025c0  44 43 44 20 26 32 43 32  44 32 45 32 46 0d 0d 7a  |DCD &2C2D2E2F..z|
000025d0  2d 44 43 44 20 26 46 43  46 44 46 45 46 46 3a 44  |-DCD &FCFDFEFF:D|
000025e0  43 44 20 26 44 30 44 31  44 32 44 33 3a 44 43 44  |CD &D0D1D2D3:DCD|
000025f0  20 26 32 43 32 44 32 45  32 46 0d 0d 84 2d 44 43  | &2C2D2E2F...-DC|
00002600  44 20 26 46 43 46 44 46  45 46 46 3a 44 43 44 20  |D &FCFDFEFF:DCD |
00002610  26 44 30 44 31 44 32 44  33 3a 44 43 44 20 26 32  |&D0D1D2D3:DCD &2|
00002620  43 32 44 32 45 32 46 0d  0d 8e 1a 3b 20 53 70 72  |C2D2E2F....; Spr|
00002630  69 74 65 20 40 20 52 30  20 74 6f 20 42 20 26 20  |ite @ R0 to B & |
00002640  57 0d 0d 98 0a 2e 62 61  6e 64 77 0d 0d a2 1b 53  |W.....bandw....S|
00002650  54 4d 46 44 20 52 31 33  21 2c 7b 52 30 2d 52 31  |TMFD R13!,{R0-R1|
00002660  32 2c 52 31 34 7d 0d 0d  ac 0e 42 4c 20 61 64 64  |2,R14}....BL add|
00002670  72 73 70 72 0d 0d b6 0d  4d 4f 56 20 52 33 2c 23  |rspr....MOV R3,#|
00002680  30 0d 0d c0 0f 4d 4f 56  20 52 35 2c 23 32 35 35  |0....MOV R5,#255|
00002690  0d 0d ca 0b 2e 62 77 6c  6f 6f 70 0d 0d d4 10 4c  |.....bwloop....L|
000026a0  44 52 42 20 52 34 2c 5b  52 31 5d 0d 0d de 0f 80  |DRB R4,[R1].....|
000026b0  53 20 52 34 2c 52 34 2c  23 31 0d 0d e8 1d 53 54  |S R4,R4,#1....ST|
000026c0  52 45 51 42 20 52 33 2c  5b 52 31 5d 2c 23 31 20  |REQB R3,[R1],#1 |
000026d0  3b 20 42 6c 61 63 6b 0d  0d f2 1d 53 54 52 4e 45  |; Black....STRNE|
000026e0  42 20 52 35 2c 5b 52 31  5d 2c 23 31 20 3b 20 57  |B R5,[R1],#1 ; W|
000026f0  68 69 74 65 0d 0d fc 11  53 55 42 53 20 52 32 2c  |hite....SUBS R2,|
00002700  52 32 2c 23 31 0d 0e 06  0e 42 4e 45 20 62 77 6c  |R2,#1....BNE bwl|
00002710  6f 6f 70 0d 0e 10 1a 4c  44 4d 46 44 20 52 31 33  |oop....LDMFD R13|
00002720  21 2c 7b 52 30 2d 52 31  32 2c 50 43 7d 0d 0e 1a  |!,{R0-R12,PC}...|
00002730  28 3b 20 43 79 63 6c 65  20 53 70 72 69 74 65 20  |(; Cycle Sprite |
00002740  40 20 52 30 2c 20 52 31  3d 61 64 6a 75 73 74 20  |@ R0, R1=adjust |
00002750  28 2b 2f 2d 29 0d 0e 24  0a 2e 63 79 63 6c 65 0d  |(+/-)..$..cycle.|
00002760  0e 2e 1b 53 54 4d 46 44  20 52 31 33 21 2c 7b 52  |...STMFD R13!,{R|
00002770  30 2d 52 31 32 2c 52 31  34 7d 0d 0e 38 0d 4d 4f  |0-R12,R14}..8.MO|
00002780  56 20 52 33 2c 52 31 0d  0e 42 0e 42 4c 20 61 64  |V R3,R1..B.BL ad|
00002790  64 72 73 70 72 0d 0e 4c  0b 2e 63 79 6c 6f 6f 70  |drspr..L..cyloop|
000027a0  0d 0e 56 10 4c 44 52 42  20 52 34 2c 5b 52 31 5d  |..V.LDRB R4,[R1]|
000027b0  0d 0e 60 10 41 44 44 20  52 34 2c 52 34 2c 52 33  |..`.ADD R4,R4,R3|
000027c0  0d 0e 6a 13 53 54 52 42  20 52 34 2c 5b 52 31 5d  |..j.STRB R4,[R1]|
000027d0  2c 23 31 0d 0e 74 11 53  55 42 53 20 52 32 2c 52  |,#1..t.SUBS R2,R|
000027e0  32 2c 23 31 0d 0e 7e 0e  42 4e 45 20 63 79 6c 6f  |2,#1..~.BNE cylo|
000027f0  6f 70 0d 0e 88 1a 4c 44  4d 46 44 20 52 31 33 21  |op....LDMFD R13!|
00002800  2c 7b 52 30 2d 52 31 32  2c 50 43 7d 0d 0e 92 36  |,{R0-R12,PC}...6|
00002810  3b 20 41 6e 69 6d 61 74  65 20 53 63 72 65 65 6e  |; Animate Screen|
00002820  2e 20 52 30 3d 31 20 61  6c 6c 20 63 6f 6c 6f 75  |. R0=1 all colou|
00002830  72 73 3b 20 52 30 3d 32  20 6e 6f 74 20 62 6c 61  |rs; R0=2 not bla|
00002840  63 6b 0d 0e 9c 0c 2e 61  6e 69 6d 61 74 65 0d 0e  |ck.....animate..|
00002850  a6 1b 53 54 4d 46 44 20  52 31 33 21 2c 7b 52 30  |..STMFD R13!,{R0|
00002860  2d 52 31 32 2c 52 31 34  7d 0d 0e b0 11 53 54 52  |-R12,R14}....STR|
00002870  20 52 30 2c 61 6e 74 79  70 65 0d 0e ba 0f 42 4c  | R0,antype....BL|
00002880  20 61 64 64 72 73 63 72  6e 0d 0e c4 0e 4d 4f 56  | addrscrn....MOV|
00002890  20 52 31 30 2c 52 31 0d  0e ce 0e 4d 4f 56 20 52  | R10,R1....MOV R|
000028a0  31 31 2c 52 32 0d 0e d8  28 41 44 44 20 52 31 32  |11,R2...(ADD R12|
000028b0  2c 52 31 30 2c 52 31 31  20 3b 20 53 68 61 64 6f  |,R10,R11 ; Shado|
000028c0  77 20 73 63 72 65 65 6e  20 61 64 64 72 0d 0e e2  |w screen addr...|
000028d0  1b 4d 4f 56 20 52 39 2c  23 32 20 3b 20 53 63 72  |.MOV R9,#2 ; Scr|
000028e0  65 65 6e 20 62 61 6e 6b  0d 0e ec 0b 2e 61 6e 6c  |een bank.....anl|
000028f0  6f 6f 70 0d 0e f6 0e 4d  4f 56 20 52 30 2c 23 31  |oop....MOV R0,#1|
00002900  39 0d 0f 00 11 53 57 49  20 22 4f 53 5f 42 79 74  |9....SWI "OS_Byt|
00002910  65 22 0d 0f 0a 0d 43 4d  50 20 52 39 2c 23 31 0d  |e"....CMP R9,#1.|
00002920  0f 14 0f 4d 4f 56 4e 45  20 52 39 2c 23 31 0d 0f  |...MOVNE R9,#1..|
00002930  1e 0c ec 51 20 52 39 2c  23 32 0d 0f 28 0f 4d 4f  |...Q R9,#2..(.MO|
00002940  56 20 52 30 2c 23 31 31  33 0d 0f 32 0d 4d 4f 56  |V R0,#113..2.MOV|
00002950  20 52 31 2c 52 39 0d 0f  3c 27 53 57 49 20 22 4f  | R1,R9..<'SWI "O|
00002960  53 5f 42 79 74 65 22 20  3b 20 53 77 69 74 63 68  |S_Byte" ; Switch|
00002970  20 64 69 73 70 6c 61 79  20 62 61 6e 6b 0d 0f 46  | display bank..F|
00002980  1c 4d 4f 56 20 52 30 2c  52 31 32 20 3b 20 54 61  |.MOV R0,R12 ; Ta|
00002990  72 67 65 74 20 62 61 6e  6b 0d 0f 50 1f 4d 4f 56  |rget bank..P.MOV|
000029a0  20 52 31 2c 52 31 30 20  3b 20 64 69 73 70 6c 61  | R1,R10 ; displa|
000029b0  79 65 64 20 62 61 6e 6b  0d 0f 5a 0e 4d 4f 56 20  |yed bank..Z.MOV |
000029c0  52 32 2c 52 31 31 0d 0f  64 1a 4d 4f 56 20 52 31  |R2,R11..d.MOV R1|
000029d0  30 2c 52 30 20 3b 20 4e  65 78 74 20 62 61 6e 6b  |0,R0 ; Next bank|
000029e0  0d 0f 6e 21 4d 4f 56 20  52 31 32 2c 52 31 20 3b  |..n!MOV R12,R1 ;|
000029f0  20 4e 65 78 74 20 73 6f  75 72 63 65 20 62 61 6e  | Next source ban|
00002a00  6b 0d 0f 78 0f 4d 4f 56  20 52 37 2c 23 26 46 46  |k..x.MOV R7,#&FF|
00002a10  0d 0f 82 11 4c 44 52 20  52 33 2c 61 6e 74 79 70  |....LDR R3,antyp|
00002a20  65 0d 0f 8c 0d 43 4d 50  20 52 33 2c 23 32 0d 0f  |e....CMP R3,#2..|
00002a30  96 0f 42 45 51 20 61 6e  62 6c 61 63 6b 0d 0f a0  |..BEQ anblack...|
00002a40  31 3b 20 4e 6f 74 65 2d  20 66 6f 6c 6c 6f 77 69  |1; Note- followi|
00002a50  6e 67 20 72 6f 75 74 69  6e 65 20 6f 70 74 69 6d  |ng routine optim|
00002a60  69 73 65 64 20 66 6f 72  20 73 70 65 65 64 0d 0f  |ised for speed..|
00002a70  aa 0c 2e 61 6e 63 79 63  6c 65 0d 0f b4 15 4c 44  |...ancycle....LD|
00002a80  4d 49 41 20 52 31 21 2c  7b 52 33 2d 52 36 7d 0d  |MIA R1!,{R3-R6}.|
00002a90  0f be 10 a4 61 64 64 77  6f 72 64 31 28 33 29 0d  |....addword1(3).|
00002aa0  0f c8 10 a4 61 64 64 77  6f 72 64 31 28 34 29 0d  |....addword1(4).|
00002ab0  0f d2 10 a4 61 64 64 77  6f 72 64 31 28 35 29 0d  |....addword1(5).|
00002ac0  0f dc 10 a4 61 64 64 77  6f 72 64 31 28 36 29 0d  |....addword1(6).|
00002ad0  0f e6 15 53 54 4d 49 41  20 52 30 21 2c 7b 52 33  |...STMIA R0!,{R3|
00002ae0  2d 52 36 7d 0d 0f f0 12  53 55 42 53 20 52 32 2c  |-R6}....SUBS R2,|
00002af0  52 32 2c 23 31 36 0d 0f  fa 0f 42 4e 45 20 61 6e  |R2,#16....BNE an|
00002b00  63 79 63 6c 65 0d 10 04  0d 42 20 61 6e 63 68 65  |cycle....B anche|
00002b10  63 6b 0d 10 0e 26 3b 20  41 6e 69 6d 61 74 65 20  |ck...&; Animate |
00002b20  61 6c 6c 20 63 6f 6c 6f  75 72 73 20 65 78 63 65  |all colours exce|
00002b30  70 74 20 62 6c 61 63 6b  0d 10 18 0c 2e 61 6e 62  |pt black.....anb|
00002b40  6c 61 63 6b 0d 10 22 15  4c 44 4d 49 41 20 52 31  |lack..".LDMIA R1|
00002b50  21 2c 7b 52 33 2d 52 36  7d 0d 10 2c 10 a4 61 64  |!,{R3-R6}..,..ad|
00002b60  64 77 6f 72 64 32 28 33  29 0d 10 36 10 a4 61 64  |dword2(3)..6..ad|
00002b70  64 77 6f 72 64 32 28 34  29 0d 10 40 10 a4 61 64  |dword2(4)..@..ad|
00002b80  64 77 6f 72 64 32 28 35  29 0d 10 4a 10 a4 61 64  |dword2(5)..J..ad|
00002b90  64 77 6f 72 64 32 28 36  29 0d 10 54 15 53 54 4d  |dword2(6)..T.STM|
00002ba0  49 41 20 52 30 21 2c 7b  52 33 2d 52 36 7d 0d 10  |IA R0!,{R3-R6}..|
00002bb0  5e 12 53 55 42 53 20 52  32 2c 52 32 2c 23 31 36  |^.SUBS R2,R2,#16|
00002bc0  0d 10 68 0f 42 4e 45 20  61 6e 62 6c 61 63 6b 0d  |..h.BNE anblack.|
00002bd0  10 72 0d 42 20 61 6e 63  68 65 63 6b 0d 10 7c 05  |.r.B ancheck..|.|
00002be0  3b 0d 10 86 0c 2e 61 6e  63 68 65 63 6b 0d 10 90  |;.....ancheck...|
00002bf0  23 53 57 49 20 22 4f 53  5f 4d 6f 75 73 65 22 3b  |#SWI "OS_Mouse";|
00002c00  20 52 30 2d 52 33 20 63  6f 72 72 75 70 74 65 64  | R0-R3 corrupted|
00002c10  0d 10 9a 0d 43 4d 50 20  52 32 2c 23 30 0d 10 a4  |....CMP R2,#0...|
00002c20  0e 42 45 51 20 61 6e 6c  6f 6f 70 0d 10 ae 17 43  |.BEQ anloop....C|
00002c30  4d 50 20 52 32 2c 23 34  20 3b 20 53 65 6c 65 63  |MP R2,#4 ; Selec|
00002c40  74 3f 0d 10 b8 0e 42 45  51 20 61 6e 77 61 69 74  |t?....BEQ anwait|
00002c50  0d 10 c2 15 43 4d 50 20  52 32 2c 23 32 20 3b 20  |....CMP R2,#2 ; |
00002c60  4d 65 6e 75 3f 0d 10 cc  0e 42 4e 45 20 61 6e 6c  |Menu?....BNE anl|
00002c70  6f 6f 70 0d 10 d6 0b 2e  61 6e 65 78 69 74 0d 10  |oop.....anexit..|
00002c80  e0 0f 4d 4f 56 20 52 30  2c 23 31 31 33 0d 10 ea  |..MOV R0,#113...|
00002c90  0d 4d 4f 56 20 52 31 2c  23 30 0d 10 f4 26 53 57  |.MOV R1,#0...&SW|
00002ca0  49 20 22 4f 53 5f 42 79  74 65 22 20 3b 20 52 65  |I "OS_Byte" ; Re|
00002cb0  73 65 74 20 64 69 73 70  6c 61 79 20 62 61 6e 6b  |set display bank|
00002cc0  0d 10 fe 1a 4c 44 4d 46  44 20 52 31 33 21 2c 7b  |....LDMFD R13!,{|
00002cd0  52 30 2d 52 31 32 2c 50  43 7d 0d 11 08 1f 3b 20  |R0-R12,PC}....; |
00002ce0  57 61 69 74 20 75 6e 74  69 6c 20 4d 65 6e 75 20  |Wait until Menu |
00002cf0  6f 72 20 41 64 6a 75 73  74 0d 11 12 0b 2e 61 6e  |or Adjust.....an|
00002d00  77 61 69 74 0d 11 1c 0e  4d 4f 56 20 52 30 2c 23  |wait....MOV R0,#|
00002d10  32 31 0d 11 26 0d 4d 4f  56 20 52 31 2c 23 39 0d  |21..&.MOV R1,#9.|
00002d20  11 30 25 53 57 49 20 22  4f 53 5f 42 79 74 65 22  |.0%SWI "OS_Byte"|
00002d30  3b 20 46 6c 75 73 68 20  6d 6f 75 73 65 20 62 75  |; Flush mouse bu|
00002d40  66 66 65 72 0d 11 3a 0f  2e 61 6e 77 61 69 74 6c  |ffer..:..anwaitl|
00002d50  6f 6f 70 0d 11 44 12 53  57 49 20 22 4f 53 5f 4d  |oop..D.SWI "OS_M|
00002d60  6f 75 73 65 22 0d 11 4e  1e 54 53 54 20 52 32 2c  |ouse"..N.TST R2,|
00002d70  23 33 20 3b 20 4d 65 6e  75 20 6f 72 20 41 64 6a  |#3 ; Menu or Adj|
00002d80  75 73 74 0d 11 58 12 42  45 51 20 61 6e 77 61 69  |ust..X.BEQ anwai|
00002d90  74 6c 6f 6f 70 0d 11 62  15 43 4d 50 20 52 32 2c  |tloop..b.CMP R2,|
00002da0  23 32 20 3b 20 4d 65 6e  75 3f 0d 11 6c 0e 42 45  |#2 ; Menu?..l.BE|
00002db0  51 20 61 6e 65 78 69 74  0d 11 76 0c 42 20 61 6e  |Q anexit..v.B an|
00002dc0  6c 6f 6f 70 0d 11 80 11  2e 61 6e 74 79 70 65 20  |loop.....antype |
00002dd0  44 43 44 20 30 0d 11 8a  3d 3b 20 52 30 3d 53 70  |DCD 0...=; R0=Sp|
00002de0  72 69 74 65 20 61 64 64  72 2e 20 4f 6e 20 65 78  |rite addr. On ex|
00002df0  69 74 20 52 31 3d 64 61  74 61 20 61 64 64 72 65  |it R1=data addre|
00002e00  73 73 2c 20 52 32 3d 64  61 74 61 20 6c 65 6e 67  |ss, R2=data leng|
00002e10  74 68 0d 11 94 0c 2e 61  64 64 72 73 70 72 0d 11  |th.....addrspr..|
00002e20  9e 13 4c 44 52 20 52 31  2c 5b 52 30 2c 23 31 36  |..LDR R1,[R0,#16|
00002e30  5d 0d 11 a8 10 41 44 44  20 52 31 2c 52 31 2c 23  |]....ADD R1,R1,#|
00002e40  31 0d 11 b2 14 4d 4f 56  20 52 31 2c 52 31 2c 4c  |1....MOV R1,R1,L|
00002e50  53 4c 20 23 32 0d 11 bc  13 4c 44 52 20 52 32 2c  |SL #2....LDR R2,|
00002e60  5b 52 30 2c 23 32 30 5d  0d 11 c6 10 41 44 44 20  |[R0,#20]....ADD |
00002e70  52 32 2c 52 32 2c 23 31  0d 11 d0 10 4d 55 4c 20  |R2,R2,#1....MUL |
00002e80  52 32 2c 52 31 2c 52 32  0d 11 da 13 4c 44 52 20  |R2,R1,R2....LDR |
00002e90  52 31 2c 5b 52 30 2c 23  33 32 5d 0d 11 e4 10 41  |R1,[R0,#32]....A|
00002ea0  44 44 20 52 31 2c 52 31  2c 52 30 0d 11 ee 0e 4d  |DD R1,R1,R0....M|
00002eb0  4f 56 20 50 43 2c 52 31  34 0d 11 f8 2b 3b 20 47  |OV PC,R14...+; G|
00002ec0  65 74 20 53 63 72 65 65  6e 20 61 64 64 72 65 73  |et Screen addres|
00002ed0  73 20 28 52 31 29 20 26  20 6c 65 6e 67 74 68 20  |s (R1) & length |
00002ee0  28 52 32 29 0d 12 02 0d  2e 61 64 64 72 73 63 72  |(R2).....addrscr|
00002ef0  6e 0d 12 0c 12 41 44 52  20 52 30 2c 73 63 72 76  |n....ADR R0,scrv|
00002f00  61 72 69 0d 12 16 12 41  44 52 20 52 31 2c 73 63  |ari....ADR R1,sc|
00002f10  72 76 61 72 6f 0d 12 20  1d 53 57 49 20 22 4f 53  |rvaro.. .SWI "OS|
00002f20  5f 52 65 61 64 56 64 75  56 61 72 69 61 62 6c 65  |_ReadVduVariable|
00002f30  73 22 0d 12 2a 12 4c 44  52 20 52 31 2c 73 63 72  |s"..*.LDR R1,scr|
00002f40  61 64 64 72 0d 12 34 12  4c 44 52 20 52 32 2c 73  |addr..4.LDR R2,s|
00002f50  63 72 73 69 7a 65 0d 12  3e 0e 4d 4f 56 20 50 43  |crsize..>.MOV PC|
00002f60  2c 52 31 34 0d 12 48 22  2e 73 63 72 76 61 72 69  |,R14..H".scrvari|
00002f70  20 44 43 44 20 31 34 39  3a 44 43 44 20 37 3a 20  | DCD 149:DCD 7: |
00002f80  44 43 44 20 2d 31 0d 12  52 0c 2e 73 63 72 76 61  |DCD -1..R..scrva|
00002f90  72 6f 0d 12 5c 12 2e 73  63 72 61 64 64 72 20 44  |ro..\..scraddr D|
00002fa0  43 44 20 30 0d 12 66 12  2e 73 63 72 73 69 7a 65  |CD 0..f..scrsize|
00002fb0  20 44 43 44 20 30 0d 12  70 05 5d 0d 12 7a 05 ed  | DCD 0..p.]..z..|
00002fc0  0d 12 84 30 e7 20 50 25  3e 43 25 2b 32 30 34 38  |...0. P%>C%+2048|
00002fd0  20 85 20 30 2c 22 41 73  73 65 6d 62 6c 65 72 20  | . 0,"Assembler |
00002fe0  62 75 66 66 65 72 20 6f  76 65 72 66 6c 6f 77 22  |buffer overflow"|
00002ff0  0d 12 8e 18 de 20 43 25  20 32 35 36 3a f2 66 70  |..... C% 256:.fp|
00003000  63 6f 6e 76 28 43 25 29  0d 12 98 05 e1 0d 12 a2  |conv(C%)........|
00003010  04 0d 12 ac 12 dd a4 61  64 64 77 6f 72 64 31 28  |.......addword1(|
00003020  52 6e 29 0d 12 b6 0b 5b  4f 50 54 20 41 25 0d 12  |Rn)....[OPT A%..|
00003030  c0 11 a4 61 64 64 62 79  74 65 31 28 52 6e 29 0d  |...addbyte1(Rn).|
00003040  12 ca 11 a4 61 64 64 62  79 74 65 31 28 52 6e 29  |....addbyte1(Rn)|
00003050  0d 12 d4 11 a4 61 64 64  62 79 74 65 31 28 52 6e  |.....addbyte1(Rn|
00003060  29 0d 12 de 11 a4 61 64  64 62 79 74 65 31 28 52  |).....addbyte1(R|
00003070  6e 29 0d 12 e8 08 5d 3a  3d 30 0d 12 f2 12 dd a4  |n)....]:=0......|
00003080  61 64 64 62 79 74 65 31  28 52 6e 29 0d 12 fc 0b  |addbyte1(Rn)....|
00003090  5b 4f 50 54 20 41 25 0d  13 06 0d 54 53 54 20 52  |[OPT A%....TST R|
000030a0  6e 2c 52 37 0d 13 10 12  53 55 42 4e 45 20 52 6e  |n,R7....SUBNE Rn|
000030b0  2c 52 6e 2c 23 31 0d 13  1a 13 84 52 45 51 20 52  |,Rn,#1.....REQ R|
000030c0  6e 2c 52 6e 2c 23 26 46  46 0d 13 24 14 4d 4f 56  |n,Rn,#&FF..$.MOV|
000030d0  20 52 6e 2c 52 6e 2c 52  4f 52 20 23 38 0d 13 2e  | Rn,Rn,ROR #8...|
000030e0  08 5d 3a 3d 30 0d 13 38  12 dd a4 61 64 64 77 6f  |.]:=0..8...addwo|
000030f0  72 64 32 28 52 6e 29 0d  13 42 0b 5b 4f 50 54 20  |rd2(Rn)..B.[OPT |
00003100  41 25 0d 13 4c 11 a4 61  64 64 62 79 74 65 32 28  |A%..L..addbyte2(|
00003110  52 6e 29 0d 13 56 11 a4  61 64 64 62 79 74 65 32  |Rn)..V..addbyte2|
00003120  28 52 6e 29 0d 13 60 11  a4 61 64 64 62 79 74 65  |(Rn)..`..addbyte|
00003130  32 28 52 6e 29 0d 13 6a  11 a4 61 64 64 62 79 74  |2(Rn)..j..addbyt|
00003140  65 32 28 52 6e 29 0d 13  74 08 5d 3a 3d 30 0d 13  |e2(Rn)..t.]:=0..|
00003150  7e 12 dd a4 61 64 64 62  79 74 65 32 28 52 6e 29  |~...addbyte2(Rn)|
00003160  0d 13 88 0b 5b 4f 50 54  20 41 25 0d 13 92 0d 54  |....[OPT A%....T|
00003170  53 54 20 52 6e 2c 52 37  0d 13 9c 0d 42 45 51 20  |ST Rn,R7....BEQ |
00003180  50 25 2b 31 36 0d 13 a6  10 53 55 42 20 52 6e 2c  |P%+16....SUB Rn,|
00003190  52 6e 2c 23 31 0d 13 b0  0d 54 53 54 20 52 6e 2c  |Rn,#1....TST Rn,|
000031a0  52 37 0d 13 ba 13 84 52  45 51 20 52 6e 2c 52 6e  |R7.....REQ Rn,Rn|
000031b0  2c 23 26 46 46 0d 13 c4  14 4d 4f 56 20 52 6e 2c  |,#&FF....MOV Rn,|
000031c0  52 6e 2c 52 4f 52 20 23  38 0d 13 ce 08 5d 3a 3d  |Rn,ROR #8....]:=|
000031d0  30 0d ff                                          |0..|
000031d3