home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1998-01-11 | 4.2 KB | 163 lines |
- Set Buffer 80
- Screen Open 0,640,256,2,$8000
- Curs Off : Palette 0,$FFF
- F$=":APSystem/AMOSPro_AMCAF.Lib"
- 'F$=":AMOS_System/TOME.Lib"
- Pload F$,9
- ST=Start(9) : LE=Length(9)
- Doke ST-12,Deek(ST) and $FFFE
- LE1=Leek(ST) : OF1=18 : LABS=LE1/2
- LE2=Leek(ST+4) : OF2=OF1+LE1
- LE3=Leek(ST+8) : OF3=OF2+LE2
- LE4=Leek(ST+12) : OF4=OF3+LE3
- AD=ST+OF1+A*2
- A$="AP20"
- If Leek(AD)=Leek(Varptr(A$))
- Add LABS,-2 : Add AD,4 : Add OF1,4
- Print "This is an AMOS Pro 2.0 Extension."
- End If
- Dim LABADR(LABS),LAB$(LABS)
- Print "Length of LabelTable :";LE1;At(32,);Hex$(LE1);
- Print At(40,);"Offset";OF1;At(56,);Hex$(OF1);At(64,);"->";LABS;" Labels"
- Print "Length of TokenTable :";LE2;
- Print At(32,);Hex$(LE2);At(40,);"Offset";OF2;At(56,);Hex$(OF2)
- Print "Length of LibraryCode:";LE3;
- Print At(32,);Hex$(LE3);At(40,);"Offset";OF3;At(56,);Hex$(OF3)
- Print "Length of TitleCode :";LE4;
- Print At(32,);Hex$(LE4);At(40,);"Offset";OF4;At(56,);Hex$(OF4)
- Print "Total Len. of Library:";OF4+LE4;
- Print At(32,);Hex$(OF4+LE4);At(40,);"Loaded";LE;At(56,);Hex$(LE)
- LET=0
- LA=AD : LADDR=LA
- For A=0 To LABS-1
- B=Deek(AD) : Add AD,2
- Add LET,B*2
- Next
- Print "Calculat. Len of Code:";LET;At(32,);Hex$(LET)
- Print "1st Routine resident : ";
- If Deek(ST+16) Then Print "yes" Else Print "no"
- Goto SKIP
- Print
- Print "Press any key to get label offsets."
- Print
- Open Out 1,"ram:"+ Extension_8_02F0(F$)+".lab"
- AD=OF3
- For A=0 To LABS-1
- L=Deek(LA)*2 : Add LA,2
- Print "Label";A;At(22,);L;At(32,);Hex$(L,4);At(40,);"Offset";AD;At(56,);Hex$(AD,4)
- Print #1,"Label";A;Tab$;L;Tab$;Hex$(L,4);Tab$;"Offset";AD;Tab$;Hex$(AD,6)
- LABADR(A)=AD
- Add AD,L
- Wait Key
- Next
- Close 1
- SKIP:
- Print "Press any key for Tokencheck:"
- Print
- Wait Key
- AD=ST+OF2 : OT$=""
- Do
- Exit If AD=>ST+OF3-2
- Gosub DETOKEN
- Wait Key
- Loop
- Print "Functions:";FUNK
- Print "Commands :";COMM
- Print "FuncsReal:";FUNK2
- Print "CommsReal:";COMM2
- AD=OF3 : LA=LADDR
- For A=0 To LABS-1
- L=Deek(LA)*2 : Add LA,2
- LABADR(A)=AD
- Add AD,L
- Next
- LA=0
- Print
- Print "Jumps in danger:"
- For A=OF3 To OF4 Step 2
- P=Deek(ST+A) : L=Deek(ST+A+2)
- While A>LABADR(LA) and LA<LABS : Inc LA : Wend
- If(P and $FF0F)=$FE01 and L<LABS
- D=Abs(LABADR(L)-A)
- If D>27000
- Print "Label";LA;"(";LAB$(LA);"): Offset:";A;" To Label";L;"(";LAB$(L);") Distance";D
- Wait Key
- End If
- End If
- Next
- End
- DETOKEN:
- LAB1=Deek(AD)
- LAB2=Deek(AD+2) : Add AD,4
- If LAB1<>$FFFF Then LAB1$="Com"+Str$(LAB1) Else LAB1$=""
- If LAB2<>$FFFF Then LAB2$="Fun"+Str$(LAB2) Else LAB2$=""
- A$=At(56,)+LAB1$+At(68,)+LAB2$
- TK$="" : RF=0 : CLON=0
- ER$=""
- Do
- P=Peek(AD) : Inc AD
- B$=Chr$(P)
- If P<32
- B$=""
- If ER$=""
- ER$="UDC"
- End If
- ER$=ER$+Str$(P)
- End If
- If P=$80 Then TK$=OT$ : CLON=1 : Exit
- If B$="!" Then RF=1 : B$=""
- If P>$80 Then TK$=TK$+Chr$(P-$80) : Exit
- TK$=TK$+B$
- Loop
- P=1
- For A=1 To Len(TK$)
- B$=Mid$(TK$,A,1)
- If P=1 Then Mid$(TK$,A,1)=Upper$(B$) : P=0
- If B$=" " Then P=1
- Next
- If RF Then OT$=TK$
- P=Peek(AD) : Inc AD
- If P>253 Then Print TK$;At(40,);A$ : Return
- P$=Chr$(P)
- SY$="" : C=1
- If P$="V"
- P=Peek(AD) : Inc AD
- If P<255
- P$=Chr$(P)
- SY$="("
- Else
- SY$="("+TK$ : P$="" : Dec AD
- End If
- End If
- If P$="0" Then SY$=SY$+"A="+TK$+"(" : Inc FUNK : If CLON=0 Then Inc FUNK2
- If P$="1" Then SY$=SY$+"A#="+TK$+"(" : Inc FUNK : If CLON=0 Then Inc FUNK2
- If P$="2" Then SY$=SY$+"A$="+TK$+"(" : Inc FUNK : If CLON=0 Then Inc FUNK2
- If P$>"2" and P$<="9" Then SY$="TYP"+P$+" "+TK$ : Inc FUNK : If CLON=0 Then Inc FUNK2
- If P$="I" Then SY$=SY$+TK$+" " : C=0 : Inc COMM : If CLON=0 Then Inc COMM2
- If SY$="" Then SY$="-ER-"
- Do
- P=Peek(AD) : Inc AD
- Exit If P>252
- B$=Chr$(P)
- PA$="-ER-"
- If B$="0" Then PA$=Chr$(65+C)
- If B$="1" Then PA$=Chr$(65+C)+"#"
- If B$="2" Then PA$=Chr$(65+C)+"$"
- If B$>"2" and B$<="9" Then PA$="TYP"+B$
- SY$=SY$+PA$
- P=Peek(AD) : Inc AD
- Exit If P>252
- B$=Chr$(P)
- PA$="-ER-"
- If B$="," Then PA$=","
- If B$="t" Then PA$=" To "
- SY$=SY$+PA$ : Inc C
- Loop
- If Left$(SY$,1)="(" Then SY$=SY$+")"
- If(P$=>"0") and(P$<="2") Then SY$=SY$+")" : SY$=SY$-"()"
- If CLON Then SY$=" "+SY$
- Print SY$;At(40,);ER$;A$
- If LAB1<>$FFFF Then LAB$(LAB1)=SY$
- If LAB2<>$FFFF Then LAB$(LAB2)=SY$
- If AD and 1 Then Inc AD
- Return