@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u; ;Set start of program high enough for ;Atari DOS II & 2.5 ; SET 14=$2000 SET $491=$2000 ; ;This should make iT}t Sparta DOS ;compatible ; PROC SD() RETURN ; ;Procedures necessary to make the ;program run without the cartriU}dge ;from Jeff Riesner's PD files ; PROC _CPYPRM=*() SET $4EE = _CPYPRM ;Called when subroutine has more ;thanV} 2 bytes of parameters. [$85$A0$86$A1$84$A2$18$68$85$84$69$03 $A8$68$85$85$69$00$48$98$48$A0$01$B1 $84$85$82$C8$B1$84$8W}5$83$C8$B1$84$A8 $B9$A0$00$91$82$88$10$F8$60] PROC _CHGSGN=*() ;utility for math routines. [$85$C0$86$C1$38$A9$00$X}E5$C0$48$A9$00 $E5$C1$AA$68$60] PROC _FIXSGN=*() ;utility for math routines. [$86$C2$E0$00$10$03$20 _CHGSGN $85$82Y} $86$83$A5$85$45$C2$85$C2$A6$85$10$09 $A5$84$20 _CHGSGN $85$84$86$85$60] PROC _FIXRES=*() ;utility for math routinZ}es. [$A5$86$A6$87$A4$C2$10$03$4C _CHGSGN $60] PROC _MUL=*() SET $4E8 = _MUL ;integer multiplication. [$20 _FIX[}SGN $A9$00$85$86$85$87$A5$82 $D0$04$A5$83$F0$22$A5$84$D0$04$A5$85 $F0$1A$46$85$66$84$90$0D$18$A5$86$65 $82$85$86$A5$87$\}65$83$85$87$06$82$26 $83$38$B0$D6$4C _FIXRES] PROC _DIV=*() SET $4EA = _DIV ;integer division. [$20 _FIXSGN $A9$]}00$85$86$85$87$85$C1 $A9$01$85$C0$A5$82$D0$04$A5$83$F0$5F $A5$84$D0$04$A5$85$F0$57$A5$82$C5$84 $A5$83$E5$85$90$0F$A5$C1^}$30$0B$06$84 $26$85$06$C0$26$C1$38$B0$E7$A5$C0$D0 $04$A5$C1$F0$36$A5$82$D0$04$A5$83$F0 $2E$A5$82$C5$84$A5$83$E5$85$90$1_}9$38 $A5$82$E5$84$85$82$A5$83$E5$85$85$83 $A5$86$05$C0$85$86$A5$87$05$C1$85$87 $46$85$66$84$46$C1$66$C0$38$B0$C2$4C _`}FIXRES] PROC _MODOP=*() SET $4EC = _MODOP ;MOD operation. Actually just ;remainder of division. [$20 _DIV $A5$82a}$A6$83$60] PROC _ERROU=*() ;Error routine. [$A9$70$AA$A9$0C$9D$42$03$20$56$E4$8A $38$E9$10$D0$F1$6C$0A$00] PRb}OC _ERRVEC=*() [_ERROU] PROC _DEVIC=*() [$00] MODULE CARD Error=_ERRVEC BYTE device=_DEVIC PROC _GOCIOc}=*() ;JSR to CIO routine and check ;for errors. [$20$56$E4$10$1A$C0$88$F0$06$68$68$98 $6C _ERRVEC $48$8A$48$4A$4A$4A$d}4A$AA $A9$01$9D$C0$05$68$AA$68$60] PROC _LODCHN=*() ;Check A reg for illegal IOCB #. ;If ok, X reg = A reg * 16. e} [$C9$08$90$07$68$68$A9$86$6C _ERRVEC $0A$0A$0A$0A$AA$60] PROC _STONAM=*() ;I/O utility. [$18$69$01$9D$44$03$98$69f}$00$9D$45$03 $60] PROC _SHFTR=*() ;I/O utility. [$48$8A$A8$68$AA$AD _DEVIC $60] PROC _CLREOL=*() ;Clear EOLg} flag. [$48$A9$00$85$A5$68$60] PROC _SETEOL=*() ;Set EOL flag. [$48$A9$01$85$A5$68$60] PROC _PRECON=*() ;I/h}O utility. [$8A$48$98$AA$68$A0$03$84$A3$A0$FD$60] PROC _DOPRNT=*() ;Print a string. [$86$A3$84$A4$20 _LODCHN $A9$0i}0$9D$49 $03$A8$B1$A3$F0$1A$9D$48$03$18$A5$A3 $69$01$9D$44$03$A5$A4$69$00$9D$45$03 $A9$0B$9D$42$03$20 _GOCIO $A5$A5$F0 j} $12$A9$00$9D$48$03$9D$49$03$A9$0B$9D $42$03$A9$9B$20 _GOCIO $60] PROC StrC=*(CARD c, s) [$85$D4$86$D5$84$A2$20$AA$Dk}9$20$E6$D8 $A0$00$B1$F3$30$06$C8$91$A2$38$B0$F6 $29$7F$C8$91$A2$98$A0$00$91$A2$60] PROC _DOPRNC=*() ;Print a CARD.l} [$48$20 _PRECON $20 StrC $68$A2$FD$A0 $03$4C _DOPRNT] PROC PrintCDE=*(BYTE d CARD c) [$20 _SETEOL $4C _DOPRNC] m} PROC PrintCE=*(CARD c) [$20 _SHFTR $4C PrintCDE] PROC PrintD=*(BYTE d CARD s) [$20 _CLREOL $4C _DOPRNT] PROCn} Print=*(CARD s) [$20 _SHFTR $4C PrintD] PROC PrintDE=*(BYTE d CARD s) [$20 _SETEOL $4C _DOPRNT] PROC PrintE=*(o}CARD s) [$20 _SHFTR $4C PrintDE] PROC PutD=*(BYTE d, c) [$86$A0$20 _LODCHN $A9$00$9D$48$03$9D $49$03$A9$0B$9D$42$0p}3$A5$A0$20 _GOCIO $60] PROC Put=*(BYTE c) [$AA$AD _DEVIC $4C PutD] PROC PutE=*() [$A9$9B$4C Put] PROC Puq}tDE=*(BYTE d) [$A2$9B$4C PutD] BYTE FUNC ValB=*(CARD a) CARD FUNC ValC=*(CARD a) INT FUNC ValI=*(CARD a) [$85$A2r}$86$A3$A9$00$85$A0$85$A1$85$A5 $A8$B1$A2$85$A4$C8$B1$A2$C9$20$F0$F9 $C9$2D$D0$0B$C6$A5$C8$C4$A4$F0$02$B0 $31$B1$A2$38$Es}9$30$90$2A$C9$0A$B0$26 $48$06$A0$26$A1$A5$A0$A6$A1$0A$26$A1 $0A$26$A1$18$65$A0$85$A0$8A$65$A1$85 $A1$18$68$65$A0$85$A0$t}90$CD$E6$A1$38 $B0$C8$A5$A5$F0$0D$38$A9$00$E5$A0$85 $A0$A9$00$E5$A1$85$A1$60] PROC _DOINPT=*() ;Called by all inpuu}t routines. [$86$A4$84$A5$20 _LODCHN $18$A5$A4$69 $01$9D$44$03$A5$A5$69$00$9D$45$03$A5 $A3$F0$18$9D$48$03$A9$00$9D$49$0v}3$A9 $05$9D$42$03$20 _GOCIO $BD$48$03$F0 $03$38$E9$01$A0$00$91$A4$A5$A6$F0$07 $A5$A4$A6$A5$4C ValC $60] BYTE FUNC w}InputBD=*(BYTE d) CARD FUNC InputCD=*(BYTE d) INT FUNC InputID=*(BYTE d) [$48$A9$78$85$A3$A9$01$85$A6$68$A2$FD $A0$03x}$4C _DOINPT] BYTE FUNC InputB=*() CARD FUNC InputC=*() INT FUNC InputI=*() [$AD _DEVIC$4C InputCD] PROC Inputy}MD=*(BYTE d CARD s BYTE l) [$48$A9$00$85$A6$68$4C _DOINPT] PROC InputSD=*(BYTE d CARD s) [$48$A9$FF$85$A3$68$4C Inpuz}tMD] PROC InputS=*(CARD s) [$20 _SHFTR $4C InputSD] CHAR FUNC GetD=*(BYTE d) [$20 _LODCHN $A9$00$9D$48$03 $9D{}$49$03$A9$07$9D$42$03$20 _GOCIO $85$A0$60] PROC Open=*(BYTE d CARD s BYTE m, a) [$86$A1$20 _LODCHN $A5$A1$20 _STO|}NAM $A5$A3$9D$4A$03$A5$A4$9D$4B $03$A9$03$9D$42$03$20 _GOCIO $8A$4A $4A$4A$4A$AA$A9$00$9D$C0$05$60] PROC Close=*(BYT}}E d) [$20 _LODCHN $A9$0C$9D$42$03$20 _GOCIO $60] PROC Graphics=*(BYTE m) [$48$A2$60$A9$0C$9D$42$03$20$56$E4$68 $~}9D$4B$03$49$10$09$0C$9D$4A$03$A9$53 $85$A0$A9$3A$85$A1$A9$A0$9D$44$03$A9 $00$9D$45$03$A9$03$9D$42$03$20 _GOCIO $60] } PROC Position=*(CARD x BYTE y) [$85$55$86$56$84$54$60] PROC SCopy=*(CARD d, s) [$85$A0$86$A1$84$A2$A0$00$B1$A2$A8$}B1 $A2$91$A0$C0$00$F0$04$88$38$B0$F4$60] MODULE ; ;*IF* I really wanted to, there's ;nothing wrong with just hav}ing ;a small buffer & maybe keeping a ;file open on another drive for ;huge transfers, but it assumes ;everyone has 2} drives. I could also ;read/write the thing in hunks, but ;I've transferred 27K files with SDX ;& the program compiled }from disk. I ;can't imagine needing much more then ;that. More features=> smaller buffer ; BYTE me, DCOMND=770,DUNIT=}769, DSTATS=771,Key=764,drivetype, DDEVIC=768 BYTE POINTER Bptr CARD SNUM=778,DBUF=772,DBYTE=776, DT}IME=774,Flen,S,T,C CARD ARRAY secmap(360) BYTE ARRAY GPB(256),buf(24000) DEFINE Wait="WHILE Key=255 DO OD Key=255}" PROC Makemap() CARD MAX Position(0,8) PrintE(" Pick 1) For a stock 1050") PrintE(" Pick 2) For a U}S Doubler") Position(10,12) Put('?) drivetype=InputB() IF drivetype=2 THEN drivetype=18 MAX=702 ELSE dr}ivetype=26 MAX=1014 FI C=1 ; ;Definition for a STOCK 1050 =>26 ;US Doubler would be 18 ;Percom, ATR or XF}551????? ; FOR T=0 TO MAX STEP drivetype DO FOR S=1 TO 9 DO secmap(C)=S+T C==+1 OD OD R}ETURN PROC DINV=$E453() RETURN PROC SIOV=$E459() RETURN PROC Write() PrintE(" Input file name & D}rive") Put(127) Put('?) InputS(GPB) Close(1) Open(1,GPB,4,0) Flen=0 WHILE EOF(1)<>1 DO buf(Flen)=GetD(1)} XOR $FF Flen==+1 OD Flen==-1 Print("File Length=") PrintCE(Flen) PrintE(" Insert a Mule disk now") Prin}t(" then press a key ") Wait PutE() ; ;I.D. with Hello Atari ; DUNIT=1 ;DRIVE D1: DCOMND='W ;write SNU}M=1;I.D. sector SCopy (GPB,"Hello Atari") Bptr=GPB+GPB(0)+1 Bptr^=0;'C end of string for IBM side FOR Bptr=GPB TO GPB}+127 DO Bptr^==XOR $FF OD DBUF=GPB+1 PrintE("Writing Sector #1") DINV() ; ;File length in sector #2 ; } PrintE("Writing Sector #2") GPB(0)=Flen MOD 256 XOR $FF GPB(1)=Flen/256 XOR $FF DUNIT=1 ;DRIVE D1: DCOMND='W ;write} DBUF=GPB SNUM=2;FILE LENGTH SECTOR DINV() ; ;1ST PART OF FILE IN SECTOR #3 ; PrintE("Writing Sector #3") DUN}IT=1 ;DRIVE D1: DCOMND='W ;write DBUF=buf SNUM=3;1st data SECTOR DINV() ; ;I believe DUNIT etc have to be reset } ;every pass. Certainly doesn't hurt ; T=Flen/128+3 IF (Flen MOD 128) THEN T==+1 FI FOR C=4 TO T DO Print(}"Writing Sector #") PrintCE(C) SNUM=secmap(C) DDEVIC='1 DUNIT=1 ;DRIVE D1: DCOMND='W ;write DBUF=buf+128*(C}-3) DSTATS=$80;SIO direction=>output to D1: DTIME=3 ;reasonable time out value IF drivetype=18 THEN DBY}TE=$100;256 byte SECTOR ELSE DBYTE=$80 FI SIOV() OD RETURN PROC Read() PrintE(" INSERT MULE DISK }IN D1:") Print(" PRESS a key when ready") Wait DUNIT=1 ;DRIVE D1: DCOMND='R ;READ SNUM=1 DBUF=GPB DINV() FOR} Bptr=GPB TO GPB+10 DO Bptr^==XOR $FF Put(Bptr^) OD PutE() IF GPB(0)<> 'H THEN PrintE(" Probably not a }Mule disk!") PrintE(" REMOVE & REINSERT THE DISK") Print(" PRESS ANY KEY TO CONTINUE ") Wait RETURN FI SNUM=2 } DINV() Flen=(GPB(1) XOR $FF)*256 Flen==+(GPB(0) XOR $FF) Print("File length=") PrintCE(Flen) S=3 T=Flen/128+2 } IF (Flen MOD 128) THEN T==+1 FI FOR C=S TO T DO SNUM=secmap(C) DBUF=buf+128*(C-3) Print(" Reading Sector #"}) PrintCE(C) DINV() FOR Bptr=buf+128*(C-3) TO buf+128*(C-3)+127 DO Bptr^==XOR $FF OD } OD PrintE(" PUT an Atari disk in D1:") Print(" PRESS ANY KEY TO CONTINUE ") Wait PutE() Close(1) Open(1,"D1}:MULE.DAT",8,0) Put(127) PrintE("Writing FILE as D1:MULE.DAT") FOR Bptr=buf TO buf+Flen-1 DO PutD(1,Bptr^) OD }Close(1) RETURN BYTE FUNC Menu() Put(125) Position(0,8) PrintE(" Enter 0 or to quit") PrintE(" } 1 to WRITE a MULE disk") PrintE(" 2 to READ a MULE disk") Position(14,12) Put('?) me=InputB() RETURN(me) } PROC Main() BYTE choice=[1],rmarg=82 rmarg=0 Graphics(0) Makemap() WHILE choice<>0 DO choice=Menu() IF} choice=1 THEN Write() FI IF choice=2 THEN Read() FI OD HILE choice<>0 DO choice=Menu() IFU#include "dos.h"#include "ctype.h"#include "stdio.h"#include "string.h"#include "io.h"/* Turbo C 1.5 source code for th }e IBM side. OK, I just slopped this out!So what! First guy who whines about it, I find out where he lives &kill his dog }! I don't need this program & didn't even the firsttime I wrote it, just trying to be a nice guy.Most everytime I've asked }someone with a stock 1050to even test a simple code fragment, zero response. You reap what you sow:SOW=>0 ergo REAP=>this }. I'm thinking of adding Atari to IBM transfersI mainly did the retrieval code on this side so I could compare the before& } after files. I'l U/L the Action! source code with it's done.I don't have FTP access anymore so the only place this will app }ear is theInternet message base. If someone doesn't snag it & send it to the archivesit's gone forever 'cause I'm a little } bored with it. */main(argc, argv)int argc;char *argv[];{int choice;if (argc!=3) { printf(" Mule file } transfer program by Rick Cortese 3/30/93\n"); printf(" for transfering IBM<>Atari 1050: Use upper case\n"); } printf(" Usage: MULE [R,W] [DRIVE:]FILENAME\n"); printf(" This program only uses drive A: "); pr }intf("to avoid hard drive heartaches!\n"); printf(" if you leave out the drive, it'll look at the\n"); prin }tf(" DEFAULT drive for the file to be transfered.\n"); printf(" I seem to have left out an &, !, or [] here and }there,\n"); printf(" but the program works fine for me. If you're worried,\n"); printf(" just write prot }ect & reset your computer after use\n"); printf(" The disk used for the transfers should be formatted\n"); } printf(" on an IBM using a double density disk only @180k.\n"); printf(" Make SURE you follow the prompts for c }hanging disk &\n"); printf(" everything's properly labeled, NO 2nd CHANCES! If you've\n"); printf(" nev }er labled a disk before in you life, label this one.\n"); printf(" If the operation is (R)ead, the Mule disk will }be read\n"); printf(" then written as FILENAME to the default or specified drive\n"); printf(" For (W)r }ite, an IBM file is read into a buffer, then\n"); printf(" written a Mule disk. Max file size is 32k! but it wil }l\n"); printf(" work with arced files. I've made it so the Atari end only\n"); printf(" officially handl }es 24k, but if you disable basic, edit\n"); printf(" the RT file, use a DOS with a good LOMEM, you should\n"); } printf(" be able to get the entire file transfered.\n"); exit(); }if (!strcmp(argv[1],"R")) }{ muleread(argv[2]); exit(); }if (!strcmp(argv[1],"W")) { mulewrite(argv[2]); } exit(); }else printf("Option %s not available!", argv[1]);}/* Read a mule disk & make a MS DOS file. Max file si }ze is 32k! */muleread(char *arg){unsigned char buf[32000];FILE *fp;int fsize, j;unsigned int x;printf("Insert MULE dis }k in driv A now!\n");printf("then hit to start\n");x=getche();absread(0, 1, 0, buf);printf("%s\n", buf);if (str }cmp(buf, "Hello Atari")) { printf("Not a Mule disk!\n"); exit(); }absread(0, 1, 1, buf);j=b }uf[0]+buf[1]*256;for (x=0; x*128<=j; x++) { printf("Reading sector number %d\n",x+2); absread(0, 1, }x+2, &buf[x*128+2]); }printf("Insert a MS DOS disk in the DEFAULT drive now! Then hit \n");x=getche();fp= }fopen(arg, "wb");fsize=buf[0]+256*buf[1];printf("Writing %d bytes\n", fsize);fwrite(buf+2, fsize, 1, fp);fclose(fp);}/* } Take a MS DOS file & make it into a Mule disk */mulewrite(char *arg){unsigned char buf[32000];int j, fsize;unsigned int } x;unsigned char ch;FILE *fp;printf("Put the MS DOS disk with the file to be transfered in DEFAULT drive\n");printf("the }n hit to continue\n");x=getche();if((fp=fopen(arg, "rb"))==NULL) { printf("Couldn't open %s\n", ar }g); exit(); }j=0;while (!feof(fp)) buf[j++]=getc(fp);--j;fclose(fp);printf("file size is %d bytes\n", j) };printf("Insert a Mule disk in DRIVE A: now!\n");printf("then hit to continue\n");printf("WARNING: THIS WILL ERAS }E ANY FILES CURRENTLY ON A:\n");x=getche();x=j;abswrite(0, 1, 1, &x);for (x=0; x*128<=j; x++) { printf("W }riting sector number %d\n",x+2); abswrite(0, 1, x+2, &buf[x*128]); }/* A simple way to I.D. this as a MULE d }isk */strcpy(buf, "Hello Atari");abswrite(0, 1, 0, buf);}/l--Rick Corteseinternet: ricortes@TheRat.Kludge.COM uuc }p: ...!apple!therat!ricortes");abswrite(0, 1, 0, buf);}/l--Rick Corteseinternet: ricortes@TheRat.Kludge.COM uuc  _/L `hihiHHȱȱ`8Hh` 1 E…¦ 1 `L1 ` B }"Ff ee&8Lc B _Wń児0 &&86.ń}8儅充FfFf8Lc `p B V8l &! Vhhl:!HHJJJJhh`hhl:! }`iDiE`Hh-i?->-#?-#L]-91##I##L--##L&,L- PUT an Atari disk in D1:-k 0"L- } PRESS ANY KEY TO CONTINUE - $"IL-L- U" v#L- D1:MULE.DAT-ө N# N"L.Writing FILE as D1:MULE}.DAT- 0"$#$#$m#$m#8X.Y.X.#Y.#L|.## 6"##LG. v#`L.} N"} #L. Enter 0 or to quit. 0"L. 1 to WRITE a MULE disk. 0"L. 2 to READ a MULE disk. 0" } #? N" ###`L&/R # $"/L_/ ."/"/ILO/ )&"/IL\/ )L2/`#/llllllllllllllllllllsk. 0" pMZ@6"rj&CCCCmCSCMCCC9C.C#CCCCCC}CCCCCZCLCFC-CCCCCCCC{CuCkCTCFC@C2C&C CCCCCCC}CCCCCCCCC~CtCjC`CVCLCBC8C.C$C#0%nH3}}" + +++j /ySB*kh[5~}\H & sa?m'%-1s1E1=11-:&B~S\\\I\'\ mnmymmmm m?}mQ <{[95r9m@'`}'n, t=1    ehh4h'zMz}}.0!.,ڣ.1>~Njع&=87u&U=uYugC&8u}ր̀ى~p +> s>  r(> r"G;r> t> u;wډ+؎JW}!_ҋ3.  +t 6|6z6x CP.|r 3/F-6 t /BLF!}H?5!tv%ʎںW!%t!˴@!ùV.PU^?t^F^F&:t3}߸]0VW. . _^˴P"Y&&UF<v<t:t}&>v >t3>tRPP& u J u3>u]}˹, +@!.v ...3&@Ň֓6~>r2v%}+r`،ЎQI2ً݇ËCwrBw< t< t< u2 tB uC2I,"t"<\u<"uI Y.xCۋ}+r.zv6 t3F..~QSY t&36S| u3?&8uVUv} ~uPYPY PY6PYZPY{PYPYPYPYSPYPY}PYPY1PYnPYPYPY$PY]PYPYPYPYKPYz}Pt ut[CY|Pt utCYt~P]^VWU}PYPY-P3P}P3P PPYYPPYY tPYPPP3P ‰F38PP}YYƹPPP3P Fƹ;FvPY-RPv YY‰FvUP}YYWPvP WY]_^VWU}gPYPY-FPv YY uv PYY3E u}!  | E ] GWYFNWYVPYYPYPY;PY-FvFPPP3P0F}:FPoPYYFPFPP3P0FF;vPPYYP3PP3P0]_^VUF}N V ^%[r3]^VUFN V ^&[r3]^VU3Pv uF tu3 ]^}U> uVF㉗ 3]UFԁ;s ]UFVȁ u ;s }]UvY]UFRP]UCFN V!rP=]VUv || P=LJT VY]^VUv>!}r LJT 3P=]^VWUFeeF N u^FF= wU.Uqv}3{;}NofF\>u0>t)&FF@P@P[RPFPP+[$ƊЋNJ}F F;}0GNJ;~P6666P$OƊЋNJF]_^U RP3PvF }P3]U^T tRD^!rA€u8B33!r1RPB33!FVZYrB!r;Vr w;Fr 3P=]U } t  vY]VWUv D;tn|t$<}V Y tTDt tY|| DP }YDDD| t3Pt P YD ]_^VWUv D;te<|-Du D փ;uD փ;u }DD 33| u=;u6DP @Y udPDt3P3PVDtPFPD}P=t(DPY=tL D% D~ uD@tdF]^VUv  | D \ GVY]^} |G PY˸ u!2VVY^U> tF 2]VWUv v vv u3}4~+~ Gv FRPv V[RPWJFF;v~۸]_^VWU~+~ Gv v V[RPFRPWJFF;v~۸]_^U}DF^N V !r ~uP=]VUv |XvW6 ރ"w ƣ]^UD^!r]U^}でT BF ^N V!rP=]VWU"~^$wXrSFN }~ t -G؃v+F +F uN}N, s:F F]_^ U~ uFF3RPvv PaP]]Uvvv v PaPB]Uvvv }v ~ u3PaP]VWU~ u3% F^w;r-׃;w D^G )<Ƌ u<$;u5DP @Y udPDt3P3PV}~ u D@uP PD'}P z=uPFPDP z=tDu LF]^VULLv FF }8FD \ G~ t~ uDtV(} Y tF VvYY]^VUv$PV]^VWU~ v FEt#N tW^FPb=ttD>u:~,}t1FF F F~tF PFPFPF PF @PFP\ `PFPFPFPFP1 `PFP-}F P?`PFPF PFPFP[1 F @PFPFHPF PF PFP\ `PF PFPF PF.}P1 `PFPF P`PF PF PF PFP[1 >fFn NvV ] VULLvƊ/}3FF*ЈVfF]^VUv^;t ^Š:rƲ]^VWU eljFF;u0}3F t vvZFF ;u3F t v v 7FFN tW~tFPFPV ^ &7F ~tF1}PFP.Ɗܹ  ^&7F럋׷]_^ U>u>tvv v vv+[vv v vv] U2}젠ȠЋF ;w*F;w#F ;FF ;wF;w F ;F3]VWU~v D;u ~v> u$;u3} > u ;u <tP3PPVQDt tYdDDD ~tG vC ~ uWSYF 4}tLF D D|~uL3]_^VUvv Y@PVYPv g]^VWU؎~ 2ыv D5}*E]_^VWU؎~ 2ы~ F ]_^VWU؎~ 2H]_^VUv u  PV  PPF3RP6}D PV ]^VUvV> u  P3PV=uҋ]^UAV!r3P=]UV 7}ת"תת"ת]VWUFFP~nnv t<%tGN<z<%t䉾n+ɉxvwdžrdžt8}Г `sE =v.Eir-24```#qwv럀w쀎v듀ww+t9}w끀vߵwv mw@vu v~ F s r>uቆtsԵ,0wr |Ժ :}rɀut | t뱀v먀v럷 ƆwƆqp~ + Ɔqp~ GGv vtGG~ ;} RP tv}WǘPqPS Dt pv |^ 7CC^ v t7CC^ :Ɔqv|+ϋt;<}v p~ F }v p~ v u =F  =F  u ;tvttv p~ t=} }WQ}SR"vPF }vtr ~Z+~xw t&=-tOxx&0nr"v<u7>}poux'džxxtXuv@x}džxxvu K;v@t0px ~-++&<-t<?} t<+u &IK 0+&GN ~ ˰ lv ~ v u =F =F P*FF&@}zn%+ u~P}(FIWI_XGN~XSQRF+FPWv^FP~~ZY[X]_^ UA}FHVJ]VWULLFN Z~v ;s H~u;;trsrsB}rsë]_^ +@+@VWUF@=s3^ T tvv v C} z^ でT F x~~ u{Oxxw u FwF~+Ё|K~+Љzz~Pv zD}|;zt|sdF+|+zS~~~+Љz v9z~Pv z|;zt|s F|+zF]_E}^U^T tP3PPvB@^N V!rP^くT XP=]VWdDtVYO u_^VWDF}tV YO u_^Turbo-C - Copyright (c) 1987 Borland Intl.Null pointer assignment Divide error AbnormalG} program termination    Mule file transfer program by Rick Cortese 3/30/93 fH}or transfering IBM<>Atari 1050: Use upper case Usage: MULE [R,W] [DRIVE:]FILENAME This program only uses drivI}e A: to avoid hard drive heartaches! if you leave out the drive, it'll look at the DEFAULT drive for the file to bJ}e transfered. I seem to have left out an &, !, or [] here and there, but the program works fine for me. If you're wK}orried, just write protect & reset your computer after use The disk used for the transfers should be formatted L} on an IBM using a double density disk only @180k. Make SURE you follow the prompts for changing disk & everything'M}s properly labeled, NO 2nd CHANCES! If you've never labled a disk before in you life, label this one. If the operatN}ion is (R)ead, the Mule disk will be read then written as FILENAME to the default or specified drive For (W)rite, aO}n IBM file is read into a buffer, then written a Mule disk. Max file size is 32k! but it will work with arced fileP}s. I've made it so the Atari end only officially handles 24k, but if you disable basic, edit the RT file, use a DOSQ} with a good LOMEM, you should be able to get the entire file transfered. RWOption %s not available!Insert MULE disR}k in driv A now! then hit to start %s Hello AtariNot a Mule disk! Reading sector number %d Insert a MS DOS}S disk in the DEFAULT drive now! Then hit wbWriting %d bytes Put the MS DOS disk with the file to be transferedT} in DEFAULT drive then hit to continue rbCouldn't open %s file size is %d bytes Insert a Mule disk in DRIVEU} A: now! then hit to continue WARNING: THIS WILL ERASE ANY FILES CURRENTLY ON A: Writing sector number %d HeV}llo AtariCOMPAQprintf : floating point formats not linked scanf : floating point formats not linked W}  $4CDBTdX}tY}  $ 4 D    Z} TMP.$$$([}null)0123456789ABCDEF      \}9ABCDEF      New at the Archive in the 8bit/New section. Program name: Mule (com & exe) Author: Rick Cortese Fee: none set by author ^} Have you ever wanted to transfer a file from your 1050 to your IBM, or how about the other way? If you've read the_} Internet news for any length of time you already know about such programs as "Sparta Read" and "Util". You've also most`} likely heard about the "Sio2PC" interface that allows you to save files to your IBM hard drive in disk image format. Sparta}a Read and Util both require you to have double density drives. Sparta Read will work on any IBM drive as the disk must fb}irst be formated double density under SpartaDos on your 1050. Util seems to only work when the disk if formated on an IBMc} 360K drive and read or written to from a double density 1050. Ah but what if you don't have a double density drive ad}nd you don't want to save in disk image format? Yes, there is always the Null modem cable but what if your IBM is not neare} your Atari? This is where Mule comes in. Mule is a set of programs, one for your Atari (Mule.com) and one for your IBM f}(Mule.exe), that allow you to transfer a file between any IBM and any standard 1050 disk drive. That's right, double densitg}y is no longer required. How it works, you format a double density disk (do not use high density) on the your IBM, bq}OB%DOS SYSB*)DUP SYSBPSMULE ACTB'MULE C B MULE COMBsMULE EXEB]MULE TXTe sure to format the disk for 180k (read your IBM Dos manual of use one of the many 3rd party formatters). Next you copy thr}e file you want to transfer to a second disk (Mule will only read and write to D1:), select read from the menu and wait uns}til told to insert the Mule disk. It works much the same on the Atari side, format the Mule disk, copy from the default drit}ve and write to the Mule disk. Once written, you take the disk to your other machine, load the correct version of Mule foru} the machine you'll be using and select read from the menu. After the file is read, you'll be prompted to insert a defaultv} disk to write to. Mule has been tested on text, binary and archive files and all files survived the transfers. Okaw}y, the drawbacks. You can only transfer one file per disk, and the file loses its name in the process. Mule always writes x}a file named Mule.dat so you'll have to remember the name of the files you transfer. The other drawback is that you're ly}imited in file size, about 24k, the author states that there is no reason that the program could not be modified to handle z} larger files (34k). File size is limited because the complete file to be transferred is stored in memory, there are no mul{}tiple read and writes. One thing to note, Mule is really just a demo to show that such a transfer can be done and a|}s such the program has not really been fully developed. Still, it does everything it sets out to do and does it well. If y}}ou've been trapped by not being able to transfer files from your IBM to your Atari because of a lack of double density drive~}s, then you'll want to give Mule a try. Included with the archive are the source codes for both the Atari Mule (wri}tten in Action!) and the IBM Mule (written in Turbo C). Action! and Turbo C are required to compile modified versions of t}he programs. Mike Todd The Atari Archive Project Louisiana Turbo C are required to compile modified versions of tD