*** Protokolldatei gestartet *** Datum: Mi Aug 6 20:03:04 2008 [Mi Aug 6 2008] [20:03:04] Betreten Sie haben den Kanal #forth-ev betreten (~bernd@ppp-88-217-81-8.dynamic.mnet-online.de). [Mi Aug 6 2008] [20:09:23] Betreten MatthiasT_ hat den Kanal betreten (~mt@frnk-590efc44.pool.einsundeins.de). [Mi Aug 6 2008] [20:09:35] hi [Mi Aug 6 2008] [20:11:09] Betreten frunobulax hat den Kanal betreten (~mhx@e243118.upc-e.chello.nl). [Mi Aug 6 2008] [20:15:45] Hallo Marcel! [Mi Aug 6 2008] [20:16:05] Tag Matthias [Mi Aug 6 2008] [20:16:19] Hallo! [Mi Aug 6 2008] [20:16:53] Kleine Frage: Besteht Interesse an einem kurzen Artikel über den Assembler von amforth? [Mi Aug 6 2008] [20:17:08] so 2-3 Seiten etwa [Mi Aug 6 2008] [20:17:13] Ja, immer her damit [Mi Aug 6 2008] [20:17:40] Wie tief sollte ich da in die Hardware einsteigen? [Mi Aug 6 2008] [20:18:08] Oder einfach auf den bisherigen Beiträgen für diese spezielle Architektur aufbauen [Mi Aug 6 2008] [20:18:10] Die Grundzüge der CPU-Architektur kurz vorstellen, das sollte reichen [Mi Aug 6 2008] [20:18:51] Ron Minke hat das ja wunderbar und in epischer Breite eigentlich schon gemacht. Da reicht ja fast eine kurze Wiederholung [Mi Aug 6 2008] [20:18:56] Genau. [Mi Aug 6 2008] [20:19:15] ok [Mi Aug 6 2008] [20:21:04] Ich habe diese Woche einen Chip-Prototyp mit dem b16 drin von der Fab zurückbekommen [Mi Aug 6 2008] [20:21:19] Erstes Werk diese Woche: Ein Debugger für den b16 schreiben [Mi Aug 6 2008] [20:22:00] Was gibt es denn fuer b16 Anwendungen? [Mi Aug 6 2008] [20:22:13] Das ist eine Gasgauge, also ein Batteriemonitor [Mi Aug 6 2008] [20:22:15] oh ja. einen Debugger wollte ich auch noch mal schreiben. So einen richtig schönen mit Singlestep und Watchpoints und so [Mi Aug 6 2008] [20:22:41] Ja, Single-Step und Breakpoints funktionieren schon, Watchpoints auf spezielle Speicherstellen unterstützt die Hardware nicht. [Mi Aug 6 2008] [20:22:51] Die Debug-Hardware ist extrem minimalistisch ;-). [Mi Aug 6 2008] [20:23:54] Ich werde wohl mit den vorhandenen CPU Features auskommen müssen. JTAG und Co sind etwas zu elaboriert dafür .. [Mi Aug 6 2008] [20:24:14] Ich verwende auch kein JTAG, sondern ein SPI-Interface [Mi Aug 6 2008] [20:24:19] Ohne Chip-Select... [Mi Aug 6 2008] [20:24:35] Und mit bidirektionalem SDI/SDO, also nur zwei Pins. [Mi Aug 6 2008] [20:24:55] Naja, ich will ja nicht den Prozessor anhalten, nur das laufende Forthprogramm. [Mi Aug 6 2008] [20:25:24] Auf einem Forth-Prozessor ist das natürlich das Selbe. [Mi Aug 6 2008] [20:25:34] Jo. [Mi Aug 6 2008] [20:26:04] Aber mein Forth soll anschließend den Debugger bedienen. Das geht etwas schlecht, wenn die VM steht ;=) [Mi Aug 6 2008] [20:27:52] Hier mal ein Screenshot vom b16-Debugger: http://www.jwdt.com/~paysan/b16-debug.png [Mi Aug 6 2008] [20:29:14] Inspirierend [Mi Aug 6 2008] [20:29:36] Die grünen Adressen färben sich beim Draufclicken rot, dann sind's Breakpoints. [Mi Aug 6 2008] [20:29:45] Nochmal draufklicken: Breakpoint geht weg. [Mi Aug 6 2008] [20:30:15] In dem Prototyp ist das ganze Memory zum Glück SRAM, da fällt es nicht schwer, "beliebig viele" Breakpoints zu setzen. [Mi Aug 6 2008] [20:31:01] Ein Breakpoint ist als Schleife (Sprung auf sich selbst) implementiert [Mi Aug 6 2008] [20:31:11] Läuft der Debugger fullspeed oder macht der bei jedem Befehl noch Zusatzaufgaben? [Mi Aug 6 2008] [20:31:26] Bei "run" läuft das fullspeed. [Mi Aug 6 2008] [20:31:33] cool [Mi Aug 6 2008] [20:31:39] Alle 100ms wird gepollt, ob der Breakpoint erreicht ist. [Mi Aug 6 2008] [20:32:03] Wenn ja -> CPU anhalten, ursprünglichen Befehl unterschieben, und dem User die Möglichkeit geben, mit step einen Schritt weiter zu gehen. [Mi Aug 6 2008] [20:32:25] wieviele Befehle kommen denn in den 100ms zusammen? [Mi Aug 6 2008] [20:32:48] Das Ding läuft in der Applikation so zwischen 15kHz und 4MHz (zum Stromsparen) [Mi Aug 6 2008] [20:32:56] Also maximal 400000 Befehle. [Mi Aug 6 2008] [20:33:19] Und dann werden noch die Breakpoints hinreichend oft getroffen? [Mi Aug 6 2008] [20:33:36] Das ist kein Problem: Wenn mal ein Breakpoint erreicht ist, dann steckt die CPU eh fest. [Mi Aug 6 2008] [20:33:58] Ahja. [Mi Aug 6 2008] [20:34:38] Breakpoints änden also den Code ab? [Mi Aug 6 2008] [20:34:47] Ja. [Mi Aug 6 2008] [20:35:05] Der alte Befehl wird ausgelesen und durch einen Sprungbefehl ersetzt. [Mi Aug 6 2008] [20:35:49] Im Single-Step-Modus werden die Breakpoints dann alle wieder durch die entsprechenden Befehle ersetzt. [Mi Aug 6 2008] [20:38:37] Und wenn mann mehrere breakpoints auf das gleiche Address setzt (mache ich immer in gdb :-) [Mi Aug 6 2008] [20:39:34] Dank GUI kann man da nur Breakpoints togglen. [Mi Aug 6 2008] [20:39:45] Erster Click: Breakpoint hin, zweiter Click: Breakpoint wieder weg. [Mi Aug 6 2008] [20:44:50] Also kein commandline interface? [Mi Aug 6 2008] [20:44:59] Nein ;-) [Mi Aug 6 2008] [20:45:07] Gut, im Prinzip ja ;-) [Mi Aug 6 2008] [20:45:57] Ich will vor allem noch so Sachen einbauen wie "schnell mal ein paar Befehle auf dem Target ausführen" [Mi Aug 6 2008] [20:47:31] Und beim Single-Stepping sollte der CPU-Status auch mitgeloggt werden können. [Mi Aug 6 2008] [20:50:00] Aber ansonsten ist das Werte-Verändern mit der Eingabemaske eigentlich sehr intuitiv. [Mi Aug 6 2008] [20:50:27] Da kommt gar nicht der Wunsch nach einer Kommandozeile auf. [Mi Aug 6 2008] [20:50:48] Solange man das CPU Design klar vor Augen hat ;=) [Mi Aug 6 2008] [20:51:08] Schnell mal etwas ganz anderes: Starten Userprogramme unter Darwin auf 0x10000dd60 und hoeher?! [Mi Aug 6 2008] [20:51:43] Keine Ahnung, Sorry [Mi Aug 6 2008] [20:52:05] Sieht so aus. [Mi Aug 6 2008] [20:52:14] susen:gforth bernd$ gforth [Mi Aug 6 2008] [20:52:14] Gforth 0.6.9-20080716, Copyright (C) 1995-2008 Free Software Foundation, Inc. [Mi Aug 6 2008] [20:52:14] Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license' [Mi Aug 6 2008] [20:52:14] Type `bye' to exit [Mi Aug 6 2008] [20:52:14] here . 4312101200 ok [Mi Aug 6 2008] [20:52:14] hex ok [Mi Aug 6 2008] [20:52:14] here . 101057150 ok [Mi Aug 6 2008] [20:52:48] Unter Linux dagegen total randomisiert: [Mi Aug 6 2008] [20:52:50] bernd@vimes:~> gforth [Mi Aug 6 2008] [20:52:50] Gforth 0.6.9-20080716, Copyright (C) 1995-2008 Free Software Foundation, Inc. [Mi Aug 6 2008] [20:52:50] Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license' [Mi Aug 6 2008] [20:52:50] Type `bye' to exit [Mi Aug 6 2008] [20:52:50] hex here . 7F2F73B5A120 ok [Mi Aug 6 2008] [20:53:16] Damit werden alle Programme groesser und langsahmer. [Mi Aug 6 2008] [20:53:46] PC-relativ adressieren, da ist es egal, wo das Programm läuft. [Mi Aug 6 2008] [20:54:10] Mein altes ubuntu gforth sagt immer "hex here u. B79B24B0 ok" [Mi Aug 6 2008] [20:54:23] Das ist wohl auch 32 bittig. [Mi Aug 6 2008] [20:54:37] ja klar ;=) [Mi Aug 6 2008] [20:54:52] Aber wenn man ALLOCATE nutzt gilt dass nicht -- doch? [Mi Aug 6 2008] [20:55:48] Doch, eigentlich schon. [Mi Aug 6 2008] [20:56:03] Mit mmap() kann man sich die Adressen 'raussuchen. [Mi Aug 6 2008] [20:56:11] Wenn sie noch frei sind ;-) [Mi Aug 6 2008] [20:56:37] Ist also unbrauchbar :-( [Mi Aug 6 2008] [20:56:54] In bigFORTH mach' ich das so. [Mi Aug 6 2008] [20:57:21] bigFORTH hat seine eigene Speicherverwaltung, und die mag es nicht, wenn die erste Adresse schon negativ ist. [Mi Aug 6 2008] [20:59:17] Nah, ich meinte, wenn das Forth ALLOCATE macht bekommt es eine absolute Adresse. Das musste mann doch nicht umechen nach eine relative Offset ?! [Mi Aug 6 2008] [21:00:30] Ja, der Bereich, der von ALLOCATE benutzt wird, kann wieder woanders sein. [Mi Aug 6 2008] [21:03:03] Unter Linux wird übrigens dieser Bereich randomisiert, während das eigentliche Executable immer am gleichen Fleck ist: [Mi Aug 6 2008] [21:03:15] bernd@vimes:~> gforth -e "' noop hex. cr bye" [Mi Aug 6 2008] [21:03:15] $619408 [Mi Aug 6 2008] [21:03:15] bernd@vimes:~> gforth -e "' noop hex. cr bye" [Mi Aug 6 2008] [21:03:15] $619408 [Mi Aug 6 2008] [21:03:15] bernd@vimes:~> gforth -e "' noop hex. cr bye" [Mi Aug 6 2008] [21:03:15] $619408 [Mi Aug 6 2008] [21:03:35] Na gut. Ich werde mal in den Metacompiler nachschauen. Wird wohl ein einfacher Bug sein (kann iForth64 nicht fuer Darwin compilieren wegen assembler Fehler Botschaft). [Mi Aug 6 2008] [21:06:43] Ich verstehe nicht ganz :-) Unter Linux habe ich kein Problem mit randomized Adressen. Aber ein offset groesser als 32 bit ist unerwartet viel. [Mi Aug 6 2008] [21:12:08] ich verlasse euch dann mal. Bis neulich dann [Mi Aug 6 2008] [21:12:13] Ciao [Mi Aug 6 2008] [21:12:13] Beenden MatthiasT_ hat den Server verlassen (EOF From client). [Mi Aug 6 2008] [21:14:06] Ich sehe eigentlich nichts darueber auf developer.apple.com. Nah ja. [Mi Aug 6 2008] [21:18:27] Die Idee dahinter ist wohl, alle 32-Bit-Bugs auszumerzen... [Mi Aug 6 2008] [21:18:44] Kann mich erinnern, auf Alpha/Digital Unix war das auch so. [Mi Aug 6 2008] [21:19:00] Die ersten 4 GB komplett unbenutzbar. [Mi Aug 6 2008] [21:22:37] Na schoen, aber am diesen Moment habe ich keine Lust nur fuer Darwin das Design zu aendern. (Wahrscheinlich brauche ich das auch nicht :-) [Mi Aug 6 2008] [21:23:46] Ok, genug für heute. [Mi Aug 6 2008] [21:23:57] Ich gehe mal wieder an die Arbeit. Success mit b16 und Doug. [Mi Aug 6 2008] [21:24:03] ;-) [Mi Aug 6 2008] [21:24:11] Doug kann ich wohl kaum überzeugen... [Mi Aug 6 2008] [21:24:38] Also ciao