Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Поиск (http://zx-pk.ru/forumdisplay.php?f=78)
-   -   ПК Поиск - Кассетный интерфейс (http://zx-pk.ru/showthread.php?t=21240)

Tronix 2nd May 2013 00:03

ПК Поиск - Кассетный интерфейс
 
Итак, мои ковыряния с форматом записи данных на кассету не прошли даром. Результатом стала программа CAS2WAV, позволяющая создавать WAV файл из кассетных программ для последующего воспроизведения на любом аудио-плеере.

Самое интересное, что первоначально цель исследований была диаметрально противоположна - научится читать данные из записей WAV файлов, но это труднее. Однако в итоге у меня получилась небольшая заготовка - декодер, которая позволила без ошибок прочитать все три доступные мне WAV записи с программами ISPP, BASIC и ISKATEL.

Скачать наиболее полный набор кассетных программ для Поиска можно здесь: http://vizersprojects.ru/archive/sannata/apps.zip (за что выражаю благодарность Кравченко М.О. (Vizer), Кравченко С.И. (Profesor_lampochkin), Пелега Е. (DrPass) )

Скачать утилиту можно здесь: https://dl.dropboxusercontent.com/u/.../cas_poisk.rar

Напомню, что на ленте (ну или в WAV) хранятся не только сами данные, но есть еще и небольшой заголовок. Там находится название программы (максимально 8 БОЛЬШИХ латинских букв), тип программы (бейскик текстовый/бейсик бинарный/бинарная программа), размер программы, и, самое главное - адрес сегмента и смещения, куда МОНИТОР будет загружать программу и откуда она стартанет. У тех прог, что я декодировал были такие адреса загрузки и типы:

ISPP - 0060:081E, тип: 0x80
BASIC - 0000:0000, тип: 0x02
ISKATEL - 0060:081E, тип: 0x80

Например, для создания WAV с ISPP запускать так:
Code:

cas2wav ispp.cas ispp.wav -n ISPP
Для бейсика так:
Code:

cas2wav basic.cas basic.wav -n BASIC -t 2 -s 0 -o 0

Tronix 6th May 2013 17:04

Ну, и как логичное продолжение, программа WAV2CAS. С ее помощью я оцифровал из доступных мне магнитофонных записей ISPP, BASIC и ISKATEL без ошибок. Конечно, я так же проверял декодирование файлов созданных утилитой CAS2WAV. В этом случае все тоже проходит без ошибок.

Еще утилита имеет режим совместимости с компьютером MC-1502 (ключ /mc), поэтому может обрабатывать магнитофонные записи и от него. По сути разница не большая - Поиск придерживается оригинального формата заголовка от PCjr:
PHP Code:

1 байт magic 0xA5
8 байт 
имя файла
1 байт 
тип
2 байта 
размер
2 байта 
сегмент
2 байта 
смещение 

и хранит размер файла в байтах и для бинарных программ и для бейсиковых файлов, в то время как MC1502 для бинарных файлов (типы 02h и 08h) размер файла хранит в блоках по 256 байт.

Так как все записи разные по уровню звука, качеству и даже длительности единиц и нулей (у MC-1502 она несколько выше за счет разогнанного таймера) программа пытается перебором подобрать оптимальные значения порога перепада импульса и полярности.
Исхода может быть три:
1) декодирование происходит без ошибок CRC.
2) декодирование происходит с ошибками CRC, в этом случае выбираются такие значения, при которых количество ошибок CRC минимально.
3) программа не обнаруживает пилот-тона или заголовка или в заголовке есть ошибка CRC. В этом случае декодирования не производится.

Еще в программе есть "интеллектуальный" (c) алгоритм, который может помочь считать записи сделанные на "плавающем" магнитофоне. Суть вот в чем: если у 256 байтного блока оказывается неверная CRC, то программа начинает как-бы двигать его назад-вперед по аудио-потоку до разумных границ. То есть если мы сейчас читаем данные с позиции 1000 и у них неверная CRC, то давайте попробуем прочитать с позиции 999. А с позиции 1001? А с позиции 998? А с позиции 1002? И тд. Включается данный режим ключем /fixcrc . По умолчанию отключен, стоит попробовать включить когда данные декодируются с ошибками CRC.

Я думаю (на реале пока нет возможности протестить), что с помощью двух этих утилит возможно совершенно безболезненно запустить кассетные программы и игры от MC-1502 на Поиске. Сначала декодируя файлы из WAV в CAS, а затем с помощью CAS2WAV преобразую в Поисковый формат.

BYTEMAN 8th May 2013 18:46

было бы неплохо придумать нечто подобное для МК-88 ранных ревизий (у неё присутствует магнитофонный вход). Пробовал прогружать WAV'ы от поиска (где-то проскакивали) - не кушает ни в какую... После пилота выдаёт ошибку... Наверное надо будет ПЗУшку дизассемблировать и разбираться как там загрузка происходит :(

---------- Post added at 16:46 ---------- Previous post was at 16:45 ----------

про МК-88 немного есть здесь: http://zxbyte.ru/mk88.htm

Tronix 8th May 2013 20:12

Quote:

Originally Posted by BYTEMAN (Post 599476)
было бы неплохо придумать нечто подобное для МК-88 ранных ревизий (у неё присутствует магнитофонный вход).

Хотя бы одну кассетную запись именно от МК-88 было бы неплохо иметь...

---------- Post added at 19:12 ---------- Previous post was at 18:53 ----------

А может кстати оно хочет формат от МС-1502, то есть перепутаны местами размер и тип файла... Скоро добавлю в CAS2WAV тоже ключ /mc

BYTEMAN 8th May 2013 20:21

Quote:

Originally Posted by Tronix (Post 599493)
Хотя бы одну кассетную запись именно от МК-88 было бы неплохо иметь...

увы ничего нет :(

Tronix 8th May 2013 21:04

Quote:

Originally Posted by BYTEMAN (Post 599504)
увы ничего нет :(

А сделать? Я просто с машиной совсем не знаком, но вроде васик для нее есть, что если ему дать команду SAVE и далее по описалову... Честно говоря прошивку дизасмить и копаться просто влом. Тем более, что реала нет и вряд-ли когда появится, раз я вообще первый раз в жизни о ней слышу..

DrPass 8th May 2013 22:09

Quote:

Originally Posted by BYTEMAN (Post 599476)
было бы неплохо придумать нечто подобное для МК-88 ранных ревизий (у неё присутствует магнитофонный вход). Пробовал прогружать WAV'ы от поиска (где-то проскакивали) - не кушает ни в какую... После пилота выдаёт ошибку... Наверное надо будет ПЗУшку дизассемблировать и разбираться как там загрузка происходит
[/COLOR]про МК-88 немного есть здесь: http://zxbyte.ru/mk88.htm

По схеме ясно, что все реализовано также программно, т.е. действительно или исходники искать, или дизассемблировать.
P.S. А компьютер забавный - эти черти всунули в коробочку полноценную ХТшку, с нормальным аппаратным видео, с контроллером DMA... Интересно, сколько ж оно стоило в этом самом 1988 году?

shattered 8th May 2013 23:58

Как самолет? :)

SoftCat 9th May 2013 02:42

Quote:

Originally Posted by Tronix (Post 598961)
В то время, как MC-1502 размер сдвинул сразу за именем, а один байт типа - я не знаю юзает или нет. Но по сути он и не важен. Вот его заголовок:
PHP Code:

1 байт magic 0xA5
8 байт 
имя файла
2 байта 
размер
1 байт 
тип (???)
2 байта сегмент
2 байта 
смещение 

Может банальная ошибка, когда биос писали. Потому как бейсиковские файлы от MC-1502 придерживаются все-таки стандартного заголовка PCjr (и поэтому для декодирования бейсиковых файлов от MC-1502 не нужно указывать ключ /mc)

Tronix, у Вас некорректно описан формат заголовка МС1502.
Кассетный заголовок в МС1502 имеет длину 17 байт, как и в Поиске. Назначения полей те же, что и в Поиске с небольшими отличиями:
Байт 09 Тип файла: все типы Поиска + 02 - .C (COM с нулевого смещения) - файл, 08 - .E (EXE) - файл;
Байт 0A-0B Длина: ВНИМАНИЕ!!! ДЛЯ ТИПОВ .C (02) И .E (08) ЭТО ЗНАЧЕНИЕ НУЖНО УМНОЖИТЬ НА 100h = 256!!! ТО ЕСТЬ ДЛИНА УКАЗАНА В БЛОКАХ!!! ДЛЯ ВСЕХ ОСТАЛЬНЫХ ТИПОВ УМНОЖАТЬ НА 100h НЕ НАДО!!!

DrPass 9th May 2013 02:57

Quote:

Originally Posted by shattered (Post 599568)
Как самолет? :)

Ну, что-то сравнимое. На самолет может и нет, а на "Жигули" или даже "Ниву" вполне выглядит.


All times are GMT +4. The time now is 04:55.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.