home *** CD-ROM | disk | FTP | other *** search
- #include asm86.h
- #include ti86asm.inc
-
- CurPiece = _textShadow
- NextPiece = _textShadow+9
- tmpPiece = _textShadow+18
- xy = _textShadow+27
- corner = _textShadow+29
- time = _textShadow+30
- mult = _textShadow+31
- rotrel = _textShadow+32
- score = _textShadow+33
- multtimer = _textShadow+35
- count = _textShadow+36
- board = _plotSScreen
-
- .org _asm_exec_ram
-
- call _runindicoff
- call _clrLCD
- res appTextSave,(iy+appflags)
- ld hl,CurPiece
- ld bc,36
- call Clear
- ld a,1
- ld (mult),a
- ld hl,$FC10
- ld b,62
- VLine:
- ld (hl),$01
- ld de,9
- add hl,de
- ld (hl),$80
- ld e,7
- add hl,de
- djnz VLine
- ld hl,$FC11
- ld de,$FFE1
- ld a,$FF
- ld b,8
- HLine:
- ld (hl),a
- ld (de),a
- inc hl
- inc de
- djnz HLine
- ld hl,$0D01
- ld (_currow),hl
- ld hl,SquarezText
- call _puts
- ld hl,$1854
- ld (_pencol),hl
- ld hl,InfoText
- call _vputs
- ld de,$254E
- ld (_pencol),de
- call _vputs
- ld de,$2C4E
- ld (_pencol),de
- call _vputs
- ld de,$324E
- ld (_pencol),de
- call _vputs
- ld de,$384E
- ld (_pencol),de
- call _vputs
- ld hl,$2558
- ld (_pencol),hl
- ld hl,HiInitials
- call _vputs
- ld hl,$256B
- ld (_pencol),hl
- ld hl,(Hiscore)
- call ShowHLDec
- call ShowScore
- call ShowMult
- ld hl,$FC31
- ld de,$1F
- ld b,6
- PutDots:
- ld (hl),%01010101
- inc hl
- ld (hl),%01010000
- add hl,de
- djnz PutDots
- call NewPiece
- call NewPiece
- ld hl,board
- ld bc,639
- call Clear
- ld hl,board+32
- ld de,board+544
- ld b,20
- ld a,128
- FillHBorder:
- ld (hl),a
- ld (de),a
- inc hl
- inc de
- djnz FillHBorder
- ld hl,board+33
- ld b,16
- FillVBorder:
- ld (hl),a
- ld de,17
- add hl,de
- ld (hl),a
- ld e,15
- add hl,de
- djnz FillVBorder
- WaitKey:
- call UpdateTimer
- ld b,15
- Wait:
- halt
- djnz Wait
- ld hl,(xy)
- ld a,($C000)
- cp K_EXIT
- jp z,Quit
- cp K_MORE
- jp z,Pause
- cp K_SECOND
- jp z,TryRotate
- cp K_XVAR
- jr z,TryDrop
- cp K_ENTER
- jr z,TryDrop
- cp K_ALPHA
- jp z,TryRotate
- push hl
- ld hl,RotRel
- res 0,(hl)
- pop hl
- dec a
- jr z,MoveDown
- dec a
- jr z,MoveLeft
- dec a
- jr z,MoveRight
- dec a
- jr nz,WaitKey
- MoveUp:
- dec l
- jr TestUpdate
- MoveLeft:
- dec h
- jr TestUpdate
- MoveRight:
- inc h
- jr TestUpdate
- MoveDown:
- inc l
- TestUpdate:
- ld de,CurPiece
- call TestPiece
- jr nz,WaitKey
- UpdatePiece:
- push hl
- ld hl,(xy)
- ld de,CurPiece
- call ShowPiece
- pop hl
- ld (xy),hl
- call ShowPiece
- jr WaitKey
-
- TryDrop:
- call TestCorner
- jr nz,WaitKey
- ld hl,(xy)
- call DropPiece
- call Search3x3Block
- ld a,(count)
- cp 16
- jr c,NoMultInc
- ld hl,mult
- inc (hl)
- call ShowMult
- NoMultInc:
- ld d,0
- ld e,a
- ld a,(time)
- rrca
- rrca
- rrca
- rrca
- and $0F
- inc a
- ld h,d
- ld l,a
- add hl,de
- ex de,hl
- ld l,h
- ld a,(mult)
- ld b,a
- Multiply:
- add hl,de
- djnz Multiply
- ld de,(score)
- add hl,de
- ld (score),hl
- call ShowScore
- call NewPiece
- jp WaitKey
-
- TryRotate:
- ld hl,RotRel
- bit 0,(hl)
- jp nz,WaitKey
- set 0,(hl)
- call RotatePiece
- ld de,tmpPiece
- ld hl,(xy)
- call TestPiece
- jp nz,WaitKey
- push de
- ld de,CurPiece
- call ShowPiece
- pop hl
- ld bc,9
- ldir
- ld hl,(xy)
- ld de,CurPiece
- call ShowPiece
- jp WaitKey
-
- Pause:
- ld hl,$FC00
- ld de,$A000
- ld bc,1024
- push bc
- push de
- push hl
- push hl
- ldir
- pop hl
- ld bc,1023
- call Clear
- PauseWait:
- call GET_KEY
- cp K_ENTER
- jr nz,PauseWait
- pop de
- pop hl
- pop bc
- ldir
- jp WaitKey
-
- NewPiece:
- ld de,NextPiece
- ld hl,$1B07
- call ShowPiece
- ex de,hl
- ld de,CurPiece
- ld bc,9
- ldir
- ld hl,$0202
- ld (xy),hl
- call ShowPiece
- ld a,r
- srl a
- cp 39
- jr c,InRange
- sub 39
- InRange:
- call ExtractPiece
- ld hl,$1B07
- call ShowPiece
- ld a,144
- ld (time),a
- ret
-
- RotatePiece:
- ld ix,RotateData
- ld de,tmpPiece
- ld hl,CurPiece
- push de
- push hl
- ld bc,9
- ldir
- pop de
- pop hl
- ld b,9
- Rotate:
- push bc
- push hl
- ld b,0
- ld c,(ix)
- add hl,bc
- ld a,(de)
- ld (hl),a
- inc de
- inc ix
- pop hl
- pop bc
- djnz Rotate
- ret
-
- TestCorner:
- ld de,CurPiece
- ld hl,(xy)
- ld c,h
- ld b,3
- TestCRow:
- push bc
- ld b,3
- TestCCol:
- ld a,(de)
- or a
- jr z,TC_NextSq
- ld a,h
- cp 5
- jr nc,TC_NextSq
- ld a,l
- cp 5
- jr nc,TC_NextSq
- pop bc
- ret
- TC_NextSq:
- inc de
- inc h
- djnz TestCCol
- pop bc
- ld h,c
- inc l
- djnz TestCRow
- xor a
- ret
-
- TestPiece:
- push de
- push hl
- call GetBoardPos
- ld b,3
- TestRow:
- push bc
- ld b,3
- TestCol:
- ld a,(de)
- or a
- jr z,NoCollide
- ld a,(hl)
- or a
- jr nz,Collide
- NoCollide:
- inc de
- inc hl
- djnz TestCol
- ld c,29
- add hl,bc
- pop bc
- djnz TestRow
- pop hl
- pop de
- xor a
- ret
- Collide:
- pop bc
- pop hl
- pop de
- inc a
- ret
-
- DropPiece:
- push hl
- call GetBoardPos
- ld de,CurPiece
- ld b,3
- DropRow:
- push bc
- ld b,3
- DropCol:
- ld a,(de)
- or (hl)
- ld (hl),a
- inc de
- inc hl
- djnz DropCol
- ld c,29
- add hl,bc
- pop bc
- djnz DropRow
- pop hl
- ret
-
- Search3x3Block:
- ld hl,board+66
- ld b,13
- SearchY:
- push bc
- ld b,14
- SearchX:
- ld a,(hl)
- and $7F
- jr z,SB_NextSq
- ld ix,SurData
- push bc
- push ix
- push hl
- ld b,8
- ld d,0
- CheckSurr:
- ld e,(ix)
- inc ix
- add hl,de
- ld a,(hl)
- or a
- jr z,NoBlock
- cp 128
- jr z,NoBlock
- djnz CheckSurr
- pop hl
- pop ix
- push hl
- ld b,9
- ClearSurr:
- ld (hl),2
- ld e,(ix)
- add hl,de
- inc ix
- djnz ClearSurr
- pop hl
- pop bc
- jr SB_NextSq
- NoBlock:
- pop hl
- pop ix
- pop bc
- SB_NextSq:
- inc hl
- djnz SearchX
- ld c,18
- add hl,bc
- pop bc
- djnz SearchY
-
- ld de,board+66
- ld hl,count
- ld (hl),0
- ld hl,$FC21
- ld c,$0F
- ld b,15
- ClearY:
- push bc
- ld b,16
- push hl
- ClearX:
- ld a,(de)
- cp 2
- jr nz,C_NextSq
- push hl
- ld hl,count
- inc (hl)
- pop hl
- xor a
- ld (de),a
- push bc
- push de
- ld de,16
- ld b,4
- C_PutSq:
- ld a,c
- and (hl)
- ld (hl),a
- add hl,de
- djnz C_PutSq
- ld de,-64
- add hl,de
- pop de
- pop bc
- C_NextSq:
- ld a,c
- cpl
- ld c,a
- cp $0F
- jr nz,CSameByte
- inc hl
- CSameByte:
- inc de
- djnz ClearX
- pop hl
- ld c,64
- add hl,bc
- ex de,hl
- ld c,16
- add hl,bc
- ex de,hl
- pop bc
- djnz ClearY
- ret
-
- ShowScore:
- ld hl,$326B
- ld (_pencol),hl
- ld hl,(score)
- ShowHLDec:
- ld de,_OP1+5
- xor a
- ld (de),a
- ld b,5
- Unpack:
- call UNPACK_HL
- add a,48
- dec de
- ld (de),a
- djnz Unpack
- ex de,hl
- call _vputs
- ret
-
- ShowMult:
- push af
- push hl
- ld hl,$2C77
- ld (_pencol),hl
- ld hl,MultText+1
- ld a,(mult)
- add a,'0'
- ld (hl),a
- dec hl
- call _vputs
- pop hl
- pop af
- ret
-
- UpdateTimer:
- ld hl,mult
- ld de,multtimer
- ld a,(hl)
- dec a
- jr z,DecTimer
- ld a,(de)
- dec a
- ld (de),a
- jr nz,DecTimer
- dec (hl)
- call ShowMult
- DecTimer:
- ld hl,time
- dec (hl)
- ld a,(hl)
- cp 255
- push af
- jr z,ShowTime
- rrca
- rrca
- rrca
- rrca
- and $0F
- ShowTime:
- add a,49
- ld hl,$387B
- ld (_pencol),hl
- call _vputmap
- pop af
- ret nz
- OutOfTime:
- pop hl
- call TestCorner
- jp z,TryDrop
- ld hl,$0503
- ld (_currow),hl
- ld hl,GameOverText
- set textInverse,(iy+textflags)
- call _puts
- res textInverse,(iy+textflags)
- GameOverWait:
- call GET_KEY
- cp K_ENTER
- jr z,Quit
- cp K_EXIT
- jr nz,GameOverWait
- Quit:
- call GET_KEY
- CheckHiscore:
- ld hl,(Hiscore)
- ld de,(score)
- or a
- sbc hl,de
- jp nc,NoHi
- NewHi:
- ld hl,HiInitials
- ld a,'A'
- ld (hl),a
- inc hl
- ld (hl),a
- inc hl
- ld (hl),a
- inc hl
- inc hl
- ld (hl),e
- inc hl
- ld (hl),d
- call _clrLCD
- ld (_currow),de
- ld hl,HiText
- call _puts
- ld de,2
- ld (_currow),de
- call _puts
- xor a
- ld (count),a
- ld ix,HiInitials
- ShowIni:
- ld hl,$1002
- ld (_currow),hl
- ld hl,HiInitials
- call _puts
- Invert:
- ld a,(count)
- ld d,0
- ld e,a
- ld hl,HiInitials
- add a,16
- ld (_curcol),a
- ld a,(ix)
- ShowLet:
- ld (ix),a
- set textInverse,(iy+textflags)
- call _putmap
- res textInverse,(iy+textflags)
- IniKey:
- call GET_KEY
- ld hl,count
- ld b,(ix)
- cp K_ENTER
- jr z,NextLet
- dec a
- jr z,LetDec
- dec a
- jr z,PrevLet
- dec a
- jr z,NextLet
- dec a
- jr nz,IniKey
- LetInc:
- ld a,b
- inc a
- cp 91
- jr nz,ShowLet
- ld a,'A'
- jr ShowLet
- LetDec:
- ld a,b
- dec a
- cp 64
- jr nz,ShowLet
- ld a,'Z'
- jr ShowLet
- PrevLet:
- ld a,(hl)
- or a
- jr z,IniKey
- dec ix
- dec (hl)
- jr ShowIni
- NextLet:
- ld a,(hl)
- cp 2
- jr z,SaveHi
- inc (hl)
- inc ix
- jr ShowIni
- SaveHi:
- ld hl,ProgName
- rst 20h
- rst 10h
- ex de,hl
- ld a,b
- ld de,HiInitials-_asm_exec_ram+4
- add hl,de
- adc a,0
- ld de,HiInitials
- ld b,6
- RepCopy:
- push af
- push hl
- call $46C3
- ld a,(de)
- ld (hl),a
- pop hl
- pop af
- call $4637
- inc de
- djnz RepCopy
- NoHi:
- set appTextSave,(iy+appflags)
- res OnInterrupt,(iy+onFlags)
- call _clrScrn
- call $4A95
- ret
-
- GetBoardPos:
- ld c,h
- ld b,0
- ld a,l
- add a,a
- add a,a
- add a,a
- ld h,b
- ld l,a
- add hl,hl
- add hl,hl
- add hl,bc
- ld bc,board
- add hl,bc
- ret
-
- ShowPiece:
- push de
- push hl
- call GetScreenOfs
- ld b,3
- PutRow:
- push bc
- push hl
- ld b,3
- PutCol:
- ld a,(de)
- inc de
- or a
- jr z,NoSq
- push bc
- push de
- ld de,16
- ld b,4
- PutSq:
- ld a,c
- xor (hl)
- ld (hl),a
- add hl,de
- djnz PutSq
- ld de,-64
- add hl,de
- pop de
- pop bc
- NoSq:
- ld a,c
- cpl
- ld c,a
- cp $F0
- jr nz,SameByte
- inc hl
- SameByte:
- djnz PutCol
- pop hl
- ld c,64
- add hl,bc
- pop bc
- djnz PutRow
- pop hl
- pop de
- ret
-
- GetScreenOfs:
- push de
- ld a,h
- ld h,l
- ld l,0
- ld d,l
- srl h
- rr l
- srl h
- rr l
- ld c,$F0
- srl a
- jr nc,EvenX
- ld c,$0F
- EvenX:
- ld e,a
- add hl,de
- ld de,$FBA0
- add hl,de
- pop de
- ret
-
- ExtractPiece:
- push de
- ld hl,Pieces
- ld b,0
- ld c,a
- srl c
- srl c
- srl c
- add hl,bc
- ld c,128
- and 7
- jr z,NoShift
- ld b,a
- RepShift:
- srl c
- djnz RepShift
- NoShift:
- ld b,9
- ExtractBit:
- ld a,c
- and (hl)
- ld a,0
- jr z,NoBit
- inc a
- NoBit:
- ld (de),a
- inc de
- inc hl
- inc hl
- inc hl
- inc hl
- inc hl
- djnz ExtractBit
- pop de
- ret
-
- Clear:
- ld d,h
- ld e,l
- inc de
- ld (hl),0
- ldir
- ret
-
- Pieces:
- .db %11111111,%11010110,%11101100,%11110011,%10111110
- .db %11111111,%11011110,%01111111,%11111111,%11111010
- .db %11011111,%10001111,%01110011,%01101011,%01011000
- .db %11110110,%10111011,%11111010,%00101110,%01101110
- .db %11101111,%11111111,%10011111,%11011101,%11100000
- .db %11110101,%01111101,%11111100,%00010110,%10010000
- .db %11011010,%11101001,%11000011,%00100000,%00000100
- .db %10101111,%01100110,%00011001,%11011100,%00000000
- .db %01111001,%00110001,%10100100,%10000000,%00000000
-
- RotateData:
- .db 2,5,8,1,4,7,0,3,6
-
- SurData:
- .db 1,1,30,1,1,30,1,1
-
- GameOverText:
- .db " Game Over ",0
-
- SquarezText:
- .db "Squarez",0
-
- InfoText:
- .db "Next",0
- .db "Hi:",0
- .db "Mult:",0
- .db "Score:",0
- .db "Time:",0
-
- MultText:
- .db "x1",0
-
- HiText:
- .db "A New Hiscore!",0
- .db "Your initials: ",0
-
- HiInitials:
- .db "---",0
-
- Hiscore:
- .dw 0
-
- ProgName:
- .db $12,7,"squarez"
-
- .end
-