/******* TOPS-8 TASK LIBRARY BUILDER ******* /THIS PROGRAM BUILDS A MODULE LIBRARY FOR TOPS-8 /IN A FILE ON THE SYSTEM DEVICE. /THE PROGRAM IS INTENDED TO BE USED WHEN /GETTING A SYSTEM OFF THE GROUND: MODULES CAN BE LOADED /AS REGULAR OS8 BINARY FILES. THE RESULTING FILE /CAN BE SAVED FOR LATER USE. /IN ORDER TO BE ABLE TO ADD MODULES TO AN EXISTING /LIBRARY, THERE IS A DISKMAP, AND ALL THE SYSTEM TABLES /OF TOPS-8 ARE SAVED THERE TOO. THE DISKMAP CONTAINS /256 (1 BLOCK) ENTRIES, GOOD FOR 256 BLOCKS. /9 FILES CAN BE LOADED IN ONE SINGLE COMMAND LINE. /ONE SINGLE FILE MAY CONTAIN MORE THAN 1 MODULE. /THE /Z OPTION ZEROES THE DISKMAP AND RESETS INTERNAL /TABLES.IT WORKS ONLY WHEN LOADED TOGETHER WITH TOPS-8. /WHEN ASSEMBLING THIS PROGRAM, THE FILE MS.PA /(MADE WITH GLOBL.SV FROM THE SYMBOLTABLE OF TOPS-8) /MUST BE SUPPLIED, IN ORDER TO ADAPT IT PROPERLY TO /CONFIGURATION PARAMETERS OF TOPS-8. /.R PAL8 /*TSKBLD HANDIN=XLCOR /STARTADDRESS OF DEVICE HANDLER /RIGHT BEHIND XLOAD PSEXT=0216 / .BN=0216 / .AS=0123 / .PA=2001 / .LS=1423 / .DA=0401 / /******************************************************** / PROGRAM EQUATES /****************************************************** / PSFLD=10 /FIELD OF PROGRAM IS 1 BUFIFD=00 /FIELD OF INPUTBUFFER / /**************************************************** / /FIELD PSFLD%10 RELOC 7400 /USER DEFINED STARTINGADDRESS / / /************************************************** / MAIN FRAME OF PS8-INPUT ROUTINE /************************************************** / PS8IN, 0 /ENTRYPOINT PSIMON, 7600 /CLEAR AC /RDF /GET FIELD OF USER PROGRAM /TAD PSICIF /SET UP FOR EXIT /DCA PSIEXT+1 / PSINST, JMP PSIJOB /INITIALIZE, ONCE ONLY CODE / AFTER INIT. CDF BUFIFD / IS STORED HERE / /*************************************************** / GETCH, WRITTEN AS A SUBROUTINE, / NOW PART OF MAIN FRAME /*************************************************** / ROUTINE TO GET A CHARACTER FROM A STRING / PACKED IN A BUFFER / POINTERS ARE: / INPTR: ADDRESSPOINTER / INPKSW=0 : 8 LEAST SIGN. BITS OF [POINTER] / =-2: 4 MOST SIGN.BITS OF [POINTER-1] / AND [POINTER] / / UPON EXIT FROM GETCH, INPTR AND INPKSW / POINT TO NEXT CHARACTER / / WHEN BUFFER END IS DETECTED, A BUFFER / READ IS PERFORMED / GETCH TESTS THE NUMBER OF BLOCKS TO BE READ / WHEN NO MORE BLOCKS ARE AVAILABLE / A JUMP IS PERFORMED TO INITIALIZE NEXT FILE /***************************************************** / TAD INPKSW /TEST PACKSWITCH SZA CLA JMP INPKON /JUMP IF -2 / TAD I INPTR /GET INFO.WORD AND PSI377 /KILL BIT 0-3 DCA INCHAR /SAVE TEMP / TAD INPTR /IS POINTER EVEN? CLL RAR SNL CLA /SKIP IF NO JMP .+4 /YES, JUMP / CLL CLA CMA RAL /SET PACKSWITCH TO -2 DCA INPKSW / SKP /NO INCREMENT ISZ INPTR /INCREMENT POINTER JMP GETEX /EXIT / INPKON, DCA INCHAR /MAKE TEMP.LOC ZERO TAD I INPTR /GET WORD PSI377, AND PS7400 /KILL BIT 4-11 TAD INCHAR CLL RTR RTR DCA INCHAR /SAVE TEMP / CLA CMA TAD INPTR /DECREMENT POINTER DCA INPTR / ISZ INPKSW /INCR.PACKSWITCH JMP INPKON+1 /AGAIN IF NONZERO CLA CLL CML IAC RAL TAD INPTR /SET POINTER TO NEXT WORD DCA INPTR / ISZ PTR2 /INCREMENT WORDPOINTER JMP GETEX /NOT ZERO, EXIT TAD PSIMON /RESTORE POINTER DCA PTR2 / ISZ PSINUM /INCR.NEG.BLOCKCOUNT SKP /NOT ZERO, MORE BLOCKS AVAILABLE JMP PSCTRZ /INITIALIZE NEXT FILE / TAD INLIM /TEST ON BUFFER END CLL TAD INPTR SZL CLA /SKIP IF BUFFER END JMS PSREAD /READ NEXT PART OF INPUT FILE / / /**************************************************** / LAST PART OF MAINFRAME /**************************************************** / TEST ON CONTROL/Z / GETEX, TAD INCHAR TAD PSI232 /WAS IT CTRL/Z? SNA CLA /SKIP IF NO JMP PSCTRZ /YES, GET NEW DEVICE OR FILE PSIEXT, TAD INCHAR /CHAR IN AC CDF CIF FZERO /RESTORE FIELD JMP I PS8IN /RETURN / PSIEND, TAD PS232 /END OF ALL FILES,GET CTRL/Z JMP PSIEXT+1 / AND RETURN / PSICIF, CIF CDF 0 /V3 INPTR, 0 /V3 INPKSW, 0 /V3 PTR2, 0 /V3 PSINUM, 0 /V3 INCHAR, 0 /V3 CCDBUF, CDF BUFIFD /V3 C7616, 7616 /V3 / /************************************************ / INITIALIZATION PART /************************************************ / SOME LOCATIONS ARE OVERWRITTEN / BY POINTERS AND SAVE LOCATIONS. /************************************************ / PSIJOB, CDF PSFLD /SET TO PROGRAM FIELD TAD CCDBUF /V3 DCA PSINST /AND STORE IN MAINPART / PSCD, JMS I PSIUSR /CALL COMMAND DECODER 5 /FUNCTION CODE PSEXT /EXTENSION BY DEFAULT 0 TAD C7616 /V3 DCA PSINDV /V3 RESET POINTER TO POINTER TO INPUT / / /********************************************** / ROUTINE TO LOAD DEVICE HANDLER /********************************************** / PSCTRZ, CDF PSFLD ISZ PSINDV /SET TO NEXT INPUT FILE TAD HANDAD /SET UP STARTING ADDR. DCA PSIHND / OF DEVICE HANDLER TAD I PSINDV /GET DEVICE NUMBER SNA /ZERO? JMP PSIEND /YES, INPUT END / JMS I PSIUSR /LOAD DEVICE HANDLER 1 /FUNCTION CODE PSIHND, 0 /ENTRYPOINT JMP INER1 /ERROR RETURN / TAD I PSINDV /GET NEGATIVE BLOCKCOUNT AND PSIRD+2 /KILL BIT 8-11 CLL RTR /V3 RTR /SHIFT 4 POS. TO RIGHT TAD PS7400 /INSERT BIT 0-3 DCA PSINUM /SAVE NUMBER OF BLOCKS / ISZ PSINDV /SET POINTER TO START.BLOCKNR. TAD I PSINDV /GET START.BLOCKNUMBER DCA PSIRD /STORE AT READ ROUTINE JMS PSREAD /READ NEXT PART IN BUFFER JMP PSINST /RETURN TO MAINFRAME / HANDAD, HANDIN+INTPAG / /************************************************ / ERROR PART /************************************************ / INER1, CDF CIF FZERO /V3 JMP I .+1 /V3 XLER14 /V3 HANDLER FETCH ERROR INER2, CDF CIF FZERO /V3 JMP I .+1 /V3 XLER15 /V3 INPUT ERROR / / /*********************************************** / ROUTINE TO READ FROM DEVICE /************************************************ / BLOKIN PSREAD, 0 /V3 CDF PSFLD CIF 0 /DEV.HANDLER IN FIELD 0! JMS I PSIHND /CALL DEVICE HANDLER BLOKIN^200+BUFIFD PSIBUF, BUFIN /BUFFER ADDRESS PSIRD, 1000 /STARTING BLOCKADDRESS PSIUSR, SMA CLA /ERROR RETURN, SKIP IF FATAL 7760 /SKIP IF AC 0 AND CONSTANT JMP INER2 /FATAL ERROR, DO NOT RETURN / TAD PSREAD-1 /UPDATE STARTING BLOCKNUMBER TAD PSIRD DCA PSIRD / TAD PSIBUF /RESET INPUT POINTER DCA INPTR DCA INPKSW /RESET PACKSWITCH TAD PSIMON /RESET BLOCKPOINTER DCA PTR2 / JMP I PSREAD /RETURN / / /*********************************************** / CONSTANTS AND VARIABLES /************************************************ / PS232, 232 PSI232, -232 PS7746, 7746 PSINDV, 7616 / INLIM, -BLOKINN^400-BUFIN / *PS8IN+177 PS7400, 7400 /DON'T MOVE THIS CONSTANT!! RELOC $$$$$$$