User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Christmas Tree Event - рисуем елочку =)

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

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

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

    По умолчанию Christmas Tree Event - рисуем елочку =)

    К сожалению, узнал об этом конкурсе только вчера от 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.
    Однако ниже по топику char указал, как сократить программу еще на три байта, за что заслуживает почетной медали
    Итоговый размер (пока?) - 32 байта. Код сократился до 13 команд и занимает 18 байт, плюс те же 14 байт данных. Улучшенная версия приложена.
    Конечно, конкурс довольно специфический, и является неким писькомерством, но потренировать мозги было интересно.
    Версия для ПК8000 от Ivagor, 42 байта: https://zx-pk.ru/threads/8378-pk8000...=1#post1140692 но и там есть подвижки в сторону уменьшения.

    Christmas_Tree_by_reddie.zip

    Christmas_Tree_by_char_and_reddie_for_ZX_Spectrum.zip

    Последний раз редактировалось reddie; 27.12.2021 в 07:09.

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

  3. #2

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Отличный результат!
    А о конкурсе мы сами узнали в последний день – каждый из трёх участников на БК 0010 писал свою программу за один вечер.
    Так-то понятно, что у 8-битного компьютера больше шансов выйти вперёд, чем у 16-битного. Поэтому меня и удивило, что БК 0010 смог обойти только C64 в этом конкурсе.
    manwe.pdp-11.ru

  4. #3

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

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Отличный результат!
    А о конкурсе мы сами узнали в последний день – каждый из трёх участников на БК 0010 писал свою программу за один вечер.
    Так-то понятно, что у 8-битного компьютера больше шансов выйти вперёд, чем у 16-битного. Поэтому меня и удивило, что БК 0010 смог обойти только C64 в этом конкурсе.
    Там ещё Коммодор+4 впереди, а это не 64; На самом деле, думаю там практически любая машина с 6502 могла запустить примерно тот же код, что и Коммодор 64 или +4.

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

    Цитата Сообщение от reddie Посмотреть сообщение
    К сожалению, узнал об этом конкурсе только вчера от 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

    Ну и ну! Надо было спектрумистов тоже приглашать... Но это уже было бы какое-то вторжение.

  5. #4

    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    достаточно RRA вместо SRA A

  6. #5

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

    По умолчанию

    Цитата Сообщение от char Посмотреть сообщение
    достаточно RRA вместо SRA A
    Если после RST 16 флаг переноса всегда устанавливается - то да. Настолько глубоко в дебри ПЗУ не залазил
    Думал еще поиграться с вариантов с циклами, но вряд ли он окажется короче. Потом как-нибудь попробую.
    Кстати, организатор конкурса ответил мне на почту, обещал выложить и мой вариант. Пока 35 байт это рекорд, но...
    Цитируя его: программа под ДОС (MS-DOS, видимо) на данный момент весит 36 байт, но ребята работают над этим =)

  7. #6

    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    еще можно перед print убрать одну RST 16 и в таблице все значения уменьшить на 1

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

    а можно и два rst 16 убрать, 32 байта

    Код:
    	defb	-3-2,-3-2,-23-2,-17-2,-11-2,-5-2,-15-2,-11-2,-7-2,-3-2,-7-2,-5-2,-3-2,-1-2
    
    start
    	dec	c
    	jr	z,$	;stop when finished
    
    	ld	a,23	;set coords via ROM procedure
    	rst	16
    	ld	a,(bc)	;line len in negative format
    	ld	e,a
     rra
    	sub	b	;centering
    print
    	rst	16
    	ld	a,"*"
    	inc	e
    	jr	nz,print
    	jr	start
    end

    Этот пользователь поблагодарил char за это полезное сообщение:

    reddie(26.12.2021)

  8. #7

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

    По умолчанию

    Цитата Сообщение от char Посмотреть сообщение
    еще можно перед print убрать одну RST 16
    Да, команде TAB второй байт, в общем-то, пофиг, можно и звездочку вместо него скормить. И после RST 16 действительно флаг выставляется как надо.
    Итого ужали еще на три байта. Что лишний раз подтверждает истинность фразы "любую программу можно сократить минимум еще на байт" =))
    Но для этого нужно время и желание, а эти ресурсы не бесконечны. Хотя теперь код близок к идеалу. по-моему.

  9. #8

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,101
    Спасибо Благодарностей отдано 
    1,335
    Спасибо Благодарностей получено 
    322
    Поблагодарили
    151 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    Cool

    На спектруме, вообще не нужна программа, чтобы рисовать такую ёлку. Просто надо написать одну строчку.
    Вложения Вложения

  10. #9

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

    По умолчанию

    Вот только длина этой бейсик-программы в разы больше ассемблерной, а суть конкурса была именно в минимизации.

  11. #10

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,101
    Спасибо Благодарностей отдано 
    1,335
    Спасибо Благодарностей получено 
    322
    Поблагодарили
    151 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Программы? Ноль байтов.
    Это не программа, это команда. Составная.

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Russian Demoscene Winter Event 2016
    от TmK в разделе События
    Ответов: 36
    Последнее: 04.12.2015, 16:50
  2. 30th Anniversary Event
    от SaintTurnip в разделе Amiga
    Ответов: 0
    Последнее: 13.08.2015, 17:58
  3. Ответов: 3
    Последнее: 10.05.2012, 09:06
  4. Рисуем на BORDER
    от breeze в разделе Программирование
    Ответов: 42
    Последнее: 19.03.2009, 09:56
  5. рисуем круги
    от jim в разделе Программирование
    Ответов: 1
    Последнее: 07.10.2006, 10:09

Ваши права

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