Воспроизведение озвученной анимации с ROM-Дисков

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

User avatar
Alikberov
Doomed
Posts: 347
Joined: 14 Oct 2019 18:10
Location: Tashkent

Рабочий вариант плеера

Post by Alikberov »

Однако, получилось!

Данный вариант проигрывателя воспроизводит ролик 64x50@10 + 2 строки (0280-02BF / 02C0-02FF) под "титул" и "статус" на каждые 10 кадров. :kruto:

Теперь буду ждать новый образ ROM-Диска по 10 кадров на страницу с выравниванием 0300-7FFF. 8)

Осталось поработать с перемоткой…
И откроем новую тему с чистого листа с презентацией клипа, не рвушего в клочья уши. :dj:
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

А чего со звуком? Надобно каждые 4 символа наверное (16 раз на строку) и может быть даже ещё один отсчет звука записать в последний символ, чтобы покрыть перенастройку стека, что между строками (т.е. всего 17 отсчётов звука в каждой строке)?

P.S. Похоже звук всё также в каждом втором символе?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Вот 10 кадров на страницу со смещением #300 в каждой странице - плеер VHS-64X50-ALIGN#0300.RKR с бегунком вроде играет (хоть и 7.2 FPS) и VHS-64X50_2@10.RKR чего-то тоже играет, но только 7.74 FPS - может статус и титул слишком много времени жрут (знакогенератор всё равно обрезанный и им толком ничего не напишешь - ну разве что прогресс-бар снизу нарисовать) и 32 отсчёта звука на строку это наверное многовато?...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

> ну разве что прогресс-бар снизу нарисовать

с прогрессбаром (архив получился на 90 кило больше):
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

В последнем плеере каждая пара символов обрабатывается вот так:

Code: Select all

	LDAX	D ; +7=7
	RLC ; +4=11
	STA	08002H ; +13=24
	ORA	A ; +4=28
	RAR ; +4=32
	MOV	B, A ; +5=37
	INR	M ; +10=47
	LDAX	D ; +7=54
	MOV	C, A ; +5=59
	INR	M ; +10=69
	PUSH	B ; +11=80
7.74 FPS это 129 мс на кадр и при 1.78 МГц и 44% ПДП оно примерно даст 128427 тактов на кадр, в котором у нас 1600 пар символов, что даст 1600*80=128000 тактов на саму картинку и 427 тактов на оверхед (0.33%) или 8 тактов на строку, хотя должно быть как минимум 20 (JNZ+LXI SP) - будем считать это ошибкой округления тормозов от ПДП. Если делать звук не отсчёт на пару символов, а отсчёт на 4 символа, то в каждой второй паре выкинется 25 тактов, т.е. 2 пары теперь дадут 55+80=135 или в среднем 67.5 тактов на каждую пару символов, что даст 67.5*1600=108000 тактов на картинку плюс всё те же 427 оверхеда (примерно), что даст 108427 тактов на кадр, что должно дать 9.18 FPS и это сильно веселее :mrgreen:

P.S. Если я доделаю свой Ethernet+RTC, то там всё будет ещё веселее т.к. WizNet предоставляет режим с автоинкрементом адреса - получается нам надо лишь данные вычитывать не заботясь о постоянном увеличении адресов, поэтому 10-тактовые INR M будут больше ненужны, а вместо 12-тактовой связки LDAX D + MOV reg,A можно задействовать 7-тактовую MOV reg,M (адрес источника теперь может быть в HL вместо DE), что даст экономию в 15 тактов на каждый символ или 30 тактов на пару, что даст 37.5 тактов или 60000 тактов на кадр, что с оверхедом (предположим, что он останется таким же) даст в пределе 16.5 FPS :o

P.P.S. Ксати можно сделать свой собственный квазидиск с автоинкрементом адреса для пущей весёлости...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Почему вариант с INTE был быстрее? Попробуем это выяснить - 1 бит звука вместо 25 тактов в случае использования INTE выполняется за:

Code: Select all

	RAL ; +4=4
	JC CPI_DI+1 ; +10=14
	EI ; +4=18
CPI_DI:
	CPI	0F3h ; +7=25 or +4=18
	ORA	A ; +4=29 or +4=22
	RAR ; +4=33 or +4=26 (avg=29.5)
Но это делалось один раз на каждые 4 пары символов или 55*4+29.5=249.5 делим на 4 и получаем примерно 62.4 такта на пару, что даст 1600*62.4=99800 на картинку плюс оверхед (предположим, что те же 427), что выльется в 9.93 FPS (а в реальности было 9.75 FPS, что близко, но чуть меньше т.к. там кадр не разворачивался - только строка). Если сделать 1 отсчёт на 4 символа, а не на 8, то это будет 55*2+29.5=139.5 делим на 2 и получаем примерно 69.8 тактов на пару, что даст 1600*69.8=111600 и при разворачивании кадра (оверхед 427) это будет 9.05 FPS, но скорость будет плавать в зависимости от наличия-отсутствия озвучки...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 347
Joined: 14 Oct 2019 18:10
Location: Tashkent

Программное перемещение видеопамяти в РК-совместимых компах

Post by Alikberov »

Мне кажется или звук стал более качественным?

Если вслушаться, напоминает ситуацию, когда эквалайзер захлёбывается и все значения зашкаливают.
Думаю, если варьировать пороговыми значениями и дать голосу солиста больший приоритет, качество станет ещё выше. :roll:

Вариант с INTE, как Вы заметили выше, на Апогее будет мерцать знакогенераторами.
Тем более, на большинстве РК звук - пьезоизлучателе. тогда как порт магнитофона позволяет играться ручками тембра на внешнем усилителе.

Апогей имеет свой знакогенератор и можно в кодере использовать более сложный эвристический подход, заменяя контурные границы на соответствующие символы псевдографики 6x4.
Там и частота кадров выше будет.
Но, под Апогей я пока не разрабатываю ничего.

Вы предлагаете ухудшить качество звука и повысить FPS?
Или это просто размышления?

Думаю, код уже граничит и балансирует на уровне "приемлемый fps с приемлемым звуком". :roll:
Т.е. не вижу большого смысла ухудшать звук ради долевого выигрыша в кадрах.

Для РК вроде уже всё замечательно и годится для презентаций или заставок к играм:
Можно делать те же рогалики с анимированными вставками, что само по себе уже уникально!
Или тот же "Морской Бой" со сценами потопления кораблей (сохранять статус игры, заполнять память кодом плеера, проигрывать, восстанавливать код игры с ROM-Диска и продолжать дальше).

Как Вы верно заметили, бит звука выводится командой RLC с целым кодом в PC0-3 - код знакоместа попадает в порт.
Если кодер видео адаптировать и подбирать символы соответствующим образом, чтобы и знакоместо не искажать, и все четыре бита в COVOX выводить, можем получить звук более мягче? :idea:

P.S.: Спасибо за участие!
На досуге займусь своим кодером видео.

P.P.S. Кстати, отключив ПДП (код 80 в ячейку B1) можно прослушать реальное звучание на полной производительности. :P
(44% времени на ПДП - не шутки! :x )
То есть, как-то особенно обработать звук - никак не получится!
ПДП диктует свои правила! :roll:
User avatar
Alikberov
Doomed
Posts: 347
Joined: 14 Oct 2019 18:10
Location: Tashkent

Программное перемещение видеопамяти в РК-совместимых компах

Post by Alikberov »

Думаю, тему можно почистить и перенести ключевые сообщения в новую тему.
Специально там не выкладывал архив ROM-Диска: Всё-таки, не я его сгенерировал. :P
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Да выкладывай что уж там - всё равно Bad Apple не нами изначально создан ;)

И плеер не забудь вписать в начало каждой страницы ;)

Да, я предлагаю попробовать чуть ухудшить звук и соответственно улучшить FPS (и убрать титул и статус - на них ПДП ведь тоже тратится, а так там было бы F1 и минус 1% от ПДП) - прогрессбар можно сделать опционально полностью программно (как было в одном из предыдущих плееров)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 347
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Alikberov »

Shaos wrote:Да выкладывай что уж там - всё равно Bad Apple не нами изначально создан ;)

Да, я предлагаю попробовать чуть ухудшить звук и соответственно улучшить FPS (и убрать титул и статус - на них ПДП ведь тоже тратится, а так там было бы F1 и минус 1% от ПДП) - прогрессбар можно сделать опционально полностью программно (как было в одном из предыдущих плееров)...
Отключив ПДП и методом тыка потратив пару часов на замедление воспроизведения потока, я в конце-концов услышал, как могло бы звучать в реальности, если бы ПДП не путался под ногами процессора.

На видео я тупо запускаю два эмулятора: Один без звука воспроизводит изображения, а второй - с отключенным ПДП параллельно проигрывает звук. Мнимый двухпроцессорный комп :lol:
То есть там чётко слышно, как могло бы звучать.

Ухудшение звука - тоже имеет свои нюансы и это не так легко сделать.
Придётся снова генерировать очередной ROM (пф-ффф) с новыми fps.
А у меня пока нормального кода для этого нет.

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

Хотя, это и сейчас можно - директивой M:
  • Ячейка 00EB содержит число PUSH'ей на заполнение строки (у меня - 32)
  • Ячейка 00ED содержит длину одной PUSH-цепочки (у меня - 13)
  • С адреса 01B8 начинается шаблон инструкций
Соответственно, сейчас у меня:

Code: Select all

        ORG     001B8H
        ;;;;;;;;;;;;;;;;;
        LDAX    D       ;  7
        RLC             ;  4
        STA     08002H  ; 13
        ORA     A       ;  4
        RAR             ;  4
        MOV     B,A     ;  5
        INR     M       ; 10
        LDAX    D       ;  7
        MOV     C,A     ;  5
        INR     M       ; 10
        PUSH    B       ; 11#80.13
Вам можно попробовать подправить:
  • Ячейка 00EB содержит число PUSH'ей на заполнение строки (запишите 16)
  • Ячейка 00ED содержит длину одной PUSH-цепочки (запишите 20)
Под код:

Code: Select all

        ORG     001B8H
        ;;;;;;;;;;;;;;;;;
        LDAX    D       ;  7
        RLC             ;  4
        STA     08002H  ; 13
        ORA     A       ;  4
        RAR             ;  4
        MOV     B,A     ;  5
        INR     M       ; 10
        LDAX    D       ;  7
        MOV     C,A     ;  5
        INR     M       ; 10
        PUSH    B       ; 11#80.13
        LDAX    D       ;  7
        MOV     B,A     ;  5
        INR     M       ; 10
        LDAX    D       ;  7
        MOV     C,A     ;  5
        INR     M       ; 10
        PUSH    B       ; 11#135.20
Должно сработать.
Но синхронизацию сорвёт, так как старшие биты уже начнут из звука попадать в атрибуты.
You do not have the required permissions to view the files attached to this post.
Last edited by Alikberov on 11 Apr 2024 11:28, edited 1 time in total.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

> Придётся снова генерировать очередной ROM (пф-ффф) с новыми fps.

У меня автоматически генерится меньше чем за минуту :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 347
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Alikberov »

Shaos wrote:Да, я предлагаю попробовать чуть ухудшить звук и соответственно улучшить FPS (и убрать титул и статус - на них ПДП ведь тоже тратится, а так там было бы F1 и минус 1% от ПДП) - прогрессбар можно сделать опционально полностью программно (как было в одном из предыдущих плееров)...
Кстати, а у Вас на "титуле" и "статусе" звук присутствует?
Там - тот же код и ожидает звук.

Мне говорили, что для качественного воспроизведения звука необходимо обеспечить равномерность циклов ПДП.
То есть, получается, нужно не убирать "титул" и "статус", а заполнить все 60 строк. :roll:

Однако, Вы - правы: Только сейчас понял, что "титул" и "статус", хоть и раз в 10 кадров отображаются, но могут вносить свои искажения в звук, если их игнорировать или учитывать.
(Ещё хорошо проверить, как будет воспроизводиться звук в режиме 78x50 строк "узкий экран", когда циклы ПДП будут равномерными - завтра проверю.)

Попробуйте ухудшить звук по скриншоту (синхронизацию сорвёт, если образ видео не адаптирован: Напоминает мятую VHS-плёнку чем-то).
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Может тогда пока откатить "презентацию", если там звук фейковый? :roll:

> Кстати, а у Вас на "титуле" и "статусе" звук присутствует?
> Там - тот же код и ожидает звук.

Нет - я не знал, что надо :(
Но всё равно оно же будет играться один раз на страницу - раз в секунду с хвостиком?
Тогда сложнее будет fps видео и samplerate звука считать - лучше бы пусть всё одинаково и равномерно...

> Мне говорили, что для качественного воспроизведения звука необходимо обеспечить равномерность циклов ПДП.

А ты длину пакета ПДП уменьшал? Можно попробовать без F1 сделать - чтобы весь экран был - без дырок, но менять только средние 64x50 (кстати можно наверное предусмотреть режим когда у каждой строки вначале идёт адрес куда её писать - тогда можно частично меняющиеся кадры передавать меньшим количеством срок)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

У меня возникла гениальная мысль! А что если не сдвигать символы туда-сюда для вытаскивания бита звука, а прямо как есть код символа сувать в #8002? т.е. младший бит кода символа будет задавать звук, что сэкономит аж 12 тактов на отсчёт! :o

Как? Может спросить любопытный читатель - а вот как: если внимательно посмотреть на таблицу соответствия пар яркостей и символов для 5-строчного варианта псевдографики РК:

Code: Select all

00: 0x20        --> #20
03: 0x04        --> #04
05: !*          --> #21
06: '*          --> #27
0C: 0x02        --> #02
0F: 0x06        --> #06
13: /*          --> #2F
14: )* >        --> #3E
15: 1* J        --> #4A
16: I* ]*       --> #5D
22: , : \       --> #5C
23: -* ^        --> #5E
26: +* ?*       --> #3F
27: T Т З       --> #7A
28: 3* Э        --> #7C
30: 0x10        --> #10
32: ( <         --> #3C
33: 0x14 "      --> #22
35: Y*          --> #59
36: 2 7*        --> #37
37: *           --> #2A
3C: 0x12        --> #12
3F: 0x16        --> #16
44: ;*          --> #3B
45: X Х У*      --> #75
46: & =* S* Д           --> #64
47: Z Л         --> #6C
48: 4 9*        --> #39
4A: Я*          --> #71
50: L           --> #4C
52: [*          --> #5B
53: %* C* С*    --> #73
55: G* U* V Ц*          --> #63
56: 6 O* О*     --> #6F
57: $ 5* 8 A* Q* W* А* Ч        --> #7E
59: Ж Ш*        --> #7B
5A: @ Щ*        --> #7D
63: Ь           --> #78
64: K* Г* К*    --> #6B
66: D Ы*        --> #79
67: H N И* Н П          --> #70
68: 0 M* Й М*           --> #6D
69: Ю           --> #60
6B: Ф           --> #66
75: E* F Е*     --> #65
76: P Б Р       --> #72
77: B R В*      --> #77
79: #*          --> #23
C0: 0x01*       --> #01
C3: 0x05*       --> #05
CC: 0x03*       --> #03
CF: 0x07*       --> #07
F0: 0x11*       --> #11
F3: 0x15*       --> #15
FC: 0x13*       --> #13
FF: 0x17*   	--> #17
то можно увидеть, что для многих пар есть символы как с нулём в самом младшем бите, так и с единицей (помечены звёздочкой), а там где альтернативного кода нет можно выбрать соседний, где оно есть - получается звуком можно управлять младшим битом (в каждом четвёртом символе), а старший бит в ЛЮБОМ символе может быть полностью отдан под возможный цвет и не потребует танцев с бубнами вокруг звуковых отсчётов, когда мы таки сделаем цветные видосики, т.е. теперь будет так:

Code: Select all

        ORG     001B8H
        ;;;;;;;;;;;;;;;;;
        LDAX    D       ;  +7=7
        STA     08002H  ; +13=20
        MOV     B,A     ;  +5=25
        INR     M       ; +10=35
        LDAX    D       ;  +7=42
        MOV     C,A     ;  +5=47
        INR     M       ; +10=57
        PUSH    B       ; +11=68
        LDAX    D       ;  +7=75
        MOV     B,A     ;  +5=80
        INR     M       ; +10=90
        LDAX    D       ;  +7=97
        MOV     C,A     ;  +5=102
        INR     M       ; +10=112
        PUSH    B       ; +11=123
123 такта на 2 пары символов или в среднем 61.5 на одну пару, что даст 1600*61.5=98400 и с оверхедом 427 выльется ровно в 10 FPS :o

P.S. На самом деле если убрать #F1 в начале кадра и #F3 в конце кадра (для равномерности тормозов) ПДП станет жрать больше чем 44% процессорного времени и FPS в итоге будет несколько меньше - наверное порядка 8.9 FPS (что даст звуковой samplerate 7120 Hz)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Вот примерно так можно сделать постпроцессинг с учётом бита звука S:

Code: Select all

                            INPUT S=0 S=1
00: 0x20                 --> #20  OK  #2F /
03: 0x04                 --> #04  OK  #2F /
05: !*                   --> #21  #3E OK
06: '*                   --> #27  #4A OK
0C: 0x02                 --> #02  OK  #33 3
0F: 0x06                 --> #06  OK  #33 3
13: /*                   --> #2F  #04 OK
14: )* >                 --> #3E  OK  #29 )
15: 1* J                 --> #4A  OK  #31 1
16: I* ]*                --> #5D  #4A OK
22: , : \                --> #5C  OK  #2D -
23: -* ^                 --> #5E  OK  #2D -
26: +* ?*                --> #3F  #54 OK
27: T Т З                --> #7A  OK  #33 3
28: 3* Э                 --> #7C  OK  #33 3
30: 0x10                 --> #10  OK  #5B [ ???
32: ( <                  --> #3C  OK  #5B [ ???
33: 0x14 "               --> #22  OK  #59 Y
35: Y*                   --> #59  #32 OK
36: 2 7*                 --> #37  #32 OK
37: *                    --> #2A  OK  #37 7
3C: 0x12                 --> #12  OK  #71 Я
3F: 0x16                 --> #16  OK  #71 Я
44: ;*                   --> #3B  #58 OK
45: X Х У*               --> #75  #58 OK
46: & =* S* Д            --> #64  OK  #53 S
47: Z Л                  --> #6C  OK  #39 9
48: 4 9*                 --> #39  #34 OK
4A: Я*                   --> #71  #34 OK
50: L                    --> #4C  OK  #5B [
52: [*                   --> #5B  #4C OK
53: %* C* С*             --> #73  #56 OK
55: G* U* V Ц*           --> #63  #56 OK
56: 6 O* О*              --> #6F  #36 OK
57: $ 5* 8 A* Q* W* А* Ч --> #7E  OK  #41
59: Ж Ш*                 --> #7B  #40 OK
5A: @ Щ*                 --> #7D  #40 OK
63: Ь                    --> #78  OK  #4B K
64: K* Г* К*             --> #6B  #78 OK
66: D Ы*                 --> #79  #44 OK
67: H N И* Н П           --> #70  OK  #69 И
68: 0 M* Й М*            --> #6D  #30 OK
69: Ю                    --> #60  OK  #4D M
6B: Ф                    --> #66  OK  #23 # ???
75: E* F Е*              --> #65  #46 OK
76: P Б Р                --> #72  OK  #77 В
77: B R В*               --> #77  #42 OK
79: #*                   --> #23  #42 OK
C0: 0x01*                --> #01  #50 OK <--- ???
C3: 0x05*                --> #05  #52 OK <--- ???
CC: 0x03*                --> #03  #52 OK <--- ???
CF: 0x07*                --> #07  #66 OK <--- ???
F0: 0x11*                --> #11  #50 OK <--- ???
F3: 0x15*                --> #15  #52 OK <--- ???
FC: 0x13*                --> #13  #16 OK <--- ???
FF: 0x17*   	          --> #17  #16 OK <--- ???
OK - оставить как есть либо заменить один код на другой код
Я тут за главного - если что шлите мыло на me собака shaos точка net