Закончилась вторая битва титанов - сайзкодеров. Демопати приносит порой неожиданные и красивые работы. Поучаствовал в конкурсе и я.
Идея не сама по себе появилась, эффект возник после комбинации опкодов. Версия с яркостью атрибутов осталась в исходнике.
Этот эффект появился после создания очередных интро размером 7байт. Интересно, что малохольный формат .SNA и породил такой эффект. Работает он в режиме 48К, в 128К получится цветовая каша.
Остались две работы 7байт. После раздумий я решил не публиковать их, тем более, что орги нечетко высказались, что работы будут приняты, если интро вполне красивые. К тому же, результаты конкурса показали отсутствие голосов по 8b showcase.
Две интро готовы, больше не хотелось ничего делать. Но косвенно пришлось поучаствовать.
superogue сбросил код и спросил, можно ли оптимизировать. Все наброски у меня не сохранились, поэтому примерно код был таким(24 байта):
org #8000
begin
; set border (2b)
sbc a,a ; 0
out (254),a
frame:
ld de,$5800
; hlt
ld b,24
yloop:
ld c,32
xloop:
adc c
push af
;add 8
and %01001001
ld (de),a
inc de
pop af
dec c
jr nz,xloop
djnz yloop
jr frame
end
display /d,end-begin
savesna "32byte.sna",begin
; savebin "32byte.code",begin,end-begin
Здесь видно, что два цикла - явная трата байтов. К тому же цикл с регистром C выполняется 32 раза.Позже появился другой вариант(17 байт):
org #8000
begin
frame:
ld h,$59
ld c,32
yloop:
adc c
push af
and %1001001
ld (hl),a
pop af
cpi
jp pe,yloop
jr frame
end
display /d,end-begin
savesna "16byte.sna",begin
savebin "16byte.code",begin,end-begin
Я написал свой вариант(19байт)
org #8000
frame:
ld h,$58
xx:
ld b,32
yloop:
adc b
push af
and %1001001
ld (hl),a
pop af
inc hl
djnz yloop
bit 2,h:jr z,xx
jr frame
end
display /d,end-begin
savesna "16byte.sna",begin
; savebin "16byte.code",begin,end-begin
Цикл завершается при H=$5B, но есть явный простор - проверка значения и ДВА перехода по условию и без. Я решил обойти проверку. В итоге и получилось 16 байт, но движение другое:
; code and design by Superogue/Marquee Design
; further optimisations by G0blinish
device zxspectrum128
org #8000
begin
ld h,$5b
frame:
sbc e
inc e
res 5,e
push af
and $49
ld (hl),a
pop af
inc hl
res 2,h
jr frame
end
display /d,end-begin
savesna "intro16.sna",begin
savebin "intro16.bin",begin,end-begin
Теперь HL меняет значения от $58 до $5B - вот такая вышла находка - res 2,h.
И еще одно интро, которое не было опубликовано, вероятно, что появится позже.
Довольно красивый эффект 16 байт. Но эффект работает над полем в текстовым режиме. Любой атарист скажет знакомое заветное POKE 559,0, которое погасит экран. Но в этом случае мешают три лишних байта - STX 559(X=0 при запуске).Идея возникла сразу: изменить адрес так, чтобы код лег на адрес 559, записав таким образом верное значение. После некоторых экспериментов в эмуляторе я нашел кошерный *=$22E. Код публиковать не буду до публикации.
А теперь осталось только большое количество интро, которая подскажет некоторые интересные решения в коде и принесет массу позитива при просмотре. Этим я и займусь.
Комментарии
Отправить комментарий