| 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 | ******************************************************************************** |