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

Fastfile

Нет прав на скачивание
Автор: Clyde W. Bish
Год: 1987
Издатели: ZX Computing
Языки: 🇬🇧 Английский
Формат: 📼 TAP лента
Требования: 🖥️ ZX Spectrum 48K

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

Скриншоты:
Fastfile.gif


Описание:
Fastfile — это системное программное обеспечение, разработанное Клайдом В. Бишем для оптимизации использования памяти на ZX Spectrum 48K. Оно позволяет хранить информацию в строке из 40,000 символов, используя машинный код для поиска и извлечения данных со скоростью 50,000 символов в секунду. Этот инструмент особенно полезен для тех, кто нуждается в эффективном управлении данными на ограниченном оборудовании.

Программа предоставляет пять основных функций: Ввод, Поиск, Сохранение, Загрузка и Новый. 'Ввод' позволяет добавлять данные в файл, а 'Поиск' — находить конкретные записи по ключевым словам. Функция 'Сохранение' сохраняет всю программу BASIC вместе с переменными, чтобы гарантировать сохранение всех необходимых данных. 'Загрузка' используется для доступа к существующим файлам, а 'Новый' очищает текущий файл для нового ввода.

Доступна также версия для пользователей микродрайва, которая ускоряет загрузку, сохранение и проверку. Эта версия поддерживает хранение нескольких файлов на одном картридже, предлагая более удобный интерфейс с управлением в одно нажатие. Она также решает проблему известного бага ROM Interface 1, который мог привести к потере данных.

Fastfile может быть применен в различных сценариях, таких как поиск словаря в приключенческих играх или эксперименты с искусственным интеллектом в программах, подобных 'Elisa'. Это обеспечивает быструю систему извлечения для любой ситуации, требующей быстрого доступа к сохраненным данным, делая его универсальным инструментом для пользователей ZX Spectrum.

RANDOM MEMORY


ZX Computing, February 1987





Clyde Bish presents a memory saving "Fastfile" routine.








"All this memory saving for adventurers is all very well, but what


about the rest of us!" I hear ZXC enthusiasts say. Well, here's a


memory saving routine just for you ('though I suspect the adventurers


may find a use for it as well). It's called "Fastfile", and is a


system for holding information, in any form, in a DIMentioned string


of 40,000 characters with a machine code routine, searching at about


50,000 characters per second to extract from it the information


required and print to screen. Without further ado, let's get to work.





Type in the machine code loader, Program 1, RUN it, and enter the


numbers from Table A, [file: FastCODE] reading across the lines as you


enter each number. It will be displayed so you can keep check. Note


any mistakes, and correct them at the end with: POKE address, correct


number





Now NEW the machine - your code is safe above RAMTOP - and type in


Program 2. This is the driver program and must be entered exactly as


printed for reasons that will be obvious later. Note that the "STOP"


in lines 10, 1010 and 2000 is the token, and is entered in symbol


shift mode.





Remember, "Fools rush in where angels fear to tread", so polish up


your halo, and SAVE the program and CODE, just in case of mistakes


with: CLEAR: SAVE "Fastfile" LINE 9000: SAVE "FastCODE" CODE 65263,111


and VERIFY both parts.





Now you're ready to try it out. Type RUN (ENTER) and the menu will


appear. The options are chosen by pressing the appropriate number (if


you get an error message, and you may, as there is a minimum of error


trapping to make as much memory as possible available for the file,


restart with GOTO 100, never RUN). This is what you can do:








1. Entry





This adds an entry to the file, provided there is enough space (You're


told how much space is free each time). The maximum INPUT length is


about half a screen (Remember to restart with GOTO 100 if you get an


Out of Memory message). If you want to save space, but avoid filling


out the ends of lines with spaces to prevent word splitting, use the


PRINT comma trick. For those who missed the earlier articles, this is


what you do. After typing the last character you want on the line get


into E Mode, hold on to the Caps Shift key and press 6, followed by 0.


The cursor will jump to the next line (three of these in succession


would leave a blank line within an entry at a cost of only three bytes!).





Make a file to experiment on using the fore and surnames of your


family. After the last entry pressing just ENTER will return you to


the menu.








2. Search





Select Option 2, and answer the "Key?" prompt by entering the word or


phrase for which you wish to search. The machine code, which


incidentally originated from the good old days of the ZX81, zips


through your file, PRINTing out all entries which include that key.


After each, the prompt "Erase?" will appear. Pressing "y" will erase


that entry, "n" will continue the search. On completion the word END


will be displayed. Pressing just ENTER will return you to the menu.





Try the following with your "names" file:-


a) Enter a forename - only that name will be displayed.


b) Try the surname - all entries with that surname will appear.


c) Try "Bloggs" (assuming that's not your name!) - just the END


message will appear.


d) Try a single letter that you know is in the file - any entries


which included that letter will appear as many times as they contain


the letter. For example, John Jones would appear twice if the key were


J, o or n, but only once if s were entered. The moral of this exercise


is that the more specific the key used, the more selective the routine


becomes. So if you were using the program as an index to magazine


articles it would be better to reference Spectrum programs as sp1,


rather than just sp, as in the latter case any entries where an s is


followed by a p would be displayed.








3. Save





The whole BASIC program and the variables is SAVEd. Why not just the


data array? Because you also need the values held in other variables,


for example the file pointer, n. After VERIFYing you will be returned


to the menu.








4. Load





Use this option to LOAD in an existing file for searching or updating.


Existing files should only be LOADed in this way for interrogation.


Don't be tempted to just LOAD in a SAVEd file directly as it will


probably crash!








5. New





This clears the file by RUNning the program and resetting the arrays.





It would be nice to explain how the machine code operates, but as


usual space precludes that opportunity. Suffice it to say that the


routine compares what is held in a$() in the VARS area with what is in


b$(). It is therefore important that you make no alteration to line 10


until after DIM b$(40002) or these arrays will not be in the correct


places in VARS for the routine to find them. If you alter the length


of the program you will also need to reset v to a new value by PEEKing


the VARS system variable using PRINT PEEK 23627 + 256*PEEK 23628.








Fastfile (Microdrive)





And now, for microdrive owners, a version of "Fastfile" especially for you.





The program is essentially the same as the cassette version except


that the Interface 1 ROM takes over much of the donkey work and, of


course, speeds up the LOAD, SAVE and VERIFY routines. [file: Fastmdrv]





The file array b$() is set to a length of 29000 characters. [It was


only set to 12 characters in the listing. JimG] This length enables


you to hold three files named a, b and c on a clear cartridge, plus


the boot program (which sets everything running) and the machine code,


giving a total storage of 87000 characters. It also allows for a more


user-friendly program with single key-press controls, not to mention


avoiding an encounter with the Infamous Interface 1 ROM bug which


switches on your microdrive permanently! (If this does ever happen do


not power-down. You may lose data. Surprisingly, it is better to pull


out the cartridge first whilst the motor is running!).





Type in the machine code as previously described, then NEW and enter


Program 3. Now to prepare the cartridge. Format the cartridge as


described in the manual, then RUN the program. It will stop with an


error message. Fear not, saith he. All is well. Enter, as a command:


LET n$="a": GOTO 100





The menu will appear. Choose 4, then press "a" in response to the


"Filename?" prompt. The microdrive will run much longer than usual as


it is trying to erase an, at the moment, non-existent file. When the


menu reappears choose 4 again, and this time press "b". The third time


the menu appears press 4 then "c".





Now BREAK out of the program, NEW the machine, and type in the boot,


Program 4. Save the machine code still on board and the boot program


with:


SAVE *"m";1;"run" LINE 10: SAVE *"m";1;"FastCODE" CODE 65263,111


(where "run" is the three letters, not the Keyword). VERIFY both parts


and there you are.





To use the system, RANDOMIZE USR 0 to reset the machine, then press


RUN (Enter). The boot will load, then LOAD in the code and file "a"


(which is DIMentioned but empty).





The menu is essentially the same as before.





The ENTRY option will automatically SAVE a file when it is full, and


invite you to LOAD in a new file to continue.





SEARCH gives a printer option (by altering the stream) as well as to


the screen. The search can be stopped at any time by pressing a


letter. A return is made to the menu by a second press. When the end


of a file is reached there is the option to continue the search with


another file (after SAVEing the existing one if updated).


Alternatively a return can be made to the menu.





Obviously with SAVE the existing a, b or c file is erased before the


update is SAVEd and VERIFYed.





As with save, the filename for LOAD is a single letter.





The DELETE option is now separate, but operates as before. The key is


searched for with "y" to erase, "n" to leave - you may have more than


one entry with that key - and Enter for the menu.





This routine will, of course, search through any information in b$()


to locate a key and so could be used in any situation where fast


retrieval is required. One such use would be vocabulary searching in


an adventure. (You see, I didn't leave you out!). Alternatively it


could be used to search for words understood In an "Elisa"-type


program to experiment with A.I.. I'll show you how it could be done


and then you can improve on it.





Have a look at Program 5 [file: Fastdemo] as you read what follows:-





Line 800: Reset variables and the


arrays you've seen before.





830: R1 we need later. The program will stop If you've said "bye".





840: The user response goes into i$. A suitably cutting response is


printed if this is a null string.





850: The input is printed to screen with a leading capital.





860-861: Spaces in the input string are replaced by STOP tokens, plus


one at the end. The counter n is set to string length + 1.





862: Now to business! The data is RESTOREd. Look at Line 900 for a


moment. You'll notice a sequence of word, phrase, phrase triplets. In


essence the routine takes each response word in turn and searches for


a match in k$. If one is found (i.e. p>0 AND p<n)then one of the


phrases READ along with k$ and held in x$ and y$ is printed. Which, is


determined by R1.





882: If the search falls through the loop, no match has been found as


one of a sequence of general answers is given.





885: If too many general answers


are given then a request is


made to change the subject.





900: This is the first example of many DATA lines. You can produce the


rest yourself but remember three things:-


a) The items must be in threes - keyword, phrase 1, phrase 2.


b) The order of keywords in the data list is most important. Common


words must be at the end with less likely ones at the beginning or the


latter will never be found.


c) My original program had a vocabulary of 100 keywords. If you want


more or less you must change the number ending the FOR statement in


line 862:2





To end, here's an idea for an April Fool program to catch out an


ardent Arcader (I know it's early, but it'll take you that long to


sort out the DATA!). Have a simple arcade game on board as well, with


a timer line to switch control to your "chat" program after a given


period (Use the FRAMES system variable). You could then have the


machine do a fake "reset crash" (Use PAPER 0, then PAPER 7 with your


own PRINTed copyright notice) followed by a reincarnation and


on-screen communication from the "Spirit of the Machine" offering to


have a chat.





See who you can catch! Good fooling!
Автор
Verter_bot
Загрузки
0
Просмотры
2
Расширение
zip
Размер
2.4 КБ
Хэш
d03a72596e8c13fb47fd15a2474c9a2e
Первый выпуск
Последнее обновление

Оценки

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