// DATE 031221 // NOHALT * *** DELETE ANY DATA FILE * // LOAD $DELET,F1 // RUN // REMOVE PACK-F2F2F2,UNIT-F2,LABEL-VTOC // END * *** RUN MACRO PROCESSOR. * // LOAD $MPXDV,F1 // FILE NAME-$SOURCE,PACK-F2F2F2,UNIT-F2,RETAIN-T,TRACKS-30 // RUN OPTIONS NODECK,LIST,XREF,REL,OBJ(P) $BDXM1 START X'1200' START ADDRESS. PRINT OFF $DTOU DEV-MFCU DTF EQUATES $IOED IOB EQUATES $COMN COMMON EQUATES PRINT ON,NODATA TITLE 'WRITE 5703-XM1 OBJECT FILES TO NEW BASIC PACK' *********************************************************************** * 5703-XM1 COPYRIGHT HJS CORP. 2022 * * REFER TO HJS COPYRIGHT BOOKLET FORM NO. 120-2083. * * * *********************************************************************** *STATUS * * VERSION 3 MODIFICATION 0 * * * *TITLE $BDXM1 - WRITE OBJECT MODULES TO NEW 5703-XM1 SYSTEM PACK. * * * *FUNCTION/OPERATION * * $BDXM1 WILL CREATE A NEW 5703-XM1 SYSTEM PACK. * * IT WILL READ CONTROL CARDS SPECIFYING THE OBJ-FILES LOCATED * * (ON THE PROGRAM PACK) TO BE WRITTEN TO THE NEW BASIC PACK. * * $BDXM1 HAS TWO MODES OF TRANSFERING THE OBJ FILE * * * XFER01 - OBJECT FILES LINKED AT AN 256 BYTE BOUNDARY WILL BE * * TRANSFERED ONE DISK SECTOR AT THE TIME. MAX MODULE SIZE IS 256 * * SECTORS (64K). * * * * XFER02 - NOT AT AN 256 BYTE BOUNDARY, THE OBJECT FILE IS READ * * COMPLETELY IN CORE BEFORE WRITTEN TO THE NEW PACK. * * MAX MODULE SIZE IS 84 SECTOR (24K). * * * *ENTRY POINTS $BDXM1 * * * *INPUT * * CONTROL CARDS * * COL 1-6 - OBJECT FILE NAME * * COL 8 - '+' * * COL 10-11 - OBJECT READ OFFSET (HIGH) * * COL 12-13 - OBJECT READ OFFSET (LOW) @01* * COL 15-16 - '->' (NOT CHECKED, ONLY FOR CLEARITY) * * COL 18-21 - START DADDR OF SDF (SYSTEM PROGRAM FILE) * * COL 23-24 - Q-BYTE TARGET DISK (X'A0', X'B0' OR X'B8') * * COL 26-29 - CYL/SCTR (X'00'-X'C7' / X'00'-X'5C', X'80'-X'DC') * * COL 31-33 - NR OF SECTORS (01-255) * * * *OUTPUT * * OBJECT FILES WRITTEN TO 5444 PACK SPECIFIED BY Q-BYTE * * * *EXTERNAL REFERENCES * * $$MFRD * * * *EXITS, NORMAL EOJ * * -ERROR MSG ON CONSOLE WHEN AN ERROR OCCURS. * * VF 4NF - OBJECT FILE NOT FOUND. * * * *TABLES/WORK AREAS * * IOB, DTFU, I/O BUFFERS * * * *ATTRIBUTES * * NOT REUSABLE * * * *NOTES * * SPECIALLY WRITTEN FOR THE 5703-XM1 RESTORATION PROJECT. * * * *HISTORY 07/02/22 INITIAL VERSION 3.0 (REVISED VERSION 2) * * 07/02/22 ADD READ BYTE OBJ OFFSET (FOR #KSVLA) @01* * * *********************************************************************** EJECT EXTRN $$MFRD READ FROM EITHER CARD HOPPERS J START JUMP OVER EYE CATCHER. SPACE 1 DC CL8' $BDXM1 ' MODULE NAME. DC CL8'10/02/22' DATE OF LAST UPDATE. @01 SPACE 1 START EQU * B CRLF $PRNT NAME-MESS00,LEN-23 $BDXM1 VX.X STARTED... B CRLF * *** ALLOCATE AND OPEN MFCU CARD READER. * $ALOC DTF-DTFU01 ALLOCATE MFCU. SPACE 1 $OPEN DTF-DTFU01 OPEN IT. EJECT *********************************************************************** * READ CONTROL CARDS * *********************************************************************** NEXTCC EQU * $GPU DEV-MFCU,OPC-READ,DTF-DTFU01, X ERR-ERR03,MODUL-$$MFRD,EOF-EXIT LA CCBUFF,XR2 GET BUFFER ADDRESS *** PRINT CONTROL CARD MVI MESS00,C' ' CLEAR 1ST POSITION MVC MESS00+80(80),79(,XR2) MOVE CC TO PRINT BUFFER $PRNT NAME-MESS00,LEN-78 CONTROL INPUT CARD INPUT CLI CCBUFF,C'*' COMMENT CARD ? BE NEXTCC NEXT CARD PLEASE... *********************************************************************** * CHECK IF OBJECT-FILE IS LINKED AT 256 BYTE BOUNDARY * *********************************************************************** CLC CCBUFF+CCOL(2),EBC00 AT 256 BOUNDARY ? JE XFER01 YES B XFER02 NO EJECT XFER01 EQU * *********************************************************************** * READ AND WRITE ONE SECTOR (256 BYTES) AT A TIME. * * CONVERT & VALIDATE CONTROL CARD INPUT FOR DISK IOB. * *********************************************************************** * LA IOB02,$IOB POINT TO TARGET IOB * *** DISK ADDRESS (Q-BYTE) * LA CCBUFF+CCDK-1,XR2 LOAD DISK ADDR ADDR B DG2HEX CONVERT TO HEX MVC $DIQB(1,$IOB),0(,XR2) MOVE DISK ADDR TO IOB *** CHECK SPECIFIED VALUES CLI $DIQB(,$IOB),X'A0' R1 DISK ? JE QBOKE1 CLI $DIQB(,$IOB),X'B0' R2 DISK ? JE QBOKE1 CLI $DIQB(,$IOB),X'B8' F2 DISK ? JE QBOKE1 B ERR05 INVALID Q-BYTE * *** CYLINDER AND SECTOR * QBOKE1 LA CCBUFF+CCCY-1,XR2 LOAD CYLINDER ADDR ADDR B DG2HEX CONVERT TO HEX MVC $DICB(1,$IOB),0(,XR2) MOVE CYL TO IOB * LA CCBUFF+CCCS-1,XR2 LOAD SECTOR ADDR ADDR B DG2HEX CONVERT TO HEX MVC $DISB(1,$IOB),0(,XR2) MOVE SCTR TO IOB * *** ADD OFFSET OF SYSTEM PROGRAM FILE (SPF) * LA CCBUFF+CCPF-1,XR2 LOAD SPF ADDR L ADDR B DG2HEX CONVERT TO HEX ALC $DISB(1,$IOB),0(,XR2) ADD START SPF ADDR(L) TO C/S * LA CCBUFF+CCPF-3,XR2 LOAD SPF ADDR H ADDR B DG2HEX CONVERT TO HEX ALC $DICB(1,$IOB),0(,XR2) ADD START SPF ADDR(H) TO C/S * *** NUMBER OF SECTORS * LA CCBUFF+CC##-1,XR2 LOAD NR OF SCTR ADDR B DG2INT CONVERT TO INTEGER MVC SCTRCT(1),0(,XR2) SAVE NR OF SECTORS *** CHECK SPECIFIED VALUES CLI SCTRCT,X'00' NR OF SECTORS = 00 ? BE ERR05 INVALID NR OF SECTORS SLC SCTRCT,HEX01 SUBTRACT ONE * *** FIND OBJECT FILE ON PROGRAM DISK * * $FIND NAME-##T1HE,FIND-FDPARM,PACK-P LA FDPARM,XR2 GET ADDR OF LOAD PARM LIST MVI FDLB(,XR2),C'O' O-LIBRARY MVC FDNM(6,XR2),CCBUFF+CCNM MOVE O-FILE NAME FOR FIND MVI FDPS(,XR2),C'P' SEARCH ON P-PACK B 0004 GOTO GENERAL ENTRY DC XL1'81' RIB - FIND OBJECT MODULE *** MODULE FOUND ? (IF NOT FOUND, NO CHANGE IN FDPARM) CLC FDNM(6,XR2),CCBUFF+CCNM FOUND ? BE ERR06 NO - ISSUE ERROR MSG * *** PREP SOURCE IOB * LA IOB01,$IOB GET ADDR OF SOURCE IOB MVC $DISB(2,$IOB),FDPARM+FDDAS MOVE C&S MVI $DIQB(,$IOB),X'A0' SET Q-BYTE *** ADD OFFSET TO C/S LOCATION OF OBJECT MODULE. LA CCBUFF+CCOH-1,XR2 LOAD ADDR READ OFFSET B DG2HEX CONVERT TO HEX LOOP03 CLI CCBUFF+CCOH,X'00' CC INPUT ZERO ? JE LOOP02 JUMP IF ZERO B CSUPD INCR C&S IN SOURCE IOB SLC CCBUFF+CCOH(1),HEX01 SUBTRACT ONE. B LOOP03 LOOP TILL ZERO EJECT *********************************************************************** * COPY OBJECT FILE FROM P PACK TO PACK SPECIFIED IN CC CARD. * *********************************************************************** LOOP02 EQU * *** READ 1 SECTOR FROM OBJECT FILE AT SPECIFIED CYL/SECTOR. * $RDD IOB-IOB01,DISK-5444, LA IOB01,$IOB POINT TO SOURCE IOB MVC $DIDAT(2,$IOB),OBJADR SET BUFFER ADDR MVI $DINB(,$IOB),X'00' ONLY 1 SECTOR AT THE TIME... SBN $DIQB(,$IOB),X'01' READ OPERATION B 0008 BRANCH TO DISK I/O $WAIT IOB-IOB01,ERR-ERR02 B CSUPD UPDATE C&S IN SOURCE IOB SPACE 1 *** WRITE 1 SECTOR TO OBJECT FILE AT SPECIFIED CYL/SECTOR. * $WRTD IOB-IOB02,DISK-5444, LA IOB02,$IOB POINT TO TARGET IOB MVC $DIDAT(2,$IOB),OBJADR SET BUFFER ADDR MVI $DINB(,$IOB),X'00' ONLY 1 SECTOR AT THE TIME... SBN $DIQB(,$IOB),X'02' WRITE OPERATION B 0008 BRANCH TO DISK I/O $WAIT IOB-IOB02,ERR-ERR02 B CSUPD UPDATE C&S IN TARGET IOB SPACE 1 * DECR SECTOR COUNTER, LOOP IF NOT ZERO. SLC SCTRCT(1),HEX01 BNZ LOOP02 IF NOT ZERO LOOP SPACE 1 MVC MESS01+7(6),CCBUFF+CCNM MOVE FILE NAME TO MSG $PRNT NAME-MESS01,LEN-40 SUCCESFULLY WRITTEN... B CRLF B NEXTCC NEXT OBJ FILE PLEASE... EJECT XFER02 EQU * *********************************************************************** * READ AND WRITE THE COMPLETE OBJECT FILE. * * CONVERT & VALIDATE CONTROL CARD INPUT FOR DISK IOB. * *********************************************************************** * LA LDPARM,XR2 GET ADDR OF LOAD PARM LIST * *** LOAD OBJECT FILE INTO STORAGE * MVI LDLB(,XR2),C'O' O-LIBRARY MVC LDNM(6,XR2),CCBUFF+CCNM MOVE O-FILE NAME FOR LOAD B 0004 GOTO GENERAL ENTRY DC XL1'49' RIB - LOAD FROM PROGRAM DISK SPACE 1 * *** CONVERT & VALIDATE CONTROL CARD INPUT FOR DISK IOB USE. * LA IOB01,$IOB POINT TO IOB *** OBJECT WRITE OFFSET LA CCBUFF+CCOL-1,XR2 LOAD WRITE OFFSET L ADDR B DG2HEX CONVERT TO HEX MVC $DIDAT-0(1,$IOB),0(,XR2) MOVE OFFSET(L) TO IOB * LA CCBUFF+CCOH-1,XR2 LOAD WRITE OFFSET H ADDR B DG2HEX CONVERT TO HEX MVC $DIDAT-1(1,$IOB),0(,XR2) MOVE OFFSET(H) TO IOB ALC $DIDAT(2,$IOB),LDPARM+LDLA ADD OBJECT LOAD POINT *** DISK ADDRESS (Q-BYTE) LA CCBUFF+CCDK-1,XR2 LOAD DISK ADDR ADDR B DG2HEX CONVERT TO HEX MVC $DIQB(1,$IOB),0(,XR2) MOVE DISK ADDR TO IOB *** CHECK SPECIFIED VALUES CLI $DIQB(,$IOB),X'A0' R1 DISK ? JE QBOKE2 CLI $DIQB(,$IOB),X'B0' R2 DISK ? JE QBOKE2 CLI $DIQB(,$IOB),X'B1' F2 DISK ? JE QBOKE2 B ERR05 INVALID Q-BYTE SPACE 1 *** CYLINDER AND SECTOR QBOKE2 LA CCBUFF+CCCY-1,XR2 LOAD CYLINDER ADDR ADDR B DG2HEX CONVERT TO HEX MVC $DICB(1,$IOB),0(,XR2) MOVE CYL TO IOB * LA CCBUFF+CCCS-1,XR2 LOAD SECTOR ADDR ADDR B DG2HEX CONVERT TO HEX MVC $DISB(1,$IOB),0(,XR2) MOVE SCTR TO IOB SPACE 1 *** NUMBER OF SECTORS LA CCBUFF+CC##-1,XR2 LOAD NR OF SCTR ADDR B DG2INT CONVERT TO INTEGER MVC $DINB(1,$IOB),0(,XR2) MOVE NR OF SCTRS TO IOB *** CHECK SPECIFIED VALUES CLI $DINB(,$IOB),X'00' NR OF SECTORS = 00 ? BE ERR05 INVALID NR OF SECTORS CLI $DINB(,$IOB),X'18' NR OF SECTORS > 24 ? BH ERR05 INVALID NR OF SECTORS SLC $DINB(1,$IOB),HEX01 SUBTRACT ONE *** START ADDRESS SYSTEM PROGRAM FILE (SPF) LA CCBUFF+CCPF-1,XR2 LOAD SPF ADDR L ADDR B DG2HEX CONVERT TO HEX ALC $DISB(1,$IOB),0(,XR2) ADD START SPF ADDR(L) TO C/S * LA CCBUFF+CCPF-3,XR2 LOAD SPF ADDR H ADDR B DG2HEX CONVERT TO HEX ALC $DICB(1,$IOB),0(,XR2) ADD START SPF ADDR(H) TO C/S SPACE 1 *** WRITE OBJECT FILE TO DISK AT SPECIFIED CYL/SECTOR. * $WRTD IOB-IOB01,DISK-5444, SBN $DIQB(,$IOB),X'02' WRITE OPERATION B 0008 BRANCH TO DISK I/O $WAIT IOB-IOB01,ERR-ERR02 SPACE 1 MVC MESS01+7(6),CCBUFF+CCNM MOVE FILE NAME TO MSG $PRNT NAME-MESS01,LEN-40 SUCCESFULLY WRITTEN... B CRLF B NEXTCC NEXT OBJ FILE PLEASE... EJECT *********************************************************************** * ERROR MESSAGES * *********************************************************************** ERR02 MVC MESS02+7(6),CCBUFF+CCNM MOVE FILE NAME TO MSG $PRNT NAME-MESS02,LEN-36 ERROR R/W TO DISK J CLOSE * ERR03 $PRNT NAME-MESS03,LEN-31 ERROR RD FROM CARD J CLOSE * ERR05 MVC MESS05+7(6),CCBUFF+CCNM MOVE FILE NAME TO MSG $PRNT NAME-MESS05,LEN-38 INVALID DISK ADDRESS B CRLF B NEXTCC * ERR06 MVC MESS06+7(6),CCBUFF+CCNM MOVE FILE NAME TO MSG $PRNT NAME-MESS06,LEN-40 OBJECT MODULE NOT FOUND B CRLF B NEXTCC * EXIT B CRLF $PRNT NAME-MESS09,LEN-16 $BDXM1 ENDED. CLOSE EQU * $CLOS DTF-DTFU01 CLOSE DTF $EOJ THAT'S ALL FOLKS EJECT *********************************************************************** * * * SUB-ROUTINE TO UPDATE CYL & SECT ADDR IN IOB POINTED BY $IOB * * * *********************************************************************** CSUPD EQU * ST CSURTN+3,ARR SAVE RETURN ADDR ALC $DISB(1,$IOB),HEX04 NEXT SECTOR CLI $DISB(,$IOB),X'60' END OF TRACK ? JNE CSUPD1 JUMP IF NOT ALC $DISB(,$IOB),HEX20 SKIP TO NEXT TRACK CSUPD1 CLI $DISB(,$IOB),X'E0' END OF CYLINDER ? JNE CSURTN NO - JUMP MVI $DISB(,$IOB),X'00' RESET SECTOR ADDR ALC $DICB(1,$IOB),HEX01 NEXT CYLINDER CSURTN B *-* RETURN TO CALLER SPACE 2 *********************************************************************** * * * SUB-ROUTINE TO CONVERT 2 EBCDIC CHAR TO 8 BITS HEX. * * * *********************************************************************** DG2HEX EQU * ST DGHRTN+3,ARR SAVE RETURN ADDR ST DGMNZI+4,XR2 MODIFY MNZ INSTR B DG1HEX CONVERT HIGH ORDER LA 1(,XR2),XR2 POINT TO NEXT B DG1HEX CONVERT LOW ORDER DGMNZI MZN 0(,XR2),*-* MOVE H TO L HEX DGHRTN B *-* RETURN TO CALLER SPACE 1 DG1HEX EQU * ST DG1RTN+3,ARR SAVE RETURN ADDR CLI 0(,XR2),C' ' SPACE ? BE DG1RTN IF YES - SKIP IT * CLI 0(,XR2),X'F0' 0 - 9 ? BL DG1A2F CHECK FOR POSSIBLE A-F CLI 0(,XR2),X'F9' * BH ERR05 * J DG1EXT EXIT * DG1A2F CLI 0(,XR2),X'C0' A - F ? BL ERR05 * CLI 0(,XR2),X'C6' * BH ERR05 * ALC 0(,XR2),HEX09 ADD HEX CORRECTION * DG1EXT SBF 0(,XR2),X'F0' REMOVE HIGH ORDER BITS DG1RTN B *-* RETURN TO CALLER EJECT *********************************************************************** * * * SUB-ROUTINE TO CONVERT 3 DEC DIGITS TO 1 BYTE. * * * *********************************************************************** DG2INT EQU * ST DG2RTN+3,ARR SAVE RETURN ADDR CLI 0(,XR2),C' ' SPACE ? BE DG2EXT IF YES - SKIP IT * LEFT DIGIT (HUNDERD) CLI 0(,XR2),X'F0' 0 - 9 ? BL ERR05 * CLI 0(,XR2),X'F9' * BH ERR05 * * MIDDLE DIGIT (TEN) CLI 1(,XR2),X'F0' 0 - 9 ? BL ERR05 * CLI 1(,XR2),X'F9' * BH ERR05 * * RIGHT DIGIT (ONE) CLI 2(,XR2),X'F0' 0 - 9 ? BL ERR05 * CLI 2(,XR2),X'F9' * BH ERR05 * SPACE 1 SBF 0(,XR2),X'F0' REMOVE HIGH ORDER BITS SBF 1(,XR2),X'F0' * SBF 2(,XR2),X'F0' * * DBDLP1 CLI 0(,XR2),X'00' ZERO ? JE DBDLP2 IF YES, END OF CONVER. ALC 2(,XR2),HEX64 ADD 100. SLC 0(,XR2),HEX01 SUBTRACT 1. B DBDLP1 LOOP... * DBDLP2 CLI 1(,XR2),X'00' ZERO ? JE DG2EXT IF YES, END OF CONVER. ALC 2(,XR2),HEX0A ADD 10. SLC 1(,XR2),HEX01 SUBTRACT 1. B DBDLP1 LOOP... * DG2EXT LA 2(,XR2),XR2 POINT TO RESULT DG2RTN B *-* RETURN TO CALLER SPACE 2 *********************************************************************** * * * SUB-ROUTINE CARRIAGE RETURN AND LINE FEED * * * *********************************************************************** CRLF EQU * ST CRLRTN+3,ARR SAVE RETURN ADDR $PRNT NAME-MESSCR,LEN-1 PRINT IT CRLRTN B *-* RETURN TO CALLER EJECT *********************************************************************** * * * CONSTANTS, TEXT MESSAGES, IOB, DTF AND I/O BUFFERS. * * * *********************************************************************** MESS00 EQU * * ....+....1....+....2....+....3....+....4 -> 80 DC CL80'$BDXM1 V3.0 STARTED...' @01 SPACE 1 MESS01 EQU * * ....+....1....+....2....+....3....+....4 DC CL40' @@@@@@ SUCCESSFULLY WRITTEN TO DISK.' SPACE 1 MESS02 EQU * * ....+....1....+....2....+....3....+....4 DC CL40' @@@@@@ READ/WRITE ERROR ON DISK.' SPACE 1 MESS03 EQU * * ....+....1....+....2....+....3....+....4 DC CL40' ERROR READING CONTROL CARD. ' SPACE 1 MESS05 EQU * * ....+....1....+....2....+....3....+....4 DC CL40' @@@@@@ INVALID DISK ADDR SPECIFIED. ' SPACE 1 MESS06 EQU * * ....+....1....+....2....+....3....+....4 DC CL40' @@@@@@ OBJECT MODULE NOT FOUND ON R1!' SPACE 1 MESS09 EQU * * ....+....1....+....2 DC CL40'$BDXM1 ENDED.' SPACE 1 MESSCR EQU * DC CL1' ' EJECT DTFU01 $DTFU DEV-MFCU,FTYP-I,RDA1-CCBUFF SPACE 1 IOB01 $IOBD BUFF-OBJECT 'FROM' DISK IOB SPACE 1 IOB02 $IOBD BUFF-OBJECT 'TO' DISK IOB SPACE 1 FDPARM DC CL1'O' LIBRARY DC CL6'@@@@@@' MODULE NAME DC CL1'P' P OR S PACK DC XL4'00' FILLED BY $FIND * LDPARM EQU * LOAD O-FILE PARM LIST DC CL1'O' OBJECT FILE DC CL6'@@@@@@' FILE NAME DS XL1 USED BY LOAD DC AL2(OBJECT) LOAD ADDRESS * SCTRCT DC XL1'00' NR OF SCTRS TO COPY COUNTER * HEX01 DC XL1'01' HEX 01 HEX04 DC XL1'04' HEX 04 HEX09 DC XL1'09' HEX 09 HEX0A DC XL1'0A' HEX 0A (DEC 10) HEX20 DC XL1'20' HEX 20 HEX64 DC XL1'64' HEX 64 (DEC 100) * EBC00 DC CL2'00' EBCDIC 00 * ORG *,128,0 128 BYTE BOUNDARY CCBUFF EQU * DS XL96 INPUT BUFF FOR CNTL CARDS * OBJADR DC AL2(OBJECT) OBJECT BUFFER ADDRESS ORG *,256,0 256 BYTE BOUNDARY OBJECT EQU * STORAGE FOR OBJECT FILE, MAX DS 84XL256 * SIZE 21248 BYTES * *** EQUATES * * CONTROL CARD LAYOUT CCNM EQU 5 OBJECT FILE NAME CCOH EQU 10 OBJECT READ OFFSET (HIGH) @01 CCOL EQU 12 OBJECT READ OFFSET (LOW) @01 CCAR EQU 15 ARROW CCPF EQU 20 LOC SYSTEM PROGRAM FILE CCDK EQU 23 REL DISK ADDRESS IN SPF CCCY EQU 26 CYLINDER CCCS EQU 28 CYL/SECTOR CC## EQU 31 NR OF SECTORS * * FIND REQUEST PARM LIST LAYOUT FDLB EQU 0 R/O LIBRARY INDR FDNM EQU 6 OBJECT MODULE NAME FDPS EQU 7 P OR S PACK INDR * * LOAD PARM LIST LAYOUT LDLB EQU 0 R/O LIBRARY INDR LDNM EQU 6 FILE NAME LDLA EQU 9 LOAD ADDRESS * * FIND RESULT PARM LIST LAYOUT FDDAC EQU 0 MODULE DISK ADDR (CYL) FDDAS EQU 1 MODULE DISK ADDR (SCTR) FDTSL EQU 2 TEXT SECTOR LENGTH FDLEA EQU 4 LINK EDIT ADDRESS FDRLD EQU 5 DISP OF RLD'S FDEPA EQU 7 ENTRY POINT ADDRESS FDSIZ EQU 8 STORAGE SIZE FDATT EQU 10 MODULE ATTRIBUTES * * GENERAL EQUATES XR1 EQU 1 INDEX REGISTERS XR2 EQU 2 * DTF EQU 1 DTF REGISTER ARR EQU 8 ADDRESS RECALL REG. IAR EQU 16 * END /& * *** ASSEMBLE THE $BDXM1 SOURCE. * // LOAD $ASSEM,F2 // SWITCH 10000000 // COMPILE OBJECT-R1 // FILE NAME-$SOURCE,PACK-F2F2F2,UNIT-F2,RETAIN-S,TRACKS-30 // FILE NAME-$WORK,PACK-F2F2F2,UNIT-F2,RETAIN-S,TRACKS-30 // FILE NAME-$WORK2,PACK-F2F2F2,UNIT-F2,RETAIN-S,TRACKS-30 // RUN * *** LINK IT ALL TOGETHER. * // LOAD $OLINK,F1 // FILE NAME-$SOURCE,PACK-F2F2F2,UNIT-F2,RETAIN-S,TRACKS-50 // FILE NAME-$WORK,PACK-F2F2F2,UNIT-F2,RETAIN-S,TRACKS-25 // RUN // PHASE NAME-$BDXM1,UNIT-R1,RETAIN-R,LINKADD-X'1200' // INCLUDE NAME-$BDXM1,UNIT-R1 // INCLUDE NAME-$$MFRD,UNIT-F1 // END * // READER CONSOLE