10 REM MoeMon Version 3.0 20 REM Copyright (c) 1983 30 REM Written by larry gensch, ESQ 40 REM Compuserve [75665,1405] 50 REM Phone #(603) 898-1706 100 CLEAR256,62299:LOADM"SUBLIB" 110 CLEARFRE(0)/2:DEFSNGA-Z:KEYSTOP 120 DIMF$(21),P%(5):E$=CHR$(27) 130 LB$="Disp Mod Find Dir Run New Menu " 140 HX$="0123456789ABCDEF":AR$=CHR$(29)+CHR$(28)+CHR$(30)+CHR$(31) 200 C$="":SCREEN,0:PRINTE$"U"E$"Q";:CLS:PRINT@280,E$"T"LB$;:KEYSTOP:ONKEYGOSUB310,320,330,340,350,360,370,380 210 PRINT@93,"MoeMon Monitor";:PRINT@134,"Version 3.0"; 220 PRINT@209,"by larry gensch, ESQ";:LINE(50,12)-(182,50),1,B 230 RS=0:KEYON 300 IFRSTHEN200ELSEPRINT@8,DATE$;" ";DAY$;" ";:PRINTTIME$;:GOTO300 310 KEYSTOP:F=1:GOTO390 320 KEYSTOP:F=2:GOTO390 330 KEYSTOP:F=3:GOTO390 340 KEYSTOP:F=4:GOTO390 350 KEYSTOP:F=5:GOTO390 360 KEYSTOP:F=6:GOTO390 370 KEYSTOP:F=7:GOTO390 380 KEYSTOP:F=8 390 A$=INKEY$:IFLEN(A$)>0THEN390ELSEONFGOTO1000,2000,3000,4000,5000,6000,400,500 400 SCREEN,0:CLS:CLEAR256,MAXRAM:NEW 500 CLEAR256,MAXRAM:MENU 600 C$="":IP$="":ONKEYGOSUB650,650,650,650,650,650,650,650:PRINTE$"P";:KEYON 610 A$=INKEY$:IFLEN(C$)>0THEN650ELSEIFLEN(A$)=0THEN610 620 A=ASC(A$):IF(A=8ORA=127)ANDLEN(IP$)=0THEN610ELSEIFA=8ORA=127THENPRINTCHR$(127);:IP$=LEFT$(IP$,LEN(IP$)-1):GOTO610 630 IFA=13THENPRINTE$"Q ";:RETURN 640 IFLEN(VC$)>0ANDINSTR(VC$,A$)=0THENBEEP:GOTO610ELSEPRINTA$;:IP$=IP$+A$:GOTO610 650 C$="Exit":RETURN 700 VC$=HX$:GOSUB600:IFC$="Exit"THENRETURNELSEIFLEN(IP$)=0THENIP$="0" 710 HX=0:FORX=1TOLEN(IP$):HX=HX*16+INSTR(HX$,MID$(IP$,X,1))-1:NEXTX 720 RETURN 800 H$="" 810 H1=HX-INT(HX/16)*16:HX=INT(HX/16):H$=MID$(HX$,H1+1,1)+H$:IFHX>0THEN810 820 H$=RIGHT$("0000"+H$,4):RETURN 900 HX=AD:GOSUB800:PRINTH$" ";:HD=AD 910 FORAD=HDTOHD+7:HX=PEEK(AD):GOSUB800 920 PRINTRIGHT$(H$,2)" ";:IFAD=HD+3THENPRINT" "; 930 NEXTAD:FORAD=HDTOHD+7:P=PEEK(AD) 940 IFP<33ORP=127THENPRINT".";ELSEPRINTCHR$(P); 950 IFAD=HD+3THENPRINT" "; 960 NEXTAD 970 RETURN 1000 CLS:C$="":PRINTE$"U":PRINT"Memory Display":PRINT:PRINT"Start Address: ";:GOSUB700:IFC$="Exit"THEN1070 1010 ONKEYGOSUB1080,1080,1080,1080,1080,1080,1080,1080 1020 EX=0:AD=HX:CLS:PRINT"Memory Display":FORX1=1TO6:GOSUB900:NEXTX1 1030 HX=AD 1040 IFLEN(C$)>0THENC$="":GOTO1070 1050 A$=INKEY$:IFLEN(C$)>0THEN1070ELSEIFLEN(A$)=0THEN1050 1055 IFA$=" "THENGOSUB900:GOTO1050 1060 IFA$=CHR$(13)THEN1020ELSE1050 1070 RS=-1:RETURN 1080 C$="Exit":RETURN 2000 CLS:C$="":SCREEN,0:PRINT"Memory Modify":PRINT:PRINT"Start Address: ";:GOSUB700:IFC$="Exit"THEN2990ELSEAD=HX 2010 L1$="Hex Asc Next Prev Mon " 2030 ONKEYGOSUB2810,2820,2830,2840,2850,2860,2870,2990 2040 PRINT@280,E$"T"L1$:GOSUB2810 2050 KEYON:CLS:PRINTE$"VMemory Modify":HZ=AD:FORX1=1TO6:GOSUB900:IFRSTHEN2990 2055 NEXTX1:PA=46 2060 NX=AD:AD=HZ:PRINT@PA,E$"Q"; 2070 KEYON:NS=0:HX=AD:GOSUB800:PRINT@0,E$"QMemory Modify"SPACE$(17)"Addr: "H$;:HX=PEEK(AD):GOSUB800:H$=RIGHT$(H$,2):HD$=H$:FL=0:P=PA 2080 IFC$="Exit"THEN2990 2090 IFRSTHEN2990ELSEIFNSTHEN2070ELSEIFNOTHFTHEN2340 2095 GOSUB2910:A$=INKEY$:IFLEN(A$)=0THEN2090 2100 IFINSTR(AR$,A$)>0THEN2230 2110 IFINSTR(HX$,A$)=0THEN2090 2120 PRINT@PA,A$;:P=PA+1:H$=RIGHT$(HD$,1) 2130 IFRSTHEN2990ELSEIFNSTHEN2070ELSEIFNOTHFTHEN2340 2135 GOSUB2910:B$=INKEY$:IFLEN(B$)=0THEN2130 2140 IFASC(B$)=8THEN2070 2150 IFASC(B$)=13THENB$=A$:A$="0" 2160 IFINSTR(HX$,B$)=0THEN2130 2170 PRINT@P,B$:HX=(INSTR(HX$,A$)-1)*16+INSTR(HX$,B$)-1 2180 KEYSTOP:POKEAD,HX:HX=PEEK(AD):GOSUB800 2182 PRINT@PA,;:P=INT(POS(0)/3)+29:IFP>34THENP=P+1 2184 P=P+CSRLIN*40:HD$=CHR$(PEEK(AD)) 2186 IFASC(H$)<33ORASC(HD$)=127THENH$="." 2190 PRINT@PA,RIGHT$(H$,2);:PRINT@P,HD$;:KEYON:IFNSTHEN2070 2200 IFPA=268THEN2320 2205 PA=PA+3:PRINT@PA,;:IFPOS(0)=18THENPA=PA+1 2210 IFPOS(0)=31THENPA=PA+15 2220 AD=AD+1:GOTO2070 2230 GOSUB2920:ONINSTR(AR$,A$)GOTO2240,2200,2280,2300 2240 IFPA=46THEN2070 2250 PA=PA-3:PRINT@PA,;:IFPOS(0)=16THENPA=PA-1 2260 IFPOS(0)=3THENPA=PA-15 2270 AD=AD-1:GOTO2070 2280 IFCSRLIN=1THEN2070 2290 PA=PA-40:AD=AD-8:GOTO2070 2300 IFCSRLIN=6THEN2070 2310 PA=PA+40:AD=AD+8:GOTO2070 2320 PRINTE$"W";:PRINT@279,:PRINTE$"V";:AD=NX:HZ=AD:GOSUB900:PA=246 2330 GOTO2060 2340 REM ASCII 2350 HX=PEEK(AD):GOSUB800:PRINT@PA,RIGHT$(H$,2);:PRINT@PA,; 2360 P=INT(POS(0)/3)+29:IFP>34THENP=P+1 2370 P=CSRLIN*40+P 2380 PRINT@P,E$"P"; 2390 IFRSTHEN2990ELSEIFNSTHEN2070ELSEIFHFTHENPRINTE$"Q";:GOTO2070 2395 A$=INKEY$:IFLEN(A$)=0THEN2390 2400 IFINSTR(AR$,A$)>0THEN2230 2410 IFASC(A$)<32ORASC(A$)>126THEN2390 2420 HX=ASC(A$):GOTO2180 2810 HF=-1:Q=CSRLIN*40+POS(0):PRINT@0,E$"U";:PRINT@280,E$"pHex"E$"q Asc"E$"T";:PRINT@Q,;:RETURN 2820 HF=0:Q=CSRLIN*40+POS(0):PRINT@0,E$"U";:PRINT@280,"Hex "E$"pAsc"E$"q"E$"T";:PRINT@Q,;:RETURN 2830 BEEP:RETURN 2840 AD=NX:IFAD>655495THENAD=65495 2845 KEYOFF:HZ=AD:PRINT@40,E$"V"E$"P";:FORX1=1TO6:GOSUB900:NEXTX1:NX=AD:AD=HZ:PA=46:NS=-1:RETURN 2850 AD=HZ-48:IFAD<0THENAD=0 2855 GOTO2845 2860 BEEP:RETURN 2870 BEEP:RETURN 2910 FL=FL+1:IFFL=1THENPRINT@P,E$"p"H$E$"q";ELSEIFFL=10THENPRINT@P,H$;:FL=-10 2915 RETURN 2920 PRINT@PA,HD$;:RETURN 2990 C$="Exit":RS=-1:RETURN 3000 PRINTE$"U";:CLS:PRINTE$"WEnter Text to find: "; 3010 VC$="":GOSUB600:IFC$="Exit"THEN3160 3020 S$=IP$:PRINT:PRINT"Enter Starting Address: "; 3040 GOSUB700:IFC$="Exit"THEN3160 3045 KEYON:ONKEYGOSUB3170,3170,3170,3170,3170,3170,3170,3160 3050 AD=HX:PRINT 3060 P%(1)=AD+65536*(AD>32767) 3070 P%(2)=VARPTR(S$) 3080 P%(3)=(65535-AD)+65536*((65535-AD)>32767) 3090 CALL62300,1,VARPTR(P%(0)) 3100 IFP%(0)=0THENPRINT"NOT FOUND":GOTO3150 3110 HX=P%(1):IFHX<0THENHX=HX+65536 3120 H=65536-HX:GOSUB800:PRINT"Found at ";H$; 3124 IFCSRLIN<6THEN3130ELSEPRINTE$"U";:PRINT@280,E$"TENTER to scroll; F8 to exit"; 3126 IFRSTHEN3160 3128 A$=INKEY$:IFA$<>CHR$(13)THEN3126 3130 PRINT:P%(1)=P%(1)+1: 3135 P%(3)=H+65536*(H>32768) 3138 CALL62300,1,VARPTR(P%(0)) 3140 IFP%(0)THEN3110 3150 PRINTE$"U";:PRINT@280,"ENTER or F8 to exit "; 3154 IFRSTHEN3160 3156 A$=INKEY$:IFA$<>CHR$(13)THEN3154 3160 RS=-1 3170 RETURN 4000 CLS:SCREEN,0:PRINT@280,E$"TENTER to scroll; F8 to quit.":ONKEYGOSUB4190,4190,4190,4190,4190,4190,4190,4200:KEYON 4005 PRINT@0,"FILE NAME LENGTH ADDR"; 4010 P%(1)=-1705:TR=0:F$=STRING$(10,0) 4020 P%(2)=VARPTR(F$):CALL62300,3,VARPTR(P%(0)) 4030 IFP%(0)=0THEN4100 4040 HX=P%(4):IFHX<0THENHX=HX+65536 4050 GOSUB800 4060 L=P%(5):IFL<0THENL=L+65536 4065 TR=TR+L 4070 PRINTUSING"\ \ ##### \ \";F$,L,H$; 4080 IFCSRLIN<6THEN4090 4085 GOSUB4210:IFRSTHEN4200 4090 PRINT:IFRSTHEN4200ELSE4020 4100 PRINTE$"U** END **":PRINT@280,"ENTER for summary; F8 to Exit"; 4105 GOSUB4210:IFRSTHEN4200 4110 CLS:PRINTUSING"RAM USED #####";TR 4120 IP$=STRING$(15,0):V=VARPTR(IP$) 4130 POKE V+2,INT(64175/256):POKEV+1,64175-INT(64175/256)*256 4140 IP$=LEFT$(IP$,INSTR(IP$,CHR$(0))-1) 4150 IFLEN(IP$)=0THENIP$="* UNDEFINED *" 4160 PRINT"IPL String: ";IP$ 4170 PRINT@280,"ENTER or F8 to exit.";E$"P"; 4180 GOSUB4210:GOTO4200 4190 BEEP:RETURN 4200 RS=-1:RETURN 4210 IFRSTHEN4230 4220 A$=INKEY$:IFA$<>CHR$(13)THEN4210 4230 RETURN 5000 BEEP:RS=-1:RETURN 6000 SCREEN,0:CLS:PRINTE$"U";:PRINT@280,E$"TSelect desired Program or F8 to exit." 6001 ONKEYGOSUB6180,6180,6180,6180,6180,6180,6180,6190:KEYON 6005 P%(1)=-1705:X=1:FORX=0TO21:F$(X)=STRING$(10,0):NEXTX:X=0 6010 P%(2)=VARPTR(F$(X)):CALL62300,3,VARPTR(P%(0)) 6020 IFP%(0)=0THENNF=X:GOTO6050 6030 IFRIGHT$(F$(X),2)="BA"THENX=X+1 6040 GOTO6010 6050 F$(NF)="*QUIT*" 6060 FORX=0TONF:PRINT@X*10,LEFT$(F$(X),6);:NEXTX 6070 P=0 6080 PRINT@P*10,E$"p"LEFT$(F$(P),6)E$"q"; 6090 A$=INKEY$:IFRSTHEN6190ELSEIFLEN(A$)=0THEN6090 6095 PRINT@P*10,LEFT$(F$(P),6); 6100 IFASC(A$)=13THEN6140ELSEONINSTR(AR$,A$)+1GOTO6080,6101,6102,6103,6104 6101 P=P-1:GOTO6120 6102 P=P+1:GOTO6120 6103 IFP>4THENP=P-4:GOTO6120ELSE6120 6104 IFP+3NFTHENP=NF 6130 GOTO6080 6140 IFF$(P)="*QUIT*"THENRS=-1:RETURN 6150 SCREEN,0:CLS:RUNLEFT$(F$(P),6) 6180 BEEP:RETURN 6190 RS=-1:RETURN