0100 ; BRICKLAYER'S NIGHTMARE›0101 ; ######################›0102 ; BY G.M. ROBSON›0103 ; ANALOG COMPUTING #15›0104 ;›0105 ; DISPLAY LIST VALUES›0106 ; -------------------›0107 BL8 = $70 BLANK 8 SCAN LINES›0108 CH2 = $02 CHAR LINE 40H X 8V, 2 COLOR›0109 CH4 = $04 CHAR LINE 40H X 8V, 4 COLOR›0110 CH6 = $06 CHAR LINE 20H X 8V, 5 COLOR›0111 CH7 = $07 CHAR LINE 20H X 16V, 5 COLOR›0112 JVB = $41 JMP ON VERT BLANK INST›0113 LMS = $40 MASK TO LOAD MEM SCAN ADR›0114 ;›0115 ; OS EQUATES›0116 ; ----------›0117 ATRACT = $4D ATTRACT MODE COUNTER›0118 AUDC1 = $D201 AUDIO CONTROL 1›0119 AUDF1 = $D200 AUDIO FREQ 1›0120 GRACTL = $D01D GRAPHICS CTRL REG›0121 HITCLR = $D01E COLLISION CLEAR›0122 HPOSP0 = $D000 MAN HORIZ POS›0123 HPOSP1 = $D001 DOG 1 HORIZ POS›0124 HPOSP2 = $D002 DOG 2 HORIZ POS›0125 P0PL = $D00C PLYR 0(MAN) AND PLAYER COLLISIONS›0126 PMBASE = $D407 PM BASE ADR›0127 SIZEP0 = $D008 SIZE OF PLAYER 0›0128 HPOSP3 = $D003 DOG 3 HORIZ POS›0129 ;›0130 ; SYSTEM SHADOW REGS›0131 ; ------------------›0132 CHBAS = $02F4 CHAR SET HO ADR›0133 COLOR0 = $02C4 PLAYFIELD 0 COLOR REG›0134 COLOR1 = $02C5 PLAYFIELD 1 COLOR REG›0135 COLOR2 = $02C6 PLAYFIELD 2 COLOR REG›0136 COLOR3 = $02C7 PLAYFIELD 3 COLOR REG›0137 COLOR4 = $02C8 BACKGROUND COLOR›0138 ;›0139 SDLSTL = $0230 DISPLAY LIST PNTR›0140 PCOLR0 = $02C0 MAN COLOR REG›0141 PCOLR1 = $02C1 DOG 1 COLOR REG›0142 PCOLR2 = $02C2 DOG 2 COLOR REG›0143 PCOLR3 = $02C3 DOG 3 COLOR REG›0144 SDMCTL = $022F DMA CTRL›0145 STICK0 = $0278 JOYSTICK 1›0146 STRIG0 = $0284 TRIGGER 1›0147 ;›0148 ; PAGE ZERO VARIABLES›0149 ; -------------------›0150 DESADR = $80 DEST ADR›0151 SRCADR = $82 SRCE ADR›0152 SIZE = $84 # OF BYTES INVOLVED›0153 ;›0154 ; JOYSTICK VALUES›0155 ; ---------------›0156 DOWN = 13›0157 DOWNLEFT = 9›0158 DOWNRGT = 5›0159 LEFT = 11›0160 RIGHT = 7›0161 UP = 14›0162 ;›0163 UPLEFT = 10›0164 UPRIGHT = 6›0165 ;›0166 ; BRICKLAYER VALUES›0167 ; -----------------›0168 BMPS = 250 BRICK MOVES PER SCREEN›0169 BRKPOINT = 45 POINTS FOR 1 BRICK MOVE›0170 ;›0171 CHSIZE = 512 SIZE OF CHAR SET (ONLY 512 NEEDED)›0172 DMAVAL = 62 ENABLE INSTRUCTION FETCH DMA›0173 ; 1 LINE P/M RESOLUTION›0174 ; ENABLE PLAYER DMA›0175 ; ENABLE MISSILE DMA›0176 ; 160 COLOR CLOCK PLAYFIELD DMA›0177 ;›0178 GRAVAL = 3 SET TRIG0-TRIG3 NORMAL INPUTS›0179 ; ENABLE DMA TO PLAYER GRAPHICS REGS›0180 ; ENABLE DMA TO MISSILE GRAPHICS REGS›0181 ;›0182 INDOG1H = 120 INITIAL DOG 1 HORIZ POS›0183 INDOG2H = 140 INITIAL DOG 2 HORIZ POS›0184 INDOG3H = 160 INITIAL DOG 3 HORIZ POS›0185 INMANH = 80 INITIAL MAN HORIZ POS›0186 INMANV = 175 INITIAL MAN VERT POS›0187 ;›0188 M2LSIZE = 40 MODE 2 LINE SIZE›0189 M4LSIZE = 40 MODE 4 LINE SIZE›0190 M7LSIZE = 20 MODE 7 LINE SIZE›0191 ;›0192 PF0CMASK = $00 MASK TO USE PLAYFIELD 0 COLOR›0193 PF1CMASK = $40 MASK TO USE PLAYFIELD 1 COLOR›0194 PF2CMASK = $80 MASK TO USE PLAYFIELD 2 COLOR›0195 PF3CMASK = $C0 MASK TO USE PLAYFIELD 3 COLOR›0196 ;›0197 PFLINES = 16 # OF LINES WHERE PLAY OCCURS›0198 SCRSIZ = 640 # OF BYTES IN DISPLAY AREA›0199 ;›0200 BC = 62 BRICK CHAR›0201 LC = 61 MAN LIFE CHAR›0202 WC = 63 WALL CHARACTER›0203 ;›0204 ; SCREEN VALUES›0205 ; -------------›0206 BORDB = $B0 BOTTOM BORDER LINE FOR PLAY AREA›0207 BORDL = $33 LEFT BORDER COL FOR PLAY AREA›0208 BORDR = $C6 RIGHT BORDER COL FOR PLAY AREA›0209 BORDT = $38 TOP BORDER LINE FOR PLAY AREA›0210 ;›0211 ; COLORS›0212 ; ------›0213 GREY = $00›0214 ORANGE = $20›0215 REDORG = $30›0216 PINK = $40›0217 BLUE = $80›0218 YELGRN = $D0›0219 ;›0220 COLPF2 = $D018›0221 COLOR = $80›0222 WSYNC = $D40A›0223 ;›0224 *= $2000›0225 ;›0226 ; P/M RAM SPACE›0227 ; -------------›0228 PM *= *+768 1ST AREA NOT USED›0229 MISL *= *+256 MISSILE GRAPHICS AREA›0230 PLR0 *= *+256 PLAYER 0 GRAPHICS AREA›0231 PLR1 *= *+256 PLAYER 1 GRAPHICS AREA›0232 PLR2 *= *+256 PLAYER 2 GRAPHICS AREA›0233 PLR3 *= *+256 PLAYER 3 GRAPHICS AREA›0234 ;›0235 PLEND = *›0236 PLDIFF = PLEND-MISL›0237 ;›0238 CUSCS *= *+512 CUSTOM CHAR SET›0239 DISP *= *+SCRSIZ ACTUAL PLAY AREA›0240 FIRSTBR = DISP+91 ADDR OF 1ST BRICK›0241 ;›0242 WALLLINE›0243 .BYTE WC,WC,WC,WC,WC,WC,WC,WC,WC,WC›0244 .BYTE WC,WC,WC,WC,WC,WC,WC,WC,WC,WC›0245 ;›0246 ; BRICKLAYER DISPLAY LIST›0247 ; -----------------------›0248 DL .BYTE BL8,BL8 BLANK SCRN TOP›0249 .BYTE BL8,BL8›0250 ;›0251 .BYTE CH7+LMS›0252 .WORD WALLLINE SHOW WALL LINE›0253 .BYTE CH4+LMS SET MAIN SCRN DISPLAY ADR›0254 .WORD DISP›0255 ;›0256 .BYTE CH4,CH4 DEFINE MAIN SCREEN DISPLAY AREA›0257 .BYTE CH4,CH4›0258 .BYTE CH4,CH4›0259 .BYTE CH4,CH4›0260 .BYTE CH4,CH4›0261 .BYTE CH4,CH4›0262 .BYTE CH4,CH4›0263 .BYTE CH4›0264 .BYTE CH7+LMS›0265 .WORD WALLLINE SHOW WALL LINE›0266 ;›0267 .BYTE CH6+LMS SET SCORE LINE ADR›0268 .WORD SLINE›0269 ;›0270 .BYTE JVB JMP ON VERT BLANK›0271 .WORD DL TO DISPLAY LIST START›0272 ;›0273 ; RETURN SCREEN TO NORMAL›0274 ; -----------------------›0275 NORMAL›0276 LDA #$00›0277 STA GRACTL›0278 LDA #$22›0279 STA SDMCTL›0280 LDA #$20›0281 STA SDLSTL›0282 LDA #$BC›0283 STA SDLSTL+1›0284 ;›0285 LDA #$E0›0286 STA CHBAS›0287 ;›0288 ; MAIN LINE›0289 ; ---------›0290 MAINRTN›0291 JSR INIT INITIALIZE›0292 JSR INITPM INIT PLAYERS›0293 ;›0294 ; START NEW LEVEL›0295 ; ---------------›0296 STARTLEV JSR INITBRKS SETUP INITIAL BRICKS›0297 JSR SETNLEV SET NEXT LEVEL›0298 JSR INITLEV INIT LEVEL VALUES›0299 ;›0300 ; START NEW LIFE›0301 ; --------------›0302 STLIFE JSR INITPM INIT PLAYERS›0303 JSR SHOWLIVS SHOW LIVES REMAINING›0304 MAIN1 JSR CHKMANOK DID MAN COLLIDE WITH DOG ?›0305 BNE REMMAN YES, SO REMOVE MAN›0306 JSR MOVMAN MOVE THE MAN›0307 LDA BMOVES GET # OF BRICKS LEFT›0308 BNE MAIN2 MORE, SO CONTINUE›0309 JMP STARTLEV START NEXT LEVEL›0310 ;›0311 MAIN2 DEC DOGMOVCT CAN DOGS MOVE YET ?›0312 BNE Q1 NO›0313 LDA DOGFREQ1 YES, RESET NORMAL DOG MOVE CNT›0314 STA DOGMOVCT›0315 LDA STRIG0 IS TRIG DOWN ?›0316 BNE Q2 NO, LEAVE NORMAL DOG MOVE CNT›0317 LDA DOGFREQ2 ELSE, SET FASTER DOG COUNT›0318 STA DOGMOVCT AND SAVE›0319 ;›0320 Q2 JSR MOVDOG1 MOVE DOG 1›0321 JSR MOVDOG2 MOVE DOG 2›0322 JSR MOVDOG3 MOVE DOG 3›0323 Q1 JSR MDELAY DO MAIN DELAY›0324 LDA BSNDFLAG DID BRICK JUST MAKE SOUND ?›0325 BNE MAIN1 YES, SO DON'T DELAY›0326 JMP MAIN1›0327 ;›0328 REMMAN›0329 JSR KILLMAN SHOW MAN'S DOWNFALL›0330 DEC LIVES REDUCE # OF LIVES LEFT›0331 BPL STLIFE START NEW LIFE›0332 ;›0333 ; END OF GAME›0334 ; -----------›0335 LDX #0 INIT INDEX›0336 SHOWOVER LDA ENDMSG,X GET 'GAME OVER' BYTE›0337 CMP #$FF END OF MSG ?›0338 BEQ WAITSTRT YES, SO WAIT TO START AGAIN›0339 ORA #PF3CMASK MAKE CHAR PLAYFIELD 3 COLOR›0340 STA SLINE+3,X PUT MSG BYTE ON SCRN›0341 INX PNT TO NEXT BYTE›0342 JMP SHOWOVER SHOW NEXT BYTE›0343 ;›0344 WAITSTRT LDA STRIG0 IS TRIGGER PRESSED ?›0345 BNE WAITSTRT NO, SO WAIT›0346 STA ATRACT TRIG PUSHED, SO DISABLE ATTRACT›0347 JMP MAINRTN YES, SO START AGAIN›0348 ;›0349 ; CLEAR PM AREA›0350 ; -------------›0351 INITPM›0352 LDA #MISL&255›0353 STA DESADR SET START ADR LO›0354 LDA #MISL/256›0355 STA DESADR+1 SET START ADR HO›0356 LDA #PLDIFF&255›0357 STA SIZE SET SIZE LO›0358 LDA #PLDIFF/256›0359 STA SIZE+1 SET SIZE HO›0360 LDX #0 SET FILL CHAR›0361 JSR FILL CLEAR PM AREA›0362 ;›0363 ; INIT PLAYERS COLORS & POSITIONS›0364 ; -------------------------------›0365 LDX #4 SET # OF PLAYERS›0366 LDA #0›0367 INITPSIZ STA SIZEP0-1,X SET NORMAL PLAYER SIZE›0368 DEX MORE PLAYER SIZES TO INIT ?›0369 BNE INITPSIZ YES›0370 ;›0371 LDA #BLUE+6 SET COLOR & LUM›0372 STA PCOLR0 SET PLAYER 0 COLOR›0373 LDA #PINK+8 SET COLOR & LUM›0374 STA PCOLR1 FOR DOG›0375 STA PCOLR2 SET DOG 2 COLOR & LUM›0376 STA PCOLR3 SET DOG 3 COLOR & LUM›0377 ;›0378 LDA #INMANH GET MAN'S INITIAL HORIZ POS›0379 STA MANPOSH SAVE HORIZ POS›0380 STA HPOSP0 SET IT›0381 LDA #INDOG1H GET DOG 1'S INITIAL HORIZ POS›0382 STA DOG1POSH SAVE HORIZ POS›0383 STA HPOSP1 SET IT›0384 LDA #INDOG2H GET DOG 2'S INITIAL HORIZ POS›0385 STA DOG2POSH SAVE HORIZ POS›0386 STA HPOSP2 SET IT›0387 LDA #INDOG3H GET DOG 3'S INITIAL HORIZ POS›0388 STA DOG3POSH SAVE HORIZ POS›0389 STA HPOSP3 SET IT›0390 ;›0391 LDA #INMANV GET MAN'S INITIAL VERT POS›0392 STA MANPOSV SAVE MAN'S VERT POS›0393 STA DOG1POSV SAVE DOG 1'S VERT POS›0394 STA DOG2POSV SAVE DOG 2'S VERT POS›0395 STA DOG3POSV SAVE DOG 3'S VERT POS›0396 ;›0397 ; PUT INITIAL MAN IMAGE ON SCREEN›0398 ; -------------------------------›0399 LDA #1›0400 STA MANPICNO PNT TO 1ST MAN IMAGE›0401 JSR PUTMAN PUT MAN IN PLAYER AREA›0402 ;›0403 ; PUT INITIAL DOGS ON SCREEN›0404 ; --------------------------›0405 INITDOG LDX #8 SET # OF BYTES IN DOG IMAGE›0406 Q3 LDA DOGIMAGE-1,X GET DOG IMAGE BYTE›0407 STA PLR1+INMANV-1,X PUT DOG BYTE IN PLAYER 1›0408 STA PLR2+INMANV-1,X PUT DOG BYTE IN PLAYER 2›0409 STA PLR3+INMANV-1,X PUT DOG BYTE IN PLAYER 3›0410 DEX MORE BYTES IN PLAYER ?›0411 BNE Q3 YES›0412 ;›0413 LDA #PM/256 GET HI BYTE OF PM ADR›0414 STA PMBASE SET PM ADR›0415 ;›0416 STA HITCLR CLEAR COLLISIONS›0417 ;›0418 RTS RET TO MAIN RTN›0419 ;›0420 ; SETUP CHAR SET›0421 ; --------------›0422 INIT›0423 LDA #0›0424 STA SRCADR SET ORIG CHAR SET LO ADR›0425 LDA CHBAS›0426 STA SRCADR+1 SET ORIG CHAR SET HO ADR›0427 LDA #CUSCS&255›0428 STA DESADR SET CUSTOM CHAR SET LO ADR›0429 LDA #CUSCS/256›0430 STA DESADR+1 SET CUSTOM CHAR SET HO ADR›0431 LDA #CHSIZE&255 GET SIZE OF CHSET LO BYTE›0432 STA SIZE SAVE FOR MOVE›0433 LDA #CHSIZE/256 SET # OF 256 BYTE BLOCKS TO MOVE›0434 STA SIZE+1 SAVE SIZE HO BYTE›0435 JSR MOVE MOVE CHAR SET TO RAM›0436 ;›0437 ; REDEFINE CHARACTERS›0438 ; -------------------›0439 LDX #24 SET # OF BYTES IN CHARS›0440 Q4 LDA LIFEPAT-1,X GET NEW CHAR BYTE›0441 STA CUSCS+488-1,X PUT INTO CUSTOM CHAR SET›0442 DEX MORE BYTES ?›0443 BNE Q4 YES›0444 ;›0445 LDA #CUSCS/256 GET CUSTOM CHSET H0 ADR›0446 STA CHBAS SET NEW CHAR SET ADR›0447 ;›0448 ; INIT SCREEN›0449 ; -----------›0450 JSR CLSCRN CLEAR SCREEN›0451 LDA #DL&255 SET DL LO BYTE›0452 STA SDLSTL›0453 LDA #DL/256 SET DL HI BYTE›0454 STA SDLSTL+1›0455 ;›0456 ; SET PLAYFIELD COLORS›0457 ; --------------------›0458 LDA #GREY+0›0459 STA COLOR4 SET BACKGROUND COLOR›0460 LDA #ORANGE+8›0461 STA COLOR0 SET PLAYFIELD 0 COLOR›0462 LDA #GREY+$0A›0463 STA COLOR1 SET PLAYFIELD 1 COLOR›0464 LDA #YELGRN+8›0465 STA COLOR2 SET PLAYFIELD 2 COLOR›0466 LDA #REDORG+8›0467 STA COLOR3 SET PLAYFIELD 3 COLOR›0468 ;›0469 LDA #DMAVAL SET DMA CONTROL›0470 STA SDMCTL›0471 LDA #GRAVAL SET GRAPHICS CONTROL›0472 STA GRACTL›0473 ;›0474 ; INIT SCORE LINE›0475 ; ---------------›0476 LDX #SLEND-SLINE SET SIZE OF SCORE LINE›0477 LDA #0 SET BLANK CHAR›0478 Q5 STA SLINE-1,X BLANK SCORE LINE›0479 DEX MORE TO BLANK ?›0480 BNE Q5 YES›0481 ;›0482 LDA DIGITS+0 GET ATASCII FOR '0'›0483 LDX #6 SET # OF DIGITS IN SCORE›0484 INITSCOR STA SCORE-1,X PUT 0 SCORE DIGIT›0485 DEX MORE DIGITS ?›0486 BNE INITSCOR YES›0487 ;›0488 LDA DIGITS+0 GET ATASCII FOR '0'›0489 ORA #PF1CMASK MAKE IT PLAYFIELD 1 COLOR›0490 STA LEVEL SET LEVEL 1›0491 ;›0492 LDA #3›0493 STA LIVES INIT # OF LIVES›0494 ;›0495 ; DRAW WALLS›0496 ; ----------›0497 DRAWWALL›0498 LDA #WC GET WALL CHAR›0499 STA TEMP SAVE FOR TRANSFER›0500 STA DISP PUT WALL CHAR ON SCRN›0501 LDX #PFLINES SET # OF LINES TO PUT WALL ON›0502 LDA #DISP&255›0503 STA DESADR SAVE LO ADR›0504 LDA #DISP/256›0505 STA DESADR+1 SAVE HO ADR›0506 PNTWALL LDA #M4LSIZE-1 SET VALUE TO PNT TO LINE END›0507 JSR PUTSCRCH PUT WALL CHAR AT LINE END›0508 DEX MORE WALL CHARS ?›0509 BEQ Q6 NO, SO EXIT›0510 LDA #1 SET VALUE TO PNT TO NEXT LINE›0511 JSR PUTSCRCH PUT WALL CHAR AT NEXT LINE START›0512 JMP PNTWALL PUT NEXT WALL CHAR›0513 Q6 RTS RET TO MAIN PROGRAM›0514 ;›0515 PUTSCRCH CLC SETUP FOR ADD›0516 ADC DESADR ADD TO DEST LO ADR›0517 STA DESADR SAVE DEST LO ADR›0518 LDA DESADR+1 GET DEST HO ADR›0519 ADC #0 ADD CARRY IF ANY›0520 STA DESADR+1 SAVE DEST HO ADR›0521 LDA TEMP GET CHAR TO PUT ON SCRN›0522 LDY #0 ZERO INDEX›0523 STA (DESADR),Y PUT WALL CHAR ON SCRN›0524 RTS ›0525 ;›0526 ; CLEAR PLAYFIELD›0527 ; ---------------›0528 CLSCRN›0529 LDA #DISP&255›0530 STA DESADR SET DEST LO ADR›0531 LDA #DISP/256›0532 STA DESADR+1 SET DEST HO ADR›0533 LDA #SCRSIZ&255›0534 STA SIZE SET SIZE OF FILL LO BYTE›0535 LDA #SCRSIZ/256›0536 STA SIZE+1 SET SIZE OF FILL HO BYTE›0537 LDX #0 SET FILL CHAR›0538 JSR FILL CLEAR THE SCRN AREA›0539 RTS ›0540 ;›0541 ; INIT LEVEL VALUES›0542 ; -----------------›0543 INITLEV LDA LEVEL GET CURRENT LEVEL›0544 AND #$0F MAKE IT BINARY #›0545 TAX ›0546 LDA #0 INIT OFFSET›0547 Q7 DEX IS THIS THE LEVEL ?›0548 BEQ Q8 YES,SET LEVEL VALUES›0549 CLC SETUP FOR ADD›0550 ADC #4 PNT TO NEXT LEVEL VALUES›0551 JMP Q7 SEE IF THIS IS THE LEVEL›0552 Q8 TAX GET OFFSET›0553 LDA LEVTBL,X GET NORMAL DOG MOVES/MAN MOVE›0554 STA DOGFREQ1 SET IT›0555 LDA LEVTBL+1,X GET DOG/MAN MOVES (PULLING WALL)›0556 STA DOGFREQ2 SAVE IT›0557 LDA LEVTBL+2,X GET MAIN LOOP HO VALUE›0558 STA MDELHO SET IT›0559 LDA LEVTBL+3,X GET MAIN LOOP LO VALUE›0560 STA MDELLO SET IT›0561 ;›0562 LDA #BMPS GET # OF BRICKS TO MOVE›0563 STA BMOVES›0564 ;›0565 RTS EXIT›0566 ;›0567 ; READ JOYSTICK & MOVE MAN›0568 ; ------------------------›0569 MOVMAN LDA STICK0 READ JOYSTICK›0570 CMP #LEFT MOVE LEFT ?›0571 BNE CHKJSR NO, SO CHECK RIGHT›0572 ;›0573 ;›0574 MOVMANL JSR SETMANL SET MAN LEFT›0575 SETHIM DEC MANPICNO ELSE, SET NEXT MAN IMAGE #›0576 BNE SHONEWM IF VALID, SHOW NEW MAN›0577 LDA #5 ELSE, SET VALID MAN IMAGE›0578 STA MANPICNO SAVE MAN IMAGE #›0579 SHONEWM JSR PUTMAN SHOW MAN›0580 RTS EXIT›0581 ;›0582 SETMANL DEC MANPOSH PNT TO COL TO LEFT›0583 LDA #BORDL GET LEFT LIMIT›0584 CMP MANPOSH AT LEFT LIMIT ?›0585 BEQ MOVLERR YES, SO ERROR›0586 LDY MANPOSH GET HORIZ POS›0587 LDX MANPOSV GET VERT POS›0588 JSR CHKLRM SEE IF MOVE IS OK›0589 BNE MOVLERR SOMETHING THERE, CAN'T MOVE›0590 ;›0591 LDA MANPOSH GET CURRENT MAN HORIZ POS›0592 STA HPOSP0 SET HARDWARE HORIZ REG›0593 RTS ›0594 ;›0595 MOVLERR INC MANPOSH SET ORIG COL›0596 RTS EXIT›0597 ;›0598 CHKJSR CMP #RIGHT MOVE RIGHT ?›0599 BEQ MOVMANR YES, SO MOVE MAN RIGHT›0600 ;›0601 CMP #UP MOVE UP ?›0602 BEQ MOVMANU YES, MOVE MAN UP›0603 ;›0604 CMP #DOWN MOVE DOWN ?›0605 BEQ MOVMAND YES, MOVE MAN DOWN›0606 JMP CHKANGLS CHECK JOYSTICK ANGLES›0607 ;›0608 ;›0609 MOVMANR JSR SETMANR SET MAN TO RIGHT›0610 JSR MOVBRICK MOVE BRICK IF APPROPRIATE›0611 JMP SETHIM SET NEW HORIZ IMAGE›0612 ;›0613 SETMANR INC MANPOSH SET COL TO RIGHT›0614 LDA #BORDR GET # OF RIGHT BORDER›0615 CMP MANPOSH AT RIGHT BORDER ?›0616 BEQ MOVRERR YES, SO ERROR›0617 ;›0618 LDX MANPOSV GET MAN VERT POS›0619 LDA MANPOSH GET HORIZ POS›0620 CLC SETUP FOR ADD›0621 ADC #7 PNT TO RIGHT SIDE OF PLAYER›0622 TAY ›0623 JSR CHKLRM SEE IF MOVE OK›0624 BNE MOVRERR CHAR THERE, SO ERROR›0625 ;›0626 ;›0627 LDA MANPOSH GET CURRENT MAN HORIZ POS›0628 STA HPOSP0 SET HARDWARE HORIZ REG›0629 RTS ›0630 MOVRERR DEC MANPOSH SET ORIGINAL MAN HORIZ POS›0631 RTS EXIT›0632 ;›0633 MOVMANU DEC MANPOSV SET LINE ABOVE›0634 LDA #BORDT GET # OF TOP BORDER›0635 CMP MANPOSV AT TOP BORDER ?›0636 BEQ MOVUERR YES, SO RESET PNTR›0637 ;›0638 LDY MANPOSH GET HORIZ POS›0639 LDX MANPOSV GET VERT POS›0640 JSR CHKUDM CHK UP DOWN MOVE›0641 BEQ SETVIM BLANK, SO MOVE OK›0642 MOVUERR INC MANPOSV SET ORIGINAL POS›0643 SETVIM INC MANPICNO SET NEXT VERT IMAGE›0644 LDA #10 GET 1 BEYOND MAX IMAGE #›0645 CMP MANPICNO IS MAN IMAGE # VALID ?›0646 BNE Q9 YES›0647 LDA #6 NO, SO SET VALID IMAGE #›0648 STA MANPICNO SAVE NEW MAN IMAGE #›0649 Q9 LDX MANPOSV GET MAN POSITION FOR INDEX›0650 LDA #0›0651 STA PLR0+8,X BLANK BYTES AROUND OLD MAN IMAGE›0652 STA PLR0-1,X›0653 JSR PUTMAN PUT NEW IMAGE IN PLAYER AREA›0654 RTS EXIT›0655 ;›0656 ;›0657 MOVMAND INC MANPOSV SET LINE BELOW›0658 LDA #BORDB GET # OF BOTTOM BORDER›0659 CMP MANPOSV AT BOTTOM BORDER ?›0660 BEQ MOVDERR YES, SO RESET PNTR›0661 ;›0662 LDY MANPOSH SET HORIZ POS›0663 LDA MANPOSV GET VERT POS›0664 CLC PREPARE FOR ADD›0665 ADC #7 PNT TO LINE BELOW›0666 TAX SAVE VERT POS›0667 JSR CHKUDM CHK UP DOWN MOVE›0668 BEQ SETVIM BLANK, SO MOVE OK›0669 ;›0670 MOVDERR DEC MANPOSV YES, SO SET ORIGINAL LINE #›0671 JMP SETVIM SET NEW VERT IMAGE›0672 ;›0673 CHKANGLS CMP #UPLEFT MOVE UP LEFT ?›0674 BEQ MOVMANUL YES›0675 ;›0676 CMP #UPRIGHT MOVE UP RIGHT ?›0677 BEQ MOVMANUR YES›0678 ;›0679 CMP #DOWNLEFT MOVE DOWN LEFT ?›0680 BEQ MOVMANDL YES›0681 ;›0682 CMP #DOWNRGT MOVE DOWN RIGHT ?›0683 BEQ MOVMANDR YES›0684 ;›0685 RTS EXIT TO MAIN LINE›0686 ;›0687 MOVMANUL JSR SETMANL SET MAN LEFT›0688 JSR MOVMANU MOVE MAN UP›0689 RTS ›0690 ;›0691 MOVMANUR JSR SETMANR SET MAN RIGHT›0692 JSR MOVMANU MOVE MAN UP›0693 RTS ›0694 ;›0695 MOVMANDL JSR SETMANL SET MAN LEFT›0696 JSR MOVMAND MOVE MAN DOWN›0697 RTS ›0698 ;›0699 MOVMANDR JSR SETMANR SET MAN RIGHT›0700 JSR MOVMAND MOVE MAN DOWN›0701 RTS ›0702 ;›0703 .INCLUDE #D:BRICKS2›0704 *= $02E0›0705 .WORD MAINRTN›0706 .END ›