|Master 128 Y2K Fix and ADFS Wipe Back to y2k fix page|
|ADFS Utility ROM|
|Mark Bush's Debugged/Amended Y2K Fix|
|MMC Utility and GoMMDFS ROM
Images 05/02/2005 info updated 20/02/2005
Info, the individual files and an ssd disc image of the ROMs
|The Master Panel in ROM|
|The latest Y2K Fix version, combined with new, full on screen Function Key list, ADFS *DRIVE, Panelrom (and how it works) and *wipe. Full description in Word format Click here for listing|
Please note that Raf wishes to retain copyright of these ROMs. Raf asks that anyone making changes to the listings should contact him
Download the disc image containing the ROMs
Here is the listing for the
program Y2KWIPESC on the disc image. It is a plain text file.
Here is the listing for the program PATCHKEYSC on the disc image. It is a plain text file.
I have tried to organise the Master-only version of this ROM image to be as speedy as possible while retaining the basic structure that Mark Bush has used. I have used &A8 and &A9 for addressing purposes in zero page. These locations are in MOS scratch space and are safe to use without needing to preserve the contents of the locations. The basic programming is fairly straight-forward. One fundamental difference is the use of dynamic filing system workspace RAM so as to preserve PAGE. I have tried to streamline and speed up the program by not having to repeatedly save zero page locations (except once when vital); by using MOS scratch space, which is quite 'legal'; by carefully manipulating the stack; and by exiting differently in 'ret'. The programming is otherwise as before. Note, however how I exit from 'ret':-
(note 'popping' X ). I have checked it all out by verifying the contents of &FFFF00EF which holds the value of the A register for the last OSBYTE or OSWORD call that has been made. It seems to matter not, at the end of 'ret', what the value of A is. After running Y2KWIPESC and installing the ROM image Y2KWIPE, the MOS knows absolutely that it is OSWORD &0E that is called after we type in *TIME$, *TIME or PRINT TIME$, as it always returns &0E in &FFFF00EF. So the 'ret' could end as follows:-
In fact, this is the ending that I use on my Master 128s; but I have MOSPLUS installed and it removes some MOS bugs that exist. I doubt it, but it might make a difference in machines without MOSPLUS or those with Operating System version 3.50 (I have 3.20).
The WIPE section starts off with preserving all registers and recognising its command name. Next, I preserve and clear the zero page locations to be used for addressing, storage and for use as flags. Then the addresses of files and directories in the current directory are read in from the data list. I am reliably informed that in both MOS 3.20 and 3.50 ADFS uses exactly the same addresses to hold the file and directory names of the current directory. I have tried to use more elegant techniques but directly accessing the locations where ADFS holds the name of each file and directory is the only way that I have found that works across the Tube.
The 'delete" area starts at &DD20 where "DELETE " is stored followed by the file name, some "padding" and then &0D. A simple call to oscli does the job of deletion.
There are some strange things stored in the locations where file names and directory names are placed by ADFS. In short, it depends on the length of a name as to what the last character is. It might be &00, &0D or &8D. As you will see from the listing this is sorted out by subtraction, and then the name (of file or directory) is padded out to 10 characters with &20 and then &0D is added onto the end in the 'file name-process' and 'delete' areas which are from &DD40 and from &DD20 respectively. Y holds the length of the name, a formality, really, but it needs to be stored in the parameter block at pblock+11 and at pblock+14 (MOD and DIV 256).
Next is 'JSR 'erase' with some preserving and flag clearing. The programming is largely self-explanatory. In 'erase' a 'JSR file_type' occurs where the file number is returned in 'file_num' and again one needs to be careful in printing out file/directory names as ADFS sometimes uses ASCII values above &80. Hence the care taken to sort this out in the lines that follow the label 'Pstay4', before the 'question' is asked, so to speak, about whether or not to 'delete', 'stay', 'show_dir', etc. When a deletion occurs the 'deleted' flag is set.
The sub-routine 'file_type' is used to get the file number which is returned in A when using OSFILE with A=&05. Deletion is permitted only if a 1 is returned in A. This indicates a normal file found. If A returns with 2 it indicates that a directory has been found and if &FF is returned it indicates that a protected file (E attribute set) is being processed. So they must be skipped over. Also, if a file has the L attribute set, bit 3 and/or bit 0 of pblock+14 is/are set on exit and that file name must also be skipped over. Testing is done by ANDing with 8 and 9 and a skip is made via 'stay7'. The use of locations &DD00 onwards is permitted, by the way - see the User Guide. Then, it is all easy sailing. I report back with information about the skip and why it occurred via the various routines e.g. stay3, stay4, stay5 and stay7. After a skip or a deletion I move on to the next file or directory address and repeat the whole process until zeros are found at the end of the list of files and directories in memory, which ADFS kindly provides. However, this may not be the case if a directory is full. Hence the need for EQUW &0000 at the end of the 'data' list.
Exiting is a bit tedious but is simple enough through 'restore'. I have found that unless the zero page locations are preserved and then cleared with zeros, annoying problems will occur, such as the repetition of file and directory names. Of course, the zero page locations need to be restored on exiting by pulling them back off of the stack.
The command *wipe takes upper or lower case characters and a limited abbreviation. Please do not forget to 'set' the current directory otherwise *wipe will simply return the usual Master prompt!
UTILSROM 04 takes upper and lower case characters and allows abbreviations for its commands. The 'CLOCK' utility clashes with 'SPELLMASTER'. In order to improve compatibility, I will be experimenting with other memory locations for workspace with each up-date (most of these will be unnoticeable). I will be using Econet workspace (Pages 11 and 12, &0B00 to &0CFF) to begin with. I doubt that there are many people officially using these locations nowadays.
Please note that I reserve the copyright for all software that I develop. Private personal use and copying is permitted free of charge. Please contact me about public use or if you have any problems with the software.
Dr. Raf. Giaccio
PO BOX 322
SOUTH AUSTRALIA 5112
18/10/2003 To date, one problem has occurred with both 'Y2K Repair and ADFS WIPE 03' and 'Y2K REPAIR 02'. When using the *BUILD command errors will occur often in that the file willl not contain exactly what you type in, especially when used from Sideways RAM. The inconsistenties occur too frequently when using this comand with these ROMs/Images. It is recommended that you use other means eg *EDIT to *BUILD !BOOT and similar files. Please note that the same applies to the original programme provided by Mark Bush, when debugged. The use of main RAM in the original programme produces the same results and raises PAGE by one page of memory. The ADT ROM *ABUILD does work however. Raf Giaccio
UTILSROM 04 4.10 has several commands. It is a ROM image that has been patched and up-graded over the years. Consequently, it has no source code; and in any case the source code would be too long to type-in. Currently, I have the following commands available but as I have been able to combine ADFS WIPE (automatic skipping of directories, locked and protected files) with the Master-only Y2k Repair, I will probably be adding in e.g. *Panel (hopefully) from the Welcome disc, etc. I may also remove *WIPE from UTILSROM 04, if the Y2K Repair and ADFS WIPE ROM becomes popular. Due credit is hereby given to all of those people and sources that I have drawn upon over the years to present a few of these utilities to you.
So the commands are as follows, not alphabetically, but more in a developmental or up-graded order:-
*CLOCK < (ON Y) |OFF >
|Complex as *fx22, 23 are tricky especially if ADT or MOSPLUS are fitted to the Master. The 'Y' parameter is used only to turn on the am/pm format display of the time at the top right Hand side of the screen. Can clash with SPELLMASTER. *kill/ *unplug this if fitted and you want to use the clock often. See also 'Notes on Y2K Repair and ADFS WIPE ROM image listing and UTILSROM 04'.|
|*CMOS||This shows the contents and ASCII characters of the usual 50 CMOS locations available to be visualized so that one can see whatever flag values or other information you have set. I developed this because I think these locations are useful as flags, etc.|
|Removes those unnecessary spaces in Basic programs. Co-processors must be turned off with this command. This is a well known utility that is always handy to have available.|
|*SQUAT||These three are text formats from the Welcome disc. I find *squat very useful for all my programming as it produces fine quality text on the screen.|
|*KEYS||I developed this so as to always have my usual function key definitions available. I think that its definitions should fire-up on power-up if a ROM form of this ROM image will be 'blown' or developed. Its definitions as well as a *fx254 are issued on every soft or hard reset. I am working on making more character space available for the nine programmable function keys currently available but I may leave this for now. I also have a program to alter the 9 function keys as needed. This is called 'PATCHKEYSC' and is on the accompanying disc, together with UTILSROM 04. A listing is available.|
|*NVED||This shows ALL of the CMOS locations - read/write is allowed! Please take care with this. You may 'write' to sensitive areas|
*KILL <Rom id>
|*PLUG <Rom id>||I developed these two to instantly '*unplug' or '*insert' for any of the 15 ROMs/slots. The action taken is maintained on power-down and power-up|
|This is used to display/remove a start-up message on resets.|
|This is an ADFS *wipe that skips over directories, locked and protected files. I developed this Master-only version over the years.|
|This is a simple but effective routine that keeps compacting until there is only one area of free space on the disc. It works surprisingly quickly.|
|I developed this routine to convert numbers to different bases. So I have binary, octal, hexadecimal and decimal all available.|
|This copies any of the 15 ROMs/slots to disc. However, co- processors must be turned off.|
UTILSROM 04 accepts upper or lower case commands and abbreviations.
Please note that I reserve the copyright for all software that I develop. Private personal use and copying is permitted and is free. Please contact me about public use or if you experience any problems.
Dr. Raf. Giaccio
PO BOX 322
SOUTH AUSTRALIA 5112
Mark Bush has written a ROM fix for the Master 128 year 2000 bug fix. Unfortunately this would not work on my Master 128. Raf Giaccio has debugged and amended this program to preserve PAGE by using filing system workspace RAM. This was the starting point for the above ROM and listing, so you don't really need this if you are using a Master:
Listing of bug fix Written by Mark Bush. Adapted,
improved and fixed by Raf Giaccio
Disc image of debugged Listing and assembled ROM
Raf has placed the Panel from the Welcome disc into ROM. Load this into sideways RAM or burn it to EPROM and call it with *RES or *RESET. For info on how to use Panel, please refer to the Master Welcome Guide.This ROM image works exactly as per the 'WELCOME GUIDE' for the Master 128, Page 23 onwards. It is in fact, Panel in ROM form and the century updated.
Please try this in ROM CHIP form to configure your Master from
a COLD RESET. I think that you will be pleasantly surprised at its ease of use;
but please remove ALL other ROMs.
Download disc image of ROM
Finally, when doing a COLD RESET do not insert this or any other ROM until you have configured your Master to your satisfaction