| KLEINES POKE+PEEK TESTPROGRAMM FÜR DEN C64 (VICE)
von Olaf Zimmermann
12 REM ------------------------------------------------------------ 14 REM ZIEL: TESTFELD ZEICHNEN UND EINEN CURSOR BEWEGEN 16 REM PFEILE = BEWEGEN, SPACE = FARBE WECHSELN, Q = ENDE 18 REM VOR JEDEM POKE WIRD MIT PEEK GELESEN, WAS DORT STEHT 19 REM ------------------------------------------------------------ 20 SC=1024:CO=55296 22 REM SC = SCREEN-RAM ($0400). HIER STEHEN DIE ZEICHENCODES. 24 REM CO = COLOR-RAM ($D800). HIER STEHT DIE FARBE PRO SCREENZELLE. 26 REM FUER JEDE POSITION GIBT ES ALSO 2 BYTES: 28 REM 1) ZEICHENBYTE IM SCREEN-RAM, 2) FARBBYTE IM COLOR-RAM. 30 FW=20:FH=11:OX=10:OY=10 32 REM FW/FH = GROESSE DES TESTFELDS (BREITE/HOEHE) IN ZEICHEN. 34 REM OX/OY = OFFSET AUF DEM 40X25 BILDSCHIRM. 36 REM DAS TESTFELD BEGINNT BEI SPALTE OX UND ZEILE OY. 40 DOT=46:CUR=160 42 REM DOT = 46 = "." (PUNKT) ALS ZEICHENCODE IM SCREEN-RAM. 44 REM CUR = 160 = "REVERSE SPACE" ALS CURSORBLOCK-EFFEKT. 46 REM (IM C64 SCREEN-RAM ERGIBT 160 EIN INVERTIERTES SPACE.) 50 GX=INT(FW/2):GY=INT(FH/2) 52 REM GX/GY = AKTUELLE POSITION IM TESTFELD (0..FW-1 / 0..FH-1). 54 REM START IST IN DER MITTE DES TESTFELDS. 60 CC=2 62 REM CC = AKTUELLE CURSORFARBE (0..15). 64 REM MIT SPACE WIRD CC WEITERGEZAEHLT. 70 PRINT CHR$(147) 72 REM CHR$(147) = CLEAR SCREEN (BILDSCHIRM LOESCHEN). 80 GOSUB 900 82 REM 900: TESTFELD MIT PUNKTEN FUELLEN UND GRUNDFARBE SETZEN. 90 GOSUB 2000 92 REM 2000: ADRESSEN BERECHNEN, PEEK LESEN, DANN CURSOR SETZEN. 100 GOSUB 1000 102 REM 1000: STATUSZEILEN OBEN AUSGEBEN (X/Y, ADRESSE, PEEK-WERTE). 110 GET A$:IF A$="" THEN 110 112 REM GET LIEST 1 ZEICHEN OHNE ENTER. 114 REM WENN KEINE TASTE: A$="" - WARTEN. 120 IF A$="Q" THEN END 122 REM Q = PROGRAMM ENDE. 130 IF A$=CHR$(145) AND GY0 THEN GY=GY-1 132 REM CHR$(145) = CURSOR UP. NUR WENN NICHT AM RAND. IF A$=CHR$(145) AND GY>0 THEN GY=GY-1 142 REM CHR$(17) = CURSOR DOWN. 150 IF A$=CHR$(157) AND GX0 THEN GX=GX-1 152 REM CHR$(157) = CURSOR LEFT. IF A$=CHR$(145) AND GY>0 THEN GY=GY-1 162 REM CHR$(29) = CURSOR RIGHT. 170 IF A$=" " THEN CC=CC+1:IF CC15 THEN CC=1 172 REM SPACE: FARBE 1..15 DURCHSCHALTEN. 180 GOSUB 2000 182 REM NACH JEDER AENDERUNG: NEU BERECHNEN, PEEK, DANN POKE. 190 GOSUB 1000 192 REM STATUS AKTUALISIEREN. 200 GOTO 110 202 REM ZURUECK ZUM TASTEN-LOOP. 900 REM TESTFELD FUELLEN 902 REM ------------------------------------------------------------ 904 REM SCHREIBT DOT IN ALLE FELDZELLEN UND SETZT FARBE AUF 1. 906 REM ADRESSFORMEL FUER SCREEN-RAM: 908 REM ADRESSE = SC + (ZEILE*40) + SPALTE 909 REM ------------------------------------------------------------ 910 FOR Y=0 TO FH-1 920 FOR X=0 TO FW-1 930 A=SC+(OY+Y)*40+(OX+X) 932 REM A IST DIE SCREEN-RAM-ADRESSE DER ZELLE (X,Y) IM TESTFELD. 940 POKE A,DOT 942 REM DOT INS SCREEN-RAM SCHREIBEN. 950 POKE CO+(OY+Y)*40+(OX+X),1 952 REM PASSENDES FARBBYTE INS COLOR-RAM: GRUNDFARBE 1. 960 NEXT X 970 NEXT Y 980 RETURN 1000 REM KOPF/STATUS 1002 REM ------------------------------------------------------------ 1004 REM ZEIGT STEUERUNG UND DEBUG-INFOS: 1006 REM GX/GY = POSITION IM TESTFELD 1008 REM PA = SCREEN-RAM-ADRESSE DER CURSORZELLE 1010 REM V = PEEK(PA) (ZEICHENBYTE VOR DEM POKE) 1012 REM C = PEEK(CA) (FARBBYTE VOR DEM POKE) 1013 REM ------------------------------------------------------------ 1015 PRINT CHR$(19) 1017 REM CHR$(19) = HOME (CURSOR NACH OBEN LINKS). 1020 PRINT "POKE/PEEK DEMO (VICE)" 1025 PRINT "PFEILE=BEWEGEN SPACE=FARBE Q=ENDE" 1030 PRINT "X=";GX;" Y=";GY;" FARBE=";CC;" " 1040 PRINT "ADRESSE=";PA;" " 1050 PRINT "PEEK=";V;" COLORBYTE=";C;" " 1060 RETURN 2000 REM ADRESSE+PEEK, DANN CURSOR 2002 REM ------------------------------------------------------------ 2004 REM 1) PA/CA BERECHNEN (SCREEN/COLOR ADRESSE DER CURSORZELLE) 2006 REM 2) V/C MIT PEEK LESEN (WAS STEHT DA JETZT?) 2008 REM 3) CURSOR SETZEN: ZEICHEN UND FARBE SCHREIBEN (POKE) 2010 REM ------------------------------------------------------------ 2011 PA=SC+(OY+GY)*40+(OX+GX) 2012 REM PA = SCREEN-RAM-ADRESSE FUER (GX,GY). 2020 CA=CO+(OY+GY)*40+(OX+GX) 2022 REM CA = COLOR-RAM-ADRESSE FUER (GX,GY). 2030 V=PEEK(PA) 2032 REM V = ZEICHENBYTE, DAS DORT VORHER STAND. 2040 C=PEEK(CA) 2042 REM C = FARBBYTE, DAS DORT VORHER STAND. 2050 POKE PA,DOT 2052 REM OPTIONAL: ZUERST DOT SETZEN (FELD BLEIBT PUNKTIG). 2060 POKE PA,CUR 2062 REM CURSOR ZEICHEN (INVERTIERTES SPACE). 2070 POKE CA,CC 2072 REM FARBE DER CURSORZELLE SETZEN. 2080 RETURN |
Zur Startseite © Olaf Zimmermann, Berlin