Hallo zusammen,
in meiner aktiven CPC-Zeit hatte ich mir ein kleines Disk-Menu geschrieben, welches auf jeder Diskette als "Oberfläche" verfügbar war. (Und das heisst $ )
Auf dem Emulator funktioniert allerdings die - auf dem CPC ohne Mucken laufende - Einleseschleife für den MC-Code nicht :
Auszug:
10 DEFINT a-z:PEN 1:PAPER 0:MODE 2:INK 0,26:INK 1,0:a=4089:WHILE NOT EOF:READ b$:POKE a,VAL("&"+b$):a=a+1:WEND:CALL &1000:DATA cd,60
,bb,32,c2,b,c9,21,a,10,df,7,10,c9,d,c6,7,23,0,c8,0,1,1,a,0,3,0:PRINT"$CD 8/91":CAT
11 PRINT SPC(18);:CALL &BB9C:PRINT"f0-f6 RUN/CAT/USER/ERA/DRIVE/REN/TYPE @=CPM":CALL &BB9C:m=VPOS(#0)
12 LOCATE 1,m+1:IF NOT INKEY(0)THEN y=MAX(0,y-1) ELSE IF NOT INKEY(2)THEN y=MIN(y+1,m) ELSE IF NOT INKEY(8)THEN x=MAX(0,x-20) ELSE IF NOT INKEY(1)THEN x=MIN(60,x+20) ELSE IF NOT INKEY(15)THEN RUN n$ ELSE IF NOT INKEY(13)THEN RUN
13 IF NOT INKEY(14)THEN 15 ELSE IF NOT INKEY(26)THEN |CPM ELSE IF NOT INKEY(5)THEN |ERA,@n$:RUN ELSE IF NOT INKEY(20)THEN 17 ELSE IF
NOT INKEY(12)THEN 16 ELSE IF NOT INKEY(4)THEN OPENIN n$:CLS:WHILE NOT EOF:LINE INPUT#9,a$:PRINT a$:WEND:CALL &BB06:RUN
14 n$="":FOR c=1 TO 12:LOCATE x+c,y+5:CALL 4089:n$=n$+CHR$(PEEK(3010)):NEXT c:CALL &BB9C:LOCATE x+1,y+5:PRINT n$:CALL &BB18:CALL &BB
9C:LOCATE x+1,y+5:PRINT n$:GOTO 12
15 INPUT"0-FF";u:POKE &A701,u MOD 256:RUN
16 INPUT u$:|REN,@u$,@n$:RUN
17 d=PEEK(&A700):POKE &A700,d+1+3*(d>1):RUN
Display More
So liest er die DATA nicht ein und damit führt der CALL natürlich zum Absturz.
Für den Emulator musste ich das so umschreiben, damit es läuft:
10 DEFINT a-z:PEN 1:PAPER 0:MODE 2:INK 0,26:INK 1,0:a=4089:b$="o":WHILE b$<>"END":READ b$:POKE a,VAL("&"+b$):a=a+1:WEND:CALL 4090:DA
TA cd,60,bb,32,c2,b,c9,21,a,10,df,7,10,c9,d,c6,7,23,0,c8,0,1,1,a,0,3,0,END,END:PRINT"$CD 8/91":CAT
11 PRINT SPC(18);:CALL &BB9C:PRINT"f0-f6 RUN/CAT/USER/ERA/DRIVE/REN/TYPE @=CPM":CALL &BB9C:m=VPOS(#0)
12 LOCATE 1,m+1:IF NOT INKEY(0)THEN y=MAX(0,y-1) ELSE IF NOT INKEY(2)THEN y=MIN(y+1,m) ELSE IF NOT INKEY(8)THEN x=MAX(0,x-20) ELSE I
F NOT INKEY(1)THEN x=MIN(60,x+20) ELSE IF NOT INKEY(15)THEN RUN n$ ELSE IF NOT INKEY(13)THEN RUN
13 IF NOT INKEY(14)THEN 15 ELSE IF NOT INKEY(26)THEN |CPM ELSE IF NOT INKEY(5)THEN |ERA,@n$:RUN ELSE IF NOT INKEY(20)THEN 17 ELSE IF
NOT INKEY(12)THEN 16 ELSE IF NOT INKEY(4)THEN OPENIN n$:CLS:WHILE NOT EOF:LINE INPUT#9,a$:PRINT a$:WEND:CALL &BB06:RUN
14 n$="":FOR c=1 TO 12:LOCATE x+c,y+5:CALL 4089:n$=n$+CHR$(PEEK(3010)):NEXT c:CALL &BB9C:LOCATE x+1,y+5:PRINT n$:CALL &BB18:CALL &BB
9C:LOCATE x+1,y+5:PRINT n$:GOTO 12
15 INPUT"0-FF";u:POKE &A701,u MOD 256:RUN
16 INPUT u$:|REN,@u$,@n$:RUN
17 d=PEEK(&A700):POKE &A700,d+1+3*(d>1):RUN
Display More
Wie kommts ?