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 Hier geht's zum Download: BasCoder für AMIGA
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 "Bitte eine Taste drücken" WHILE INKEY$<>"" WEND WHILE INKEY$="" WEND WINDOW 2 LET IN=-1 RESUME NEXT
|