Значок ресурса

Microdrive Rename

Нет прав на скачивание
Автор: Andrew Pennell
Год: 1984
Издатели: Your Spectrum
Языки: 🇬🇧 Английский
Формат: 📼 TAP лента
Требования: 🖥️ ZX Spectrum 48K

Ссылки:
Страница на ZXArt
Страница на World Of Spectrum
Страница на Spectrum Computing

ALL CHANGE!


(from Your Spectrum 6, Aug.1984)





Ever wanted to rename a Microdrive file? Providing the code to create


the necessary new command, Andrew Pennell brings Microdrives one step


nearer the expensive disk systems they emulate.








Although Sinclair Research's Interface 1 unit allows good use of the


Microdrives from Basic, there is one command noticeable only by its


absence - that of RENAME. It's provided by most disk operating systems


and associated Basics, but not for the dear old Speccy. Here, therefore,


is the machine code you've been waiting for - although, I'm afraid that


it's for 48K owners only.





Listing 1 shows the Basic loader to create the machine code; enter it


with great care - the checksum should spot most typing errors, but some


may slip through. After entering and executing, SAVE the program in case


it's wrong. To test it, enter RANDOMIZE USR 28000, which enables it.


Then, with an unimportant cartridge, try to rename a file; the syntax to


use is





*R1;"oldname" TO "newname"





where 'TO' is the keyword (and 'r' is also accepted). Naturally, '1' in


the example can be replaced with any drive number, up to '8' (should you


be lucky enough to have that many!). Having entered the command, the


file 'oldname' will be renamed to' newname', although there are a couple


of limitations. Firstly, data files (that is, those created with


OPEN/PRINT/CLOSE) will not be renamed, and will produce the error 'Wrong


file type'. A second limitation is that the file 'oldname' must be under


about 37K in length - otherwise it'll be flagged 'Out of memory'.





The program has been written so that if any error occurs during the


process (except perhaps a power cut!) then the file will remain intact,


under one of the names. If you try to rename a non- existent file,


you'll come across the 'File not found' message, and an attempt to


define a new name that's already present on the cartridge will force


'Writing to a read file'.





The source code is shown in Listing 2, and uses the facility of the


Interface 1 to add commands to the Basic interpreter. The remainder of


this explanation assumes a basic knowledge of machine code with the


Microdrives, and of how to add commands; for this I suggest you read


chapters eight and nine respectively of Master your ZX Microdrive - and


Toni Baker's Extending Basic article (see issue 3). [yr03_43.htm]





The code is placed at 28000 decimal, to give some room for small Basic


programs, and over 37K to store the file. The routine SETUP is the one


entered directly from Basic, and the first creates the Interface system


variables, using hook code #31, then alters VECTOR to point to the new


command routine. It then calls WATROM using hook code #32, before


RETurning to Basic. The routine WATROM actually modifies the program to


suit the ROM in the Interface 1. As you may be aware, Interface 1 will


shortly be sporting a new ROM which has most of its routines in


different places. To cater for this, the tables OLDROM and NEWROM allow


the program to modify itself to suit either, using location #16DA to


test the ROM's type. It had to be called indirectly via hook code #32


because the Shadow ROM must be in place for it to work.





Location SYNERR is just a jump to #28 in the Shadow ROM which produces a


syntax error when in the line editor. NEWSYN is the new command handler,


which first ensures that the command starts with *R or *r. That done,


the drive number is scanned, a semi-colon checked for, then the old


filename scanned. Next, the character following it (that is, the TO


token) is checked, then the routine SWOP called. This is explained


later, and only has significance during 'run-time'.





The new name is scanned, and a check made to ensure that there's no more


to the statement. Control only passes to line 2200 during 'run-time',


which again calls SWOP. This routine swaps the parameters (start address


and length) for the old and new names, which are stored in N_STR1,


T_STR1 and N_STR3, T_STR3. The Shadow ROM routines act on the parameters


in the former two.





The next action taken is for OPEN_M to be called, while preserving


T_STR1. As the Shadow ROM is in place, hook codes cannot be used, so


routines vary according to ROM type. OPEN_M takes identical action to


hook code #22 - that is, create an 'M' channel addressed by IX. The old


file is then checked to see if it exists, whether it's a PRINT file, and


whether the cartridge is write-protected or not. If it passes all the


criterion the nine-byte file header is copied to FREE, and the length of


the file is tested to see if there's room for it and if not an error is


produced. The shadow routine LDBYTS is called which loads the rest of


the file into locations FREE+9 onwards, and then the channel is closed.





Next, the header is copied back from FREE to HD-00 to HD-11, and the


bytes SAVEd on to the required cartridge. Routine SVBYTS does a lot of


the fiddly bits for you, like opening an 'M' channel, setting the PRINT


file flag and testing to see if it's already there. Finally, the old


file is erased - by calling ERASEM - and an exit made via #05C1 (which


is the same in both ROMs, thankfully).











Listing 1 (above): The Basic loader to create the RENAME machine code.





Listing 2 (below): The disassembled listing, roughly split into five


columns: address, Hex code, line numbers (unique to the disassembler


used), labels and mnemonics.
Автор
Verter_bot
Загрузки
0
Просмотры
11
Расширение
zip
Размер
4.7 КБ
Хэш
2d11ad210cf7b88ccd70a39ae5aa9613
Первый выпуск
Последнее обновление

Оценки

0.00 звезд(ы) 0 оценок
Назад
Вверх