Deutsche Umlaute, oder überhaupt Sonderzeichen, können in der aktuellen Version 1.1 nicht genutzt werden. Der Grund ist folgender: Um Speicherplatz zu sparen, hat man für die Basic-Schlüsselwörter, wie zB. PRINT, nicht die ASCII-Zeichenfolge P R I N T benutzt, was fünf Bytes Speicher belegt hätte, sondern das erkannte Schlüsselwort wurde in einen Einzeichenkode umgewandelt, in ein sogenanntes Token. Bei Print ist das 89H. Das hat einen weiteren Effekt: Man kann Leerzeichen eliminieren, da ja nur nach einem Token gesucht wird, ansonsten ist alles normaler ASCII-Text aus den ersten 127 Zeichen.

Was hat das aber jetzt mit den Umlauten/Sonderzeichen zu tun? Die Umlaute liegen im Bereich größer 127. Binär betrachtet bedeutet das 1XXX XXXX, das entspricht Hexadezimal 80H bis 0FFH. 127 und kleiner bedeutet binär 0XXX XXXX, das ist Hexadezimal 00H bis 07FH. Der gravierende Unterschied liegt im 7. Bit (Achtung, Informatiker beginnen mit dem 0. Bit). Hier wird zwischen Standard-ASCII-Zeichen und Sonderzeichen unterschieden (wenn man von den Steuerzeichen 0..31 absieht).

So haben die Programmierer den Bereich der Sonderzeichen für die Basic-Token verwendet. Damit sind die Sonderzeichen herausgefallen. Nun ja, die Leute von Intel haben ja keine Umlaute gebraucht.

Wie haben sie das realisiert? Schauen wir uns folgenden Auszug aus derm Source-Code des originalen Basic-Interpreters an:

;***************************************************************
;
;INPUTS A CHARACTER FROM THE SYSTEM CONSOLE.
;
; ;***************************************************************
;

INCHAR: JNB BI,INCHAR1 ;CHECK FOR MONITOR (BUBBLE)
LCALL 2060H
SJMP INCH1
INCHAR1:JNB CIUB,INCHAR2 ;CHECK FOR USER
LCALL 4033H
SJMP INCH1
INCHAR2:JNB RI,$ ;WAIT FOR RECEIVER READY.
MOV A,SBUF
CLR RI ;RESET READY
CLR ACC.7 ;NO BIT 7
;
INCH1: CJNE A,#13H,INCH11
SETB CNT_S
INCH11: CJNE A,#11H,INCH12
CLR CNT_S
INCH12: CJNE A,#CNTRLC,INCH13
JNB NO_C,C_EX ;TRAP NO CONTROL C
RET
;
INCH13: CLR JKBIT
CJNE A,#17H,CI_RET ;CONTROL W
SETB JKBIT
;
CI_RET: SETB C ;CARRY SET IF A CHARACTER
CI_RET1:RET
;EXIT

Nach dem Empfang eines Bytes über die serielle Schnittstelle wird einfach das 7.Bit gelöscht. Somit wird zB aus dem kleinen ö ein kleines v.

Können Sonderzeichen dennoch realisiert werden?

Ja, es gibt zwei Möglichkeiten:

  1. Die legale Möglichkeit: Wenn man ein Sonderzeichen ausgeben will, benutzt man den Basic-Befehl CHR(integer). Für Sonderlaute ist integer zwischen 128 und 255. Für das kleine ö wäre der Befehl: PRINT CHR(246).
  2. Die "eigene", proprietäre Möglichkeit: Da nicht alle Token benutzt werden, könnte man ein Token zum "Einschalten" der Sonderzeichen benützen und ein Token zum "Ausschalten", dh, zwischen diesen Token müßte alles als ASCII-Zeichen interpretiert werden. Ohne Programmierkenntnisse unmöglich zu bewerkstelligen. Außerdem müßte man an der Verbreitung dieser geänderten Version interessiert sein, sonst könnte man die damit geschriebenen Programme mit Umlauten nicht weitergeben.

 

Valid XHTML and CSS.