1 REM ++++++++++++++++++++++++++++++++ 2 REM ! Program .... L[SDISK2 3 REM ! Utg}va 2.0 83-06-06 4 REM ! av (c) Tomas Bergstam 5 REM ! {ndrat av Carl K|vamees 7 REM ! Minne 16 Kbytes f|r flexskiva 8 REM ! Ins{nt av 767 9 REM ++++++++++++++++++++++++++++++++ 10 REM Ytterligare beskrivning p} 11 REM programmet finns i filen 12 REM L[SDISK2.REM 88 REM 89 REM Screened by C R LERIN. 90 REM 130 DIM W$=256%,X$=12%,F$=20%,S$=100% 140 DIM H$(16%)=1% 150 DIM C%(17%) 160 H$='0123456789ABCDEF' 170 X$="01PDHASE?" 180 REM Snabbflyttning av tecken i BUF. 190 POKE -122%,237%,75%,128%,255%,237%,91%,130%,255%,42%,132%,255%,237%,176%,201% 200 DEFFNA%(R%,K%)=PEEK(884%+2%*R%)+SWAP%(PEEK(885%+2%*R%))+K% 210 DEFFNC%=FNA%(PEEK(-525%),PEEK(-524%)) 220 FOR N%=0% TO 15% : READ H$(N%) 230 NEXT N% 240 A%=PEEK(65065%)+SWAP%(PEEK(65066%)) 250 POKE A%+6%,62720%,SWAP%(62720%) 255 ; : ; 'Beh|ver du hj{lp? (Nej)'; : GET A$ : IF A$='J' OR A$='j' THEN GOSUB 2590 260 ; CHR$(12%);TAB(11%)'L[SDISK2' : ; TAB(10%);CHR$(23%)STRING$(10%,35%) 270 GOSUB 1730 280 ; " 0.....DRIVE 0" 290 ; " 1.....DRIVE 1" 300 ; " H.....HEX" 310 ; " D.....DECIMALT" 320 ; " A.....ASCII" 330 ; " P.....PRINTER" 340 ; " S.....SECTOR MARK" 350 ; " E.....END" 360 ; " ?.....HJ[LP"; 370 ; CUR(16%,22%); 380 IF K2% ; '(SECTOR) ' ELSE ; '(TRACK SECTOR)' 390 ; CUR(18%,35%);' '; 400 ; CUR(18%,22%)"OPTION <0D> "; : INPUT F$ 410 IF F$="" F$="0" 420 L=INSTR(1%,X$,F$) 430 IF L=0% THEN ; CHR$(7%); : GOTO 260 440 IF L=7% THEN 2480 445 IF L=9% THEN GOSUB 2590 : GOTO 260 450 IF L<4% THEN F$=F$+"D" 460 D1%=FNO%("1") 470 H%=FNO%("H") 480 D%=FNO%("D") 490 A%=FNO%("A") 500 L%=FNO%("P") 510 E%=FNO%("E") 520 \2%=1% 530 IF L% OPEN "PR:" ASFILE 1% : T9%=9% ELSE T9%=0% : CLOSE 1% 540 IF E% THEN ; CHR$(12%); : END 550 T%=0% : S%=-1% 560 IF \2% THEN ; CHR$(12%); : \2%=0% 570 ; CUR(0%,0%)"DRIVE:";RIGHT$(NUM$(D1%),2%)" TRACK: SECTOR: " 580 ; CUR(1%,0%)SPACE$(40%); 590 IF K2% ; CUR(0%,8%)SPACE$(9%); : T%=0% : GOTO 640 600 ; CUR(0%,14%); : GOSUB 1650 610 ONERRORGOTO 600 620 IF S$="" ; CUR(0%,14%)RIGHT$(NUM$(T%),2%) : GOTO 640 630 T%=VAL(S$) : S%=-1% 640 ; CUR(0%,24%); : GOSUB 1650 650 ONERRORGOTO 640 660 IF S$="" S%=S%+1% : ; CUR(0%,24%)RIGHT$(NUM$(S%),2%); : GOTO 690 670 IF K2%=0% IF VAL(S$)>7% ; CUR(0%,24%)SPACE$(LEN(S$)) : GOTO 640 680 S%=VAL(S$) 690 IF L% ; #L% : ; #L%TAB(T9%)"DRIVE:"NUM$(D1%); 700 IF L% IF K2% ; #L%", SECTOR:"NUM$(S%); : GOTO 720 710 IF L% ; #L%", TRACK:"NUM$(T%)", SECTOR:"NUM$(S%); 720 IF L% ; CUR(5%,10%)'DU KAN STOPPA PRINTERN' 730 IF L% ; CUR(6%,10%)'OCH ]TERG] TILL MENYN' 740 IF L% ; CUR(7%,10%)'GENOM ATT TRYCKA "M"' 750 IF K2% OR K3% THEN K3%=0% : GOTO 770 760 IF S%>6% THEN T%=T%+1% : S%=-1% 770 POKE 64769%,D1% : W$=STRING$(256%,0%) 780 Z%=CALL(24678%,SWAP%(T%)+32%*S%) 790 IF PEEK(64789%)=2% ; CUR(1%,18%)" CMD NOT ACC "CUR(0%,0%); 800 IF PEEK(64789%)=4% ; CUR(1%,20%)" DATA LOST "CUR(0%,0%); 810 IF PEEK(64789%)=8% ; CUR(1%,20%)" CRC ERROR "CUR(0%,0%); 820 IF PEEK(64789%)=16% ; CUR(1%,21%)" AM ERROR "CUR(0%,0%); 830 IF PEEK(64789%)=32% ; CUR(1%,18%)" WRITE FAULT "CUR(0%,0%); 840 IF PEEK(64789%)=64% ; CUR(1%,20%)" PROTECTED "CUR(0%,0%); 850 IF PEEK(64789%)=128% ; CUR(1%,16%)" DRIVE NOT RDY "CUR(0%,0%); 860 K%=0% : K1%=0% 870 IF (H% OR D%) GOSUB 900 : GOTO 560 880 IF A% GOSUB 1460 : GOSUB 1600 : GOTO 560 890 GOTO 260 900 REM ---UPPSPALTNING 910 FOR I%=1% TO 256% 920 C%=ASC(MID$(W$,I%,1%)) 930 IF (H% OR D%) AND I%=1% IF T%>2% GOSUB 1010 ELSE ; #L% : ; #L% 940 IF K%=0% THEN ; #L%,SPACE$(4%-LEN(NUM$(I%)))I%':'; 950 ; #L%TAB(T9%); 960 IF H% GOSUB 1060 970 IF D% GOSUB 1310 980 NEXT I% 990 ; #L% 1000 RETURN 1010 REM ---FILNUMMER 1020 F1%=C%/16%+16%*(C%-C%/16%*16%) 1030 ; CUR(0%,27%)"FILE:"RIGHT$(NUM$(F1%),2%) 1040 IF L% ; #L%", FILE:"NUM$(F1%) : ; #L% 1050 ; : RETURN 1060 REM ---HEX 1070 IF L% THEN T8%=15% ELSE T8%=7% 1080 B%=C% AND 255% 1090 V$=H$(B%/16%)+H$(B%-16%*(B%/16%)) 1100 ; #L%,V$" "; 1110 C%(K%)=C% 1120 K%=K%+1% 1130 IF K%>T8% GOSUB 1150 1140 RETURN 1150 REM ---PRINT ASCII 1160 IF H% IF L% T7%=33% : V%=15% ELSE V%=7% : T7%=0% 1170 IF D% IF L% T7%=26% : V%=9% ELSE V%=4% : T7%=0% 1180 ; #L%TAB(T7%+26%)"*"; 1190 FOR K%=0% TO V% 1200 C%(K%)=C%(K%) AND 127% 1210 IF C%(K%)<32% OR C%(K%)>128% C%(K%)=46% 1220 IF L% IF C%(K%)=127% C%(K%)=32% 1230 ; #L%,CHR$(C%(K%)); 1240 NEXT K% 1250 ; #L%,"*" 1260 K%=0% 1270 IF L% IF INP(56%)=77% OR INP(56%)=109% THEN 260 1280 IF INP(56%)=19% OR INP(56%)=147% GOSUB 2430 : GOTO 1300 1290 IF INP(56%)=26% OR INP(56%)=154% GOSUB 2510 : GOTO 560 1300 RETURN 1310 REM ---DECIMALT 1320 IF L% T6%=9% ELSE T6%=4% 1330 C$=RIGHT$(NUM$(C%),2%) 1340 IF LEN(C$)=1% THEN C$=" "+C$ 1350 IF LEN(C$)=2% THEN C$=" "+C$ 1360 ; #L%,C$;" "; 1370 C%(K%)=C% 1380 K%=K%+1% 1390 IF K%>T6% GOSUB 1150 1400 IF I%=256% GOTO 1420 1410 RETURN 1420 FOR X%=T6%-3% TO T6% 1430 C%(X%)=0% : NEXT X% 1440 GOSUB 1150 1450 RETURN 1460 REM ---STR[NG 1470 ; : ; 1480 ; #L%TAB(T9%); 1490 FOR I%=1% TO 256% 1500 W1%=ASC(MID$(W$,I%,1%)) 1510 IF I%=1% IF T%>2% C%=W1% : GOSUB 1010 ELSE ; #L% : ; #L% 1520 W1%=W1% AND 127% 1530 IF W1%<32% OR W1%>128% THEN W1%=32% 1540 IF L% IF I%=60% OR I%=120% OR I%=180% OR I%=240% ; #L% : ; #L%TAB(T9%); 1550 IF L% IF W1%=127% W1%=32% 1560 ; #L%,CHR$(W1%); 1570 NEXT I% 1580 ; #L% 1590 RETURN 1600 REM ---STOPP 1610 GET S$ 1620 IF S$="M" THEN 260 1630 IF S$=CHR$(13%) THEN 560 1640 RETURN 1650 REM ---INPUTLINE 1660 INPUTLINE S$ 1670 IF LEFT$(S$,1%)="M" THEN 260 1680 IF LEFT$(S$,1%)="D" THEN GOSUB 1890 : GOTO 1720 1690 IF LEFT$(S$,1%)="I" THEN GOSUB 1980 : GOTO 1720 1700 IF LEFT$(S$,1%)="^" THEN S%=S%-1% : GOSUB 2530 : GOSUB 2390 : K3%=1% : GOTO 690 1710 S$=LEFT$(S$,LEN(S$)-2%) 1720 RETURN 1730 REM ---F\RKLARANDE TEXT 1740 ; : ; TAB(8%)'KOMMANDO (RUTIN)' 1750 ; ' MED RETURN S] F]R DU N[STA SEKTOR' 1760 ; ' MED "^" F]R DU F\REG]ENDE SEKTOR' 1770 ; ' MED "I" MATAR MAN IN TECKEN' 1780 ; ' MED "D" TAR MAN BORT TECKEN' 1790 ; ' MED "M" F]R DU MENY' 1800 ; ' (ctrl)' 1810 ; ' "S" - STOPP' 1820 ; ' "Q" - K\R IGEN' 1830 ; ' "Z" - TILL VAL AV SEKTOR' 1840 ; ' ([VEN VID STOPP)' 1850 ; ' 'CHR$(23%)STRING$(36%,35%); 1860 RETURN 1870 DEFFNO%(X$)=-(INSTR(1%,F$,X$)<>0% OR INSTR(1%,F$,CHR$(ASC(X$)+32%))<>0%) 1880 DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 1890 REM ---DELETE 1900 ONERRORGOTO 1970 : ; CUR(23%,0%)'Fr.o.m. vilken byte'; : INPUT Y% : Y%=Y%-1% 1910 ; CUR(23%,0%)'Hur m}nga tecken'; : INPUT \% : ONERRORGOTO 0 1920 POKE 65408%,256%-\%-Y%,0%,62720%+Y%,SWAP%(62720%+Y%),62720%+Y%+\%,SWAP%(62720%+Y%+\%) 1930 POKE -110%,176% : Z%=CALL(65414%) 1940 FOR X%=62975% TO 62976%-\% STEP -1% 1950 POKE X%,255% : NEXT X% 1960 Z%=CALL(24675%,SWAP%(T%)+32%*S%) 1970 GOSUB 2390 : GOTO 690 1980 REM ---INSERT 1990 ; CUR(23%,0%)'Ascii,Hex eller Decimalt'; : INPUT A$ : A$=CHR$(ASC(A$) AND 223%) 2000 \%=INSTR(1%,'AHD',A$) : IF \%=0% THEN 2370 2010 ON \% GOTO 2030,2070,2190 2020 REM ---ASCII INPUT 2030 E%=1% : ; 'Skriv en str{ng:'; 2040 INPUTLINE A$ : A$=LEFT$(A$,LEN(A$)-2%) : IF A$='' ; 2050 GOTO 2280 2060 REM ---HEX INPUT 2070 E%=2% : ; 'Skriv en HEX-str{ng:'; 2080 INPUTLINE A$ : IF LEN(A$)<4% THEN A$='' : ; : GOTO 2170 2090 FOR X%=1% TO LEN(A$) 2100 \%=ASC(A$) : A$=RIGHT$(A$,2%) 2110 IF (\%>47% AND \%<58%) OR (\%>64% AND \%<71%) THEN B$=B$+CHR$(\%) 2120 NEXT X% : A$='' 2130 FOR X%=1% TO LEN(B$)/2%*2% STEP 2% 2140 IF LEN(B$)<2% THEN 2170 2150 A$=A$+CHR$((INSTR(1%,H$,MID$(B$,X%,1%))-1%)*16%+INSTR(1%,H$,MID$(B$,X%+1%,1%))-1%) 2160 NEXT X% : B$='' 2170 GOTO 2280 2180 REM ---DECIMAL INPUT 2190 E%=3% : A$='' : C$='' : ; 'Skriv decimala tal med "," emellan:' 2200 INPUTLINE D$ : D$=LEFT$(D$,LEN(D$)-1%) 2210 FOR X%=1% TO LEN(D$) 2220 B$=MID$(D$,X%,1%) 2230 IF ASC(B$)<48% OR ASC(B$)>57% THEN GOSUB 2250 ELSE C$=C$+B$ 2240 NEXT X% : GOTO 2280 2250 IF C$='' 2260 ELSE A$=A$+CHR$(VAL(C$)) : B$='' : C$='' 2260 RETURN 2270 REM ---INSERT 2280 IF A$='' GOTO 1990 2290 \%=LEN(A$) 2300 ONERRORGOTO 2380 : ; : ; 'Fr.o.m. vilken byte'; : INPUT Y% : Y%=Y%-1% : ONERRORGOTO 0 2310 POKE 65408%,256%-\%-Y%,0%,62975%,SWAP%(62975%),62975%-\%,SWAP%(62975%-\%) 2320 POKE -110%,184% : Z%=CALL(65414%) 2330 FOR X%=Y% TO \%+Y%-1% 2340 POKE 62720%+X%,ASC(MID$(A$,X%-Y%+1%,1%)) 2350 NEXT X% 2360 Z%=CALL(24675%,SWAP%(T%)+32%*S%) 2370 GOSUB 2390 : GOTO 690 2380 ON E% GOTO 2030,2070,2190 2390 REM ---HUVUD 2400 ; CHR$(12%);"DRIVE:";RIGHT$(NUM$(D1%),2%)" TRACK:";RIGHT$(NUM$(T%),2%)TAB(16%)" SECTOR:";RIGHT$(NUM$(S%),2%); 2410 IF K2% ; CUR(0%,8%)SPACE$(9%); : T%=0% 2420 RETURN 2430 REM ---PAUS 2440 K3%=PEEK(65011%) : GOSUB 2510 : POKE 65011%,K3% 2450 IF INP(56%)=17% OR INP(56%)=145% POKE FNC%,PEEK(FNC%) AND 127% : RETURN 2460 POKE FNC%,PEEK(FNC%) OR 128% : REM ; CUR(0%,39%); 2470 IF INP(56%)=26% OR INP(56%)=154 POKE FNC%,PEEK(FNC%) AND 127% : GOSUB 2510 : GOTO 560 ELSE 2450 2480 REM ---SECTOR MARK 2490 IF K2% THEN K2%=0% ELSE K2%=1% 2500 GOTO 370 2510 REM ---RENSA 2520 FOR X%=PEEK(65011%) TO 22% : ; CUR(X%,0%);SPACE$(40%); : NEXT X% : RETURN 2530 REM ---SECTORCHECK 2540 IF K2% THEN 2570 2550 IF S%<0% THEN T%=T%-1% : S%=7% 2560 IF T%<0% THEN T%=0% : S%=0 2570 IF K2% IF S%<0% S%=0% 2580 RETURN 2590 REM ---F\RKLARANDE TEXT 2600 ; CHR$(12%);TAB(11%)'L[SDISK2' : ; TAB(10%);CHR$(23%)STRING$(10%,35%) 2610 ; : ; TAB(8%)'OPTIONS (MENY)' 2620 ; 2630 ; ' MED "0" ELLER "1" [LJER DU DRIVE.' 2640 ; ' GENOM ATT ANGE "H" S] F]R DU' 2650 ; ' DEN AKTUELLA SEKTORN UTSKRIVEN I' 2660 ; ' HEXFORMAT, OCH MED "D" DECIMALA TAL' 2670 ; ' ASCII TECKNEN SKRIVS UT TILL H\GER' 2680 ; ' OCH EJ TRYCKBARA TECKEN SKRIVS "."' 2690 ; ' MED "A" F]R DU ASCII TECKNEN' 2700 ; ' DIREKT P] SK[RMEN. EJ TRYCKBARA' 2710 ; ' TECKEN MARKERAS MED MELLANSLAG.' 2720 ; ' MED "P" F]R DU P] PRINTERN.' 2730 ; ' MED "S" S[TTER DU VAL S[TT' 2740 ; ' VID VAL AV SEKTOR.' 2750 ; ' MED "?" F]R DU DENNA HJ[LPTEXT.' 2760 ; : ; : ; TAB(13%)'(RETURN)'; : INPUTLINE A$ : ; CHR$(12%); 2770 ; TAB(11%)'L[SDISK2' : ; TAB(10%);CHR$(23%)STRING$(10%,35%) 2780 ; : ; TAB(8%)'KOMMANDO (RUTIN)' : ; 2790 ; ' MED RETURN S] F]R DU N[STA SEKTOR' 2800 ; ' MED "^" F]R DU F\REG]ENDE SEKTOR' 2810 ; ' MED "I" MATAR MAN IN TECKEN' 2820 ; ' MED "D" TAR MAN BORT TECKEN' 2830 ; ' MED "M" F]R DU MENY' 2840 ; ' F\R ATT STOPPA FRAM BL[DRINGEN' 2850 ; ' AV BYTEN I SEKTORN KAN MAN STANNA,' 2860 ; ' ELLER G]TILL BAKA TILL VAL AV' 2870 ; ' SEKTOR. F\R DETTA ANV[NDER MAN' 2880 ; ' F\LJANDE TANGENTER:' 2890 ; 2900 ; ' (ctrl)' 2910 ; ' "S" - STOPP' 2920 ; ' "Q" - K\R IGEN' 2930 ; ' "Z" - TILL VAL AV SEKTOR' 2940 ; ' ([VEN VID STOPP)' 2950 ; : ; : ; TAB(13%)'(RETURN)'; : INPUTLINE A$ 2960 RETURN