ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > CPU per Library ermitteln | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
19.01.2007, 13:15 Uhr MaikG Posts: 5172 Nutzer |
Wie kann ich per Library ermitteln welche CPU im Rechner ist? Einige seriellen Devices kommen nicht mit einen kontinuierlichen eingehenden Datenstrom klar - lassen den Puffer überlaufen und geben die Daten erst weiter wenn der Transfer beendet ist. Auf 060(evtl. auch 040) ist das kein Problem, aber auf 030/020 muss ich das mit einem Workaround umgehen. http://www.amiga-news.de/forum/thread.php?id=25334&BoardID=7 Dafür muss ich aber wissen welche CPU im Rechner ist... [ Dieser Beitrag wurde von MaikG am 19.01.2007 um 13:16 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
19.01.2007, 13:40 Uhr Gazelle Posts: 151 Nutzer |
Zitat: Siehe #include <exec/execbase.h> Da gibt es ein SysBase->AttnFlags Feld. Ich habe es selber noch nie gebraucht, daher weiß ich nicht, ob es dafür verwendet werden kann. [ - Antworten - Zitieren - Direktlink - ] |
19.01.2007, 14:03 Uhr ZeroG Posts: 1487 Nutzer |
Doch, ist genau dafür gedacht, ab OS4 gibts dafür IExec->GetCPUInfo(). [ - Antworten - Zitieren - Direktlink - ] |
19.01.2007, 16:59 Uhr MaikG Posts: 5172 Nutzer |
>Siehe #include <exec/execbase.h> >Da gibt es ein SysBase->AttnFlags Feld. Das hab ich schon in so einem C-Programm gefunden, aber wo ist die SysBase? [ - Antworten - Zitieren - Direktlink - ] |
19.01.2007, 17:29 Uhr gni Posts: 1106 Nutzer |
Zitat:Ich bin mir jetzt nicht sicher ob ich darüber lachen oder weinen soll... SysBase ist ein Variablennamen für eine Variable die die Basisadresse der exec.library enthält. Üblicherweise wird diese Variable vom Startupcode Deiner C-Laufzeitumgebung initialisiert. Wo diese Adresse herkommt, sollte jedem Amigaprogrammierer bekannt sein. [ - Antworten - Zitieren - Direktlink - ] |
19.01.2007, 18:01 Uhr MaikG Posts: 5172 Nutzer |
>SysBase ist ein Variablennamen für eine Variable die die >Basisadresse der exec.library enthält. Verstehe was gemeint ist. >Üblicherweise wird diese Variable vom Startupcode Deiner >C-Laufzeitumgebung initialisiert. Wo diese Adresse herkommt, >sollte jedem Amigaprogrammierer bekannt sein. Das Programm schreib ich grade in MaxonBasic, kann man die Adresse auch woanders her bekommen? [ - Antworten - Zitieren - Direktlink - ] |
19.01.2007, 18:07 Uhr Der_Wanderer Posts: 1229 Nutzer |
Peek.l(4) -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
19.01.2007, 18:25 Uhr MaikG Posts: 5172 Nutzer |
>Peek.l(4) Und das darf man laut richtlinen? [ - Antworten - Zitieren - Direktlink - ] |
19.01.2007, 18:31 Uhr ZeroG Posts: 1487 Nutzer |
@MaikG: Ja, das darf man. Es ist die einzige feste Adresse in AmigaOS und steht sogar als AbsExecBase im execbase.h Header. [ - Antworten - Zitieren - Direktlink - ] |
20.01.2007, 10:09 Uhr MaikG Posts: 5172 Nutzer |
Aber auf einem AONE z.B. gibt es doch kein Chipmen, geht es da auch? So scheint es zu gehen: code:execadr&=PEEKL(4) IF PEEKW(execadr&+AttnFlags%) AND AFF_68000& THEN cpu$="68000" IF PEEKW(execadr&+AttnFlags%) AND AFF_68010& THEN cpu$="68010" IF PEEKW(execadr&+AttnFlags%) AND AFF_68020& THEN cpu$="68020" IF PEEKW(execadr&+AttnFlags%) AND AFF_68030& THEN cpu$="68030" IF PEEKW(execadr&+AttnFlags%) AND AFF_68040& THEN cpu$="68040" IF PEEKW(execadr&+AttnFlags%) AND 16& THEN cpu$="68060" Danke @all [ Dieser Beitrag wurde von MaikG am 20.01.2007 um 10:09 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
20.01.2007, 10:47 Uhr Ralf27 Posts: 2779 Nutzer |
@MaikG: EDIT: Zu schnell gepostet. AFF<->AFB ... muß ich auch mal testen -- http://www.alternativercomputerclub.de.vu [ Dieser Beitrag wurde von Ralf27 am 20.01.2007 um 10:51 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
20.01.2007, 12:53 Uhr ZeroG Posts: 1487 Nutzer |
Zitat: Tut es. Es gibt zwar kein Chipmem mehr aber es ist halt anderer Speicher in diesem Adressbereich. [ - Antworten - Zitieren - Direktlink - ] |
20.01.2007, 13:51 Uhr Holger Posts: 8116 Nutzer |
Zitat: Es kann aber trotzdem sein, dass zero-page Zugriffe nicht erlaubt sind, und erst im exception-handler überprüft wird, ob es sich um einen long-read auf (4) handelt und dann die exec-base zurückgegeben wird. Aus diesem Grund, Classic: Chip-Mem Zugriff, NG: möglicherweise CPU-Exception, führen die Laufzeitbibliotheken den Zugriff nur genau einmal am Anfang durch und speichern das Resultat in der bekannten Variablen SysBase. Jedes Mal auf Adresse 4 zuzugreifen, kann die Performance sehr beeinträchtigen. Deshalb sollte man auch in Basic nicht jedes Mal PEEKL(4) hinschreiben, wenn man die ExecBase bracht, sondern das Resultat am Anfang in einer Variablen (vorzugsweise SysBase& ) speichern. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
20.01.2007, 15:26 Uhr ZeroG Posts: 1487 Nutzer |
@Holger: Das ist für Classics richtig, aber unter OS4 laufen alle Libraryfunktionsaufrufe über die Interfacepointer. Und die können wieder überall liegen, also muß sich Ottonormalprogrammierer schon mächtig ins Zeug legen um überhaupt mehr als einmal (wenn überhaupt) auf die AbsExecBase zuzugreifen. [ - Antworten - Zitieren - Direktlink - ] |
21.01.2007, 17:16 Uhr Holger Posts: 8116 Nutzer |
Zitat:Das ist ja klar, die ExecBase kann ja auch überall liegen. Ottonormalprogrammierer macht auch unter AOS3.x in C normalerweise das richtige, weil SysBase kein Makro mit Zugriff auf 4, sondern eine hinzugelinkte Variable im eigenen Programm ist. Hier geht es aber um einen Basic-Dialekt, der eh keinen Support für AOS4-Interfaces hat. Deshalb ja auch nur der Hinweis, dass man, egal womit man programmiert, wenn man keine Support-Lib benutzt, die eh das richtige macht, Zugriffe auf die Adresse 4 auf das Minimum reduzieren sollte. Das gleiche gilt eben auch, wenn man Support-Libraries selber implementieren will. Reentranter Code könnte auch die Bibliothek/das Interface für jeden Aufrufer erneut öffnen, trotzdem sollte die ExecBase nicht jedes Mal aus Adresse 4 gelesen werden... 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 > CPU per Library ermitteln | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |