-
На всех фотках, насколько я могу видеть, красная полоса кончается на один пиксель позже за риской 5.
Они не совпадают потому, что это разные процессы. Серая: выбор индекса цвета бордюра, он же адрес записи в ОЗУ палитры. Розовая: это код, записанный в ОЗУ палитры по этому адресу процессором и считанный видеоадаптером. Как это все разруливается в реале я не знаю, это самое неудачное место в схеме Вектора. Из-за отсуствия арбитража при записи приходилось делать несколько out ₱0c на некоторых моделях.
- - - Добавлено - - -
На всех фотках, насколько я могу видеть, красная полоса кончается на один пиксель позже за риской 5.
Они не совпадают потому, что это разные процессы. Серая: выбор индекса цвета бордюра, он же адрес записи в ОЗУ палитры. Розовая: это код, записанный в ОЗУ палитры по этому адресу процессором, и считанный видеоадаптером. Как это все разруливается в реале я не знаю, это самое неудачное место в схеме Вектора. Из-за отсуствия арбитража при записи приходилось делать несколько out ₱0c на некоторых моделях.
-
svofski,
я не могу понять как записывается серый цвет. Вижу запись индекса бордюра 1 и 0. Вижу запись фиолетового цвета C7h. А где запись серого?
- - - Добавлено - - -
Поправьте меня если ошибаюсь, но судя по схеме записанный индекс бордюра появляется на экране лишь через 8 точек, поскольку индекс записывается в в сдвиговые регистры и двигается так же как информационная часть экрана.
Именно так у меня реализовано.
-
Saar, серый цвет это и есть бордюр. 1 серый, 0 черный.
-
svofski,
а фиолетовый - это какой индекс тогда?
-
Нулевой.
Код:
...серость...
xra a ;4
out 2 ;12 бордюр = 0
ora c ;4
nop nop nop
mvi a,$c7 ;8
out $0c ;12 палитра[бордюр] = ¤c7
...фиолетовость...
-
я пытаюсь проанализировать ситуацию и понять где может скрываться проблема. Раз общий цикл строки сохраняется, то процессор тут не причем.
svofski, ответь, плиз, конкретно на 2 вопроса:
1) переход с черного на фиолетовый и обратно - это запись куда?
2) переход с черного на серый и обратно - это запись куда?
А то в коде много мусорных команд - смысл теряется.
-
С черного на фиолетовый и с фиолетового на черный -- это запись только в 0x0c. $c7 == фиолетовый, $00 == черный.
С черного на серый и с серого на черный -- это запись только в 0x02. 1 == серый, 0 == черный.
Я все-таки приведу код в более полном виде:
Код:
globalloop:
ei
hlt
lxi b, 40
wait1:
;;;; ------ здесь начинается серая линия -----
; вывод 1 в регистр индекса бордюра
mvi a,1 ;8 <---- если здесь заменить 1 на 0, серых полос не будет вообще
out 2 ;12
[... команды задержки ...]
; вывод 0 в регистр индекса бордюра
xra a ;4 (ivagor, кстати, тут всегда 0 и так ;) )
out 2 ;12
[... команды задержки ...]
; вывод $c7 в ОЗУ палитры
mvi a,$c7 ;8 <---- если здесь заменить $c7 на 0, фиолетовых полос не будет вообще
out $0c ;12
[... команды задержки ...]
xra a ;4
out $0c ;12
; повторить
ora c ;4
jnz wait1 ;12
jmp globalloop
-
svofski,
bord.rom у меня четко выглядит как на оригинале. Там только индекс переключается.
А вот bord2.rom на фиолетовых полосках косячит - что означает что проблема в записи в регистр палитры.
Тут я немного озадачен. Понятно, если бы у меня фиолетовые полосы были сдвинуты влево - я бы добавил задержку (ну там, тормознутость РУ2 и т.д.). Но у меня они смещены вправо. Каких либо задержек на регистре палитры у меня нет... и черт его знает что делать, как исправлять..
-
Читер вроде меня сдвинул бы момент прихода прерывания пораньше, а потом бы добавил задержку на запись в бордюр
-
Я согласен с Арамисом. Бессмыслено состязаться кто кого переглючит, когда твой соперник -- построенная на гонках в пышащей канифолью TTL-логике схема из восьмидесятых, а у тебя только чахленькая ПЛИСина с ядром на 1.2в.