ПК-01 ЛЬВОВ

форум о ПК-01,02 "Львов"
Текущее время: 24 окт 2018, 06:16

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC + 2 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Описание Chameleon DOS
СообщениеДобавлено: 26 июл 2012, 22:08 
Не в сети
Аватар пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщений: 1403
Откуда: Украина
Предуведомление.
Данный материал был подготовлен на основе материалов, которые удалось обнаружить на дисках Д. Казимирова, и публикации в бюллетене "Файл" бр. Данюков. При этом материал был подвергнуть незначительной коррекции, дабы устранить наиболее вопиющие поругания грамматики и орфографии. :D

CHAMELEON DOS version 5.5

Краткая информация о ДОС:

1. Отдает пользователю все ОЗУ, кроме 295 байт системного ОЗУ;
2. Сама ДОС распологается в ПЗУ по адресам С000-С7FFH;
3. Ha диске находится только каталог и программы пользователя;
4. Каталог может содержать до 135 файлов;
5. 165 дорожка диска зарезервирована для копии каталога.

И так, после того, как вы установили ПЗУ с ДОС и включили компьютер, на экране должна появиться заставка 'ПК-01 ЛЬВIВ' на черном фоне, потом экран очистится и в верхнем левом углу появится надпись:

CHAMELEON DOS 5.5
(C)MASKSOFT&144КБ.

После этого ДОС попытается найти на диске файл 'COMMAND.COM', если на диске есть такой файл, она считает и запустит его. Под именем COMМАND.COM имеется в виду любой фaйл, который нужно запустить после сброса, например: Монитор, Norton Commander, Boot, Редакторы и другие.

Но если файл не найден, то появится приглашение к вводу команд вида:

А:>

Ниже приведены внутренние команды DOS и формат их ввода:
1. DIR - вызывается кл.<F0>, выводит каталог диска на экран;
2. LOAD - вызывается кл.<F1>, отвечает за чтение файла в формате BLOAD"",R;
3. SAVE FFFF.RRR NNNN,KKKK - вызывается кл.<F2>, записывает файл на диск. Формат ввода: FFFF-имя файла 8 сим., RRR-расширение из 3-х сим., NNNN-начальный адрес программы, КККК-конечный адрес;
4. REN WWWWW.RRR=FFFFF.RRR - вызывается кл.<F3>, позволяет переименовать файл, где WWWWW - новое имя файла;
5. ERA FFFFF.RRR - вызывается кл.<F4>, удаление файла с диска;
6. TYPE FFFFF.RRR - вызывается кл.<.F5>, распечатка файла;
7. CP/M36 - вызывается кл.<П/Д>, читает СP/M36 с диска и запускает;
8. N: - переход на другой диск, где N - логическое имя диска (А, B, C, D).

Выход из команд REN, ERA, SAVE, TYPE возможен посредством нажатия клавиши <F5>.

Чтение с диска файлов происходит набором имени файла без расширения, пробелы можно опустить. Запускаемый файл должен иметь расширение 'COM', иначе ДОС выдаст сообщение об ошибке "*NO FILE*".

При наборе имени файла для команд REN, ERA, SAVE, TYPE необходимо вводить все 8 символов (клавиша "Забой" не действует). Такая жескость обусловлена малым объемом ПЗУ, на все про все дано 2 кбайта.

Ниже приведены подпрограммы и формат обращения к ним:
C79D Установка головки дисковода на требуюмую дорожку.
Перед обращеним заносим в ячейки памяти:
BFB0 - номер дорожки (0-165),
BFB4 - номер дисковода (0-А, 1-В, 2-С, 3-D).

C7A0 Чтение сектора с диска.
Перед обращением сначала должна быть выполнена п/п C79D, а также заносим в ячейку:
BFB1 - номер сектора (1-9).

C7A3 Запись сектора. Остальное как и у п/п C7A0.

C7A6 Чтение определённого количества секторов в память.
Перед обращением:
BFB0 - номер дорожки,
ВFB1 - номер сектора,
BFB4* - номер дисковода,
BFB6 - число читаемых секторов (1-255),
HL - начальный адрес куда читать.

C7A9 Запись определеного количества секторов на диск из памяти. Ее параметры такие же как и п/п C7A6, только в HL заносим нач. адрес области памяти для записи.

C7AC Прочитать атрибуты файл с диска.
Перед обращением:
DE - адрес, где находится имя файла с расширением (11 симв),
BFB4* - см.выше.
Выходные данные:
А = 00 - конец каталога,
А = 02 - в каталоге нет места,
А = 01 - файл найден, по адресу BE1F-BE2F расположены атрибуты файла.

C7AF Чтение файла с диска.
Перед обращением:
BE1F-BE29 - имя файла с расширением,
BFB4* - cм.выше,
BFB5 - запустить, если значение этой ячейки больше нуля.
Выходные данные:
А = 01 - файл считан, иначе файл не найден.

C7B2 Запись файла на диск.
Перед обращением:
BE1F-BE29 - см. подпрограмму C7AF,
BE2D - начальный адрес файла,
BE2F - длина файла в секторах.
Выходные данные:
A = 00 - запись произведена нормально,
A = 01 - на диске уже есть файл с таким именем,
A = 02 - в каталоге нет места.

C6E9 Вычисление длины программы в секторах.
Перед обращением:
HL - нач.адрес,
DE - кон.адрес.
Выходные данные:
BE2F - длина в секторах.

C7B5 Вывод каталога диска (аналогично команде Dir).

C1BA Чтение атрибутов диска по адресу BED0-BEDF.
Перед обращением:
BED0-BEDA - имя диска,
BEDB - первый свободный сектор на диске,
BEDC - первая свободная дорожка на диске,
BEDF - запрет команды SAVE.

C60F HL=HL-BC (вычитание).

C708 Чтение с диска CP/M36 с последующим запуском.

C7D0 Этой подпрограммой подменяют п/п DD31 (вывода на ленту), посредством ее программы будут выносится не на ленту, а на диск.
Входные параметры:
BEA4 - нач.адрес,
BEA6 - кон.адрес,
BE8C - имя файла(6 символов).
Как видите, параметры такие же, что и для DD31. Выносимые файлы получают расширение СОМ.

C7CD Этой подпрограммой подменяют п/п DD94 (чтение с ленты).
Входные параметры:
BE8C - см.выше.

C7B8 Подпрограмма ЕRA. Ввод как в командном режиме. После завершения п/п переходит по адресу BFE8.
C7BB Подпрограмма REN. Ввод как в командном режиме. Выход как и в ЕRA.
C7BE Подпрограмма TYPE. Ввод как в командном режиме. Выход как и в ERA.
C7C0 Подпрограмма SAVE. Ввoд как в командном режиме. Выход как и в ЕRA.

C7C4 Ввод в аккумулятор 16-ричного числа.
Выходные данные:
А = 16-ричное число.
При возникновении ошибки ввода будет произведен выход по адресу BFE8.

C7CA Ввод в рег.пару HL 16-ричного двухбайтового числа.
Выходные данные:
HL = 16-ричное двухбайтовое число.
При ошибке выход как и в п/п C7C4.

* - в эту ячейку заносить данные не обязательно, только если вы хотите перейти на другой диск.

К подпрограммам C7B8, C7BB, C7BE, C7C0 следует обращаться командой JMP. При этом в ячейки памяти BFE9-BFEA необходимо занести адрес, куда требуется перейти после выполнения.

Ошибки, выдаваемые DOS:

*ERROR I/O* - выдается при чтении и записи на диск, например:
1. Чтение сектора с ошибкой (перед выдачей ДОС пытается считать сектор 32 раза),
2. Не найден требуемый сектор или дорожка,
3. Диск защишен от записи (наклейка),
4. Не хватает места на диске (об этом можно узнать, если значение в яч. BFB0 больше 16-ричного А4).

*NO FILE* - указанный файл не найден на диске; выдается при попытке уничтожить файл со статусом запрещающим ЕRA.
*NO SAVE* - выдается как в случае когда на диске уже есть такой файл, так и если на диск программным путем запрещена запись.
*SN.ERORR* - выдается при синтаксической ошибке.

Теперь информация о ячейках в системном ОЗУ:

BD00-BDFF - используется при работе с каталогом диска;
BE00-BE0F - буфер, используемый ДОС при вводе файла;
BE1F-BE2F - здесь хранятся атрибуты читаемого файла, поэтому о них поподробней:
BE1F-BE26 - имя файла, 8 символов;
BE27-ВЕ29 - расширения файла;
ВЕ2А - статус файл: 00-свободный, 01-запрет ERA, 02-скрытый файл и запрет ЕRA;
BE2B - первый занимаемый файлом сектор на диске;
BE2C - первая занимаемая файлом дорожка на диске;
BE2D - начальный адрес файла в ОЗУ, он же адрес запуска;
BE2F - число занимаемых секторов на диске, т.е. длина файла в секторах.
В такой же последовательности находятся атрибуты файла в каталоге.

BEF0 - по этому адресу переходят п/п при ошибках чтения, записи, установки головки на дорожку (ERROR I/O), ровно как при работе с лентой (ОШИБКА В/В);
BED0-BEDF - см. п/п C1BA;
BFB0 - номер дорожки;
BFB1 - ноmeр сектора;
BFB2 - сторона диска*;
BFB3 - реальный номер дорожки для контроллера*;
BFB4 - номер дисковода (1,2,3,4);
BFB5 - запуск файлa (1), нет запускa (0);
BFB6 - длина в секторах;
BFB7 - используется при работе с диском*.

* - в эти ячейки значения заносит сама ДОС.

Информация о диске после того, как он был отформатирован:
1. Одинарная плотность FM;
2. В одном секторе 256 байт;
3. На одной дорожке 9 секторов - с 1 по 9 (0 сектора нет);
4. На диске 165 дорожок (82);
5. Нулевая дорожка: на ней хранится имя диска, информация о диске, каталог диска;
6. С 1-ой по 164-ю дорожки размещаются файлы пользователя;
5. 165 дорожка может быть использована для копии каталога диска, это должна делать программа пользователя.

Информация о порте 0Е4Н.

При записи в порт:
0-1 биты - номер дисковода;
2 бит - сбрасывает ВГ93;
3 бит - останавливает ВГ93;
4 бит - сторона диска;
5 бит --------------
6 бит - плотность FM/MFM;
7 бит --------------

При чтении:
0-5 биты ----------
6 бит - равен 0, если команда выполнена;
7 бит - готовность к обмену.

На системном диске поставляются внешние системные команды DOS:
1. Format - форматирование дискет,
2. Таpes - чтения файлов с диска и затем вынос их на ленту,
3. Wcopy2 - копия дискеты на другую дискету,
4. МС - граф.оболочка, которая реализует расширенные функции ДОС.

P.S.
Сейчас под CHAMELEON DOS адаптированы все игровые и системные программы, например: Samara, Picaso, ASS-91.

UPD.
Дополнительная информация о версии 7.7, которая предназначалась для ПК-02 "Львов" с процессором Z80. Ее главное отличие заключалось в том, что корректно поддерживалась двойная плотность записи MFM, что позволило разместить на одной дорожке не 9-ть, а 16-ть секторов, которые нумеровались с 1h по 10h (1-16), нулевой сектор по-прежнему отсутствовал. Более никаких отличий эта версия в себе не несла.

2UPD.
Любознательный b2m [url=http://lvovpc.ho.ua/forum/viewtopic.php?f=4&t=164&start=45#p2099]установил[/url] значение еще двух недокументированных байт 0xBFB8 и 0xBFB9:

[quote="b2m"]Есть ощущение, что этот байт (0xBFB9) отвечает за плотность записи - 9/16 секторов на дорожке. Однако запись туда производится после чтения, к тому-же производятся какие-то действия с дисководом. Похоже на детект FM/MFM. И он у меня не срабатывает.

Скорее всего производится попытка чтения либо FM, либо MFM (в зависимости от байта), и если есть ошибка чтения - переключается на другой формат. А у меня ошибка чтения никогда не выдаётся.

А если количество секторов на дорожке - 9, то сектора 10-16 пропускаются. Поэтому программы не работают.

Кстати, по адресу 0BFB8h записывается как раз число секторов на дорожке (после детекта).


Послесловие.
Скачать [url=http://www.wuala.com/lvov_pc01/filestore/soft/liberation/pc01/Chameleon_DOS/]образ ПЗУ с Chameleon DOS 7.7[/url] из файлового хранилища. Обсуждение его работы можно [url=http://lvovpc.ho.ua/forum/viewtopic.php?f=4&t=164]найти тут[/url].

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Описание Chameleon DOS
СообщениеДобавлено: 01 сен 2014, 08:34 
Не в сети

Зарегистрирован: 01 сен 2014, 08:19
Сообщений: 22
Могу добавить, что порты ВГ93 Е0 - Е3


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Описание Chameleon DOS
СообщениеДобавлено: 19 сен 2014, 03:35 
Не в сети

Зарегистрирован: 01 сен 2014, 08:19
Сообщений: 22
поправка: на диске 83 дорожки, а не 82
и под CP/M36 тоже 83
--
в Хамелеоне 7 работает забой
--

Lviv PK-01 Chameleon DOS and CP/M36
* note PK-01 is unable to WRITE MFM disks due to CPU constraints
it READS MFM OK

MFM, 300rpm, 250000 bps
IBM ISO 2 sides, 83 tracks, 16 sectors per track, 256 bytes per sector
679 936 formatted capacity

and

FM, 300rpm, 250000 bps
IBM ISO 2 sides, 83 tracks, 9 sectors per track, 256 bytes per sector
382 464 formatted capacity

sector order 1,2,3 ...

Track header:
0x4e x 80 - GAP1
0x00 x 12 - sync
0xC2 x 3 - desync
0xFC - marker
0x4e x 65 - GAP

Sector header::
0x00 x 12 - sync
0xa1 x 3 - desync
0xfe - IDAM marker
tt - track number (starting #0)
sd - side
sc - sector number (starting #1)
0x01 - 256 bytes per sector
cc x 2 - CRC
0x4e x 22 - GAP2

Sector Data:
0x00 x 12 - sync
0xa1 x 3 - desync
0xfb - DATA AM marker
dd x 256 - data
cc x 2 - CRC
0x4e x 70 - GAP3

0x4e x 141 - GAP4

6510 bytes total

unformated MFM track at 300RPM = 6250 bytes
extra 40 bytes may be at GAP1 or GAP4

For FM and MFM disks
catalog location: Side 0 Track 0 Sectors 1-9

Sector 1: 17 bytes disk attributes + 14 x 17 bytes file records + 1 byte = 0x00 padding to 256 bytes
Sector 2-9: 15 x 17 bytes file records + 1 byte = 0x00 padding to 256 bytes
Therefore maximum number of files: 134

Disk attr in catalog - 17 bytes
- 11 bytes disk name
- 1 byte first free sector
- 1 byte first free track
- 1 byte unknown
- 1 byte hidden DIR flag
- 1 byte write protection
- 1 byte not used, just padding to 17 bytes

File entry in catalog - 17 bytes
- 8 bytes file name (if first byte = 0x01 then file is marked as deleted)
- 3 bytes file extention
- 1 byte file status: 0x00 Normal, 0x01 Protected, 0x02 Protected and Hidden;
- 1 byte file location sector
- 1 byte file location track
- 2 bytes RAM loading address = start address (for BAS files: file length in bytes)
- 1 byte file length in sectors of 256 bytes


Последний раз редактировалось kapitan 22 сен 2014, 23:05, всего редактировалось 2 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Описание Chameleon DOS
СообщениеДобавлено: 22 сен 2014, 00:48 
Не в сети

Зарегистрирован: 01 сен 2014, 08:19
Сообщений: 22
Провел эксперименты с каталогом: действительно для обоих типов дисков (FM & MFM) каталог сидит
в первых 9 секторах => макс кол-во файлов 134 в обоих случаях.
После форматирования MFM диска певый своботный сектор,дорожка = 01,01
т.е. 7 секторов гуляют. простой перебивкой на 0x0A,0 можно получить еще 1792 байт места на MFM диске.
Толку никакого, просто интересно :-)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Описание Chameleon DOS
СообщениеДобавлено: 22 сен 2014, 04:27 
Не в сети

Зарегистрирован: 01 сен 2014, 08:19
Сообщений: 22
[quote]C7CD Этой подпрограммой подменяют п/п DD94 (чтение с ленты).
Входные параметры:
BE8C - см.выше.


К имени полученному на входе (6 символов) добавляется два пробела и расширение COM

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Описание Chameleon DOS
СообщениеДобавлено: 22 сен 2014, 22:00 
Не в сети

Зарегистрирован: 01 сен 2014, 08:19
Сообщений: 22
доплнение
C1BA Чтение атрибутов диска по адресу BED0-BEDF.
BEDE - полностью скрыть каталог
но диск работает как обычно если знать имена файлов
----
BFB7 Текущий дисковод
BFB8 количество секторов на дорожке 9 или 16 (выше адрес ячейки указан неправильно)


Последний раз редактировалось kapitan 23 сен 2014, 01:02, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Описание Chameleon DOS
СообщениеДобавлено: 22 сен 2014, 23:05 
Не в сети

Зарегистрирован: 01 сен 2014, 08:19
Сообщений: 22
Попала ко мне в руки игра Дракула в виде teledisk образа диска.
HxC софт понимает TD0 формат, поэтому все было просто переброшено на эмулятор дисковода и сразу заработало на живом львове.

Но вот, что интересно:
- игра стартует автоматом после сброса
- если поставить другой диск и выйти на командную строку хамелеона,
а потом поставить дракулу и сказать DIR, то каталога неувидим и игра снова стартует автоматом
- просмотр кода первого сектора показал, что там мусор и совсем непохоже на хамелеоновский каталог.
- копировть диск неполучается

Это было все очень интересно и заставило потратить пару часов на дизассемблирование хамелеона :-)

Вот как это работает.
Сам диск интересно размечен. Установить структуру очень просто: берем HxC софт, загружаем TD0 и сохраняем как XML.

Вот небольшая выдержка:
[code]<number_of_track>83</number_of_track>

<number_of_side>2</number_of_side>

<format>IBM_FM</format>

<start_sector_id>1</start_sector_id>

<sector_per_track>3</sector_per_track>

<sector_size>1024</sector_size>

<formatvalue>0</formatvalue>

<gap3>255</gap3>

<bitrate>250000</bitrate>

<pregap>0</pregap>

-<sector sector_size="1024" sector_id="1">

-<sector sector_size="1024" sector_id="16">

-<sector sector_size="128" sector_id="19">
<data_fill>0x00</data_fill> [/code]

т.е. по 3 сектора на дорожке
номера секторов 1, 16, 19
размеры секторов 1024, 1024, 128
сектор 128 байт всегда заполнен нулями, два других неcут информацию.

Хамелеон пытается прочесть первый сектор каталога в буфер 0xBD00
ВГ93 читает сектор целиком, все 1024 байта.
Получается buffer overflow attack :-)
Начало стека известно из листинга хамелеона 0xBE80
0xBE80-0xBD00 = 0x180

вычислять положение указателя на момент чтения сектора совсем необязательно, можно просто пробить стек нужным адресом на некоторую глубину. В Дракуле 16 раз повторяется адрес 0xBD00

Вот такие люди в стране советской были! :-)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Описание Chameleon DOS
СообщениеДобавлено: 05 апр 2016, 11:53 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: 24 июл 2008, 12:05
Сообщений: 994
[quote="kapitan"]
Sector Data:
0x00 x 12 - sync
0xa1 x 3 - desync
0xfb - DATA AM marker
dd x 256 - data
cc x 2 - CRC
0x4e x 70 - GAP3

У меня, почему-то GAP3 - 54 байта.
Дракулу не выложите? :)

Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC + 2 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Free counters!
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB