10REM SAVE"DECODE" 20@%=0 30MODE3 40INPUT LINE "Channel: " channel 50fn$="debug" 60IF channel=7 THEN MODE3:fn$="text" 70IF channel=10 THEN MODE7:fn$="tele" 80IF channel=99 THEN MODE4:fn$="screen":ScAd=&5800 90debugging=FALSE 100synch=0 110CLOSE#0 120T%=OPENIN("rawdata") 130DIM buff 39 140PROCinitham 141ON ERROR GOTO 181 150REPEAT 160PROCgrab 170PROChandle 180UNTIL 0 181ON ERROR OFF 182VDU 3 183REPORT:PRINT" at line ";ERL 184END 190DEFPROCgrab 200magno=8+BGET#T% 210FOR I%=0 TO 39 220buff?I%=BGET#T% 230NEXT 240ENDPROC 250DEFPROCinitham 260DIM ham 255 270P%=ham 280[OPT 2 290 EQUD &4101FF41 \ 1 300 EQUD &FF4140FF 310 EQUD &FF4142FF 320 EQUD &47FFFF4A 330 EQUD &FF4140FF 340 EQUD &40FF0040 \ 0 350 EQUD &4BFFFF46 360 EQUD &FF4340FF 370 EQUD &FF414CFF 380 EQUD &47FFFF44 390 EQUD &47FFFF46 400 EQUD &074747FF \ 7 410 EQUD &45FFFF46 420 EQUD &FF4D40FF 430 EQUD &FF464606 \ 6 440 EQUD &47FFFF46 450 EQUD &FF4142FF 460 EQUD &49FFFF44 470 EQUD &42FF0242 \ 2 480 EQUD &FF4342FF 490 EQUD &45FFFF48 500 EQUD &FF4340FF 510 EQUD &FF4342FF 520 EQUD &4303FF43 \ 3 530 EQUD &45FFFF44 540 EQUD &FF444404 \ 4 550 EQUD &FF4F42FF 560 EQUD &47FFFF44 570 EQUD &054545FF \ 5 580 EQUD &45FFFF44 590 EQUD &45FFFF46 600 EQUD &FF434EFF 610 EQUD &FF414CFF 620 EQUD &49FFFF4A 630 EQUD &4BFFFF4A 640 EQUD &FF4A4A0A \ 10 650 EQUD &4BFFFF48 660 EQUD &FF4D40FF 670 EQUD &4BFFFF4A 680 EQUD &4CFF0C4C \ 12 690 EQUD &FF4D4CFF 700 EQUD &FF4F4CFF 710 EQUD &47FFFF4A 720 EQUD &FF4D4CFF 730 EQUD &4D0DFF4D \ 13 740 EQUD &4BFFFF46 750 EQUD &FF4D4EFF 760 EQUD &49FFFF48 770 EQUD &094949FF \ 9 780 EQUD &FF4F42FF 790 EQUD &49FFFF4A 800 EQUD &FF484808 \ 8 810 EQUD &49FFFF48 820 EQUD &4BFFFF48 830 EQUD &FF434EFF 840 EQUD &FF4F4CFF 850 EQUD &49FFFF44 860 EQUD &4F0FFF4F \ 15 870 EQUD &FF4F4EFF 880 EQUD &45FFFF48 890 EQUD &FF4D4EFF 900 EQUD &FF4F4EFF 910 EQUD &4EFF0E4E \ 14 920 EQUD &0B4B4BFF \ 11 930] 940ENDPROC 950DEFFNham(WW%) 960= ((ham?WW%) AND 15) 970DEFPROChandle 980FT=FNham(buff?0) 990AL=FNham(buff?1) 1000IF (FT AND 1) = 1 THEN PRINT"***ILLEGAL PACKET***"; 1010RIpresent=((FT DIV 2) AND 1) 1020CIpresent=((FT DIV 4) AND 1) 1030DLpresent=((FT DIV 8) AND 1) 1040RI=0:CI=0:DL=0 1050ptr=2 1060Addr=0 1070IF AL=0 THEN GOTO 1120 1080FOR I%=1 TO AL 1090 Addr=Addr*16+(FNham(buff?ptr)) 1100 ptr=ptr+1 1110NEXT 1120IF RIpresent=1 THEN RI=FNham(buff?ptr):ptr=ptr+1 1130IF CIpresent=1 THEN CI=buff?ptr:ptr=ptr+1 1140IF DLpresent=1 THEN DL=(buff?ptr) AND 31:ptr=ptr+1 1150IF DLpresent=1 THEN endaddr=ptr+DL-1 ELSE endaddr=37 1160IF Addr<>channel THEN GOTO 1230 1170IF NOT debugging THEN GOTO 1230 1180PRINT '"[A:";magno;"/";Addr;",FT=";FT; 1190IF RIpresent=1 THEN PRINT ",RI=";RI; 1200IF CIpresent=1 THEN PRINT ",CI=";CI; 1210IF DLpresent=1 THEN PRINT ",DL=";DL; 1220PRINT "]" 1230REM 1240IF channel=0 THEN PRINTAddr;:GOTO 1300 1250IF Addr<>channel THEN GOTO 1300 1260IF ptr>39 OR endaddr>39 THEN PRINT"Argh!!!":END 1261IF DL=0 THEN GOTO 1300 1270FOR I%=ptr TO endaddr 1280 ZZ%=EVAL("FN"+fn$) 1290NEXT 1300ENDPROC 1310DEFFNtext 1320IF buff?I%=13 THEN =0 1330IF buff?I%=10 THEN PRINT:=0 1340IF buff?I%>126 THEN PROChex(buff?I%):=0 1350IF buff?I%<32 THEN PROChex(buff?I%):=0 1360IF buff?I%=32 THEN PRINT"_";:=0 1370VDU buff?I% 1380=0 1390=0 1400DEFFNtele 1410IF buff?I% < 32 THEN buff?I%=32 1420IF buff?I% = 127 THEN buff?I%=32 1430VDU (buff?I%) OR 128 1440=0 1450DEFFNdebug 1460PRINT"<"; 1470IF buff?I%<16 THEN PRINT"0"; 1480PRINT~buff?I%;">"; 1490=0 1500DEFFNscreen 1510?ScAd=buff?I% 1520ScAd=ScAd+1 1530IF ScAd=&8000 THEN ScAd=&5800 1540=0 1550DEFPROChex(I) 1560PRINT"<"; 1570IF I<15 THEN PRINT"0"; 1580PRINT~I; 1590PRINT">"; 1600ENDPROC 7160IF channel=10 THEN MODE3:fn$="text"