Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung |
elektronik:u883:mpbasicerw [2021/08/08 13:37] – volkerp | elektronik:u883:mpbasicerw [2022/08/04 06:39] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden volkerp |
---|
| |
MPBASIC kann um neue Prozeduren/Funktionen erweitert werden. | MPBASIC kann um neue Prozeduren/Funktionen erweitert werden. |
s. [[elektronik:u883:mpbasic|]], Prozedurtabelle. | s. [[elektronik:u883:mpbasic|]], Prozedurtabelle. 2021 habe ich mich mit dieser Thematik beschäftigt (-> [[tiny:software:baserw40|Tiny, BASIC-Erweiterung]]). |
| |
| Erstaunlicherweise sind in der Literatur jedoch keine Beispiele zu finden. Auch Informationen, welche Register nutzbar sind, fehlen. Teilweise stehen auch falsche oder fehlerhafte Angaben in der Literatur. |
| |
Hat die Funktion nur einen Eingabeparameter, wird dieser in RR4 übergeben.\\ | Hat die Funktion nur einen Eingabeparameter, wird dieser in RR4 übergeben.\\ |
| |
**Beispiel2**: mehr Parameter | **Beispiel2**: mehr Parameter |
| |
| Drei Ein- und drei Ausgabeparameter. Die Eingabeparameter werden den Ausgabeparametern zugewiesen (3faches LET). |
| |
| <code> |
| 109/ 801F : ;----------------------------------------------------------------------------- |
| 110/ 801F : ; Beispiel 3 Ein- und Ausgabeparameter PROC [Y1,Y2,Y3] = para [X1,X2,X3] |
| 111/ 801F : ; in X1, X2 auf Stack, RR4 = X3 |
| 112/ 801F : ; out Y1, Y2 auf Stack, RR2 = Y3 |
| 113/ 801F : ; SP returnadr. |
| 114/ 801F : ; SP+2 Parameter X2 |
| 115/ 801F : ; SP+4 Parameter X1 |
| 116/ 801F : ; SP+6 (intern f. interpreter) |
| 117/ 801F : ; SP+8 Platz f. Ergebnisvariable Y1 |
| 118/ 801F : ; SP+10 Platz f. Ergebnisvariable Y2 |
| 119/ 801F : ; Beim Ende muss der SP auf (intern f. interpreter) zeigen |
| 121/ 801F : ;----------------------------------------------------------------------------- |
| 122/ 801F : |
| 123/ 801F : 50 E2 f_let3: pop R2 ; RR2 Rückkehradresse zum Interpreter |
| 124/ 8021 : 50 E3 pop R3 |
| 125/ 8023 : 50 E6 pop R6 ; RR6 Adresse von X2 |
| 126/ 8025 : 50 E7 pop R7 |
| 127/ 8027 : 50 E8 pop R8 ; RR8 Adresse von X1 |
| 128/ 8029 : 50 E9 pop R9 |
| 129/ 802B : ;... |
| 130/ 802B : A8 FE ld R10,gpr ; stack |
| 131/ 802D : B8 FF ld R11,gpr+1 |
| 132/ 802F : 70 E3 push R3 ; Ret-Adr. wieder auf Stack |
| 133/ 8031 : 70 E2 push R2 |
| 134/ 8033 : A0 EA incw RR10 ; (intern) übergehen |
| 135/ 8035 : A0 EA incw RR10 |
| 136/ 8037 : 92 8A lde @RR10,R8 ; Y1 := X1 |
| 137/ 8039 : A0 EA incw RR10 |
| 138/ 803B : 92 9A lde @RR10,R9 |
| 139/ 803D : A0 EA incw RR10 |
| 140/ 803F : 92 6A lde @RR10,R6 ; Y2 := X2 |
| 141/ 8041 : A0 EA incw RR10 |
| 142/ 8043 : 92 7A lde @RR10,R7 |
| 143/ 8045 : 28 E4 ld R2,R4 ; Y3 := X3 |
| 144/ 8047 : 38 E5 ld R3,R5 |
| 145/ 8049 : AF ret |
| 1</code> |
| |
| Nutzung in BASIC |
| |
| <code> |
| 1 PROC SETRR[8,%8000];REM Erweiterung einbinden |
| 90 PROC[A,B,C]=LET3[%111,%222,%333] |
| 100 PRINTHEX A,B,C |
| |
| ES4.0: |
| 1OSETRR[8,%8000] |
| 90O[A,B,C]=LET3[%111,%222,%333] |
| 100HA,B,C |
| 9999E |
| </code> |
| |
Parameterübergabe s. [[elektronik:u883:mpbasic|]], Übergabe der Parameter. | Parameterübergabe s. [[elektronik:u883:mpbasic|]], Übergabe der Parameter. |
| |