HBasic

Du hast ein Betriebssystem für den Hive geschrieben oder beschäftigst dich mit den grundlegenden Systemfunktionen, dann bist du hier richtig!
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

Das format 2longs pro Befehl habe ich jetzt entfernt.
Der Grundbefehl ist 1 word + 0 ... 6 Byte's
Daraus werden ca 10000 Befehlszeilen.

Die benötigten COG-Runtimmodule werden im externen Ram gespeichert und können bei bedarf schnell in einen Freien COG geladen werden.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

Die Routinen im HauptCOG

Code: Alles auswählen

SPRV0         jmp       #J0000               '[code]                    STOP
              jmp       #J0001               '[code]                    END
              jmp       #J0002               '[code][arg1]              GOTO
              jmp       #J0003               '[code][arg1]              COG-Kill
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
' TOK-CODE Senden an Bellatrix ----------------------------------------------------------
              jmp       #J0008               '[code][arg1][arg2][arg3]  write_Bellatrix_word+long
              jmp       #J0009               '[code][arg1][arg2][arg3]  write_Bellatrix_byte+long
              jmp       #J000A               '[code][arg1][arg2]        write_Bellatrix_long
              jmp       #J000B               '[code][arg1][arg2]        write_Bellatrix_byte+word
              jmp       #J000C               '[code][arg1]              write_Bellatrix_word
              jmp       #J000D               '[code][arg1]              write_Bellatrix_byte
' Variabel Senden an Bellatrix ----------------------------------------------------------
              jmp       #J000E               '[code][arg1]              write_Bellatrix_long      hRam Variabel_long
              jmp       #J001F               '[code][arg1]              write_Bellatrix_word      hRam Variabel_long
              jmp       #J0010               '[code][arg1]              write_Bellatrix_byte      hRam Variabel_long
' String Senden an Bellatrix ------------------------------------------------------------
              jmp       #J0011               '[code][arg1][arg2]        write_Bellatrix_byte      eRam String 0 therminiert
              jmp       #J0011               '[code][arg1][arg2][arg3]  write_Bellatrix_byte      eRam String mit Länge
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
' TOK-CODE Senden an Administra ---------------------------------------------------------
              jmp       #J0018               '[code][arg1][arg2][arg3]  write_Administra_word+long
              jmp       #J0019               '[code][arg1][arg2][arg3]  write_Administra_byte+long
              jmp       #J001A               '[code][arg1][arg2]        write_Administra_long
              jmp       #J001B               '[code][arg1][arg2]        write_Administra_byte+word
              jmp       #J001C               '[code][arg1]              write_Administra_word
              jmp       #J001D               '[code][arg1]              write_Administra_byte
' Variabel Senden an Administra ---------------------------------------------------------
              jmp       #J001E               '[code][arg1]              write_Administra_long      hRam Variabel_long
              jmp       #J001F               '[code][arg1]              write_Administra_word      hRam Variabel_long
              jmp       #J0020               '[code][arg1]              write_Administra_byte      hRam Variabel_long
' String Senden an Administra -----------------------------------------------------------
              jmp       #J0021               '[code][arg1][arg2]        write_Administra_byte      eRam String 0 therminiert
              jmp       #J0021               '[code][arg1][arg2][arg3]  write_Administra_byte      eRam String mit Länge
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
' Variabel Empfang von Bellatrix --------------------------------------------------------
              jmp       #J0028               '[code][arg1]              read_Bellatrix_long      hRam Variabel_long
              jmp       #J0029               '[code][arg1]              read_Bellatrix_word      hRam Variabel_long
              jmp       #J002A               '[code][arg1]              read_Bellatrix_byte      hRam Variabel_long
' String Empfang von Bellatrix ----------------------------------------------------------
              jmp       #J002B               '[code][arg1][arg2]        read_Bellatrix_byte      eRam String 0 therminiert
              jmp       #J002C               '[code][arg1][arg2]        read_Bellatrix_byte      eRam String mit übertragener länge
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
' Variabel Empfang von Administra -------------------------------------------------------
              jmp       #J0030               '[code][arg1]              read_Administra_long      hRam Variabel_long
              jmp       #J0031               '[code][arg1]              read_Administra_word      hRam Variabel_long
              jmp       #J0032               '[code][arg1]              read_Administra_byte      hRam Variabel_long
' String Empfang von Administra ---------------------------------------------------------
              jmp       #J0033               '[code][arg1][arg2]        read_Administra_byte      eRam String 0 therminiert
              jmp       #J0033               '[code][arg1][arg2]        read_Administra_byte      eRam String mit übertragener länge
' ---------------------------------------------------------------------------------------
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR
              jmp       #RTLOOP_ERR '$3F
Die Stringroutinen sind noch unvollständig wegen der noch ungetesteten routinen für den externen Ram.

Alle Befehle von Administra oder Bellatrix können damit nachgebildet werden.
Die IDE Baut die Befehle entsprechend der Treiber nachher zusammen ohne das die Runtime aufquillt. :JUBELN
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

OK die Ausgabe geht z.Z. wird das Programm noch vom Spinninterpreter in den hRam geschrieben.
2012-10-17_23-39-18_592.jpg
Der nächste schritt ist das Programm in den externen RAM schreiben und dannach die Runtime Starten. Programm wird jetztvom COG-geladen.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

Code: Alles auswählen

04FC(0132)             | There are 190 ($0BE) Longs left in the cog
Das klingt erstmal gut die hauptfunktionen sind ja schonmal drinn.
Das Starten des Programm's via externen RAM steht noch aus.
Habe erstmal den Bug gesucht in meinem Code.
Ich hoffe das ich es jetzt richtig gemacht habe :LACHEN

Code: Alles auswählen

DAT ' Außgabe von Konstanten TEXT "PIC18F2550"
progA   byte $00, $08, $46, $38, $31, $43, $49, $50
        byte $00, $0A, $30, $35, $35, $32
        byte $00, $00

ProgE   byte $00
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

Anscheinend doch nicht
Schreibt den Code in den externen RAM

Code: Alles auswählen

DAT
ProgA   long $00_08_46_38, $31_43_49_50
        long $00_0A_30_35, $35_32_00_00
        word $00_00

PUB main|a,b,c
  long[$1FFC]:=$FFFFFFFF        'Stop all Runtimes
  repeat c from 0 to $7F
    ios.ram_wrlong(0,long[@ProgA+c*4],c*4)
List den Code vom externen RAM und schreibt ihn in den hRAM (1:1 Copie ab adresse 0)

Code: Alles auswählen

              mov       line,  h00000000
              mov       temp2, h0000ffff
              shr       temp2, #$1            ' $FFFF --> $7FFF (32k)
INIT1         call      #eRamRB
              wrbyte    temp1, line             ' wert in Line
              add       line,  #$1
              djnz      temp2, #INIT1

Code: Alles auswählen

'---------------------------------------------------------------------
' eRam
'
' temp1     Daten
' temp2     Adresse
' temp3     temp
'---------------------------------------------------------------------
eRamWB ' byte schreiben
              mov     dira,  dout         ' bus auf ausgabe schalten
              call    #setadr           ' adresse setzen
              and     temp1, #$ff
              or      outa,  temp1        ' wert an ports setzen
              xor     outa,  _bwr         ' schreibsignal aktiv
              mov     dira,  dinp         ' bus auf eingabe schalten
              mov     outa,  _s1          ' bus wieder inaktiv
eRamWB_ret    ret
'---------------------------------------------------------------------
eRamRB ' byte lesen
              call    #setadr           ' adresse setzen
              mov     temp1,  ina         ' port einlesen
              and     temp1,  #$ff        ' daten ausmaskieren
              mov     outa,   _s1          ' bus wieder inaktiv
eRamRB_ret    ret
'---------------------------------------------------------------------
setadr ' adresse verarbeiten   hwt-adresse --> latch
              mov     temp3,  temp2       ' adresse holen
              shr     temp3,  #$3          ' adresse für latch zurechtschieben
              and     temp3,  _latch      ' latchbits ausmaskieren
              or      outa,   temp3        ' adresse für latch an ports setzen
              xor     outa,   _al          ' wert in latch übernehmen
              xor     outa,   _al          ' wert in latch übernehmen
              mov     temp3,  temp2       ' adresse holen
              shl     temp3,  #$8          ' adresse zurechtschieben
              and     temp3,  _adr        ' adresse ausmaskieren
              or      outa,   temp3        ' adresse an ports setzen
              xor     outa,   _ram1        ' rambank 1 selektieren
setadr_ret    ret
'---------------------------------------------------------------------
'Konstanten
rtnr      long    $00000000     'dient zum identifizieren der verschiedenen Runtimemodule
h00000000 long    $00000000     '0
h00000001 long    $00000001     ' STOP-Statusmeldung
h0000ffff long    $0000FFFF     '16 bit Lowmaske
dinp      long    %00000111_11111111_11111111_00000000  ' bus input
dout      long    %00000111_11111111_11111111_11111111  ' bus output
_s1       long    %00000100_01111000_00000000_00000000  ' bus inaktiv
_b1       long    %00000000_00111000_00000000_00000000  ' adm=1, bel=0, wr=0, busclk=0
_b2       long    %00000010_00111000_00000000_00000000  ' adm=1, bel=0, wr=0, busclk=1
_b3       long    %00000110_00111000_00000000_00000000  ' adm=1, bel=0, wr=1, busclk=1
_a1       long    %00000000_01011000_00000000_00000000  ' adm=0, bel=1, wr=0, busclk=0
_a2       long    %00000010_01011000_00000000_00000000  ' adm=0, bel=1, wr=0, busclk=1
_a3       long    %00000110_01011000_00000000_00000000  ' adm=0, bel=1, wr=1, busclk=1
_hs       long    %00001000_00000000_00000000_00000000  ' hs=1?

_al       long    %00000000_10000000_00000000_00000000  ' /al bitmaske
_bwr      long    %00000100_00000000_00000000_00000000  ' /wr bitmaske
_ram1     long    %00000000_00001000_00000000_00000000  ' /ram1 bitmaske
_ram2     long    %00000000_00010000_00000000_00000000  ' /ram2 bitmaske
_latch    long    %00000000_00000000_11111111_00000000  ' latch bitmaske
_adr      long    %00000000_00000111_11111111_00000000  ' adrbus bistmaske
'---------------------------------------------------------------------
h7F7FF7F7 long    $7F7FF7F7     '32 bitmaske für LOAD SYSTEM von externen Ram (STATUS)
'---------------------------------------------------------------------
'Variabeln
sprvm     long 0                'Merker Bytecode SPRVM
stat      long $7FFC             'Zeiger auf Statusregister
areg      long $7FF8            'Zeiger auf token im hRAM
line      long 0                'Merker line Nummer
code      long 0                'Tockencode
arg1      long 0                'Tokenargument 1
arg23     long 0                'Longargument
arg2      long 0                'Tokenargument 2
arg3      long 0                'Tokenargument 3
temp1     long 0                'Merker
temp2     long 0                'Merker
temp3     long 0                'Merker
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

Code: Alles auswählen

              mov     outa,   _s1          ' bus wieder inaktiv
Dabei werden doch auch Port's zurückgesetzt die nichts mit dem Ram zusammenhängen!
z.B. serieller Anschluss.

Code: Alles auswählen

              andn    outa,   _s1          ' bus wieder inaktiv
Sollte besser sein!
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

drohne235 kannst du mal schaun ob das Richtig ist.

Code: Alles auswählen

'---------------------------------------------------------------------
' eRam
'
' temp1     Daten
' temp2     Adresse
' temp3     temp
'---------------------------------------------------------------------
eRamWB ' byte schreiben
'              mov     dira,  dout         ' bus auf ausgabe schalten
              or      dira,  dout         ' bus auf ausgabe schalten
              call    #setadr           ' adresse setzen
              and     temp1, #$ff
              or      outa,  temp1        ' wert an ports setzen
              xor     outa,  _bwr         ' schreibsignal aktiv
'              mov     dira,  dinp         ' bus auf eingabe schalten
              or      dira,  dinp         ' bus auf eingabe schalten
'              mov     outa,  _s1          ' bus wieder inaktiv
'              andn    outa,  _s1          ' bus wieder inaktiv
'eRamWB_ret    ret
              jmp     #eRam0
'---------------------------------------------------------------------
eRamRB ' byte lesen
              call    #setadr           ' adresse setzen
              mov     temp1,  ina         ' port einlesen
              and     temp1,  #$ff        ' daten ausmaskieren
eRam0
'              mov     outa,   _s1          ' bus wieder inaktiv
              andn    outa,  _s1          ' bus wieder inaktiv
eRamWB_ret
eRamRB_ret    ret
'---------------------------------------------------------------------
setadr ' adresse verarbeiten   hwt-adresse --> latch
              mov     temp3,  temp2       ' adresse holen
              shr     temp3,  #$3          ' adresse für latch zurechtschieben
              and     temp3,  _latch      ' latchbits ausmaskieren
              or      outa,   temp3        ' adresse für latch an ports setzen
              xor     outa,   _al          ' wert in latch übernehmen
              xor     outa,   _al          ' wert in latch übernehmen
              mov     temp3,  temp2       ' adresse holen
              shl     temp3,  #$8          ' adresse zurechtschieben
              and     temp3,  _adr        ' adresse ausmaskieren
              or      outa,   temp3        ' adresse an ports setzen
              xor     outa,   _ram1        ' rambank 1 selektieren
setadr_ret    ret
Leider ziggt mein Programm noch rum ich muss irgendwie rausfinden worann das liegt.
Ich habe 2 varianten die 1. schreibt ab 7000 das Progamm in den hRAM und startet dann die Runtime(geht).
Die 2. schreibt in den externen Ram startet Runtime die läd das Programm vom externen Ram in den hRAM.

:?: Ist der hRAM ab $0 überhaupt nutzbar oder gibt es da Probleme weil das Programm auch erst ab $20 beginnt :?:
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: HBasic

Beitrag von drohne235 »

Was ich so beim überfliegen sehe:

Die beiden OR-Befehle in Verbindung mit DIRA funktionieren nicht korrekt. Das

or dira, dinp

wird nicht die unteren acht Bits für den Datenbus in DIRA rücksetzen.


Die Änderung

andn outa, _s1

funktioniert auch nicht korrekt. Wenn ich das recht sehe, sieht das so aus:

Code: Alles auswählen


'                  +------------------------------- /hs
'                  |+------------------------------ /wr
'                  ||+----------------------------- busclk
'                  |||+---------------------------- hbeat
'                  |||| +-------------------------- al
'                  |||| |+------------------------- /bel
'                  |||| ||+------------------------ /adm
'                  |||| |||+----------------------- /ram2
'                  |||| ||||+---------------------- /ram1
'                  |||| |||||           +---------- a0..10
'                  |||| |||||           |
'                  |||| |||||           |        +- d0..7
'                  |||| |||||+----------+ +------+
store   long  %00000100_00001aaa_aaaaaaaa_dddddddd  ' a: adr, d: daten
_s1_not long  %11111011_10000111_11111111_11111111  ' not _s1

and     long  %00000000_00000aaa_aaaaaaaa_dddddddd  ' store and _s1
Store ist dabei der Wert von outa unmittelbar vor dem andn-Befehl in eRamWB. Ich denke da mußt du die Sache anders angehen.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

Habe mal deine Routine aus m genommen

Code: Alles auswählen

' Load Programm vom externen Ram
              mov       temp2, h00007f00   '###### Nur zu testzwecke Adr $7F00 #######################################
              mov       arg2,  temp2
              mov       arg1,  h000000FF  '###### Nur zu testzwecke Adr $7F00 #######################################
INIT1         call      #eRamRB
              wrbyte    temp1, arg2
              add       arg2,  #$1
              djnz      temp2, #INIT1 wz
' ---------------------------------------------------------------------
...


'---------------------------------------------------------------------
' eRam
'
' temp1     Daten
' temp2     Adresse
' temp3     temp
'---------------------------------------------------------------------
eRamWB ' byte schreiben
              mov     dira,  dout         ' bus auf ausgabe schalten
              call    #setadr           ' adresse setzen
              and     temp1, #$ff
              or      outa,  temp1        ' wert an ports setzen
              xor     outa,  _bwr         ' schreibsignal aktiv
              mov     dira,  dinp         ' bus auf eingabe schalten
              mov     outa,  _s1          ' bus wieder inaktiv
              andn    outa,  _s1          ' bus wieder inaktiv
eRamWB_ret    ret
'---------------------------------------------------------------------
eRamRB ' byte lesen
              call    #setadr           ' adresse setzen
              mov     temp1,  ina         ' port einlesen
              and     temp1,  #$ff        ' daten ausmaskieren
              mov     outa,   _s1          ' bus wieder inaktiv
eRamRB_ret    ret
'---------------------------------------------------------------------
setadr ' adresse verarbeiten   hwt-adresse --> latch
              mov     temp3,  temp2       ' adresse holen
              shr     temp3,  #$3          ' adresse für latch zurechtschieben
              and     temp3,  _latch      ' latchbits ausmaskieren
              or      outa,   temp3        ' adresse für latch an ports setzen
              xor     outa,   _al          ' wert in latch übernehmen
              xor     outa,   _al          ' wert in latch übernehmen
              mov     temp3,  temp2       ' adresse holen
              shl     temp3,  #$8          ' adresse zurechtschieben
              and     temp3,  _adr        ' adresse ausmaskieren
              or      outa,   temp3        ' adresse an ports setzen
              xor     outa,   _ram1        ' rambank 1 selektieren
setadr_ret    ret
'---------------------------------------------------------------------
'Konstanten
rtnr      long    $00000000     'dient zum identifizieren der verschiedenen Runtimemodule
h00000000 long    $00000000     '0
h00000001 long    $00000001     ' STOP-Statusmeldung
h00007f00 long    $000007f00
'h00000004 long    $00000004
'h00000006 long    $00000006
h000000ff long    $000000FF     '8 bit Lowmaske
h0000ffff long    $0000FFFF     '16 bit Lowmaske
dinp      long    %00000111_11111111_11111111_00000000  ' bus input
dout      long    %00000111_11111111_11111111_11111111  ' bus output
_s1       long    %00000100_01111000_00000000_00000000  ' bus inaktiv
_b1       long    %00000000_00111000_00000000_00000000  ' adm=1, bel=0, wr=0, busclk=0
_b2       long    %00000010_00111000_00000000_00000000  ' adm=1, bel=0, wr=0, busclk=1
_b3       long    %00000110_00111000_00000000_00000000  ' adm=1, bel=0, wr=1, busclk=1
_a1       long    %00000000_01011000_00000000_00000000  ' adm=0, bel=1, wr=0, busclk=0
_a2       long    %00000010_01011000_00000000_00000000  ' adm=0, bel=1, wr=0, busclk=1
_a3       long    %00000110_01011000_00000000_00000000  ' adm=0, bel=1, wr=1, busclk=1
_hs       long    %00001000_00000000_00000000_00000000  ' hs=1?

_al       long    %00000000_10000000_00000000_00000000  ' /al bitmaske
_bwr      long    %00000100_00000000_00000000_00000000  ' /wr bitmaske
_ram1     long    %00000000_00001000_00000000_00000000  ' /ram1 bitmaske
_ram2     long    %00000000_00010000_00000000_00000000  ' /ram2 bitmaske
_latch    long    %00000000_00000000_11111111_00000000  ' latch bitmaske
_adr      long    %00000000_00000111_11111111_00000000  ' adrbus bistmaske
'---------------------------------------------------------------------
h7F7FF7F7 long    $7F7FF7F7     '32 bitmaske für LOAD SYSTEM von externen Ram (STATUS)
'---------------------------------------------------------------------
'Variabeln
sprvm     long 0                'Merker Bytecode SPRVM
stat      long $7FFC             'Zeiger auf Statusregister
areg      long $7FF8            'Zeiger auf token im hRAM
line      long 0                'Merker line Nummer
code      long 0                'Tockencode
arg1      long 0                'Tokenargument 1
arg23     long 0                'Longargument
arg2      long 0                'Tokenargument 2
arg3      long 0                'Tokenargument 3
temp1     long 0                'Merker
temp2     long 0                'Merker
temp3     long 0                'Merker
              fit   $1F0
Leider geht das auch nicht.

Gibt es einen unterschied bei der Adressierung einer speicherzelle des externen Ram's in "reg-ios(SPIN)" und "m(PASM)"

Ich habe den Code in spin im externenRam geschrieben und gelesen und in hRAM eingetragen und die Runtime lief.

Danach habe ich eine weitere leseroutine in der Runtime eingebaut (überscheibt die vorher in SPIN geschriebenen Daten) und die Runtime lief nicht.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: HBasic

Beitrag von drohne235 »

TriOS/ios verwaltet im eRAM eine Ramdisk ab Adresse $0 - vielleicht kommt sich das ins Gehege. Die ios-Routinen kann man im usrmod oder sysmod aufrufen. Schau dir mal den CON-Block vor den Routinen im ios an, dort steht eine kleine Beschreibung. Weiß ja nicht welchen Modus du verwendest bei den Spin-Routinen.

1. sysmod - Hier entspricht die Adresse 0 auch der wirklichen physischen Adresse 0.
2. usrmod - Hier entspricht die Adresse 0 dem Wert von "rbas" - ist also virtuell.
Falls du unter TriOS arbeitest, kannst du mit dem Tool "eram" in den externen Speicher schauen - aber wie gesagt: TriOS & ios schreiben schon Sachen ab $0 in den eRAM, zum Beispiel bei ios.start wird dort mit rd_init die Ramdisk initialisiert.

Ansonsten bietet es sich an, einen PASM-Debugger zu verwenden und im Einzelschritt zu schauen, was genau in deiner COG abläuft. Ich hab damals den BMADebugger verwendet:

http://forums.parallax.com/showthread.p ... -Available

Da kannst du gut im Einzelschritt arbeiten, den h oder cRAM dumpen usw.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Antworten