AMIGA-Bascoder ‑ es gibt ihn doch
Karsten Schenk stellte uns in K67.78 seine Aktualisierung des Bascoders für DOS-PC vor. Dort erwähnte
er auch. daß es auf dem AMIGA keine Version des Computer-Esperantos gibt.
Das hat er nun selbst geändert: für das Basic, das auf der "Extras 1.3"-Diskette ausgeliefert wurde,
hat er einen Bascoder geschrieben, der die Festlegungen der Version 3C erfüllt, mit zwei Einschränkungen:
Wie wir es auch vom JOYCE-Bascoder kennen, verzichtet er völlig auf die Kassettenarbeit, der AMIGA
hat von Haus aus kein Kassetteninterface und inzwischen stehen genügend andere Übertragungsmöglichkeiten
für die ASCII-Listings ab Zeile 1000 zur Verfügung.
Da der AMIGA fensterorientiert arbeitet, kann einem Buchstaben auf dem Bildschirm nicht so unmittelbar
wie auf vielen 8-bit-Heimcomputern eine (feste) Position im Speicher zugeordnet werden, daher ist es
(vorläufig?) nicht möglich, die Funktion zum Zurücklesen eines Zeichens aus dem Bildschirm (GOSUB 220) zu nutzen.
Außerdem bemerkt Karsten, daß das Basic (und mit ihm dann natürlich BasiCode) mit steigender
Betriebssystemnummer instabiler wird, auf meinem 500+ mit Umschaltmöglichkeit zwischen Kickstart
1.3 und 2.0, den ich vorigen Herbst auf dem Flohmarkt gekauft habe, liefen jedoch die getesteten
Programme ohne Probleme, sowohl hinsichtlich der Grafik und der Farben als auch des Sounds.
Thomas Rademacher // November 2007
REM Basicode fuer Amiga®, 30457, Karsten Schenk
REM graphics.bmap wird benötigt
REM Benutzung auf eigene Verantwortung.
LIBRARY "graphics.library"
RANDOMIZE TIMER
CLEAR ,&O70000
SCREEN 1,328,220,4,1
WINDOW 2," BasiCode-3C auf AMIGA®",,0,1
PALETTE 0,0,0,0
PALETTE 2,0/15,0/15,0/15
PALETTE 3,0/15,0/15,11/15 : REM blau
PALETTE 4,11/15,0/15,0/15 : REM rot
PALETTE 5,.3,0,.4 : REM violett
PALETTE 6,0/15,6/15,0/15 : REM gruen
PALETTE 7,5/15,9/15,12/15 : REM hellblau
PALETTE 8,14/15,11/15,0/15 : REM gelb
PALETTE 9,15/15,15/15,15/15 : REM weiß
GOTO 1000
20 CLEAR
ON ERROR GOTO fehler
CC(0)=7:CC(1)=0
HG=264 :VG=198
HO=41-1:VE=25-1
GOSUB 100
GOTO 1010
100 COLOR CC(0)+2,CC(1)+2
CLS
RETURN
110 COLOR CC(0)+2, CC(1)+2
LOCATE VE+1, HO+1
RETURN
120 HO=POS(0)-1
VE=CSRLIN-1
RETURN
150 COLOR CC(1)+2,CC(0)+2
PRINT " "+SR$+" ";
COLOR CC(0)+2,CC(1)+2
RETURN
200 IN$=""
IN$=INKEY$
201 IN=0
IF IN$<>"" THEN
IN=ASC(UCASE$(IN$))
IF IN<28 THEN
IN=IN*(-1)
IF IN=-9 OR IN=-13 THEN
IN=ABS(IN)
END IF
END IF
IF IN>=129 AND IN<=138 THEN
IN=(IN-128)*(-1)
END IF
WHILE INKEY$<>"":WEND
IF IN=28 THEN
IN=31
ELSEIF IN=29 THEN
IN=30
ELSEIF IN=30 THEN
IN=29
ELSEIF IN=31 THEN
IN=28
END IF
END IF
RETURN
210 IN$=INPUT$(1)
GOSUB 201
RETURN
220 REM Weil der Amiga® keinen Textmodus hat, ist die folgende
REM Routine nur eine Attrappe
IN=ASC("A")
IN$="a"
CN=ASC("a")-ASC("A")
RETURN
250 BEEP
RETURN
260 RV=RND
RETURN
270 FR=FRE(0)
RETURN
280 IF FR=0 THEN BREAK ON
IF FR=1 THEN BREAK OFF
RETURN
300 IF SR<0 THEN
SR$=STR$(SR)
ELSE
SR$=MID$(STR$(SR),2)
END IF
RETURN
310 OSR=CDBL(SR)
OP=FIX(OSR)
OB=ABS(OSR)-ABS(FIX(OSR))
OB=CLNG(OB*10^CN)
IF OP<0 THEN
SR$=STR$(OP)
ELSE
SR$=MID$(STR$(OP),2)
END IF
IF CN>CT-2 THEN
SR$=STRING$(CT,"*")
ELSE
IF CN<>0 THEN
IF OB=0 THEN
SR$=SR$+"."+STRING$(CN,"0")
ELSE
SR$=SR$+"."+MID$(STR$(OB),2)
END IF
END IF
END IF
RETURN
330 SR$=UCASE$(SR$)
RETURN
350 LPRINT SR$;
RETURN
360 LPRINT
RETURN
400 OSD=1.82*SD:
IF OSD<.023 THEN OSD=.023
IF SP<26 THEN
OSP=26
ELSEIF SP>127 THEN
OSP=127
ELSE
OSP=SP
END IF
IF SV<>0 THEN
SOUND EXP(OSP*.057762+2.10125), OSD,SV*15.9375
END IF
OTIME = TIMER
OMO =.1*SD
WHILE TIMER<OMO+OTIME
WEND
RETURN
450 OTIME=TIMER
OMO=.1*SD
SD=0:IN=0
452 IN$=INKEY$
IF TIMER>OMO+OTIME THEN GOTO 456
IF IN$<>"" THEN SD=(OTIME+OMO)-TIMER: GOTO 456
GOTO 452
456 IF SD<>0 THEN GOTO 201
IF SD=0 THEN IN$=""
RETURN
500 LET IN=0
IF NF/2=INT(NF/2) THEN OPEN NF$ FOR INPUT AS NF+1
IF NF/2<>INT(NF/2) THEN OPEN NF$ FOR OUTPUT AS NF+1
IF IN <>-1 THEN LET IN=0
RETURN
540 LET IN=0
LINE INPUT #NF+1,IN$
IF IN <>-1 THEN LET IN=ABS(EOF(NF+1))
RETURN
560 LET IN=0
PRINT #NF+1,SR$
IF IN <>-1 THEN IN=0
RETURN
580 LET IN=0
CLOSE NF+1
IF IN <>-1 THEN IN=0
RETURN
600 GOSUB 100
RETURN
620 OX=INT(HO*HG): OY=INT(VE*VG)+6
PSET (OX,OY),CC(CN)+2
RETURN
630 OX=INT(HO*HG): OY=INT(VE*VG)+6
LINE -(OX,OY),CC(CN)+2
RETURN
650 COLOR CC(0)+2,CC(1)+2
OX%=INT(HO*HG): OY%=INT(VE*VG)+12
CALL Move&(WINDOW(8),OX%,OY%)
IF CN=0 THEN
PRINT SR$;
ELSE
PRINT STRING$(LEN(SR$),32);
END IF
RETURN
950 WINDOW CLOSE 2
SCREEN CLOSE 1
LIBRARY CLOSE
END
fehler:
IF ERR=52 THEN
OMSG$="Datei nicht gefunden!"
ELSEIF ERR=53 OR ERR=64 THEN
OMSG$="Falscher Dateiname!"
ELSEIF ERR=61 THEN
OMSG$="Datenträger voll!"
ELSEIF ERR=68 OR ERR=49 THEN
OMSG$="Laufwerk nicht bereit!"
ELSEIF ERR=52 OR ERR=53 THEN
OMSG$="Unzulässiger Dateiname!"
ELSEIF ERR=70 THEN
OMSG$="Datenträger ist schreibgeschützt!"
ELSE
PRINT "Fehler: ";ERR
ERROR ERR
STOP
END IF
WINDOW 3,"Fehler",,0,1
PRINT "Fehler: "; ERR
PRINT OMSG$
PRINT
PRINT "Bitte eine Taste drücken"
WHILE INKEY$<>""
WEND
WHILE INKEY$=""
WEND
WINDOW 2
LET IN=-1
RESUME NEXT
|