Login

Subversion Repositories NedoOS

Rev

Rev 364 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

---=== общая инфа ===---

1. в недооси запускается СЕРВЕР играния аигрека.
   Сервер в смысле что он сначала ждёт коннекта на ойпи недооси и на
   определенном порту. Как соединение открылось (кто-то приконнектился),
   начинается игра того, что приходит. Как только соединение закрывается, все
   аигреки затыкаются и софт начинает ждать следующего соединения.

2. пц шлёт дамп регистров (в простейшем случае). В ответ пц получает
   синхронизацию (каждый инт от спектрума приходит пакет синхронизации) и
   одновременно -- квитанцию о том, что какой-то конкретный пакет уже проигран
   (если было требование от пц послать квитанцию)

3. Как расширить на проигрывание диги, в т.ч. совместно с 50гц музыкой -- пока
   хз.

4. Предполагается, что и пц, и спектрум шлют пакеты (группы пакетов) при помощи
   TCP_NODELAY. При этом всё равно присутствующая буферизация допустима в канале
   пц->спектрум, но недопустима в канале спектрум->пц (т.е. пц должен разгребать
   всё пришедшее сразу и без задержек, а спектрум может выгребать пакеты по 1
   штуке за инт).

5. Разбор пришедших данных, объединение их в пакеты и проч. осуществляется
   побайтно, по порядку пришедших байт. При этом следует учитывать, что граница
   пакетов протокола не соответствует границам пакетов TCP-IP.


---=== Основы протокола ===---

TCP-ПОРТ, который слушает сервер на спектруме -- 16729 (0x4159, соотвeтствует
кодам символов 'A' и 'Y')


Общий формат пакетов.
Каждый пакет начинается с байта, который определяет собственно тип пакета. Типы
и номера пакетов, которые идут в каком-то одном направлении совершенно
отличаются от типов и номеров пакетов в обратном направлении.

Направление пакета помечается как ZX>> (zx->pc) или ZX<< (zx<-pc). Тип пакета
помечается байтом в hex или кратким описанием 1 словом.


---=== Базовые пакеты ZX>> ===---

00 ZX>> HELLO

Описание:
"Приветствие", посылаемое 1 раз сразу после открытия соединения.

Формат:
+01: байт, длина последующей строки (0..255 байт)
+02.. -- строка символов указанной длины, НЕ zero-terminated.

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


01 ZX>> FRAMESYNC

Описание:
Посылается каждый frame int.

Формат:
+01..+04: счётчик в формате little-endian, каждая очередная посылка такого
пакета инкрементирует посылаемый счётчик на 1. Начальное значение счётчика не
определено.


02 ZX>> SYNCRPLY

Описание:
Посылается непосредственно после пакета 01 ZX>> , если в этом фрейме была
загрузка регистров в AY на основе пришедшего пакета ZX<< и одновременно было
требование послать квитанцию.

Формат:
+01..+04: байты, присланные в пакете ZX<< SYNCREQ.




---=== Базовые пакеты ZX<< ===---

00 ZX<< (SHUTUP)

Описание:
Выключить все источники звука и более ничего не делать. (не отменяет требование
посылки синхронизации ZX>> FRAMESYNC ).

Формат:
[[дополнительные байты отсутствуют]]

Примечание: может использоваться для (пере)синхронизации пц со спектрумом путём
посылки кол-ва нулей большего, чем размер любого другого пакета ZX<< . Для
эффективной пересинхронизации желательно, чтоб zx мог распарсить таких пакетов
несколько (в идеале -- все, что накопились либо достаточно большое число) за
один фрейм.


01 ZX<< DUMP

Описание:
проиграть в ближайший frame int данный дамп регистров в один AY/YM.

Формат:
+01..+14: байты, записываемые соответственно в регистры аигрека 0..13

Примечание: !!!ВАЖНО!!! Если в регистр 13 (последний байт в дампе) записывается
0xFF -- это означает, что в регистр 13 писать ВООБЩЕ НИЧЕГО НЕ НАДО.
Данное требование связано с тем, что запись в регистр 13 аигрека имеет побочный
эффект в виде ПЕРЕЗАПУСКА огибающей. Т.к. это не нужно делать 50 раз в секунду,
то по традиции величина FF обозначает отсутствие записи вообще.


02 ZX<< SYNCREQ

Описание:
Требование послать ZX>> SYNCRPLY после вывода в AY следующего в потоке пакета
ZX<< DUMP

Формат:
+01..+04: байты, которые неизменными следует послать в пакете ZX>> SYNCRPLY.




... пока всё ...