Listing of file='DSKZAP.BAS;01' on disk='vmedia/modified_utilities-sector.ccvf'
1000 PLOT 6,2,27,24,12 1003 PRINT 1005 PRINT " C A U T I O N " 1010 PRINT "THIS PROGRAM LETS YOU CHANGE ANY DISK DATA" 1020 PRINT "IN PLACE." 1030 PRINT "YOU PICK A SECTOR ADDRESS AND IT IS DISPLAYED" 1040 PRINT "ON THE SCREEN IN BOTH HEX AND ASCII" 1050 PRINT "YOU MOVE THE CURSOR OVER EITHER THE HEX OR ASCII" 1060 PRINT "DATA AND CHANGE IT AS DESIRED." 1070 PRINT "WHEN YOU HIT RETURN THE SECTOR IS WRITTEN BACK" 1080 PRINT "THIS CAN BE USEFUL FOR PATCHING A DIRECTORY WHEN" 1090 PRINT "A DISK GETS AN ERROR IN THE MIDDLE OF A DELETE, ETC." 1100 PRINT :PRINT "NOTE - IF YOU DO NOT ENTER + FIRST, THE NUMBER IS" 1110 PRINT "TAKEN AS HEXADECIMAL.":PRINT 1117 GOSUB 58000:REM LOAD KEYBOARD PATCH 1118 CLEAR 100 1120 PRINT "TO READ DRIVE 1 & WRITE DRIVE 0 - ENTER 1," 1125 INPUT "PRESS ENTER ONLY FOR SINGLE DISK - ";X 1140 REM THIS SELECTION ENABLES WRITE PROTECTION. 1210 PRINT 1230 U= PEEK (33010):REM DRIVE SELECTION 1240 IF U= 48THEN Q$= "0:":W$= "0:" 1250 IF U= 49THEN Q$= "1:":W$= "1:" 1260 IF X= 1THEN Q$= "1:":W$= "0:" 1400 INPUT "ENTER SECTOR ADDRESS AS HEX OR +DEC - ";S$ 1410 PLOT 12 1420 SB= 28672:REM BASE FOR SCREEN REFRESH RAM 1600 CI$= S$:GOSUB 50000:AD= CO 1700 DI= AD:GOSUB 52000:S$= DO$ 2000 PRINT "SECTOR ADDRESS ";AD;"[";S$;"]" 2200 BF= PEEK (32986)+ 256* PEEK (32987) 2400 BF= INT ((BF+ 200+ 256)/ 256)* 256 2600 DI= BF:GOSUB 52000:BF$= DO$ 2800 DI= BF+ 127:GOSUB 52000 3000 BF$= BF$+ "-"+ DO$ 3600 FS$= "READ"+ Q$+ S$+ " "+ BF$ 3800 PRINT FS$ 4000 PLOT 27,4:PRINT FS$:PLOT 27,27 4300 SY= 6:SX= 0:REM INITIAL SCREEN WRITE POS 4400 PLOT 3,64,0 5000 FOR IP= BFTO BF+ 127STEP 16 5200 DI= IP- BF:GOSUB 52000 5400 SA= SB+ 2* (64* SY+ SX) 5405 AA= SA+ 92:POKE AA,42:POKE AA+ 34,42:AA= AA+ 2 5410 FOR N= 1TO 4 5430 POKE SA,ASC (MID$ (DO$,N,1)) 5440 SA= SA+ 2 5450 NEXT N 5460 SA= SA+ 4:REM " " 6000 FOR J1= 0TO 3 6200 FOR J2= 0TO 3 6400 BA= IP+ 4* J1+ J2:REM BYTE ADDRESS 7000 HI= PEEK (BA) 7200 GOSUB 51000 7400 POKE SA,ASC (LEFT$ (HO$,1)):SA= SA+ 2 7410 POKE SA,ASC (RIGHT$ (HO$,1)):SA= SA+ 2 7420 POKE AA,HI:AA= AA+ 2 7430 IF HI< 32 THEN POKE AA- 1,1:GOTO 7600 7440 IF HI> 96 THEN POKE AA- 1,1 7600 NEXT J2 7800 SA= SA+ 4 8000 NEXT J1 8200 SY= SY+ 1:SX= 0 8600 NEXT IP 10000 REM SETUP KEYBD READ 10050 PLOT 27,27 10100 SY= 6:SX= 6:PLOT 3,6,6:SA= SB+ 780:AA= SA+ 82:IP= BF:DX= 0:DY= 0 10200 GOTO 31500 15000 REM READ KEYBOARD 15100 KY= CALL (5):IF KY= - 1 THEN 15100 15200 IF KY= 10 THEN DY = 1:GOTO 30000 15300 IF KY= 28 THEN DY = - 1:GOTO 30000 15400 IF KY= 26 THEN DX = - 1:GOTO 30000 15500 IF KY= 25 THEN DX = 1:GOTO 30000 15505 IF KY= 9 THEN 17000 15507 IF KY= 13 THEN 18000 15510 IF SX> 46 THEN 16000 15520 IF KY< 48 OR KY> 70 OR (KY< 65AND KY> 57) THEN 15000 15600 POKE SA,KY 15610 N= SX AND - 2:N= SB+ 2* (64* SY+ N) 15615 CI$= CHR$ (PEEK (N))+ CHR$ (PEEK (N+ 2)):GOSUB 50000 15620 POKE N+ 1,34:POKE N+ 3,34:POKE IP,CO:POKE AA,CO:POKE AA+ 1,34 15630 IF (CO< 32) OR (CO> 96) THEN POKE AA+ 1,33 15700 REM TESTHI=KY:GOSUB51000:PLOT 27,12,3,40,30:PRINTKY;" ";HO$ 15800 GOTO 31300 16000 REM ALPHA UPD 16010 POKE AA,KY:POKE AA+ 1,34:POKE IP,KY:HI= KY:GOSUB 51000 16015 IF HI< 32 OR HI> 96 THEN POKE AA+ 1,33 16020 POKE SA,ASC (LEFT$ (HO$,1)):POKE SA+ 1,34:POKE SA+ 2,ASC (RIGHT$ (HO$,1)):POKE SA+ 3,34 16030 GOTO 15700 17000 REM : TAB KEY 17010 IF SX> 46 THEN 17100 17020 GOSUB 31900:N= INT ((SX- 6)/ 10):SA= 4* INT (SA/ 4) 17030 SX= 47+ 4* N+ INT (((SX- 6)- 10* N)/ 2):GOTO 31500 17100 GOSUB 31900:N= INT ((SX- 47)/ 4) 17110 SX= 6+ 10* N+ (SX- 47- 4* N)* 2:GOTO 31500 18000 REM : RETURN/ENTER 18010 FS$= "WRITE"+ W$+ S$+ " "+ BF$ 18020 PLOT 3,0,1,11:PRINT FS$ 18030 PLOT 27,4:PRINT FS$:PLOT 27,27 18040 PLOT 3,0,30:GOTO 1400 30000 REM :CURSOR DIRECTION KEYS 30100 IF DY = 0 THEN 30700 30200 IF DY> 0 THEN 30500 30300 IF SY< 7 THEN 15000:REM -Y 30400 GOSUB 31900:SY= SY- 1:SA= SA- 128:AA= AA- 128:IP= IP- 16:GOTO 31500 30500 IF SY> 12 THEN 31500:REM +Y 30600 GOSUB 31900:SY= SY+ 1:SA= SA+ 128:AA= AA+ 128:IP= IP+ 16:GOTO 31500 30700 IF DX= 0 THEN 15000:REM CUR X 30800 IF DX> 0 THEN 31300 30900 IF SX< 7 THEN 15000:REM -X 30950 GOSUB 31900 31000 IF SX= 47 THEN SX= 42:SA= SA+ 72:AA= AA- 30:IP= IP+ 15:GOTO 31500 31005 IF SX< 44 THEN 31100 31010 N= SX- 46:IF (N AND 3) = 0 THEN SA = SA - 4 31020 SX= SX- 1:SA= SA- 4:AA= AA- 2:IP= IP- 1:GOTO 31500 31100 N= SX- 16:IF INT (N/ 10)= N/ 10 THEN SX= SX- 2:SA= SA- 4 31200 SX= SX- 1:SA= SA- 2:IF (SX AND 1)= 1 THEN AA= AA- 2:IP= IP- 1 31205 GOTO 31500 31300 GOSUB 31900:IF SX= 62 THEN SX= 6:SA= SA- 72:AA= AA- 30:IP= IP- 15:GOTO 30500:REM +X 31303 IF SX= 43 THEN SX= 47:SA= SA- 74:AA= AA- 30:IP= IP- 15:GOTO 31500 31305 IF SX< 44 THEN 31400 31310 N= SX- 46:IF (N AND 3) = 0 THEN SA = SA + 4 31320 SX= SX+ 1:SA= SA+ 4:AA= AA+ 2:IP= IP+ 1:GOTO 31500 31400 N= SX- 13:IF INT (N/ 10)= N/ 10 THEN SX= SX+ 2:SA= SA+ 4 31450 SX= SX+ 1:SA= SA+ 2:IF (SX AND 1)= 0 THEN AA= AA+ 2:IP= IP+ 1 31455 GOTO 31500 31500 REM COMMON MOVE CURSOR 31540 HI= PEEK (IP):GOSUB 51000 31549 GOTO 31600:REM BYPASS DIAG AID 31550 PLOT 27,12,3,0,30:PRINT "SX/SY/SA/AA/IP ";SX;" ";SY;" ";SA;" ";AA;" ";IP;" ";HO$;" " 31600 IF SX> 46 THEN POKE SA+ 1,PEEK (SA+ 1) OR 64:POKE SA+ 3,PEEK (SA+ 3)OR 64:GOTO 31800 31700 POKE AA+ 1,PEEK (AA+ 1) OR 64 31800 DX= 0:DY= 0:PLOT 3,SX,SY:GOTO 15000 31900 POKE SA+ 1,PEEK (SA+ 1)AND 191:POKE AA+ 1,PEEK (AA+ 1)AND 191 32000 POKE SA+ 3,PEEK (SA+ 3)AND 191 32100 RETURN 50000 REM CONVERT HEX STRING IN CI$ TO ARITH IN CO 50010 CO= 0 50020 IF MID$ (CI$,1,1)= "+"THEN CO= VAL (CI$):RETURN 50030 FOR I= 1TO LEN (CI$) 50040 C1= ASC (MID$ (CI$,I,1)) 50050 C2= 16 50060 IF C1> 47AND C1< 58THEN C2= C1- 48 50070 IF C1> 64AND C1< 71THEN C2= C1- 55:REM HEX A-F 50080 IF C2> 15THEN PRINT "HEX INPUT ERROR ";CI$:OUT 8,255:END 50090 CO= CO* 16+ C2 50100 NEXT I 50110 RETURN 51000 REM CONVERT ARITH VALUE IN HI(0-255) TO TWO HEX CHAR 51010 REM IN HO$ 51020 IF HI< 0THEN HI= HI+ 256 51030 H0= INT (HI/ 16)+ 48:IF H0> 57 THEN H0= H0+ 7 51040 H1= (HIAND 15)+ 48:IF H1> 57 THEN H1= H1+ 7 51060 HO$= CHR$ (H0)+ CHR$ (H1) 51070 RETURN 52000 REM CONVERT TWO-BYTE VALUE TO 4-BYTE HEX STRING 52010 IF DI< 0THEN DI= DI+ 65536 52020 HI= INT (DI/ 256):GOSUB 51000:DO$= HO$ 52030 HI= (DI- HI* 256):GOSUB 51000 52040 DO$= DO$+ HO$ 52050 RETURN 58000 REM ROUTINE TO LOAD MACHINE LANGUAGE PATCH TO READ 58010 REM KEYBOARD AS EACH KEY IS PRESSED. 58110 DATA 245,229,197,62,255,211,8 58111 DATA 1,206,40,205,36,0,202,-1,-1,11 58120 DATA 121,176,194,-1,-1,29,194,-1,-1,17,255,255,195 58130 DATA -1,-1,95,175,87,62,247,211,8,62,0 58131 DATA 50,255,129,193,225,241,201 58140 REM FIND END OF BASIC RAM 58150 TM= 256* PEEK (32941)+ PEEK (32940) 58170 REM CHECK TO SEE IF ALREADY LOADED 58180 IF TM> 65503THEN 58250:REM NOT LOADED 58190 RESTORE 58110 58200 FOR I= 1TO 48:READ A 58210 IF A> 0AND A< > PEEK (TM+ I)THEN I= 48:A= 999 58220 NEXT I 58230 IF A< 256THEN 58390:REM LOADED, TO SET JUMP 58240 REM LOAD PROGRAM 58250 TM= TM- 48:RESTORE 58110 58270 FOR I= 1TO 48:READ A:POKE TM+ I,A- (A< 0):NEXT I 58280 REM LOAD ADDRESSES 58290 Z= TM+ 33:AD= TM+ 15:GOSUB 58350 58300 Z= TM+ 11:AD= TM+ 21:GOSUB 58350 58310 Z= TM+ 8:AD= TM+ 25:GOSUB 58350 58320 Z= TM+ 36:AD= TM+ 31:GOSUB 58350 58330 GOTO 58370 58340 REM LOAD ADDRESS Z AT AD,AD+1 58350 ZZ= INT (Z/ 256):POKE AD,Z- 256* ZZ:POKE AD+ 1,ZZ:RETURN 58360 REM CHANGE END OF BASIC RAM 58370 Z= TM:AD= 32940:GOSUB 58350 58380 REM LOAD BASIC JUMP LOCATION 58390 Z= TM+ 1:AD= 33283:GOSUB 58350 58400 POKE 33282,195 58420 RETURN