Этюд для ZX

 мопед не мой, я просто подсмотрел:

Задачка! Налетай!)

- очистить верхних строк экрана: 8 пиксельных линий по 32 байта

- максимально короткая процедура


Аrtem Тopchiy, [Пн 06.12.2021 11:46]

таки 13 байт без залезания в пзуху


  ld hl,#4800, b,l

lab1: dec hl: ld a,l: and #e0

  jr nz, lab1

  ld (hl),a

  djnz lab1


Дополнение. Залез в код игры War of the Worlds, The (MCN) чтобы посмотреть на движущуюся рамку:


Добавил комментарии к дизассемблеру:

; compile sjasmplus
device zxspectrum128
        ORG #6000
begin
k: ei:halt:halt
 call L6285
 jr k
; ---------------------------------------------------------------------------
L6285:
ld a, (byte_60B4); начальный цвет
ld b, a
call sub_62D0; следующий цвет атрибутов
ld a, b
ld (byte_60B4), a
ld hl, 5800h ;от центра вправо
ld c, 20h
loc_6295:
ld (hl), b
inc hl
call sub_62D0; следующий цвет атрибутов
dec c
jp nz, loc_6295
ld c, 14h ; движение вниз
dec hl
ld de, 20h
loc_62A4:
add hl, de
ld (hl), b
call sub_62D0; следующий цвет атрибутов
dec c
jp nz, loc_62A4
; влево
add hl, de
ld c, 20h
loc_62B0:
ld (hl), b
dec hl
call sub_62D0; следующий цвет атрибутов
dec c
jp nz, loc_62B0
;вверх
scf
ccf
sbc hl, de
ld c, 14h
inc hl
loc_62C0:
ld (hl), b
ld de, 20h
scf
ccf
sbc hl, de
call sub_62D0; следующий цвет атрибутов
dec c
jp nz, loc_62C0
ret
; =============== S U B R O U T I N E =======================================
sub_62D0:
ld a, b
add a, 8
cp 40h ; '@'
jp nz, loc_62DA
ld a, 10h
loc_62DA:
ld b, a
ret
; ---------------------------------------------------------------------------
byte_60B4: db 10h
end
display /d,end-begin
savesna "!void.sna",begin




Комментарии