| Разработка и ромхакинг > Ромхакинг и программирование |
| 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 инструкции) и компактно и быстрее в выполнении. |
| Навигация |
| Главная страница сообщений |
| Предыдущая страница |