Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
elektronik:u883:mpbasicerw [2021/08/08 13:33] – angelegt volkerpelektronik:u883:mpbasicerw [2022/08/04 06:39] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden volkerp
Zeile 2: Zeile 2:
  
 MPBASIC kann um neue Prozeduren/Funktionen erweitert werden.  MPBASIC kann um neue Prozeduren/Funktionen erweitert werden. 
 +s. [[elektronik:u883:mpbasic|]], Prozedurtabelle. 2021 habe ich mich mit dieser Thematik beschäftigt (-> [[tiny:software:baserw40|Tiny, BASIC-Erweiterung]]). 
  
-Beispiel1:+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 Ausgabeparameter, wird dieser in RR2 zurückgegeben. 
 + 
 +Prozeduren mit mehr Parametern s. Beispiel2. 
 + 
 +**Beispiel1**:
  
 simple Prozedur CLS, simple Funktion LET (nicht mit dem Kommando LET verwechseln!) simple Prozedur CLS, simple Funktion LET (nicht mit dem Kommando LET verwechseln!)
Zeile 22: Zeile 30:
       42/    8017 : AF                  ret       42/    8017 : AF                  ret
 </code> </code>
 +
 +Der Hex-Code ist im Speicher an %8000 abzulegen.
  
 Nutzung in BASIC Nutzung in BASIC
Zeile 48: Zeile 58:
 Zeile 40 demonstriert den Aufruf der Funktion "LET" via PROC. Es passiert dasselbe wie bei LET A=B. Zeile 40 demonstriert den Aufruf der Funktion "LET" via PROC. Es passiert dasselbe wie bei LET A=B.
 Zeile 50 kopiert den Wert aus A in eine temporäre Variable, und diese wird ausgegeben. Es passiert also dasselbe wie bei PRINT A. Zeile 50 kopiert den Wert aus A in eine temporäre Variable, und diese wird ausgegeben. Es passiert also dasselbe wie bei PRINT A.
 +
 +
 +**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.
  
  • elektronik/u883/mpbasicerw.1628429628.txt.gz
  • Zuletzt geändert: 2021/08/08 13:33
  • von volkerp