* O$MA - O$MB - O$MC - O$ME - MAY 29 2006 - VERSION 1 * * O$MA: WRITE MAGTAPE IN BCD MODE, 2 CHARS PER WORD * O$MB: WRITE MAGTAPE IN BIN MODE, 2 CHARS PER WORD * O$MC: WRITE MAGTAPE IN BIN MODE, 3 CHARS PER WORD * O$ME: WRITE MAGTAPE END OF FILE * * HONEYWELL X16 16 BIT COMPUTER SOFTWARE * * PROGRAM LENGTH: 103 WORDS * * THIS SOURCE IS RECREATED FROM THE EXISTING SLST FILE: * - SLST-DAP-16.IMG (WHICH ORIGINATES FROM HONEYWELL) * * THE SOURCE IS RECREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL) * * * CALLING SEQUENCE: * CALL O$MX * DAC BUFFER ADDRESS * DEC WORD COUNT * DEC LOGICAL TAPE UNIT * (END OF TAPE RETURN) * (NORMAL RETURN) * * CALLING SEQUENCE: * CALL O$ME * DEC LOGICAL TAPE UNIT * * X-REG IS UNCHANGED AFTER RETURN (ALL ROUTINES) * SUBR O$MA SUBR O$MB SUBR O$MC SUBR O$ME REL O$MA DAC *-* WRITE BCD, 2 CHARS PER WOR LDA BCD ='200 JMP M1 O$MB DAC *-* WRITE BIN MODE, 2 CHARS PER WORD LDA *-1 STA O$MA LDA BIN2 ='300 JMP M1 O$MC DAC *-* WRITE BIN MODE, 3 CHARS PER WORD LDA *-1 STA O$MA LDA BIN3 ='1600 * M1 STA MODE SET READ MODE MASK LDA 0 STA SVX SAVE X LDA* O$MA GET BUFFER ADDRESS ADD IFL SET INDEX FLAG IRS O$MA POINTER TO WORD COUNT ADD* O$MA + WORD COUNT STA PIB PIB = INDEXED POINTER TO BUFFER LDA* O$MA GET WORD COUNT TCA - WORD COUNT STA LEN BUFFER LENGTH = - WORD COUNT IRS O$MA POINTER TO LOGICAL UNIT NUMBER LDA* O$MA GET LOGICAL UNIT NUMBER STA LU JST SET SET IO INSTRUCTIONS FOR THIS UNIT M4 JST RDY IF TAPE UNIT IS READY, START RECORD OUTPUT LDA LEN STA 0 X = - WORD COUNT OCP1 OCP 0 START WRITING IN APPLICABLE MODE M2 LDA* PIB STORE 2 CHARS FROM BUFFER OTA1 OTA 0 WRITE JMP *-1 IRS 0 INCR BUFFER POINTER JMP M2 JST RDY RECORD OUTPUT READY, WAIT FOR UNIT READY SKS2 SKS 0 SKS 21X = SKIP IF NO ERROR JMP OCP2 ERROR DETECTED SKS3 SKS 0 SKS 51X = SKIP IF NO EOT JMP M3 EOT DETECTED IRS O$MA NORMAL RETURN M3 IRS O$MA EOT RERUTN LDA SVX STA 0 RESTORE X JMP* O$MA RETURN * ERROR DETECTED OCP2 OCP 0 OCP 151X BACKSPACE 1 RECORD JST O$ME WRITE EOF LU OCT 0 LOGICAL TAPE UNIT NUMBER JST RDY READY OCP3 OCP 0 OCP 151X BACKSPACE 1 RECORD JMP M4 RESTART RECORD OUPUT * * O$ME * WRITE END OF FILE ON MAGTAPE * CALLING SEQUENCE: * CALL O$ME * DEC LOGICAL TAPE UNIT * O$ME DAC *-* LDA* O$ME LOGICAL UNIT NUMBER JST SET JST RDY OCP4 OCP 0 OCP 61X = WRITE EOF IRS O$ME JMP* O$ME * RDY DAC *-* TAPE UNIT READY? SKS1 SKS 0 SKS 11X = SKIP IF NOT BUSY JMP *-1 SKS4 SKS 0 SKS 141X = SKIP IF NOT REWINDING JMP *-1 JMP* RDY * * SET IO INSTRUCTIONS FOR SPECIFIED LOGICAL TAPE UNIT (A-REG) * SET DAC *-* CALL M$UNIT CONVERT LOGICAL UNIT INTO PHYSICAL STA DEV DEV = PHYSICAL DEVICE NUMBER ADD OCP = OCP 151X STA OCP2 BACKSPACE 1 RECORD STA OCP3 BACKSPACE 1 RECORD ERA B1 ='1300 = OCP 61X STA OCP4 OCP 61X = WRITE EOF ERA MODE MAKE APPLICABLE WRITE MODE COMMAND ****************************************************************** * MODE * * OCP 61X ERA 0200 = OCP 041X = WRITE BCD, 2 CHARS PER WORD * * OCP 61X ERA 0300 = OCP 051X = WRITE BIN, 2 CHARS PER WORD * * OCP 61X ERA 1600 = OCP 101X = WRITE BIN, 3 CHARS PER WORD * ****************************************************************** STA OCP1 READ MODE COMMAND LDA OTA ADD DEV STA OTA1 LDA SKS SKS 110 = SKIP IF NOT BUSY ADD DEV SKS 11X = SKIP IF NOT BUSY STA SKS1 ADD B2 ='100 STA SKS2 => SKS 21X = SKIP IF NO ERROR ADD BIN2 ='300 STA SKS3 => SKS 51X = SKIP IF NO EOT ERA B3 ='1100 STA SKS4 SKS 141X = SKIP IF NOT REWINDING JMP* SET * * WORKSPACE * MODE OCT 0 SELECTED READ MODE MASK SVX OCT 0 SAVED X PIB OCT 0 INDEXED POINTER TO WRITE BUFFER LEN OCT 0 BUFFER LENGTH = - WORD COUNT DEV OCT 0 UNIT => DEVICE NUMBER B3 OCT 1100 B2 OCT 100 SKS SKS '110 OTA OTA '10 B1 OCT 1300 OCP OCP '1510 IFL OCT 40000 INDEX FLAG BIN3 OCT 1600 MASK BIN 3 CH PER WORD WRITE MODE BIN2 OCT 300 MASK BIN 2 CH PER WORD WRITE MODE BCD OCT 200 MASK BCD WRITE MODE END