PDA

Просмотр полной версии : В общем-то про линию



Destr
24.04.2019, 12:50
"Святой отец, они сделали меня грешником!" (копирихт) кино "Код Да Винчи" (слабенькая экранизация одного из оргазмов Дена Брауна, вот уж у кого нашим-бы лунонавтам поучится...)

Итак, Метод средней точки (http://zxpress.ru/article.php?id=11766) оказался очень производительным (на те времена оказывается), насколько-же неприменим в чистом первозданном виде, это и сбило меня с толку на нехилых 10 лет, просил помощи на форуме но так внятно и не объяснил НИКТО, хотя пытались, у меня не хватило подготовки понять.
Статья в Повере (http://zxpress.ru/article.php?id=8042) - выдержала кучу перепечаток, но всё-таки нашлась та самая дема (у ААА на сайте) которая и пролила свет - о чём там бредят, ибо код почти не рабочий приведён, пришлось тоже восстанавливать...
Но тоже не то... Барахло...
Наконец-то научился вращать "сразу всю вселенную" (ну аллюзия на заявленое "Основная суть данного метода состоит в том, что вращается не каждая точка в отдельности, а сразу целая плоскость")
Очень хочется надеятся что не знал я потому-что форумчане тоже не знали, или почему молчали?
Ладно, сейчас интересней линия, на данный момент 0 октант рисуется матрицей описаной в том-же Spectrum Expert #01 (http://zxpress.ru/article.php?id=11746), самый что ни на есть Брезенхем-Хорн, но только со стеком, ибо скорость сравнима вполне (с заявленым методом) а объёмы в разы меньше, но только в 0 и 3 октантах.



;[ октант 0
;кв 0 bc=line_start, de=line_end
ld (l_end+1),sp
; установка ловушки (по X конца)
quad0 ld sp,jp_q0:ld l,e,h,0:add hl,hl:add hl,sp:ld sp,hl
pop hl,hl:ld (trap+1),hl:ld hl,trap:push hl

; установка точки входа (по X начала)
ld sp,jp_q0:ld l,c,h,0:add hl,hl:add hl,sp:ld sp,hl

ld a,d:sub b:ld d,a ; дельта Y
ld a,e:sub c:ld e,a ; X

LD L,B,H,high DOT_TAB,A,(HL):INC H
LD b,(HL):INC H:LD L,C
ADD A,(HL):LD l,A ;:INC H:LD A,(DE):XOR (HL):LD (DE),A
ld h,b
ld a,e:srl a
ld b,7 ; это чтоб сэкономить на and после inc h
ret ; переход к отрисовке первой точки

q0_p7 set 7,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p6 set 6,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p5 set 5,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p4 set 4,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p3 set 3,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p2 set 2,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p1 set 1,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p0 set 0,(hl):inc l:sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret

trap ld hl,0:push hl
l_end ld sp,0:ret

jp_q0 ; стек для ретов, октант 0, сюда надо правильно войти и правильно поставить ловушку
dup 32
dw q0_p7, q0_p6, q0_p5, q0_p4, q0_p3, q0_p2, q0_p1, q0_p0
edup
;]


Как бы сделать так-же для вертикального перемещения? (для 1 и 2 октантов)

Shiny
24.04.2019, 15:44
Если копаешься в демах, то посмотри на код в Quantum gardening Crack Intro (https://zxaaa.net/view_demo.php?id=2656) и Paranoia Megademo (https://zxaaa.net/view_demo.php?id=2981)
Рисование на экране сожрет массу времени - переходы по линиям и очистка экрана, удобнее использовать буфер, рисовать в нем и стирать после вывода на экран. И на сладкое (http://www.maxcoderz.org/forum/viewtopic.php?f=5&t=1940)

Destr
24.04.2019, 16:54
NEO, братка, при таком подходе исчезает необходимость что-либо считать, спек этого не умеет (но чтоб осознать этот факт - потребовались труды-усилья Инфоркома, newart, и даже KSA)
Алоний-кодер - самый наш лучший астрофизик (ну спек-математик, ладно поясню) - глубокоуважаемый и почитаемый авторитет почему-то заинтересовался моим подходом, что делает мою работу осмысленой и не намерен прерывать, но спек оказался тем электроном который "Ибо он неисчерпаем!" (с) ВИЛ (а так-же примнкнувшие к этому Шепиловы...)
А математика оказалась куда как проще чем 1+0
Восхищён и давай подумаем как это правильно прикрутить, ну тест-модель спека очень даже подходит!
(тут где-то был SamStyle - очень грамотный спец в этой области, давайте ребята обучатся, чтоб ALKO не плодил такой ереси, раз умеем и знаем как можно сделать грамотней и аккуратней...)

- - - Добавлено - - -

Спасибо, Шин, ты остался коньюктурщиком, ты наша база знаний, ты всё делаешь как надо, спасибо (нет под твоей авой кнопки "Поблагодарить" - Почему? ХЗ)

- - - Добавлено - - -

Интересен код, да, в "Программа исследования неверных подходов" - очень показателтьно, да, хорошо Спасибо ребятам чтоб мы так не делали, не считали в "в лоб" (http://www.maxcoderz.org/forum/viewtopic.php?f=5&t=1940)

- - - Добавлено - - -

Любая метка, пусть даже временный .loop - вообще неприемлема!
(и это ни разу не значит что если надо сделать GO TO - оно будет сделано...)

- - - Добавлено - - -

Конечно, функциональщики...!!!! (https://pikabu.ru/story/progeryi_2512137)

Shiny
24.04.2019, 17:37
а с поворотом будет самое веселое

Lethargeek
24.04.2019, 19:48
во-1, нафига еще один самостоятельный тред про линию? их уже как минимум было два:
https://zx-pk.ru/threads/11661-o-risovanii-pryamykh.html
https://zx-pk.ru/threads/5905-line(x1-y1-x2-y2).html

во-2, цель была какая? размеры, скорость? и какие результаты В ЦИФРАХ, а не словами про "сравнимое" что-то с чем-то

Destr
25.04.2019, 03:02
во-1, нафига еще один самостоятельный тред про линию? их уже как минимум было два:
https://zx-pk.ru/threads/11661-o-ris...-pryamykh.html
https://zx-pk.ru/threads/5905-line(x1-y1-x2-y2).html
во-2, цель была какая? размеры, скорость? и какие результаты В ЦИФРАХ, а не словами про "сравнимое" что-то с чем-то

Сделать одним тредом мне отказали, ибо у нас тут не база знаний а просто трёп оказывается, а цель - во фрейм (всё-таки 3D мир, всё достижимо вполне кроме врагов, спрайты не уложить в честный фрейм, ну всё-равно спрайт, у которого пиксель разворачивается в размер экрана - ну никак не отобразить вовремя, разные люди решали это разными хитростями, я просто решил что такое ВООБЩЕ отрисовывать не нужно, но об этом потом)
Цифры-размеры-скорость?
Для простоты берём устройство Z80 и ориентируемся под его функционал, вполне хватит...

- - - Добавлено - - -


а с поворотом будет самое веселое
Не будет, оказалось что при разрядности в 8 бит - все повороты (а так-же пересечения, клиппирования и проецирования) прекрасно предпросчитываются, больше не надо боятся таблички размерностью в килобайт, это очень немного оказывается :)

Sayman
25.04.2019, 03:18
Destr, ты всё пытаешься 3д рисовать линиями? ты Вольфа хочешь или дум линиями?

Destr
25.04.2019, 04:26
Destr, ты всё пытаешься 3д рисовать линиями? ты Вольфа хочешь или дум линиями?
Дум (не такой (https://vtrd.in/)), а другой, по мотивам (http://zxpress.ru/article.php?id=10028) (но ни-разу не по картинке, которая там в деме)
Только точки прекрасно и шустро клиппируются
("Святой отец, они сделали меня математиком!")

- - - Добавлено - - -

Вообще фишка линии приведёной - прыжки по стеку (из ret состоящие кусочки эти, и заранее сформированый стек, кстати была идея рисовать объект по заранее просчитаному стеку, ну чтоб в конечном виде свелось всё к классическому LD HL,#NNNN:PUSH HL, но оказалось что проще вообще хранить все состояния спек-экрана, массив мерностью в #1800, без атрибутов если, и вовремя подпихивать картинку пользователю, который там жмёт кнопки и не догадывается даже что вся математика давно кончилась и идёт просто видеоигра, интерактивная).
Конечно никаких объёмов памяти-диска-hdd или стриммера на такое не хватит, но у нас не слишком-то большое число комбинаций (6144 байта - это конечное и вполне исчислимое, не число Грэма (http://lurkmore.to/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D0%93%D1%80%D1%8D% D0%BC%D0%B0), слава Аллаху)
И оказалось что 64 - вполне себе руль, тот самый ZX-константа, но вообще рулит 128, в такой блок можно упаковать что угодно, вот извлечь порой проблема, да :)
Вот с вертикальным шагом по экрану плоховато, да...

- - - Добавлено - - -

Блин, спалил все секреты игроделов, а демо-мейкеры теперь мне плюнут в рожу...

- - - Добавлено - - -

А вообще в 128кб-модели любой код сводится просто к куче OUT
Ну вот так и лежит в памяти OUT адрес, байт...
Так и оказывается работает любой процессор...

Чёрт, вместо обменивания идеями мой пост превратился в статью из научно-популярного издания...

Не, речь о другом - как шагать по-вертикали в условиях адресного пространства отображаемой видеопамяти ZX-совместимых платформ?

Почему вопрос возник снова?
Программируя PLC достославной фирмы Siemens (Step7, WinCC, TIA_Portal и примнкнувший к ним InTouch) - столкнулся с проблемой отрисовки линии.
Распотрошив всё и вся оборудование на лабораторном столе обнаружил генетическое сходство (ну да, прям как спектрум!) - значит решение всех проблем лежит на инженерном уровне...
Так, задача ясна, быстренько прокачиваемся до инженера, изучаем математику, физику, чуток химии (паять ведь придётся, и немало!)...
И общаемся с форумчанами, они это уже проходили...

Все эти усилия только для одного - очень хочется поиграть ещё раз в тот 3D-шутер на спеке, который увидел однажды во сне, в 1997 году, векторный, пока ещё без атрибутов...

Shiny
25.04.2019, 12:12
Не будет, оказалось что при разрядности в 8 бит - все повороты (а так-же пересечения, клиппирования и проецирования) прекрасно предпросчитываются, больше не надо боятся таблички размерностью в килобайт, это очень немного оказывается

я в Disney MD извращался по-другому, места не хватало. Интересен этот тред (https://stardot.org.uk/forums/viewtopic.php?t=13576)

Destr
25.04.2019, 12:18
Да, Шини, кнопка "Спасибо" появилась
(я до сих пор не понимаю - у меня бравзер лажит из-за накатов Java или дёрнули-таки движок на вашей стороне)

Lethargeek
25.04.2019, 13:21
Сделать одним тредом мне отказали, ибо у нас тут не база знаний а просто трёп оказывается,
ага, многое оказывается трёпом, если не читают старые темы
"база знаний" всё-таки не "свалка велосипедов"


а цель - во фрейм
ЧТО "во фрейм"? сколько и каких объектов, куда рисуем? в теневой экран или в буфер каких размеров?
между прочим, одна только лишь очистка неактивного экрана сожрёт полфрейма


Цифры-размеры-скорость?
Для простоты берём устройство Z80 и ориентируемся под его функционал, вполне хватит...
лирика какая-то ни о чём
первое, что надо делать - это считать

- - - Добавлено - - -

а по поводу кода, вот здесь вижу лишние три команды, зачем эти переброски между регистрами?

:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:
когда можно просто в b декрементить счётчик от 8 до 0 или инкрементить от f8 до 0
потом ниже тоже, может быть, получится сократить

Shiny
25.04.2019, 15:17
короче, интересно будет глянуть, когда кодерский энурез прекратится.

NEO SPECTRUMAN
25.04.2019, 17:27
между прочим, одна только лишь очистка неактивного экрана сожрёт полфрейма
interlace наше фсе!
освобождает кучу тактов
и делает нам motion blur на 2-3 фрейма
дешево и сердито


а так в некоторых случаях
может оказаться быстрей стирать неактивный экран
примерно теми же процедурами что и для отрисовки линий
по тем же координатам
(и оно быстрей чем рисовать тк не надо ставить отдельные биты а тупо затираем сразу целыми байтами)

Shiny
25.04.2019, 17:32
был какой-то гифтец, в котором нашу процедуру линий стырили, так ребята стирали летающий объект, вычисляя адрес экрана и высоту линий. Картинка была убогой немношк.

Lethargeek
25.04.2019, 18:09
interlace наше фсе!
линии тоже сразу интерлейсные рисовать отдельными процедурами?
потому что если нет, то буфер чистить надо полностью всё равно
а если да, то мелкие объекты могут исчезать и мигать
cloaking device ёптыть))

NEO SPECTRUMAN
25.04.2019, 21:56
то буфер чистить надо полностью всё равно
чистить каждую вторую или каждую третью строку
каждый кадр смещать начало с которого чистить
в итоге 2 3 кадра на экране будут виднется следы от предыдущих кадров оно же хвосты

рисовать так же

экономия только на времени очистки буфера

- - - Добавлено - - -

Так же это работает и без буфера
можно быстро стирать некоторые горизонтальные полосы на экране
а потом чо нить рисовать

- - - Добавлено - - -


а если да, то мелкие объекты могут исчезать и мигать
с какого кстате
с буфером ничего не будет исчезать

Lethargeek
25.04.2019, 22:21
с какого кстате
с такого, что длинные участки лежачих линий при движении могут несколько фреймов кряду не попасть в рисуемые сканлайны, если рисовать интерлейсом
а если "рисовать так же" в смысле "как обычно" - ***** получится, особенно когда фреймрейт будет падать при большом кол-ве объектов (а падать будет)
...хотя тут пока вообще непонятно, что имеет автор в виду под "фреймовостью"

NEO SPECTRUMAN
25.04.2019, 22:22
а если да, то мелкие объекты могут исчезать и мигать
у меня в chip8 мумуляторе
интерлейс вообще выполняет роль noflic-а
пушо програмизды и даже разработчики chip8
конкретно постарались
чтоб все мерцало непадетски...

то есть даже на оборот

хотя тут интерлейс уже при выводе на экран
но смысла это не меняет

- - - Добавлено - - -


с такого, что длинные участки лежачих линий при движении могут несколько фреймов кряду не попасть в рисуемые сканлайны, если рисовать интерлейсом
рисуем все время
ничего не пропуская
только стираем каждую вторую строчку
и чередуем

Lethargeek
25.04.2019, 22:23
интерлейс при выводе (буфера) - совсем не то, что при очистке и отрисовке

NEO SPECTRUMAN
25.04.2019, 22:36
а если "рисовать так же" в смысле "как обычно" - ***** получится,
получатся хвосты\следы
и менее дерганное изображение

- - - Добавлено - - -


интерлейс при выводе (буфера) - совсем не то, что при очистке и отрисовке
нет под рукой примера...

- - - Добавлено - - -


интерлейс при выводе (буфера) - совсем не то, что при очистке и отрисовке
с горизонтальными линиями можот случится такой артефакт
если линия дрыгается каждый кадр вверх вниз
в таком режиме она будет ВНЕЗАПНО двойной толщины

- - - Добавлено - - -


с такого, что длинные участки лежачих линий при движении могут несколько фреймов кряду не попасть в рисуемые сканлайны, если рисовать интерлейсом
кстате
менял в elite рисовалку линий
на такую которая игнорит содержимое экрана и тупо сразу пишет байт
(в итоге в одном байте экрана 8х1 оказывался всего один пиксель)
и что примечательно
изображение было вполне узнаваемым
хотя горизонтальные линии несколько растворились
да и не мигало ничего
все плавно исчезало
плавно появлялось
с близка была хорошая(относительно) детализация

пример не нахожу

Lethargeek
25.04.2019, 22:47
получатся хвосты\следы
и менее дерганное изображение
то есть "менее дёрганное" *****


нет под рукой примера...
это что, вопрос или утверждение? и какого именно нет примера?


с горизонтальными линиями можот случится такой артефакт
если линия дрыгается каждый кадр вверх вниз
в таком режиме она будет ВНЕЗАПНО двойной толщины
это именно при чересстрочной отрисовке может происходить, и точно так же даже при обычном движении
а вот в элите переброска буфера чересстрочная, но там это делается затем, чтобы сечение лучом замаскировать
которое и случается не всегда, и становится заметно только при попадании на долгий биперный звук


изображение было вполне узнаваемым
хе, тут уже сама формулировка нам говорит, что нужно знать заранее, на что смотришь))

NEO SPECTRUMAN
25.04.2019, 22:50
то есть "менее дёрганное" *****
Значет эффект на любителя
меня устраивает
во многих демках встречается...
...тоже не могу щас перечислить

Destr
26.04.2019, 00:03
ЧТО "во фрейм"? сколько и каких объектов, куда рисуем? в теневой экран или в буфер каких размеров?
Никаких буферов, никаких теневых экранов, всё напрямую в видео-память, щёлкаем только #7FFD ну и черезстрочно (нафига рисовать одно и то-же постоянно, если 90% времени картинка статична, хоть пользователю и кажется что он бежит с нехилой скоростью по коридору, отстреливая монстров?)
Кстати дешевле (быстрей) получается отрисовать весь кадр снова, но только RES n,(HL) (с теми-же входными данными, которые помним предпросчитаны, чем чистить всякими там POP HL:LD (HL),A)


когда можно просто в b декрементить счётчик от 8 до 0 или инкрементить от f8 до 0
потом ниже тоже, может быть, получится сократить
В октантах 1 и 2 так и было сделано, но стало почему-то ещё медленней


ЧТО "во фрейм"? сколько и каких объектов, куда рисуем? в теневой экран или в буфер каких размеров?
между прочим, одна только лишь очистка неактивного экрана сожрёт полфрейма
256х192 (фулскрин спека, атрибуты к чёрту, только битовая матрица)

Lethargeek
26.04.2019, 11:55
никаких теневых экранов ... щёлкаем только #7FFD
взаимоисключающие параграфы


(нафига рисовать одно и то-же постоянно, если 90% времени картинка статична,
потому что так не будет в честном трыдэ, а тем более при беге "с нехилой скоростью"


Кстати дешевле (быстрей) получается отрисовать весь кадр снова, но только RES n,(HL) (с теми-же входными данными, которые помним предпросчитаны,
"дешевле (быстрей) получается" это СКОЛЬКО? как ты СЧИТАЛ?


чем чистить всякими там POP HL:LD (HL),A)
шташташта? чистят буфер просто цепочкой push (6 кб - за ~34 тысячи тактов)
за то же время отрисовкой ты сотрёшь (оптимистично) около 600 пикселей
что всего-то навсего приблизительно один кораблик вблизи в элите


В октантах 1 и 2 так и было сделано, но стало почему-то ещё медленней
даже не могу представить, как, УБРАВ несколько команд, сделать медленней :v2_wacko:
и при чём тут, спрашивается, октанты, когда нужен просто счётчик сканлайнов
для которого без разницы, где считать

Destr
26.04.2019, 12:26
взаимоисключающие параграфы
Та не, под теневым экраном я понимаю фрагмент ОЗУ который выбрасывается (вручную) в видеопамять, систему 128кб для простоты называю экран 5 и 7, ну это уже аппаратный финт и конечно отношение к нему другое, простите мой французкий (всё-таки настоящего образования у меня нет, вот и пришлось выработать собственную терминологию, чтоб хоть как-то структуризировать собственные представления)


потому что так не будет в честном трыдэ, а тем более при беге "с нехилой скоростью"
Вообще-то конечно будет, только совсем не чесное трыде, конечно не по зубам спеку ни фонг ни рейтресинг, но слава богу этого и не требуется, достаточно шустренько намечать линиями основные штрихи, остальное доделает мозг пользователя, он мощней на порядки, вот и пусть рисует картинку, приём в общем-то старый, первые наскальные рисунки работают по такому-же приципу будоража океан нашего воображения и заставляя оживать далёкие образы


"дешевле (быстрей) получается" это СКОЛЬКО? как ты СЧИТАЛ?
Полного протокола не могу дать, ибо потратил очень много времени, бумаги и электричества, для простоты скажу - мог-бы управится и в ТРИ раза быстрей (ну примерно за год, против потраченых 3.4) но не было бы полной уверенности (перепроверял себя несколько раз, пробовал разные варианты - в подсчёте опирался на систему контроля эмуля, Unreal, он пишет сколько тактов съедается в цикле, для проверки пересчитывал вручную, по справочной системе И.Рощина, HelpZ80)


шташташта? чистят буфер просто цепочкой push (6 кб - за ~34 тысячи тактов)
за то же время отрисовкой ты сотрёшь (оптимистично) около 600 пикселей
что всего-то навсего приблизительно один кораблик вблизи в элите
Потому и подумалось - а начерта что-то вообще чистить, если надо снова отрисовать почти то-же самое?
Ну повернулся кораблик чуток, блин, всё что-ли снова, очищаем экран, выводим?
Уж больно затратно, это всё мелькнёт на 1/50 секунды всего-то...


даже не могу представить, как, УБРАВ несколько команд, сделать медленней
и при чём тут, спрашивается, октанты, когда нужен просто счётчик сканлайнов
для которого без разницы, где считать
В процессе экспериментов было установлено что даже УБРАВ команду и вроде-бы СОКРАТИВ процесс - можно вдруг обнаружить что стало медленней. Например jp с,nnnn хорошо ветвляет в 0 и 3 октантах, и очень отвратительно в 1 и 2, убрав его из ветвлений можно ускорить отрисовку по тем самым ret, а вот вертикально не даёт разрядная сетка и сегментация скрина...
Процедура из спектрумэксперта работает шустрей, хоть и занимает объёмы больше, а средний такт на пиксель почти такой-же (58 против 60)

- - - Добавлено - - -

И это, предупреждение (я забыл сразу сказать, сорри) - приведённый код - ни разу не точка окончательная конечно, модель, собраная наспех в общем-то, меня постоянно отвлекали, так что это просто направление куда дальше надо-бы развить...

Lethargeek
26.04.2019, 14:19
Вообще-то конечно будет, только совсем не чесное трыде, конечно не по зубам спеку ни фонг ни рейтресинг, но слава богу этого и не требуется, достаточно шустренько намечать линиями основные штрихи,
какой "шустренько"? это тебе только так кажется, потому что такты не желаешь считать нормально


Полного протокола не могу дать, ибо потратил очень много времени, бумаги и электричества, для простоты скажу - мог-бы управится и в ТРИ раза быстрей (ну примерно за год, против потраченых 3.4) но не было бы полной уверенности (перепроверял себя несколько раз, пробовал разные варианты - в подсчёте опирался на систему контроля эмуля, Unreal, он пишет сколько тактов съедается в цикле, для проверки пересчитывал вручную, по справочной системе И.Рощина, HelpZ80)
ты придуриваешься? вопрос был про время отрисовки/очистки кадра


Потому и подумалось - а начерта что-то вообще чистить, если надо снова отрисовать почти то-же самое?
начерта тогда вообще рисовать трыдэ, да и вообще рисовать? пиши тексты, "будоража воображение" :v2_laugh:


Ну повернулся кораблик чуток, блин, всё что-ли снова, очищаем экран, выводим?
нет, блин, лучше, когда кораблик повернулся в одну сторону, а смещаться будет в другую!
и как радостно прицеливаться в такое!


Уж больно затратно, это всё мелькнёт на 1/50 секунды всего-то...
не мелькнёт, потому что никаких 50 fps, конечно же, не получится
вытяни хотя бы 12 минимум (у элиты на заставке - от 4)


В процессе экспериментов было установлено что даже УБРАВ команду и вроде-бы СОКРАТИВ процесс - можно вдруг обнаружить что стало медленней. Например jp с,nnnn хорошо ветвляет в 0 и 3 октантах, и очень отвратительно в 1 и 2, убрав его из ветвлений можно ускорить отрисовку по тем самым ret, а вот вертикально не даёт разрядная сетка и сегментация скрина...
бред какой-то, я тебе выделил лишние команды в конкретном коде, без "например"
и да, на плоскости - "квадранты", а не "октанты"


Процедура из спектрумэксперта работает шустрей, хоть и занимает объёмы больше, а средний такт на пиксель почти такой-же (58 против 60)
это потому что в спектрум-эксперте лишь набросок в качестве иллюстрации
для доведённой до ума, по тому же принципу развёрнутой процедуры - меньше 40 тактов
пример был в одном из тредов по ссылке выше


И это, предупреждение (я забыл сразу сказать, сорри) - приведённый код - ни разу не точка окончательная конечно, модель, собраная наспех в общем-то, меня постоянно отвлекали, так что это просто направление куда дальше надо-бы развить...
ничего и никуда ты не разовьёшь, пока не привыкнешь считать заранее настолько же естественно, как дышать

shurik-ua
26.04.2019, 14:23
вообще задумка с двумя буферами в спектруме неплохая, только не доведена до ума - нужно чтобы тот экран который уже отобразился при наступлении бордера начинал очищаться.
и тогда щёлкая битом 7ffd всё время рисуем по одним и тем же адресам

Shiny
26.04.2019, 14:46
вообще задумка с двумя буферами в спектруме неплохая, только не доведена до ума - нужно чтобы тот экран который уже отобразился при наступлении бордера начинал очищаться.
и тогда щёлкая битом 7ffd всё время рисуем по одним и тем же адресам

спасибо кэп! осталось достичь 50фпс

NEO SPECTRUMAN
26.04.2019, 15:01
спасибо кэп! осталось достичь 50фпс
без подавания 56МГц на клок процессора не обойтись

- - - Добавлено - - -


спасибо кэп! осталось достичь 50фпс
та запросто
все голишъ надо отрендерить 100 петабайт картинок со всеми положениями камеры в тридемаксе
запилить картридж метр на 2 на полотора (физические размеры)
и выводить на экран прямо с него
предварительно сконвертив все картинке в последовательность ld hl,1234 push hl...

Destr
26.04.2019, 15:14
Lethargeek, по тону беседы получается что я целиком и полностью гоню ересь, если всё-таки это так - чего ты учавствуешь в заведомой чуши?
Моё мнение остаётся пока что прежним, ты не понял даже о чем речь (целостную картину идеи не видишь пока что, что-ли...), но я не намерен вступать в ругань или ещё раз пережёвывать весь фундамент zx-программирования, я уже устал, просто по-человечески говорю что занимался разными исследованиями, чем и делюсь-советуюсь с форумчанами, раз уж у нас тут не база знаний, значит и не нужно слишком строго соблюдать протокол общения, так просто трёп туда-сюда, заодно и обмен мыслями, часто это идёт только на пользу всем, ну и ладушки, не стоит слишком уж свирепо дёргатся, всё хорошо, не ругайся.

Shiny
26.04.2019, 15:56
без подавания 56МГц на клок процессора не обойтись

- - - Добавлено - - -


та запросто
все голишъ надо отрендерить 100 петабайт картинок со всеми положениями камеры в тридемаксе
запилить картридж метр на 2 на полотора (физические размеры)
и выводить на экран прямо с него
предварительно сконвертив все картинке в последовательность ld hl,1234 push hl...

Это неспортивно

- - - Добавлено - - -


Lethargeek, по тону беседы получается что я целиком и полностью гоню ересь, если всё-таки это так - чего ты учавствуешь в заведомой чуши?

игнорируй гоажданина - не умеет он говорить и общаться путью.

Destr
26.04.2019, 16:11
игнорируй гоажданина - не умеет он говорить и общаться путью.
Да, я в курсе, спасибо бро, я просто проявляю терпимость и в общем-то понимаю его, просто такой уж у него характер, что поделать, это не мешает в общем-то, потом всё будет хорошо

Lethargeek
26.04.2019, 16:18
Lethargeek, по тону беседы получается что я целиком и полностью гоню ересь, если всё-таки это так - чего ты учавствуешь в заведомой чуши?
в чуши я как раз НЕ участвую, а напротив, понижаю концентрацию чуши в теме


Моё мнение остаётся пока что прежним, ты не понял даже о чем речь
мне понятно, что с твоим нынешним подходом к делу ничего хорошего не получится

ну, как хочешь, оставайся ССЗБ


(целостную картину идеи не видишь пока что, что-ли...)
сказал человек, который не видит, что не так с его кодом, даже после указания недостатков :v2_dizzy_facepalm:

и да, сам назвал же, тема не о "целостной картине" - она про линию


просто по-человечески говорю что занимался разными исследованиями, чем и делюсь-советуюсь с форумчанами,
ЧЕМ ты делишься? благой вестью, что ты чем-то там занимался?
знаешь, что сказал некто Менделеев насчёт "исследований"?
"Наука начинается с тех пор, как начинают измерять"
многацифар вместо многабукаф - это исследование

Destr
26.04.2019, 18:12
ЧЕМ ты делишься? благой вестью, что ты чем-то там занимался?
Рассмотри тред как некий фильтр, в общем-то я невнятно выразился конечно, но вполне достаточно чтоб можно было отсеять твёрдо-аппаратный подход (ну как у тебя) от невозможности реализации (казалось-бы, когда-то и тетрис казался ПРИНЦИПИАЛЬНО неовозможным устройством, а сейчас любой школьник который не спал на уроках физики может много интересного рассказать об устройстве электронных облаков, дырочныйх переходах и уж про теорию движения информации имеет представления)
Не бузи, дружише, я виноват, признаю, всё достаточно сумбурно описал, но кому надо - поняли в чём суть, не в кривом коде, видим-видим что модель, не переживай ты так...

- - - Добавлено - - -

Вообще в конечном счёте все недопонимания - оттого что я не АлонийКодер и не имею очень уж прокачаного опыта доносить мысли, особенно если речь о конечных числах, пробовал себя и на литературном поприще - да, не мешки ворочать, а вот все изыски которые можно измерять - как-то хуже ложатся на слова (ага, языком который одна обезъяна описывает другой где лежит вкусный банан)
Приношу извинения

Shiny
26.04.2019, 18:39
покежь, что накодил

Destr
26.04.2019, 20:01
покежь, что накодил
Не влезает в страницы, если синхронизирую - конечно покажу, но 48 не могу запихать, а одним экраном я не умею, я ведь не Алоний чтоб интерполяция и вообще всякий жуткий матан :)
На данный момент фрагмент что приведён в первом посте треда - это модель отрисовки (и она-же затирки) линии, вообще всё сыро, но суть проста - не нужно математику делать как UV-3D, тогда ещё не знали и обрадовались вычислительным мощам и кинулись реализовывать методы, которые даже OpenGL не осилит прямыми вычислениями, фишка в другом, суть треда не чтоб Летаргек скандалил, а чтоб привлеч достаточное внимание кодеров, вдумчивых и грамотных чтоб помогли мне непутю по вертикальным коордам шагать, уже не впервые я консультируюсь с форумчанами и уж конечно результаты все увидят, конечно ничем вас не поражу особенным, но кое-какие данные будут получены, для простоты можно назвать это акцией по исследованию одной из областей математики, которую мне поручили и мы все потихоньку этим занимаемся

Shiny
26.04.2019, 20:23
Не влезает в страницы, если синхронизирую - конечно покажу, но 48 не могу запихать, а одним экраном я не умею,

Я уже говорил, какой есть способ отрисовки: рисование в буфере и вывод на экран и очистка буфера. Например, Rotation (https://zxaaa.ru/view_demo.php?id=2404).

по мне это единственный способ работы с одним экраном. Тормозно? ну без мерцания и сечения лучей.

Destr
26.04.2019, 21:21
Тормозно? ну без мерцания и сечения лучей.
Я всё времы путаю аватары где коты, непонятные английские буквы и вообще мне мерещится что это "Шинни", и может быть это так и есть...
Значит 48к, значит явно TRUE-кодер
Не складывается что моими поделками заинтересовался, вроде как спектрумисты уже давно прошли ту область матана которую я только начал, я удивлён и благодарен за подсказки...

krt17
26.04.2019, 21:59
Сори кидания говняшками пропустил, возможно уже писали, с вертикальными так просто не получится. Придется шагать по горизонтали перестановкой стека. Пример писать не охота, совершенно не нравится стековая линия, да и объем подраспухнет. Все эти разложенные линии демошлак, чисто ради академического интереса и писькомерства.

Lethargeek
26.04.2019, 22:04
суть треда не чтоб Летаргек скандалил, а чтоб привлеч достаточное внимание кодеров, вдумчивых и грамотных чтоб помогли мне непутю по вертикальным коордам шагать,
:v2_dizzy_facepalm: я ж тебе именно об этом писать и начал, но ты в ответ стал растекаться мысью по "напримерам" и вещать про "целостную картину"

Destr
27.04.2019, 07:41
я ж тебе именно об этом писать и начал, но ты в ответ стал растекаться мысью по "напримерам" и вещать про "целостную картину"
Да ладно тебе, ну вот другой у меня склад мышления, нужно долго и всесторонне разжёвывать, для простоты назовём это "тормоз" и угомонимся, ничего страшного ведь не произошло, не кипятись так, всё хорошо, это тоже важно, всё идёт своим чередом :)

Bedazzle
27.04.2019, 09:41
даже не могу представить, как, УБРАВ несколько команд, сделать медленней :v2_wacko:


К примеру,



LD B, 25

loop
...
...
DJNZ loop


если убить первую команду, то работать будет, но медленней :)

Destr
27.04.2019, 12:04
Всех поздравляю с ещё одной дохлой темой, впечатления такие - что почему я не общаюсь на альт-форуме, ответ вдруг простой "даже толком не знаю где это"
Почему не узнал раньше?
Всё-таки видимо потому что я хреновый инжернер, и никудышный программист, в общем-то старался, а так и не понял - что вы тут делите?
Ладно, в принципе это всё скоро кончится, но слегка обидно ибо неясности остались - например почему мерность электрона -1 или почему Клона все так привыкли обижать, потом снова находить чтоб отхерососить снова?
Казалось бы разные вопросы, но они имеют одну общую точку соприкосновения - та группировка атомов которая сейчас (каким-то образом) сформировалась в кластеры, группы, молекулы - вдруг строчит на форум о тех вещах которые почему-то волнуют...

Lethargeek
27.04.2019, 13:02
Destr, без лишних слов, вот тебе мой подходящий найденный старый код, и делай с ним что хошь :v2_dizzy_step:


set**
sub d
ret nc
add e
inc h
inc b
ret nz
exa
ld a,l
sub $E0
ld l,a
ld a,h
sbc b
ld b,$F8
and b
ld h,a
exa
ret
b счётчик от $F8 до нуля, тактов 30/47/97 (или 30/47/94, если в освободившийся регистр c засунуть $F8 или $E0)
средневзвешенно 30/53 - что даже чуть быстрей оригинальной (но медленнее доработанной) процедуры спектрум-эксперта

- - - Добавлено - - -


если убить первую команду, то работать будет, но медленней
нееет, тогда будет не "работать", а "выполняться" :v2_tong:

Bedazzle
27.04.2019, 17:32
нееет, тогда будет не "работать", а "выполняться" :v2_tong:

хорошо, ещё пример :v2_laugh:



DI
...
EI
CALL pause
...

pause:
HALT
...
RET


Бесконечно можно смотреть на огонь, воду, и на процессор, ждущий прерывание :)

Shiny
27.04.2019, 17:38
а можно не париться и

m1: push hl:jr m1

Destr
27.04.2019, 18:07
даже sjasm знает что jr $
;)

- - - Добавлено - - -


b счётчик от $F8 до нуля, тактов 30/47/97 (или 30/47/94, если в освободившийся регистр c засунуть $F8 или $E0)
средневзвешенно 30/53 - что даже чуть быстрей оригинальной (но медленнее доработанной) процедуры спектрум-эксперта
Всё это рили кульно, но вот есть момент - вообще ВСЁ сводится должно к цепочке RET, а я вот сумел вычислить только 0 и 3 октант (про квадранты я помню, но это разбиение плоскости координат, а тут речь о спектрумовском экране, путаницы нет, ты просто пока что ещё не понял, хотя всё почти уже, бро, мы помогаем тебе всеми силами)

- - - Добавлено - - -

Особенность формата хранения данных требует чтоб всё лежало так чтоб #C9C9C9 ... 11001001 ... 11001001 11001001...............

- - - Добавлено - - -

От отца в наследство оставался осциллограф, какой-то советской модели, один из первых, не просто электронно-лучевой катод, а даже ещё примитивней, без Y-входа даже, вот с него (если шо) я и учился познавать этот мир аналогово анализа, и дискретного, ага :)

Bedazzle
27.04.2019, 18:35
а можно не париться и

m1: push hl:jr m1

Не катит, тут оно изначально нерабочее :)

Lethargeek
27.04.2019, 22:50
вообще ВСЁ сводится должно к цепочке RET,

Особенность формата хранения данных требует чтоб всё лежало так чтоб #C9C9C9
ээээ... ты "цепочкой ret" называешь явно что-то не то, какой смысл в нескольких друг за другом? :v2_wacko:

Bedazzle
27.04.2019, 23:12
ээээ... ты "цепочкой ret" называешь явно что-то не то, какой смысл в нескольких друг за другом? :v2_wacko:

Чиста пофантазирую - можно составить таблицу, где в разном количестве нопы и реты.
Прыгать по адресу в зависимости от полученного индекса.
В зависимости от адреса, по которому вызов, разная задержка получится.

Lethargeek
28.04.2019, 00:46
Чиста пофантазирую - можно составить таблицу, где в разном количестве нопы и реты.
Прыгать по адресу в зависимости от полученного индекса.
В зависимости от адреса, по которому вызов, разная задержка получится.
вообще-то если для задержки "прыгать по адресу", то достаточно кучи нопов и единственного рета в конце
а теперь осталось нафантазировать, зачем в принципе может быть нужна задержка перед рисованием линии :v2_crazy:

Bedazzle
29.04.2019, 07:02
вообще-то если для задержки "прыгать по адресу", то достаточно кучи нопов и единственного рета в конце

Это если линейное удлинение надо. А если нет, то команды с разной длительностью к примеру.
Ну или в зависимости от индекса происходит либо сразу рет, либо один или несколько нопов. Скажем, индексы, делящиеся без остатка на 2 - рет, на 3, 4, 5 - ноп/рет, остальные - ноп/ноп/рет.


а теперь осталось нафантазировать, зачем в принципе может быть нужна задержка перед рисованием линии :v2_crazy:

Нинаю :) я ж сказал, что буду фантазировать.