TITLE 'RDPRT - EXAMPLE OF CHANNEL LEVEL I/O TO READER && PRINT+ ER' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * THIS EXAMPLE SHOWS CHANNEL LEVEL I/O USING THE CARD READER * * AND LINE PRINTER. * * IT REPEATS THE SEQUENCE (READ A CARD--DISPLAY IT ON THE * * PRINTER) UNTIL AN END OF FILE OCCURS * * IT TERMINATES NORMALLY ON END OF FILE; IF ANY EXCEPTIONAL * * CONDITION OCCURS, IT TERMINATES WITH A DUMP. * * CARD IMAGES PRINTED ARE SHOWN IN TWO PARTS: COLUMNS 1-72, * * FOLLOWED BY 4 BLANK SPACES, FOLLOWED BY COLUMNS 73-80. * * SPLITTING OF THE CARD IMAGES IS PERFORMED BY DATA CHAINING. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SPACE 1 RDPRT START 0 ORIGIN OF SIMULATED SYSTEM PROGRAM USING *,0 SHOW ADDRESSABILITY ON REG. 0 IPLPSW DC AL1(CHAN0,0),H'0',A(READ) PERMIT CHN 0 INTERRUPTS, + KEY=0, START AT "READ" ORG RDPRT+X'38' SKIP UNUSED OLD PSW'S IOOLDPSW DS D OLD PSW FROM I/O INTERRUPT CSW DS D CHANNEL STATUS WORD CAW DS F CHANNEL ADDRESS WORD DS F UNUSED TIMER DC F'-1' DISABLE TIMER WITH NEGATIVE VALUE DS F UNUSED DC F'0',A(ERROR) EXTERNAL NEW PSW: GO TO "ERROR" DC F'0',A(ERROR) SUPERVISOR NEW PSW DC F'0',A(ERROR) PROGRAM NEW PSW DC F'0',A(ERROR) MACHINE CHECK NEW PSW IONEWPSW DC AL1(CHAN0,0),H'0',A(IOINT) PSW TO USE ON I/O INTERRUPT SPACE 2 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * THE FOLLOWING TWO SEGMENTS PERFORM THE I/O FOR THIS PROGRAM * * THE FIRST INITIATES A CARD READ, TESTS TO SEE IF IT BEGAN * * SUCCESSFULLY, AND PLACES THE MACHINE IN WAIT STATE, * * WAITING FOR AN INTERRUPTION SIGNALLING COMPLETION OF * * CHANNEL ACTIVITY. * * * * THE SECOND SEGMENT DOES THE SAME THING FOR A WRITE. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SPACE 1 READ MVC CAW,=A(READCCW) PLACE ADDRESS OF CHAN. PGM IN + CHANNEL ADDRESS WORD SIO X'00C' INITIATE CHANNEL ACTIVITY ON THE + CARD READER, DEVICE 00C BNZ ERROR IF I/O DID NOT COMMENCE PROPERLY, + SIGNAL AN ERROR AND QUIT LPSW WAITPRT WAIT AND GO TO PRINTER AFTER INTPT SPACE 1 PRINT MVC CAW,=A(PRINTCCW) PLACE ADDR. OF CHAN. PGM. IN CAW SIO X'00F' INIT. CHN. PGM ON PRINTER, DEV. 00F BNZ ERROR SIGNAL ERROR IF I/O DID NOT START LPSW WAITRD WAIT AND READ AFTER INTERRUPT SPACE 2 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * I/O INTERRUPT HANDLER * * RECEIVES CONTROL ON I/O INTERRUPTION * * TESTS TYPE OF COMPLETION (NORMAL OR END OF FILE ON READ), * * AND SENDS CONTROL TO THE SEGMENT INDICATED IN I/O OLD PSW * * (WHICH WAS SET BY READ OR PRINT SEGMENT TO CAUSE OTHER TO * * BE EXECUTED AFTER INTERRUPT). * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SPACE 1 IOINT NI IOOLDPSW+1,NOT-WAIT NO, TURN OFF WAIT BIT IN OLD PSW LPSW IOOLDPSW RESUME EXECUTION AT ADDR. IN WAITRD + OR WAITPRT SPACE 1 HALT XOPC 24 HALT SIMULATION RUN NORMALLY SPACE 2 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ERROR HANDLER: ENTERED WHEN SIO DOES NOT COMMENCE PROPERLY, * * OR WHEN ANY TYPE OF INTERRUPT OTHER THAN I/O OCCURS * * PRINTS MESSSAGE AND HALTS SIMULATION WITH DUMP * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SPACE 1 ERROR TM CSW+4,UXCPT END-OF-FILE (UNIT EXCEPTION) ? BO HALT YES, HALT NORMALLY * ERROR FROM OTHER SOURCE XPRNT =CL95' ERROR DETECTED DURING EXECUTION OF RDPRT; SEE OLD+ PSW, REGISTERS, MEMORY, AND INSTRUCTION TRACE',95 XOPC 25 HALT WITH DUMP SPACE 2 * * * * * * * * EQUATED SYMBOLS FOR MNEMONICS * * * * * * * * * * * CHAN0 EQU B'10000000' SYS. MASK: INTRPTS. ON CHAN.0 OK UXCPT EQU B'00000001' CSW: UNIT EXCEPTION (END OF FILE) WAIT EQU B'00000010' PSW: WAIT STATE CD EQU B'10000000' CCW: DATA CHAINING SLI EQU B'00100000' CCW: SUPPRESS INCORRECT LENGTH NOTE NOT EQU B'11111111' TO NEGATE OTHER FLAGS, FOR "AND"S READCOM EQU X'02' CCW: READ 1 CARD PRINTCOM EQU X'09' CCW: PRINT 1 LINE, SPACE 1 AFTER SPACE 2 * * * * * * * * WAIT STATE PSWS * * * * * * * * * * * * * * * * * * WAITRD DC 0D'0',AL1(CHAN0,WAIT),H'0',A(READ) WAIT THEN READ WAITPRT DC 0D'0',AL1(CHAN0,WAIT),H'0',A(PRINT) WAIT THEN PRINT SPACE 2 * * * * * * * * CHANNEL PROGRAMS * * * * * * * * * * * * * * * * * * READCCW DC 0D'0',AL1(READCOM),AL3(INAREA),AL1(0,0),H'80' READ 80 + BYTES INTO ADDR. INAREA SPACE 1 PRINTCCW DC AL1(PRINTCOM),AL3(INAREA),AL1(CD+SLI,0),H'72' WRITE + 72 BYTES OF CARD IMAGE DC AL1(*-*),AL3(BLANKS),AL1(CD+SLI,0),H'4' WRITE 4 BLANKS DC AL1(*-*),AL3(INAREA+72),AL1(0,0),H'8' WRITE LAST 8 + BYTES OF CARD IMAGE SPACE 1 INAREA DS CL80 BLANKS DC 4C' ' LTORG , END