define Angle $100
define BlockNumber $101
define ascii $ff
define rotateLeft $63
define rotateRight $76
define dropDown $7a
define PositionCounter $105
define moveLeft $61
define moveRight $73
Start:
ldy #$10
lda #$01
sta Angle
lda $fe
sta $102
FindBlockNumber:
jsr Compare2TBlock
jsr Compare2OBlock
jsr Compare2IBlock
jsr Compare2JBlock
jsr Compare2LBlock
jsr Compare2SBlock
jsr Compare2ZBlock
jmp Start
detectKeys:
lda ascii
jsr RightMove
jsr LeftMove
jsr RightRotate
jsr LeftRotate
jsr DownDrop
rts
RightMove:
cmp #moveRight
beq newRightPosition
rts
newRightPosition:
lda #$00
sta ascii
sta $200,y
sta $201,y
sta $202,y
sta $203,y
sta $220,y
sta $221,y
sta $222,y
sta $223,y
sta $240,y
sta $241,y
sta $242,y
sta $243,y
sta $260,y
sta $261,y
sta $262,y
sta $263,y
iny
rts
LeftMove:
cmp #moveLeft
beq newLeftPosition
rts
newLeftPosition:
lda #$00
sta ascii
sta $200,y
sta $201,y
sta $202,y
sta $203,y
sta $220,y
sta $221,y
sta $222,y
sta $223,y
sta $240,y
sta $241,y
sta $242,y
sta $243,y
sta $260,y
sta $261,y
sta $262,y
sta $263,y
dey
rts
RightRotate:
cmp #rotateRight
beq newRightAngle
rts
newRightAngle:
lda #$00
sta ascii
sta $200,y
sta $201,y
sta $202,y
sta $203,y
sta $220,y
sta $221,y
sta $222,y
sta $223,y
sta $240,y
sta $241,y
sta $242,y
sta $243,y
sta $260,y
sta $261,y
sta $262,y
sta $263,y
inc Angle
lda Angle
cmp #$05
bpl resetAngle
rts
resetAngle:
lda #$01
sta Angle
rts
LeftRotate:
cmp #rotateLeft
beq newLeftAngle
rts
newLeftAngle:
lda #$00
sta ascii
sta $200,y
sta $201,y
sta $202,y
sta $203,y
sta $220,y
sta $221,y
sta $222,y
sta $223,y
sta $240,y
sta $241,y
sta $242,y
sta $243,y
sta $260,y
sta $261,y
sta $262,y
sta $263,y
dec Angle
lda Angle
cmp #$01
bmi resetAngle2
rts
resetAngle2:
lda #$04
sta Angle
rts
DownDrop:
cmp #dropDown
beq newDownPosition
rts
newDownPosition:
lda #$00
sta ascii
sta $200,y
sta $201,y
sta $202,y
sta $203,y
sta $220,y
sta $221,y
sta $222,y
sta $223,y
sta $240,y
sta $241,y
sta $242,y
sta $243,y
sta $260,y
sta $261,y
sta $262,y
sta $263,y
upTo20:
iny
inc PositionCounter
lda PositionCounter
cmp #$20
bne upTo20
lda #$00
sta PositionCounter
rts
Compare2TBlock:
cmp #$01
beq TBlockPicked
rts
TBlockPicked:
lda #$01
sta BlockNumber
lda Angle
cmp #$01
beq TBlockAngle0
cmp #$02
beq TBlockAngle90
cmp #$03
beq TBlockAngle180
cmp #$04
beq TBlockAngle270
TBlockAngle0:
jsr TBlock1
jsr detectKeys
jmp TBlockPicked
TBlockAngle90:
jsr TBlock2
jsr detectKeys
jmp TBlockPicked
TBlockAngle180:
jsr TBlock3
jsr detectKeys
jmp TBlockPicked
TBlockAngle270:
jsr TBlock4
jsr detectKeys
jmp TBlockPicked
TBlock1:
lda #$01
sta $220,y
sta $221,y
sta $222,y
sta $241,y
rts
TBlock2:
lda #$01
sta $201,y
sta $221,y
sta $222,y
sta $241,y
rts
TBlock3:
lda #$01
sta $201,y
sta $221,y
sta $222,y
sta $220,y
rts
TBlock4:
lda #$01
sta $201,y
sta $220,y
sta $221,y
sta $241,y
rts
Compare2OBlock:
cmp #$02
beq OBlockPicked
rts
OBlockPicked:
lda #$02
sta BlockNumber
OBlocksubRoutines:
jsr OBlock
jsr detectKeys
jmp OBlocksubRoutines
OBlock:
lda #$03
sta $200,y
sta $201,y
sta $220,y
sta $221,y
rts
Compare2IBlock:
cmp #$03
beq IBlockPicked
rts
IBlockPicked:
lda #$03
sta BlockNumber
lda Angle
cmp #$01
beq IBlockAngle0
cmp #$02
beq IBlockAngle90
cmp #$03
beq IBlockAngle0
cmp #$04
beq IBlockAngle90
IBlockAngle0:
jsr IBlock1
jsr detectKeys
jmp IBlockPicked
IBlockAngle90:
jsr IBlock2
jsr detectKeys
jmp IBlockPicked
IBlock1:
lda #$04
sta $220,y
sta $221,y
sta $222,y
sta $223,y
rts
IBlock2:
lda #$04
sta $222,y
sta $202,y
sta $242,y
sta $262,y
rts
Compare2JBlock:
cmp #$04
beq JBlockPicked
rts
JBlockPicked:
lda #$01
sta BlockNumber
lda Angle
cmp #$01
beq JBlockAngle0
cmp #$02
beq JBlockAngle90
cmp #$03
beq JBlockAngle180
cmp #$04
beq JBlockAngle270
JBlockAngle0:
jsr JBlock1
jsr detectKeys
jmp JBlockPicked
JBlockAngle90:
jsr JBlock2
jsr detectKeys
jmp JBlockPicked
JBlockAngle180:
jsr JBlock3
jsr detectKeys
jmp JBlockPicked
JBlockAngle270:
jsr JBlock4
jsr detectKeys
jmp JBlockPicked
JBlock1:
lda #$05
sta $201,y
sta $221,y
sta $241,y
sta $240,y
rts
JBlock2:
lda #$05
sta $200,y
sta $220,y
sta $221,y
sta $222,y
rts
JBlock3:
lda #$05
sta $201,y
sta $202,y
sta $221,y
sta $241,y
rts
JBlock4:
lda #$05
sta $221,y
sta $220,y
sta $222,y
sta $242,y
rts
Compare2LBlock:
cmp #$05
beq LBlockPicked
rts
LBlockPicked:
lda #$01
sta BlockNumber
lda Angle
cmp #$01
beq LBlockAngle0
cmp #$02
beq LBlockAngle90
cmp #$03
beq LBlockAngle180
cmp #$04
beq LBlockAngle270
LBlockAngle0:
jsr LBlock1
jsr detectKeys
jmp LBlockPicked
LBlockAngle90:
jsr LBlock2
jsr detectKeys
jmp LBlockPicked
LBlockAngle180:
jsr LBlock3
jsr detectKeys
jmp LBlockPicked
LBlockAngle270:
jsr LBlock4
jsr detectKeys
jmp LBlockPicked
LBlock1:
lda #$07
sta $201,y
sta $221,y
sta $241,y
sta $242,y
rts
LBlock2:
lda #$07
sta $240,y
sta $220,y
sta $221,y
sta $222,y
rts
LBlock3:
lda #$07
sta $201,y
sta $200,y
sta $221,y
sta $241,y
rts
LBlock4:
lda #$07
sta $221,y
sta $220,y
sta $222,y
sta $202,y
rts
Compare2SBlock:
cmp #$06
beq SBlockPicked
rts
SBlockPicked:
lda #$01
sta BlockNumber
lda Angle
cmp #$01
beq SBlockAngle0
cmp #$02
beq SBlockAngle90
cmp #$03
beq SBlockAngle180
cmp #$04
beq SBlockAngle270
SBlockAngle0:
jsr SBlock1
jsr detectKeys
jmp SBlockPicked
SBlockAngle90:
jsr SBlock2
jsr detectKeys
jmp SBlockPicked
SBlockAngle180:
jsr SBlock1
jsr detectKeys
jmp SBlockPicked
SBlockAngle270:
jsr SBlock2
jsr detectKeys
jmp SBlockPicked
SBlock1:
lda #$08
sta $221,y
sta $201,y
sta $222,y
sta $242,y
rts
SBlock2:
lda #$08
sta $221,y
sta $220,y
sta $202,y
sta $201,y
rts
Compare2ZBlock:
cmp #$07
beq ZBlockPicked
rts
ZBlockPicked:
lda #$01
sta BlockNumber
lda Angle
cmp #$01
beq ZBlockAngle0
cmp #$02
beq ZBlockAngle90
cmp #$03
beq ZBlockAngle180
cmp #$04
beq ZBlockAngle270
ZBlockAngle0:
jsr ZBlock1
jsr detectKeys
jmp ZBlockPicked
ZBlockAngle90:
jsr ZBlock2
jsr detectKeys
jmp ZBlockPicked
ZBlockAngle180:
jsr ZBlock1
jsr detectKeys
jmp ZBlockPicked
ZBlockAngle270:
jsr ZBlock2
jsr detectKeys
jmp ZBlockPicked
ZBlock1:
lda #$0c
sta $221,y
sta $241,y
sta $222,y
sta $202,y
rts
ZBlock2:
lda #$0c
sta $221,y
sta $220,y
sta $242,y
sta $241,y
rts