KLEINES POKE+PEEK TESTPROGRAMM FÜR DEN C64 (VICE)

von Olaf Zimmermann

10 REM OLAFS KLEINES POKE+PEEK TESTPROGRAMM FUER DEN C64 (VICE)
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