PHP код:
;Cannonball (19xx)(Hooy).tap demo
device zxspectrum128
ORG #61a8
begin
ld hl,#5800;адрес атрибутов экрана
;--------заполним черным цветом
m0:
ld(hl),0:inc hl
ld a,h:cp #5b:jr nz,m0
;---печать текста
ld hl, #5800,ix,message
m1:
ld a,(ix):or a:jr z,begfade; если код сообщения 0, то переходим к гашению
inc ix
push hl:ld l,a,h,0
add hl,hl:add hl,hl:add hl,hl; каждый символ состоит из 8 байт, умножим код на 8
ld de,#3C00:add hl,de;#3C00 - адрес, где хранятся символы
ld de,hl
pop hl:push hl
ld a,8
m3: ld b,#80
exa
m2: ld a,(de):and b:jr z, writeatr
ld a,56; атрибут paper= белый(7)*8
writeatr:
ld (hl),a:inc hl
rrc b:jr nc, m2
ld bc,24:add hl,bc; 24=32-8, отрисовали 8 знаков, перейдем к следующей линии
inc de
exa:dec a:jr nz,m3
pop hl:ld bc,8:add hl,bc; символ нарисован, переход на 8
jp m1
;----------------------------------гашение
begfade:
;---------------------------------- ждем нажатия пробел
waitkey:
LD A,#7F:IN A,(#FE)
RRA:JR C,waitkey
LD B ,$32
L9D78:
PUSH BC
CALL L9DCD
POP BC
DJNZ L9D78
stu jr stu; заглушка
message: db "TEXT",0
L9DCD:
LD IX ,$5800;9DCD
LD B ,$16
L9DD3:
PUSH BC;9DD3
LD B ,$1F
L9DD6:
PUSH BC;9DD6
LD HL ,$0000
LD D ,$00
LD E ,(IX-$20 )
ADD HL ,DE
LD E ,(IX+$01 )
ADD HL ,DE
LD E ,(IX-$01 )
ADD HL ,DE
LD E ,(IX+$20 )
ADD HL ,DE
SRL L
SRL H
SRL L
SRL H
LD A ,L
LD ( IX+$00), A
INC IX
POP BC
DJNZ L9DD6
INC IX
POP BC
DJNZ L9DD3
ei:HALT
RET
end
display /d,end-begin
savesna "test.sna",begin