File TRIPLE.PA (PAL assembler source file)

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

/ 36-BIT PDP-8/E SIMULATOR

/  TRIPLE PRECISION PACKAGE FOR PDP-8
/  SIMULATES 36-BIT PDP-8/E

/  SIMULATION BEGINS WITH A CALL TO 'TRIPLE',
/  ENDS WITH ANY 'HLT'

	ZZZ=0	/FOR FILL-INS


	*0
	HLT;JMP I 0	/FOR DEBUGGING
BA, 0	/BREAKPOINT ADDRESS
BF, 0	/BREAKPOINT FIELD (00N0)
MA, 0	/SIMULATED MA REGISTER

	*20

AC, ZBLOCK 3	/SIMULATED 36-BIT AC
TLINK, ZBLOCK 1	/SIMULATED LINK
MQ, ZBLOCK 3	/SIMULATED 36-BIT MQ
MB, ZBLOCK 3	/SIMULATED MB

/PB

/PB *6400 TRIPLE, .-. /ENTRY TO SIMULATOR JMS CLRAC /ACTUALLY SETS LOW ORDER AC RAL DCA TLINK /SAVE LINK RDF TAD (CDF DCA TRIPT1 /HOLD MOMENTARILY RIF TAD (CDF DCA .+1 IBIT, HLT /SET PRESENT DATA FIELD TAD .-1 DCA TF /'THIS FIELD' TAD TRIPT1 /OLD DF CONTAINS CALLING FIELD, /THEREFORE, 'IF' FOR SIMULATION DCA IF /INSTRUCTION FIELD TAD IF DCA DF /USE AS DATA FIELD AS WELL TAD IF DCA IB /INSTRUCTION FIELD BUFFER CYCLE, TAD BA /BREAKPOINT FIELD SNA /ZERO MEANS NONE JMP CYCLE1 CIA TAD TRIPLE SZA CLA /SAME ADDRESS? JMP CYCLE1 /NO TAD IF AND (70 CIA TAD BF SNA CLA /SAME FIELD? JMS 0 /YES. SNEAK OUT CYCLE1, JMS INIF /NO. PROCEED TAD I TRIPLE /GET NEXT INSTRUCTION DCA MB /SAVE TAD I TRIPLE CLL RTL RTL AND (7 /INSTRUCTION CLASS TAD TRIPL1 DCA IR /INSTRUCTION REGISTER JMS INHERE /BACK TO 'TF' DCA IBIT /INDIRECT BIT CLA STL RTR /2000 TAD MB SZL CLA / < 6000? JMP TRIP1 /NO TAD MB /YES. MEMORY REFERENCE AND (200 /PAGE BIT SZA CLA TAD TRIPLE AND (7600 /GIVES HIGH ORDER 5 BITS DCA TRIPT1 /SAVE TAD MB AND (177 TAD TRIPT1 DCA MA /SAVE OPERAND ADDRESS TAD MB AND (400 /INDIRECT SNA CLA / ? JMP TRIP1 /NO ISZ IBIT /YES JMS INIF TAD I MA /GET DIRECT OPERAND ADDRESS DCA MA JMS INHERE TRIP1, ISZ TRIPLE /POINT TO NEXT WORD IR, ZZZ TRIPL1, JMP I .+1 TAND;TTAD;TISZ;TDCA;TJMS;TJMP;TIOT;TOPR TRIPT1, 0 GETMB, .-. /GET CONTENTS OF MB ACCORDING TO MA JMS MBS1 /CHOOSE FIELD OF DATA TAD I MA ISZ MA DCA MB /HIGH ORDER TAD I MA ISZ MA DCA MB+1 /MIDDLE ORDER TAD I MA DCA MB+2 JMS INHERE JMP I GETMB SAVEMB, .-. /PUT MB INTO ADDRESS IN MA JMS MBS1 /CHOOSE FIELD OF DATA TAD MB DCA I MA ISZ MA TAD MB+1 DCA I MA ISZ MA TAD MB+2 DCA I MA JMS INHERE JMP I SAVEMB MBS1, .-. /CHOOSE FIELD TAD IBIT SZA CLA JMP .+3 JMS INIF JMP I MBS1 JMS INDF JMP I MBS1 /PB
/PB PAGE TAND, JMS GETMB /'AND' SIMULATOR. GET MB TAD MB AND AC DCA AC TAD MB+1 AND AC+1 DCA AC+1 TAD MB+2 AND AC+2 DCA AC+2 JMP CYCLE /DO NEXT INSTRUCTION TTAD, JMS GETMB /'TAD' SIMULATOR. GET MB CLL TAD AC+2 TAD MB+2 DCA AC+2 GLK TAD AC+1 TAD MB+1 DCA AC+1 GLK TAD AC TAD MB DCA AC SZL /ADDITION OVERFLOW? JMS CMPLNK /YES. COMPLEMENT LINK JMP CYCLE TISZ, JMS GETMB /SIMULATE 'ISZ'. GET MB ISZ MB+2 JMP TISZ1 ISZ MB+1 JMP TISZ1 ISZ MB SKP ISZ TRIPLE /INCREMENT 'PC' NOP TISZ1, CMA CLL RAL /-2 TAD MA DCA MA /BACK UP MA FROM FETCH AT TISZ JMS SAVEMB /SAVE INCREMENTED MB JMP CYCLE TDCA, TAD AC /SIMULATE 'DCA'. DCA MB TAD AC+1 DCA MB+1 TAD AC+2 DCA MB+2 JMS SAVEMB /SAVE THIS MESS JMS CLRAC /CLEAR AC JMP CYCLE TJMS, TAD TRIPLE /SIMULATE 'JMS' IB, ZZZ /ACTUALLY A 'CDF' TO ANY NEW 'IF' DCA I MA IAC JMS INHERE /BACK TO THIS FIELD TJMP, TAD MA /'JMP' SIMULATOR DCA TRIPLE /CHANGE 'PC' TAD IB DCA IF /CHANGE THE 'IF' JMP CYCLE TIOT, TAD MB /'IOT' SIMULATION AND (700 TAD (-200 SZA CLA /FOR EXTENDED MEMORY? JMP TIOT1 /NO TAD MB CLL RTR SMA CLA /IS IT IOT 1? JMP .+4 /NO TAD MB /YES. USE AS CDF AND (7771 DCA DF SNL /IOT 2? JMP .+5 TAD MB AND (7770 IAC DCA IB /MAKE IT A CDF TAD MB AND (4 /ONE OF THE WEIRDO INSTRUCTIONS? SNA CLA JMP CYCLE /NO TAD MB /YES. DRAT! AND (30 TAD (-20 SMA SZA / > 622N? JMP TIOT1 /YES SPA CLA /RIF? JMP .+3 /NO TAD IF /YES SKP TAD DF AND (70 DCA TIOTT1 TAD AC+2 AND (7707 TAD TIOTT1 /SIMULATE JAM TRANSFER INSTEAD OF 'OR' DCA AC+2 JMP CYCLE /PB
/PB PAGE TIOT1, CLA TAD MB DCA TIOTT1 /SAVE INSTRUCTION TAD AC+2 /IN CASE OF ACTION TIOTT1, ZZZ SKP /CHECK FOR SKIP ISZ TRIPLE /INCREMENT 'PC' NOP DCA AC+2 /SAVE AC JMP CYCLE TOPR, TAD MB /SIMULATE 'OPR' AND (400 /CHECK FOR GROUP I SZA CLA /IN GROUP I? JMP TOPR1 /NO JMS BITS /YES TOPRL1 JMP CYCLE BITS, .-. /CUTE LITTLE SUBROUTINE TAD I BITS /GET LIST ISZ BITS DCA BITSP1 BITS1, TAD I BITSP1 /GET MASK ISZ BITSP1 SNA /END OF LIST? JMP I BITS AND MB /NO. BIT SET IN MB? SNA CLA JMP BITS2 /NO TAD I BITSP1 /YES DCA BITSP2 JMP I BITSP2 BITS2, ISZ BITSP1 /NO JMP BITS1 /PROCEED BITSP1, 0 BITSP2, 0 TCLA, JMS CLRAC /PERFORM CLA JMP BITS2 TCLL, DCA TLINK /CLEAR LINK JMP BITS2 TCMA, TAD AC+2 /CMA CMA DCA AC+2 TAD AC+1 CMA DCA AC+1 TAD AC CMA DCA AC JMP BITS2 TCML, JMS CMPLNK /CML JMP BITS2 TIAC, ISZ AC+2 /IAC JMP BITS2 ISZ AC+1 JMP BITS2 ISZ AC JMP BITS2 JMP TCML /COMPLEMENT LINK ON O'FLOW TRR, JMS ROTR /RAR AND RTR STL RTL /2 AND MB SZA CLA /DOUBLE ROTATE SET? JMS ROTR /YES JMP BITS2 TRL, JMS ROTL /RAL AND RTL STL RTL AND MB SZA CLA JMS ROTL JMP BITS2 ROTR, .-. /ROTATE ONE RIGHT TAD TLINK CLL RAR JMS SHFTR RAL DCA TLINK JMP I ROTR ROTL, .-. /ROTATE ONE LEFT TAD TLINK CLL RAR JMS SHFTL RAL DCA TLINK JMP I ROTL SHFTR, .-. /SHIFT RIGHT ONE TAD AC RAR DCA AC TAD AC+1 RAR DCA AC+1 TAD AC+2 RAR DCA AC+2 JMP I SHFTR SHFTL, .-. /SHIFT LEFT ONE TAD AC+2 RAL DCA AC+2 TAD AC+1 RAL DCA AC+1 TAD AC RAL DCA AC JMP I SHFTL /PB
/PB PAGE TOPR1, IAC AND MB /GROUP II OR III SZA CLA /WHICH JMP TOPR2 /GROUP III DCA TOPRT1 /CLEAR SKIP FLAG JMS BITS /GROUP II TOPRL2 TAD TOPRT1 /ANY SUCCESSFUL SKIPS? SZA CLA ISZ TRIPLE /YES NOP STL RTL /2 AND MB SNA CLA /'HLT' BIT SET? JMP CYCLE /NO ISZ IF /MAKE IT A CIF TAD TRIPLE DCA INIF /FAKE JMS JMS INDF /CHANGE DATA FIELD TAD TLINK CLL RAR /SET UP LINK TAD AC+2 /AND LOW ORDER AC JMP IF /JUMP INTO INIF TSMA, TAD AC SPA CLA /CHECK HIGH ORDER BIT ISZ TOPRT1 /SET SKIP BIT JMP BITS2 TSZA, TAD AC+2 SZA CLA JMP BITS2 TAD AC+1 SZA CLA JMP BITS2 TAD AC SNA CLA ISZ TOPRT1 /SET SKIP BIT JMP BITS2 TSNL, TAD TLINK SZA CLA ISZ TOPRT1 JMP BITS2 TREV, TAD TOPRT1 /REVERSE SKIP SENSE SNA CLA /SKIP SET? IAC /NO. IT WILL BE DCA TOPRT1 JMP BITS2 TOSR, TAD AC+2 /LOW ORDER 12 BITS ONLY OSR DCA AC+2 JMP BITS2 TOPR2, JMS BITS /GROUP III OPR TOPRL3 TOPR3, JMP CYCLE TOPRT1, 0 INIF, .-. /SET DATA FIELD TO 'IF' IF, HLT JMP I INIF INDF, .-. /SET DATA FIELD TO 'DF' DF, HLT /WILL CONTAIN CDF JMP I INDF INHERE, .-. /SET DF TO SIMULATOR FIELD TF, HLT JMP I INHERE CLRAC, .-. DCA AC+2 DCA AC+1 DCA AC JMP I CLRAC CMPLNK, .-. /COMPLEMENT LINK TAD TLINK SNA CLA IAC DCA TLINK JMP I CMPLNK TOPRL1, 200;TCLA 100;TCLL 40;TCMA 20;TCML 1;TIAC 10;TRR 4;TRL;0 /END TOPRL2, 100;TSMA 40;TSZA 20;TSNL 10;TREV 200;TCLA 4;TOSR;0 /END TOPRL3, 200;TCLA 120;TMQAL 100;TMQA 20;TMQL;0 /END /PB
/PB PAGE TMQAL, TAD MB /'MQA', 'MQL', OR 'SWP' AND (120 TAD (-120 SZA CLA /'SWP'? JMP BITS2 /NO. PICK UP WHICH ONE THIS WAY JMS TMQS1 /SET UP SUBROUTINE TMQAL1, TAD I TOPRP1 DCA TOPRT2 TAD I TOPRP2 DCA I TOPRP1 TAD TOPRT2 DCA I TOPRP2 ISZ TOPRP1 ISZ TOPRP2 ISZ TOPRC1 JMP TMQAL1 JMP TOPR3 TMQL, TAD AC DCA MQ TAD AC+1 DCA MQ+1 TAD AC+2 DCA MQ+2 JMS CLRAC JMP TOPR3 TMQA, JMS TMQS1 /SET UP TAD I TOPRP1 /BEGIN 'OR' CMA AND I TOPRP2 TAD I TOPRP1 DCA I TOPRP2 ISZ TOPRP1 ISZ TOPRP2 ISZ TOPRC1 JMP TMQA+1 JMP TOPR3 TMQS1, .-. /SET POINTERS AND COUNT TAD (MQ DCA TOPRP1 TAD (AC DCA TOPRP2 CMA CLL RTL /-3 DCA TOPRC1 JMP I TMQS1 TOPRP1, 0 TOPRP2, 0 TOPRC1, 0 TOPRT2, 0 /PB
$



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