К сожалению, узнал об этом конкурсе только вчера от
Manwe в этой темке
https://zx-pk.ru/threads/34009-bk-by...=1#post1140654
В посте
Manwe ссылка на результаты (последняя колонка - размер в байтах), ссылка на сам эвент (описание):
http://logiker.com/Vintage-Computing...Challenge-2021
Спектрум, как ни странно, глубоко в эээ середине, непорядок. Решил помучать свои мозги, заранее условившись не смотреть готовые решения вообще, для любой платформы.
В правилах ничего не сказано про запреты на использование особенностей компа, поэтому код использует процедуру печати ПЗУ, а также некоторые трюки для сокращения объема:
- при запуске кода из Бейсика регистровая пара BC равняется адресу запуска. Используем, ибо нефиг
- сам адрес запуска, т.е. пара BC, указывает на массив данных для вывода строк
- в то же время, адрес кода (данных) рассчитан так, чтобы регистр C пригодился как счетчик строк, а регистр B экономит один байт при подсчете координат вывода
- вывод идет в служебный экран, это фича Спектрум-Бейсика при запуске кодов. Экономим память, убирая инициализацию основного потока (экрана)
- в условиях не сказано, что код
обязан возвращать управление, поэтому для предотвращения очистки служебного экрана прога "вешается", дабы не выходить в Бейсик
- адрес запуска не совпадает с адресом загрузки блока, что тоже не является обязательным
- исходя из пункта один, корректный запуск возможен только из Бейсика. Можно просто запустить файл TRD в эмуляторе, на диске уже записан "boot" для загрузки и запуска кода
Итоговый размер кода - 35 байт. 14 байт данных строк "елочки" плюс 21 байт программы, это 15 команд Z80. Спектрум рулит, просто нужно творчески подходить к делу.
Конечно, конкурс довольно специфический, и является неким писькомерством, но потренировать мозги было интересно.
Версия для ПК8000 от
Ivagor, 42 байта:
https://zx-pk.ru/threads/8378-pk8000...=1#post1140692
Christmas_Tree_by_reddie.zip