File COPY.SB (8k SABR macro assembler source file)

Directory of image this file is from
This file as a plain text file

/COPY.SB, PAGE 1 OF 9.	(6/10/72 - C.M.MOORE, RICE U., HOUSTON)
/
/COPIES LINCTAPE 0 ONTO LINCTAPE 1.
/
/TAPES ARE ASSUMED TO BE PS/8 LINCTAPES.
/(3000 OCTAL BLOCKS OF LENGTH 128 OR 129 WORDS.)
/
/THE ENTIRE TAPE IS DUPLICATED IN 3 MINUTES, INCLUDING THE PS/8
/SYSTEM BLOCKS, WHICH ARE NOT COPIED WHEN YOU USE THE PIP /S OPTION.
/ALSO, ALL TAPE READS & WRITES ARE CHECKED. (PIP DOESN'T CHECK WRITES.)
/
/TYPE RETURN TO INITIATE COPYING AFTER EXPLANATION DISPLAY APPEARS.
/TYPE CTRL/C TO RETURN TO PS/8 KEYBOARD MONITOR.
/YOU MAY LEAVE DEVICE SYS WRITE-LOCKED WHILE RUNNING COPY.
/(TO PERMIT THIS, COPY USES THE MODIFIED VERSION OF UTILTY.SB ON THIS
/TAPE, RATHER THAN THE LIB8 LIBRARY VERSION.)
/
/TOTAL BUFFER SPACE HOLDS 53 OCTAL 128-WORD OR 129-WORD BLOCKS.
IBUFF,	COMMN 7200 /36 OCTAL BLOCKS IN FIELD 1, STARTING AT LOC 0000.
		   /15 OCTAL BLOCKS IN FIELD 0, STARTING AT LOC 4200.
OPDEF TADI  1400
OPDEF DCAI  3400
ABSYM DCONT 100
ABSYM ICONT 101
ABSYM JCONT 102
ABSYM KCONT 103
ABSYM NBLK1 104
ABSYM NBLK0 105
ABSYM LOC   106
ABSYM ERRNUM 107
/
	ENTRY MAIN /START OF PROGRAM
MAIN,	NOP
	CALL 0,OPEN
/ADJUST JOB STATUS WORD TO PREVENT RESTARTING COPY.
	6201 /CDF 0
	TADI (7746
	AND  (6777
	TAD  (1000
	DCAI (7746
HELP,	CALL 1,IHELP /CALL HELP DISPLAY ROUTINE
	ARG (1
	CLA /IGNORE INDEX RETURNED BY IHELP
/LOOP TO COPY TAPE 0 TO TAPE 1
	TAD (-44 /- # OF BUFFER LOADS REQUIRED
	DCA ICONT
	TAD ICONT
	DCA JCONT
	TAD (-36 /- # OF BLOCKS STORED IN FIELD 1 BUFFER
	DCA NBLK1
	TAD (-15 /- # OF BLOCKS STORED IN FIELD 0 BUFFER
	DCA NBLK0
	DCA IBLK0 /TAPE 0 BLOCK # FOR FIELD 0 BUFFER
	DCA JBLK0 /TAPE 1 BLOCK # FOR FIELD 0 BUFFER
/CHECK FOR FINAL BUFFER LOAD
CPLOOP,	ISZ JCONT
	JMP RDTAPE
	CLA CMA
	DCA NBLK0 /ON THE FINAL LOAD, ONLY 1 BLOCK IS STORED IN FIELD 0.

/COPY.SB, PAGE 2 / /READ AND CHECK TAPE 0 RDTAPE, TAD NBLK1 DCA KCONT /-# OF BLOCKS DCA LOC /START OF FIELD 1 BUFFER TAD IBLK0 DCA IBLK1 /STARTING TAPE BLOCK # TAD (1020 /PUT BUFFER IN FIELD 1 CPAGE 3 6141 /LINC 0001 /AXO 0002 /PDP CLA /LOOP TO LOAD FIELD 1 BUFFER RD1LUP, TAD LOC CPAGE 5 6141 /LINC 0023 /TMA 0702 /RDE 0 IBLK1, 0000 /TAPE 0 BLOCK # 0002 /PDP IAC /AC=7777 IF TAPE READ WAS OK. SZA CLA JMP RD1ERR INC IBLK1 TAD LOC TAD (201 DCA LOC ISZ KCONT JMP RD1LUP TAD NBLK0 DCA KCONT TAD (4200 /START OF FIELD 0 BUFFER DCA LOC TAD IBLK1 DCA IBLK0 TAD (0020 /PUT BUFFER IN FIELD 0 CPAGE 3 6141 /LINC 0001 /AXO 0002 /PDP CLA /LOOP TO LOAD FIELD 0 BUFFER RD0LUP, TAD LOC CPAGE 5 6141 /LINC 0023 /AXO 0702 /RDE 0 IBLK0, 0000 /TAPE 0 BLOCK # 0002 /PDP IAC SZA CLA JMP RD0ERR INC IBLK0 TAD LOC TAD (201 DCA LOC ISZ KCONT JMP RD0LUP JMP WRTAPE
/COPY.SB, PAGE 3 / /CHECKSUM ERROR IN READING TAPE 0. TRY AGAIN. RD1ERR, TAD IBLK1 JMS DSERR /DISPLAY ERROR MESSAGE JMP RD1LUP RD0ERR, TAD IBLK0 JMS DSERR JMP RD0LUP /WRITE TAPE 1, BUT DON'T CHECK YET (THIS SAVES MUCH TIME!) WRTAPE, TAD NBLK1 DCA KCONT DCA LOC TAD JBLK0 DCA JBLK1 TAD (1020 CPAGE 3 6141 /LINC 0001 /AXO 0002 /PDP CLA WR1LUP, TAD LOC /LOOP TO DUMP FIELD 1 BUFFER CPAGE 5 6141 /LINC 0023 /TMA 0716 /WRI 1 JBLK1, 0000 /TAPE 1 BLOCK # 0002 /PDP CLA INC JBLK1 TAD LOC TAD (201 DCA LOC ISZ KCONT JMP WR1LUP TAD NBLK0 DCA KCONT TAD (4200 DCA LOC TAD JBLK1 DCA JBLK0 TAD (0020 CPAGE 3 6141 /LINC 0001 /AXO 0002 /PDP CLA WR0LUP, TAD LOC /LOOP TO DUMP FIELD 0 BUFFER CPAGE 5 6141 /LINC 0023 /TMA 0716 /WRI 1 JBLK0, 0000 /TAPE 1 BLOCK # 0002 /PDP CLA INC JBLK0 TAD LOC TAD (201 DCA LOC ISZ KCONT JMP WR0LUP
/COPY.SB, PAGE 4 / /NOW CHECK THE BUFFER LOAD THAT WAS JUST WRITTEN ON TAPE 1. TAD JBLK0 TAD NBLK1 TAD NBLK0 DCA KBLK1 /RESET BLOCK # TAD NBLK1 DCA KCONT DCA LOC TAD (1020 CPAGE 3 6141 /LINC 0001 /AXO 0002 /PDP /LOOP TO CHECK DATA FROM FIELD 1 BUFFER CPAGE 4 CK1LUP, 6141 /LINC 0717 /CHK 1 KBLK1, 0000 /TAPE 1 BLOCK # 0002 /PDP IAC SZA CLA JMP WR1ERR INC KBLK1 TAD LOC TAD (201 DCA LOC ISZ KCONT JMP CK1LUP TAD NBLK0 DCA KCONT TAD (4200 DCA LOC TAD KBLK1 DCA KBLK0 TAD (0020 CPAGE 3 6141 /LINC 0001 /AXO 0002 /PDP /LOOP TO CHECK DATA FROM FIELD 0 BUFFER CPAGE 4 CK0LUP, 6141 /LINC 0717 /CHK 1 KBLK0, 0000 /TAPE 1 BLOCK # 0002 /PDP IAC SZA CLA JMP WR0ERR INC KBLK0 TAD LOC TAD (201 DCA LOC ISZ KCONT JMP CK0LUP /
/COPY.SB, PAGE 5 / CALL 1,KEYBD /CHECK FOR CTRL/C DURING COPYING ARG (0 CLA ISZ ICONT /ANY MORE BUFFER LOADS? JMP CPLOOP /YES JMP REWIND /NO /CHECKSUM ERROR IN WRITING TAPE 1. TRY AGAIN WR1ERR, TAD KBLK1 JMS DSERR TAD KBLK1 DCA JBLK1 JMP WR1LUP WR0ERR, TAD KBLK0 JMS DSERR TAD KBLK0 DCA JBLK0 JMP WR0LUP / /DISPLAY "CHECKSUM ERROR BLOCK NNNN. TRYING AGAIN." TEXT1, TEXT /CHECKSUM ERROR BLOCK@/ TEXT2, TEXT /TRYING AGAIN@/ DSERR, 0 DCA ERRNUM TAD (-1000 DCA DCONT /LOOP TO DISPLAY MESSAGE FOR APPROXIMATELY 5 SECONDS DSLOOP, CALL 3,DISP9 ARG (-1 ARG (100 ARG TEXT1 CALL 3,DISP7 ARG (-573 ARG (100 ARG ERRNUM CALL 3,DISP9 ARG (-1 ARG (-100 ARG TEXT2 CALL 1,KEYBD /CHECK FOR CTRL/C ARG (-1 CLA ISZ DCONT JMP DSLOOP JMP I DSERR /
/COPY.SB, PAGE 6 / /REWIND TAPES 0 & 1 SIMULTANEOUSLY REWIND, TAD (4 CPAGE 23 6141 /LINC 0001 /AXO (SET "HOLD UNIT MOTION" BIT IN XOB) 0723 /MTB I 0 /FIRST START UNIT 0 REWINDING 0200 0723 /MTB I 0 (DO WE NEED 2?) 0200 0733 /MTB I 1 /THEN START UNIT 1 REWINDING 0002 0733 /MTB I 1 0002 0707 /CHK 0 /JUST TO BE SAFE, STOP UNIT 0 AT BLOCK 200 0200 0011 /CLR 0001 /AXO (CLEAR UNIT MOTION BIT IN XOB) 0717 /CHK 1 /FINISH REWINDING UNIT 1 0001 0707 /CHK 0 /FINALLY, FINISH REWINDING UNIT 0 0001 0002 /PDP AAWIND, JMP HELP /CALL DISPLAY ROUTINE AGAIN / / LAP CPAGE 200 /START ON NEW PAGE IF INSERTED WITH OTHER SABR CODE. / OPDEF TADI 1400 / CNT1, 0 CNT2, 0 CNT3, 0 PNT1, 0 PNT2, 0 PNT3, 0 PNT4, 0 IFLAG, 0 / /FUNCTION IHELP(IFLAG) ENTRY IHELP IHELP, BLOCK 2 CLA /FETCH ARGUMENT (IFLAG) TAD IHELP DCA CDFHLP CDFHLP, HLT /CHANGE TO DF OF CALLING PROG TADI IHELP# DCA CDFARG INC IHELP# TADI IHELP# DCA PNT1 INC IHELP# CDFARG, HLT /CHANGE TO DF OF ARG TADI PNT1 DCA IFLAG /CARRIAGE-RETURN FLAG /
/COPY.SB, PAGE 7 / HELPER, TAD I HMAXP /CHANGE TO CURRENT DF. DCA CNT1 /# OF FRAMES TAD H1P DCA PNT1 SETUP, TAD PNT1 /SET UP FOR NEXT FRAME IAC DCA PNT2 TADI PNT2 CIA TADI PNT1 DCA CNT2 /# OF LINES IN FRAME TADI PNT1 DCA PNT2 FRAME, TAD PNT2 /RESET FRAME POINTERS DCA PNT3 TAD CNT2 DCA CNT3 FLOOP, TADI PNT3 /LOOP TO DISPLAY LINES IN FRAME DCA ARG1# TAD ARG1# IAC DCA ARG2# TAD ARG2# IAC DCA ARG3# CALL 3,DISP9 /DISPLAY NEXT LINE ARG1, ARG HELP1 /X-COORD (<0 FOR FULL-SIZED CHARS) ARG2, ARG HELP1 /Y-COORD ARG3, ARG HELP1 /START OF TEXT INC PNT3 ISZ CNT3 JMP FLOOP CALL 1,KEYBD /CHECK IF ANYTHING TYPED ARG HELP1 SNA JMP FRAME /NOTHING TYPED YET DCA CDFARG TAD CMAX DCA CNT3 /NUMBER OF TERMINATING CHARACTERS TAD C1P DCA PNT3 DCA PNT4 /CHARACTER INDEX NUMBER CHLUP, TADI PNT3 /GET CHAR TAD CDFARG SNA CLA JMP CFOUND /CHAR FOUND INC PNT3 INC PNT4 ISZ CNT3 JMP CHLUP JMP FRAME /IGNORE ANY OTHER CHARACTERS /
/COPY.SB, PAGE 8 / /CHARACTER FOUND. CHECK FOR M OR CARRIAGE-RETURN CFOUND, CLA CMA /AC=-1 TAD PNT4 SNA JMP CR /CARRIAGE-RETURN TYPED SPA JMP MORE /M TYPED NDEX, IAC RETRN IHELP /RETURN WITH CHAR INDEX IN AC. / /M TYPED. ADVANCE HELP DISPLAY FRAME. MORE, CLA INC PNT1 ISZ CNT1 JMP SETUP JMP HELPER /CARRIAGE-RETURN TYPED. CHECK C-R FLAG. CR, TAD IFLAG SNA CLA JMP FRAME /IGNORE C-R. JMP NDEX /RETURN WITH 1 IN AC. / / /TABLE OF HELP DISPLAY TERMINATION CHARACTERS. / CMAX, -2 /NEGATIVE OF NUMBER OF CHARACTERS C1P, C1 /POINTS TO TABLE /CHARACTER TABLE C1, -315 /M (INDEX=0 : CAUSES FRAME ADVANCE) -215 /C-R (INDEX=1 : IGNORED IF IFLAG=0) /END OF CHARACTER TABLE / / /HELP FRAME POINTER TABLE. /EACH ENTRY POINTS TO THE ADDRESS OF THE FIRST TEXT LINE IN THE FRAME. /TABLE MUST TERMINATE WITH "HMAXP, HMAX". H1P, H1 /POINTS TO TABLE /START OF TABLE H1, F1 HMAXP, HMAX /END OF TABLE /
/COPY.SB, PAGE 9 / /TEXT POINTER TABLE. /CONTAINS TEXT ADDRESSES FOR LINES IN EACH HELP FRAME. /FRAME 1 F1, HELP1 HELP2 HELP3 HELP4 HELP5 HELP6 HMAX, -1 /NEGATIVE OF NUMBER OF HELP FRAMES. MUST TERMINATE TABLE /END OF TEXT POINTER TABLE. / /HELP TEXT DISPLAY STRINGS. /EACH STRING BEGINS WITH ITS X-Y COORDS. CPAGE 22 0;0 /USED TO AVOID I.F. LOC 1 FOR DISP9 HELP1, -22;300 TEXT 'P S / 8 T A P E C O P Y@' CPAGE 21 HELP2, 144;200 TEXT /DUPLICATES TAPE 0 ONTO TAPE 1@/ CPAGE 22 HELP3, 144;140 TEXT '(INCLUDING PS/8 SYSTEM BLOCKS)@' HELP4, 106;0 TEXT /TAPES MUST USE 128 OR 129 WORD BLOCKS@/ HELP5, 106;-200 TEXT /TYPE CARRIAGE-RETURN TO COPY TAPE@/ HELP6, 106;-300 TEXT 'TYPE CTRL/C TO RETURN TO PS/8@' AACOPY, 0 /DUMMY LAST LOC END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search