[archimedes] Re: Fragen zum C-Programm Uhrzeit

  • From: Alexander Ausserstorfer <bavariasound@xxxxxxxxxxxxxxx>
  • To: archimedes@xxxxxxxxxxxxx
  • Date: Sat, 04 Mar 2017 05:52:15 +0100

In message <2551a41456.cms@xxxxxxxxxxxxxxxxxxxxxx>
          Carlos Michael Santillan <ml-archimedes@xxxxxxxxxx> wrote:

In C kann man über die Zeiger den Speicherinhalt auslesen und
beschreiben (*). Wie beim 64er, Atari usw. muss man nur die Adresse
kennen. In BASIC nennt man das dann halt Peek und Poke. Das ist aber
nicht erstebenswert, da mit einen Update des Betriebssystems sich die
Adressen um ein paar Bytes verschieben kann und schon liest/schreibt man
an der falschen Stelle.

Das scheint mir ein wenig kompliziert zu sein. Woher kennt man jetzt die
Anfangsadresse eines Programms oder wo die einzelnen Unterroutinen
liegen, damit die richtig angesprungen werden können? Ich könnte mir
denken, dass da das Betriebssystem irgendwas machen muss.

Eine API wie die SWIs sind da besser. Offenbar hat es beim 64 und Co.
nie Updates gegeben und darf es dann ja auch nicht.

Deshalb hat auch immer so gut wie alles funktioniert. Probleme gab es
eigentlich nur gelegentlich bei den verschiedenen C64-Modellen.

Ich bin mir da nicht mehr so sicher weils so lange her ist. Aber mit
Data schreibt man Daten in den Speicher und mit Read lies man das dann
aus.

Mit DATA hinterlegt man die Dezimalwerte, welche ein Programm oder Daten
beschreiben, also z. B.

100 DATA 123, 85, 38, 3, 80, 89, ...

usw.

READ liest diese Daten nacheinander aus.

POKE schreibt Daten in den Speicher. PEEK liest Daten aus dem Speicher
aus.

Will man z. B. ab Adresse 49192 ein Programm oder Daten in den Speicher
klopfen, macht man folgendes:

10 FOR a = 49192 TO ...
20 READ d
30 POKE 49192 + a
40 NEXT a
100 DATA 123, 85, 38, 3, 80, 89, ...

Ganz einfach also. (Angaben aus dem Kopf und ohne Gewähr - ich habe
bereits seit ca. 20 Jahren keinen C64 mehr.)

Gestartet wird das dann mit SYS 49192

Also wieder Zeiger oder vielleicht eine Struktur. For/Next gibt es in
C nicht?

Doch, freilich.

Man könnte vielleicht hergehen und mit Hilfe von C einen Datenblock in
den Speicher klopfen, der Entsprechendes enthält (Code + Daten).

int a[2000];

a[0] = 123;
a[1] = 85;
[a2] = 38;

Das wäre freilich kein Problem.

Dann weiß ich aber immer noch nicht, was der C-Compiler tatsächlich
macht. Denn vermutlich macht er mehr. Wo startet also das Programm? Und
was ist mit der Main-Schleife (welche der Compiler anscheinend
blödsinnigerweise erwartet, obwohl die kein Mensch braucht, denn sonst
bricht er ab)? Die Main-Schleife ist auch ein Hauptproblem bei den
Modulen; denn diese kennen keine.

Wenn ich die Daten mit Hilfe von C in den Speicher klopfe, dann aber mit
Hilfe eines Editors wie StrongEd den übersetzten Code von überflüssigem
Zeug "bereinigen" muss, dann kann ich auch hergehen und den Code gleich
mit Hilfe von StrongEd direkt einklopfen. Das ist nicht sinnvoll.

Ich bin mir nicht sicher, was C hier macht. Und genau das ist ja das
Problem.

Wenn C nicht flexible ist, warum nutzt Du dann nicht BBC BASIC? :-)

Weil ich nicht weiß, wie ich dort die entsprechenden
Programm-Bibliotheken nutzen kann. Neue Programm-Bibliotheken zu
portieren dürfte auch etwas schwierig sein. Die meisten Bibliotheken
sind leider nur im grauenhaften C-Quellcode verfügbar. Dies ist der
einzige Grund. Sonst würde ich mir C gar nicht erst antun.

Problem ist, dass man heutzutage nicht mehr alles neu schreibt, sondern
auf Bestehendes zurückgreifen muss. Weil man bei der Komplexität der
Programme sonst nicht mehr fertig wird. Siehe Webbrowser. Andernfalls
hätte ich auch !POP3S und !SMTPS nicht fertig gebracht.

*) Hinweis: Bei moderneren Betriebsystemen als das vom C64 kann man
nicht im gesamten Speicher lesen und schreiben.

Jow. Da sagt einem der Rechner, was man machen soll und darf. Habe ich
aba nicht so gerne... weil, ich bin ja ein Dickschädel. Und lasse mir
nicht gerne etwas sagen. Sondern möchte dem Rechner sagen, was er zu tun
hat.

Herrliche neue Zeit.

A.

-- 
http://home.chiemgau-net.de/ausserstorfer/
Großstadtindianer

Other related posts: