File OSPACK.PA (PAL assembler source file)

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

/*** TSS/8 OSPACK *** VERSION 1 ***\
/
/
/PROGRAM TO TAKE A TSS/8 ASCII FILE, REMOVE RUBOUTS,
/AND REPACK IN OS/8 ASCII FORMAT.
/TO USE: OPEN OBJECT FILE, ON INTERNAL FILE#0,
/OPEN A NEWLY CREATED FILE ON FILE#1.
/THE OBJECT FILE SHOULD BE TSS/8 ASCII FORMAT
/THE SECOND FILE WILL BE REPACKED, MINUS RUBOUTS
/AND IN OS/8 ASCII FORMAT.
/
/	BY JOHN YOUNG	2/27/76
/
/

BUFF1= 2000 /INPUT BUFFER BUFF2= 2400 /OUTPUT BUFFER *0000 CLA CLL /INITIALIZE... TAD RESTRT SRA UND JMP I .+1 OPNFLS ERROR, ERROR1 P207, 207 *0020 RESTRT, .+1 STA /CLOSE ALL FILES ON ERROR, ^C, OR HALT CLOS TAD .+2 DCA 0 HLT /DEPOSIT HALT IN LOC 0 SO WE CAN'T RESTART JMP .-1 EXTBLK, .+1 1 /INTERNAL FILE#1 1 /EXTEND ONE SEGMENT HLTCHK, CLL RTR /IF ERROR IN AC = EOF = 2, THEN WE ARE DONE. SNA CLA JMP .+3 TAD ERROR JMP OUT TAD WCOUT /IF WCOUT = 0, THEN LAST BUFFER WAS WRITTEN OUT. SZA CLA JMS WRITE TAD P207 TLS TLS CLA JMP OUT /READ FILE DATA RFDT, .+1 -1 /HIGH ORDER FILE ADDRESS 0 /INTERNAL FILE#0 -400 /-# OF WORDS TO TRANSFER BUFF1-1 /BUFFER ADDRESS -1 -400 /LOW ORDER DISK ADDRESS 0 /ERROR RETURN /WRITE FILE DATA WFDT, .+1 -1 /HIGH ORDER FILE ADDRESS 1 /INTERNAL FILE#1 -400 /-# OF WORDS TO TRANSFER BUFF2-1 /BUFFER ADDRESS -1 -400 /LOW ORDER DISK ADDRESS 0 /ERROR RETURN P400, 400 /LENGTH OF ONE DISK SEGMENT N400, -400 /LENGTH OF BOTH INPUT AND OUTPUT BUFFERS N200, -200 /LENGTH OF BOTH BUFFERS/2 BUF1PT, BUFF1-1 /INPUT BUFFER -1 BUF2PT, BUFF2-1 /OUTPUT BUFFER -1 INTM1, 0 /INPUT TEMP STORE BUFTR1, 0 /INPUT BUFFER POINTER WCINP, 0 /INPUT WORD COUNT P7400, 7400 /MASK BITS 0-3 P377, 377 /8 BIT MASK P17, 17 /HALF OF A ASCII CHAR MASK N377, -377 /NEGATIVE RUBOUT BUFTR2, 0 /OUTPUT BUFFER POINTER /ROUTINE TO OUTPUT A SHAVED, PACKED ASCII STRING, CRLF, HALT. WCOUT, 0 /OUTPUT WORD COUNT OUTCHR, 0 /CHAR TO BE WRITTEN P77, 77 P100, 100 P40, 40 P15, 15 N3, -3 WRITE, 0 CLA /CLEAR OUT ANY GARBAGE JMP .+5 /ON FIRST CALL, DON'T DO AN EXTEND TAD EXTBLK EXT /EXTEND ONE SEGMENT SZA JMP HLTCHK DCA WRITE+2 /WIPE OUT SKIP TAD N400 DCA WFDT+3 /400 WORDS TO TRANSFER TAD BUF2PT DCA WFDT+4 /BUFFER ADDRESS -1 TAD WFDT+5 TAD P400 /DISK ADDRESS+400=NEW DISK ADDRESS. SNA /IF IT =0, THEN INCREMENT HIGH ORDER ADDRESS ISZ WFDT+1 NOP DCA WFDT+5 TAD WFDT WFILE /WRITE OUT ONE SEGMENT TAD WFDT+6 SZA JMP HLTCHK JMP I WRITE OUT, SNA JMP OUT3 DCA 10 OUT1, TAD I 10 DCA OUTCHR TAD OUTCHR RTR RTR RTR JMS OUT2 TAD OUTCHR JMS OUT2 JMP OUT1 OUT2, 0 AND P77 SNA JMP OUT3 DCA 0 TAD 0 AND P40 SNA CLA TAD P100 TAD 0 TLS CLA JMP I OUT2 OUT3, TAD P15 TLS TAD N3 TLS JMP RESTRT+1 *0200 INIT, TAD N400 DCA RFDT+3 /400 WORDS TO TRANSFER TAD BUF1PT /BUFFER ADDRESS -1 DCA RFDT+4 TAD RFDT+5 /DISK ADDRESS+400=NEW DISK ADDRESS, TAD P400 /IF=0 THEN INCREMENT HIGH ORDER ADDRESS SNA ISZ RFDT+1 NOP DCA RFDT+5 TAD RFDT RFILE /READ IN ONE SEGMENT FROM OBJECT FILE. TAD RFDT+6 SZA JMP HLTCHK /IF ERROR, CHECK, WE MAY BE DONE (EOF ONLY) TAD N200 DCA WCINP IAC TAD BUF1PT /BUFFER ADDRESS+1-1=BUFFER ADDRESS DCA BUFTR1 /SAVE POINTER INLOOP, TAD I BUFTR1 /CHAR 1 = BITS 0-7 WORD0 RTR RTR AND P377 /SAVE WHAT WE NEED JMS OUTPUT /GO STORE IT TAD I BUFTR1 /FIRST 4 BITS OF CHAR2=WORD0, BITS 8-11 AND P17 /SAVE 4 BITS CLL RTL RTL DCA INTM1 /ROTATE TO MID 4 BITS AND SAVE TEMP ISZ BUFTR1 /INCREMENT TO WORD 1 TAD I BUFTR1 /LAST 4 BITS CHAR2= WORD1, BITS 0-3 CLL RTL /ROTATE THROUGH LINK RTL RAL AND P17 /SAVE WHAT WE NEED TAD INTM1 /GET FIRST 4 BITS AND P377 /JUST IN CASE, SAVE WHAT WE NEED ANYWAY. JMS OUTPUT /SAVE CHAR TAD I BUFTR1 /CHAR3=WORD1, BITS 4-11 AND P377 /SAVE WHAT WE NEED ISZ BUFTR1 /MUST INCREMENT BUFFER POINTER JMS OUTPUT /GO SAVE CHAR ISZ WCINP /IF WE LOOP 200(*2) TIMES, INITIALIZE AGAIN JMP INLOOP /KEEP GOING JMP INIT /INITIALIZE FOR NEXT FILE READ OUTPUT, 0 TAD N377 SNA JMP I OUTPUT /IF IT'S A RUBOUT, IT'S EVIL, DON'T SAVE IT! TAD P377 /ADD IT BACK DCA OUTCHR /SAVE CHAR JMP I .+1 /DISPATCH OUTOUT, OUTSAV JMP I OUTPUT OUTSAV, TAD BUF2PT /SET BUFFER POINTER IN AUTOINDEX DCA 10 TAD N400 /400 WORD BUFFER DCA WCOUT DCA I 10 /ZERO OUT THE WHOLE BUFFER (JUST IN CASE) ISZ WCOUT /DONE? JMP .-2 /NOPE, KEEP GOING IAC /YUP, BUFFER ADDRESS+1-1=BUFFER ADDRESS TAD BUF2PT DCA BUFTR2 TAD N200 /LOOP 200(*2) TIMES DCA WCOUT JMP OULOOP+1 /SO WE DON'T GO AWAY WITHOUT DOING ANYTHING OULOOP, JMS OUTOUT /GO AWAY TAD OUTCHR DCA I BUFTR2 /SAVE CHAR1 IN WORD0, 4-11 ISZ BUFTR2 /INCREMENT BUFFER POINTER JMS OUTOUT /GO AWAY TAD OUTCHR DCA I BUFTR2 /SAVE CHAR2, WORD1, 4-11 JMS OUTOUT /GO AWAY CMA TAD BUFTR2 /BACK UP POINTER DCA BUFTR2 /SAVE IT TAD OUTCHR /ROTATE CHAR 4 LEFT RTL RTL DCA OUTCHR /SAVE IT TAD OUTCHR /GET IT BACK AND P7400 /ONLY NEED BITS 0-3 TAD I BUFTR2 /GET WORD0 WITH IT. DCA I BUFTR2 /SAVE IT ISZ BUFTR2 /INCREMENT WORD1 TAD OUTCHR /GET LAST 4 BITS RTL RTL AND P7400 /SAVE WORD1, BITS 0-3 TAD I BUFTR2 /GET REST OF WORD DCA I BUFTR2 /SAVE WHOLE THING ISZ BUFTR2 /NOW BUFFER POINTER=WORD0+2 ISZ WCOUT /200(*2) WORDS YET? JMP OULOOP /NO, LOOP, AND GO AWAY. JMS WRITE /YES, WRITE OUT BUFFER JMS OUTOUT /NOW, YOU CAN GO AWAY JMP OUTSAV /INITIALIZE, AND START THIS WHOLE MESS OVER AGAIN...............
*0400 OPNFLS, CLA CLL KSF JMP HELP /HELP HIM IF HE DIDN'T TELL US ANYTHING JMS GET0 OUTBLK+2 /DESTINATION -1 JMP BADCON /RETURN ON CRLF JMS GET0 /RETURN ON "<" INBLK+2 /DESTINATION -1 SKP /RETURN ON CRLF JMP BADCON /RETURN ON "<" TAD INBLK OPEN SZA CLA JMP BADINO TAD CRBLK CRF SZA CLA JMP BADOUC TAD OUTBLK OPEN SZA CLA JMP BADOUO JMP I .+1 INIT CRBLK, OUTBLK+3 OUTBLK, .+1 1 0 0 0 0 INBLK, .+1 0 0 0 0 0 HELP, TAD HELPER SKP BADCON, TAD CONST SKP BADOUC, TAD CREATE SKP BADOUO, TAD OUTOPN SKP BADINO, TAD INOPN JMP OUT HELPER, HELP1-1 CONST, CONST1-1 CREATE, CREAT1-1 OUTOPN, OUTOP1-1 INOPN, INOPN1-1
GET0, 0 CLA STL RAR KSB TAD N10 /IF HE INPUTS 8 CHARS, IT'S A BAD ARG DCA COUNT TAD BUFF DCA 10 /SET UP BUFFER POINTER DCA FLAG GET1, KRB DCA CHAR TAD CHAR TAD NBRACK SNA JMP GET2-1 /IF IT'S A "<", SET THE FLAG, AND GO DECODE TAD NCR SNA CLA JMP GET2 /IF IT'S A <CR>, GO DECODE TAD CHAR DCA I 10 ISZ COUNT JMP GET1 JMP BADCON ISZ FLAG /PUT A "1" IN FLAG GET2, DCA I 10 /PUT ZEROS IN THE REST OF THE BUFFER ISZ COUNT JMP GET2 TAD BUFF DCA 10 /SET UP THE BUFFER POINTER, AGAIN TAD I GET0 /GET OUT DESTINATION -1 ISZ GET0 /INCREMENT PAST IT DCA 11 /SAVE IT CMA CLL RTL /AC= -3 DCA COUNT GET3, TAD I 10 /GET A CHAR SZA /DON'T TAKE 240 FROM 0 TAD N240 AND P77 /SHAVE OFF EXCESS CLL RTL RTL RTL /PUT IN LEFT BYTE (CHAR 1 IS NOW PACKED) DCA CHAR /SAVE (TEMP) TAD I 10 /GET NEXT CHAR SZA TAD N240 /DON'T TAKE 240 FROM 0 AND P77 /SAVE OFF GARBAGE TAD CHAR /GET CHAR1 DCA I 11 /STORE 2 PACKED CHARS ISZ COUNT /DO IT 3 TIMES JMP GET3 TAD FLAG /GET FLAG TAD GET0 /ADD TO RETURN ADDRESS DCA GET0 /SAVE IT JMP I GET0 /GO AWAY.... N10, -10 FLAG, 0 COUNT, 0 NBRACK, -"< BUFF, END NCR, "<-215 N240, -" CHAR, 0 HELP1, TEXT "OUT<IN(CR) (OS/8<TSS/8)" CONST1, TEXT "BAD ARGS" CREAT1, TEXT "CAN'T CREATE OUTPUT FILE" OUTOP1, TEXT "CAN'T OPEN OUTPUT FILE" INOPN1, TEXT "CAN'T OPEN INPUT FILE" ERROR1, TEXT "DISK I/O ERROR" 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