Speccy - наш выбор!  
ZXPRESS
ZXTUNES
Virtual TR-DOS
World of Spectrum
ZX Spectrum Old Demos •

Go Back   Speccy - наш выбор! > ZX Spectrum Software > Программирование

Reply
 
Thread Tools Display Modes
Old 15th March 2009, 04:24   #1
FishBone Crew
 
breeze's Avatar
 
Join Date: 11th February 2005
Location: 【RB】
Posts: 3,534
Thanks: 742
Thanked 740 Times in 389 Posts
breeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to behold
Exclamation Рисуем на BORDER

ммм... обсмотрелся я тут темы про «Вспоминаем демки с эффектом на бордюре», и решил тряхнуть стариной прикинул немного кода и решил вывести статическую картинку на border, но слегка удивился: вот если скажем делать простой горизонтальный эффект (вся линия одним цветом), то как бы всё мило и красиво... а вот если скажем сделать цветные вертикальные полосы, то края будут как бы на пару пикселей колбаситься туда сюда, и это уже далеко не красиво пробовал данные выводить в порт разными способами и просто последовательностью (по старинке):

Code:
        ld    a,1
        out    (254),a
        ld    a,2
        out    (254),a
        ld    a,3
        out    (254),a
        ld    a,4
        out    (254),a
        ld    a,5
        out    (254),a
        ld    a,6
        out    (254),a
        ld    a,7
        out    (254),a
        ld    a,0
        out    (254),a
и типо модным способом через OUTI

Code:
        ld    hl,data
        ld    bc,#00fe
        outi
        outi
        outi
        outi        
        outi
        outi
        outi
        outi        

data        db    1,2,3,4,5,6,7,0
результат абсолютно одинаков

Посему интересует такой вопрос, это так всегда было ? тоесть на динамических эффектах этого просто не заметно, а на статической картинке всё глюки, как на ладони, или же есть какой-то финт ушами который я не знаю ?
breeze is offline   Reply With Quote
Old 15th March 2009, 04:52   #2
Master
 
GM BIT's Avatar
 
Join Date: 27th November 2008
Location: Красноярск
Posts: 737
Thanks: 406
Thanked 231 Times in 145 Posts
GM BIT is a jewel in the roughGM BIT is a jewel in the roughGM BIT is a jewel in the rough
Default

Мне этот вопрос также не давал покоя. psndcj мне часть разъяснил

GM
Стабилизация эффектов на бордюре.
Если сделать
ORG 25000
EI
LD C,254
LD H,0
LD L,7
L1 HALT
LD DE,2000 : маленько задержим
L2 DEC DE
LD A,D
OR E
JR C,L2
OUT (C),L
OUT (C),H
LD A,127
IN A ,(254)
RRA
JR C,L1
RET
Почему эта полосочка на бодюре не стоит на месте а дергается, может IM 2 или как? Еще жмешь на клаву что-то меняется.

psndcj
потому что используется стандартный обработчик прерываний из ПЗУ - а там и кнопки опрашиваются и еще чтото делается... надо задавать табличку для своего обработчика и включать IM 2 типа так

di
ld hl,imtab:ld a,h,i,a
ld a,low int_jump
ld (hl),a:inc l:jr nz,$-2
inc h:ld (hl),a
ld l,h:ld (hl),#c3 //код команды JP #xxxx
ld de,ТВОЙ_ОБРАБОТЧИК
ld (hl),e:inc hl:ld (hl),d
im 2:ei
imtab - табличка 257 байт с ровного адреса (#xx00), inter - джампер на обработчик (младший и старший байты равны) - к примеру в наших демах используется #be00 и #bfbf соответственно.
а и важно - чтобы работало везде - надо ставить в памяти в пределах #8000-#bfff

GM
А IM 2 шагает сразу по INT или с задержкой?

psndcj
когда приходит прерывания процессор читает из адреса I*256+#ff (но на самом деле младший байт может плавать на многих клонах, для этого и делается табличка 257 байт) - и переходит на этот адрес. при этом выполняется предыдущая команда до конца - поэтому даже если если процесор выполнял HALT - наш обработчик будет работать сначала фрейма +0.3 такта... это как-то можно устранить программно - но тут уж я не помощник - помню в ZX-Ревю каком-то было полное описание работы бордюрных и мультиколорных эффектов.

GM
При включеном IM 2 (в обработчике RET) после halt на следующей команде эмулятор выдает от 19 до 22 тактов, сейчас пытаюсь устранить, тоже в ступоре.
GM BIT is offline   Reply With Quote
Old 15th March 2009, 05:07   #3
Master
 
GM BIT's Avatar
 
Join Date: 27th November 2008
Location: Красноярск
Posts: 737
Thanks: 406
Thanked 231 Times in 145 Posts
GM BIT is a jewel in the roughGM BIT is a jewel in the roughGM BIT is a jewel in the rough
Default

Все, что я пока успел напробывать.
Там два файла в формате STORM.
BO - твердо стоящее изображение на бордюре.
BO1 - начало эффекта шторы (не доделано)
Attached Files
File Type: rar Border.rar (414 Bytes, 169 views)
GM BIT is offline   Reply With Quote
Old 15th March 2009, 08:57   #4
Banned
 
psndcj's Avatar
 
Join Date: 22nd February 2005
Location: triebkraft
Posts: 712
Thanks: 126
Thanked 33 Times in 27 Posts
psndcj will become famous soon enoughpsndcj will become famous soon enough
Default

в принципе уже писал - но еще раз =) дерганье на пару пикселов происходит из-за того, что когда делается HALT при наступлении прерывания процессор завершает обработку этой команды, а она делается 4 такта. ну то есть мы не знаем сколько тактов в начале фрейма у нас будет занято - 0,1,2,3... типа так (немного косноязычно, и может неправильно в терминологии, но смысл таков).

на фирменных машинах (а может только на 48х?) если HALT выполняется во время построения экрана (когда луч идет по основному экрану), то прерывание начинается всегда точно. а вот на наших клонах этот фокус не прокатывает =(

есть вариант - написать цикл длительностью 71680 тактов (под Пентагон) - тогда дергаться ничего не будет =) для статики вполне пойдет.

Last edited by psndcj; 15th March 2009 at 09:00.
psndcj is offline   Reply With Quote
Old 15th March 2009, 09:56   #5
Master
 
GM BIT's Avatar
 
Join Date: 27th November 2008
Location: Красноярск
Posts: 737
Thanks: 406
Thanked 231 Times in 145 Posts
GM BIT is a jewel in the roughGM BIT is a jewel in the roughGM BIT is a jewel in the rough
Default

В ZX Ревю 4-5 за 96г. есть что-то связанное с убиранием 0-3 такта.
GM BIT is offline   Reply With Quote
Old 15th March 2009, 13:05   #6
Member
 
Activator's Avatar
 
Join Date: 25th January 2005
Location: Харьков
Posts: 117
Thanks: 18
Thanked 28 Times in 14 Posts
Activator will become famous soon enough
Default

Quote:
Originally Posted by GM BIT View Post
В ZX Ревю 4-5 за 96г. есть что-то связанное с убиранием 0-3 такта.
Цитата с той статьи: ".....Правда у FILTER'а есть недостаток - он долго работает (несколько прерываний). Таким образом, с его помощью возможна только первоначальная синхронизация, а когда кадры пропускать нельзя, Вам придется выкручиваться без него." Так что если для бордер-эффекта используется комп типичный Пентагону - то в этом случае потребуется оптимизация кода так чтобы процессорного времени он занимал кратное 4-м тактам.
Activator is offline   Reply With Quote
Old 15th March 2009, 12:30   #7
FishBone Crew
 
breeze's Avatar
 
Join Date: 11th February 2005
Location: 【RB】
Posts: 3,534
Thanks: 742
Thanked 740 Times in 389 Posts
breeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to beholdbreeze is a splendid one to behold
Thumbs up

не историю про IM2 я знаю (забыл упомянуть что именно так я и рисую), а вот с HALT теперь понятно

Добавлено через 1 минуту
Quote:
Originally Posted by GM BIT View Post
Все, что я пока успел напробывать.
Спасибо посмотрю!

Last edited by breeze; 15th March 2009 at 12:32. Reason: Добавлено сообщение
breeze is offline   Reply With Quote
Old 15th March 2009, 16:06   #8
Activist
 
Join Date: 11th April 2006
Location: Novosibirsk
Posts: 383
Thanks: 10
Thanked 63 Times in 44 Posts
ram_scan will become famous soon enough
Default

В каком-то ленточном мегалоадере от Players Premier была вертикальная зебра на бордюре в случае сбоя чтения.

Стояла колом и не дергалась на всем на чем только можно. Какая конкретно игруха хоть тресни не вспомню, но их не так много было. Можно подсмотреть там как они выкрутились.
ram_scan is offline   Reply With Quote
Old 15th March 2009, 17:13   #9
Guru
 
Join Date: 25th January 2005
Location: Miass, Chelyabinsk region
Posts: 4,044
Thanks: 630
Thanked 892 Times in 627 Posts
psb is a splendid one to beholdpsb is a splendid one to beholdpsb is a splendid one to beholdpsb is a splendid one to beholdpsb is a splendid one to beholdpsb is a splendid one to beholdpsb is a splendid one to beholdpsb is a splendid one to behold
Default

Quote:
Originally Posted by psndcj View Post
есть вариант - написать цикл длительностью 71680 тактов (под Пентагон) - тогда дергаться ничего не будет =) для статики вполне пойдет.
это через чур уж... вот как правильно:

Quote:
Originally Posted by Activator View Post
оптимизация кода так чтобы процессорного времени он занимал кратное 4-м тактам.
__________________
wbw, psb.
psb is offline   Reply With Quote
Old 15th March 2009, 23:16   #10
Guru
 
VNN_KCS's Avatar
 
Join Date: 11th October 2007
Location: Донецкая обл. г.Енакиево
Posts: 2,318
Thanks: 2,773
Thanked 795 Times in 467 Posts
VNN_KCS is a splendid one to beholdVNN_KCS is a splendid one to beholdVNN_KCS is a splendid one to beholdVNN_KCS is a splendid one to beholdVNN_KCS is a splendid one to beholdVNN_KCS is a splendid one to beholdVNN_KCS is a splendid one to behold
Default

Если пускаете в работу скроллер, индикаторы, плейер музыки и пр., нужно эти подпрограммы доработать так, чтоб они в любое время при работе занимали одно и то-же количество времени(такты проца). Тогда ничего не будет дёргаться.
А если будет то сделайте следующее:
ld hl,0
ld de,0
ld bc,10;это значение будете подбирать
ldir
Я лично использовал, в своё время, именно это для устранения дёрганья.
Сначала опрос клавы на O - P (меньш - больше), а когда подбирал, опрос клавы удалял.
VNN_KCS is offline   Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +4. The time now is 21:03.


Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Map Яндекс.Метрика