X-Git-Url: http://gitweb.hachti.de/?p=h316.git;a=blobdiff_plain;f=lib%2Fhachti%2Fsrc%2Fmegastore.asm;fp=lib%2Fhachti%2Fsrc%2Fmegastore.asm;h=2a2a26bf69aeb02613d9c1d15728d94851ca33e1;hp=0000000000000000000000000000000000000000;hb=0a5c1d8a72e07dea13b677f70c0b1f0790ac8d7e;hpb=c6301d07c84cf71c19ac3b3a6421fa259dd3d7a2 diff --git a/lib/hachti/src/megastore.asm b/lib/hachti/src/megastore.asm new file mode 100644 index 0000000..2a2a26b --- /dev/null +++ b/lib/hachti/src/megastore.asm @@ -0,0 +1,191 @@ +* 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 +* +********************************************************************************