работы для LoveByte 2022

 

Закончилась вторая битва титанов - сайзкодеров. Демопати приносит порой неожиданные и красивые работы. Поучаствовал в конкурсе и я.


hu15b

Идея не сама по себе появилась, эффект возник после комбинации опкодов. Версия с яркостью атрибутов осталась в исходнике.

Этот эффект появился после создания очередных интро размером 7байт. Интересно, что малохольный формат .SNA и породил такой эффект. Работает он в режиме 48К, в 128К получится цветовая каша.

Остались две работы 7байт. После раздумий я решил не публиковать их, тем более, что орги нечетко высказались, что работы будут приняты, если интро вполне красивые. К тому же, результаты конкурса показали отсутствие голосов по 8b showcase.

Две интро готовы, больше не хотелось ничего делать. Но косвенно пришлось поучаствовать.

Microwaves 16b

superogue сбросил код и спросил, можно ли оптимизировать. Все наброски у меня не сохранились, поэтому примерно код был таким(24 байта):

  device zxspectrum128
    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 байт):

  device zxspectrum128
    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байт)

  device zxspectrum128

    org #8000

begin
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 байт, но движение другое:

; microwaves - a 16 byte intro for the ZX Spectrum 
; 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. Код публиковать не буду до публикации.

А теперь осталось только большое количество интро, которая подскажет некоторые интересные решения в коде и принесет массу позитива при просмотре. Этим я и займусь.


Комментарии