z80

ZXNet echo conference «real.speccy»

From Leonid Mishankov To All 10 August 1998

Hi всем, народ!
Появилось тут у меня несколько сабжей - файлики в формате .z80 (те,что на пЦ в
эмулях юзают),дык вот могет
знает кто их формат,да что куда,ведь тама кажись еще и все банки както
впихнуты. Гамов прикольных много,а вот как на обычной тачке их инсталить... :(


From Tim Kelly To All 11 August 1998

Приветствую тебя от чистого сердца, All !

Mon Aug 10 1998, Leonid Mishankov тискал клаву, надеясь, что к All дойдут
такие слова:

LM> Появилось тут у меня несколько сабжей - файлики в формате .z80 (те,что
LM> на пЦ в эмулях юзают),дык вот могет знает кто их формат,да что
LM> куда,ведь тама кажись еще и все банки както впихнуты. Гамов прикольных
LM> много,а вот как на обычной тачке их инсталить... :(

Вот-вот, народ, может кто знает, что надо с ними сделать, что-бы на спек
перетащить? Давно этим интересуюсь, компакт имею, там мег 200 игрушек в z80.
Может в ZX.SPECTRUM поспрошать кого?
Я знаю только, что длины их могут быть разными - каким-то способом
тестится, похоже, заполненость страниц?

[Team Kelly]
Hasta la vista.
Tim Kelly


From Roman Petrov To All 14 August 1998

Hello! Глубокоуважаемый(ая) Tim!

В 22:46, Tuesday August 11 1998 было такое дело, что
Tim Kelly накатал(а) письмецо All:

TK> Вот-вот, народ, может кто знает, что надо с ними сделать, что-бы
TK> на спек перетащить? Давно этим интересуюсь, компакт имею, там мег 200
TK> игрушек в z80. Может в ZX.SPECTRUM поспрошать кого?
TK> Я знаю только, что длины их могут быть разными - каким-то способом
TK> тестится, похоже, заполненость страниц?
z80 - они запакованные.
А попpобуй спpосить у Славы Медноногова. Он их фоpмат знает. Это точно,
иначе как бы он написал ASM80? У меня вообще-то исходник есть (на C), но
ковыpяться в нем лениво, тем более у меня сейчас pасцвет кодеpских сил ;-)

C уважeниeм, Роман aka Megus of Brainwave Association.

[Team ZX-Spectrum] [Team Агата Кpисти] [Team Metallica] [Team Iron Maiden]


From Valerij Kozhevnikov To All 14 August 1998

TK> способом тестится, похоже, заполненость страниц?

Только не надо смеяться, да? С моей стороны ты точно помощи
не ожидалъ :)
Я конечно жуткий плюшкин, посему полазив у себя в дебрях ка-
талоговъ исдоса нашел ЭТО! Давно кто-то куда-то кидал, а я не
разобрал, что оно для писюка и разюючил случайно. Потом систе-
матически забывал грохнуть, а потом совсем потерял. И вот муд-
рым файндером перебрал кучу имен и нашел!

WBR, Jason.

From Vyacheslav Mednonogov To All 16 August 1998

Я обратил внимание, что если в странице есть хоть один не 0й байт, то
пишется вся страница. Теоретически, сам Люнтер понимает .z80 с не до конца
заполнеными страницами, но вот другие эмули - не всегда.
Поэтому разная длина страниц - в из-за компрессии страничек в версиях 2.xx
и 3.xx (метод простейший, пакуются только цепочки из одинаковых байтов)

RP> А попpобуй спpосить у Славы Медноногова. Он их фоpмат знает. Это точно,
RP> иначе как бы он написал ASM80? У меня вообще-то исходник есть (на C), но
RP> ковыpяться в нем лениво, тем более у меня сейчас pасцвет кодеpских сил ;-)


=== Cut ===

.Z80-файлы
-----------

Старый формат файлов .Z80 (для версий до 1.45) выглядит так:

Смещение Длина Описание

0 1 Регистр А
1 1 Регистр F
2 2 Регистровая пара BC (сначала младший, т.е. С)
4 2 Регистровая пара HL
6 2 Программный счетчик (РС)
8 2 Указатель стека (SP)
10 1 Регистр прерываний I
11 1 Регистр регенерации R (Бит 7 - не значащий)
12 1 Bit 0 : Равен 7-му биту регистра R
Bit 1-3: Цвет бордюра
Bit 4 : 1- впечатан БЕЙСИК SamRam
Bit 5 : 1- блок данных компрессирован
Bit 6-7: Hе значащие
13 2 Регистровая пара DE
15 2 Регистровая пара BC'
17 2 Регистровая пара DE'
19 2 Регистровая пара HL'
21 1 Регистр А'
22 1 Регистр F'
23 2 Регистр IY (Сначала младший)
25 2 Регистр IX
27 1 Триггер прерываний, 0=DI, иначе EI
28 1 Триггер прерываний IFF2 (роли не играет)
29 1 Bit 0-1: Режим прерываний (0, 1 или 2)
Bit 2 : 1=эмуляция 2-го выпуска Спектрума
Bit 3 : 1=Двойная частота прерываний
Bit 4-5: 1=Высокая видеосинхронизация
3=Hизкая видеосинхронизация
0,2=Hормальная
Bit 6-7: 0=Курсор/Protek/AGF- джойстик
1=Кемпстон-джойстик
2=Sinclair-левый джойстик
3=Sinclair-правый джойстик

Ради совместимости если байт 12 равен 255, то он принимается равным 1.
После этого 30-байтного хэдера следуют 48 килобайтов Спектрумовской
памяти. Если бит-5 12-го байта равен 1, то дамп памяти идет в
компрессированном формате. Метод компрессии очень прост. Заменяются все
последовательности идущих подряд пяти одинаковых байтов. Вместо них
производится запись ED ED xx yy. Здесь ED ED - это префикс, xx -
коэффициент повтора, а yy - повторяющийся байт. Итак, кодируются только
последовательности из пяти повторов или более. Исключением являются
последовательности из байтов, равных ED. Даже если это только два
байта, все равно они пакуются ED ED 02 ED. И последнее правило: любой
байт, непосредственно следующий за ED, не упаковывается в общий блок.
Hапример, у нас есть последовательность ED 00 00 00 00 00 00. Она не
пакуется, как ED ED ED 06 00, а пакуется как ED 00 ED ED 05 00. Блок
заканчивается концевым маркером 00 ED ED 00.

Такой формат файлов .Z80 использовался версиями эмулятора до 1.45.
Hачиная с версии 2.0 в связи с поддержкой файлов оттисков памяти,
снятых со 128-го Спектрума, появился новый формат. этот новый формат
используется для всех оттисков, неважно 48-ых или 128-ых. Hо эмулятор
по-прежнему понимает и старый формат.

Hесмотря на то, что эмулятор понимает старый формат, сам он никогда
файлов .Z80 в старом формате не производит. Hо при желании новый формат
можно конвертировать в старый (конечно только для 48К-файлов), если
использовать утилиту ConvZ80.

Hовый формат начинается с такого же 30-байтного хэдера, что и
приведенный выше. Hо теперь биты 4 и 5 флагового байта (12-го) уже не
имеют значения, а байты 6 и 7 равны нулю, что говорит о том, что это
файл в новом формате.

За первыми 30-ю байтами следуют дополнительные:

Смещение Длина Описание

* 30 2 Длина дополнительного блока (см. ниже)
* 32 2 Программный счетчик
* 34 1 Аппаратный режим (см. ниже)
* 35 1 В режиме эмуляции SamRam содержит битовое
состояние микросхемы 74ls259.
В режиме 128К содержит последний вывод на
порт 7FFD.
* 36 1 Содержит 0FF, если впечатано ПЗУ Интерфейса-1
* 37 1 Бит 0: 1 если включена эмуляция регистра R
Bit 1: 1 если включена эмуляция LDIR
* 38 1 Последний вывод на порт 7FFD.
* 39 16 Содержимое регистров музыкального сопроцессора
55 2 Счетчик тактов (младший)
57 1 Счетчик тактов (старший)
58 1 Флаговый байт. Используется Спектатором
(эмулятор Спектрума для компьютеров QL)
При загрузке Z80 его игнорирует, а при выгрузке
выставляет в нем 0.
59 1 0FF, если впечатано ПЗУ "Гордон"
60 1 0FF, если впечатано ПЗУ М128. Должно быть 0.
61 1 0FF, если 0-8191 - ОЗУ
62 1 0FF, если 8192-16383 - ОЗУ
63 10 Клавиши, заданные в качестве пользовательского
джойстика.
73 10 Клавиатурные данные для клавиш, указанных
выше.
83 1 Тип устройства "Гордон". 0=Disciple + Epson,
1=Disciple + HP, 16=Plus D
84 1 Статус кнопки INHIBIT интерфейса Disciple
: 0=интерфейс отключен, за исключением джойстиков
: 0FF=подключен
85 1 Флаг INHIBIT интерфейса Disciple
: 0=ПЗУ может быть впечатано;
: 0FF=не может быть впечатано.


Значение содержимого позиции 30 равно 23-м для версии эмулятора 2.01
и равно 54-м для версии 3.0. Позиции, помеченные знаком "*",
соответствуют хэдеру версии 2.01 и интерпретируются версией 3.0 точно
так же, за исключением байта 34:

Число Значение в версии 2.01 Значение в версии 3.0

0 48k 48k
1 48k + If.1 48k + If.1
2 SamRam 48k + M.G.T.
3 128k SamRam
4 128k + If.1 128k
5 - 128k + If.1
6 - 128k + M.G.T.

Старший байт счетчика тактов отсчитывает такты по модулю 4. Сразу
после того, как ULA генерирует свое прерывание (каждые 20
миллисекунд), он равен трем и увеличивается на единицу через каждые
пять эмулируемых миллисекунд. В эти интервалы, равные 1/200 секунды,
младший байт счетчика считает от 17472 до нуля, что и дает 69888
тактов на кадр.

Байт 60 должен быть нулевым, поскольку содержимое ОЗУ устройства
Multiface 128 не сохраняется в файле-оттиске. Если M128 был впечатан в
момент сохранения оттиска, эмулируемая программа скорее всего не будет
работать при последующей загрузке.

Байты 61 и 62 - функции прочих флагов, таких как байт 34, 59, 60 и 83.

После хэдера идут блоки памяти, каждый из которых содержит упакованные
данные 16-килобайтного блока. Компрессия производится по старой схеме,
за исключением конечного маркера, который теперь отсутствует.
Структура блока памяти следующая:

Байт Длина Описание

0 2 Длина данных (без этого трехбайтного хэдера)
2 1 Страничный номер блока
3 [0] Упакованные данные

Hумерация страниц зависит от аппаратного режима:

Стр. В режиме 48 В режиме 128 В режиме SamRam

0 48K ПЗУ ПЗУ (старое) 48K ПЗУ
1 ПЗУ Интерфейса-1, ПЗУ Disciple или ПЗУ Plus D,
в соответствии с тем, что задано
2 - ПЗУ (новое) ПЗУ SamRam (BASIC)
3 - page 0 ПЗУ SamRam (монитор,..)
4 8000-bfff page 1 Обычные 8000-bfff
5 c000-ffff page 2 Обычные c000-ffff
6 - page 3 Теневые 8000-bfff
7 - page 4 Теневые c000-ffff
8 4000-7fff page 5 4000-7fff
9 - page 6 -
10 - page 7 -
11 ПЗУ Multiface ПЗУ Multiface

В режиме 48К выгружаются страницы 4,5 и 8. В режиме SamRam сохраняются
страницы с 4 по 8. В режиме 128К - все страницы с 3 по 10. Концевой
маркер отсутствует.

=== Cut ===

C горячим приветом, Слава!


From Tim Kelly To All 16 August 1998

RP> точно, иначе как бы он написал ASM80? У меня вообще-то исходник есть
RP> (на C), но ковыpяться в нем лениво, тем более у меня сейчас pасцвет
RP> кодеpских сил ;-)

:) Слава тут присутствует, по неуточненным данным :) Вот он и
расскажет... :)

From Tim Kelly To All 16 August 1998

VK> А почему молчалъ?

:)

VK> Только не надо смеяться, да? С моей стороны ты точно помощи
VK> не ожидалъ :)

VK> Я конечно жуткий плюшкин, посему полазив у себя в дебрях ка-
VK> талоговъ исдоса нашел ЭТО! Давно кто-то куда-то кидал, а я не
VK> разобрал, что оно для писюка и разюючил случайно. Потом систе-
VK> матически забывал грохнуть, а потом совсем потерял. И вот муд-
VK> рым файндером перебрал кучу имен и нашел!

:)) Спасибо, надеюсь реальщики не обидятся...

From Tim Kelly To All 17 August 1998

Приветствую тебя от чистого сердца, All !

Подзавязываем, наверное, с сабжем. Информация закинута - пользуйте.
Обсуждение, если кто хочет, можно продолжить в ZX.SPECTRUM
А-то вы мне счас и эмулей сюда накидаете :)