Код:
;SmallTris
;by rasmer/fishbone crew
;18.09.2014
DEVICE ZXSPECTRUM128
org #4000
figures:
;1
db %01000100
db %01000100
db %01000100
db %01000100
db %00000000
db %11111111
db %00000000
db %00000000
db %01000100
db %01000100
db %01000100
db %01000100
db %00000000
db %11111111
db %00000000
db %00000000
;2
db %01100110
db %01100110
db %00000000
db %00000000
db %01100110
db %01100110
db %00000000
db %00000000
db %01100110
db %01100110
db %00000000
db %00000000
db %01100110
db %01100110
db %00000000
db %00000000
;3
db %01000100
db %01100110
db %00100010
db %00000000
db %01100110
db %11001100
db %00000000
db %00000000
db %01000100
db %01100110
db %00100010
db %00000000
db %01100110
db %11001100
db %00000000
db %00000000
;4
db %00100010
db %01100110
db %01000100
db %00000000
db %11001100
db %01100110
db %00000000
db %00000000
db %00100010
db %01100110
db %01000100
db %00000000
db %11001100
db %01100110
db %00000000
db %00000000
;5
db %01000100
db %01000100
db %01100110
db %00000000
db %00100010
db %11101110
db %00000000
db %00000000
db %01100110
db %00100010
db %00100010
db %00000000
db %11101110
db %10001000
db %00000000
db %00000000
;6
db %00100010
db %00100010
db %01100110
db %00000000
db %11101110
db %00100010
db %00000000
db %00000000
db %01100110
db %01000100
db %01000100
db %00000000
db %10001000
db %11101110
db %00000000
db %00000000
;7
db %01000100
db %11101110
db %00000000
db %00000000
db %01000100
db %11001100
db %01000100
db %00000000
db %00000000
db %11101110
db %01000100
db %00000000
db %01000100
db %01100110
db %01000100
db %00000000
;8 ;) lalala
db %01000100
db %11101110
db %00000000
db %00000000
db %01000100
db %11001100
db %01000100
db %00000000
db %00000000
db %11101110
db %01000100
db %00000000
db %01000100
db %01100110
db %01000100
db %00000000
tetristart:
ei
ld b,8
tts01: ld a,b
dec a
out (#fe),a
halt
djnz tts01
ld hl,#5800
push hl
ld de,#5801
ld bc,#2ff
ld (hl),l
ldir
pop hl
dec c
ld de,32
ld b,20
call ShowLine
ld e,1
ld b,11
call ShowLine
ld de,-32
ld b,21
call ShowLine
NewFigure:
ld a,r
and %01110000
ld (AddrFigure),a
ld hl,#5804
ld (AddrScreen),hl
call CheckFigure
jr c,tetristart
GameLoop:
ld a,0
inc a
and %00001111
ld (GameLoop+1),a
call ShowHideFigure ;show
halt
call ShowHideFigure ;hide
ld bc,#effe
in a,(#fe)
rra
jr nc,PressRotate
rra
jr nc,PressRotate
rra
jr nc,PressFaster
rra
jr nc,PressRight
rra
jr nc,PressLeft
gl01:
ld a,(GameLoop+1)
or a
call z,ToDown
jr GameLoop
PressFaster:
ld a,(GameLoop+1)
and %00000001
call nz,ToDown
jr gl01
PressRight
ld hl,-1
ld (UnMoving+1),hl
ld de,1
jr pl01
PressLeft
ld hl,1
ld (UnMoving+1),hl
ld de,-1
pl01: call Moving
call CheckFigure
call c,UnMoving
jr gl01
UnMoving:
ld de,#0000
Moving:
ld hl,(AddrScreen)
add hl,de
ld (AddrScreen),hl
ret
PressRotate:
ld a,(GameLoop+1)
and %00000011
jr nz,gl01
ld d,4
call Rotate
call CheckFigure
call c,UnRotate
jr gl01
UnRotate:
ld d,-4
Rotate:
ld a,(AddrFigure)
ld l,a
add a,d
and %00001111
ld h,a
ld a,l
and %11110000
or h
ld (AddrFigure),a
ret
ToDown:
ld hl,-32
ld (UnMoving+1),hl
ld de,32
call Moving
call CheckFigure
ret nc
call UnMoving
call ShowHideFigure
ld hl,#5800
ld b,20
td01: push hl
push bc
ld c,11
td02:
xor a
or (hl)
jr z,td03
inc l
dec c
jr nz,td02
ld a,l
and %11100000
ld l,a
push hl
push hl
ld bc,#5820
sbc hl,bc
ld b,h
ld c,l
pop hl
ld de,#20
add hl,de
ex hl,de
pop hl
lddr
td03: pop bc
pop hl
ld de,32
add hl,de
djnz td01
jp NewFigure
CheckFigure:
ld a,#07
ld (sf04+0),a
ld a,#d8
jr sf05
AddrFigure:
dw #4000
AddrScreen:
dw #5804
ShowHideFigure:
ld a,#ee
ld (sf04+0),a
ld a,#ff
sf05: ld (sf04+1),a
ld hl,figures
ld de,FigureBuffer
ld bc,128
ldir
ld h,high FigureBuffer
ld a,(AddrFigure)
ld l,a
ld de,(AddrScreen)
ld b,4
sf01: ld c,4
sf02: rlc (hl)
jr nc,sf03
ld a,(de) ;#4a
sf04: xor #ff ;#ee,#ff ;07 - RLCA ;#d8 - ret C
ld (de),a ;12
sf03: inc de
dec c
jr nz,sf02
push hl
ld hl,28
add hl,de
push hl
pop de
pop hl
inc l
djnz sf01
or a ;!!!!!
ret
ShowLine:
ld (hl),c
add hl,de
djnz ShowLine
ret
DISPLAY $
align 256
FigureBuffer:
SAVESNA "smalltris.sna",tetristart