{"id":237,"date":"2026-08-29T04:08:36","date_gmt":"2026-08-29T04:08:36","guid":{"rendered":"https:\/\/permacomputer.solarpunk.au\/?p=237"},"modified":"2026-08-29T04:08:36","modified_gmt":"2026-08-29T04:08:36","slug":"word-processors-in-basic-part-2","status":"publish","type":"post","link":"https:\/\/permacomputer.solarpunk.au\/?p=237","title":{"rendered":"Word Processors in BASIC, Part 2"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Nibblewriter<\/h1>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"426\" style=\"aspect-ratio: 1152 \/ 426;\" width=\"1152\" controls src=\"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/08\/nibblewriter.mp4\"><\/video><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Found in <strong>November 1988<\/strong> issue of <em>Nibble<\/em> magazine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Archive.org link <a href=\"https:\/\/archive.org\/details\/nibbledisks_nib35b\" data-type=\"link\" data-id=\"https:\/\/archive.org\/details\/nibbledisks_nib34b\">here<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The project was alerted to the existence of a few text editors and word processors in <em>Nibble <\/em>magazine by someone <a href=\"https:\/\/matrix.to\/#\/#basic:solarpunk.au\" data-type=\"link\" data-id=\"https:\/\/matrix.to\/#\/#basic:solarpunk.au\">on matrix<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What we found was a great wealth of BASIC programs for the Apple II computer. We uncovered several particularly interesting BASIC word processors. Two that are of particular interest are <em><a href=\"https:\/\/permacomputer.solarpunk.au\/?p=213\" data-type=\"post\" data-id=\"213\">Quickwriter<\/a><\/em> and this one, <em>Nibblewriter<\/em>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">diskM8 File Dump<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Please find an ASCII conversion of the BASIC dump obtained using the following commands:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>$ diskm8 -ingest \/path\/to\/your\/disk\/images\n$ diskm8 -search \"nibblewriter\"\n$ diskm8 -with-disk \"your_disk_image.do\" -file-extract \"NIBBLEWRITER.BAS\"<\/code><\/pre>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-f33750a4-e54a-435a-9fac-cf324701d0c4\" href=\"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/08\/nibblewriter0x0801.BAS_.asc\">nibblewriter#0x0801.BAS<\/a><\/div>\n\n\n\n<h1 class=\"wp-block-heading\">Code Listing<\/h1>\n\n\n\n<pre class=\"wp-block-code alignwide has-small-font-size\"><code>10  REM *************************\n20  REM *     NIBBLEWRITER      *\n21  REM *     ------------      *\n30  REM *  BY ROBERT T. YUILLE  *\n40  REM *  COPYRIGHT (C) 1988   *\n50  REM *  BY MICROSPARC, INC.  *\n60  REM *  CONCORD, MA  01742   *\n70  REM *************************\n80  HOME : PRINT  CHR$ (21)\n90  REM   SET HIMEM\n100 PRODOS =  PEEK (48896) = 76: IF  NOT PRODOS THEN  HIMEM: 24832: GOTO 170\n110  REM   FOR PRODOS\n120  POKE 768,32: POKE 769,248: POKE 770,190\n130  POKE 771,169: POKE 772,53: POKE 773,32\n140  POKE 774,245: POKE 775,190: POKE 776,96\n150  CALL 768\n160  REM   INITIALIZATION\n170 LM$ = \"1.0\":RM$ = \"1.0\":TM$ = \"1.0\":BM$ = \"1.0\"\n180 LM = 8:RM = 66:TM = 6:BM = 60\n190  POKE 30,0: POKE 233,0: REM  NEWF &amp; PRNTF\n200 D$ =  CHR$ (4):B$ =  CHR$ (7):E$ =  CHR$ (27):R$ =  CHR$ (13): IF  NOT PRODOS THEN D$ =  CHR$ (13) +  CHR$ (4)\n210 M1$ = \"MARGIN VALUE EXCEEDS MAXIMUM\"\n220 M2$ = \"MARGIN VALUE IS LESS THAN MINIMUM\"\n230 M3$ = \"CHAR CANNOT BE USED IN THIS INPUT\"\n240 FL$ = \"WP.40.O\"\n250 FADDR = 26124: REM   FILENAME ($660C)\n260 ST = 6:DR = 1: REM  DEFAULT SLOT AND DRIVE\n270  PRINT D$\"PR#0\"\n280 :\n290  REM   LOAD WP OBJECT FILE\n300 :\n310 LK = 1: ONERR  GOTO 3130\n320  PRINT D$\"BLOAD NW.BIN\"\n330  POKE 216,0: REM  RESET ERROR FLAG\n340 :\n350  REM    INITIALIZE &amp; READ MENU DATA\n360 :\n370  READ MITEMS: DIM MENU$(9): FOR J = 0 TO MITEMS: READ MENU$(J): NEXT \n380  DIM X$(1):X$(0) = \"   \":X$(1) = \"-->\"\n390 :\n400  REM   MAIN MENU\n410 :\n420  TEXT : HOME : GOSUB 3040: POKE 216,0: ONERR  GOTO 3130\n430 PX = 38:SX = 4:SE = SE + (SE = 0):MX = MITEMS: GOSUB 2960: IF Z = 20 THEN  PRINT B$: GOTO 420\n440  ON SE GOTO 480,560,670,890,940,990,1480,2750,1740\n450 :\n460  REM   START NEW DOCUMENT\n470 :\n480  IF  PEEK (30) = 2 THEN  GOSUB 2660: IF ESCF = 1 THEN 420\n490  GOSUB 1830: IF ESCF = 1 THEN 420\n500  POKE 30,0\n510  CALL 26112: REM   ENTRY ($6600)\n520  GOTO 420\n530 :\n540  REM   LOAD NEW DOCUMENT\n550 :\n560  IF  PEEK (30) = 2 THEN  GOSUB 2660: IF ESCF = 1 THEN 420\n570  GOSUB 1830: IF ESCF = 1 THEN 420\n580  HTAB 1: VTAB 20: PRINT \"LOADING \"FL$\n590 LK = 3: ONERR  GOTO 3130\n600  PRINT D$\"BLOAD \"FL$\",S\"ST\",D\"DR\n610  POKE 216,0\n620  POKE 30,1: REM  SET NEWF FOR LOADED FILE\n630  GOTO 510\n640 :\n650  REM   SAVE CURRENT DOCUMENT\n660 :\n670  HOME : IF  PEEK (30) &lt;  > 2 THEN  VTAB 5: PRINT \"THERE IS NO CURRENT DOCUMENT\": VTAB 10: PRINT \"PRESS RETURN FOR MAIN MENU: \";: GET A$: GOTO 420\n680 EF =  PEEK (252) + 256 *  PEEK (253): REM  EFL($FC) &amp; EFH($FD)\n690 LN = EF - 28672\n700  ONERR  GOTO 800\n710  PRINT D$\"VERIFY \"FL$\",S\"ST\",D\"DR\n720  HOME : VTAB 5: PRINT \"FILE: '\"FL$\"' ALREADY EXISTS\"\n730  VTAB 13: PRINT \"PRESS 'Y' TO REPLACE EXISTING FILE\": PRINT : PRINT \"PRESS 'N' TO RENAME FILE\": VTAB 10: PRINT \"DO YOU WANT TO REPLACE\": PRINT \"THE EXISTING FILE? (Y\/N) \";\n740  GET A$\n750  IF A$ = \"N\" OR A$ = \"n\" THEN  POKE 216,0: GOTO 840\n760  IF A$ &lt;  > \"Y\" AND A$ &lt;  > \"y\" THEN  GOTO 740\n770  HTAB 1: VTAB 20: PRINT \"DELETING \"FL$\n780 LK = 2: ONERR  GOTO 3130\n790  PRINT D$\"DELETE \"FL$\",S\"ST\",D\"DR\n800  HTAB 1: VTAB 21: PRINT \"SAVING \"FL$\n810 LK = 2: ONERR  GOTO 3130\n820  PRINT D$\"BSAVE \"FL$\",A$7000,L\"LN\",S\"ST\",D\"DR\n830  POKE 216,0: GOTO 420\n840  GOSUB 1830: IF ESCF = 1 THEN 420\n850  GOTO 670\n860 :\n870  REM   RENAME CURRENT DOCUMENT\n880 :\n890  GOSUB 1830: IF ESCF = 1 THEN 420\n900  GOTO 510\n910 :\n920  REM   CONTINUE WITH CURRENT DOCUMENT\n930 :\n940  IF  PEEK (30) &lt;  > 2 THEN 670\n950  GOTO 510\n960 :\n970  REM   PRINTER ROUTINE\n980 :\n990  IF  PEEK (30) &lt;  > 2 THEN 670\n1000  HOME : VTAB 2: PRINT \"MARGIN VALUES ARE AS FOLLOWS:\": PRINT : PRINT \"LM= \"LM$\"  RM= \"RM$\"  TM= \"TM$\"  BM= \"BM$\n1010  VTAB 10: PRINT \"DO YOU WANT TO CHANGE MARGINS (Y\/N)? \";\n1020  GET A$\n1030  IF A$ = \"Y\" OR A$ = \"y\" THEN 1060\n1040  IF A$ &lt;  > \"N\" AND A$ &lt;  > \"n\" THEN 1020\n1050  GOTO 1370\n1060 M$ = \"LM\":MA$ = \"7.0\":MI$ = \"0.5\"\n1070  GOSUB 2330: IF ESCF = 1 THEN 420\n1080 N =  VAL (N$)\n1090  IF N > 7 THEN MSG$ = M1$: GOSUB 2250: GOTO 1060\n1100  IF N &lt; .5 THEN MSG$ = M2$: GOSUB 2250: GOTO 1060\n1110 LM = N * 10 - 2\n1120 LM$ = N$\n1130 M$ = \"RM\":MA$ = \"7.0\":MI$ = \"0.5\"\n1140  GOSUB 2330: IF ESCF = 1 THEN 420\n1150 N =  VAL (N$)\n1160  IF N > 7 THEN MSG$ = M1$: GOSUB 2250: GOTO 1130\n1170  IF N &lt; .5 THEN MSG$ = M2$: GOSUB 2250: GOTO 1130\n1180 RM = 80 - (N * 10 - 4) - LM\n1190  IF RM &lt;  = 0 THEN MSG$ = \"LEFT MARGIN EXCEEDS RIGHT MARGIN\": GOSUB 2250:RM = 66: GOTO 990\n1200 RM$ = N$\n1210 M$ = \"TM\":MA$ = \"8.0\":MI$ = \"0.2\"\n1220  GOSUB 2330: IF ESCF = 1 THEN 420\n1230 N =  VAL (N$)\n1240  IF N > 8 THEN MSG$ = M1$: GOSUB 2250: GOTO 1210\n1250  IF N &lt; .2 THEN MSG$ = M2$: GOSUB 2250: GOTO 1210\n1260 TM =  INT (6 * N + .5)\n1270 TM$ = N$\n1280 M$ = \"BM\":MA$ = \"8.0\":MI$ = \"0.2\"\n1290  GOSUB 2330: IF ESCF = 1 THEN 420\n1300 N =  VAL (N$)\n1310  IF N > 8 THEN MSG$ = M1$: GOSUB 2250: GOTO 1280\n1320  IF N &lt; .2 THEN MSG$ = M2$: GOSUB 2250: GOTO 1280\n1330 BM = 66 -  INT (6 * N + .5)\n1340  IF TM >  = BM THEN MSG$ = \"TOP MARGIN EXCEEDS BOTTOM MARGIN\": GOSUB 2250: GOTO 1210\n1350 BM$ = N$\n1360  GOTO 990\n1370  POKE 26,TM: POKE 27,BM: POKE 28,LM: POKE 29,RM\n1380  HOME : VTAB 2: PRINT \"BE SURE YOUR PRINTER IS READY\": VTAB 10: PRINT \"PRESS RETURN TO CONTINUE: \";: GET A$\n1390  HOME : VTAB 15: PRINT \"PRESS ESCAPE TO CANCEL PRINTING.\"\n1400  VTAB 10: PRINT \"PRESS SPACE BAR TO CONTINUE: \"\n1410  PRINT D$\"PR#1\"\n1420  PRINT  CHR$ (9)\"80N\": POKE 233,1: CALL 26112: POKE 233,0\n1430  PRINT D$\"PR#0\"\n1440  GOTO 420\n1450 :\n1460  REM   HELP SCREEN\n1470 :\n1480  TEXT : HOME \n1490  NORMAL : PRINT \"             HELP SCREEN\": REM  13 SPACES\n1500  PRINT : PRINT \n1510  PRINT \"&lt;ARROWS> - MOVE CURSOR\"\n1520  PRINT \n1530  PRINT \"&lt;ESCAPE> - RETURN TO MAIN MENU\"\n1540  PRINT \n1550  PRINT \"&lt;DELETE> - DELETE CHAR LEFT OF CURSOR\"\n1560  PRINT \n1570  PRINT \"&lt;CTRL>-D - DELETE CHAR UNDER CURSOR\"\n1580  PRINT \n1590  PRINT \"&lt;CTRL>-E - CHANGE INSERT\/REPLACE CURSOR\"\n1600  PRINT \n1610  PRINT \"&lt;CTRL>-Y - CLEAR FROM CURSOR TO EOL\"\n1620  PRINT \n1630  PRINT \"&lt;CTRL>-Z - SHOW CR'S AS INV ASTERISK\"\n1640  PRINT \n1650  PRINT \"   &lt;TAB> - MOVE CURSOR TO NEXT TAB POS\"\n1660  PRINT \n1670  PRINT \"&lt;CTRL>-F - MOVE TO FIRST LINE\"\n1680  PRINT \"&lt;CTRL>-C - MOVE TO CENTER LINE\"\n1690  PRINT \"&lt;CTRL>-L - MOVE TO LAST LINE\";\n1700  HTAB 1: VTAB 24: PRINT \"PRESS RETURN TO CONTINUE: \";: GET A$: GOTO 420\n1710 :\n1720  REM   QUIT\n1730 :\n1740  HOME : VTAB 10: PRINT \"DO YOU REALLY WANT TO QUIT (Y\/N)? \";\n1750  GET A$\n1760  IF A$ = \"Y\" OR A$ = \"y\" THEN 1790\n1770  IF A$ = \"N\" OR A$ = \"n\" THEN 420\n1780  GOTO 1750\n1790  HOME : END \n1800 :\n1810  REM   FILENAME INPUT ROUTINE\n1820 :\n1830  HOME :N$ = \"\":ESCF = 0\n1840  VTAB 2: PRINT \"ENTER FILENAME FOR DOCUMENT\": PRINT : PRINT \n1850  PRINT \"PRESS '?' TO CATALOG DISK\": PRINT \n1860  PRINT \"ESCAPE ON 1ST CHAR RETURNS TO MAIN MENU\": PRINT \n1870  PRINT \"ESCAPE ON ANY OTHER CHARACTER\": PRINT \" CANCELS INPUT AND STARTS OVER\": PRINT \n1880  PRINT \"RETURN ACCEPTS INPUT\"\n1890  HTAB 1: VTAB 15: PRINT \"FILENAME: \";\n1900  GET C$\n1910  IF C$ = E$ THEN ESCF = 1: RETURN \n1920  IF C$ = \"?\" THEN  PRINT D$ LEFT$ (\"CATALOG\",7 - 4 * PRODOS)\",S\"ST\",D\"DR: HTAB 1: VTAB 24: PRINT \"PRESS RETURN TO CONTINUE: \";: GET A$: GOTO 1830\n1930 AN =  ASC (C$)\n1940  IF AN > 96 AND AN &lt; 123 THEN AN = AN - 32\n1950  IF AN &lt; 65 OR AN > 90 THEN MSG$ = \"FIRST POSITION MUST BE A LETTER\": GOSUB 2250: GOTO 1830\n1960  PRINT  CHR$ (AN)\n1970 N$ =  CHR$ (AN)\n1980  FOR K = 1 TO 15\n1990  HTAB 1: VTAB 18: CALL  - 958\n2000  VTAB 15: HTAB (11 + K)\n2010  GET C$\n2020  IF C$ = E$ THEN K = 15: NEXT : GOTO 1830\n2030  IF C$ =  CHR$ (8) AND K = 1 THEN K = 15: NEXT : GOTO 1830\n2040  IF C$ =  CHR$ (8) THEN K = K - 1: HTAB (11 + K): PRINT \" \":N$ =  LEFT$ (N$,K): GOTO 2000\n2050  IF C$ = R$ THEN LC = K:K = 15: GOTO 2110\n2060 AN =  ASC (C$)\n2070  IF AN > 96 AND AN &lt; 123 THEN AN = AN - 32\n2080  IF (AN &lt; 65 OR AN > 90) AND (AN &lt; 48 OR AN > 57) AND AN &lt;  > 46 THEN MSG$ = \"CHARACTER CANNOT BE USED IN FILENAME\": GOSUB 2250: GOTO 1990\n2090  PRINT  CHR$ (AN)\n2100 N$ = N$ +  CHR$ (AN)\n2110  NEXT \n2120  IF C$ &lt;  > R$ THEN MSG$ = \"FILENAME TOO LONG, LIMIT - 15 CHARACTERS\": GOSUB 2250: GOTO 1830\n2130 FL$ = N$\n2140  FOR I = 0 TO 15\n2150  POKE FADDR + I,0\n2160  NEXT \n2170  FOR K = 1 TO  LEN (N$)\n2180  POKE FADDR - 1 + K, ASC ( MID$ (N$,K,1)) + 128\n2190  NEXT \n2200  POKE FADDR + LC,0\n2210  RETURN \n2220 :\n2230  REM   ERROR MESSAGES\n2240 :\n2250  PRINT B$\n2260  HTAB 1: VTAB 18\n2270  PRINT MSG$: PRINT : PRINT \n2280  PRINT \"PRESS RETURN AND TRY AGAIN: \";: POKE  - 16368,0: GET AA$\n2290  RETURN \n2300 :\n2310  REM   PRINTER MARGIN ROUTINE\n2320 :\n2330  HOME :N$ = \"\":ESCF = 0\n2340  VTAB 2: PRINT \"ENTER VALUE FOR \"M$: PRINT \"MAXIMUM \"MA$\" - MINIMUM \"MI$: PRINT \n2350  PRINT \"ESCAPE ON 1ST CHAR RETURNS TO MAIN MENU\": PRINT \n2360  PRINT \"ESCAPE ON ANY OTHER CHARACTER\": PRINT \" CANCELS INPUT AND STARTS OVER\": PRINT \n2370  PRINT \"RETURN ACCEPTS INPUT\"\n2380  PRINT : PRINT \"RETURN ON 1ST CHAR ACCEPTS DEFAULT (1.0)\"\n2390  HTAB 1: VTAB 15: PRINT M$\":  1.0\"\n2400  HTAB 5: VTAB 15\n2410  GET C$\n2420  IF C$ = E$ THEN ESCF = 1: RETURN \n2430  IF C$ = R$ THEN N$ = \"1.0\": RETURN \n2440 AN =  ASC (C$)\n2450  IF AN &lt; 48 OR AN > 57 THEN MSG$ = M3$: GOSUB 2250: GOTO 2330\n2460  PRINT C$;: CALL  - 868\n2470 N$ = C$\n2480  FOR K = 1 TO 3\n2490  HTAB 1: VTAB 18: CALL  - 958\n2500  VTAB 15: HTAB (5 + K)\n2510  GET C$\n2520  IF C$ = E$ THEN K = 3: NEXT : GOTO 2330\n2530  IF C$ =  CHR$ (8) AND K = 1 THEN K = 3: NEXT : GOTO 2330\n2540  IF C$ =  CHR$ (8) THEN K = K - 1: HTAB (5 + K): PRINT \" \":N$ =  LEFT$ (N$,K): GOTO 2500\n2550  IF C$ = R$ THEN K = 3: GOTO 2600\n2560 AN =  ASC (C$)\n2570  IF (AN &lt; 48 OR AN > 57) AND AN &lt;  > 46 THEN MSG$ = M3$: GOSUB 2250: GOTO 2490\n2580  PRINT C$\n2590 N$ = N$ + C$\n2600  NEXT \n2610  IF C$ &lt;  > R$ THEN MSG$ = \"INPUT TOO LONG, LIMIT - 3 CHARACTERS\": GOSUB 2250: GOTO 2330\n2620  RETURN \n2630 :\n2640  REM  ERASE CURRENT DOCUMENT?\n2650 :\n2660  HOME :ESCF = 0: VTAB 8: PRINT \"YOU ARE ABOUT TO ERASE\": PRINT \"THE CURRENT DOCUMENT.\"\n2670  VTAB 12: PRINT \"DO YOU REALLY WANT TO DO THIS? (Y\/N) \";\n2680  GET A$\n2690  IF A$ = \"N\" OR A$ = \"n\" THEN ESCF = 1: RETURN \n2700  IF A$ &lt;  > \"Y\" AND A$ &lt;  > \"y\" THEN 2680\n2710  RETURN \n2720 :\n2730  REM  SELECT SLOT AND DRIVE\n2740 :\n2750  HOME : VTAB 1: PRINT \"WHICH SLOT DO YOU WANT TO USE? (2-7) \";\n2760  GET A$\n2770  IF A$ =  > \"2\" AND A$ &lt;  =  CHR$ (54 + PRODOS) THEN  PRINT A$:ST =  VAL (A$): GOTO 2790\n2780  GOTO 2760\n2790  VTAB 5: PRINT \"WHICH DISK DRIVE\": PRINT \"DO YOU WANT TO USE? (1-2) \";\n2800  GET A$\n2810  IF A$ = \"1\" OR A$ = \"2\" THEN  PRINT A$:DR =  VAL (A$): GOTO 2830\n2820  GOTO 2800\n2830  POKE 216,0: ONERR  GOTO 2870: IF PRODOS THEN  PRINT D$\"PREFIX,S\";ST;\",D\";DR:\n2840  IF PRODOS THEN  GOTO 420\n2850  PRINT D$\"VERIFY JUNK,S\";ST;\",D\";DR\n2860  GOTO 420\n2870  POKE 216,0:EN =  PEEK (222):EL =  PEEK (218) + 256 *  PEEK (219): IF EL = 2850 AND EN = 6 THEN 420\n2880  VTAB 23: PRINT \"DISK ERROR\": PRINT \"PRESS RETURN TO CONTINUE \";: POKE  - 16368,0: GET AA$: GOTO 420\n2890 :\n2900  REM  DATA FOR MAIN MENU\n2910 :\n2920  DATA  9,MAIN MENU,START NEW DOCUMENT,LOAD DOCUMENT,SAVE DOCUMENT,RENAME DOCUMENT,CONTINUE WITH CURRENT DOCUMENT,PRINT DOCUMENT,HELP,SET SLOT\/DRIVE,QUIT\n2930 :\n2940  REM   MENU HANDLER\n2950 :\n2960 SL = SE\n2970 N = SL:OS = SL: GOSUB 3000:Z = 0: VTAB 24: HTAB PX: CALL  - 868: POKE  - 16368,0\n2980  VTAB 24: HTAB PX: PRINT SL;: WAIT  - 16384,128:Z =  PEEK ( - 16384) - 128: IF Z >  = 49 AND Z &lt;  = MX + 48 THEN SL = Z - 48:N = OS: GOSUB 3000: GOTO 2970\n2990 Z = (Z = 21 OR Z = 10) - (Z = 8 OR Z = 11) + 10 * (Z = 13) + 20 * (Z = 27): ON  NOT Z GOTO 2980:SL = SL + Z * (Z &lt; 10):SL = SL - MX * (SL > MX) + MX * (SL &lt; 1):N = OS: GOSUB 3000: ON Z &lt; 10 GOTO 2970:SE = SL: POKE  - 16368,0: RETURN \n3000  VTAB 3 + 2 * N: HTAB SX: PRINT X$(SL = OS);: RETURN \n3010 :\n3020  REM   PRINT A MENU\n3030 :\n3040  HOME :TL$ = MENU$(0): VTAB 1: PRINT \"NIBBLEWRITER   (C)1988   MICROSPARC,INC.\": VTAB 2: FOR I = 1 TO 40: PRINT \"-\";: NEXT \n3050  VTAB 3: HTAB  INT ((40 -  LEN (TL$)) \/ 2)\n3060  PRINT TL$\n3070  FOR I = 1 TO MITEMS: VTAB 3 + 2 * I: HTAB 8: PRINT I\". \"MENU$(I): NEXT \n3080  VTAB 24: HTAB 1: PRINT \"USE ARROWS\/NUMBERS &amp; PRESS RETURN: \";\n3090  RETURN \n3100 :\n3110  REM  DISK ERRORS\n3120 :\n3130  HOME : VTAB 10\n3140  POKE 216,0\n3150  IF  PEEK (222) = 6 OR  PEEK (222) = 7 THEN MSG$ = \"FILE (\" + FL$ + \")\" +  CHR$ (13) + \"IS NOT ON THIS DISK.\": ON (( PEEK (218) + 256 *  PEEK (219) = 320) + 1) GOTO 3210,3230\n3160  IF  PEEK (222) = 13 THEN MSG$ = \"FILE (\" + FL$ + \")\" +  CHR$ (13) + \"IS NOT A BINARY FILE.\": GOTO 3210\n3170  IF  PEEK (222) = 9 OR  PEEK (222) = 17 THEN MSG$ = \"DISK OR DIRECTORY IS FULL.\": GOTO 3210\n3180  IF  PEEK (222) = 10 THEN MSG$ = \"EXISTING FILE (\" + FL$ + \")\" +  CHR$ (13) + \"IS LOCKED.\": GOTO 3210\n3190  PRINT \"SYSTEM ERROR #\"; PEEK (222);\" HAS OCCURRED\"\n3200  PRINT \"AT LINE #\"; PEEK (218) +  PEEK (219) * 256:MSG$ = \"\"\n3210  GOSUB 2250\n3220  GOTO 420\n3230  VTAB 24: PRINT \"BINARY FILE NOT FOUND\": END<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Nibblewriter Found in November 1988 issue of Nibble magazine. Archive.org link here. The project was alerted to the existence of a few text editors and word processors in Nibble magazine by someone on matrix. What we found was a great wealth of BASIC programs for the Apple II computer. We uncovered several particularly interesting BASIC [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":220,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Found in November 1988 issue of Nibble magazine.\n\nInteractive archive.org link in website post.\n\nThe project was alerted to the existence of a few text editors and word processors in Nibble magazine by someone on matrix.\n\nWhat we found was a great wealth of BASIC programs for the Apple II computer. We uncovered several particularly interesting BASIC word processors. Two that are of particular interest are Quickwriter and this one, Nibblewriter.","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[18],"tags":[31,20,17,26],"class_list":["post-237","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-basic-text-editors","tag-apple-ii-basic","tag-basic","tag-retrocomputing","tag-videos"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/07\/6213123497_509ab72c17_k.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/posts\/237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=237"}],"version-history":[{"count":2,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/posts\/237\/revisions"}],"predecessor-version":[{"id":241,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/posts\/237\/revisions\/241"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/media\/220"}],"wp:attachment":[{"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}