# Example playfield using a redefined character set # By Jason H. Moore, Ph.D. # September 23, 2018 # Thanks to character set code example from The Creative Atari # Thanks to machine language example from Atari Graphics & Arcade Design # Goal is to approximate playfield from Gene Medic for Atari 2600 # NOTE this code is for comments only # Do not run 100 MEMTOP=PEEK(106) # find the last page of usable memory 110 GRTOP=MEMTOP-4 # go back 4 pages or 1024 bytes 120 POKE 106,GRTOP # this is the new end of memory freeing # up 1024 bytes for char set 130 GRAPHICS 0:POKE 752,1 # Want a text screen:turn off cursor 140 SETCOLOR 1,9,9 # set char luminance 150 SETCOLOR 2,9,2 # set background and char color to blue 160 CHRAM=GRTOP*256 # get address of char set (pages*bytes) 170 POKE 756,GRTOP # Tell ANTIC where char set is in RAM # so it doesn't use char set in ROM 200 REM READ IN MACHINE LANGUAGE ROUTINE FOR MOVING CHAR SET 210 FOR I=0 TO 49 # number of machine language commands 220 READ DAT:POKE 1664+I,DAT # read ML commands & place in memory 230 NEXT I # loop 240 M=USR(1664,GRTOP,1,4) # execute ML commands at mem loc 1664 280 REM REDEFINE CHARS A TO J TO GRAPHIC ELEMENTS FOR PLAYFIELD 290 CHRAM=CHRAM+264 # skip ahead to A, 264 = char 33*8 bytes 300 FOR I=1 to 10 # loop through 10 chars 310 FOR ADDR=CHRAM TO CHRAM+7 # address for each of 8 bytes for char 320 READ DAT:POKE ADDR,DAT # read data for new char & poke to memory 330 NEXT ADDR # loop for address of each byte 340 CHRAM=CHRAM+8 # advance 8 bytes to next char 350 NEXT I # loop for number of chars to redefine 400 REM MACHINE LANGUAGE CODE FOR MOVING CHAR SET 410 DATA 104,169,224,133,206,104,104,133,204,104,104,201,1,240,4,230 420 DATA 206,230,204,104,104,141,176,6,169,0,133,205 430 DATA 133,203,168,177,205,145,203,200,208,249,230 440 DATA 206,230,204,206,176,6,208,240,96,0,0 500 REM DATA FOR REDEFINED CHARACTERS 510 DATA 0,0,0,0,0,0,0,0 # blank char (A) 520 DATA 255,0,0,0,0,0,0,0 # upper line 1 (B) 530 DATA 0,255,0,0,0,0,0,0 # upper line 2 (C) 540 DATA 0,0,255,0,0,0,0,0 # upper line 3 (D) 550 DATA 0,0,0,255,0,0,0,0 # middle line 1 (E) 560 DATA 0,0,0,0,255,0,0,0 # middle line 2 (F) 570 DATA 0,0,0,0,0,255,0,0 # lower line 1 (G) 580 DATA 0,0,0,0,0,0,255,0 # lower line 2 (H) 590 DATA 0,0,0,0,0,0,0,255 # lower line 3 (I) 595 DATA 255,255,255,255,255,255,255,255 # solid char (J) 600 REM DRAW CHARS ON SCREEN 610 POSITION 0,7 620 PRINT "JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ" 630 POSITION 0,14 640 PRINT "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 650 POSITION 0,21 660 PRINT "IHGFFFGHIHGFFFGHIHGFFFGHIHGFFFGHIHGFFFGH" 670 POSITION 0,22 680 PRINT "ABCDDDCBABCDDDCBABCDDDCBABCDDDCBABCDDDCB" 1000 GOTO 1000 # infinite loop