; ; ; ; PockePonga ; For PC-E500, PC-E550, PC-E650, ; PC-1480U, PC-1490U, PC-1490UII, PC-U6000 ; Written by jsurfer (http://home.comcast.net/~cheezsj/) ; On Sunday, Feb 26, 2006 ; Requires 1647 bytes ; of free memory to run ; (64 bytes are for ; string data.) ; ; ; ; Put string data to external RAM CALL PTDATA ; ; ; ; ; MAIN ; CALL CLRSCRN ;Clear screen CALL REINIT ;Reinitialize everything CALL DWTITLE ;Draw title screen OMAINLP: ;Outer main loop CALL CLRSCRN ;Clear screen CALL REINIT ;Reinitialize everything CALL DWSCRN ;Draw screen CALL DWEDGE ;Draw edge CALL DWBAR ;Draw bar CALL DWBALL ;Draw ball MAINLP: ;Main loop PRE 30H MV A, (30) CMP A, 1H JPZ EXITML ;Exit main loop if Q=true CALL UNDWBL ;Undraw ball CALL MVBALL ;Move ball CALL DWBALL ;Draw ball CALL DWBAR ;Draw bar PRE 30H MV A, (31) CMP A, 1H JPZ EXITML ;Exit main loop if MISSED=true CALL CKKEY ;Check key entry JP MAINLP ;Jump to main loop EXITML: MV IL, 45H ;Clear key buffer PRE 30H MVW (0D6H),1H ;Put 0H to (cx) CALLF 0FFFE8H CALL ASKREPLAY ;Ask if want to replay PRE 30H MV A, (32) CMP A, 1H JPZ EXITOML ;Exit outer loop if user chose NO JP OMAINLP EXITOML: CALL CLRSCRN CALL ENDSCRN ;Display end screen RETF ; ; END OF MAIN ; ; ; ; CLRSCRN: ;Clear screen PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) MV IL, 51H CALLF 0FFFE8H RET ; ; ; ENDSCRN: ;Display end screen PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) MV IL, 42H PRE 30H MV (0D4H), 0FH ;Put location X into (bl) PRE 30H MV (0D5H), 1H ;Put location Y into (bh) MV X, 0BFFBAH ;Put address of string PockePonga MV Y, 10 ;Put length of string into Y CALLF 0FFFE8H ;Display the string PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) MV IL, 42H PRE 30H MV (0D4H), 09H ;Put location X into (bl) PRE 30H MV (0D5H), 2H ;Put location Y into (bh) MV X, 0BFFDAH ;Put address of Sunday... MV Y, 21 ;Put length of string into Y CALLF 0FFFE8H ;Display the string RET ; ; ; DWTITLE: ;Draw title screen PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) MV IL, 42H PRE 30H MV (0D4H), 0FH ;Put location X into (bl) PRE 30H MV (0D5H), 1H ;Put location Y into (bh) MV X, 0BFFBAH ;Put address of string PockePonga MV Y, 10 ;Put length of string into Y CALLF 0FFFE8H ;Display the string MV A, 0H SLTITL: ;Start of loop in draw title MV I, 0EFFFH ;Length of the wait WAIT INC A CMP A, 20H JPZ ELTITL JP SLTITL ELTITL: ;End of loop in draw title RET ; ; ; REINIT: ;Reinitialize everything ; Initialization for internal RAM PRE 30H MVW (0), 100 ;Bar X PRE 30H MVW (2), 10 ;Bar Y PRE 30H MVW (4), 0 ;BarY top edge PRE 30H MVW (6), 28 ;Bar Y bottom edge PRE 30H MVW (8), 160 ;BallX PRE 30H MVW (10), 14 ;BallY PRE 30H MV (12), 1 ;BallDirectionX (0=left, 1=right) PRE 30H MV (13), 1 ;BallDirectionY (0=up, 1=down) PRE 30H MVW (14), 170 ;Right edge X PRE 30H MVW (16), 0 ;Top edge Y PRE 30H MVW (18), 28 ;Bottom edge Y PRE 30H MV (20), 0 ;Loop counter 1 PRE 30H MV (21), 0 ;Loop counter 2 PRE 30H MVW (22), 0 ;Temp storage 1 PRE 30H MVW (24), 0 ;Temp storage 2 PRE 30H MVW (26), 0 ;Loop counter 3 PRE 30H MVW (28),0 ;Temp storage 3 PRE 30H MV (30), 0 ;QUIT boolean (0=false, 1=true) PRE 30H MV (31), 0 ;MISSED boolean (0=false, 1=true) PRE 30H MV (32), 0 ;No is chosen boolean (0=false, 1=true) RET ; ; ; ASKREPLAY: ;Ask user for replay PRE 30H MVW (0D6H), 0H ;Put 0H into (cx) MV IL, 42H PRE 30H MV (0D4H), 0EH ;Put location X into (bl) PRE 30H MV (0D5H), 2H ;Put location Y into (bh) MV X, 0BFFEFH ;Put address of string REPLAY? MV Y, 12 ;Put length of string into Y CALLF 0FFFE8H ;Display the string BGASK: PRE 30H MV (0F0H), 0FH PRE 30H MV (0F1H), 0H PRE 30H MV A, (0F2H) SUB A, 10H ;N pressed? JPZ NPRESSED PRE 30H MV A, (0F2H) SUB A, 01H ;Y pressed? JPZ EDASK JP BGASK ;Jump to beginning of ASK NPRESSED: PRE 30H MV (32), 1 ;Set 'NO IS CHOSEN' to TRUE JP EDASK ;Jump to end of ASK EDASK: MV IL, 45H ;Clear key buffer PRE 30H MVW (0D6H), 1H CALLF 0FFFE8H RET ; ; ; CKKEY: ; Check for key entry PRE 30H MV (0F0H), 01H PRE 30H MV (0F1H), 0H PRE 30H MV A, (0F2H) SUB A, 2H JPNZ CKAKEY ;Jump if Q is not pressed PRE 30H MV (30), 1 ;Set QUIT boolean to TRUE JP ECKKEY ;Jump to end of CKKEY because Q is pressed CKAKEY: ;Checks if 'A' key is pressed PRE 30H MV A, (0F2H) SUB A, 08H JPNZ CKZKEY ;'A' key not pressed so jump PRE 30H MV A, (2) DEC A PRE 30H MV (2), A PRE 30H SUB A, (16) ;Check if hit top edge Y JPNZ ECKKEY ;If not, jump to EXITCHECKKEY PRE 30H MV A, (2) INC A PRE 30H MV (2), A JP ECKKEY ;Jump to end of CKKEY CKZKEY: ;Check if 'Z' key is pressed PRE 30H MV A, (0F2H) SUB A, 20H JPNZ ECKKEY PRE 30H MV A, (2) INC A PRE 30H MV (2), A PRE 30H MV A, (18) DEC A DEC A DEC A PRE 30H MV (28), A PRE 30H MV A, (2) PRE 30H SUB A, (28) ;Check if hit bottom edge Y JPNZ ECKKEY ;If not, jump to EXITCHECKKEY PRE 30H MV A, (2) DEC A PRE 30H MV (2), A JP ECKKEY ;Jump to end of CKKEY ECKKEY: ;End fo CKKEY RET ; ; ; DWEDGE: ;Draw right edge PRE 30H MV A, (14) ;Get right edge ADD A, 4H ;Add 4 for ball size PRE 30H MV (22), A ;Put it in TEMP PRE 30H MV (20), 0H LSEDGE: ;Loop start of edge PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) MV IL, 4CH PRE 30H MV X, (22) PRE 30H MV Y, (20) MV A, 0H CALLF 0FFFE8H PRE 30H MV A, (20) INC A PRE 30H MV (20), A PRE 30H CMP A, 20H JPNZ LSEDGE ;Jump to loop start of edge RET ; ; ; DWBAR: ;Draw bar PRE 30H MV (20), 0H ;Set loop counter to 0 LSBAR: ;Loop start of Draw Bar PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) MV IL, 4CH PRE 30H MV X, (0) PRE 30H MV BA, (2) PRE 30H ADD A, (20) PRE 30H MV (22), A PRE 30H MV Y, (22) MV A, 0H CALLF 0FFFE8H PRE 30H MV A, (20) INC A PRE 30H MV (20), A PRE 30H CMP A, 7H ;Length of bar is 7H JPNZ LSBAR ;Jump to loop start of draw bar MV IL, 4CH ;Delete 1 dot above PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) PRE 30H MV X, (0) PRE 30H MV BA, (2) DEC BA PRE 30H MV (22), A PRE 30H MV Y, (22); MV A, 1H CALLF 0FFFE8H MV IL, 4CH ;Delete 1 dot down PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) PRE 30H MV X, (0) PRE 30H MV BA, (2) INC BA INC BA INC BA INC BA INC BA INC BA INC BA PRE 30H MV (22), A PRE 30H MV Y, (22); MV A, 1H CALLF 0FFFE8H RET ; ; ; DWBALL: ;Draw ball PRE 30H MV (20), 0 ;Set loop counter 1 to 0 LSBAL1: ;Loop start of ball1 PRE 30H MV BA, (8) PRE 30H ADD A, (20) PRE 30H MV (22), BA ;BA -> TEMP storage 1 PRE 30H MV X, (22) PRE 30H MV (21), 0 ;Set loop counter 2 to 0 LSBAL2: ;Loop start of ball2 PRE 30H MV BA, (10) PRE 30H ADD A, (21) PRE 30H MV (24), BA ;BA -> TEMP storage 2 PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) MV IL, 4CH PRE 30H MV Y, (24) MV A, 0H CALLF 0FFFE8H PRE 30H MV A, (21) INC A PRE 30H MV (21), A CMP A, 4H JPNZ LSBAL2 PRE 30H MV A, (20) INC A PRE 30H MV (20), A CMP A, 4H JPNZ LSBAL1 RET ; ; ; UNDWBL: ;Undraw ball PRE 30H MV (20), 0 ;Set loop counter 1 to 0 LSUDB1: ;Loop start of UNDRAW BALL1 PRE 30H MV BA, (8) PRE 30H ADD A, (20) PRE 30H MV (22), BA ;BA -> TEMP storage 1 PRE 30H MV X, (22) PRE 30H MV (21), 0 ;Set loop counter 2 to 0 LSUDB2: ;Loop start of UNDRAW BALL2 PRE 30H MV BA, (10) PRE 30H ADD A, (21) PRE 30H MV (24), BA ;BA -> TEMP storage 2 MV IL, 4CH PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) PRE 30H MV Y, (24) MV A, 1H CALLF 0FFFE8H PRE 30H MV A, (21) INC A PRE 30H MV (21), A CMP A, 4H JPNZ LSUDB2 PRE 30H MV A, (20) INC A PRE 30H MV (20), A CMP A, 4H JPNZ LSUDB1 RET ; ; ; MVBALL: ;Move ball PRE 30H MV A, (12) CMP A, 1H JPZ MVRT ;Jump to MOVE RIGHT PRE 30H ;Move to left MV A, (8) DEC A PRE 30H MV (8), A PRE 30H SUB A, (0) ;If bar Y JPNZ UPORDN ;Jump to UP OR DOWN FUNC ;Check to see if ball hit bar PRE 30H MV (31), 1 ;Set MISSED to TRUE ; PRE 30H MV A, (2) DEC A DEC A ; BARY - 2 PRE 30H MV (23), A ;Save value in A to (23) for now PRE 30H SUB A, (10) JPZ SETMFS ;Jump to SET MISSED TO FALSE ; PRE 30H MV (20), 0 ;Set loop counter 1 to 0 BGLPMB: ;Begin of loop in MOVEBALL PRE 30H MV A, (23) ;Restore value INC A ; PRE 30H MV (23), A ;Save value in A to (23) for now PRE 30H SUB A, (10) JPZ SETMFS ;Jump to SET MISSED TO FALSE PRE 30H MV A, (20) INC A ;Increase loop counter by 1 CMP A, 9H JPZ EDMVBL ;Jump to end of MOEVEBALL PRE 30H MV (20), A JP BGLPMB SETMFS: ;Set MISSED to FALSE PRE 30H MV (31), 0 ;Set MISSED to FALSE PRE 30H MV A, (12) PRE 30H INC A ;Change direction to right PRE 30H MV (12), A JP UPORDN MVRT: PRE 30H ;Move to right MV A, (8) INC A PRE 30H MV (8), A PRE 30H SUB A, (14) JPNZ UPORDN ;Jump to UP OR DOWN PRE 30H MV A, (12) PRE 30H DEC A PRE 30H MV (12), A UPORDN: ;UP OR DOWN PRE 30H MV A, (13) CMP A, 1H JPZ MVDN ;Jump to MOVE DOWN PRE 30H ;Move up MV A, (10) DEC A PRE 30H MV (10), A PRE 30H SUB A, (16) JPNZ EDMVBL ;Move to end of MOVEBALL PRE 30H MV A, (13) INC A PRE 30H MV (13), A JP EDMVBL MVDN: PRE 30H MV A, (10) INC A PRE 30H MV (10), A PRE 30H SUB A, (18) JPNZ EDMVBL PRE 30H MV A, (13) DEC A PRE 30H MV (13), A EDMVBL: ;END OF MOVEBALL RET ; ; ; DWSCRN: ;Draw screen PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) MV IL, 42H PRE 30H MV (0D4H), 0H ;Put location X in (bl) PRE 30H MV (0D5H), 0H ;Put location Y in (bh) MV X, 0BFFBAH ;Put address of string PockePonga MV Y, 10 ;Put length of string into Y CALLF 0FFFE8H ;Display string PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) MV IL, 42H PRE 30H MV (0D4H), 1H ;Put location X in (bl) PRE 30H MV (0D5H), 1H ;Put location Y in (bh) MV X, 0BFFC4H ;Put address of string QUIT MV Y, 8 ;Put length of string into Y CALLF 0FFFE8H ;Display string PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) MV IL, 42H PRE 30H MV (0D4H), 1H ;Put location X in (bl) PRE 30H MV (0D5H), 2H ;Put location Y in (bh) MV X, 0BFFCCH ;Put address of string UP MV Y, 6 ;Put length of string into Y CALLF 0FFFE8H ;Display string PRE 30H MVW (0D6H), 0H ;Put 0H to (cx) MV IL, 42H PRE 30H MV (0D4H), 1H ;Put location X in (bl) PRE 30H MV (0D5H), 3H ;Put location Y in (bh) MV X, 0BFFD2H ;Put address of string DOWN MV Y, 8 ;Put length of string into Y CALLF 0FFFE8H ;Display string RET ; ; ; PTDATA: ;Put string data to external RAM ; ; 'PockePonga' ; 10 characters ; MV X, 0BFFBAH MV A, 80 ;'P' MV [X], A MV X, 0BFFBBH MV A, 111 ;'o' MV [X], A MV X, 0BFFBCH MV A, 99 ;'c' MV [X], A MV X, 0BFFBDH MV A, 107 ;'k' MV [X], A MV X, 0BFFBEH MV A, 101 ;'e' MV [X], A MV X, 0BFFBFH MV A, 80 ;'P' MV [X], A MV X, 0BFFC0H MV A, 111 ;'o' MV [X], A MV X, 0BFFC1H MV A, 110 ;'n' MV [X], A MV X, 0BFFC2H MV A, 103 ;'g' MV [X], A MV X, 0BFFC3H MV A, 97 ;'a' MV [X], A ; ; '[Q]:Quit' ; 8 characters ; MV X, 0BFFC4H MV A, 91 ;'[' MV [X], A MV X, 0BFFC5H MV A, 81 ;'Q' MV [X], A MV X, 0BFFC6H MV A, 93 ;']' MV [X], A MV X, 0BFFC7H MV A, 58 ;':' MV [X], A MV X, 0BFFC8H MV A, 81 ;'Q' MV [X], A MV X, 0BFFC9H MV A, 117 ;'u' MV [X], A MV X, 0BFFCAH MV A, 105 ;'i' MV [X], A MV X, 0BFFCBH MV A, 116 ;'t' MV [X], A ; ; '[A]:Up' ; 6 characters ; MV X, 0BFFCCH MV A, 91 ;'[' MV [X], A MV X, 0BFFCDH MV A, 65 ;'A' MV [X], A MV X, 0BFFCEH MV A, 93 ;']' MV [X], A MV X, 0BFFCFH MV A, 58 ;':' MV [X], A MV X, 0BFFD0H MV A, 85 ;'U' MV [X], A MV X, 0BFFD1H MV A, 112 ;'p' MV [X], A ; ; '[Z]:Down' ; 8 characters ; MV X, 0BFFD2H MV A, 91 ;'[' MV [X], A MV X, 0BFFD3H MV A, 90 ;'Z' MV [X], A MV X, 0BFFD4H MV A, 93 ;']' MV [X], A MV X, 0BFFD5H MV A, 58 ;':' MV [X], A MV X, 0BFFD6H MV A, 68 ;'D' MV [X], A MV X, 0BFFD7H MV A, 111 ;'o' MV [X], A MV X, 0BFFD8H MV A, 119 ;'w' MV [X], A MV X, 0BFFD9H MV A, 110 ;'n' MV [X], A ; ; 'Sunday, Feb. 26, 2006' ; 21 characters ; MV X, 0BFFDAH MV A, 83 ;'S' MV [X], A MV X, 0BFFDBH MV A, 117 ;'u' MV [X], A MV X, 0BFFDCH MV A, 110 ;'n' MV [X], A MV X, 0BFFDDH MV A, 100 ;'d' MV [X], A MV X, 0BFFDEH MV A, 97 ;'a' MV [X], A MV X, 0BFFDFH MV A, 121 ;'y' MV [X], A MV X, 0BFFE0H MV A, 44 ;',' MV [X], A MV X, 0BFFE1H MV A, 32 ;' ' MV [X], A MV X, 0BFFE2H MV A, 70 ;'F' MV [X], A MV X, 0BFFE3H MV A, 101 ;'e' MV [X], A MV X, 0BFFE4H MV A, 98 ;'b' MV [X], A MV X, 0BFFE5H MV A, 46 ;'.' MV [X], A MV X, 0BFFE6H MV A, 32 ;' ' MV [X], A MV X, 0BFFE7H MV A, 50 ;'2' MV [X], A MV X, 0BFFE8H MV A, 54 ;'6' MV [X], A MV X, 0BFFE9H MV A, 44 ;',' MV [X], A MV X, 0BFFEAH MV A, 32 ;' ' MV [X], A MV X, 0BFFEBH MV A, 50 ;'2' MV [X], A MV X, 0BFFECH MV A, 48 ;'0' MV [X], A MV X, 0BFFEDH MV A, 48 ;'0' MV [X], A MV X, 0BFFEEH MV A, 54 ;'6' MV [X], A ; ; 'Replay?[Y/N]' ; 12 characters ; MV X, 0BFFEFH MV A, 82 ;'R' 12 characters MV [X], A MV X, 0BFFF0H MV A, 101 ;'e' MV [X], A MV X, 0BFFF1H MV A, 112 ;'p' MV [X], A MV X, 0BFFF2H MV A, 108 ;'l' MV [X], A MV X, 0BFFF3H MV A, 97 ;'a' MV [X], A MV X, 0BFFF4H MV A, 121 ;'y' MV [X], A MV X, 0BFFF5H MV A, 63 ;'?' MV [X], A MV X, 0BFFF6H MV A, 91 ;'[' MV [X], A MV X, 0BFFF7H MV A, 89 ;'Y' MV [X], A MV X, 0BFFF8H MV A, 47 ;'/' MV [X], A MV X, 0BFFF9H MV A, 78 ;'N' MV [X], A MV X, 0BFFFAH MV A, 93 ;']' MV [X], A RET