Public feed #603629

Miscellany

public text v1 · immutable
Raw Edit
·published 2007-07-04 23:07 UTC
rendered paste body
.nolist
#include "includes/ion.inc"
#include "includes/ti83plus.inc"
.list
	.org progstart-2
	.db $BB,$6D
	xor a	;should be "ret" if using Ion libs
	jr nc,begin
	.db "Jump!",0
playerLoc	.equ	appsbackupscreen
playerDelta	.equ appsbackupscreen+1
score		.equ appsbackupscreen+2
cntr	.equ appsbackupscreen+4
lvl_cntr	.equ appsbackupscreen+5
level		.equ appsbackupscreen+6
height		.equ appsbackupscreen+7
frame		.equ appsbackupscreen+8
rTemp		.equ appsbackupscreen+9
begin:

	b_call(_grbufclr)
	b_call(_runindicoff)
	halt
	halt
	ld hl,0
	ld (score),hl
	xor a
	ld (playerDelta),a
	ld (lvl_cntr),a
	ld (frame),a
	inc a
	ld (level),a
	ld a,56
	ld (height),a
	sub 5
	ld (playerLoc),a
	ld a,96
	ld (cntr),a
	ld b,12
drawFirst:
	push bc
	ld a,b
	add a,a
	add a,a
	add a,a
	sub 8
	ld l,56
	ld ix,spr_platform
	call orsprite
	pop bc
	djnz drawFirst
	call drawPlayer
	call fastCopy
gameLoop:
	call drawPlayer
	ld a,(frame)
	add a,5
	cp  40
	call z,resFrame
	ld (frame),a
	ld a,$FE
	out (1),a
	nop
	nop
	in a,(1)
	bit 3,a
	call z,jump
	ld a,(playerDelta)
	or a
	call nz,jumping
	ld a,(playerLoc)
	add a,5
	ld e,a
	ld a,9
	call pixeltest
	jr nz,endFall
	ld a,(playerLoc)
	inc a
	ld (playerLoc),a
endFall:
	ld a,(cntr)
	dec a
	cp 87
	call z,newBlock
	ld (cntr),a
	call scrollscreen
	ld a,(height)
	ld l,a
	ld a,(cntr)
	ld ix,spr_platform
	call orsprite
	call drawPlayer
	call fastcopy
	jr gameLoop
resFrame:
	xor a
	ret
newBlock:
	ld b,2
	call random
	or a
	jr z,goUp
	ld a,(height)
	cp 56
	jr z,noMove
	ld b,a
	ld a,(level)
	add a,b
	ld (height),a
	jr noMove
goUp:
	ld a,(height)
	cp 20
	jr z,noMove
	ld b,a
	ld a,(level)
	sub b
	ld (height),a
noMove:
	ld a,95
	ret
jumping:
	ld a,(playerLoc)
	dec a
	dec a
	ld (playerLoc),a
	ld a,(playerDelta)
	dec a
	ld (playerDelta),a
	ret
jump:
	ld a,(playerLoc)
	add a,5
	ld e,a
	ld a,9
	call pixeltest
	ret z
	ld a,15
	ld (playerDelta),a
	ret
drawPlayer:
	ld d,0
	ld a,(frame)
	ld e,a
	ld hl,spr_Player_1
	add hl,de
	push hl
	pop ix
	ld a,(playerLoc)
	ld l,a
	ld a,7
	ld b,5
	call isprite
	ret
scrollScreen:
	ld hl,plotsscreen+767
	ld b,64
ssLoop:
	or a
	rl (hl)
	dec hl
	rl (hl)
	dec hl
	rl (hl)
	dec hl
	rl (hl)
	dec hl
	rl (hl)
	dec hl
	rl (hl)
	dec hl
	rl (hl)
	dec hl
	rl (hl)
	dec hl
	rl (hl)
	dec hl
	rl (hl)
	dec hl
	rl (hl)
	dec hl
	rl (hl)
	dec hl
	djnz ssLoop
	ret
pixelTest:
	ld	d,$00
	ld	h,d
	ld	l,e
	add	hl,de
	add	hl,de
	add	hl,hl
	add	hl,hl
	ld	de,plotsscreen
	add	hl,de
	ld	b,$00
	ld	c,a
	and	%00000111
	srl	c
	srl	c
	srl	c
	add	hl,bc
	ld	b,a
	inc	b
	ld	a,%00000001
ptLoop:
	rrca
	djnz	ptLoop
	and (hl)
	or a
	ret
;================== Functions exactly like iputsprite, but OR's the sprite instead ==================

orSprite:
	ld b,8
    ld    e,l
    ld    h,$00
    ld    d,h
    add    hl,de
    add    hl,de
    add    hl,hl
    add    hl,hl               ;Find the Y displacement offset 
    ld    e,a
    and    $07               ;Find the bit number
    ld    c,a
    srl    e
    srl    e
    srl    e
    add    hl,de             ;Find the X displacement offset
    ld    de,plotsscreen
    add    hl,de
orSpriteLoop1:
	ld    d,(ix)             ;loads image byte into D
    ld    e,$00
    ld    a,c
    or    a
    jr    z,orSpriteSkip1
orSpriteLoop2:
    srl    d                  ;rotate to give out smooth moving
    rr    e
    dec    a
    jr    nz,orSpriteLoop2
orSpriteSkip1:
    ld    a,(hl)
    or    d
    ld    (hl),a
    inc    hl
    ld    a,(hl)
    or    e
    ld    (hl),a              ;copy to buffer using XOR logic
    ld    de,$0B
    add    hl,de
    inc    ix                   ;Set for next byte of image
    djnz    orSpriteLoop1 
    ret
iSprite:
    ld    e,l
    ld    h,$00
    ld    d,h
    add    hl,de
    add    hl,de
    add    hl,hl
    add    hl,hl               ;Find the Y displacement offset 
    ld    e,a
    and    $07               ;Find the bit number
    ld    c,a
    srl    e
    srl    e
    srl    e
    add    hl,de             ;Find the X displacement offset
    ld    de,plotsscreen
    add    hl,de
iSpriteLoop1:
	ld    d,(ix)             ;loads image byte into D
    ld    e,$00
    ld    a,c
    or    a
    jr    z,iSpriteSkip1
iSpriteLoop2:
    srl    d                  ;rotate to give out smooth moving
    rr    e
    dec    a
    jr    nz,iSpriteLoop2
iSpriteSkip1:
    ld    a,(hl)
    xor    d
    ld    (hl),a
    inc    hl
    ld    a,(hl)
    xor    e
    ld    (hl),a              ;copy to buffer using XOR logic
    ld    de,$0B
    add    hl,de
    inc    ix                   ;Set for next byte of image
    djnz    iSpriteLoop1 
    ret
fastCopy:
	di
	exx
	ld a,$80                        ; 7
	out ($10),a                     ; 11
	out ($20),a                     ; 11  Sets first two bits to zero to slow calc down if 83pse/84xx
	ld hl,plotsscreen-12-(-(768)+1) ; 10
	ld a,$20                        ; 7
	ld c,a                          ; 4
	inc hl                          ; 6 waste
	dec hl                          ; 6 waste
fastCopyAgain:
	ld b,64                         ; 7
	inc c                           ; 4
	ld de,-(12*64)+1                ; 10
	out ($10),a                     ; 11
	add hl,de                       ; 11
	ld de,10                        ; 10
fastCopyLoop:
	add hl,de                       ; 11
	inc hl                          ; 6 waste
	inc hl                          ; 6 waste
	inc de                          ; 6
	ld a,(hl)                       ; 7
	out ($11),a                     ; 11
	dec de                          ; 6
	djnz fastCopyLoop               ; 13/8
	ld a,c                          ; 4
	cp $2B+1                        ; 7
	jr nz,fastCopyAgain             ; 10/1
	exx
	ei
	ret
random:
 push   hl
 push   de
 ld hl,(rTemp)
 ld a,r
 ld d,a
 ld e,(hl)
 add    hl,de
 add    a,l
 xor    h
 ld (rTemp),hl
 sbc    hl,hl
 ld e,a
 ld d,h
randomLoop:
 add    hl,de
 djnz   randomLoop
 ld a,h
 pop    de
 pop    hl
 ret
spr_platform:
	.db %11111111
	.db %10101010
	.db %00000000
	.db %00000000
	.db %00000000
	.db %00000000
	.db %01010101
	.db %11111111
spr_player_1:
	.db %01000000
	.db %01100000
	.db %01000000
	.db %01100000
	.db %10000000
spr_player_2:
	.db %01000000
	.db %01100000
	.db %01000000
	.db %01000000
	.db %10100000
spr_player_3:
	.db %01000000
	.db %01100000
	.db %01000000
	.db %01000000
	.db %01000000
spr_player_4:
	.db %01000000
	.db %01100000
	.db %01000000
	.db %01000000
	.db %10100000
spr_player_5:
	.db %01000000
	.db %01100000
	.db %01000000
	.db %11000000
	.db %00100000
spr_player_6:
	.db %01000000
	.db %01100000
	.db %01000000
	.db %01000000
	.db %10100000
spr_player_7:
	.db %01000000
	.db %01100000
	.db %01000000
	.db %01000000
	.db %01000000
spr_player_2:
	.db %01000000
	.db %01100000
	.db %01000000
	.db %01000000
	.db %10100000
.end
.end