.NOLIST #INCLUDE "ti83plus.inc" .LIST .org 9D93h .db $BB,$6D ;PONG by Jon Martin START_PROGRAM: RES DonePrgm, (IY + DoneFlags) B_CALL (_RUNINDICOFF) XOR A LD (INT_PADDLE_ROW), A LD (INT_AI_SCORE), A LD (INT_PLAYER_SCORE), A LD A, 12 LD (INT_BALL_ROW), A LD A, 18 LD (INT_BALL_COL), A LD A, 1 LD (INT_COL_VECTOR), A LD (INT_ROW_VECTOR), A LD A, 24 LD (INT_AI_PADDLE_ROW), A B_CALL (_CLRLCDFULL) B_CALL (_GRBUFCLR) LD B, 8 FIRST_TITLE_LOOP: LD A, 12 LD (CURCOL), A LD A, B DEC A LD (CURROW), A LD HL, STR_TITLE B_CALL (_PUTS) LD A, 0 CALL WAIT_1 LD A, 12 LD (CURCOL), A LD A, B DEC A LD (CURROW), A LD HL, STR_SPACE_TITLE B_CALL (_PUTS) djnz FIRST_TITLE_LOOP LD B, 7 SECOND_TITLE_LOOP: LD A, B ADD A, 4 LD (CURCOL), A LD A, 0 LD (CURROW), A LD HL, STR_TITLE B_CALL (_PUTS) LD A, 0 CALL WAIT_1 LD A, B ADD A, 4 LD (CURCOL), A LD A, 0 LD (CURROW), A LD HL, STR_SPACE_TITLE B_CALL (_PUTS) djnz SECOND_TITLE_LOOP LD A, 6 LD (CURCOL), A LD A, 0 LD (CURROW), A LD HL, STR_TITLE B_CALL (_PUTS) B_CALL (_GETKEY) LD A, 30 LD (PENCOL), A LD A, 10 LD (PENROW), A LD HL, STR_AUTHOR B_CALL (_VPUTS) B_CALL (_GETKEY) LD A, 20 LD (PENCOL), A LD A, 16 LD (PENROW), A LD HL, STR_FIRST_ASM B_CALL (_VPUTS) LD A, 40 LD (PENCOL), A LD A, 22 LD (PENROW), A LD HL, STR_VERSION B_CALL (_VPUTS) CALL NEW_VOLLEY_PLAYER B_CALL (_CLRLCDFULL) CALL ARENA_DRAW MAIN_LOOP: CALL GETKEY CALL AI_MOVE LD A, (INT_END) CP 5 JP Z, END_GAME CALL CHECK_WALLS CALL ERASE_BALL LD A, (INT_COL_VECTOR) CP 1 CALL Z, INC_COL CP 0 CALL Z, DEC_COL LD A, (INT_ROW_VECTOR) CP 1 CALL Z, INC_ROW CP 0 CALL Z, DEC_ROW LD A, (INT_BALL_COL) CP 6 CALL Z, DEATH_CHECK LD A, (INT_BALL_COL) CP 84 CALL Z, DEATH_CHECK_AI CALL OUTPUT_BALL CALL OUTPUT_PLAYER_SCORE CALL OUTPUT_AI_SCORE CALL OUTPUT_PADDLE CALL OUTPUT_AI_PADDLE JP MAIN_LOOP CHECK_SCORE: LD A, (INT_PLAYER_SCORE) CP 10 CALL Z, VICTORY LD A, (INT_AI_SCORE) CP 10 CALL Z, DEFEAT RET DEFEAT: LD A, 3 LD (CURCOL), A LD A, 1 LD (CURROW), A LD HL, STR_YOU_LOSE B_CALL (_PUTS) B_CALL (_GETKEY) LD A, 5 LD (INT_END), A RET VICTORY: LD A, 3 LD (CURCOL), A LD A, 1 LD (CURROW), A LD HL, STR_YOU_WIN B_CALL (_PUTS) B_CALL (_GETKEY) LD A, 5 LD (INT_END), A RET OUTPUT_PADDLE: LD A, 5 LD (PENCOL), A LD A, (INT_PADDLE_ROW) LD (PENROW), A LD A, $7c B_CALL (_VPUTMAP) LD A, 5 LD (PENCOL), A LD A, (INT_PADDLE_ROW) ADD A, 6 LD (PENROW), A LD A, $7c B_CALL (_VPUTMAP) LD A, 5 LD (PENCOL), A LD A, (INT_PADDLE_ROW) ADD A, 12 LD (PENROW), A LD A, $7c B_CALL (_VPUTMAP) RET OUTPUT_AI_PADDLE: LD A, 91 LD (PENCOL), A LD A, (INT_AI_PADDLE_ROW) LD (PENROW), A LD A, $7c B_CALL (_VPUTMAP) LD A, 91 LD (PENCOL), A LD A, (INT_AI_PADDLE_ROW) ADD A, 12 LD (PENROW), A LD A, $7c B_CALL (_VPUTMAP) LD A, 91 LD (PENCOL), A LD A, (INT_AI_PADDLE_ROW) ADD A, 6 LD (PENROW), A LD A, $7c B_CALL (_VPUTMAP) RET ARENA_DRAW: LD B, 1 LD C, 1 LD D, 1 LD E, 63 LD H, 1 B_CALL (_ILINE) LD B, 3 LD C, 1 LD D, 3 LD E, 63 LD H, 1 B_CALL (_ILINE) LD B, 2 LD C, 1 LD D, 2 LD E, 63 LD H, 1 B_CALL (_ILINE) LD B, 96 LD C, 1 LD D, 96 LD E, 63 LD H, 1 B_CALL (_ILINE) LD B, 95 LD C, 1 LD D, 95 LD E, 63 LD H, 1 B_CALL (_ILINE) LD B, 94 LD C, 1 LD D, 94 LD E, 63 LD H, 1 B_CALL (_ILINE) LD B, 93 LD C, 1 LD D, 93 LD E, 63 LD H, 1 B_CALL (_ILINE) RET ADD_SCORE_PLAYER: LD A, (INT_PLAYER_SCORE) INC A LD (INT_PLAYER_SCORE), A CALL CHECK_SCORE CALL NEW_VOLLEY_PLAYER RET ADD_SCORE_AI: LD A, (INT_AI_SCORE) INc A LD (INT_AI_SCORE), A CALL CHECK_SCORE CALL NEW_VOLLEY_AI RET OUTPUT_BALL: LD A, (INT_BALL_COL) LD (PENCOl), A LD A, (INT_BALL_ROW) LD (PENROW), A LD A, $c9 B_CALL (_VPUTMAP) RET CHECK_WALLS: CALL CHECK_TOP CALL CHECK_BOTTOM CALL CHECK_RIGHT CALL CHECK_LEFT RET CHECK_TOP: LD A, (INT_BALL_ROW) CP 0 CALL Z, CHECK_TOP_1 RET CHECK_TOP_1: LD A, 1 LD (INT_ROW_VECTOR), A RET CHECK_BOTTOM: LD A, (INT_BALL_ROW) CP 57 CALL Z, CHECK_BOTTOM_1 RET CHECK_BOTTOM_1: XOR A LD (INT_ROW_VECTOR), A RET CHECK_RIGHT: LD A, (INT_BALL_COL) CP 84 CALL Z, CHECK_RIGHT_1 RET CHECK_RIGHT_1: XOR A LD (INT_COL_VECTOR), A RET CHECK_LEFT: LD A, (INT_BALL_COL) CP 6 CALL Z, CHECK_LEFT_1 RET CHECK_LEFT_1: LD A, 1 LD (INT_COL_VECTOR), A RET ERASE_BALL: LD A, (INT_BALL_COL) LD (PENCOL), A LD A, (INT_BALL_ROW) LD (PENROW), A LD A, $06 B_CALL (_VPUTMAP) LD A, (PENCOL) INC A LD (PENCOL), A LD A, $06 B_CALL (_VPUTMAP) RET INC_COL: LD A, (INT_BALL_COL) INC A LD (INT_BALL_COL), A RET DEC_COL: LD A, (INT_BALL_COL) DEC A LD (INT_BALL_COL), A RET INc_ROW: LD A, (INT_BALL_ROW) INC A LD (INT_BALL_ROW), A RET DEC_ROW: LD A, (INT_BALL_ROW) DEC A LD (INT_BALL_ROW), A RET NEW_VOLLEY_PLAYER: LD A, (INT_BALL_COL) LD (PENCOL), A LD A, (INT_BALL_RoW) LD (PENROW), A LD HL, STR_ERASE_BALL B_CALL (_VPUTS) B_CALL (_GETKEY) LD A, 1 LD (INT_COL_VECTOR), A LD (INT_ROW_VECTOR), A LD HL, INT_BALL_COL LD (HL), 18 B_CALL (_RANDOM) LD A, 57 B_CALL (_setxxop2) B_CALL (_FPMULT) B_CALL (_CONVOP1) LD A, E EX DE, HL LD A, H ADD A, L LD (INT_BALL_ROW), A RET NEW_VOLLEY_AI: LD A, (INT_BALL_COL) LD (PENCOL), A LD A, (INT_BALL_ROW) LD (PENROW), A LD HL, STR_ERASE_BALL B_CALL (_VPUTS) B_CALL (_GETKEY) LD HL, INT_COL_VECTOR LD (HL), 0 LD HL, INT_ROW_VECTOR LD (HL), 1 LD HL, INT_BALL_COL LD (HL), 78 LD HL, INT_BALL_ROW LD (HL), 12 B_CALL (_RANDOM) LD A, 57 B_CALL (_setxxop2) B_CALL (_FPMULT) B_CALL (_CONVOP1) LD A, E EX DE, HL LD A, H ADD A, L LD (INT_BALL_ROW), A RET GETKEY: B_CALL (_GETCSC) CP SKENTER CALL Z, PAUSE CP SKCLEAR CALL Z, END_GAME_SET CP SKUP CALL Z, UP CP SKDOWN CALL Z, DOWN RET AI_MOVE: CALL AI_NO_STICK CALL AI_NO_S_STICK CALL CHECK_UP_AI CALL CHECK_DOWN_AI RET AI_NO_STICK: LD A, (INT_AI_PADDLE_ROW) CP 0 CALL Z, AI_DOWN RET AI_NO_S_STICK: LD A, (INT_AI_PADDLE_ROW) CP 44 CALL Z, AI_UP CHECK_UP_AI: LD A, (INT_BALL_ROW) LD B, A LD A, (INT_AI_PADDLE_ROW) CP B CALL P, AI_UP RET CHECK_DOWN_AI: LD A, (INT_BALL_ROW) LD B, A LD A, (INT_AI_PADDLE_ROW) ADD A, 18 CP B CALL M, AI_DOWN RET AI_DOWN: LD A, (INT_AI_PADDLE_ROW) CP 44 RET Z LD A, 91 LD (PENCOL), A LD A, (INT_AI_PADDLE_ROW) LD (PENROW), A LD A, $20 B_CALL (_VPUTMAP) LD A, (INT_AI_PADDLE_ROW) ADD A, 4 LD (INT_AI_PADDLE_ROW), A RET AI_UP: LD A, (INT_AI_PADDLE_ROW) CP 0 RET Z LD A, 91 LD (PENCOL), A LD A, (INT_AI_PADDLE_ROW) ADD A, 12 LD (PENROW), A LD A, $20 B_CALL (_VPUTMAP) LD A, (INT_AI_PADDLE_ROW) SUB A, 4 LD (INT_AI_PADDLE_ROW), A RET PAUSE: B_CALL (_GETCSC) CP 0 RET NZ JR PAUSE END_GAME_SET: LD A, 5 LD (INT_END), A RET DEATH_CHECK: LD A, (INT_BALL_ROW) LD B, A LD A, (INT_PADDLE_ROW) DEC A CP B CALL P, ADD_SCORE_AI ADD A, 18 CP B CALL M, ADD_SCORE_AI RET DEATH_CHECK_AI: LD A, (INT_BALL_ROW) LD C, A LD A, (INT_AI_PADDLE_ROW) INC A CP C CALL P, ADD_SCORE_PLAYER ADD A, 16 CP C CALL M, ADD_SCORE_PLAYER RET UP: LD A, (INT_PADDLE_ROW) CP 0 RET Z LD B, A LD A, 5 LD (PENCOL), A LD A, B ADD A, 12 LD (PENROW), A LD A, $20 B_CALL (_VPUTMAP) LD A, (INT_PADDLE_ROW) SUB A, 3 LD (INT_PADDLE_ROW), A RET DOWN: LD A, (INT_PADDLE_ROW) CP 45 RET Z LD B, A LD A, 5 LD (PENCOL), A LD A, B LD (PENROW), A LD A, $20 B_CALL (_VPUTMAP) LD A, (INT_PADDLE_ROW) ADD A, 3 LD (INT_PADDLE_ROW), A RET WAIT_1: LD A, C INC A LD C, A LD A, C CP 50 RET Z LD D, 0 CALL WAIT_2 JR WAIT_1 WAIT_2: INC D LD A, D CP 100 RET Z JR WAIT_2 OUTPUT_PLAYER_SCORE: LD A, 39 LD (PENCOL), A LD A, 57 LD (PENROW), A LD A, (INT_PLAYER_SCORE) ADD A, $80 B_CALL (_VPUTMAP) RET OUTPUT_AI_SCORE: LD A, 51 LD (PENCOL), A LD A, 57 LD (PENROW), A LD A, (INT_AI_SCORE) ADD A, $80 B_CALL (_VPUTMAP) RET END_GAME: B_CALL (_CLRLCDFULL) LD B, 97 END_GAME_LOOP: LD C, 1 LD D, B LD E, 63 LD H, 1 B_CALL (_ILINE) djnz END_GAME_LOOP B_CALL (_GETKEY) B_CALL (_CLRLCDFULL) LD A, 31 LD (PENCOL), A LD A, 25 LD (PENROW), A LD HL, STR_END_1 B_CALL (_VPUTS) LD A, 35 LD (PENCOL), A LD A, 35 LD (PENROW), A LD HL, STR_END_2 B_CALL (_VPUTS) B_CALL (_GETKEY) LD A, 1 LD (CURCOL), A LD A, 6 LD (CURROW), A LD HL, STR_END_3 B_CALL (_PUTS) LD A, 2 LD (CURCOL), A LD A, 7 LD (CURROW), A LD HL, STR_END_4 B_CALL (_PUTS) B_CALL (_GETKEY) B_CALL (_CLRLCDFULL) B_CALL (_GRBUFCLR) B_CALL (_NEWLINE) RET ;END... w00t!!!!!!!! STR_ERASE_BALL: .DB " ", 0 STR_TITLE: .DB "Pong", 0 STR_sPACE_TITLE: .DB " ", 0 STR_AUTHOR: .DB "By Jon Martin", 0 STR_FIRST_ASM: .DB "my FIRST ASM PROG", 0 STR_VERSION: .DB "v 2.5", 0 STR_END_1: .DB "Thanks for", 0 STR_END_2: .DB "Playing", 0 STR_END_3: .DB "But you should", 0 STR_END_4: .DB "PRACTICE!!!!", 0 STR_YOU_LOSE .DB "You Lose", 0 STR_YOU_WIN: .DB "You Win!", 0 INT_BALL_COL: .DB 1 INT_COL_VECTOR: .DB 3 INT_BALL_ROW: .DB 5 INT_ROW_VECTOR: .DB 7 INT_PADDLE_ROW: .DB 9 INT_END: .DB 11 INT_AI_PADDLE_ROW: .DB 13 INT_PLAYER_SCORE: .DB 15 INT_AI_SCORE: .DB 17 .end