10 REM Combining a redefined character set with player-missile graphics 20 REM By Jason H. Moore, Ph.D. 30 REM November 10, 2019 40 REM Thanks to character set code example from The Creative Atari 50 REM Thanks to machine language example from Atari Graphics & Arcade Design 60 REM see CH5, p164 of Compute's First Book of Atari for PMG code 70 REM see file char-set-redefine-ML-PMG-comments.txt for verbose comments 100 REM INITIALIZE MEMORY MAP AND GRAPHICS 110 MEMTOP=PEEK(106) 120 GRTOP=MEMTOP-4 130 POKE 106,GRTOP 140 PM=GRTOP-20 150 PMBASE=256*PM 160 CHRAM=GRTOP*256 170 GRAPHICS 2+16:POKE 752,1 180 SETCOLOR 0,0,4 190 SETCOLOR 2,0,0 200 REM INITIALIZE PLAYER 0 COLOR AND POSITION 210 PCOL0=216 220 POKE 704,PCOL0 230 PXMEM=53248:PYMEM=1780:PHMEM=1784 240 P0X=120:P0Y=80 250 POKE 756,GRTOP 300 REM SET UP PLAYFIELD AND PLAYER MISSILE GRAPHICS 400 GOSUB 5000 500 GOSUB 6000 600 REM *** MAIN LOOP *** 610 REM SET PLAYER POSITION AND HEIGHT & CHECK JOYSTICK 620 POKE PHMEM,14 630 POKE PXMEM,P0X:POKE PYMEM,P0Y 640 GOSUB 700 650 GOTO 620 660 END 700 REM PLAYER MOVEMENT CALCULATIONS 710 JOY = STICK(0) 720 IF JOY=15 THEN RETURN 730 IF JOY=11 THEN P0X=P0X-2 740 IF JOY=7 THEN P0X=P0X+2 750 IF JOY=13 THEN P0Y=P0Y+2 760 IF JOY=14 THEN P0Y=P0Y-2 770 IF P0X>190 THEN P0X=50 780 IF P0X<50 THEN P0X=190 790 IF P0Y>205 THEN P0Y=45 800 IF P0Y<45 THEN P0Y=205 810 RETURN 5000 REM READ IN MACHINE LANGUAGE ROUTINE FOR MOVING CHAR SET 5010 FOR I=0 TO 49 5020 READ DAT:POKE 1536+I,DAT 5030 NEXT I 5040 M=USR(1536,GRTOP,1,4) 5050 REM REDEFINE CHARS A TO J 5060 CHRAM=CHRAM+264 5070 FOR I=1 to 16 5080 FOR ADDR=CHRAM TO CHRAM+7 5090 READ DAT:POKE ADDR,DAT 5100 NEXT ADDR 5110 CHRAM=CHRAM+8 5120 NEXT I 5130 REM DRAW DEATH STAR 5140 POSITION 3,2 5150 PRINT #6; "AEIM" 5160 POSITION 3,3 5170 PRINT #6; "BFJN" 5180 POSITION 3,4 5190 PRINT #6; "CGKO" 5200 POSITION 3,5 5210 PRINT #6; "DHLP" 5220 POSITION 3,6 5230 REM DRAW STARS 5240 POSITION 1,1 5250 PRINT #6; "*" 5260 POSITION 12,2 5270 PRINT #6; "*" 5280 POSITION 3,10 5290 PRINT #6; "*" 5300 POSITION 14,8 5310 PRINT #6; "*" 5320 POSITION 18,5 5330 PRINT #6; "*" 5340 POSITION 18,5 5350 PRINT #6; "*" 5400 RETURN 6000 REM INITIALIZE VBLANK FAST PLAYER MOVEMENT ROUTINE 6010 FOR I=1536 TO 1706 6020 READ A:POKE I,A 6030 NEXT I 6040 FOR I=1774 TO 1787 6050 POKE I,0 6060 NEXT I 6100 REM INITIALIZE PLAYER-MISSILE GRAPHICS 6110 REM First zero out the player memory area 6120 FOR I=PMBASE+1023 TO PMBASE+2047 6130 POKE I,0 6140 NEXT I 6150 REM Next load the player 0 shape data into memory 6160 FOR I=PMBASE+1025 TO PMBASE+1038 6170 READ A:POKE I,A 6180 NEXT I 6200 REM Initialize the player-missle graphics options 6210 POKE 559,62 6220 POKE 623,1 6230 POKE 1788,PM+4 6240 POKE 53277,3 6250 POKE 53256,1 6260 POKE 54279,PM 6270 X=USR(1696) 6300 RETURN 7000 REM MACHINE LANGUAGE ROUTINE FOR MOVING CHAR SET 7010 DATA 104,169,224,133,206,104,104,133,204,104,104,201,1,240,4,230 7020 DATA 206,230,204,104,104,141,176,6,169,0,133,205 7030 DATA 133,203,168,177,205,145,203,200,208,249,230 7040 DATA 206,230,204,206,176,6,208,240,96,0,0 7100 REM DATA FOR REDEFINED CHARACTERS (DEATH STAR) 7110 DATA 0,0,3,7,15,15,31,31 7120 DATA 63,63,127,127,127,127,127,127 7130 DATA 0,127,127,127,127,127,63,63 7140 DATA 31,31,15,15,7,1,0,0 7150 DATA 0,63,255,255,255,255,255,207 7160 DATA 135,3,3,135,207,255,255,255 7170 DATA 0,255,255,255,255,255,255,255 7180 DATA 255,255,255,255,255,255,63,0 7190 DATA 0,252,255,255,255,255,255,255 7200 DATA 255,255,255,255,255,255,255,255 7210 DATA 0,255,255,255,255,255,255,255 7220 DATA 255,255,255,255,255,255,252,0 7230 DATA 0,0,128,224,240,240,248,248 7240 DATA 252,252,254,254,254,254,254,254 7250 DATA 0,254,254,254,254,254,252,252 7260 DATA 248,248,240,240,224,128,0,0 8000 REM VBLANK INTERRUPT ROUTINE (FAST PLAYER MOVEMENT) 8010 DATA 162,3,189,244,6,240,89,56,221,240,6,240,83,141,254,6,106,141 8020 DATA 255,6,142,253,6,24,169,0,109,253,6,24,109,252,6,133,204,133 8030 DATA 206,189,240,6,133,203,173,254,6,133,205,189,248,6,170,232,46,255 8040 DATA 6,144,16,168,177,203,145,205,169,0,145,203,136,202,208,244,76,87 8050 DATA 6,160,0,177,203,145,205,169,0,145,203,200,202,208,244,174,253,6 8060 DATA 173,254,6,157,240,6,189,236,6,240,48,133,203,24,138,141,253,6 8070 DATA 109,235,6,133,204,24,173,253,6,109,252,6,133,206,189,240,6,133 8080 DATA 205,189,248,6,170,160,0,177,203,145,205,200,202,208,248,174,253,6 8090 DATA 169,0,157,236,6,202,48,3,76,2,6,76,98,228,0,0,104,169 8100 DATA 7,162,6,160,0,32,92,228,96 9000 REM PLAYER SHAPE DATA (DARTH VADER TIE FIGHTER) 9010 DATA 66,129,129,153,153,255,255,255,255,153,153,129,129,66