![]() |
DEUTSCHE VERSION |
|
![]() |
Links | | | Forums | | | Comments | | | Report news |
![]() |
Chat | | | Polls | | | Newsticker | | | Archive |
![]() |
amiga-news.de Forum > Programmierung > CPU per Library ermitteln | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2007-01-19, 13:15 h MaikG Posts: 5172 User |
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. ] [ - Answer - Quote - Direct link - ] |
2007-01-19, 13:40 h Gazelle Posts: 151 User |
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. [ - Answer - Quote - Direct link - ] |
2007-01-19, 14:03 h ZeroG Posts: 1488 User |
Doch, ist genau dafür gedacht, ab OS4 gibts dafür IExec->GetCPUInfo(). [ - Answer - Quote - Direct link - ] |
2007-01-19, 16:59 h MaikG Posts: 5172 User |
>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? [ - Answer - Quote - Direct link - ] |
2007-01-19, 17:29 h gni Posts: 1106 User |
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. [ - Answer - Quote - Direct link - ] |
2007-01-19, 18:01 h MaikG Posts: 5172 User |
>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? [ - Answer - Quote - Direct link - ] |
2007-01-19, 18:07 h Der_Wanderer Posts: 1229 User |
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 [ - Answer - Quote - Direct link - ] |
2007-01-19, 18:25 h MaikG Posts: 5172 User |
>Peek.l(4) Und das darf man laut richtlinen? [ - Answer - Quote - Direct link - ] |
2007-01-19, 18:31 h ZeroG Posts: 1488 User |
@MaikG: Ja, das darf man. Es ist die einzige feste Adresse in AmigaOS und steht sogar als AbsExecBase im execbase.h Header. [ - Answer - Quote - Direct link - ] |
2007-01-20, 10:09 h MaikG Posts: 5172 User |
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. ] [ - Answer - Quote - Direct link - ] |
2007-01-20, 10:47 h Ralf27 Posts: 2779 User |
@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. ] [ - Answer - Quote - Direct link - ] |
2007-01-20, 12:53 h ZeroG Posts: 1488 User |
Zitat: Tut es. Es gibt zwar kein Chipmem mehr aber es ist halt anderer Speicher in diesem Adressbereich. [ - Answer - Quote - Direct link - ] |
2007-01-20, 13:51 h Holger Posts: 8116 User |
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& ![]() mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2007-01-20, 15:26 h ZeroG Posts: 1488 User |
@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. [ - Answer - Quote - Direct link - ] |
2007-01-21, 17:16 h Holger Posts: 8116 User |
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. [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > CPU per Library ermitteln | [ - Search - New posts - Register - Login - ] |
![]() |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2025 by amiga-news.de - all rights reserved. |
![]() |