User Tag List

Показано с 1 по 10 из 18

Тема: Оптимизация Z80-кода для Мандельброта

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Таблицы квадратов занимают 11К
    Какая-то "некруглая" цифра =) Обычно выравнивают по блокам: 4К, 8К и т. д. Я к тому, что растянуть бы её на блок 16К или 32К, если память не жмет - это может упростить выборку. Вернее, фиксацию диапазона сразу через биты hl.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    769
    Спасибо Благодарностей отдано 
    252
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    42 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    Какая-то "некруглая" цифра =) Обычно выравнивают по блокам: 4К, 8К и т. д. Я к тому, что растянуть бы её на блок 16К или 32К, если память не жмет - это может упростить выборку. Вернее, фиксацию диапазона сразу через биты hl.
    Не понял, как можно упростить выборку? Таблица для FP-величин, поэтому наверное и не имеет нормального целого размера, на самом деле там почти 11.5 К. У Амстрада дополнительные 11 К - это не проблема, знать бы только как их задействовать...
    Похоже код уже заоптимизирован до предела, пришлось даже несколько его притормозить, так как нужно сбрасывать перенос перед SBC...

  4. #3

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    как можно упростить выборку?
    Ну тут два пути. Не вдаваясь в подробности алгоритма, т.к. все равно в этом дельброте не секу.
    Допустим, таблица данных (пока условная) занимает 32К и лежит с #8000 до верха. Приращение (прыжок по таблице) может быть любым числом, как в плюс, так и в минус.
    Чтобы значение не опускалось ниже #8000, в т.ч. при переходе выше #FFFF, достаточно дать команду SET 7,H вместо нескольких команд проверок через аккумулятор.
    Основная задача при таком подходе - корректные адреса выборки данных: массив должен быть "подогнан" под размер блока, в данном случае это 32Кб.
    Второй вариант - данные распределены так, что получаемые значения всегда четные (данные идут по 2 байта). Тогда не нужна команда RES 0,L - а она три раза есть в коде.
    Подойдет ли что из этого для реализации - сказать не могу, но прикинуть стоит.

  5. #4

    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    769
    Спасибо Благодарностей отдано 
    252
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    42 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    Ну тут два пути. Не вдаваясь в подробности алгоритма, т.к. все равно в этом дельброте не секу.
    Допустим, таблица данных (пока условная) занимает 32К и лежит с #8000 до верха. Приращение (прыжок по таблице) может быть любым числом, как в плюс, так и в минус.
    Чтобы значение не опускалось ниже #8000, в т.ч. при переходе выше #FFFF, достаточно дать команду SET 7,H вместо нескольких команд проверок через аккумулятор.
    Основная задача при таком подходе - корректные адреса выборки данных: массив должен быть "подогнан" под размер блока, в данном случае это 32Кб.
    Второй вариант - данные распределены так, что получаемые значения всегда четные (данные идут по 2 байта). Тогда не нужна команда RES 0,L - а она три раза есть в коде.
    Подойдет ли что из этого для реализации - сказать не могу, но прикинуть стоит.
    Но вроде к нашему случаю так не получится...

    - - - Добавлено - - -

    Цитата Сообщение от drbars Посмотреть сообщение
    Можете выложить арихив с автосборкой (исходники + ассебмлер + эмуль) ?

    По алгоритму. мне кажется или можно одну команду res выкинуть? ещё jr в конце заменить на jp + 2 такта даст.
    Проверил все три 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.

  6. #5

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,080
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    479
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Но вроде к нашему случаю так не получится...
    2) эмулятор, использую не самые популярный, но весьма неплохой - https://www.emutopia.com/index.php/e...c/515-ep128emu .
    "Из коробки" эмуль не заработал... видимо нехватает каких-то ромов. Вопрос был в том, чтобы автосборка была с автозапуском. Выходить в дебаггер и загружать через него для отладки не очень удобно. Есть такая возможность?

  7. #6

    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    769
    Спасибо Благодарностей отдано 
    252
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    42 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    "Из коробки" эмуль не заработал... видимо нехватает каких-то ромов. Вопрос был в том, чтобы автосборка была с автозапуском. Выходить в дебаггер и загружать через него для отладки не очень удобно. Есть такая возможность?
    Извиняюсь, почему-то сложилось впечатление, что ромы были включены. Сейчас немало эмуляторов идут с встроенными ромами. Прикреплю файлик - распаковать в папку roms. Автазапуска у Amstrad CPC нет - загрузку с диска надо делать через команду, которую приводил ранее. Более того такой путь потребует работы с образами дисков... Честно, озадачили вы меня фразой, что через дебаггер неудобно. Наберите приведенную команду в блокноте и копипастите её в дебаггер одним кликом - что ещё может быть удобнее, совершенно не могу представить.
    Вложения Вложения
    Последний раз редактировалось litwr; 12.12.2021 в 12:30.

  8. #7

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,080
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    479
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Наберите приведенную команду в блокноте и копипастите её в дебаггер одним кликом - что ещё может быть удобнее, совершенно не могу представить.
    Спасибо за roms, порой найти их непросто.

    По сборке проекта, на спектруме, для примера, популярен кросс-ассемблер sjasm. Он позволяет сохранить откомпилированный образ в формате снапошота, который эмулятор может запускать автоматически. Т.к. программа может быть довольно объёмной и загружать бинарники вручную после каждой компиляции крайне не удобно. Может ли pasmo создавать такие спапшот образы?

    - - - Добавлено - - -

    Цитата Сообщение от litwr Посмотреть сообщение
    Чего-то ещё нехватает, не запускается эмулятор к сожалению. Видимо придётся искать более dev ориентированный эмулятор

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Оптимизация Conway's Game of Life для Z80
    от blackmirror в разделе Программирование
    Ответов: 1
    Последнее: 10.01.2022, 20:47
  2. Ответов: 28
    Последнее: 01.01.2017, 14:28
  3. Ответов: 22
    Последнее: 30.03.2015, 04:52
  4. Оптимизация в HL
    от drbars в разделе Программирование
    Ответов: 33
    Последнее: 22.08.2013, 17:56
  5. Шифр AES-128: компактная реализация для Z80 (1001 байт кода)
    от Barmaley_m в разделе Программирование
    Ответов: 7
    Последнее: 18.03.2013, 00:30

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •