Hallo jörg!
Das ist ja Super , diese Info hätte ich vor einer Woche gebraucht.
Aber es ging auch so.
In meinem neuen Treiber p5drivi2c.s19 mußte ich auf den LED_DRIVE
verzichten. ( wegen Platzmangel)
Ich hatte nur noch 7 Byte frei.
Gibt es eine Möglichkeit in BASIC , auf der Erweiterungsplatine die 8 LED anzusteuern?
Hallo Jan-Peter,
muss jetzt leider weg,
aber LED_DRIVE und SYSTEM sind fast gleich, und ausserdem müsstest du eigentlich jede Menge assembler aus den originaltreibern rausnehmen können, hab die Teile im Posting markiert, aber noch nicht probiert (oder hast du die schon raus und getestet?).
Und vielen Dank für die Treiber; bin gespannt!
Hallo JanPeter,
bin doch noch nicht weg, und hab mir's angeschaut.
Du hast doch SYSTEM drin, dann sollte LED_DRIVE auch gehen: Beide kopieren einfach alle bits aus dem cache rüber, unterschied ist nur ein index-wert von 2, und 5 bytes länger (wenn ich mich nicht verzählt hab).
So siehts im p5driv12 aus:
; ---------------------------------------------------------------------------
; SYSTEM: copy EXTPORT to external port
;
; read : a,x
; write: a,x,$1(%00000101)
;
; called from $01e6,$01ee,$01f2
; ---------------------------------------------------------------------------
01c7 : 5f clrx ; clear index register
01c8 2002 bra $01cc ; branch always to $01cc
; ---------------------------------------------------------------------------
; CCRP5-BE only: LED_DRIVE: show LEDs on BE
;
; read : a,x
; write: a,x,$1(%00000101)
;
; never called
; ---------------------------------------------------------------------------
01ca : ae02 ldx #$02 ; load index register with value #$02
01cc : a608 lda #$08 ; load accumulator with value #$08
01ce : 69a4 rol $a4,x ; rotate left through carry at $a4 + x-reg.
01d0 1101 bclr #0,$01 ; clear bit #0 at memory address $01
01d2 2402 bhs $01d6 ; branch if accu is higher or same (C clear)
01d4 1001 bset #0,$01 ; set bit #0 at memory address $01
01d6 : 1501 bclr #2,$01 ; clear bit #2 at memory address $01
01d8 1401 bset #2,$01 ; set bit #2 at memory address $01
01da 4a deca ; decrement accumulator
01db 26f1 bne $01ce ; branch if not equal (Z is clear)
01dd 69a4 rol $a4,x ; rotate left through carry at $a4 + x-reg.
01df 81 rts ; return from subroutine
Hallo JanPeter,
stimmt schon, aber: stimmt schon.
Wenn du den p5driv genommen hast, dann müsste SYSTEM auf 01c9 beginnen, wie in meinem dis-assembly. Im p5driv12 beginnt LED_DRIVE auf 01CA, und gleicht dem alten SYSTEM ab 01cc. Hauptunterschied ist der Zugriff auf die bits, nämlich alt: "rol $a4" und neu "rol $a4, x", also indiziert über das x-reg. Im neuen SYSTEM wird der Inhalt von x jetzt auf "0" gesetzt (damit wird $a4 = EXTPORT übertragen), und im LED_DRIVE ist x = "2" (damit wird $a4 + 2 = $a6 = LEDPORT übertragen).
Wenn du mir deinen p5-i2c asm source schickst, kann ich dir's reinbasteln.
Hallo jörg!
Ich kann Dir noch nicht den p5drivi2c.s19 in asm souce schicken.
Da ich nicht mit Assembler gearbeitet habe.
Ich habe den Treiber mit einem Textprogramm geschrieben. Also die .S19 Datei geändert.
Habe alles nur auf Papier.
Aber ich kann Dir schreiben was ich gemacht habe.
COMNAV-STATUS nach 013B verschoben
Ab 014A bis Ende bleibt alles beim alten
Ab 0101 bis 0133 I2C-Routine ( hatte ich oben im Beitrag :“Hier mal ein kürzerer Treiber für I2C“ reingestellt)
Änderung 0105 und 0112 auf A7 (Variable adressei2c)
010A und 011B auf A8 (Variable dateni2c)
0134 bis 013a NOP (7 Byte frei)
Hallo JanPeter:
OHA -- Das ist schon heftig, wenn man alles per Hand ausrechnen muss!
Ich hab Dir eine kleine Anleitung geschrieben, was Du machen könntest, habs aber nicht ausprobiert.
Viel Spass dabei!
Lesezeichen