Идея родилась после релиза и возникшего срачика. Короче, я решил попробовать и повторить картинку.
Попытка 1
device zxspectrum128
ORG #6000
begin
ld hl,$5800
ld b,3
ld de,col
lp:
ld a,(de)
inc de
lp2:
ld (hl),a
inc l
jr nz,lp2
inc h
djnz lp
jr $
col:
db 7*9,1*9,2*9
end
display /d,end-begin
savesna "!void.sna",begin
ORG #6000
begin
ld hl,$5800
ld b,3
ld de,col
lp:
ld a,(de)
inc de
lp2:
ld (hl),a
inc l
jr nz,lp2
inc h
djnz lp
jr $
col:
db 7*9,1*9,2*9
end
display /d,end-begin
savesna "!void.sna",begin
21 байт(jr $ против ret -1 байт), но два цикла тут явно лишние.
Попытка 2
device zxspectrum128
ORG #6000
begin
; db 7*9,1*9,2*9
ld hl,$5800
ld a,7*9
ld b,3
lp:
ld (hl),a
inc l
jr nz,lp
inc h
sub 6*9
jr nc,m1
ld a,2*9
m1: djnz lp
jr $
end
display /d,end-begin
savesna "!void.sna",begin
Снова 21 байт. Во время перекура появилась одна идейка. Область атрибутов можно разбить на три части: 5800-58FF,5900-59FF, 5A00-5AFF. в первой части используется атрибут 63(белый), при постоянном значении H=$58. Далее - второй $59 - значение 9, третий $5A-18.Идея рождается сама собой -расположить данные цветов по адресу $6058 и использовать пару BC для обращения к данным. Условие завершения? A=$21
Попытка 3
;компиляция pasmo --tapbas cald.asm cald.tap label.txt huj.txt --listing
org #$6058
start ; заголовок для pasmo - так удобнее собирать в .tap
db 7*9,1*9,2*9;цвета
ld hl,$5800
lp:
ld c,h
ld a,(bc)
ld (hl),a
inc hl
cp $21:условие завершения цикла, попали на LD HL,$5800(байты $21,00,$58)
jr nz,lp
ret
END start
start ; заголовок для pasmo - так удобнее собирать в .tap
db 7*9,1*9,2*9;цвета
ld hl,$5800
lp:
ld c,h
ld a,(bc)
ld (hl),a
inc hl
cp $21:условие завершения цикла, попали на LD HL,$5800(байты $21,00,$58)
jr nz,lp
ret
END start
Итого 15 байт, но программу можно сократить до 13, правда закраска будет другой.
Сама прога допиливалась с помощью ZX Editor от zx-modules.de
Файл тут, отличный повод поджечь пукан сраным русофобам
Комментарии
Отправить комментарий