TITLE PDP8 SIMULATOR VERSION #2 SEPT. 1 '69 SUBTTL DAVE MCCLURE'S MODIFICATIONS TO DON WITCRAFT'S ORIGINAL ,CONSOLE INQUIRY ENTRY CYCLE,TC,NXIOT EXTERNAL CONSOLE,ERROR,NTIME,TIME,SR JOBVER=137 VERNUM=2 LOC JOBVER VERNUM RELOC TC0: HRLOI AC1,377777 ;SET NO TIME OUT MOVEM AC1,NTIME MOVSI AC1,MDLISTL ;SEARCH FOR ACTIVE DEVICES TC1: MOVE DDB,DLIST(AC1) ;LOAD ADDRES OF DEVICE DATA BLOCK MOVS AC2,DFLAG(DDB) ;[XWD DEVICE FLAG FOR PDP8,,ACTIVE FLAG] TLNN FLAGS,(AC2) ;DEVICE ACTIVE? TC2: AOBJN AC1,TC1 ;NO JUMPGE AC1,TC3 ;JUMP IF DONE. CAMGE RUNTIM,DTIME(DDB) ;DEVICE NEED ATTENTION? JRST TC4 ;NO TLZ FLAGS,(AC2) ;YES. DEACTIVATE DEVICE MOVS AC0,AC2 ;[XWD ACTIVE FLAG,,DEVICE FLAG FOR PDP8] TRO FLAGS,(AC0) ;TURN ON DEVICE FLAG MOVE AC0,DRATE(DDB) ;LOAD INTERRUPT DELAY TIME CONSTANT ADDB AC0,DTIME(DDB) ;ADD LAST FLAG TIME SKIPE AC3,DDISP(DDB) ;LOAD DISPATCH ADDRESS TLZN AC3,400000 ;SET DELAY TIME IMMEDIATELY? JRST TC2A TLO FLAGS,(AC2) ;SET DEVICE ACTIVE AGAIN CAMGE AC0,NTIME ;NEXT DEVICE TO FLAG? MOVEM AC0,NTIME ;YES TC2A: JUMPE AC3,TC2 ;DISPATCH TO A SPECIAL ROUTINE? PUSHJ PDP,(AC3) ;SO GO JRST TC2 ;NEXT DEVICE TC4: MOVE AC2,DTIME(DDB) ;LOAD TIME FOR NEXT INTERRUPT CAMGE AC2,NTIME ;NEXT DEVICE TO NEED ATTENTION? MOVEM AC2,NTIME ;YES JRST TC2 CYCLE: TLNN FLAGS,RUN ;IS MACHINE HALTED? PUSHJ PDP,CONSOLE ;YES ;TIME CONTROL TC: ADDB RUNTIM,TIME ;ACCUMULATE LAST INSTRUCTION TIME CAML RUNTIME,NTIME ;TIME TO RAISE A FLAG JRST TC0 ;YES TC3: SETZM RUNTIME ;CLEAR TIME FOR THIS INSTRUCTION IFE DRM08, ;INTERRUPT SIMULATION EXTERNAL IBR,DFF,IF,DFSAVE,IFSAVE TLZE FLAGS,INTDEL ;INTERRUPT DELAY? JRST INSFET ;YES. TURN IT OFF AND CONTINUE. TRNE FLAGS,INTFLG ;NO. IS THERE A PI REQUEST? TRNN FLAGS,PION ;YES, IS PI TURNED ON? JRST INSFET ;NO. TRZ FLAGS,PION ;YES. DISABLE INTERRUPT. SETZB AC0,IBR ;SAVE AND CLEAR IF AND DFF. EXCH AC0,DFF MOVEM AC0,DFSAVE MOVE AC0,IF MOVEM AC0,IFSAVE SETZM MA JRST JMS ;JMS 0 AND START A NEW INSTRUCTION CYCLE ;INSTRUCTION FETCH INTERNAL FETOP1 INSFET: IFE ESTOP, IFN ESTOP, MOVE MA,PC IFETCH MOVE IR,MB ;LOAD INSTRUCTION IN THE IR LSH IR,-^D9 ;LEAVE ONLY THE OP CODE IFN PDP8S IFE PDP8S CAIL IR,6 ;ONE-CYCLE INSTRUCTION? JRST DISP ;YES. EXECUTE ;COMPUTE EFFECTIVE ADDRESS IN MA MOVE MA,MB ANDI MA,177 TRNN MB,200 ;PAGE 0 JRST .+4 ;YES MOVE AC0,PC ANDI AC0,7600 ORI MA,(AC0) ;ADD CURRENT PAGE TRNN MB,400 ;INDIRECT? JRST DISP ;NO IFN PDP8S IFE PDP8S IFETCH CAIG MA,17 ;AUTO INDEXING? CAIGE MA,10 JRST FETOP0 ;NO IFE FAST, IFN FAST, FETOP0: CAIG IR,3 ;FOR JMP AND JMS DON'T TLO FLAGS,DEFER ;SET "USE DATA FIELD" FLAG FETOP1: MOVE MA,MB ;EXECUTE INSTRUCTION DISP: AOS PC XCT OPCODE(IR) JRST CYCLE ;INSTRUCTION DISPATCH TABLE OPCODE: JRST AND JRST TAD JRST ISZ JRST DCA JRST JMS JRST JMP PUSHJ PDP,IOT PUSHJ PDP,OPERATE INTERNAL FETCHY,STOREY IFE INLINE,< IFE PACK, IFN PACK, FETCHY: FETCH POPJ PDP, STOREY: STORE POPJ PDP, > IFN INLINE,< FETCHY: PUSHJ PDP,ADRCAL IFE PACK, IFN PACK, POPJ PDP, STOREY: PUSHJ PDP,ADRCAL IFE PACK, IFN PACK, POPJ PDP, ,CALCULATE PDP10 ADDRESS POINTER FROM MA. ,RETURN WITH AC1=QUOTIENT(MA/3) , AC2=REMAINTER(MA/3) ADRCAL: ANDI MA,7777 MOVE AC1,MA MOVE AC0,IF TLZE FLAGS,DEFER ;INDIRECT? MOVE AC0,DFF ;YES. USE DATA FIELD. OR AC1,AC0 IFE PACK, > AND: IFE PDP8S, IFN PDP8S, FETCH ANDI AC,10000(MB) JRST CYCLE TAD: IFE PDP8S, IFN PDP8S, FETCH ADD AC,MB ANDI AC,17777 ;DELETE CARRYOUTS JRST CYCLE ISZ: IFE PDP8S, IFN PDP8S, IFE FAST,< MOVE AC1,MA TLNE FLAGS,DEFER OR AC1,DFF ;YES SO USE DATA FIELD TLZN FLAGS,DEFER ;USE INSTRUCTION FIELD? OR AC1,IF ;YES AOS AC0,CORE(AC1) ;INCREMENT CORE LOCATION TRNN AC0,10000 ;DID WE GO TO ZERO? JRST CYCLE ;NO SO INSTRUCTION COMPLETE SETZM CORE(AC1) ;YES SO SET LOCATION TO ZERO AOJA PC,CYCLE ;SKIP PC AND END INSTRUCTION> IFN FAST, DCA: IFE PDP8S, IFN PDP8S, MOVE MB,AC IFN PACK, ANDI AC,10000 ;LEAVE ONLY LINK BIT STORE JRST CYCLE JMS: IFN PDP8S, IFE PDP8S, MOVE AC0,IBR MOVEM AC0,IF IFE FAST,< MOVE AC1,MA OR AC1,IF MOVEM PC,CORE(AC1) ;SAVE PC MOVE PC,MA AOJA PC,CYCLE> IFN FAST, JMP: IFE PDP8S, MOVE AC0,IBR MOVEM AC0,IF MOVE PC,MA JRST CYCLE OPERAT: TRNE MB,400 JRST OPR2 OPR1: IFE PDP8S, TRNE MB,200 ANDI AC,10000 ;CLA TRNE MB,100 ANDI AC,7777 ;CLL TRNE MB,40 XORI AC,7777 ;CMA TRNE MB,20 XORI AC,10000 ;CML IFN PDP8, TRNE MB,10 JRST ROT ;ROTATE AC AND L RIGHT TRNE MB,4 JRST ROTL ;ROTATE AC AND L LEFT IFE PDP8,< ;FOR A PDP8 IAC ONLY IF NO ROTATE TRNE MB,1 JRST IAC> POPJ PDP, IAC: ADDI AC,1 ;INCREMENT IAC ANDI AC,17777 ;REMOVE OVERFLOW IF PRESENT POPJ PDP, ;ROTATE AC AND L RIGHT INTERNAL EAE,OPR2 ROT: TRNE MB,4 ;IS BIT ON FOR LEFT ROTATION? JRST DOUBLE ;YES ROTR: ROT AC,-1 TLZE AC,400000 IORI AC,10000 TRZE MB,2 JRST ROTR POPJ PDP, ;ROTATE AC AND L LEFT ROTL: ROT AC,1 TRZE AC,20000 IORI AC,1 TRZE MB,2 JRST ROTL POPJ PDP, DOUBLE: MOVEM MB,AC0 ;SAVE BIT FOR ROTATE TWICE MOVEM AC,AC1 ;SAVE ORIGINAL AC MOVEM AC,AC2 PUSHJ PDP,ROTR EXCH AC,AC2 ;SAVE RIGHT ROTATED AC MOVE MB,AC0 ;RESTORE INSTRUCTION PUSHJ PDP,ROTL MOVEM AC,AC3 ;SAVE LEFT ROTATED VERSION IFE PDP8, IFN PDP8, IFE ESTOP, IFN ESTOP, OPR2: IFE PDP8S, TRNE MB,1 ;EAE INSTRUCTION? JRST EAE ;YES SETZM AC0 TRNE AC,10000 TRO AC0,20 ;L=1 TRNN AC,7777 TRO AC0,40 ;AC=0 TRNE AC,4000 TRO AC0,100 ;AC<0 AND AC0,MB TRNE MB,10 ;REVERSE SKIP SENSE? JRST OPRRSS ;YES TRNE AC0,160 ;SKIP IF ANY SELECTED CONDITION MET. AOJA PC,.+4 JRST .+3 OPRRSS: TRNN AC0,160 AOS PC TRNE MB,200 TRZ AC,7777 ;CLA TRNE MB,4 ;EVENT TIME 2 OR AC,SR TRNE MB,2 HALT: TLZ FLAGS,RUN POPJ PDP, EAE: IFE ESTOP, IFN ESTOP, IOT: IFE PDP8, IFE PDP8I, IFE PDP8L, IFE PDP8S, IFN INLINE, IFE INLINE, NXIOT: IFE ESTOP, IFN ESTOP, DEFINE IOTS < X 1,ION X 2,IOF X 11,RSF X 12,RRB X 14,RFC X 16,RRBRFC X 21,PSF X 22,PCF X 24,PPC X 26,PLS X 31,KSF X 32,KCC X 34,KRS X 36,KRB X 41,TSF X 42,TCF X 44,TPC X 46,TLS X 101,SMP X 102,SPL X 104,CMP X 201,CDF X 202,CIF IFG , X 214,RDF IFG , X 224,RIF IFG , X 234,RIB IFG , X 244,RMF IFG , IFG , IFG , IFE DCS680,< X 401,TTINCR ;680 INSTRUCTIONS X 402,TTI X 403,TTI1 X 404,TTO X 405,TTO1 X 410,TT X 411,TTCL X 412,TTSL X 413,TTSLC X 414,TTRL X 421,T5SKP X 422,TT5OFF X 424,TT5ON X 431,T8SKP X 432,TT8OFF X 434,TT8ON> IFE PLOTER, IFN DDF32, IFE DRM08, X 777,NXIOT > IFN INLINE,,,,>>>> IFE INLINE, SIZE=A+1 EXP C IFDIF ,,,>>>> IOTIT: IOTS IOTN=.-IOTIT ION: TRON FLAGS,PION ;IS PI TURNED ON? TURN IT ON. TLO FLAGS,INTDEL ;NO. DELAY INTERRUPT ENABLE. POPJ PDP, IOF: TRZ FLAGS,PION ;INTERRUPT TURN OFF. TLZ FLAGS,INTDEL POPJ PDP, ;DATA BREAK SIMULATOR IFE DRM08,< EXTERNAL DCL,DFB BREAK: ADDI RUNTIM,6 ;ONE MEMORY CYCLE. MOVE MA,DCL ;CORE ADDRESS TRNN FLAGS,DRWC ;WRITING? JRST BREAKR ;NO FETCH ;YES. GET WORD FROM CORE. MOVEM MB,DFB TLO FLAGS,DFBCHG ;SET DFB CHANGE FLAG. POPJ PDP, BREAKR: MOVE MB,DFB ;READING. STORE ;STORE WORD IN CORE. TLZ FLAGS,DFBCHG ;CLEAR DFB CHANGE FLAG. AOS DCL POPJ PDP,> ;DEVICE LIST ... DEVICE DATA BLOCK ADDRESSES DEFINE DV(X) < EXP X'DATA EXTERNAL X'DATA> DLIST: DV R DV P DV T DV K IFE PLOTER, IFN DDF32, IFE DRM08, IFE DCS680, DV DR MDLIST=DLIST-. INTERNAL MDLISTL,DLIST DEFINE CV(X) < EXP X'CDATA EXTERNAL X'CDATA> ;CHANNEL LIST ... FILE DATA BLOCK ADDRESSES CLIST: CV R CV P IFE PLOTER, IFN DDF32, IFE DRM08, IFE DCS680, CLISTL=.-CLIST MCLIST=-CLISTL INTERNAL CLISTL,MCLIST,CLIST END