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

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

Страницы: 115 16 17 1822 Следующая »
=A=L=X=Постоялецwww16 мая 20185:41#225
Alikberov

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

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

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

  • Только «Ctrl+C»/«Ctrl+V» без альтернативы с «Ctrl+Insert»/«Shift+Insert» (только для левшей чтоли?)…
  • Если я сделаю «Ctrl+A»+«Ctrl+V», начнётся цепочка с ошибками памяти… Нужно «Ctrl+A»+«Delete»+«Ctrl+V», пф-ффф…
  • Не нахожу клавиши для трансляции. Обязательно жать нужно мышкой меню «File/Assemble» и каждый раз в дурацком диалоге именно поверх ZX-экрана жать «OK»…
  • В редакторе ассемблера комбинация «Alt+F» открывает меню основного окна эмулятора…
  • В отладчике не реагируют привычные «F10», «F11» и т.д… Без мышки не обойтись.

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

Правка: 16 мая 2018 6:24

DexusУчастникwww16 мая 20186:16#227
Alikberov
Очевидно пишут те, кто в РЛК не тыкались. Пиши свой.
Вообще делают проще - компилируют и собирают образ кроссассемблеором и запускают эмулятор с образом, на что уходит одна секунда запуска и работы батника.
Вообще лично я бы сделал самомодифицирующийся код с изменением значения jr $+N перед серией сдвигов.
А зеркалирование спрайтов через таблицу. Собственно, так оно и делается всегда.
AlikberovПостоялецwww16 мая 20186:35#228
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 тоже пишут так же - как попало…

Правка: 16 мая 2018 6:59

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

Правка: 16 мая 2018 7:19

AlikberovПостоялецwww16 мая 20187:19#230
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

Правка: 16 мая 2018 7:22

DexusУчастникwww16 мая 20187:22#231
Alikberov
Какой код? Ты сам свой код из #223 видел? Что это вообще такое?
AlikberovПостоялецwww16 мая 20187:45#232
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 такта

Правка: 16 мая 2018 8:09

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

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

Правка: 16 мая 2018 8:31

AlikberovПостоялецwww16 мая 20188:41#234
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), просто я метки переименовал в СПРАЙТ для наглядности в форуме.

Правка: 16 мая 2018 8:53

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

Правка: 16 мая 2018 8:56

AlikberovПостоялецwww16 мая 20189:02#236
Dexus
> Хотя бы обоснуй зачем каждую строчку маску сдвигать
A что мешает запустить код в отладчике
+ Без оптимизации
+ С оптимизацией
и посмотреть, что происходит шаг за шагом?
Ненависть к поклонникам РЛК? ;-D

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

Правка: 16 мая 2018 10:29

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

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

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

Правка: 16 мая 2018 10:26

DexusУчастникwww16 мая 201810:39#238
Кстати, мне интересно, кто-нибудь где-нибудь использовал двойной буфер 128k версии с отдельным задником для ускоренного восстановления фонового изображения?

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

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

Правка: 16 мая 2018 12:06

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

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

Страницы: 115 16 17 1822 Следующая »

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

2001—2018 © GameDev.ru — Разработка игр