Всем привет!
Снова выкладюываю обновление. Что сделано и нет, по пунктам:
1) Видеорежимов теперь два: VideoModeSecondary=0 (псевдографический) и VideoModeSecondary=2 (графический, более совместимый). Добавлен ключ ForceVGA=ON или OFF - если понадобится изменять размеры видимой области (а вместе с ними и частоту кадров), а видяха при этом "врет", будто она не совместима с VGA. Размеры изменяются при помощи ключей VideoXVisible и VideoYVisible. Всё отлично прокатывает в эмуляторе DOSBox (текущая версия 0.72), а также на некоторых реальных машинах под DOS/Windows.
2) С мультиколором дела обстоят получше, но не до конца. Пришлось подобрать ориентировочные значения ключей HorizontalRetrace и VerticalRetrace, чтобы правильно отображались пентагоновские демки. Однако эти ориентировочные значения не соответствуют тем, что должны быть.
3) Работа со снапшотами не изменилась.
4) Сделал звук, пока что вывод только на Sound Blaster, 8-bit mono. В эмуляторе DOSBox звук работает, значение ключа SB Buffer Size при этом лучше выставить поменьше - от 400 до 1000, в зависимости от быстродействия машины. Чем меньше буфер, тем более плавная эмуляция и тем более быстродействующей должна быть машина. Под Windows буфер приходится делать от 4000, иначе звук прерывистый - пока не разобрался с этим.
5) Теперь про работу под Windows. Ранее я писал, что затыкаются прерывания и ничего не работает. Оказалось, что так происходит лишь в случае, когда в системе установлен драйвер GiveIO. Он устанавливается, например, с программой Speedfan. Если же этот драйвер в вашей системе отсутствует, то, скорее всего, VZX будет работать (других противопоказаний пока не обнаружено).
К еще большему сожалению, данная неприятность распространяется на все приложения DOS, работающие с графикой. Сюда можно отнести древние игрушки Wolf3D, DOOM, Blood и прочие.
6) Формат vzx.cfg опять изменился, так что старый лучше либо перезаписать новым, либо просто удалить.
7) Случайно обнаружил, что VZX не видит файлов disk2.trd, disk3.trd и disk4.trd, вследствие чего TR-DOS видела только диск A. Исправлено.
Пока все. Если будут какие-нибудь вопросы - пишите, постараюсь ответить. Но и у меня также есть вопросы, так что возможно буду задавать их прямо здесь.
P.S. Только что заметил, что "соптимизировав" свой же собственный блок генерации AY, я его немного сломал. Убрал две строчки - и половина огибающих плюс кое-какие спецэффекты не работали :-D... Исправленные исходники выложу позже, пока же просто опишу, что и где. В файле monitor.asm найти данные строки:
Код:
; Envelope Generator
test ch, 010h
jz gas2
mov ebx, AYEnvelopePoint
movsx eax, byte ptr [ebx + 1]
add ebx, eax
mov eax, AYEnvelopeConst
add AYEnvelopeCount, eax
gas1:
movzx eax, byte ptr [ebx]
mov eax, [eax*4 + AYVolumeTable]
mov AYEnvelopePoint, ebx
mov AYEnvelopeVolum, eax
gas2:
перед меткой gas1: добавить 2 строки, чтобы получилось так:
Код:
jc gas1
mov AYEnvelopeCount, eax
gas1: