1000 ! UDEVIN (c) LID@N DATA 1010 ! 1020 ! - Utvecklat 1030 ! - av: LID@N DATA 1040 ! - 1050 ! - Projekt: Inl{nkning egna enheter under UFD-DOS 1060 ! - Konstrukt|r: Mikael Lid`n 1070 ! - Vers: 1.2 1080 ! - P}b|rjat: 850401 1090 ! - [ndring: 850524 1100 ! 1110 ! 1120 INTEGER : EXTEND 1130 ! Inneh}ller funktioner f|r att l{nka in egna enheter pekande till 1140 ! olika UFD:n, man kan {ven l{nka in enheter som pekar p} driven direkt, 1150 ! tex man vill alltid h{mta programmen fr}n enheten PRG:, den kan d} 1160 ! peka direkt p} MF0:. 1170 ! 1180 ! De h{r funktionerna f}r anv{ndas fritt bland medlemmar i ABC-Klubben 1190 ! f|r icke kommersiella syften, f|r kommersiella syften kontakta 1200 ! LID@N DATA tel: 0171-247 51. 1210 ! 1220 ! Exempel p} anv{ndning: 1230 ! 1240 ! Dev$(0)='PRG' : Ufd$(0)='MF0:' ; H{r pekare PRG: p} MF0: 1250 ! Dev$(1)='D' : Ufd$(1)='HD0:DATA' ; H{r pekar D: p} bibl DATA p} HD0: 1260 ! Dev$(2)='OBJ:' : Ufd$(2)='HD2:SLASK/ASM/OBJEKT' 1270 ! Z=FNUdevin(3) ; Antalet enheter anges som argument. 1280 ! CHAIN .... ; Nu b|r man g|ra chain p} n}gonting 1290 ! 1300 ! 1310 ! Den vanliga UFD: enheten kan anv{ndas som vanligt. 1320 ! Assemblerkoden laddas p} stacken och upptar 39+11*antal enheter. 1330 ! 1340 ! * 1350 ! 1360 ! L{s sektor 1370 ! 1380 DEF FNL{ssekt(Dev,Sekt) 1390 POKE -767,Dev 1400 Z=CALL(24678,Sekt) 1410 RETURN PEEK(-747) 1420 FNEND 1430 ! * 1440 ! 1450 ! L{s fil ur bibsekt 1460 ! 1470 DEF FNL{sfil(Fil,Fi$,Cluster) LOCAL F$=0,Size,Sect,Adr 1480 Adr=62720+Fil*16 1490 POKE VAROOT(F$),16,0,Adr,SWAP%(Adr),16,0 1500 Sect=PEEK(Adr)*8*Cluster+PEEK(Adr+1)/32*Cluster 1510 IF Sect=-1 RETURN 0 1520 IF Fi$=MID$(F$,5,11) RETURN Sect 1530 Size=PEEK2(Adr+2) 1540 RETURN 0 1550 FNEND 1560 ! * 1570 ! 1580 ! S|k UFD 1590 ! 1600 DEF FNUfds|k(Dev,Ufd$,Bibsect,Cluster) LOCAL I,J,A 1610 WHILE I<16 1620 Z=FNL{ssekt(Dev,I+Bibsect) 1630 J=0 1640 WHILE J<16 1650 A=FNL{sfil(J,Ufd$+'Ufd',Cluster) : IF A RETURN A 1660 J=J+1 1670 WEND 1680 I=I+1 1690 WEND 1700 RETURN 0 1710 FNEND 1720 ! * 1730 ! 1740 ! Selektkod f|r enhet 1750 ! 1760 DEF FNDevsel(Dev$) 1770 RETURN INSTR(1,'HDMFMOSF',LEFT$(Dev$+' ',2))/2*4+ASCII(RIGHT$(Dev$+' ',3))-44 1780 FNEND 1790 ! * 1800 ! 1810 ! Klusterstorlek f|r enhet 1820 ! 1830 DEF FNClusize(Dev) 1840 IF Dev>3 AND Dev<8 Cluster=32 1850 IF (Dev>7 AND Dev<12) OR (Dev>15 AND Dev<20) Cluster=4 1860 IF Dev>11 AND Dev<16 Cluster=1 1870 RETURN Cluster 1880 FNEND 1890 ! * 1900 ! 1910 ! S|k efter UFD sektor 1920 ! 1930 DEF FNS|kufd(Dev,Cluster,Ufd$) LOCAL U$=100,A$=20,P,Bibsect,Sect 1940 U$=Ufd$ : IF U$='' RETURN 0 1950 P=INSTR(1,U$,'/') 1960 IF Dev>1 Bibsect=16 ELSE Bibsect=8 1970 WHILE P<>0 1980 A$=LEFT$(U$,P-1) : U$=RIGHT$(U$,P+1) 1990 Bibsect=FNUfds|k(Dev,A$+SPACE$(8-LEN(A$)),Bibsect,Cluster) 2000 IF Bibsect=0 RETURN 0 2010 Bibsect=Bibsect+2 2020 P=INSTR(1,U$,'/') 2030 WEND 2040 Sect=FNUfds|k(Dev,U$+SPACE$(8-LEN(U$)),Bibsect,Cluster) : IF Sect=0 RETURN 0 2050 Sect=Sect+2 2060 RETURN Sect 2070 FNEND 2080 ! * 2090 ! 2100 ! L{nka in egen enhet 2110 ! 2120 DEF FNDev(A,D$,Ufdoffset,Ufdselect,Selcode) 2130 POKE A,PEEK(65403),PEEK(65404) 2140 POKE A+2,ASCII(D$),ASCII(RIGHT$(D$,2)),ASCII(RIGHT$(D$,3)) 2150 POKE A+5,Drivrut,SWAP%(Drivrut),Selcode 2160 POKE A+8,Ufdoffset,SWAP%(Ufdoffset),Ufdselect 2170 POKE 65403,A,SWAP%(A) 2180 RETURN 0 2190 FNEND 2200 ! * 2210 ! 2220 ! Drivrutin f|r egna device 2230 ! 2240 DEF FNDrivrut(A) LOCAL B,Ufd 2250 B=PEEK2(65403) 2260 WHILE CHR$(PEEK(B+2),PEEK(B+3),PEEK(B+4))<>'UFD' 2270 B=PEEK2(B) 2280 IF B=0 RETURN -1 2290 WEND 2300 Ufd=PEEK2(B+5) 2310 Drivrut=A 2320 POKE A,205,A+6,SWAP%(A+6),205,Ufd,SWAP%(Ufd) 2330 POKE A+6,229,213,197,245,221,110,4,221,102,5,17,247,255,6,3 2340 POKE A+21,35,35,35,26,78,119,235,113,35,19,16,247,241,193,209,225 2350 POKE A+37,201 2360 RETURN 0 2370 FNEND 2380 ! * 2390 ! 2400 ! L{nka in egen enhet 2410 ! 2420 DEF FNUdevin(Ant) LOCAL A,J 2430 A=PEEK2(65302)-39-11*Ant : POKE 65302,A,SWAP%(A) : POKE 65294,A-630,SWAP%(A-630) 2440 Z=FNDrivrut(A+1) : A=A+39 2450 WHILE J