Привет, Всем!
Давно еще 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 <igorx@igorx.com>
-------------
Саша, привет :-)
Я тут немного посчитал.
частота квантования 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