10 REM * DEMO OF PLAYER-MISSILE GRAPHICS USING THE VERTICAL * 20 REM * BLANK INTERRUPT FOR FAST PLAYER MOVEMENT * 20 REM see CH5, p164 of Compute's First Book of Atari 30 REM for base code used to make this PM graphics demo 40 REM Modifications by Jason H. Moore, Ph.D. 50 REM March 25, 2019 100 REM * SET ASIDE MEMORY FOR PLAYER-MISSILE GRAPHICS * 110 PM=PEEK(106)-16:REM FIND RAMTOP & SUBTRACT 16 PAGES 120 PMBASE=256*PM:REM BASE ADDRESS FOR PM GRAPHICS 200 REM * INITIALIZE GRAPHICS * 210 GRAPHICS 0:SETCOLOR 2,0,0:REM BLACK BACKGROUND 220 POKE 752,1:PRINT " ":REM TURN OFF CURSOR 230 PCOL0=216:REM PLAYER COLOR GREEN 240 POKE 704,PCOL0:REM SET PLAYER COLOR 300 REM * INITIALIZE PLAYER POSITION MEMORY AND VARIABLES * 310 PXMEM=53248:PYMEM=1780:PHMEM=1784 320 P0X=120:P0Y=80 400 REM * INITIALIZE VBLANK PLAYER MOVEMENT ROUTINE * 410 FOR I=1536 TO 1706:READ A:POKE I,A:NEXT I 420 FOR I=1774 TO 1787:POKE I,0:NEXT I 430 FOR I=PMBASE+1023 TO PMBASE+2047:POKE I,0:NEXT I 440 FOR I=PMBASE+1025 TO PMBASE+1038:READ A:POKE I,A:NEXT I 450 POKE 559,62:POKE 623,1:POKE 1788,PM+4 460 POKE 53277,3:POKE 53256,1:POKE 54279,PM 470 X=USR(1696) 500 REM * GENERATE A TITLE * 510 POSITION 5,0 520 PRINT "PLAYER-MISSILE GRAPHICS DEMO" 600 REM * MAIN LOOP * 610 REM * SET PLAYER POSITION AND HEIGHT * 620 POKE PHMEM,14:REM HEIGHT 630 POKE PXMEM,P0X:POKE PYMEM,P0Y:REM POSITION 640 GOSUB 700 650 GOTO 620 660 END 700 REM * PLAYER MOVEMENT CALCULATIONS * 710 JOY = STICK(0):REM READ JOYSTICK VALUE 720 IF JOY=15 THEN RETURN:REM RETURN IF NOT PRESSED 730 IF JOY=11 THEN P0X=P0X-2:REM LEFT? DECREASE X 740 IF JOY=7 THEN P0X=P0X+2:REM RIGHT? INCREASE X 750 IF JOY=13 THEN P0Y=P0Y+2:REM UP? INCREASE Y 760 IF JOY=14 THEN P0Y=P0Y-2:REM DOWN? DECREASE Y 770 IF P0X>190 THEN P0X=50:REM SCREEN WRAP RIGHT 780 IF P0X<50 THEN P0X=190:REM SCREEN WRAP LEFT 790 IF P0Y>205 THEN P0Y=45:REM SCREEN WRAP DOWN 800 IF P0Y<45 THEN P0Y=205:REM SCREEN WRAP UP 810 RETURN 1000 REM * VBLANK INTERRUPT ROUTINE * 1010 DATA 162,3,189,244,6,240,89,56,221,240,6,240,83,141,254,6,106,141 1020 DATA 255,6,142,253,6,24,169,0,109,253,6,24,109,252,6,133,204,133 1030 DATA 206,189,240,6,133,203,173,254,6,133,205,189,248,6,170,232,46,255 1040 DATA 6,144,16,168,177,203,145,205,169,0,145,203,136,202,208,244,76,87 1050 DATA 6,160,0,177,203,145,205,169,0,145,203,200,202,208,244,174,253,6 1060 DATA 173,254,6,157,240,6,189,236,6,240,48,133,203,24,138,141,253,6 1070 DATA 109,235,6,133,204,24,173,253,6,109,252,6,133,206,189,240,6,133 1080 DATA 205,189,248,6,170,160,0,177,203,145,205,200,202,208,248,174,253,6 1090 DATA 169,0,157,236,6,202,48,3,76,2,6,76,98,228,0,0,104,169 1100 DATA 7,162,6,160,0,32,92,228,96 2000 REM * PLAYER SHAPE DATA * 2010 DATA 66,129,129,153,153,255,255,255,255,153,153,129,129,66