Info Guide #08
30 ноября 2005

For Coderz - CD video на ZX. Как написать плеер видео с компакт-диска.

<b>For Coderz</b> - CD video на ZX. Как написать плеер видео с компакт-диска.
        CD video на ZX
   О том, как написать плейер видео с ком─
пакт-диска, рассказывает автор того самого 
плейера, который был показан на CAFe'2003. 
К сожалению,сам плейер не сохранился. Дан─ 
ным вопросом также занимались PSB и немно─ 
жко я (Alone Coder). Лично я эксперименти─ 
ровал  только с 16(15)-цветным видео - там 
появляются довольно интересные задачи упа─ 
ковки и т.п. 

              CD video на ZX

   Для звука, естественно, нужно 2 буфера.
Естественно, данные хранятся как
[изображение][звук][изображение][звук] ... 
   Так  как  сидюки  данные одного сектора
передают  очень  быстро, то можно не ждать
готовности данных внутри сектора, а только
перед чтением.
   У меня сделано так:декрюнчится процеду─
ра  чтения одного сектора (2k), в которой,
где надо, расставлен  вывод звука (для ка─
чественного  звука  можно  ещё повставлять
NOP'ов или INC HX. У меня ещё само количе─ 
ство  тактов между выводами звука задаётся
как fixed point):
 

         LD C,E : INI
         LD C,D : INI
         LD C,E : INI
         LD C,D : INI
         ...
         [NOP/INC HX]
         EXX
         OUTI
        EXX
         
         LD C,E : INI
         LD C,D : INI
         LD C,E : INI
         LD C,D : INI
         ...
         [NOP/INC HX]
         EXX
         OUTI
        EXX
        и.т.д.

   Так как надо читать куски не кратные 2k
и не совпадающие с началом сектора (6144 -
экран и 2048 - звук не очень катит:тормоз─
но и весит много), в конце стоит JP на на─
чало, и используется часть и/или процедура
полностью (плавающий RET ).Я это оформил в
виде  процедуры, которая читает с текущего
положения в секторе нужное количество байт
и/или секторов. Её можно использовать так:
 

         LD BC,size
         LD HL,buff
        CALL read
        
   А конкретнее:
 

         LD BC,6912
         LD HL,#4000
        CALL read
         
         LD BC,1280
         LD HL,sndbuf0
        CALL read

   Ещё, так  как  надо  ожидать готовности
привода  и при  этом  выводить звук, нужна
процедура типа:

 w_snd 
         CALL w_cd
         RET Z
         NOP     ;до фига NOP'ов
         EXX
         OUTI
         EXX
         ...
        JP w_snd

   Желательно  поставить проверку на окон─
чание  буфера  (и/или  добавить нули после
буфера). Для качества звука желательно эту
процедуру сделать побольше (если количест─
во тактов между выводами звука не целое).
   Еще, если будете использовать часть эк─
рана  (спрайт) - n  знакомест в ширину (на
этом очень  много  можно сэкономить), надо
сделать  таблицу адресов для экранов и для
буферов со звуком и поменять код:
 

        POP HL  ;здесь через каждые n байт
                 ;читается новый адрес
         LD C,E : INI
         LD C,D : INI
         ...
        POP HL  ;здесь через каждые n байт
                 ;читается новый адрес
         LD C,E : INI
         LD C,D : INI
         ...
         [NOP/INC HX]
         EXX
         OUTI
        EXX

   Естественно, при таком подходе количес─
тво  байт звука на кадр должно быть кратно
n. И ещё, 2048  должно  делиться  на n без 
остатка (хотя если чуть-чуть гемора,то мо─
 жно и без этого).
   Ред.: Звука должно быть много - с запа─
сом! Дело в том,что где-то раз в 10 секто─ 
ров  ожидание  нового сектора затягивается 
на жуткий срок - более 20000 тактов.Причём 
вне  зависимости  от скорости (1x/8x/...)! 
Причины непонятны. 
   Общая структура процедуры read такая:
 

       [определяем,сколько и откуда читать]
      [вставляем 'RET']
┌─────[JP куда надо] 
│         ┌──────────────────────────┐ 
│        │/                         │ 
├────>[посылаем команду CD-ROM'у]    │ 
├────>[ожидаем готовности]           │ 
 └────>[читаем]                       │ 
           │                          │
          └──────────────────────────┘

   Можно   пользоваться   командой  чтения
группы секторов (в смысле, кол-во секторов
задавать >1 ), чтобы  не посылать  команду
каждый сектор - но далеко не всем приводам
это  нравится  (мой  DVD на это жалуется и
читать  отказывается). А с отменой текущей
команды  всё  вообще  очень  сложно - если
прервать чтение (RESET,к примеру),то потом
сложно  'достучаться'  до привода - сложно
понять, сколько нулевых команд ему надо.

Hedgehog (Александр Неганов) 



Другие статьи номера:

Inferno - Авторы журнала.

Inferno - Вступление от редактора.

Inferno - Ошибки в предыдущих номерах.

Inferno - Об оболочке.

Железо - CD-ROM - устройство и хитрости подключения.

For Coderz - CD video на ZX. Как написать плеер видео с компакт-диска.

Sofтинка - Техническое руководство по дисковой системе DISCiPLE/+D.

For Coderz - Маленькие программерские хитрости.

Математика - История решения теоремы Ферма.

Gameland - Игра Шестнашки.

Sofтинка - Описания и история изменений программы для работы с жестким диском HDDoctor v0.9.

Секреты - Секретные кнопки в разных приложениях: Wolfenstein'2004, IG#5, ACEdit, DNA OS, Wild Disk Copier.

Sofтинка - Улучшения конвертора графики в Gigascreen.

Звук - Ламповые усилители. Стерео лампочник 2х5 Вт из старых телевизоров.

Железо - Обзор кассетных проигрывателей.

Inferno - Письма в редакцию.

Gamedev - История создания игры Pang.

Gamedev - Советы при написании аркадной игры.

Реклама - Реклама от Романа Чунина.

Реклама - Реклама от Алексея Жабина.

Реклама - Реклама от В. Богдановича.

Интервью - Интервью с Николаем Родионовым, автором известных книг для ZX Spectrum

For Coderz - Вычисление тригонометрических и алгебраических функций в языках высокого уровня.

DIY - схема 16-цветного видео-режим v1.1 для пентагона.

Железо - Описание микросхемы К555ТЛ2.

For Coderz - Программирование устройства генерации звука Turbo Sound.

Sofтинка - 384x304 viewer. программа позволяющая просматривать цветные картинки, по размерам превышающие экран.

Sofтинка - Эмулятор ZX Spectrum на ZX Spectrum.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Система - Обзор новых системок: Sprite Maker v4.0, Turbo Copier v2.0, Sample Studio, Art Works 1, Burst Eyes v1.2, Excess Sample Editor v1.4.25, Excess Deluxe Paint v1.1, Graphic Station, BA v1.0, Global Commander v1.31, Quick Commander v2.3, Stall Spriter v0.1, AGA v1.0, Ultra Sonic v0.1, Universal Sprite Studio v1.0, HRUST v1.1, STORM v1.3.
FANTASY - Крутая программа Гороскоп.
Музыкальная страничка - песня Гражданской обороны.
"Святoй бизнec" - by Кyзmич или "Удвoиm cрeднee кoличecтв лaпши нa oтдeльнo взятых yшaх!".
Экстренный выпуск - подробная информация о предстоящем в Дзержинске демопати Di:Halt 1999.

В этот день...   16 сентября