Seite 3 von 9

Re: PASM Bootloader

Verfasst: Di 17. Sep 2013, 12:30
von PIC18F2550
deleted new Code:kleine correkturen und ein paar longs eingespart.

Re: PASM Bootloader

Verfasst: Di 17. Sep 2013, 14:35
von kuroneko
PIC18F2550 hat geschrieben:
kuroneko hat geschrieben:Wieviele cogs schaltet Dein Code dann ab?
alle auser sich selbst.
Wunschdenken :)
PIC18F2550 hat geschrieben:par Zeiger wert muß der in long oder byte sein
par ist immer long, man hat ja nur 14bit zur Verfuegung, die unteren beiden bits werden als 0 betrachtet (4n).
PIC18F2550 hat geschrieben:COGID von 0 - 7? weil 8 bit freigehalten werden :shock: ist doch irgendwie 1 Bit zuviel oder habe ich was übersehen.
Ist doch wirklich nicht so schwer. 2x14bit gehen fuer die Adressen drauf. Bleiben 4bit. Bit 3 = 1 heisst cognew (next free ID), die unteren 3bit sind dann egal (%1---). Laesst Du bit 3 auf 0 dann werden die unteren 3bit als cogid interpretiert (%0ccc, coginit, explicit ID).
PIC18F2550 hat geschrieben:mit dem syntax binn ich immer noch am kämpfen :(
mov reg_a, $4 'direktwert in reg_a schreiben
mov reg_a, #$4 'inhalt des in long $4 enthaltenden wertes laden
mov reg_a, @wert 'adresse wo wert gespeichert ist laden (0-1FF)direktwert
Vergiss @ in PASM (allgemein in DAT). Das gibt Dir nur das relative Offset im aktuellen Object. In SPIN kriegst Du was Du erwartest (absolute hub address). Muss man wissen, dafuer hat bst dann @@@. Und die ersten beiden Varianten funktionieren genau andersherum.

Code: Alles auswählen

DAT             org     0

entry           cogid   $ nr                    ' $000  $0C7C0001
                mov     a, #0                   ' $001  a := 0
                mov     a, 0                    ' $002  a := $0C7C0001
                mov     a, entry                ' $003  a := $0C7C0001

a               res     1

Re: PASM Bootloader

Verfasst: Di 17. Sep 2013, 15:22
von PIC18F2550
Ooook :oops:

da mach ich mich mal an die Arbeit meinen Mist zu korrigieren.

cognew (next free ID) ist genau richtig und das was ich suche.
Muß PAR $0001 beim start des Interpreters was übergeben werden? ich denke ja was steckt im 2. long vom hRAM eigendlich drinn.

interpreter long $0001 << 18 + $3C01 << 4 + %1000

mov reg_a, #$4 'direktwert in reg_a schreiben
mov reg_a, $4 'inhalt des in long $4 enthaltenden wertes laden

Re: PASM Bootloader

Verfasst: Di 17. Sep 2013, 17:23
von PIC18F2550
Damit kann ich jetzt mein Zeigerfeld erzeugen.

Code: Alles auswählen

MEL_01Z     long  @@@MEL_01 /4-@@@MEL_01Z/4+1
ERRLIST     long  @@@ERRT_01/4-@@@MEL_01Z/4+1
            long  @@@ERRT_02/4-@@@MEL_01Z/4+1
            long  @@@ERRT_03/4-@@@MEL_01Z/4+1
...
:D

Die Texte müssten dazu auf long Grenzen verschoben werden.

Alles ist relativ auch der WAHNSINN.

Danke kuroneko jetzt entsteht auch das richtige compilerlisting. :DAUMENHOCH

Re: PASM Bootloader

Verfasst: Di 17. Sep 2013, 21:53
von PIC18F2550
so das ist der heutige Stand file deleted @kuroneko ist der Teil mit dem cogstop richtig?

Re: PASM Bootloader

Verfasst: Mi 18. Sep 2013, 00:30
von kuroneko
PIC18F2550 hat geschrieben:Muß PAR $0001 beim start des Interpreters was übergeben werden? ich denke ja was steckt im 2. long vom hRAM eigendlich drinn.
Schau Dir mal den Einsprung Code des Interpreters an. Es werden 5 words beginnend ab Adresse 6 geladen (long[0] == clkfreq, byte[4] == clkmode, byte[5] == checksum).

Code: Alles auswählen

' initial parameters
'
'       par     word
'       -----------------
'       +2      pbase
'       +4      vbase
'       +6      dbase
'       +8      pcurr
'       +A      dcurr
'
' Entry
'
DAT                     org

                        mov     x,#$1F0-pbase           'entry, load initial parameters
                        mov     y,par
:loop                   add     y,#2
:par                    rdword  pbase,y
                        add     :par,#$100              'inc d lsb
                        add     :par,#$100
                        djnz    x,#:loop

Re: PASM Bootloader

Verfasst: Mi 18. Sep 2013, 00:41
von kuroneko
PIC18F2550 hat geschrieben:@kuroneko ist der Teil mit dem cogstop richtig?
Nicht ganz. Wenn Du eine djnz Schleife bastelst und N Dein Index ist dann "sieht" die Schleife nur N..1. Wie willst dann jemals cog 0 loswerden?

Code: Alles auswählen

                mov     ccnt, #7                ' seven contenders
                cogid   this                    ' and us
                or      spin, this              ' remember for restart
                add     them, #1                ' everyone but us
                cogstop them                    ' sayonara ...
                djnz    ccnt, #$-2              ' to all of them
                
                coginit spin                    ' launch SPIN interpreter

' initialised data and/or presets

spin            long    $0004 << 16 | $F004 << 2 | %0000

' uninitialised data and/or temporaries
                                                
ccnt            res     1                       ' cog shutdown loop index
this                                            ' our cog ID
them            res     1                       ' and our contenders
Die dritte Zeile kannst/musst Du weglassen da Dein loader erhalten bleiben soll.

Re: PASM Bootloader

Verfasst: Mi 18. Sep 2013, 12:38
von PIC18F2550
Frage:

wenn ich ein eeprom-file ab adresse 0 in den lRam lade sind doch da die Werte pbase, vbase, dbase, pcurr und dcurr gesetzt?

Dann muss ich doch nur noch einen beliebigen freien COG mit

Code: Alles auswählen

                coginit spin

spin            long    $0004 << 16 | $F004 << 2 | %1000
starten.

Oder lieg ich hier vollkommen Falsch.

Re: PASM Bootloader

Verfasst: Mi 18. Sep 2013, 13:59
von kuroneko
PIC18F2550 hat geschrieben:Frage:

wenn ich ein eeprom-file ab adresse 0 in den lRam lade sind doch da die Werte pbase, vbase, dbase, pcurr und dcurr gesetzt?

Dann muss ich doch nur noch einen beliebigen freien COG ... starten.

Oder lieg ich hier vollkommen Falsch.
Noe, EEPROM oder BINARY Files haben diese 5 Werte schon vorbereitet (einfach zu sehen im PropTool mit F8, in bst etwas weniger offensichtlich). Fuer letzteres musst Du aber die Marker setzen und VAR loeschen. Und beim EEPROM File vielleicht Adresse $7FFC ausklammern (vom Loader genutzt).

Re: PASM Bootloader

Verfasst: Mi 18. Sep 2013, 16:02
von PIC18F2550
Spinnteil mit Grundgerüst erweitert.
Bellatrixloader fehlt immer noch:(
datei deledet

@kuroneko

$7FFC kann ruhig überschieben werden da der Wert nach dem laden von regnatix neu vom loader gesetzt wird.
Der COG vom Spinninterpreter ist da noch beim laden also Entwarnung.

Was meinst Du mit "Marker setzen und VAR loeschen"? :oops: