From afd621dc790624111edc89d0c211813a41008e13 Mon Sep 17 00:00:00 2001 From: Jeff Date: Fri, 31 Mar 2017 16:32:37 -0700 Subject: [PATCH] Updated the PDP-10 DAKAK diagnostic page, and verified the ability to assemble (but not run) all the original DAKAK source files, after making further improvements to the built-in MACRO-10 Mini-Assembler --- apps/pdp10/diags/klad/DFKCAT.MAC.txt | 572 -- apps/pdp10/diags/klad/KLDDT.MAC.txt | 6774 ---------------------- apps/pdp10/diags/klad/README.md | 48 +- apps/pdp10/diags/klad/SMFILE.MAC.txt | 7397 ------------------------- apps/pdp10/diags/klad/SPCCPU.KLM.txt | 171 + apps/pdp10/diags/klad/STOR.KLM.txt | 21 + apps/pdp10/diags/klad/dakak/README.md | 23 +- docs/pcx86/examples/pcx86-dbg.js | 917 +-- modules/pdp10/lib/debugger.js | 15 +- modules/pdp10/lib/macro10.js | 268 +- modules/shared/lib/debugger.js | 46 +- versions/pc8080/1.34.3/pc8080-dbg.js | 297 +- versions/pcx86/1.34.3/pcx86-dbg.js | 917 +-- versions/pdpjs/1.34.3/pdp10-dbg.js | 386 +- versions/pdpjs/1.34.3/pdp11-dbg.js | 516 +- 15 files changed, 2007 insertions(+), 16361 deletions(-) delete mode 100644 apps/pdp10/diags/klad/DFKCAT.MAC.txt delete mode 100644 apps/pdp10/diags/klad/KLDDT.MAC.txt delete mode 100644 apps/pdp10/diags/klad/SMFILE.MAC.txt create mode 100644 apps/pdp10/diags/klad/SPCCPU.KLM.txt create mode 100644 apps/pdp10/diags/klad/STOR.KLM.txt diff --git a/apps/pdp10/diags/klad/DFKCAT.MAC.txt b/apps/pdp10/diags/klad/DFKCAT.MAC.txt deleted file mode 100644 index e997b6da3..000000000 --- a/apps/pdp10/diags/klad/DFKCAT.MAC.txt +++ /dev/null @@ -1,572 +0,0 @@ -;MAINDEC-10-DFKCA - -DECVER=002 -MCNVER=000 - - XLIST -DEFINE NAME (MCNVER,DECVER),< - -TITLE DFKCA KL10 ADVANCED INSTRUCTION DIAGNOSTIC #1, VERSION MCNVER,DECVER > - LIST - LALL - -NAME \MCNVER,\DECVER - - XALL - -;COPYRIGHT 1975 -;DIGITAL EQUIPMENT CORPORATION -;MARLBORO, MASS. 01752 - -;JOHN R. KIRCHOFF - -LOC 137 -MCNVER,,DECVER - NOSYM -SUBTTL DIAGNOSTIC PARAMETERS - -;OPERATOR DEFINITIONS - -OPDEF ER1 [1B8] -OPDEF ER2 [2B8] -OPDEF ER3 [3B8] -OPDEF ER4 [4B8] -OPDEF ER5 [5B8] -OPDEF ER6 [6B8] -OPDEF ER7 [7B8] -OPDEF ER10 [10B8] -OPDEF ER11 [11B8] -OPDEF ER12 [12B8] -OPDEF ER13 [13B8] - -LUUO1==ERRMES -LUUO2==ERRMES -LUUO3==ERRMES -LUUO4==ERRMES -LUUO5==ERRMES -LUUO6==ERRMES -LUUO7==ERRMES -LUUO10==ERRMES -LUUO11==ERRMES -LUUO12==ERRMES -LUUO13==ERRMES - -;SUBROUTINE ASSEMBLY DEFINITIONS - -DEBUG=100 -EXCASB=1 -USRASB=1 -KI10=1 -KL10=1 -KL10P0=1 -PGMEND=1 -ERDIAG=1 -KLOLD=1 -MODDVU=BEGIN -MODDVL=BEGIN -;MACROS - -DEFINE SAVEAC (A,B)< - MOVEI AC+2,. - MOVEM AC+2,TESTPC ;SETUP SUBTEST PC - MOVEI AC+2,&17 ;INFORM ERROR ROUTINE WHICH - MOVEM AC+2,ERRLOP# ;AC IS USED FOR ITERATION> - -;BEGIN ASSEMBLY PARAMETERS - -SADR1=BEGIN -SADR2=RESRT1 -SADR3=RENTR1 -SADR4=BEGIN -SADR5=BEGIN -SADR6=BEGIN -SADR7=HALT BEGIN -SADR8=HALT BEGIN -SADR9=HALT BEGIN -SADR10=HALT BEGIN -SADR11=HALT BEGIN - -PAREA1=0 -PAREA2=0 -PAREA3=SIXBIT/DFKCA/ -PAREA4=SIXBIT/LPT/ -PAREA5=0 -PAREA6=0 - -ITERAT=1000 -DEFINE DMVE (L,A,B,C,D) < -;THIS MACRO TESTS THE DMOVE INSTRUCTION -;FIRST, AC, AC+1 ARE PRELOADED WITH DATA OTHER THAN THE TEST WORDS. -;THEN, THE DATA SPECIFIED BY [XWD A,B] AND [XWD C,D] IS MOVED -;FROM MEMORY TO AC, AC+1 VIA THE DMOVE INSTRUCTION. -;C(AC) AND C(AC+1) ARE THEN COMPARED WITH THE TEST WORDS -;[XWD A,B] AND [XWD C,D], RESPECTIVELY. THE TEST PASSES IF THESE -;COMPARISONS AGREE. - -Q'L'0: MOVE AC+5,[XWD A,B] ;INITIALIZE TEST WORDS - MOVE AC+6,[XWD C,D] ;FOR COMPARISON - MOVE AC,[XWD 707070,707070] - MOVE AC+1,[XWD 070707,070707] ;INITIALIZE AC,AC+1 - DMOVE AC,[XWD A,B ;*MOVE DOUBLE WORD A,B ; C,D - XWD C,D] ;FROM MEMORY TO AC, AC+1 - CAME AC,&17 ;WAS AC LOADED CORRECTLY? - ER3 AC,L'1 ;FAIL IF CONTENTS(AC) NOT = A,B - CAME AC+1,&17 ;WAS AC+1 LOADED CORRECTLY? - ER4 AC+1,L'2 ;FAIL IF CONTENTS(AC+1) NOT = C,D - JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> - - -DEFINE DMVE17 (L,T,A,B,C,D) < -;THIS MACRO TESTS THE DMOVE INSTRUCTION -;FIRST, AC, AC+1 ARE PRELOADED WITH DATA OTHER THAN THE TEST WORDS. -;THEN, THE DATA SPECIFIED BY [XWD A,B] AND [XWD C,D] IS MOVED -;FROM MEMORY TO AC, AC+1 VIA THE DMOVE INSTRUCTION. -;C(AC) AND C(AC+1) ARE THEN COMPARED WITH THE TEST -;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. -;THE TEST PASSES IF THESE COMPARISONS AGREE. - -Q'T'0: MOVEM AC,%SV17# ;SAVE AC17 -Q'L'0: MOVE AC+5,[XWD A,B] ;INITIALIZE TEST WORDS - MOVE AC+6,[XWD C,D] ;FOR COMPARISON - MOVE AC,[XWD 707070,707070] - MOVE AC+1,[XWD 070707,070707] ;INITIALIZE AC,AC+1 - DMOVE AC,[XWD A,B ;*MOVE DOUBLE WORD A,B ; C,D - XWD C,D] ;FROM MEMORY TO AC, AC+1 -Q'T'3: CAMN AC,&17 ;WAS AC LOADED CORRECTLY? - JRST .+4 ;HERE IF NO ERROR - MOVEM AC,AC-1 ;STORE INCORRECT RESLUTS - MOVE AC,%SV17 ;RESTORE P - ER3 AC-1,L'1 ;FAIL IF CONTENTS(AC) NOT = A,B - CAMN AC+1,&17 ;WAS AC+1 LOADED CORRECTLY? - JRST .+4 ;HERE IF NO ERROR - MOVEM AC+1,AC-1 ;STORE INCORRECT WORD - MOVE AC,%SV17 ;RESTORE P - ER4 AC-1,L'2 - MOVE AC,%SV17 ;RESTORE AC UNCONDITIONALLY - JUMPL SAC,Q'T'0 ;LOOP ON ERROR SWITCH> -DEFINE DMVN (L,A,B,C,D) < -;THIS MACRO TESTS THE DMOVN INSTRUCTION -;FIRST, AC, AC+1 ARE PRELOADED WITH DATA OTHER THAN THE TEST WORDS. -;THEN, THE NEGATIVE (TWOS COMPLEMENT) OF THE DATA SPECIFIED BY -;[XWD A,B] AND [XWD C,D] IS MOVED FROM MEMORY TO AC, AC+1 VIA -;THE DMOVN INSTRUCTION. C(AC) AND C(AC+1) ARE THEN COMPARED -;WITH THE NEGATIVE (TWOS COMPLEMENT) OF THE TEST -;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. -;THE TEST PASSES IF THESE COMPARISONS AGREE. - -Q'L'0: DMOVE AC,[XWD 707070,707070 - XWD 070707,070707] ;INITIALIZE AC,AC+1 - SETCM AC+5,[XWD A,B] ;INITIALIZE TEST WORDS FOR COMPARISON - IFIDN <0,0>,< - SETZ AC+6, - ADDI AC+5,1 > - IFIDN <400000,0>,< - SETZ AC+6, - ADDI AC+5,1 > - IFDIF <0,0>,< - IFDIF <400000,0>,< - MOVN AC+6,[XWD C,D] - TLZ AC+6,1B18 ;CLEAR SIGN BIT OF LOW ORDER WORD >> - DMOVN AC,[XWD A,B ;*MOVE NEGATIVE OF DOUBLE WORD A,B ; - XWD C,D] ;C,D FROM MEMORY TO AC, AC+1 - CAME AC,&17 ;WAS AC LOADED CORRECTLY? - ER3 AC,L'1 ;FAIL IF CONTENTS(AC) NOT = COMPLEMENT OF A,B - CAME AC+1,&17 ;WAS AC+1 LOADED CORRECTLY? - ER4 AC+1,L'2 ;FAIL IF CONTENTS(AC+1) NOT = MINUS C,D - JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> -DEFINE DMVN17 (L,A,B,C,D) < -;THIS MACRO TESTS THE DMOVN INSTRUCTION -;FIRST, AC, AC+1 ARE PRELOADED WITH DATA OTHER THAN THE TEST WORDS. -;THEN, THE NEGATIVE (TWOS COMPLEMENT) OF THE DATA SPECIFIED BY -;[XWD A,B] AND [XWD C,D] IS MOVED FROM MEMORY TO AC, AC+1 VIA -;THE DMOVN INSTRUCTION. C(AC) AND C(AC+1) ARE THEN COMPARED -;WITH THE NEGATIVE (TWOS COMPLEMENT) OF THE TEST -;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. -;THE TEST PASSES IF THESE COMPARISONS AGREE. - -Q'L'0: MOVEM AC,%SV17 ;SAVE P - DMOVE AC,[XWD 707070,707070 - XWD 070707,070707] ;INITIALIZE AC,AC+1 - SETCM AC+5,[XWD A,B] ;INITIALIZE TEST WORDS FOR COMPARISON - IFIDN <0,0>,< - SETZ AC+6, - ADDI AC+5,1 > - IFIDN <400000,0>,< - SETZ AC+6, - ADDI AC+5,1 > - IFDIF <0,0>,< - IFDIF <400000,0>,< - MOVN AC+6,[XWD C,D] - TLZ AC+6,1B18 ;CLEAR SIGN BIT OF LOW ORDER WORD >> - DMOVN AC,[XWD A,B ;*MOVE NEGATIVE OF DOUBLE WORD A,B ; - XWD C,D] ;C,D FROM MEMORY TO AC, AC+1 - CAMN AC,&17 ;WAS AC LOADED CORRECTLY? - JRST .+4 ;HERE IF TESTS OK - MOVEM AC,AC-1 ;SAVE BAD WORD - MOVE AC,%SV17 ;RESTORE P - ER3 AC-1,L'1 ;FAIL IF CONTENTS(AC) NOT = COMPLEMENT OF A,B - CAMN AC+1,&17 ;WAS AC+1 LOADED CORRECTLY? - JRST .+4 ;HERE IF TESTS OK - MOVEM AC,AC-1 - MOVE AC,%SV17 ;RESTORE P - ER4 AC+1,L'2 ;FAIL IF CONTENTS(AC+1) NOT = MINUS C,D - MOVE AC,%SV17 ;RESTORE P UNCODITIONALLY - JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> -DEFINE DMVNF (L,A,B,C,D,KIEF,KIUF,KLEF,KLUF) < -;**KI10** -;THIS MACRO VERIFIES THAT THE DMOVN INSTRUCTION DOES NOT SET OVERFLOW -;OR CARRY FLAGS ON THE KI10. FIRST, OVFL AND CRY0,1 FLAGS ARE CLEARED; -;THEN,DMOVN IS EXECUTED. NEXT, OVFL AND CRY0,1 FLAGS ARE EXAMINED. -;IF ANY OF THESE FLAGS ARE SET, THE TEST FAILS. - -;**KL10** -;THIS MACRO VERIFIES THAT THE DMOVN INSTRUCTION DOES SET OVERFLOW -;OR CARRY FLAGS ON THE KL10. FIRST, OVFL AND CRY0,1 FLAGS ARE CLEARED; -;THEN,DMOVN IS EXECUTED. NEXT, OVFL AND CRY0,1 FLAGS ARE EXAMINED. -;IF THE PROPER FLAGS ARE NOT SET, THE TEST FAILS. - -Q'L'0: JFCL 17,.+1 ;CLEAR OVFL AND CRY0,1 FLAGS - DMOVN AC+1,[XWD A,B ;*DMOVN TEST - XWD C,D] - JSP AC,.+1 ;READ FLAGS -Q'L'1: TLZ AC,027777 ;CLEAR EXTRA JUNK - TLNE AC,USERF ;IN USER MODE ? - JRST Q'L'4 ;YES - SKIPE KLFLG ;KL10 ? - JRST Q'L'3 ;YES -;KI10 EXEC MODE - CAME AC,[KIEF,,Q'L'1] - ER13 AC,L'1 ;FAIL IF OVFL OR CRY0,1 FLG SET -Q'L'2: JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH - JRST Q'L'6 -;KL10 EXEC MODE -Q'L'3: CAME AC,[KLEF,,Q'L'1] - ER13 AC,L'1 ;FAIL IF FLAGS NOT SET - JRST Q'L'2 -;KL10/KI10 USER MODE -Q'L'4: SKIPE KLFLG ;KL10 ? - JRST Q'L'5 ;YES -;KI10 USER MODE - CAME AC,[KIUF,,Q'L'1] - ER13 AC,L'1 ;FAIL IF ANY FLAGS SET - JRST Q'L'2 -;KL10 USER MODE -Q'L'5: CAME AC,[KLUF,,Q'L'1] - ER13 AC,L'1 ;FAIL IF FLAGS NOT SET - JRST Q'L'2 - -Q'L'6: JRST .+1> -DEFINE DMVM (L,A,B,C,D) < -;THIS MACRO TESTS THE DMOVEM INSTRUCTION -;FIRST, TSTWD, TSTWD+1 ARE PRELOADED WITH DATA OTHER THAN THE -;TEST WORDS AND AC,AC+1 ARE LOADED WITH THE TEST WORDS. -;THEN, THE DATA SPECIFIED BY [XWD A,B] AND [XWD C,D] IS MOVED -;FROM AC, AC+1 TO MEMORY (TSTWD, TSTWD+1) VIA -;THE DMOVEM INSTRUCTION. C(TSTWD) AND C(TSTWD+1) ARE THEN -;COMPARED WITH THE TEST WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. -;THE TEST PASSES IF THESE COMPARISONS AGREE. - -Q'L'0: DMOVE AC,[XWD 707070,707070 - XWD 070707,070707] ;INITIALIZE TEST WORDS - MOVEM AC,TSTWD ;TSTWD, TSTWD+1 ARE IN MEMORY JUST - MOVEM AC+1,TSTWD+1 ;AFTER THE FINAL TEST OF THIS PROGRAM - DMOVE AC,[XWD A,B - XWD C,D] ;INITIALIZE AC,AC+1 - DMOVEM AC,TSTWD ;*MOVE DOUBLE WORD FROM AC, AC+1 - ;TO MEMORY (TSTWD, TSTWD+1) - DMOVE AC,TSTWD ;PUT RESULTS OF TEST IN AC,AC+1 FOR COMPARISON - CAME AC,[XWD A,B] ;WAS TSTWD LOADED CORRECTLY? - ER5 AC,L'1 ;FAIL IF CONTENTS(TSTWD) NOT = A,B - CAME AC+1,[XWD C,D] ;WAS TSTWD+1 LOADED CORRECTLY? - ER6 AC+1,L'2 ;FAIL IF CONTENTS(TSTWD+1) NOT = C,D - JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> - -DEFINE DMVNM (L,A,B,C,D) < -;THIS MACRO TESTS THE DMOVNM INSTRUCTION -;FIRST, TSTWD, TSTWD+1 ARE PRELOADED WITH DATA OTHER THAN THE -;TEST WORDS AND AC, AC+1 ARE LOADED WITH THE TEST WORDS. -;THEN, THE NEGATIVE (TWOS COMPLEMENT) OF THE DATA SPECIFIED BY -;[XWD A,B] AND [XWD C,D] IS MOVED FROM AC, AC+1 TO MEMORY -;(TSTWD, TSTWD+1) VIA THE DMOVNM INSTRUCTION. -;C(TSTWD) AND C(TSTWD+1) ARE THEN COMPARED WITH THE -;NEGATIVE (TWOS COMPLEMENT) OF THE TEST -;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. -;THE TEST PASSES IF THESE COMPARISONS AGREE. - -Q'L'0: DMOVE AC,[XWD 707070,707070 - XWD 070707,070707] - DMOVEM AC,TSTWD ;INITIALIZE TEST WORDS - DMOVE AC,[XWD A,B - XWD C,D] ;INITIALIZE AC,AC+1 - DMOVN AC+5,[XWD A,B - XWD C,D] ;SET-UP TO CHECK RESULTS - DMOVNM AC,TSTWD ;*MOVE NEGATIVE OF DOUBLE WORD FROM AC, AC+1 - ;TO MEMORY (TSTWD, TSTWD+1) - DMOVE AC,TSTWD ;PUT TEST RESULTS IN AC,AC+1 - CAME AC,&17 ;WAS TSTWD LOADED CORRECTLY? - ER5 AC,L'1 ;FAIL IF CONTENTS(TSTWD) NOT = COMPLEMENT OF A,B - CAME AC+1,&17 ;WAS TSTWD+1 LOADED CORRECTLY? - ER6 AC+1,L'2 ;FAIL IF CONTENTS(TSTWD) NOT = MINUS C,D - JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> -DEFINE DMVM17 (L,A,B,C,D) < -;THIS MACRO TESTS THE DMOVEM INSTRUCTION -;FIRST, TSTWD, TSTWD+1 ARE PRELOADED WITH DATA OTHER THAN THE -;TEST WORDS AND AC,AC+1 ARE LOADED WITH THE TEST WORDS. -;THEN, THE DATA SPECIFIED BY [XWD A,B] AND [XWD C,D] IS MOVED -;FROM AC, AC+1 TO MEMORY (TSTWD, TSTWD+1) VIA THE DMOVEM INSTRUCTION. -;C(TSTWD) AND C(TSTWD+1) ARE THEN COMPARED WITH THE TEST -;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. -;THE TEST PASSES IF THESE COMPARISONS AGREE. - -Q'L'0: MOVEM AC,%SV17 ;SAVE AC17 CAUSE IT HAS PDP - DMOVE AC,[XWD 707070,707070 - XWD 070707,070707] ;INITIALIZE TEST WORDS - MOVEM AC,TSTWD ;TSTWD, TSTWD+1 ARE IN MEMORY JUST - MOVEM AC+1,TSTWD+1 ;AFTER THE FINAL TEST OF THIS PROGRAM - DMOVE AC,[XWD A,B - XWD C,D] ;INITIALIZE AC,AC+1 - DMOVEM AC,TSTWD ;*MOVE DOUBLE WORD FROM AC, AC+1 - ;TO MEMORY (TSTWD, TSTWD+1) - DMOVE AC,TSTWD ;PUT RESULTS OF TEST IN AC,AC+1 FOR COMPARISON - CAMN AC,[XWD A,B] ;WAS TSTWD LOADED CORRECTLY? - JRST .+4 ;HERE IF TESTS OK - MOVEM AC,AC-1 ;SAVE BAD WORD - MOVE AC,%SV17 ;RESTORE P - ER5 AC-1,L'1 ;FAIL IF CONTENTS(TSTWD) NOT = A,B - CAMN AC+1,[XWD C,D] ;WAS TSTWD+1 LOADED CORRECTLY? - JRST .+4 ;HERE IF TESTS OK - MOVEM AC,AC-1 ;SAVE BAD WORD - MOVE AC,%SV17 ;RESTORE P - ER6 AC+1,L'2 ;FAIL IF CONTENTS(TSTWD+1) NOT = C,D - MOVE AC,%SV17 ;RESTORE AC UNCONDITIONALLY - JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> -DEFINE DMVNM17 (L,A,B,C,D) < -;THIS MACRO TESTS THE DMOVNM INSTRUCTION -;FIRST, TSTWD, TSTWD+1 ARE PRELOADED WITH DATA OTHER THAN THE -;TEST WORDS AND AC, AC+1 ARE LOADED WITH THE TEST WORDS. -;THEN, THE NEGATIVE (TWOS COMPLEMENT) OF THE DATA SPECIFIED BY -;[XWD A,B] AND [XWD C,D] IS MOVED FROM AC, AC+1 TO MEMORY -;(TSTWD, TSTWD+1) VIA THE DMOVNM INSTRUCTION. -;C(TSTWD) AND C(TSTWD+1) ARE THEN COMPARED WITH THE -;NEGATIVE (TWOS COMPLEMENT) OF THE TEST -;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. -;THE TEST PASSES IF THESE COMPARISONS AGREE. - -Q'L'0: DMOVE AC,[XWD 707070,707070 - XWD 070707,070707] - DMOVEM AC,TSTWD ;INITIALIZE TEST WORDS - DMOVE AC,[XWD A,B - XWD C,D] ;INITIALIZE AC,AC+1 - DMOVN AC+5,[XWD A,B - XWD C,D] ;SET-UP TO CHECK RESULTS - DMOVNM AC,TSTWD ;*MOVE NEGATIVE OF DOUBLE WORD FROM AC, AC+1 - ;TO MEMORY (TSTWD, TSTWD+1) - - DMOVE AC,TSTWD ;PUT TEST RESULTS IN AC,AC+1 - CAMN AC,&17 ;WAS TSTWD LOADED CORRECTLY? - JRST .+4 - MOVEM AC,AC-1 ;SAVE BAD WORD - MOVE AC,%SV17 ;RESTORE P - ER5 AC-1,L'1 ;FAIL IF CONTENTS(TSTWD) NOT = COMPLEMENT OF A,B - CAMN AC+1,&17 ;WAS TSTWD+1 LOADED CORRECTLY? - JRST .+4 ;HERE IF TESTS OK - MOVEM AC,AC-1 ;SAVE BAD WORD - MOVE AC,%SV17 - ER6 AC+1,L'2 ;FAIL IF CONTENTS(TSTWD) NOT = MINUS C,D - MOVE AC,%SV17 - JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> -DEFINE DMVNMF (L,A,B,C,D,KIEF,KIUF,KLEF,KLUF) < -;**KI10** -;THIS MACRO VERIFIES THAT THE DMOVN INSTRUCTION DOES NOT SET OVERFLOW -;OR CARRY FLAGS ON THE KI10. FIRST, OVFL AND CRY0,1 FLAGS ARE CLEARED; -;THEN,DMOVN IS EXECUTED. NEXT, OVFL AND CRY0,1 FLAGS ARE EXAMINED. -;IF ANY OF THESE FLAGS ARE SET, THE TEST FAILS. - -;**KL10** -;THIS MACRO VERIFIES THAT THE DMOVN INSTRUCTION DOES SET OVERFLOW -;OR CARRY FLAGS ON THE KL10. FIRST, OVFL AND CRY0,1 FLAGS ARE CLEARED; -;THEN,DMOVN IS EXECUTED. NEXT, OVFL AND CRY0,1 FLAGS ARE EXAMINED. -;IF THE PROPER FLAGS ARE NOT SET, THE TEST FAILS. - -Q'L'0: JFCL 17,.+1 ;CLEAR OVFL AND CRY0,1 FLAGS - DMOVE AC,[XWD A,B - XWD C,D] ;SETUP INITIAL - DMOVNM AC,TSTWD ;*DMOVNM TEST - JSP AC,.+1 ;READ FLAGS -Q'L'1: TLZ AC,027777 ;CLEAR EXTRA JUNK - TLNE AC,USERF ;IN USER MODE ? - JRST Q'L'4 ;YES - SKIPE KLFLG ;KL10 ? - JRST Q'L'3 ;YES -;KI10 EXEC MODE - CAME AC,[KIEF,,Q'L'1] - ER13 AC,L'1 ;FAIL IF OVFL OR CRY0,1 FLG SET -Q'L'2: JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH - JRST Q'L'6 -;KL10 EXEC MODE -Q'L'3: CAME AC,[KLEF,,Q'L'1] - ER13 AC,L'1 ;FAIL IF FLAGS NOT SET - JRST Q'L'2 -;KL10/KI10 USER MODE -Q'L'4: SKIPE KLFLG ;KL10 ? - JRST Q'L'5 ;YES -;KI10 USER MODE - CAME AC,[KIUF,,Q'L'1] - ER13 AC,L'1 ;FAIL IF ANY FLAGS SET - JRST Q'L'2 -;KL10 USER MODE -Q'L'5: CAME AC,[KLUF,,Q'L'1] - ER13 AC,L'1 ;FAIL IF FLAGS NOT SET - JRST Q'L'2 - -Q'L'6: JRST .+1> -DEFINE DFA (T,A,B,C,D,E,F,G,H,I,M,K,L) < -R'T'00: DMOVE AC,[A,,B - C,,D] - DFAD AC,[E,,F - G,,H] - CAME AC,[I,,M] - ER3 AC,T'01 - CAME AC+1,[K,,L] - ER4 AC+1,T'01 - JUMPL AC+4,R'T'00 ;LOOP ON ERROR SWITCH> - -DEFINE DFS (T,A,B,C,D,E,F,G,H,I,M,K,L) < -R'T'00: DMOVE AC,[A,,B - C,,D] - DFSB AC,[E,,F - G,,H] - CAME AC,[I,,M] - ER3 AC,T'01 - CAME AC+1,[K,,L] - ER4 AC+1,T'01 - JUMPL AC+4,R'T'00 ;LOOP ON ERROR SWITCH> - -DEFINE DFM (T,A,B,C,D,E,F,G,H,I,M,K,L) < -R'T'00: DMOVE AC,[A,,B - C,,D] - DFMP AC,[E,,F - G,,H] - CAME AC,[I,,M] - ER3 AC,T'01 - CAME AC+1,[K,,L] - ER4 AC+1,T'01 - JUMPL AC+4,R'T'00 ;LOOP ON ERROR SWITCH> - -DEFINE DFD (T,A,B,C,D,E,F,G,H,I,M,K,L) < -R'T'00: DMOVE AC,[A,,B - C,,D] - DFDV AC,[E,,F - G,,H] - CAME AC,[I,,M] - ER3 AC,T'01 - CAME AC+1,[K,,L] - ER4 AC+1,T'01 - JUMPL AC+4,R'T'00 ;LOOP ON ERROR SWITCH> -DEFINE DFARP (T,A,B,C,D,E,F,G,H,I,M,K,L) < - DMOVE AC,[A,,B - C,,D] - DFAD AC,[E,,F - G,,H] - CAME AC,[I,,M] - ER3 AC,T - CAME AC+1,[K,,L] - ER4 AC+1,T - JUMPL AC+4,.-^D6 ;LOOP ON ERROR SWITCH> -DEFINE SDFA (T,A,B,C,D,E,F,G,H,I,M,K,L) < -S'T'00: DMOVE AC,[A,,B - C,,D] - DFAD AC,[E,,F - G,,H] - CAME AC,[I,,M] - ER3 AC,T'01 - CAME AC+1,[K,,L] - ER4 AC+1,T'01 - JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH> - -DEFINE SDFS (T,A,B,C,D,E,F,G,H,I,M,K,L) < -S'T'00: DMOVE AC,[A,,B - C,,D] - DFSB AC,[E,,F - G,,H] - CAME AC,[I,,M] - ER3 AC,T'01 - CAME AC+1,[K,,L] - ER4 AC+1,T'01 - JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH> - -DEFINE SDFM (T,A,B,C,D,E,F,G,H,I,M,K,L) < -S'T'00: DMOVE AC,[A,,B - C,,D] - DFMP AC,[E,,F - G,,H] - CAME AC,[I,,M] - ER3 AC,T'01 - CAME AC+1,[K,,L] - ER4 AC+1,T'01 - JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH> - -DEFINE SDFMKL (T,A,B,C,D,E,F,G,H,I,M,K,L,KL1,KL2,KL3,KL4) < -S'T'00: DMOVE AC,[A,,B - C,,D] - DFMP AC,[E,,F - G,,H] - SKIPE KLFLG - JRST S'T'05 - CAME AC,[I,,M] - ER3 AC,T'01 - CAME AC+1,[K,,L] - ER4 AC+1,T'01 -S'T'06: JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH - JRST S'T'07 - -S'T'05: CAME AC,[KL1,,KL2] - ER3 AC,T'01 - CAME AC+1,[KL3,,KL4] - ER4 AC+1,T'01 - JRST S'T'06 - -S'T'07: JRST .+1 > -DEFINE SDFD (T,A,B,C,D,E,F,G,H,I,M,K,L) < -S'T'00: DMOVE AC,[A,,B - C,,D] - DFDV AC,[E,,F - G,,H] - CAME AC,[I,,M] - ER3 AC,T'01 - CAME AC+1,[K,,L] - ER4 AC+1,T'01 - JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH> - -DEFINE SDFDKL (T,A,B,C,D,E,F,G,H,I,M,K,L,KL1,KL2,KL3,KL4) < -S'T'00: DMOVE AC,[A,,B - C,,D] - DFDV AC,[E,,F - G,,H] - SKIPE KLFLG - JRST S'T'05 - CAME AC,[I,,M] - ER3 AC,T'01 - CAME AC+1,[K,,L] - ER4 AC+1,T'01 -S'T'06: JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH - JRST S'T'07 - -S'T'05: CAME AC,[KL1,,KL2] - ER3 AC,T'01 - CAME AC+1,[KL3,,KL4] - ER4 AC+1,T'01 - JRST S'T'06 - -S'T'07: JRST .+1 > -DEFINE SDFARP (T,A,B,C,D,E,F,G,H,I,M,K,L) < - DMOVE AC,[A,,B - C,,D] - DFAD AC,[E,,F - G,,H] - CAME AC,[I,,M] - ER3 AC,T - CAME AC+1,[K,,L] - ER4 AC+1,T - JUMPL AC+4,.-^D6 ;LOOP ON ERROR SWITCH> - diff --git a/apps/pdp10/diags/klad/KLDDT.MAC.txt b/apps/pdp10/diags/klad/KLDDT.MAC.txt deleted file mode 100644 index 6710b5e2f..000000000 --- a/apps/pdp10/diags/klad/KLDDT.MAC.txt +++ /dev/null @@ -1,6774 +0,0 @@ -;MAINDEC-10-KLDDT - - - -DECVER=012 -MCNVER=000 - - -TITLE KLDDT DECSYSTEM DIAGNOSTICS DDT, VERSION 0.12 - - -;RELEASED AS VERSION 0.12 MAY 5,1978 -;CORRECTED TOPS20 USER TERMINAL OPERATIONS (IF UNDER PA1050), MAY 5,1978 -;MODIFIED FOR APPROP MUUO/JSYS OPERATION, JUNE 20,1977 -;MODIFIED FROM DDT, APRIL 6,1977 -;CHANGED TO ALLOW EXEC TO USE USER SYMBOL TABLE POINTERS -;AND ALLOW $G TO START PROGRAM FROM .JBSA -;KL10 EXEC MODE OPERATION CHANGED TO CONFORM TO DIAGNOSTICS PROCEDURES - - -;COPYRIGHT 1974,1975,1976,1977 -;DIGITAL EQUIPMENT CORPORATION -;MARLBORO, MASS. 01752 - -;JOHN R. KIRCHOFF - - LOC 137 -MCNVER,,DECVER - -NOSYM -SALL - -FTEXEC==-1 -ABSDDT==10000,,0 - - LOC 441 - JRST DDT ;EPT DDT START ADDRESS -SUBTTL DEFINITIONS - - COMMENT \ - -TABLE OF CONTENTS FOR DDT - - DEFINE DDT SYMBOLS - START DDT - DDT COMMAND PARSER - SYMBOL TABLE LOGIC - TEXT COMMANDS (" AND $") - REGISTER EXAMINATION LOGIC - MODE CONTROL SWITCHES - PATCH COMMAND -- PATCH BEGIN - PATCH COMMAND -- PATCH END - PAGE TABLE CONTROL ($U) - GO AND EXECUTE LOGIC - SINGLE STEP EXECUTE LOGIC - ENTER AND LEAVE DDT LOGIC - BREAK POINT LOGIC - MEMORY MANAGER SUBROUTINES - BINARY TO SYMBOLIC CONVERSION - SEARCH LOGIC - OUTPUT SUBROUTINES - PUNCH PAPER TAPE LOGIC - TELETYPE IO LOGIC - DDT COMMAND FILE LOGIC - DISPATCH TABLE - FANCY TERMINAL INPUT LOGIC - OP DECODER - VARIABLE STORAGE - STORAGE -- $X LOGIC AND PATCH COMMAND - STORAGE -- BREAKPOINTS - STORAGE -- SYMBOL TABLE LOGIC - STORAGE -- SAVE AREAS FOR PREVIOUS CONTEXT - STORAGE -- STATE VARIABLES - STORAGE -- PUSH DOWN LIST -\ - -;DDT VERSION IDENTIFICATION - -$EDITN==177 ;EDIT NUMBER -$VERSN==37 ;VERSION NUMBER -%DDTVR==<$VERSN>B11+$EDITN ;COMPOSIT VERSION IDENT - -;SWITCHES FOR DDT FEATURES -;FTEXEC ;EXEC MODE FACILITIES (ALSO RUNS IN USER MODE) -;FTPTP ;PAPER TAPE FACILITIES (EXEC MODE ONLY) -;FTFILE ;FILE DDT -;FTYANK ;PAPER TAPE INPUT FACILITIES ($Y) -;FTVMX ;BUILD DDT.VMX FOR TOPS10 VIRTUAL MEMORY -;FTDEC20 ;DEC20 FACILITIES -;FTMON ;DEC20 MONITOR DDT -;FTEDIT ;INCLUDE FANCY EDITING FEATURES WITH DEC20 EDDT -;ABSDDT ;RELOCATABLE ASSEMBLY IF 0, ABSOLUTE ASSEMBLY - ;WITH ORIGIN GIVEN BY B0-17 OTHERWISE - - IFNDEF ABSDDT, - IFNDEF FTEXEC, - IFNDEF FTPTP, - IFNDEF FTFILE, - IFNDEF FTYANK, - IFNDEF FTVMX, - IFNDEF FTDEC20, - IFNDEF FTMON, - IFNDEF FTEDIT, - -;NORMALIZE ALL SWITCH VALUES TO 0 OR -1 SO BOOLEAN EXPRESSIONS IN -;CONDITIONALS WORK CORRECTLY. - -DEFINE ..N (SW)< - IRP SW,< - IFN SW,>> - - ..N - -; IFN FTDEC20,< - SEARCH MONSYM,MACSYM - OPDEF CALL [040B8] - OPDEF MRPAC [JSYS 772] ;> - - IFE FTFILE, - -EXTERN .JBREL,.JBSA,.JBHRL,.JBSYM,.JBFF,.JBHSM,.JBHNM,.JBUSY,.JBDA - - IFE FTDEC20,< - IFN FTEXEC,< -; TITLE EDDT -EXEC MODE DDT > - IFN FTEXEC!FTFILE,< - XJBSYM==36 - XJBUSY==32 - XZLOW==40> - - IFE FTEXEC,< - IFE FTFILE,< - TITLE UDDT -USER MODE DDT > - IFN FTFILE,< - TITLE FILDDT -FILE DDT - CT.RES==5 ;NUMBER OF PAGES TO KEEP IN CORE - MX.SIZ==^D1024 ;MAX PAGES IN FILE - T30SYM==131> ;SPMON (10/30) - > ;END IFE FTEXEC - -ZLOW==140 - -INTERNAL .JBVER,.JBDDT -.JBDDT=74 -.JBVER=137 - IFE FTEXEC,< - LOC .JBVER ;DO NOT SET IF EXEC DDT(OK USER OR FILDDT) - %DDTVR ;PUT VERSION # IN .JBVER - > - - IFE FTFILE!FTVMX,< - LOC .JBDDT - XWD DDTEND,DDTX - > -RELOC 0 - - IFE FTVMX,,B53>> - - OPDEF PAGE. [CALLI 145] ;PAGING UUO - .GTUPM==100 - > ;END IFE FTDEC20 - - IFN FTEXEC,< - OPDEF SKPUSR [SKIPL USRFLG] ;SKIP IN USER MODE - OPDEF SKPEXC [SKIPGE USRFLG] ;SKIP IN EXEC MODE - OPDEF SKPKA [SKIPG KAFLG] ;SKIP FOR KA10 - OPDEF SKPKI [SKIPE KAFLG] ;SKIP FOR KI10 - OPDEF SKPKL [SKIPL KAFLG] ;SKIP FOR KL10 - OPDEF SKPNKL [SKIPGE KAFLG] ;SKIP NOT KL10 - > ;END IFN FTEXEC -XLIST - -SUBTTL MAKE TOPS20 DDT - IFN FTDEC20,< -;IN ADDITION TO DIFFERENT MONITOR CALLS AND PAGING CONVENTIONS, -;THE FOLLOWING FUNCTIONAL DIFFERENCES EXIST UNDER FTDEC20: -; 1. EVAL ALWAYS CALLED BEFORE OPEVAL - ALLOWS USER REDEFINITION -; OF BUILT-IN OPCODES. -; 2. PRESERVE PREVIOUSLY SAVED ACS WHEN SWITCHING USER/EXEC MODE. -; DEC20 DUMP PROCEDURE ASSUMES CRASH ACS ARE SAVED IN EDDT. -; 3. FORCE SAVE OF ACS ALWAYS WHEN ENTERING BREAKPOINT. HELPFUL -; WHEN UNKNOWN BREAKPOINT ENCOUNTERED BECAUSE SET BY -; ANOTHER PROCESS OR LEFT OVER FROM ABORTED DDT. -; 4. PRINT $ FOR EACH PC INCREMENT ON $X. -; 5. TRY FOR FULL-WORD MATCH ON BINARY TO SYMBOLIC CONVERSIONS. -; NECESSARY FOR CORRECT JSYS MNEMONIC PRINTOUT. -; 6. USE 1000 AS MAX SYMBOL OFFSET FOR RELATIVE LOCATION PRINTOUT. - -ZLOW==20 ;LOWER LIMIT FOR $$Z - - IFE FTEXEC,< - IFE FTMON,< - - TITLE UDDT ;DEC20 USER DDT - INTERN PHDDT - -RUNLOC==770000 ;RUNTIME LOCATION OF CODE -VARLOC==776000 ;RUNTIME LOCATION OF VARIABLES - -;ONCE-ONLY CODE TO BLT DDT TO RUNTIME LOCATION. RUN IMMEDIATELY -;AFTER LOADING. - -BLTDDT: MOVEI 1,.FHSLF - SETZB 2,3 - SCVEC ;FLUSH PA1050 INFO - MOVE 2,[1,,DDT] - SEVEC ;SET PROPER ENTRY VECTOR - SETO 1, - MOVE 2,[.FHSLF,,700] - MOVE 3,[1B0+100] - PMAP ;CLEAR PAGES AROUND RUN LOCATION - MOVE 1,[PHDDT,,DDT] - BLT 1,DDT+DDTEND-PHDDT ;MOVE PROGRAM - MOVE 10,[PMAP] ;SETUP EXIT CODE IN ACS - MOVE 11,[HALTF] - SETO 1, ;SETUP TO CLEAR ALL PAGES - MOVE 2,[.FHSLF,,0] - MOVE 3,[1B0+700] - JRST 10 ;CLEAR MAP AND EXIT - - LIT - > ;END OF USER DDT ONCE ONLY CODE - - IFN FTMON,< ;MONITOR DDT ONCE ONLY CODE - - TITLE MDDT ;DEC20 MONITOR DDT - INTERN MDDT,DDTSYM,DDTUSY - - TWOSEG 400000 -MDDT=DDT -DDTSYM=DDT+1 -DDTUSY=DDT+2 ;PTR TO UNDEF SYMTAB -VARLOC==774000 ;PRIVATE STG AREA, 1 PAGE MAX - > ;END OF MDDT ONCE-ONLY CODE - -PHDDT: - IFE FTMON,< - PHASE RUNLOC> ;PHASE IF USER VERSION ONLY - > ;END IFE FTEXEC - IFN FTEXEC,< - - TITLE EDDT ;DEC20 EXEC DDT - INTERN DDT,DDTX> - > ;END IFN FTDEC20 -LIST - -SUBTTL DEFINE DDT SYMBOLS - IFN FTFILE,< -CM==2 ;DEFINE SOFTWARE CHANS. -DP==3 - > -;DEFINE ACCUMULATORS - -F=0 ;FLAGS -P=17 ;PUSH DOWN (KLDDT) -R= ;POINTERS TO TABLES, CORE, ETC. -S= -W= ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER -T=5 ;TRANSFER DATA -W1=6 -W2=7 -SCH=10 ;MODE CONTROL SWITCH FOR OUTPUT -AR=11 ;MODE CONTROL SWITCH FOR OUTPUT -ODF=12 ;MODE CONTROL SWITCH FOR OUTPUT - CURRENT RADIX -TT=13 ;TEMPORARY -TT1=14 ;TEMPORARY -TT2=15 ;TEMPORARY (USED FOR PTR INPUT ONLY) - ; AND FOR DTE COMMUNICATIONS - -;DEFINE PUSH DOWN LENGTH -LPDL==50 ;MAX LENGTH PUSH DOWN LIST - -NXMKA==1B23 ;NON-EX-MEM FLAG FOR KA10 -NXMKI==1B29 ;NON-EX-MEM FLAG FOR KI10 -NXMKL==1B25 ;NON-EX-MEM FLAG FOR KL10 - -NBP==^D8 ;NUMBER OF BREAKPOINTS - - IFN FTDEC20,< -LPDL==100 -P=17> ;OVERRIDES P=1 ABOVE -T1=1 -T2=2 -T3=3 - -TRPENB==1B22 ;SAYS PAGING TRAPS ENABLED - -;*** FLAGS IN F *** - -FEF== 1B0 ;"E" FLAG -COMF== 1B1 ;COMMA TYPED -TIF== 1B2 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA -DVF== 1B3 ;DIVIDE -FPF== 1B4 ;"." TYPED -CCF== 1B5 ;"$$" TYPED -STF== 1B6 ;SUPPRESS TYPEOUT -SAF== 1B7 ;RIGHT ANGLEBRACKET TYPED -FAF== 1B8 ;LEFT ANGLEBRACKET TYPED -;== 1B9 ;NOT USED -MLF== 1B10 ;MULTIPLY -PTF== 1B11 ;ARITHMETIC OPERATOR TYPED -CF== 1B12 ;"$" TYPED -LTF== 1B13 ;LETTER TYPED IN CURRENT SYLLABLE -ROF== 1B14 ;REGISTER OPEN -SF== 1B15 ;SYLLABLE -MF== 1B16 ;MINUS SIGN TYPED -QF== 1B17 ;QUANTITY TYPED IN TO WORD ASSEMBLER - -; 18-21 NOT USED -MDLCLF==1B22 ;MULT DEF LOCAL SYMBOL (EVAL) -PNAMEF==1B23 ;PROGRAM NAME SEEN IN SYM TABLE SEARCH -POWF== 1B24 ;ARGUMENT FOR EXPONENT COMING -LF1== 1B25 ;OUTPUT ONE REGISTER IN FORCED MODE -;== 1B26 ;NOT USED -CF1== 1B27 ;OUTPUT ONE REGISTER AS CONSTANT -NAF== 1B28 ;NEGATIVE ADDRESSES PERMISSABLE -; 29-32 NOT USED -OUTF== 1B33 ;OUTPUT -ITF== 1B34 ;INSTRUCTION TYPED -Q2F== 1B35 ;NUMBER TYPED AFTER $ - -;DEFINE SYMBOL TABLE SYMBOL TYPES -GLOBL==04B5 ;GLOBAL SYMBOL -LOCL==10B5 -PNAME==74B5 ;PROGRAM NAME -DELI==20B5 ;DELETE INPUT -DELO==40B5 ;DELETE OUTPUT - -;DEFINE UNDEFINED SYMBOL TABLE (.JBUSY) TYPES - -STADD==1B0 ;IF 1, THEN ADDITIVE REQUEST -STLH==1B1 ;IF 1, THEN REQUEST FOR LEFT HALF -STNEG==1B4 ;IF 1, THEN NEGATIVE REQUEST - - IFE FTDEC20,< - IFE FTFILE,< - INTERN DDTEND ;DECLARE END OF DDT AS INTERNAL, FOR - ; USER TO SEE (USER MODE) AND ONCE ONLY CODE - ; (MONITOR) - IFE FTEXEC,< ENTRY DDT> - IFN FTEXEC,< - INTERNAL DDT - ENTRY DDTX>> ;NEEDED BY MONITOR - - IFN FTEXEC!FTFILE,< - -DEFINE OD(A,B),< - A=:> - -;KL10 "FUNNY" I/O INSTRUCTIONS -OD APRID,700000 ;READ APR ID -OD WRFIL,700100 ;WRITE CACHE REFIL ALGORITHM -OD RDERA,700400 ;READ ERROR ADDRESS REGISTER -OD SBDIAG,700500 ;S-BUS DIAG -OD RDPERF,702000 ;READ PERF. COUNTER -OD RDTIME,702040 ;READ TIME OF DAY -OD RDMACC,702400 ;READ MBOX ACCOUNTING -OD RDEACC,702440 ;READ EBOX ACCOUNTING -OD WRPAE,702100 ;WRITE PERF. ANALYSIS ENABLES -OD SWPIA,701440 ;SWEEP INVALIDATE ALL -OD SWPVA,701500 ; " VALIDATE ALL -OD SWPUA,701540 ; " UNLOAD ALL -OD SWPIO,701640 ; " INVALIDATE 1 PAGE -OD SWPVO,701700 ; " VALIDATE 1 PAGE -OD SWPUO,701740 ; " UNLOAD 1 PAGE - > ;END IFN FTEXEC!FTFILE -XLIST - -SUBTTL WRITE DDT.VMX - IFN FTVMX,< - IFN FTFILE,< - PRINTX ?CAN NOT BUILD BOTH VMDDT AND FILDDT - END - > - IFN FTEXEC,< - PRINTX %BUILDING BOTH EDDT AND VMDDT - > - - IFE ABSDDT&<-1B17>,< - PRINTX %VMDDT WITH AN OFFSET OF ZERO REQUESTED. - PRINTX % OFFSET OF 700000 WILL BE USED - ABSDDT==ABSDDT!7B2 - > - -DEFINE MERR (TXT)< - JRST [OUTSTR [ASCIZ " -? TXT -"] - EXIT] - > - -MAKDDT: RESET - INIT 1,17 - SIXBIT /DSK/ - 0 - MERR CAN NOT INIT DEVICE DSK: - ENTER 1,DDTVMX - MERR CAN NOT ENTER DSK:DDT.VMX - OUT 1,IOWD - SKIPA - MERR OUTPUT ERROR WRITING DSK:DDT.VMX - CLOSE 1, - STATZ 1,740000 - MERR OUTPUT ERROR CLOSING DSK:DDT.VMX - OUTSTR [ASCIZ " -DSK:DDT.VMX WRITTEN -"] - EXIT - -DDTVMX: SIXBIT /DDT/ - SIXBIT /VMX/ - EXP 0,0 -IOWD: IOWD DDTEND-DDT+1,DDTORG - EXP 0 - XLIST ;MAKDDT LITERALS - LIT - LIST - -DDTORG: PHASE ABSDDT_<-^D18> - > - > ;END IFE FTDEC20 -LIST - -SUBTTL START DDT - -DDTOFS: ;OFFSET BASE FOR DISPATCH TABLES - - IFE FTFILE,< -DDTX: - IFN FTYANK,< - SETZM COMAND ;INDICATE NO COMMAND FILE IF STARTING BY DDT COMMAND - > - REPEAT 0,< -DDT: IFN FTDEC20&<^-FTEXEC>,< - JRST .+2 ;SKIP SYMTAB PTRS - Z .DDSYM - JUMP .DDUSY - MOVEM T,SETRT1 ;SAVE AN AC - MOVE T,BP1+1 - CAMN T,[JSA T,BCOM] ;VARIABLES AREA INITIALIZED? - JRST DDTIN1 ;YES - MOVE T,[PHVAR,,VARLOC] ;NO, DO IT - BLT T,VAREND-1 -DDTIN1: MOVE T,SETRT1 ;RESTORE SCRATCH AC - > ;END IFN FTDEC20... -> -DDT: JRST .+2 - ASCII /DDT/ - JSR SAVE - PUSHJ P,REMOVB - XLIST - REPEAT 0,< - IFN FTEXEC!FTDEC20,< - MOVE W1,[ASCII /DDT/] - IFN FTEXEC,< - SKPUSR - MOVE W1,[ASCII /EDDT/] - > -IFN FTMON,< - MOVE W1,[ASCIZ/MDDT/] ;IF TOPS-20 MDDT, SAY "MDDT" - > - PUSHJ P,TEXT2 ;TYPE MESSAGE SAYING WHICH DDT - > ;END FTEXEC!FTDEC20 - > ;END FTFILE - - IFN FTVMX,< ;IF THIS IS VMDDT - MOVE W1,[ASCII "VMDDT"] ;PREPARE TO SAY VMDDT - PUSHJ P,TEXT2 ;PRINT THE MESSAGE - > ;END VMDDT SWITCH - > -LIST - MOVE W1,DDT+1 - PUSHJ P,TEXT2 ;TYPE DDT MESSAGE -XLIST - -SUBTTL FILDDT -- COMMAND SCANNER - IFN FTFILE,< -DDT: CALLI - SETZM COMAND ;CLEAR $Y FLAG - SETZM FWAZER ;CLEAR BLOCK OF STORAGE - MOVE T,[FWAZER,,FWAZER+1] - BLT T,LWAZER - MOVE P,[IOWD LPDL,PDL] ;PRESET PUSH DOWN LIST - MOVSI T,'DSK' ;PRESET DEVICE - MOVEM T,FILDEV+1 - OUTSTR [ASCIZ /File: /] - SETOM DEPNCT ;PRESET DEPOSIT ERROR COUNT TO -1 - PUSHJ P,TINCH - JRST FDINO ;IN CASE NULL LINE TYPED IN - SETOM CRASHS ;PRESET FOR FILE MODE - MOVEI TT,0 ;CLEAR NAME - MOVE TT1,[POINT 6,TT] ;PRESET ACCUMULATOR - -FDILP: CAIN T,"/" ;SEE IF SWITCH - JRST FDISW ;YES--GO DO IT - CAIN T,":" ;SEE IF DEVICE - JRST [JUMPE TT,FDIERR - MOVEM TT,FILDEV+1 - JRST FDILNP] - CAIN T,"." ;SEE IF EXTENSION FLAGGED - JRST [MOVEM TT,FILBLK - SETOM FDIDOT - JRST FDILNP] - CAIE T,"[" ;SEE IF PPN FLAGGED - JRST FDILET ;NO--MUST BE IN NAME - PUSHJ P,FDIOCT ;YES--GET PROJECT - JUMPLE TT2,FDIERR ;DISALLOW JUNK - CAIG TT2,377777 ;DISALLOW INVALID NUMBERS - CAIE T,"," ;VERIFY - JRST FDIERR ;BOMB ERROR - HRLZM TT2,FILBLK+3 ;STORE - PUSHJ P,FDIOCT ;GET PROGRAMMER - JUMPLE TT2,FDIERR ;DISALLOW JUNK - CAILE TT2,-1 ;DISALLOW INVALID - JRST FDIERR ; NUMBERS - HRRM TT2,FILBLK+3 ;STORE - JUMPE T,FDILDP ;EXIT IF DONE - CAIE T,"]" ;SEE IF END OF PPN - JRST FDIERR ;NO--BOMB OUT - JRST FDILOP ;GET MORE WORDS - -;STILL FTFILE - -FDIOCT: MOVEI TT2,0 ;CLEAR ANSWER -FDIOC1: PUSHJ P,TINCH ;GET CHAR - POPJ P, ;IF DONE - TLNE TT2,(7B2) ;IF OVERFLOWING, - POPJ P, ; GIVE UP - CAIL T,"0" ;SEE IF - CAILE T,"7" ; OCTAL - POPJ P, ;NO--GIVE UP - LSH TT2,3 ;YES--MULT AC - ADDI TT2,-"0"(T) ;INCREMENT - JRST FDIOC1 ;LOOP - -FDILET: CAIL T,"0" ;SEE IF ALPHA-NUM - CAILE T,"Z" - JRST FDIERR - CAILE T,"9" - CAIL T,"A" - JRST .+2 - JRST FDIERR - SUBI T,40 ;YES--MAKE SIXBIT - TLNE TT1,(77B5) ;DON'T OVERFLOW - IDPB T,TT1 ;STORE - JRST FDILOP ;AND LOOP - -;STILL FTFILE - -FDIERF: OUTSTR [ASCIZ /? Can't get at file -/] - JRST FDIERE - -FDIHLP: ASCIZ \ -Type dev:file.ext[p,pn]/switches - -/M examine monitor -/P patch monitor or file - type ^Z to exit from file patching -/S reload symbol table from file - - IF no spec, examine monitor -file defaults: if /P or /S: DSK:SYSTEM.XPN - else: DSK:CRASH.XPN - -use $Y to read DSK:FILDDT.DDT and write LPT:FILDDT.LST - -\ - -BADEXE: OUTSTR [ASCIZ " -?BAD DIRECTORY IN .EXE FILE -"] - JRST FDIERE - -;STILL FTFILE - -TINCH: INCHWL T ;GET NEXT CHAR - CAIE T,177 - CAIN T,15 - JRST TINCH - CAIE T,40 - CAIN T,11 - JRST TINCH - CAIE T,3 - CAIN T,32 - JRST [RESET - EXIT 1, - JRST DDT] - JUMPE T,TINCH - CAIGE T,175 - CAIGE T,40 - JRST [MOVEI T,0 - POPJ P,] - CAIL T,140 - SUBI T,40 - JRST CPOPJ1 - - -FDISW: PUSHJ P,TINCH ;GET SWITCH - JRST FDIERR - CAIN T,"H" ;HELP - JRST [OUTSTR FDIHLP - JRST FDIERE] - CAIN T,"P" ;PATCH - JRST [SETOM PATCHS - JRST FDILOP] - CAIN T,"S" ;LOAD SYMBOLS - JRST [SETOM SYMGET - JRST FDILOP] - CAIN T,"M" ;MONITOR - JRST [SETZM CRASHS - JRST FDILOP] - ;FALL INTO ERROR - -;STILL FTFILE - - ;FALL HERE FROM ABOVE -FDIERR: OUTSTR [ASCIZ \? Command error -- type /H for help -\] - -FDIERE: CLRBFI ;CLEAR ANY TYPE AHEAD - JRST DDT ;AND START OVER - - -FDILNP: MOVEI TT,0 ;CLEAR WORD - MOVE TT1,[POINT 6,TT] ;RESET POINTER -FDILOP: PUSHJ P,TINCH ;GET NEXT CHAR - SKIPA - JRST FDILP ;LOOP BACK TO PROCESS IT - -FDILDP: SKIPE TT ;ALL DONE--SEE IF FILE NAME ASSEMBLED - JRST [SKIPE FDIDOT - HLLZM TT,FILBLK+1 - SKIPN FDIDOT - MOVEM TT,FILBLK - JRST .+1] - -FDINO: SKIPE PATCHS ;SEE IF /P - SKIPN CRASHS ;AND NOT /M - JRST .+2 ;NO - SETOM SYMGET ;YES--SET /S - MOVEI T,17 ;PRESET I/O MODE - MOVEM T,FILDEV - MOVE T,['CRASH '] - SKIPE SYMGET ;SEE IF /S OR /P - MOVE T,['SYSTEM'] - SKIPN FILBLK ;PRESET FILE NAME - MOVEM T,FILBLK - MOVSI T,'XPN' ;AND FILE EXT - SKIPN FDIDOT - HLLZM T,FILBLK+1 - -;STILL FTFILE - - SKIPN SYMGET ;SEE IF /S - SKIPE CRASHS ;SEE IF /M - JRST .+2 ;/S OR -/M - JRST FDINOT ;PROCEED IF NOT - - OPEN 1,FILDEV ;YES--OPEN FILE - JRST FDIERF - PUSH P,FILBLK+3 ;SAVE PPN - LOOKUP 1,FILBLK ;LOOK IT UP - JRST [HLRZ T,FILBLK+1 - CAIE T,'XPN' - JRST FDIERF - MOVSI T,'EXE' - MOVEM T,FILBLK+1 - MOVE T,(P) - MOVEM T,FILBLK+3 - LOOKUP 1,FILBLK - JRST FDIERF - JRST .+1] - HLRE T,FILBLK+3 ;GET LENGTH - SKIPGE T - MOVNS T - SKIPL FILBLK+3 - IMULI T,^D128 - MOVEM T,MONSIZ ;STORE AS WORDS - POP P,FILBLK+3 ;RESTORE PPN - SKIPE PATCHS ;SEE IF PATCHING - SKIPN CRASHS ;YES--SEE IF FILE - JRST FDINOE ;NO--SKIP ENTER - SETZM FILBLK+2 ;CLEAR E+2 - HLLZS FILBLK+1 ;CLEAR RH(E+1) - ENTER 1,FILBLK ;/P AND -/M - JRST FDIERF -FDINOE: USETI 1,1 ;POSITION TO START - INPUT 1,[IOWD 2003,WIND0 - 0] ;READ DIRECTORY - STATZ 1,740000 ;CHECK FOR ERRORS - JRST [OUTSTR [ASCIZ \? I/O error\] - HALT .-3] - HLRZ T,WIND0 ;GET FIRST WORD - CAIE T,1776 ;IS THIS IN .EXE FORMAT? - JRST FDIXPN ;NO--SEE IF .XPN FORMAT - -SUBTTL FILDDT -- PROCESS .EXE FILE - -;FILE IS IN .EXE FORMAT -- PROCESS DIRECTORY - HRRZ W1,WIND0 ;GET WORD COUNT - TRZN W1,1 ;IS WORD COUNT ODD? - JRST BADEXE ;NO--SOMETHING IS WRONG - LSH W1,-1 ;CONVERT TO # OF ENTRIES - MOVEI W2,WIND0+1 ;FIRST ENTRY -FDIXL0: HRRZ TT1,1(W2) ;GET PROCESS PAGE NUMBER - CAIL TT1,MX.SIZ ;OUT OF RANGE - JRST BIGEXE ;YES--FILE IS BIG - ADDI TT1,PAGTBL ;FIRST PAGTBL SLOT - MOVE TT2,(W2) ;GET ENTRY - LDB TT,[POINT 9,1(W2),8] ;GET COUNT -FDIXL1: TLNN TT2,1777 ;JUNK IN LH - CAIL TT1,PAGTBL+MX.SIZ ;IN TABLE? - JRST BADEXE ;BAD DIRECTORY - MOVEM TT2,(TT1) ;STORE IN PAGTBL - TRNN TT2,3777 ;ALLOCATED BUT ZERO? - SETZM (TT1) ;YES--GIVE A ? ON FETCH - ADDI TT1,1 ;INCREMENT POINTERS - TRNE TT2,3777 ;DO NOT CHANGE ALLOCATED BUT - ; ZERO TO PAGE 1 - ADDI TT2,1 ; .. - SOJGE TT,FDIXL1 ;LOOP OVER THIS ENTRY - ADDI W2,2 ;STEP TO NEXT ENTRY - SOJG W1,FDIXL0 ;LOOP OVER ENTRE DIRECTORY - JRST FDISET -FDIXPN: SETOM XPNFMT ;FLAG AS .XPN FORMAT - SKIPE WIND0 ;IN .XPN FORMAT - JRST [OUTSTR [ASCIZ /% Not in .XPN format -/] - SETZM SYMGET - JRST .+1] - MOVE T,MONSIZ ;SIZE OF FILE - ADDI T,777 ;ROUND UP - LSH T,-9 ;CONVERT TO PAGES - CAIL T,MX.SIZ ;TOO BIG - MOVEI T,MX.SIZ-1 ;YES--ROUND DOWN -FDIXPL: TLO T,(1B2) ;SET WRITEABLE BIT - MOVEM T,PAGTBL(T) ;STORE POINTER - TLZ T,-1 ;CLEAR FLAGS - SOJGE T,FDIXPL ;LOOP OVER WHOLE FILE - -SUBTTL FILDDT -- SETUP SYMBOLS - -;PAGTBL IS SETUP MOVE AC'S (IF ARROUND) AND START DDT -FDISET: SKIPE SYMGET ;SEE IF /S - PUSHJ P,SYMFIX ;YES--GO GET THEM - SKIPE CRASHS ;ARE WE LOOKING AT A CRASH - SKIPE PATCHS ; AND NOT PATCHING? - JRST FDIST1 ;NO--CONTINUE - SKIPE SYMGET ;GETTING SYMBOLS - JRST FDIST1 ;YES--LEAVE AC'S WHERE THEY ARE - MOVE T,[RADIX50 0,CRSHAC] - MOVEM T,SYM ;LOOKUP CRSHAC - PUSHJ P,EVAL ; IN SYMBOL TABLE - JRST FDIST1 ;CAN NOT FIND IT - MOVSI W1,-20 ;NUMBER OF AC'S - HRRI R,(T) ;WHERE THE AC'S ARE -FDIGAC: PUSHJ P,FETCH ;GET THE AC - JRST FDIST1 ;CAN NOT FETCH - MOVEM T,AC0(W1) ;STORE AC - ADDI R,1 ;POINT TO NEXT CELL - AOBJN W1,FDIGAC ;GET THE AC'S - OUTSTR [ASCIZ "[ACS COPIED FROM CRSHAC TO 0-17] -"] - -FDIST1: SKIPN CRASHS ;SEE IF REASON TO HOLD OPEN - RELEAS 1, ;NO--CLEAR FILE - SKIPE SYMGET ;SEE IF /S - SKIPE PATCHS ;SEE IF /P - JRST FDINOT ;CONTINUE IF /P OR -/S - SKIPE CRASHS ;SEE IF -/M - JRST DDT ;IF /S AND NOT /P OR /M, START OVER - -FDINOT: JRST DD1 ;GO START DDT - -BIGEXE: OUTSTR [ASCIZ "?TOO MANY PAGES IN .EXE FILE -?REBUILD FILDDT WITH MX.SIZ SET LARGER -"] - JRST FDIERE ;PUNT - - -;STILL FTFILE - -EXTERN .JBREN,.JBCOR - -SYMFIX: PUSHJ P,SYMPTR ;GO GET SYMBOL POINTER IN T AND TT - MOVEM TT,FIUPTR ;SAVE JOBUSY - HLRES TT,TT - MOVMS TT,TT - MOVEM T,FISPTR ;SAVE IT - HLRES T,T - MOVMS T,T ;LENGTH OF SYMBOL TABLE - SKIPN W,SAVEFF ;PICK UP START OF SYMBOL TABLE - MOVE W,.JBFF ;GET FROM LOADER IF FIRST TIME - MOVEM W,SAVEFF ;SAVE FOR FUTURE PASSES - ADDI W,200 ;LEAVE SPACE FOR EXTRA SYMBOL DEFNS. - HRRZ W1,W ;SAVE LOC FOR COPY - ADD W,T ;ADD TABLE LENGTH - ADD W,TT ;INCLUDE USY TABLE - HRRZM W,.JBFF ;UPDATE MONITOR TO END FOR ITS BUFFER - HRLM W,.JBSA ; ALLOCATION MECHANISMS - HRLM W,.JBCOR ;INDICATE SYMBOLS FOR SAVE - CALLI W,11 ;GET CORE - JRST [OUTSTR [ASCIZ /? Not enough core -/] - JRST DDT] - - MOVE R,FIUPTR ;GET USY POINTER - JUMPGE R,SYMCPY ;SKIP IF NONE - HRRM W1,FIUPTR -UCOPY: PUSHJ P,FETCH - JRST ERR - MOVEM T,(W1) - AOS W1 - AOBJN R,UCOPY - -SYMCPY: MOVE R,FISPTR ;WHEREABOUTS OF MONITOR SYMBOLS - HRRM W1,FISPTR ;NOW POINT TO FILDDT SYMBOLS - JUMPGE R,CPOPJ ;RETURN IF NO TABLE -TCOPY: PUSHJ P,FETCH ;GET A WORD - JRST ERR - MOVEM T,0(W1) ;STASH IT - AOS W1 - AOBJN R,TCOPY - POPJ P, ;RETURN TO CALLER - -;STILL FTFILE - -REPEAT 0,< -THE MONITOR CAN BE LOADED IN ANY OF THREE WAYS(IN ORDER OF PREFERENCE): - 1. UNDER TIME SHARING WITH REGULAR LOADER AND COMMON - 2. UNDER SPECIAL 10/30 MONITOR(SPMON) WITH REGULAR 10/30 LOADER & COMMON - 3. UNDER SPECIAL 10/30 MONITOR(SPMON) WITH BUILD - -THE 3 WAYS LEAVE XJBSYM(36),.JBSYM(116) & T30SYM(131) IN DIFFERENT STATES: - - XJBSYM .JBSYM T30SYM - - 1. JUNK S.T.PTR JUNK - 2. JUNK JUNK(NON-NEG) S.T.PTR - 3. S.T.PTR S.T.PTR JUNK - -ALSO, MORE LIKELY, IS THAT EDDT HAS ALREADY RUN ONCE: - S.T.PTR OLD S.T.PTR JUNK - > - - -SYMPTR: MOVSI S,-LN.TRY ;PRESET TABLE FOR TRIES AT PTRS -SYMPT1: HLRZ R,PTRTRY(S) ;GET USY LOCATION - MOVEI T,0 ;(IN CASE SKIP) - JUMPE R,SYMPT2 ;JUMP IF NONE - PUSHJ P,FETCH ;GET IT - JRST ERR -SYMPT2: MOVE TT,T ;SAVE AS ANSWER - HRRZ R,PTRTRY(S) ;GET SYM LOCATION - PUSHJ P,FETCH ;GET POINTER - JRST ERR - JUMPL T,SYMPT3 ;IF GOOD, CONTINUE - AOBJN S,SYMPT1 ;ELSE LOOP -SYMPT3: MOVE S,PTRTRY(S) ;GOOD--PICK UP LOCATIONS - JUMPGE TT,SYMPT4 ;MAKE SURE USY TABLE IS OK - HLRE W,TT ; BY COMPARING - MOVMS W ; ITS END - ADDI W,(TT) ; WITH START OF SYM - CAIE W,(T) ;IF EQUAL, OK -SYMPT4: MOVEI TT,0 ;NO--CLEAR USY POINTER - POPJ P, ;RETURN - -PTRTRY: XJBUSY,,XJBSYM ;IN CASE EDDT HAS RUN - .JBUSY,,.JBSYM ;REGULAR LOADER RAN LAST - 0,,T30SYM ;10/30 LOADER - XJBUSY,,XJBSYM ;BUILD OR JUNK -LN.TRY==.-PTRTRY - - > ;END FTFILE -LIST - -SUBTTL DDT COMMAND PARSER - -DD1: PUSHJ P,CRF -DD1.5: TLZ F,(ROF) ;CLOSE ANY OPEN REGISTER - MOVE T,[XWD SCHM,SCH] - BLT T,ODF ;LOAD ACS - MOVS T,[SVBTS,,PSVBTS] - BLT T,SVBTS+2 -DD2: CLEARM PRNC ;PARENTHESES COUNT - MOVE P,[IOWD LPDL,PDL] -LIS: SETZM WAKALL ;SET WAKEUP SET TO PUNCT AND CTRLS - IFN FTDEC20,< - MOVEI R,.JBSYM ;VALIDATE JOB DATA AREA - CHECK .JBSYM - PUSHJ P,FETCH - SETZ T, ;CAN'T REF PAGE 0, NO JOBDAT - SKIPL T ;VALID SYMTAB PTR? - SETZM JDTFLG#> ;NO, NOTE NO JOBDAT - SKIPGE R,@USYMP ;GET UND SYM PTR, OK? - PUSHJ P,FETCH ;MAYBE, SEE IF CAN REFERENCE IT - SETZM @USYMP ;NO GOOD, FLUSH IT - MOVE T,@USYMP ;GET UNDEF SYMBOL POINTER - JUMPL T,LIS0B ;IF POINTER OK, TRANSFER - SKIPGE T,@SYMP ;IF POINTER NOT OK, USE .JBSYM ADR - JRST LIS0A ; SO LONG AS IT IS NEGATIVE - IFE FTFILE,< - MOVEI R,.JBHSM ;IF LO ADR NOT OK, TRY HIGH - IFN FTEXEC, ; UNLESS IN EXEC MODE - PUSHJ P,HFETCH> ;GET HIGH SYM TABLE POINTER - MOVEI T,0 ;IT DOESN'T EXIST - JUMPG T,.-1 ;IF POINTER .G. 0, GIVE 0 RESULT -LIS0A: HRRZS T ;USE ADR OF SYM TABLE TO INIT - MOVEM T,@USYMP ; UNDEFINED SYM TABLE POINTER -LIS0B: MOVEM T,ESTUT ;INIT UNDEFINED SYM ASSEMBLER - TLZ F,(-1B17-ROF-STF) ;CLEAR FLAGS EXCEPT ROF, STF - TRZ F,LF1+CF1+ITF+Q2F ;CLEAR FLAGS -LIS0: TLZ F,(-1B17-ROF-STF-FAF-SAF) ;CLEAR FLAGS EXCEPT ... - TRZ F,NAF ; .. - SETZM WRD -LIS1: SETZM FRASE -LIS2: MOVEI T,1 - MOVEM T,FRASE1 - TLZ F,(MLF+DVF) -L1: TLZ F,(CF+CCF+SF+FPF) ;TURN OFF CONTROL, SYL, PERIOD FLAG -L1A: SETZM SYL -L1RPR: SETZM SYM - MOVEI T,6 - MOVEM T,TEM ;INIT SYMBOL COUNTER - MOVE T,[POINT 7,TXT] - MOVEM T,CHP ;SETUP FOR OPEVAL SYMBOL - SETZM DEN - SETZM WRD2 - -;CONTINUED ON NEXT PAGE - -L2: PUSHJ P,TIN ;PICK UP CHARACTER - CAIL T,"A"+40 ;LOWER CASE A - CAILE T,"Z"+40 ;LOWER CASE Z - JRST .+2 - TRC T,40 ;CHANGE LOWER CASE TO UPPER CASE - TLNE F,(CF) ;CONTROL FLAG - JRST L21 - CAIG T,"Z" ;Z - CAIGE T,"A" ;A - JRST .+2 - JRST LET -L21: MOVE R,T - CAILE T,137 ;DISPATCH TABLE HAS ENTRIES ONLY .LE. 137 - JRST ERR - IDIVI R,3 ;REMAINDER GIVES COLUMN, QUOTIENT GIVES ROW - LDB W,BDISP(R+1) ;GET 12 BIT ADDRESS FROM DISPATCH TABLE - CAIGE W,MULT-DDTOFS ;FIRST EVAL ROUTINE - JRST DDTOFS(W) - MOVE T,SYL - TLZN F,(LTF) - JRST POWER - CAIN W,SPACE-DDTOFS ;IS TERMINATOR A SPACE? - SKIPE WRD ;IS CONSTRUCTED WORD SO FAR ZERO? - SKIPA T,[OPEVAL,,EVAL] ;SEARCH EVAL 1ST IFF: -SPACE .OR. (WRD).NE.0 - MOVS T,[OPEVAL,,EVAL] ;SEARCH OPEVAL 1ST IFF: SPACE .AND. (WRD)=0 - MOVEM T,SYMORD ;SAVE SYMBOL TABLE SEARCH ORDER - JRST L213 - -L212: HLRZS T,SYMORD ;GET ADDRESS OF THE OTHER LOOKUP ROUTINE - JUMPE T,UND1 ;IF ADR=0, THEN SYMBOL UNDEFINED -L213: PUSHJ P,(T) ;CALL OPEVAL OR EVAL - JRST L212 ;SYMBOL NOT FOUND - CAIN W,ASSEM-DDTOFS ;DEFINED SYMBOL FOLLOWED BY #? - JRST ERR ;IF DEFINED, DON'T ALLOW # -L4: TLZE F,(MF) - MOVN T,T - TLNN F,(SF) - CAIE W,LPRN-DDTOFS - JRST .+2 - JRST LPRN - - EXCH T,FRASE1 - TLNN F,(DVF) - IMULB T,FRASE1 - TLZE F,(DVF) - IDIVB T,FRASE1 - CAIGE W,ASSEM-DDTOFS - JRST DDTOFS(W) ;MULTIPLY OR DIVIDE - ADDB T,FRASE - CAIGE W,SPACE-DDTOFS - JRST DDTOFS(W) ; + - @ , - - ADD T,WRD - TLNE F,(TIF) ;TRUNCATE INDICATOR FLAG - HLL T,WRD ;TRUNCATE - MOVEM T,WRD - TLNN F,(QF) - MOVE T,LWT - SETZM R - MOVE W1,ESTUT - CAMN W1,@USYMP ;IF THERE ARE ANY UNDEFINED SYMBOLS IN - JRST L5 ;THE CURRENT EXPRESSION, ANYTHING EXCEPT - CAILE W,CARR-DDTOFS ;FURTHER EXPRESSION INPUT, OR DEPOSITING - JRST ERR ; INTO MEMORY IS ILLEGAL -L5: CAIG W,RPRN-DDTOFS - JRST DDTOFS(W) - PUSH P,KILRET ;WHEN INSIDE ( ), CURRENT EXPRESSION - SKIPN PRNC ;INVALID FOR ANYTHING OTHER - JRST DDTOFS(W) ; THAN MORE EXPRESSION INPUT - JRST ERR - -WRONG: MOVE W1,[ASCII /XXX/] - PUSHJ P,TEXT - JRST WRONG2 - -ERR: MOVSI W1,(BYTE (7)"?","G"-100) ;QUESTION-DING - JRST WRONG1 - -UNDEF: MOVEI W1,"U" -WRONG1: MOVE P,[IOWD LPDL,PDL] - PUSHJ P,TEXT - PUSHJ P,TTYCLR ;CLEAR INPUT BUFFER -WRONG2: TLNN F,(ROF) ;REGISTER OPEN? - JRST DD1 ;NO, CRLF. OTHERWISE, FALL INTO RET -RET: MOVE P,[IOWD LPDL,PDL] - PUSHJ P,LCT ;COMMON RETURN FOR TAB;,JRST LIS - JRST DD2 - - -UND1: MOVE R,ESTUT ;UNDEFINED SYM ASSEMBLER - JUMPE R,UNDEF ;UNDEFINED IF NO UNDEF SYM TABLE - HLRE S,ESTUT - ASH S,-1 ;SETUP EVAL END TEST - PUSHJ P,EVAL2 - CAIN W,ASSEM-DDTOFS - TLNN F,(ROF) - JRST UNDEF - SKIPE PRNC - JRST UNDEF - MOVEI T,"#" - CAIE W,ASSEM-DDTOFS - PUSHJ P,TOUT - - MOVN R,[XWD 2,2] - ADDB R,ESTUT - MOVE T,SYM - TLO T,(GLOBL) - PUSHJ P,DSYMER ;DEPOSIT AND TYPE ? IF IT FAILS - HRRZ T,LLOCO - TLNE F,(MF) - TLO T,(STNEG) ;SET FLAG TO SHOW SUBTRACTIVE REQUEST - TLO T,(STADD) ;SET FLAG TO SHOW UNCHAINED REQUEST - ADDI R,1 - PUSHJ P,DSYMER - MOVEI T,0 - JRST L4 - -QUESTN: PUSHJ P,CRF ;HERE FOR "?" - TLNE F,(LTF) ;HAS A SYMBOL BEEN TYPED? - JRST QLIST ;NO - MOVE R,@USYMP ;YES, LIST UNDEFINED SYMBOLS -QUEST1: JUMPGE R,DD1 - MOVE T, (R) - SKIPA W1,@USYMP - -QUEST2: ADD W1,[XWD 2,2] - CAME T,(W1) - JRST QUEST2 - CAME R,W1 - JRST QUEST4 - PUSHJ P,SPT - PUSHJ P,CRF -QUEST4: ADD R,[XWD 2,2] - JRST QUEST1 - -QLIST: PUSHJ P,SYMSET ;LIST REFERENCES TO THE SYMBOL -QLIST1: SETZM QLPNT ;ZERO FLAG SHOWING REFERENCE -QLIST2: MOVE T,(R) ;PICK UP SYMBOL - TLZN T,(PNAME) ;A PROGRAM NAME? - JRST QLIST6 ;YES - CAMN T,SYM ;NO, IS AN OCCURANCE FOUND? - HRRZM R,QLPNT ;YES, REMEMBER WHERE -QLIST3: AOBJN R,.+1 ;LOOK THRU TABLE - AOBJN R,QLIST4 ;END OF TABLE SEGMENT? - IFE FTFILE,< - TRNN R,1B18 ;YES, WRAP AROUND - SKIPL R,SAVHSM - > - MOVE R,@SYMP -QLIST4: AOJLE S,QLIST2 ;THRU SEARCHING? - JRST DD1 ;YES - -QLIST6: SKIPN QLPNT ;FOUND THE SYMBOL? - JRST QLIST3 ;NO - PUSHJ P,SPT1 ;YES, PRINT THE PROGRAM NAME - MOVE T,@QLPNT ;GET THE SYMBOL BACK AND - TLNN T,(GLOBL) ; TEST FOR A GLOBAL SYMBOL - JRST QLIST7 ;NOT GLOBAL - PUSHJ P,TSPC ;IS GLOBAL, TYPE " G" - MOVEI T,"G" - PUSHJ P,TOUT -QLIST7: PUSHJ P,CRF - SETZM QLPNT ;RESET FLAG - JRST QLIST3 ; AND SEARCH THE NEXT SET OF SYMBOLS - -NUM: ANDI T,17 ;T HOLDS CHARACTER - TLNE F,(CF+FPF) - JRST NM1 - MOVE W,SYL - LSH W,3 - ADD W,T - MOVEM W,SYL - MOVE W,DEN - IMULI W,12 ;CONVERT TO DECIMAL - ADD W,T - MOVEM W,DEN - AOJA T,LE1A - -DOLLAR: SKIPA T,[46+101-13] ;RADIX 50 $ TO BE -PERC: MOVEI T,47+101-13 ;PERCENT SIGN -LET: TLC F,(SF+FPF) ;EXPONENT IFF (LTF)'*(FEF)'*(T=105)*(SF)*(FPF)=1 - TLZN F,(LTF+FEF+SF+FPF) - CAIE T,105 ; E - TLOA F,(LTF) - TLOA F,(FEF) - JRST LET1 - TLZN F,(MF) - SKIPA W1,SYL - MOVN W1,SYL - MOVEM W1,FSV - CLEARM DEN -LET1: SUBI T,101-13 ;FORM RADIX 50 SYMBOL -LE1A: TLO F,(SF+QF) -LE2: SOSGE TEM ;IGNORE CHARACS AFTER 6 - JRST L2 - MOVEI W,50 - IMULM W,SYM ;MULTIPLY BY RADIX 50 - ADDM T,SYM ; AND ADD NEW CHAR INTO SYM - MOVEI T,"A"-13(T) ;CONVERT LETTERS BACK TO ASCII - IDPB T,CHP - JRST L2 - -NUM1: EXCH T,WRD2 ;FORM NUMBER AFTER $ - IMULI T,12 - ADDM T,WRD2 - TRO F,Q2F - JRST L2 - -NM1: TLNE F,(CF) - JRST NUM1 - MOVEI W1,6 ;FORM FLOATING POINT NUMBER - AOS NM1A - XCT NM1A ;MOVEI W2,.. - MOVSI R,201400 -NM1A1: TRZE W2,1 - FMPR R,FT(W1) - JUMPE W2,NM1B - LSH W2,-1 - SOJG W1,NM1A1 -NM1B: MOVSI W1,211000(T) - FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT - FADRB R,FH ;ADD VALUE INTO FLOATING NO. - MOVEM R,SYL - AOJA T,LE1A - -POWER: TLNN F,(FEF) - JRST L4 ;NO EXPONENT - CAIE W,PLUS - CAIN W,MINUS - TROE F,POWF - TRZA F,POWF - JRST (W) ; E+- - - MOVE W2,DEN - CLEARM FRASE - MOVEI W1,FT-1 - TLZE F,(MF) - MOVEI W1,FT01 - SKIPA T,FSV -POW2: LSH W2,-1 - TRZE W2,1 - FMPR T,(W1) - JUMPE W2,L4 - SOJA W1,POW2 - -PERIOD: MOVE T,LLOC - TLNE F,(SF) ;SYLLABLE STARTED - MOVE T,DEN - MOVEM T,SYL - TLNE F,(FPF) ;HAS A PERIOD BEEN SEEN BEFORE? - TLO F,(LTF) ;YES, TWO PERIODS MAKES A SYMBOL - TLON F,(FPF+SF+QF) - MOVEI T,0 - IDIVI T,400 - SKIPE T - TLC T,243000 - TLC W1,233000 - FAD T,[0] ;NORMALIZE T AND W1 - FAD W1,[0] - FADR T,W1 - MOVEM T,FH - HLLZS NM1A - MOVEI T,45 ;RADIX 50 PERIOD - JRST LE2 - - IFE FTFILE,< -PILOC: MOVEI T,SAVPI> ;GET ADDRESS FOR $I -QUANIN:;TLO T,(DDTINT) ;(FUTURE) FLAG DDT INTERNAL REGISTERS - JRST QUAN1 - -QUAN: TLNN F,(CCF) ;$Q OR $$Q, WHICH? - SKIPA T,LWT ;$Q STRAIGHT -QUANSW: MOVS T,LWT ;$$Q SWAPPED (ALSO FOR $V) -QUAN1: MOVEM T,SYL -QUAN2: TLO F,(SF+QF) ;WRD,SYL STARTED - TLZ F,(CF+CCF) - JRST L2 - -;HERE WHEN ESC TYPED - -CONTRO: TLOE F,(CF) - TLO F,(CCF) - SETOM WAKALL ;SET WAKEUP ON EVERYTHING - JRST L2 - - IFN FTFILE, - -SUBTTL SYMBOL TABLE LOGIC -;SYMBOL EVALUATION ROUTINE - -EVAL: PUSHJ P,CSHVER ;GO SEE IF CACHE IS USEFUL - JRST EVALC4 ;ITS NOT. GO DO OLD STYLE LOOKUP - MOVSI S,-NSYMCS ;SCAN SYMBOL CACHE FIRST -EVALC1: SKIPN R,SYMCSH(S) ;GET POINTER - JRST EVALC3 ;NOT IN USE - MOVE T,0(R) ;GET SYM - TLZ T,(PNAME) ;FLUSH BITS - CAMN T,SYM ;SAME? - JRST EVALC2 ;YES, DONE -EVALC3: AOBJN S,EVALC1 ;KEEP LOOKING -EVALC4: PUSHJ P,SYMSET ;SET UP SYM TABLE POINTER AND COUNT - -;CERTAIN CALLS ENTER HERE WITH S AND R ALREADY SETUP - -EVAL2: TRZ F,PNAMEF!MDLCLF ;CLEAR FLAGS FOR EVAL - SETZM SYMPNT ;CLEAR LOCAL SYM POINTER - JUMPE S,CPOPJ ;XFER IF SYM TABLE EMPTY - JUMPGE R,CPOPJ ;XFER IF POINTER NOT VALID - -EVAL3: MOVE T,0(R) ;GET SYM FROM SYM TABLE - TLZN T,(PNAME) ;PROGRAM NAME? ALSO CLEAR THE FLAGS - JRST [JUMPE T,EVAL4 ;YES, IGNORE IF SYMBOL IS NULL - TRO F,PNAMEF ;SET PROGRAM NAME FLAG - JRST EVAL4] - CAMN T,SYM ;SYMBOL MATCH? - JRST EVAL6 ;YES -EVAL4: AOBJN R,.+1 ;NO VALID MATCH, CONTINUE LOOKING - AOBJN R,EVAL4A ;POINTER EXPIRED? - IFE FTFILE,< - TRNN R,1B18 ;TEST FOR HIGH SEGMENT SYM TABLE - SKIPL R,SAVHSM ;WAS LOW SEG, GET HIGH SEG POINTER, IF ANY - > - MOVE R,@SYMP ;WRAP AROUND TO LOW SEG END OF TABLE -EVAL4A: AOJLE S,EVAL3 ;TRANSFER IF ANY SYMBOLS LEFT - SKIPN R,SYMPNT ;SEARCH FINISHED, ANY LOCAL SYMS OUTSIDE - POPJ P, ;CURRENT PROGRAM AREA? - TRNE F,MDLCLF ;YES, WITH A UNIQUE VALUE? - JRST ERR ;NO, AMBIGIOUS -EVAL5: HRRZ W1,R - PUSHJ P,SYMCSI ;ADD SYM TO CACHE -EVALC2: MOVE T,1(R) ;GET VALUE OF SYMBOL -CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP -CPOPJ: POPJ P, -EVAL6: MOVE T,(R) ;SYM MATCHES, GET FLAGS BACK - TLNE T,(DELI) ;IS SYMBOL DELETED FOR INPUT? - JRST EVAL4 ;YES - TLNN T,(GLOBL) ;GLOBAL SYMS VALID ANYWHERE - TRNN F,PNAMEF ;HAS SECOND PROGRAM TABLE BEEN STARTED? - JRST EVAL5 ;LOCALS ALWAYS VALID IN CURRENT PROGRAM - SKIPN T,SYMPNT ;LOCAL OUTSIDE OF CURRENT PROGRAM - JRST EVAL7 ;YES, AND THE 1ST ONE OF THEM - MOVE T,1(T) ;GET VALUE OF PREVIOUS LOCAL - CAME T,1(R) ;IS IT THE SAME VALUE? - TRO F,MDLCLF ;NO, MULTIPLY DEFINED -EVAL7: MOVEM R,SYMPNT ;SAVE POINTER TO THIS LOCAL - JRST EVAL4 ;CONTINUE LOOKING FOR GLOBALS - -;BIT 40 - DELETE OUTPUT -; 20 - DELETE INPUT -; 10 - LOCAL -; 04 -GLOBAL -; NO BITS - PROGRAM NAME - -;SYMBOL TABLE POINTER AND COUNT SET UP ROUTINE - -SYMSET: IFE FTFILE,< - MOVEI R,.JBHSM ;TRY TO GET HIGH SEG SYM TABLE POINTER - IFN FTEXEC, ;NO HI SYM TABLE POINTER IN EXEC MODE - PUSHJ P,HFETCH - MOVEI T,0 ;NO HIGH SEGMENT - MOVEM T,SAVHSM ;SAVE HIGH SEG POINTER (OR 0) - > - HLLZ S,@SYMP ;GET WORD COUNT FOR LOW SEG TABLE - IFE FTFILE,< - SKIPGE T ;IF .JBHSM .GT. 0, INVALID - ADD S,T ;ADD WORD COUNT FOR HIGH SEG TABLE - > - ASH S,-^D19 ;PUSH TO RIGHT HALF AND DIVIDE BY 2 - SKIPL T,PRGM ;GET $: POINTER, GOOD ONLY IF .LT. 0 - JRST SYMS4 ;NOT GOOD, USE .JBSYM - IFE FTFILE,< - TRNE T,1B18 ;POINTER FROM .JBSYM OR .JBHSM? - JRST [PUSH P,T ;SAVE T - MOVEI R,.JBHNM ;NAME WORD - PUSHJ P,HFETCH ;GET FROM HISEG - SETCM T,SEGNAM ;SHOULD NEVER FAIL - MOVE R,T ;SAVE IN BETTER AC - POP P,T ;RESTORE T - CAME R,SEGNAM ;SAME HISEG? - JRST SYMS4 ;NO - JRST SYMS2] ;YES - > - SKIPL T,@SYMP ;PRGM CAME FROM .JBSYM - JRST SYMS5 ;.JBSYM POINTER INVALID -SYMS2: HLRE R,T ;GET NEGATIVE LENGTH - SUB T,R ;GET LAST ADR OF TABLE - MOVS R,PRGM ;GET NEG. LENGTH FOR $: POINTER - ADD R,T ; AND CALCULATE STARTING ADR - HLL R,PRGM ; AND SET UP TABLE LENGTH - JUMPL R,CPOPJ ;NO, POINTER IS OK AS LONG AS IT IS .LT. 0 -SYMS4: SKIPL R,@SYMP ;SET UP POINTER INTO LOW SEG TABLE -SYMS5: IFE FTFILE,< - MOVE R,SAVHSM ;LOW SEG POINTER BAD, TRY HI SEG - > - IFN FTFILE,< - MOVEI R,0 - > - POPJ P, - -SETNAM: SETZM PRGM ;FORGET OLD PROGRAM - PUSHJ P,CLRCSH ;CLEAR SYMBOL CACHE - SKIPGE R,@SYMP ;LOOK UP PROGRAM NAME FOR $: - PUSHJ P,SETSUB ;SEARCH LO SEG SYM TABLE - JUMPL R,SETN2 ;XFER IF NAME FOUND - IFE FTFILE,< - MOVEI R,.JBHSM - IFN FTEXEC, ;NO HI SYM TABLE POINTER IN EXEC MODE - PUSHJ P,HFETCH ;GET .JBHSM - JRST UNDEF ;NO HI SEG, NAME$: UNDEFINED - SKIPGE R,T ;IS HI SEG POINTER GOOD? - PUSHJ P,SETSUB ;YES, LOOK THRU HI SYM TABLE - > - JUMPGE R,UNDEF ;UNDEFINED IF NOT IN HI SEG - IFE FTFILE,< - HRRI W,1B18 ;SET FLAG SHOWING HI SEGMENT - MOVEI R,.JBHNM ;GET ADR OF HI SEG PROGRAM NAME - IFN FTEXEC, - PUSHJ P,HFETCH ; AND GO GET THE NAME - MOVEI T,0 ;NO HI SEG NAME, OR EXEC MODE - MOVEM T,SEGNAM > ;SAVE HI SEG NAME -SETN2: MOVEM W,PRGM ;SAVE -WC IN LH, HISEG=1 FLAG IN RH - JRST RET ;DONE, THANK YOU - - ;SUBROUTINE TO SEARCH A SYM TABLE FOR A PROGRAM NAME -SETSB1: MOVE T,(R) ;ENTRY POINT IS "SETSUB" - CAMN T,SYM ;MATCH FOR PROGRAM NAME? - POPJ P, ;YES, RETURN WITH "ANSWER" IN W - ADD R,[2,,2] ;GO TO NEXT ENTRY - TLNN T,(PNAME) ;WAS LAST ENTRY A PROG NAME? -SETSUB: HLLZ W,R ;(ENTRY POINT) YES, SAVE POINTER TO HERE - JUMPL R,SETSB1 ;XFER IF ANY SYMBOLS LEFT - POPJ P, ;SEARCH FAILED, RETURN - -KILL: TLNN F,(LTF) ;DELETE SYMBOLS - JRST ERR - PUSHJ P,EVAL - JRST KILL1 - MOVE T,(R) ;GET SYM WITH FLAGS - TLO T,(DELO) ;ASSUME DELETE OUTPUT - TLNE F,(CCF) ;$$K? - MOVSI T,(DELO!DELI!37777B17) ;MAKE SYM IMPOSSIBLE LOCAL, DELETED IN AND OUT - PUSHJ P,DSYMER ;DEPOSIT IF LEGAL, ELSE ? -KILRET: JRST RET ;USED AS A CONSTANT - - -KILL1: SKIPL R,@USYMP ;REMOVE UNDEFINED SYMS - JRST UNDEF -KILL1A: HLRE S,R ;GET LENGTH OF UNDEFINED TABLE, AND - ASH S,-1 ;DIVIDE BY 2 TO GET # OF ENTRIES - IFE FTFILE,< - SETZM SAVHSM ;LOOK ONLY IN LOW SEG - > -KILL2: PUSHJ P,EVAL2 - JRST RET -REPEAT 0,< ;IF ASSEMBLED OUT, DON'T ZERO CHAINED ADDRESSES - PUSH P,R - SKIPL R,1(R) ;CHAINED REQUEST? - JRST KILL4 ;YES -KILL3: POP P,R > - PUSHJ P,REMUN - JRST ERR ;CAN'T MODIFY SYMTAB - MOVE R,@USYMP ;START TABLE SEARCH OVER - JRST KILL1A - -REPEAT 0,< ;IF ASSEMBLED OUT, DON'T ZERO CHAINED ADDRESSES -KILL4A: SKIPE R,S ;GET CHAIN ADR, STOP IF 0 -KILL4: PUSHJ P,FETCH ;GET NEXT ADR OF CHAIN - JRST KILL3 ;FAILED, QUIT SEARCHING LIST - HRRZ S,T ;SAVE CHAIN POINTER - HLLZS T ;GET RID OF CHAIN ADDRESS, AND - PUSHJ P,DEPMEM ; DEPOSIT BACK INTO MEMORY - JFCL ;IGNORE IF WRITE LOCKED SEG - JRST KILL4A > - -REMUN: MOVE S,@USYMP ;REMOVE ONE UNDEFINED SYMBOL - MOVE T,(S) ;MOVE SYMBOL 2 LOCATIONS - PUSHJ P,DEPSYM - POPJ P, ;CAN'T MODIFY SYMTAB - MOVE T,1(S) - ADDI R,1 - PUSHJ P,DSYMER - SUBI R,1 - MOVE S,[2,,2] - ADDB S,@USYMP - JRST CPOPJ1 - -TAG: TLNN F,(LTF) ; NO LETTERS IS ERROR - JRST ERR ; GO SAY ERROR - TLNE F,(FAF) ; DEFINE SYMBOLS - JRST DEFIN ;A.LT.B: - TLNE F,(CF) ;DEFINE SYMBOL AS OPEN REGISTER - JRST SETNAM - MOVE W,LLOCO - HRRZM W,DEFV - -DEFIN: PUSHJ P,EVAL ;DEFINED SYMBOL? - JRST DEF1 ;NO - DEFINE - MOVE T,0(R) ;YES, GET FLAGS FOR SYMBOL TYPE - TLNE T,(PNAME) ;PROGRAM NAME? - JRST DEF2 ;NO, REDEFINE SYMBOL - -DEF1: SKIPL R,@SYMP ;DEFINE A NEW SYMBOL - IFE FTFILE,< - JRST [MOVEI R,.JBHSM - IFN FTEXEC, ;NO HI SYM POINTER IN EXEC MODE - PUSHJ P,HFETCH ;GET HI SEG SYM POINTER - JRST ERR ;THERE IS NO SYM POINTER ANYWHERE - SUB T,[2,,2] ;MAKE ROOM FOR ANOTHER ENTRY - PUSHJ P,DSYMER ; AND STORE IT BACK - MOVE R,T - JRST DEF1A] - > - IFN FTFILE,< - JRST ERR - > - SUB R,[2,,2] - MOVEM R,@SYMP ;DECREMENT LO SEG SYM POINTER -DEF1A: SKIPL @USYMP ;DOES AN UNDEFINED TABLE EXIST? - JRST DEF2 ;NO - MOVE S,R - SOS R,@USYMP ;MOVE HI NUMBERED ENTRY ON UNDEFINED - MOVE T,1(S) ; TABLE TO LOW END - PUSHJ P,DSYMER - SOS R,@USYMP ;SAME FOR SECOND WORD - MOVE T,(S) - PUSHJ P,DSYMER - MOVE R,S ;GET DEFINED SYM POINTER BACK -DEF2: MOVSI T,(GLOBL) - IORB T,SYM - PUSHJ P,DSYMER - MOVE T,DEFV - MOVEI R,1(R) - PUSHJ P,DSYMER - MOVE R,@USYMP - -DEF3: JUMPGE R,RET ;PATCH IN VALUE FOR UNDEF SYM ENTRY - MOVE T,SYM - TLO T,(GLOBL) ;UNDEFINED TABLE HAS GLOBAL ENTRIES - CAME T,(R) - JRST DEF4 - PUSH P,R ;SAVE POINTER INTO UNDEF TABLE - SKIPL R,1(R) ;IS ENTRY AN ADDITIVE REQUEST? - JRST DEF7 ;NO, CHAINED IN RIGHT HALF - PUSHJ P,FETCH ;GET OBJECT CELL - JRST ERR - TLNN R,(STNEG) ;ADDITIVE OR SUBTRACTIVE? - SKIPA S,DEFV ;ADDITIVE - MOVN S,DEFV ;SUBTRACTIVE - TLNE R,(STLH) ;RIGHT OR LEFT HALF? - JRST [HRLZS S ;LEFT HALF - ADD T,S ;ADD INTO LEFT HALF - JRST DEF5] - ADD S,T ;RIGHT HALF, ADD HALVES - HRR T,S ; AND REPLACE RIGHT HALF -DEF5: PUSHJ P,DMEMER ;STORE RESULT BACK INTO MEMORY -DEF6: POP P,R ;GET UNDEF TABLE POINTER BACK - PUSHJ P,REMUN - JRST ERR ;CAN'T MODIFY SYMTAB -DEF4: ADD R,[XWD 2,2] ;REMOVE THE NOW DEFINED SYMBOL - JRST DEF3 - -DEF7: JUMPE R,DEF6 ;JUMP IF ALL DONE - PUSHJ P,FETCH ;GET OBJECT CELL - JRST ERR - HRRZ S,T ;SAVE CHAIN POINTER - HRR T,DEFV ;REPLACE WITH NEW VALUE - PUSHJ P,DMEMER ; AND STORE BACK INTO MEMORY - HRRZ R,S ;LOOP TO END - JRST DEF7 ; OF CHAIN - -SUBTTL TEXT COMMANDS (" AND $") - -TEXI: TRZE F,Q2F ;QUANT AFTER $ ? - JRST [MOVE T,WRD2 ;YES - CAIE T,5 ; $5" ? - JRST ERR ;NO, ONLY CASE KNOWN - MOVE T,SYM ;YES, TAKE PREVIOUS SYL AS RADIX50 - TLZ F,(FPF+FEF+LTF) ;REINIT SYL - JRST QUAN1] - HRRZ T,LLOCO ;GET ADR OF OPEN REG - MOVEM T,TEM ;SAVE IT FOR LOCAL USE - PUSHJ P,TEXIN0 ;GET TERMINATOR - MOVEM T,SYL ;SAVE TERMINATOR - PUSHJ P,TEXIN ;GET FIRST CHARACTER - CAIN T,33 ;ESC? - JRST QUAN2 ;YES, EQUALS ONE ASCII/SIXBIT CHAR - PUSHJ P,TEXIN1 ;CONVERT TO SIXBIT IF NECESSARY -TEXI4: MOVE W1,[POINT 7,W] ;SETUP TO BUILD WORD IN W - TLNE F,(CF) ;SIXBIT? - HRLI W1,(POINT 6,0) ;YES, MODIFY BYTE POINTER - MOVEI W,0 ;INIT WORD TO 0 -TEXI2: CAMN T,SYL ;REACHED TERMINATOR? - JRST [MOVE T,W ;GET LAST WORD - HRRZ R,TEM - CAMN R,LLOCO ;MULTIPLE-WORD INPUT? - JRST QUAN1 ;NO, JUST RETURN QUANTITY - PUSHJ P,PSHLLC ;YES, SAVE OLD LOC - MOVEM R,LLOC ;SET LOC TO END OF INPUT - MOVEM R,LLOCO - JRST QUAN1] ;GO USE AS QUANTITY - TLNN W1,(76B5) ;ROOM FOR ANOTHER BYTE IN WORD? - JRST TEXI3 ;NO - IDPB T,W1 ;YES, STORE IT - PUSHJ P,TEXIN0 ;GET ANOTHER INPUT CHARACTER - JRST TEXI2 - -;HERE WHEN WORD FULL - -TEXI3: MOVSI W1,(POINT 0,0) - TLNN F,(ROF) ;REGISTER OPEN? - JRST TEXI2 ;NO, LOSE ANY ADDITIONAL INPUT - PUSH P,T ;SAVE CHARACTER - MOVE T,W ;GET FULL WORD - HRRZ R,TEM ;GET LOC OF NEXT REGISTER - PUSHJ P,DEPMEM ;STORE WORD - JRST ERR ;CAN'T - AOS TEM ;BUMP LOC - POP P,T ;RECOVER CHARACTER - JRST TEXI4 ;GO REINIT WORD AND CONTINUE INPUT - -;GET INPUT CHARACTER, CONVERT TO SIXBIT IF NECESSARY - -TEXIN0: PUSHJ P,TEXIN ;GET CHAR -TEXIN1: TLNN F,(CF) ;SIXBIT MODE? - POPJ P, ;NO -CONV6: CAIL T,"A"+40 ;IS CHAR BETWEEN LOWER CASE "A" AND - CAILE T,"Z"+40 ; LOWER CASE "Z"? - SKIPA ;NO - TRC T,40 ;YES, CONVERT TO UPPER CASE - CAIL T," " ;IS CHAR IN SIXBIT SET? - CAILE T,"_" - JRST ERR ;NO - ANDI T,77 ;YES, MASK TO 6 BITS - TRC T,40 ;CONVERT TO SIXBIT FORM - POPJ P, - -;***ROUTINES BEYOND HERE EVALUATE THEIR ARGUMENT*** - -MULT: TLOA F,(PTF+MLF) ;* -DIVD: TLO F,(DVF+PTF) ;SINGLE QUOTE - JRST L1 - -ASSEM: JRST PLUS ;# -MINUS: TLO F,(MF) -PLUS: TLO F,(PTF) - JRST LIS2 - -LPRN: PUSH P,F ;RECURSE FOR OPEN PAREN - PUSH P,WRD - PUSH P,FRASE - PUSH P,FRASE1 - AOS,PRNC - JRST LIS - -INDIRE: HRLZI W,20 ;@ - IORB W,WRD - TLO F,(QF) - JRST LIS2 - -ACCF: MOVE R,T ;COMMA PROCESSOR - XCT ACCCF ;MOVEI T,.. - TLOE F,(COMF) ;COMMA TYPED BEFORE? - JRST ACCF1 ;YES - HRRM R,ACCCF ;NO, SAVE LEFT HALF OF A,,B - HLLZ T,R - LDB W1,[POINT 3,WRD,2] ;CHECK FOR IO INSTRUCTION - IDIVI W1,7 - LSH R,27(W1) - ADD T,R - ADDB T,WRD - JRST SPAC1 - -ACCF1: ADD T,WRD ; FOR ",," GET LEFT HALF TOGETHER - HRLZM T,WRD ; AND PUT IT IN LEFT HALF - JRST SPAC1 - -SPACE: TLNE F,(QF) -SPAC1: TLO F,(TIF) - TLZ F,(MF+PTF) - JRST LIS1 - -RPRN: TLNN F,(QF) ;) - MOVEI T,0 - MOVS T,T - SOSGE,PRNC - JRST ERR - POP P,FRASE1 - POP P,FRASE - POP P,WRD - POP P,F - TLNE F,(PTF) - TLNE F,(SF) - JRST RPRN1 - MOVEM T,SYL - TLO F,(QF+SF) - JRST L1RPR -RPRN1: ADDB T,WRD - TLO F,(QF) - JRST L1A - -SUBTTL REGISTER EXAMINATION LOGIC - -LINEF: PUSHJ P,DEPRA ;NEXT REGISTER - PUSHJ P,CRN ;DO CR ONLY - AOS T,LLOC ;BUMP LOC -LI1: ;PUSHJ P,LINCHK ;TRUNCATE ADRS (UNLESS INSIDE DDT) - HRRZM T,LLOC - HRRZM T,LLOCO - PUSHJ P,PAD - MOVEI T,"/" - CAME SCH,SCHM ;TEMP MODE SAME AS PERM? - JRST [CAIN SCH,FTOC ;NO, CONSTANT? - MOVEI T,"[" ;YES - CAIN SCH,PIN ;INSTRUCTION? - MOVEI T,"]" ;YES - JRST .+1] ;USE APPROPRIATE INDICATION - TLNE F,(STF) - MOVEI T,"!" - PUSHJ P,TOUT -LI2: TLZ F,(ROF) - PUSHJ P,LCT - MOVE R,LLOCO - PUSHJ P,FETCH - IFE FTDEC20,< - JRST ERR> - IFN FTDEC20,< - JRST [TLO F,(ROF) ;SAY REGISTER OPENED - MOVEI W1,"?" ;BUT ONLY TYPE "?" - JRST TEXT]> - TLO F,(ROF) - TLNE F,(STF) - JRST DD2 - JRST CONSYM ;RETURN IS A POPJ - -;CRLF AND OPEN NEXT REGISTER SUBROUTINE - -LI0: PUSHJ P,CRF - AOS T,LLOC - JRST LI1 - - REPEAT 0,< -LINCHK: CAML T,[DDTINT SAVPI] ;TRUNCATE ADDRESSES - CAMLE T,[DDTINT BNADR+2] - HRRZS T - MOVEM T,LLOC - MOVEM T,LLOCO - POPJ P, - > -VARRW: PUSHJ P,DEPRA ;^ - PUSHJ P,CRF - SOS T,LLOC - JRST LI1 - -CARR: PUSHJ P,DEPRA ;CLOSE REGISTER - PUSHJ P,TIN ;GLOBBLE UP FOLLOWING LINEFEED -CARR1: SETZM CHINP ;REINIT INPUT LINE - SETZM CHINC - HRRZ T,LLOC ;GET CURRENT LOC - TLNE F,(CF) ; $ PRECEEDED? - JRST LI1 ;YES, GO OPEN REGISTER - JRST DD1.5 - -SLASH: TLNN F,(CCF) ; $$/ ? - JRST SLAS2 ;NO - SETCMM EFAFLG ;YES, COMPLEMENT EFF ADR FLAG - JRST RET ;OPEN NO REGISTER - -OCON: TLNE F,(QF) ;QUANT TYPED? - MOVEI SCH,FTOC ;YES, CHANGE TEMP MODE TO CONSTANT - TRO F,LF1+CF1 ;OPEN AS CONSTANT - JRST SLAS2 ;TYPE - -OSYM: TLNE F,(QF) ;QUANT TYPED? - MOVEI SCH,PIN ;YES, CHANGE TEMP MODE TO INSTRUCTION - TRZ F,CF1 ;OPEN SYMBOLICALLY - TROA F,LF1 -SUPTYO: TLOA F,(STF) ;SUPPRESS TYPEOUT -SLAS2: TLZ F,(STF) ;TYPE OUT NOT SUPPRESSED -SLASH2: PUSHJ P,CEFF ;COMPUTE EFF ADR - TLNN F,(QF) ;WAS ANY QUANTITY TYPED? - JRST SLAS1 ;NO. DO NOT CHANGE MAIN SEQUENCE - PUSHJ P,PSHLLC ;PUSH OLD SEQUENCE - HRRZM T,LLOC ;SETUP NEW SEQUENCE -SLAS1: HRRZM T,LLOCO - JRST LI2 - -ICON: PUSHJ P,DEPRS ;BACKSLASH - PUSHJ P,CEFF ;COMPUTE EFF ADR - JRST SLAS1 - -TAB: PUSHJ P,DEPRS ;OPEN REGISTER OF Q - PUSHJ P,CEFF ;COMPUTE EFF ADR - MOVEI T,-1(T) - PUSHJ P,PSHLLC ;PUSH OLD SEQUENCE - MOVEM T,LLOC ;SETUP NEW SEQUENCE - HRROI T,700000 ;3 RUBOUTS - PUSHJ P,TEXTT - JRST LI0 - -;ROUTINE TO COMPUTE EFFECTIVE ADDRESS OF QUANTITY IN T. COMPUTATION -;IS PERFORMED USING USER PROGRAM VARIABLES. -; T/ QUANTITY -; PUSHJ P,CEFF -; RETURN +1 ALWAYS, T/ EFFECTIVE ADDRESS IN RH -;PRINTS "??" AND BOMBS OUT IF INDIRECT WORD NOT ACCESSIBLE - -CEFF: SKIPE EFAFLG ;PERMANENT MODE CHANGED? - TLC F,(CF) ;YES, COMPLEMENT EFFECT OF ESC - TLZN F,(CF) ;ESC BEFORE COMMAND? - POPJ P, ;NO, USE RH ONLY - TLNN T,17 ;INDEXING? - JRST CEFF1 ;NO - PUSH P,T ;YES, SAVE QUANTITY - LDB R,[POINT 4,T,17] ;GET INDEX ADDRESS - PUSHJ P,FETCH ;FETCH CONTENTS OF XR - JFCL ;ASSUME AC'S ALWAYS ACCESSABLE - POP P,R ;RECOVER ORIGINAL QUANTITY - ADD T,R ;T=Y+C(XR) - HLL T,R ;KEEP ORIGINAL LH -CEFF1: TLNN T,(Z @0) ;HAVE INDIRECTION? - POPJ P, ;NO, DONE - HRRZ R,T ;YES, GET INDIRECT ADDRESS - PUSHJ P,FETCH ;FETCH CONTENTS - JRST CEFF2 ;FETCH FAILED - JRST CEFF ;REPEAT USING INDIRECT WORD - -CEFF2: MOVSI W1,(ASCII /??/) ;INDIRECT FETCH FAILED - PUSHJ P,TEXT ;PRINT LOSS INDICATION - JRST DD1 ;LEAVE REGISTER NOT OPEN, DO CRLF, ETC. - -;ROUTINES TO HANDLE RING BUFFER OF LOCATIONS - -;'PUSH' CURRENT LOCATION - -PSHLLC: AOS TT,SAVLP ;BUMP POINTER - CAIL TT,NSAVTB ;AT END OF TABLE? - SETZB TT,SAVLP ;YES, WRAPAROUND - PUSH P,LLOC ;GET CURRENT LOCATION - POP P,SAVLTB(TT) ;ADD IT TO TABLE - POPJ P, - -;'POP' CURRENT LOCATION - -POPLLC: MOVE TT,SAVLP ;GET POINTER - MOVE TT,SAVLTB(TT) ;REMOVE FROM TABLE - MOVEM TT,LLOC ;SET AS CURRENT LOC - SOS TT,SAVLP ;DECREMENT PTR - JUMPGE TT,POPLC1 ;AT TOP OF TABLE? - MOVEI TT,NSAVTB-1 ;YES, WRAPAROUND - MOVEM TT,SAVLP -POPLC1: POPJ P, - -DEPRA: TLNE F,(CF) ;$ PRECEEDED? - PUSHJ P,POPLLC ;YES, POP OLD SEQUENCE - TLNE F,(ROF) ;IF REGISTER IS BEING CHANGED - TLNN F,(QF) ;REMOVE ALL PREVIOUS UNDEFINED - JRST DEPRS ;SYMBOL REFERENCES TO IT - MOVE R,@USYMP ;GET POINTER TO ALL OLD UNDEF ITEMS - MOVEM W1,@USYMP ;INCLUDE THE NEW ITEMS IN UNDEF LIST - IFN FTFILE,< - SKIPN CRASHS ;SEE IF /M - JRST DEPRS ;YES--NO UNDEF FIXUPS - > - MOVEM T,LWT ;SAVE T IN LWT, DEPRS DOES IT ANYWAY -DEPRA2: JUMPGE R,DEPRA5 ;IF JOBUSY SYM TABLE EDITED, STOP - PUSH P,R - MOVE W,1(R) ;GET FLAGS AND POINTER - JUMPG W,DPRS3 ;1B0=0 IMPLIES CHAINING -DEPRA4: POP P,R - HRRZ T,1(R) ;GET ADDRESS OF FIXUP - SKIPE T ;DELETE ENTRY IF ADR=0, OR - CAMN T,LLOCO ; IF ADR IS BEING CHANGED - JRST [PUSHJ P,REMUN ;REMOVE ENTRY FROM JOBUSY - JRST DEPRA5 ;FAILED, NO UNDEF FIXUPS - JRST .+1] - ADD R,[2,,2] ;CONTINUE SEARCHING TABLE - JRST DEPRA2 - -DEPRA5: MOVE T,LWT ;RESTORE QUANTITY - JRST DEPRS ;DO THE STORE - -DPRS3: HRROI S,1(R) ;GET 1ST CHAIN ADR FROM JOBUSY TABLE - ; AND SET FLAG TO USE DEPSYM FIRST TIME -DPRS4: HRRZ R,W ;GET NEXT ADR (AFTER ADR IN S) - JUMPE R,DEPRA4 ;STOP ON 0 ADR - PUSHJ P,FETCH ;GET CONTENTS OF ADR IN R - JRST DEPRA4 ;****UNDEFINED SYMBOL TABLE OR FIXUP - ; CHAIN POINTS TO ILL. MEM. TRY - ; TO CONTINUE. - EXCH T,W - EXCH S,R - CAME S,LLOCO ;IS THIS WORD BEING CHANGED? - JRST DPRS4 ;NO, CONTINUE SEARCHING LIST - HRR T,W ;PATCH CHAIN ADR AROUND ITEM - TLNN R,-1 ;SEE IF NEED TO USE DEPSYM - TDZA TT1,TT1 ;NO--USE DEPMEM - MOVEI TT1,DEPSYM-DEPMEM ;YES. NOTE THAT R CAME FROM S - ; WHICH HAS -1 IN LH FIRST TIME AROUND - ; LOOP AND 0 OTHER TIMES. - PUSHJ P,DEPMEM(TT1) ;CALL EITHER DEPMEM OR DEPSYM - HALT . - JRST DPRS4 ;CONTINUE DOWN CHAIN - -SUBTTL MODE CONTROL SWITCHES - -TEXO: MOVEI R,TEXTT-HLFW ;$T ASSUME 7 BIT ASCII - MOVE T,WRD2 - CAIN T,6 ;CHECK FOR $6T - MOVEI R,SIXBP-HLFW ;SET MODE SWITCH FOR SIXBIT - CAIN T,5 ;CHECK FOR $5T - MOVEI R,R50PNT-HLFW ;SET MODE SWITCH FOR RADIX 50 -HWRDS: ADDI R,HLFW-TFLOT ;H -SFLOT: ADDI R,TFLOT-PIN ;F -SYMBOL: ADDI R,PIN-FTOC ;S -CON: ADDI R,FTOC ;C - HRRZM R,SCH - JRST BASE1 - -RELA: TRZE F,Q2F ;CHANGE ADDRESS MODE TO RELATIVE - JRST BASECH - MOVEI R,PADSO-TOC -ABSA: ADDI R,TOC ;A - HRRZM R,AR - JRST BASE1S - -BASECH: MOVE T,WRD2 ;$NR CHANGE OUTPUT RADIX TO N, N .GT. 1 - CAIGE T,2 - JRST ERR - HRRZM T,ODF -BASE1: SKIPE S,OLDAR - MOVE AR,S -BASE1S: SETZM OLDAR -BASE1O: MOVS S,[XWD SCHM,SCH] - TLNN F,(CCF) - JRST LIS1 - BLT S,ODFM ;WITH $$, MAKE MODES PERMANENT - MOVE S,[SVBTS,,PSVBTS] - BLT S,PSVBTS+2 - JRST RET - -SEMIC: MOVEM T,LWT ;SEMICOLON TYPES IN CURRENT MODE - JRST @SCH - -EQUAL: TROA F,LF1+CF1 ;= -PSYM: TRZ F,CF1 ;@ - TRO F,LF1 - PUSHJ P,CONSYM - JRST RET - -;OPEN ANGBKT, CLOSE ANGBKT - -FIRARG: TLNE F,(CF+CCF) ;$ PRECEEDED? - JRST PTCH ;YES, PATCH COMMAND - MOVEM T,DEFV ;NO, SET FIRST ARG - TLO F,(FAF) - JRST ULIM1 - -ULIM: TLNE F,(CF+CCF) ;$ PRECEEDED? - JRST PTCHE ;YES, PATCH END COMMAND - TLO F,(SAF) ;NO, SET SECOND ARG - HRRZM T,ULIMIT -ULIM1: TLNN F,(QF) - JRST ERR - JRST LIS0 - -SUBTTL PATCH COMMAND -- PATCH BEGIN - -PTCH: TLNN F,(TIF+COMF+PTF+MF) ;EXPRESSION TYPED? - TLNN F,(ROF) ;NO REGISTER OPEN? - JRST ERR ;YES, ERROR - TLNE F,(QF) ;ANYTHING TYPED? - JRST [PUSHJ P,EVAL ;YES, LOOKUP SYMBOL - JRST ERR ;STRANGE TYPEIN, LOSE - JRST PTCH4] ;FOUND, USE VALUE AS PATCH LOC - MOVSI W,-NPSYM ;SETUP TO SCAN PATCH SYMBOLS -PTCH1: MOVE T,PCHSYM(W) ;GET A POSSIBLITY - MOVEM T,SYM ;SET IT UP FOR EVAL - PUSHJ P,EVAL ;TRY TO FIND VALUE - AOBJN W,PTCH1 ;NOT FOUND, TRY NEXT SYMBOL - JUMPGE W,[MOVEI R,.JBFF ;NONE OF THE SYMBOLS EXIST, USE .JBFF - HRRZ T,0(R) - JRST PTCH2] -PTCH4: MOVEI R,1(R) ;POINT TO VALUE WORD -PTCH2: CAIGE T,.JBDA ;HAVE REASONABLE PATCH ADDRESS? - JRST ERR ;NO - HRRZM T,PTLOC ;YES, SAVE IT - HRLM R,PTLOC ;SAVE WHERE IT CAME FROM - HRRZ R,LLOCO ;LOC OF OPEN REGISTER - HRRZM R,PTLLC ;SAVE IT - PUSHJ P,FETCH ;GET CONTENTS - JRST ERR ;FETCH FAILED - MOVEM T,PTWRD ;SAVE ORIGINAL WORD - PUSHJ P,DEPERR ;BE SURE IT CAN BE CHANGED, ERR IF NOT - TLNE F,(CCF) ;SAVE BEFORE/AFTER FLAG - HRROS PTLLC ;0 MEANS BEFORE, 1 (NEGATIVE) MEANS AFTER - SKIPL PTLLC ;PATCH AFTER? - JRST PTCH3 ;NO - HRRZ R,PTLOC ;YES, MOVE INSTRUCTION TO PTLOC NOW - MOVE T,PTWRD - PUSHJ P,DEPERR ;STORE IT -PTCH3: PUSHJ P,CRF ;OPEN REG AT PTLOC AND PRINT CONTENTS - HRRZ T,PTLOC - PUSHJ P,LI1 - SKIPGE PTLLC ;PATCH AFTER? - PUSHJ P,LI0 ;YES, OPEN SECOND LOC IN PATCH AREA - POPJ P, ;DONE FOR NOW - -;TABLE OF SYMBOLS IDENTIFYING PATCH AREAS - -PCHSYM: RADIX50 0,PATCH ;ANOTHER LIKELY POSSIBILITY - RADIX50 0,PAT.. ;USUAL LINK10 SYMBOL - RADIX50 0,PAT ;TOPS-10 SYMBOL -NPSYM==.-PCHSYM - -SUBTTL PATCH COMMAND -- PATCH END - -PTCHE: SKIPN PTLOC ;PATCH IN PROGRESS? - JRST ERR ;NO, ERROR - TLZ F,(CF+CCF) ;FLUSH FLAGS BEFORE DEPRA - PUSHJ P,DEPRA ;STORE LAST WORD IF ANY - SKIPGE PTLLC ;PATCH BEFORE? - JRST PTCHE1 ;NO - HRRZ R,LLOC ;YES, MOVE ORIG INSTRUCTION NOW - AOS R ;MOVE IT TO NEXT LOC - MOVE T,PTWRD - PUSHJ P,DEPERR ;STORE IT - PUSHJ P,LI0 ;OPEN FOR USER TO SEE -PTCHE1: HRRZ R,LLOC ;STORE JUMPA 1,ORIG+1 - AOS R ; IN NEXT LOC - HRRZ T,PTLLC - ADD T,[JUMPA 1,1] - PUSHJ P,DEPERR - PUSHJ P,LI0 ;OPEN FOR USER TO SEE - HRRZ R,LLOC ;STORE JUMPA 2,ORIG+2 - AOS R ; IN NEXT LOC - HRRZ T,PTLLC - ADD T,[JUMPA 2,2] - PUSHJ P,DEPERR - PUSHJ P,LI0 ;OPEN FOR USER TO SEE - AOS T,LLOC ;GET NEXT FREE PATCH LOC - HLRZ R,PTLOC ;UPDATE WORD THAT PATLOC CAME FROM - HRRM T,0(R) - HRRZ R,PTLLC ;GET ORIG ADDRESS - HRRZ T,PTLOC ;PUT JUMPA PATCH INTO IT - HRLI T,(JUMPA 0,) - PUSHJ P,DEPERR - PUSHJ P,CRF - HRRZ T,R ;NOW OPEN ORIG REGISTER FOR USER TO SEE - PUSHJ P,LI1 - SETZM PTLOC ;SAY NO PATCH IN PROGRESS - POPJ P, ;DONE -SETPAG==ERR -XLIST - -REPEAT 0,< -SUBTTL PAGE TABLE CONTROL ($U) - - IFE FTDEC20,< - IFE FTEXEC!FTFILE,< SETPAG==ERR> - IFN FTEXEC!FTFILE,< - -;COMMAND TO MAKE LIFE EASIER ON THE KI10 AND KL10. -;FORMAT IS: -; $U -; -; 1. $U - RESTORE NORMAL MODE -; 2. K$U - SET USER PAGING WITH UPT AT PAGE K -; 3. K$NU - SET EXEC PAGING WITH UPT AT K AND EPT AT N -; -SETPAG: TLZE F,(QF) ;USER SPECIFIED - JRST SETPG1 ;YES--CHARGE AHEAD - TRZE F,Q2F ;EXEC TYPED - JRST ERR ;YES--ERROR - SETZM EPTUPT ;JUST $U CLEAR FLAG WORD - JRST RET ;DONE -SETPG1: TRO T,400000 ;DO NOT STORE ZERO - PUSH P,EPTUPT ;SAVE OLD VALUE - PUSH P,T ;SAVE NEW VALUE - SETZM EPTUPT ;RESTORE PHYSICAL ADDRESSING - MOVE R,T ;COPY ADDRESS - LSH R,9 ;CONVERT TO WORD ADDR - TLNN R,777377 ;TEST FOR JUNK - PUSHJ P,FETCH ;TEST ADDRESS - JRST SETPGE ;ERROR - TRZN F,Q2F ;EXEC GIVEN - JRST SETPGX ;NO--DONE - MOVE R,WRD2 ;GET SECOND WORD - TRO R,400000 ;MAKE SURE NON-ZERO - HRLM R,(P) ;STORE IN ANSWER - LSH R,9 ;TEST FOR VALID - TLNN R,777377 ; POINTER - PUSHJ P,FETCH ; .. - JRST SETPGE ;BAD ADDRESS -SETPGX: POP P,EPTUPT ;SET ANSWER - POP P,T ;RESTORE T - JRST RET ;DONE - -SETPGE: POP P,T ;UNDO THIS COMMAND - POP P,EPTUPT ; .. - JRST ERR ;SET ERROR - > ;END EDDT AND FILDDT SWITCH - > ;END IFE FTDEC20 - > -LIST - -SUBTTL GO AND EXECUTE LOGIC - - IFE FTFILE,< -CNTRLZ: IFN FTEXEC,< - SKPUSR ;SEE IF USER MODE - JRST ERR> ;NO--ERROR -; IFE FTDEC20,< - MOVE T,[CALLI 1,12] ;> ;GET MONRET -; IFN FTDEC20,< - MOVE T,[HALTF] ;> ;HALT THIS FORK - JRST XEC0 ;GO EXECUTE IT - -GO: HRLI T,(JRST) ;G - TLOE F,(QF) ;DID USER TYPE AN ARG TO $G? - JRST XEC ;YES, GO DO IT -XLIST - REPEAT 0,< - IFN FTDEC20,< - IFN FTEXEC,< - SKPUSR - JRST ERR> ;NO SUCH COMMAND IN EDDT - MOVEI T1,.FHSLF - GEVEC ;GET ENTRY VECTOR - HLRZ TT,T2 ;GET ITS LENGTH - CAIN TT,(JRST) ;TOPS10 FORMAT? - JRST GO1 ;YES - CAIL TT,1000 ;REASONABLE? - JRST ERR ;NO - HRR T,T2 ;SETUP FIRST LOCATION - TRNN F,Q2F ;SECOND QUANT? (I.E. $1G) - SETZM WRD2 ;NO, ASSUME ZERO - CAMG TT,WRD2 ;WITHIN RANGE? - JRST ERR ;NO - ADD T,WRD2 ;ADD OFFSET WITHIN VECTOR - JRST XEC ;NOW HAVE JRST ADR IN T, XCT IT -GO1:> ;END IFN FTDEC20 - HRR T,.JBSA ;NO, GET ADDR FROM .JBSA - IFN FTEXEC,< - SKPEXC ;EXEC MODE HAS NO .JBSA, SO ERROR - > -> -LIST - HRR T,.JBSA - TRNN T,-1 ;WAS C(.JBSA) NONZERO? - JRST ERR ;NO, SO ERROR - -XEC: TLNN F,(QF) ;SKIP IF QUANTITY TYPED - TDZA T,T ;MAKE SURE COUNT IS ZERO - TLNN T,777000 ;SKIP IF VALID INSTRUCTION - JRST $X ;GOTO SINGLE STEP EXECUTE ROUTINE -XEC0: MOVEM T,TEM - PUSHJ P,CRF - PUSHJ P,INSRTB - SETZM SKPCT ;INIT SKIP COUNT - JSP T,RESTORE - XCT TEM -XEC1: AOS SKPCT ;NOTE NOSKIP, SKIP, DOUBLE SKIP - AOS SKPCT - JSR SAVE ;SAVE CONTEXT - PUSHJ P,REMOVB ;REMOVE BRKPTS - MOVEI TT,3 - SUB TT,SKPCT ;COMPUTE AMOUNT OF PC INCREMENT - IFE FTDEC20,< - CAIG TT,1 ;INSTRUCTION SKIPPED? - JRST DD1 ;NO - MOVE W1,[ASCII ""] ;MAKE SURE IT IS CLEAR - PUSHJ P,TEXT2 ; THAT THIS WAS A SKIP - PUSHJ P,CRF ;TYPE 2 CR-LFEEDS - JRST DD1 - > - IFN FTDEC20,< - MOVEI W1,"$" - PUSHJ P,TEXT ;PRINT $ FOR EACH INCREMENT - SOJG TT,.-2 - JRST DD1> - > - - IFN FTFILE,< -BCOM==> - > - -SUBTTL SINGLE STEP EXECUTE LOGIC - - IFE FTFILE,< - -;$X IS A FEATURE THAT OPERATES AS FOLLOWS: -; $X OR N$X OR $$X OR N$$X, WHERE N .LT. 2^27, WILL DISPATCH TO -; THIS CODE. THE FOLLOWING ACTIONS WILL BE PERFORMED: -; -; $X EXECUTE A SINGLE INSTRUCTION, THEN INCREMENT THE PC. THE -; OPERANDS TO THE INSTRUCTION WILL BE PRINTED OUT AS THEY -; EXIST **AFTER** EXECUTION OF THE INSTRUCTION. AN EXTRA -; LINE FEED WILL BE PRINTED IF THE INSTRUCTION SKIPPED OR -; JUMPED. THE NEXT INSTRUCTION WILL THEN BE PRINTED. -; $P WILL ALWAYS DO THE RIGHT THING AFTER ANY NUMBER OF $X'S. -; -; N$X REPEAT THE $X CYCLE N TIMES. -; -; N$$X SAME AS N$X EXCEPT THAT ALL PRINTOUT IS SUPPRESSED FOR -; ALL BUT THE LAST $X CYCLE. -; -; $$X PERFORM A NON-PRINTING $X CYCLE UNTIL THE PC REACHES EITHER -; .+1 OR .+2; I.E. UNTIL ONE OF THE NEXT 2 INSTRUCTIONS IS -; EXECUTED. THIS IS USEFUL FOR TREATING A SUBROUTINE CALL -; AS A SINGLE INSTRUCTION FOR THE PURPOSES OF $X. - - -;FLAGS USED IN $X LOGIC ONLY - - FAC== 1 ;SIGNALS AC TO BE PRINTED - DFAC== 2 ;SIGNALS INST THAT USES 2 AC'S - FLG== 4 ;INST MODIFIES FLAGS (JRST,JFCL) - IMM== 10 ;SIGNALS IMMEDIATE MODE INST - EA== 20 ;SIGNALS MEMORY REFERENCE INST - DEA== 40 ;SIGNALS INST THAT REFERENCES 2 MEM LOCS - FLA== 100 ;SIGNALS FLOATING AC OPERAND - FLE== 200 ;SIGNALS FLOATING MEM OPERAND - -;COME HERE FROM $X COMMAND, WITH T SET TO ZERO IF NO QUANTITY WAS -; TYPED. - -$X: MOVEM T,XTEM ;STORE REPETITION COUNT - JUMPG T,$X00 ;JUMP IF POSITIVE COUNT - HRRZ T,PROC0 ;ZERO, FETCH CURRENT PC - MOVEM T,LOCSAV ;AND REMEMBER IT - SETOM XTEM ;SET REPETITION COUNT NEGATIVE - TLNN F,(CCF) ;$$X WITH NO ARG? - MOVNS XTEM ;NO, ONLY $X. TREAT AS 1$X -$X00: PUSHJ P,CRF ;OUTPUT CRLF TO START - -;HERE ON REPEATED $X CYCLES - -$X01: SOSN XTEM ;DECREMENT AND TEST COUNTER - TLZ F,(CCF) ;CLEAR $$ FLAG TO END REPETITIONS - TLZ F,(QF!CF!STF) ;TURN OFF QUANT, $, ! FLAGS - MOVEM F,FLAGS ;SAVE REGULAR DDT FLAGS - HRRZI T,100 ;SETUP MAX XCT DEPTH - HRRZM T,XCTS - HRRZ R,PROC0 ;FETCH ADR OF CURRENT INST - CAIN R,XEC1 ;JUST HIT BREAKPOINT OR DID $X LAST? - JRST ERR ;NO, JUST ENTERED DDT, SO ERROR - SKIPL XTEM ;INDEFINITE $$X BEING EXECUTED? - MOVEM R,LOCSAV ;NO, REMEMBER OLD PC FOR THIS INST -$X02: PUSHJ P,FETCH ;FETCH CURRENT INSTRUCTION - JRST ERR ;ERROR -$XO3: MOVEM T,I.NST ;STORE CURRENT INSTRUCTION - JSR SWAP ;SWAP TO USER CONTEXT - MOVEM T,SAFETY ;SAVE T - MOVEI T,@I.NST ;COMPUTE EFFECTIVE ADR OF INST - DPB T,[POINT 23,I.NST,35] ;STORE COMPUTED ADR IN CURRENT INST - HRRZM T,I.NSTEA ;REMEMBER IT AGAIN - MOVE T,SAFETY ;RESTORE T - JSR SWAP ;SWAP BACK TO DDT CONTEXT - LDB W1,[POINT 4,I.NST,12] ;EXTRACT AC FIELD - MOVEM W1,I.NSTAC ;STORE IT AWAY - MOVSI T,777000 ;MASK FOR OPCODE - AND T,I.NST ;FETCH OPCODE - HLRZ F,T ;SAVE IN RH FOR LATER - CAMLE T,$XTBL(T) ;IN RANGE OF CURRENT TABLE ENTRY? - AOJA T,.-1 ;NO, KEEP SEARCHING - JRST @$XTBL(T) ;YES, DISPATCH - - IFE FTEXEC,< - MONUI== JUSTI ;IF USER DDT, TREAT MONITOR UUOS - MONUE== JUSTE ; AS HARDWARE INSTRUCTIONS - MONUAI==SETI - MONUAE==SETEA - MONINI==ERR ;CANNOT TRACE INIT - > - -;OPCODE DISPATCH TABLE. -; LH OF EACH ENTRY CONTAINS LARGEST OPCODE COVERED BY THAT ENTRY, -; RH CONTAINS DISPATCH ADDRESS. - -$XTBL: SETZB SET ; 400-403 SETZX - ORCBB CHECKI ; 404-473 ALL LOGICAL EXCEPT SETX - SETOB SET ; 474-477 SETOX - HLRES CHEKIS ; 500-577 HALFWORD - TSON TESTS ; 600-677 TEST CLASS - 777000,,IOTS ; 700-777 I/O INSTRUCTIONS - 0 ,, ERR ; 000 ALWAYS ILLEGAL - 037000,,USRUUO ; 001-037 USER UUOS - CALL MONUAE ; 040 CALL - INIT MONINI ; 041 INIT - CALLI MONUAI ; 042-047 UNDEFINED AND CALLI - TTCALL MONUE ; 050-051 OPEN,TTCALL - 054000,,MONUAI ; 052-054 UNDEFINED - OUT MONUE ; 055-057 RENAME,IN,OUT - STATO MONUI ; 060-061 SETSTS,STATO - GETSTS MONUE ; 062 GETSTS - OUTBUF MONUI ; 063-065 STATZ,INBUF,OUTBUF - OUTPUT MONUE ; 066-067 INPUT,OUTPUT - USETO MONUI ; 070-075 CLOSE,RELEAS,MTAPE,UGETF,USETI,USETO - ENTER MONUE ; 076-077 LOOKUP,ENTER - 103000,,SETI ; 100-103 UNDEFINED - 104000,,DOIT ; 104 JSYS - 107000,,SETI ; 105-107 UNDEFINED - DFDV DFLOT ; 110-113 DFAD,DFSB,DFMP,DFDV *** KI10 - 117000,,SETI ; 114-117 UNDEFINED - DMOVN DMOV ; 120-121 DMOVE,DMOVN *** KI10 - FIX FXAFLE ; 122 FIX *** KI10 - 123000,,SETI ; 123 UNDEFINED - DMOVNM DMOV ; 124-125 DMOVEM,DMOVNM *** KI10 - FIXR FXAFLE ; 126 FIXR *** KI10 - FLTR FLAFXE ; 127 FLTR *** KI10 - UFA IUFA ; 130 UFA - DFN IDFN ; 131 DFN - FSC IFSC ; 132 FSC - IBP JUSTE ; 133 IBP - DPB SETEA ; 134-137 XLDB,XDPB - FDVRB FLOAT ; 140-177 FADXX,FSBXX,FMPXX,FDVXX - -;CONTINUATION OF OPCODE DISPATCH TABLE. - - MOVMS CHEKIS ; 200-217 MOVXX - IMULB CHECKI ; 220-223 IMULX - DIVB MULDIV ; 224-237 MULX,XDIVX - LSH SETI ; 240-242 ASH,ROT,LSH - JFFO IJFFO ; 243 JFFO - LSHC DBLI ; 244-246 ASHC,ROTC,LSHC - 247000,,SETI ; 247 UNDEFINED - EXCH SETEA ; 250 EXCH - BLT SETI ; 251 BLT - AOBJN IAOBJ ; 252-253 AOBJP,AOBJN - JRST IJRST ; 254 JRST - JFCL IJFCL ; 255 JFCL - XCT IIXCT ; 256 XCT - MAP SETEA ; 257 MAP *** KI10 - PUSHJ IIPUSHJ ; 260 PUSHJ - POP SETEA ; 261-262 PUSH,POP - POPJ IPOPJ ; 263 POPJ - JSR I.JSR ; 264 JSR - JSP I.JSP ; 265 JSP - JSA I.JSA ; 266 JSA - JRA IAOBJ ; 267 JRA - SUBB CHECKI ; 270-277 ADDX,SUBX - CAIG SETI ; 300-307 CAIXX - CAMG SETEA ; 310-317 CAMXX - SOSG JMPSKP ; 320-377 JUMPXX,SKIPXX,AOJXX,AOSXX,SOJXX,SOSXX - -;MONITOR UUO HANDLER - - IFN FTEXEC,< -MONUAI: TLO F,FAC ;REMEMBER TO PRINT AC -MONUI: SKPEXC ;SKIP IF EXEC MODE - JRST JUSTI ;USER MODE, TREAT UUO AS SINGLE INST - JRST MONUE ;EXEC MODE, TRACE THE UUO - -MONUAE: TLO F,FAC ;REMEMBER TO PRINT AC -MONUE: SKPEXC ;SKIP IF EXEC MODE - JRST JUSTE ;USER MODE, TREAT UUO AS SINGLE INST - SKPKA ;CAN SIMULATE ON A KA - JRST ERR ;PUNT ON A KL OR KI - JRST USRUUO ;EXEC MODE, TRACE THE UUO - -MONINI: SKPEXC ;SKIP IF EXEC MODE - JRST ERR ;USER MODE, CAN'T FOLLOW AN INIT - ;EXEC MODE, TRACE NORMALLY - > -;USER UUO HANDLER - -USRUUO: MOVEI R,40 ;SETUP JOBUUO - EXCH F,FLAGS ;RESTORE REGULAR FLAGS - MOVE T,I.NST ;FETCH INST WITH EFF ADR COMPUTED - PUSHJ P,DEPMEM ;STORE USER UUO IN JOBUUO - JRST ERR ;ERROR - EXCH F,FLAGS ;RESTORE $X FLAGS - MOVE T,[XCT 41] ;PRETEND INSTRUCTION WAS AN XCT - JRST $XO3 - -;INTERPRET UFA - -IUFA: TLOA F,FLA+FLE+DFAC ;REMEMBER FLTG PT, USES 2 AC'S - -;INTERPRET DFN - -IDFN: TLO F,FLA!FLE ;DFN, REMEMBER AC AND E FLOAT - JRST SETEA - -;INTERPRET FLOATING POINT INSTRUCTIONS - -FLOAT: ANDI F,7000 ;FLOATING PT, GET MODE - CAIN F,1000 ;LONG MODE? - TLOA F,DFAC ;YES, PRINT 2 AC'S - CAIE F,5000 ;IMMEDIATE MODE? - TLOA F,FLA+FLE+FAC+EA ;NO, PRINT AC AND E BOTH FLOATING -FLOATI: TLO F,FLA+FLE+FAC+IMM ;YES, PRINT AC AND E IMMEDIATE FLTG - JRST DOIT - -;INTERPRET JRST - -IJRST: TLO F,IMM ;REMEMBER TO PRINT E - TRNE W1,2 ;IS INSTRUCTION JRSTF? - TLO F,FLG ;YES, REMEMBER TO PRINT FLAGS -IJRST0: PUSHJ P,FETCH ;FETCH INST OR INDIRECT WORD - JRST ERR ;ERROR - MOVE W1,T ;COPY INTO W1 - LDB R,[POINT 4,T,17] ;LOAD INDEX FIELD - JUMPE R,IJRST1 ;JUMP IF NO INDEXING TO PERFORM - MOVE T,AC0(R) ;FETCH CONTENTS OF INDEX REGISTER - TLZ T,(Z @(17)) ;CLEAR I AND X FIELDS IN INDEX REG - ADDI T,(W1) ;COMPUTE INDEXED ADDRESS - TLZ T,(Z @(17)) ;CLEAR ANY OVERFLOW -IJRST1: MOVEI R,(T) ;COPY RESULTING ADDRESS - TLNE W1,(@) ;INDIRECT? - JRST IJRST0 ;YES, FOLLOW NEXT LEVEL OF INDIRECTION - -;LH OF T NOW CONTAINS FLAGS THAT WILL BE RESTORED - - IFN FTEXEC!FTMON,< - IFN FTEXEC,< ;DEC20 MONITOR DDT DOESN'T HAVE SKPEXC - SKPEXC ;NOW IN EXEC MODE? - JRST IJRST3 ;NO, USER MODE - > - MOVE W1,I.NSTAC ;YES, FETCH AC FIELD OF JRST INST - TRNE W1,1 ;JUMP TO USER MODE? - JRST JRSPRC ;YES, CAN'T TRACE. GO DO $P - TRNE W1,2 ;JRSTF? - TLNN T,(1B5) ;YES, GOING TO ENTER USER MODE? - JRST IJRST3 ;NO TO EITHER, HANDLE NORMALLY -JRSPRC: EXCH F,FLAGS ; $X OPERATION IMPOSSIBLE. RESTORE FLAGS - TLZ F,(QF+CCF) ;CLEAR QUANT AND $$ FLAGS - JRST PROCD1 ;AND EXECUTE $P TO GO INTO USER MODE - > - -IJRST3: HRRI T,NOSKIP ;MODIFY THE JRST EFFECTIVE ADR - MOVEM T,BCOM ;STORE NEW FLAGS,,NOSKIP - MOVE T,I.NST ;FETCH INST AGAIN - HRRM T,PROC0 ;STORE EFF ADR AS NEW PC - HRRI T,BCOM ;TURN INTO JRST @BCOM - TLO T,(@) - MOVEM T,I.NST ;AND STORE - JRST DOIT ;DO IT - -;INTERPRET XCT - -IIXCT: - IFN FTEXEC!FTMON,< - DPB W1,[POINT 4,I.XCT,12]> ; USE IN XCT PAGED - MOVE F,FLAGS ;GET BACK NORMAL DDT FLAGS - SOSG XCTS ;CHECK XCT COUNTER - JRST ERR ;ERROR - DEPTH EXCEEDED - TLNE F,(CCF) ;$$X? - JRST IIXCT1 ;YES, DON'T PRINT ANYTHING - HRRZ T,I.NSTEA ;GET EFF ADR OF XCT - PUSHJ P,PINST ;PRINT INST BEING XCT'ED - PUSHJ P,CRF ;OUTPUT CRLF AFTER INST -IIXCT1: HRRZ R,I.NSTEA ;GET EFF ADR OF XCT AGAIN - JRST $X02 ;PROCESS EXECUTED INST - -;INTERPRET PUSHJ - -IIPUSHJ:AOS T,PROC0 ;GET CURRENT PC +1 - HLL T,SAVPI ;PUT FLAGS IN LH - MOVEM T,I.NSTPC ;STORE AWAY TO BE STACKED - MOVSI T,(1B4) ;CLEAR BIS FLAG IN NEW PC WORD - ANDCAM T,SAVPI - SOS T,I.NST ;GET EFF ADR OF PUSHJ, -1 TO FOOL DOIT - HRRM T,PROC0 ;STORE NEW PC -1 - HRLZI T,(-) ;WANT TO TURN PUSHJ INTO A PUSH - DPB T,[POINT 5,I.NST,17] ;CLEAR I AND AC FIELD - JRST IPOPJ2 ;REST OF CODE COMMON WITH POPJ - -;INTERPRET POPJ - -IPOPJ: EXCH F,FLAGS ;POPJ, RESTORE NORMAL DDT FLAGS - HRRZ R,AC0(W1) ;FETCH CONTENTS OF CORRECT USER AC - PUSHJ P,FETCH ;FETCH PCWORD IT POINTS TO - JRST ERR ;ERROR - EXCH F,FLAGS ;RESTORE $X FLAGS - HRRI T,-1(T) ;DECREMENT PC TO FOOL CODE AT DOIT - HRRM T,PROC0 ;STORE AS CURRENT PC - HRLZI T,(-) ;SETUP TO TURN POPJ INTO POP - -;COMMON CODE FOR PUSHJ, POPJ - -IPOPJ2: ADDM T,I.NST ;TURN PUSHJ INTO PUSH OR POPJ INTO POP - HRRZI T,I.NSTPC ;SETUP ADR OF PC WORD FOR PUSHJ - HRRM T,I.NST - TLOA F,FAC ;REMEMBER TO PRINT AC - -;INTERPRET FSC - -IFSC: TLO F,FAC+FLA+IMM ;FLOATING AC, FIXED IMMEDIATE E - JRST DOIT - -;INTERPRET JSA - -I.JSA: AOS T,PROC0 ;JSA, SETUP RETURN PC - HRL T,I.NSTEA ;PUT EFF ADR IN LH LIKE JSA DOES - EXCH T,AC0(W1) ;STORE IN USER AC, GET OLD CONTENTS - JRST I.JSR2 ;STORE OLD CONTENTS LIKE JSR, THEN JUMP - -;INTERPRET JSR - -I.JSR: AOS T,PROC0 ;JSR, GET CURRENT PC - HLL T,SAVPI ;SETUP LH OF PC WORD - TLO F,FAC ;REMEMBER NOT TO PRINT AC FIELD - MOVSI W1,(1B4) ;CLEAR BIS FLAG IN NEW PC WORD - ANDCAM W1,SAVPI -I.JSR2: TLO F,EA ;PRINT E NORMALLY - EXCH F,FLAGS ;RESTORE NORMAL DDT FLAGS - HRRZ R,I.NSTEA ;FETCH EFF ADR OF JSR OR JSA - PUSHJ P,DEPMEM ;STORE PC WORD - JRST ERR ;ERROR - EXCH F,FLAGS ;RESTORE $X FLAGS - HRRZ T,I.NSTEA ;GET EFF ADR AGAIN - AOJA T,I.JSR4 ;INC PAST STORED PC WORD - -;INTERPRET JSP - -I.JSP: AOS T,PROC0 ;JSP, SETUP RETURN PC - HLL T,SAVPI ;SETUP LH OF PC WORD - MOVEM T,AC0(W1) ;STORE IN USER AC - MOVSI T,(1B4) ;CLEAR BIS FLAG IN NEW PC WORD - ANDCAM T,SAVPI - HRRZ T,I.NSTEA ;GET BACK EFF ADR -I.JSR4: HRRM T,PROC0 ;STORE NEW PC - TLC F,FAC ;REMEMBER TO PRINT AC - JRST TELL ;GO PERFORM PRINTOUT - - -;INTERPRET KI10 INSTRUCTIONS - -DFLOT: TLO F,FLA+FLE ;REMEMBER THAT AC AND E ARE FLOATING -DMOV: TLO F,DFAC+DEA ;REMEMBER AC AND E BOTH DOUBLE - JRST SETEA - -FXAFLE: TLOA F,FLE ;REMEMBER THAT E FLOATS (FIX,FIXR) -FLAFXE: TLO F,FLA ;REMEMBER THAT AC FLAOATS (FLTR) - JRST SETEA - -;INTERPRET JFFO - -IJFFO: TLO F,DFAC ;REMEMBER JFFO USES 2 AC'S - -;INTERPRET JUMP AND SKIP INSTRUCTIONS - -JMPSKP: TRNE F,10000 ;JUMP/SKIP, WHICH IS IT? - JRST SKP ;SKIP CLASS - -;INTERPRET AOBJN AND AOBJP - -IAOBJ: TLOA F,FAC+IMM ;HANDLE AS IMMEDIATE MODE INST WITH AC - -;INTERPRET JFCL - -IJFCL: TLO F,FLG ;REMEMBER TO PRINT FLAGS - MOVEI T,JMP ;JUMP CLASS OR AOBJ, COME BACK TO $X - HRRM T,I.NST ;STORE MODIFIED INST - JRST DOIT ;GO EXECUTE CONDITIONAL INST - -;HERE AFTER EXECUTING CONDITIONAL JUMP INSTRUCTION THAT ACTUALLY -; DOES JUMP - -JMP: EXCH T,I.NSTEA ;SAVE T, GET EFF ADR OF JUMP - HRRM T,PROC0 ;STORE EFF ADR AS NEW PC - EXCH T,I.NSTEA - JRST NOSKIP ;NOW DO PRINTOUT - -;HERE FOR ALL SKIP INSTRUCTIONS - -SKP: JUMPN W1,SETEA ;SKIP CLASS - AC FIELD ZERO? -JUSTE: TLOA F,EA ;YES, JUST PRINT E - -;INTERPRET SHIFT COMBINED INSTRUCTIONS - -DBLI: TLO F,FAC+DFAC+IMM ;REMEMBER 2 AC'S USED, IMMEDIATE - JRST DOIT ;EXECUTE NORMALLY - -;INTERPRET TEST CLASS INSTRUCTIONS - -TESTS: TRNN F,10000 ;SKIP ON TD OR TS BUT NOT ON TR OR TL - TLOA F,FAC+IMM ;IMMEDIATE MODE - TLO F,FAC+EA ;NORMAL MODE - JRST DOIT - -;I/O INSTRUCTIONS - -IOTS: TRNE W1,4 ;SKIP IF BLKI,DATAI,BLKO,DATAO - CAIN W1,5 ;SKIP IF NOT CONI - TLOA F,EA ;MEM REF INSTRUCTION -JUSTI: TLO F,IMM ;IMMEDIATE INST - JRST DOIT - -;ALL PATHS CONVERGE HERE - -CHEKIS: TRC F,3000 ;HERE TO TEST FOR IMMEDIATE OR SELF MODE - TRCE F,3000 ;SKIP IF SELF MODE - JRST CHECKI ;NO, CHECK IMMEDIATE - JRST SKP ;YES, GO TEST FOR NONZERO AC FIELD -SET: ANDI F,3000 ;HERE FOR SETZX,SETOX - CAIE F,2000 ;SETZM,SETOM? - TLO F,FAC ;NO, AC IS ALWAYS AFFECTED - TRNE F,2000 ;SETZM,SETZB,SETOM,SETOB? - TLO F,EA ;YES, MEM IS ALWAYS AFFECTED - JRST DOIT - -;FIXED POINT MULTIPLY AND DIVIDE (NOT INCLUDING IMULX) - -MULDIV: ANDI F,3000 ;MASK MODE BITS - CAIE F,2000 ;TO MEMORY ONLY? - TLO F,DFAC ;NO, INST USES 2 AC'S -CHECKI: TRNE F,1000 ;TEST FOR IMMEDIATE MODE INST - TRNE F,2000 -SETEA: TLOA F,FAC+EA ;MEM REF INSTRUCTION -SETI: TLO F,FAC+IMM ;IMMEDIATE MODE INSTRUCTION -DOIT: EXCH F,FLAGS ;RESTORE NORMAL DDT FLAGS - PUSHJ P,TTYLEV ;RESTORE STATUS OF CTY (EXEC MODE) - JSR SWAP ;SWAP TO USER CONTEXT - XCT I.XCT ;EXECUTE THE INSTRUCTION (IF IN EXEC MODE - ; ON A KI10 THIS MAY BE EXECUTIVE XCT) - JRST IXS1 ;NO SKIP, INCREMENT PC ONCE - JRST IXS2 ;SKIP, INCREMENT PC TWICE - AOS PROC0 ;DOUBLE SKIP, INCREMENT PC THRICE -IXS2: AOS PROC0 -IXS1: AOS PROC0 - -;HERE AFTER SIMULATING OR EXECUTING INSTRUCTION. -; PERFORM REQUIRED PRINTOUT. - -NOSKIP: JSR SWAP ;RESTORE DDT CONTEXT - PUSHJ P,TTYRET ;RESTORE DDT TTY MODES - JRST .+2 -TELL: EXCH F,FLAGS ;GET DDT'S FLAGS - IFN FTEXEC!FTMON,< - MOVEI T,0 ;CLEAR THE AC FIELD OF I.XCT - DPB T,[POINT 4,I.XCT,12] ;SO NEXT INSTRUCTION HAPPENS OK - > - TLNE F,(CCF) ;IF $$X, DON'T PRINT ANYTHING - JRST NXTIT - EXCH F,FLAGS ;RESTORE $X'S FLAGS - PUSH P,SCH ;SAVE CURRENT OUTPUT MODE - TLNE F,FLA ;FLOATING AC? - MOVEI SCH,TFLOT ;YES, SETUP TO OUTPUT IN FLOATING PT - TLNE F,FAC ;AC TO BE PRINTED? - PUSHJ P,FAC0 ;YES, DO IT - TLNE F,DFAC ;INST USE 2 AC'S? - PUSHJ P,DBL0 ;YES, PRINT LOW-ORDER AC - TLNE F,FLG ;INSTRUCTION ACCESS THE FLAGS? - PUSHJ P,FLG0 ;YES, PRINT FLAGS - MOVE SCH,(P) ;RESTORE OLD MODE - TLNE F,FLE ;FLOATING MEMORY OPERAND? - MOVEI SCH,TFLOT ;YES, SETUP FLTG OUTPUT - TLNE F,IMM ;IMMEDIATE MODE? - PUSHJ P,IMM0 ;YES, JUST PRINT E - TLNE F,EA ;MEM REF INST? - PUSHJ P,EA0 ;YES, PRINT C(E) - TLNE F,DEA ;DOUBLE-WORD MEM OPERAND? - PUSHJ P,DEA0 ;YES, OUTPUT 2ND WORD - POP P,SCH ;RESTORE CURRENT OUTPUT MODE - EXCH F,FLAGS ;RESTORE DDT FLAGS - PUSHJ P,CRF ;OUTPUT CRLF - -;NOW TEST WHETHER TO CONTINUE, AND PRINT NEXT INST IF REQUIRED. - -NXTIT: HRRZ T,PROC0 ;FETCH NEW PC - MOVEI W1,1(T) ;COMPUTE PC+1 - HRRZM W1,BCOM ;STORE FOR $P - HRRZ W1,LOCSAV ;FETCH OLD PC - SKIPL XTEM ;INDEFINITE $$X IN PROGRESS? - JRST NXT0 ;NO - CAIE T,1(W1) ;YES, ARE WE NOW AT OLD PC +1? - CAIN T,2(W1) ; OR +2? - JRST $XQUIT ;YES, STOP ITERATION NOW -NXT0: PUSHJ P,LISTEN ;NO, HAS USER TYPED ANYTHING? - JRST NXT1 ;NO, CONTINUE -$XQUIT: SETZM XTEM ;YES, STOP ITERATION BY ZEROING COUNTER - TLZ F,(CCF) ; AND CLEARING CONTROL FLAG -NXT1: TLNE F,(CCF) ;$$ STILL IN EFFECT? - JRST NXT2 ;YES, DON'T PRINT ANYTHING - HRRZ T,PROC0 ;NO, GET CURRENT PC AGAIN - CAIN T,1(W1) ;DOES IT EQUAL OLD PC +1? - JRST NXT1A ;YES--JUST CONTINUE - CAIN T,2(W1) ;SKIP OR JUMP - SKIPA W1,[ASCII ""] ;SKIP - MOVE W1,[ASCII ""] ;JUMP - PUSHJ P,TEXT2 ;SAY SKIP OR JUMP - PUSHJ P,CRF ;ADD CRLF -NXT1A: HRRZ T,PROC0 ;FETCH CURRENT PC AGAIN - PUSHJ P,PINST ;PRINT INSTRUCTION ABOUT TO BE EXECUTED - SKIPE XTEM ;ARE WE STILL LOOPING? - PUSHJ P,CRF ;YES, PRINT CRLF AFTER INST -NXT2: SKIPE XTEM ;SKIP IF REPEAT COUNTER IS ZERO - JRST $X01 ;NONZERO, REPEAT $X CYCLE AGAIN - JRST TTYCLR ;ZERO, FLUSH ANY WAITING INPUT CHARACTERS - ; AND RETURN FROM $X INSTRUCTION - -;OUTPUT ROUTINES - -;ROUTINE TO PRINT SECOND ACCUMULATOR - -DBL0: AOS T,I.NSTAC ;INCREMENT AC NUMBER - TRZA T,777760 ;ENSURE 17 WRAPS AROUND TO 0 - -;ROUTINE TO PRINT CONTENTS OF ACCUMULATOR - -FAC0: MOVE T,I.NSTAC ;FETCH AC NUMBER - JRST EA2 - -;ROUTINE TO PRINT THE FLAGS - -FLG0: PUSHJ P,LCT ;PRINT TAB - HLRZ T,SAVPI ;GET LH OF PC WORD - JRST IMM1 ;PRINT FLAGS - -;ROUTINE TO PRINT JUST E FOR AN IMMEDIATE MODE INSTRUCTION - -IMM0: PUSHJ P,LCT ;PRINT TAB - HRRZ T,I.NSTEA ;FETCH E - TLNE F,FLE ;FLTG PT MEM OPERAND? - MOVS T,T ;YES, IMMEDIATE SWAPS HALVES -IMM1: EXCH F,FLAGS ;RESTORE DDT FLAGS - PUSHJ P,CONSYM ;OUTPUT CONTENTS OF T - JRST EA6 ;RESTORE $X FLAGS AND RETURN - -;ROUTINE TO PRINT 2ND MEMORY OPERAND - -DEA0: AOS I.NSTEA ;INC TO ADR OF 2ND OPERAND - -;ROUTINE TO PRINT MEMORY OPERAND - -EA0: MOVE T,I.NSTEA ;FETCH ADR OF MEM OPERAND -EA2: EXCH F,FLAGS ;HERE FROM DBL0,FAC0 - PUSH P,T ;SAVE ARG - PUSHJ P,LCT ;OUTPUT TAB - POP P,T ;RESTORE ADR OF LOC TO BE PRINTED - PUSHJ P,LI1 ;PRINT ADR/ CONTENTS -EA6: EXCH F,FLAGS ;RESTORE $X FLAGS - POPJ P, - -;ROUTINE TO PRINT INSTRUCTION ALWAYS IN SYMBOLIC DESPITE CURRENT MODE - -PINST: PUSH P,SCH ;SAVE CURRENT OUTPUT MODE - MOVEI SCH,PIN ;SET TO PRINT SYMBOLIC INST MODE - PUSHJ P,LI1 ;OUTPUT INST - POP P,SCH ;RESTORE CURRENT MODE - POPJ P, - -;ROUTINE TO SWAP BETWEEN DDT AND USER CONTEXTS. -; AC'S AND FLAGS ARE SWAPPED, BUT BREAKPOINTS AND OTHER STUFF -; ARE NOT TOUCHED, SINCE CONTROL IS EXPECTED TO RETURN TO DDT SOON. - -SWAPG: EXCH 0,AC0 ;SWAP AC 0 - MOVEM 0,SAV0 ;SAVE 0 FOR WORK - HLLZ 0,SWAP ;GET CURRENT FLAGS - HLR 0,SAVPI ;GET SAVED FLAGS - HRLM 0,SWAP ;SWITCH FLAGS - HLLM 0,SAVPI - MOVE 0,[EXCH 1,AC0+1] ;SETUP INST FOR SWAPPING AC'S -SWAPL: XCT 0 ;SWAP AN AC - ADD 0,[Z 1,1] ;INC AC AND MEM FIELDS - TLNN 0,1000 ;AC 20 REACHED? - JRST SWAPL ;NO, LOOP - MOVE 0,SAV0 ;YES, RESTORE SAVED AC - JRSTF @SWAP ;RETURN, RESTORING NEW FLAGS - > ;END IFE FTFILE - - -SUBTTL ENTER AND LEAVE DDT LOGIC - -;SKIPS IF CONTEXT ALREADY SAVED - - IFE FTFILE,< -SAVEG: ;SAVE THE ACS AND PI SYSTEM - IFN FTEXEC,< - SKIPN TRCON ;TRACE FACILITY IN USE? - JRST SAVEG1 ;NO - DATAI PI,TRCDMP ;YES, DUMP CURRENT POINTER - DATAO PI,[0] ;TURN IT OFF -SAVEG1: - MOVEM 0,TEM - SETZM TOPS20 - JSP 0,.+1 - TLNN 0,(1B5) - JRST .+6 - MOVE [112,,11] - GETTAB - CAM - CAIN 40000 - SETOM TOPS20 - MOVE 0,TEM - MOVEM T,TEM ;FREE AN AC -; IFE FTDEC20,< - SKIPE TOPS20 - JRST SAVEG2 - JSP T,.+1 ;GET USR FLAG - XOR T,SAVPI ;COMPARE WITH OLD USR FLAG(LAST DDT EXIT) - TLNE T,(1B5) ;SAME? - SETZM SARS ;> ;NO, SAVE AC'S AND PC FOR EXIT - ; SO EXEC/USER MODE FLOP RESTORED AS ENTERED -SAVEG2: JSP T,.+1 ;GET PC WORD AGAIN - ROT T,5 ;ROTATE USER MODE BIT TO SIGN - MOVEM T,USRFLG ; AND SAVE IT - MOVE T,TEM ;RESTORE THE AC - > ;END FTEXEC -;NOW SAVE USER STATUSES AND MODES AND SETUP DDT MODES. DON'T SAVE -;MODES IF ALREADY SAVED (I.E. WHEN REENTERING DDT), BUT DO SET DDT -;MODES IN CASE THEY WERE CHANGED. - - SKIPE SARS ;ALREADY SAVED? - AOS SAVE ;YES, SKIP RETURN - IFN FTEXEC,< - SKPEXC - JRST SAV11 - SKIPE SARS ;ALREADY SAVED? - JRST SAV3 ;YES - CONI PI,SAVPI - HRRZS SAVPI+1 -SAV3: CONO PI, @SAVPI+1> -SAV11: SKIPE SARS ;ALREADY SAVED? - JRST SAV5 ;YES - MOVEM 17,AC17 ;SAVE ACS - HRRZI 17,AC0 - BLT 17,AC0+16 - MOVE T,SAVE ;SAVE PC FLAGS - HLLM T, SAVPI -SAV5: MOVE P,[IOWD LPDL,PDL] ;SETUP STACK - ; .. - -;IF EDDT, DETERMINE PROCESSOR -;TYPE. USER DDT DOES NOT NEED TO KNOW PROCESSOR TYPE - - IFN FTEXEC,< - MOVNI T,1 ;LOAD T WITH ALL ONES - AOBJN T,.+1 ;ADD ONE TO BOTH HALFS - MOVEM T,KAFLG ;0 MEANS KI10; 1,,0 MEANS KA10 - SETZ T, ;TEST FOR KL10 - BLT T,0 ;NOP BLT - CAMN T,[1,,1] ;KL WILL STORE POINTER AS 1,,1 - SETOM KAFLG ;A KL10 - IFE FTDEC20,< - SKIPE TOPS20 - JRST SAV20 -; HRRI T,XJBSYM ;GET EXEC SYMBOL POINTER ADR -; SKPEXC ;EXEC MODE? - HRRI T,.JBSYM ;NO, GET USER MODE SYM POINTER ADR - HRRM T,SYMP ; AND SAVE IT -; HRRI T,XJBUSY ;GET EXEC UNDEF SYM TABLE POINTER ADR -; SKPEXC ;EXEC MODE? - HRRI T,.JBUSY ;NO, GET USER MODE UNDEF SYM POINTER ADR - HRRM T,USYMP ; AND SAVE RESULTING ADR - SKPEXC - JRST SAV12 ;TRANSFER IF IN USER MODE - SKPKA ;IS THIS A KA10? - JRST SAV12 ;NO--LEAVE APR ALONE - CONI T ;GET APR FLAGS - TRNE T,NXMKA ;TEST NXM FLAG AND - TLO T,(1B0) ; MOVE IT TO BIT 0 - TLZ T,37 ;FLUSH I AND X SO INDIRECT WORKS - MOVEM T,SAVAPR ;SAVE STATE OF APR REGISTER - JRST SAV12 - >> ;END IFN EDDT - ; .. - -;SAVE STATE AND SETUP DDT MODES... - -; IFN FTDEC20,< -SAV20: SETOM LASTPG# ;FORGET LAST PAGE ACCESS - IFN FTEXEC,< - SKPUSR - JRST SAV2> - MOVSI T,(1B0) - MOVEI T1,.FHSLF - SKPIR ;PSI SYSTEM ON? - SETZ T, ;NO - SKIPN SARS ;SKIP IF ALREADY HAVE SAVED STATUS - MOVEM T,SAVSTS# ;REMEMBER STATUS -SAV2: ;> ;END IFN FTDEC20 -SAV12: PUSHJ P,TTYRET ;INITIALIZE TTY - REPEAT 0,< ;WAIT FOR 5.3 RELEASE FOR THIS TEST - IFN FTYANK, ;END IFN FTYANK - > ;END OF REPEAT 0 CONDITIONAL - MOVEI F,0 ;INIT FLAG REGISTER - SETOM SARS ;FLAG PROTECTING SAVED REGISTERS - MOVE T,[XWD SCHM,SCH] - BLT T,ODF ;LOAD THE ACS WITH MODE SWITCHES - JRST @SAVE - -RESTOR: ;RESTORE ACS AND PI SYSTEM - HRRM T,SAVE - PUSHJ P,TTYLEV ;RESTORE STATUS OF CONSOL TTY (EXEC MODE) - MOVE T,SAVPI - TLZ T,010037 ;DON'T TRY TO RESTORE USER MODE FLAG - HLLM T, SAVE - IFN FTEXEC,< - SKPEXC - JRST RESTR2 - AND T, SAVPI+1 - IORI T, 2000 ;TURN ON CHANNELS - TRZ T,1000 ;MAKE SURE WE DON'T ASK FOR BOTH - HRRZM T, SAVPI - > ;END FTEXEC -RESTR2: HRLZI 17,AC0 - BLT 17,17 - SETZM SARS - IFN FTEXEC,< - SKPEXC - JRST RESTR3 ;TRANSFER IF IN USER MODE - IFE FTDEC20,< - SKIPGE SAVAPR ;WANT NXM SET? - MOVES 777777 ;YES--ASSUME KA-10 - > - SKIPE TRCON ;TRACE FACILITY ON? - DATAO PI,TRCON ;YES, START TRACING - CONO PI,@SAVPI -RESTR3:> - JRST 2,@SAVE - -SUBTTL BREAK POINT LOGIC - -BCOMG: POP T,LEAV ;MOVE INSTRUCTION TO LEAV - MOVEI T,B1SKP-B1INS+1(T) - HRRM T,BCOM3 ;CONDITIONAL BREAK SETUP - MOVEI T,B1CNT-B1SKP(T) - HRRM T,BCOM2 ;PROCEED COUNTER SETUP - MOVE T,BP1-B1CNT(T) ;GET PC WORD - HLLM T,LEAV1 ;SAVE FLAGS FOR RESTORING - EXCH T,BCOM ; ALSO SAVE PC WORD IN BCOM - - XCT BCOM3 ;(SKIPE) CONDITIONAL BPT SETUP? - XCT @BCOM3 ;YES, XCT IT - XCT BCOM2 ;(SOSG) PROCEED COUNTER NOW 0? - JRST BREAK - - MOVEM T,AC0+T - LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION - CAIL T,264 ;JSR - CAILE T,266 ;JSA,JSP - TRNN T,700 ;UUO - JRST PROC1 ;MUST BE INTERPRETED - CAIE T,260 ;PUSHJ - CAIN T,256 ;XCT - JRST PROC1 ;MUST BE INTERPRETED - IFN FTEXEC,< - MOVSI T,010000 ;DON'T TRY TO RESTORE USER MODE BIT - ANDCAM T,LEAV1 > - MOVE T,AC0+T - JRST 2,@LEAV1 ;RESTORE FLAGS, GO TO LEAVG - -BREAK: IFN FTDEC20,< - SETZM SARS> ;BE SURE TO SAVE ACS ON BKPT - JSR SAVE ;SAVE THE WORLD - PUSHJ P,REMOVB ;REMOVE BREAKPOINTS - PUSHJ P,TTYCLR ;FLUSH WAITING TTY CHARACTERS FOR INPUT - SOS T,BCOM3 - HRRZS T ;GET ADR OF CONDITIONAL BREAK INST - SUBI T,B1ADR-3 ;CHANGE TO ADDRESS OF $0B - IDIVI T,3 ;QUOTIENT IS BREAK POINT NUMBER - HRRM T,BREAK2 ;SAVE BREAK POINT # - MOVE W1,[BYTE (7) "$","0","B",76,0] ;PRELIMINARY TYPEOUT MESSAGE -REPEAT 0,> - SKIPG @BCOM2 ;TEST PROCEED COUNTER - TRO W1,76_1 ;CHANGE T TO /$0BGG/ - DPB T,[POINT 4,W1,13] ;INSERT BREAK POINT # IN MESSAGE - PUSHJ P,TEXT2 - MOVE T,BCOM - HLLM T, SAVPI ;SAVE PROCESSOR FLAGS - MOVEI T,-1(T) - PUSHJ P,PSHLLC ;PUSH OLD SEQUENCE - MOVEM T,LWT ;BKPT ADR BECOMES LAST WORD TYPED - MOVEM T,LLOC ;BKPT ADR BECOMES CURRENT LOC - PUSHJ P,PAD ;TYPE PC AT BREAK - HRRZ T,@BCOM3 - HRRM T,PROC0 ;SETUP ADDRESS OF BREAK - HLRZ T,@BCOM3 - JUMPE T,BREAK1 ;TEST FOR REGISTER TO EXAMINE - PUSHJ P,LCT ;PRINT TAB - HLRZ T,@BCOM3 - MOVEM T,LLOC ;EXAMINE ADR BECOMES CURRENT LOC - PUSHJ P,LI1 ;EXAMINE REGISTER C($NB)LEFT -BREAK1: MOVSI S,400000 - XCT BREAK2 ;ROT BY # OF BREAK POINT - PUSHJ P,LISTEN ;DONT PROCEED IF TTY KEY HIT - TDNN S,AUTOPI ;DONT PROCEED IF NOT AUTOMATIC - JRST RET ;DONT PROCEED - JRST PROCD1 - -PROCED: HRRZ TT,BCOM2 ;SEE IF PROCEED POSSIBLE - JUMPE TT,ERR ;JUMP IF NOT SETUP - TLNN F,(QF) ;N$P ;PROCEED AT A BREAKPOINT - MOVEI T,1 - MOVEM T,@BCOM2 - HRRZ R,BCOM3 - PUSHJ P,AUTOP -PROCD1: PUSHJ P,CRF - XCT PROC0 ;(HRRZI) GET ADR OF BPT - PUSHJ P,FETCH - JRST BPLUP1 ;ONLY GET HERE IF MEMORY SHRANK - MOVEM T,LEAV - PUSHJ P,INSRTB - JRST PROC2 - -PROC1: MOVE T,AC0+T - JSR SAVE - JFCL - MOVE T,BCOM ;STORE FLAGS WHERE "RESTORE" - HLLM T,SAVPI ; CAN FIND THEM -PROC2: MOVEI W,100 - MOVEM W,TEM1 ;SETUP MAX LOOP COUNT - HLLZS BCOM2 ;CLEAR FLAG, PREVENT SECOND $P - JRST IXCT5 - -IXCT4: - IFN FTEXEC,< SKPUSR - JRST IXCT41> ;INIT NOT SPECIAL CASE IN EXEC MODE - SUBI T,041 ;IS UUO "INIT"? - JUMPE T,BPLUP - AOJGE T,IXCT6 ;DONT PROCEED FOR INIT - ;DONT INTERPRET FOR SYSTEM UUOS -IXCT41: MOVEM R,40 ;INTERPRET FOR NON-SYSTEM UUOS - MOVEI R,41 -IXCT: SOSL TEM1 - PUSHJ P,FETCH - JRST BPLUP ;BREAKPOINT LOOPING OR FETCH FAILED - MOVEM T,LEAV -IXCT5: LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION - CAIN T,254 ;DON'T DO ANYTHING TO JRST - JRST IXCT6 -IXCT51: HRLZI 17,AC0 - BLT 17,17 - MOVEI T,@LEAV - DPB T,[POINT 23,LEAV,35] ;STORE EFFECTIVE ADDRESS - LDB W1,[POINT 4,LEAV,12] ;PICK UP AC FIELD - LDB T,[POINT 9,LEAV,8] ;PICK UP INSTRUCTION FIELD - MOVE P,[IOWD LPDL,PDL] - CAIN T,260 - JRST IPUSHJ ;INTERPRET PUSHJ - - CAIN T,264 - JRST IJSR ;INTERPRET JSR - CAIN T,265 - JRST IJSP ;INTERPRET JSP - CAIN T,266 - JRST IJSA ;INTERPRET JSA - MOVE R,LEAV - TRNN T,700 - JRST IXCT4 ;INTERPRET UUO - CAIN T,256 - JSP T,[JUMPE W1,IXCT ;INTERPRET XCT IF AC = 0 - TLNN T,(1B5) ;AC FIELD NOT 0 - IN EXEC MODE? - JRST IXCT6 ;YES, DON'T INTERPRET MAPPED XCT - JRST IXCT] ;NO, INTERPRET. IGNORE AC FIELD -IXCT6: JSP T,RESTORE -LEAVG: XCT LEAV ;DO BPT INSTRUCTION - JRST @BCOM - SKIPA ;SINGLE SKIP - AOS BCOM ;DOUBLE SKIP - AOS BCOM - JRST @BCOM - -BPLUP: PUSHJ P,REMOVB ;BREAKPOINT PROCEED ERROR -BPLUP1: JSR SAVE - JFCL - JRST ERR - -IPUSHJ: DPB W1,[POINT 4,CPUSHP,12] ;STORE AC FIELD INTO A PUSH - HLL T,SAVPI ;PICK UP FLAGS - HLLM T,BCOM ;SET UP THE OLD PC WORD - MOVSI T,(1B4) ;TURN OFF BIS FLAG IN NEW PC WORD - ANDCAM T,SAVPI - JSP T,RESTORE ;RESTORE THE MACHINE STATE - XCT CPUSHP ;(PUSH ..,BCOM) - JRST @LEAV ;JUMP TO "E" OF THE PUSHJ - -IJSA: MOVE T,BCOM ;INTERPRET JSA - HRL T,LEAV - EXCH T,AC0(W1) - JRST IJSR2 - -IJSR: MOVE T,BCOM ;INTERPRET JSR - HLL T,SAVPI ;SET UP THE OLD PC WORD - MOVSI W,(1B4) ;TURN OFF BIS IN NEW PC WORD - ANDCAM W,SAVPI -IJSR2: MOVE R,LEAV - PUSHJ P,DEPMEM - JRST BPLUP ;ERROR, CAN'T STORE - AOSA T,LEAV -IJSR3: MOVE T,LEAV - JRST RESTORE - -IJSP: MOVE W,BCOM ;INTERPRET JSP - HLL W,SAVPI ;PICK UP PC WORD FLAGS - MOVEM W,AC0(W1) ;INSERT OLD PC WORD INTO AC - MOVSI T,(1B4) ;TURN OFF BIS FLAG IN NEW PC WORD - ANDCAM T,SAVPI - JRST IJSR3 - -;INSERT BREAKPOINTS - -INSRTB: MOVE S,[JSR BP1] -INSRT1: SKIPE R,B1ADR-BP1(S) - PUSHJ P,FETCH - JRST INSRT3 - MOVEM T,B1INS-BP1(S) - MOVE T,S - PUSHJ P,DEPMEM - JFCL ;HERE ONLY IF CAN'T WRITE IN HIGH SEG -INSRT3: ADDI S,3 - CAMG S,[JSR BPN] - JRST INSRT1 - POPJ P, - -;REMOVE BREAKPOINTS - -REMOVB: MOVEI S,BNADR -REMOV1: MOVE T,B1INS-B1ADR(S) - SKIPE R,(S) - PUSHJ P,DEPMEM - JFCL ;HERE ONLY IF NO WRITE IN HIGH SEG - SUBI S,3 - CAIL S,B1ADR - JRST REMOV1 - POPJ P, - -;ALL $B COMMANDS GET HERE IN FORM: $B - - -BPS: TLZE F,(QF) ;HAS BEEN TYPED? - JRST BPS1 ;YES - TRZE F,Q2F ;NO, HAS BEEN TYPED? - JRST BPS2 ;YES - MOVE T,[XWD B1ADR,B1ADR+1] ;NO, COMMAND IS $B - CLEAR ALL BREAKPOINTS - CLEARM B1ADR - BLT T,AUTOPI ;CLEAR OUT ALL BREAKPOINTS AND AUTO PROCEED REGISTER - JRST RET - -BPS1: MOVE R,T - PUSHJ P,FETCH ;CAN BREAKPOINT BE INSERTED HERE? - JRST ERR ;NO - PUSHJ P,DEPERR ; AGAIN NO - TRZN F,Q2F ;HAS BEEN TYPED? - JRST BPS3 ;NO - TRO F,2 ;YES, PROCESS THE COMMAND A$NB -BPS2: MOVE T,WRD2 - CAIL T,1 - CAILE T,NBP - JRST ERR - IMULI T,3 - ADDI T,B1ADR-3 - TRZN F,2 - JRST MASK2 - EXCH R,T - JRST BPS5 - -BPS3: MOVE T,R ;PUT THE BREAKPOINT ADR BACK IN T - MOVEI R,B1ADR ;PROCESS THE COMMAND A$B -BPS4: HRRZ W,(R) - CAIE W,(T) - SKIPN (R) - JRST BPS5 - ADDI R,3 - CAIG R,BNADR - JRST BPS4 - JRST ERR -BPS5: MOVEM T,(R) - SETZM 1(R) - SETZM 2(R) - -AUTOP: SUBI R,B1ADR ;AUTO PROCEED SETUP SUBROUTINE - IDIVI R,3 - MOVEI S,1 - LSH S,(R) - ANDCAM S,AUTOPI - TLNE F,(CCF) - IORM S,AUTOPI - POPJ P, - - > ;END FTFILE - - IFN FTFILE,> -SUBTTL MEMORY MANAGER SUBROUTINES - -;DEPOSIT INTO MEMORY SUBROUTINE - -DEPRS: MOVEM T,LWT ;DEPOSIT REGISTER AND SAVE AS LWT - MOVE R,LLOCO ;QUAN TYPED IN REGIS EXAM - TLZE F,(ROF) - TLNN F,(QF) - POPJ P,0 - JRST DMEMER - -;DEPOSIT INTO MEMORY SUBROUTINE - - IFE FTFILE,< -DEPSYM: -DEPMEM: IFE FTDEC20,< - SKIPE TOPS20 - JRST DEPM20 - PUSHJ P,CHKPAG ;GET PAGE ACCESS BITS INTO TT1 - JUMPL TT1,CPOPJ ;ILLEGAL ADDRESS IF NEGATIVE - TLNE TT1,(1B1) ;IS PAGE KNOWN TO BE WRITEABLE? - JRST DEP1 ;YES--GO DO THE DEPOSIT RIGHT AWAY - JUMPN TT1,DEP4 ;IF WE KNOW ANYTHING THEN IT MUST BE - ; A WRITE LOCKED HISEG - JSP TT1,CHKADR ;LEGAL ADDRESS? - JRST DEP4 ;YES BUT IN HI SEGMENT -DEP1: TRNN R,777760 - JRST DEPAC ;DEPOSIT IN AC - MOVEM T,(R) - JRST CPOPJ1 ;SKIP RETURN - -DEPAC: MOVEM T,AC0(R) ;DEPOSIT IN AC - JRST CPOPJ1 ;SKIP RETURN -DEP4: IFN FTEXEC,< - SKPUSR ;IN EXEC MODE WE CAN NOT DO - POPJ P,0 ; SETUWP -- INDICATE ERROR - > - MOVEI TT1,0 - SETUWP TT1, ;IS HI SEGMENT PROTECTED? TURN OFF - POPJ P, ;PROTECTED, NO SKIP RETURN - MOVEM T,(R) ;STORE WORD IN HI SEGMENT - TRNE TT1,1 ;WAS WRITE PROTECT ON? - SETUWP TT1, ;YES, TURN IT BACK ON - JFCL - JRST CPOPJ1 ;SKIP RETURN -; > ;END IFE FTDEC20 -; IFN FTDEC20,< ;DEPSYM, DEPMEM FOR DEC20 -DEPM20: TRNN R,777760 ;AC? - JRST [MOVEM T,AC0(R) ;YES, DO IT - JRST CPOPJ1] - PUSHJ P,CHKADR ;GET ACCESS - JUMPE TT,DEP2 ;EMPTY PAGE OK - TLNN TT,(PM%WT+PM%CPY) ;WRITE OR COPY-WRITE? - POPJ P, ;NO, FAIL -DEP2: SETOM LASTPG ;WRITE MAY CHANGE ACCESS - MOVEM T,0(R) ;DO IT - JRST CPOPJ1 -; > ;END IFN FTDEC20 - -DSYMER: PUSHJ P,CLRCSH ;DEPOSIT FOR SYM TABLE ROUTINES - > ;END IFE FTFILE -DEPERR: -DMEMER: PUSHJ P,DEPMEM ;DEPOSIT AND GO TO ERR IF IT FAILS - JRST ERR - POPJ P, -XLIST - - IFN FTFILE,< -DSYMER: PUSHJ P,DEPSYM ;TRY SYMBOL TABLE DEPOSIT - HALT . ;GIVE UP - POPJ P, ;AND RETURN - -DEPSYM: PUSH P,TT ;SAVE THREE LOCATIONS - PUSH P,TT1 ; TO PROTECT FILDDT - PUSH P,R ; .. - MOVE TT,FISPTR ;GET DEF POINTER - HLRE TT1,TT ;GET LENGTH - SUB TT,TT1 ;COMPUTE END OF SYMBOLS - TLZ TT,-1 ;CLEAR JUNK - MOVE TT1,FIUPTR ;GET START OF UNDEF S.T. - CAMLE TT1,ESTUT ; IN THE CASE OF UND1 CODE ALREADY - ; TRYING TO EXTEND S.T. - MOVE TT1,ESTUT ;YES--USE THAT VALUE - SKIPL TT1 ;MIGHT NOT BE ANY UNDEFINED SYMBOLS - MOVE TT1,FISPTR ;FAILING THAT, GET START OF SYMBOLS - TLZ TT1,-1 ;CLEAR JUNK - TLZ R,-1 ; .. - CAIG TT1,(R) ;SEE IF TOO LOW - CAIGE TT,(R) ;OR TOO HIGH - HALT . ;YES--QUIT - POP P,R - POP P,TT1 ;OK--RESTORE TEMPS - POP P,TT ; AND PROCEDE - CAME T,(R) ;SEE IF DIFFERENT - SETOM CHGSFL ;YES--FLAG THAT SYMBOLS CHANGED - MOVEM T,(R) ;STORE NEW VALUE - JRST CPOPJ1 ;RETURN - -DEPMEM: HRRZ TT1,R ;COPY ADDRESS - CAIG TT1,17 ;IS IT AN AC? - JRST [MOVEM T,AC0(TT1) ;STORE - JRST CPOPJ1] - SKIPN PATCHS ;SEE IF PATCHING - JRST DEPNPT ;NO--GIVE NOOP - PUSHJ P,CVTADR ;CHANGE ADDRESS PER $U - POPJ P,0 ;ERROR - SKIPN CRASHS ;SEE IF CRASHING - JRST MONPOK ;NO--POKE MONITOR - PUSH P,T ;PRESERVE T - PUSHJ P,FETCH ;YES--GET WORD - JRST [POP P,T - POPJ P,] - POP P,T ;RESTORE WORD TO STORE - MOVSI TT2,(1B5) ;SET CHANGED BIT - CAME T,@FETADR ;UNLESS NO CHANGE - IORM TT2,@FETPAG ; .. - MOVEM T,@FETADR ;CHANGE WINDOW -DEPRET: JRST CPOPJ1 ;GIVE GOOD RETURN - -MONPOK: PUSH P,T ;SAVE ARGUMENT - MOVEM T,POKER+2 ;SET AS NEW VALUE - HRRZM R,POKER ;SET ADDRESS - ;NOTE--LAST TYPEOUT IS IN POKER+1 - ; SO THAT USER MUST KNOW WHAT - ; HE IS CHANGING - MOVE T,[3,,POKER] ;GET POINTER - CALLI T,114 ;POKE. MONITOR - JRST ERR ;COMPLAIN IF WE CAN'T - POP P,T ;RESTORE VALUE - JRST CPOPJ1 ;SKIP RETURN - -POKER: BLOCK 3 ;ARGUMENTS FOR POKING - -DEPNPT: AOSG DEPNCT ;FIRST TRY? - OUTSTR [ASCIZ \ -?Patching was not enabled by /P -\] - JRST CPOPJ1 -DEPNCT: BLOCK 1 - -;STILL UNDER FTFILE - -;HERE WHEN ^Z TYPED TO CLOSE OUT - -CNTRLZ: SKIPE CRASHS ;SEE IF NOT /M - SKIPN PATCHS ;OR NOT /P - JRST NOCHNZ ;RIGHT--JUST WRAP UP - SKIPN CHGSFL ;SEE IF SYMBOL TABLE CHANGED - JRST NOSCPY ;JUMP IF NOT - PUSHJ P,SYMPTR ;YES--REFETCH FILE POINTER - HLRE W1,FIUPTR ;GET LENGTH OF UNDEFINED S.T. - HLRE R,FISPTR ;GET LENGTH OF STANDARD S.T. - ADD W1,R ;ADD TOGETHER - MOVM W1,W1 ;MAKE POSITIVE - HRRZ R,TT ;GET BASE OF UNDEFINED S.T. - SKIPN TT ;IN CASE NOTHING THERE - HRRZ R,T ;USE BASE OF DEFINED S.T. - ADD W1,R ;ADD BASE AND LENGTH OF TABLES - MOVEM W1,MONSIZ ;STORE AS NEW SIZE OF .XPN FILE - MOVE W1,FIUPTR ;PREPARE TO - MOVE R,T - JUMPGE W1,NOUCPY ;JUMP IF NONE - JUMPE TT,NOUCPY - MOVE R,TT ; COPY UNDEF SYMS -OUCPY: MOVE T,(W1) - PUSHJ P,DMEMER - AOS R - AOBJN W1,OUCPY - -NOUCPY: HRRZ T,TT ;GET START - HLL T,FIUPTR ;GET NEW LENGTH - PUSH P,R ;SAVE START OF SYMBOLS - HLRZ R,S ;GET LOCATION POINTER IS KEPT - PUSHJ P,DMEMER ;STORE NEW POINTER - - HRRZ R,(P) ;START AT BEGINNING - MOVE W1,FISPTR ;PREPARE TO COPY SYMS - JUMPGE W1,NOSCP -OSCPY: MOVE T,(W1) - PUSHJ P,DMEMER - AOS R - AOBJN W1,OSCPY - -NOSCP: POP P,T ;GET START - HLL T,FISPTR ;GET NEW LENGTH - HRRZ R,S ;GET LOCATION POINTER IS KEPT - PUSHJ P,DMEMER ;STORE NEW POINTER - -;STILL UNDER FTFILE - -NOSCPY: SETZM WINNUM ;START WITH WINDOW ZERO -WRTLP: MOVE T,WINNUM ;GET WINDOW NUMBER - MOVE T,WINDIR(T) ;GET PAGTBL ADDRESS - MOVSI TT1,(1B5) ;SEE IF PAGE CHANGED - TDNE TT1,(T) ; .. - PUSHJ P,WRTWIN ;WRITE THE WINDOW - AOS T,WINNUM ;STEP TO NEXT WINDOW - CAIGE T,CT.RES ;MORE - JRST WRTLP ;NO--KEEP GOING - MOVSI TT,-MX.SIZ ;LOOK FOR CHNAGED BITS - MOVSI TT1,(1B5) ; .. - TDNN TT1,PAGTBL(TT) ; .. - AOBJN TT,.-1 ; .. - SKIPG TT ;ANY FOUND - OUTSTR [ASCIZ " -?FILDDT INTERNAL ERROR -- VERIFY YOUR PATCHES -"] - CLOSE 1, - STATZ 1,760000 ;ALL OK - OUTSTR [ASCIZ " -?OUTPUT ERROR ON CLOSE -"] -NOCHNZ: CALLI 12 - > ;END FILDDT CASE -LIST -;FETCH FROM MEMORY SUBROUTINE - -;HFETCH GETS A WORD FROM THE HISEG GIVEN AN OFFSET INTO THE SEGMENT -;CALL WITH: -; R = HISEG OFFSET -; PUSHJ P,HFETCH -; NO HISEG RETURN -; HERE WITH WORD IN T -; -HFETCH: - IFN FTEXEC,< -; SKPUSR ;NO HISEG SYMBOLS IN EXEC MODE (OR KLDDT) - POPJ P,0> ; .. - PUSHJ P,GETHSO ;GET START OF HISEG - JUMPE T,CPOPJ ;EXIT IF NONE - ADD R,T ;RELOCATE -;FALL INTO FETCH - -;SUBROTINE GET A WORD FROM MEMORY -;CALL WITH: -; R = JUNK,,ADDRESS -; PUSHJ P,FETCH -; HERE IF ADDRESS IS NOT VALID -; HERE WITH WORD IN T AND R UNCHANGED -; -;AC'S TT1 AND TT2 CHANGED - -FETCH: IFE FTDEC20,< - IFE FTFILE,< - SKIPE TOPS20 - JRST FET20 - PUSHJ P,CHKPAG ;GET ACCESS BITS FOR PAGE - JUMPL TT1,CPOPJ ;ERROR IF PAGE DOES NOT EXIST - TLNE TT1,(1B2) ;IS PAGE READABLE? - JRST FET1 ;YES--GO READ IT - JUMPN TT1,CPOPJ ;EXIT IF KNOW CONCEALED - JSP TT1,CHKADR ;LEGAL ADDRESS? - JFCL ;HIGH OR LOW OK FOR FETCH -FET1: TRNN R,777760 ;ACCUMULATOR? - SKIPA T,AC0(R) ;YES - MOVE T,(R) ;NO - JRST CPOPJ1> ;SKIP RETURN ONLY FOR LEGAL ADDRESS -; > ;END OF IFE FTDEC20 -; IFN FTDEC20,< ;FETCH FOR DEC20 -FET20: TRNN R,777760 ;AC? - JRST [MOVE T,AC0(R) ;YES, DO IT - JRST CPOPJ1] - PUSHJ P,CHKADR ;GET ACCESS - TLNE TT,(PA%EX) ;EXISTS? - TLNN TT,(PM%RD) ;HAVE READ? - POPJ P, ;NO, FAIL - MOVE T,0(R) ;YES, DO IT - JRST CPOPJ1 -; > ;END IFN FTDEC20 -XLIST - - IFN FTFILE,< - HRRZ TT1,R ;STRIP OF COUNT - CAIG TT1,17 ;IS IT AN AC - JRST [MOVE T,AC0(TT1) ;YES--GET THE AC - JRST CPOPJ1] ;GIVE GOOD RETURN - PUSH P,R ;SAVE JUNK IN R - TLZ R,-1 ;CLEAR JUNK - PUSHJ P,CVTADR ;MAP THE ADDRESS - SKIPA ;ERROR - PUSHJ P,FETX ;GET THE WORD - SOS -1(P) ;ERROR - POP P,R ;RESTORE R - JRST CPOPJ1 ;RETURN -FETX: SKIPN CRASHS ;CRASH.SAV EXIST? - JRST MONPEK ;NO - GO PEEK AT RUNNING MONITOR - HRRZ TT1,R ;STRIP OFF POSSIBLE COUNT - LSH TT1,-9 ;CONVERT TO PAGE # - CAIL TT1,MX.SIZ ;TOO BIG? - POPJ P,0 ;YES--PUNT - SKIPN PAGTBL(TT1) ;SOMETHING THERE? - POPJ P,0 ;NO--ERROR - ADDI TT1,PAGTBL ;SET TO START OF TABLE - MOVEM TT1,FETPAG ;SAVE FOR LATER - LDB T,[POINT 9,@FETPAG,17] ;GET WINDOW NUMBER - SOJGE T,INCORE ;JUMP IF IN CORE - AOS T,WINNUM ;STEP TO NEXT WINDOW - CAIL T,CT.RES ;ARE THERE THAT MANY? - SETZB T,WINNUM ;NO--WRAP AROUND - MOVEI TT2,1(T) ;STORE WINDOW # PLUS 1 - DPB TT2,[POINT 9,@FETPAG,17] ;IN PAGTBL - MOVSI TT1,(1B5) ;CHANGE BIT - TDNE TT1,@WINDIR(T) ;DID THIS PAGE CHANGE? - PUSHJ P,WRTWIN ;YES--WRITE OUT WINDOW - MOVE T,WINNUM ;GET WINDOW NUMBER BACK - MOVEI TT1,0 ;MARK CURRENT PAGE AS NOT IN CORE - DPB TT1,[POINT 9,@WINDIR(T),17] - MOVE TT1,FETPAG ;FIX UP DIRECTORY - MOVEM TT1,WINDIR(T) ; .. - PUSHJ P,REDWIN ;READ NEW DATA - MOVE T,WINNUM ;GET NUMBER OF CURRENT WINDOW -INCORE: LSH T,9 ;CONVERT TO WORDS - ADDI T,WIND0 ;BUMP TO BASE OF WINDOWS - LDB TT1,[POINT 9,R,35] ;GET WORD OFFSET - ADD T,TT1 ;ADDRESS OF WORD - MOVEM T,FETADR ;SAVE FOR DEPOSIT - MOVE T,(T) ;GET DATA - JRST CPOPJ1 ;GOOD RETURN - -MONPEK: HRRZ T,R - CALLI T,33 - JRST CPOPJ1 - -WRTWIN: SKIPA T,[OUT 1,TT1] -REDWIN: MOVE T,[IN 1,TT1] - PUSH P,T ;SAVE UUO - MOVE T,WINNUM ;GET CURRENT WINDOW NUMBER - MOVSI TT2,(1B5) ;CLEAR MODIFIED BIT - ANDCAM TT2,@WINDIR(T) ; IN THE PAGE TABLE - HRRZ TT1,@WINDIR(T) ;GET FILE PAGE # - LSH TT1,2 ;CONVERT TO BLOCK - USETI 1,1(TT1) ;POINT FILSER - LSH T,9 ;CONVERT WINDOW # TO WORDS - ADDI T,WIND0 ;BASE OF WINDOWS - MOVSI TT1,-1000 ;NEGATIVE WORD COUNT - HRRI TT1,-1(T) ;IOWD - MOVEI TT2,0 ;TERMINATE LIST - POP P,T ;RESTORE UUO - XCT T ;DO I/O - POPJ P,0 ;DONE - GETSTS 1,T - SETSTS 1,17 - TLNN T,740000 - POPJ P,0 ;JUST EOF - OUTSTR [ASCII "?FATAL I/O ERROR -"] - CALLI 1,12 ;SAY . - SETSTS 1,17 ;CLEAR ERROR BITS - POPJ P,0 ;IGNORE ERROR - > ;END FILDDT CONDITIONAL -LIST - - IFE FTDEC20,< -CHKADR: SKIPE TOPS20 - JRST CHKA20 - HRRZ TT,.JBREL ;GET HIGHEST ADDRESS IN LOW SEGMENT - IFN FTEXEC,< - SKPUSR - JRST CHKA4 ;DO MAP IN EXEC MODE - > - CAIL TT,(R) ;CHECK FOR WITHIN LOW SEGMENT - JRST 1(TT1) ;ADDRESS IS OK IN LOW SEGMENT, SKIP RETURN - SKIPN .JBHRL ;ANY HISEG? - POPJ P,0 ;NO--ERROR - PUSH P,T ;SAVE T - PUSHJ P,GETHSO ;GET START OF HISEG - HRRZ TT,R ;COPY DESIRED ADDRESS - SUB TT,T ;GET OFFSET INTO HISEG - POP P,T - JUMPL TT,CPOPJ ;MUST BE POSITIVE - HRRZ TT,.JBHRL ;TOP OF HISEG - CAIGE TT,(R) ;IS ADDRESS TOO BIG? - POPJ P,0 ;YES--ERROR - JRST (TT1) ;NO--INDICATE HISEG - -CHKPAG: IFN FTEXEC,< - MOVEI TT1,0 ;PRESET UNKNOWN ANSWER - SKPUSR ;SKIP IF IN USER MODE - POPJ P,0 ;DO NOT DO UUO'S IN EXEC MODE - > - HRRZ TT1,R ;COPY ADDRESS - LSH TT1,-9 ;SHIFT LEFT 9 BITS - HRLI TT1,6 ;FUNCTION TO GET ACCESS BITS - PAGE. TT1, ;ASK THE MONITOR - TDZA TT1,TT1 ;RETURN ZERO IF UNKNOWN - TRO TT1,1 ;MAKE SURE NON-ZERO IF UUO WON - POPJ P,0 ;ELSE RETURN GOOD STUFF - -GETHSO: IFN FTEXEC,< - SKPUSR - JRST [MOVEI T,400000 - POPJ P,0] - > - SKIPE TOPS20 - JRST GETH20 - MOVE T,[-2,,.GTUPM] - GETTAB T, - MOVEI T,0 - HLRZ T,T - CAIGE T,777 - MOVEI T,400000 - POPJ P, -; > ;END IFE FTDEC20 -; IFN FTDEC20,< -CHKA20: IFN FTEXEC,< - SKPUSR - JRST CHKA4> - PUSH P,T2 - PUSH P,R - HRRZ T2,0(P) ;GET DESIRED ADDRESS - XOR T2,LASTPG ;COMPARE WITH LAST ONE TESTED - TRNN T2,777000 ;SAME PAGE? - JRST CHKA1 ;YES, ALREADY HAVE ACCESS - XORM T2,LASTPG ;NO, SET NEW LAST PAGE - JSP T1,.+1 ;GET USER FLAG - TLNN T1,(PC%USR) ;IN USER MODE? - JRST [HRRZ T1,0(P) ;NO, MONITOR. GET ADDRESS - MRPAC ;READ MONITOR PAGE ACCESS - JRST CHKA2] ;RETURN IT - LDB T1,[POINT 9,0(P),26] ;GET PAGE NUMBER - HRLI T1,.FHSLF - RPACS ;READ PAGE ACCESS -CHKA2: HLLM T2,LASTPG ;SAVE ACCESS WITH ADDRESS -CHKA1: HLLZ TT,T2 ;RETURN ACCESS IN TT - POP P,R - POP P,T2 - POPJ P, -; > ;END FTDEC20 - - IFN FTEXEC,< -CHKA4: SKPNKL ;KL10? - JRST [MAP TT,0(R) ;YES, GET PAGING DATA - TLNN TT,(1B8) ;MAPPED REF? - JRST CHKA5 ;NO, ALLOW IT - TLNN TT,(1B1) ;HARD PAGE FAIL? - TLNN TT,(1B2) ;OR NO ACCESS? - JRST CHKA3 ;YES - TLNN TT,(1B3+1B4) ;WRITE ALLOWED? - JRST CHKA7 ;NO - JRST CHKA5] ;YES - SKPKI ;KI10? - JRST CHKA8 ;NO, NO MAP INSTRUCTION - MAP TT,0(R) ;GET ACCESS BITS FOR PAGE - TRNN TT,1B18 ;PAGE FAIL? - JRST CHKA6 ;NO, GO INSPECT DATA - TRNE TT,1B22 ;YES, HAVE MATCH? - JRST CHKA3 ;NO, PAGE HAS NO ACCESS -CHKA6: TRNN TT,1B20+1B22 ;WRITABLE OR NO MATCH? (UNMAPPED REF) - IFN FTDEC20,< -CHKA7: SKIPA TT,[PM%RD+PA%EX] ;NO -CHKA8: -CHKA5: MOVSI TT,(PM%RD+PM%WT+PA%EX) ;YES - POPJ P, - -CHKA3: MOVSI TT,(1B5) ;SAY NO ACCESS - POPJ P, - > - IFE FTDEC20,< -CHKA7: JRST (TT1) ;CAN NOT WRITE -- INDICATE HISEG -CHKA5: JRST 1(TT1) ;CAN WRITE -- INDICATE LOWSEG -CHKA3: POPJ P,0 ;PAGE FAIL -- INDICATE ERROR -CHKA8: CONO APR,NXMKA ;CLEAR NXM FLAG - MOVE TT,(R) ;SEE IF NXM SETS - CONSO APR,NXMKA ;TEST NXM FLAG - JRST 1(TT1) ;OK - POPJ P,0 ;ERROR - >> ;END FTEXEC AND FTDEC20 -; IFN FTDEC20,< -GETH20: IFN FTEXEC,< - SKPUSR - JRST GETHSZ> ;NO HIGHSEG IN EXEC MODE -; SKIPN JDTFLG# ;JOB DATA AREA VALID? -; JRST GETHSZ ;NO, ASSUME NO HIGHSEG -; MOVE T,.JBHSO ;CHECK SPECIAL LOSEG CELL -; LSH T,^D9 ;MAKE PAGE INTO ADDRESS -; SKIPN T ;BUT IF NOTHING SETUP, -; MOVEI T,400000 ;ASSUME USUAL -; SKIPN .JBHRL ;ANY HIGHSEG? -GETHSZ: SETZ T, ;NO, SAY NO HIGHSEG - POPJ P, ; >;END IFN FTDEC20 -XLIST - - IFN FTFILE,< -;MAP AN ADDRESS -CVTADR: SKIPN EPTUPT ;$U GIVEN - JRST CPOPJ1 ;NO - HLRZ T,EPTUPT ;EXEC PAGING - JUMPE T,CVTAD2 ;NO - LDB T,[POINT 9,R,26];GET PAGE # - CAIGE T,340 ;IS THERE A MAP ENTRY? - JRST CPOPJ1 ;NO--LOOK IN PHYSICAL CORE - CAIL T,400 ;PER PROCESS - JRST CVTAD1 ;NO--JUST LIKE USER - PUSH P,R ;SAVE ARGUMENT - LSH T,-1 ;CONVERT TO 1/2 WORD - HRRZ R,EPTUPT ;GET ADDRESS OF UPT - ANDI R,17777 ;JUST PAGE # - LSH R,9 ;CONVERT TO WORD - ADDI R,400-<340/2>(T) ;FOR THIS PAGE - JRST CVTAD3 ;COMPUTE ADDRESS -CVTAD1: HLRZ T,EPTUPT ;GET EPT ADDRESS - SKIPA -CVTAD2: HRRZ T,EPTUPT ;GET UPT ADDRESS - ANDI T,17777 ;JUST PAGE # - PUSH P,R ;SAVE R - LSH T,9 ;CONVERT TO WORD - LSH R,-12 ;CONVERT TO 1/2 WORD IN MAP - ANDI R,377 ;MASK OUT JUNK - ADD R,T ;ADDRESS OF MAP ENTRY -CVTAD3: PUSHJ P,FETX ;FETCH PAGE TABLE ENTRY - MOVEI T,017000 ;ERROR - POP P,R ;RESTORE R - TRNN R,1000 ;ODD PAGE - HLRZ T,T ;NO--FLIP ENTRY - TRZN T,400000 ;VAILD ENTRY - POPJ P,0 ;NO--ERROR - ANDI T,17777 ;JUST PAGE # - LSH T,9 ;CONVERT TO PAGE # - ANDI R,000777 ;GET NEW ADDRESS - IOR R,T ; .. - JRST CPOPJ1 ;GIVE GOOD RETURN - > ;END FTFILE -LIST - -SUBTTL BINARY TO SYMBOLIC CONVERSION - -; PUSHJ P,LOOK ;AC T CONTAINS BINARY TO BE INTERPRETED -; RETURN 1 ;NOTHING AT ALL FOUND THAT'S USEFUL -; RETURN 2 ;SOMETHING FOUND, BUT NO EXACT MATCH -; RETURN 3 ;EXACT MATCH FOUND AND PRINTED - -LOOK: MOVEM T,TEM ;SAVE VALUE BEING LOOKED UP - PUSHJ P,CSHVER ;SEE IF CACHE IS USEFUL - JRST LOOKC2 ;ITS NOT. DO IT THE OLD WAY - MOVE T,TEM ;RECOVER VALUE - MOVSI R,-NSYMCS ;CHECK SYMBOL CACHE FIRST -LOOKC1: SKIPE W1,SYMCSH(R) ;GET POINTER AND CHECK IN USE - CAME T,1(W1) ;VALUE SAME? - SKIPA ;NO. DON'T LOOK AT IT THEN - JRST [MOVE W2,0(W1) ;CHECK SYMBOL - TLNE W2,(DELI+DELO) ;DELETED? - JRST .+1 ;YES, IGNORE IT - MOVEM W1,SYMPNT ;GOOD ONE - JUMPL W1,LOOKO2 ;WAS OUTSIDE LOCAL - JRST LOOKO4] ;WAS GLOBAL OR PROGRAM - AOBJN R,LOOKC1 -LOOKC2: PUSHJ P,SYMSET ;SET UP SYM SEARCH POINTER AND COUNT - SETZM SYMPNT ;INIT "OUTSIDE LOCAL" FLAG - TRZ F,MDLCLF!PNAMEF ;INIT FLAGS - TLZ F,(1B0) ;CLEAR SYMBOL TYPED FLAG - MOVE T,TEM ;RESTORE VALUE BEING LOOKED UP - JUMPGE R,CPOPJ ;RETURN, NOTHING FOUND - -LOOK1: MOVE W2,(R) ;GET FLAGS FOR SYMBOL - TLNN W2,(PNAME) ;PROGRAM NAME? - JRST [JUMPE W2,LOOK3 ;YES, IGNORE NULL PROGRAM NAMES - TRO F,PNAMEF ;SET PROGRAM NAME FLAG - JRST LOOK3] ;GET NEXT SYMBOL - CAML T,1(R) ;VALUE TOO LARGE? - TLNE W2,(DELI!DELO) ;DELETED? - JRST LOOK3 ;YES, GET NEXT SYMBOL - TLNN W2,(GLOBL) ;NOT PROGRAM NAME. GLOBAL SYMBOL? - TRNN F,PNAMEF ;LOCAL SYMBOL. INSIDE SPECIFIED PROGRAM? - JRST LOOK5 ;CHECK FOR BEST VALUE SO FAR - CAIGE T,20 ;QUANT IS IN AC RANGE? - JRST LOOK3 ;YES, IGNORE OUTSIDE LOCALS - MOVE W,1(R) ;GET VALUE - XOR W,T ;COMPARE - JUMPL W,LOOK3 ;REJECT IF SIGNS DIFFERENT - SKIPN W2,SYMPNT ;HAVE ANY OUTSIDE LOCAL NOW? - JRST LOOK2 ;NO, USE THIS ONE - MOVE W,1(R) ;COMPARE VALUES - SUB W,1(W2) - JUMPLE W,LOOK3 ;REJECT UNLESS BETTER - -LOOK2: TRZ F,MDLCLF ;NOTE NO AMBIGUITY NOW - HRRZM R,SYMPNT ;SAVE POINTER TO SYMBOL -LOOK3: AOBJN R,.+1 - AOBJN R,LOOK3A ;ADVANCE POINTER TO NEXT SYM. ANY LEFT? - IFE FTFILE,< - TRNN R,1B18 ;HIGH SEGMENT SEARCH? - SKIPL R,SAVHSM ;NO, SEARCH HIGH SEG TABLE , IF ANY - > - MOVE R,@SYMP ;NO, WRAP AROUND END OF TABLE -LOOK3A: AOJLE S,LOOK1 ;TRANSFER IF MORE SYMBOLS TO LOOK AT - SKIPE W2,SYMPNT ;OUTSIDE LOCALS FOUND? - TRNE F,MDLCLF ;THAT ARE NOT MULTIPLY SYMBOLED? - JRST LOOK4 ;NO - JUMPGE F,LOOKO1 ;JUMP IF NO REGULAR SYMBOL FOUND - MOVE W,1(W2) ;GET OUTSIDE LOCAL VALUE - CAMG W,1(W1) ;BETTER THAN REGULAR SYM VALUE? - JRST LOOK4 ;NO, USE REGULAR SYM -LOOKO1: HRLI W1,(1B0) ;FLAG OUTSIDE LOCAL - PUSHJ P,SYMCSI ;ADD TO SYMBOL CACHE -LOOKO2: MOVE W1,SYMPNT ;PICK UP POINTER TO SYMBOL - CAME T,1(W1) ;VALUE IDENTICAL? - JRST [SUB T,1(W1) ;NO, COMPUTE DIFFERENCE - JRST CPOPJ1] ;RETURN INEXACT - PUSHJ P,SPT0 ;YES, TYPE IT OUT - MOVEI T,"#" - PUSHJ P,TOUT ;TYPE # TO SHOW POSSIBLE AMBIGUITY - JRST LOOKO3 ;DOUBLE SKIP RETURN - -LOOK4: SETZM SYMPNT ;FORGET ANY OUTSIDE LOCAL SEEN - JUMPGE F,CPOPJ ;RETURN 1 IF NO GOOD SYMBOLS FOUND - SUB T,1(W1) ;SOMETHING FOUND, CALCULATE HOW FAR OFF - JRST CPOPJ1 ;RETURN 2, SOMETHING FOUND BUT NOT EXACT - -LOOK5: MOVE W2,1(R) ;GET VALUE FROM TABLE - XOR W2,T ;COMPARE SIGNS - JUMPL W2,LOOK3 ;REJECT IF SIGNS DIFFERENT - JUMPGE F,LOOK6 ;TRANSFER IF NOTHING FOUND YET - MOVE W,1(R) ;GET VALUE FROM TABLE - SUB W,1(W1) ;COMPARE WITH BEST VALUE SO FAR - JUMPLE W,LOOK3 ;REJECT IF WORSE -LOOK6: HRR W1,R ;SAVE AS BEST VALUES SO FAR - TLO F,(1B0) ;SET FLAG SHOWING SOMETHING FOUND - JUMPN W2,LOOK3 ;IF NOT PERFECT, CONTINUE LOOKING - HRLI W1,0 ;FLAG GLOBAL OR PROGRAM LOCAL - PUSHJ P,SYMCSI ;ADD TO SYMBOL CACHE -LOOKO4: PUSHJ P,SPT0 ;PERFECT, TYPE IT OUT -LOOKO3: AOS (P) ;SKIP TWICE - JRST CPOPJ1 -;ADD SYMBOL TO SYMBOL CACHE - -SYMCSI: AOS W2,SYMCSP ;ROUND-ROBIN INSERT - CAIL W2,NSYMCS ;WRAPAROUND? - SETZB W2,SYMCSP ;YES - MOVEM W1,SYMCSH(W2) ;STORE POINTER - POPJ P, - - -;VERIFY CACHE IS NOW USEFUL, I.E. IT POINTS TO THE PROPER SYMBOL -;TABLE - -CSHVER: PUSHJ P,SYMSET ;GET CURRENT POINTERS - CAMN R,OLDSYM ;SAME AS PREVIOUS? - JRST CPOPJ1 ;YES. GO USE IT - MOVEM R,OLDSYM ;SAVE CURRENT SYMBOL POINTER - ; AND FALL THROUGH TO FLUSH CACHE -;CLEAR SYMBOL CACHE - -CLRCSH: MOVE TT1,[SYMCSH,,SYMCSH+1] - SETZM -1(TT1) - BLT TT1,SYMCSH+NSYMCS-1 - POPJ P, - -CONSYM: MOVEM T,LWT - IFN FTFILE,< - MOVEM T,POKER+1> ;STORE FOR /P/M LOGIC - TRNN F,LF1 - JRST @SCH ;PIN OR FTOC - TRNE F,CF1 - JRST FTOC - -PIN: TLC T,700000 ;PRINT INSTRUCTION - TLCN T,700000 - JRST INOUT ;IN-OUT INSTRUCTION OR NEG NUM - AND T,[XWD 777000,0] ;EXTRACT OPCODE BITS - JUMPE T,HLFW ;TYPE AS HALF WORDS -; IFN FTDEC20,< - TLNE T,(700B8) ;NO BUILT-IN OPCODES .L. 100 -;> - PUSHJ P,OPTYPE -; IFN FTDEC20,< - TRNE F,ITF ;INSTRUCTION TYPED? - JRST PFULI1 ;YES - MOVE T,LWT ;NO, GET WORD - PUSHJ P,LOOK ;TRY FOR FULL WORD MATCH - JRST PFULI1 ;NOT FOUND - JRST PFULI1 ;CLOSE IS NOT GOOD ENOUGH - POPJ P, ;FOUND AND PRINTED - -PFULI1: ;> - MOVSI T,777000 - AND T,LWT - TRNE F,ITF ;HAS INSTRUCTION BEEN TYPED? - JRST PIN2 ;YES - PUSHJ P,LOOK ;NO, LOOK IN SYMBOL TABLE - JRST HLFW ;NOTHING FOUND, OUTPUT AS HALFWORDS - JRST HLFW ;NO EXACT MATCH, OUTPUT AS HALFWORDS -PIN2: TRO F,NAF ;EXACT MATCH TYPED, ALLOW NEG ADDRESSES - - PUSHJ P,TSPC - LDB T,[XWD 270400,LWT] ;GET AC FIELD - JUMPE T,PI4 - HLRZ W,LWT - CAIL W,(JRST) - CAILE W,256777 ;IS INST BETWEEN JRST AND XCT? - JRST [PUSHJ P,PAD ;NO, PRINT SYMBOLIC AC - JRST PI3A] - PUSHJ P,TOC ;YES, PRINT NUMERIC AC -PI3A: MOVEI W1,"," - PUSHJ P,TEXT -PI4: MOVE W1,LWT - MOVEI T,"@" - TLNE W1,20 ;CHECK FOR INDIRECT BIT - PUSHJ P,TOUT - HRRZ T,LWT - LDB W,[XWD 331100,LWT] ;INSTRUCTION BITS - IFN FTDEC20,< - MOVE W1,W ;GET COPY - TRC W1,600 - TRNN W1,710 ;IS INST TRXX OR TLXX? - JRST [PUSHJ P,TOC ;YES, PRINT ADDRESS NUMERIC - JRST PI7]> ;END IFN FTDEC20 - CAIL W,240 - CAILE W,247 - JRST PI8 ;ALL (EXCEPT ASH,ROT,LSH) HAVE SYMBOLIC ADRS - TLNN W1,20 - CAIN W,_-33 - JRST PI8 ;JFFO AND @ GET SYMBOLIC ADDRESSES - PUSHJ P,PADS3A ;ONLY ABSOLUTE ADDRESSING FOR LSH, ASH, AND ROT -PI7: TRZ F,NAF - LDB R,[XWD 220400,LWT] ;INDEX REGISTER CHECK - JUMPE R,CPOPJ ;EXIT - MOVEI T,"(" - PUSHJ P,TOUT - MOVE T,R - PUSHJ P,PAD - MOVEI T,")" - JRST TOUT ;EXIT - -PI8: PUSHJ P,PAD - JRST PI7 - -HLFW: REPEAT 0,< MOVE T,LWT - CAML T,[DDTINT SAVPI] - CAMLE T,[DDTINT BNADR+2] - SKIPA - JRST PAD> - HLRZ T,LWT ;PRINT AS HALF WORDS - JUMPE T,HLFW1 ;TYPE ONLY RIGHT ADR IF LEFT ADR=0 - TRO F,NAF ;ALLOW NEGATIVE ADDRESSES - PUSHJ P,PAD - MOVSI W1,(ASCII /,,/) - PUSHJ P,TEXT2 ;TYPE ,, -HLFW1: HRRZ T,LWT - -;PRINT ADDRESSES (ARG USUALLY 18 BITS BUT CAN BE 36 BITS) - -PAD: ANDI T,-1 - JRST @AR ;PADSO OR PAD1 - -PADSO: JUMPE T,FP7B ;PRINT A ZERO - PUSHJ P,LOOK - JRST PADS3 ;NOTHING FOUND, TYPE NUMERIC - SKIPA W2,1(W1) ;SOMETHING FOUND, GET VALUE - POPJ P, ;EXACT MATCH FOUND AND TYPED - IFN FTDEC20,< - CAIGE T,1000> - IFE FTDEC20,< - IFE FTEXEC!FTFILE,< - CAIGE T,100> ;IN USER MODE, PRINT NUMERIC IF SYMBOL OFF - IFN FTEXEC!FTFILE,< - CAIGE T,200> ; BY 100(8) OR MORE- 200(8) FOR KLDDT - > - CAIGE W2,30000 ;PRINT ADRS .LT. 30000 NUMERICALLY (KLDDT) - JRST PADS3 ;PRINT ADDRESS NUMERICALLY - MOVE W2,TEM ;GET ORIGINAL QUANTITY - CAIL W2,-100 ;ADDRESS BETWEEN -100 AND -1? - JRST PADS3 ;YES, PRINT NUMERICALLY - MOVEM T,TEM - PUSHJ P,SPT0 - MOVEI T,"#" - SKIPE SYMPNT ;SYMBOL IS OUTSIDE LOCAL? - PUSHJ P,TOUT ;YES, FLAG - MOVEI T,"+" -PADS1A: PUSHJ P,TOUT - HRRZ T,TEM -PAD1: JRST TOC ;EXIT -PADS3: MOVE T,TEM -PADS3A: TRNE F,NAF - CAIGE T,776000 - JRST TOC -PADS3B: MOVNM T,TEM - MOVEI T,"-" - JRST PADS1A - -INOUT: TDC T,[XWD -1,400000] ;IO INSTRUCTION OR NEG NUM - TDCN T,[XWD -1,400000] - JRST PADS3B ;TYPE AS NEG NUM - LDB R,[POINT 7,T,9] ;PICK OUT IO DEVICE BITS - CAIL R,700_-2 ;IF DEVICE .L. 700, THEN TYPE - JRST HLFW ;TYPE AS HALF WORDS - LDB R,[POINT 3,T,12] - DPB R,[POINT 6,T,8] ;MOVE IO BITS OVER FOR OP DECODER - PUSHJ P,OPTYPE - PUSHJ P,TSPC - MOVSI T,077400 - AND T,LWT - JUMPE T,PI4 - PUSHJ P,LOOK ;LOOK FOR DEVICE NUMBER - JRST INOUT2 ;NOTHING FOUND, PRINT AS OCTAL - JRST INOUT2 ;NO EXACT MATCH, PRINT AS OCTAL - JRST PI3A ;EXACT MATCH TYPED -INOUT2: MOVE T,TEM - LSH T,-30 - PUSHJ P,TOC - JRST PI3A - -MASK: TLNE F,(QF) - JRST MASK1 - IFE FTFILE,< - MOVEI T,MSK -MASK2: MOVEI W,1 - MOVEM W,FRASE1 - JRST QUANIN - > - IFN FTFILE, -MASK1: MOVEM T,MSK - JRST RET - -SUBTTL SEARCH LOGIC - -EFFEC: TLO F,(LTF) - HRRZ T,T -WORD: MOVEI R,322000-326000 ;JUMPE-JUMPN -NWORD: ADDI R,326000+40*T ;JUMPN T, - HRLM R,SEAR2 - TLZN F,(QF) - JRST ERR - SETCAM T,WRD - MOVSI T,FRASE-DEN-1 ;PREVENT TYPE OUT OF DDT PARTS - SETCMM FRASE(T) - AOBJN T,.-1 - MOVE T,ULIMIT - TLNE F,(SAF) - TLO F,(QF) ;SIMULATE A $Q TYPED - PUSHJ P,SETUP - PUSHJ P,CRF -SEAR1: PUSHJ P,FETCH - IFE FTDEC20,< - JRST SEAR2B> - IFN FTDEC20,< - JRST [MOVEI R,777 ;FETCH FAILED, BUMP TO NEXT PAGE - IORB R,DEFV - JRST SEAR2A]> ;CONTINUE SEARCH - TLNE F,(LTF) ;CHECK FOR EFFECTIVE ADDRESS SEARCH - JRST EFFEC0 - EQV T,WRD - AND T,MSK -SEAR2G: XCT SEAR2 ;(JUMPE T, OR JUMPN T,) TO SEAR3 IF FOUND -SEAR2A: AOS R,DEFV ;GET NEXT LOCATION - TRNN R,777 ;CHECK LISTEN ONLY ONCE PER PAGE - PUSHJ P,LISTEN ;ANYTHING TYPED? - CAMLE R,ULIMIT ;OR END OF SEARCH? - JRST SEARFN ;YES - JRST SEAR1 ;NO, LOOK SOME MORE - - IFE FTDEC20,< -SEAR2B: MOVEI R,400000-1 ;MOVE UP TO HI SEGMENT - IORB R,DEFV ;PUT IN MEMORY TOO - TRNN R,400000 ;ALREADY IN HI SEGMENT? - JRST SEAR2A> ;NO -SEARFN: SETCMM LWT ;COMPLEMENT BITS BACK AND STOP SEARCH - JRST DD1 - -SEAR3: PUSHJ P,LISTEN ;ANY TYPEIN? - SKIPA ;NO - JRST SEARFN ;YES, TERMINATE SEARCH - MOVE R,DEFV - PUSHJ P,FETCH - JRST ERR - TLZ F,(STF) ;GET RID OF SUPPRESS TYPEOUT MODE - MOVE T,DEFV - PUSHJ P,PSHLLC ;PUSH OLD LOCATION COUNTER - PUSHJ P,LI1 ;CALL REGISTER EXAMINATION LOGIC TO TYPE OUT - PUSHJ P,CRF - SETCMM LWT - SETCMM TEM -SEAR4: JRST SEAR2A - -EFFEC0: MOVEI W,100 - MOVEM W,TEM -EFFEC1: MOVE W,T - LDB R,[POINT 4,T,17] ;GET IR FIELD - JUMPE R,EFFEC2 - PUSHJ P,FETCH - JRST ERR - HRRZS T ;GET RID OF BITS IN LEFT IN ORDER - ADDI T,(W) ; PREVENT AROV WHEN ADDING ADDRESSES -EFFEC2: HRR R,T - TLNN W,20 ;INDIRECT BIT CHECK - JRST EFFEC3 - SOSE,TEM - PUSHJ P,FETCH - JRST SEAR4 - JRST EFFEC1 -EFFEC3: EQV T,WRD - ANDI T,777777 - JRST SEAR2G - -SETUP: TLNN F,(QF) ;QUANTITY TYPED? - IFE FTDEC20,< - MOVEI T,777777> ;NO, DEFAULT HIGH ADR IS TOP OF MEMORY - IFN FTDEC20,< - IFN FTEXEC,< - HRRZ T,.JBFF> ;DEFAULT UPPER LIMIT - IFE FTEXEC,< - MOVEI T,777777>> - HRRZM T,ULIMIT ;SAVE LAST ADDRESS OF SEARCH - HRRZS R,DEFV ;GET 1ST ADDRESS - TLNN F,(FAF) ;WAS A 1ST ADR SPECIFIED? - SETZB R,DEFV ;NO, MAKE IT ZERO - CAMLE R,ULIMIT ;LIMITS IN A REASONABLE ORDER? - JRST ERR ;NO - POPJ P, ;YES, RETURN - -ZERO: TLNN F,(CCF) - JRST ERR - PUSHJ P,SETUP - HRRZ S,@SYMP ;GET 1ST ADR OF SYMBOL TABLE - HLRE W1,@SYMP ;GET LENGTH OF SYM TABLE - SUB W1,S ;GET NEG OF LAST ADR - MOVNS W1 ;GET POS LAST ADR - MOVEI T,0 ;0 TO STORE IN MEMORY -ZERO1: TRNN R,777760 - JRST ZEROR ;OK TO ZERO AC'S - IFE FTDEC20,< - IFN FTEXEC,< - SKPUSR - > - IFN FTEXEC!FTFILE,< - JRST [CAIGE R,XZLOW - MOVEI R,XZLOW ;IN EXEC MODE, DON'T ZERO 20-40 - JRST ZERO3 ] > - > - IFE FTFILE,< - CAIGE R,ZLOW - MOVEI R,ZLOW ;DON'T ZERO 20 THRU ZLOW -ZERO3: CAIL R,DDTX - CAILE R,DDTEND - JRST .+2 - MOVEI R,DDTEND ;DON'T ZERO DDT - IFE FTDEC20,< - CAML R,S - CAMLE R,W1> - JRST .+2 - HRRZ R,W1 ;DON'T ZERO SYMBOL TABLE - > - IFN FTFILE,< -ZERO3:> -ZEROR: CAMLE R,ULIMIT ;ABOVE LIMITS? - JRST DD1 ;YES, STOP - PUSHJ P,DEPMEM ;DEPOSIT T - IFE FTFILE,< - TROA R,377777 ; - AOJA R,ZERO1 - TRNN R,400000 ;HI SEGMENT? - AOJA R,ZERO1 ;NO, KEEP GOING - > - JRST DD1 ;FINISH - IFN FTFILE, - -SUBTTL OUTPUT SUBROUTINES - -FTOC: ;NUMERIC OUTPUT SUBROUTINE -TOC: HRRZ W1,ODF - CAIN W1,10 ;IS OUPUT RADIX NOT OCTAL, OR - TLNN T,-1 ;ARE THERE NO LEFT HALF BITS? - JRST TOCA ;YES, DO NOTHING SPECIAL - HRRM T,TOCS ;NO, TYPE AS HALF WORD CONSTANT - HLRZS T ;GET LEFT HALF - PUSHJ P,TOC0 ;TYPE LEFT HALF - MOVSI W1,(ASCII /,,/) - PUSHJ P,TEXT2 ;TYPE ,, - XCT TOCS ;GET RIGHT HALF BACK -TOCA: HRRZ W1,ODF ;IS OUTPUT RADIX DECIMAL? - CAIN W1,12 - JRST TOC4 ;YES,TYPE SIGNED WITH PERIOD -TOC0: LSHC T,-43 - LSH W1,-1 ;W1=T+1 - DIVI T,@ODF - HRLM W1,0(P) - SKIPE T - PUSHJ P,TOC0 - HLRZ T,0(P) - ADDI T,"0" - JRST TOUT - -TOC4: MOVE A,T ;TYPE AS SIGNED DECIMAL INTEGER - JUMPGE T,TOC5 - MOVEI T,"-" - PUSHJ P,TOUT -TOC5: PUSHJ P,FP7 ;DECIMAL PRINT ROUTINE -TOC6: MOVEI T,"." - JRST TOUT - -;SYMBOL OUTPUT SUBROUTINE - -SPT0: HRRZM W1,SPSAV ;SAVE POINTER TO TYPED SYM -SPT: ;RADIX 50 SYMBOL PRINT - LDB T,[POINT 32,0(W1),35] ;GET SYMBOL -SPT1: IDIVI T,50 - HRLM W1,0(P) - JUMPE T,SPT2 - PUSHJ P,SPT1 -SPT2: HLRZ T,0(P) - JUMPE T,CPOPJ ;FLUSH NULL CHARACTERS - ADDI T,260-1 - CAILE T,271 - ADDI T,301-272 - CAILE T,332 - SUBI T,334-244 - CAIN T,243 - MOVEI T,256 - JRST TOUT - -SYMD: ;$D ;DELETE LAST SYM & PRINT NEW - HRRZ R,SPSAV ;PICK UP POINTER TO LAST SYM - JUMPE R,ERR - MOVE T,(R) ;PICK UP SYMBOL - TLO T,(DELO) ;TURN ON "SUPPRESS OUTPUT" BIT - PUSHJ P,DSYMER ;STORE BACK IN SYMBOL TABLE - MOVE T,LWT - JRST CONSYM ;PRINT OUT NEXT BEST SYMBOL - -;FLOATING POINT OUTPUT - -TFLOT: MOVE A,T - JUMPGE A, TFLOT1 - MOVNS A - JFCL ;PREVENT OVERFLOW MESSAGE - ; FROM FORTRAN PROGRAMS - MOVEI T,"-" - PUSHJ P,TOUT - TLZE A,400000 - JRST FP1A -TFLOT1: TLNN A, 400 - JRST TOC5 ;IF UNNORMALIZED, TYPE AS DECIMAL INTEGER - -FP1: MOVEI B,0 - CAMGE A,FT01 - JRST FP4 - CAML A,FT8 - AOJA B,FP4 -FP1A: MOVEI C,0 - -FP3: MULI A,400 - ASHC B,-243(A) - SETZM TEM1 ;INIT 8 DIGIT COUNTER - SKIPE A,B ;DON'T TYPE A LEADING 0 - PUSHJ P,FP7 ;PRINT INTEGER PART OF 8 DIGITS - PUSHJ P,TOC6 ;PRINT DECIMAL POINT - MOVNI A,10 - ADD A,TEM1 - MOVE W1,C -FP3A: MOVE T,W1 - MULI T,12 - PUSHJ P,FP7B - SKIPE,W1 - AOJL A,FP3A - POPJ P, - -FP4: MOVNI C,6 - MOVEI W2,0 -FP4A: ASH W2,1 - XCT,FCP(B) - JRST FP4B - FMPR A,@FCP+1(B) - IORI W2,1 -FP4B: AOJN C,FP4A - PUSH P,W2 ;SAVE EXPONENT - PUSH P,FSGN(B) ;SAVE "E+" OR "E-" - PUSHJ P,FP3 ;PRINT OUT FFF.FFF PART OF NUMBER - POP P,W1 ;GET "E+" OR "E-" BACK - PUSHJ P,TEXT - POP P,A ;GET EXPONENT BACK - -FP7: IDIVI A,12 ;DECIMAL OUTPUT SUBROUTINE - MOVMS B ;MAKE POSITIVE - AOS TEM1 - HRLM B,(P) - JUMPE A,FP7A1 - PUSHJ P,FP7 - -FP7A1: HLRZ T,(P) -FP7B: ADDI T,260 - JRST TOUT - - 353473426555 ;1.0E32 - 266434157116 ;1.0E16 -FT8: 233575360400 ;1.0E8 - 216470400000 ;1.0E4 - 207620000000 ;1.0E2 - 204500000000 ;1.0E1 -FT: 201400000000 ;1.0E0 - 026637304365 ;1.0E-32 - 113715126246 ;1.0E-16 - 146527461671 ;1.0E-8 - 163643334273 ;1.0E-4 - 172507534122 ;1.0E-2 -FT01: 175631463146 ;1.0E-1 -FT0=FT01+1 - -FCP: CAMLE A, FT0(C) - CAMGE A, FT(C) - Z FT0(C) - -FSGN: ASCII .E-. - ASCII .E+. - -TEXTT: MOVE W1,T -TEXT: TLNN W1,774000 ;LEFT JUSTIFIED UNLESS LEFT CHAR IS NULL - LSH W1,35 -TEXT2: MOVEI T,0 ;7 BIT ASCII TEXT OUTPUT SUBROUTINE - LSHC T,7 - PUSHJ P,TOUT - JUMPN W1,TEXT2 - POPJ P, - -R50PNT: LSH T,-36 ;RADIX 50 SYMBOL PRINTER - TRZ T,3 - PUSHJ P,TOC - PUSHJ P,TSPC - MOVEI W1,LWT ;SETUP FOR SPT - JRST SPT - -SIXBP: MOVNI W2,6 ;SIXBIT PRINTER - MOVE W1,LWT -SIXBP1: MOVEI T,0 - ROTC T,6 - ADDI T,40 - PUSHJ P,TOUT - AOJL W2,SIXBP1 - POPJ P, - -CRN: MOVEI T,15 ;CARRIAGE RETURN - JRST TOUT - - -CRF: PUSHJ P,CRN - MOVEI T,12 ;LINE FEED - JRST TOUT - -LCT: IFE FTDEC20,< - MOVEI T,11 - IFN FTEXEC,< - SKPEXC > - JRST TOUT> ;IN USER MODE, TYPE A TAB - IFN FTEXEC!FTDEC20,< - PUSHJ P,TSPC - PUSHJ P,TSPC > - -TSPC: MOVEI T,40 ;SPACE - JRST TOUT - -BITO: MOVEI R,BITT ;BYTE OUTPUT SUBROUTINE - SKIPN OLDAR - MOVEM AR,OLDAR - HRRZI AR,TOC - TRZN F,Q2F - JRST ERR - MOVE T,WRD2 - MOVEM T,SVBTS - MOVEI T,^D36 - IDIV T,WRD2 - SKIPE T+1 - ADDI T,1 - MOVEM T,SVBTS2 - HRRZ SCH,R - JRST BASE1O - -BITT: MOVE T,SVBTS2 - MOVEM T,SVBT2 - MOVE T+1,LWT - MOVEM T+1,SVBT3 - PUSH P,LWT -BITT2: MOVEI T,0 - MOVE T+2,SVBTS - LSHC T,(T+2) - MOVEM T,LWT - MOVEM T+1,SVBT3 - CAIE AR,PADSO - PUSHJ P,TOCA - CAIE AR,TOC - PUSHJ P,PIN - SOSG SVBT2 - JRST BITT4 - MOVEI T,"," - PUSHJ P,TOUT - MOVE T+1,SVBT3 - JRST BITT2 - -BITT4: POP P,LWT - POPJ P, -XLIST - -SUBTTL PUNCH PAPER TAPE LOGIC - - IFN FTPTP,> ;END OF IFN FTPTP - ;FOR PAPER TAPE IO -LIST - -SUBTTL TELETYPE IO LOGIC - - IFN FTEXEC,< ;EXECUTIVE MODE TELETYPE I/O - - DTE==200 - DTEII=142 ;DTE20 INTERRUPT INST - DTEUNS=143 ;UNUSED - DTEEPW=144 ;EXAMINE PROTECTION WORD - DTEERW=145 ;EXAMINE RELOCATION WORD - DTEDPW=146 ;DEPOSIT PROTECTION WORD - DTEDRW=147 ;DEPOSIT RELOCATION WORD - DTEFLG=444 - DTET11=447 - DTEF11=450 - DTECMD=451 - DTEOPR=453 - DTEMTD=455 - DTEMTI=456 - .DTMTO==10B27 - .DTMMC==11B27 - .DTNMC==12B27 - - DTEN==4 ;MAX NUMBER OF DTE'S - TO11DB==1B22 ;TO 11 DOORBELL - CL11PT==1B26 ;CLEAR TO 10 DOORBELL - PI0ENB==1B32 ;PI CHANNEL 0 ENABLE - PIENB==1B31 ;ENABLE PI SETTING - DTEPRV==1B20 ;RESTRICTED BIT -;APR INTERNAL CLOCK SERVICE - -;CONI/CONO MTR, - -MTR==024 ;DEVICE CODE - -MTRLOD==1B18 ;LOAD BITS 21-23 -; 19-20 ;UNUSED, MBZ -MTREPA==1B21 ;ENABLE EXEC PI ACCOUNTING -MTRENA==1B22 ;ENABLE EXEC NON-PI ACCOUNTING -MTRAMN==1B23 ;ACCOUNTING METERS ON -MTRTBF==1B24 ;TIME BASE OFF -MTRTBN==1B25 ;TIME BASE ON -MTRCTB==1B26 ;CLEAR TIME BASE -; 27-32 ;UNUSED, MBZ -MTRPIA==7B35 ;PI ASSIGNMENT - -;CONI/CONO TIM - -TIM==020 ;DEVICE ASSIGNMENT - -TIMCIC==1B18 ;CLEAR INTERVAL COUNTER -; 19-20 ;UNUSED, MBZ -TIMITO==1B21 ;INTERVAL TIMER ON -TIMDON==1B22 ;DONE/CLEAR DONE -TIMICO==1B23 ;COUNTER OVERFLOW - -;GET TYPEIN CHARACTER - EXEC MODE - -XTIN: PUSHJ P,XLISTE ;TELETYPE CHARACTER INPUT - JRST .-1 - JUMPE T,XTIN ;FILTER NULLS - CAIE T,175 - CAIN T,176 - MOVEI T,33 ;CHANGE ALL ALT MODES TO NEW - IFN FTDEC20&<^-FTEDIT>,< ;IF NO FANCY EDITING... - CAIE T,"U"-100 ;^U? - CAIN T,177 ;RUBOUT? - JRST WRONG ;YES, TYPE XXX - > - IFE FTDEC20&<^-FTEDIT>,< ;IF FANCY EDITING... - CAIE T,177 ;DON'T ECHO EDIT CHARACTERS - CAIN T,"U"-100 - JRST XTIN1 - CAIE T,"R"-100 - CAIN T,"W"-100 - JRST XTIN1> - CAIN T,15 ;CR? - JRST [MOVEI T,12 ;YES, PRESET LF FOR NEXT TIME - MOVEM T,XNXTCH - MOVEI T,15 ;ECHO AND RETURN CR NOW - JRST .+1] - SKIPN TEXINF ;DON'T ECHO TAB UNLESS TEXT INPUT - CAIE T,11 - PUSHJ P,ECHO ;ECHO THE CHAR -XTIN1: POPJ P, - -;TYPEOUT CHARACTER FROM T - -XTOUT: SKPNKL ;KL10? - JRST KLXTYO ;YES - HRLM T,(P) - IMULI T,200401 ;GENERATE PARITY - AND T,[11111111] - IMUL T,[11111111] - HLR T,(P) - TLNE T,10 - TRC T,200 ;MAKE PARITY EVEN - CONSZ TTY,20 - JRST .-1 - DATAO TTY,T - ANDI T,177 ;FLUSH PARITY - POPJ P,0 -XLIST - REPEAT 0,< -KLXTYO: PUSHJ P,EBRIDX ;GET INDEX OF EPR IN TT2 - MOVEI T,.DTMTO(T) ;GET MONITOR OUTPUT COMMAND AND CHAR IN T - MOVEM T,DTECMD(TT2) ;PUT IN COMMAND WORD - SETZM DTEMTD(TT2) ;CLEAR DONE FLAG. - XCT DING11 ;RING THE DOORBELL - SKIPN DTEMTD(TT2) ;DONE YET? - JRST .-1 ;NO, LOOP - ANDI T,377 ;CLEAN UP CHARACTER IN T - POPJ P,0 ;RETURN -> -LIST -KLXTYO: PUSH P,0 - MOVE 0,T - PUSHJ P,$DTEXX ;PRINT CHAR - POP P,0 - ANDI T,177 - POPJ P, - -$DTEXX: PUSHJ P,EBRIDX ;GET INDEX OF EBR IN TT2 - SETZM DTEFLG(TT2) - MOVEM 0,DTECMD(TT2) ;LOAD COMMAND CODE - XCT DING11 ;RING -11 DOORBELL - SKIPN DTEFLG(TT2) - JRST .-1 ;WAIT TILL DONE - MOVE 0,DTEF11(TT2) - SETZM DTEFLG(TT2) - POPJ P, -;SKIP IF HAVE INPUT CHAR AND RETURN IT IN T - -XLISTE: SKIPE T,XNXTCH ;PRESET CHAR? - JRST [SETZM XNXTCH ;YES, RETURN IT ONCE - JRST XLIST1] - IFN FTYANK,< - SKIPE COMAND ;COMAND FILE? - JRST XPTRIN ;YES, READ IT - > - SKPNKL - JRST KLXLIS ;DO KL10 INPUT - CONSO TTY,40 ;NO, LISTEN FOR TTY - POPJ P, - DATAI TTY,T -XLIST1: ANDI T,177 - JRST CPOPJ1 -XLIST - REPEAT 0,< - -KLXLIS: PUSHJ P,EBRIDX ;GET EPT INDEX IN TT2 - SKIPN DTEMTI(TT2) ;ANY INPUT YET? - POPJ P, ;NO - MOVE T,DTEF11(TT2) ;GET IT - SETZM DTEMTI(TT2) ;YES - JRST XLIST1 -> -LIST -KLXLIS: PUSH P,0 - MOVEI 3400 ;SETUP DDT MODE INPUT REQ CODE - PUSHJ P,$DTEXX ;REQUEST TTY INPUT FROM PDP-11 - MOVEM 0,T - POP P,0 - ANDI T,177 - CAIN T,003 ;CONTROL C ? - JRST KLCC ;YES - SKIPN T ;ANY RESPONSE ? - POPJ P, ;NO, NON-SKIP RETURN - JRST XLIST1 -KLCC: MOVE T,[JRST KLCC1] - JRST XEC0 ;RESTORE BP'S ETC. - -KLCC1: CONO 0,0 ;CLEAR APR - MOVEM 0,KLCC0# - CONI 10,0 - TRNN 600000 ;IS CACHE ON ? - JRST KLCC2 ;NO - BLKO 14,0 ;YES, FLUSH CACHE - CONSZ 0,200000 - JRST .-1 ;WAIT TILL BUSY GOES AWAY - -KLCC2: PUSH P,TT2 - PUSHJ P,EBRIDX - MOVEI 403 - MOVEM DTECMD(TT2) ;END OF PROGRAM CALL - POP P,TT2 - MOVE 0,KLCC0 - XCT DING11 ;DOORBELL THE -11 - JRST . ;HANG UP, -11 WILL ABORT -;SAVE USER STATUS ('RETURN' TO DDT) - -XTTYRE: SKPNKL - JRST LTTYRE ;DO KL10 SAVE STATUS - SKIPE SAVTTY ;ALREADY HAVE IT? - JRST TTY1 ;YES - CONI TTY,SAVTTY ;SAVE PI ASSMT - CONO TTY,0 ;SET PI ASSMT TO 0 - MOVSI W2,(1000000) - CONSZ TTY,120 ;WAIT FOR PREVIOUS ACTIVITY TO FINISH - SOJG W2,.-1 ;BUT DON'T WAIT FOREVER - CONI TTY,W2 ;UPDATE STATUS BITS - DPB W2,[POINT 15,SAVTTY,32] - DATAI TTY,W2 - HRLM W2,SAVTTY -TTY1: CONO TTY,3410 ;INIT TTY FOR DDT - POPJ P, - -;RESTORE USER STATUS ('LEAVE' DDT) - -XTTYLE: SKPNKL - JRST LTTYLE ;DO KL10 RESTORE STATUS - CONSZ TTY,120 ;WAIT FOR LAST OUTPUT - JRST .-1 - CONO TTY,1200 ;CLEAR DONE FLAGS - MOVE T,SAVTTY - CONO TTY,0(T) ;RESTORE USER STATE - SETZM SAVTTY ;NOTE USER STATE NOW IN EFFECT - POPJ P, - -LTTYRE: SETZM DTEFLG - SETZM DTET11 - SETZM DTEF11 - MOVE T,DTEOPR - OR T,[CONO 200,TO11DB] - MOVEM T,DING11 - POPJ P, - -LTTYLE: MOVEI T,3000 - PUSHJ P,KLXTYO - JRST LTTYRE - -EBRIDX: SETZM TT2 - POPJ P, -XLIST -REPEAT 0,< -;ROUTINES TO SAVE AND RESTORE KL10 TTY STATUS -; WHICH AMOUNTS TO SAVING AND RESTORING DTE INTERRUPT -; INSTRUCTION IN LOCATION DTEII - -LTTYLE: MOVE T,MSTRDT ;GET ID OF MASTER DTE - LSH T,3 ;FIND EPT CHUNK - MOVE W2,SAVEBR ;THE OLD EBR - LSH W2,^D9 ;MAKE IT A CORE ADDRESS - ADDI W2,0(T) ;POINT TO BEGINNING OF EPT CHUNK - MOVEI T,DTEII(W2) ;WHERE TO DO RESTORE - HRLI T,SAVTTY ;WHERE TO RESTORE FROM - BLT T,DTEDRW(W2) ;UP THROUGH DEPOSIT, LAST WORD - HRRZ T,MTRCNI ;GET SAVED MTR CONI - CONO MTR,MTRLOD(T) ;RESTORE ALL STATES - HRRZ T,TIMCNI ;GET SAVED TIM CONI - TRZ T,TIMDON+TIMICO ;FLUSH CONI-ONLY BITS - CONO TIM,0(T) ;RESTORE STATE - SETZM SAVTTY ;NOTE PGM MODES NOW IN EFFECT - CONSZ PAG,TRPENB ;IS PAGING NOW ENABLED? - SKIPN DTEEPW(W2) ;YES SECONDARY PROTOCOL IN EFFECT, - POPJ P, ;JUST RETURN, DON'T TURN IT OFF - MOVEI T,.DTNMC ;WE WERE IN REGULAR PROTOCOL, SETUP OFF COMMAND - JRST DTEDCM ;DO COMMAND - - - -;CODE TO SAVE TTY STATE (I.E. THE DTE STATE FOR THE MASTER -11) - -LTTYRE: SKIPE SAVTTY ;PGM MODES IN EFFECT? - JRST LTTYR1 ;NO, DON'T SAVE - CONI MTR,MTRCNI ;SAVE MTR STATE - CONI TIM,TIMCNI ;SAVE TIM STATE - CONI PAG,T ;READ EBR - ANDI T,017777 - CONSO PAG,TRPENB ;PAGING ON NOW? - JRST LTTYR0 ;NO. EBR IS BOTH PHYSICAL AND VIRTUAL - MOVEI W1,0 ;YES. MUST SCAN MAP FOR VIRTUAL ADDRESS - LSH T,^D9 ;MAKE THIS A PHYSCIAL ADDRESS -LTTYR5: MAP W2,0(W1) ;GET PHYSICAL ADDRESS - TLNN W2,(1B2) ;ACCESSIBLE? - JRST LTTYR6 ;NO. SKIP THIS PAGE - AND W2,[37777777] ;GET PHYSICAL ADDRESS - CAMN W2,T ;IS THIS ONE THE EBR? - JRST [MOVE T,W1 ;YES. GET VIRTUAL ADDRESS - LSH T,-^D9 ;MAKE IT A PAGE - JRST LTTYR0] ;AND DONE -LTTYR6: ADDI W1,1000 ;NEXT PAGE - CAIG W1,777777 ;SCANNED ENTIRE SECTION? - JRST LTTYR5 ;NO. LOOK AT SOME MORE PAGES - HALT . ;YES. CAN'T FIND EPT. -LTTYR0: MOVEM T,SAVEBR ;SAVE EPT VIRTUAL ADDRESS - MOVSI T,-DTEN ;POLL ALL DTES - MOVE W2,[CONSO DTE,DTEPRV] ;GET TEST WORD - MOVE W1,[CONSO DTE,PI0ENB+7] ;TEST FOR PI0 ENABLED - ; OR PI ASSIGNMENT UP - MOVE W,[CONO DTE,0] ;PROTOTYPE CONO -LTTYR2: XCT W1 ;PI 0 UP ON THIS GUY? - JRST [HRRI W,PIENB+PI0ENB ;NO. SET PI0 - XCT W - XCT W1 ;NOW UP? - JRST LTTYR4 ;NO. DOESN'T EXIST THEN - TRZ W,PI0ENB ;TURN OFF ZERO - XCT W ;DO IT - JRST .+1] ;AND PROCEED - XCT W2 ;THIS THE MASTER? - JRST [MOVEI T,0(T) ;YES. GET ITS NUMBER - MOVEM T,MSTRDT ;SAVE IT - LSH T,^D<35-9> ;POSITION CODE IN B9 - ADD T,[CONO DTE,TO11DB] ;GET THE INSTRUCTION - MOVEM T,DING11 ;SAVE IT - JRST LTTYR3] ;AND DONE -LTTYR4: ADD W2,[1B9] ;NEXT DTE - ADD W,[1B9] - ADD W1,[1B9] ;ADJUST ALL I/O INSTRUCTIONS - AOBJN T,LTTYR2 ;POLL ALL OF THEM - HALT . ;CAN'T HAPPEN!!!!!!!!!!!!! -LTTYR3: MOVE T,SAVEBR ;GET EBR AGAIN - LSH T,^D9 ;MAKE IT A CORE ADDRESS - MOVE W2,MSTRDT ;GET MASTER'S NUMBER - LSH W2,3 ;HIS CHUNK - ADD T,W2 ;THE POSITION IN THE EPT - MOVE W2,T ;SAVE EBR FOR INDEXING - MOVSI T,DTEII(T) ;START OF EPT LOCATIONS TO SAVE - HRRI T,SAVTTY ;WHERE TO SAVE THEM - BLT T,SAVDRW - SKIPN DTEEPW(W2) ;USING PRIMARY PROTOCAL? - JRST LTTYR1 ;NO. GO ON - MOVE T,MSTRDT ;GET MASTER'S ID - LSH T,^D<35-9> ;POSITION CODE IN B9 - ADD T,[CONSZ DTE,TO11DB] ;GET TEST INSTRUCTION - XCT T ;WAIT FOR -11 TO ANSWER ALL DOORBELLS - JRST .-1 ;THE WAIT -LTTYR1: CONO MTR,MTRLOD+MTRTBF ;TURN OFF ALL METERS AND TIME BASE - CONO TIM,0 ;TURN OFF INTERVAL TIMER - MOVSI T,(HALT) - MOVEM T,DTEII(W2) ;NO INTERRUPTS - SETZM DTEEPW(W2) ;CLEAR EXAMINE PROTECTION WORD - MOVEI T,.DTMMC ;TURN ON SECONDARY TTY I/O SYSTEM -DTEDCM: PUSHJ P,EBRIDX ;GET EPT INDEX IN TT2 - SETZM DTEFLG(TT2) ;CLEAR DONE FLAG - MOVEM T,DTECMD(TT2) ;STORE COMMAND FOR 11 - XCT DING11 ;RING HIS DOORBELL - SKIPN DTEFLG(TT2) ;WAIT FOR FINISH - JRST .-1 - POPJ P, ;RETURN - -;ROUTINE TO LOAD EPT ADDRESS IN TT2. CALLED BY ROUTINES WISHING -;TO LOCATE THE MONITOR PROTOCOL LOCATIONS - -EBRIDX: MOVE TT2,SAVEBR ;GET EBR ADDRSSS - LSH TT2,^D9 ;MAKE IT A CORE ADDRESS - POPJ P, ;AND DONE - > ;END IFN FTEXEC -> -LIST - -;TELETYPE OUTPUT - COMMON START POINT - -TOUT: SETZM CHINP ;RESET INPUT LINE - SETZM CHINC -ECHO: PUSH P,T ;SAVE ORIG CHAR - CAIN T,33 ;CONVERT ESC - JRST [MOVEI T,"$" - JRST ECHO1] - CAIE T,15 ;CR OR LF? - CAIN T,12 - JRST ECHO1 ;YES, NO CONVERSION - CAIN T,"G"-100 ;BELL? - JRST ECHO1 ;NO CONVERSION - CAIN T,11 ;TAB? - IFE FTEXEC,< - JRST ECHO1> ;NO CONVERSION OF TAB IN USER MODE - IFN FTEXEC,< - JRST [SKPEXC - JRST ECHO1 ;DITTO - MOVEI T," " ;CONVERT TAB TO SPACES IN EXEC MODE - PUSHJ P,TOUT0 - MOVEI T," " - PUSHJ P,TOUT0 - MOVEI T," " - JRST ECHO1] - > ;END FTEXEC - CAIL T,40 ;CONTROL CHAR? - JRST ECHO1 ;NO - MOVEI T,"^" ;YES, INDICATE - PUSHJ P,TOUT0 - MOVE T,0(P) ;RECOVER ORIG CHAR - ADDI T,100 ;CONVERT TO PRINTING EQUIVALENT -ECHO1: PUSHJ P,TOUT0 ;DO DEVICE-DEPENDENT OUTPUT - POP P,T - POPJ P, - - IFE FTDEC20,< -OPDEF TTCALL [51B8] - -TOUT0: - IFN FTEXEC,< SKPUSR - JRST XTOUT > - IFN FTFILE,< SKIPE COMAND ;IS THERE A COMMAND FILE? - JRST PUTCHR> ;YES - - SKIPE TOPS20 - JRST .+3 - TTCALL 1,T ;OUTPUT A CHARACTER - POPJ P, - EXCH T1,T - PBOUT - EXCH T1,T - POPJ P, - -LISTEN: - IFN FTEXEC,< SKPUSR - JRST XLISTE > - IFE FTFILE,< - IFN FTYANK,< - SKIPE COMAND - JRST PTRIN>> - IFN FTFILE,< ;FILDDT? - SKIPE COMAND ;STILL READING COMAND FILE? - POPJ P,0 ; IF YES, DO NOT LOOK FOR INPUT - ; 1. SPEED UP FILDDT AND - ; 2. ALLOW USER TO TYPE AHEAD - ; (ONE CONTROL C) - > - SOSLE LCNT ;TIME TO DO TTCALL - POPJ P,0 ;NO--RETURN - MOVEI T,12 ;YES--RESET COUNT - MOVEM T,LCNT ; .. - SKIPE TOPS20 - JRST .+4 - TTCALL 2,T ;GET NEXT CHAR, NO IO WAIT - POPJ P, ;NO CHARACTER EXISTED, RETURN - JRST CPOPJ1 ;CHARACTER WAS THERE, SKIP RETURN - EXCH T1,T - MOVEI T1,.PRIIN - SIBE - AOS (P) - EXCH T1,T - POPJ P, - IFN FTEXEC,< -TTYRET: SKPUSR - JRST XTTYRET - SKIPN TOPS20 - POPJ P, - SKIPE SAVTTY ;ALREADY HAVE STATE ? - JRST TTYR1 ;YES - MOVEI T1,.PRIIN - RFMOD ;GET MODES - MOVEM T2,SAVTTY - RFCOC ;GET CC MODES - MOVEM T2,SAVTT2 - MOVEM T3,SAVTT3 -TTYR1: MOVEI T1,.PRIIN - RFMOD - TRZ T2,TT%WAK+TT%DAM - TRO T2,TT%WKF+TT%WKN+TT%WKP+TT%ECO+01B29 - SFMOD - MOVE T2,TTYCC2 - MOVE T3,TTYCC3 - SFCOC ;SETUP PROPER DDT MODES - MOVEI T1,.FHSLF - DIR - POPJ P, > - -TTYCC2: BYTE (2) 0,1,1,1,1,1,1,2,1,2,3,1,1,2,1,1,1,1 -TTYCC3: BYTE (2) 1,1,1,1,1,1,1,1,1,3,1,1,1,1 - IFE FTEXEC, -TTYCLR: - IFN FTEXEC,< SKPUSR > - POPJ P, - SKIPE TOPS20 - JRST .+5 - TTCALL 14, ;CLEAR ^O, SKIP ON INPUT CHARS - POPJ P, ;NO INPUT CHARS, OR EXEC MODE - TTCALL 11, ;FLUSH ALL - JRST .+7 - MOVEI 1,.PRIOU - RFMOD - TLZ 2,(TT%OSP) - SFMOD - MOVEI 1,.PRIIN - CFIBF - PUSHJ P,LISTEN - JFCL - POPJ P, ;WAITING INPUT CHARACTERS - - IFN FTEXEC,< -TTYLEV: SKPUSR - JRST XTTYLEV - SKIPN TOPS20 - POPJ P, - MOVEI T1,.PRIIN - MOVE T2,SAVTTY - SFMOD ;RESTORE MODES - MOVE T2,SAVTT2 - MOVE T3,SAVTT3 - SFCOC ;RESTORE CC MODES - MOVEI 1,.FHSLF - SKIPGE SAVSTS - EIR - SETZM SAVTTY - POPJ P, > - - IFE FTEXEC, - > ;END IFE FTDEC20 - -TEXIN: AOSA TEXINF ;NOTE TEXT INPUT -TIN: SETZM TEXINF ;NOTE NOT TEXT INPUT - IFN FTDEC20&FTEXEC&<^-FTEDIT>,< - SKPUSR ;EXEC MODE? - JRST XTIN> ;YES, SIMPLE INPUT -TIN1: SOSGE CHINC ;CHARACTER LEFT IN LINE BUFFER? - JRST CHIN1 ;NO, GO REFILL BUFFER - ILDB T,CHINP ;GET CHARACTER - POPJ P, -;REFILL LINE BUFFER WITH EDITING - -CHIN1: SKPUSR ;EXEC MODE? - JRST XCHIN1 ;YES, USE SIMULATION ROUTINES - SKIPN TOPS20 - JRST XCHIN1 ;TOPS-10 - SKIPE T1,CHINP ;REINIT LINE? - JRST CHIN2 ;NO - MOVEI T1,NLINBF*5 ;YES, SETUP MAX CHAR COUNT - MOVEM T1,LINSPC - MOVE T1,LINBP ;SETUP POINTER - MOVEM T1,CHINP -CHIN2: MOVEM T1,TEXTIB+.RDBKL ;SET BACKUP LIMIT - SKIPG LINSPC ;ROOM LEFT IN BUFFER? - JRST ERR ;NO, TOO MUCH TYPIN - SETZ T1, - SKIPE WAKALL ;WAKEUP ON EVERYTHING? - MOVEI T1,ONES4 ;YES, USE WAKEUP TABLE - MOVEM T1,ETXTB - PUSH P,LINSPC ;SAVE CURRENT SPACE - PUSH P,CHINP ;AND POINTER - SKIPN TEXINF ;TEXT INPUT? - PUSHJ P,TTYTOF ;NO, SUPPRESS TAB ECHO - MOVEI T1,TEXTIB ;POINT TO ARG BLOCK - TEXTI ;INPUT TO NEXT BREAK CHAR - JRST ERR ;BAD ARGS (IMPOSSIBLE) - PUSHJ P,TTYTON ;RESTORE NORMAL TAB ECHO - POP P,CHINP ;RESTORE POINTER TO CHARS JUST TYPED - MOVE T1,TEXTIB+.RDFLG ;GET FLAGS - TXNE T1,RD%BFE+RD%BLR ;DELETIONS? - JRST CHIN3 ;YES - POP P,T1 ;RECOVER OLD SPACE COUNT - SUB T1,LINSPC ;COMPUTE NUMBER CHARS JUST TYPED - MOVEM T1,CHINC ;SETUP COUNT - JRST TIN1 ;GO RETURN NEXT CHAR - -;USER HAS DELETED BACK INTO TEXT ALREADY PROCESSED, THEREFORE -;LINE MUST BE REPROCESSED FROM BEGINNING. POSSIBLY ALL TEXT HAS BEEN -;DELETED. - -CHIN3: MOVEI T1,NLINBF*5 ;COMPUTE NUMBER CHARS NOW IN LINE - SUB T1,LINSPC - JUMPE T1,WRONG ;JUMP IF WHOLE LINE DELETED - MOVEM T1,CHINC ;LINE NOT NULL, SETUP CHAR COUNT - MOVE T1,LINBP ;REINIT POINTER - MOVEM T1,CHINP - JRST DD2 ;CLEAR WORLD AND REDO LINE - - IFN <^-FTDEC20>!,< - IFNDEF T1,< - T1==A - PURGT1==-1 - > -XCHIN1: SKIPE T1,CHINP ;REINIT LINE? - JRST XCHIN2 ;NO - MOVEI T1,NLINBF*5 ;YES, SETUP MAX CHAR COUNT - MOVEM T1,LINSPC - MOVE T1,LINBP ;SETUP POINTER - MOVEM T1,CHINP -XCHIN2: MOVEM T1,LINDB ;SET BEGINNING OF DELETE BUFFER - SKIPG LINSPC ;ROOM LEFT IN BUFFER? - JRST ERR ;NO, TOO MUCH TYPIN - MOVEI T1,LINBP-TEXTIB ;SIZE OF BLOCK - SKIPE WAKALL ;WAKEUP ON EVERYTHING? - MOVEI T1,ETXTB-TEXTIB ;YES, INCLUDE WAKEUP TABLE - MOVEM T1,TEXTIB ;SET SIZE IN BLOCK - PUSH P,LINSPC ;SAVE CURRENT SPACE - PUSH P,CHINP ;AND POINTER - MOVEI T1,TEXTIB ;POINT TO ARG BLOCK - PUSHJ P,TXTI - JRST ERR ;BAD ARGS (IMPOSSIBLE) - POP P,CHINP ;RESTORE POINTER TO CHARS JUST TYPED - POP P,T1 ;RECOVER OLD SPACE COUNT - IFN FTYANK,< - AOSN PTDFLG ;EOF ON COMMAND FILE - JRST [SETZM CHINC - SETZM CHINP - JRST DD2] ;YES--GET BACK TO TOP LEVEL - > ;END FTYANK - SKIPN 0(P) ;REPROCESS NEEDED? - JRST [MOVEI T1,NLINBF*5 - SUB T1,LINSPC ;YES, COMPUTE NUMBER CHARS IN LINE - JUMPE T1,WRONG ;JUMP IF WHOLE LINE DELETED - MOVEM T1,CHINC ;LINE NOT NULL, SETUP CHAR COUNT - MOVE T1,LINBP ;REINIT POINTER - MOVEM T1,CHINP - JRST DD2] ;CLEAR WORLD AND REDO LINE - SUB T1,LINSPC ;COMPUTE NUMBER CHARS JUST TYPED - JUMPG T1,[MOVEM T1,CHINC ;SETUP COUNT - JRST TIN1] ;GO RETURN NEXT CHAR - -;CONTINUED ON NEXT PAGE - -;USER HAS DELETED BACK INTO TEXT ALREADY PROCESSED, THEREFORE LINE -;MUST BE REPROCESSED FROM BEGINNING. POSSIBLY ALL TEXT HAS BEEN -;DELETED. - - PUSHJ P,RDBKIN - SETZM 0(P) ;REQUEST REPROCESS OF LINE - MOVE T1,LINBP ;RESET DELETE BOUNDARY TO BEGINNING OF LINE - JRST XCHIN2 - - IFDEF PURGT1,> - > ;END IFN ^-FTDEC20... - -ONES4: OCT -1,-1,-1,-1 ;WAKEUP MASK - -;ROUTINES TO TURN TAB ECHO ON/OFF - -TTYTOF: MOVE T1,TTYCC2 ;NORMAL MODE WORD - TRZA T1,3B19 ;TURN TAB OFF -TTYTON: MOVE T1,TTYCC2 - PUSH P,T2 ;PRESERVE REGS - PUSH P,T3 - MOVEM T1,T2 - MOVEI T1,.PRIIN - MOVE T3,TTYCC3 - SFCOC ;SET CONTROL CHAR MODES - POP P,T3 - POP P,T2 - POPJ P, -XLIST - - IFN FTDEC20,< -TOUT0: IFN FTEXEC,< - SKPUSR - JRST XTOUT> - EXCH T1,T - PBOUT ;CHAR TO TTY FROM T1 - EXCH T1,T - POPJ P, - -LISTEN: IFN FTEXEC,< - SKPUSR - JRST XLISTE> - EXCH T1,T - MOVEI T1,.PRIIN ;PRIMARY INPUT (TTY) - SIBE ;INPUT BUFFER EMPTY? - AOS 0(P) ;NO, GIVE SKIP RETURN - EXCH T1,T - POPJ P, ;RETURN NOSKIP - -;HANDLE TTY WHEN RETURNING TO DDT FROM USER CONTEXT - -TTYRET: IFN FTEXEC,< - SKPUSR - JRST XTTYRET> - SKIPE SAVTTY ;ALREADY HAVE STATE? - JRST TTYR1 ;YES - MOVEI T1,.PRIIN - RFMOD ;GET MODES - MOVEM T2,SAVTTY - RFCOC ;GET CC MODES - MOVEM T2,SAVTT2 - MOVEM T3,SAVTT3 -TTYR1: MOVEI T1,.PRIIN - RFMOD - TXZ T2,TT%WAK+TT%DAM - TXO T2, - SFMOD - MOVE T2,TTYCC2 - MOVE T3,TTYCC3 - SFCOC ;SETUP PROPER DDT MODES - MOVEI T1,.FHSLF - IFN FTEXEC,< - SKPEXC> - DIR - POPJ P, - -TTYLEV: IFN FTEXEC,< - SKPUSR - JRST XTTYLE> - MOVEI T1,.PRIIN - MOVE T2,SAVTTY - SFMOD ;RESTORE MODES - MOVE T2,SAVTT2 - MOVE T3,SAVTT3 - SFCOC ;RESTORE CC MODES - MOVEI T1,.FHSLF - SKIPGE SAVSTS ;PSI SYSTEM ON FOR USER? - EIR ;YES - SETZM SAVTTY ;NOTE USER MODES IN EFFECT - POPJ P, - -TTYCLR: MOVEI T1,.PRIIN - IFN FTEXEC,< - SKPEXC> ;SKIP CFIBF IF EXEC - CFIBF - PUSHJ P,LISTEN - JFCL - POPJ P,0 - -TTYCC2: BYTE (2) 0,1,1,1,1,1,1,2,1,2,3,1,1,2,1,1,1,1 -TTYCC3: BYTE (2) 1,1,1,1,1,1,1,1,1,3,1,1,1,1 - > ;END IFN FTDEC20 - - IFE FTDEC20,< -SUBTTL DDT COMMAND FILE LOGIC - -;START PAPER TAPE INPUT - IFN FTYANK,< -TAPIN: - IFN FTEXEC,< SKPEXC ;SKIP IF EXEC MODE - JRST UTAPIN ;USER MODE - CONSO PTR,400 ;TAPE IN READER? - JRST ERR ;NO - ERROR - SETZM EPTPTR ;YES. INDICATE START READING IN - SETOM COMAND ;SHOW THERE IS A COMMAND FILE - JRST RET - > ;END IFN EEDT&1 -UTAPIN: - HIADDR=W ; NEW JOB BOUNDARY(.JBREL) - CM=17 ;CHAN FOR COMMANDS - INIT CM,0 ; ASCII MODE - SIXBIT /DSK/ ;ALWAYS ON DEVICE DSK - XWD 0,CBUF ; ESTABLISH RING HEADER - JRST ERR ; NOT ASSIGNED, ERROR - TLNE F,(QF) ;NAME GIVEN? - SKIPA T,SYL ;YES. USE IT - IFE FTFILE,< - MOVE T,[SIXBIT /PATCH/] ;NO, DEFAULT=PATCH - > - IFN FTFILE,< - MOVE T,[SIXBIT /FILDDT/] - > - MOVEM T,COMNDS ;SAVE NAME IN LOOKUP BLOCK - MOVSI T,'DDT' ;EXTENSION - MOVEM T,COMNDS+1 ; .. - SETZM COMNDS+3 ;CLEAR PPN - LOOKUP CM,COMNDS ; LOOKUP CMD FILE(IN CASE DIR DEV) - JRST ERR ; NOT FOUND - MOVE T,.JBFF ; LOAD .JBFF - MOVEM T,SVJBFF ; AND SAVE IT - IFE FTFILE,< - HRRZ T,.JBREL ; LOAD .JBREL - MOVEI HIADDR,2000(T) ; NEEDED, NOW PRPARE NEW .JBREL - IORI HIADDR,1777 ; NEW .JBREL TO ASK FOR - HRRZ TT,@SYMP ; BOTTM OF SYM TBL - HLRE TT1,@SYMP ; NEG LENGTH - SUB TT,TT1 ; TOP OF SYMBOL TBL - MOVEM TT,.JBFF ; ASSUME THIS NEW .JBFF AND SAVE IT - SUB T,TT ; COMPUTE WDS BETWEEN SYM TOP AND .JBREL - CAILE T,207 ; ENUFF FOR DSK BUFF+FUDGE FACTOR? - JRST HAVECM ; YES - CALLI HIADDR,11 ; NO, GET ANOTHER 1K - JRST ERR ; NOT AVIL, TREAT AS NO CMD FILE - > ;END FTFILE - -HAVECM: SETOM COMAND ; FLAG CMD FILE FOUND - SETZM CHINP - SETZM CHINC - INBUF CM,1 ; 1 BUFFER ONLY - IFN FTFILE,< - INIT DP,1 ;ALSO DO LISTING FILE - SIXBIT /LPT/ - XWD LBUF,0 - JRST [SETZM COMAND - JRST ERR] - MOVSI TT,'LST' - MOVEM TT,COMNDS+1 - SETZM COMNDS+3 - SETZM COMNDS+2 - ENTER DP,COMNDS - JRST [SETZM COMAND - JRST ERR] - OUTBUF DP,2 - > - JRST RET - > ;END IFN FTYANK - - IFN FTYANK,< - IFN FTEXEC,< -XPTRIN: PUSHJ P,PTRXNX ;GET NEXT CHAR FROM PTR - JRST PTRDON ;THROUGH - JRST PTRCHR ;PROCESS THE CHAR. - > -PTRIN: PUSHJ P,PTRNX ;GET NEXT CHAR - JRST PTRDON ;EOF ON COMMAND FILE -PTRCHR: CAIE T,177 ;RUBOUT? - SKIPN TT2,T ;NULL? - JRST PTRNXT ;IGNORE IT - IFN FTEXEC,< - SKPEXC ;EXEC MODE? - JRST PTRCH2 - CAIE T,15 ;YES. CR? - JRST CPOPJ1 ;NO. ECHO OF CHAR WILL HAPPEN LATER - PUSHJ P,PTRXNX ;READ (AND IGNORE) NEXT CHAR - JFCL ; WHICH OUGHT TO BE A LINE-FEED - MOVEI T,15 ;RETURN CR AS CHAR - JRST CPOPJ1 -PTRCH2: >;END IFN FTEXEC - CAIE T,33 ;ESCAPE? - CAIL T,175 ;ALT-MODE? - MOVEI T,"$" ;YES, ECHO "$" - PUSHJ P,ECHO ;ECHO CHAR - MOVE T,TT2 ;RESTORE T - JRST CPOPJ1 ;SKIP-RETURN WITH DATA - -PTRNXT: - IFN FTEXEC,< SKPUSR - JRST XPTRIN> - JRST PTRIN - -;THROUGH WITH COMMAND FILE -PTRDON: SETZM COMAND - PUSH P,CHINC - PUSH P,CHINP - PUSHJ P,CRF ;2 CR-LFS - PUSHJ P,CRF - POP P,CHINP - POP P,CHINC - SETOM PTDFLG - POPJ P, ;NON-SKIP RETURN - -;COMMAND FILE IO -PTRNX: SOSLE CBUF+2 ;DATA LEFT? - JRST PTRNX1 ;YES - INPUT CM, ;GET NEXT BUF - STATZ CM,740000 ;ERROR? - HALT .+1 ;TOO BAD - STATZ CM,20000 ;EOF? - JRST PTRNX2 ;YES -PTRNX1: ILDB T,CBUF+1 - JRST CPOPJ1 ;SKIP-RETURN WITH DATA -PTRNX2: RELEASE CM, ;EOF - DONE - IFN FTFILE,< - CLOSE DP, - RELEAS DP, - > - MOVE TT,SVJBFF - MOVEM TT,.JBFF ;RESET .JBFF - POPJ P, ;NON-SKIP MEANS DONE WITH COMMAND FILE - - IFN FTEXEC,< -PTRXNX: SKIPE TT2,EPTPTR ;DATA IN PTR BUF? - JRST PTRXN3 ;YES - MOVE TT2,[POINT 7,EPTRBF] ;NO SET UP TO STORE IN PTR BUFFER - SETZM EPTRBF ;SWITCH FOR END OF TAPE TEST - CONO PTR,20 ;START PTR GOING -PTRXN1: CONSO PTR,400 ;EOT? - JRST PTRXN4 ;YES - CONSO PTR,10 ;DATA? - JRST PTRXN1 ;WAIT SOME MORE - DATAI PTR,T ;READ A CHAR - JUMPE T,PTRXN1 ;IGNORE NULLS -PTRXN2: IDPB T,TT2 ;SAVE IN DATA BUFFER - CAIE T,12 ;LF - CAMN TT2,EPTRND ; OR BUFFER FULL? - SKIPA TT2,[POINT 7,EPTRBF] ;YES. START TAKING CHARS OUT OF BUF - JRST PTRXN1 ;NO - READ ANOTHER - CONO PTR,0 ;SHUT OFF PTR BEFORE READING NEXT CHAR - -PTRXN3: ILDB T,TT2 ;GET A CHAR - CAIE T,12 ;LF - CAMN TT2,EPTRND ; OR END OF BUFFER? - SETZ TT2, ;YES, START PTR FOR NEXT CHAR - MOVEM TT2,EPTPTR ;SAVE PNTR FOR NEXT CHAR - JRST CPOPJ1 ;HAVE A CHAR RETURN - -;EOT -PTRXN4: SKIPN EPTRBF ;ANY DATA? - POPJ P, ;NO - DONE RETURN - SETZ T, ;YES - FILL REST OF BUFFER WITH 0'S - JRST PTRXN2 - -EPTPTR: 0 -EPTRBF: BLOCK 5 ;BUFFER SO PTR WONT CHATTER -EPTRND: POINT 7,EPTRBF+4,34 ;PNTR FOR LAST CHAR IN BUF - > ;END IFN FTEXEC -COMAND: 0 -SVJBFF: 0 -CBUF: BLOCK 3 -COMNDS: SIXBIT /PATCH/ - SIXBIT /DDT/ - 0 - 0 - > ;END FTYANK - - IFN FTFILE,< -PUTCHR: SOSLE LBUF+2 ;ANY ROOM? - JRST PUTOK ;YES - OUTPUT DP, - STATZ DP,740000 ;ERRORS? - HALT .+1 ;YES - -PUTOK: - IDPB T,LBUF+1 ;DEPOSIT CHAR. - POPJ P, - - > ;END OF IFN FTFILE - > ;END IFE FTDEC20 -LIST - -SUBTTL DISPATCH TABLE - -BDISP: POINT 12,DISP(R),11 - POINT 12,DISP(R),23 - POINT 12,DISP(R),35 -DISP: -DEFINE D (Z1,Z2,Z3)< - BYTE (12) Z1-DDTOFS,Z2-DDTOFS,Z3-DDTOFS - IFN <!!>&<-1,,770000>, - > -;THIS MACRO PACKS 3 ADDRESSES INTO ONE WORD; EACH ADR IS 12 BITS - - IFE FTYANK, - IFE FTEXEC&FTPTP,< PUNCH==ERR - BLKEND==ERR - LOADER==ERR> - IFN FTDEC20, - -D (ERR,ERR,ERR); (0) -D (CNTRLZ,ERR,ERR); (3) -D (ERR,ERR,VARRW); (6) -D (TAB,LINEF,ERR); (11) -D (ERR,CARR,ERR); (14) -D (ERR,ERR,ERR); (17) -D (PUNCH,ERR,ERR); (22) -D (ERR,ERR,ERR); (25) -D (ERR,ERR,CNTRLZ); (30) -D (CONTROL,ERR,ERR); (33) -D (ERR,ERR,SPACE); (36) -D (SUPTYO,TEXI,ASSEM); (41) -D (DOLLAR,PERC,ERR); (44) -D (DIVD,LPRN,RPRN); (47) -D (MULT,PLUS,ACCF); (52) -D (MINUS,PERIOD,SLASH); (55) -D (NUM,NUM,NUM); (60) -D (NUM,NUM,NUM); (63) -D (NUM,NUM,NUM); (66) -D (NUM,TAG,SEMIC); (71) -D (FIRARG,EQUAL,ULIM); (74) -D (QUESTN,INDIRE,ABSA); (77) -D (BPS,CON,SYMD); (102) -D (EFFEC,SFLOT,GO); (105) -D (HWRDS,PILOC,BLKEND); (110) -D (KILL,LOADER,MASK); (113) -D (NWORD,BITO,PROCEDE); (116) -D (QUAN,RELA,SYMBOL); (121) -D (TEXO,SETPAG,ERR); (124) -D (WORD,XEC,TAPIN); (127) -D (ZERO,OCON,ICON); (132) -D (OSYM,VARRW,PSYM); (135) - -;THIS TABLE DOES NOT HAVE ENTRIES FOR CHARS .GE. 140; THESE -; ARE DETECTED AS ERRORS NEAR L21: - -SUBTTL FANCY TERMINAL INPUT LOGIC - - IFN ^-FTDEC20!,< -TXTI: -DOTXTI: PUSH P,A ;SAVE ALL AC'S USED - PUSH P,B - PUSH P,C - PUSH P,T - PUSH P,W1 - PUSH P,W2 - MOVE W1,LINSPC ;COUNT OF BYTES IN DESTINATION - SKIPN W2,LINDB ;WAS IT NON-ZERO? - MOVE W2,CHINP ;NO. USE DEFAULT - -; VERIFY ALL OF THE STRING POINTERS - -RDTXT1: MOVE A,CHINP ;HAVE A DEST POINTER? - PUSHJ P,RDCBP ;YES. CHECK IT OUT - MOVEM A,CHINP ;GET CONVERTED POINTER - SKIPN A,LINBP ;HAVE A ^R BUFFER? - JRST RDTOPM ;NO. GO AROUND THEN - PUSHJ P,RDCBP ;YES. VERIFY IT - MOVEM A,LINBP ;STORE VERIFIED POINTER -RDTOPM: MOVE A,W2 ;GET TOP OF BUFFER - PUSHJ P,RDCBP ;VERIFY IT - MOVE W2,A ;ALL VERIFIED NOW - JUMPLE W1,WRAP0 ;MAKE SURE COUNT HAS ROOM IN IT - ; .. - -;MAIN LOOP - DOES INPUT OF BYTE AND DISPATCH ON CHARACTER CLASS -;ACTION ROUTINES EXIT TO: -; INSRT - APPEND CHARACTER AND CONTINUE -; NINSRT - CONTINUE WITHOUT APPENDING CHARACTER -; DING - BUFFER NOW EMPTY, POSSIBLE RETURN TO USER -; WRAP, WRAP0 - RETURNS TO USER - -NINSRT: MOVEM W1,LINSPC ;STORE COUNT - PUSHJ P,RDBIN ;DO BIN - MOVE A,B ;SAVE BYTE - IDIVI B,CHRWRD ;SETUP TO GET CHAR CLASS - LDB B,CCBTAB(C) ;GET IT FROM BYTE TABLE - IDIVI B,2 ;SETUP TO REF DISPATCH TABLE - JUMPE C,[HLRZ T,DISPTC(B) ;GET LH ENTRY - JRST .+2] - HRRZ T,DISPTC(B) ;GET RH ENTRY - MOVE B,A ;ROUTINES GET BYTE IN B - JRST 0(T) ;DISPATCH TO ACTION ROUTINE - -;RETURN FROM ACTION ROUTINE TO APPEND CHARACTER AND CONTINUE. -; B/ CHARACTER - -INSRT: SKIPE WAKALL ;BREAK ON EVERYTHING? - JRST WRAP ;YES. WRAP IT UP THEN - IDPB B,CHINP ;APPEND BYTE TO USER STRING - SOJG W1,NINSRT ;CONTINUE IF STILL HAVE COUNT - JRST WRAP0 ;COUNT EXHAUSTED, RETURN - -;RETURNS TO USER. - -;RETURN TO USER IF BUFFER EMPTY - -NDING: CAME W2,CHINP ;BUFFER EMPTY? - JRST NINSRT ;NO, GO GET MORE INPUT - JRST WRAP0 - -;APPEND LAST CHARACTER AND RETURN - -WRAP: IDPB B,CHINP ;APPEND BYTE - SUBI W1,1 ;UPDATE COUNT - -;STORE NULL ON STRING AND RETURN - -WRAP0: JUMPLE W1,WRAP1 ;DON'T STORE NULL IF COUNT EXHAUSTED - SETZ B, - MOVE A,CHINP - IDPB B,A ;STORE NULL WITHOUT CHANGING USER PTR - -;UPDATE USER VARIABLES AND RETURN - -WRAP1: MOVEM W1,LINSPC ;UPDATE USER'S BYTE COUNT - POP P,W2 - POP P,W1 - POP P,T - POP P,C - POP P,B - POP P,A - JRST CPOPJ1 - -;PARAMETERS FOR CLASS TABLE - -CCBITS==4 ;BITS/BYTE -CHRWRD==^D36/CCBITS ;BYTES/WORD - -;DEFINED CHARACTER CLASSES: - -TOP==0 ;TOPS10 BREAK -BRK==1 ;REGULAR BREAK SET -ZER==2 ;NULL -EOLC==3 ;EOL -PUN==4 ;PUNCTUATION -SAFE==5 ;ALL OTHERS -RUBO==6 ;DELETE A CHARACTER -RTYP==7 ;RETYPE THE LINE -KLL==10 ;DELETE THE LINE -KWRD==11 ;DELETE A WORD -RDCRC==12 ;CARRIAGE RETURN -RDQTC==13 ;QUOTE CHARACTER - -;TABLE OF BYTE PTRS TO REFERENCE CLASS TABLE - - XX==CCBITS-1 - XALL -CCBTAB: REPEAT CHRWRD,< - POINT CCBITS,CTBL(B),XX - XX=XX+CCBITS> - SALL - -;CLASS DISPATCH TABLE - -DISPTC: WRAP,,WRAP - ZNULL,,EOL1 - WRAP,,INSRT - DELC,,RTYPE - DELIN,,KLWORD - RDCR,,RDQT - -;CHARACTER CLASS TABLE - -DEFINE CCN (A,B)< - REPEAT B,< - CC1 (A)>> - -DEFINE CC1 (C)< - QQ=QQ+CCBITS - IFG QQ-^D35,< - QW - QW=0 - QQ=CCBITS-1> - QW=QW+B> - - QW==0 - QQ==-1 - -CTBL: CC1(ZER) ;0 - CCN(PUN,6) ;1-6 - CC1(TOP) ;7 - CCN(PUN,2) ;10-11 - CC1(EOLC) ;12 - CC1(PUN) ;VT - CC1(TOP) ;FF - CC1(RDCRC) ;CR - CCN(PUN,4) ;16-21 (^N-^Q) - CC1(RTYP) ;^R - CCN(PUN,2) ;^S,^T - CC1(KLL) ;^U - CC1(RDQTC) ;^V - CC1(KWRD) ;^W - CCN(PUN,2) ;^X,^Y - CCN(BRK,2) ;^Z,$ - CCN(PUN,4) ;34-37 - CCN(PUN,^D16) ;40-/ - CCN(SAFE,^D10) ;0-9 - CCN(PUN,7) ;:-@ - CCN(SAFE,^D26) ;A-Z - CCN(PUN,6) ;]-140 - CCN(SAFE,^D26) ;A-Z - CCN(PUN,4) ;173-176 - CC1(RUBO) ;177 - QW ;GET LAST WORD IN - -;LOCAL ROUTINES TO DO LOGICAL BIN AND BOUT. - -RDBIN: SKIPE B,SAVCHR ;WANT TO BACK UP? - JRST [SETZM SAVCHR ;ONLY ONCE - POPJ P,0] ;RETURN - IFN FTEXEC,< - SKPUSR - JRST [PUSH P,T ;SAVE T - IFN FTYANK,< - SKIPE COMAND - PUSHJ P,XPTRIN> - PUSHJ P,XTIN ;GET A BYTE - MOVE B,T ;PUT IN CORRECT PLACE - POP P,T ;RESTORE T - JRST RDBIN1] ;SKIP NEXT INST - > - IFN FTDEC20, ;SHOULD NOT BE HERE IN USER MODE - IFE FTDEC20,< - IFN FTYANK,< - PUSH P,T ;SAVE AN AC - SKIPE COMAND ;COMMAND FILE OPEN? - PUSHJ P,PTRIN ;READ COMMAND FILE - JRST [MOVEI T," " ;ASSUME EOF - SKIPL PTDFLG ;WAS IT EOF? - INCHRW T ;NO--READ A BYTE - JRST .+1] ;CONTINUE - MOVE B,T ;COPY BYTE - POP P,T> ;RESTORE T - SKIPE TOPS20 - JRST .+3 - IFE FTYANK,> ;READ BYTE UNDER TOPS-10 - JRST RDBIN1 - PUSH P,1 - PBIN - MOVE B,1 - POP P,1 -RDBIN1: MOVEM B,LASCHR ;SAVE LAST CHAR READ - POPJ P,0 ;RETURN - - -;RDBOUT -; B/ BYTE -; PUSHJ P,RDBOUT -; RETURN +1 ALWAYS - -RDBOUT: PUSH P,T ;SAVE AN AC - PUSH P,CHINC - PUSH P,CHINP - MOVE T,B ;SET FOR ECHO - PUSHJ P,TOUT ;TYPE IT - POP P,CHINP - POP P,CHINC - POP P,T - POPJ P,0 - -;RDSOUT - OUTPUT STRING ALA RDBOUT -; B/ STRING PTR -; PUSHJ P,RDSOUT -; RETURN +1 ALWAYS - -RDSOUT: MOVE A,B ;COPY POINTER - PUSHJ P,RDCBP -RDSL: ILDB B,A - JUMPE B,CPOPJ ;EXIT ON NULL - PUSHJ P,RDBOUT - JRST RDSL - -;CHECK BYTE POINTER GIVEN AS ARGUMENT -; A/ BYTE POINTER -; PUSHJ P,RDCBP -; RETURN +1: OK, LH INITIALIZED IF NECESSARY - -RDCBP: HLRZ B,A ;GET LH - CAIN B,-1 ;IS DEFAULT? - HRLI A,() ;YES, FILL IN 7-BIT - LDB B,[POINT 6,A,11] ;CHECK BYTE SIZE - CAIGE B,7 ;7 OR GREATER? - HALT . ;BAD BYTE SIZE - IBP A ;INCR IT AND DECR IT ONCE SO WILL - JRST DBP ; BE IN KNOWN STATE FOR COMPARES - -;LOCAL ROUTINES FOR EDITING FUNCTIONS - -;DELETE CHARACTER FROM DESTINATION - BACKUP PTR AND CHECK -;FOR TOP OF BUFFER -; PUSHJ P,BACK -; RETURN +1: AT TOP OF BUFFER, NO CHARACTER TO DELETE -; RETURN +2: CHARACTER DELETED - -BACK: CAMN W2,CHINP ;AT TOP OF BUFFER? - POPJ P,0 ;YES - MOVE A,CHINP ;GET DEST PTR - PUSHJ P,DBP ;DECREMENT IT - MOVEM A,CHINP ;PUT IT BACK - AOJA W1,CPOPJ1 ;UPDATE COUNT AND RETURN - -;PUT BYTE BACK INTO SOURCE -; B/ BYTE -; PUSHJ P,RDBKIN -; RETURN +1 ALWAYS - -RDBKIN: -DOBKIN: MOVE A,LASCHR ;GET LAST BYTE READ - MOVEM A,SAVCHR ;MAKE NEXT BYTE READ - POPJ P,0 - -;FIND BEGINNING OF CURRENT LINE. -; PUSHJ P,FNDLIN -; RETURN +1: AT TOP OF BUFFER -; RETURN +2: A/ BACKED-UP BYTE PTR TO BEGINNING OF LINE -; B/ BYTE COUNT CONSISTENT WITH CHINP IN A - -FNDLIN: CAMN W2,CHINP ;AT TOP OF BUFFER? - POPJ P,0 ;YES - PUSH P,CHINP ;SAVE CURRENT LINE VARIABLES - PUSH P,W1 -FNDLN1: MOVE A,CHINP ;BACKUP ONE CHARACTER - PUSHJ P,DBP - MOVEM A,CHINP - ADDI W1,1 - CAMN W2,CHINP ;NOW AT TOP OF BUFFER? - JRST FNDLN2 ;YES, RETURN - LDB B,CHINP ;NO, LOOK AT NEXT CHAR TO BE DELETED - CAIN B,12 ;EOL OR LF? - JRST FNDLN2 ;YES, RETURN - JRST FNDLN1 ;NO, KEEP LOOKING - -FNDLN2: MOVE A,CHINP ;RETURN NEW LINE VARIABLES - MOVE B,W1 - POP P,W1 ;RESTORE OLD LINE VARIABLES - POP P,CHINP - JRST CPOPJ1 - -;ACTION ROUTINES - -;ZERO BYTE - -ZNULL: SKIPE WAKALL ;USER HAVE A MASK? - JRST INSRT ;YES. GO SEE ABOUT IT THEN - JRST WRAP0 ;NO. ALWAYS BREAK THEN - -;CARRIAGE RETURN - IF LINE FEED FOLLOWS, TREAT LIKE EOL - -RDCR: CAIGE W1,2 ;ROOM FOR CR AND LF? - JRST [PUSHJ P,RDBKIN ;NO, PUT THE CR BACK - JRST WRAP0] ;WILL GET IT NEXT TIME - PUSHJ P,RDBIN ;GET THE NEXT CHAR - CAIN B,12 ;LF? - JRST RDCR1 ;YES, NORMAL NEWLINE - PUSHJ P,RDBKIN ;NO, PUT BACK THE SECOND BYTE - MOVEI B,15 ;APPEND A REAL CR - JRST WRAP - -RDCR1: MOVEI B,15 - IDPB B,CHINP ;APPEND CR - SOS W1 -RDCR2: MOVEI B,12 -EOL1: JRST WRAP ;YES - -;QUOTE CHARACTER (^V) - INHIBITS EDITING ACTION OF FOLLOWING CHARACTER - -RDQT: CAIGE W1,2 ; ROOM FOR BOTH? - JRST [PUSHJ P,RDBKIN ; NO. BACK UP - JRST WRAP0] ; AND WAIT FOR NEXT TIME - IDPB B,CHINP ;STORE QUOTE - SOS W1 ; ONE LESS - PUSHJ P,RDBIN ;GET THE NEXT CHAR - JRST WRAP ;YES - -;DELETE CHARACTER (RUBOUT) - -DELC: PUSHJ P,BACK ;BACKUP PTR - JRST WRAP0 ;NOTHING LEFT IN BUFFER - MOVE T,CHINP - ILDB B,T ;GET CHAR JUST DELETED - CAIN B,12 ;WAS IT LF? - JRST DELC2 ;YES - PUSH P,B - MOVEI B,"\" - PUSHJ P,RDBOUT - POP P,B - PUSHJ P,RDBOUT ;TYPE IT OUT - MOVEI B,"\" ;INDICATE DELETION - PUSHJ P,RDBOUT -DELC4: JRST NINSRT ;CONTINUE INPUT UNLESS BUFFER EMPTY ETC. - -DELC2: CAMN W2,CHINP ;AT BEGINNING OF DEST BUFFER? - JRST DELC1 ;YES - LDB B,CHINP ;NO, CHECK CHARACTER PRECEEDING LF - CAIE B,15 ;A CR? - JRST DELC1 ;NO, LEAVE IT ALONE - PUSHJ P,BACK ;YES, DELETE IT ALSO - JRST WRAP ;(CAN'T HAPPEN) -DELC1: HRROI B,[ASCIZ / -/] - PUSHJ P,RDSOUT ;DO CRLF WHEN DELETING EOL OR CRLF - JRST DELC4 - -;DELETE LINE (CONTROL-U) - -DELIN: MOVEI C,0 - PUSHJ P,FNDLIN ;FIND BEGINNING OF LINE - JRST NDING ;NOTHING IN BUFFER - LDB C,CHINP ;GET LAST CHAR IN BUFFER - MOVEM A,CHINP ;SET LINE VARIABLES TO BEGINNING - MOVEM B,W1 - JRST NDING ;CONTINUE INPUT UNLESS BUFFER EMPTY ETC. - -;DELETE WORD (CONTROL-W) - -KLWORD: PUSHJ P,BACK ;DELETE AT LEAST ONE CHARACTER - JRST WRAP0 ;WASN'T ONE - MOVE T,CHINP - ILDB B,T ;GET CHAR JUST DELETED - CAIN B,12 ;LF OR EOL? - JRST BWRD3 ;YES, DON'T DELETE -BWRD1: PUSHJ P,BACK ;DELETE NEXT CHARACTER - JRST BWRD2 ;NO MORE LEFT - MOVE T,CHINP ;LOOK AT CHARACTER JUST DELETED - ILDB B,T - IDIVI B,CHRWRD ;GET ITS CHARACTER CLASS - LDB B,CCBTAB(C) - CAIN B,SAFE ;IS IT A WORD SEPARATOR? - JRST BWRD1 ;KEEP DELETING -BWRD3: IBP CHINP ;YES, KEEP THAT CHARACTER - SUBI W1,1 -BWRD2: MOVEI B,"_" ;INDICATE WORD DELETION - PUSHJ P,RDBOUT - JRST NINSRT ;CONTINUE INPUT UNLESS BUFFER EMPTY ETC. - -;RETYPE LINE (CONTROL-R) - -RTYPE: PUSHJ P,RTYPES ;DO THE WORK - JRST NINSRT - -;SUBROUTINE TO RETYPE LINE - -RTYPES: HRROI B,[ASCIZ / -/] - PUSHJ P,RDSOUT ;NON-DISPLAY, GET CLEAN LINE - PUSHJ P,FNDLIN ;FIND BEGINNING OF LINE - MOVE A,W2 ;AT TOP OF BUFFER - USE IT - MOVE T,A ;SAVE PTR TO BEGINNING OF LINE - CAME T,W2 ;BEG OF LINE IS TOP OF BUFFER? - JRST RTYP1 ;NO, DON'T TYPE ^R BFR - SKIPE T,LINBP ;GET ^R BFR IF ANY -RTYW1: CAMN T,W2 ;UP TO TOP OF BFR? - JRST RTYP4 ;YES, DONE WITH ^R BFR - ILDB B,T ;GET CHAR FROM ^R BFR - JUMPN B,[PUSHJ P,RDBOUT ;TYPE IT - JRST RTYW1] -RTYP4: MOVE T,W2 ;DONE WITH ^R BFR, NOW DO MAIN BFR -RTYP1: CAMN T,CHINP ;BACK TO END OF LINE? - POPJ P,0 ;YES - ILDB B,T ;NO, GET NEXT BYTE - PUSHJ P,RDBOUT ;TYPE IT - JRST RTYP1 ;LOOP UNTIL AT END OF BUFFER - -;DECREMENT BYTE POINTER -; A/ BYTE PTR -; PUSHJ P,DBP -; RETURNS +1, CLOBBERS B AND C - -DBP: LDB B,[POINT 6,A,5] ;GET P - LDB C,[POINT 6,A,11] ;GET S - ADD B,C ;NEW P = P + S - CAIGE B,^D36 ;NEW P .GE 36? - JRST DBP1 ;NO, BYTE IS IN SAME WORD. - HRRI A,-1(A) ;DECREMENT ADDRESS - MOVEI B,^D36 ;MAKE P = REMAINDER (36,S) - IDIV B,C - MOVEI B,0(C) -DBP1: DPB B,[POINT 6,A,5] - POPJ P,0 - > ;END IFN ^-FTDEC20... - -SUBTTL OP DECODER - -;DESCRIPTION OF OP DECODER FOR DDT: -; -; THE ENTIRE INSTRUCTION SET FOR THE PDP-10 CAN BE COMPACTED INTO -;A SPACE MUCH SMALLER THAN ONE REGISTER FOR EVERY SYMBOL. THIS OCCURS -;BECAUSE OF THE MACHINE ORGANIZATION AND INSTRUCTION MNEMONICS CHOSEN -;FOR THE PDP-10. FOR EXAMPLE, IF BITS (0-2) OF AN INSTRUCTION EQUAL -;101(2) THE INSTRUCTION IS A HALF WORD INSTRUCTION AND AN "H" MAY -;BE ASSUMED. "T" MAY BE ASSUMED FOR ALL TEST INSTRUCTIONS (WHICH -;BEGIN WITH 110(2). -; -; THE TABLE TBL IN DDT CONSISTS OF 9 BIT BYTES, 4 TO A WORD. -;THE NUMBERS IN THE BYTES HAVE THE FOLLOWING SIGNIFICANCE: -;0-37(8): THIS IS A DISPATCH COMMAND FOR THE OP-DECODER INTERPRETER. -; LET THE RIGHT MOST TWO BITS EQUAL N; LET THE NEXT 3 BITS -; EQUAL P. -; -; THE CONTENTS OF INST (INSTRUCTION) CONTAIN IN THE RIGHT -; MOST NINE BITS THE BINARY FOR THE MACHINE INSTRUCTION. -; P AND N REFER TO THE CONTENTS OF INST, AND THE OP DECODER -; WILL PRODUCE AN ANSWER D GIVEN P, N, AND THE CONTENTS -; OF INSTX N+1 GIVES THE NUMBER OF BITS IN INST; P GIVES THE -; POSITION (FROM THE RIGHT EDGE) OF THE N+1 BITS. -; -; EXAMPLE: P = 6 -; N = 2 -; -;; C(INST) = .010 101 100(2) -; -; THE RESULT = D = 010(2) = 2(8) -; -; D IS USED AS A DISPATCH ON THE NEXT BYTES IN THE TABLE. -; IF D = 5, 5 BYTES IN THE TABLE (DON'T COUNT THE BYTES WHICH -; PRINT TEXT OR ARE THE EXTEND BYTE, 41-73(8)) -; ARE SKIPPED OVER AND THE 6TH BYTE RESUMES -; THE INTERPRETATION. -; -;40(8) THIS IS A STOP CODE; WHEN THIS IS REACHED INTERPRETATION -; IS FINISHED. -;41(8)-72(8) THE ALPHABET IS ENCODED INTO THIS RANGE. -; 41- A -; 42- B -; 72- Z -; WHEN A BYTE IN THIS RANGE IS REACHED, ITS CORRESPONDING -; LETTER IS TYPED. - -;73(8) THIS IS THE "EXTEND" BYTE. THE NEXT BYTE IN THE TABLE -; IS A TRANSFER BYTE BUT MUST HAVE THE ADDRESS EXTENDED -; BY <1000-74*2+FIR.> FIRST. -; -;74(8)-777(8) THIS IS A TRANSFER BYTE. IF THE BYTE IN THIS RANGE IS -; CONSIDERED TO BE A, TRANSFER INTERPRETATION TO THE -; RD BYTE IN THE TABLE. -; -;MACROS ASSEMBLE THE TABLE TBL: -; 1. A NUMBER FOLLOWED BY ^ ASSEMBLES A DISPATCH BYTE. THE FIRST -; DIGIT IS THE POSITION; THE SECOND DIGIT IS THE SIZE. -; 2. A POINT (.) ASSEMBLES A STOP CODE. -; 3. A NAME FOLLOWED BY A SLASH ASSEMBLES A TRANSFER TO THE -; SYMBOLICALLY NAMED BYTE. -; 4. A STRING OF LETTERS TERMINATED BY A SPACE, COMMA, OR POINT, -; ASSEMBLE INTO A STRING OF BYTES, EACH BYTE BEING ONE LETTER. -; -;EXAMPLE OF BINARY TO SYMBOLIC DECODING: -; THE MACHINE CODE FOR JRST IS 254 -; INST 0 1 0 1 0 1 1 0 0 -; THE INTERPRETER STARTS WITH THE FIRST BYTE IN THE TABLE (63^). -; THE RESULT OF APPLYING THIS TO C(INST) GIVES 2. SKIPPING OVER -; 2 BYTES IN THE TABLE AND INTERPRETING THE THIRD RESULTS IN -; HAK/ BEING INTERPRETED. AT HAK:, THERE IS A 33^. APPLYING -; THIS TO C(INST) RESULTS IN 5 NON PRINTING BYTES BEING SKIPPED -; OVER: -; 1. MV/ -; MOV PRINTING TEXT -; 2. MO/ -; 3. ML/ -; 4. DV/ -; 5. SH/ -; -;H1/ IS THE NEXT BYTE INTERPRETER. AT H1: 03^ IS FOUND SO -;4 BYTES ARE SKIPPED OVER: -; EXC PRINTING TEXT -; 1. S3/ -; BL PRINTING TEXT -; T PRINTING TEXT -; 2. . -; 3. AO/ -; 4. AOB/ -; THE NEXT LETTERS JRS ARE TYPED OUT. THEN T/ IS FOUND. AT -;T; A T IS TYPED OUT; THEN A "." IS FOUND AND EVERYTHING STOPS. -; -; THE TABLE IS ALSO USED GOING FROM SYMBOLIC TO BINARY BUT A -; TREE SEARCH METHOD IS USED. - -REPEAT 0,< - -DEFINE REDEF (XX)< -DEFINE INFO (AA,BB)< -AA XX'BB>> - - -DEFINE BYT9 (L)< -XLIST -REDEF % - ZZ==0 - ZZZ==0 - ZZM==1 - - IRPC L,< - Z=="L" - IFE Z-":",,<==CLOC> - IFNDEF FIR., - IFGE CLOC+73-1000-FIR., - Z==0> - IFE Z-"/", - IF2, - Z==0> - IFE Z-"^", - Z==0> - IFE **, - ZZZ==ZZZ/100>> - IFE Z-".", - Z==0> - IFN Z,*ZZM - ZZM==ZZM*100> - IFE Z,> -LIST> - -DEFINE OUTP (A)< - BINRY==BINRY*400+BINRY*400+A - BINC==BINC-1 - IFE BINC, - CLOC==CLOC+1> - -TBL: ;OPDECODER BYTE TABLE - .XCREF ;KEEP THIS MESS OUT OF CREF - -BINRY==0 -CLOC==0 ;SET BYTE LOCATION COUNTER TO 0 -BINC==4 ;INIT BYTES/WORD COUNTER - -BYT9 <63^UUO/FLO/HAK/ACCP/BOOLE/H HWT/T ACBM/> - -;IO INSTRUCTIONS -BYT9 <21^BD/CON,11^OI/S,01^Z/O/> -BYT9 - -;UUOS -BYT9 -BYT9 -BYT9 -BYT9 -BYT9 -;BYTE AND FLOATING INSTRUCTIONS - -BYT9 -BYT9 <21^LMB/R,IMB/LMB:02^.,L:L.,M:M.,B:B.,BYTE:32^.,I110//,I120/,03^UF,PA/DF,N/> -BYT9 - -;FWT,FIXED POINT ARITH,MISC. - -BYT9 -BYT9 <21^ADD IMB/SU BIMB:B IMB:02^.,I:I.,M/B/MO:22^> -BYT9 -BYT9 -BYT9 -BYT9 -BYT9 -BYT9 -BYT9 <01^.,J/SH:02^A S2/ROT S1/L S2:S S3:H S1/21^JFF O/.,S1:21^.,C:C.,> - -;ARITH COMP,SKIP,JUMP - -BYT9 -BYT9 -BYT9 -BYT9 <03^.,L/E:E.,L E/PA/G E/N:N.,G.,> - -;HALF WORDS - -BYT9 -BYT9 <21^L HW4/R HW4:L HW3:32^IMS/Z IMS/O IMS/EIMS/> - -;TEST INSTRUCTIONS - -BYT9 -BYT9 - - -;BOOLEAN - -BYT9 -BYT9 -BYT9 -BYT9 -BYT9 - -;INSTRUCTION GROUP 120 -BYT9 -BYT9 - -;MORE UUO'S -BYT9 -BYT9 - -;INSTRUCTION GROUP 110 - DF ARITHMETIC -BYT9 - -REPEAT BINC, - IFN BINRY, - .CREF ;TURN CREF BACK ON - > ;END OF REPEAT 0 - -;THE FOLLOWING IS AN ALTERNATE SET OF MACROS FOR BUILDING THE OP -;TABLE. THEY ASSEMBLE MUCH FASTER THAN THE ONES ABOVE. THEY ARE: -;.ADR - DECLARE TAG; .TRA - TRANSFER BYTE; .TRAX - EXTENDED TRANSFER -;BYTE; .DIS - DISPATCH BYTE; .TXT - TEXT BYTES; .END - TEXT BYTES -;FOLLOWED BY STOP BYTE. - -DEFINE BYT9 (A) < - XLIST - IRP A,< -A> - LIST> - - IF1,< - -DEFINE .ADR (A) < -%'A== CLOC -FIR.== CLOC -DEFINE .ADR (B) < -%'B== CLOC -LASTB==CLOC+74-FIR.>> - -DEFINE .TRA (A) -DEFINE .TRAX (A) - -SYN .TRA, .DIS - -DEFINE .TXT (A) < - IFNB , >> -DEFINE .END (A) < - IFNB , > -CLOC== CLOC+1> - - > ;END OF IF1 - IF2,< - -DEFINE .ADR (A)> - -DEFINE .TRA (A) - -DEFINE .TRAX (A), - IFL Z1,> - -DEFINE .DIS (A) - -DEFINE .TXT (A) ,>> - -DEFINE .END (A) < - IFNB , > -OUTP 40> - -DEFINE OUTP (A)< - IFGE -1000, - IFE -^D27, - IFE BINC-^D18, - IFE BINC-9, - IFE BINC,< BYTE (9) BINR1,BINR2,BINR3, - BINC==^D36> -CLOC==CLOC+1 > - > - -TBL: .XCREF ;OPDECODER BYTE TABLE - -CLOC== 0 ;SET BYTE LOCATION COUNTER TO 0 -BINC== ^D36 ;INIT BYTES/WORD COUNTER - -;**********THE ARGUMENT FOR THE FOLLOWING "BYT9" MACRO -;**************TERMINATES AT THE NEXT COMMENT WITH: ************** - - IFN FTDEC20,< - BYT9 < -.DIS 63,.END,.TRA FLO,.TRA HAK,.TRA ACCP,.TRA BOOLE - .TXT H,.TRA HWT,.TXT T,.TRA ACBM> - > ;END FTDEC20 - - IFE FTDEC20,< - BYT9 < -.DIS 63,.TRA UUO,.TRA FLO,.TRA HAK,.TRA ACCP,.TRA BOOLE - .TXT H,.TRA HWT,.TXT T,.TRA ACBM> - > ;END FTDEC20 - - BYT9 < - -;IO INSTRUCTIONS - -.DIS 21,.TRA BD,.TXT CON,.DIS 11,.TRA OI,.TXT S,.DIS 01,.TRA Z,.TRA O -.ADR BD,.DIS 01,.TXT BLK,.TRA IO,.TXT DATA,.ADR IO,.DIS 11,.TRA I,.TRA O - .ADR OI,.DIS 01,.TRA O,.TRA I -;UUOS - -.ADR UUO,.DIS 51,.END,.TXT,.DIS 32,.TRA U40,.TRAX U50,.TRA U60 - .DIS 21,.TRAX U703,.DIS 11,.TRA USET,.DIS 01 -.TXT LOOKU,.TRA P,.TXT ENTE,.TRA R,.ADR USET,.TXT USET,.DIS 01,.TRA I,.TRA O -.ADR U40,.DIS 03,.TRAX CAL,.TXT INI,.TRA T,.END,.END,.END,.END,.END,.TXT CALL,.TRA I -.ADR U60,.DIS 21,.TRA U603,.DIS 01,.TXT IN,.TRA BPUT,.TXT OUT - .ADR BPUT,.DIS 11,.TXT BU,.ADR F,.END F,.TXT,.TXT PU,.TRA T -.ADR U603,.DIS 01,.TRA U6062,.TXT STAT,.DIS 11,.ADR O,.END O,.TXT,.ADR Z,.END Z,.TXT - .ADR U6062,.DIS 11,.TXT S,.TRA U62,.TXT G,.ADR U62,.TXT ETST,.TRA S - -;BYTE AND FLOATING INSTRUCTIONS - -.ADR FLO,.DIS 51,.TRA BYTE,.TXT F,.DIS 32,.TXT,.TXT AD,.TRA A,.TXT SB - .TRA A,.TXT MP,.TRA A,.TXT DV,.ADR A -.DIS 21,.TRA LMB,.TXT R,.TRA IMB,.ADR LMB,.DIS 02,.END,.TXT - .ADR L,.END L,.TXT,.ADR M,.END M,.TXT -.ADR B,.END B,.TXT,.ADR BYTE,.DIS 32,.TRAX I100,.TRAX I110,.TRA I120,.TXT - .DIS 03,.TXT UF,.TRA PA,.TXT DF,.TRA N -.TXT FS,.TRA C,.TXT IB,.ADR P,.END P,.TXT,.TXT I,.TRA LD - .ADR LD,.TXT LD,.TRA B,.TXT I,.TRA DP,.ADR DP,.TXT DP,.TRA B - -;FWT-FIXED POINT ARITH-MISC - -.ADR HAK,.DIS 33,.TRA MV,.ADR MV,.TXT MOV,.TRA MO,.TRA ML,.TRA DV - .TRA SH,.TRA H1,.TRA JP -.DIS 21,.TXT ADD,.TRA IMB,.TXT SU,.ADR BIMB,.TXT B,.ADR IMB,.DIS 02,.END,.TXT - .ADR I,.END I,.TXT,.TRA M,.TRA B,.ADR MO,.DIS 22 -.ADR EIMS,.TXT E,.TRA IMS,.TXT S,.TRA IMS,.TXT N,.TRA IMS,.TXT M - .ADR IMS,.DIS 02,.END,.TXT,.TRA I,.TRA M,.ADR S,.END S,.TXT -.ADR ML,.DIS 21,.TXT I,.TRA ML1,.ADR ML1,.TXT MUL,.TRA IMB - .ADR DV,.DIS 21,.TXT I,.TRA DV1 -.ADR DV1,.TXT DI,.ADR DV2,.TXT V,.TRA IMB,.ADR H1,.DIS 03,.TXT EXC,.TRA S3,.TXT BL - .ADR T,.END T,.TXT,.TRA AO,.ADR AO,.TXT AOBJ -.TRA AOB,.TXT JRS,.TRA T,.TXT JFC,.TRA L,.TXT XC,.TRA T,.TXT MA,.TRA P - .ADR AOB,.DIS 01,.TRA P,.TRA N -.ADR JP,.DIS 03,.TRA PU,.ADR PU,.TXT PUSH,.TRA PUS,.TRA PO - .ADR PO,.TXT POP,.TRA POP,.TXT JS,.ADR R,.END R,.TXT -.TXT JS,.TRA P,.TXT JS,.ADR PA,.END A,.TXT,.TXT JR,.TRA PA - .ADR PUS,.DIS 01,.ADR J,.END J,.END,.TXT,.ADR POP -.DIS 01,.END,.TXT,.TRA J,.ADR SH,.DIS 02,.TXT A,.TRA S2,.TXT ROT,.TRA S1,.TXT L - .ADR S2,.TXT S,.ADR S3,.TXT H,.TRA S1,.DIS 21,.TXT JFF,.TRA O,.END - .ADR S1,.DIS 21,.END,.TXT,.ADR C,.END C,.TXT - -;ARITH COMP-SKIP-JUMP - -.ADR ACCP,.DIS 42,.TXT CA,.TRA CA1,.TRA SJ,.TXT A,.TRA JS,.TXT S - .ADR JS,.TXT O,.DIS 31 -.TXT J,.TRA COMP,.TXT S,.TRA COMP,.ADR CA1,.DIS 31,.TXT I,.TRA COMP,.TXT M,.TRA COMP -.ADR SJ,.DIS 31,.TXT JUM,.TRA PSJ,.TXT SKI,.ADR PSJ,.TXT P,.ADR COMP -.DIS 03,.END,.TXT,.TRA L,.ADR E,.END E,.TXT,.TXT L,.TRA E,.TRA PA,.TXT G,.TRA E - .ADR N,.END N,.TXT,.END G,.TXT - -;HALF WORDS - -.ADR HWT,.DIS 51,.TRA HW1,.DIS 21,.TXT R,.TRA HW2,.TXT L,.ADR HW2,.TXT R,.TRA HW3 -.ADR HW1,.DIS 21,.TXT L,.TRA HW4,.TXT R,.ADR HW4,.TXT L - .ADR HW3,.DIS 32,.TRA IMS,.TXT Z,.TRA IMS,.TXT O,.TRA IMS,.TRA EIMS - -;TEST INSTRUCTIONS - -.ADR ACBM,.DIS 31,.TRA AC1,.DIS 01,.TXT D,.TRA AC2,.TXT S,.TRA AC2 - .ADR AC1,.DIS 01,.TXT R,.TRA AC2,.TXT L -.ADR AC2,.DIS 42,.TXT N,.TRA EAN,.TXT Z,.TRA EAN,.TXT C,.TRA EAN,.TXT O - .ADR EAN,.DIS 12,.END,.TXT,.TRA E,.TRA PA,.TRA N - -;BOOLEAN - -.ADR BOOLE,.DIS 24,.TRA ST,.ADR AN,.TXT AND,.TRA B2,.TRA AN,.TRA ST,.TRA AN,.TRA ST -.TXT X,.ADR OR,.TXT OR,.TRA B2,.TXT I,.TRA OR,.TRA AN,.TXT EQ - .TRA DV2,.TRA ST,.TRA OR,.TRA ST,.TRA OR,.TRA OR -.ADR ST,.TXT SET,.ADR B2,.DIS 24,.TXT Z,.TRA IMB,.TRA IMB - .ADR CA,.TXT C,.TRA TA,.ADR TM,.TXT M,.TRA IMB -.ADR CM,.TXT C,.TRA TM,.ADR TA,.TXT A,.TRA IMB,.TRA IMB,.TRA IMB - .ADR CB,.TXT C,.TRA BIMB,.TRA IMB,.TRA CA -.TRA CA,.TRA CM,.TRA CM,.TRA CB,.TXT O,.TRA IMB - -;INSTRUCTION GROUP 120 -.ADR I120,.DIS 11,.TRAX DMOV,.DIS 01,.TXT FIX,.TRAX FIX2,.DIS 21,.END EXTEND - .TXT FLT,.ADR FIX2,.DIS 21,.END,.TRA R -.ADR DMOV,.TXT DMOV,.DIS 01,.TXT E,.TRAX EM,.TXT N - .ADR EM,.DIS 21,.END,.TRA M - -;MORE UUO'S - -.ADR U50,.DIS 03,.TXT OPE,.TRA N,.TXT TT,.ADR CAL,.TXT CAL,.TRA L,.END,.END,.END - .TXT,.TXT RENAM,.TRA E,.TXT I,.TRA N,.TXT OU,.TRA T -.ADR U703,.DIS 02,.TXT CLOS,.TRA E,.TXT RELEA,.TRA S - .TXT MTAP,.TRA E,.TXT UGET,.TRA F - -;INSTRUCTION GROUP 110 - DF ARITHMETIC -.ADR I110,.DIS 21,.TXT DF,.TRAX DF,.TXT D,.TRAX FXDP,.ADR DF,.DIS 02 - .END AD,.END SB,.TXT M,.TRA P,.END DV - -;KL10 FIXED POINT DOUBLE PRECISION OPERATIONS -.ADR FXDP,.DIS 02,.END ADD,.END SUB,.END MUL,.END DIV - -;OPCODES 100 TO 107 COME HERE -.ADR I100,.DIS 21,.END,.DIS 02,.END,.END ADJSP,.END,.END -;**********THIS TERMINATES THE "BYT9" MACRO ARGUMENT****** - > - - IF1,< BLOCK /4> - IF2,< IFN BINC-^D36, > - - IFNDEF CLOC., - IFN CLOC.-CLOC, - - .CREF ;TURN CREF BACK ON - -BTAB: POINT 9,TBL ;TABLE USED TO GET NEXT BYTE POINTER - POINT 9,TBL,8 ;FOR TRANSFER BYTE - POINT 9,TBL,17 - POINT 9,TBL,26 - -OPEVAL: MOVEI T,0 ;EVALUATE FOR AN OP CODE - IDPB T,CHP ;INSERT NULL IN TEXT FOR SYMBOL - MOVEM P,SAVPDL - TRZA F,OUTF -OPTYPE: TRO F,OUTF ;TYPE AN OPCODE SYMBOLICALLY - LSH T,-33 - MOVEM T,INST ;GET OPCODE INTO RIGHT 9 BITS - MOVE T,[XWD 440700,TXT] - MOVEM T,CHP ;FOR OPEVAL,SETUP POINTER TO INPUT TEXT - TRZ F,ITF ;CLEAR INSTRUCTION TYPED FLAG - CLEARB R,W1 - MOVE W2,BTAB -DC1: ILDB T,W2 ;GET NEXT BYTE IN TBL - CAILE T,40 - CAIL T,74 - SOJGE R,DC1 ;SKIP OVER # BYTES = C(R) - JUMPG R,DC1 ;SKIP OVER ALPHA TEXT (AND EXTEND BYTES) WITHOUT COUNTING - SUBI T,40 - JUMPE T,DECX ;TRANSFER ON ASTOP CODE - JUMPG T,DC2 - DPB T,[XWD 340500,PNTR] ;SETUP R ON A DISPATCH BYTE - TRZ T,-4 - AOS T - DPB T,[XWD 300600,PNTR] - TRNN F,OUTF - JRST DC6 ;FOR OPEVAL ONLY - LDB R,PNTR ;GET # BYTES TO SKIP OVER - JRST DC1 - -DC2: HRREI T,-33(T) ;TOTAL SUBTRACTED NOW IS 73 - JUMPL T,DECT ;TYPE OUT A LETTER - JUMPG T,DC3 ;XFER IF BYTE .GE. 74 - ILDB T,W2 ;BYTE IS EXTEND BYTE (73), GET NEXT - MOVEI T,1000-74*2+1(T) ; BYTE AND ADD IN EXTENSION (-OFFSET) -DC3: MOVEI W1,FIR.-1(T) ;BYTE IS AN XFER (1ST XFER IS 74) - IDIVI W1,4 - MOVE W2,BTAB(W2) ;CALCULATE POINTER TO NEXT BYTE - ADDI W2,(W1) - JRST DC1 - -DECT: TRNE F,OUTF - JRST DC8 ;TYPE OUT A LETTER - ILDB W1,CHP ;GET NEXT INPUT LETTER - CAIE W1,133(T) ;COMPARE WITH ASSUMED NEXT LETTER - JRST NOMAT ;DOESNT MATCH - JRST DC1 ;MATCHES, TRY NEXT - -DECX: TRNE F,OUTF ;STOP (CODE 40) HAS BEEN SEEN - POPJ P, ;IF FOR OUTPUT, RETURN - ILDB W1,CHP ;GET NEXT INPUT CHAR IF ANY - JUMPE W1,DC7 ;DOES # OF CHARS MATCH -NOMAT: POP P,R ;NO, BACK UP AND TRY SOME MORE - POP P,W2 - POP P,PNTR - POP P,CHP -NOMAT1: AOS R ;ASSUME NEXT NUMBER FOR BIN VALUE - DPB R,PNTR ;STUFF INTO ANSWER - LDB R,PNTR - JUMPN R,DC6AA ;IF =0, BYTE WAS TOO BIG - CAME P,SAVPDL - JRST NOMAT ;NOT AT TOP LEVEL - POPJ P, ;UNDEFINED, FINALLY - -DC6: MOVEI R,0 ;ASSUME 0 FOR INITIAL BINARY VALUE - DPB R,PNTR -DC6AA: CAMN P,SAVPDL - JRST DC6BB - LDB T,-2(P) ;OLD VALUE OF PNTR - CAME T,(P) - JRST NOMAT1 -DC6BB: PUSH P,CHP - PUSH P,PNTR - PUSH P,W2 - PUSH P,R - JRST DC1 - -DC7: MOVE P,SAVPDL ;RESTORE PUSH DOWN POINTER - MOVE T,INST - LSH T,33 ;PUSH BINARY INTO POSITION FOR OPEVAL - LDB R,[POINT 3,T,8] - TLC T,700000 - TLCN T,700000 - DPB R,[POINT 10,T,12] ;ONLY DONE FOR IO INSTRUCTIONS - JRST CPOPJ1 ;SYMBOL FOUND, SKIP RETURN - -DC8: TRO F,ITF ;SET INSTRUCTION TYPED FLAG - MOVEI T,133(T) - PUSHJ P,TOUT ;OUTPUT A LETTER - CLEARM SPSAV ;SO $D WONT TRY TO DELETE OP CODES - JRST DC1 - -;*** LITERALS XLISTED *** - - XLIST - LIT - LIST -END.C: ;END OF CODE - -SUBTTL VARIABLE STORAGE - - IFN FTDEC20,< IFDEF VARLOC,< -PHVAR: PHASE VARLOC>> ;PHASE VARIABLES FOR UDDT AND MDDT - -BEG.V: ;BEGINNING OF VARIABLES -NM1A: MOVEI W2,0 -ACCCF: MOVEI T,.-. ;LEFT HALF OF A,,B -SEAR2: JUMPE T,SEAR3 ;OR JUMPN T -TOCS: MOVEI T,.-. ;GET RIGHT HALF BACK - -;VARIABLES FOR LINE BUFFER INPUT - -TEXINF: 0 ;NON-0 FOR TEXT INPUT MODE -CHINC: 0 ;COUNT OF CHARACTERS -WAKALL: 0 ;NON-0 TO WAKEUP ON EVERYTHING -;*** DO NOT REORDER THE FOLLOWING *** -TEXTIB: 10 ;TEXTI ARG BLOCK - SIZE -; IFN FTDEC20,< - RD%BRK+RD%TOP+RD%PUN+RD%RND+RD%JFN+RD%BBG+RD%SUI ;FLAGS - .PRIIN,,.PRIOU ;INPUT/OUTPUT JFNS -; > -CHINP: 0 ;POINTER TO NEXT CHAR -LINSPC: 0 ;FREE SPACE COUNT -LINDB: POINT 7,LINBF ;BEGINNING OF BUFFER -LINBP: POINT 7,LINBF ;BEGINNING OF ^R BUFFER -ETXTB: 0 ;WAKEUP TABLE (ALL ONES) - 0 ;BACKUP LIMIT POINTER -;***END OF "DO NOT REORDER" BLOCK*** - - IFN ^-FTDEC20!,< -SAVCHR: 0 ;PRESET RESULT FOR NEXT CALL TO RDBIN -LASCHR: 0 ;ANSWER FROM LAST CALL TO RDBIN - > - -NLINBF==^D20 -LINBF: BLOCK NLINBF ;LINE BUFFER - -SUBTTL STORAGE -- $X LOGIC AND PATCH COMMAND - - IFE FTFILE,< -;VARIABLES USED IN $X LOGIC - -I.XCT: XCT I.NST -I.NST: 0 ;INSTRUCTION BEING EXECUTED -SAV0: 0 ;SAVES AC 0 IN SWAP ROUTINE -XCTS: 0 ;XCT DEPTH COUNTER -I.NSTAC:0 ;AC FIELD OF INST BEING EXECUTED -I.NSTEA:0 ;E FIELD OF INST BEING EXECUTED -XTEM: 0 ;$X REPEAT COUNTER -I.NSTPC:0 ;PC OF INST BEING EXECUTED -FLAGS: 0 ;SAVES DDT FLAG REGISTER -LOCSAV: 0 ;SAVES LOCATION OF INST BEING EXECUTED -SAFETY: 0 ;SAVES T - > ;END FTFILE - -;VARIABLES FOR PATCH COMMAND - -PTLOC: 0 ; SOURCE OF PATCH ADR ,, PATCH ADR -PTLLC: 0 ; BEFORE/AFTER FLAG ,, OLD LLOCO -PTWRD: 0 ; ORIGINAL WORD AT OLD LLOCO - -SUBTTL STORAGE -- BREAKPOINTS - IFE FTFILE,< -SAVE: 0 ;SAVE THE ACS AND PI SYSTEM - JRST SAVEG - -BP1: REPEAT NBP,< - 0 ;JSR TO HERE FOR BREAKPOINT - JSA T, BCOM - 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE - > - -B1INS=BP1+2 -BPN=.-3 - -BCOM: 0 - JRST BCOMG -BCOM3: SKIPE 0 ;ADDR MOD TO LOOK AT COND. INST. -BCOM2: SOSG 0 ;ADDR MOD TO LOOK AT PROCEED COUNTER -LEAV1: XWD 0,LEAVG -BREAK2: ROT S,.-. ;ROT BY # OF BREAK POINT -PROC0: HRRZI R,XEC1 ;MODIFIED TO ADDR OF BREAKPOINT -LEAV: 0 ;INSTRUCTION MODIFIED -CPUSHP: PUSH .-.,BCOM ;GETS MODIFIED IN AC FIELD -SWAP: 0 - JRST SWAPG - > ;END IFE FTFILE - -SVBTS: 0 -SVBTS2: 0 -OLDAR: 0 -SVBT3: 0 -SVBT2: 0 -PSVBTS: BLOCK 3 - -SUBTTL STORAGE -- SYMBOL TABLE LOGIC - -PNTR: EXP INST ;POINTER TO BITS IN INST -INST: 0 ;BINARY FOR INSTRUCTION -CHP: 0 ;CHAR POINTER INTO TXT, TXT+1 -TXT: BLOCK 2 ;STORE INPUT TEXT FOR OPEVAL -SAVPDL: 0 ;SAVE PUSH DOWN LIST POINTER -WRD: 0 -WRD2: 0 -PRNC: 0 - -FRASE: 0 ;DONT CHANGE ORDER, SEE SEARC+3 -SYL: 0 -LWT: 0 -TEM2: 0 -FRASE1: -TEM3: 0 -DEN: 0 - -SAVHSM: BLOCK 1 ;C(.JBHSM), USED BY EVAL, LOOK -SEGNAM: 0 ;THE HIGH SEGMENT NAME (OR 0) - ;WHEN $: IS SUCCESSFULLY DONE -PRGM: 0 -ESTUT: 0 -FSV: 0 -FH: 0 -SYM: 0 - IFE FTDEC20,< - IFE FTFILE,< -SYMP: Z .JBSYM ;POINTS TO LOW SEG SYM TABLE POINTER -USYMP: Z .JBUSY ;POINTS TO UNDEF SYM TABLE POINTER - > - IFN FTFILE,< -SYMP: Z FISPTR -USYMP: Z FIUPTR - >> - IFN FTDEC20,< - IFN FTEXEC,< -SYMP: Z .JBSYM -USYMP: Z .JBUSY> - IFE FTEXEC,< -SYMP: Z .DDSYM -USYMP: Z .DDUSY - > -JDTFLG: -1 ;JOB DATA AREA VALID IF NON-0 - > ;END IFN FTDEC20 - -SYMPNT: 0 ;USED BY SYM TABLE SEARCHES -SPSAV: 0 ;POINTER TO LAST SYMBOL TYPED -DEFV: 0 -ULIMIT: 0 -LLOC: 0 -LLOCO: 0 -SAVLP: 0 ;POINTER TO SAVLOC TABLE -NSAVTB==20 ;SIZE OF SAVLOC TABLE (RING BUFFER) -SAVLTB: BLOCK NSAVTB ;SAVLOC TABLE -SYMORD: 0 ;HOLDS ADDRESSES OF EVAL-OPEVAL ROUTINES - ;SPECIFYING WHICH ORDER TO SEARCH THEM FOR SYMBOLS -QLPNT: 0 ;USED IN "QLIST" AS POINTER TO A SYMBOL -LCNT: 12 ;USED IN LISTEN -SKPCT: 0 ;SKIP COUNT FOR XCT -EFAFLG: 0 ;EFF ADR COMP MODE - IFN FTEXEC!FTFILE,< -;EPTUPT: 0 ;LH - EPT POINTER , RH - UPT POINTER - > - IFN FTYANK,< -PTDFLG: 0 ;EOF SEEN ON COMMAND FILE - > - -SUBTTL STORAGE -- SAVE AREAS FOR PREVIOUS CONTEXT - - IFE FTFILE,< -SAVAPR: 0 ;USED TO SAVE APR REGISTER IN EXEC MODE -SAVPI: 0 - 1177 - -;THESE LOCATIONS MUST BE IN ORDER - THEY ARE USED TO SAVE AND -;RESTORE THE STATE OF DTE FOR KL10 - -SAVTTY: 0 - IFN FTEXEC,< -;SAVUNS: 0 -;SAVEPW: 0 -;SAVERW: 0 -;SAVDPW: 0 -;SAVDRW: 0 - -;SAVEBR: 0 ;SAVED EXEC BASE REG -;MTRCNI: 0 ;RESULT OF CONI MTR, -;TIMCNI: 0 ;RESULT OF CONI TIM, -;MSTRDT: 0 ;ID OF MASTER -11 -DING11: 0 ;PROTOTYPE CONO WORD FOR DTE - > ;END IFN EDDT - -; IFN FTDEC20,< -SAVTT2: 0 -SAVTT3: 0 -LASTPG: 0 -SAVSTS: 0 -; > ;END IFN FTDEC20 - > ;END IFE FTFILE -MSK: XWD -1,-1 - IFN FTEXEC,< ;CELLS FOR TRACE FACILITY -TRCON: 0 ;ASSUMED AT $M+1 -TRCDMP: 0> ;ASSUMED AT $M+2 - - IFE FTFILE,< -B1ADR: 0 -B1SKP: 0 -B1CNT: 0 - -REPEAT NBP*3-3, < 0> - -BNADR=.-3 -AUTOPI: 0 - -AC0: BLOCK 17 - -AC17: 0 - > - -SUBTTL STORAGE -- STATE VARIABLES - -SCHM: EXP PIN ;DO NOT CHANGE ORDER -ARM: EXP PADSO -ODFM: EXP 10 - -SARS: 0 -TEM: 0 -TEM1: 0 - -NSYMCS==20 ;SIZE OF SYMBOL TABLE CACHE -SYMCSH: BLOCK NSYMCS ;SYMBOL TABLE CACHE -SYMCSP: BLOCK 1 ;POINTER TO NEXT FREE ENTRY -OLDSYM: BLOCK 1 ;REMEMBER CACHE SYMBOL TABLE - IFN FTEXEC,< -USRFLG: 0 ;-1 IN USER MODE, 0 IN EXEC MODE -KAFLG: 0 ;0 FOR KI10; 1,,0 FOR KA10 OR PDP-6 -TOPS20: 0 ;0 FOR TOPS10, -1 FOR TOPS20 -XNXTCH: 0 ;PRESET INPUT CHAR AT XLISTE - > ;END IFN FTEXEC -XLIST - - IFN FTFILE,< ;FILDDT STUFF -FWAZER:! ;START OF AREA TO ZERO -FILDEV: BLOCK 3 ;OPEN BLOCK FOR CRASH FILE -FILBLK: BLOCK 4 ;LOOKUP BLOCK FOR CRASH FILE -LBUF: BLOCK 3 -SYMGET: Z ;-1 IF /S, 0 IF NOT -CRASHS: Z ;-1 IF CRASH.SAV ON DISK ,0 IF PEEK AT MONITOR -FDIDOT: Z ;-1 IF . TYPED IN, 0 IF NOT -PATCHS: Z ;-1 IF PATCHING MODE -CHGSFL: Z ;CHANGED SYMBOL TABLE -AC0=. -AC17=.+17 -CRSHAC: BLOCK 20 ;CRASH AC'S -FETPAG: BLOCK 1 ;ADDRESS OF PAGTBL ENTRY FOR LAST - ; CALL TO FETCH -FETADR: BLOCK 1 ;INCORE ADDRESS OF DATA WORD FROM LAST - ; CALL TO FETCH -WINNUM: BLOCK 1 ;WINDOW TO READ OR WRITE -WINDIR: BLOCK CT.RES ;ADDRESS OF PAGTBL ENTRY FOR - ; EACH WINDOW SLOT -PAGTBL: BLOCK MX.SIZ ;1 WORD FOR EVERY VIRT. PAGE - ;BITS 0-4 .EXE FORMAT FLAGS - ;BIT 5 PAGE IN CORE CHANGED - ;BITS 9-17 WINDOW # PLUS 1 - ;RH - FILE PAGE NUMBER -WIND0: BLOCK CT.RES*1000 ;WINDOWS -XPNFMT: BLOCK 1 ;FILE IS IN .XPN FORMAT -LWAZER==.-1 ;END OF AREA TO ZERO - -FISPTR: Z ;POINTER TO SYMBOLS -FIUPTR: Z ;POINTER TO UNDEF SYMS - -MONSIZ: BLOCK 1 ;HIGHEST LOC+1 IN CRASH.SAV FILE - ;(USED SO WE WON'T EXAMINE PAST END) -SAVEFF: Z ;WHERE TO LOAD SYMBOLS IF /S - > ;END IFN FTFILE -LIST - -SUBTTL STORAGE -- PUSH DOWN LIST - -PDL: BLOCK LPDL ;STORAGE FOR PUSH DOWN LIST - -END.V==. - IFN FTDEC20,< IFE FTEXEC,< -VAREND: ;END OF INITIALIZED VARIABLES AREA -.DDSYM: 0 ;SYMTAB PTR (COPIED FROM .JBSYM USUALLY) -.DDUSY: 0 ;UNDEF SYMTAB PTR (COPIED FROM .JBUSY " ) - -SETRT1: 0 ;SCRATCH FOR VARIABLE INITIALIZATION -END.V==. - DEPHASE - >> - -DDTEND: - - IFDEF VARLOC,< IFDEF RUNLOC,< IFDEF PHDDT,< - IFL -,< - PRINTX ?VARIABLES OVERLAP CODE - >>>> - -DEFINE PRSIZE(CODEN,DATAN),< - IF2,< PRINTX [ CODEN WORDS CODE + DATAN WORDS DATA] - >> - - RADIX 10 - PRSIZE(\,\) - RADIX 8 - -;THE FOLLOWING DEFINES CERTAIN SYMBOLS RELEVANT TO HARDWARE OR TO -;DDT ITSELF. THESE ARE *NOT* NEEDED FOR THE ASSEMBLY OF DDT AND -;IN FACT MAY BE IN CONFLICT WITH DEFINITIONS WHICH ARE USED -;DURING ASSEMBLY (E.G. TTY). HENCE, THESE DEFINITIONS ARE ASSEMBLED -;LAST AND ON PASS 2 ONLY. THE SYMBOLS ARE ALL DECLARED INTERNAL -;SO THAT THEY WILL BE KEPT IN THE PROGRAM SYMBOL TABLE AFTER -;LOADING. THESE SYMBOLS ARE THEN USED DURING DDT INSTRUCTION -;ASSEMBLY OR DEASSEMBLY ONLY. - - IFE FTDEC20,< ;DDT SYMTAB NEVER USED ON DEC20 - IF2,< -DEFINE XP (SS,VV)< - SS=VV - INTERN SS> - -OPDEF DDTINT [Z 0,] ;ADDRESS FLAG FOR INTERNAL REGISTERS - -;DEFINE $ SYMBOLS INTERNAL TO DDT - - IFE FTFILE,< -RADIX 10 - -DEFINE DBPNT (Z.)> - -ZZ==0 -REPEAT NBP,> -RADIX 8 - -XP $M, -XP $I, - > ;END FTFILE - -;DEFINE I/O DEVICE MNEMONICS - - IFN FTEXEC,< - -XP PI,004B11 -XP PAG,010B11 -XP CCI,014B11 -XP DLB,060B11 -XP DLC,064B11 -XP CLK,070B11 -XP PTP,100B11 -XP PTR,104B11 -XP CDP,110B11 -XP CDR,114B11 -XP TTY,120B11 -XP LPT,124B11 -XP DIS,130B11 -XP PLT,140B11 -XP CR,150B11 -XP DSK,170B11 -XP DTE,200B11 -XP UTC,210B11 -XP UTS,214B11 -XP MTC,220B11 -XP MTS,224B11 -XP MTM,230B11 -XP DLS,240B11 -XP DPC,250B11 -XP DCSA,300B11 -XP DCSB,304B11 -XP DTC,320B11 -XP DTS,324B11 -XP TMC,340B11 -XP TMS,344B11 > - -;DEFINE EXTENDED OPERATIONS - - IFE FTFILE,< -XP JOV,2554B11 -XP JEN,2545B11 -XP HALT,2542B11 > - > ;END IF2 - > ;END IFE FTDEC20 - -;ONLY STARTING ADDRESS FOR FILDDT AND VMDDT -;NO START ADDRESS FOR EXEC OR USER DDT -;BECAUSE USER PROGRAMS AND MONITOR ARE LOADED -;WITH EXEC OR USER DDT -;BUT STILL WANT TO BE STARTED AT THEIR OWN START ADDRESSES - - REPEAT 0,< - IFN FTVMX, - IFN FTFILE, - - IFE FTEXEC,< - IFN FTDEC20,< - IFE FTMON,< - END BLTDDT>>> ;UDDT HAS SPECIAL START ADR -> - -; END - END DDT ;KLDDT HAS START ADDRESS - diff --git a/apps/pdp10/diags/klad/README.md b/apps/pdp10/diags/klad/README.md index a68e68b6d..266ebb2f5 100644 --- a/apps/pdp10/diags/klad/README.md +++ b/apps/pdp10/diags/klad/README.md @@ -8,7 +8,53 @@ PDP-10 KLAD Diagnostics ----------------------- PCjs has archived selected files from -[PDP-10 KLAD Diagnostics Sources](http://pdp-10.trailing-edge.com/klad_sources/index.html), including: +[PDP-10 KLAD Diagnostics Sources](http://pdp-10.trailing-edge.com/klad_sources/index.html) and turned them into +stand-alone PDP-10 diagnostics, using the new PCjs [MACRO-10 Mini-Assembler](/modules/pdp10/lib/macro10.js). A complete +list is provided [below](#list-of-ka10-diagnostics). + +I experimented with assembling an entire diagnostic (**DAKAK**) from all its original pieces, by going to the +[DAKAK Diagnostic](dakak/) page and typing the following command: + + a 'dakakt.mac;../param.klm;../fixed.klm;dakakm.mac;../uuoerr.klm;../stor.klm' + +and while the MACRO-10 assembly process works: + + loading dakakt.mac + loading param.klm + loading fixed.klm + loading dakakm.mac + loading uuoerr.klm + loading stor.klm + 6301 words loaded at 000137-044630, start address 030000 + 00=000000000000 01=000000000000 02=000000000000 03=000000000000 + 04=000000000000 05=000000000000 06=000000000000 07=000000000000 + 10=000000000000 11=000000000000 12=000000000000 13=000000000000 + 14=000000000000 15=000000000000 16=000000000000 17=000000000000 + PC=030000 RA=00000000 EA=000000 PS=000000 OV=0 C0=0 C1=0 ND=0 PD=0 + 030000: 254020 027776 JRST @27776 + +there are additional modules that must be loaded into the machine as well, which are not yet supported. So it's best +to assemble the modified files that I've placed inside each diagnostic's folder. For the [DAKAK Diagnostic](dakak/), +that's **DAKAK.MAC**: + + >> a dakak.mac + loading dakak.mac + 5849 words loaded at 000137-044133, start address 030621 + 00=000000000000 01=000000000000 02=000000000000 03=000000000000 + 04=000000000000 05=000000000000 06=000000000000 07=000000000000 + 10=000000000000 11=000000000000 12=000000000000 13=000000000000 + 14=000000000000 15=000000000000 16=000000000000 17=000000000000 + PC=030621 RA=00000000 EA=000000 PS=000000 OV=0 C0=0 C1=0 ND=0 PD=0 + 030621: 254000 030622 JRST 30622 + +If the machine is able to run to the end of the diagnostic (which can be located by looking at the diagnostic's original +MACRO-10 listing file) without stopping on an UUO opcode, then you can assume it passed. + +List of KA10 Diagnostics +------------------------ + +The following list of KA10 Diagnostics is not comprehensive. It's simply a list of thosr diagnostics we have archived and +tested with PDPjs so far. - [KA10 Basic Instruction Diagnostic #1 (MAINDEC-10-DAKAA)](dakaa/) - TEST OF JUMP, JUMPA AND SKIPX INSTRUCTIONS diff --git a/apps/pdp10/diags/klad/SMFILE.MAC.txt b/apps/pdp10/diags/klad/SMFILE.MAC.txt deleted file mode 100644 index b3f713dd7..000000000 --- a/apps/pdp10/diags/klad/SMFILE.MAC.txt +++ /dev/null @@ -1,7397 +0,0 @@ -;[toed.xkl.com]DXX:SMFILE.MAC.2, 18-Apr-96 17:04:39, Edit by GORIN -;fixed test for KL10 in $CPUTP. It used an indeterminate form of BLT - -;MAINDEC-10-SMFILE - -MCNVER=0 -DECVER=3 - - XLIST -DEFINE NAME (MCNVER,DECVER),< - -TITLE SMFILE DECSYSTEM 2020 DIAGNOSTICS FE-FILE PROGRAM, VER MCNVER,DECVER> - LIST - LALL - -NAME \MCNVER,\DECVER - - LOC 137 -MCNVER,,DECVER - RELOC - -;*COPYRIGHT 1978,1979 -;*DIGITAL EQUIPMENT CORPORATION -;*MARLBORO, MASS. 01752 - -;*JOHN R. KIRCHOFF - - NOSYM - SEARCH MONSYM,MACSYM - .REQUI SYS:MACREL - .REQUI SYS:MONSYM ;FOR DDT - -INTERN $CCLIN -EXTERN K%INIT,S%INIT,S%CMND,S%ERR - -EXTERN SMPREB ;START ADDRESS OF DIAGNOSTIC PRE-BOOT -EXTERN SMPEND ;END ADDRESS OF DIAGNOSTIC PRE-BOOT - -IF2, -SUBTTL PARAMETERS - -DEFINE S,<;*********************************************************************> - -S -;*DATA SWITCHES -S - -NOPNT== 040000 ;INHIBIT ALL PRINT/TYPE OUT (EXCEPT FORCED) -PNTLPT==020000 ;PRINT ALL DATA ON LPT (DSK IN USER MODE) - -;*AC USE - -T1=1 ;TEMPS -T2=2 -T3=3 -T4=4 -T5=5 -T6=6 -T7=7 -AC10=10 -AC11=11 -AC12=12 -AC13=13 -STPNTR=14 ;STBUF STORE POINTER -FP=15 ;STACK FRAME POINTER -CX=16 ;CALL/RETURN TEMP -T16=16 -P=17 - -A= 1 -B= 2 -C= 3 -D= 4 - -AC0= 0 -AC1= 1 -AC2= 2 -AC3= 3 -AC4= 4 -AC= 5 -CHR= 6 -CHR1= 7 -LP= 10 ;LINE CHAR POINTER -CNT= 15 -INDX= 16 -BYTE= 1 -P1= 13 -P2= 14 -;*FE-FILE DIRECTORY DEFINTIONS - -FEDIR=400000 ;FE-DIR PAGE - -FSP= 0 ;FREE SPACE POINTER -FSL= 1 ;FREE SPACE PAGE #,,LENGTH - -MCP= 2 ;MICROCODE POINTER -MCL= 3 ;MICROCODE PAGE #,,LENGTH - -MPBP= 4 ;MONITOR PRE-BOOT POINTER -MPBL= 5 ;MONITOR PRE-BOOT PAGE #,,LENGTH - -DPBP= 6 ;DIAGNOSTIC PRE-BOOT POINTER -DPBL= 7 ;DIAGNOSTIC PRE-BOOT PAGE #,,LENGTH - -BC1P= 10 ;BOOTCHECK 1 POINTER -BC1L= 11 ;BOOTCHECK 1 PAGE #,,LENGTH - -BCKP= 12 ;BOOTCHECK 2 PRE-BOOT POINTER -BCKL= 13 ;BOOTCHECK 2 PRE-BOOT PAGE #,,LENGTH - -MBOOTP= 14 ;MONITOR BOOT POINTER -MBOOTL= 15 ;MONITOR BOOT PAGE #,,LENGTH - -DBP= 16 ;DIAGNOSTIC BOOT POINTER -DBOOTL= 17 ;DIAGNOSTIC BOOT PAGE #,,LENGTH - -BCHKP= 20 ;BOOTCHECK 2 POINTER -BCHKL= 21 ;BOOTCHECK 2 PAGE #,,LENGTH - -IFP0= 22 ;INDIRECT FILE 0 POINTER -IFL0= 23 ;INDIRECT FILE 0 PAGE #,,LENGTH - -CRAM= 401000 ;CRAM STORAGE, 12 PAGES WORTH - -MPREBP= 415000 ;MONITOR PRE-BOOT PAGE -DPREBP= 416000 ;DIAGNOSTIC PRE-BOOT PAGE - -CRMBC1= 417000 ;BOOTCHECK 1 STORAGE, 12 PAGES WORTH - -BCPREBP=433000 ;BOOTCHECK 2 PRE-BOOT PAGE - -WINDOW= 434000 ;WINDOW PAGE - -GENPAG= 435000 ; - -HOMPAG= 436000 ;HOME BLOCKS READ INTO HERE -S -;*OPERATOR DEFINITIONS (NON-UUO'S) -S - -OPDEF GO [PUSHJ P,] ;SUBROUTINE CALL -OPDEF RTN [POPJ P,] ;SUBROUTINE RETURN -OPDEF PUT [PUSH P,] ;PUT DATA ON PUSH LIST -OPDEF GETIT [POP P,] ;GET DATA FROM PUSH LIST -OPDEF PJRST [JRST ] ;JRST TO ROUTINE THAT RTN'S - -S -;*SUBROUTINE INITIALIZATION CALL -S - -OPDEF PGMINT [JSP 0,SBINIT] ;SUBROUTINE INITIALIZATION - -S -;*HALTING UUO'S (A MORE GRACEFUL HALT THAN SIMPLY USING THE HALT INSTRUCTION). -S - -OPDEF FATAL [37B8!15B12!4] ;FATAL PROGRAMMING HALT -OPDEF ERRHLT [37B8!14B12!4] ;PROGRAM ERROR HALT - -S -;*TERMINAL INPUT UUO'S -S - -OPDEF TTICHR [37B8!0B12!3] ;TTY, INPUT ANY CHARACTER -OPDEF TTIYES [37B8!1B12!3] ;TTY, NORMAL RETURN Y -OPDEF TTINO [37B8!2B12!3] ;TTY, NORMAL RETURN N -OPDEF TTIOCT [37B8!3B12!3] ;TTY, INPUT OCTAL WORD -OPDEF TTIDEC [37B8!4B12!3] ;TTY, INPUT DECIMAL WORD -OPDEF TTICNV [37B8!5B12!3] ;TTY, INPUT CONVERTABLE WORD -OPDEF TTLOOK [37B8!6B12!3] ;TTY, KEYBOARD CHECK -OPDEF TTALTM [37B8!7B12!3] ;TTY, ALT-MODE CHECK -OPDEF TTSIXB [37B8!10B12!3] ;TTY, INPUT SIXBIT WORD -OPDEF TTYINP [37B8!11B12!3] ;TTY, IMAGE MODE INPUT -OPDEF TTICLR [37B8!12B12!3] ;TTY, CLEAR INPUT -S -;*TERMINAL OUTPUT UUO'S. -S - -OPDEF PNTA [37B8!0B12!0] ;PRINT ASCII WORD -OPDEF PNTAF [37B8!0B12!1] ;PRINT ASCII WORD FORCED -OPDEF PNTAL [37B8!17B12!0] ;PRINT ASCIZ LINE -OPDEF PNTALF [37B8!17B12!1] ;PRINT ASCIZ LINE FORCED -OPDEF PSIXL [37B8!14B12!3] ;PRINT SIXBIT'Z LINE -OPDEF PSIXLF [37B8!15B12!3] ;PRINT SIXBIT'Z LINE FORCED -OPDEF PNTMSG [37B8!0B12!0] ;PRINT MESSAGE IMMEDIATE -OPDEF PNTMSF [37B8!1B12!0] ;PRINT MESSAGE IMMEDIATE FORCED -OPDEF PSIXM [37B8!2B12!0] ;PRINT SIXBIT'Z MSG IMMEDIATE -OPDEF PSIXMF [37B8!4B12!0] ;PRINT SIXBIT'Z MSG IMM FORCED -OPDEF PNTCI [37B8!0B12!0] ;PRINT CHARACTER IMMEDIATE -OPDEF PNTCIF [37B8!1B12!0] ;PRINT CHARACTER IMMEDIATE FORCED -OPDEF PNTCHR [37B8!12B12!0] ;PRINT CHARACTER -OPDEF PNTCHF [37B8!12B12!1] ;PRINT CHARACTER FORCED -OPDEF PNT1 [37B8!1B12!0] ;PRINT ONE OCTAL DIGIT -OPDEF PNT1F [37B8!1B12!1] ;PRINT 1 OCTAL DIGIT FORCED -OPDEF PNT2 [37B8!2B12!0] ;PRINT TWO OCTAL DIGITS -OPDEF PNT2F [37B8!2B12!1] ;PRINT 2 OCTAL DIGITS FORCED -OPDEF PNT3 [37B8!3B12!0] ;PRINT THREE OCTAL DIGITS -OPDEF PNT3F [37B8!3B12!1] ;PRINT THREE OCTAL DIGITS FORCED -OPDEF PNT4 [37B8!4B12!0] ;PRINT FOUR OCTAL DIGITS -OPDEF PNT4F [37B8!4B12!1] ;PRINT FOUR OCTAL DIGITS FORCED -OPDEF PNT5 [37B8!5B12!0] ;PRINT FIVE OCTAL DIGITS -OPDEF PNT5F [37B8!5B12!1] ;PRINT FIVE OCTAL DIGITS FORCED -OPDEF PNT6 [37B8!6B12!0] ;PRINT SIX OCTAL DIGITS -OPDEF PNT6F [37B8!6B12!1] ;PRINT SIX OCTAL DIGITS FORCED -OPDEF PNT7 [37B8!7B12!0] ;PRINT 7 OCTAL DIGITS -OPDEF PNT7F [37B8!7B12!1] ;PRINT 7 OCTAL DIGITS FORCED -OPDEF PNT8 [37B8!10B12!0] ;PRINT 8 OCTAL DIGITS -OPDEF PNT8F [37B8!10B12!1] ;PRINT 8 OCTAL DIGITS FORCED -OPDEF PNT11 [37B8!11B12!0] ;PRINT 11 OCTAL DIGITS -OPDEF PNT11F [37B8!11B12!1] ;PRINT 11 OCTAL DIGITS FORCED. -OPDEF PNTADR [37B8!10B12!0] ;PRINT PHYSICAL ADDRESS -OPDEF PNTADF [37B8!10B12!1] ;PRINT PHYSICAL ADDRESS FORCED -OPDEF PNTOCT [37B8!14B12!0] ;PRINT FULL WORD OCTAL -OPDEF PNTOTF [37B8!14B12!1] ;PRINT FULL WORD OCTAL FORCED -OPDEF PNTHW [37B8!13B12!0] ;PRINT OCTAL HALF WORDS, 6 SP 6 -OPDEF PNTHWF [37B8!13B12!1] ;PRINT OCTAL HALF WORDS, 6 SP 6 FORCED -OPDEF PNTOCS [37B8!16B12!3] ;PRINT OCTAL, SUPPRESS LEADING 0'S -OPDEF PNTOCF [37B8!17B12!3] ;PRINT OCTAL, SUPPRESS LEADING 0'S FORCED -OPDEF PNTDEC [37B8!15B12!0] ;PRINT DECIMAL, SUPRESS LEADING 0'S -OPDEF PNTDCF [37B8!15B12!1] ;PRINT DECIMAL, SUPRESS LEADING 0'S FORCED -OPDEF PNTDS [37B8!16B12!0] ;PRINT DECIMAL, SPACES FOR LD 0'S -OPDEF PNTDSF [37B8!16B12!1] ;PRINT DECIMAL, SPACES FOR LD 0'S FORCED -OPDEF PNTNM [37B8!4B12!2] ;PRINT PROGRAM NAME -OPDEF PNTSIX [37B8!0B12!2] ;PRINT SIXBIT WORD -OPDEF PNTSXF [37B8!1B12!2] ;PRINT SIXBIT WORD FORCED -OPDEF DROPDV [37B8!5B12!2] ;CLOSE LOGICAL FILE, USER MODE -OPDEF PCRL [37B8!0B12!CRLF] ;PRINT CARRIAGE RETURN/LINE FEED -OPDEF PCRLF [37B8!1B12!CRLF] ;PRINT CARRIAGE RETURN/LINE FEED FORCED -OPDEF PSP [37B8!0B12!40] ;PRINT SPACE -OPDEF PSPF [37B8!1B12!40] ;PRINT SPACE FORCED -OPDEF PSPACE [37B8!1B12!40] ;PRINT SPACE FORCED -OPDEF PTAB [37B8!1B12!11] ;PRINT TAB FORCED -OPDEF PCRL2 [37B8!0B12!CRLF2] ;PRINT CARRIAGE RETURN/LINE FEED (TWICE) -OPDEF PCRL2F [37B8!1B12!CRLF2] ;PRINT CARRIAGE RETURN/LINE FEED (TWICE) FORCED -OPDEF PBELL [37B8!1B12!7] ;PRINT TTY BELL - -OPDEF PFORCE [37B8!1B12!26] ;PRINT FORCE, CONTROL O OVERRIDE - -DEFINE PMSG (ARG),< - PSIXM [SIXBIT\ARG'_\]> - -DEFINE PMSGF (ARG),< - PSIXMF [SIXBIT\ARG'_\]> - -;*SIXBTZ -- MACRO TO GENERATE SIXBIT DATA FOR PRINTING -;* CONSERVES CORE OVER ASCIZ - -DEFINE SIXBTZ (ARG),< [SIXBIT\ARG'_\]> - -S -;*END OF PASS/PROGRAM UUOS -S - -OPDEF ENDUUO [37B8!12B12!4] ;UUO TO DISPLAY LIGHTS -OPDEF EOPUUO [37B8!16B12!4] ;END OF PROGRAM UUO -SUBTTL STANDARD PROGRAM ASSIGNMENTS - -S -;*PDP-10 STANDARD PC CONTROL FLAGS (SAVED ON PUSHJ, JSR, ETC..) -S - -AROV== 400000 ;ARITHMETIC OVERFLOW -CRY0== 200000 ;CARRY 0 -CRY1== 100000 ;CARRY 1 -FOV== 40000 ;FLOATING POINT OVERFLOW -BIS== 20000 ;BYTE INTERRUPT -USERF== 10000 ;USER MODE -EXIOT== 4000 ;USER PRIV I/O -FXU== 100 ;FLOATING POINT UNDERFLOW -DCK== 40 ;DIVIDE CHECK - -S -;*PDP-10 STANDARD ADDRESS ASSIGNMENTS -S - -LUUO== 40 ;UUO STORAGE, UUO 1-37 -LUUOI== 41 ;UUO SERVICE INSTRUCTION - -S -;*JOB DATA AREA EXTERNALS (OLD DEFINITIONS) -S - -JOBUUO==40 -JOB41== 41 -JOBREL==44 -JOBDDT==74 -JOBSYM==116 -JOBUSY==117 -JOBSA== 120 -JOBFF== 121 -JOBREN==124 -JOBAPR==125 -JOBCNI==126 -JOBTPC==127 -JOBOPC==130 -JOBVER==137 -S -;*JOB DATA AREA EXTERNALS (NEW DEFINITIONS) -S - -.JBUUO==40 -.JB41== 41 -.JBREL==44 -.JBDDT==74 -.JBSYM==116 -.JBUSY==117 -.JBSA== 120 -.JBFF== 121 -.JBREN==124 -.JBAPR==125 -.JBCNI==126 -.JBTPC==127 -.JBOPC==130 -.JBVER==137 - -S -;*USER MODE APR ASSIGNMENTS (FOR "APRENB" CALL) -S - -PDLOVU==200000 ;PUSHDOWN LIST OVERFLOW -MPVU== 20000 ;MEMORY PROTECTION VIOLATION -NXMU== 10000 ;NON-X-MEMORY -PARU== 4000 ;PARITY ERROR -CLKU== 1000 ;CLOCK -FOVU== 100 ;FLOATING OVERFLOW -AROVU== 10 ;ARITHMETIC OVERFLOW - -S -;*USER MODE PRINT OUTPUT CHANNEL ASSIGNMENTS (FOR SUBROUTINE PACKAGE) -;*THE USER SHOULD BE CAUTIONED NOT TO USE THESE CHANNELS WHEN -;*USING THE SUBROUTINE PACKAGE AND CODING USER MODE PROGRAMS. -S - -$DEVCH==17 ;LOGICAL DEVICE CHANNEL - -SUBTTL MACROS - -DEFINE SCMTAB(NAME),< -NAME: XWD L.'NAME,L.'NAME - -DEFINE ECMTAB,< - L.'NAME==.-NAME-1 -> -> - -DEFINE CMTAB(CMD,ADR),< - [ASCIZ "CMD"],,ADR -> - -DEFINE CMABR(ABBR,REST,ADDR),< - [ASCIZ "ABBR"],,[ TLNN T1,(CM%ESC) - JRST ADDR - HRROI T1,[ASCIZ "REST "] - SKIPN MONTYP - JRST [HRRZ 1,1 - OUTSTR @1 - JRST ADDR] - PSOUT - JRST ADDR] -> - -DEFINE CMD(FUNC,ERR,%A),< -%A:! XLIST -IFNB ,< - MOVEI T1,[ASCIZ "ERR"] - MOVEM T1,CMDMSG -> -IFB ,< - SETZM CMDMSG -> - MOVEI T1,CSB - MOVEI T2,FUNC - SKIPN MONTYP - JRST [GO S%CMND - JRST .+3] - COMND - ERJMP [PUSH P,[%A] - JRST CMJERR] - TLNE T1,(CM%NOP) - GO CMDERR - LIST -> -DEFINE NOISE(TEXT),< - CMD [FLDDB.(.CMNOI,,<-1,,[ASCIZ "TEXT"]>)], -> -DEFINE CMDNOP(FUNC,ERR,%A),< -%A:! XLIST -IFNB ,< - MOVEI T1,[ASCIZ "ERR"] - MOVEM T1,CMDMSG -> -IFB ,< - SETZM CMDMSG -> - MOVEI T1,CSB - MOVEI T2,FUNC - SKIPN MONTYP - JRST [GO S%CMND - JRST .+3] - COMND - ERJMP [PUSH P,[%A] - JRST CMJERR] - TLNE T1,(CM%NOP) - LIST -> - -DEFINE ERR(TEXT),< - GO [HRROI T1,[ASCIZ "TEXT"] - JRST ERR%] -> - -DEFINE WARN(TEXT),< - MOVEI [ASCIZ " -% TEXT -"] - PNTALF -> -DEFINE MOVSLJ(AC,E),< - EXTEND AC,[EXP <016B8+>] -> - -DEFINE MOVST(AC,E),< - EXTEND AC,[EXP <015B8+>] -> - -OPDEF CONFIRM [GO CFMCMD] - -DEFINE OP$$AC(OP,ACLST),< - XLIST -IRP ACLST,< - OP P,ACLST -> - LIST -> - -DEFINE SAVEAC,< - OP$$AC PUSH, -> - -DEFINE RESTAC,< - OP$$AC POP, -> -SUBTTL PROGRAM PARAMETERS - -S -;*PROGRAM VARIABLE PARAMETER AREA -S - -USER: 0 ; 0 = EXEC, -1 = USER MODE FLAG -KAIFLG: 0 ;PROCESSOR TYPE, 0 = KA10, -1 = KI10 -KLFLG: 0 ;PROCESSOR TYPE, 0 = KA/KI, -1 = KL10 -MONFLG: -1 ;DIAG MONITOR SPECIAL USER FLAG -MONCTL: 0 ;DIAG MON/SYS EXR FLAG -MONTEN: 0 ;-1= LOADED BY 10 -CONSW: 0 ;CONSOLE SWITCH SETTINGS -PASCNT: 0 ;PROGRAM PASS COUNT -ITRCNT: 0 ;PROGRAM ITERATION COUNT -RUNFLG: 0 ;PROGRAM RUN FLAG -TESTPC: 0 ;SUBTEST PC -ERRPC: 0 ;ERROR PC -ERRTLS: 0 ;ERROR TOTALS -$ONETM: 0 ;SUBROUTINE INITIALIZATION FLAG - -S -;*SPECIAL PROGRAM DISPATCH ADDRESSES -S - -CPOPJ1: ;SKIP RETURN -UUOSKP: AOS (P) ;SKIP RETURN FROM UUO -CPOPJ: ;NON-SKIP REGULAR RETURN -UUOEXT: RTN ;UUO RETURN -$UUOER: JFCL ;INITED AS (JRST $UOERX) - -S -;*PROCESSOR CONTROL STORAGE -S - -$ACC0: 0 ;INTERRUPT SAVED AC0 - -$SVUUO: 0 ;CURRENT USERS UUO -$SVUPC: 0 ;PC OF CURRENT USERS UUO -S -;*UUO DISPATCH TABLE -S - XLIST -IFNDEF LUUO1, -IFNDEF LUUO2, -IFNDEF LUUO3, -IFNDEF LUUO4, -IFNDEF LUUO5, -IFNDEF LUUO6, -IFNDEF LUUO7, -IFNDEF LUUO10, -IFNDEF LUUO11, -IFNDEF LUUO12, -IFNDEF LUUO13, -IFNDEF LUUO14, -IFNDEF LUUO15, -IFNDEF LUUO16, -IFNDEF LUUO17, -IFNDEF LUUO20, -IFNDEF LUUO21, -IFNDEF LUUO22, -IFNDEF LUUO23, -IFNDEF LUUO24, -IFNDEF LUUO25, -IFNDEF LUUO26, -IFNDEF LUUO27, -IFNDEF LUUO30, -IFNDEF LUUO31, -IFNDEF LUUO32, -IFNDEF LUUO33, - LIST -UUODIS: LUUO1,,$UUOER - LUUO3,,LUUO2 - LUUO5,,LUUO4 - LUUO7,,LUUO6 - LUUO11,,LUUO10 - LUUO13,,LUUO12 - LUUO15,,LUUO14 - LUUO17,,LUUO16 - LUUO21,,LUUO20 - LUUO23,,LUUO22 - LUUO25,,LUUO24 - LUUO27,,LUUO26 - LUUO31,,LUUO30 - LUUO33,,LUUO32 - -S -;*PRINT CONTROL STORAGE -S - -PNTFLG: 0 ;PRINT FLAG, -1 WHILE IN PRINT ROUTINE -PNTENB: 0 ;PRINT ENABLE -PDISF: 0 ;PRINT DISABLED FLAG -PNTINH: 0 ;INHIBIT PRINT INPUT CHECKS -PNTSPC: 0 ;PRINT SPACE CONTROL -OPTIME: 0 ;TYPE-IN WAIT TIME -$TWCNT: 0 ;TIME WAITED -$DVOFF: 0 ;LOGICAL DEVICE INITED FLAG -$TTCHR: 0 ;ACTUAL TYPED IN CHAR -$CHRIN: 0 ;UPPER CASED & PARITY STRIPPED CHAR -$TYPNB: 0 ;TYPED IN NUMBER -$CRLF: 0 ;FREE CR/LF FLAG -$TABF: 0 ;TAB CONVERSION FLAG -$FFF: 0 ;FORM FEED CONVERSION FLAG -$VTF: 0 ;VERTICAL TAB CONVERSION FLAG -USRLFF: 0 ;USER LF FILLERS -USRCRF: 0 ;USER CR FILLERS - -CRLF: ASCII/ -/ -CRLF2: ASCII/ - -/ -RADIX: ^D10 ;DECIMAL PRINT RADIX -RADLSP: 40 ;DECIMAL PRINT LEADING CHAR -RADLSC: ^D10 ;DECIMAL PRINT LEADING CHAR COUNT - -S -;*USER MODE OUTPUT FILE INFORMATION -S - -$OBUF: BLOCK 3 ;LOGICAL FILE OUTPUT BUFFER HEADER -$OUTNM: SIXBIT /PRINT/ ;FILE NAME -$OUTEX: SIXBIT /PNT/ ;FILE NAME EXTENSION - BLOCK 2 - -S -;*PUSHDOWN LIST CONTROL INFORMATION -S - -PLIST: PLIST-PLISTE,,PLIST -PLISTS: BLOCK 200 -PLISTE: 0 ;END OF PUSHDOWN LIST - -S -;*NUMBER INPUT DIGIT FLAG -S - -TTNBRF: 0 ;-1 IF ANY DIGIT TYPED - -S -;*USER MODE MONITOR TYPE FLAG -S - -MONTYP: 0 ;0 = TOPS10, -1 = TOPS20 - -S -;*SPECIAL USERS USER MODE OUTPUT ERROR INTERCEPT INSTUCTION -S - -$$OUTER:0 ;IF NON-ZERO, XCT'D AT END OF USER MODE ERROR - -S -;*"SWITCH" CALL USAGE CONTROL -S - -$$TOGGLE:0 ;IF NON-ZERO, USE C(CONSW) FOR SWITCHES - -S -;*SM10 (KS-10) PROCESSOR TYPE FLAG -S - -SM10: 0 ;IF -1 THIS IS A KS-10 - -SALL -SUBTTL FIXED DATABASE - -EV: JRST START - JRST REEN - MCNVER,,DECVER - -PROMPT: ASCIZ "SMFILE>" - -CMDFNC: FLDDB. (.CMKEY,,MAINCM) - SCMTAB MAINCM - - CMABR D,EPOSIT,DEP - CMABR DE,OSIT,DEP - CMTAB DEBUG,SETDEB - CMTAB DEPOSIT,DEP - - CMABR E,XAMINE,EXAM - CMTAB ECHO,ECHO - CMABR EX,IT,.EXIT - CMTAB EXAMINE,EXAM - CMTAB EXIT,.EXIT - - CMTAB HELP,HELP - - CMTAB INFORMATION,INFORM - - CMTAB OUTPUT,OUTX - - CMTAB PUSH,PUSHCM - - CMTAB RDBC1,RDBC1 - CMTAB READ,READ - - CMTAB SERIAL,SERIAL - - CMTAB TAKE,TAKE - CMTAB TYPE,.TYPE - - CMTAB WRITE,WRITE - - ECMTAB - -INIT: FLDDB. .CMINI -CFM: FLDDB. .CMCFM -SUBTTL INIT PROGRAM - -START: PGMINT - - SETZM PNTSPC ;NO SPACES AFTER NUMBERS - MOVEI 16,1 ;CLEAR AC'S - SETZB 0,FIRZER ;AND LOW CORE - BLT 16,16 - MOVE T1,[FIRZER,,FIRZER+1] - BLT T1,ENDZER ;ZAP! - - MOVE T1,[.PRIIN,,.PRIOU] - MOVEM T1,CSB+.CMIOJ - - SKIPE MONTYP - JRST START1 - - OUTSTR [ASCIZ/[FOR HELP TYPE "HELP"] -/] - GO CONCIN ;INIT ^C INTERRUPT - GO S%INIT ;INIT SCANNING MODULE - GO K%INIT ;INIT KEYBOARD MODULE - GO T$INT ;INIT SPECIAL SUBRTN INPUT - GO INTCOR ;INIT CORE FOR CRAM STORE - JRST NEXT -START1: TMSG <[FOR HELP TYPE "HELP"] -> - MOVEI T1,.FHSLF - RPCAP ;GET CURRENT CAPABILITIES - ERMSG - TLO T3,(SC%CTC+SC%GTB) - EPCAP - ERMSG - - MOVEI T1,.FHSLF ;THIS FORK - MOVE T2,[LEVTAB,,CHNTAB] - SIR - ERMSG - - MOVE T1,[.TICCX,,^D30] - ATI - ERMSG - - MOVE T1,[.TICCC,,^D31] - ATI - ERMSG - - MOVE T1,[.TICCZ,,^D32] - ATI - ERMSG - - MOVE T1,[.TICCT,,^D33] - ATI - ERMSG - - MOVE T1,[.TICCo,,^D34] - ATI - ERMSG - - MOVEI T1,.FHSLF - MOVEI T2,1B19+1B30+1B31+1B32+1B33+1b34 - AIC - ERMSG - - EIR - ERMSG - - JRST NEXT ;JOIN MAIN LOOP -SUBTTL MAIN LOOP - -CMDERR: SKIPN MONTYP - JRST CMDE10 - PUSH P,T2 - MOVEI T1,.FHSLF - GETER - ERMSG - TLZ T2,-1 - CAIN T2,IFIXX3 - JRST [POP P,T2 - RET] - - SKIPN CMDMSG - JRST .+6 - - HRROI T1,[ASCIZ " -?COMMAND ERROR: "] - PSOUT - HRRO T1,CMDMSG - PSOUT - JRST REEN - - HRROI T1,[ASCIZ " -?JSYS ERROR: "] - PSOUT - MOVEI T1,.PRIOU - HRLOI T2,.FHSLF - MOVEI T3,0 - ERSTR - ERJMP . - ERJMP . - JRST REEN - -CMDE10: SKIPN CMDMSG - JRST .+5 - OUTSTR [ASCIZ/?COMMAND ERROR: /] - OUTSTR @CMDMSG - OUTSTR [ASCIZ/ -/] - JRST REEN - GO S%ERR ;REPORT SCANNER ERROR - JRST REEN - -ERR%: SKIPN MONTYP - JRST ERR%10 - ESOUT - TMSG < - ERROR AT PC > - HRRZ (P) - SOS - PNTOCF - TMSG < -> - JRST REEN -ERR%10: TTCALL 13,0 - JFCL - HRRZ 1,1 - OUTSTR [ASCIZ/?/] - OUTSTR @1 - OUTSTR [ASCIZ/ - ERROR AT PC /] - HRRZ (P) - SOS - PNTOCF - OUTSTR [ASCIZ/ -/] - CLRBFI - SETZM CCBLK+2 - JRST REEN - -T$INT: MOVE [GO $$TT0] - MOVEM $$$TT0 - MOVE [GO $$TT1] - MOVEM $$$TT1 - RTN - -$$TT0: INCHRW $TTCHR - MOVE $TTCHR - CAIE "Z"-100 - PNTCHR - RTN - -$$TT1: INCHRW - PNTCHR - RTN -REEN: MOVE T1,[.PRIIN,,.PRIOU] - MOVEM T1,CSB+.CMIOJ - -NEXT: SETZM CTADR - HRROI T1,CMDBUF - MOVEM T1,CSB+.CMBFP - MOVEM T1,CSB+.CMPTR - MOVEI T1,^D250 - MOVEM T1,CSB+.CMCNT - MOVEM T1,CSB+.CMABC - HRROI T1,ATOM - MOVEM T1,CSB+.CMABP - - CMD INIT - -PARSE: MOVE P,PLIST - MOVEI T1,PARSET - MOVEM T1,CTADR - - CMD CMDFNC, - - SETZM CTADR - HRRZ T4,(T2) ;GET DISPATCH ADDRESS - GO (T4) ;PROCESS COMMAND - - JRST NEXT -;*HERE ON AN ERROR FROM COMMAND JSYS - -CMJERR: MOVEI T1,.FHSLF - GETER - ERMSG - TLZ T2,-1 - CAIE T2,IOX4 - CALL JSHLT0 - -EOCF: MOVEI [ASCIZ " - [END OF COMMAND FILE] -SMFILE>"] - PNTALF - HLRZ T1,CSB+.CMIOJ - CLOSF - ERR - MOVE T1,[.PRIIN,,.PRIOU] - MOVEM T1,CSB+.CMIOJ - SETZM INTAKE - RTN - -;*COMMAND PARSER SUBROUTINES - -CFMCMD: CMD CFM, - HLRZ T1,CSB+.CMIOJ - CAIN T1,.PRIIN - JRST CFMCM1 - MOVEI CMDBUF - SKIPGE ECOFLG - PNTALF - RET -CFMCM1: MOVEI CMDBUF - SKIPE $DVOFF ;LOGGING ? - PNTAL - RTN - -SIXOUT: MOVE AC12,[POINT 6,AC11] - MOVEI AC13,6 - ILDB AC12 - ADDI 40 - PNTCHF - SOJG AC13,.-3 - RTN -SUBTTL COMMANDS -- INFORMATION - - SCMTAB INFO - CMTAB DISK,IDISK - CMTAB FEFILE,IFEFILE - CMTAB FREE,IFREE - CMTAB INDIRECT,FETELL - ECMTAB - -INFORM: CMD [FLDDB.(.CMKEY,,INFO)], - HRRZ T1,(T2) - PUT T1 - CONFIRM - GETIT T1 - JRST (T1) - -IFREE: SKIPN MONTYP - JRST IFREE10 - SKIPN FESETF - ERR - - PMSG <^FRONT-END FREE PAGES = > - - HRRZ FEDIR+FSL - PNTDCF - - PCRLF - PCRLF - RTN - -IFREE10:PMSGF - RTN - -IFEFILE:SKIPN FESETF - ERR - - SKIPN MONTYP - JRST IFEF10 - - PMSGF <^DISK ADDRESS IN HOME BLOCK = > - MOVE HOMPAG+200+101 - PNTHWF - - PMSGF <^LENGTH IN HOME BLOCK = > - MOVE HOMPAG+200+102 - PNTHWF - - PMSGF <^8080 POINTER IN HOME BLOCK = > - MOVE HOMPAG+200+103 - PNTHWF - - PCRLF - PCRLF - RTN - -IFEF10: PMSGF <^DISK ADDRESS IN HOME BLOCK = > - MOVE HOMBUF+101 - PNTHWF - - PMSGF <^LENGTH IN HOME BLOCK = > - MOVE HOMBUF+102 - PNTHWF - - PMSGF <^8080 POINTER IN HOME BLOCK = > - MOVE HOMBUF+103 - PNTHWF - - PCRLF - PCRLF - RTN - -IDISK: SKIPN FESETF - ERR - - SKIPN MONTYP - JRST IDSK10 ;TOPS-10 - - HRROI T1,STBUF - HRRZ T2,FEJFN - MOVSI T3,(1B2) - JFNS - ERMSG - - PMSGF <^USING > - MOVEI STBUF - PNTALF ;PRINT STRUCTURE - - PTAB - - MOVE T1,DSKTYP - CAIN T1,.MSRP4 - PMSGF - CAIN T1,.MSRP5 - PMSGF - CAIN T1,.MSRP6 - PMSGF - CAIN T1,11 - PMSGF - - PCRLF - PCRLF - RTN - -IDSK10: PMSGF <^USING > - MOVE DIRDEV - PNTSXF ;PRINT STRUCTURE - - PTAB - - MOVE T1,DSKTYP - CAIN T1,.DCUR4 - PMSGF - CAIN T1,.DCUR6 - PMSGF - CAIN T1,.DCUR3 - PMSGF - - PCRLF - PCRLF - RTN -SUBTTL COMMANDS -- PUSH - -PUSHCM: NOISE - CONFIRM - SKIPN MONTYP - JRST PUSH10 - - MOVSI T1,(GJ%SHT) - HRROI T2,[ASCIZ "PS:EXEC.EXE.0"] - GTJFN - ERMSG - - HRRZM T1,EXJFN# - MOVSI T2,(CR%CAP) - CFORK - ERMSG - - HRRZM T1,EXFORK# - HRLZ T1,T1 - HRR T1,EXJFN - GET - ERMSG - - HRRZ T1,EXFORK - MOVEI T2,0 - SFRKV - ERMSG - - WFORK -pushpc: ERMSG - - KFORK - ERMSG - - RTN - -PUSH10: PMSGF - RTN -SUBTTL COMMANDS -- DEBUG - - SCMTAB SETCLR - CMTAB CLEAR,[0] - CMTAB SET,[-1] - ECMTAB - - SCMTAB DBFLGS - CMTAB DEBUG,DEBUGF - ECMTAB - - -SETDEB: CMD [FLDDB.(.CMKEY,,SETCLR)], - HRRZ T1,(T2) ;GET POINTER - MOVE T6,(T1) ;GET FLAG - CMD [FLDDB.(.CMKEY,,DBFLGS)], - HRRZ T5,(T2) ;PLACE TO STORE ANSWER - NOISE - CONFIRM - MOVEM T6,(T5) ;SET/CLEAR FLAG - RTN - -SUBTTL COMMANDS -- ECHO - - SCMTAB YESNO - CMTAB NO,0 - CMTAB YES,777777 - ECMTAB - -ECHO: NOISE - CMD [FLDDB.(.CMKEY,,YESNO,,)] - HRRE T1,(T2) - PUT T1 - CONFIRM - GETIT ECOFLG - RTN -SUBTTL COMMANDS -- DEPOSIT - - SCMTAB DEPCMD - CMTAB BC1,DPBC1 - CMTAB CRAM,DPCRAM - ECMTAB - -DEP: CMD [FLDDB.(.CMKEY,,DEPCMD)], - HRRZ T1,(T2) - JRST (T1) - -;*HERE TO STORE INTO CRAM - -DPBC1: SETOM BC1FLG# - JRST DPCRAM+1 -DPCRAM: SETZM BC1FLG - NOISE - CMD [FLDDB.(.CMNUM,,^D8)], - SKIPL T2 - CAIL T2,4000 - ERR
- MOVEM T2,EXMADR - CONFIRM - MOVE T6,EXMADR - SETOM DEPFLG - GO DPYFLD - RTN -SUBTTL COMMANDS -- SERIAL - -SERIAL: NOISE - CMD [FLDDB.(.CMNUM,,^D10)], - MOVEM T2,SNBR# - CONFIRM - - MOVE T2,SNBR - SKIPL T2 - CAIGE T2,^D4097 - ERR - CAILE T2,^D32767 - ERR - - SKIPN RDFLAG - ERR - - MOVEI T6,1700 ;SERIAL # AT APRID: (1700) OF MICROCODE - IMULI T6,3 - ADDI T6,CRAM - - DPB T2,[POINT 12,1(T6),23] - LSH T2,-^D12 - DPB T2,[POINT 6,1(T6),35] - - JRST ENDDPY+2 ;RECOMPUTE CRAM PARITY -SUBTTL COMMANDS -- EXAMINE - - SCMTAB EXCMDS - CMTAB BC1,EXBC1 - CMTAB CRAM,EXCRAM - ECMTAB - -EMDFNC: FLDDB. (.CMKEY,,EXCMDS) - -EXAM: CMD EMDFNC, - HRRZ T1,(T2) - JRST (T1) - -;*EXAMINE CRAM - -EXBC1: SETOM BC1FLG - JRST EXCRAM+1 -EXCRAM: SETZM BC1FLG - NOISE - CMD [FLDDB.(.CMNUM,,^D8)], - PUSH P,T2 - CONFIRM - POP P,T2 - SKIPL T2 - CAIL T2,4000 - ERR ADDRESS MUST BE 0 TO 3777 - MOVEM T2,EXMADR -EXCRM: PNTMSF [ASCIZ/SHOULD BE: /] - MOVE EXMADR - PNT6F - PNTCIF "/" - MOVE T6,EXMADR - IMULI T6,3 - SKIPN BC1FLG - ADDI T6,CRAM - SKIPE BC1FLG - ADDI T6,CRMBC1 - MOVE 2(T6) - PNT8F - MOVE 1(T6) - PNTOTF - MOVE (T6) - PNTOTF - - GO CRMFLD - PCRLF - RET -SUBTTL COMMANDS -- EXIT - -.EXIT: NOISE - CONFIRM - SKIPN MONTYP - EXIT - HALTF - JRST START - -SUBTTL COMMANDS -- HELP - -HELP: CONFIRM - SKIPN MONTYP - JRST HELP10 - MOVSI T1,(GJ%OLD!GJ%PHY!GJ%SHT) - HRROI T2,HLPFIL - GTJFN - JRST NOHELP - MOVE T2,[7B5!OF%RD!OF%NWT] - OPENF - JRST NOHELP - MOVEI T6,.PRIOU -HELPLP: BIN - ERJMP HELPEX - EXCH T1,T6 - BOUT - EXCH T1,T6 - JRST HELPLP - -HELPEX: CLOSF - ERR - RTN - -NOHELP: PMSGF - MOVEI HLPFIL - PNTALF - PCRLF - RTN - -HLPFIL: ASCIZ "SMFILE.HLP" -;*TOPS-10 HELP - -HELP10: MOVE [SIXBIT/DSK/] - MOVEM GTJDEV - SETZM GTJDIR - MOVE [SIXBIT/SMFILE/] - MOVEM GTJFIL - MOVE [SIXBIT/HLP/] - MOVEM GTJEXT - - GO OPNTEN ;FIND FILE - ERR - -HLP10A: GO GET10 - SKIPGE EOFSW - JRST R10EOF - - MOVEM T3,HLP10X# - MOVEI HLP10X - PNTA - JRST HLP10A -SUBTTL COMMANDS -- WRITE - - SCMTAB WRTCMD - CMTAB BC1,WRTBC1 - CMTAB BC2,WRTBC2 - CMTAB BOOT,WRTBOOT - CMTAB CRAM,WRTCRM - CMTAB DIAGBT,WRTDB - CMTAB DONE,WRTDONE - CMTAB INDIRECT,WRTFEF - CMTAB RESET,WRTRSET - CMTAB SETUP,WRTSET - ECMTAB - -WRITE: CMD [FLDDB.(.CMKEY,,WRTCMD)], - HRRZ T1,(T2) - JRST (T1) -;*WRTSET - READ FE-FILE DIRECTORY BLOCK INTO MEMORY - -WRTSET: HRROI T1,[ASCIZ "BOOTSTRAP"] - SKIPE DEBUGF - HRROI T1,[ASCIZ "BOOTST"] - SKIPN MONTYP - HRROI T1,[ASCIZ "KS10FE"] - MOVEM T1,GTJFIL - - HRROI T1,[ASCIZ "BIN"] - MOVEM T1,GTJEXT - - HRROI T1,[ASCIZ "ROOT-DIRECTORY"] - SKIPE DEBUGF - HRROI T1,[ASCIZ "KIRCHOFF"] - SKIPN MONTYP - HRROI T1,[ASCIZ "[6,2020]"] - MOVEM T1,GTJDIR - - HRROI T1,[ASCIZ "XXX:"] - MOVEM T1,GTJDEV - - MOVSI T1,(GJ%OLD) - MOVEM T1,GTJFLG - - CMD [FLDDB.(.CMFIL)] - HRRZM T2,FEJFN - - CONFIRM - - SKIPN MONTYP - JRST DEVSTR ;TOPS-10 - - HRROI T1,STBUF - HRRZ T2,FEJFN - MOVSI T3,(1B2) - JFNS - ERMSG - - SKIPN DEBUGF - GO FIND ;FIND PHYSICAL DISK - - HRROI T1,STBUF - STDEV - ERR - MOVEM T2,STRDES# - - HRRZ T1,FEJFN - MOVE T2,[1,,.FBCTL] - MOVEI T3,T3 - GTFDB - ERMSG - TLNE T3,(FB%NXF) ;DOES FILE EXIST - ERR - - MOVE T2,[1,,.FBBYV] - MOVEI T3,T3 - GTFDB - ERMSG - TLZ T3,FB%PGC ;JUST PAGE COUNT - CAIGE T3,^D48 - ERR - - MOVE T1,FEJFN - MOVEI T2,OF%RD!OF%WR - OPENF ;OPEN THE FILE - JRST [JSERR ;CAN'T OPEN THE FRONT-END FILE SYSTEM? - JRST START] - - HRLZ T1,FEJFN - MOVE T2,[.FHSLF,,] - MOVE T3,[PM%RD+PM%WR+PM%PLD] - PMAP ;READ FE DIRECTORY BLOCK - ERJMP [JSERR - JRST START] - - SKIPE DEBUGF - JRST WRTSEX - - MOVEI T1,0 - GO REDHOM ;READ HOME BLOCK - RTN - - SKIPN HOMPAG+200+101 - ERR - - SKIPN HOMPAG+200+102 - ERR - -WRTSEX: SETOM FESETF# - SETZM FERSETF# - RTN -;*WRTRSET - RESET FE-DIRECTORY - -WRTRSET:CONFIRM - SKIPN FESETF ;FE-DIR IN CODE ? - ERR - - SETZM FEDIR ;CLEAR FE-DIR PAGE - MOVE [FEDIR,,FEDIR+1] - BLT FEDIR+777 - - SKIPE MONTYP - MOVE T1,HOMPAG+200+102 ;GET LENGTH IN SECTORS - SKIPN MONTYP - MOVE T1,HOMBUF+102 - SKIPE DEBUGF - MOVEI T1,^D64*4 - - IDIVI T1,^D4 ;CONVERT TO PAGES - SUBI T1,^D28 ;SUB FIXED FILES - HRLI T1,^D28 ;FIRST FREE PAGE STARTS AT PAGE 28 - MOVEM T1,FEDIR+FSL ;SET RESET PAGE #,,LENGTH - - MOVE T1,[^D1,,^D12] - MOVEM T1,FEDIR+MCL ;SETUP MCODE PAGE #,,LENGTH - - MOVE T1,[^D13,,^D1] - MOVEM T1,FEDIR+MPBL ;SETUP M-PRE-BOOT PAGE #,,LENGTH - - MOVE T1,[^D14,,^D1] - MOVEM T1,FEDIR+DPBL ;SETUP D-PRE-BOOT PAGE #,,LENGTH - - MOVE T1,[^D15,,^D12] - MOVEM T1,FEDIR+BC1L ;SETUP BOOTCHECK 1 PAGE #,,LENGTH - - MOVE T1,[^D27,,^D1] - MOVEM T1,FEDIR+BCKL ;SETUP BC2-PRE-BOOT PAGE #,,LENGTH - - SETOM FERSETF ;INDICATE RESET - - RTN -;*FIND - FIND THE PHYSICAL DISK WITH THE GIVEN NAME - -FIND: MOVEI T6,ARGBLK ;SET ARG BLOCK INDEX - SETOM .MSRCH(T6) ;-1 TO CHAN ENTRY OF BLOCK - SETOM .MSRCT(T6) ;-1 TO CONTROLLER ENTRY OF BLOCK - SETOM .MSRUN(T6) ;-1 TO UNIT ENTRY OF BLOCK - -FINDN: SETZM .MSRST(T6) ;CLEAR STATUS ENTRY OF BLOCK - MOVE T1,[ARGBLK+.MSRST,,ARGBLK+.MSRST+1] - BLT T1,ARGBLK+ARGLN-1 ;CLEAR REST OF BLOCK - - HRROI T1,BUFFER - MOVEM T1,.MSRSN(T6) ;USE BUFFER TO SAVE PACK NAME - - MOVE T1,[.MSRLN,,.MSRNU] - MOVEI T2,ARGBLK -MS: MSTR ;GET STATUS OF NEXT DISK UNIT - ERCAL FINDER ; ERROR - - CAIN T2,MSTX27 ;ERROR, IS THE UNIT A DISK ? - JRST FINDN ;NO, NOT A DISK, TRY FOR ANOTHER - - MOVE T1,.MSRST(T6) ;GET UNIT STATUS - TLNN T1,(MS%MNT) ;MOUNTED ? - JRST FINDN ;NO, TRY ANOTHER - TLNE T1,(MS%OFL) ;IS THE UNIT OFF-LINE ? - JRST FINDN ;YES, TRY ANOTHER - - MOVE T2,[POINT 7,STBUF] - MOVE T3,[POINT 7,BUFFER] - GO STRCMP ;COMPARE REQUESTED/DISK NAME - JRST FINDN ;NO MATCH - - MOVE T1,.MSRST(T6) ;GET MONITORS DRIVE TYPE - LDB T1,[POINT 9,T1,17] - MOVEM T1,DSKTYP# ;SAVE - - SETZM RM03F# - CAIN T1,.MSRP4 ;RP04 ? - JRST FINDX ;YES - CAIN T1,.MSRP5 ;RP05 ? - JRST FINDX ;YES - CAIN T1,.MSRP6 ;RP06 ? - JRST FINDX ;YES - CAIE T1,11 ;.MSRM3 RM03 ? - ERR - SETOM RM03F ;YES - -FINDX: RTN - - ARGLN=.MSRLN -ARGBLK: BLOCK ARGLN - -;ERROR HANDLER FOR THE GET NEXT UNIT JSYS - -FINDER: MOVEI T1,400000 ;SET PROCESS HANDLE - GETER ;GET ERROR CODE - HRRZ T2,T2 ;ERROR CODE ONLY - CAIN T2,MSTX27 ;IS THE UNIT A DISK ? - RTN ;NO, GO BACK AND LOOK FURTHER - CAIE T2,MSTX18 ;NO MORE UNITS FOUND ? - JRST [JSERR - JRST START] - GETIT T6 - JRST FALIAS ;CAN'T FIND PHYSICAL, TRY ALIAS - -;*STRCMP - STRING COMPARE ROUTINE - -STRCMP: ILDB 0,T2 - ILDB T1,T3 - CAME 0,T1 ;EQUAL ? - RTN ;NO, LOSE - - JUMPN 0,STRCMP ;YES, END OF STRING ? - JRST CPOPJ1 ;YES, SKIP RETURN -;*FALIAS - FIND THE PHYSICAL DISK WITH THE GIVEN ALIAS - -FALIAS: MOVEI T6,ARGBLK ;SET ARG BLOCK INDEX - SETOM .MSRCH(T6) ;-1 TO CHAN ENTRY OF BLOCK - SETOM .MSRCT(T6) ;-1 TO CONTROLLER ENTRY OF BLOCK - SETOM .MSRUN(T6) ;-1 TO UNIT ENTRY OF BLOCK - -FADN: SETZM .MSRST(T6) ;CLEAR STATUS ENTRY OF BLOCK - MOVE T1,[ARGBLK+.MSRST,,ARGBLK+.MSRST+1] - BLT T1,ARGBLK+ARGLN-1 ;CLEAR REST OF BLOCK - - HRROI T1,BUFFER - MOVEM T1,.MSRSA(T6) ;USE BUFFER TO SAVE PACK ALIAS - - MOVE T1,[.MSRLN,,.MSRNU] - MOVEI T2,ARGBLK -FAMS: MSTR ;GET STATUS OF NEXT DISK UNIT - ERCAL FADER ; ERROR - - CAIN T2,MSTX27 ;ERROR, IS THE UNIT A DISK ? - JRST FADN ;NO, NOT A DISK, TRY FOR ANOTHER - - MOVE T1,.MSRST(T6) ;GET UNIT STATUS - TLNN T1,(MS%MNT) ;MOUNTED ? - JRST FADN ;NO, TRY ANOTHER - TLNE T1,(MS%OFL) ;IS THE UNIT OFF-LINE ? - JRST FADN ;YES, TRY ANOTHER - - MOVE T2,[POINT 7,STBUF] - MOVE T3,[POINT 7,BUFFER] - GO STRCMP ;COMPARE REQUESTED/DISK NAME - JRST FADN ;NO MATCH - MOVE T1,.MSRST(T6) ;GET MONITORS DRIVE TYPE - LDB T1,[POINT 9,T1,17] - MOVEM T1,DSKTYP# ;SAVE - - SETZM RM03F# - CAIN T1,.MSRP4 ;RP04 ? - JRST FINDAX ;YES - CAIN T1,.MSRP5 ;RP05 ? - JRST FINDAX ;YES - CAIN T1,.MSRP6 ;RP06 ? - JRST FINDAX ;YES - CAIE T1,11 ;.MSRM3 RM03 ? - ERR - SETOM RM03F ;YES - -FINDAX: RTN - -;ERROR HANDLER FOR THE GET NEXT UNIT JSYS - -FADER: MOVEI T1,400000 ;SET PROCESS HANDLE - GETER ;GET ERROR CODE - HRRZ T2,T2 ;ERROR CODE ONLY - CAIN T2,MSTX27 ;IS THE UNIT A DISK ? - RTN ;NO, GO BACK AND LOOK FURTHER - CAIN T2,MSTX18 ;NO MORE UNITS FOUND ? - ERR - JRST [JSERR - JRST START] - -;*COMPUTE DIAGNOSTIC PRE-BOOT PAGE POINTER - -CPBPNTR:MOVEI SMPREB ;GET START ADR OF PRE-BOOT - ADDI 5 ;ADD OFFSET TO POINTER - MOVE 0,@0 ;GET POINTER TO POINTER BLOCK - HLRZ 1,0 ;GET LH CODE WORD - CAIE 1,123456 ;IS IT CORRECT ? - ERR - SUBI 0,1000 ;REMOVE OFFSET - ADDI 0,SMPREB ;ADD ACTUAL LOCATION - HRRZM 0,SMPBPG# ;SAVE - HRL 0,0 ;FORM BLT POINTER - ADDI 0,1 - MOVEM 0,SMPBBLT# ;SAVE - RTN - -;DEFINITIONS FOR SM10 - -BOORG=1000 ;START OF HARDWARE BOOT -FEADR=101 ;ADDRESS OF BOOTSTRAP -FEMAX=102 ;ADDRESS OF LENGTH POINTER - -OPDEF WRUBR [701B8+3B12] ;WRITE USER BASE REGISTER -OPDEF RDIO [712B8] ;READ I/O -OPDEF TION [711B8] ;TEST I/O -OPDEF WRIO [713B8] ;WRITE I/O - -UBAP0= 763000 ;ADDRESS OF UNIBUS MAP -UBSTAT= 763100 ;ADDRESS OF UNIBUS STATUS - -KPALIVE=31 ;KEEP-ALIVE & STATUS WORD -MSRH= 36 ;RH-11 BASE ADDRESS -MSDRIVE=37 ;DRIVE NUMBER -MSSLAVE=40 ;SLAVE & FORMAT - -RIPST=21 ;READ IN PRESET -RDATA=71 ;READ DATA -RDY=200 ;READY -MCPE=20000 ;MASS I/O CONTROL BUS PARITY ERROR -TRE=40000 ;TRANSFER ERROR -SC=100000 ;SPECIAL CONDITION -FMT22=10000 ;FORMAT 22 (FORMAT BIT) - -RHCLR= 40 ;CONTROLLER CLEAR - -MT.RF= 71 ;READ FORWARD -MT.SF= 31 ;SPACE FILE FORWARD -MT.SR= 33 ;SPACE REVERSE -MTTM= 4 ;TAPE MARK -MTPIP= 20000 ;POSITIONING IN PROGRESS -MTDRY= 200 ;DRIVE READY -MTFCE= 1000 ;FRAME COUNT ERROR - -;REGISTER DEFINITIONS - -RPCS1= 00 ;CONTROL AND STATUS 1 -RPWC= 02 ;WORD COUNT REGISTER -RPBA= 04 ;UNIBUS ADDRESS REGISTER -RPDA= 06 ;DESIRED SECTOR/TRACK ADDRESS REGISTER -RPCS2= 10 ;CONTROL AND STATUS 2 -RPDS= 12 ;DRIVE STATUS -RPER1= 14 ;ERROR 1 -RPER2= 40 ;ERROR 2 -RPER3= 42 ;ERROR 3 -RPOF= 32 ;OFFSET REGISTER -RPDC= 34 ;DESIRED CYLINDER REGISTER -RPFC= 6 ;MAGTAPE FRAME COUNTER -RPTC= 32 ;MAGTAPE TAPE CONTROL - -UNV36X=100000 ;UNIBUS 36 BIT TRANSFER BIT -UBVBIT==40000 ;UNIBUS VALID BIT - -BUFFER: BLOCK -BTJFN: BLOCK 1 ;BOOT JFN -FEJFN: BLOCK 1 ;JFN FOR THE FRONT-END FILE SYSTEM -BOOTEV: BLOCK 1 ;ENTRY VECTOR FOR BOOT -FORKN: BLOCK 1 -;*WRTBOOT - WRITE MONITOR PRE-BOOT AND BOOT ON DISK - -WRTBOOT:HRROI T1,[ASCIZ "SMBOOT"] - MOVEM T1,GTJFIL - - HRROI T1,[ASCIZ "EXE"] - MOVEM T1,GTJEXT - - SETZM GTJDEV - SETZM GTJDIR - - MOVSI T1,(GJ%OLD) - MOVEM T1,GTJFLG - - CMD [FLDDB.(.CMFIL)] - MOVEM T2,BTJFN ;SAVE THE JFN OF THE BOOT FILE - - CONFIRM - - SKIPN FESETF ;FE-DIR IN CORE ? - ERR - SKIPN FERSETF - ERR - - SETZM RPPAGD - MOVE [RPPAGD,,RPPAGD+1] - BLT RPPAGX ;CLEAR PRE-BOOT POINTER STORAGE - - SKIPN MONTYP - JRST WB10 ;TOPS-10 - - SETZB T1,T2 ;CREATE A BLANK FORK - CFORK - ERJMP [JSERR ;ERROR ON CFORK - HALTF] - MOVEM T1,FORKN ;SAVE FORK - - HRRZ T1,BTJFN ;GET THE JFN OF THE BOOT - HRL T1,FORKN ;GET PROCESS HANDLE - SETZ T2,0 - GET - ERJMP [JSERR ;ERROR ON GET - JRST START] - - MOVE T1,FORKN - GEVEC ;GET THE VECTOR OF BOOT - MOVEM T2,BOOTEV ;SAVE BOOT ENTRY VECTOR ADDRESS - - SETZ T3, ;CLEAR PAGE COUNTER - MOVE T4,[-1000,,0] ;ALLOW FOR 1000 PAGES - HRLZ T1,FORKN ;GET PROCESS HANDLE - HRR T1,T4 ;GET PAGE NUMBER - - RPACS ;READ PAGE ACCESS - TDNE T2,[PA%RD!PA%PEX] - AOS T3 ;IT'S THERE, COUNT IT - AOBJN T4,.-5 - - HRRZ T1,FEDIR+FSL ;GET PRESENT FREE SPACE LENGTH - CAMGE T1,T3 ;ENOUGH ROOM ? - ERR - - SETZM WINDOW - MOVE [WINDOW,,WINDOW+1] - BLT WINDOW+777 ;CLEAR MONITOR PRE-BOOT PAGE - - MOVE T4,[-1000,,0] ;ALLOW FOR 1000 PAGES - HRLZ P1,FEJFN ;GET JFN OF FRONT-END-FILE SYSTEM - HLR P1,FEDIR+FSL ;GET FREE SPACE PAGE # - HRLZM P1,FEDIR+MBOOTL ;SET MBOOT START PAGE - - MOVEI P2,RPPAGD - SETZM PBCNT# - HLRZ T7,FEDIR+MBOOTL - -PAGELP: HRLZ T1,FORKN ;GET PROCESS HANDLE - HRR T1,T4 ;GET PAGE NUMBER - RPACS ;READ PAGE ACCESS - TDNE T2,[PA%RD!PA%PEX] - GO COPPAG ;COPY PAGE - - AOBJN T4,PAGELP ;TRY ANOTHER PAGE - - ANDI P1,-1 - HRLM P1,FEDIR+FSL ;RESET FREE SPACE START PAGE - HRRZ 0,FEDIR+FSL ;FREE SPACE NOW SMALLER BY BOOT - SUB 0,PBCNT - HRRM 0,FEDIR+FSL - - MOVE P1,PBCNT - HRRM P1,FEDIR+MBOOTL ;SET MBOOT LENGTH - - SETOM (P2) ;INDICATE END OF SPACE - - MOVE T1,BOOTEV ;FIND ENTRY VECTOR - HRRZM T1,1(P2) ;SET ENTRY VECTOR - - HRLZ T1,FEJFN - HRRI T1,^D13 - MOVE T2,[.FHSLF,,] - MOVE T3,[PM%WR!PM%RD] - PMAP ;GET MONITOR PRE-BOOT IN FE-FILE - ERJMP [JSERR - JRST START] - - MOVE [BTSTR1,,WINDOW] - BLT WINDOW+ - - SETO T1, - SETZ T3, - PMAP ;PUT MONITOR PRE-BOOT IN FE-FILE - ERJMP [JSERR - JRST START] - - MOVE T1,FORKN - KFORK ;KILL "GET" FORK - ERJMP [JSERR - JRST START] - - RTN -;*WRTDB - WRITE DIAGNOSTIC PRE-BOOT AND "SMMON" ON DISK - -WRTDB: HRROI T1,[ASCIZ "SMMON"] - MOVEM T1,GTJFIL - - HRROI T1,[ASCIZ "EXE"] - MOVEM T1,GTJEXT - - SETZM GTJDEV - SETZM GTJDIR - - MOVSI T1,(GJ%OLD) - MOVEM T1,GTJFLG - - CMD [FLDDB.(.CMFIL)] - MOVEM T2,BTJFN ;SAVE THE JFN OF THE BOOT FILE - - CONFIRM - - SKIPN FESETF ;FE-DIR IN CODE ? - ERR - SKIPN FERSETF - ERR - - GO CPBPNTR ;COMPUTE DIAGNOSTIC PRE-BOOT POINTER - - SETZM @SMPBPG - MOVE SMPBBLT - BLT SMPEND ;CLEAR PRE-BOOT POINTER STORAGE - - SKIPN MONTYP - JRST WDB10 ;TOPS-10 - - SETZB T1,T2 ;CREATE A BLANK FORK - CFORK - ERJMP [JSERR ;ERROR ON CFORK - HALTF] - MOVEM T1,FORKN ;SAVE FORK - - HRRZ T1,BTJFN ;GET THE JFN OF THE BOOT - HRL T1,FORKN ;GET PROCESS HANDLE - SETZ T2,0 - GET - ERJMP [JSERR ;ERROR ON GET - JRST START] - - MOVE T1,FORKN - GEVEC ;GET THE VECTOR OF BOOT - MOVEM T2,BOOTEV ;SAVE BOOT ENTRY VECTOR ADDRESS - - SETZ T3, ;CLEAR PAGE COUNTER - MOVE T4,[-1000,,0] ;ALLOW FOR 1000 PAGES - HRLZ T1,FORKN ;GET PROCESS HANDLE - HRR T1,T4 ;GET PAGE NUMBER - - RPACS ;READ PAGE ACCESS - TDNE T2,[PA%RD!PA%PEX] - AOS T3 ;IT'S THERE, COUNT IT - AOBJN T4,.-5 - - HRRZ T1,FEDIR+FSL ;GET PRESENT FREE SPACE LENGTH - CAMGE T1,T3 ;ENOUGH ROOM ? - ERR - - SETZM WINDOW - MOVE [WINDOW,,WINDOW+1] - BLT WINDOW+777 ;CLEAR DIAG PRE-BOOT PAGE - - MOVE T4,[-1000,,0] ;ALLOW FOR 1000 PAGES - HRLZ P1,FEJFN ;GET JFN OF FRONT-END-FILE SYSTEM - HLR P1,FEDIR+FSL ;GET FREE SPACE PAGE # - HRLZM P1,FEDIR+DBOOTL ;SET DBOOT START PAGE - - MOVE P2,SMPBPG - SETZM PBCNT - HLRZ T7,FEDIR+DBOOTL - -WRTDBLP:HRLZ T1,FORKN ;GET PROCESS HANDLE - HRR T1,T4 ;GET PAGE NUMBER - RPACS ;READ PAGE ACCESS - TDNE T2,[PA%RD!PA%PEX] - GO COPPAG ;COPY PAGE - - AOBJN T4,WRTDBLP ;TRY ANOTHER PAGE - - ANDI P1,-1 - HRLM P1,FEDIR+FSL ;RESET FREE SPACE START PAGE - HRRZ 0,FEDIR+FSL ;FREE SPACE NOW SMALLER BY BOOT - SUB 0,PBCNT - HRRM 0,FEDIR+FSL - - MOVE P1,PBCNT - HRRM P1,FEDIR+DBOOTL ;SET DBOOT LENGTH - - SETOM (P2) ;INDICATE END OF SPACE - - MOVE T1,BOOTEV ;FIND ENTRY VECTOR - HRRZM T1,1(P2) ;SET ENTRY VECTOR - - HRLZ T1,FEJFN - HRRI T1,^D14 - MOVE T2,[.FHSLF,,] - MOVE T3,[PM%WR!PM%RD] - PMAP ;GET DIAG PRE-BOOT IN FE-FILE - ERJMP [JSERR - JRST START] - - MOVE [SMPREB,,WINDOW] - BLT WINDOW+777 - - SETO T1, - SETZ T3, - PMAP ;PUT DIAG PRE-BOOT IN FE-FILE - ERJMP [JSERR - JRST START] - - MOVE T1,FORKN - KFORK ;KILL "GET" FORK - ERJMP [JSERR - JRST START] - - RTN -;*WRTBC2 - WRITE BOOTCHECK 2 PRE-BOOT AND "SMBC2" ON DISK - -WRTBC2:HRROI T1,[ASCIZ "SMBC2"] - MOVEM T1,GTJFIL - - HRROI T1,[ASCIZ "EXE"] - MOVEM T1,GTJEXT - - SETZM GTJDEV - SETZM GTJDIR - - MOVSI T1,(GJ%OLD) - MOVEM T1,GTJFLG - - CMD [FLDDB.(.CMFIL)] - MOVEM T2,BTJFN ;SAVE THE JFN OF THE BC2 FILE - - CONFIRM - - SKIPN FESETF ;FE-DIR IN CODE ? - ERR - SKIPN FERSETF - ERR - - GO CPBPNTR ;COMPUTE DIAGNOSTIC PRE-BOOT POINTER - - SETZM @SMPBPG - MOVE SMPBBLT - BLT SMPEND ;CLEAR PRE-BOOT POINTER STORAGE - - SKIPN MONTYP - JRST BC210 ;TOPS-10 - - SETZB T1,T2 ;CREATE A BLANK FORK - CFORK - ERJMP [JSERR ;ERROR ON CFORK - HALTF] - MOVEM T1,FORKN ;SAVE FORK - - HRRZ T1,BTJFN ;GET THE JFN OF THE BOOT - HRL T1,FORKN ;GET PROCESS HANDLE - SETZ T2,0 - GET - ERJMP [JSERR ;ERROR ON GET - JRST START] - - MOVE T1,FORKN - GEVEC ;GET THE VECTOR OF BOOT - MOVEM T2,BOOTEV ;SAVE BOOT ENTRY VECTOR ADDRESS - - SETZ T3, ;CLEAR PAGE COUNTER - MOVE T4,[-1000,,0] ;ALLOW FOR 1000 PAGES - HRLZ T1,FORKN ;GET PROCESS HANDLE - HRR T1,T4 ;GET PAGE NUMBER - - RPACS ;READ PAGE ACCESS - TDNE T2,[PA%RD!PA%PEX] - AOS T3 ;IT'S THERE, COUNT IT - AOBJN T4,.-5 - - HRRZ T1,FEDIR+FSL ;GET PRESENT FREE SPACE LENGTH - CAMGE T1,T3 ;ENOUGH ROOM ? - ERR - - SETZM WINDOW - MOVE [WINDOW,,WINDOW+1] - BLT WINDOW+777 ;CLEAR BC2 PRE-BOOT PAGE - - MOVE T4,[-1000,,0] ;ALLOW FOR 1000 PAGES - HRLZ P1,FEJFN ;GET JFN OF FRONT-END-FILE SYSTEM - HLR P1,FEDIR+FSL ;GET FREE SPACE PAGE # - HRLZM P1,FEDIR+BCHKL ;SET BC2 START PAGE - - MOVE P2,SMPBPG - SETZM PBCNT - HLRZ T7,FEDIR+BCHKL - -BC2LP: HRLZ T1,FORKN ;GET PROCESS HANDLE - HRR T1,T4 ;GET PAGE NUMBER - RPACS ;READ PAGE ACCESS - TDNE T2,[PA%RD!PA%PEX] - GO COPPAG ;COPY PAGE - - AOBJN T4,BC2LP ;TRY ANOTHER PAGE - - ANDI P1,-1 - HRLM P1,FEDIR+FSL ;RESET FREE SPACE START PAGE - HRRZ 0,FEDIR+FSL ;FREE SPACE NOW SMALLER BY BC2 - SUB 0,PBCNT - HRRM 0,FEDIR+FSL - - MOVE P1,PBCNT - HRRM P1,FEDIR+BCHKL ;SET BC2 LENGTH - - SETOM (P2) ;INDICATE END OF SPACE - - MOVE T1,BOOTEV ;FIND ENTRY VECTOR - HRRZM T1,1(P2) ;SET ENTRY VECTOR - - HRLZ T1,FEJFN - HRRI T1,^D27 - MOVE T2,[.FHSLF,,] - MOVE T3,[PM%WR!PM%RD] - PMAP ;GET BC2 PRE-BOOT IN FE-FILE - ERJMP [JSERR - JRST START] - - MOVE [SMPREB,,WINDOW] - BLT WINDOW+777 - - SETO T1, - SETZ T3, - PMAP ;PUT BC2 PRE-BOOT IN FE-FILE - ERJMP [JSERR - JRST START] - - MOVE T1,FORKN - KFORK ;KILL "GET" FORK - ERJMP [JSERR - JRST START] - - RTN - -COPPAG: PUT T1 - PUT T3 - - SETZM PAG0FLG# - HRRZ T3,T1 - CAIN T3,1 ;IS THIS PAGE 1 ? - ERR - - CAIN T3,0 ;IS THIS PAGE 0 ? - SETOM PAG0FLG ;IF PAGE 0 OF FILE, SET FLAG - GETIT T3 - GETIT T1 - - SKIPE PAG0FLG ;IF PAGE 0, IGNORE IT - RTN - - PUT T1 - MOVE T6,P2 - GO SBOOTP ;SET 8080 POINTER - AOS P2 - - GETIT T1 - HRRZM T1,0(P2) ;SET A POINTER TO PAGE NUMBER - AOS P2 ;POINT TO NEXT - - PUT T1 - HRRZ T3,T1 ;FIND THE PAGE - - HRL T1,FORKN ;GET FORK NUMBER - HRR T1,T3 ;GET PAGE NUMBER - MOVE T2,[.FHSLF,,] - MOVE T3,[PM%RD] - PMAP ;GET PAGE IN SELF - ERJMP [JSERR - JRST START] - - MOVE T1,P1 ;SET UP PMAP ARGUMENTS - MOVE T2,[.FHSLF,,] - MOVSI T3,(PM%WR!PM%RD) - PMAP - ERJMP [JSERR - JRST START] ;JSYS ERROR - - MOVE T3,[GENPAG,,IPAG] - BLT T3,IPAG+777 - - SETO T1, - SETZ T3, - PMAP - ERJMP [JSERR - JRST START] ;JSYS ERROR - - GETIT T3 ;REMOVE PAGE NUMBER - AOS P1 ;UPDATE P1 ARGUMENTS - AOS PBCNT ;COUNT PAGES - ADDI T7,1 ;UPDATE DISK ADDRESS - RTN ;RETURN -;HERE TO READ MONITOR BOOT EXE FILE - -WB10: GO OPNTEN ;OPEN INPUT FILE - ERR - - MOVE T1,LOOK10+.RBNAM - MOVEM T1,O.NAM1 ;SAME NAME AS INPUT - - MOVSI T1,(SIXBIT/RIM/) - MOVEM T1,O.EXT ;OUTPUT EXT IS ".RIM" - - MOVE T1,LOOK10+.RBVER - MOVEM T1,O.VER ;USE INPUT VERSION AS OUTPUT VERSION - - LDB T1,[POINT 11,LOOK10+.RBPRV,23] - MOVEM T1,O.TIME ;USE INPUT TIME AND DATE AS OUTPUT - - LDB T1,[POINT 3,LOOK10+.RBEXT,20] - DPB T1,[POINT 3,O.DATE,23] - LDB T1,[POINT 12,LOOK10+.RBPRV,35] - DPB T1,[POINT 12,O.DATE,35] - - MOVE T1,DIRDIR ;USE WRTSET'S PPN - MOVEM T1,O.PPN - - MOVE T1,DIRDEV ;USE WRTSET'S DEVICE - MOVEM T1,O.DEV - - MOVEI T1,577 ;SET PROTECTION TO 577 - MOVEM T1,O.PRT - - MOVE T1,LOOK10+.RBSIZ ;GET FILE SIZE IN WORDS - TRNE T1,777 - ERR - SOS T1 ;MINUS EXE DIR PAGE - IDIVI T1,^D512 ;CONVERT TO PAGES - MOVEM T1,FEDIR+MBOOTL ;SET MONITOR BOOT LENGTH - IMULI T1,4 ;CONVERT TO BLOCKS - MOVEM T1,S.ALO ;SET FOR ALLOCATION - - GO ETER10 ;ENTER OUTPUT FILE - ERR - -;*NOW READ EXE FILE - - SETZM SELPAG# - GO REDDIR ;READ THE DIRECTORY PAGE - - HLRZ A,DBUF ;DIRECTORY DESCRIPTOR - HRRZ T6,DBUF ;LENGTH OF THE DIRECTORY - CAIN A,SV.DIR ;IS THIS A DIRECTORY? - CAIL T6,^D128 ; WHICH IS LESS THAN OR EQUAL TO 128 WORDS LONG? - ERR - - MOVNI T6,-1(T6) ;MAKE AN AOBJN POINTER TO THE DIRECTORY - HRLI T6,DBUF+1 ; .. - MOVSS T6 ; .. - - MOVEI P2,RPPAGD - ADDI P2,1 - -WB10A: MOVE M,(T6) ;BITS,,FILE PAGE NUMBER - JUMPL M,WB10C ;JUMP IF HI SEG PAGE, READ IT IMMEDIATELY - ; ABOVE THE LOW SEGMENT - - HRRZ T5,1(T6) ;CORE PAGE NUMBER - LSH T5,P2WLSH ;CORE ADDRESS - SKIPN T5 ;PAGE 0? - HRROI T5,0 ;YES, READ IT AND REMEMBER ITS PAGE 0 - -WB10C: LDB T7,[POINT 9,1(T6),8] - -WB10D: TRNN M,-1 ;AN ALLOCATED BUT ZERO PAGE? - SOJA M,WB10H ;YES, COUNT DOWN REPEAT COUNT AND UPDATE CORE ADDRESS - HRRZ T4,M ;FILE PAGE NUMBER - LSH T4,P2BLSH ;CONVERT TO BLOCK WITHIN THE FILE - CAMGE T4,SELPAG ;FILE PAGE NUMBERS MUST BE MONOTONICALLY INCREASING - ERR - -WB10E: CAMN T4,SELPAG ;AT THE RIGHT BLOCK WITHIN THE FILE? - JRST WB10G ;YES - -WB10F: GO SELBLK ;BYPASS FILE PAGE - JRST WB10E ;SEE IF THERE YET - -WB10G: CAIN T5,1000 - ERR - - GO REDPAG ;READ EXE DATA PAGE - - JUMPL T5,WB10X ;PAGE 0 ? - - PUT T5 - ANDI T5,-1 - LSH T5,W2PLSH - HRRZM T5,(P2) ;SET A POINTER TO PAGE NUMBER - GETIT T5 - ADDI P2,2 ;POINT TO NEXT - - OUT WC,[IOWD ^D512,IPAG - 0] - SKIPA - ERR - - JUMPGE T5,WB10H ;PAGE 0 JUST READ? - -WB10X: MOVE IPAG+.JBSA - MOVEM BOOTEV ;SAVE STARTING ADDRESS - - MOVEI T5,0 ;READ NEXT PAGE INTO PAGE 1 - -WB10H: ADDI T5,PAGSIZ ;NEXT PAGE -WB10I: SOSL T7 ;READ ALL THE PAGES DESCRIBED BY THIS ENTRY? - AOJA M,WB10D ;NO, READ THE NEXT PAGE - - AOBJN T6,.+1 ;BUMP PAST THIS DIRECTORY ENTRY, AND - AOBJN T6,WB10A ; GO GET THE NEXT DIRECTORY ENTRY - - SETOM -1(P2) ;INDICATE END OF SPACE - - MOVE T1,BOOTEV - HRRZM T1,(P2) ;SET ENTRY VECTOR -;*FIND 1ST PAGE OF FILE & PUT IN PRE-BOOT - - CLOSE WC,CL.DLL ;CLOSE FILE - RELEAS WC, - - GO GETBK2 ;GET DISK ADDRESS - MOVEM T1,FEDIR+MBOOTP - MOVEM T1,T5 - -;*COMPUTE 8080 ADDRESSES - PUT IN PRE-BOOT - - MOVEI T6,RPPAGD - -WB10J: MOVE (T6) ;GET ADDRESS POINTER - CAMN [-1] ;TERMINATOR ? - JRST WB10K ;YES - - MOVE T1,T5 - GO TBOOTP ;SET DISK ADDRESS - ADDI T5,4 - ADDI T6,2 - JRST WB10J - -WB10K: SETZM MPREBP - MOVE [MPREBP,,MPREBP+1] - BLT MPREBP+777 - - MOVE [BTSTR1,,MPREBP] ;PUT MONITOR PRE-BOOT IN PLACE - BLT MPREBP+ - - RTN ;DONE -;HERE TO READ DIAGNOSTIC BOOT EXE FILE - -WDB10: GO OPNTEN ;OPEN INPUT FILE - ERR - - MOVE T1,LOOK10+.RBNAM - MOVEM T1,O.NAM1 ;SAME NAME AS INPUT - - MOVSI T1,(SIXBIT/RIM/) - MOVEM T1,O.EXT ;OUTPUT EXT IS ".RIM" - - MOVE T1,LOOK10+.RBVER - MOVEM T1,O.VER ;USE INPUT VERSION AS OUTPUT VERSION - - LDB T1,[POINT 11,LOOK10+.RBPRV,23] - MOVEM T1,O.TIME ;USE INPUT TIME AND DATE AS OUTPUT - - LDB T1,[POINT 3,LOOK10+.RBEXT,20] - DPB T1,[POINT 3,O.DATE,23] - LDB T1,[POINT 12,LOOK10+.RBPRV,35] - DPB T1,[POINT 12,O.DATE,35] - - MOVE T1,DIRDIR ;USE WRTSET'S PPN - MOVEM T1,O.PPN - - MOVE T1,DIRDEV ;USE WRTSET'S DEVICE - MOVEM T1,O.DEV - - MOVEI T1,577 ;SET PROTECTION TO 577 - MOVEM T1,O.PRT - - MOVE T1,LOOK10+.RBSIZ ;GET FILE SIZE IN WORDS - TRNE T1,777 - ERR - SOS T1 ;MINUS EXE DIR PAGE - IDIVI T1,^D512 ;CONVERT TO PAGES - MOVEM T1,FEDIR+DBOOTL ;SET MONITOR BOOT LENGTH - IMULI T1,4 ;CONVERT TO BLOCKS - MOVEM T1,S.ALO ;SET FOR ALLOCATION - - GO ETER10 ;ENTER OUTPUT FILE - ERR - -;*NOW READ EXE FILE - - SETZM SELPAG# - GO REDDIR ;READ THE DIRECTORY PAGE - - HLRZ A,DBUF ;DIRECTORY DESCRIPTOR - HRRZ T6,DBUF ;LENGTH OF THE DIRECTORY - CAIN A,SV.DIR ;IS THIS A DIRECTORY? - CAIL T6,^D128 ; WHICH IS LESS THAN OR EQUAL TO 128 WORDS LONG? - ERR - - MOVNI T6,-1(T6) ;MAKE AN AOBJN POINTER TO THE DIRECTORY - HRLI T6,DBUF+1 ; .. - MOVSS T6 ; .. - - MOVE P2,SMPBPG - ADDI P2,1 - -WDB10A: MOVE M,(T6) ;BITS,,FILE PAGE NUMBER - JUMPL M,WDB10C ;JUMP IF HI SEG PAGE, READ IT IMMEDIATELY - ; ABOVE THE LOW SEGMENT - - HRRZ T5,1(T6) ;CORE PAGE NUMBER - LSH T5,P2WLSH ;CORE ADDRESS - SKIPN T5 ;PAGE 0? - HRROI T5,0 ;YES, READ IT AND REMEMBER ITS PAGE 0 - -WDB10C: LDB T7,[POINT 9,1(T6),8] - -WDB10D: TRNN M,-1 ;AN ALLOCATED BUT ZERO PAGE? - SOJA M,WDB10H ;YES, COUNT DOWN REPEAT COUNT AND UPDATE CORE ADDRESS - HRRZ T4,M ;FILE PAGE NUMBER - LSH T4,P2BLSH ;CONVERT TO BLOCK WITHIN THE FILE - CAMGE T4,SELPAG ;FILE PAGE NUMBERS MUST BE MONOTONICALLY INCREASING - ERR - -WDB10E: CAMN T4,SELPAG ;AT THE RIGHT BLOCK WITHIN THE FILE? - JRST WDB10G ;YES - -WDB10F: GO SELBLK ;BYPASS FILE PAGE - JRST WDB10E ;SEE IF THERE YET - -WDB10G: CAIN T5,1000 - ERR - - GO REDPAG ;READ EXE DATA PAGE - - JUMPL T5,WDB10X ;PAGE 0 ? - - PUT T5 - ANDI T5,-1 - LSH T5,W2PLSH - HRRZM T5,(P2) ;SET A POINTER TO PAGE NUMBER - GETIT T5 - ADDI P2,2 ;POINT TO NEXT - - OUT WC,[IOWD ^D512,IPAG - 0] - SKIPA - ERR - - JUMPGE T5,WDB10H ;PAGE 0 JUST READ? - -WDB10X: MOVE IPAG+.JBSA - MOVEM BOOTEV ;SAVE STARTING ADDRESS - - MOVEI T5,0 ;READ NEXT PAGE INTO PAGE 1 - -WDB10H: ADDI T5,PAGSIZ ;NEXT PAGE -WDB10I: SOSL T7 ;READ ALL THE PAGES DESCRIBED BY THIS ENTRY? - AOJA M,WDB10D ;NO, READ THE NEXT PAGE - - AOBJN T6,.+1 ;BUMP PAST THIS DIRECTORY ENTRY, AND - AOBJN T6,WDB10A ; GO GET THE NEXT DIRECTORY ENTRY - - SETOM -1(P2) ;INDICATE END OF SPACE - - MOVE T1,BOOTEV - HRRZM T1,(P2) ;SET ENTRY VECTOR -;*FIND 1ST PAGE OF FILE & PUT IN PRE-BOOT - - CLOSE WC,CL.DLL ;CLOSE FILE - RELEAS WC, - - GO GETBK2 ;GET DISK ADDRESS - MOVEM T1,FEDIR+DBP - MOVEM T1,T5 - -;*COMPUTE 8080 ADDRESSES - PUT IN PRE-BOOT - - MOVE T6,SMPBPG - -WDB10J: MOVE (T6) ;GET ADDRESS POINTER - CAMN [-1] ;TERMINATOR ? - JRST WDB10K ;YES - - MOVE T1,T5 - GO TBOOTP ;SET DISK ADDRESS - ADDI T5,4 - ADDI T6,2 - JRST WDB10J - -WDB10K: SETZM DPREBP - MOVE [DPREBP,,DPREBP+1] - BLT DPREBP+777 - - MOVE [SMPREB,,DPREBP] ;PUT DIAGNOSTIC PRE-BOOT IN PLACE - BLT DPREBP+777 - - RTN ;DONE -;HERE TO READ DIAGNOSTIC BC2 EXE FILE - -BC210: GO OPNTEN ;OPEN INPUT FILE - ERR - - MOVE T1,LOOK10+.RBNAM - MOVEM T1,O.NAM1 ;SAME NAME AS INPUT - - MOVSI T1,(SIXBIT/RIM/) - MOVEM T1,O.EXT ;OUTPUT EXT IS ".RIM" - - MOVE T1,LOOK10+.RBVER - MOVEM T1,O.VER ;USE INPUT VERSION AS OUTPUT VERSION - - LDB T1,[POINT 11,LOOK10+.RBPRV,23] - MOVEM T1,O.TIME ;USE INPUT TIME AND DATE AS OUTPUT - - LDB T1,[POINT 3,LOOK10+.RBEXT,20] - DPB T1,[POINT 3,O.DATE,23] - LDB T1,[POINT 12,LOOK10+.RBPRV,35] - DPB T1,[POINT 12,O.DATE,35] - - MOVE T1,DIRDIR ;USE WRTSET'S PPN - MOVEM T1,O.PPN - - MOVE T1,DIRDEV ;USE WRTSET'S DEVICE - MOVEM T1,O.DEV - - MOVEI T1,577 ;SET PROTECTION TO 577 - MOVEM T1,O.PRT - - MOVE T1,LOOK10+.RBSIZ ;GET FILE SIZE IN WORDS - TRNE T1,777 - ERR - SOS T1 ;MINUS EXE DIR PAGE - IDIVI T1,^D512 ;CONVERT TO PAGES - MOVEM T1,FEDIR+BCHKL ;SET BC2 LENGTH - IMULI T1,4 ;CONVERT TO BLOCKS - MOVEM T1,S.ALO ;SET FOR ALLOCATION - - GO ETER10 ;ENTER OUTPUT FILE - ERR -;*NOW READ EXE FILE - - SETZM SELPAG# - GO REDDIR ;READ THE DIRECTORY PAGE - - HLRZ A,DBUF ;DIRECTORY DESCRIPTOR - HRRZ T6,DBUF ;LENGTH OF THE DIRECTORY - CAIN A,SV.DIR ;IS THIS A DIRECTORY? - CAIL T6,^D128 ; WHICH IS LESS THAN OR EQUAL TO 128 WORDS LONG? - ERR - - MOVNI T6,-1(T6) ;MAKE AN AOBJN POINTER TO THE DIRECTORY - HRLI T6,DBUF+1 ; .. - MOVSS T6 ; .. - - MOVE P2,SMPBPG - ADDI P2,1 - -BC210A: MOVE M,(T6) ;BITS,,FILE PAGE NUMBER - JUMPL M,BC210C ;JUMP IF HI SEG PAGE, READ IT IMMEDIATELY - ; ABOVE THE LOW SEGMENT - - HRRZ T5,1(T6) ;CORE PAGE NUMBER - LSH T5,P2WLSH ;CORE ADDRESS - SKIPN T5 ;PAGE 0? - HRROI T5,0 ;YES, READ IT AND REMEMBER ITS PAGE 0 - -BC210C: LDB T7,[POINT 9,1(T6),8] - -BC210D: TRNN M,-1 ;AN ALLOCATED BUT ZERO PAGE? - SOJA M,BC210H ;YES, COUNT DOWN REPEAT COUNT AND UPDATE CORE ADDRESS - HRRZ T4,M ;FILE PAGE NUMBER - LSH T4,P2BLSH ;CONVERT TO BLOCK WITHIN THE FILE - CAMGE T4,SELPAG ;FILE PAGE NUMBERS MUST BE MONOTONICALLY INCREASING - ERR - -BC210E: CAMN T4,SELPAG ;AT THE RIGHT BLOCK WITHIN THE FILE? - JRST BC210G ;YES - -BC210F: GO SELBLK ;BYPASS FILE PAGE - JRST BC210E ;SEE IF THERE YET - -BC210G: CAIN T5,1000 - ERR - - GO REDPAG ;READ EXE DATA PAGE - - JUMPGE T5,.+6 ;PAGE 0 ? - - PUT T1 - SETZM IPAG+KPALIVE ;YES, ZERO 8080 COMM AREA - MOVE T1,[IPAG+KPALIVE,,IPAG+KPALIVE+1] - BLT T1,IPAG+MSSLAVE - GETIT T1 - - PUT T5 - ANDI T5,-1 - LSH T5,W2PLSH - HRRZM T5,(P2) ;SET A POINTER TO PAGE NUMBER - GETIT T5 - ADDI P2,2 ;POINT TO NEXT - - OUT WC,[IOWD ^D512,IPAG - 0] - SKIPA - ERR - - JUMPGE T5,BC210H ;PAGE 0 JUST READ? - - MOVE IPAG+.JBSA - MOVEM BOOTEV ;SAVE STARTING ADDRESS - - MOVEI T5,0 ;READ NEXT PAGE INTO PAGE 1 - -BC210H: ADDI T5,PAGSIZ ;NEXT PAGE -BC210I: SOSL T7 ;READ ALL THE PAGES DESCRIBED BY THIS ENTRY? - AOJA M,BC210D ;NO, READ THE NEXT PAGE - - AOBJN T6,.+1 ;BUMP PAST THIS DIRECTORY ENTRY, AND - AOBJN T6,BC210A ; GO GET THE NEXT DIRECTORY ENTRY - - SETOM -1(P2) ;INDICATE END OF SPACE - - MOVE T1,BOOTEV - HRRZM T1,(P2) ;SET ENTRY VECTOR -;*FIND 1ST PAGE OF FILE & PUT IN PRE-BOOT - - CLOSE WC,CL.DLL ;CLOSE FILE - RELEAS WC, - - GO GETBK2 ;GET DISK ADDRESS - MOVEM T1,FEDIR+BCHKP - MOVEM T1,T5 - -;*COMPUTE 8080 ADDRESSES - PUT IN PRE-BOOT - - MOVE T6,SMPBPG - -BC210J: MOVE (T6) ;GET ADDRESS POINTER - CAMN [-1] ;TERMINATOR ? - JRST BC210K ;YES - - MOVE T1,T5 - GO TBOOTP ;SET DISK ADDRESS - ADDI T5,4 - ADDI T6,2 - JRST BC210J - -BC210K: SETZM BCPREBP - MOVE [BCPREBP,,BCPREBP+1] - BLT BCPREBP+777 - - MOVE [SMPREB,,BCPREBP] ;PUT DIAGNOSTIC PRE-BOOT IN PLACE - BLT BCPREBP+777 - - RTN ;DONE -;*MONITOR BOOT STRAP PROGRAM TO BE WRITTEN ON THE DISK - -BTSTR1: - PHASE BOORG - -BTSTRT:!JRST BTSTAR - -BTHLT0:!HALT . ;TRIED TO OVERLOAD PRE-BOOT -BTHLT1:!HALT . ;DISK RETRY FAILURE -BTHLT2:!HALT . ;NO RH-11 BASE ADDRESS -BTHLT3:!HALT . ;RESERVED - -BTSTAR:!MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - MOVE P1,MSRH ;GET DISK ADDRESS - MOVEM P1,MSRHSV - SKIPN P1 - JRST BTHLT2 ;NO RH-11 BASE ADDRESS ? - HLLM P1,BTUBP0 ;SETUP UBA MAP POINTER - HLLM P1,BTUBST ;SETUP UBA STATUS POINTER - - MOVE T1,KPALIVE - MOVEM T1,MSKPAL ;SAVE KEEP-ALIVE WORD - - MOVEI T1,RHCLR - WRIO T1,RPCS2(P1) ;CLEAR CONTROLLER - - MOVE T1,MSDRIVE - MOVEM T1,MSDRSV - WRIO T1,RPCS2(P1) ;SELECT DRIVE - - MOVEI T1,RIPST ;DO READIN PRESET - WRIO T1,RPCS1(P1) ;WRITE REGISTER - MOVEI T2,RDY ;WAIT FOR READY - TION T2,RPDS(P1) ;CHECK READY? - JRST .-1 ;NO -- CONTINUE WAIT - - MOVEI T3,RPPAG ;FIND THE OFFSET STUFF - MOVEI T5,^D10 ;SET RETRY COUNT - -RDABLK:!MOVE T4,0(T3) ;FIND THE DISK ADDRESS - JUMPL T4,RDADON ;QUIT IF ALL DONE WITH PAGES - - AOS T3 ;POINT TO BLOCK ENTRIES - WRIO T4,RPDA(P1) ;SET DISK ADDRESS - MOVSS T4 ;FIND CYL ADDRESS - WRIO T4,RPDC(P1) ;SET CYL ADDRESS - - MOVNI T4,2000 ;READ A PAGE (WORD COUNT) - WRIO T4,RPWC(P1) ;SET WORD COUNT - - SETZ T4, ;CLEAR CURRENT ADDRESS REGISTER - WRIO T4,RPBA(P1) ;SET UNIBUS ADDRESS TO 0 - - MOVE T4,0(T3) ;FIND THE CORE ADDRESS - AOS T3 ;POINT TO NEXT ENTRY - CAIN T4,1 ;CAN'T OVERLOAD PRE-BOOT - JRST RDBADR ;PAGE 1 REQUESTED TO BE LOADED ? - - IORI T4,UBVBIT!UNV36X - WRIO T4,@BTUBP0 ;SET UP UNIBUS ADAPTOR PAGE 0 - - MOVEI T4,RDATA ;SET GO - WRIO T4,RPCS1(P1) ;WAIT FOR GO - RDIO T4,RPCS1(P1) - TRNN T4,RDY - JRST .-2 ;HO HUM WAIT - - TRNN T4,TRE!MCPE ;CHECK ERROR CONDITION SUMMARY - JRST RDABLK ;DO NEXT PAGE - - SUBI T3,2 ;BACKUP TO SAME ENTRY - SOJLE T5,RDFAIL ;TRY AGAIN TILL RETRY RUNS OUT - -RDRTRY:!MOVEI T1,RHCLR ;ERROR, CLEAR & TRY AGAIN - WRIO T1,RPCS2(P1) ;CLEAR CONTROLLER - - MOVE T1,MSDRIVE - WRIO T1,RPCS2(P1) ;SELECT DRIVE - - JRST RDABLK ;TRY AGAIN - -RDBADR:!MOVEI 17,BTHLT0 ;SET HALT ADDRESS - SUBI T3,2 ;POINT TO FAILING ENTRY - JRST .+2 - -RDFAIL:!MOVEI 17,BTHLT1 ;SET HALT ADDRESS - MOVE (T3) - MOVEM 100 ;SAVE 8080 DISK ADDRESS - MOVE 1(T3) - MOVEM 101 ;SAVE MEMORY PAGE ADDRESS - - MOVEM T3,102 ;SAVE SELECTION PICKUP POINTER - - RDIO RPCS1(P1) - MOVEM 103 ;SAVE CONTROL AND STATUS 1 - RDIO RPCS2(P1) - MOVEM 104 ;SAVE CONTROL AND STATUS 2 - RDIO RPDS(P1) - MOVEM 105 ;SAVE DRIVE STATUS - RDIO RPER1(P1) - MOVEM 106 ;SAVE ERROR 1 - RDIO RPER2(P1) - MOVEM 107 ;SAVE ERROR 2 - RDIO RPER3(P1) - MOVEM 110 ;SAVE ERROR 3 - - RDIO @BTUBP0 - MOVEM 111 ;SAVE UBA PAGING RAM LOC 0 - RDIO @BTUBST - MOVEM 112 ;SAVE UBA STATUS REG - - MOVE BTVER - MOVEM 113 ;SAVE PRE-BOOT VERSION - - MOVE MSRHSV - MOVEM MSRH ;REINSTALL RH-11 BASE ADDRESS - MOVE MSDRSV - MOVEM MSDRIVE ;REINSTALL DRIVE NUMBER - MOVE MSKPAL - MOVEM KPALIVE ;REINSTALL KEEP-ALIVE - - JRST @17 ;HALT AT APPROPRIATE HALT - -RDADON:!MOVE 1(T3) ;GET START ADDRESS - MOVEM 20 ;SAVE - - WRUBR ACBLK7 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR ACBLK6 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR ACBLK5 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR ACBLK4 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR ACBLK3 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR ACBLK2 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR ACBLK1 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR ACBLK0 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - MOVE MSRHSV - MOVEM MSRH ;REINSTALL RH-11 BASE ADDRESS - MOVE MSDRSV - MOVEM MSDRIVE ;REINSTALL DRIVE NUMBER - MOVE MSKPAL - MOVEM KPALIVE ;REINSTALL KEEP-ALIVE - - SETZ - JRST @20 ;NOW START BOOT - -ACBLK7:! 1B0!7B8 ;WRUBR ARGUMENTS -ACBLK6:! 1B0!6B8 -ACBLK5:! 1B0!5B8 -ACBLK4:! 1B0!4B8 -ACBLK3:! 1B0!3B8 -ACBLK2:! 1B0!2B8 -ACBLK1:! 1B0!1B8 -ACBLK0:! 1B0!0B8 - -MSKPAL:! 0 ;KEEP-ALIVE & STATUS WORD -MSRHSV:! 0 ;RH-11 BASE ADDRESS -MSDRSV:! 0 ;DRIVE NUMBER - -BTVER:! MCNVER,,DECVER ;PRE-BOOT VERSION - -BTUBP0:! 1,,763000 ;ADDRESS OF FIRST WINDOW -BTUBST:! 1,,763100 ;ADDRESS OF UBA STATUS - -RPPAG:! ;NEXT TWO INSTRUCTIONS MUST FOLLOW!!DO NOT MOVE - DEPHASE - -RPPAGD: BLOCK 100 -RPPAGX: 0 -;*WRITE MICRO-CODE ONTO DISK - -WRTBC1: SETOM BC1FLG - JRST WRTCRM+1 -WRTCRM: SETZM BC1FLG - NOISE - CONFIRM - - SKIPN FESETF ;FE-DIR IN CODE ? - ERR - SKIPN RDFLAG - ERR - - SKIPN MONTYP - JRST WRTC10 ;TOPS-10 - - HLRZ T3,FEDIR+MCL ;GET MICROCODE START PAGE - SKIPE BC1FLG - HLRZ T3,FEDIR+BC1L - LSH T3,^D9 ;MAKE WORD POINTER INTO FILE - MOVEM T3,WTPTR# ;SAVE - - MOVE T1,FEJFN - MOVE T2,WTPTR - SFPTR - ERMSG - - MOVEI T6,CRAM - SKIPE BC1FLG - MOVEI T6,CRMBC1 - MOVEI T5,4000 -WTLOOP: MOVE T2,(T6) - BOUT - MOVE T2,1(T6) - BOUT - MOVE T2,2(T6) - BOUT - ADDI T6,3 - SOJG T5,WTLOOP - - MOVE T1,FEJFN - MOVEI T2,0 ;SET FILE POINTER TO 0 - SFPTR - ERMSG - -WRTC10: MOVEI T6,FEDIR+MCP - HLRZ T7,FEDIR+MCL - SKIPN BC1FLG - JRST .+3 - MOVEI T6,FEDIR+BC1P - HLRZ T7,FEDIR+BC1L - GO S8080P ;SETUP 8080 POINTER - - RTN -;*WRTFEF, WRITE FRONT-END INDIRECT FILES -;* COMMAND - [INDIRECT "0-366(8)" "FILE.EXT" -;* CREATES - "FEF000.FI" TO "FEF366.FI" (TOPS-10) - -WRTFEF: CMD [FLDDB.(.CMNUM,,^D8)], - - SKIPL T2 - CAILE T2,366 - ERR - MOVEM T2,FEFNBR# - - SETZM GTJFIL ;NO DEFAULTS ALLOWED - SETZM GTJEXT - SETZM GTJDEV - SETZM GTJDIR - - MOVSI T1,(GJ%OLD) - MOVEM T1,GTJFLG - - CMD [FLDDB.(.CMFIL)] - HRLZM T2,FEFJFN# ;SAVE THE JFN OF THE FILE - - CONFIRM - - SKIPN FESETF - ERR - - SKIPN MONTYP - JRST FEF10 ;TOPS-10 - - HRRZ T1,FEDIR+FSL ;GET FREE SPACE LENGTH - CAIGE T1,1 ;THIS NEEDS ONE PAGE - ERR - - HLRZ T1,FEFJFN - MOVEI T2,OF%RD - OPENF ;OPEN FILE - ERR - - HLRZ T1,FEFJFN - MOVE T2,[1,,.FBBYV] - MOVEI T3,T4 - GTFDB ;GET FILE PAGE COUNT - ANDI T4,-1 - CAIE T4,^D1 ;CAN ONLY BE ONE PAGE - JRST FEFERR ;WRONG LENGTH - - MOVE T1,FEFJFN - MOVE T2,[.FHSLF,,] - MOVE T3,[PM%RD+PM%PLD+PM%CPY] - PMAP ;GET FILE - ERJMP [JSERR - JRST START] - - SETMM GENPAG ;MAKE PRIVATE - - HLRZ T1,FEFJFN - CLOSF ;CLOSE FILE - ERR - - GO FEIFMT ;FORMAT INDIRECT FILE - - MOVE T1,[.FHSLF,,] - HRLZ T2,FEJFN - HLR T2,FEDIR+FSL ;GET FREE-SPACE PAGE - MOVE T3,[PM%WR] - PMAP ;PUT INDIRECT INTO FE-FILE - ERJMP [JSERR - JRST START] - - MOVE T1,FEDIR+FSL ;GET FREE-SPACE PAGE #,,LENGTH - MOVE T2,T1 - SUBI T1,1 ;MINUS ONE IN LENGTH - ADD T1,[1,,0] ;PLUS ONE TO PAGE # - MOVEM T1,FEDIR+FSL ;RESAVE - - MOVE T1,FEFNBR ;GET INDIRECT NUMBER - IMULI T1,2 ;DOUBLE IT - ADDI T1,FEDIR+IFL0 ;ADD FEDIR START POSITION - - HRRI T2,^D1 ;MAKE POINTER PAGE #,,1 - MOVEM T2,(T1) ;SETUP FE-DIR POINTER - - RTN - -FEFERR: HLRZ T1,FEFJFN - CLOSF ;CLOSE OUT BAD INDIRECT - ERR - ERR -;*FEF10, TOPS-10 WRITE FRONT-END INDIRECT FILES - -FEF10: GO OPNTEN ;OPEN INPUT FILE - ERR - - MOVE T1,LOOK10+.RBSIZ ;GET FILE SIZE IN WORDS - CAILE T1,^D512 ;MUST BE ONE PAGE OR LESS - ERR - - SETZM GENPAG - MOVE T1,[GENPAG,,GENPAG+1] - BLT T1,GENPAG+777 - - MOVEI T7,GENPAG ;READ IN INDIRECT - GO GET10 - SKIPGE EOFSW - JRST .+3 - MOVEM T3,(T7) - AOJA T7,.-4 - - GO R10EOF ;CLOSE INPUT FILE - - GO FEIFMT ;FORMAT INDIRECT FILE - - SETZ T1, ;COOK UP OUTPUT FILE NAME - LDB [POINT 3,FEFNBR,29] - DPB [POINT 3,T1,23] - LDB [POINT 3,FEFNBR,32] - DPB [POINT 3,T1,29] - LDB [POINT 3,FEFNBR,35] - DPB [POINT 3,T1,35] - ADD T1,[SIXBIT/FEF000/] - MOVEM T1,O.NAM1 - - MOVSI T1,(SIXBIT/FI/) - MOVEM T1,O.EXT - - MOVE T1,DIRDIR ;USE WRTSET'S PPN - MOVEM T1,O.PPN - - MOVE T1,DIRDEV ;USE WRTSET'S DEVICE - MOVEM T1,O.DEV - - MOVEI T1,577 ;SET PROTECTION 577 - MOVEM T1,O.PRT - - SETZM O.VER - SETZM O.TIME - SETZM O.DATE - - MOVEI T1,4 ;MAKE FILE ONE PAGE - MOVEM T1,S.ALO - - GO ETER10 ;CREATE FILE - ERR - - OUT WC,[IOWD ^D512,IPAG - 0] - SKIPA - ERR - - CLOSE WC,CL.DLL ;CLOSE FILE - RELEAS WC, - - GO GETBK2 ;GET DISK ADDRESS - MOVEM T1,T7 - MOVE T6,FEFNBR ;POINT TO FEDIR POSITION - IMULI T6,2 - ADDI T6,FEDIR+IFP0 - - MOVEI T2,1 - MOVEM T2,1(T6) ;MARK IN USE - - GO T8080P ;COMPUTE 8080 POINTER - - RTN -;*FEIFMT, FORMAT FRONT-END INDIRECT FILES - -FEIFMT: SETZM IPAG ;CLEAR STORAGE - MOVE T1,[IPAG,,IPAG+1] - BLT T1,IPAG+777 - - MOVE T6,[POINT 7,GENPAG] - MOVEI T5,IPAG - MOVEI T4,<^D512*^D4>-1 - -FEILP: SETZ T2, - GO FEICHR ;FIRST CHAR - JRST FEILP2 ;EOF - DPB T3,[POINT 8,T2,35] - - GO FEICHR ;SECOND CHAR - JRST FEILP1 ;EOF - DPB T3,[POINT 8,T2,27] - - GO FEICHR ;FIRST CHAR - JRST FEILP1 ;EOF - DPB T3,[POINT 8,T2,19] - - GO FEICHR ;FIRST CHAR - JRST FEILP1 ;EOF - DPB T3,[POINT 8,T2,11] - - MOVEM T2,(T5) ;STORE WORD - AOJA T5,FEILP ;LOOP TILL EOF - -FEILP1: MOVEM T2,(T5) ;SAVE FINAL WORD -FEILP2: RTN ;DONE - -FEICHR: CAMN T6,[POINT 7,GENPAG+777,34] - JRST FEIBIG ;INPUT FILE TOO BIG - - ILDB T3,T6 ;GET INPUT CHAR - JUMPN T3,.+2 - RTN ;NULL, END-OF-FILE - SOJLE T4,FEIBIG ;COUNT CHAR, JUMP IF TOO MANY - JRST CPOPJ1 ;SKIP RETURN WITH CHAR - -FEIBIG: ERR -;*TYPE, TYPE CONTENTS OF INDIRECT FILE - - SCMTAB ..TYPE - CMTAB INDIRECT,TYPEFI - ECMTAB - -.TYPE: CMD [FLDDB.(.CMKEY,,..TYPE)], - HRRZ T1,(T2) - JRST (T1) - -TYPEFI: CMD [FLDDB.(.CMNUM,,^D8)], - SKIPL T2 - CAILE T2,366 - ERR - MOVEM T2,FEFNBR - - CONFIRM - - SKIPN FESETF - ERR - - MOVE T1,FEFNBR ;GET INDIRECT FILE NUMBER - IMULI T1,2 ;DOUBLE IT - ADDI T1,FEDIR+IFL0 ;ADD FEDIR START POSITION - - SKIPN MONTYP - JRST TYPF10 ;TOPS-10 - - HLRZ T1,(T1) ;GET FE-DIR POINTER - - SKIPN T1 - ERR - - HRL T1,FEJFN - MOVE T2,[.FHSLF,,] - MOVE T3,[PM%RD] - PMAP ;GET INDIRECT FILE - ERJMP [JSERR - JRST START] - - PCRLF - MOVEI T6,IPAG - MOVE T3,(T6) - GO FEITYP ;PRINT IT - AOJA T6,.-2 - PCRLF - - RTN - -FEITYP: LDB 0,[POINT 8,T3,35] - JUMPE 0,CPOPJ1 - GO FEIPNT - - LDB 0,[POINT 8,T3,27] - JUMPE 0,CPOPJ1 - GO FEIPNT - - LDB 0,[POINT 8,T3,19] - JUMPE 0,CPOPJ1 - GO FEIPNT - - LDB 0,[POINT 8,T3,11] - JUMPE 0,CPOPJ1 - GO FEIPNT - - RTN - -FEIPNT: CAIE 0,15 ;CR ? - JRST .+3 ;NO - PNTCHF ;YES, PRINT CR/LF - MOVEI 0,12 - PNTCHF - RTN -;*TYPF10, TOPS-10 TYPE CONTENTS OF INDIRECT FILE - -TYPF10: SKIPN (T1) - ERR - - SETZ T1, ;COOK UP INPUT FILE NAME - LDB [POINT 3,FEFNBR,29] - DPB [POINT 3,T1,23] - LDB [POINT 3,FEFNBR,32] - DPB [POINT 3,T1,29] - LDB [POINT 3,FEFNBR,35] - DPB [POINT 3,T1,35] - ADD T1,[SIXBIT/FEF000/] - MOVEM T1,GTJFIL - - MOVSI T1,(SIXBIT/FI/) - MOVEM T1,GTJEXT - - MOVE T1,DIRDIR - MOVEM T1,GTJDIR - - MOVE T1,DIRDEV - MOVEM T1,GTJDEV - - GO OPNTEN ;FIND INPUT FILE - ERR - - PCRLF -TF10LP: GO GET10 ;GET INPUT WORD - SKIPGE EOFSW - JRST .+3 ;END-OF-FILE - - GO FEITYP ;PRINT IT - JRST TF10LP - - PCRLF - JRST R10EOF -;*FETELL, REPORT INDIRECT FILES IN USE & FREE SPACE - -FETELL: PMSGF <^THE FOLLOWING FRONT-END INDIRECT FILES EXIST:^> - - MOVEI T6,FEDIR+IFL0 ;GET START ADDRESS - SETZ T7, ;ZERO FORMAT COUNTER - -FETEL0: MOVE (T6) ;GET ENTRY - JUMPE FETEL1 ;NOT USED - - MOVE T6 - SUBI FEDIR+IFL0 - IDIVI 2 - PNTOCF ;PRINT IT - - AOS T7 - TRNE T7,3 - JRST .+3 - PCRLF - JRST .+2 - PTAB - -FETEL1: ADDI T6,2 ;STEP TO NEXT ENTRY - CAIE T6,FEDIR+1001 ;DONE ? - JRST FETEL0 ;NOT YET - - SKIPN MONTYP - JRST FETEL2 - - PMSGF <^FRONT-END FREE PAGES = > - HRRZ FEDIR+FSL - PNTDCF - -FETEL2: PCRLF - PCRLF - RTN - -;ADDR DIVIDED BY SECTOR/CYL = CYL -;REM DIVIDED BY SECTOR/TRACK = TRACK -;REM = SECTOR - -S8080P: MOVE T1,T7 - IMULI T1,4 ;CHANGE PAGES TO SECTORS - SKIPE MONTYP - ADD T1,HOMPAG+200+101 - SKIPN MONTYP - ADD T1,HOMBUF+101 -T8080P: AND T1,[37,,-1] ;MASK ADDRESS BITS ONLY - SKIPE RM03F - GO TRM03P ;RM03 DISK - IDIVI T1,<^D20*^D19> ;FIND CYL - - PUT T1 - MOVE T1,T2 - SKIPN RM03F - IDIVI T1,^D20 ;FIND SECTOR - SKIPE RM03F - IDIVI T1,^D30 - LSH T1,8 - IOR T1,T2 - GETIT T2 - - LSH T2,6 - HRL T1,T2 - MOVEM T1,(T6) ;STORE 8080 POINTER - RTN - -SBOOTP: MOVE T1,T7 - IMULI T1,4 ;CHANGE PAGES TO SECTORS - ADD T1,HOMPAG+200+101 -TBOOTP: AND T1,[37,,-1] ;MASK ADDRESS BITS ONLY - SKIPE RM03F - GO TRM03P ;RM03 DISK - IDIVI T1,<^D20*^D19> ;FIND CYL - - PUT T1 - MOVE T1,T2 - SKIPN RM03F - IDIVI T1,^D20 ;FIND SECTOR - SKIPE RM03F - IDIVI T1,^D30 - LSH T1,8 - IOR T1,T2 - GETIT T2 - - HRL T1,T2 - MOVEM T1,(T6) ;STORE 8080 POINTER - RTN -;*WRTDONE - WRITE FE-DIR FILE BLOCK - -WRTDONE:CONFIRM - SKIPN FESETF ;FE-DIR IN CODE ? - ERR - - MOVEI T5,^D512/2 - SKIPN MONTYP - MOVEI T5,^D18/2 - MOVEI T4,FEDIR - - MOVE T6,T4 ;POSITION TO T6 - HLRZ T7,1(T4) ;PAGE # TO T7 - JUMPE T7,.+2 ;POSITION NOT USED - GO S8080P ;SET 8080 DISK POINTER - ADDI T4,2 - SOJG T5,.-5 - - SKIPN MONTYP - JRST WRTD10 ;TOPS-10 - - SETO T1, - MOVE T2,[.FHSLF,,] - SETZ T3, - PMAP ;UNMAP FE-DIR PAGE - ERJMP [JSERR - JRST START] - - MOVE T1,FEJFN - CLOSF - ERR - - MOVEI T1,0 ;UPDATE HOME BLOCKS - GO REDHOM - RET - - GO SHOMEP ;COMPUTE 8080 POINTER - - MOVE T1,BTADDR# ;SAME AS ON DISK ? - CAMN T1,HOMPAG+200+103 - RTN ;YES, LEAVE HOME BLOCKS ALONE THEN - - MOVE T1,BTADDR - MOVEM T1,HOMPAG+200+103 - MOVEI T1,0 - GO WRTHOM ;NO, UPDATE HOME BLOCKS - RET - - MOVEI T1,10 - GO REDHOM - RET - - MOVE T1,BTADDR - MOVEM T1,HOMPAG+400+103 - MOVEI T1,10 - GO WRTHOM - RET - -HOMSET: PNTMSF [ASCIZ/ -[HOME BLOCKS SET] -/] - RET - -SHOMEP: MOVEI T6,BTADDR - SETZ T7, - GO S8080P - RTN - -WRTD10: ENTER DAT,ODAT10 ;SET FOR OUTPUT - ERR - - USETO DAT,1 - - MOVEI T2,^D28 - MOVE T3,[FEDIR,,IPAG] -WRTD11: MOVE T1,T3 - BLT T1,IPAG+777 - MOVSI T1,^D512 - ADD T3,T1 - - OUT DAT,[IOWD ^D512,IPAG - 0] - SKIPA - ERR - SOJG T2,WRTD11 - - CLOSE DAT, - RELEAS DAT, - RTN -;*SUBROUTINE TO READ AND WRITE HOME BLOCKS -;*CALL WITH: -;* T1/ DISK ADDRESS -;* STRDES/ DEVICE DESIGNATOR OF STRUCTURE -;* GO REDHOM/WRTHOM -;* ERROR -;* OK - -WRTHOM: SKIPA T2,[DOP%WR+1000] -REDHOM: MOVEI T2,1000 - - SKIPE DEBUGF - JRST CPOPJ1 ;DON'T DO HOME IF DEBUG - - MOVEI T3,HOMPAG - MOVE T4,STRDES -;* TXO T1,<.DOPSR>B1!DOP%SN ;MONSYM IS BAD - TLO T1,577600 - DSKOP - ERJMP BADHOM - JUMPE T1,RSKP - ERR ERROR UPDATING HOME BLOCKS - -BADHOM: MOVEI T1,.FHSLF - GETER - ERMSG - TLZ T2,-1 - CAIE T2,WHELX1 - ERR ERROR UPDATING HOME BLOCKS - PNTMSF [ASCIZ/ -%HOME BLOCKS NOT UPDATED -- MUST BE WHEEL OR OPERATOR -/] - RET - -TRM03P: SKIPE MONTYP ;TOPS-20 - IDIVI T1,<^D30*^D5>-2 - SKIPN MONTYP ;TOPS-10 - IDIVI T1,<^D30*^D5> - JRST CPOPJ1 -SUBTTL COMMANDS -- READ - -RDBC1: SETOM BC1FLG - JRST READ+1 -READ: SETZM BC1FLG - NOISE - HRROI T1,[ASCIZ "KS10"] - SKIPE BC1FLG - HRROI T1,[ASCIZ "KSBC1"] - MOVEM T1,GTJFIL - HRROI T1,[ASCIZ "ULD"] ;MAKE THIS "RAM" FOR PRODUCTION - MOVEM T1,GTJEXT - SETZM GTJDEV - SETZM GTJDIR - MOVSI T1,(GJ%OLD) - MOVEM T1,GTJFLG - CMD [FLDDB.(.CMFIL)] - HRLZM T2,UCFILE - CONFIRM - SKIPN MONTYP - JRST READ10 - - HLRZ T1,UCFILE - MOVEI T2,OF%RD - OPENF - ERR - - SETZM STBUF - HRROI T1,STBUF - HLRZ T2,UCFILE - MOVSI T3,200 - JFNS ;GET FILE ".EXT" STRING - MOVE STBUF - CAME [ASCIZ/RAM/] - JRST RDULD ;OLD STYLE ".ULD" MICROCODE - - HLRZ T1,UCFILE - MOVE T2,[1,,.FBBYV] - MOVEI T3,T4 - - GTFDB ;GET FILE PAGE COUNT - - ANDI T4,-1 - CAIE T4,^D12 - JRST READF ;WRONG LENGTH - - MOVE T1,UCFILE - SKIPN BC1FLG - MOVE T2,[.FHSLF,,] - SKIPE BC1FLG - MOVE T2,[.FHSLF,,] - MOVE T3,[PM%CNT+PM%RD+PM%WR+PM%PLD+PM%CPY+^D12] - - PMAP ;READ CRAM INTO MEMORY - ERJMP [JSERR - JRST START] - - SKIPN BC1FLG - MOVEI T1,CRAM - SKIPE BC1FLG - MOVEI T1,CRMBC1 - MOVEI T2,^D12 - SETMM (T1) ;TOUCH EACH CRAM PAGE - ADDI T1,1000 ; TO MAKE IT PRIVATE - SOJG T2,.-2 - - HLRZ T1,UCFILE - CLOSF ;CLOSE OUT CRAM FILE - ERR - - SETOM RDFLAG - RTN - -READF: HLRZ T1,UCFILE - CLOSF ;CLOSE OUT BAD FILE - ERR - ERR - RTN -;*TOPS-10 MICROCODE READ PROCESS - -READ10: GO OPNTEN ;OPEN INPUT FILE - ERR - - MOVE T1,LOOK10+.RBVER ;USE INPUT VERSION AS OUTPUT VERSION - MOVEM T1,MC.VER - - LDB T1,[POINT 11,LOOK10+.RBPRV,23] - MOVEM T1,MC.TIME ;USE INPUT TIME AND DATE AS OUTPUT - - LDB T1,[POINT 3,LOOK10+.RBEXT,20] - DPB T1,[POINT 3,MC.DATE,23] - LDB T1,[POINT 12,LOOK10+.RBPRV,35] - DPB T1,[POINT 12,MC.DATE,35] - - MOVE T1,LOOK10+.RBSIZ ;GET FILE SIZE IN WORDS - - MOVE 0,GTJEXT - CAME 0,[SIXBIT/RAM/] - JRST RDULD - - CAIE T1,^D12*^D512 - ERR - - SKIPN BC1FLG - MOVEI T7,CRAM ;SETUP CRAM STORAGE POINTER - SKIPE BC1FLG - MOVEI T7,CRMBC1 - -LOOP1: GO GET10 ;GET WORD FROM FILE - SKIPGE EOFSW - JRST LOOP2 - MOVEM T3,(T7) ;STORE IT - AOJA T7,LOOP1 - -LOOP2: SETOM RDFLAG - JRST R10EOF ;DONE -SUBTTL TOPS-10 DISK ROUTINE DEFINITIONS - -;*I/O CHANNELS - -DAT=1 ;GENERAL DATA CHANNEL -RC=2 ;READ CHANNEL -WC=3 ;WRITE CHANNEL -DIR=4 ;DIRECTORY CHANNEL -HOM=5 ;HOME BLOCK CHANNEL -$CHN=6 ;COMMAND FILE CHANNEL - -;*SYMBOL DEFINITIONS - -BLKSIZ==20 ;SIZE OF LOOKUP/ENTER BLOCKS - -RADIX 10 -HMBK01==1+20*0+380*0 ;HOME BLOCK #1 - ;1=SECTOR NUMBER - ;0=TRACK NUMBER - ;0=CYLINDER NUMBER -HMBK10==10+20*0+380*0 ;HOME BLOCK #10 - -RADIX 8 -.BFPTR=1 -.BFCTR=2 -.DCUPN=15 -TO10IC==HEAD10+.BFCTR ;-10 INPUT RING BUF BYTE COUNT -TO10IP==HEAD10+.BFPTR ;-10 INPUT RING BUF BYTE PTR -TO10OC==HEDBLK+.BFCTR ;-10 OUTPUT RING BUF BYTE COUNT -TO10OP==HEDBLK+.BFPTR ;-10 OUTPUT RING BUF BYTE PTR -PHYDEV==DATDEV+.DCUPN ;PHY UNIT FOR DATA FILE(0-399) -DSKUPN==DIRDEV+.DCUPN ;PHY UNIT FOR FILE IN 406-409 -E10ALC==ENTBLK+.RBALC ;# OF BLOCKS TO ALLOCATE -E10STS==ENTBLK+.RBSTS ;FILE STATUS WORD -E20ALC==LOOK10+.RBALC ;# OF BLOCKS TO ALLOCATE -E20STS==LOOK10+.RBSTS ;FILE STATUS WORD - -SU.SOT=200000 ;SUSET. OUTPUT BIT -CTYPF=10000 ;SET IF ANY CHARS TYPED FOR A COMMAND -.IOBIN=14 -.IODMP=17 -RP.NFS=1B21 -RP.ABC=1B22 -CL.DLL=4 -.DCUR4=0 ;RP04 -.DCUR6=1 ;RP06 -.DCUR3=2 ;RM03 - -;EXTENDED ENTER BLOCK - -.RBCNT=0 ;0,,COUNT OF ENTRIES -.RBPPN=1 ;PROJ,PROG # -.RBNAM=2 ;SIXBIT FILE NAME -.RBEXT=3 ;SIXBIT EXT,,18-20 HI DATE,21-35 ACCESS DATE -.RBPRV=4 ;0-8 PROT,9-12 DATA MODE,13-23 CREATE TIME,24-35 CREATE DATE -.RBSIZ=5 -.RBVER=6 -.RBSPL=7 -.RBEST=10 ;0 - EST BLOCKS -.RBALC=11 ;# OF CONTIGUOUS BLOCKS -.RBPOS=12 -.RBTF1=13 -.RBNCA=14 -.RBMTA=15 -.RBDEV=16 -.RBSTS=17 ;FILE STATUS, UFD,,FILE - BIT 22 RP.ABC - -HOLD==^D64 ;DEFAULT PAGE COUNT FOR KS-10 AREA -PRIME==0 ;RELATIVE BLOCK OF PRIME RIB FOR USETI -HOMCLP== HOMBUF+20 ;ADDRESS POINTER FOR RETRIEVAL PTRS -HOMBPC== HOMBUF+21 ;BLOCKS PER CLUSTER - -HOMLST: IOWD ^D128,HOMBUF ;COMMAND LIST FOR HOME BLOCK - 0 -DIRLST: IOWD ^D128,DIRBUF ;COMMAND LIST FOR DIRECTORY BLOCK - 0 -DATLST: IOWD ^D128,DATBUF ;COMMAND LIST FOR DATA BLOCK - 0 -H10LST: IOWD ^D128,HOMB10 ;COMMAND LIST FOR HOME BLK #10 - 0 - -;*ERROR INTERCEPT CONTROL BLOCK - -CCBLK: 4,,CCINT - 0,,2 - BLOCK 2 - -DIRDEV: BLOCK 16 ;DEVICE INFORMATION FOR DIR FILE - -DATDEV: BLOCK 16 ;DEVICE INFORMATION FOR DATA FILE - -HOMBUF: BLOCK 200 ;BUFFER CONTAINS HOME BLOCK # 1 - -HOMB10: BLOCK 200 ;BUFFER CONTAINS HOME BLOCK # 10 - -CMDCNT: BLOCK 1 ;COMMAND LINE COUNT - -O.STR: ;START OF OUTPUT SPEC STORAGE -O.DEV: BLOCK 1 ;DEVICE -O.NAM1: BLOCK 1 ;NAME -O.EXT: BLOCK 1 ;EXT -O.PRT: BLOCK 1 ;PROTECTION -O.PPN: BLOCK 1 ;PROJ,PROG # -O.DATE: BLOCK 1 ;CREATION DATE -O.TIME: BLOCK 1 ;CREATION TIME -O.VER: BLOCK 1 ;VERSION NUMBER - -I.STR: ;START OF INPUT SPEC STORAGE -I.DEV: BLOCK 1 ;DEVICE -I.NAM1: BLOCK 1 ;NAME -I.EXT: BLOCK 1 ;EXT -I.PPN: BLOCK 1 ;PROJ,PROG # - -GETBUF: BLOCK ^D128 ;A DEDICATED BUFFER - -DATBUF: BLOCK ^D128 ;BUFFER CONTAINING REGULAR DATA BLOCK -DATEND=.-1 - -DIRBUF: BLOCK ^D128 ;BUFFER CONTAINING DIRECTORY BLOCK -ENDBLK=.-1 - -OPEN10: BLOCK 3 ;-10 OPEN BLOCK -LOOK10: BLOCK BLKSIZ ;-10 LOOKUP BLOCK -HEAD10: BLOCK 3 ;-10 BUFFER HEADER -OPNBLK: BLOCK 3 ;-10 OUTPUT OPEN BLOCK -ENTBLK: BLOCK BLKSIZ ;-10 ENTER BLOCK -HEDBLK: BLOCK 3 ;-10 OUTPUT BUFFER HEADER -OPND10: BLOCK 3 ;-10 DAT OPEN BLOCK -ODAT10: BLOCK BLKSIZ ;-10 DAT LOOKUP BLOCK - -MC.VER: BLOCK 1 ;MICROCODE VERSION -MC.TIME:BLOCK 1 ;MICROCODE TIME -MC.DATE:BLOCK 1 ;MICROCODE DATE -MT.VER: BLOCK 1 ;MAGTAPE VERSION -MT.TIME:BLOCK 1 ;MAGTAPE TIME -MT.DATE:BLOCK 1 ;MAGTAPE DATE -MT.SADR:BLOCK 1 ;MAGTAPE START ADDRESS -SUBTTL TOPS-10 DISK FILE PROCESS - -;*GET A CHARACTER FROM -10 FILE - -GET10: SKIPE EOFSW ;HAVE WE HIT EOF YET ? - JRST GET10Z ;YES, CLEAR CHARACTER - -CHKCNT: SOSGE TO10IC ;BYTE COUNT=0? - JRST IN10 ;YES - - ILDB T3,TO10IP ;GET BUFFER PTR - RTN ;RETURN, BUFFER FULL - -GET10Z: SETZ T3, - RTN - -IN10: IN RC, - JRST GET10 - -;*END OF INPUT FILE - -COMEND: GETSTS RC,C ;GET ERROR STATUS - TRNE C,74B23 ;SEE IF ANY ERRORS - ERR - - TRNN C,1B22 ;SEE IF END OF FILE - ERR - - SETOM EOFSW ;INDICATE EOF IS DETECTED - SETZM T3 ;ZERO THE CHARACTER - RTN ;RETURN -;*PUT A CHARACTER TO -10 FILE - -PUT10: SOSG TO10OC ;DECREMENT BYTE COUNT - JRST PUTBUF - -PUTNXT: IDPB T3,TO10OP ;PUT WORD IN BUFFER - RTN - -PUTBUF: OUT WC, ;EMPTY BUFFER - JRST PUTNXT - ERR - -;*COMPLETE OUTPUT FILE - -R10EOF: CLOSE RC, ;CLOSE READ CHANNEL - RELEAS RC, - MOVE T1,JBFFRC - MOVEM T1,.JBFF ;RECLAIM BUF SPACE - - RTN - -W10EOF: CLOSE WC, ;CLOSE WRITE CHANNEL - RELEAS WC, - - RTN -;*OPEN DEVICE/LOOKUP ON FILE - - SETOM OPNTDMP - SKIPA -OPNTEN: SETZM OPNTDMP# - SETZM HEAD10 - SETZM HEAD10+1 - SETZM HEAD10+2 - MOVEI T1,HEAD10 ;SETUP BUFFER HEADER - MOVEM T1,OPEN10+2 - SETZM EOFSW# - - MOVE T1,GTJDEV ;SETUP DEVICE - MOVEM T1,OPEN10+1 - - MOVEI T1,.IOBIN ;SET BINARY MODE - SKIPE OPNTDMP - MOVEI T1,.IODMP ;SET DUMP MODE - MOVEM T1,OPEN10 - - OPEN RC,OPEN10 ;OPEN READ CHANNEL - ERR - - MOVE T1,.JBFF ;SAVE RING BUFFER ADDRESS - MOVEM T1,JBFFRC# - - SKIPN OPNTDMP - INBUF RC,2 ;TWO BUFFERS - - MOVE T1,GTJFIL ;SETUP FILE NAME - MOVEM T1,LOOK10+.RBNAM - - MOVE T1,GTJEXT ;SETUP FILE EXT - MOVEM T1,LOOK10+.RBEXT - - MOVE T1,GTJDIR ;SETUP PPN - MOVEM T1,LOOK10+.RBPPN - - MOVEI T1,17 - MOVEM T1,LOOK10 - - LOOKUP RC,LOOK10 ;FIND FILE - RTN ;NOT FOUND - - JRST CPOPJ1 ;FOUND -;*OPEN DEVICE/LOOKUP ON DATA FILE - -OPNDAT: SETZM OPND10 - SETZM OPND10+1 - SETZM OPND10+2 - MOVEI T1,OPND10 ;SETUP BUFFER HEADER - MOVEM T1,OPND10+2 - - MOVE T1,GTJDEV ;SETUP DEVICE - MOVEM T1,OPND10+1 - - MOVEI T1,.IODMP ;SET DUMP MODE - MOVEM T1,OPND10 - - OPEN DAT,OPND10 ;OPEN READ CHANNEL - ERR - - MOVE T1,GTJFIL ;SETUP FILE NAME - MOVEM T1,ODAT10+.RBNAM - - MOVE T1,GTJEXT ;SETUP FILE EXT - MOVEM T1,ODAT10+.RBEXT - - MOVE T1,GTJDIR ;SETUP PPN - MOVEM T1,ODAT10+.RBPPN - - MOVEI T1,17 - MOVEM T1,ODAT10 - - LOOKUP DAT,ODAT10 ;FIND FILE - RTN ;NOT FOUND - - JRST CPOPJ1 ;FOUND -;*OPEN DEVICE/ENTER ON FILE - -OPNWRT: SETZM HEDBLK - SETZM HEDBLK+1 - SETZM HEDBLK+2 - MOVSI T1,HEDBLK ;SETUP BUFFER HEADER - MOVEM T1,OPNBLK+2 - - MOVE T1,O.DEV ;SETUP DEVICE - SKIPN T1 - MOVSI T1,(SIXBIT/DSK/) - MOVEM T1,OPNBLK+1 - MOVEI T1,.IODMP ;SET DUMP MODE - MOVEM T1,OPNBLK - OPEN WC,OPNBLK ;OPEN WRITE CHANNEL - ERR - - SETZM ENTBLK - MOVE T1,[ENTBLK,,ENTBLK+1] - BLT T1,ENTBLK+17 - - MOVE T1,O.NAM1 ;SETUP FILE NAME - MOVEM T1,ENTBLK+.RBNAM - - MOVE T1,O.EXT ;SETUP FILE EXT - MOVEM T1,ENTBLK+.RBEXT - - MOVE T1,O.PPN ;SETUP PPN - MOVEM T1,ENTBLK+.RBPPN - - MOVE T1,O.PRT ;SETUP PROTECTION - DPB T1,[POINT 9,ENTBLK+.RBPRV,8] - - LDB T1,[POINT 3,O.DATE,23] ;SETUP TIME AND DATE - DPB T1,[POINT 3,ENTBLK+.RBEXT,20] - LDB T1,[POINT 12,O.DATE,35] - DPB T1,[POINT 12,ENTBLK+.RBPRV,35] - MOVE T1,O.TIME - DPB T1,[POINT 11,ENTBLK+.RBPRV,23] - - MOVE T1,O.VER ;SETUP VERSION - MOVEM T1,ENTBLK+.RBVER - - MOVEI T1,17 - MOVEM T1,ENTBLK - ENTER WC,ENTBLK ;ENTER FILE - RTN - JRST CPOPJ1 -;*ENTER FILE ON CHANNEL WC - -ETER10: SETZM HEDBLK - SETZM HEDBLK+1 - SETZM HEDBLK+2 - MOVSI T1,HEDBLK ;SETUP BUFFER HEADER - MOVEM T1,OPNBLK+2 - MOVE T1,O.DEV ;SETUP DEVICE - SKIPN T1 - MOVSI T1,(SIXBIT/DSK/) - MOVEM T1,OPNBLK+1 - MOVEI T1,.IODMP ;DUMP MODE - MOVEM T1,OPNBLK - - OPEN WC,OPNBLK ;OPEN WRITE CHANNEL - ERR - - SETZM ENTBLK - MOVE T1,[ENTBLK,,ENTBLK+1] - BLT T1,ENTBLK+17 - - MOVE T1,O.NAM1 ;SETUP FILE NAME - MOVEM T1,ENTBLK+.RBNAM - MOVE T1,O.EXT ;SETUP FILE EXT - MOVEM T1,ENTBLK+.RBEXT - MOVE T1,O.PPN ;SETUP PROJ,PROG # - SKIPN T1 - MOVE T1,[6,,2020] ;DEFAULT PPN IS 6,20 - MOVEM T1,ENTBLK+.RBPPN - MOVE T1,O.PRT ;SETUP PROTECTION - DPB T1,[POINT 9,ENTBLK+.RBPRV,8] - LDB T1,[POINT 3,O.DATE,23] ;SETUP TIME AND DATE - DPB T1,[POINT 3,ENTBLK+.RBEXT,20] - LDB T1,[POINT 12,O.DATE,35] - DPB T1,[POINT 12,ENTBLK+.RBPRV,35] - MOVE T1,O.TIME - DPB T1,[POINT 11,ENTBLK+.RBPRV,23] - MOVE T1,O.VER ;SETUP VERSION - MOVEM T1,ENTBLK+.RBVER - - MOVEI T1,17 ;SET # OF WORDS IN EXTENDED ENTER - MOVEM T1,ENTBLK - MOVEI T1,RP.NFS!RP.ABC ;BIT 22 FOR BAD CHECKSUM - MOVEM T1,E10STS ;TELL MON NOT TO CHECK IT - MOVE T1,S.ALO ;SET BLOCKS ALLOCATED - MOVEM T1,E10ALC - - ENTER WC,ENTBLK - RTN ;ERROR RETURN - JRST CPOPJ1 ;GIVE SKIP (GOOD) RETURN -SUBTTL TOPS-10 INDIRECT COMMAND FILE PROCESS - -$CCL: SKIPE $CCLF ;ALREADY DOING INDIRECT ? - ERR - - SETOM $CCLF ;SET COMMAND FILE PROCESS FLAG - - MOVE T1,GTJDEV - SKIPN T1 ;ANY DEVICE SPECIFIED ? - MOVSI T1,'DSK' ;NO, ASSUME "DSK" - MOVEM T1,CCLBLK+1 - - MOVE T1,GTJFIL - MOVEM T1,CCLDIR ;SETUP FILE NAME - - MOVE T1,GTJEXT - SKIPN T1 ;ANY EXTENSION SPECIFIED ? - MOVSI T1,'CMD' ;NO, ASSUME "CMD" - MOVEM T1,CCLDIR+1 - - MOVE T1,GTJDIR - MOVEM T1,CCLDIR+3 ;SETUP PPN - - MOVEI $IBF - MOVEM CCLBLK+2 - - OPEN $CHN,CCLBLK ;OPEN COMMAND CHANNEL - ERR - - INBUF $CHN,1 ;ONE BUFFER - - LOOKUP $CHN,CCLDIR ;FIND COMMAND FILE - ERR - - MOVE .JBFF ;SAVE FIRST FREE FOR RECLAIM - MOVEM $SJBFF# - - MOVE T1,[.NULIO,,.PRIOU] - MOVEM T1,CSB+.CMIOJ - SKIPL ECOFLG - SETOM INTAKE - RTN -$CCLIN: SOSLE $IBF+2 ;ANY CHARS AVAILABLE ? - JRST $CCLI1 ;YES - - IN $CHN, ;NO, INPUT A BUFFER - JRST $CCLI1 ;OK - - STATZ $CHN,740000 ;NO, CHECK STATUS - ERR - - MOVEI [ASCIZ/ - [END OF COMMAND FILE] -/] - PNTALF - JRST REEN - -$CCLI1: ILDB T2,$IBF+1 ;GET CHAR - -; CAIN T2,12 ;LF, CLEAR COMMENT FLAG -; SETZM $CMNTF -; CAIN T2,14 ;F/F, CLEAR COMMENT FLAG -; SETZM $CMNTF -; -; CAIN T2,";" ;SEMICOLON, SET COMMENT FLAG -; SETOM $CMNTF -; -; SKIPE $CMNTF ;PROCESSING COMMENT ? -; JRST $CCLIN ;YES - - RTN ;RETURN TO CHAR PROCESS - -CCLBLK: BLOCK 3 -$IBF: BLOCK 3 -CCLDIR: BLOCK 4 -SUBTTL SPECIFY DEVICE FILE STRUCTURE FOR DIRECTORY -; =============================================== - -DEVSTR: MOVE T2,GTJDIR - MOVEM T2,DIRDIR# ;SAVE STRUCTURE PPN - MOVE T2,GTJDEV ;GET STRUCTURE NAME - MOVEM T2,DIRDEV - MOVEM T2,DATDEV ;SAVE IT - MOVE T1,[0,,DIRDEV] ;STATUS AT LOC+0 - - DSKCHR T1, - ERR - - LDB T2,[POINT 6,T1,26];GET BITS 21-26 - SUBI T2,5 ;5=RH10/RH20 CTR - JUMPE T2,.+2 ;IT'S RH10/RH20 CTR - ERR - - SETZM RM03F - LDB T2,[POINT 3,T1,32] - MOVEM T2,DSKTYP - CAIN T2,.DCUR4 - JRST CTLROK - CAIN T2,.DCUR6 - JRST CTLROK - CAIN T2,.DCUR3 - JRST [SETOM RM03F - JRST CTLROK] - ERR - -CTLROK: MOVE T1,[16,,DIRDEV] ;PHYNAME AT LOC+15 - - DSKCHR T1, ;GET PHY DEVICE NAME - ERR - - MOVE T1,[16,,DATDEV] - - DSKCHR T1, - ERR - -USRHPQ: MOVEI 1 - HPQ ;SET HI-PRI RUN Q - JFCL - -USRHDQ: MOVEI HDQ ;SET HI-PRI DISK Q - DISK. - JFCL - JRST .+2 -HDQ: 3,,-1 - GO OPNHOM ;OPEN WITH HOM CHANNEL - ERR - - MOVEI T3,HMBK01 ;GET HOME BLK #1 - GO RADHOM - ERR - - MOVE T1,HOMBUF+103 - MOVEM T1,BTADDR ;SAVE ORIGINAL 8080 POINTER - - MOVE B,HOMBUF+101 ;GET DISK ADDRESS - MOVEM B,BTLADR# - - MOVE C,HOMBUF+102 ;GET LENGTH IN SECTORS - MOVEM C,BTLPAG# - - JUMPE B,CRESTR ;NO CURRENT KS10FE.BIN - -CREST1: GO OPNDAT - JRST CRESTR ;REALLY NOT THERE - - MOVE T1,ODAT10+.RBALC - CAIGE T1,<^D28*^D4>+1 - ERR - - USETI DAT,PRIME ;GET LOGICAL BLK # OF 1ST BLK - - IN DAT,[IOWD 200,GETBUF - 0] - SKIPA - ERR - GO GOARND+4 - - CAME T1,BTLADR ;HOME BLOCK & FILE AGREE ? - ERR - - USETI DAT,1 ;SELECT 1ST PAGE - - MOVEI T5,^D28 - MOVE T4,[IPAG,,FEDIR] - MOVEI T3,FEDIR+777 - -CREST2: IN DAT,[IOWD ^D512,IPAG - 0] - JRST CREST3 - - GETSTS DAT,T1 - TRNE T1,74B23 ;ANY ERRORS - ERR - TRNN T1,1B22 ;END OF FILE ? - ERR - JRST WRTSEX - -CREST3: MOVE T1,T4 - MOVE T2,T3 - BLT T1,(T2) ;TRANSFER TO HI-CORE - - ADDI T4,^D512 - ADDI T3,^D512 - SOJG T5,CREST2 - - JRST WRTSEX -;*OPNHOM - ROUTINE TO OPEN THE DISK ON CHANNEL 'HOM' - -OPNHOM: MOVEI T5,.IODMP ;OPEN IN DUMP MODE - MOVE T6,DSKUPN ;GET DEVICE NAME - MOVEI T7,0 - - OPEN HOM,T5 - RTN ;ERROR RETURN - - JRST CPOPJ1 ;GOOD RETURN - -;*RADHOM - ROUTINE TO READ A BLOCK ON CHANNEL 'HOM' - -RADHOM: SETZ T1, - MOVEI T2,HOM - DPB T2,[POINT 4,T1,12] ;PUT CHANNEL IN ARG REG. - DPB T3,[POINT 23,T1,35] ;PUT BLK NO IN ARG REG - - SUSET. T1, ;INSERT BLOCK NUMBER - ERR - - IN HOM,HOMLST ;BRING IN THE DIRECTORY BLOCK - JRST CPOPJ1 ;GOOD RETURN - - RTN ;BAD RETURN - -;*WHOM10 - ROUTINE TO WRITE A BLOCK ON CHANNEL 'HOM' - -WHOM10: MOVSI T1,SU.SOT ;OUTPUT BIT - MOVEI T2,HOM - DPB T2,[POINT 4,T1,12] ;PUT CHANNEL IN ARG REG. - DPB T3,[POINT 23,T1,35] ;PUT BLK NO IN ARG REG - - SUSET. T1, - ERR - - OUT HOM,HOMLST ;OUTPUT HOME BLOCK - JRST CPOPJ1 ;GOOD RETURN - - RTN ;ERROR RETURN -;*OPWCDP - ROUTINE TO OPEN IN DUMP MODE TO WRITE - -OPWCDP: MOVEI T1,.IODMP ;DUMP MODE - MOVE T2,DSKUPN ;DEVICE NAME - SETZM T3 - - OPEN WC,T1 ;OPEN FOR OUTPUT - RTN ;ERROR RETURN - - JRST CPOPJ1 ;GOOD RETURN - -;*OPRCDP - ROUTINE TO OPEN IN DUMP MODE TO READ - -OPRCDP: MOVEI T1,.IODMP ;USE DUMP MODE INPUT - MOVE T2,DSKUPN ;GET DEVICE NAME - SETZM T3 ;NO BUFFER - - OPEN RC,T1 - RTN ;ERROR RETURN - - JRST CPOPJ1 ;GOOD RETURN -;*GETBLK - ROUTINE TO GET THE LOGICAL BLOCK NUMBER OF THE -;* FIRST BLOCK OF A FILE IN THE TOPS-10 FILE SYSTEM. -;* -;*CALL: GO GETBK1 -;* OR -;* GO GETBK2 -;* RETURN WITH BLOCK # IN T1 - -GETBK1: GO OPRCDP ;USE DUMP MODE INPUT - ERR - - MOVEI T1,17 ;GET # OF ARGUMENTS - MOVEM T1,LOOK10 ;SAVE # OF ARGS IN LOOKUP BLK - - LOOKUP RC,LOOK10 ;LOOKUP THE FILE - ERR - - JRST GOARND ;GO AROUND - -GETBK2: GO OPRCDP ;USE DUMP MODE INPUT - ERR - - MOVEI T1,17 ;GET # OF ARGUMENTS - MOVEM T1,ENTBLK ;SAVE IT - - LOOKUP RC,ENTBLK ;LOOKUP THE OUTPUT FILE - ERR - -GOARND: USETI RC,PRIME ;SET UP TO READ PRIME RIB - - IN RC,[IOWD 200,GETBUF - 0 ] ;READ THE PRIME RIB - SKIPA - ERR - - HRRZ T1,GETBUF ;GET ADDRESS OF 1ST POINTER - MOVEI T1,GETBUF+1(T1) ;GET SECOND POINTER - HLL T1,HOMCLP ;FORM BYTE POINTER - LDB T1,T1 ;GET ADDRESS POINTER - IMUL T1,HOMBPC ;COMPUTE RIB LOGICAL BLOCK # - ADDI T1,1 ;COMPUTE # OF DATA BLOCK 1 - RTN ;RETURN -SUBTTL ROUTINE TO CREATE KS10FE.BIN FILE -; =========================================== - -CRESTR: MOVE T1,GTJDEV - MOVEM T1,O.DEV - - MOVE T1,GTJFIL - MOVEM T1,O.NAM1 - - MOVE T1,GTJEXT - MOVEM T1,O.EXT - - MOVE T1,GTJDIR - MOVEM T1,O.PPN - - MOVEI T1,577 ;SET PROTECTION 577 - MOVEM T1,O.PRT - - SETZM O.DATE - SETZM O.TIME - SETZM O.VER - - MOVEI T1,^D28*^D4 - MOVEM T1,S.ALO# - - GO ETER10 ;ENTER FILE - ERR - - CLOSE WC,CL.DLL ;CLOSE WRITE CHANNEL - RELEAS WC, - -;*GET DISK DIRECTORY ADDRESS, PUT IN HOME BLOCK - - GO GETBK2 ;GET 1ST BLOCK FROM -10 - MOVEM T1,BTLADR - - MOVE T7,BTLADR - MOVEI T6,BTADDR - GO T8080P ;COMPUTE 8080 POINTER - - MOVE BTLADR ;SET LOGICAL ADDRESS - MOVEM HOMBUF+101 - MOVEI ^D28*^D4 ;SET LENGTH IN SECTORS - MOVEM BTLPAG - MOVEM HOMBUF+102 - MOVE BTADDR ;SET 8080 ADDRESS - MOVEM HOMBUF+103 -;*WRITE OUT HOME BLOCK #1 - - MOVEI T3,HMBK01 ;HOME BLOCK # 1 - GO WHOM10 ;WRITE IT - ERR - -;*HERE TO UPDATE AND WRITE OUT HOME BLOCK # 10 - - MOVEI T3,HMBK10 ;GET BLOCK # FOR HOBK10 - SETZ T1, - MOVEI T2,HOM - DPB T2,[POINT 4,T1,12] ;PUT CHANNEL IN ARG REG. - DPB T3,[POINT 23,T1,35] ;PUT BLK NO IN ARG REG - - SUSET. T1, - ERR - - IN HOM,H10LST ;BRING IN HOME BLK #10 - JRST .+2 ;READ OK - - ERR - - MOVE BTLADR ;SET LOGICAL ADDRESS - MOVEM HOMB10+101 - MOVE BTLPAG ;SET LENGTH IN PAGES - MOVEM HOMB10+102 - MOVE BTADDR ;SET 8080 ADDRESS - MOVEM HOMB10+103 - - MOVSI T1,SU.SOT ;SET OUTPUT BIT - MOVEI T2,HOM - DPB T2,[POINT 4,T1,12] ;PUT CHANNEL IN ARG REG. - DPB T3,[POINT 23,T1,35] ;PUT BLK NO IN ARG REG - - SUSET. T1, - ERR - - OUT HOM,H10LST ;OUTPUT HMBK10 - SKIPA - - ERR - - CLOSE DIR, ;CLOSE DIR CHANNEL - CLOSE HOM, ;CLOSE HOM CHANNEL - JRST CREST1 -SUBTTL PROCESS ".ULD" MICROCODE - -RDULD: MOVEI T1,RDULDT - MOVEM T1,CTADR - SKIPE BC1FLG - JRST .+5 - SETZM CRAM - MOVE [CRAM,,CRAM+1] - BLT CRAM+13777 ;CLEAR MICROCODE STORE - JRST .+4 - SETZM CRMBC1 - MOVE [CRMBC1,,CRMBC1+1] - BLT CRMBC1+13777 - - SETZM IBF+1 - SKIPN MONTYP - JRST READ.1 - - HLRZ T1,UCFILE - MOVE T2,[1,,.FBBYV] - MOVEI T3,INCNT# - GTFDB ;GET FILE PAGE COUNT - HRRZS INCNT - -READ.1: GO RDEOL - GO RDBYTE - CAIN T1,"E" - JRST READ.5 - CAIE T1,"[" - JRST READ.1 - MOVEI T6,0 - -READ.2: GO RDBYTE - CAIN T1,"]" - JRST READ.3 - SUBI T1,"0" - LSH T6,3 - ADD T6,T1 - JRST READ.2 - -READ.3: GO RDBYTE - CAIE T1,"=" - ERR - MOVEM T6,RDULT6# - IMULI T6,3 - SKIPN BC1FLG - ADDI T6,CRAM - SKIPE BC1FLG - ADDI T6,CRMBC1 - MOVEM T6,CRAMT6# - -RDULIN: MOVE T4,[POINT 3,ULDSTR] - MOVEI T5,^D36 - - GO RDBYTE - IDPB T1,T4 - - SOJG T5,RDULIN+2 - -KSSHF3: SETZ AC10, - SETZB AC11,AC12 - - MOVE T7,[-^D108,,KSCRMP] - - MOVE STPNTR,[POINT 1,ULDSTR] - MOVE 0,[ILDB T6,STPNTR] - MOVE T1,[DPB T6,(T7)] - MOVE T2,[AOBJN T7,0] - MOVE T3,[JRST KSSHF4] - JRST 0 - -KSSHF4: GO KSXX ;COMPUTE PARITY - - JRST READ.1 -;*KSXX, CRAM PARITY COMPUTE SUBROUTINE - -KSXX: MOVE STPNTR,[POINT 1,AC10] - MOVEI 0,^D36 - SETZ T1, - MOVE T2,[ILDB T6,STPNTR] - MOVE T3,[ADD T1,T6] - MOVE T4,[SOJG 0,T2] - MOVE T5,[JRST KSXX1] - JRST T2 ;COMPUTE CRAM PARITY "CRA" - -KSXX1: TDC T1,PARFLG - DPB T1,PB.CRA - - MOVEI 0,^D60 - SETZ T1, - MOVE T5,[JRST KSXX2] - JRST T2 ;COMPUTE CRAM PARITY "CRM" - -KSXX2: TDC T1,PARFLG - DPB T1,PB.CRM - - MOVE T6,CRAMT6 - MOVE T1,AC11 - MOVE T2,AC12 - LSHC T1,-^D12 - MOVEM T2,(T6) ;STORE BITS 60-95 - - MOVE T1,AC10 - MOVE T2,AC11 - LSHC T1,-^D12 - MOVEM T2,1(T6) ;STORE BITS 24-59 - - MOVE T2,AC10 - LSH T2,-^D12 - MOVEM T2,2(T6) ;STORE BITS 0-23 - - RTN - -READ.5: GO RDBYTE - CAIE T1,"N" - JRST READ.1 - GO RDBYTE - CAIE T1,"D" - JRST READ.1 - - SETOM RDFLAG - - SKIPN MONTYP - JRST R10EOF - - SETO T1, - MOVE T2,[.FHSLF,,] - SETZ T3, - - PMAP ;RELEASE LAST INPUT PAGE - ERJMP [JSERR - JRST START] - - HLRZ T1,UCFILE - CLOSF - ERR - - RTN -DEFINE CRMBIT(BIT),< - IFL BIT-^D36,< - POINT 1,AC10,BIT - > - IFGE BIT-^D36,< - IFL BIT-^D72,< - POINT 1,AC11,BIT-^D36 - > - IFGE BIT-^D72,< - POINT 1,AC12,BIT-^D72 - > - > -> - -DEFINE CRMRNG(FROM,TO),< - ZZ..==FROM - REPEAT TO-FROM+1,< - CRMBIT \ZZ.. - ZZ..==ZZ..+1 - > -> - - RADIX 10 -KSCRMP: CRMRNG 0,11 ;J - CRMRNG 60,68 ;ALU LSRC RSRC - CRMRNG 87,89 ;DEST - CRMBIT 107 - CRMBIT 107 - CRMRNG 74,77 ;A - CRMBIT 107 - CRMBIT 107 - CRMRNG 80,83 ;B - CRMRNG 84,86 ;RAMADR - CRMBIT 107 - CRMRNG 72,73 ;DBUS - CRMRNG 69,71 ;DBM - CRMBIT 78 ;DP CLOCK L - CRMBIT 50 ;PAR EN L - CRMBIT 92 ;PAR CK L - CRMBIT 79 ;DP CLOCK R - CRMBIT 51 ;PAR EN R - CRMBIT 93 ;PAR CK R - CRMRNG 18,20 ;SPEC - CRMRNG 30,32 - CRMRNG 21,23 ;DISP - CRMRNG 27,29 - CRMRNG 15,17 ;SKIP - CRMRNG 33,35 - CRMBIT 107 - CRMRNG 12,13 ;T - CRMBIT 25 ;CRY 38 - CRMRNG 90,91 ;SC & FE - CRMBIT 48 ;FM WRITE - CRMBIT 26 ;MEM - CRMRNG 52,53 ;DIVIDE AND MULTI PREC - CRMBIT 49 ;MULTI SHIFT - CRMBIT 14 ;CALL - CRMBIT 107 - CRMBIT 107 - CRMBIT 107 - CRMBIT 107 - CRMBIT 107 - CRMBIT 107 - CRMBIT 107 - CRMBIT 107 - CRMBIT 107 - CRMRNG 54,59 ; # - CRMRNG 36,47 - -PB.CRA: CRMBIT 24 -PB.CRM: CRMBIT 94 - RADIX 8 -;*SUBROUTINE TO FILE END OF LINE -;*CALL WITH: -;* GO RDEOL -;* RETURN HERE - -RDEOL: GO RDBYTE - CAIN T1,12 - RTN - JRST RDEOL - -RDBYTE: SOSLE IBF+1 - JRST .+3 - GO RDUINP ;GET NEXT FILE PAGE - ERR - - ILDB T1,IBF ;GET FILE BYTE - JUMPE T1,RDBYTE ;IGNORE NULLS - - RTN - -RDUINP: SKIPN MONTYP - JRST RDUI10 - SOSGE INCNT ;COUNT DOWN PAGE COUNT - RTN ;NONE LEFT, EOF - - MOVE T1,UCFILE - MOVE T2,[.FHSLF,,] - SETZ T3, - - PMAP ;GET NEXT FILE PAGE - ERJMP [JSERR - JRST START] - - MOVEI 1000*5 - MOVEM IBF+1 ;SET BYTE COUNT - - MOVE [POINT 7,IPAG] - MOVEM IBF ;SET BYTE POINTER - - AOS UCFILE ;INCREMENT FILE PAGE NUMBER - AOS (P) - RTN - -RDUI10: GO GET10 - MOVEM T3,RDUIBF# - SKIPGE EOFSW - RTN - MOVEI 5 - MOVEM IBF+1 - MOVE [POINT 7,RDUIBF] - MOVEM IBF - AOS (P) - RTN -SUBTTL COMMANDS -- OUTPUT - - SCMTAB OUTCMD - CMTAB BC1,OUTBC1 - CMTAB CRAM,OUTRAM - CMTAB MTBOOT,OUTMT - CMTAB RAM,OUTRAM - ECMTAB - -OUTX: CMD [FLDDB.(.CMKEY,,OUTCMD)], - HRRZ T1,(T2) - JRST (T1) -;*OUTRAM, OUTPUT MICROCODE ".RAM" FILE - -OUTBC1: SETOM BC1FLG - JRST OUTRAM+1 -OUTRAM: SETZM BC1FLG - NOISE - HRROI T1,[ASCIZ "KS10"] - MOVEM T1,GTJFIL - HRROI T1,[ASCIZ "RAM"] - MOVEM T1,GTJEXT - SETZM GTJDEV - SETZM GTJDIR - MOVSI T1,(GJ%FOU) - MOVEM T1,GTJFLG - - CMD [FLDDB.(.CMFIL)] - MOVEM T2,OUTJFN# - - CONFIRM - - SKIPN MONTYP - JRST ORAM10 ;TOPS-10 - - MOVE T1,OUTJFN - MOVEI T2,OF%WR - OPENF - ERR - - SKIPN BC1FLG - MOVEI T6,CRAM - SKIPE BC1FLG - MOVEI T6,CRMBC1 - MOVEI T5,4000 -OUTLP: MOVE T2,(T6) - BOUT - MOVE T2,1(T6) - BOUT - MOVE T2,2(T6) - BOUT - - ADDI T6,3 - SOJG T5,OUTLP - - MOVE T1,OUTJFN - CLOSF - ERR - - RTN -;*TOPS-10 OUTPUT MICRO-CODE ".RAM" FILE - -ORAM10: MOVE T1,MC.VER - MOVEM T1,O.VER - MOVE T1,MC.TIME - MOVEM T1,O.TIME - MOVE T1,MC.DATE - MOVEM T1,O.DATE - SETZM O.PRT - - MOVE T1,GTJDEV - MOVEM T1,O.DEV - MOVE T1,GTJFIL - MOVEM T1,O.NAM1 - MOVE T1,GTJEXT - MOVEM T1,O.EXT - MOVE T1,GTJDIR - MOVEM T1,O.PPN - - GO OPNWRT ;OPEN OUTPUT - ERR - - MOVEI T2,^D12 - SKIPN BC1FLG - MOVE T3,[CRAM,,IPAG] - SKIPE BC1FLG - MOVE T3,[CRMBC1,,IPAG] - -ORAM11: MOVE T1,T3 - BLT T1,IPAG+777 - MOVSI T1,^D512 - ADD T3,T1 - - OUT WC,[IOWD ^D512,IPAG - 0] - SKIPA - ERR - - SOJG T2,ORAM11 - - GO W10EOF - - RTN -;*OUTMT, OUTPUT MAGTAPE ".RDI" FILE - -OUTMT:HRROI T1,[ASCIZ "MTBOOT"] - MOVEM T1,GTJFIL - - HRROI T1,[ASCIZ "EXE"] - MOVEM T1,GTJEXT - - SETZM GTJDEV - SETZM GTJDIR - - MOVSI T1,(GJ%OLD) - MOVEM T1,GTJFLG - - CMD [FLDDB.(.CMFIL)] - MOVEM T2,BTJFN ;SAVE THE JFN OF THE BOOT FILE - - SKIPN MONTYP - GO OMT10 ;TOPS-10 - - NOISE - HRROI T1,[ASCIZ "MTBOOT"] - MOVEM T1,GTJFIL - HRROI T1,[ASCIZ "RDI"] - MOVEM T1,GTJEXT - SETZM GTJDEV - SETZM GTJDIR - MOVSI T1,(GJ%FOU) - MOVEM T1,GTJFLG - - CMD [FLDDB.(.CMFIL)] - MOVEM T2,MTJFN# - - CONFIRM - - SKIPN MONTYP - JRST OMT10A ;TOPS-10 - - MOVE T1,MTJFN - MOVEI T2,OF%WR - OPENF - ERR - SETZB T1,T2 ;CREATE A BLANK FORK - CFORK - ERJMP [JSERR ;ERROR ON CFORK - HALTF] - MOVEM T1,FORKN ;SAVE FORK - - HRRZ T1,BTJFN ;GET THE JFN OF THE BOOT - HRL T1,FORKN ;GET PROCESS HANDLE - SETZ T2,0 - GET - ERJMP [JSERR ;ERROR ON GET - JRST START] - - MOVE T1,FORKN - GEVEC ;GET THE VECTOR OF BOOT - MOVEM T2,BOOTEV ;SAVE BOOT ENTRY VECTOR ADDRESS - - SETZM WINDOW - MOVE [WINDOW,,WINDOW+1] - BLT WINDOW+777 ;CLEAR DIAG PRE-BOOT PAGE - - SETZM MTPAGD - MOVE [MTPAGD,,MTPAGD+1] - BLT MTPAGX ;CLEAR PRE-BOOT POINTER STORAGE - - MOVE T4,[-1000,,0] ;ALLOW FOR 1000 PAGES - - HRLZ P1,MTJFN ;GET JFN OF .RDI FILE - HRRI P1,1 ;GET MTBOOT START PAGE - - MOVEI P2,MTPAGD+1 -MTPGLP: HRLZ T1,FORKN ;GET PROCESS HANDLE - HRR T1,T4 ;GET PAGE NUMBER - RPACS ;READ PAGE ACCESS - TDNE T2,[PA%RD!PA%PEX] - GO MTCOPPG ;COPY PAGE - - AOBJN T4,MTPGLP ;TRY ANOTHER PAGE - - SETOM (P2) ;INDICATE END OF SPACE - - MOVE T1,BOOTEV ;FIND ENTRY VECTOR - HRRZM T1,1(P2) ;SET ENTRY VECTOR - - MOVE [MTSTR1,,WINDOW] - BLT WINDOW+ - - MOVE T1,[.FHSLF,,] - HRLZ T2,MTJFN - HRRI T2,0 - MOVE T3,[PM%WR] - PMAP ;PUT MAGTAPE PRE-BOOT IN .RDI FILE - ERJMP [JSERR - JRST START] - - MOVE T1,FORKN - KFORK ;KILL "GET" FORK - ERJMP [JSERR - JRST START] - - MOVE T1,MTJFN - TLO T1,(CO%NRJ) - CLOSF ;CLOSE FILE, KEEP JFN - ERR - MOVE T1,MTJFN - TLO T1,(CF%NUD!<.FBBYV>B17) - MOVE T2,[FB%BSZ] - MOVSI T3,(^D36B11) - CHFDB ;UPDATE BYTE SIZE IN FDB - - MOVE T1,MTJFN - TLO T1,(<.FBSIZ>B17) - MOVE T2,[-1] - HRRZ T3,P1 - IMULI T3,^D512 - CHFDB ;UPDATE EOF POINTER IN FDB - - MOVE T1,MTJFN - RLJFN - ERR - - RTN -MTCOPPG:HRRZM T1,0(P2) ;SET A POINTER TO PAGE NUMBER - AOS P2 ;POINT TO NEXT - PUT T1 - HRRZ T3,T1 ;FIND THE PAGE - - SETZM PAG0FLG# - CAIN T3,1 ;IS THIS PAGE 1 ? - ERR - CAIN T3,0 ;IS THIS PAGE 0 ? - SETOM PAG0FLG ;IF PAGE 0 OF FILE, SET FLAG - - HRL T1,FORKN ;GET FORK NUMBER - HRR T1,T3 ;GET PAGE NUMBER - MOVE T2,[.FHSLF,,] - MOVE T3,[PM%RD] - PMAP ;GET PAGE IN SELF - ERJMP [JSERR - JRST START] - - MOVE T3,[GENPAG,,IPAG] - BLT T3,IPAG+777 - - SKIPN PAG0FLG ;IS THIS PAGE 0 ? - JRST .+4 ;NO - SETZM IPAG+KPALIVE ;YES, ZERO 8080 COMM AREA - MOVE T1,[IPAG+KPALIVE,,IPAG+KPALIVE+1] - BLT T1,IPAG+MSSLAVE - - MOVE T1,[.FHSLF,,] - MOVE T2,P1 ;SET UP PMAP ARGUMENTS - MOVSI T3,(PM%WR) - PMAP - ERJMP [JSERR - JRST START] ;JSYS ERROR - - GETIT T3 ;REMOVE PAGE NUMBER - AOS P1 ;UPDATE P1 ARGUMENTS - RTN ;RETURN -;*TOPS-10 OUTPUT MAGTAPE ".RDI" FILE - -OMT10: GO OPNTEN ;OPEN INPUT FILE - ERR - - MOVE T1,LOOK10+.RBVER ;USE INPUT VERSION AS OUTPUT VERSION - MOVEM T1,MT.VER - - LDB T1,[POINT 11,LOOK10+.RBPRV,23] - MOVEM T1,MT.TIME ;USE INPUT TIME AND DATE AS OUTPUT - - LDB T1,[POINT 3,LOOK10+.RBEXT,20] - DPB T1,[POINT 3,MT.DATE,23] - LDB T1,[POINT 12,LOOK10+.RBPRV,35] - DPB T1,[POINT 12,MT.DATE,35] - - RTN - -OMT10A: MOVE T1,MT.VER - MOVEM T1,O.VER - MOVE T1,MT.TIME - MOVEM T1,O.TIME - MOVE T1,MT.DATE - MOVEM T1,O.DATE - SETZM O.PRT - - MOVE T1,GTJDEV - MOVEM T1,O.DEV - MOVE T1,GTJFIL - MOVEM T1,O.NAM1 - MOVE T1,GTJEXT - MOVEM T1,O.EXT - MOVE T1,GTJDIR - MOVEM T1,O.PPN - - GO OPNWRT ;OPEN OUTPUT - ERR - - JRST REDEXE -SUBTTL PROCESS TOPS-10 MAGTAPE BOOT EXE FILE - -;MISCELLANEOUS EQUATES - -PM.ACC==400000 ;ALLOW ACCESS TO A PAGE -PM.WRT==100000 ;ALLOW A PAGE TO BE WRITTEN -PG.LEB==400000 ;LOAD THE EXEC BASE REGISTER -PG.EAT==20000 ;TURN ON THE PAGING HARDWARE (ENABLE TRAPS) -PAGSIZ==^D512 ;NUMBER OF WORDS IN A PAGE -BLKSIZ==^D128 ;NUMBER OF WORDS IN A BLOCK -P2BLSH==2 ;SHIFT AMOUNT TO CONVERT PAGES TO BLOCKS -B2PLSH==-2 ;SHIFT AMOUNT TO CONVERT BLOCKS TO PAGES -P2WLSH==^D9 ;SHIFT AMOUNT TO CONVERT PAGES TO WORDS -W2PLSH==-^D9 ;SHIFT AMOUNT TO CONVERT WORDS TO PAGES -SV.DIR==1776 ;DIRECTORY BLOCK CODE -SV.END==1777 ;END DIRECTORY BLOCK CODE - -DBUF=WINDOW ;EXE DIRECTORY PAGE - -Q=10 -N=12 -M=13 -K=14 -;HERE TO READ AN EXE FILE - -REDEXE: SETZM SELPAG# - GO REDDIR ;READ THE DIRECTORY PAGE - - HLRZ A,DBUF ;DIRECTORY DESCRIPTOR - HRRZ T6,DBUF ;LENGTH OF THE DIRECTORY - CAIN A,SV.DIR ;IS THIS A DIRECTORY? - CAIL T6,^D128 ; WHICH IS LESS THAN OR EQUAL TO 128 WORDS LONG? - ERR - - MOVNI T6,-1(T6) ;MAKE AN AOBJN POINTER TO THE DIRECTORY - HRLI T6,DBUF+1 ; .. - MOVSS T6 ; .. - - OUT WC,[IOWD ^D512,IPAG - 0] ;MAKE DUMMY FIRST PAGE FOR NOW - SKIPA - ERR - - MOVEI P2,MTPAGD+1 - -REDEX2: MOVE M,(T6) ;BITS,,FILE PAGE NUMBER - JUMPL M,REDEX3 ;JUMP IF HI SEG PAGE, READ IT IMMEDIATELY - ; ABOVE THE LOW SEGMENT - - HRRZ T5,1(T6) ;CORE PAGE NUMBER - LSH T5,P2WLSH ;CORE ADDRESS - SKIPN T5 ;PAGE 0? - HRROI T5,0 ;YES, READ IT AND REMEMBER ITS PAGE 0 - -REDEX3: LDB T7,[POINT 9,1(T6),8] - -REDEX4: TRNN M,-1 ;AN ALLOCATED BUT ZERO PAGE? - SOJA M,REDEX8 ;YES, COUNT DOWN REPEAT COUNT AND UPDATE CORE ADDRESS - HRRZ T4,M ;FILE PAGE NUMBER - LSH T4,P2BLSH ;CONVERT TO BLOCK WITHIN THE FILE - CAMGE T4,SELPAG ;FILE PAGE NUMBERS MUST BE MONOTONICALLY INCREASING - ERR - -REDEX5: CAMN T4,SELPAG ;AT THE RIGHT BLOCK WITHIN THE FILE? - JRST REDEX7 ;YES - -REDEX6: GO SELBLK ;BYPASS FILE PAGE - JRST REDEX5 ;SEE IF THERE YET - -REDEX7: CAIN T5,1000 - ERR - - GO REDPAG ;READ EXE DATA PAGE - - CAIE T5,0 ;PAGE 0 ? - JRST .+6 ;NO - PUT T1 - SETZM IPAG+KPALIVE ;YES, ZERO 8080 COMM AREA - MOVE T1,[IPAG+KPALIVE,,IPAG+KPALIVE+1] - BLT T1,IPAG+MSSLAVE - GETIT T1 - - PUT T5 - ANDI T5,-1 - LSH T5,W2PLSH - HRRZM T5,(P2) ;SET A POINTER TO PAGE NUMBER - GETIT T5 - AOS P2 ;POINT TO NEXT - - OUT WC,[IOWD ^D512,IPAG - 0] - SKIPA - ERR - - JUMPGE T5,REDEX8 ;PAGE 0 JUST READ? - - MOVE IPAG+.JBSA - MOVEM MT.SADR ;SAVE STARTING ADDRESS - - MOVEI T5,0 ;READ NEXT PAGE INTO PAGE 1 - -REDEX8: ADDI T5,PAGSIZ ;NEXT PAGE -REDEX9: SOSL T7 ;READ ALL THE PAGES DESCRIBED BY THIS ENTRY? - AOJA M,REDEX4 ;NO, READ THE NEXT PAGE - - AOBJN T6,.+1 ;BUMP PAST THIS DIRECTORY ENTRY, AND - AOBJN T6,REDEX2 ; GO GET THE NEXT DIRECTORY ENTRY - - SETOM (P2) ;INDICATE END OF SPACE - - MOVE T1,MT.SADR - HRRZM T1,1(P2) ;SET ENTRY VECTOR - - SETZM IPAG - MOVE [IPAG,,IPAG+1] - BLT IPAG+777 - - MOVE [MTSTR1,,IPAG] - BLT IPAG+ - - GO RDEX10 ;PUT MAGTAPE PRE-BOOT IN ".RDI" FILE - - GO W10EOF ;CLOSE OUTPUT - GO R10EOF ;CLOSE INPUT - - RTN ;DONE - -;*SELECT NEXT EXE DATA PAGE - -SELBLK: - -;*READ EXE DATA PAGE - -REDPAG: SKIPA AC10,[-^D512,,IPAG] - -;*READ EXE DIRECTORY PAGE - -REDDIR: MOVE AC10,[-^D512,,WINDOW] - - GO GET10 - MOVEM T3,(AC10) - AOBJN AC10,.-2 - - MOVEI 4 - ADDM SELPAG ;INDICATE NEXT SELECTED PAGE - - RTN - -RDEX10: USETO WC,1 ;SELECT 1ST PAGE - - OUT WC,[IOWD ^D512,IPAG - 0] - SKIPA - ERR - RTN -;*MONITOR BOOT STRAP PROGRAM TO BE WRITTEN ON THE MAGTAPE - -MTSTR1: - PHASE BOORG - -MTSTRT:!JRST MTSTAR -MTHLT0:!HALT . ;TRIED TO OVERLOAD PRE-BOOT PAGE -MTHLT1:!HALT . ;MAGTAPE READ ERROR -MTHLT2:!HALT . ;NO RH-11 BASE ADDRESS -MTHLT3:!HALT . ;MAGTAPE SKIP EOF ERROR - -MTSTAR:!MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - MOVE MSRH ;GET MAGTAPE ADDRESS - MOVEM MTRHSV - SKIPN - JRST MTHLT2 ;NO RH-11 BASE ADDRESS ? - - MOVE MSDRIVE - MOVEM MTDRSV ;SAVE DRIVE - MOVE MSSLAVE - MOVEM MTSLSV ;SAVE SLAVE & FORMAT - MOVE KPALIVE - MOVEM MTKPAL ;SAVE KEEP-ALIVE WORD - - MOVE MTRHSV ;SETUP RH-11 TABLE - MOVE T1,MTPNTR - MOVEM (T1) - ADDI 2 - AOBJN T1,.-2 - MOVEI UBAP0 ;SETUP UBA MAP POINTER - HRRM MTUBP0 - MOVEI UBSTAT ;SETUP UBA STATUS POINTER - HRRM MTUBST - - MOVEI P1,^D100 ;RETRY 100 TIMES - MOVEI T3,MTPAG+1 ;FIND THE OFFSET STUFF - -RDMT:! JSP P,MTSRH ;SETUP RH-11 - - MOVE T4,(T3) ;FIND THE CORE ADDRESS - CAIN T4,1 ;CAN'T OVERLOAD PRE-BOOT - JRST MTBADR ;PAGE 1 REQUESTED TO BE LOADED ? - - JUMPL T4,RDMTDN ;QUIT IF ALL DONE WITH PAGES - - IORI T4,UBVBIT - WRIO T4,@MTUBP0 ;SET UP UNIBUS ADAPTOR PAGE 0 - - SETZ T1, ;CLEAR CURRENT ADDRESS REGISTER - WRIO T1,@MTBA ;SET UNIBUS ADDRESS TO 0 - - MOVNI T1,2000 ;READ A PAGE (WORD COUNT) - WRIO T1,@MTWC ;SET WORD COUNT - - MOVEI T1,MT.RF - WRIO T1,@MTCS1 ;READ FORWARD - - JSP P,MTRDY ;WAIT FOR READY - TRNE T1,MTTM - JRST MTFAIL ;READ ERROR, EOF DETECTED - - RDIO T1,@MTER - TRNE T1,177777-MTFCE - JRST MTRTRX ;ERROR OTHER THAN LENGTH ERROR - - AOS T3 ;POINT TO NEXT ENTRY - JRST RDMT ;DO NEXT PAGE - -MTRDY: RDIO T1,@MTDS ;READ DRIVE STATUS - TRNN T1,MTPIP ;IS DRIVE STOPPED ? - TRNN T1,MTDRY ;DRIVE READY ? - JRST MTRDY ;NO, WAIT - JRST @P ;YES, RETURN - -MTSRH:! MOVEI T1,RHCLR - WRIO T1,@MTCS2 ;CLEAR MAGTAPE - - MOVE T1,MTDRSV - WRIO T1,@MTCS2 ;SELECT DRIVE - - MOVE T1,MTSLSV - WRIO T1,@MTTC ;LOAD TAPE CONTROL REGISTER - - SETZ T1, - WRIO T1,@MTFC ;CLEAR FRAME COUNTER - - JRST @P ;RETURN - -MTRTRX:! SOJL P1,MTFAIL ;DONE ALL RETRIES ? - - JSP P,MTSRH ;NO, SETUP RH-11 - - MOVNI T1,1 - WRIO T1,@MTFC ;SET FRAME COUNT TO -1 - - MOVEI T1,MT.SR - WRIO T1,@MTCS1 ;BACKSPACE THE TAPE - - JSP P,MTRDY ;WAIT FOR TAPE TO STOP - - JRST RDMT ;NOW TRY AGAIN - -MTSERR:!MOVEI 17,MTHLT3 ;SET HALT ADDRESS - JRST .+5 - -MTBADR:!MOVEI 17,MTHLT0 ;SET HALT ADDRESS - JRST .+2 - -MTFAIL:!MOVEI 17,MTHLT1 ;SET HALT ADDRESS - SOS T3 ;POINT TO FAILING ENTRY - - SETZM 100 - MOVE (T3) - MOVEM 101 ;SAVE MEMORY PAGE ADDRESS - - MOVEM T3,102 ;SAVE SELECTION PICKUP POINTER - - RDIO @MTCS1 - MOVEM 103 ;SAVE CONTROL AND STATUS 1 - RDIO @MTCS2 - MOVEM 104 ;SAVE CONTROL AND STATUS 2 - RDIO @MTDS - MOVEM 105 ;SAVE DRIVE STATUS - RDIO @MTER - MOVEM 106 ;SAVE ERROR 1 - SETZ - MOVEM 107 ;NO ERROR 2 - SETZ - MOVEM 110 ;NO ERROR 3 - - RDIO @MTUBP0 - MOVEM 111 ;SAVE UBA PAGING RAM LOC 0 - RDIO @MTUBST - MOVEM 112 ;SAVE UBA STATUS REG - - MOVE MTVER - MOVEM 113 ;SAVE PRE-BOOT VERSION - - MOVE MTRHSV - MOVEM MSRH ;REINSTALL RH-11 BASE ADDRESS - MOVE MTDRSV - MOVEM MSDRIVE ;REINSTALL DRIVE NUMBER - MOVE MTSLSV - MOVEM MSSLAVE ;REINSTALL SLAVE NUMBER - MOVE MTKPAL - MOVEM KPALIVE ;REINSTALL KEEP-ALIVE - - JRST @17 ;HALT AT APPROPRIATE HALT - -RDMTDN:! AOS T3 - MOVE (T3) ;SETUP START ADDRESS - MOVEM 20 - - JSP P,MTSRH ;SETUP RH-11 - - MOVEI T1,MT.SF ;SPACE FORWARD OVER EOF MARKER - WRIO T1,@MTCS1 - - JSP P,MTRDY ;WAIT FOR TAPE TO STOP - TRNN T1,MTTM ;TAPE MARK DETECTED ? - JRST MTSERR ;NO, SPACE FORWARD ERROR - - MOVE MTRHSV - MOVEM MSRH ;REINSTALL RH-11 ADDRESS - MOVE MTDRSV - MOVEM MSDRIVE ;REINSTALL DRIVE NUMBER - MOVE MTSLSV - MOVEM MSSLAVE ;REINSTALL SLAVE NUMBER - MOVE MTKPAL - MOVEM KPALIVE ;REINSTALL KEEP-ALIVE - - WRUBR MTBLK7 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR MTBLK6 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR MTBLK5 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR MTBLK4 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR MTBLK3 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR MTBLK2 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR MTBLK1 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - WRUBR MTBLK0 - MOVSI 17,-17 - SETZM (17) ;ZERO AC'S - AOBJN 17,.-1 - SETZM 17 - - JRST @20 ;START BOOT - - -MTBLK7:! 1B0!7B8 ;WRUBR ARGUMENTS -MTBLK6:! 1B0!6B8 -MTBLK5:! 1B0!5B8 -MTBLK4:! 1B0!4B8 -MTBLK3:! 1B0!3B8 -MTBLK2:! 1B0!2B8 -MTBLK1:! 1B0!1B8 -MTBLK0:! 1B0!0B8 - -MTKPAL:! 0 ;KEEP-ALIVE & STATUS WORD -MTRHSV:! 0 ;RH-11 BASE ADDRESS -MTDRSV:! 0 ;DRIVE NUMBER -MTSLSV:! 0 ;SLAVE NUMBER - -MTVER:! MCNVER,,DECVER ;PRE-BOOT VERSION - -MTPNTR:! -^D16,,MTCS1 -MTCS1:! 0 -MTWC:! 0 -MTBA:! 0 -MTFC:! 0 -MTCS2:! 0 -MTDS:! 0 -MTER:! 0 -MTAS:! 0 -MTCC:! 0 -MTDB:! 0 -MTMR:! 0 -MTDT:! 0 -MTSN:! 0 -MTTC:! 0 -MTUBP0:! 0 ;ADDRESS OF FIRST WINDOW -MTUBST:! 0 ;ADDRESS OF UBA STATUS REGISTER - -MTPAG:! ;NEXT TWO INSTRUCTIONS MUST FOLLOW!!DO NOT MOVE - DEPHASE - -MTPAGD: BLOCK 100 -MTPAGX: 0 -SUBTTL COMMANDS -- TAKE - -TAKE: NOISE - HRROI T1,[ASCIZ "SMFILE"] - MOVEM T1,GTJFIL - HRROI T1,[ASCIZ "CMD"] - MOVEM T1,GTJEXT - SETZM GTJDEV - SETZM GTJDIR - MOVSI T1,(GJ%OLD) - MOVEM T1,GTJFLG - CMD [FLDDB.(.CMFIL)] - HRRZM T2,CMFILE - CONFIRM - - SKIPN MONTYP - JRST $CCL ;TOPS-10 - - HLRZ T1,CSB+.CMIOJ - CAIn T1,.PRIIN - jrst .+3 - CLOSF - ERR - HRRZ T1,CMFILE - MOVE T2,[7B5+OF%RD] - OPENF - ERR - HRLZ T1,T1 - HRRI T1,.NULIO - MOVEM T1,CSB+.CMIOJ - SKIPL ECOFLG - SETOM INTAKE - RTN -SUBTTL COMMAND SUBROUTINES -- DPYFLD - -OPDEF DPYNOF [GO $DPYNOF] - -$DPYNOF:PNTMSF [ASCIZ/%VALUE DID NOT FIT IN FIELD -/] - RET - -DPYFLD: MOVEI T1,ENDDPY - MOVEM T1,CZADR - MOVEM P,CZSP - PCRL2F - - MOVE T6,EXMADR - IMULI T6,3 - SKIPN BC1FLG - ADDI T6,CRAM - SKIPE BC1FLG - ADDI T6,CRMBC1 - -DPYCALL:PMSGF < CALL/> - LDB T2,[POINT 1,2(T6),26] - GO UPDFLD - JRST DPYCALL - DPB T2,[POINT 1,2(T6),26] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYJ: PMSGF < J/> - LDB T2,[POINT 12,2(T6),23] - GO UPDFLD - JRST DPYCALL - DPB T2,[POINT 12,2(T6),23] - LSH T2,-^D12 - JUMPE T2,.+2 - DPYNOF - -DPYNBR: PMSGF < #/> - LDB T2,[POINT 6,1(T6),35] - LSH T2,^D12 - LDB T1,[POINT 12,1(T6),23] - OR T2,T1 - GO UPDFLD - JRST DPYJ - DPB T2,[POINT 12,1(T6),23] - LSH T2,-^D12 - DPB T2,[POINT 6,1(T6),35] - LSH T2,-6 - JUMPE T2,.+2 - DPYNOF - -DPYALU: PMSGF < ALU/> - LDB T2,[POINT 3,(T6),2] - GO UPDFLD - JRST DPYNBR - DPB T2,[POINT 3,(T6),2] - LSH T2,-3 - JUMPE T2,.+2 - DPYNOF - - PMSGF -DPYLSRC:PMSGF < LSRC/> - LDB T2,[POINT 3,(T6),5] - GO UPDFLD - JRST DPYALU - DPB T2,[POINT 3,(T6),5] - LSH T2,-3 - JUMPE T2,.+2 - DPYNOF - -DPYRSRC:PMSGF < RSRC/> - LDB T2,[POINT 3,(T6),8] - GO UPDFLD - JRST DPYLSRC - DPB T2,[POINT 3,(T6),8] - LSH T2,-3 - JUMPE T2,.+2 - DPYNOF - -DPYDEST:PMSGF < DEST/> - LDB T2,[POINT 3,(T6),29] - GO UPDFLD - JRST DPYRSRC - DPB T2,[POINT 3,(T6),29] - LSH T2,-3 - JUMPE T2,.+2 - DPYNOF - - PMSGF -DPYA: PMSGF < A/> - LDB T2,[POINT 4,(T6),17] - GO UPDFLD - JRST DPYDEST - DPB T2,[POINT 4,(T6),17] - LSH T2,-4 - JUMPE T2,.+2 - DPYNOF - -DPYB: PMSGF < B/> - LDB T2,[POINT 4,(T6),23] - GO UPDFLD - JRST DPYA - DPB T2,[POINT 4,(T6),23] - LSH T2,-4 - JUMPE T2,.+2 - DPYNOF - - PMSGF -DPYRAM: PMSGF < RAMADR/> - LDB T2,[POINT 3,(T6),26] - GO UPDFLD - JRST DPYB - DPB T2,[POINT 3,(T6),26] - LSH T2,-3 - JUMPE T2,.+2 - DPYNOF - -DPYDBUS:PMSGF < DBUS/> - LDB T2,[POINT 2,(T6),13] - GO UPDFLD - JRST DPYRAM - DPB T2,[POINT 2,(T6),13] - LSH T2,-2 - JUMPE T2,.+2 - DPYNOF -DPYDBM: PMSGF < DBM/> - LDB T2,[POINT 3,(T6),11] - GO UPDFLD - JRST DPYDBUS - DPB T2,[POINT 3,(T6),11] - LSH T2,-3 - JUMPE T2,.+2 - DPYNOF - -DPYSPEC:PMSGF < SPEC/> - LDB T2,[POINT 3,2(T6),32] - LSH T2,3 - LDB T1,[POINT 3,1(T6),8] - OR T2,T1 - GO UPDFLD - JRST DPYDBM - DPB T2,[POINT 3,1(T6),8] - LSH T2,-3 - DPB T2,[POINT 3,2(T6),32] - LSH T2,-3 - JUMPE T2,.+2 - DPYNOF - -DPYDISP:PMSGF < DISP/> - LDB T2,[POINT 3,2(T6),35] - LSH T2,3 - LDB T1,[POINT 3,1(T6),5] - OR T2,T1 - GO UPDFLD - JRST DPYSPEC - DPB T2,[POINT 3,1(T6),5] - LSH T2,-3 - DPB T2,[POINT 3,2(T6),35] - LSH T2,-3 - JUMPE T2,.+2 - DPYNOF - -DPYSKIP:PMSGF < SKIP/> - LDB T2,[POINT 4,2(T6),29] - LSH T2,3 - LDB T1,[POINT 3,1(T6),11] - OR T2,T1 - GO UPDFLD - JRST DPYDISP - DPB T2,[POINT 3,1(T6),11] - LSH T2,-3 - DPB T2,[POINT 4,2(T6),29] - LSH T2,-4 - JUMPE T2,.+2 - DPYNOF -DPYT: PMSGF < T/> - LDB T2,[POINT 2,2(T6),25] - GO UPDFLD - JRST DPYSKIP - DPB T2,[POINT 2,2(T6),25] - LSH T2,-2 - JUMPE T2,.+2 - DPYNOF - -DPYCRY: PMSGF < CARRY IN/> - LDB T2,[POINT 1,1(T6),1] - GO UPDFLD - JRST DPYT - DPB T2,[POINT 1,1(T6),1] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYLSC: PMSGF < LOAD SC/> - LDB T2,[POINT 1,(T6),30] - GO UPDFLD - JRST DPYCRY - DPB T2,[POINT 1,(T6),30] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYLFE: PMSGF < LOAD FE/> - LDB T2,[POINT 1,(T6),31] - GO UPDFLD - JRST DPYLSC - DPB T2,[POINT 1,(T6),31] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF -DPYFMW: PMSGF < FM WRITE/> - LDB T2,[POINT 1,1(T6),24] - GO UPDFLD - JRST DPYLFE - DPB T2,[POINT 1,1(T6),24] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYMEM: PMSGF < MEM CYCLE/> - LDB T2,[POINT 1,1(T6),2] - GO UPDFLD - JRST DPYFMW - DPB T2,[POINT 1,1(T6),2] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYDIV: PMSGF < DIVIDE/> - LDB T2,[POINT 1,1(T6),28] - GO UPDFLD - JRST DPYMEM - DPB T2,[POINT 1,1(T6),28] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYMP: PMSGF < MULTI PREC/> - LDB T2,[POINT 1,1(T6),29] - GO UPDFLD - JRST DPYDIV - DPB T2,[POINT 1,1(T6),29] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYMS: PMSGF < MULTI SHIFT/> - LDB T2,[POINT 1,1(T6),25] - GO UPDFLD - JRST DPYMP - DPB T2,[POINT 1,1(T6),25] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - PMSGF -DPYCLL: PMSGF < DP CLOCK L/> - LDB T2,[POINT 1,(T6),18] - GO UPDFLD - JRST DPYMP - DPB T2,[POINT 1,(T6),18] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYGEL: PMSGF < PAR EN L/> - LDB T2,[POINT 1,1(T6),26] - GO UPDFLD - JRST DPYCLL - DPB T2,[POINT 1,1(T6),26] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYCHL: PMSGF < CHKL/> - LDB T2,[POINT 1,(T6),32] - GO UPDFLD - JRST DPYGEL - DPB T2,[POINT 1,(T6),32] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYCLR: PMSGF < DP CLOCK R/> - LDB T2,[POINT 1,(T6),19] - GO UPDFLD - JRST DPYCHL - DPB T2,[POINT 1,(T6),19] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF -DPYGER: PMSGF < PAR EN R/> - LDB T2,[POINT 1,1(T6),27] - GO UPDFLD - JRST DPYCLR - DPB T2,[POINT 1,1(T6),27] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYCHR: PMSGF < CHKR/> - LDB T2,[POINT 1,(T6),33] - GO UPDFLD - JRST DPYGER - DPB T2,[POINT 1,(T6),33] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -DPYMK: PMSGF < MARK/> - LDB T2,[POINT 1,(T6),35] - GO UPDFLD - JRST DPYCHR - DPB T2,[POINT 1,(T6),35] - LSH T2,-1 - JUMPE T2,.+2 - DPYNOF - -ENDDPY: SETZM CZADR - MOVE P,CZSP - MOVEM T6,CRAMT6 - - MOVE T1,2(T6) ;RECREATE SHUFFLE FORMAT - MOVE T2,1(T6) ;MICROCODE WORD - ROTC T1,^D12 - MOVEM T1,AC10 - - MOVE T1,(T6) - MOVE T2,1(T6) - ROTC T1,^D12 - MOVEM T2,AC11 - - MOVE AC12,(T6) - LSH AC12,^D12 - - SETZ T1, - DPB T1,PB.CRA ;CLEAR PRESENT PARITY BITS - DPB T1,PB.CRM - - GO KSXX ;COMPUTE PARITY & RESTORE - - RTN -SUBTTL COMMAND SUBROUTINES -- UPDFLD - -;*SUBROUTINE TO GET NEW VALUE FOR FIELD -;*CALL WITH: -;* T2/ OLD VALUE -;* GO UPDFLD -;* HERE IF "^" (UPARROW), BACKUP ONE FIELD -;* HERE WITH NEW VALUE IN T2 - -UPDFLD: MOVE T2 - PNTOCf - SKIPN DEPFLG - RETSKP - MOVEM T2,VALUE# - PTAB - SKIPN MONTYP - JRST UPDFL1 - HLRZ T1,CSB+.CMIOJ - BIN - CAIN T2,15 - JRST GTFLD1 - CAIN T2,"^" - JRST CRPOPJ ;UPARROW - BKJFN ;BACKUP INPUT POINTER 1 BYTE - ERR -UPFLD2: HLRZ T1,CSB+.CMIOJ - MOVEI T3,10 - NIN - JRST [PNTMSF [ASCIZ/ -TRY AGAIN: /] - JRST UPFLD2] - AOS (P) - RTN - -GTFLD1: BIN - CAIE T2,12 - ERR - MOVE T2,VALUE - AOS (P) - RTN - -CRPOPJ: PCRLF - RTN - -UPDFL1: TTIOCT - JRST UPDFL3 - SKIPN TTNBRF - JRST UPDFL2 - MOVE T2,0 - MOVE 0,$CHRIN - CAIE 0,15 - JRST [PNTMSF [ASCIZ/ -TRY AGAIN: /] - JRST UPDFL1] - AOS (P) - RTN - -UPDFL2: MOVE 0,$CHRIN - CAIE 0,15 - JRST UPDFL4 - MOVE T2,VALUE - AOS (P) - RTN - -UPDFL3: CAIN 0,"^" - JRST CRPOPJ - CAIN 0,"Z"-100 - JRST UPDFL5 - -UPDFL4: PNTMSF [ASCIZ/ -TRY AGAIN: /] - JRST UPDFL1 - -UPDFL5: PCRLF - JRST ENDDPY -SUBTTL DISPLAY CRAM BY FIELD BREAKDOWN -- CRMFLD - -CRMFLD: PNTMSF [ASCIZ % - -C J # ALU S/D A/B RBM SPEC DISP SKIP T C SC FE FM MC DV MP C/LR M -%] - LDB [POINT 1,2(T6),26] - MOVEM CFCALL - PNT1F ;PRINT "CALL" - PSPACE - - LDB [POINT 12,2(T6),23] - MOVEM CFJ - PNT4F ;PRINT "J" - PSPACE - - LDB [POINT 6,1(T6),35] - LSH ^D12 - LDB T1,[POINT 12,1(T6),23] - OR T1 - MOVEM CFNBR - PNT6F ;PRINT "#" - PSPACE - - LDB [POINT 3,(T6),2] - MOVEM CFALU - PNT1F ;PRINT "ALU" - PSPACE - - LDB [POINT 3,(T6),5] - LSH 3 ;"LSRC" - LDB T1,[POINT 3,(T6),8] - OR T1 - LSH 3 ;"RSRC" - LDB T1,[POINT 3,(T6),29] - OR T1 ;"DEST" - MOVEM CFSD - PNT3F ;PRINT "S/D" - PSPACE - LDB [POINT 4,(T6),17] - LSH 6 ;"A" - LDB T1,[POINT 4,(T6),23] - OR T1 ;"B" - MOVEM CFAB - PNT4F ;PRINT "A/B" - PSPACE - - LDB [POINT 3,(T6),26] - LSH 3 ;PRINT "R" - LDB T1,[POINT 2,(T6),13] - OR T1 ;PRINT "B" - LSH 3 - LDB T1,[POINT 3,(T6),11] - OR T1 ;PRINT "M" - MOVEM CFRBM - PNT3F ;PRINT "RBM" - PSPACE - PSPACE - PSPACE - - LDB [POINT 3,2(T6),32] - LSH 3 - LDB T1,[POINT 3,1(T6),8] - OR T1 - MOVEM CFSPEC - PNT2F ;PRINT "SPEC" - PSPACE - PSPACE - PSPACE - - LDB [POINT 3,2(T6),35] - LSH 3 - LDB T1,[POINT 3,1(T6),5] - OR T1 - MOVEM CFDISP - PNT2F ;PRINT "DISP" - PSPACE - PSPACE - PSPACE - LDB [POINT 3,2(T6),29] - LSH 3 - LDB T1,[POINT 3,1(T6),11] - OR T1 - MOVEM CFSKIP - PNT2F ;PRINT "SKIP" - PSPACE - - LDB [POINT 2,2(T6),25] - MOVEM CFT - PNT1F ;PRINT "T" - PSPACE - - LDB [POINT 1,1(T6),1] - MOVEM CFC - PNT1F ;PRINT "C" - PSPACE - PSPACE - - LDB [POINT 1,(T6),30] - MOVEM CFSC - PNT1F ;PRINT "SC" - PSPACE - PSPACE - LDB [POINT 1,(T6),31] - MOVEM CFFE - PNT1F ;PRINT "FE" - PSPACE - PSPACE - - LDB [POINT 1,1(T6),24] - MOVEM CFFM - PNT1F ;PRINT "FM" - PSPACE - PSPACE - - LDB [POINT 1,1(T6),2] - MOVEM CFMC - PNT1F ;PRINT "MC" - PSPACE - PSPACE - - LDB [POINT 1,1(T6),28] - MOVEM CFDV - PNT1F ;PRINT "DV" - PSPACE - PSPACE - - LDB [POINT 1,1(T6),29] - LSH 1 - LDB T1,[POINT 1,1(T6),25] - OR T1 - MOVEM CFMP - PNT1F ;PRINT "MP" - PSPACE - PSPACE - - LDB [POINT 1,(T6),18] - LSH 1 ;"CLKL" - LDB T1,[POINT 1,1(T6),26] - OR T1 ;"GENL" - LSH 1 - LDB T1,[POINT 1,(T6),32] - OR T1 ;"CHKL" - MOVEM CFCL - PNT1F ;PRINT "CL" - PSPACE - - LDB [POINT 1,(T6),19] - LSH 1 ;"CLKR" - LDB T1,[POINT 1,1(T6),27] - OR T1 ;"GENR" - LSH 1 - LDB T1,[POINT 1,(T6),33] - OR T1 ;"CHKR" - MOVEM CFCR - PNT1F ;PRINT "CR" - PSPACE - - LDB [POINT 1,(T6),35] - MOVEM CFMARK - PNT1F ;PRINT "M" - - PCRLF - RET -SUBTTL MISCELLANEOUS ROUTINES - -INTCOR: SKIPE IC1TIM# - JRST INTCR1 - - MOVSI T1,400000+<^D31*^D512>-1 - CORE T1, - ERR - - SETZM ;MAKE IT WRITABLE - SETUWP - ERR - - SETZM 400000 - MOVE T1,[400000,,400001] - BLT T1,400000+<^D31*^D512>-1 - SETOM IC1TIM - RTN - -INTCR1: SETZM ;MAKE IT WRITABLE - SETUWP - ERR - RTN - -CONCIN: MOVEI CCBLK ;SETUP ^C INTERRUPT BLOCK - MOVEM 134 - SETZM CCBLK+2 - RTN - -CCINT: SETSTS 16,0 ;RESET TTY - HLRZ CCBLK+3 ;GET INTERRUPT REASON - CAIE 2 ;^C ? - HALT . - EXIT - -RTTY= SETSTS 16,0 ;RESET TTY -STTY= SETSTS 16,700 ;SET TTY, IO.LEM+IO.SUP+IO.TEC,+.IOASC -SUBTTL PSI LOGIC -- LEVTAB & CHNTAB - -LEVTAB: LEV1PC - LEV2PC - LEV3PC - -LFLVTB: LF1PC - LF2PC - LF3PC - -CHNTAB: 0 ;00 UNUSED - 0 ;01 UNUSED - 0 ;02 UNUSED - 0 ;03 UNUSED - 0 ;04 UNUSED - 0 ;05 UNUSED - 0 ;06 ARITHMETIC OVERFLOW - 0 ;07 FLOATING POINT OVERFLOW - 0 ;08 RESERVED - 0 ;09 PDL OV - 0 ;10 END OF FILE - 0 ;11 DATA ERROR - 0 ;12 RESERVED - 0 ;13 RESERVED - 0 ;14 RESERVED - 0 ;15 ILLEGAL INSTRUCTION - 0 ;16 ILLEGAL MEMORY READ - 0 ;17 ILLEGAL MEMORY WRITE - 0 ;18 RESERVED - 2,,FRKERR ;19 INFERIOR PROCESS TERMINATION - 0 ;20 SYSTEM RESOURCES EXHAUSTED - 0 ;21 RESERVED - 0 ;22 NON-X-PAGE - 0 ;23 UNUSED - 0 ;24 UNUSED - 0 ;25 UNUSED - 0 ;26 UNUSED - 0 ;27 UNUSED - 0 ;28 UNUSED - 0 ;29 UNUSED - 1,,CTLX ;30 CONTROL-X - 1,,CTLC ;31 CONTROL-C - 1,,CTLZ ;32 CONTROL-Z - 1,,CTLT ;33 CONTROL-T - 1,,ctlo ;34 control-o - 0 ;35 UNUSED -SUBTTL PSI LOGIC -- CONTROL-C AND CONTROL-X - -;*HERE ON A CONTROL-C INTERRUPT - -CTLC: MOVE [1B5+.+3] - MOVEM LEV1PC - DEBRK - HALTF ;EXIT TO MONITOR - JRST START - -;*HERE ON CONTROL-X INTERRUPT - -CTLX: TMSG < -ABORTED -> - MOVE T1,[1B5+REEN] ;WHERE TO GO - MOVEM T1,LEV1PC ;STORE IT - DEBRK ;GO REENTER - JRST REEN ;INTERNAL CONFUSION - -;*HERE ON CONTROL-Z INTERRUPT - -CTLZ: SKIPN CZADR - DEBRK - PUSH P,T1 - MOVE T1,CZADR - TLO T1,(1B5) - MOVEM T1,LEV1PC - POP P,T1 - DEBRK - -;*HERE ON A CONTROL-T INTERRUPT - -CTLT: SKIPN CTADR - DEBRK - SAVEAC - GO @CTADR - RESTAC - DEBRK -;*here on control-o interrupt - -ctlo: SETCMM NOTYPE# - debrk - -;**PSI LOGIC -- FORK TERMINATION - -;*HERE WHEN A FORK TERMINATES -FRKERR: put t1 - hrrz t1,lev2pc - cain t1,pushpc - jrst [getit t1 - debrk] - MOVEI T1,.PRIOU - DOBE - CFIBF - TMSG < -?UNEXPECTED INFERIOR PROCESS TERMINATION -PROGRAM RESTARTING... -> - JRST START - -SUBTTL PSI LOGIC -- CONTROL T - -RDULDT: TMSG < -READING CRAM ADDRESS - > - MOVE T2,RDULT6 - MOVEI T1,.PRIOU - MOVEI T3,^D8 - NOUT - ERR - TMSG < -> - RTN - - -PARSET: HRROI T1,[ASCIZ " -WAITING FOR A COMMAND -SMFILE>"] - PSOUT - RTN -SUBTTL STORAGE -- PRESERVED - - XLIST ;LITERAL POOL -L: LIT -ENDLIT: - LIST ;LITERAL POOL - -;*COMMAND STATUS BLOCK FOR COMND JSYS -CSB: PARSE - .PRIIN,,.PRIOU - -1,,PROMPT - -1,,CMDBUF - -1,,CMDBUF - ^D250 - 0 - -1,,ATOM - ^D250 - GTJFNB - -GTJFNB: -GTJFLG: EXP GJ%OLD - .PRIIN,,.PRIOU -GTJDEV: 0 -GTJDIR: -1,,[ASCIZ "SMFILE"] -GTJFIL: -1,,[ASCIZ "DECSYSTEM-2020"] -GTJEXT: -1,,[ASCIZ "RAM"] - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - -CMDBUF: BLOCK ^D50 -ATOM: BLOCK ^D50 -DEBUGF: 0 ;0 = PRODUCTION, -1 = DEBUG -PARFLG: 0 ;EVEN/ODD CRAM PARITY SWITCH -LOGFLG: 0 ;-1 = LOG, 0 = NO LOG -RDFLAG: BLOCK 1 ;INDICATES MICROCODE READ IN -ECOFLG: -1 ;-1=ECHO, 0=DON'T ECHO TAKE FILES - -LOGNAM: SIXBIT/SMFILE/ ;LOG FILE NAME & EXT -LOGEXT: SIXBIT/LOG/ -SUBTTL COMMAND PROCESSOR - - LALL - -$PNAME: PGMNAM -$PVER: MCNVER,,DECVER - -PGMNAM: ASCIZ % -DECSYSTEM 2020 DIAGNOSTICS FE-FILE PROGRAM -% - -REENTR: DROPDV ;CLOSE LOG FILE - SKIPE MONTYP - JRST REEN20 - CALLI 0 - CALLI 12 - -REEN20: RESET - HALTF - JRST START -SUBTTL MAIN SUBROUTINE PACKAGE CONTROL - -S -;*INITIALIZE THE SUBROUTINE PACKAGE -S - -SUBRTN: SIXBIT/SUBRTN/ ;"SUBRTN" IDENTIFICATION WORD -SUBVER: MCNVER,,DECVER ;"SUBRTN" VERSION INFORMATION -PNTNAM: SIXBIT/SMFILE/ -PNTEXT: SIXBIT/LOG/ - -S -;*CONTRL* SUBROUTINE PACKAGE INITIALIZATION -S - -SBINIT: -$PGMIN: MOVEM 0,$$PAC0 - SETOM USER - JSP 0,.+1 ;LOAD FLAGS INTO AC0 - TLNN 0,USERF ;USER MODE ? - HALT . ;EXEC MODE - SETZM MONTYP - MOVE [112,,11] - GETTAB ;GET MONITOR TYPE ID - CAM - CAIN 40000 ;TOPS20 ? - SETOM MONTYP ;YES -S -;*INITIALIZE PROCESSOR FLAGS AND PUSH LIST -S - -$PGMN1: HLRZ JOBSA ;RESET JOB FIRST FREE TO - MOVEM JOBFF ;END OF LOW SEGMENT - SKIPN MONTYP - CALLI 0 ;TOPS10 RESET - SKIPE MONTYP - RESET ;CLEAR USER I/O - JRST 2,@.+1 ;CLEAR PC FLAGS - 0,,.+1 - MOVE CONSW - MOVEM $SVCSW# ;SAVE PREVIOUS SWITCHES - SETZM CONSW# ;CLEAR SWITCH REGISTER - SETZM $SWFLG# ;DISALLOW SWITCHES TILL INITED - MOVE P,PLIST ;INIT PUSH POINTER - -S -;*INITIALIZE SUBROUTINES -S - -PGINGO: GO $CPUTP ;DETERMINE CPU TYPE (KL/KI/KA) - GO $UUOIN ;INIT UUO TRAP TRANSFER LOCATION - GO $PNTIN ;INIT PRINT SUBROUTINE - GO $TYPIN ;INIT TTY INPUT SUBROUTINE - SETOM $ONETM ;SET ONE TIME FLAG - JRST @$$PAC0# -SUBTTL UUO HANDLING SUBROUTINE - -S -;*UUO INITIALIZATION -S - -$UUOIN: MOVE [GO $UORTN] ;BRING IN UUORTN ENTRY INSTR. - MOVEM JOB41 ;SETUP UUO TRAP AT JOB41 - MOVE [JRST $UOERX] - MOVEM $UUOER ;SET UUO ERROR IN "FIXED" - SETZM $UPLER# - RTN ;EXIT - -;*$UORTN - UUO PROCESSING - -$UORTN: PUT AC0 ;SAVE AC0 ON PUSH LIST - MOVE AC0,JOBUUO ;GET THE UUO - LSH AC0,-^D27 ;ISOLATE INSTRUCTION FIELD FOR UUO (RT 27 PLACES) - CAILE AC0,36 ;IS IT 36 OR LESS? (LOW) - JRST $SUBUO ;DECODE 37 @ $SUBUO -$USRUO: MOVE AC0,-1(P) ;GET USRPC + 1 (AC0 IS ALSO ON THE STACK) - SUBI 1 ; - 1 - MOVEM $SVUPC ;SAVE FOR USER UUO ROUTINE (IF NEEDED) - MOVE AC0,JOBUUO ;GET UUO FROM LOCATION 40 IN JDA - MOVEM $SVUUO ;SAVE FOR USER UUO ROUTINE - MOVE AC0,$SVUUO - LSH AC0,-^D27 ;RIGHT SHIFT FOR INDEX INTO UUO TABLE - PUT 1 - LSHC 0,-1 - ADDI UUODIS ;ADD USER UUO TABLE START TO THE UUO -$XUUO: TLNN 1,400000 - HRRZ @0 ;EVEN UUO - TLNE 1,400000 - HLRZ @0 ;ODD UUO - GETIT 1 - EXCH AC0,(P) ;PUT ADR ON STACK, AC0 BACK IN AC0 - RTN ;SPECIAL XFER TO ROUTINE USING ADR ON STACK - -$SUBUO: SUBI AC0,37 ;NORMALIZE TO MAKE LOWEST UUO = 0 - ADDI AC0,TABLE0 ;ADDR OF TABLE + NORM. UUO (0-3) - JRST @0 ;SELECT THE CORRECT ERROR UUO VIA TABLE - -TABLE0: JRST $UUO37 ;UUO = 37 .......DECODE SUBROUTINE UUO - -S -;*UUO ERROR EXIT ROUTINE -S - SALL - - GETIT AC0 ;POP OFF AC0 (KA MUUO'S) -$UOERX: PUT JOBUUO ;SAVE BAD UUO WHILE PRINTING VIA AC0 (P + 1) - PMSG <^ILLEGAL UUO^UUO]]FLAGS] PC^> - GETIT AC0 ;GET BAD UUO FROM THE STACK (P - 1) - PNTHW ;PRINT IT - PSP ;PRINT SPACE - GETIT AC0 ;GET FLAGS & UUO PC + 1 FROM STACK (P - 1) - SUBI AC0,1 ;SUBTRACT 1 - PNTHW ;PRINT FLAGS & UUO PC - PCRL ;PRINT C/R & L/F - FATAL - - LALL -S -;*DECODE ROUTINE FOR SUBROUTINE UUO'S (037) -S - -$UUO37: HRRZ JOBUUO ;GET CALLING UUO - JUMPE $PNTIT ;PRINT UUO - CAIN 0,1 - JRST $PNTIF ;PRINT FORCED UUO - TRNE 777600 - JRST $EG177 ;PRINT MESSAGE UUO - CAIL 5 - JRST $EG4 ;PRINT CHAR IMMEDIATE UUO - PUT 1 - MOVE 1,JOBUUO - LSH 1,-^D23 ;EXTRACT UUO AC FIELD - ANDI 1,17 - LSH 0,4 ;POSITION E FIELD - IOR 0,1 ;COMBINE E & AC FIELD - LSHC 0,-1 ;SET ODD/EVEN - ADDI $UOTAB-20 ;COMPUTE TABLE ENTRY OFFSET - JRST $XUUO - -$UOTAB: ;E FIELD = 2 - $PTSXF,,$PNTSX - $UOERX,,$UOERX - $DRPDV,,$PNTNM - $UOERX,,$UOERX - $UOERX,,$UOERX - $UOERX,,$UOERX - $UOERX,,$UOERX - $UOERX,,$UOERX - ;E FIELD = 3 - $YESNO,,$OPTLK - $TPOCT,,$NOYES - $TPCNV,,$TPDEC - $TALTM,,$TTLK - $TTYIN,,$TISIX - $UOERX,,$TPCLR - $PSIXF,,$PSIX - $POCSF,,$POCS - ;E FIELD = 4 - $UOERX,,$UOERX - $UOERX,,$UOERX - $UOERX,,$UOERX - $UOERX,,$UOERX - $UOERX,,$UOERX - $UOERX,,$END - $FATAL,,$ERHLT - $UOERX,,$EOP - -$EG4: MOVE JOBUUO ;IMMEDIATE CHARACTER PRINT - TLNE (1B12) - JRST [PNTCHF - JRST $EGX] - PNTCHR - JRST $EGX - -$EG177: MOVE JOBUUO ;IMMEDIATE MESSAGE PRINT - TLNE (4B12) - JRST [PSIXLF - JRST $EGX] - TLNE (2B12) - JRST [PSIXL - JRST $EGX] - TLNE (1B12) - JRST [PNTALF - JRST $EGX] - PNTAL -$EGX: GETIT 0 - RTN - -SUBTTL PROCESSOR TYPE DETERMINATION -S - -$CPUTP: SETZM CYCL60# - SETZM SM10 - SETZM KLFLG - SETZM KAIFLG -$CPKL: SETZ 1, ;IF KL10, AC1 AFTER BLT WILL CHANGE - BLT 1,0 ;Copy 1 word from 0 to 0 - SKIPN 1 ;on KL10, BLT will change AC - JRST $CPKAI - SETOM KLFLG ;KL10 - SET FLAG - -$CPINI: SKIPN MONTYP - JRST .+5 ;TOPS-10 - MOVE 1,[SIXBIT/APRID/] - SYSGT ;GET SERIAL NUMBER - MOVE 0,1 - JRST .+4 - MOVE 0,[20,,11] - GETTAB - SETZ 0, - MOVEM 0,$$SNX# ;SAVE IT - SKIPN KLFLG - RTN - CAILE 0,^D4096 ;IS THIS A KS10 ? - SETOM SM10 ;YES, SERIAL # GT 4096. - RTN - -$CPKAI: SETOM KAIFLG - MOVNI 0,1 - AOBJN 0,.+1 - SKIPE - SETZM KAIFLG ;KA10 - - JRST $CPINI -SUBTTL PROGRAM HALTS - -;*SUBROUTINE ERROR HALT -S - SALL - -$ERHLT: PNTNM ;PRINT PROGRAM NAME - PMSGF - GETIT $ERH0 - PUT 0 - MOVE AC0,$ERH0# ;LOAD HALT LOC WITH USRPC + 1 FOR RESTART - SOS ;SUBTRACT ONE FOR USRPC OF ERROR - PNT6F ;PRINT USRPC FORCED - PCRLF - -$ERHL4: GETIT AC0 - SKIPE MONTYP - JRST .+3 - CALLI 1,12 - JRST @$ERH0 - HALTF ;RETURN TO MONITOR - JRST @$ERH0 ;IF CONTINUED - LALL - -;*FATAL PROGRAM ERROR HALT -S - SALL - -$FATAL: PNTNM - PMSGF - MOVE AC0,(P) ;RETRIEVE USRPC + 1 FROM THE STACK - SOS ;- 1 - PNT6F ;PRINT IT - PCRLF - JRST $EOP ;END PROGRAM - LALL -SUBTTL PROGRAM NAME PRINTER - -;*PRINT PROGRAM NAME IF NOT STAND-ALONE OR USER MODE -S - SALL -$PNTNM: SKIPL MONCTL ;DIAG MON / SYS EXR ? - JRST $PNM2 ;NO - PNTMSG @$PNAME ;PRINT PROGRAM NAME - PMSG - HLRZ JOBVER - PNTOCS ;PRINT MCN LEVEL - PNTCI "." - HRRZ JOBVER - PNTOCS ;PRINT DEC VERSION - SKIPN MONTYP - PMSG <, TOPS-10> - SKIPE MONTYP - PMSG <, TOPS-20> - - SKIPE KLFLG - JRST [SKIPE SM10 - JRST [PMSG <, KS10> - JRST $PNM3] - PMSG <, KL10> - JRST $PNM3] - SKIPN KAIFLG - JRST [PMSG <, KA10> - JRST $PNM3] - PMSG <, KI10> - -$PNM3: SKIPN $$SNX - JRST $PNM2 - PMSG <, CPU#=> - MOVE $$SNX - PNTDEC - -$PNM2: PCRL - RTN ;EXIT - - LALL -SUBTTL *SUBRTN* END OF PASS/END OF PROGRAM ROUTINES - LALL -;*END OF PASS ROUTINE -S - SALL -$END: AOS PASCNT ;INCREMENT PASS COUNTER - SOS ITRCNT -$END2: PMSGF - MOVE PASCNT ;PRINT END OF PASS COUNT - PNTDCF - PNTCIF "." - PCRLF -$END3: AOS (P) - RTN - LALL - -;*END OF PROGRAM ROUTINE -S - -$EOP: SKIPN MONTYP - CALLI 12 - HALTF ;YES, EXIT - JRST START - LALL -SUBTTL *SUBRTN* TELETYPE INPUT ROUTINES - -S -;*CARRIAGE RETURN OR COMMA TERMINATES OCTAL, DECIMAL, OR CONVERT TYPE-IN. -;*CHARACTER OR NUMBER RETURNED IN AC0. -;*CALL SEQUENCE IS AS FOLLOWS: -;* NAME -;* NO/ERROR RESPONSE RETURN (+ 1) -;* NORMAL RESPONSE RETURN (+ 2) -;*$OPTLK = INPUT ANY CHARACTER -;*$YESNO = ASK QUESTION, CORRECT RESPONSE Y -;*$NOYES = ASK QUESTION, CORRECT RESPONSE N -;*$TPOCT = INPUT UP TO 12 OCTALS -;*$TPDEC = INPUT UP TO 11 DECIMALS -;*$TPCNV = INPUT UP TO 9 CONVERT'S -;*$TTLK = KEYBOARD CHECK, INPUT ANY CHARACTER (NO WAIT) -;*$TALTM = KEYBOARD, ALT-MODE CHECK -;*$TISIX = INPUT UP TO 6 SIXBIT CHARACTERS -S - -;*TELETYPE INPUT INITIALIZATION -S -$TYPIN: SETZM INUPTR ;CLEAR INPUT POINTER - RTN ;NO TYPE-IN AVAILABLE - -S -;*CHECKS FOR ANY KEY STRUCK, RETURNS IMMEDIATELY -;*RETURNS +1 IF NO TYPEIN, RETURNS +2 IF CHAR TYPED -S - -$TTLK: SETZ AC0, - SKIPGE MONCTL ;NO CHECK IF "MONITOR" - RTN - SKIPE MONTYP - JRST .+4 - INCHRS $TTCHR ;TOPS10 INPUT CHAR AND SKIP - RTN ;NONE AVAILABLE - JRST $HEAR4 ;GO PROCESS - PUT 1 - PUT 2 - MOVEI 1,.PRIIN - SIBE ;ANY INPUT AVAILABLE ? - JRST .+4 ;YES - GETIT 2 - GETIT 1 - RTN - PBIN ;GET INPUT CHAR - MOVEM 1,$TTCHR - GETIT 2 - GETIT 1 - JRST $HEAR4 ;CHAR TYPED, GO PROCESS -S -;*TELETYPE IMAGE MODE INPUT -;*PROVIDES UNBUFFERED MODE INPUT -;*WAITS FOREVER, RETURN WITH CHAR UPPER CASED & ECHOED -S - -$TTYIN: SKIPE MONTYP - JRST .+3 - INCHRW ;TOPS10 INPUT CHAR AND WAIT - JRST .+5 - PUT 1 - PBIN - MOVEM 1,$TTCHR - GETIT 1 - GO $HEAR4 ;PROCESS IT - JRST .-1 - RTN - -$OPTLK: MOVEM 4,$TACB4# - GO $HEAR - JRST .-1 - AOS (P) - MOVEI 4,1 - MOVEM 4,$TWCNT ;INDICATE NO TIMEOUT - MOVE 4,$TACB4 - RTN - -S -;*TELETYPE ALT-MODE CHECK ROUTINE -S - -$TALTM: GO $TTLK - RTN ;NO TYPE-IN ...EXIT - -$TALT2: CAIE 175 - CAIN 176 - JRST $TALT1 ;ALT-MODE WAS TYPED - CAIE 33 - JRST .+2 ;NO ALT-MODE - -$TALT1: JRST CPOPJ1 ;ALT-MODE, RETURN +2 - - RTN -S -;*TELETYPE INPUT CHARACTER -S - -$HEAR: SKIPE MONTYP - JRST .+3 -$$$TT0: INCHWL $TTCHR ;TOPS10 INPUT CHAR LINE MODE - JRST $HEAR4 - SKIPN INUPTR ;ANY INPUT POINTER ? - JRST .+5 ;NO, INPUT CLEARED - ILDB 0,INUPTR ;GET CHAR FROM STORE - JUMPE 0,.+3 ;USED IT ALL, GET NEW INPUT - MOVEM 0,$TTCHR ;SAVE IT - JRST $HEAR4 ;GO PROCESS - - PUT 1 - PUT 2 - PUT 3 - MOVE 1,[POINT 7,D$ISTR] - MOVEM 1,INUPTR# ;SETUP INPUT POINTER - MOVE 2,[RD%BRK!RD%TOP!^D132] - SETZ 3, - - RDTTY ;GET TTY INPUT FROM MONITOR - JRST T20ERR - - GETIT 3 - GETIT 2 - GETIT 1 - JRST $HEAR ;NOW GO PROCESS - -$TPCLR: PUT 1 - SETZM INUPTR ;CLEAR INPUT POINTER - MOVEI 1,.PRIIN - SKIPN MONTYP - CLRBFI ;TOPS10 CLEAR BUFFER - SKIPE MONTYP - CFIBF ;ERROR, CLEAR TYPE-IN BUFFER - GETIT 1 - RTN -S -;*CHARACTER PROCESSING ROUTINE FOR INPUT -;*CHARACTER RETURNED IN AC0 IS UPPER CASE -;*ACTUAL CHARACTER IS IN $TTCHR -S - -$HEAR4: MOVE 0,$TTCHR ;GET ACTUAL CHARACTER - ANDI 0,177 ;CLEAR PARITY BIT - CAIL 0,"A"+40 ;CONVERT TO UPPER CASE - CAILE 0,"Z"+40 - JRST .+2 - SUBI 0,40 - MOVEM 0,$CHRIN# ;SAVE CHARACTER - CAIE 0,15 ;IS IT CR ? - JRST $HEAR3 ;NO - SETZM $CARCT ;CLEAR CHARACTER COUNTER - SKIPN MONTYP -$$$TT1: INCHRW ;TOPS10 FLUSH LF - SKIPE MONTYP - IBP INUPTR ;GET RID OF LF - MOVE 0,CONSW - TLNN 0,PNTLPT ;LPT/LOGICAL DEVICE OUTPUT ? - JRST $HEAR2 ;NO - PCRL ;YES-ADD CRLF -$HEAR2: MOVE 0,$CHRIN ;PUT INPUT CHAR IN AC0 - AOS (P) ;SKIP RETURN +2 - RTN ;NORMAL RETURN +1 - -$HEAR3: MOVE 0,CONSW ;GET DATA SWITCHES - TLNN 0,PNTLPT ;PRINT ON LPT? - JRST $HEAR2 ;NO-EXIT - MOVE 0,$CHRIN ;YES - PNTCHR ;SEND CHAR TO LPT/LOGICAL DEV - JRST $HEAR2 ;EXIT -SUBTTL *SUBRTN* TELETYPE YES/NO TYPE-IN ROUTINE - -S -;*ACCEPTS Y OR N -;*FOR YESNO, Y IS SKIP RETURN, N OR NO RESPONSE IS DIRECT RETURN -;*FOR NOYES, N IS SKIP RETURN, Y OR NO RESPONSE IS DIRECT RETURN -;*'Y OR N - ' ASKED UPON ENTRY -S - -$NOYES: MOVEI 0,1 ;INIT FOR N ANSWER - JRST .+2 -$YESNO: MOVEI 0,0 ;INIT FOR Y ANSWER - MOVEM 1,$TACC1# ;SAVE AC'S - MOVEM 2,$TACC2# - MOVE 2,0 - -$YN1: PMSGF < Y OR N - > - GO $OPTLK - JRST $YN2 ;NO RESPONSE - CAIE 0,"Y" ;IS IT A 'Y' ? - CAIN 0,"N" ;OR AN 'N' ? - JRST .+2 ;YES - JRST $YN3 ;NEITHER, ERROR - MOVE 1,0 - LSH 1,7 ;POSITION 1ST CHAR - GO $OPTLK - JRST $YN2 ;NO RESPONSE - OR 1,0 ;MERGE 2ND CHAR - CAMN 1,$YN4(2) ;COMPARE FOR REQUESTED - JRST .+4 ;YES, RETURN +2 - CAMN 1,$YN4+1(2) ;COMPARE FOR OPPOSITE - JRST .+3 ;YES, RETURN +1 - JRST $YN3 ;ERROR, REPEAT - AOS (P) ;YES, RETURN +2 -$YN2: MOVE 2,$TACC2 ;RESTORE AC2 - MOVE 0,1 - MOVE 1,$TACC1 ;RESTORE AC1 - RTN ;RETURN +1 - -$YN3: PCRLF - GO $TPCLR ;CLEAR INPUT - JRST $YN1 - -$YN4: EXP 26215 ;'Y' (CR) - EXP 23415 ;'N' (CR) - EXP 26215 ;'Y' (CR) -SUBTTL *SUBRTN* TELETYPE OCTAL-DECIMAL-CONVERT TYPE-IN ROUTINE - -S -;*ACCEPTS 0 TO 12 OCTALS, 0 TO 11 DECIMALS, 0 TO 9 CONVERT CHARACTERS -;*NUMBER RETURNED IN AC0. -S - -$TPCNV: MOVEI AC0,2 ;SET INDEX TO CONVERT - JRST $TPCV1 -$TPDEC: MOVEI AC0,1 ;SET INDEX TO DECIMAL - JRST $TPCV1 -$TPOCT: MOVEI AC0,0 ;SET INDEX TO OCTAL - -$TPCV1: MOVEM 1,$TACD1# ;SAVE AC'S 1-3 - MOVEM 2,$TACD2# - MOVEM 3,$TACD3# - MOVE 3,0 ;LOAD AC3 WITH THE INDEX - SETZB 1,2 ;CLEAR DATA REG, CHAR COUNTER - SETZM $TYPNB# ;CLEAR ERR NUMBER - SETZM $NEGF# ;CLEAR NEGATE FLAG - SETZM $CNVD# ;CLEAR DECIMAL CONVERT FLAG - SETZM TTNBRF ;CLEAR DIGIT TYPED FLAG - - -;*INPUT AND COMPUTE NUMBER -S - -$TYPLP: GO $OPTLK - JRST $TPERR ;NO RESPONSE, GO TO ERROR EXIT - CAIN 0,"-" ;IS IT MINUS ? - JRST $NEGX ;YES - CAIN 0,"." ;IS IT PERIOD ? - JRST $CNVX ;YES - CAIN 0,15 ;IS IT CR ? - JRST $TPEXT ;YES - CAIN 0,"," ;IS IT COMMA ? - JRST $TPEXT ;YES - CAIL 0,"0" ;A VALID DIGIT ? - XCT $TPCK(3) ;YES - JRST $TPERR ;NO ...ERROR EXIT - -$TYPL1: SETOM TTNBRF ;SET DIGIT TYPED FLAG - AOS 2 ;INCREMENT CHARACTER COUNTER - XCT $TPMUL(3) ;MULT BY OCTAL/DECIMAL BASE, SHIFT CONVERT - SUBI 60 ;ADD IN NEW CHAR - ADD 1,0 - JRST $TYPLP ;REPEAT TILL CR OR COMMA -;*CHECK FOR PROPER AMOUNT OF CHARACTERS -S - -$TPEXT: XCT $TPNBR(3) ;PROPER NUMBER OF CHARACTERS - JRST $TPERR ;NO ...ERROR EXIT - CAIN 3,2 ;CONVERT ? (INDEX = 2) - JRST $CNVX1 ;YES - ;NO, EXIT - -$TPEX1: MOVE 3,$TACD3 ;RESTORE AC'S 3 & 2 - MOVE 2,$TACD2 - MOVE 0,1 ;PUT NUMBER IN AC0 - SKIPE $NEGF ;NEGATE ? - MOVN 0,1 ;YES - MOVE 1,$TACD1 ;RESTORE AC1 - AOS (P) ;RETURN +2 - RTN ;RETURN +1 - -$TPERR: MOVEM 1,$TYPNB ;SAVE NUMBER - ERROR EXIT - MOVE 3,$TACD3 ;RESTORE AC'S - MOVE 2,$TACD2 - MOVE 1,$TACD1 - RTN ;ERROR EXIT ) - - -;*NUMBER COMPUTING CONSTANTS -S - -$TPCK: CAILE 0,"7" ;OCTAL NUMBER CHECK - CAILE 0,"9" ;DECIMAL NUMBER CHECK - CAILE 0,"9" ;CONVERT NUMBER CHECK -$TPMUL: LSH 1,3 ;OCTAL BASE SHIFT - IMULI 1,^D10 ;DECIMAL BASE MULTIPLIER - LSH 1,4 ;CONVERT SHIFT -$TPNBR: CAILE 2,^D12 ;ACCEPT UP TO 12 OCTALS - CAILE 2,^D11 ;ACCEPT UP TO 11 DECIMALS - CAILE 2,^D9 ;ACCEPT UP TO 9 CONVERT -$NEGX: SKIPE 2 ;1ST CHAR ? - JRST $TPERR ;NO, ERROR EXIT ) - SETOM $NEGF ;YES, SET NEGATE FLAG - JRST $TYPLP ;GET NEXT CHAR - -$CNVX: CAIE 3,2 ;PERIOD, IN CONVERT ? - JRST $TPERR ;NO, ERROR EXIT ) - SETOM $CNVD ;YES, SET DECIMAL FLAG - JRST $TYPLP ;GET NEXT CHAR - - -;*CONVERT CONVERSION ROUTINE -S - -$CNVX1: MOVEI 2,^D9 ;NINE DIGITS - SETZM 0 - SKIPE $CNVD ;OCTAL OR DECIMAL ? - JRST $CNVX2 ;DECIMAL - TDNE 1,[421042104210] ;OCTAL - JRST $TPERR ;OCTAL ERROR, 8 OR 9 INPUT - LSH 1,1 ;SQUEEZE OUT 4TH BIT - LSHC 0,3 ;COMPACT INTO OCTAL - SOJN 2,.-2 ;COMPLETED ? - MOVE 1,0 ;YES - JRST $TPEX1 ;RETURN - -$CNVX2: SETZM 3 ;DECIMAL - SETZM 0 - IMULI 3,^D10 ;MULTIPLY BY DECIMAL BASE - LSHC 0,4 ;UNPACK NEXT DIGIT - ADD 3,0 ;ADD IN - SOJN 2,.-4 ;COMPLETED ? - MOVE 1,3 ;YES - JRST $TPEX1 ;RETURN ) - -SUBTTL *SUBRTN* TELETYPE SIXBIT INPUT ROUTINE - -S -;*INPUTS UP TO SIX CHARACTERS, TERMINATES WITH A CR OR COMMA. -;*SIXBIT WORD RETURNED IN AC0 -S - -$TISIX: MOVEM 1,$TSX1# ;SAVE AC'S - MOVEM 2,$TSX2# - MOVE 2,[POINT 6,1] - MOVEI 1,0 - -$TSXB1: GO $OPTLK - JRST $TSXB3 ;NO RESPONSE, RTN + 1 - CAIN 0,15 - JRST $TSXB2 ;CR, TERMINATE, RTN + 2 - CAIN 0,"," - JRST $TSXB2 ;COMMA, TERMINATE, RTN + 2 - CAIL 0,"0" - CAILE 0,"Z" - JRST $TSXB3 ;ERROR, RTN + 1 - CAILE 0,"9" - CAIL 0,"A" - JRST $TSXB4 ;ALPHA-NUMERIC - JRST $TSXB3 ;ERROR, RTN + 1 - -$TSXB4: TRC 0,40 ;CONVERT TO SIX-BIT - TRNE 1,77 - JRST $TSXB3 ;TOO MANY CHAR'S, RTN + 1 - IDPB 0,2 ;PUT INTO WORD - JRST $TSXB1 ;GET NEXT CHARACTER - -$TSXB2: AOS (P) ;INCR USRPC FOR RTN + 2 (NORMAL) - -$TSXB3: MOVE 0,1 ;SIXBIT WORD IN AC0 - MOVE 1,$TSX1 ;RESTORE AC'S - MOVE 2,$TSX2 - RTN ;EXIT + 1/+2 -SUBTTL *SUBRTN* PRINT SUBROUTINES - -S -;* $PNTSX PRINT SIXBIT NORMAL -;* $PTSXF PRINT SIXBIT FORCED -;* $PNTCW PRINT DF10 CONTROL WORD -;* $PNTI1 PRINT OCTAL NUMBER -;* $CHRPN PRINT CHARACTER -;* $ASCPN PRINT ASCII CHARACTER/LINE -;* $DECPN PRINT DECIMAL NUMBER -S - -S -;*PRINT SUBROUTINE INITIALIZATION -;*INITIALIZES CONTROL WORDS, AND TTY IF IN USER MODE -S - -$PNTIN: SETZM $INTDF# ;CLEAR DEVICE DEFAULT FLAG - SETZM $DVOFF# ;CLEAR DEVICE INITED FLAG - SETZM PDISF# ;CLEAR PRINT DISABLED FLAG - SETZM $PTINH# ;CLEAR PRINT 'TYPE-IN INHIBIT' FLAG - SETZM PNTINH# ;ALLOW EXEC PRINT TYPE IN INHIBIT - SETZM XOFFLAG# ;CLEAR XOFF FLAG - SETZM PNTFLG# ;CLEAR IN PRINT FLAG - SETOM PNTSPC# ;SET PRINT SPACE FLAG - MOVNI 0,^D5000 ;SET PRINT ENABLE TO 5000 LINES - MOVEM 0,PNTENB - SETZM TTYFIL# ;ALLOW EXEC FILLERS - SETZM $CRLF# ;ALLOW FREE CR/LF - SETZM $TABF ;ALLOW TAB CONVERSION - SETZM $FFF ;ALLOW FORM FEED CONVERSION - SETZM $VTF ;ALLOW VERTICAL TAB CONVERSION - - SKIPN MONTYP - JRST $PNTIX - - movei 1,.priou - rfmod ;don't translate print output - trz 2,tt%dam - tro 2,3b29 - sfmod - -$PNTIX: MOVEI REENTR ;SETUP REENTER ADDRESS - MOVEM JOBREN - SKIPGE MONCTL ;MONITOR CONTROL ? - RTN ;YES, DON'T PRINT TITLE - SKIPE $ONETM ;FIRST TIME? - RTN ;NO .....EXIT - JRST $PNTNM+2 ;YES ...PRINT PROGRAM NAME - ;AND EXIT -S -;*PRINT SUBROUTINE ENTRY POINT -;*EXIT VIA $PNTI4 BELOW -S - -$PNTIF: SETOM PNTFLG ;SET IN PRINT FLAG - SETOM $PNTTY# ;FORCE TO TTY - SETZM $PTINH - SKIPE MONTYP - JRST .+4 - TTCALL 13,0 ;TOPS10 CLEAR CONTROL O - JFCL - JRST $PNTIA - PUT 1 - PUT 2 - MOVEI 1,.PRIOU - RFMOD - TLZ 2,(TT%OSP) ;CLEAR CONTROL O - SFMOD - GETIT 2 - GETIT 1 - SETZM INUPTR ;CLEAR TTY INPUT BUFFER - JRST $PNTIA - -$PNTIT: SETOM PNTFLG ;SET IN PRINT FLAG - SETZM $PNTTY ;NOT FORCED TO TTY - SKIPL PNTENB# ;PRINT LIMIT REACHED YET? - JRST $PNTIB ;YES ..DON'T PRINT - MOVE CONSW ;READ DATA SWITCHES INTO AC0 - TLNN 0,NOPNT ;NO PRINT SWITCH SET? - JRST $PNTIA - GETIT AC0 ;YES ...RESTORE AC0 FROM STACK (P - 1) - JRST $PRNTX ;EXIT, DON'T PRINT -;*PRINT ROUTINE EXIT -S - -$PNTI4: SETZM $PNTTY ;CLEAR FORCE TO TTY FLAG - - MOVE 1,$PACA1 ;RESTORE AC'S - MOVE 2,$PACA2 - MOVE 3,$PACA3 - MOVE 4,$PACA4 - MOVE 5,$PACA5 -$PRNTX: SETZM PNTFLG ;CLEAR IN PRINT FLAG - RTN ;RETURN - -;*PRINT LIMIT WARNING & ALTERNATE EXIT PATH -S - -$PNTIB: GETIT AC0 ;RESTORE THE STACK (P - 1) - SKIPE PDISF# ;FIRST TIME PRINT DISABLED? - JRST $PRNTX ;YES ...EXIT ) - -$PNTB1: SETOM PDISF ;NO ........SET IT - MOVEM 1,$PACA1 ;SAVE AC'S 1 - 5 - MOVEM 2,$PACA2 - MOVEM 3,$PACA3 - MOVEM 4,$PACA4 - MOVEM 5,$PACA5 - SETOM $PNTTY ;SET FORCE TO TTY FLAG - MOVEI [ASCIZ/ -****** -EXCEEDED ALLOWED PRINTOUTS -/] - JRST $ASCPN-1 ;PRINT THE WARNING & EXIT -S -;*PRINT ROUTINE SELECTOR -;*BASED ON "AC FIELD" = 12 - 17 -S - -$PNTIA: MOVEM 1,$PACA1# ;SAVE AC1. - MOVEM 2,$PACA2# ;SAVE AC2. - MOVEM 3,$PACA3# ;SAVE AC3. - MOVEM 4,$PACA4# ;SAVE AC4. - MOVEM 5,$PACA5# ;SAVE AC5. - GETIT AC0 ;RESTORE AC0 FROM STACK (P - 1) - SETZM $PNT# ;CLEAR PRINT HALF WORDS FLAG - MOVE 2,LUUO - ROT 2,15 ;GET X (AC FIELD) - ANDI 2,17 ;OUT OF THE UUO - -$PNTIC: CAIN 2,17 ;X=17? - JRST $PNTLN ;YES. PRINT ASCII LINE - JUMPE 2,$ASCPN ;X=0? YES. GO PRINT 1 WORD ASCII - CAIN 2,15 ;X=15? - JRST $DECPN ;YES, PRINT DECIMALS ) - CAIN 2,16 ;X=16? - JRST $DECSP ;YES, PRINT DECIMALS, LEADING SPACES - CAIN 2,13 ;X=13? - JRST $PNTI3 ;YES, PRINT OCTALS, 6 SP 6 - CAIN 2,12 ;X=12? - JRST $CHRPN ;YES, PRINT CHARACTER ) - - JRST $PNTI1 ;NONE OF THE ABOVE, PRINT OCTAL - ;(AC FIELD <12 OR = TO 14) -S -;*SIXBIT PRINT SUBROUTINE -;*PRINTS SIXBIT WORD IN AC0 -S - -;*NORMAL PRINTOUT -S - -$PNTSX: PUT 1 ;SAVE AC1 ON STACK (P + 1) - MOVE 1,0 ;PUT SIXBIT WORD IN AC1 - MOVEI 0,0 - LSHC 0,6 ;GET NEXT CHAR INTO AC0 - ADDI 0,40 ;CONVERT TO ASCII - PNTCHR ;PRINT IT - JUMPN 1,.-4 ;LOOP TILL ALL PRINTED - GETIT 1 ;RESTORE AC1 FROM THE STACK (P - 1) - RTN ;EXIT - -;*FORCED PRINTOUT -S - -$PTSXF: PUT 1 ;SAVE AC1 ON THE STACK (P + 1) - MOVE 1,0 ;PUT SIXBIT WORD IN AC1 - MOVEI 0,0 - LSHC 0,6 ;GET NEXT CHAR INTO AC0 - ADDI 0,40 ;CONVERT TO ASCII - PNTCHF ;PRINT - JUMPN 1,.-4 ;LOOP TILL ALL PRINTED - GETIT 1 ;FROM THE STACK (P - 1) - RTN ;EXIT -S -;*SIXBIT MESSAGE PRINT ROUTINE -;*PRINTS THE SIXBIT MESSAGE THOSE ADDRESS IS IN AC0 -;*"BACKARROW" (77) SIGNIFIES END OF TEXT -;*"UPARROW" (76) SIGNIFIES CR/LF -;*"RIGHT SQUARE BRACKET" (75) SIGNIFIES TAB -S - -$PSIXF: PUT 5 - SETO 5, ;SET FORCED PRINTING FLAG - JRST .+3 - -$PSIX: PUT 5 - SETZ 5, ;NORMAL PRINTING - PUT 1 - PUT 2 - PUT 3 - PUT 4 - - HRRZ 4,0 ;MESSAGE ADDRESS TO AC4 - -$PSIX1: MOVEI 3,6 ;6 = NUM OF 6BIT CHAR PER WORD - MOVE 1,(4) ;GET FIRST/NEXT WORD OF MESSAGE - -$PSIX2: SETZ 2, - ROTC 1,6 ;C(AC1) = CHAR TO BE PRINTED - CAIN 2,77 - JRST $PSIX5 ;"BACKARROW", DONE - CAIN 2,76 - JRST $PSIX4 ;"UPARROW", CR/LF - CAIN 2,75 - MOVEI 2,151 ;"BRACKET", CHANGE TO TAB (151+40=11) - MOVEI 0,40(2) ;CHANGE TO ASCII - JUMPN 5,[PNTCHF - JRST .+2] ;FORCED PRINT - PNTCHR -$PSIX3: SOJN 3,$PSIX2 ;PRINTED ALL CHARS FROM THIS WORD ? - AOJA 4,$PSIX1 ;YES, DO NEXT WORD - -$PSIX4: JUMPN 5,[PCRLF - JRST .+2] - PCRL ;PRINT CR/LF - JRST $PSIX3 - -$PSIX5: GETIT 4 - GETIT 3 - GETIT 2 - GETIT 1 - GETIT 5 - RTN -S -;*OCTAL SUPPRESS LEADING ZEROS PRINT ROUTINE -;*PRINTS NUMBER IN AC0, SUPPRESSING LEADING ZEROS -;*PRINTS MINUS SIGN IF NUMBER IS NEGATIVE -S - -$POCSF: PUT 5 - SETO 5, ;FORCED PRINTOUT - JRST .+3 - -$POCS: PUT 5 - SETZ 5, ;NORMAL PRINTOUT - PUT 1 - PUT 2 - PUT 3 - PUT 4 - - MOVE 2,0 - JUMPGE 2,$POCS1 ;IS NUMBER NEGATIVE ? - MOVEI "-" - JUMPN 5,[PNTCHF - JRST .+2] - PNTCHR ;YES, PRINT MINUS SIGN - MOVN 2,2 ;MAKE NUMBER POSITIVE - -$POCS1: SETZ 4, - SETZB 3,1 - JUMPE 2,$POCS3 ;IF NUMBER 0, PRINT 1 ZERO - - MOVEI 3,^D12 ;PRINT UP TO 12 DIGITS -$POCS2: SETZ 1, - LSHC 1,3 - JUMPE 1,$POCS5 ;IS THIS DIGIT ZERO ? - SETO 4, ;NO, SET NON-ZERO DIGIT FLAG -$POCS3: MOVEI "0"(1) ;MAKE ASCII NUMBER - JUMPN 5,[PNTCHF - JRST .+2] - PNTCHR ;PRINT DIGIT - -$POCS4: SOJG 3,$POCS2 ;ALL DONE ? - GETIT 4 - GETIT 3 - GETIT 2 - GETIT 1 - GETIT 5 - RTN - -$POCS5: JUMPE 4,$POCS4 ;PRINTED NON-ZERO DIGIT ? - JRST $POCS3 ;YES, PRINT ZEROS -S -;*OCTAL PRINTOUT ROUTINE -;*PRINTS NUMBER IN AC0 -S - -$PNTI1: MOVE 3,2 ;MOVE X INTO AC3. - ROT 0,-3 ;ROT OCTAL NUM 3 PLACES - SOJN 3,.-1 ;X AMOUNT OF TIMES. - -$PNTI2: MOVEI 1,6 ;PUT 6 INTO AC1 SO THAT - ROTC 0,3 ;C(AC1) AFTER THE ROTC WILL BE 60 - JSP 3,$TOUT ;PLUS NUMBER TO BE PRINTED - SOJN 2,$PNTI2 ;SUB 1 FROM X...PRINT UNTIL X=0. - MOVEM 1,$PNTSV# ;SAVE NUMBER - SKIPN PNTSPC - JRST .+3 - MOVEI 1,40 ;AT THIS POINT WE HAVE PRINTED - JSP 3,$TOUT ;X AMOUNT OF NUMBER(S) AND NOW A SPACE - SKIPN $PNT# ;PRINT 6 SP 6 FLAG SET? - JRST $PNTI4 ;NO, EXIT ) - MOVE 1,$PNTSV ;RESTORE NUMBER - MOVEI 2,6 ;SETUP FOR 2ND HALF - SETZM $PNT ;CLEAR PRINT SPACE FLAG - JRST $PNTI2 ;PRINT REST OF NUMBER - -$PNTI3: MOVEI 3,14 ;SETUP FOR LH WORD - MOVEI 2,6 ;SETUP FOR FIRST HALF - SETOM $PNT ;SET PRINT 6 SP 6 FLAG - SETOM PNTSPC ;SET THE PRINT SPACE FLAG - JRST $PNTI1+1 ;PRINT FIRST HALF NUMBER - JRST $PNTI4 ;EXIT - -S -;*ASCII/CHARACTER PRINTOUT ROUTINE -;*PRINTS CHAR IN LOWER 7 BITS OF AC0 -S - -$CHRPN: ANDI 0,177 ;STRIP CHAR TO 7 BITS - MOVE 1,0 - JSP 3,$TOUT ;PRINT A CHARACTER - JRST $PNTI4 ;LEAVE - -S -;*PRINTS ASCII WHOSE ADDRESS IS IN AC0 -S - -$PNTLN: SETOM $PNT# ;SET PRINT MORE THAN 1 WORD FLAG. - -$ASCPN: MOVEM 0,$POINT# ;SAVE ADDRESS OF ASCII MESSAGE. -$ASCP1: MOVEI 2,5 ;5 = NUM OF ASCII CHAR. IN A WORD. - MOVE 0,@$POINT ;C(AC0) = FIRST/NEXT WORD OF ASCII MESS - -$ASCP2: SETZ 1, ;CLEAR AC1. - ROTC 0,7 ;C(AC1) = CHAR TO BE PRINTED. - JUMPE 1,$PNTI4 ;CHAR = NULL?..NO MORE CHAR..EXIT - JSP 3,$TOUT ;PRINT A CHAR - SOJN 2,$ASCP2 ;PNT ALL CHAR FROM THIS WORD? - AOS $POINT ;YES. INC TO GET NEXT WORD. - SKIPN $PNT ;PNT MORE THAN ONE WORD FLAG SET? - JRST $PNTI4 ;NO..LEAVE - JRST $ASCP1 ;YES...RETURN TO PNT NEXT WORD. -S -;*DECIMAL PRINTOUT ROUTINE -;*PRINTS NUMBER IN AC0 -S - -$DECSP: SETOM $PNT ;SET LEADING SPACES PRINT CONTROL - -$DECPN: JUMPGE 0,.+4 ;IS NUMBER NEGATIVE ? - MOVEI 1,"-" ;YES, PRINT MINUS SIGN - JSP 3,$TOUT - MOVN 0,0 ;MAKE NUMBER POSITIVE - GO $RADIX ;DECIMAL-ASCII CONVERSION & PRINT CHARS - JRST $PNTI4 ;EXIT - -$RADIX: MOVE 2,RADLSC ;SETUP DIGIT COUNTER - LSHC 0,-^D35 ;SHIFT RIGHT 35 BITS INTO AC1 - LSH 1,-1 ;VACATE AC1 SIGN BIT - -$DCCMP: DIV 0,RADIX ;DIVIDE DOUBLE LENGTH INTERGER BY 10 - HRLM 1,(17) ;SAVE DIGIT - SOS 2 ;COUNT DIGIT - JUMPE 0,$LDSPS ;ALL DIGITS FORMED? - GO $RADIX+1 ;NO, COMPUTE NEXT ONE - -$DECP1: HLRZ 1,(17) ;YES, RETRIEVE DIGIT - ADDI 1,60 ;CONVERT TO ASCII - JSP 3,$TOUT ;TYPE-OUT A DIGIT - RTN ;GET NEXT/EXIT - -$LDSPS: SKIPN $PNT ;LEADING SPACES PRINT SET? - JRST $DECP1 ;NO ...GO PRINT - ;YES ...DO IT -$DCSPS: SOJL 2,$DECP1 ;SPACES COMPLETE ? YES - MOVE 1,RADLSP ;NO, PRINT LEADING SPACE - JSP 3,$TOUT ;TYPE OUT THE SPACE - JRST .-3 ;CHECK FOR NEXT -SUBTTL *SUBRTN* CHARACTER OUTPUT ROUTINES - -S -;*OUTPUT TERMINATION CONTROL ROUTINE -S - -$TOUT: MOVEM 0,$PACB0# ;SAVE AC0. - MOVEM 1,$PNTYC# ;SAVE CHARACTER TO BE PRINTED - -S -;*OVERALL CHARACTER OUTPUT CONTROL ROUTINE -S - -$TOUTB: MOVE AC0,CONSW ;DATA SWITCHES INTO AC0 - AOS $CARCT# ;INC CHAR CNTR. - CAIN 1,7 ;CHAR A BELL ? - SETZM $PTINH ;YES, CLEAR PRINT INHIBIT - CAIE 1,15 ;CHAR A CR? - JRST $TOUB1 ;NO-CHK FOR LF - SKIPN $PTINH ;DON'T COUNT ^O'ED LINES - AOS PNTENB ;COUNT LINES, TILL NO MORE - SETZM $CARCT ;CLR CHAR CNTR. - -$TOUB1: CAIN 1,12 ;IS CHAR A LF? - SETZM $CARCT ;YES-CLR CHAR CNTR. - SKIPE $PNTTY ;NO-IS PRINT FORCED ON? - JRST $TOUB2 ;YES-DON'T CHECK NON-PNT SW - TLNE 0,NOPNT ;IS NON PNT SWITCH ON? - JRST (3) ;YES, RETURN - -$TOUB2: JSP 4,$TOUT2 ;SEND CHARACTER USER MODE - -$TOUB3: SKIPE USRLFF# ;NEED USER LF FILLERS ? - JRST $USRFL ;YES - SKIPE USRCRF# ;NEED USER CR FILLERS ? - JRST $USRFC ;YES - JRST $TOUTA ;NO-BACK TO PRINT ROUTINE -;*USER MODE LF & CR FILLERS -S - -$USRFC: CAIE 1,15 ;CR ? - JRST $TOUTA ;NO-RETURN TO PRINT ROUTINE - MOVE 5,USRCRF ;SEND FILLERS FOR CR - JRST $USRF1 ;DEPENDING ON 'USRCRF' - -$USRFL: CAIE 1,12 ;LF ? - JRST $TOUTA ;NO-RETURN TO PRINT - MOVE 5,USRLFF ;SEND FILLERS FOR LF -$USRF1: SOJL 5,$TOUTA ;DEPENDING ON 'USRLFF' - MOVEI 1,001 ;^A - JSP 4,$TOUT2 ;SEND CHARACTER - JRST $USRF1 - -;*RETURN BACK TO PRINTING ROUTINE FROM CHAR OUTPUT -S -$TOUTA: MOVE AC0,$PACB0 ;RESTORE AC0 - JRST (3) ;RETURN TO PRINT ROUTINE -S -;*USER MODE CHARACTER OUTPUT -S - -$TOUT2: MOVEM 4,$PACC4# - CAIN 1,26 ;DON'T PRINT NULLS - JRST @$PACC4 - MOVE 0,CONSW - TLNE 0,PNTLPT ;IS LPT PRINT SWITCH UP ? - JRST $TOUT3 ;YES, GO PRINT ON LOGICAL DEVICE - DROPDV ;CLOSE DEV IF SWITCH CHANGED -$TOUT6: MOVE 0,$CARCT ;CHARACTER NUMBER - CAIN 0,1 ;FIRST CHAR IN LINE ? - JRST $TOUT4 ;YES -$TOUT5: SKIPE NOTYPE ;TYPEOUT INHIBITED ? - JRST @$PACC4 ;YES - SKIPN MONTYP - OUTCHR 1 - SKIPE MONTYP - PBOUT ;OUTPUT VIA MONITOR TTCALL - JRST @$PACC4 ;GO RESTORE AC0 AND RETURN - -$TOUT4: SKIPL MONCTL ;SYSTEM EXERCISER - JRST $TOUT5 ;NO - PUT 1 - MOVEI 1,"?" ;PRECEDE LINE WITH ? - SKIPN MONTYP - OUTCHR 1 - SKIPE MONTYP - PBOUT - GETIT 1 - JRST $TOUT5 - -;*USER MODE LOGICAL DEVICE OUTPUT -S - -$TOUT3: SKIPN $DVOFF ;DEVICE BEEN INITED YET ? - GO $INTDV ;NO, GO DO IT - GO $PUTCR ;GO OUTPUT CHAR - SKIPN $PNTTY ;SKIP IF MESSAGE ALSO FORCED TO TTY - JRST @$PACC4 - JRST $TOUT6 ;OUTPUT -;* LOGICAL DEVICE OUTPUT ROUTINES -S - -$PUTCR: SKIPN MONTYP - JRST $PUT10 - PUT 1 - PUT 2 - MOVE 2,1 - MOVE 1,DEVJFN - BOUT - ERJMP $PUTER - GETIT 2 - GETIT 1 - RTN - -$PUTER: TMSG < -LOG OUTPUT ERROR - LOGGING STOPPED -> - SETZM LOGFLG - SETZM CONSW - GO $DRPDV - GETIT 2 - GETIT 1 - RTN -S -;*LOGICAL DEVICE INITIALIZATION -;*PHY DEV ASSIGNED AT RUN TIME -S - -$INTDV: MOVE 0,PNTEXT - MOVEM 0,$OUTEX - MOVE 0,PNTNAM ;SETUP LOGICAL OUTPUT FILE NAME - MOVEM 0,$OUTNM - MOVEM 1,$PACF1# - MOVEM 2,$PACF2# - SETZM $INTD3# - SKIPN MONTYP - JRST $INT10 ;TOPS10 - MOVE [POINT 7,FILASC,27] - MOVE 1,[ASCII/DEV:/] - MOVEM 1,FILASC -$INT21: MOVEI 1,$OUTNM - GO SIXASC ;CONVERT SIXBIT TO ASCII - HRLZI 1,(GJ%SHT) ;IF FILE EXISTS, APPEND TO IT - HRROI 2,FILASC - GTJFN - ERJMP $INT22 ;DEVICE NOT AVAILABLE, DEFAULT TO DSK - MOVEM 1,DEVJFN# - MOVE 2,[7B5!OF%APP] - OPENF - JRST T20ERR -$INT12: SETOM $DVOFF - MOVE 2,$PACF2 - MOVE 1,$PACF1 - RTN - -$INT22: SKIPE $INTD3 - JRST T20ERR - HRROI 1,[ASCIZ/ -**** -USING 'DSK' PRINT FILE -**** -/] - PSOUT - MOVE [POINT 7,FILASC,27] - MOVE 1,[ASCII/DSK:/] - MOVEM 1,FILASC - SETOM $INTD3 - JRST $INT21 -;*USER MODE CLOSE FILE -S - -$DRPDV: SKIPN $DVOFF ;DEVICE INITED? - RTN ;NO, DON'T BOTHER - SKIPN MONTYP - JRST $DRP10 ;TOPS10 - PUT 1 - MOVE 1,DEVJFN - CLOSF - JRST T20ERR - GETIT 1 - SETZM $DVOFF - RTN ;EXIT - -T20ERR: MOVEI 1,.PRIOU - HRLOI 2,.FHSLF - SETZ 3, - ERSTR - HALTF - HALTF - HALTF - -SIXASC: PUT 2 - PUT 3 - PUT 4 - MOVE 3,0 - MOVE 4,1 - MOVE 1,(4) - GO SIXSTR - MOVEI "." - IDPB 0,3 - HLLZ 1,1(4) - SKIPE 1 - GO SIXSTR - IDPB 1,3 - GETIT 4 - GETIT 3 - GETIT 2 - RTN - -SIXSTR: SETZB 0,2 - LSHC 0,6 - ADDI 0,40 - IDPB 0,3 - JUMPN 1,.-4 - RTN -;*TOPS10, LOGICAL DEVICE OUTPUT - -$PUT10: SKIPE $DVTTY# ;IF DEVICE IS TTY - JRST .+5 ;EMPTY BUFFER AFTER EACH CHAR - SOSG $OBUF+2 ;INCREMENT BYTE COUNT - JRST .+3 - IDPB 1,$OBUF+1 ;STORE CHAR - RTN - OUT $DEVCH, ;EMPTY BUFFER - JRST .-3 - -;*$INT10, TOPS10 INITIALIZE LOGICAL OUTPUT - -$INT10: MOVEM 0,$OUTNM - INIT $DEVCH,0 ;ASCII MODE, DEV CHANNEL - SIXBIT /DEV/ ;LOGICAL DEVICE, LPT,DSK,DTAX - XWD $OBUF, ;OUTPUT ONLY - JRST $INT13 ;DEV NOT AVAIL, DEFAULT TO DISK -$INT11: OUTBUF $DEVCH,1 ;SETUP OUTPUT BUFFER - ENTER $DEVCH,$OUTNM ;INIT OUTPUT FILE - JRST $OERR2 ;NO DIR ROOM, ERROR - SETOM $DVOFF ;SET DEVICE INITED FLAG - MOVEI 0,$DEVCH - DEVCHR ;GET DEVICE CHARACTERISTICS - TLNE 0,10 - SETOM $DVTTY ;DEVICE IS TTY - JRST $INT12 ;EXIT -$INT13: SKIPN $INTDF ;FIRST DEFAULT INIT ? - OUTSTR [ASCIZ/ -**** -USING 'DSK' PRINT FILE -**** -/] - SETOM $INTDF - INIT $DEVCH,0 - SIXBIT /DSK/ - XWD $OBUF, - JRST $OERR1 - JRST $INT11 - -;*USER MODE CLOSE FILE - -$DRP10: CLOSE $DEVCH, ;CLOSE FILE - STATZ $DEVCH,740000 ;RECHECK FINAL ERROR BITS - OUTSTR [ASCIZ/ -%PRINT CLOSE ERROR -/] - RELEAS $DEVCH, ;RELINQUISH DEVICE, WRITE DIRECTORY - SETZM $DVOFF - RTN ;EXIT - -$OUTER: OUTSTR [ASCIZ/ -%PRINT OUTPUT ERROR -/] - SKIPE $$OUTER - XCT $$OUTER ;EXECUTE USERS ERROR RTN, IF PROV. - EXIT 1, ;ERROR, QUIT - JRST START ;RESTART USER SEGMENT - -$OERR1: OUTSTR [ASCIZ/ -DSK INIT ERROR/] - JRST $OUTER ;DISK PRINT OUTPUT ERROR - -$OERR2: OUTSTR [ASCIZ/ -NO DIR ROOM/] - JRST $OUTER ;DISK PRINT OUTPUT ERROR -SUBTTL *STOR* RESERVED STORAGE - -;PROGRAM LITERALS - LIT -ENDSLD: 0 - -;END OF PROGRAM VARIABLES - -FILASC: BLOCK 3 - -D$ISTR: BLOCK ^D30 ;INPUT STORAGE - -PATCH: BLOCK 100 ;DEBUGGING AREA - -;PROGRAM VARIABLE WORDS - - VAR - -END: 0 -SUBTTL STORAGE -- ZEROED ON STARTUP -FIRZER:! - -LEV1PC: BLOCK 1 ;RETURN PC FOR PSI'S -LEV2PC: BLOCK 1 ; .. -LEV3PC: BLOCK 1 ; .. -LF1PC: BLOCK 1 ;RETURN PC FOR PSI'S -LF2PC: BLOCK 1 ; .. -LF3PC: BLOCK 1 ; .. -EXMADR: BLOCK 1 ;ADDRESS OF LAST EXAMINE COMMAND -BITPTR: BLOCK 1 ;BYTE POINTER TO INPUT BIT -BITBYT: BLOCK 1 ;INPUT BYTE -CMDMSG: BLOCK 1 ;POINTER TO ERROR MESSAGE -CZADR: BLOCK 1 ;WHERE TO GO ON CONTROL-Z -CZSP: BLOCK 1 ;CONTROL-Z STACK POINTER -CTADR: BLOCK 1 ;WHERE TO GO ON CONTROL-T -CMFILE: BLOCK 1 ;COMMAND JFN -UCFILE: BLOCK 1 ;INPUT JFN -DEPFLG: BLOCK 1 ;0=EXAMINE, -1=DEPOSIT -LASTCA: BLOCK 1 ;LAST CRAM ADDRESS -INTAKE: BLOCK 1 ;-1 DON'T TYPE DATA BECAUSE OF TAKE CMD -ULDSTR: BLOCK 4 ;".ULD" LINE STORAGE -IBF: BLOCK 2 ;INPUT FILE POINTERS -DSKBF: BLOCK 3 -GSBF: BLOCK 3 -DSKLIN: BLOCK ^D30 -DSKNAM: BLOCK 1 -DSKEXT: BLOCK 3 -$CCLF: BLOCK 1 -$CMNTF: BLOCK 1 -$LISTF: BLOCK 1 -CFCALL: BLOCK 1 -CFJ: BLOCK 1 -CFNBR: BLOCK 1 -CFALU: BLOCK 1 -CFSD: BLOCK 1 -CFAB: BLOCK 1 -CFRBM: BLOCK 1 -CFSPEC: BLOCK 1 -CFDISP: BLOCK 1 -CFSKIP: BLOCK 1 -CFT: BLOCK 1 -CFC: BLOCK 1 -CFSC: BLOCK 1 -CFFE: BLOCK 1 -CFFM: BLOCK 1 -CFMC: BLOCK 1 -CFDV: BLOCK 1 -CFMP: BLOCK 1 -CFCL: BLOCK 1 -CFCR: BLOCK 1 -CFMARK: BLOCK 1 -STBUF: BLOCK 40 ;STRING BUFFER -LFPDL: BLOCK 100 -ENDZER==.-1 - - RELOC <<.+1140>&777000>-140 -IPAG: BLOCK ^D512 - - END <3,,EV> - diff --git a/apps/pdp10/diags/klad/SPCCPU.KLM.txt b/apps/pdp10/diags/klad/SPCCPU.KLM.txt new file mode 100644 index 000000000..168925eff --- /dev/null +++ b/apps/pdp10/diags/klad/SPCCPU.KLM.txt @@ -0,0 +1,171 @@ +SUBTTL *SPCCPU* SPECIAL BASIC CPU PROCESSOR CONTROL, 26-FEB-76 + +;NEW DEFINITIONS USED BY THE KL10 SUBROUTINE PACKAGE + +AC0= 0 +DIAGNOS=30000 ;PDP-10 DIAGNOSTIC START ADDRESS +DDT= 10000 ;PDP-10 DDT START ADDRESS +DIAMON= 20000 ;PDP-10 DIAMON LOADER START ADDRESS +DONG11= 1B22 ;11 DOORBELL (FROM THE 10) + +;DTE20 DEVICE CODES + +DTE== 200 ;DTE0 +DTE0== 204 +DTE1== 204 +DTE2== 210 +DTE3== 214 + +;KL10 EPT COMMUNICATION AREA + +$STD= 440 ;PDP-10 DIAGNOSTIC START ADDRESS +$DDT= 441 ;PDP-10 DDT START ADDRESS +$STL= 442 ;PDP-10 LOADER START ADDRESS +$STM= 443 ;PDP-10 MONITOR START ADDRESS + +$DTFLG= 444 ;DTE20 OPERATION COMPLETE FLAG +$DTCLK= 445 ;DTE20 CLOCK INTERRUPT FLAG +$DTCI= 446 ;DTE20 CLOCK INTERRUPT INSTRUCTION +$DTT11= 447 ;DTE20 10 TO 11 ARGUMENT +$DTF11= 450 ;DTE20 11 TO 10 ARGUMENT +$DTCMD= 451 ;DTE20 TO 11 COMMAND WORD +$DTSEQ= 452 ;DTE20 OPERATION SEQUENCE NUMBER +$DTOPR= 453 ;DTE20 OPERATIONAL DTE # +$DTCHR= 454 ;DTE20 LAST TYPED CHARACTER +$DTMTD= 455 ;DTE20 MONITOR TTY OUTPUT COMPLETE FLAG +$DTMTI= 456 ;DTE20 MONITOR TTY INPUT FLAG + +$DTSWR= 457 ;DTE20 CONSOLE SWITCH REGISTER +;SPECIAL "FIXED" REASSIGNMENTS + + $$LOC=. ;SAVE CURRENT LOCATION + + LOC 30000 +$$BEGIN:JRST $$START ;SETUP SPECIAL START + JRST $$START ;"DIAMON" CHAIN START ADDRESS + + LOC 440 +$STD: JRST BEGIN ;SETUP FOR "STD" + LOC 443 +$STM: JRST $SPEC ;SIMPLE RUN CONTROL + + LOC 30057 +$BEGEND:JRST $SPBEND ;SETUP SPECIAL "BEGEND" + +;SPECIAL MUUO, TRAP & PAGE FAIL SETUP + + LOC 420 +$$420: HALT . ;KI10 PAGE FAIL +$$421: JFCL ;OVERFLOW +$$422: HALT . ;PUSHDOWN OVERFLOW +$$423: HALT . ;TRAP 3 +$$424: 0 ;MMUO +$$425: 0 ;MMUO PC +$$426: 0 ;KI10-PAGE FAIL, KL10-PROCESS CONTEXT +$$427: HALT . +$$430: 427 ;MMUO NEW PC'S +$$431: 427 +$$432: 427 +$$433: 427 +$$434: 427 +$$435: 427 +$$436: 427 +$$437: 427 + + LOC 500 +$$500: 0 ;KL10 PAGE FAIL WORD +$$501: 0 ;KL10 PAGE FAIL PC +$$502: 503 ;KL10 PAGE FAIL NEW PC +$$503: HALT . + LOC $$LOC ;RESET CURRENT LOCATION + +;SPECIAL STARTUP SEQUENCE + +$$START:SETZM USER + JSP 0,.+1 ;IN USER MODE ? + TLNE 0,USERF + SETOM USER ;YES, SET CONTROL WORD + SKIPN MONFLG ;SPECIAL USER MODE ? + SETZM USER ;YES, RUN AS EXEC + SKIPE USER + JRST START ;USER MODE, DON'T NEED CPU TYPE + +$STKIL: SKIPN MONTEN ;LOADED BY "DIAMON" ? + SETOM ITRCNT ;NO, RUN FOREVER + SETZM KLTYP + SETZM KLFLG ;ASSUME KI10 + MOVE 1,[1,,1] + BLT 1,1 ;HOPE THIS WORKS + CAMN 1,[1,,1] ;IF AC NE 1,,1 AFTER BLT, KL10 + JRST START ;KI10, NO ADDITIONAL SETUP + +$STKL: CONO APR,10040 ;SET BBD NOT BIT + CONI APR,0 + CONO APR,20040 ;CLEAR BBD NOT BIT + TRNN 0,40 ;IF SET, KL10 + AOS KLTYP ;IF NOT, BBD + SETZM $DTFLG + SETZM $DTCLK + MOVE $DTOPR ;GET DTE # + ORM $$DTE0 ;INSERT IN DTE I/O INSTS + ORM $$DTE1 + ORM $$DTE2 + ORM $$DTE3 + SETOM KLFLG ;SET KL10 CONTROL FLAG + JRST START + +$SPEC: MOVE [JRST STARTA] ;SIMPLE RUN CONTROL + MOVEM $SPB1 + JRST START +;SPECIAL "BEGEND" ROUTINE + +$SPBEND:AOS PASCNT ;INCREMENT PASS COUNT + SOS ITRCNT ;DECREMENT ITERATION COUNT +$SPB1: SKIPN USER + JRST $SPBEX ;EXEC MODE + +$SPBUS: SKIPE ITRCNT ;USER MODE, COMPLETED ? + JRST STARTA ;NO, KEEP RUNNING + SKIPN MONTEN ;DONE, LOADED BY "DIAMON" ? + EXIT ;NO, RETURN TO MONITOR + JRST @RETURN ;YES, RETURN TO "DIAMON" + +$SPBEX: SKIPE KLFLG + JRST $SPBKL ;KL10 & EXEC + DATAO PI,ITRCNT ;KI10 & EXEC, DISPLAY ITER COUNT + SKIPE ITRCNT + JRST STARTA ;NOT COMPLETED YET + JRST @RETURN ;DONE + +$SPBKL: SKIPN ITRCNT + JRST $SPKLD ;KL10, EXEC & COMPLETED + + SKIPGE MONCTL + JRST STARTA ;"DIAMON" CONTROL + MOVEI 0,404 ;NOTIFY PDP-11 OF END OF PASS + MOVEM 0,$DTCMD + SETZM $DTFLG + SKIPN KLTYP +$$DTE0: CONO DTE,DONG11 + SKIPE KLTYP +$$DTE1: CONO DTE,10000 + SKIPN $DTFLG ;WAIT TILL 11 RESPONDS + JRST .-1 + JRST STARTA ;KEEP RUNNING + +;SPECIAL KL10 COMPLETED ROUTINE + +$SPKLD: SKIPE MONTEN + JRST @RETURN ;LOADED BY "DIAMON" + + MOVEI 0,403 ;NOTIFY PDP-11 OF COMPLETION + MOVEM 0,$DTCMD + SETZM $DTFLG + SKIPN KLTYP +$$DTE2: CONO DTE,DONG11 + SKIPE KLTYP +$$DTE3: CONO DTE,10000 + SKIPN $DTFLG ;SHOULD NEVER HAPPEN + JRST .-1 ;11 NEVER RETURNS ON END OF PROGRAM + HALT BEGIN ;IF IT DOES, HALT. + diff --git a/apps/pdp10/diags/klad/STOR.KLM.txt b/apps/pdp10/diags/klad/STOR.KLM.txt new file mode 100644 index 000000000..0ff956480 --- /dev/null +++ b/apps/pdp10/diags/klad/STOR.KLM.txt @@ -0,0 +1,21 @@ +SUBTTL *STOR* RESERVED STORAGE, JULY 19,1977 + +;PROGRAM LITERALS + + XLIST +IFNDEF $LPAPER, + LIT + LIST +ENDSLD: 0 + +IFDEF DEBUG,< +PATCH: BLOCK DEBUG ;PATCHING AREA +> + +;PROGRAM VARIABLES + VAR + +IFDEF PGMEND,< +END: 0 + END BEGIN > + diff --git a/apps/pdp10/diags/klad/dakak/README.md b/apps/pdp10/diags/klad/dakak/README.md index c24a20e47..4d9d7f7cc 100644 --- a/apps/pdp10/diags/klad/dakak/README.md +++ b/apps/pdp10/diags/klad/dakak/README.md @@ -7,7 +7,7 @@ machines: type: pdp10 config: /devices/pdp10/machine/ka10/test/debugger/machine.xml debugger: true - commands: a 'dakakt.mac;../param.klm;../fixed.klm;dakakm.mac;../uuoerr.klm' + commands: a dakak.mac --- PDP-10 KA10 Basic Instruction Diagnostic #11 @@ -18,7 +18,9 @@ The *PDP-10 KA10 Basic Instruction Diagnostic #11* (MAINDEC-10-DAKAK) test code [DAKAKT.MAC](DAKAKT.MAC.txt) [[original](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakakt.mac.html)] for use with the [PDP-10 Test Machine with Debugger](/devices/pdp10/machine/ka10/test/debugger/) below. -Resources for this test include: +This diagnostic "TESTS THE MULTIPLY INSTRUCTION AND THE MULTIPLY ALGORITHM." + +Resources for this diagnostic include: - [Instructions](#dakaktxt) - [History](#dakakhst) @@ -38,6 +40,23 @@ This command: will automatically read the [DAKAK.MAC](DAKAK.MAC.txt) source file (a slightly modified copy of [DAKAKM.MAC](DAKAKM.MAC.txt)), assemble it, and then load the binary image at the location specified in the file. +To assemble the diagnostic using the original DEC source files: + + a 'dakakt.mac;../param.klm;../fixed.klm;dakakm.mac;../uuoerr.klm;../stor.klm' + +The quotes (either single or double) are required to prevent the PDPjs Debugger from interpreting the filenames as +separate commands, because a semicolon is the Debugger's normal command separator. + +If you want a machine to automatically assemble and load those files on startup, you can add the following machine configuration +setting in the page's Front Matter: + + commands: a 'dakakt.mac;../param.klm;../fixed.klm;dakakm.mac;../uuoerr.klm;../stor.klm' + +However, in this case, you *must* use `'` as the quoting sequence, because of the way these settings are encoded into +JavaScript parameters; e.g.: + + embedPDP10(...,'{commands:"a 'dakakt.mac;../param.klm;../fixed.klm;dakakm.mac;../uuoerr.klm;../stor.klm'"}'); + --- DAKAK.TXT diff --git a/docs/pcx86/examples/pcx86-dbg.js b/docs/pcx86/examples/pcx86-dbg.js index 95229cdb7..51b5400cf 100644 --- a/docs/pcx86/examples/pcx86-dbg.js +++ b/docs/pcx86/examples/pcx86-dbg.js @@ -46,9 +46,9 @@ var l,aa;function ba(a,b){function c(){}c.prototype=b.prototype;a.prototype=new c;a.prototype.constructor=a;for(var d in b)if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(b,d);e&&Object.defineProperty(a,d,e)}else a[d]=b[d]} for(var da="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},ea="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global?global:this,fa=["Math","trunc"],ga=0;gaa?-b:b};ka!=ja&&null!=ka&&da(ea,ia,{configurable:!0,writable:!0,value:ka}); -var la={163840:[40,1,8,,254],184320:[40,1,9,,252],327680:[40,2,8,,255],368640:[40,2,9,,253],737280:[80,2,9,,249],1228800:[80,2,15,,249],1474560:[80,2,18,,240],2949120:[80,2,36,,240],21368320:[615,4,17],256256:[77,1,26,128],2494464:[203,2,12,512],5242880:[256,2,40,256],10485760:[512,2,40,256]},n={lp:0,np:1,op:2,hl:3,pp:4,qp:5,rp:6,sp:7,tp:8,up:9,vp:10,wp:11,xp:12,yp:13,zp:14,Ap:15,Bp:16,Cp:17,Dp:18,Ep:19,Fp:20,Gp:21,Hp:22,Ip:23,Jp:24,Kp:25,Lp:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39, -"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,ce:65,ti:66,ui:67,vi:68,E:69,wi:70,xi:71,yi:72,zi:73,Ai:74,Bi:75,Ci:76,Di:77,Ei:78,Fi:79,Gi:80,Q:81,Hi:82,Ii:83,Ji:84,Ki:85,Li:86,Mi:87,Ni:88,Oi:89,eg:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,de:97,vl:98,xl:99,d:100,e:101,Hl:102,Il:103,Jl:104,Kl:105,an:106,k:107,dn:108,hn:109,n:110,qn:111,p:112,q:113,r:114,No:115,t:116,Qo:117,Ro:118,So:119,x:120, -y:121,z:122,"{":123,"|":124,"}":125,"~":126,Mp:127},ma={};ma[173]=n["-"];ma[186]=n[";"];ma[187]=n["="];ma[189]=n["-"];ma[188]=n[","];ma[190]=n["."];ma[191]=n["/"];ma[192]=n["`"];ma[219]=n["["];ma[220]=n["\\"];ma[221]=n["]"];ma[222]=n["'"];var na={};na[n["1"]]=n["!"];na[n["2"]]=n["@"];na[n["3"]]=n["#"];na[n["4"]]=n.$;na[n["5"]]=n["%"];na[n["6"]]=n["^"];na[n["7"]]=n["&"];na[n["8"]]=n["*"];na[n["9"]]=n["("];na[n["0"]]=n[")"];na[186]=n[":"];na[187]=n["+"];na[188]=n["<"];na[189]=n._;na[190]=n[">"]; +var la={163840:[40,1,8,,254],184320:[40,1,9,,252],327680:[40,2,8,,255],368640:[40,2,9,,253],737280:[80,2,9,,249],1228800:[80,2,15,,249],1474560:[80,2,18,,240],2949120:[80,2,36,,240],21368320:[615,4,17],256256:[77,1,26,128],2494464:[203,2,12,512],5242880:[256,2,40,256],10485760:[512,2,40,256]},n={mp:0,op:1,pp:2,il:3,qp:4,rp:5,sp:6,tp:7,up:8,vp:9,wp:10,xp:11,yp:12,zp:13,Ap:14,Bp:15,Cp:16,Dp:17,Ep:18,Fp:19,Gp:20,Hp:21,Ip:22,Jp:23,Kp:24,Lp:25,Mp:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39, +"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,de:65,ui:66,vi:67,wi:68,E:69,xi:70,yi:71,zi:72,Ai:73,Bi:74,Ci:75,Di:76,Ei:77,Fi:78,Gi:79,Hi:80,Q:81,Ii:82,Ji:83,Ki:84,Li:85,Mi:86,Ni:87,Oi:88,Pi:89,fg:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,ee:97,wl:98,yl:99,d:100,e:101,Il:102,Jl:103,Kl:104,Ll:105,bn:106,k:107,en:108,jn:109,n:110,rn:111,p:112,q:113,r:114,Oo:115,t:116,Ro:117,So:118,To:119,x:120, +y:121,z:122,"{":123,"|":124,"}":125,"~":126,Np:127},ma={};ma[173]=n["-"];ma[186]=n[";"];ma[187]=n["="];ma[189]=n["-"];ma[188]=n[","];ma[190]=n["."];ma[191]=n["/"];ma[192]=n["`"];ma[219]=n["["];ma[220]=n["\\"];ma[221]=n["]"];ma[222]=n["'"];var na={};na[n["1"]]=n["!"];na[n["2"]]=n["@"];na[n["3"]]=n["#"];na[n["4"]]=n.$;na[n["5"]]=n["%"];na[n["6"]]=n["^"];na[n["7"]]=n["&"];na[n["8"]]=n["*"];na[n["9"]]=n["("];na[n["0"]]=n[")"];na[186]=n[":"];na[187]=n["+"];na[188]=n["<"];na[189]=n._;na[190]=n[">"]; na[191]=n["?"];na[192]=n["~"];na[219]=n["{"];na[220]=n["|"];na[221]=n["}"];na[222]=n['"'];na[173]=n._;na[61]=n["+"];na[59]=n[":"]; function oa(a,b){var c;if(a){b||(b=10);var d,e,f=0g&&(g+=Math.pow(2,36)),g=0a&& function ra(a,b,c){b?12=b?6:16777215>=b?8:12);return pa(a,8,b,c?"0o":"")}function q(a,b,c){b?9=b?4:4294967295>=b?8:9);return pa(a,16,b,c?"0x":"")}function r(a){return q(a,2,!0)}function sa(a){return q(a,4,!0)}function ta(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0"']/g,function(a){return ya[a]})}function Aa(a,b,c){return c?(" "+a).slice(-b):(a+" ").slice(0,b)}function Ba(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")} var ya={"&":"&","<":"<",">":">",'"':""","'":"'"},Ca={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",10:"LF",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"};function Da(a,b,c){var d=0,e=a.length,f=0;for(c||(c=function(a,b){return a>b?1:a>1,h;h=c(b,a[g]);0a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}function Fa(a,b){var c=0,d=1,e;for(e in a){if(d>=arguments.length)break;var f=a[e],g=arguments[d++],c=c&~f.nh|g<>a.shift} +function Ea(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}function Fa(a,b){var c=0,d=1,e;for(e in a){if(d>=arguments.length)break;var f=a[e],g=arguments[d++],c=c&~f.oh|g<>a.shift} function Ha(a,b){var c;if(Array.prototype.indexOf)return a.indexOf(b,c);c=c||0;0>c&&(c+=a.length);0>c&&(c=0);for(var d=a.length;ca?this.be=this.id:(this.xe=this.id.substr(0,a),this.be=this.id.substr(a+1));this.ea={ready:!1,pf:!1,$g:!1,Yb:!1,error:!1};this.pg=null;this.ea.error=!1;this.ic=c||0;this.ba=this.H=this.ka=this.pa=this.Ie=null;nb.push(this)} +Za(Ta("Opera")||Ta("iOS")?"onunload":"onbeforeunload",function(){bb(ab.exit)});function mb(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.yj=b.comment;this.Pk=b;this.exports={};this.na=this.bindings={};a=this.id.indexOf(".");0>a?this.ce=this.id:(this.ye=this.id.substr(0,a),this.ce=this.id.substr(a+1));this.ea={ready:!1,qf:!1,ah:!1,Yb:!1,error:!1};this.qg=null;this.ea.error=!1;this.ic=c||0;this.ba=this.H=this.ka=this.pa=this.Je=null;nb.push(this)} function ob(a,b,c){pb[a]&&b&&(pb[a][b]=c)}function gb(a){window&&window.alert(a)}function qb(a){var b=!1;window&&(b=window.confirm(a));return b}function sb(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b=this.x&&a=this.y&&b=c>>2);d?(b=new Tb(a.x,a.y,a.Nc,a.A*b/c|0),a.y+=b.A,a.A-=b.A):(b=new Tb(a.x,a.y,a.Nc*b/c|0,a.A),a.x+=b.Nc,a.Nc-=b.Nc);return b}function Vb(a){mb.call(this,"Panel",a);this.F=this.G=this.L=-1}ba(Vb,mb);l=Vb.prototype;l.Cb=function(a,b,c,d){return this.pa&&this.pa.Cb(a,b,c,d)||this.H&&this.H.Cb(a,b,c,d)||this.B&&this.B.Cb(a,b,c,d)||this.ba&&this.ba.Cb(a,b,c,d)?!0:mb.prototype.Cb.call(this,a,b,c,d)}; -l.uc=function(a,b,c,d){this.pa=a;this.ka=b;this.H=c;this.ba=d;this.B=Wb(a,"Keyboard")};l.Xb=function(a,b){b||Xb();return!0};l.Wb=function(){return!0};l.Vd=function(a,b){a.button||(this.L=b?0:-1,Yb(this,a,b))};l.tf=function(a){Yb(this,a)}; -function Yb(a,b,c){var d=Zb/null.offsetWidth,e=$b/null.offsetHeight,f=null.getBoundingClientRect(),d=(b.clientX-f.left)*d|0;b=(b.clientY-f.top)*e|0;null==c&&(a.L||(a.L=Math.abs(a.F-d)>Math.abs(a.G-b)?1:2),1==a.L?b=a.G:2==a.L&&(d=a.F));a.F=d;a.G=b;if(0<=d&&dd&&(f=d);c= +l.uc=function(a,b,c,d){this.pa=a;this.ka=b;this.H=c;this.ba=d;this.B=Wb(a,"Keyboard")};l.Xb=function(a,b){b||Xb();return!0};l.Wb=function(){return!0};l.Vd=function(a,b){a.button||(this.L=b?0:-1,Yb(this,a,b))};l.uf=function(a){Yb(this,a)}; +function Yb(a,b,c){var d=Zb/null.offsetWidth,e=$b/null.offsetHeight,f=null.getBoundingClientRect(),d=(b.clientX-f.left)*d|0;b=(b.clientY-f.top)*e|0;null==c&&(a.L||(a.L=Math.abs(a.F-d)>Math.abs(a.G-b)?1:2),1==a.L?b=a.G:2==a.L&&(d=a.F));a.F=d;a.G=b;if(0<=d&&dd&&(f=d);c= f;break a}c=-1}if(-1!==c&&(c&=-16,c!=a.ga)){b=c;if(a.context&&a.N&&a.O){e=cc-dc;f=a.N.width;a.O.fillStyle=ec;a.O.fillRect(0,e,f,dc);fc(a,e+gc,a.N,a.O);a.V=a.ha.width/24|0;if(null==b)hc(a,"Mouse over memory to dump");else for(hc(a,q(b,8,!0),null,0,1),d=1;16>=d;d++){for(var g="",h=1;8>=h;h++){var k;k=a.ka;var m=b++;k=k.aa[(m&k.C)>>>k.A].Zd(m&k.D,m);hc(a,q(k,2),null,1);g+=32<=k&&128>k?String.fromCharCode(k):"."}hc(a,g,null,0,1)}a.context.drawImage(a.N,0,e,f,dc,a.Da,a.Ha,a.va,a.za)}a.ga=c}}} -function ic(a,b,c,d){a.A.kf[a.A.$i++]={Ll:b,Hd:c,type:d};return Fa(bc,b,c,0,d)}function fc(a,b,c,d){var e,f=null.style.color,g=a.ta=10;a.C=g;a.I=b;a.J=a.aa=gc;e||(e=a.Z||a.aa+"px "+jc);a.M=a.Z=e;c&&(a.ha=c);d&&(a.D=d,a.la=f||"white")}function hc(a,b,c,d,e){a.D.font=a.M;a.D.fillStyle=a.la;a.D.fillText(b,a.C,a.I);a.C+=a.V;null!=c&&(16!=a.Ca?b=c.toString():(b=8>a.qa?"0x":"",b+=q(c,a.qa)),a.D.fillText(b,a.C,a.I),a.C+=a.V);d&&(a.C+=a.V*d);e&&(a.C=a.ta,a.I+=(a.J+2)*(e||1))} +function ic(a,b,c,d){a.A.lf[a.A.aj++]={Ml:b,Hd:c,type:d};return Fa(bc,b,c,0,d)}function fc(a,b,c,d){var e,f=null.style.color,g=a.ta=10;a.C=g;a.I=b;a.J=a.aa=gc;e||(e=a.Z||a.aa+"px "+jc);a.M=a.Z=e;c&&(a.ha=c);d&&(a.D=d,a.la=f||"white")}function hc(a,b,c,d,e){a.D.font=a.M;a.D.fillStyle=a.la;a.D.fillText(b,a.C,a.I);a.C+=a.V;null!=c&&(16!=a.Ca?b=c.toString():(b=8>a.qa?"0x":"",b+=q(c,a.qa)),a.D.fillText(b,a.C,a.I),a.C+=a.V);d&&(a.C+=a.V*d);e&&(a.C=a.ta,a.I+=(a.J+2)*(e||1))} function Xb(){for(var a=!1,b=zb(document,"pcx86","panel"),c=0;c>2,kc=$b,cc=$b,ec="black",dc=$b>>1;$a(Xb); -function lc(a,b,c){mb.call(this,"Bus",a);this.H=b;this.ba=c;this.I=a.busWidth||20;this.O=Math.pow(2,this.I);this.N=this.C=this.O-1|0;this.A=32==this.I||20>=this.I?12:24>=this.I?14:15;this.B=1<>2;this.D=this.B-1;this.M=this.O/this.B|0;this.V=this.M-1;this.F=[];this.G=[];this.K=this.L=!1;this.Y=[];this.Z=[];a=new x;mc(a,this.ba);this.aa=Array(this.M);for(b=0;b>>a.A;0g&&(p=g);if(k&&k.size){if(k.type==d&&k.controller==e){if(f+g<=k.ya)return k.ve+=k.ya-f,k.ya=f,!0;if(f>=k.ya+k.ve){p=k.size-(f-m);p>g&&(p=g);k.ve=f-k.ya+p;f=m+a.B;g-=p;h++;continue}}return pc(a,qc,f,g)}f=new x(f,p,a.B,d,e);mc(f,a.ba,k);a.aa[h++]=f;f=m+a.B;g-=p}return 0>=g?(sc(a.H),a.H.ea.wb||a.status(Math.floor(c/1024)+"Kb "+tc[d]+" at "+q(b)),!0):pc(a,vc,b,c)} -function nc(a,b){32==a.I?b?a.J&&(wc(a,1048576,1048576,a.J),a.J=null):a.J||(a.J=xc(a,1048576,1048576),wc(a,1048576,1048576,xc(a,0,1048576))):20>>this.A;0=this.I?12:24>=this.I?14:15;this.B=1<>2;this.D=this.B-1;this.M=this.O/this.B|0;this.V=this.M-1;this.F=[];this.G=[];this.K=this.L=!1;this.Y=[];this.Z=[];a=new x;mc(a,this.ba);this.aa=Array(this.M);for(b=0;b>>a.A;0g&&(p=g);if(k&&k.size){if(k.type==d&&k.controller==e){if(f+g<=k.ya)return k.we+=k.ya-f,k.ya=f,!0;if(f>=k.ya+k.we){p=k.size-(f-m);p>g&&(p=g);k.we=f-k.ya+p;f=m+a.B;g-=p;h++;continue}}return pc(a,qc,f,g)}f=new x(f,p,a.B,d,e);mc(f,a.ba,k);a.aa[h++]=f;f=m+a.B;g-=p}return 0>=g?(sc(a.H),a.H.ea.vb||a.status(Math.floor(c/1024)+"Kb "+tc[d]+" at "+q(b)),!0):pc(a,vc,b,c)} +function nc(a,b){32==a.I?b?a.J&&(wc(a,1048576,1048576,a.J),a.J=null):a.J||(a.J=xc(a,1048576,1048576),wc(a,1048576,1048576,xc(a,0,1048576))):20>>this.A;0>>a.A;0>>=a.A;0>>a.A;0>>this.A].Bc(a&this.D,a)};function Ic(a,b){var c=b&a.D,d=(b&a.C)>>>a.A;return c!=a.D?a.aa[d].Nf(c,b):a.aa[d++].Zd(c,b)|a.aa[d&a.V].Zd(0,b+1)<<8} -l.fc=function(a,b){this.aa[(a&this.C)>>>this.A].Dc(a&this.D,b&255,a)};function Jc(a,b,c){var d=b&a.D,e=(b&a.C)>>>a.A;d!=a.D?a.aa[e].ri(d,c&65535,b):(a.aa[e++].bf(d,c&255,b),a.aa[e&a.V].bf(0,c>>8&255,b+1))}l.wj=function(){return null}; -function Kc(a,b){var c=0,d=[],e=!a.J&&a.N==a.C;e||nc(a,!0);for(var f=0;f>>a.A;0>>this.A].Bc(a&this.D,a)};function Ic(a,b){var c=b&a.D,d=(b&a.C)>>>a.A;return c!=a.D?a.aa[d].Of(c,b):a.aa[d++].Zd(c,b)|a.aa[d&a.V].Zd(0,b+1)<<8} +l.fc=function(a,b){this.aa[(a&this.C)>>>this.A].Dc(a&this.D,b&255,a)};function Jc(a,b,c){var d=b&a.D,e=(b&a.C)>>>a.A;d!=a.D?a.aa[e].si(d,c&65535,b):(a.aa[e++].cf(d,c&255,b),a.aa[e&a.V].cf(0,c>>8&255,b+1))}l.xj=function(){return null}; +function Kc(a,b){var c=0,d=[],e=!a.J&&a.N==a.C;e||nc(a,!0);for(var f=0;f>>=f)&k;if(void 0!==g){if(g[0])g[0](b,k,e);a.ba&&a.L!=g[1]&&Tc(a.ba,b,k)}else a.ba&&(Mb(a.ba,a,b,k,e),a.L&&Tc(a.ba,b,k));f+=h<<3;b+=h;c-=h}}function pc(a,b,c,d,e){b="Memory block error ("+b+": "+q(c)+","+q(d)+")";e?a.ba?a.ba.message(b):a.log(b):gb(b);return!1}var bc,Uc={Hk:20,count:8,aq:1,type:3},Vc=0,Wc;for(Wc in Uc){var Xc=Uc[Wc];Uc[Wc]={nh:(1<>>=f)&k;if(void 0!==g){if(g[0])g[0](b,k,e);a.ba&&a.L!=g[1]&&Tc(a.ba,b,k)}else a.ba&&(Mb(a.ba,a,b,k,e),a.L&&Tc(a.ba,b,k));f+=h<<3;b+=h;c-=h}}function pc(a,b,c,d,e){b="Memory block error ("+b+": "+q(c)+","+q(d)+")";e?a.ba?a.ba.message(b):a.log(b):gb(b);return!1}var bc,Uc={Ik:20,count:8,bq:1,type:3},Vc=0,Wc;for(Wc in Uc){var Xc=Uc[Wc];Uc[Wc]={oh:(1<>1),this.X=new Int32Array(this.I,0,c>>2),zc(this,Ec?Fc:Gc);else{this.X=Array(c>>2);for(e=0;e>2),b=0;b>8,c)};l.oi=function(a,b,c){this.Dc(a++,b&255,c++);this.Dc(a++,b>>8&255,c++);this.Dc(a++,b>>16&255,c++);this.Dc(a,b>>>24,c)};l.xo=function(a){return this.X[a>>2]>>>((a&3)<<3)&255}; -l.Jo=function(a){var b=a>>2;a=(a&3)<<3;var c=this.X[b]>>a;return 24>a?c&65535:c&255|(this.X[b+1]&255)<<8};l.Do=function(a){var b=a>>2;a=(a&3)<<3;var c=this.X[b];a&&(c=c>>>a|this.X[b+1]<<32-a);return c};l.Vo=function(a,b){var c=a>>2;a=(a&3)<<3;this.X[c]=this.X[c]&~(255<>2;a=(a&3)<<3;24>a?this.X[c]=this.X[c]&~(65535<>8);this.Oa=!0}; -l.ap=function(a,b){var c=a>>2;if(a=(a&3)<<3){var d=-1<>>32-a}else this.X[c]=b;this.Oa=!0};l.wo=function(a,b){this.ba&&null!=this.ya&&pd(this.ba,this.ya+a)||this.C&&qd(this.C,b,1,!1);return this.Zd(a,b)};l.Io=function(a,b){this.ba&&null!=this.ya&&pd(this.ba,this.ya+a,2)||this.C&&qd(this.C,b,2,!1);return this.Nf(a,b)};l.Co=function(a,b){this.ba&&null!=this.ya&&pd(this.ba,this.ya+a,4)||this.C&&qd(this.C,b,4,!1);return this.ji(a,b)}; -l.Uo=function(a,b,c){this.ba&&null!=this.ya&&rd(this.ba,this.ya+a)||this.C&&qd(this.C,c,1,!0);this.D?this.cf(0,b,c):this.bf(a,b,c)};l.gp=function(a,b,c){this.ba&&null!=this.ya&&rd(this.ba,this.ya+a,2)||this.C&&qd(this.C,c,2,!0);this.D?this.cf(0,b,c):this.ri(a,b,c)};l.$o=function(a,b,c){this.ba&&null!=this.ya&&rd(this.ba,this.ya+a,4)||this.C&&qd(this.C,c,4,!0);this.D?this.cf(0,b,c):this.K(a,b,c)};l.zo=function(a,b){this.ob.X[this.A]|=this.F;this.pb.X[this.B]|=this.F;return this.pd.Bc(a,b)}; -l.Lo=function(a,b){this.ob.X[this.A]|=this.F;this.pb.X[this.B]|=this.F;return this.pd.Mf(a,b)};l.Fo=function(a,b){this.ob.X[this.A]|=this.F;this.pb.X[this.B]|=this.F;return this.pd.Nd(a,b)};l.Xo=function(a,b,c){this.ob.X[this.A]|=this.F;this.pb.X[this.B]|=this.J;this.pd.Dc(a,b,c)};l.jp=function(a,b,c){this.ob.X[this.A]|=this.F;this.pb.X[this.B]|=this.J;this.pd.Tf(a,b,c)};l.cp=function(a,b,c){this.ob.X[this.A]|=this.F;this.pb.X[this.B]|=this.J;this.pd.Sf(a,b,c)}; -l.Ao=function(a,b){return sd(this.C,b,!1).Bc(a,b)};l.Mo=function(a,b){return sd(this.C,b,!1).Mf(a,b)};l.Go=function(a,b){return sd(this.C,b,!1).Nd(a,b)};l.Yo=function(a,b,c){sd(this.C,c,!0).Dc(a,b,c)};l.kp=function(a,b,c){sd(this.C,c,!0).Tf(a,b,c)};l.ep=function(a,b,c){sd(this.C,c,!0).Sf(a,b,c)};l.vo=function(a){return this.Pa[a]};l.Qk=function(a){return this.Pa[a]};l.yo=function(a){this.ob.X[this.A]|=32;this.pb.X[this.B]|=32;this.Bc=this.Qk;return this.Pa[a]}; -l.Ho=function(a){return this.G.getUint16(a,!0)};l.Vk=function(a){return a&1?this.Pa[a]|this.Pa[a+1]<<8:this.Rd[a>>1]};l.Ko=function(a){this.ob.X[this.A]|=32;this.pb.X[this.B]|=32;this.Mf=this.Vk;return a&1?this.Pa[a]|this.Pa[a+1]<<8:this.Rd[a>>1]};l.Bo=function(a){return this.G.getInt32(a,!0)};l.Sk=function(a){return a&3?this.Pa[a]|this.Pa[a+1]<<8|this.Pa[a+2]<<16|this.Pa[a+3]<<24:this.X[a>>2]}; -l.Eo=function(a){this.ob.X[this.A]|=32;this.pb.X[this.B]|=32;this.Nd=this.Sk;return a&3?this.Pa[a]|this.Pa[a+1]<<8|this.Pa[a+2]<<16|this.Pa[a+3]<<24:this.X[a>>2]};l.To=function(a,b){this.Pa[a]=b;this.Oa=!0};l.el=function(a,b){this.Pa[a]=b;this.Oa=!0};l.Wo=function(a,b){this.Pa[a]=b;this.ob.X[this.A]|=32;this.pb.X[this.B]|=96;this.Dc=this.el;this.pd.Oa=!0};l.fp=function(a,b){this.G.setUint16(a,b,!0);this.Oa=!0};l.gl=function(a,b){a&1?(this.Pa[a]=b,this.Pa[a+1]=b>>8):this.Rd[a>>1]=b;this.Oa=!0}; -l.ip=function(a,b){a&1?(this.Pa[a]=b,this.Pa[a+1]=b>>8):this.Rd[a>>1]=b;this.ob.X[this.A]|=32;this.pb.X[this.B]|=96;this.Tf=this.gl;this.pd.Oa=!0};l.Zo=function(a,b){this.G.setInt32(a,b,!0);this.Oa=!0};l.fl=function(a,b){a&3?(this.Pa[a]=b,this.Pa[a+1]=b>>8,this.Pa[a+2]=b>>16,this.Pa[a+3]=b>>24):this.X[a>>2]=b;this.Oa=!0}; -l.bp=function(a,b){a&3?(this.Pa[a]=b,this.Pa[a+1]=b>>8,this.Pa[a+2]=b>>16,this.Pa[a+3]=b>>24):this.X[a>>2]=b;this.ob.X[this.A]|=32;this.pb.X[this.B]|=96;this.Sf=this.fl;this.pd.Oa=!0};function td(a){Nb&&!Ec&&(a=a<<24|a<<8&16711680|a>>8&65280|a>>>24);return a} -var ad=0,Dc=2,bd=5,dd=6,ud=["black","blue","green","cyan"],tc="NONE RAM ROM VIDEO H/W UNPAGED PAGED".split(" "),$c=0,fd=[],Hc=[x.prototype.xo,x.prototype.Vo,x.prototype.Jo,x.prototype.hp,x.prototype.Do,x.prototype.ap],od=[x.prototype.wo,x.prototype.Uo,x.prototype.Io,x.prototype.gp,x.prototype.Co,x.prototype.$o],ed=[x.prototype.zo,x.prototype.Xo,x.prototype.Lo,x.prototype.jp,x.prototype.Fo,x.prototype.cp],cd=[x.prototype.Ao,x.prototype.Yo,x.prototype.Mo,x.prototype.kp,x.prototype.Go,x.prototype.ep]; -if(Nb)var Gc=[x.prototype.vo,x.prototype.To,x.prototype.Ho,x.prototype.fp,x.prototype.Bo,x.prototype.Zo],Fc=[x.prototype.Qk,x.prototype.el,x.prototype.Vk,x.prototype.gl,x.prototype.Sk,x.prototype.fl],vd=[x.prototype.yo,x.prototype.Wo,x.prototype.Ko,x.prototype.ip,x.prototype.Eo,x.prototype.bp]; -function wd(a,b){mb.call(this,"CPU",a,1);b=a.cycles||b;var c=a.multiplier||1;this.T={};this.T.sd=b;this.T.Kd=c;this.T.rg=Math.round(this.T.sd/1E4)/100;this.T.oe=this.T.rg*this.T.Kd;this.ea.wb=!1;this.ea.ni=!1;this.ea.lf=a.autoStart;this.ea.kj=!1;this.ea.He=!1;this.T.uf=this.T.Te=0;this.T.wf=a.csStart;this.T.Se=a.csInterval;this.T.Ue=a.csStop;this.Ql=this.Uf.bind(this);Ib(this)}ba(wd,mb);l=wd.prototype; -l.uc=function(a,b,c,d){this.pa=a;this.ka=b;this.ba=d;for(b=0;b=a.T.Te&&(a.T.Te+=a.T.Se,c=!0);0<=a.T.Ue&&a.T.Ue<=Dd(a)&&(a.T.Se=a.T.Ue=-1,Ad(a),a.Jb(),c=!0);c&&a.P(Dd(a)+" cycles: checksum="+q(a.T.uf))}} -l.Cb=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.na[b]=c;a=!0;break;case "run":this.na[b]=c;c.onclick=function(){var a;if(a=d.pa)if(a=d.pa,a.ea.Yb)a=!0;else{var b=null,c,h=sb(a.id);for(c=0;ca.T.rg&&(c=Math.round(c/a.T.Kd));return c}function zd(a){a.T.Wd=0;a.Dd=a.md=a.zc=a.A=0;Ad(a);Ed(a,1)} -function Ed(a,b,c){var d=!1;if(void 0!==b){.8>a.T.Wd/a.T.oe?b=1:d=!0;a.T.Kd=b;b=a.T.rg*a.T.Kd;if(a.T.oe!=b){a.T.oe=b;b=a.T.oe.toFixed(2)+"Mhz";var e=a.na.setSpeed;e&&(e.textContent=b);a.P("target speed: "+b)}c&&a.pa&&a.pa.ld()}Gd(a,a.md);a.md=0;a.T.Xd=Ja();a.T.pe=0;Hd(a);return d} -l.Uf=function(a){if(Kb(this,!0)){if(!this.ea.wb){Ed(this);this.pa&&this.pa.start(this.T.Xd,Dd(this));this.ea.wb=!0;this.ea.ni=!0;this.V&&this.V.start();var b=this.na.run;b&&(b.textContent="Halt");this.pa&&(Md(this.pa,!0),a&&this.pa.ld(!0))}this.T.th>=this.T.sd&&Hd(this,!0);this.T.zf=0;this.T.sg=Ja();this.T.pe&&(a=this.T.sg-this.T.pe,a>this.T.Dj&&(this.T.Xd+=a,this.T.Xd>this.T.sg&&(this.T.Xd=this.T.sg)));try{do{var c=this.ea.He?1:this.T.nn;if(this.V){Nd(this.V);var d=this.V;a=c;var e=d.G[0];if(e.le){var f= -(Dd(d.H,d.O)-e.jd)/d.Ba|0,g=Od(d,0)-f;e.mode==Pd&&(g-=f);var h=g*d.Ba|0;e.mode==Pd&&(h>>=1);a>h&&(a=h)}var c=a,k=this.V;a=c;if(k.A&&k.A[Qd]&Rd){var m=k.Z-Dd(k.H,k.O);0m&&(a=m)}c=a}try{this.Lg(c)}catch(v){if("number"!=typeof v)throw v;}var p=this.zc-this.A;this.md+=p;this.T.zf+=p;Gd(this,0,!0);Cd(this,p);this.T.yf-=p;0>=this.T.yf&&(this.T.yf+=this.T.Fj,this.pa&&Td(this.pa));this.T.xf-=p;0>=this.T.xf&&(this.T.xf+=this.T.Ej,this.pa&&Md(this.pa));this.T.Ve-=p;if(0>=this.T.Ve){this.T.Ve+=this.T.sh; -break}}while(this.ea.wb)}catch(v){this.Jb();Bd(this);this.pa&&this.pa.stop(Ja(),Dd(this));Kb(this,!1);Fb(this,v.stack||v.message);return}c=setTimeout;d=this.Ql;this.T.pe=Ja();e=this.T.Dj;this.T.zf&&(e=Math.round(e*this.T.zf/this.T.sh));e-=this.T.pe-this.T.sg;if(f=this.T.pe-this.T.Xd)this.T.Wd=Math.round(this.md/(10*f))/100,864E5<=f&&(this.Dd=0,this.V&&Nd(this.V,!0),Ed(this));if(0>e||this.T.Wde&&(this.T.Xd-=e),e=0;this.T.th+=this.T.zf;this.T.pe+=e;c(d,e)}else Bd(this),this.pa&&this.pa.stop(Ja(), -Dd(this))};l.Lg=function(){return 0};l.Jb=function(a){Jb(this,!0);this.zc-=this.A;this.A=0;Gd(this,this.md);this.md=0;if(this.ea.wb){this.ea.wb=!1;this.V&&this.V.stop();var b=this.na.run;b&&(b.textContent="Run")}this.ea.complete=a};function Bd(a,b){a.pa&&(Td(a.pa,b),Md(a.pa,b))}var Id=30,Jd=60,Kd=2,xd=["power","reset"]; -function Ud(a,b,c,d){this.gc=a;this.ba=a.ba;this.id=b;this.$b=c||"";this.U=0;this.Ka=65535;this.Nb=this.Ka+1;this.Ab=this.qc=this.ext=this.mb=this.type=this.ua=0;this.Lb=-1;this.W=this.Jc=2;this.R=this.wa=65535;this.G=this.mh;this.D=this.dj;this.F=this.fj;this.A={U:-1,ua:0,Ka:0,mb:0,type:0,ext:0,Lb:-1};1==this.id&&(this.Jf=0,this.C=null,this.Pe=!1,this.H=Array(32),this.B=[]);Vd(this,!0,d)}function Wd(a,b){a.B.push(b);return[a.B.length,Xd]}l=Ud.prototype; -l.mh=function(a){this.U=a&65535;return this.ua=this.U<<4};l.qg=function(a,b){var c,d,e=this.gc;a&=65535;a&4?(c=e.Eb.ua,d=c+e.Eb.Ka|0):(c=e.Kb,d=e.Pc);if(c){c=c+(a&65528)|0;if(d-c|0)return e.A-=15,Yd(this,c,a,b);this.id>>0)+b<=this.Nb?this.ua+a|0:this.kg()};l.zl=function(a,b){return(a>>>0)+b>this.Nb?this.ua+a|0:this.kg()};l.kg=function(){y.call(this.gc,13,0);return-1};l.ej=function(a,b){return(a>>>0)+b<=this.Nb?this.ua+a|0:this.lg()}; -l.Al=function(a,b){return(a>>>0)+b>this.Nb?this.ua+a|0:this.lg()};l.lg=function(){y.call(this.gc,13,0);return-1};function ae(a,b,c,d,e){a.U=b;a.ua=d;a.Ka=e;a.Nb=(e>>>0)+1;a.mb=c;a.type=c&7936;a.ext=c>>16&192;a.Lb=(b&4?a.gc.Eb.ua:a.gc.Kb)+(b&65528)|0;a.id>>0)+1;a.mb=e;a.type=e&7936;a.ext=0;a.Lb=b;a.id>>0)+1,a.mb=a.A.mb,a.type=a.A.type,a.ext=a.A.ext,a.Lb=a.A.Lb,a.A.U=-1,Vd(a,!0,!0,!1),a.ua;a.A.U=-1;var f=e.ja(b+0),g=e.ja(b+4),h=g&7936,k=e.ja(b+2)|(g&255)<<16,m=e.ja(b+6),p=c&65528;if(80386<=e.ca){var v=f,k=k|(m&65280)<<16,f=f|(m&15)<<16;m&128&&(f=f<<12|4095)}switch(a.id){case de:var u=a.C;a.Pe=!1;if(u&&c==Xd&&a.B.length){var E=a.B[a.Jf-1];if(E&&!E())return-1}var K=c&3,H=(g&24576)>>13,E=-1,I,T;p||b>= -e.Kb&&b=a.Ab&&(K>a.Ab&&(E=ee(e),fe(e,ee(e),!0),ge(e,E),a.Pe=!0),E=0);else{if(256==h||2304==h)return he(a,c,u)?a.ua:-1;if(1024==h)E=2,T=0,Kh||2048==(h&2560))return y.call(e,13,c&65532),-1;if(!(g&32768))return y.call(e,11,c&65532),-1}break;case $d:if(!p||4096>h||512!=(h&2560))return y.call(e,13,c&65532),-1;if(!(g&32768))return y.call(e,12,c&65532), --1;break;case be:u=h&-513;if(!p||256!=u&&2304!=u)return y.call(e,13,c&65532),-1;2304==u&&(a.Si=k+e.ja(k+102)|0,a.tl=k+a.Ka|0);break;case Zd:if(!(h&4096)&&768>>0)+1,a.mb=g,a.type=h,a.ext=m,a.Lb=b,Vd(a,!0,!0,!1));return k} -function he(a,b,c){var d=a.gc,e=a.Ab,f=d.la.U,g=d.la.ua;if(!c){if(!(d.la.type&512))return y.call(d,13,b&65532),!1;d.fb(d.la.Lb+4,d.la.mb&=-513)}if(-1===d.la.load(b))return!1;var h=d.la.ua;if(!1!==c){if(d.la.type&512)return y.call(d,13,b&65532),!1;d.fb(d.la.Lb+4,d.la.mb|=512)}d.la.type=d.la.type&-513|d.la.mb&512;256==d.la.type||768==d.la.type?(d.fb(g+14,A(d)),d.fb(g+16,qe(d)),d.fb(g+18,d.D),d.fb(g+20,d.I),d.fb(g+22,d.L),d.fb(g+24,d.G),d.fb(g+26,z(d)),d.fb(g+28,d.M),d.fb(g+30,d.K),d.fb(g+32,d.J),d.fb(g+ -34,d.oa.U),d.fb(g+36,d.Z.U),d.fb(g+38,d.Y.U),d.fb(g+40,d.Ca.U),d.Eb.load(d.ja(h+42)),re(d,d.ja(h+16)|(c?16384:0)),d.D=d.ja(h+18),d.I=d.ja(h+20),d.L=d.ja(h+22),d.G=d.ja(h+24),d.M=d.ja(h+28),d.K=d.ja(h+30),d.J=d.ja(h+32),d.oa.load(d.ja(h+34)),d.Ca.load(d.ja(h+40)),se(d,d.ja(h+14),d.ja(h+36)),b=38,g=26,a.Ab>>0)+1)}; -function Vd(a,b,c,d){void 0===c&&(c=!!(a.gc.qa&1));a.Oc=!1;if(c)if(a.load=a.qg,a.Cj=a.fn,a.bc=a.cj,a.cc=a.ej,void 0===d&&(d=!!(a.gc.O&131072)),d)a.load=a.G,a.bc=a.D,a.cc=a.F,a.Ab=a.qc=3,a.W=2,a.R=a.wa=65535,a.Ka=65535,a.Nb=a.Ka+1,a.Jc=a.W,a.Lb=-1,a.Pe=!1;else{if(!(a.U&-4))a.bc=a.kg,a.cc=a.lg;else if(a.type&4096){6144==(a.type&6656)&&(a.bc=a.kg);if(a.type&2048||!(a.type&512))a.cc=a.lg;1024==(a.type&3072)&&(a.bc==a.cj&&(a.bc=a.zl),a.cc==a.ej&&(a.cc=a.Al),a.Oc=!0);b&&a.id>13,80386>a.gc.ca||!(a.ext&64)?(a.W=2,a.R=65535):(a.W=4,a.R=-1),a.Jc=a.W,a.wa=a.R)}else a.load=a.mh,a.Cj=a.gn,a.bc=a.dj,a.cc=a.fj,a.Ab=a.qc=0,a.Lb=-1,a.Pe=!1}var de=1,pe=2,$d=3,be=4,Zd=6,Xd=1; -function ue(a){var b=+a.model||8088,c;switch(b){default:c=4772727;break;case 80286:c=6E6;break;case 80386:c=16E6}wd.call(this,a,c);this.ca=b;a=a.stepping;this.we=b+(a?oa(a,16):0);this.Ri=61442;this.Qd=1792;this.si=28672;this.Vf=4;this.Ta=255;this.B=80286<=this.ca?Pb:Ob;this.va=ze;this.bj=Ae;this.ij=Be;this.nj=Ce;if(80186<=this.ca&&(this.va=ze.slice(),this.bj=Ae.slice(),this.ij=Be.slice(),this.Ta=31,this.va[15]=De,this.va[96]=Ee,this.va[97]=Fe,this.va[98]=Ge,this.va[99]=De,this.va[100]=De,this.va[101]= -De,this.va[102]=De,this.va[103]=De,this.va[104]=He,this.va[105]=Ie,this.va[106]=Je,this.va[107]=Ke,this.va[108]=Le,this.va[109]=Me,this.va[110]=Ne,this.va[111]=Oe,this.va[192]=Pe,this.va[193]=Qe,this.va[200]=Re,this.va[201]=Se,this.va[241]=Te,this.bj[7]=Ue,this.ij[7]=Ue,80286<=this.ca)){this.Ri=2;this.Qd|=28672;this.Vf=0;this.va[15]=Ve;this.Pd=We.slice();for(b=0;b=this.we&&(this.Pd[166]=gf,this.Pd[167]=hf)}}this.Yf=[];this.Zf=[];this.ag=0;zd(this);this.ea.complete=this.ea.jj=!1;this.tj=0;this.sc=this.aa=[];this.hb=this.Ng=this.Db=this.Wf=this.df=this.ef=this.ed=0;jf(this)}ba(ue,wd);function kf(a,b,c,d){b=(d?a.sc:a.aa)[b>>>a.hb];c?--b.ie||nd(b):--b.he||id(b);d&&sc(a)} -function lf(a){var b;if(a.aa===a.sc){a.aa=Array(a.Wf);a.$f=new x(null,0,0,bd,null,a);mc(a.$f,a.ba);for(b=0;b>>20,f=a.sc[(a.Wc+e&a.ef)>>>a.hb],g=f.Nd(e);if(!(g&1))return d||nf.call(a,b,!1,c),a.ff;if(!(g&4)&&3==a.Ma)return d||nf.call(a,b,!0,c),a.ff;var h=(b&4190208)>>>10,g=a.sc[((g&-4096)+h&a.ef)>>>a.hb],k=g.Nd(h);if(!(k&1))return d||nf.call(a,b,!1,c),a.ff;if(!(k&4)&&3==a.Ma)return d||nf.call(a,b,!0,c),a.ff;c=a.sc[((k&-4096)+(b&4095)&a.ef)>>>a.hb];if(d)return c;d=b>>>a.hb;k=a.aa[d];b&=-4096;var m;0>2;b.pb=g;b.B=h>>2;Nb&&Ec&&c.X&&!c.controller&&!c.he&&!c.ie?(b.Pa=c.Pa,b.Rd=c.Rd,b.X=c.X,zc(b,vd)):(b.F=c?td(32):0,b.J=c?td(96):0,zc(b,ed));mc(b,a.ba,k);a.aa[d]=b;a.Xf.push(d);return b}function of(a){a.aa!==a.sc&&(a.aa=a.sc,a.$f=null,a.Xf=null,a.ff=null)}l=ue.prototype;l.reset=function(){this.ea.wb&&this.Jb();jf(this);zd(this);this.ea.error=!1}; +function x(a,b,c,d,e,f){this.id=$c+=2;this.X=null;this.H=0;this.ya=a;this.we=b;this.size=c||0;this.type=d||ad;this.D=d==Dc;this.controller=null;this.C=f;mc(this);this.Oa=this.rj=!1;if(c)if(e)this.controller=e,a=e.wj(a),this.X=a[0],this.H=a[1],zc(this,e.gh());else if(Nb)this.I=new ArrayBuffer(c),this.G=new DataView(this.I,0,c),this.Pa=new Uint8Array(this.I,0,c),this.Rd=new Uint16Array(this.I,0,c>>1),this.X=new Int32Array(this.I,0,c>>2),zc(this,Ec?Fc:Gc);else{this.X=Array(c>>2);for(e=0;e>2),b=0;b>8,c)};l.pi=function(a,b,c){this.Dc(a++,b&255,c++);this.Dc(a++,b>>8&255,c++);this.Dc(a++,b>>16&255,c++);this.Dc(a,b>>>24,c)};l.yo=function(a){return this.X[a>>2]>>>((a&3)<<3)&255}; +l.Ko=function(a){var b=a>>2;a=(a&3)<<3;var c=this.X[b]>>a;return 24>a?c&65535:c&255|(this.X[b+1]&255)<<8};l.Eo=function(a){var b=a>>2;a=(a&3)<<3;var c=this.X[b];a&&(c=c>>>a|this.X[b+1]<<32-a);return c};l.Wo=function(a,b){var c=a>>2;a=(a&3)<<3;this.X[c]=this.X[c]&~(255<>2;a=(a&3)<<3;24>a?this.X[c]=this.X[c]&~(65535<>8);this.Oa=!0}; +l.bp=function(a,b){var c=a>>2;if(a=(a&3)<<3){var d=-1<>>32-a}else this.X[c]=b;this.Oa=!0};l.xo=function(a,b){this.ba&&null!=this.ya&&pd(this.ba,this.ya+a)||this.C&&qd(this.C,b,1,!1);return this.Zd(a,b)};l.Jo=function(a,b){this.ba&&null!=this.ya&&pd(this.ba,this.ya+a,2)||this.C&&qd(this.C,b,2,!1);return this.Of(a,b)};l.Do=function(a,b){this.ba&&null!=this.ya&&pd(this.ba,this.ya+a,4)||this.C&&qd(this.C,b,4,!1);return this.ki(a,b)}; +l.Vo=function(a,b,c){this.ba&&null!=this.ya&&rd(this.ba,this.ya+a)||this.C&&qd(this.C,c,1,!0);this.D?this.df(0,b,c):this.cf(a,b,c)};l.hp=function(a,b,c){this.ba&&null!=this.ya&&rd(this.ba,this.ya+a,2)||this.C&&qd(this.C,c,2,!0);this.D?this.df(0,b,c):this.si(a,b,c)};l.ap=function(a,b,c){this.ba&&null!=this.ya&&rd(this.ba,this.ya+a,4)||this.C&&qd(this.C,c,4,!0);this.D?this.df(0,b,c):this.K(a,b,c)};l.Ao=function(a,b){this.nb.X[this.A]|=this.F;this.ob.X[this.B]|=this.F;return this.pd.Bc(a,b)}; +l.Mo=function(a,b){this.nb.X[this.A]|=this.F;this.ob.X[this.B]|=this.F;return this.pd.Nf(a,b)};l.Go=function(a,b){this.nb.X[this.A]|=this.F;this.ob.X[this.B]|=this.F;return this.pd.Nd(a,b)};l.Yo=function(a,b,c){this.nb.X[this.A]|=this.F;this.ob.X[this.B]|=this.J;this.pd.Dc(a,b,c)};l.kp=function(a,b,c){this.nb.X[this.A]|=this.F;this.ob.X[this.B]|=this.J;this.pd.Uf(a,b,c)};l.ep=function(a,b,c){this.nb.X[this.A]|=this.F;this.ob.X[this.B]|=this.J;this.pd.Tf(a,b,c)}; +l.Bo=function(a,b){return sd(this.C,b,!1).Bc(a,b)};l.No=function(a,b){return sd(this.C,b,!1).Nf(a,b)};l.Ho=function(a,b){return sd(this.C,b,!1).Nd(a,b)};l.Zo=function(a,b,c){sd(this.C,c,!0).Dc(a,b,c)};l.lp=function(a,b,c){sd(this.C,c,!0).Uf(a,b,c)};l.fp=function(a,b,c){sd(this.C,c,!0).Tf(a,b,c)};l.wo=function(a){return this.Pa[a]};l.Rk=function(a){return this.Pa[a]};l.zo=function(a){this.nb.X[this.A]|=32;this.ob.X[this.B]|=32;this.Bc=this.Rk;return this.Pa[a]}; +l.Io=function(a){return this.G.getUint16(a,!0)};l.Wk=function(a){return a&1?this.Pa[a]|this.Pa[a+1]<<8:this.Rd[a>>1]};l.Lo=function(a){this.nb.X[this.A]|=32;this.ob.X[this.B]|=32;this.Nf=this.Wk;return a&1?this.Pa[a]|this.Pa[a+1]<<8:this.Rd[a>>1]};l.Co=function(a){return this.G.getInt32(a,!0)};l.Tk=function(a){return a&3?this.Pa[a]|this.Pa[a+1]<<8|this.Pa[a+2]<<16|this.Pa[a+3]<<24:this.X[a>>2]}; +l.Fo=function(a){this.nb.X[this.A]|=32;this.ob.X[this.B]|=32;this.Nd=this.Tk;return a&3?this.Pa[a]|this.Pa[a+1]<<8|this.Pa[a+2]<<16|this.Pa[a+3]<<24:this.X[a>>2]};l.Uo=function(a,b){this.Pa[a]=b;this.Oa=!0};l.fl=function(a,b){this.Pa[a]=b;this.Oa=!0};l.Xo=function(a,b){this.Pa[a]=b;this.nb.X[this.A]|=32;this.ob.X[this.B]|=96;this.Dc=this.fl;this.pd.Oa=!0};l.gp=function(a,b){this.G.setUint16(a,b,!0);this.Oa=!0};l.hl=function(a,b){a&1?(this.Pa[a]=b,this.Pa[a+1]=b>>8):this.Rd[a>>1]=b;this.Oa=!0}; +l.jp=function(a,b){a&1?(this.Pa[a]=b,this.Pa[a+1]=b>>8):this.Rd[a>>1]=b;this.nb.X[this.A]|=32;this.ob.X[this.B]|=96;this.Uf=this.hl;this.pd.Oa=!0};l.$o=function(a,b){this.G.setInt32(a,b,!0);this.Oa=!0};l.gl=function(a,b){a&3?(this.Pa[a]=b,this.Pa[a+1]=b>>8,this.Pa[a+2]=b>>16,this.Pa[a+3]=b>>24):this.X[a>>2]=b;this.Oa=!0}; +l.cp=function(a,b){a&3?(this.Pa[a]=b,this.Pa[a+1]=b>>8,this.Pa[a+2]=b>>16,this.Pa[a+3]=b>>24):this.X[a>>2]=b;this.nb.X[this.A]|=32;this.ob.X[this.B]|=96;this.Tf=this.gl;this.pd.Oa=!0};function td(a){Nb&&!Ec&&(a=a<<24|a<<8&16711680|a>>8&65280|a>>>24);return a} +var ad=0,Dc=2,bd=5,dd=6,ud=["black","blue","green","cyan"],tc="NONE RAM ROM VIDEO H/W UNPAGED PAGED".split(" "),$c=0,fd=[],Hc=[x.prototype.yo,x.prototype.Wo,x.prototype.Ko,x.prototype.ip,x.prototype.Eo,x.prototype.bp],od=[x.prototype.xo,x.prototype.Vo,x.prototype.Jo,x.prototype.hp,x.prototype.Do,x.prototype.ap],ed=[x.prototype.Ao,x.prototype.Yo,x.prototype.Mo,x.prototype.kp,x.prototype.Go,x.prototype.ep],cd=[x.prototype.Bo,x.prototype.Zo,x.prototype.No,x.prototype.lp,x.prototype.Ho,x.prototype.fp]; +if(Nb)var Gc=[x.prototype.wo,x.prototype.Uo,x.prototype.Io,x.prototype.gp,x.prototype.Co,x.prototype.$o],Fc=[x.prototype.Rk,x.prototype.fl,x.prototype.Wk,x.prototype.hl,x.prototype.Tk,x.prototype.gl],vd=[x.prototype.zo,x.prototype.Xo,x.prototype.Lo,x.prototype.jp,x.prototype.Fo,x.prototype.cp]; +function wd(a,b){mb.call(this,"CPU",a,1);b=a.cycles||b;var c=a.multiplier||1;this.T={};this.T.sd=b;this.T.Kd=c;this.T.sg=Math.round(this.T.sd/1E4)/100;this.T.pe=this.T.sg*this.T.Kd;this.ea.vb=!1;this.ea.oi=!1;this.ea.mf=a.autoStart;this.ea.lj=!1;this.ea.Ie=!1;this.T.vf=this.T.Ue=0;this.T.xf=a.csStart;this.T.Te=a.csInterval;this.T.Ve=a.csStop;this.Rl=this.Vf.bind(this);Ib(this)}ba(wd,mb);l=wd.prototype; +l.uc=function(a,b,c,d){this.pa=a;this.ka=b;this.ba=d;for(b=0;b=a.T.Ue&&(a.T.Ue+=a.T.Te,c=!0);0<=a.T.Ve&&a.T.Ve<=Dd(a)&&(a.T.Te=a.T.Ve=-1,Ad(a),a.Jb(),c=!0);c&&a.P(Dd(a)+" cycles: checksum="+q(a.T.vf))}} +l.Cb=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.na[b]=c;a=!0;break;case "run":this.na[b]=c;c.onclick=function(){var a;if(a=d.pa)if(a=d.pa,a.ea.Yb)a=!0;else{var b=null,c,h=sb(a.id);for(c=0;ca.T.sg&&(c=Math.round(c/a.T.Kd));return c}function zd(a){a.T.Wd=0;a.Dd=a.md=a.zc=a.A=0;Ad(a);Ed(a,1)} +function Ed(a,b,c){var d=!1;if(void 0!==b){.8>a.T.Wd/a.T.pe?b=1:d=!0;a.T.Kd=b;b=a.T.sg*a.T.Kd;if(a.T.pe!=b){a.T.pe=b;b=a.T.pe.toFixed(2)+"Mhz";var e=a.na.setSpeed;e&&(e.textContent=b);a.P("target speed: "+b)}c&&a.pa&&a.pa.ld()}Gd(a,a.md);a.md=0;a.T.Xd=Ja();a.T.qe=0;Hd(a);return d} +l.Vf=function(a){if(Kb(this,!0)){if(!this.ea.vb){Ed(this);this.pa&&this.pa.start(this.T.Xd,Dd(this));this.ea.vb=!0;this.ea.oi=!0;this.V&&this.V.start();var b=this.na.run;b&&(b.textContent="Halt");this.pa&&(Md(this.pa,!0),a&&this.pa.ld(!0))}this.T.uh>=this.T.sd&&Hd(this,!0);this.T.Af=0;this.T.tg=Ja();this.T.qe&&(a=this.T.tg-this.T.qe,a>this.T.Ej&&(this.T.Xd+=a,this.T.Xd>this.T.tg&&(this.T.Xd=this.T.tg)));try{do{var c=this.ea.Ie?1:this.T.on;if(this.V){Nd(this.V);var d=this.V;a=c;var e=d.G[0];if(e.me){var f= +(Dd(d.H,d.O)-e.jd)/d.Ba|0,g=Od(d,0)-f;e.mode==Pd&&(g-=f);var h=g*d.Ba|0;e.mode==Pd&&(h>>=1);a>h&&(a=h)}var c=a,k=this.V;a=c;if(k.A&&k.A[Qd]&Rd){var m=k.Z-Dd(k.H,k.O);0m&&(a=m)}c=a}try{this.Mg(c)}catch(v){if("number"!=typeof v)throw v;}var p=this.zc-this.A;this.md+=p;this.T.Af+=p;Gd(this,0,!0);Cd(this,p);this.T.zf-=p;0>=this.T.zf&&(this.T.zf+=this.T.Gj,this.pa&&Td(this.pa));this.T.yf-=p;0>=this.T.yf&&(this.T.yf+=this.T.Fj,this.pa&&Md(this.pa));this.T.We-=p;if(0>=this.T.We){this.T.We+=this.T.th; +break}}while(this.ea.vb)}catch(v){this.Jb();Bd(this);this.pa&&this.pa.stop(Ja(),Dd(this));Kb(this,!1);Fb(this,v.stack||v.message);return}c=setTimeout;d=this.Rl;this.T.qe=Ja();e=this.T.Ej;this.T.Af&&(e=Math.round(e*this.T.Af/this.T.th));e-=this.T.qe-this.T.tg;if(f=this.T.qe-this.T.Xd)this.T.Wd=Math.round(this.md/(10*f))/100,864E5<=f&&(this.Dd=0,this.V&&Nd(this.V,!0),Ed(this));if(0>e||this.T.Wde&&(this.T.Xd-=e),e=0;this.T.uh+=this.T.Af;this.T.qe+=e;c(d,e)}else Bd(this),this.pa&&this.pa.stop(Ja(), +Dd(this))};l.Mg=function(){return 0};l.Jb=function(a){Jb(this,!0);this.zc-=this.A;this.A=0;Gd(this,this.md);this.md=0;if(this.ea.vb){this.ea.vb=!1;this.V&&this.V.stop();var b=this.na.run;b&&(b.textContent="Run")}this.ea.complete=a};function Bd(a,b){a.pa&&(Td(a.pa,b),Md(a.pa,b))}var Id=30,Jd=60,Kd=2,xd=["power","reset"]; +function Ud(a,b,c,d){this.gc=a;this.ba=a.ba;this.id=b;this.$b=c||"";this.U=0;this.Ka=65535;this.Nb=this.Ka+1;this.Ab=this.qc=this.ext=this.lb=this.type=this.ua=0;this.Lb=-1;this.W=this.Jc=2;this.R=this.wa=65535;this.G=this.nh;this.D=this.ej;this.F=this.gj;this.A={U:-1,ua:0,Ka:0,lb:0,type:0,ext:0,Lb:-1};1==this.id&&(this.Kf=0,this.C=null,this.Qe=!1,this.H=Array(32),this.B=[]);Vd(this,!0,d)}function Wd(a,b){a.B.push(b);return[a.B.length,Xd]}l=Ud.prototype; +l.nh=function(a){this.U=a&65535;return this.ua=this.U<<4};l.rg=function(a,b){var c,d,e=this.gc;a&=65535;a&4?(c=e.Eb.ua,d=c+e.Eb.Ka|0):(c=e.Kb,d=e.Pc);if(c){c=c+(a&65528)|0;if(d-c|0)return e.A-=15,Yd(this,c,a,b);this.id>>0)+b<=this.Nb?this.ua+a|0:this.lg()};l.Al=function(a,b){return(a>>>0)+b>this.Nb?this.ua+a|0:this.lg()};l.lg=function(){y.call(this.gc,13,0);return-1};l.fj=function(a,b){return(a>>>0)+b<=this.Nb?this.ua+a|0:this.mg()}; +l.Bl=function(a,b){return(a>>>0)+b>this.Nb?this.ua+a|0:this.mg()};l.mg=function(){y.call(this.gc,13,0);return-1};function ae(a,b,c,d,e){a.U=b;a.ua=d;a.Ka=e;a.Nb=(e>>>0)+1;a.lb=c;a.type=c&7936;a.ext=c>>16&192;a.Lb=(b&4?a.gc.Eb.ua:a.gc.Kb)+(b&65528)|0;a.id>>0)+1;a.lb=e;a.type=e&7936;a.ext=0;a.Lb=b;a.id>>0)+1,a.lb=a.A.lb,a.type=a.A.type,a.ext=a.A.ext,a.Lb=a.A.Lb,a.A.U=-1,Vd(a,!0,!0,!1),a.ua;a.A.U=-1;var f=e.ja(b+0),g=e.ja(b+4),h=g&7936,k=e.ja(b+2)|(g&255)<<16,m=e.ja(b+6),p=c&65528;if(80386<=e.ca){var v=f,k=k|(m&65280)<<16,f=f|(m&15)<<16;m&128&&(f=f<<12|4095)}switch(a.id){case de:var u=a.C;a.Qe=!1;if(u&&c==Xd&&a.B.length){var E=a.B[a.Kf-1];if(E&&!E())return-1}var K=c&3,H=(g&24576)>>13,E=-1,I,T;p||b>= +e.Kb&&b=a.Ab&&(K>a.Ab&&(E=ee(e),fe(e,ee(e),!0),ge(e,E),a.Qe=!0),E=0);else{if(256==h||2304==h)return he(a,c,u)?a.ua:-1;if(1024==h)E=2,T=0,Kh||2048==(h&2560))return y.call(e,13,c&65532),-1;if(!(g&32768))return y.call(e,11,c&65532),-1}break;case $d:if(!p||4096>h||512!=(h&2560))return y.call(e,13,c&65532),-1;if(!(g&32768))return y.call(e,12,c&65532), +-1;break;case be:u=h&-513;if(!p||256!=u&&2304!=u)return y.call(e,13,c&65532),-1;2304==u&&(a.Ti=k+e.ja(k+102)|0,a.ul=k+a.Ka|0);break;case Zd:if(!(h&4096)&&768>>0)+1,a.lb=g,a.type=h,a.ext=m,a.Lb=b,Vd(a,!0,!0,!1));return k} +function he(a,b,c){var d=a.gc,e=a.Ab,f=d.la.U,g=d.la.ua;if(!c){if(!(d.la.type&512))return y.call(d,13,b&65532),!1;d.fb(d.la.Lb+4,d.la.lb&=-513)}if(-1===d.la.load(b))return!1;var h=d.la.ua;if(!1!==c){if(d.la.type&512)return y.call(d,13,b&65532),!1;d.fb(d.la.Lb+4,d.la.lb|=512)}d.la.type=d.la.type&-513|d.la.lb&512;256==d.la.type||768==d.la.type?(d.fb(g+14,A(d)),d.fb(g+16,qe(d)),d.fb(g+18,d.D),d.fb(g+20,d.I),d.fb(g+22,d.L),d.fb(g+24,d.G),d.fb(g+26,z(d)),d.fb(g+28,d.M),d.fb(g+30,d.K),d.fb(g+32,d.J),d.fb(g+ +34,d.oa.U),d.fb(g+36,d.Z.U),d.fb(g+38,d.Y.U),d.fb(g+40,d.Ca.U),d.Eb.load(d.ja(h+42)),re(d,d.ja(h+16)|(c?16384:0)),d.D=d.ja(h+18),d.I=d.ja(h+20),d.L=d.ja(h+22),d.G=d.ja(h+24),d.M=d.ja(h+28),d.K=d.ja(h+30),d.J=d.ja(h+32),d.oa.load(d.ja(h+34)),d.Ca.load(d.ja(h+40)),se(d,d.ja(h+14),d.ja(h+36)),b=38,g=26,a.Ab>>0)+1)}; +function Vd(a,b,c,d){void 0===c&&(c=!!(a.gc.qa&1));a.Oc=!1;if(c)if(a.load=a.rg,a.Dj=a.gn,a.bc=a.dj,a.cc=a.fj,void 0===d&&(d=!!(a.gc.O&131072)),d)a.load=a.G,a.bc=a.D,a.cc=a.F,a.Ab=a.qc=3,a.W=2,a.R=a.wa=65535,a.Ka=65535,a.Nb=a.Ka+1,a.Jc=a.W,a.Lb=-1,a.Qe=!1;else{if(!(a.U&-4))a.bc=a.lg,a.cc=a.mg;else if(a.type&4096){6144==(a.type&6656)&&(a.bc=a.lg);if(a.type&2048||!(a.type&512))a.cc=a.mg;1024==(a.type&3072)&&(a.bc==a.dj&&(a.bc=a.Al),a.cc==a.fj&&(a.cc=a.Bl),a.Oc=!0);b&&a.id>13,80386>a.gc.ca||!(a.ext&64)?(a.W=2,a.R=65535):(a.W=4,a.R=-1),a.Jc=a.W,a.wa=a.R)}else a.load=a.nh,a.Dj=a.hn,a.bc=a.ej,a.cc=a.gj,a.Ab=a.qc=0,a.Lb=-1,a.Qe=!1}var de=1,pe=2,$d=3,be=4,Zd=6,Xd=1; +function ue(a){var b=+a.model||8088,c;switch(b){default:c=4772727;break;case 80286:c=6E6;break;case 80386:c=16E6}wd.call(this,a,c);this.ca=b;a=a.stepping;this.xe=b+(a?oa(a,16):0);this.Si=61442;this.Qd=1792;this.ti=28672;this.Wf=4;this.Ta=255;this.B=80286<=this.ca?Pb:Ob;this.va=ze;this.cj=Ae;this.jj=Be;this.oj=Ce;if(80186<=this.ca&&(this.va=ze.slice(),this.cj=Ae.slice(),this.jj=Be.slice(),this.Ta=31,this.va[15]=De,this.va[96]=Ee,this.va[97]=Fe,this.va[98]=Ge,this.va[99]=De,this.va[100]=De,this.va[101]= +De,this.va[102]=De,this.va[103]=De,this.va[104]=He,this.va[105]=Ie,this.va[106]=Je,this.va[107]=Ke,this.va[108]=Le,this.va[109]=Me,this.va[110]=Ne,this.va[111]=Oe,this.va[192]=Pe,this.va[193]=Qe,this.va[200]=Re,this.va[201]=Se,this.va[241]=Te,this.cj[7]=Ue,this.jj[7]=Ue,80286<=this.ca)){this.Si=2;this.Qd|=28672;this.Wf=0;this.va[15]=Ve;this.Pd=We.slice();for(b=0;b=this.xe&&(this.Pd[166]=gf,this.Pd[167]=hf)}}this.Zf=[];this.$f=[];this.bg=0;zd(this);this.ea.complete=this.ea.kj=!1;this.uj=0;this.sc=this.aa=[];this.hb=this.Og=this.Db=this.Xf=this.ef=this.ff=this.ed=0;jf(this)}ba(ue,wd);function kf(a,b,c,d){b=(d?a.sc:a.aa)[b>>>a.hb];c?--b.je||nd(b):--b.ie||id(b);d&&sc(a)} +function lf(a){var b;if(a.aa===a.sc){a.aa=Array(a.Xf);a.ag=new x(null,0,0,bd,null,a);mc(a.ag,a.ba);for(b=0;b>>20,f=a.sc[(a.Wc+e&a.ff)>>>a.hb],g=f.Nd(e);if(!(g&1))return d||nf.call(a,b,!1,c),a.gf;if(!(g&4)&&3==a.Ma)return d||nf.call(a,b,!0,c),a.gf;var h=(b&4190208)>>>10,g=a.sc[((g&-4096)+h&a.ff)>>>a.hb],k=g.Nd(h);if(!(k&1))return d||nf.call(a,b,!1,c),a.gf;if(!(k&4)&&3==a.Ma)return d||nf.call(a,b,!0,c),a.gf;c=a.sc[((k&-4096)+(b&4095)&a.ff)>>>a.hb];if(d)return c;d=b>>>a.hb;k=a.aa[d];b&=-4096;var m;0>2;b.ob=g;b.B=h>>2;Nb&&Ec&&c.X&&!c.controller&&!c.ie&&!c.je?(b.Pa=c.Pa,b.Rd=c.Rd,b.X=c.X,zc(b,vd)):(b.F=c?td(32):0,b.J=c?td(96):0,zc(b,ed));mc(b,a.ba,k);a.aa[d]=b;a.Yf.push(d);return b}function of(a){a.aa!==a.sc&&(a.aa=a.sc,a.ag=null,a.Yf=null,a.gf=null)}l=ue.prototype;l.reset=function(){this.ea.vb&&this.Jb();jf(this);zd(this);this.ea.error=!1}; function uf(a,b){var c;switch(b){case 0:c=a.D;break;case 1:c=a.I;break;case 2:c=a.L;break;case 3:c=a.G;break;case 4:c=z(a);break;case 5:c=a.M;break;case 6:c=a.K;break;case 7:c=a.J}return c}function vf(a,b,c){switch(b){case 0:a.D=c;break;case 1:a.I=c;break;case 2:a.L=c;break;case 3:a.G=c;break;case 4:ge(a,c);break;case 5:a.M=c;break;case 6:a.K=c;break;case 7:a.J=c}} -function jf(a){a.D=0;a.G=0;a.I=0;a.L=0;a.Hc=0;a.M=0;a.K=0;a.J=0;a.vc=!1;a.Ba=a.Ya=0;a.bn=[0,0];a.cn=[0,0];a.xa=0;a.sj=0;a.ga=0;a.qa=65520;a.Pb=0;a.cd=1023;a.O=a.lc=0;a.ze=a.hf=a.ye=a.Ae=0;a.Uc=-1;a.Ad=a.Vc=-1;a.Bd=a.ta=-1;a.Z=new Ud(a,de,"CS");a.Ca=new Ud(a,pe,"DS");a.oa=new Ud(a,pe,"ES");a.Y=new Ud(a,$d,"SS");ge(a,0);fe(a,0);if(80386<=a.ca){switch(a.we){case 80562:case 80563:a.L=771;break;case 80578:a.L=772;break;case 80594:a.L=773;break;case 80595:case 80596:a.L=776}a.qa=16;a.Og=0;a.Cd=0;a.Wc=0; -a.Qb=[0,0,0,0,null,null,0,0];a.dg=[null,null,null,null,null,null,0,0];a.Ga=new Ud(a,pe,"FS");a.Ha=new Ud(a,pe,"GS");of(a)}a.Qg=new Ud(a,0,"NULL");a.Da=a.Ca;a.Rb=a.Y;a.N=a.ha=0;a.C=a.F=-1;a.ab=a.Qg;a.Xa=0;if(80286>a.ca)se(a,0,65535);else{a.Kb=0;a.Pc=65535;a.Eb=new Ud(a,5,"LDT",!0);a.la=new Ud(a,be,"TSS",!0);a.xb=new Ud(a,Zd,"VER",!0);se(a,65520,61440);var b,c=A(a);b=a.Z;var d=-65536;80386>b.gc.ca&&(d&=16777215);b=b.ua=d;a.da=b+c|0;a.Pg=(b>>>0)+(a.Z.Ka>>>0)+1}re(a,0);ie(a)} -function wf(a){2==a.Jc?(a.Sb=a.ja,a.kc=xf,a.tc=yf,a.kd=zf,2==a.W?(a.ma=Af,a.za=Bf,a.ib=Cf):(a.ma=Df,a.za=Ef,a.ib=Ff)):(a.Sb=a.ia,a.kc=Gf,a.tc=Hf,a.kd=If,2==a.W?(a.ma=Jf,a.za=Kf,a.ib=Lf):(a.ma=Mf,a.za=Nf,a.ib=Of))}function je(a,b){a.W!=b&&(a.ha|=1024,a.W=b,a.R=2==b?65535:-1,Pf(a))}function Pf(a){2==a.W?(a.Fb=32768,a.jb=a.ja,a.yb=a.fb,2==a.Jc?(a.ma=Af,a.za=Bf,a.ib=Cf):(a.ma=Jf,a.za=Kf,a.ib=Lf)):(a.Fb=-2147483648,a.jb=a.ia,a.yb=a.bb,2==a.Jc?(a.ma=Df,a.za=Ef,a.ib=Ff):(a.ma=Mf,a.za=Nf,a.ib=Of))} -function Qf(a){a.Jc=a.Z.Jc;a.wa=a.Z.wa;wf(a);a.W=a.Z.W;a.R=a.Z.R;Pf(a);a.ha&=-3073}l.uj=function(){var a=this.D+this.G+this.I+this.L+z(this)+this.M+this.K+this.J|0;return a=a+A(this)+this.Z.U+this.Ca.U+this.Y.U+this.oa.U+qe(this)|0};function Rf(a,b,c){void 0===a.Yf[b]&&(a.Yf[b]=[]);a.Yf[b].push(c)}function Sf(a,b,c){c&&(null==a.Zf[b]&&a.ag++,a.Zf[b]=c)}function Tf(a,b){var c=a.Zf[b];null!=c&&(c(--a.ag),delete a.Zf[b])} -function Uf(a,b){for(var c=a.Qb[7],d=c>>16,e=0;4>e;e++){if(c&3){var f=!!(d&1),g=a.Qb[e],g=g&~(d>>2&3);b?a.aa[g>>>a.hb].Gd(g&a.Db,f,a):(g=a.aa[g>>>a.hb],f?--g.ie||nd(g):--g.he||id(g))}c>>=2;d>>=4}}function qd(a,b,c,d){if(!(a.N&8192)&&a.Qb[7]&255){c--;var e=a.Qb[7],f=e>>16;d=d?1:0==d?3:0;for(var g=0;4>g;g++){if(e&3&&(f&3)==d){var h=f>>2;if(b+c>=a.Qb[g]&&b<=a.Qb[g]+h){a.Qb[6]|=1<>=2;f>>=4}}} -function ie(a,b,c){void 0===b&&(b=!!(a.qa&1));void 0===c&&(c=!!(a.O&131072));a.nj=b&&!c?Vf:Ce;Vd(a.Z,!1,b,c);Vd(a.Ca,!1,b,c);Vd(a.Y,!1,b,c);Vd(a.oa,!1,b,c);80386<=a.ca&&(Vd(a.Ga,!1,b,c),Vd(a.Ha,!1,b,c));Qf(a)} -l.save=function(){var a=new Wf(this);a.set(0,[this.D,this.G,this.I,this.L,z(this),this.M,this.K,this.J]);var b=A(this),c=this.Z.save(),d=this.Ca.save(),e=this.Y.save(),f=this.oa.save(),g;null!=this.Kb?(g=[this.qa,this.Kb,this.Pc,this.Pb,this.cd,this.Eb.save(),this.la.save(),this.lc],80386<=this.ca&&(g.push(this.Og),g.push(this.Cd),g.push(this.Wc),g.push(this.Qb),g.push(this.dg))):g=null;b=[b,c,d,e,f,g,qe(this)];80386<=this.ca&&(b.push(this.Ga.save()),b.push(this.Ha.save()));a.set(1,b);a.set(2,[this.Da.$b, +function jf(a){a.D=0;a.G=0;a.I=0;a.L=0;a.Hc=0;a.M=0;a.K=0;a.J=0;a.vc=!1;a.Ba=a.Ya=0;a.cn=[0,0];a.dn=[0,0];a.xa=0;a.tj=0;a.ga=0;a.qa=65520;a.Pb=0;a.cd=1023;a.O=a.lc=0;a.Ae=a.jf=a.ze=a.Be=0;a.Uc=-1;a.Ad=a.Vc=-1;a.Bd=a.ta=-1;a.Z=new Ud(a,de,"CS");a.Ca=new Ud(a,pe,"DS");a.oa=new Ud(a,pe,"ES");a.Y=new Ud(a,$d,"SS");ge(a,0);fe(a,0);if(80386<=a.ca){switch(a.xe){case 80562:case 80563:a.L=771;break;case 80578:a.L=772;break;case 80594:a.L=773;break;case 80595:case 80596:a.L=776}a.qa=16;a.Pg=0;a.Cd=0;a.Wc=0; +a.Qb=[0,0,0,0,null,null,0,0];a.eg=[null,null,null,null,null,null,0,0];a.Ga=new Ud(a,pe,"FS");a.Ha=new Ud(a,pe,"GS");of(a)}a.Rg=new Ud(a,0,"NULL");a.Da=a.Ca;a.Rb=a.Y;a.N=a.ha=0;a.C=a.F=-1;a.eb=a.Rg;a.Xa=0;if(80286>a.ca)se(a,0,65535);else{a.Kb=0;a.Pc=65535;a.Eb=new Ud(a,5,"LDT",!0);a.la=new Ud(a,be,"TSS",!0);a.xb=new Ud(a,Zd,"VER",!0);se(a,65520,61440);var b,c=A(a);b=a.Z;var d=-65536;80386>b.gc.ca&&(d&=16777215);b=b.ua=d;a.da=b+c|0;a.Qg=(b>>>0)+(a.Z.Ka>>>0)+1}re(a,0);ie(a)} +function wf(a){2==a.Jc?(a.Sb=a.ja,a.kc=xf,a.tc=yf,a.kd=zf,2==a.W?(a.ma=Af,a.za=Bf,a.ib=Cf):(a.ma=Df,a.za=Ef,a.ib=Ff)):(a.Sb=a.ia,a.kc=Gf,a.tc=Hf,a.kd=If,2==a.W?(a.ma=Jf,a.za=Kf,a.ib=Lf):(a.ma=Mf,a.za=Nf,a.ib=Of))}function je(a,b){a.W!=b&&(a.ha|=1024,a.W=b,a.R=2==b?65535:-1,Pf(a))}function Pf(a){2==a.W?(a.Fb=32768,a.jb=a.ja,a.yb=a.fb,2==a.Jc?(a.ma=Af,a.za=Bf,a.ib=Cf):(a.ma=Jf,a.za=Kf,a.ib=Lf)):(a.Fb=-2147483648,a.jb=a.ia,a.yb=a.ab,2==a.Jc?(a.ma=Df,a.za=Ef,a.ib=Ff):(a.ma=Mf,a.za=Nf,a.ib=Of))} +function Qf(a){a.Jc=a.Z.Jc;a.wa=a.Z.wa;wf(a);a.W=a.Z.W;a.R=a.Z.R;Pf(a);a.ha&=-3073}l.vj=function(){var a=this.D+this.G+this.I+this.L+z(this)+this.M+this.K+this.J|0;return a=a+A(this)+this.Z.U+this.Ca.U+this.Y.U+this.oa.U+qe(this)|0};function Rf(a,b,c){void 0===a.Zf[b]&&(a.Zf[b]=[]);a.Zf[b].push(c)}function Sf(a,b,c){c&&(null==a.$f[b]&&a.bg++,a.$f[b]=c)}function Tf(a,b){var c=a.$f[b];null!=c&&(c(--a.bg),delete a.$f[b])} +function Uf(a,b){for(var c=a.Qb[7],d=c>>16,e=0;4>e;e++){if(c&3){var f=!!(d&1),g=a.Qb[e],g=g&~(d>>2&3);b?a.aa[g>>>a.hb].Gd(g&a.Db,f,a):(g=a.aa[g>>>a.hb],f?--g.je||nd(g):--g.ie||id(g))}c>>=2;d>>=4}}function qd(a,b,c,d){if(!(a.N&8192)&&a.Qb[7]&255){c--;var e=a.Qb[7],f=e>>16;d=d?1:0==d?3:0;for(var g=0;4>g;g++){if(e&3&&(f&3)==d){var h=f>>2;if(b+c>=a.Qb[g]&&b<=a.Qb[g]+h){a.Qb[6]|=1<>=2;f>>=4}}} +function ie(a,b,c){void 0===b&&(b=!!(a.qa&1));void 0===c&&(c=!!(a.O&131072));a.oj=b&&!c?Vf:Ce;Vd(a.Z,!1,b,c);Vd(a.Ca,!1,b,c);Vd(a.Y,!1,b,c);Vd(a.oa,!1,b,c);80386<=a.ca&&(Vd(a.Ga,!1,b,c),Vd(a.Ha,!1,b,c));Qf(a)} +l.save=function(){var a=new Wf(this);a.set(0,[this.D,this.G,this.I,this.L,z(this),this.M,this.K,this.J]);var b=A(this),c=this.Z.save(),d=this.Ca.save(),e=this.Y.save(),f=this.oa.save(),g;null!=this.Kb?(g=[this.qa,this.Kb,this.Pc,this.Pb,this.cd,this.Eb.save(),this.la.save(),this.lc],80386<=this.ca&&(g.push(this.Pg),g.push(this.Cd),g.push(this.Wc),g.push(this.Qb),g.push(this.eg))):g=null;b=[b,c,d,e,f,g,qe(this)];80386<=this.ca&&(b.push(this.Ga.save()),b.push(this.Ha.save()));a.set(1,b);a.set(2,[this.Da.$b, this.Rb.$b,this.N,this.ha,this.Xa,this.C,this.F]);a.set(3,[0,this.Dd,this.T.Kd]);a.set(4,Kc(this.ka,!!(this.qa&-2147483648)));return a.data()}; -l.restore=function(a){var b=a[0];this.D=b[0];this.G=b[1];this.I=b[2];this.L=b[3];var c=b[4];this.M=b[5];this.K=b[6];this.J=b[7];b=a[1];this.Z.restore(b[1]);this.Ca.restore(b[2]);this.Y.restore(b[3]);this.oa.restore(b[4]);var d=b[5];d&&d.length&&(this.qa=d[0],this.Kb=d[1],this.Pc=d[2],this.Pb=d[3],this.cd=d[4],this.Eb.restore(d[5]),this.la.restore(d[6]),this.lc=d[7],80386<=this.ca&&(this.Og=d[8],this.Cd=d[9],this.Wc=d[10],this.Qb=d[11],this.dg=d[12]),ie(this));re(this,b[6]);var d=!1,e;a:{e=this.ka; +l.restore=function(a){var b=a[0];this.D=b[0];this.G=b[1];this.I=b[2];this.L=b[3];var c=b[4];this.M=b[5];this.K=b[6];this.J=b[7];b=a[1];this.Z.restore(b[1]);this.Ca.restore(b[2]);this.Y.restore(b[3]);this.oa.restore(b[4]);var d=b[5];d&&d.length&&(this.qa=d[0],this.Kb=d[1],this.Pc=d[2],this.Pb=d[3],this.cd=d[4],this.Eb.restore(d[5]),this.la.restore(d[6]),this.lc=d[7],80386<=this.ca&&(this.Pg=d[8],this.Cd=d[9],this.Wc=d[10],this.Qb=d[11],this.eg=d[12]),ie(this));re(this,b[6]);var d=!1,e;a:{e=this.ka; var f=a[4],g;for(g=0;g>>0)+(a.Z.Ka>>>0)+1;a.Ma=a.Z.Ab;Qf(a)}function se(a,b,c,d){var e=a.Z;e.Jf=b;e.C=d;b=e.load(c);return-1!==b?(Zf(a,b+(a.Z.Jf&a.Z.R)),a.Z.Pe):null} -function $f(a,b){b=(a.da>>>0)+b;b>a.Pg&&(8088>=a.ca||a.Z.Ka==a.Z.wa?b=a.Z.ua+(b-a.Pg&a.R):y.call(a,13,0));return b|0}function ag(a){a.da=a.Bd}function z(a){return a.Hc&~a.Y.wa|a.Aa-a.Y.ua}function ge(a,b){a.Hc=b;a.Aa=a.Y.ua+(b&a.Y.wa)|0}function bg(a,b,c,d,e,f){if(63!=(e&63)&&e!=a.resultType){var g=(e^a.resultType)&a.resultType;g&&(g&1&&cg(a),g&2&&dg(a),g&4&&eg(a),g&8&&fg(a),g&16&&gg(a),g&32&&hg(a))}f?(a.ze=d,a.ye=b):(a.ze=b,a.ye=d);a.hf=c;a.Ae=d;a.resultType=e} -function ig(a,b,c,d,e){a.resultType=c|26;a.Ae=b;d?jg(a):kg(a);e?lg(a):mg(a);return b}function ng(a,b,c,d){c&d?jg(a):kg(a);(b^c)&d?lg(a):mg(a)}function og(a){return cg(a)?1:0}function cg(a){a.resultType&1&&(a.O&=-2,(a.ze^(a.ze^a.hf)&(a.hf^a.ye))&a.resultType&-2147450752&&(a.O|=1),a.resultType&=-2);return a.O&1}function dg(a){a.resultType&2&&(a.O&=-5,38505>>((a.Ae^a.Ae>>4)&15)&1&&(a.O|=4),a.resultType&=-3);return a.O&4} -function eg(a){a.resultType&4&&(a.O&=-17,(a.ye^a.ze^a.hf)&16&&(a.O|=16),a.resultType&=-5);return a.O&16}function fg(a){a.resultType&8&&(a.O&=-65,a.Ae&((a.resultType&-2147450752)-1|a.resultType&-2147450752)||(a.O|=64),a.resultType&=-9);return a.O&64}function gg(a){a.resultType&16&&(a.O&=-129,a.Ae&a.resultType&-2147450752&&(a.O|=128),a.resultType&=-17);return a.O&128} -function hg(a){a.resultType&32&&(a.O&=-2049,(a.ze^a.ye)&(a.hf^a.ye)&a.resultType&-2147450752&&(a.O|=2048),a.resultType&=-33);return a.O&2048}function kg(a){a.resultType&=-2;a.O&=-2}function pg(a){a.resultType&=-5;a.O&=-17}function qg(a){a.resultType&=-9;a.O&=-65}function mg(a){a.resultType&=-33;a.O&=-2049}function jg(a){a.resultType&=-2;a.O|=1}function rg(a){a.resultType&=-5;a.O|=16}function sg(a){a.resultType&=-9;a.O|=64}function lg(a){a.resultType&=-33;a.O|=2048} -function qe(a){return a.O&-2262|cg(a)|dg(a)|eg(a)|fg(a)|gg(a)|hg(a)}function tg(a,b){b|=a.qa&1|65520;a.qa=a.qa&-65536|b&65535;a.qa&1&&ie(a,!0)}function re(a,b,c){a.qa&1||(b&=~a.si);void 0===c&&(c=a.Ma);c?b=b&-12289|a.O&12288:a.lc=(b&12288)>>12;c>a.lc&&(b=b&-513|a.O&512);a.resultType=128;a.O=a.O&~(a.Qd|2261)|b&(a.Qd|2261)|a.Ri;a.O&256&&(a.Xa|=2,a.N|=4)} -function ug(a,b,c,d){var e=0;if(a.qa&1&&(a.Ma>a.lc||a.O&131072)&&a.la.Si)for(var f=a.la.Si+(b>>>3),e=(1<>>=8,f++;return e?(t(a,256)&&Lb(a,"checkIOPM("+sa(b)+","+c+","+(d?"input":"output")+"): trapped",!0,!0),y.call(a,13,0),!1):!0} -l.Cb=function(a,b,c){switch(b){case "EAX":case "EBX":case "ECX":case "EDX":case "ESP":case "EBP":case "ESI":case "EDI":case "EIP":case "AX":case "BX":case "CX":case "DX":case "SP":case "BP":case "SI":case "DI":case "IP":case "PC":case "CS":case "DS":case "SS":case "ES":case "FS":case "GS":case "CR0":case "CR2":case "CR3":case "PS":case "C":case "P":case "A":case "Z":case "S":case "T":case "I":case "D":case "V":this.na[b]=c;this.tj++;a=!0;break;default:a=wd.prototype.Cb.call(this,a,b,c)}return a}; -function xg(a,b,c,d){var e=(d?a.sc:a.aa)[(b&a.ed)>>>a.hb];e&&e.type==bd&&(e=sd(a,b,!1,!0));if(e){var f=b&a.Db;if(!c||1==c)return e.Zd(f,b);if(2==c)return f>>this.hb].Bc(a&this.Db,a)}; -l.ja=function(a){var b=a&this.Db,c=(a&this.ed)>>>this.hb;this.A-=this.B.zg;if(b>>this.hb;if(b>>this.hb].Dc(a&this.Db,b&255,a)}; -l.fb=function(a,b){var c=a&this.Db,d=(a&this.ed)>>>this.hb;this.A-=this.B.zg;c>8&255,a+1))};l.bb=function(a,b){var c=a&this.Db,d=(a&this.ed)>>>this.hb;this.A-=this.B.zg;if(c>>=8}}; -function yg(a,b,c){a.ab=b;a.lb=c&a.wa;a.C=b.bc(a.lb,1);return a.N&1?0:a.Ia(a.C)}function D(a,b){return yg(a,a.Da,b)}function zg(a,b){return yg(a,a.Rb,b)}function Ag(a,b,c){a.ab=b;a.lb=c&a.wa;a.C=b.bc(a.lb,a.W);return a.N&1?0:a.jb(a.C)}function F(a,b){a.ab=a.Da;a.lb=b&a.wa;a.C=a.ab.bc(a.lb,2);return a.N&1?0:a.ja(a.C)}function Bg(a,b){a.ab=a.Rb;a.lb=b&a.wa;a.C=a.ab.bc(a.lb,2);return a.N&1?0:a.ja(a.C)}function G(a,b){a.ab=a.Da;a.lb=b&a.wa;a.C=a.ab.bc(a.lb,4);return a.N&1?0:a.ia(a.C)} -function Cg(a,b){a.ab=a.Rb;a.lb=b&a.wa;a.C=a.ab.bc(a.lb,4);return a.N&1?0:a.ia(a.C)}function Dg(a,b){a.N&2||a.fc(a.ab.cc(a.lb,1),b)}function Eg(a,b){a.N&2||a.fb(a.ab.cc(a.lb,2),b)}function Fg(a,b){a.N&2||a.bb(a.ab.cc(a.lb,4),b)}function ke(a,b,c){return a.jb(b.bc(c,a.W))}l.ra=function(){var a=$f(this,1),b=this.Ia(this.da);this.da=a;return b};function Gg(a){var b=$f(a,2),c=a.ja(a.da);a.da=b;return c}function J(a){var b=$f(a,a.Jc),c=a.Sb(a.da);a.da=b;return c} -l.Ea=function(){var a=$f(this,this.W),b=this.jb(this.da);this.da=a;return b};l.S=function(){var a=$f(this,1),b=this.Ia(this.da)<<24>>24;this.da=a;return b};function ee(a){var b=a.jb(a.Aa);a.Aa=a.Aa+a.W|0;var c=a.cg-a.Aa|0;0>c&&0<=(a.cg^a.Aa)&&(8088>=a.ca||!a.Y.Oc&&a.Y.Ka==a.Y.wa||a.Y.Oc&&!a.Y.Ka?ge(a,a.Aa-a.Y.ua&a.Y.wa):-1>c&&y.call(a,12,0));return b} -function le(a,b,c,d){c=a.Aa-c|0;0>(c-a.gf|0)&&0<=(a.gf^c)&&(8088>=a.ca||!a.Y.Oc&&a.Y.Ka==a.Y.wa||a.Y.Oc&&!a.Y.Ka?(ge(a,c-a.Y.ua&a.Y.wa),c=a.Aa):y.call(a,12,0));switch(d){case 1:a.fc(c,b);break;case 2:a.fb(c,b);break;case 4:a.bb(c,b)}a.Aa=c}function oe(a,b){var c=a.Aa-a.W|0;0>(c-a.gf|0)&&0<=(a.gf^c)&&(8088>=a.ca||!a.Y.Oc&&a.Y.Ka==a.Y.wa||a.Y.Oc&&!a.Y.Ka?(ge(a,c-a.Y.ua&a.Y.wa),c=a.Aa):y.call(a,12,0));a.yb(c,b);a.Aa=c} -function Hg(a,b,c){var d=4;1==b.length&&(d=1,c=c?1:0);if(80386>a.ca)2this.ca?0:1,e=0;2>e;e++){switch(d){case 0:if(this.Xa&1&&this.O&512){var f=Jg(this.V);if(-1<=f&&(this.Xa&=-2,0<=f)){this.Xa&=-5; +this.N=b[2];this.ha=b[3];this.Xa=b[4];this.C=b[5];this.F=b[6];b=a[3];this.Dd=b[1];Ed(this,b[2]);return d};function Xf(a,b){switch(b){case "CS":return a.Z;case "DS":return a.Ca;case "SS":return a.Y;case "ES":return a.oa;case "NULL":return a.Rg;default:return[0,b,0,0,""]}}function Yf(a,b){null!=se(a,A(a),b)&&(a.N|=a.Wf)}function me(a,b){-1!==a.Ca.load(b)&&(a.N|=a.Wf)} +function fe(a,b,c){var d=z(a);-1!==a.Y.load(b)&&(ge(a,d),a.Y.Oc?(a.dg=a.Y.ua+a.Y.wa|0,a.hf=a.Y.ua+a.Y.Ka|0):(a.dg=a.Y.ua+a.Y.Ka|0,a.hf=a.Y.ua),c||(a.N|=4))}function ne(a,b){-1!==a.oa.load(b)&&(a.N|=a.Wf)}function A(a){return a.da-a.Z.ua|0}function C(a,b){a.da=a.Z.ua+(b&a.R)|0}function Zf(a,b){a.da=b;a.Qg=(a.Z.ua>>>0)+(a.Z.Ka>>>0)+1;a.Ma=a.Z.Ab;Qf(a)}function se(a,b,c,d){var e=a.Z;e.Kf=b;e.C=d;b=e.load(c);return-1!==b?(Zf(a,b+(a.Z.Kf&a.Z.R)),a.Z.Qe):null} +function $f(a,b){b=(a.da>>>0)+b;b>a.Qg&&(8088>=a.ca||a.Z.Ka==a.Z.wa?b=a.Z.ua+(b-a.Qg&a.R):y.call(a,13,0));return b|0}function ag(a){a.da=a.Bd}function z(a){return a.Hc&~a.Y.wa|a.Aa-a.Y.ua}function ge(a,b){a.Hc=b;a.Aa=a.Y.ua+(b&a.Y.wa)|0}function bg(a,b,c,d,e,f){if(63!=(e&63)&&e!=a.resultType){var g=(e^a.resultType)&a.resultType;g&&(g&1&&cg(a),g&2&&dg(a),g&4&&eg(a),g&8&&fg(a),g&16&&gg(a),g&32&&hg(a))}f?(a.Ae=d,a.ze=b):(a.Ae=b,a.ze=d);a.jf=c;a.Be=d;a.resultType=e} +function ig(a,b,c,d,e){a.resultType=c|26;a.Be=b;d?jg(a):kg(a);e?lg(a):mg(a);return b}function ng(a,b,c,d){c&d?jg(a):kg(a);(b^c)&d?lg(a):mg(a)}function og(a){return cg(a)?1:0}function cg(a){a.resultType&1&&(a.O&=-2,(a.Ae^(a.Ae^a.jf)&(a.jf^a.ze))&a.resultType&-2147450752&&(a.O|=1),a.resultType&=-2);return a.O&1}function dg(a){a.resultType&2&&(a.O&=-5,38505>>((a.Be^a.Be>>4)&15)&1&&(a.O|=4),a.resultType&=-3);return a.O&4} +function eg(a){a.resultType&4&&(a.O&=-17,(a.ze^a.Ae^a.jf)&16&&(a.O|=16),a.resultType&=-5);return a.O&16}function fg(a){a.resultType&8&&(a.O&=-65,a.Be&((a.resultType&-2147450752)-1|a.resultType&-2147450752)||(a.O|=64),a.resultType&=-9);return a.O&64}function gg(a){a.resultType&16&&(a.O&=-129,a.Be&a.resultType&-2147450752&&(a.O|=128),a.resultType&=-17);return a.O&128} +function hg(a){a.resultType&32&&(a.O&=-2049,(a.Ae^a.ze)&(a.jf^a.ze)&a.resultType&-2147450752&&(a.O|=2048),a.resultType&=-33);return a.O&2048}function kg(a){a.resultType&=-2;a.O&=-2}function pg(a){a.resultType&=-5;a.O&=-17}function qg(a){a.resultType&=-9;a.O&=-65}function mg(a){a.resultType&=-33;a.O&=-2049}function jg(a){a.resultType&=-2;a.O|=1}function rg(a){a.resultType&=-5;a.O|=16}function sg(a){a.resultType&=-9;a.O|=64}function lg(a){a.resultType&=-33;a.O|=2048} +function qe(a){return a.O&-2262|cg(a)|dg(a)|eg(a)|fg(a)|gg(a)|hg(a)}function tg(a,b){b|=a.qa&1|65520;a.qa=a.qa&-65536|b&65535;a.qa&1&&ie(a,!0)}function re(a,b,c){a.qa&1||(b&=~a.ti);void 0===c&&(c=a.Ma);c?b=b&-12289|a.O&12288:a.lc=(b&12288)>>12;c>a.lc&&(b=b&-513|a.O&512);a.resultType=128;a.O=a.O&~(a.Qd|2261)|b&(a.Qd|2261)|a.Si;a.O&256&&(a.Xa|=2,a.N|=4)} +function ug(a,b,c,d){var e=0;if(a.qa&1&&(a.Ma>a.lc||a.O&131072)&&a.la.Ti)for(var f=a.la.Ti+(b>>>3),e=(1<>>=8,f++;return e?(t(a,256)&&Lb(a,"checkIOPM("+sa(b)+","+c+","+(d?"input":"output")+"): trapped",!0,!0),y.call(a,13,0),!1):!0} +l.Cb=function(a,b,c){switch(b){case "EAX":case "EBX":case "ECX":case "EDX":case "ESP":case "EBP":case "ESI":case "EDI":case "EIP":case "AX":case "BX":case "CX":case "DX":case "SP":case "BP":case "SI":case "DI":case "IP":case "PC":case "CS":case "DS":case "SS":case "ES":case "FS":case "GS":case "CR0":case "CR2":case "CR3":case "PS":case "C":case "P":case "A":case "Z":case "S":case "T":case "I":case "D":case "V":this.na[b]=c;this.uj++;a=!0;break;default:a=wd.prototype.Cb.call(this,a,b,c)}return a}; +function xg(a,b,c,d){var e=(d?a.sc:a.aa)[(b&a.ed)>>>a.hb];e&&e.type==bd&&(e=sd(a,b,!1,!0));if(e){var f=b&a.Db;if(!c||1==c)return e.Zd(f,b);if(2==c)return f>>this.hb].Bc(a&this.Db,a)}; +l.ja=function(a){var b=a&this.Db,c=(a&this.ed)>>>this.hb;this.A-=this.B.Ag;if(b>>this.hb;if(b>>this.hb].Dc(a&this.Db,b&255,a)}; +l.fb=function(a,b){var c=a&this.Db,d=(a&this.ed)>>>this.hb;this.A-=this.B.Ag;c>8&255,a+1))};l.ab=function(a,b){var c=a&this.Db,d=(a&this.ed)>>>this.hb;this.A-=this.B.Ag;if(c>>=8}}; +function yg(a,b,c){a.eb=b;a.wb=c&a.wa;a.C=b.bc(a.wb,1);return a.N&1?0:a.Ia(a.C)}function D(a,b){return yg(a,a.Da,b)}function zg(a,b){return yg(a,a.Rb,b)}function Ag(a,b,c){a.eb=b;a.wb=c&a.wa;a.C=b.bc(a.wb,a.W);return a.N&1?0:a.jb(a.C)}function F(a,b){a.eb=a.Da;a.wb=b&a.wa;a.C=a.eb.bc(a.wb,2);return a.N&1?0:a.ja(a.C)}function Bg(a,b){a.eb=a.Rb;a.wb=b&a.wa;a.C=a.eb.bc(a.wb,2);return a.N&1?0:a.ja(a.C)}function G(a,b){a.eb=a.Da;a.wb=b&a.wa;a.C=a.eb.bc(a.wb,4);return a.N&1?0:a.ia(a.C)} +function Cg(a,b){a.eb=a.Rb;a.wb=b&a.wa;a.C=a.eb.bc(a.wb,4);return a.N&1?0:a.ia(a.C)}function Dg(a,b){a.N&2||a.fc(a.eb.cc(a.wb,1),b)}function Eg(a,b){a.N&2||a.fb(a.eb.cc(a.wb,2),b)}function Fg(a,b){a.N&2||a.ab(a.eb.cc(a.wb,4),b)}function ke(a,b,c){return a.jb(b.bc(c,a.W))}l.ra=function(){var a=$f(this,1),b=this.Ia(this.da);this.da=a;return b};function Gg(a){var b=$f(a,2),c=a.ja(a.da);a.da=b;return c}function J(a){var b=$f(a,a.Jc),c=a.Sb(a.da);a.da=b;return c} +l.Ea=function(){var a=$f(this,this.W),b=this.jb(this.da);this.da=a;return b};l.S=function(){var a=$f(this,1),b=this.Ia(this.da)<<24>>24;this.da=a;return b};function ee(a){var b=a.jb(a.Aa);a.Aa=a.Aa+a.W|0;var c=a.dg-a.Aa|0;0>c&&0<=(a.dg^a.Aa)&&(8088>=a.ca||!a.Y.Oc&&a.Y.Ka==a.Y.wa||a.Y.Oc&&!a.Y.Ka?ge(a,a.Aa-a.Y.ua&a.Y.wa):-1>c&&y.call(a,12,0));return b} +function le(a,b,c,d){c=a.Aa-c|0;0>(c-a.hf|0)&&0<=(a.hf^c)&&(8088>=a.ca||!a.Y.Oc&&a.Y.Ka==a.Y.wa||a.Y.Oc&&!a.Y.Ka?(ge(a,c-a.Y.ua&a.Y.wa),c=a.Aa):y.call(a,12,0));switch(d){case 1:a.fc(c,b);break;case 2:a.fb(c,b);break;case 4:a.ab(c,b)}a.Aa=c}function oe(a,b){var c=a.Aa-a.W|0;0>(c-a.hf|0)&&0<=(a.hf^c)&&(8088>=a.ca||!a.Y.Oc&&a.Y.Ka==a.Y.wa||a.Y.Oc&&!a.Y.Ka?(ge(a,c-a.Y.ua&a.Y.wa),c=a.Aa):y.call(a,12,0));a.yb(c,b);a.Aa=c} +function Hg(a,b,c){var d=4;1==b.length&&(d=1,c=c?1:0);if(80386>a.ca)2this.ca?0:1,e=0;2>e;e++){switch(d){case 0:if(this.Xa&1&&this.O&512){var f=Jg(this.V);if(-1<=f&&(this.Xa&=-2,0<=f)){this.Xa&=-5; Kg.call(this,f);d=!0;break a}}break;case 1:if(this.Xa&2){this.Xa&=-3;80386<=this.ca&&(this.Qb[6]|=16384);Kg.call(this,1);d=!0;break a}}d=1-d}d=!1}if(d&&!a){this.P("interrupt dispatched");this.N=0;break}if(this.Xa&4){this.N=this.A=0;break}}if(b){if(Lg(this.ba,this.da,c)){this.Jb();break}c=1}this.N=0;this.va[this.ra()].call(this)}while(0>11;bh(this);ch(this,a[b++]);for(c=0;c=dh&&eh(a,fh))}function bh(a){a.fa&=-129;a.fa&~a.Zb&63&&(a.fa|=128);if(a.fa&128&&!(a.Zb&128))return a=a.V,a.ca>=dh?gh(a,fh):a.da&hh||Kg.call(a.H,2),!0;a=a.V;a.ca>=dh&&eh(a,fh);return!1}function ih(a,b){80387<=a.ca||(b&=-65);a.fa|=b;return bh(a)} function Og(a){return a.fa|a.B<<11}function jh(a,b){return isFinite(b)?!0:!ih(a,Infinity===b?8:16)}function kh(a,b,c){var d=null;null!=b&&null!=c&&(d=b+c,jh(a,d)||(d=null));return d}function lh(a,b,c){var d=null;null!=b&&null!=c&&(d=b-c,jh(a,d)||(d=null));return d}function mh(a,b,c){var d=null;null!=b&&null!=c&&(d=b*c,jh(a,d)||(d=null));return d}function nh(a,b,c){var d=null;null==b||null==c||!c&&ih(a,2)||(d=b/c,jh(a,d)||(d=null));return d} function oh(a,b,c){if(null!=b&&null!=c){var d=0;isNaN(b)||isNaN(c)?d=17664:(b-=c,0>b?d=256:b||(d=16384));a.fa=a.fa&-18177|d;return!0}return!1}function ph(a,b,c){if(null==b)return null;var d=a.Zb&3072;d?d=1024==d||3072==d&&0=c){if(ih(a,1))return null;d=-c}else if(d<-c){if(ih(a,1))return null;d=-c}a.G[0]=d|0;2147483648d&&(a.G[1]=-1))}return d} function qh(a,b){var c=3;a.C&1<=c;c<<=1)3!=(b&3)&&(a.C|=c),b>>=2}function rh(a){var b=a.B+0&7;return a.C&1<>16}function wh(a){return a.H.ia(a.H.C)}function xh(a){a.ha[0]=a.H.ia(a.H.C);return a.Z[0]}function yh(a){a.G[0]=a.H.ia(a.H.C);a.G[1]=a.H.ia(a.H.C+4);return a.K[0]} -function zh(a){a.D[0]=a.H.ia(a.H.C);a.D[1]=a.H.ia(a.H.C+4);a.D[2]=a.H.ja(a.H.C+8);return a.D}l.mi=function(){this.H.bb(this.H.C,this.G[0])};l.bl=function(){this.H.bb(this.H.C,this.G[0]);this.H.bb(this.H.C+4,this.G[1])};function Ah(a){a.H.bb(a.H.C,a.D[0]);a.H.bb(a.H.C+4,a.D[1]);a.H.fb(a.H.C+8,a.D[2])}function Bh(a,b){var c=b[1],d=(b[2]&32768)>>4,e=b[2]&32767;b=b[0]>>>11|c<<21;c=c>>11&1048575;32767==e?e=2047:e&&(e+=-15360,0>=e&&(e=2047,b=c=0));a.G[0]=b;a.G[1]=c|(d|e)<<20;return a.K[0]} +function zh(a){a.D[0]=a.H.ia(a.H.C);a.D[1]=a.H.ia(a.H.C+4);a.D[2]=a.H.ja(a.H.C+8);return a.D}l.ni=function(){this.H.ab(this.H.C,this.G[0])};l.cl=function(){this.H.ab(this.H.C,this.G[0]);this.H.ab(this.H.C+4,this.G[1])};function Ah(a){a.H.ab(a.H.C,a.D[0]);a.H.ab(a.H.C+4,a.D[1]);a.H.fb(a.H.C+8,a.D[2])}function Bh(a,b){var c=b[1],d=(b[2]&32768)>>4,e=b[2]&32767;b=b[0]>>>11|c<<21;c=c>>11&1048575;32767==e?e=2047:e&&(e+=-15360,0>=e&&(e=2047,b=c=0));a.G[0]=b;a.G[1]=c|(d|e)<<20;return a.K[0]} function uh(a,b,c){var d=c>>20&2047,e=2147483648|(c&1048575)<<11|b>>>21;2047==d?d=32767:d?d+=15360:e&=2147483647;a.D[0]=b<<11;a.D[1]=e;a.D[2]=c>>16&32768|d;return a.D}function Ch(a,b){for(var c=0,d=1;b--;)c+=(a&15)*d,d*=10,a>>=4;return c}function Dh(a,b){for(var c=0,d=0;b--;)c|=a%10<>11;bh(a);ch(a,d.jb(b+=d.W));!(d.qa&1)||d.O&131072?(a.I=d.jb(b+=d.W),c=d.jb(b+=d.W),a.O=c&2047,a.I|=(c&-4096)<<4,a.M=-1,a.J=d.jb(b+=d.W),a.J|=(d.jb(b+=d.W)&-4096)<<4,a.N=-1):(a.I=d.jb(b+=d.W),c=d.jb(b+=d.W),a.M=c&65535,a.O=c>>16&2047,a.J=d.jb(b+=d.W),a.N=d.jb(b+=d.W)&65535);return b+d.W} function Hh(a,b){var c=a.H;c.yb(b,a.Zb);c.yb(b+=c.W,Og(a));c.yb(b+=c.W,Pg(a));if(!(c.qa&1)||c.O&131072){var d=(a.M<<4)+a.I;c.yb(b+=c.W,d);c.yb(b+=c.W,d>>4&-4096|a.O);d=(a.N<<4)+a.J;c.yb(b+=c.W,d);c.yb(b+=c.W,d>>4&-4096)}else c.yb(b+=c.W,a.I),c.yb(b+=c.W,a.M|a.O<<16),c.yb(b+=c.W,a.J),c.yb(b+=c.W,a.N);return b+c.W}function Ih(){this.fa&=-32896;bh(this)}function Jh(){oh(this,M(this,0),M(this,this.A))}function Kh(){oh(this,M(this,0),M(this,this.A))&&Eh(this)}function Lh(){Kh.call(this)} -function Mh(){N(this,0,nh(this,M(this,0),xh(this)))}function Nh(){this.C&=~(1<>20&2047)-1023),this.G[1]=(this.G[1]|1072693248)&-1073741825,Fh(this,this.K[0]))},102:function(){this.B=this.B-1&7;this.fa&=-513},103:function(){this.B= this.B+1&7;this.fa&=-513},112:function(){N(this,0,M(this,0)%M(this,1))},113:function(){N(this,1,M(this,1)*Math.log(M(this,0)+1)/Math.LN2)&&Eh(this)},114:function(){var a=M(this,0),b=null;if(0<=a||!ih(this,1))b=Math.sqrt(a),jh(this,b)||(b=null);N(this,0,b)},116:function(){N(this,0,ph(this,M(this,0),fi))},117:function(){var a=M(this,0),b=M(this,1);null!=a&&null!=b&&N(this,0,a*Math.pow(2,0>>0);Fh(this,a)},6:function(){var a=ph(this,Eh(this));null!=a&&(this.D[0]=Dh(a,8),this.D[1]=Dh(a/1E8,8),this.D[2]=Dh(a/1E16,2),0>a&&(this.D[2]|=32768),Ah(this))},7:function(){null!=ph(this,M(this,0),fi)&&(this.bl(),Eh(this))},48:function(){Nh.call(this);Eh(this)},49:$h,50:Vh,51:Vh,52:Yh}},hi=[Ih,Oh,Ph,Qh,Rh,Sh,Wh,Th,Xh,Yh];$a(function(){for(var a=zb(document,"pcx86","fpu"),b=0;b>>0);Fh(this,a)},6:function(){var a=ph(this,Eh(this));null!=a&&(this.D[0]=Dh(a,8),this.D[1]=Dh(a/1E8,8),this.D[2]=Dh(a/1E16,2),0>a&&(this.D[2]|=32768),Ah(this))},7:function(){null!=ph(this,M(this,0),fi)&&(this.cl(),Eh(this))},48:function(){Nh.call(this);Eh(this)},49:$h,50:Vh,51:Vh,52:Yh}},hi=[Ih,Oh,Ph,Qh,Rh,Sh,Wh,Th,Xh,Yh];$a(function(){for(var a=zb(document,"pcx86","fpu"),b=0;b>16,c=c<<16>>16,d=d<<16>>16);this.A-=this.B.Ij;(bd)&&y.call(this,5);this.N|=2;return a}function qi(a,b){var c=0;if(b){qg(this);for(var d=1;d&this.R;){if(b&d){a=c;break}d<<=1;c++}}else sg(this);this.A-=11+3*c;return a}function ri(a,b){var c=0;if(b){qg(this);for(var d=2==this.W?15:31,e=1<>>=1;c++;d--}}else sg(this);this.A-=11+3*c;return a} +function pi(a){if(-1===this.C)return y.call(this,6),a;var b=a,c=this.jb(this.C),d=this.jb(this.C+this.W);2==this.W&&(b=a<<16>>16,c=c<<16>>16,d=d<<16>>16);this.A-=this.B.Jj;(bd)&&y.call(this,5);this.N|=2;return a}function qi(a,b){var c=0;if(b){qg(this);for(var d=1;d&this.R;){if(b&d){a=c;break}d<<=1;c++}}else sg(this);this.A-=11+3*c;return a}function ri(a,b){var c=0;if(b){qg(this);for(var d=2==this.W?15:31,e=1<>>=1;c++;d--}}else sg(this);this.A-=11+3*c;return a} function si(a,b){a&1<<(b&(2==this.W?15:31))?jg(this):kg(this);this.A-=-1===this.C?3:6;this.N|=2;return a}function ti(a,b){b=1<<(b&(2==this.W?15:31));a&b?jg(this):kg(this);this.A-=-1===this.C?6:8;return a^b}function ui(a,b){b=1<<(b&(2==this.W?15:31));a&b?jg(this):kg(this);this.A-=-1===this.C?6:8;return a&~b}function vi(a,b){b=1<<(b&(2==this.W?15:31));a&b?jg(this):kg(this);this.A-=-1===this.C?6:8;return a|b} -function wi(a,b){if(-1===this.C)return si.call(this,a,b);var c=this.W<<3;if(b>=c||b<-c)a=Ag(this,this.ab,this.lb+(b>>(2==this.W?4:5))*this.W);b=1<<(b&(2==this.W?15:31));a&b?jg(this):kg(this);this.A-=6;this.N|=2;return a}function xi(a,b){if(-1===this.C)return ti.call(this,a,b);var c=this.W<<3;if(b>=c||b<-c)a=Ag(this,this.ab,this.lb+(b>>(2==this.W?4:5))*this.W);b=1<<(b&(2==this.W?15:31));a&b?jg(this):kg(this);this.A-=8;return a^b} -function yi(a,b){if(-1===this.C)return ui.call(this,a,b);var c=this.W<<3;if(b>=c||b<-c)a=Ag(this,this.ab,this.lb+(b>>(2==this.W?4:5))*this.W);b=1<<(b&(2==this.W?15:31));a&b?jg(this):kg(this);this.A-=8;return a&~b}function zi(a,b){if(-1===this.C)return vi.call(this,a,b);var c=this.W<<3;if(b>=c||b<-c)a=Ag(this,this.ab,this.lb+(b>>(2==this.W?4:5))*this.W);b=1<<(b&(2==this.W?15:31));a&b?jg(this):kg(this);this.A-=8;return a|b} -function Ai(a,b){bg(this,a,b,a-b|0,191,!0);this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Ah:this.B.Ib;this.N|=2;return a}function Bi(a,b){bg(this,a,b,a-b|0,this.Fb|63,!0);this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Ah:this.B.Ib;this.N|=2;return a} -function Ci(a){if(this.Tc){var b=this.Tc,c=this.sj,d=this.ga,e=d>>3&7;b.A=d&7;var f=(3>(d>>6&3)?0:48)+e;(217==c||219==c)&&52<=f&&(f=e<<4|b.A);if(e=gi[c][f]){if(0>hi.indexOf(e)){var f=b.H,g=f.Bd;8087==b.ca&&(f.ha&16&&g++,f.ha&32&&g++);b.M=f.Z.U;b.I=g-f.Z.ua;-1!==f.C&&(b.N=f.ab.U,b.J=f.C-f.ab.ua);b.O=(c&7)<<8|d}e.call(b)}}this.A-=-1===this.C?2:8;return a}function Di(a){if(80186>this.ca)return Ei.call(this,a);y.call(this,13,0);return a}function Ue(a){y.call(this,6);return a} +function wi(a,b){if(-1===this.C)return si.call(this,a,b);var c=this.W<<3;if(b>=c||b<-c)a=Ag(this,this.eb,this.wb+(b>>(2==this.W?4:5))*this.W);b=1<<(b&(2==this.W?15:31));a&b?jg(this):kg(this);this.A-=6;this.N|=2;return a}function xi(a,b){if(-1===this.C)return ti.call(this,a,b);var c=this.W<<3;if(b>=c||b<-c)a=Ag(this,this.eb,this.wb+(b>>(2==this.W?4:5))*this.W);b=1<<(b&(2==this.W?15:31));a&b?jg(this):kg(this);this.A-=8;return a^b} +function yi(a,b){if(-1===this.C)return ui.call(this,a,b);var c=this.W<<3;if(b>=c||b<-c)a=Ag(this,this.eb,this.wb+(b>>(2==this.W?4:5))*this.W);b=1<<(b&(2==this.W?15:31));a&b?jg(this):kg(this);this.A-=8;return a&~b}function zi(a,b){if(-1===this.C)return vi.call(this,a,b);var c=this.W<<3;if(b>=c||b<-c)a=Ag(this,this.eb,this.wb+(b>>(2==this.W?4:5))*this.W);b=1<<(b&(2==this.W?15:31));a&b?jg(this):kg(this);this.A-=8;return a|b} +function Ai(a,b){bg(this,a,b,a-b|0,191,!0);this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Bh:this.B.Ib;this.N|=2;return a}function Bi(a,b){bg(this,a,b,a-b|0,this.Fb|63,!0);this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Bh:this.B.Ib;this.N|=2;return a} +function Ci(a){if(this.Tc){var b=this.Tc,c=this.tj,d=this.ga,e=d>>3&7;b.A=d&7;var f=(3>(d>>6&3)?0:48)+e;(217==c||219==c)&&52<=f&&(f=e<<4|b.A);if(e=gi[c][f]){if(0>hi.indexOf(e)){var f=b.H,g=f.Bd;8087==b.ca&&(f.ha&16&&g++,f.ha&32&&g++);b.M=f.Z.U;b.I=g-f.Z.ua;-1!==f.C&&(b.N=f.eb.U,b.J=f.C-f.eb.ua);b.O=(c&7)<<8|d}e.call(b)}}this.A-=-1===this.C?2:8;return a}function Di(a){if(80186>this.ca)return Ei.call(this,a);y.call(this,13,0);return a}function Ue(a){y.call(this,6);return a} function Ei(a){Xe.call(this);return a}function Fi(a,b){a=Gi.call(this,this.S(),b);80386>this.ca&&(this.A-=12);return a}function Hi(a,b){a=this.Ea();a=2==this.W?Gi.call(this,a,b):Ii.call(this,a,b);80386>this.ca&&(this.A-=12);return a}function Ji(a,b){var c=!1;0>b&&(b=-b|0,c=!c);0>a&&(a=-a|0,c=!c);Ki.call(this,a,b);c&&(this.Ba=~this.Ba+1|0,this.Ya=~this.Ya+(this.Ba?0:1)|0)} -function Gi(a,b){a=(a<<16>>16)*(b<<16>>16)|0;32767a?(jg(this),lg(this)):(kg(this),mg(this));this.A-=-1===this.C?9:12;return a&65535}function Ii(a,b){Ji.call(this,a,b);this.Ya!=this.Ba>>31?(jg(this),lg(this)):(kg(this),mg(this));this.A-=-1===this.C?9:12;return this.Ba}function Li(a,b){this.A-=14+(-1===this.C?0:2);qg(this);-1!==this.xb.load(b)&&this.xb.qc>=this.Ma&&this.xb.qc>=(b&3)&&(sg(this),a=this.xb.mb&-256,2=this.Ma)&&this.xb.qc>=(b&3))return sg(this),this.xb.Ka;qg(this);return a}function Si(a,b){if(-1===this.C)return Xe.call(this),a;fe(this,this.ja(this.C+this.W));this.A-=this.B.Xe;return b} -function Ti(a,b){this.A-=-1===this.F?-1===this.C?this.B.sk:this.B.rk:this.B.pk;return b}function Ui(a,b){switch(this.ga>>3&7){case 4:this.xa=this.D;break;case 5:this.xa=this.I;break;case 6:this.xa=this.L;break;case 7:this.xa=this.G}return b}function Vi(a,b){return b} +function Gi(a,b){a=(a<<16>>16)*(b<<16>>16)|0;32767a?(jg(this),lg(this)):(kg(this),mg(this));this.A-=-1===this.C?9:12;return a&65535}function Ii(a,b){Ji.call(this,a,b);this.Ya!=this.Ba>>31?(jg(this),lg(this)):(kg(this),mg(this));this.A-=-1===this.C?9:12;return this.Ba}function Li(a,b){this.A-=14+(-1===this.C?0:2);qg(this);-1!==this.xb.load(b)&&this.xb.qc>=this.Ma&&this.xb.qc>=(b&3)&&(sg(this),a=this.xb.lb&-256,2=this.Ma)&&this.xb.qc>=(b&3))return sg(this),this.xb.Ka;qg(this);return a}function Si(a,b){if(-1===this.C)return Xe.call(this),a;fe(this,this.ja(this.C+this.W));this.A-=this.B.Ye;return b} +function Ti(a,b){this.A-=-1===this.F?-1===this.C?this.B.tk:this.B.sk:this.B.qk;return b}function Ui(a,b){switch(this.ga>>3&7){case 4:this.xa=this.D;break;case 5:this.xa=this.I;break;case 6:this.xa=this.L;break;case 7:this.xa=this.G}return b}function Vi(a,b){return b} function fj(a,b){a=this.ga>>3&7;switch(a){case 0:this.xa=this.D;break;case 2:this.xa=this.L;break;case 3:this.xa=this.G;break;default:if(80286==this.ca||80386==this.ca&&4!=a&&5!=a)y.call(this,6);else switch(a){case 1:this.xa=this.I;break;case 4:this.xa=z(this);break;case 5:this.xa=this.M;break;case 6:this.xa=this.K;break;case 7:this.xa=this.J}}return Ti.call(this,0,b)} function gj(a,b){switch(this.ga>>3&7){case 0:b=this.oa.U;break;case 1:b=this.Z.U;break;case 2:b=this.Y.U;break;case 3:b=this.Ca.U;break;case 4:if(80386<=this.ca){b=this.Ga.U;break}y.call(this,6);b=a;break;case 5:if(80386<=this.ca){b=this.Ha.U;break}default:y.call(this,6),b=a}-1!==this.F&&je(this,2);return Ti.call(this,0,b)} function Ki(a,b){if(a&-65536||b&-65536){var c=b&65535;b>>>=16;var d=a&65535;a>>>=16;var e=c*d,d=(e>>>16)+b*d,f=d>>>16,d=(d&65535)+c*a;this.Ba=d<<16|e&65535;this.Ya=f+((d>>>16)+b*a)|0}else this.Ba=a*b|0,this.Ya=0}function hj(a,b){this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Ib:this.B.Ac;return ig(this,a|b,128)}function ij(a,b){this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Ib:this.B.Ac;return ig(this,a|b,this.Fb)&this.R} function jj(a,b){var c=a-b-og(this)|0;bg(this,a,b,c,191,!0);this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Ib:this.B.Ac;return c&255}function kj(a,b){var c=a-b-og(this)|0;bg(this,a,b,c,this.Fb|63,!0);this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Ib:this.B.Ac;return c&this.R}function lj(){return hg(this)?1:0}function mj(){return cg(this)?1:0}function nj(){return cg(this)?0:1}function oj(){return fg(this)?1:0}function pj(){return fg(this)?0:1}function qj(){return cg(this)||fg(this)?1:0} function rj(){return cg(this)||fg(this)?0:1}function sj(){return gg(this)?1:0}function tj(){return gg(this)?0:1}function uj(){return dg(this)?1:0}function vj(){return dg(this)?0:1}function wj(){return!gg(this)!=!hg(this)?1:0}function xj(){return!gg(this)!=!hg(this)?0:1}function yj(){return fg(this)||!gg(this)!=!hg(this)?1:0}function zj(){return fg(this)||!gg(this)!=!hg(this)?0:1}function Aj(a,b){return Bj.call(this,a,b,this.ra())}function Cj(a,b){return Dj.call(this,a,b,this.ra())} function Ej(a,b){return Bj.call(this,a,b,this.I&31)}function Fj(a,b){return Dj.call(this,a,b,this.I&31)}function Gj(a,b){return Hj.call(this,a,b,this.ra())}function Ij(a,b){return Jj.call(this,a,b,this.ra())}function Kj(a,b){return Hj.call(this,a,b,this.I&31)}function Lj(a,b){return Jj.call(this,a,b,this.I&31)}function Mj(a,b){var c=a-b|0;bg(this,a,b,c,191,!0);this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Ib:this.B.Ac;return c&255} -function Nj(a,b){var c=a-b|0;bg(this,a,b,c,this.Fb|63,!0);this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Ib:this.B.Ac;return c&this.R}function Oj(a,b){ig(this,a&b,128);this.A-=-1===this.F?-1===this.C?this.B.bi:this.B.Gf:this.B.Gf;this.N|=2;return a}function Pj(a,b){ig(this,a&b,this.Fb);this.A-=-1===this.F?-1===this.C?this.B.bi:this.B.Gf:this.B.Gf;this.N|=2;return a}function Qj(a,b){var c=this.D&this.R,d=(1<<(this.I&31))-1;return a&~(d<>(this.D&this.R)&(1<<(this.I&31))-1&this.R}function Sj(a,b){if(-1===this.C){switch(this.ga&7){case 0:this.D=this.D&-256|a;break;case 1:this.I=this.I&-256|a;break;case 2:this.L=this.L&-256|a;break;case 3:this.G=this.G&-256|a;break;case 4:this.D=this.D&-65281|a<<8;break;case 5:this.I=this.I&-65281|a<<8;break;case 6:this.L=this.L&-65281|a<<8;break;case 7:this.G=this.G&-65281|a<<8}this.A-=this.B.di}else this.F=this.C,Dg(this,a),this.A-=this.B.ci;return b} -function Tj(a,b){if(-1===this.C){switch(this.ga&7){case 0:this.D=this.D&~this.R|a;break;case 1:this.I=this.I&~this.R|a;break;case 2:this.L=this.L&~this.R|a;break;case 3:this.G=this.G&~this.R|a;break;case 4:ge(this,z(this)&~this.R|a);break;case 5:this.M=this.G&~this.R|a;break;case 6:this.K=this.K&~this.R|a;break;case 7:this.J=this.J&~this.R|a}this.A-=this.B.di}else this.F=this.C,this.N&2||this.yb(this.ab.cc(this.lb,this.W),a),this.A-=this.B.ci;return b} +function Nj(a,b){var c=a-b|0;bg(this,a,b,c,this.Fb|63,!0);this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Ib:this.B.Ac;return c&this.R}function Oj(a,b){ig(this,a&b,128);this.A-=-1===this.F?-1===this.C?this.B.ci:this.B.Hf:this.B.Hf;this.N|=2;return a}function Pj(a,b){ig(this,a&b,this.Fb);this.A-=-1===this.F?-1===this.C?this.B.ci:this.B.Hf:this.B.Hf;this.N|=2;return a}function Qj(a,b){var c=this.D&this.R,d=(1<<(this.I&31))-1;return a&~(d<>(this.D&this.R)&(1<<(this.I&31))-1&this.R}function Sj(a,b){if(-1===this.C){switch(this.ga&7){case 0:this.D=this.D&-256|a;break;case 1:this.I=this.I&-256|a;break;case 2:this.L=this.L&-256|a;break;case 3:this.G=this.G&-256|a;break;case 4:this.D=this.D&-65281|a<<8;break;case 5:this.I=this.I&-65281|a<<8;break;case 6:this.L=this.L&-65281|a<<8;break;case 7:this.G=this.G&-65281|a<<8}this.A-=this.B.ei}else this.F=this.C,Dg(this,a),this.A-=this.B.di;return b} +function Tj(a,b){if(-1===this.C){switch(this.ga&7){case 0:this.D=this.D&~this.R|a;break;case 1:this.I=this.I&~this.R|a;break;case 2:this.L=this.L&~this.R|a;break;case 3:this.G=this.G&~this.R|a;break;case 4:ge(this,z(this)&~this.R|a);break;case 5:this.M=this.G&~this.R|a;break;case 6:this.K=this.K&~this.R|a;break;case 7:this.J=this.J&~this.R|a}this.A-=this.B.ei}else this.F=this.C,this.N&2||this.yb(this.eb.cc(this.wb,this.W),a),this.A-=this.B.di;return b} function Uj(a,b){a^=b;ig(this,a,128);this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Ib:this.B.Ac;return a}function Vj(a,b){this.A-=-1===this.F?-1===this.C?this.B.mc:this.B.Ib:this.B.Ac;return ig(this,a^b,this.Fb)&this.R}function Wj(a,b){var c=a[1]-b[1];c||(c=a[0]-b[0]);return c}function Xj(a){var b=a-1|0;bg(this,a,1,b,this.Fb|62,!0);this.A-=2;return a&~this.R|b&this.R} -function Yj(a,b,c){c>>>=0;if(!c||c<=b>>>0)return!1;var d=0,e=1,f=this.bn;f[0]=c>>>0;f[1]=0;c=this.cn;c[0]=a>>>0;for(c[1]=b>>>0;0>>=0,a[1]++),e+=e;do 0<=Wj(c,f)&&(a=c,b=f,a[0]-=b[0],a[1]-=b[1],0>a[0]&&(a[0]>>>=0,a[1]--),d+=e),a=f,a[0]>>>=1,a[1]&1&&(a[0]=(a[0]|2147483648)>>>0),a[1]>>>=1,e/=2;while(1<=e);this.Ba=d;this.Ya=c[0];return!0}function Zj(a){var b=a+1|0;bg(this,a,1,b,this.Fb|62);this.A-=2;return a&~this.R|b&this.R} +function Yj(a,b,c){c>>>=0;if(!c||c<=b>>>0)return!1;var d=0,e=1,f=this.cn;f[0]=c>>>0;f[1]=0;c=this.dn;c[0]=a>>>0;for(c[1]=b>>>0;0>>=0,a[1]++),e+=e;do 0<=Wj(c,f)&&(a=c,b=f,a[0]-=b[0],a[1]-=b[1],0>a[0]&&(a[0]>>>=0,a[1]--),d+=e),a=f,a[0]>>>=1,a[1]&1&&(a[0]=(a[0]|2147483648)>>>0),a[1]>>>=1,e/=2;while(1<=e);this.Ba=d;this.Ya=c[0];return!0}function Zj(a){var b=a+1|0;bg(this,a,1,b,this.Fb|62);this.A-=2;return a&~this.R|b&this.R} function ak(a){this.qa=a;ie(this);this.qa&-2147483648?lf(this):of(this)}function te(a){this.Wc=a;sc(this)}function bk(a){this.N|=1;this.tc.call(this,a);this.A-=-1===this.C?4:5}function Bj(a,b,c){if(c){16>>16-c)&65535;ig(this,a,32768,d&32768)}return a}function Dj(a,b,c){if(c){var d=a<>>32-c;ig(this,a,-2147483648,d&-2147483648)}return a} -function Hj(a,b,c){if(c){16>>c-1;a=(d>>>1|b<<16-c)&65535;ig(this,a,32768,d&1)}return a}function Jj(a,b,c){if(c){var d=a>>>c-1;a=d>>>1|b<<32-c;ig(this,a,-2147483648,d&1)}return a}function ck(){this.A-=-1===this.C?2:this.B.Fk;return 1}function dk(){var a=this.I&255;this.A-=(-1===this.C?this.B.Vh:this.B.Uh)+(a<>>c-1;a=(d>>>1|b<<16-c)&65535;ig(this,a,32768,d&1)}return a}function Jj(a,b,c){if(c){var d=a>>>c-1;a=d>>>1|b<<32-c;ig(this,a,-2147483648,d&1)}return a}function ck(){this.A-=-1===this.C?2:this.B.Gk;return 1}function dk(){var a=this.I&255;this.A-=(-1===this.C?this.B.Wh:this.B.Vh)+(a<this.Uc?(-1!=this.Ad&&(this.Ad!==this.Z.U&&(this.Z.Ab=this.Ad&3,Yf(this,this.Ad)),this.Ad=-1),this.Bd!==this.da&&Zf(this,this.Bd),-1!=this.Vc&&(this.Vc!==this.Y.U&&fe(this,this.Vc),this.Vc=-1),-1!==this.ta&&(this.ta!==this.Aa&&ge(this,this.Hc&~this.Y.wa|this.ta-this.Y.ua),this.ta=-1)):8!=this.Uc?(b=0,a=8):(b=0,a=-1,jf(this),e=d=!1)):Zf(this,this.Bd);var f=a,g=b,h=32,k=xg(this,this.da);204!=k||this.cd||(d=!1);this.O&131072&&(6== -f&&99==k||13==f&&205==k)&&(d=!1);!1===d&&(h|=1);983040<=this.da&&1048575>=this.da&&(d=!1);t(this,h|-2147483648)&&(d=!0);if(t(this,h)||d){var m=this.ea.wb,f="Fault "+r(f)+(null!=g?" ("+sa(g)+")":"")+" on opcode "+r(k);d&&m&&(f+=" (blocked)");this.ba?(Lb(this,f,d||h,!0),d&&(d=m,this.ba.Jb())):(this.Fa(f),this.Jb())}if(d&&e)throw-1;if(e)throw this.Uc=a,ik.call(this,a,b,c),this.Bd=this.da,this.N=1==a?this.N|8192:this.N|4096,a;} -function nf(a,b,c){this.Cd=a;a=0;b&&(a|=1);c&&(a|=2);3==this.Ma&&(a|=4);y.call(this,14,a)}function kk(a){var b=a.mb&7680;a.U&65528&&(6144==b||7168==b||7168>b&&a.qc=this.da&&(d=!1);t(this,h|-2147483648)&&(d=!0);if(t(this,h)||d){var m=this.ea.vb,f="Fault "+r(f)+(null!=g?" ("+sa(g)+")":"")+" on opcode "+r(k);d&&m&&(f+=" (blocked)");this.ba?(Lb(this,f,d||h,!0),d&&(d=m,this.ba.Jb())):(this.Fa(f),this.Jb())}if(d&&e)throw-1;if(e)throw this.Uc=a,ik.call(this,a,b,c),this.Bd=this.da,this.N=1==a?this.N|8192:this.N|4096,a;} +function nf(a,b,c){this.Cd=a;a=0;b&&(a|=1);c&&(a|=2);3==this.Ma&&(a|=4);y.call(this,14,a)}function kk(a){var b=a.lb&7680;a.U&65528&&(6144==b||7168==b||7168>b&&a.qc> 3&7].call(this,c,b.call(this));switch(d){case 192:this.D=a;break;case 193:this.I=a;break;case 194:this.L=a;break;case 195:this.G=a;break;case 196:ge(this,a);break;case 197:this.M=a;break;case 198:this.K=a;break;case 199:this.J=a;break;default:Fg(this,a)}} function mk(a){var b=this.ra(),c=b>>6,d,e;switch(b>>3&7){case 0:d=this.D;break;case 1:d=this.I;break;case 2:d=this.L;break;case 3:d=this.G;break;case 4:d=0;break;case 5:d=this.M;break;case 6:d=this.K;break;case 7:d=this.J}switch(b&7){case 0:e=this.D;break;case 1:e=this.I;break;case 2:e=this.L;break;case 3:e=this.G;break;case 4:e=z(this);this.Da=this.Rb;break;case 5:a?(e=this.M,this.Da=this.Rb):e=J(this);break;case 6:e=this.K;break;case 7:e=this.J}return(d<>8&255;9<(c&15)||eg(this)?(c+=6,80286<=this.ca&&255>8&255;9<(c&15)||eg(this)?(c=c-6&15,d=d-1&255,a=b=1):a=b=0;this.D=this.D&-65536|d<<8|c;a?jg(this):kg(this);b?rg(this):pg(this);this.A-=this.B.qe},function(){this.D=Zj.call(this,this.D)},function(){this.I=Zj.call(this,this.I)},function(){this.L=Zj.call(this,this.L)},function(){this.G=Zj.call(this,this.G)},function(){ge(this, +var ze=[function(){this.tc.call(this,ki)},function(){this.za.call(this,li)},function(){this.kc.call(this,ki)},function(){this.ma.call(this,li)},function(){this.D=this.D&-256|ki.call(this,this.D&255,this.ra());this.A--},function(){this.D=this.D&~this.R|li.call(this,this.D&this.R,this.Ea());this.A--},function(){le(this,this.oa.U,this.W,2);this.A-=this.B.se},function(){this.ta=this.Aa;ne(this,ee(this));this.A-=this.B.nc;this.ta=-1},function(){this.tc.call(this,hj)},function(){this.za.call(this,ij)}, +function(){this.kc.call(this,hj)},function(){this.ma.call(this,ij)},function(){this.D=this.D&-256|hj.call(this,this.D&255,this.ra());this.A--},function(){this.D=this.D&~this.R|ij.call(this,this.D&this.R,this.Ea());this.A--},function(){le(this,this.Z.U,this.W,2);this.A-=this.B.se},function(){Yf(this,ee(this));this.A-=this.B.nc},function(){this.tc.call(this,ii)},function(){this.za.call(this,ji)},function(){this.kc.call(this,ii)},function(){this.ma.call(this,ji)},function(){this.D=this.D&-256|ii.call(this, +this.D&255,this.ra());this.A--},function(){this.D=this.D&~this.R|ji.call(this,this.D&this.R,this.Ea());this.A--},function(){le(this,this.Y.U,this.W,2);this.A-=this.B.se},function(){this.ta=this.Aa;fe(this,ee(this));this.A-=this.B.nc;this.ta=-1},function(){this.tc.call(this,jj)},function(){this.za.call(this,kj)},function(){this.kc.call(this,jj)},function(){this.ma.call(this,kj)},function(){this.D=this.D&-256|jj.call(this,this.D&255,this.ra());this.A--},function(){this.D=this.D&~this.R|kj.call(this, +this.D&this.R,this.Ea());this.A--},function(){le(this,this.Ca.U,this.W,2);this.A-=this.B.se},function(){this.ta=this.Aa;me(this,ee(this));this.A-=this.B.nc;this.ta=-1},function(){this.tc.call(this,mi)},function(){this.za.call(this,ni)},function(){this.kc.call(this,mi)},function(){this.ma.call(this,ni)},function(){this.D=this.D&-256|mi.call(this,this.D&255,this.ra());this.A--},function(){this.D=this.D&~this.R|ni.call(this,this.D&this.R,this.Ea());this.A--},function(){this.N|=20;this.Da=this.Rb=this.oa; +this.A-=this.B.bd},function(){var a=this.D&255,b=eg(this),c=cg(this);9<(a&15)||b?(a+=6,b=16):b=0;159>8&255;9<(c&15)||eg(this)?(c+=6,80286<=this.ca&&255>8&255;9<(c&15)||eg(this)?(c=c-6&15,d=d-1&255,a=b=1):a=b=0;this.D=this.D&-65536|d<<8|c;a?jg(this):kg(this);b?rg(this):pg(this);this.A-=this.B.re},function(){this.D=Zj.call(this,this.D)},function(){this.I=Zj.call(this,this.I)},function(){this.L=Zj.call(this,this.L)},function(){this.G=Zj.call(this,this.G)},function(){ge(this, Zj.call(this,z(this)))},function(){this.M=Zj.call(this,this.M)},function(){this.K=Zj.call(this,this.K)},function(){this.J=Zj.call(this,this.J)},function(){this.D=Xj.call(this,this.D)},function(){this.I=Xj.call(this,this.I)},function(){this.L=Xj.call(this,this.L)},function(){this.G=Xj.call(this,this.G)},function(){ge(this,Xj.call(this,z(this)))},function(){this.M=Xj.call(this,this.M)},function(){this.K=Xj.call(this,this.K)},function(){this.J=Xj.call(this,this.J)},function(){oe(this,this.D&this.R); this.A-=this.B.Ic},function(){oe(this,this.I&this.R);this.A-=this.B.Ic},function(){oe(this,this.L&this.R);this.A-=this.B.Ic},function(){oe(this,this.G&this.R);this.A-=this.B.Ic},function(){oe(this,z(this)-2&65535);this.A-=this.B.Ic},function(){oe(this,this.M&this.R);this.A-=this.B.Ic},function(){oe(this,this.K&this.R);this.A-=this.B.Ic},function(){oe(this,this.J&this.R);this.A-=this.B.Ic},function(){this.D=this.D&~this.R|ee(this);this.A-=this.B.nc},function(){this.I=this.I&~this.R|ee(this);this.A-= this.B.nc},function(){this.L=this.L&~this.R|ee(this);this.A-=this.B.nc},function(){this.G=this.G&~this.R|ee(this);this.A-=this.B.nc},function(){ge(this,z(this)&~this.R|ee(this));this.A-=this.B.nc},function(){this.M=this.M&~this.R|ee(this);this.A-=this.B.nc},function(){this.K=this.K&~this.R|ee(this);this.A-=this.B.nc},function(){this.J=this.J&~this.R|ee(this);this.A-=this.B.nc},nk,ok,pk,qk,rk,sk,tk,uk,vk,wk,xk,yk,zk,Ak,Bk,Ck,nk,ok,pk,qk,rk,sk,tk,uk,vk,wk,xk,yk,zk,Ak,Bk,Ck,Dk,function(){this.ib.call(this, -Sk,this.Ea);this.A-=-1===this.F?1:this.B.yg},Dk,function(){this.ib.call(this,Sk,this.S);this.A-=-1===this.F?1:this.B.yg},function(){this.tc.call(this,Oj)},function(){this.za.call(this,Pj)},function(){this.kc.call(this,Sj)},function(){this.ma.call(this,Tj)},Fk,Gk,Hk,Ik,function(){this.N|=1;this.za.call(this,gj)},function(){this.N|=1;this.Da=this.Rb=this.Qg;this.ma.call(this,Ni)},function(){var a;this.ma.call(this,fj);switch(this.ga>>3&7){case 0:a=this.D;this.D=this.xa;ne(this,a);break;case 1:a=this.I; +Sk,this.Ea);this.A-=-1===this.F?1:this.B.zg},Dk,function(){this.ib.call(this,Sk,this.S);this.A-=-1===this.F?1:this.B.zg},function(){this.tc.call(this,Oj)},function(){this.za.call(this,Pj)},function(){this.kc.call(this,Sj)},function(){this.ma.call(this,Tj)},Fk,Gk,Hk,Ik,function(){this.N|=1;this.za.call(this,gj)},function(){this.N|=1;this.Da=this.Rb=this.Rg;this.ma.call(this,Ni)},function(){var a;this.ma.call(this,fj);switch(this.ga>>3&7){case 0:a=this.D;this.D=this.xa;ne(this,a);break;case 1:a=this.I; this.I=this.xa;Yf(this,a);break;case 2:a=this.L;this.L=this.xa;fe(this,a);break;case 3:a=this.G;this.G=this.xa;me(this,a);break;case 4:a=z(this);ge(this,this.xa);80386<=this.ca?this.Ga.load(a):ne(this,a);break;case 5:a=this.M;this.M=this.xa;80386<=this.ca?this.Ha.load(a):Yf(this,a);break;case 6:a=this.K;this.K=this.xa;fe(this,a);break;case 7:a=this.J,this.J=this.xa,me(this,a)}},function(){this.N|=1;this.ta=this.Aa;this.xa=ee(this);this.ib.call(this,Tk,gk);this.ta=-1},function(){this.A-=3},function(){var a= this.D;this.D=this.D&~this.R|this.I&this.R;this.I=this.I&~this.R|a&this.R;this.A-=3},function(){var a=this.D;this.D=this.D&~this.R|this.L&this.R;this.L=this.L&~this.R|a&this.R;this.A-=3},function(){var a=this.D;this.D=this.D&~this.R|this.G&this.R;this.G=this.G&~this.R|a&this.R;this.A-=3},function(){var a=this.D,b=z(this);this.D=this.D&~this.R|b&this.R;ge(this,b&~this.R|a&this.R);this.A-=3},function(){var a=this.D;this.D=this.D&~this.R|this.M&this.R;this.M=this.M&~this.R|a&this.R;this.A-=3},function(){var a= -this.D;this.D=this.D&~this.R|this.K&this.R;this.K=this.K&~this.R|a&this.R;this.A-=3},function(){var a=this.D;this.D=this.D&~this.R|this.J&this.R;this.J=this.J&~this.R|a&this.R;this.A-=3},function(){this.D=2==this.W?this.D&-65536|this.D<<24>>24&65535:this.D<<16>>16;this.A-=2},function(){this.L=2==this.W?this.L&-65536|(this.D&32768?65535:0):this.D&-2147483648?-1:0;this.A-=this.B.Kj},function(){hk.call(this,this.Ea(),Gg(this));this.A-=this.B.Nj},function(){this.A-=3},function(){var a=qe(this);a&131072&& +this.D;this.D=this.D&~this.R|this.K&this.R;this.K=this.K&~this.R|a&this.R;this.A-=3},function(){var a=this.D;this.D=this.D&~this.R|this.J&this.R;this.J=this.J&~this.R|a&this.R;this.A-=3},function(){this.D=2==this.W?this.D&-65536|this.D<<24>>24&65535:this.D<<16>>16;this.A-=2},function(){this.L=2==this.W?this.L&-65536|(this.D&32768?65535:0):this.D&-2147483648?-1:0;this.A-=this.B.Lj},function(){hk.call(this,this.Ea(),Gg(this));this.A-=this.B.Oj},function(){this.A-=3},function(){var a=qe(this);a&131072&& 3>this.lc?y.call(this,13,0):(oe(this,a&-196609),this.A-=this.B.Ic)},function(){if(this.O&131072&&3>this.lc)y.call(this,13,0);else{var a=ee(this),a=a&65535|this.O&-65536;re(this,a);this.A-=this.B.nc}},function(){var a=this.D>>8&255;a&1?jg(this):kg(this);a&4?(this.resultType&=-3,this.O|=4):(this.resultType&=-3,this.O&=-5);a&16?rg(this):pg(this);a&64?sg(this):qg(this);a&128?(this.resultType&=-17,this.O|=128):(this.resultType&=-17,this.O&=-129);this.A-=this.B.Vb},function(){this.D=this.D&-65281|(qe(this)& -213)<<8;this.A-=this.B.Vb},function(){var a=this.D&-256,b;b=J(this);b=this.Ia(this.Da.bc(b,1));this.D=a|b;this.A-=this.B.Kh},function(){this.D=this.D&~this.R|ke(this,this.Da,J(this));this.A-=this.B.Kh},function(){var a=J(this),b=this.D;this.fc(this.Da.cc(a,1),b);this.A-=this.B.Lh},function(){var a=J(this),b=this.D;this.yb(this.Da.cc(a,this.W),b);this.A-=this.B.Lh},function(){var a=1,b=0,c=this.wa,d=this.B.Mh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Oh,this.ha&256||(this.A-=this.B.Nh));if(a--){var e= -this.Ia(this.Da.bc(this.K&c,1));this.fc(this.oa.cc(this.J&c,1),e);e=this.O&1024?-1:1;this.K=this.K&~c|this.K+e&c;this.J=this.J&~c|this.J+e&c;this.A-=d;this.I=this.I&~c|this.I-b&c;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Mh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Oh,this.ha&256||(this.A-=this.B.Nh));if(a--){var e=ke(this,this.Da,this.K&c);this.yb(this.oa.cc(this.J&c,this.W),e);e=this.O&1024?-this.W:this.W;this.K=this.K&~c|this.K+e&c;this.J=this.J&~c|this.J+e&c;this.A-=d; -this.I=this.I&~c|this.I-b&c;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.xh;this.ha&192&&(a=this.I&c,b=1,d=this.B.zh,this.ha&256||(this.A-=this.B.yh));if(a--){var e=yg(this,this.Da,this.K),f=yg(this,this.oa,this.J);this.F=this.C;Ai.call(this,e,f);e=this.O&1024?-1:1;this.K=this.K&~c|this.K+e&c;this.J=this.J&~c|this.J+e&c;this.I=this.I&~c|this.I-b&c;this.A-=d-this.B.Ib;a&&fg(this)==(this.ha&64)&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.xh;this.ha&192&& -(a=this.I&c,b=1,d=this.B.zh,this.ha&256||(this.A-=this.B.yh));if(a--){var e=Ag(this,this.Da,this.K&c),f=Ag(this,this.oa,this.J&c);this.F=this.C;Bi.call(this,e,f);e=this.O&1024?-this.W:this.W;this.K=this.K&~c|this.K+e&c;this.J=this.J&~c|this.J+e&c;this.I=this.I&~c|this.I-b&c;this.A-=d-this.B.Ib;a&&fg(this)==(this.ha&64)&&(ag(this),this.N|=256)}},function(){ig(this,this.D&this.ra(),128);this.A-=this.B.qe},function(){ig(this,this.D&this.Ea(),this.Fb);this.A-=this.B.qe},function(){var a=1,b=0,c=this.wa, -d=this.B.Xh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Zh,this.ha&256||(this.A-=this.B.Yh));if(a--){var e=this.D;this.fc(this.oa.cc(this.J&c,1),e);this.I=this.I&~c|this.I-b&c;80546<=this.we&&80564>=this.we&&!(this.ha&2048)!=(103!=this.Ia(this.da))&&(c^=-65536);this.J=this.J&~c|this.J+(this.O&1024?-1:1)&c;this.A-=d;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Xh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Zh,this.ha&256||(this.A-=this.B.Yh));if(a--){var e=this.D;this.yb(this.oa.cc(this.J& -c,this.W),e);this.J=this.J&~c|this.J+(this.O&1024?-this.W:this.W)&c;this.I=this.I&~c|this.I-b&c;this.A-=d;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Eh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Gh,this.ha&256||(this.A-=this.B.Fh));if(a--){var e=this.Ia(this.Da.bc(this.K&c,1));this.D=this.D&-256|e;this.K=this.K&~c|this.K+(this.O&1024?-1:1)&c;this.I=this.I&~c|this.I-b&c;this.A-=d;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Eh;this.ha&192&&(a=this.I&c, -b=1,d=this.B.Gh,this.ha&256||(this.A-=this.B.Fh));if(a--){var e=ke(this,this.Da,this.K&c);this.D=this.D&~this.R|e;this.K=this.K&~c|this.K+(this.O&1024?-this.W:this.W)&c;this.I=this.I&~c|this.I-b&c;this.A-=d;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Rh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Th,this.ha&256||(this.A-=this.B.Sh));if(a--){var e=this.D&255,f=yg(this,this.oa,this.J);this.F=this.C;Ai.call(this,e,f);this.J=this.J&~c|this.J+(this.O&1024?-1:1)&c;this.I=this.I&~c|this.I- -b&c;this.A-=d-this.B.Ib;a&&fg(this)==(this.ha&64)&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Rh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Th,this.ha&256||(this.A-=this.B.Sh));if(a--){var e=this.D&this.R,f=Ag(this,this.oa,this.J&c);this.F=this.C;Bi.call(this,e,f);this.J=this.J&~c|this.J+(this.O&1024?-this.W:this.W)&c;this.I=this.I&~c|this.I-b&c;this.A-=d-this.B.Ib;a&&fg(this)==(this.ha&64)&&(ag(this),this.N|=256)}},function(){this.D=this.D&-256|this.ra();this.A-=this.B.Vb},function(){this.I= +213)<<8;this.A-=this.B.Vb},function(){var a=this.D&-256,b;b=J(this);b=this.Ia(this.Da.bc(b,1));this.D=a|b;this.A-=this.B.Lh},function(){this.D=this.D&~this.R|ke(this,this.Da,J(this));this.A-=this.B.Lh},function(){var a=J(this),b=this.D;this.fc(this.Da.cc(a,1),b);this.A-=this.B.Mh},function(){var a=J(this),b=this.D;this.yb(this.Da.cc(a,this.W),b);this.A-=this.B.Mh},function(){var a=1,b=0,c=this.wa,d=this.B.Nh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Ph,this.ha&256||(this.A-=this.B.Oh));if(a--){var e= +this.Ia(this.Da.bc(this.K&c,1));this.fc(this.oa.cc(this.J&c,1),e);e=this.O&1024?-1:1;this.K=this.K&~c|this.K+e&c;this.J=this.J&~c|this.J+e&c;this.A-=d;this.I=this.I&~c|this.I-b&c;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Nh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Ph,this.ha&256||(this.A-=this.B.Oh));if(a--){var e=ke(this,this.Da,this.K&c);this.yb(this.oa.cc(this.J&c,this.W),e);e=this.O&1024?-this.W:this.W;this.K=this.K&~c|this.K+e&c;this.J=this.J&~c|this.J+e&c;this.A-=d; +this.I=this.I&~c|this.I-b&c;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.yh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Ah,this.ha&256||(this.A-=this.B.zh));if(a--){var e=yg(this,this.Da,this.K),f=yg(this,this.oa,this.J);this.F=this.C;Ai.call(this,e,f);e=this.O&1024?-1:1;this.K=this.K&~c|this.K+e&c;this.J=this.J&~c|this.J+e&c;this.I=this.I&~c|this.I-b&c;this.A-=d-this.B.Ib;a&&fg(this)==(this.ha&64)&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.yh;this.ha&192&& +(a=this.I&c,b=1,d=this.B.Ah,this.ha&256||(this.A-=this.B.zh));if(a--){var e=Ag(this,this.Da,this.K&c),f=Ag(this,this.oa,this.J&c);this.F=this.C;Bi.call(this,e,f);e=this.O&1024?-this.W:this.W;this.K=this.K&~c|this.K+e&c;this.J=this.J&~c|this.J+e&c;this.I=this.I&~c|this.I-b&c;this.A-=d-this.B.Ib;a&&fg(this)==(this.ha&64)&&(ag(this),this.N|=256)}},function(){ig(this,this.D&this.ra(),128);this.A-=this.B.re},function(){ig(this,this.D&this.Ea(),this.Fb);this.A-=this.B.re},function(){var a=1,b=0,c=this.wa, +d=this.B.Yh;this.ha&192&&(a=this.I&c,b=1,d=this.B.$h,this.ha&256||(this.A-=this.B.Zh));if(a--){var e=this.D;this.fc(this.oa.cc(this.J&c,1),e);this.I=this.I&~c|this.I-b&c;80546<=this.xe&&80564>=this.xe&&!(this.ha&2048)!=(103!=this.Ia(this.da))&&(c^=-65536);this.J=this.J&~c|this.J+(this.O&1024?-1:1)&c;this.A-=d;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Yh;this.ha&192&&(a=this.I&c,b=1,d=this.B.$h,this.ha&256||(this.A-=this.B.Zh));if(a--){var e=this.D;this.yb(this.oa.cc(this.J& +c,this.W),e);this.J=this.J&~c|this.J+(this.O&1024?-this.W:this.W)&c;this.I=this.I&~c|this.I-b&c;this.A-=d;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Fh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Hh,this.ha&256||(this.A-=this.B.Gh));if(a--){var e=this.Ia(this.Da.bc(this.K&c,1));this.D=this.D&-256|e;this.K=this.K&~c|this.K+(this.O&1024?-1:1)&c;this.I=this.I&~c|this.I-b&c;this.A-=d;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Fh;this.ha&192&&(a=this.I&c, +b=1,d=this.B.Hh,this.ha&256||(this.A-=this.B.Gh));if(a--){var e=ke(this,this.Da,this.K&c);this.D=this.D&~this.R|e;this.K=this.K&~c|this.K+(this.O&1024?-this.W:this.W)&c;this.I=this.I&~c|this.I-b&c;this.A-=d;a&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Sh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Uh,this.ha&256||(this.A-=this.B.Th));if(a--){var e=this.D&255,f=yg(this,this.oa,this.J);this.F=this.C;Ai.call(this,e,f);this.J=this.J&~c|this.J+(this.O&1024?-1:1)&c;this.I=this.I&~c|this.I- +b&c;this.A-=d-this.B.Ib;a&&fg(this)==(this.ha&64)&&(ag(this),this.N|=256)}},function(){var a=1,b=0,c=this.wa,d=this.B.Sh;this.ha&192&&(a=this.I&c,b=1,d=this.B.Uh,this.ha&256||(this.A-=this.B.Th));if(a--){var e=this.D&this.R,f=Ag(this,this.oa,this.J&c);this.F=this.C;Bi.call(this,e,f);this.J=this.J&~c|this.J+(this.O&1024?-this.W:this.W)&c;this.I=this.I&~c|this.I-b&c;this.A-=d-this.B.Ib;a&&fg(this)==(this.ha&64)&&(ag(this),this.N|=256)}},function(){this.D=this.D&-256|this.ra();this.A-=this.B.Vb},function(){this.I= this.I&-256|this.ra();this.A-=this.B.Vb},function(){this.L=this.L&-256|this.ra();this.A-=this.B.Vb},function(){this.G=this.G&-256|this.ra();this.A-=this.B.Vb},function(){this.D=this.D&-65281|this.ra()<<8;this.A-=this.B.Vb},function(){this.I=this.I&-65281|this.ra()<<8;this.A-=this.B.Vb},function(){this.L=this.L&-65281|this.ra()<<8;this.A-=this.B.Vb},function(){this.G=this.G&-65281|this.ra()<<8;this.A-=this.B.Vb},function(){this.D=this.D&~this.R|this.Ea();this.A-=this.B.Vb},function(){this.I=this.I& ~this.R|this.Ea();this.A-=this.B.Vb},function(){this.L=this.L&~this.R|this.Ea();this.A-=this.B.Vb},function(){this.G=this.G&~this.R|this.Ea();this.A-=this.B.Vb},function(){ge(this,z(this)&~this.R|this.Ea());this.A-=this.B.Vb},function(){this.M=this.M&~this.R|this.Ea();this.A-=this.B.Vb},function(){this.K=this.K&~this.R|this.Ea();this.A-=this.B.Vb},function(){this.J=this.J&~this.R|this.Ea();this.A-=this.B.Vb},Mk,Nk,Mk,Nk,function(){this.ma.call(this,Oi)},function(){this.ma.call(this,Mi)},function(){this.N|= -1;this.kd.call(this,Uk,this.ra)},function(){this.N|=1;this.ib.call(this,Uk,this.Ea)},Ok,Pk,Ok,Pk,function(){if(this.O&131072&&3>this.lc)y.call(this,13,0);else{var a=this.B.dk;this.Uc=-1;ik.call(this,3,null,a)}},function(){var a=this.ra();if(this.O&131072&&3>this.lc)y.call(this,13,0);else{var b;a:{b=this.Yf[a];if(void 0!==b)for(var c=0;cthis.lc)y.call(this,13,0);else{var a=this.B.ek;this.Uc=-1;ik.call(this,4,null,a)}else this.A-=this.B.fk},function(){if(this.O&131072&&3>this.lc)y.call(this,13,0);else{this.Vc=this.Y.U;this.ta=this.Aa;this.A-=this.B.bk;if(this.qa&1&&this.O&16384){var a=this.ja(this.la.ua+0);he(this.Z,a,!1)}else{var a=this.Ma,b=ee(this),c=ee(this),d=ee(this);if(this.O&131072)d=d&131071|this.O&-131072;else if(d&131072){var e=ee(this),f=ee(this),g=ee(this),h=ee(this),k=ee(this),m=ee(this);ie(this,!0,!0);fe(this, -f);ge(this,e);ne(this,g);me(this,h);this.Ga.load(k);this.Ha.load(m)}null!=se(this,b,c,!1)&&(re(this,d,a),this.ag&&Tf(this,this.da))}this.Vc=this.ta=-1}},function(){this.kd.call(this,Jk,ck)},function(){this.ib.call(this,2==this.W?Kk:Lk,ck)},function(){this.kd.call(this,Jk,dk)},function(){this.ib.call(this,2==this.W?Kk:Lk,dk)},function(){var a=this.ra();if(a){var b=this.D&255;this.D=this.D&-65536|b/a<<8|b%a;ig(this,this.D,128);this.A-=this.B.Hj}else lk.call(this)},function(){var a=this.D&255,b=(this.D>> -8&255)*this.ra()|0,c=a+b|0;this.D=this.D&-65536|c&255;bg(this,a,b,c,191);this.A-=this.B.Gj},function(){this.D=this.D&-256|(cg(this)?255:0);this.A-=2},function(){this.D=this.D&-256|yg(this,this.Da,this.G+(this.D&255));this.A-=this.B.Gk},function(){Qk.call(this,216)},function(){Qk.call(this,217)},function(){Qk.call(this,218)},function(){Qk.call(this,219)},function(){Qk.call(this,220)},function(){Qk.call(this,221)},function(){Qk.call(this,222)},function(){Qk.call(this,223)},function(){var a=this.S(), -b=this.I-1&this.wa;this.I=this.I&~this.wa|b;b&&!fg(this)?(C(this,A(this)+a),this.A-=this.B.mk):this.A-=this.B.Hh},function(){var a=this.S(),b=this.I-1&this.wa;this.I=this.I&~this.wa|b;b&&fg(this)?(C(this,A(this)+a),this.A-=this.B.Ih):this.A-=this.B.Jh},function(){var a=this.S(),b=this.I-1&this.wa;this.I=this.I&~this.wa|b;b?(C(this,A(this)+a),this.A-=this.B.lk):this.A-=this.B.Hh},function(){var a=this.S();this.I&this.wa?this.A-=this.B.Jh:(C(this,A(this)+a),this.A-=this.B.Ih)},function(){var a=this.ra(); -ug(this,a,1,!0)&&(this.D=this.D&-256|Oc(this.ka,a,1,this.da-2)&255,this.A-=this.B.Ch)},function(){var a=this.ra();ug(this,a,this.W,!0)&&(this.D=this.D&~this.R|Oc(this.ka,a,this.W,this.da-2)&this.R,this.A-=this.B.Ch)},function(){var a=this.ra();ug(this,a,1,!1)&&(Sc(this.ka,a,1,this.D&255,this.da-2),this.A-=this.B.Qh)},function(){var a=this.ra();ug(this,a,this.W,!1)&&(Sc(this.ka,a,this.W,this.D&this.R,this.da-2),this.A-=this.B.Qh)},function(){var a=this.Ea(),b=A(this),a=b+a;oe(this,b);C(this,a);this.A-= -this.B.Lj},function(){var a=this.Ea();C(this,A(this)+a);this.A-=this.B.Dh},function(){se(this,this.Ea(),Gg(this));this.A-=this.B.hk},function(){var a=this.S();C(this,A(this)+a);this.A-=this.B.Dh},function(){var a=this.L&65535;ug(this,a,1,!0)&&(this.D=this.D&-256|Oc(this.ka,a,1,this.da-1)&255,this.A-=this.B.Bh)},function(){var a=this.L&65535;ug(this,a,this.W,!0)&&(this.D=this.D&~this.R|Oc(this.ka,a,this.W,this.da-1)&this.R,this.A-=this.B.Bh)},function(){var a=this.L&65535;ug(this,a,1,!1)&&(Sc(this.ka, -a,1,this.D&255,this.da-1),this.A-=this.B.Ph)},function(){var a=this.L&65535;ug(this,a,2,!1)&&(Sc(this.ka,a,this.W,this.D&this.R,this.da-1),this.A-=this.B.Ph)},Rk,Rk,function(){this.N|=132;this.A-=this.B.bd},function(){this.N|=68;this.A-=this.B.bd},function(){this.O&131072?y.call(this,13,0):(this.Xa|=4,this.A-=2,this.ba&&t(this,-2147483648)?(ag(this),this.ba.Jb()):this.O&512||(this.ba&&ag(this),this.Jb()))},function(){cg(this)?kg(this):jg(this);this.A-=2},function(){this.vc=!1;this.kd.call(this,Wk, -fk);this.vc&&(this.D=this.D&~this.R|this.Ba&this.R)},function(){this.vc=!1;this.ib.call(this,Xk,fk);this.vc&&(this.D=this.D&~this.R|this.Ba&this.R,this.L=this.L&~this.R|this.Ya&this.R)},function(){kg(this);this.A-=2},function(){jg(this);this.A-=2},function(){this.Ma>this.lc?y.call(this,13,0):(this.O&=-513,this.A-=this.B.Jj)},function(){this.Ma>this.lc?y.call(this,13,0):(this.O|=512,this.N|=4,this.A-=2)},function(){this.O&=-1025;this.A-=2},function(){this.O|=1024;this.A-=2},function(){this.kd.call(this, -Ae,fk)},function(){this.ib.call(this,Be,fk)}],Ek=[ki,hj,ii,jj,mi,Mj,Uj,Ai],Sk=[li,ij,ji,kj,ni,Nj,Vj,Bi],Tk=[function(a,b){this.A-=-1===this.F?this.B.nc:this.B.yk;return b},Di,Di,Di,Di,Di,Di,Di],Uk=[function(a,b){this.A-=-1===this.F?this.B.qk:this.B.nk;return b},Ei,Ei,Ei,Ei,Ei,Ei,Ei],Jk=[function(a,b){var c=a;if(b&=this.Ta){var d;(b&=7)?(d=a<>8-b)&255):d=a<<7;ng(this,c,d,128)}return c},function(a,b){var c=a;if(b&=this.Ta){var d;(b&=7)?(d=a<<8-b,c=(a>>>b|d)&255):d=a;ng(this,c,d,128)}return c}, +1;this.kd.call(this,Uk,this.ra)},function(){this.N|=1;this.ib.call(this,Uk,this.Ea)},Ok,Pk,Ok,Pk,function(){if(this.O&131072&&3>this.lc)y.call(this,13,0);else{var a=this.B.ek;this.Uc=-1;ik.call(this,3,null,a)}},function(){var a=this.ra();if(this.O&131072&&3>this.lc)y.call(this,13,0);else{var b;a:{b=this.Zf[a];if(void 0!==b)for(var c=0;cthis.lc)y.call(this,13,0);else{var a=this.B.fk;this.Uc=-1;ik.call(this,4,null,a)}else this.A-=this.B.gk},function(){if(this.O&131072&&3>this.lc)y.call(this,13,0);else{this.Vc=this.Y.U;this.ta=this.Aa;this.A-=this.B.ck;if(this.qa&1&&this.O&16384){var a=this.ja(this.la.ua+0);he(this.Z,a,!1)}else{var a=this.Ma,b=ee(this),c=ee(this),d=ee(this);if(this.O&131072)d=d&131071|this.O&-131072;else if(d&131072){var e=ee(this),f=ee(this),g=ee(this),h=ee(this),k=ee(this),m=ee(this);ie(this,!0,!0);fe(this, +f);ge(this,e);ne(this,g);me(this,h);this.Ga.load(k);this.Ha.load(m)}null!=se(this,b,c,!1)&&(re(this,d,a),this.bg&&Tf(this,this.da))}this.Vc=this.ta=-1}},function(){this.kd.call(this,Jk,ck)},function(){this.ib.call(this,2==this.W?Kk:Lk,ck)},function(){this.kd.call(this,Jk,dk)},function(){this.ib.call(this,2==this.W?Kk:Lk,dk)},function(){var a=this.ra();if(a){var b=this.D&255;this.D=this.D&-65536|b/a<<8|b%a;ig(this,this.D,128);this.A-=this.B.Ij}else lk.call(this)},function(){var a=this.D&255,b=(this.D>> +8&255)*this.ra()|0,c=a+b|0;this.D=this.D&-65536|c&255;bg(this,a,b,c,191);this.A-=this.B.Hj},function(){this.D=this.D&-256|(cg(this)?255:0);this.A-=2},function(){this.D=this.D&-256|yg(this,this.Da,this.G+(this.D&255));this.A-=this.B.Hk},function(){Qk.call(this,216)},function(){Qk.call(this,217)},function(){Qk.call(this,218)},function(){Qk.call(this,219)},function(){Qk.call(this,220)},function(){Qk.call(this,221)},function(){Qk.call(this,222)},function(){Qk.call(this,223)},function(){var a=this.S(), +b=this.I-1&this.wa;this.I=this.I&~this.wa|b;b&&!fg(this)?(C(this,A(this)+a),this.A-=this.B.nk):this.A-=this.B.Ih},function(){var a=this.S(),b=this.I-1&this.wa;this.I=this.I&~this.wa|b;b&&fg(this)?(C(this,A(this)+a),this.A-=this.B.Jh):this.A-=this.B.Kh},function(){var a=this.S(),b=this.I-1&this.wa;this.I=this.I&~this.wa|b;b?(C(this,A(this)+a),this.A-=this.B.mk):this.A-=this.B.Ih},function(){var a=this.S();this.I&this.wa?this.A-=this.B.Kh:(C(this,A(this)+a),this.A-=this.B.Jh)},function(){var a=this.ra(); +ug(this,a,1,!0)&&(this.D=this.D&-256|Oc(this.ka,a,1,this.da-2)&255,this.A-=this.B.Dh)},function(){var a=this.ra();ug(this,a,this.W,!0)&&(this.D=this.D&~this.R|Oc(this.ka,a,this.W,this.da-2)&this.R,this.A-=this.B.Dh)},function(){var a=this.ra();ug(this,a,1,!1)&&(Sc(this.ka,a,1,this.D&255,this.da-2),this.A-=this.B.Rh)},function(){var a=this.ra();ug(this,a,this.W,!1)&&(Sc(this.ka,a,this.W,this.D&this.R,this.da-2),this.A-=this.B.Rh)},function(){var a=this.Ea(),b=A(this),a=b+a;oe(this,b);C(this,a);this.A-= +this.B.Mj},function(){var a=this.Ea();C(this,A(this)+a);this.A-=this.B.Eh},function(){se(this,this.Ea(),Gg(this));this.A-=this.B.ik},function(){var a=this.S();C(this,A(this)+a);this.A-=this.B.Eh},function(){var a=this.L&65535;ug(this,a,1,!0)&&(this.D=this.D&-256|Oc(this.ka,a,1,this.da-1)&255,this.A-=this.B.Ch)},function(){var a=this.L&65535;ug(this,a,this.W,!0)&&(this.D=this.D&~this.R|Oc(this.ka,a,this.W,this.da-1)&this.R,this.A-=this.B.Ch)},function(){var a=this.L&65535;ug(this,a,1,!1)&&(Sc(this.ka, +a,1,this.D&255,this.da-1),this.A-=this.B.Qh)},function(){var a=this.L&65535;ug(this,a,2,!1)&&(Sc(this.ka,a,this.W,this.D&this.R,this.da-1),this.A-=this.B.Qh)},Rk,Rk,function(){this.N|=132;this.A-=this.B.bd},function(){this.N|=68;this.A-=this.B.bd},function(){this.O&131072?y.call(this,13,0):(this.Xa|=4,this.A-=2,this.ba&&t(this,-2147483648)?(ag(this),this.ba.Jb()):this.O&512||(this.ba&&ag(this),this.Jb()))},function(){cg(this)?kg(this):jg(this);this.A-=2},function(){this.vc=!1;this.kd.call(this,Wk, +fk);this.vc&&(this.D=this.D&~this.R|this.Ba&this.R)},function(){this.vc=!1;this.ib.call(this,Xk,fk);this.vc&&(this.D=this.D&~this.R|this.Ba&this.R,this.L=this.L&~this.R|this.Ya&this.R)},function(){kg(this);this.A-=2},function(){jg(this);this.A-=2},function(){this.Ma>this.lc?y.call(this,13,0):(this.O&=-513,this.A-=this.B.Kj)},function(){this.Ma>this.lc?y.call(this,13,0):(this.O|=512,this.N|=4,this.A-=2)},function(){this.O&=-1025;this.A-=2},function(){this.O|=1024;this.A-=2},function(){this.kd.call(this, +Ae,fk)},function(){this.ib.call(this,Be,fk)}],Ek=[ki,hj,ii,jj,mi,Mj,Uj,Ai],Sk=[li,ij,ji,kj,ni,Nj,Vj,Bi],Tk=[function(a,b){this.A-=-1===this.F?this.B.nc:this.B.zk;return b},Di,Di,Di,Di,Di,Di,Di],Uk=[function(a,b){this.A-=-1===this.F?this.B.rk:this.B.pk;return b},Ei,Ei,Ei,Ei,Ei,Ei,Ei],Jk=[function(a,b){var c=a;if(b&=this.Ta){var d;(b&=7)?(d=a<>8-b)&255):d=a<<7;ng(this,c,d,128)}return c},function(a,b){var c=a;if(b&=this.Ta){var d;(b&=7)?(d=a<<8-b,c=(a>>>b|d)&255):d=a;ng(this,c,d,128)}return c}, function(a,b){var c=a;if(b&=this.Ta){var d=og(this);(b%=9)?(c=(a<>9-b)&255,d=a<>b|d<<8-b|a<<9-b)&255,d=a<<8-b):d<<=7;ng(this,c,d,128)}return c},function(a,b){var c=a;if(b&=this.Ta){var d=0;8>>b-1,a=b>>>1&255,ig(this,a,128,b&1,a&128);return a},Ei,function(a,b){if(b&=this.Ta)9>24>>b-1,a=b>>1&255,ig(this,a,128,b&1);return a}],Kk=[function(a,b){var c=a;if(b&=this.Ta){var d;(b&=15)?(d=a<>16-b)&65535):d=a<<15;ng(this,c,d,32768)}return c},function(a,b){var c=a;if(b&=this.Ta){var d;(b&=15)?(d=a<<16-b,c=(a>>>b|d)&65535):d=a;ng(this,c,d,32768)}return c},function(a,b){var c=a;if(b&=this.Ta){var d=og(this);(b%=17)?(c=(a<>17-b)&65535,d=a<>b|d<<16-b|a<<17-b)&65535,d=a<<16-b):d<<=15;ng(this,c,d,32768)}return c},function(a,b){var c=a;if(b&=this.Ta){var d=0;16>>b-1,a=b>>>1&65535,ig(this,a,32768,b&1,a&32768);return a},Ei,function(a,b){if(b&=this.Ta)17>16>>b-1,a=b>>1&65535,ig(this,a,32768,b&1);return a}],Lk=[function(a,b){var c=a;if(b&=this.Ta)c=a<>>32-b,ng(this,c,a<>>b|d;ng(this,c,d,-2147483648)}return c},function(a,b){var c=a;if(b&=this.Ta)c=og(this),c=a<>>32-b>>>1,ng(this,c,a<>>b|c<<32-b|a<<32-b<<1,ng(this,c,a<<32-b,-2147483648);return c},function(a,b){var c=a;if(b&=this.Ta)a<<=b-1,c=a<<1,ig(this,c,-2147483648,a&-2147483648,(c^a)&-2147483648);return c},function(a,b){if(b&=this.Ta)b=a>>>b-1,a=b>>>1,ig(this,a,-2147483648, -b&1,a&-2147483648);return a},Ei,function(a,b){if(b&=this.Ta)b=a>>b-1,a=b>>1,ig(this,a,-2147483648,b&1);return a}],Wk=[function(a,b){b=this.ra();ig(this,a&b,128);this.A-=-1===this.C?this.B.ai:this.B.$h;this.N|=2;return a},Ei,function(a){this.A-=-1===this.C?this.B.Ff:this.B.Ef;return a^255},function(a){var b=-a|0;bg(this,0,a,b,191,!0);this.A-=-1===this.C?this.B.Ff:this.B.Ef;return b&255},function(a){this.Ba=(this.D&255)*a&65535;this.Ba&65280?(jg(this),lg(this)):(kg(this),mg(this));this.vc=!0;this.A-= --1===this.C?this.B.uk:this.B.tk;this.N|=2;return a},function(a){var b=(this.D<<24>>24)*(a<<24>>24)|0;this.Ba=b&65535;127b?(jg(this),lg(this)):(kg(this),mg(this));this.vc=!0;this.A-=-1===this.C?this.B.Zj:this.B.Yj;this.N|=2;return a},function(a,b){if(!a)return lk.call(this),a;var c=(b=this.D&65535)/a;if(255>24,d= -(b=this.D<<16>>16)/c|0;if(d!=d<<24>>24||8086==this.ca&&-128==d)return lk.call(this),a;this.Ba=d&255|(b%c&255)<<8;this.vc=!0;this.A-=-1===this.C?this.B.Vj:this.B.Uj;this.N|=2;return a}],Xk=[function(a,b){b=this.Ea();ig(this,a&b,this.Fb);this.A-=-1===this.C?this.B.ai:this.B.$h;this.N|=2;return a},Ei,function(a){this.A-=-1===this.C?this.B.Ff:this.B.Ef;return a^this.R},function(a){var b=-a|0;bg(this,0,a,b,this.Fb|63,!0);this.A-=-1===this.C?this.B.Ff:this.B.Ef;return b&this.R},function(a,b){2==this.W? -(b=this.D&65535,b=b*a|0,this.Ba=b&65535,this.Ya=b>>16&65535):(Ki.call(this,a,this.D),80563==this.we&&68657152==this.D&&129==a&&(this.Ya=0));this.Ya?(jg(this),lg(this)):(kg(this),mg(this));this.vc=!0;this.A-=-1===this.C?this.B.wk:this.B.vk;this.N|=2;return a},function(a,b){2==this.W?(b=this.D&65535,b=(b<<16>>16)*(a<<16>>16)|0,this.Ba=b&65535,this.Ya=b>>16&65535,b=32767b):(Ji.call(this,a,this.D),b=this.Ya!=this.Ba>>31);b?(jg(this),lg(this)):(kg(this),mg(this));this.vc=!0;this.A-=-1===this.C? -this.B.ak:this.B.$j;this.N|=2;return a},function(a,b){if(2==this.W){if(!a)return lk.call(this),a;b=65536*(this.L&65535)+(this.D&65535);var c=b/a;if(65536<=c)return lk.call(this),a;this.Ba=c&65535;this.Ya=b%a&65535}else{if(!Yj.call(this,this.D,this.L,a))return lk.call(this),a;this.Ba|=0;this.Ya|=0}this.vc=!0;this.A-=-1===this.C?this.B.Tj:this.B.Sj;this.N|=2;return a},function(a,b){if(2==this.W){if(!a)return lk.call(this),a;var c=a<<16>>16,d=(b=this.L<<16|this.D&65535)/c|0;if(d!=d<<16>>16||8086==this.ca&& --32768==d)return lk.call(this),a;this.Ba=d&65535;this.Ya=b%c&65535}else{b=this.D;var c=this.L,d=a,e=0,f=0;0>d&&(d=-d|0,e=1-e);0>c&&(b=-b|0,c=~c+(b?0:1)|0,f=1,e=1-e);!Yj.call(this,b,c,d)||this.Ba>2147483647+e||this.Ya>2147483647+f?b=!1:(e&&(this.Ba=-this.Ba),f&&(this.Ya=-this.Ya),b=!0);if(!b)return lk.call(this),a;this.Ba|=0;this.Ya|=0}this.vc=!0;this.A-=-1===this.C?this.B.Xj:this.B.Wj;this.N|=2;return a}],Ae=[function(a){var b=a+1|0;bg(this,a,1,b,190);this.A-=-1===this.C?this.B.Df:this.B.Cf;return b& -255},function(a){var b=a-1|0;bg(this,a,1,b,190,!0);this.A-=-1===this.C?this.B.Df:this.B.Cf;return b&255},Ei,Ei,Ei,Ei,Ei,Ei],Be=[function(a){var b=a+1|0;bg(this,a,1,b,this.Fb|62);this.A-=-1===this.C?this.B.Df:this.B.Cf;return b&this.R},function(a){var b=a-1|0;bg(this,a,1,b,this.Fb|62,!0);this.A-=-1===this.C?this.B.Df:this.B.Cf;return b&this.R},function(a){oe(this,A(this));C(this,a);this.A-=-1===this.C?this.B.Pj:this.B.Oj;this.N|=2;return a},function(a){if(-1===this.C)return Ei.call(this,a);this.ta= -this.Aa;hk.call(this,a,this.ja(this.C+this.W));this.A-=this.B.Mj;this.N|=2;this.ta=-1;return a},function(a){C(this,a);this.A-=-1===this.C?this.B.jk:this.B.ik;this.N|=2;return a},function(a){if(-1===this.C)return Ei.call(this,a);se(this,a,this.ja(this.C+this.W));this.A-=this.B.gk;this.N|=2;return a},function(a){var b=a;this.N&512&&(a=a-2&65535,80286>this.ca&&(b=a));oe(this,b);this.A-=-1===this.C?this.B.Ic:this.B.Ak;this.N|=2;return a},Ei]; -function gf(){this.ma.call(this,Rj);this.A-=-1===this.C?6:13}function hf(){this.za.call(this,Qj);this.A-=-1===this.C?12:19}var We=Array(256);We[0]=function(){16>(this.Ia(this.da)&56)&&(this.N|=1);this.ib.call(this,this.nj,fk)};We[1]=function(){this.Ia(this.da)&16||(this.N|=1);this.ib.call(this,Yk,fk)};We[2]=function(){!(this.qa&1)||this.O&131072?y.call(this,6):this.ma.call(this,Li)};We[3]=function(){!(this.qa&1)||this.O&131072?y.call(this,6):this.ma.call(this,Ri)}; +b&1,a&-2147483648);return a},Ei,function(a,b){if(b&=this.Ta)b=a>>b-1,a=b>>1,ig(this,a,-2147483648,b&1);return a}],Wk=[function(a,b){b=this.ra();ig(this,a&b,128);this.A-=-1===this.C?this.B.bi:this.B.ai;this.N|=2;return a},Ei,function(a){this.A-=-1===this.C?this.B.Gf:this.B.Ff;return a^255},function(a){var b=-a|0;bg(this,0,a,b,191,!0);this.A-=-1===this.C?this.B.Gf:this.B.Ff;return b&255},function(a){this.Ba=(this.D&255)*a&65535;this.Ba&65280?(jg(this),lg(this)):(kg(this),mg(this));this.vc=!0;this.A-= +-1===this.C?this.B.vk:this.B.uk;this.N|=2;return a},function(a){var b=(this.D<<24>>24)*(a<<24>>24)|0;this.Ba=b&65535;127b?(jg(this),lg(this)):(kg(this),mg(this));this.vc=!0;this.A-=-1===this.C?this.B.$j:this.B.Zj;this.N|=2;return a},function(a,b){if(!a)return lk.call(this),a;var c=(b=this.D&65535)/a;if(255>24,d= +(b=this.D<<16>>16)/c|0;if(d!=d<<24>>24||8086==this.ca&&-128==d)return lk.call(this),a;this.Ba=d&255|(b%c&255)<<8;this.vc=!0;this.A-=-1===this.C?this.B.Wj:this.B.Vj;this.N|=2;return a}],Xk=[function(a,b){b=this.Ea();ig(this,a&b,this.Fb);this.A-=-1===this.C?this.B.bi:this.B.ai;this.N|=2;return a},Ei,function(a){this.A-=-1===this.C?this.B.Gf:this.B.Ff;return a^this.R},function(a){var b=-a|0;bg(this,0,a,b,this.Fb|63,!0);this.A-=-1===this.C?this.B.Gf:this.B.Ff;return b&this.R},function(a,b){2==this.W? +(b=this.D&65535,b=b*a|0,this.Ba=b&65535,this.Ya=b>>16&65535):(Ki.call(this,a,this.D),80563==this.xe&&68657152==this.D&&129==a&&(this.Ya=0));this.Ya?(jg(this),lg(this)):(kg(this),mg(this));this.vc=!0;this.A-=-1===this.C?this.B.xk:this.B.wk;this.N|=2;return a},function(a,b){2==this.W?(b=this.D&65535,b=(b<<16>>16)*(a<<16>>16)|0,this.Ba=b&65535,this.Ya=b>>16&65535,b=32767b):(Ji.call(this,a,this.D),b=this.Ya!=this.Ba>>31);b?(jg(this),lg(this)):(kg(this),mg(this));this.vc=!0;this.A-=-1===this.C? +this.B.bk:this.B.ak;this.N|=2;return a},function(a,b){if(2==this.W){if(!a)return lk.call(this),a;b=65536*(this.L&65535)+(this.D&65535);var c=b/a;if(65536<=c)return lk.call(this),a;this.Ba=c&65535;this.Ya=b%a&65535}else{if(!Yj.call(this,this.D,this.L,a))return lk.call(this),a;this.Ba|=0;this.Ya|=0}this.vc=!0;this.A-=-1===this.C?this.B.Uj:this.B.Tj;this.N|=2;return a},function(a,b){if(2==this.W){if(!a)return lk.call(this),a;var c=a<<16>>16,d=(b=this.L<<16|this.D&65535)/c|0;if(d!=d<<16>>16||8086==this.ca&& +-32768==d)return lk.call(this),a;this.Ba=d&65535;this.Ya=b%c&65535}else{b=this.D;var c=this.L,d=a,e=0,f=0;0>d&&(d=-d|0,e=1-e);0>c&&(b=-b|0,c=~c+(b?0:1)|0,f=1,e=1-e);!Yj.call(this,b,c,d)||this.Ba>2147483647+e||this.Ya>2147483647+f?b=!1:(e&&(this.Ba=-this.Ba),f&&(this.Ya=-this.Ya),b=!0);if(!b)return lk.call(this),a;this.Ba|=0;this.Ya|=0}this.vc=!0;this.A-=-1===this.C?this.B.Yj:this.B.Xj;this.N|=2;return a}],Ae=[function(a){var b=a+1|0;bg(this,a,1,b,190);this.A-=-1===this.C?this.B.Ef:this.B.Df;return b& +255},function(a){var b=a-1|0;bg(this,a,1,b,190,!0);this.A-=-1===this.C?this.B.Ef:this.B.Df;return b&255},Ei,Ei,Ei,Ei,Ei,Ei],Be=[function(a){var b=a+1|0;bg(this,a,1,b,this.Fb|62);this.A-=-1===this.C?this.B.Ef:this.B.Df;return b&this.R},function(a){var b=a-1|0;bg(this,a,1,b,this.Fb|62,!0);this.A-=-1===this.C?this.B.Ef:this.B.Df;return b&this.R},function(a){oe(this,A(this));C(this,a);this.A-=-1===this.C?this.B.Qj:this.B.Pj;this.N|=2;return a},function(a){if(-1===this.C)return Ei.call(this,a);this.ta= +this.Aa;hk.call(this,a,this.ja(this.C+this.W));this.A-=this.B.Nj;this.N|=2;this.ta=-1;return a},function(a){C(this,a);this.A-=-1===this.C?this.B.kk:this.B.jk;this.N|=2;return a},function(a){if(-1===this.C)return Ei.call(this,a);se(this,a,this.ja(this.C+this.W));this.A-=this.B.hk;this.N|=2;return a},function(a){var b=a;this.N&512&&(a=a-2&65535,80286>this.ca&&(b=a));oe(this,b);this.A-=-1===this.C?this.B.Ic:this.B.Bk;this.N|=2;return a},Ei]; +function gf(){this.ma.call(this,Rj);this.A-=-1===this.C?6:13}function hf(){this.za.call(this,Qj);this.A-=-1===this.C?12:19}var We=Array(256);We[0]=function(){16>(this.Ia(this.da)&56)&&(this.N|=1);this.ib.call(this,this.oj,fk)};We[1]=function(){this.Ia(this.da)&16||(this.N|=1);this.ib.call(this,Yk,fk)};We[2]=function(){!(this.qa&1)||this.O&131072?y.call(this,6):this.ma.call(this,Li)};We[3]=function(){!(this.qa&1)||this.O&131072?y.call(this,6):this.ma.call(this,Ri)}; We[5]=function(){this.Ma?y.call(this,13,0,0,!0):(tg(this,this.ja(2054)),this.J=this.ja(2086),this.K=this.ja(2088),this.M=this.ja(2090),this.G=this.ja(2094),this.L=this.ja(2096),this.I=this.ja(2098),this.D=this.ja(2100),ce(this.oa,2102,this.ja(2084)),ce(this.Z,2108,this.ja(2082)),ce(this.Y,2114,this.ja(2080)),ce(this.Ca,2120,this.ja(2078)),re(this,this.ja(2072)),C(this,this.ja(2074)),ge(this,this.ja(2092)),this.Kb=this.ja(2126)|this.Ia(2128)<<16,this.Pc=this.Kb+this.ja(2130),this.Pb=this.ja(2138)| this.Ia(2140)<<16,this.cd=this.Pb+this.ja(2142),ce(this.Eb,2132,this.ja(2076)),ce(this.la,2144,this.ja(2070)),this.A-=195)};We[6]=function(){this.Ma?y.call(this,13,0):(this.qa&=-9,this.A-=2)};We[11]=De;We[166]=De;We[255]=De;var B=[];B[5]=De; B[7]=function(){if(this.Ma)y.call(this,13,0,0,!0);else{var a=this.oa.bc(this.J&this.wa,204);if(-1!==a){ak.call(this,this.ia(a));var b=this.ia(a+168),c=(b&24576)>>13;re(this,this.ia(a+4),c);this.Kb=this.ia(a+112);this.Pc=this.Kb+this.ia(a+116);this.Pb=this.ia(a+100);this.cd=this.Pb+this.ia(a+104);ae(this.Eb,this.ia(a+56),this.ia(a+120),this.ia(a+124),this.ia(a+128));ae(this.la,this.ia(a+52),this.ia(a+84),this.ia(a+88),this.ia(a+92));this.J=this.ia(a+12);this.K=this.ia(a+16);this.M=this.ia(a+20);this.G= this.ia(a+28);this.L=this.ia(a+32);this.I=this.ia(a+36);this.D=this.ia(a+40);ae(this.Ha,this.ia(a+60),this.ia(a+132),this.ia(a+136),this.ia(a+140));ae(this.Ga,this.ia(a+64),this.ia(a+144),this.ia(a+148),this.ia(a+152));ae(this.Ca,this.ia(a+68),this.ia(a+156),this.ia(a+160),this.ia(a+164));ae(this.Y,this.ia(a+72),b,this.ia(a+172),this.ia(a+176));ae(this.Z,this.ia(a+76),this.ia(a+180),this.ia(a+184),this.ia(a+188));ae(this.oa,this.ia(a+80),this.ia(a+192),this.ia(a+196),this.ia(a+200));C(this,this.ia(a+ 8));ge(this,this.ia(a+24))}this.A-=122<<(a&3?1:0)}};B[16]=Fk;B[17]=Gk;B[18]=Hk;B[19]=Ik;B[32]=function(){if(this.Ma)y.call(this,13,0);else{var a,b=this.ra();switch((b&56)>>3){case 0:a=this.qa;break;case 2:a=this.Cd;break;case 3:a=this.Wc;break;default:Xe.call(this);return}vf(this,b&7,a);this.A-=6}};B[33]=function(){if(this.Ma)y.call(this,13,0);else{var a=this.ra(),b=(a&56)>>3;4==b||5==b?Xe.call(this):(vf(this,a&7,this.Qb[b]),this.A-=22)}}; B[34]=function(){if(this.Ma)y.call(this,13,0);else{var a=this.ra(),b=uf(this,a&7);switch((a&56)>>3){case 0:ak.call(this,b);this.A-=10;break;case 2:this.Cd=b;this.A-=4;break;case 3:te.call(this,b);this.A-=5;break;default:Xe.call(this)}}};B[35]=function(){if(this.Ma)y.call(this,13,0);else{var a=this.ra(),b=(a&56)>>3;4==b||5==b?Xe.call(this):(a=uf(this,a&7),a!=this.Qb[b]&&(Uf(this,!1),this.Qb[b]=a,Uf(this,!0)),this.A-=4>b?22:14)}}; -B[36]=function(){if(this.Ma)y.call(this,13,0);else{var a=this.ra(),b=(a&56)>>3;6>b?Xe.call(this):(vf(this,a&7,this.dg[b]),this.A-=12)}};B[38]=function(){if(this.Ma)y.call(this,13,0);else{var a=this.ra(),b=(a&56)>>3;6>b?Xe.call(this):(this.dg[b]=uf(this,a&7),this.A-=12)}};B[128]=function(){var a=this.Ea();hg(this)?(C(this,A(this)+a),this.A-=this.B.Qa):this.A-=this.B.Ra};B[129]=function(){var a=this.Ea();hg(this)?this.A-=this.B.Ra:(C(this,A(this)+a),this.A-=this.B.Qa)}; +B[36]=function(){if(this.Ma)y.call(this,13,0);else{var a=this.ra(),b=(a&56)>>3;6>b?Xe.call(this):(vf(this,a&7,this.eg[b]),this.A-=12)}};B[38]=function(){if(this.Ma)y.call(this,13,0);else{var a=this.ra(),b=(a&56)>>3;6>b?Xe.call(this):(this.eg[b]=uf(this,a&7),this.A-=12)}};B[128]=function(){var a=this.Ea();hg(this)?(C(this,A(this)+a),this.A-=this.B.Qa):this.A-=this.B.Ra};B[129]=function(){var a=this.Ea();hg(this)?this.A-=this.B.Ra:(C(this,A(this)+a),this.A-=this.B.Qa)}; B[130]=function(){var a=this.Ea();cg(this)?(C(this,A(this)+a),this.A-=this.B.Qa):this.A-=this.B.Ra};B[131]=function(){var a=this.Ea();cg(this)?this.A-=this.B.Ra:(C(this,A(this)+a),this.A-=this.B.Qa)};B[132]=function(){var a=this.Ea();fg(this)?(C(this,A(this)+a),this.A-=this.B.Qa):this.A-=this.B.Ra};B[133]=function(){var a=this.Ea();fg(this)?this.A-=this.B.Ra:(C(this,A(this)+a),this.A-=this.B.Qa)};B[134]=function(){var a=this.Ea();cg(this)||fg(this)?(C(this,A(this)+a),this.A-=this.B.Qa):this.A-=this.B.Ra}; B[135]=function(){var a=this.Ea();cg(this)||fg(this)?this.A-=this.B.Ra:(C(this,A(this)+a),this.A-=this.B.Qa)};B[136]=function(){var a=this.Ea();gg(this)?(C(this,A(this)+a),this.A-=this.B.Qa):this.A-=this.B.Ra};B[137]=function(){var a=this.Ea();gg(this)?this.A-=this.B.Ra:(C(this,A(this)+a),this.A-=this.B.Qa)};B[138]=function(){var a=this.Ea();dg(this)?(C(this,A(this)+a),this.A-=this.B.Qa):this.A-=this.B.Ra};B[139]=function(){var a=this.Ea();dg(this)?this.A-=this.B.Ra:(C(this,A(this)+a),this.A-=this.B.Qa)}; B[140]=function(){var a=this.Ea();!gg(this)!=!hg(this)?(C(this,A(this)+a),this.A-=this.B.Qa):this.A-=this.B.Ra};B[141]=function(){var a=this.Ea();!gg(this)==!hg(this)?(C(this,A(this)+a),this.A-=this.B.Qa):this.A-=this.B.Ra};B[142]=function(){var a=this.Ea();fg(this)||!gg(this)!=!hg(this)?(C(this,A(this)+a),this.A-=this.B.Qa):this.A-=this.B.Ra};B[143]=function(){var a=this.Ea();fg(this)||!gg(this)!=!hg(this)?this.A-=this.B.Ra:(C(this,A(this)+a),this.A-=this.B.Qa)};B[144]=function(){bk.call(this,lj)}; B[145]=function(){bk.call(this,lj)};B[146]=function(){bk.call(this,mj)};B[147]=function(){bk.call(this,nj)};B[148]=function(){bk.call(this,oj)};B[149]=function(){bk.call(this,pj)};B[150]=function(){bk.call(this,qj)};B[151]=function(){bk.call(this,rj)};B[152]=function(){bk.call(this,sj)};B[153]=function(){bk.call(this,tj)};B[154]=function(){bk.call(this,uj)};B[155]=function(){bk.call(this,vj)};B[156]=function(){bk.call(this,wj)};B[157]=function(){bk.call(this,xj)};B[158]=function(){bk.call(this,yj)}; -B[159]=function(){bk.call(this,zj)};B[160]=function(){le(this,this.Ga.U,this.W,2);this.A-=this.B.re};B[161]=function(){this.ta=this.Aa;var a=ee(this);this.Ga.load(a);this.A-=this.B.nc;this.ta=-1};B[163]=function(){this.za.call(this,wi);-1!==this.C&&(this.A-=6)};B[164]=function(){this.za.call(this,2==this.W?Aj:Cj);this.A-=-1===this.C?3:7};B[165]=function(){this.za.call(this,2==this.W?Ej:Fj);this.A-=-1===this.C?3:7};B[168]=function(){le(this,this.Ha.U,this.W,2);this.A-=this.B.re}; +B[159]=function(){bk.call(this,zj)};B[160]=function(){le(this,this.Ga.U,this.W,2);this.A-=this.B.se};B[161]=function(){this.ta=this.Aa;var a=ee(this);this.Ga.load(a);this.A-=this.B.nc;this.ta=-1};B[163]=function(){this.za.call(this,wi);-1!==this.C&&(this.A-=6)};B[164]=function(){this.za.call(this,2==this.W?Aj:Cj);this.A-=-1===this.C?3:7};B[165]=function(){this.za.call(this,2==this.W?Ej:Fj);this.A-=-1===this.C?3:7};B[168]=function(){le(this,this.Ha.U,this.W,2);this.A-=this.B.se}; B[169]=function(){this.ta=this.Aa;var a=ee(this);this.Ha.load(a);this.A-=this.B.nc;this.ta=-1};B[171]=function(){this.za.call(this,zi);-1!==this.C&&(this.A-=5)};B[172]=function(){this.za.call(this,2==this.W?Gj:Ij);this.A-=-1===this.C?3:7};B[173]=function(){this.za.call(this,2==this.W?Kj:Lj);this.A-=-1===this.C?3:7};B[175]=function(){this.ma.call(this,2==this.W?Gi:Ii)};B[178]=function(){this.ma.call(this,Si)};B[179]=function(){this.za.call(this,yi);-1!==this.C&&(this.A-=5)}; B[180]=function(){this.ma.call(this,Pi)};B[181]=function(){this.ma.call(this,Qi)}; B[182]=function(){this.kc.call(this,Ui);switch(this.ga>>3&7){case 0:this.D=this.D&~this.R|this.D&255;break;case 1:this.I=this.I&~this.R|this.I&255;break;case 2:this.L=this.L&~this.R|this.L&255;break;case 3:this.G=this.G&~this.R|this.G&255;break;case 4:this.Hc=this.Hc&~this.R|this.D>>8&255;this.D=this.xa;break;case 5:this.M=this.M&~this.R|this.I>>8&255;this.I=this.xa;break;case 6:this.K=this.K&~this.R|this.L>>8&255;this.L=this.xa;break;case 7:this.J=this.J&~this.R|this.G>>8&255,this.G=this.xa}this.A-= @@ -415,381 +415,382 @@ B[182]=function(){this.kc.call(this,Ui);switch(this.ga>>3&7){case 0:this.D=this. B[188]=function(){this.ma.call(this,qi)};B[189]=function(){this.ma.call(this,ri)}; B[190]=function(){this.kc.call(this,Ui);switch(this.ga>>3&7){case 0:this.D=this.D&~this.R|(this.D&255)<<24>>24&this.R;break;case 1:this.I=this.I&~this.R|(this.I&255)<<24>>24&this.R;break;case 2:this.L=this.L&~this.R|(this.L&255)<<24>>24&this.R;break;case 3:this.G=this.G&~this.R|(this.G&255)<<24>>24&this.R;break;case 4:this.Hc=this.Hc&~this.R|this.D<<16>>24&this.R;this.D=this.xa;break;case 5:this.M=this.M&~this.R|this.I<<16>>24&this.R;this.I=this.xa;break;case 6:this.K=this.K&~this.R|this.L<<16>>24& this.R;this.L=this.xa;break;case 7:this.J=this.J&~this.R|this.G<<16>>24&this.R,this.G=this.xa}this.A-=-1===this.C?3:6};B[191]=function(){je(this,2);this.ma.call(this,Vi);switch(this.ga>>3&7){case 0:this.D=this.D<<16>>16;break;case 1:this.I=this.I<<16>>16;break;case 2:this.L=this.L<<16>>16;break;case 3:this.G=this.G<<16>>16;break;case 4:this.Hc=this.Hc<<16>>16;break;case 5:this.M=this.M<<16>>16;break;case 6:this.K=this.K<<16>>16;break;case 7:this.J=this.J<<16>>16}this.A-=-1===this.C?3:6}; -var Vf=[function(){this.A-=2+(-1===this.C?0:1);return this.Eb.U},function(){this.A-=2+(-1===this.C?0:1);return this.la.U},function(a){this.N|=2;this.Eb.load(a);this.A-=17+(-1===this.C?0:2);return a},function(a){this.N|=2;-1!==this.la.load(a)&&(this.fb(this.la.Lb+4,this.la.mb|=512),this.la.type|=512);this.A-=17+(-1===this.C?0:2);return a},function(a){this.N|=2;this.A-=14+(-1===this.C?0:2);if(-1!==this.xb.load(a)&&2048!=(this.xb.mb&2560)&&(this.xb.qc>=this.Ma&&this.xb.qc>=(a&3)||7168==(this.xb.mb&7168)))return sg(this), -a;qg(this);return a},function(a){this.N|=2;this.A-=14+(-1===this.C?0:2);if(-1!==this.xb.load(a)&&512==(this.xb.mb&2560)&&this.xb.qc>=this.Ma&&this.xb.qc>=(a&3))return sg(this),a;qg(this);return a},Ei,Ei],Ce=[Ue,Ue,Ue,Ue,Ue,Ue,Ei,Ei],Yk=[function(a){if(-1===this.C)y.call(this,6);else{a=this.Pc-this.Kb;var b=this.Kb;80286==this.ca?b|=-16777216:80386<=this.ca&&2!=this.W&&(a|=b<<16);this.bb(this.C+2,b);this.A-=11}return a},function(a){if(-1===this.C)y.call(this,6);else{a=this.cd-this.Pb;var b=this.Pb; -80286==this.ca?b|=-16777216:80386<=this.ca&&2!=this.W&&(a|=b<<16);this.bb(this.C+2,b);this.A-=12}return a},function(a){-1===this.C||this.O&131072?y.call(this,6):(this.Kb=this.ia(this.C+2)&(this.R|this.R<<8),a&=65535,this.Pc=this.Kb+a,this.N|=2,this.A-=11);return a},function(a){-1===this.C||this.O&131072?y.call(this,6):(this.Pb=this.ia(this.C+2)&(this.R|this.R<<8),a&=65535,this.cd=this.Pb+a,this.N|=2,this.A-=12);return a},function(){this.A-=2+(-1===this.C?0:1);return this.qa},Ei,function(a){this.O& +var Vf=[function(){this.A-=2+(-1===this.C?0:1);return this.Eb.U},function(){this.A-=2+(-1===this.C?0:1);return this.la.U},function(a){this.N|=2;this.Eb.load(a);this.A-=17+(-1===this.C?0:2);return a},function(a){this.N|=2;-1!==this.la.load(a)&&(this.fb(this.la.Lb+4,this.la.lb|=512),this.la.type|=512);this.A-=17+(-1===this.C?0:2);return a},function(a){this.N|=2;this.A-=14+(-1===this.C?0:2);if(-1!==this.xb.load(a)&&2048!=(this.xb.lb&2560)&&(this.xb.qc>=this.Ma&&this.xb.qc>=(a&3)||7168==(this.xb.lb&7168)))return sg(this), +a;qg(this);return a},function(a){this.N|=2;this.A-=14+(-1===this.C?0:2);if(-1!==this.xb.load(a)&&512==(this.xb.lb&2560)&&this.xb.qc>=this.Ma&&this.xb.qc>=(a&3))return sg(this),a;qg(this);return a},Ei,Ei],Ce=[Ue,Ue,Ue,Ue,Ue,Ue,Ei,Ei],Yk=[function(a){if(-1===this.C)y.call(this,6);else{a=this.Pc-this.Kb;var b=this.Kb;80286==this.ca?b|=-16777216:80386<=this.ca&&2!=this.W&&(a|=b<<16);this.ab(this.C+2,b);this.A-=11}return a},function(a){if(-1===this.C)y.call(this,6);else{a=this.cd-this.Pb;var b=this.Pb; +80286==this.ca?b|=-16777216:80386<=this.ca&&2!=this.W&&(a|=b<<16);this.ab(this.C+2,b);this.A-=12}return a},function(a){-1===this.C||this.O&131072?y.call(this,6):(this.Kb=this.ia(this.C+2)&(this.R|this.R<<8),a&=65535,this.Pc=this.Kb+a,this.N|=2,this.A-=11);return a},function(a){-1===this.C||this.O&131072?y.call(this,6):(this.Pb=this.ia(this.C+2)&(this.R|this.R<<8),a&=65535,this.cd=this.Pb+a,this.N|=2,this.A-=12);return a},function(){this.A-=2+(-1===this.C?0:1);return this.qa},Ei,function(a){this.O& 131072?y.call(this,6):(tg(this,a),this.A-=-1===this.C?3:6,this.N|=2);return a},Ei],Zk=[Ei,Ei,Ei,Ei,si,vi,ui,ti]; function $k(a){mb.call(this,"ChipSet",a,32768);var b=a.model;b&&!al[b]&&gb("Unrecognized ChipSet model: "+b);this.ca=al[b]||bl;this.C=[];b=cl(a[dl]);this.C[0]=[b,b];null==b&&(this.N=[360,360],(b=a.floppies)&&b.length&&(this.N=b),el(this,fl,this.N.length),el(this,gl,a.monitor||(this.ca=dh&&(this.za=this.ha=2);this.O=a.scaleTimers||!1;this.Ma=a.rtcDate;this.Ga=!1;a.sound&&(this.Da=this.la=null,window&&(this.Da=window.AudioContext|| window.webkitAudioContext),this.Da&&(this.la=new this.Da));this.reset(!0);Ib(this)}ba($k,mb);l=$k.prototype;l.Cb=function(a,b,c){switch(b){case dl:return this.na[b]=c,il(this,0,b),!0;case hl:if((this.ca|0)==jl||this.ca==kl)return this.na[b]=c,il(this,1,b),!0;break;case ll:return this.na[b]=c,!0}return!1}; l.uc=function(a,b,c,d){this.ka=b;this.H=c;this.ba=d;this.pa=a;this.Tc=Wb(a,"FPU");el(this,ml,this.Tc?1:0,!0);this.B=Wb(a,"Keyboard");this.Ba=c.T.sd/nl;Nc(b,this,ol);Rc(b,this,pl);this.ca=dh){this.D=Ml;this.L=0;this.K=Nl;this.oa=0;this.M=Ol|Pl;512<=Ql(this)&&(this.M|=Rl);+Sl(this,gl,void 0)==Tl&&(this.M|=Ul);(this.ca|0)==wl&&(this.M=this.M|Vl|Wl);this.qa= -Xl|Yl;this.Y=Array(8);this.V=0;a&&(this.A=Array(Bl));Zl(this,this.Ma);for(a=$l;a<=am;a++)this.A[a]=0;for(a=bm;ac?c=c?c:12:c=(c-=12)?c+128:140,d=!0);a.A[Qd]&Qm||(d&&128>8} -l.save=function(){var a=new Wf(this);a.set(0,[this.C]);for(var b=[],c=0;c=dh&&(a.set(5,[this.D,this.L,this.K,this.oa,this.M,this.qa]),a.set(6,[this.Y[7],this.Y,this.V,this.A,this.ma,this.Z]));return a.data()}; l.restore=function(a){var b,c;b=a[0];Array.isArray(b[0])?this.C=b[0]:(this.C[0][0]=b[0],this.C[1][0]=b[1]&15,this.C[0][1]=b[2],this.C[1][1]=b[3]&15);El(this);b=a[1];for(c=0;c=f;f++){var g="pcjs-bitCell";f||(g+=" pcjs-bitCellLeft");d+='
'+f+"
\n"}e.innerHTML=d;an(a,b,c,!0)}function bn(a,b,c){if(b=(a=cn[a.ca|0])&&a[b])for(var d in b)if(a=b[d],a.yc&1<g.qb[0]&&(g.qb[0]=255,g.qb[1]--,0>g.qb[1]&&(g.qb[1]=255)));return h}function rn(a,b,c,d,e,f){var g=a.F[b];t(a,768)&&w(a,d,e,f,"DMA"+b+".CHANNEL"+c+".COUNT["+g.zb+"]",null,!0);a=g.oc[c];a.qb[g.zb]=a.pc[g.zb]=e;g.zb^=1}function sn(a,b,c,d){var e=a.F[b],f=e.Mb|tn;e.Mb&=~un;t(a,768)&&w(a,c,null,d,"DMA"+b+".STATUS",f,!0);return f} -function vn(a,b,c,d,e){var f=a.F[b];t(a,768)&&w(a,c,d,e,"DMA"+b+".REQ",null,!0);a=d&3;f.Mb=f.Mb&~(16<>2].oc[b&3],c,d,e)}function zn(a,b,c){b=a.F[b>>2].oc[b&3];b.mg&&b.eh&&b.Ag?(c&&(b.done=c),b.ne||Jn(a,b,!0)):c&&c(!0)} -function Jn(a,b,c){c&&(b.count=b.qb[1]<<8|b.qb[0],b.type=b.mode&Kn,b.rj=b.ng=!1);for(var d=!1;0<=b.count&&(c=b.hg<<16|b.tb[1]<<8|b.tb[0],b.type==Ln?(d=!0,function(c){b.eh.call(b.mg,b.Ag,-1,function(e,g){0>e&&(b.rj||(b.rj=!0),e=255);b.ne||a.ka.fc(c,e);(d=g)&&setTimeout(function(){Mn(b)||Jn(a,b)},0)})}(c)):b.type==Nn?(c=a.ka.Ia(c),0>b.eh.call(b.mg,b.Ag,c)&&(b.ng=!0)):b.type!=On&&(b.ng=!0)),!d&&!Mn(b););} -function Mn(a){if(!a.ng&&0<=--a.count&&(a.mode&Pn?(a.tb[0]--,0>a.tb[0]&&(a.tb[0]=255,a.tb[1]--,0>a.tb[1]&&(a.tb[1]=255))):(a.tb[0]++,255>3];b=1<<(b&7);d.ac&b||(d.ac|=b,d.We=c||0,eo(a))}function eh(a,b){var c=a.hc[b>>3];b=1<<(b&7);c.ac&b&&(c.ac&=~b,eo(a))}function eo(a,b){var c,d=-1;1>=1),Fd(a.H,e))),b==ro&&c==vo&&Um(a))}function wo(a,b,c,d){w(a,c,null,d,"PIT"+b+".CTRL",null,2048);return b?a.va:a.ta} -function xo(a,b,c,d,e){w(a,c,d,e,"PIT"+b+".CTRL",null,2048);e=0;c=d&yo;b?(e=3,a.va=d):a.ta=d;if(c==zo){if(!(d&Ao))for(c=0;2>=c;c++)if(d&Bo<=c;c++)d&Bo<>=Go;var f=d&Ho,g=d&Io;d&=Jo;if(d==Ko)Fo(a,e+c);else{e+=c;var h=a.G[e];h.Qf=d;h.mode=g;h.Zg=f;h.pc=[0,0];h.qb=[0,0];h.je=[0,0];h.gd=!1;h.Me=!1;h.le=!1;h.Qe=!1;no(a,e);b==ro&&c==so&&eh(a,to);b==ro&&c==vo&&255==a.hc[0].od&& -a.J==(Lo|Mo|No|Oo)&&(b=a.G[0],b.Mc[0]=b.pc[0],b.Mc[1]=b.pc[1],b.jd=Dd(a.H,a.O))}}}function uo(a,b){a=a.G[b];(b=a.pc[1]<<8|a.pc[0])||(b=1==a.ad?256:65536);return b}function Od(a,b){a=a.G[b];(b=a.Mc[1]<<8|a.Mc[0])||(b=1==a.ad?256:65536);return b}function Fo(a,b){Al(a,b);var c=a.G[b];c.je[0]=c.qb[0];c.je[1]=c.qb[1];c.Me=!0;no(a,b)}function no(a,b){a=a.G[b];a.rd=a.Qf==Po?1:0;a.ad=a.Qf==Qo?2:1} -function Al(a,b,c){var d=a.G[b];if(d.le&&(b!=vo||a.J&Lo)){var e=Dd(a.H,a.O),f=(e-d.jd)/a.Ba|0;0>f&&(d.jd=e,f=0);var g=uo(a,b),h=Od(a,b)-f;d.mode==po?(0>=h&&(h=0),h||(d.gd=!0,d.le=!1,b||gh(a,to))):d.mode==Ro?(d.gd=1!=h,0>=h&&(h=g+h,0>=h&&(h=g),d.Mc[0]=h&255,d.Mc[1]=h>>8&255,d.jd=e,!b&&d.gd&&gh(a,to))):d.mode==Pd&&(h-=f,0>=h&&(d.gd=!d.gd,h=g+h,0>=h&&(h=g),d.Mc[0]=h&255,d.Mc[1]=h>>8&255,d.jd=e,!b&&d.gd&&gh(a,to)));d.qb[0]=h&255;d.qb[1]=h>>8&255;c&&(a.jd=0)}return d} +function nn(a,b,c,d,e){var f=a.F[b],g=f.oc[c],h=g.sb[f.zb];t(a,768)&&w(a,d,null,e,"DMA"+b+".CHANNEL"+c+".ADDR["+f.zb+"]",h,!0);f.zb^=1;b||c!=on||f.zb||(g.sb[0]++,255g.pb[0]&&(g.pb[0]=255,g.pb[1]--,0>g.pb[1]&&(g.pb[1]=255)));return h}function rn(a,b,c,d,e,f){var g=a.F[b];t(a,768)&&w(a,d,e,f,"DMA"+b+".CHANNEL"+c+".COUNT["+g.zb+"]",null,!0);a=g.oc[c];a.pb[g.zb]=a.pc[g.zb]=e;g.zb^=1}function sn(a,b,c,d){var e=a.F[b],f=e.Mb|tn;e.Mb&=~un;t(a,768)&&w(a,c,null,d,"DMA"+b+".STATUS",f,!0);return f} +function vn(a,b,c,d,e){var f=a.F[b];t(a,768)&&w(a,c,d,e,"DMA"+b+".REQ",null,!0);a=d&3;f.Mb=f.Mb&~(16<>2].oc[b&3],c,d,e)}function zn(a,b,c){b=a.F[b>>2].oc[b&3];b.ng&&b.fh&&b.Bg?(c&&(b.done=c),b.oe||Jn(a,b,!0)):c&&c(!0)} +function Jn(a,b,c){c&&(b.count=b.pb[1]<<8|b.pb[0],b.type=b.mode&Kn,b.sj=b.og=!1);for(var d=!1;0<=b.count&&(c=b.ig<<16|b.sb[1]<<8|b.sb[0],b.type==Ln?(d=!0,function(c){b.fh.call(b.ng,b.Bg,-1,function(e,g){0>e&&(b.sj||(b.sj=!0),e=255);b.oe||a.ka.fc(c,e);(d=g)&&setTimeout(function(){Mn(b)||Jn(a,b)},0)})}(c)):b.type==Nn?(c=a.ka.Ia(c),0>b.fh.call(b.ng,b.Bg,c)&&(b.og=!0)):b.type!=On&&(b.og=!0)),!d&&!Mn(b););} +function Mn(a){if(!a.og&&0<=--a.count&&(a.mode&Pn?(a.sb[0]--,0>a.sb[0]&&(a.sb[0]=255,a.sb[1]--,0>a.sb[1]&&(a.sb[1]=255))):(a.sb[0]++,255>3];b=1<<(b&7);d.ac&b||(d.ac|=b,d.Xe=c||0,eo(a))}function eh(a,b){var c=a.hc[b>>3];b=1<<(b&7);c.ac&b&&(c.ac&=~b,eo(a))}function eo(a,b){var c,d=-1;1>=1),Fd(a.H,e))),b==ro&&c==vo&&Um(a))}function wo(a,b,c,d){w(a,c,null,d,"PIT"+b+".CTRL",null,2048);return b?a.va:a.ta} +function xo(a,b,c,d,e){w(a,c,d,e,"PIT"+b+".CTRL",null,2048);e=0;c=d&yo;b?(e=3,a.va=d):a.ta=d;if(c==zo){if(!(d&Ao))for(c=0;2>=c;c++)if(d&Bo<=c;c++)d&Bo<>=Go;var f=d&Ho,g=d&Io;d&=Jo;if(d==Ko)Fo(a,e+c);else{e+=c;var h=a.G[e];h.Rf=d;h.mode=g;h.$g=f;h.pc=[0,0];h.pb=[0,0];h.ke=[0,0];h.gd=!1;h.Ne=!1;h.me=!1;h.Re=!1;no(a,e);b==ro&&c==so&&eh(a,to);b==ro&&c==vo&&255==a.hc[0].od&& +a.J==(Lo|Mo|No|Oo)&&(b=a.G[0],b.Mc[0]=b.pc[0],b.Mc[1]=b.pc[1],b.jd=Dd(a.H,a.O))}}}function uo(a,b){a=a.G[b];(b=a.pc[1]<<8|a.pc[0])||(b=1==a.ad?256:65536);return b}function Od(a,b){a=a.G[b];(b=a.Mc[1]<<8|a.Mc[0])||(b=1==a.ad?256:65536);return b}function Fo(a,b){Al(a,b);var c=a.G[b];c.ke[0]=c.pb[0];c.ke[1]=c.pb[1];c.Ne=!0;no(a,b)}function no(a,b){a=a.G[b];a.rd=a.Rf==Po?1:0;a.ad=a.Rf==Qo?2:1} +function Al(a,b,c){var d=a.G[b];if(d.me&&(b!=vo||a.J&Lo)){var e=Dd(a.H,a.O),f=(e-d.jd)/a.Ba|0;0>f&&(d.jd=e,f=0);var g=uo(a,b),h=Od(a,b)-f;d.mode==po?(0>=h&&(h=0),h||(d.gd=!0,d.me=!1,b||gh(a,to))):d.mode==Ro?(d.gd=1!=h,0>=h&&(h=g+h,0>=h&&(h=g),d.Mc[0]=h&255,d.Mc[1]=h>>8&255,d.jd=e,!b&&d.gd&&gh(a,to))):d.mode==Pd&&(h-=f,0>=h&&(d.gd=!d.gd,h=g+h,0>=h&&(h=g),d.Mc[0]=h&255,d.Mc[1]=h>>8&255,d.jd=e,!b&&d.gd&&gh(a,to)));d.pb[0]=h&255;d.pb[1]=h>>8&255;c&&(a.jd=0)}return d} function Nd(a,b){for(var c=0;c=dh){b=a.H.T.sd;c=Dd(a.H,a.O);null==a.Aa&&(a.ma=Dd(a.H,a.O),a.Ha=1024,a.Aa=Math.floor(a.H.T.sd/a.Ha),Sm(a));c>=a.Z&&(a.A[Om]|=So,a.A[Qd]&Rd&&(a.A[Om]|=To,gh(a,Uo)),a.Z=c+a.Aa);a.A[km]==a.A[lm]&&a.A[mm]==a.A[nm]&&a.A[om]==a.A[pm]&&(a.A[Om]|=Vo,a.A[Qd]&Wo&&(a.A[Om]|=To,gh(a,Uo)));var d=c-a.ma,e=Math.floor(d/b);if(e&&!(a.A[Qd]&Xo)){for(;e--;)if(60<=++a.A[km]&&(a.A[km]=0,60<=++a.A[mm]&&(a.A[mm]=0,24<=++a.A[om]))){a.A[om]=0;a.A[Hm]=a.A[Hm]% -7+1;var f;f=a.A[Km];var g=Ia[a.A[Jm]-1];28==g&&(f%4||!(f%100)&&f%400||g++);f=g;++a.A[Im]>f&&(a.A[Im]=1,12<++a.A[Jm]&&(a.A[Jm]=1,a.A[Km]=(a.A[Km]+1)%100))}a.A[Om]|=Yo;a.A[Qd]&Zo&&(a.A[Om]|=To,gh(a,Uo))}a.ma=c-d%b}}l.Gm=function(a,b){var c=this.xa;this.ga&$o&&(this.J&ap?c=this.C[0][1]:this.B&&(c=bp(this.B)));w(this,a,null,b,"PPI_A",c);return c};l.jo=function(a,b,c){w(this,a,b,c,"PPI_A");this.xa=b};l.Hm=function(a,b){var c=this.J;w(this,a,null,b,"PPI_B",c);return c}; -l.ko=function(a,b,c){w(this,a,b,c,"PPI_B");cp(this,b)};function cp(a,b){var c=!!(b&dp),d=!!(a.J&dp);a.J=b;a.B&&ep(a.B,!(b&ap),!!(b&Oo));c!=d&&Um(a,c)}l.Im=function(a,b){var c=0,c=(this.ca|0)==jl?this.J&Mo?c|this.C[1][1]&fp:c|this.C[1][1]>>4&1:this.J&gp?c|this.C[0][1]>>4:c|this.C[0][1]&15;this.J&Lo&&Al(this,vo).gd&&(c=this.J&dp?c|hp:c|ip);w(this,a,null,b,"PPI_C",c,32896);return c};l.lo=function(a,b,c){w(this,a,b,c,"PPI_C");this.Ca=b};l.Jm=function(a,b){var c=this.ga;w(this,a,null,b,"PPI_CTRL",c);return c}; -l.mo=function(a,b,c){w(this,a,b,c,"PPI_CTRL");this.ga=b};l.Sl=function(a,b){var c=this.B?bp(this.B):0;w(this,a,null,b,"8041_KBD",c);this.aa&=~jp;return c};l.tn=function(a,b,c){w(this,a,b,c,"8041_KBD")};l.Rl=function(a,b){var c=this.J;w(this,a,null,b,"8041_CTRL",c);return c};l.sn=function(a,b,c){w(this,a,b,c,"8041_CTRL");cp(this,b)};l.Tl=function(a,b){var c=this.aa;w(this,a,null,b,"8041_STATUS",c);return c}; -l.Ul=function(a,b){var c=this.oa;w(this,a,null,b,"8042_OUTBUFF",c,16384);this.D&=~(jp|kp);this.B&&lp(this.B);return c}; -l.vn=function(a,b,c){w(this,a,b,c,"8042_INBUF.DATA",null,16384);if(this.D&mp)switch(this.L){case np:op(this,b);break;case pp:qp(this,b);break;default:if(op(this,this.K&~Nl),this.B){a=this.B;c=b;var d=-1;t(a)&&Lb(a,"sendCmd("+r(c)+")");switch(a.F||c){case rp:d=sp;tp(a);break;case up:a.F&&(c=0);vp(a,sp);a.F=c;break;case wp:a.F&&(c=0);vp(a,sp);a.F=c;break;default:Lb(a,"sendCmd(): unrecognized command")}xp(this,d)}}this.L=b;this.D&=~mp}; -l.Vl=function(a,b){var c=this.J&~(yp|zp)|(Dd(this.H)&64?zp:0);w(this,a,null,b,"8042_RWREG",c,16384);return c};l.wn=function(a,b,c){w(this,a,b,c,"8042_RWREG",null,16384);cp(this,b)};l.Wl=function(a,b){w(this,a,null,b,"8042_STATUS",this.D,16384);a=this.D&255;this.D&kp&&(this.D|=jp,this.D&=~kp);return a}; -l.un=function(a,b,c){w(this,a,b,c,"8042_INBUFF.CMD",null,16384);this.L=b;this.D|=mp;a=0;this.L>=Ap&&(a=this.L^15,this.L=Ap);switch(this.L){case Bp:xp(this,this.K);break;case Cp:op(this,this.K|Nl);break;case Dp:op(this,this.K&~Nl);this.B&&lp(this.B);break;case Ep:this.B&&(a=this.B,a.A=[],t(a)&&Lb(a,"scan codes flushed"));op(this,this.K|Nl);xp(this,Fp);qp(this,Xl|Yl);break;case Gp:xp(this,Hp);break;case Ip:xp(this,this.M);break;case Jp:xp(this,this.qa);break;case Kp:xp(this,this.K&Nl?0:Lp);break;case Ap:a& -1&&jf(this.H)}};function op(a,b){a.K=b;a.D=a.D&~Mp|b&Np;a.B&&ep(a.B,!!(b&Op),!(b&Nl))}function xp(a,b,c){0<=b&&(a.oa=b,c?a.D|=jp:(a.D&=~jp,a.D|=kp))}function qp(a,b){a.qa=b;nc(a.ka,!!(b&Yl));b&Xl||jf(a.H)}function Pp(a,b){a.ca>4)+(c&15),e=!0);if(d==om||d==pm)e&&23=c?c=12==c?0:c:(c-=116,c=24==c?12:c))}}else c=b;this.A[d]=c;d==Qd&&a&Rd&&b&Rd&&Sm(this)};l.Nk=function(a,b,c){w(this,a,b,c,"NMI");this.da=b};l.Vn=function(a,b,c){w(this,a,b,c,"FPU.CLEAR")};l.Wn=function(a,b,c){w(this,a,b,c,"FPU.RESET");this.Tc&&Ng(this.Tc)}; -l.Xm=function(a){if(t(this,16)&&Vk(this.ba,26,a)){var b=this.H.D>>8;Sf(this.H,a,function(a,d){return function(c){d=Dd(a.H)-d;var e,g=a.H.L&255,h=a.H.L>>8,k=a.H.L&255,m=a.H.L>>8;if(2==b||3==b)e=" CH(hour)="+sa(h)+" CL(min)="+r(g)+" DH(sec)="+r(m);else if(4==b||5==b)e=" CX(year)="+sa(a.H.I)+" DH(month)="+r(m)+" DL(day)="+r(k);g=a.ba;h=d;g.message("INT "+r(26)+": C="+(cg(g.H)?1:0)+(e||"")+" (cycles="+h+(c?",level="+(c+1):"")+")")}}(this,Dd(this.H)))}return!0}; -function Um(a,b){if(a.la)try{void 0!==b?a.Ga=b:b=!!(a.Ga&&a.H&&a.H.ea.wb);var c=Math.round(nl/uo(a,vo));if(20>c||2E4f&&(a.A[Im]=1,12<++a.A[Jm]&&(a.A[Jm]=1,a.A[Km]=(a.A[Km]+1)%100))}a.A[Om]|=Yo;a.A[Qd]&Zo&&(a.A[Om]|=To,gh(a,Uo))}a.ma=c-d%b}}l.Hm=function(a,b){var c=this.xa;this.ga&$o&&(this.J&ap?c=this.C[0][1]:this.B&&(c=bp(this.B)));w(this,a,null,b,"PPI_A",c);return c};l.ko=function(a,b,c){w(this,a,b,c,"PPI_A");this.xa=b};l.Im=function(a,b){var c=this.J;w(this,a,null,b,"PPI_B",c);return c}; +l.lo=function(a,b,c){w(this,a,b,c,"PPI_B");cp(this,b)};function cp(a,b){var c=!!(b&dp),d=!!(a.J&dp);a.J=b;a.B&&ep(a.B,!(b&ap),!!(b&Oo));c!=d&&Um(a,c)}l.Jm=function(a,b){var c=0,c=(this.ca|0)==jl?this.J&Mo?c|this.C[1][1]&fp:c|this.C[1][1]>>4&1:this.J&gp?c|this.C[0][1]>>4:c|this.C[0][1]&15;this.J&Lo&&Al(this,vo).gd&&(c=this.J&dp?c|hp:c|ip);w(this,a,null,b,"PPI_C",c,32896);return c};l.mo=function(a,b,c){w(this,a,b,c,"PPI_C");this.Ca=b};l.Km=function(a,b){var c=this.ga;w(this,a,null,b,"PPI_CTRL",c);return c}; +l.no=function(a,b,c){w(this,a,b,c,"PPI_CTRL");this.ga=b};l.Tl=function(a,b){var c=this.B?bp(this.B):0;w(this,a,null,b,"8041_KBD",c);this.aa&=~jp;return c};l.un=function(a,b,c){w(this,a,b,c,"8041_KBD")};l.Sl=function(a,b){var c=this.J;w(this,a,null,b,"8041_CTRL",c);return c};l.tn=function(a,b,c){w(this,a,b,c,"8041_CTRL");cp(this,b)};l.Ul=function(a,b){var c=this.aa;w(this,a,null,b,"8041_STATUS",c);return c}; +l.Vl=function(a,b){var c=this.oa;w(this,a,null,b,"8042_OUTBUFF",c,16384);this.D&=~(jp|kp);this.B&&lp(this.B);return c}; +l.wn=function(a,b,c){w(this,a,b,c,"8042_INBUF.DATA",null,16384);if(this.D&mp)switch(this.L){case np:op(this,b);break;case pp:qp(this,b);break;default:if(op(this,this.K&~Nl),this.B){a=this.B;c=b;var d=-1;t(a)&&Lb(a,"sendCmd("+r(c)+")");switch(a.F||c){case rp:d=sp;tp(a);break;case up:a.F&&(c=0);vp(a,sp);a.F=c;break;case wp:a.F&&(c=0);vp(a,sp);a.F=c;break;default:Lb(a,"sendCmd(): unrecognized command")}xp(this,d)}}this.L=b;this.D&=~mp}; +l.Wl=function(a,b){var c=this.J&~(yp|zp)|(Dd(this.H)&64?zp:0);w(this,a,null,b,"8042_RWREG",c,16384);return c};l.xn=function(a,b,c){w(this,a,b,c,"8042_RWREG",null,16384);cp(this,b)};l.Xl=function(a,b){w(this,a,null,b,"8042_STATUS",this.D,16384);a=this.D&255;this.D&kp&&(this.D|=jp,this.D&=~kp);return a}; +l.vn=function(a,b,c){w(this,a,b,c,"8042_INBUFF.CMD",null,16384);this.L=b;this.D|=mp;a=0;this.L>=Ap&&(a=this.L^15,this.L=Ap);switch(this.L){case Bp:xp(this,this.K);break;case Cp:op(this,this.K|Nl);break;case Dp:op(this,this.K&~Nl);this.B&&lp(this.B);break;case Ep:this.B&&(a=this.B,a.A=[],t(a)&&Lb(a,"scan codes flushed"));op(this,this.K|Nl);xp(this,Fp);qp(this,Xl|Yl);break;case Gp:xp(this,Hp);break;case Ip:xp(this,this.M);break;case Jp:xp(this,this.qa);break;case Kp:xp(this,this.K&Nl?0:Lp);break;case Ap:a& +1&&jf(this.H)}};function op(a,b){a.K=b;a.D=a.D&~Mp|b&Np;a.B&&ep(a.B,!!(b&Op),!(b&Nl))}function xp(a,b,c){0<=b&&(a.oa=b,c?a.D|=jp:(a.D&=~jp,a.D|=kp))}function qp(a,b){a.qa=b;nc(a.ka,!!(b&Yl));b&Xl||jf(a.H)}function Pp(a,b){a.ca>4)+(c&15),e=!0);if(d==om||d==pm)e&&23=c?c=12==c?0:c:(c-=116,c=24==c?12:c))}}else c=b;this.A[d]=c;d==Qd&&a&Rd&&b&Rd&&Sm(this)};l.Ok=function(a,b,c){w(this,a,b,c,"NMI");this.da=b};l.Wn=function(a,b,c){w(this,a,b,c,"FPU.CLEAR")};l.Xn=function(a,b,c){w(this,a,b,c,"FPU.RESET");this.Tc&&Ng(this.Tc)}; +l.Ym=function(a){if(t(this,16)&&Vk(this.ba,26,a)){var b=this.H.D>>8;Sf(this.H,a,function(a,d){return function(c){d=Dd(a.H)-d;var e,g=a.H.L&255,h=a.H.L>>8,k=a.H.L&255,m=a.H.L>>8;if(2==b||3==b)e=" CH(hour)="+sa(h)+" CL(min)="+r(g)+" DH(sec)="+r(m);else if(4==b||5==b)e=" CX(year)="+sa(a.H.I)+" DH(month)="+r(m)+" DL(day)="+r(k);g=a.ba;h=d;g.message("INT "+r(26)+": C="+(cg(g.H)?1:0)+(e||"")+" (cycles="+h+(c?",level="+(c+1):"")+")")}}(this,Dd(this.H)))}return!0}; +function Um(a,b){if(a.la)try{void 0!==b?a.Ga=b:b=!!(a.Ga&&a.H&&a.H.ea.vb);var c=Math.round(nl/uo(a,vo));if(20>c||2E4>>4,0,this.F,this.C,this.Fd),delete this.Fd);return!0};Xp.prototype.Wb=function(){return!0}; -function Yp(a,b,c,d){if(d)a.Fa("Unable to load system ROM (error "+d+": "+b+")");else{ob(a.xe,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,g=e.longs||e.data;if(f)a.A=f;else if(g)for(a.A=Array(4*g.length),d=c=0;c>8&255,a.A[d++]=g[c]>>16&255,a.A[d++]=g[c]>>24&255;else a.A=e;a.Fd=e.symbols;if(!a.A.length){gb("Empty ROM: "+b);return}if(1==a.A.length){gb(a.A[0]);return}}catch(h){a.Fa("ROM data error: "+h.message);return}else for(b= +function Yp(a,b,c,d){if(d)a.Fa("Unable to load system ROM (error "+d+": "+b+")");else{ob(a.ye,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,g=e.longs||e.data;if(f)a.A=f;else if(g)for(a.A=Array(4*g.length),d=c=0;c>8&255,a.A[d++]=g[c]>>16&255,a.A[d++]=g[c]>>24&255;else a.A=e;a.Fd=e.symbols;if(!a.A.length){gb("Empty ROM: "+b);return}if(1==a.A.length){gb(a.A[0]);return}}catch(h){a.Fa("ROM data error: "+h.message);return}else for(b= c.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.A=Array(b.length),e=0;e>>d.A].bf(e&d.D,a.A[c]&255,e)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.D?b.push(a.D):null!=a.D&&a.D.length&&(b=a.D);for(c=0;c>>d.A].cf(e&d.D,a.A[c]&255,e)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.D?b.push(a.D):null!=a.D&&a.D.length&&(b=a.D);for(c=0;cthis.B?$l:23,c=a.A[b]|a.A[b+1]<<8,c=c+(this.A>>10);a.A[b]=c&255;a.A[b+1]=c>>8;jm(a)}}else gb("No RAM allocated")}; +l.reset=function(){if(!this.B&&!this.D&&this.V){var a=1024*Ql(this.V);this.A&&a!=this.A&&(Bc(this.ka,this.B,this.A),this.C=!1);this.A=a}!this.C&&this.A&&oc(this.ka,this.B,this.A,1)&&(this.C=!0,"ramCPQ"==this.ce&&(this.controller=new eq(this),oc(this.ka,fq,4,4,this.controller)));if(this.C){if(this.F||Jc(this.ka,1138,4660),"ramCPQ"!=this.ce&&this.V&&(a=this.V,a.A)){var b=1048576>this.B?$l:23,c=a.A[b]|a.A[b+1]<<8,c=c+(this.A>>10);a.A[b]=c&255;a.A[b+1]=c>>8;jm(a)}}else gb("No RAM allocated")}; l.save=function(){var a=new Wf(this);this.controller&&a.set(0,this.controller.save());return a.data()};l.restore=function(a){return this.controller?this.controller.restore(a[0]):!0};function eq(a){this.D=a;this.C=gq;this.H=hq;this.B=iq;this.A=null}l=eq.prototype;l.save=function(){return[this.C,this.B]};l.restore=function(a){this.fc(0,a[0]&255);this.fc(2,a[1]&255);return!0};l.Ia=function(a){var b=255;2>a?b=a&1?this.H>>8:this.H&255:4>a&&(b=a&1?this.B>>8:this.B&255);return b}; -l.fc=function(a,b){if(a)2==a&&(this.B=this.B&-256|b);else if(b!=(this.C&255)){a=this.D.ka;if(b&jq)this.A&&(wc(a,kq,lq,this.A),this.A=null);else{this.A||(this.A=xc(a,kq,lq));var c=xc(a,mq,lq);wc(a,kq,lq,c,b&nq?1:Dc)}this.C=this.C&-256|b}};l.vj=function(){return oq};l.fh=function(){return pq};var fq=-2134900736,mq=16646144,kq=917504,lq=131072,jq=1,nq=2,gq=65535,hq=2575,iq=2,oq=[null,0],pq=[function(a){return this.controller.Ia(a)},null,null,function(a,b){this.controller.fc(a,b)},null,null]; -$a(function(){for(var a=zb(document,"pcx86","ram"),b=0;b=n.de&&d<=n.z&&(d-=n.de-n.ce),d=Aq[e]==d),d){(a=a.na["key-"+e])&&void 0!==c&&(a.style.color=c?"#ffffff":"#000000",a.style.backgroundColor=c?"#000000":"#ffffff");break}}}l.uc=function(a,b,c,d){this.pa=a;this.ka=b;this.H=c;this.ba=d;this.V=Wb(a,"ChipSet")}; +c.onmouseout=b),!0;if(d)return this.na[f]=c,c.onclick=function(){e.pa&&e.pa.ld();d&&!e.D&&(e.D=d,Cq(e,300))},!0}return!1};function Dq(a,b,c){if(a.L){for(var d in na)if(b==na[d]){b=+d;(d=ma[d])&&(b=d);break}for(var e in Aq)if((d=Aq[e]==b)||(d=b,d>=n.ee&&d<=n.z&&(d-=n.ee-n.de),d=Aq[e]==d),d){(a=a.na["key-"+e])&&void 0!==c&&(a.style.color=c?"#ffffff":"#000000",a.style.backgroundColor=c?"#000000":"#ffffff");break}}}l.uc=function(a,b,c,d){this.pa=a;this.ka=b;this.H=c;this.ba=d;this.V=Wb(a,"ChipSet")}; function rq(a,b){var c=0;a.ca=null;"string"==typeof b&&(a.ca=b.toUpperCase(),c=Eq.indexOf(a.ca),0>c&&(c=0));if(b=Eq[c])a.Y=parseInt(b.substr(2),10)}function tp(a){Lb(a,"keyboard reset",65792);a.A=[];vp(a,Fq)}function ep(a,b,c){a.J!==c&&(a.J=a.K=c)&&(a.G=!0);a.I!==b&&(a.I=b)&&!a.K&&Rp(a,!0);a.I&&a.K&&(tp(a),a.K=!1)}function vp(a,b){a.V&&(a.A.unshift(b),a.G=!0,Pp(a.V,b))} function lp(a){var b=0;a.A.length&&a.G&&(b=a.A[0],a.V&&Pp(a.V,b));t(a)&&Lb(a,b?"scan code "+r(b)+" available":"no scan codes available")}function bp(a){var b=0;a.A.length&&(b=a.A[0]);t(a)&&Lb(a,"scan code "+r(b)+" delivered");return b}function Rp(a,b){0>=1);if(b&Jq){if(!1===d)return!0;d=null}null==d?d=!((c?a.C:a.jc)&b):d||b&Kq&&(b=Kq);if(c){a.C&=~b;d&&(a.C|=b);c=b;var f,g;for(g in Lq)d="led-"+g,e=Lq[g],c&&c!=e||!(f=a.na[d])||(f.style.backgroundColor=a.C&e?"#00ff00":"#000000")}else a.jc&=~b,d&&(a.jc|=b);return!0}}return!1} -function uq(a,b,c){if(O[b]&&a.H&&a.H.ea.wb){Hq[b]&&a.B.length&&0e||(e==a.B.length&&(d={},d.ue=b,d.jc=a.jc,Dq(a,b,!0),e++),0b.ud){if(!b.qf){Bq(a,b.ue);return}b.qf=!1;c=a.Z}else c=1==b.ud++?500:100;b.cl=setTimeout(function(a){return function(){Mq(a,b)}}(a),c)}} -function Oq(a,b,c){var d=b;if(b>=n.ce&&b<=n.eg)!(a.jc&(Pq|Qq|Rq))==c&&(d=b+(n.de-n.ce));else if(b>=n.de&&b<=n.z)!!(a.jc&(Pq|Qq|Rq))==c&&(d=b-(n.de-n.ce));else if(!!(a.jc&(Pq|Qq))==c){if(a=na[b])d=a}else if(a=ma[b])d=a;return d}l.Bg=function(a){a||(this.jc&=~Kq)}; -function sq(a,b,c){var d=!0,e=!1,f=!1,g=b.keyCode,h=Oq(a,g,!0);a.dh&&h==n["`"]&&(g=h=27);if(O[g+1E3])if(h+=1E3,2==b.location&&(h+=2E3),zq(a,h,!1,c)){if(20==g||144==g||145==g)a.O||(c=e=!0);if(!(c||91!=g&&93!=g))for(var k=0;k=n.ce&&b<=n.eg||b>=n.de&&b<=n.z;e>>>=8;){var g=0,h=e&255;f==ar||f==br?d.push(f|(c?0:$q)):(h==P?a.C&(Pq|Qq)||a.C&Rq&&b||(g=h):h==cr?a.C&(Sq|dr)||(g=h):h==er?a.C&(Tq|fr)||(g=h):d.push(f|(c?0:$q)),g&&(c?d.unshift(g):d.push(g|$q)))}for(c=0;ce||(e==a.B.length&&(d={},d.ve=b,d.jc=a.jc,Dq(a,b,!0),e++),0b.ud){if(!b.rf){Bq(a,b.ve);return}b.rf=!1;c=a.Z}else c=1==b.ud++?500:100;b.dl=setTimeout(function(a){return function(){Mq(a,b)}}(a),c)}} +function Oq(a,b,c){var d=b;if(b>=n.de&&b<=n.fg)!(a.jc&(Pq|Qq|Rq))==c&&(d=b+(n.ee-n.de));else if(b>=n.ee&&b<=n.z)!!(a.jc&(Pq|Qq|Rq))==c&&(d=b-(n.ee-n.de));else if(!!(a.jc&(Pq|Qq))==c){if(a=na[b])d=a}else if(a=ma[b])d=a;return d}l.Cg=function(a){a||(this.jc&=~Kq)}; +function sq(a,b,c){var d=!0,e=!1,f=!1,g=b.keyCode,h=Oq(a,g,!0);a.eh&&h==n["`"]&&(g=h=27);if(O[g+1E3])if(h+=1E3,2==b.location&&(h+=2E3),zq(a,h,!1,c)){if(20==g||144==g||145==g)a.O||(c=e=!0);if(!(c||91!=g&&93!=g))for(var k=0;k=n.de&&b<=n.fg||b>=n.ee&&b<=n.z;e>>>=8;){var g=0,h=e&255;f==ar||f==br?d.push(f|(c?0:$q)):(h==P?a.C&(Pq|Qq)||a.C&Rq&&b||(g=h):h==cr?a.C&(Sq|dr)||(g=h):h==er?a.C&(Tq|fr)||(g=h):d.push(f|(c?0:$q)),g&&(c?d.unshift(g):d.push(g|$q)))}for(c=0;c"]]=52|P<<8;O[n["/"]]=53; +O[1009]=15;O[n.q]=16;O[n.Q]=16|P<<8;O[n.To]=17;O[n.Ni]=17|P<<8;O[n.e]=18;O[n.E]=18|P<<8;O[n.r]=19;O[n.Ii]=19|P<<8;O[n.t]=20;O[n.Ki]=20|P<<8;O[n.y]=21;O[n.Pi]=21|P<<8;O[n.Ro]=22;O[n.Li]=22|P<<8;O[n.Ll]=23;O[n.Ai]=23|P<<8;O[n.rn]=24;O[n.Gi]=24|P<<8;O[n.p]=25;O[n.Hi]=25|P<<8;O[n["["]]=26;O[n["{"]]=26|P<<8;O[n["]"]]=27;O[n["}"]]=27|P<<8;O[13]=28;O[1017]=cr;O[n.ee]=30;O[n.de]=30|P<<8;O[n.Oo]=31;O[n.Ji]=31|P<<8;O[n.d]=32;O[n.wi]=32|P<<8;O[n.Il]=33;O[n.xi]=33|P<<8;O[n.Jl]=34;O[n.yi]=34|P<<8;O[n.Kl]=35; +O[n.zi]=35|P<<8;O[n.bn]=36;O[n.Bi]=36|P<<8;O[n.k]=37;O[n.Ci]=37|P<<8;O[n.en]=38;O[n.Di]=38|P<<8;O[n[";"]]=39;O[n[":"]]=39|P<<8;O[n["'"]]=40;O[n['"']]=40|P<<8;O[n["`"]]=41;O[n["~"]]=41|P<<8;O[1016]=P;O[n["\\"]]=43;O[n["|"]]=43|P<<8;O[n.z]=44;O[n.fg]=44|P<<8;O[n.x]=45;O[n.Oi]=45|P<<8;O[n.yl]=46;O[n.vi]=46|P<<8;O[n.So]=47;O[n.Mi]=47|P<<8;O[n.wl]=48;O[n.ui]=48|P<<8;O[n.n]=49;O[n.Fi]=49|P<<8;O[n.jn]=50;O[n.Ei]=50|P<<8;O[n[","]]=51;O[n["<"]]=51|P<<8;O[n["."]]=52;O[n[">"]]=52|P<<8;O[n["/"]]=53; O[n["?"]]=53|P<<8;O[3016]=54;O[1044]=55;O[1018]=er;O[1032]=57;O[vq]=58;O[1112]=59;O[1113]=60;O[1114]=61;O[1115]=62;O[1116]=63;O[1117]=64;O[1118]=65;O[1119]=66;O[1120]=67;O[1121]=68;O[wq]=69;O[xq]=70;O[1036]=71;O[1038]=72;O[1033]=73;O[1109]=74;O[1037]=75;O[1101]=76;O[1039]=77;O[1107]=78;O[1035]=79;O[1040]=80;O[1034]=81;O[1045]=82;O[1046]=Zq;O[4027]=84;O[1122]=87;O[1123]=88;O[1091]=91;O[1093]=93;O[1224]=91;O[ir]=46|cr<<8;O[Uq]=70|cr<<8;O[4046]=Zq|cr<<8|er<<16;O[4045]=82|cr<<8|er<<16; O[4013]=28|cr<<8|er<<16;var rp=255,up=243,wp=237,Fq=170,sp=250,hr=255,gr=20;$a(function(){for(var a=zb(document,"pcx86","keyboard"),b=0;bc.length)c=[!1,0,null,null,0,Array(b>2,32768));this.rc=c[0];this.Xc=c[1];this.Ze=c[2];this.fa=c[3];this.ec=c[4]&255;this.Fg=c[4]>>8&255;this.Wa=c[5];this.oh=lr;this.gg=nr;if(b>=aq){this.oh=mr;this.gg=or;(b=c[6])||(b=[!1,0,Array(pr),0,f== -Tl?0:qr,0,0,Array(rr),0,0,0,Array(sr),0,[this.cb,this.Ob,this.qd],Array(this.qd>>2),tr|ur|vr|wr|xr,0,-1,0,-1,0,-1,0,0,0,0,yr,zr,0,0,Ar,Array(Br)]);this.Ke=b[0];this.wd=b[1];this.Cc=b[2];this.Tg=Cr;this.Ig=b[3];this.af=b[4];this.Pf=b[5];this.zd=b[6];this.$d=b[7];this.Vg=Dr;this.Wk=b[8];this.Xk=b[9];this.yd=b[10];this.xd=b[11];this.Ug=Er;this.ub=b[12];d=b[13];"number"==typeof d&&(d=[this.cb,this.Ob,d]);this.cb=d[0];this.Ob=d[1];d=this.qd>>2;if((this.fd=b[14])&&this.fd.length=aq){var c=[];c[0]=a.Ke;c[1]=a.wd;c[2]=a.Cc;c[3]=a.Ig;c[4]=a.af;c[5]=a.Pf;c[6]=a.zd;c[7]=a.$d;c[8]=a.Wk;c[9]=a.Xk;c[10]=a.yd;c[11]=a.xd;c[12]=a.ub;c[13]=[a.cb,a.Ob,a.qd];var d;if(d=a.fd){var e=0,f=[];if(void 0!==d[0])for(var g=0;2>g;g++)for(var h=g;h>1;f[e++]=k;h=m}f.lengthc.length)c=[!1,0,null,null,0,Array(b>2,32768));this.rc=c[0];this.Xc=c[1];this.$e=c[2];this.fa=c[3];this.ec=c[4]&255;this.Gg=c[4]>>8&255;this.Wa=c[5];this.ph=lr;this.hg=nr;if(b>=aq){this.ph=mr;this.hg=or;(b=c[6])||(b=[!1,0,Array(pr),0,f== +Tl?0:qr,0,0,Array(rr),0,0,0,Array(sr),0,[this.bb,this.Ob,this.qd],Array(this.qd>>2),tr|ur|vr|wr|xr,0,-1,0,-1,0,-1,0,0,0,0,yr,zr,0,0,Ar,Array(Br)]);this.Le=b[0];this.wd=b[1];this.Cc=b[2];this.Ug=Cr;this.Jg=b[3];this.bf=b[4];this.Qf=b[5];this.zd=b[6];this.$d=b[7];this.Wg=Dr;this.Xk=b[8];this.Yk=b[9];this.yd=b[10];this.xd=b[11];this.Vg=Er;this.tb=b[12];d=b[13];"number"==typeof d&&(d=[this.bb,this.Ob,d]);this.bb=d[0];this.Ob=d[1];d=this.qd>>2;if((this.fd=b[14])&&this.fd.length=aq){var c=[];c[0]=a.Le;c[1]=a.wd;c[2]=a.Cc;c[3]=a.Jg;c[4]=a.bf;c[5]=a.Qf;c[6]=a.zd;c[7]=a.$d;c[8]=a.Xk;c[9]=a.Yk;c[10]=a.yd;c[11]=a.xd;c[12]=a.tb;c[13]=[a.bb,a.Ob,a.qd];var d;if(d=a.fd){var e=0,f=[];if(void 0!==d[0])for(var g=0;2>g;g++)for(var h=g;h>1;f[e++]=k;h=m}f.length=aq){var d=0,e=0,f=0;switch(b){case Nr:d=Or;a.La==cq&&(e=Pr);break;case Qr:a.La==aq&&(d=Rr);break;case Sr:d=Tr;a.La==cq&&(e=Ur);break;case Vr:d=Wr;a.La==cq&&(e=Xr);break;case Yr:d=Zr;a.La==cq&&(f=$r);break;case as:d=bs,a.La==cq&&(f=cs)}d&&(c|=a.Wa[ds]&d?256:0,c|=a.Wa[ds]&e?512:0,c|=a.Wa[es]&f?512:0)}return c} var lr=18,Nr=6,ds=7,Or=1,Wr=2,Tr=4,Zr=8,bs=16,Rr=32,Pr=32,Xr=64,Ur=128,es=9,$r=32,cs=64,Qr=10,Sr=16,Vr=18,Yr=21,as=24,mr=25,nr="HTOTAL HDISP HSYNC_POS HSYNC_WIDTH VTOTAL VTOTAL_ADJ VDISP VSYNC_POS INTERLACE_POS MAX_SCAN CURSOR_START CURSOR_END START_ADDR_HI START_ADDR_LO CURSOR_ADDR_HI CURSOR_ADDR_LO LIGHT_PEN_HI LIGHT_PEN_LO".split(" "),or="HTOTAL HDISP_END HBLANK_START HBLANK_END HRETRACE_START HRETRACE_END VTOTAL OVERFLOW PRESET_SCAN MAX_SCAN CURSOR_START CURSOR_END START_ADDR_HI START_ADDR_LO CURSOR_ADDR_HI CURSOR_ADDR_LO VRETRACE_START VRETRACE_END VDISP_END OFFSET UNDERLINE VBLANK_START VBLANK_END MODE_CTRL LINE_COMPARE".split(" "), pr=20,Cr="PAL00 PAL01 PAL02 PAL03 PAL04 PAL05 PAL06 PAL07 PAL08 PAL09 PAL0A PAL0B PAL0C PAL0D PAL0E PAL0F MODE OVERSCAN PLANES HPAN".split(" "),qr=1,yr=1,rr=5,Dr=["RESET","CLOCKING","MAPMASK","CHARMAP","MEMMODE"],zr=255,Ar=0,Br=256,sr=9,Er="SRESET ESRESET COLORCMP DATAROT READMAP MODE MISC COLORDC BITMASK".split(" "),tr=1024,ur=4096,Kr=65280,vr=0,wr=16,Mr=255,xr=-2147483648,Fr=[];Fr[2]=tr;Fr[3]=tr|ur;Fr[16]=1280;Fr[512]=vr;Fr[1024]=vr|32;Fr[1536]=vr|96;Fr[2560]=vr|160;Fr[3584]=vr|224;Fr[768]=vr|wr; -Fr[4096]=1;Fr[8192]=2;Fr[24576]=98;Fr[40960]=162;Fr[57344]=226;var Lr=[];Lr[tr]=function(a){a+=this.H;return(this.controller.ub=this.X[a])>>this.controller.ei&255};Lr[tr|16384]=function(a){return(this.controller.ub=this.X[(a&-4)+this.H])>>((a&3)<<3)&255};Lr[tr|ur]=function(a){a+=this.H;var b=this.controller.ub=this.X[a&-2];return(a&1?b>>8:b)&255}; -Lr[1280]=function(a){a+=this.H;a=this.controller.ub=this.X[a];for(var b=this.controller.qh,c=this.controller.ph&b,d=0,e=128;e;)(a&b)==c&&(d|=e),c>>>=1,b>>>=1,e>>=1;return d};Lr[vr]=function(a,b){a+=this.H;b=(b|b<<8|b<<16|b<<24)&this.controller.Md|this.controller.Yd;b=b&this.controller.Bb|this.controller.ub&~this.controller.Bb;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)}; -Lr[vr|32]=function(a,b){a+=this.H;b=b>>this.controller.Qc|b<<8-this.controller.Qc&255;b=(b|b<<8|b<<16|b<<24)&this.controller.Md|this.controller.Yd;b=b&this.controller.Bb|this.controller.ub&~this.controller.Bb;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)}; -Lr[vr|96]=function(a,b){a+=this.H;b=b>>this.controller.Qc|b<<8-this.controller.Qc&255;b=(b|b<<8|b<<16|b<<24)&this.controller.Md|this.controller.Yd;b&=this.controller.ub;b=b&this.controller.Bb|this.controller.ub&~this.controller.Bb;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)}; -Lr[vr|160]=function(a,b){a+=this.H;b=b>>this.controller.Qc|b<<8-this.controller.Qc&255;b=(b|b<<8|b<<16|b<<24)&this.controller.Md|this.controller.Yd;b|=this.controller.ub;b=b&this.controller.Bb|this.controller.ub&~this.controller.Bb;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)}; -Lr[vr|224]=function(a,b){a+=this.H;b=b>>this.controller.Qc|b<<8-this.controller.Qc&255;b=(b|b<<8|b<<16|b<<24)&this.controller.Md|this.controller.Yd;b^=this.controller.ub;b=b&this.controller.Bb|this.controller.ub&~this.controller.Bb;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)};Lr[vr|4]=function(a,b){var c=(a&-4)+this.H;a=(a&3)<<3;b=b<>this.controller.Qc|b<<8-this.controller.Qc&255;b=(b|b<<8|b<<16|b<<24)&this.controller.Bb;b=this.controller.Hf&b|this.controller.ub&~b;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)}; +Fr[4096]=1;Fr[8192]=2;Fr[24576]=98;Fr[40960]=162;Fr[57344]=226;var Lr=[];Lr[tr]=function(a){a+=this.H;return(this.controller.tb=this.X[a])>>this.controller.fi&255};Lr[tr|16384]=function(a){return(this.controller.tb=this.X[(a&-4)+this.H])>>((a&3)<<3)&255};Lr[tr|ur]=function(a){a+=this.H;var b=this.controller.tb=this.X[a&-2];return(a&1?b>>8:b)&255}; +Lr[1280]=function(a){a+=this.H;a=this.controller.tb=this.X[a];for(var b=this.controller.rh,c=this.controller.qh&b,d=0,e=128;e;)(a&b)==c&&(d|=e),c>>>=1,b>>>=1,e>>=1;return d};Lr[vr]=function(a,b){a+=this.H;b=(b|b<<8|b<<16|b<<24)&this.controller.Md|this.controller.Yd;b=b&this.controller.Bb|this.controller.tb&~this.controller.Bb;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)}; +Lr[vr|32]=function(a,b){a+=this.H;b=b>>this.controller.Qc|b<<8-this.controller.Qc&255;b=(b|b<<8|b<<16|b<<24)&this.controller.Md|this.controller.Yd;b=b&this.controller.Bb|this.controller.tb&~this.controller.Bb;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)}; +Lr[vr|96]=function(a,b){a+=this.H;b=b>>this.controller.Qc|b<<8-this.controller.Qc&255;b=(b|b<<8|b<<16|b<<24)&this.controller.Md|this.controller.Yd;b&=this.controller.tb;b=b&this.controller.Bb|this.controller.tb&~this.controller.Bb;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)}; +Lr[vr|160]=function(a,b){a+=this.H;b=b>>this.controller.Qc|b<<8-this.controller.Qc&255;b=(b|b<<8|b<<16|b<<24)&this.controller.Md|this.controller.Yd;b|=this.controller.tb;b=b&this.controller.Bb|this.controller.tb&~this.controller.Bb;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)}; +Lr[vr|224]=function(a,b){a+=this.H;b=b>>this.controller.Qc|b<<8-this.controller.Qc&255;b=(b|b<<8|b<<16|b<<24)&this.controller.Md|this.controller.Yd;b^=this.controller.tb;b=b&this.controller.Bb|this.controller.tb&~this.controller.Bb;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)};Lr[vr|4]=function(a,b){var c=(a&-4)+this.H;a=(a&3)<<3;b=b<>this.controller.Qc|b<<8-this.controller.Qc&255;b=(b|b<<8|b<<16|b<<24)&this.controller.Bb;b=this.controller.If&b|this.controller.tb&~b;b=b&this.controller.gb|this.X[a]&~this.controller.gb;this.X[a]!=b&&(this.X[a]=b,this.Oa=!0)}; function Q(a,b,c,d,e){mb.call(this,"Video",a,262144);var f=this;this.Tc=Ta("Gecko/");var g=["","moz","ms","webkit"];this.ca=a.model;var h=gs[this.ca]||gs.mda;this.La=h[0];this.qd=a.memory||0;this.cd=a.switches;this.da=a.mode;if(null==this.da||null==hs[this.da])this.da=h[1];this.Fb=a.charCols;this.sc=a.charRows;if(void 0===this.Fb||void 0===this.sc)this.Fb=hs[this.da][0],this.sc=hs[this.da][1];this.Z=a.screenWidth;this.la=a.screenHeight;this.Uc=a.scale;this.Cd=12<=Math.round(this.Z/this.Fb);this.O= -b;this.L=c;this.D=(this.Qd=d)||b||null;b=a.smoothing;(c=Ua("smoothing"))&&(b="true"==c);if(null!=b)for(c=0;c=aq&&(Nc(b,this,rs),Rc(b,this,ss));this.La==cq&&(Nc(b,this,ts),Rc(b,this,us));if(d){var e=this;zl(d,262144,function(a){if(e.C)if(a[0]){var b=e.C;if(b.fd){var c,d,f,g=!1,u=8,E=8,K=-1,H=b.video.F>>3;for(c=0;c=d&&(E=d,g=!0);break; -case "p":0<=d&&3>=d&&(K=d);break;case "w":d=b.cb&&(f-=b.cb);a="";for(c=0;cK?q(T):qa(T>>(K<<3),8));g&&(f+=H-E);a&&(a+="\n");a+=I}a&&b.ba.P(a);b.B=f}else b.ba.P("no buffer")}else e.ba.P("BIOSMODE: "+r(e.oa)),b=e.C,Ir(b,"CRTC",b.ec,b.Wa,b.gg),b.La>=aq&&(Ir(b," GRC",b.yd,b.xd,b.Ug),Ir(b," SEQ",b.zd,b.$d,b.Vg),Ir(b," ATC",b.wd,b.Cc, -b.Tg),Ir(b," ATCINDX",b.wd),b.ba.P(" ATCDATA: "+b.Ke),Ir(b," FEAT",b.Pf),Ir(b," MISC",b.af),Ir(b," STATUS0",b.Ig)),Ir(b," STATUS1",b.fa),b.La!=os&&b.La!=ls||Ir(b," MODEREG",b.Xc),b.La==ls&&Ir(b," COLOR",b.Ze),b.La>=aq&&(b.ba.P(" LATCHES: "+q(b.ub)),b.ba.P(" ACCESS: "+q(b.tg,4)),b.ba.P("Use 'dump video [addr]' to dump video memory"));else e.ba.P("no active video card")})}if((this.B=Wb(a,"Keyboard"))&&this.O){for(var f in this.na)0=d&&(K=d);break;case "w":d=b.bb&&(f-=b.bb);a="";for(c=0;cK?q(T):qa(T>>(K<<3),8));g&&(f+=H-E);a&&(a+="\n");a+=I}a&&b.ba.P(a);b.B=f}else b.ba.P("no buffer")}else e.ba.P("BIOSMODE: "+r(e.oa)),b=e.C,Ir(b,"CRTC",b.ec,b.Wa,b.hg),b.La>=aq&&(Ir(b," GRC",b.yd,b.xd,b.Vg),Ir(b," SEQ",b.zd,b.$d,b.Wg),Ir(b," ATC",b.wd,b.Cc, +b.Ug),Ir(b," ATCINDX",b.wd),b.ba.P(" ATCDATA: "+b.Le),Ir(b," FEAT",b.Qf),Ir(b," MISC",b.bf),Ir(b," STATUS0",b.Jg)),Ir(b," STATUS1",b.fa),b.La!=os&&b.La!=ls||Ir(b," MODEREG",b.Xc),b.La==ls&&Ir(b," COLOR",b.$e),b.La>=aq&&(b.ba.P(" LATCHES: "+q(b.tb)),b.ba.P(" ACCESS: "+q(b.ug,4)),b.ba.P("Use 'dump video [addr]' to dump video memory"));else e.ba.P("no active video card")})}if((this.B=Wb(a,"Keyboard"))&&this.O){for(var f in this.na)0c&&(a=Math.round(c/b*100)+"%")}this.Tc?(this.O.style.width=a,this.O.style.width=a,this.O.style.display="block",this.O.style.margin="auto"):(this.N.style.width=a,this.N.style.height="auto");this.N.style.backgroundColor="black";this.N.Je();a=!0}this.D&&this.D.focus()}return a}; -function js(a,b){!b&&a.N&&(a.Tc?a.O.style.width=a.O.style.height="":a.N.style.width=a.N.style.height="");Lb(a,"notifyFullScreen("+b+")",!0);a.B&&(a.B.dh=b)}l.me=function(a){var b=!1;this.D&&(a?this.D.me&&(this.D.me(),this.G&&this.G.If(!0),b=!0):this.D.dl&&(this.D.dl(),this.G&&this.G.If(!1),b=!0),this.D&&this.D.focus());return b};l.If=function(a){this.G&&(this.G.If(a),this.B&&(this.B.dh=a));var b=this.na.lockPointer;b&&(b.textContent=a?"Press Esc to Unlock Pointer":this.Dd)}; -function vs(a,b){var c=a.D;c&&!a.tc&&(c.addEventListener("touchstart",function(b){zs(a,b,!0)},!1),c.addEventListener("touchmove",function(b){zs(a,b)},!0),c.addEventListener("touchend",function(b){zs(a,b,!1)},!1),a.tc=b,a.hb=a.ib=a.kd=-1,a.lc=!1,a.Db=null,a.kc=!1,a.Pd=function(){a.kc=!0;a.G.Vd(As,!0)})}l.Bg=function(a){this.B&&this.B.Bg(a)}; +l.Cb=function(a,b,c){var d=this;if(!this.na[b])switch(this.na[b]=c,b){case "fullScreen":return this.N&&this.N.Ke?c.onclick=function(){d.Ke()}:c.parentNode.removeChild(c),!0;case "lockPointer":return this.Dd=c.textContent,this.D&&this.D.ne?c.onclick=function(){d.ne(!0)}:c.parentNode.removeChild(c),!0;case "refresh":return c.onclick=function(){ys(d,!0)},!0}return!1}; +l.Ke=function(){var a=!1;if(this.N){if(this.N.Ke){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.Z/this.la;b>c&&(a=Math.round(c/b*100)+"%")}this.Tc?(this.O.style.width=a,this.O.style.width=a,this.O.style.display="block",this.O.style.margin="auto"):(this.N.style.width=a,this.N.style.height="auto");this.N.style.backgroundColor="black";this.N.Ke();a=!0}this.D&&this.D.focus()}return a}; +function js(a,b){!b&&a.N&&(a.Tc?a.O.style.width=a.O.style.height="":a.N.style.width=a.N.style.height="");Lb(a,"notifyFullScreen("+b+")",!0);a.B&&(a.B.eh=b)}l.ne=function(a){var b=!1;this.D&&(a?this.D.ne&&(this.D.ne(),this.G&&this.G.Jf(!0),b=!0):this.D.el&&(this.D.el(),this.G&&this.G.Jf(!1),b=!0),this.D&&this.D.focus());return b};l.Jf=function(a){this.G&&(this.G.Jf(a),this.B&&(this.B.eh=a));var b=this.na.lockPointer;b&&(b.textContent=a?"Press Esc to Unlock Pointer":this.Dd)}; +function vs(a,b){var c=a.D;c&&!a.tc&&(c.addEventListener("touchstart",function(b){zs(a,b,!0)},!1),c.addEventListener("touchmove",function(b){zs(a,b)},!0),c.addEventListener("touchend",function(b){zs(a,b,!1)},!1),a.tc=b,a.hb=a.ib=a.kd=-1,a.lc=!1,a.Db=null,a.kc=!1,a.Pd=function(){a.kc=!0;a.G.Vd(As,!0)})}l.Cg=function(a){this.B&&this.B.Cg(a)}; function zs(a,b,c){var d,e,f=0,g=0;e=a.O;do isNaN(e.offsetLeft)||(f+=e.offsetLeft,g+=e.offsetTop);while(e=e.offsetParent);var h=a.Z/a.O.offsetWidth,k=a.la/a.O.offsetHeight;b.targetTouches&&b.targetTouches.length?(d=b.targetTouches[0].pageX,e=b.targetTouches[0].pageY):(d=b.pageX,e=b.pageY);d=(d-f)*h;e=(e-g)*k;if(a.tc==xs)d=d/(a.Z/3)|0,e=e/(a.la/3)|0,1!=e?e?uq(a.B,1040,!0):uq(a.B,1038,!0):1!=d&&(d?uq(a.B,1039,!0):uq(a.B,1037,!0));else if(a.G){g=a.lc;f=b.timeStamp-a.kd;!0===c?(a.lc=500f){a.G.Vd(As,!0);a.G.Vd(As,!1);return}}if(c||0>a.hb||0>a.ib)a.hb=d,a.ib=e;c=Math.round(d-a.hb);b=Math.round(e-a.ib);a.hb=d;a.ib=e;a.G.tf(c,b,a.hb,a.ib)}}l.Xb=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};l.Wb=function(a){return a?this.save():!0}; -l.reset=function(){var a=!0,b=0;this.V&&(b=+Sl(this.V,gl,void 0));this.ca||(this.La=b==Tl?os:ls);this.da=Bs;switch(this.La){case cq:b=7;break;case aq:var c=Cs[this.xb];c&&(b=c[0]);b||(b=4);break;case os:b=Tl;this.da=Ds;break;default:b=2}this.ga!==b&&(this.ga=b,a=!0);this.C=null;this.Y=this.Kb=new jr(this,os);this.K=this.yb=new jr(this,ls);this.La>1&255,d=d>>8&~Hs,d>>4==(d&15)&&(d^=15)):(c=d&255,d=(d&256?Is|Js:Ks|Ls)|Ms&d>>8);Jc(this.ka,b,c|d<<8)}ys(this,!0)}};function Es(a){a.A.af&qr?(a.Y=a.Kb,a.K=a.A):(a.Y=a.A,a.K=a.yb)}l.save=function(){var a=new Wf(this);a.set(0,Hr(this.Kb));a.set(1,Hr(this.yb));a.set(2,[this.ga,this.da,this.oa]);a.set(3,Hr(this.A));return a.data()}; +a.Db=setTimeout(a.Pd,500)):null!=a.Db&&(clearTimeout(a.Db),a.Db=null);void 0===c&&(a.lc=!1);g||b.preventDefault();if(!1===c){a.kc?(a.G.Vd(As,!1),a.kc=!1,b=!0):b=!1;if(b)return;if(200>f){a.G.Vd(As,!0);a.G.Vd(As,!1);return}}if(c||0>a.hb||0>a.ib)a.hb=d,a.ib=e;c=Math.round(d-a.hb);b=Math.round(e-a.ib);a.hb=d;a.ib=e;a.G.uf(c,b,a.hb,a.ib)}}l.Xb=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};l.Wb=function(a){return a?this.save():!0}; +l.reset=function(){var a=!0,b=0;this.V&&(b=+Sl(this.V,gl,void 0));this.ca||(this.La=b==Tl?os:ls);this.da=Bs;switch(this.La){case cq:b=7;break;case aq:var c=Cs[this.xb];c&&(b=c[0]);b||(b=4);break;case os:b=Tl;this.da=Ds;break;default:b=2}this.ga!==b&&(this.ga=b,a=!0);this.C=null;this.Y=this.Kb=new jr(this,os);this.K=this.yb=new jr(this,ls);this.La>1&255,d=d>>8&~Hs,d>>4==(d&15)&&(d^=15)):(c=d&255,d=(d&256?Is|Js:Ks|Ls)|Ms&d>>8);Jc(this.ka,b,c|d<<8)}ys(this,!0)}};function Es(a){a.A.bf&qr?(a.Y=a.Kb,a.K=a.A):(a.Y=a.A,a.K=a.yb)}l.save=function(){var a=new Wf(this);a.set(0,Hr(this.Kb));a.set(1,Hr(this.yb));a.set(2,[this.ga,this.da,this.oa]);a.set(3,Hr(this.A));return a.data()}; l.restore=function(a){var b=a[2];this.ga=b[0];this.da=b[1];this.oa=b[2];this.C=null;this.Y=this.Kb=new jr(this,os,a[0]);this.K=this.yb=new jr(this,ls,a[1]);this.A=new jr(this,this.La,a[3],this.qd);this.A.rc&&Es(this);Fs(this);if(!Ns(this))return!1;Os(this);return!0}; -function ks(a,b,c,d){if(d)a.Fa("Unable to load font ROM (error "+d+": "+b+")");else{ob(a.xe,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f.length){gb("Empty font ROM: "+b);return}if(1==f.length){gb(f[0]);return}if(8192==f.length)bq(a,f,[6144,0]);else if(2048==f.length)bq(a,f,[0]);else{a.Fa("Unrecognized font data length ("+f.length+")");return}}catch(g){a.Fa("Font ROM data error: "+g.message);return}(a.L||a.ba)&&Ib(a)}} -function Ps(a,b){if(1==b)return a.ha[0]=Qs[Ks],a.ha[1]=Qs[Is],a.ha;if(2==b){var c=a.C.Ze;if(a.C===a.A){var d=a.A.Cc[0],c=d&7;d&16&&(c|=8);18!=a.A.Cc[1]&&(c|=32)}a.ha[0]=Qs[c&15];c=c&32?Rs:Ss;for(d=0;de;e++)f=d[e]||0,g=f<<2&252,h=f>>4&252,f=f>>10&252,a.ha[e]=[g,h,f,255];else{var k=d&&d[255];b=null!=c.Cc[15]?c.Cc:Ts;for(e=0;16>e;e++)f=b[e]&63,k?(f|= -(c.Cc[20]&12)<<4,c.Cc[16]&128&&(f&=-49,f|=(c.Cc[20]&3)<<4),f=d[f],g=f<<2&252,h=f>>4&252,f=f>>10&252):(g=(f&4?170:0)|(f&32?85:0),h=(f&2?170:0)|(f&16?85:0),f=(f&1?170:0)|(f&8?85:0)),a.ha[e]=[g,h,f,255]}a.Ga=!0}return a.ha}function bq(a,b,c,d){a.lb=b;a.Ta=c;a.Da=d} -function Fs(a,b){var c=!1;if(window&&a.lb&&(!b||a.I)){b=0;var d=a.Da?a.Da:8,e=Ps(a);null!=a.Ta[0]&&Us(a,Vs,a.Ta[0],b,d,8,a.lb,e)&&(c=!0);b=a.Da?0:2048;d=a.Da?a.Da:9;null!=a.Ta[1]&&(Us(a,Ws,a.Ta[1],b,d,14,a.lb,Xs,Ys)&&(c=!0),a.Da&&Us(a,a.La,a.Ta[1],0,a.Da,14,a.lb,e)&&(c=!0))}return c}function Us(a,b,c,d,e,f,g,h,k){var m=!1;null!=c&&(Zs(a,b,c,d,e,f,g,h,k)&&(m=!0),a.Cd&&Zs(a,b<<1,c,d,e,f,g,h,k)&&(m=!0));return m} -function Zs(a,b,c,d,e,f,g,h,k){var m=!1,p=b&1?0:1,v=a.va[b],u=16>h.length?h.length:16;v||(v={Fc:e<ua||!T?ua:8,ib=cb.createImageData(m.Fc,m.Gc);for(Sa=0;256>Sa;Sa++){for(db=0;db=ua-2,Ld=ca[db>(8<=rb&&192<=Sa&&223>=Sa?7:rb)?E:xb;$s(ib,vg,ef,wg);H&&$s(ib,vg+1,ef,wg)}cb.putImageData(ib,(Sa&15)*m.Fc,(Sa>>4)*m.Gc)}m.Be[K]="#"+q(E[0],2)+q(E[1],2)+q(E[2],2);m.Qi[K]=E;m.Sg[K]=za;m=!0}}a.va[b]=v;return m}function at(a){0a.Aa&&(a.Aa=0):a.Aa=-1} +function ks(a,b,c,d){if(d)a.Fa("Unable to load font ROM (error "+d+": "+b+")");else{ob(a.ye,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f.length){gb("Empty font ROM: "+b);return}if(1==f.length){gb(f[0]);return}if(8192==f.length)bq(a,f,[6144,0]);else if(2048==f.length)bq(a,f,[0]);else{a.Fa("Unrecognized font data length ("+f.length+")");return}}catch(g){a.Fa("Font ROM data error: "+g.message);return}(a.L||a.ba)&&Ib(a)}} +function Ps(a,b){if(1==b)return a.ha[0]=Qs[Ks],a.ha[1]=Qs[Is],a.ha;if(2==b){var c=a.C.$e;if(a.C===a.A){var d=a.A.Cc[0],c=d&7;d&16&&(c|=8);18!=a.A.Cc[1]&&(c|=32)}a.ha[0]=Qs[c&15];c=c&32?Rs:Ss;for(d=0;de;e++)f=d[e]||0,g=f<<2&252,h=f>>4&252,f=f>>10&252,a.ha[e]=[g,h,f,255];else{var k=d&&d[255];b=null!=c.Cc[15]?c.Cc:Ts;for(e=0;16>e;e++)f=b[e]&63,k?(f|= +(c.Cc[20]&12)<<4,c.Cc[16]&128&&(f&=-49,f|=(c.Cc[20]&3)<<4),f=d[f],g=f<<2&252,h=f>>4&252,f=f>>10&252):(g=(f&4?170:0)|(f&32?85:0),h=(f&2?170:0)|(f&16?85:0),f=(f&1?170:0)|(f&8?85:0)),a.ha[e]=[g,h,f,255]}a.Ga=!0}return a.ha}function bq(a,b,c,d){a.wb=b;a.Ta=c;a.Da=d} +function Fs(a,b){var c=!1;if(window&&a.wb&&(!b||a.I)){b=0;var d=a.Da?a.Da:8,e=Ps(a);null!=a.Ta[0]&&Us(a,Vs,a.Ta[0],b,d,8,a.wb,e)&&(c=!0);b=a.Da?0:2048;d=a.Da?a.Da:9;null!=a.Ta[1]&&(Us(a,Ws,a.Ta[1],b,d,14,a.wb,Xs,Ys)&&(c=!0),a.Da&&Us(a,a.La,a.Ta[1],0,a.Da,14,a.wb,e)&&(c=!0))}return c}function Us(a,b,c,d,e,f,g,h,k){var m=!1;null!=c&&(Zs(a,b,c,d,e,f,g,h,k)&&(m=!0),a.Cd&&Zs(a,b<<1,c,d,e,f,g,h,k)&&(m=!0));return m} +function Zs(a,b,c,d,e,f,g,h,k){var m=!1,p=b&1?0:1,v=a.va[b],u=16>h.length?h.length:16;v||(v={Fc:e<ua||!T?ua:8,ib=cb.createImageData(m.Fc,m.Gc);for(Sa=0;256>Sa;Sa++){for(db=0;db=ua-2,Ld=ca[db>(8<=rb&&192<=Sa&&223>=Sa?7:rb)?E:xb;$s(ib,vg,ef,wg);H&&$s(ib,vg+1,ef,wg)}cb.putImageData(ib,(Sa&15)*m.Fc,(Sa>>4)*m.Gc)}m.Ce[K]="#"+q(E[0],2)+q(E[1],2)+q(E[2],2);m.Ri[K]=E;m.Tg[K]=za;m=!0}}a.va[b]=v;return m}function at(a){0a.Aa&&(a.Aa=0):a.Aa=-1} function Os(a){if(a.I){for(var b=10;15>=b;b++)if(null==a.C.Wa[b])return;var c=a.C.Wa[10],b=c&31,d=a.C.Wa[11]&31,e=a.C.Wa[9]&31,f=!1;a.C===a.A&&(f=!0,7!=e||4!=b||d||(d=7));if(c&32||b>d&&!f||b>e)bt(a);else{c=a.C.Wa[15]+((a.C.Wa[14]&63)<<8);a.aa!=c&&(bt(a),a.aa=c);d=d-b+1;if(a.md!=b||a.Hc!=d)a.md=b,a.Hc=d;a.za=e+1;at(a)}}} function bt(a){if(0<=a.aa){if(void 0!==a.M){var b=ct<<8,c=a.M[a.aa];if(c&b){var c=c&~b,b=a.aa%a.F,d=a.aa/a.F|0;a.I&&a.va[a.I]&&(a.Ca&&dt(a,b,d,c,a.Ca),dt(a,b,d,c));a.M[a.aa]=c}}a.aa=-1}} function et(a){var b,c=a.C;a.Pc=!1;var d=c.xd[5];if(null!=d){b=tr;var e=vr,f=c.xd[3]&31;switch(d&3){case 0:if(f){e=vr|32;switch(f&24){case 8:e=vr|96;break;case 16:e=vr|160;break;case 24:e=vr|224}c.Qc=f&7}break;case 1:e=1;break;case 2:switch(f&24){default:e=2;break;case 8:e=98;break;case 16:e=162;break;case 24:e=226}break;case 3:a.La==cq&&(e=3,c.Qc=f&7)}d&8&&(b=1280);c=c.$d[4];null!=c&&(c&4||(b|=ur,e|=wr),d&64&&(c&8&&(b|=16384,e|=4),a.Pc=!0));b|=e}return b} -function ft(a,b){var c=a.C;return c&&null!=b&&b!=c.tg?(c.Kg(b),a.ka.Kg(c.cb,c.Ob,c.fh(),!0),!0):!1} -function Ns(a,b){var c,d=a.oa,e=a.C;if(e)if(e.La==os)d=Ds;else if(e.La>=aq){var d=null,f=e.qd>>2,g=32768=e.Wa[Vr]?kt:lt:mt:g&128|| +function ft(a,b){var c=a.C;return c&&null!=b&&b!=c.ug?(c.Lg(b),a.ka.Lg(c.bb,c.Ob,c.gh(),!0),!0):!1} +function Ns(a,b){var c,d=a.oa,e=a.C;if(e)if(e.La==os)d=Ds;else if(e.La>=aq){var d=null,f=e.qd>>2,g=32768=e.Wa[Vr]?kt:lt:mt:g&128|| 350>f?d=m?nt:ot:480<=f&&(d=a.ga==Tl?pt:qt):d=m?7-d:rt:d-=m?2:0);c=et(a)}}else e.Xc&8&&(e.Xc&2?(d=e.Xc&16?rt:st,e.Xc&4||--d):(d=e.Xc&1?Bs:tt,e.Xc&4&&--d));else a.oa=null,null==d&&(d=a.da);if(!Gs(a,d,b))return!1;ft(a,c);return!0} -function Gs(a,b,c){if(null!=b&&(b!=a.oa||c)){a.Ad=0;a.oa=b;a.Ga=!1;b=a.C||(b==Ds?a.Y:a.K);if(b!=a.C||b.cb!=a.cb||b.Ob!=a.Ob){bt(a);if(a.cb){if(!Bc(a.ka,a.cb,a.Ob))return!1;a.C&&(a.C.rc=!1)}a.C=b;b.rc=!0;a.cb=b.cb;a.Ob=b.Ob;if(!oc(a.ka,b.cb,b.Ob,3,b===a.A?b:null))return!1}a:{a.I=0;a.F=a.Fb;a.J=a.sc;a.Ma=a.F;a.Eb=hs[Ds][2];b=0;if(c=hs[a.oa])a.F=c[0],a.J=c[1],a.Eb=c[2],b=c[3],a.I=c[4],4!=a.ga&&7!=a.ga||a.C!==a.A||a.I!=Vs||(7==(a.A.Wa[es]&31)?a.J=350>Jr(a.A,Vr)?43:50:a.I=a.La);a.Wc=a.F*a.J|0;a.Vc=a.Wc/ -a.Eb|0;a.Xa=a.Vc;a.Pb=0;void 0!==b&&(a.Xa=(a.Xa<<1)+b|0,a.Pb=a.Xa+b>>1);if(a.va.length){a.qa=a.Z/a.F|0;a.ta=a.la/a.J|0;if(a.I){b=a.va[a.I];if(!b)break a;c=a.va[a.I<<1];a.Uc&&80==a.F?c&&a.qa>=3*c.Fc>>2&&(a.I<<=1,b=c):(c&&a.qa>=c.Fc&&(a.I<<=1,b=c),a.Uc||(a.qa=b.Fc,a.ta=b.Gc));a.Ya=a.ab=0;b&&(a.Ya=a.F*b.Fc,a.ab=a.J*b.Gc)}else a.qa=a.ta=1,a.Ya=a.F,a.ab=a.J;a.Ha=a.L.createImageData(a.Ya,a.ab);a.Ba=document.createElement("canvas");a.Ba.width=a.Ya;a.Ba.height=a.ab;a.Ca=a.Ba.getContext("2d");a.vc=a.zc=0; +function Gs(a,b,c){if(null!=b&&(b!=a.oa||c)){a.Ad=0;a.oa=b;a.Ga=!1;b=a.C||(b==Ds?a.Y:a.K);if(b!=a.C||b.bb!=a.bb||b.Ob!=a.Ob){bt(a);if(a.bb){if(!Bc(a.ka,a.bb,a.Ob))return!1;a.C&&(a.C.rc=!1)}a.C=b;b.rc=!0;a.bb=b.bb;a.Ob=b.Ob;if(!oc(a.ka,b.bb,b.Ob,3,b===a.A?b:null))return!1}a:{a.I=0;a.F=a.Fb;a.J=a.sc;a.Ma=a.F;a.Eb=hs[Ds][2];b=0;if(c=hs[a.oa])a.F=c[0],a.J=c[1],a.Eb=c[2],b=c[3],a.I=c[4],4!=a.ga&&7!=a.ga||a.C!==a.A||a.I!=Vs||(7==(a.A.Wa[es]&31)?a.J=350>Jr(a.A,Vr)?43:50:a.I=a.La);a.Wc=a.F*a.J|0;a.Vc=a.Wc/ +a.Eb|0;a.Xa=a.Vc;a.Pb=0;void 0!==b&&(a.Xa=(a.Xa<<1)+b|0,a.Pb=a.Xa+b>>1);if(a.va.length){a.qa=a.Z/a.F|0;a.ta=a.la/a.J|0;if(a.I){b=a.va[a.I];if(!b)break a;c=a.va[a.I<<1];a.Uc&&80==a.F?c&&a.qa>=3*c.Fc>>2&&(a.I<<=1,b=c):(c&&a.qa>=c.Fc&&(a.I<<=1,b=c),a.Uc||(a.qa=b.Fc,a.ta=b.Gc));a.Ya=a.eb=0;b&&(a.Ya=a.F*b.Fc,a.eb=a.J*b.Gc)}else a.qa=a.ta=1,a.Ya=a.F,a.eb=a.J;a.Ha=a.L.createImageData(a.Ya,a.eb);a.Ba=document.createElement("canvas");a.Ba.width=a.Ya;a.Ba.height=a.eb;a.Ca=a.Ba.getContext("2d");a.vc=a.zc=0; a.Qb=a.Z;a.Rb=a.la;b=a.Z-a.F*a.qa;c=a.la-a.J*a.ta;0>1,a.Qb-=b);0>1,a.Rb-=c);if(b||c)a.L.fillStyle=a.O.style.backgroundColor,a.L.fillRect(0,0,a.Z,a.la)}}ut(a,!0);ys(a)}return!0}function $s(a,b,c,d){b=(b+c*a.width)*d.length;a.data[b]=d[0];a.data[b+1]=d[1];a.data[b+2]=d[2];a.data[b+3]=d[3]}function Tt(a){a.xa=-1;a.ma=!1;var b=a.Vc;if(void 0===a.M||a.M.length!=b)a.M=Array(b)}function ut(a,b){b||(a.Ga=!1);Tt(a)} -function dt(a,b,c,d,e){var f=d&255,g=d>>8;d=g&15;var h=a.va[a.I];h.jf&&(d=h.jf[d]);var k=g>>4&15;h.jf&&(k=h.jf[k]);e?(b*=h.Fc,c*=h.Gc,e.fillStyle=h.Be[k],e.fillRect(b,c,h.Fc,h.Gc)):(b=b*a.qa+a.vc,c=c*a.ta+a.zc,a.L.fillStyle=h.Be[k],a.L.fillRect(b,c,a.qa,a.ta));g&Vt&&(k=(f&15)*h.Fc,f=(f>>4)*h.Gc,e?e.drawImage(h.Sg[d],k,f,h.Fc,h.Gc,b,c,h.Fc,h.Gc):a.L.drawImage(h.Sg[d],k,f,h.Fc,h.Gc,b,c,a.qa,a.ta));g&ct&&(f=a.md,g=a.Hc,e?(a.za&&a.za!==h.Gc&&(f=f*h.Gc/a.za|0,g=g*h.Gc/a.za|0),e.fillStyle=h.Be[d],e.fillRect(b, -c+f,h.Fc,g)):(a.za&&a.za!==a.ta&&(f=f*a.ta/a.za|0,g=g*a.ta/a.za|0),a.L.fillStyle=h.Be[d],a.L.fillRect(b,c+f,a.qa,g)))} -function ys(a,b){if(a.ea.Yb){var c=!1,d=a.C;d&&(d!==a.A?d.Xc&8&&(c=!0):d.wd&32&&(c=!0));if(c||b){if(b)Tt(a);else if(void 0===a.M)return;var e=!1;!(b||++a.Ad&15)&&0<=a.Aa&&(a.Aa++,e=!0);var f=0,g=a.Wc,h=a.cb,c=h,k=c+a.Ob;a.oa>=kt&&(h=c=655360,k=c+65536);if(Wt(a,d)&8||d.Ye&&d.Ye=aq&&d.Wa[19]&&d.Wa[19]<<1!=d.Wa[1]+1&&(a.Ma=d.Wa[19]<<(a.I?1:d.Wa[20]&64?3:4),m=(a.Ma*(a.J-1)+a.F)/a.Eb|0,a.oa<=Ds&& -(m<<=1));c+m>k&&(m=k-c,0>m&&(m=0));k=c+m;if(b=!b&&a.ma){b=a.ka;for(var p=!0,v=c>>>b.A;0f)return;g=f+1}}if(a.I){if(a.va[a.I]){d=f;f=0;e=a.xa=0;h=Vt<<8;b=1048575;p=a.C.Xc&32;a.La>=aq&&(p=a.C.Cc[16]&8);m=a.aa-a.C.vd;p&&(e=Hs<<8,b&=~e,a.Aa&2||(b&=~h));for(c+=d<<1;c>8|(u&255)<<8;var I=e,T=16;m>=h))>>(T-=h);$s(a.Ha,m++,p,b[ua])}m>E&&(E=m);p=H&&(H=p+1)}k+=2;d++;if(m>=a.F){m=0;p+=2;if(p>a.J)break;p==a.J&&(p=1,k=c+a.Pb)}}a.ma=!0; +function dt(a,b,c,d,e){var f=d&255,g=d>>8;d=g&15;var h=a.va[a.I];h.kf&&(d=h.kf[d]);var k=g>>4&15;h.kf&&(k=h.kf[k]);e?(b*=h.Fc,c*=h.Gc,e.fillStyle=h.Ce[k],e.fillRect(b,c,h.Fc,h.Gc)):(b=b*a.qa+a.vc,c=c*a.ta+a.zc,a.L.fillStyle=h.Ce[k],a.L.fillRect(b,c,a.qa,a.ta));g&Vt&&(k=(f&15)*h.Fc,f=(f>>4)*h.Gc,e?e.drawImage(h.Tg[d],k,f,h.Fc,h.Gc,b,c,h.Fc,h.Gc):a.L.drawImage(h.Tg[d],k,f,h.Fc,h.Gc,b,c,a.qa,a.ta));g&ct&&(f=a.md,g=a.Hc,e?(a.za&&a.za!==h.Gc&&(f=f*h.Gc/a.za|0,g=g*h.Gc/a.za|0),e.fillStyle=h.Ce[d],e.fillRect(b, +c+f,h.Fc,g)):(a.za&&a.za!==a.ta&&(f=f*a.ta/a.za|0,g=g*a.ta/a.za|0),a.L.fillStyle=h.Ce[d],a.L.fillRect(b,c+f,a.qa,g)))} +function ys(a,b){if(a.ea.Yb){var c=!1,d=a.C;d&&(d!==a.A?d.Xc&8&&(c=!0):d.wd&32&&(c=!0));if(c||b){if(b)Tt(a);else if(void 0===a.M)return;var e=!1;!(b||++a.Ad&15)&&0<=a.Aa&&(a.Aa++,e=!0);var f=0,g=a.Wc,h=a.bb,c=h,k=c+a.Ob;a.oa>=kt&&(h=c=655360,k=c+65536);if(Wt(a,d)&8||d.Ze&&d.Ze=aq&&d.Wa[19]&&d.Wa[19]<<1!=d.Wa[1]+1&&(a.Ma=d.Wa[19]<<(a.I?1:d.Wa[20]&64?3:4),m=(a.Ma*(a.J-1)+a.F)/a.Eb|0,a.oa<=Ds&& +(m<<=1));c+m>k&&(m=k-c,0>m&&(m=0));k=c+m;if(b=!b&&a.ma){b=a.ka;for(var p=!0,v=c>>>b.A;0f)return;g=f+1}}if(a.I){if(a.va[a.I]){d=f;f=0;e=a.xa=0;h=Vt<<8;b=1048575;p=a.C.Xc&32;a.La>=aq&&(p=a.C.Cc[16]&8);m=a.aa-a.C.vd;p&&(e=Hs<<8,b&=~e,a.Aa&2||(b&=~h));for(c+=d<<1;c>8|(u&255)<<8;var I=e,T=16;m>=h))>>(T-=h);$s(a.Ha,m++,p,b[ua])}m>E&&(E=m);p=H&&(H=p+1)}k+=2;d++;if(m>=a.F){m=0;p+=2;if(p>a.J)break;p==a.J&&(p=1,k=c+a.Pb)}}a.ma=!0; va.F?a.Ma-a.F-u>>3:0;c>=8;b>v&&(v=b);m=K&&(K=m+1)}c+=H;if(b>=a.F){b=0;if(++m>a.J)break;c+=I}}u||(a.ma=!0);pa.F?a.Ma-a.F-K>>3:0;cI&&(T=I)):(u<<=K,T-=K,a.ma=!1):(a.ma&&u===a.M[d]?(h+=T,T=0):a.M[d]=u,d++);if(T){hp&&(p=h);b=E&&(E=b+1)}if(h>=a.F){h=0;if(++b>a.J)break;c+=H}}K||(a.ma=!0);ma&&(b.wh=a,a=-a|0);a%b.rh>b.mn&&(c|=1);a%b.uh>b.on&&(c|=9);b.fi=a/b.uh|0;return c}l.Cm=function(a,b){return Yt(this,this.Y,a,b)};l.fo=function(a,b,c){var d=this.Y;d.Fg=d.ec;d.ec=b&31;w(this,a,b,c,"CRTC.INDX")};l.Bm=function(a,b){return Zt(this,this.Y,a,b)};l.eo=function(a,b,c){$t(this,this.Y,a,b,c)};l.Dm=function(a,b){return au(this,this.Y,b)};l.ho=function(a,b,c){a=this.Y;w(this,a.port+4,b,c,"MODE");a.Xc=b;Ns(this,!1)}; -l.Em=function(a,b){return bu(this,this.Y,b)};l.Mk=function(a,b,c){this.A.Pf=this.A.Pf&-4|b&3;w(this,a,b,c,"FEAT")};l.am=function(a,b){a=this.A.wd;b&&!t(this)||w(this,960,null,b,"ATC.INDX",a);return a};l.rl=function(a,b){a=this.A.Cc[this.A.wd&31];b&&!t(this)||w(this,960,null,b,"ATC."+this.A.Tg[this.A.wd&31],a);return a}; -l.Lk=function(a,b,c){var d=this.A,e=d.wd&32;if(d.Ke){d.Ke=!1;var f=d.wd&31;if(16<=f||!e)if(cu||d.Cc[f]!==b)c&&!t(this)||w(this,a,b,c,"ATC."+d.Tg[f]),d.Cc[f]=b,ut(this,!1)}else d.wd=b,w(this,a,b,c,"ATC.INDX"),d.Ke=!0,b&32&&!e&&Fs(this,!0)&&ys(this,!0),a=(d.Wa[12]<<8)+d.Wa[13]|0,d.vd!=a&&(d.vd=a,ut(this)),d.Ye=0}; -l.Om=function(a,b){a=0;if(this.La==aq)a=3-((this.A.af&12)>>2),a=(this.xb&1<>this.A.xc&63;b&&!t(this)||w(this,969,null,b,"DAC.DATA["+r(this.A.dd)+"]["+r(this.A.xc)+"]",a);this.A.xc+=6;12a&&(b.xh=a,a=-a|0);a%b.sh>b.nn&&(c|=1);a%b.vh>b.pn&&(c|=9);b.gi=a/b.vh|0;return c}l.Dm=function(a,b){return Yt(this,this.Y,a,b)};l.ho=function(a,b,c){var d=this.Y;d.Gg=d.ec;d.ec=b&31;w(this,a,b,c,"CRTC.INDX")};l.Cm=function(a,b){return Zt(this,this.Y,a,b)};l.fo=function(a,b,c){$t(this,this.Y,a,b,c)};l.Em=function(a,b){return au(this,this.Y,b)};l.io=function(a,b,c){a=this.Y;w(this,a.port+4,b,c,"MODE");a.Xc=b;Ns(this,!1)}; +l.Fm=function(a,b){return bu(this,this.Y,b)};l.Nk=function(a,b,c){this.A.Qf=this.A.Qf&-4|b&3;w(this,a,b,c,"FEAT")};l.bm=function(a,b){a=this.A.wd;b&&!t(this)||w(this,960,null,b,"ATC.INDX",a);return a};l.sl=function(a,b){a=this.A.Cc[this.A.wd&31];b&&!t(this)||w(this,960,null,b,"ATC."+this.A.Ug[this.A.wd&31],a);return a}; +l.Mk=function(a,b,c){var d=this.A,e=d.wd&32;if(d.Le){d.Le=!1;var f=d.wd&31;if(16<=f||!e)if(cu||d.Cc[f]!==b)c&&!t(this)||w(this,a,b,c,"ATC."+d.Ug[f]),d.Cc[f]=b,ut(this,!1)}else d.wd=b,w(this,a,b,c,"ATC.INDX"),d.Le=!0,b&32&&!e&&Fs(this,!0)&&ys(this,!0),a=(d.Wa[12]<<8)+d.Wa[13]|0,d.vd!=a&&(d.vd=a,ut(this)),d.Ze=0}; +l.Pm=function(a,b){a=0;if(this.La==aq)a=3-((this.A.bf&12)>>2),a=(this.xb&1<>this.A.xc&63;b&&!t(this)||w(this,969,null,b,"DAC.DATA["+r(this.A.dd)+"]["+r(this.A.xc)+"]",a);this.A.xc+=6;12Missing <canvas> support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=Ma().indexOf("MSIE")&&(c.onresize=function(a,b,c,d){return function(){b.style.height= (a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Ua("aspect"));f&&.3<=f&&3.33>=f&&(Za("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");Ta("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"),f.style.fontSize="16px");c.appendChild(f);var g=e.getContext("2d"),d=new Q(d,e,g,f,c);yb(d,c)}}); function du(a){mb.call(this,"ParallelPort",a,4194304);this.G=a.adapter;switch(this.G){case 1:this.D=956;this.C=7;break;case 2:this.D=888;this.C=7;break;case 3:this.D=632;this.C=5;break;default:gb("Unrecognized parallel adapter #"+this.G);return}this.A=this.B=null;a=a.binding;"console"==a?this.B="":wb(this,a,eu)}ba(du,mb);l=du.prototype;l.Cb=function(a,b,c){switch(b){case eu:return this.na[b]=this.A=c,!0}return!1}; -l.uc=function(a,b,c,d){this.ka=b;this.H=c;this.ba=d;this.V=Wb(a,"ChipSet");Nc(b,this,fu,this.D);Rc(b,this,gu,this.D);Ib(this)};l.Xb=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};l.Wb=function(a){return a?this.save():!0};l.reset=function(){hu(this)};l.save=function(){var a=new Wf(this),b=0,c=[];c[b++]=this.F;c[b++]=this.Mb;c[b]=this.mf;a.set(0,c);return a.data()};l.restore=function(a){return hu(this,a[0])}; -function hu(a,b){var c=0;b||(b=[0,0,0]);a.F=b[c++];a.Mb=b[c++];a.mf=b[c];return!0}l.pm=function(a,b){var c=this.F;w(this,a,null,b,"DATA",c);return c};l.Nm=function(a,b){var c=this.Mb;w(this,a,null,b,"STAT",c);return c};l.lm=function(a,b){var c=this.mf;w(this,a,null,b,"CTRL",c);return c}; -l.Rn=function(a,b,c){w(this,a,b,c,"DATA");this.F=b;this.Mb|=iu;a=!1;Lb(this,"transmitByte("+r(b)+")");this.A&&(8==b?this.A.value=this.A.value.slice(0,-1):(this.A.value+=String.fromCharCode(b),this.A.scrollTop=this.A.scrollHeight),a=!0);if(null!=this.B){if(10==b||1024<=this.B.length)this.P(this.B),this.B="";10!=b&&(this.B+=String.fromCharCode(b));a=!0}a&&(this.Mb&=~iu);ju(this)};l.Mn=function(a,b,c){w(this,a,b,c,"CTRL");this.mf=b;ju(this)}; -function ju(a){a.V&&a.C&&(a.mf&ku&&!(a.Mb&iu)?gh(a.V,a.C):eh(a.V,a.C))}var eu="buffer",iu=64,ku=16,fu={0:du.prototype.pm,1:du.prototype.Nm,2:du.prototype.lm},gu={0:du.prototype.Rn,2:du.prototype.Mn};$a(function(){for(var a=zb(document,"pcx86","parallel"),b=0;b=b)a.preventDefault&&a.preventDefault(),64=b)a.preventDefault&&a.preventDefault(),64");if(2==c.length){var d=Ba(c[0]);if(d!=this.be)return;c=Ba(c[1]);if(this.D=tb(c)){var e=this.D.exports;if(e){var f=e.connect;f&&f.call(this.D,this.O);if(this.aa=e.receiveData){this.O=a;this.Y=e.receiveStatus;this.status("Connected "+this.xe+"."+d+" to "+c);return}}}}this.status("Unable to establish connection: "+b)}}}; -l.Xb=function(a,b){if(!b)if(this.zj(this.O),!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};l.Wb=function(a){return a?this.save():!0};l.reset=function(){ru(this)};l.save=function(){var a=new Wf(this),b=0,c=[];c[b++]=this.ga;c[b++]=this.la;c[b++]=this.L;c[b++]=this.N;c[b++]=this.G;c[b++]=this.C;c[b++]=this.Z;c[b++]=this.B;c[b++]=this.A;c[b]=this.J;a.set(0,c);return a.data()};l.restore=function(a){return ru(this,a[0])}; -function ru(a,b){var c=0;b||(b=[0,0,su,0,tu,0,0,uu|vu,a.qa,[]]);a.ga=b[c++];a.la=b[c++];a.L=b[c++];a.N=b[c++];a.G=b[c++];a.C=b[c++];a.Z=b[c++];a.B=b[c++];a.A=b[c++];a.J=b[c];return!0}l.Of=function(a){if("number"==typeof a)this.J.push(a);else if("string"==typeof a)for(var b=0;b>8:this.N;w(this,a,null,b,this.C&Bu?"DLM":"IER",c);return c};l.xm=function(a,b){var c=this.G;w(this,a,null,b,"IIR",c);return c};l.ym=function(a,b){var c=this.C;w(this,a,null,b,"LCR",c);return c};l.Am=function(a,b){var c=this.Z;w(this,a,null,b,"MCR",c);return c}; -l.zm=function(a,b){var c=this.B;w(this,a,null,b,"LSR",c);return c};l.Fm=function(a,b){var c=this.A;this.A&=~(xu|yu);w(this,a,null,b,"MSR",c);return c}; -l.po=function(a,b,c){w(this,a,b,c,this.C&Bu?"DLL":"THR");if(this.C&Bu)this.L=this.L&-256|b;else{this.la=b;this.B&=~(uu|vu);a=!1;Lb(this,"transmitByte("+r(b)+")");this.aa&&this.aa.call(this.D,b)&&(a=!0);if(this.F){if(13==b)this.K=0;else if(8==b)this.F.value=this.F.value.slice(0,-1),0":String.fromCharCode(b);a=d.length;32>b&&1==a&&(a=0);9==b&&(b=this.oa||8,a=b-this.K%b,this.oa&&(d=Aa("",a)));this.ma&&!this.K&&a&&(d=String.fromCharCode(this.ma)+ -d);this.F.value+=d;this.F.scrollTop=this.F.scrollHeight;this.K+=a}a=!0}else if(null!=this.I){if(10==b||1024<=this.I.length)this.P(this.I),this.I="";10!=b&&(this.I+=String.fromCharCode(b));a=!0}a&&(this.B=this.B|uu|vu)}};l.ao=function(a,b,c){w(this,a,b,c,this.C&Bu?"DLM":"IER");this.C&Bu?this.L=this.L&255|b<<8:this.N=b};l.bo=function(a,b,c){w(this,a,b,c,"LCR");this.C=b}; -l.co=function(a,b,c){var d=b^this.Z;w(this,a,b,c,"MCR");this.Z=b;d&(Cu|Du)&&this.Y&&(a=0,this.O?(a|=b&Du?32:0,a|=b&Cu?320:0):(a|=b&Du?16:0,a|=b&Cu?1048576:0),this.Y.call(this.D,a))};function zu(a){var b=-1;a.B&Au&&a.N&Eu?b=Fu:a.A&(xu|yu)&&a.N&Gu&&(b=Hu);0<=b?(a.G&=~(tu|Iu),a.G|=b,a.V&&a.M&&gh(a.V,a.M,100)):(a.G|=tu,a.V&&a.M&&eh(a.V,a.M))} -var ou="buffer",su=384,Eu=1,Gu=8,tu=1,Fu=4,Hu=0,Iu=6,Bu=128,Cu=1,Du=2,Au=1,uu=32,vu=64,xu=1,yu=2,mu=16,nu=32,pu={0:lu.prototype.Km,1:lu.prototype.wm,2:lu.prototype.xm,3:lu.prototype.ym,4:lu.prototype.Am,5:lu.prototype.zm,6:lu.prototype.Fm},qu={0:lu.prototype.po,1:lu.prototype.ao,3:lu.prototype.bo,4:lu.prototype.co};$a(function(){for(var a=zb(document,"pcx86","serial"),b=0;b");if(2==c.length){var d=Ba(c[0]);if(d!=this.ce)return;c=Ba(c[1]);if(this.D=tb(c)){var e=this.D.exports;if(e){var f=e.connect;f&&f.call(this.D,this.O);if(this.aa=e.receiveData){this.O=a;this.Y=e.receiveStatus;this.status("Connected "+this.ye+"."+d+" to "+c);return}}}}this.status("Unable to establish connection: "+b)}}}; +l.Xb=function(a,b){if(!b)if(this.Aj(this.O),!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};l.Wb=function(a){return a?this.save():!0};l.reset=function(){ru(this)};l.save=function(){var a=new Wf(this),b=0,c=[];c[b++]=this.ga;c[b++]=this.la;c[b++]=this.L;c[b++]=this.N;c[b++]=this.G;c[b++]=this.C;c[b++]=this.Z;c[b++]=this.B;c[b++]=this.A;c[b]=this.J;a.set(0,c);return a.data()};l.restore=function(a){return ru(this,a[0])}; +function ru(a,b){var c=0;b||(b=[0,0,su,0,tu,0,0,uu|vu,a.qa,[]]);a.ga=b[c++];a.la=b[c++];a.L=b[c++];a.N=b[c++];a.G=b[c++];a.C=b[c++];a.Z=b[c++];a.B=b[c++];a.A=b[c++];a.J=b[c];return!0}l.Pf=function(a){if("number"==typeof a)this.J.push(a);else if("string"==typeof a)for(var b=0;b>8:this.N;w(this,a,null,b,this.C&Bu?"DLM":"IER",c);return c};l.ym=function(a,b){var c=this.G;w(this,a,null,b,"IIR",c);return c};l.zm=function(a,b){var c=this.C;w(this,a,null,b,"LCR",c);return c};l.Bm=function(a,b){var c=this.Z;w(this,a,null,b,"MCR",c);return c}; +l.Am=function(a,b){var c=this.B;w(this,a,null,b,"LSR",c);return c};l.Gm=function(a,b){var c=this.A;this.A&=~(xu|yu);w(this,a,null,b,"MSR",c);return c}; +l.qo=function(a,b,c){w(this,a,b,c,this.C&Bu?"DLL":"THR");if(this.C&Bu)this.L=this.L&-256|b;else{this.la=b;this.B&=~(uu|vu);a=!1;Lb(this,"transmitByte("+r(b)+")");this.aa&&this.aa.call(this.D,b)&&(a=!0);if(this.F){if(13==b)this.K=0;else if(8==b)this.F.value=this.F.value.slice(0,-1),0":String.fromCharCode(b);a=d.length;32>b&&1==a&&(a=0);9==b&&(b=this.oa||8,a=b-this.K%b,this.oa&&(d=Aa("",a)));this.ma&&!this.K&&a&&(d=String.fromCharCode(this.ma)+ +d);this.F.value+=d;this.F.scrollTop=this.F.scrollHeight;this.K+=a}a=!0}else if(null!=this.I){if(10==b||1024<=this.I.length)this.P(this.I),this.I="";10!=b&&(this.I+=String.fromCharCode(b));a=!0}a&&(this.B=this.B|uu|vu)}};l.bo=function(a,b,c){w(this,a,b,c,this.C&Bu?"DLM":"IER");this.C&Bu?this.L=this.L&255|b<<8:this.N=b};l.co=function(a,b,c){w(this,a,b,c,"LCR");this.C=b}; +l.eo=function(a,b,c){var d=b^this.Z;w(this,a,b,c,"MCR");this.Z=b;d&(Cu|Du)&&this.Y&&(a=0,this.O?(a|=b&Du?32:0,a|=b&Cu?320:0):(a|=b&Du?16:0,a|=b&Cu?1048576:0),this.Y.call(this.D,a))};function zu(a){var b=-1;a.B&Au&&a.N&Eu?b=Fu:a.A&(xu|yu)&&a.N&Gu&&(b=Hu);0<=b?(a.G&=~(tu|Iu),a.G|=b,a.V&&a.M&&gh(a.V,a.M,100)):(a.G|=tu,a.V&&a.M&&eh(a.V,a.M))} +var ou="buffer",su=384,Eu=1,Gu=8,tu=1,Fu=4,Hu=0,Iu=6,Bu=128,Cu=1,Du=2,Au=1,uu=32,vu=64,xu=1,yu=2,mu=16,nu=32,pu={0:lu.prototype.Lm,1:lu.prototype.xm,2:lu.prototype.ym,3:lu.prototype.zm,4:lu.prototype.Bm,5:lu.prototype.Am,6:lu.prototype.Gm},qu={0:lu.prototype.qo,1:lu.prototype.bo,3:lu.prototype.co,4:lu.prototype.eo};$a(function(){for(var a=zb(document,"pcx86","serial"),b=0;ba.F||0>a.G)a.F=b.clientX,a.G=b.clientY;a.M?(c=b.movementX||b.mozMovementX||b.webkitMovementX||0,d=b.movementY||b.mozMovementY||b.webkitMovementY||0):(c=b.clientX-a.F,d=b.clientY-a.G);a.F=b.clientX;a.G=b.clientY;a.tf(c,d,a.F,a.G)}} -l.Vd=function(a,b){if(this.rc&&this.H&&this.H.ea.wb){var c="mouse button"+a+" "+(b?"dn":"up");switch(a){case As:if(this.K!=b){this.K=b;Pu(this,c);return}break;case Qu:if(this.L!=b){this.L=b;Pu(this,c);return}}Lb(this,c+": ignored")}};l.tf=function(a,b,c,d){this.rc&&this.H&&this.H.ea.wb&&(a||b)&&(this.I=a,this.J=b,Pu(this,null,c,d))}; -function Pu(a,b,c,d){var e=64|(a.K?32:0)|(a.L?16:0)|(a.J&192)>>4|(a.I&192)>>6,f=a.I&63,g=a.J&63;t(a,8388608)&&Lb(a,(b?b+": ":"")+(void 0!==d?"mouse ("+c+","+d+"): ":"")+"serial packet ["+r(e)+","+r(f)+","+r(g)+"]",0,!0);a.D.Of([e,f,g]);a.I=a.J=0} -l.pl=function(a){var b=1048592==(a&1048592);if(b){if(!this.rc){var c=!1;this.A&16||(this.reset(),Lb(this,"serial mouse reset"),c=!0);this.A&1048576||(Lb(this,"serial mouse ID requested"),c=!0);c&&(this.D.Of([Ru,Ru]),Lb(this,"serial mouse ID sent"));Ku(this);this.rc=b}}else this.rc&&(Lb(this,"serial mouse inactive"),Lu(this),this.rc=b);this.A=a};var Ru=77,As=0,Qu=2;$a(function(){for(var a=zb(document,"pcx86","mouse"),b=0;ba.F||0>a.G)a.F=b.clientX,a.G=b.clientY;a.M?(c=b.movementX||b.mozMovementX||b.webkitMovementX||0,d=b.movementY||b.mozMovementY||b.webkitMovementY||0):(c=b.clientX-a.F,d=b.clientY-a.G);a.F=b.clientX;a.G=b.clientY;a.uf(c,d,a.F,a.G)}} +l.Vd=function(a,b){if(this.rc&&this.H&&this.H.ea.vb){var c="mouse button"+a+" "+(b?"dn":"up");switch(a){case As:if(this.K!=b){this.K=b;Pu(this,c);return}break;case Qu:if(this.L!=b){this.L=b;Pu(this,c);return}}Lb(this,c+": ignored")}};l.uf=function(a,b,c,d){this.rc&&this.H&&this.H.ea.vb&&(a||b)&&(this.I=a,this.J=b,Pu(this,null,c,d))}; +function Pu(a,b,c,d){var e=64|(a.K?32:0)|(a.L?16:0)|(a.J&192)>>4|(a.I&192)>>6,f=a.I&63,g=a.J&63;t(a,8388608)&&Lb(a,(b?b+": ":"")+(void 0!==d?"mouse ("+c+","+d+"): ":"")+"serial packet ["+r(e)+","+r(f)+","+r(g)+"]",0,!0);a.D.Pf([e,f,g]);a.I=a.J=0} +l.ql=function(a){var b=1048592==(a&1048592);if(b){if(!this.rc){var c=!1;this.A&16||(this.reset(),Lb(this,"serial mouse reset"),c=!0);this.A&1048576||(Lb(this,"serial mouse ID requested"),c=!0);c&&(this.D.Pf([Ru,Ru]),Lb(this,"serial mouse ID sent"));Ku(this);this.rc=b}}else this.rc&&(Lb(this,"serial mouse inactive"),Lu(this),this.rc=b);this.A=a};var Ru=77,As=0,Qu=2;$a(function(){for(var a=zb(document,"pcx86","mouse"),b=0;b>2;var e=d=0,a=new DataView(a,0,c);g.A=Array(g.rb);for(c=0;cb.indexOf("/api/v1/dump")&&(a=va(b),"json"==a||"gz"==a?f=encodeURI(b):"demandrw"==this.mode||"demandro"==this.mode?(f=Zu(this,b),this.og=!0):(c="path",d="&mbhd=10",!b.indexOf("http:")||!b.indexOf("ftp:")||0<="dsk ima img 360 720 12 144".split(" ").indexOf(a)?(c="disk",d="&mbhd=0"):wa(b, -"/")&&(c="dir"),f=La()+"/api/v1/dump?"+c+"="+encodeURIComponent(b)+(this.Oe?"":d)+"&format=json"));return!!Ka(f,null,!0,function(a,b,c){$u(g,a,b,c)})}; -function $u(a,b,c,d){var e=null;a.Re=!1;var f=!(!(0>d&&a.pa)||a.pa.ea.Yb);if(a.og)d?a.controller.Fa('Unable to connect to disk "'+a.I+'" (error '+d+": "+c+")",f):(a.D=!0,av(a),e=a);else if(d)a.controller.Fa('Unable to load disk "'+a.F+'" (error '+d+": "+b+")",f);else{ob(a.controller.xe,b,c);try{if(0g&&0c.indexOf("0x")&&'["'!=c.substr(0,2)?JSON.parse(c.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+c+")");if(h.length)if(1==h.length)gb(h[0]);else{a.rb=h.length;a.kb=h[0].length;a.$a=h[0][0].length;var k=h[0][0][0];a.Na=k&&k.length||512;for(d=c=0;d>2,p=k.pattern;void 0===p&&(p=k.pattern=0);var v=k.data;if(void 0===v){var u=k.bytes;if(void 0!==u&&u.length){for(var E= +function Uu(a,b,c,d,e,f){a.mode=b;a.qb=c;a.kb=d;a.$a=e;a.Na=f;a.A=[];if("preload"!=a.mode){b=Array(a.qb);for(c=0;c>2;var e=d=0,a=new DataView(a,0,c);g.A=Array(g.qb);for(c=0;cb.indexOf("/api/v1/dump")&&(a=va(b),"json"==a||"gz"==a?f=encodeURI(b):"demandrw"==this.mode||"demandro"==this.mode?(f=Zu(this,b),this.pg=!0):(c="path",d="&mbhd=10",!b.indexOf("http:")||!b.indexOf("ftp:")||0<="dsk ima img 360 720 12 144".split(" ").indexOf(a)?(c="disk",d="&mbhd=0"):wa(b, +"/")&&(c="dir"),f=La()+"/api/v1/dump?"+c+"="+encodeURIComponent(b)+(this.Pe?"":d)+"&format=json"));return!!Ka(f,null,!0,function(a,b,c){$u(g,a,b,c)})}; +function $u(a,b,c,d){var e=null;a.Se=!1;var f=!(!(0>d&&a.pa)||a.pa.ea.Yb);if(a.pg)d?a.controller.Fa('Unable to connect to disk "'+a.I+'" (error '+d+": "+c+")",f):(a.D=!0,av(a),e=a);else if(d)a.controller.Fa('Unable to load disk "'+a.F+'" (error '+d+": "+b+")",f);else{ob(a.controller.ye,b,c);try{if(0g&&0c.indexOf("0x")&&'["'!=c.substr(0,2)?JSON.parse(c.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+c+")");if(h.length)if(1==h.length)gb(h[0]);else{a.qb=h.length;a.kb=h[0].length;a.$a=h[0][0].length;var k=h[0][0][0];a.Na=k&&k.length||512;for(d=c=0;d>2,p=k.pattern;void 0===p&&(p=k.pattern=0);var v=k.data;if(void 0===v){var u=k.bytes;if(void 0!==u&&u.length){for(var E= m<<2,K=u.length;Kb;b++){if(128==dv(a,e,c+0,1)){d.Kf=dv(a,e,c+8,4);(e=cv(a,d.Kf))&&(f=!0);break}c+=16}if(!f)return}d.sf||(d.sf=dv(a,e,19,2)||dv(a,e,32,4),d.rf=dv(a,e,14,2),d.lh=d.rf+dv(a,e,22,2)*dv(a,e,16,1),d.vh=dv(a,e,17,2),d.vf=dv(a,e,13,1));d.jh=d.lh+((32*d.vh+(d.Na-1))/d.Na|0);d.kn=(d.sf-d.jh)/d.vf|0;d.vg=4084>=d.kn?12:16;d.Nl=12==d.vg?4086:65526;b=[];for(e=d.lh;e>=8;f+=2;if(k)for(;m--;)rv(d,f,1),254>=k?(p=k,v=rv(d,f+1),f+=3):(p=rv(d,f+3,1),v=rv(d,f+4),f+=6),d.nd[p]&&(d.nd[p].ee[h]=[v]),d.A[h]=[p,v],h++;else h+=m}(g=gv(e,uv,c))&&vv(e,g+c);g=gv(e,wv,c);h=gv(e,xv,c);g&&h&&vv(e,g,g+h)}}}} -function fv(a,b,c,d,e){var f,g=a.C.length,h=b.Na/32|0;b.cq=d+"\\";for(var k=0;kK)break;for(var H=u.jh+(K-2)*u.vf,I=0;I>3,1),d?e=16==b.vg?e<<8:c&7?e<<4:(e&15)<<8:c&7&&(e>>=4));return e} -function cv(a,b){var c=a.kb*a.$a,d=b/c|0;return dg)break;e|=g<=f)break;e+=String.fromCharCode(f)}return e}function Yu(a,b,c,d,e,f){a||(a={sector:d,length:e,data:[],pattern:f});a.Ol=b;a.Pl=c;a.hd=a.Lc=0;a.Oa=!1;return a} -function Zu(a,b){b="action=open&volume="+b+("&mode="+a.mode);b+="&chs="+a.rb+":"+a.kb+":"+a.$a+":"+a.Na;b+="&machine="+Wu(a.controller);b+="&user="+Xu(a.controller);return La()+"/api/v1/disk?"+b} -function Av(a,b,c,d,e,f,g){if(a.D){var h;h="action=read&volume="+a.I;h+="&chs="+a.rb+":"+a.kb+":"+a.$a+":"+a.Na;h=h+("&addr="+b+":"+c+":"+d+":"+e)+("&machine="+Wu(a.controller));h+="&user="+Xu(a.controller);Ka(La()+"/api/v1/disk?"+h,null,f,function(h,m,p){h=[b,c,d,e,f,g];var k=!1,u=h[0],E=h[1],K=h[2],H=h[3];if(!p){m=JSON.parse(m);for(k=0;H--;){var I=a.seek(u,E,K,!0);if(!I)break;bv(I,m,k);k+=I.length;K++}k=h[4]}(h=h[5])&&h(p,k)})}else g&&g(-1,!1)} -function Bv(a,b,c,d,e,f,g){if(a.D){var h={};a.N=!0;h.action="write";h.volume=a.I;h.chs=a.rb+":"+a.kb+":"+a.$a+":"+a.Na;h.addr=b+":"+c+":"+d+":"+e;h.machine=Wu(a.controller);h.user=Xu(a.controller);h.data=JSON.stringify(f);Ka(La()+"/api/v1/disk",h,g,function(f,h,p){var k=[b,c,d,e,g];f=k[0];h=k[1];var m=k[2],E=k[3],k=k[4];a.N=!1;if(0<=f&&fb;b++){if(128==dv(a,e,c+0,1)){d.Lf=dv(a,e,c+8,4);(e=cv(a,d.Lf))&&(f=!0);break}c+=16}if(!f)return}d.tf||(d.tf=dv(a,e,19,2)||dv(a,e,32,4),d.sf=dv(a,e,14,2),d.mh=d.sf+dv(a,e,22,2)*dv(a,e,16,1),d.wh=dv(a,e,17,2),d.wf=dv(a,e,13,1));d.kh=d.mh+((32*d.wh+(d.Na-1))/d.Na|0);d.mn=(d.tf-d.kh)/d.wf|0;d.wg=4084>=d.mn?12:16;d.Ol=12==d.wg?4086:65526;b=[];for(e=d.mh;e>=8;f+=2;if(k)for(;m--;)rv(d,f,1),254>=k?(p=k,v=rv(d,f+1),f+=3):(p=rv(d,f+3,1),v=rv(d,f+4),f+=6),d.nd[p]&&(d.nd[p].fe[h]=[v]),d.A[h]=[p,v],h++;else h+=m}(g=gv(e,uv,c))&&vv(e,g+c);g=gv(e,wv,c);h=gv(e,xv,c);g&&h&&vv(e,g,g+h)}}}} +function fv(a,b,c,d,e){var f,g=a.C.length,h=b.Na/32|0;b.eq=d+"\\";for(var k=0;kK)break;for(var H=u.kh+(K-2)*u.wf,I=0;I>3,1),d?e=16==b.wg?e<<8:c&7?e<<4:(e&15)<<8:c&7&&(e>>=4));return e} +function cv(a,b){var c=a.kb*a.$a,d=b/c|0;return dg)break;e|=g<=f)break;e+=String.fromCharCode(f)}return e}function Yu(a,b,c,d,e,f){a||(a={sector:d,length:e,data:[],pattern:f});a.Pl=b;a.Ql=c;a.hd=a.Lc=0;a.Oa=!1;return a} +function Zu(a,b){b="action=open&volume="+b+("&mode="+a.mode);b+="&chs="+a.qb+":"+a.kb+":"+a.$a+":"+a.Na;b+="&machine="+Wu(a.controller);b+="&user="+Xu(a.controller);return La()+"/api/v1/disk?"+b} +function Av(a,b,c,d,e,f,g){if(a.D){var h;h="action=read&volume="+a.I;h+="&chs="+a.qb+":"+a.kb+":"+a.$a+":"+a.Na;h=h+("&addr="+b+":"+c+":"+d+":"+e)+("&machine="+Wu(a.controller));h+="&user="+Xu(a.controller);Ka(La()+"/api/v1/disk?"+h,null,f,function(h,m,p){h=[b,c,d,e,f,g];var k=!1,u=h[0],E=h[1],K=h[2],H=h[3];if(!p){m=JSON.parse(m);for(k=0;H--;){var I=a.seek(u,E,K,!0);if(!I)break;bv(I,m,k);k+=I.length;K++}k=h[4]}(h=h[5])&&h(p,k)})}else g&&g(-1,!1)} +function Bv(a,b,c,d,e,f,g){if(a.D){var h={};a.N=!0;h.action="write";h.volume=a.I;h.chs=a.qb+":"+a.kb+":"+a.$a+":"+a.Na;h.addr=b+":"+c+":"+d+":"+e;h.machine=Wu(a.controller);h.user=Xu(a.controller);h.data=JSON.stringify(f);Ka(La()+"/api/v1/disk",h,g,function(f,h,p){var k=[b,c,d,e,g];f=k[0];h=k[1];var m=k[2],E=k[3],k=k[4];a.N=!1;if(0<=f&&fb&&(b=0);2E3>2,e=Array(d),f=0;f>2,e=a.data;a=a.pattern;for(var f=0;f>8&255;c[d++]=g>>16&255;c[d++]=g>>24&255}return c}l.read=function(a,b){var c=-1;if(a&&b>2,c=(d>((b&3)<<3)&255;return c}; -l.write=function(a,b,c){if(this.Re)return!1;if(b>2;b=(b&3)<<3;for(var g=d.length;g<=f;g++)d[g]=e;a.Lc?f=a.hd+a.Lc&&(a.Lc+=f-(a.hd+a.Lc)+1):(a.hd=f,a.Lc=1);d[f]=d[f]&~(255<>2;b=(b&3)<<3;for(var g=d.length;g<=f;g++)d[g]=e;a.Lc?f=a.hd+a.Lc&&(a.Lc+=f-(a.hd+a.Lc)+1):(a.hd=f,a.Lc=1);d[f]=d[f]&~(255<=this.A.length||k>=this.A[h].length||m>=this.A[h][k].length){c="sector (CHS="+h+":"+k+":"+m+") out of range ("+ -b+" changes applied)";b=-1;break}if(this.Re){c="unable to modify write-protected disk";b=-1;break}e=g[f++];f=g[f++];g=e+f.length;if(h=this.A[h][k][m]){for(k=h.data.length;kb?-2!=b&&this.controller.Fa("Unable to restore disk '"+this.F+": "+c):av(this);return b}; +b+" changes applied)";b=-1;break}if(this.Se){c="unable to modify write-protected disk";b=-1;break}e=g[f++];f=g[f++];g=e+f.length;if(h=this.A[h][k][m]){for(k=h.data.length;kb?-2!=b&&this.controller.Fa("Unable to restore disk '"+this.F+": "+c):av(this);return b}; l.toJSON=function(){var a;a=0;for(var b;b=cv(this,a++);)Gv(b);a=JSON.stringify(this.A,function(a,b){if("file"!=a)return b});a=a.replace(/,"length":512/gm,"").replace(/,"pattern":0/gm,"");a=a.replace(/"(sector|length|data|pattern)":/gm,"$1:");a=a.replace(/,"[^"]*":([0-9]+|true|false)/gm,"");a=a.replace(/(sector|length|data|pattern):/gm,'"$1":');return a=a.replace(/([\]}]),/gm,"$1,\n")}; -function Gv(a){var b=a.data,c=b.length;if(c<<2==a.length){for(var d=c-1,e=b[d],f=0;d--&&b[d]===e;)f++;f++&&(b.length=c-f,a.pattern=e)}}var Tu=0;function zv(a,b,c,d,e,f){this.sa=a;this.$b=c;this.Wg=d;this.aj=e;this.fe=f}function rv(a,b,c){var d;c=c||2;var e=b&511,f=cv(a.sa,a.fe[b>>9]);if(f){if(e+c<=f.length)return dv(a.sa,f,e,c);for(e=d=0;c--;)d|=rv(a,b++,1)<=e.gi&&a<=e.Ik){d=a-=e.gi;var f,g;for(g in e.ee){var h=e.ee[g],k=a-h[0];if(!k){c=this.Rf+"!"+h[1];break}b&&0>9]);if(f){if(e+c<=f.length)return dv(a.sa,f,e,c);for(e=d=0;c--;)d|=rv(a,b++,1)<=e.hi&&a<=e.Jk){d=a-=e.hi;var f,g;for(g in e.fe){var h=e.fe[g],k=a-h[0];if(!k){c=this.Sf+"!"+h[1];break}b&&0'+b+"
");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.na[b]=c,c.onchange=function(){var a=oa(c.value,10);null!=a&&Iv(d,a)},!0;case "loadDisk":return this.na[b]=c,c.onclick=function(){var a=d.na.listDisks;a&&Jv(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDisk":if(!this.M){c.parentNode.removeChild(c);break}this.na[b]=c;c.onclick=function(){var a=d.na.listDrives;a&&a.options&&d.A&&((a=d.A[oa(a.value, -10)||0])?(a=a.sa)?(a=Wa(Fv(a),"octet-stream",!0,a.Jg.replace(".json",".img")),gb(a)):d.Fa("No diskette loaded in drive."):d.Fa("No diskette drive selected."))};return!0;case "mountDisk":if(this.M)return this.na[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;Jv(d,ta(b,!0),b,a)}return!1},!0;c.parentNode.removeChild(c)}return!1}; +10)||0])?(a=a.sa)?(a=Wa(Fv(a),"octet-stream",!0,a.Kg.replace(".json",".img")),gb(a)):d.Fa("No diskette loaded in drive."):d.Fa("No diskette drive selected."))};return!0;case "mountDisk":if(this.M)return this.na[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;Jv(d,ta(b,!0),b,a)}return!1},!0;c.parentNode.removeChild(c)}return!1}; l.uc=function(a,b,c,d){this.ka=b;this.H=c;this.ba=d;this.pa=a;this.V=Wb(a,"ChipSet");if((this.G=yd(this.pa,"autoMount")||this.G)&&"string"==typeof this.G)try{this.G=eval("("+this.G+")")}catch(e){gb("FDC auto-mount error: "+e.message+" ("+this.G+")"),this.G=null}Kv(this);Nc(b,this,Lv);Rc(b,this,Mv);Nv(this,"None","",!0);this.M&&Nv(this,"Local Disk","?");Nv(this,"Remote Disk","??");Ov(this)||Ib(this)}; l.Xb=function(a,b){if(!b){if(!a){if(this.reset(),this.pa.O){this.B=[];for(a=0;ag.sa.restore(E)&&(h=!1);h&&g.sa&&void 0!==g.Sa&&(g.eb=g.sa.seek(g.Gb,g.Za,g.nb));h||(e=!1)}a.I=b[c++]||0;a.Zb=b[c]||Wv;return e} -function Qv(a){var b=0,c=[];c[b++]=a.Ua;c[b++]=0;c[b++]=a.fa;c[b++]=a.F;c[b++]=a.D;c[b++]=a.C;c[b++]=a.J;for(var d=b++,e=0,f=[],g=0;gg.sa.restore(E)&&(h=!1);h&&g.sa&&void 0!==g.Sa&&(g.cb=g.sa.seek(g.Gb,g.Za,g.mb));h||(e=!1)}a.I=b[c++]||0;a.Zb=b[c]||Wv;return e} +function Qv(a){var b=0,c=[];c[b++]=a.Ua;c[b++]=0;c[b++]=a.fa;c[b++]=a.F;c[b++]=a.D;c[b++]=a.C;c[b++]=a.J;for(var d=b++,e=0,f=[],g=0;gUv(a,e,b,c,!1,d)&&window.confirm("Click OK to reload the original disk.\n(WARNING: All disk changes will be discarded)");){var f=a,g=c,h;for(h=0;ha.rb||f[1]>a.kb)&&(this.Fa('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.Ua)),b=null);b?(a.sa=b,a.Zk=c,a.te=d,Vv(this,c,d,b),f=b.info(),this.I|=Zv,this.Fa('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.Ua),a.ke||e),a.ug=f[0],a.Af=f[1],a.Bf=f[2],this.pa&&this.pa.ld()):a.Ne=!1;a.ke&&(a.ke=!1,--this.K||Ib(this));Iv(this,a.Ua)}; +!0)}}else Pv(a,e);else a.Fa("Unable to load the selected drive")}function Uv(a,b,c,d,e,f){var g=a.A[b];if(d&&(d=d.replace("/disks/pc/","/disks/pcx86/"),g.ue.toLowerCase()!=d.toLowerCase())){Pv(a,b,e,!0);if(g.Me)return a.Fa("Drive "+b+" busy"),0;g.Me=!0;e&&(g.le=!0,a.K++,t(a)&&Lb(a,"loading diskette '"+c+"'"));g.Oe=!!f;return(new Su(a,g,"preload")).load(c,d,f,a.mj)?1:0}return-1} +l.mj=function(a,b,c,d,e){var f;a.Me=!1;b&&(f=b.info(),b&&f[0]>a.qb||f[1]>a.kb)&&(this.Fa('Diskette "'+c+'" too large for drive '+String.fromCharCode(65+a.Ua)),b=null);b?(a.sa=b,a.$k=c,a.ue=d,Vv(this,c,d,b),f=b.info(),this.I|=Zv,this.Fa('Mounted diskette "'+c+'" in drive '+String.fromCharCode(65+a.Ua),a.le||e),a.vg=f[0],a.Bf=f[1],a.Cf=f[2],this.pa&&this.pa.ld()):a.Oe=!1;a.le&&(a.le=!1,--this.K||Ib(this));Iv(this,a.Ua)}; function Nv(a,b,c,d){if((a=a.na.listDisks)&&a.options){for(var e=0;e=this.C&&(this.fa&=~(bw|cw),this.D=this.C=0);return c}; -l.Tn=function(a,b,c){t(this)&&w(this,a,b,c,"DATA["+this.C+"]");this.C=ew[a].Id){b=!1;this.D=0;a=fw(this);var d,e,f,g,h=a&dw;switch(h){case gw:fw(this);fw(this);hw(this);break;case iw:c=fw(this);this.Ua=c&3;d=this.A[this.Ua];hw(this);jw(this,(d.sb&kw)>>>24);break;case lw:case mw:c=fw(this);b=c>>2&1;this.Ua=c&3;d=this.A[this.Ua];d.Za=b;c=d.Gb=fw(this);e=fw(this);f=d.nb=fw(this);g=fw(this);d.vb=128<>2&1;this.Ua= -c&3;d=this.A[this.Ua];c=d.Gb;e=d.Za=b;f=d.nb=1;g=0;d.sb=Yv;d.sa&&(d.eb=d.sa.seek(d.Gb,d.Za,d.nb))?g=d.eb.length>>8:d.sb=nw|ow;qw(this,d,a,b,c,e,f,g);b=!0;break;case xw:c=fw(this);b=c>>2&1;this.Ua=c&3;d=this.A[this.Ua];c=d.Gb;e=d.Za=b;f=1;g=fw(this);d.vb=128<>2&1,c=fw(this),d.Gb+=c-d.Sd,0>d.Gb&&(d.Gb=0),d.Gb>=d.rb&&(d.Gb=d.rb-1),d.Sd=c,d.sb=sw,d.Gb||(d.sb|=tw),hw(this),b=!0}0>>8);jw(a,(b.sb&Aw)>>>16);var k=0;if(e!=b.Gb||f!=b.Za)k=g=1;c&Bw&&(f^=k,d||(k=0));jw(a,e+k);jw(a,f);jw(a,g);jw(a,h)}function fw(a){var b=a.F[a.D];a.D++;return b}function hw(a){a.D=a.C=0}function jw(a,b){a.F[a.C++]=b}l.jl=function(a,b,c){void 0===b||0>b?this.se(a,c):c(-1,!1)};l.kl=function(a,b){return void 0!==b&&0<=b?Cw(a,b):-1}; -l.Cl=function(a,b){if(void 0!==b&&0<=b)a:if(a.sb)a=-1;else{a.$c[a.Ge++]=b;if(a.Ge==a.$c.length){a.Gb=a.$c[0];a.Za=a.$c[1];a.nb=a.$c[2];a.vb=128<Cw(a,a.Wi)){a=-1;break a}a.jg++}a.jg>=a.Td&&(b=-1);a=b}else a=-1;return a};l.se=function(a,b){var c=-1,d=null,e=0;if(!a.sb&&a.sa){do{if(a.eb&&(e=a.Sa,0<=(c=a.sa.read(a.eb,a.Sa++)))){d=a.eb;break}a.eb=a.sa.seek(a.Gb,a.Za,a.nb);if(!a.eb){a.sb=Dw|ow;break}a.Sa=0;Ew(a)}while(1)}b(c,!1,d,e)}; -function Cw(a,b){if(a.sb||!a.sa)return-1;do{if(a.eb&&a.sa.write(a.eb,a.Sa++,b))break;a.eb=a.sa.seek(a.Gb,a.Za,a.nb);if(!a.eb){a.sb=Fw|ow;b=-1;break}a.Sa=0;Ew(a)}while(1);return b}function Ew(a){a.nb++;a.nb>=a.Bf+1&&(a.nb=1,a.Za++,a.Za>=a.Af&&(a.Za=0,a.Gb++))}var Tv="Floppy Drive",$v=4,aw=8,cw=16,bw=64,Rv=128,gw=3,iw=4,lw=5,mw=6,rw=7,uw=8,ww=10,xw=13,yw=15,dw=31,Bw=128,Yv=0,nw=8,sw=32,ow=64,Sv=192,vw=255,pw=512,Dw=1024,Fw=8192,zw=65280,Aw=16711680,tw=268435456,kw=-16777216,Zv=128,Wv=0;aa={}; -var ew={3:{Id:3,Ud:0,name:aa.Wp},4:{Id:2,Ud:1,name:aa.Up},5:{Id:9,Ud:7,name:aa.$p},6:{Id:9,Ud:7,name:aa.Qp},7:{Id:2,Ud:0,name:aa.Sp},8:{Id:1,Ud:2,name:aa.Vp},10:{Id:2,Ud:7,name:aa.Rp},13:{Id:6,Ud:7,name:aa.Np},15:{Id:3,Ud:0,name:aa.Tp}},Lv={1009:Hv.prototype.rm,1012:Hv.prototype.tm,1013:Hv.prototype.qm,1015:Hv.prototype.sm},Mv={1010:Hv.prototype.Un,1013:Hv.prototype.Tn,1015:Hv.prototype.Sn}; -$a(function(){for(var a=zb(document,"pcx86","fdc"),b=0;b=this.C&&(this.fa&=~(bw|cw),this.D=this.C=0);return c}; +l.Un=function(a,b,c){t(this)&&w(this,a,b,c,"DATA["+this.C+"]");this.C=ew[a].Id){b=!1;this.D=0;a=fw(this);var d,e,f,g,h=a&dw;switch(h){case gw:fw(this);fw(this);hw(this);break;case iw:c=fw(this);this.Ua=c&3;d=this.A[this.Ua];hw(this);jw(this,(d.rb&kw)>>>24);break;case lw:case mw:c=fw(this);b=c>>2&1;this.Ua=c&3;d=this.A[this.Ua];d.Za=b;c=d.Gb=fw(this);e=fw(this);f=d.mb=fw(this);g=fw(this);d.ub=128<>2&1;this.Ua= +c&3;d=this.A[this.Ua];c=d.Gb;e=d.Za=b;f=d.mb=1;g=0;d.rb=Yv;d.sa&&(d.cb=d.sa.seek(d.Gb,d.Za,d.mb))?g=d.cb.length>>8:d.rb=nw|ow;qw(this,d,a,b,c,e,f,g);b=!0;break;case xw:c=fw(this);b=c>>2&1;this.Ua=c&3;d=this.A[this.Ua];c=d.Gb;e=d.Za=b;f=1;g=fw(this);d.ub=128<>2&1,c=fw(this),d.Gb+=c-d.Sd,0>d.Gb&&(d.Gb=0),d.Gb>=d.qb&&(d.Gb=d.qb-1),d.Sd=c,d.rb=sw,d.Gb||(d.rb|=tw),hw(this),b=!0}0>>8);jw(a,(b.rb&Aw)>>>16);var k=0;if(e!=b.Gb||f!=b.Za)k=g=1;c&Bw&&(f^=k,d||(k=0));jw(a,e+k);jw(a,f);jw(a,g);jw(a,h)}function fw(a){var b=a.F[a.D];a.D++;return b}function hw(a){a.D=a.C=0}function jw(a,b){a.F[a.C++]=b}l.kl=function(a,b,c){void 0===b||0>b?this.te(a,c):c(-1,!1)};l.ll=function(a,b){return void 0!==b&&0<=b?Cw(a,b):-1}; +l.Dl=function(a,b){if(void 0!==b&&0<=b)a:if(a.rb)a=-1;else{a.$c[a.He++]=b;if(a.He==a.$c.length){a.Gb=a.$c[0];a.Za=a.$c[1];a.mb=a.$c[2];a.ub=128<Cw(a,a.Xi)){a=-1;break a}a.kg++}a.kg>=a.Td&&(b=-1);a=b}else a=-1;return a};l.te=function(a,b){var c=-1,d=null,e=0;if(!a.rb&&a.sa){do{if(a.cb&&(e=a.Sa,0<=(c=a.sa.read(a.cb,a.Sa++)))){d=a.cb;break}a.cb=a.sa.seek(a.Gb,a.Za,a.mb);if(!a.cb){a.rb=Dw|ow;break}a.Sa=0;Ew(a)}while(1)}b(c,!1,d,e)}; +function Cw(a,b){if(a.rb||!a.sa)return-1;do{if(a.cb&&a.sa.write(a.cb,a.Sa++,b))break;a.cb=a.sa.seek(a.Gb,a.Za,a.mb);if(!a.cb){a.rb=Fw|ow;b=-1;break}a.Sa=0;Ew(a)}while(1);return b}function Ew(a){a.mb++;a.mb>=a.Cf+1&&(a.mb=1,a.Za++,a.Za>=a.Bf&&(a.Za=0,a.Gb++))}var Tv="Floppy Drive",$v=4,aw=8,cw=16,bw=64,Rv=128,gw=3,iw=4,lw=5,mw=6,rw=7,uw=8,ww=10,xw=13,yw=15,dw=31,Bw=128,Yv=0,nw=8,sw=32,ow=64,Sv=192,vw=255,pw=512,Dw=1024,Fw=8192,zw=65280,Aw=16711680,tw=268435456,kw=-16777216,Zv=128,Wv=0;aa={}; +var ew={3:{Id:3,Ud:0,name:aa.Xp},4:{Id:2,Ud:1,name:aa.Vp},5:{Id:9,Ud:7,name:aa.aq},6:{Id:9,Ud:7,name:aa.Rp},7:{Id:2,Ud:0,name:aa.Tp},8:{Id:1,Ud:2,name:aa.Wp},10:{Id:2,Ud:7,name:aa.Sp},13:{Id:6,Ud:7,name:aa.Op},15:{Id:3,Ud:0,name:aa.Up}},Lv={1009:Hv.prototype.sm,1012:Hv.prototype.um,1013:Hv.prototype.rm,1015:Hv.prototype.tm},Mv={1010:Hv.prototype.Vn,1013:Hv.prototype.Un,1015:Hv.prototype.Tn}; +$a(function(){for(var a=zb(document,"pcx86","fdc"),b=0;bk.sa.restore(g)&&(E=!1),E&&void 0!==k.Sa&&(k.eb=k.sa.seek(k.Od,k.Za,k.nb+k.ig)));E||(e=!1);null!=a.O&&1>=d&&(a.O|=(f.type&3)<<(1-d<< +a.A.length;d++){void 0===a.A[d]&&(a.A[d]={});var f=a.A[d],g=a,h=d,k=f,m=a.Z[d],p=b[d],v=c,u=0,E=!0;p||(p=[Rw,0,!1,Array(8)]);k.Ua=h;k.errorCode=p[u++];k.bl=p[u++];k.Pe=p[u++];k.Ee=p[u++];k.Fe=p[u++];k.Za=p[u++];k.kb=p[u++];k.Od=p[u++];k.mb=p[u++];k.Td=p[u++];k.ub=p[u++];k.jg=g.M?0:1;k.name=m.name;void 0===k.name&&(k.name=Sw);k.path=m.path;k.mode=m.mode||(k.path?"preload":"local");"demandro"!=k.mode&&"demandrw"!=k.mode||Xu(g)||(k.mode="local");k.type=m.type;if(void 0===k.type||void 0===Tw[g.G][k.type])k.type= +g.ma;m=Tw[g.G][k.type];k.$a=m[2]||17;k.Na=m[3]||512;if(v&&g.V){var m=g.V,K=k.type;if(m.A){var v=null,H=m.A[18];15k.sa.restore(g)&&(E=!1),E&&void 0!==k.Sa&&(k.cb=k.sa.seek(k.Od,k.Za,k.mb+k.jg)));E||(e=!1);null!=a.O&&1>=d&&(a.O|=(f.type&3)<<(1-d<< 1))}0<=a.Ua&&(a.B=a.A[a.Ua]);return e} -function Ow(a){var b=0,c=[];a.M?(c[b++]=a.I,c[b++]=a.va,c[b++]=a.J,c[b++]=a.ga,c[b++]=a.da,c[b++]=a.aa,c[b++]=a.Y,c[b++]=a.fa,c[b++]=a.ha,c[b++]=[a.L,a.Ua]):(c[b++]=a.O,c[b++]=a.fa,c[b++]=a.F,c[b++]=a.D,c[b++]=a.C,c[b++]=a.ta,c[b++]=a.qa,c[b++]=a.oa,c[b++]=a.N);for(var d=0,e=[],f=0;f=this.C&&(this.D=this.C=0,this.fa&=~(Xw|Yw|Zw));return c};l.ro=function(a,b,c){w(this,a,b,c,"DATA["+this.C+"]");this.C=a&&(this.fa|=Xw,this.fa&=~ax,bx(this))};l.Um=function(a,b){var c=this.fa;w(this,a,null,b,"STATUS",c);this.D=a.B.Na?(a.fa=dx,a.se(a.B,function(b){0<=b?(ex(a),a.V&&a.V.ca==wl&&(a.fa=0),a.fa=a.fa|Pw|fx|gx):(a.fa=hx,a.I=ix)},!1)):a.fa=Pw|fx));return d}l.nl=function(a,b){return cx(this,a,b)|cx(this,a,b)<<8}; -function jx(a,b,c,d){if(a.B&&a.B.vb>=a.B.Na)if(0>kx(a.B,c))a.fa=hx,a.I=ix;else if(1==a.B.Sa||a.B.Sa==a.B.Na)t(a,1048832)&&w(a,b,c,d,"DATA["+a.B.Sa+"]"),1=a.B.Na&&(a.fa|=gx))}l.An=function(a,b,c){jx(this,a,b&255,c);jx(this,a,b>>8&255,c)};l.$l=function(a,b){var c=this.I;w(this,a,null,b,"ERROR",c);return c};l.Fn=function(a,b,c){w(this,a,b,c,"WPREC");this.va=b};l.bm=function(a,b){var c=this.J;w(this,a,null,b,"SECCNT",c);return c}; -l.Dn=function(a,b,c){w(this,a,b,c,"SECCNT");this.J=b};l.cm=function(a,b){var c=this.ga;w(this,a,null,b,"SECNUM",c);return c};l.En=function(a,b,c){w(this,a,b,c,"SECNUM");this.ga=b};l.Yl=function(a,b){var c=this.da;w(this,a,null,b,"CYLLO",c);return c};l.zn=function(a,b,c){w(this,a,b,c,"CYLLO");this.da=b};l.Xl=function(a,b){var c=this.aa;w(this,a,null,b,"CYLHI",c);return c};l.yn=function(a,b,c){w(this,a,b,c,"CYLHI");this.aa=b};l.Zl=function(a,b){var c=this.Y;w(this,a,null,b,"DRVHD",c);return c}; -l.Bn=function(a,b,c){w(this,a,b,c,"DRVHD");this.Y=b;this.fa=this.A[this.Y&lx?1:0]?this.fa|Pw|fx:this.fa&~Pw};l.dm=function(a,b){var c=this.fa;w(this,a,null,b,"STATUS",c);this.fa&Pw&&(this.fa&=~dx);return c};l.xn=function(a,b,c){w(this,a,b,c,"COMMAND");this.ha=b;this.V&&eh(this.V,14);mx(this)};l.Cn=function(a,b,c){w(this,a,b,c,"FDR");this.L&nx&&!(b&nx)&&(this.I=ox);this.L=b}; -function mx(a){var b=!1,c=a.ha,d=a.Y&lx?1:0,e=a.Y&px,f=a.da|(a.aa&qx)<<8,g=a.ga,h=a.J||256;a.Ua=-1;a.B=null;a.I=rx;a.fa=Pw|fx;var k=a.A[d];k?(k.Od=f,k.Za=e,k.nb=g,k.vb=h*k.Na,c=c>=sx?c:c&tx,k.eb=null,k.Sa=0,k.errorCode=0,a.Ua=d,a.B=k):c=-1;switch(c&tx){case ux:b=!0;break;case vx:a.fa=dx;a.se(k,function(b){0<=b&&a.V?(ex(a),a.fa=Pw|fx|gx):(a.fa=hx,a.I=ix)},!1);break;case wx:a.fa=gx;break;case xx:b=!0;break;case yx:b=!0;break;case sx:a.I=ox;b=!0;break;case zx:k.kb=e+1,k.$a=h,b=!0}b&&ex(a)} +function Ow(a){var b=0,c=[];a.M?(c[b++]=a.I,c[b++]=a.va,c[b++]=a.J,c[b++]=a.ga,c[b++]=a.da,c[b++]=a.aa,c[b++]=a.Y,c[b++]=a.fa,c[b++]=a.ha,c[b++]=[a.L,a.Ua]):(c[b++]=a.O,c[b++]=a.fa,c[b++]=a.F,c[b++]=a.D,c[b++]=a.C,c[b++]=a.ta,c[b++]=a.qa,c[b++]=a.oa,c[b++]=a.N);for(var d=0,e=[],f=0;f=this.C&&(this.D=this.C=0,this.fa&=~(Xw|Yw|Zw));return c};l.so=function(a,b,c){w(this,a,b,c,"DATA["+this.C+"]");this.C=a&&(this.fa|=Xw,this.fa&=~ax,bx(this))};l.Vm=function(a,b){var c=this.fa;w(this,a,null,b,"STATUS",c);this.D=a.B.Na?(a.fa=dx,a.te(a.B,function(b){0<=b?(ex(a),a.V&&a.V.ca==wl&&(a.fa=0),a.fa=a.fa|Pw|fx|gx):(a.fa=hx,a.I=ix)},!1)):a.fa=Pw|fx));return d}l.ol=function(a,b){return cx(this,a,b)|cx(this,a,b)<<8}; +function jx(a,b,c,d){if(a.B&&a.B.ub>=a.B.Na)if(0>kx(a.B,c))a.fa=hx,a.I=ix;else if(1==a.B.Sa||a.B.Sa==a.B.Na)t(a,1048832)&&w(a,b,c,d,"DATA["+a.B.Sa+"]"),1=a.B.Na&&(a.fa|=gx))}l.Bn=function(a,b,c){jx(this,a,b&255,c);jx(this,a,b>>8&255,c)};l.am=function(a,b){var c=this.I;w(this,a,null,b,"ERROR",c);return c};l.Gn=function(a,b,c){w(this,a,b,c,"WPREC");this.va=b};l.cm=function(a,b){var c=this.J;w(this,a,null,b,"SECCNT",c);return c}; +l.En=function(a,b,c){w(this,a,b,c,"SECCNT");this.J=b};l.dm=function(a,b){var c=this.ga;w(this,a,null,b,"SECNUM",c);return c};l.Fn=function(a,b,c){w(this,a,b,c,"SECNUM");this.ga=b};l.Zl=function(a,b){var c=this.da;w(this,a,null,b,"CYLLO",c);return c};l.An=function(a,b,c){w(this,a,b,c,"CYLLO");this.da=b};l.Yl=function(a,b){var c=this.aa;w(this,a,null,b,"CYLHI",c);return c};l.zn=function(a,b,c){w(this,a,b,c,"CYLHI");this.aa=b};l.$l=function(a,b){var c=this.Y;w(this,a,null,b,"DRVHD",c);return c}; +l.Cn=function(a,b,c){w(this,a,b,c,"DRVHD");this.Y=b;this.fa=this.A[this.Y&lx?1:0]?this.fa|Pw|fx:this.fa&~Pw};l.em=function(a,b){var c=this.fa;w(this,a,null,b,"STATUS",c);this.fa&Pw&&(this.fa&=~dx);return c};l.yn=function(a,b,c){w(this,a,b,c,"COMMAND");this.ha=b;this.V&&eh(this.V,14);mx(this)};l.Dn=function(a,b,c){w(this,a,b,c,"FDR");this.L&nx&&!(b&nx)&&(this.I=ox);this.L=b}; +function mx(a){var b=!1,c=a.ha,d=a.Y&lx?1:0,e=a.Y&px,f=a.da|(a.aa&qx)<<8,g=a.ga,h=a.J||256;a.Ua=-1;a.B=null;a.I=rx;a.fa=Pw|fx;var k=a.A[d];k?(k.Od=f,k.Za=e,k.mb=g,k.ub=h*k.Na,c=c>=sx?c:c&tx,k.cb=null,k.Sa=0,k.errorCode=0,a.Ua=d,a.B=k):c=-1;switch(c&tx){case ux:b=!0;break;case vx:a.fa=dx;a.te(k,function(b){0<=b&&a.V?(ex(a),a.fa=Pw|fx|gx):(a.fa=hx,a.I=ix)},!1);break;case wx:a.fa=gx;break;case xx:b=!0;break;case yx:b=!0;break;case sx:a.I=ox;b=!0;break;case zx:k.kb=e+1,k.$a=h,b=!0}b&&ex(a)} function ex(a){!a.V||a.L&Ax||gh(a.V,14,120)} -function bx(a){a.D=0;var b=Bx(a),c=Bx(a),d=c&32,e=d>>5,f=c&31,g=Bx(a),h=Bx(a),k=g<<2&768|h,m=g&63,p=Bx(a),v=Bx(a),u=a.A[e];u&&(u.Od=k,u.Za=f,u.nb=m,u.vb=p*u.Na);switch(b){case Cx:Dx(a,u?u.errorCode:Ex);Fx(a,c);Fx(a,g);Fx(a,h);Fx(a,Gx|d);b=-1;break;case $w:for(c=0;0<=(b=Bx(a));)u&&cb?this.se(a,c):c(-1,!1)};l.ml=function(a,b){return void 0!==b&&0<=b?kx(a,b):-1}; -l.Dl=function(a,b){void 0!==b&&0<=b?(a.Sakx(a,a.Wi)){a=-1;break a}a.jg++}a.jg>=a.Td&&(b=-1);a=b}else a=-1;return a}; -function Ox(a,b,c){b.errorCode=Ex;if(b.sa&&(b.eb=null,a.V)){b.errorCode=Rw;In(a.V,3,a,"dmaRead",b);zn(a.V,3,function(a){a||b.errorCode!=Rw||(b.errorCode=Ex);c(b.errorCode?Hx:Gx)});return}c(b.errorCode?Hx:Gx)}function Qx(a,b,c){b.errorCode=Ex;if(b.sa&&(b.eb=null,a.V)){b.errorCode=Rw;In(a.V,3,a,"dmaWrite",b);zn(a.V,3,function(a){a||(b.errorCode==Rw&&(b.errorCode=Ex),b.errorCode==Tx&&(b.errorCode=Rw));c(b.errorCode?Hx:Gx)});return}c(b.errorCode?Hx:Gx)} -function Sx(a,b,c){b.errorCode=Ex;b.Ee&&b.Ee.length==b.vb||(b.Ee=Array(b.vb));b.Sa=0;a.V?(b.errorCode=Rw,In(a.V,3,a,"dmaWriteBuffer",b),zn(a.V,3,function(a){a||b.errorCode!=Rw||(b.errorCode=Ex);c(b.errorCode?Hx:Gx)})):c(b.errorCode?Hx:Gx)} -l.se=function(a,b,c){var d=-1,e=null,f=0;if(a.errorCode)return b&&b(d,!1,e,f),d;var g=!1!==c?1:0;if(a.eb&&(f=a.Sa,d=a.sa.read(a.eb,a.Sa),a.Sa+=g,0<=d))return e=a.eb,b&&b(d,!1,e,f),d;if(b){if(a.sa)return a.sa.seek(a.Od,a.Za,a.nb+a.ig,!1,function(c,k){(a.eb=c)?(e=c,f=a.Sa=0,Ux(a),d=a.sa.read(a.eb,a.Sa),a.Sa+=g):a.errorCode=Tx;b(d,k,e,f)}),d;a.errorCode=Tx;b(d,!1,e,f)}return d}; -function kx(a,b){if(a.errorCode)return-1;do{if(a.eb&&a.sa.write(a.eb,a.Sa++,b))break;a.sa&&a.sa.seek(a.Od,a.Za,a.nb+a.ig,!0,function(b){a.eb=b});if(!a.eb){a.errorCode=Tx;b=-1;break}a.Sa=0;Ux(a)}while(1);return b}function Ux(a){a.nb++;var b=1-a.ig;a.nb>=a.$a+b&&(a.nb=b,a.Za++,a.Za>=a.kb&&(a.Za=0,a.Od++))}l.Vm=function(){var a=this.H.L&255;!(this.H.D>>8)&&128>8||!this.V)||(a=!(this.V.hc[0].od&64));return a?!0:!1}; +function bx(a){a.D=0;var b=Bx(a),c=Bx(a),d=c&32,e=d>>5,f=c&31,g=Bx(a),h=Bx(a),k=g<<2&768|h,m=g&63,p=Bx(a),v=Bx(a),u=a.A[e];u&&(u.Od=k,u.Za=f,u.mb=m,u.ub=p*u.Na);switch(b){case Cx:Dx(a,u?u.errorCode:Ex);Fx(a,c);Fx(a,g);Fx(a,h);Fx(a,Gx|d);b=-1;break;case $w:for(c=0;0<=(b=Bx(a));)u&&cb?this.te(a,c):c(-1,!1)};l.nl=function(a,b){return void 0!==b&&0<=b?kx(a,b):-1}; +l.El=function(a,b){void 0!==b&&0<=b?(a.Sakx(a,a.Xi)){a=-1;break a}a.kg++}a.kg>=a.Td&&(b=-1);a=b}else a=-1;return a}; +function Ox(a,b,c){b.errorCode=Ex;if(b.sa&&(b.cb=null,a.V)){b.errorCode=Rw;In(a.V,3,a,"dmaRead",b);zn(a.V,3,function(a){a||b.errorCode!=Rw||(b.errorCode=Ex);c(b.errorCode?Hx:Gx)});return}c(b.errorCode?Hx:Gx)}function Qx(a,b,c){b.errorCode=Ex;if(b.sa&&(b.cb=null,a.V)){b.errorCode=Rw;In(a.V,3,a,"dmaWrite",b);zn(a.V,3,function(a){a||(b.errorCode==Rw&&(b.errorCode=Ex),b.errorCode==Tx&&(b.errorCode=Rw));c(b.errorCode?Hx:Gx)});return}c(b.errorCode?Hx:Gx)} +function Sx(a,b,c){b.errorCode=Ex;b.Fe&&b.Fe.length==b.ub||(b.Fe=Array(b.ub));b.Sa=0;a.V?(b.errorCode=Rw,In(a.V,3,a,"dmaWriteBuffer",b),zn(a.V,3,function(a){a||b.errorCode!=Rw||(b.errorCode=Ex);c(b.errorCode?Hx:Gx)})):c(b.errorCode?Hx:Gx)} +l.te=function(a,b,c){var d=-1,e=null,f=0;if(a.errorCode)return b&&b(d,!1,e,f),d;var g=!1!==c?1:0;if(a.cb&&(f=a.Sa,d=a.sa.read(a.cb,a.Sa),a.Sa+=g,0<=d))return e=a.cb,b&&b(d,!1,e,f),d;if(b){if(a.sa)return a.sa.seek(a.Od,a.Za,a.mb+a.jg,!1,function(c,k){(a.cb=c)?(e=c,f=a.Sa=0,Ux(a),d=a.sa.read(a.cb,a.Sa),a.Sa+=g):a.errorCode=Tx;b(d,k,e,f)}),d;a.errorCode=Tx;b(d,!1,e,f)}return d}; +function kx(a,b){if(a.errorCode)return-1;do{if(a.cb&&a.sa.write(a.cb,a.Sa++,b))break;a.sa&&a.sa.seek(a.Od,a.Za,a.mb+a.jg,!0,function(b){a.cb=b});if(!a.cb){a.errorCode=Tx;b=-1;break}a.Sa=0;Ux(a)}while(1);return b}function Ux(a){a.mb++;var b=1-a.jg;a.mb>=a.$a+b&&(a.mb=b,a.Za++,a.Za>=a.kb&&(a.Za=0,a.Od++))}l.Wm=function(){var a=this.H.L&255;!(this.H.D>>8)&&128>8||!this.V)||(a=!(this.V.hc[0].od&64));return a?!0:!1}; var Sw="Hard Drive",Vw=["XTC","ATC","COMPAQ"],Tw=[{0:[306,2],1:[375,8],2:[306,6],3:[306,4]},{1:[306,4],2:[615,4],3:[615,6],4:[940,8],5:[940,6],6:[615,4],7:[462,8],8:[733,5],9:[900,15],10:[820,3],11:[855,5],12:[855,7],13:[306,8],14:[733,7],16:[612,4],17:[977,5],18:[977,7],19:[1024,7],20:[733,5],21:[733,7],22:[733,5],23:[306,4]},{1:[306,4],2:[615,4],3:[615,6],4:[1023,8],5:[940,6],6:[697,5],7:[462,8],8:[925,5],9:[900,15],10:[980,5],11:[925,7],12:[925,9],13:[612,8],14:[980,4],16:[612,4],17:[980,5],18:[966, 6],19:[1023,8],20:[733,5],21:[733,7],22:[524,4,40],23:[924,8],24:[966,14],25:[966,16],26:[1023,14],27:[832,6,33],28:[1222,15,34],29:[1240,7,34],30:[615,4,25],31:[615,8,25],32:[905,9,25],33:[832,8,33],34:[966,7,34],35:[966,8,34],36:[966,9,34],37:[966,5,34],38:[612,16,63],39:[1023,11,33],40:[1023,15,34],41:[1630,15,52],42:[1023,16,63],43:[805,4,26],44:[805,2,26],45:[748,8,33],46:[748,6,33],47:[966,5,25]}],Lw=496,ox=1,rx=0,ix=16,qx=3,px=15,lx=16,hx=1,gx=8,fx=16,Pw=64,dx=128,ux=16,vx=32,wx=48,xx=64,yx= -112,sx=144,zx=145,tx=240,Ax=2,nx=4,Gx=0,Hx=2,Kx=0,Lx=1,Cx=3,Mx=5,Nx=8,Px=10,$w=12,Rx=15,Ix=224,Jx=228,Rw=0,Ex=4,Tx=20,Qw=0,ax=1,Xw=2,Yw=4,Zw=8,Ww=32,Iw={800:Gw.prototype.Tm,801:Gw.prototype.Um,802:Gw.prototype.Sm},Hw={496:Gw.prototype.nl,497:Gw.prototype.$l,498:Gw.prototype.bm,499:Gw.prototype.cm,500:Gw.prototype.Yl,501:Gw.prototype.Xl,502:Gw.prototype.Zl,503:Gw.prototype.dm},Kw={800:Gw.prototype.ro,801:Gw.prototype.uo,802:Gw.prototype.to,803:Gw.prototype.so,807:Gw.prototype.hi,811:Gw.prototype.hi, -815:Gw.prototype.hi},Jw={496:Gw.prototype.An,497:Gw.prototype.Fn,498:Gw.prototype.Dn,499:Gw.prototype.En,500:Gw.prototype.zn,501:Gw.prototype.yn,502:Gw.prototype.Bn,503:Gw.prototype.xn,1014:Gw.prototype.Cn};$a(function(){for(var a=zb(document,"pcx86","hdc"),b=0;bthis.A&&this.C.length&&(this.A=0);if(0>this.A||a!=this.C[this.A])this.C.splice(0,0,a),this.A=0;this.A--}else this.da?a="end":a=this.C[this.A+1];b=[];if(a){a=a.replace(/""/g,"'");var d=0,e=null;c=c||";";for(var f=0;f<=a.length;f++){var g=a.charAt(f);if('"'==g||"'"==g)e?g==e&&(e=null):e=g;else if(g==c&&!e||!g)b.push(Ba(a.substring(d,f))),d=f+1}}return b}; +112,sx=144,zx=145,tx=240,Ax=2,nx=4,Gx=0,Hx=2,Kx=0,Lx=1,Cx=3,Mx=5,Nx=8,Px=10,$w=12,Rx=15,Ix=224,Jx=228,Rw=0,Ex=4,Tx=20,Qw=0,ax=1,Xw=2,Yw=4,Zw=8,Ww=32,Iw={800:Gw.prototype.Um,801:Gw.prototype.Vm,802:Gw.prototype.Tm},Hw={496:Gw.prototype.ol,497:Gw.prototype.am,498:Gw.prototype.cm,499:Gw.prototype.dm,500:Gw.prototype.Zl,501:Gw.prototype.Yl,502:Gw.prototype.$l,503:Gw.prototype.em},Kw={800:Gw.prototype.so,801:Gw.prototype.vo,802:Gw.prototype.uo,803:Gw.prototype.to,807:Gw.prototype.ii,811:Gw.prototype.ii, +815:Gw.prototype.ii},Jw={496:Gw.prototype.Bn,497:Gw.prototype.Gn,498:Gw.prototype.En,499:Gw.prototype.Fn,500:Gw.prototype.An,501:Gw.prototype.zn,502:Gw.prototype.Cn,503:Gw.prototype.yn,1014:Gw.prototype.Dn};$a(function(){for(var a=zb(document,"pcx86","hdc"),b=0;bthis.A&&this.C.length&&(this.A=0);if(0>this.A||a!=this.C[this.A])this.C.splice(0,0,a),this.A=0;this.A--}else this.ga?a="end":a=this.C[this.A+1];b=[];if(a){a=a.replace(/""/g,"'");var d=0,e=null;c=c||";";for(var f=0;f<=a.length;f++){var g=a.charAt(f);if('"'==g||"'"==g)e?g==e&&(e=null):e=g;else if(g==c&&!e||!g)b.push(Ba(a.substring(d,f))),d=f+1}}return b}; function Wx(a,b,c){var d=a;b=b||32;if(c)if(32==b)d=a>>>0;else if(32>b)d=a&(1<a||a>=b)d=a%b,0>d&&(d+=b)}else 32>=b?d=a|0:(b=Math.pow(2,b-1),a<-b?(a<2*-b&&(d=a%(2*b)),d+=2*b):d>=b&&(a>=2*b&&(d=a%(2*b)),d-=2*b));a!=d&&(a=d);return a} function Xx(a,b,c){for(c=void 0===c?-1:c;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e,f=a.pop();e=a.pop();switch(d){case "*":e*=f;break;case "/":if(!f)return!1;e=Math.trunc(e/f);break;case "^/":if(!f)return!1;e%=f;break;case "+":e+=f;break;case "-":e-=f;break;case "<<":e<<=f;break;case ">>":e>>=f;break;case ">>>":e>>>=f;break;case "<":e=e":e=e>f?1:0;break;case ">=":e=e>=f?1:0;break;case "==":e=e==f?1:0;break;case "!=":e=e!=f?1:0;break;case "&":e&= f;break;case "!":case "|":e|=f;break;case "^!":e|=f;break;case "&&":e=e&&f?1:0;break;case "||":e=e||f?1:0;break;case "_":case "^_":"^_"==d&&(f=35-(f&255));f&&(e=Wx(e,0,!0),e=0=|>>>|>>|>|<=|<<|<|-|\+|\^\/|\/|\*| )/);d=Yx(a,b,0,b.length,a.F,c);void 0!==d&&!1===c&&ey(a,null,d)}return d} -function fy(a,b){var c,d=a.ha[0],e=a.ha[1];c="("==d||"{"==d||"["==d?"\\":"";for(var f="["==d?"\\":"",f=new RegExp(c+d+"([^"+f+d+f+e+"]+)"+c+e);c=b.match(f);){var g=dy(a,c[1]);if(void 0===g)return;b=b.replace(d+c[1]+e,null!=g?cy(a,g):"undefined")}if(a.Aa.length)for(d=a.Aa[0],e=a.Aa[1],c="("==d||"{"==d||"["==d?"\\":"",f="["==d?"\\":"",f=new RegExp(c+d+"([^"+f+d+f+e+"]+)"+c+e);c=b.match(f);)b=a.Pk(b,c[1]);for(;d=b.match(/\$([a-z]+)/i);){e=null;switch(d[1].toLowerCase()){case "ops":e=a.Y-a.la}if(null== -e)break;b=b.replace(d[0],e.toString())}return b}function Zx(a,b,c,d,e){e=void 0===e?0:e;var f;if(null!=b)if(f=a.gh(b),0<=f?f=a.hh(f):(f=a.ga[b],null==f&&(f=oa(b,1>>=2}f=Wx(f)}else d||a.P("invalid "+(c?c:"value")+": "+b);else d||a.P("missing "+(c||"value"));return f} -function ey(a,b,c){var d,e=!1;void 0!==c&&(e=!0,d=8==a.F?cy(a,c,32,8,1)+" "+c+".":cy(a,c,32,16,1)+" "+cy(a,c,32,8,1)+" "+cy(a,c,32,2,8)+" "+c+".",32<=c&&127>c&&(d+=" '"+String.fromCharCode(c)+"'"));a.P((null!=b?b+": ":"")+d);return e}function gy(a,b){if(b)return ey(a,b,a.ga[b]);var c=0;for(b in a.ga)ey(a,b,a.ga[b]),c++;return 0=|>>>|>>|>|<=|<<|<|-|\+|\^\/|\/|\*| )/);d=Yx(a,b,0,b.length,a.F,c);void 0!==d&&!1===c&&ey(a,null,d)}return d} +function fy(a,b){var c,d=a.ha[0],e=a.ha[1];c="("==d||"{"==d||"["==d?"\\":"";for(var f="["==d?"\\":"",f=new RegExp(c+d+"([^"+f+d+f+e+"]+)"+c+e);c=b.match(f);){var g=dy(a,c[1]);if(void 0===g)return;b=b.replace(d+c[1]+e,null!=g?cy(a,g):"undefined")}if(a.Aa.length)for(d=a.Aa[0],e=a.Aa[1],c="("==d||"{"==d||"["==d?"\\":"",f="["==d?"\\":"",f=new RegExp(c+d+"([^"+f+d+f+e+"]+)"+c+e);c=b.match(f);)b=a.Qk(b,c[1]);for(;d=b.match(/\$([a-z]+)/i);){e=null;switch(d[1].toLowerCase()){case "ops":e=a.Z-a.la}if(null== +e)break;b=b.replace(d[0],e.toString())}return b} +function Zx(a,b,c,d,e){e=void 0===e?0:e;var f;if(null!=b){f=a.hh(b);if(0<=f)f=a.ih(f);else if(f=a.Y[b]&&a.Y[b].value,null!=f){var g=a.Y[b]&&a.Y[b].ae;g&&(a.ae?(d||(a.P(b+" has too many undefined values ("+g+","+a.ae+")"),d=!0),f=void 0):a.ae=g)}else f=oa(b,1>>=2}f=Wx(f)}else d||a.P("invalid "+(c?c:"value")+": "+b)}else d||a.P("missing "+(c||"value"));return f} +function ey(a,b,c){var d,e=!1;void 0!==c&&(e=!0,d=8==a.F?cy(a,c,32,8,1)+" "+c+".":cy(a,c,32,16,1)+" "+cy(a,c,32,8,1)+" "+cy(a,c,32,2,8)+" "+c+".",32<=c&&127>c&&(d+=" '"+String.fromCharCode(c)+"'"));a.P((null!=b?b+": ":"")+d);return e}function gy(a,b){if(b)return ey(a,b,a.Y[b].value);var c=0;for(b in a.Y)ey(a,b,a.Y[b].value),c++;return 0=Math.abs(b)?5:11;b=pa(b,10,a);break;default:b=q(b,0>2:0,!!e)}0>c?c=b.replace(/^0+([0-9A-F]+)$/i,"$1"):c=b;return c} var ay={"||":5,"&&":6,"!":7,"|":7,"^!":8,"&":9,"!=":10,"==":10,">=":11,">":11,"<=":11,"<":11,">>>":12,">>":12,"<<":12,"-":13,"+":13,"^/":14,"/":14,"*":14,_:19,"^_":19,"{":20,"}":20},$x={"||":5,"&&":6,"!=":10,"==":10,">=":11,">":11,"<=":11,"<":11,">>>":12,">>":12,"<<":12,"-":13,"+":13,"^/":14,"/":14,"*":14,"!":15,"|":15,"^!":15,"&":15,_:19,"^_":19,"{":20,"}":20}; -function hy(a){Vx.call(this,a);this.ta=4;this.ma=5;this.wa=1048575;this.L=iy(this);this.Ta=iy(this);this.aa=iy(this);this.D=[];this.B=this.Z=this.N=[];jy(this);this.xa=0;ky(this);this.Ba={};ly(this,a.messages);this.Ga=a.commands;var b=this;window?void 0===window.pcx86&&(window.pcx86=function(a){return my(b,a)}):void 0===global.pcx86&&(global.pcx86=function(a){return my(b,a)})}ba(hy,Vx);l=hy.prototype; -l.uc=function(a,b,c,d){this.ka=b;this.H=c;this.pa=a;this.hb=Wb(a,"FDC");this.Xa=Wb(a,"HDC");this.Tc=Wb(a,"FPU");this.G=Wb(a,"Mouse");(a=yd(a,"messages"))&&ly(this,a);this.ma=b.I>>2;this.wa=b.N;this.ab=new Ud(this.H,7,"DBG");this.qa=ny;80186<=this.H.ca&&(this.qa=ny.slice(),this.qa[15]=oy,80286<=this.H.ca&&(this.qa[15]=py,80386<=this.H.ca&&(this.ta=8)));zl(this,64,function(a){qy(d,d.H.sc,a[0])});zl(this,4,function(a){if(a=a[0]){var b=Zx(d,a);if(void 0===b)d.P("invalid selector: "+a);else if(a=ry(d, -b,sy),d.P("dumpSel("+sa(a?a.U:b)+"): %"+q(a?a.Lb:null,d.ma)),a){var c,b=!1;if(a.type&4096)a.type&2048?(c="code"+(a.type&512?",readable":",execonly"),a.type&1024&&(c+=",conforming")):(c="data"+(a.type&512?",writable":",readonly"),a.type&1024&&(c+=",expdown")),a.type&256&&(c+=",accessed");else{var e=ty[a.type];e&&(c=e[0],b=e[1])}!c||a.mb&32768||(c+=",not present");d.P((b?"seg="+sa(a.ua&65535)+" off="+sa(a.Ka):"base="+q(a.ua,d.ma)+" limit="+uy(a.Ka))+" type="+r(a.type>>8)+" ("+c+") ext="+sa(a.ext&-65296)+ +function hy(a){Vx.call(this,a);this.ta=4;this.ma=5;this.wa=1048575;this.L=iy(this);this.Ma=iy(this);this.da=iy(this);this.D=[];this.B=this.aa=this.N=[];jy(this);this.xa=0;ky(this);this.Ba={};ly(this,a.messages);this.Ga=a.commands;var b=this;window?void 0===window.pcx86&&(window.pcx86=function(a){return my(b,a)}):void 0===global.pcx86&&(global.pcx86=function(a){return my(b,a)})}ba(hy,Vx);l=hy.prototype; +l.uc=function(a,b,c,d){this.ka=b;this.H=c;this.pa=a;this.eb=Wb(a,"FDC");this.Ta=Wb(a,"HDC");this.Tc=Wb(a,"FPU");this.G=Wb(a,"Mouse");(a=yd(a,"messages"))&&ly(this,a);this.ma=b.I>>2;this.wa=b.N;this.Ya=new Ud(this.H,7,"DBG");this.qa=ny;80186<=this.H.ca&&(this.qa=ny.slice(),this.qa[15]=oy,80286<=this.H.ca&&(this.qa[15]=py,80386<=this.H.ca&&(this.ta=8)));zl(this,64,function(a){qy(d,d.H.sc,a[0])});zl(this,4,function(a){if(a=a[0]){var b=Zx(d,a);if(void 0===b)d.P("invalid selector: "+a);else if(a=ry(d, +b,sy),d.P("dumpSel("+sa(a?a.U:b)+"): %"+q(a?a.Lb:null,d.ma)),a){var c,b=!1;if(a.type&4096)a.type&2048?(c="code"+(a.type&512?",readable":",execonly"),a.type&1024&&(c+=",conforming")):(c="data"+(a.type&512?",writable":",readonly"),a.type&1024&&(c+=",expdown")),a.type&256&&(c+=",accessed");else{var e=ty[a.type];e&&(c=e[0],b=e[1])}!c||a.lb&32768||(c+=",not present");d.P((b?"seg="+sa(a.ua&65535)+" off="+sa(a.Ka):"base="+q(a.ua,d.ma)+" limit="+uy(a.Ka))+" type="+r(a.type>>8)+" ("+c+") ext="+sa(a.ext&-65296)+ " dpl="+r(a.qc))}}else d.P("no selector")});zl(this,134217728,function(a){var b;(a=a[0])&&(b=Zx(d,a));if(void 0===b)d.P("invalid MCB");else for(d.P("dumpMCB("+sa(b)+")");b;){a=iy(d,0,b);var c=d.Ia(a,1),e=d.Yc(a,2),k=d.Yc(a,5);if(77!=c&&90!=c)break;d.P(vy(0,b)+": '"+String.fromCharCode(c)+"' PID="+sa(e)+" LEN="+sa(k)+' "'+wy(d,a,8)+'"');b+=1+k}});zl(this,128,function(a){qy(d,d.H.aa,a[0],d.H.aa!==d.H.sc)});zl(this,8,function(a){a:{if(a=a[0]){var b=Zx(d,a);if(void 0===b){d.P("invalid task selector: "+ a);break a}a=ry(d,b,sy)}else a=d.H.la;d.P("dumpTSS("+sa(a?a.U:b)+"): %"+q(a?a.ua:null,d.ma));if(a){var b="",c=a.type&-513,e=256==c?4:8,k=256==c?xy:yy,m,p,v,u;for(u in k)m=k[u],p=a.ua+m,v=xg(d.H,p,2),2304==c&&(v|=xg(d.H,p+2,2)<<16),b&&(b+="\n"),b+=sa(m)+" "+Aa(u+":",11)+q(v,e);if(2304==c)for(u=0,m=v>>>16;mu;){p=a.ua+m;v=xg(d.H,p,2);p=2;c="";if(!p||4>=8;b+="\n"+sa(m)+" ports "+sa(u)+"-"+sa(u+15)+": "+(""+c);u+=16;m+=2}d.P(b)}}});this.I= -null;this.Ma=0;this.Ca=!1;Rf(this.H,48,this.Ym.bind(this));Rf(this.H,65,this.Zm.bind(this));this.V=null;Rf(this.H,104,this.$m.bind(this));Ib(this)};function zy(a,b,c,d,e,f){b=wy(a,b);var g=ry(a,d),g=g?g.Ka+1:0,h=(e?"_CODE":"_DATA")+q(c,2);f&&t(a,128)&&a.message(b+" "+(e?"code":"data")+"("+q(c,4)+")=#"+q(d,4)+" len "+q(g));e=Ay(a,b,c);e[b+h]=0;$p(a,b,c,d,0,null,g,e)} +null;this.Ha=0;this.Ca=!1;Rf(this.H,48,this.Zm.bind(this));Rf(this.H,65,this.$m.bind(this));this.V=null;Rf(this.H,104,this.an.bind(this));Ib(this)};function zy(a,b,c,d,e,f){b=wy(a,b);var g=ry(a,d),g=g?g.Ka+1:0,h=(e?"_CODE":"_DATA")+q(c,2);f&&t(a,128)&&a.message(b+" "+(e?"code":"data")+"("+q(c,4)+")=#"+q(d,4)+" len "+q(g));e=Ay(a,b,c);e[b+h]=0;$p(a,b,c,d,0,null,g,e)} function By(a,b,c,d){var e=a.Yc(b,2),f=a.Yc(b,2),g=Cy(a,b,4),h=Cy(a,b,4),k=iy(a,Cy(a,b,4),a.Yc(b,2));b=iy(a,Cy(a,b,4),a.Yc(b,2));b=wy(a,b).toUpperCase();var k=wy(a,k).toUpperCase(),m=(c?"_CODE":"_DATA")+q(e,2);d&&t(a,128)&&a.message((b==k?"":b+"!")+k+" "+(c?"code":"data")+"("+q(e,4)+")="+q(f,4)+":"+q(g)+" len "+q(h));c=Ay(a,k,e);c[k+m]=g;$p(a,k,e,f,g,null,h,c)}function Dy(a,b,c){c=wy(a,c).toUpperCase();Ey(a,c,b)} -l.Ym=function(){var a=this.H;if(null!=this.I&&2752554==a.D){var b=a.L&65535,c=a.K&65535,d=iy(this,z(a)+12,a.Y.U);switch(Cy(this,d)){case 336:By(this,iy(this,a.G,b),!c,!!this.I)}}return!0}; -l.Zm=function(a){var b=this.H,c=b.D&65535,d=b.G&65535,e=b.I&65535,f=b.L&65535,g=b.K&65535,h=b.J&65535,k=b.oa.U;if(null==this.I)return 79==c&&Sf(b,a,function(a){return function(){62342!=(b.D&65535)?(b.D=b.D&-65536|62342,Lb(a,"INT 0x41 handling enabled",128),a.I=!0):(Lb(a,"INT 0x41 monitoring enabled",128),a.I=!1)}}(this)),!0;switch(c){case 79:this.I&&(b.D=b.D&-65536|62342,Lb(this,"INT 0x41 handling enabled",128));break;case 80:zy(this,iy(this,h,k),d+1,e,!(g&1),!!this.I);break;case 82:Ey(this,null, -d);break;case 127:this.I&&(b.D=b.D&-65536|(this.Ca?0:1));break;case 131:this.I&&(a=iy(this,b.L,e),this.Ma++?(this.P("TRAPFAULT failed"),Fy(this,this.B,a,!0,!0),this.Ma=0,this.Jb()):(this.P("INT 0x41 TRAPFAULT: fault="+sa(d)+" error="+q(b.K,8,!0)+" addr="+Gy(a)),this.Gd(this.B,a,!0),ky(this,!0)));break;case 141:this.I&&(b.D=b.D&-65536|1);break;case 336:By(this,iy(this,b.G,f),!g,!!this.I);break;case 338:Dy(this,d,iy(this,b.J,f))}this.Ca=!1;return!this.I}; -l.$m=function(a){var b=this.H,c=b.D&255,d=b.D>>8&255,e=b.G&65535,f=b.I&65535,g=b.L&65535,h=b.J&65535,k=b.oa.U;if(null==this.V){if(67==d){if(609437257==b.ia((b.Z.U<<4)+10)||1111835735==b.ia((b.Z.U<<4)+95))return!0;Sf(b,a,function(a){return function(){62342!=(b.D&65535)?(b.D=b.D&-65536|62342,Lb(a,"INT 0x68 handling enabled",128),a.I=a.V=!0):(Lb(a,"INT 0x68 monitoring enabled",128),a.V=!1)}}(this))}return!0}switch(d){case 67:this.V&&(b.D=b.D&-65536|62342);break;case 68:this.V&&(a=Wd(b.Z,this.yl.bind(this)))&& -(b.J=a[0],ne(b,a[1]));break;case 72:Ey(this,null,e);break;case 80:32==c?zy(this,iy(this,h,k),0,f,!0,!!this.V):128>c?zy(this,iy(this,h,k),e+1,c&64?g:f,!(c&1),!!this.V):By(this,iy(this,h,k),!(c&1),!!this.V),this.V&&(b.D=b.D&-256|1)}return!this.V};l.yl=function(){var a=this.H;5==(a.D&255)&&(a.I=a.K=0,a.D=a.D&-256|1);return!1}; +l.Zm=function(){var a=this.H;if(null!=this.I&&2752554==a.D){var b=a.L&65535,c=a.K&65535,d=iy(this,z(a)+12,a.Y.U);switch(Cy(this,d)){case 336:By(this,iy(this,a.G,b),!c,!!this.I)}}return!0}; +l.$m=function(a){var b=this.H,c=b.D&65535,d=b.G&65535,e=b.I&65535,f=b.L&65535,g=b.K&65535,h=b.J&65535,k=b.oa.U;if(null==this.I)return 79==c&&Sf(b,a,function(a){return function(){62342!=(b.D&65535)?(b.D=b.D&-65536|62342,Lb(a,"INT 0x41 handling enabled",128),a.I=!0):(Lb(a,"INT 0x41 monitoring enabled",128),a.I=!1)}}(this)),!0;switch(c){case 79:this.I&&(b.D=b.D&-65536|62342,Lb(this,"INT 0x41 handling enabled",128));break;case 80:zy(this,iy(this,h,k),d+1,e,!(g&1),!!this.I);break;case 82:Ey(this,null, +d);break;case 127:this.I&&(b.D=b.D&-65536|(this.Ca?0:1));break;case 131:this.I&&(a=iy(this,b.L,e),this.Ha++?(this.P("TRAPFAULT failed"),Fy(this,this.B,a,!0,!0),this.Ha=0,this.Jb()):(this.P("INT 0x41 TRAPFAULT: fault="+sa(d)+" error="+q(b.K,8,!0)+" addr="+Gy(a)),this.Gd(this.B,a,!0),ky(this,!0)));break;case 141:this.I&&(b.D=b.D&-65536|1);break;case 336:By(this,iy(this,b.G,f),!g,!!this.I);break;case 338:Dy(this,d,iy(this,b.J,f))}this.Ca=!1;return!this.I}; +l.an=function(a){var b=this.H,c=b.D&255,d=b.D>>8&255,e=b.G&65535,f=b.I&65535,g=b.L&65535,h=b.J&65535,k=b.oa.U;if(null==this.V){if(67==d){if(609437257==b.ia((b.Z.U<<4)+10)||1111835735==b.ia((b.Z.U<<4)+95))return!0;Sf(b,a,function(a){return function(){62342!=(b.D&65535)?(b.D=b.D&-65536|62342,Lb(a,"INT 0x68 handling enabled",128),a.I=a.V=!0):(Lb(a,"INT 0x68 monitoring enabled",128),a.V=!1)}}(this))}return!0}switch(d){case 67:this.V&&(b.D=b.D&-65536|62342);break;case 68:this.V&&(a=Wd(b.Z,this.zl.bind(this)))&& +(b.J=a[0],ne(b,a[1]));break;case 72:Ey(this,null,e);break;case 80:32==c?zy(this,iy(this,h,k),0,f,!0,!!this.V):128>c?zy(this,iy(this,h,k),e+1,c&64?g:f,!(c&1),!!this.V):By(this,iy(this,h,k),!(c&1),!!this.V),this.V&&(b.D=b.D&-256|1)}return!this.V};l.zl=function(){var a=this.H;5==(a.D&255)&&(a.I=a.K=0,a.D=a.D&-256|1);return!1}; l.Cb=function(a,b,c){var d=this;switch(b){case "debugInput":return this.va=this.na[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",my(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?(b=null,d.A>>0)+1;a.mb=f;a.type=g;a.ext=k;a.Lb=d;Vd(a,!0,!0,!1)}}return a}l.Sb=function(a,b,c){var d=a&&a.ya;if(null==d&&(d=-1,a)){var e=ry(this,a.U,a.type);e&&(b=a.Ja||0,c=c||1,d=e=-1===e.Lb||e.Oc&&(b>>>0)+c>e.Nb||!e.Oc&&(b>>>0)+c<=e.Nb?e.ua+b|0:-1,a.ya=d)}return d};l.Ia=function(a,b){var c=255,d=this.Sb(a,!1,1);-1!==d&&(c=xg(this.H,d,1,a.type==Ky)|0,b&&Ly(this,a,b));return c}; -l.jb=function(a,b){return a.Hb?Cy(this,a,b?4:0):this.Yc(a,b?2:0)};l.Yc=function(a,b){var c=65535,d=this.Sb(a,!1,2);-1!==d&&(c=xg(this.H,d,2,a.type==Ky)|0,b&&Ly(this,a,b));return c};function Cy(a,b,c){var d=-1,e=a.Sb(b,!1,4);-1!==e&&(d=xg(a.H,e,4,b.type==Ky)|0,c&&Ly(a,b,c));return d}l.fc=function(a,b,c,d){var e=this.Sb(a,!0,1);if(-1!==e){if(a.type!=Ky)this.H.fc(e,b);else{var f=this.ka;f.aa[(e&f.C)>>>f.A].bf(e&f.D,b&255,e)}c&&Ly(this,a,c);d||Bd(this.H,!0)}}; -l.il=function(a,b,c){var d=this.Sb(a,!0,2);-1!==d&&(a.type!=Ky?this.H.fb(d,b):Jc(this.ka,d,b),c&&Ly(this,a,c),Bd(this.H,!0))};function iy(a,b,c,d,e,f,g){return My(a,{},b,c,d,e,f,g)}function My(a,b,c,d,e,f,g,h){b.Ja=c||0;b.U=d;b.ya=e;b.type=f||(Iy(a)?sy:Jy);b.Hb=null!=g?g:!(!a.H||4!=a.H.Z.W);b.dc=null!=h?h:!(!a.H||4!=a.H.Z.Jc);b.Jd=!1;return b}function Ny(a){return[a.Ja,a.U,a.ya,a.Jd,a.Hb,a.dc,a.Fe,a.bh]}function Oy(a){return{Ja:a[0],U:a[1],ya:a[2],Jd:a[3],Hb:a[4],dc:a[5],Fe:a[6],bh:a[7]}} +function ry(a,b,c){var d=Iy(a)?sy:Jy;c||(c=d);if(c==d){if(b===a.H.Z.U)return a.H.Z;if(b===a.H.Ca.U)return a.H.Ca;if(b===a.H.oa.U)return a.H.oa;if(b===a.H.Y.U)return a.H.Y;if(80386<=a.H.ca){if(b===a.H.Ga.U)return a.H.Ga;if(b===a.H.Ha.U)return a.H.Ha}if(a.Da&&c==sy||!a.Ya)return null}a=a.Ya;if(c!=sy)a.nh(b),a.Ka=65535,a.Nb=65536;else{var e;c=a.gc;b&=65535;b&4?(d=c.Eb.ua,e=d+c.Eb.Ka|0):(d=c.Kb,e=c.Pc);d=d+(b&65528)|0;if(e-d|0){e=xg(c,d+0,2);var f=xg(c,d+4,2),g=f&7936,h=xg(c,d+2,2)|(f&255)<<16,k=xg(c, +d+6,2);80386<=c.ca&&(h|=(k&65280)<<16,e|=(k&15)<<16,k&128&&(e=e<<12|4095));a.U=b;a.ua=h;a.Ka=e;a.Nb=(e>>>0)+1;a.lb=f;a.type=g;a.ext=k;a.Lb=d;Vd(a,!0,!0,!1)}}return a}l.Sb=function(a,b,c){var d=a&&a.ya;if(null==d&&(d=-1,a)){var e=ry(this,a.U,a.type);e&&(b=a.Ja||0,c=c||1,d=e=-1===e.Lb||e.Oc&&(b>>>0)+c>e.Nb||!e.Oc&&(b>>>0)+c<=e.Nb?e.ua+b|0:-1,a.ya=d)}return d};l.Ia=function(a,b){var c=255,d=this.Sb(a,!1,1);-1!==d&&(c=xg(this.H,d,1,a.type==Ky)|0,b&&Ly(this,a,b));return c}; +l.jb=function(a,b){return a.Hb?Cy(this,a,b?4:0):this.Yc(a,b?2:0)};l.Yc=function(a,b){var c=65535,d=this.Sb(a,!1,2);-1!==d&&(c=xg(this.H,d,2,a.type==Ky)|0,b&&Ly(this,a,b));return c};function Cy(a,b,c){var d=-1,e=a.Sb(b,!1,4);-1!==e&&(d=xg(a.H,e,4,b.type==Ky)|0,c&&Ly(a,b,c));return d}l.fc=function(a,b,c,d){var e=this.Sb(a,!0,1);if(-1!==e){if(a.type!=Ky)this.H.fc(e,b);else{var f=this.ka;f.aa[(e&f.C)>>>f.A].cf(e&f.D,b&255,e)}c&&Ly(this,a,c);d||Bd(this.H,!0)}}; +l.jl=function(a,b,c){var d=this.Sb(a,!0,2);-1!==d&&(a.type!=Ky?this.H.fb(d,b):Jc(this.ka,d,b),c&&Ly(this,a,c),Bd(this.H,!0))};function iy(a,b,c,d,e,f,g){return My(a,{},b,c,d,e,f,g)}function My(a,b,c,d,e,f,g,h){b.Ja=c||0;b.U=d;b.ya=e;b.type=f||(Iy(a)?sy:Jy);b.Hb=null!=g?g:!(!a.H||4!=a.H.Z.W);b.dc=null!=h?h:!(!a.H||4!=a.H.Z.Jc);b.Jd=!1;return b}function Ny(a){return[a.Ja,a.U,a.ya,a.Jd,a.Hb,a.dc,a.Ge,a.dh]}function Oy(a){return{Ja:a[0],U:a[1],ya:a[2],Jd:a[3],Hb:a[4],dc:a[5],Ge:a[6],dh:a[7]}} function Py(a,b,c){if(null!=b.U&&(a=ry(a,b.U,b.type))){var d=b.Ja&a.wa;if(!a.Oc){if(d>>>0>=a.Nb)return!1}else if(d>>>0f?null!=h?(g=dy(a,b,void 0),f=null):(f=dy(a,b,void 0),null==f&&(g=null)):(h=dy(a,b.substring(0,f),void 0),g=dy(a,b.substring(f+1),void 0),f=null)}null!=g&&(e=iy(a,g,h,f,c),d||Py(a,e,!0)||(a.P("invalid offset: "+Gy(e)),e=null));return e}function Ty(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.sl=a.Cg(b.Yk=c[2]))}l.Pk=function(a,b){var c=Qy(this,b);return a.replace("["+b+"]",c?q(this.jb(c),c.Hb?8:4):"undefined")}; +function Qy(a,b,c,d){var e,f=c?a.L:a.Ma;c=d?Ry:f.type;var g=f.Ja,h=f.U,f=f.ya;if(void 0!==b){b=fy(a,b);e=b.charAt(0);f=b.indexOf(":");switch(e){case "&":c=Jy;break;case "#":c=sy;break;case "%":c=Sy;e=b.charAt(1);"%"==e&&(c=Ky,e+=e);g=0;h=null;break;default:0<=f&&(c=Ry),e=""}e&&(b=b.substr(e.length),f-=e.length);e=b;var k;if(e.match(/^[a-z_][a-z0-9_]*$/i))for(var m=e.toUpperCase(),p=0;pf?null!=h?(g=dy(a,b,void 0),f=null):(f=dy(a,b,void 0),null==f&&(g=null)):(h=dy(a,b.substring(0,f),void 0),g=dy(a,b.substring(f+1),void 0),f=null)}null!=g&&(e=iy(a,g,h,f,c),d||Py(a,e,!0)||(a.P("invalid offset: "+Gy(e)),e=null));return e}function Ty(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.tl=a.Dg(b.Zk=c[2]))}l.Qk=function(a,b){var c=Qy(this,b);return a.replace("["+b+"]",c?q(this.jb(c),c.Hb?8:4):"undefined")}; function Ly(a,b,c){c=c||1;null!=b.ya&&(b.ya+=c);null!=b.U&&(b.Ja+=c,Py(a,b)||(b.Ja=0,b.ya=null))}function vy(a,b,c){return null!=b?q(b,4)+":"+q(a,a&-65536||c?8:4):q(a)}function Gy(a){var b;switch(a.type){case Jy:case Uy:b="&";break;case sy:b="#";break;case Sy:b="%";break;case Ky:b="%%";break;default:b=a.U?"":"%"}return a.type>=Sy||null==a.U?b+q(a.ya):b+vy(a.Ja,a.U,a.dc)} function wy(a,b,c){var d="";for(c=c||256;d.length>>a.H.hb;g=1}a.P("blockid "+(d?"linear ":"physical")+" blockaddr used size type");a.P("-------- --------- ---------- ------ ------ ----");c=-1;for(var h=0;g--;)(d=b[f])&&d.type==bd&&(d=sd(a.H,e,!1,!0)),d.type==c?h++||a.P("..."):(c=d.type,h=tc[c],c==dd&&(d=d.pd,h+=" -> "+tc[d.type]),d&&a.P(q(d.id,8)+" %"+q(f<c&&(c=Ha(Wy,a.substr(b,2))));return c}; -function Xy(a,b){var c=0,d=a.hh(b);if(null!=d)switch(b){case Yy:case Zy:case $y:case az:case bz:case cz:case dz:case ez:c=2;break;case fz:case gz:case hz:case iz:case jz:case kz:case lz:case mz:case nz:case oz+pz:case oz+qz:case oz+rz:case oz+sz:case oz+tz:case oz+uz:c=4;break;case vz:case wz:case xz:case yz:case zz:case Az:case Bz:case Cz:case Dz:case Ez:case Fz:case Gz:case Hz:c=8;break;case Iz:c=a.ta}return c?q(d,c):"??"} -l.hh=function(a){var b;if(0<=a){var c=this.H;switch(a){case Yy:b=c.D&255;break;case Zy:b=c.I&255;break;case $y:b=c.L&255;break;case az:b=c.G&255;break;case bz:b=c.D>>8&255;break;case cz:b=c.I>>8&255;break;case dz:b=c.L>>8&255;break;case ez:b=c.G>>8&255;break;case fz:b=c.D&65535;break;case gz:b=c.I&65535;break;case hz:b=c.L&65535;break;case iz:b=c.G&65535;break;case jz:b=z(c)&65535;break;case kz:b=c.M&65535;break;case lz:b=c.K&65535;break;case mz:b=c.J&65535;break;case nz:b=A(c)&65535;break;case Iz:b= -qe(c);break;case oz+pz:b=c.oa.U;break;case oz+qz:b=c.Z.U;break;case oz+rz:b=c.Y.U;break;case oz+sz:b=c.Ca.U;break;default:if(80286==this.H.ca)a==Dz&&(b=c.qa);else if(80386<=this.H.ca)switch(a){case vz:b=c.D;break;case wz:b=c.I;break;case xz:b=c.L;break;case yz:b=c.G;break;case zz:b=z(c);break;case Az:b=c.M;break;case Bz:b=c.K;break;case Cz:b=c.J;break;case Dz:b=c.qa;break;case Ez:b=c.Og;break;case Fz:b=c.Cd;break;case Gz:b=c.Wc;break;case oz+tz:b=c.Ga.U;break;case oz+uz:b=c.Ha.U;break;case Hz:b=A(c)}}}return b}; -function Jz(a,b){b=fy(a,b)||b;for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=a.gh(b,c+1),0<=e&&(b=b.substr(0,c)+Xy(a,e)+b.substr(c+1+Wy[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=oa(e,16),null!=d&&32<=d&&128>d?(d=e+" '"+String.fromCharCode(d)+"'",b=b.replace("#"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("$",c));)e=b.substr(c+1,9),(d=Qy(a,e))?(d=e+' "'+wy(a,d)+'"',b=b.replace("$"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("^",c));)e=b.substr(c+1,9),(d=Qy(a,e))?(Ly(a,d), -d=e+' "'+wy(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}l.message=function(a,b){b&&(a+=" at "+Gy(iy(this,A(this.H),this.H.Z.U))+" (%"+q(this.H.da)+")");this.za&&a==this.za||(this.za=a,this.ic&-2147483648&&(this.Jb(),a+=" (cpu halted)"),this.P(a),this.H&&(a=this.H,a.zc-=a.A,a.A=0,a.T.Ve=0,Bd(a)))}; +function qy(a,b,c,d){var e=0,f=0,g=b.length;if(c){e=a.Sb(Qy(a,c));if(-1===e){a.P("invalid address: "+c);return}f=e>>>a.H.hb;g=1}a.P("blockid "+(d?"linear ":"physical")+" blockaddr used size type");a.P("-------- --------- ---------- ------ ------ ----");c=-1;for(var h=0;g--;)(d=b[f])&&d.type==bd&&(d=sd(a.H,e,!1,!0)),d.type==c?h++||a.P("..."):(c=d.type,h=tc[c],c==dd&&(d=d.pd,h+=" -> "+tc[d.type]),d&&a.P(q(d.id,8)+" %"+q(f<c&&(c=Ha(Wy,a.substr(b,2))));return c}; +function Xy(a,b){var c=0,d=a.ih(b);if(null!=d)switch(b){case Yy:case Zy:case $y:case az:case bz:case cz:case dz:case ez:c=2;break;case fz:case gz:case hz:case iz:case jz:case kz:case lz:case mz:case nz:case oz+pz:case oz+qz:case oz+rz:case oz+sz:case oz+tz:case oz+uz:c=4;break;case vz:case wz:case xz:case yz:case zz:case Az:case Bz:case Cz:case Dz:case Ez:case Fz:case Gz:case Hz:c=8;break;case Iz:c=a.ta}return c?q(d,c):"??"} +l.ih=function(a){var b;if(0<=a){var c=this.H;switch(a){case Yy:b=c.D&255;break;case Zy:b=c.I&255;break;case $y:b=c.L&255;break;case az:b=c.G&255;break;case bz:b=c.D>>8&255;break;case cz:b=c.I>>8&255;break;case dz:b=c.L>>8&255;break;case ez:b=c.G>>8&255;break;case fz:b=c.D&65535;break;case gz:b=c.I&65535;break;case hz:b=c.L&65535;break;case iz:b=c.G&65535;break;case jz:b=z(c)&65535;break;case kz:b=c.M&65535;break;case lz:b=c.K&65535;break;case mz:b=c.J&65535;break;case nz:b=A(c)&65535;break;case Iz:b= +qe(c);break;case oz+pz:b=c.oa.U;break;case oz+qz:b=c.Z.U;break;case oz+rz:b=c.Y.U;break;case oz+sz:b=c.Ca.U;break;default:if(80286==this.H.ca)a==Dz&&(b=c.qa);else if(80386<=this.H.ca)switch(a){case vz:b=c.D;break;case wz:b=c.I;break;case xz:b=c.L;break;case yz:b=c.G;break;case zz:b=z(c);break;case Az:b=c.M;break;case Bz:b=c.K;break;case Cz:b=c.J;break;case Dz:b=c.qa;break;case Ez:b=c.Pg;break;case Fz:b=c.Cd;break;case Gz:b=c.Wc;break;case oz+tz:b=c.Ga.U;break;case oz+uz:b=c.Ha.U;break;case Hz:b=A(c)}}}return b}; +function Jz(a,b){b=fy(a,b)||b;for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=a.hh(b,c+1),0<=e&&(b=b.substr(0,c)+Xy(a,e)+b.substr(c+1+Wy[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=oa(e,16),null!=d&&32<=d&&128>d?(d=e+" '"+String.fromCharCode(d)+"'",b=b.replace("#"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("$",c));)e=b.substr(c+1,9),(d=Qy(a,e))?(d=e+' "'+wy(a,d)+'"',b=b.replace("$"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("^",c));)e=b.substr(c+1,9),(d=Qy(a,e))?(Ly(a,d), +d=e+' "'+wy(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}l.message=function(a,b){b&&(a+=" at "+Gy(iy(this,A(this.H),this.H.Z.U))+" (%"+q(this.H.da)+")");this.za&&a==this.za||(this.za=a,this.ic&-2147483648&&(this.Jb(),a+=" (cpu halted)"),this.P(a),this.H&&(a=this.H,a.zc-=a.A,a.A=0,a.T.We=0,Bd(a)))}; function Vk(a,b,c,d){var e,f;if(!d&&(d=t(a,1)&&0>Kz.indexOf(b),!d)){var g=Lz[b];g&&(d=t(a,g)?!0:524288==g&&t(a,g=1048576))}d&&(e=a.H.D>>8&255,f=a.H.L&255,33==b&&11==e||524288==g&&128<=f||1048576==g&&128>f)&&(d=!1);d&&((g=(g=Qb[b])&&g[e]||"")&&(g=" "+Jz(a,g)),a.message("INT "+r(b)+": AH="+r(e)+" at "+vy(c-2-a.H.Z.ua,a.H.Z.U)+g));return d} -function Mb(a,b,c,d,e,f,g,h){h|=256;if(null==e||(a.ic&h)==h)h=null,null!=e&&(h=a.H.Z.U,e-=a.H.Z.ua),a.message(b.be+"."+(null!=d?"outPort":"inPort")+"("+sa(c)+","+(f?f:"unknown")+(null!=d?","+r(d):"")+")"+(null!=g?": "+r(g):"")+(null!=e?" at "+vy(e,h):""))}l.ih=function(){this.P("Type ? for help with PCx86 Debugger commands");Mz(this);if(this.Ga){var a=this.Ga;this.Ga=null;my(this,a)}}; -function ky(a,b){var c;if(Ig(a)){if(!a.O||!a.O.length){a.O=Array(Nz);for(c=0;c>>f.hb].Gd(e&f.Db,a==this.N);g&&sc(f)}}d&&(a.push(b),c?(null!=b.ya&&(b.U=null),b.Jd=!0):(Uz(this,a,a.length-1,"set"),ky(this)));return d}; -function Fy(a,b,c,d,e){for(var f=!1,g=Vz(a,a.Sb(c)),h=1;h>3&7,E=(3>(g>>6&3)?0:48)+u;(217==f||219==f)&&52<=E&&(E=u<<4|g&7);(u=cA[f])&&(v=u[E]);v&&(p=dA,k=v,m=k[0])}m>=p.length&&(g=a.Ia(b,1),k=eA[m-p.length][g>>3&7],m=k[0]);p=p[m];u=k.length-1;v="";b.Hb&&(m==fA? p="CWDE":m==gA?p="CDQ":m>=hA&&m<=iA&&(p+="D"));if(164<=f&&167>=f||170<=f&&175>=f)u=0,b.Hb&&"W"==p.slice(-1)&&(p=p.slice(0,-1)+"D");for(var f=-1,E=!0,K=1;K<=u;K++){var H,I;H="";I=k[K];if(void 0!==I){0>f&&(f=I>>jA);m==kA&&(f==lA?v="[%800]":f==mA&&(v="ES:["+(b.dc?"E":"")+"DI]"));var T=I&nA;if(T!=oA)if(T==pA)E=!1;else{var L=I&qA;if(L>=R)if(0>g&&(g=a.Ia(b,1)),L>6,za=g&7;if(3>xb){T=!p.indexOf("FI");if(!xb&&(!I.dc&&6==za||I.dc&&5==za))xb=2;else{if(I.dc)if(4!=za)za+= 8;else{var ca=L,cb=xb,Sa=I,rb=ca.Ia(Sa,1),db=rb>>6,rc=rb>>3&7,rb=rb&7,ib="";if(cb||5!=rb)ib=sA[rb+8];4!=rc&&(ib&&(ib+="+"),ib+=sA[rc+8],db&&(ib+="*"+(1<>24),2)):ca+("+"+q(L,2))):2==xb&&(ca&&(ca+="+"),I.dc?(L=Cy(L,I,4),ca+=q(L)):(L=L.Yc(I,2),ca+=q(L,4)));ca="["+ca+"]";if(1==ua){L="";H&=nA;H==S&&(H=I.Hb?tA:U);switch(H){case uA:L="FAR";break;case V:L="BYTE";break;case U:if(T){L="INT16"; break}L="WORD";break;case tA:L="DWORD";break;case vA:if(T){L="INT32";break}case wA:L="REAL32";break;case xA:if(T){L="INT64";break}case yA:L="REAL64";break;case zA:L="REAL80";break;case AA:L="BCD80"}L&&(ca=L+" "+ca)}}else ca=BA(L,za,H,I);H=ca}else H=L==rA?BA(a,g&7,I,b):BA(a,g>>3&7,I,b);else if(L==CA)H="1";else if(L==W){H=a;T=I;L=b;I=" ";switch(T&nA){case V:T&X&&(I=q(H.Ia(L,1),2));break;case DA:I=q(H.Ia(L,1)<<24>>24,L.Hb?8:4);break;case S:if(L.Hb){I=q(Cy(H,L,4));break}case U:I=q(H.Yc(L,2),4);break; case uA:L=iy(H,H.jb(L,!0),H.Yc(L,2),null,L.type,L.Hb,L.dc);I=Gy(L);H=EA(H,L);H[0]&&(I+=" ("+H[0]+")");break;default:I="imm("+sa(T)+")"}H=I}else L==FA?(b.dc?(H=8,I=Cy(a,b,4)):(H=4,I=a.Yc(b,2)),H="["+q(I,H)+"]"):L==GA?(H=T==V?a.Ia(b,1)<<24>>24:a.jb(b,!0),I=b.Ja+H&(b.Hb?-1:65535),H=q(I,b.Hb?8:4),I=EA(a,iy(a,I,b.U)),I[0]&&(H+=" ("+I[0]+")")):L==Y?H=T==HA?"ST":T==IA?"ST("+(g&7)+")":BA(a,(I&JA)>>8,I,b):L==KA?H=BA(a,(I&JA)>>8,LA,b):L==MA?H="DS:[SI]":L==NA&&(H="ES:[DI]");if(!H||!H.length){v="INVALID";break}0< -v.length&&(v+=",");v+=H||"???"}}}g="";k=Gy(e)+" ";if(-1!==e.ya&&-1!==b.ya){do if(g+=q(a.Ia(e,1),2),null==e.ya)break;while(e.ya!=b.ya)}k+=Aa(g,e.dc?24:16);k+=Aa(p,8);v&&(k+=" "+v);a.H.cauz||b>=tz&&80386>a.H.ca)return"??";b+=oz}else if(e==QA)b+=Dz;else if(e==RA)b+=SA;else if(e==TA)b+=UA;else if(a=c&nA,a>=U&&(b=fz&&b<=mz&&4a.H.ca&&(d="\n"+d,c+=e,e="");c+="\n"+XA(a,a.H.Z,b)+" ";80386<=a.H.ca&&(e+="\n",c+=XA(a,a.H.Ga,b)+" "+XA(a,a.H.Ha,b)+"\n");c+=YA(a,"LD",a.H.Eb.U,a.H.Eb.ua,a.H.Eb.ua+a.H.Eb.Ka)+" "+YA(a,"GD",null,a.H.Kb,a.H.Pc)+" "+YA(a,"ID", -null,a.H.Pb,a.H.cd)+" ";c=c+(d+" "+e)+WA(a,Dz);80386<=a.H.ca&&(c+=WA(a,Fz)+WA(a,Gz))}else 80386<=a.H.ca&&(c+=XA(a,a.H.Ga,b)+" "+XA(a,a.H.Ha,b)+" ");return c+=WA(a,Iz)+VA(a,"V")+VA(a,"D")+VA(a,"I")+VA(a,"T")+VA(a,"S")+VA(a,"Z")+VA(a,"A")+VA(a,"P")+VA(a,"C")}l.gj=function(a,b){return a[0]>b[0]?1:a[0]>>0,p],H=Da(E,u,a.gj);0>H&&E.splice(-(H+1),0,u)}K&&(v.a=K.replace(/''/g,'"'))}a.D.push({Rf:b,pn:c,U:d,Ja:e,ya:f,en:g,Fd:h,Pi:m})} -function Ey(a,b,c){for(var d=0;d>>0,f=a.Sb(b)>>>0,g=0;g>>0,p=h.ya;null!=p&&(p>>>=0);var v=h.en;48==k&&(k=40);if(k==b.U&&e>=m&&e=p&&fb[0]?1:a[0]>>0,p],H=Da(E,u,a.hj);0>H&&E.splice(-(H+1),0,u)}K&&(v.a=K.replace(/''/g,'"'))}a.D.push({Sf:b,qn:c,U:d,Ja:e,ya:f,fn:g,Fd:h,Qi:m})} +function Ey(a,b,c){for(var d=0;d>>0,f=a.Sb(b)>>>0,g=0;g>>0,p=h.ya;null!=p&&(p>>>=0);var v=h.fn;48==k&&(k=40);if(k==b.U&&e>=m&&e=p&&fc?(a.P("out of data at address "+Gy(b)),p=!0):(a.fc(b,c,1,!0),m++)})})(a,g);Bd(a.H, +function eB(a,b){if(b[1]&&"?"!=b[1]){var c="json"==b[1],d,e=0,f=0,g=c?{}:Qy(a,b[1]);if(g&&(d=Zx(a,b[2],"drive #"),void 0!==d)){if(!c){e=Zx(a,b[3],"sector #");if(void 0===e)return;f=Zx(a,b[4],"# of sectors");void 0===f&&(f=1)}var h=a.eb;2<=d&&a.Ta&&(d-=2,h=a.Ta);if(h){var k=h.ij(d);if(k)if(k.sa)if(c)aB(a),a.P(k.sa.toJSON());else if(h.al(k,e,f)){var m=0,p=!1;for(b=Gy(g);!p&&0c?(a.P("out of data at address "+Gy(b)),p=!0):(a.fc(b,c,1,!0),m++)})})(a,g);Bd(a.H, !0);a.P(m+" bytes read at "+b)}else a.P("sector "+e+" request out of range");else a.P("drive "+d+" not loaded");else a.P("invalid drive: "+d)}else a.P("disk controller not present")}}else a.P("load commands:"),a.P("\tl [address] [drive #] [sector #] [# sectors]")} function Qz(a,b){var c;if(b&&"?"==b[1])a.P("register commands:"),a.P("\tr\tdump registers"),a.Tc&&a.P("\trfp\tdump floating-point registers"),a.P("\trp\tdump all registers"),a.P("\trx [#]\tset flag or register x to [#]");else{var d;null==c&&(c=!0);if(b&&1f;f++){var g=c,e=null;if(f=a.ta&&(h=null);switch(h){case "AL":a.H.D= @@ -798,32 +799,32 @@ z(a.H)&-65536|g&65535);break;case "BP":a.H.M=a.H.M&-65536|g&65535;break;case "SI rg(a.H):pg(a.H);break;case "Z":g?sg(a.H):qg(a.H);break;case "S":g?(e=a.H,e.resultType&=-17,e.O|=128):(e=a.H,e.resultType&=-17,e.O&=-129);break;case "I":g?(e=a.H,e.O|=512):(e=a.H,e.O&=-513);break;case "D":g?(e=a.H,e.O|=1024):(e=a.H,e.O&=-1025);break;case "V":g?lg(a.H):mg(a.H);break;default:var k=!0;if(80286<=a.H.ca)switch(k=!1,h){case "MS":tg(a.H,g);break;case "TR":-1===a.H.la.load(g)&&(f=!1);break;default:if(k=!0,80386<=a.H.ca)switch(k=!1,h){case "EAX":a.H.D=g;break;case "EBX":a.H.G=g;break;case "ECX":a.H.I= g;break;case "EDX":a.H.L=g;break;case "ESP":ge(a.H,g);break;case "EBP":a.H.M=g;break;case "ESI":a.H.K=g;break;case "EDI":a.H.J=g;break;case "FS":a.H.Ga.load(g);break;case "GS":a.H.Ha.load(g);break;case "CR0":a.H.qa=g;ak.call(a.H,g);break;case "CR2":a.H.Cd=g;break;case "CR3":a.H.Wc=g;te.call(a.H,g);break;default:k=!0}}if(k){a.P("unknown register: "+e);return}}if(!f){a.P("invalid value: "+b);return}Bd(a.H);a.P("updated registers:")}}a.P(ZA(a,d));c&&(a.L=iy(a,A(a.H),a.H.Z.U),Rz(a,Gy(a.L)))}} function gB(a,b){b=Ba(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.P(Jz(a,c[2])):dy(a,b,!1)}function hB(a,b,c){for(var d=null,e=b.Ja,f=e,g=1;6>=g&&e;g++){if(2h[0].indexOf("+"))){var m=h[0]+":";h[2]&&(m+=" "+h[2]);a.P(m)}h[3]&&(g=h[3],f=null);f=Yz(a,b,g,f);b.bh||d||d++;a.P(f);a.L=b;e-=b.ya-k;c++}}} -l.Cg=function(a,b,c){if(b)if(a){0>this.A&&this.C.length&&(this.A=0);if(0>this.A||a!=this.C[this.A])this.C.splice(0,0,a),this.A=0;this.A--}else a=this.C[this.A+1];b=[];if(a){a=a.toLowerCase().replace(/""/g,"'");var d=0,e=null;c=c||";";for(var f=0;f<=a.length;f++){var g=a.charAt(f);if('"'==g||"'"==g)e?g==e&&(e=null):e=g;else if(g==c&&!e||!g)b.push(Ba(a.substring(d,f))),d=f+1}}return b}; -function Xz(a,b,c){var d=!0;try{if(!b.length||"end"==b)a.da&&(a.P("ended assemble at "+Gy(a.aa)),a.L=a.aa,a.da=!1),b="";else if(!c){var e=">> ";a.H.qa&1&&(e=a.H.O&131072?"-- ":"## ");a.P(e+b)}var f=b.charAt(0);if('"'==f||"'"==f)return!0;a.za=null;if(Gb(a)&&0p||"z"h[0].indexOf("+"))){var m=h[0]+":";h[2]&&(m+=" "+h[2]);a.P(m)}h[3]&&(g=h[3],f=null);f=Yz(a,b,g,f);b.dh||d||d++;a.P(f);a.L=b;e-=b.ya-k;c++}}} +l.Dg=function(a,b,c){if(b)if(a){0>this.A&&this.C.length&&(this.A=0);if(0>this.A||a!=this.C[this.A])this.C.splice(0,0,a),this.A=0;this.A--}else a=this.C[this.A+1];b=[];if(a){a=a.toLowerCase().replace(/""/g,"'");var d=0,e=null;c=c||";";for(var f=0;f<=a.length;f++){var g=a.charAt(f);if('"'==g||"'"==g)e?g==e&&(e=null):e=g;else if(g==c&&!e||!g)b.push(Ba(a.substring(d,f))),d=f+1}}return b}; +function Xz(a,b,c){var d=!0;try{if(!b.length||"end"==b)a.ga&&(a.P("ended assemble at "+Gy(a.da)),a.L=a.da,a.ga=!1),b="";else if(!c){var e=">> ";a.H.qa&1&&(e=a.H.O&131072?"-- ":"## ");a.P(e+b)}var f=b.charAt(0);if('"'==f||"'"==f)return!0;a.za=null;if(Gb(a)&&0p||"z">>20;Qa.Ti=a.H.Wc+Qa.Jk;Qa.ob=qf.aa[(Qa.Ti&qf.C)>>>qf.A];Qa.Aj=Qa.ob.Nd(Qa.Jk);Qa.Kk=(Qg&4190208)>>>10;Qa.Ui=(Qa.Aj&-4096)+Qa.Kk;Qa.pb=qf.aa[(Qa.Ui&qf.C)>>>qf.A];Qa.Bj=Qa.pb.Nd(Qa.Kk);Qa.ul=(Qa.Bj&-4096)+(Qg&4095)}if(pf=Qa){a.P("linear PDE addr PDE PTE addr PTE physical");a.P("--------- ---------- -------- ---------- -------- ----------");var ve="%"+q(Qg),ve=ve+(" %%"+Vy(pf.Ti,pf.Aj)),ve= -ve+(" %%"+Vy(pf.Ui,pf.Bj,!0)),ve=ve+(" %%"+q(pf.ul));a.P(ve)}else a.P("unsupported operation")}}else a.P("missing address")}else{if("d"==za){if("disk"==cb){ca[0]="l";ca[1]="json";eB(a,ca);break a}for(xb in Rb)if(ca[1]==xb){var vt=a.Ba[xb];vt?(ca.shift(),ca.shift(),vt(ca)):a.P("no dump registered for "+cb);break a}cb||(za=a.lb||"db")}else a.lb=za;if("dh"==za){var wt=cb,xt=Sa,yt="",zt=0,Lc=a.oa,jd=a.O;if(jd.length){var uc=+wt||a.Ya,Rg=+xt||10;isNaN(uc)?uc=Rg:yt="more ";uc>jd.length&&(a.P("note: only "+ -jd.length+" available"),uc=jd.length);Lc-=uc;0>Lc&&(null==jd[jd.length-1].U?(uc=Lc+uc,Lc=0):Lc+=jd.length);var rm=[];"call"==xt&&(Rg=1E5,rm=["CALL"]);for(void 0!==wt&&a.P(uc+" instructions earlier:");0=jd.length&&(Lc=0);a.Ya=uc;zt++;Rg--}}zt||(a.P("no "+yt+"history available"),a.Ya= +Qa=null;if(80386<=a.H.ca){var qf=a.ka,Qa={};Qa.Kk=(Qg&-4194304)>>>20;Qa.Ui=a.H.Wc+Qa.Kk;Qa.nb=qf.aa[(Qa.Ui&qf.C)>>>qf.A];Qa.Bj=Qa.nb.Nd(Qa.Kk);Qa.Lk=(Qg&4190208)>>>10;Qa.Vi=(Qa.Bj&-4096)+Qa.Lk;Qa.ob=qf.aa[(Qa.Vi&qf.C)>>>qf.A];Qa.Cj=Qa.ob.Nd(Qa.Lk);Qa.vl=(Qa.Cj&-4096)+(Qg&4095)}if(pf=Qa){a.P("linear PDE addr PDE PTE addr PTE physical");a.P("--------- ---------- -------- ---------- -------- ----------");var ve="%"+q(Qg),ve=ve+(" %%"+Vy(pf.Ui,pf.Bj)),ve= +ve+(" %%"+Vy(pf.Vi,pf.Cj,!0)),ve=ve+(" %%"+q(pf.vl));a.P(ve)}else a.P("unsupported operation")}}else a.P("missing address")}else{if("d"==za){if("disk"==cb){ca[0]="l";ca[1]="json";eB(a,ca);break a}for(xb in Rb)if(ca[1]==xb){var vt=a.Ba[xb];vt?(ca.shift(),ca.shift(),vt(ca)):a.P("no dump registered for "+cb);break a}cb||(za=a.ib||"db")}else a.ib=za;if("dh"==za){var wt=cb,xt=Sa,yt="",zt=0,Lc=a.oa,jd=a.O;if(jd.length){var uc=+wt||a.Xa,Rg=+xt||10;isNaN(uc)?uc=Rg:yt="more ";uc>jd.length&&(a.P("note: only "+ +jd.length+" available"),uc=jd.length);Lc-=uc;0>Lc&&(null==jd[jd.length-1].U?(uc=Lc+uc,Lc=0):Lc+=jd.length);var rm=[];"call"==xt&&(Rg=1E5,rm=["CALL"]);for(void 0!==wt&&a.P(uc+" instructions earlier:");0=jd.length&&(Lc=0);a.Xa=uc;zt++;Rg--}}zt||(a.P("no "+yt+"history available"),a.Xa= void 0)}else if("di"==za){ca.shift();var sm=ca[0];if(sm){var Tg=Zx(a,sm);if(void 0===Tg||0>Tg||255>>0,65536>4||1;bC--&&0Zi?String.fromCharCode(Zi):".";Yi--}Ug&&(Ug+="\n");Ug+=cb+" "+um+(Wg?"":" "+Ft)}Ug&&a.P(Ug);a.Ta=rf}}}}}break;case "e":if("else"==g[0])break;var $i= -1,Gt=255,Ht=a.Ia,It=a.fc;"ew"==g[0]&&($i=2,Gt=65535,Ht=a.Yc,It=a.il);var Jt=$i<<1,Kt=g[1];if(null==Kt)a.P("edit memory commands:"),a.P("\teb [a] [...] edit bytes at address a"),a.P("\tew [a] [...] edit words at address a");else{var aj=Qy(a,Kt);if(aj)for(var bj=2;bjAm;){for(var kd=null,gC=256;Sd.Ja>>>0>>0;){Zg.Ja=a.jb(Sd,!0);if(null==Sd.ya||!gC--)break;Zg.U=Mt;if(kd=hB(a,Zg))break;Zg.U=a.jb(Sd);if(kd=hB(a,Zg,!0)){Mt=a.jb(Sd,!0);0>>0,65536>4||1;bC--&&0Zi?String.fromCharCode(Zi):".";Yi--}Ug&&(Ug+="\n");Ug+=cb+" "+um+(Wg?"":" "+Ft)}Ug&&a.P(Ug);a.Ma=rf}}}}}break;case "e":if("else"==g[0])break;var $i= +1,Gt=255,Ht=a.Ia,It=a.fc;"ew"==g[0]&&($i=2,Gt=65535,Ht=a.Yc,It=a.jl);var Jt=$i<<1,Kt=g[1];if(null==Kt)a.P("edit memory commands:"),a.P("\teb [a] [...] edit bytes at address a"),a.P("\tew [a] [...] edit words at address a");else{var aj=Qy(a,Kt);if(aj)for(var bj=2;bjAm;){for(var kd=null,gC=256;Sd.Ja>>>0>>0;){Zg.Ja=a.jb(Sd,!0);if(null==Sd.ya||!gC--)break;Zg.U=Mt;if(kd=hB(a,Zg))break;Zg.U=a.jb(Sd);if(kd=hB(a,Zg,!0)){Mt=a.jb(Sd,!0);0\nLicense: GPL version 3 or later ");for(b=0;b\nLicense: GPL version 3 or later ");for(b=0;bEB){if(d.load(this.L)){this.F=new Wf(this,"1.34.3",OB);this.F.load()&&(PB(this,d),a=QB,RB(this.F));this.F.set(LB,Ea());SB(this.F);var e=this.A&&!this.I;if(a==MB||qb("Click OK to restore the previous PCx86 machine state, or CANCEL to reset the machine.")){if(c=KB(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?d.load(g):("error"==f&&"no machine state"!= -g?(this.Fa("Error: "+g),"unable to verify user"==g&&(Ra(TB,""),this.B=null)):this.P(f+": "+g),RB(d),d.load()?(c=KB(d),e=!0):c=!1))}e&&IB(this,c?d:null)}else a==QB&&d.clear()}else IB(this);delete this.L;delete this.M}e=sb(this.id);for(f=0;fa[1];a=a[2];this.ga=!0;this.ea.Yb=!0;var d=this.na.power;d&&(d.textContent="Shutdown");this.H&&(UB(this,this.H,b,c,a),this.H.lf());this.Y&&(PB(this,b),b.clear());!c&&this.F&&(this.F.clear(),delete this.F);this.C=0}; +l.Mf=function(a){void 0===a&&(a=this.A||(this.L?MB:EB));if(!this.C){this.C++;var b=!1,c=!1;this.Y=!1;var d=this.M||new Wf(this,"1.34.3");if(a==NB)b=!0;else if(a>EB){if(d.load(this.L)){this.F=new Wf(this,"1.34.3",OB);this.F.load()&&(PB(this,d),a=QB,RB(this.F));this.F.set(LB,Ea());SB(this.F);var e=this.A&&!this.I;if(a==MB||qb("Click OK to restore the previous PCx86 machine state, or CANCEL to reset the machine.")){if(c=KB(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?d.load(g):("error"==f&&"no machine state"!= +g?(this.Fa("Error: "+g),"unable to verify user"==g&&(Ra(TB,""),this.B=null)):this.P(f+": "+g),RB(d),d.load()?(c=KB(d),e=!0):c=!1))}e&&IB(this,c?d:null)}else a==QB&&d.clear()}else IB(this);delete this.L;delete this.M}e=sb(this.id);for(f=0;fa[1];a=a[2];this.ga=!0;this.ea.Yb=!0;var d=this.na.power;d&&(d.textContent="Shutdown");this.H&&(UB(this,this.H,b,c,a),this.H.mf());this.Y&&(PB(this,b),b.clear());!c&&this.F&&(this.F.clear(),delete this.F);this.C=0}; function PB(a,b){if(qb("There may be a problem with your PCx86 machine.\n\nTo help us diagnose it, click OK to send this PCx86 machine state to http://www.pcjs.org.")){var c=a.B||"";b=b.toString();var d={app:"PCx86",ver:"1.34.3"};d.url=a.da;d.user=c;d.type="bug";d.data=b;Ka("http://www.pcjs.org/api/v1/report",d,!0)}} function jB(a,b,c){var d,e="none";if(a.C)return null;a.C--;var f=new Wf(a,"1.34.3"),g=new Wf(a,"1.34.3",JB),h=Ea();g.set(LB,h);f.set(LB,h);f.set(VB,"1.34.3");f.set(WB,window?window.location.href:null);f.set(XB,Ma());a.H&&a.H.Wb&&(c&&a.H.Jb(),d=a.H.Wb(b,c),"object"===typeof d&&f.set(a.H.id,d),c&&(a.H.ea.Yb=!1,!1===d&&(e=null)));for(var h=sb(a.id),k=0;k>>b.A;d=d+e-1>>>b.A;c.ah=0;for(c.Hd=0;f<=d;)e=b.aa[f],c.ah+=e.size,e.size&&(c.Rg.push(Fa(bc,f,0,0,e.type)),c.Hd++),f++;a.A=c;a.da=a.A.Hd*a.ka.B/(ac*kc);d=0;a.A.$i=0;a.A.kf||(a.A.kf=[]);e=-1;b=0;for(var g=-1,c=0;c>1),g=f.y+(f.A>>1),h=f.A,f.Nc>>b.A;d=d+e-1>>>b.A;c.bh=0;for(c.Hd=0;f<=d;)e=b.aa[f],c.bh+=e.size,e.size&&(c.Sg.push(Fa(bc,f,0,0,e.type)),c.Hd++),f++;a.A=c;a.da=a.A.Hd*a.ka.B/(ac*kc);d=0;a.A.aj=0;a.A.lf||(a.A.lf=[]);e=-1;b=0;for(var g=-1,c=0;c>1),g=f.y+(f.A>>1),h=f.A,f.Nc>1,b.I+=(b.J>>1)-2,hc(b,e),b.Y&&(b.D.restore(),b.Y=!1)}}else hc(a,"This space intentionally left blank");a.context.drawImage(a.K,0,0,a.K.width,a.K.height,a.Ga,a.Ma,a.xa,a.Aa);a.oa=!1}}var OB="failsafe",JB="validate",LB="timestamp",VB="version",WB="url",XB="browser",TB="user",NB=-1,EB=0,MB=1,QB=2,ZB=3; -$a(function(){for(var a=zb(document,"pcx86-machine"),b=0;b]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=v.exec(h[m]);){var u=d[2];u&&(h[u]||(p=p.replace(d[0],"")))}d=m=ta(m)}else"xsl"==v&&(e=m=ta(m));k[m]=p}a&&(k[m="css"]=a);b[2]&&(k[m="parms"]=b[2]);b[3]&&(k[m="state"]=b[3]);d&&e?(a=JSON.stringify(k),g+=".js",c=c[1]+"var resources="+a+";"+c[2]+c[3],c=c.replace(/\u00A9/g, "©"),a=Wa(c,"javascript",!1,g),a=a+(', copy it to your web server as "'+g+'", and then add the following to your web page:\n\n')+('
\n')+"...\n",a=a+('