мопед не мой, я просто подсмотрел:
Задачка! Налетай!)
- очистить верхних строк экрана: 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
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
Комментарии
Отправить комментарий