Screenshot 1 Screenshot 2 Screenshot 3
03c0 16bf 0000 B ... ABLEI
Monitoraufrufe:
C4DA: hier wird irgendwo ins ROM-BASIC gesprungen
Verwendete IO-Ports bzw. Hardware:
keine []
Dieses Programm erwartet ein ROM-BASIC, bzw die Startaddresse wird als 0x03C0 angenommen. Später wird mit CALL*40A (und dort CALL 0C4DAH) eine Maschinensprachroutine aufgerufen.
Zeichensatz UTF-8+Z1013()+CTRL()-ohne Umlaute(äöüß)

    0 REMB!b!G># :# ####(~#>  Copyright H.Voelz Dez.1987
   10 CLEAR 5000:WINDOW:CLS
   20 DEF FN A(X)=2*2^X                                                                                     
   30 DEF FN B(X)=2*2^X*(LN(2))                                                                              
   40 M=30:DIM F$(M),FS$(M),FU$(M),FV$(M),F1$(M),O(M)
   50 Z$="+-*/":READ FZ:DIM X$(FZ),XS$(FZ),L(FZ)
   60 FOR I=1 TO FZ:READ X$(I),XS$(I):L(I)=LEN(X$(I)):NEXT:GOTO 1190
   70 Z=0:F$(0)="":POKE 1032,65:INPUT "f(x) =";F$(0):CALL*40A:GOSUB 110:POKE 1030,1
   75 LF$=F$(0)
   80 POKE 1031,1:PRINT "f'(x)= "FS$(0):IF LEN(FS$(0))>65 THEN POKE 1031,2:RETURN
   90 FOR I=1 TO LEN(FS$(0)):POKE 865+I,ASC(MID$(FS$(0),I,1)):NEXT
  100 POKE 865+I,0:POKE 1032,66:CALL*40A:RETURN
  110 F$=F$(Z):S$=F$:GOSUB 1010
  120 IF P=L THEN 990:ELSE IF P=1 AND O>2 THEN 990
  130 IF P=0 THEN 760
  140! u,v
  150 O(Z)=O:FU$(Z)=LEFT$(F$,P-1):FV$(Z)=MID$(F$,P+1)
  160 Z=Z+1:F$(Z)=FU$(Z-1):GOSUB 110:F1$(Z-1)=FS$(Z)
  170 F$(Z)=FV$(Z-1):GOSUB 110:Z=Z-1
  180 FU$=FU$(Z):FV$=FV$(Z):F1$=F1$(Z):F2$=FS$(Z+1):O=O(Z)
  190 ON O GOTO 210,210,260,260,450
  200! u+v
  210 IF F1$<>"0"AND F2$<>"0"THEN FS$(Z)=F1$+MID$(Z$,O,1)+F2$:RETURN
  220 IF F1$<>"0"THEN FS$(Z)=F1$:RETURN
  230 IF F2$<>"0"THEN FS$(Z)=MID$(Z$,2,O-1)+F2$:RETURN
  240 FS$(Z)="0":RETURN
  250! u*v
  260 IF F1$="0"THEN T=0:FS$=F1$:GOTO 310
  270 T=1:IF F1$="1"THEN FS$=FV$:GOTO 310
  280 S$=F1$:GOSUB 1010:IF O<3 THEN F1$="("+F1$+")"
  290 FF$=FV$:S$=FF$:GOSUB 1010:IF O<3 THEN FF$="("+FF$+")"
  300 FS$=F1$+"*"+FF$
  310 IF F2$="0"THEN 390
  320 FF$=F1$:S$=F1$:GOSUB 1010:IF O<3 THEN FF$="("+FF$+")"
  330 T=T+1
  340 FS$=MID$(FS$,1-(T=1))+MID$(Z$,O(Z)-2,1+((T=1)AND O(Z)=3))
  350 IF F2$="1"THEN FS$=FS$+FU$:GOTO 390
  360 S$=FU$:GOSUB 1010:IF O<3 THEN FU$="("+FU$+")"
  370 S$=F2$:GOSUB 1010:IF O<3 THEN F2$="("+F2$+")"
  380 FS$=FS$+FU$+"*"+F2$
  390 IF F2$="0"OR O(Z)=3 THEN 430
  400 IF T=2 THEN FS$="("+FS$+")"
  410 S$=FV$:GOSUB 1010:IF O<3 THEN FV$="("+FV$+")"
  420 FS$=FS$+"/"+FV$+"^2"
  430 FS$(Z)=FS$:RETURN
  440! u^v
  450 IF F2$<>"0"THEN 650
  460 IF F1$="0"THEN FS$(Z)=F1$:RETURN
  470 IF F1$="1"THEN FS$="":GOTO 500
  480 S$=F1$:GOSUB 1010:IF O<3 THEN F1$="("+F1$+")"
  490 FS$=F1$+"*"
  500 IF RIGHT$(FV$,1)=")"THEN FV$=LEFT$(FV$,LEN(FV$)-1)
  510 IF LEFT$(FV$,1)="("THEN FV$=MID$(FV$,2)
  515 IF FV$<>"1"THEN FS$=FV$+"*"+FS$
  520 S$=FV$:GOSUB 1110:IF N THEN F2=VAL(FV$)-1:ELSE 590
  530 F2$=STR$(F2):IF F2<0 THEN 610:ELSE F2$=MID$(F2$,2):GOTO 620
  590 F2$=FV$+"-1"
  610 F2$="("+F2$+")"
  620 IF F2$="1"THEN FS$(Z)=FS$+FU$:RETURN
  630 IF F2$="0"THEN FS$(Z)=FS$+"1":RETURN
  640 FS$(Z)=FS$+FU$+"^"+F2$:RETURN
  650 FF$=FU$
  660 S$=FF$:GOSUB 1010:IF O<3 THEN FF$="("+FF$+")"
  670 S$=F1$:GOSUB 1010:IF O<3 THEN F1$="("+F1$+")"
  680 S$=FV$:GOSUB 1010:IF O<3 THEN FV$="("+FV$+")"
  690 S$=F2$:GOSUB 1010:IF O<3 THEN F2$="("+F2$+")"
  700 FS$=F$(Z)+"*(":IF F1$<>"0"THEN FS$=FS$+F1$+"/"+FF$+"*"+FV$+"+"
  710 FS$=FS$+"LN":IF LEFT$(FU$,1)<>"("THEN FU$="("+FU$+")"
  720 FS$=FS$+FU$
  730 IF F2$="1"THEN FS$(Z)=FS$+")":RETURN
  740 FS$(Z)=FS$+"*"+F2$+")":RETURN
  750!F-Suche
  760 FOR I=1 TO FZ:IF LEFT$(F$,L(I))<>X$(I)THEN NEXT:GOTO 940
  770 II=I:I=FZ:NEXT:IF RIGHT$(F$,1)<>")"THEN 990
  780! u
  790 O(Z)=II
  800 Z=Z+1:F$(Z)=MID$(F$,L(II)+1,L-L(II)-1):GOSUB 110:Z=Z-1
  810 F$=F$(Z):FU$=F$(Z+1):F1$=FS$(Z+1)
  820 IF F1$="0"THEN FS$(Z)="0":RETURN
  830 S$=F1$:GOSUB 1010:IF O<3 THEN F1$="("+F1$+")"
  840 O=O(Z):IF O>10 THEN 900
  850!f'=u'*g(u)
  860 FS$=XS$(O)+FU$+")":IF F1$<>"1"THEN FS$=F1$+"*"+FS$
  870 IF O>5 THEN FS$=FS$+"^2"
  880 FS$(Z)=FS$:RETURN
  890!f'=u'/g(u)
  900 FS$=XS$(O)+FU$+")":FS$=F1$+"/"+FS$
  910 IF O<>19 THEN FS$=FS$+"2)"
  920 FS$(Z)=FS$:RETURN
  930! ([{< >}])
  940 IF LEFT$(F$,1)<>"("OR RIGHT$(F$,1)<>")"THEN 970
  950 S$=MID$(F$,2,LEN(F$)-2):GOSUB 1110:IF N THEN FS$(Z)="0":RETURN
  960 F$(Z)=MID$(F$,2,LEN(F$)-2):GOTO 110
  970 IF F$="X"THEN FS$(Z)="1":RETURN
  980 FS$(Z)="0":RETURN
  990 PRINT "Fehlerhafte Eingabe !":GOSUB 1320:RUN
 1000! +-*/
 1010 L=LEN(S$):P=0:O=6:KL=0:IF L=0 THEN S$=" ":GOTO 1010
 1020 FOR I=1 TO L:K$=MID$(S$,I,1):KL=KL+(K$=")"):KL=KL-(K$="(")
 1030 IF KL<>0 THEN NEXT:GOTO 1080
 1040 IF K$="+"OR K$="-"THEN P=I:O=1-(K$="-")
 1050 IF K$="*"OR K$="/"THEN IF O>2 THEN P=I:O=3-(K$="/")
 1060 IF K$="^"THEN IF O>4 THEN P=I:O=5
 1070 NEXT
 1080 IF KL THEN 990
 1090 RETURN
 1100!TERM=ZAHL ?
 1110 FOR I=1 TO LEN(S$):K$=MID$(S$,I,1)
 1120 IF K$>"/"AND K$<":"THEN NEXT:N=1:RETURN
 1130 IF(K$="-"OR K$=" ")AND I=1 THEN NEXT
 1140 N=0:RETURN
 1150!FKT.
 1160 DATA 7,SIN(,COS(,COS(,(-1)*SIN(,EXP(,EXP(,LN(,1/(
 1170 DATA SQR(,.5/SQR(,TAN(,1/COS(,ATN(,1/(1+
 1180!MAIN
 1190 WINDOW:CLS:A$=STRING$(32,""):PRINT AT(0,0);A$
 1200 FOR I=0 TO 30:PRINT AT(I,31);"":NEXT:PRINT AT(31,0);A$
 1210 PRINT AT(2,6);"DIFFERENZIALRECHNUNG":PRINT AT(3,5);STRING$(22,"*")
 1220 WINDOW 6,29,2,30:CLS:PRINT "1   1. Ableitung bilden":PRINT
 1230 PRINT "2   hoehere Ableitungen":PRINT:PRINT "3   rechnen":PRINT
 1240 PRINT "4   Ende":PRINT:PRINT:PRINT "Ihre Wahl ..."
 1250 A$=INKEY$:IF A$<"1"OR A$>"4"THEN 1250
 1260 CLS:ON VAL(A$)GOSUB 70,1340,1280,1270:GOSUB 1320:GOTO 1220
 1270 WINDOW:CLS:END
 1280 IF PEEK(1031)=2 THEN PRINT "Die Ableitung kann wegen":ELSE 1282
 1281 PRINT "Ueberlaenge nicht bearbeitet werden !":PRINT
 1282 INPUT "Startwert:";X1
 1283 INPUT "Endwert  :";X2
 1284 INPUT "Anzahl   :";N:GOTO 1300
 1285 CLS:PRINT " f(x)="LF$:PRINT:PRINT STR$(PEEK(1030))". Ableitung:"
 1288 PRINT " g(x)="FS$(0):PRINT
 1290 PRINT " x"TAB(10)"f(x)"TAB(16)STR$(PEEK(1030))".Ableitung"
 1295 PRINT:RETURN
 1300 GOSUB 1285:N1=0:FOR X=X1 TO X2 STEP(X2-X1)/(N-1)
 1310 PRINT X TAB(9)FN A(X);:IF PEEK(1031)=2 THEN 1312
 1311 PRINT TAB(19);FN B(X);
 1312 PRINT:N1=N1+1:IF N1>9 THEN N1=0:GOSUB 1320:GOSUB 1285
 1313 NEXT:RETURN
 1320 PRINT:PRINT TAB(20)">ENTER<"
 1330 IF INKEY$=CHR$(13)THEN RETURN:ELSE 1330
 1340 INPUT "Nr. der Ableitung:";AN:IF AN<1 OR AN>INT(AN)THEN 1340
 1350 PRINT "Alle Ableitungen listen J/(N) ?"
 1360 AL$=INKEY$:IF AL$=""THEN 1360
 1370 POKE 1032,65:F$(0)="":INPUT "f(x)=";F$(0):CALL*40A:LF$=F$(0)
 1380 FOR AB=1 TO AN:Z=0:GOSUB 110:GOSUB 1400:IF LEN(FS$(0))>65 THEN 1420
 1390 F$(0)=FS$(0):NEXT:POKE 1030,AN:GOSUB 90:POKE 1031,1:GOTO 1430
 1400 IF AL$="N"THEN RETURN
 1410 PRINT:PRINT STR$(AB)". Ableitung:":PRINT "g(x)=";FS$(0):RETURN
 1420 X=AB:AB=AN+1:NEXT:POKE 1031,2:PRINT:PRINT "Ueberlaenge !":AB=X+1:POKE 1030,X
 1430 AB=AB-1:IF AL$="N"THEN 1410:ELSE RETURN