1 * MS$IOR, MS$IOW - MEGASTORE PIO ACCESS ROUTINES
2 *********************************************************************************
4 * M$IOR - READ DATA FROM AMPEX MEGASTORE
5 * M$IOW - WRITE DATA TO AMPEX MEGASTORE
9 * ACCESS AMPEX MEGASTORE RAM DISK SYSTEM VIA PROGRAMMED IO.
10 * SHOULD WORK WITH HONEYWELL FIXED HEAD DISK AS WELL.
20 * REV 1 29.10.2009 INITIAL VERSION
25 * DISK ADDRESS IS EXPECTED IN A.
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
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
37 * EVERY BLOCK CONTAINS 16 WORDS.
38 * INDEX AND B REGISTER ARE PRESERVED.
39 * RETURN VALUES ARE STORED IN A.
45 * 2 - ACCESS ERROR, ADDRESSED BLOCK NONEXISTANT
46 * 3 - TIMOUT ERROR, SHOULD NOT OCCUR
47 * 4 - MEGASTORE NOT BUSY, UNSPECIFIED ABORT
52 * THE FOLLOWING IS MORE CORRECT THAN THE MEGASTORE MANUAL.
53 * IT HAS BEEN PAINFULLY VERIFIED AGAINST REALITY AND SCHEMATICS.
55 * SKS '522 SKIP IF *NO* TIMEOUT OCCURED
58 * *******************************************************************************
68 *********************************************************************************
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
82 *********************************************************************************
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
96 ********************************************************************************
100 MAIN STA RTPT SAVE RETURN POINTER
101 LDA* RTPT BUFFER ADDRESS
102 STA PTR SAVE TO POINTER
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
109 STA CNT AND SET UP THE LOOP COUNTER
110 IRS RTPT JUMP OVER CALLER'S DAC 0
112 ****************************************
113 * INITIALIZE MEGASTORE
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
120 ****************************************
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!
126 BRAN HLT DYNAMICALLY FILLED WITH RDBR OR WRBR
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
136 OTA '22 WRITE TO MEGASTORE
137 WRBR JMP WR COPIED TO BRAN
139 ****************************************
144 SKS '0222 SKIP IF NO PARITY ERROR
148 SKS '322 SKIP IF NO ACCESS ERROR
152 SKS '522 SKIP IF *NO* TIMEOUT (SEE ERRATA)
156 SKS '122 SKIP IF MEGASTORE NOT BUSY - IT SHOULD BE BUSY!
160 ****************************************
162 IRS PTR INCREMENT POINTER
163 IRS CNT LOOP COUNTER UPDATE
166 ****************************************
170 ABRT SKS '122 CHECK FOR BUSY (AGAIN)
171 OCP '722 STOP MEGASTORE IF BUSY
172 JMP* RTPT RETURN VIA RETURN POINTER
175 ********************************************************************************
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
185 ********************************************************************************
187 * THE END OF EVERYTHING
191 ********************************************************************************