Войти
ФлеймФорумПроЭкты

Spectrum style по-современному [исследовательский проект] (16 стр)

Страницы: 115 16 17 1822 Следующая »
#225
5:41, 16 мая 2018

Alikberov

Да, прикольный трюк.


#226
5:48, 16 мая 2018

skalogryz
> т.е. конфликта атрибутов ждать не придётся?
#30
=A=L=X=
> Да, прикольный трюк.
Тeм самым я и смею вести спор, утверждая, что РЛК был для меня удобнее, чем ZX.
Так как на РЛК проделывать подобные трюки на холодном ещё процессоре было легче, чем на разогретом уже загрузкой Gens/Mons процессоре ZX.
Понимаете, не без причин же. К тому же, я здесь - единственный, кто критикует не дубовый РЛК, а ZX. Или Вам критики не нужны?
(Лишь критикуется видеопамять, как я посмотрю)

К тому же, редактор ассемблера в ZXSpin крайне неудобный и глючный:


P.S.: Кто пишет все эти эмуляторы??? O_o
«Бейсик-Микрон» РЛК был удобнее Windows-эмулятора ZX только тем, что не глючил редактором и все комбинации клавиш были интуитивно понятны для владельцев РЛК…
И я - уже выдохся: Ассемблерный листинг пишу в NotePad++, копирую в окно ассемблера ZXSpin, транслирую, запускаю, отлаживаю - и всё мышкой!
Уйма манипуляций нужна именно с окнами и мышкой.
Почему именно ZXSpin? Потому что еле с ним освоился и изучил все его, кхм, тонкости за эти недели!
Честно вот говорю - в ZXSpin - самая удобная неудобная глючная среда разработки/отладки. В том же EmuZWin - среда удобнее, но неудобно крайне глючная.

#227
6:16, 16 мая 2018

Alikberov
Очевидно пишут те, кто в РЛК не тыкались. Пиши свой.
Вообще делают проще - компилируют и собирают образ кроссассемблеором и запускают эмулятор с образом, на что уходит одна секунда запуска и работы батника.
Вообще лично я бы сделал самомодифицирующийся код с изменением значения jr $+N перед серией сдвигов.
А зеркалирование спрайтов через таблицу. Собственно, так оно и делается всегда.

#228
6:35, 16 мая 2018

Dexus
> А зеркалирование спрайтов через таблицу. Собственно, так оно и делается всегда.
Можнo и обойтись восемью «rrca + rl r2» - (8*(4 + 8) = 96) без таблицы, против «ld l,a + ld a(hl)» - (4+7 = 11) с таблицей…
> Очевидно пишут те, кто в РЛК не тыкались. Пиши свой.
Написал (кликните «Reset» и «Start») же несколько (нажмите «F4») онлайн крайне спартанских эмуляторов РЛК для «разминки мозгов»…
Где вместо кучи «switch-case» используется динамический шаблон, который можно редактировать «на горячую», меня всю таблицу инструкций в реал-тайме (кнопка «Matrix»)…
(Задаются имена регистров, таблица команд и т.п. В принципе, можно «влепить» и инструкции 6502… Ассемблер/дизассемблер так же перестроятся «на-лету»…)

P.S.: Писал «как попало»…
Видимо фанаты ZX тоже пишут так же - как попало…

#229
7:11, 16 мая 2018

Alikberov
8 rrca? Смысл? Поворот на 360 градусов. Или хотел сказать 7? А не проще ли один rlca?
Эти сдвиги делались либо таблично (для скорости, одинаковое количество тактов вне зависимости от положения) либо 4 влево/3 вправо (для чуть меньшей скорости). Но фигачить по пачке сдвигов на каждый байт - это зашквар.

#230
7:19, 16 мая 2018

Dexus
> 8 rrca? Смысл?
Кoд не изучили!
Восемь «rrca + rl r2» это -

0F   |RRCA
CB 18|RL B
0F   |RRCA
CB 18|RL B
0F   |RRCA
CB 18|RL B
0F   |RRCA
CB 18|RL B
0F   |RRCA
CB 18|RL B
0F   |RRCA
CB 18|RL B
0F   |RRCA
CB 18|RL B
0F   |RRCA
CB 18|RL B
#231
7:22, 16 мая 2018

Alikberov
Какой код? Ты сам свой код из #223 видел? Что это вообще такое?

#232
7:45, 16 мая 2018

Dexus
> Какой код? Ты сам свой код из #223 видел? Что это вообще такое?
Oн работает. Сдвигает без таблицы быстро. Там же я расчёты по тактам привёл!
(27…55 тактов моими компактными трюками против 18 тактов с дополнительной таблицей: Коэффициент - от 32% до 66%)

+ Полная версия

Или на счёт этого тоже спорить будем?

7C   |LD  A,H   ; 4 такта
07   |RLCA      ; 4 такта
ED 6A|ADC HL,HL ; 15 тактов
ED 6A|ADC HL,HL ; 15 тактов
ED 6A|ADC HL,HL ; 15 тактов
ED 6A|ADC HL,HL ; 15 тактов
7D   |LD  A,L   ; 4 такта
6C   |LD  L,H   ; 4 такта
67   |LD  H,A   ; 4 такта

#233
8:24, 16 мая 2018

Alikberov
Какая дико неоптимальная хрень... у меня просто нет слов. И опять таки - причём тут вереница rrca rl rrca rl? Где она в этом "коде"?
Спрайтом логично называть графический элемент больше 8x8 пикселей, и с произвольной маской. В тут вообще код, не имеющий никакой практической ценности (пусть он и работает).

Давай код со спрайтами 16x16 хотя бы. С произвольной маской. 64 байта. Хрен пока с зеркальностью. Количество тактов рассчитывать для худшего случая (координаты). Так и быть потрачу время на свою версию.

#234
8:41, 16 мая 2018

Dexus
> Какая дико неоптимальная хрень... у меня просто нет слов.
Думaю, она относительно оптимальна в сочетании память/такты: Не требуется таблицы (это ПЛЮС), но число тактов чуточку выше (МИНУС).
Таблица как бы есть из кучи команд сдвига, коротенькая (7 байтов против 256).

> Давай код со спрайтами 16x16 хотя бы.
Для этого нужны вставки, типа

; Сдвиг DE-пары влево на 0-15 бит
; Регистр B=0, C = n^15:
;       Сдвиг на 10 бит --- C = 5
;       Сдвиг на 13 бит --- C = 2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        LD      HL,SHIFTING     ; 10 +
        ADD     HL,BC           ; 11 +
        ADD     HL,BC           ; 11 +
        PUSH    HL              ; 11 +
        EX      DE,HL           ; 4  +
        LD      A,H             ; 4  +
        RLCA                    ; 4  +
        RET                     ; 10 = 65 тактов
SHIFTING:
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 + (при C = 2 циклический сдвиг HL на 13 бит)
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 + (при C = 5 циклический сдвиг HL на 10 бит)
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 +
        ADC     HL,HL           ; 15 = 0..225 тактов
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; итого, вставка "сожрёт" от 65 до 290 тактов
и использование дополнительных теневых регистров.
А код изначально писался под вывод РЛК-символов (6x8), просто я метки переименовал в СПРАЙТ для наглядности в форуме.

#235
8:52, 16 мая 2018

Alikberov
Хотя бы обоснуй зачем каждую строчку маску сдвигать из #fe? Чем не подходит её хранение в тех же hl' или другом расширенном? Чем не подходит самомодификация кода? вида
ld (sm_mask1), a
...
Цикл:
...
ld a,0
sm_mask1 equ $-1
...

#236
9:02, 16 мая 2018

Dexus
> Хотя бы обоснуй зачем каждую строчку маску сдвигать
A что мешает запустить код в отладчике

+ Без оптимизации
+ С оптимизацией
и посмотреть, что происходит шаг за шагом?
Ненависть к поклонникам РЛК? ;-D

> Чем не подходит самомодификация кода?
Спойлeр «Бонус»…

#237
9:28, 16 мая 2018

Alikberov
> A что мешает запустить код в отладчике
Зачем? Меня этот непонятно откуда взявшийся код вообще не интересует. К чему он тут вообще? Я про твой вывод "микроспрайта". С маской понял, ты её в b хранишь.
Короче там у тебя какая-то жесть. Строки с квадратной маской выводить это как бы совсем какая-то дичь. В голову ни одна мысль не приходит о том как это вообще использоваться может.

> Ненависть к поклонникам РЛК? ;-D
Мне как бы плевать на поклонничество. Я просто не знаю что такое РЛК. Разъединитель линейный качающегося типа? Не интересно.

Зы: вообще там где нужна скорость при выводе графики, код разворачивают на отдельные кейсы, в данном случае 8 отдельных кусков кода для вывода в каждой из 8ми битовых позиций. В 128к версиях используют второй экран (aka double buffer) для исключения мерцания, в 48к копировали back-buffer каждый кадр (причём отдавали преимущество копированию через push/pop со всем набором регистров, хотя и пачку ldi тоже, если такты не жалко). Мультиколор хоть и крутая фишка, но мне сильно не нравится, потому что расположение int относительно vblank у всех моделей разное.. на Ленинграде это под paper'ом, у профи - в начале paper'а, у фирменного это одновременно с синхро, у пентагона чуть раньше. Времянки построчные тоже кто во что горазд. Лесом этот зоопарк.

#238
10:39, 16 мая 2018

Кстати, мне интересно, кто-нибудь где-нибудь использовал двойной буфер 128k версии с отдельным задником для ускоренного восстановления фонового изображения?

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

Спрайты с маской требуют постоянного восстановления фона. Полное копирование с бэка? Да, так вроде все и делают. Но _частичное_ копирование с бэка - это используется? При небольшом количестве спрайтов запросто 50fps скорость может получиться. А при большом - в 25fps фиксированных легко поместится. Большинство платформеров (типа робокопа и бэтмена) дай бог в 12fps вписывались....

#239
13:05, 16 мая 2018

Dexus
> Спрайты с маской требуют постоянного восстановления фона. Полное копирование с
> бэка? Да, так вроде все и делают. Но _частичное_ копирование с бэка - это
> используется?

При небольшом количестве объектов можно использовать алгоритм вывода курсора мыши, когда курсор мыши запоминает что у него было под собой.
Но если объектов много то легче перерисовать всю сцену иначе будет еще медленнее так как запоминать нужно будет почти весь задник.

Страницы: 115 16 17 1822 Следующая »
ФлеймФорумПроЭкты

Тема в архиве.