0a5c1d8a |
1 | * MS$IOR, MS$IOW - MEGASTORE PIO ACCESS ROUTINES |
2 | ********************************************************************************* |
3 | * |
4 | * M$IOR - READ DATA FROM AMPEX MEGASTORE |
5 | * M$IOW - WRITE DATA TO AMPEX MEGASTORE |
6 | * |
7 | * PURPOSE: |
8 | * |
9 | * ACCESS AMPEX MEGASTORE RAM DISK SYSTEM VIA PROGRAMMED IO. |
10 | * SHOULD WORK WITH HONEYWELL FIXED HEAD DISK AS WELL. |
11 | * |
12 | * |
13 | * AUTHOR: |
14 | * |
15 | * PHILIPP HACHTMANN |
16 | * |
17 | * |
18 | * REVISIONS: |
19 | * |
20 | * REV 1 29.10.2009 INITIAL VERSION |
21 | * |
22 | * |
23 | * CALLING SEQUENCE: |
24 | * |
25 | * DISK ADDRESS IS EXPECTED IN A. |
26 | * * |
27 | * CALL MS$IOR CALL TO READ ROUTINE |
28 | * DAC BUFFP POINTER TO READ BUFFER |
29 | * DAC CNTP POINTER TO NUMBER OF BLOCKS TO TRANSFER |
30 | * DAC 0 NEEDED FOR FORTRAN IV COMPATIBILITY |
31 | * |
32 | * CALL MS$IOW CALL TO WRITE ROUTINE |
33 | * DAC BUFFP POINTER TO WRITE BUFFER |
34 | * DAC CNTP POINTER TO NUMBER OF BLOCKS TO TRANSFER |
35 | * DAC 0 NEEDED FOR FORTRAN IV COMPATIBILITY |
36 | * |
37 | * EVERY BLOCK CONTAINS 16 WORDS. |
38 | * INDEX AND B REGISTER ARE PRESERVED. |
39 | * RETURN VALUES ARE STORED IN A. |
40 | * |
41 | * RETURN VALUES: |
42 | * |
43 | * 0 - NO ERROR |
44 | * 1 - PARITY ERROR |
45 | * 2 - ACCESS ERROR, ADDRESSED BLOCK NONEXISTANT |
46 | * 3 - TIMOUT ERROR, SHOULD NOT OCCUR |
47 | * 4 - MEGASTORE NOT BUSY, UNSPECIFIED ABORT |
48 | * |
49 | * |
50 | * REMARKS: |
51 | * |
52 | * THE FOLLOWING IS MORE CORRECT THAN THE MEGASTORE MANUAL. |
53 | * IT HAS BEEN PAINFULLY VERIFIED AGAINST REALITY AND SCHEMATICS. |
54 | * |
55 | * SKS '522 SKIP IF *NO* TIMEOUT OCCURED |
56 | * |
57 | * |
58 | * ******************************************************************************* |
59 | * EXPORT SYMBOLS |
60 | * |
61 | SUBR MS$IOR,READ |
62 | SUBR MS$IOW,WRIT |
63 | * |
64 | ABS |
65 | ORG '20000 |
66 | * |
67 | * |
68 | ********************************************************************************* |
69 | * |
70 | * READ ROUTINE |
71 | * |
72 | READ DAC 0 |
73 | * |
74 | SSP CLEAR WRITE BIT IF ACCIDENTALLY SET |
75 | STA DADD SAVE DISK ADDRESS |
76 | LDA RDBR READ BRANCH INSTRUCTION FOR INNER LOOP |
77 | STA BRAN SAVE TO BRANCH LOCATION |
78 | LDA READ LOAD RETURN POINTER |
79 | JMP MAIN GO TO MAIN WORKING PART |
80 | * |
81 | * |
82 | ********************************************************************************* |
83 | * |
84 | * WRITE ROUTINE |
85 | * |
86 | WRIT DAC 0 |
87 | * |
88 | SSM SET WRITE BIT |
89 | STA DADD SAVE DISK ADDRESS |
90 | LDA WRBR READ BRANCH INSTRUCTION FOR INNER LOOP |
91 | STA BRAN SAVE TO BRANCH LOCATION |
92 | LDA WRIT LOAD RETURN POINTER |
93 | JMP MAIN GO TO MAIN WORKING PART |
94 | * |
95 | * |
96 | ******************************************************************************** |
97 | * |
98 | * MAIN WORKING PART |
99 | * |
100 | MAIN STA RTPT SAVE RETURN POINTER |
101 | LDA* RTPT BUFFER ADDRESS |
102 | STA PTR SAVE TO POINTER |
103 | IRS RTPT |
104 | LDA* RTPT GET BLOCK COUNT POINTER |
105 | STA CNT TEMPORARILY STORE POINTER |
106 | LDA* CNT GET BLOCK COUNT VALUE |
107 | ALS 4 MULTIPLY BY 16, MAKING IT THE WORD COUNT |
108 | TCA NEGATE IT |
109 | STA CNT AND SET UP THE LOOP COUNTER |
110 | IRS RTPT JUMP OVER CALLER'S DAC 0 |
111 | * |
112 | **************************************** |
113 | * INITIALIZE MEGASTORE |
114 | * |
115 | LDA DADD LOAD DISK ADDRESS |
116 | OCP '722 ACTIVATE IO MODE |
117 | OTA '22 WRITE DISK ADDRESS TO MEGASTORE |
118 | JMP *-1 WAIT IF NEEDED |
119 | * |
120 | **************************************** |
121 | * WORKING LOOP |
122 | * |
123 | LOOP SKS '22 CHECK FOR READY - THERE IS NO REASON FOR THIS CHECK |
124 | JMP *-1 -- OTHER THAN IT IS NEEDED BY THE MEGASTORE! |
125 | * |
126 | BRAN HLT DYNAMICALLY FILLED WITH RDBR OR WRBR |
127 | * |
128 | RD CRA CLEAR A, ONE OF MY BOARDS DOESN'T DO INA '1022 |
129 | INA '22 GET DATA FROM MEGASTORE |
130 | * INA '1022 CAN BE USED FOR ABOVE TWO WHEN CONTROL HAS BEEN FIXED. |
131 | RDBR JMP RD COPIED TO BRAN |
132 | STA* PTR STORE TO BUFFER |
133 | JMP EBRA TO END OF BRANCH |
134 | * |
135 | WR LDA* PTR |
136 | OTA '22 WRITE TO MEGASTORE |
137 | WRBR JMP WR COPIED TO BRAN |
138 | * |
139 | **************************************** |
140 | * ERROR CHECKS |
141 | * |
142 | EBRA CRA |
143 | AOA ERROR CODE 1 |
144 | SKS '0222 SKIP IF NO PARITY ERROR |
145 | JMP ABRT ABORT |
146 | * |
147 | AOA ERROR CODE 2 |
148 | SKS '322 SKIP IF NO ACCESS ERROR |
149 | JMP ABRT ABORT |
150 | * |
151 | AOA ERROR CODE 3 |
152 | SKS '522 SKIP IF *NO* TIMEOUT (SEE ERRATA) |
153 | JMP ABRT ABORT |
154 | * |
155 | AOA ERROR CODE 4 |
156 | SKS '122 SKIP IF MEGASTORE NOT BUSY - IT SHOULD BE BUSY! |
157 | SKP |
158 | JMP ABRT ABORT |
159 | * |
160 | **************************************** |
161 | * END OF LOOP |
162 | IRS PTR INCREMENT POINTER |
163 | IRS CNT LOOP COUNTER UPDATE |
164 | JMP LOOP LOOP AGAIN |
165 | * |
166 | **************************************** |
167 | * CLEANUP AND EXIT |
168 | * |
169 | CRA |
170 | ABRT SKS '122 CHECK FOR BUSY (AGAIN) |
171 | OCP '722 STOP MEGASTORE IF BUSY |
172 | JMP* RTPT RETURN VIA RETURN POINTER |
173 | * |
174 | * |
175 | ******************************************************************************** |
176 | * |
177 | * VARIABLES |
178 | * |
179 | CNT DAC 0 LOOP COUNTER |
180 | PTR DAC 0 DATA POINTER |
181 | DADD DAC 0 DISK ADDRESS: BIT 1=WRITE, 15 LSB SECTOR ADDRESS |
182 | RTPT DAC 0 RETURN POINTER |
183 | * |
184 | * |
185 | ******************************************************************************** |
186 | * |
187 | * THE END OF EVERYTHING |
188 | * |
189 | END |
190 | * |
191 | ******************************************************************************** |