С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Не понял, как можно упростить выборку? Таблица для FP-величин, поэтому наверное и не имеет нормального целого размера, на самом деле там почти 11.5 К. У Амстрада дополнительные 11 К - это не проблема, знать бы только как их задействовать...
Похоже код уже заоптимизирован до предела, пришлось даже несколько его притормозить, так как нужно сбрасывать перенос перед SBC...
Ну тут два пути. Не вдаваясь в подробности алгоритма, т.к. все равно в этом дельброте не секу.
Допустим, таблица данных (пока условная) занимает 32К и лежит с #8000 до верха. Приращение (прыжок по таблице) может быть любым числом, как в плюс, так и в минус.
Чтобы значение не опускалось ниже #8000, в т.ч. при переходе выше #FFFF, достаточно дать команду SET 7,H вместо нескольких команд проверок через аккумулятор.
Основная задача при таком подходе - корректные адреса выборки данных: массив должен быть "подогнан" под размер блока, в данном случае это 32Кб.
Второй вариант - данные распределены так, что получаемые значения всегда четные (данные идут по 2 байта). Тогда не нужна команда RES 0,L - а она три раза есть в коде.
Подойдет ли что из этого для реализации - сказать не могу, но прикинуть стоит.
Но вроде к нашему случаю так не получится...
- - - Добавлено - - -
Проверил все три RES - они нужны все. По циклам в Амстраде всё просто - там Z80 всегда получает такты ровно по 4, поэтому 10- и 12-тактовые команды исполняются за 12 тактов.
Требуемого архива, к сожалению, нет. Могу только дать ссылки на используемые компоненты:
1) ассемблер pasmo6, он довольно популярен среди амстрадовцев - https://pasmo.speccy.org/ - он даже пакетом в Ubuntu есть;
2) эмулятор, использую не самые популярный, но весьма неплохой - https://www.emutopia.com/index.php/e...c/515-ep128emu .
И больше ничего и не надо. Компилируем командой pasmo6 FILE.asm FILE.bin - этот bin потом грузим в дебаггер эмулятора командой l "FILE.bin" 0 4000, затем запускаем там же через G4000. Таким образом, ничего амстрадовского знать и не нyжно.Но если возникнут вопросы, готов помогать. Хотя почти уверен, что лучше код уже сделать невозможно. Доделываю код для Коммодора - там и по размеру и по скорости всё раза в два хуже, чем на Амстраде, - это верный признак, что код для Z80 очень хорошо оптимизирован.
Последний раз редактировалось litwr; 07.12.2021 в 21:56.
Извиняюсь, почему-то сложилось впечатление, что ромы были включены. Сейчас немало эмуляторов идут с встроенными ромами. Прикреплю файлик - распаковать в папку roms. Автазапуска у Amstrad CPC нет - загрузку с диска надо делать через команду, которую приводил ранее. Более того такой путь потребует работы с образами дисков... Честно, озадачили вы меня фразой, что через дебаггер неудобно. Наберите приведенную команду в блокноте и копипастите её в дебаггер одним кликом - что ещё может быть удобнее, совершенно не могу представить.
Последний раз редактировалось litwr; 12.12.2021 в 12:30.
Спасибо за roms, порой найти их непросто.
По сборке проекта, на спектруме, для примера, популярен кросс-ассемблер sjasm. Он позволяет сохранить откомпилированный образ в формате снапошота, который эмулятор может запускать автоматически. Т.к. программа может быть довольно объёмной и загружать бинарники вручную после каждой компиляции крайне не удобно. Может ли pasmo создавать такие спапшот образы?
- - - Добавлено - - -
Чего-то ещё нехватает, не запускается эмулятор к сожалению. Видимо придётся искать более dev ориентированный эмулятор![]()
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)