* MS$IOR, MS$IOW - MEGASTORE PIO ACCESS ROUTINES ********************************************************************************* * * M$IOR - READ DATA FROM AMPEX MEGASTORE * M$IOW - WRITE DATA TO AMPEX MEGASTORE * * PURPOSE: * * ACCESS AMPEX MEGASTORE RAM DISK SYSTEM VIA PROGRAMMED IO. * SHOULD WORK WITH HONEYWELL FIXED HEAD DISK AS WELL. * * * AUTHOR: * * PHILIPP HACHTMANN * * * REVISIONS: * * REV 1 29.10.2009 INITIAL VERSION * * * CALLING SEQUENCE: * * DISK ADDRESS IS EXPECTED IN A. * * * CALL MS$IOR CALL TO READ ROUTINE * DAC BUFFP POINTER TO READ BUFFER * DAC CNTP POINTER TO NUMBER OF BLOCKS TO TRANSFER * DAC 0 NEEDED FOR FORTRAN IV COMPATIBILITY * * CALL MS$IOW CALL TO WRITE ROUTINE * DAC BUFFP POINTER TO WRITE BUFFER * DAC CNTP POINTER TO NUMBER OF BLOCKS TO TRANSFER * DAC 0 NEEDED FOR FORTRAN IV COMPATIBILITY * * EVERY BLOCK CONTAINS 16 WORDS. * INDEX AND B REGISTER ARE PRESERVED. * RETURN VALUES ARE STORED IN A. * * RETURN VALUES: * * 0 - NO ERROR * 1 - PARITY ERROR * 2 - ACCESS ERROR, ADDRESSED BLOCK NONEXISTANT * 3 - TIMOUT ERROR, SHOULD NOT OCCUR * 4 - MEGASTORE NOT BUSY, UNSPECIFIED ABORT * * * REMARKS: * * THE FOLLOWING IS MORE CORRECT THAN THE MEGASTORE MANUAL. * IT HAS BEEN PAINFULLY VERIFIED AGAINST REALITY AND SCHEMATICS. * * SKS '522 SKIP IF *NO* TIMEOUT OCCURED * * * ******************************************************************************* * EXPORT SYMBOLS * SUBR MS$IOR,READ SUBR MS$IOW,WRIT * ABS ORG '20000 * * ********************************************************************************* * * READ ROUTINE * READ DAC 0 * SSP CLEAR WRITE BIT IF ACCIDENTALLY SET STA DADD SAVE DISK ADDRESS LDA RDBR READ BRANCH INSTRUCTION FOR INNER LOOP STA BRAN SAVE TO BRANCH LOCATION LDA READ LOAD RETURN POINTER JMP MAIN GO TO MAIN WORKING PART * * ********************************************************************************* * * WRITE ROUTINE * WRIT DAC 0 * SSM SET WRITE BIT STA DADD SAVE DISK ADDRESS LDA WRBR READ BRANCH INSTRUCTION FOR INNER LOOP STA BRAN SAVE TO BRANCH LOCATION LDA WRIT LOAD RETURN POINTER JMP MAIN GO TO MAIN WORKING PART * * ******************************************************************************** * * MAIN WORKING PART * MAIN STA RTPT SAVE RETURN POINTER LDA* RTPT BUFFER ADDRESS STA PTR SAVE TO POINTER IRS RTPT LDA* RTPT GET BLOCK COUNT POINTER STA CNT TEMPORARILY STORE POINTER LDA* CNT GET BLOCK COUNT VALUE ALS 4 MULTIPLY BY 16, MAKING IT THE WORD COUNT TCA NEGATE IT STA CNT AND SET UP THE LOOP COUNTER IRS RTPT JUMP OVER CALLER'S DAC 0 * **************************************** * INITIALIZE MEGASTORE * LDA DADD LOAD DISK ADDRESS OCP '722 ACTIVATE IO MODE OTA '22 WRITE DISK ADDRESS TO MEGASTORE JMP *-1 WAIT IF NEEDED * **************************************** * WORKING LOOP * LOOP SKS '22 CHECK FOR READY - THERE IS NO REASON FOR THIS CHECK JMP *-1 -- OTHER THAN IT IS NEEDED BY THE MEGASTORE! * BRAN HLT DYNAMICALLY FILLED WITH RDBR OR WRBR * RD CRA CLEAR A, ONE OF MY BOARDS DOESN'T DO INA '1022 INA '22 GET DATA FROM MEGASTORE * INA '1022 CAN BE USED FOR ABOVE TWO WHEN CONTROL HAS BEEN FIXED. RDBR JMP RD COPIED TO BRAN STA* PTR STORE TO BUFFER JMP EBRA TO END OF BRANCH * WR LDA* PTR OTA '22 WRITE TO MEGASTORE WRBR JMP WR COPIED TO BRAN * **************************************** * ERROR CHECKS * EBRA CRA AOA ERROR CODE 1 SKS '0222 SKIP IF NO PARITY ERROR JMP ABRT ABORT * AOA ERROR CODE 2 SKS '322 SKIP IF NO ACCESS ERROR JMP ABRT ABORT * AOA ERROR CODE 3 SKS '522 SKIP IF *NO* TIMEOUT (SEE ERRATA) JMP ABRT ABORT * AOA ERROR CODE 4 SKS '122 SKIP IF MEGASTORE NOT BUSY - IT SHOULD BE BUSY! SKP JMP ABRT ABORT * **************************************** * END OF LOOP IRS PTR INCREMENT POINTER IRS CNT LOOP COUNTER UPDATE JMP LOOP LOOP AGAIN * **************************************** * CLEANUP AND EXIT * CRA ABRT SKS '122 CHECK FOR BUSY (AGAIN) OCP '722 STOP MEGASTORE IF BUSY JMP* RTPT RETURN VIA RETURN POINTER * * ******************************************************************************** * * VARIABLES * CNT DAC 0 LOOP COUNTER PTR DAC 0 DATA POINTER DADD DAC 0 DISK ADDRESS: BIT 1=WRITE, 15 LSB SECTOR ADDRESS RTPT DAC 0 RETURN POINTER * * ******************************************************************************** * * THE END OF EVERYTHING * END * ********************************************************************************