Implement 386 instruction table, improve 8086/186/286 instruction table
[multi_emu.git] / msbasic_test.txt
1 10 PRINT "HELLO"
2 20 REM P9=X9^Y9 === GOSUB 60030
3 30 X9=.3:Y9=.7:GOSUB 60030:PRINT .3^.7,P9
4 40 REM L9=LOG(X9) === GOSUB 60090
5 50 X9=.4:GOSUB 60090:PRINT LOG(.4),L9
6 60 REM E9=EXP(X9) === GOSUB 60160
7 70 X9=.5:GOSUB 60160:PRINT EXP(.5),E9
8 80 REM C9=COS(X9) === GOSUB 60240
9 90 X9=.6:GOSUB 60240:PRINT COS(.6),C9
10 100 REM T9=TAN(X9) === GOSUB 60280
11 110 X9=.7:GOSUB 60280:PRINT TAN(.7),T9
12 120 REM A9=ATN(X9) === GOSUB 60310
13 130 X9=.8:GOSUB 60310:PRINT ATN(.8),A9
14 140 END
15 60000 REM EXPONENTIATION: P9=X9^Y9
16 60010 REM NEED: EXP, LOG
17 60020 REM VARIABLES USED: A9,B9,C9,E9,L9,P9,X9,Y9
18 60030 P9=1 : E9=0 : IF Y9=0 THEN RETURN
19 60040 IF X9<0 THEN IF INT(Y9)=Y9 THEN P9=1-2*Y9+4*INT(Y9/2) : X9=-X9
20 60050 IF X9<>0 THEN GOSUB 60090 : X9=Y9*L9 : GOSUB 60160
21 60060 P9=P9*E9 : RETURN
22 60070 REM NATURAL LOGARITHM: L9=LOG(X9)
23 60080 REM VARIABLES USED: A9,B9,C9,E9,L9,X9
24 60090 E9=0 : IF X9<=0 THEN PRINT "LOG FC ERROR"; : STOP
25 60095 A9=1 : B9=2 : C9=.5 : REM THIS WILL SPEED UP THE FOLLOWING
26 60100 IF X9>=A9 THEN X9=C9*X9 : E9=E9+A9 : GOTO 60100
27 60110 IF X9<C9 THEN X9=B9*X9 : E9=E9-A9 : GOTO 60110
28 60120 X9=(X9-.707107)/(X9+.707107) : L9=X9*X9
29 60130 L9=(((.598979*L9+.961471)*L9+2.88539)*X9+E9-.5)*.693147
30 60135 RETURN
31 60140 REM EXPONENTIAL: E9=EXP(X9)
32 60150 REM VARIABLES USED: A9,E9,L9,X9
33 60160 L9=INT(1.4427*X9)+1 : IF L9<1E7 THEN 60180
34 60170 IF X9>0 THEN PRINT "EXP OV ERROR"; : STOP
35 60175 E9=0 : RETURN
36 60180 E9=.693147*L9-X9 : A9=1.32988E-3-1.41316E-4*E9
37 60190 A9=((A9*E9-8.30136E-3)*E9+4.16574E-2)*E9
38 60195 E9=(((A9-.166665)*E9+.5)*E9-1)*E9+1 : A9=2
39 60197 IF L9<=0 THEN A9=.5 : L9=-L9 : IF L9=0 THEN RETURN
40 60200 FOR X9=1 TO L9 : E9=A9*E9 : NEXT X9 : RETURN
41 60210 REM COSINE: C9=COS(X9)
42 60220 REM N.B. SIN MUST BE RETAINED AT LOAD-TIME
43 60230 REM VARIABLES USED: C9,X9
44 60240 C9=SIN(X9+1.5708) : RETURN
45 60250 REM TANGENT: T9=TAN(X9)
46 60260 REM NEEDS COS. (SIN NUST BE RETAINED AT LOAD-TIME)
47 60270 REM VARIABLES USED: C9,T9,X9
48 60280 GOSUB 60240 : T9=SIN(X9)/C9 : RETURN
49 60290 REM ARCTANGENT: A9=ATN(X9)
50 60300 REM VARIABLES USED: A9,B9,C9,T9,X9
51 60310 T9=SGN(X9): X9=ABS(X9): C9=0 : IF X9>1 THEN C9=1 : X9=1/X9
52 60320 A9=X9*X9 : B9=((2.86623E-3*A9-1.61657E-2)*A9+4.29096E-2)*A9
53 60330 B9=((((B9-7.5289E-2)*A9+.106563)*A9-.142089)*A9+.199936)*A9
54 60340 A9=((B9-.333332)*A9+1)*X9 : IF C9=1 THEN A9=1.5708-A9
55 60350 A9=T9*A9 : RETURN
56 RUN
57 PRINT "DONE"
58 SYSTEM