Erstmal muß ich die Runtime umbauen.
z.Z. verwende ich noch ein jmp für die Berechnung des Sprungverteilers das wird auf ein call umgestellt.
Der Rücksprung ist dann natürlich ein ret.
Das gibt mir die möglichkeit die Eigenen routinen in der Runtime mehrfach zu verwenden.
z.B. Laden des Bellatrixcodes.
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
Ein Thema beschäftigt mich immer noch:
wie sag ich Bellatrix und Administra das das gerade übertragene Byte das 1. byt von einer Bytfolge ist.?
ich dachte da das beim 1. Byte das /cs Signal bei clk aktiv ist und bei den nachvolgenden nicht sondern nur das clk signal wechselt.
/wr und /hs werden dabei normal weiter bedient.
in Regnatix kommt nur eine weitere Sende-Routine hinein.
in Administra und Bellatrix eine Empfangs-Routine hinzu.
das dürfte keine große mühe machen.
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
Das ist nicht r48 sondern r50 da wurde ein Befehl "zum laden eines neuen Treibers für Bellatrix" verschoben
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
leider scheind die PASM-PASM Kopplung nicht richtig zu arbeiten mal sehen woran das liegt.(es fehlt die letzte Zeile)
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
'---------------------------------------------------------------------
' +- /hs
' |+- /wr
' ||+- busclk
' |||+- hbeat
' |||| +- al
' |||| |+- /bel
' |||| ||+- /adm
' |||| |||+- /ram2
' |||| ||||+- /ram1
' |||| ||||| +-a0..10
' |||| ||||| |
' |||| ||||| | +- d0..7
' |||| |||||+-- -------+ +------+
'port long %00000000_00000aaa_aaaaaaaa_dddddddd ' a: adr, d: daten'Konstanten
_csb long %00000000_01000000_00000000_00000000 ' cs=1 Bellatrix
_csa long %00000000_00100000_00000000_00000000 ' cs=1 Administra
_hs long %00001000_00000000_00000000_00000000 ' hs=1
bput
and temp1, #$FF ' Daten Formatieren
waitpeq _hs, _hs ' warten bis hs=1
or dira, #$FF ' P00-P07 auf ausgabe schalten
or outa, temp1 ' Daten ausgeben
andn outa, _csb ' CS an Bellatrix
waitpeq h00000000, _hs ' warten bis hs=0
or outa, _csb ' CS an Bellatrix deaktivieren
waitpeq _hs, _hs ' warten bis hs=1
andn dira, #$FF ' P00-P07 auf eingabe schalten
bput_ret ret
' ---------------------------------------------------------------------
Richtig der busclk ist seiner Aufgabe entbunden.
Möglich wird das weil nur Regnatix die /cs signale setzt.
Als nächstes ist der HVGA-Treiber tran.
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
' hbeat --------+
' clk -------+|
' /wr ------+||
' /hs -----+||| +------------------------- /cs
' |||| | -------- d0..d7
'port long %00000000_00000000_00000000_dddddddd ' a: adr, d: daten'Konstanten
_cs long %00000000_10000000_00000000_00000000
_hs long %00001000_00000000_00000000_00000000
rbus 'ein byte vom bus lesen
waitpeq h00000000, _cs ' cs = 0
mov temp1, ina ' Daten einlesen
andn outa, _hs ' Daten quittieren
and temp1, #$FF ' Daten formatieren
waitpeq _cs, _cs ' cs = 1
or outa, _hs ' Daten quittieren
rbus_ret ret
Jetzt nur noch Testen.
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
Bellatrix mit M1 erkennung.
Sollte der zu erwartende 1. Befehl kein M1 sein bleibt der Bus stehen und mit einem LED-Testbord kann der aktuelle Byte auf dem Bus angesehen werden.
' hbeat --------+
' M1 clk -------+|
' /wr ------+||
' /hs -----+||| +------------------------- /cs
' |||| | -------- d0..d7
'port long %00000000_00000000_00000000_dddddddd ' a: adr, d: daten'Konstanten
_cs1 long %00000010_10000000_00000000_00000000
_cs long %00000000_10000000_00000000_00000000
_hs long %00001000_00000000_00000000_00000000
_cs1 'erstes byte vom bus lesen
waitpeq h00000000, _cs1 ' cs = 0 & clk = 0
jmp #_cs01
rbus 'ein byte vom bus lesen
_cs
waitpeq h00000000, _cs ' cs = 0
_cs01 mov temp1, ina ' Daten einlesen
andn outa, _hs ' Daten quittieren
and temp1, #$FF ' Daten formatieren
waitpeq _cs, _cs ' cs = 1
or outa, _hs ' Daten quittieren
rbus_ret ret
drohne235 währe so etwas was für TRIOS & FORTH ?
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
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 hat geschrieben:Erstmal muß ich die Runtime umbauen.
z.Z. verwende ich noch ein jmp für die Berechnung des Sprungverteilers das wird auf ein call umgestellt.
Das geht nicht weil ich nur ein Call habe aber mehrere ret.
Jetzt binn ich beim jmpret angekommen.
jumpret arg1, arg2
arg2 ist das ziel wo hingesprungen wird das ist schon klar (Zelle oder Marke)
arg1 ist die rückkehr adresse (wenn ich richtig gelesen habe wird diese beim jumpret gesetzt? stimmt das so?)
besser währe wenn ich arg1 selber bestimmen kann (Zelle oder Marke).
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 hat geschrieben:besser währe wenn ich arg1 selber bestimmen kann (Zelle oder Marke).
Kannst Du ja auch. jmpret a, [#]b macht zwei dinge, movs a, #$+1 und jmp [#]b. Der Assembler transformiert ein call #label auch nur in ein jmpret label_ret, #label damit ret funktioniert.