home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib28b.dsk / ROM.WRITER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  10KB  |  198 lines

  1. 10  REM  ************************
  2. 20  REM  *      ROM.WRITER      *
  3. 30  REM  *   BY  CURT CLIFTON   *
  4. 40  REM  *  COPYRIGHT (C) 1986  *
  5. 50  REM  *   MICROSPARC, INC.   *
  6. 60  REM  *  CONCORD, MA  01742  *
  7. 70  REM  ************************
  8. 80  DIM AC$(110),AE$(18): GOTO 110
  9. 90  FOR ZZ = 1 TO 6: NEXT : RETURN 
  10. 100  REM  TITLE PAGE
  11. 110 A$ = "........................................": TEXT : FOR A = 1 TO 24: VTAB A: PRINT A$;: NEXT : REM  40 '.' IN QUOTES
  12. 120  FOR A = 20 TO 0  STEP  -1: POKE 32,A: POKE 33,(21 -A) *2: HOME : NEXT : TEXT 
  13. 130 WE = 49289:RE = 49288:FL = 49291
  14. 140  VTAB 24: PRINT "ROM WRITER": FOR A = 22 TO 2  STEP  -1: PRINT : NEXT 
  15. 150  POKE 34,2
  16. 160  VTAB 24: PRINT "BY CURT CLIFTON": FOR A = 22 TO 3  STEP  -1: PRINT : NEXT : POKE 34,3
  17. 170  VTAB 24: PRINT "COPYRIGHT (C) 1986": FOR A = 22 TO 4  STEP  -1: PRINT : NEXT : POKE 34,4
  18. 180  VTAB 24: PRINT "BY MICROSPARC, INC.": FOR A = 22 TO 5  STEP  -1: PRINT : NEXT : POKE 34,5
  19. 190  POKE 34,0
  20. 200  POKE 33,16
  21. 210  POKE 32,23: HOME : TEXT 
  22. 220  POKE 34,5: VTAB 24: PRINT "++++++++++++++++++++++++++++++++++++++++": FOR A = 22 TO 7  STEP  -1: PRINT : NEXT : REM  40 '+' IN QUOTES
  23. 230  TEXT : PRINT 
  24. 240  REM  MAIN MENU
  25. 250  POKE 34,5: HOME 
  26. 260  GOTO 1560
  27. 270  READ NN: DIM CM$(A): FOR A = 1 TO NN: READ CM$(A): NEXT 
  28. 272  DATA  2,96,234,32,14,234,169,0,133,98,133,99,133,100,133,101,165,172,32,175,233,165,161,32,175,233,165,160
  29. 274  DATA  32,175,233,165,159,32,175,233,165,158,32,181,233,76,230,234,208,4,56
  30. 280  DATA  8,CHANGE SOUND OF BELL,CHANGE TEXT WINDOW DEFAULT,CHANGE MONITOR PROMPT,LOAD DIFFERENT VERSION OF ROM,CHANGE APPLESOFT COMMANDS,CHANGE APPLESOFT ERROR MESSAGES,LIST CURRENT APPLESOFT TO PRINTER,EXIT
  31. 290  HOME : PRINT "OPTIONS-"
  32. 300  PRINT : FOR A = 1 TO NN: PRINT  TAB( 6);CM$(A): NEXT 
  33. 310 PL = 8:C$ = " --> "
  34. 320  VTAB PL: HTAB 1: PRINT C$;
  35. 330  POKE  -16368,0: WAIT  -16384,128
  36. 340 IT =  PEEK( -16384) -128
  37. 350 OP = PL: POKE  -16368,0
  38. 360  IF IT = 8  THEN PL = PL -1:PL = PL +NN *(PL <8)
  39. 370  IF IT = 21  THEN PL = PL +1:PL = PL -NN *(PL >NN +7)
  40. 380  IF IT = 13  THEN 420
  41. 390  VTAB OP: HTAB 1: PRINT "     ";
  42. 400  IF OP < >PL  THEN A =  PEEK( -16336) * PEEK( -16336)
  43. 410  GOTO 320
  44. 420  ON PL -7 GOTO 440,560,690,770,1100,1340,1610,870
  45. 430  REM  CHANGE SOUND OF BELL
  46. 440  HOME : PRINT "CHANGE SOUND OF BELL"
  47. 450  PRINT "CURRENT PITCH: "; PEEK(64485): PRINT "CURRENT DURATION: "; PEEK(64483)
  48. 460  INPUT "ENTER NEW PITCH (RETURN FOR NO CHANGE)    -> ";P$: IF P$ = ""  THEN 490
  49. 470 A =  VAL(P$): IF A <0  OR A >255  THEN  PRINT "OUT OF RANGE": GOTO 460
  50. 480  POKE 64485,A
  51. 490  INPUT "ENTER NEW DURATION (<CR> FOR NO CHANGE)   -> ";D$: IF D$ = ""  THEN 520
  52. 500 A =  VAL(D$): IF A <0  OR A >255  THEN  PRINT "OUT OF RANGE": GOTO 490
  53. 510  POKE 64483,A
  54. 520  HOME : PRINT "NEW BELL SOUND": PRINT  CHR$(7); CHR$(7); CHR$(7)
  55. 530  FOR A = 1 TO 500: NEXT 
  56. 540  GOTO 290
  57. 550  REM  CHANGE TEXT WINDOW DEFAULTS
  58. 560  HOME : PRINT "CHANGE TEXT WINDOW DEFAULT"
  59. 570  PRINT "CURRENT DEFAULTS-"
  60. 580  PRINT : PRINT  TAB( 6);"TOP EDGE: "; PEEK(64317): PRINT  TAB( 6);"BOTTOM EDGE: "; PEEK(64342)
  61. 590  PRINT 
  62. 600  INPUT "ENTER TOP EDGE -> ";A$: IF A$ = ""  THEN 630
  63. 610 A =  VAL(A$): IF A <0  OR A >23  THEN  PRINT "OUT OF RANGE": GOTO 600
  64. 620  POKE 64317,A: POKE 64318,176
  65. 630  INPUT "ENTER BOTTOM EDGE -> ";A$: IF A$ = ""  THEN 660
  66. 640 A =  VAL(A$): IF A < PEEK(64317)  OR A >23  THEN  PRINT "OUT OF RANGE": GOTO 630
  67. 650  POKE 64342,A: POKE 64346,A -1
  68. 660  HOME : PRINT "TEXT WINDOW MODIFIED": FOR A = 1 TO 1000: NEXT 
  69. 670  GOTO 290
  70. 680  REM  CHANGE MONITOR PROMPT
  71. 690  HOME : PRINT "CHANGE MONITOR PROMPT"
  72. 700  PRINT : PRINT "CURRENT PROMPT: "; CHR$( PEEK(65386))
  73. 710  INPUT "ENTER NEW PROMPT:";A$
  74. 720  IF  LEN(A$) >1  OR A$ = ""  THEN  PRINT "ONE CHARACTER PLEASE": GOTO 710
  75. 730  POKE 65386, ASC(A$) +128
  76. 740  HOME : PRINT "NEW PROMPT: ";A$
  77. 750  FOR A = 1 TO 1000: NEXT : GOTO 290
  78. 760  REM  LOAD DIFFERENT ROM
  79. 770  HOME : PRINT "LOAD DIFFERENT VERSION OF ROM": PRINT "? TO CATALOG DISK"
  80. 780  PRINT : INPUT "ENTER NAME OF VERSION TO LOAD:";N$
  81. 790  IF N$ = ""  THEN  GOTO 290
  82. 800  IF N$ = "?"  THEN  GOSUB 1790: GOTO 770
  83. 810  ONERR  GOTO 1850
  84. 820  PRINT  CHR$(4);"BLOAD ROM.";N$
  85. 830  POKE 216,0
  86. 840  HOME : PRINT "ROM.";N$;" IS NOW INSTALLED."
  87. 850  FOR A = 1 TO 1000: NEXT : GOTO 290
  88. 860  REM  EXIT ROUTINE
  89. 870  HOME : INPUT "WOULD YOU LIKE TO SAVE YOUR VERSION OF  ROM TO DISK (Y/N) -> ";A$: IF  LEFT$(A$,1) = "N"  OR  LEFT$(A$,1) =  CHR$(110)  THEN 1070
  90. 880  GOSUB 890: GOTO 1070
  91. 890  PRINT : INPUT "ENTER NAME FOR YOUR ROM VERSION            -> ";N$: REM  12 SPACES
  92. 900  IF N$ = ""  THEN 870
  93. 910  IF N$ = "?"  THEN  GOSUB 1790: HOME : GOTO 890
  94. 920  ONERR  GOTO 1890
  95. 930  PRINT  CHR$(4);"BSAVE ROM.";N$;",A$D000,L$2FFF"
  96. 940  PRINT  CHR$(4);"OPEN EXEC ROM.";N$
  97. 950  PRINT  CHR$(4);"CLOSE EXEC ROM.";N$
  98. 960  PRINT  CHR$(4);"DELETE EXEC ROM.";N$
  99. 970  PRINT  CHR$(4);"OPEN EXEC ROM.";N$
  100. 980  PRINT  CHR$(4);"WRITE EXEC ROM.";N$
  101. 990  PRINT "MONICO"
  102. 1000  PRINT "A=PEEK(";WE;"):A=PEEK(";WE;")"
  103. 1010  PRINT "BLOAD ROM.";N$
  104. 1020  PRINT "A=PEEK(";FL;"):A=PEEK(";FL;")"
  105. 1030  PRINT "NOMONICO"
  106. 1040  PRINT "PRINT "; CHR$(34);"ROM.";N$;" NOW INSTALLED."; CHR$(34)
  107. 1050  PRINT  CHR$(4);"CLOSE"
  108. 1060  POKE 216,0: RETURN 
  109. 1070  TEXT : HOME 
  110. 1080  END 
  111. 1090  REM  CHANGE APPLESOFT COMMANDS
  112. 1100  HOME : PRINT "CHANGE APPLESOFT COMMANDS"
  113. 1110 EL = 1:I$ = "": FOR A = 53456 TO 53854: IF  PEEK(A) >128  THEN I$ = I$ + CHR$( PEEK(A) -128):AC$(EL) = I$:EL = EL +1:I$ = "": GOTO 1130
  114. 1120 I$ = I$ + CHR$( PEEK(A))
  115. 1130  NEXT A
  116. 1140 S = 1:E = EL -1
  117. 1150  FOR A = S TO E: PRINT "#";A; TAB( 6);AC$(A): IF A/18 < > INT(A/18)  THEN  NEXT : GOTO 1170
  118. 1160  INPUT "PRESS <RETURN> FOR NEXT PAGE:";A$: NEXT : GOTO 1170
  119. 1170 CC = 398
  120. 1180  PRINT "ENTER NUMBER TO CHANGE, L TO LIST,      OR Q TO QUIT": INPUT "   -> ";N$
  121. 1190  IF N$ = "L"  THEN LM = 107: GOSUB 1820: GOTO 1150
  122. 1200  IF N$ = "Q"  THEN  GOTO 1280
  123. 1210 A =  VAL(N$): IF A <1  OR A >107  THEN  PRINT "OUT OF RANGE": GOTO 1180
  124. 1220  IF  LEN(AC$(A)) <2  THEN  PRINT "SINGLE LETTER COMMAND. CAN'T MODIFY IT.": GOTO 1180
  125. 1230  PRINT "#";A; TAB( 6);AC$(A)
  126. 1240  PRINT "MAXIMUM LENGTH: ";398 -CC + LEN(AC$(A))
  127. 1250  INPUT "ENTER NEW COMMAND:";N$: IF  LEN(N$) >398 -CC + LEN(AC$(A))  THEN  PRINT "TOO LONG": GOTO 1230
  128. 1260  IF  LEN(N$) <2  THEN  PRINT "TOO SHORT": GOTO 1230
  129. 1270  PRINT "ACCEPTED":CC = CC -( LEN(AC$(A)) - LEN(N$)):AC$(A) = N$: GOTO 1180
  130. 1280  HOME : PRINT "MODIFYING COMMANDS"
  131. 1290 LC = 53456: FOR A = 1 TO 107: FOR B = 1 TO  LEN(AC$(A)): IF B =  LEN(AC$(A))  THEN  POKE LC, ASC( MID$ (AC$(A),B,1)) +128:LC = LC +1: NEXT : GOTO 1310
  132. 1300  POKE LC, ASC( MID$ (AC$(A),B,1)):LC = LC +1: NEXT 
  133. 1310  NEXT : IF LC < >53854  THEN  FOR A = LC TO 53854: POKE A,160: NEXT 
  134. 1320  GOTO 290
  135. 1330  REM  CHANGE ERROR MESSAGES
  136. 1340  HOME : PRINT "CHANGE APPLESOFT ERROR MESSAGES"
  137. 1350 EL = 1:I$ = "": FOR A = 53856 TO 54095: IF  PEEK(A) >128  THEN I$ = I$ + CHR$( PEEK(A) -128):AE$(EL) = I$:EL = EL +1:I$ = "": GOTO 1370
  138. 1360 I$ = I$ + CHR$( PEEK(A))
  139. 1370  NEXT A
  140. 1380 S = 1:E = EL -1
  141. 1390  FOR A = S TO E: PRINT "#";A; TAB( 6);AE$(A): NEXT 
  142. 1400 CC = 239
  143. 1410  PRINT "ENTER NUMBER TO CHANGE, OR 'L' TO LIST": INPUT "   -> ";N$
  144. 1420  IF N$ = "L"  THEN LM = 17: GOSUB 1820: GOTO 1390
  145. 1430  IF N$ = ""  THEN  GOTO 1500
  146. 1440 A =  VAL(N$): IF A <1  OR A >18  THEN  PRINT "OUT OF RANGE": GOTO 1410
  147. 1450  PRINT "#";A; TAB( 6);AE$(A)
  148. 1460  PRINT "MAXIMUM LENGTH: ";239 -CC + LEN(AE$(A))
  149. 1470  INPUT "ENTER NEW ERROR MESSAGE                   -> ";N$: IF  LEN(N$) >239 -CC + LEN(AE$(A))  THEN  PRINT "TOO LONG": GOTO 1450: REM  19 SPACES
  150. 1480  IF N$ = ""  THEN  PRINT "NOT CHANGED": GOTO 1410
  151. 1490  PRINT "ACCEPTED":N =  LEN(N$):N1 = (239 -CC + LEN(AE$(A))) -N: IF N1 = 0  THEN 1495
  152. 1492  FOR T = 1 TO N1:N$ = N$ +" ": NEXT 
  153. 1495 CC = CC -( LEN(AE$(A)) - LEN(N$)):AE$(A) = N$: GOTO 1410
  154. 1500  HOME : PRINT "MODIFYING MESSAGES"
  155. 1510 LC = 53856: FOR A = 1 TO 17: FOR B = 1 TO  LEN(AE$(A)): IF B =  LEN(AE$(A))  THEN  POKE LC, ASC( MID$ (AE$(A),B,1)) +128:LC = LC +1: NEXT : GOTO 1530
  156. 1520  POKE LC, ASC( MID$ (AE$(A),B,1)):LC = LC +1: NEXT 
  157. 1530  NEXT : IF LC < >54095  THEN  FOR A = LC TO 54095: POKE A,160: NEXT 
  158. 1540  GOTO 290
  159. 1550  REM  MOVE ROM TO RAM CARD
  160. 1560  VTAB 12: PRINT "PLEASE STAND BY.......PREPARING RAM CARD"
  161. 1570 A =  PEEK(WE):A =  PEEK(WE):HX$ = "D000<D000.FFFFM F328G": FOR I = 1 TO  LEN(HX$): POKE 511 +I, ASC( MID$ (HX$,I,1)) +128: NEXT : POKE 72,0: POKE 223, PEEK(248): CALL  -144
  162. 1575  FOR I = 59779 TO 59825: READ J: POKE I,J: NEXT 
  163. 1580 A =  PEEK(FL):A =  PEEK(FL)
  164. 1590  HOME : GOTO 270
  165. 1600  REM  DISPLAY APPLESOFT
  166. 1610  HOME : PRINT "DISPLAY APPLESOFT ON PRINTER"
  167. 1620  INPUT "ACTIVATE PRINTER AND PRESS <RETURN>:";N$
  168. 1630  PRINT  CHR$(4);"PR#1": PRINT  CHR$(9);"80N"
  169. 1640  PRINT "  APPLESOFT COMMANDS-"
  170. 1650 EL = 1:I$ = "": FOR A = 53456 TO 53854: IF  PEEK(A) >128  THEN I$ = I$ + CHR$( PEEK(A) -128):AC$(EL) = I$:EL = EL +1:I$ = "": GOTO 1670
  171. 1660 I$ = I$ + CHR$( PEEK(A))
  172. 1670  NEXT A
  173. 1680  FOR A = 1 TO 36
  174. 1690  PRINT "#";A; SPC( 5 - LEN( STR$(A)));AC$(A); SPC( 24 - LEN(AC$(A)));"#";A +36; SPC( 5 - LEN( STR$(A +36)));AC$(A +36); SPC( 24 - LEN(AC$(A +36)));: IF A +72 < >108  THEN  PRINT "#";A +72; SPC( 5 - LEN( STR$(A +72)));AC$(A +72)
  175. 1700  NEXT 
  176. 1710  PRINT : PRINT : PRINT 
  177. 1720  PRINT "  APPLESOFT ERROR MESSAGES-"
  178. 1730 EL = 1:I$ = "": FOR A = 53856 TO 54095: IF  PEEK(A) >128  THEN I$ = I$ + CHR$( PEEK(A) -128):AE$(EL) = I$:I$ = "":EL = EL +1: GOTO 1750
  179. 1740 I$ = I$ + CHR$( PEEK(A))
  180. 1750  NEXT A
  181. 1760  FOR A = 1 TO 17: PRINT "#";A; SPC( 5 - LEN( STR$(A)));AE$(A): NEXT 
  182. 1770  PRINT  CHR$(4);"PR#0"
  183. 1780  GOTO 290
  184. 1790  HOME : PRINT  CHR$(4);"CATALOG"
  185. 1800  INPUT "PRESS <RETURN>:";N$
  186. 1810  RETURN 
  187. 1820  INPUT "START #,END # :";S,E
  188. 1830  IF S <1  OR E >LM  OR S >E  THEN  PRINT "OUT OF RANGE": GOTO 1820
  189. 1840  RETURN 
  190. 1850 E =  PEEK(222): POKE 216,0
  191. 1860  IF E = 8  THEN  PRINT "CHECK DISK DRIVE": INPUT "PRESS <RETURN>";N$: GOTO 760
  192. 1870  IF E = 6  THEN  PRINT "FILE NOT FOUND": INPUT "PRESS <RETURN>";N$: GOTO 760
  193. 1880  POKE 216,0: RETURN 
  194. 1890 E =  PEEK(222): POKE 216,0
  195. 1900  IF E = 8  THEN  PRINT "CHECK DISK DRIVE": INPUT "PRESS <RETURN> TO CONTINUE OR <A> TO    ABORT.";N$: IF N$ = "A"  OR N$ =  CHR$(97)  THEN  GOTO 290
  196. 1910  GOTO 920
  197. 1920  IF E = 9  THEN  PRINT "DISK FULL": INPUT "PRESS <RETURN> TO CONTINUE OR <A> TO    ABORT";N$: IF N$ = "A"  OR N$ =  CHR$(97)  THEN  GOTO 290
  198. 1930  GOTO 920