BasilBloFORM80 FOR40 FORM_80FORM_40!BOOT DEBUG SD DEBUG DEBUG DEBUG DEBUG DEBUG SA SW om 8p3 @((((||#̝#^̍#̄=F; |||| 찠贠輬찠찠輬 꽮굠꽬찠꽬 贠찠켤輬 굠굠꽬 WHEN MAKING A BACKUP COPY OF DISK DEBUG & COPY-ALL DISK DEBUG & COPY-ALL YOU MUST 𠠃 Try *ENABLE & *BACKUP ꠠ Try *ENABLE & *BACKUP ꠠ SO PLEASE REMOVE THE WRITE-PROTECT TAB. THEN PRESSSPACETO CONTINUE. 찠찠贠찠贠贠굠 굠꽮굠굠 Version 3.40 You will be permitted to make as You will be permitted to make as many coies of this disc as you want many coies of this disc as you want Try *ENABLE & *BACKUP !!!!!!! These utilities are designed to help produce BACKUP COPIES of all disks. These are FOR use to produce UNAUTHORISED or PIRATE COPIES ofANYdisk ANY 𠠃 REMOVE THE SYSTEMS DISK ꠠ REMOVE THE SYSTEMS DISK ꠠ PRESS THE SPACE-KEY TO CONTINUE SELCOPYFORM40 COPIER Copy80 RESTORECMOVE SHADOW SHAD SHINST ENV SNARFERDCAT5 RECOVERUNLOCK PACK XREF LISTER DSERCH DSEC BACKUP VERIFY ROMCOPYSPEECH WORDWISMFUNC Y #+((#_## #<}.}. # ̺#̹#u ̯#̝v#̚#̗ s #̂# x@#o#K\@#6W((U#AU`# #b 7 12,129,136,77,65,76,70,85,78,67,84,73,79,78,10,10 )*SAY WARNING .. MALFUNKSHUN IN SISTUM L L0 WORDWISE1.17(C)1982 COMPUTER CONCEPTSH L!HH) >:hhh(`hhh(`{QPxR STPL d {LhH Xƍ! ! <  !L )NO>z {z{y}Ȍ{{~xȄ|{pBꨌ{{qz>pz) Ч{{~(~)  ᢠ   ! < *!1: :L ! !  :L ! * L!rp=qpr pqL c4  < *L !L:H   hLX (%~ x   +7 7~   7 xxxȄ~L8 (%~x FL5ȱxɁx F~ 0 9 7 0p кL7j "m "tji "n "vjkkh i +k`HHjȱ , - -hh`)L"h`i`D 91 7L#8pvqw ?$? 5ƂL# _#vɁ(8prqsvpwqxtyu ;rxsyL'$8{r{{s{{{`dȩz # & 0+dp`qa 0 #L#d'8xpyqt`d # 0p`qa 0pbqc`)00L$ {#d2 (%pfqg`paq 1 # 3$ _# [$fpgq 1L'$ 3$ _# [$ .7 H5 ;L418b`ca`B <  G2 41)Y`xbixciy(8`paqbrcsxtyu ;rxsy)υ`)00$ (% {#d  $` $`H < 48`~`x (%8ptfqug~ zr{s`zir{isxpyqL; 0 7L(%8xzpy{q8b`caq` ) $F 3%CL$ $rs`ipaiq8btcu ;rpsqfrgs Q&L'$ (%8pfqg`paq 1 # 3%fipgiq 1Lh%xpyqzirx{isyftgu ;rHsH #8bpcqfrgs`itaiu ;hqhp8rHrsHs Q&hqhpL$ &) # [$ &tz 0xpyq 0r{s{`zit{iu ;rxsy`p{q`p1t`pȄpt` .t .vȑ }.epjo The following text gives the operating instructions for the DEBUG and ALL-COPY programs. The disks will run on both 40 and 80 track drives. There is a measure of security incorporated into the disks so it is vital that CEYOU MUST NOT WRITE TO THE DISK. This includes locking or unlocking the files listed in the directory, compacting the disk,deleting or adding new files to the disk. Any attempt to do any one of these will result in corruption of the disk and the programs will not run. You are allowed to make 2 copies of the disk for backup, security copies. The title page of the COPY-ALL program gives the number of copies remaining, and this number decreases as the copies are made. The copies have the number 0 and therefore cannot, themselves, be copied.When the master disk number reaches 0 no more copies are permitted. If you attempt to make a copy when the number 0 is present on the title page, the program will be stopped and the machine cleared. You must REMOVE THE WRITE PROTECT TAB when copying the master disk. If you do not, the program will prompt for this and wait until you do. You MUST allow the copying process to continue, once it has started copying the master disk. If you interupt it, you will have lost that copy. When copying the master disk make sure you put the correct disks in the correct drives, or if you have a single drive, insert the correct disk when prompted to do so. All disks are dispatched with 2 permitted copies. If you purchase the disk from other sources apart from THE ACME SOFTWARE COMPANY direct, and the number on the title page is less than 2, you must contact the supplier. If you have not read these instructions before you have either corrupted the disk or lost a copy, We will not be prepared to replace the disk. You must put a WRITE PROTECT TAB on the source disk before copying,(apart from the main DEBUG master disk). This is only to protect the disk if you mix up the source and destination disks. CEInstructions for DISK DEBUG Most of the operations are self explanatory. When you boot up the disk it will ask for the drive number. Pressing RETURN gives drive zero, or you can press 0 to 3. The program then searches to?@@O' for 40 track frives?@a0:7)`8`qp *ep& #eqp` 'p ' ' ' '`pqp` #'dp` #'epʊa8e ϰk ө| #'pgHH #' pi eшpŇ 'h:paВH p` #'pc@`L. `1L' #'fp LB' #'jpP #'i #'m #'n #'lҥp` #' %/ p ) /` }."ъ` wȍ( @   B-L( w"` (Lq/`)L. .8` #'heppp ,pސ #'צp֢ #'O %/p /`qtp . ' }.Ƌ 'pL.0pL/IN'TI'CI'LM'OLL'[PL(TS(*BS(9LS'CE'SP(BP(PN)"CP(PC'uDH&DF&JO'NJ( SS'CO( EP(DT)GF(}OC(ZHP(@FP(GDP(NEM(DM(PP&````  -0)00#  < )Y  G2L !$ 0 t0q/xpyqzir{is{t{u ;r{s{{{{i{i)pqt 0pqp{qp /0 @ p/qp`)   HH ,hhh`h)  "LN+ , H -h/8 -Ɂm -`q)@cʊ`q)g + $Ll/ "t:pip0`)L!+  < /L+ -  < Ll/H B-hi ,шh`8fi` !`)@ȱp p ,`-Șш 䱈pkȑp ,)Heшhȑеh  ȱȱ`ƋƊ` }.ɍ ɬ* Ɂ`8`)өHȥȥh .`!dp p B-pL- x-ćLH) B-h0H x-hH  '#`l kш ) h`HH ȱȄ` 7/ .`hhȘ `H`)@h(H  _.h(`) h(H -h(`erĎE L-r5sbItstL.  ps ?.`tć߰Ď֥s` G.r`p ȑLI. ȑ`p8epJqp G.pq`` 7/ }. /`ȱp)$U .L.ȱpuȱptiilt ʊ ȑȩȘ . `p0Ŏ .8`  ,Ƌe` %/8``p)qr)ߤrp)ߤrp`rirp8`~ ƍ!   p{qp{p{q{rz{szit{iu ; L ! i `) LBy Charles Moir FB|`0001 < ne_cf_(ye_-ne_):DDQ @Sye_DJP,DJP,DJP,DJP,tdP,txP,dLP,dVP,d`P,dtP,d~P,THQ,TRQ,T\Q,TzQ J)J%7:DDQye_DTP,DhP,D|P,tPP T te_=te_-ge_*df_:te_<0te_=0 ^ tZP h$te_=te_+ge_*df_:te_>ie_te_=ie_ r tZP |&ue_=ue_+je_*df_:ue_>1020ue_=1020  tZP  ue_=ue_-je_*df_:ue_<0ue_=0 ef_:DDQ J%7ff_  DDQ J%7gf_(pe_)  DDQ cf_(0):DDQ hf_:DDQ 'se_7pe_=0:re_=:qe_>ee_se_=  DDQ le_:DDQ J%=J%:DDQ if_:DDQ jf_:DDQ 7te_=ie_:ue_=1020:ef_:pd_<4*SAVE SCREEN 3000 8000 &!pd_>3*SAVE SCREEN 5800 8000 0 DDQ :(te_=ie_:ue_=1020:ef_::*LOAD SCREEN Dve_ N X ze_ b)kf_:(te_-lf_)4` #L5`ȱ Le4HHH|WA <  hhh`H 4 5C < 4h`hpLx8ՠ 5բdL8xzy{`  q 4!`~ p xֈxL4xʈx{{tHuH ;huht`)00)    H5pL8 H ie_lf_=ie_   af_ ((0)3)=0 ve_:se_ff_gf_(pe_)  ve_:  bf_  df_=0 -:df_=df_+1:oe_$=(11):oe_$<>xe_$df_=20   hf_ 424,0;0;he_;1023;::nf_=-1:24,0;0;1279;1023;5:  ef_ of_,pf_,qf_,rf_  te_fe_of_=98:qf_=ee_-de_ *of_=pe_ 441,-10,149,2:1264,qe_:1,15,0:1264,qf_:1,15,0 >qe_=qf_:re_= Hpe_=of_:se_=pe_>fe_ R \ jf_ fpd_<>0pd_<>4se_7: p&pe_=99:re_=:se_=:sf_=te_:tf_=ue_ z gf_(qd_) se_te_>he_7: uf_(te_,ue_,qd_)  vf_7:   if_  :cf_((9)-1):(100)=" ": cf_(ye_) ae_?ye_=(ae_?ye_+1)8 19,ye_,ae_?ye_,0,0,0   le_ ye_ &pd_=2ye_=914:19,ye_,7,0,0,0: 5ye_=80-1:ae_?ye_=ye_8:19,ye_,ae_?ye_,0,0,0: &pd_=0pd_=4ae_?1=7:19,1,7,0,0,0 $ . ve_ 8&D%=D%:wf_:re_sf_,tf_:te_,ue_ B L ff_ Vse_te_>he_7: `re_re_=:pe_=99:DtS j!0,15:sf_,tf_:te_,ue_:3,15 tsf_=te_:tf_=ue_: ~ wf_ 9re_te_-16,ue_:te_+16,ue_:te_,ue_-16:te_,ue_+16  uf_(te_,ue_,qd_) .qd_>fe_te_,ue_)=0te_,ue_)=15vf_=: #qd_<=fe_te_,ue_)<>0vf_=:  vf_= -X%=te_256:A%=te_256:Y%=ue_4:?ce_=qd_*4 yd_  3,15: o two sections, the first displaying the HEX bytes in 32 rows of 8 bytes each,shown in BLACK letters, and the ASCII by the side, displayed in RED. In the HEX section only VALID HEX BYTES are accepted. ie numbers between 0 and 9 letters between A and F. BP You cannot write to the space between the bytes. Changing part of a byte will automatically change the ASCII part and the cursor will move to the next byte jumping over the space. When it comes to the end of the line, the cursor moves to the beginning of the next HEX byte and will not go into the ASCII section. You can hold down a key and the 'REPEAT' function will fill the screen. If you reach the end of the screen the cursor moves to the start. Changed characters are shown in BLUE. If the HEX byte is not between &20 and &7F then the ASCII position shows '.' To move into the ASCII section use the cursor keys. Writing any character will change the appropriate hex byte on the screen. The cursor is again limited to this section so you cannot oversȱpr ;`lr{p{qsrsiup8&>pq&>qL);py&>p 0 i;ӥp 0 i;s u |$r0 0Hrhts|Ȅst`prptpp8rrsqu`qprpt prsqu`qp) pqpq`zp{q 8pqpp ) pqt e< ;t `p{̥q{ņt֥pHqHQPPQPQ` WORDWISE WORDWISE Supplied by BEEBUG 1) Save entire text ) Load new text3) Save marked text 4) Load text to cursor 5) Search and Replace 6) Print text 7) Preview text 8) Spool textESC Edit ModeWords-' PStart End 'd search string replace string filename choice Please enter Old text? (Y/N)Global or selective? (G/S)Characters free-Are you sure ?  NO ROOM !  Delete to ? Move Cursor to? Word count to? Replace? (Y/N)  MARKERS ? ' Memory full ! Marked section only? (Y/N)Press any key MARKERS ! 'PAPER !777+9778 8C8 888'8256ޠ55551!1##ب%P%V1122J3142l526*7* 8* 5Ɯ""H4+V @V V V W@W WWX@XXXY @YY Y Z @ZZZ[@[[ [\@\\ \] @]]]^ @^^^_@__^ ^ t0ψxEjDhevhUVeˊVxfUvVTefVUDTfVUeVTFDDRXEfwHDS˫hUexxfhfvxgfffffvwfggwfsxXDdXXTvxgfʪvgfeeefffVUUUDwh+DuZ2eVUv͋H"SwffvWDuVuhVUUUUUfVfVUUDefUDTUUvͫhE#2DDUvhUDDTeffUUUUEDTUUEDDTUefgϊ$1uΊVDTeWETuݼhVUefUUfgVU5CyhET%RDTVevhhegwygfUUUTUDET4UUuヒhUTTUUffUUUevhggwvfffffffffffffffffffUUffv˻ݼxhfVUUUUUfefvwhfUUDDDDDDDDTEUe2C4CDUUevܻfVUEDTUUUefxfVUDD4334CUI3gh݋$"X4ThffehUvhVuhffffvgVUvgvfwffVfgxwwgfwwwxwwgfwwwwwwfvwwwwwfvwwxwwwwfffVUUUfΚH$ UfVUU$hxvvhVfVvxwhUuhUfVhuwXUfXexxxvexKuvD]Ixlz´U{xą;GxhfzzgȦ{ڼͻ2E2TUvvwrite the HEX section. Only characters with an ASCII code between 32 and 127 are accepted. If you need to input any others then you must use the HEX section. Changed characters are shown in BLUE. Pressing 'RETURN' returns you to the menu. Pressing 'COPY' prints out the screen. Remember the CHANGE routine does not change the sector on the disk. You have to write to the disk using the WRITE function. (What happens, is that the sector that is read from the disk is stored in a 'buffer' which starts at memory location &C00 (3072)). The change routine only alters the contents of this section of memory while the write routine is used to actually write to the disk. 4) WRITE. You are shown the contents of the buffer on the screen and given 4 options. 4.1 YES. This writes the sector to the disk and uses the existing track and sector number. 4.2 NO. This will return to the main menu without doing anything, the same thing can be achieved by pressing the RETURN key. 4.3 CHANGE. This prompts for a new track and sector number and then returns to the WRITE sub-menu so that you can then choose to write the contents of the buffer to the new sector.You can therefore move sectors around the disk at will. 4.4 DELETE. This will write the sector to the disk as 'DELETED DATA'. This means that it cannot be read normally by the Disk Operating System and, if a program is loaded which contains a sector written in this way, the load will fail and an error message will appear. The only way to read 'DELETRD DATA' is by machine code, using direct access to the 8271 disk operating chip. The facility is used by some to provide some measure of security to a disk. However it was included in the 8271 as part of a sophisticated file handling routine not implemented by Acorn. If a WRITE error occurs this is displayed and it means that the information has not been transfered to the disk. 5) PRINT. Pressing the 'COPY' key will print out the displayed sector when in the READ and CHANGE mode.What it does not do is to print the start track and sector numbers shown on sector 1 of the directory track. 6) MEND. You are prompted for a TRACK NUMBER to be acted upon. It will then reformat the single track, saving the good sectors and then writing them back.The previously unusable sectors are filled with the letter A. CEBE CAREFUL WITH THIS You can destroy the information on the disk so make a backup first. It works most of the time but is not effective if there is physical damage to the disk surface. 7) VEXeHvJ!iDJRHrxU$2OThtVVxvhvgexDTiUvVeDUvͫVE#"CTVEDTUfvxffffVUUUfffVUUUUUEjVsiVfgDhevFugvgeɚYeUgfFTfUVvVUVeEXuUT\FGDUDUTeUxhfVUETDTDUTUDEdTGX׏Տ44ZlUgDXeXeUTUgffUVdFuFYutgvfgfwwywgfgvvgwwxwgwvfgfww:lZXggUUfVvvTUGUefgxxfwxVUVDTEDD˽ffffgxwwwwffUUUUUUUUUUUUeVUUUUEff[tVTu۽FuXEeˊhVvVTxwffVڽVugvvfewfVffUefVefwgJsH#Buh%"Si$2ugfigfffUfxfUUUffffffVEgˬ&RVˋvHDUvgffEuxwvxfUefefffVeVUeVfffC;LU?tYX&wz4ɂ+-v8xzHG;:;dVg'w s^rpDGYXvwffUEAܾECTU$BevVTewfλhefvwxuZKX[hxJJKzLx,KŤ:[IhxLxZx\kxZX-efjffjfgfhjgfffwhYfehvhfhfjvvzfjzfvzjywgfgvvgwwxwgwvfgfwwyvffvxyzhyxxghgzvvxvfgxgvgvwwfvwwxwwfvwwfw͜VDvxVDeVEdhUehVfxVUUUeffVfUUVEefUUgwfwvxvgvwxfvfvgfwgwfwU􏕏#guy)SvfxEeVUvhfUvXeVvhUffwfUVffWV!2DDdwͺˊUe̫hfxWUhf߫hUUvxVffV4"2` `>` υ셐`7`L*BASIC x =pjqyzyypXl*zyp*Hy h Ly` "ȱ"zw 8aXIllegal pitchX`LX`X`y ^8  " y L`   f b b b b yLqa " - LKa   *L f LfpLuerӐѱpɀrL^ertȦyp> Leʊ8yspu~  r 90r~81Wj  0ŀ~ 0 0 Lfr ~ L^eru hhwLgyesyLgs~ ~e~Lof~~erisz8rzLLey  `򅅥󅆩yz~_pjqurppq> *LpgLf  p# LfA [ Lfp_ ݍhLgLfr𛐙pɀrLfrtȦyp#L-h> L:g8ys   up q Lf p q p#srr rruBhhw 憥牢? XMistake in speechyesy?whhXLine too longerisz8rzLfy  `HyHzH_yjzy*2y>#yɀy y> LbhyzL?h8劅ƊhzhyhLLg ,.?'!:/;->duxa5V2E81>aeA71>aaB91>awA9R61>rD70>uxE81>uwE7R61>aoF91>eeG71>lH70>mJ70>ahK71>vL50>/hN41>tO10>pP10>nI70>bM10>kQ10>wR70>ayS9U5T21>yT70>ihU71>ixU51>ja3V3a20>dW10>nxX70>ohY81>oZ81>er[91>sh\60>owY9R51>oyF9U4T21>cha6\3a11>g]10>s^50>f_51>z`50>/a91>thb51>dhc40>/ud81>zhe50>dra2V3D70>tra4\3D70>cta2Q1a1O10>ehf71>uhg71>iyB9U61>aiC91>%a10>j_a4V30> zz1>,a9a20>.i9a50>?h9a50>***speak*pitch*keep*out*say >OUS_/U5S>I#YIY#EE> #ERE #EE5ER>GTH_TH>NGERNXGER>AGE_AYJ>BBCBEE5%%BEESEE>MICROMIY5KROW>O#UOW5#>AUGHAA5F>KNN>#EY_#EEY> OUGHTAO4T>XCKS>YSIH4S> #OUGH_ #AHF>ERY_EH4REE>OUGH_OH5W> SCI SIY>CHNKN>OGYOJEE>IROIYRO>SUPERIORSUX4PEE5RIHAOR>CISIH>TCHCH>GHOTIFIH4SH>UE_UW6> YES_ YEH5S>GUE_G>URE_UH5R>UYIY5>OUGHAH> #IE #IY>OLE_OW4L> ABLE AY5BL>IYIY>AIGHAY>ABLEAHB/UL>CHRKR>ITLEIYT/UL>A#IAY5#>SHALLSHAEL>AREAI5R>A_AH>OEOW5>ANGE_AY4NJ>ANGEAY4NJ/U>/U/U> GET GEHT>IEDAY5D>ALLYAE4LEE>A#AAY#>REATRAY5T>COME_KAHM>OULD_UH5D> ANY EH4NEE>O#OOW4#>O#AOW4#>A#EAY6#>I#EIY5#>A#OAY#>O#EOW5#>U#EIHUW5#>U#AUXW#>TU#ECHUW#> U#E YUXW#>IEEE>U#IYUXW#>OOKUH5K>COWKAW>NGS_NXZ>STIONS%CH/UN>GOOGUH4>HOW/HAW4>NOWNAW>POWPAW5>ERREH4R>DOWDAW4>SES_SIXZ>PROGPROW4G>NGENJ>DO_DUH4W>OUAE4UX> OUR AW5R>OURAO5R> ONE WO4N>AUAO5>OICOYS>O_OW>AVIAY4VIX>ES_S>ULLUH5L>UHUH>FOOTFUH4T>UL_/UL>EFUhe FORMAT program. CEPLEASE NOTE If you are unable to copy a disk try using AN UNFORMATTED DISK as the destination disk. Some programs look to see if certain tracks are unformatted and crash if they are not. 9) ALLCOPY. You are prompted for the source drive number and then for the destination drive number.If you have only 1 drive then put in ZERO in response to both.The screen will then show your choice and if this is not correct, press RETURN to do it again.You then have the option of :- 1) An EXACT COPY. Choose this to backup protected disks. This reformats the destination disk to be the same as the original and then copies every sector. You can use either a formatted or unformatted disk as the destination disk but a few programs need an unformatted disk to start with. Some times you can unformat a disk by running a magnet over it. 2) A COPY WITH MEND. This will copy all good sectors to a normally formatted disk and fill the sectors it cannot recover with the letter 'B'. Use this to recover damaged disks and then use the copy to try and recover the programs. This will also transfer the programs from a protected disk onto normal Acorn format and also read some TANDY software. This is of limited use unless you have a detailed knowledge of the disk filing system. The ACORN DISK MANUAL has some information and BEEBUG has published a lot about this subject. ALL-COPY will copy EVERYTHING that I have seen at the present time. ie 4.4.1984. However I cannot forsee the future and I am sure that other security systems will evolve. If you get a disk it can not copy then contact me BASIL BLOOM ACME SOFTWARE 2 BYEWAYS TWICKENHAM MIDDLESEX 01 894 7149 I will try to help but cannot guarantee success. However please telephone me beforehand if you have any problems, and if you do send disks to me, RETURN POSTAGE is required. If you have an 80 track drive and you want to backup a secured disk which is in 40 track format, proceed as follows. You must have both a 40 and 80 track disk drive connected and then simply do an exact copy from the 40 to the 80 track drive after setting up the ALLCOPY program for 40 track disks. 10) FORMATTER. This will Format up to 4 drives consecutively with either 40 or 80 tracks.40 and 80 track disk drive connected and then simply do an exact copy from the 40 to the 80 track drive after setting up the ALLCOPY program for 40 track disks. 10) FORMATTER. This will Format up to 4 drives consecutivelL_F/UL>EASE_EEZ>DGJ>OAOH5W>GENJEH5N>LE_/UL>YPEIY4P>TLETL>IGIIX4JIH>WHO/HUHW>NIONNIX/UN>WAS_WOZ>ORE_AO4R> TO_ TUX5>ALKAORK> BE_BEE5>TIOSHAH>YE_IY>ARAA5>AFAA4F>ASTAA6ST>E_%>GHOGOH4W>AZYAY5ZEE>WHAWO5>WATWAO6T>ALLAO4L> OF_ O5V>SSS>FFF>CE_S>CESEH4>TIASHIX/U> A_ AY>MB_M>A#YAIIX#EE>THE_DH/U%> ARE_ AA5R>Y_EE>SIOZH/U> I_ IY6>OWOW>AWAW>WHW>TT> WOR WER5>WRR>ISMIX5Z/UM> ME_ MEE5>GG>DD>PP>BB>WOOWUH> GI JIY>YOU_YUW>AIAY4>IGHIY4>IRER6>UALY/UL>EWIHUW>URER5R> MY_ MIY>AAE>IIH>KK>CK>WW>FF>ZZZ>ORIAORIX4>SS>ZZ>VV>LL>YY>RR>MM>NN>UAH>OO>JJ>H/H>PHF>EUIHUH4>OOUX>EEEE6>MMM>NNN>AIRAIR>EREAIR>ERER>ORAOR>LLL>CKK>EEH>THTH>TTT>DHDH>NG_NX>NGNXG>QUKW>SHSH>ZHZH>OHOH>XKS>CHCH>PPP>AYAY> IS_ IX6Z> SC S>OORAO5R>RRR>OIOY5>OYOY> AS_ AEZ> WITH_ WIX5DH>HE_/HEE6> HAVE_ /HAE5V> BY BIY3> THIS DHIXS> WE_ WEE5> THEY_ DHAY4> HAS_ /HAEZ> THEIR_ DHAI4R>DDD> THAN_ DHAE6N>BBB>GGG> ONLY_ OW5NLEE> PEO PEE4> SHE_ SHEE5>OTHERAHDHER> SAID_ SAI6D>QK> SOME SAH5M> THEN_ DHEH5N>AR_AA5R> MOST_ MOW4ST>ARRAE5R>URRAHR>ORROR>PLYPLIY>EYAY>EAEE5>SCRSKR>0ZIH5R4OW>:.>;?>1WO5N>2TUH4W>3THREE5>4FAO5R>5FIY5V>6SIH6KS>7SEH5V/UN>8AY5T>9NIY5N>-/> >,,>..>??>' >!,>/,>**  *TV255  7  =&3C00  rom$(15,1) ( name% 250,M% 100 2 init < header FO 5,12)"DO YOU WANT INSTRUCTIONS ?";::G$=: G$="Y" G$="N":5,12)(30) P G$="Y" inst Z d5 0,7)"No. ROM TITLE TYPE No. ROM TITLE TYPE" n N%=015:name: x H%=916 s 0,H%);H%-9;4,H%);rom$(H%-9,0);15,H%);rom$(H%-9,1);21,H%);H%-1;25,H%);rom$(H%-1,0);36,H%);rom$(H%-1,1): \ :0,18)"DO YOU REQUIRE FURTHER DATA ON ANY OF THE ROMS ?";::G$=: G$="Y" G$="N"  G$="Y" info G$="N" *FX15,0 H 0,18)"ENTER THE NUMBER OF THE ROM THAT YOU WISH TO COPY:_ " E% y E%<0 E%>15 (129)" INVALID ROM No."'" Press SPACE BAR to continue": (-99):0,18) (155): tj@ ȟ rom$(E%,0)="SPARE" (129)" THERE IS NO ROM IN THIS SOCKET"'" Press SPACE BAR to continue": (-99):0,18) (155): tj@ 18,19)rom$(E%,0) *FX15,0 % 3,20)"ENTER FILE NAME:_ "name$ 5 (name$)<1 (name$)>10 0,20) (75):d\@ name$," ")<>0 (129)"THE FILE NAME MUST NOT CONTAIN SPACES"'" Press SPACE BAR to continue": (-99):0,20)(120):dR@ length  rom_ram > $M%="SAVE"+" "+name$+" "+"3C00"+"+"+~(L%*256)+" "+"3C00"  X%=M% 256:Y%=M% 256 " &FFF7 ,' "DO YOU WISH TO COPY The following text gives the operating instructions for the DEBUG and ALL-COPY programs. The disks will run on both 40 and 80 track drives. There is a measure of security incorporated into the disks so it is vital that YOU MUST NOT WRITE TO THE DISK. This includes locking or unlocking the files listed in the directory, compacting the disk,deleting or adding new files to the disk. Any attempt to do any one of these will result in corruption of the disk and the programs will not run. You are allowed to make 2 copies of the disk for backup, security copies. The title page of the COPY-ALL program gives the number of copies remaining, and this number decreases as the copies are made. The copies have the number 0 and therefore cannot, themselves, be copied.When the master disk number reaches 0 no more copies are permitted. If you attempt to make a copy when the number 0 is present on the title page, the program will be stopped and the machine cleared. You must REMOVE THE WRITE PROTECT TAB when copying the master disk. If you do not, the program will prompt for this and wait until you do. You MUST allow the copying process to continue, once it has started copying the master disk. If you interupt it, you will have lost that copy. When copying the master disk make sure you put the correct disks in the correct drives, or if you have a single drive, insert the correct disk when prompted to do so. All disks are dispatched with 2 permitted copies. If you purchase the disk from other sources apart from THE ACME SOFTWARE COMPANY direct, and the number on the title page is less than 2, you must contact the supplier. If you have not read these instructions before you have either corrupted the disk or lost a copy, We will not be prepared to replace the disk. You must put a WRITE PROTECT TAB on the source disk before copying,(apart from the main DEBUG master disk). This is only to protect the disk if you mix up the source and destination disks. Instructions for DISK DEBUG Most of the operations are self explanatory. When you boot up the disk it will ask for the drive number. Pressing RETURN gives drive zero, or you can press 0 to 3. The program then searches to see what size drive is in use and the disk size is then displayed on the screen. Some times the disk i ANY MORE ?"; 6 DZ@ @ G$="N" J T ^ name h( ?(Q%+N%)=0 rom$(N%,0)="SPARE": r A%=N%:X%=0:Y%=1: name% | rom$(N%,0)=$(M%+1) % rom$(N%,0)="" rom$(N%,0)="?" 4 (rom$(N%,0))>10 rom$(N%,0)=rom$(N%,0),10) K (?M%>&3F ?M%<&80) ?M%>&BF rom$(N%,1)="LANG" rom$(N%,1)="SVCE"   init  I%=022  P%=name%  [ OPT I%  STA &FE30  LDA &8006  STA M%  .sta LDA &8009,X  CMP #0  BEQ end  CLC  CMP #&7F & BCS end 0 SEC : CMP #&20 D BCC end N STA M%,Y X INX b INY l JMP sta v .end LDA #&D  STA M%,Y  LDA &F4  STA &FE30  RTS  .present JSR &FFF4  STY &70  STX &71  RTS  .move STA &FE30  .stb LDA &77  CMP &71  BEQ fin  LDA (&72),Y  STA (&74),Y  CPY #&FF  BNE old  INC &73 * INC &75 4 INC &77 > .old INY H JMP stb R .fin LDA &F4 \ STA &FE30 f RTS p .length STA &FE30 z .stc LDA (&72),Y  CMP (&74),Y  BNE inc_page  INY  CPY #&FF  BNE stc  JMP don  .inc_page INC &75  INC &71  LDY #0  LDA &71  CMP #&40  BNE stc  .don LDA &F4  STA &FE30  RTS  .information STA &FE30 $.std LDA &8000,X . CMP #0 8BEQ version B .back CLC L CMP #&7F V BCS space `SEC j CMP #&20 t BCC space ~ .store STA M%,Y INX INY  CPY #&4F  BEQ comp  JMP std .space LDA #&20  JMP store .cop LDA #&20  STA M%,Y  LDX &8007  .cop2 INX INY  CPY #&4E  BEQ comp LDA &8000,X  CLC ( CMP #&7F 2 BCS comp < SEC F CMP #&20 P BCC comp Z STA M%,Y d JMP cop2 n.comp LDA #&D x STA M%,Y  LDA &F4  STA &FE30 RTS  .version CPX &8007  BEQ cop  JMP back  ]  ! A%=170:X%=0:Y%=&FF: present  Q%=?&70*256+?&71   rom_ram  A%=E%:X%=0:Y%=0 / LENGTH,LOAD ADDRESS,SAVE ADDRESS,COUNTER A ?&70=0:?&71=L%:?&72=0:?&73=&80:?&74=0:?&75=&3C:?&76=0:?&77=0  move " , length 62 ?&70=0:?&71=1:?&72=0:?&73=&80:?&74=0:?&75=&81 @ A%=E%:X%=0:Y%=0 J length T L%=?&71 ^ h info r$ 0,20)"ENTER THE ROM No.:_ "E% |x E%<0 E%>15 (129)" INVALID ROM No."'" Press SPACE BAR to continue": (-99):0,20) (150):DrF  rom$(E%,0)="SPARE" (129)" THERE IS NO ROM IN THIS SOCKET"'" Press SPACE BAR to continue.": (-99):0,20)(150):DrF  A%=E%:Y%=0:X%=9  information . $M%;'" Press SPACE BAR to continue."  (-99)  0,18)(239)   inst ֪ 2,8)"With the innovation of sideways_Ram boards,for the B.B.C Micro it is desirabs misread and the size is incorrect. If this happens, press 'D' from the menu and when asked for the drive number press '4' for 40 track drives or '8' for 80 track drives. This will reset the disk size but not the drive number. The MAIN MENU is then displayed, in red, on the right of the screen. You must then press the first letter of the option you require. Pressing RETURN without any other input will always return you to the main menu. The options are as follows:- 1) Drive To change drives at any time go to the menu and press D. You will then be asked for the drive number. Only 0,1,2 or 3 will be accepted and the drive will the be initialised to find out the disk size. You MUST have a disk in the selected drive. If you wish to alter the disk size only then press '4' for 40 track drives '8' for 80 track drives. 2) READ. 2.1 This prompts for the track number. You can access a track directly by typing in a number between 0 and 39 (or 79 for 80 track disks ). Single figure numbers can be put in as either '01' or '1 and RETURN'. Two figure numbers are accepted without the need to press the RETURN key. 2.2 You are then prompted for a Sector number between 0 and 9. Pressing the RETURN key is not required. 2.3 Pressing 'D' gets the first directory sector. ie track 0 sector 0. 2.4 The CURSOR keys are used to move either one sector, or one track, forwards or backwards. The LEFT Cursor moves 1 Sector BACKWARDS. The RIGHT Cursor moves 1 Sector FORWARDS. The UP Cursor moves 1 Track BACKWARDS. The DOWN Cursor moves 1 Track FORWARDS. The program then prints the sector on the screen with the ASCII equivalent by the side. On track 0 sector 1, I have changed it to show the starting track and sector numbers of the programs. Pressing the 'COPY' key will print out the displayed sector. It is normally configured for a Centronics Interface. If a READ FAULT occurs, the screen goes RED and an error message is displayed. This should say what the error is. Press the SPACE bar to continue. If the error was such that NO information could be read from the disk, the screen will show THE CONTENTS OF THE PREVIOUS SECTOR ACCESSED. This is not necessarily what is on the sector. Sometimes only part of the information is read (this usually comes up with DATA ERROR) and in this case the display will show whatever was read from the sector.le to be able to take a copy of your Rom based programs for use in these boards."; "The program contained on this tape/disc will enable the user to copy to tape or disc,Rom based programs.Rom positions and Titles being recorded on screen for reference.In some instances Roms will not identify themselves,"; j"additional information will however enable the user to identify the Rom and it's version number." ( '" PRESS SPACE BAR TO CONTINUE";  (-99)   header & : I%=06:0,I%)(131);(157): &> K%=23:7,K%)(129);(141);"R O M R E C O R D E R": # : '{ 11,20);(148);(253);(253);(253);(253);(253);(253);(253);(253);(253);(253);(253);(253);(253);(181): 'y 11,21);(148);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(181): '${ 11,22);(148);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(181): '.z 11,23);(148);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(255);(181): '8{ 11,24);(148);(191);(191);(191);(191);(191);(191);(191);(191);(191);(191);(191);(191);(191);(181): 'B om$(////// )Disk verifier 1.00 ))Р) ))  桥 )0 Bad drive4 ) Press 'Y' to verify drive ))) ) : )Escape)_Y N )L )Y Verifying drive) ) ))~ )8 )))) )) )ՠ) )) )Verify error) ? ))L ) ) Disk verified - repeat (Y/N) ?L(hhH梱) (hl)))LHJJJJ )h) ii0 `)_*iDRIVE H梱) d" **************************** n UTILITY PROGRAM TO ARCHIVE x THE CONTENTS OF A COMPLETE  DISK TO TAPE   (C) J. ANSELL 1983 " **************************** Q7: I%=1 2:129157135141" BACKUP DISK TO TAPE"::15,28,0,24,39,3  ::D^A PAR% 20  BUF% 12800 XY% 60 *"Archive disk in drive 0?";:S$=:S$  S$<>"Y" S$<>"y" D^A '"Tape filename?"NAME$ '"RECORDthenRETURN"S$:' *T.  FILE%=0 7  TRACK%=0 4 9ACCESSDISC(&53,TRACK%+FILE%*5,0,BUF%+TRACK%*2560,10) " ,@S$="*SAVE "+NAME$,8)+(FILE%+100),2)+" "+~(BUF%)+" +3200" 6*FX138,0,13 @ S$ J T dR@ ^*D. c26 h r* ACCESSDISC(COM%,TR%,SEC%,ADD%,NUM%) | COMM% - COMMAND  TR% - TRACK  SEC% In the case of errors, try to reread the sector and reset the drives by reading the directory sector before giving up. The MEND function will usually be able to reformat the individual sectors. 2.5 By pressing the '*' when asked for a track number, you enter a special routine which allows you to enter any track or sector number. 2.51 You are first prompted for 'ACTUAL TRACK NUMBER' This is the actual physical track you wish to read and must NOT be larger than 39 for 40 track disks or 79 for 80 track disks. If you put in bigger numbers here then you risk damaging the drives. 2.52 'FALSE TRACK NUMBER' This is the track number in the ID Field and may be the same as the actual track number. 2.53 'SECTOR NUMBER' This is the sector number displayed in the ID field and can be any number between 0 and 255. The 'RETURN' key must be pressed after each. The figures you enter are NOT checked to see if they fall within the normal parameters. This facility is useful to read the track and sectors with extraordinary numbers . See the section 'ID READ' for more information. But, as an example, say that after doing an IDREAD track 20 has an ID track number of 45 with sector numbers ranging from 123 to 132. You would put in 20 as ACTUAL TRACK No. 45 as FALSE TRACK NUMBER 123 as SECTOR NUMBER. This would then read the sector.HOWEVER you cannot Rewrite this type of sector back to the disk. 3) CHANGE This displays the last sector called and homes the cursor to the top left byte. This can be moved by using the cursor 'ARROW' keys. I have arranged it so that the cursor will 'wrap around' the screen, moving from the end of one line to the beginning of the next. The screen is divided into two sections, the first displaying the HEX bytes in 32 rows of 8 bytes each,shown in BLACK letters, and the ASCII by the side, displayed in RED. In the HEX section only VALID HEX BYTES are accepted. ie numbers between 0 and 9 letters between A and F. You cannot write to the space between the bytes. Changing part of a byte will automatically change the ASCII part and the cursor will move to the next byte jumping over the space. When it comes to the end of the line, the cursor moves to the beginning of the next HEX byte and will not go into the ASCII section. You can hold down a key and the 'REPEAT' function will fill the screen. If you reach the end of the screen the cursor moves to the start. - START SECTOR  ADD% - DATA ADDRESS  NUM% - NUMBER OF SECTORS  ASSUME DRIVE 0  ?PAR%=0 PAR%!1=ADD%  PAR%?5=3 PAR%?6=COM% PAR%?7=TR% PAR%?8=SEC% PAR%?9=&20 NUM%  PAR%?10=0 X%=PAR% 256 Y%=PAR% 256  A%=&7F & &FFF1 0) PAR%?10<>0 "ERROR,"~PAR%?10:txA : "AR%@_ES* PUF%XUF%_SYSTEMDSERCH DISASS RESTOREBACKUP ALTDIR SPOOLERPRO_DISUNLOCK REASS DSEC SDUMP LISTER ROMDIS FIND POUT PACK MONITORPALL RECOVERR  Disc Sector Editor  M.Ball/BEEBUG (c) 1983  VERSION 1A  =+8-( 8)  blc% 256,dir% 256,blk% 12 #D%=0:rcd%=0 ( rwr%= -hex$="0123456789ABCDEF" 2TRK%=0:SCT%=0:RSCT%=0 7fnm$=10," ") <A$=16," ") A F 5 K intro P 0 U19,0,6;0;19,1,0;0; Z23,0,10,0,0;0;0; _ d.20,2)"D I S C S E C T O R E D I T O R" i *FX4,1 n *FX12,4 s x } dM@ sget read(TRK%,SCT%,blc%) Q rcd%<>0 1,-15,10,20:40,5);"Disc error ";rcd%:ty@ 40,5); 20," ") dump edit wd # rwr% write(TRK%,SCT%,blc%) 28,0,31,79,0 X rwr% rcd%<>0 1,-15,10,20:40,5);"Disc error ";rcd%:tQ@ 40,5); 20," ") wd D rwr% "S e c t o r r e w r i t t e n":1,-15,150,5:A=(300)     End of Program 6:*FX4,0 *FX12,0 *FX229,0 7 :" at ";   wd  28,0,31,79,24:    read(trk%,sect%,blc%)  blk%?6=&53  ioset rcd%=blk%?10   " write(trk%,sect%,blc%) 'blk%?6=&4B , ioset 1rcd%=blk%?10 6 ; @ ioset E#rcd%=0 : ?blk%=D% : blk%!1=blc% Jblk%?5=3 : blk%?7=trk% Oblk%?8=sect% : blk%?9=&21 TX%=blk%256 : Y%=blk%256 YA%=&7F : &FFF1 ^ c h dump m 28,0,22,79,6: r E%=blc% wF%=blc%+256 |@%=2  ~E%-blc%;: " : ";  A$=""  X%=E% E%+15  Y%=?X% 0 (Y%<32)(Y%>122) A$=A$+"." A$=A$+(Y%) ) Y%>15 ;~Y%;" "; ;"0";~Y%;" ";   "*"A$"*"  E%=E%+16  E%=F%    sget RSCT%=TRK%*10+SCT% wd -"Hit 'N' for next sequential sector, or" <"TAB to required input field, overtype and hit return." S'"TRACK/SECTOR (Dec)";(4);"RELATIVE SECTOR (Hex)";(11);"FILENAME (dir.name)" (4);TRK%;",";SCT%;29);~RSCT%;54); ' fnm$,1)="*" fnm$ 20," ")  11: 4);:C%=4:fnm$="" +A=: A=9 (+25)75,4);:C%=:doA 2 A=13 A=27 A=127 (A>134 A<140) doA D A=78 A=110 RSCT%=RSCT%+1:TRK%=RSCT%10:SCT%=RSCT%10:TWB !A$=(A): A$;(10);10,(8));  "" ASK$:A$=A$+ASK$ oChanged characters are shown in BLUE. If the HEX byte is not between &20 and &7F then the ASCII position shows '.' To move into the ASCII section use the cursor keys. Writing any character will change the appropriate hex byte on the screen. The cursor is again limited to this section so you cannot overwrite the HEX section. Only characters with an ASCII code between 32 and 127 are accepted. If you need to input any others then you must use the HEX section. Changed characters are shown in BLUE. Pressing 'RETURN' returns you to the menu. Pressing 'COPY' prints out the screen. Remember the CHANGE routine does not change the sector on the disk. You have to write to the disk using the WRITE function. (What happens, is that the sector that is read from the disk is stored in a 'buffer' which starts at memory location &C00 (3072)). The change routine only alters the contents of this section of memory while the write routine is used to actually write to the disk. 4) WRITE. You are shown the contents of the buffer on the screen and given 4 options. 4.1 YES. This writes the sector to the disk and uses the existing track and sector number. 4.2 NO. This will return to the main menu without doing anything, the same thing can be achieved by pressing the RETURN key. 4.3 CHANGE. This prompts for a new track and sector number and then returns to the WRITE sub-menu so that you can then choose to write the contents of the buffer to the new sector.You can therefore move sectors around the disk at will. 4.4 DELETE. This will write the sector to the disk as 'DELETED DATA'. This means that it cannot be read normally by the Disk Operating System and, if a program is loaded which contains a sector written in this way, the load will fail and an error message will appear. The only way to read 'DELETRD DATA' is by machine code, using direct access to the 8271 disk operating chip. The facility is used by some to provide some measure of security to a disk. However it was included in the 8271 as part of a sophisticated file handling routine not implemented by Acorn. If a WRITE error occurs this is displayed and it means that the information has not been transfered to the disk. 5) PRINT. Pressing the 'COPY' key will print out the displayed sector when in the READ and CHANGE mode.What it does not do is to print the start track and sector numbers shown on sector 1 of the directory track. 6) MEND. You are promptek=  - C%=54 ipfn C%=29 iprl ipts  ok 7:dLA E26:0,5)"Drive:";D%;(3)"Track:";TRK%;(3);"Sector:";SCT%;(4);  ! & ipfn + fnm$=A$ 01(A$)<3 A$,2,1)<>"." fnm$="*INVALID*": 5read(0,0,dir%) :?DIR$=A$,1):F$=A$,3,7):(F$)<>7 F$=F$+6," "),7-(F$)) ? off=0 D I%=dir%+8 dir%+248 8 I-svd=I%?7 : I%?7=&0D : fnt$=$I% : I%?7=svd N> (F$=fnt$) (DIR$=(svd &7F)) off=I%-dir% : I%=99999 S I% X" off=0 fnm$="*NOT FOUND*": ]read(0,1,dir%) bI=dir%+off+6 g!RSCT%=(?I &01)*256 + ?(I+1) lTRK%=RSCT% 10 qSCT%=RSCT% 10 vok= {   iprl RSCT%=("&"+A$) TRK%=RSCT% 10 SCT%=RSCT% 10 ok=    ipts  A$=A$+13 4I%=1(A$):A%=138:X%=0:Y%=(A$,I%,1)):&FFF4: 4,4);:""TRK%,SCT% ok=    edit wd C"Edit as required. COPY to rewrite sector, RETURN to abort.";  28,6,22,70,6,30  *FX229,1  K%=  K%=13 rwr%=:TeC  K%=135 rwr%=:TeC  K%<32 TeC / K%=136 (>0)((=0)(>0)) 8:TeC 2 K%=137 (<15)((=15)(<64)) 9:TeC ! K%=138 <15 10:TeC  ! K%=139 <>0 11:TeC ! Not a control char, so this $ must be attempt to alter data. ! (<47)(s_ch<>" ") xhex   (>48)(<65) xchr % (K%=13)(K%=135) *6 K%=13 : 15,8)"E D I T I N G A B O R T E D" / *FX229,0 4 9 > ݤs_ch C A%=135 H C%=((&FFF4) &FFFF) &100 M =(C%) R W xhex \& hex$,(K%))=0 1,-15,100,8: acux=:cuy= f Now alter screen k K%,8 p+ ( 3)>0 8 : Move to left digit uldig$=s_ch z 9 rdig$=s_ch  Get new value for byte -new%=(hex$,ldig$)-1)*16 + hex$,rdig$)-1  Get offset within sector ofs%=*16 + ( 3) blc%?ofs%=new%  Get posn of char on screen cpos%=49+( 3) " 31,cpos%, : Posn for print / (new%<32)(new%>122) ".";: (new%);  31,cux,cuy  9    xchr cux=:cuy=  Get offset within sector ofs%=*16 + -49 blc%?ofs%=K%  Get posn to print hex cpos%=(-49)*3  31,cpos%, ) K%>15 ;~K%;" "; ;"0";~K%;" ";  31,cux,cuy ) (K%<32)(K%>122) ".";: (K%);    intro  129:  28,2,29,17,2  130:  28,4,27,15,4  131: $ 565,850 )0,0 .'1,150,0:1,0,-80:1,-150,0:1,0,80 3(0,20,-40:1,110,0:0,-72,28:0,34,0 8*81,0,-53:0,-34,0:81,0,53:0,-29,-48 =0,1 B$65,0,0:65,4,0:65,0,4:65,-4,0 G/0:4,5)"DISC"'3,7)"SECTOR"'3,9)"EDITOR" L.'''''" Drive? ";:A$=:D%=d for a TRACK NUMBER to be acted upon. It will then reformat the single track, saving the good sectors and then writing them back.The previously unusable sectors are filled with the letter A. BE CAREFUL WITH THIS You can destroy the information on the disk so make a backup first. It works most of the time but is not effective if there is physical damage to the disk surface. 7) VERIFY. This goes through every sector and prints out the bad ones with the error codes. Pressing RETURN will stop and return you to the main menu. 8) I.D READ. This displays the contents of the 'ID' section of each sector. This is a group of bytes giving information about each sector and it is displayed for each track.The screen shows the ACTUAL TRACK NUMBER on the first line. The ID fields are the displayed in 4 columns. Col. 1 Track Number. This should be the same as the ACTUAL TRACK NUMBER on the first line. (Any other numbers will not be read by the DFS). Col. 2 Head Number. This is usually ZERO but any number is permitted. Col. 3 Sector Numbers. These are normally 0-9 and run consecutively. (Any number between 0 and 255 is permitted but will not be read by the DFS). Col4 Sector Size. This should be equal to 1. ( 0=128 byte sectors 18 to a track) ( 1=256 byte sectors 10 to a track) ( 2=512 byte sectors 5 to a track) ( 3=1024 byte sectors 2 to a track) ( 4=2048 byte sectors 1 to a track) If there are any other numbers then either the disk is formatted incorrectly OR it is a protected disk and the unusual ID field is part of the protection. The screen will show 19 lines of data but this does not mean that there are 19 sectors! Normally there are only 10 sectors per track but it is possible to format up to 18 sectors per track. If one reads the ID of more sectors than are present then the sector numbers will repeat. One can then work out how many sectors are actually present. eg for 10 sectors per track the sector column will show:- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 ^ ^ You can see that 0 repeats after 10 numbers. Also the numbers will always be in sequence but they will not necessarily start with the smallest number. eg 5 6 7 8 9 0 1 2 3 4 5 6 7 8 After the first track has been displayed pressing the space bar will display the next sector. Pressing 'CURSOR DOWN KEY' will display 10 tracks on. Pressing 'P' will tur(A$):A$=(D%) Q V6cm(A$):$blc%=A$:X%=blc%256:Y%=blc%256:&FFF7: %R+f-lc%Z+     ? #('( ) *+,0%12 d Program DSERCH Version 1A n DISC SECTOR STRING SEARCH x C.N.OPIE BEEBUG October 83  tdA "listasm=:listasm=3+(listasm) &7:@%=2:tmp1=&70:tmp2=&71:tmpy=&72 ( blc% 256,blk% 12,str% 80,code% 100 * flag% 1,blklen% 1,tlen% 1,bchklen% 1 #blk%!1=blc%:blk%?5=3:blk%?9=&21 vert%=0:printer=  assemble:title:collect 'rcd%=0:blk%?6=&53:blk%?7=0:blk%?8=1 6X%=blk%256:Y%=blk%256:A%=&7F:&FFF1:rcd%=blk%?10 1 rcd%<>0 1,-15,10,20:"Disc error ":tPA K blc%?7<>&90 blc%?7<>&20 1,-15,10,20:"Unknown Disc Format":tPA " blc%?7=&90 tr%=40 tr%=80 "17,2);129;tr%;" track disc" ")17,3);134;"Track:";(5);"Sector: " ,! TRK%=0 tr%-1: SCT%=0 9 6828,0,24,39,0:25,3);TRK%;37,3);SCT%:28,0,24,39,7 @"rcd%=0:blk%?7=TRK%:blk%?8=SCT% J6X%=blk%256:Y%=blk%256:A%=&7F:&FFF1:rcd%=blk%?10 T@ rcd%<>0 1,-15,10,20:0,vert%);129;"Disc error ":txA ^?blklen%=255 h' search: ?flag%>0 report:DhA rSCT%,TRK% | 0,vert%);'129;"Finished"' 28,0,24,39,0    End of Program   7:3 :" at ";    assemble * pass%=0 listasm listasm:P%=code% [OPT pass%  .search LDY blklen% INY .s2 & LDX #0 0LDA str%,X :CMP blc%,Y D BEQ check NINY XCPY bchklen% b BEQ s3 l BCS s3 v JMP s2 .s3  LDA #0  STA flag% RTS \  .check  LDA #1  STA tmp1  STA tmp2  STY tmpy .c1  CMP tlen%  BEQ found  INC tmp1  INY INX  LDA str%,X *CMP blc%,Y 4 BNE c2 > LDA tmp1 H JMP c1 R.c2 \ LDY tmpy fINY p JMP s2 z .found  LDA #1  STA flag% STY blklen% RTS ]  ::   report  printer 2 ;@%=2:5,vert%);TRK%;3);", ";SCT%;24);~(10*TRK%+SCT%) 3 1,-15,150,1:vert%=    collect -1,2);"Drive :";:""D%:D%=D%4:?blk%=D% $F1,3);"String :";:""$str%:K%=($str%):?tlen%=K%:?bchklen%=256-K% .1,4);"Printer(Y/N):";:P$ 8,P$=P$,1): P$="Y" or P$="y" printer= B8,4);(19) L(8,4);":ON";: printer 8:"FF" V ` j title t23;11,0;0;0;0 ~;4,0);141;132;157131;"Sector String Search ";156 <4,1);141;132;157;131;"Sector String Search ";156 0,5);146;38,172) 42,6);134;"Track/Sector(Dec) Rel.Sector(Hex)"  tistasm "n on the printer and all output will be printed until you press 'P' again. This section describes the programs that are chained by the main DEBUG menu. The disk size is passed to these programs and if you only have one size of drive available then this is not important. However if you are running both 40 and 80 track drives, make sure that you access the relevant one at the startup of the DEBUG program or use the DRIVE option to set the correct size before calling ALLCOPY or the FORMAT program. PLEASE NOTE If you are unable to copy a disk try using AN UNFORMATTED DISK as the destination disk. Some programs look to see if certain tracks are unformatted and crash if they are not. 9) ALLCOPY. You are prompted for the source drive number and then for the destination drive number.If you have only 1 drive then put in ZERO in response to both.The screen will then show your choice and if this is not correct, press RETURN to do it again.You then have the option of :- 1) An EXACT COPY. Choose this to backup protected disks. This reformats the destination disk to be the same as the original and then copies every sector. You can use either a formatted or unformatted disk as the destination disk but a few programs need an unformatted disk to start with. Some times you can unformat a disk by running a magnet over it. 2) A COPY WITH MEND. This will copy all good sectors to a normally formatted disk and fill the sectors it cannot recover with the letter 'B'. Use this to recover damaged disks and then use the copy to try and recover the programs. This will also transfer the programs from a protected disk onto normal Acorn format and also read some TANDY software. This is of limited use unless you have a detailed knowledge of the disk filing system. The ACORN DISK MANUAL has some information and BEEBUG has published a lot about this subject. ALL-COPY will copy EVERYTHING that I have seen at the present time. ie 4.4.1984. However I cannot forsee the future and I am sure that other security systems will evolve. If you get a disk it can not copy then contact me BASIL BLOOM ACME SOFTWARE 2 BYEWAYS TWICKENHAM MIDDLESEX 01 894 7149 I will try to help but cannot guarantee success. However please telephone me beforehand if you have any problems, and if you do send disks to me, RETURN POS  Jim Notman 1983 0  dPG '''"FORMATTER FOR PRINTER LISTINGS" (''"Initialising...." 2 init <#0 F S%=4 D$=":0." P> S%<3 ''"Put the program tape into the cassette"'"unit." Z'"File name",ILE$ d9 S%<3 ''"(after rewinding your tape)"''"PRESS PLAY" nZ=(D$+FILE$) x" Z=0 '"FILE NOT FOUND":T|@ }'"Title";FILE$ 8''"rinter (Y/N) ";:P= &DF: P<>89 P<>78 tB@ = P=89 2,15:10)FILE$;MAX-8)"Page ";page' 3,14:''  C%=#Z / C%<>13 3,7:'"NOT A BASIC PROGRAM":#0: %SP%=#Z:#Z=SP%+3: #Z=&DD '' #Z=SP% C%=#Z  C%=255 D|A N%=C%*256 C%=#Z N%=N%+% dw= 5-((N%)));N%;t%); C%=#Z O%=C%-4:R%=0:L%=32   C%=#Z  <6 t%); " C%=&8D textnumber:DTA ,% C%<32 C%=127 control:DTA 6 C%=58 nextline:DTA @ C%=34 quotes:DTA J# C%<127 char(C%) token(C%) T R%=R%+1 ^ R%=O% h' P=89 line=line+1: line>=60 page r #Z |#0 #13,3:''"End of program file." T'"Format another program (Y/N)?";: ( &DF)=89 12:line=1:page=1:T|@ 7:  init  T$(128),E 3  table D$="":MAX=78 A%=0:Y%=0:S%=(&FFDA) &F line=1:page=1:t%=6   textnumber  >(MAX-5) nextline !E=0  C%=#Z & (C% &20)<>0 !E=&80 0 (C% &10)=0 !E=!E &40 : (C% 4)=0 E?1=&40 DC%=#Z &3F N?E=?E C% XC%=#Z &3F bE?1=E?1 C% l;!E;" ";:R%=R%+3: %=32 v  table ?W$=10," "):A%=&8071:$=""::W$=W$+(?A%):A%=A%+1:?A%>&7F %T$(?A%-&80)=W$:A%=A%+2: A%>&835B F I%=0 127: (I%=114 I%=36 T$(I%),1)="(") T$(I%)=T$(I%)+" "    token(C%)  >MAX-8 nextline  C%=140 C%=139 nextline  C%=&E3 C%=&F5 t%=t%+2 ) C%=&ED C%=&FD t%=t%-2: t%<6 t%=6  C%=&D dw=:1,14  <6 t%); T$(C%-&80);  T$(C%-&80),1)=" " L%=32   char(C%)  dw C%=&28 1,20:dw=   >MAX nextline " (>(MAX-5) C%=32) nextline   (C%=32 L%=32) * <6 t%); 4 (C%); > L%=C% H R quotes \ >MAX-5 nextline f 34; p z C%=#Z  <6 t%); , >MAX-5 (C%=32 C%>127) nextline  >MAX nextline ' C%<32 C%>127 control C%;  R%=R%+1  C%=34 R%=O%   nextline  dw dw=:1,20  =t%  R%>O%-2  't%); -L%=32: P=89 line=line+1: line>=60 page   page line=1:page=page+1  1,12 $10)FILE$;MAX-8)"Page ";page' $ . control 8 >MAX-4 nextline B <6 6); L"{";C%;"}"; V  =193 D|A :" @ ";:#0: %initTAGE is required. If you have an 80 track drive and you want to backup a secured disk which is in 40 track format, proceed as follows. You must have both a 40 and 80 track disk drive connected and then simply do an exact copy from the 40 to the 80 track drive after setting up the ALLCOPY program for 40 track disks. 10) FORMATTER. This will Format up to 4 drives consecutively with either 40 or 80 tracks. disk drive connected and then simply do an exact copy from the 40 to the 80 t  FORMATER V2.6  *FX200,3  dtA  7 ( SCREEN < INIT d nF xG::"DO YOU WANT TOFORMAT DISKS OR E ND" A="FE",):A=0tB@ A tD@,tL@ 0 A=!&FFFC:A  F *FX21,0 FLAG=0:A=03:DRIVE(A)=:A :0,2);"THIS IS SET UP FOR ";D%;" TRACK DRIVES":0,4);"THIS WILL FORMAT UP TO 4 DRIVES AT ONCE.":"PLEASE INPUT THE DRIVES YOU WANT TO USE AND PRESSRETURN WHEN FINISHED ORRTO RESTART." Ȕ"PUT THE DISKS TO BE FORMATTED IN THE DRIVES BEFORE YOU PROCEED.":" 0DRIVE0":" 1DRIVE1":" 2DRIVE2":" 3DRIVE3" -A$=:A$=(13)FLAG=0TNAA$=(13)dp@ ) A="0123R",A$):A=0dR@A=5 tt@ HFLAG=1:DRIVE(A-1)=:15,10+A)"DRIVE ";A-1;" TO BE FORMATTED":dR@ "STARTING FORMATTING" * AB=03:DRIVE(AB)= FD(AB):IN  AB  DSEEK(TRACK):H%!1=B%:H%?5=1:H%?6=&69:H%?7=TRACK:&FFF1:?H%=-1: "FORMAT(TRACK):S%=09 ,0K%=B%+4*S%:K%?0=TRACK:K%?1=0:K%?2=S%:K%?3=1 6XS%:H%!1=B%:H%?5=5:H%?6=&63:H%?7=T%:H%!8=&10002A10:&FFF1:H%?12 "FORMATTING ERROR" @ J: T INIT ^3:''''"THIS IS SET UP FOR ";D%;" TRACK DRIVES" h0 DRIVE(3):H%=&900:B%=&C00:A%=&7F:X%=0:Y%=&9 r |6 FD(DRIVE):?H%=DRIVE::"FORMATING DRIVE ";DRIVE T%=0D%-1 @%=4:T%;:@%=&90A SEEK(T%):FORMAT(T%) T%  uIN:I=02524:B%!I=0:I:H%!1=B%:H%!5=&00004B03:H%?9=33:&FFF1:B%!7=10*D%:B%?6=(10*D%)256:H%?8=1:H%?10=0&FFF1  $:X=::" AT ";X:X=0 2000:: SCREEN::X$=255  ""  "" *" h<,$_&0D error(1):D|A B%=#(F%)  %=&FF D|A line%=256*B%+#(F%) len%=#(F%)-4 B%=#(F%)   Statement / B%=32 :read: B%<>32: len%=0 DrA  B%=42 mos:DrA   Element "$ B%=91 ass% assembler:D^A , B%=34 string:D^A 6 B%=38 hex:D^A @ B%>&80 keyword:D^A JA (B%>=64 B%<=90) (B%>=95 B%<=122) variable(0):D^A T read ^ B%=58 len%=0 h B%=58 read r len%=0 | B%=&FF #F%  23,20)"Sorting "  sort 23,20)"Finished "  40,23)"Select Display(D),Print(P) or End(E) "A$  A$=A$,1) & A$="P" 2,21:results(78):6,3  A$<>"D" d~A 4 screen%=80 3:19,0,4,0,0,0,19,1,3,0,0,0 14:results(screen%-2):15  A$="E"  7:*OPT  error(4):tFA &# read:len%=len%-1:B%=#(F%): 0 intro :3 I%=0 1:10,I%)141;box$;"X R E F ";156: D'" This program will produce a cross"'"reference listing of the variables and"'"line numbers in a BASIC program. The"'"contents of REM, DATA and assembler"'"statements are ignored." Nc >31700 :2,9)"40 OR 80 character screen ",screen%: screen%=40 screen%=80 screen%=40 X>2,11)"Enter the name of the program to be analysed "P$ b#'" Load tape containing ";P$' l v assembler  ass%= :read: B%=93 len%=0  B%=93 read   string :read: B%=34  read   hex -:read: B%<48 B%>70 (B%>57 B%<65)   keyword  and DATA * B%=&DC B%=&F4 :read: len%=0:   FN # B%=&A4 read:variable(7):  PROC *# B%=&F2 read:variable(8): 4 GOTO and GOSUB >( B%=141 read:read:read:read: H TOP R B%<>&B8 DzC \ read f B%=80 read: p LISTO z B%<>&C9 tXC  read  B%=79 read:  read   mos::read: len%=0:  variable(type%)  A$=""  A$=A$+(B%)  read A len%=0 B%<48 B%>122 (B%>57 B%<65) (B%>90 B%<95)  type%>0 TdD ! B%=37 read:type%=1:TZD ! B%=36 read:type%=2:TZD  type%=3  B%=40 type%=type%+3 $\ root%(type%-1)=-1 ro"; 0"5 REMOVE THE SYSTEMS DISK j "; 0"5 REMOVE THE SYSTEMS DISK j "; 0" `````````````````````````````````` "; +" PRESS THESPACE-KEYTO CONTINUE"  =" " 7: dnG 7:=&2B00  D@_  *FX200,3  7:*L. SA  *FX15,0  =32 P%=&1700:STORE=&8E:[OPT0:.START LDY#0:LDA#0:.LOOP STA(STORE),Y:INY:BNE LOOP:RTS:.START2 LDY#0:LDA#66:LDX#10:.LOOP2 STA(STORE),Y:INY:BNE LOOP2:INC STORE+1:DEX:BNE LOOP2:RTS:]:I n:2,2);"THIS ISBASIL'SCOPY-ALL PROGRAM":2,3)"IT IS SET UP FOR ";D%;" TRACK DRIVES":0,6)"INPUT THE DRIVE YOU WISH TO COPYFROMIE SOURCE DRIVE (0-3)" %X("0123"+(13)):A=5TzBE%=A-1 N0,9)"INPUT THE DRIVE YOU WISH TO COPYTO IE DESTINATION DRIVE (0-3)" %X("0123"+(13)):A=5TzBF%=A-1 4:0,2)"COPYING FROM DRIVE ";E%;" TO DRIVE ";F% "0,6)"DO YOU WANT(1)AN EXACT COPY WITH THE COPY HAVING UNFORMATED SECTORS OR (2)A FULLY FORMATTED COPY WHICH WILL REPAIR ANY UNFORMATTED SECTORS"'' 6X("12"+(13)):A=3TzB ^a"INSERTSOURCEDISK INTODRIVE";E%;:E%<>F%" ANDDESTINATIONDISK INTODRIVE";F%; _(" PRESSSPACETO PROCEED" r-AA=" "+(13),):AA=07:DrAAA=2TzB AtZA,tnA AC%=0:tsA  AC%=1 T%=0::''''' S(0,E%):E%<>F%S(0,F%)  T%=0D%-18:T%L("SOURCE") r!STORE=&1200:START:!STORE=&1300:START:!STORE=&1400:START:ID(T%):R(T%):L("DESTINATION"):F(T%):W(T%):T% :G:'"DO YOU WANT TOCOPY DISKS OR E ND" NX("CE"):ADn@,DvB vA=!&FFFC:A *RW(ADDR,DRIVE,TRACK,SECTOR,TYPE,SIZE):?H%=DRIVE:H%!1=ADDR:H%?6=TYPE:H%?7=TRACK:H%?8=SECTOR:H%?9=SIZE:TYPE<>&7A H%?5=3H%?5=2 R &FFF1: zL(M$):E%<>F%d^C 7:*FX21,0 2:0,10)"INSERT ";M$;" DISK AND PRESSSPACE"  X(" ")  *FX21,0  DS(TRACK,DV):?H%=DV:H%!1=B%:H%?5=1:H%?6=&69:H%?7=TRACK:&FFF1: dI:H%=&900:B%=&1200:A%=&7F:X%=0:Y%=&9:L%=&1460:N%=&1468:C%=&1470:J%=&1490:JJ%=&1498:DD%=&149F: gF(FT%):?H%=F%:S(0,F%):S%:AT%=FT%FT%+7:"FORMATTING ";AT%;" ":11:Z%=AT%-FT%:S(AT%,F%) FRAC%=1S%=09:K%=B%+76*Z%+4*S%:K%?0=AT%:K%?1=0:K%?3=1:K%?2=S%:S%:Q%=&2A:ttE PL%?Z%=9dHE ZQ%=&20*J%?Z%+JJ%?Z% H%!1=B%+76*Z% EH%?9=Q%:H%?5=5:H%?6=&63:H%?7=AT%:H%?8=&10:H%?10=0:H%?11=10:&FFF1  AT%: eR(RT%):!JJ%=&A0A0A0A:JJ%!4=&A0A0A0A:S(RT%,E%):G%=&2B00:AT%=RT%RT%+7:Z%=AT%-RT%:L%?Z%=9txF dRW(G%,E%,AT%,0,&57,42):"READING TRACK ";AT%;" ":11:H%?10=0L%?Z%=0:N%?Z%=0:J%?Z%=1:txF ot%(type%-1)=v_free%:newname(v_free%) follow(root%(type%-1)) . 8 follow(sub%) B. var$(sub%)=A$ addline(ptr%(sub%,0)): L@ ptr%(sub%,1)=-1 ptr%(sub%,1)=v_free%:newname(v_free%): Vfollow(ptr%(sub%,1)) ` j newname(sub%) tvar$(sub%)=A$ ~ptr%(sub%,0)=n_free% ptr%(sub%,1)=-1 num(n_free%,line%) n_free%=n_free%+1  n_free%>n_lim% error(3) v_free%=v_free%+1  v_free%>v_lim% error(2)   addline(sub%) . lptr(sub%)<>0 addline(lptr(sub%)):  lnum(sub%)=line% ptr(sub%,n_free%) num(n_free%,line%) n_free%=n_free%+1  n_free%>n_lim% error(3)   results(width%) (#"XREF analysis of program ";P$ 2 < type%=0 7 F= A$:I%=(width%-(A$))2:''I%,"-")+" "+A$+" "+I%,"-"); Pprint(root%(type%),width%) Z d '''' n xz INTEGERS,,%,STRINGS,,$,REALS,,,INTEGER ARRAYS,,%(),STRING ARRYS,,$(),REAL ARRAYS,,(),FUNCTIONS,FN,,PROCEDURES,PROC,  print(sub%,width%)  pre$,suf$  sub%=-1 '"None.":  #''pre$;var$(sub%);suf$'" "; I%=ptr%(sub%,0)  * width%-<((lnum(I%))) '" "; ;lnum(I%); I%=lptr(I%)  I%>0 ;",";  I%=0 sub%=ptr%(sub%,1)  sub%=-1   sort " I%=0 7 , root%(I%)=-1 dLF 6  noswap%= JJ%=root%(I%) TK%=ptr%(J%,1) ^ K%=-1 dBF hT var$(J%)>var$(K%) noswap%=:root%(I%)=K%:ptr%(J%,1)=ptr%(K%,1):ptr%(K%,1)=J% rr%=root%(I%) | J%=ptr%(r%,1) K%=ptr%(J%,1)  K%=-1 txF U var$(J%)>var$(K%) noswap%=:ptr%(r%,1)=K%:ptr%(J%,1)=ptr%(K%,1):ptr%(K%,1)=J% r%=ptr%(r%,1)  K%=-1  noswap%    error(err%)  err%=1 '"Format error"; + err%=2 '"Too many variable names"; ) err%=3 '"Too many line numbers"; = err%=4 :;" at line ";'"Input line is ";line%:TfG >" at line ";line%'v_free%;" varables, ";n_free%;" lines." len%=0:B%=&FF &8"Do you want partial result ?(Y/N)"A$: A$<>"Y" 0 : num(sub%,line%) Dlines?(sub%*4)=line%256 Nlines?(sub%*4+1)=line%256 X b ptr(sub%,next%) llines?(sub%*4+2)=next%256 vlines?(sub%*4+3)=next%256  6 lnum(sub%):=lines?(sub%*4)*256+lines?(sub%*4+1) 8 lptr(sub%):=lines?(sub%*4+2)*256+lines?(sub%*4+3) ``T(%,6OU]]]]Y]]]]]] L.O0 MO.6:V.19;4;0  L. CA.&B73 P.;H.-!2A.&FFFF" free" *RUN RUN OLD SPACEs?REMs?COMs? ة^p qp ? )YNt pr|}qsre}rspe|pqwȱpr `|}Ȅ~p{ɍ  6L%?Z%=1:C:(N%?Z%=&FL%?Z%=8)RSEC(E%,&57):dBF G%=G%+&A00  AT%: ID(IT%):S(0,E%):AT%=IT%IT%+7:Z%=AT%-IT%:?H%=E%:H%!1=B%+76*Z%:H%?5=&03:H%?6=&5B:H%?7=AT%:H%?8=0:H%?9=19:&FFF1:"READING ID ";AT%;" ":H%?10<>0L%?Z%=9 11:AT%: QC:M%=B%+Z%*76:I%=0:W%=0724:M%?W%=AT%C%?I%=0C%?I%=M%?W%:M%?W%=0L%?Z%=8 8I%=I%+1:W%:W%=017:C%?W%=C%?(W%+1)U%=U%=:W%=18 3W%:(U%=C%?2=0)N%?Z%=0U%=N%?Z%=1N%?Z%=&F '(M%?3<0M%?W%>4)J%?Z%=1J%?Z%=M%?3  \I%=1:W%=6764:M%?2<>M%?W%I%=I%+1I%>3(I%<4M%?22=M%?(22+I%*4))JJ%?Z%=I%:W%=77W%=77  W%: RPRSEC(DR%,TYPE):V%=?M%:S(AT%,DR%):O%=J%?Z%*32+1:Z:(DR%1)SR%=&1ASR%=&12 ZTYPE=&57S%=M%?2:RW(&8000,DR%,SR%,V%,&7A,&2A):RW(G%,DR%,V%,S%,TYPE,O%):H%?10&1FSR ^AA%=1A:S%=?(M%+2+4*(AA%-1)):TYPE=&57"READING TRACK ";AT%;".";AA%;" ":11:DQI L'DD%?(Z%*19+AA%)=1TYPE=&4FTYPE=&4B Q;RW(&8000,DR%,SR%,V%,&7A,&2A):RW(G%,DR%,V%,S%,TYPE,O%) V]RW(&8000,DR%,SR%,AT%,&7A,&2A):TYPE<>&57"WRITING TRACK ";AT%;".";AA%;" ":11:t\I j3(H%?10&20)DD%?(Z%*19+AA%)=1DD%?(Z%*19+AA%)=0 G%=G%+ZA%:AA%:G%=G%+ZB%: `W(WT%):G%=&2B00:AT%=WT%WT%+7:Z%=AT%-WT%:?&911=&FFAT%=0?&3254=&30:?&327C=&30:?&30F7=&30 b(L%?Z%=0AC%=1)RW(G%,F%,AT%,0,&4B,42):G%=G%+&A00:"WRITING TRACK ";AT%;" ":11:t`O '(N%?Z%=&FL%?Z%>7)G%=G%+&A00:t`O M%=B%+Z%*76:RSEC(F%,&4B)  AT%: p SR:R%=1 zKRW(G%,DR%,V%,S%,TYPE,R%):(H%?10&1F)=0J%?Z%=(R%-1)/32:O%=R%:Z:R%=&81 R%=R%+32:R%<&82DzW X1Z:ZA%=&80*2^J%?Z%:A=JJ%?Z%:ZB%=&A00-A*ZA%: @!::" AT ";:X=0 2000:: #( X(AS$) #2A=AS$,):A=07:Trc 07:Trc dPG  *FX200,3  *TV255,0  7:*L.SD  *FX15,0  =32 '1:!&1200<>&EE201CA9*LOAD M.DEBUG ($17,0,17,130,12,19,3,4,0,0,0:IN <(KF%=1:K("IHCRWQDAVMF",2,1):R%T|@ FDKF%=0:K%DP@,DZ@,t`@,tj@,tt@,DK@,tV@,tB@,Dn@,Dx@,tL@ KA=!&FFFC:A P ID:T|@ Z*S:R%R%=0:T|@14,12:*TYPE"I.DEBUG" _*L.M.DEBUG d12,15:T|@ n V:T|@ x^22,4,19,0,0,0,0,0,19,1,3,0,0,0,17,129,17,0,12:FT:22,1,17,0,17,130,12,19,3,4,0,0,0:T|@ S:R%R%=0:T|@"A.DEBUG" S:R%R%=0:T|@"F.DEBUG"  C:T|@ READ:T|@ WRITE:T|@ D:26,17,130:&1536 6:T%=0S%=1TXA P28,26,31,34,1,12,17,1:E%=130:EE%=?(&C07+(E%*8))+((?(&C06+(E%*8))1)*&100) EE%=0E%=30:TNA EE%<100" "; " ";EE%10;" ";EE%10  E% 0榀tY\y:yy]w."{I{{i[uYwzwyLz? 9vY3ȱp .ʊI~r ʊr  }|y}}rL L L 0:@[_{ `p~r~`  Patch to OSFILE to allow  "locked" files to be read. $ Load this program, *TAPE, RUN, ! *LOAD, press break to reset " OSFILE vector before saving.  CODE 1024  S%=033  P%=CODE ( [OPTS% 2PHA <STX &C8:STY &C9 F LDY#0 P'LDA (&C8),Y:TAX:INY:LDA (&C8),Y:TAY ZJSR &F25A:LDY#2 d.A1 nLDA (&C8),Y xSTA &3BC,Y STA &AE,Y INY:CPY#&A:BNE A1 PLA .F1C4 PHP PHA JSR &FB27 LDA &03C2 PHA:JSR &F631:PLA:BEQ B1 LDX#3:LDA#&FF .A2:PHA LDA &3BE,X:STA &B0,X PLA: &B0,X:DEX:BPL A2 CMP#&FF:BNE B1  JSR &FAE8  JMP &E267 ".B1 , LDA &3CA 6 LSR A @PLA J BNE D1 T JMP &F202 ^.D1 h JMP &F209 r] | & ?&212=CODE 256:?&213=CODE 256 ? @1EQUB&3F:EQUB&24:EQUB&24:EQUB&24:EQUB&18:EQUB0 J $ Program recovery BEEBUG DEC 82 instructions '"TOP OFFSET ",T%  init ( 2 recover < finished F=P% P Z recover d#?line=&0D:lenpos=line+3:count=1 n+ ?line=&0D line?1=&FF finished=: x(line?1)*256+(line?2);  % line?count<>&0D count=count+1 ? line?count<>&0D line?count<32 count>4 line?count=35 $ count>250 line?(count+1)=&0D  line?count=&0D ~line !line=line+count:?lenpos=count  init &A%=P-2+T%:?A%=&0D:A%=A%+1:?A%=&FF line=P%:finished=   instructions 1:7)131157132"RECOVER BAD PROGRAM "156 ('"PAGE setting = &"A$:P%=("&0"+A$)  xinstructions'x$x2000xinitwxine"inishedrecovervenpos"ount init   nextdisk ( endisks readfiles 2 endisks 7+ I%=entry% max_files:name$(I%)="~": < sort A5last_entry%=entry%-1:entry%=0:last$="":all_done= C 3:14 F K start%=0 Pprintpage S U all_done W Z nextdisk d+ num_disks%=0 fn$="first" fn$="next" n;1,23)129157131"Load "fn$" disk and pressSPACEor" x21,24)129157131"PressEif no more disks"; A$=: A$=" " A$="E" 4,23)354,24)35;  A$="E" endisks=: 21:*. 6   readfiles num_entries%=?&F05 title$="" P I%=0 7:T%=?(&E00+I%): T%<>0 title$=title$+(T%): title$=title$+" ": O I%=0 3:T%=?(&F00+I%): T%<>0 title$=title$+(T%): title$=title$+" ": # title$>127 title$=title$,2) 28,9)1228,9)titl:0  "DIS(TEXT) ,617,129,28,34,31,39,0:TEXTTvA,D@A:17,130,26: 6@12:"DRIVE ";L%:"TRACK ";T%:"SECTOR ";S%:"******": @`28,34,31,39,7,12,13:"AlcopyChangeDrive FormatHelp IDreadMend Quit Read VerifyWrite ": TkRW(L%,T%,S%,TY%,U%):P%!1=U%:P%?5=3:P%?6=TY%:P%?7=T%:P%?8=S%:TY%=&5F P%?9=42TY%=&5B P%?9=19P%?9=33 ^ &FFF1: h4K(STRING$,M%,N%):?602=32:B$="":R%=0:M%=0D|A r DIS(M%) |K$= (K$)=13B$=""R%=1:dVA +(K$)=13AA%=1N%:B$="0"+B$:AA%:dVA K%=STRING$,K$) K%=07:D|A  KF%dBA K$;  B$=B$+K$ B$7t|B *K%dPB,dZB,dnB,dsB,dvB,trB,thB  G:T`C T%=0:S%=0:dxB  TK:R%  dxB K127:"PRINT OUT":2,21:"TRACK ";T%;" SECTOR ";S%:&153B:13,6,3:t@B 3S%=S%+1:S%>9T%=J%S%=0:T%=0:S%>9S%=0:T%=T%+1  dxB 3S%=S%-1:S%<0T%=0S%=9:T%=J%:S%<0S%=9:T%=T%-1  dxB T%=T%+1:T%>J%T%=0:dxB  dxB T%=T%-1:T%<0T%=J% RW(L%,T%,S%,&57,B%):E  :D:DIS(1):DIS(2):t@B > WRITE HzD:DIS(1):17,129,28,34,31,39,7,12:" ARE YOU SURE THIS IS OK? YES NO CHANGEDELETE":AA="YCD",) RAA=0d@C \AADfC,DzC,DpC fDE%=&4B:tbC pDE%=&4F:tbC zC:"CHANGETRACK AND SECTORNUMBER INPUT TRACK (O-";J%;")" !K("0123456789",0,1):R%d@C TK:R%d@C  DHC RW(L%,T%,S%,DE%,B%):E 17,130,12: TK  TFD K("0123456789",0,1) K$=(13)TPD T1$=T1$+K$:(T1$)<2drC T1%=(T1$) &T1%<0T1%>J%T1$="":127,127:drC $AT1$="":T%=T1%::"SECTOR(0-9)?":Ke$  I%=8 num_entries% 8 +?(&E07+I%)=&D:?(&E00+I%)=?(&E00+I%)127 #name$(entry%)=$(&E00+I%)+title$ entry%=entry%+1  "28,12);(num_entries% 8) ,28,15);entry% 6 @ sort J<1,23)129157131" SORTING - PLEASE WAIT " T1,24)129157131(35); ^sort,name$(0) h4,23)354,24)35; r | formatpage  I%=0 149 T$=name$(entry%),1) [ T$<>last$ last$=T$:f%(I%)=-1:f%(I%+1)=-(last$):f%(I%+2)=-1:I%=I%+2 f%(I%)=entry% entry%=entry%+1 F entry%>last_entry% J%=I% 149:f%(I%)=-1::I%=149:all_done=   printpage $3," Program Disk ") $3," ------- ------------")  I%=start% start%+49 Y%= ; name$(I%)<>"~" A1$=name$(I%),7)+" "+name$(I%),8) S name$(I%+50)<>"~" A2$=name$(I%+50),7)+" "+name$(I%+50),8) A2$=21," ") V name$(I%+100)<>"~" A3$=name$(I%+100),7)+" "+name$(I%+100),8) A3$=21," ") 4)A1$29)A2$52)A3$     init max_files=150 &sort 350,name$(max_files),f%(149) B: I%=0 1:14112915713110,I%)"DISK MASTER CATALOGUE": U10,9)"Disk title - "10,12)"Number of files - "10,15)"Total so far - " ,endisks=:entry%=0:num_disks%=0:files%=0 Start = &80 Item = &82 Item1 = &84 Item2 = &86 Check = &88 WORD1 = &8A WORD2 = &8C Spacer = &8E End = &78 Temp = &7A len = &7D  len2 = &7E Shorter = &7F  Z = 01 ( P%=sort 2 [OPTZ*2 < .SORT F LDA&600 P BEQ none Z LDA&603 d CMP#&81 nBEQ strings x .none  JMP Error  .strings  LDA&601  STA Start SEC  SBC#2  STA Item1  LDA&602 STA Start+1  SBC#0 STA Item1+1  LDY#1 LDA(Item1),Y  STA End+1 LSRA STA Temp+1 "DEY ,LDA(Item1),Y 6 STA End @RORA J STA Temp T.not ^ LDA#&FF hSTA Spacer rSTA Spacer+1 |LDY Temp+1  LDA Temp  .rotate CPY Spacer+1  BEQ cmp  BCS done .cmp CMP Spacer  BCS done LSR Spacer+1 ROR Spacer BNE rotate  .done  LDX#2 ASL Spacer ROL Spacer+1  ASL End & ROL End+1 0DEX :BNE done+2 DCLC N LDA Start X ADC End b STA End lLDA Start+1 v ADC End+1  STA End+1  .Loop  LDA Start LDX Start+1  STA Item1 STX Item1+1  STA Item STX Item+1 CLC ADC Spacer  STA Item2  STA Check LDA Start+1 ADC Spacer+1   STA Item2+1 STA Check+1  .newlen * LDY#3 4LDA(Item2),Y > STA len2 HLDA(Item1),Y R STA len \ CMP len2 f BCC short p LDA len2 z .short STA Shorter  LDY#0 LDA(Item1),Y  STA WOR("0123456789",0,1):R%TxD . S%=(K$) 8 B;V:T%,S%::T%=0J%:RW(L%,T%,0,&5F,B%):P%?10=0DjD V_S%=09:RW(L%,T%,S%,&53,B%):P%?10=0D`DA$((P%?10-6)/2);18)"ERROR AT TRACK ";T%;".";S% ` S%:DtD j"TRACK ";T%;" IS OK":11 tAX$=(0):AX$=(13)T%=J% ~ T%: FT 10,3)" BE CAREFULL" 810,10)"PRESS 'Y' TO CARRY ON":A="Y",):A<>1dlD .:" WHICH TRACK DO YOU WANT TO CHANGE?"; #K("0123456789",0,2):R%=1dlD &T%=(B$):T%<0T%>J%127,127:tpD ,3,20)" TRACK TO CHANGE IS NUMBER ";T% 810,23)"PRESS 'Y' TO CARRY ON":A="Y",):A<>1dlD IU%=&3000:S%=09:RW(L%,T%,S%,&53,U%):P%?10F%=U%U%+&100:?F%=65:F% UU%=U%+&100:S%:Z(T%):F(T%):U%=&3000:S%=09:RW(L%,T%,S%,&4B,U%):U%=U%+&100:S%  4Z(T%):P%!1=B%:P%?5=1:P%?6=&69:P%?7=T%:&FFF1: F(T%):S%=09:Q%=B%+4*S%:Q%?0=T%:Q%?1=H%:Q%?2=S%:Q%?3=1:S%:P%!1=B%:P%?5=5:P%?6=&63:P%?7=T%:P%!8=&10002A10:&FFF1:P%?12"FORMATTING ERROR" ( 2gS:26,12:5,10)"INSERT SYSTEMS DISK INTO DRIVE 0":7,30)"PRESS ANY KEY WHEN READY":=(13)R%=1 < 12: F7ID:C=0:T%:T%=0J%:RW(L%,T%,0,&5B,B%):3::C2 Gn"TRACK="T%:P%?10"TRACK NOT FORMATTED"7,4)"TRACK HEAD SECTOR SIZE":ID=075:?(B%+ID);:ID Jg''"PRESS ANY KEY TO CONTINUE"'"P TOGGLES PRINTER":A=:A=13T%=J%A=80C=1-C:D=2+C:DA=138T%=T%+9 P T%:3: $:X=::" AT ";X:A=12000:A: E:P%?1026,12:'''''"THERE IS A ";A$((P%?10-6)/2);" ERROR ON"'8)"TRACK ";T%;" SECTOR ";S%'''''"PRESS A KEY TO CONTINUE":A$=  RG:'"ACTUALTRACK",T%:"FALSE TRACK",FT%:"SECTOR",S%:(L% 1) O%=&1A O%=&12 VZ(T%):RW(L%,O%,FT%,&7A,&C00):RW(L%,FT%,S%,&57,&C00):E:RW(L%,O%,T%,&7A,&C00): S켤 輬찃굠굠 꽬촃 AND 贠 贠贠굠 꽮 굠굠 Version 3.40 YOU WILL BE PERMITTED TO BACKUP AS MANY AS MANY COPIES OF THIS DISC AS YOU WANT These utilities are designed to help produce BACKUP COPIES of all disks. They mustNOTbe used to produce UND1 LDA(Item2),Y  STA WORD2 INY LDA(Item1),Y STA WORD1+1 LDA(Item2),Y STA WORD2+1  LDY#0  .next LDA(WORD1),Y CMP(WORD2),Y  BCC ok $ BNE swap .INY 8CPY Shorter B BNE next L LDA len2 V CMP len ` BCC ok j .swap t LDY#3 ~LDA(Item1),Y PHA LDA(Item2),Y STA(Item1),Y PLA STA(Item2),Y DEY BPL swap+2  LDA Item1 LDX Item1+1 CPX Check+1  BNE set1  CMP Check  .set1  BCC ok  STA Item2 SBC Spacer ( STA Item1 2TXA <STA Item2+1 FSC Spacer+1 PSTA Item1+1 ZJMP newlen d .ok CLC n LDA Item x ADC#4  STA Item1  STA Item LDA Item+1  ADC#0 STA Item+1 STA Item1+1 CLC  LDA Item1 ADC Spacer  STA Item2 LDA Item1+1 ADC Spacer+1 STA Item2+1  CMP End+1  BNE newl  LDA Item2 " CMP End , BNE newl 6LSR Spacer+1 @LDA Spacer JRORA T #&FC ^STA Spacer h BNE long rLDA Spacer+1 | BNE long RTS  .long  JMP Loop  .newl JMP newlen  .Error  LDX#0  .Load  LDA M%,X  CMP#&D  BEQ Last  JSR &FFEE INX  BNE Load  .Last  JSR &FFE7 &RTS 0] : M%=P%+1 D$M%="ARRAY ERROR" N X N * I%=0 last_entry%:name$(I%):A$=: R5 I%=0 149 3:f%(I%),f%(I%+1),f%(I%+2):A$=: 2initiax_files 2ort+  SNARFER BEEBUG NOV 83 F =&3000 P *OPT1,2 Z@%=4 d CB%20 nlength=-1:drive=0 x:  7 1A=01:12)157135129141"SNARFER"4156: 12"A DISC UTILITY" '4"by B.J.Last and Matthew Rapier" '"E - EXAMINE" "R - RECOVER" "S - SAVE RECOVERED FILE" "CL - CHANGE LOAD ADDRESS" ""CE - CHANGE EXECUTE ADDRESS" "Q - QUIT TO BASIC" "* - OS COMMAND" '"WHICH OPTION ?"; A$=  A$="E" EXAMINE  A$="R" RECOVER " A$="S" SAVE ,A A$="C" "C";:A$=: A$="L" RELOAD A$="E" REEXEC 6 A$="Q" "INDEX" @ A$="*" OSCLI J T: ^ EXAMINE h''"EXAMINE" r |''"Track",;:track=EVAL(0) !''"Sector",;:sector=EVAL(0) "Error #";~READSEC(&3000) N%=0255:A%=?(&3000+N%) A%<32 A%>126 A%=46  (N% 32)=0 ';~N%,;  A%:   :  RECOVER ''"RECOVER" @''"Please type start track, sector and filelength inbytes." U"Track",;:track=EVAL(0):"Sector",;:sector=EVAL(0):"Length",;:length=EVAL(0) :0,0);"track/sector" address=&3000 N%=0length+256 256 &@0,2);track;6,2);sector;12,2);"ERROR #";READSEC(address) 05sector=sector+1:sector=10 sector=0:track=track+1 :address=address+256 DN% N X: b SAVE l''"SAVEAUTHORISED or PIRATE COPIES ofANYdisk ANY PRESS THE SPACE-BAR TO CONTINUE    "        + ~ `a  ɇ6ɈɉPɊ-ɋwL_ LM +RmRRLL7LRS mSSL +R mRRLR mSSL +ƩmSLSmSSL R S LM RS`  ;   LMLRa R8_`S m___a `m`m`XiZaJJJJ@\a)@] X S \ ] RRLRSSLL  La0G:ARzXiZa\ ]LcZXXa] \\: 6 ^ / ^]: 6m^^L/m^^Rb/TS mT_^_  Ti S ^  L.  R S a RR LM LMSSSRL   JJJJ ) T   8  8} L. ܩ   Ї@ `  `   ipبJJJJi0 )i0  ` `23456789ABCDEF 56A7 CC0123456789ABCDEF 56A7 EFR00A11A22A33A44A55A66A77 AAAAAAA AN PA.=&1900 CHAIN"DEBUG" **ʈ * g**h**  桥 + * Format which drive ? a |*i0 0 Bad drive4 * Insert blank disc Ready to format )|* *  Escape)_YN L *Y Formatting drive|* K* |* *k*x* B** Y*'* Y***k**d* p*Formatting errorq* {*Θ*Verify error* ? k**L)*+*+*+* * Disk formatted - repeat (Y/N) ? L()_YN LLX(hhH梱) (hlHJJJJ K*h) ii0 ` `*c*_*i*K"(P  RECOVERED FILE" v1length=-1 ''"No file recovered"':RECOVER ''"Enter filename"  $&A00 X%=&70:Y%=0:A%=0  !&70=&A00  !&72=0  !&76=0 !&7A=&3000 !&7E=&3000+length  &FFDD  :  EVAL(X)  Y,A$  10,11  X=:Y= A$   A$="" X,Y);:TVC * 4 A=(A$) > TJE H=A R: \ READSEC(address) fX%=&70:Y%=0:A%=6 p"?&70=0:!&71=&A00:!&75=1:!&79=0 z&FFD1:drive=?&A01-48 ?CB%=drive:!(CB%+1)=address ?(CB%+5)=3:?(CB%+6)=&53 /?(CB%+7)=track:?(CB%+8)=sector:?(CB%+9)=&21 X%=CB%256 Y%=CB%256  A%=&7F  &FFF1 =?(CB%+10) :  OSCLI ''"OS COMMAND"'   "*"$&A00 X%=0:Y%=&A  &FFF7 "PRESS A KEY":A$= $ A$<>"*" . 8: B RELOAD L''"CHANGE LOAD ADDRESS" V"FILENAME ",$&A00 `!"ADDRESS ";:address=EVAL(0) jX%=&70:Y%=0:A%=2 t !&70=&A00 ~!&72=address  &FFDD  :  REEXEC ''"CHANGE EXECUTE ADDRESS" "FILENAME ",$&A00 !"ADDRESS ";:address=EVAL(0) X%=&70:Y%=0:A%=3  !&70=&A00 !&76=address  &FFDD  :   =17 ':  <&BD " at line ";: ('"PRESS A KEY" 2A= < Y Test for cursor keysength rive"o$"Qd conditions ensure @1 the [ can only be moved beside a file entry J  ENVELOPE EXAMINER  ACORN USER NOV 83 START=&8B0 # ("Type envelope no. "EN 2 <"ENVELOPE ";EN; F I=0 12 P",";?(START+EN+16+I); Z d =129 Z I%=0 40 d&S$: S$="END" E%=I%-1:I%=40:tV@ n3 S$="'" " "(back%+16); $"ppppppppppppppppppppppppppppp $"5 'Shadow' byR.K. Lloyd j $"5Don't you dare rip me offj ($"````````````````````````````` 2N$="'Shadow'":*TV 255 < 7: 23;8202;0;0;0; F TITLE(1) P\''''" Please read all these instructions as"'" there are some important points in them" Z(""N$" is an entirely machine-code" d*"tape copier that can cope with ANY" nu"program of ANY length currently on the market e.g. 'Locked' Acornsoft,Virgin, Kansas,Superior Software etc." x,'""N$" works on a Model B with ANY OS" R""N$" is specially protected againstsoftware piracy_it can't copy itself !" TITLE(2) m''"When "N$" has loaded, you will be"'"asked how many parts the program you"'"want to copy loads in." "If you aren't sure how many parts thereare,*CAT the whole tape at 1200 and 300baud and make a note of the speed of each part." x"Companies likeComputer Conceptshave started using BOTH 1200 and 300 baud speeds in a single program part." o"Hence "N$" ask**ʈ * g**h**  桥 + * Format which drive ? a |*i0 0 Bad drive4 * Insert blank disc Ready to format )|* *  Escape)_YN L *Y Formatting drive|* K* |* *k*x* B** Y*'* Y***k**d* p*Formatting errorq* {*Θ*Verify error* ? k**L)*+*+*+* * Disk formatted - repeat (Y/N) ? L()_YN LLX(hhH梱) (hlHJJJJ K*h) ii0 ` `*c*_*i*K"(P  duLL%(50,1),R%(15),FO%(15,1):LC%=1:RE%=1:FR%=1:MC$="MisLhhee  LIHH` 2eܩ 2Ɛe`( 2(*8(`( 2(ji(`hhh| j  L &&&ee80eeȹ ĥȑHH` LhhhhhheeHHHH`hhhhhh8内HHHH`hhhh&*  Hȥhi0 HH`hhhhhh&& ee楉HHHH`hh* +H*HHH`hh hhHHHH`hhhhhh%H%HHH`hhhhhhHHHH`hhhhhhEHEHHH`hhh*h+,- A+H*HHH`hhhhhh HHHH`hhhhhh &ƇL\HHHH`hhhhhh FfƇLHHHH`hhhhhhŇ$ņ'hhhhhhEE HHHH`HHHH`hhhhhh8別剰͐hhhhhh8別剰))) eiX)JJJJJe)JJJe` 2)& 2) Ff8ffL%%摥К` C. C.    CDISK FORMATTER FOR YOUR BEEB.   C L~P P~Q`` jsraddress:ldy#0:lda(&86),Y:plp:rolA:sta(&86),Y:php:sec:lda&8F:sbc#8:sta&8F:cmp#255:bnenixtx:inc&90:bnenixty:plp:rts  .rightscl  php:lda#0:sta&90:.naxty plp:clc:php:lda#0:sta&8F:.naxtx jsraddress:ldy#0:lda(&86),Y:plp:rorA:sta(&86),Y:php:clc:lda&8F:adc#8:sta&8F:bnenaxtx:incs if the part loads"'"MOSTLYat 1200 baud. Answer N for No if300 baud is used the most." R" Then "N$" asks if the part loads"'"ALLat 1200 (or 300 if selected) baud." P" ie. if the part loads all blocks at the same speed then press Y for Yes." TITLE(3) ܨ''"If you have a 'mixed' speed program"'"part then pressing N for No instead"'"means you must enter which blocks (in hex) are saved at the 'minority' speed."; R"EXAMPLEComputer Concepts 'Swarm' is a 2-part program. To copy with "N$; %"1) Enter2for program parts." n"2) EnterYthenYagain for the 2 tape"'"speed questions because part 1 is all"'"saved at 1200 baud."  "3) Load and save part 1." X"4) EnterYthenNbecause part 2 has block 01 at 300 baud and the rest 1200."; M"5) Enter01thenRETURNfor that block.Exit by typing a number >&7F." " "6) Load and save part 2." , TITLE(4) 6w'" When you are loading a program part, the normal loading prompts are given aswell as Shadow's own messages." @" N.B. Pressing ESCAPE while loading will clear out any blocks loaded and return you to waiting for the 1st blockagain. This can be very handy..." J" When saving, only the 'RECORD then RETURN' message is retained. After this'Saving PROG' (PROG = filename of part)appears followed by 'Done' when the save has been completed." T}" WARNINGIf a part loads in more than&38 tape blocks, then you have to save that part in two halves i.e. load and" ^l"save blocks 0 to &38 then load and saveblocks &39 to the end. Full prompts aregiven at each stage." h TITLE(5) r)'''" "N$" loads automatically in" |-" two parts , the first of which can" 0" be loaded by either you typing *RUN""""" -" or letting these instructions do it" " for you." -" The point is that these instructions" ."can be discarded when you are familiar" "with "N$"." TITLE(99):*D.  "SHADOW" TITLE(N%) d N%>1 DOUBLE(6,23,136,"PressSPACEto continue"): (-99) ?&20E=&BB ?&226=&FF *FX 14,6  N%=99 /:DOUBLE(7,0,130,"Shadow (C) Clares 1983") FDOUBLE(5,2,130,(157)+"Instructions - Sheet "+(N%)+" "+(156))  DOUBLE(X%,Y%,C%,M$)  Y%=Y% Y%+1 & 31,X%,Y%,C%,141 0 M$; : D %,141 0  L L' L`FORM_40 FORM_80 VERI2 pla:sta&85:pla:sta&86:lda#0:sta&87:.sdf ldy#0:.get lda#124:jsr&FFF4:jsr&FFE0:cmp#12 F M ! )! ! 6! @! M! 6! ]! ! ! ! ` A" :$ `Escape{` p $X $ CUMANA Disc Formatter V1.1 @@@@@@@ @ @   `@ @@@@@@` @@` $ $ % $` $ $ % $`v $`rp &`PH %hʊ` $` |  |} >( $On which drive do you wish to format?  % {i0 0  $L]!480{`L= t%`B& L&8`+ $Disc already formatted. Are you sure?  L= )_YN 8` ` % t% &T&a&& % %L" %΀&L"&  #L" "T&&LK" % % $Formatting complete. #` $ #* $Fatal formatting error on disc. 2#8` $ # $` $ # $ 0$` [#XXXHHHHPPPDDDD` [#00000000000<<88800000000`h|h}~|}|8t&r&s&v&v&r&s&~v&p& |}Li#|}r&s&v&l|rt &sr~isrq}p|iqpt8utrtU &rp &~|U &rp &`t&p&i `x& `- $Do you want to format another disc?  L= )_YN 8` `h|h}$Hʱ|vhȘe||}l|h|h}|}H| h|}l|z `Hvx &hevwv`wv8``exyxzz`z`rt &sr~8srq}p|8qptiutrt &rp &~| &rp &`{9&9& ` ` P&h&Q&i&` %'& %&&T&&`M& Y&`Z& d&`&'`&'&'e& `"&.&(&4&&  r r ʵp p `i_*&cO*_O*&K"D P OOOOOOOOOO  ~3 u;l#c+Z-,+*)(Q%$#"! H=<;:98O 543210''''''''  18`ehs  (C) Clares 1983  You are reminded that Shadow is  FOR YOUR OWN PERSONAL USE ONLY FX4,1 LOAD"Shadow2" FX14,6 Written by R.K. Lloyd    Please wait while part two loads K.10 T. Searching  You need 32K RAM - Hard Luck !!! ɻ&L y y _ _ @  _Lww _ _ _ y _ _L9_x) lmX y ysutsvsI{utvtL6wmqȹmrq  `mȹm `}|`Shadow (C) Clares 1983 - under no circumstances must this program be copied - it is highly illegal to do so !\%xrA=5#$ ~ {{s o S T B : R {{|dsw([[[vm|qsss[[[[[8 [+ [\( \d~{8 [+ [\( \vdp+[  [ [[   drw[ +7:" vdx3 [[  [[[  dw[[SJVBR[Dv=#OWJvd|})[[[  J[Hv|adxp?[>  [V[) [/ [J[9drw[ (+:8> ve7[[qqvgpkYuvd}p+[[ [[   dpw[ [UUUv( eqvdj} v|?qqav=#JOWMvdrj+ [(+:8>[[ vgzc\pwavd}j?[[ [[ [ dpi  vd~j+ (+:8>[[[vd{uqsqsvd|s?[[  [[dsr[JIKK[v6Uv[S"T5R[D[svq)>84)?[[)>/.)5v=#JNWJvJIKK[v( [vdzu://>5/245/[  [ [[ dxt[ [ [[[[vdzp/[[[I[W[  [  dyw [[[ +7:" v40|vdyp> [[v[[ [dywIV[[U[SE]L=[[R[[[[[sssssvdgs:77[[dwrvy[9_[9}[9s[[CA˂J[CKJ{e[9q[9]{n ['][9[1|m [ {vk;[9I[9[1[ nx['G[9I[9E[9҄҄[[u[K҄7 k~7 KqqqqcKmPC {vA[9t[7 [e[9{[9m[9~M[9g[9S[[Ue[9i[9k[9[S[c[9ck[[9[1x7M Y[9[U7 󫁽y ye[9sC[97[9Kk[9o[9[{z[[xI[U{#u[9v[[[ crL[q[[ck~{ Cx7e[9w[9[Ue[9k[9o[9 7[C vpk K7|K7ApR:C|CK밲k˼k [ U[9[[Uq[v[O[9[[[o[[[{[[q[[ [q[#  { v}[JT IK  HK d[v[y[zj[yD[7ѳ[{u xs{vsks[[A|:7<}K[[sRys9s9s9s8rs9s4sC!PkmƘsrsӌ9sPs1&s9B59cr6cLZk(!s1&gc1ƄL禆9cr6cLcj(!s1&gc1Ƅɦ9cr6cLZk(!s1&gc1ƄB!9cr6cL)RJ !s1&gc1c1Ƙ9cr6cZkuZs1&gc1c1c9c1c9sαs1c1c9c1c!Fs1c1B!8c1c &`@s9s9s9s9c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1r{ YsRzrsQ{[{7xۄ[K[[`~[W[9[CR5"["  LL Try loading the first part next time ! ` X{0Ui){j)H8n/hjir/jjj)Ii{t/ep/Lx/ *LOAD CMOVE C00 7  I%=0 1 (!14112915713116)"SHADOW" 2 <4:''" Do you want instructions (Y/N)";:*FX15,0 AR$=:R$: R$="Y" R$="N" F R$="Y" "SHINST" P*LOAD CMOVE C00 ZF%=&1200:T%=&E7D:L%=&C00 d*KEY0 CALL&109A|M n1*KEY1 *LO.SHAD 1200|M*T.|MCALL&C00,F%,T%,L%|M x*FX138,0,129 x$DNmachine-code" d*"tape copier that can cope with ANY" nu"program of ANY length currently on the market e.g. 'Locked' Acornsoft,Virgin, Kansas,Superior Software etc." x,'""N$" woXmvwvrȱvsQvwvtȱvu 4vwvpȱvq9Wrong number of paramtersParameter not type integerqrtsuprt }  `` 6777777 <<#######     d" **************************** n UTILITY PROGRAM TO RESTORE x THE CONTENTS OF A COMPLETE  DISK FROM TAPE   (C) J. ANSELL 1983 " ****************************  ::D@A PAR% 20  BUF% 12800 XY% 60 8"Do you wish to restore disk in drive 0?";:S$=:S$  S$<>"Y" S$<>"y" DTA "Tape filename?"NAME$ *T.  FILE%=0 7 7S$="*LOAD "+NAME$,8)+(FILE%+100),2)+" "+~(BUF%)  S$  TRACK%=0 4 "9ACCESSDISC(&4B,TRACK%+FILE%*5,0,BUF%+TRACK%*2560,10) , 6 @ dR@ J*D. T =&1900 ^ "INDEX" r* ACCESSDISC(COM%,TR%,SEC%,ADD%,NUM%) | COMM% - COMMAND  TR% - TRACK  SEC% - START SECTOR  ADD% - DATA ADDRESS  NUM% - NUMBER OF SECTORS  ASSUME DRIVE 0  ?PAR%=0 PAR%!1=ADD%  PAR%?5=3 PAR%?6=COM% PAR%?7=TR% PAR%?8=SEC% PAR%?9=&20 NUM%  PAR%?10=0 X%=PAR% 256 Y%=PAR% 256  A%=&7F & &FFF1 0" PAR%?10<>0 "ERROR,"~PAR%?10 : ,%?10 : : UF%SS,ReasseUF% ' T CSPOOL,Print Sp  __________________________  copies an 80 track disc  onto a 40 track disc.  __________________________ ( X%30,W%20480 2 NT%=8 Z "copy from ? "D1% d "copy to ? "D2% x I%=0 39 NT%  J%=0 NT%-1 ' read80(D1%,I%+J%,0,10,W%+2560*J%) J%  I%=0 setlen  J%=0 NT%-1 ( write40(D2%,I%+J%,0,10,W%+2560*J%)     setlen  Y%=X% 256  $X%="DR."+(D2%): &FFF7  W%?&107=&90:W%?&106=&01  ," read80(DR%,TR%,SC%,NR%,W%) c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c17 N+ L** D F.ono*O? /n3M /ow ED][M-K-͋//;O/Ofg%#3KK [_E'O N 0 `PР@`0 `PРPPPP PPPP@`P` 0 PPPPPP`@P` 0`@        00Ã3><00<>300pppp`0P$P$`ppP`` PPpp```@000 `0p                @@   @@   @@   @@       X R    X R    X R    X R----                         4p 4p 4p 4p!0!`apC---@@   @@   @@   ---H`$$$    X R    X R6 I% @= ?X%=DR%:X%?5=3:X%?6=&53:X%?7=TR%:X%?8=SC%:X%?9=NR% &20 J I%=0 T ^ E%=D(10,W%) h I%=I%+1 r E%=0 I%>5 |7 E%<>0 "Error ";E%;" at ";DR%;"/";TR%;"/";SC%:  # write40(DR%,TR%,SC%,NR%,W%)  I%  seek (TR%*2)  set(TR%) = ?X%=DR%:X%?5=3:X%?6=&4B:X%?7=TR%:X%?8=SC%:X%?9=NR% &20  I%=0   E%=D(10,W%)  I%=I%+1  E%=0 I%>5 6 E%<>0 "Error ";E%;" at ";DR%;"/";TR%;"/";SC%:  set(TR%*2)  & D(T%,W%) 0 A%,Y% : X%!1=W% D Y%=X% 256 N A%=&7F X &FFF1 b =X%?T% v seek(T%) $ ?X%=DR%:X%?5=1:X%?6=&69:X%?7=T% / E%=D(8,0): E%<>0 "BAD seek track";T%:   set(T%)  (DR% 1) R%=&1A R%=&12 , ?X%=DR%:X%?5=2:X%?6=&7A:X%?7=R%:X%?8=T%  E%=D(9,0)  %=2:X%?6=&7A:X%?7=R%:X%?8=T%  E%=D(9,0)  X__________  memory  start$ *FX 138,0,38  "Start address? "start$  showmem((start$),256)  #______________________________  showmem(start%,length%) " at%,addr% , SIZE%(4),gap%(4),block% 30,data% 2200  7  setblock:setup  rubric % K%=0 39: FOR 40 TRACK DRIVE (/ seek(0,K%):seek(1,K%): id(0,K%) Dn@ 2 settr(?data%):format < values A S%=S% S%+s%-1: F D%=load(0,T%,S%) P save(1,T%,S%,D%) U Z settr(K%) d J%=id(1,K%) n   setblock  ?block%=0:block%!1=data%  X%=block%256:Y%=block%256   seek(dri%,tr%) ) ?block%=dri%:block%?5=1:block%?6=&69  block%?7=tr%  disc(8)  x disc(J%)  A%=&7F  &FFF1 T block%?J% 10,22)"ERROR NUMBER ";block%?J%:10,24)"PRESS SPACE":7: =32  @ ݤid(dri%,tr%) J? block%?5=3:block%?6=&5B:block%?7=tr%:block%?8=0:block%?9=1 T ?block%=dri% ^ disc(10): block%?10<>0 =1 h" size%=data%?3:s%=SIZE%(size%) r block%?9=s% | :disc(10)  J%=0 (s%-1)*4 4 E "track ";data%?J%;" sector ";data%?(J%+2);" size ";data%?(J%+3)   =0  settr(J%) 5 block%?5=2:block%?6=&3A:block%?7=&12:block%?8=J%  disc(9) & block%?7=&1A:disc(9) 0  format | block%?0=1:block%?5=5:block%?6=&63:block%?7=?data%:block%?8=gap%(size%):block%?9=(size%*32)+s%:block%?10=0:block%?11=16  disc(12)   values  T%=?data%:S%=255  J%=2 (s%-1)*4+2 4  data%?J%>66>>666666666666>>6666666666>>@ 0PP@@@``0 ``p @P0131 !q@HPPwݨv3QQ̀000p`ppp00`B $          3DD" wUu@UfD"wuUwu2"ꪻĈD3wwݙ3fD3"DUD%?8=H%:block%?9=(size%*32)+1 F% I% block%?6=&4F block%?6=&4B P disc(10) Z  setup  J%=0 4  SIZE%(J%),gap%(J%)  ! 18,11,10,21,5,74,2,255,1,0   rubric  V 5,10);"Place source disc in drive 0";5,12);"Place destination disc in drive 1" * 5,16);"Press space-bar when ready";  7: =32  e=32  IZE%(  ap%( Jlock% ata% **ʈ *Disk formatter 1.04 g**h**  桥 + * Format which drive ? a |*i0 0 Bad drive4 * Do you really want to format drive )|* *  Escape)_YN L *Y Formatting drive|* K* |* *k*x* B** Y*'* Y***k**d* p*Formatting errorq* {*Θ*Verify error* ? k**L)*+*+*+* * Disk formatted - repeat (Y/N) ? L()_YN LLX(hhH梱) (hlHJJJJ K*h) ii0 ` `*c*_*i*K"(P  SELCOPY (7 BASIC 1 VERSION.Ex Acorn User April 1984 page 61. 2$7:5,2)129"Selective copier"' <130"Source drive (0_3) "; F.SD%=-48: SD%<0 SD%>3 DF@ (SD%)' P$130"Destination drive (0_3) "; Z.DD%=-48: DD%<0 DD%>3 DZ@ (DD%)' d130"Is this OK? "; n(A$=: A$="N" A$<>"Y" Dn@ x A$'' SD%=DD% "Insert source disc in drive ";SD%'"& press"131"RETURN";: "Insert source and destination discs"'"& press"131"RETURN ";  =13: assemble_read_cat readcat 0 blk?10<>0 7::5,5)"Disc Read Error": decode_cat assemble_sort_code sort,E%,NAME$(0) display_cat  mark_cat  setup_copy assemble_mccopy 8 N%=0 5,2)129"No Files Selected for Copying": &5,2)129"Commencing Copying...." ) insert CALL&1400 in keyboard buffer  and exit programme " *FX15 ,*FX138,0,67 6*FX138,0,65 @*FX138,0,76 J *FX138,0,76 T*FX138,0,38 ^*FX138,0,49 h*FX138,0,52 r*FX138,0,48 |*FX138,0,48 *FX138,0,13 821: switch off screen to avoid untidy call command  assemble_read_cat $ BUF% &200,readcat &50,sort &D0 osword=&FFF1  Z%=0 3 2 P%=readcat  [OPTZ% $*LDA #&7F:LDX# blk 256:LDY #blk 256 .JMP osword 8 .blk:] B' parameter bloc33w33̘f" wUu@U""DwuUwu2"ꪻĈDD"3"DUf"3w333"""33w0̈00p``ppА 0 H   333DDD̈000𰰐``p0!   3www3000044``4  3www300000P```0   333DDD̈ а   3www300``аpC0  QQ3̈ ,<0ppppp``p  3"""33wp̈Ѐ@@@   QQ3p̈```Ѐ   QQ3p̈ <<0``аpp     ``00wݨv3QQ̀pp000`a   wݨv3QQ̰``0p`h ppp00 0    0PpЀpP00pp P`аppааpаpаpppРpаppppppp00аpРpp`_/_/_/_OOOO0pppppppp0ppppPPPPppp0pppppppPPPPPPP0P0PP0ppppPPPPPPPPpppLLG WORDWISE-PLUS 1.4F(C) 1984 CC) hL+HHH    Hɯhhhh(`L昅L 9 | 颐 LIHxJ KLHLX 3 C r L ꭩ{y}0g 7~_^V`Tp ȄȄWȄaȄY[U{ZȄXɆx|{TTz0Ti: ݮmV0RSR qܐJBC{2T)ȱTk for read command LD?P%=SD%:P%!1=BUF%:P%?5=3:P%?6=&53:P%?7=0:P%?8=0:P%?9=&22:P%?10=0 V ` decode_cat -E%=(BUF%?&105)/8: number of cat. entries  NAME$(E%-1),C(E%-1) Z%=0 E%-1  Y%=0 6 -NAME$(Z%)=NAME$(Z%)+(BUF%?(Y%+8*(Z%+1)))   - find Directory:allow for files in DIR 0  3 used by the Author for certain procted files! *?D%=BUF%?(Y%+8*(Z%+1)): D%=0 D%=32 D%=&80 D%=&80+32 4 work out locked entries >[ D%<128 NAME$(Z%)=(D%)+"."+NAME$(Z%): D%=D%&7F:NAME$(Z%)=(D%)+"."+NAME$(Z%)+" L" H R display_cat :5,1)129"File Selection" 0,4); Z%=0 E%-12 O 1)NAME$(Z%)12)131" "135;: Z%<=E%-2 20);NAME$(Z%+1)31)131" "135    mark_cat  Cursor Off 23,1,0;0;0;0; 0,21)130"Select file with"131"["130"using cursor keys"'131"SPACEBAR"130"marks file for copying"'130"Use"131"DELETE"130"for corrections"'131"@"130"ends selection and initiates copying";  enable cursor key codes  *FX4,1 % adjust key repeat & delay rates  *FX12,20  *FX11,20  X=13:Y=4  X,Y)"["  mark entries to be copied  "Z= ,/ Test for cursor keys and move if possible 6( the complicated conditions ensure @1 the [ can only be moved beside a file entry J Cursor Down T_ Z=138 ((Y=3+(E%+1)2-1)(X=32)(E%2=1)) (Y>2+(E%+1)2) X,Y)" ":Y=Y+1:X,Y)"[" ^ Cursor Up h- Z=139 Y>4 X,Y)" ":Y=Y-1:X,Y)"[" r Cursor Right |A Z=137 ((Y=3+(E%+1)2) E%2=1) X,Y)" ":X=32:X,Y)"["  Cursor left & Z=136 X,Y)" ":X=13:X,Y)"[" 0 Test for spacebar and mark file in array C 0 Z=32 X-13,Y)130:C(2*(Y-4)+1+(X=13))=1 9 TEST FOR Delete and remove file marker from array C /Z=127 X=13,Y)" ":C(2*(Y-4)+1+(X=13))=0  exit on @ being pushed  Z=64 " restore repeat & delay rates  *FX12   restore cursor operation *FX4  Cursor On 23,1;0;0;0;  setup_copy % Set up file names to be copied " in a list starting at &1200  K%=&1200:N%=0 Z%=0 E%-1 C(Z%)=0 dbS $K%=NAME$(Z%),9) K%=K%+10:N%=N%+1   passemble_sort_code ! moified toignore lower case ~LOOPCOUNTH=&70:FIRST=&71:SECOND=&73:TEMP=&75:ADDRESS=&76:NUMBER=&78:STORE1=&7A:STORE2=&7C:LGTH1=&7E:LGTH2=&7F:OSWRCH=&FFEE I%=022:P%=sort  [OPTI%  LDA&600  CMP#2 BNE MISTAKE  LDA&603  CMP#4 BNE MISTAKE  LDA&606  CMP#81  BEQ OK $ .MISTAKE .LDA#("?") 8JSR OSWRCH BRTS L.OK V LDA&601 ` STA FIRST j LDA&602 tSTA FIRST+1 "08BJCCz) L-{Uy{~(~ 6))Q    $ ;L遢 L&ɀɊ*;1:` "pep .LL : RS L * HI ) %L үHJJJJ h) 0:iLH* h` kmH h!L "##Ɂ 0 `` e` LY6 kNo ROM-LINK table! L-` 1q:pH 3 E 3G!` hiL.8eEfF`LL ׋r 9qp i0QLNv$gv tɁuHtH ihiphiq ppq , Lrrs8nros(Lם`pɁ 8rpsqnros @npoq = LL& E 3G * i ` GL` 'ȑp LȧVpWqᩀpj ㅠm 腤VjWki ㅠn 腠jkllhi$0 I bl`hHiHkHHHH)`Hjk Z J -h`hhhhkhihhLh`i` 9 E 3G `ȑ`HHa)煏 Z J 0hh)Q0Q.` E Q #L rĐL \)LP \pHqH phqhpLP)00 ) EL С 9 ܆p  ӣL# 1rpȥq пGSp)p  Yp `L H ohp$H ,h`h L `r`H pqh``ph` pi aLE , o ,Hp ,h$`iV8Vq 8VqVLVrH8qhVr`sHiVrqVɿLםVȑVrpȑVqViVhs` iVȪVppV ,@oo1L0$ oL V L@ o( VHLsH h `Lp p`p Bad params P ˆ G $0F `$0F p0! p0 H) $ gQLNh`)00 MARKERS !% ˉ @ k E Y L lpq$" U Ծ  xyrsL Ծ  hiiijk`a   pqL= `L rlp )00Lө% L> rlp  U  |LП L U rxsypzq{`8` D" YLpvqwrsr`  |L irpsqnroszv{wpitqiu ˉZ@ k> LEhp &Hpq8prqsh Memory full ! ELNo such file !`@ k E+tepueqsprFile too long!`a vzw{ttt) |tuqpu @LystKst ysp DsqD ~ LDY#0 LDA(FIRST),Y SEC  SBC#1 STA NUMBER INY LDA(FIRST),Y  SBC#0 STA NUMBER+1  .LOOP3  LDA&604 STA STORE2  LDA&605 STA STORE2+1  LDX#0 STX LOOPCOUNTH  .LOOP4 ( LDY#0 2LDA STORE2+1 <STA STORE1+1 FLDA STORE2 PSTA STORE1 ZCLC d ADC#4 nSTA STORE2 xBCC NOCARRY3 INC STORE2+1  .NOCARRY3 LDA(STORE1),Y  STA FIRST LDA(STORE2),Y STA SECOND INY LDA(STORE1),Y STA FIRST+1 LDA(STORE2),Y STA SECOND+1  LDY#3 LDA(STORE1),Y  STA LGTH1 LDA(STORE2),Y  STA LGTH2 " LDY#0 ,*.LOOP5\check for lower case and ignore 6?LDA(SECOND),Y:CMP#97:BCC normal:SEC:SBC#32:.normal STA TEMP @.LDA(FIRST),Y:CMP#97:BCC normal2:SEC:SBC#32 J.normal2 CMP TEMP TBCC NEWRECORD ^ BNE SWAP hINY r CPY LGTH1 |BEQ NEWRECORD  CPY LGTH2  BEQ SWAP  BNE LOOP5  .PIVOT1  BPL LOOP3  .PIVOT2  BNE LOOP3  .SWAP  LDY#3  .LOOP6 LDA(STORE1),Y  STA TEMP LDA(STORE2),Y STA(STORE1),Y  LDA TEMP STA(STORE2),Y &DEY 0 BPL LOOP6 :.NEWRECORD DINX NBNE NTZERO XINC LOOPCOUNTH b .NTZERO lCPX NUMBER v BNE LOOP4 LDA LOOPCOUNTH CMP NUMBER+1  BNE LOOP4 DEC NUMBER BEQ LOWZERO LDA NUMBER  CMP#&FF BNE PIVOT2 DEC NUMBER+1 BPL PIVOT1  .LOWZERO LDA NUMBER+1 BNE PIVOT2 RTS  ]I%  @assemble_mccopy Joscli=&FFF7 T Z%=032 ^0 This code uses space allocated to the DFS. hBIt should not normally be in use when this programme is used. r&P%=&1400:copylist=&70:numfiles=&72 | [OPT Z% #LDA#6:JSR&FFEE\switch on screen BLDA #N%:BNE ok:RTS \double check that there are files to copy! Z.ok STA numfiles:LDA #0:STA copylist:LDA #&12:STA copylist+1 \copylist stored at &1200 WLDA #SD%+&30:STA dinfo:LDA #DD%+&30:STA dinfo+1 \store drive numbers in copy string .nxfile LDY #9 [ .nxfile2 LDA (copylist),Y:STA buf,Y:DEY:BPL nxfile2 \move next filename to copy string KLDX #osc 256:LDY #osc 256:JSR oscli \send to Command Line Interpreter iLDA #10:CLC:ADC copylist:STA copylist:LDA #0:ADC copylist+1:STA copylist+1 \move pointers in copylist 0DEC numfiles:BNE nxfile \check if more files RTS \finished!  .osc:] > copy string follows.Drives inserted in dinfo and dinfo+1  filename in buffer 'buf' 4$P%="COPY":P%=P%+4:dinfo=P%:?P%=0:P%?1=0:P%?2=32 P%=P%+3:buf=P%  & ( entries%>columns% 9);:entries%=0 Q3tabpoint%=tabpoint%+1: tabpoint%>tabend% `GQ Q!newfirstpart%=tab%(tabpoint%) Q3 newfirstpart%<>firstpart% tabpoint%>tabend% Q Qfirstpart%=newfirstpart% Q taDs00RA{)s D. Ds D DsreRRS`st`REPEATDOTHISUNTILLTIMESIFCURSORDELETEPRINTPROCENDPROCFINDFKEYGOTOETYPELETyVDUDISPLAYTIMEҎREM7REPLACEŘSELECT-SWAPߎCALLڎCLS*OSCLIˏPTR#iBPUT#CLOSE1ENDhPREVIEWLOADSAVEݮDEFAULTSRECOUNTtSPOOLDOLINE-NEWKILLRIGHTpLEFTɎUPʜDOWNVATԾTOPܾBOTTOM͓MARKEDWORDō~΍SEGMENTPTEXTTTC҆PAGE&PARAMSЍMARKERSƯFILE SL.j ዐR ]Bad Commandrɠ()rɰpHqH fhqhp$ gQLN P`lp yA[R%$8` qRS`R qL{RSL y= ׋Syntax error SpH p% 1h8@ pȥq` EhL L 1 J`dlp ׋Er 9dHq p Leİ)LN LPLp8RpRS `%Hr rG pq` h#L%GLq 9:Hp h$#+% 1&ץp%qL L E G``a` y#$ q 1pLG 8H 1hrspLL 1pL 9 PL rǐΰlp ׋rƩ U * ` U$ U  * IL EHG``haih` 8H y,L q 1hpLpHqHHrpsqtrɰGq phrhqhpH hpLpGH ͐hpGqr`rɰpq(`G`pG?rrp0 G`rG%`=rrpɍ *")G`rG$ too longrrp"r`L#%Lp G`G`p L&pL ȹlllpqLLP 0pqppq` pqp0 copy string follows.Drives inserted in dinfo and dinfo+1  filename in buffer 'buf' 4$P%="COPY":P%=P%+4:dinfo=P%:?P%=0:P%?1=0:P%?2=32 P%=P%+3:buf=P%  & ( entries%>columns% 9);:entries%=0 Q3tabpoint%=tabpoint%+1: tabpoint%>tabend% `GQ Q!newfirstpart%=tab%(tabpoint%) Q3 newfirstpart%<>firstpart% tabpoint%>tabend% Q Qfirstpart%=newfirstpart% Q taq r ppq`L S#% r`8@ pqL `st 鋰r 8p`H r hr` PLLL 无R0g:c ȅrR 新RHpsqtrpespqetq6heppq(ȱR 斐 8r`80 i r`h8`%@&FALSE̗VARFREE+TIMEqGCT$zCHR$STR$bGLT$FREETRUELENVALEOT]SOTASCWORDSdBGET#ڗEOF#rEXT#OPENINOPENOUTOPENUPsPTR#^GETGCF$#GLF$ᆒGCK$䙒GLK$8BpCq` 8  \]pq` RHSH`RaS hShR` pȠ`Lkp ` q S#%Bad channel8@ ` Lk 8 pq`8**H 8ǢphL@H h pq`L -rG GLkBad Argument` r L$ VL 9g qɥp i0H$0 h Qv tieuif`$gv TtUuLyLeH Ծ8xtyuhv`)=Can't execute -HVVh8PvQg0) Ծ V EFeeERfeFS$0D eeEpfeFqp pqȱpɁpq8peEqfFLQL# )Escape8ReESfF Q ԾxeEpyeFq = P  Q P د Դ PL y LRvSweRfS y.1 q yv RR  8RetSfu`R  qLȱRɁvRwSNo such label qLy _tEuF`VEVȥFVȩVȑVV`Too many 1p%q v AV` AVEȱVF`VĐ6` 1pqL vViVȱViVqpпVİNo REPEAT _VEVȥFVȘVL皠V No PROCVFVEV`D ׫8pvqw Ȝ> Ƃ $vɁ(8prqsvpwqxtyu erxsy`lȩzt  lphqi l8xpyql phqi pjqk`ltΥ)00LS l( -pnqohpiq k l npoq =`  $ `8jhki`$B P  |Y`xjixkiy(8hpiqjrksxtyu erxsy)υ`)00$ - l  V` V`L~`x -8ptnquo~ zr{s`zir{isxpyqL8xzpy{q8jhkiqp` ) 's NO ROOM !8jhki` 㝰L irshipiiq8jtku rpsqnros `nipoiqL= -8pnqohpiq k l 㝰 8L6  6Lםxpyqzirx{isyntou rHsH l8jpkqnroshitiiu ehqhp8rHrsHss hqhpL @) l tz xpyq r\s]`8\r\]s]\]`zit{iu erxsy` o 9 RSq8`RS`bpqp` Ydp` Yepʊa8e ː o EG`kͩ| YpgкHH Y pi eшpŇ h:paЌH p` Ypc@`L) `1L4 Yfp Lx YjpP Yi Ypp(m Ypp(n Yl¥p` oL L @ L$0 D 2LLG)Can't do PF @ Lc b lȥ` o E 3GL)`) Cant do PS `ɁbL`)L) )8` Yhepp p Y٦pؠH Yh.pp$` o 9 无pp@ȥqA`LL L陥ƋƊ`   ``a `eŇ 8凨 v`)SLO  YphL0 Y l懤ppȱq`INٟTIԟCILMLLPLVTSfBSuLSşCESPBPZPNCPnPCDHHDFRJO9NJESSΟCOIEP=DTGFESVOC[HP|FPDPEMADMMOSZZ̡PAѡ ܡFI LN!SEHPPCPFՠPSRP OPUSUEDS DE ) Y pqxpyqzir{isυt{u rȥs p p p )HȥHȥH) xȥ ZɁ ŇhhhLJ) hhh L/hhh`h)  ZLI Z H -h28 JɁLA -`q)@cʊ`q)g b+$0$ H IhL   L/L n)C)o Yrp2ȱq+) bɁ ))xȱ Vh)`) " Lӣ " L VLJĎ - ")7LE YpqLH) vhi шh`8fi` ! ɍ1 X #Ɂ`)ȱ )L8`)к)) ć)𙩁Hȥȥȥȥh`HH ȱȘH ڧ @hhhȘ `H)`)@ h(`) h(H rh(`erĎE Lzr5sbItstL  ps ܦ`tć߰Ď֥s` 䦥r`p ȑL榩 ȑ`p8epJqp pq`` ڧ  `ȱp)"S FL)ȱptȱpuilt ʊ ȑȩȘ & `p0Ŏ )8` Ɂ ,Ƌe` ȧ8`epqr)ߤrp )ߤrp`rirp8`)L)L I)`!d vs ćٱH) vh0Hs hH L(`l kш H 2hH |xorH hL! h )@ I Rh H h H0hH hh` R )H h`   RLH h`)C CPIT ERROR"pp护pbpb [  !`)@ȱp p w:ш 豈pkȑpȱɍƇ )HeшhȑШh ȱȱȱȱ`ƋƊ`bɁ`bbc bLe bȄbccLL)))00 Y $G P k E ݮ Q ) 3 )ㅏ)pȱqυr{szit{iuLe ˉ G ү LH)hH`) "h h`hh`~expyiq}p|`rspq pɁ }t$ pq8`H }hrsL`F ׫r\s]`$ P -pvqw )LL@ ɣ)ɢ!ɡ ݅t pqp`E ׫pq yŃxł 8x~`pq{Ńzł Ls`  )8`)` P GS   L) )hi ߩh  Ωh  * ! I)$ P ԴG P LN @ipAiqL8xzy{8xz` `)00Lp )   `H~ȱxLH~x~ LxhH } } }h8` } }h`)0) )Lح)`I@ȩՠ  բdLpLI`zp{qp pqpLpipqiqxrysrrsrsr` tz (pripqsiq8ztz{u{ LUxpyqxxyt (8prpqsqxtixyuiy eL)υ`xbpqp` V޶  i `hL * l~xH |Ɂh | 8~xȑxxyLⰐx pHxy 8hx~~`pHqH\ ] \]\hqhp`z {z{` y  8 %  y` " ȱ Lگyzp{qz xpqqHp7) hpx) epzqi{x|yi}Șexxy`hy8`~($0x '(txpyq }v|w}`H h`H h`L9hLםH ;h$PH % IhH -hH \]xyx~ ȱxxhxȄ~ I~expyiq8p|q}8xzpy{q`p|~LLם f ;|Ɂ5z{8|xpxzpz ȑzezz{|x}y`zp{qpqpp) ~ *~ȱxɁLL )  - ᢠ LP ) PH $ )߅ |h   Ltɀ Ɋ ^L ɮ ɯ ; L ;L) ) 3L適~LtɀɊL^qppt ȱprȱps b`lrprptpp8rrsqu`qprpt prsqu`q | Դ ˴zpr{q|s qp) ppq &pʊHpHqHڅpq hqhphʥxpyq(t } v|w}(t-vpwqp } LBڅpq L p.tp $0ttepvqiw`Ls ri(r$pOp) -#7_7`7rā( r(`eppqީ_ͩ`ɩ#űp) !#+_+`+rā( r(`eppq_٩`թ#цWords-Characters free- &_| .`\p]qs s$pl||$p` sʩ ~ L &$|%|)  &|) '|)@OI#|"|L.`$p`$p` %`@ # |K J &H0J .L H0" ńHIHHIHI`SEG X ENDSEG Start End Are you sure?  NO ROOM !  Delete to ? Move Cursor to? Word count to? Replace? (Y/N)  MARKERS ?  '  P ) ,;THEN=ORJEORWANDd=l<>ۉ>=ܐ<=|>t<ߦ+ᷔ-+MOD1DIVƔ*1/FB|`ڶ޶ CEPAGE PP --GH侯鯮9U~ܾԾ%ۭW8ǫțvǝ12f34567898:;f<=>?@AQ8 ddL  L i0LHi0 h`rrp&q*  pHȥqphi0,r0 l혝l` Zp[q8XrZYs[xtyu erxsy L  g 99)xpyqzirx{isyZt[u rZs[ ` LOX `` L0:g`H U Ծhg(L2zp{q8xryszt{ututtȱtɁtgetzui{ettu erxsyL^zir{isgv etixuiy rzs{~LxptyqututȱtɁtvettu` Y pzq{rxsy ֮L^HHH HIHIIH ɠ hhh`8韪IHHH hhILܹ  123ţ Ɔ5Select67á8Delete9Main menu s ) text egment    1 entire 2 new 3ţ Ɔ5Search and R 6 7ã 8Spool 9SmenuLoadSave(C) Computer Concepts 1984 WORDWISE-PLUS ( ) ESC Edit ModechoicePrintsearch r Global or selective? (G/S) Memory full ! Marked section only? (Y/N) Press any keyBy CCM & IBLPAPER !  Rold file? (Y/N) File NOT saved! --PAGE BOUNDARY- Which s? (0-9)Are you sure? (Y/N)SEGMENT MENU Previous - filename Previeweplace marked4to cursor Please enter string--------pɁVـ#pq̿pـɁ$ȹ#ڱpɁep@qiA =`epp qpqp =8`JK?L QM`JK?L QM``JhaKiLG` QMG`MhZ B>: EA|.ȱh&|%)R WG T|NMJLMNФMMJ`#8xzhy{hBm8Lם i~)@ixAiy`qupmttrs rpsq@rAsL@ 9 ľ` *~x)A [I x L 9 旤q p(~L*L * ľ`  ľ` 鯰; ľ` - ľ` 9qppHqqI`HIHHI`L 鯐L L~~`~' ֠ 鯰8|xL辠'8|xL f l L f l L- * y `  y` * y ` y y L~x   ` * ]q8` L L r % ľ`  ľ`LU ľ`LLvLV @V V V W@W WWX@XXXY @YY Y Z @ZZZ[@[[ [\@\\ \] @]]]^ @^^^_@__^ ^ t0ψxEjDhevhUVeˊVxfUvVTefVUDTfVUeVTFDDRXEfwHDS˫hUexxfhfvxgfffffvwfggwfsxXDdXXTvxgfʪvgfeeefffVUUUDwh+DuZ2eVUv͋H"SwffvWDuVuhVUUUUUfVfVUUDefUDTUUvͫhE#2DDUvhUDDTeffUUUUEDTUUEDDTUefgϊ$1uΊVDTeWETuݼhVUefUUfgVU5CyhET%RDTVevhhegwygfUUUTUDET4UUuヒhUTTUUffUUUevhggwvfffffffffffffffffffUUffv˻ݼxhfVUUUUUfefvwhfUUDDDDDDDDTEUe2C4CDUUevܻfVUEDTUUUefxfVUDD4334CUI3gh݋$"X4ThffehUvhVuhffffvgVUvgvfwffVfgxwwgfwwwxwwgfwwwwwwfvwwwwwfvwwxwwwwfffVUUUfΚH$ UfVUU$hxvvhVfVvxwhUuhUfVhuwXUfXexxxvexKuvD]Ixlz´U{xą;GxhfzzgȦ{ڼͻ2E2TUvvXeHvJ!iDJRHrxU$2OThtVVxvhvgexDTiUvVeDUvͫVE#"CTVEDTUfvxffffVUUUfffVUUUUUEjVsiVfgDhevFugvgeɚYeUgfFTfUVvVUVeEXuUT\FGDUDUTeUxhfVUETDTDUTUDEdTGX׏Տ44ZlUgDXeXeUTUgffUVdFuFYutgvfgfwwywgfgvvgwwxwgwvfgfww:lZXggUUfVvvTUGUefgxxfwxVUVDTEDD˽ffffgxwwwwffUUUUUUUUUUUUeVUUUUEff[tVTu۽FuXEeˊhVvVTxwffVڽVugvvfewfVffUefVefwgJsH#Buh%"Si$2ugfigfffUfxfUUUffffffVEgˬ&RVˋvHDUvgffEuxwvxfUefefffVeVUeVfffC;LU?tYX&wz4ɂ+-v8xzHG;:;dVg'w s^rpDGYXvwffUEAܾECTU$BevVTewfλhefvwxuZKX[hxJJKzLx,KŤ:[IhxLxZx\kxZX-efjffjfgfhjgfffwhYfehvhfhfjvvzfjzfvzjywgfgvvgwwxwgwvfgfwwyvffvxyzhyxxghgzvvxvfgxgvgvwwfvwwxwwfvwwfw͜VDvxVDeVEdhUehVfxVUUUeffVfUUVEefUUgwfwvxvgvwxfvfvgfwgwfwU􏕏#guy)SvfxEeVUvhfUvXeVvhUffwfUVffWV!2DDdwͺˊUe̫hfxWUhf߫hUUvxVffV4"2` `>` υ셐`7`L*BASIC x =pjqyzyypXl*zyp*Hy h Ly` "ȱ"zw 8aXIllegal pitchX`LX`X`y ^8  " y L`   f b b b b yLqa " - LKa   *L f LfpLuerӐѱpɀrL^ertȦyp> Leʊ8yspu~  r 90r~81Wj  0ŀ~ 0 0 Lfr ~ L^eru hhwLgyesyLgs~ ~e~Lof~~erisz8rzLLey  `򅅥󅆩yz~_pjqurppq> *LpgLf  p# LfA [ Lfp_ ݍhLgLfr𛐙pɀrLfrtȦyp#L-h> L:g8ys   up q Lf p q p#srr rruBhhw 憥牢? XMistake in speechyesy?whhXLine too longerisz8rzLfy  `HyHzH_yjzy*2y>#yɀy y> LbhyzL?h8劅ƊhzhyhLLg ,.?'!:/;->duxa5V2E81>aeA71>aaB91>awA9R61>rD70>uxE81>uwE7R61>aoF91>eeG71>lH70>mJ70>ahK71>vL50>/hN41>tO10>pP10>nI70>bM10>kQ10>wR70>ayS9U5T21>yT70>ihU71>ixU51>ja3V3a20>dW10>nxX70>ohY81>oZ81>er[91>sh\60>owY9R51>oyF9U4T21>cha6\3a11>g]10>s^50>f_51>z`50>/a91>thb51>dhc40>/ud81>zhe50>dra2V3D70>tra4\3D70>cta2Q1a1O10>ehf71>uhg71>iyB9U61>aiC91>%a10>j_a4V30> zz1>,a9a20>.i9a50>?h9a50>***speak*pitch*keep*out*say >OUS_/U5S>I#YIY#EE> #ERE #EE5ER>GTH_TH>NGERNXGER>AGE_AYJ>BBCBEE5%%BEESEE>MICROMIY5KROW>O#UOW5#>AUGHAA5F>KNN>#EY_#EEY> OUGHTAO4T>XCKS>YSIH4S> #OUGH_ #AHF>ERY_EH4REE>OUGH_OH5W> SCI SIY>CHNKN>OGYOJEE>IROIYRO>SUPERIORSUX4PEE5RIHAOR>CISIH>TCHCH>GHOTIFIH4SH>UE_UW6> YES_ YEH5S>GUE_G>URE_UH5R>UYIY5>OUGHAH> #IE #IY>OLE_OW4L> ABLE AY5BL>IYIY>AIGHAY>ABLEAHB/UL>CHRKR>ITLEIYT/UL>A#IAY5#>SHALLSHAEL>AREAI5R>A_AH>OEOW5>ANGE_AY4NJ>ANGEAY4NJ/U>/U/U> GET GEHT>IEDAY5D>ALLYAE4LEE>A#AAY#>REATRAY5T>COME_KAHM>OULD_UH5D> ANY EH4NEE>O#OOW4#>O#AOW4#>A#EAY6#>I#EIY5#>A#OAY#>O#EOW5#>U#EIHUW5#>U#AUXW#>TU#ECHUW#> U#E YUXW#>IEEE>U#IYUXW#>OOKUH5K>COWKAW>NGS_NXZ>STIONS%CH/UN>GOOGUH4>HOW/HAW4>NOWNAW>POWPAW5>ERREH4R>DOWDAW4>SES_SIXZ>PROGPROW4G>NGENJ>DO_DUH4W>OUAE4UX> OUR AW5R>OURAO5R> ONE WO4N>AUAO5>OICOYS>O_OW>AVIAY4VIX>ES_S>ULLUH5L>UHUH>FOOTFUH4T>UL_/UL>EFUL_F/UL>EASE_EEZ>DGJ>OAOH5W>GENJEH5N>LE_/UL>YPEIY4P>TLETL>IGIIX4JIH>WHO/HUHW>NIONNIX/UN>WAS_WOZ>ORE_AO4R> TO_ TUX5>ALKAORK> BE_BEE5>TIOSHAH>YE_IY>ARAA5>AFAA4F>ASTAA6ST>E_%>GHOGOH4W>AZYAY5ZEE>WHAWO5>WATWAO6T>ALLAO4L> OF_ O5V>SSS>FFF>CE_S>CESEH4>TIASHIX/U> A_ AY>MB_M>A#YAIIX#EE>THE_DH/U%> ARE_ AA5R>Y_EE>SIOZH/U> I_ IY6>OWOW>AWAW>WHW>TT> WOR WER5>WRR>ISMIX5Z/UM> ME_ MEE5>GG>DD>PP>BB>WOOWUH> GI JIY>YOU_YUW>AIAY4>IGHIY4>IRER6>UALY/UL>EWIHUW>URER5R> MY_ MIY>AAE>IIH>KK>CK>WW>FF>ZZZ>ORIAORIX4>SS>ZZ>VV>LL>YY>RR>MM>NN>UAH>OO>JJ>H/H>PHF>EUIHUH4>OOUX>EEEE6>MMM>NNN>AIRAIR>EREAIR>ERER>ORAOR>LLL>CKK>EEH>THTH>TTT>DHDH>NG_NX>NGNXG>QUKW>SHSH>ZHZH>OHOH>XKS>CHCH>PPP>AYAY> IS_ IX6Z> SC S>OORAO5R>RRR>OIOY5>OYOY> AS_ AEZ> WITH_ WIX5DH>HE_/HEE6> HAVE_ /HAE5V> BY BIY3> THIS DHIXS> WE_ WEE5> THEY_ DHAY4> HAS_ /HAEZ> THEIR_ DHAI4R>DDD> THAN_ DHAE6N>BBB>GGG> ONLY_ OW5NLEE> PEO PEE4> SHE_ SHEE5>OTHERAHDHER> SAID_ SAI6D>QK> SOME SAH5M> THEN_ DHEH5N>AR_AA5R> MOST_ MOW4ST>ARRAE5R>URRAHR>ORROR>PLYPLIY>EYAY>EAEE5>SCRSKR>0ZIH5R4OW>:.>;?>1WO5N>2TUH4W>3THREE5>4FAO5R>5FIY5V>6SIH6KS>7SEH5V/UN>8AY5T>9NIY5N>-/> >,,>..>??>' >!,>/,>**  SNARFER BEEBUG NOV 83 F =&3000 P *OPT1,2 Z@%=4 d CB%20 nlength=-1:drive=0 x:  7 1A=01:12)157135129141"SNARFER"4156: 12"A DISC UTILITY" '4"by B.J.Last and Matthew Rapier" '"E - EXAMINE" "R - RECOVER" "S - SAVE RECOVERED FILE" "CL - CHANGE LOAD ADDRESS" ""CE - CHANGE EXECUTE ADDRESS" "Q - QUIT TO BASIC" "* - OS COMMAND" '"WHICH OPTION ?"; A$=  A$="E" EXAMINE  A$="R" RECOVER " A$="S" SAVE ,A A$="C" "C";:A$=: A$="L" RELOAD A$="E" REEXEC 6 A$="Q" "INDEX" @ A$="*" OSCLI J T: ^ EXAMINE h''"EXAMINE" r |''"Track",;:track=EVAL(0) !''"Sector",;:sector=EVAL(0) "Error #";~READSEC(&3000) N%=0255:A%=?(&3000+N%) A%<32 A%>126 A%=46  (N% 32)=0 ';~N%,;  A%:   :  RECOVER ''"RECOVER" @''"Please type start track, sector and filelength inbytes." U"Track",;:track=EVAL(0):"Sector",;:sector=EVAL(0):"Length",;:length=EVAL(0) :0,0);"track/sector" address=&3000 N%=0length+256 256 &@0,2);track;6,2);sector;12,2);"ERROR #";READSEC(address) 05sector=sector+1:sector=10 sector=0:track=track+1 :address=address+256 DN% N X: b SAVE l''"SAVE RECOVERED FILE" v1length=-1 ''"No file recovered"':RECOVER ''"Enter filename"  $&A00 X%=&70:Y%=0:A%=0  !&70=&A00  !&72=0  !&76=0 !&7A=&3000 !&7E=&3000+length  &FFDD  :  EVAL(X)  Y,A$  10,11  X=:Y= A$   A$="" X,Y);:TVC * 4 A=(A$) > TJE H=A R: \ READSEC(address) fX%=&70:Y%=0:A%=6 p"?&70=0:!&71=&A00:!&75=1:!&79=0 z&FFD1:drive=?&A01-48 ?CB%=drive:!(CB%+1)=address ?(CB%+5)=3:?(CB%+6)=&53 /?(CB%+7)=track:?(CB%+8)=sector:?(CB%+9)=&21 X%=CB%256 Y%=CB%256  A%=&7F  &FFF1 =?(CB%+10) :  OSCLI ''"OS COMMAND"'   "*"$&A00 X%=0:Y%=&A  &FFF7 "PRESS A KEY":A$= $ A$<>"*" . 8: B RELOAD L''"CHANGE LOAD ADDRESS" V"FILENAME ",$&A00 `!"ADDRESS ";:address=EVAL(0) jX%=&70:Y%=0:A%=2 t !&70=&A00 ~!&72=address  &FFDD  :  REEXEC ''"CHANGE EXECUTE ADDRESS" "FILENAME ",$&A00 !"ADDRESS ";:address=EVAL(0) X%=&70:Y%=0:A%=3  !&70=&A00 !&76=address  &FFDD  :   =17 ':  <&BD " at line ";: ('"PRESS A KEY" 2A= < Y Test for cursor keysength rive"o$"Qd conditions ensure @1 the [ can only be moved beside a file entry J $"ppppppppppppppppppppppppppppp $"5 'Shadow' byR.K. Lloyd j $"5Don't you dare rip me offj ($"````````````````````````````` 2N$="'Shadow'":*TV 255 < 7: 23;8202;0;0;0; F TITLE(1) P\''''" Please read all these instructions as"'" there are some important points in them" Z(""N$" is an entirely machine-code" d*"tape copier that can cope with ANY" nu"program of ANY length currently on the market e.g. 'Locked' Acornsoft,Virgin, Kansas,Superior Software etc." x,'""N$" works on a Model B with ANY OS" R""N$" is specially protected againstsoftware piracy_it can't copy itself !" TITLE(2) m''"When "N$" has loaded, you will be"'"asked how many parts the program you"'"want to copy loads in." "If you aren't sure how many parts thereare,*CAT the whole tape at 1200 and 300baud and make a note of the speed of each part." x"Companies likeComputer Conceptshave started using BOTH 1200 and 300 baud speeds in a single program part." o"Hence "N$" asks if the part loads"'"MOSTLYat 1200 baud. Answer N for No if300 baud is used the most." R" Then "N$" asks if the part loads"'"ALLat 1200 (or 300 if selected) baud." P" ie. if the part loads all blocks at the same speed then press Y for Yes." TITLE(3) ܨ''"If you have a 'mixed' speed program"'"part then pressing N for No instead"'"means you must enter which blocks (in hex) are saved at the 'minority' speed."; R"EXAMPLEComputer Concepts 'Swarm' is a 2-part program. To copy with "N$; %"1) Enter2for program parts." n"2) EnterYthenYagain for the 2 tape"'"speed questions because part 1 is all"'"saved at 1200 baud."  "3) Load and save part 1." X"4) EnterYthenNbecause part 2 has block 01 at 300 baud and the rest 1200."; M"5) Enter01thenRETURNfor that block.Exit by typing a number >&7F." " "6) Load and save part 2." , TITLE(4) 6w'" When you are loading a program part, the normal loading prompts are given aswell as Shadow's own messages." @" N.B. Pressing ESCAPE while loading will clear out any blocks loaded and return you to waiting for the 1st blockagain. This can be very handy..." J" When saving, only the 'RECORD then RETURN' message is retained. After this'Saving PROG' (PROG = filename of part)appears followed by 'Done' when the save has been completed." T}" WARNINGIf a part loads in more than&38 tape blocks, then you have to save that part in two halves i.e. load and" ^l"save blocks 0 to &38 then load and saveblocks &39 to the end. Full prompts aregiven at each stage." h TITLE(5) r)'''" "N$" loads automatically in" |-" two parts , the first of which can" 0" be loaded by either you typing *RUN""""" -" or letting these instructions do it" " for you." -" The point is that these instructions" ."can be discarded when you are familiar" "with "N$"." TITLE(99):*D.  "SHADOW" TITLE(N%) d N%>1 DOUBLE(6,23,136,"PressSPACEto continue"): (-99) ?&20E=&BB ?&226=&FF *FX 14,6  N%=99 /:DOUBLE(7,0,130,"Shadow (C) Clares 1983") FDOUBLE(5,2,130,(157)+"Instructions - Sheet "+(N%)+" "+(156))  DOUBLE(X%,Y%,C%,M$)  Y%=Y% Y%+1 & 31,X%,Y%,C%,141 0 M$; : D %,141 0 18`ehs  (C) Clares 1983  You are reminded that Shadow is  FOR YOUR OWN PERSONAL USE ONLY FX4,1 LOAD"Shadow2" FX14,6 Written by R.K. Lloyd    Please wait while part two loads K.10 T. Searching  You need 32K RAM - Hard Luck !!! ɻ&L y y _ _ @  _Lww _ _ _ y _ _L9_x) lmX y ysutsvsI{utvtL6wmqȹmrq  `mȹm `}|`Shadow (C) Clares 1983 - under no circumstances must this program be copied - it is highly illegal to do so !\%xrA=5#$ ~ {{s o S T B : R {{|dsw([[[vm|qsss[[[[[8 [+ [\( \d~{8 [+ [\( \vdp+[  [ [[   drw[ +7:" vdx3 [[  [[[  dw[[SJVBR[Dv=#OWJvd|})[[[  J[Hv|adxp?[>  [V[) [/ [J[9drw[ (+:8> ve7[[qqvgpkYuvd}p+[[ [[   dpw[ [UUUv( eqvdj} v|?qqav=#JOWMvdrj+ [(+:8>[[ vgzc\pwavd}j?[[ [[ [ dpi  vd~j+ (+:8>[[[vd{uqsqsvd|s?[[  [[dsr[JIKK[v6Uv[S"T5R[D[svq)>84)?[[)>/.)5v=#JNWJvJIKK[v( [vdzu://>5/245/[  [ [[ dxt[ [ [[[[vdzp/[[[I[W[  [  dyw [[[ +7:" v40|vdyp> [[v[[ [dywIV[[U[SE]L=[[R[[[[[sssssvdgs:77[[dwrvy[9_[9}[9s[[CA˂J[CKJ{e[9q[9]{n ['][9[1|m [ {vk;[9I[9[1[ nx['G[9I[9E[9҄҄[[u[K҄7 k~7 KqqqqcKmPC {vA[9t[7 [e[9{[9m[9~M[9g[9S[[Ue[9i[9k[9[S[c[9ck[[9[1x7M Y[9[U7 󫁽y ye[9sC[97[9Kk[9o[9[{z[[xI[U{#u[9v[[[ crL[q[[ck~{ Cx7e[9w[9[Ue[9k[9o[9 7[C vpk K7|K7ApR:C|CK밲k˼k [ U[9[[Uq[v[O[9[[[o[[[{[[q[[ [q[#  { v}[JT IK  HK d[v[y[zj[yD[7ѳ[{u xs{vsks[[A|:7<}K[[sRyr{ YsRzrsQ{[{7xۄ[K[[`~[W[9[CR5"["  LL Try loading the first part next time ! ` X{0Ui){j)H8n/hjir/jjj)Ii{t/ep/Lx/ *LOAD CMOVE C00 7  I%=0 1 (!14112915713116)"SHADOW" 2 <4:''" Do you want instructions (Y/N)";:*FX15,0 AR$=:R$: R$="Y" R$="N" F R$="Y" "SHINST" P*LOAD CMOVE C00 ZF%=&1200:T%=&E7D:L%=&C00 d*KEY0 CALL&109A|M n1*KEY1 *LO.SHAD 1200|M*T.|MCALL&C00,F%,T%,L%|M x*FX138,0,129 x$DNmachine-code" d*"tape copier that can cope with ANY" nu"program of ANY length currently on the market e.g. 'Locked' Acornsoft,Virgin, Kansas,Superior Software etc." x,'""N$" wo SELCOPY (7 BASIC 1 VERSION.Ex Acorn User April 1984 page 61. 2$7:5,2)129"Selective copier"' <130"Source drive (0_3) "; F.SD%=-48: SD%<0 SD%>3 DF@ (SD%)' P$130"Destination drive (0_3) "; Z.DD%=-48: DD%<0 DD%>3 DZ@ (DD%)' d130"Is this OK? "; n(A$=: A$="N" A$<>"Y" Dn@ x A$'' SD%=DD% "Insert source disc in drive ";SD%'"& press"131"RETURN";: "Insert source and destination discs"'"& press"131"RETURN ";  =13: assemble_read_cat readcat 0 blk?10<>0 7::5,5)"Disc Read Error": decode_cat assemble_sort_code sort,E%,NAME$(0) display_cat  mark_cat  setup_copy assemble_mccopy 8 N%=0 5,2)129"No Files Selected for Copying": &5,2)129"Commencing Copying...." ) insert CALL&1400 in keyboard buffer  and exit programme " *FX15 ,*FX138,0,67 6*FX138,0,65 @*FX138,0,76 J *FX138,0,76 T*FX138,0,38 ^*FX138,0,49 h*FX138,0,52 r*FX138,0,48 |*FX138,0,48 *FX138,0,13 821: switch off screen to avoid untidy call command  assemble_read_cat $ BUF% &200,readcat &50,sort &D0 osword=&FFF1  Z%=0 3 2 P%=readcat  [OPTZ% $*LDA #&7F:LDX# blk 256:LDY #blk 256 .JMP osword 8 .blk:] B' parameter block for read command LD?P%=SD%:P%!1=BUF%:P%?5=3:P%?6=&53:P%?7=0:P%?8=0:P%?9=&22:P%?10=0 V ` decode_cat -E%=(BUF%?&105)/8: number of cat. entries  NAME$(E%-1),C(E%-1) Z%=0 E%-1  Y%=0 6 -NAME$(Z%)=NAME$(Z%)+(BUF%?(Y%+8*(Z%+1)))   - find Directory:allow for files in DIR 0  3 used by the Author for certain procted files! *?D%=BUF%?(Y%+8*(Z%+1)): D%=0 D%=32 D%=&80 D%=&80+32 4 work out locked entries >[ D%<128 NAME$(Z%)=(D%)+"."+NAME$(Z%): D%=D%&7F:NAME$(Z%)=(D%)+"."+NAME$(Z%)+" L" H R display_cat :5,1)129"File Selection" 0,4); Z%=0 E%-12 O 1)NAME$(Z%)12)131" "135;: Z%<=E%-2 20);NAME$(Z%+1)31)131" "135    mark_cat  Cursor Off 23,1,0;0;0;0; 0,21)130"Select file with"131"["130"using cursor keys"'131"SPACEBAR"130"marks file for copying"'130"Use"131"DELETE"130"for corrections"'131"@"130"ends selection and initiates copying";  enable cursor key codes  *FX4,1 % adjust key repeat & delay rates  *FX12,20  *FX11,20  X=13:Y=4  X,Y)"["  mark entries to be copied  "Z= ,/ Test for cursor keys and move if possible 6( the complicated conditions ensure @1 the [ can only be moved beside a file entry J Cursor Down T_ Z=138 ((Y=3+(E%+1)2-1)(X=32)(E%2=1)) (Y>2+(E%+1)2) X,Y)" ":Y=Y+1:X,Y)"[" ^ Cursor Up h- Z=139 Y>4 X,Y)" ":Y=Y-1:X,Y)"[" r Cursor Right |A Z=137 ((Y=3+(E%+1)2) E%2=1) X,Y)" ":X=32:X,Y)"["  Cursor left & Z=136 X,Y)" ":X=13:X,Y)"[" 0 Test for spacebar and mark file in array C 0 Z=32 X-13,Y)130:C(2*(Y-4)+1+(X=13))=1 9 TEST FOR Delete and remove file marker from array C /Z=127 X=13,Y)" ":C(2*(Y-4)+1+(X=13))=0  exit on @ being pushed  Z=64 " restore repeat & delay rates  *FX12   restore cursor operation *FX4  Cursor On 23,1;0;0;0;  setup_copy % Set up file names to be copied " in a list starting at &1200  K%=&1200:N%=0 Z%=0 E%-1 C(Z%)=0 dbS $K%=NAME$(Z%),9) K%=K%+10:N%=N%+1   passemble_sort_code ! moified toignore lower case ~LOOPCOUNTH=&70:FIRST=&71:SECOND=&73:TEMP=&75:ADDRESS=&76:NUMBER=&78:STORE1=&7A:STORE2=&7C:LGTH1=&7E:LGTH2=&7F:OSWRCH=&FFEE I%=022:P%=sort  [OPTI%  LDA&600  CMP#2 BNE MISTAKE  LDA&603  CMP#4 BNE MISTAKE  LDA&606  CMP#81  BEQ OK $ .MISTAKE .LDA#("?") 8JSR OSWRCH BRTS L.OK V LDA&601 ` STA FIRST j LDA&602 tSTA FIRST+1 ~ LDY#0 LDA(FIRST),Y SEC  SBC#1 STA NUMBER INY LDA(FIRST),Y  SBC#0 STA NUMBER+1  .LOOP3  LDA&604 STA STORE2  LDA&605 STA STORE2+1  LDX#0 STX LOOPCOUNTH  .LOOP4 ( LDY#0 2LDA STORE2+1 <STA STORE1+1 FLDA STORE2 PSTA STORE1 ZCLC d ADC#4 nSTA STORE2 xBCC NOCARRY3 INC STORE2+1  .NOCARRY3 LDA(STORE1),Y  STA FIRST LDA(STORE2),Y STA SECOND INY LDA(STORE1),Y STA FIRST+1 LDA(STORE2),Y STA SECOND+1  LDY#3 LDA(STORE1),Y  STA LGTH1 LDA(STORE2),Y  STA LGTH2 " LDY#0 ,*.LOOP5\check for lower case and ignore 6?LDA(SECOND),Y:CMP#97:BCC normal:SEC:SBC#32:.normal STA TEMP @.LDA(FIRST),Y:CMP#97:BCC normal2:SEC:SBC#32 J.normal2 CMP TEMP TBCC NEWRECORD ^ BNE SWAP hINY r CPY LGTH1 |BEQ NEWRECORD  CPY LGTH2  BEQ SWAP  BNE LOOP5  .PIVOT1  BPL LOOP3  .PIVOT2  BNE LOOP3  .SWAP  LDY#3  .LOOP6 LDA(STORE1),Y  STA TEMP LDA(STORE2),Y STA(STORE1),Y  LDA TEMP STA(STORE2),Y &DEY 0 BPL LOOP6 :.NEWRECORD DINX NBNE NTZERO XINC LOOPCOUNTH b .NTZERO lCPX NUMBER v BNE LOOP4 LDA LOOPCOUNTH CMP NUMBER+1  BNE LOOP4 DEC NUMBER BEQ LOWZERO LDA NUMBER  CMP#&FF BNE PIVOT2 DEC NUMBER+1 BPL PIVOT1  .LOWZERO LDA NUMBER+1 BNE PIVOT2 RTS  ]I%  @assemble_mccopy Joscli=&FFF7 T Z%=032 ^0 This code uses space allocated to the DFS. hBIt should not normally be in use when this programme is used. r&P%=&1400:copylist=&70:numfiles=&72 | [OPT Z% #LDA#6:JSR&FFEE\switch on screen BLDA #N%:BNE ok:RTS \double check that there are files to copy! Z.ok STA numfiles:LDA #0:STA copylist:LDA #&12:STA copylist+1 \copylist stored at &1200 WLDA #SD%+&30:STA dinfo:LDA #DD%+&30:STA dinfo+1 \store drive numbers in copy string .nxfile LDY #9 [ .nxfile2 LDA (copylist),Y:STA buf,Y:DEY:BPL nxfile2 \move next filename to copy string KLDX #osc 256:LDY #osc 256:JSR oscli \send to Command Line Interpreter iLDA #10:CLC:ADC copylist:STA copylist:LDA #0:ADC copylist+1:STA copylist+1 \move pointers in copylist 0DEC numfiles:BNE nxfile \check if more files RTS \finished!  .osc:] > copy string follows.Drives inserted in dinfo and dinfo+1  filename in buffer 'buf' 4$P%="COPY":P%=P%+4:dinfo=P%:?P%=0:P%?1=0:P%?2=32 P%=P%+3:buf=P%  & ( entries%>columns% 9);:entries%=0 Q3tabpoint%=tabpoint%+1: tabpoint%>tabend% `GQ Q!newfirstpart%=tab%(tabpoint%) Q3 newfirstpart%<>firstpart% tabpoint%>tabend% Q Qfirstpart%=newfirstpart% Q ta