home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib41b.dsk / MCM.bas < prev    next >
BASIC Source File  |  2023-02-26  |  5KB  |  182 lines

  1. 10  REM  ************************
  2. 20  REM  *  MACHINE CODE MOVER  *
  3. 30  REM  *    BY JEFF G. COX    *
  4. 40  REM  *                      *
  5. 50  REM  *  COPYRIGHT (C) 1991  *
  6. 60  REM  * MINDCRAFT PUBL. CORP.*
  7. 70  REM  *   LINCOLN, MA 01773  *
  8. 80  REM  ************************
  9. 90  REM 
  10. 100  GOTO 630
  11. 110  REM  * UTILITY ROUTINES ****
  12. 120  REM  * 2 BYTE PEEK *
  13. 130 LBYTE% =  PEEK(MEM)
  14. 140 HBYTE% =  PEEK(MEM +1)
  15. 150 INPT = LBYTE% +256 *HBYTE%
  16. 160  RETURN 
  17. 170  REM  * 2 BYTE POKE *
  18. 180 HBYTE% = OTPT/256
  19. 190 LBYTE% = OTPT -HBYTE% *256
  20. 200  POKE MEM,LBYTE%
  21. 210  POKE MEM +1,HBYTE%
  22. 220  RETURN 
  23. 230  REM  * SELECT FILE NAME ***
  24. 235  REM  * SEE NIBBLE V2, N1, P59
  25. 240  PRINT : PRINT LINE$
  26. 250  PRINT "Enter Program Name (<C> for Catalog;"
  27. 260  PRINT "<Return> for ";NAME$;")"
  28. 270  POKE 51,191
  29. 280 INPT$ = ""
  30. 290  CALL  -662
  31. 300  FOR MEM = 512 TO 767
  32. 310 INPT =  PEEK(MEM) -128
  33. 320  IF INPT = 13  THEN 350
  34. 330 INPT$ = INPT$ + CHR$(INPT)
  35. 340  NEXT 
  36. 350  IF  LEN(INPT$) = 0  THEN INPT$ = NAME$
  37. 360  IF INPT$ < >"C"  THEN 410
  38. 370  HOME 
  39. 380  PRINT  CHR$(4);"CATALOG"
  40. 385  PRINT 
  41. 390  PRINT "Press Any Key to Continue."
  42. 395  GOSUB 580
  43. 400  GOTO 240
  44. 410 NAME$ = INPT$
  45. 420  PRINT 
  46. 430  RETURN 
  47. 490  REM  * CONFIRM CHOICE ***
  48. 500  PRINT : PRINT LINE$
  49. 510  PRINT "Execute <Return> or Cancel <Esc>? ";
  50. 520  FLASH : PRINT " ": NORMAL 
  51. 530  GOSUB 580
  52. 540  IF INPT = 13  THEN INPT = 1: RETURN 
  53. 550  IF INPT = 27  THEN INPT = 0: RETURN 
  54. 560  GOTO 530
  55. 570  REM  * GET KEYSTROKE ***
  56. 580 INPT =  PEEK( -16384) -128: POKE  -16368,0
  57. 590  IF INPT > -1  THEN  RETURN 
  58. 600  FOR J = 1 TO 100: NEXT 
  59. 610  GOTO 580
  60. 620  REM  * MAIN ROUTINE ******
  61. 630  ONERR  GOTO 1810
  62. 640  HIMEM: 10240: REM  MACHINE CODE FROM $2800 TO DOS ($9600)
  63. 650 CSTRT = 10240
  64. 660  REM  * RESET MACHINE PARAMETERS *
  65. 670  NOTRACE : SPEED= 255: PRINT  CHR$(4);"NOMON C,I,O"
  66. 680  TEXT : HOME 
  67. 690  REM  * LIST ENTRY AT 768; SEE NIBBLE V3, N1, P113 *
  68. 700  DATA  169,1,32,99,254,96
  69. 710  FOR MEM = 768 TO 773
  70. 720  READ OTPT: POKE MEM,OTPT
  71. 730  NEXT 
  72. 740 PCL% = 58
  73. 750 NAME$ = "MY MACHINE PROGRAM"
  74. 760  REM  * INTRODUCE PROGRAM *
  75. 770  PRINT "          MACHINE CODE MOVER"
  76. 780  PRINT 
  77. 790  PRINT "            by Jeff G. Cox"
  78. 800  PRINT 
  79. 810  PRINT "         Copyright (C) 1991 by"
  80. 820  PRINT "       MindCraft Publishing Corp."
  81. 830  PRINT 
  82. 840  REM  * MOD DOS BLOAD/BSAVE; SEE NIBBLE V3, N8, P108
  83. 850  POKE 41795,7: POKE 41796,0
  84. 860  POKE 41798,6: POKE 41799,0
  85. 870  POKE 41853,8: POKE 41854,0
  86. 880  POKE 41856,9: POKE 41857,0
  87. 890 MEM = 43634
  88. 900 OTPT = CSTRT
  89. 910  GOSUB 180
  90. 920  REM  * LOAD OLD PROGRAM *
  91. 930 LINE$ = "To Load your Machine-Code Program,"
  92. 940  GOSUB 240
  93. 950  PRINT  CHR$(4);"BLOAD ";NAME$
  94. 960  REM  * GET PROGRAM START *
  95. 970 MEM = 8
  96. 980  GOSUB 130
  97. 990 OSTRT = INPT
  98. 1000  REM  * GET PROGRAM LENGTH *
  99. 1010 MEM = 43616: REM  $AA60; SEE NIBBLE V2, N2, P71
  100. 1020  GOSUB 130
  101. 1030 CLNG = INPT
  102. 1040 OFIN = OSTRT +CLNG -1
  103. 1060  IF CSTRT +CLNG <38400  THEN 1130
  104. 1070  HOME 
  105. 1080  FLASH : PRINT "WARNING";: NORMAL 
  106. 1090  PRINT ":  MACHINE CODE TOO LONG."
  107. 1100  PRINT "DOS HAS BEEN CLOBBERED!"
  108. 1110  GOTO 1750
  109. 1120  REM  * GET ADDRESSES *
  110. 1130  PRINT 
  111. 1140  PRINT "Old Starting Address of Program: ";OSTRT
  112. 1150  PRINT 
  113. 1160  PRINT "Enter New Starting Address"
  114. 1170  INPUT "(768 to 65535)? ";INPT$
  115. 1180 INPT =  VAL(INPT$)
  116. 1190  IF INPT <768  OR INPT >65535  THEN 1130
  117. 1200 NSTRT = INPT
  118. 1220  HOME : TEXT 
  119. 1230 DFLG% = 0
  120. 1240  REM  * SET LIST START *
  121. 1250 MEM = PCL%
  122. 1260 OTPT = CSTRT
  123. 1270  GOSUB 180
  124. 1280  REM  * LIST NEXT LINE *
  125. 1290  CALL 768
  126. 1300  REM  * LOOK FOR EMBEDDED DATA *
  127. 1305  REM  * SEE APPLE REF. MANUAL, P16
  128. 1310  IF  PEEK(1893) = 191  THEN DFLG% = 1
  129. 1320  REM  * LOOK FOR ADJUSTABLE INSTR *
  130. 1330  IF  PEEK(47) <2  THEN 1490
  131. 1340 MEM = PCL%
  132. 1350  GOSUB 130
  133. 1360 MEM = INPT -2
  134. 1370  GOSUB 130
  135. 1380 MREF = INPT
  136. 1390  IF MREF >OFIN  OR MREF <OSTRT  THEN 1490
  137. 1400  IF DFLG% < >1  THEN 1460
  138. 1410 LINE$ = "Adjustment Indicated Near Embedded Data"
  139. 1420  GOSUB 500
  140. 1430  IF INPT = 0  THEN 1490
  141. 1440 DFLG% = 0
  142. 1450  REM  * ADJUST REFERENCE *
  143. 1460 OTPT = MREF +NSTRT -OSTRT
  144. 1470  GOSUB 180
  145. 1480  REM  * CONTINUE? *
  146. 1490 MEM = PCL%
  147. 1500  GOSUB 130
  148. 1510  IF CSTRT +CLNG >INPT  THEN 1290
  149. 1520  REM  * DISPLAY CHANGES *
  150. 1530  PRINT : PRINT "Enter Old Reference (";OSTRT;" to ";OFIN;")"
  151. 1540  INPUT "or 0 to continue: ";INPT$
  152. 1550 INPT =  VAL(INPT$)
  153. 1560  IF INPT$ = "0"  THEN 1610
  154. 1570  IF INPT >OFIN  OR INPT <OSTRT  THEN 1530
  155. 1580  PRINT "  ";INPT;" is now ";INPT +NSTRT -OSTRT
  156. 1590  GOTO 1530
  157. 1600  REM  * SAVE PROGRAM *
  158. 1610 MEM = 6
  159. 1620 OTPT = NSTRT
  160. 1630  GOSUB 180
  161. 1640 LINE$ = "To Save Adjusted Program,"
  162. 1650  GOSUB 240
  163. 1660  PRINT  CHR$(4);"BSAVE ";NAME$;",A";CSTRT;",L";CLNG
  164. 1670  PRINT 
  165. 1680  REM  * AGAIN? *
  166. 1690 LINE$ = "Move Another Machine-Code Program"
  167. 1700  GOSUB 500
  168. 1710  IF INPT = 1  THEN 930
  169. 1720  HOME 
  170. 1730  PRINT "BYE . . ."
  171. 1740  REM  * RESET DOS AND END *
  172. 1750  POKE 41795,115: POKE 41796,170
  173. 1760  POKE 41798,114: POKE 41799,170
  174. 1770  POKE 41853,114: POKE 41854,170
  175. 1780  POKE 41856,115: POKE 41857,170
  176. 1790  END 
  177. 1800  REM  * ERROR PROCESSING **
  178. 1810  HOME 
  179. 1820  FLASH : PRINT "WARNING";
  180. 1830  NORMAL : PRINT ":  PROGRAM HAS BEEN ABORTED"
  181. 1840  PRINT "DUE TO ONERR CODE "; PEEK(222);" ON LINE "; PEEK(218) + PEEK(219) *256;"."
  182. 1850  GOTO 1750