amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Wann, welche Library öffnen? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

28.05.2003, 10:53 Uhr

Geri
Posts: 138
Nutzer
Hallo!

Eine Frage zur exec.library. Muß man diese eigentlich nie mit OpenLibrary() öffnen? Soviel ich weiß muss man dies bei allen anderen Libraries machen, oder?
Gibt es eine Art Sleep() Befehl in der exec.library, ohne dass man die DOS Library benutzen muss, oder irgendeine andere Art die Programmausführung CPU-freundlich zu unterbrechen?

Schon mal danke für die Anworten! :O

Geri

[ - Antworten - Zitieren - Direktlink - ]

28.05.2003, 11:16 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Hi Geri, womit willst du denn die exec.library öffnen wenn sich der OpenLib() Befehl in der exec.library befindet?. Natürlich musst du dieses nicht denn OpenLib() gibt die die Basisadresse der Library zurück (ggf läd sie diese in den Speicher). Die ExecLibrary befindet sich immer im Speicher (im Rom) und dies Adresse der exec.library ist im Amiga immer am gleichen Platz hinterlegt, an der Addresse 0x00000004, dort liest sie der StartUp code aus und packt sie nach A6, in ASM sieht das ungefähr so aus.

für die Intuition.library

move.l IntBase(pc),a6 //basisadresse der intuition base nach a6
jsr -xyz(a6) //int.lib funktion aufrufen

für die exec.library

move.l $4,a6 //basisadresse der exec.lib nach a6
jsr -xyz(a6) // funktion der exec.lib aufrufen

es gibt keinen sleep() befehl in der exec.library, du musst delay() aus der dos.library benutzen. Wenn du c benutzt ist das ehe egal, da meines wissens nach alls startup-codes die dos.library sowieso öffnen und diese funktion deswegen ehe zur Verfügung steht.

[ - Antworten - Zitieren - Direktlink - ]

28.05.2003, 11:31 Uhr

thomas
Posts: 7717
Nutzer
Wenn du möchtest, daß das Programm für immer schläft, kannst du Wait(0) aufrufen.

Ich würde dir raten, mal die RKRMs zu lesen, da sind solche Sachen alle beschrieben.

Da steht u.a. auch, daß man nicht jedesmal move 4,a6 machen soll, da die Adresse 4 im nicht-cachebaren Chip-RAM liegt. Vielmehr soll man einmal move 4,execbase machen und danach immer nur move execbase,a6.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ Dieser Beitrag wurde von thomas am 28.05.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

28.05.2003, 11:36 Uhr

Geri
Posts: 138
Nutzer
Hi!

@DariusBrewka

Dass die Exec Library immer da ist, ist natürlich richtig, daran hatte ich nicht gedacht. Das sollte dann die AbsBase sein, die immer an 0x00000004 liegt. Welchen Zweck hat dann die ExecBase, bzw. was ist der Unterschied zwischen diesen beiden Adressen? (Ist mir in einigen Programmcodebeispielen aufgefallen..)

Ich kann zwar kein M68k Assembler, sondern nur ein bischen C/C++, aber das Beispeil ist fast selbsterklärend, super!

Schade dass es keine Sleep Funktion in der Exec Lib gibt, ich bin wahrscheinlich von Windows und Linux zuviel verwöhnt! ;(

@thomas

Ja die RKRMs hab ich schon, muß mir allerdings erst einen Überlick schaffen mit dem C Programmieren auf dem Amiga...


[ Dieser Beitrag wurde von Geri am 28.05.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

28.05.2003, 12:03 Uhr

Solar
Posts: 3680
Nutzer
Zitat:
Original von Geri:

Das sollte dann die AbsBase sein, die immer an 0x00000004 liegt. Welchen Zweck hat dann die ExecBase, bzw. was ist der Unterschied zwischen diesen beiden Adressen? (Ist mir in einigen Programmcodebeispielen aufgefallen..)


AbsBase ist immer 0x0000 0004.

Der *Inhalt* von AbsBase ist ExecBase (Startadresse von exec.library).

[ - Antworten - Zitieren - Direktlink - ]

28.05.2003, 23:21 Uhr

Mad_Dog
Posts: 1944
Nutzer
Zitat:
Original von Geri:

Gibt es eine Art Sleep() Befehl in der exec.library, ohne dass man die DOS Library benutzen muss, oder irgendeine andere Art die Programmausführung CPU-freundlich zu unterbrechen?


Wenn Du nur mal kurz "warten" willst, nimmst Du Delay(),
also z.B.

Irgendein Programmschnipsel
Delay(5); // Warte kurz
...weiter im Programm.


--

http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

28.05.2003, 23:28 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Geri:
Welchen Zweck hat dann die ExecBase, bzw. was ist der Unterschied zwischen diesen beiden Adressen?

Der Sinn und Zweck ist der, daß die AbsBase an einer festen Stelle liegen muß, damit die Software sie auch wiederfindet, während die exec-base selbst je nach Systemconfiguration woanders liegen kann.
Also auf einem nichtaufgerüsteten A500 liegt die ExecBase im Chip-RAM, auf einem aktuellen Amiga überlicherweise im 32Bit-FastRAM.

Man beachte den Gegensatz zu den oft nicht ganz korrekten Aussagen: die exec.library liegt im RAM, nur die Funktionen, sofern sie nicht gepatcht wurden, liegen im ROM.
Zitat:
Schade dass es keine Sleep Funktion in der Exec Lib gibt, ich bin wahrscheinlich von Windows und Linux zuviel verwöhnt! ;(

Das gilt für die meisten DOS-Funktionen. Äquivalente Funktionen liegen bei anderen Betriebssystemen meist im Kernel (oder in der statisch verlinkten support-lib).

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Wann, welche Library öffnen? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.