commit 6e944250dba8249a0dc9f0c775dbd35f190a40a3 Author: catseye Date: Thu May 26 20:27:32 2011 -0500 Initial import of Apple Befunge files. diff --git a/befunge.dsk b/befunge.dsk new file mode 100644 index 0000000..dbb3026 Binary files /dev/null and b/befunge.dsk differ diff --git a/befunge.html b/befunge.html new file mode 100755 index 0000000..f177f83 --- /dev/null +++ b/befunge.html @@ -0,0 +1,106 @@ + + +

Apple Befunge

+ +

Go to the Apple Befunge Web Site +| Download the Apple Befunge Disk Image 1.0 +| Obtain an Apple ][+ Emulator +| Go Insane + +

+
+ +

Apple Befunge is a retrolanguage for the Apple ][+ +based mainly on Befunge-93. + +

Differences

+ +

The Apple ][+ has no lowercase characters. In Apple +Befunge, G, P and V do what g, p, and v do in Befunge-93. + +

The Apple ][+ has no ` (backtick) symbol. Instead the +' (apostrophe) symbol is used (it's undefined in Befunge-93.) + +

The Apple ][+ has no ~ (tilde) symbol. Instead the += (equals sign) symbol is used (it's undefined in Befunge-93.) + +

The Apple ][+ has no | (vertical bar) symbol. Instead the +letter I is used (it's undefined in Befunge-93.) + +

The Apple ][+'s screen is only 40x24, not 80x25, and until +a scrolling version of the Apple Befunge debugger is made, +screen size limits program size. + +

Improvements

+ +

Letters A through F represent values 10 through 15 respectively. + +

The ; (semicolon) symbol begins and ends "ignoremode". + +

If the x argument to G is negative, the result is PEEK(y). + +If the x argument to P is negative, the result is POKE y, d. + +The ] instruction pops an argument a off the stack; the result is CALL a. + +These three instructions allow a direct interface to the rest of +the Apple ][+ system. + +

Implementations

+ +

On the ESDOS-][-formatted +Apple Befunge Disk Image 1.0 +there is: + +

+ +

Also in the ZIP archive which contains the disk image, are the source +codes (ASCII text) for APPLE BEFUNGE EDITOR and the 'diffs' for APPLE BEFUNGE RUNNER, +along with a copy of this HTML page. + +

Licsensing

+ +

All Apple Befunge material is freely redistributable. If you +make a derivative work based on Apple Befunge or any of its tools, +all I ask is that you contact me so that we can link web pages +(or I can host your stuff on my site if you don't have a web page.) + +

Known Bugs

+ +

In APPLE BEFUNGE EDITOR: + +

The coordinate (39,23) can only contain blank space (not yet put +in code to draw instructions in that part of the screen, without +scrolling it. I know how to do it, I just haven't bothered.) + +

Subtle bug in either % (modulo) or ' (greater than) or +hex.bf - not entirely sure which. + +

To Do List

+ +

Finish the APPLE BEFUNGE RUNNER program +to execute an Apple Befunge program +non-visually, with more normal I/O for .,=&. +It needs to ask the user for a filename when run +(no command-line arguments in ESDOS ][.) + +

A good reorganization of APPLE BEFUNGE EDITOR is in order. The push and pop subroutines +should probably be as near the beginning of the program as possible. Should hold more +constant values in variables. All the editor-dependent stuff should be in the same place +so it can be wiped out more easily by APPLE BEFUNGE RUNNER. + +

Put a great many more example Apple Befunge programs on the disk image. + +

Write an APPLE BEFUNGE TO APPLESOFT COMPILER. Will probably need +a deeper understanding of the tokenizing mechanism and the filesystem +to accomplish this, since I'll need to write type "A" files. + +


+

Last Updated Jul 3 ©2000 Cat's Eye Technologies. + diff --git a/editor-apple befunge.txt b/editor-apple befunge.txt new file mode 100644 index 0000000..c9710d0 --- /dev/null +++ b/editor-apple befunge.txt @@ -0,0 +1,436 @@ +NEW + +1 REM APPLE BEFUNGE EDITOR V1.0 +2 REM ----- ------- ------ ---- + +6 REM BEFUNGE-93-ESQUE INTERPRETER +7 REM WRITTEN IN APPLESOFT BASIC! +8 REM (C)2000 CAT'S EYE TECHNOLOGIES +9 REM FREELY REDISTRIBUTABLE + +11 REM V1.0 JUL 3 2000 CHRIS PRESSEY + +99 HOME + +100 REM INITIALISE + +110 DIM PG%(79,24) +120 DIM ST%(256) +130 X%=0:Y%=0:DX%=1:DY%=0:QM%=0:IM%=0:RM%=0 +140 I%=0:J%=0:IR%=0:SP%=0:D%=0:E%=0:F%=0 +142 OS$="":D$=CHR$(4) + +150 GOSUB 7140:REM NEW PLAYFIELD + +190 GOTO 710:REM EDIT + +200 REM RUN-PROGRAM LOOP + +210 VTAB Y%+1:HTAB X%+1 +220 IR%=PG%(X%,Y%) +225 IF QM%=1 THEN GOSUB 910:GOTO 240 +230 IF IM%=0 OR IR%=59 THEN GOSUB 400:REM EXECUTE +235 IF RM%=0 THEN GOTO 720:REM END +240 GOSUB 250:REM MOVE THREAD +245 GOTO 210 + +249 REM ADVANCE THREAD + +250 X%=X%+DX%:Y%=Y%+DY% +260 IF X%>39 THEN X%=X%-40 +265 IF X%<0 THEN X%=X%+40 +270 IF Y%>23 THEN Y%=Y%-24 +275 IF Y%<0 THEN Y%=Y%+24 +280 RETURN + +300 REM DISPLAY PAGE + +310 J%=0 +320 VTAB J%+1: HTAB 1 +330 I%=0 +340 IF I%=39 AND J%=23 GOTO 360 +350 PRINT CHR$(PG%(I%,J%)); +360 I%=I%+1:IF I%<40 THEN GOTO 340 +370 J%=J%+1:IF J%<24 THEN GOTO 320 +390 RETURN + +400 REM EXECUTE IR% + +410 IF IR%<33 THEN RETURN +412 IF IR%=86 THEN GOTO 3410:REM V +413 IF IR%=73 THEN GOTO 3010:REM I +414 IF IR%=71 THEN GOTO 3610:REM G +415 IF IR%=80 THEN GOTO 3710:REM P +416 IF IR%>=65 AND IR%<=70 THEN GOTO 2260 +418 IF IR%>=92 THEN ON IR%-91 GOTO 3610,3110,3210,3310 +420 IF IR%>=58 THEN ON IR%-57 GOTO 2310,2410,2510,2610,2710,2810,2910 +430 IF IR%>=48 AND IR%<=57 THEN GOTO 2210 +440 IF IR%>41 THEN ON IR%-41 GOTO 1610,1710,1810,1910,2010,2110 +450 ON IR%-32 GOTO 1010,1110,1210,1310,1410,1510,3510 +460 RETURN + +500 REM PUSH D% ONTO STACK + +510 ST%(SP%)=D%:SP%=SP%+1 +590 RETURN + +600 REM POP D% FROM STACK + +610 IF SP%=0 THEN GOTO 650 +620 SP%=SP%-1:D%=ST%(SP%) +630 RETURN +650 D%=0 +690 RETURN + +700 REM EDIT-PROGRAM LOOP +710 GOSUB 8010:REM DISPLAY PAGE +720 VTAB Y%+1:HTAB X%+1 +722 IR%=PG%(X%,Y%) +730 GET A$:A%=ASC(A$) +733 IF A%=23 THEN GOSUB 6210:GOTO 720 +734 IF A%=15 THEN GOSUB 6010:GOTO 720 +735 IF A%=1 THEN GOSUB 8010:GOTO 720 +736 IF A%=14 THEN GOSUB 7140:GOSUB 300:GOTO 720 +737 IF A%=5 THEN GOSUB 7010:GOTO 720 +738 IF A%=12 THEN DX%=1:DY%=0:X%=0:Y%=0:GOTO 720 +740 IF A%=7 THEN RM%=1:GOTO 200 +741 IF A%=9 THEN GOSUB 810 +742 IF A%=96 THEN A%=39:REM BACKTICK TO APOSTROPHE +744 IF A%=126 THEN A%=61:REM TILDE TO EQUALS SIGN +746 IF A%=124 THEN A%=73:REM VERTICAL BAR TO LETTER I +750 IF A%=20 THEN GOSUB 7110:GOTO 720 +752 IF A%=18 THEN GOSUB 300:GOTO 720 +760 IF A%=11 THEN DX%= 0:DY%=-1:GOSUB 250 +765 IF A%=8 THEN DX%=-1:DY%= 0:GOSUB 250 +770 IF A%=21 THEN DX%= 1:DY%= 0:GOSUB 250 +775 IF A%=10 THEN DX%= 0:DY%= 1:GOSUB 250 +777 IF A%=13 THEN DX%= 1:DY%= 0:X%=0:Y%=Y%+1:GOTO 720 +785 IF A%=27 THEN HOME:END:GOSUB 300:GOTO 720:REM SHELL TO BASIC +786 IF X%=39 AND Y%=23 THEN GOSUB 250:GOTO 720 +787 IF A%>127 THEN A%=A%-128:GOTO 787 +788 IF A%>95 THEN A%=A%-32:GOTO 788 +790 IF A%>31 THEN PG%(X%,Y%)=A%:PRINT CHR$(A%);:GOSUB 250 +795 GOTO 720 + +800 REM HELP +810 VTAB 5:INVERSE +813 HTAB 5:PRINT " CTRL+I - SHOW THIS HELP " +814 HTAB 5:PRINT "------------------------------" +815 HTAB 5:PRINT " ARROW KEYS - MOVE CURSOR/PC " +816 HTAB 5:PRINT " CTRL+L - HOME CURSOR " +817 HTAB 5:PRINT " CTRL+N - NEW:CLEAR PROG " +818 HTAB 5:PRINT " CTRL+O - OPEN:LOAD PROG " +819 HTAB 5:PRINT " CTRL+W - WRITE:SAVE PRG " +820 HTAB 5:PRINT " CTRL+G - GO:RUN PROGRAM " +821 HTAB 5:PRINT " CTRL+T - SINGLE STEP PC " +822 HTAB 5:PRINT " CTRL+E - EXAMINE STACK " +823 HTAB 5:PRINT " CTRL+R - REDRAW SCREEN " +824 HTAB 5:PRINT " CTRL+A - SHOW ABOUT BOX " +825 HTAB 5:PRINT " CTRL+C - STOP PROG RUN " +826 HTAB 5:PRINT " ESC (,CONT) - SHELL TO BASIC " +830 HTAB 5:PRINT "------------------------------" +840 HTAB 5:PRINT " PRESS ANY KEY TO RESUME EDIT " +880 NORMAL +890 GET WT$:GOSUB 300 +895 RETURN + +900 REM QUOTEMODE +910 IF IR%=34 THEN QM%=0:GOTO 990 +920 D%=IR% +930 GOSUB 500 +990 RETURN + +1000 REM ! BOOLEAN NOT +1010 GOSUB 600 +1020 IF D%=0 THEN D%=1:GOTO 1040 +1030 D%=0 +1040 GOSUB 500 +1090 RETURN + +1100 REM " TOGGLE QUOTEMODE +1110 IF QM%=0 THEN QM%=1:GOTO 1180 +1120 QM%=0 +1180 REM +1190 RETURN + +1200 REM # TRAMPOLINE +1210 X%=X%+DX% +1220 Y%=Y%+DY% +1290 RETURN + +1300 REM $ POP +1310 GOSUB 600 +1390 RETURN + +1400 REM % MODULO (SLOW!) +1410 GOSUB 600 +1420 E%=D% +1430 GOSUB 600 +1440 IF D%>E% THEN D%=D%-E%:GOTO 1440 +1450 GOSUB 500 +1490 RETURN + +1500 REM & INPUT INTEGER +1510 HTAB 1:VTAB 23 +1520 INVERSE:PRINT OS$;:NORMAL +1530 INPUT "";WT$ +1535 D%=VAL(WT$) +1537 IF WT$=CHR$(3) THEN RM%=0 +1538 J%=22:GOSUB 320:REM TRICKY BASTARD! +1540 GOSUB 500 +1550 OS$="" +1590 RETURN + +1600 REM * MULTIPLY INTEGERS +1610 GOSUB 600 +1620 E%=D% +1630 GOSUB 600 +1640 D%=D%*E% +1650 GOSUB 500 +1690 RETURN + +1700 REM + ADD INTEGERS +1710 GOSUB 600 +1720 E%=D% +1730 GOSUB 600 +1740 D%=D%+E% +1750 GOSUB 500 +1790 RETURN + +1800 REM , OUTPUT CHARACTER +1810 GOSUB 600 +1820 IF D%<>10 THEN GOTO 1880 +1825 HTAB 1:VTAB 24 +1830 INVERSE:PRINT OS$;" (EOL)";:NORMAL +1840 GET WT$:IF WT$=CHR$(3) THEN RM%=0 +1850 OS$="" +1858 J%=23:GOSUB 320:REM TRICKY BASTARD! +1860 RETURN +1880 OS$=OS$+CHR$(D%) +1882 IF LEN(OS$)>30 THEN GOTO 1825 +1890 RETURN + +1900 REM - SUBTRACT INTEGERS +1910 GOSUB 600 +1920 E%=D% +1930 GOSUB 600 +1940 D%=D%-E% +1950 GOSUB 500 +1990 RETURN + +2000 REM . OUTPUT INTEGER +2010 GOSUB 600 +2020 OS$=OS$+STR$(D%)+" " +2030 IF LEN(OS$)>30 THEN GOTO 1825:REM WAAHH! +2090 RETURN + +2100 REM / DIVIDE INTEGERS +2110 GOSUB 600 +2120 E%=D% +2130 GOSUB 600 +2140 IF E%=0 GOTO 2170 +2150 D%=D%/E% +2160 GOSUB 500 +2165 RETURN +2170 PRINT "WHAT DO YOU WANT ";D%;"/";E%;" TO BE"; +2180 INPUT D% +2185 GOSUB 500 +2190 RETURN + +2200 REM 0-9 PUSH DIGIT +2210 D%=IR%-48 +2220 GOSUB 500 +2240 RETURN + +2250 REM A-F PUSH HEX DIGIT +2260 D%=IR%-55 +2270 GOSUB 500 +2290 RETURN + +2300 REM COLON DUP VALUE +2310 GOSUB 600:GOSUB 500:GOSUB 500 +2390 RETURN + +2400 REM ; IGNORE MODE +2410 IF IM%=0 THEN IM%=1:GOTO 2490 +2420 IM%=0 +2490 RETURN + +2500 REM < LEFT +2510 DX%=-1:DY%=0 +2590 RETURN + +2600 REM ~ INPUT CHARACTER +2601 REM USES = ON APPLE ][+ +2610 HTAB 1:VTAB 24 +2615 INVERSE:PRINT OS$;:NORMAL +2620 GET WT$ +2626 J%=23:GOSUB 320:REM TRICKY BASTARD! +2628 IF WT$=CHR$(3) THEN RM%=0 +2630 D%=ASC(WT$) +2640 GOSUB 500 +2690 RETURN + +2700 REM > RIGHT +2710 DX%=1:DY%=0 +2790 RETURN + +2800 REM ? RANDOM +2810 QD%=RND(1)*4+1 +2815 ON QD% GOTO 2820,2830,2840,2850 +2820 DX%= 1:DY%= 0:RETURN +2830 DX%=-1:DY%= 0:RETURN +2840 DX%= 0:DY%= 1:RETURN +2850 DX%= 0:DY%=-1:RETURN +2890 RETURN + +2900 REM @ END PROGRAM +2910 HTAB 1:VTAB 24 +2920 INVERSE:PRINT OS$;" (END)";:NORMAL +2930 GET WT$ +2935 J%=23:GOSUB 320:REM TRICKY BASTARD! +2940 RM%=0:OS$="" +2990 RETURN + +3000 REM | UP-DOWN DECISION +3001 REM USES I ON APPLE ][+ +3010 GOSUB 600 +3015 DX%=0 +3020 IF D%<>0 THEN DY%=-1:GOTO 3090 +3030 DY%=1 +3090 RETURN + +3100 REM ] CALL MACHINE LANGUAGE +3110 GOSUB 600 +3111 CALL D% +3190 RETURN + +3200 REM ^ UP +3210 DX%=0:DY%=-1 +3290 RETURN + +3300 REM _ LEFT-RIGHT DECISION +3310 GOSUB 600 +3315 DY%=0 +3320 IF D%<>0 THEN DX%=-1:GOTO 3390 +3330 DX%=1 +3390 RETURN + +3400 REM V DOWN +3410 DX%=0:DY%=1 +3490 RETURN + +3500 REM ` GREATER THAN +3501 REM USES ' ON APPLE ][+ +3510 GOSUB 600 +3515 E%=D% +3520 GOSUB 600 +3525 IF D%>E% THEN D%=1:GOTO 3530 +3527 D%=0 +3530 GOSUB 500 +3590 RETURN + +3600 REM G GET FROM SPACE +3610 GOSUB 600 +3615 E%=D% +3620 GOSUB 600 +3732 IF D%<0 THEN D%=PEEK(E%):GOTO 3640 +3630 D%=PG%(D%,E%) +3640 GOSUB 500 +3690 RETURN + +3700 REM P PUT INTO SPACE +3710 GOSUB 600 +3715 E%=D% +3720 GOSUB 600 +3725 F%=D% +3730 GOSUB 600 +3732 IF F%<0 THEN POKE E%,D%:GOTO 3790 +3740 PG%(F%,E%)=D% +3742 HTAB F%+1:VTAB E%+1:INVERSE:PRINT CHR$(D%);:NORMAL +3790 RETURN + +3600 REM \ SWAP +3610 GOSUB 600 +3620 E%=D% +3630 GOSUB 600 +3640 F%=D%:D%=E%:GOSUB 500 +3650 D%=F%:GOSUB 500 +3690 RETURN + + +6000 REM LOAD PROGRAM +6010 HTAB 1:VTAB 23:INPUT "FILENAME: ";F$ +6012 GOSUB 7140 +6015 I=0:J=0 +6020 PRINT D$;"OPEN";F$ +6030 PRINT D$;"READ";F$ + +6032 A$="": CALL 64879 +6034 FOR K=512 TO 611: IF PEEK(K)<>141 THEN A$=A$+CHR$(PEEK(K)-128): NEXT + +6040 REM INPUT A$ +6042 IF LEFT$(A$,14)="END OF PROGRAM" THEN GOTO 6060 +6045 FOR I=0 TO LEN(A$)-1:PG%(I,J)=ASC(MID$(A$,I+1,1)):NEXT +6050 J=J+1:GOTO 6032 +6060 PRINT D$;"CLOSE";F$ +6080 GOSUB 300 +6090 RETURN + +6200 REM SAVE PROGRAM +6210 HTAB 1:VTAB 23:INPUT "FILENAME: ";F$ +6215 I=0 +6220 PRINT D$;"OPEN";F$ +6230 PRINT D$;"WRITE";F$ +6240 REM TODO: OUTPUT PG IN LOOP +6242 FOR J=0 TO 24 +6244 FOR I=0 TO 39:PRINT CHR$(PG%(I,J));:NEXT +6246 PRINT: NEXT +6248 PRINT "END OF PROGRAM" +6250 PRINT D$;"CLOSE";F$ +6280 GOSUB 300 +6290 RETURN + +7000 REM EXAMINE STACK +7010 HTAB 1:VTAB 20:QQ$="" +7012 D%=0 +7014 IF D%=SP% GOTO 7020 +7016 QQ$=QQ$+STR$(ST%(D%))+" " +7018 D%=D%+1:GOTO 7014 +7020 INVERSE:PRINT QQ$;:NORMAL +7030 GET WT$ +7035 J%=19:GOSUB 320:REM TRICKY BASTARD! +7090 RETURN + +7100 REM SINGLE STEP +7110 IF QM%=1 THEN GOSUB 910:GOTO 7114 +7112 IF IM%=0 OR IR%=59 THEN GOSUB 400:REM EXECUTE +7114 GOSUB 250 +7116 RETURN + +7130 REM NEW PLAYFIELD +7140 J%=0 +7150 I%=0 +7160 PG%(I%,J%)=32 +7170 I%=I%+1:IF I%<40 THEN GOTO 7160 +7180 J%=J%+1:IF J%<24 THEN GOTO 7150 +7190 RETURN + +8000 REM ABOUT +8010 VTAB 7 +8013 HTAB 4:PRINT " ______________________________" +8015 HTAB 4:PRINT "/ \" +8016 HTAB 4:PRINT "\ APPLE BEFUNGE V1.0 /" +8018 HTAB 4:PRINT "/ ------------------ \" +8020 HTAB 4:PRINT "\(C)2000 CAT'S EYE TECHNOLOGIES/" +8022 HTAB 4:PRINT "/ HTTP://WWW.CATSEYE.MB.CA/ \" +8023 HTAB 4:PRINT "\ FREELY REDISTRIBUTABLE /" +8024 HTAB 4:PRINT "/ BASED ON BEFUNGE-93 & -96+ \" +8026 HTAB 4:PRINT "\ PRESS CTRL+I FOR HELP INFO /" +8028 HTAB 4:PRINT "/ LONG LIVE RETROCOMPUTING :-) \" +8030 HTAB 4:PRINT "\______________________________/" +8040 HTAB 4:PRINT " PRESS RETURN KEY TO CONTINUE "; +8090 GET WT$:GOSUB 300 +8095 RETURN + +RUN diff --git a/index.html b/index.html new file mode 100755 index 0000000..eab1aa4 --- /dev/null +++ b/index.html @@ -0,0 +1,41 @@ + +Cat's Eye Technologies' Apple ][+ Retrodevelopment Lunacy Server + + + +

+ +
Disclaimer: this page does not actually exist. You are currently hallucinating. +
 APPLE ][+ 
+Retrodevelopment Lunacy Server
+ +

Cat's Eye Technologies encourages the engineering of new +and innovative software for the Apple ][+ computing platform +as an act of retrodevelopment. + +

This page was established to provide, free to all websurfers, + our contribution to this cheerful insanity. + +

Among our efforts include thus far so far we have (sic): + +

+
+

  +

  +

+
+] RUN
+?BULLSH*T ERROR IN 20
+
+] LIST 20
+20  2 + 2 = 5
+

  +

  +


Last Updated Jul 3 ©2000 Cat's Eye Technologies.
+ + diff --git a/runner-apple befunge.txt b/runner-apple befunge.txt new file mode 100644 index 0000000..ae03abc --- /dev/null +++ b/runner-apple befunge.txt @@ -0,0 +1,77 @@ +REM THIS SOURCE SHOULD FOLLOW UPLOAD OF 'APPLE BEFUNGE EDITOR' +REM AS IT USES IT AS THE BASIS FOR 'APPLE BEFUNGE RUNNER' +REM PROGRAMMING IN APPLESOFT IS MORE INTERESTING LIKE THIS :-) + + +1 REM APPLE BEFUNGE RUNNER V1.0 +2 REM ----- ------- ------ ---- + +99 REM HOME +190 RM%=1:REM GOTO 710:REM EDIT +210 REM VTAB Y%+1:HTAB X%+1 + +310 RETURN: REM J%=0: REM ???DELETE 300-399 + +710 RETURN: REM GOSUB 8010:REM DISPLAY PAGE: REM ???DELETE 700-899 + +1500 REM & INPUT INTEGER:REM ???DELETE 1500-1599 +1510 REM +1520 REM +1530 INPUT "";WT$:D%=VAL(WT$):GOSUB 500:RETURN +1535 REM +1537 REM +1538 REM +1540 REM +1550 REM +1590 RETURN + +1800 REM , OUTPUT CHARACTER:REM ???DELETE 1800-1899 +1810 GOSUB 600 +1820 IF D%<>10 THEN GOTO 1880 +1825 PRINT:RETURN +1830 REM +1840 REM +1850 REM +1858 REM +1860 RETURN +1880 PRINT CHR$(D%);:RETURN +1882 REM +1890 RETURN + +2000 REM . OUTPUT INTEGER:REM ???DELETE 2000-2099 +2010 GOSUB 600 +2020 PRINT STR$(D%);" ";:RETURN +2030 REM +2090 RETURN + +2600 REM ~ INPUT CHARACTER +2601 REM USES = ON APPLE ][+ +2610 GET WT$:D%=ASC(WT$):GOSUB 500:RETURN +2615 REM +2620 REM +2626 REM +2628 REM +2630 REM +2640 REM +2690 RETURN + +2900 REM @ END PROGRAM +2910 END:REM +2920 REM +2930 REM +2935 REM +2940 REM +2990 REM + +3700 REM P PUT INTO SPACE +3710 GOSUB 600 +3715 E%=D% +3720 GOSUB 600 +3725 F%=D% +3730 GOSUB 600 +3732 IF F%<0 THEN POKE E%,D%:GOTO 3790 +3740 PG%(F%,E%)=D% +3742 RETURN:REM HTAB F%+1:VTAB E%+1:INVERSE:PRINT CHR$(D%);:NORMAL +3790 RETURN + +REM DELETE 6000-7129