HBasic
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: HBasic
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.
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
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
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: HBasic
Die Routinen im HauptCOG
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.
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
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.

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
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
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: HBasic
OK die Ausgabe geht z.Z. wird das Programm noch vom Spinninterpreter in den hRam geschrieben.
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
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
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: HBasic
Code: Alles auswählen
04FC(0132) | There are 190 ($0BE) Longs left in the cog
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

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
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
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: HBasic
Anscheinend doch nicht
Schreibt den Code in den externen RAM
List den Code vom externen RAM und schreibt ihn in den hRAM (1:1 Copie ab adresse 0)
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)
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
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
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: HBasic
Code: Alles auswählen
mov outa, _s1 ' bus wieder inaktiv
z.B. serieller Anschluss.
Code: Alles auswählen
andn outa, _s1 ' bus wieder inaktiv
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
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
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: HBasic
drohne235 kannst du mal schaun ob das Richtig ist.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 
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
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.


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
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
- drohne235
- Administrator
- Beiträge: 2284
- Registriert: So 24. Mai 2009, 10:35
- Wohnort: Lutherstadt Wittenberg
- Kontaktdaten:
Re: HBasic
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:
Store ist dabei der Wert von outa unmittelbar vor dem andn-Befehl in eRamWB. Ich denke da mußt du die Sache anders angehen.
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
"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
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: HBasic
Habe mal deine Routine aus m genommen
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.
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
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
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
- drohne235
- Administrator
- Beiträge: 2284
- Registriert: So 24. Mai 2009, 10:35
- Wohnort: Lutherstadt Wittenberg
- Kontaktdaten:
Re: HBasic
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.
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.
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.
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.
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