Path: csiph.com!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Benoit0123 Newsgroups: comp.sys.apple2.programmer Subject: ProBLOAD (a DOS 3.3 tiny extension) Date: Sun, 30 Jul 2017 20:26:13 -0000 (UTC) Organization: Mac GUI Lines: 71 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Date: Sun, 30 Jul 2017 20:26:13 -0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="96212b3ed382929b711a8b022429ec78"; logging-data="27326"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/XvsOcZcDyuOYmp40Hu8Gf" User-Agent: Mac GUI Usenet Cancel-Lock: sha1:il5ar6zLUIYVF16ZB5xdAbbJc64= Xref: csiph.com comp.sys.apple2.programmer:3738 Hello, ProBLOAD (internal codename BRR (*)) is an attempt to patch DOS 3.3 for providing L and B options to the BLOAD and BRUN commands, thus mimicking those commands behavior under ProDOS BI. ProBLOAD can be downloaded from the URL below: http://bgilon.free.fr/apple2/ProBLOAD.zip Two versions are available: a) BRRmini: with the minimum version of the patch (do not try to INIT a disk while this patch is active); b) BRR: the full pledge with safeguard procedures (see the Merlin source file header for details). The zip file quoted above contains a disk image with both the relevant source and object files (Merlin 8 v2.48) along with a PDF assembly listing file for the full version. Including in the .do disk image is an EXEC test file to show you what the patch does: to use it, just issue a BRUN BRR (or BRUN BRRMINI) followed by a EXEC TESTBRR command at Applesoft prompt. The patch is being installed by binary running (i.e. « BRUN ») either the BRR or the BRRmini binary files. Obviously BRRMINI is much smaller in size than BRR in case you had to keyboard enter it from a monitor listing. Have fun, Benoît (*): BRR is a TLA for « Before Release Revision » For those interested, below is the pseudo code of the patched BLOAD core mechanism (but you can study the provided source file if you prefer): Collect the original file loading address and file length from the 4 first bytes of the binary file. Let AVOrg:= Address from file Let LVOrg:= Length from file If keyword B present Then O:= UserParm(B); S:= 4; # Position then read a range of bytes subcode If O > LVOrg Then Issue a RANGE ERROR Else S:= 2; # Read a range of bytes subcode O:= 0; EndIf If A keyword is provided then P:= UserParm(A); Else P:= AVOrg + O; EndIf If L keyword is provided on command line Then L:= UserParm(L); If L + O > LVOrg Then Issue a RANGE ERROR Else L:= LVOrg - O; End If; If P + L > 65535 Then Issue a RANGE ERROR Calls the FM for loading the segment of binary file - using the subcode S (either 2 or 4), the latter involving a POSITION - from offset(O) # only meaningful where involving a POSITION - of length (L) - into memory starting @ address P -- Growing old is mandatory.. growing up is optional.. But the other way round is as true.