100 Ufd=-1 ! S{tts till -1 om UFD-dos annars till 0 101 ! 102 DIM Bitmap(79) 103 DIM Sektadr(2) 104 DIM Mask(7) 105 DIM Original(2) 106 DIM Kopia(2) 107 ! 108 ! 109 ! ---------------------------------------------------------------- 110 DEF FNKop LOCAL Original,Kopia,Curpos,Ec,Z ! F|r ABC830 111 ! -------------------------------------------------------------- 112 ! 113 ! 114 ! 115 ! 116 ; 117 ; 'ABC800 - Helkopia Vers: 1.0' 118 ; 119 INPUT 'Original i drive: 'Original 120 WHILE Original<0 OR Original>1 121 INPUT 'Original i drive: 'Original 122 WEND 123 INPUT 'Kopia i drive: 'Kopia 124 WHILE Kopia<0 OR Kopia>1 125 INPUT 'Kopia i drive: 'Kopia 126 WEND 127 ; 128 ; 'Kopierar sektor(0-639): '; 129 Curpos=PEEK2(65362) 130 Z=FNHelkopia(Original,Kopia,640,32,Curpos) 131 WHILE Z 132 ; : ; CHR$(7) 133 Ec=INP(0) 134 IF Ec AND 128 ; 'Luckan |ppen.' 135 IF Ec AND 64 ; 'Skivan {r skrivskyddad.' 136 IF Ec AND 16 ; 'Disk-fel.' 137 IF Ec AND 8 ; 'Checksumma-fel.' 138 IF Ec AND 2 ; 'Felaktig beordring till disk-kontrollern.' 139 IF Ec AND 1 ; 'Upptagen.' 140 ; 'Avbryter kopieringen.' 141 Z=0 142 WEND 143 ; 144 ; 145 RETURN 0 146 FNEND 147 ! ---------------------------------------------------------------- 148 DEF FNHelkopia(Original,Kopia,Antsekt,Sektadr,Pos) LOCAL Z 149 ! -------------------------------------------------------------- 150 ! 151 ! 152 ! 153 ! 154 ! 155 ! L{s bitmapp 156 POKE -767,Original-12*Ufd 157 Z=CALL(24678,6*(1-31*( NOT Ufd))) 158 IF PEEK(-747) RETURN -1 159 FOR I=0 TO 79 160 Bitmap(I)=PEEK(62720+I) 161 NEXT I 162 ! V{lj ut kort 163 Z=FNKortval(45) 164 ! Initiera mask 165 Z=128 166 FOR I=0 TO 7 167 Mask(I)=Z 168 Z=Z/2 169 NEXT I 170 Original(0)=Original 171 Original(1)=64 OR Original 172 Original(2)=128 OR Original 173 Kopia(0)=Kopia 174 Kopia(1)=64 OR Kopia 175 Kopia(2)=128 OR Kopia 176 Maxsekt=(Antsekt-1)*Sektadr 177 FOR I=0 TO Antsekt STEP 3 178 POKE 65362,Pos,SWAP%(Pos) : ; I; 179 Sektadr(0)=Sektadr*I 180 Sektadr(1)=Sektadr(0)+Sektadr 181 Sektadr(2)=Sektadr(1)+Sektadr 182 ! 183 ! L{s buf 0-2 184 ! 185 FOR J=0 TO 2 186 IF FNVillk(Sektadr(J)) Z=FNKommando(1,Original(J),SWAP%(Sektadr(J)),Sektadr(J)) 187 IF (INP(1) AND 8)=0 OR Z RETURN -1 188 NEXT J 189 ! 190 ! Skriv buf 0-2 191 ! 192 FOR J=0 TO 2 193 IF FNVillk(Sektadr(J)) Z=FNKommando(8,Kopia(J),SWAP%(Sektadr(J)),Sektadr(J)) 194 IF (INP(1) AND 8)=0 OR Z RETURN -1 195 NEXT J 196 NEXT I 197 RETURN 0 198 FNEND 199 ! ---------------------------------------------------------------- 200 DEF FNKortval(Kort) LOCAL Z 201 ! -------------------------------------------------------------- 202 ! 203 ! Card 45 Vanligtvis flexkontrollkort 204 ! 205 ! 206 ! Reset alla I/O kort 207 Z=INP(7) 208 ! Cardselect (kortval) v{lj ut I/O kort 209 OUT 1,Kort 210 RETURN 0 211 FNEND 212 ! ---------------------------------------------------------------- 213 DEF FNKommando(C1,C2,C3,C4) 214 ! -------------------------------------------------------------- 215 ! 216 ! C1 Kommando bit 0 L{s 217 ! - bit 1 Buffert till v{rd 218 ! - bit 2 Buffert till kontroller 219 ! - bit 3 Skriv 220 ! - bit 5 Selectdrive 221 ! - bit 6 Motor on 222 ! - bit 7 223 ! 224 ! C2 bit 0-2 drive 225 ! - bit 3-5 instruktion (om instruktionsmod) 226 ! - bit 6-7 Val av buffert i controllerkortet 227 ! 228 ! 229 ! C3 Sp}r Nr 230 ! 231 ! C4 Sektor Nr 232 ! 233 ! -------------------------------------------------------------- 234 ! Kommandomod 235 WHILE INP(1) AND 64 : WEND 236 IF (INP(1) AND 8)=0 RETURN -1 237 OUT 2,0 238 ! V{nta tills klar att ta emot 239 WHILE INP(1) AND 2 : WEND 240 ! L{gg ut data 241 OUT 0,C1,0,C2,0,C3,0,C4 242 RETURN 0 243 FNEND 244 ! ---------------------------------------------------------------- 245 DEF FNVillk(Sektor) 246 ! -------------------------------------------------------------- 247 ! 248 ! 249 ! 250 ! 251 ! 252 IF Sektor>Maxsekt RETURN 0 253 ! IF Bitmap%(SWAP%(Sektor%) AND 255%) AND Mask%((I%+J%) AND 7%) RETURN -1% TAR H[NSYN TILL BITMASK 254 RETURN 1 255 FNEND 256 ! 257 ! Huvudprogram 258 Z=FNKop