home *** CD-ROM | disk | FTP | other *** search
- 10 ' Reprinted from Micro/Systems Journal, Vol. 1, No. 1, March-
- 20 ' April 1985, article titled "Assembly Language Extensions for
- 30 ' MS-Basic" by Ron Kreymborg.
- 60 '
- 1000 ' GENMOD
- 1010 '
- 1020 ' A Microsoft Basic program which simulates the
- 1030 ' Digital Research program called GENMOD.COM.
- 1040 ' It takes a concatenated HEX file and produces
- 1050 ' a page relocatable version.
- 1060 '
- 1070 ' Ron Kreymborg
- 1080 DEFINT A-Z
- 1090 INPUT "FILENAME (.HEX ASSUMED)? ",A$
- 1100 B$=A$+".HEX"
- 1110 S=6000è1120 DIM M(S), B(S/8)
- 1130 H$="0123456789ABCDEF"
- 1140 NOPRNT=1
- 1150 '
- 1160 OPEN "I",1,B$
- 1170 PASS=1
- 1180 FLG=0
- 1190 G=0
- 1200 PRINT
- 1210 PRINT "FIRST PASS"
- 1220 IF EOF(1) THEN 1280
- 1230 LINE INPUT #1, L$
- 1240 IF MID$(L$,2,2) = "00" THEN 1320
- 1250 GOSUB 2120
- 1260 GOTO 1220
- 1270 '
- 1280 CLOSE
- 1290 PRINT "INCORRECT FILE END"
- 1300 STOP
- 1310 '
- 1320 GOSUB 2370
- 1330 G=256
- 1340 PASS=2
- 1350 PRINT "SECOND PASS"
- 1360 IF EOF(1) THEN 1280
- 1370 LINE INPUT #1, L$
- 1380 IF MID$(L$,2,2) = "00" THEN 1420è1390 GOSUB 2120
- 1400 GOTO 1360
- 1410 '
- 1420 CLOSE
- 1430 Q=P+1
- 1440 FOR I=0 TO D
- 1450 P=P+1
- 1460 M(P)=B(I)
- 1470 NEXT I
- 1480 IF NOPRNT THEN 1690
- 1490 J=0
- 1500 PRINT
- 1510 PRINT "OUTPUT CODE:"
- 1520 PRINT
- 1530 T=512 : GOSUB 2480 : PRINT T$;" ";
- 1540 FOR I=0 TO P
- 1550 IF J<16 THEN 1620
- 1560 PRINT " ";
- 1570 FOR K=I-J TO I-1
- 1580 IF M(K)>=32 AND M(K)<=126 THEN PRINT CHR$(M(K)); ELSE PRINT ".";
- 1590 NEXT K
- 1600 PRINT
- 1610 J=0 : T=512+I : GOSUB 2480 : PRINT T$;" ";
- 1620 T=M(I) : GOSUB 2480
- 1630 PRINT MID$(T$,3);" ";
- 1640 J=J+1
- 1650 NEXT Iè1660 PRINT
- 1670 '
- 1680 ' NOW WRITE THE PRL FILE
- 1690 B$=A$+".PRL"
- 1700 A$="0000000000000000"
- 1710 OPEN "R",1,B$,16
- 1720 FIELD 1, 1 AS B0$, 2 AS B1$, 13 AS B2$
- 1730 LSET B0$=CHR$(0)
- 1740 FOR I=1 TO 14
- 1750 MID$(A$,I,1)=CHR$(0)
- 1760 NEXT I
- 1770 PH=Q\256
- 1780 PL=Q MOD 256
- 1790 B$=CHR$(PL)+CHR$(PH)
- 1800 LSET B1$=B$
- 1810 LSET B2$=A$
- 1820 PUT 1, 1
- 1830 LSET B1$=MKI$(0)
- 1840 FOR I=2 TO 16
- 1850 PUT 1, I
- 1860 NEXT I
- 1870 FIELD 1, 16 AS BUF$
- 1880 N=P\16+1
- 1890 P=0
- 1900 FOR I=1 TO N
- 1910 FOR J=1 TO 16
- 1920 MID$(A$,J,1)=CHR$(M(P))è1930 P=P+1
- 1940 NEXT J
- 1950 LSET BUF$=A$
- 1960 PUT 1, I+16
- 1970 NEXT I
- 1980 CLOSE
- 1990 PRINT
- 2000 T=Q : GOSUB 2480 : PRINT T$;" TOTAL CODE"
- 2010 T=P-1 : GOSUB 2480 : PRINT T$;" TOTAL BYTES"
- 2020 IF FLG THEN 2040
- 2030 PRINT "MODULE CONSTRUCTED" : GOTO 2050
- 2040 PRINT "ERRORS IN RE-LOCATION"
- 2050 PRINT
- 2060 SYSTEM
- 2070 END
- 2080 '
- 2090 '
- 2100 '
- 2110 ' TRANSLATE THE CURRENT HEX LINE
- 2120 T$=MID$(L$,2,2) : GOSUB 2440
- 2130 N=T
- 2140 T$=MID$(L$,4,2) : GOSUB 2440
- 2150 P=T*256
- 2160 T$=MID$(L$,6,2) : GOSUB 2440
- 2170 P=P+T-G-1
- 2180 J=10
- 2190 FOR I=1 TO Nè2200 P=P+1
- 2210 T$=MID$(L$,J,2) : GOSUB 2440
- 2220 IF PASS = 1 THEN M(P)=T : GOTO 2320
- 2230 IF T = M(P) THEN 2320
- 2240 T=T-M(P)
- 2250 IF (T = 1 OR T = -255) THEN 2290
- 2260 PRINT HEX$(P);"RE-LOCATION ERROR";T
- 2270 FLG=1
- 2280 GOTO 2320
- 2290 P1=P\8
- 2300 P2=P MOD 8
- 2310 B(P1)=B(P1)+2^(7-P2)
- 2320 J=J+2
- 2330 NEXT I
- 2340 RETURN
- 2350 '
- 2360 ' ZERO THE BIT MAP
- 2370 D=P\8+1
- 2380 FOR I=0 TO D
- 2390 B(I)=0
- 2400 NEXT I
- 2410 RETURN
- 2420 '
- 2430 ' HEX TO DECIMAL
- 2440 T=(INSTR(H$,LEFT$(T$,1))-1)*16+INSTR(H$,RIGHT$(T$,1))-1
- 2450 RETURN
- 2460 'è2470 ' DECIMAL TO HEX
- 2480 T$="000"+HEX$(T)
- 2490 IF LEN(T$)>4 THEN T$=MID$(T$,2) : GOTO 2490
- 2500 RETURN