REM REM ************************************************* REM * Dragon file header: * REM * Start: $1201 Length: $0e57 Exec: $8b8d * REM *(Start: 04609 Length: 03671 Exec: 35725) * REM ************************************************* REM 10 :' 20 PMODE 0,1: PCLEAR 1: CLEAR 2000 30 DA= PEEK (&HBA)*256+ PEEK (&HBB) 40 D=1:T=20:S=3:DEV=0 50 SPACER$= CHR$ (13)+ CHR$ (10):SPACER$=SPACER$+SPACER$::'printer dump line 60 ERROR GO TO 1420 70 M$="VIEW": GO TO 120 80 M$="EDIT":PTR$= CHR$ (95): GO TO 120 90 GO SUB 1010: GO SUB 1020: PRINT @128,"ENTER TRACK (0-39),SECTOR (1-18);:INPUT T,S 100 IF INT (T)<>T OR T<0 OR T>39 THEN 90 110 IF INT (S)<>S OR S<1 OR S>18 THEN 90 120 GO SUB 960 130 SREAD D,T,S,SA$,SB$ 140 :' 150 X=0:V= VARPTR (SA$):AA= PEEK (V+2)*256+ PEEK (V+3):SB=AA: GO SUB 1100 170 X=0 180 GO SUB 1010:Y=DA+X: PRINT @96,X;"(&H"; HEX$ (X);")" 190 GO SUB 1140 200 IF M$="EDIT" THEN C=0:R=0: PRINT @130,PTR$; 210 IF PTR$= CHR$ (127) THEN 510 220 K$= INKEY$ : IF K$="" THEN 220 230 IF K$="F" THEN 430 240 IF K$="B" THEN 460 250 IF K$="N" THEN 90 260 IF K$="D" THEN 760::' 270 IF M$="EDIT" THEN 370 280 :' 290 IF K$="E" THEN 80 300 IF K$= CHR$ (94) THEN 340 310 IF K$<> CHR$ (10) THEN 220 320 X=X+64: IF X>255 THEN X=0 330 GO TO 180 340 X=X-64: IF X<0 THEN X=192 350 GO TO 180 360 :' 370 IF K$="V" THEN 70 380 IF K$="S" THEN 800 390 IF K$="C" THEN 500 400 GO SUB 1270 410 IF K$="" THEN 220 420 IF K$="<" THEN 340 430 IF S=18 AND T=39 THEN S=1:T=0: GO TO 120 440 S=S+1: IF S>18 THEN S=1:T=T+1 450 GO TO 120 460 IF S=1 AND T=0 THEN S=18:T=39: GO TO 120 470 S=S-1: IF S<1 THEN S=18:T=T-1 480 GO TO 120 490 :'change byte 500 PTR$= CHR$ (127): PRINT @127+(C*3)+3+(R*32),PTR$;: GO SUB 1070 510 K$= INKEY$ : IF K$="" THEN 510 520 IF K$= CHR$ (13) THEN GO SUB 1050:PTR$= CHR$ (95): PRINT @130+(C*3)+(R*32),PTR$;: GO TO 22 530 :'CHECK FOR 0-9,A-F FIRST 540 A= ASC (K$)-48 550 IF A<0 THEN 600 560 IF A<10 THEN 640 570 A=A-7 580 IF A>9 AND A<16 THEN 640 590 :'not hex so check for array keys 600 GO SUB 1270 610 IF K$="" THEN 510 : ELSE 420 620 :'change byte in work area+display 630 :'move right hand side of byte to left & put hex value entered in right half (nibble) 640 B= PEEK (DA+X+((C+1)+(R*8))-1) 650 :' 660 B=(B AND 15)*16 670 :' STORE UPDATED BYTE VALUE IN 680 POKE (DA+X+((C+1)+(R*8))-1),B+A 690 :' 700 POKE 1152+(C*3)+(R*32), PEEK (1153+(C*3)+R*32)) 710 PRINT @129+(C*3)+(R*32),K$; 720 IF A+B<32 THEN K$=".": ELSE K$= CHR$ (B+A) 730 PRINT @152+C+(R*32),K$ 740 GO TO 510 750 :' 760 GO SUB 1020: PRINT @448," DUMPING TO PRINTER IN PROGRESS" 770 DEV=2: GO SUB 980:OX=X: FOR X=0 TO 255 STEP 64: GO SUB 1140: NEXT X: PRINT #-DEV,SPACER$:X=OX 780 DEV=0: GO SUB 1040: GO TO 220 790 :' 800 GO SUB 1020: PRINT @451,"WRITE THIS SECTOR TO DISK": PRINT @484,"ARE YOU SURE? (Y IF SO)"; 810 K$= INKEY$ : IF K$="" THEN 810 820 IF K$<>"Y" THEN 950 830 PRINT @481,"CORRECT DISK IN THE DRIVE?(Y); 840 K$= INKEY$ : IF K$="" THEN 840 850 IF K$<>"Y" THEN 950 860 GO SUB 1020: PRINT @451,"SAVING TO DISK IN PROGRESS" 870 :' 880 FOR XX=0 TO 127 890 POKE (SA+XX), PEEK (DA+XX) 900 NEXT XX 910 FOR XX=0 TO 127 920 POKE (SB+XX), PEEK (DA+128+XX) 930 NEXT XX 940 SWRITE D,T,S,SA$,SB$ 950 GO SUB 950 960 GO SUB 970: GO SUB 990: GO SUB 1030: RETURN 970 CLS : PRINT @9,"DISK DETECTIVE": PRINT @28,M$;: RETURN 980 PRINT #-DEV,SPACER$: PRINT #-DEV,M$::' PRINTER DUMP LINE 990 PRINT #-DEV,"DRIVE";D;" TRACK";T;" SECTOR";S: RETURN 1000 PRINT @P, STRING$ (31," ");: RETURN 1010 PRINT @96,"": FOR P=1 TO 8: PRINT : NEXT P: RETURN 1020 PRINT @448,"": PRINT STRING$ (31," ");: RETURN 1030 P=64: GO SUB 1000:P=416: GO SUB 1000 1040 IF M$="VIEW" THEN GO SUB 1020: PRINT @448,"UP/DOWN ARROWS; FORWARD; BACK; DUMP TO PRINTER; NEW ADDR; EDIT"; 1050 IF M$="EDIT" THEN GO SUB 1020: PRINT @448,"ARROW KEYS=POINTER; CHANGE BYTE;SAVE NEW SECTOR; VIEW; F,B,N,D"; 1060 RETURN 1070 GO SUB 1020: PRINT @448,"IN CHANGE BYTE MODE; ENTER KEY TO EXIT MODE;ARROW KEYS=POINTER"; 1080 RETURN 1090 :' 1100 XX=0: FOR X=X TO X+127 1110 POKE (DA+X), PEEK (AA+XX) 1120 XX=XX+1: NEXT X: RETURN 1130 :' 1140 FOR XX=X TO X+63 STEP 8 1150 Y=DA+XX: FOR P=1 TO 8 1160 V= PEEK (Y): IF V<16 THEN PRINT #-DEV,"0"; 1170 PRINT #-DEV, HEX$ (V);" "; 1180 Y=Y+1: NEXT P 1190 Y=DA+XX: FOR P=1 TO 8 1200 V= PEEK (Y) 1210 IF V<32 THEN PRINT #-DEV,".";: GO TO 1240 1220 IF DEV=2 AND V>127 THEN V=V-128: GO TO 1210 1230 PRINT #-DEV, CHR$ (V); 1240 Y=Y+1: NEXT P: IF DEV=2 THEN PRINT #-DEV,"" 1250 NEXT XX: RETURN 1260 :' 1270 A= ASC (K$)-7:K$="" 1280 IF A<0 OR A>87 THEN 1410 1290 IF A<4 THEN 1320 1300 IF A=87 THEN A=4 : ELSE 1410 1310 A=4 1320 PRINT @130+(C*3)+(R*32)," "; 1330 ON A GO TO 1340,1360,1390,1380 1340 IF C=0 THEN C=7 : ELSE C=C-1 1350 FOR O 1400 1360 IF C=7 THEN C=0 : ELSE C=C+1 1370 GO TO 1400 1380 IF R=0 THEN K$="<": GO TO 1410 : ELSE R=R-1: GO TO 1400 1390 IF R=7 THEN K$=">": GO TO 1410 : ELSE R=R+1 1400 PRINT @130+(C*3)+(R*32),PTR$; 1410 RETURN 1420 PRINT ERR , ERL : STOP