home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib41b.dsk
/
MCM.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
5KB
|
182 lines
10 REM ************************
20 REM * MACHINE CODE MOVER *
30 REM * BY JEFF G. COX *
40 REM * *
50 REM * COPYRIGHT (C) 1991 *
60 REM * MINDCRAFT PUBL. CORP.*
70 REM * LINCOLN, MA 01773 *
80 REM ************************
90 REM
100 GOTO 630
110 REM * UTILITY ROUTINES ****
120 REM * 2 BYTE PEEK *
130 LBYTE% = PEEK(MEM)
140 HBYTE% = PEEK(MEM +1)
150 INPT = LBYTE% +256 *HBYTE%
160 RETURN
170 REM * 2 BYTE POKE *
180 HBYTE% = OTPT/256
190 LBYTE% = OTPT -HBYTE% *256
200 POKE MEM,LBYTE%
210 POKE MEM +1,HBYTE%
220 RETURN
230 REM * SELECT FILE NAME ***
235 REM * SEE NIBBLE V2, N1, P59
240 PRINT : PRINT LINE$
250 PRINT "Enter Program Name (<C> for Catalog;"
260 PRINT "<Return> for ";NAME$;")"
270 POKE 51,191
280 INPT$ = ""
290 CALL -662
300 FOR MEM = 512 TO 767
310 INPT = PEEK(MEM) -128
320 IF INPT = 13 THEN 350
330 INPT$ = INPT$ + CHR$(INPT)
340 NEXT
350 IF LEN(INPT$) = 0 THEN INPT$ = NAME$
360 IF INPT$ < >"C" THEN 410
370 HOME
380 PRINT CHR$(4);"CATALOG"
385 PRINT
390 PRINT "Press Any Key to Continue."
395 GOSUB 580
400 GOTO 240
410 NAME$ = INPT$
420 PRINT
430 RETURN
490 REM * CONFIRM CHOICE ***
500 PRINT : PRINT LINE$
510 PRINT "Execute <Return> or Cancel <Esc>? ";
520 FLASH : PRINT " ": NORMAL
530 GOSUB 580
540 IF INPT = 13 THEN INPT = 1: RETURN
550 IF INPT = 27 THEN INPT = 0: RETURN
560 GOTO 530
570 REM * GET KEYSTROKE ***
580 INPT = PEEK( -16384) -128: POKE -16368,0
590 IF INPT > -1 THEN RETURN
600 FOR J = 1 TO 100: NEXT
610 GOTO 580
620 REM * MAIN ROUTINE ******
630 ONERR GOTO 1810
640 HIMEM: 10240: REM MACHINE CODE FROM $2800 TO DOS ($9600)
650 CSTRT = 10240
660 REM * RESET MACHINE PARAMETERS *
670 NOTRACE : SPEED= 255: PRINT CHR$(4);"NOMON C,I,O"
680 TEXT : HOME
690 REM * LIST ENTRY AT 768; SEE NIBBLE V3, N1, P113 *
700 DATA 169,1,32,99,254,96
710 FOR MEM = 768 TO 773
720 READ OTPT: POKE MEM,OTPT
730 NEXT
740 PCL% = 58
750 NAME$ = "MY MACHINE PROGRAM"
760 REM * INTRODUCE PROGRAM *
770 PRINT " MACHINE CODE MOVER"
780 PRINT
790 PRINT " by Jeff G. Cox"
800 PRINT
810 PRINT " Copyright (C) 1991 by"
820 PRINT " MindCraft Publishing Corp."
830 PRINT
840 REM * MOD DOS BLOAD/BSAVE; SEE NIBBLE V3, N8, P108
850 POKE 41795,7: POKE 41796,0
860 POKE 41798,6: POKE 41799,0
870 POKE 41853,8: POKE 41854,0
880 POKE 41856,9: POKE 41857,0
890 MEM = 43634
900 OTPT = CSTRT
910 GOSUB 180
920 REM * LOAD OLD PROGRAM *
930 LINE$ = "To Load your Machine-Code Program,"
940 GOSUB 240
950 PRINT CHR$(4);"BLOAD ";NAME$
960 REM * GET PROGRAM START *
970 MEM = 8
980 GOSUB 130
990 OSTRT = INPT
1000 REM * GET PROGRAM LENGTH *
1010 MEM = 43616: REM $AA60; SEE NIBBLE V2, N2, P71
1020 GOSUB 130
1030 CLNG = INPT
1040 OFIN = OSTRT +CLNG -1
1060 IF CSTRT +CLNG <38400 THEN 1130
1070 HOME
1080 FLASH : PRINT "WARNING";: NORMAL
1090 PRINT ": MACHINE CODE TOO LONG."
1100 PRINT "DOS HAS BEEN CLOBBERED!"
1110 GOTO 1750
1120 REM * GET ADDRESSES *
1130 PRINT
1140 PRINT "Old Starting Address of Program: ";OSTRT
1150 PRINT
1160 PRINT "Enter New Starting Address"
1170 INPUT "(768 to 65535)? ";INPT$
1180 INPT = VAL(INPT$)
1190 IF INPT <768 OR INPT >65535 THEN 1130
1200 NSTRT = INPT
1220 HOME : TEXT
1230 DFLG% = 0
1240 REM * SET LIST START *
1250 MEM = PCL%
1260 OTPT = CSTRT
1270 GOSUB 180
1280 REM * LIST NEXT LINE *
1290 CALL 768
1300 REM * LOOK FOR EMBEDDED DATA *
1305 REM * SEE APPLE REF. MANUAL, P16
1310 IF PEEK(1893) = 191 THEN DFLG% = 1
1320 REM * LOOK FOR ADJUSTABLE INSTR *
1330 IF PEEK(47) <2 THEN 1490
1340 MEM = PCL%
1350 GOSUB 130
1360 MEM = INPT -2
1370 GOSUB 130
1380 MREF = INPT
1390 IF MREF >OFIN OR MREF <OSTRT THEN 1490
1400 IF DFLG% < >1 THEN 1460
1410 LINE$ = "Adjustment Indicated Near Embedded Data"
1420 GOSUB 500
1430 IF INPT = 0 THEN 1490
1440 DFLG% = 0
1450 REM * ADJUST REFERENCE *
1460 OTPT = MREF +NSTRT -OSTRT
1470 GOSUB 180
1480 REM * CONTINUE? *
1490 MEM = PCL%
1500 GOSUB 130
1510 IF CSTRT +CLNG >INPT THEN 1290
1520 REM * DISPLAY CHANGES *
1530 PRINT : PRINT "Enter Old Reference (";OSTRT;" to ";OFIN;")"
1540 INPUT "or 0 to continue: ";INPT$
1550 INPT = VAL(INPT$)
1560 IF INPT$ = "0" THEN 1610
1570 IF INPT >OFIN OR INPT <OSTRT THEN 1530
1580 PRINT " ";INPT;" is now ";INPT +NSTRT -OSTRT
1590 GOTO 1530
1600 REM * SAVE PROGRAM *
1610 MEM = 6
1620 OTPT = NSTRT
1630 GOSUB 180
1640 LINE$ = "To Save Adjusted Program,"
1650 GOSUB 240
1660 PRINT CHR$(4);"BSAVE ";NAME$;",A";CSTRT;",L";CLNG
1670 PRINT
1680 REM * AGAIN? *
1690 LINE$ = "Move Another Machine-Code Program"
1700 GOSUB 500
1710 IF INPT = 1 THEN 930
1720 HOME
1730 PRINT "BYE . . ."
1740 REM * RESET DOS AND END *
1750 POKE 41795,115: POKE 41796,170
1760 POKE 41798,114: POKE 41799,170
1770 POKE 41853,114: POKE 41854,170
1780 POKE 41856,115: POKE 41857,170
1790 END
1800 REM * ERROR PROCESSING **
1810 HOME
1820 FLASH : PRINT "WARNING";
1830 NORMAL : PRINT ": PROGRAM HAS BEEN ABORTED"
1840 PRINT "DUE TO ONERR CODE "; PEEK(222);" ON LINE "; PEEK(218) + PEEK(219) *256;"."
1850 GOTO 1750