Разработка и ромхакинг > Ромхакинг и программирование
PVSnesLib (библиотека для разработки игр под SNES на языке C)
<< < (2/2)
worm:

--- Цитата: megavolt85 от 27 Октябрь 2019, 17:06:45 ---зачастую невозможно написать всё на сях или си++
--- Конец цитаты ---
Что ты имеешь в виду? Структура языка не позволяет применять некоторые "манёвры", доступные только асму или просто дело в скорости?
megavolt85:
worm, да тут ка бы оба фактора играют свою роль, в случае когда надо выдержать тайминги асма просто не заменима, ну и с "манёврами" есть порой заморочки, взять к примеру тот же HDD загрузчик для дримкаста, он напополам написан на асме, и все те финты что творятся в ассемблерной части просто не реально воссоздать на языке более высокого уровня
ну к примеру есть две практически идентичных функции, разница между ними минимальна, я просто беру и размещаю всю разницу  несколькими асмовыми командами и делаю прыжок на вторую, в случае с сями мой код разросся бы по самое мама не горюй, и влезть в отведённые 16 килобайт было бы проблематично

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


--- Код: ---.align 2
_gd_pioread_stream:
mov #0, r0
mov.l r0, @(8, r4)
_gd_pioread_stream2:
mov #0, r1
mov #4, r6
mov #80, r0

mov.l r1, @(r0, r5)
add #4, r0
mov.l r1, @(r0, r5)

mov.l r6, @(4, r5)
mov.l @(4, r4), r0
shll8 r0
shll2 r0
shll r0
mov.l r0, @(56, r5)

mov.l .gd_execute_cmd_pio_adress, r0
jmp @r0
mov r5, r4

.align 2
.gd_execute_cmd_pio_adress:
.long _pio_stream_internal

--- Конец кода ---
worm:
megavolt85, аа, это да - сам иногда вскрываю ром и поражаюсь, нафига эта тонна кода, когда можно написать в 3 раза компактнее, просто используя кусок дополнительного кода в 2-3 инструкции) и компактно и быстрее в выполнении.
Навигация
Главная страница сообщений
Предыдущая страница

Перейти к полной версии