10 REM FDISK.BAS FOR IDE-DRIVE 20 REM CONNECTED AT D100 OR D500 30 REM DESIGNED BY SIMON-SOFT 40 POKE 710,0:BUF=32767:FOUT=1 50 DIM INFO(6):PARA=1:DIM A$(1) 60 ? "$)" 70 REM --- DETECT HARDDISK --- 80 PORT=53504 110 A=PEEK(PORT+7) 120 IF A<128 THEN 200 130 PORT=54528 135 A=PEEK(PORT+7) 140 IF A<128 THEN 200 150 ? "NO HARDDISK FOUND!" 160 ? :? "CHECK POWER/CABLE" 170 ? "CHECK JUMPERS" 180 ? :? "THEN RUN FDISK AGAIN" 190 END 200 ? "$)CREATING MACHINE-CODE, PLEASE WAIT" 203 ? 204 IF PORT=53504 THEN ? "INTERNAL"; 205 IF PORT=54528 THEN ? "EXTERNAL"; 206 ? " INTERFACE DETECTED" 209 GOSUB 3001 210 GOSUB 760 220 ? "$)FDISK UTILITY VERSION 1.1" 230 ? "SIMON-SOFT 2000" 240 ? 250 IF PARA=1 THEN GOSUB 1360 260 IF PARA=-1 THEN GOSUB 1440 270 ? 280 ? "1: DRIVE PARAMETERS" 290 ? "2: ERASE PARTITIONS" 300 ? "3: PARTITIONS <-> PARAMETERS" 310 ? "4: MAKE PARTITION" 320 ? "5: DELETE PARTITION" 330 ? "6: SAVE & EXIT" 340 ? "7: EXIT" 350 TRAP 360 360 POSITION 2,21 370 INPUT A 390 IF A<0 OR A>7 THEN 360 400 IF A=1 THEN GOSUB 480:GOTO 220 410 IF A=2 THEN GOSUB 2330:GOTO 220 420 IF A=3 THEN PARA=PARA*-1:GOTO 220 430 IF A=4 THEN GOSUB 1600:GOTO 220 440 IF A=5 THEN GOSUB 2130:GOTO 220 450 IF A=6 THEN GOSUB 990:END 460 IF A=7 THEN END 465 POSITION 2,22:? " " 470 GOTO 350 480 REM --- AUTO DETECT --- 481 ? "$)AUTO-DETECT OR MANUAL-INPUT" 482 INPUT A$ 483 IF A$(1,1)="A" THEN 499 484 ? "CYLINDERS";:INPUT CYL:CYL=CYL-1 485 ? "HEADS ";:INPUT HD:HD=HD-1 486 ? "SECTORS ";:INPUT SC 487 CH=INT(CYL/256) 488 CL=CYL-CH*256 489 POKE BUF+1,CL 490 POKE BUF+2,CH 491 POKE BUF+3,HD 492 POKE BUF+4,SC 493 POKE BUF+5,0:PART=0 498 RETURN 499 HD=-1:SC=1:CL=0:CH=0 500 HD=HD+1 505 IF HD=16 THEN 530 510 GOSUB 1120 520 IF A=0 THEN 500 530 HD=HD-1:? "HEADS ";HD+1 540 SC=SC+1 545 IF SC=65 THEN 570 550 GOSUB 1120 560 IF A=0 THEN 540 570 SC=SC-1:? "SECTORS ";SC 580 CH=CH+1 585 IF CH=256 THEN 610 590 GOSUB 1120 600 IF A=0 THEN 580 610 CH=CH-1 620 CL=CL+1 625 IF CL=256 THEN 650 630 GOSUB 1120 640 IF A=0 THEN 620 650 CL=CL-1:? "CYLINDERS ";CH*256+CL+1 660 FOR I=1 TO 255 670 POKE (BUF+I),0 680 NEXT I 700 POKE BUF+1,CL 710 POKE BUF+2,CH 720 POKE BUF+3,HD 730 POKE BUF+4,SC 740 CYL=CH*256+CL 750 RETURN 755 REM --- GET TRACK0,SEC0,HD0 760 A=USR(6*256,33) 920 CL=PEEK(BUF+1) 930 CH=PEEK(BUF+2) 940 HD=PEEK(BUF+3) 950 SC=PEEK(BUF+4) 960 CYL=CL+CH*256 970 PART=PEEK(BUF+5) 980 RETURN 990 REM --- PUT TRACK0,SEC0,HD0 1000 A=USR(6*256,49) 1110 RETURN 1120 REM --- READ DRIVE,A=0 ERROR 1130 POKE PORT+2,1 1140 POKE PORT+3,SC 1150 POKE PORT+4,CL 1160 POKE PORT+5,CH 1170 POKE PORT+6,HD 1180 POKE PORT+7,33 1190 A=255 1250 B=PEEK(PORT+7) 1260 IF B=8 THEN RETURN 1270 IF B>127 THEN B=B-128 1280 IF B>63 THEN B=B-64 1290 IF B>31 THEN B=B-32 1300 IF B>15 THEN B=B-16 1310 IF B>7 THEN B=B-8 1320 IF B>3 THEN B=B-4 1330 IF B>1 THEN B=B-2 1340 IF B=0 THEN A=0 1350 RETURN 1360 REM --- PARA INFO --- 1370 ? "HARDDISK PARAMETERS:" 1380 ? "CYLINDERS :";CYL+1 1390 ? "HEADS :";HD+1 1400 ? "SECTORS :";SC 1410 ? "PARTITIONS:";PART 1420 ? :? :? :? 1430 RETURN 1440 REM --- PART INFO --- 1450 ? "HARDDISK PARTITIONS:" 1460 ? "DRV-N CYL-S CYL-E SECT. SIZE DENS." 1470 FOR I=1 TO 8 1480 INFO(2)=PEEK(BUF+I*8+2)+PEEK(BUF+I*8+3)*256 1490 INFO(3)=PEEK(BUF+I*8+4)+PEEK(BUF+I*8+5)*256 1500 INFO(1)=PEEK(BUF+I*8+1) 1510 INFO(6)=(PEEK(BUF+I*8+6)+1)*128 1520 INFO(4)=(INFO(3)-INFO(2))*(HD+1)*SC 1525 IF INFO(4)>65535 THEN INFO(4)=65535 1530 INFO(5)=INT(INFO(4)*INFO(6)/1024) 1540 IF INFO(1)=0 THEN ? :GOTO 1580 1550 FOR J=1 TO 6 1560 POSITION J*6-4,I+4:? INFO(J) 1570 NEXT J 1580 NEXT I 1590 RETURN 1600 REM --- MAKE PARTITION --- 1680 MAX=CYL 1690 POSITION 2,22:? " " 1695 POSITION 2,22:TRAP 1690 1700 ? "DRIVE-NUMBER";:INPUT DRV 1720 IF DRV>0 AND DRV<9 THEN GOTO 1730 1725 POSITION 20,21:? "ENTER 1-8" 1728 GOTO 1690 1729 POSITION 20,21:? " " 1730 A=255 1740 FOR I=1 TO PART 1750 IF DRV=PEEK(BUF+I*8+1) THEN A=0 1760 NEXT I 1770 IF A=255 THEN 1815 1780 POSITION 20,21:? "DRIVE PRESENT" 1790 GOTO 1690 1815 POSITION 20,21:? " " 1816 POSITION 2,22:? " " 1817 POSITION 2,22:TRAP 1815 1820 ? "NUMBER OF SECTORS :";:INPUT SEC 1830 IF SEC>65535 THEN POSITION 20,21:? "MAX = 65535!":GOTO 1816 1832 POSITION 20,21:? " " 1835 POSITION 2,22:? " " 1836 POSITION 2,22:TRAP 1835 1840 ? "DENSITY LO/HI (0/1):";:INPUT DENS 1845 IF DENS<0 OR DENS>1 THEN 1835 1860 A=PART+1 1865 LENGTE=INT(SEC/(HD+1)/SC)+1 1870 STALO=PEEK(BUF+PART*8+4) 1880 STAHI=PEEK(BUF+PART*8+5) 1890 IF PART=0 THEN STAHI=0:STALO=1 1900 LENHI=INT(LENGTE/256) 1910 LENLO=LENGTE-LENHI*256 1920 EINHI=STAHI+LENHI 1930 EINLO=STALO+LENLO 1940 IF EINLO>255 THEN EINLO=EINLO-256:EINHI=EINHI+1 1950 IF (EINLO-1+EINHI*256)>(PEEK(BUF+1)+PEEK(BUF+2)*256) THEN 2050 1960 POKE BUF+A*8+1,DRV 1970 POKE BUF+A*8+2,STALO 1980 POKE BUF+A*8+3,STAHI 1990 POKE BUF+A*8+4,EINLO 2000 POKE BUF+A*8+5,EINHI 2010 POKE BUF+A*8+6,DENS 2020 PART=PART+1 2030 POKE (BUF+5),PART 2040 RETURN 2050 ? "DISK IS FULL" 2060 LEFTLO=PEEK(BUF+1)-STALO 2070 LEFTHI=PEEK(BUF+2)-STAHI 2080 LEFT=(LEFTLO+LEFTHI*256)*SC*HD 2090 IF LEFT<0 THEN 220 2100 SEC=LEFT:GOTO 1865 2130 REM --- ERASE PART --- 2140 POSITION 2,22 2150 DRV=PEEK(BUF+PART*8+1) 2160 ? "PRESS Y ERASES DRIVE:";DRV 2170 B=PEEK(764):IF B=255 THEN 2170 2180 POKE 764,255:IF B<>43 THEN 2240 2190 FOR I=1 TO 8 2200 POKE (BUF+PART*8+I),0 2210 NEXT I 2220 PART=PART-1 2230 POKE (BUF+5),PART 2240 RETURN 2330 REM --- ERASE ALL PARTS --- 2340 POSITION 2,22 2360 ? "PRESS Y ERASE DRIVE!:" 2370 B=PEEK(764):IF B=255 THEN 2370 2380 POKE 764,255:IF B<>43 THEN 2440 2390 FOR I=9 TO 256 2400 POKE (BUF+I),0 2410 NEXT I 2420 PART=0 2430 POKE (BUF+5),PART 2440 RETURN 3001 REM --DATA MACHINE-CODE-- 3002 FOR I=0 TO 78 3003 READ A 3004 POKE 6*256+I,A 3005 NEXT I 3006 IF PORT=54528 THEN GOTO 4002 3007 RETURN 3010 DATA 104,104,104,133,192,169,1,141,2,209,141,3,209,169,0,141,4,209,141,5,209,141,6,209,165,192 3020 DATA 201,49,240,5,201,33,240,23,96,141,7,209,173,7,209,41,8,240,249,162,0,189,0,128,141 3030 DATA 0,209,232,208,247,96,141,7,209,173,7,209,41,8,240,249,162,0,173,0,209,157,0,128,232 3040 DATA 208,247,96 4002 FOR I=0 TO 78 4003 READ A 4004 POKE 6*256+I,A 4005 NEXT I 4006 RETURN 4010 DATA 104,104,104,133,192,169,1,141,2,213,141,3,213,169,0,141,4,213,141,5,213,141,6,213,165,192 4020 DATA 201,49,240,5,201,33,240,23,96,141,7,213,173,7,213,41,8,240,249,162,0,189,0,128,141 4030 DATA 0,213,232,208,247,96,141,7,213,173,7,213,41,8,240,249,162,0,173,0,213,157,0,128,232 4040 DATA 208,247,96