GIF viewer for ZX.
ZXNet эхоконференция «real.speccy»
От Alexandr Tkachev → Кому All 13.10.2002
Здравствуй, Valerij !
Воскресенье 13 Октября 2002 в 19:29:00, Valerij Kozhevnikoff => All:
VK> GIF image viewer 1.0b 256x192 B&W
VK> (c) Jason 2002
VK> Жду пожеланий и багрепортов.
Отличная и очень нужная программа, частенько попадаются схемки различные
в этом формате, а посмотреть и нечем, теперь благодаря тебе жизнь станет
немного полегче СПАСИБО... Из пожеланий, ну естественно поддержка верхней
памяти и возможность вырезать нужный кусок... Из багов да вроде усе ок
разве что некоторые гифы показывать не хочет, но это наверно как раз те
которые ты упоминал.
Alexandr.
От Valerij Kozhevnikoff → Кому All 15.10.2002
AT> Отличная и очень нужная программа, частенько попадаются схемки различные
AT> в этом формате, а посмотреть и нечем, теперь благодаря тебе жизнь станет
AT> немного полегче СПАСИБО... Из пожеланий, ну естественно поддержка верхней
AT> памяти и возможность вырезать нужный кусок... Из багов да вроде усе ок
AT> разве что некоторые гифы показывать не хочет, но это наверно как раз те
AT> которые ты упоминал.
Там есть только один серьезный баг. Количество доступной нижней памяти
определяется с ошибкой в 260*6=1560 байт. Если широкие картинки смотреть -
строчный буфер на дисковый кэш наползет. Вот как бывает если лишний JR
закомментировать...
1.1b лишена этого недостатка.
Сейчас буду версию под 512х192 тестить...
Работает! Интерлейсный 512х384! Люди, запомните этот день - 15 октября 2002
года! При стартовом адресе проги = 30700 в голом (удалены из памяти все
резиденты и драйвер на 64 символа) Исдосе версии 3.5, памяти под строчный буфер
7460 байт, а этого достаточно для картинок шириной в 1800 точек! Схему XTR
модема только что смотрел, а это 1084х784 точки, и всего 4472 байта было
занято!
Экранами щелкаю каждое прерывание. Ключик /g+ щас сделаю, чтобы гигаскрин
включать.
* Оригинал написан в REAL.SPECCY
* также послано в ZX.SPECTRUM
* также послано в ZXNET.SOFT
WBR, Jason.
/*e-mail: jason2000(собака страшная)yandex.ru ICQ: 62235830*/
/np:/ *silence*
От Alexandr Tkachev → Кому All 19.10.2002
VK> Там есть только один серьезный баг. Количество доступной нижней памяти
VK> определяется с ошибкой в 260*6=1560 байт.
VK> 1.1b лишена этого недостатка.
И где она ? Уже постилась ? Или еше в процессе ?
VK> Работает! Интерлейсный 512х384!
VK> Экранами щелкаю каждое прерывание. Ключик /g+ щас сделаю, чтобы гигаскрин
VK> включать.
Как гигаскрин на скорпе реализовать, порт #eff7 в наличии имеется так-же
512*192
что еще паять надо ? схемку если можно.
Кстати хотел спросить ты как то хотел dosx переделать для работы совместно с
пкп i8259, как дела продвигаются ? или забросил?
Alexandr.
От Kirill Frolov → Кому All 19.10.2002
VK>> гигаскрин включать.
AT> Как гигаскрин на скорпе реализовать, порт #eff7 в наличии имеется
AT> так-же 512*192 что еще паять надо ? схемку если можно.
Hе нужно. Гигаскрин не имеет смысла. Реализуется программным путём
(переключение экранов через каждые 224 такта).
От Valerij Kozhevnikoff → Кому All 20.10.2002
VK>> гигаскрин включать.
AT> Как гигаскрин на скорпе реализовать, порт #eff7 в наличии имеется так-же
AT> 512*192 что еще паять надо ? схемку если можно.
Схемку, как я это сделал на Скорпе я потерял.
Сейчас восстановлю, глядя на плату.
Для Пентагона вот оно.
_······------====== Стеклорез мониторный ======------······_
GIGASCREEN!
Я тут много дем пеpесмотpел.
Во многих экpанами моpгают,чтобы цветов побольше получить.
И тут я подумал.
-А почему-бы это не сделать аппаpатно.
И сделал да еще и методом интеpлейза,тоесть,моpгание
изобpажения пеpкpатилось.
И бит 4 в поpте #EFF7 свободный,на него и повесил.
А вот и схема для PENTAGONа.
bit 3 #7ffd
SCR1──────────────────┐ 2┌──┬──┬──┐4
_____ 1┌─┬──┬─┐5 └──────┤A1│MX│Y1├─────INTELOUTSIDE
RESET ────┤R│TT│Q├───────┐ 3│ │ │ │
2│ │ │_│6 │ ┌──┤B1│ │ │
D4 ───────┤D│ │Q0─x │ │ 1├──┤D3│ │
___ 3│ │D1│ │ └───┼──┤AB│ │ │
SEL ──────┤C│ │ │ │15│__│ │ │
4│ │ │ │ ┌──┼──┤OE│ │ │
+5V <────┤S│ │ │ ─┴─ │ └──┴──┴──┘
└─┴──┴─┘ ┌───┐ │
3н D14 ────────────────┤=1 │ │
15600 Hz │ ├─┘
13┌─┬──┬─┐9 ┌┤D2 │
+5V <─────┤R│TT│Q├─x │└───┘
12│ │ │_│8 │
┌──┤D│ │Q0─o─┘ 25 Hz
КСИ │11│ │D1│ │ │
10н D51 ─┼──┤C│ │ │ │
│10│ │ │ │ │
+5V <──┼──┤S│ │ │ │
│ └─┴──┴─┘ │
└───────────┘
Микрухи.
--------
D1-1533 ТМ2
D2-1533 ЛП5
D3-1533 КП11
Пояснения к схеме.
------------------
Сигнал SEL это сигнал выборки порта #EFF7.
10н D62 нужно отрезать от платы.
Сигнал INTELOUTSIDE подать туда,куда шла 10н D62.
Теперь можно позагружать демы которые мигали экранами
и насладиться еффектом в полной мере.
TO> Такой вопрос, а как это все к Профи прицепить?
Разъясняю:
1) 10н D62 Это выход с поpта #7FFD сигнала включения втоpого
экpана (на Пpофи он называется POLE_SCR).
2) 3н D14 Это стpочная частота.
3) 10н D51 Это кадpовый импульс.
___
4) Если у вас выбоpка поpта #EFF7 не собpана то сигнал SEL
вам пидется сфоpмиpовать самим.
Hадеюсь,знаете как выбpать поpт #EFF7.
_······------====== Стеклорез мониторный ======------······_
А вот так сделано у меня, на зеленом Скорпионе. Порт #EFF7 собран на ТМ9.
Кстати, не помню чего я там намудрил с дешифрацией, но получилось на корпус
меньше, чем в известной схеме, и никаких кондюков не надо.
Hадо отрезать сигнал, шедший на 3н DD17.
bit 3 #7FFD 2┌──┬──┬──┐4
15н DD46 ─────────────────────────┤A1│MX│Y1├───── 3н DD17
SCR 3│ │ │ │ (сюда шел SCR)
┌──┤B1│ │ │
bit 4 #EFF7 │ 1├──┤D1│ │
──────────────────────┼──┤AB│ │ │
│15│__│ │ │
┌──┼──┤OE│ │ │
─┴─ │ └──┴──┴──┘
┌───┐ │
3н DD5 ───────────┤=1 │ │
15600 Hz │ ├──────┘
┌────┤D2 │
3н DD7 ──────┘ └───┘
25 Hz
D1 - 1533 КП11
D2 - 1533 ЛП5
3н DD5 это строчная частота, по схеме сигнал V0.
3н DD7 нигде не использована.
bit 4 - GIGASCREEN.
Аппаратный интерлейс.
Как известно, Спек имеет два экрана, и в каждом из них по 192
строки. Цикл работы интерлейса занимает два кадра. В первом на
экран выводятся четные строки из нулевого экрана и нечетные из
первого, во втором -- нечетные из нулевого и четные из первого.
Эффект схож с тем, когда каждое прерывание переключают экран, но
без явно выраженного мерцания.
Кста, этот бит можно юзать совместно с 0-м или 1-м, интерлейсу
побоку сколько цветов или точек на экране.
_······------====== Стеклорез мониторный ======------······_
Восстановил схему глядя на плату. Если не заработает - пиши.
AT> Кстати хотел спросить ты как то хотел dosx переделать для работы совместно
AT> с пкп i8259, как дела продвигаются ? или забросил?
Забросил. Выяснил, что это можно сделать и интерес пропал. Кондратьев когда-то
ошибся в том, что пытался заставить все это работать в IM2, что невозможно
из-за различных циклов подтверждения прерывания у 8259 и Z80 в этом режиме. В
IM0 надо было делать. 8259 просто подсовывает на шину опкод CALL xxxx, где xxxx
определяется при его программировании... Дока есть на русском, 15 кб zip.
От Valerij Kozhevnikoff → Кому All 20.10.2002
От Valerij Kozhevnikoff → Кому All 20.10.2002
KF> Hе нужно. Гигаскрин не имеет смысла. Реализуется программным путём
KF> (переключение экранов через каждые 224 такта).
Hакойхер? При скролле изображения надо 24 Кб перекинуть из верхних банок вниз
и потом в 5-ю и 7-ю банки. Пока проц эти 24 Кб лопатит, кто будет экраны каждые
224 такта переключать?
Сейчас при выключенном гигаскрине его функции исполняет ксорилка 3-го бита
7FFD на прерываниях... Экран мерцает. Мерцание лечится так:
GIGASCR_KEY
EXX
INC HL
INC HL
LD A,"+"
CP (HL)
RET NZ
LD HL,EXT_SW1+1
SET 4,(HL) ;включить
LD HL,EXT_SW2+1
RES 3,(HL) ;экранами не махать
LD HL,EXT_SW3+1
RES 3,(HL)
RET
Три градации яркости на точку: белая, серая, черная...
От Alexandr Tkachev → Кому All 20.10.2002
VK> Забросил. Выяснил, что это можно сделать и интерес пропал. Кондратьев
VK> когда-то ошибся в том, что пытался заставить все это работать в IM2, что
VK> невозможно из-за различных циклов подтверждения прерывания у 8259 и Z80 в
VK> этом режиме. В IM0 надо было делать. 8259 просто подсовывает на шину опкод
VK> CALL xxxx, где xxxx определяется при его программировании... Дока есть на
VK> русском, 15 кб zip.
Доку если можешь в мыло кинь, а вообще у меня оно заработало в IM2, правда
не так как в описании (описание у меня есть но поверхностное), там написано
(грубо говоря) что размещение таблицы векторов зависит от слова инициализации
ICW2, но на практике оказалось что содержимое ICW2 ни как не влияет на это,
путем метода научного тыка выяснил что в цикле подтверждения прерывания
от 8259 на шине всегда #BF не зависимо от того какого уровня пришло пре-
рывание, в общем основываясь на этом собрал я dosx сейчас тестирую пока
все нормально.
Alexandr.
От Valerij Kozhevnikoff → Кому All 21.10.2002
К О М А H Д H Ы Е С Л О В А И H И Ц И А Л И З А Ц И И ( ICW )
Введение
Если команда выдана с A0=0 и D4=1, она
интерпретируется как командное слово инициализации 1 (ICW1).
ICW1 начинает последовательность инициализации, во время
которой автоматически происходит следующее:
a. Фронт цепи чувствительности сбрасывается, это означает,
что после инициализации, чтобы произошло прерывание, на
входе запроса на прерывание должен произойти переход в
направлении снизу вверх.
b. Регистр масок прерывания очищается.
c. Входу IR7 назначается приоритет 7.
d. Адрес для режима ведомого устанавливается в 7.
e. Режим специальных масок сбрасывается, а чтение состояния
устанавливается на IRR.
f. Если IC4=0, то все функции, выбраннуе в ICW4
устанавливаются в нуль. (небуферный режим~, нет АвтоEOI,
система MCS-80/85)
ПРИМЕЧАHИЕ: Ведущий/ведомый в ICW4 используется только в
буферном режиме.
Командные слова инициализации 1 и 2 (ICW1 и ICW2):
┌A0─┬D7─┬D6─┬D5─┬D4─┬─D3─┬D2─┬─D1─┬D0─┐
ICW1:│ 0 │A7 │A6 │A5 │ 1 │LTIM│ADI│SNGL│IC4│
└───┴─┬─┴───┴─┬─┴───┴──┬─┴─┬─┴──┬─┴─┬─┘ /0 - не требуется
│ │ │ │ │ │ ICW4
└───┬───┘ │ │ │ └──< 1 - требуется ICW4
│ │ │ │ /0 - каскадный режим
│ │ │ └──────< 1 - одиночный 8259A
│ │ │ / интервал адреса
│ │ │ / вызова
│ │ └─────────< 0 - интервал 8
│ │ \1 - интервал 4
│ │ /0 - режим реагирования
│ │ / по уровню
│ └──────────────< 1 - режим реагирования
│ \ по фронту
└────────────────────────────< A7-A5 адреса вектора
\ прерываний
\ (только в режиме
MCS-80/85)
┌A0┬─D7─┬─D6─┬─D5─┬─D4─┬─D3─┬D2─┬D1┬D0┐
ICW2:│ 1│A15/│A14/│A13/│A12/│A11/│A10│A9│A8│
│ │ /T7│ /T6│ /T5│ /T4│ /T3│ │ │ │
└──┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴─┬─┴─┬┴─┬┘
│ │ │ │ │ │ │ │
└────┴────┴────┴────┴───┴───┴──┴──┐
│
┌─────────────────────────────────────────┘
│ ┌────────────────────────────────
│ │A15-A8 адреса вектора прерываний
└────┤(в режиме MCS-80/85)
│T7-T3 адреса вектора прерываний
└ (в режиме 8086/8088)
A5-A15:
Адрес страницы старта рутины обслуживания. В
системе MCS-80/85 восемь уровней запроса будут
генерироватьобращения к восьми ячейкам равномерно
распределенных в памяти. Они могут быть
запрограммированы с интервалом либо 4, либо 8 ячеек
памяти, следовательно 8 рутин займут страницу из 32
или 64 байт, соответственно.
Формат адреса длиной в два байта (A0-A15). Когда
интервал рутин равен 4 А0-А4 автоматически
вставляются 8259A, а А5-А15 программируются извне.
Когда интервал рутин равен 8 А0-А5 автоматически
вставляются 8259A, а А6-А15 программируются извне.
8-байтный интервал установлен для совместимости с
существующим матобеспечением, а 4-байтный интервал
наилучший для компактной таблицы переходов.
В системе iAPX A15-A11 вставляются в 5 самых значащих
битов векторного байта, а 8259A устанавливает три
младших значащих бита в соответствии с уровнем
прерывания. A10-A5 игнорируются, а ADI (адресный
интервал) ни на что не влияет.
LTIM:
Если LTIM=1, то 8259A оперирует в режиме прерывания
по уровню. Логика детекции по фронту будет подавлена.
ADI:
Адресный интервал вызова - ADI=1, то интервал 4,
ADI=0 интервал 8.
SNGL:
Одиночный. Означает, что 8259A единственный в
системе. Если SNGL=1, ICW3 не должно выдаваться.
IC4:
Если этот бит установлен, будет ожидаться ICW4. Если
ICW4 не нужно, установите IC4=0.
Командное слово инициализации 3 (ICW3):
ICW3 ( режим ведущего )
┌A0┬D7┬D6┬D5┬D4┬D3┬D2┬D1┬D0┐
│ 1│S7│S6│S5│S4│S3│S2│S1│S0│
└──┴┬─┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘ /1 - на вход IR подключен
│ │ │ │ │ │ │ │ / ведомый 8259A
└───┴──┴──┴──┴──┴──┴──┴┤ 0 - вход IR без ведомого
\ 8259A
\
ICW3 ( режим ведомого )
┌A0┬D7┬D6┬D5┬D4┬D3┬─D2┬─D1┬─D0┐
│ │ │ │ │ │ │ │ │ │ идентификатор ведомого
│ │ │ │ │ │ │ │ │ │ ( равен соответствующему
│ 1│ 0│ 0│ 0│ 0│ 0│ID2│ID1│ID0│ входу IR ведущего
│ │ │ │ │ │ │ │ │ │ 8259A )
│ │ │ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┬┴──┬┴──┬┘ ┌ 0 1 2 3 4 5 6 7 ┐
│ │ └─>│ 0 1 0 1 0 1 0 1 │
│ └─────>│ 0 0 1 1 0 0 1 1 │
└─────────>│ 0 0 0 0 1 1 1 1 │
└ ┘
Данное слово только считывается, когда в системе
несколько 8259A и используется каскадирование, в случае
которого SNGL=0. ICW3 загрузит 8-битовый регистр, в функции
которого входит
1. В режиме ведущего (когда либо SP=1, либо в буферном
режиме M/S=1 в ICW4) для каждого ведомого в системе 8259A
устанавливается "1". При работе ведущий выдает первый
байт последовательности вызыва (в системе MCS-80/85) и по
каскадным линиям разрешает соответствующему ведомому
выдать второй и третий байты (в iAPX только второй)
2. В режиме ведомого (когда либо SP=0, либо если BUF=1, а
M/S=1 в ICW4) биты 2-0 идентифицируют ведомый. Ведомый
будет сравнивать их с входными каскадными линиями и,
когда они совпадут на шину данных будут выданы второй и
третий (или только второй в iAPX 86) байты
последовательности вызова.
Командное слово инициализации 4 (ICW4):
┌A0┬D7┬D6┬D5┬─D4─┬D3─┬D2─┬─D1─┬D0─┐
ICW4:│ 1│ 0│ 0│ 0│SFNM│BUF│M/S│AEOI│мPM│
└──┴──┴──┴──┴─┬──┴─┬─┴─┬─┴──┬─┴─┬─┘ /0 - MCS-80/85
│ │ │ │ └──< 1 - 8086/8088
│ │ │ │ /0 - обычный EOI
│ │ │ └──────< 1 - автоEOI
│ ┌─┴───┴───────────
│ │ 0 X - не буферный режим
│ │ 1 0 - буферный режим ведомый
│ │ 1 1 - буферный режим ведущий
│ └────────────────
└───< 0 - нет специального полностью
\ вложенного режима
\1 - специальный полностью
вложенный режим
SFNM:
если 1, то программируется специальный полностью
вложенный режим.
BUF:
если 1, то программируется буферный режим. В буферном
режиме SP/EN становится выходом, а по M/S определяются
ведущие и ведомые.
M/S:
если в буферном режиме выбрано M/S=1, 8259A
программируется как ведщий, M/S=0 означает
программирование ведомого. M/S не имеет функции в
случае BUF=0.
AEOI:
если 1, программируется режим автоматического
завершения прерывания
мPM:
признак микропроцессора: мPM=0 устанавливает 8259A в
режим системных операций MCS-80/85, а мPM=1 в режим
iAPX 86.
От Kirill Frolov → Кому All 21.10.2002
21 Oct 02 01:10, Alexandr Tkachev wrote to Valerij Kozhevnikoff:
AT> слова инициализации ICW2, но на практике оказалось что содержимое
AT> ICW2 ни как не влияет на это, путем метода научного тыка выяснил что
AT> в цикле подтверждения прерывания от 8259 на шине всегда #BF не
Вот и у Кондратьева тоже самое было. Hи писишная команда не получается,
ни спектрумовская. Там bug где-то (в smuc) с обработкой запроса команды от
CPU.
От Alexandr Tkachev → Кому All 21.10.2002
VK> Тут такая фишка. У тебя 8259 находится в режиме 8086 (определяется 0-м
VK> битом
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
После изучения доки попробовал все варианты при любом значении
mPM,ICW2,ADI,A5-A7 ICW1 при IM2 результат тот-же ШД = #BF, при IM0
полный ступор лечится только power off, видимо такова реализация
пкп в смаке в чем можно убедится покопавшись в ППЗУ 7-ая страница.
VK> ICW4, а в этом режиме ему нужно два импульса INTA, и вектор подставится на
VK> шину только по второму.
От Alexandr Tkachev → Кому All 21.10.2002
KF> Вот и у Кондратьева тоже самое было. Hи писишная команда не получается,
KF> ни спектрумовская. Там bug где-то (в smuc) с обработкой запроса команды от
KF> CPU.
Да опять грабли, но работать все равно с пкп можно правда лишние движения
делать придется.
Alexandr.
От Valerij Kozhevnikoff → Кому All 23.10.2002
KF>> от CPU.
AT> Да опять грабли, но работать все равно с пкп можно правда лишние движения
AT> делать придется.
Это как? В твоих сорцах я лишних движений не нашел. Все красиво, на #FF висят
часы, клава и курсор, на #BF модем. Кста, открытые порты рулез. Ты бы одолжил у
кого нить модем на 33600, просто чтобы проверить какой максимальный CPS будет.
От Valerij Kozhevnikoff → Кому All 23.10.2002
AT> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AT> После изучения доки попробовал все варианты при любом значении
AT> mPM,ICW2,ADI,A5-A7 ICW1 при IM2 результат тот-же ШД = #BF, при IM0 полный
AT> ступор лечится только power off, видимо такова реализация пкп в смаке в чем
AT> можно убедится покопавшись в ППЗУ 7-ая страница.
Ага. А если оторвать 26-ю ножку ПКП и подать туда нормальный INTA? Можно
сделать на 1533ЛЛ1 или вот так:
/M1 ─── |──┬───┬───── /INTA
│ █ 1kOm
/IORQ ─── |──┘ │
─┴─
"монтажное ИЛИ"
Диоды - КД522.
Имхо, альтера пропускает на ПКП только первый INTA, тот выдает опкод CALL,
Z80 выдает второй INTA и на этом все останавливается. Или не так? Hаверное не
так.
Скорее всего, при разработке SMUC было забито на IM0, из-за того, что
кадровые прерывания отменить нельзя, а при IM0 обработчик будет всегда по
адресу #0038. В IM2 по хорошему не получалось, поэтому был сделан некий
эмулятор 8086, который к каждому INTA от Z80 добавляет второй, дабы вектор на
шину выдавался.
Hо мне непонятно - почему всегда #BF? Посмотри на схему, видно, что шины
данных 8259 и Z80 соединены только через буфер на АП6, значит этот #BF из него
самого и приходит. Откуда он его берет?
Кстати, даже в IM0 можно сделать по хорошему. Программируешь часики, чтобы
они 50 раз в секунду генерировали прерывание (в SMUC это IRQ0), на это
прерывание вешаешь клаву и прочее, а на все время работы с модемом (когда
поднят флаг INT в системном регистре SMUC) держишь внизу банку с TRDOS. У нее
по адресу #38 простая затычка из EI:RET. И модемные порты как на ладони. Как
только модемный буфер заполнился - ставишь порт в паузу, снимаешь флаг INT,
отписываешь буфер на диск, и по новой его заполняешь...
От Valerij Kozhevnikoff → Кому All 21.11.2002
VK> Лень. 1.1. будет без него, там и так сделано очень дофига. В 1.2 сделаю.
Более менее утряс сабж.
Дискбуфер оставил пока 1 сектор. Hа дискетных компутерах будет притормаживать.
Желателен винт или рамдиск.
Что есть сейчас.
1. Работает в IS-DOS Chic и в классике.
2. Памяти понимает до 4 мегов (256 страниц). Драйвера есть пока только до 1М.
3. Умеет отгружать .scr c экрана. Версия под 512х192 экран выгружает
монохромный непакованный .pcx 512х384. PCX упаковщик есть, но на плохо
сжимающихся картинках поглючивает... Поэтому пока без него.
4. Помимо этого, версия под расширенный экран умеет выводить картинку на
принтер (если драйвер установлен).
5. Hу и Gigascreen поддержан.
Печаталку/сохранялку легко можно отключить в исходнике, поэтому спрошу сейчас:
они нужны? Ибо памяти мне жалко...
Сейчас сяду дописывать мануал и складывать все в архив. Hа днях полетит в эху.
Лицензия будет GPL.