Код:
device zxspectrum128
; code by Dart Alver and previous code by (c) Steelzer/CRZ
Chn_Boof equ #C000 ; Здесь будет буфер чанкового изображения
CH_set equ #7800 ; Здесь будут данные изображения самих чанков
ORG #8000 ; Начало кода программы
START:
ld hl, #4000 ; очистка экрана
ld de, #4001
ld bc, 6144
ld (hl),l
ldir
ld (hl),#02 ; цвет экрана
ld bc,767
ldir
call Chanky_init ; создаём набор чанков для быстрого доступа
xor a ; чёрный бордюр
out (#fe),a
LD HL, Chn_Boof ;инициализация
LD DE, Chn_Boof+1 ;буфера
LD (HL),L ;буфер выбирается так что L=0
LD BC,3072
LDIR
FLAMESTART:
exx
ld de,#4000 ; экран
ld b,32
ld c,#F0
exx
FLAME:
LD HL, Chn_Boof+63 ;смещение вверх и вправо
.sm:
LD DE,Chn_Boof
LD BC,#0006 ;#600=1536
BEGIN:
ld a,(de)
cp (hl)
jp nz, 2F
1
xor a
2
add a,(hl)
rra
inc hl
add a,(hl)
rra
ld (de),a
inc de
ex af,af'
ld a,(de)
cp (hl)
jp nz, 2F
1
xor a
2
add a, (hl)
rra
inc hl
add a,(hl)
rra
ld (de),a
inc de
exx
and c
rrca : rrca : rrca: rrca
ld l,a
ex af,af'
and c
or l
LD L,A ;
LD H,#1E ; для получения старшего байта адреса чанков
ADD HL,HL ;
ADD HL,HL ;
LD A,(HL) ;
LD (DE),A ;
INC L ;
INC D ;
LD A,(HL) ;
LD (DE),A ;
INC L ;
INC D ;
LD A,(HL) ;
LD (DE),A ;
INC L ;
INC D ;
LD A,(HL) ;
LD (DE),A
dec d
dec d
dec d
1 inc e
djnz V1
ld b,32
ld a,4
add a,d
ld d,a
and 7
ld a,e
jp nz, .v
or a
jp z,V1
LD A,D
SUB 8
LD D,A
jp V1
ld a,e
.v sub b
ld e,a
V1
exx
djnz BEGIN
dec c
jp nz,BEGIN
ld de,Chn_Boof+3072
ld bc,64
ld hl,Random
.rndADDR EQU $-2
ldir
ld a,h
or a
jp nz,1F
ld hl,Random
1 ld (.rndADDR),hl
jp FLAMESTART
Chanky_init:
ld de,Chanky
ld ix, #7800
ld c,16
.loop1:
ld b,16
.loop2:
push bc
push ix
ld a,16
sub c
add a,a
add a,a
ld l,a
ld h,0
add hl, de
ld b,4
1
ld a,(hl)
and #f0
inc hl
ld (ix),a
inc ix
djnz 1B
pop ix
pop bc
push bc
ld a,16
sub b
add a,a
add a,a
ld l,a
ld h,0
add hl, de
ld b,4
2
ld a,(hl)
and #0f
inc hl
or (ix)
ld (ix),a
inc ix
djnz 2B
pop bc
djnz .loop2
dec c
jr nz,.loop1
LD DE,Random ; заполнялка RANDOM'ом из почти ПЗУ ;)
.RND ; от последовательности сильно зависит внешний вид
LD A,R
AND %00111111
LD H,A
LD A,R
LD L,A
LD A,R
XOR (HL)
rra
or l
or h
1 sub 7
LD (DE),A
INC HL
dec hl
INC DE
ld a,d
or a
jr nz,.RND
ret
Chanky: ; исходные коды для формирования набора чанков
db %00000000, %00000000,%00000000,%00000000 ;0
db %00000000, %00100010,%00000000,%00000000 ;1
db %00000000, %00100010,%00000000,%10001000 ;2
db %00000000, %00100010,%00000000,%10101010 ;3
db %00000000, %10101010,%00000000,%10101010 ;4
db %00010001, %10101010,%00000000,%10101010 ;5
db %01000100, %10101010,%00010001,%10101010 ;6
db %01010101, %10101010,%00010001,%10101010 ;7
db %01010101, %10101010,%01010101,%10101010 ;8
db %01010101, %11101110,%01010101,%10101010 ;9
db %01010101, %11101110,%01010101,%10111011 ;10
db %01010101, %10101110,%01110111,%10111011 ;11
db %01110111, %11101110,%01110111,%10111011 ;12
db %01110111, %11101110,%11111111,%10111011 ;13
db %01110111, %11101110,%11111111,%11111111 ;14
db %11111111, %11111111,%11111111,%11111111 ;15
Random EQU #C000+3072+128 ; здесь будет последовательность случайных чисел для формирования пламени
savesna "full_flame.sna",START ; создаём .sna файл
; LABELSLIST "C:/us0.38.2/user.l" ; раскомментить и прописать свой адрес для дебаггинга меток в Unreal Speccy