L!RS423(C) Acorn User /  `L>LFLbLzH ;W LGh` Acorn User Romfile Type *HELP ROMFILE H)! ݢ LLhh`ROMFILE L To load any program from Acorn User's ROMFILE type *ROM followed by then LOAD, CHAIN, *LOAD, *RUN, *CAT etc. in the normal way HIIh`h`HIh`HH LRomfile: RS423 hh`*RS423]D#6 ' RECEIVE 40 TRACK DISK FROM RS423 $ <>&3000 =&3000:"RS423]D"  BASIC RECEIVE RTN. ( DXB 2 b 50 < PAGE=&3000 F P *TV0,1 Z ENABLE SCREEN d *FX3 n *FX2,0 x 7  15 : PAGE MODE OFF  3 : PRINTER OFF # RECEIVE RATE *FX 7,8  CLEAR ALL BUFFERS *FX15  DISABLE ADC CHANNELS *FX16  '10);"RECEIVE"  10);"*******"  _ '''"Drive for storage ? ";::DR$=: DR$>="0" DR$ <="3"  Drv%=(Dj #R$): ;Drv% 5 ''"DISK OR TRACK ? ";::O$=: O$="D" O$="T"  O$''  O$="D" tFA " ,, " INSERT DESTINATION DISK.":init_vars 68 ''"Which Track (0 to ";Tracks%-1;") ..";: track% @+ track%<0 track%>(Tracks%-1) TvA J receive #T store_track(track%) ^ delay(dely%) h ''"AGAIN ? ";: ="Y" r '': |  MAIN LINE  init_vars O " Whole Disk ? ";::W$=: W$="Y" W$="N":" ";W$: W$="Y" d~A  tnA . '"How many sectors free (HEX) ? "sfr#ee$ ' sfree$="&"+sfree$:sfree%=(sfree$) ) sfree%<0 sfree%>Tracks%*10 tnA  DXB * Tk%=Tracks%:Tracks%=Tk%-(sfree% 10)  Tracks%<0 Tracks%=0  Tracks%>Tk% Tracks%=Tk% & '" LOADING ";Tracks%;" TRACKS"'   track%=0 G#Tracks%-1  receive  store_track(track%) & delay(dely%) 0 track% :* 7,7,7,7:''"DISK TRANSFER COMPLETE" D N X ERROR ROUTINE b *FX3 l *FX2 v :" @ Line ....";    init_vars ! B%=&1900:Q%=&2400:Tracks%=40 ͉# dely%=0  osword=&FFF1   " store_track(T%): X%,Y%,A% % X%=b 256 : Y%=b 256 : A%=&7F  ?b=Drv% : DRIVE 0  b!1=B% : POS. OF block  b?5=3 : no. OF PARAMS  b?6=&4B : 'WRITE'   b?7=T% : TRACK  b?8=0 : sector# 0 - 9   b?9=&2A : 256 x 10 * osword 4! '"STORED TRACK -->";track% > b?10=0 D\C H3 7:"ERROR No. ";b?10;" ... TRY AGAIN Y/N ";: R : ="N" dum=0 dZB \ "NO SAVE ERRORS..." f 35,"*")' p z  receive  I% Tb# B%=&1900:Q%=&2400 ! '"RECEIVING TRACK ";track%  INPUT FROM RS423 ONLY  '':V%=-2  *FX3,6  *FX2,1 2 I%=0 2560 4:0,V%),A$:I%!B%=("&"+A$): 2 I%=0 2560 4:0,V%),A$:I%!Q%=("&"+A$): # CLEAR INPUT TO KEYBOARD ONLY # *FX2,0  *FX3,0 8 (-2)<>0 7:"** Characters still in buffer **" 8 "LOADING COMPLETE .. ";:E%=0:!(Q%+2560)=!(B%+2560) + I%=0 2560 4:I%!B%<>I%!Q% E%=1 $< : E%=1 7,7:" TRANSFER ERROR":dum=: "CHECK OK" . 8 B deld*RS423]D# >6Tay(T%): T%=0 L M% V M%=:: >=(M%+(T%*100)) ` G8*DISC]RS# & TRANSMIT 40 TRACK DISK TO RS423 $ <>&3000 =&3000:"DISC]RS"  DbB ( b 50 2 PAGE=&3000 < F *TV0,1 P ENABLE SCREEN Z *FX3 d 7 n 15 : PAGE MODE OFF x 3 : PRINTER OFF  CLEAR ALL BUFFERS *FX15 # SET BAUD RATE *FX 8,8  DISABLE ADC CHANNELS *FX16  '10);"TRANSMIT"  10);"********" # ''"From which DRIVE 0-3 ? "; Drv%=(get("0123")):;Drv%  + ''"DISK OR TRACK ? ";: O$=get("DT") O$''  O$="D" DrA # ) " INSERT SOURCE DISK...":init_vars "( ''"Which Track (0 to 39) ",track% ," track%<0 track%>39 TbA 6 _loadtrack(track%) @ send J delay(dely%) T! '"AGAIN ? ...";: ="Y" ^ '': h r MAIN LINE | init_vars : #" Whole Disk ? ";:W$=get("YN"):;W$: W$="Y" dtA  tZA . '" How many sectors free (HEX) ? "sfree$ ' sfree$="&"+sfree$:sfree%=(sfree$) * sfree%<0 sfree%>Tracks%*10 tZA  DbB * Tk%=Tracks%:Tracks%=Tk%-(sfree% 10)  w# Tracks%<0 Tracks%=0  Tracks%>Tk% Tracks%=Tk% & '"SENDING ";Tracks%;" TRACKS"'   ''" INSERT SOURCE DISK" ! '"Press any key ";:dum=:   track%=0 Tracks%-1  _loadtrack(track%) & send 0 delay(dely%) : track% DH#) 7,7,7,7:''"DISK TRANSFER COMPLETE" N X b ERROR ROUTINE l *FX3 v :" @ Line ....";    init_vars  B%=&1900  Tracks%=40:dely%=4  osword=&FFF1   ! _loadtrack(T%): X%,Y%,A% % X%=b 256 : Y%=b 256 #: A%=&7F  ?b=Drv% : DRIVE 0  b!1=B% : POS. OF block  b?5=3 : no. OF PARAMS  b?6=&53 : 'READ'   b?7=T% : TRACK  b?8=0 : sector 0 - 9   b?9=&2A : 256 x 10 * osword 4% '"LOADED TRACK ";track%;" .."; > b?10=0 D\C #H- 7:"ERROR ";b?10'" ... TRY AGAIN Y/N "; R ="N" dum=0 dZB \ "NO LOAD ERRORS..." f p z send  I%,copy% O (-3)<>191 "** CHARACTERS STILL IN BUFFER **": tNC  '"SENDING TRACK ";track%   # OUTPUT TO RS423 ONLY  *FX3,7  copy%=1 2 " I%=0 2560 4:;~(I%!B%):  copy%  *FX3,0  "TRANSMITTED"'35,"-")'    delay(T%)  M%  M%=:: >=(M%+(T%*100)) $ . 8 get(T$): A$: T$="" ="" B :A$=&*DISC]RS# Z: T$,A$)<>0 L =A$ a*RS423UT#  LOAD++  tdA  *TV255,1 ( *FX12 2 *FX16 3 T|@ F7 cli% 20 ,F$(31):cli("DRIVE"+(D%))::flen=&5500 P 7: F% flen Z* "Press 'SPACE' ..... ";:: =32:'' d n7 loadd#ata:''"***********************"'':disksave x 0    cli(T$): X%,Y%,A% , X%=cli%:Y%=cli% 256:$cli%=T$:&FFF7:   del(T%): t%  t%=: >t%+T%*100:     loaddata : I% *FX 15  ''  *FX7,8  &#*FX8,8  *FX 2,1 "Q file$: file$: file$<>file$ 7:"FILE NAME NOT CORRECT" "FILE NAME OK" ,E S$=file$,15,6):E$=file$,22,6):L$=file$,29,6):name$=file$,10) 6 :vp%= @! I%=0 ("&"+L$):I%?F%=: J *FX2 T( 6:''"FILE .... ";name$;" LO!*RS423UT#~ADED"' ^ h r disksave:*OPT 1,1 |5 cli("SAVE "+name$+~(F%)+" +"+L$+" "+E$+" "+S$)  'name$;" saved"'    ERROR  *FX2  :" AT ";: C+