Mercurial > hg > Members > kono > nitros9-code
view 3rdparty/packages/pacos9/check90.as @ 3226:9749d0dfc4a2
Changed a puls PC to rts to save cycles
author | David Ladd <drencor-xeen@users.sourceforge.net> |
---|---|
date | Sat, 20 Jan 2018 19:32:22 -0600 |
parents | 06508da42c98 |
children |
line wrap: on
line source
NAM Check TTL Routines to check & react to status * Program segment to be compiled using Level II RMA * This is not a mainline program segment * Written by Larry Olson IFP1 * use /dd/defs/os9defs.a ENDc STACK EQU 100 SECTION bss * Lcoal Variables RMB STACK ENDSECT SECTION code PALST1: fcb $1b,$31,3,18 fcb $1b,$31,4,36 fcb $1b,$31,5,63 fcb $1b,$31,6,25 PALST2: fcb $1b,$31,3,53 fcb $1b,$31,4,53 fcb $1b,$31,5,53 fcb $1b,$31,6,53 CHECKS: lda HITFLG Check hit flag lbeq CHKGH If 0 the continue lbpl KILPAC Pacman is hit, so kill him * Kill ghost routine * Make noise ldd #1550 Set starting frequency std SNDPR2 Save it in variable KLOOP ldx #$3201 Set amplitude & duration ldd SNDPR2 addd #250 cmpd #4050 Are we done yet? beq KILGHT std SNDPR2 Save new value tfr D,Y Put value in Y reg. lbsr SND Go make noise bra KLOOP KILGHT leax G1OFST,U Point to ghost tables lda GHTHIT Get # of ghost destroyed leax A,X Move to that ghosts table stx XSAVE Save ghost table pointer ldb #-3 stb 10,X Set status -3(killed) * Erase ghost ldd 2,X Get ghost scrn X location std PGXLOC Give it to PUTGHT ldd 4,X Get ghost scrn Y location std PGYLOC Give it to PUTGHT lda #1 sta PGBFN Set buff# to blank ghost lbsr PUTGHT Go erase ghost * Reset ghost table lda GHTHIT Get ghost counter leay GHTABL,U Point to backup tables leay A,Y Use current ghost data ldx XSAVE Restore X reg. ldb #20 Transfer 20 bytes RSLOOP lda ,Y+ Get a byte sta ,X+ Transfer it decb Decrement counter bne RSLOOP Loop till 20 are done * Reset palette for ghost ldx XSAVE Point X reg. to ghost table ldd 18,X Get palette number & color std PALBT1+2 Put them in string leax PALBT1,U Point to bytes to output ldy #4 Output 4 bytes lbsr OUTSTR Go output them * Draw ghost in cage ldx XSAVE Point X reg. to ghost table ldd 2,X Get ghost scrn X location std PGXLOC Put it in PUTGHT string ldd 4,X Get ghost scrn Y location std PGYLOC Put it in PUTGHT string lda 11,X Get ghost buffer number sta PGBFN Put it in PUTGHT string lbsr PUTGHT Go put buffer to screen * Reset hit flag clr HITFLG Reset hit flag * Add points to score lda #50 50 points for ghost sta POINTS+2 lbsr ADDUP Go add to score lbra MAIN1 Return to main KILPAC: ldx #$3209 Set amplitude & duration ldy #2000 Set frequency lbsr SND Go make sound ldd PXNEW Get pacman scrn X location std PXLOC Give it to PUTBLK ldd PYNEW Get pacman scrn Y location std PYLOC Give it to PUTBLK lda #59 Starting buffer -1 sta PBFN Give it to PUTBLK ldd #4050 Set frequency std SNDPR1 HLOOP inc PBFN Increment buffer number lbsr PUTBLK Put object on screen ldx #$3205 Set amplitude & duration ldd SNDPR1 Get frequency subd #150 Subtract 150 from it std SNDPR1 Put it back tfr D,Y Also put it in Y reg. lbsr SND Go make sound lda PBFN Check buffer number cmpa #67 Are we done ? bne HLOOP If not, then keep looking lda #37 37 = Blank pacman sta PBFN Give it to PUTBLK lbsr PUTBLK Put it on screen * Go to delete pacman routines in MAIN lbra DELPAC Go delete pacman * Check if current ghost can be moved, if so then move it * Two ghost moves will be made for each pacman move * so the ghosts will be half as slow as pacman. * If we made 4 ghost moves for each pacman move then the * ghosts would move at the same speed as pacman. CHKGH lda POWFLG Check power pill flag lbeq MOVGH deca Decrement flag (counter) sta POWFLG Put it back lbeq PALRST If 0 then reset palettes TIMCHK cmpa #25 Are we close to zero? lbhi MOVGH If not, go move ghost leax PALST1,pcr Point to palette reset string ldy #16 Output 16 bytes lbsr OUTSTR Go output code bytes clrb stb STRLGH Set string length to 0 leax STRING,U Point to where string goes leay G1OFST,U Move to top of ghost tables lda 10,Y Get status for #1 ghost cmpa #2 Is ghost chasing ? bne PLCHG2 If so then branch ldd #$1b31 std ,X++ PUT 2 bytes in string ldd #$043d std ,X++ Put 2 bytes in string inc STRLGH Increment counter PLCHG2 lda 30,Y Get status for ghost #2 cmpa #2 Is ghost chasing ? bne PLCHG3 If so then branch ldd #$1b31 std ,X++ Put 2 bytes in string ldd #$063d std ,X++ Put 2 bytes in string inc STRLGH Increment counter PLCHG3 lda 50,Y Get status for ghost #3 cmpa #2 Is ghost chasing ? bne PLCHG4 If so then branch ldd #$1b31 std ,X++ Put 2 bytes in string ldd #$053d std ,X++ Put 2 bytes in string inc STRLGH Increment counter PLCHG4 lda 70,Y Get status for ghost #4 cmpa #2 Is it chasing ? bne PLTEST If so then branch ldd #$1b31 std ,X++ Put 2 bytes in string ldd #$033d std ,X Put 2 bytes in string inc STRLGH Increment counter PLTEST ldb STRLGH Get counter value beq PLDONE If 0 then we're done lda #4 Set multiplier mul Mul. 4 x STRLGH tfr D,Y Put result in Y reg. leax STRING,U Point to start of string lbsr OUTSTR Go output string PLDONE bra MOVGH PALRST leax PALST1,pcr Point to palette reset bytes ldy #16 Output 16 bytes lbsr OUTSTR Go output bytes * Now reset ghosts status from running to chasing leax G1OFST,U ldb #1 lda 10,X cmpa #2 Is ghost running? bne STRST2 stb 10,X Set to chasing STRST2 lda 30,X cmpa #2 Is ghost running? bne STRST3 stb 30,X Set to chasing STRST3 lda 50,X cmpa #2 Is ghost running? bne STRST4 stb 50,X Set to chasing STRST4 lda 70,X cmpa #2 Is ghost running? bne MOVGH stb 70,X Set to chasing * Make 3 ghost moves for each pacman move * This means that the 4 ghosts will be a * little slower on the screen than pacman MOVGH lbsr GHCHCK Go check for ghost move lbsr GHCHCK Do it again * Bonus Routines BONUS lda BONFLG Check bonus flag beq PUTBON Go put bonus on screen dec BONTIM Decrement bonus timer bne MOVGH2 * Erase bonus from screen ERSBON ldd #310 std PXLOC ldd #95 std PYLOC lda #69 sta PBFN lbsr PUTBLK Go erase bonus leax ARRAY,U ldd #1966 leax D,X clr ,X Erase bonus from array clr BONFLG Reset bonus flag lda #150 sta BONTIM Reset bonus timer bra LEAVE * Put bonus on screen * PUTBON lda BONCNT Check counter cmpa #10 Has player got 10 yet ? beq MOVGH2 If so, then no more dec BONTIM Decrement timer bne MOVGH2 lbsr RANDNM Go pick random number cmpa #200 bhi LEAVE lda BONBUF Get bonus buffer # inca cmpa #73 bne PUTBN2 lda #70 PUTBN2 sta BONBUF sta PBFN ldd #310 std PXLOC ldd #95 std PYLOC lbsr PUTBLK Put bonus on screen leax ARRAY,U ldd #1966 leax D,X lda #6 sta ,X Put bonus in array lda #50 sta BONTIM Set bonus timer inc BONFLG Set bonus flag bra LEAVE * If power pill flag is set then slow ghosts down MOVGH2 lbsr GHCHCK One more time * tst POWFLG * bne LEAVE * lbsr GHCHCK One more time * Go return to main loop LEAVE lbra MAIN1 Return to MAIN loop ENDSECT