100 ! ** Format.BAC ** 101 ! ** 102 ! ** Formatterar och kontrollerar disketter. F|r ABC-800 med UFD-Dos och 103 ! ** 832/834 diskdrive. Kollat p} 802 & 806 . 110 ! ** 120 ! ** 130 ! ** (c) Paul Pries, Pl.125 Nordan}, 232 00 ARL\V, Tfn. 040-445108,445116 140 ! ** 145 ! ************************************************************************* 146 ! ** 150 ! ** F}r fritt kopieras helt eller delvis inom ABC-klubben, dock ej i 160 ! ** komersiellt syfte. Om n}gon nu m}ste vara komersiell profit|r, 170 ! ** s} g}r det bra att sl} en signal s} ber{ttar jag s} g{{{{rna vilket 180 ! ** konto det skall komma in nya friska p}..... 190 ! ** 200 ! ************************************************************************** 210 ! ** Date / Ver. / Sign. / Note 220 ! ** 87-01-15 / 1.0 / Pri / Main prog. 230 ! ** 87-01-19 / 1.1 / Pri / Checks disks too..... 240 ! ** 87-01-23 / 1.11 / Pri / Clusters, not sectors in bitmap 250 ! ** and lockoutmap. Bad bug! 260 ! ** 270 ! ** 280 ! ** 290 ! ** 300 ! ** 310 ! ************************************************************************* 320 ! ** ** 330 ! ** Initiate. ** 340 ! ** ** 350 ! ** 360 EXTEND : INTEGER 370 PRINT CHR$(12.) CUR(10,10); 380 INPUT 'Formattera drive (0/1) : 'D : IF (D<>0) AND (D<>1) PRINT CHR$(7.,7.,7.,12.) : GOTO 370 390 PRINT CUR(12,10) 'Starta med " ! " '; : GET Char$ : IF Char$<>'!' GOTO 390 ELSE PRINT CUR(12,10) SPACE$(40) 400 PRINT CUR(10,10) 'Formatterar drive : ' D SPACE$(40) 410 ! ** 420 ! ************************************************************************* 430 ! ** ** 440 ! ** Format disk ** 450 ! ** 460 ! ** 470 OUT 1,44 480 OUT 2,0 490 WHILE INP(1) AND 2 : WEND 500 OUT 0,16,0,8+D,0,0,0,79 510 WHILE (INP(1) AND 128)=0 : WEND 520 IF (INP(1) AND 8)=0 PRINT CUR(20,10) 'Controller error : ' INP(0) : GET Char$ : GOTO 470 ELSE 590 530 ! ** 540 ! ************************************************************************* 550 ! ** ** 560 ! ** Write systemtrack. ** 570 ! ** 580 ! ** 590 POKE -767,D 600 POKE 62720,255 610 FOR K1=62721 TO 62799 : POKE K1,0 : NEXT K1 620 FOR K1=62800 TO 62958 : POKE K1,255 : NEXT K1 630 POKE 62959,1 640 FOR K1=62960 TO 62975 : POKE K1,0 : NEXT K1 650 Z=CALL(24675,14) ! Write sector 14 from DOS buf 0 660 Z=FNChbuf ! * * Special fix, copy DOS buf 0 to DOS buf 1 * * 670 POKE 62975,2 680 Z=CALL(24675,15) ! Write sector 15 from DOS buf 0 690 FOR K1=62720 TO 62735 : POKE K1,0 : NEXT K1 700 FOR K1=62736 TO 62975 : POKE K1,255 : NEXT K1 710 Z=CALL(24675,16) ! Write sector 16 from DOS buf 0 720 FOR K1=62720 TO 62975 : POKE K1,255 : NEXT K1 730 FOR K=17 TO 31 : Z=CALL(24675,K) : NEXT K ! Fill rest of track 1 with 'FF' 740 ! ** 750 ! ************************************************************************* 760 ! ** 770 ! ** Check disk for errors. 780 ! ** 790 ! ** 800 FOR K1=0 TO 2559 810 PRINT CUR(14,10) 'Testar sektor : ' K1 820 Z=CALL(24678,K1) : IF PEEK(-747)>7 Badsec=FNLockout 830 NEXT K1 840 IF Badsec>0 Z=FNWritemaps 850 PRINT CUR(20,10) 'Klart ! ' 2528-Badsec ' anv{ndbara sektorer. ' 860 END 870 ! ** 880 ! ************************************************************************* 890 ! ** 900 ! ** Function declaration. 910 ! ** 920 ! ** 930 DEF FNLockout 940 B=INT(MOD(K1,16)/4)+1 : IF MOD(K1,32)=0 B=B*16 950 Addr=62976+INT(K1/32+.5) : IF PEEK(Addr)>0 B=B+PEEK(Addr) 960 POKE Addr,B 970 Badsec=Badsec+1 980 PRINT CUR(16,10) 'sektor : '; : ; USING '####' K1; : ; ' d}lig - Borttagen!' 990 RETURN Badsec 1000 FNEND 1010 ! ** 1020 ! ** 1030 DEF FNWritemaps 1035 POKE -767,D 1040 FOR K1=62720 TO 62975 : POKE K1,PEEK(K1+256) : NEXT K1 1050 Z=CALL(24675,14) ! Write bitmap 1060 POKE 62975,2 1070 Z=CALL(24675,15) ! Write lockoutmap 1080 RETURN -1 1090 FNEND 1100 ! ** 1110 ! ** 1120 DEF FNChbuf 1130 FOR K1=62720 TO 62975 : POKE K1+256,PEEK(K1) : NEXT K1 1140 RETURN -1 1150 FNEND