Принцип высокоскоростной загрузки игр с кассетного магнитофона в MSX2

Страница 1/3
| 2 | 3

By igorx

Master (160)

Аватар пользователя igorx

06-02-2009, 20:11

Привет, Всем!

Давно еще 4 с лишним года назад я придумал способ модуляции, отличный от стандартного FSK,
для высокоскоростного загрузки в MSX игр через кассетный вход.

Этот способ родился в обсуждении с Александром Ореховым, человеком давший СССР
дисковые версии Vampire Killer/Metall Gear/FireBird.

Публикую здесь письмо написаное тогда по теме,

Небольшие замечания:
Сначала на стандартной скорости 2400 загружается Loader
в котором и реализируется декодирование данной модуляции.

Который кроме этого занимается разборками с Mapper, декомпрессией,
запихиванием страниц в RAM/VRAM ну и собственно старт приложения.

Loader кроме так же должен анализировать частоту CPU и кроме того, если мы грузимся с кассеты..
(такое тоже возможно :-) ) привязываться к текущей скорости леты.
Для этого в начале записывается тон сигнал.

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

К сожалению так и не дошли руки до написания, время уходит.

В основном этот топик для Алексея Подрезова, но буду признателен любым замечаниям и мыслям.

WBR,
igorx

Fwd:
========
Date: Sun, 26 Sep 2004 15:49:47 +0400
From: Igor Vitiorets <[email protected]>
-------------
Саша, привет :-)
Я тут немного посчитал.
частота квантования CD 44100
чатоста кварца в MSX NTSC 3.58MHz - значит в один квант времени CD
укладывается примерно 81 такт Z80.

Вход кассетного интерфейса MSX имеет фильтрацию как сверху так и
снизу. Стандартные частоты 1200 низ и 4800 верх

Поэтому работать со стандартным способом модуляции и высокой частотой
затруднительно.

Мы используем наш метод кодирования, основанный на измерении длины
между переходами с 0 на 1 и обратно и получая время между переходами восстанавливаем битовую
последовательность, которая закодирована этим временем.

Формализуя то, что ты с тобой обсуждали:
модуляция должна быть следующего вида:
A -количество CD отсчетов, соответствующее 0
B -максимальная длина кодируемой последовательности в битах
C - колиество отсчетов используемое для кодирования длины одного бита

Пример: пользуемая битовая кодирующая последовательность максимальной длиной 3 бита
B=3,А равно 5, С=2
при это длительность соответствующая битовой последовательности
101 будет равна 5+5*2=15 CD отсчетов
а длительность 000 будет равно 5
111 сответственно 19

Так как мы все это применяем для ускорения загрузки игр с СД
и будем использоватья свой загрузчик для работы с модуляцией
повышенной плотности, то естественно использовать компрессию
для исходных игр. Это приведет к тому, что данные будут иметь высокую
энтропию, и благодаря этому все битовые комбинации будет иметь
примерно одинаковые статистические веса.

Это дает нам основания считать что средняя длительность битовой
последовательности длиной B равна (A+A+(2**B-1)*C)/2

При этом максимальная RAW производительности канала равна
(44100*2*B)/(A+A+(2**B-1)*C)

Ну дальше все просто
Для С=1 имеем табличку
A\B 1 2 3 4
2 17640 25200 24054 18568
----- ----- -----
3 12600 19600 20353 16800
----- ----- -----
4 9800 16036 17640 15339
----- ----- -----
5 8018 13569 15564 14112
----- -----
6 6784 11760 13926 13066
-----
5 и 6 битовое кодирование не имеет смысла из-за падения пропускной
способности канала

Я подчеркнул те схемы кодирования, которые мне нравятся.
Реально наверное самая усточивая и работающая при любых значениях
фильтров это схема A=5 B=3 C=1. Все частоты лежат еще в
приемлимых для фильтров диапазонах.
А схема A=6 B=3 C=1 должна работать просто всегда при этом реальная
скорость получается в 8.5 раз больше чем на стандартном MSX 2400Bod.

Естественно надо эксперементировать с формами записываемой волны.
Может имеет смысл писать стерео в противофазе и подавать именно два
противофазных сигнала, чтобы скомпенсировать завал АЧХ, вызванный
фильтрами.

Хочется ваших мыслей господа
и мнения ;-)

--
С уважением,
igorx

Для того, чтобы оставить комментарий, необходимо регистрация или !login

By cax

Prophet (3721)

Аватар пользователя cax

06-02-2009, 20:28

В принципе и WAVeR и MicroWAVer уже давно написаны...

By igorx

Master (160)

Аватар пользователя igorx

06-02-2009, 20:38

Станислав, а кто бы спорил.
только вот работают они на 1200-2400бод ,
А та модуляция, которую я предложил способна
давать скорости на десятичный порядок выше.

WBR, igorx

By cax

Prophet (3721)

Аватар пользователя cax

06-02-2009, 21:22

igorx, может быть я чего-то не понимаю, но если MicroWAVer загружает 128Кб за 2-3.5 минуты (в зависимости от сжимаемости данных) в отличие от встроенного в MSX загрузчика, у которого то же самое берёт от 30 минут на 1200 бод до 15 минут на 2400, то куда ещё приращивать ?

Насчёт принципа работы WAVeR-a не скажу - я не автор, но он даёт похожие скорости.
Что касается MicroWAVer-a, написанного в соавторстве с WYZ, то он использует 3 вида ускорения: сжатие данных (подобно ZIP), более высокие частоты (3650-5512) и алгоритм кодирования с использованием длины перехода, подобный выше описанному.

Кстати, использование CD, компьютерных аудиокарт и MP3-плейеров показало, что давать устойчивый, неубитый фильтрами и другими особенностями оборудования сигнал, способно далеко не всякое устройство. Из пары десятков перепробованных мной 100% надёжно работали лишь 2: т.н. "s1mp3 generic" MP3-плейер и DVD на базе чипсета MT1389.

По поводу формы волны: квадратную волну трудно без искажений закодировать в MP3 (не все описанные выше стабильные устройства принимают WAV), зато синусоида после сжатия-разжатия выглядит как новенькая.
Правда, на частоте 5512 уже резолюция не позволяет нарисовать пристойную кривую, соответственно для MP3 приходится ограничиваться 3650.

Что же касается двух противофазных сигналов - наверное, имеет смысл попробовать.
Я вряд ли скоро найду на это время, но ежели кто хочет присобачить к MicroWAVer-у и проверить - исходники лежат в одной папке рядом с дистрибутивом.

By igorx

Master (160)

Аватар пользователя igorx

07-02-2009, 10:06

3.5 минуты для 128Кб
для чисто энтропийных данных это скорость 7200бод. по методу FSK.
Если Вы посмотрите архивы всех Мегаромов то их реальная длина от 60 до 80%
от исходного размера. Т.е. реальная скорость загрузки может быть еще ниже.

Кодирование длиной перехода я в данном случае не вижу,
просто по скорости загрузки.

Стандартные фильтры в MSX 1200 и 4800 гц ,я это уже писал.
подчеркнутые схемы как раз легко проходят через эти фильтры.

Синусоида или меандр, для данной схемы не имеет никакого значения,
главное - расстояния длины волн.

А СД-Аудио в приведенном интервале частот играет любой вертак без каких либо искажений.

К сожалению просто у нас нет человекомесяца, чтобы реализовать это.
Уже 4 года нет совсем времени.

WBR,
igorx

By cax

Prophet (3721)

Аватар пользователя cax

07-02-2009, 12:11

На хорошо сжимаемых мегаромах скорость загрузки приближается к 2-2.5 минутам, и этого никаким FSK не достичь.
Впрочем, достаточно посмотреть исходники, чтобы увидеть принцип кодирования, так что спор считаю бессмысленным.

Увы, даже 3200 по FSK не всякая вертушка играет стабильно. Где-то в сети есть статья с объяснением причин искажения сигнала на большинстве CD-плейеров, с иллюстрацией для квадратной волны.

Недавно появился проект OTLA, который декларирует скорость в 12600 (и даже 19200), но я его пока не смотрел.
Демо-видео здесь: http://www.youtube.com/watch?gl=IT&hl=it&v=E-PPk3ZCimo
Демо-файл: http://personal.auna.com/casariche/otla/miner4msx_19200bps.zip
Утилиты: http://personal.auna.com/casariche/otla/otla1.htm
Тема на этом сайте: http://www.msx.org/forumtopic7864p15.html

By igorx

Master (160)

Аватар пользователя igorx

07-02-2009, 13:01

Уважаемый CAX,

FSK 1200/2400 имеют ограничения только по тракту кассетника.
Исходя же из этого тракта расчитывался входной фильтр, режущий по верху -4800Hz, чтобы избежать шумов.

Я не знаю что вы подразумеваете под вертушкой. Для меня это всегда проигрыватель LP,
Если в вашей терминологии это CD Player. То хотелось бы понимать, что Вы имели ввиду
под фразой "играет стабильно". То что ваш MSX не может загрузить данные воспроизводимые
с вашего CD Player? или что у Вас один и тот же кусок даный вашей игрушкой играется с разными уровнями
по всей длине фрагмента в зависимости от настроения соседа?
Пожалуйсте сформулируйте менее расплывчато.
Чтобы был предмет обсуждения, а не общая фраза.
Укажите "вертушки" и машинку с которыми у Вас были проблемы "стабильности"
и какие проблемы у вас были.

Для того, чтобы не быть голословным заменитие в своем MSX стандартные фильтр входной фильтр на 25KHz
И попробуйте FSK с базой 11025.

Спасибо за ссылки обязательно посмотрю.
Кстати а вы не заметили что 12600 один в один соответствует моей схеме А=3 В=1 С=1
а 19200, скорее всего на самом деле 19600, что в моей схеме А=3 В=2 С=1
И при этом именно эти схемы кодирования на мой взгляд являются наиболее приемлимыми :-)

WBR,
igorx

By cax

Prophet (3721)

Аватар пользователя cax

09-02-2009, 09:52

А СД-Аудио в приведенном интервале частот играет любой вертак без каких либо искажений.
Ранее я не использовал ни "вертак" ни "вертушка" для обозначения CD-проигрывателей, но после приведённой Вашей фразы решил, что Вам будет так понятнее.

Под "играет стабильно" следует понимать, что из десятка проверенных мной CD-плейеров - портативных, в составе стереосистем, в составе компьютеров - ни один не позволил загрузить данные со 100% надёжностью. Загрузка одного и того же аудио-файла могла прерваться в произвольном месте.
И если на стандартных скоростях алгоритмы коррекции с этим ещё как-то справляются, то на больших скоростях и без коррекции загрузка просто обрывалась с самого начала из-за десинхронизации.

Что касается замены фильтров и прочих экспериментов - как я уже писал, у меня на них нет времени.
6 лет назад - было и время и желание.

Именно поэтому я посоветовал взглянуть на проект OTLA в качестве отправной точки для совершенствования метода.

Лично меня скорость MicroWAVer вполне устраивает, и, поскольку я делал его в основном под себя, мне важнее всего такая его функция, как создание RAM-диска в RAM/VRAM с MSX-DOS и подгрузкой доп. файлов.
Если эта возможность (а также создание само-распаковывающихся BIN и COM) будет востребована, я готов помочь встроить её в любой турбо-заргузчик, будь то OTLA или что-либо ещё.


Кстати а вы не заметили что 12600 один в один соответствует моей схеме А=3 В=1 С=1
а 19200, скорее всего на самом деле 19600, что в моей схеме А=3 В=2 С=1
И при этом именно эти схемы кодирования на мой взгляд являются наиболее приемлимыми :-)

1) Great minds think alike
2) "CD Sequential Games Collection" вышла ещё в 1988

By igorx

Master (160)

Аватар пользователя igorx

09-02-2009, 17:19

Уважаемый cax,

Хотелось бы знать про загрузку с CD плэйеров на увеличенной скорости,
каким образом вы загружали данные :
стандартной процедурой из BIOS или написанным специально для этого куском кода,
который знает о том что будет вестись загрузка на другой скорости.

MicroWAVer - конечно же отличная штука.
Наверное меня бы он тоже устроил. Но меня устраивает стандартные флопики в моих MSX,
и жесткодисковый контролер, сделанный Егором Вознесенским еще 13 лет назад :-)

Тему я это завел, в надежде, что данный алгоритм окажется интересным, тому кто пишет софт :-)
Может быть даже Вам.

Насчет коллекции 33 игрушки.
Ну есть такой СД.
31 игрушка MSX1 jn 16 до 32кб
и две MSX2. Легко вмещаются на стандартных 2400 в диск.
:-)

WBR, igorx

By cax

Prophet (3721)

Аватар пользователя cax

09-02-2009, 17:42


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

Разумеется, так - а как же иначе ? Кусок кода, с выверенным кол-вом T-states, чтобы следующее чтение из порта было как раз вовремя.
Стандартная процедура нужна лишь для начальной загрузки этого самого куска.
В случае с загрузкой рамдиска и DOS, этот код запускается также из COM-программы для подгрузки файлов на диск.
(см. исходники K7.COM в дистрибутиве со сборкой MicroWAVer)

Если меряться девайсами, то я прикупил у корейцев SD/MMC Card Reader for MSX и сейчас его осваиваю Smile
После работы над кассетной загрузкой, я вместе с tnt23 осваивал сетевую карту Ямахи - см. http://msxlink.chat.ru
но сейчас и это уже далёков прошлое.

Коллекцию на CD я привёл в пример того, что этот носитель уже использовался, даже коммерчески.

За алгоритм в любом случае спасибо, но мне бы Вас 6 лет назад - вместе бы сделали что-то получше.

By igorx

Master (160)

Аватар пользователя igorx

09-02-2009, 18:09

Алексей Подрезов написал про CasLink v2.1.

.... Наряду со стандартными скоростями поддерживается скорость загрузки 3600 бод, причем работает устойчиво, проверял на Yamaha, Sony и Philips....

Поэтому мне странно читать то, что Вы пишите.


....Если меряться девайсами, ....

Сорри, это не ко мне.
просто собираю разные: MSX/Commodore/Atari/Amstrad/Sinclair/Coleco и прочие приставки.. Иногда играю, когда есть время.

Интересно получить ссылку на корейский девайс SD/MMC Card Reader for MSX

В любом случае SD карточка более прогрессивная, чем все эти бубны и танцы с кассетником.
просто цена входа другая.

WBR, igorx

Страница 1/3
| 2 | 3