Frei nach
mc
6/1983 Seite 29, adaptiert von G.Tillmanns
Meist ist es von Vorteil, ein Maschinenprogramm nicht getrennt, sondern zusammen mit dem Basic Programm zu laden. Es ist am einfachsten, wenn dieses Maschinenprogramm als Folge von DATA - Anweisungen vorliegt und mit POKE - Befehlen in den gewünschten Speicherbereich gebracht wird.
Dieses BASIC - Hilfsprogramm gestattet es auf einfache Weise ganze Serien solcher DATA - Anweisungen aus einem bereits im Speicher stehenden Maschinenprogramm zu generieren. Es erzeugt zudem die erforderliche Ladesequenz.
Der Umgang mit dem Basic - Hilfsprogramm ist denkbar einfach :
Nach dem Start sind die Anfangs- und Endadresse des Maschinenprogramms Dezimal oder Hexadezimal ( mit " H " z.B. 7000H ) einzugeben, dann optional die erste Zeilennummer des zu generierenden Programms. Das Programm schreibt die DATA Zeilen auf den Schirm. Man drückt nun so oft die RETURN - Taste, bis man unter der letzten Zeile angekommen ist. Die erzeugten DATA - Zeilen steht jetzt samt der Lade Routine im Speicher.
0 CLS : PRINT @11,"DATA-GENERATOR" : CLEAR 200
1 PRINT "VON ADR."; : GOSUB 18 : A = Z : PRINT "BIS ADR.";
: GOSUB 18 : E = Z
2 PRINT "1.ZEILEN-NUMMER"; : GOSUB 18 : IF Z < 22 THEN Z =
22
3 CLS : PRINT @32," POKE31217,182:"; CHR$ (34);"0Î5
4 PRINT @95,Z;"FORI=";A;"TO";E; CHR$ (27); : IF E <
65536 THEN IF E < A, PRINT : PRINT : END
5 POKE 31138, INT (E / 256) : POKE 31139,E - 256 * PEEK (31138) : GOSUB
16 : N = 1
6 A = PEEK (31136) * 256 + PEEK (31137) : E = PEEK (31138) * 256 + PEEK
(31139) : PRINT : PRINT
7 J = 0 : N = N + 1 : IF N > 6, PRINT @448,"CLS:RUN"; CHR$
(28); : GOSUB 16 : END
8 Z = PEEK (31140) * 256 + PEEK (31141) : Z = Z + 1 : T$ = STR$ (Z) + "DATA
9 IF A > E + 1 THEN J = LEN (T$) - 2 : PRINT MID$ (T$,2,J) : ELSE GOTO
12
10 IF N > 6, GOTO 7 : ELSE PRINT Z + 1;"READA:IFI>32767,POKEI-65536,A:NEXT";
11 PRINT ":ELSEPOKEI,A:NEXT"; CHR$ (28); : DELETE 6 - 21
12 IF J THEN T$ = T$ + RIGHT$ (A$,J) + "," : J = LEN (T$) - 2
13 IF J > 59 PRINT MID$ (T$,2,J) : GOSUB 16 : GOTO 7
14 M = A : IF A > 32767 THEN M = A - 65536
15 A$ = STR$ ( PEEK (M)) : A = A + 1 : J = LEN (A$) - 1 : GOTO 9
16 POKE 31136, INT (A / 256) : POKE 31137,A - 256 * PEEK (31136)
17 POKE 31140, INT (Z / 256) : POKE 31141,Z - 256 * PEEK (31140) : RETURN
18 INPUT A$ : Z = VAL (A$) : IF Z < 0 THEN Z = Z + 32766
19 IF RIGHT$ (A$,1) = "H" THEN J = LEN (A$) - 1 : Z = 0 : ELSE
RETURN
20 FOR I = 1 TO J : N = ASC ( MID$ (A$,I,1)) - 48 : IF N > 9 THEN N =
N - 7
21 IF N > 15 THEN RUN : ELSE Z = Z * 16 + N : NEXT : RETURN