Polski | English | Русский |
---|
Home | Вкратце | RSXы | Файли | Функции | Версии | Релизы | Users | Download |
---|
CP/M | MEMDISK | IDEDOS |
RST #08 DEFB функцияВ нижеследующих таблицах колонки, обозначенные вход описывают регистры, содержащие аргументы функции. Колонки, обозначенные выход - регистры, в которых функция возвращает результат, причём остальные регистры не меняются. Содержимое AF на входе игнрируется, состояние F на выходе не определено. В некоторых случаях функция может установить 7-й бит регистра R, это будет означать, что одно или более экранное прерывание было пропущено.
#00 | #01 | #02 | #03 | #04 | #05 | #06 | #07 | #08 | #09 | #0A | #0B | #0C | #0D | #0E | #0F | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ошибки | #00 | ошибки интерпретатора Бейсика | |||||||||||||||
ошибки, I1 | #10 | ошибки интерпретатора Бейсика | коды команд Interface 1 | ||||||||||||||
I1 | #20 | коды команд Interface 1 | |||||||||||||||
I1, DISCiPLE | #30 | коды к. I1 | коды команд DISCiPLE | ||||||||||||||
DISCiPLE | #40 | коды команд DISCiPLE | |||||||||||||||
#50 | |||||||||||||||||
#60 | |||||||||||||||||
внутр. | #70 | для внутр. использ. в RSX'ах | #7F | ||||||||||||||
вход, скорость | #80 | джойстики | мышь | скорость | клавиатура | ||||||||||||
экран | #90 | управление экраном - пока не используется | |||||||||||||||
настройка | #A0 | информация | настройка | звук | экран | RSX'ы | |||||||||||
память | #B0 | банки памяти | |||||||||||||||
диски | #C0 | текущий путь | директории | информ. о диске | работа с файлами | ||||||||||||
файли | #D0 | прямой доступ к файлам | |||||||||||||||
data | #E0 | операции с файлами, имеющими заголовки | картинки | отгрузки | raw data | выбор ф. | |||||||||||
принтер, оверлеи | #F0 | принтер | оверлеи | системные | OK | ||||||||||||
#00 | #01 | #02 | #03 | #04 | #05 | #06 | #07 | #08 | #09 | #0A | #0B | #0C | #0D | #0E | #0F |
Примечания:
Возможно использование 4 независимых джойстиков. Обычно используются первые два. Смысл битов 0..4 совместим со значением из порта Кемпстон-джойстика (#1F, b0=right,b1=left, b2=down,b3=up, b4=fire). Бит 5 - второй fire (обычно не используется). Биты 6 и 7,общие для всех джойстиков, символизируют ещё две кнопки. Бит 6 (HALT) может вызвать паузу в игре (когда установлен) или активировать опции. Bit 7 (EXIT) может прервать игру или вызвать переход в главное меню.
N° | название | описание | вход | выход |
---|---|---|---|---|
#80 | J0 | read joysick 0 | нет | A=состояние |
#81 | J1 | read joysick 1 | ||
#82 | J2 | read joysick 2 | ||
#83 | J3 | read joysick 3 |
NOP NOP NOP JP ownint"ownint" - адрес процедуры обслуживания прерываний. Если вам не нужен свой обработчик, можете поместить EI: RETI вместо этого перехода.
Координаты будут меняться по заданным адресам. Все они 8-битные. Вы можете только считывать их и сравнивать с эталонами для опреденения изменений. Для проверки кнопок просто вызывайте процедуру из начала буфера. Она вернёт состояние кнопок в A, сохранив значения остальных регистров (b0=левая кнопка, b1=правая; установленный бит указывает на нажатие).
Обратите внимание, что некоторые типы мышей (RS232, AMX) могут генерировать собственные прерывания, бесполезные для нашей программы. Все некадровые прерывания "съедаются" (адрес возврата снимается со стека). И если адрес возврата ссылается на байт после команды HALT, он будет декрементирован для продолжения HALT до кадрового прерывания.
Мышь может быть деактивирована указанием 0 в качестве адреса буфера
(в HL). Данные, возвращаемые в этом случае, полезны для RSX - они помогают
отключить драйвер, используемый главной программой, подключить свой драйвер
для обработки запроса, после чего отключить свой драйвер и возвратить драйвер
главной программы.
N° | название | описание | вход | выход |
---|---|---|---|---|
#84 | MSEINI | установить мышь | I=page
BC=^xcoord DE=^ycoord HL=^buf | A=result |
опросить мышь | HL=??? | A=result
BC=^xcoord DE=^ycoord HL=^buf | ||
отключить мышь | HL=0 | A=result
BC=^xcoord DE=^ycoord HL=^buf | ||
#85 | MSEGET | (для внутр. использования) | нет | A=keys
B=dy C=dx |
Функция #88 возвращает процессор в стандартый режим 3.5MHz.
N° | название | описание | вход | выход |
---|---|---|---|---|
#87 | FAST | (Scorpion) - ускоряет работу процессора | нет | A=result |
#88 | SLOW | (Scorpion) - возвращает 3.5MHz |
Будет использована в Бейсике, если появятся патчи или способы перехвата INT.
Вызов функции #8F??? должен быть помещён в обработчик IM 2, как минимум с сохранением AF. Или может вызываться с запрещёнными прерываниями примерно 50 раз в секунду.
Пока не применяйте!!! Не доделано!!!
N° | название | описание | вход | выход |
---|---|---|---|---|
#8C? | KBDGET | get char from buffer | ()(A) | |
#8D? | KBDTST | read char from buffer and leave it | ()(A) | |
#8E? | KBDMOD | выбор режима | (BC)(A=result) | |
#8F? | KBDINT | sync. interrupt | ()(A) |
В текущей версии ZXVGS не реализовано!
N° | название | описание | вход | выход |
---|---|---|---|---|
#9F? | CHOICE | ask user what to do | HL=^title
BC=^options | A=result |
N° | название | описание | вход | выход |
---|---|---|---|---|
#A0? | неизвестно | неизвестно | ? | ? |
#A1? |
опция | в D | в E | смысл |
---|---|---|---|
Тип джойстика. | #80
#81 #82 #83 | 0 | не менять |
1 | Sinclair 1 | ||
2 | Sinclair 2 | ||
3 | Kempston | ||
4 | Fuller | ||
5 | стрелки SAM Coupe <CNTRL> | ||
6 | функциональные кнопки SAM Coupe | ||
7 | (не определено) | ||
8 | TC2068 left (AY #F5, #F6) | ||
9 | TC2068 right (AY #F5, #F6) | ||
Тип мыши.
Изменение невозможно когда драйвер активен. | #84 | 0 | Kempston Mouse |
1 | server mouse | ||
2 | SAM Mouse | ||
3 | J3 mouse | ||
4 | AMX Mouse | ||
5 | AY mouse (Украинская) | ||
6 | (не определено) | ||
7 | (не определено) | ||
8 | M$ Mouse in YAMOD.8250/0 | ||
9 | M$ Mouse in YAMOD.8250/1 | ||
10 | M$ Mouse in YAMOD.8250/2 | ||
11 | M$ Mouse in YAMOD.8250/3 | ||
Release number. | #A2 | AE - four BCD digits (read only) | |
Наличие звуковых
устройств. | #A4 | маска | 1=отсутствие |
Тип принтера. | #F7 | не определено |
N° | название | описание | вход | выход |
---|---|---|---|---|
#A2 | GETCFG | взять установку функции | D=функция | A=ошибка
E=режим |
get ZXVGS release number | D=#A2 | AE=release | ||
#A3 | SETCFG | установить параметр функции | D=функция
E=режим0 | A=ошибка
E=режим1 |
Если эта функция вызвана без предварительного вызова функции #A5 (после #AF), она определяет все доступные звуковые устройства (совместимость сверху вниз, будет убрано).
Функция #A5 используется для автоопределения звукового устройства. Номер
устройства должен быть в D, а некоторые параметры - в E. (Звёздочка "*"
означает, что устройство имеет фиксированные адреса портов. )
в D | устройство | в E |
---|---|---|
#01* | AY-3-891X (ZX128) | каналы (в форме регистра 7) |
#02* | AY-3-8912 (TC2068) | каналы (в форме регистра 7) |
#03* | оба (1 и 2) | каналы (в форме регистра 7) |
#04* | SAA1099 (SAM) | каналы (в форме регистров 14&15; b6, b7 - выбор) |
#08 | 8255 ЦАП (MB-02) | каналы b0..b3 |
N° | название | описание | вход | выход |
---|---|---|---|---|
#A4 | SOUND | сведения | нет | A=flags |
#A5 | OPENSOUND | нагрузка устройства | D=номер
E=каналы | A=различие
E=каналы |
Функция #A6 возвращает тип ULA в D (свойства экрана), current screen
mode in E and current frame length in BC.
Функция #A7 opens video mode. When the frame length is not important, set BC=#0000 and D=#FF. When BC>#0000 or D is different from #FF, ZXVGS will try to change ULA properties (what is possible on emulators and dedicated hardware). Value in D has higher priority than BC (however this is another way to swith the ZS Scorpion into fast mode).
Функции #E8, #E9, #F3 use the screenmode value to load, save or print the screen.
BC - параметры времени кадровой синхронизации в тактах Z80, measured
in IM2, both code and IM 2 table are in быстрое ОЗУ (not slowed by ULA).
To get number of tacts per frame, multiply the BC value by 18 and add 66
(ZX48) or 60 (ZX128) tacts. (However for the Sam Coupe BC must be multiplied
by 20, not 18.) Please note that while both ZX48 and TC2048 have the same
frame length, the starts of screen drawig are in different tacts.
страна | N°
in D | время в BC | компьютер | графика |
---|---|---|---|---|
Англия | #00 | 3879 | Sinclair ZX Spectrum (+) | ULA 6C001E-7 |
#01 | 3936 | Sinclair ZX+ 128 | AMSTRAD 40056 | |
#02 | 3936 | Amstrad ZX +2 | ULA 7K010E5 | |
#03 | 3936 | Amstrad ZX +2A/+2B/+3 | GATE ARRAY 40077 | |
#0C | 5987 | MGT SAM Coupe | ASIC | |
Португалия
(+ USA) | #20 | 3257 | Timex Sinclair 2068 | TS 2068 - 60Hz |
#21 | 3879 | Timex Computer 2068 | TS 2068 - 50Hz, grey | |
#22 | 3879 | Timex Computer 2048 | TS 2068 - 50Hz, black | |
Польша | #80 | (unknown) | ELWRO 800 Junior | ? |
#?? | (unknown) | Solum | ? | |
Россия | #C0 | 3979 | Пентагон | ? |
#C1 | slow: 3879
fast: 7762 | ZS Скорпён | ? | |
др. | #F0 | 3879 | Warajevo emulator | |
#FF | ? | неизвестно |
LINT: +#80
Интерфейс LINT генерирует прерывание перед тем, как отобразится строка,
указанная в порту #F9. Прерывание может быть распознано чтением порта #F9.
Присутствие должно определяться функцией #A???. (На данный момент такая
возможность поддерживается только на SAM Coupe.)
основные режимы | мерцанные режимы | ||
---|---|---|---|
в E | описание | в E | описание |
#00 | стандартный экран с #4000 | #08 | стандартные экраны с #4000 и #C000 |
#01 | стандартный экран с #6000 | #09 | стандартные экраны с #4000 и #6000 |
#02 | high colour экран с #4000 | #0A | high colour экраны с #4000 и #C000 |
#03 | hires экран с #4000 | #0B | hires экраны с #4000 и #C000 |
#04 | стандартный экран с #C000 | #0C | стандартные экраны с #4000, #6000, #C000 и #E000 |
#05 | стандартный экран с #E000 | #0D | стандартные экраны с #C000 and #E000 |
#06 | high colour экран с #C000 | #0E | high colour экраны с #4000 и #C000 - 1:3 |
#07 | hires экран с #C000 | #0F | hires экраны с #4000 и #C000 - 1:2 |
При HL>#4000 по адресу HL помещается релоцируемый код для выбора одного из основных экранных режимов. В этом случае L содержит длину этого кода, а H - требуемое ему число тактов. Вызовами с H=0 режим выбирается непосредственно.
N° | название | описание | вход | выход |
---|---|---|---|---|
#A6? | VIDEO | информация о экране | ? | A
D=ula E=mode BC=время |
#A7 | OPENVIDEO | включить экранный режим | BC=время
DE=mode HL=buffer | BC=время
DE=mode H=tacts L=длина |
Функция #AD? вызывает внутренние функции имеющегося в наличии RSX.
Функция #AE предназначена для контроля всех загруженных RSX. При E=0 помещает в HL имя файла, который вызвал загрузку программы или ошибку, если программа была запущена непосредственно, без привязки к файлу. BC должен содержать размер буфера, как минимум #0080.
Функция #AF загружает RSX, соответствующий расширению файла, вслед за
чем RSX загрыжает требуемый файл. Например, для файла "GAME.Z80" RSX грузится
из файла "ZX:Z80.RZX". Это не происходит в случае
расширений ".V00" (родная программа ZXVGS) и "RZX" (грузит RSX непосредственно,
а не "RZX.RZX").
Функция #AF загружает:
N° | название | описание | вход | выход |
---|---|---|---|---|
#AC | RSXINIT | взять RSX | DE=^rsxname | D=хэндл
A=ошибка |
#AD? | RSXCTRL | вызвать RSX функцию | D=хэндл
E=функция | ?
A=ошибка |
#AE | RSXINFO | информация о RSX | E=what
HL BC | ?
A=ошибка |
#AF | RSXLOAD | загрузить файл RSX'ом | DE=^filename | A=ошибка |
Банк должен быть открыт перед операциями с ним. Если при открытии не хватает памяти (ОЗУ в случае невиртуальных банков или внешней памяти в случае виртуальных), генерируется фатальная ошибка. Предварительно проверяйте свободное место! Открытый банк заполняется нулями. Функции не проверяют PC, SP и I, поэтому их использование в неправильном разрезе может привести к краху системы.
Если по аппаратным причинам невозможно переключать верхнюю четверть памяти, доступны только виртуальные банки (с долгим временем переключения). Если по аппаратным причинам переключаться могут только обе верхние четверти памяти одновременно (32kB, #8000..#FFFF), то переключение верхней четверти имитируется с или без перезаписи другой четверти (section C). В этом случае невозможно открыть банк, переключающийся быстро и не портящий эту section C. Она скопируется при открытии.
Имеется три типа банков:
Функция #B9 предоставляет информацию о банках. Do not use. To get current bank number and its mode, use #BF function.
Функция #BA используется для получения куска кода, переключающего банки. Более подробно см. следующую секцию.
Функция #BB копирует содержимое section C во всех открытых 32kB страницах или игнорируется в случае 16kB-страничного режима.
Функция #BC пытается открыть банк E в режиме D и возвращает удавшийся режим в D. См. таблицу параметров.
Функция #BD закрывает банк E. Если E является включенным в данный момент банком, то содержимое верхней четверти памяти становится не определено (т. е. может содержать ПЗУ или #FF-ки) до выбора другого банка.
Функция #BE закрывает все банки. Содержимое верхней четверти ОЗУ становится неопределённым.
Функция #BF возвращает в регистре E номер текущего банка, а в регистре D его режим. В регистре B возвращается количество открытых банков. Регистр A содержит количество дополнительных банков (за исключением виртуальных):
бит
в D | вход данные #BC | выход данные #BD/BF | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
когда 1 | когда 0 | когда 1 | ||||||||||||||
0 | должен щёлкать быстро (не виртуально) |
| ||||||||||||||
1 | область #8000..#BFFF не меняется | |||||||||||||||
2 | содержит экран | нет экрана | есть экран | |||||||||||||
3 | соответствует банку ZX128
OUT (#7FFD),E+#10 | несовместим с OUT #7FFD | совместим с OUT #7FFD | |||||||||||||
4 | можно класть таблицу IM 2 без "снега" | нет, пойдёт "снег" | можно, "снега" не будет | |||||||||||||
5 | процессор не будет тормозить ULA | да, будет тормозить | нет, банк быстрый | |||||||||||||
6 | поддерживает 8 бит цвета (???) | нет, только 1 бит | да, 8 бит цвета (???) | |||||||||||||
7 | откроется, даже если не соблюдать требований | открыт | не открыт |
N° | название | описание | вход | выход |
---|---|---|---|---|
#B0..#B7 | BNK0..BNK7 | включить привилегированный банк
фатальная ошибка при неоткрытом | нет | A=? |
#B8 | BNKE | включить любой банк
фатальная ошибка при неоткрытом | E=N° | A=? |
#B9 | BNKCTRL | сведения о банке - do not use | DE=infonumber | A
BC DE HL |
#BA | BNKCODE | получить программу переключения | E=N°
HL=^buffer BC=^слово | BC=длина
DE=^end A=tacts |
#BB | BNKCOPY | копировать section C во все банки | нет | A=? |
#BC | BNKOPEN | открыть банку | D=mode0
E=N° | D=mode1
A=xor |
#BD | BNKCLOSE | закрыть банку | E=N° | A=? |
#BE | BNKRESET | закрыть все банки | нет | A=? |
#BF | BNKINFO | сведения о всех банках | нет | B=opened
D=mode E=bank A=memory |
N° | название | описание | вход | выход |
---|---|---|---|---|
#C0 | GETPATH | Текущий путь (с диском). Начинается с имени диска и двоеточия. | DE=^buf | A=ошибка
name=DE^ |
#C1 | SETPATH | Сменить путь. | DE=^name | A=ошибка |
Функция #C3 выбирает каталог, считает элементы и копирует их во внутренний
буфер. (Буфер должен быть освобождён (DE=0) после окончания чтения каталога.)
HL указывает на строку формата (системный формат по
умолчанию используется либо при H=0, либо если HL указывает на нулевой
байт; внутренняя системная структура возвращается при H=1). Могут быть
использованы следующие символы форматирования:
"%-16.16m %-3.3e %l" - характер NeOS 1.0 (DEC)
"%-8.8m<%1.1e>%3b%13l" - характер TR-DOS (параметры start недоступны)
"%x %-9g%-9u%8l %6d %5t %n" - характер U*IX (ls -l)
"%-9.8m%-4.3e%13l%9.8d%9t" - характер MS-DOS 6.20 (default)
Внутренняя системная структура состоит из следующих полей (не полностью определено):
Примечание: некоторые диски (большей частью сетевые, типа "TCP:", "HTTP:"
или "FTP:") не показывают все возможные подкаталоги, а только те, которее
были использованы недавно (или есть в закладках).
N° | название | описание | вход | выход |
---|---|---|---|---|
#C2 | GETDIR | взять элемент каталога (entry) | BC=номер
DE=^buffer HL=^format | A=ошибка
BC=? DE^=entry HL=? |
#C3 | SETDIR | установить маску каталога | BC=attr
DE=^pattern HL=^format | A=ошибка
BC=число DE=? HL=? |
register BC | return | #C4 | #C6 |
---|---|---|---|
#0000 | место на диске в Кб | HL | текст ASCIIZ |
#0001 | глубина директории (1=корень) | L | текст ASCIIZ |
N° | название | описание | вход | выход |
---|---|---|---|---|
#C4 | GETINFO | получить параметры в числовом виде | DE=^name
BC=infonumber HL | A=ошибка
BC DE HL |
#C5 | SETINFO | установить параметры в числовом виде | DE=^name
BC=infonumber HL=значение | A=ошибка
BC DE HL |
#C6 | GETINF$ | получить параметры в виде строки | DE=^name
BC=infonumber HL=^buf | A=ошибка
BC DE HL |
#C7 | SETINF$ | установить параметры в виде строки | DE=^name
BC=infonumber HL=^значение | A=ошибка
BC DE HL |
Функция #CC проверяет наличие файла (ошибка когда нет).
Остальные функции пока не определены.
N° | название | описание | вход | выход |
---|---|---|---|---|
#C8? | RESET | инициализация файловой системы | нет | A=ошибка |
#C9? | FLUSH | освободить все буферы на диск | ||
#CA? | MAKE | создать файл или каталог | DE=^name | |
#CB | KILL | удалить файл или пустой каталог | ||
#CC | EXIST | проверить наличие файла или каталога | ||
#CD? | ASSIGN | подключает новый диск | DE=^name
HL=^newname | |
#CE? | MOVE | move/rename файлов/каталогов | DE=^oldname
HL=^newname | |
#CF? | COPY | дублирование файлов/каталогов | DE=^sourcename
HL=^desname |
Функция #D0 всегда закрывает файл с заданным хэндлом. Если в качестве хэндла дан 0, то закроются все открытые файлы. Функция #D1 открывает файл на чтение (возвращает ошибку, если файла нет). Функция #D2 открывает файл на запись - удалит существующий файл и создаст новый, нулевой длины. Функция #D3 открывает файл и на чтение, и на запись. Если файл не существует, он будет создан с первой записью.
Функции #D4..#D7 используются для чтения и записи файла. Функции #D4 и #D5 пересылают указанное количество байтов (возвращает число байт, переданное на самом деле - если оно меньше запрошенного, генерируется ошибка). Функция #D6 читает байты из файла до предела или до значений #00 или #0D (включая их). Функция #D7 записывает байты до байта #00, который не записывается. Он запишется только будучи первым байтом в строке.
Функция #D8 возвращает текущую позицию в файле. Функция #D9 позволяет
переместить текущую позицию в файле и возвращает старую позицию в файле.
Смещение отсчитывается в зависимости от регистра B: #FF означает "с начала",
#00 "с текущей позиции", а #01 "с конца" файла. Ошибочное значение возвращается,
если пересечено начало или конец
файла. Возможна адресация файла длиной до 8MB (23 бита адреса). Функция
#DA сообщает, находится ли текущая
позиция в конце файла (EOF). Функция #DB урезает файл по текущей позиции.
Следующие функции - почти прямые вызовы системной структуры FILEDISK. Её определения ещё могут поменяться в будущем.
N° | название | описание | вход | выход |
---|---|---|---|---|
#D0 | CLOSE | закрыть файл | D=хэндл | A=ошибка |
#D1 | OPENI | открыть файл на чтение | DE=^name | A=ошибка
D=хэндл |
#D2 | OPENO | открыть файл на запись | ||
#D3 | OPENB | открыть файл на чтение/запись | ||
#D4 | READ | читать из файла | D=хэндл
BC=длина HL=^databuf | BC=загружено
A=ошибка |
#D5 | WRITE | запись в файл | D=хэндл
BC=длина HL=^data | BC=сохранено
A=ошибка |
#D6? | GETL | читать строку из файла | D=хэндл
BC=maxlen HL=^linebuf | A=ошибка
BC=длина |
#D7? | PUTL | запись строки в файл | D=хэндл
HL=^line | A=ошибка |
#D8 | FPOS | получить текущую позицию | D=хэндл | EHL=позиция
A=ошибка |
#D9 | SEEK | установить позицию | D=хэндл
B=откуда EHL=newpos | EHL=oldpos
A=ошибка |
#DA? | EOF | проверка на окончание | D=хэндл | A=ошибка |
#DB? | TRUNC | урезать файл по текущей позиции |
Перед вызовом функций #E4..#E6 тип заголовка должен быть установлен
одной из функций #E0..#E3. Эта установка действует до следующего вызова
любой из функций #E0..E3. Если файл существует, то в определённых регистрах
возвратятся значения, взятые из заголовка этого файла. Если файл отсутствует
или требуемый тип заголовка не
соответствует считанному, возвращается признак ошибки. Ошибка может
быть игнорирована, если будет предпринята запись в файл, но чтение такого
файла будет всегда приводить к ошибке.
На входе в функцию #E3 размер буфера указывается в BC. Длина, возвращаемая
в BC, ограничена этим размером, тогда как DE содержит размер реальный.
Это сделано во избежание ограничения ленты - вы не можете загружать с реальной
ленты несколько первых байт длинного файла, и его контрольная сумма не
может быть проверена. Также, BC=#1B00
и HL=#4000 распознаются как ваше желание загрузить или записать экран
(однако вы можете загружать его и сохранять с других адресов).
Чтение и запись выдаёт ошибку, если считано или записано меньше байт, чем требовалось. В этом случае проверяйте BC. Операция верификации эквивалентна чтению и происходит как на ленте - ошибка, если данные различаются или файл слишком короткий.
Функция #E7 вызавается перед #E4..#E6. Позволяет установить смещение,
которое даёт возможность последовательного доступа к файлу. Это означает,
например, чтение последовательных частей файла в разные банки
памяти. Ошибка возвращается, когда позиция перейдёт через конец файла.
Функции #E0..#E3 всегда устанавливают смещение в 0 (сразу после заголовка).
Вызов любой из функций #E4..#E7 без предварительного вызова одной из #E0..#E3 приводит к фатальной ошибке.
Файл с заголовком может быть до 65535 байт длиной (не включая заголовок). Остальное отрезается. Формат заголовка может различаться в разных файловых системах. Поэтому не приветствуется обработка файлов с заголовком с помощью других функций, за исключением случаев, когда файл экран или игровая отгрузка.
Для файлов с расширениями, отличными от ".CZX", ".DZX", ".DAT", ".ROM", ".SCR", вызывается соответствющее RSX. Так вы можете, например, загружать данные или Бейсик-программу из файла "*. Z80"! Более подробно читайте в документации по RSX.
N° | название | описание | вход | выход |
---|---|---|---|---|
#E0 | HEADER0 | выбор файла типа program | DE=^name
BC=prog HL=line | A=ошибка
DE=длина BC=prog HL=line |
#E1 | HEADER1 | выбор файла типа number array | DE=^name
H=тип&имя | A=ошибка
DE=длина H=тип&имя |
#E2 | HEADER2 | выбор файла типа character array | ||
#E3 | HEADER3 | выбор двоичного файла | DE=^name
BC=maxlen HL=start | A=ошибка
DE=длина HL=start BC=длина |
#E4 | LOAD | читать файл в память | BC=длина
HL=start | A=ошибка
BC=загружено |
#E5 | SAVE | запись в файл из памяти | BC=длина
HL=start | A=ошибка
BC=сохранено |
#E6 | VERIFY | сравнить файл с памятью | BC=длина
HL=start | A=ошибка
BC=верно |
#E7 | SHIFT | переместить позицию в файле | DE=позиция | A=ошибка |
В будущих релизах ZXVGS будут использованы RSX для чтения и записи изображений с расширениями, отличными от ".SCR" и ".CZX". Эти функции могут также показывать на экране диалог со списком допустимых форматов, если не было дано расширение файла, или файл при чтении отсутствует, или имя файла пустое.
Другие экранные режимы также будут поддержаны.
N° | название | описание | вход | выход |
---|---|---|---|---|
#E8 | LOADSCR | читать экран из файла | DE=^name
HL=addr | A=ошибка |
#E9 | SAVESCR | запись экрана в файл |
При D=0 диалог не появится, и файл примет расширение по умолчанию ".SV?".
В этом случае E содержит код символа, помещаемого в 3-ю позицию расширения
(непригодные символы заменяются на "!"). Эта возможность предусмотрена
для загрузки дефолтной конфигурации при запуске программы или сохранения
её на выходе. Строка комментария при
сохранении устанавливается в "Autosaved" (могут быть включены дата
и время). Это можно использовать наряду со стандартными вызовами (когда
пользователь выбирает сам)
Для функции #EA при HL=0 используется адрес из заголовка файла.
Расширение "SV@" (E=#40) зарезервировано для хранения файла таблицы рекордов. Если файл существует, ZXVGS загружает "*.SV@" сразу после файла "*.V00". Позже файл сохраняется, когда пользователь вызывает меню ZXVGS. В новых программах он должен будет сохраняться функцией #EB при каждой модификации таблицы рекордов. Файлы "*.SV?" сохраняются и загружаются на диске "SV:".
N° | название | описание | вход | выход |
---|---|---|---|---|
#EA | LOADCFG | читать конфигурацию из файла | DE=^title
BC=длина HL=addr | A=ошибка |
#EB | SAVECFG | запись конфигураций в файл |
Функция #ED используется для сохранения непрерывной области памяти в файл. Код ошибки возвращается, если было сохранено меньше байт, чем требовалось (мало места на диске).
Всегда проверяйте BC при ошибке.
N° | название | описание | вход | выход |
---|---|---|---|---|
#EC | LOADANY | load any file | DE=^name
BC=длина HL=addr | A=ошибка
BC=загружено |
#ED | SAVEANY | save any file | A=ошибка
BC=сохранено |
Функция #EE всегда возвращает экран (область памяти #4000..#5AFF) нетронутой, что во многих ситуациях выливается в ограниченной форме селектора. Функция #EF всегда использует полноэкранный интерфейс, но оставляет экран в случайном состоянии. После этого требуется обновление экрана.
Рекомендуется использование селекторов файлов для каждого случая задания имён файлов пользователем.
Если маской является "*.SZX" или "*.SCR", то селектор может также позволить выбирать другие форматы графики и соответственно может менять расширение.
N° | название | описание | вход | выход |
---|---|---|---|---|
#EE | FILESELL | селектор без порчи экрана | DE=^default
BC=^mask HL=^title | A=ошибка
name=DE^ |
#EF | FILESELH | селектор с порчей экрана |
Функция #F1 пересылает требуемый контрольный код непосредственно на принтер. См. также функцию #F0.
Функция #F2 эквивалентна команде Бейсика COPY.
Функция #F3 печатает экран (256x192), взятый с указанного адреса.
Функция #F4 имитирует ZX Printer на нормальном символьном принтере.
Функция #F5 имитирует ZX Printer на матричном принтере, но для символьного принтера работает как функция #F4.
Функция #F6 предназначена для печати текстов с национальными символами. Если в системе нет перекодиторания, то эквивалентно функции #F7. Значения 1..5 в регистре D выбирают набор символов ISO-8859-D.
Функция #F7 пересылает байт непосредственно на принтер (контрольные последовательности можно получить функцией #F0).
Функции #F0..#F6 обслуживаются модулем PRINTER.RZX.
код | смысл | установка для принтера | |
---|---|---|---|
Epson FX
EPSONFX.RZX | Helwett-Packard Laser Jet
LASERJET.RZX | ||
#00 | число иголок | 8 | 8 |
#01 | перед печатью экрана | 27,65,8 | ? |
#02 | число точек в mode1 | 224,1 | ? |
#03 | выбор mode1 | 27,75,224,1 | ? |
#04 | число точек в mode2 | 192,3 | ? |
#05 | выбор mode2 | 27,76,192,3 | ? |
#06 | код для CR | 13 | 13 |
#07 | код для LF | 10 | 10 |
N° | название | описание | вход | выход |
---|---|---|---|---|
#F0 | GETPRINT | взять контрольный код принтера | E=код
HL=^buffer BC=buflen | A=ошибка
BC=codelen code=HL^ |
#F1? | SETPRINT | выдать контрольный код | E=код | A=ошибка |
#F2 | DUMP | печать 22 строк экранной графики | нет | A=? |
#F3? | DUMPANY | печать 24 строк экранной графики | HL=address | |
#F4 | ZXPRINT | печать символа, как на ZX Printer | E=символ | |
#F5? | HLPRINT | печать символа, определённого по HL как ZX Printer | HL=^pattern
E=символ | |
#F6? | DEPRINT | печать символа с модификатором | D=modificator
E=символ | |
#F7 | LPRINT | прямой вывод на принтер | E=символ |
N° | название | описание | вход | выход |
---|---|---|---|---|
#F8 | OVRLOAD | загрутзить оверлей, E=0 значит главную программу | E=номер | A=свободно |
#F9 | OVRPREPARE | загрутзить оверлей в буфер сервера | ||
#FA | OVRSTORE | загрутзить оверлей во внутренний буфер | ||
#FB | OVRREMOVE | удалить оверлей из внутренного буфера |
Функция #FC только вызывает системное меню. Программа может быть продолжена.
Функция #FD завершает программу после окончания её работы (закрывает все
открытые файлы, банки, очищает буфер оверлеев и т. д.)
Функция #FE похожа на #FD, но показывает данные сообщение перед выходом
в меню.
Функция #FF зарезервирована для интерпретатора Бейсика, который вызывает
её после выполнения последней инструкции. Это бесполезно для программ ZXVGS.
Обычно (без RSX) слово из XPTR #5C5F копируется в CHADD
#5C5D, #FF помещается в ERRNR #5C3A, и программа продолжается с #0058
(обработчик ошибок).
N° | название | описание | вход | выход |
---|---|---|---|---|
#FC | MENU | выход в меню, возврат пунктом "Continue" | нет | A=??? |
#FD | QUIT | выход в меню с сообщением "Program finished" | no return | |
#FE | FATAL | выход в меню с данным собщением (фатальная ошибка) | DE=^text | |
#FF | OK | для интерпретатора Бейсика | нет | скок до #0058 |