Здравствуйте, Философ, Вы писали:
Ф>·>Да и вообще неясно насколько необходимо проверять abrt после каждого readmeml, наверняка это можно сделать после всех чтений.
Ф>Это правда необходимо: любое чтение — потенциальное исключение, которое может закончится командой halt.
Ну это можно в readmem запрятать или для такого исключения — бросать исключение. В общем, неважно, мой поинт в том, что очень часто необходимость выравнивать код по вертикали говорит о том, что code smells и его можно улучшить.
Ф>>> ((SP + 4) & 0xFFFF))
Ф>·>Тут явно напрашивается что-то вроде "extract_something(SP + 4)", документации ради как минимум, и не потребуется вертикальное выравнивание.
Ф>Зачем????? Посмотри на название функции — это opPOPA, т.е. команда, которая вычитывает регистры, используя ss и ESP. Что тут ещё документировать???!
Я имею в виду наложение маски "& 0xFFFF". Полагаю это извлечение значения для 16-битных команд. Ну так сделай метод с таким названием вроде use16bit.
Или сделать два метода readmeml16 и readmeml32 и там эту маску запрятать. В эту же пару методов можно и
SP += 4 /
ESP += 4 запрятать чтобы всю эту твою копи-паст арифметику не писать.
Ф>А вот производительность эмулятора ты вот такими необдуманными действиями легко можешь просадить.
Если вы пишете на яп, который в тривиальнейшие оптимизации не умеет, вы явно выбрали неподходящий инструмент.
Ф>·>Обычно авто-форматтеры позволяют помечать специальными маркерами фрагменты кода, для которых автоформатирование отключается. Что-то типа "// formatter=off".
Ф>необычно.
Студия умеет, Райдер умеет,
vscode умеет,
clion умеет. Какой необычный форматтер вы используете?