1 *
2 *        MPC DISK SECTOR/CYLINDER/HEAD CONVERSION ROUTINE
3 *
6 *
7 *
10 PRINT ' CONVERT - V011 - 10/1/79'
11 PRINT ' '
12 PRINT ' '
20 PRINT 'DO YOU WANT TO INPUT A DECIMAL NUMBER (Y/N)'
30 INPUT A$
31 IF A$='END' GO TO 999
35 PRINT 'DO YOU WANT TO INPUT A RELATIVE SECTOR NUMBER (Y/N)'
40 INPUT B$
41 IF B$='END' GO TO 999
45 IF A$='N' GO TO 60
50 IF A$='Y' GO TO 80
55 GO TO 20
60 IF B$='N' GO TO 300
65 IF B$='Y' GO TO 400
70 GO TO 35
80 IF B$='N' GO TO 500
85 IF B$='Y' GO TO 600
90 GO TO 35
91 *
92 *
93 *
97  *****************************************
98  *******    SUBROUTINE             *******
99  *****************************************
100 *  CONVERT HEX TO DECIMAL  (Q$ TO D1)
101 L$=Q$(:1,1)
102 M$=Q$(:2,1)
103 N$=Q$(:3,1)
104 O$=Q$(:4,1)
105 P$=Q$(:5,1)
109 *    RIGHT JUSTIFY HEX INPUTS IF LESS THAN 5 CHARACTERS
110 IF M$=' ' GO TO 115
111 IF N$=' ' GO TO 120
112 IF O$=' ' GO TO 130
113 IF P$=' ' GO TO 140
114 GO TO 160
115 *      ONE CHARACTER ENTERED
116 P$=L$
117 GO TO 150
118 *
120 *  2 CHARACTERS ENTERED
121 O$=L$
122 P$=M$
123 GO TO 151
124 *
130 *     3 CHARACTERS ENTERED
131 P$=N$
132 O$=M$
133 N$=L$
134 GO TO 152
135 *
140 *    4 CHARACTERS ENTERED
141 P$=O$
142 O$=N$
143 N$=M$
144 M$=L$
145 GO TO 153
146 *
150 O$='0'
151 N$='0'
152 M$='0'
153 L$='0'
154 *
160 Z$=P$
161 * CONVERT LS DIGIT TO DECIMAL
162 GOSUB 435
163 D6=D7
164 * NEXT DIGIT
165 Z$=O$
166 GOSUB 435
167 D5=D7*16
168 * NEXT DIGIT
169 Z$=N$
170 GOSUB 435
171 D4=D7*256
172 * NEXT DIGIT
173 Z$=M$
174 GOSUB 435
175 D3=D7*4096
176 * MS DIGIT
177 Z$=L$
178 GOSUB 435
179 D2=D7*65536
180 D1=D2+D3+D4+D5+D6
181 RETURN
195 *
197 *****************************************
198 *******    SUBROUTINE             *******
199 *****************************************
200 * CONVERT DECIMAL  TO HEX (D1 TO Q$)
201 H4=INT(D1/65536)
202 D2=D1-H4*65536
204 H3=INT(D2/4096)
206 D3=D2-H3*4096
208 H2=INT(D3/256)
210 D4=D3-H2*256
212 H1=INT(D4/16)
214 H0=D4-H1*16
216 D2=H4
218 GOSUB 800
220 L$=Z$
222 D2=H3
224 GOSUB 800
226 M$=Z$
228 D2=H2
230 GOSUB 800
232 N$=Z$
234 D2=H1
236 GOSUB 800
238 O$=Z$
240 D2=H0
242 GOSUB 800
244 P$=Z$
248 Q$=L$+M$+N$+O$+P$
250 RETURN
251 *
252 *
253 *
300 * INPUT CYLINDER AND HEAD IN HEX (C$,H$)
301 PRINT 'CYLINDER (HEX)='
305 INPUT C$
306 IF C$='END' GO TO 999
310 Q$=C$
315 GOSUB 100
320 I1=D1
322 IF I1>814 GO TO 720
325 PRINT 'HEAD (HEX)='
330 INPUT H$
331 IF H$='END' GO TO 999
332 Q$=H$
335 GOSUB 100
340 J1=D1
342 IF J1>18 GO TO 720
345 GO TO 550
346 *
347 *
348 *
400 * INPUT SECTOR NUMBER IN HEX   (S$)
405 PRINT 'RELATIVE SECTOR (HEX)='
410 INPUT S$
411 IF S$='END' GO TO 999
415 Q$=S$
420 GOSUB 100
425 K1=D1
430 GO TO 620
431 *
433 *******    SUBROUTINE             *******
434 *****************************************
435 * CONVERT ONE HEX DIGIT TO DECIMAL (Z$ TO D7)
438 D7=0
440 IF Z$='0' GO TO 480
441 IF Z$='1' GO TO 474
442 IF Z$='2' GO TO 473
443 IF Z$='3' GO TO 472
444 IF Z$='4' GO TO 471
445 IF Z$='5' GO TO 470
446 IF Z$='6' GO TO 469
447 IF Z$='7' GO TO 468
448 IF Z$='8' GO TO 467
449 IF Z$='9' GO TO 466
450 IF Z$='A' GO TO 465
451 IF Z$='B' GO TO 464
452 IF Z$='C' GO TO 463
453 IF Z$='D' GO TO 462
454 IF Z$='E' GO TO 461
455 IF Z$='F' GO TO 460
456 PRINT 'INVALID HEX INPUT'
458 GO TO 45
460 D7=D7+1
461 D7=D7+1
462 D7=D7+1
463 D7=D7+1
464 D7=D7+1
465 D7=D7+1
466 D7=D7+1
467 D7=D7+1
468 D7=D7+1
469 D7=D7+1
470 D7=D7+1
471 D7=D7+1
472 D7=D7+1
473 D7=D7+1
474 D7=D7+1
480 RETURN
481 *
482 *
483 *
500 *  INPUT CYLINDER AND HEAD IN DECIMAL (I1,J1)
505 PRINT 'CYLINDER (DEC)='
510 INPUT I1
511 IF I1='END' GO TO 999
512 IF I1>814 GO TO 720
515 PRINT 'HEAD (DEC)='
520 INPUT J1
521 IF J1='END' GO TO 999
530 IF J1>18 GO TO 720
550 K1=I1*228+J1*12
560 I1=INT(K1/228)
570 J1=INT((K1-I1*228)/12)
580 GO TO 615
581 *
582 *
583 *
600 * INPUT SECTOR IN DECIMAL (K1)
605 PRINT 'RELATIVE SECTOR (DEC.)='
610 INPUT K1
611 IF K1='END' GO TO 999
615 D1=K1
620 GOSUB 200
625 S$=Q$
635 I1=INT(K1/228)
640 J1=INT((K1-I1*228)/12)
645 D1=I1
650 GOSUB 200
655 C$=Q$
660 D1=J1
665 GOSUB 200
670 H$=Q$
671 *
672 *
673 *
700 * TEST FOR PARAMETERS WITHIN LIMITS
705 IF I1>814 GO TO 720
715 IF I1=>0 GO TO 925
720 * ONE OF THE PARAMETERS IS OUT OF LIMITS
725 PRINT 'OUT OF LIMITS INPUT'
730 PRINT 'PERMISSABLE INPUTS:'
735 PRINT '    SECTOR  0-185819 (DEC.)   0-2D5DB (HEX)'
740 PRINT '    CYLINDER  0-814  (DEC.)     0-32E (HEX)'
745 PRINT '    HEAD       0-18  (DEC.)      0-12 (HEX)'
750 PRINT ' '
755 GO TO 45
795 **************************************
796 *****      SUBROUTINE            *****
797 **************************************
798 *
800 *   CONVERT 1 DECIMAL DIGIT TO HEX (D2 TO Z$)
810 IF D2=0 GO TO 830
811 IF D2=1 GO TO 832
812 IF D2=2 GO TO 834
813 IF D2=3 GO TO 836
814 IF D2=4 GO TO 838
815 IF D2=5 GO TO 840
816 IF D2=6 GO TO 842
817 IF D2=7 GO TO 844
818 IF D2=8 GO TO 846
819 IF D2=9 GO TO 848
820 IF D2=10 GO TO 850
821 IF D2=11 GO TO 852
822 IF D2=12 GO TO 854
823 IF D2=13 GO TO 856
824 IF D2=14 GO TO 858
825 Z$='F'
826 RETURN
830 Z$='0'
831 RETURN
832 Z$='1'
833 RETURN
834 Z$='2'
835 RETURN
836 Z$='3'
837 RETURN
838 Z$='4'
839 RETURN
840 Z$='5'
841 RETURN
842 Z$='6'
843 RETURN
844 Z$='7'
845 RETURN
846 Z$='8'
847 RETURN
848 Z$='9'
849 RETURN
850 Z$='A'
851 RETURN
852 Z$='B'
853 RETURN
854 Z$='C'
855 RETURN
856 Z$='D'
857 RETURN
858 Z$='E'
859 RETURN
890 *
891 *
892 *
893 *    PRINT 6 FIELD DISPLAY OF RESULTS
894 *

930 PRINT 'SECTOR CYLINDER HEAD     SECTOR CYLINDER HEAD'
931 X$=STR(K1,######)
932 Y$=STR(I1,###)
933 Z$=STR(J1,##)
934 PRINT S$ TAB(8) C$ TAB(17) H$ TAB(26) X$ TAB(36) Y$ TAB(43) Z$
940 PRINT ' '
945 GO TO 45
999 END

