Kicsit tovább fejlesztve

100 PROGRAM "FDISK.BAS"
110 REM version 0.0
120 ALLOCATE 9
130 CODE GETSEGMENT=HEX$("F7,18,67,69,C9")
140 CODE FREESEGMENT=HEX$("4D,F7,19,C9")
150 LET WS=USR(GETSEGMENT,0)
160 CLEAR SCREEN
170 EXT "IDEINFO "&HEXA$(WS,2)&",3FF0"
180 LET MAXDRIVE=SPEEK(WS,16374)
190 IF MAXDRIVE=0 THEN
200 PRINT "No Harddisk!"
210 GOTO 340
220 END IF
230 PRINT "IDE ROM at "&HEXA$(SPEEK(WS,16369),2)
240 PRINT "RAM area from "&HEXA$(SPEEK(WS,16370),2)&":"&HEXA$(SPEEK(WS,16372),2)&HEXA$(SPEEK(WS,16371),2)
250 PRINT "Detected: ";SPEEK(WS,16373);"controllers, ";MAXDRIVE;"disks"
260 PRINT "BOOT TYPE"," START SIZE"
270 FOR I=0 TO MAXDRIVE-1
280 PRINT "HDD-";I
290 CALL READS(0,I,0,1)
300 FOR J=1 TO 4
310 CALL INFO(J)
320 NEXT
330 NEXT
340 CALL USR(FREESEGMENT,WS)
350 END
360 DEF INFO(SORSZAM)
370 LET MUTATO=446+(SORSZAM-1)*16
380 LET AKTIV=SPEEK(WS,MUTATO)
390 LET TIPUS=SPEEK(WS,MUTATO+4)
400 LET KEZDET=SPEEK32(MUTATO+8)
410 LET MERET=SPEEK32(MUTATO+12)
420 IF AKTIV=0 THEN
430 PRINT " NO ";
440 ELSE
450 PRINT " YES ";
460 END IF
470 SELECT CASE TIPUS
480 CASE 0
490 PRINT "Undefinied",
500 CASE 1,11
510 PRINT "FAT-12",
520 CASE 4,20
530 PRINT "FAT-16",
540 CASE 11,12,27,28
550 PRINT "FAT-32",
560 CASE 5,15
570 PRINT "Extended",
580 CASE 6,14,22,30
590 PRINT "BigDOS",
600 CASE ELSE
610 PRINT "Other",
620 END SELECT
630 IF TIPUS<>0 THEN
640 PRINT USING "#######":KEZDET;
650 PRINT USING "#######":ROUND(MERET/2,0);
660 PRINT "Kb"
670 ELSE
680 PRINT
690 END IF
700 END DEF
710 DEF HEXA$(SZAM,HOSSZ)
720 NUMERIC I,M
730 STRING H$*8
740 LET H$=""
750 FOR I=1 TO HOSSZ
760 LET M=MOD(SZAM,16)
770 LET SZAM=(SZAM-M)/16
780 IF M<10 THEN
790 LET H$=CHR$(M+48)&H$
800 ELSE
810 LET H$=CHR$(M+55)&H$
820 END IF
830 NEXT
840 LET HEXA$=H$
850 END DEF
860 DEF READS(C,D,SS,SN)
870 EXT "IDEREAD "&HEXA$(WS,2)&","&HEXA$(C,4)&","&HEXA$(D,1)&","&HEXA$(SS,8)&","&HEXA$(SN,2)
880 END DEF
890 DEF SPEEK32(M)
900 LET SPEEK32=SPEEK(WS,M)+SPEEK(WS,M+1)*256+SPEEK(WS,M+2)*65536+SPEEK(WS,M+3)*16777216
910 END DEF