Micro-Forth

Hier können Sie Hilfe erhalten.
Antworten
Didi
Beiträge: 9
Registriert: Mi 28. Nov 2012, 16:08

Micro-Forth

Beitrag von Didi » Mo 17. Dez 2012, 11:53

Hallo zusammen!

Ich bin neu hier und möchte mich kurz vorstellen. Mein Name ist Dieter. Berufsmäßig beschäftige ich mich vorrangig mit Step7.
Mein Hobby ist die Elektronikbastelei und Programmierung. So traf ich vor ca. 4 Wochen auf das Micro-Forth von Herrn Heinrichs.
Forth hatte mich schon vor 30 Jahren interessiert, insofern da ich meine damalige Ingenieursarbeit mit einem Forthcompiler auf
dem KC85 geschrieben hatte (forth war (ist) faszinierend) :D .

Also Micro-Forth runterladen und testen. Leider hatte ich keinen Tiny2313 zur Hand. Nun dann nehme ich einen tiny13, müsste
doch auch gehen. Kuzerhand ein Blinkprogramm geschrieben; : Main InitPortB begin 1 250 blink 0 until end ;
Hex Datei in Tiny13 laden, Und siehe da, es blinkt :lol: .
Ich dachte mir, das schaust du dir mal genauer an. Hex Datei reassembliert und in das AVR Studio geladen. Sauber ausgedacht, die
Forthworte als Unterprogramme zu kompilieren (respekt!). Ich testete noch ein paar andere Worte, und wie es so ist, findet man natürlich auch gleich Fehler (da kam ein Wanderer des Weges....) :( Wohl gemerkt, ich möchte nicht als Besserwisser
erscheinen, vielmehr möchte ich helfen, dieses kleine leistungsfähige Forth weiter zu entwickeln! Vielleicht gibt es auch noch andere Interessenten (würde mich freuen).
In meinem nächsten Beitrag werde ich auf die Sachen eingehen, die mir aufgefallen sind. Ich werde ein kleines Projekt vorstellen,
was die Arbeit meiner Frau in der Küche erleichtert :lol: (nebenbei auch mir, wenn ich den Flaschenöffner im dunkeln suche).


Nein Spass bei seite. Einge neue Forthworte (z.B. LEAVE, BEGIN WHILE REPEAT, C!, C@ und was mir sonst noch einfällt) werden auch dabei sein.

Eine Frage hätte ich noch, kann man das AtinyBoard mit Tiny2313 kaufen?

Ansonsten wünsche ich allen ein Frohes Weihnachtsfest und einen guten Rutsch ins Neue Jahr.

Didi

Heinrichs
Beiträge: 185
Registriert: Do 21. Okt 2010, 18:31

Re: Micro-Forth

Beitrag von Heinrichs » Do 20. Dez 2012, 18:01

Ja, die Attiny-Platine kann man kaufen. Näheres zur Platine erfährt man auf meiner Homepage https://www.g-heinrichs.de. Bei Kaufinteresse bitte einfach eine Email schicken.

Didi
Beiträge: 9
Registriert: Mi 28. Nov 2012, 16:08

Re: Micro-Forth

Beitrag von Didi » Sa 5. Jan 2013, 17:45

Hallo,
Heute möchte ich ein paar Dinge darlegen, die bei den ersten Tests von micro-forth aufgefallen sind.

1. bei der Multiplikation bleibt ein Wert zu viel auf dem Stack, lässt sich durch SWAP DROP schnell bereinigen

2. es ist ungünstig die Variablen in den EEprom zu legen, bei vielen Zugriffen ist der EEprom bald hin.
ich schlge vor die Variablen etwa in die Mitte des SRAM zu legen C! ( w v -- )speichert Wert in einer Variablen(v)im SRAM [120 + >sram]
das Gegenstück wäre dann C@ ( v -- w ) holt den Wert(w) einer Variablen(v)aus dem SRAM [120 + sram>]

3. wenn man z.B. längere Zeitschleifen mit Do Loop programmiert und man möchte (muß) sie vorzeitig verlassen bietet sich LEAVE an
CODE:
; Do .... f Leave .... Loop
;LEAVE (f -- ) setzt den Schleifenindex bei f=1 auf Max
; sodass die DO LOOP beim nächsten DO verlassen wird
L001B:
ldi r17,k00
ld r16,-X
cp r16,r17 ;Vergleich ob Bedingung falsch ist
breq L0028
; -----
pop r20
pop r21
pop r18
pop r19
mov r18,r19 ;Schleifenindex auf Max setzen
push r19
push r18
push r21
push r20
L0028:
ret

4. eine BEGIN f WHILE REPEAT Schleife könnte so aussehenm Schleife wird solange ausgeführt wie f= wahr ist
CODE:

;BEGIN
pop r16
pop r17
push r17
push r16
push r17
push r16
ret
;----------------------*

;WHILE
ldi r17,k01
ld r16,-X
cp r16,r17 ;Vergleich ob Bedingung wahr ist
brne L0027
; -----
ret
L0027:
pop r21 ;Verlass die Schleife
pop r20
pop r21
pop r20
ret
;----------------------*

;REPEAT
pop r20
pop r21
pop r31
pop r30
push r30
push r31
ijmp ; Springe hinter while
; -----------
ret
;----------------------*

5. wenn mit Interrupts gearbeitet wird ist es notwendig das SREG zu retten
PUSHREG und POPREG könnten so aussehen

CODE:
; PUSHREG

mov r2,r16
mov r3,r17
mov r4,r18
pop r17 ;Returnadresse holen
pop r18
in r16,p3F ;SREG holen und retten
push r16
push r18 ;Returnadresse wiederherstellen
push r17
mov r5,r19
mov r6,r20
mov r7,r21
mov r8,r22
mov r9,r23
mov r10,r24
mov r11,r25
mov r12,r26
mov r13,r27
mov r14,r28
mov r15,r29
ret
;----------------------*
; POPREG

pop r17 ;Returnadresse holen
pop r18
pop r16 ;SREG wiederherstellen
out p3F,r16
push r18 ;Returnadresse wiederherstellen
push r17
mov r16,r2
mov r17,r3
mov r18,r4
mov r19,r5
mov r20,r6
mov r21,r7
mov r22,r8
mov r23,r9
mov r24,r10
mov r25,r11
mov r26,r12
mov r27,r13
mov r28,r14
mov r29,r15
ret
So das wäre es erst mal für heute bb

Didi
Beiträge: 9
Registriert: Mi 28. Nov 2012, 16:08

Re: Micro-Forth

Beitrag von Didi » Sa 5. Jan 2013, 19:50

Eins habe ich noch vergessen,

Warum werden die Interruptvektoren wie z.B. Analogcomp nicht eingetragen, so kann man nie den Bootloader nutzen, Man muss immer den Weg über Reassembler und AVR-Studio gehen (Vektor mit hand eintragen)?

Heinrichs
Beiträge: 185
Registriert: Do 21. Okt 2010, 18:31

Re: Micro-Forth

Beitrag von Heinrichs » Mo 14. Jan 2013, 16:29

Hallo Didi,

vielen Dank für die guten Hinweise und Anregungen. Den Fehler mit der Multiplikation habe ich in der aktuellen Vokabular-Datei schon verbessert.

Es wäre schön, wenn Du allen Usern dieses Forums Deine Vokabular-Datei mit den ergänzten Befehlen (ohne die anwendungsspezifischen Befehle) zur Verfügung stellen könntest.

Danke schon einmal im voraus :)

Antworten