Seite 1 von 1

Stringende Kennung

BeitragVerfasst: So 10. Nov 2013, 12:59
von wwl
Hallo,

in der Atariwelt wird als Stringendezeichen nicht das Zeichen mit dem Code 0 genommen, sondern häufig das Zeichen mit dem Code $EA. Bei ersterem handelt es sich um ein Herz, bei letzterem um ein inverses kleines j.
Ich sehe keinen Vorteil von $EA gegenüber 0. Ich kann mir im Gegensatz eher vorstellen, daß man mal inversen Text ausgeben will, als ein Herzlein. Kann mich jemand aufklären?

Gruß, Wolfgang

Re: Stringende Kennung

BeitragVerfasst: So 10. Nov 2013, 13:25
von skriegel
Wenn ich mich bei Facebook, WhatsApp und Twitter so umschaue, sehe ich andauernd Herzen, aber bisher noch kein einziges invertiertes "j"... ;)

Sorry, mehr kann ich dazu gerade nicht beitragen. :beer:

Re: Stringende Kennung

BeitragVerfasst: So 10. Nov 2013, 15:15
von Sleepy
Nur eine Vermutung:

Evt. hängt es damit zusammen dass, wenn ein String mit DIM dimensioniert wird, der für den Sting reservierte Speicherbereich mit "0" gefüllt ist, unabhängig davon ob dem String an sich schon ein Inhalt zugewiesen wurde. Damit es keine Verwechslung gibt hat man vlt. ein anderes, eher selten benutztes Zeichen gewählt.

Sleeπ

Re: Stringende Kennung

BeitragVerfasst: So 10. Nov 2013, 15:51
von HiassofT
Hi!

wwl hat geschrieben:in der Atariwelt wird als Stringendezeichen nicht das Zeichen mit dem Code 0 genommen, sondern häufig das Zeichen mit dem Code $EA.

Häh? Wo wird $EA als end-of-string Zeichen genommen? Ich hör das zum ersten mal.

Unter Atari Basic gibt's kein end-of-string, die Länge des Strings wird extra gespeichert.

Die CIO Print Text Routine (command=9) verwendet EOL ($9B) als Ende Zeichen, also zumindest fast, das EOL gibt die Routine nämlich auch mit aus :)

Vor Ewigkeiten hab' ich mal Assembler Code für Print-Routinen gesehen, die das letzte Zeichen eines Strings durch ein gesetztes Bit 7 markiert haben - also das letzte Zeichen invertiert. Das lässt sich in Assembler schön mit BPL/BMI abchecken - ist letztlich aber auch unpraktisch wenn man ein EOL ausgeben will. Da lieber die normale CIO Put Routine (11) verwenden und die Länge setzen.

so long,

Hias

Re: Stringende Kennung

BeitragVerfasst: So 10. Nov 2013, 17:22
von atarixle
Atari-BASIC benutzt, ebenso wie Pascal, kein End-Of-String-Zeichen.

Als Grund kann aufgeführt werden, dass Strings sowieso DIMensioniert oder deren Länge schneller herauszufinden ist:

Code: Alles auswählen
10 DIM A$(20)
20 A$="Hallo"
30 PRINT LEN(A$)
RUN

5


Aber der für uns alle wichtigste Grund ist, dass in Strings alles mögliche gespeichert werden kann, von reinem Text über Daten (z.B. 8- oder gar 16-Bit-Werten) bis hin zu Maschinenprogrammen, die von keinen nervenden Parsern zerstört werden können.

Das Inverse [j] war übrigens Zufall, Atari-BASIC initialisiert die Strings beim DIMensionieren nicht.

Turbo-BASIC hingegen füllt die leeren Strings mit kleinen Herzchen auf:

Code: Alles auswählen
10 REM fuehre dieses Programm einmal in Atari-BASIC und einmal in Turbo-BASIC aus
20 DIM MM$(100)
30 FOR P=ADR(MM$) TO ADR(MM$)+99
40 PRINT PEEK(p);"; ";
50 NEXT P

Re: Stringende Kennung

BeitragVerfasst: So 10. Nov 2013, 20:42
von wwl
HiassofT hat geschrieben:Häh? Wo wird $EA als end-of-string Zeichen genommen? Ich hör das zum ersten mal.

Z.B. Atari Technik Handbuch, Routine 'TXTOUT' Seite 111. Oder Sector Copy http://wiki.strotmann.de/wiki/Wiki.jsp?page=Sector%20Copy, heißt auch 'TXTOUT' arbeitet aber ein wenig anders.

Gruß, Wolfgang

PS Ich glaube ich hab's raus: Der Opcode von NOP ist $EA. Damit spart man sich das inkrementieren eines Pointers!

Re: Stringende Kennung

BeitragVerfasst: So 10. Nov 2013, 20:59
von wwl
atarixle hat geschrieben:Das Inverse [j] war übrigens Zufall, Atari-BASIC initialisiert die Strings beim DIMensionieren nicht.

Was heißt Zufall? Wo ist es Dir denn untergekommen?

Gruß, Wolfgang

Re: Stringende Kennung

BeitragVerfasst: So 10. Nov 2013, 21:07
von atarixle
hab ich bereits beantwortet

Re: Stringende Kennung

BeitragVerfasst: So 10. Nov 2013, 22:05
von wwl
atarixle hat geschrieben:hab ich bereits beantwortet

jein!