Forum: PC-Programmierung "Warmstart" vom 4. Byte?!


von Günther A. D. Hauptmann (Gast)


Lesenswert?

Liebe Leute,

möchte mir bitte jemand erläutern, wie es sich vorzustellen ist mit so 
einem Warmstart.
Wie soll der Code dafür siehe Listing 1, eigentlich erreicht werden?
1
nop
2
jmp near cold
3
nop
4
jmp near warm
5
; ...
6
cold:
7
; ...
8
warm:
9
; ...
Listing 1: Anfang des Codes von FIG-Forth in NASM, vgl. [1] und [2].

[1] FIG-FORTH for IBM-PC Page 1-3 
(http://www.forth.org/fig-forth/fig-forth_IBMPC.pdf Seite 4)

[2] fig-FORTH Installation Manual SCR # 12 
(http://wiki.yak.net/1089/fig-FORTH_Manuals_May79.pdf Seite 30)

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Ich kenne den x86-Prozessor (welcher war das 1984?) nicht so gut, aber 
das sieht nach einer Vektortabelle aus, wie sie auch der AVR hat, 
beginnend mit Adresse 0100H

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

"MAY 1979"
Aus welcher Mottenkiste hast Du das ausgegraben?

Kaltstart wird durch Power-On oder den Resettaster ausgelöst, Warmstart 
durch einen Aufruf. Ob Du diese Unterscheidung behandeln willst, bleibt 
Dir überlassen.

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

https://www.pcjs.org/documents/manuals/ibm/
ab PDF-Seite 468 des PCDOS2.0 Manuals ist EXE2BIN beschrieben, dort gibt 
es "ORG0100H"

Anscheinend soll der Assembler ein ".COM"-Programm erzeugen, das waren 
Programme, die im Gegensatz zu EXE maximal 64k groß sein durften.

: Bearbeitet durch User
von Günther A. D. Hauptmann (Gast)


Lesenswert?

Hat es etwas mit Cassette Basic und diesem ominösen Monitor auf SCR # 79 
zutun, bzw. ist das Cassette Basic der Monitor?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

https://de.wikipedia.org/wiki/Microsoft_Macro_Assembler

Dem Datum im Forth-Text nach: "The IBM Personal Computer MACRO Assembler 
02-24-84"
muss es vor MASM 3.0 gewesen sein (Nov 84), MASM2.0 wurde zuletzt im 
Juli 84 geändert: https://bytepointer.com/masm/index.htm

Dunkel, Herr, ist Deiner Rede Sinn...
https://de.wikipedia.org/wiki/IBM_Cassette_BASIC
https://de.wikipedia.org/wiki/Maschinencode-Monitor

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

.COM-Programme (DOS) haben eine feste Einsprungadresse von CS:0100h. DOS 
macht rein gar nichts für das Programm, da wird nicht mal der 
Stackpointer gesetzt. Die Datei wird einfach komplett in freies RAM 
geladen und an CS:0100h angesprungen, mehr nicht. Heißt, ein PUSH AX am 
Anfang eines COM-Programms zerschießt das Programm bereits. In CS:0000h 
bis CS:00FFh finden sich bei DOS Umgebungsvariablen, z.B. die 
Kommandozeile.

Bei .EXE-Dateien kann eine Einsprungadresse definiert werden, die Datei 
kann eine Checksumme beinhalten (wobei die oft nicht ausgewertet wird), 
der Stack wird von DOS passend gesetzt. Die Umgebungsvariablen sind 
dadurch zugänglich, daß DS/ES 10h niedriger gesetzt werden als CS, da 
findet man durch die Speichersegmentierung des x86 diese 100h Bytes wie 
bei der .COM-Datei. Dazu kann man an eine .EXE noch irgendwelchen 
Overhead/Daten anhängen, der von DOS nicht mit in den Speicher geladen 
wird. Bestes Beispiel für sowas waren selbstextrahierende Archive.

Aber die Interrupttabelle hat damit nicht viel zu tun, die ist 
Prozessor- bzw. Plattform-spezifisch. Unter DOS z.B. hat das 
Überschreiben des ersten kB des Hauptspeichers einen sofortigen Absturz 
zur Folge, weil der x86 nicht ohne Interrupttabelle leben kann.

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Die Idee mit den Interruptvektoren hatte ich auch wieder verworfen.

Der ominöse SCREEN Nr. 79 des oben verlinkten Forth-Handbuchs (S.52 von 
56) enthält tatsächlich die Worte Monitor und cold start.

von seere (Gast)


Lesenswert?

Bei den beiden Einsprungpunkten für Cold und Warm handelt es sich um 
Einsprungpunkte in den Forth-Interpreter. Es geht hier idR. nicht um 
irgendeinen Reset/Reboot der Hardware.

von Günther A. D. Hauptmann (Gast)


Lesenswert?

Ja, die Sprünge ganz am Anfang werden auf unterschiedliche Stellen in 
COLD (SCR # 55/S. 44) umgebogen.

 o Klar ist, dass der cold Vektor beim Starten ausgeführt wird, da er 
zuvorderst steht.

 o Nicht klar ist mir jedoch, wie Vektor warm jemals ausgeführt werden 
soll.

In FIG-Forth selbst habe ich keinen Verweis auf das vierte Byte bzw. 
104h entdeckt.
Einzig die Sache mit dem Monitor sehe ich als potenzielle Möglichkeit, 
verstehe sie allerdings noch nicht.

von foobar (Gast)


Lesenswert?

Der Warmstart wird von extern angesprungen, um Forth neu zu starten, 
ohne das Dictionary zu löschen.  Beispielsweise, um ein gerade laufendes 
Programm zu beenden - beim C64 wurde das per NMI (Restore-Taste) 
ausgelöst.  Btw, der Basic-Interpreter hatte auch so einen 
Warmstart-Einsprung.

von Günther A. D. Hauptmann (Gast)


Lesenswert?

Liese sich etwas Vergleichbares auch auf einem PC machen? Etwa mit dem 
ganz alten Cassette Basic und Forth auf Kassette. Oder wenn man von 
Forth aus COMMAND.COM ausführte und dann EXIT eingibt. Wo landet man 
dann?

Anbei, der mehr oder weniger selbe Assembler aus dem Installation Manual 
findet sich vom selben Autor in [1, p. 143ff/S. 11ff].

[1] Fourth Dimensions, Volume 3 Issue 5 
(http://forth.org/fd/FD-V03N5.pdf)

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Die Sprungadressen stehen ja ab 0100H, 0FD8 und 0FC3. Dort geht es 
weiter. Anscheinend wird das Forth-spezifische hier einfach als Define 
Word und Define Byte abgelegt. Dazwischen mal ein Stück Assemblercode. 
Sehr unübersichtlich.

von asdasdas (Gast)


Lesenswert?

xhjh

von cppbert3 (Gast)


Lesenswert?

Günther A. D. Hauptmann schrieb:
> Liese sich etwas Vergleichbares auch auf einem PC machen? Etwa mit dem
> ganz alten Cassette Basic und Forth auf Kassette. Oder wenn man von
> Forth aus COMMAND.COM ausführte und dann EXIT eingibt. Wo landet man
> dann?

Was willst du erreichen? Hast du eine nackte Hardware mit deinem 
eingenen Code oder reden wir hier von einem normalen Legacy BIOS/UEFI PC 
mit Windows/Linux, es geht vieles nicht mehr auf neuerer 
Hardware/Betriebssystemen

von pnp (Gast)


Lesenswert?

asdasdas schrieb:
> xhjh

Danke für diese überaus nützliche Information!

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

welches xhjh, ein Helikopter aus den 40ern oder eine Radiostation in 
Veracruz?

von Günther A. D. Hauptmann (Gast)


Lesenswert?

Soweit ich das jetzt deuten kann, heißt Int 27h [1] in BYE [2, p. 
1-93/S. 94],
dass es irgendwie möglich ist, nach dem verlassen von Forth einen 
Warmstart desselben zu machen. Mangels Erfahrung mit TSR Programmen 
verstehe ich in CLD [2, p. 1-62/S. 64] leider nur den Kommentar, dass es 
wohl mit Ctrl-Break geht. Leider habe ich es weder in der DOSBox noch 
auf einem BIOS PC mit dieser FORTH.EXE (Quelltext in FORTH) [3] 
geschafft. Was muss ich dazu für Tasten drücken, oder wie geht das?

[1] https://www.ctyme.com/intr/int-27.htm

[2] http://www.forth.org/fig-forth/fig-forth_IBMPC.pdf

[3] 
http://www.forth.org/library/eforth_SOC/eforth_SOC_source/figforth/FIGFORTH.ZIP

von Harfner (Gast)


Lesenswert?

Hättest Du möglicherweise die Güte, einmal mitzuteilen, was Du mit einem 
Forth von 1979 beabsichtigst? Soll das auf einem aktuellen PC laufen?
Möglicherweise kann man Dir dann besser helfen.
Was Deine Frage angeht: Entweder wird der Warmstart direkt über jmp 
angesprungen (wahrscheinlich) oder der erste jmp wird im RAM 
überschrieben (hier unwahrscheinlich). Die NOPs dienen wahrscheinlich 
zum Aligment auf durch 4 teilbare Adressen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.