From a070a5375c10e69d3d780d1628f7abf73ab9fc6c Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Thu, 7 Feb 2019 08:16:52 +0100 Subject: [PATCH] PDP11: Add 11LOGO programming language and make it bootable from the NG device. --- PDP11/11logo/11logo.lda | Bin 0 -> 26009 bytes PDP11/11logo/eval.337 | 2190 +++++++++++++++++++++++++++ PDP11/11logo/read.62 | 899 +++++++++++ PDP11/11logo/system.327 | 3103 ++++++++++++++++++++++++++++++++++++++ PDP11/11logo/turtle.62 | 1457 ++++++++++++++++++ PDP11/11logo/tyi.152 | 1111 ++++++++++++++ PDP11/11logo/zend.67 | 297 ++++ PDP11/pdp11_11logo_rom.h | 1639 ++++++++++++++++++++ PDP11/pdp11_ng.c | 44 +- sim_BuildROMs.c | 1 + 10 files changed, 10740 insertions(+), 1 deletion(-) create mode 100644 PDP11/11logo/11logo.lda create mode 100644 PDP11/11logo/eval.337 create mode 100644 PDP11/11logo/read.62 create mode 100644 PDP11/11logo/system.327 create mode 100644 PDP11/11logo/turtle.62 create mode 100644 PDP11/11logo/tyi.152 create mode 100644 PDP11/11logo/zend.67 create mode 100644 PDP11/pdp11_11logo_rom.h diff --git a/PDP11/11logo/11logo.lda b/PDP11/11logo/11logo.lda new file mode 100644 index 0000000000000000000000000000000000000000..39df9d7ad119b25ec01cbf791e19c04a360be988 GIT binary patch literal 26009 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 US`M0*-x>JL&VL_!8{^pj1GWQ-2LJ#7 literal 0 HcmV?d00001 diff --git a/PDP11/11logo/eval.337 b/PDP11/11logo/eval.337 new file mode 100644 index 00000000..3767bfe7 --- /dev/null +++ b/PDP11/11logo/eval.337 @@ -0,0 +1,2190 @@ +.STITL SYSTEM PRIMITIVES + + VERN==VERN+%FNAM2 + + +SENTENCE: + MOV (SP),D ;NUMBER OF ARGS (DON'T CHANGE THE REGISTER FROM D WITHOUT CHANGING SNAP, TOO) + + MOV #SENT,(SP) ;WHAT TYPE THIS LIST IS +SNPSEN: CLR C + TST D +SENT.1: BLE SENT.R ;RETURN + MOV @S,B ;ARGUMENT. LEAVE ON S-PDL FOR GARBGE COLLECTOR + MOV B,A + BIC #7777,A ;LEAVE ONLY DATA TYPE + CMP #SENT,A + BEQ SENT.S ;ARG IS SENTENCE + CMP #ATOM,A + BNE SENT.2 + +;ARG IS AN ATOM +SENT.A: JSR PC,.LOAD ;CONVERT ATOM TO LSTR + MOV #LSTR,A + +SENT.2: BIS C,A ;C POINTS TO PREVIOUS STUFF OF SENTENCE + JSR PC,GRBAD + +SENT.3: MOV C,GCPREV ;POINTER TO PREVIOUS STUFF OF SENTENCE +SENT.4: JSR PC,SPOPT ;POP S + DEC D ;COUNTER + BR SENT.1 + +SENT.S: BIT #7777,B ;ARGUMENT IS A SENTENCE + BEQ SENT.4 ;EMPTY + TST C ;0 IF FIRST TIME CALLED + BEQ SENS.1 +;SECOND OR LATER TIME THROUGH +SENS.2: JSR PC,COPYL ;COPY LIST. RETURN POINTER IN B + BIS GCPREV,A ;POINTER TO PREVIOUS STUFF + JSR PC,.STP1 ;C STILL POINTS TO LAST NODE COPIED +SENS.1: BIC #170000,B ;LEAVE POINTER ONLY + MOV B,C + BR SENT.3 + +;RETURN. POINTER TO SENTENCE IN C +SENT.R: BIS (SP)+,C ;THE TYPE +S.ORT: CLR GCPREV + JMP ORTC + + +LIST.P: + MOV (SP),D ;COUNT + MOV #ORTC,(SP) ;RETURN ADDRESS +LIST1: CLR C +LIST.1: DEC D ;COUNT + BLT LIST.9 ;DONE + MOV @S,B + MOV B,A + BIC #7777,A ;LEAVE DATA TYPE ONLY +LIST.2: BIS C,A ;POINTER TO REST OF LIST + JSR PC,GRBAD + MOV C,GCPREV ;PROTECT FROM GARBAGE COLLECTOR + JSR PC,SPOPT + BR LIST.1 ;GET NEXT ARG + +LIST.9: CLR GCPREV + BIS #LIST,C + RTS PC + + +FPUT: + CLR F + BR .+6 +LPUT: + MOV #,F + MOV (SP),D ;NUMBER OF ARGS + MOV #ORTC,(SP) ;RETURN ADDRESS + DEC D + BGT .+4 + ERROR+UEL ;NEED AT LEAST 2 ARGS + JSR PC,GLWARG + BR .+4 ;LIST + ERROR+WTA ;FIRST ARG MUST BE LIST + ADD F,PC ;CHOOSE BETWEEN LPUT AND FPUT + +FPUT1: MOV B,A ;POINTS TO ARG + BIC #170000,A ;CLEAR DATA TYPE + JSR PC,SPOPT + MOV @S,B ;FIRST ELEMENT TO BE PUT + MOV B,C + BIC #7777,C ;THIS DATA TYPE WILL BE SET INTO A + DEC D + BR LIST.2 + +LPUT1: JSR PC,COPYL ;COPY LIST. RETURN PTR IN B + MOV B,GCP1 + JSR PC,SPOPT ;POP 1ST ARG + JSR PC,LIST1 ;LIST REST OF ARGS + BIC #170000,C ;POINTER TO THAT LIST + MOV C,D ;SAVE IT + MOV F,C ;POINTER TO LAST NODE OF COPIED LIST + JSR PC,.LDP1 + BIS D,A ;JOIN COPIED LIST TO LIST OF ARGS + JSR PC,.STP1 + MOV GCP1,C + CLR GCP1 + RTS PC + + +WORD: + CLR C + MOV (SP)+,D ;NUMBER OF ARGS +WORD.1: BLE WORDR + MOV @S,B ;GET ARG, BUT LEAVE ON STACK + CMP B,#LNUM ;IS ARG NUMBER? + BLO WORD.2 + CMP B,# + BLO WORD.N ;NUMBER +WORD.2: MOV #LSTR,A + JSR PC,CONVERT + ERROR+WTAB + BIT #7777,B ;IS ARG THE EMPTY WORD + BEQ WORD.4 ;YES + + TST GCPREV ;IS 0 FIRST TIME THROUGH + BEQ WORD.3 + +;SECOND OR LATER ARG +WORD.5: JSR PC,CPYSTR ;COPY STRING +WORD.6: JSR PC,.LDP1 ;LAST NODE OF COPIED STRING + BIS GCPREV,A ;BIS POINTER TO PREVIOUS STUFF + JSR PC,.STP1 ;STORE BACK + +WORD.3: MOV B,GCPREV ;POINTER TO PREVIOUS STUFF +WORD.4: JSR PC,SPOPT ;POP S + DEC D + BR WORD.1 + +;ARGUMENT IS NUMBER. CONVERT TO STRING +WORD.N: JSR PC,.CLNLS + ERROR+WTAB ;PROBABLY MORE THAN 16 BITS + TST GCPREV ;IS 0 FIRST TIME THROUGH + BEQ WORD.3 ;IS FIRST ARG + BR WORD.6 ;SECOND OR LATER, BUT DON'T RECOPY!! + +;RETURN +WORDR: MOV GCPREV,C + BIS #LSTR,C + BR S.ORT + + +FIRST: + JSR PC,GLWANE + BR F.SENT ;ARG IS SENTENCE + +;ARG IS WORD + JSR PC,INSTR ;RETURN ONE CHAR IN D + BNE .+4 ;FOUND A CHAR +F.WTA: ERROR+WTA ;NO CHARS IN STRING + TST (SP)+ ;POP OFF CO-ROUTINE LINK + MOV D,B +F.STOR: CLR F + JSR PC,ACTSTO ;STORE THE CHAR. + BIS #LSTR,C ;POINTER TO THE NODE OF THE CHAR + JMP ORTNC + +F.SENT: MOV B,C + JSR PC,.LDP2 + JMP ORTNA + + +BUTFIRST: + JSR PC,GLWANE + BR BF.SEN + +;ARG IS WORD +BF.W: JSR PC,INSTR ;RETURN ONE CHAR + BEQ F.WTA ;NO CHARS IN STRING + TST (SP)+ +;A CONTAINS FIRST 2 CHARS OF THE STRING +;BUT IT MAY ONLY HAVE ONE. + CMP A,#177 ;IS TOP CHAR OF A 0? + BLOS BF.W1 ;YES. ONLY ONE CHAR IN A + CLRB A ;KILL THE FIRST CHAR + MOV A,B + MOV C,A ;POINTER TO REST + JSR PC,GRBAD +BF.W1: BIC #170000,C + BIS #LSTR,C + JMP ORTNC + +;ARG IS SENTENCE +BF.SEN: MOV B,C + JSR PC,.LDP1 ;POINTER TO REST OF SENTENCE + BIC #170000,A ;LEAVE ONLY POINTER + BIS #SENT,A + JMP ORTNA + + +LAST: + JSR PC,GLWANE + BR L.SENT ;ARG IS SENTENCE + +;ARG IS WORD + MOV B,C + SPUSH #INSTR1 ;ADDRESS OF CO-ROUTINE + CLR D +L.W1: MOV D,B ;SAVE LAST CHAR + JSR PC,@(SP)+ ;RETURNS CHAR IN D + BNE L.W1 ;FOUND ONE + TST B ;STRING DONE + BNE F.STOR ;STORE THE CHAR AND RETURN + ERROR+WTA ;NO CHARS FOUND + +L.SEN1: MOV A,B +;ARG IS SENTENCE +L.SENT: JSR PC,.LOAD + BIT #7777,A ;LAST NODE OF SENTENCE YET? + BNE L.SEN1 + +L.SRET: JMP ORTNB + + +BUTLAST: + JSR PC,GLWANE + BR BL.SEN ;ARG IS A SENTENCE + +;ARG IS A WORD + JSR PC,CPYSTR ;COPY STRING. + JSR PC,.LDP2 ;LAST NODE OF NEW STRING + SWAB A + BNE BL.W2 ;THE LAST CHARACTER IS REALLY THERE + CLR A ;(WE KNOW THE FIST CHAR IS REALLY THERE) + CMP B,C ;IS THERE ONLY ONE NODE + BNE BL.W1 ;MORE TAN ONE NODE + CLR B ;ANSWER IS EMPTY WORD + BR BL.W3 + +BL.W2: CLRB A ;CLEAR LAST CHAR +BL.W1: JSR PC,.STP2 ;STORE NODE BACK +BL.W3: BIS #LSTR,B ;POINTER TO THE WORD +BL.ORT: JMP ORTNB + +;ARG IS A SENTENCE +BL.SEN: JSR PC,COPYL ;COPY LIST + MOV E,C ;POINTS TO NEXT TO LAST NODE + BEQ BL.SR ;ANSWER IS EMPTY + JSR PC,.LDP1 + BIC #7777,A + JSR PC,.STP1 + MOV B,C +BL.SR: BIS #LIST,C + JMP ORTNC + + +COUNT: + JSR PC,GLWARG + BR CT.SEN + +;ARG IS WORD + MOV B,C + CLR B + MOV #INSTR1,-(SP) ;ADDRESS OF A CO-ROUTINE +CT.W1: INC B ;INCREMENT COUNTER + JSR PC,@(SP)+ ;RETURNS CHAR IN B + BNE CT.W1 + DEC B ;WHEN RETURNS HERE, NO MORE CHARS +CT.ORT: JSR PC,P1NARG + JMP ORTNB + +;ARG WAS A SENTENCE +CT.SEN: MOV B,C + JSR PC,CLE ;RETURNS NUMBER OF LIST ELEMENTS IN B + BR CT.ORT + + +;COPY LIST. +; CALL WITH B POINTING TO LIST +; RETURNS B POIOTING TO NEW LIST, C POINTING TO LAST NODE +COPYL: CLR E ;WILL POINT TO 2ND NODE FROM LAST + CLR F +COPYL1: BIT #7777,B + BEQ COPYLR ;DONE + JSR PC,.LOAD + MOV F,E ;LISTB PLACES LAST NODE PTR INTO F + JSR PC,LISTB + MOV A,B + BR COPYL1 + +COPYLR: POPS B ;LISTB KEEPS POINTER TO NEW LIST ON S. + RTS PC + + +;COPY STRING +;CALL WITH B POINTING TO STRING TO BE COPIED, +;ASSUMES THAT INPUT STRING HAS BEEN GARBAGE COLLECT PROTECTED ALREAEDY +;B POINTS TO FIRST NODE OF NEW STRING, C POINTS TO LAST +;DOESN'T SKIP IF EXITS BECAUSE IT RAN OUT OF INPUT STRING + +CPYSTR: MOV #INSTR,A +MAKSTR: MOV D,-(SP) + MOV E,-(SP) + MOV F,-(SP) + + MOV A,-(SP) ;ADDRESS OF INPUT STRING ROUTINE + CLR F + +OUTSTR: JSR PC,@(SP)+ ;CALL INPUT STRING CO-ROUTINE + BEQ OSTRE1 ;INPUT STRING DONE + +OSTR1: MOV D,B ;SAVE CHARACTER + JSR PC,@(SP)+ ;CALL INPUT STRING CO-ROUTINE + BEQ OSTRE2 ;INPUT STRING DONE + +OSTR2: SPUSH A ;SAVE REGISTERS USED BY INPUT STRING + SPUSH C + SWAB D + BIS D,B ;BIS SECOND CHARACTER + JSR PC,ACTSTO ;ACTUAL STORE + SPOP C + SPOP A + BR OUTSTR + +;INPUT STRING HAS ENDED +OSTRE2: JSR PC,ACTSTO ;STORE CHAR IN B +OSTRE1: POPS B ;POINTER TO FIRST NODE OF STRING + MOV F,C ;POINTER TO LAST NODE + BIC #170000,B + BIC #170000,C +.RDEF: CLR GCP1 + MOV (SP)+,F + MOV (SP)+,E + MOV (SP)+,D +OSTRR: RTS PC + + +;ACTUALLY STORE OUTPUT NODE +ACTSTO: MOV #SSTR,A + JMP LISTB + + +;INPUT STRING +;A CO-ROUTINE THAT HANDS BACK A CHARACTER IN BOTTOM BYTE OF D +;DOES RTS PC WHEN INPUT STRING FINISHED + +INSTR: MOV B,C +INSTR1: BIT #7777,C + BEQ OSTRR ;RTS PC + JSR PC,.LDP2I + MOVB A,D + BEQ INSTR2 ;NULL CHAR + BIC #177400,D ;CLEAR TOP BYTE + JSR PC,@(SP)+ ;RETURN TO CO-ROUTINE + +INSTR2: CLRB A + SWAB A + BEQ INSTR1 ;NULL CHAR + MOV A,D + JSR PC,@(SP)+ ;RETURN TO CO-ROUTINE + BR INSTR1 + +MAKE: BIC #MMF,FLAGS2 + BR .+10 +MMAKE: BIS #MMF,FLAGS2 + POPS TOPS ;PUT VALUE INTO TOPS + MOV @S,B + MOV B,A + BIC #7777,A + CMP #ATOM,A ;IS TYPE ATOM? + BNE MAKE2 +MAKE4: MOV #VBIND,A ;YES< SET VARIABLE BINDING? + JSR PC,.BIND + BIT #MMF,FLAGS2 ;IS IT MULTIPLE MAKE? + BEQ MAKE1 + MOV TOPS,@S + CLR TOPS + JMP ORT +MAKE1: POPS A + CLR TOPS + JMP NORT +MAKE2: CMP #LSTR,A + BEQ MAKE3 +MAKE5: ERROR+WTAB ;WRONG TYPE OF ARG +MAKE3: BIT #7777,B + BEQ MAKE5 + MOV TOPS,@S + MOV B,TOPS ;FOR .INTRN + JSR PC,UINTRN ;.INTRN FOR STRINGS THAT MAY INCLUDE NULL CHARS + BR .+2 + MOV @S,TOPS + BR MAKE4 +DOTS: JSR PC,GUOEB ;GET UOE PTR FROM S INTO B + ERROR+HNV ;HAS NO VALUE +DOTS2: JSR PC,.BNDVS + ERROR+HNV ;HAS NO VALUE + PUSHS B + CLR TOPS + JMP ORT + GUOEB: POPS B ;GET UOE OR LSTR IN B FROM S + MOV B,A ; SKIP IF UOE + BIC #7777,A + CMP #ATOM,A + BEQ GUOE1 + CMP #LSTR,A + BEQ GUOE2 + ERROR+WTAB ;.(B). ISWRONG TYPE OF ARG +GUOE2: MOV B,TOPS + JSR PC,UOBSCH ;.OBSCH FOR STRINGS THAT HAVE NULL CHARS + RTS PC ;NOT THERE +GUOE1: JMP SRET +DO: MOV @S,A ;DO... + MOV A,B + BIC #7777,A + CMP #LSTR,A + BEQ DO1 + CMP #LIST,A + BEQ DO1 + ERROR+WTAB +DO1: JSR PC,BLSTI + MOV #BLST,PCHR + CLR NBKTS + JSR PC,PNODAB + JSR PC,BLSTF + BR DO3 ;EMPTY STRING + MOV TOPS,@S + MOV #TYO,PCHR +DO2: JSR PC,READ + JSR PC,EVLINE + JMP ORT + BR DO4 +DO3: POPS A +DO4: JMP NORT + ;PRINT TOP (C) THINGS ON S +PRINT: INC NBKTS ;PRINTS OUTER [,]'S +FPRINT: JSR PC,REVS ;DOESNT " + POP C + JSR PC,TYPE1 + JSR PC,.CRLF + JMP NORT + +TYPE: JSR PC,REVS + POP C + JSR PC,TYPE1 ;PRINT WITHOUT CRLF AT END + JMP NORT + +TYPE1: BIS #DPQF,FLAGS2 ;DONT PRINT QUOTE BEFORE STRINGS + JSR PC,PRS1 + POPS A + DEC C + BGT TYPE1 + RTS PC + +LPAR: JSR PC,GNT + CMP #$RPAR,CT+2 + BEQ LPAR1 + ERROR+TIP ;TOO MUCH INSIDE PARENS +LPAR1: JMP ORT +RPAR: ERROR+ERP ;EXTRA RIGHT PAREN + + +;SINGLE PRECISION ARITHMETIC ROUTINES + +UPLUS: JMP ORT ;UNARY PLUS - NOTHING TO DO +UMINS: JSR PC,G1NARG ;UNARY MINUS + NEG B + JMP R1NARG + +SUM: + CLR A + MOV (SP)+,D ;NUMBER OF ARGS + BLE SUM.2 ;DONE +SUM.1: JSR PC,G1NARG ;GET 1 NUMBER IN B + ADD B,A + BVS RTBE ;RESULT TOO BIG + DEC D ;COUNTER + BGT SUM.1 +SUM.2: MOV A,B + BR DONEMP + +DIFF: + JSR PC,G2NARG ;GET 2 NUMBERS + SUB A,B + BVS RTBE ;RESULT TOO BIG +DONEMP: JMP R1NARG + +PROD: + MOV #MQ,F + MOV #EAESR,E + MOV #1,(F)+ ;INITIALIZE MULTIPLICAND TO 1 + MOV #SIPRBT,C + MOV (SP)+,D ;NUMBER OF ARGS +PROD.1: DEC D + BLT PROD.2 ;DONE + JSR PC,G1NARG ;GET ONE ARG IN B + MOV B,(F) ;MULTIPLY + BITB C,(E) + BNE PROD.1 +RTBE: ERROR+RTB ;RESULT TOO BIG + +PROD.2: MOV -(F),B ;PICK ANSWER OUT OF EAE + BR DONEMP + +MOD: + CLR D + BR DIV.1 +DIVDE: + MOV #,D +DIV.1: JSR PC,G2NARG + TST A + BEQ RTBE ;DIVISOR = 0 + MOV #MQ,F + MOV B,(F) ;DIVIDEND + MOV A,DIVIDE + MOV (F),B ;PICK UP QUOTIENT + ADD D,PC ;IF DIVIDE DESIRED, BRANCHES TO DONEMP +DIV.8: MOV -(F),B ;IF MOD DESIRED, STAYS HERE + BR DONEMP ;AND PICKS UP REMAINDER + +;PREDICATES + +EQUAL: MOV S,F + MOV (F)+,B ;ARG1. LEAVE ON STACK FOR GC PROTECTION + MOV (F),C ;ARG2 + MOV #7777,E ;AN OFT USED CONSTANT + JSR PC,EQUAL1 + BR EQ.F ;RETURNS HERE IF FALSE + MOV #TRUE,B + BR EQ.RET + +EQ.F: MOV #FALSE,B +EQ.RET: ADD #2,S + JMP ORTNB + + +;COMPARE THE DATA ITEM POINTED TO BY B WITH +;THE DATA ITEM POINTED TO BY C. +;SKIP IF THEY ARE EQUAL + +EQUAL1: CMP B,C ;ARE THE POINTERS THE SAME + BEQ EQTRUE + MOV B,A + JSR PC,EQ.SUB ;IS ARG1 A WORD? + BNE EQ.W1 ;A WORD + JSR PC,EQ.SB1 ;IS ARG2 A WORD? + BNE EQFALS ;ARG1 ISN'T WORD, BUT ARG2 IS. +;BOTH ARGS ARE LISTS +EQ.LST: JSR PC,.LOAD ;FIRST NODE OF ARG1 + PUSH A ;SAVE POINTER TO BF + JSR PC,.LDP2I ;FIRST NODE OF ARG2 + SPUSH C ;SAVE POINTER TO BF + MOV A,C ;POINTER TO FIRST OF ARG1 +;B POINTS TO FIRST ARG2. C POINTS TO FIRST ARG1. + JSR PC,EQUAL1 ;ARE THE FIRSTS EQUAL? + BR EQ.FF ;NO. RETURN FALSE + POP B ;POINTER TO BF + SPOP C ;POINTER TO BF OF OTHER ARG + BIC #170000,B + BIC #170000,C + CMP B,C + BEQ EQTRUE + JSR PC,EQ.LST ;ARE THE BF'S EQUAL? +EQFALS: RTS PC ;NO +EQTRUE: SKPRET ;YES + +EQ.FF: CMP (SP)+,(SP)+ ;POP OFF THE POINTERS TO THE BF'S + JMP PPOPT ;DON'T OVERPOP! + +EQ.SB1: MOV C,A ;IS ARG A WORD? +EQ.SUB: BIT E,A ;EMPTY? + BEQ EQFALS ;ONE ARG FINISHED + BIC E,A + CMP #SENT,A + RTS PC + +;ARG1 IS A WORD +EQ.W1: JSR PC,EQ.SB1 ;IS ARG2 A WORD? + BEQ EQFALS ;NOT A WORD +;FALLS INTO WEQUAL + +;COMPARE TWO WORDS + +WEQUAL: MOV #SNUM,A + JSR PC,CONVERT ;TRY CONVERTING ARG TO SNUM + BR EQ.STR ;NOT NUMERIC + MOV #,D ;ADD TO PC IN A WHILE + BR EQ.A2 + +;ARG NOT NUMERIC. TRY STRING COMPARE +EQ.STR: MOV #LSTR,A + JSR PC,CONVERT + ERROR+WTAB ;EQUAL NOT DEFINED FOR SNAPS, ETC + CLR D ;ADD TO PC IN A WHILE +EQ.A2: EXCH B,C + JSR PC,CONVERT ;TRY CONVERTING 2ND ARG, TOO + BR EQFALS ;NOT SAME TYPE AS FIRST ARG + CMP B,C + BEQ EQTRUE + ADD D,PC ;JUMP TO EQFALS IF NUMERIC. + EQ.FAL==. + +;COMPARE TWO STRINGS. POINTERS IN B AND C. + MOV B,GCP1 + MOV C,GCP2 + SPUSH #INSTR1 + MOV B,F +CMPST1: BIT E,F ;IS ARG 1 ENDED + BEQ CMPSTE ;YES + SPUSH A ;SAVE A + MOV F,B ;POINTER TO REST OF ARG1 + JSR PC,.LOAD + MOV A,F ;POINTER TO REST OF ARG1 + SPOP A ;RESTORE A + TSTB B ;IS CHAR REAL OR NULL? + BEQ CMPST2 ;NULL + JSR PC,@(SP)+ ;PUTS 1 CHAR OF ARG 2 INTO B + BEQ CSFAL1 ;ARG 2 ENDED + CMPB D,B ;COMPARE CHARS!! + BNE CSFALS +CMPST2: SWAB B + BEQ CMPST1 ;NULL CHAR + JSR PC,@(SP)+ ;1 CHAR OF ARG 2 IN B + BEQ CSFAL1 + CMPB D,B ;COMPARE CHARS!! + BEQ CMPST1 +CSFALS: TST (SP)+ ;POP CO-ROUTINE LINKAGE +CSFAL1: CLR GCP1 + CLR GCP2 + BR EQFALS + +;ARG 1 HAS ENDED +CMPSTE: JSR PC,@(SP)+ + BNE CSFALS ;BUT ARG 2 HASN'T ENDED + CLR GCP1 + CLR GCP2 + BR EQTRUE ;BOTH ENDED AT THE SAME TIME!!!! + +;MORE PREDICATES + +GREATR: JSR PC,G2NARG + CMP B,A + BGT RTTRUE +RTFALS: PUSHS #FALSE +RTNCMP: JMP ORT + +LESS: JSR PC,G2NARG + CMP B,A + BGE RTFALS +RTTRUE: PUSHS #TRUE + BR RTNCMP + +GREQ: JSR PC,G2NARG + CMP B,A + BGE RTTRUE + BR RTFALS + +LSEQ: JSR PC,G2NARG + CMP B,A + BLE RTTRUE + BR RTFALS + +NUMBP: POPS B + MOV #LNUM,A + JSR PC,CONVERT + BR RTFALS ;COULDN'T CONVERT IT + BR RTTRUE + +EMPTYP: POPS B + BIT #7777,B + BEQ RTTRUE + BR RTFALS + +LISTP: POPS B + BIC #7777,B + CMP #SENT,B + BEQ RTTRUE + BR RTFALS + +WORDP: POPS B + BIC #7777,B + CMP #SENT,B + BEQ RTFALS + BR RTTRUE + IF: INC IFLEV + BIS #IFF,FLAGS + JSR PC,TSTST ;TEST S, SKIP IF "TRUE" + BR .+4 + BR IFR + JSR PC,STNE + BR IFR + BIC #RTF,FLAGS +IFR: JMP NORT +THEN: BIT #IFF,FLAGS + BNE IFR + ERROR+OOP ;THEN OUT OF PLACE + BR IFR +ELSE: BIT #IFF,FLAGS + BNE .+4 + ERROR+OOP ;ELSE OUT OF PLACE + JSR PC,STNE + BR IFR + DEC IFLEV + BGT IFR + BIC #IFF,FLAGS + BR IFR +STNE: JSR PC,GNT ;SCAN TOO NEXT ELSE + CMP #$ELSE,CT+2 + BNE STNE1 + BIS #RTF,FLAGS ;IF "ELSE", SET RTF AND SKIP RETURN + JMP SRET +STNE1: BIT #CRF,FLAGS + BEQ STNE2 +STNE3: BIS #RTF,FLAGS ;IF "CR" SET RTF AND RETURN + BIC #CRF,FLAGS + RTS PC +STNE2: CMP #$IF,CT+2 ;IF "IF", LOOK FOR NEXT ELSE! + BNE STNE + JSR PC,STNE + BR STNE3 + BIC #RTF,FLAGS + BR STNE + TSTST: PUSH A ;TEST S, SKIP IF TRUE + MOV @S,A ;ERROR IF NEITHER "TRUE" OR "FALSE" + PUSHS A + PUSHS #TRUE + JSR PC,CSEQ + BR TSTST1 + POPS A ;"TRUE", SKIP + JMP SRETA +TSTST1: MOV @S,A + PUSHS A + PUSHS #FALSE + JSR PC,CSEQ + ERROR+NTF ;NOT "TRUE" OR "FALSE" + POPS A + JMP RETA +CSEQ: PUSH A ;COMPARE TWO STRINGS - POINTERS ON S + PUSH B ;SKIP IF EQUAL + PUSH C ;ASSUMES NO "NULL" (8-BIT ON) CHARACTERS + PUSH D + MOV S,C + MOV (C)+,D ;GET STR 1 POINTER IN D + MOV @C,C ;GET STR 2 POINTER INTO C +CSEQ1: MOV D,B + CMP C,D ;CHECK IF POINTERS EQUAL + BEQ CSEQ3 + BIT #7777,B ;CHECK IF EITHER STRING DONE + BEQ CSEQ2 + BIT #7777,A + BEQ CSEQ2 + JSR PC,.LOAD ;GET NEXT NODE OF STR 1 + MOV A,D ;SAVE POINTER IN D + JSR PC,.LDP2I ;GET NEXT NODE OF STR 2 + CMP A,B + BEQ CSEQ1 +CSEQ2: POPS A + SPOPS A + BR RETD ;STRINGS NOT EQUAL +RETF: POP F +RETE: POP E +RETD: POP D +RETC: POP C +RETB: POP B +RETA: POP A +RET: RTS PC +CSEQ3: ADD #2,8.(P) ;STRINGS EQUAL + BR CSEQ2 + REVS: CMP #1,2(P) + BLT .+4 + RTS PC + PUSH A ;REVERSES THE TOP ((P)+1) THINGS ON S + PUSH B + PUSH C + PUSH D + MOV 10.(P),C + MOV S,A + MOV C,B + ASL B + ADD A,B + ASR C + BEQ REVS1 +REVS2: MOV @A,D + MOV -(B),(A)+ + MOV D,@B + DEC C + BGT REVS2 +REVS1: JMP RETD + .STITL CONVERSION ROUTINES + + +;CONVERT +;CALL WITH DESIRED DATA TYPE IN A +;CALL WITH POINTER TO DATA IN B +;IF CONVERSION SUCCEEDS, RETURN POINTER TO CONVERTED DATA IN B AND +;LEAVE A UNCHANGED. +; +;IF CONVERSION FAILS, LEAVE B UNCHANGED,BUT RETURN ITS DATA TYPE IN A + +CONVERT: + MOV A,-(SP) ;SAVE A,B,C HERE + MOV B,-(SP) + MOV C,-(SP) + + BIC #107777,A ;LEAVE DATA TYPE ONLY + MOV B,C + BIC #107777,C + ASR A ;SHIFT DESTINATION DATA TYPE 3 PLACES + ASR A + ASR A + BIS C,A ;SET SOURCE DATA TYPE IN THE 3 VACATED BITS + ASR A ;AND PLACE THE ENTIRE MESS IN BOTTOM 6 BITS + SWAB A +;(A IS NOW A 6 BIT DISPATCH ADDRESS) + MOVB CNVTBL(A),A ;PICK UP ENTRY FROM TABLE + BIC #177400,A ;CLEAR TOP BYTE + ASL A ;IT IS A BYTE ADDRESS + JSR PC,CNVTOP(A) ;RELATIVE TO CONVERT TOP + BR CONV.F ;THE CONVERSION FAILED + MOV (SP)+,C + TST (SP)+ ;DON'T RESTORE B + MOV (SP)+,A + JMP SRET ;SKIP RETURN + +CONV.F: MOV (SP)+,C + MOV (SP)+,B + MOV B,A + BIC #7777,A ;DATA TYPE OF ARG LEFT IN A + TST (SP)+ ;DON'T RESTORE A + RTS PC + + +;CONVERT ROUTINE JUMPS TO THE PROGRAMS HERE + +CNVTOP==. ;TOP OF CONVERT ROUTINES + +;THE ARGUMENT CAN'T BE CONVERTED TO DESIRED DATA TYPE +.CERR: RTS PC + +CNVNOP==<.-CNVTOP>/2 +;THE ARGUMENT ALREADY HAS THE DESIRED TYPE +.CNOP: SKPRET + +CA2LS==<.-CNVTOP>/2 +;CONVERT ATOM TO LSTR +.CATLS: JSR PC,.LOAD + SKPRET + +CSN2LN==<.-CNVTOP>/2 +;CONVERT SNUM TO LNUM. ASSUME NUMBER IN B, RATHER THAN POINTER +.CSNLN: MOV #SNUM,A + JSR PC,GRBAD ;STORE THE NODE A,B IN A NEW NODE + BIS #LNUM,C ;CPOINTS TO NEW NODE + MOV C,B + SKPRET + +;MORE CONVERSION ROUTINES + +CSN2LS==<.-CNVTOP>/2 +;CONVERT SNUM TO LSTR +.CSNLS: MOV D,-(SP) + MOV E,-(SP) + MOV F,-(SP) + MOV #MQ,A + MOV #<.CSNL4-.CSNL5>,E + CLR -(SP) ;MARK STACK + MOV B,(A) + BGT .CSNL0 + BLT .CSNLL + SPUSH #'0 ;NUMBER IS 0 + BR .CSNL2 + +.CSNLL: CLR E + NEG (A) ;SNUM WAS NEGATIVE +.CSNL0: MOV #10.,D +.CSNL1: JSR PC,.CNXTD ;GET NEXT DIGIT IN B + BR .CSNL2 ;NO MORE CHARS + SWAB B + MOV B,-(SP) + JSR PC,.CNXTD + BR .CSNL2 + BISB B,(SP) ;SET NEW CHAR INTO PREVIOUS ONE + BR .CSNL1 + +.CSNL2: MOV #SSTR,A + CLR F + ADD E,PC +.CSNL5: MOV #'-,B ;STAYS HERE IF ARG WAS NEGATIVE +.CSNL3: JSR PC,LISTB ;PUT NEXT 2 CHARS ONTO LIST +.CSNL4: MOV (SP)+,B + BNE .CSNL3 ;0 MARKS END OF DIGITS + POPS B ;POINTER TO FIRST NODE OF ANSWER + BIC #170000,B ;CLEAR DATA TYPE + BIS #LSTR,B ;REPLACE BY LSTR + +.SRDEF: CLR GCP1 + MOV (SP)+,F + MOV (SP)+,E + MOV (SP)+,D + SKPRET + +;GET NEXT CHARACTER IN B +;SKIP UNLESS NO MORE CHARS +.CNXTD: TST (A) ;IS THERE MORE NUMBER LEFT + BEQ .CLNR ;RTS PC + CLR -(A) ;CLEAR REMAINDER + MOV D,-(A) ;DIVIDE BY 10. + TST (A)+ + MOV (A)+,B ;REMAINDER IS NEXT DIGIT + ADD #60,B ;CONVERT TO ASCII + SKPRET + +;MORE CONVERSION ROUTINES + +CLN2SN==<.-CNVTOP>/2 +;CONVERT LNUM TO SNUM. RETURN NUMBER IN B +.CLNSN: JSR PC,.LOAD + CMP A,#SNUM + BEQ .CLNS1 +.CLNR: RTS PC ;CAN'T CONVERT IF LNUM HAS MORE THAN ONE NODE +.CLNS1: SKPRET + +CLN2LS==<.-CNVTOP>/2 +;CONVERT LNUM TO LSTR +.CLNLS: ;CONVERT LNUM TO LSTR + JSR PC,.CLNSN ;FOR NOW, CAN ONLY CONVERT + RTS PC ;IF LNUM HAS ONE NODE + JMP .CSNLS ;(WHICH MUST BE CHANGED SOMEDAY) + +CLS2SN==<.-CNVTOP>/2 +;CONVERT LSTR TO SNUM +.CLSSN: BIT #7777,B ;IS B EMPTY + BEQ .CLNR ;CAN'T CONVERT EMPTY + MOV D,-(SP) + MOV E,-(SP) + MOV F,-(SP) + MOV B,GCP1 ;POINT TO INPUT. (GETS CLEARED AT .RDEF & .SRDEF) + + MOV B,C + MOV #INSTR1,-(SP) ;ADD. OF CO-ROUTINE + CLR B + MOV #10.,E + MOV #MQ,F + CLR (F) ;ZERO AC AND MQ + +.CLSS0: TST (F)+ ;POINT TO MULTIPLY +.CLSS1: JSR PC,@(SP)+ ;OUTPUTS CHAR IN D + BEQ .CLSS9 + TST B ;IF NOT THE FIRST CHARACTER, + BNE .CNXN2 ;BRANCH. + INC B ;1 + CMPB D,#55 ;IS CHARACTER MINUS? + BNE .CNXN1 + NEG B ;-1 (MUST BE EXACTLY -1 FOR LATER USE) + BR .CLSS1 + +.CNXN1: CMPB D,#53 ;PLUS? + BEQ .CLSS1 ;(REMEMBER THAT D=1) + +.CNXN2: SUB #60,D ;CONVERT ASCII TO BINARY + BLT .CNXN9 + CMPB D,E ;COMPARE TO 10. + BGE .CNXN9 + MOV E,(F) ;MULTIPLY MQ BY 10. + BITB #SIPRBT,EAESR ;TEST SINGLE PRECISION BIT + BEQ .CNXN9 ;ANSWER NO LONGER SINGLE PRECISION + ADD D,-(F) ;ADD NEW NUMBER TO MQ + BR .CLSS0 + +.CNXN9: TST (SP)+ ;POP OFF ADDRESS OF CO-ROUTINE + JMP .RDEF ;RESTORE D,E,F + +.CLSS9: MOV B,(F) ;END OF STRING. MULTIPLY BY 1 OR -1 + MOV -(F),B ;PICK NUMBER OUT OF EAE + JMP .SRDEF ;RESTORE D,E,F AND SKPRET + +CLS2LN==<.-CNVTOP>/2 +;CONVERT LSTR TO LNUM +;FOR NOW ONLY WORKS IF NUMBER LESS THAN 16 BITS +.CLSLN: JSR PC,.CLSSN ;CONVERT TO SNUM + RTS PC + JMP .CSNLN + + +;THE DISPATCH TABLE FOR CONVERT + +CNVTBL: + .BYTE CNVNOP ;SNAP TO SNAP +REPT1 7,^\.BYTE 0\ ;NOT USED AT THIS TIME + +REPT1 2,^\.BYTE 0\ ;NOT USED AT THIS TIME + .BYTE 0 ;ATOM TO SNUM + .BYTE 0 ;ATOM TO LNUM + .BYTE CA2LS ;ATOM TO LSTR +REPT1 3,^\.BYTE 0\ ;NOT USED AT THIS TIME + +REPT1 2,^\.BYTE 0\ ;NOT USED AT THIS TIME + .BYTE CNVNOP ;SNUM TO SNUM + .BYTE CSN2LN ;SNUM TO LNUM + .BYTE CSN2LS ;SNUM TO LSTR +REPT1 3,^\.BYTE 0\ ;NOT USED AT THIS TIME + +REPT1 2,^\.BYTE 0\ ;NOT USED AT THIS TIME + .BYTE CLN2SN ;LNUM TO SNUM + .BYTE CNVNOP ;LNUM TO LNUM + .BYTE CLN2LS ;LNUM TO LSTR +REPT1 3,^\.BYTE 0\ ;NOT USED AT THIS TIME + +REPT1 2,^\.BYTE 0\ ;NOT USED AT THIS TIME + .BYTE CLS2SN ;LSTR TO SNUM + .BYTE CLS2LN ;LSTR TO LNUM + .BYTE CNVNOP ;LSTR TO LSTR +REPT1 3,^\.BYTE 0\ ;NOT USED AT THIS TIME + +REPT1 8.,^\.BYTE 0\ ;NOT USED AT THIS TIME (RNUM TO ANYTHING) + +REPT1 6,^\.BYTE 0\ ;NOT USED AT THIS TIME + .BYTE CNVNOP ;SENT TO SENT +REPT1 1,^\.BYTE 0\ ;NOT USED AT THIS TIME + +REPT1 7,^\.BYTE 0\ ;NOT USED AT THIS TIME + .BYTE CNVNOP ;LIST TO LIST + + .EVEN + + .STITL GET ARGUMENT ROUTINES + +;GET 2 SNUM'S OFF OF S PDL +;RETURN TOP ONE IN A, BOTTOM ONE IN B +G2NARG: JSR PC,G1NARG ;NUMBER IN B + MOV B,A + +;GET 1 SNUM OFF OF S PDL +;RETURN IT IN B +G1NARG: POPS B +G1NAR1: MOV A,-(SP) ;ENTER HERE WITH ARG IN B + MOV #SNUM,A + JSR PC,CONVERT +G1WTA: ERROR+WTAB ;WRONG TYPE OF ARG + MOV (SP)+,A +G1RET: RTS PC + +;GET ONE LIST OR WORD ARG +;SKIP IF WORD +GLWARG: MOV @S,B ;DON'T POP ARG. LEAVE IT GC PROTECTED +GLWAR1: MOV #LSTR,A + JSR PC,CONVERT + BR GSW1 ;NOT WORD + SKPRET +GSW1: CMP A,#SENT + BNE G1WTA ;NOT SENTENCE EITHER +GSW2: RTS PC + +;GET ONE LIST OR WORD. ERRROR IF EMPTY +GLWANE: MOV @S,B + BIT #7777,B + BEQ G1WTA + BR GLWAR1 + +;RETURN ONE NUMERIC ARGUMENT +;CALL WITH SNUM IN B +R1INT: JSR PC,GETINT +R1NARG: MOV #ORTB,-(SP) ;ENTER HERE FROM LOGO +P1NARG: JSR PC,.CSNLN ;CONVERT SNUM TO LNUM + NOP 1 + RTS PC + +PSHINT: JSR PC,GETINT +;PUSH A NUMBER ONTO THE S-PDL +PSHNUM: JSR PC,.CSNLN + NOP 1 + SPUSHS B + RTS PC + + +;GET 1 SNAP +; RETURN POINTER TO SNAP IN D, DELTA X IN E, DELTA Y IN F +G1SNAP: MOV @S,C ;POINTER TO ARG + BIT #7777,C ;IS IT EMPTY? + BEQ G1RET ;YES. RETURN WITHOUT SKIPPING + JSR PC,LD3NUM ;LOAD D,E,F + SKPRET + + +;LOAD 3 NUMBERS +; GROVEL DOWN A LIST OF NUMBERS RETURNING 3 NUMBERS IN D,E,F +; CALL WITH C POINTING TO LIST +; IF LIST CONTAINS 1)NON-NUMBERS OR 2)MORE THAN 3 ELEMENTS, +; THEN ERROR+WTA +LD3NUM: PUSH A + SPUSH B + SPUSH C + MOV #7777,D ;AN OFT USED CONSTANT + MOV #3,F ;COUNTER +LDN.L: BIT D,C ;IS THERE MORE LIST? + BEQ LDN.E ;ERROR + JSR PC,.LDP2I ;LOAD A WITH NEXT ELEMENT + MOV A,B + MOV #SNUM,A + JSR PC,CONVERT +LDN.E: ERROR+WTA + SPUSH B ;PUSH THIS ELEMENT + DEC F + BGT LDN.L ;LOOP BACK + BIT D,C ;IS THE LIST FINISHED? + BNE LDN.E ;NO. ERROR + JMP RETF ;SKIP RETURN AND RESTORE ALL AC'S! + .STITL EVAL + EVBUG=HALT + +EVAL: JSR PC,GNT + JSR PC,STRACE + BIC #7777,A + CMP A,#UFUN + BLOS EVFUN + CMP A,#UVAR + BEQ EVVAR + CMP A,#SSTR + BHIS .+4 + EVBUG + CMP A,#ATOM + BEQ EVATM + CMP A,#RNUM + BNE EVCON + EVBUG +EVCON: +EVATM: PUSHS CT+2 + BR EVI +EVVAR: BIC #7777,A + JSR PC,.BINDL + ERROR+HNV ;... HAS NO VALUE + PUSHS B +EVI: JSR PC,GNT ;ABOUT TO OUTPUT A VLAUE. BEFORE WE DO, CHECK TO SEE IF + ;NEXT TOKEN IS INFIX WHICH SHOULD GOBBLE IT. + BIC #7777,A ;IS NEXT TOKEN INFIX? + CMP #INFIX,A + BEQ CKPRCD ;YES +EVI1: BIS #RTF,@#FLAGS ;SET REPEAT TOKEN FLAG + BIC #CRF,FLAGS + JMP SRET + CKPRCD: TST CO+2 ;COMPARE PRECEDENCE + BEQ EVI2 + MOV @CT+2,A + BIC #7777,A + CMP A,COF + BLOS EVI1 ;PRECD OF CO IS >= PRECD OF NEXT OPR + ;NEXT TOKEN SHOULD GOBBLE THIS OUTPUT +EVI2: JSR PC,STRACE + PUSH CO + SPUSH CO+2 + SPUSH NOR + MOV CT,CO + MOV CT+2,CO+2 + MOV @CO+2,COF ;GET FLAGS + JSR PC,CKTYP + ERROR+WTA ;WRONG TYPE OF ARG + MOV #1,NOR + JMP EVW + EVFUN: BIT #CRF,FLAGS ;CT IS A FUNCTION + BEQ .+4 + ERROR+UEL ;UNEXPECTED END OF LINE + CMP #$LPAR,CT+2 + BNE EVF1 + TST CO+2 + BEQ EVF11 + CMP #$LLPAR,CO+2 + BNE EVF1 +EVF11: MOV #$LLPAR,CT+2 +EVF1: PUSH CO + SPUSH CO+2 + SPUSH NOR + MOV CT,CO + MOV CT+2,CO+2 + CMP A,#UFUN ;IS IT A USER FUNCTION? + BLO MFUN ;NO, MACHINE +EVF2: MOV #40000,COF ;SET PRECD TO 2 + JSR PC,GNASN ;GET NO. OF ARGS IN B + ERROR+HNM ;... HAS NO MEANING + MOVB B,B ;CLEAR ANY LEFT HALF FLAGS + MOV B,NOR + BNE EVL1 +EVXP: JMP PEVAL ;SET TO EVALUATE THIS USER PROCEDURE + ;PEVAL RETURNS TO "NORT" IF THERE WAS NO OUTPUT + ;GOES TO "ORT:" IF THERE WAS +MFUN: MOV @CO+2,A ;GET FLAGS FOR THIS MACHINE PROCEDURE + MOV A,COF + SWAB A + BIC #177774,A + MOV A,NOR + BNE EVS ;IS NO. ARGS = 0? +EVXM: JMP MEVAL ;YES. EXECUTE THIS MACHINE PROCEDURE +NORT: MOV #EVDNO,A +NORT1: MOV CO+2,LO+2 + MOV CO,LO + POP NOR + SPOP B + MOV B,CO+2 + SPOP CO + CLR COF + TST B + BEQ NORT2 + BIT #170000,B ;IS IT A UFUN + BNE NORT2 + MOV @B,COF +NORT2: JMP @A +EVDNO: RTS PC +EVS: BIT COF,#INFIX ;IS CO INFIX OP + BEQ EVL ;NO + JSR PC,CKUI ;CHECK FOR VALID UNARY INFIX +,- + ERROR+INF1 ;INFIX IN WRONG PLACE + BR EVW +PROC: JSR PC,GUOEB ;PEVAL INVOKED VIA "#" + ERROR+HNM ;HAS NO MEANING + CLR TOPS + MOV #UFUN,CO + MOV B,CO+2 + JMP EVF2 + +EVL: BIT #PTLPF,FLAGS ;WAS PREVIOUS TOKEN A LEFT PAREN + BEQ EVL1 + BIT #VNAF,COF + BEQ EVL1 + CLR NOR +EVL1: JSR PC,GNT + CMP #$OF,CT+2 + BEQ EVW +EVW1: BIS #RTF,FLAGS ;SET RTF + BIC #CRF,FLAGS +EVW: JSR PC,EVAL + BR EVW2 + JSR PC,CKTYP + ERROR+WTA ;WRONG TYPE + DEC NOR + BEQ EVX ;WHEN NOR = 0, WE'VE ENUF INPUTS + JSR PC,GNT + CMP #$AND,CT+2 ;SKIP NEXT TOKEN IF IT IS "AND" + BEQ EVW + TST NOR ;IF NOR < 0 AND NEXT TOKEN IS ")" THEN THE ")" + BGE EVW1 ;TERMINATES THE ARG SCAN FOR THE CO + CMP #$RPAR,CT+2 + BNE EVW1 + BIS #RTF,FLAGS + BIC #CRF,FLAGS + NEG NOR + JMP MEVALN +EVX: BIT #160000,CO ;IS IT A MACHINE PROCEDURE + BNE EVXP ;NO + BIT #VNAF,COF ;MACHINE PROC NOW HAS ITS "STD" NO. OF ARGS. + ;IF IT CAN TAKE A VARIABLE NO., THEN THE "STD" NO. HAS TO + ;BE PUSHED ON P + BEQ MEVAL + MOV COF,A + SWAB A + BIC #177774,A + MOV A,NOR + BR MEVALN +EVW2: CMP #$LLPAR,CO+2 ;EVAL SHOULD OUTPUT WHEN NOT AT TOP LEVEL + BEQ LLPAR ;EXCEPT WHEN CO IS LLPAR + ERROR+NOU ;WHAT, NO OUTPUT??!! +LLPAR: JSR PC,GNT + CMP #$RPAR,CT+2 + BNE EVW1 + JMP NORT + +ORTNA: SPUSH A + BR ORTNP +ORTNB: SPUSH B + BR ORTNP +ORTNC: SPUSH C + BR ORTNP +ORTND: SPUSH D + BR ORTNP +ORTNE: SPUSH E + BR ORTNP +ORTNF: SPUSH F +ORTNP: MOV (SP)+,@S + BR ORT + + +ORTA: SPUSH A + BR ORTSP +ORTB: SPUSH B + BR ORTSP +ORTC: SPUSH C + BR ORTSP +ORTD: SPUSH D + BR ORTSP +ORTE: SPUSH E + BR ORTSP +ORTF: SPUSH F +ORTP==. +ORTSP: PUSHS (SP)+ +ORT: MOV #EVI,A + JMP NORT1 +SRETF: POP F +SRETE: POP E +SRETD: POP D +SRETC: POP C +SRETB: POP B +SRETA: POP A ;POP A THEN SKIP RETURN +CKTYP: +SRET: + CMP #200,@0(P) ;SKIP RETURN. IS NEXT INST A 'JMP' OR HALT + BLOS .+6 + ADD #2,@P ;YES, SKIP 2 EXTRA + ADD #2,@P + RTS PC +CKUI: PUSH A + MOV CO+2,A + CMP A,#$PLUS ;+ + BNE CKUI1 + MOV #$UPLUS,CO+2 +CKUI0: MOV @CO+2,COF + MOV #1,NOR + JMP SRETA +CKUI1: CMP A,#$MINUS ;- + BNE CKUI2 + MOV #$UMINS,CO+2 + BR CKUI0 +CKUI2: POP A + RTS PC +MEVALN: PUSH NOR +MEVAL: MOV CO+2,A ;GET SOE POINTER + CLR NBKTS + JMP @2(A) ;JMP ADDR IS IN 2ND WORD + .STITL PROCEDURE EVALUATOR +PEVAL: MOV CO+2,B ;FIRST CHECK IF PROC IS THERE + JSR PC,.BINDF + ERROR+HNM ;PROCEDURE HAS NO MEANING + PUSH CPP ;PUSH THE WORLD! + SPUSH CPSN + SPUSH CLN + SPUSH CLP + SPUSH CLGN + SPUSH CTN + PUSH CTP + SPUSH FLAGS + SPUSH CO + SPUSH CO+2 + SPUSH IFLEV + ;GET ARG LIST - PUT UOE POINTERS AND VALUES FROM THERE ON S + MOV B,C ;SAVE PTR TO LLP + MOV CO+2,B + JSR PC,GNASN ;GET FLAGS,,#ARGS + HALT + HALT + MOV B,FLAGS + MOVB B,B + SPUSH B + BIC #-TPTF-1,FLAGS + BEQ PEV6 + MOV CO+2,B + INC FUNLEV + JSR PC,TINDNT + DEC FUNLEV + JSR PC,PPNAME + PRTXT ^\'S INPUTS: \ + MOV @P,B +PEV6: SPUSH C ;SAVE FOR BELOW + MOV B,D + BEQ PEV2 + JSR PC,.LOADC + JSR PC,.LOAD + SPUSH A ;SAV PTR TO REST OF LLP + SPUSH B ;FOR REVS + JSR PC,REVS + JSR PC,PUSHSN ;PUSH S BY (B) WORDS + MOV S,D + SPOP B ;REVS DOESNT POP + MOV D,E + ASL B + ADD B,E ;E POINTS TO FIRST ARG + MOV @P,B ;GET SAVED LLP PTR +PEV1: BIT #TPTF,FLAGS + BEQ PEV5 + MOV @E,B + MOV B,A + SPUSH D + JSR PC,PRTAB + SPACE + SPOP D + MOV @P,B +PEV5: JSR PC,.LOAD + MOV A,@P + MOV B,(D)+ ;SAVE UOE PTR + JSR PC,.BNDVN ;NOW GET VARIB. BINDING + BR PEV3 ;NOT THERE +PEV4: BIT #100000,A ;IF OLD VALUE SWAPPED OUT, CLEAR TYPE FIELD + BEQ .+6 + BIC #170000,B + MOV (E)+,A ;GET NEW VALUE PTR + MOV B,(D)+ ;SAVE OLD VALUE PO[NTER + MOV A,B + JSR PC,.LDP1 + BIC #100000,A ;MAKE SURE BINDING NODE SAYS "VBIND" + JSR PC,.STORE ;STORE NEW BINDING AWAY + MOV @P,B + BIT #7777,B + BNE PEV1 ;GO DO NEXT ARG + SPOP C ;USED LLP POINTER +PEV2: SPOP C ;PTR TO LLP THAT WAS SAVED WAY ABOVE + SPUSH CSPDLP + MOV S,CSPDLP + SUB SPRBAO,CSPDLP ;SPECIAL PDL RELATIVE BASE ADDR OFFSET + SPUSH CPDLP + MOV P,CPDLP + SUB PRBAO,CPDLP ;PDL RELATIVE BASE ADDR OFFSET + BIS #100000,CPDLP ;TO INDICATE PROC PUSH AS OPPOSED TO A LOCAL PUSH + MOV CO+2,CPP + CLR CLN + MOV C,CLP + MOV CPP,B ;GET CPSN IN A + JSR PC,GNASN + EVBUG + HALT + MOV A,CPSN + CLR CO + CLR CO+2 + CLR IFLEV + INC FUNLEV + JMP MLOOP +PEV3: MOV #VBIND,A + CLR B + JSR PC,GRBAD1 + BR PEV4 + PUSHSN: TST B ;PUSH (B) EMPTY WORDS ONTO S + BGT .+4 + RTS PC +PSN1: PUSHS #0 + DEC B + BGT PSN1 + RTS PC +PUSHN: TST B ;PUSH (B) EMPTY WORDS ON P + BGT .+4 + RTS PC + MOV @P,TEMP +PN1: PUSH #0 + DEC B + BGT PN1 + JMP @TEMP +TINDNT: PUSH A ;TRACE INDENT + PRCR + MOV FUNLEV,A +TIND2: DEC A + BGT TIND1 + JMP RETA +TIND1: SPACE + BR TIND2 + .STITL PROC EVAL - "OUTPUT" "STOP" +PSTP30: ERROR+OIP ;ONLY IN PROCEDURE +PSTP35: JMP PSTP33 +PSTP31: MOV #VBIND,A + POPS B + TST B ;IF OLD BINDING EMPTY, DONT BOTHER + BEQ PSTP35 + JSR PC,GRBAD1 + BR PSTP32 +OUTPUT: TST FUNLEV + BLE PSTP30 + MOV #ORT,PSTOPR ;"OUTPUT" + POPS TOPS1 ;SAVE THE OUTPUT + BR PSTP10 +STOP: +PSTOP: TST FUNLEV + BLE PSTP30 + MOV #NORT,PSTOPR ;"STOP" AND "END" + CLR TOPS1 +PSTP10: BIT #TPTF,FLAGS + BEQ PSTP14 + JSR PC,TINDNT + MOV CPP,B + JSR PC,PPNAME + MOV TOPS1,B + BEQ PSTP13 + PRTXT ^\ OUTPUTS \ + JSR PC,PNODAB ;USES A + SPACE + BR PSTP14 +PSTP13: PRTXT ^\ STOPS.\ +PSTP14: ADD #12,P ;TO GET BACK IN PHASE + MOV CPDLP,A + BIC #TF3,TFLAGS ;SAVE MODE OF PROC/LOCAL PUSH FLAG + BIT #100000,A + BEQ .+10 + BIS #TF3,TFLAGS + BIC #100000,A + BEQ .+6 + BIS #100000,A + ADD PRBAO,A +PSTP11: CMP A,P + BEQ PSTOP1 + BGT .+4 + HALT ;PDL SCREWED + POP B + BR PSTP11 +PSTOP1: POP CPDLP ;RESTORE OLD CPDLP + MOV CSPDLP,A + ADD SPRBAO,A +PSTP21: CMP A,S + BEQ PSTOP2 + BGT .+4 + HALT ;SPECIAL PDL OUT OF PHASE + POPS B + BR PSTP21 +PSTOP2: SPOP CSPDLP ;RESTORE OLD CSPDLP + SPOP D ;# ARGS SAVED + BEQ PSTOP4 ;NO ARGS +PSTOP3: POPS B ;GET NEXT UOE PTR + JSR PC,.BNDVN ;GET VARIB BINDING PTR + BR PSTP31 ;NONE THERE + BIT #100000,A ;IS IT SWAPPED OUT + BEQ .+6 ;NO + JSR PC,DSVB ;YES, DELETE SWAPPED VARIB + POPS B ;GET OLD VARIB BINDING + BIC #100000,A +PSTP32: TST B ;IF OLD PTR 0, SKIP SWAPPED TEST + BEQ PSTP34 + BIT #170000,B ;IS OLD BINDING SWAPPED + BNE PSTP34 + BIS #100000,A ;YES +PSTP34: JSR PC,.STORE ;RESTORE OLD BINDING +PSTP33: DEC D + BGT PSTOP3 +PSTOP4: BIT #TF3,TFLAGS ;WAS IT A LOCAL PUSH OR PROC PUSH + BEQ PSTOP ;LOCAL + CMP #ORT,PSTOPR ;WAS IT "OUTPUT" + BNE PSTP42 ;NO + PUSHS TOPS1 ;PUT THE OUTPUT BACK ON S + CLR TOPS +PSTP42: POP IFLEV ;PROC, RESTORE REST OF WORLD + SPOP CO+2 + SPOP CO + SPOP FLAGS + SPOP CTP + SPOP CTN + SPOP CLGN + POP CLP + SPOP CLN + SPOP CPSN + SPOP CPP + DEC FUNLEV ;IF AT TOP LEVEL, ALMOST DONE! + BLE PSTOP9 + MOV CPP,B + JSR PC,.BINDF ;MAKE SURE PROC IS IN + ERROR+PNH ;PROCEDURE ... NOT HERE + MOV CPP,B ;SEE IF PROC'S CPSN AGREE + JSR PC,GNASN ;GET CPSN + EVBUG ;IMPOSSIBLE!!! + HALT + MOV CLP,C + BIS #TF3,TFLAGS + CMP A,CPSN + BEQ PSTP41 ;OK + BIC #TF3,TFLAGS + MOV CLN,B ;DON'T AGREE, GO RELOCATE LINE WE WERE IN + JSR PC,GTLINE + BR PSTOP5 ;LINE NOT THERE +PSTP41: MOV C,CLP + JSR PC,.LOADC ;GET LLP NODE + JSR PC,.LOAD ;GET LINE # + MOV A,C + JSR PC,.LOADC ;GET NEXT NODE-SEE IF SNUM (I.E. GEN NO.) + BIC #7777,A + CMP #SNUM,A + BEQ .+4 + CLR B ;NOT SNUM, SO SET GEN NO. TO 0 + CMP B,CLGN ;ARE GEN #'S =? + BEQ .+4 +PSTOP5: ERROR+LCE ;NO, LINE CHANGED BY EDIT + BIT #TF3,TFLAGS ;IF PROC WASNT SWAPPED + BEQ PSTOP8 ;THEN CTP IS GOOD +PSTOP9: CLR D + MOV CTP,C + BR PSTOP6 +PSTOP8: MOV CTN,D ;OK, NOW GET NODE NO. + TST B ;IF B > 0, WE WERE LOOKING GEN NO. + BEQ PSTOP6 + JSR PC,.LDP1 +PSTOP7: MOV A,C +PSTOP6: JSR PC,.LOADC + DEC D + BGT PSTOP7 + MOV C,CTP + MOV A,CT + MOV B,CT+2 + JMP @PSTOPR + .STITL "TO" ETC. +EDIT: BIS #EDITF,FLAGS + BR .+10 +TO: BIC #EDITF,FLAGS + TST TOPRNM + BEQ TO8 + ERROR+CTIT ;CANT "TO" IN TO +TO8: JSR PC,GNT + BIC #7777,A + CMP #UFUN,A + BEQ TO1 + CMP #ATOM,A + BEQ TO1 + MOV B,TOPS ;FOR .INTRN + CMP #LSTR,A + BNE TO2 + JSR PC,.INTRN + BR TO1 +TO1: MOV B,TOPRNM + CLR TOPS + JSR PC,.BINDF + BR TO6 + MOV B,FNLLP + BIT #EDITF,FLAGS ;IS IT "EDIT"? + BNE TO5 ;YES + ERROR+PAE ;PROCEDURE ALREADY EXISTS +TO7: MOV CT,TOPS +TO3: JSR PC,GNT + BIT #CRF,FLAGS + BNE TO4 ;DONE + BIC #7777,A + CMP #UVAR,A + BEQ TO3 + ERROR+WIT ;WRONG TYPE OF INPUT TO "TO" +TO4: MOV #UFUN,A + MOV A,B + JSR PC,GRBAD1 ;THE UFUN BINDING NODE + MOV #LIST,A + MOV A,B + JSR PC,GRBAD2 ;FIRST NODE IN LLP + MOV C,FNLLP + MOV TOPS,C ;PTR TO REST OF LINE + CLR TOPS + JSR PC,CLE ;COUNT 'EM + MOV C,A + BIC #170000,A + BIS #SNUM,A + MOV FNLLP,C + JSR PC,GRBAD2 ;FIRST NODE OF LINE 0 (ARG LINE) + MOV B,D + MOV TOPRNM,B + JSR PC,.BNDFS ;GET SWAPPED FUNC BINDING NODE FOR THIS PROC + BR END1 ;NOT THERE + MOV B,C ;PTR TO LIST OF GOODIES + JSR PC,.LDP2 ;ALL THIS TO PRESERVE "TRACED" FLAG + BIC #377,A + ADD D,A ;#ARGS FROM ABOVE + JSR PC,.STP2 ;STORE # ARGS IN FIRST NODE + JSR PC,.LOADC ;TO GET ADDR OF NEXT NODE + MOV A,C + JSR PC,.LDP2 + INC A + JSR PC,.STP2 ;GET, INC AND STORE BACK CPSN + BR TO5 +END1: MOV #LNUM,B ;CREATE S. F. B. NODE STUFF + JSR PC,GRBAD1 + MOV #SNUM,A + MOV D,B ;# ARGS FROM ABOVE + JSR PC,GRBAD2 ; - # ARGS NODE + CLR B + JSR PC,GRBAD1 ; - CPSN NODE (START CPSN AT 0) +TO5: MOV #'>,PRMTCH + JMP NORT +TO2: ERROR+ILN ;INVALID LOGO NAME +TO6: BIT #EDITF,FLAGS ;IS IT "EDIT" + BEQ TO7 ;NO + ERROR+PNH ;YES, PROCEDUTE NOT HERE +GO: JSR PC,G1NARG + MOV B,CLN + CLR CLP + JMP NORT + TOLN: PUSH A ;TOKEN + SPUSH B ;LIST ON S + MOV @S,B + JSR PC,.LOAD + BIC #7777,A + CMP #SNUM,A ;IS FIRST THING A NUMBER + BNE TOLN1 ;NO + JSR PC,ADLN ;ADD LINE-LINE IS ON S + ;FNLLP POINTS TO FIRST NODE OF LIST OF LINE POINTERS +TOLN2: POPS A ;FINISHED WITH LINE + JMP RETB +TOLN1: CMP #$END,B + BEQ END + PRTXT ^\NO DIRECT WITHIN TO DEF YET.\ + BR TOLN2 +END: MOV TOPRNM,B + BEQ END2 + JSR PC,PPNAME + PRTXT ^\ DEFINED\ + PRCR + CLR TOPRNM + MOV #'?,PRMTCH +END2: JMP NORT + .STITL UTILITY - COUNT LIST ELEMENTS +CLE: ;COUNT LIST ELEMENTS + ;IN - LIST PTR IN C + ;OUT - # OF ELEMENTS IN B + PUSH A + SPUSH C + CLR B + MOV C,A +CLE1: BIT #7777,A + BEQ CLE2 + MOV A,C + JSR PC,.LDP1 + INC B + BR CLE1 +CLE2: POP C + SPOP A + RTS PC + ADLN: ;ON S IS A "NEW LINE" INSERT IN PROPER PLACE + ;IN LLP POINTED TO BY FNLLP. + PUSH A + SPUSH B + SPUSH C + SPUSH D + SPUSH E + SPUSH F + MOV @S,C + JSR PC,.LOADC + MOV B,F + MOV FNLLP,C + MOV C,D + JSR PC,.LOADC + MOV A,C + ;LOOK DOWN LLP FOR LINE #(@P) +ADLN1: MOV D,E ;SAVE PTR TO PREDECESSOR IN E + MOV C,D ;SAVE PTR TO CURRENT IN D + MOV #LIST,A + BIT #7777,C + BEQ ADLN2 ;AT END, ADD NEW NODE + JSR PC,.LOADC + MOV A,C ;SAVE PTR TO SUCCESSOR IN C + JSR PC,.LOAD + CMP B,F + BLT ADLN1 ;NOT THERE YET + BEQ ADLN3 ;FOUND LINE + MOV D,A ;PASSED IT, INSERT NEW LINE +ADLN2: MOV @S,B ;ADD NEW NODE TO END + MOV E,C + JSR PC,GRBAD1 +ADLN5: JMP RETF +ADLN3: ;FOUND LINE #.REPLACE THEN CHECK GEN. NO. + MOV A,E ;SAVE A, POINT TO FIRST TOKEN IN OLD LINE + MOV @S,A + MOV D,C ;D POINTS TO RELEVENT LLP NODE + JSR PC,.STP2 ;STORE LINK TO NEW LINE + TST FUNLEV ;IF AT FUNLEV 0, DON'T BOTHER WITH GEN # + BEQ ADLN5 + MOV E,C ;E POINTS TO OLD LINE + JSR PC,.LOAD ;GET NEXT NODE IN OLD LINE(1ST TOKEN OR GEN ) + BIC #7777,A + CMP #SNUM,A + BEQ ADLN4 + CLR B +ADLN4: INC B ;ALREADY HAS GEN NO. + MOV @S,C + JSR PC,.LDP1 + BIC #170000,A + BIS #SNUM,A + JSR PC,GRBAD1 + BR ADLN5 + GTLINE: ;GET LLP POINTER OF LINE WHOSE NO. IS IN B + ;FOR PROCEDURE PONTED TO BY "CPP" + ;OUTPUT - LLP PTR WILL BE IN C AND WILL SKIP + BIS #TF1,TFLAGS + BR .+10 +GNLINE: ;SAME EXCEPT LOOKING FOR LINE WHOSE # IS > # IN B + BIC #TF1,TFLAGS + PUSH A + SPUSH B + SPUSH C + SPUSH D + SPUSH E + MOV B,D + MOV CPP,B + JSR PC,.BINDF ;LOOK FOR PROC BINDING + EVBUG ;WHAT NO PROC BINDING??!! + HALT + MOV B,C + JSR PC,.LDP2I + MOV C,E +GNL1: BIT #7777,E + BEQ GNL4 ;NONE LEFT + MOV E,C + JSR PC,.LOADC ;GET NEXT NODE IN LLP + MOV A,E + JSR PC,.LOAD ;GET FIRST NODE OF THAT LINE + CMP B,D + BLT GNL1 ;NOT THERE YET + BEQ GNL2 ;FOUND IT + BIT #TF1,TFLAGS ;WENT PAST, WERE WE LOOKING FOR IT? + BEQ GNL3 ;NO, OK +GNL4: JMP RETE ;YES "NO SUCH LINE NO." +GNL2: BIT #TF1,TFLAGS ;FOUND IT, LOOKING FOR IT? + BEQ GNL1 ;NO, GET NEXT +GNL3: MOV C,4(P) ;OUTPUT (C) INTO C + JMP SRETE +GNASN: ;GET NO. OF ARGS AND CPSN OF USER PROC + ;IN: PROC PTR IN B + ;OUTPUT: CPSN IN A # IN B + ;DONT SKIP IF NO PROC + PUSH A + SPUSH B + SPUSH C + JSR PC,.BNDFS + JMP RETC + JSR PC,.LOAD + MOV B,2(P) ;# IN OLD B + JSR PC,.LOAD + MOV B,4(P) ;CPSN IN OLD A + JMP SRETC + .STITL UTILITY - LOAD AND STORE +.LOADC: MOV C,B ;NODE ADDR IN C + ;NODE RETURNED IN A,B +.LOAD: BIC #170000,B ;NODE ADDR IN B + ASL B ;NODE RETURNED IN A,B + ASL B + ADD UAB,B + MOV (B)+,A + MOV @B,B + RTS PC +.STORE: SPUSH C ;NODE ADDR IN C + BIC #170000,C + ASL C ;NODE IN A,B IS STORED AT C + ASL C + ADD UAB,C + MOV A,(C)+ + MOV B,@C + SPOP C + RTS PC + +.STP2: ;SAME AS .STP1 EXCEPT STORE IN 2ND WORD OF NODE + SEC ;THEN RESULT OF ROL'S WILL BE TWO GREATER THAN .STP1 + BR .+4 +.STP1: CLC ;STORE (A) IN FIRST WORD OF NODE AT C + SPUSH C ;NODE ADDR IN C + BIC #170000,C + ROL C + ROL C + ADD UAB,C + MOV A,@C + SPOP C + RTS PC + +.LDP2: SEC ;NODE ADDR IN C (TYPE FIELD =0) + BR .+4 ;LOAD 2ND WORD OF NODE INTO A +.LDP1: CLC ;SAME AS .LDP2 EXCEPT 1ST WORD + MOV C,A + BIC #170000,A + ROL A + ROL A + ADD UAB,A + MOV @A,A + RTS PC + +.LDP2I: MOV C,A ;SAME AS .LDP2 EXCEPT C WILL + BIC #170000,A ;CONTAIN ADDR OF NEXT NODE + ASL A + ASL A + ADD UAB,A + MOV (A)+,C + MOV @A,A + RTS PC + .STITL UTILITY - BINDING + ;INPUT: A=TYPE B=UOE POINTER + ; TOPS=0 OR TYPE+VALUE POINTER + ;OUTPUT: A - UCHANGED + ; B - EITHER UNCHANGED OR VALUE POINTER + ; C - POINTS TO BINDING NODE, EITHER + ; RELEVANT ONE OR LAST IN BINDING LIST + ; IF TOPS = 0, SKIPS IF BINDING FOUND + ; IF TOPS NOT = 0, TOPS WILL BE INSERTED + ; AS THE NEW VALUE POINTER (A NEW BINDING + ; NODE WILL BE ADDED IF NECESSARY) NEVER SKIPS. +.BINDL: TST TOPS + BEQ .BIND + PUSHS TOPS + CLR TOPS +.BIND: PUSH D + SPUSH B + SPUSH A +BINDF1: MOV B,C + JSR PC,.LOADC + MOV A,D + BIC #7777,D + CMP @P,D + BEQ BINDF4 ;FOUND IT + MOV A,B + BIT #7777,A + BNE BINDF1 + TST TOPS ;DIDNT FIND IT + BEQ BINDF2 ;SHOULD ONE BE CREATED? + SPOP A + MOV TOPS,B + JSR PC,GRBAD1 +BINDF5: POP D ;OLD B +BINDF3: SPOP D + RTS PC +BINDF2: POP A ;NO, DONT CREATE NODE + SPOP B + BR BINDF3 +BINDF4: TST TOPS ;FOUND, CHANGE VALUE POINTER? + BEQ BINDF6 + MOV TOPS,A ;YES + DONT SKIP + JSR PC,.STP2 + POP A + BR BINDF5 +BINDF6: POP A ;NO, LEAVE VALUE POINTER, BUT SKIP + POP D ;OLD B + POP D + JMP SRET + .BINDF: MOV #FBIND,A ;GET FUNCTION BINDING, SWAP IN IF NECESSARY + ;PTR TO UOE IN B + ;OUTPUT AS IN .BIND: EXCEPT A = #FBIND + JSR PC,.BINDL ;LOOK FOR FUNCTION BINDING + BR BIF1 ;NOT THERE + JMP SRET +BIF1: MOV #SFBIND,A ;OK, THEN, LOOK FOR SWAPPED FUNCTION BINDING + JSR PC,.BINDL + RTS PC ;PROC NOT DEFINED + JSR PC,PSWPIN ;GO GET IT + JMP SRET +.BNDVS: ;GET VARIABLE BINDING, SWAPIN IF NECESSARY + ;INPUT AND OUTPUT SIMILAR TO .BINDF + BIS #TF2,TFLAGS + BR .+10 +.BNDVN: ;SAME AS ABOVE EXCEPT DONT SWAP + BIC #TF2,TFLAGS + MOV #VBIND,A + JSR PC,.BINDL ;LOOK FOR BINDING + BR BIV1 ;NOPE + JMP SRET ;FOUND IT +BIV1: MOV #SVBIND,A ;LOOK FOR SWAPPED BINDING + JSR PC,.BINDL + RTS PC ;LOSE AGAIN - UNDEFINED + BIT #TF2,TFLAGS ;FOUND IT, SWAP IT IN? + BEQ .+6 + JSR PC,VSWPIN ;YES + JMP SRET +.BNDFS: MOV #SFBIND,A ;LOOK FOR SWAPPED FUNCTION BINDING + JSR PC,.BINDL + RTS PC + JMP SRET + .STITL .INTRN!! +.OBSCH: ;SAME AS .INTRN EXCEPT WONT INSERT IF ENTRY ISNT FOUND + ;(ALSO SEE UOBSCH ON NEXT PAGE) + BIC #TF5,TFLAGS + BR .+10 +.INTRN: ;(ALSO SEE UINTRN ON NEXT PAGE) + ;INPUT: TYPE IN A, LSTR IN "TOPS" + ;OUTPUT: IF TYPE IS UFUN OR SFUN, SEARCH SYSTEM OBLIST FIRST. + ; IF FOUND THERE, RETURN THAT PTR IN B, MAKING TYPE OF A + ; TO "SFUN". IF NOT FOUND THERE, AND IF A=UFUN, OR IF TYPE + ; IS > "UFUN", DO THE LOOKUP IN THE USER OBLIST. + ; RETURN WITH THE UOE PTR IN B. DONT SKIP IF A NEW ONE + ; HAD TO BE ADDED. + BIS #TF5,TFLAGS + PUSH A + SPUSH B + SPUSH C + MOV TOPS,C + CMP #UFUN,A ;IS TYPE SFUN OR UFUN + BLO INT2 ;NO + JSR PC,SSOL ;YES, SEARCH SYSTEM OBLIST + BR INT1 ;NOT THERE + CLR A ;SET A TO TYPE "SFUN" (=0) + MOV A,4(P) + BR INT5 +INT1: TST A ;IS A = TYPE SFUN + BEQ INT0 ;YES, DONE, DONT SKIP +INT2: JSR PC,HSSL ;NO, HASH TO AND SEARCH SUBLIST + BR INT3 + MOV @B,B + JSR PC,.LOAD ;GET UOE PTR +INT5: MOV B,2(P) + JMP SRETC ;FOUND IT +INT3: BIT #TF5,TFLAGS ;NOT THERE, SHOULD IT BE ADDED + BEQ INT0 ;NO, RETURN AND DONT SKIP + JSR PC,.GRAB ;YES + MOV @B,A + MOV C,@B ;UPDATE BUCKET POINTER + JSR PC,.GRAB + MOV C,2(P) ;NEW UOE PTR + MOV @B,C + MOV 2(P),B + JSR PC,.STORE + MOV B,C + MOV #ATOM,A + MOV TOPS,B + JSR PC,.STORE +INT0: JMP RETC + + +;"UNPURE" .INTRN AND .OBSCH +;BY "UNPURE" IT IS MEANT THAT THE INPUT STRING MAY INCLUDE +;NULL CHARACTERS +;SPECIFICATIONS ARE OTHERWISE IDENTICAL TO .INTRN AND .OBSCH +UOBSCH: MOV #,-(SP) + BR UINOB + +UINTRN: CLR -(SP) +UINOB: PUSH A + PUSH B + PUSH C + MOV TOPS,B + JSR PC,CPYSTR ;OUTPUT POINTER IN B TO STRINWITH NO NULLS + MOV B,TOPS + POP C + POP B + POP A + + ADD (SP)+,PC +UINCON: JSR PC,.INTRN ;CONTINUES HERE IF UINTRN + RTS PC ;THE PURE STRING WAS ADDED BY .INTRN +UOBSKP: JSR PC,FRELST ;PURE LIST NOT ADDED. FREE IT + SKPRET + +UOBCON: JSR PC,.OBSCH ;CONTINUES HERE IF UOBSCH + JMP FRELST ;FREE PURE STRING AND DON'T SKIP RETURN + BR UOBSKP ;FREE IT AND SKIP + SSOL: ;SEARCH SYSTEM OBLIST + ;INPUT: C POINTS TO STRING + ;OUTPUT: SKIP = FOUND AND SOE PTR IN B + ; NO SKIP = NOT FOUND AND NO CHANGE + ;NULL MUST BE USED AS FILLER CHAR BUT NOT BE IMBEDDED + PUSH A + SPUSH B + SPUSH C + SPUSH D + SPUSH E + SPUSH F + JSR PC,.LOADC + MOV B,D + SPUSH A + MOV SOBP2,E + MOV #SOBLST,F +SSOL1: ASR E + BIT #177776,E + BEQ SSOL5 + ADD E,F + CMP F,SOOMX + BHIS SSOL2 + MOV @F,B + ADD #4,B + MOV @P,C + MOV D,A + BR SSOL6 +SSOL4: JSR PC,.LDP2I +SSOL6: CMPB A,(B)+ + BHI SSOL1 + BLO SSOL2 + SWAB A + CMPB A,(B)+ + BHI SSOL1 + BLO SSOL2 + BIT #7777,C + BNE SSOL4 + TSTB (B) ;AT END OF STRING, IS IT END OF SYS PNAME + BEQ SSOL3 ;YES + TSTB -1(B) ;NO, BUT CHECK IF PREV CHAR WAS TERMINATOR + BNE SSOL2 +SSOL3: SPOP A + MOV @F,10(P) ;YES, SAVE F AS OUTPUT + JMP SRETF +SSOL5: SPOP A + JMP RETF +SSOL2: SUB E,F + BR SSOL1 + HSSL: ;HASH, THEN SEARCH SUB-LIST + ;INPUT: C POINTS TO LSTR + ;OUTPUT: B POINTS TO SUBLIST PTR. RELEVANT ENTRY WILL + ; WILL BE AT HEAD OF SUBLIST. SKIPS IF ONE FOUND. + PUSH A + SPUSH B + SPUSH C + SPUSH D + SPUSH E + SPUSH F + JSR PC,.LOADC ;GET FIRST CHARS INTO B + MOV B,D + MOV A,E ;PTR TO REST OF ARG + MOV #MQ,A + MOV B,(A) + CLR -(A) ;DIVIDEND IS 0,,(B) + MOV #HCC,-(A) ;DIVIDE BY HASH CODE CONSTANT + TST (A)+ + MOV (A),B ;GET REMAINDER + ROL B + ADD SUHCT,B + MOV B,10(P) ;FOR OUTPUT + MOV @B,F + BEQ HSSL6 ;NO ENTRYS IN THIS BUCKET + MOV F,C + SPUSH C +HSSL1: JSR PC,.LOADC ;GET NEXT SUBLIST NODE + MOV A,@P + JSR PC,.LOAD ;GET UOE PNAME NODE + JSR PC,.LOAD ;GET FIRST NODE OF PNAME + CMP B,D ;ARE THE FIRST 2 CHAR = + BNE HSSL2 ;NO + PUSHS A ;YES, COMPARE REST OF STRING + SPUSHS E + JSR PC,CSEQ + BR HSSL2 ;NOT EQUAL +HSSL3: CMP F,C ;IF F = C, THEN LOCATED UOE WAS FIRST SO DONE + BNE HSSL4 + SPOP A +HSSL5: JMP SRETF +HSSL2: MOV C,F ;NOPE, SAVE THIS PTR FOR PREDECESSOR + MOV @P,C ;GET SAVED PTR TO NEXT SUBLIST NODE + BIT #7777,C + BNE HSSL1 + POP A +HSSL6: JMP RETF +HSSL4: MOV @12(P),A ;MOVE ENTRY TO HEAD OF BUCKET + JSR PC,.STP1 ;NEW TOP NOW PIONTS TO OLD TOP + MOV C,@12(P) ;UHCT ENTRY NOW POINTS TO NEW TOP + MOV F,C + SPOP A + JSR PC,.STP1 ;NEW TOP'S OLD PREDECESSOR NOW LINKED TO ITS SUC. + BR HSSL5 +WIPOBS: RTS PC ;WIPE WIPERS FROM OBLIST + .STITL MINI SWAPPING +PSWPIN: HALT +PSWPOT: HALT +VSWPIN: HALT +VSWPOT: HALT +DSVB: HALT ;DELETE SWAPPED VARIABLE BINDING + .STITL UTILITY - GRAB NODE ROUTINES +.GRAB: PUSH A ;GRAB A FREE NODE - PTR IN C; CLEAR IT + SPUSH B + CLR A + CLR B + JSR PC,GRBAD + JMP RETB +GRBAD2: SEC ;GRAB A FREE NODE, FILL IT WITH A,,B + ;IF C NOT =0, PUT PTR TO NEW NODE IN WORD 2 OF NODE(C) + BR .+6 +GRBAD: CLR C ;SAME AS ABOVE EXCEPT NEW POINTER ALWAYS IN C +GRBAD1: CLC ;SAME AS ABOVE EXCEPT NEW PTR IN WORD 1 + SPUSH A + BIC #170000,C + BEQ GRB2 ;C IS ZERO, FORGET STORING NEW NODE PTR + ROL C + ROL C + ADD UAB,C +GRB2: MOV UNGRAB,A + BNE GRB1 + MOV FREE,A + BNE GRB1 + JSR PC,.GCOLL + MOV FREE,A + BNE GRB1 + ERROR+NSL ;NO STORAGE LEFT +GRB1: CLR UNGRAB + TST C + BEQ GRB3 + BIC #170000,A + BIC #7777,@C + ADD A,@C +GRB3: MOV A,C + JSR PC,.LDP1 + BIC #170000,A + MOV A,FREE + SPOP A + JSR PC,.STORE + RTS PC + ;.STITL UTILITY - FREE NODE ROUTINES +.FREE: SPUSH A ;RETURN NODE IN C TO FREE STORAGE + MOV FREE,A + JSR PC,.STP1 + BIC #170000,C + MOV C,FREE + SPOP A + RTS PC +FRELST: TST TOPS + BNE .+4 + RTS PC + PUSH A ;RETURN LIST IN TOPS TO FREE STORAGE + SPUSH B + SPUSH C + MOV TOPS,C +FRL1: JSR PC,.LOADC + BIT #7777,A + BEQ FRL2 + MOV A,C + BR FRL1 +FRL2: ADD FREE,A + JSR PC,.STORE + MOV TOPS,FREE + BIC #170000,FREE + CLR TOPS + JMP RETC +  \ No newline at end of file diff --git a/PDP11/11logo/read.62 b/PDP11/11logo/read.62 new file mode 100644 index 00000000..ce118096 --- /dev/null +++ b/PDP11/11logo/read.62 @@ -0,0 +1,899 @@ + .STITLE READ - +VERN==VERN+%FNAM2 + +READ: PUSH A + SPUSH B + SPUSH C + SPUSH D + SPUSH E + SPUSH F + CLR RDFLAG + MOV @S,GNCN + BIC #170000,GNCN + CLR F +READA: JSR PC,RDWRD + BR READB + BIS #SEPF,RDFLAG + JSR PC,CKDOTF +READC: JSR PC,LISTB + BIT #SEPF,RDFLAG + BEQ READA +READB: BIC #SEPF,RDFLAG ;CHECK SPECIAL CHAR IN D + JSR PC,CKDOTF ;FIRST CHECK FOR PENDING ":" + CMP #15,D + BEQ READR ;C-R + CMP #'",D + BEQ READS ;STRING + CMP #'[,D + BEQ READL ;LIST + CMP #'],D + BNE .+4 + ERROR+COP ;CHAR (]) OUT OF PLACE + CMP #':,D + BEQ READD ;DOTS + BITB #OPERF,DTBL(D) ;IS CHAR AN OPERATOR + BEQ READA ;NO + MOVB DTBL2(D),A + ASL A + MOV SOBLSU(A),B + ;SET TYPE TO SFUN OR INFIX + MOV @B,A ;THIS HACK WORKS BECAUSE #SFUN=0 + BIC #-INFIX-1,A ; AND #INFIX=10000 + BR READC + READR: POPS A + MOV A,@S + CLR TOPS + JMP RETF +READS: JSR PC,GNC + JSR PC,RDST + BR .+2 ;RDST ALWAYS SKIPS + BIS #SEPF,RDFLAG + BR READC +READL: JSR PC,RDLST + POPS TOPS + BIC #SEPF,RDFLAG + BR READC +READD: BIS #DOTF,RDFLAG + BR READA + .STITLE READ - READ WORD + ;READ CHARS UP THRU NEXT SEPARATOR CHAR. IF JUST A SEP, + ;RETURN WITH IT IN D. OTHERWISE NUMBERIFY OR INTERN CHAR STRING, + ;SKIP RETURN WITH TOKEN IN A,,B +RDWRD: CLRB RDFLAG + JSR PC,BLSTI +RDWA: JSR PC,GNC + MOVB DTBL(D),A ;GET FLAGS IN A + BIT #SEPF,A ;IS THIS CHAR A SEPARATOR? + BNE RDWB ;YES + BISB A,RDFLAG + JSR PC,BLST + BR RDWA +RDWB: JSR PC,BLSTF ;FINISH OFF STRING + RTS PC ;NO CHARS SEEN BEFORE SEP + BIT #NNUMF,RDFLAG + BNE RDWC ;NOT A POSSIBLE NUMBER + MOV TOPS,B + MOV #LNUM,A + JSR PC,CONVER ;TRY MAKING A # + SKPRET ;LOST SO LEAVE AS LSTR + SKPRET ;OK +RDWC: MOV #UFUN,A ;TRY TO INTERN STRING IN TOPS AS A SYSTEM OR USER FUNCTION + BIT #DOTF,RDFLAG ; UNLESS DOTF ON, THEN AS USER VARIABLE + BEQ RDWD + MOV #UVAR,A + BIC #DOTF,RDFLAG +RDWD: JSR PC,.INTRN ;RDSTR COMES HERE ALSO + BR RDWE + JSR PC,FRELST +RDWE: BIS A,B + SKPRET + .STITLE READ - READ STRING + ;READ CHAR UP TO NEXT SPACE OR ] IF INSIDE + ;A LIST. DONT ALLOW ] OR [. + ;ALWAYS SKIPS +RDST: CLRB RDFLAG + JSR PC,BLSTI + BR RDSB +RDSA: JSR PC,GNC +RDSB: MOVB DTBL(D),A + BIT #SEPF,A + BEQ RDSE + CMP #' ,D + BEQ RDSX + CMP #'],D + BEQ RDSC + CMP #'[,D + BEQ RDSX + CMP #15,D + BEQ RDSX +RDSE: BIS A,RDFLAG + JSR PC,BLST + BR RDSA +RDSC: TST LISTBD ;ARE WE IN LIST + BNE RDSX ;YES +RDSD: ERROR+COP ;CHAR (D) OUT OF PLACE +RDSX: MOV #LSTR,A + MOV #LSTR, B + JSR PC,BLSTF +RDSR: RTS PC ;EMPTY STRING + MOV #LSTR,A + MOV TOPS,B + BIT #NNUMF,RDFLAG + BEQ RDSR ;IT IS A POSSIBLE NUMBER + BIT #SEPF,RDFLAG + BNE RDSR ;IT HAS A SEP CHAR IN IT + MOV #ATOM,A + JMP RDWD ; INTERN IT + .STITL READ - READ LIST + ;READ THRU MATCHING ] MAKING A LIST AS U GO +RDLST: CLRB RDFLAG + JSR PC,SLISTB +RDLA: JSR PC,GNC + CMP #' ,D + BEQ RDLA ;SKIP OVER SPACES + CMP #'[,D + BEQ RDLB ;READ A LIST + CMP #'],D + BEQ RDLY ;DONE + JSR PC,RDST ;READ A STRING + BR .+2 ;RDST ALWAYS SKIPS +RDLX: JSR PC,LISTB ;ADD THIS NODE TO LIST + CMP #'[,D + BEQ RDLB + CMP #'],D ;AT END? + BNE RDLA ;NO, GET NEXT ELEMENT +RDLY: JSR PC,FLISTB + RTS PC +RDLB: JSR PC,RDLST + POPS TOPS + CLR D + BR RDLX + .STITLE READ - MISC +CKDOTF: BIT #DOTF,RDFLAG + BEQ LISTBR + BIC #DOTF,RDFLAG + PUSH A + SPUSH B + MOV #SFUN,A + MOV #$DOTS,B + JSR PC,LISTB + JMP RETB +LISTB: MOV F,C ;BUILD A LIST, ADD NODE IN A,,B TO + JSR PC,GRBAD1 ;LIST WHOSE LAST NODE PTR IS IN F + TST F + BNE LISTB1 + PUSHS C + BIS #LIST,@S +LISTB1: MOV C,F +LISTBR: RTS PC +SLISTB: MOV @P,A ;START LISTB SAVE RETURN + MOV F,@P ;SAVE CURRENT LAST NODE PTR + CLR F + INC LISTBD + JMP @A +FLISTB: POP C ;SAVE RETURN + TST F + BNE FLSB1 + PUSHS #LIST +FLSB1: POP F ;RESTORE OLD CURRENT NODE PTR + MOV #LIST,A + MOV @S,B + JMP @C + BLSTI: CLR NCHR + CLR E + CLR TOPS +BLSTI1: BIS #100000,E + RTS PC +BLST: ;BUILD STRING - CHAR IN D, USES E + ;DESTROYS A,B,C + PUSH A + SPUSH B + SPUSH C + BIT #200,D ;CHECK IF IGNORE BIT ON + BNE BLSTRT + BIT #177,D ;CHECK IF NULL + BEQ BLSTRT + INC NCHR ;WE HAVE A CHAR + ADD #40000,E + BGE BLST2 ;IS IT THE SECOND + MOVB D,TEMP ;NO, 1ST +BLSTRT: JMP RETC +BLST2: MOVB D,TEMP+1 ;IT IS THE SECOND CHAR + MOV TEMP,B + ;STORE THE CHARACTERS +BLST3: JSR PC,BSAN + BIS #100000,E + BR BLSTRT +BLSTF: ;FINISH BUILDING STRING, PUT PTR IN TOPS. + ; DONT SKIP IF EMPTY STRING (TOPS=0) + TST NCHR + BEQ BSANR ;EMPTY STRING + ADD #40000,E + BGE .+4 ;IS LAST NODE USED + SKPRET + PUSH A + SPUSH B + SPUSH C + MOVB TEMP,B ;YES + JSR PC,BSAN +BLSTF1: JMP SRETC +BSAN: MOV E,C + MOV #SSTR,A + JSR PC,GRBAD1 + TST E + BNE BSAN1 + MOV C,TOPS ;SAVE NEW STRING PTR ON S + BIS #LSTR,TOPS +BSAN1: MOV C,E +BSANR: RTS PC + .STITL GNC - GET NEXT CHAR +GNC: PUSH A ;GET NEXT CHAR INTO D + SPUSH B ;INITIALIZE BY MOVING LSTR PTR INTO GNCN +GNC4: MOVB GNCN+2,D ; AND CLEARING TYPE FIELD (#170000) + MOV GNCN,B ;SKIPS UNLESS NO MORE CHAR + BLT GNC1 ;JUST GOT 2ND CHAR + BNE GNC3 + MOV #15,D + JMP RETB ;NONE LEFT +GNC3: JSR PC,.LOAD ;GET NEXT NODE + BIS #100000,A ;SET "STILL ANOTHER CHAR" BIT + MOV A,GNCN + MOVB B,D ;FOR OUTPUT + SWAB B + MOVB B,GNCN+2 +GNC2: TST D + BEQ GNC4 ;IGNORE NULL CHARS + JMP RETB +GNC1: BIC #170000,GNCN ;CLEAR "STILL ..." BIT + BR GNC2 + .STITL ERRORS AND HANDLER +EMTBK: MOV #SRET,@P ;FAKE IT OUT + RTI +ERRBK: PUSH A + MOV 2(P),A ;GET LOC OF ERROR + MOV #TYO,PCHR + JSR PC,PRONL ;PRINT ADDR WHERE ERROR OCCURED + SPACE + MOV -2(A),A ;GET ERROR # + BIC #177400,A + ASL A + MOV ERTAB(A),A ;POINTS TO LIST FOR THIS ERROR + JMP @A ;XFER TO LIST +ERRRT: POP A + RTI + +ERTAS: SPUSH A + MOV 2(P),A ;TYPE ASCIZ STRING, STRING FOLLOWS CALL + JSR PC,PRAS + BIT A,#1 ;IF STRING STOPPED ON ODD ADDR + BEQ .+4 + INC A ;MAKE IT EVEN + MOV A,2(P) + SPOP A + RTS PC +PRLO: PUSH A ;PRINT LAST OPERATOR + SPUSH B + MOV LO,A + BEQ EMPTY + MOV LO+2,B + BR PRCO1 +PRCO: PUSH A, ;PRINT CURRENT OPERATOR + SPUSH B + MOV CO,A + MOV CO+2,B + BEQ EMPTY +PRCO1: SPUSH D + JSR PC,PROAB + SPOP D + JMP RETB +PROAB: CMP A,#UFUN ;PRINT OPERATOR IN A,B + BLO PRCO2 + JMP PPNAME ;PRINT PNAME +PRCO2: MOV B,A ;SYSTEM FUNCTION + ADD #4,A + JMP PRAS ;PRINT ASCIZ PNAME + EMPTY: PRTXT ^\ EMPTY \ + JMP RETB +ERTAP: MOV @(P),A ;TYPE ASCIZ STRING, POINTER FOLLOWS CALL + INC @P + INC @P +PRAS: SPUSH D ;PRINT ASCIZ STRING POINTED TO BY A +PRAS1: MOVB (A)+,D + BEQ PRASR + JSR PC,@PCHR + BR PRAS1 +PRASR: SPOP D + RTS PC +PRON: BIC #TF2,TFLAGS ;PRINT OCTAL NO., NO. IN A + BR PRON1 ;CALL- JSR PC,PRON +PRONL: BIS #TF2,TFLAGS +PRON1: PUSH A ;PRON DOESN'T PRINT LEADING ZEROS, PRONL DOES + SPUSH D + CLR D + SEC + ROL A ;TO TELL WHEN WE ARE DONE + BR PRON2 +PRON3: CLR D + ASL A + BEQ PRON5 + ROL D + ASL A + ROL D + ASL A +PRON2: ROL D + BNE PRON4 + BIT #TF2,TFLAGS + BEQ PRON3 +PRON4: BIS #TF2,TFLAGS + BIS #60,D + JSR PC,@PCHR + + BR PRON3 +PRON5: BIS #60,D + BIT #TF2,TFLAGS + BNE .+6 ;IF NOTHING HAS BEEN TYPED, TYPE A ZERO + JSR PC,@PCHR + SPOP D + SPOP A + RTS PC + PRDNL: BIS #TF1,TFLAGS + BR .+10 +PRDN: BIC #TF1,TFLAGS ;PRINT DECIMAL NO. IN A + PUSH B + SPUSH D + MOV #10,B + MOV A,MQ + BGE PRDN1 + NEG MQ ;ITS NEGATIVE + MOV #'-,D + JSR PC,@PCHR +PRDN1: MOV DTOTB(B),DIVIDE + BIT #TF1,TFLAGS + BNE PRDN2 + BITB #MQZ,EAESR ;> ZERO? + BNE PRDN3 ;NO + BIS #TF1,TFLAGS +PRDN2: MOV MQ,D + ADD #'0,D + JSR PC,@PCHR +PRDN3: MOV AC,MQ + SUB #2,B + BNE PRDN1 + MOV MQ,D + ADD #'0,D + JSR PC,@PCHR + POP D + SPOP B + RTS PC +DTOTB: 1. + 10. + 100. + 1000. + 10000. +EMPTY1: JMP EMPTY + PRS1: PUSH A ;PRINT TOP ELEMENT OF SS + SPUSH B + MOV CSPDLP,A + ADD SPRBAO,A + CMP A,S + BLOS EMPTY1 + MOV @S,B + SPUSH D + JSR PC,PNODAB + SPOP D + JMP RETB +PNODAB: MOV B,A + BIC #7777,A + CMP #SSTR,A + BEQ PRS11 + CMP #ATOM,A + BLOS PRS11 + ERROR+INVN ;INVALID NODE +PRS11: JSR PC,PRDATA + RTS PC +PRCT: PUSH A ;PRINT CURRENT TOKEN + SPUSH B + SPUSH D + MOV CT,A + MOV CT+2,B + JSR PC,PRTAB + SPOP D + JMP RETB +PRTAB: BIC #7777,A ;PRINT TOKEN IN A,B + CMP A,#UVAR + BHIS .+6 + JMP PROAB + CMP A,#UVAR + BEQ PRUV + BR PRDATA + PRATM: BIS #PQF,FLAGS2 ;PRINT ATOM IN A,B + BR PRUV1 +PRUV: MOVB #':,D ;PRINT USER VARIABLE IN A,B + JSR PC,@PCHR +PPNAME: BIC #PQF,FLAGS2 ;PRINT PNAME - UOE PTR IN B +PRUV1: JSR PC,.LOAD + JMP PRLSTR ;PRINT PNAME +PRDATA: CMP #LNUM,A ;PRINT DATA IN A,B. 7777 FIELD OF A IS 0000 + BEQ PRNUM ;NUMBER + CMP #SNUM,A + BEQ PRNUM + BIS #PQF,FLAGS2 ;SET PRINT QUOTE FLAG + CMP #ATOM,A + BEQ PRUV1 + CMP #LSTR,A + BEQ PRLSTR ;LONG STRING + CMP #SSTR,A + BEQ PRSSTR ;SHORT STRING + BIC #PQF,FLAGS2 + CMP #LIST,A + BEQ PRLST + ERROR+CPS ;CANT PRINT A SNAP +PRLSTR: JSR PC,.LOAD ;PRINT LONG STRING +PRSSTR: JSR PC,PRQQ ;PRINT SHORT STRING +PRSTR2: MOVB B,D + BLE PRSTR3 ;NULL CHAR + JSR PC,@PCHR +PRSTR3: SWAB B + MOVB B,D + BLE PRSTR4 ;NULL CHARACTER + JSR PC,@PCHR +PRSTR4: MOV A,B + BIC #170000,B + BEQ PRSRET + JSR PC,.LOAD + BR PRSTR2 +PRSRET: RTS PC +PRQQ: BIT #PQF,FLAGS2 ;PRINT ' " ' IF PQF=1 + BEQ PRSRET + BIT #DPQF,FLAGS2 + BNE PRSRET + MOVB #'",D + JMP @PCHR +PRNUM: CLR TEMP + BIC #7777,A + CMP #SNUM,A + BEQ PRNUM2 +PRNUM1: JSR PC,.LOAD ;GET FIRST NODE + BIT #7777,A ;ONLY PRINT SNUM S FOR NOW + BEQ PRNUM2 + ERROR+NTB ;# TOO BIG +PRNUM2: MOV B,A + JSR PC,PRDN + RTS PC + PRLST: PUSH A ;PRINT LIST, PTR IN B + SPUSH B + SPUSH C + TST NBKTS + BEQ PRL4 + MOV #'[,D + JSR PC,@PCHR +PRL4: INC NBKTS + MOV B,C +PRL1: BIT #7777,C ;EMPTY LIST + BEQ PRL2 ;YES, DONE + BIS #DPQF,FLAGS2 ;DONT PRINT QUOTE BEFORE STRINGS + BR PRL3 +PRL6: SPACE +PRL3: JSR PC,.LOADC ;GET THIS NODE + MOV A,C ;SAVE PTR TO NEXT + BIC #7777,A + JSR PC,PRTAB + BIT #7777,C + BNE PRL6 +PRL2: DEC NBKTS + BEQ PRL5 + MOV #'],D + JSR PC,@PCHR +PRL5: JMP RETC +PRNODE: PUSH A ;PRINT NODE POINTED TO BY B + SPUSH B + SPUSH D + JSR PC,.LOAD + JSR PC,PRON + SPACE + MOV B,A + JSR PC,PRON + SPOP D + JMP RETB +SEX1: JSR PC,PRNODE ;FOR FOO$X COMMAND IN 11SIM + HALT +SEX: JSR PC,PRNODE ;FOR RUG + JMP RUG + ERTLN: ;ERR RETURN TO LEVEL N +ERTL0: ;ERR RETURN TO LEVEL 0 + MOV FUNLEV,A + BEQ ERTL1 + PRTXT ^\LEVEL \ + JSR PC,PRDN + PRTXT ^\ LINE \ + MOV CLN,A + JSR PC,PRDN + PRTXT ^\ IN \ + MOV CPP,B + JSR PC,PPNAME + PRCR +ERTL1: MOV USER,U + MOV #DBITTB,A + ADD U,A + MOV #1,(A)+ + CLR (A)+ + CLR (A)+ + CLR (A)+ + CLR (A)+ ;THAT SHOULD BE ENOUGH + MOV UDSKAD(U),UNXTDB(U) + MOV #PDLINK-SLOT1,A + ADD BASEUS,A + CLR @A + CLR 2(A) + MOV A,P + MOV A,PRBAO + MOV A,PPOPL + SUB #524,A + MOV A,PPUSHL + MOV #SDLINK-SLOT1,A + ADD BASEUS,A + CLR 2(A) + CLR @A + MOV A,S + MOV A,SPRBAO + MOV A,SPOPL + SUB #524,A + MOV A,SPUSHL + MOV #TOPS,A + MOV #/2,B + CLR (A)+ + DEC B + BGE .-4 + CLR BRAKE + JMP MLOOP + SHOW: JSR PC,GUOEB ;SHOW "FOO" + BR SHOW5 + MOV B,E + JSR PC,.BINDF +SHOW5: ERROR+PNH ;PROCEDURE NOT HERE + MOV B,F + PRCR + PRTXT ^\TO \ + MOV E,B + JSR PC,PPNAME + MOV F,C + JSR PC,.LOADC + MOV A,F ;SAVE PTR TO NEXT NODE + JSR PC,.LOAD ;#ARGS IN B + TST B + BEQ SHOW2 + MOV A,C +SHOW1: SPACE + JSR PC,.LOADC ;NEXT ARG + MOV A,C + JSR PC,PRUV ;PRINT ITS PNAME + BIT #7777,C + BNE SHOW1 +SHOW2: PRCR + BIT #7777,F + BEQ SHOW4 + MOV F,C +SHOW3: JSR PC,.LOADC + MOV A,C + MOV B,@S + JSR PC,PRLN + BIT #7777,C + BNE SHOW3 +SHOW4: PRTXT ^\END\ + PRCR + JMP NORT + PRLN: PUSH A ;PRINT TOKENS IN LIST ON S + SPUSH B + SPUSH C + SPUSH D + BIC #DPQF,FLAGS2 ;DO PRINT QUOTE BEFORE STRINGS + MOV @S,C + BR PRLN2 +PRLN1: SPACE +PRLN2: JSR PC,.LOADC + MOV A,C + JSR PC,PRTAB + BIT #7777,C ;DONE? + BNE PRLN1 ;NO + PRCR + JMP RETD + STRACE: BIT #TRACEF,FLAGS2 ;SYSTEM TRACE + BNE .+4 + RTS PC + INC NBKTS + PUSH A + PRTXT ^/CT=/ + BIC #DPQF,FLAGS2 + JSR PC,PRCT + PRTXT ^/ CO=/ + JSR PC,PRCO + PRTXT ^/ S=/ + BIC #DPQF,FLAGS2 + JSR PC,PRS1 + PRCR + CLR NBKTS + POP A + RTS PC +ETRACE: BIC #TF6,TFLAGS + BR TRA1 +TRACE: BIS #TF6,TFLAGS +TRA1: JSR PC,GUOEB + BR TRA5 + JSR PC,.BNDFS +TRA5: ERROR+PNH ;PROC NOT HERE + MOV B,C ;B POINTS TO LIST OF GOODIES. FIRST IS FLAGS,,#ARGS + JSR PC,.LDP2 + BIC #TPTF,A + BIT #TF6,TFLAGS + BEQ TRA2 + BIS #TPTF,A +TRA2: JSR PC,.STP2 + JMP NORT +SETSTF: BIS #TRACEF,FLAGS2 ;SET SYSTEM TRACE FLAG + JMP NORT +CLRSTF: BIC #TRACEF,FLAGS2 + JMP NORT +FLEV: MOV FUNLEV,B ;RETURN USER PROC CALL DEPTH + JMP R1NARG +VERSN: MOV LVERNF,B + JMP R1NARG + .MACR ERMM AA + .XLIST +AA==ERMNO +ERMNO==ERMNO+1 + AA'.E + .LIST + .ENDM + + .MACR BEGER A +A'.E: .OFFSE 0 ;(THIS WILL BE NON-ZERO LATER) + .ENDM + + .MACR ENDER + .XLIST + PRCR + JMP ERTLN + .OFFSE 0 + .LIST + .ENDM + +ERMNO==0 +ERTAB: ERMM BSS ;BAD SS + ERMM CFL ;CANT FIND LINE # + ERMM COP ;CHAR (D) OUT OF PALCE + ERMM CPS ;CANT PRINT SNAP + ERMM CTIP ;CANT "TO" IN PROCEDURE + ERMM CTIT ;CANT "TO" IN "TO" + ERMM ERP ;EXTRA RIGHT PAREN + ERMM HNM ;... HAS NO MEANING + ERMM HNV ;... HAS NO VALUE + ERMM ILN ;..(CT).. IS AN INVALID LOGO NAME. + ERMM INF1 ;INFIX IN THE WRONG PLACE + ERMM INVN ;INVALID NODE + ERMM ITB ;INPUT TOO BIG + ERMM LCE ;LINE ... CHANGED BY EDIT + ERMM LDE ;LINE ..(B).. DOESN'T EXIST + ERMM LNTB ;LINE # TOO BIG + ERMM NDU ;NOT A DISPLAY USER + ERMM NOU ;NO OUTPUT + ERMM NSL ;NO STORAGE LEFT + ERMM NTB ;# TOO BIG + ERMM NTF ;(S) NOT "TRUE" OR "FALSE" + ERMM NTL ;NUMBER TOO LONG + ERMM NY ;NOT YET!! + ERMM OIP ;ONLY IN PROCEDURE + ERMM OOB ;OUT OF BOUNDS + ERMM OOP ;(CO) OUT OF PLACE + ERMM OOT ;OUT OF TOKENS + ERMM PAE ;PROCEDURE ..(CT).. ALREADY EXISTS + ERMM PNH ;PROCEDURE ... NOT HERE + ERMM RTB ;RESULT TOO BIG + ERMM STD ;SNAP TOO DEEP + ERMM TIP ;TOO MUCH INSIDE PARENS + ERMM TML ;TOO MANY LINES + ERMM TMS ;TOO AMNY SNAPS + ERMM UEL ;UNEXPECTED END OF LINE + ERMM WDW ;WHAT SHOULD I DO WITH ... + ERMM WIC ;YOU CAN'T WIPE WHILE IN CAMERA + ERMM WIT ;(CT) IS WRONG INPUT TO "TO" + ERMM WTA ;..(CO)..DOESN'T LIKE..(CT)..AS INPUT + ERMM WTAA ;..(CO)..DOESN'T LIKE..(A)...AS INPUT + ERMM WTAB ;..(CO)..DOESN'T LIKE..(B)...AS INPUT + ERMM YND ;YOU DON'T HAVE THE DISPLAY + ERMM YNT ;YOU DON'T HAVE THE TURTLE +ERTEND: ERMNO ;NEXT AVAILABLE ERR NO. + BEGER WTAA + PUSHS A + JSR PC,PRCO + PRTXT ^/ DOESN'T LIKE / + JSR PC,PRS1 + PRTXT ^/ AS INPUT./ + ENDER + + BEGER WTAB + PUSHS B + JSR PC,PRCO + PRTXT ^/ DOESN'T LIKE / + JSR PC,PRS1 + PRTXT ^/ AS INPUT./ + ENDER + + BEGER WTA + JSR PC,PRCO + PRTXT ^/ DOESN'T LIKE / + JSR PC,PRS1 + PRTXT ^/ AS INPUT./ + ENDER + + BEGER INF1 + JSR PC,PRCO + PRTXT ^/ IS IN THE WRONG PLACE./ + ENDER + + BEGER NOU + JSR PC,PRLO + PRTXT ^/ DIDN'T OUTPUT!/ + ENDER + + BEGER OOT + PRTXT ^/OUT OF TOKENS./ + ENDER + + BEGER BSS + PRTXT ^/BAD SS./ + ENDER + + BEGER NY + PRTXT ^/NOT YET!!/ + ENDER + + BEGER WDW + PRTXT ^/WHAT SHOULD I DO WITH / + JSR PC,PRS1 + ENDER + + BEGER HNV + JSR PC,PRCT + PRTXT ^/ HAS NO VALUE./ + ENDER + + BEGER ERP + PRTXT ^/EXTRA RIGHT PAREN./ + ENDER + + BEGER TIP + PRTXT ^/TOO MUCH INSIDE PARENS./ + ENDER + + BEGER OOP + JSR PC,PRCO + PRTXT ^/ OUT OF PLACE./ + ENDER + + BEGER UEL + PRTXT ^/UNEXPECTED END OF LINE./ + ENDER + + BEGER NSL + PRTXT ^/NO STORAGE LEFT./ + ENDER + + BEGER NTF + JSR PC,PRS1 + PRTXT ^/ NOT "TRUE" OF "FALSE"./ + ENDER + + BEGER LDE + PRTXT ^\LINE \ + JSR PC,PRDN ;LINE # SHOULD BE IN B + PRTXT ^\ DOESN'T EXIST.\ + ENDER + + BEGER LNTB + PRTXT ^\LINE NUMBER TOO BIG.\ + ENDER + + BEGER COP + PRTXT ^\CHAR \ + JSR PC,TYO + PRTXT ^\ OUT OF PLACE.\ + ENDER + + BEGER CPS + PRTXT ^\CANT PRINT A SNAP\ + ENDER + + BEGER NTB + PRTXT ^\# TOO BIG\ + ENDER + ;MORE ERROR MESSAGES: + + BEGER NDU + PRTXT ^/YOU DON'T HAVE A DISPLAY CONSOLE/ + ENDER + + BEGER NTL + PRTXT ^/NUMBER TOO LONG/ + ENDER + + BEGER OOB + PRTXT ^/OUT OF BOUNDS/ + ENDER + + BEGER TML + PRTXT ^/TOO MANY LINES/ + ENDER + + BEGER STD + PRTXT ^/SNAP TOO DEEP/ + ENDER + + BEGER TMS + PRTXT ^/TOO MANY SNAPS/ + ENDER + + BEGER WIC + PRTXT ^/YOU CANT WIPE WHILE IN CAMERA/ + ENDER + + BEGER YND + PRTXT ^/YOU DONT HAVE THE DISPLAY/ + ENDER + + BEGER YNT + PRTXT ^/YOU DONT HAVE THE TURTLE/ + ENDER + BEGER CFL + PRTXT ^/CANT FIND LINE NO. / + ENDER + + BEGER HNM + PRTXT ^/... HAS NO MEANING./ + ENDER + + BEGER LCE + PRTXT ^\LINE ... CHANGED BY EDIT.\ + ENDER + + BEGER PNH + PRTXT ^/PROCEDURE ... NOT HERE/ + ENDER + + BEGER PAE + CLR TOPRNM + PRTXT ^/PROCEDURE / + JSR PC,PRCT + PRTXT ^/ ALREADY EXISTS./ + ENDER + + BEGER ILN + JSR PC,PRCT + PRTXT ^/ IS AN INVALID LOGO NAME./ + ENDER + + BEGER WIT + CLR TOPRNM + JSR PC,PRCT + PRTXT ^/ CAN'T BE A DUMMY INPUT TO "TO"./ + ENDER + + BEGER RTB + PRTXT ^\ARITHMETIC RESULT TOO BIG.\ + ENDER + + BEGER ITB + PRTXT ^\ARITHMETIC INPUT TOO BIG.\ + ENDER + BEGER CTIP + PRTXT ^\CANT "TO" IN A PROCEDURE.\ + ENDER + BEGER CTIT + PRTXT ^\CANT "TO" IN "TO".\ + ENDER + BEGER INVN + PRTXT ^\INVALID NODE.\ + ENDER + BEGER OIP + PRTXT ^\ ONLY WHEN IN A PROCEDURE.\ + ENDER +  \ No newline at end of file diff --git a/PDP11/11logo/system.327 b/PDP11/11logo/system.327 new file mode 100644 index 00000000..d8622c3a --- /dev/null +++ b/PDP11/11logo/system.327 @@ -0,0 +1,3103 @@ + .TITLE PDP11 LOGO + + FOO==VERNF + VERN==%FNAM2 + FOO==VERNF + .STITL CONFIGURATION PARAMTERS + .IF1 + .PRINT /0=>FULL 1=>NO DEBUG 2=>QUERY +ASSSW=/ + .TTYMAC FLAG + ASSSW=FLAG + .ENDM + + .IFZ ASSSW + DEBUG==1 + DISASS==1 + GCDBUG==1 + MNUSRS==10. + MNSLTS==5 + .ENDC + + .IFZ + DEBUG==0 + DISASS==0 + GCDBUG==1 ;ZERO LATER, BUT DOESN'T WORK YET + MNUSRS==4 + MNSLTS==2 + .ENDC + + .IFZ + .MACR SETFLG FLG + .PRINT /FLG=/ + .TTYMAC FLAG + FLG==FLAG + .ENDM + .ENDM + + SETFLG DEBUG + SETFLG DISASS + SETFLG GCDBUG + SETFLG MNUSRS + SETFLG MNSLTS + .ENDC + .ENDC + + .MACR FOR FLG + .XLIST + .IFNZ FLG + .LIST + .ENDM + + .MACR ENDC FLG + .XLIST + .IFZ FLG + .LIST + .ENDC + .LIST + .ENDM + + .STITL SYSTEM PARAMETERS + +A=%0 +B=%1 +C=%2 +D=%3 +E=%4 +F=%5 +U=%5 +P=%6 +SP=%6 +PC=%7 + + + +ERROR=TRAP + +RUG=100000 ;DONT CHANGE THE S.A., RADIA!! +SKPRET==EMT + +;DEVICE INFORMATION + +;CONSOLE SWITCHES +SWB=177570 ;CONSOLE SWITCH DATA +;CONSOLE TELETYPE +;BREAK LEVEL 4 +TKBRV=60 ;CONSOLE KEYBOARD BREAK VECTOR +TKS=177560 ;CONSOLE KEYBOARD STATUS +TKB=177562 ;CONSOLE KEYBOARD DATA +TPBRV=64 ;CONSOLE PRINTER BREAK VECTOR +TPS=177564 ;CONSOLE PRINTER STATUS +TPB=177566 ;CONSOLE PRINTER DATA +;DM11 +;BREAK LEVEL 5 +DMRBRV=310 ;DM11 RECEIVER BREAK VECTOR +DMTBRV=314 ;DM11 TRANSMITTER BREAK VECTOR +DMCSR=175000 ;DM11 CONTROL AND STATUS REGISTER +DMBAR=175002 ;DM11 BUFFER ACTIVE REGISTER +DMBCR=175004 ;DM11 BREAK CONTROL REGISTER +DMTBR=175006 ;DM11 TABLE BASE REGISTER +;PROGRAMMABLE CLOCK +;BREAK LEVEL 6 +PCBRV=104 ;PROGRAMMABLE CLOCK BREAK VECTOR +PCS=172540 ;PROGRAMMABLE CLOCK STATUS +PCSTBF=172542 ;PROGRAMMABLE CLOCK SET BUFFER +PCCNT=172544 ;PROGRAMMABLE CLOCK COUNTER +;RF11/RS11 DISK +;BREAK LEVEL 5 +DSKBRV=204 ;DISK BREAK VECTOR +DSKS=177460 ;DISK STATUS REGISTER +DSKDBR=177472 ;DISK DATA REGISTER +DSKWC=177462 ;DISK WORD COUNT +DSKCA=177464 ;DISK CURRENT ADDRESS +DSKA=177466 ;DISK ADDRESS +DSKAE=177470 ;DISK EXTENDED ADDRESS +DSKMT=177474 ;DISK MAINTENCE(WELL...) +DSKSG=177476 ;DISK SEGMENT +;TK DISPLAY +;BREAK LEVEL 7? +DISBRV=270 ;DISPLAY BREAK VECTOR +NGCSR=164040 ;DISPLAY CONTROL AND STATUS REGISTER +NGREL=164042 ;DISPLAY RELOCATION REGISTER +;DC11 HIGH SPEED LIN INTERFACE +;BREAK LEVEL 5 +DCRBRV=300 ;RECIEVE BREAK VECTOR +DCRS=174000 ;RECIEVE STATUS WORD +DCRB=174002 ;RECIEVE BUFFER +DCTBRV=304 ;TRANSMIT BREAK VECTOR +DCTS=174004 ;TRANSMIT STATUS +DCTB=174006 ;TRANSMIT BUFFER +;POWER FAIL +PFBRV=24 +;BUS ERRORS +BEBRV=4 +;TRAPS +TRPBRV=34 +EMTBRV=30 +IOTBRV=20 +BPTBRV=14 +PWFBRV=24 +;EAE REGISTERS +DIVIDE=177300 +AC=177302 +MQ=177304 +MULTIP=177306 +SR=177310 +EAESR==177311 +NORMAL=177312 +LGS=177314 +ARS=177316 +SIPRBT==2 +MQZ==10 +;PSSESOR STATUS +PS=177776 + .STITL ALLOCATION PARAMETERS + +SYPDLL==100 +TMPDLL==20 +PPDLL==600 +SPDLL==600 +DBUFL==400 +DDIRBL==400 + +DTIBFL==2000 +DEDBFL==2000 +DDIRL==2000 + +DWRTEC==103 +DREADC==105 +DWRTCC==107 + +FRTRCF==1 +SWTRCF==2 +SPTRCF==4 +GCTRCF==10 + +FRSCED==1 ;FLUSHED DUE TO SCEDULEING +FRDSKW==3 ;HANGING ON DISK +FRTYIW==4 ;HANGING ON TYI OF CHAR +FRTYOW==5 ;HANGING ON FULL TYO BUFFER +FRRAND==6 ;HANGING FOR "UNKNOWN" REASON +FRNEWU==7 ;HANGING BECUASE HAVE NOT YET BEEN INITIALIZED +FRTYIH==10 ;HANGING ON LINE INPUT + .STITL MACROS + .MACR PUSH AA + MOV AA,-(P) + JSR PC,PPUSHT + .ENDM + + .MACR POP AA + MOV (P)+,AA + JSR PC,PPOPT + .ENDM + + .MACR PUSHS AA + JSR PC,SPUSHT + MOV AA,@S + .ENDM + + .MACR POPS AA + MOV @S,AA + JSR PC,SPOPT + .ENDM + + .MACR SPUSH AA + MOV AA,-(P) + .ENDM + + .MACR SPOP AA + MOV (P)+,AA + .ENDM + + .MACR SPUSHS AA + SUB #2,S + MOV AA,@S + .ENDM + + .MACR SPOPS AA + MOV @S,AA + ADD #2,S + .ENDM + + .MACR TEXT AA + .XLIST + .ASCII \AA\ + .BYTE 0 + .EVEN + .LIST + .ENDM + + .MACR PRTXT AA + .XLIST + JSR PC,ERTAS + TEXT ^\AA\ + .LIST + .ENDM + + + .MACR PRCR + JSR PC,.CRLF + .ENDM + + .MACR SPACE + JSR PC,.SPACE + .ENDM + + .MACR TIMER A + JSR PC,.TIME + .ENDM + + .MACR UNTIME A + JSR E,.UTIME + A + .ENDM + + .MACR UTIMER A + JSR PC,.TIME + .ENDM + + .MACR UUNTIM A + MOV #A,.+20 + ADD USER,.+12 + JSR E,.UTIME + 0 + .ENDM + .MACR REPT1 A,B + .XLIST + .REPT A + B + .ENDR + .LIST + .ENDM + .MACR REPT2 A,B,C + .XLIST + .REPT A + B + C + .ENDR + .LIST + .ENDM + + + .MACR NOP NUM + .XLIST + .IFG NUM + BR .+ + NOP + .ENDC + .LIST + .ENDM + + .MACR EXCH LOC1,LOC2 + MOV LOC1,EXCH1 + MOV LOC2,LOC1 + MOV EXCH1,LOC2 + .ENDM + + .MACR PAD A,B + .PRINT \A B\ + .ENDM + .STITL TRAP VECTORS + + +;TRAP VECTORS +;UNUSED VECTORS +.=0 + REPT2 100,.+2,IOT ;GO TO 2ND WORD OF VECTOR AND DIE + + .=TRPBRV + ERRBK ;TRAP IS USED FOR ERRORS + 0 + + .=TKBRV + TKBRK ;CONSOLE TTY KEYBOARD + 200 ;IS ON BR4 + + .=TPBRV + TPBRK ;CONSOLE TTY PRINTER + 200 ;IS ON BR4 + + .=PCBRV + CLKBRK ;PROGRAMMABLE CLOCK + 300 ;IS ON BR6 + + .=DSKBRV + DSKBRK ;FIXED HEAD DISK + 300 ;IS ON BR5, INT ROUTINE RUNS ON LEVEL 6 + + .=DISBRV + DISBRK ;DISPLAY + 240 ;??????????? + + .=DMRBRV + DMRBRK ;DM11 RECEIVE + 240 ;? + + .=DMTBRV + DMTBRK ;DM11 TRANSMIT + 240 ;? + + .=IOTBRV + IOTBRK + 340 + + .=EMTBRV + EMTBK + 340 + + .=DCRBRV ;DC11 RECIEVE + DCRBRK + 240 + + .=DCTBRV ;DC11 TRANSMIT + DCTBRK + 240 + .STITL SYSTEM VARIABLES(ONE COPY) + + + .=400 + JMP START + .=.+SYPDLL ;SYSTEM PDL +SPDLP: . ;SYSTEM PDL POINTER +PAT: +PATCH: .=.+200 ;PATCH AREA +PATEND: + .=770 +LVERNF: VERNF +.=<.!377>+1 + DMCA=.-NFDMTY + .=.+40 ;DM11 CURRENT ADDRESS + DMWC=.-NFDMTY + .=.+40 ;DM11 -BYTE COUNT + .=.+40 ;DM11 BIT ASSEMBLY TABLE + .=.+40 ;UNUSED +DMTT: .=.+200 ;DM11 TUMBLE TABLE + +TKBRK: MOV TKB,CHI + BIC #177600,CHI + CMP CHI,BRKCHR + BNE TKBRK1 + MOV PC,BRAKE +TKBRK1: RTI +TPBRK: HALT +DISBRK: HALT +DMRBRK: HALT +DMTBRK: HALT + +TMPDLP: TMPDL +TMPDL: .=.+ +ELAPSE: 0 + 0 +USER: -1 +ULAST: 0 ;LAST USER WHO WAS RUN +NULTIM: 0 + 0 +TIME: 0 ;TIME IN 1/100 TH'S OF A SEC + 0 ;FROM START OF SYSTEM RUN +QUANT: 4 ;UQUANT SET FRCM THIS +UQUANT: 0 ;TIME IN 1/100THS USER SHOULD RUN +NRABLU: 0 ;NUMBER OF USERS WITH FLSADR=0 +NSWPU: 0 ;NUMBER OF USERS ASSIGNED TO SLOTS BUT NOT YET IN +NINU: 0 ; " " " " " " AND ALREADY IN +PUSPSL: 0 ;PREFERED USER SLOT TO SWAP +PUSRSP: 0 ;PREFERED USER TO SWAP OUT +SWPLEP: SWPLST ;PLACE TOO PUT NEXT REQ +SWPLST: .=.++2 ;LIST OF SWAP REQUESTS +MSWPOR: .=.+<16*MNSLTS*2> ;MOBY SWAP IN AND OUT BLOCKS +SYSWPR: .=.+<16*MNUSRS> ;10 DISK REQUEST BLOCKS FOR GENERAL USE +DSKCRB: 0 ;CURRENT DISK REQUEST +SLOTST: .=.+ ;WORD 1 = SLOT USER + ;WORD 2 = NEG, USER COMING IN; 1, USER JUST IN, >1 USER IN A WHILE + 0 ;SO END TEST ALWAYS WORKS + 0 + +DKRTYS: 0 ;# OF DISK RETRYS +CORTOP: 0 ;FIRST NON-EX LOCATION +NUNODE: 0 ;NUMBER OF NODES PER USER +NUSERS: 1 ;NUMBER OF USERS +NSLOTS: 1 ;NUMBER OF IN CORE SLOTS +NUSER2: 2 +FOO==0 + .MACR MSWF + MSWPOR+FOO +FOO==FOO+34 + .ENDM +SLTCAD: REPT2 MNSLTS,MSWF,0 +USWCNT: 0 ;NEGATIVE LENGTH OF USER SLOT +USLENT: 0 ;LENGHT OF SLOT IN BYTES +DUSECT: 0 ;COUNT OF SYSTEM DISK USAGES MOD 256 +DSKDST: 20000 ;DISK OFFSET( NO USER OR SYSTEM CRAP BEFORE HERE) + 2 +DCLRUS: 20000 ;ADDRESS OF CLEAR USER IMAGE + 2 +DCRBFS: 40000 ;ADDRESS OF RECIEVE BUFFERS + 2 +DCTBFS: 42000 ;ADDRESS OF TRANSMIT BUFFERS + 2 +DSKRND: 140000 ;START OF RANDOM USER STORAGE + 2 +SNXTDB: 100000 ;NEXT BLOCK AVAILABLE + 2 +SDSKAD: 100000 ;BASE OF SYSTEM DISK BLOCKS + 2 +SDBITB: 1 ;SYSTEM DISK BIT TABLE + REPT1 7,0 +SDBITE: 100000 +SFLAGS: 0 ;RANDOM SYSTEM FLAGS +LOCKUS: -1 ;INDEX OF USER LOCKED IN CORE +GCLOCK: -1 ;USER USING GARBAGE COLLLECTOR IS LOCKED IN +CRMES: .BYTE 15,0 ;CR FOR ERTAP +RWWSW: 0 +BRKCHR: 0 ;THE BREAK CHAR FOR TODAY! +JDCSW: 0 +;DISPLAY SYSTEM VARIABLES +DLEN==400 ;LENGTH OF EACH DISPLAY LIST (IN BYTES) +DPDLL==60 ;LENGTH OF EACH DISPLAY PDL (IN BYTES) +TLEN==20 ;LENGTH OF EACH TURTLE LIST (IN BYTES) +SDPDLL==60*3 ;TOTAL LENGTH OF DISPLAY PDL AREA (IN BYTES) +SDLEN==400*3 ;TOTAL LENGTH OF DISPLAY LIST AREA (IN BYTES) +STLEN==20*3 ;TOTAL LENGTH OF TURTLE LIST AREA (IN BYTES) + +DCONS: ;USER DISPLAY CONSOLE TABLE + .BYTE 0 + .BYTE 1 + .BYTE 2 + REPT1 5,.BYTE -1 +SDISBT: ;EACH ENTRY HAS A 1 IN THE NTH BIT OVER + .BYTE 1,2,4 + .EVEN + +SDPDLP: ;DISPLAY PDL POINTER TABLE + +> + +> + +> +STLIST: ;TURTLE DISPLAY LIST AREA TABLE + REPT1 3,TLIST+ + +;DISPLAY TEMPORARIES +;THESE MUST BE IN THIS ORDER +NEWX: .WORD 0,0 ;NEWX IS A TEMPORARY STORAGE FOR ROUTINES +; LIKE SETXY. IT CONTAINS WHAT CURX WILL BE SET +; TO IF THE ROUTINE DOESN'T +; ENCOUNTER A FATAL ERROR +NEWY: .WORD 0,0 ;LIKE NEWX +;END OF ORDER +TUT: 0 ;TURTLE TOP. POINTS TO TOP OF TURTLE DISPLAY LIST +SNPTEM: 0 ;USED BY GARBAGE COLLECTOR + + +EXCH1: 0 +.CSRET==-127. +GCMKL: TOPS + TOPS1 + GCP1 + GCP2 + GCPREV + 0 + .STITL SYSTEM VARIABLES (ONE COPY PER USER) + +UBLK=. +FLSRES: 0 ;REASON USER NOT RUNNING +FLSADR: 0 ;ADDRESS TO START AT AFTER FLUSH +UACA: 0 +UACB: 0 +UACC: 0 +UACD: 0 +UACE: 0 +TIMUSD: 0 + 0 +UPC: 0 ;PROGRAM COUNTER +UTTY: 0 +BRAKE: 0 +;DO NOT CHANGE THE ORDER BELOW +USWPAD: .=.+4 ;BEGINNING OF SWAP AREA +DTYIBF: .=.+4 ;BEGINING OF TYI BUFFER ON DISK +DEDTBF: .=.+4 ;BEGINNG OF EDIT BUFFER +DHDDIR: .=.+4 ;BEGINING OF DISK DIRECTORY(OF HOME DISK) +UNXTDB: .=.+4 ;NEXT DISK BLOCK AWAILABLE +UDSKAD: .=.+4 ;RANDOM DISK STORAGE AREA + +LUBLK==.-UBLK +L==LUBLK + + .=.+ + ;NODE TYPES +SFUN==000000 +INFIX==10000 +UFUN==20000 +UVAR==30000 +TYP1==40000 +;THE FOLLOWING TYPES ARE NEEDED IN THIS ORDER BY THE CONVERT ROUTINES +SSTR==70000 ;NOT VALID TOKEN TYPE +SNP==100000 +ATOM==110000 +SNUM==120000 ;NOT A VALID TOKEN TYPE +LNUM==130000 +LSTR==140000 +RNUM==150000 +LIST==170000 +SENT==LIST +;END OF ORDER + + ;BINDING TYPES +FBIND==20000 +VBIND==30000 +SFBIND==120000 ;SWAPPED OUT FUNCTION BINDING +SVBIND==130000 ;SWAPPED OUT VARIABLE BINDING + + + ;SOE FLAGS SEE OLE MACRO STUFF +VNAF==2000 + + ;READ FLAGS SEE DTBL: +DOTF==400 ;IN LEFT HALF + ;EVAL FLAGS - PUSHED BY PEVAL +PTLPF==1 ;PREVIOUS TOKEN WAS LEFT PAREN +RTF==2 ;REPEAT TOKEN +CRF==4 ;CURRENT TOKEN IS CR +EDITF==10 ;EDIT FLAG +TOF==20 ;TO FLAG +IFF==40 ;IF FLAG +TPTF==400 ;THIS PROCEDURE TRACED FLAG ;MUST BE IN LEFT HALF + + ;EVAL FLAGS2 - NOT PUSHED +TESTF==1 +TRACEF==2 +PQF==4 ;PRINT QUOTE FLAG - FOR PRSTR +DPQF=10 ;DONT " " " +MMF==20 ;MULTIPLE MAKE FLAG +ERRF==40 ;ERROR FLAG +DSAMFL==1000 ;DISK ALMOST FULL +PPNAIF==2000 ;P PDL NOT ALL THE WAY IN +SPNAIF==4000 ;S PDL NOT ALL THE WAY IN + + ;TEMP FLAGS IN TFLAGS +TF6==1 +TF1==100 +TF2==200 +TF3==400 +TF4==10000 +TF5==20000 + + ;FLAGS IN LEFT HALF OF 1ST NODE OF SWAPPED PROC LIST +; TPTF==400 DEFINED ABOVE + .STITL USER VARIABLES + +UVBLK=. +;BELOW RELATIVE TO BASE OF SLOT WHEN USER NOT RUNNING +UAB: NODESP-SLOT1 ;BASE OF CURRENT USER'S NODE SPACE +S: IS-SLOT1 +UPDLP: IP-SLOT1 ;USER PDL POINTER(ONLY WHEN USER NOT RUNNING) +SPOPL: IS-SLOT1 +SPUSHL: IS-SLOT1-524 +SSWPAD: IS-SLOT1-400+4-2 +SPBASE: IS-SLOT1 +SPRBAO: IS-SLOT1 ;SAME FOR S : S-SPRBAO = REL ADDR OF TOP THING ON S PDL +PPOPL: IP-SLOT1 +PPUSHL: IP-SLOT1-524 +PSWPAD: IP-SLOT1-400+4-2 +PPBASE: IP-SLOT1 +PRBAO: IP-SLOT1 ;PDL REL BASE ADDR OFFSET +SUHCT: UHCT-SLOT1 ;START OF USER HASH CODE TABLE +GCBITS: DBUF-SLOT1 +BASEUS: 0 ;BASE OF USER SLOT(MUST BE LAST RELOCATED) +UVREND=. ;END OF VARIABLES TO BE RELOCATED +;BELOW ARE NOT RELATIVE +UAC: 0 ;EAE AC +UMQ: 0 ;EAE MQ +USR: 0 ;EAE STATUS REGISTER +RELA==1 +RELB==2 +RELC==4 +RELD==10 +RELE==20 +ACRELF: 0 +NNGC: 0 ;NUMBER OF NODES GARBAGE COLLECTED +ERRINA: -1 ;ADDRESS OF SWAPED IN ERROE ROUTINE +SSAVEA: 0 ;PLACE S PDL SAVED WHEN MARKING SWAPED OUT PDL + 0 +FREE: SOFN ;START OF FREE NODES +TOPS: 0 ;GC MARK FROM HERE IF NON 0 +TOPS1: 0 ; " +GCP1: 0 +GCP2: 0 +GCPREV: 0 + ;THE FOLLOWING ARE PUSHED BY PEVAL +CPP: 0 ;CURRENT PROCEDURE POINTER +CPSN: 0 ;C.P. SWAP NO. +CLN: 0 ;CURRENT LINE NO. +CLP: 0 ;CURRENT LINE POINTER - GOOD IF CPSN'S AGREE +CLGN: 0 ;CURRENT LINE GENERATION NO. +CTN: 0 ;CURRENT TOKEN NO. +CTP: 0 ;CURRENT TOKEN POINTER +FUNLEV: 0 ;FUNCTION LEVEL +IFLEV: 0 ;IF LEVEL +FLAGS: 0 ;FLAG WORD +CSPDLP: 0 ;CURRENT S PDL PTR AFTER LAST PEVAL PUSH +CPDLP: 0 ;CURRENT PDL PTR AFTER LAST PEVAL PUSH + ;END OF PEVAL PUSHES EXCEPT REL. S, CO AND CO+2 ARE ALSO PUSHED + + ;THE FOLLOWING ARE PUSHED (SOMETIMES) BY EVAL +CO: 0 ;CURRENT OPERATOR + 0 +NOR: 0 ;NO. OF OPERANDS STILL NEEDED BEFORE CO CAN BE EXECUTED + ;END OF EVAL PUSHES +COF: 0 ;CURRENT OPERATOR FLAGS +LO: 0 ;LAST OPERATOR + 0 +CT: 0 ;CURRENT TOKEN + 0 ; " +RDFLAG: 0 ;FOR READ +LISTBD: 0 ;LIST BUILD DEPTH +PSTOPR: 0 ;RETURN ADDR FOR PSTOP +UNGRAB: 0 ;FOR .GRAB. PUTTING A NODE ADDR HERE MEANS THAT IT + ;WILL BE THE NEXT GRABBED. GC WILL MARK FROM "UNGRAB" + ;USE WITH CAUTION!! +TEMP: 0 +TFLAGS: 0 ;TEMP FLAGS (ALL TFN'S SHOULD EVENTALLY POINT HERE) +NCHR: 0 ;FOR BLST +TOPRNM: 0 ;PTR TO UOE OF PROC. BEING "TO"'ED +FNLLP: 0 ;FIRST NODE OF LIST OF LINE POINTERS (FOR "TO") +FLAGS2: 0 ;EVAL FLAGS - NOT PUSHED BY PEVAL +ALTL: 0 ;TEST LINE POINTER +LINENO: 0 ;FOR TEST MODE +CHI: 0 ;FOR TYI +PRMTCH: '? ;PROMPT CHAR +GNCN: 0 ;"GET NEXT CHAR" NODE + 0 +NBKTS: 0 ;FOR RDSTR +PCHR: TYO ;PLACE WHERE OUTPUT CHARS GO (TYO, BLST, ...) +DBITTB: .=.+40 +DBITBE=.-2 + + +;VARIABLES AND CONSTANTS FOR DISPLAY SYSTEM + +;THESE MUST BE IN THIS ORDER +DORBEG==. ;MARKS BEGINNING OF THESE VARIABLES +CURX: .WORD 0,0 ;CURX = CURRENT X POSITION +; THE FIREST WORD IS THE INTEGER PART +; THE SECOND WORD IS THE FRACTION PART +CURY: .WORD 0,0 ;CURY = CURRENT Y POSITION +CURA: 0 ;CURA = THE CURRENT ANGLE +OLDX: 0 ;CONTAINS CURX AT THE TIME OF LAST NEW SNAP +OLDY: 0 ;CONTAINS CURY AT THE TIME OF LAST NEW SNAP +OLDIR: .BYTE 0 ;CONTAINS DIREC WHEN DR.LIN LAST CALLED +DFLAGS: .BYTE 0 + .EVEN + +DOREND==. ;MARKS END OF THESE VARIABLES +;END OF ORDER + +STB: 0 ;STATIC AREA BOTTOM +STT: 0 ;STATIC AREA TOP.POINTS TO TOP OF STATIC DISPLAY AREA +DYB: 0 ;DYNAMIC BOTTOM. POINTS TO BOT OF DY AREA +DYR: 0 ;ROVING POINTER USED BY DISPLAY STORAGE ALLOCATIN ROUTINES +DYT: 0 ;POINTER TO DYNAMIC AREA TOP +TUB: 0 ;POINTER TO TURTLE AREA BOTTOM +SNLIST: 0 ;POINTER TO SNAP LIST +SNABOT: 0 ;BOTTOM OF CURRENT SNAP +SINA: 0 ;CONTAINS SIN OF THE CURENT ANGLE +COSA: 0 ;CONTAINS COS OF THE CURENT ANGLE +DIREC: 0 ;CONTAINS DIRECTION CODE FRO CURRENT ANGLE +BYCNT: 0 ;KEEPS TRACK OF LAST BIT IN DISPLAY LIST +PUSHJT: 0 ;DISPLAY PUSHJ TO TURTLE +DISBIT: 0 ;HAS A BIT SET CORRESPONDING TO DISPLAY SLOT + + +;THIS MUST BE AT THE END +MAXELN==60 +ERRBUF: .=.+MAXELN +LUVBLK==.-UVBLK + + +;DISPLAY COMMANDS +ADDX==150000 +ADDY==144000 +ADDXY==ADDX!ADDY +DPUSHJ==100000 +DPOP==140200 +DPOPJ==140100 +DSTOP==140400 +DRSTXY==143000 ;RESET X AND Y TO 0 + +TURSIZ==4 ;THE SIZE OF THE TURTLE + +;FLAGS USED FOR DFLAGS +PENUF==1 +HOOKF==2 +HIDETF==4 +TURTF==10 +TEMF==20 + .STITL SYSTEM OBLIST + +VARIABLE==4 ;FOR VARIABLE NUMBER OF ARGUMENTS +$==-1 ;DEFAULT INDICATOR IN OLE +YINFIX==20 ;"YES INFIX" FLAG FOR OLE +;ARGUMENT TYPES +; 0 ==== ANYTHING +ANYT==0 +ATOMT==1 +WORDT==ATOMT ;A WORD IS THE SAME AS AN ATOM +NUMT==2 +SENTT==4 +SNAPT==10 +LISTT==20 +ANSLT==ATOMT+NUMT+SENTT+LISTT ;ALL BUT SNAP + +;SOE FIELDS 1.==RIGHT BYTE (EVEN ADDR) 2.==LEFT BYTE + ; 1.1==RIGHT BIT 2.8==LEFT BIT + ;1.1-1.8 INPUT TYPE ACCEPTABLE BY THIS PROCEDURE + ;2.1-2.2 "STANDARD" NO. OF INPUT ARGS + ;2.3 VNAF 1==CAN TAKE "ANY" NO. OF ARGS + ;2.5 INFIX 1==THIS IS AN INFIX PROCEDURE + ;2.6-2.8 PRECEDENCE + + .MACR NGPTWO A + .XLIST + NGP2=NGP2*2 + FOO==A + .IFLE NGP2-FOO + NGPTWO A + .ENDC + .LIST + .ENDM + + + + +;**************************************************** +;MACRO TO DEFINE SYSTEM OBLIST ELEMENTS +;THE PARAMETERS ARE: +;1) THE PRINT NAME +;2) THE NAME OF THE POINTER TO THE OBLIST ELEMENT. +; THIS PARAMETER CAN BE $ IF YOU DON'T CARE ABOUT THE +; NAME, OR IF YOU WANT THE NAME TO BE $PNAME +;3) THE ADDRESS OF THE PROGRAM +; THIS PARAMETER CAN BE $ IF THE NAME OF THE PROGRAM +; IS THE SAME AS THE PRINT NAME +;4) THE PRECEDENCE. A NUMBER FROM 0-7 +;5) THE TYPE OF PERMISSIBLE ARGUMENTS +; IF IT CAN TAKE MORE THAN ONE KIND OF ARGUMENT +; ADD UP ALL THE KINDS. EG NUMT+LISTT+ATOMT +;6) THE STANDARD NUMBER OF ARGUMENTS + THE SYMBOL "VARIABLE" +; IF IT CAN ALSO TAKE A VARIABLE NUMBER OF ARGUMENTS +;7) THE SYMBOL "YINFIX" IF THIS IS AN INFIX OPERATOR + +; +;IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT + +;ANY PARAMETER THAT YOU WANT TO BE 0 YOU CAN LEAVE OUT +;ANY PARAMETER YOU DON'T CARE ABOUT YOU CAN LEAVE OUT. + + + +.MACR OLE PNAME,OBNAME,ADDR,PRECED,ARGTYP,NUMARG,QINFIX + .XLIST + OBX0=OBSTRT-. ;CHECK TO SEE THAT THE OBLIST DOESN'T + ;OVERWRITE THE OBLIST ELEMENTS + .IF2 + .IFNDF OBNAME + OBNAME=0 ;TO AVOID UNDEFINED SYMBOL ERROR + .ENDC + .ENDC + .IFG OBX0 + OBADD2 ;POINTER TO OBLIST ELEMENT + OBADD1=. + .=OBADD2 + .IFL OBNAME+0 ;$ HAS BEEN DEFINED TO BE -1 + $'PNAME=. + .ENDC + .IFGE OBNAME+0 + $'OBNAME=. + .ENDC + + + .BYTE ARGTYP+0 + OBX1=NUMARG+0 + OBX2=PRECED+0*40 + .BYTE QINFIX+OBX1+OBX2 + + .IFL ADDR+0 + PNAME ;ADDRESS OF PROGRAM + .ENDC + .IFGE ADDR+0 + ADDR+0 + .ENDC + + TEXT ^\PNAME\ + + OBADD2=. + .=OBADD1 + .ENDC + + .IFLE OBX0 + .LIST + ******** + NUMOBS IS LESS THAN THE NUMBER OF SYSTEM OBLIST ELEMENTS. + THEREFORE, YOU ARE OVERWRITING THE SYSTEM OBLIST + ******** + .XLIST + .ENDC + .LIST +.ENDM + .MACR CDM A +A==<.-SOBLSU>/2 + .ENDM + ;THE SYSTEM OBLIST + ;ADD ITEMS (EXCEPT FOR SPECIAL CHAR ITEMS) ALPHABETICALLY. + + +;**** +NUMOBS==91. ;THE NUMBER OF OBLIST ELEMENTS +;**** WHENEVER YOU ADD AN OBLIST ELEMENT, MAKE SURE YOU INCREMENT +;**** NUMOBS !!!!!! +SOOMX: 2+SOBLSU ;2 > THAN HIGHEST ADDR USED IN SYS OBLIST + NGP2==1 + NGPTWO SOBLSU-SOBLST+2 +SOBP2: NGP2 ;( SMALLEST POWER OF 2 >= NUMOBS )*2 +OBADD1=. +OBADD2=.+<2*NUMOBS> +OBSTRT=OBADD2 ;WHERE THE SYSTEM OBLIST ELEMENTS START + +SOBLST: OLE AND,$ + OLE BACK,$,$,2,NUMT,1 + OLE BUTFIRST,$,$,2,ANYT,1 + OLE BUTLAST,$,$,2,ANYT,1 + OLE COUNT,$,$,2,ANYT,1 + OLE CTF,$,CLRSTF,2 + OLE DIFFERENCE,$,DIFF,2,NUMT,2 + OLE DISPLAY,$,$,2,LISTT+SNAPT,1 + OLE DO,$,$,2,,1 + OLE EDIT,$,$,2 + OLE ELSE,$,$,2 + OLE EMPTYP,$,$,2,ANYT,1 + OLE END,$,$,2 + OLE EQUAL,$,$,2,NUMT,2 + OLE ERASETRACE,$,ETRACE,2,,1 + OLE FIRST,$,$,2,ANYT,1 + OLE FORWARD,$,$,2,NUMT,1 + OLE FPRINT,$,$,2,,1+VARIABLE + OLE FPUT,$,$,2,,2+VARIABLE + OLE GO,$,$,2,NUMT,1 + OLE GREATER,$,GREATR,2,NUMT,2 + OLE HEADING,$,$,2 + OLE HERE,$,$,2 + OLE HIDETURTLE,$,$,2 + OLE HOME,$,$,2 + OLE IF,$,$,2,WORDT,1 + OLE KILLDISPLAY,$,$,2 + OLE LAMPOFF,LPOFF,$,2 + OLE LAMPON,LPON,$,2 + OLE LAST,$,$,2,ANYT,1 + OLE LEFT,$,$,2,NUMT,1 + OLE LESS,$,$,2,NUMT,2 + OLE LEVEL,$,FLEV,2 + OLE LIST,$,LIST.P,2,,2+VARIABLE + OLE LISTP,$,$,2,,1 + OLE LPUT,$,$,2,,2+VARIABLE + OLE MAKE,$,$,2,,2 + OLE MOD,$,$,2,NUMT,2 + OLE NEWSNAP,$,$,2 + OLE NUMBERP,$,NUMBP,2,ANYT,1 + OLE OF,$ + OLE OUTPUT,$,$,2,0,1 + OLE PENDOWN,$,$,2 + OLE PENUP,$,$,2 + OLE PRINT,$,$,2,ANSLT,1+VARIABLE + OLE PRODUCT,$,PROD,2,NUMT,2+VARIABLE + OLE QUOTIENT,$,DIVDE,2,NUMT,2 + OLE REQUEST,$,RQUEST,2 + OLE RIGHT,$,$,2,NUMT,1 + OLE RUG,$,RUNRUG + OLE SENTENCE,$,$,2,ANYT,2+VARIABLE + OLE SETHEADING,$,$,2,NUMT,1 + OLE SETTURTLE,$,$,2,SENTT,1 + OLE SETX,$,$,2,NUMT,1 + OLE SETXY,$,$,2,NUMT,2 + OLE SETY,$,$,2,NUMT,1 + OLE SHOW,$,$,2,,1 + OLE SHOWTURTLE,$,$,2 + OLE SNAP,$,$,2 + OLE STARTDISPLAY,$,$,2 + OLE STF,$,SETSTF,2 + OLE STOP,$,$,2 + OLE SUM,$,$,2,NUMT,2+VARIABLE + OLE THEN,$,$,2 + OLE TO,$,$,2 + OLE TOOT,$,$,2,NUMT,1 + OLE TRACE,$,$,2,,1 + OLE TYPE,$,$,2,ANSLT,1+VARIABLE + OLE VERSION,$,VERSN,2 + OLE WIPE,$,$,2,ATOMT+NUMT,1 + OLE WIPECLEAN,$,$,2 + OLE WORD,$,$,2,ANYT,2+VARIABLE + OLE WORDP,$,$,2,ANYT,1 + OLE XCOR,$,$,2 +SOBLSU: OLE YCOR,$,$,2 ;MUST BE ON LAST ENTRY BEFORE SINGLE CHAR ENTRIES + OLE ^\!\,LLPAR,LLPAR,1,ANYT,1 + CDM HAS$ + OLE ^\#\,PROC,PROC,6,ATOMT,1 + CDM LP$ + OLE ^\(\,LPAR,LPAR,1,,1 + CDM RP$ + OLE ^\)\,RPAR,RPAR,1 + CDM PRD$ + OLE ^\*\,STAR,PROD,5,NUMT,2+VARIABLE,YINFIX + CDM PLU$ + OLE ^\+\,PLUS,SUM,4,NUMT,2+VARIABLE,YINFIX + OLE ^\+.\,UPLUS,UPLUS,6,NUMT,1 + CDM MIN$ + OLE ^\-\,MINUS,DIFF,4,NUMT,2,YINFIX + OLE ^\-.\,UMINS,UMINS,6,NUMT,1 + CDM DIV$ + OLE ^\/\,SLSH,DIVDE,5,NUMT,2,YINFIX + CDM DOTS$ + OLE ^\:\,DOTS,DOTS,6,ATOMT,1 + CDM LSS$ + OLE ^\<\,LESS,LESS,3,NUMT,2,YINFIX + CDM EQL$ + OLE ^\=\,EQUAL,EQUAL,3,NUMT,2,YINFIX + CDM GTR$ + OLE ^\>\,GRTR,GREATR,3,NUMT,2,YINFIX + CDM BKSL$ +; OLE ^/^/,BKSL,MOD,5,NUMT,2,YINFIX + +.=OBADD2 + + .STITLE DISPATCH TABLE (ENGLISH) +;FLAGS-- +;FSF -- SPECIAL ON INPUT +;FOF -- SPECIAL ON OUTPUT +;FQF -- QUOTING CHARACTER +;SEPF -- SEPARATOR CHARACTER +;WSF -- WORD SEPARATOR +;NNUMF -- NOT A NUMBER +;OPERF -- OPERATOR + + ;FLAGS--BYTE ONE NUMBER--BYTE TWO +; FSF FOF FQF SEPF WSF NNUMF OPERF # +;^@ . . . . . NNUMF . . +;^A . . . . . NNUMF . . +;^B . FOF . . . NNUMF . 0 +;^C FSF . . . . NNUMF . 0 +;^D FSF . . . . NNUMF . 2 +;^E . . . . . NNUMF . . +;^F . . . . . NNUMF . . +;^G FSF FOF . . . NNUMF . 4 +;^H . FOF . . . NNUMF . 2 +;^I . FOF . SEPF WSF NNUMF . 10 +;^J . FOF . SEPF WSF NNUMF . 12 +;^K . FOF . SEPF WSF NNUMF . 14 +;^L . FOF . SEPF WSF NNUMF . 16 +;^M FSF FOF . SEPF WSF NNUMF . 6 +;^N FSF . . . . NNUMF . 10 +;^O . . . . . NNUMF . . +;^P . . . . . NNUMF . . +;^Q FSF . . . . NNUMF . 12 +;^R FSF . . . . NNUMF . 14 +;^S FSF . . . . NNUMF . 16 +;^T . . . . . NNUMF . . +;^U . . . . . NNUMF . . +;^V . . . . . NNUMF . . +;^W FSF . . . . NNUMF . 20 +;^X FSF . . . . NNUMF . 22 +;^Y FSF . . . . NNUMF . 24 +;^Z FSF . . . . NNUMF . 26 +;^[ . . . . . NNUMF . . +;^\ . . . . . NNUMF . . +;^] . . . . . NNUMF . . +;^^ . . . . . NNUMF . . +;^_ . . . . . NNUMF . . + +;SP . . . SEPF WSF NNUMF . . +;! . . . . . NNUMF . . +;" . . . SEPF . NNUMF . . +;# . . . SEPF . NNUMF OPERF HAS$ +;$ . . . . . NNUMF . . +;% . . . . . NNUMF . . +;& . . . . . NNUMF . . +;' . . . SEPF . NNUMF . . +;( . . . SEPF . NNUMF OPERF LP$ +;) . . . SEPF . NNUMF OPERF RP$ +;* . . . SEPF . NNUMF OPERF PRD$ +;+ . . . SEPF . NNUMF OPERF PLU$ +;, . . . . . NNUMF . . +;- . . . SEPF . NNUMF OPERF MIN$ +;. . . . . . NNUMF . . +;/ . . . SEPF . NNUMF OPERF DIV$ +;0 . . . . . . . . +;1 . . . . . . . . +;2 . . . . . . . . +;3 . . . . . . . . +;4 . . . . . . . . +;5 . . . . . . . . +;6 . . . . . . . . +;7 . . . . . . . . +;8. . . . . . . . . +;9. . . . . . . . . +;: . . . SEPF . NNUMF OPERF DOTS$ +;; . . . SEPF . NNUMF . . +;< . . . SEPF . NNUMF OPERF LSS$ +;= . . . SEPF . NNUMF OPERF EQL$ +;> . . . SEPF . NNUMF OPERF GTR$ +;? . . . . . NNUMF . . + +;@ . . . . . NNUMF . . +;A . . . . . NNUMF . . +;B . . . . . NNUMF . . +;C . . . . . NNUMF . . +;D . . . . . NNUMF . . +;E . . . . . NNUMF . . +;F . . . . . NNUMF . . +;G . . . . . NNUMF . . +;H . . . . . NNUMF . . +;I . . . . . NNUMF . . +;J . . . . . NNUMF . . +;K . . . . . NNUMF . . +;L . . . . . NNUMF . . +;M . . . . . NNUMF . . +;N . . . . . NNUMF . . +;O . . . . . NNUMF . . +;P . . . . . NNUMF . . +;Q . . . . . NNUMF . . +;R . . . . . NNUMF . . +;S . . . . . NNUMF . . +;T . . . . . NNUMF . . +;U . . . . . NNUMF . . +;V . . . . . NNUMF . . +;W . . . . . NNUMF . . +;X . . . . . NNUMF . . +;Y . . . . . NNUMF . . +;Z . . . . . NNUMF . . +;[ . . FQF SEPF WSF NNUMF . 0 +;\ . . . . . NNUMF . . +;] . . FQF SEPF WSF NNUMF . 2 +;^ . . . SEPF . NNUMF OPERF BKSL$ +;_ . . . SEPF . NNUMF . . + +;` . . . . . NNUMF . . +;a . . . . . NNUMF . . +;b . . . . . NNUMF . . +;c . . . . . NNUMF . . +;d . . . . . NNUMF . . +;e . . . . . NNUMF . . +;f . . . . . NNUMF . . +;g . . . . . NNUMF . . +;h . . . . . NNUMF . . +;i . . . . . NNUMF . . +;j . . . . . NNUMF . . +;k . . . . . NNUMF . . +;l . . . . . NNUMF . . +;m . . . . . NNUMF . . +;n . . . . . NNUMF . . +;o . . . . . NNUMF . . +;p . . . . . NNUMF . . +;q . . . . . NNUMF . . +;r . . . . . NNUMF . . +;s . . . . . NNUMF . . +;t . . . . . NNUMF . . +;u . . . . . NNUMF . . +;v . . . . . NNUMF . . +;w . . . . . NNUMF . . +;x . . . . . NNUMF . . +;y . . . . . NNUMF . . +;z . . . . . NNUMF . . +;{ . . . . . NNUMF . . +;| . . . . . NNUMF . . +;} . . . . . NNUMF . . +;~ . . . . . NNUMF . . +;RBO FSF . . . . NNUMF . 30 + + .STITLE SYSTEM DISPATCH TABLE (BYTE ONE) + +;FLAG DEFINITIONS +FSF==200 ;SPECIAL INPUT +FOF==100 ;SPECIAL OUTPUT +FQF==20 ;QUOTING +SEPF==4 ;SEPARATOR +WSF==2 ;WORD SEPARATOR +NNUMF==40 ;NOT A NUMBER +OPERF==10 ;OPERATOR + +DTBL: +.BYTE NNUMF,NNUMF ;^@ ;^A +.BYTE FOF!NNUMF,FSF!NNUMF ;^B ECHOES AS BLANK ;^C COPYS NEXT CHARACTER +.BYTE FSF!NNUMF,NNUMF ;^D DELETES NEXT CHARACTER ;^E +.BYTE NNUMF,FSF!FOF!NNUMF ;^F ;^G BREAK +.BYTE FOF!NNUMF,FOF!SEPF!WSF!NNUMF ;^H BACKSPACE ;^I TABULATE +.BYTE FOF!SEPF!WSF!NNUMF,FOF!SEPF!WSF!NNUMF ;^J LINE FEED ;^K TABULATE VERTICALLY +.BYTE FOF!SEPF!WSF!NNUMF,FSF!FOF!SEPF!WSF!NNUMF ;^L FORM FEED ;^M CARRIAGE RETURN ECHOES AS CARRIAGE RETURN LINE FEED +.BYTE FSF!NNUMF,NNUMF ;^N GET NEXT WORD ;^O +.BYTE NNUMF,FSF!NNUMF ;^P ;^Q SUPER-QUOTE +.BYTE FSF!NNUMF,FSF!NNUMF ;^R COPY REST OF LINE ;^S SKIP NEXT WORD +.BYTE NNUMF,NNUMF ;^T ;^U +.BYTE NNUMF,FSF!NNUMF ;^V ;^W ERASE LAST WORD +.BYTE FSF!NNUMF,FSF!NNUMF ;^X CLARIFY INPUT ;^Y EDIT PREVIOUS LINE +.BYTE FSF!NNUMF,NNUMF ;^Z DESTROY INPUT BUFFER ;^[ MAYBE ALTMODE +.BYTE NNUMF,NNUMF ;^\ ;^] +.BYTE NNUMF,NNUMF ;^^ ;^_ WELL, ANY BETTER IDEAS FOR THEM? +.BYTE SEPF!WSF!NNUMF,NNUMF ;SP ;! ????? +.BYTE SEPF!NNUMF,SEPF!NNUMF!OPERF ;" ;# ACTION OF +.BYTE NNUMF,NNUMF ;$ ;% +.BYTE NNUMF,NNUMF!OPERF ;& ;' (MAYBE LE) +.BYTE SEPF!NNUMF!OPERF,SEPF!NNUMF!OPERF ;( ARITHMETIC GROUPING ;) DITTO +.BYTE SEPF!NNUMF!OPERF,SEPF!NNUMF!OPERF ;* MULTIPLY ;+ ADD +.BYTE NNUMF,SEPF!NNUMF!OPERF ;, ;- SUBTRACT +.BYTE NNUMF,SEPF!NNUMF!OPERF ;. ;/ DIVIDE +.BYTE 0,0 ;0 ;1 +.BYTE 0,0 ;2 ;3 +.BYTE 0,0 ;4 ;5 +.BYTE 0,0 ;6 ;7 +.BYTE 0,0 ;8. ;9. +.BYTE SEPF!NNUMF!OPERF,SEPF!NNUMF ;: THING OF ;; PROPERTY OF +.BYTE SEPF!NNUMF!OPERF,SEPF!NNUMF!OPERF ;< ;= +.BYTE SEPF!NNUMF!OPERF,NNUMF ;> ;? +.BYTE NNUMF,NNUMF ;@ ;A +.BYTE NNUMF,NNUMF ;B ;C +.BYTE NNUMF,NNUMF ;D ;E +.BYTE NNUMF,NNUMF ;F ;G +.BYTE NNUMF,NNUMF ;H ;I +.BYTE NNUMF,NNUMF ;J ;K +.BYTE NNUMF,NNUMF ;L ;M +.BYTE NNUMF,NNUMF ;N ;O +.BYTE NNUMF,NNUMF ;P ;Q +.BYTE NNUMF,NNUMF ;R ;S +.BYTE NNUMF,NNUMF ;T ;U +.BYTE NNUMF,NNUMF ;V ;W +.BYTE NNUMF,NNUMF ;X ;Y +.BYTE NNUMF,FQF!SEPF!WSF!NNUMF ;Z ;[ +.BYTE NNUMF,FQF!SEPF!WSF!NNUMF ;\ LOGICAL OR ;] +.BYTE SEPF!NNUMF!OPERF,SEPF!NNUMF ;^ EXPONENTIATE, MAYBE ;_ MAKE +.BYTE NNUMF,NNUMF ;` GRAVE ACCENT. LOOK THAT UP ON YOUR TELTERM. ;a LOWER CASE +.BYTE NNUMF,NNUMF ;b LOWER CASE ;c LOWER CASE +.BYTE NNUMF,NNUMF ;d LOWER CASE ;e LOWER CASE +.BYTE NNUMF,NNUMF ;f LOWER CASE ;g LOWER CASE +.BYTE NNUMF,NNUMF ;h LOWER CASE ;i LOWER CASE +.BYTE NNUMF,NNUMF ;j LOWER CASE ;k LOWER CASE +.BYTE NNUMF,NNUMF ;l LOWER CASE ;m LOWER CASE +.BYTE NNUMF,NNUMF ;n LOWER CASE ;o LOWER CASE +.BYTE NNUMF,NNUMF ;p LOWER CASE ;q LOWER CASE +.BYTE NNUMF,NNUMF ;r LOWER CASE ;s LOWER CASE +.BYTE NNUMF,NNUMF ;t LOWER CASE ;u LOWER CASE +.BYTE NNUMF,NNUMF ;v LOWER CASE ;w LOWER CASE +.BYTE NNUMF,NNUMF ;x LOWER CASE ;y LOWER CASE +.BYTE NNUMF,NNUMF ;Z LOWER CASE ;LEFT BRACE +.BYTE NNUMF,NNUMF ;VERTICAL BAR ;RIGHT BRACE +.BYTE NNUMF,FSF!NNUMF ;TILDE ;RUBOUT + + .STITLE SYSTEM DISPATCH TABLE (BYTE TWO) +;NUMBERS POINT TO OTHER TABLES +;$ POINTS TO SYSTEM OBLIST + +DTBL2: +.BYTE 0,0 ;^@ ;^A +.BYTE 0,0 ;^B ECHOES AS BLANK ;^C COPYS NEXT CHARACTER +.BYTE 2,0 ;^D DELETES NEXT CHARACTER ;^E +.BYTE 0,4 ;^F ;^G BREAK +.BYTE 2,10 ;^H BACKSPACE ;^I TABULATE +.BYTE 12,14 ;^J LINE FEED ;^K TABULATE VERTICALLY +.BYTE 16,6 ;^L FORM FEED ;^M CARRIAGE RETURN ECHOES AS CARRIAGE RETURN LINE FEED +.BYTE 10,0 ;^N GET NEXT WORD ;^O +.BYTE 0,12 ;^P ;^Q SUPER-QUOTE +.BYTE 14,16 ;^R ;^S SKIP NEXT WORD +.BYTE 0,0 ;^T ;^U +.BYTE 0,20 ;^V ;^W ERASE LAST WORD +.BYTE 22,24 ;^X CLARIFY INPUT ;^Y +.BYTE 26,0 ;^Z DESTROY INPUT BUFFER ;^[ MAYBE ALTMODE +.BYTE 0,0 ;^\ ;^] +.BYTE 0,0 ;^^ ;^_ WELL, ANY BETTER IDEAS FOR THEM? +.BYTE 0,0 ;SP ;! ????? +.BYTE 0,HAS$ ;" ;# ACTION OF +.BYTE 0,0 ;$ ;% +.BYTE 0,0 ;& ;' (MAYBE LE) +.BYTE LP$,RP$ ;( ARITHMETIC GROUPING ;) DITTO +.BYTE PRD$,PLU$ ;* MULTIPLY ;+ ADD +.BYTE 0,MIN$ ;, ;- SUBTRACT +.BYTE 0,DIV$ ;. ;/ DIVIDE +.BYTE 0,0 ;0 ;1 +.BYTE 0,0 ;2 ;3 +.BYTE 0,0 ;4 ;5 +.BYTE 0,0 ;6 ;7 +.BYTE 0,0 ;8. ;9. +.BYTE DOTS$,0 ;: THING OF ;; PROPERTY OF +.BYTE LSS$,EQL$ ;< ;= +.BYTE GTR$,0 ;> ;? +.BYTE 0,0 ;@ ;A +.BYTE 0,0 ;B ;C +.BYTE 0,0 ;D ;E +.BYTE 0,0 ;F ;G +.BYTE 0,0 ;H ;I +.BYTE 0,0 ;J ;K +.BYTE 0,0 ;L ;M +.BYTE 0,0 ;N ;O +.BYTE 0,0 ;P ;Q +.BYTE 0,0 ;R ;S +.BYTE 0,0 ;T ;U +.BYTE 0,0 ;V ;W +.BYTE 0,0 ;X ;Y +.BYTE 0,0 ;Z ;[ +.BYTE 0,2 ;\ LOGICAL OR ;] +.BYTE BKSL$,0 ;^ TEMPORARILY MODULO (MAYBE EXPONENTIATE) ;_ MAKE +.BYTE 0,0 ;` GRAVE ACCENT. LOOK THAT UP ON YOUR TELTERM. ;a LOWER CASE +.BYTE 0,0 ;b LOWER CASE ;c LOWER CASE +.BYTE 0,0 ;d LOWER CASE ;e LOWER CASE +.BYTE 0,0 ;f LOWER CASE ;g LOWER CASE +.BYTE 0,0 ;h LOWER CASE ;i LOWER CASE +.BYTE 0,0 ;j LOWER CASE ;k LOWER CASE +.BYTE 0,0 ;l LOWER CASE ;m LOWER CASE +.BYTE 0,0 ;n LOWER CASE ;o LOWER CASE +.BYTE 0,0 ;p LOWER CASE ;q LOWER CASE +.BYTE 0,0 ;r LOWER CASE ;s LOWER CASE +.BYTE 0,0 ;t LOWER CASE ;u LOWER CASE +.BYTE 0,0 ;v LOWER CASE ;w LOWER CASE +.BYTE 0,0 ;x LOWER CASE ;y LOWER CASE +.BYTE 0,0 ;z LOWER CASE ;{ OPEN BRACE +.BYTE 0,0 ;| VERTICAL BAR, MAYBE OR, MAYBE XOR ;} CLOSE BRACE +.BYTE 0,30 ;~ TILDE, LOGICAL NOT ;RBO RUBOUT???? + .STITL LOSS CHECKING ROUTINES + +IOTBRK: INC #-4 +LOSSCT=.-2 + BGT LOSER + SPUSH A + SPUSH USER + MOV #-1,USER + PRCR + PRTXT ^/BAD TRAP--VECTOR / + MOV 6(SP),A + SUB #4,A ;MAKE IT REAL + CMP #BEBRV,A ;IS IT A BUS ERROR? + BEQ BUSSER + JSR PC,PRON + PRTXT ^/ TRAPPED FROM / + MOV 12(SP),A + JSR PC,PRON + PRCR + SPOP USER + SPOP A + ADD #4,SP + RTI +EMTBRK: HALT +BUSSER: PRTXT ^/BUSS ERROR!!!/ +LOSER: PRTXT ^/I GIVE UP!!/ + HALT + BR .-2 + .STITL DISK STARTER + + + +DSKSRT: MOV #DCRDRB,A ;CHECK FOR DC11 RECIEVE FIRST + TST 14(A) + BNE DSKSGO + MOV #SYSWPR,A ;NEXT LOOK AT SYSTEM REQUESTS +DSKSR1: TSTB 14(A) ;IS THE FUNCTION NON ZERO? + BNE DSKSGO ;FOUND A REQUEST, GO DO IT + ADD #16,A ;LOOK AT NEXT BLOCK + CMP #16*MNUSRS+SYSWPR,A ;LAST BLOCK? + BGT DSKSR1 + MOV SWPLST,A ;MOOBY SWAP OUT REQS? + BNE DSKSGO + CLR DSKS + RTS PC ;NO DISK REQUESTS EXTANT, BETTER LUCK NEXT TIME + +DSKSGO: MOV A,DSKCRB ;ADDRESS OF BLOCK ABOUT TO BE SERVICED + MOV (A),B + BEQ .+4 ;BRANCH IF NO + JSR PC,(B) ;RUN START ROUTINE +DSKSG1: TST (A)+ + MOV #DSKWC,B ;START OF DISK I/O WORDS + MOV (A)+,(B)+ ;WORD COUNT + MOV (A)+,(B) ;CORE ADDRESS + ADD #2,(B)+ ;GODFORSAKEN DEC!!!!! + MOV (A)+,(B)+ ;LOW ORDER DISK ADDRESS + MOV (A)+,(B)+ ;HIGH " " " + TST (A)+ ;GO PAST UNUSED WORD + MOVB (A),DSKS ;SET FUCTION, ENABLE INTERUPT, GO!! + RTS PC + + +DPROVK: SPUSH PS + MOV #340,PS + CMP #200,DSKS ;IF THE INTERUPT IS OFF AND THE DISK IS READY + BNE DSKSG2 ;PROVOKE IT; OTHERWISE LEAVE IT FOR SOMEONE ELSE + SPUSH A + SPUSH B + JSR PC,DSKSRT + SPOP B + SPOP A +DSKSG2: SPOP PS + RTS PC + .STITL DISK REQUEST BLOCK GRABBER + +SYDRBG: SPUSH PS ;SAVE OLD PROSSESOR LEVEL + MOV #340,PS ;LOCK OUT INTERUPTS + MOV #SYSWPR,A ;LOOK FOR A FREE SYSTEM DISK REQUEST BLOCK +SDRBG1: TST 14(A) ;IS IT FREE? + BEQ SDRBG2 + ADD #16,A ;LOOK AT NEXT ONE + CMP #16*MNUSRS+SYSWPR,A ;ANY MORE? + BGT SDRBG1 ;YES, SEE IF FREE + SPOP PS ;NO MORE, WE HAVE LOST BIG + WAIT ;THIS WILL PROBABLY NOT DO ANY GOOD + BR SYDRBG ;AND CERTAINLY WON'T UNLESS OUR PRIORITY IS <5 +SDRBG2: MOV DUSECT,14(A) ;LABEL BLOCK AS IN USE, BUT NO REQUEST + INCB DUSECT+1 ;SO PEOPLE CAN DISTINGUISH + SPOP PS ;YOU CAN INTERUPT NOW. + RTS PC + + +;USER ROUTINE TO FLUSH UNTIL DISK REQUEST POINTED TO BY A DONE + +DSKWA2: ADD #14,A +DSKWAI: MOV USER,U + MOV (A),B +DSKWA1: CMP B,(A) + BEQ DNDONE + JSR PC,RUNME + RTS PC +DNDONE: MOV #FRDSKW,FLSRES(U) + JSR PC,FLUSH + BR DSKWA1 + +UBLKGR: MOV #DBITTB,A ;USERS BIT TABLE ADDR + MOV #DBITBE,B + MOV #UNXTDB,D ;POINTER TO ADDR OF NEXT AWAILABLE BLOCK + ADD USER,D + MOV #DBITBE,E ;END OF USERS BIT TABLE + CLR F ;DISK ISN'T NEARLY FULL + BIT #DSAMFL,FLAGS2 ;IS THE DISK ALLMOST FULL? + BEQ .+4 ;NO + INC F ;YES + JSR PC,BLKGRB ;GO DO GOOD THINGS + RTS PC ;DISK REALLY FULL + TST F ;IS DISK NEARLY FULL? + BEQ UBLKG1 ;NO, SKIP RETURN + BIS #DSAMFL,FLAGS2 ;YES WARN THE WORLD. +UBLKG1: JMP SRET ;WIN ANYWAY, SKIP RETURN + +UBLKFR: MOV #DBITTB,E + MOV USER,B + MOV UDSKAD(B),D + JSR PC,BLKFRE + BIC #DSAMFL,FLAGS2 ;DISK NOW SURELY HAS A FREE BLOCK + RTS PC + +;GRABS A DISK BLOCK AND A REQUEST BLOCK +;REQUEST BLOCK ADDR RETURNS IN A +;DISK BLOCK ADDR RETURNS IN B AND C +;ARGS: BEGINNING OF BIT TABLE IN A +;END OF BIT TABLE IN B +;ADDR OF NEXT BLOCK WORDS IN D +;DISK ALMOST FULL FLAG IN F +BLKGRB: CLR C +BLKGR3: MOV #1,E +BLKGR2: BIT E,(A) ;IS THIS BLOCK FREE? + BEQ BLKGR5 ;YES, PRAISE THE LORD! + INC C ;NO, TRY THE NEXT BLOCK + ASL E + BCC BLKGR2 ;NO OVERFLOW? + TST (A)+ ;NEXT WORD + CMP A,B ;AT END OF THE TABLE + BLE BLKGR3 ;CONTINUE + TST F ;NO BLOCK AVAILABLE, ARE WE REAL FULL? + BEQ BLKGR4 ;NO, BUT CLOSE + RTS PC ;YES, VERY FULL +BLKGR4: INC F ;DISK ALMOST FULL + BR BLKGR6 +BLKGR5: BIS E,(A) ;THAT BLOCK IS NO LONGER FREE + CLR F ;AND THE DISK ISN'T NEARLY FULL +BLKGR6: JSR PC,SYDRBG ;GET A DISK REQUEST BLOCK + MOV #-200,2(A) ;ALL BLOCKS ARE THIS LONG + MOV (D),6(A) ;NEXT AVAILABLE BLOCK + MOV 2(D),10(A) + SPUSH (D) + SPUSH 2(D) + SWAB C ;MULTIPLY BY 200 + ASR C + BIC #100000,C + MOV 6(D),2(D) ;LOW ORDER BASE ADDR + ADD 4(D),C ;LOW ORDER BASE ADDR + ADC 2(D) + MOV C,(D) + SPOP C + SPOP B + JMP SRET + +;FREES THE DISK BLOCK WHOSE LOW ORDER ADDR IS IN C +;BASE OF THIS DISK SPACE IS IN D +;ADDRESS OF THE APPRPRIATE BIT TABLE IS IN E +BLKFRE: SUB D,C ;RELOCATE DISK ADDR RELATIVE TO ZERO + MOV #1,B + BIT #177,C + BEQ .+4 + HALT +BLKFR1: BIT #3777,C ;IS ADDR DIVISABLE BY 20*200? + BEQ BLKFR2 ;YES + SUB #200,C ;NO, TRY TO MAKE IT BE + ASL B ;AND GET "REMAINDER" IN B + BR BLKFR1 +BLKFR2: SWAB C ;DIVIDE BY 400 + ASR C ;BY 2 + ASR C ;BY 2=>DIVIDED BY 400*2*2=2000=4000/2 + ADD C,E ;GET POINTER INTO BIT TABLE + BIC B,(E) ;AND FREE THE BLOCK + RTS PC + .STITL DISK INTERUPT ROUTINE + + +DSKBRK: SPUSH A + SPUSH B + BIT #100000,DSKS ;ANY ERROR BITS SET? + BNE DSKLOS ;BITE THE BAG! + MOV DSKCRB,A ;POINTER TO FUNCTION WORD + CLR 14(A) ;REQUEST HAS BEEN SERVICED + MOV (A),B + BEQ .+4 ;NO + JSR PC,(B) ;YES, GO DO IT + CLR (A) +DSKRTY: JSR PC,DSKSRT ;LOOK FOR SOMETHING ELSE TO DO +DSKRET: SPOP B + SPOP A + RTI + +DSKLOS: HALT ;DISK LOST BIG + MOV #400,DSKS ;POWER CLEAR IT + HALT ;GIVE IT A CHANCE + BR DSKRTY ;TRY AGAIN(EVENTUALLY) + .STITL SCHEDUALER + + +RUNME: TST USER + BGE RUNME1 +RUNME2: RTS PC ;SYSTEM CALLED RUNME +RUNME1: TST FLSADR(U) ;IF HE WANTS TO RUN HE SHOULD JSR HERE + BEQ RUNME2 ;IF FLSADR IS ZERO, JUST KEEP RUNNING HIM + MOV #-1,USER ;SYSTEM IS NOW USER + JSR PC,UACSAV ;STORE HIS ACS + CLR FLSADR(U) ;GUY IS NOW RUNABLE + CLR FLSRES(U) + INC NRABLU + SPOP UPC(U) ;HE SHOULD START AFTER THE JSR PC,RUNME +NEXTU1: MOV #SLOTST,A ;TRY TO RUN USER IN U +NEXTU2: CMP U,(A)+ ;IS HE ASSIGNED A SLOT IN CORE? + BNE NEXTU3 ;NOT THIS ONE, ANYWAY + TST (A) ;IS HE ALL THE WAY IN? + BLT NEXTUS ;NO CAN'T RUN HIM YET + BEQ NEXTU3 + CMP #FRNEWU,FLSRES(U) + BNE NEXT14 + MOV #UGO,FLSADR(U) + TST RWWSW + BNE NEXT15 + MOV SLTCAD-SLOTST-2(A),C + MOV #16,D + JMP NEXT11 +NEXT14: CLR FLSRES(U) + JMP RUNUSR + + + +;CALL TO GET INDEX OF NEXT USER TO RUN + +NEXTUS: SUB #LUBLK,ULAST ;COUNT BACKWARDS + BGE .+10 ;DON'T GO NEG + MOV #*LUBLK,ULAST ;LAST POSSIBLE USER INDEX + MOV ULAST,U ;SEE IF THIS IS A GOOD GUY TO RUN +NEXT15: CMP #FRTYIH,FLSRES(U) + BEQ NEXTUS + TST FLSADR(U) ;IF FLSADR IS ZERO, RUNABLE(???) + BEQ NEXTU1 ;RUN HIM. + BLT NEXTUS ;NEG=>NON EX USER + MOV U,USER ;USER IS NOW USER + JSR PC,UACRES ;RESTORE HIS ACS + JMP @FLSADR(U) ;SEE IF HE SHOULD REALLY RUN + + + +NEXTU3: TST (A)+ ;EXTANT CORE SLOT? + BNE NEXTU2 ;YES, CHECK NEXT ONE + MOV PUSPSL,A ;SEE IF THERE IS A PREFERED SLOT + BGT NEXTU6 + MOV #SLOTST,A +NEXTU4: TST (A)+ + TST (A)+ + BLT NEXTU4 + BEQ NEXTUS + CMP #1,-2(A) + BEQ NEXTU4 ;GUY HASN'T RUN YET, DON'T SWAP HIM OUT + MOV -2(A),B ;USER THAT MAY BE SWAPED OUT + CMP B,LOCKUS ;IS HE LOCKED IN? + BEQ NEXTU4 ;YES, DON'T BOTHER HIM + CMP B,GCLOCK + BEQ NEXTU4 + TST NSWPU ;ARE THERE USERS BEING SWAPED? + BEQ NEXTU6 ;NO, SWAP ONE + CMP NINU,#1 ;IS THERE ONLY ONE USER IN CORE? + BEQ NEXTUS ;YES, RUN HIM +NEXTU6: CLR PUSPSL ;IF THERE WAS A PREFERED SLOT, WE ARE DOING IT + TST -(A) + MOV -2(A),B ;FOUND A GOOD SLOT, USER TO SWAP OUT INTO B + MOV U,-2(A) ;NEW OCCUPANT OF SLOT + + FOR DEBUG + BIT #SWTRCF,SFLAGS ;TRACE SWAPS? + BEQ NEXTU5 + SPUSH A + PRTXT ^/SWAPPING: / + MOV B,A + JSR PC,PRON + SPACE + MOV U,A ;USER WHO IS COMING IN + JSR PC,PRON + SPACE + MOV (P),A + SUB #SLOTST+2,A + ASR A + ASR A + JSR PC,PRON ;SLOT + SPACE + MOV TIME,A + JSR PC,PRON + PRCR + SPOP A + .ENDC + ENDC DEBUG + +NEXTU5: CLR D + MOV SLTCAD-SLOTST-2(A),C ;MOBY SWAP OUT BLOCK FOR THIS SLOT + MOV #SWPOST,(C)+ ;SWAP OUT USER START ROUTINE + MOV USWCNT,(C)+ ;WORD COUNT OF A USER SLOT + MOV SLTCAD-SLOTST(A),(C)+ ;SLOT CORE ADDRESS + MOV USWPAD(B),(C)+ ;LOW ORDER SWAP OUT ADDR OF U TO SWAP OUT + MOV USWPAD+2(B),(C)+ ;HIGH OORDER + TST (C)+ ;WASTED WORD + MOV #DWRTEC,(C)+ ;DISK WRITE COMMAND +NEXT11: DEC NINU ;ONE LESS IN CORE + INC NSWPU ;ONE MORE MOVING AROUND + MOV #SWPIST,(C)+ ;SWAP IN USER START ROUTINE + MOV USWCNT,(C)+ ;SLOT WORD COUT + MOV SLTCAD-SLOTST(A),(C)+ ;SLOT CORE ADDRESS + CMP #FRNEWU,FLSRES(U) + BNE NEXT12 + MOV DCLRUS,(C)+ + MOV DCLRUS+2,(C)+ + MOV #UGO,FLSADR(U) + MOV UDSKAD(U),UNXTDB(U) + MOV UDSKAD+2(U),UNXTDB+2(U) + BR NEXT13 +NEXT12: MOV USWPAD(U),(C)+ ; " " + MOV USWPAD+2(U),(C)+ ;USER ADDRESS ON DISK +NEXT13: MOV A,(C)+ ;ADDRESS OF PLACE TO ZAP TO 1 WHEN DONE + MOV #DREADC,(C) ;READ FROM DISK + SUB #32,C ;BEGINING OF MOOBY SWAP REQ PAIR + ADD D,C + SPUSH PS + MOV #340,PS ;NO INTS! + MOV C,@SWPLEP + ADD #2,SWPLEP + SPOP PS + MOV #-1,(A) ;NOT IN YET + BR NEXT10 + +NEXTU7: MOV #-1,USER ;FLUSH ENTERS HERE, SYSTEM NOW USER + MOV #SLOTST,A ;SEE IF THIS SUPER FLUSHED GUY IS IN CORE +NEXTU8: CMP U,(A)+ + BNE NEXTU9 ;NOT HERE. + TST (A)+ ;IS HE REALLY IN? + BLE NEXT10 ;NO, NOT REALLY + CMP #FRDSKW,FLSRES ;IF JUST HUNG ON DISK + BEQ NEXT10 ;FORGET HIM + MOV A,PUSPSL ;HE IS PREFERED OUT + MOV U,PUSRSP + BR NEXT10 +NEXTU9: TST (A)+ + BNE NEXTU8 +NEXT10: JMP NEXTUS + +FLUSH: TST USER + BGE FLUSH4 + RTS PC +FLUSH4: JSR PC,UACSAV ;STOP USER; STORE HIS ACS + MOV AC,UAC + MOV MQ,UMQ + MOV SR,USR + MOV FLSADR(U),A + SPOP FLSADR(U) ;SAVE PC + TST A ;IS THIS GUY ALREADY STOPED? + BNE NEXTU7 ;GO TRY ANOTHER GUY + UUNTIM TIMUSD + MOV #-1,USER + TIMER NULTIM + TST FLSRES(U) + BNE .+10 + MOV #FRRAND,FLSRES(U) + DEC NRABLU + MOV P,UPDLP ;SAVE USER'S POINTER + MOV SPDLP,P ;SYSTEM PDL + + FOR DEBUG + BIT #FRTRCF,SFLAGS + BEQ FLUSH3 + PRTXT ^/FLUSHING USER / + MOV U,A + JSR PC,PRON + SPACE + MOV TIME,A + JSR PC,PRON + PRCR + .ENDC + ENDC DEBUG + +FLUSH3: MOV #UVBLK,A + MOV BASEUS,B ;TO BLT OUT USER VARIABLES +FLUSH1: SUB B,(A)+ ;UNRELOCATE A POINTER + CMP #UVREND,A ;END OF VARS TO BE UNRELOCATED? + BGT FLUSH1 ;GO DO ANOTHER + MOV #UVBLK,A ;SET UP FOR BLT + MOV ACRELF,C + BEQ FLUSH2 + MOV U,D + ADD #UACA-2,D ;POINTER TO USERS ACS +FLUSH5: TST (D)+ ;NEXT AC TO MAYBE RELOCATE + TST C + BEQ FLUSH2 ;NO MORE TO RELOCATE + CLC + ROR C + BCC FLUSH5 ;DON'T RELOCATE THIS ONE + SUB B,(D) + BR FLUSH5 +FLUSH2: MOV (A)+,(B)+ ;ONE AT A TIME, KIDDIES! + CMP #UVBLK+LUVBLK-MAXELN,A ;DONE? + BGT FLUSH2 + JMP NEXTUS + ;RUNUSR, THE "MAIN LOOP" + +RUNUSR: CMP U,PUSRSP ;AM I THE GUY THEY WANT OUT? + BNE .+6 ;BRANCH IF NO + CLR PUSPSL ;I DON'T WANT TO GO! + INC (A) ;INDICATE THAT THIS GUY HAS BEEN RUN + MOV SLTCAD-SLOTST(A),D ;SLOT ADDRESS THIS GUY IS IN + TST (D)+ ;REALLY RIGHT NOW + MOV D,B ;BASE OF SLOT + MOV #UVBLK,C ;BASE OF USER VARIABLES +RUNUS1: MOV (B)+,(C)+ ;BLTTTTTTTTTTTT! + CMP #UVBLK+LUVBLK,C + BGT RUNUS1 + MOV #UVBLK,C ;TO RELOCATE VARIABLES +RUNUS2: ADD D,(C)+ ;ADD BASE OF SLOT + CMP #UVREND-2,C + BGT RUNUS2 + MOV D,BASEUS + MOV ACRELF,A + BEQ RUNUS5 + MOV U,B + ADD #UACA-2,B +RUNUS6: TST (B)+ + TST A + BEQ RUNUS5 + CLC + ROR A + BCC RUNUS6 + ADD D,(B) + BR RUNUS6 +RUNUS5: + FOR DEBUG + BIT #FRTRCF,SFLAGS + BEQ RUNUS4 + PRTXT ^/STARTING USER / + MOV U,A + JSR PC,PRON + SPACE + MOV TIME,A + JSR PC,PRON + PRCR + .ENDC + ENDC DEBUG + +RUNUS4: MOV P,SPDLP ;SAVE SYSTEM PDL POINTER + MOV UPDLP,P ;GET USER PDL POINTER + MOV U,USER ;NOW HE'S REALLY THE GUY + SPUSH UPC(U) ;PLACE TO START USER + MOV QUANT,UQUANT ;RUN FOR 3 1/100TH'S???? + UNTIME NULTIM + UTIMER TIMUSD + MOV UAC,AC + MOV UMQ,MQ + MOV USR,SR + JMP UACRES ;RESTORE USER ACS AND START USER + + +SCHEDP: TST UQUANT ;SEE IF IT'S TIME TO FLUSH + BLE .+4 ;NOT YET + RTS PC + SPUSH U + MOV USER,U + MOV #FRSCED,FLSRES(U) + JSR PC,FLUSH + JSR PC,RUNME + SPOP U + RTS PC + .STITL CLOCK BREAK ROUTINE + +CLKBRK: SPUSH A + SPUSH B + ADD #200,TIME + ADC TIME+2 + DEC UQUANT + TSTB DSKS ;IS THE DISK BUSY? + BGE .+6 ;YES + JSR PC,DSKSRT + CMP #13183.,TIME+2 ;IS IT MIDNIGHT? + BLE DATEC ;YES, CHANGE THE DATE +CLKBR1: JMP @#CLKBR2 +CLKBR2: SPOP B + SPOP A + RTI + + +CLKBDM: BIT #7777,TIME ;EVERY 4 BRKS (=<4*128>/10,000 SECS) + BNE CLKBR2 ;1/20 < T < 1/21 SECS + JSR PC,DMSQ + JSR PC,TI2Q + BR CLKBR2 + +DATEC: CLR TIME+2 ;TIME IS NOW ZERO + INC RDAY ;CHANGE THE DAY + MOV RMONTH,A + CMPB RDAY,DMON(A) + BLE CLKBR1 ;NOT ON A MONTH BOUNDARY + INC RMONTH + MOV #1,RDAY + CMP #12,RMONTH + BLE CLKBR1 + INC RYEAR + MOV #1,RMONTH + BR CLKBR1 + +RDAY: 0 +RMONTH: 0 +RYEAR: 0 +DMON: .BYTE 31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30.,31. + .STITL SWAP START+STOP ROUTINES + +SWPOST: MOV #SWPOSP,(A) ;SWAP OUT USER START, SET UP STOP + RTS PC + +SWPOSP: TST (P)+ ;FLUSH RETURN, WE'RE NOT GOING BACK THAT WAY + ADD #16,A ;POINT TO SWAP IN BLOCK + JSR PC,DSKSGO ;START DISK ON THAT + JMP DSKRET ;AND RETURN FROM INTERUPT + +SWPIST: MOV #SWPISP,(A) ;SWAP IN START, SET UP STOP + RTS PC + +SWPISP: CLR UQUANT ;SCHED REAL SOON + MOV 12(A),B ;FLAG + MOV #1,(B) ;THIS GUY IS IN AND NOT RUN YET + SUB #2,SWPLEP + SPUSH A + MOV #SWPLST+2,A + MOV #SWPLST,B + MOV (A)+,(B)+ + BNE .-2 + INC NINU ;ONE MORE GUY IN + DEC NSWPU ;ONE LESS GUY MOVING + SPOP A + RTS PC + .STITL MISC ROUTINES + +ACSAV: MOV E,-(P) + MOV D,-(P) + MOV C,-(P) + MOV B,-(P) + MOV A,-(P) + JMP (F) + +ACRES: TST (P)+ + MOV (P)+,A + MOV (P)+,B + MOV (P)+,C + MOV (P)+,D + MOV (P)+,E + RTS F + +UACSAV: MOV A,UACA(U) + MOV B,UACB(U) + MOV C,UACC(U) + MOV D,UACD(U) + MOV E,UACE(U) + RTS PC + +UACRES: MOV UACA(U),A + MOV UACB(U),B + MOV UACC(U),C + MOV UACD(U),D + MOV UACE(U),E + RTS PC + + + +PPUSHT: CMP P,PPUSHL + BLOS .+4 + RTS PC + BIT #177000,P ;IS IT THE SYSYTEM PDL? + BNE .+4 + RTS PC ;YES, IGNORE + JMP PPSWPO ;PDL REALLY OVERFLOWED + +PPOPT: CMP P,PPOPL + BHIS .+4 + RTS PC + JMP PPSWPI + +SPUSHT: SUB #2,S + CMP S,SPUSHL + BLOS .+4 + RTS PC + JMP SPSWPO + +SPOPT: ADD #2,S + CMP S,SPOPL + BHI .+4 + RTS PC + JMP SPSWPI + +.SPACE: PRTXT ^\ \ + RTS PC + +.CRLF: JMP @#.+4 + JSR PC,ERTAP + CRMES + RTS PC + +CRLF: MOV #15,D + JMP TYO + .STITL P AND S PDL SWAP OUTERS + +PPSWPO: JSR F,ACSAV ;TIME TO WORK! + + FOR DEBUG + BIT #SPTRCF,SFLAGS + BEQ PPSWP1 + SUB #100,PPUSHL ;SO IT DOESN'T OVERFLOW AGAIN + PRTXT ^/SWAPPING OUT P PDL / + MOV P,A + SUB A,PRBAO + NEG A + JSR PC,PRON + PRCR + ADD #100,PPUSHL + .ENDC + ENDC DEBUG + +PPSWP1: JSR PC,UBLKGR ;GET ALL THE GOOD STUFF WE NEED + HALT ;WHAT, NO DISK SPACE + HALT ;STOP, YOU STUPID MACHINE + SPUSH B ;SAVE ADDRESS + MOV PSWPAD,4(A) ;PLACE WHERE PDL IS + MOVB #DWRTEC,14(A) ;WRITE IT ONTO THE RIGHT PLACE + JSR PC,DSKWA2 ;FLUSH UNTIL IT IS REALLY OUT + MOV BASEUS,A + ADD #PDLINK+4-SLOT1,A ;GIVING US THE LINK ADDRESS+4 FOR THIS GUY + MOV C,-(A) ;HIGH ORDER PART + SPOP -(A) ;LOW ORDER PART + BIT #PPNAIF,FLAGS2 ;WAS THE PDL NOT ALL THE WAY IN ANYWAY? + BNE .+10 ;PART ALREADY OUT + SUB #54,PPOPL ;NONE OUT BEFORE, CHANGE LIMIT + BIS #PPNAIF,FLAGS2 ;CERTAINLY NOT ALL IN NOW + MOV PSWPAD,B ;ADDRESS-2 PDL SWAPED FROM + MOV (B),-(A) ;MOVE WORDS UP + MOV -(B),-(A) + CMP B,P + BGE .-4 + ADD #374,P ;PDL HAS MOVED! + ADD #374,PRBAO + JSR F,ACRES ;ALL DONE! + RTS PC + + +SPSWPO: JSR F,ACSAV ;TIME TO WORK! + + FOR DEBUG + BIT #SPTRCF,SFLAGS + BEQ SPSWP1 + PRTXT ^/SWAPING OUT S PDL / + MOV S,A + SUB A,SPRBAO + NEG A + JSR PC,PRON + PRCR + .ENDC + ENDC DEBUG + +SPSWP1: JSR PC,UBLKGR ;GET ALL THE GOOD STUFF WE NEED + HALT ;WHAT, NO DISK SPACE + HALT ;STOP, YOU STUPID MACHINE + SPUSH B ;SAVE ADDRESS + MOV SSWPAD,4(A) ;PLACE WHERE PDL IS + MOVB #DWRTEC,14(A) ;WRITE IT ONTO THE RIGHT PLACE + JSR PC,DSKWA2 ;FLUSH UNTIL IT IS REALLY OUT + MOV BASEUS,A + ADD #SDLINK+4-SLOT1,A ;GIVING US THE LINK ADDRESS+4 FOR THIS GUY + MOV C,-(A) ;HIGH ORDER PART + SPOP -(A) ;LOW ORDER PART + BIT #SPNAIF,FLAGS2 ;WAS THE PDL NOT ALL THE WAY IN ANYWAY? + BNE .+10 ;PART ALREADY OUT + SUB #54,SPOPL ;NONE OUT BEFORE, CHANGE LIMIT + BIS #SPNAIF,FLAGS2 ;CERTAINLY NOT ALL IN NOW + MOV SSWPAD,B ;ADDRESS-2 PDL SWAPED FROM + MOV (B),-(A) ;MOVE WORDS UP + MOV -(B),-(A) + CMP B,S + BGE .-6 + ADD #374,S ;PDL HAS MOVED! + ADD #374,SPRBAO + JSR F,ACRES ;ALL DONE! + RTS PC + + .STITL P AND S PDL SWAPER INERS +PPSWPI: BIT #PPNAIF,FLAGS2 ;IS THE PDL ALL THE WAY IN? + BNE .+4 ;NO (PRAISE THE LORD!) + HALT + JSR F,ACSAV + + FOR DEBUG + BIT #SPTRCF,SFLAGS + BEQ PSWPI1 + PRTXT ^/SWAPING IN P PDL / + MOV P,A + SUB A,PRBAO + NEG A + JSR PC,PRON + PRCR + .ENDC + ENDC DEBUG + +PSWPI1: MOV PSWPAD,A + MOV A,B + ADD #374,A + MOV (A),(B) + MOV -(A),-(B) + CMP A,P + BGT .-4 + SUB #374,P + SUB #374,PRBAO + JSR PC,SYDRBG + TST (A)+ + MOV #-200,(A)+ + MOV PSWPAD,(A)+ + MOV PPBASE,E + MOV (E)+,C + MOV C,(A)+ + MOV (E),(A)+ + TST (A)+ + MOVB #DREADC,(A) + JSR PC,DSKWAI + MOV PPBASE,D + TST (D)+ + BNE PSWPI2 + TST (D) + BNE PSWPI2 + BIC #PPNAIF,FLAGS2 ;IF BOTH LINKS ARE ZERO NOW, THERE IS NO MORE PDL ON DISK + ADD #54,PPOPL +PSWPI2: JSR PC,UBLKFR + JSR F,ACRES + RTS PC + +SPSWPI: BIT #SPNAIF,FLAGS2 ;IS THE PDL ALL THE WAY IN? + BNE .+4 ;NO (PRAISE THE LORD!) + HALT + JSR F,ACSAV + + FOR DEBUG + BIT #SPTRCF,SFLAGS + BEQ SSWPI1 + PRTXT ^/SWAPING IN S PDL / + MOV S,A + SUB A,SPRBAO + NEG A + JSR PC,PRON + PRCR + .ENDC + ENDC DEBUG + +SSWPI1: MOV SSWPAD,A + MOV A,B + MOV (A),(B) + ADD #374,A + MOV (A),(B) + MOV -(A),-(B) + CMP A,S + BGT .-6 + SUB #374,S + SUB #374,SPRBAO + JSR PC,SYDRBG + TST (A)+ + MOV #-200,(A)+ + MOV SSWPAD,(A)+ + MOV SPBASE,E + MOV (E)+,C + MOV C,(A)+ + MOV (E),(A)+ + TST (A)+ + MOVB #DREADC,(A) + JSR PC,DSKWAI + MOV SPBASE,D + TST (D)+ + BNE SSWPI2 + TST (D) + BNE SSWPI2 + BIC #SPNAIF,FLAGS2 ;IF BOTH LINKS ARE ZERO NOW, THERE IS NO MORE PDL ON DISK + ADD #54,SPOPL +SSWPI2: JSR PC,UBLKFR + JSR F,ACRES + RTS PC + + + +.IFZ 105 + +SWAPER: CLR A +SWAP1: PUSH A + PUSHS A + INC A + CMP A,B + BGT SWAP2 + BR SWAP1 +SWAP2: POP C + POPS D + DEC A + CMP A,D + BEQ .+4 + HALT + CMP A,C + BEQ .+4 + HALT + TST A + BEQ SWAPER + BR SWAP2 +.ENDC + .STITL TIMER ROUTINES + +.TIME: SPUSH A + SPUSH B + SPUSH C + SPUSH D + SPUSH PS + MOV #340,PS + JSR PC,GTIME + JSR PC,URELTM + MOV TMPDLP,D + MOV (A),(D)+ + MOV -(A),(D)+ + MOV D,TMPDLP + CLR (A)+ + CLR (A) + JSR PC,RELTIM + SPOP PS + SPOP D + SPOP C + SPOP B + SPOP A + RTS PC + +.UTIME: SPUSH A + SPUSH B + SPUSH C + SPUSH D + SPUSH PS + MOV #340,PS + JSR PC,GTIME + JSR PC,URELTM + MOV (E)+,A + ADD ELAPSE,(A)+ + ADC (A) + ADD ELAPSE+2,(A) + MOV TMPDLP,D + MOV -(D),ELAPSE + MOV -(D),ELAPSE+2 + MOV D,TMPDLP + JSR PC,RELTIM + SPOP PS + SPOP D + SPOP C + SPOP B + SPOP A + RTS E + +URELTM: MOV #ELAPSE,A + ADD B,(A)+ + ADC (A) + ADD C,(A) + RTS PC + +RELTIM: MOV #ELAPSE,A + SUB B,(A)+ + SBC (A) + SUB C,(A) + RTS PC + + +GTIME: MOV PCCNT,B + ADD #200,B + TSTB PCS + BGE .+6 + MOV #200,B + MOV TIME+2,C + ADD TIME,B + ADC C + RTS PC + + .STITL COMMUNICATE WITH MAIN MACHINE + +RJLSW: 0 ;NON-ZERO=> ACTIVATE COMMUNICATE LINK +REDY10: 0 ;NON-ZERO=>10 IS READY +SYSMES: 0 ;NUMBER OF MESSAGES WAITING FOR THE SYSTEM + .MACR EXCHA X,Y + MOV X,A + MOV Y,X + MOV A,Y + .ENDM + +;LOGIN STRING +LOGMES: .BYTE 'Z-100,'S-100,'S-100,'_-100 + .ASCII /R11LOGO/ + .BYTE 33 + .ASCII /U11HERE/ + .BYTE 'K-100,0 + .EVEN + +;RECIEVE VARIABLES +RBPOIN: 0 +DCRBIP: DCRBF1-2 ;INITIAL POINTER +DCRACF: 0 ;ACKNOWLEDGE FLAG +DCRCKS: 0 ;CHECKSUM OF INCOMING WORDS +DCRMID: 0 ;ID # SENT WITH MESSAGE +DCRWCT: 0 ;WORD COUNT OF CURRENT MESSAGE +DCRPRB: 0 ;"PARITY" BITS FOR INCOMING WORD +DCRWBL: 0 ;BUILD RECIEVED WORD HERE + +DCRLST: .=.+40 ;MESSAGES WAITNING TO BE PICKED UP + +DCRDRB: .WORD 0,-400,DCRBF2-2,0,0,0,0 ;DISK REQUEST BLOCK + + +;TRANSMIT VARIABLES +TBPOIN: 0 +DCTSMS: .=.+20 ;SMALL (1 OR 2 CHAR)MESSAGES TO BE SENT +DCTBST: .=.+40 ;MESSAGES WAITING TO BE SENT +;BUFFERS +DCRBF1: .=.+100 ;RECIEVE BUFFER 1 +DCRBF2: .=.+100 ; " " 2 + +;DC11 PDLS + .=.+20 + RLOGIN +RPDLP: .-2 + .=.+20 + TLOGIN +TPDLP: .-2 + +;RECIEVE INTERUPT ROUTINES + +DCRBRK: SPUSH A + EXCHA RPDLP,P ;SET UP RECIEVE PDL + MOV DCRB,A ;GET CHAR FROM LINE + RTS PC ;RESUME PROCESSING + +RFLUSH: EXCHA RPDLP,P ;RESTORE PDL + SPOP A + RTI + +RLOGIN: BIS #100,DCTS ;WAKE UP TRANSMIT ROUTINE + JSR PC,RFLUSH ;GET NEXT CHAR + CMP #140,A ;IS IT SYNC? + BNE RLOGIN ;NO, WAIT FOR THE 10 TO WAKE UP + INC REDY10 ;10 IS READY TO COMMUNICATE + +RECLOP: JSR PC,RFLUSH ;GET THE NEXT CHAR OFF THE LINE + SUB #140,A ;IS IT CONTROL CHAR? + BLT RECLOP ;NO (THIS SHOULDN'T HAPPEN) + CMP #10,A ;IS IT TOO BIG? + BLE RECLOP ;YUP (THIS SHOULD HAPPEN EVEN LESS!!) + ASL A + JMP @RECTAB(A) ;DO THE CONTROL CHAR + +RECTAB: RECLOP ;NULL, SYNC(WHATEVER YOU WANT TO CALL IT) + STPREC ;STOP! + ACTREC ;WELL????? + RECLOP ;??? + RECLOP ;???? + ACKREC ;ACKNOWLEDGEMENT OF TRANSMITTED MESSAGE + NAKREC ;NEGATIVE, PLEASE SEND AGAIN + DATA ;DATA BLOCK COMES NEXT + +STPREC:ACTREC: BR RECLOP + +NAKREC: MOV #-1,DCRACF ;FOR NAK + BR ACKRC1 +ACKREC: CLR DCRACF +ACKRC1: JSR PC,GBITCH ;GET NUMBER OF MESSAGE BEING "ACK"ED + BR RECLOP ;LOSE! + CMP #20,A ;IS IT TOO BIG? + BLE RECLOP + ASL A + MOV DCRACF,DCTBST(A) ;TELL TRANSMIT ROUTINES ACK OR NAK + BR RECLOP + +DATA: CLR DCRCKS ;CLEAR CHECKSUM + JSR PC,GWORD ;GET A WORD OFF THE LINE + JMP RECLOP ;BAD PARITY IN WORD, CAN'T WIN + MOVB DCRWBL+1,DCRMID ;SENDERS ID # FOR THIS DATA + MOVB A,DCRWCT ;NUMBER OF WORDS FOLLOWING, INC. CHECKSUM + MOV DCRBIP,RBPOIN ;POINTER TO CURRENT BUFFER +DATA1: ADD #2,RBPOIN ;POINT TO NEXT WORD + JSR PC,GWORD + BR NODATA ;PARITY ERROR IN WORD + MOV A,@RBPOIN ;SAVE WORD + DEC DCRWCT ;IS IT THE LAST ONE(CHECKSUM)? + BGT DATA1 ;NO + TST DCRCKS ;SHOULD BE ZERO + BNE NODATA ;NO SUCH LUCK + TST DCRDRB+14 ;HAS THE LAST MESSAGE MADE IT TO THE DISK? + BNE NODATA ;NO, CAN'T KEEP THIS MESSAGE + SPUSH B + MOV #DCRLST,B + TST (B)+ ;IS THIS RECIEVE BUFFER FREE? + BNE .-2 ;NO + TST -(B) ;FOUND A FREE ONE + CMP #DCRLST+40,B ;IS IT REALLY ONE? + BGE NODATA ;NO PLACE TO PUT MESSAGE + EXCHA DCRBIP,DCRDRB+4 ;EXCH BUFFER USAGE + TST (A)+ + MOV (A),A ;THIS IS THE MESSAGE ID + MOV A,(B) ;SO THE USER CAN FIND IT + BIT #177400,A ;IS THIS MESSAGE FOR THE SYSTEM? + BNE .+6 ;NO + INC SYSMES ;TELL THE SYSTEM IT HAS A MESSAGE + SUB #DCRLST,B + ASL B + ASL B + ASL B + ASL B + ADD DCRBFS,B + MOV B,DCRDRB+6 + MOV DCRBFS+2,DCRDRB+10 ;DISK ADDRESS OF BUFFER + MOV #DCTSMS,A ;FIND A SMALL MESSAGE SLOT + TST (A)+ + BNE .-2 + MOV #<145_10>,B + BIS DCRMID,B + ADD #40,B + SWAB B + MOV B,-(A) + SPOP B + JMP RECLOP + +NODATA: JMP RECLOP + +;GET 16 BIT WORD OFF THE LINE +;6 BITS, 6 BITS, 2 PARITY+4 BITS (PPBBBB) +;3 333 222 222 111 111 +GWORD: JSR PC,GBITCH ;GET A BINARY CHAR + RTS PC ;BAD CHAR, LOSE + MOV A,DCRWBL ;STATRT BUILDING WORD 0 000 000 000 BBB BBB + JSR PC,GBITCH + RTS PC ;BAD CHAR + SWAB A ; 0 0BB BBB B00 000 000 + ASR A ; 0 00B BBB BB0 000 000 + ASR A ; 0 000 BBB BBB 000 000 + BIS A,DCRWBL ; 0 000 222 222 111 111 + JSR PC,GBITCH +DCRRTS: RTS PC ;BAD CHAR + ASL A ; 0 000 000 00B BBB BB0 + ASL A ; 0 000 000 0BB BBB B00 + ASL A ; 0 000 000 BBB BBB 000 + ASL A ; 0 000 00B BBB BB0 000 + BISB A,DCRWBL+1 ; BB BB0 000 + SWAB A ; B BBB 000 000 000 0BB + MOVB A,DCRPRB ; 00 000 0BB + SPUSH B + MOV DCRWBL,A + JSR PC,BITCNT ;GET NUMBER OF BITS IN THE WORD + BIC #177774,B ;MOD 4 + COM B ;AND COMPLEMENTED + CMP B,DCRPRB ;IS IT THE SAME AS WAS SENT ON THE LINE? + BNE GWORDB ;NO, HAVE GOT BAD WORD + ADD A,DCRCKS ;YES, ADD TO CHECKSUM + SPOP B + JMP SRET +GWORDB: SPOP B + RTS PC + +;GET 6 BITS OFF THE LINE +GBITCH: JSR PC,RFLUSH + SUB #40,A + BIT #177700,A + BNE DCRRTS + JMP SRET + +BITCNT: SPUSH A + CLR B + BR BITCT2 +BITCT1: INC B +BITCT2: ASL A + BCS BITCT1 + BNE BITCT2 + SPOP A + RTS PC + +;TRANSMIT INTERUPT ROUTINES + +DCTBRK: SPUSH A + EXCHA TPDLP,P + RTS PC + +TFLUSH: MOV A,DCTB +T1FLSH: EXCHA TPDLP,P + SPOP A + RTI + +TLOGIN: MOV #'Z-100,A + JSR PC,TFLUSH + MOV #LOGMES,TBPOIN +LOGSEN: MOVB @TBPOIN,A + BEQ LOGDNE + INC TBPOIN + BIC #100,DCTS ;DON'T CARE IF NO ECHO + JSR PC,TFLUSH + BR LOGSEN +LOGDNE: BIC #100,DCTS ;PUT IT TO SLEEP + JSR PC,T1FLSH + TST REDY10 + BEQ LOGDNE +;FALL IN HERE WHEN 10 IS READY TO RECIEVE + .STITL INITIALIZE THE WORLD! +START: RESET + MOV SPDLP,P ;SET UP SYSTEM PDL + CLR TIME + MOV #200,PCSTBF ;EVERY 128/10000 TH'S + MOV #113,PCS + TST RJLSW + BEQ NODC11 + MOV #121,DCRS + MOV #121,DCTS + MOV #'Z-100,DCTB +NODC11: MOV #CORCHK,BEBRV ;WHERE TO GO ON MEM TRAP + MOV #LOGEND,A ;LAST LOCATION WITH CRAP IN IT + ADD #200,A + TST (A) ;IS IT REALLY THERE? + BR .-6 ;LOOP ENDED BY MEM TRAP +CORCHK: BIC #377,A + MOV #BEBRV+2,BEBRV + MOV A,CORTOP + SUB #22000+SLOT1,A ;FUDGE AREA (NOW RADIA CAN FIT DDT THERE!) + CLR B + MOV #MQ+2,C + MOV A,-(C) ;MOVE A TO MQ + CLR -(C) ;CLEAR HIGH ORDER(AC) + MOV NSLOTS,-(C) ;DIVIDE + MOV MQ,B ;GET RESULT + CMP B,#MSLTLN + BLO .+6 + MOV #MSLTLN,B + BIC #37,B + MOV #SLOT1-2,A ;BEGINING OF SLOT-2 (FOR DISK) + MOV #SLTCAD+2,C ;ADDRESS OF SLOT + MOV NSLOTS,D + MOV D,NINU ;NUMBER OF USERS IN CORE NOW. + CLR E +SLTAL1: MOV A,(C)+ ;ADDRESS OF THIS SLOT + ADD B,A ;NEXT ONE + MOV E,SLOTST-SLTCAD-4(C) ;USER OF THIS SLOT + MOV #1,SLOTST-SLTCAD-2(C) ;JUST SWAPED IN + ADD #LUBLK,E ;NEXT USER + TST (C)+ + DEC D + BGT SLTAL1 ;DO THIS NSLOTS TIMES + MOV B,USLENT + ASR B + MOV B,A ;SAVE A POSITIVE WORD COUNT + NEG B + MOV B,USWCNT + MOV #3,A + MOV #-1,B ;SIE OF DISK IN A AND B + SUB DSKRND,B ;MINUS RANDOM SYSTEM STORAGE + SUB DSKRND+2,B + MOV #MQ+2,C + MOV B,-(C) + MOV A,-(C) + MOV NUSERS,-(C) ;DIVIDE AMOUNT OF DISK BY # OF USERS + MOV #-1,A ;FULL ALOCATION + TST AC + BNE .+6 + MOV MQ,A ;AMOUNT OF DISK PER USER +DALOC2: ADD USWCNT,A ;ADD NEGATIVE WORD COUNT TO AMOUNT OF DISK + SUB #DTIBFL+DEDBFL+DDIRL,A ;SUBTRACT FIXED BUFFERS + BGT DALOC3 ;RESULT <15 BITS + MOV #77777,A ;MAKE IT 15 BITS +DALOC3: BIC #377,A ;TO GET # OF WORDS OF RANDOM STORAGE + MOV A,E ;SAVE THAT QUANT IN E FOR (MUCH) LATER + SWAB A + MOV A,B + ASL A ;NUMBER OF BLOCKS (200 WORDS) NOW IN A + ASR B + ASR B + ASR B ;NUMBER OF BLOCKS/20 NOW IN B + MOV #DBITTB,C ;SET UP TO INIT DISK BIT TABLE +DALOC5: DEC B ;20 BLOCKS (=1 WORD IN TABLE)AT A TIME + BLT DALOC4 ;ALL DONE + CLR (C)+ + BR DALOC5 +DALOC4: CLR (C) ;ONLY SOME BITS ON IN THIS WORD + COM (C) + MOV #1,D + BIC #177760,A ;# OF WORDS MOD 20 +DALOC6: DEC A + BLT DALOC7 + BIC D,(C) + ASL D + BR DALOC6 +DALOC7: TST (C)+ + CMP C,#DBITBE + BGT DALOC8 + MOV #-1,(C) + BR DALOC7 +DALOC8: BIS #1,DBITTB ;FIRST BLOCK TO BE USED + BIS #100000,DBITBE ;IMPOSSIBLE TO GO OFF TOP + MOV E,D + MOV #3,A + MOV #-1,B + + + MOV #MNUSRS,E + MOV #LUBLK*,U +UVINIT: SUB #LUBLK,U ;FOR NEXT GUY DOWN + MOV #-1,FLSADR(U) ;INDICATE THAT THIS GUY ISN'T REALLY HERE + CLR FLSRES(U) + DEC E + CMP E,NUSERS ;MAYBE HE REALLY IS HERE + BGE UVINIT ;NOPE! + CLR FLSADR(U) + MOV #FRNEWU,FLSRES(U) + MOV #UDSKAD+4,C + ADD U,C + SUB D,B ;AMOUNT OF RANDOM STORAGE + SBC A + MOV A,-(C) ;HIGH ORDER RANDOM STORAGE ADDR + MOV B,-(C) ;LOW ORDER + MOV A,-(C) ;HIGH ORDER RANDOM STORAGE ADDR + MOV B,-(C) ;LOW ORDER + SUB #DDIRL,B + SBC A + MOV A,-(C) ;HIGH DISK DIR + MOV B,-(C) ;LOW + SUB #DEDBFL,B + SBC A + MOV A,-(C) + MOV B,-(C) + SUB #DTIBFL,B + SBC A + MOV A,-(C) + MOV B,-(C) + ADD USWCNT,B + BCS .+4 + DEC A + MOV A,-(C) + MOV B,-(C) + TST E + BGT UVINIT + MOV #SLOT1,D + MOV #SOFN,B + MOV #ASOFN-SLOT1,C + ADD D,C + ADD USLENT,D ;LAST AVAILABLE WORD ADDR + CLR LINENO + INIT1: INC B + BIT #10000,B + BNE INIT2 + MOV B,(C)+ + CLR (C)+ + CMP D,C + BHI INIT1 +INIT2: CLR (C)+ + CLR @C + ADD #SOFN,B + MOV B,NUNODE ;NUMBER OF NODES PER USER + MOV #UVBLK,A ;TO INITIALIZE USER VARIABLES IN SWAPPED OUT USERS + MOV #SLOT1,B ;SET UP FOR BLT +SETUVS: MOV (A)+,(B)+ ;BLLLLLLLLLLLLLLLLLT + CMP #UVBLK+LUVBLK,A + BGT SETUVS + TST RWWSW + BNE STARTF + JSR PC,SYDRBG ;GET A SYSTEM DISK REQUEST BLOCK + CLR (A)+ ;NO START ROUTINE + MOV USWCNT,(A)+ ;LENGTH OF A USER SLOT + MOV #SLOT1-2,(A)+ ;SWAP OUT SLOT1 + MOV DCLRUS,(A)+ ;GETS PUT INTO THE CLEAR USER PLACE + MOV DCLRUS+2,(A)+ + TST (A)+ + MOVB #DWRTEC,(A) +STARTF: MOV NUSERS,NUSER2 + ASL NUSER2 + TST JDCSW + BNE ITINIT + MOV #UTYO,TYO+2 + MOV #UTYI,TYI+2 + MOV #3,BRKCHR + JMP NEXTUS +ITINIT: JMP TINIT + +UGO: JSR PC,RUNME + PRTXT ^/11LOGO / + MOV LVERNF,A + JSR PC,PRDN + PRCR +RSTART: + MOV SALTL,ALTL + MOV #100,TKS ;ENABLE INTERRUPTS FOR TYI +TEST1: +MLOOP: JSR PC,SCHEDP + TST BRAKE(U) + BEQ MLOOP1 + JSR PC,BRAKR ;BREAK + JMP ERTLN +MLOOP1: JSR PC,GETSTR + JSR PC,MREAD + JSR PC,EVLINE + ERROR+WDW ;WHAT SHOULD I DOO WITH (S) + BR MLOOP +WSTART: MOV #IP,P ;USE WITH CAUTION!! + BR RSTART +RUNRUG: 3 + BR .+2 ;RUG SHOULD RETURN HERE IF $P'ED + BR .+2 + JMP NORT + .STITL GET A STRING + +GSTR9: MOV CLN,B + JSR PC,GTLINE + ERROR+LDE ;LINE ..(B).. DOESN'T EXIST + MOV C,A + BR GSTR8 +GETSTR: TST FUNLEV ;ARE WE IN A PROC + BEQ GSTR0 ;NO + BIT #ERRF,FLAGS2 ;ERROR, MAYBE + BNE GSTR0 ;YES + MOV CLP,B ;NO, GET THIS NODE OF LLP + BEQ GSTR9 + JSR PC,.LOAD + BIT #7777,A ;IS IT LAST NODE + BNE GSTR8 + SPUSH A ;"STOP" POPS 5 WORDS + SPUSH A + SPUSH A + SPUSH A + JMP PSTOP +GSTR8: MOV A,CLP + MOV A,B + JSR PC,.LOAD + JSR PC,.LOAD ;OK, GET FIRST NODE OF LINE, = LINE # + MOV B,CLN + MOV A,CTP ;IN CASE THERE IS; NO GENERATION # + MOV A,C + JSR PC,.LOADC ;GET SECOND NODE + CLR CLGN ; IF TYPE = SNUM, IT IS GEN # + MOV A,C + BIC #7777,C + CMP #SNUM,C + BNE GSTR6 + MOV B,CLGN ;IT IS + MOV A,CTP +;FALLS THROUGH + +;FALLS IN +GSTR6: BIS #LIST,CTP + SPUSHS CTP + BIT #TRACEF,FLAGS2 + BEQ GSTRT + PRCR + PRTXT ^\ #\ + MOV CPP,B + JSR PC,PPNAME ;PRINT PNAME + PRTXT ^\ LINE \ + MOV CLN,A + JSR PC,PRDN + PRCR + JSR PC,PRLN + BR GSTRT + + +GSTR0: BIT #TESTF,FLAGS2 + BEQ GSTR1 + MOV ALTL,A + MOV (A)+,B + BEQ DONE + MOV A,ALTL + PUSHS B + PRCR + PRTXT ^/TEST LINE / + INC LINENO + MOV LINENO,A + JSR PC,PRDN + PRCR + JSR PC,PRLN + CLR FLAGS + CLR CO + CLR CO+2 + CLR NOR +GSTRT: RTS PC + POP A ;GET RETURN ADDR + PUSH #1 + JMP @A +GSTR1: JSR PC,RDSTR + BR GSTRT +DONE: PRTXT ^/ALL DONE!/ + PRCR + SPOP A ;CROCK!!! + JMP RSTART ;BLECTCH? + .STITL READ A STRING - PTR ON S +RDSTR1: PRCR +RDSTR: CLR NBKTS + CLR BRAKE + MOV PRMTCH,D + BEQ RDSTR9 + JSR PC,TYO +RDSTR9: JSR PC,RLINE + JSR PC,BLSTI +RDSTR2: JSR PC,TYI + TST BRAKE + BEQ .+10 + JSR PC,BRAKR + BR RDSTR7 + CMP BRKCHR,D ;BREAK TYPED? + BEQ RDSTR7 ;YES + TST NBKTS ;IN A LIST? + BGT RDSTR3 ;YES + CMP #15,D ;CR? + BEQ RDSTR4 +RDSTR3: CMP #'[,D + BNE RDSTR6 + INC NBKTS +RDSTR6: CMP #'],D + BNE RDSTR5 + DEC NBKTS +RDSTR5: JSR PC,BLST + BR RDSTR2 +RDSTR4: JSR PC,BLSTF + BR RDSTR ;NO CHARS TYPED + PUSHS TOPS + CLR TOPS + RTS PC +RDSTR7: JSR PC,BLSTF + BR RDSTR1 + JSR PC,FRELST + BR RDSTR1 +RQUEST: PUSH PRMTCH + MOV #'<,PRMTCH + JSR PC,RDSTR + POP PRMTCH + JMP ORT + .STITL MORE READ ROUTINES!!! +MREAD: TST FUNLEV ;ARE WE IN PROC? + BEQ MRD1 ;NO + BIT #ERRF,FLAGS2 ;YES, BUT ERROR? + BNE MRD1 ;YES + RTS PC ;NO +MRD1: BIT #TESTF,FLAGS2 + BNE MRD2 + JMP READ ;CONVERT CHAR STRING TO TOKEN LIST +MRD2: RTS PC + + +RLINE: TST USER + BLT RLINE1 + TST JDCSW + BEQ RLINE1 + PUSH U + MOV USER,U + MOV #FRTYIH,FLSRES(U) + JSR PC,FLUSH ;RETURNS WHEN LINE DONE + JSR PC,RUNME + POP U +RLINE1: RTS PC + .STITL EVAL 1 LINES +EVLINE: TST TOPRNM + BNE EVLI4 +EVLI6: JSR PC,IGNT ;EVALUATES 1 LINES ON S +EVLI1: BIT #CRF,FLAGS + BNE EVLI2 + JSR PC,EVAL + BR EVLI3 ;NO OUTPUT, OK + RTS PC +EVLI3: BIT #CRF,FLAGS + BNE EVLI2 + JSR PC,GNT + BIS #RTF,FLAGS + BR EVLI1 +EVLI4: MOV @S,B + JSR PC,.LOAD + MOV A,D + BIC #7777,A + CMP #SNUM,A + BEQ EVLI5 ;AN SNUM + CMP #LNUM,A + BNE EVLI6 ;NOT EVEN A NUMBER + JSR PC,.LOAD ;AN LNUM, SEE IF TOO BIG + BIT #7777,A + BNE EVLI7 ;TOO BIG + BIC #170000,D ;MAKE IT INTO AN SNUM + ADD D,A + JSR PC,GRBAD + MOV C,@S +EVLI5: JSR PC,ADLN + POPS A +EVLI2: SKPRET +EVLI7: ERROR+LNTB ;LINE # TOO BIG + .STITL GET NEXT TOKEN + +GNT: BIT #RTF,FLAGS ;IS REPEAT TOKEN FLAG SET? + BEQ GNT1 + BIC #RTF,FLAGS ;YES + MOV CT,A + MOV CT+2,B + BNE GNT6 + CMP #SFUN,A + BNE GNT6 + BIS #CRF,FLAGS +GNT6: RTS PC +GNT1: BIC #PTLPF,FLAGS + CMP #$LLPAR,CT+2 ;IS CT "(" + BEQ GNT3 + CMP #$LPAR,CT+2 + BNE .+8. +GNT3: BIS #PTLPF,FLAGS ;YES, SET PTLPF + MOV CT,B ;GET LINK TO NEXT TOKEN + MOV B,CTP + BIT #7777,B + BEQ GNT2 ;ANY TOKENS LEFT + JSR PC,.LOAD ;YES +GNT4: MOV A,CT + MOV B,CT+2 + RTS PC +GNT2: BIT #CRF,FLAGS + BNE GNT5 + BIS #CRF,FLAGS + MOV #SFUN,A + CLR B + BR GNT4 +GNT5: ERROR+OOT ;OUT OF TOKENS +IGNT: POPS B + BIT #7777,B + BEQ IGNT1 + BIC #CRF,FLAGS + JSR PC,.LOAD +IGNT2: MOV A,CT + MOV B,CT+2 + BIS #RTF,FLAGS + MOV #1,CTN + RTS PC +IGNT1: BIS #CRF,FLAGS + MOV #SFUN,A + CLR B + BR IGNT2 + TYO: JMP @#STYO +STYO: TSTB TPS + BPL .-4 + MOV D,TPB + RTS PC +UTYO: TSTB TPS + BPL .-4 + MOVB D,TPB + CMP #15,D + BNE UTYOR + MOV #12,D + JSR PC,TYO + MOV #15,D +UTYOR: RTS PC +TYOT: 0 + 0 +CH: 0 +TYI: JMP @#STYI +STYI: WAIT + TSTB TKS + BPL STYI + MOVB TKB,D + BIC #177200,D + BR STYO +UTYI: WAIT + TST CHI + BEQ UTYI + MOVB CHI,D + CLR CHI + BIC #177600,D + BR TYO + .STITL GARBAGE COLLECTOR +NNODES==4096. +GCBTL== NNODES/8./2.*2.+2. ;GARBAGE COLLECT BIT TABLE LENGTH + +MARKN: SPUSH A ;MARK NODE(B) + SPUSH B + MOV B,A + BIC #170000,A + BIC #177770,B + MOVB BMT(B),B + ASR A + ASR A + ASR A + ADD GCBITS,A + BISB B,(A) + SPOP B + SPOP A + RTS PC + +BMT: .BYTE 1,2,4,10,20,40,100,200 + .IFNZ GCDBUG +LMT: DMK ;SYSTEM FUNCTION + DMK ;INFIX (SYSTEM FUNCTION) + DMK ;USER FUNCTION + DMK ;VARIABLE BINDING + GCDIE ;UNUSED + GCDIE ;UNUSED + GCDIE ;UNUSED + DMK ;SHORT STRING + MKSNP ;SNAP + DMK ;ATOM + DMK ;SHORT NUMBER + GCMARK ;LONG NUMBEB + GCMARK ;LONG STRING + GCDIE ;TBA + GCMARK ;SENTENCE + GCMARK ;LIST + .ENDC + + +MARKL: CMP B,#SNP ;IS LIST A SNAP? + BLOS MKL0 ;NO + CMP B,# + BLO MKSNPL ;YES +MKL0: PUSH A ;MARK LIST + SPUSH B ;NODE ADDS IN B + SPUSH C + .IFNZ GCDBUG + SPUSH D + .ENDC + MOV B,A +MKL1: MOV A,C + BIT #7777,C ;IS THERE ANOTHER NODE + BEQ MKL3 + MOV C,B ;YES, MARK IT + JSR PC, MARKN + JSR PC,.LOADC ;GET IT + + .IFNZ GCDBUG + MOV A,D + SWAB D + BIC #177417,D + ASR D + ASR D + ASR D ;ALL THIS GIVES YOU THE TYPE*2 + JMP @LMT(D) ;WHICH YOU MIGHT MARK ON + +DMK: BR MKL1 +GCDIE: HALT +GCMARK: JSR PC,MARKL + BR MKL1 + .ENDC +MKSNPL: EXCH SNPTEM,C ;B POINTS TO SNAP + JSR PC,MKDC + MOV SNPTEM,C ;RESTORE C + BR MKL0 +MKSNP: JSR PC,MKDC ;ONLY MARKS THE DISPLAY CODE + JSR PC,MKL0 ;ALSO NEED TO MARK THE NODES + BR MKL1 + + .IFZ GCDBUG + BIC #7777,A + CMP #100000,A + BLO MKL1 + BEQ MKSNP + CMP #120000,A + BLOS MKL1 + JSR PC,MARKL + BR MKL1 + .ENDC + +MKL3: .IFNZ GCDBUG + SPOP D + .ENDC + SPOP C + SPOP B + POP A + RTS PC + +.GCOLL: JSR F,ACSAV + PUSH ACRELF + MOV USER,U +.GCOL2: TST GCLOCK ;IS SOMEONE ELSE GC'ING? + BLT .GCOL3 ;NO, GO AHEAD + JSR PC,FLUSH ;WAIT + BR .GCOL2 +.GCOL3: MOV U,GCLOCK + JSR PC,RUNME + MOV GCBITS,A ;GARBAGE COLLECT + MOV #GCBTL/2-1,B ;CLEAR BIT TABLE + MOV #1,(A)+ ;ALWAYS PROTECT NODE ZERO +.GCOL1: CLR (A)+ + DEC B + BGT .GCOL1 + PUSHS SNLIST ;PROTECT THESE LOSERS + SPUSHS #TRUE + SPUSHS #FALSE + + MOV #RELE,ACRELF + MOV #HCC,F ;NUMBER OF HASH CODE ELEMENTS + MOV SUHCT,E ;ADDRESS OF HASH TABLE +MKUOBL: DEC F + BLT MKTPS + MOV (E)+,D ;GET A HASH CODE ELEMENT +MKUOBI: MOV D,C + BEQ MKUOBL ;NO MORE + MOV D,B ;MARK THE NODE + JSR PC,MARKN + JSR PC,.LOADC + MOV A,D + MOV B,C + JSR PC,MARKN ;MARK NODE POINTED TO BY THIS ONE + JSR PC,.LOADC ;THEN GET IT + JSR PC,MARKL ;SHOULD BE PNAME POINTER NODE + MOV A,C +MKUOE: BIT #7777,C ;ONE OTHER NODE? + BEQ MKUOBI ;NO + MOV C,B ;YES + JSR PC,MARKN ;MARK IT + JSR PC,.LOADC + MOV C,SNPTEM ;SAVE IN CASE VBIND IS SNAP + MOV A,C + BIC #7777,A + CMP #FBIND,A + BEQ MKFB ;FUNCTION BINDING + CMP #VBIND,A + BEQ MKVB ;VARIABLE BINDING + CMP #SFBIND,A + BEQ MKSFB ;SWAPPED FB + CMP #SVBIND,A + BEQ MKSVB ;SWAPPED VB + HALT ;BUG +MKVB: JSR PC,MARKL + BR MKUOE +MKFB: JSR PC,MARKL + BR MKUOE +MKSVB: BR MKUOE +MKSFB: JSR PC,MARKL + BR MKUOE + + +MKTPS: MOV #GCMKL,F +MKRNDM: MOV (F)+,B ;POINTER TO POINTER + BEQ MKSPDL ;LAST ONE + MOV (B),B ;REAL NODE ADDRESS + BEQ MKRNDM ;NOTHING THERE + JSR PC,MARKL + BR MKRNDM +MKSPDL: MOV SPBASE,E +MKSP1: MOV -(E),B ;GET A S PDL WORD + CMP E,S ;END OF S PDL? + BLT MKSP2 ;YES + JSR PC,MARKL ;MARK S PDL WORD + BR MKSP1 +MKSP2: MOV SPBASE,A + TST (A)+ + BNE MKSP3 ;THERE I S PDL ON DISK, GO MARK IT + TST (A) + BEQ MKSP4 +MKSP3: JSR PC,UBLKGR + HALT + HALT + MOV B,SSAVEA + MOV C,SSAVEA+2 ;PLACE TO SAVE S PDL + MOV SSWPAD,4(A) + MOVB #DWRTEC,14(A) ;WRITE OUT CURRENT S PDL + JSR PC,DSKWA2 +MKSP8: MOV SPBASE,B + TST (B)+ ;IS @HERE ANODHER BLOCK ON DHSK? + BNE MKSP5 ;YES + TST (B) + BEQ MKSP6 ;NO +MKSP5: JSR PC,SYDRBG ;PREPARE TO SWAP IN BLOCK + CLR (A)+ + MOV #-200,(A)+ + MOV SSWPAD,(A)+ + MOV SPBASE,B + MOV (B)+,(A)+ + MOV (B)+,(A)+ + TST (A)+ + MOVB #DREADC,(A) + JSR PC,DSKWAI + MOV #200,F + MOV SPBASE,E +MKSP7: MOV -(E),B ;MRK THIS PIECE OF S PDL + JSR PC,MARKL + DEC F + BGT MKSP7 + BR MKSP8 +MKSP6: JSR PC,SYDRBG ;PREPARE TO SWAP CURBENT PDLBACK + CLR (A)+ + MOV #-200,(A)+ + MOV SSWPAD,(A)+ + MOV SSAVEA,(A)+ + MOV SSAVEA+2,(A)+ + TST (A)+ + MOVB #DREADC,(A) + JSR PC,DSKWAI + MOV SSAVEA,C + JSR PC,UBLKFR +MKSP4: + + + JSR PC,DSGCF + ADD #6,S ;GET RID OF 3 GUYS PUSHED BEFORE + + ;OK NOW RETURN ALL IN MARKED NODES + ;RA ADDS OF LIT MAP + ;RB NODE ADDS + ;RC ACTUAL ADDER OF NODE + ;RD BIT MAP + ;RE POINT TO LIST OF FREE STORAGE RECYCLES NODES + ;START COLLECTING AT LUNN(LOWEST UNPROTECTED NODE #) + CLR E + CLR NNGC + CLR B ;NODE ZERO + MOV UAB,C ;NODE ZERO ADDRESS + MOV NUNODE,F ;NUMBER OF NODES + MOV GCBITS,A ;BIT TABLE ADDR + MOV (A)+,D + SEC + ROR D + +GCRT2: BCS GCRT3 + MOV E,(C)+ ;WE HAVE A NODE, LINK IN 1ST WORD + CLR (C)+ ;CLEAR SECOND + MOV B,E ;NEW FREE STORAGE HEAD NODE + INC NNGC + BR GCRT4 +GCRT3: ADD #4,C +GCRT4: INC B + DEC F + BLE GCRT5 + CLC + ROR D + BNE GCRT2 + MOV (A)+,D ;GET NEXT WORD OF BIT MAP + SEC + ROR D + BR GCRT2 +GCRT5: MOV E,FREE ;YES + + MOV #-1,GCLOCK + POP ACRELF + JSR F,ACRES + RTS PC +  \ No newline at end of file diff --git a/PDP11/11logo/turtle.62 b/PDP11/11logo/turtle.62 new file mode 100644 index 00000000..31acdbee --- /dev/null +++ b/PDP11/11logo/turtle.62 @@ -0,0 +1,1457 @@ + .STITL DISPLAY AND TURTLE + VERN==VERN+%FNAM2 + +;A BRIEF DESCRIPTION OF WHAT IS LEFT TO BE DONE TO THIS PROGRAM. + + +;2) GARBAGE COLLECTION. COLLAPSING ADDS AND NOPS IN THE STATIC AREA. +;3) ERROR RECOVERY. +;4) DECIDING WHAT SNAP AND WIPE REALLY ARE GOING TO DO. +;AT THIS TIME, SNAP OUTPUTS THE ENTIRE SCREEN +;AND WIPE ERASES ONLY TOP LEVEL OCCURRENCES OF THE SNAP +;6) RUNNING THE DISPLAY ON INTERRUPT LEVEL. + + + + + + +;CHOOSE BETWEEN DISPLAY AND REAL TURTLE +; THE ARGUMENT IS WHERE TO JUMP IF DISPLAY. +.MACR WHICHTUR DADD + BITB #TURTF,DFLAGS + BNE .+6 + JMP DADD +.ENDM + +;MOVE THE REAL TURTLE +; THE ARG IS THE CHARACTER CODE TO CAUSE 1-STEP OF MOTION +.MACR MOVTUR CHAR + MOV #" 'CHAR,-(P) + JMP TURMOV +.ENDM + +;SEND OUT SOME CONTROL COMMAND TO REAL TURTLE +; ARGUMENT IS THE CHARACTER FOR THE COMMAND +.MACR CONTUR CHAR + MOV #" 'CHAR,A + JMP TURCON +.ENDM + +;CONVERT ADDRESS TO DISPLAY PUSHJ +; ARGUMENT IS AC +.MACR MAKEPJ F + SUB #DISREL,F + ASR F + BIS #DPUSHJ,F +.ENDM + +;CONVERT DISPLAY CONTROLLER ADDRESSES TO REAL WORLD ADDRESSES +; ARG IS AC +.MACR MAKEAD F + ASL F + ADD #DISREL,F +.ENDM + +;START UP DISPLAY--FOR SIMULATOR ONLY +.MACR DISGO + BISB DISBIT,NGCSR +.ENDM + ;DISPLAY AND TURTLE COMMANDS THAT HAVE TO CHOOSE BETWEEN +;THE TWO GO THROUGH HERE + +FORWAR: JSR PC,G1NARG + WHICHTUR DFD + MOVTUR C +BACK: JSR PC,G1NARG + WHICHTUR DBK + MOVTUR @ +RIGHT: JSR PC,G1NARG + WHICHTUR DRT + MOVTUR B +LEFT: JSR PC,G1NARG + WHICHTUR DLT + MOVTUR A +PENUP: WHICHTUR DPU + CONTUR 8 +PENDOW: WHICHTUR DPD + CONTUR 0 + + +;REST OF REAL TURTLE COMMANDS +LAMPON: BITB #TURTF,DFLAGS + BNE LMPON1 + ERROR+YNT ;YOU DON'T HAVE THE TURTLE +LMPON1: CONTUR " +LAMPOFF: BITB #TURTF,DFLAGS + BNE LMPOF1 + ERROR+YNT ;YOU DON'T HAVE THE TURTLE +LMPOF1: CONTUR ! + +TOOT: BITB #TURTF,DFLAGS + BNE TOOT.0 + ERROR+YNT ;YOU DON'T HAVE THE TURTLE +TOOT.0: JSR PC,G1NARG ;GET NUMERIC ARG + MOV #" (,A + BR TOOT.9 + +TOOT.1: MOV #1,E + JSR PC,TUROUT ;A IS OUTPUT CHARACTER, E IS COUNT + SWAB A ;PUT SPACE AS BOTTOM CHARACTER OF A. + MOV #5,E + JSR PC,TUROUT ;THERE NEED TO BE 5 SPACES BETWEEN TOOTS. +TOOT.9: DEC B ;NUMBER OF TOOTS + BGE TOOT.1 + JMP NORT ;RETURN + +;TURTLE MOVER +; OUTUT THE APPROPRIATE CHARACTERS TO CAUSE THE REAL TURTLE +; TO MOVE. +; CALL WITH NUMBER OF STEPS IN B +; CALL WITH CHARACTER FOR 1-STEP ON STACK +; +; IT IS NECESSARY TO ACCELERATE AND DECELERATE THE TURTLE +; MUCH OF THE ROUTINE BELOW IS TO DO THIS. +TURMOV: JSR PC,TURON ;TURN ON THE TURTLE + MOV (P),A ;THE CHARACTER FOR ONE STEP + MOV #10,F ;AN OFT USED CONSTANT + CMP B,4 ;COMPARE # OF STEPS TO 4 + BLT TM.8 ;THERE IS NO CHANCE FOR MORE THAN 1-STEPS + CMP B,12. + BLT TM.3 ;NO CHANCE FOR MORE THAN 2-STEPS + + MOV #MQ,C ;START TO DIVIDE. + MOV B,(C) ;THE DIVIDEND + CLR -(C) ;CLEAR THE TOP PART OF DIVIDEND. + MOV #4,-(C) ;THE DIVISOR. + TST (C)+ + MOV (C)+,D ;THE REMAINDER. + MOV (C),C ;THE QUOTIENT. + CLR B + ASR D ;DIVIDE BY 2 + ROL B ;PUT REMAINDER IN B + TST (D)+ ;ADD 2 TO D + TST (B)+ ;ADD 2 TO B +;NOW A=#OF 1-STEPS TO DECELERATE, B=# OF 2-STEPS TO DECELERATE +;AND D= # OF 4-STEPS ALTOGETHER + MOV #2,E + JSR PC,TUROUT ;OUTPUT TO TURTLE. A=THE CHAR. E=COUNT + ADD F,A ;TURN A INTO CHAR FOR 2-STEP + MOV #2,E + JSR PC,TUROUT + ADD F,A ;TURN A INTO CHARACTER FOR 4-STEP + MOV D,E ;NUMBER OF 4-STEPS + JSR PC,TUROUT + SUB F,A ;TURN A INTO CHARACTER FOR 2-STEP + BR TM.5 + +;THERE ARE LESS THAN 12. STEPS. +; SO THERE IS NO CHANCE FOR ANY 4-STEPS +TM.3: SUB #4,B ;YOU LOSE AT LEAST 4 STEPS IN ACCELERATION AND DECEL. + MOV B,D + CLR B + ASR D ;DIVIDE BY 2 + ROL B ;PUT REMAINDER IN B + TST (B)+ ;ADD 2 TO B + MOV #2,E + JSR PC,TUROUT ;ACCELERATE + ADD F,A ;TURN A INTO CHAR FOR 2-STEP +;OUTPUT THE NUMBER OF 2-STEPS +TM.5: MOV D,E ;NUMBER OF STEPS + JSR PC,TUROUT + SUB F,A ;TURN A INTO CHAR FOR 1-STEP +;OUTPUT THE 1-STEPS +TM.8: MOV B,E ;NUMBER OF 1-STEPS + JSR PC,TUROUT + JSR PC,TUROFF ;TURN OFF THE TURTLE + JMP NORT + + +;TURTLE OUTPUT +; CALL WITH A=CHARACTER TO OUTPUT +; E=NUMBER OF TIMES TO OUTPUT IT +; NOTE: JSR TO TUROUT NOT TO TO.1 +TO.1: JSR PC,.IOT ;NOT THE ENTRY POINT!! +;ENTER HERE +TUROUT: DEC E + BGE TO.1 ;THERE'S MORE TO OUTPUT + RTS PC + +;.IOT +; OUTPUT CAHRACTER IN A TO TELETYPE +.IOT: BIT #200,TPS ;TEST READY + BEQ .IOT + MOV A,TPB ;OUTPUT THE CHARACTER + RTS PC + + + +;TURN THE TURTLE ON +; OUTPUT CHARACTERS TO TURN OFF THE PRINTER AND TURN ON THE TURTLE +TURON: MOV #143,A + JSR PC,.IOT + MOV #151,A + JSR PC,.IOT + RTS PC + +;TURN OFF THE TURTLE +; AND TURN THE PRINTER BACK ON +TUROFF: MOV #150,A + JSR PC,.IOT + MOV #142,A + JSR PC,.IOT + RTS PC + + +;OUTPUT A CONTROLLING CHARACTER TTO TURTLE +; CALL WITH B=CHARACTER +TURCON: JSR PC,TURON + MOV #1,E + MOV B,A + JSR PC,TUROUT ;A HAS CHAR, E HAS COUNT + JSR PC,TUROFF + JMP NORT ;RETURN. + ;HERE IS WHERE THE DISPLAY PRIMITIVES START. + +;STARTDISPLAY +; INITIALIZE EVERYTHING +; ALLOCATE DISPLAY BUFFERS +STARTDISPLAY: + MOVB DISBIT,A ;HAS A BIT SET IF USER ALREADY HAS A DISPLAY + BEQ STRTD1 ;USER DOESN'T HAVE A DISPLAY YET + JSR PC,KILLD2 ;KILL HIS PREVIOUS DISPLAY FIRST + +STRTD1: MOV USER,MQ ;FIND USER'S DISPLAY CONSOLE NUMBER + MOV #L,DIVIDE ;LENGTH OF USER BLOCK + MOV MQ,A ;USER NUMBER + MOVB DCONS(A),A + BGE .+4 + ERROR+NDU ;NOT A DISPLAY USER + + MOV #DORBEG,C ;ZERO VARIOUS USER DISPLAY VARS + MOV #DOREND,B ;LAST WORD +SDLOOP: CLR (C)+ ;ZERO WORD + CMP C,B + BLE SDLOOP + + MOVB SDISBT(A),B ;DISBIT + MOVB B,DISBIT + + ASL A ;MAKE INTO WORD INDEX + MOV STLIST(A),C ;THIS USERS TURTLE DISPLAY AREA + MOV C,TUB ;TURTLE BOTTOM + MAKEPJ C + MOV C,PUSHJT ;PUSHJ TO TURTLE + + MOV DISREL(A),D ;PUSHJ TO START OF DLIST + MAKEAD D + MOV #DRSTXY!DPOP,(D)+ ;FIRST WORD OF DLIST + MOV C,(D) ;PUSHJT IN 2ND WORD + +;SET UP BUFFER VARIABLES + MOV D,STB ;STATIC AREA BOTTOM + MOV D,STT ;STATIC AREA TOP + TST -(D) ;POINT D BACK TO FIRST WORD + ADD #DLEN,D + CLR -(D) ;SET UP DUMMY FREE AREA + MOV D,DYT ;(DYNAMIC AREA TOP) + CLR -(D) ;AT THE TOP OF DYNAMIC AREA + MOV D,DYB ;DYNAMIC AREA BOTTOM + MOV D,DYR ;DYNAMIC AREA ROVING POINTER + + MOV SDPDLP(A),DPDLP(A) ;SET DISPLAY PDL POINTER + + JSR PC,ANGCRP ;GET DIREC, SINA, COSA + JSR PC,DR.TUR ;DRAW THE TURTLE + JSR PC,NEWSN2 ;SET UP FOR NEW SNAP + + MOV #DISREL,NGREL ;SET THE RELOCATION, JUST IN CASE + BISB DISBIT,NGCSR ;AND START UP THIS GUYS DISPLAY + JMP NORT ;RETURN + +;KILLDISPLAY +; USER WANTS TO GIVE UP HIS DISPLAY +KILLDISPLAY: + MOV #NORT,-(SP) ;ENTER HERE FROM EVAL +KILLD1: MOVB DISBIT,A ;HAS A BIT SET IF USER HAS DISPLAY + BEQ KILLDR ;USER DOESN'T HAVE DISPLAY +KILLD2: BIC A,NGCSR ;STOP HIS DISPLAY (ENTER HERE FROM STARTDISPLAY) + CLR SNLIST ;CLEAR SNAPS + CLRB DISBIT + JSR PC,.GCOLL + +KILLDR: RTS PC + +DBK: NEG B + +;DISPLAY FORWARD AND BACK +DFD: MOV DIREC,-(SP) ;SAVE DIREC SINCE DRAW +; WANTS TO USE IT FOR ITS OWN DEVIOUS PURPOSES + MOV B,A + BPL DFD.0 ;FIGURE THIS ONE OUT FOR HOMEWORK + SUB #40,DIREC + BIC #177707,DIREC +DFD.0: JSR PC,MULSIN ;PUTS DX IN B,,C + MOV B,-(SP) + MOV C,-(SP) + ADD CURX,B ;INTEGER PARTS + ADD CURX+2,C ;FRACTION PARTS + ADC B ;IF FRACTIONS > 1, ADD 1 TO INT +DFD.1: MOV B,NEWX + MOV C,NEWX+2 + JSR PC,FIX ;B HAS THE INTEGER PART OF B,,C + JSR PC,CHKBND ;ERROR IF B IS OFF SCREEN + +;DO DELTA Y NOW + JSR PC,MULCOS ;DY IS IN B,,C + MOV B,-(SP) + MOV C,-(SP) + ADD CURY,B ;THE INTEGER PARTS. + ADD CURY+2,C ;THE FRACTION PARTS + ADC B ;IF FRACTIONS > 1, ADD 1 TO INT +DFD.2: MOV B,NEWY + MOV C,NEWY+2 + JSR PC,FIX ;B HAS THE INTEGER PART OF B,,C + JSR PC,CHKBND ;ERROR IF B IS OFF SCREEN. + +;FALLS THROUGH + +;FALLS IN + + +;WHEN WE ACTUALLY DRAW THE LINE, DX AND DY ARE OF INTEREST. +;THE STUFF IN REGISTERS NOW IS CURX+DX, ETC. + MOV (SP)+,C ;FRACTION PART OF DY + MOV (SP)+,B ;THE INTEGER PART OF DY + JSR PC,FIX + MOV B,E ;THIS IS DY. + + MOV (SP)+,C ;THE FRACTION PART OF DX + MOV (SP)+,B ;THE INTEGER PART OF DX. + JSR PC,FIX + MOV B,D ;THIS IS DX. + + MOV #,B ;A SORT OF FLAG FOR MOVETO + JSR PC,MOVETO ;DRAW A LINE OR PUT ADDXY INTO DLIST + MOV (SP)+,DIREC ;RESTORE DIREC + + DISGO + JMP NORT + + +;SETX +; IF THE PEN IS UP, SIMPLY SET THE CURRENT X TO THE ARG. +; IF THE PEN IS DOWN, DRAW A LINE. +SETX: MOV #CURX,A + MOV #NEWX,F + JSR PC,SET.A ;RETURNS DX IN B AND SET CURX + MOV (A)+,(F)+ ;SET NEWY TO CURY + MOV (A),(F) ;SET FRACTION OF NEWY TO FRACTION OF CURY + MOV B,D ;DX + CLR E ;DY + BR SETMOV + + +;SETY +; SIMILAR TO SETX +SETY: MOV #CURX,A + MOV #NEWX,F + MOV (A)+,(F)+ ;SET NEWX TO CURX + MOV (A)+,(F)+ ;SET FRACTION OF NEWY TO FRACTION OF CURY + JSR PC,SET.A ;RETURNS DY IN B. + CLR D ;DX + MOV B,E ;DY + BR SETMOV + + +;SETXY +; CALLED WITH TWO ARGS. AND DOES THE OBVIOUS THING. +SETXY: JSR PC,G2NARG ;B=X, A=Y + MOV A,E + MOV B,D + JSR PC,SXY.S ;GETS DX AND DY +SETMOV: MOV DIREC,-(SP) + CLR B ;A FLAG THAT CAUSES DIREC TO BE CALCULATED IN MOVETO + JSR PC,MOVETO ;DRAW LINE OR DO ADDXY + MOV (SP)+,DIREC ;BUT RESTORE GLOBAL DIREC + + DISGO + JMP NORT + + +;SETTURTLE +; ARGUMENT IS A LIST OF 3 NUMBERS +; SETXY TO FIRST TWO SNUMS, AND SETHEADING TO THE THIRD +SETTURTLE: + MOV @S,C ;ARGUMENT + JSR PC,LD3NUM ;GET 3 NUMBERS IN D,E,F + MOV F,-(SP) ;SAVE ANGLE FOR SETHEADING LATER + JSR PC,SPOPT ;AND POP S + JSR PC,SXY.S ;GETS DX AND DY + CLR B ;A FLAG THAT CAUSES DIREC TO BE CALCULATED IN MOVETO + JSR PC,MOVETO ;DRAW LINE OR DO ADDXY + MOV (SP)+,B ;PUT THE ANGLE INTO B + + JMP DRT.HD ;AND JUMP TO SETHEADING PROGRAM + +;THIS PAGE IS VARIOUS SUBROUTINES USED BY THE SET COMMANDS. + +;SET.A +; CALL WITH A POINTING TO EITHER CURX OR CURY +; CALL WITH F POINTING TO EITHER NEWX OR NEWY +; TAKES AN ARGUMENT OFF OF THE S PDL. PUTS THE ARG IN NEW +; PUTS ARG - CURRENT IN B +SET.A: JSR PC,G1NARG ;NUMERIC ARGUMENT IN B. + +;ENTER HERE IF ARGUMENT IS ALREADY IN B +SET.A1: JSR PC,CHKBND ;IS NUMBER IN BOUNDS? + MOV B,(F)+ ;PUT IN NEW + CLR (F)+ ;CLEAR THE FRACTION PART OF NEW. + JSR PC,SUBXY ;RETURNS INTEGER OF B-CURRENT IN B. + RTS PC + + +;SXY.S +; CALL WITH D = NEW X +; CALL WITH E = NEW Y +; GET DX AND DY +SXY.S: MOV #CURX,A + MOV #NEWX,F + MOV D,B ;X + JSR PC,SET.A1 ;RETURN DX IN B + MOV B,D + MOV E,B ;Y + JSR PC,SET.A1 ;RETURN DY IN B + MOV B,E + RTS PC + + +;MOVE TO + + +;ENTER HERE WITH D = DX, AND E = DY +;IF THE PEN IS DOWN, DRAW A LINE +;IF THE PEN IS UP, INSERT ADDX AND ADDY COMMANDS + +MOVETO: TST D ;IS DX=0 + BNE MTO.1 ;NO + TST E ;IS DY=0, TOO + BEQ MTO.R ;RETURN + +MTO.1: BITB #PENUF,DFLAGS ;IS THE PEN UP? + BNE MTO.PU ;YES +;THE PEN IS DOWN. DRAW A LINE +MTO.PD: ADD B,PC ;B WAS SET SUCH THAT +; IF MOVETO CALLED FROM SETXY, ETC. , THERE IS NO SKIP +; BUT IF MOVETO CALLED FROM FORWARD THERE IS A SKIP +MTO.P1: JSR PC,XYDIR +MTO.P2: JSR PC,DR.LIN ;DRAW THE LINE + +;AT THIS POINT, WE HAVE SUCCESSFULLY DONE THE COMMAND. +;THEREFORE SET CURX AND CURY TO THEIR NEW VALUES, AND EXIT +MTO.XY: MOV #CURX,A ;POINT A TO CURX + MOV #NEWX,F ;POINT F TO NEWX + MOV (F)+,(A)+ ;MOVE NEWX TO CURX + MOV (F)+,(A)+ ;MOVE FRACTION OF NEWX TO F. OF CURX + MOV (F)+,(A)+ ;MOVE NEWY TO CURY + MOV (F),(A) ;MOVE FRACTION OF NEWY TO F. OF CURY +MTO.R: RTS PC + + + +;THE PEN IS UP +;PUT ADDX AND ADDY COMMANDS INTO DISPLAY LIST +MTO.PU: SPUSH #MTO.XY ;SO THAT THE RTS BELOW WILL WORK + MOV STT,A ;TOP OF STATIC DISPLAY AREA. +MTO.: ADD #4,A ;WHERE NEW TOP WILL BE + CMP A,DYB ;PROVIDING THERE'S ROOM. + BLT MTO.RM ;THERE'S ROOM + ERROR+TML ;TOO MANY LINES + +MTO.RM: MOV A,STT + MOV PUSHJT,(A) ;DISPLAY JUMP TO TURTLE + BIC #176000,D ;IN CASE EITHER DX OR DY WERE NEGATIVE + BIC #176000,E ;CLEAR THE TOP 6 BITS + BIS #ADDY,E ;TURN E INTO ADDY COMMAND + MOV E,-(A) ;STORE IN DLIST + BIS #ADDX,D ;TURN D INTO ADDX COMMAND + MOV D,-(A) ;STORE IN DLIST + BICB #HOOKF,DFLAGS ;FOR LINE DRAWER + RTS PC + +DLT: NEG B + +;DISPLAY RIGHT AND LEFT + +DRT: ADD CURA,B +DRT.HD: JSR PC,MOD360 ;SET B=B MOD 360 + MOV B,CURA + JSR PC,ANGCRP ;DO ALL THE ANGLE CRAP. +; CALCULATE DIREC, SIN, AND COS. + BITB #HIDETF,DFLAGS ;IS THE TURTLE BEING HIDDEN ? + BNE DRTRET ;YES. SO RETURN + +;THE TURTLE IS BEING SHOWN. SO DRAW THE TURTLE + JSR PC,DR.TUR + +DRTRET: DISGO + JMP NORT + + +;SETHEAD +; LIKE RIGHT, EXCEPT SET CURA TO ARGUMENT +SETHEAD: JSR PC,G1NARG ;NUMERIC ARGUMENT IN B + BR DRT.HD ;JUMP INTO RIGHT + + +;HERE +; OUTPUT A SENTENCE OF CURX,CURY,CURA +HERE: MOV #CURX,D + JSR PC,PSHINT ;PUSH INTEGER OF CURX ONTO S-PDL + JSR PC,PSHINT ;PUSH INTEGER OF CURY + MOV (D),B ;CURRENT ANGLE +HERE.1: JSR PC,PSHNUM ;PUSH CURRENT ANGLE +HERE.2: SPUSH #3 ;PUSH 3 ONTO P-PDL + JMP SENTENCE + +;HOME +; OUTPUT A SENTENCE OF 0 0 0 +HOME: CLR B + JSR PC,PSHNUM + SPUSHS B ;AND PUSH IT AGAIN + SPUSHS B ;AND AGAIN + BR HERE.2 + + +;XCOR +; OUTPUT THE X COORDINATE +XCOR: MOV #CURX,D + BR .+6 +;YCOR +; OUTPUT THE Y COORDINATE +YCOR: MOV #CURY,D + JMP R1INT ;RETURN INTEGER + + +;HEADING +; RETURN THE CURRENT ANGLE +HEADING: MOV CURA,B + JMP R1NARG + + +; HIDETURTLE +HIDETURTLE: + BISB #HIDETF,DFLAGS ;SET THE HIDETURTLE FLAG + MOV #DPOP!DSTOP,@TUB ;DISPLAY POP AND STOP + DISGO + JMP NORT + + +; SHOWTURTLE +SHOWTURTLE: + BITB #HIDETF,DFLAGS ;IS TURTLE HIDDEN NOW ? + BEQ SHOWT9 ;NO, IT'S ALREADY BEING SHOWN +;HAVE TO DRAW THE TURTLE + BICB #HIDETF,DFLAGS ;CLEAR THE FLAG FIRST + JSR PC,DR.TUR +SHOWT9: DISGO + JMP NORT + + +; DISPLAY PENUP +DPU: BISB #PENUF,DFLAGS + JMP NORT + + +; DISPLAY PENDOWN +DPD: BICB #PENUF,DFLAGS + JMP NORT + + +;SNAP +; OUTPUTS STUFF ON THE SCREEN +; TRANSFER D. CODE STARTING AT STB+2 AND GOING ALL THE WAY TO STT +; INTO THE DYNAMIC AREA. +; RETURNS A LIST OF CURX, CURY AND POINTER TO SNAP +SNAP: MOV SNABOT,D ;BOTTOM OF STUFF TO BE SNAPPED + JSR PC,DYXFR ;TRANSFER THE DCODE. +; SET D = POINTER TO DCODE + TST D ;IF 0 + BEQ SNAP.3 ;NO CODE MOVED + +;NOW PUT THIS SNAP ON THE SNAP LIST +SNAP.1: MOV SNLIST,C ;POINTER TO SNAP LIST + BNE SNAP.2 + MOV #SNUM,A ;FIRST SNAP + CLR B ;CREATE SNAP LIST. FIRST NODE IS A DUMMY + JSR PC,GRBAD + MOV C,SNLIST +SNAP.2: JSR PC,.LDP1 ;POINTER TO REST OF SNAP LIST + MOV D,B ;PUT PTR TO SNAP IN B + JSR PC,GRBAD1 ;:KILINK NODE IN A,B TO NODE IN (C) + +;CHECK THAT THIS SNAP WON'T CAUSE DISPLAY PDL OVERFLOW + TST -(D) ;POINTER TO SNAP + CMP -(D),# ;DEPTH COUNTER + BLE .+4 + ERROR+STD ;SNAP TOO DEEP +;NOW SET UP THE 3 NODE SNAP STRUCTURE ITSELF + JSR PC,PSHNUM ;PUSH THE POINTER ONTO S-PDL + MOV #CURX,D + JSR PC,GETINT ;INTEGER OF CURX IN B + SUB OLDX,B ;TO GET DELTA X + JSR PC,PSHNUM ;PUSH ON S-PDL + JSR PC,GETINT ;INTEGER OF CURY + SUB OLDY,B ;TO GET DELTA-Y + JSR PC,PSHNUM + MOV #SNP,-(SP) ;TYPE OF LIST SENTENCE WILL CREATE + MOV #3,D ;NUMBER OF ARGS TO SENTENCE + JMP SNPSEN ;JUMP INTO SENTENCE + +;SINCE NO DISPLAY CODE WAS MOVED, RETURN EMPTY SNAP +SNAP.3: MOV #SNP,A + JMP ORTA + + + +;NEWSNAP +;SET UP FOR NEXT SNAP TO START HERE +NEWSNAP: MOV #NORT,-(SP) ;ENTER HERE FROM LOGO +NEWSN1: MOV #CURX,D ;ENTER HERE AS SUBROUTINE + JSR PC,GETINT ;GET INTEGER OF CURX IN B + MOV B,OLDX + JSR PC,GETINT ;GET INTEGER OF CURY IN B + MOV B,OLDY +NEWSN2: MOV STT,SNABOT ;RESET SNAP BOTTOM TO TOP OF DISPLAY + BICB #HOOKF,DFLAGS ;TELL LINE DRAWER THAT LAST WORD OF DLIST ISN'T INCREMENTS + RTS PC ;EITHER RETURN FROM SUBROUTINE , OR JMP NORT + +;DISPLAY A SINGLE SNAP + +DISPLAY: + JSR PC,G1SNAP ;LOAD D,E,F WITH PTR TO SNAP,CURX,CURY + BR D.RET ;RETURNS HERE IF ARG IS EMPTY + MOV E,B + ADD CURX,B + JSR PC,CHKBND ;IS NEW X COR IN BOUNDS? + MOV F,B + ADD CURY,B + JSR PC,CHKBND ;IS NEW Y COR IN BOUNDS? + +;NOW SEE IF THERE'S ENOUGH ROOM IN THE DISPLAY AREA + MOV STT,A ;TOP OF THE STATIC AREA + ADD #4,A ;RAISE IT 4 BYTES + CMP A,DYB ;COMPARE TO BOTTOM OF DYNAMIC AREA + BLT DISRM + ERROR+TML ;TOO MANY LINES + +;FINALLY, WE CAN PLACE THE PUSHJ TO THE SNAP INTO THE DISPLAY LIST +DISRM: INC -2(D) ;INCREMENT THE REF COUNTER OF THE SNAP + MOV A,STT ;SET STATIC TOP TO HERE IN DLIST + MOV PUSHJT,(A) ;PUT PUSHJ TO TURTLE AT TOP OF DLIST + MAKEPJ D + MOV D,-(A) ;PUT IN THE PUSHJ + CLR -(A) ;PRECEDE BY A NOP + +;NOW, SET CURX AND CURY + ADD E,CURX ;E HAD DX OF THE SNAP + ADD F,CURY ;F HAS DY OF THE SNAP + + BICB #HOOKF,DFLAGS ;TELL LINE DRAWER THAT LAST DWORD NOT INCREMENTS +D.RET: DISGO + JSR PC,SPOPT ;POP S + JMP NORT ;RETURN + +;WIPE A SNAP + +WIPE: JSR PC,G1SNAP ;LOAD D,E,F WITH PTR TO SNAP, X, Y + + BR D.RET ;RETURNS HERE IF ARG IS EMPTY + BIC #176000,E ;CLEAR TOP 6 BITS + BIS #ADDX,E ;AND TURN INTO ADDX COMMAND + BIC #176000,F ;CLEAR TOP 6 BITS + BIS #ADDY,F ;TURN INTO ADDY + + MOV D,B + TST -(D) ;POINT D TO SNAP'S REF COUNTER + MAKEPJ B ;MAKE B INTO DPUSHJ TO SNAP + MOV STT,A ;POINTER TO TOP OF DISPLAY LIST + MOV STB,C ;POINTER TO BOTTOM OF DLIST + +WIPE.L: CMP A,C ;ARE WE AT THE BOTTOM YET? + BLT D.RET ;YES, SO WE ARE DONE + CMP B,-(A) ;IS THE NEXT WORD A PUSHJ? + BNE WIPE.L ;NO. LOOP BACK AND TRY ANOTHER +;YES! IT IS A PUSHJ +;PUT ADDX AND ADDY COMMANDS INTO DLIST + MOV F,(A) + MOV E,-(A) + + DEC (D) ;DECREMENT REF COUNTER + BR WIPE.L ;AND THEN LOOP BACK TO SEE IF THERE'S ANOTHER +; PUSHJ TO THIS SNAP + + +;WIPE THE ENTIRE DISPLAY + +WIPECLEAN: + MOV STB,A ;POINTER TO BOTTOM OF DISPLAY LIST + MOV STT,B ;POINTER TO TOP OF DLIST + + MOV #100000,E ;SMALLEST DPUSHJ + MOV #140000,F ;SMALLEST COMMAND BIGGER THAN PUSHJ + +WC.LP: CMP B,A ;ARE WE AT BOTTOM YET? + BLT WC.DUN ;YES, WE ARE DONE + CMP -(B),E ;IS NEXT WORD DOWN A PUSHJ? + BLO WC.LP ;NO, IT'S TOO SMALL + CMP (B),F + BHIS WC.LP ;NO, IT'S TOO BIG +;THIS WORD IS A PUSHJ + MOV (B),D ;MOVE THE PUSHJ COMMAND INTO D + MAKEAD D ;TURN INTO PDP-11 ADDRESS + DEC -(D) ;DECREMENT SNAP'S REF COUNTER + BR WC.LP ;LOOP BACK TO LOOK FOR MORE PUSHJ'S + +;NOW PLACE ADDX AND ADDY COMMANDS IN THE DISPLAY LIST +;SO THAT THE TURTLE WILL STAY AT THE SAME PLACE IT WAS BEFORE THE WIPE +WC.DUN: MOV #CURX,D + JSR PC,GETINT ;GET INTEGER OF CURX IN B + SPUSH B ;SAVE DX + JSR PC,GETINT ;GET INTEGER OF CURY IN B + MOV B,E ;PUT DY IN E + SPOP D ;PUT DX IN B + JSR PC,MTO. ;PUTS THE ADD COMMANDS INTO THE DLIST, STARTING AT A + JSR PC,NEWSN1 ;SO THAT SNAPS WILL START HERE + + DISGO + JMP NORT ;RETURN + .STITL DISPLAY UTILITY ROUTINES + + +;SUBXY +; CALL WITH AN INTEGER IN B +; CALL WITH A POINTER TO CURX OR CURY IN A +; RETURNS THE INTEGER OF B-CURRENT X OR Y IN B +; ALSO LEAVES A POINTING TO WORD AFTER THE FRACTION PART +SUBXY: SUB (A)+,B ;B-CUR + TST (A)+ ;TEST THE FRACTION PART + BGE SUBXY9 ;BRANCH IF THE HIGH BIT IS OFF + DEC B ;ROUND THE ANSWER DOWN +SUBXY9: RTS PC + + +;CHKBND +; CHECK BOUNDS. ERROR IF B IS OFF SCREEN +CHKBND: CMP B,#100. + BGT ERROOB + CMP B,#-100. + BLT ERROOB + RTS PC +;THE NUMBER IS OUT OF BOUNDS +ERROOB: MOV #PUSHJT,@STT ;A VERY SIMPLE ERROR RECOVERY + ERROR+OOB + + +; CALL WITH D POINTING TO CURX OR CURY. +; RETURN THE INTEGER OF CURX OR CURY IN B +GETINT: MOV (D)+,B + MOV (D)+,C +;FIX +; CALL WITH INTEGER IN B AND FRACTION IN C +; RETURNS INTEGER ROUNDED CORRECTLY IN B +FIX: ROL C ;PUT TOP BIT OF C INTO CARRY + ADC B ;SO THAT B IS ROUNDED UP IFF TOP BIT OF C SET + RTS PC + + +;MOD360 +; OUTPUT B MOD 360 IN B. +; ALWAYS OUTPUTS A POSITIVE NUMBER +MOD360: MOV #360.,C + MOV #AC,A + MOV B,2(A) ;MOVE NUMBER TO LOW PART OF DIVIDEND + BGE M360A +M360A: MOV C,-(A) ;360 TO DIVISOR + MOV 2(A),B ;REMAINDER + BGE M360R + ADD C,B ;IF REMAINDER WAS NEGATIVE, ADD 360 TO IT + +M360R: RTS PC + + + +;MULCOS +; RETURN A*COSINE OF CURA IN B,,C +MULCOS: MOV COSA,B + BR MULCS2 +;MULSIN +; RETURN A*SINE OF CURA IN B,,C +MULSIN: MOV SINA,B +MULCS2: MOV D,-(SP) ;GUESS WHY + CLR D ;USE D AS FLAG + TST B + BPL MULCS3 + DEC D ;TO MARK THAT B WAS NEGATIVE + BIC #100000,B ;WHEN TRIG THINGS ARE SUPPOSED TO BE NEG. +; THEY ARE INSTEAD STORED POSITIVE, BUT WITH TOP BIT SET +MULCS3: MOV #MQ,F + MOV B,(F)+ ;MULTIPLICAND + MOV A,(F) ;MULTIPLIER + MOV -(F),C ;LOW ORDER PRODUCT = FRACTION + MOV -(F),B ;HIGH ORDER PRODUCT = INTEGER + ASL C ;MULTIPLY FRACTION AND + ROL B ;INTEGER BY 2. + TST D ;WAS THE TRIG THING NEGATIVE? + BGE MULCS9 + NEG C ;SINCE THE TRIG FUNCTION WAS NEGATIVE, NEGATE FRACTION + ADC B ;INCREMENT INTEGER UNLESS, FRACTION WAS 0 + NEG B ;AND NEGATE THE INTEGER. +MULCS9: MOV (SP)+,D ;RESTORE D + RTS PC + + +;ANGCRP +; CALCULATE ANGLE CRAP. +; CALCULATE DIREC, SINA, COSA +ANGCRP: MOV CURA,A ;THE CURRENT ANGLE + MOV #90.,E + MOV #MQ,F + MOV A,(F) ;THE DIVIDEND + CLR -(F) + MOV E,-(F) ;THE DIVISOR = 90. + TST (F)+ + MOV (F)+,A ;THE REMAINDER + MOV (F),F ;THE QUOTIENT + MOV A,C ;SAVE THE REMAINDER + SUB A,E ;NOW E = 90.- REMAINDER + JSR PC,SINGET ;D_SIN (A) + MOV D,B + MOV E,A + JSR PC,SINGET + MOV #100000,E ;BIS THIS GUY WHEN TRIG THINGS ARE SUPPOSED TO BE NEGATIVE + ASL F ;F = 0,1,2,3 + ADD F,PC ;JUMP THROUGH THIS DISPATCH TABLE + BR ACR.D + BR ACRII ;QUADRANT II + BR ACRIII ;QUADRANT III +;FOURTH QUADRANT + MOV B,A ;SIN (A) + MOV D,B ;SIN (90-A) + BIS E,B ;SINA=-SIN(90-A) IN 4TH QUADRANT + MOV A,D ;AND COSA=SIN(A) IN 4TH QUADRANT + BR ACR.D + +;THE THIRD QUADRANT +ACRIII: BIS E,B ;SINA = -SIN (A) IN 3RD QUADRANT + BIS E,D ;COSA = - SIN (90-A) IN 3RD QUADRANT + BR ACR.D + +;SECOND QUADRANT +ACRII: MOV B,A ;SIN (A) + MOV D,B ;SINA = SIN (90-A) IN 2ND QUADRANT + MOV A,D + BIS E,D ;COSA = -SIN (A) IN 2ND QUADRANT + +;IN THE FIRST QUADRANT +;SINA = SIN (A) AND +;COSA = SIN (90-A) +ACR.D: MOV B,SINA + MOV D,COSA + + +;NOW GET DIREC. DIREC IS THE DIRECTION CODE FOR THE DISPLAY CODE + CMP #45.,C ;IS THE REMAINDER MORE THAN 45? + ADC F ;CARRY WAS SET IF C<45 + ASL F + ASL F + ASL F + MOV F,DIREC + + RTS PC + +;GET SIN (A) INTO D. +;THE SINE TABLE HAS ONLY EVEN ANGLES. INTERPOLATE ODD ANGLES. +SINGET: BIT #1,A ;ODD OR EVEN + BEQ AEVEN + ADD #,A ;POINT TO ANGLE AFTER IT + MOV (A),D ;SIN (A+1) + ADD -(A),D ;PLUS SIN (A-1) + ASR D ;DIVIDED BY 2 + RTS PC +AEVEN: MOV SIN(A),D + RTS PC + + +;BEAUTIFUL SINE TABLE IN WHOOPIE FORMAT + + +SIN: + + 0 ;0 DEGREES + 2167 ;2 DEGREES + 4355 ;4 DEGREES + 6541 ;6 DEGREES + 10720 ;8 DEGREES + 13072 ;10 DEGREES + 15234 ;12 DEGREES + 17367 ;14 DEGREES + 21510 ;16 DEGREES + 23615 ;18 DEGREES + 25707 ;20 DEGREES + 27763 ;22 DEGREES + 32017 ;24 DEGREES + 34034 ;26 DEGREES + 36027 ;28 DEGREES + 40000 ;30 DEGREES + 41724 ;32 DEGREES + 43623 ;34 DEGREES + 45474 ;36 DEGREES + 47315 ;38 DEGREES + 51106 ;40 DEGREES + 52646 ;42 DEGREES + 54352 ;44 DEGREES + 56023 ;46 DEGREES + 57437 ;48 DEGREES + 61015 ;50 DEGREES + 62335 ;52 DEGREES + 63615 ;54 DEGREES + 65035 ;56 DEGREES + 66214 ;58 DEGREES + 67331 ;60 DEGREES + 70404 ;62 DEGREES + 71413 ;64 DEGREES + 72357 ;66 DEGREES + 73255 ;68 DEGREES + 74107 ;70 DEGREES + 74674 ;72 DEGREES + 75412 ;74 DEGREES + 76062 ;76 DEGREES + 76463 ;78 DEGREES + 77016 ;80 DEGREES + 77301 ;82 DEGREES + 77514 ;84 DEGREES + 77660 ;86 DEGREES + 77754 ;88 DEGREES + 77777 ;90 DEGREES + +;XYDIR +; CALL WITH D=DX, E=DY +; CALCULATE DIREC BASED ON DX AND DY +XYDIR: CLR A ;BUILD INDEX IN A + TST D ;IS DX POSITIVE + BGE XYDIR1 + NEG D ;ABSOLUTE VALUE OF DX + TST (A)+ ;PUT 2 INTO A +XYDIR1: TST E ;IS DY POSITIVE + BGE XYDIR2 + NEG E ;ABSOLUTE VALUE OF DY + INC A ;INCREMENT INDEX +XYDIR2: CMP D,E ;WILL GENERATE CARRY IF D,F ;NOW CLEAR MARKED BITS +DSGC1: MOV SNLIST,C ;POINTER TO SNAP LIST + BEQ DSGC9 ;OBVIOUSLY DOESN'T HAVE SNAPS + + JSR PC,.LOADC ;FIRST NODE OF LIST IS DUMMY +DSGC2: MOV C,E ;SAVE POINTER TO NODE +DSGC3: BIT #7777,A ;LEAVE ADDRESS ONLY + BEQ DSGC4 ;END OF LIST + MOV A,C ;POINTER TO NEXT NODE + JSR PC,.LOADC + ADD F,PC ;CHOOSE BETWEEN FREEING AND CLEARING + +;TRY TO FREE THE SNAP +DSGCF1: TST -(B) ;WAS SNAP MARKED? (B POINTS TO REF COUNT) + BNE DSGC2 ;EITHER DISPLAYED OR MARKED + +;NOT MARKED, AND NOT DISPLAYED ANYWHERE!! +;FREE THIS SNAP + JSR PC,.FREE ;CLEAN UP SNLIST + MOV E,C ;POINTER TO PREVIOUS NODE OF SNLIST + JSR PC,.STP1 ;STORE A AS TOP WORD OF PREVIOUS NODE + MOV B,D ;POINTER TO SNAP DCODE + JSR PC,DYFREE + BR DSGC3 + +DSGC6: BIC #100000,-(B) ;CLEAR MARKED BIT + BR DSGC3 + + +;MKDC +; CALLED BY LOGO GARBAGE COLLECTOR DURING MARKING PHASE +; CALLED WITH B POINTING TO SNAP NODE +MKDC: TST SNLIST ;CALLED TO KILL THE DISPLAY? + BEQ MKDC.K ;YES + BIT #7777,B + BEQ DSGC9 ;EMPTY SNAP +;MARK THE SNAP + PUSH A + SPUSH B + JSR PC,.LOAD + MOV #SNUM,A + JSR PC,CONVERT ;GET SNAP ADDRESS INTO B + BR MKDC.R ;IF DOESN'T SKIP, THEN BAD NODE!!!!!!!!!!!!!!! + BIS #100000,-(B) ;MARK THE REF COUNTER +MKDC.R: JMP RETB ;RESTORE A AND B + +;CALLED BY KILLDISPLAY +;TURN SNAP INTO EMPTY SNAP +MKDC.K: MOV #SNP,B ;EMPTY SNAP + JSR PC,.STP2 + RTS PC + + + +;HERE START THE LINE AND TURTLE DRAWING PROGRAMS + +;DR.LIN +; DRAW A LINE. D=DX, E=DY, OR VICE VERSA. +; THE DIRECTION CODE FOR THE LINE IS IN DIREC +DR.LIN: BICB #TEMF,DFLAGS ;GOING TO USE TEMF SO CLEAR IT + MOV BYCNT,C + MOVB OLDIR,-(SP) ;IN CASE OF ERROR BOMB OUT + + CMPB DIREC,(SP) ;OLDIR IS THE DIREC LAST TIME DR.LIN CALLED + BEQ DR.LAN ;THEY ARE THE SAME + MOV #1,C ;NOT SAME. + MOVB DIREC,(SP) ;SET OLDIR + +DR.LAN: BITB #HOOKF,DFLAGS ;CAN NEW D.LIST BE HOOKED TO PREVIOUS ONE? + BNE DR.LBN ;YES. + MOV #1,C ;NO. +DR.LBN: JSR PC,DR.SC ;SET A=CON, B=AC. + JSR PC,DR.NEP ;CALCULATE NEW END POINT OF DLIST + MOV C,-(SP) ;SAVE THE NEW BYCNT + ADD STT,D ;D = HOW MANY MORE WORDS IN DLIST + CMP D,DYB ;COMPARE TO DY BOTTOM + BLT DR.L1 ;THERE'S ROOM + ERROR+TML ;TOO MANY LINES + +;OKAY, THERE WAS ROOM FOR THE LINE +DR.L1: MOV D,STT ;SET STT TO NEW STATIC TOP + MOV PUSHJT,(D) ;PUT PUSHJ TURTLE AT TOP + JSR PC,DR.ASC ;ASSEMBLE THE DISPLAY CODE + MOV (SP)+,BYCNT ;THE NEW BYCNT + MOVB (SP)+,OLDIR ;NEW OLDIR + BISB #HOOKF,DFLAGS ;FOR NEXT TIME + RTS PC ;RETURN + + +;DRAW THE TURTLE +DR.TUR: MOV DIREC,-(SP) ;USED LOCALLY BY DR.TUR + MOV #TURSIZ,A ;TURTLE SIZE + JSR PC,MULSIN ;B,,C = SIZE * SINA + JSR PC,FIX + MOV B,E ;NOW E HAS INTEGER OF SIZE * SINA + JSR PC,MULCOS ;B,,C = SIZE * COSA + JSR PC,FIX + MOV B,D ;NOW D HAS INTEGER OF SIZE * COSA + + MOV B,-(SP) + SUB E,(SP) ;NOW SIZE * (COSA - SINA) IS ON STACK + ADD E,B + MOV B,-(SP) ;SIZE * (COSA + SINA) IS NOW ON STACK + + MOV TUB,TUT ;TUT WILL BE POINTER TO TOP OF TURTLE DLIST SO FAR + +;SIDE 1 + ADD #20,DIREC ;SIDE 1 IS 2*45 DEGREES LEFT OF CURRENT DIRECTION + JSR PC,DR.TSD ;DRAW THE SIDE + +;SIDE 2 + SUB #30,DIREC ;SIDE 2 IS 3*45 DEGREES RIGHT OF SIDE 1 + MOV (SP)+,D ;DX IS SIZE * (COSA + SINA) + MOV (SP)+,E ;DY IS SIZE * (COSA - SINA) + JSR PC,DR.TSD ;DRAW THE SIDE + +;SIDE 3 HAS THE SAME INCREMENTS AS SIDE 2. +;JUST THE DIRECTION IS DIFFERENT + MOV DIREC,B + SUB #20,B ;SIDE 3 IS 2*45 DEGREES RIGHT + BIC #177707,B ;LEAVE ONLY THE 3 BITS + SWAB B ;PUT THE DIREC BITS IN TOP BYTE + MOV TUT,C ;POINTS TO WORD ABOVE LAST ONE OF TURTLE DLIST + MOV C,A + SUB D,C ;SINCE D POINTS TO BOTTOM WORD OF SIDE 2 + ;C-D IS NUMBER OF BYTES IN SIDE 2'S DLIST + ASR C ;C/2 = NUMBER OF WORDS +DR.TS3: MOV (D)+,E ;NEXT WORD OF SIDE 2'S DLIST + BIC #34000,E ;CLEAR THE DIRECTION BITS THEREIN + BIS B,E ;AND SET THEM FROM THE NEW DIREC IN B + MOV E,(A)+ ;STORE IN DLIST + DEC C ;NUMBER OF WORDS IN SIDE 2'S DLIST + BGT DR.TS3 ;THERE ARE MORE WORDS + +;SIDE 4 IS IDENTICAL TO SIDE 1 +;FURTHERMORE, SIDE 1 IS MADE UP OF ONLY ONE WORD + MOV @TUB,(A)+ ;PUT THE FIRST WORD OF TURTLE INTO TOP WORD + MOV #DPOP!DSTOP,(A) ;DISPLAY POP AND STOP. + +;RESTORE DIREC, THEN RETURN + MOV (SP)+,DIREC + RTS PC + + +;DRAW TURTLE SIDE +; DRAW ONE SIDE OF THE TURTLE +; DIREC CONTAINS THE DIRECTION +; TUT POINTS TO TOP OF TURTLE DISPLAY LIST SO FAR +; C,D = + OR - DX OR DY +DR.TSD: BIC #177707,DIREC ;BITS MAY HAVE BEEN SET BY THE SUBTRACTING + JSR PC,DR.SC + MOV #1,C ;BYCNT + JSR PC,DR.NE1 + ADD TUT,D ;D = NEW TOP OF TURTLE + MOV D,TUT + JMP DR.ASC ;ACTUALLY CREAT THE DISPLAY LIST + + +;SET UP CON AND AC +; CALL WITH D,E = + OR - DX OR DY +; RETURNS A=CON, B = AC +DR.SC: TST D + BGE DR.TE ;TEST E + NEG D ;MAKE D POSITIVE +;MAKE SURE E IS POSITIVE +DR.TE: TST E + BGE DR.BIG ;NEXT WE'LL SEE WHICH IS BIGGER + NEG E ;MAKE D POSITIVE + +;WHICH IS BIGGER +DR.BIG: MOV #MQ,A + CLR (A) ;START TO SET UP DIVISION + CMP D,E + BGT DR.DBG ;D IS BIGGER + BEQ DR.EQ ;THEY ARE THE SAME SIZE + +;OTHERWISE, E IS BIGGER + MOV D,-(A) ;HIGH ORDER DIVIDEND + MOV E,-(A) ;AND E IS THE DIVISOR + MOV E,F ;WHICHEVER IS BIGGER IS THE NUMBER OF INCS + BR DR.SC4 + +;THEY ARE THE SAME SIZE +DR.EQ: MOV #-1,A ;SET CON = .777... + MOV E,F ;NUMBER OF INCS + BR DR.SC5 + +;D IS BIGGER +DR.DBG: MOV E,-(A) ;HIGH ORDER DIVIDEND + MOV D,-(A) ;AND D IS THE DIVISOR + MOV D,F ;NUMBER OF INCS + +;NOW PICK UP THE QUOTIENT +DR.SC4: ADD #4,A ;POINT A TO QUOTIENT + MOV (A),A ;SET CON TO THE QUOTIENT + +;NOW SET AC = .1000 = 1/2 IN THIS REPRESENTATION +DR.SC5: MOV #100000,B + RTS PC + + +;CALCULATE THE NEW END POINT OF THE DLIST +; CALL WITH F = THE NUMBER OF INCS +; RETURNS D = NUMBER OF MORE WORDS IN DLIST +; C = PLACE WHERE FIRST INCREMENT CAN GO IN LAST DWORD +DR.NEP: CMP C,#1 + BNE DR.NE2 + +DR.NE1: BISB #TEMF,DFLAGS ;TEMF IS SET WHEN YOU CAN'T HOOK +DR.NE2: MOV A,-(SP) ;SAVE A REGISTER + MOV #MQ,D + MOV F,(D) ;DIVIDEND=NUMBER OF INCS + CLR -(D) + MOV #8.,-(D) ;DIVISOR. + TST (D)+ + MOV (D)+,A ;PUT REMAINDER IN A + MOV (D),D ;PUT QUOTIENT INTO D +DR.N1: DEC A ;THE REMAINDER + BLT DR.N25 ;FINISHED SHIFTING, BUT BYCNT DIDNT FALL OFF + ASR C ;SHIFT BYCNT RIGHT + BCC DR.N1 + +;SINCE CARRY SET, BYCNT FELL OFF RIGHT END OF REGISTER + RORB C ;STICK A ONE IN THE HIGH BIT OF C + INC D ;INCREMENT THE QUOTIENT + MOV #100,E ;INCREMENT MODE MARKER +DR.N2: INC E ;COUNTER IN LAST DWORD + DEC A ;THE REMAINDER + BLT DR.N3 + ASR C ;SHIFT BYCNT RIGHT + BR DR.N2 + +;C IS SET CORRECTLY, BUT HAVE TO GET COUNT IN E +DR.N25: MOV C,-(SP) ;SAVE FOR A WHILE + MOV #111,E ;INCREMENT-MODE MARKER + 9 +DR.N26: DEC E ;DEC THE COUNT + ASR C ;SHIFT BYCNT + BCC DR.N26 ;DIDN'T FALL OFF. DEC COUNT AGAIN + MOV (SP)+,C ;E IS SET NOW. RESTORE C. + +DR.N3: BIC #10,E ;STRAY BIT THAT MIGHT BE ON + BIS DIREC,E ;OR IN THE DIRECTION + ASL D ;NUMBER OF WORDS IS 2*QUOTIENT + MOV (SP)+,A ;RESTORE A + RTS PC + + +;ACTUALLY ASSEMBLE THE NEW DISPLAY LIST +; CALL WITH A=CON, B=AC, C=BYCNT, D=POINTER TO FIRST WORD OF DLIST +; E=TOP HALF OF THE INC MODE INSTRUCTION, F=NUMBER OF INCS +DR.ASC: SWAB E ;STUFF IN E WAS IN WRONG HALF +DR.AS0: ADD A,B ;CON+AC + BCC DR.AS1 + ADD C,E ;CARRY, SO PUT A 1 INTO DCODE +DR.AS1: DEC F ;NUMBER OF INCS + BLE DR.ALW ;THIS WAS THE LAST WORD + ASLB C ;SHIFT BYCNT + BCC DR.AS0 ;CONTINUE WITH THIS WORD + +;THIS WORD DONE + MOV E,-(D) ;STORE IN DLIST + BIC #3777,E ;0 THE COUNT AND BOTTOM BYTE + INC C ;SET C TO 1 + BR DR.AS0 + +;ALL THAT'S LEFT TO DO IS STORE THE BOTTOM WORD OF NEW DLIST +DR.ALW: BITB #TEMF,DFLAGS ;IS BOTTOM WORD OF NEW SAME AS TOP WORD OF OLD? + BNE DR.AS9 ;NO. + BISB -2(D),E ;SET THE BITS IN BOTTOM WORD THAT WERE ALREADY SET IN DLIST +DR.AS9: MOV E,-(D) ;STORE BOTTOM WORD + + RTS PC + +.STITL DISPLAY BUFFERS + +.IF2 + PAD ^\START OF BUFFERS\,\. +.ENDC + + DISREL=. ;DISPLAY RELOCATION + +;FIRST WORD OF EACH DISPLAY IS HERE + REPT1 3,-DISREL>/2!DPUSHJ + REPT1 5,DSTOP + +;THE DISPLAY PDL POINTERS FOLLOW + DPDLP=. + REPT1 10,-1 + +;THE DISPLAY PDL'S GO HERE + DPDL=. + .=.+SDPDLL ;SAVE A BLOCK OF CORE FOR PDL'S + +;THE BODY OF THE DISPLAY LISTS GO HERE + DLIST=. + .=.+SDLEN ;SAVE A BLOCK OF CORE FOR DISPLAY LISTS + +;THE TURTLE DISPLAY LISTS GO HERE + TLIST=. + .=.+STLEN ;SAVE A BLOCK OF CORE FOR THE TURTLES + +;AND THAT IS THE END OF THE DISPLAY LIST BUFFERS + DLTOP=.-1 +  \ No newline at end of file diff --git a/PDP11/11logo/tyi.152 b/PDP11/11logo/tyi.152 new file mode 100644 index 00000000..8e14baf9 --- /dev/null +++ b/PDP11/11logo/tyi.152 @@ -0,0 +1,1111 @@ + + + .STITL TELETYPE AND TYI +;THINGS TO DO -- +;DIFFERENT TTY TYPES + + VERN==VERN+%FNAM2 + + + +.MACR IFL FLG,EXPR ;ONE LINE COND IF FLG .NE. 0 +.XLIST + .IFNZ FLG + .LIST + EXPR + .XLIST + .ENDC +.LIST +.ENDM + +.MACR IFN FLG,EXPR ;ONE LINE COND IF FLG=0 +.XLIST + .IFZ FLG + .LIST + EXPR + .XLIST + .ENDC +.LIST +.ENDM + +.MACR TIPNTR TOP,SZ,TMS ;MAKES MNUSRS+TMS PNTRS +.XLIST + .ZZZ==0 + .REPT MNUSRS+TMS + TOP+ + .ZZZ==.ZZZ+1 + .ENDR +.LIST +.ENDM + + +;VARIOUS FLAGS AND TELETYPE VARIABLES + + ;FLAGS TTY STATUS +TYIDR==100000 +TIDW==40000 ;TYI DISK WRITE IN PROCESS +TIDR==20000 ;TYI DISK READ IN PROCESS +TIEDR==10000 ;EDIT DSK READ +TIEDW==4000 +TIDTRA==TYIDR!TIDW!TIDR!TIEDR!TIEDW ;DISK TRANSFER +TIBR==2000 ;^G (BREAK) TYPED +TIED==1000 ;IN EDIT MODE +FCQF==200 ;CNTRL Q + +NTY==1 +NFTY==0 +NKLTY==0 +NFKLTY==2*NTY +NDCTY==0 +NFDCTY==2* +NDPTY==0 +NFDPTY==2* +NDMTY==7 +NFDMTY==2* +NTTY==NTY+NKLTY+NDCTY+NDCTY+NDPTY+NDMTY + + .STITLE TELETYPE BUFFERS AND VARIABLES + ;BUFFERS +.EVEN + TITQSZ==6 ;SIZE OF TEMP TELETYPE INPUT BUFFER, +TITQ: .=.+ ;TEMP TYI INT BUFFERS + TIBFSZ==100 ;TYPE IN BUFFER+EDIT BUF SIZE +TIBF: .=.+ ;TYPE IN AND EDIT BUFFERS + TOBFSZ==40 ;TYPE OUT BUFFER SIZE +TOBF: .=.+ ;TYPE OUT BUFFERS +;TYPE OUT INFO +CHARNO: .=.+ +LINEL: +.XLIST +.REPT NTTY + 60. +.ENDR +.LIST + +;BUFFER PNTRS + ;TEMP TYPE IN QUEUE +TITQT: TIPNTR TITQ,TITQSZ,1 ;TEMP Q TOP AND BOTTOM +TITQP: .=.+<2*NTTY> ;NXT TO BE PROCESSED +TITQL: .=.+<2*NTTY> ;TEMP Q LAST IN +TITQN: .=.+<2*NTTY> + ;TYPE IN BUFFERS +TIBT: TIPNTR TIBF,TIBFSZ,1 ;TYI BUFFER TOP (DOUBLE AS EDIT BUF BOTTOM) +TIBP: .=.+<2*NTTY> +TYIBP: .=.+<2*NTTY> ;SAME AS ABOVE,USED BY TYI +TITN: .=.+ +TYITN: .=.+ +TIBL: .=.+<2*NTTY> ;LAST+1 THESE PNTRS CHANGE IN EDIT MODE +TIPC: .=.+<2*NTTY> +TISVD: .=.+<2*NTTY> + ;EDIT BUFFERS + EDBFSZ==40 ;EDIT BUFFER SIZE +TIEBT: TIPNTR TIBF+EDBFSZ,TIBFSZ,0 ;EDIT BUF TOP +TIEBP: .=.+<2*NTTY> ;PNTR INITIALLY PAST BOTTOM + ;TYPE OUT BUFFERS +TOBT: TIPNTR TOBF,TOBFSZ,1 ;TOP & BOTTOM +TOBFF: .=.+<2*NTTY> +TOBP: .=.+<2*NTTY> ;NEXT CHAR +TOTN: .=.+ +TOPC: .=.+ +TOSVC: .=.+ +TOSVD: .=.+ +TODING: .=.+ +TOSND: .REPT NTY + CNSND +.ENDR +.REPT NDMTY + DMSND +.ENDR + ;DISK BUFFER POINTERS +TILD: .=.+ +TIHD: .=.+ +TIDP: .=.+ ;# OF WDS IN TYI DSK BUFFER USED BY INT ROUTINES +TYIDP: .=.+ ;DITTO USED BY TYI +TYIFDP: .=.+ ;# OF WDS TRANSFERREDFROM DSK + ;EDIT BUFFER +TIELD: .=.+ +TIEHD: .=.+ +TIEDP: .=.+ ;# OF WDS TRANSFERRED TO DSK +TIEFDP: .=.+ ;# OF WDS TRANSFERRED FROM + +TTYBR: .=.+ +TTYEBR: .=.+ + ;TTY STATUS +TTYST: .=.+ + + ;USER INDEX +TTYU: .=.+<2*NTTY> + + DMBIT=.-NFDMTY + ;BAR BIT FOR TTY + .ZZZ==1 +.XLIST +.REPT 2*NDMTY + .ZZZ + .ZZZ==.ZZZ_1 +.ENDR +.LIST + + .STITLE CHAR DISPATCH TABLES + + ;TYI DISPATCH TABLES +CTIS: ;SPECIAL CHARACTERS -- DTBL (CHAR) HAS FSF ON + TICC ;^C COPIES NEXT CHAR + TICD ;^D DELETES NEXT CHAR + TICZ ;^G BREAK + TICM ;^M CARRIAGE RETURN -- POSSIBLE END OF LINE + TICN ;^N COPIES NEXT WORD + TICQ ;^Q QUOTES NEXT CHARACTER + TICR ;^R COPIES REST OF EDIT BUFFER + TICS ;^S SKIPS (DELETES) NEXT WORD + TICW ;^W DELETES PREVIOUS WORD + TGTC2 ;^X CLARIFY INPUT + TICY ;^Y RECOVER PREVIOUS LINE + TICZ ;^Z EMPTIES TYPE IN BUFFER + TIDEL ;RBO RUBOUT + +CTIQ: ;QUOTING CHARS + TIOBR ;[ +CTIUQ: TICBR ;] + TIOBR + + ;TYO DISPATCH TABLE FOR CHARS WITH FOF +CTOS: TOCB ;^B ECHOES AS SPACE + TOCH ;^H BACKSPACE + UTYO4 ;^G BELL + TOCM ;^M CARRIAGE RETURN + TOCI ;^I TAB + UTYO4 ;^J LINEFEED + UTYO4 ;^K VERT TAB + UTYO4 ;^L FORMFEED + + +TINIT: CLR U + MOV #7,BRKCHR + MOV #SIMTST,E + CMP E,(E)+ + BNE TINIT2 + MOV #77,CLKBDM+2 ;USING SIMULATOR + MOV #30,BRKCHR + MOV #TICZ,CTIS+22 + INC U +TINIT2: MOV U,(PC)+ +SIMTST: SIMTST + CLR U + CLR E +TINIT1: JSR PC,TTYRST + MOV E,UTTY(U) + MOV U,TTYU(E) + MOV DTYIBF(U),TILD(E) + MOV DTYIBF+2(U),TIHD(E) + MOV DEDTBF(U),TIELD(E) + MOV DEDTBF+2(U),TIEHD(E) + TST (E)+ + ADD #LUBLK,U + CMP E,NUSER2 + BLT TINIT1 + + MOV #JTYI,TYI+2 + MOV #JTYO,TYO+2 + MOV #CRLF,.CRLF+2 +.IFNZ NTY + MOV #CNSQ,TKBRV + MOV #CNINT,TPBRV + MOV #100,TKS + MOV #100,TPS +.ENDC + MOV #DMCA+NFDMTY,DMTBR + MOV #DMTT,TTP + MOV #DMINT,DMTBRV + MOV #CLKBDM,CLKBR1+2 ;TYPE IN AT CLOCK LEVEL + MOV #10001,DMCSR ;TRANSMIT INTS ONLY + JMP NEXTUS + + +;ACS (IN GENERAL) +;E -- TTY*2 +;D-- CHARACTER +;C -- CHARACTER DISPATCHING +;B&A -- VARIOUS HACKS, USUALLY NOT USED +;U -- NOT USED, HOPEFULLY WILL CONTAIN USER + +;TTYRST -- +;CALL THIS WITH TTY IN E TO RESET INDVIDUAL TTY +TTYRST: MOV TITQT(E),TITQP(E) ;TEMP Q PNTRS + MOV TITQT(E),TITQL(E) +TTYRS1: MOV TITQL(E),TITQP(E) + CLR TITQN(E) +TTYRS2: BIS #TIBR,TTYST(E) + CMP TOSND(E),#DMSND + BNE TTYRS4 + BIC DMBIT(E),DMTRAN + BIC DMBIT(E),DMBAR + CLR DMWC(E) ;TYPE OUT STUFF + MOV TOBT(E),DMCA(E) +TTYRS4: MOV TOBT(E),TOBP(E) + MOV TOBT(E),TOBFF(E) + CLR CHARNO(E) + CLR TOPC(E) + CLR TOTN(E) + CLR TODING(E) + BIT #TIDTRA,TTYST(E) + BNE TTYRS3 + BIC #TIBR,TTYST(E) + CLR TYIDP(E) +TTYRS3: BIC #TIED!277,TTYST(E) ;INPUT STUFF + MOV TIBT+2(E),TIBL(E) + MOV TIBT(E),TIBP(E) ;TYI BUF + MOV TIBT(E),TYIBP(E) + MOV TIBT+2(E),TIEBP(E) ;EDIT BUFFER + CLR TIDP(E) ;DSK WD CNT + CLR TIEDP(E) + CLR TYIFDP(E) + CLR TIEFDP(E) + CLR TITN(E) + CLR TTYBR(E) + CLR TTYEBR(E) + RTS PC + +;EDITA-- +;CALL TO START EDIT +EDITA: BIS #TIED,TTYST(E) + MOV TIEBT(E),TIBL(E) ;USE 1/2 TYI BUFFER FOR EDIT BUF + MOV TIEBT(E),TIEBP(E) + RTS PC + +;EDITZ-- +;CALL TO END EDIT +EDITZ: BIC #TIED,TTYST(E) + MOV TIBT+2(E),TIBL(E) ;USE EDIT BUF FOR TYI AGAIN + RTS PC + + .STITLE TYPE IN +;TISQ -- +;MOVE CHARS FROM TUMBLE TABLE TO TEMPORARY TYPE IN QUEUES +TISQ: BIC #177600,D +TISQ1: MOV TTYU(E),U + CMP D,BRKCHR + BEQ BREAK + CMP FLSRES(U),#FRTYIH + BNE TISQ3 + CMP TITQN(E),#TITQSZ + BGE DING +TISQ2: MOVB D,@TITQL(E) + INC TITQN(E) + INC TITQL(E) + CMP TITQL(E),TITQT+2(E) + BLT TISQ3 + MOV TITQT(E),TITQL(E) +TISQ3: RTS PC + +;BREAK +BREAK: CMP FLSRES(U),#FRTYIH + BEQ BREAK1 + BIS #TIBR,TTYST(E) + MOV PC,BRAKE + RTS PC +BREAK1: JSR PC,TTYRS2 + BR TISQ2 + + +;BRAKR -- TO EXECUTE BREAK WHEN NOT IN TYIH +BRAKR: TST JDCSW + BEQ TISQ3 + MOV UTTY(U),E + JMP TTYRS2 + +;DING -- +DING: INC TODING(E) + RTS PC + +;DMSQ -- DM11 TYPE IN +DMSQ: BIT #60000,DMCSR + BNE DMSQ4 ;NXM OR SYS OVERRUN + SPUSH C + SPUSH D + SPUSH E + SPUSH U + MOV TTP,C + BR DMSQ3 + +DMSQ1: BIC #120200,(C) + BIT #40000,(C) + BNE DMSQ2 ;BR IF NO STOP RCVD + MOVB 1(C),E ;TTY*2 + MOVB (C),D ;CHAR + ADD #NFDMTY,E + JSR PC,TISQ1 +DMSQ2: TST (C)+ ;INC TTP + CMP C,#DMTT+200 + BLT DMSQ3 + MOV #DMTT,C ;IF TTP AT END OF TT, RESET +DMSQ3: TST (C) + BLT DMSQ1 + + MOV C,(PC)+ ;SAVE PNTR +TTP: DMTT + SPOP U + SPOP E + SPOP D + SPOP C + RTS PC + +DMSQ4: HALT ;NXM OR SYS OVERRUN + BIC #60000,DMCSR + RTS PC + + + +CNSQ: JSR A,GENSQ + TKB + NFTY + +GENSQ: SPUSH D + SPUSH E + SPUSH U + MOV @(A)+,D + MOV (A),E + JSR PC,TISQ + SPOP U + SPOP E + SPOP D + SPOP A + RTI + +;TI2Q-- +;FOR ALL USERS, EMPTY TEMP TYI BUFFER TO TYI BUF +TI2Q: SPUSH C + SPUSH D + SPUSH E + CLR E + +TI2Q1: MOV TIPC(E),C ;TRY TO PROCESS ALL CHARS + BIT #TIDTRA,TTYST(E) + BNE TI2Q3 ;BR IF DSK TRA OR TYO BUF FULL + TST TOPC(E) + BNE TI2Q3 + TST C + BNE TI2Q2 + TST TITQN(E) + BLE TI2Q3 + MOVB @TITQP(E),D ;CHAR + JSR PC,TGTC ;PROCESS + DEC TITQN(E) + INC TITQP(E) + CMP TITQP(E),TITQT+2(E) + BLT TI2Q1 + MOV TITQT(E),TITQP(E) + BR TI2Q1 + +TI2Q3: TST (E)+ + CMP E,NUSER2 ;THROUGH WITH ALL TTYS? + BLT TI2Q1 ;BR IF NO + SPOP E + SPOP D + SPOP C + RTS PC + +TI2Q2: MOV TISVD(E),D + CLR TIPC(E) + JSR PC,(C) + BR TI2Q1 + + +;TGTC -- +;GET CHAR FROM 5 WD BUFFER & PROCESS INTO WD ASSEMBLY BUFFER +TGTC: BIT #FCQF,TTYST(E) + BEQ TGTC5 + JMP TICPY ;YES, COPY CHAR +TGTC5: BIT #200,D ;QUOTED? + BNE TGTC2 ;BR IF YES + BITB #FSF,DTBL(D) ;SPECIAL CHAR? + BEQ TGTC1 + MOVB DTBL2(D),C ;YES + JMP @CTIS(C) ;DISPATCH + +TGTC1: BITB #FQF,DTBL(D) ;QUOTING CHAR? + BEQ TGTC2 + MOVB DTBL2(D),C ;YES + JSR PC,@CTIQ(C) ;DISPATCH + +TGTC2: JSR PC,TIINB ;PUT CHAR IN BUFFER +TGTC3: JSR PC,UTYO1 + JSR PC,@TOSND(E) +TGTC4: RTS PC + + +;SPECIAL CHAR ROUTINES + +;^C -- COPY NEXT CHAR +TICC: BIT #TIED,TTYST(E) + BNE TICC1 + JMP TIQM ;IF NOT EDITING JUST ECHO ^C +TICC1: JSR PC,GEDC ;GET EDIT CHAR + BR TGTC5 + +;^C -- DELETES NEXT CHAR +TICD: BIT #TIED,TTYST(E) + BNE TICD1 + JMP TIQM ;IGNORE IF NOT EDITING +TICD1: JSR PC,GEDC ;REMOVE CHAR + MOV #4,D + BR TGTC3 ;SUCCEED, ECHO ^C + +;^M (C.R.) -- MAYBE END OF LINE +TICM: TST TTYBR(E) + BGT TGTC2 ;IF NOT EOL +TICM1: JSR PC,TGTC2 ;ECHO C.R. + JSR PC,TIDTSC + MOV TITN(E),TYITN(E) + TST TIDP(E) + BLE TICM4 + CMP TIBP(E),TIBT(E) + BLE TICM2 + MOV #TICM2,TIPC(E) + JMP TIDKO +TICM2: MOV TIDP(E),TYIDP(E) + JSR PC,TTYRS3 + JSR PC,TIDTS1 + JSR PC,TYIDKI +TICM3: MOV TTYU(E),D + MOV #FRTYIW,FLSRES(D) + RTS PC +TICM4: JSR PC,TTYRS3 + JSR PC,TEDKO + BR TICM3 + +;^N -- COPY NEXT WORD +TICN: BIT #TIED,TTYST(E) + BNE TICN1 + JMP TIQM + +TICN2: JSR PC,TGTC5 + JSR PC,TIDTSC +TICN1: JSR PC,GEDC ;GET NEXT CHAR IN ED BUF + BIT #200,D + BNE TICN2 + BITB #WSF,DTBL(D) + BEQ TICN2 + JMP TGTC5 + +;^Q -- QUOTE NEXT CHAR +TICQ: BIS #FCQF,TTYST(E) ;^Q FLAG ON + BR TGTC3 ;ECHO BUT NOT IN BUFFER + +;^R -- COPY REST OF EDIT BUFFER +TICR: BIT #TIED,TTYST(E) + BNE TICR1 + JMP TIQM ;IF NOT EDITING, IGNORE +TICR1: JSR PC,GEDC + JSR PC,TGTC5 ;SUCCEED, ECHO + JSR PC,TIDTSC + BR TICR1 + +;^S -- SKIP (DELETE) NEXT WORD +TICS: BIT #TIED,TTYST(E) + BNE .+6 + JMP TIQM + JSR PC,TGTC3 +TICS1: JSR PC,TIDTSC + JSR PC,GEDC + BIT #200,D + BNE TICS1 + BITB #WSF,DTBL(D) + BEQ TICS1 + JMP TGTC4 + +;TICW -- ^W RUBOUT TILL PREVIOUS SPACE +TICW1: JSR PC,TGTC3 ;ECHO CHAR + JSR PC,TIDTSC +TICW: JSR PC,TIDEL1 + BIT #200,D + BNE TICW1 + BITB #WSF,DTBL(D) + BEQ TICW1 + JMP TGTC3 + +;TICY -- ^Y RECOVER PREVIOUS LINE +TICY: BIT #TIED,TTYST(E) + BNE TIQM + JSR PC,TICZ1 + JSR PC,TIDTSC + MOV #137,D + JSR PC,TGTC3 + TST TIEDP(E) + BLE .+6 + JSR PC,TEDKI + CLR TTYBR(E) + MOV TIBT(E),TIBP(E) + CLR TIDP(E) + CLR TITN(E) + JMP EDITA + +;^Z -- EMPTY TYI BUFFER +TICZ: MOV TTYU(E),C + MOV #FRTYIW,FLSRES(C) + JSR PC,TICZ1 + CLR TTYBR(E) + MOV #15,@TIBT(E) + MOV #1,TYITN(E) + JMP TTYRS3 + +TICZ1: MOV P,CHARNO(E) + JMP TGTC3 + + +;TIDTSC -- DID SPEC CHAR CAUSE DSK TRANS OR TYO BUF FULL? +TIDTSC: TST TOPC(E) + BNE TIDTS2 +TIDTS1: BIT #TIDTRA,TTYST(E) + BEQ TIDTS3 +TIDTS2: MOV D,TISVD(E) + MOV (P)+,TIPC(E) +TIDTS3: RTS PC + +;TICPY -- QUOTE CHAR IN D +TICPY: BIC #FCQF,TTYST(E) ;^Q FLAG OFF + BITB #FSF!FQF!WSF,DTBL(D) + BEQ TICPY1 + CMP D,#3 + BEQ TICPY2 + CMP D,#32 + BEQ TICPY2 + CMP D,#177 + BEQ TICPY1 + BIS #200,D ;TURN ON HIGH BYTE BIT +TICPY1: JMP TGTC2 +TICPY2: JMP TGTC3 + +;TIOBR -- [ +TIOBR: INC TTYBR(E) + RTS PC + +;TICBR -- ] +TICBR: TST TTYBR(E) + BLE TIQM + DEC TTYBR(E) + RTS PC + +;TIQM -- PRINTS ? +TIQM: MOV #'?,D + JMP TGTC3 + + +;REGULAR CHAR ROUTINES +;TINB MOVES INTO BUFFER, TIDEL1 MOVES OUT + +TIDEL: JSR PC,TIDEL1 ;THIS ALSO WANTS TO BE SUBR + JMP TGTC3 ;SUCCEED, ECHO CHAR + +TIDEL1: CMP TIBP(E),TIBT(E) + BLE TIDEL5 ;BR IF NO CHARS IN BUF + DEC TIBP(E) + MOVB @TIBP(E),D ;CHAR + BIT #200,D + BNE TIDEL3 ;BR IF QUOTED + BITB #FQF,DTBL(D) + BNE .+4 +TIDEL3: RTS PC + MOVB DTBL2(D),C ;UNDO QUOTING ACTION + JMP @CTIUQ(C) + +TIDEL5: TST TIDP(E) + BLE TIDEL6 + MOV D,TISVD(E) + SUB #4,(P) + MOV (P)+,TIPC(E) + JMP TIDKI +TIDEL6: TST (P)+ + RTS PC + +TIINB: CMP TIBP(E),TIBL(E) + BGE TIINB2 + MOVB D,@TIBP(E) ;CHAR IN BUF + INC TITN(E) + INC TIBP(E) + CMP TIBP(E),TIBL(E) + BGE TIINB1 + RTS PC + +TIINB1: JMP TIDKO + +TIINB2: HALT ;TIBP ZONKED + RTS PC + + +;GEDC -- GET EDIT CHAR (FROM EDIT BUF) +GEDC: CMP TIEBP(E),TIBT+2(E) ;ANYTHING IN BUFFER? + BGE TIDEL6 + CMPB @TIEBP(E),#15 ;IS NEXT CHAR C.R.? + BEQ GEDCA ;BR IF YES +GEDC1: MOVB @TIEBP(E),D ;CHAR IN D + INC TIEBP(E) + BIT #200,D + BNE GEDC2 + BITB #FQF,DTBL(D) ;IS IT QUOTING? + BEQ GEDC2 + MOVB DTBL2(D),C + ADD EDQF(C),TTYEBR(E) +GEDC2: CMP TIEBP(E),TIBT+2(E) ;OUT OF BUF? + BLT GEDC3 ;BR IF STILL STUFF IN BUF + TST TIEDP(E) ;IS THERE STUFF ON DSK? + BNE GEDC4 ;BR IF YES +GEDC3: RTS PC + +GEDC4: JMP TEDKI + + ;NEXT CHAR C.R. +GEDCA: TST TTYEBR(E) + BGT GEDC1 ;BR IF IN QUOTES + MOV TIBT+2(E),TIEBP(E) ;END OF EDIT LINE, PUT PNTR TO END OF EDIT BUFFER + BR TIDEL6 + + +EDQF: 1 ;[ + -1 ;] + + +;UTYI -- USER TYI +;RETURNS CHAR IN CH +JTYI: TST USER + BGE .+6 + JMP STYI + PUSH E + PUSH U + MOV USER,U + MOV UTTY(U),E + BIT #TIDTRA,TTYST(E) + BEQ UTYI2 + MOV #FRTYIW,FLSRES(U) +UTYI1: JSR PC,FLUSH ;IF DSKING,FLUSH USER + BIT #TIDTRA,TTYST(E) + BNE UTYI1 + JSR PC,RUNME +UTYI2: BIT #TIBR,TTYST(E) + BNE UTYI3 + DEC TYITN(E) + BLT UTYI4 + CMP TIEDP(E),TYIFDP(E) + BGE .+6 + JSR PC,TEDKO + MOVB @TYIBP(E),D + INC TYIBP(E) + CMP TYIBP(E),TIBL(E) ;USED UP BUFFER? + BLT UTYI3 + JSR PC,TYIDKI +UTYI3: POP U + POP E + RTS PC + +UTYI4: HALT ;TYI ASKED FOR TOO MANY CHARS + BR .-2 + +.STITLE TYI DSK TRANSFER, START, & STOP ROUTINES + +;DISK TRANSFER ROUTINES +;LOCS MUST BE FILLED AS FOLLOWS +;(A) START ROUTINE ADDRESS +;2(A) -WORD COUNT (NOT BYTE COUNT) +;4(A) CORE ADDRESS-2 +;6(A) LOW ORDER OF DSK ADDR +;10(A) HIGH ORDER +;12(A) FREE WD STORE TTY HERE +;14(A) READ OR WRITE CODE (IN LOW BYTE) + +;TIDCM -- COMMON CODE +;CALLED WITH JSR D, +TIDCM: MOV (D)+,.+6 ;ZOT NXT INSTR + MOV 2(E),4(A) + SUB #2,4(A) ;CORE ADDR-2 + MOV E,12(A) ;USER + BIS (D)+,TTYST(E) + TST (D)+ + MOV D,(A) + MOV -(D),14(A) + SPOP D +TIDCM1: SPOP A + RTS PC + +;TSTAB +;TEST FOR ABORT (CALLED WITH JSR D,) AT BEGIN OF START ROUTINE +TSTAB: SPUSH E + MOV 12(A),E + BIT #TIBR,TTYST(E) + BEQ TSTAB1 + CLR 14(A) ;IF BREAK FLAG, ABORT TRANS + BIC -10(D),TTYST(E) +TSTAB4: BIT #TIDTRA,TTYST(E) + BNE TSTAB1 + MOV TTYU(E),D + CMP #FRTYIH,FLSRES(D) + BNE TSTAB3 + BIC #TIBR,TTYST(E) +TSTAB1: MOV D,(A) ;STOP ROUTINE +TSTAB3: SPOP E + SPOP D + RTS PC + +;TSTAB2 +;CALLED AT START OF STOP ROUTINE +TSTAB2: SPUSH E + MOV 12(A),E ;TTY + BIC -14(D),TTYST(E) + BIT #TIBR,TTYST(E) + BNE TSTAB4 + JMP (D) + +;TIDKO -- TTY +;FROM TYI BUFFER +;TO END OF DSK TYI BUFFER +TIDKO: SPUSH A + JSR PC,SYDRBG + MOV TIBT(E),2(A) + SUB TIBP(E),2(A) + BLT .+10 + HALT + JMP TIDCM1 + ASR 2(A) + SBC 2(A) ;-WD CNT + MOV TILD(E),6(A) + MOV TIHD(E),10(A) + ADD TIDP(E),6(A) ;LOW ORDER DSK + ADC 10(A) ;HIGH ORDER + JSR D,TIDCM + TIBT + TIDW + DWRTEC + JSR D,TSTAB ;START ROUTINE + JSR D,TSTAB2 ;STOP ROUTINE + SUB 2(A),TIDP(E) ;UPDATE # OF WDS (NOT BYTES) ON DSK + SUB 2(A),TYIDP(E) + MOV TIBT(E),TIBP(E) + JMP TSTAB3 + +;TIDKI -- +;FROM END OF DISK TYI +;TO CORE TYI +TIDKI: SPUSH A + JSR PC,SYDRBG + MOV TIBL(E),2(A) + SUB TIBT(E),2(A) + CMP 2(A),TIDP(E) + BLE TIDKI1 + MOV TIDP(E),2(A) +TIDKI1: NEG 2(A) ;- WD CNT + MOV TILD(E),6(A) + MOV TIHD(E),10(A) + ADD 2(A),6(A) ;DSK ADDR=DSK TOP+# OF WDS ON DSK- + ADD TIDP(E),6(A) ;# BEING TRANSFERRED + ADC 10(A) + JSR D,TIDCM + TIBT + TIDR + DREADC + JSR D,TSTAB ;START ROUTINE + JSR D,TSTAB2 ;STOP ROUTINE + ADD 2(A),TIDP(E) + BGE .+6 + HALT ;NEG WD CNT + BR .-2 + ASL 2(A) + SUB 2(A),TIBP(E) ;CORE PNTR + JMP TSTAB3 + + +;TIEDKI -- +;FROM FRONT OF DSK EDIT BUF +;TO CORE EDIT BUFFER +TEDKI: SPUSH A + JSR PC,SYDRBG + MOV #,2(A) + CMP 2(A),TIEDP(E) + BLE TEDK1 + TST TIEDP(E) + BGT .+10 + HALT + JMP TIDCM1 + MOV TIEDP(E),2(A) +TEDK1: NEG 2(A) ;NEG WD CNT + MOV TIELD(E),6(A) + MOV TIEHD(E),10(A) + ADD TIEFDP(E),6(A) ;LOW ORDER DSK + ADC 10(A) + JSR D,TIDCM + TIEBT + TIEDR + DREADC + JSR D,TSTAB ;START ROUTINE + JSR D,TSTAB2 ;STOP ROUTINE + ADD 2(A),TIEDP(E) ;# OF WDS ON DSK + BGE .+6 + HALT + BR .-2 + SUB 2(A),TIEFDP(E) ;# OF WDS OFF DSK + MOV TIEBT(E),TIEBP(E) + JMP TSTAB3 + + +;TIEDKO -- +;FROM CORE TYI +;TOEND OF DSK EDIT BUFFER +TEDKO: SPUSH A + JSR PC,SYDRBG + MOV #-,2(A) ;NEG WD CNT + MOV TIELD(E),6(A) + MOV TIEHD(E),10(A) + ADD TIEDP(E),6(A) + ADC 10(A) + JSR D,TIDCM + TIBT + TIEDW + DWRTEC + JSR D,TSTAB ;START ROUTINE + JSR D,TSTAB2 ;STOP ROUTINE + SUB 2(A),TIEDP(E) + BGE .+4 + HALT + JMP TSTAB3 + +;TYIDKI +;FROM FRONT OF DSK TYI BUFFER +;TO CORE TYI BUFFER +TYIDKI: SPUSH A + JSR PC,SYDRBG + MOV #-,2(A) ;NEG WD CNT + MOV TILD(E),6(A) + MOV TIHD(E),10(A) + ADD TYIFDP(E),6(A) ;LOW ORDER DKS + ADC 10(A) ;HIGH ORDER + JSR D,TIDCM + TIBT + TYIDR + DREADC + JSR D,TSTAB ;START ROUTINE + JSR D,TSTAB2 ;STOP ROUTINE + SUB 2(A),TYIFDP(E) + ADD 2(A),TYIDP(E) + MOV TIBT(E),TYIBP(E) + JMP TSTAB3 + +.STITLE TYPE OUT + +;DMINT -- +;DM11 TRANSMIT INTERRUPT +DMINT: SPUSH E + MOV #NFDMTY,E +DMINT1: BIT DMBIT(E),DMTRAN + BEQ DMINT5 ;LINE WASN'T TRANSMITTING + TST DMWC(E) + BLT DMINT5 ;TRANSMITTING + BIC DMBIT(E),DMTRAN + CMP DMCA(E),TOBT+2(E) + BLT DMINT2 + MOV TOBT(E),DMCA(E) +DMINT2: TST TOPC(E) + BNE DMINT4 + TST TOTN(E) + BEQ DMINT5 +DMINT3: JSR PC,DMSND4 +DMINT5: TST (E)+ + CMP E,#NFDMTY+<2*NDMTY> + BLT DMINT1 ;MORE TTYS TO SERVICE + SPOP E + CMP JDCSW,#1 + BGT .+6 + JSR PC,TI2Q + RTI + +DMINT4: JSR PC,TOENT + BR DMINT3 + +;DMSND -- +;TRANSMIT CHARS FROM TOBE(E) TO TOBP(E) IN CIRC BUF +DMSND: TST DMWC(E) + BLT DMSND5 + CMP DMCA(E),TOBT+2(E) + BLT DMSND4 + MOV TOBT(E),DMCA(E) +DMSND4: MOV DMCA(E),DMWC(E) + CMP DMWC(E),TOBP(E) + BLT DMSND1 + SUB TOBT+2(E),DMWC(E) ;MESSAGE WRAPS AROUND + BR DMSND2 +DMSND1: SUB TOBP(E),DMWC(E) +DMSND2: BGE DMSND3 + ADD DMWC(E),TOTN(E) + BIS DMBIT(E),(PC)+ +DMTRAN: 0 + BIS DMBIT(E),DMBAR +DMSND5: RTS PC +DMSND3: HALT ;WC>=0, SND SHOULD NOT HAVE BEEN CALLED + BR .-6 + +CNINT: SPUSH E + CLR E + JSR PC,CNSND + SPOP E + RTI + +CNSND: JSR A,GNSND + TPS + TPB + +GNSND: BIT #200,@(A)+ + BEQ GNSND1 + TST TOTN(E) + BLE GNSND1 + MOVB @TOBFF(E),@(A) + DEC TOTN(E) + INC TOBFF(E) + CMP TOBFF(E),TOBT+2(E) + BLT GNSND1 + MOV TOBT(E),TOBFF(E) +GNSND1: SPOP A + RTS PC + + +;UTYO -- USER TYO +;PUTS CHARS IN CIRC TYO BUFFER +JTYO: TST USER + BGE .+6 + JMP STYO + PUSH C + PUSH E + PUSH U + MOV USER,U + MOV UTTY(U),E + BIT #TIBR,TTYST(E) + BEQ .+10 +UTYO11: JSR PC,TTYRS2 + BR UTYO10 + TST TOPC(E) + BEQ UTYO9 + MOV #FRTYOW,FLSRES(U) +UTYO8: JSR PC,FLUSH ;FLUSH USER WITH FULL TYPE OUT BUFFER + TST TOPC(E) + BNE UTYO8 + JSR PC,RUNME +UTYO9: BIT #TIBR,TTYST(E) + BNE UTYO11 + JSR PC,UTYO1 + JSR PC,@TOSND(E) +UTYO10: POP U + POP E + POP C + RTS PC + + +TOENT: SPUSH C + SPUSH D + SPUSH TOPC(E) + CLR TOPC(E) + MOV TOSVC(E),C + MOV TOSVD(E),D + JSR PC,@(P)+ + SPOP D + SPOP C + RTS PC + + +UTYO1: TST TOPC(E) + BEQ .+6 + HALT ;TYO BUFFER FULL + BR .-2 + TST TODING(E) + BLE UTYO1B + MOV D,C + MOV #7,D +UTYO1A: JSR PC,TOINB(E) + DEC TODING(E) + BGT UTYO1A + MOV C,D +UTYO1B: BIC #177600,D + BITB #FOF,DTBL(D) + BEQ UTYO2 + MOVB DTBL2(D),C + JMP @CTOS(C) + +UTYO2: CMP D,#40 + BGE UTYO3 + MOV D,C ;PRINT ^ AND CHAR + 100 + MOV #'^,D + JSR PC,TOINB + MOV C,D + ADD #100,D + JSR PC,TOINB + MOV C,D + ADD #2,CHARNO(E) + BR UTYO5 + +UTYO3: INC CHARNO(E) +UTYO4: JSR PC,TOINB +UTYO5: CMP CHARNO(E),LINEL(E) + BLT UTYO6 +TOCM: CLR CHARNO(E) + MOV D,C + MOV #15,D + JSR PC,TOINB + MOV #12,D + JSR PC,TOINB + TST SIMTST + BNE UTYO7 + CLR D + JSR PC,TOINB + JSR PC,TOINB + JSR PC,TOINB +UTYO7: MOV C,D +UTYO6: RTS PC + + +;TOINB -- PUT CHAR IN TYO BUFFER +TOINB: CMP TOBP(E),TOBT+2(E) + BLT TOINB1 + MOV TOBT(E),TOBP(E) +TOINB1: MOVB D,@TOBP(E) + INC TOTN(E) + INC TOBP(E) + CMP TOSND(E),#DMSND + BEQ TOINB4 + CMP TOTN(E),#TOBFSZ + BGE TOINB2 + CMP TOBP(E),TOBT+2(E) + BLT TOINB3 + MOV TOBT(E),TOBP(E) + RTS PC + +TOINB4: CMP TOBP(E),DMCA(E) + BEQ TOINB2 + CMP TOBP(E),TOBT+2(E) + BLT TOINB3 + MOV TOBT(E),TOBP(E) + CMP TOBP(E),DMCA(E) + BNE TOINB3 +TOINB2: MOV (P)+,TOPC(E) + MOV C,TOSVC(E) + MOV D,TOSVD(E) +TOINB3: RTS PC + +;CHAR ROUTINES + +;^B -- ECHOES AS SPACE +TOCB: MOV #40,D + INC CHARNO(E) + JSR PC,TOINB + MOV #2,D + BR UTYO5 + +;^H -- BACKSPACE +TOCH: TST CHARNO(E) + BEQ UTYO6 + DEC CHARNO(E) + JMP UTYO4 + +;^I -- TAB +TOCI: MOV #40,D +TOCI1: INC CHARNO(E) + JSR PC,TOINB + BIT #7,CHARNO(E) + BNE TOCI1 + MOV #11,D + JMP UTYO5 +  \ No newline at end of file diff --git a/PDP11/11logo/zend.67 b/PDP11/11logo/zend.67 new file mode 100644 index 00000000..3b08d7f1 --- /dev/null +++ b/PDP11/11logo/zend.67 @@ -0,0 +1,297 @@ + .STITL DISC BLOCKS, NODE SPACE AND TEST LINES + VERN==VERN+%FNAM2 + + .MACR NODE A,B + .XLIST +$.==$$+1 + A + B +$$==$$+1 + .LIST +.ENDM + +VERNF==VERN +SALTL: LTL +LTL: L1 + L2 + L3 + L4 + L5 + L6 + 0 ;L7 + 0 ;L8 + 0 ;L9 + 0 ;L10 + 0 ;L11 + 0 ;L12 + 0 ;L13 + 0 ;L14 + 0 + +.EVEN +SLOT1: +MSLTLN==LUVBLK+PPDLL+SPDLL+DBUFL+DDIRL+<4*4096.> ;ALL YOU COULD POSSIBLY WANT +UVSAV: .=.+LUVBLK + .=.+PPDLL + IP=. +PDLINK: .=.+4 ;LINK TO PREVIOUS DISK BLOCK + .=.+SPDLL + IS=. +SDLINK: .=.+4 +HCC==67. ;HASH CODE CONSTANT - A PRIME +UHCT: .=UHCT+<2*16.> + $OB3 + $OB4 + $OB5 + .=UHCT+<2*23.> + $OB2 + .=UHCT+<2*60.> + $OB1 + .=UHCT+<2*HCC> +DBUF: .=.+DBUFL +DDIR: .=.+DDIRL + 0 + 0 + +.IF2 + PAD ^\ START OF NODESP\,\. +.ENDC + +NODESP: 0 ;NODE 0 + 0 + .=NODESP+80. + TRUE=140000+20. + SSTR+21. ;20 + "TR + SSTR+0 ;21 + "UE + FALSE=140000+22. + SSTR+23. ;22 + "FA + SSTR+24. ;23 + "LS + SSTR+0 ;24 + 'E + .=NODESP+404. + L1=101. ;PRINT "ABCD" + SFUN+102. ;NODE 101 + $PRINT + LSTR+0 ;102 + LSTR+103. + SSTR+104. ;103 + "AB + SSTR ;104 + "CD + L2=105. ;"123" + LSTR+0 ;105 + LSTR+106. + SSTR+107. ;106 + "12 + SSTR ;107 + '3 + SFUN ;108 + 0 + SFUN ;109 + 0 + L3=110. ;(PRINT "AXBYJ" "1Q" "FOOBAR") + SFUN+111. ;110 + $LPAR + SFUN+112. ;111 + $PRINT + LSTR+117. ;112 + LSTR+114. + SSTR+0 ;113 + "1Q + SSTR+115. ;114 + "AX + SSTR+116. ;115 + "BY + SSTR+0 ;116 + 'J + LSTR+118. ;117 + LSTR+113. + ATOM+119. ;118 + ATOM+122. + SFUN+0 ;119 + $RPAR + SFUN+0 ;120 + 0 +$OB1=121. + 0 ;121 = START OF UOB BUCKET 60. + $FOO + $FOO=122. + ATOM+125. ;122 - HEADER OF FIRST UOE + LSTR+123. + SSTR+124. ;123 + "FO + SSTR+0 ;124 + 'O + VBIND+$FOOF ;125 - VARIABLE BINDING OF 1ST UOE + LSTR+126. + SSTR+127. ;126 + "FO + SSTR+128. ;127 + "OB + SSTR+0 ;128 + "AR + 0 ;129 + 0 + L4=130. ;IF "TRUE" THEN PRINT "TRUE" ELSE PRINT "FALSE" + SFUN+131. ;130 + $IF + LSTR+134. ;131 + LSTR+132. + SSTR+133. ;132 + "TR + SSTR+0 ;133 + "UE + SFUN+135. ;134 + $THEN + SFUN+136. ;135 + $PRINT + LSTR+137. ;136 + LSTR+132. + SFUN+138. ;137 + $ELSE + SFUN+139. ;138 + $PRINT + LSTR+0 ;139 + LSTR+140. + SSTR+141. ;140 + "FA + SSTR+142. ;141 + "LS + SSTR+0 ;142 + 'E + SFUN+0 ;143 + 0 + $$=144. +L5=$$ ;MAKE "BAR" "AB1C" + NODE SFUN+$.,$MAKE + NODE ATOM+$.,ATOM+$BAR + NODE LSTR,LSTR+$. + NODE SSTR+$.,"AB + NODE SSTR,"1C +L6=$$ ;PRINT :BAR + NODE SFUN+$.,$PRINT + NODE UVAR,UVAR+$BAR +$OB2=$$ + NODE 0,$BAR ;START OF UOB BUCKET 23. +$BAR=$$ + NODE ATOM,LSTR+$. + NODE SSTR+$.,"BA + NODE SSTR,'R +L7==$$ ;FOO :BAR "GRINCH" + NODE UFUN+$.,$FOO + NODE UVAR+$.,UVAR+$BAR + NODE LSTR,LSTR+$. + NODE SSTR+$.,"GR + NODE SSTR+$.,"IN + NODE SSTR,"CH +$FOOF=$$ + NODE FBIND+$.,LIST+$FLLP + NODE SFBIND,LIST+$FSFB +$FLLP=$$ + NODE LIST+$.,LIST+$FL0 + NODE LIST+$.,LIST+$FL1 + NODE LIST,LIST+$FL2 +$FL0=$$ + NODE SNUM+$.,2 + NODE SNUM+$.,$A + NODE SNUM,$B +$FL1=$$ + NODE SNUM+$.,10. + NODE SFUN+$.,$PRINT + NODE UVAR,UVAR+$A +$FL2=$$ + NODE SNUM+$.,20. + NODE SFUN+$.,$PRINT + NODE UVAR,UVAR+$B +$FSFB=$$ + NODE SNUM+$.,2 ;NO. ARGS + NODE SNUM+$.,0 ;PROCD SWAP NO. + NODE SNUM+$.,0 ;NO. NODES + NODE SNUM+$.,0 ;NO. FLUSHABLE NODES + NODE SNUM+$.,0 ;DISC ADDR 1 + NODE SNUM+$.,0 ; " " 2 + NODE SNUM+$.,0 ;# WORDS ON DISC +$OB3=$$ + NODE 0,$A ;START OF UOB BUCKET 16. +$OB4=$$ + NODE 0,$B ;START OF UOB BUCKET 17. +$OB5=$$ + NODE 0,$C ;START OF UOB BUCKET 18. +$A=$$ + NODE ATOM,LSTR+$. + NODE SSTR,'A +$B=$$ + NODE ATOM+$BVB,LSTR+$. + NODE SSTR,'B +$BVB=$$ + NODE VBIND,LSTR+$. + NODE SSTR+$.,"B. + NODE SSTR+$.,"HA + NODE SSTR+$.,"S. + NODE SSTR+$.,"LO + NODE SSTR,"TS +$C==$$ + NODE ATOM+$CVB,LSTR+$. + NODE SSTR,'C +$CVB==$$ + NODE VBIND,LNUM+$. + NODE SNUM,100. +L8=$$ ;MAKE "BLIP" 13 + NODE SFUN+$.,$MAKE + NODE LSTR+$.,LSTR+$BLIP + NODE LNUM,LNUM+$. + NODE SNUM,13 +L9=$$ ;PRINT : "BLIP" + NODE SFUN+$.,$PRINT + NODE SFUN+$.,$DOTS + NODE LSTR,LSTR+$BLIP +L10=$$ ;MAKE "BLIP" "XX" + NODE SFUN+$.,$MAKE + NODE LSTR+$.,LSTR+$BLIP + NODE LSTR,LSTR+$. + NODE SSTR,"XX +L11=$$ ;PRINT :"BLIP" + NODE SFUN+$.,$PRINT + NODE SFUN+$.,$DOTS + NODE LSTR,LSTR+$BLIP +L12=$$ ;MAKE "BLAP" "YY" + NODE SFUN+$.,$MAKE + NODE LSTR+$.,LSTR+$BLAP + NODE LSTR,LSTR+$. + NODE SSTR,"YY +L13==$$ ;PRINT :"BLAP" + NODE SFUN+$.,$PRINT + NODE SFUN+$.,$DOTS + NODE LSTR,LSTR+$BLAP +L14==$$ ;STARTDISPLAY + NODE SFUN,$START +L15==$$ ;FORWARD :C + NODE SFUN+$.,$FORWA + NODE UVAR,UVAR+$C +$BLAP==$$ ;"BLAP" + NODE SSTR+$.,"BL + NODE SSTR,"AP +$BLIP==$$ ;"BLIP" + NODE SSTR+$.,"BL + NODE SSTR,"IP + NNN=$$ ;NEXT NODE NO. +SOFN=NNN ;START OF FREE NODES +ASOFN=. +LOGEND=. + + +;IN THE EVENT THAT THE SYSTEM OBLIST +;HAS BEEN INCORRECTLY SET UP, AND THE MACRO TRIED TO WRITE OVER +;PARTS OF IT, THIS LITTLE .IFLE WILL PRINT OUT A MESSAGE + .IFLE OBX0 + ******** + YOU ARE OVERWRITING THE SYSTEM OBLIST + ******** + .XLIST + .ENDC + .END +  \ No newline at end of file diff --git a/PDP11/pdp11_11logo_rom.h b/PDP11/pdp11_11logo_rom.h new file mode 100644 index 00000000..300079d5 --- /dev/null +++ b/PDP11/pdp11_11logo_rom.h @@ -0,0 +1,1639 @@ +#ifndef ROM_logo_lda_H +#define ROM_logo_lda_H 0 +/* + PDP11/pdp11_11logo_rom.h produced at Sun Jan 27 20:17:09 2019 + from PDP11/11logo/11logo.lda which was last modified at Sun Jan 27 20:14:47 2019 + file size: 26009 (0x6599) - checksum: 0xFFDD77F7 + This file is a generated file and should NOT be edited or changed by hand. +*/ +#define BOOT_CODE_SIZE 0x6599 +#define BOOT_CODE_FILENAME "11logo.lda" +#define BOOT_CODE_ARRAY logo_lda +unsigned char logo_lda[] = { +0x01,0x00,0x06,0x01,0x00,0x00,0x02,0x00,0x04,0x00,0x06,0x00,0x04,0x00,0x0A,0x00, +0x04,0x00,0x0E,0x00,0x04,0x00,0x12,0x00,0x04,0x00,0x16,0x00,0x04,0x00,0x1A,0x00, +0x04,0x00,0x1E,0x00,0x04,0x00,0x22,0x00,0x04,0x00,0x26,0x00,0x04,0x00,0x2A,0x00, +0x04,0x00,0x2E,0x00,0x04,0x00,0x32,0x00,0x04,0x00,0x36,0x00,0x04,0x00,0x3A,0x00, +0x04,0x00,0x3E,0x00,0x04,0x00,0x42,0x00,0x04,0x00,0x46,0x00,0x04,0x00,0x4A,0x00, +0x04,0x00,0x4E,0x00,0x04,0x00,0x52,0x00,0x04,0x00,0x56,0x00,0x04,0x00,0x5A,0x00, +0x04,0x00,0x5E,0x00,0x04,0x00,0x62,0x00,0x04,0x00,0x66,0x00,0x04,0x00,0x6A,0x00, +0x04,0x00,0x6E,0x00,0x04,0x00,0x72,0x00,0x04,0x00,0x76,0x00,0x04,0x00,0x7A,0x00, +0x04,0x00,0x7E,0x00,0x04,0x00,0x82,0x00,0x04,0x00,0x86,0x00,0x04,0x00,0x8A,0x00, +0x04,0x00,0x8E,0x00,0x04,0x00,0x92,0x00,0x04,0x00,0x96,0x00,0x04,0x00,0x9A,0x00, +0x04,0x00,0x9E,0x00,0x04,0x00,0xA2,0x00,0x04,0x00,0xA6,0x00,0x04,0x00,0xAA,0x00, +0x04,0x00,0xAE,0x00,0x04,0x00,0xB2,0x00,0x04,0x00,0xB6,0x00,0x04,0x00,0xBA,0x00, +0x04,0x00,0xBE,0x00,0x04,0x00,0xC2,0x00,0x04,0x00,0xC6,0x00,0x04,0x00,0xCA,0x00, +0x04,0x00,0xCE,0x00,0x04,0x00,0xD2,0x00,0x04,0x00,0xD6,0x00,0x04,0x00,0xDA,0x00, +0x04,0x00,0xDE,0x00,0x04,0x00,0xE2,0x00,0x04,0x00,0xE6,0x00,0x04,0x00,0xEA,0x00, +0x04,0x00,0xEE,0x00,0x04,0x00,0xF2,0x00,0x04,0x00,0xF6,0x00,0x04,0x00,0xFA,0x00, +0x04,0x00,0xFE,0x00,0x04,0x00,0xF8,0x01,0x00,0x0A,0x00,0x1C,0x00,0xCE,0x37,0x00, +0x00,0xD4,0x01,0x00,0x0E,0x00,0x30,0x00,0x00,0x03,0x80,0x00,0x1A,0x03,0x80,0x00, +0xA1,0x01,0x00,0x0A,0x00,0x44,0x00,0x3A,0x13,0xC0,0x00,0xA4,0x01,0x00,0x0A,0x00, +0x84,0x00,0x8E,0x0F,0xC0,0x00,0x14,0x01,0x00,0x0A,0x00,0xB8,0x00,0x1C,0x03,0xA0, +0x00,0x7E,0x01,0x00,0x0E,0x00,0xC8,0x00,0x1E,0x03,0xA0,0x00,0x20,0x03,0xA0,0x00, +0xA5,0x01,0x00,0x0A,0x00,0x10,0x00,0x62,0x0D,0xE0,0x00,0x96,0x01,0x00,0x0A,0x00, +0x18,0x00,0xC8,0x37,0xE0,0x00,0xFE,0x01,0x00,0x0E,0x00,0xC0,0x00,0x02,0x19,0xA0, +0x00,0xA4,0x1A,0xA0,0x00,0x18,0x01,0x00,0x0A,0x00,0x00,0x01,0x77,0x00,0xF4,0x19, +0x70,0x01,0x00,0x08,0x00,0x44,0x01,0x44,0x01,0x6D,0x01,0x00,0x08,0x00,0xF8,0x01, +0xED,0x03,0x0E,0x01,0x00,0x2A,0x00,0x00,0x03,0xF7,0x1D,0x6E,0xFC,0x8C,0x04,0xF7, +0x45,0x80,0xFF,0x86,0x04,0xF7,0x2D,0x82,0x04,0xEE,0x01,0x02,0x02,0xF7,0x11,0x34, +0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x03,0x7B,0x01,0x00, +0x26,0x00,0x44,0x03,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x64,0x03,0x29,0x01,0x00,0x08,0x00,0x88,0x04,0x00,0x00,0x6B,0x01,0x00, +0x77,0x00,0x9E,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, +0x01,0x00,0x02,0x00,0x70,0x03,0x00,0x00,0x8C,0x03,0x00,0x00,0xA8,0x03,0x00,0x00, +0xC4,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20, +0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0xC0, +0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xFF,0xFF, +0xFF,0xFF,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0xFF,0xFF,0xFF, +0xFF,0xFF,0x01,0x02,0x04,0x6A,0x01,0x00,0x44,0x00,0x10,0x05,0x50,0x00,0x80,0x00, +0xB0,0x00,0x58,0x6A,0x68,0x6A,0x78,0x6A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x07,0x4A,0x07,0x4C,0x07,0x4E,0x07,0x50,0x07, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x01,0x00,0x8E,0x00,0x16, +0x07,0x96,0x09,0x08,0x04,0x84,0x02,0x08,0x04,0xB4,0x02,0x0A,0x03,0x08,0x04,0x08, +0x04,0x84,0x02,0x30,0x01,0x86,0x01,0x84,0x02,0x84,0x02,0x0C,0x04,0x92,0x04,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00, +0x00,0xE3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC4,0x20,0x48,0x01,0x00,0x32,0x00,0xBE,0x07, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x00,0x0C, +0x00,0x1A,0x08,0xB4,0x08,0x00,0x01,0xD4,0x08,0x38,0x01,0x00,0x0E,0x00,0xD4,0x08, +0x00,0x00,0x00,0x00,0x41,0x4E,0x44,0x00,0x42,0x01,0x00,0x08,0x00,0x20,0x08,0xDC, +0x08,0xEB,0x01,0x00,0x0F,0x00,0xDC,0x08,0x02,0x41,0x8A,0x5B,0x42,0x41,0x43,0x4B, +0x00,0xD3,0x01,0x00,0x08,0x00,0x22,0x08,0xE6,0x08,0xDF,0x01,0x00,0x13,0x00,0xE6, +0x08,0x00,0x41,0x1A,0x45,0x42,0x55,0x54,0x46,0x49,0x52,0x53,0x54,0x00,0xEB,0x01, +0x00,0x08,0x00,0x24,0x08,0xF4,0x08,0xCF,0x01,0x00,0x12,0x00,0xF4,0x08,0x00,0x41, +0x80,0x45,0x42,0x55,0x54,0x4C,0x41,0x53,0x54,0x00,0xCC,0x01,0x00,0x08,0x00,0x26, +0x08,0x00,0x09,0xC0,0x01,0x00,0x10,0x00,0x00,0x09,0x00,0x41,0xC8,0x45,0x43,0x4F, +0x55,0x4E,0x54,0x00,0x0F,0x01,0x00,0x08,0x00,0x28,0x08,0x0A,0x09,0xB4,0x01,0x00, +0x0E,0x00,0x0A,0x09,0x00,0x40,0x0C,0x3D,0x43,0x54,0x46,0x00,0x78,0x01,0x00,0x08, +0x00,0x2A,0x08,0x12,0x09,0xAA,0x01,0x00,0x15,0x00,0x12,0x09,0x02,0x42,0x1A,0x48, +0x44,0x49,0x46,0x46,0x45,0x52,0x45,0x4E,0x43,0x45,0x00,0x5E,0x01,0x00,0x08,0x00, +0x2C,0x08,0x22,0x09,0x98,0x01,0x00,0x12,0x00,0x22,0x09,0x18,0x41,0xA8,0x60,0x44, +0x49,0x53,0x50,0x4C,0x41,0x59,0x00,0x4B,0x01,0x00,0x08,0x00,0x2E,0x08,0x2E,0x09, +0x8A,0x01,0x00,0x0D,0x00,0x2E,0x09,0x00,0x41,0x48,0x47,0x44,0x4F,0x00,0x58,0x01, +0x00,0x08,0x00,0x30,0x08,0x36,0x09,0x80,0x01,0x00,0x0F,0x00,0x36,0x09,0x00,0x40, +0x9E,0x54,0x45,0x44,0x49,0x54,0x00,0x59,0x01,0x00,0x08,0x00,0x32,0x08,0x40,0x09, +0x74,0x01,0x00,0x0F,0x00,0x40,0x09,0x00,0x40,0x2E,0x4A,0x45,0x4C,0x53,0x45,0x00, +0xC6,0x01,0x00,0x08,0x00,0x34,0x08,0x4A,0x09,0x68,0x01,0x00,0x11,0x00,0x4A,0x09, +0x00,0x41,0xC8,0x49,0x45,0x4D,0x50,0x54,0x59,0x50,0x00,0x6A,0x01,0x00,0x08,0x00, +0x36,0x08,0x56,0x09,0x5A,0x01,0x00,0x0E,0x00,0x56,0x09,0x00,0x40,0x08,0x56,0x45, +0x4E,0x44,0x00,0x1D,0x01,0x00,0x08,0x00,0x38,0x08,0x5E,0x09,0x50,0x01,0x00,0x10, +0x00,0x5E,0x09,0x02,0x42,0x6E,0x48,0x45,0x51,0x55,0x41,0x4C,0x00,0x16,0x01,0x00, +0x08,0x00,0x3A,0x08,0x68,0x09,0x44,0x01,0x00,0x15,0x00,0x68,0x09,0x00,0x41,0xCA, +0x3C,0x45,0x52,0x41,0x53,0x45,0x54,0x52,0x41,0x43,0x45,0x00,0x53,0x01,0x00,0x08, +0x00,0x3C,0x08,0x78,0x09,0x32,0x01,0x00,0x10,0x00,0x78,0x09,0x00,0x41,0xF0,0x44, +0x46,0x49,0x52,0x53,0x54,0x00,0x71,0x01,0x00,0x08,0x00,0x3E,0x08,0x82,0x09,0x26, +0x01,0x00,0x12,0x00,0x82,0x09,0x02,0x41,0x72,0x5B,0x46,0x4F,0x52,0x57,0x41,0x52, +0x44,0x00,0x3D,0x01,0x00,0x08,0x00,0x40,0x08,0x8E,0x09,0x18,0x01,0x00,0x11,0x00, +0x8E,0x09,0x00,0x45,0xA2,0x47,0x46,0x50,0x52,0x49,0x4E,0x54,0x00,0x56,0x01,0x00, +0x08,0x00,0x42,0x08,0x9A,0x09,0x0A,0x01,0x00,0x0F,0x00,0x9A,0x09,0x00,0x46,0x2E, +0x44,0x46,0x50,0x55,0x54,0x00,0x56,0x01,0x00,0x08,0x00,0x44,0x08,0xA4,0x09,0xFE, +0x01,0x00,0x0D,0x00,0xA4,0x09,0x02,0x41,0xA4,0x55,0x47,0x4F,0x00,0x73,0x01,0x00, +0x08,0x00,0x46,0x08,0xAC,0x09,0xF4,0x01,0x00,0x12,0x00,0xAC,0x09,0x02,0x42,0x76, +0x49,0x47,0x52,0x45,0x41,0x54,0x45,0x52,0x00,0x2B,0x01,0x00,0x08,0x00,0x48,0x08, +0xB8,0x09,0xE6,0x01,0x00,0x12,0x00,0xB8,0x09,0x00,0x40,0xCC,0x5F,0x48,0x45,0x41, +0x44,0x49,0x4E,0x47,0x00,0xD1,0x01,0x00,0x08,0x00,0x4A,0x08,0xC4,0x09,0xD8,0x01, +0x00,0x0F,0x00,0xC4,0x09,0x00,0x40,0x88,0x5F,0x48,0x45,0x52,0x45,0x00,0xD8,0x01, +0x00,0x08,0x00,0x4C,0x08,0xCE,0x09,0xCC,0x01,0x00,0x15,0x00,0xCE,0x09,0x00,0x40, +0xD4,0x5F,0x48,0x49,0x44,0x45,0x54,0x55,0x52,0x54,0x4C,0x45,0x00,0xA6,0x01,0x00, +0x08,0x00,0x4E,0x08,0xDE,0x09,0xBA,0x01,0x00,0x0F,0x00,0xDE,0x09,0x00,0x40,0xA2, +0x5F,0x48,0x4F,0x4D,0x45,0x00,0x9F,0x01,0x00,0x08,0x00,0x50,0x08,0xE8,0x09,0xAE, +0x01,0x00,0x0D,0x00,0xE8,0x09,0x01,0x41,0x00,0x4A,0x49,0x46,0x00,0xE6,0x01,0x00, +0x08,0x00,0x52,0x08,0xF0,0x09,0xA4,0x01,0x00,0x16,0x00,0xF0,0x09,0x00,0x40,0xBC, +0x5D,0x4B,0x49,0x4C,0x4C,0x44,0x49,0x53,0x50,0x4C,0x41,0x59,0x00,0x55,0x01,0x00, +0x08,0x00,0x54,0x08,0x00,0x0A,0x91,0x01,0x00,0x12,0x00,0x00,0x0A,0x00,0x40,0x0C, +0x5C,0x4C,0x41,0x4D,0x50,0x4F,0x46,0x46,0x00,0x36,0x01,0x00,0x08,0x00,0x56,0x08, +0x0C,0x0A,0x83,0x01,0x00,0x11,0x00,0x0C,0x0A,0x00,0x40,0xFA,0x5B,0x4C,0x41,0x4D, +0x50,0x4F,0x4E,0x00,0x7C,0x01,0x00,0x08,0x00,0x58,0x08,0x18,0x0A,0x75,0x01,0x00, +0x0F,0x00,0x18,0x0A,0x00,0x41,0x56,0x45,0x4C,0x41,0x53,0x54,0x00,0xBE,0x01,0x00, +0x08,0x00,0x5A,0x08,0x22,0x0A,0x69,0x01,0x00,0x0F,0x00,0x22,0x0A,0x02,0x41,0xBA, +0x5B,0x4C,0x45,0x46,0x54,0x00,0x41,0x01,0x00,0x08,0x00,0x5C,0x08,0x2C,0x0A,0x5D, +0x01,0x00,0x0F,0x00,0x2C,0x0A,0x02,0x42,0x8C,0x49,0x4C,0x45,0x53,0x53,0x00,0x6A, +0x01,0x00,0x08,0x00,0x5E,0x08,0x36,0x0A,0x51,0x01,0x00,0x10,0x00,0x36,0x0A,0x00, +0x40,0x16,0x3D,0x4C,0x45,0x56,0x45,0x4C,0x00,0xA4,0x01,0x00,0x08,0x00,0x60,0x08, +0x40,0x0A,0x45,0x01,0x00,0x0F,0x00,0x40,0x0A,0x00,0x46,0xFE,0x43,0x4C,0x49,0x53, +0x54,0x00,0xE3,0x01,0x00,0x08,0x00,0x62,0x08,0x4A,0x0A,0x39,0x01,0x00,0x10,0x00, +0x4A,0x0A,0x00,0x41,0xD8,0x49,0x4C,0x49,0x53,0x54,0x50,0x00,0xAD,0x01,0x00,0x08, +0x00,0x64,0x08,0x54,0x0A,0x2D,0x01,0x00,0x0F,0x00,0x54,0x0A,0x00,0x46,0x32,0x44, +0x4C,0x50,0x55,0x54,0x00,0x91,0x01,0x00,0x08,0x00,0x66,0x08,0x5E,0x0A,0x21,0x01, +0x00,0x0F,0x00,0x5E,0x0A,0x00,0x42,0x86,0x46,0x4D,0x41,0x4B,0x45,0x00,0x5C,0x01, +0x00,0x08,0x00,0x68,0x08,0x68,0x0A,0x15,0x01,0x00,0x0E,0x00,0x68,0x0A,0x02,0x42, +0x4C,0x48,0x4D,0x4F,0x44,0x00,0xC7,0x01,0x00,0x08,0x00,0x6A,0x08,0x70,0x0A,0x0B, +0x01,0x00,0x12,0x00,0x70,0x0A,0x00,0x40,0x82,0x60,0x4E,0x45,0x57,0x53,0x4E,0x41, +0x50,0x00,0x35,0x01,0x00,0x08,0x00,0x6C,0x08,0x7C,0x0A,0xFD,0x01,0x00,0x12,0x00, +0x7C,0x0A,0x00,0x41,0xB4,0x49,0x4E,0x55,0x4D,0x42,0x45,0x52,0x50,0x00,0x10,0x01, +0x00,0x08,0x00,0x6E,0x08,0x88,0x0A,0xEF,0x01,0x00,0x0D,0x00,0x88,0x0A,0x00,0x00, +0x00,0x00,0x4F,0x46,0x00,0xCB,0x01,0x00,0x08,0x00,0x70,0x08,0x90,0x0A,0xE5,0x01, +0x00,0x11,0x00,0x90,0x0A,0x00,0x41,0xB0,0x52,0x4F,0x55,0x54,0x50,0x55,0x54,0x00, +0x20,0x01,0x00,0x08,0x00,0x72,0x08,0x9C,0x0A,0xD7,0x01,0x00,0x12,0x00,0x9C,0x0A, +0x00,0x40,0xE6,0x5B,0x50,0x45,0x4E,0x44,0x4F,0x57,0x4E,0x00,0xAB,0x01,0x00,0x08, +0x00,0x74,0x08,0xA8,0x0A,0xC9,0x01,0x00,0x10,0x00,0xA8,0x0A,0x00,0x40,0xD2,0x5B, +0x50,0x45,0x4E,0x55,0x50,0x00,0x48,0x01,0x00,0x08,0x00,0x76,0x08,0xB2,0x0A,0xBD, +0x01,0x00,0x10,0x00,0xB2,0x0A,0x17,0x45,0x9E,0x47,0x50,0x52,0x49,0x4E,0x54,0x00, +0x65,0x01,0x00,0x08,0x00,0x78,0x08,0xBC,0x0A,0xB1,0x01,0x00,0x12,0x00,0xBC,0x0A, +0x02,0x46,0x26,0x48,0x50,0x52,0x4F,0x44,0x55,0x43,0x54,0x00,0x50,0x01,0x00,0x08, +0x00,0x7A,0x08,0xC8,0x0A,0xA3,0x01,0x00,0x13,0x00,0xC8,0x0A,0x02,0x42,0x50,0x48, +0x51,0x55,0x4F,0x54,0x49,0x45,0x4E,0x54,0x00,0xC5,0x01,0x00,0x08,0x00,0x7C,0x08, +0xD6,0x0A,0x93,0x01,0x00,0x12,0x00,0xD6,0x0A,0x00,0x40,0x3A,0x1F,0x52,0x45,0x51, +0x55,0x45,0x53,0x54,0x00,0x4B,0x01,0x00,0x08,0x00,0x7E,0x08,0xE2,0x0A,0x85,0x01, +0x00,0x10,0x00,0xE2,0x0A,0x02,0x41,0xA2,0x5B,0x52,0x49,0x47,0x48,0x54,0x00,0x45, +0x01,0x00,0x08,0x00,0x80,0x08,0xEC,0x0A,0x79,0x01,0x00,0x0E,0x00,0xEC,0x0A,0x00, +0x00,0x78,0x1D,0x52,0x55,0x47,0x00,0x78,0x01,0x00,0x08,0x00,0x82,0x08,0xF4,0x0A, +0x6F,0x01,0x00,0x13,0x00,0xF4,0x0A,0x00,0x46,0x9A,0x43,0x53,0x45,0x4E,0x54,0x45, +0x4E,0x43,0x45,0x00,0x76,0x01,0x00,0x08,0x00,0x84,0x08,0x02,0x0B,0x5E,0x01,0x00, +0x15,0x00,0x02,0x0B,0x02,0x41,0x82,0x5F,0x53,0x45,0x54,0x48,0x45,0x41,0x44,0x49, +0x4E,0x47,0x00,0xDD,0x01,0x00,0x08,0x00,0x86,0x08,0x12,0x0B,0x4C,0x01,0x00,0x14, +0x00,0x12,0x0B,0x04,0x41,0xAC,0x5E,0x53,0x45,0x54,0x54,0x55,0x52,0x54,0x4C,0x45, +0x00,0xB3,0x01,0x00,0x08,0x00,0x88,0x08,0x20,0x0B,0x3C,0x01,0x00,0x0F,0x00,0x20, +0x0B,0x02,0x41,0x5C,0x5E,0x53,0x45,0x54,0x58,0x00,0x84,0x01,0x00,0x08,0x00,0x8A, +0x08,0x2A,0x0B,0x30,0x01,0x00,0x10,0x00,0x2A,0x0B,0x02,0x42,0x88,0x5E,0x53,0x45, +0x54,0x58,0x59,0x00,0xF3,0x01,0x00,0x08,0x00,0x8C,0x08,0x34,0x0B,0x24,0x01,0x00, +0x0F,0x00,0x34,0x0B,0x02,0x41,0x72,0x5E,0x53,0x45,0x54,0x59,0x00,0x59,0x01,0x00, +0x08,0x00,0x8E,0x08,0x3E,0x0B,0x18,0x01,0x00,0x0F,0x00,0x3E,0x0B,0x00,0x41,0xC8, +0x3B,0x53,0x48,0x4F,0x57,0x00,0x22,0x01,0x00,0x08,0x00,0x90,0x08,0x48,0x0B,0x0C, +0x01,0x00,0x15,0x00,0x48,0x0B,0x00,0x40,0xEA,0x5F,0x53,0x48,0x4F,0x57,0x54,0x55, +0x52,0x54,0x4C,0x45,0x00,0xED,0x01,0x00,0x08,0x00,0x92,0x08,0x58,0x0B,0xFA,0x01, +0x00,0x0F,0x00,0x58,0x0B,0x00,0x40,0x1A,0x60,0x53,0x4E,0x41,0x50,0x00,0xA1,0x01, +0x00,0x08,0x00,0x94,0x08,0x62,0x0B,0xEE,0x01,0x00,0x17,0x00,0x62,0x0B,0x00,0x40, +0x1C,0x5D,0x53,0x54,0x41,0x52,0x54,0x44,0x49,0x53,0x50,0x4C,0x41,0x59,0x00,0x1E, +0x01,0x00,0x08,0x00,0x96,0x08,0x74,0x0B,0xDA,0x01,0x00,0x0E,0x00,0x74,0x0B,0x00, +0x40,0x02,0x3D,0x53,0x54,0x46,0x00,0x06,0x01,0x00,0x08,0x00,0x98,0x08,0x7C,0x0B, +0xD0,0x01,0x00,0x0F,0x00,0x7C,0x0B,0x00,0x40,0xC8,0x52,0x53,0x54,0x4F,0x50,0x00, +0xC9,0x01,0x00,0x08,0x00,0x9A,0x08,0x86,0x0B,0xC4,0x01,0x00,0x0E,0x00,0x86,0x0B, +0x02,0x46,0x04,0x48,0x53,0x55,0x4D,0x00,0xD7,0x01,0x00,0x08,0x00,0x9C,0x08,0x8E, +0x0B,0xBA,0x01,0x00,0x0F,0x00,0x8E,0x0B,0x00,0x40,0x22,0x4A,0x54,0x48,0x45,0x4E, +0x00,0x7C,0x01,0x00,0x08,0x00,0x9E,0x08,0x98,0x0B,0xAE,0x01,0x00,0x0D,0x00,0x98, +0x0B,0x00,0x40,0xA6,0x54,0x54,0x4F,0x00,0x72,0x01,0x00,0x08,0x00,0xA0,0x08,0xA0, +0x0B,0xA4,0x01,0x00,0x0F,0x00,0xA0,0x0B,0x02,0x41,0x1E,0x5C,0x54,0x4F,0x4F,0x54, +0x00,0x42,0x01,0x00,0x08,0x00,0xA2,0x08,0xAA,0x0B,0x98,0x01,0x00,0x10,0x00,0xAA, +0x0B,0x00,0x41,0xD2,0x3C,0x54,0x52,0x41,0x43,0x45,0x00,0x7C,0x01,0x00,0x08,0x00, +0xA4,0x08,0xB4,0x0B,0x8C,0x01,0x00,0x0F,0x00,0xB4,0x0B,0x17,0x45,0xB8,0x47,0x54, +0x59,0x50,0x45,0x00,0x94,0x01,0x00,0x08,0x00,0xA6,0x08,0xBE,0x0B,0x80,0x01,0x00, +0x12,0x00,0xBE,0x0B,0x00,0x40,0x1E,0x3D,0x56,0x45,0x52,0x53,0x49,0x4F,0x4E,0x00, +0x63,0x01,0x00,0x08,0x00,0xA8,0x08,0xCA,0x0B,0x72,0x01,0x00,0x0F,0x00,0xCA,0x0B, +0x03,0x41,0x08,0x61,0x57,0x49,0x50,0x45,0x00,0x39,0x01,0x00,0x08,0x00,0xAA,0x08, +0xD4,0x0B,0x66,0x01,0x00,0x14,0x00,0xD4,0x0B,0x00,0x40,0x44,0x61,0x57,0x49,0x50, +0x45,0x43,0x4C,0x45,0x41,0x4E,0x00,0x8F,0x01,0x00,0x08,0x00,0xAC,0x08,0xE2,0x0B, +0x56,0x01,0x00,0x0F,0x00,0xE2,0x0B,0x00,0x46,0x90,0x44,0x57,0x4F,0x52,0x44,0x00, +0xAD,0x01,0x00,0x08,0x00,0xAE,0x08,0xEC,0x0B,0x4A,0x01,0x00,0x10,0x00,0xEC,0x0B, +0x00,0x41,0xEC,0x49,0x57,0x4F,0x52,0x44,0x50,0x00,0xF6,0x01,0x00,0x08,0x00,0xB0, +0x08,0xF6,0x0B,0x3E,0x01,0x00,0x0F,0x00,0xF6,0x0B,0x00,0x40,0xBE,0x5F,0x58,0x43, +0x4F,0x52,0x00,0x56,0x01,0x00,0x08,0x00,0xB2,0x08,0x00,0x0C,0x31,0x01,0x00,0x0F, +0x00,0x00,0x0C,0x00,0x40,0xC4,0x5F,0x59,0x43,0x4F,0x52,0x00,0x44,0x01,0x00,0x08, +0x00,0xB4,0x08,0x0A,0x0C,0x25,0x01,0x00,0x0C,0x00,0x0A,0x0C,0x00,0x21,0x14,0x50, +0x21,0x00,0x37,0x01,0x00,0x08,0x00,0xB6,0x08,0x10,0x0C,0x1D,0x01,0x00,0x0C,0x00, +0x10,0x0C,0x01,0xC1,0x66,0x4F,0x23,0x00,0x3D,0x01,0x00,0x08,0x00,0xB8,0x08,0x16, +0x0C,0x15,0x01,0x00,0x0C,0x00,0x16,0x0C,0x00,0x21,0xE2,0x47,0x28,0x00,0x5F,0x01, +0x00,0x08,0x00,0xBA,0x08,0x1C,0x0C,0x0D,0x01,0x00,0x0C,0x00,0x1C,0x0C,0x00,0x20, +0xF4,0x47,0x29,0x00,0x47,0x01,0x00,0x08,0x00,0xBC,0x08,0x22,0x0C,0x05,0x01,0x00, +0x0C,0x00,0x22,0x0C,0x02,0xB6,0x26,0x48,0x2A,0x00,0x75,0x01,0x00,0x08,0x00,0xBE, +0x08,0x28,0x0C,0xFD,0x01,0x00,0x0C,0x00,0x28,0x0C,0x02,0x96,0x04,0x48,0x2B,0x00, +0xB0,0x01,0x00,0x08,0x00,0xC0,0x08,0x2E,0x0C,0xF5,0x01,0x00,0x0D,0x00,0x2E,0x0C, +0x02,0xC1,0xF6,0x47,0x2B,0x2E,0x00,0x5F,0x01,0x00,0x08,0x00,0xC2,0x08,0x36,0x0C, +0xEB,0x01,0x00,0x0C,0x00,0x36,0x0C,0x02,0x92,0x1A,0x48,0x2D,0x00,0x8E,0x01,0x00, +0x08,0x00,0xC4,0x08,0x3C,0x0C,0xE3,0x01,0x00,0x0D,0x00,0x3C,0x0C,0x02,0xC1,0xFA, +0x47,0x2D,0x2E,0x00,0x4B,0x01,0x00,0x08,0x00,0xC6,0x08,0x44,0x0C,0xD9,0x01,0x00, +0x0C,0x00,0x44,0x0C,0x02,0xB2,0x50,0x48,0x2F,0x00,0x28,0x01,0x00,0x08,0x00,0xC8, +0x08,0x4A,0x0C,0xD1,0x01,0x00,0x0C,0x00,0x4A,0x0C,0x01,0xC1,0x02,0x47,0x3A,0x00, +0x58,0x01,0x00,0x08,0x00,0xCA,0x08,0x50,0x0C,0xC9,0x01,0x00,0x0C,0x00,0x50,0x0C, +0x02,0x72,0x8C,0x49,0x3C,0x00,0x12,0x01,0x00,0x08,0x00,0xCC,0x08,0x56,0x0C,0xC1, +0x01,0x00,0x0C,0x00,0x56,0x0C,0x02,0x72,0x6E,0x48,0x3D,0x00,0x2A,0x01,0x00,0x08, +0x00,0xCE,0x08,0x5C,0x0C,0xB9,0x01,0x00,0x5D,0x01,0x5C,0x0C,0x02,0x72,0x76,0x49, +0x3E,0x00,0x20,0x20,0x60,0xA0,0xA0,0x20,0x20,0xE0,0x60,0x66,0x66,0x66,0x66,0xE6, +0xA0,0x20,0x20,0xA0,0xA0,0xA0,0x20,0x20,0x20,0xA0,0xA0,0xA0,0xA0,0x20,0x20,0x20, +0x20,0x20,0x26,0x20,0x24,0x2C,0x20,0x20,0x20,0x28,0x2C,0x2C,0x2C,0x2C,0x20,0x2C, +0x20,0x2C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x24,0x2C,0x2C, +0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x20,0x36, +0x2C,0x24,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0xA0,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x04,0x02,0x08,0x0A,0x0C,0x0E,0x06, +0x08,0x00,0x00,0x0A,0x0C,0x0E,0x00,0x00,0x00,0x10,0x12,0x14,0x16,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x03,0x04,0x05,0x06,0x00,0x08, +0x00,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x00,0x0C,0x0D, +0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, +0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x18,0x97,0x0A,0xFC,0xFF,0x3C,0x06,0x26,0x10,0xE6,0x1D,0xDA,0xF5,0xF7,0x15, +0xFF,0xFF,0xD4,0xF5,0xF7,0x09,0x22,0x07,0xF7,0x09,0x82,0x2A,0x42,0x41,0x44,0x20, +0x54,0x52,0x41,0x50,0x2D,0x2D,0x56,0x45,0x43,0x54,0x4F,0x52,0x20,0x00,0x80,0x1D, +0x06,0x00,0xC0,0xE5,0x04,0x00,0xC0,0x25,0x04,0x00,0x19,0x03,0xF7,0x09,0xE6,0x2A, +0xF7,0x09,0x5A,0x2A,0x20,0x54,0x52,0x41,0x50,0x50,0x45,0x44,0x20,0x46,0x52,0x4F, +0x4D,0x20,0x00,0xDF,0x01,0x00,0x64,0x01,0xB4,0x0D,0x80,0x1D,0x0A,0x00,0xF7,0x09, +0xCA,0x2A,0xF7,0x09,0xDA,0x06,0xB7,0x15,0x84,0xF5,0x80,0x15,0xC6,0x65,0x04,0x00, +0x02,0x00,0x00,0x00,0xF7,0x09,0x2C,0x2A,0x42,0x55,0x53,0x53,0x20,0x45,0x52,0x52, +0x4F,0x52,0x21,0x21,0x21,0x00,0xF7,0x09,0x1A,0x2A,0x49,0x20,0x47,0x49,0x56,0x45, +0x20,0x55,0x50,0x21,0x21,0x00,0x00,0x00,0xFE,0x01,0xC0,0x15,0x1A,0x18,0xF0,0x0B, +0x0C,0x00,0x10,0x02,0xC0,0x15,0xFC,0x03,0xF0,0x8B,0x0C,0x00,0x0B,0x02,0xC0,0x65, +0x0E,0x00,0xC0,0x25,0x88,0x04,0xF8,0x06,0xC0,0x1D,0x4E,0xF5,0x03,0x02,0x37,0x0A, +0x14,0xF1,0x87,0x00,0x37,0x10,0x66,0xF6,0x01,0x12,0x01,0x03,0xC9,0x09,0xD0,0x0B, +0xC1,0x15,0x32,0xFF,0x11,0x14,0x09,0x14,0xD1,0x65,0x02,0x00,0x11,0x14,0x11,0x14, +0xD0,0x0B,0x37,0x92,0xF0,0xF0,0x87,0x00,0xE6,0x1D,0xB8,0xF1,0xF7,0x15,0xE0,0x00, +0xB2,0xF1,0xF7,0x25,0x80,0x00,0xDE,0xF0,0x06,0x02,0x26,0x10,0x66,0x10,0xF7,0x09, +0x98,0xFF,0x81,0x15,0x80,0x15,0xB7,0x15,0x9A,0xF1,0x87,0x00,0xE6,0x1D,0x94,0xF1, +0xF7,0x15,0xE0,0x00,0x8E,0xF1,0xC0,0x15,0xFC,0x03,0xF0,0x0B,0x0C,0x00,0x09,0x03, +0xC0,0x65,0x0E,0x00,0xC0,0x25,0x88,0x04,0xF8,0x06,0xB7,0x15,0x76,0xF1,0x01,0x00, +0xED,0x01,0xF0,0x1D,0x36,0xF6,0x0C,0x00,0xB7,0x8A,0x31,0xF6,0xB7,0x15,0x64,0xF1, +0x87,0x00,0xC0,0x65,0x0C,0x00,0xC5,0x1D,0xA4,0xF4,0x01,0x12,0x48,0x20,0x03,0x03, +0xF7,0x09,0x12,0x01,0x87,0x00,0xF5,0x15,0x03,0x00,0x36,0x05,0xF7,0x09,0xE0,0x02, +0xF5,0x01,0xC0,0x15,0x9E,0x07,0xC1,0x15,0xBC,0x07,0xC3,0x15,0x5E,0x05,0xC3,0x6D, +0x7C,0xF4,0xC4,0x15,0xBC,0x07,0x05,0x0A,0xF7,0x35,0x00,0x02,0xB4,0xF8,0x01,0x03, +0x85,0x0A,0xF7,0x09,0x28,0x00,0x87,0x00,0xC5,0x0B,0x03,0x03,0xF7,0x55,0x00,0x02, +0xA0,0xF8,0x77,0x00,0x9A,0x41,0xC4,0x15,0x9E,0x07,0xC1,0x1D,0x50,0xF4,0x43,0x1C, +0x62,0x05,0xF7,0x09,0x66,0x00,0xF7,0x45,0x00,0x02,0x86,0xF8,0x87,0x00,0x02,0x0A, +0xC4,0x15,0x01,0x00,0x08,0x31,0x0B,0x03,0xAB,0x01,0x00,0x62,0x01,0x12,0x0F,0x82, +0x0A,0xC4,0x0C,0xFB,0x86,0xD0,0x0B,0x01,0x20,0xF6,0x07,0xC5,0x0B,0x01,0x03,0x87, +0x00,0x85,0x0A,0x02,0x01,0x08,0x51,0x05,0x0A,0xF7,0x09,0x36,0xFF,0xF0,0x15,0x80, +0xFF,0x02,0x00,0xF0,0x12,0x06,0x00,0xF0,0x1C,0x02,0x00,0x08,0x00,0xE6,0x12,0xE6, +0x1C,0x02,0x00,0xC2,0x00,0x82,0x0C,0xC2,0x45,0x00,0x80,0xF3,0x1C,0x06,0x00,0x02, +0x00,0xC2,0x6C,0x04,0x00,0x73,0x0B,0x02,0x00,0x8B,0x10,0x82,0x15,0x81,0x15,0x77, +0x00,0x24,0x41,0xC2,0xE0,0xC1,0x15,0x01,0x00,0xC2,0x35,0x7F,0x00,0x01,0x03,0x00, +0x00,0xC2,0x35,0xFF,0x07,0x04,0x03,0xC2,0xE5,0x80,0x00,0xC1,0x0C,0xF9,0x01,0xC2, +0x00,0x82,0x0C,0x82,0x0C,0x84,0x60,0x4C,0x40,0x87,0x00,0x26,0x10,0x66,0x10,0xF7, +0x35,0x00,0x80,0x98,0xEF,0x0D,0x02,0xC0,0x1D,0xEA,0xF4,0x30,0x0A,0x0C,0x00,0x01, +0x12,0x01,0x03,0xC9,0x09,0x08,0x0A,0xF7,0x09,0x46,0xFE,0x81,0x15,0x80,0x15,0x02, +0x00,0x00,0x00,0xF7,0x15,0x00,0x01,0x74,0xEF,0x00,0x00,0xF5,0x01,0xF7,0x0B,0x84, +0xF3,0x01,0x04,0x87,0x00,0xF5,0x0B,0x38,0x05,0xFC,0x03,0xF7,0x15,0xFF,0xFF,0x74, +0xF3,0xF7,0x09,0x46,0x04,0x35,0x0A,0x38,0x05,0x35,0x0A,0x36,0x05,0xB7,0x0A,0x74, +0xF3,0xB5,0x15,0x48,0x05,0xC0,0x15,0x8A,0x04,0x50,0x21,0x2E,0x02,0xC8,0x0B,0x15, +0x05,0x2B,0x03,0xF5,0x25,0x07,0x00,0x36,0x05,0x0C,0x02,0xF5,0x15,0x28,0x1D,0x38, +0x05,0xF7,0x0B,0xF6,0xF4,0x13,0x02,0x02,0x1C,0x22,0x00,0xC3,0x15,0x0E,0x00,0x77, +0x00,0xEE,0x00,0x35,0x0A,0x36,0x05,0x77,0x00,0x48,0x02,0xF7,0xE5,0x30,0x00,0x26, +0xF3,0x03,0x04,0xF7,0x15,0xB0,0x01,0x1E,0xF3,0xC5,0x1D,0x1A,0xF3,0xF5,0x25,0x08, +0x00,0x36,0x05,0xF3,0x03,0xF5,0x0B,0x38,0x05,0xD5,0x03,0xEF,0x05,0x77,0x11,0x04, +0xF3,0xF7,0x09,0xEC,0x03,0x7D,0x00,0x38,0x05,0xD0,0x0B,0xCE,0x02,0xC0,0x1D,0x0A, +0xF3,0x19,0x06,0xC0,0x15,0x8A,0x04,0xD0,0x0B,0xD0,0x0B,0xFD,0x05,0xDE,0x03,0xF0, +0x25,0x01,0x00,0xFE,0xFF,0xF8,0x03,0x01,0x1C,0xFE,0xFF,0x7A,0x01,0x00,0x47,0x00, +0x6E,0x10,0x77,0x20,0x86,0xF4,0xF3,0x03,0x77,0x20,0x82,0xF4,0xF0,0x03,0xF7,0x0B, +0xDC,0xF2,0x04,0x03,0xD7,0x2D,0xD8,0xF2,0x01,0x00,0xCB,0x03,0x37,0x0A,0xD2,0xF2, +0xE0,0x0B,0x01,0x1C,0xFE,0xFF,0x70,0x11,0xFE,0xFF,0xF7,0x35,0x02,0x00,0x5A,0xF4, +0x23,0x03,0x26,0x10,0xF7,0x09,0x5A,0x27,0x53,0x57,0x41,0x50,0x50,0x49,0x4E,0x47, +0x3A,0x20,0x00,0x1B,0x01,0x00,0x64,0x01,0xB0,0x10,0x40,0x10,0xF7,0x09,0xD0,0x27, +0xF7,0x09,0xD8,0x03,0x40,0x11,0xF7,0x09,0xC6,0x27,0xF7,0x09,0xCE,0x03,0x80,0x13, +0xC0,0xE5,0x8C,0x04,0x80,0x0C,0x80,0x0C,0xF7,0x09,0xB4,0x27,0xF7,0x09,0xBC,0x03, +0xC0,0x1D,0x76,0xF2,0xF7,0x09,0xA8,0x27,0xF7,0x09,0xB8,0x03,0x80,0x15,0x03,0x0A, +0x02,0x1C,0x22,0x00,0xD2,0x15,0xBE,0x13,0xD2,0x1D,0xD0,0xF3,0x12,0x1C,0x24,0x00, +0x52,0x1C,0x4E,0x05,0x52,0x1C,0x50,0x05,0xD2,0x0B,0xD2,0x15,0x43,0x00,0xF7,0x0A, +0x54,0xF2,0xB7,0x0A,0x4E,0xF2,0xD2,0x15,0xD2,0x13,0xD2,0x1D,0xAE,0xF3,0x12,0x1C, +0x24,0x00,0xF5,0x25,0x07,0x00,0x36,0x05,0x0E,0x02,0xD2,0x1D,0xA8,0xF3,0xD2,0x1D, +0xA6,0xF3,0xF5,0x15,0x28,0x1D,0x38,0x05,0x75,0x1D,0x62,0x05,0x5E,0x05,0x75,0x1D, +0x64,0x05,0x60,0x05,0x04,0x01,0x52,0x1D,0x4E,0x05,0x52,0x1D,0x50,0x05,0x12,0x10, +0xCA,0x15,0x45,0x00,0xC2,0xE5,0x1A,0x00,0xC2,0x60,0xE6,0x1D,0xAA,0xEE,0xF7,0x15, +0xE0,0x00,0xA4,0xEE,0xBF,0x10,0x04,0xF2,0xF7,0x65,0x02,0x00,0xFE,0xF1,0xB7,0x15, +0x96,0xEE,0xC8,0x15,0xFF,0xFF,0x14,0x01,0xF7,0x15,0xFF,0xFF,0xD4,0xF1,0xC0,0x15, +0x8A,0x04,0x50,0x21,0x0B,0x02,0xD0,0x0B,0x0B,0x07,0xF7,0x25,0x03,0x00,0xB0,0xF3, +0x07,0x03,0x37,0x10,0xD2,0xF1,0x77,0x11,0xD0,0xF1,0x02,0x01,0xD0,0x0B,0xF1,0x02, +0x77,0x00,0x84,0xFE,0xF7,0x0B,0xAA,0xF1,0x01,0x04,0x87,0x00,0xF7,0x09,0x78,0x02, +0xF7,0x1D,0x18,0xED,0x8A,0xF5,0xF7,0x1D,0x14,0xED,0x86,0xF5,0xF7,0x1D,0x12,0xED, +0x82,0xF5,0x40,0x1D,0x38,0x05,0xB5,0x15,0x38,0x05,0xC0,0x0B,0xD5,0x02,0xF7,0x15, +0x44,0x05,0x0A,0x00,0xF7,0x6D,0x7A,0xF1,0x04,0x00,0x37,0x09,0x7C,0x05,0x00,0x00, +0xF7,0x15,0xFF,0xFF,0x6C,0xF1,0xF7,0x09,0x34,0x05,0xF5,0x0B,0x36,0x05,0x03,0x02, +0xF5,0x15,0x06,0x00,0x36,0x05,0xF7,0x0A,0x68,0xF1,0xB7,0x11,0x26,0xF5,0xC6,0x1D, +0x4C,0xEF,0xF7,0x35,0x01,0x00,0xF8,0xF2,0x15,0x03,0xF7,0x09,0xFA,0x25,0x46,0x4C, +0x55,0x53,0x48,0x49,0x4E,0x47,0x20,0x55,0xA2,0x01,0x00,0x0B,0x00,0x0E,0x12,0x53, +0x45,0x52,0x20,0x00,0xCA,0x01,0x00,0xBF,0x00,0x14,0x12,0x40,0x11,0xF7,0x09,0x6C, +0x26,0xF7,0x09,0x74,0x02,0xC0,0x1D,0x2E,0xF1,0xF7,0x09,0x60,0x26,0xF7,0x09,0x70, +0x02,0xC0,0x15,0x16,0x07,0xC1,0x1D,0x02,0xF5,0x50,0xE0,0xC0,0x25,0x36,0x07,0xFC, +0x06,0xC0,0x15,0x16,0x07,0xC2,0x1D,0xFA,0xF4,0x0B,0x03,0x43,0x11,0xC3,0x65,0x38, +0x05,0xD3,0x0B,0xC2,0x0B,0x05,0x03,0xA1,0x00,0x02,0x0C,0xFA,0x86,0x4B,0xE0,0xF8, +0x01,0x11,0x14,0xC0,0x25,0xEA,0x07,0xFC,0x06,0x77,0x00,0xB8,0xFD,0x77,0x21,0xF6, +0xF0,0x02,0x02,0x37,0x0A,0xEE,0xF0,0x88,0x0A,0x03,0x1C,0x24,0x00,0xD3,0x0B,0xC1, +0x10,0xC2,0x15,0x16,0x07,0x52,0x14,0xC2,0x25,0x1A,0x08,0xFC,0x06,0xC2,0x15,0x16, +0x07,0xD2,0x60,0xC2,0x25,0x34,0x07,0xFC,0x06,0xF7,0x10,0x9E,0xF4,0xC0,0x1D,0xA2, +0xF4,0x0B,0x03,0x41,0x11,0xC1,0x65,0x38,0x05,0xD1,0x0B,0xC0,0x0B,0x05,0x03,0xA1, +0x00,0x00,0x0C,0xFA,0x86,0xC9,0x60,0xF8,0x01,0xF7,0x35,0x01,0x00,0x3E,0xF2,0x15, +0x03,0xF7,0x09,0x40,0x25,0x53,0x54,0x41,0x52,0x54,0x49,0x4E,0x47,0x20,0x55,0x53, +0x45,0x52,0x20,0x00,0x97,0x01,0x00,0x62,0x01,0xCE,0x12,0x40,0x11,0xF7,0x09,0xB2, +0x25,0xF7,0x09,0xBA,0x01,0xC0,0x1D,0x74,0xF0,0xF7,0x09,0xA6,0x25,0xF7,0x09,0xB6, +0x01,0xB7,0x11,0x5C,0xEE,0xC6,0x1D,0x2E,0xF4,0x77,0x11,0x58,0xF0,0x66,0x1D,0x48, +0x05,0xF7,0x1D,0x5C,0xF0,0x5C,0xF0,0x37,0x09,0x52,0x04,0x4C,0x03,0xF7,0x09,0x10, +0x04,0xF7,0x1D,0x2E,0xF4,0xB8,0xEB,0xF7,0x1D,0x2A,0xF4,0xB4,0xEB,0xF7,0x1D,0x26, +0xF4,0xB2,0xEB,0x77,0x00,0x1A,0x01,0xF7,0x0B,0x38,0xF0,0x01,0x07,0x87,0x00,0x66, +0x11,0xC5,0x1D,0x20,0xF0,0xF5,0x15,0x01,0x00,0x36,0x05,0xF7,0x09,0x68,0xFE,0xF7, +0x09,0x8A,0xFC,0x85,0x15,0x87,0x00,0x26,0x10,0x66,0x10,0xF7,0x65,0x80,0x00,0x0C, +0xF0,0x77,0x0B,0x0A,0xF0,0xF7,0x0A,0x0A,0xF0,0xF7,0x8B,0xE0,0xEB,0x02,0x04,0xF7, +0x09,0x9E,0xFA,0xF7,0x25,0x7F,0x33,0xF6,0xEF,0x0E,0x07,0x5F,0x00,0x62,0x13,0x81, +0x15,0x80,0x15,0x02,0x00,0xF7,0x35,0xFF,0x0F,0xE2,0xEF,0xF9,0x02,0xF7,0x09,0x2A, +0x18,0xF7,0x09,0x9C,0x18,0xF4,0x01,0x37,0x0A,0xD4,0xEF,0xB7,0x0A,0x2A,0x00,0xC0, +0x1D,0x28,0x00,0xF0,0xAD,0x22,0x00,0xB2,0x13,0xE8,0x07,0xB7,0x0A,0x1C,0x00,0xF7, +0x15,0x01,0x00,0x14,0x00,0xF7,0x25,0x0A,0x00,0x10,0x00,0xDF,0x07,0xB7,0x0A,0x0C, +0x00,0xF7,0x15,0x01,0x00,0x04,0x00,0xD9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x1F, +0x1C,0x1F,0x1E,0x1F,0x1E,0x1F,0x1F,0x1E,0x1F,0x1E,0x1F,0xC8,0x15,0xC4,0x13,0x87, +0x00,0xD6,0x0B,0xC0,0x65,0x0E,0x00,0xF7,0x09,0x50,0xFA,0x77,0x00,0xDC,0xFB,0xC8, +0x15,0xD8,0x13,0x87,0x00,0x37,0x0A,0x7A,0xEF,0x01,0x1C,0x0A,0x00,0xC9,0x15,0x01, +0x00,0xF7,0xE5,0x02,0x00,0x78,0xEF,0x26,0x10,0xC0,0x15,0x66,0x03,0xC1,0x15,0x64, +0x03,0x11,0x14,0xFE,0x02,0xB7,0x0A,0x60,0xEF,0xF7,0x0A,0x5A,0xEF,0x80,0x15,0x87, +0x00,0x26,0x11,0xE6,0x10,0xA6,0x10,0x66,0x10,0x26,0x10,0x4D,0x00,0xD6,0x0B,0x80, +0x15,0x81,0x15,0x82,0x15,0x83,0x15,0x84,0x15,0x85,0x00,0x35,0x10,0x3A,0x05,0x75, +0x10,0x3C,0x05,0xB5,0x10,0x3E,0x05,0xFA,0x01,0x00,0x43,0x01,0x2A,0x14,0xF5,0x10, +0x40,0x05,0x35,0x11,0x42,0x05,0x87,0x00,0x40,0x1D,0x3A,0x05,0x41,0x1D,0x3C,0x05, +0x42,0x1D,0x3E,0x05,0x43,0x1D,0x40,0x05,0x44,0x1D,0x42,0x05,0x87,0x00,0xB7,0x21, +0xDA,0xF2,0x01,0x83,0x87,0x00,0xC6,0x35,0x00,0xFE,0x01,0x02,0x87,0x00,0x77,0x00, +0x50,0x00,0xB7,0x21,0xC4,0xF2,0x01,0x86,0x87,0x00,0x77,0x00,0x6A,0x01,0xF7,0xE5, +0x02,0x00,0xA8,0xF2,0xF7,0x2D,0xA4,0xF2,0xA8,0xF2,0x01,0x83,0x87,0x00,0x77,0x00, +0xC6,0x00,0xF7,0x65,0x02,0x00,0x94,0xF2,0xF7,0x2D,0x90,0xF2,0x92,0xF2,0x01,0x82, +0x87,0x00,0x77,0x00,0xDE,0x01,0xF7,0x09,0x68,0x23,0x20,0x00,0x87,0x00,0x5F,0x00, +0x9E,0x14,0xF7,0x09,0xCC,0x23,0xFC,0x04,0x87,0x00,0xC3,0x15,0x0D,0x00,0x77,0x00, +0x16,0x0C,0x77,0x09,0x52,0xFF,0xF7,0x35,0x04,0x00,0x3E,0xF0,0x1A,0x03,0xF7,0xE5, +0x40,0x00,0x68,0xF2,0xF7,0x09,0x3A,0x23,0x53,0x57,0x41,0x50,0x50,0x49,0x4E,0x47, +0x20,0x4F,0x55,0x54,0x20,0x50,0x20,0x50,0x44,0x4C,0x20,0x00,0x80,0x11,0x37,0xE0, +0x50,0xF2,0x00,0x0B,0xF7,0x09,0xA2,0x23,0xF7,0x09,0xB2,0xFF,0xF7,0x65,0x40,0x00, +0x3A,0xF2,0xF7,0x09,0xCA,0xF9,0x00,0x00,0x00,0x00,0x66,0x10,0xF0,0x1D,0x2E,0xF2, +0x04,0x00,0xF0,0x95,0x43,0x00,0x0C,0x00,0xF7,0x09,0x94,0xF9,0xC0,0x1D,0x28,0xF2, +0xC0,0x65,0x88,0x02,0xA0,0x10,0xA0,0x15,0xF7,0x35,0x00,0x04,0x72,0xF2,0x03,0x02, +0xF7,0xE5,0x2C,0x00,0x04,0xF2,0xF7,0x55,0x00,0x04,0x64,0xF2,0xC1,0x1D,0xFE,0xF1, +0x60,0x12,0x60,0x18,0x46,0x20,0xFD,0x04,0xC6,0x65,0xFC,0x00,0xF7,0x65,0xFC,0x00, +0xF0,0xF1,0x77,0x09,0xCE,0xFE,0x87,0x00,0x77,0x09,0xBC,0xFE,0xF7,0x35,0x04,0x00, +0xA8,0xEF,0x15,0x03,0xF7,0x09,0xAA,0x22,0x53,0x57,0x41,0x50,0x49,0x4E,0x47,0x20, +0x4F,0x55,0x54,0x20,0x53,0x20,0x50,0x44,0x4C,0x20,0x00,0xCE,0x01,0x00,0x62,0x01, +0x68,0x15,0xC0,0x1D,0xAC,0xF1,0x37,0xE0,0xB4,0xF1,0x00,0x0B,0xF7,0x09,0x10,0x23, +0xF7,0x09,0x20,0xFF,0xF7,0x09,0x3E,0xF9,0x00,0x00,0x00,0x00,0x66,0x10,0xF0,0x1D, +0x98,0xF1,0x04,0x00,0xF0,0x95,0x43,0x00,0x0C,0x00,0xF7,0x09,0x08,0xF9,0xC0,0x1D, +0x9C,0xF1,0xC0,0x65,0x0C,0x04,0xA0,0x10,0xA0,0x15,0xF7,0x35,0x00,0x08,0xE6,0xF1, +0x03,0x02,0xF7,0xE5,0x2C,0x00,0x6E,0xF1,0xF7,0x55,0x00,0x08,0xD8,0xF1,0xC1,0x1D, +0x68,0xF1,0x60,0x12,0x60,0x18,0x77,0x20,0x58,0xF1,0xFC,0x04,0xF7,0x65,0xFC,0x00, +0x50,0xF1,0xF7,0x65,0xFC,0x00,0x56,0xF1,0x77,0x09,0x3E,0xFE,0x87,0x00,0xF7,0x35, +0x00,0x04,0xB2,0xF1,0x01,0x02,0x00,0x00,0x77,0x09,0x22,0xFE,0xF7,0x35,0x04,0x00, +0x0E,0xEF,0x13,0x03,0xF7,0x09,0x10,0x22,0x53,0x57,0x41,0x50,0x49,0x4E,0x47,0x20, +0x49,0x4E,0x20,0x50,0x20,0x50,0x44,0x4C,0x20,0x00,0x80,0x11,0x37,0xE0,0x28,0xF1, +0x00,0x0B,0xF7,0x09,0x7A,0x22,0xF7,0x09,0x8A,0xFE,0xC0,0x1D,0x16,0xF1,0x01,0x10, +0xC0,0x65,0xFC,0x00,0x09,0x12,0x21,0x18,0x06,0x20,0xFD,0x06,0xC6,0xE5,0xFC,0x00, +0xF7,0xE5,0xFC,0x00,0x02,0xF1,0xF7,0x09,0x36,0xF8,0xD0,0x0B,0xD0,0x15,0x80,0xFF, +0xD0,0x1D,0xF0,0xF0,0xC4,0x1D,0xEE,0xF0,0x02,0x15,0x90,0x10,0x10,0x13,0xD0,0x0B, +0xC8,0x95,0x45,0x00,0xF7,0x09,0x52,0xF8,0xC3,0x1D,0xDA,0xF0,0xD3,0x0B,0x08,0x02, +0xCB,0x0B,0x06,0x02,0xF7,0x45,0x00,0x04,0x2C,0xF1,0xF7,0x65,0x2C,0x00,0xC0,0xF0, +0xF7,0x09,0x86,0xF8,0x77,0x09,0xA2,0xFD,0x87,0x00,0xF7,0x35,0x00,0x08,0x16,0xF1, +0x01,0x02,0x00,0x00,0x77,0x09,0x86,0xFD,0xF7,0x35,0x04,0x00,0x72,0xEE,0x14,0x03, +0xF7,0x09,0x74,0x21,0x53,0x57,0x41,0x50,0x49,0x4E,0x47,0x20,0x49,0x4E,0x20,0x53, +0x20,0x50,0x44,0x4C,0x20,0x00,0xC0,0x1D,0x78,0xF0,0x37,0xE0,0x80,0xF0,0x00,0x0B, +0xF7,0x09,0xDC,0x21,0xF7,0x09,0xEC,0xFD,0xC0,0x1D,0x6E,0xF0,0x01,0x10,0x09,0x12, +0xC0,0x65,0xFC,0x00,0x09,0x12,0x21,0x18,0x37,0x20,0x56,0xF0,0xFC,0x06,0x41,0x01, +0x00,0x2B,0x01,0xC4,0x16,0xF7,0xE5,0xFC,0x00,0x4E,0xF0,0xF7,0xE5,0xFC,0x00,0x54, +0xF0,0xF7,0x09,0x92,0xF7,0xD0,0x0B,0xD0,0x15,0x80,0xFF,0xD0,0x1D,0x42,0xF0,0xC4, +0x1D,0x40,0xF0,0x02,0x15,0x90,0x10,0x10,0x13,0xD0,0x0B,0xC8,0x95,0x45,0x00,0xF7, +0x09,0xAE,0xF7,0xC3,0x1D,0x2C,0xF0,0xD3,0x0B,0x08,0x02,0xCB,0x0B,0x06,0x02,0xF7, +0x45,0x00,0x08,0x88,0xF0,0xF7,0x65,0x2C,0x00,0x12,0xF0,0xF7,0x09,0xE2,0xF7,0x77, +0x09,0xFE,0xFC,0x87,0x00,0x26,0x10,0x66,0x10,0xA6,0x10,0xE6,0x10,0xE6,0x1D,0xDE, +0xE8,0xF7,0x15,0xE0,0x00,0xD8,0xE8,0xF7,0x09,0x86,0x00,0xF7,0x09,0x6A,0x00,0xC3, +0x1D,0xF0,0xEB,0x13,0x12,0x13,0x18,0xF7,0x10,0xE8,0xEB,0x10,0x0A,0x08,0x0A,0xF7, +0x09,0x62,0x00,0xB7,0x15,0xB8,0xE8,0x83,0x15,0x82,0x15,0x81,0x15,0x80,0x15,0x87, +0x00,0x26,0x10,0x66,0x10,0xA6,0x10,0xE6,0x10,0xE6,0x1D,0xA2,0xE8,0xF7,0x15,0xE0, +0x00,0x9C,0xE8,0xF7,0x09,0x4A,0x00,0xF7,0x09,0x2E,0x00,0x00,0x15,0xD0,0x6D,0xD4, +0xEB,0x48,0x0B,0xC8,0x6D,0xD0,0xEB,0xC3,0x1D,0xA8,0xEB,0xF7,0x18,0xC6,0xEB,0xF7, +0x18,0xC4,0xEB,0xF7,0x10,0x9C,0xEB,0xF7,0x09,0x1A,0x00,0xB7,0x15,0x70,0xE8,0x83, +0x15,0x82,0x15,0x81,0x15,0x80,0x15,0x84,0x00,0xC0,0x15,0x44,0x03,0x50,0x60,0x48, +0x0B,0x88,0x60,0x87,0x00,0xC0,0x15,0x44,0x03,0x50,0xE0,0x88,0x0B,0x88,0xE0,0x87, +0x00,0xC1,0x1D,0xB0,0xDD,0xC1,0x65,0x80,0x00,0xF7,0x8B,0xA4,0xDD,0x02,0x04,0xC1, +0x15,0x80,0x00,0xC2,0x1D,0x8C,0xEB,0xC1,0x6D,0x86,0xEB,0x42,0x0B,0x87,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x1A,0x13,0x13,0x1F,0x52,0x31,0x31,0x4C,0x4F,0x47,0x4F, +0x1B,0x55,0x31,0x31,0x48,0x45,0x52,0x45,0x0B,0x00,0xDE,0x01,0x00,0x16,0x00,0xEA, +0x17,0x00,0x00,0x58,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x78,0x01,0x00,0x16,0x00,0x1A,0x18,0x00,0x00,0x00,0xFF,0x98,0x18,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x00,0x0A,0x00,0xEA,0x18,0x22, +0x19,0xEA,0x18,0xB6,0x01,0x00,0x64,0x01,0xFE,0x18,0xC4,0x1A,0xFE,0x18,0x26,0x10, +0xC0,0x1D,0xE4,0xFF,0xB7,0x11,0xE0,0xFF,0x06,0x10,0xC0,0x1D,0xF0,0xDE,0x87,0x00, +0xC0,0x1D,0xD4,0xFF,0xB7,0x11,0xD0,0xFF,0x06,0x10,0x80,0x15,0x02,0x00,0xF7,0x55, +0x40,0x00,0xDC,0xDE,0xF7,0x09,0xE8,0xFF,0xC0,0x25,0x60,0x00,0xF8,0x02,0xB7,0x0A, +0x9A,0xFE,0xF7,0x09,0xDA,0xFF,0xC0,0xE5,0x60,0x00,0xFB,0x05,0xC0,0x25,0x08,0x00, +0xF8,0x07,0xC0,0x0C,0x78,0x00,0x4C,0x19,0x36,0x19,0x5C,0x19,0x5C,0x19,0x36,0x19, +0x36,0x19,0x66,0x19,0x5E,0x19,0x80,0x19,0xEC,0x01,0xF7,0x15,0xFF,0xFF,0x8A,0xFE, +0x02,0x01,0x37,0x0A,0x84,0xFE,0xF7,0x09,0x12,0x01,0xE3,0x01,0xC0,0x25,0x10,0x00, +0xE0,0x07,0xC0,0x0C,0xF0,0x1D,0x72,0xFE,0x3A,0x18,0xDB,0x01,0x37,0x0A,0x6C,0xFE, +0xF7,0x09,0xA2,0x00,0x77,0x00,0xAA,0xFF,0xF7,0x9D,0x69,0xFE,0x60,0xFE,0x37,0x90, +0x5E,0xFE,0xF7,0x1D,0x52,0xFE,0x4E,0xFE,0xF7,0x65,0x02,0x00,0x48,0xFE,0xF7,0x09, +0x84,0x00,0x3F,0x01,0x3F,0x10,0x3E,0xFE,0xF7,0x0A,0x44,0xFE,0xF5,0x06,0xF7,0x0B, +0x3A,0xFE,0x37,0x02,0xF7,0x0B,0x6A,0xFE,0x34,0x02,0x66,0x10,0xC1,0x15,0xFA,0x17, +0xD1,0x0B,0xFE,0x02,0xE1,0x0B,0xC1,0x25,0x1A,0x18,0x2B,0x04,0xC0,0x1D,0x18,0xFE, +0xF7,0x1D,0x46,0xFE,0x12,0xFE,0x37,0x10,0x40,0xFE,0xD0,0x0B,0x00,0x12,0x09,0x10, +0xC0,0x35,0x00,0xFF,0x02,0x02,0xB7,0x0A,0xE4,0xFD,0xC1,0xE5,0xFA,0x17,0xC1,0x0C, +0xC1,0x0C,0xC1,0x0C,0xC1,0x0C,0xC1,0x6D,0xD2,0xEA,0x77,0x10,0x1E,0xFE,0xF7,0x1D, +0xCC,0xEA,0x1A,0xFE,0xC0,0x15,0x2A,0x18,0xD0,0x0B,0xFE,0x02,0xC1,0x15,0x00,0x65, +0xC1,0x5D,0xDA,0xFD,0xC1,0x65,0x20,0x00,0xC1,0x00,0x60,0x10,0x81,0x15,0x77,0x00, +0x10,0xFF,0x77,0x00,0x0C,0xFF,0xF7,0x09,0x52,0x00,0x87,0x00,0x37,0x10,0xC4,0xFD, +0xF7,0x09,0x48,0x00,0x87,0x00,0xC0,0x00,0x80,0x0C,0x80,0x0C,0x37,0x50,0xB4,0xFD, +0xF7,0x09,0x38,0x00,0x87,0x00,0xC0,0x0C,0xC0,0x0C,0xC0,0x0C,0xC0,0x0C,0x37,0xD0, +0xA3,0xFD,0xC0,0x00,0x37,0x90,0x9A,0xFD,0xBC,0x01,0x00,0x64,0x01,0x5C,0x1A,0x66, +0x10,0xC0,0x1D,0x96,0xFD,0xF7,0x09,0x2C,0x00,0xC1,0x45,0xFC,0xFF,0x41,0x0A,0x77, +0x20,0x86,0xFD,0x05,0x02,0x37,0x60,0x7A,0xFD,0x81,0x15,0x77,0x00,0x0E,0x36,0x81, +0x15,0x87,0x00,0xF7,0x09,0x90,0xFE,0xC0,0xE5,0x20,0x00,0xC0,0x35,0xC0,0xFF,0xDD, +0x02,0x77,0x00,0xF8,0x35,0x26,0x10,0x01,0x0A,0x01,0x01,0x81,0x0A,0xC0,0x0C,0xFD, +0x87,0xFD,0x02,0x80,0x15,0x87,0x00,0x26,0x10,0xC0,0x1D,0x56,0xFE,0xB7,0x11,0x52, +0xFE,0x06,0x10,0x87,0x00,0x37,0x10,0x50,0xDD,0xC0,0x1D,0x46,0xFE,0xB7,0x11,0x42, +0xFE,0x06,0x10,0x80,0x15,0x02,0x00,0xC0,0x15,0x1A,0x00,0xF7,0x09,0xE6,0xFF,0xF7, +0x15,0xD4,0x17,0x56,0xFD,0xC0,0x9F,0x52,0xFD,0x08,0x03,0xB7,0x0A,0x4C,0xFD,0xF7, +0x45,0x40,0x00,0x22,0xDD,0xF7,0x09,0xCC,0xFF,0xF5,0x01,0xF7,0x45,0x40,0x00,0x16, +0xDD,0xF7,0x09,0xC4,0xFF,0xF7,0x0B,0xDA,0xFC,0xF8,0x03,0x05,0x00,0xC6,0x1D,0x46, +0xE6,0x37,0x0A,0x4E,0xE8,0xF7,0x15,0x80,0x00,0x5A,0xDA,0xF7,0x15,0x4B,0x00,0x52, +0xDA,0xF7,0x0B,0xBC,0xFC,0x09,0x03,0xF7,0x15,0x51,0x00,0xE6,0xDC,0xF7,0x15,0x51, +0x00,0xE4,0xDC,0xF7,0x15,0x1A,0x00,0xE0,0xDC,0xF7,0x15,0x38,0x1B,0xD8,0xE4,0xC0, +0x15,0xCA,0x77,0xC0,0x65,0x80,0x00,0xC8,0x0B,0xFC,0x01,0xC0,0x45,0xFF,0x00,0xF7, +0x15,0x06,0x00,0xC2,0xE4,0x37,0x10,0x5E,0xE9,0xC0,0xE5,0xA8,0x8E,0x01,0x0A,0xC2, +0x15,0xC6,0xFE,0x22,0x10,0x22,0x0A,0xE2,0x1D,0x52,0xE9,0xC1,0x1D,0x68,0xE3,0x57, +0x20,0x04,0x49,0x02,0x87,0xC1,0x15,0x04,0x49,0xC1,0x45,0x1F,0x00,0xC0,0x15,0xA6, +0x6A,0xC2,0x15,0xB0,0x04,0xC3,0x1D,0x34,0xE9,0xF7,0x10,0xE2,0xE7,0x04,0x0A,0x12, +0x10,0x40,0x60,0x32,0x11,0xD8,0xFF,0xF2,0x15,0x01,0x00,0xDA,0xFF,0xC4,0x65,0x30, +0x00,0xD2,0x0B,0xC3,0x0A,0xF4,0x06,0x77,0x10,0x2C,0xE9,0x81,0x0C,0x40,0x10,0x01, +0x0B,0x77,0x10,0x20,0xE9,0xC0,0x15,0x03,0x00,0xC1,0x15,0xFF,0xFF,0xC1,0xED,0x2A, +0xE9,0xC1,0xED,0x28,0xE9,0xC2,0x15,0xC6,0xFE,0x62,0x10,0x22,0x10,0xE0,0x01,0x00, +0x60,0x01,0xBA,0x1B,0xE2,0x1D,0xEA,0xE8,0xC0,0x15,0xFF,0xFF,0xF7,0x0B,0xFC,0xE2, +0x02,0x02,0xC0,0x1D,0xF8,0xE2,0xC0,0x6D,0xF2,0xE8,0xC0,0xE5,0x00,0x0C,0x02,0x06, +0xC0,0x15,0xFF,0x7F,0xC0,0x45,0xFF,0x00,0x04,0x10,0xC0,0x00,0x01,0x10,0xC0,0x0C, +0x81,0x0C,0x81,0x0C,0x81,0x0C,0xC2,0x15,0x9E,0x07,0xC1,0x0A,0x02,0x05,0x12,0x0A, +0xFC,0x01,0x0A,0x0A,0x4A,0x0A,0xC3,0x15,0x01,0x00,0xC0,0x45,0xF0,0xFF,0xC0,0x0A, +0x03,0x05,0xCA,0x40,0xC3,0x0C,0xFB,0x01,0xD2,0x0B,0x97,0x20,0xBC,0x07,0x03,0x06, +0xCA,0x15,0xFF,0xFF,0xF9,0x01,0xF7,0x55,0x01,0x00,0x7C,0xEB,0xF7,0x55,0x00,0x80, +0x94,0xEB,0x03,0x11,0xC0,0x15,0x03,0x00,0xC1,0x15,0xFF,0xFF,0xC4,0x15,0x0A,0x00, +0xC5,0x15,0xE0,0x01,0xC5,0xE5,0x30,0x00,0xF5,0x15,0xFF,0xFF,0x38,0x05,0x35,0x0A, +0x36,0x05,0xC4,0x0A,0x37,0x21,0x5A,0xE8,0xF5,0x04,0x35,0x0A,0x38,0x05,0xF5,0x15, +0x07,0x00,0x36,0x05,0xC2,0x15,0x66,0x05,0x42,0x61,0xC1,0xE0,0x80,0x0B,0x22,0x10, +0x62,0x10,0x22,0x10,0x62,0x10,0xC1,0xE5,0x00,0x04,0x80,0x0B,0x22,0x10,0x62,0x10, +0xC1,0xE5,0x00,0x04,0x80,0x0B,0x22,0x10,0x62,0x10,0xC1,0xE5,0x00,0x04,0x80,0x0B, +0x22,0x10,0x62,0x10,0xC1,0x6D,0x34,0xE8,0x01,0x87,0xC0,0x0A,0x22,0x10,0x62,0x10, +0xC4,0x0B,0xD0,0x06,0xC3,0x15,0xA8,0x6A,0xC1,0x15,0xE3,0x00,0xC2,0x15,0x22,0x0D, +0xC2,0x60,0xC3,0x6D,0x18,0xE8,0x37,0x0A,0xE0,0xEA,0x81,0x0A,0xC1,0x35,0x00,0x10, +0x04,0x02,0x52,0x10,0x12,0x0A,0xC2,0x20,0xF8,0x82,0x12,0x0A,0x0A,0x0A,0xC1,0x65, +0xE3,0x00,0x77,0x10,0xDA,0xE7,0xC0,0x15,0x16,0x07,0xC1,0x15,0xA8,0x6A,0x11,0x14, +0xC0,0x25,0x1A,0x08,0xFC,0x06,0xF7,0x0B,0x1E,0xE8,0x0E,0x02,0xF7,0x09,0x80,0xF1, +0x10,0x0A,0xD0,0x1D,0xD6,0xE7,0xD0,0x15,0xA6,0x6A,0xD0,0x1D,0xD8,0xE7,0xD0,0x1D, +0xD6,0xE7,0xD0,0x0B,0xC8,0x95,0x43,0x00,0xF7,0x1D,0xA6,0xE7,0xA8,0xE7,0xF7,0x0C, +0xA4,0xE7,0xF7,0x0B,0xF6,0xE7,0x0B,0x02,0xF7,0x15,0xD4,0x20,0xB2,0x03,0x47,0x01, +0x00,0x05,0x01,0x14,0x1D,0xF7,0x15,0x0E,0x21,0xE0,0x03,0xF7,0x15,0x03,0x00,0xE0, +0xE7,0x77,0x00,0xFA,0xF2,0x77,0x00,0xA0,0x0C,0xF7,0x09,0x94,0xF2,0xF7,0x09,0xCE, +0x1A,0x31,0x31,0x4C,0x4F,0x47,0x4F,0x20,0x00,0xC0,0x1D,0xBC,0xE4,0xF7,0x09,0xAC, +0x1B,0xF7,0x09,0x56,0xF7,0xF7,0x1D,0x40,0x4D,0x44,0xEA,0xF7,0x15,0x40,0x00,0x20, +0xE2,0xF7,0x09,0xC6,0xF5,0xF5,0x0B,0x4C,0x05,0x04,0x03,0xF7,0x09,0x2C,0x0E,0x77, +0x00,0xB2,0x1D,0xF7,0x09,0x2A,0x00,0xF7,0x09,0xEE,0x01,0xF7,0x09,0x34,0x02,0x23, +0x89,0xEF,0x01,0xC6,0x15,0x2C,0x6D,0xE6,0x01,0x03,0x00,0x00,0x01,0x00,0x01,0x77, +0x00,0x9C,0x31,0xC1,0x1D,0xD0,0xE9,0xF7,0x09,0x5E,0x39,0x0E,0x89,0x80,0x10,0x15, +0x01,0xF7,0x0B,0xCC,0xE9,0x52,0x03,0xF7,0x35,0x20,0x00,0xF0,0xE9,0x4E,0x02,0xC1, +0x1D,0xB6,0xE9,0xEF,0x03,0xF7,0x09,0xCE,0x39,0xC0,0x35,0xFF,0x0F,0x06,0x02,0x26, +0x10,0x26,0x10,0x26,0x10,0x26,0x10,0x77,0x00,0x0E,0x35,0x37,0x10,0x9A,0xE9,0x01, +0x10,0xF7,0x09,0xB2,0x39,0xF7,0x09,0xAE,0x39,0x77,0x10,0x8A,0xE9,0x37,0x10,0x8E, +0xE9,0x02,0x10,0xF7,0x09,0x9E,0x39,0x37,0x0A,0x80,0xE9,0x02,0x10,0xC2,0x45,0xFF, +0x0F,0xC2,0x25,0x00,0xA0,0x04,0x02,0x77,0x10,0x70,0xE9,0x37,0x10,0x70,0xE9,0xF7, +0x55,0x00,0xF0,0x6A,0xE9,0xF7,0xE5,0x02,0x00,0x1E,0xE9,0xFF,0x1D,0x60,0xE9,0x18, +0xE9,0xF7,0x35,0x02,0x00,0x86,0xE9,0x43,0x03,0xF7,0x09,0x8E,0xF6,0xF7,0x09,0xEE, +0x19,0x20,0x23,0x00,0xA7,0x01,0x00,0x5B,0x00,0x14,0x1E,0xC1,0x1D,0x3A,0xE9,0xF7, +0x09,0xCE,0x1B,0xF7,0x09,0xDE,0x19,0x20,0x20,0x4C,0x49,0x4E,0x45,0x20,0x00,0xC0, +0x1D,0x2A,0xE9,0xF7,0x09,0xBC,0x1A,0xF7,0x09,0x66,0xF6,0xF7,0x09,0x08,0x1E,0x2A, +0x01,0xF7,0x35,0x01,0x00,0x4C,0xE9,0x2F,0x03,0xC0,0x1D,0x48,0xE9,0x01,0x14,0x2E, +0x03,0x37,0x10,0x40,0xE9,0xF7,0x09,0x18,0xF6,0x7F,0x10,0xC2,0xE8,0xF7,0x09,0x40, +0xF6,0xF7,0x09,0xA0,0x19,0x54,0x45,0x53,0x54,0x20,0x4C,0x49,0x4E,0x45,0x20,0x00, +0x60,0x01,0x00,0x64,0x01,0x6A,0x1E,0xB7,0x0A,0x22,0xE9,0xC0,0x1D,0x1E,0xE9,0xF7, +0x09,0x76,0x1A,0xF7,0x09,0x20,0xF6,0xF7,0x09,0xC2,0x1D,0x37,0x0A,0xE2,0xE8,0x37, +0x0A,0xE4,0xE8,0x37,0x0A,0xE2,0xE8,0x37,0x0A,0xE0,0xE8,0x87,0x00,0x80,0x15,0xF7, +0x09,0xC8,0xF5,0xE6,0x15,0x01,0x00,0xF7,0x09,0xAC,0xF5,0x48,0x00,0xF7,0x09,0x1E, +0x00,0xF4,0x01,0xF7,0x09,0x54,0x19,0x41,0x4C,0x4C,0x20,0x44,0x4F,0x4E,0x45,0x21, +0x00,0xF7,0x09,0xE2,0xF5,0x80,0x15,0x77,0x00,0x86,0xFE,0xF7,0x09,0xD8,0xF5,0x37, +0x0A,0xD4,0xE8,0x37,0x0A,0x82,0xE6,0xC3,0x1D,0xC6,0xE8,0x02,0x03,0xF7,0x09,0xF0, +0x01,0xF7,0x09,0x9E,0x00,0xF7,0x09,0x22,0x18,0xF7,0x09,0x18,0x02,0xF7,0x0B,0x68, +0xE6,0x03,0x03,0xF7,0x09,0xA0,0x0C,0x21,0x01,0xC3,0x2D,0x10,0xE6,0x1E,0x03,0xF7, +0x0B,0xA4,0xE8,0x03,0x06,0xC3,0x25,0x0D,0x00,0x0D,0x03,0xC3,0x25,0x5B,0x00,0x02, +0x02,0xB7,0x0A,0x92,0xE8,0xC3,0x25,0x5D,0x00,0x02,0x02,0xF7,0x0A,0x88,0xE8,0xF7, +0x09,0xF8,0x17,0xE2,0x01,0xF7,0x09,0x2C,0x18,0xD2,0x01,0xF7,0x09,0x48,0xF5,0xFF, +0x1D,0x22,0xE8,0xF0,0xE7,0x37,0x0A,0x1C,0xE8,0x87,0x00,0xF7,0x09,0x16,0x18,0xC5, +0x01,0xF7,0x09,0xFA,0x3B,0xC2,0x01,0xE6,0x1D,0x56,0xE8,0xF7,0x09,0x08,0xF5,0xF7, +0x15,0x3C,0x00,0x4C,0xE8,0xF7,0x09,0x76,0xFF,0xB7,0x15,0x44,0xE8,0xF7,0x09,0x0A, +0xF5,0x77,0x00,0x06,0x31,0xF7,0x0B,0x04,0xE8,0x05,0x03,0xF7,0x35,0x20,0x00,0x28, +0xE8,0x01,0x02,0x87,0x00,0xF7,0x35,0x01,0x00,0x1E,0xE8,0x02,0x02,0x77,0x00,0x34, +0x15,0x87,0x00,0xF7,0x0B,0xCE,0xE3,0x12,0x05,0xF7,0x0B,0x82,0xE5,0x0F,0x03,0x66, +0x11,0xF7,0x09,0xC2,0xF4,0xC5,0x1D,0xBC,0xE3,0xF5,0x15,0x08,0x00,0x36,0x05,0xF7, +0x09,0x04,0xF2,0xF7,0x09,0x26,0xF0,0x85,0x15,0xF7,0x09,0xBE,0xF4,0x87,0x00,0xF7, +0x0B,0xE2,0xE7,0x14,0x02,0xF7,0x09,0xDC,0x00,0xF7,0x35,0x04,0x00,0xB2,0xE7,0x2D, +0x02,0xF7,0x09,0x3A,0x2E,0x01,0x01,0x87,0x00,0xF7,0x35,0x04,0x00,0xA2,0xE7,0x25, +0x02,0xF7,0x09,0x4A,0x00,0xC8,0x01,0x00,0x64,0x01,0xC8,0x1F,0xF7,0x55,0x02,0x00, +0x96,0xE7,0xEE,0x01,0xC1,0x1F,0x44,0xE7,0xF7,0x09,0x9E,0x37,0x03,0x10,0xC0,0x45, +0xFF,0x0F,0xC0,0x25,0x00,0xA0,0x0F,0x03,0xC0,0x25,0x00,0xB0,0xDF,0x02,0xF7,0x09, +0x88,0x37,0xC0,0x35,0xFF,0x0F,0x0E,0x02,0xC3,0x45,0x00,0xF0,0xC0,0x60,0xF7,0x09, +0xCA,0x3A,0xBF,0x10,0x16,0xE7,0xF7,0x09,0x52,0x36,0xC0,0x1F,0x0E,0xE7,0xF7,0x09, +0x70,0xF4,0x00,0x88,0x0F,0x89,0xF7,0x35,0x02,0x00,0x4C,0xE7,0x0F,0x03,0xF7,0x45, +0x02,0x00,0x44,0xE7,0xC0,0x1D,0x52,0xE7,0xC1,0x1D,0x50,0xE7,0x06,0x02,0xC0,0x25, +0x00,0x00,0x03,0x02,0xF7,0x55,0x04,0x00,0x2E,0xE7,0x87,0x00,0xF7,0x45,0x01,0x00, +0x26,0xE7,0xF7,0x25,0x0A,0x0C,0x34,0xE7,0x04,0x03,0xF7,0x25,0x16,0x0C,0x2C,0xE7, +0x03,0x02,0xF7,0x55,0x01,0x00,0x10,0xE7,0xC1,0x1D,0x1E,0xE7,0x77,0x10,0x02,0xE7, +0xC1,0x35,0xFF,0x0F,0x07,0x03,0xF7,0x09,0x10,0x37,0x37,0x10,0x0C,0xE7,0x77,0x10, +0x0A,0xE7,0x87,0x00,0xF7,0x35,0x04,0x00,0xEE,0xE6,0x07,0x02,0xF7,0x55,0x04,0x00, +0xE6,0xE6,0xC0,0x15,0x00,0x00,0x01,0x0A,0xF0,0x01,0x1A,0x89,0xC1,0x1F,0x8C,0xE6, +0xF7,0x09,0xEE,0xF3,0xC1,0x35,0xFF,0x0F,0x10,0x03,0xF7,0x45,0x04,0x00,0xC8,0xE6, +0xF7,0x09,0xD6,0x36,0x37,0x10,0xD2,0xE6,0x77,0x10,0xD0,0xE6,0xF7,0x55,0x02,0x00, +0xB6,0xE6,0xF7,0x15,0x01,0x00,0xA8,0xE6,0x87,0x00,0xF7,0x55,0x04,0x00,0xA8,0xE6, +0xC0,0x15,0x00,0x00,0x01,0x0A,0xEE,0x01,0x5F,0x00,0xC8,0x20,0xF7,0x8B,0xA8,0xDE, +0xFD,0x80,0xF7,0x10,0xA4,0xDE,0x87,0x00,0xF7,0x8B,0x9C,0xDE,0xFD,0x80,0xF7,0x90, +0x98,0xDE,0xC3,0x25,0x0D,0x00,0x06,0x02,0xC3,0x15,0x0A,0x00,0xF7,0x09,0xD8,0xFF, +0xC3,0x15,0x0D,0x00,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x00,0xFC,0x20, +0x01,0x00,0xF7,0x8B,0x6E,0xDE,0xFC,0x80,0xC3,0x9D,0x6A,0xDE,0xC3,0x45,0x80,0xFE, +0xDD,0x01,0x01,0x00,0xF7,0x0B,0x7E,0xE6,0xFC,0x03,0xC3,0x9D,0x78,0xE6,0x37,0x0A, +0x74,0xE6,0xC3,0x45,0x80,0xFF,0xD0,0x01,0x26,0x10,0xE5,0x01,0x00,0x64,0x01,0x26, +0x21,0x66,0x10,0x40,0x10,0xC0,0x45,0x00,0xF0,0xC1,0x45,0xF8,0xFF,0x41,0x9C,0x48, +0x21,0x80,0x0C,0x80,0x0C,0x80,0x0C,0xC0,0x6D,0xF2,0xE5,0x48,0xD0,0x81,0x15,0x80, +0x15,0x87,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xAE,0x21,0xAE,0x21,0xAE, +0x21,0xAE,0x21,0xB0,0x21,0xB0,0x21,0xB0,0x21,0xAE,0x21,0xD0,0x21,0xAE,0x21,0xAE, +0x21,0xB2,0x21,0xB2,0x21,0xB0,0x21,0xB2,0x21,0xB2,0x21,0x57,0x20,0x00,0x80,0x03, +0x83,0x57,0x20,0x00,0x90,0x1E,0x87,0x26,0x10,0xF7,0x09,0xC8,0xF2,0x66,0x10,0xA6, +0x10,0xE6,0x10,0x40,0x10,0x02,0x10,0xC2,0x35,0xFF,0x0F,0x24,0x03,0x81,0x10,0xF7, +0x09,0x8C,0xFF,0xF7,0x09,0xD8,0x35,0x03,0x10,0xC3,0x00,0xC3,0x45,0x0F,0xFF,0x83, +0x0C,0x83,0x0C,0x83,0x0C,0x7B,0x00,0x50,0x21,0xED,0x01,0x00,0x00,0xF7,0x09,0xBA, +0xFF,0xE9,0x01,0xF7,0x1D,0x6A,0xE3,0x6A,0xE3,0xB7,0x10,0x64,0xE3,0xC2,0x1D,0x62, +0xE3,0xF7,0x09,0x02,0x43,0xC2,0x1D,0x58,0xE3,0xD6,0x01,0xF7,0x09,0xF8,0x42,0xF7, +0x09,0xA4,0xFF,0xD8,0x01,0x83,0x15,0x82,0x15,0x81,0x15,0x80,0x15,0xF7,0x09,0x78, +0xF2,0x87,0x00,0x77,0x09,0x18,0xF2,0xE6,0x1D,0x4C,0xE5,0xF7,0x09,0x56,0xF2,0xC5, +0x1D,0x50,0xE1,0xF7,0x0B,0xFE,0xE2,0x03,0x05,0xF7,0x09,0x98,0xEF,0xFA,0x01,0x77, +0x11,0xF2,0xE2,0xF7,0x09,0xB4,0xED,0xC0,0x1D,0x22,0xE5,0xC1,0x15,0x00,0x01,0xD0, +0x15,0x01,0x00,0x10,0x0A,0xC1,0x0A,0xFD,0x06,0xF7,0x09,0x48,0xF2,0xFF,0x1D,0xB4, +0xE5,0xF0,0xE4,0xF7,0xE5,0x02,0x00,0xEA,0xE4,0xFF,0x15,0x14,0xC0,0xE4,0xE4,0xF7, +0xE5,0x02,0x00,0xDE,0xE4,0xFF,0x15,0x16,0xC0,0xD8,0xE4,0xF7,0x15,0x10,0x00,0xF6, +0xE4,0xC5,0x15,0x43,0x00,0xC4,0x1D,0xE2,0xE4,0xC5,0x0A,0x35,0x05,0x03,0x15,0xC2, +0x10,0xFB,0x03,0xC1,0x10,0xF7,0x09,0xC6,0xFE,0xF7,0x09,0x12,0x35,0x03,0x10,0x42, +0x10,0xF7,0x09,0xBA,0xFE,0xF7,0x09,0x06,0x35,0xF7,0x09,0xFE,0xFE,0x02,0x10,0xC2, +0x35,0xFF,0x0F,0xED,0x03,0x81,0x10,0xF7,0x09,0xA4,0xFE,0xF7,0x09,0xF0,0x34,0xF2, +0x01,0x00,0x58,0x01,0x84,0x22,0xB7,0x10,0x9E,0xE2,0x02,0x10,0xC0,0x45,0xFF,0x0F, +0xC0,0x25,0x00,0x20,0x0D,0x03,0xC0,0x25,0x00,0x30,0x07,0x03,0xC0,0x25,0x00,0xA0, +0x0B,0x03,0xC0,0x25,0x00,0xB0,0x07,0x03,0x00,0x00,0xF7,0x09,0xC4,0xFE,0xE3,0x01, +0xF7,0x09,0xBE,0xFE,0xE0,0x01,0xDF,0x01,0xF7,0x09,0xB6,0xFE,0xDC,0x01,0xC5,0x15, +0x2A,0x05,0x41,0x15,0x05,0x03,0x41,0x12,0xFC,0x03,0xF7,0x09,0xA4,0xFE,0xF9,0x01, +0xC4,0x1D,0x50,0xE4,0x01,0x19,0x37,0x21,0x40,0xE4,0x03,0x05,0xF7,0x09,0x92,0xFE, +0xF9,0x01,0xC0,0x1D,0x3E,0xE4,0xD0,0x0B,0x02,0x02,0xC8,0x0B,0x44,0x03,0xF7,0x09, +0xCC,0xEB,0x00,0x00,0x00,0x00,0x77,0x10,0x4A,0xE4,0xB7,0x10,0x48,0xE4,0xF0,0x1D, +0x20,0xE4,0x04,0x00,0xF0,0x95,0x43,0x00,0x0C,0x00,0xF7,0x09,0x90,0xEB,0xC1,0x1D, +0x12,0xE4,0xD1,0x0B,0x02,0x02,0xC9,0x0B,0x1A,0x03,0xF7,0x09,0x4A,0xEB,0x10,0x0A, +0xD0,0x15,0x80,0xFF,0xD0,0x1D,0xFA,0xE3,0xC1,0x1D,0xF8,0xE3,0x50,0x14,0x50,0x14, +0xD0,0x0B,0xC8,0x95,0x45,0x00,0xF7,0x09,0x68,0xEB,0xC5,0x15,0x80,0x00,0xC4,0x1D, +0xE2,0xE3,0x01,0x19,0xF7,0x09,0x2A,0xFE,0xC5,0x0A,0xFB,0x06,0xE0,0x01,0xF7,0x09, +0x16,0xEB,0x10,0x0A,0xD0,0x15,0x80,0xFF,0xD0,0x1D,0xC6,0xE3,0xD0,0x1D,0xE4,0xE3, +0xD0,0x1D,0xE2,0xE3,0xD0,0x0B,0xC8,0x95,0x45,0x00,0xF7,0x09,0x34,0xEB,0xC2,0x1D, +0xD2,0xE3,0xF7,0x09,0x7C,0xEB,0xF7,0x09,0x10,0x41,0xF7,0x65,0x06,0x00,0x9A,0xE3, +0x04,0x0A,0x37,0x0A,0xBA,0xE3,0x01,0x0A,0xC2,0x1D,0x8C,0xE3,0xC5,0x1D,0x18,0xE1, +0xC0,0x1D,0xA0,0xE3,0x03,0x14,0xB1,0x00,0x03,0x0C,0x06,0x87,0x12,0x11,0x12,0x0A, +0x44,0x10,0xB7,0x0A,0x9A,0xE3,0x02,0x01,0xC2,0x65,0x04,0x00,0x81,0x0A,0xC5,0x0A, +0x07,0x07,0xA1,0x00,0x03,0x0C,0xF1,0x02,0x03,0x14,0xB1,0x00,0x03,0x0C,0xED,0x01, +0x37,0x11,0x84,0xE3,0xF7,0x15,0xFF,0xFF,0x32,0xE1,0xB7,0x15,0x70,0xE3,0xF7,0x09, +0x8E,0xF0,0x77,0x09,0x3C,0xF0,0x87,0x00,0x36,0x01,0x00,0x2C,0x00,0x16,0x27,0x3C, +0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0xD6, +0x23,0xDC,0x23,0xE2,0x23,0xE8,0x23,0xEE,0x23,0xF4,0x23,0xFA,0x23,0x00,0x24,0x06, +0x24,0x0C,0x24,0x12,0x24,0xB5,0x01,0x00,0x1C,0x00,0x6C,0x27,0x06,0x24,0x46,0x24, +0x86,0x24,0xC6,0x24,0x06,0x25,0x46,0x25,0x86,0x25,0xC6,0x25,0x06,0x26,0x46,0x26, +0x86,0x26,0xB8,0x01,0x00,0x1A,0x00,0xF2,0x27,0x26,0x24,0x66,0x24,0xA6,0x24,0xE6, +0x24,0x26,0x25,0x66,0x25,0xA6,0x25,0xE6,0x25,0x26,0x26,0x66,0x26,0xA0,0x01,0x00, +0x1C,0x00,0x16,0x28,0x06,0x26,0x26,0x26,0x46,0x26,0x66,0x26,0x86,0x26,0xA6,0x26, +0xC6,0x26,0xE6,0x26,0x06,0x27,0x26,0x27,0x46,0x27,0xDE,0x01,0x00,0x16,0x00,0x9C, +0x28,0xAE,0x32,0x58,0x32,0x58,0x32,0x58,0x32,0x58,0x32,0x58,0x32,0x58,0x32,0x58, +0x32,0x7F,0x01,0x00,0x62,0x01,0x7C,0x29,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00, +0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x00,0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08, +0x00,0x10,0x00,0x20,0xB4,0x2C,0xC6,0x2C,0xFC,0x2D,0xDC,0x2C,0x30,0x2D,0x5A,0x2D, +0x62,0x2D,0x7C,0x2D,0xAE,0x2D,0xA6,0x2C,0xC4,0x2D,0xFC,0x2D,0x84,0x2E,0x6A,0x2E, +0x70,0x2E,0x6A,0x2E,0x6C,0x34,0x7E,0x34,0xCC,0x33,0xD8,0x33,0x8C,0x34,0xCC,0x33, +0xCC,0x33,0xCC,0x33,0x05,0x0A,0xF7,0x15,0x07,0x00,0x30,0xDB,0xC4,0x15,0xEE,0x29, +0x14,0x21,0x0A,0x02,0xF7,0x15,0x3F,0x00,0x8C,0xE9,0xF7,0x15,0x18,0x00,0x1C,0xDB, +0xF7,0x15,0xFC,0x2D,0xC0,0xFF,0x85,0x0A,0x57,0x11,0xEE,0x29,0x05,0x0A,0x04,0x0A, +0xF7,0x09,0x78,0x00,0x35,0x11,0x4A,0x05,0x74,0x11,0x6C,0x29,0x74,0x1D,0x52,0x05, +0xAC,0x28,0x74,0x1D,0x54,0x05,0xBC,0x28,0x74,0x1D,0x56,0x05,0xFC,0x28,0x74,0x1D, +0x58,0x05,0x0C,0x29,0xD4,0x0B,0xC5,0x65,0x30,0x00,0x37,0x21,0x8A,0xDA,0xE8,0x05, +0xF7,0x15,0x4A,0x2F,0xD0,0xF6,0xF7,0x15,0xE2,0x32,0x96,0xF6,0xF7,0x15,0xA6,0x14, +0x66,0xEA,0xF7,0x15,0xF4,0x2B,0xF4,0xD5,0xF7,0x15,0xA2,0x32,0xF2,0xD5,0xF7,0x15, +0x40,0x00,0x28,0xD5,0xF7,0x15,0x40,0x00,0x26,0xD5,0xF7,0x15,0x00,0x02,0xB2,0xCF, +0xF7,0x15,0x80,0x02,0x84,0x01,0xF7,0x15,0x02,0x32,0x6C,0xD6,0xF7,0x15,0x68,0x13, +0xFA,0xE8,0xF7,0x15,0x01,0x10,0x94,0xCF,0x77,0x00,0xAE,0xE5,0x34,0x1D,0x26,0x27, +0x3C,0x27,0x34,0x1D,0x26,0x27,0x4C,0x27,0x34,0x1D,0x4C,0x27,0x3C,0x27,0x34,0x0A, +0x5C,0x27,0xF4,0x55,0x00,0x04,0x5C,0x29,0x17,0x2D,0x9C,0x28,0x58,0x32,0x0B,0x02, +0x37,0x4D,0x7A,0x29,0xFA,0x07,0x37,0x4D,0x7A,0x29,0x62,0xCF,0x34,0x0A,0x1E,0x02, +0x34,0x1D,0x16,0x28,0xFE,0x01,0x34,0x1D,0x16,0x28,0x3C,0x28,0x34,0x1D,0x16,0x28, +0x2C,0x28,0x34,0x0A,0x06,0x27,0x34,0x0A,0x5C,0x28,0x34,0x0A,0x4C,0x28,0x34,0x0A, +0x8C,0x28,0xF4,0x35,0x00,0xF8,0x5C,0x29,0x05,0x02,0xF4,0x45,0x00,0x04,0x5C,0x29, +0x34,0x0A,0xDC,0x28,0x9E,0x01,0x00,0x64,0x01,0xD8,0x2A,0xF4,0x45,0xBF,0x02,0x5C, +0x29,0x34,0x1D,0x6E,0x27,0xC2,0x27,0x34,0x1D,0x6C,0x27,0x82,0x27,0x34,0x1D,0x6C, +0x27,0x92,0x27,0x34,0x1D,0x6E,0x27,0x06,0x28,0x34,0x0A,0xCC,0x28,0x34,0x0A,0x1C, +0x29,0x34,0x0A,0xEC,0x28,0x34,0x0A,0x2C,0x29,0x34,0x0A,0xA2,0x27,0x34,0x0A,0x3C, +0x29,0x34,0x0A,0x4C,0x29,0x87,0x00,0xF4,0x55,0x00,0x02,0x5C,0x29,0x34,0x1D,0xF2, +0x27,0xC2,0x27,0x34,0x1D,0xF2,0x27,0x06,0x28,0x87,0x00,0xF4,0x45,0x00,0x02,0x5C, +0x29,0x34,0x1D,0x6E,0x27,0xC2,0x27,0x87,0x00,0xC3,0x45,0x80,0xFF,0x05,0x1D,0x6C, +0x29,0xF7,0x20,0xBE,0xD9,0x16,0x03,0x57,0x2D,0x36,0x05,0x08,0x00,0x11,0x02,0x17, +0x2D,0x5C,0x27,0x06,0x00,0x22,0x04,0xFC,0x90,0x4C,0x27,0xB4,0x0A,0x5C,0x27,0xB4, +0x0A,0x4C,0x27,0x34,0x2D,0x4C,0x27,0x28,0x27,0x03,0x05,0x34,0x1D,0x26,0x27,0x4C, +0x27,0x87,0x00,0x57,0x2D,0x36,0x05,0x08,0x00,0x06,0x03,0xF4,0x55,0x00,0x04,0x5C, +0x29,0xF7,0x11,0xCA,0xD9,0x87,0x00,0xF7,0x09,0xFE,0xFE,0xE5,0x01,0xF7,0x0B,0x74, +0xD9,0xEF,0x03,0x44,0x1D,0x4A,0x05,0x77,0x00,0xEE,0xFE,0xB4,0x0A,0x8C,0x28,0x87, +0x00,0xF7,0x35,0x00,0x60,0x5C,0xCE,0x22,0x02,0xA6,0x10,0xE6,0x10,0x26,0x11,0x66, +0x11,0xC2,0x1D,0x2C,0x00,0x12,0x01,0xCA,0x45,0x80,0xA0,0xCA,0x35,0x00,0x40,0x07, +0x02,0x84,0x9C,0x01,0x00,0x83,0x92,0xC4,0x65,0x02,0x00,0xF7,0x09,0x6E,0xFF,0xD2, +0x0B,0x97,0x20,0x00,0x03,0x02,0x05,0xC2,0x15,0x80,0x02,0xCA,0x0B,0xEC,0x05,0x97, +0x10,0x80,0x02,0x85,0x15,0x84,0x15,0x83,0x15,0x82,0x15,0x87,0x00,0x00,0x00,0xF7, +0x45,0x00,0x60,0x0E,0xCE,0x87,0x00,0x37,0x08,0x04,0x00,0x72,0xFF,0x00,0x00,0xE6, +0x10,0x26,0x11,0x66,0x11,0x03,0x16,0x04,0x12,0xF7,0x09,0x2C,0xFF,0x85,0x15,0x84, +0x15,0x83,0x15,0x80,0x15,0x02,0x00,0xA6,0x10,0xE6,0x10,0x26,0x11,0x04,0x0A,0x02, +0x1D,0xD2,0x27,0xF4,0x35,0x00,0xF8,0x5C,0x29,0x18,0x02,0xF4,0x0B,0x5C,0x28,0x15, +0x02,0xC2,0x0B,0x1B,0x02,0xF4,0x0B,0x5C,0x27,0xE5,0x01,0x00,0x64,0x01,0x36,0x2C, +0x10,0x07,0x03,0x9F,0x3C,0x27,0xF7,0x09,0x34,0x00,0xF4,0x0A,0x5C,0x27,0xB4,0x0A, +0x3C,0x27,0x34,0x2D,0x3C,0x27,0x28,0x27,0xE6,0x05,0x34,0x1D,0x26,0x27,0x3C,0x27, +0xE2,0x01,0xD4,0x0B,0x37,0x21,0x4E,0xD8,0xDE,0x05,0x84,0x15,0x83,0x15,0x82,0x15, +0x87,0x00,0x03,0x1D,0xE2,0x27,0x34,0x0A,0xD2,0x27,0xCA,0x09,0xD4,0x01,0xF4,0x35, +0x80,0x00,0x5C,0x29,0x02,0x03,0x77,0x00,0xBE,0x01,0xC3,0x35,0x80,0x00,0x10,0x02, +0xF3,0xB5,0x80,0x00,0x62,0x0C,0x04,0x03,0xC2,0x9C,0xE2,0x0C,0x7A,0x00,0x98,0x29, +0xF3,0xB5,0x10,0x00,0x62,0x0C,0x04,0x03,0xC2,0x9C,0xE2,0x0C,0xFA,0x09,0xB2,0x29, +0xF7,0x09,0x24,0x02,0xF7,0x09,0xC0,0x06,0xFC,0x09,0x9C,0x28,0x87,0x00,0xF4,0x35, +0x00,0x02,0x5C,0x29,0x02,0x02,0x77,0x00,0xBC,0x01,0xF7,0x09,0x30,0x02,0xDD,0x01, +0xF4,0x35,0x00,0x02,0x5C,0x29,0x02,0x02,0x77,0x00,0xAA,0x01,0xF7,0x09,0x1E,0x02, +0xC3,0x15,0x04,0x00,0xE7,0x01,0xF4,0x0B,0x3C,0x29,0xE2,0x06,0xF7,0x09,0xC0,0xFF, +0xF7,0x09,0x3C,0x01,0x34,0x1D,0xA2,0x27,0xB2,0x27,0xF4,0x0B,0xCC,0x28,0x18,0x07, +0x34,0x2D,0x82,0x27,0x6C,0x27,0x05,0x07,0xF4,0x15,0x08,0x2D,0xD2,0x27,0x77,0x00, +0x34,0x03,0x34,0x1D,0xCC,0x28,0xDC,0x28,0xF7,0x09,0xC6,0xFD,0xF7,0x09,0x16,0x01, +0xF7,0x09,0x9E,0x04,0x03,0x1D,0x6C,0x29,0xF3,0x15,0x04,0x00,0x36,0x05,0x87,0x00, +0xF7,0x09,0xAE,0xFD,0xF7,0x09,0x48,0x04,0xF5,0x01,0xF4,0x35,0x00,0x02,0x5C,0x29, +0x06,0x02,0x77,0x00,0x40,0x01,0xF7,0x09,0x40,0xFF,0xF7,0x09,0xE2,0x00,0xF7,0x09, +0xAC,0x01,0xC3,0x35,0x80,0x00,0xF7,0x02,0xF3,0xB5,0x02,0x00,0x62,0x0C,0xF3,0x03, +0x77,0x00,0x26,0xFF,0xF4,0x55,0x80,0x00,0x5C,0x29,0xA4,0x01,0xF4,0x35,0x00,0x02, +0x5C,0x29,0x02,0x02,0x77,0x00,0x0E,0x01,0xF7,0x09,0x82,0x01,0xF7,0x09,0x0A,0xFF, +0xF7,0x09,0xAC,0x00,0xF9,0x01,0xF4,0x35,0x00,0x02,0x5C,0x29,0x02,0x02,0x77,0x00, +0xF4,0x00,0xF7,0x09,0x1E,0xFF,0xF7,0x09,0x96,0x00,0xF7,0x09,0x60,0x01,0x76,0x01, +0x00,0x64,0x01,0x94,0x2D,0xC3,0x35,0x80,0x00,0xF9,0x02,0xF3,0xB5,0x02,0x00,0x62, +0x0C,0xF5,0x03,0x77,0x00,0x0C,0xFF,0xF7,0x09,0x00,0xFF,0xF7,0x09,0x78,0x00,0xF7, +0x09,0xDA,0x00,0xC3,0x35,0x80,0x00,0xF7,0x02,0xF3,0xB5,0x02,0x00,0x62,0x0C,0xF3, +0x03,0x77,0x00,0xE6,0xFE,0xF4,0x35,0x00,0x02,0x5C,0x29,0x58,0x02,0xF7,0x09,0x4E, +0x00,0xF7,0x09,0x52,0x00,0xC3,0x15,0x5F,0x00,0xF7,0x09,0xCE,0xFE,0xF4,0x0B,0x1C, +0x29,0x02,0x07,0xF7,0x09,0x22,0x03,0x34,0x0A,0x3C,0x29,0x34,0x1D,0x6C,0x27,0x82, +0x27,0x34,0x0A,0xCC,0x28,0x34,0x0A,0xA2,0x27,0x77,0x00,0x18,0xFD,0x02,0x1D,0x6C, +0x29,0xF2,0x15,0x04,0x00,0x36,0x05,0xF7,0x09,0x14,0x00,0x34,0x0A,0x3C,0x29,0xFC, +0x15,0x0D,0x00,0x6C,0x27,0xF4,0x15,0x01,0x00,0xB2,0x27,0x77,0x00,0xBA,0xFC,0xB4, +0x11,0x06,0x27,0x77,0x00,0x84,0xFE,0xF4,0x0B,0x5C,0x28,0x04,0x02,0xF4,0x35,0x00, +0xF8,0x5C,0x29,0x04,0x03,0xF4,0x10,0xE2,0x27,0xB4,0x15,0xD2,0x27,0x87,0x00,0xF4, +0x45,0x80,0x00,0x5C,0x29,0xF3,0xB5,0x92,0x00,0x62,0x0C,0x0B,0x03,0xD7,0x20,0x03, +0x00,0x0A,0x03,0xD7,0x20,0x1A,0x00,0x07,0x03,0xD7,0x20,0x7F,0x00,0x02,0x03,0xC3, +0x55,0x80,0x00,0x77,0x00,0x40,0xFE,0x77,0x00,0x40,0xFE,0xB4,0x0A,0x3C,0x29,0x87, +0x00,0xF4,0x0B,0x3C,0x29,0x03,0x07,0xF4,0x0A,0x3C,0x29,0x87,0x00,0xC3,0x15,0x3F, +0x00,0x77,0x00,0x26,0xFE,0xF7,0x09,0x04,0x00,0x77,0x00,0x1E,0xFE,0x34,0x2D,0x82, +0x27,0x6C,0x27,0x10,0x07,0xF4,0x0A,0x82,0x27,0x03,0x9F,0x82,0x27,0xC3,0x35,0x80, +0x00,0x04,0x02,0xF3,0xB5,0x10,0x00,0x62,0x0C,0x01,0x02,0x87,0x00,0xC2,0x9C,0xE2, +0x0C,0x7A,0x00,0xB4,0x29,0xF4,0x0B,0xCC,0x28,0x08,0x07,0xF4,0x10,0xE2,0x27,0xCE, +0xE5,0x04,0x00,0xB4,0x15,0xD2,0x27,0x77,0x00,0xD2,0x01,0xD6,0x0B,0x87,0x00,0x34, +0x2D,0x82,0x27,0xC2,0x27,0x0D,0x04,0xFC,0x90,0x82,0x27,0xB4,0x0A,0xA2,0x27,0xB4, +0x0A,0x82,0x27,0x34,0x2D,0x82,0x27,0xC2,0x27,0x01,0x04,0x87,0x00,0x77,0x00,0x4C, +0x01,0x00,0x00,0xB3,0x01,0x00,0x64,0x01,0xF2,0x2E,0x87,0x00,0x34,0x2D,0x06,0x28, +0x6E,0x27,0xE7,0x04,0x17,0xAF,0x06,0x28,0x0D,0x00,0x1A,0x03,0x03,0x9F,0x06,0x28, +0xB4,0x0A,0x06,0x28,0xC3,0x35,0x80,0x00,0x09,0x02,0xF3,0xB5,0x10,0x00,0x62,0x0C, +0x05,0x03,0xC2,0x9C,0xE2,0x0C,0xB4,0x6C,0x46,0x2F,0x4C,0x29,0x34,0x2D,0x06,0x28, +0x6E,0x27,0x03,0x05,0xF4,0x0B,0x1C,0x29,0x01,0x02,0x87,0x00,0x77,0x00,0xD0,0x01, +0xF4,0x0B,0x4C,0x29,0xE3,0x06,0x34,0x1D,0x6E,0x27,0x06,0x28,0xC2,0x01,0x01,0x00, +0xFF,0xFF,0xF7,0x0B,0xFA,0xD3,0x02,0x04,0x77,0x00,0xA8,0xF1,0x26,0x11,0xF7,0x09, +0xF0,0xE4,0x66,0x11,0xF7,0x09,0xEA,0xE4,0xC5,0x1D,0xE4,0xD3,0x44,0x1D,0x4A,0x05, +0xF4,0x35,0x00,0xF8,0x5C,0x29,0x0B,0x03,0xF5,0x15,0x04,0x00,0x36,0x05,0xF7,0x09, +0x20,0xE2,0xF4,0x35,0x00,0xF8,0x5C,0x29,0xFA,0x02,0xF7,0x09,0x3A,0xE0,0xF4,0x35, +0x00,0x04,0x5C,0x29,0x13,0x02,0xF4,0x0A,0xB2,0x27,0x17,0x05,0x34,0x2D,0x1C,0x29, +0xEC,0x28,0x02,0x04,0xF7,0x09,0xD6,0x01,0x03,0x9F,0x92,0x27,0xB4,0x0A,0x92,0x27, +0x34,0x2D,0x92,0x27,0xC2,0x27,0x02,0x05,0xF7,0x09,0x04,0x02,0x85,0x15,0xF7,0x09, +0xA4,0xE4,0x84,0x15,0xF7,0x09,0x9E,0xE4,0x87,0x00,0x00,0x00,0xFE,0x01,0xF7,0x14, +0x02,0x00,0x30,0x1D,0x02,0x00,0x04,0x00,0xF0,0xE5,0x02,0x00,0x04,0x00,0x30,0x11, +0x0A,0x00,0xF4,0x54,0x5C,0x29,0xD3,0x0B,0xC8,0x10,0xF0,0x18,0x0C,0x00,0x83,0x15, +0x80,0x15,0x87,0x00,0x26,0x11,0x04,0x1C,0x0A,0x00,0xF4,0x35,0x00,0x04,0x5C,0x29, +0x12,0x03,0x30,0x0A,0x0C,0x00,0xF4,0x4C,0xF8,0xFF,0x5C,0x29,0xF4,0x35,0x00,0xF8, +0x5C,0x29,0x09,0x02,0x03,0x1D,0x6C,0x29,0xF3,0x25,0x08,0x00,0x36,0x05,0x04,0x02, +0xF4,0x45,0x00,0x04,0x5C,0x29,0xC8,0x10,0x84,0x15,0x83,0x15,0x87,0x00,0x26,0x11, +0x04,0x1C,0x0A,0x00,0xF4,0x4C,0xF4,0xFF,0x5C,0x29,0xF4,0x35,0x00,0x04,0x5C,0x29, +0xE5,0x02,0x4B,0x00,0x26,0x10,0xF7,0x09,0x24,0xDE,0x30,0x1D,0x6C,0x27,0x02,0x00, +0x30,0xED,0x82,0x27,0x02,0x00,0x03,0x05,0x64,0x01,0x00,0x60,0x01,0x50,0x30,0x00, +0x00,0x77,0x00,0x92,0xFF,0xB0,0x0C,0x02,0x00,0xB0,0x0B,0x02,0x00,0x30,0x1D,0xAC, +0x28,0x06,0x00,0x30,0x1D,0xBC,0x28,0x08,0x00,0x30,0x6D,0xCC,0x28,0x06,0x00,0x70, +0x0B,0x08,0x00,0xF7,0x08,0x4E,0xFF,0x6C,0x27,0x00,0x40,0x43,0x00,0xF7,0x08,0x6A, +0xFF,0xF7,0x08,0xA0,0xFF,0x34,0xEC,0x02,0x00,0xCC,0x28,0x34,0xEC,0x02,0x00,0xDC, +0x28,0x34,0x1D,0x6C,0x27,0x82,0x27,0x77,0x00,0x84,0xFF,0x26,0x10,0xF7,0x09,0xC4, +0xDD,0x30,0x1D,0xC2,0x27,0x02,0x00,0x30,0xED,0x6C,0x27,0x02,0x00,0x34,0x2C,0x02, +0x00,0xCC,0x28,0x03,0x07,0x30,0x1D,0xCC,0x28,0x02,0x00,0x30,0x0B,0x02,0x00,0x30, +0x1D,0xAC,0x28,0x06,0x00,0x30,0x1D,0xBC,0x28,0x08,0x00,0x30,0x6C,0x02,0x00,0x06, +0x00,0x30,0x6D,0xCC,0x28,0x06,0x00,0x70,0x0B,0x08,0x00,0xF7,0x08,0xE6,0xFE,0x6C, +0x27,0x00,0x20,0x45,0x00,0xF7,0x08,0x02,0xFF,0xF7,0x08,0x38,0xFF,0x34,0x6C,0x02, +0x00,0xCC,0x28,0x02,0x04,0x00,0x00,0xFE,0x01,0xF0,0x0C,0x02,0x00,0x34,0xEC,0x02, +0x00,0x82,0x27,0x77,0x00,0x18,0xFF,0x26,0x10,0xF7,0x09,0x58,0xDD,0xF0,0x15,0x10, +0x00,0x02,0x00,0x34,0x2C,0x02,0x00,0x1C,0x29,0x09,0x07,0xF4,0x0B,0x1C,0x29,0x03, +0x06,0x00,0x00,0x77,0x00,0xC0,0xFE,0x30,0x1D,0x1C,0x29,0x02,0x00,0x30,0x0B,0x02, +0x00,0x30,0x1D,0xFC,0x28,0x06,0x00,0x30,0x1D,0x0C,0x29,0x08,0x00,0x30,0x6D,0x2C, +0x29,0x06,0x00,0x70,0x0B,0x08,0x00,0xF7,0x08,0x7A,0xFE,0xF2,0x27,0x00,0x10,0x45, +0x00,0xF7,0x08,0x96,0xFE,0xF7,0x08,0xCC,0xFE,0x34,0x6C,0x02,0x00,0x1C,0x29,0x02, +0x04,0x00,0x00,0xFE,0x01,0x34,0xEC,0x02,0x00,0x2C,0x29,0x34,0x1D,0xF2,0x27,0x06, +0x28,0x77,0x00,0xAA,0xFE,0x26,0x10,0xF7,0x09,0xEA,0xDC,0xF0,0x15,0xE0,0xFF,0x02, +0x00,0x30,0x1D,0xFC,0x28,0x06,0x00,0x30,0x1D,0x0C,0x29,0x08,0x00,0x30,0x6D,0x1C, +0x29,0x06,0x00,0x70,0x0B,0x08,0x00,0xF7,0x08,0x2A,0xFE,0x6C,0x27,0x00,0x08,0x43, +0x00,0xF7,0x08,0x46,0xFE,0xF7,0x08,0x7C,0xFE,0xC2,0x01,0x00,0x62,0x01,0xAA,0x31, +0x34,0xEC,0x02,0x00,0x1C,0x29,0x01,0x04,0x00,0x00,0x77,0x00,0x68,0xFE,0x26,0x10, +0xF7,0x09,0xA8,0xDC,0xF0,0x15,0xE0,0xFF,0x02,0x00,0x30,0x1D,0xAC,0x28,0x06,0x00, +0x30,0x1D,0xBC,0x28,0x08,0x00,0x30,0x6D,0xEC,0x28,0x06,0x00,0x70,0x0B,0x08,0x00, +0xF7,0x08,0xE8,0xFD,0x6C,0x27,0x00,0x80,0x45,0x00,0xF7,0x08,0x04,0xFE,0xF7,0x08, +0x3A,0xFE,0x34,0xEC,0x02,0x00,0xEC,0x28,0x34,0x6C,0x02,0x00,0xDC,0x28,0x34,0x1D, +0x6C,0x27,0x92,0x27,0x77,0x00,0x1E,0xFE,0x26,0x11,0xC4,0x15,0x02,0x00,0x37,0x3D, +0x7A,0x29,0x86,0x00,0x15,0x03,0xF4,0x0B,0x1E,0x02,0x12,0x05,0x37,0x4D,0x7A,0x29, +0x78,0x00,0x34,0x2D,0xFE,0x01,0x18,0x28,0x03,0x05,0x34,0x1D,0x16,0x28,0xFE,0x01, +0xF4,0x0B,0x5C,0x28,0x11,0x02,0xF4,0x0B,0x4C,0x28,0x02,0x03,0xF7,0x09,0x32,0x00, +0xD4,0x0B,0x17,0x21,0x10,0x00,0xE3,0x05,0x84,0x15,0xD7,0x2D,0xBA,0xD2,0x01,0x00, +0x02,0x06,0xF7,0x09,0xC4,0xF9,0x02,0x00,0xF7,0x09,0xFC,0x00,0xEF,0x01,0xF4,0x0B, +0x1E,0x02,0x1F,0x05,0x34,0x2D,0xFE,0x01,0x18,0x28,0x03,0x05,0x34,0x1D,0x16,0x28, +0xFE,0x01,0x34,0x1D,0xFE,0x01,0x1E,0x02,0x34,0x2D,0x1E,0x02,0x3C,0x28,0x04,0x05, +0x34,0xED,0x18,0x28,0x1E,0x02,0x03,0x01,0x34,0xED,0x3C,0x28,0x1E,0x02,0x0A,0x04, +0x34,0x6D,0x1E,0x02,0x4C,0x28,0x17,0x5D,0x7A,0x29,0x00,0x00,0x37,0x5D,0x7A,0x29, +0x66,0xC7,0x87,0x00,0x00,0x00,0xFC,0x01,0x26,0x11,0x04,0x0A,0xF7,0x09,0x04,0x00, +0x84,0x15,0x02,0x00,0x37,0x08,0x04,0x00,0x74,0xFF,0x76,0xFF,0xD8,0x35,0x80,0x00, +0x11,0x03,0xF4,0x0B,0x4C,0x28,0x0E,0x07,0x38,0x9F,0x2C,0x28,0x00,0x00,0xF4,0x0A, +0x4C,0x28,0xB4,0x0A,0x2C,0x28,0x34,0x2D,0x2C,0x28,0x18,0x28,0x03,0x05,0x34,0x1D, +0x16,0x28,0x2C,0x28,0x80,0x15,0x87,0x00,0xF7,0x0B,0x62,0xD0,0x02,0x04,0x77,0x00, +0xDC,0xED,0xA6,0x10,0xF7,0x09,0x58,0xE1,0x26,0x11,0xF7,0x09,0x52,0xE1,0x66,0x11, +0xF7,0x09,0x4C,0xE1,0xC5,0x1D,0x46,0xD0,0x44,0x1D,0x4A,0x05,0x7B,0x01,0x00,0x62, +0x01,0x06,0x33,0xF4,0x35,0x00,0x04,0x5C,0x29,0x03,0x03,0xF7,0x09,0x74,0xF7,0x15, +0x01,0xF4,0x0B,0x5C,0x28,0x0A,0x03,0xF5,0x15,0x05,0x00,0x36,0x05,0xF7,0x09,0x76, +0xDE,0xF4,0x0B,0x5C,0x28,0xFB,0x02,0xF7,0x09,0x92,0xDC,0xF4,0x35,0x00,0x04,0x5C, +0x29,0xEC,0x02,0xF7,0x09,0x34,0x00,0xFC,0x09,0x9C,0x28,0x85,0x15,0xF7,0x09,0x1A, +0xE1,0x84,0x15,0xF7,0x09,0x14,0xE1,0x82,0x15,0xF7,0x09,0x0E,0xE1,0x87,0x00,0xA6, +0x10,0xE6,0x10,0x26,0x1D,0x5C,0x28,0x34,0x0A,0x5C,0x28,0x02,0x1D,0x6C,0x28,0x03, +0x1D,0x7C,0x28,0xDE,0x09,0x83,0x15,0x82,0x15,0x87,0x00,0xF4,0x0B,0x5C,0x28,0x02, +0x03,0x00,0x00,0xFE,0x01,0xF4,0x0B,0x8C,0x28,0x09,0x07,0xC2,0x10,0xC3,0x15,0x07, +0x00,0xF4,0x09,0x06,0x34,0xF4,0x0A,0x8C,0x28,0xFB,0x06,0x83,0x10,0xC3,0x45,0x80, +0xFF,0xF3,0xB5,0x40,0x00,0x62,0x0C,0x04,0x03,0xC2,0x9C,0xE2,0x0C,0x7A,0x00,0xB8, +0x29,0xD7,0x20,0x20,0x00,0x0F,0x04,0xC2,0x10,0xC3,0x15,0x5E,0x00,0xF7,0x09,0x52, +0x00,0x83,0x10,0xC3,0x65,0x40,0x00,0xF7,0x09,0x48,0x00,0x83,0x10,0xF4,0x65,0x02, +0x00,0x06,0x27,0x04,0x01,0xB4,0x0A,0x06,0x27,0xF7,0x09,0x36,0x00,0x34,0x2D,0x06, +0x27,0x16,0x27,0x16,0x05,0x34,0x0A,0x06,0x27,0xC2,0x10,0xC3,0x15,0x0D,0x00,0xF7, +0x09,0x20,0x00,0xC3,0x15,0x0A,0x00,0xF7,0x09,0x18,0x00,0xF7,0x0B,0xFC,0xF5,0x07, +0x02,0x03,0x0A,0xF7,0x09,0x0C,0x00,0xF7,0x09,0x08,0x00,0xF7,0x09,0x04,0x00,0x83, +0x10,0x87,0x00,0x34,0x2D,0x3C,0x28,0x18,0x28,0x03,0x05,0x34,0x1D,0x16,0x28,0x3C, +0x28,0xFC,0x90,0x3C,0x28,0xB4,0x0A,0x4C,0x28,0xB4,0x0A,0x3C,0x28,0x17,0x2D,0x9C, +0x28,0x58,0x32,0x0C,0x03,0x17,0x2D,0x4C,0x28,0x20,0x00,0x17,0x04,0x34,0x2D,0x3C, +0x28,0x18,0x28,0x19,0x05,0x34,0x1D,0x16,0x28,0x3C,0x28,0x87,0x00,0x34,0x2D,0x3C, +0x28,0xFE,0x01,0x0B,0x03,0x34,0x2D,0x3C,0x28,0x18,0x28,0x0D,0x05,0x34,0x1D,0x16, +0x28,0x3C,0x28,0x34,0x2D,0x3C,0x28,0xFE,0x01,0x06,0x02,0xB4,0x15,0x5C,0x28,0x26, +0x01,0x00,0x60,0x01,0x62,0x34,0xB4,0x10,0x6C,0x28,0xF4,0x10,0x7C,0x28,0x87,0x00, +0xC3,0x15,0x20,0x00,0xB4,0x0A,0x06,0x27,0xF7,0x09,0x8E,0xFF,0xC3,0x15,0x02,0x00, +0xA9,0x01,0xF4,0x0B,0x06,0x27,0xC0,0x03,0xF4,0x0A,0x06,0x27,0x77,0x00,0x40,0xFF, +0xC3,0x15,0x20,0x00,0xB4,0x0A,0x06,0x27,0xF7,0x09,0x6E,0xFF,0xF4,0x35,0x07,0x00, +0x06,0x27,0xF8,0x02,0xC3,0x15,0x09,0x00,0x77,0x00,0x28,0xFF,0x26,0x10,0xF7,0x09, +0x9C,0xDF,0x66,0x10,0xA6,0x10,0xE6,0x10,0x26,0x11,0x66,0x11,0x37,0x0A,0xBE,0xD2, +0xF7,0x1F,0x58,0xD2,0xD4,0xD2,0xF7,0x45,0x00,0xF0,0xCE,0xD2,0x05,0x0A,0xF7,0x09, +0xA0,0x00,0x0B,0x01,0xF7,0x55,0x04,0x00,0xA4,0xD2,0xF7,0x09,0xB2,0x01,0xF7,0x09, +0xD4,0x01,0xF7,0x35,0x04,0x00,0x96,0xD2,0xF2,0x03,0xF7,0x45,0x04,0x00,0x8E,0xD2, +0xF7,0x09,0x9C,0x01,0xC3,0x25,0x0D,0x00,0x1A,0x03,0xC3,0x25,0x22,0x00,0x21,0x03, +0xC3,0x25,0x5B,0x00,0x27,0x03,0xC3,0x25,0x5D,0x00,0x01,0x02,0x02,0x89,0xC3,0x25, +0x3A,0x00,0x2B,0x03,0xF3,0xB5,0x08,0x00,0x62,0x0C,0xD9,0x03,0xC0,0x9C,0xE2,0x0C, +0xC0,0x0C,0x01,0x1C,0xB2,0x08,0x40,0x12,0xC0,0x45,0xFF,0xEF,0xD8,0x01,0xC0,0x1F, +0xEA,0xD1,0xF7,0x09,0x4C,0xDF,0x3F,0x10,0xE2,0xD1,0x37,0x0A,0x0E,0xD2,0x77,0x00, +0xFA,0x15,0xF7,0x09,0x46,0x02,0xF7,0x09,0x8A,0x00,0x00,0x01,0xF7,0x55,0x04,0x00, +0x2C,0xD2,0xC5,0x01,0xF7,0x09,0xEC,0x00,0xF7,0x1F,0xC0,0xD1,0xEE,0xD1,0xF7,0x09, +0x20,0xDF,0xF7,0x45,0x04,0x00,0x16,0xD2,0xBA,0x01,0xF7,0x55,0x00,0x01,0x0E,0xD2, +0xAE,0x01,0x37,0x8A,0x08,0xD2,0xF7,0x09,0x88,0x01,0xF7,0x09,0x0E,0x02,0xC0,0x9C, +0x62,0x0C,0xC0,0x35,0x04,0x00,0x05,0x02,0x37,0xD0,0xF2,0xD1,0xF7,0x09,0x82,0x01, +0xF4,0x01,0xF7,0x09,0xB6,0x01,0x87,0x00,0xF7,0x35,0x20,0x00,0xE0,0xD1,0x08,0x02, +0xC1,0x1D,0xA8,0xD1,0xC0,0x15,0x00,0xB0,0xF7,0x09,0x00,0x16,0x00,0x88,0x00,0x88, +0xC0,0x15,0x00,0x20,0xF7,0x35,0x00,0x01,0xC4,0xD1,0x05,0x03,0xC0,0x15,0x00,0x30, +0x3B,0x01,0x00,0x62,0x01,0xBC,0x35,0xF7,0x45,0x00,0x01,0xB8,0xD1,0xF7,0x09,0x10, +0x23,0x02,0x01,0xF7,0x09,0x66,0x25,0x01,0x50,0x00,0x88,0x37,0x8A,0xA6,0xD1,0xF7, +0x09,0x26,0x01,0x02,0x01,0xF7,0x09,0xAA,0x01,0xC0,0x9C,0x62,0x0C,0xC0,0x35,0x04, +0x00,0x0C,0x03,0xC3,0x25,0x20,0x00,0x12,0x03,0xC3,0x25,0x5D,0x00,0x0B,0x03,0xC3, +0x25,0x5B,0x00,0x0C,0x03,0xC3,0x25,0x0D,0x00,0x09,0x03,0x37,0x50,0x76,0xD1,0xF7, +0x09,0x06,0x01,0xE8,0x01,0xF7,0x0B,0x6E,0xD1,0x01,0x02,0x02,0x89,0xC0,0x15,0x00, +0xC0,0xC1,0x15,0x00,0xC0,0xF7,0x09,0x2A,0x01,0x87,0x00,0xC0,0x15,0x00,0xC0,0xC1, +0x1D,0x20,0xD1,0xF7,0x35,0x20,0x00,0x4C,0xD1,0xF7,0x03,0xF7,0x35,0x04,0x00,0x44, +0xD1,0xF3,0x02,0xC0,0x15,0x00,0x90,0x77,0x00,0x82,0xFF,0x37,0x8A,0x36,0xD1,0xF7, +0x09,0x86,0x00,0xF7,0x09,0x3C,0x01,0xC3,0x25,0x20,0x00,0xFB,0x03,0xC3,0x25,0x5B, +0x00,0x11,0x03,0xC3,0x25,0x5D,0x00,0x0B,0x03,0xF7,0x09,0x6E,0xFF,0x00,0x01,0xF7, +0x09,0x4A,0x00,0xC3,0x25,0x5B,0x00,0x06,0x03,0xC3,0x25,0x5D,0x00,0xEA,0x02,0xF7, +0x09,0x62,0x00,0x87,0x00,0xF7,0x09,0xC2,0xFF,0xF7,0x1F,0x96,0xD0,0xC4,0xD0,0xF7, +0x09,0xF6,0xDD,0x03,0x0A,0xEC,0x01,0xF7,0x35,0x00,0x01,0xE8,0xD0,0x1C,0x03,0xF7, +0x45,0x00,0x01,0xE0,0xD0,0x26,0x10,0xF7,0x09,0xAA,0xDD,0x66,0x10,0xC0,0x15,0x00, +0x00,0xC1,0x15,0x4A,0x0C,0xF7,0x09,0x04,0x00,0x77,0x00,0x9E,0x14,0x42,0x11,0xF7, +0x09,0x12,0x24,0xC5,0x0B,0x07,0x02,0xF7,0x09,0xAA,0xDD,0xBF,0x10,0x54,0xD0,0xFF, +0x55,0x00,0xF0,0x4E,0xD0,0x85,0x10,0x87,0x00,0x80,0x13,0x4E,0x11,0x05,0x0A,0xB7, +0x0A,0xA4,0xD0,0x48,0x00,0x82,0x15,0xF7,0x09,0x7E,0xDD,0xC5,0x0B,0x05,0x02,0xF7, +0x09,0x82,0xDD,0xFF,0x15,0x00,0xF0,0x2A,0xD0,0x85,0x15,0xF7,0x09,0x6A,0xDD,0xC0, +0x15,0x00,0xF0,0xC1,0x1F,0x1C,0xD0,0x4A,0x00,0x37,0x0A,0x84,0xD0,0x04,0x0A,0x37, +0x0A,0x40,0xD0,0xC4,0x55,0x00,0x80,0x87,0x00,0x26,0x10,0xF7,0x09,0x36,0xDD,0x66, +0x10,0xA6,0x10,0x55,0x01,0x00,0x64,0x01,0x18,0x37,0xC3,0x35,0x80,0x00,0x0A,0x02, +0xC3,0x35,0x7F,0x00,0x07,0x03,0xB7,0x0A,0x5E,0xD0,0xC4,0x65,0x00,0x40,0x04,0x04, +0xF7,0x90,0x50,0xD0,0x77,0x00,0x14,0x14,0xF7,0x90,0x49,0xD0,0xC1,0x1D,0x44,0xD0, +0xF7,0x09,0x2A,0x00,0xC4,0x55,0x00,0x80,0xF5,0x01,0xF7,0x0B,0x3A,0xD0,0x1C,0x03, +0xC4,0x65,0x00,0x40,0x01,0x04,0x00,0x88,0x26,0x10,0xF7,0x09,0xEE,0xDC,0x66,0x10, +0xA6,0x10,0xC1,0x9D,0x1E,0xD0,0xF7,0x09,0x04,0x00,0x77,0x00,0x0C,0x19,0x02,0x11, +0xC0,0x15,0x00,0x70,0xF7,0x09,0x54,0x23,0xC4,0x0B,0x05,0x02,0xB7,0x10,0xCA,0xCF, +0xF7,0x55,0x00,0xC0,0xC4,0xCF,0x84,0x10,0x87,0x00,0x26,0x10,0xF7,0x09,0xBC,0xDC, +0x66,0x10,0xC3,0x9D,0x04,0xD0,0xC1,0x1D,0xFE,0xCF,0x13,0x05,0x04,0x02,0xC3,0x15, +0x0D,0x00,0x77,0x00,0xAC,0x13,0xF7,0x09,0xCE,0x1F,0xC0,0x55,0x00,0x80,0x37,0x10, +0xE6,0xCF,0x43,0x90,0xC1,0x00,0x77,0x90,0xE0,0xCF,0xC3,0x0B,0xEA,0x03,0x77,0x00, +0x90,0x13,0xF7,0x45,0x00,0xF0,0xD0,0xCF,0xF8,0x01,0xCE,0x15,0x8A,0x50,0x02,0x00, +0x26,0x10,0xF7,0x09,0x76,0xDC,0x80,0x1D,0x02,0x00,0xF7,0x15,0xC4,0x20,0xBE,0xCF, +0xF7,0x09,0xAC,0x00,0xF7,0x09,0xAC,0xDC,0x00,0x1C,0xFE,0xFF,0xC0,0x45,0x00,0xFF, +0xC0,0x0C,0x00,0x1C,0x26,0x3D,0x48,0x00,0x80,0x15,0xF7,0x09,0x62,0xDC,0x02,0x00, +0x26,0x10,0x80,0x1D,0x02,0x00,0xF7,0x09,0x6E,0x00,0x17,0x30,0x01,0x00,0x01,0x03, +0x80,0x0A,0x36,0x10,0x02,0x00,0x80,0x15,0x87,0x00,0x26,0x10,0xF7,0x09,0x2C,0xDC, +0x66,0x10,0xC0,0x1D,0x4E,0xCF,0x1C,0x03,0xC1,0x1D,0x4A,0xCF,0x09,0x01,0x26,0x10, +0xF7,0x09,0x18,0xDC,0x66,0x10,0xC0,0x1D,0x32,0xCF,0xC1,0x1D,0x30,0xCF,0x10,0x03, +0xE6,0x10,0xF7,0x09,0x06,0x00,0x83,0x15,0x77,0x00,0x06,0x13,0x17,0x20,0x00,0x20, +0x02,0x87,0x77,0x00,0x96,0x01,0x40,0x10,0xC0,0x65,0x04,0x00,0x77,0x00,0x18,0x00, +0xF7,0x09,0x9C,0xFF,0x20,0x45,0x4D,0x50,0x54,0x59,0x20,0x00,0x77,0x00,0xE2,0x12, +0x80,0x1F,0x00,0x00,0x8E,0x0A,0x8E,0x0A,0x0D,0x01,0x00,0x62,0x01,0x76,0x38,0xE6, +0x10,0x03,0x94,0x03,0x03,0xFF,0x09,0x1C,0xCF,0xFB,0x01,0x83,0x15,0x87,0x00,0xF7, +0x45,0x80,0x00,0xF8,0xCE,0x03,0x01,0xF7,0x55,0x80,0x00,0xF0,0xCE,0x26,0x10,0xF7, +0x09,0xB0,0xDB,0xE6,0x10,0x03,0x0A,0xB1,0x00,0x40,0x0C,0x07,0x01,0x03,0x0A,0xC0, +0x0C,0x12,0x03,0x43,0x0C,0xC0,0x0C,0x43,0x0C,0xC0,0x0C,0x43,0x0C,0x04,0x02,0xF7, +0x35,0x80,0x00,0xC8,0xCE,0xF3,0x03,0xF7,0x55,0x80,0x00,0xC0,0xCE,0xC3,0x55,0x30, +0x00,0xFF,0x09,0xD0,0xCE,0xEB,0x01,0xC3,0x55,0x30,0x00,0xF7,0x35,0x80,0x00,0xAC, +0xCE,0x02,0x02,0xFF,0x09,0xBE,0xCE,0x83,0x15,0x80,0x15,0x87,0x00,0xF7,0x55,0x40, +0x00,0x9A,0xCE,0x03,0x01,0xF7,0x45,0x40,0x00,0x92,0xCE,0x66,0x10,0xF7,0x09,0x52, +0xDB,0xE6,0x10,0xC1,0x15,0x08,0x00,0x37,0x10,0xC2,0xC5,0x06,0x04,0x37,0x0B,0xBC, +0xC5,0xC3,0x15,0x2D,0x00,0xFF,0x09,0x8C,0xCE,0x77,0x1C,0x5A,0x39,0xAA,0xC5,0xF7, +0x35,0x40,0x00,0x68,0xCE,0x07,0x02,0xF7,0xB5,0x08,0x00,0xA5,0xC5,0x09,0x02,0xF7, +0x55,0x40,0x00,0x58,0xCE,0xC3,0x1D,0x94,0xC5,0xC3,0x65,0x30,0x00,0xFF,0x09,0x64, +0xCE,0xF7,0x1D,0x86,0xC5,0x86,0xC5,0xC1,0xE5,0x02,0x00,0xE6,0x02,0xC3,0x1D,0x7C, +0xC5,0xC3,0x65,0x30,0x00,0xFF,0x09,0x4C,0xCE,0x83,0x15,0xF7,0x09,0x08,0xDB,0x81, +0x15,0x87,0x00,0x01,0x00,0x0A,0x00,0x64,0x00,0xE8,0x03,0x10,0x27,0x77,0x00,0xF6, +0xFE,0x26,0x10,0xF7,0x09,0xDC,0xDA,0x66,0x10,0xC0,0x1D,0xF2,0xCD,0xC0,0x6D,0xAC, +0xCD,0x37,0x20,0x9C,0xCD,0xF3,0x83,0xC1,0x1F,0x96,0xCD,0xE6,0x10,0xF7,0x09,0x06, +0x00,0x83,0x15,0x77,0x00,0xC2,0x11,0x40,0x10,0xC0,0x45,0xFF,0x0F,0xC0,0x25,0x00, +0x70,0x04,0x03,0xC0,0x25,0x00,0x90,0x01,0x83,0x0B,0x89,0xF7,0x09,0x52,0x00,0x87, +0x00,0x26,0x10,0xF7,0x09,0x9C,0xDA,0x66,0x10,0xE6,0x10,0xC0,0x1D,0xC0,0xCD,0xC1, +0x1D,0xBE,0xCD,0xF7,0x09,0x06,0x00,0x83,0x15,0x77,0x00,0x8C,0x11,0xC0,0x45,0xFF, +0x0F,0x17,0x20,0x00,0x30,0x02,0x86,0x77,0x00,0x78,0xFE,0x8D,0x01,0x00,0x59,0x01, +0xD2,0x39,0x17,0x20,0x00,0x30,0x05,0x03,0x0F,0x01,0xF7,0x55,0x04,0x00,0xAC,0xCD, +0x07,0x01,0xC3,0x95,0x3A,0x00,0xFF,0x09,0xB2,0xCD,0xF7,0x45,0x04,0x00,0x9C,0xCD, +0xF7,0x09,0x82,0x1D,0x77,0x00,0x32,0x00,0xC0,0x25,0x00,0xB0,0x37,0x03,0xC0,0x25, +0x00,0xA0,0x34,0x03,0xF7,0x55,0x04,0x00,0x82,0xCD,0xC0,0x25,0x00,0x90,0xF0,0x03, +0xC0,0x25,0x00,0xC0,0x0A,0x03,0xC0,0x25,0x00,0x70,0x09,0x03,0xF7,0x45,0x04,0x00, +0x6A,0xCD,0xC0,0x25,0x00,0xF0,0x33,0x03,0x03,0x89,0xF7,0x09,0x48,0x1D,0xF7,0x09, +0x22,0x00,0x43,0x90,0x02,0x07,0xFF,0x09,0x62,0xCD,0xC1,0x00,0x43,0x90,0x02,0x07, +0xFF,0x09,0x58,0xCD,0x01,0x10,0xC1,0x45,0x00,0xF0,0x03,0x03,0xF7,0x09,0x26,0x1D, +0xF0,0x01,0x87,0x00,0xF7,0x35,0x04,0x00,0x32,0xCD,0xFB,0x03,0xF7,0x35,0x08,0x00, +0x2A,0xCD,0xF7,0x02,0xC3,0x95,0x22,0x00,0x7F,0x00,0x30,0xCD,0x37,0x0A,0x12,0xCD, +0xC0,0x45,0xFF,0x0F,0xC0,0x25,0x00,0xA0,0x06,0x03,0xF7,0x09,0xF8,0x1C,0xC0,0x35, +0xFF,0x0F,0x01,0x03,0x13,0x89,0x40,0x10,0xF7,0x09,0x60,0xFE,0x87,0x00,0x26,0x10, +0xF7,0x09,0xB6,0xD9,0x66,0x10,0xA6,0x10,0xF7,0x0B,0xFE,0xCC,0x04,0x03,0xC3,0x15, +0x5B,0x00,0xFF,0x09,0xF6,0xCC,0xB7,0x0A,0xF0,0xCC,0x42,0x10,0xC2,0x35,0xFF,0x0F, +0x10,0x03,0xF7,0x55,0x08,0x00,0xD4,0xCC,0x02,0x01,0xF7,0x09,0xD4,0xD9,0xF7,0x09, +0xB2,0x1C,0x02,0x10,0xC0,0x45,0xFF,0x0F,0xF7,0x09,0xF8,0xFE,0xC2,0x35,0xFF,0x0F, +0xF4,0x02,0xF7,0x0A,0xC4,0xCC,0x04,0x03,0xC3,0x15,0x5D,0x00,0xFF,0x09,0xBC,0xCC, +0x77,0x00,0x66,0x10,0x26,0x10,0xF7,0x09,0x60,0xD9,0x66,0x10,0xE6,0x10,0xF7,0x09, +0x84,0x1C,0xF7,0x09,0x90,0xFD,0xF7,0x09,0x98,0xD9,0x40,0x10,0xF7,0x09,0x86,0xFD, +0x83,0x15,0x77,0x00,0x4A,0x10,0xF7,0x09,0xDA,0xFF,0x00,0x00,0xF7,0x09,0xD4,0xFF, +0x77,0x00,0xEC,0x44,0xC0,0x1D,0x48,0xCC,0x1D,0x03,0xF7,0x09,0xE0,0xFC,0x4C,0x45, +0x56,0x45,0x4C,0x20,0x00,0x66,0x01,0x00,0x64,0x01,0x26,0x3B,0xF7,0x09,0xC2,0xFD, +0xF7,0x09,0xD0,0xFC,0x20,0x20,0x4C,0x49,0x4E,0x45,0x20,0x00,0xC0,0x1D,0x1C,0xCC, +0xF7,0x09,0xAE,0xFD,0xF7,0x09,0xBC,0xFC,0x20,0x20,0x49,0x4E,0x20,0x00,0xC1,0x1D, +0x06,0xCC,0xF7,0x09,0x9A,0xFE,0xF7,0x09,0x46,0xD9,0xC5,0x1D,0xF0,0xC7,0xC0,0x15, +0x9E,0x07,0x40,0x61,0xD0,0x15,0x01,0x00,0x10,0x0A,0x10,0x0A,0x10,0x0A,0x10,0x0A, +0x75,0x1D,0x62,0x05,0x5E,0x05,0xC0,0x15,0x84,0x02,0xC0,0x6D,0xBC,0xCB,0x08,0x0A, +0x30,0x0A,0x02,0x00,0x06,0x10,0x37,0x10,0xAA,0xCB,0x37,0x10,0x9E,0xCB,0xC0,0xE5, +0x54,0x01,0x37,0x10,0x98,0xCB,0xC0,0x15,0x08,0x04,0xC0,0x6D,0x9C,0xCB,0x30,0x0A, +0x02,0x00,0x08,0x0A,0x37,0x10,0x76,0xCB,0x37,0x10,0x7E,0xCB,0x37,0x10,0x72,0xCB, +0xC0,0xE5,0x54,0x01,0x37,0x10,0x6C,0xCB,0xC0,0x15,0x48,0x07,0xC1,0x15,0x1F,0x00, +0x10,0x0A,0xC1,0x0A,0xFD,0x04,0x37,0x0A,0x88,0xC9,0x77,0x00,0x88,0xE1,0xF7,0x09, +0x52,0x0B,0x03,0x01,0x44,0x10,0xF7,0x09,0x96,0x1C,0x1C,0x89,0x45,0x10,0xF7,0x09, +0xBE,0xD8,0xF7,0x09,0x1E,0xFC,0x54,0x4F,0x20,0x00,0x01,0x11,0xF7,0x09,0x00,0xFE, +0x42,0x11,0xF7,0x09,0x84,0x1B,0x05,0x10,0xF7,0x09,0x80,0x1B,0xC1,0x0B,0x0B,0x03, +0x02,0x10,0xF7,0x09,0x92,0xD8,0xF7,0x09,0x70,0x1B,0x02,0x10,0xF7,0x09,0xD8,0xFD, +0xC2,0x35,0xFF,0x0F,0xF6,0x02,0xF7,0x09,0x86,0xD8,0xC5,0x35,0xFF,0x0F,0x0B,0x03, +0x42,0x11,0xF7,0x09,0x54,0x1B,0x02,0x10,0x7F,0x10,0xF2,0xCA,0xF7,0x09,0x16,0x00, +0xC2,0x35,0xFF,0x0F,0xF6,0x02,0xF7,0x09,0xCA,0xFB,0x45,0x4E,0x44,0x00,0xF7,0x09, +0x5E,0xD8,0x77,0x00,0xDE,0x12,0x26,0x10,0xF7,0x09,0x04,0xD8,0x66,0x10,0xA6,0x10, +0xE6,0x10,0xF7,0x45,0x08,0x00,0x3A,0xCB,0xC2,0x1F,0xC2,0xCA,0x02,0x01,0xF7,0x09, +0x36,0xD8,0xF7,0x09,0x14,0x1B,0x02,0x10,0xF7,0x09,0x5E,0xFD,0xC2,0x35,0xFF,0x0F, +0xF6,0x02,0xF7,0x09,0x2A,0xD8,0x77,0x00,0xD0,0x0E,0xF7,0x35,0x02,0x00,0x12,0xCB, +0x01,0x02,0x87,0x00,0xB7,0x0A,0x18,0xCB,0x26,0x10,0xF3,0x01,0x00,0x25,0x00,0x84, +0x3C,0xF7,0x09,0xC2,0xD7,0xF7,0x09,0x72,0xFB,0x43,0x54,0x3D,0x00,0xF7,0x45,0x08, +0x00,0xF6,0xCA,0xF7,0x09,0x0E,0xFD,0xF7,0x09,0x60,0xFB,0x20,0x43,0x4F,0x3D,0x00, +0xE7,0x01,0x00,0xFF,0x00,0xA4,0x3C,0xF7,0x09,0x84,0xFB,0xF7,0x09,0x52,0xFB,0x20, +0x53,0x3D,0x00,0xF7,0x45,0x08,0x00,0xD6,0xCA,0xF7,0x09,0xAE,0xFC,0xF7,0x09,0xDC, +0xD7,0x37,0x0A,0xD8,0xCA,0x80,0x15,0xF7,0x09,0x96,0xD7,0x87,0x00,0xF7,0x45,0x01, +0x00,0xB4,0xCA,0x03,0x01,0xF7,0x55,0x01,0x00,0xAC,0xCA,0xF7,0x09,0x42,0x0A,0x02, +0x01,0xF7,0x09,0xDE,0x1B,0x1C,0x89,0x42,0x10,0xF7,0x09,0xCE,0x1A,0xC0,0x45,0x00, +0x01,0xF7,0x35,0x01,0x00,0x90,0xCA,0x02,0x03,0xC0,0x55,0x00,0x01,0xF7,0x09,0xA0, +0x1A,0x77,0x00,0x1C,0x12,0xF7,0x55,0x02,0x00,0x84,0xCA,0x77,0x00,0x12,0x12,0xF7, +0x45,0x02,0x00,0x7A,0xCA,0x77,0x00,0x08,0x12,0xC1,0x1D,0x46,0xCA,0x77,0x00,0x6E, +0x10,0xC1,0x1D,0xD6,0xC4,0x77,0x00,0x66,0x10,0x8E,0x3E,0xA4,0x41,0x1A,0x40,0x44, +0x40,0x12,0x43,0x38,0x43,0x00,0x3F,0xC4,0x41,0xE0,0x3E,0x64,0x42,0x2A,0x3E,0x58, +0x43,0xEC,0x42,0xE4,0x41,0xCE,0x3F,0xF8,0x3F,0x78,0x40,0x52,0x3E,0x88,0x3F,0x62, +0x40,0xA6,0x3F,0xA6,0x40,0xA2,0x3E,0x72,0x43,0xC2,0x40,0x44,0x3F,0x72,0x3E,0x2E, +0x42,0x0A,0x42,0xC4,0x42,0xF8,0x40,0x20,0x3F,0xDC,0x40,0x12,0x41,0x64,0x3F,0xB8, +0x3E,0x2E,0x41,0x8E,0x42,0xF6,0x3D,0x7E,0x3D,0xBA,0x3D,0x58,0x41,0x7E,0x41,0x2B, +0x00,0xF7,0x09,0xE8,0xD6,0x3F,0x10,0x92,0xC9,0xF7,0x09,0xA2,0xFA,0xF7,0x09,0x70, +0xFA,0x20,0x44,0x4F,0x45,0x53,0x4E,0x27,0x54,0x20,0x4C,0x49,0x4B,0x45,0x20,0x00, +0x7F,0x01,0x00,0x19,0x00,0x9E,0x3D,0xF7,0x09,0xC6,0xFB,0xF7,0x09,0x58,0xFA,0x20, +0x41,0x53,0x20,0x49,0x4E,0x50,0x55,0x54,0x2E,0x00,0x66,0x01,0x00,0x2D,0x00,0xB2, +0x3D,0xF7,0x09,0xE4,0xD6,0x77,0x00,0x5A,0xFD,0xF7,0x09,0xAC,0xD6,0x7F,0x10,0x56, +0xC9,0xF7,0x09,0x66,0xFA,0xF7,0x09,0x34,0xFA,0x20,0x44,0x4F,0x45,0x53,0x4E,0x27, +0x54,0x20,0x4C,0x49,0x4B,0x45,0x20,0x00,0x24,0x01,0x00,0x19,0x00,0xDA,0x3D,0xF7, +0x09,0x8A,0xFB,0xF7,0x09,0x1C,0xFA,0x20,0x41,0x53,0x20,0x49,0x4E,0x50,0x55,0x54, +0x2E,0x00,0xA2,0x01,0x00,0x25,0x00,0xEE,0x3D,0xF7,0x09,0xA8,0xD6,0x77,0x00,0x1E, +0xFD,0xF7,0x09,0x32,0xFA,0xF7,0x09,0x00,0xFA,0x20,0x44,0x4F,0x45,0x53,0x4E,0x27, +0x54,0x20,0x4C,0x49,0x4B,0x45,0x20,0x00,0x00,0x01,0x00,0x19,0x00,0x0E,0x3E,0xF7, +0x09,0x56,0xFB,0xF7,0x09,0xE8,0xF9,0x20,0x41,0x53,0x20,0x49,0x4E,0x50,0x55,0x54, +0x2E,0x00,0xD6,0x01,0x00,0x69,0x00,0x22,0x3E,0xF7,0x09,0x74,0xD6,0x77,0x00,0xEA, +0xFC,0xF7,0x09,0xFE,0xF9,0xF7,0x09,0xCC,0xF9,0x20,0x49,0x53,0x20,0x49,0x4E,0x20, +0x54,0x48,0x45,0x20,0x57,0x52,0x4F,0x4E,0x47,0x20,0x50,0x4C,0x41,0x43,0x45,0x2E, +0x00,0xF7,0x09,0x4C,0xD6,0x77,0x00,0xC2,0xFC,0xF7,0x09,0xC2,0xF9,0xF7,0x09,0xA4, +0xF9,0x20,0x44,0x49,0x44,0x4E,0x27,0x54,0x20,0x4F,0x55,0x54,0x50,0x55,0x54,0x21, +0x00,0xF7,0x09,0x2C,0xD6,0x77,0x00,0xA2,0xFC,0xF7,0x09,0x88,0xF9,0x4F,0x55,0x54, +0x20,0x4F,0x46,0x20,0x54,0x4F,0x4B,0x45,0x4E,0x53,0x2E,0x00,0xFD,0x01,0x00,0x53, +0x00,0x86,0x3E,0xF7,0x09,0x10,0xD6,0x77,0x00,0x86,0xFC,0xF7,0x09,0x6C,0xF9,0x42, +0x41,0x44,0x20,0x53,0x53,0x2E,0x00,0xF7,0x09,0xFC,0xD5,0x77,0x00,0x72,0xFC,0xF7, +0x09,0x58,0xF9,0x4E,0x4F,0x54,0x20,0x59,0x45,0x54,0x21,0x21,0x00,0xF7,0x09,0xE6, +0xD5,0x77,0x00,0x5C,0xFC,0xF7,0x09,0x42,0xF9,0x57,0x48,0x41,0x54,0x20,0x53,0x48, +0x4F,0x55,0x4C,0x44,0x20,0x49,0x20,0x44,0x4F,0x20,0x57,0x49,0x54,0x48,0x20,0x00, +0x1D,0x01,0x00,0x29,0x00,0xD4,0x3E,0xF7,0x09,0x90,0xFA,0xF7,0x09,0xBE,0xD5,0x77, +0x00,0x34,0xFC,0xF7,0x09,0xC4,0xFA,0xF7,0x09,0x16,0xF9,0x20,0x48,0x41,0x53,0x20, +0x4E,0x4F,0x20,0x56,0x41,0x4C,0x55,0x45,0x2E,0x00,0xAF,0x01,0x00,0x25,0x00,0xF8, +0x3E,0xF7,0x09,0x9E,0xD5,0x77,0x00,0x14,0xFC,0xF7,0x09,0xFA,0xF8,0x45,0x58,0x54, +0x52,0x41,0x20,0x52,0x49,0x47,0x48,0x54,0x20,0x50,0x41,0x52,0x45,0x4E,0x2E,0x00, +0xD2,0x01,0x00,0x49,0x00,0x18,0x3F,0xF7,0x09,0x7E,0xD5,0x77,0x00,0xF4,0xFB,0xF7, +0x09,0xDA,0xF8,0x54,0x4F,0x4F,0x20,0x4D,0x55,0x43,0x48,0x20,0x49,0x4E,0x53,0x49, +0x44,0x45,0x20,0x50,0x41,0x52,0x45,0x4E,0x53,0x2E,0x00,0xF7,0x09,0x5A,0xD5,0x77, +0x00,0xD0,0xFB,0xF7,0x09,0xE4,0xF8,0xF7,0x09,0xB2,0xF8,0x20,0x4F,0x55,0x54,0x20, +0x4F,0x46,0x20,0x50,0x4C,0x41,0x43,0x45,0x2E,0x00,0x2B,0x01,0x00,0x47,0x00,0x5C, +0x3F,0xF7,0x09,0x3A,0xD5,0x77,0x00,0xB0,0xFB,0xF7,0x09,0x96,0xF8,0x55,0x4E,0x45, +0x58,0x50,0x45,0x43,0x54,0x45,0x44,0x20,0x45,0x4E,0x44,0x20,0x4F,0x46,0x20,0x4C, +0x49,0x4E,0x45,0x2E,0x00,0xF7,0x09,0x16,0xD5,0x77,0x00,0x8C,0xFB,0xF7,0x09,0x72, +0xF8,0x4E,0x4F,0x20,0x53,0x54,0x4F,0x52,0x41,0x47,0x45,0x20,0x4C,0x45,0x46,0x54, +0x2E,0x00,0xA9,0x01,0x00,0x79,0x00,0x9E,0x3F,0xF7,0x09,0xF8,0xD4,0x77,0x00,0x6E, +0xFB,0xF7,0x09,0xBE,0xF9,0xF7,0x09,0x50,0xF8,0x20,0x4E,0x4F,0x54,0x20,0x22,0x54, +0x52,0x55,0x45,0x22,0x20,0x4F,0x46,0x20,0x22,0x46,0x41,0x4C,0x53,0x45,0x22,0x2E, +0x00,0xF7,0x09,0xD0,0xD4,0x77,0x00,0x46,0xFB,0xF7,0x09,0x2C,0xF8,0x4C,0x49,0x4E, +0x45,0x20,0x00,0xF7,0x09,0x10,0xF9,0xF7,0x09,0x1E,0xF8,0x20,0x44,0x4F,0x45,0x53, +0x4E,0x27,0x54,0x20,0x45,0x58,0x49,0x53,0x54,0x2E,0x00,0xF7,0x09,0xA6,0xD4,0x77, +0x00,0x1C,0xFB,0xF7,0x09,0x02,0xF8,0x4C,0x49,0x4E,0x45,0x20,0x4E,0x55,0x4D,0x42, +0x45,0x52,0x20,0x54,0x4F,0x4F,0x20,0x42,0x49,0x47,0x2E,0x00,0x7C,0x01,0x00,0x2F, +0x00,0x12,0x40,0xF7,0x09,0x84,0xD4,0x77,0x00,0xFA,0xFA,0xF7,0x09,0xE0,0xF7,0x43, +0x48,0x41,0x52,0x20,0x00,0xF7,0x09,0x9C,0xE0,0xF7,0x09,0xD2,0xF7,0x20,0x4F,0x55, +0x54,0x20,0x4F,0x46,0x20,0x50,0x4C,0x41,0x43,0x45,0x2E,0x00,0xE1,0x01,0x00,0x67, +0x00,0x3C,0x40,0xF7,0x09,0x5A,0xD4,0x77,0x00,0xD0,0xFA,0xF7,0x09,0xB6,0xF7,0x43, +0x41,0x4E,0x54,0x20,0x50,0x52,0x49,0x4E,0x54,0x20,0x41,0x20,0x53,0x4E,0x41,0x50, +0x00,0xF7,0x09,0x3C,0xD4,0x77,0x00,0xB2,0xFA,0xF7,0x09,0x98,0xF7,0x23,0x20,0x54, +0x4F,0x4F,0x20,0x42,0x49,0x47,0x00,0xF7,0x09,0x26,0xD4,0x77,0x00,0x9C,0xFA,0xF7, +0x09,0x82,0xF7,0x59,0x4F,0x55,0x20,0x44,0x4F,0x4E,0x27,0x54,0x20,0x48,0x41,0x56, +0x45,0x20,0x41,0x20,0x44,0x49,0x53,0x50,0x4C,0x41,0x59,0x20,0x43,0x4F,0x4E,0x53, +0x4F,0x4C,0x45,0x00,0x8A,0x01,0x00,0x57,0x00,0x9E,0x40,0xF7,0x09,0xF8,0xD3,0x77, +0x00,0x6E,0xFA,0xF7,0x09,0x54,0xF7,0x4E,0x55,0x4D,0x42,0x45,0x52,0x20,0x54,0x4F, +0x4F,0x20,0x4C,0x4F,0x4E,0x47,0x00,0xF7,0x09,0xDC,0xD3,0x77,0x00,0x52,0xFA,0xF7, +0x09,0x38,0xF7,0x4F,0x55,0x54,0x20,0x4F,0x46,0x20,0x42,0x4F,0x55,0x4E,0x44,0x53, +0x00,0xF7,0x09,0xC2,0xD3,0x77,0x00,0x38,0xFA,0xF7,0x09,0x1E,0xF7,0x54,0x4F,0x4F, +0x20,0x4D,0x41,0x4E,0x59,0x20,0x4C,0x49,0x4E,0x45,0x53,0x00,0x3C,0x01,0x00,0x3B, +0x00,0xF0,0x40,0xF7,0x09,0xA6,0xD3,0x77,0x00,0x1C,0xFA,0xF7,0x09,0x02,0xF7,0x53, +0x4E,0x41,0x50,0x20,0x54,0x4F,0x4F,0x20,0x44,0x45,0x45,0x50,0x00,0xF7,0x09,0x8C, +0xD3,0x77,0x00,0x02,0xFA,0xF7,0x09,0xE8,0xF6,0x54,0x4F,0x4F,0x20,0x4D,0x41,0x4E, +0x59,0x20,0x53,0x4E,0x41,0x50,0x53,0x00,0x77,0x01,0x00,0x7B,0x00,0x26,0x41,0xF7, +0x09,0x70,0xD3,0x77,0x00,0xE6,0xF9,0xF7,0x09,0xCC,0xF6,0x59,0x4F,0x55,0x20,0x43, +0x41,0x4E,0x54,0x20,0x57,0x49,0x50,0x45,0x20,0x57,0x48,0x49,0x4C,0x45,0x20,0x49, +0x4E,0x20,0x43,0x41,0x4D,0x45,0x52,0x41,0x00,0xF7,0x09,0x46,0xD3,0x77,0x00,0xBC, +0xF9,0xF7,0x09,0xA2,0xF6,0x59,0x4F,0x55,0x20,0x44,0x4F,0x4E,0x54,0x20,0x48,0x41, +0x56,0x45,0x20,0x54,0x48,0x45,0x20,0x44,0x49,0x53,0x50,0x4C,0x41,0x59,0x00,0xF7, +0x09,0x20,0xD3,0x77,0x00,0x96,0xF9,0xF7,0x09,0x7C,0xF6,0x59,0x4F,0x55,0x20,0x44, +0x4F,0x4E,0x54,0x20,0x48,0x41,0x56,0x45,0x20,0x54,0x48,0x45,0x20,0x54,0x55,0x52, +0x54,0x4C,0x45,0x00,0x65,0x01,0x00,0x8F,0x00,0x9C,0x41,0xF7,0x09,0xFA,0xD2,0x77, +0x00,0x70,0xF9,0xF7,0x09,0x56,0xF6,0x43,0x41,0x4E,0x54,0x20,0x46,0x49,0x4E,0x44, +0x20,0x4C,0x49,0x4E,0x45,0x20,0x4E,0x4F,0x2E,0x20,0x00,0xF7,0x09,0xDA,0xD2,0x77, +0x00,0x50,0xF9,0xF7,0x09,0x36,0xF6,0x2E,0x2E,0x2E,0x20,0x48,0x41,0x53,0x20,0x4E, +0x4F,0x20,0x4D,0x45,0x41,0x4E,0x49,0x4E,0x47,0x2E,0x00,0xF7,0x09,0xBA,0xD2,0x77, +0x00,0x30,0xF9,0xF7,0x09,0x16,0xF6,0x4C,0x49,0x4E,0x45,0x20,0x2E,0x2E,0x2E,0x20, +0x43,0x48,0x41,0x4E,0x47,0x45,0x44,0x20,0x42,0x59,0x20,0x45,0x44,0x49,0x54,0x2E, +0x00,0xF7,0x09,0x94,0xD2,0x77,0x00,0x0A,0xF9,0xF7,0x09,0xF0,0xF5,0x50,0x52,0x4F, +0x43,0x45,0x44,0x55,0x52,0x45,0x20,0x2E,0x2E,0x2E,0x20,0x4E,0x4F,0x54,0x20,0x48, +0x45,0x52,0x45,0x00,0x09,0x01,0x00,0x21,0x00,0x26,0x42,0xF7,0x09,0x70,0xD2,0x77, +0x00,0xE6,0xF8,0x37,0x0A,0x56,0xC5,0xF7,0x09,0xC8,0xF5,0x50,0x52,0x4F,0x43,0x45, +0x44,0x55,0x52,0x45,0x20,0x00,0xFD,0x01,0x00,0x1F,0x00,0x42,0x42,0xF7,0x09,0x62, +0xF7,0xF7,0x09,0xB4,0xF5,0x20,0x41,0x4C,0x52,0x45,0x41,0x44,0x59,0x20,0x45,0x58, +0x49,0x53,0x54,0x53,0x2E,0x00,0x0A,0x01,0x00,0x65,0x00,0x5C,0x42,0xF7,0x09,0x3A, +0xD2,0x77,0x00,0xB0,0xF8,0xF7,0x09,0x40,0xF7,0xF7,0x09,0x92,0xF5,0x20,0x49,0x53, +0x20,0x41,0x4E,0x20,0x49,0x4E,0x56,0x41,0x4C,0x49,0x44,0x20,0x4C,0x4F,0x47,0x4F, +0x20,0x4E,0x41,0x4D,0x45,0x2E,0x00,0xF7,0x09,0x10,0xD2,0x77,0x00,0x86,0xF8,0x37, +0x0A,0xF6,0xC4,0xF7,0x09,0x12,0xF7,0xF7,0x09,0x64,0xF5,0x20,0x43,0x41,0x4E,0x27, +0x54,0x20,0x42,0x45,0x20,0x41,0x20,0x44,0x55,0x4D,0x4D,0x59,0x20,0x49,0x4E,0x50, +0x55,0x54,0x20,0x54,0x4F,0x20,0x22,0x54,0x4F,0x22,0x2E,0x00,0xC4,0x01,0x00,0x2D, +0x00,0xBC,0x42,0xF7,0x09,0xDA,0xD1,0x77,0x00,0x50,0xF8,0xF7,0x09,0x36,0xF5,0x41, +0x52,0x49,0x54,0x48,0x4D,0x45,0x54,0x49,0x43,0x20,0x52,0x45,0x53,0x55,0x4C,0x54, +0x20,0x54,0x4F,0x4F,0x20,0x42,0x49,0x47,0x2E,0x00,0x24,0x01,0x00,0x71,0x00,0xE4, +0x42,0xF7,0x09,0xB2,0xD1,0x77,0x00,0x28,0xF8,0xF7,0x09,0x0E,0xF5,0x41,0x52,0x49, +0x54,0x48,0x4D,0x45,0x54,0x49,0x43,0x20,0x49,0x4E,0x50,0x55,0x54,0x20,0x54,0x4F, +0x4F,0x20,0x42,0x49,0x47,0x2E,0x00,0xF7,0x09,0x8C,0xD1,0x77,0x00,0x02,0xF8,0xF7, +0x09,0xE8,0xF4,0x43,0x41,0x4E,0x54,0x20,0x22,0x54,0x4F,0x22,0x20,0x49,0x4E,0x20, +0x41,0x20,0x50,0x52,0x4F,0x43,0x45,0x44,0x55,0x52,0x45,0x2E,0x00,0xF7,0x09,0x66, +0xD1,0x77,0x00,0xDC,0xF7,0xF7,0x09,0xC2,0xF4,0x43,0x41,0x4E,0x54,0x20,0x22,0x54, +0x4F,0x22,0x20,0x49,0x4E,0x20,0x22,0x54,0x4F,0x22,0x2E,0x00,0x49,0x01,0x00,0x47, +0x00,0x50,0x43,0xF7,0x09,0x46,0xD1,0x77,0x00,0xBC,0xF7,0xF7,0x09,0xA2,0xF4,0x49, +0x4E,0x56,0x41,0x4C,0x49,0x44,0x20,0x4E,0x4F,0x44,0x45,0x2E,0x00,0xF7,0x09,0x2C, +0xD1,0x77,0x00,0xA2,0xF7,0xF7,0x09,0x88,0xF4,0x20,0x4F,0x4E,0x4C,0x59,0x20,0x57, +0x48,0x45,0x4E,0x20,0x49,0x4E,0x20,0x41,0x20,0x50,0x52,0x4F,0x43,0x45,0x44,0x55, +0x52,0x45,0x2E,0x00,0x87,0x01,0x00,0x64,0x01,0x92,0x43,0xF7,0x09,0x04,0xD1,0x77, +0x00,0x7A,0xF7,0x83,0x13,0xCE,0x15,0x00,0xF0,0x02,0x0A,0xC3,0x0B,0x27,0x07,0xC1, +0x1F,0x6E,0xC3,0x40,0x10,0xC0,0x45,0xFF,0x0F,0xC0,0x25,0x00,0xF0,0x10,0x03,0xC0, +0x25,0x00,0x90,0x04,0x02,0xF7,0x09,0xB6,0x13,0xC0,0x15,0x00,0xC0,0x80,0x50,0xF7, +0x09,0xFE,0x16,0xB7,0x10,0x82,0xC3,0xF7,0x09,0xAC,0xD0,0xC3,0x0A,0xE7,0x01,0xC1, +0x35,0xFF,0x0F,0xF9,0x03,0xC2,0x0B,0x06,0x03,0xF7,0x09,0x0A,0x02,0xC0,0x5D,0x68, +0xC3,0xF7,0x09,0xB6,0x13,0xC1,0x45,0x00,0xF0,0x42,0x10,0xEB,0x01,0x82,0x55,0x37, +0x0A,0x56,0xC3,0x77,0x00,0x4A,0x0C,0x83,0x13,0xCE,0x15,0x48,0x50,0x02,0x0A,0xC3, +0x0A,0x0D,0x05,0xC1,0x1F,0x0A,0xC3,0x40,0x10,0xC0,0x45,0xFF,0x0F,0x80,0x50,0xF7, +0x09,0xAE,0x16,0xB7,0x10,0x32,0xC3,0xF7,0x09,0x5C,0xD0,0xF1,0x01,0x37,0x0A,0x28, +0xC3,0xC2,0x55,0x00,0xF0,0x87,0x00,0x05,0x0A,0x02,0x01,0xC5,0x15,0x18,0x00,0x83, +0x13,0xCE,0x15,0x48,0x50,0xC3,0x0A,0x01,0x06,0x22,0x89,0xF7,0x09,0x1E,0x09,0x01, +0x01,0x26,0x89,0x47,0x61,0x40,0x10,0xC0,0x45,0x00,0xF0,0xF7,0x09,0x28,0xD0,0xC1, +0x1F,0xBE,0xC2,0x42,0x10,0xC2,0x45,0xFF,0x0F,0xC3,0x0A,0xD8,0x01,0xF7,0x09,0x86, +0x01,0x77,0x10,0xE0,0xC2,0xF7,0x09,0x0E,0xD0,0xF7,0x09,0x90,0xFF,0xC2,0x45,0x00, +0xF0,0x83,0x10,0x42,0x11,0xF7,0x09,0x3C,0x13,0xC0,0x50,0xF7,0x09,0x1C,0x13,0xC2, +0x1D,0xC2,0xC2,0x37,0x0A,0xBE,0xC2,0x87,0x00,0x02,0x0A,0x83,0x15,0x28,0x07,0xC1, +0x1F,0x7E,0xC2,0x57,0x20,0x00,0xB0,0x03,0x87,0x57,0x20,0x00,0xC0,0x19,0x87,0xC0, +0x15,0x00,0xC0,0xF7,0x09,0xFA,0x06,0x28,0x89,0xC1,0x35,0xFF,0x0F,0x0D,0x03,0xF7, +0x0B,0x96,0xC2,0x08,0x03,0xF7,0x09,0x50,0x01,0xF7,0x09,0xF8,0x12,0xC0,0x5D,0x88, +0xC2,0xF7,0x09,0xD6,0x12,0x77,0x10,0x80,0xC2,0xF7,0x09,0xAA,0xCF,0xC3,0x0A,0xDE, +0x01,0xF7,0x09,0xB2,0x07,0x28,0x89,0xF7,0x0B,0x6E,0xC2,0xF4,0x03,0xED,0x01,0xC2, +0x1D,0x66,0xC2,0xC2,0x55,0x00,0xC0,0x83,0x01,0x42,0x01,0x00,0x62,0x01,0xF0,0x44, +0xF7,0x09,0x88,0x08,0x0D,0x01,0xF7,0x09,0x6A,0x01,0x01,0x02,0x26,0x89,0xD6,0x0B, +0xC1,0x10,0x05,0x0A,0xF7,0x09,0x54,0x01,0xC2,0x55,0x00,0xC0,0x77,0x00,0x1C,0x0B, +0x42,0x10,0xF7,0x09,0xA2,0x12,0x77,0x00,0x0A,0x0B,0xF7,0x09,0x5E,0x08,0x12,0x01, +0xF7,0x09,0x40,0x01,0xEB,0x03,0xD6,0x0B,0x17,0x20,0x7F,0x00,0x05,0x83,0x00,0x8A, +0x01,0x10,0x80,0x10,0xF7,0x09,0x90,0x15,0xC2,0x45,0x00,0xF0,0xC2,0x55,0x00,0xC0, +0x77,0x00,0xE8,0x0A,0x42,0x10,0xF7,0x09,0x72,0x12,0xC0,0x45,0x00,0xF0,0xC0,0x55, +0x00,0xF0,0x77,0x00,0xCE,0x0A,0xF7,0x09,0x22,0x08,0x0B,0x01,0x42,0x10,0xE6,0x15, +0x66,0x46,0x03,0x0A,0xC1,0x10,0xDE,0x09,0xFD,0x02,0xC1,0x0B,0xCA,0x02,0x26,0x89, +0x01,0x10,0xF7,0x09,0x00,0x12,0xC0,0x35,0xFF,0x0F,0xFA,0x02,0x77,0x00,0xA8,0x0A, +0xF7,0x09,0xF8,0x07,0x12,0x01,0xF7,0x09,0x86,0x00,0xF7,0x09,0x2A,0x12,0xC0,0x00, +0x05,0x02,0x00,0x0A,0x42,0x20,0x03,0x02,0x01,0x0A,0x03,0x01,0x00,0x8A,0xF7,0x09, +0xFC,0x11,0xC1,0x55,0x00,0xC0,0x77,0x00,0x7E,0x0A,0xF7,0x09,0x40,0x00,0x02,0x11, +0x07,0x03,0xF7,0x09,0x06,0x12,0xC0,0x45,0xFF,0x0F,0xF7,0x09,0xE4,0x11,0x42,0x10, +0xC2,0x55,0x00,0xF0,0x77,0x00,0x64,0x0A,0xF7,0x09,0x98,0x07,0x0C,0x01,0x42,0x10, +0x01,0x0A,0xE6,0x15,0x66,0x46,0x81,0x0A,0xDE,0x09,0xFD,0x02,0xC1,0x0A,0xF7,0x09, +0xAE,0x07,0x77,0x00,0x42,0x0A,0x42,0x10,0xF7,0x09,0x46,0x10,0xF8,0x01,0x04,0x0A, +0x05,0x0A,0xC1,0x35,0xFF,0x0F,0x07,0x03,0xF7,0x09,0x7A,0x11,0x44,0x11,0xF7,0x09, +0xB0,0xF0,0x01,0x10,0xF6,0x01,0xC1,0x1F,0x0E,0xC1,0xF7,0x09,0x70,0xCE,0x87,0x00, +0xC0,0x15,0x64,0x46,0xE6,0x10,0x26,0x11,0x66,0x11,0x26,0x10,0x05,0x0A,0xDE,0x09, +0x0E,0x03,0xC1,0x10,0xDE,0x09,0x09,0x03,0x26,0x10,0xA6,0x10,0xC3,0x00,0xC1,0x50, +0xF7,0x09,0x28,0x00,0x82,0x15,0x80,0x15,0xF2,0x01,0xF7,0x09,0x1E,0x00,0xC1,0x1F, +0xD6,0xC0,0xF7,0x09,0x38,0xCE,0x42,0x11,0xC1,0x45,0x00,0xF0,0xA2,0x01,0x00,0x62, +0x01,0x4C,0x46,0xC2,0x45,0x00,0xF0,0x37,0x0A,0xF8,0xC0,0x85,0x15,0x84,0x15,0x83, +0x15,0x87,0x00,0xC0,0x15,0x00,0x70,0x77,0x00,0x4E,0xF0,0x42,0x10,0xC2,0x35,0xFF, +0x0F,0xF7,0x03,0xF7,0x09,0x60,0x11,0x03,0x90,0x03,0x03,0xC3,0x45,0x00,0xFF,0xDE, +0x09,0x00,0x8A,0xC0,0x00,0xF3,0x03,0x03,0x10,0xDE,0x09,0xF0,0x01,0xF7,0x45,0x10, +0x00,0x00,0xC1,0x03,0x01,0xF7,0x55,0x10,0x00,0xF8,0xC0,0xF7,0x1F,0x80,0xC0,0xAE, +0xC0,0xF7,0x09,0xE0,0xCD,0xC1,0x1F,0x76,0xC0,0x40,0x10,0xC0,0x45,0xFF,0x0F,0xC0, +0x25,0x00,0x90,0x17,0x02,0xC0,0x15,0x00,0x30,0xF7,0x09,0x42,0x11,0xF7,0x35,0x10, +0x00,0xD0,0xC0,0x07,0x03,0xFF,0x1D,0x86,0xC0,0x54,0xC0,0x37,0x0A,0x80,0xC0,0x77, +0x00,0x92,0x09,0xC0,0x1F,0x48,0xC0,0xF7,0x09,0xAA,0xCD,0x37,0x0A,0x70,0xC0,0x77, +0x00,0x42,0x08,0xC0,0x25,0x00,0xC0,0x01,0x03,0x28,0x89,0xC1,0x35,0xFF,0x0F,0xFC, +0x03,0xFF,0x1D,0x5A,0xC0,0x28,0xC0,0x77,0x10,0x54,0xC0,0xF7,0x09,0x58,0x12,0x00, +0x01,0xF7,0x1F,0x1A,0xC0,0x48,0xC0,0xD6,0x01,0xF7,0x09,0x18,0x00,0x08,0x89,0xF7, +0x09,0x7E,0x11,0x08,0x89,0xF7,0x09,0x58,0xCD,0x7F,0x10,0x02,0xC0,0x37,0x0A,0x2E, +0xC0,0x77,0x00,0x40,0x09,0xC1,0x1F,0xF6,0xBF,0xF7,0x09,0x58,0xCD,0x40,0x10,0xC0, +0x45,0xFF,0x0F,0xC0,0x25,0x00,0x90,0x09,0x03,0xC0,0x25,0x00,0xC0,0x01,0x03,0x28, +0x89,0x77,0x10,0x0A,0xC0,0xF7,0x09,0x08,0x12,0x87,0x00,0x77,0x00,0x42,0x09,0xC0, +0x1F,0xCC,0xBF,0x01,0x10,0xC0,0x45,0xFF,0x0F,0xC0,0x25,0x00,0xC0,0x04,0x03,0xC0, +0x25,0x00,0xF0,0x01,0x03,0x28,0x89,0xF7,0x09,0x9A,0xEF,0xF7,0x15,0x0E,0x37,0x32, +0xC0,0x37,0x0A,0x2C,0xC0,0xF7,0x09,0x1C,0xF2,0xF7,0x09,0xD2,0xEF,0x0D,0x01,0xFF, +0x1D,0xCC,0xBF,0x9A,0xBF,0xF7,0x15,0xC4,0x20,0x18,0xC0,0xF7,0x09,0x20,0xED,0xF7, +0x09,0x16,0xD8,0x77,0x00,0xCE,0x08,0x04,0x01,0xC0,0x1F,0x82,0xBF,0xF7,0x09,0xE4, +0xCC,0x77,0x00,0x80,0x07,0xB7,0x0A,0xF8,0xBF,0xF7,0x09,0xC0,0x03,0x82,0x15,0x7D, +0x01,0x00,0x62,0x01,0xA8,0x47,0xF7,0x09,0xB2,0xCC,0xF7,0x09,0x1A,0x00,0xF7,0x09, +0xE6,0xCC,0x77,0x00,0x66,0x07,0xF7,0x09,0xAA,0x03,0x82,0x15,0xF7,0x09,0x9C,0xCC, +0xF7,0x09,0x04,0x00,0x77,0x00,0x54,0x07,0xF7,0x55,0x08,0x00,0xBC,0xBF,0xF7,0x09, +0x94,0xF1,0xC0,0x1F,0x40,0xBF,0xF7,0x09,0xA2,0xCC,0xC2,0x0A,0xF5,0x06,0x87,0x00, +0xF7,0x09,0x2C,0xD8,0xF7,0x25,0x1C,0x0C,0x8C,0xBF,0x01,0x03,0x1F,0x89,0x77,0x00, +0x6A,0x08,0x06,0x89,0x77,0x00,0x64,0x08,0xF7,0x09,0x4E,0x05,0x01,0x0B,0x77,0x00, +0x88,0x05,0x00,0x0A,0x83,0x15,0x06,0x07,0xF7,0x09,0x3E,0x05,0x40,0x60,0x1A,0x85, +0xC3,0x0A,0xFA,0x06,0x01,0x10,0x04,0x01,0xF7,0x09,0x28,0x05,0x01,0xE0,0x12,0x85, +0x77,0x00,0x66,0x05,0xC5,0x15,0xC4,0xFE,0xC4,0x15,0xC9,0xFE,0xD5,0x15,0x01,0x00, +0xC2,0x15,0x02,0x00,0x83,0x15,0xC3,0x0A,0x06,0x05,0xF7,0x09,0x0C,0x05,0x4D,0x10, +0x8C,0xB0,0xF9,0x02,0x1D,0x89,0x41,0x19,0xEB,0x01,0x03,0x0A,0x02,0x01,0xC3,0x15, +0xB8,0xFF,0xF7,0x09,0xEE,0x04,0xC0,0x0B,0xF5,0x03,0xC5,0x15,0xC4,0xFE,0x4D,0x10, +0x37,0x10,0x5A,0xB6,0x41,0x15,0xC7,0x60,0x41,0x15,0xDA,0x01,0xC5,0x1D,0xA6,0xBE, +0x41,0x15,0x42,0x13,0xC4,0x15,0xFF,0x0F,0xF7,0x09,0x16,0x00,0x03,0x01,0xC1,0x15, +0x14,0xC0,0x02,0x01,0xC1,0x15,0x16,0xC0,0xF7,0x65,0x02,0x00,0x88,0xBE,0x77,0x00, +0x94,0x07,0x42,0x20,0x20,0x03,0x40,0x10,0xF7,0x09,0x44,0x00,0x27,0x02,0xF7,0x09, +0x3C,0x00,0x18,0x02,0xF7,0x09,0xCC,0x0E,0x26,0x10,0xF7,0x09,0x9A,0xCB,0xF7,0x09, +0x1C,0x0F,0xA6,0x10,0x02,0x10,0xF7,0x09,0xD8,0xFF,0x0E,0x01,0x81,0x15,0xF7,0x09, +0x9A,0xCB,0x82,0x15,0xC1,0x45,0x00,0xF0,0xC2,0x45,0x00,0xF0,0x42,0x20,0x03,0x03, +0xF7,0x09,0xD0,0xFF,0x87,0x00,0x00,0x88,0x96,0x25,0x77,0x00,0x7E,0xCB,0x80,0x10, +0x00,0x31,0xF8,0x03,0x00,0x41,0xC0,0x25,0x00,0xF0,0x87,0x00,0xF7,0x09,0xEE,0xFF, +0xF1,0x03,0xC0,0x15,0x00,0xA0,0xF7,0x09,0xAC,0x02,0x03,0x01,0xC3,0x15,0xB0,0xFF, +0x06,0x01,0x0E,0x01,0x00,0x64,0x01,0x04,0x49,0xC0,0x15,0x00,0xC0,0xF7,0x09,0x9C, +0x02,0x28,0x89,0x03,0x0A,0x77,0x10,0x14,0xBC,0x81,0x10,0xC2,0x1D,0x0E,0xBC,0xF7, +0x09,0x8A,0x02,0xDB,0x01,0x42,0x20,0xDA,0x03,0xC7,0x60,0x77,0x10,0x22,0xBE,0xB7, +0x10,0x20,0xBE,0xE6,0x15,0x66,0x46,0x45,0x10,0x05,0x31,0x18,0x03,0x26,0x10,0x41, +0x11,0xF7,0x09,0x36,0x0E,0x05,0x10,0x80,0x15,0xC1,0x8B,0x04,0x03,0xDE,0x09,0x09, +0x03,0xC1,0xA0,0x06,0x02,0xC1,0x00,0xF0,0x03,0xDE,0x09,0x03,0x03,0xC1,0xA0,0xEC, +0x03,0xD6,0x0B,0x37,0x0A,0xEA,0xBD,0x37,0x0A,0xE8,0xBD,0xB7,0x01,0xDE,0x09,0xF8, +0x02,0x37,0x0A,0xDC,0xBD,0x37,0x0A,0xDA,0xBD,0xB1,0x01,0xF7,0x09,0xCC,0x03,0x40, +0x20,0x0B,0x06,0xF7,0x09,0xE8,0xCA,0xFF,0x15,0x16,0xC0,0x90,0xBD,0x77,0x00,0xD2, +0x06,0xF7,0x09,0xB6,0x03,0x40,0x20,0xF5,0x04,0xF7,0x09,0xD2,0xCA,0xFF,0x15,0x14, +0xC0,0x7A,0xBD,0xF4,0x01,0xF7,0x09,0xA2,0x03,0x40,0x20,0xF6,0x04,0xEA,0x01,0xF7, +0x09,0x98,0x03,0x40,0x20,0xF1,0x07,0xE5,0x01,0xC1,0x1F,0x60,0xBD,0xF7,0x09,0xC2, +0xCA,0xC0,0x15,0x00,0xB0,0xF7,0x09,0xE4,0x01,0xDC,0x01,0xE6,0x01,0xC1,0x1F,0x4C, +0xBD,0xF7,0x09,0xAE,0xCA,0xC1,0x35,0xFF,0x0F,0xDF,0x03,0xD3,0x01,0xC1,0x1F,0x3C, +0xBD,0xF7,0x09,0x9E,0xCA,0xC1,0x45,0xFF,0x0F,0xC1,0x25,0x00,0xF0,0xD5,0x03,0xC9, +0x01,0xC1,0x1F,0x28,0xBD,0xF7,0x09,0x8A,0xCA,0xC1,0x45,0xFF,0x0F,0xC1,0x25,0x00, +0xF0,0xC0,0x03,0xCA,0x01,0xB7,0x0A,0x5E,0xBD,0xF7,0x55,0x20,0x00,0x5A,0xBD,0xF7, +0x09,0x80,0x00,0x01,0x01,0x06,0x01,0xF7,0x09,0x36,0x00,0x03,0x01,0xF7,0x45,0x02, +0x00,0x46,0xBD,0x77,0x00,0xFC,0x04,0xF7,0x35,0x20,0x00,0x3C,0xBD,0xFA,0x02,0x19, +0x89,0xF8,0x01,0xF7,0x35,0x20,0x00,0x30,0xBD,0x01,0x02,0x19,0x89,0xF7,0x09,0x10, +0x00,0xF0,0x01,0xF7,0x0A,0x20,0xBD,0xED,0x06,0xF7,0x45,0x20,0x00,0x1A,0xBD,0xE9, +0x01,0xF7,0x09,0xC2,0xD5,0xF7,0x25,0x40,0x09,0x22,0xBD,0x05,0x02,0xF7,0x55,0x02, +0x00,0x06,0xBD,0x77,0x00,0x28,0x06,0x9A,0x01,0x00,0x64,0x01,0x62,0x4A,0xF7,0x35, +0x04,0x00,0xFC,0xBC,0x07,0x03,0xF7,0x55,0x02,0x00,0xF4,0xBC,0xF7,0x45,0x04,0x00, +0xEE,0xBC,0x87,0x00,0xF7,0x25,0xE8,0x09,0xFA,0xBC,0xE6,0x02,0xF7,0x09,0xC8,0xFF, +0xF2,0x01,0xF7,0x45,0x02,0x00,0xD8,0xBC,0xDF,0x01,0x26,0x10,0xF7,0x09,0xB6,0xC9, +0xC0,0x1F,0x80,0xBC,0xF7,0x09,0xCE,0xC9,0x3F,0x10,0x78,0xBC,0xF7,0x09,0xC6,0xC9, +0xFF,0x15,0x14,0xC0,0x6E,0xBC,0xF7,0x09,0x36,0x00,0x06,0x01,0xC0,0x1F,0x64,0xBC, +0xF7,0x09,0xC6,0xC9,0x77,0x00,0xC8,0x05,0xC0,0x1F,0x58,0xBC,0xF7,0x09,0xA6,0xC9, +0x3F,0x10,0x50,0xBC,0xF7,0x09,0x9E,0xC9,0xFF,0x15,0x16,0xC0,0x46,0xBC,0xF7,0x09, +0x0E,0x00,0x14,0x89,0xC0,0x1F,0x3C,0xBC,0xF7,0x09,0x9E,0xC9,0x77,0x00,0x72,0x00, +0x26,0x10,0xF7,0x09,0x60,0xC9,0x66,0x10,0xF7,0x09,0x5A,0xC9,0xA6,0x10,0xF7,0x09, +0x54,0xC9,0xE6,0x10,0xF7,0x09,0x4E,0xC9,0xC2,0x1D,0x18,0xBC,0x83,0x14,0x82,0x12, +0xC1,0x10,0x83,0x20,0x2A,0x03,0xC1,0x35,0xFF,0x0F,0x0A,0x03,0xC0,0x35,0xFF,0x0F, +0x07,0x03,0xF7,0x09,0x5C,0x0C,0x03,0x10,0xF7,0x09,0xB0,0x0C,0x01,0x20,0xF0,0x03, +0xC0,0x1F,0xF0,0xBB,0xF7,0x09,0x52,0xC9,0xC0,0x1F,0xE8,0xBB,0xF7,0x65,0x02,0x00, +0xE2,0xBB,0x06,0x01,0x85,0x15,0xF7,0x09,0x20,0xC9,0x84,0x15,0xF7,0x09,0x1A,0xC9, +0x83,0x15,0xF7,0x09,0x14,0xC9,0x82,0x15,0xF7,0x09,0x0E,0xC9,0x81,0x15,0xF7,0x09, +0x08,0xC9,0x80,0x15,0xF7,0x09,0x02,0xC9,0x87,0x00,0xF6,0x65,0x02,0x00,0x08,0x00, +0xDF,0x01,0xF6,0x25,0x01,0x00,0x02,0x00,0x01,0x05,0x87,0x00,0x26,0x10,0xF7,0x09, +0xD4,0xC8,0x66,0x10,0xF7,0x09,0xCE,0xC8,0xA6,0x10,0xF7,0x09,0xC8,0xC8,0xE6,0x10, +0xF7,0x09,0xC2,0xC8,0x82,0x1D,0x0A,0x00,0xC0,0x1D,0x88,0xBB,0x81,0x10,0xC1,0x0C, +0x01,0x60,0x82,0x0C,0x05,0x03,0x03,0x12,0x50,0x18,0xC9,0x10,0xC2,0x0A,0xFB,0x06, +0x77,0x00,0x9C,0xFF,0x26,0x10,0x66,0x10,0xA6,0x10,0xC0,0x45,0xFF,0x8F,0x42,0x10, +0xC2,0x45,0xFF,0x8F,0x80,0x0C,0x80,0x0C,0x80,0x0C,0x80,0x50,0xAA,0x01,0x00,0x64, +0x01,0xC0,0x4B,0x80,0x0C,0xC0,0x00,0x00,0x9C,0x06,0x4D,0xC0,0x45,0x00,0xFF,0xC0, +0x0C,0xF0,0x09,0xEC,0x4B,0x05,0x01,0x82,0x15,0xD6,0x0B,0x80,0x15,0x77,0x00,0xAC, +0x04,0x82,0x15,0x81,0x15,0x40,0x10,0xC0,0x45,0xFF,0x0F,0xD6,0x0B,0x87,0x00,0x87, +0x00,0x00,0x88,0xF7,0x09,0x82,0x0B,0x00,0x88,0xC0,0x15,0x00,0xA0,0xF7,0x09,0xCA, +0x0E,0xC2,0x55,0x00,0xB0,0x81,0x10,0x00,0x88,0xE6,0x10,0x26,0x11,0x66,0x11,0xC0, +0x15,0xC4,0xFE,0xC4,0x15,0x08,0x00,0x26,0x0A,0x48,0x10,0x06,0x06,0x03,0x05,0xE6, +0x15,0x30,0x00,0x0E,0x01,0x04,0x0A,0x08,0x0B,0xC3,0x15,0x0A,0x00,0xF7,0x09,0x40, +0x00,0x07,0x01,0xC1,0x00,0x66,0x10,0xF7,0x09,0x36,0x00,0x02,0x01,0x4E,0xD0,0xF6, +0x01,0xC0,0x15,0x00,0x70,0x05,0x0A,0x07,0x61,0xC1,0x15,0x2D,0x00,0xF7,0x09,0x64, +0xEA,0x81,0x15,0xFC,0x02,0xC1,0x1F,0xC2,0xBA,0xF7,0x09,0x24,0xC8,0xC1,0x45,0x00, +0xF0,0xC1,0x55,0x00,0xC0,0x37,0x0A,0xE6,0xBA,0x85,0x15,0x84,0x15,0x83,0x15,0x00, +0x88,0xC8,0x0B,0x0C,0x03,0x20,0x0A,0xE0,0x10,0xD0,0x0B,0x01,0x14,0xC1,0x65,0x30, +0x00,0x00,0x88,0xF7,0x09,0xF2,0x0A,0x17,0x20,0x00,0xA0,0x01,0x03,0x87,0x00,0x00, +0x88,0xF7,0x09,0xEE,0xFF,0x87,0x00,0x77,0x00,0x6E,0xFF,0xC1,0x35,0xFF,0x0F,0xF6, +0x03,0xE6,0x10,0x26,0x11,0x66,0x11,0x77,0x10,0xA4,0xBA,0x42,0x10,0xE6,0x15,0x66, +0x46,0x01,0x0A,0xC4,0x15,0x0A,0x00,0xC5,0x15,0xC4,0xFE,0x0D,0x0A,0xD5,0x0B,0xDE, +0x09,0x1A,0x03,0xC1,0x0B,0x09,0x02,0x81,0x0A,0xD7,0xA0,0x2D,0x00,0x02,0x02,0x01, +0x0B,0xF6,0x01,0xD7,0xA0,0x2B,0x00,0xF3,0x03,0xC3,0xE5,0x30,0x00,0x09,0x05,0xC4, +0xA0,0x07,0x04,0x0D,0x11,0xF7,0xB5,0x02,0x00,0xE1,0xB1,0x02,0x03,0xE5,0x60,0xE6, +0x01,0xD6,0x0B,0x77,0x00,0x5C,0xF9,0x4D,0x10,0x41,0x19,0x77,0x00,0x66,0xFF,0xF7, +0x09,0x98,0xFF,0x87,0x00,0x77,0x00,0xF0,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x0D,0x00,0x00, +0x00,0xB8,0x01,0x00,0x64,0x01,0x1E,0x4D,0x00,0x00,0x4A,0x01,0x51,0x00,0x00,0x00, +0x00,0x00,0x56,0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, +0xF7,0x09,0x02,0x00,0x40,0x10,0xC1,0x1F,0xC8,0xB9,0xF7,0x09,0x2A,0xC7,0x26,0x10, +0xC0,0x15,0x00,0xA0,0xF7,0x09,0x4A,0xFE,0x28,0x89,0x80,0x15,0x87,0x00,0xC1,0x1F, +0xB0,0xB9,0xC0,0x15,0x00,0xC0,0xF7,0x09,0x38,0xFE,0x01,0x01,0x00,0x88,0x17,0x20, +0x00,0xF0,0xF2,0x02,0x87,0x00,0xC1,0x1F,0x98,0xB9,0xC1,0x35,0xFF,0x0F,0xEC,0x03, +0xF0,0x01,0xF7,0x09,0x24,0x14,0xE6,0x15,0x44,0x50,0xF7,0x09,0x62,0xFE,0x00,0x01, +0x87,0x00,0xF7,0x09,0x14,0x14,0xF7,0x09,0x56,0xFE,0x00,0x01,0xF7,0xE5,0x02,0x00, +0x70,0xB9,0x7F,0x10,0x6C,0xB9,0x87,0x00,0xC2,0x1F,0x66,0xB9,0xC2,0x35,0xFF,0x0F, +0xD5,0x03,0xF7,0x09,0x02,0x00,0x00,0x88,0x26,0x10,0xF7,0x09,0x86,0xC6,0x66,0x10, +0xA6,0x10,0xC3,0x15,0xFF,0x0F,0xC5,0x15,0x03,0x00,0xC2,0x30,0x07,0x03,0xF7,0x09, +0xF8,0x09,0x01,0x10,0xC0,0x15,0x00,0xA0,0xF7,0x09,0xC6,0xFD,0x26,0x89,0x66,0x10, +0xC5,0x0A,0xF3,0x06,0xC2,0x30,0xFA,0x02,0x77,0x00,0x46,0xFD,0xF7,0x09,0x1C,0xD2, +0xF7,0x09,0x7A,0xEE,0xC0,0x45,0xFF,0x0F,0x17,0x20,0x00,0x20,0x51,0x83,0x17,0x20, +0x00,0x30,0x11,0x03,0x17,0x20,0x00,0x70,0x01,0x86,0x00,0x00,0x17,0x20,0x00,0x90, +0x04,0x03,0x17,0x20,0x00,0xD0,0x01,0x02,0x00,0x00,0xF7,0x09,0x46,0xC6,0xFF,0x1D, +0x50,0xB9,0xEE,0xB8,0x09,0x01,0xC0,0x45,0xFF,0x0F,0xF7,0x09,0xB0,0x09,0x08,0x89, +0xF7,0x09,0x30,0xC6,0x7F,0x10,0xDA,0xB8,0xF7,0x09,0xD0,0xD1,0xC0,0x45,0xFF,0x0F, +0xC0,0x25,0x00,0x10,0x08,0x03,0xDF,0x55,0x02,0x00,0x64,0x07,0xF7,0x45,0x04,0x00, +0x0C,0xB9,0x77,0x00,0x2E,0x02,0xF7,0x0B,0x0C,0xB9,0x07,0x03,0xC0,0x1F,0x12,0xB9, +0xC0,0x45,0xFF,0x0F,0x37,0x20,0x02,0xB9,0xEE,0x83,0xF7,0x09,0x00,0xEE,0xE6,0x1D, +0xF2,0xB8,0xF7,0x09,0xCE,0xC5,0x2E,0x01,0x00,0x60,0x01,0x7C,0x4E,0xE6,0x1D,0xEC, +0xB8,0xE6,0x1D,0xEA,0xB8,0xF7,0x1D,0xEE,0xB8,0xE0,0xB8,0xF7,0x1D,0xEA,0xB8,0xDC, +0xB8,0xF7,0x1F,0xD8,0xB8,0xDA,0xB8,0xF7,0x09,0xF0,0x01,0x26,0x89,0xF7,0x15,0x01, +0x00,0xCC,0xB8,0x77,0x00,0x04,0x01,0xF7,0x35,0x04,0x00,0xB8,0xB8,0x01,0x03,0x22, +0x89,0xF7,0x25,0x16,0x0C,0xC2,0xB8,0x0A,0x02,0xF7,0x0B,0xB0,0xB8,0x04,0x03,0xF7, +0x25,0x0A,0x0C,0xA8,0xB8,0x03,0x02,0xF7,0x15,0x0A,0x0C,0xAC,0xB8,0xE6,0x1D,0x9A, +0xB8,0xF7,0x09,0x76,0xC5,0xE6,0x1D,0x94,0xB8,0xE6,0x1D,0x92,0xB8,0xF7,0x1D,0x96, +0xB8,0x88,0xB8,0xF7,0x1D,0x92,0xB8,0x84,0xB8,0x17,0x20,0x00,0x20,0x0C,0x87,0xF7, +0x15,0x00,0x40,0x7C,0xB8,0xF7,0x09,0x56,0x08,0x07,0x89,0x41,0x90,0x77,0x10,0x6E, +0xB8,0x48,0x02,0x77,0x00,0xE6,0x01,0xC0,0x1F,0x62,0xB8,0x37,0x10,0x62,0xB8,0xC0, +0x00,0xC0,0x45,0xFC,0xFF,0x37,0x10,0x56,0xB8,0x1E,0x02,0x77,0x00,0xC2,0x01,0xC0, +0x15,0x54,0x4F,0xF7,0x1D,0x46,0xB8,0x4C,0xB8,0xF7,0x1D,0x3E,0xB8,0x44,0xB8,0xB7, +0x15,0x3C,0xB8,0xF7,0x09,0x28,0xC5,0x81,0x15,0x77,0x10,0x30,0xB8,0xB7,0x15,0x2A, +0xB8,0x37,0x0A,0x2C,0xB8,0xC1,0x0B,0x05,0x03,0xC1,0x35,0x00,0xF0,0x02,0x02,0x77, +0x12,0x1E,0xB8,0x48,0x00,0x87,0x00,0xD7,0x3D,0x16,0xB8,0x00,0x10,0x10,0x03,0xF7, +0x09,0x3A,0x01,0x0A,0x89,0x22,0x01,0xF7,0x09,0xB4,0xF7,0x07,0x89,0x37,0x0A,0xD8, +0xB7,0xF7,0x15,0x00,0x20,0xF4,0xB7,0x77,0x10,0xF2,0xB7,0x77,0x00,0x70,0xFF,0xF7, +0x35,0x01,0x00,0xE0,0xB7,0x06,0x03,0xF7,0x35,0x00,0x04,0xE4,0xB7,0x02,0x03,0x37, +0x0A,0xDC,0xB7,0xF7,0x09,0x7C,0xD0,0xF7,0x25,0x88,0x0A,0xDC,0xB7,0x06,0x03,0xF7, +0x55,0x02,0x00,0xC0,0xB7,0xF7,0x45,0x04,0x00,0xBA,0xB7,0xF7,0x09,0x44,0xFE,0x2D, +0x01,0xF7,0x09,0xD6,0x00,0x26,0x89,0xF7,0x0A,0xB4,0xB7,0x17,0x03,0xF7,0x09,0x52, +0xD0,0xF7,0x25,0xD4,0x08,0xB2,0xB7,0xF1,0x03,0xF7,0x0B,0xA2,0xB7,0xE8,0x04,0xF7, +0x25,0x1C,0x0C,0xA4,0xB7,0xE4,0x02,0x89,0x01,0x00,0x64,0x01,0xD6,0x4F,0xF7,0x55, +0x02,0x00,0x88,0xB7,0xF7,0x45,0x04,0x00,0x82,0xB7,0x37,0x0B,0x88,0xB7,0x77,0x00, +0xEE,0x00,0xF7,0x35,0x00,0xE0,0x7A,0xB7,0x88,0x02,0xF7,0x35,0x00,0x04,0x78,0xB7, +0x73,0x03,0xC0,0x1D,0x72,0xB7,0xC0,0x00,0xC0,0x45,0xFC,0xFF,0x37,0x10,0x66,0xB7, +0x67,0x01,0xF7,0x25,0x0A,0x0C,0x5C,0xB7,0x01,0x03,0x11,0x89,0xF7,0x09,0xFA,0xCF, +0xF7,0x25,0x1C,0x0C,0x5A,0xB7,0xBF,0x02,0x77,0x00,0xFA,0xFE,0x26,0x10,0x09,0x01, +0x66,0x10,0x07,0x01,0xA6,0x10,0x05,0x01,0xE6,0x10,0x03,0x01,0x26,0x11,0x01,0x01, +0x66,0x11,0xBF,0x15,0xDA,0xB6,0x0F,0x01,0x26,0x10,0x09,0x01,0x66,0x10,0x07,0x01, +0xA6,0x10,0x05,0x01,0xE6,0x10,0x03,0x01,0x26,0x11,0x01,0x01,0x66,0x11,0xF7,0x09, +0x10,0xC4,0xBF,0x15,0xBA,0xB6,0xC0,0x15,0x3E,0x4E,0x77,0x00,0xBC,0xFE,0x85,0x15, +0xF7,0x09,0xF2,0xC3,0x84,0x15,0xF7,0x09,0xEC,0xC3,0x83,0x15,0xF7,0x09,0xE6,0xC3, +0x82,0x15,0xF7,0x09,0xE0,0xC3,0x81,0x15,0xF7,0x09,0xDA,0xC3,0x80,0x15,0xF7,0x09, +0xD4,0xC3,0xFE,0x25,0x80,0x00,0x00,0x00,0x02,0x83,0xCE,0x65,0x02,0x00,0xCE,0x65, +0x02,0x00,0x87,0x00,0x26,0x10,0xF7,0x09,0xA8,0xC3,0xC0,0x1D,0xC6,0xB6,0x17,0x20, +0x28,0x0C,0x0B,0x02,0xF7,0x15,0x2E,0x0C,0xBA,0xB6,0xF7,0x1F,0xB6,0xB6,0xB8,0xB6, +0xF7,0x15,0x01,0x00,0xB0,0xB6,0x77,0x00,0xC2,0xFF,0x17,0x20,0x36,0x0C,0x04,0x02, +0xF7,0x15,0x3C,0x0C,0x9E,0xB6,0xF1,0x01,0x80,0x15,0xF7,0x09,0x88,0xC3,0x87,0x00, +0xE6,0x1D,0x92,0xB6,0xF7,0x09,0x6A,0xC3,0xC0,0x1D,0x88,0xB6,0x37,0x0A,0xB2,0xB6, +0x78,0x00,0x02,0x00,0xC1,0x1D,0x7C,0xB6,0xF7,0x09,0x76,0x07,0x07,0x89,0xE6,0x1D, +0x58,0xB6,0xF7,0x09,0x4C,0xC3,0xE6,0x1D,0x52,0xB6,0xE6,0x1D,0x50,0xB6,0xE6,0x1D, +0x4E,0xB6,0xE6,0x1D,0x4C,0xB6,0xE6,0x1D,0x4A,0xB6,0xE6,0x1D,0x48,0xB6,0xF7,0x09, +0x30,0xC3,0xE6,0x1D,0x46,0xB6,0xE6,0x1D,0x48,0xB6,0xE6,0x1D,0x46,0xB6,0xE6,0x1D, +0x38,0xB6,0x42,0x10,0xC1,0x1D,0x3C,0xB6,0xF7,0x09,0x1A,0x06,0xBB,0x01,0x00,0x64, +0x01,0x34,0x51,0x00,0x00,0x00,0x00,0x77,0x10,0x28,0xB6,0x41,0x90,0x66,0x10,0xF7, +0x45,0xFF,0xFE,0x1E,0xB6,0x13,0x03,0xC1,0x1D,0x20,0xB6,0xB7,0x0A,0x10,0xB6,0xF7, +0x09,0x24,0x01,0xF7,0x0A,0x08,0xB6,0xF7,0x09,0x8E,0xE8,0xF7,0x09,0x9E,0xE6,0x27, +0x53,0x20,0x49,0x4E,0x50,0x55,0x54,0x53,0x3A,0x20,0x00,0x81,0x13,0xA6,0x10,0x43, +0x10,0x38,0x03,0xF7,0x09,0xFC,0x05,0xF7,0x09,0xFA,0x05,0x26,0x10,0x66,0x10,0xF7, +0x09,0xE2,0xF9,0xF7,0x09,0xC0,0x00,0xC3,0x1D,0x8C,0xB5,0x81,0x15,0xC4,0x10,0xC1, +0x0C,0x44,0x60,0x81,0x13,0xF7,0x35,0x00,0x01,0xC8,0xB5,0x09,0x03,0x01,0x13,0x40, +0x10,0xE6,0x10,0xF7,0x09,0x1C,0xE8,0xF7,0x09,0xE6,0xC2,0x83,0x15,0x81,0x13,0xF7, +0x09,0xC2,0x05,0x0E,0x10,0x53,0x10,0xF7,0x09,0xD6,0x06,0x3F,0x01,0xC0,0x35,0x00, +0x80,0x02,0x03,0xC1,0x45,0x00,0xF0,0x00,0x15,0x53,0x10,0x01,0x10,0xF7,0x09,0xEA, +0x05,0xC0,0x45,0x00,0x80,0xF7,0x09,0xAE,0x05,0x81,0x13,0xC1,0x35,0xFF,0x0F,0xDA, +0x02,0x82,0x15,0x82,0x15,0xE6,0x1D,0x7C,0xB5,0xF7,0x1D,0x2A,0xB5,0x76,0xB5,0xF7, +0xED,0x30,0xB5,0x70,0xB5,0xE6,0x1D,0x6E,0xB5,0xB7,0x11,0x6A,0xB5,0xF7,0xED,0x2C, +0xB5,0x64,0xB5,0xF7,0x55,0x00,0x80,0x5E,0xB5,0xF7,0x1D,0x5E,0xB5,0x42,0xB5,0x37, +0x0A,0x42,0xB5,0xB7,0x10,0x40,0xB5,0xC1,0x1D,0x36,0xB5,0xF7,0x09,0x2E,0x05,0x00, +0x00,0x00,0x00,0x37,0x10,0x2C,0xB5,0x37,0x0A,0x3E,0xB5,0x37,0x0A,0x3C,0xB5,0x37, +0x0A,0x2E,0xB5,0xB7,0x0A,0x28,0xB5,0x77,0x00,0x14,0xCB,0xC0,0x15,0x00,0x30,0x01, +0x0A,0xF7,0x09,0x84,0x08,0xBB,0x01,0xC1,0x0B,0x01,0x06,0x87,0x00,0xF7,0x09,0x18, +0xC2,0xFF,0x15,0x00,0x00,0xC0,0xB4,0xC1,0x0A,0xF9,0x06,0x87,0x00,0xC1,0x0B,0x01, +0x06,0x87,0x00,0xB7,0x13,0x1A,0xB5,0xE6,0x15,0x00,0x00,0xF7,0x09,0xDA,0xC1,0xC1, +0x0A,0xFA,0x06,0x7F,0x00,0x0A,0xB5,0x26,0x10,0xF7,0x09,0xCC,0xC1,0xF7,0x09,0x18, +0xC2,0xC0,0x1D,0xDA,0xB4,0xC0,0x0A,0x02,0x06,0x77,0x00,0xC8,0xF8,0xF7,0x09,0x00, +0xC2,0x11,0x01,0x00,0x62,0x01,0x92,0x52,0xF9,0x01,0x17,0x89,0x77,0x00,0x16,0x01, +0xC0,0x15,0x00,0x30,0xC1,0x1F,0x76,0xB4,0xF7,0x09,0xD8,0xC1,0xC1,0x0B,0xF6,0x03, +0xF7,0x09,0x1C,0x08,0x77,0x01,0xF7,0x0B,0xAC,0xB4,0xEF,0x07,0xF7,0x15,0x5E,0x50, +0xC2,0xB4,0xF7,0x1F,0x58,0xB4,0x88,0xB4,0xF7,0x09,0xB8,0xC1,0x08,0x01,0xF7,0x0B, +0x94,0xB4,0xE3,0x07,0xF7,0x15,0x1E,0x4F,0xAA,0xB4,0x37,0x0A,0x72,0xB4,0xF7,0x35, +0x00,0x01,0x86,0xB4,0x1B,0x03,0xF7,0x09,0x94,0xFF,0xC1,0x1D,0x6A,0xB4,0xF7,0x09, +0xFE,0xE6,0xC1,0x1D,0x5A,0xB4,0x0C,0x03,0xF7,0x09,0x08,0xE5,0x20,0x4F,0x55,0x54, +0x50,0x55,0x54,0x53,0x20,0x00,0xF7,0x09,0x8A,0xE6,0xF7,0x09,0x8A,0xC1,0x06,0x01, +0xF7,0x09,0xF0,0xE4,0x20,0x53,0x54,0x4F,0x50,0x53,0x2E,0x00,0xC6,0x65,0x0A,0x00, +0xC0,0x1D,0x4A,0xB4,0xF7,0x45,0x00,0x01,0x60,0xB4,0xC0,0x35,0x00,0x80,0x03,0x03, +0xF7,0x55,0x00,0x01,0x54,0xB4,0xC0,0x45,0x00,0x80,0x02,0x03,0xC0,0x55,0x00,0x80, +0xC0,0x6D,0xF0,0xB3,0x06,0x20,0x06,0x03,0x01,0x06,0x00,0x00,0x81,0x15,0xF7,0x09, +0x12,0xC1,0xF8,0x01,0xB7,0x15,0x16,0xB4,0xF7,0x09,0x08,0xC1,0xC0,0x1D,0x0C,0xB4, +0xC0,0x6D,0xC6,0xB3,0x37,0x20,0xB6,0xB3,0x07,0x03,0x01,0x06,0x00,0x00,0xC1,0x1F, +0xAC,0xB3,0xF7,0x09,0x0E,0xC1,0xF6,0x01,0xB7,0x15,0xF0,0xB3,0x83,0x15,0x1D,0x03, +0xC1,0x1F,0x9A,0xB3,0xF7,0x09,0xFC,0xC0,0xF7,0x09,0x0C,0x05,0x89,0x01,0xC0,0x35, +0x00,0x80,0x02,0x03,0xF7,0x09,0x1C,0x07,0xC1,0x1F,0x82,0xB3,0xF7,0x09,0xE4,0xC0, +0xC0,0x45,0x00,0x80,0xC1,0x0B,0x05,0x03,0xC1,0x35,0x00,0xF0,0x02,0x02,0xC0,0x55, +0x00,0x80,0xF7,0x09,0xD8,0x03,0xC3,0x0A,0xE3,0x06,0xF7,0x35,0x00,0x01,0xCA,0xB3, +0x86,0x03,0xF7,0x25,0x5E,0x50,0xBC,0xB3,0x07,0x02,0xF7,0x09,0xA2,0xC0,0xFF,0x1D, +0x7E,0xB3,0x4A,0xB3,0x37,0x0A,0x76,0xB3,0xB7,0x15,0x8C,0xB3,0xF7,0x09,0x84,0xC0, +0xB7,0x15,0x8E,0xB3,0xB7,0x15,0x88,0xB3,0xB7,0x15,0x7E,0xB3,0xB7,0x15,0x74,0xB3, +0xB7,0x15,0x6E,0xB3,0x67,0x01,0x00,0x62,0x01,0xEE,0x53,0xB7,0x15,0x68,0xB3,0xB7, +0x15,0x62,0xB3,0xF7,0x09,0x64,0xC0,0xB7,0x15,0x58,0xB3,0xB7,0x15,0x52,0xB3,0xB7, +0x15,0x4C,0xB3,0xF7,0x0A,0x56,0xB3,0x32,0x07,0xC1,0x1D,0x42,0xB3,0xF7,0x09,0x56, +0x04,0x1C,0x89,0xC1,0x1D,0x38,0xB3,0xF7,0x09,0x30,0x03,0x00,0x00,0x00,0x00,0xC2, +0x1D,0x32,0xB3,0xF7,0x55,0x00,0x01,0x58,0xB3,0x37,0x20,0x24,0xB3,0x08,0x03,0xF7, +0x45,0x00,0x01,0x4C,0xB3,0xC1,0x1D,0x1A,0xB3,0xF7,0x09,0xA8,0x02,0x12,0x01,0xB7, +0x10,0x12,0xB3,0xF7,0x09,0x2A,0x03,0xF7,0x09,0x28,0x03,0x02,0x10,0xF7,0x09,0x20, +0x03,0xC0,0x45,0xFF,0x0F,0xC0,0x25,0x00,0xA0,0x01,0x03,0x01,0x0A,0x77,0x20,0xF6, +0xB2,0x01,0x03,0x0D,0x89,0xF7,0x35,0x00,0x01,0x16,0xB3,0x04,0x03,0x03,0x0A,0xC2, +0x1D,0xE8,0xB2,0x07,0x01,0xC3,0x1D,0xE0,0xB2,0xC1,0x0B,0x03,0x03,0xF7,0x09,0x38, +0x03,0x02,0x10,0xF7,0x09,0xEA,0x02,0xC3,0x0A,0xFB,0x06,0xB7,0x10,0xCC,0xB2,0x37, +0x10,0xE0,0xB2,0x77,0x10,0xDE,0xB2,0x7F,0x00,0xE0,0xB2,0xF7,0x55,0x08,0x00,0xC0, +0xB2,0x03,0x01,0xF7,0x45,0x08,0x00,0xB8,0xB2,0xF7,0x0B,0xD8,0xB2,0x01,0x03,0x05, +0x89,0xF7,0x09,0x5A,0xCB,0xC0,0x45,0xFF,0x0F,0xC0,0x25,0x00,0x20,0x0B,0x03,0xC0, +0x25,0x00,0x90,0x08,0x03,0x77,0x10,0x7C,0xB2,0xC0,0x25,0x00,0xC0,0x63,0x02,0xF7, +0x09,0x00,0x04,0x00,0x01,0x77,0x10,0xAC,0xB2,0x37,0x0A,0x68,0xB2,0xF7,0x09,0x86, +0x03,0x5A,0x01,0x77,0x10,0xA0,0xB2,0xF7,0x35,0x08,0x00,0x74,0xB2,0x4E,0x02,0x1B, +0x89,0xF7,0x1D,0x7E,0xB2,0x4E,0xB2,0xF7,0x09,0x14,0xCB,0xF7,0x35,0x04,0x00,0x60, +0xB2,0x06,0x02,0xC0,0x45,0xFF,0x0F,0xC0,0x25,0x00,0x30,0xF5,0x03,0x25,0x89,0xC0, +0x15,0x00,0x20,0x01,0x10,0xF7,0x09,0xAE,0x05,0xC0,0x15,0x00,0xF0,0x01,0x10,0xF7, +0x09,0x9E,0x05,0xB7,0x10,0x60,0xB2,0xC2,0x1D,0x1A,0xB2,0x37,0x0A,0x16,0xB2,0xF7, +0x09,0xFC,0x00,0x80,0x10,0xC0,0x45,0x00,0xF0,0xC0,0x55,0x00,0xA0,0xC2,0x1D,0x46, +0xB2,0xF7,0x09,0x7C,0x05,0x43,0x10,0xF2,0x01,0x00,0xC1,0x00,0x4A,0x55,0xC1,0x1D, +0x3A,0xB2,0xF7,0x09,0x6E,0x03,0x11,0x01,0x42,0x10,0xF7,0x09,0x5E,0x02,0xC0,0x45, +0xFF,0x00,0xC0,0x60,0xF7,0x09,0x3A,0x02,0xF7,0x09,0x0C,0x02,0x02,0x10,0xF7,0x09, +0x4A,0x02,0x80,0x0A,0xF7,0x09,0x2A,0x02,0x0C,0x01,0xC1,0x15,0x00,0xB0,0xF7,0x09, +0x4C,0x05,0xC0,0x15,0x00,0xA0,0xC1,0x10,0xF7,0x09,0x3C,0x05,0x01,0x0A,0xF7,0x09, +0x3C,0x05,0xF7,0x15,0x3E,0x00,0x00,0xB2,0x77,0x00,0x86,0xF9,0x09,0x89,0xF7,0x35, +0x08,0x00,0xC4,0xB1,0xA9,0x03,0x1C,0x89,0xF7,0x09,0xA4,0xF7,0x77,0x10,0xAA,0xB1, +0x37,0x0A,0xA8,0xB1,0x77,0x00,0x6A,0xF9,0x26,0x10,0xF7,0x09,0x90,0xBE,0x66,0x10, +0xC1,0x1F,0x58,0xB1,0xF7,0x09,0xB2,0x01,0xC0,0x45,0xFF,0x0F,0xC0,0x25,0x00,0xA0, +0x08,0x02,0xF7,0x09,0x86,0x00,0xC0,0x1F,0x42,0xB1,0xF7,0x09,0xA4,0xBE,0x77,0x00, +0x72,0xF5,0xC1,0x25,0x56,0x09,0x12,0x03,0xF7,0x09,0x16,0xE2,0x4E,0x4F,0x20,0x44, +0x49,0x52,0x45,0x43,0x54,0x20,0x57,0x49,0x54,0x48,0x49,0x4E,0x20,0x54,0x4F,0x20, +0x44,0x45,0x46,0x20,0x59,0x45,0x54,0x2E,0x00,0x79,0x01,0x00,0x1F,0x00,0x06,0x56, +0xE5,0x01,0xC1,0x1D,0x7C,0xB1,0x10,0x03,0xF7,0x09,0xD8,0xE3,0xF7,0x09,0xE8,0xE1, +0x20,0x44,0x45,0x46,0x49,0x4E,0x45,0x44,0x00,0xED,0x01,0x00,0x64,0x01,0x20,0x56, +0xF7,0x09,0x76,0xBE,0x37,0x0A,0x60,0xB1,0xF7,0x15,0x3F,0x00,0x66,0xB1,0x77,0x00, +0xEC,0xF8,0x26,0x10,0xF7,0x09,0x12,0xBE,0xA6,0x10,0x01,0x0A,0x80,0x10,0xC0,0x35, +0xFF,0x0F,0x05,0x03,0x02,0x10,0xF7,0x09,0x72,0x01,0x81,0x0A,0xF8,0x01,0x82,0x15, +0xF7,0x09,0x0A,0xBE,0x80,0x15,0x87,0x00,0x26,0x10,0xF7,0x09,0xEC,0xBD,0x66,0x10, +0xA6,0x10,0xE6,0x10,0x26,0x11,0x66,0x11,0xC2,0x1F,0xAC,0xB0,0xF7,0x09,0x04,0x01, +0x45,0x10,0xC2,0x1D,0x14,0xB1,0x83,0x10,0xF7,0x09,0xF8,0x00,0x02,0x10,0xC4,0x10, +0x83,0x10,0xC0,0x15,0x00,0xF0,0xC2,0x35,0xFF,0x0F,0x09,0x03,0xF7,0x09,0xE4,0x00, +0x02,0x10,0xF7,0x09,0xE0,0x00,0x45,0x20,0xF2,0x05,0x08,0x03,0xC0,0x10,0xC1,0x1F, +0x76,0xB0,0x02,0x11,0xF7,0x09,0x22,0x04,0x77,0x00,0x8C,0xF4,0x04,0x10,0xC0,0x1F, +0x66,0xB0,0xC2,0x10,0xF7,0x09,0xE6,0x00,0xF7,0x0B,0xA4,0xB0,0xF5,0x03,0x02,0x11, +0xF7,0x09,0xB2,0x00,0xC0,0x45,0xFF,0x0F,0xC0,0x25,0x00,0xA0,0x01,0x03,0x01,0x0A, +0x81,0x0A,0xC2,0x1F,0x42,0xB0,0xF7,0x09,0xE2,0x00,0xC0,0x45,0x00,0xF0,0xC0,0x55, +0x00,0xA0,0xF7,0x09,0xE4,0x03,0xE0,0x01,0xF7,0x55,0x40,0x00,0x96,0xB0,0x03,0x01, +0xF7,0x45,0x40,0x00,0x8E,0xB0,0x26,0x10,0xF7,0x09,0x4E,0xBD,0x66,0x10,0xA6,0x10, +0xE6,0x10,0x26,0x11,0x43,0x10,0xC1,0x1D,0x48,0xB0,0xF7,0x09,0x5C,0x01,0x00,0x00, +0x00,0x00,0x42,0x10,0xF7,0x09,0xB8,0x00,0x84,0x10,0xC4,0x35,0xFF,0x0F,0x0D,0x03, +0x02,0x11,0xF7,0x09,0x4E,0x00,0x04,0x10,0xF7,0x09,0x4A,0x00,0x43,0x20,0xF5,0x05, +0x06,0x03,0xF7,0x35,0x40,0x00,0x4C,0xB0,0x06,0x03,0x77,0x00,0x00,0xF4,0xF7,0x35, +0x40,0x00,0x40,0xB0,0xEA,0x03,0xB6,0x10,0x04,0x00,0x77,0x00,0x1E,0xF9,0x26,0x10, +0xF7,0x09,0xF6,0xBC,0x66,0x10,0xA6,0x10,0xF7,0x09,0x64,0x01,0x77,0x00,0xEA,0xF3, +0xF7,0x09,0x12,0x00,0x76,0x10,0x02,0x00,0xF7,0x09,0x0A,0x00,0x76,0x10,0x04,0x00, +0x77,0x00,0x04,0xF9,0x81,0x10,0xC1,0x45,0x00,0xF0,0xC1,0x0C,0xC1,0x0C,0x30,0x01, +0x00,0x64,0x01,0x7E,0x57,0xC1,0x6D,0x94,0xAF,0x40,0x14,0x41,0x12,0x87,0x00,0xA6, +0x10,0xC2,0x45,0x00,0xF0,0xC2,0x0C,0xC2,0x0C,0xC2,0x6D,0x80,0xAF,0x12,0x10,0x4A, +0x10,0x82,0x15,0x87,0x00,0xB1,0x00,0x01,0x01,0xA1,0x00,0xA6,0x10,0xC2,0x45,0x00, +0xF0,0x42,0x0C,0x42,0x0C,0xC2,0x6D,0x64,0xAF,0x0A,0x10,0x82,0x15,0x87,0x00,0xB1, +0x00,0x01,0x01,0xA1,0x00,0x80,0x10,0xC0,0x45,0x00,0xF0,0x40,0x0C,0x40,0x0C,0xC0, +0x6D,0x4A,0xAF,0x00,0x12,0x87,0x00,0x80,0x10,0xC0,0x45,0x00,0xF0,0xC0,0x0C,0xC0, +0x0C,0xC0,0x6D,0x38,0xAF,0x02,0x14,0x00,0x12,0x87,0x00,0xF7,0x0B,0x60,0xAF,0x07, +0x03,0xF7,0x09,0x7C,0xBC,0xFF,0x1D,0x56,0xAF,0x24,0xAF,0x37,0x0A,0x50,0xAF,0xE6, +0x10,0xF7,0x09,0x4C,0xBC,0x66,0x10,0x26,0x10,0x42,0x10,0xF7,0x09,0x6C,0xFF,0x03, +0x10,0xC3,0x45,0xFF,0x0F,0x83,0x23,0x16,0x03,0x01,0x10,0xC0,0x35,0xFF,0x0F,0xF4, +0x02,0xF7,0x0B,0x2A,0xAF,0x0A,0x03,0x80,0x15,0xC1,0x1D,0x22,0xAF,0xF7,0x09,0xA0, +0x02,0x83,0x15,0xF7,0x09,0x2E,0xBC,0x83,0x15,0x87,0x00,0x80,0x15,0xF7,0x09,0x24, +0xBC,0x81,0x15,0xF9,0x01,0xF7,0x0B,0x06,0xAF,0x08,0x03,0xC0,0x1D,0x00,0xAF,0xF7, +0x09,0x52,0xFF,0x80,0x15,0xF7,0x09,0x0C,0xBC,0xEB,0x01,0x80,0x15,0xF7,0x09,0x04, +0xBC,0x83,0x15,0xF7,0x09,0xFE,0xBB,0x83,0x15,0xF7,0x09,0xF8,0xBB,0x77,0x00,0x20, +0xF8,0xC0,0x15,0x00,0x20,0xF7,0x09,0x72,0xFF,0x02,0x01,0x77,0x00,0x12,0xF8,0xC0, +0x15,0x00,0xA0,0xF7,0x09,0x64,0xFF,0x87,0x00,0xF7,0x09,0x20,0x02,0x77,0x00,0x00, +0xF8,0xF7,0x55,0x80,0x00,0xF4,0xAE,0x03,0x01,0xF7,0x45,0x80,0x00,0xEC,0xAE,0xC0, +0x15,0x00,0x30,0xF7,0x09,0x44,0xFF,0x02,0x01,0x77,0x00,0xE4,0xF7,0xC0,0x15,0x00, +0xB0,0xF7,0x09,0x36,0xFF,0x87,0x00,0xF7,0x35,0x80,0x00,0xCE,0xAE,0x02,0x03,0xF7, +0x09,0xEE,0x01,0x77,0x00,0xCA,0xF7,0xC0,0x15,0x00,0xA0,0xF7,0x09,0x1C,0xFF,0x87, +0x00,0x77,0x00,0xBC,0xF7,0xF7,0x45,0x00,0x20,0xB0,0xAE,0x03,0x01,0xF7,0x55,0x00, +0x20,0xA8,0xAE,0x6D,0x01,0x00,0x64,0x01,0xDC,0x58,0x26,0x10,0xF7,0x09,0x68,0xBB, +0x66,0x10,0xA6,0x10,0xC2,0x1D,0x5E,0xAE,0xC0,0x25,0x00,0x20,0x09,0x87,0xF7,0x09, +0xA6,0x00,0x04,0x01,0x00,0x0A,0x36,0x10,0x04,0x00,0x08,0x01,0xC0,0x0B,0x22,0x03, +0xF7,0x09,0x06,0x01,0x07,0x01,0x41,0x12,0xF7,0x09,0x68,0xFE,0x76,0x10,0x02,0x00, +0x77,0x00,0x62,0xF7,0xF7,0x35,0x00,0x20,0x68,0xAE,0x14,0x03,0xF7,0x09,0x8E,0x01, +0x40,0x12,0x89,0x10,0xF7,0x09,0x86,0x01,0xB6,0x10,0x02,0x00,0x42,0x12,0x81,0x1D, +0x02,0x00,0xF7,0x09,0x50,0xFE,0x42,0x10,0xC0,0x15,0x00,0x90,0xC1,0x1D,0x06,0xAE, +0xF7,0x09,0x42,0xFE,0x77,0x00,0x00,0xF2,0xE6,0x15,0x0C,0x00,0x01,0x01,0x26,0x0A, +0x26,0x10,0xF7,0x09,0xF2,0xBA,0x66,0x10,0xF7,0x09,0xEC,0xBA,0xA6,0x10,0xF7,0x09, +0xE6,0xBA,0xC1,0x1D,0xE0,0xAD,0xF7,0x09,0xA4,0xEC,0x77,0x10,0xD8,0xAD,0x82,0x15, +0xF7,0x09,0xE8,0xBA,0x81,0x15,0xF7,0x09,0xE2,0xBA,0x80,0x15,0xF7,0x09,0xDC,0xBA, +0x87,0x65,0xF7,0x09,0x4E,0xFF,0x87,0x00,0xF7,0x09,0xA4,0x01,0x00,0x88,0xF7,0x09, +0x3A,0xFF,0x77,0x00,0x9A,0x01,0xF8,0x01,0x26,0x10,0xF7,0x09,0xAA,0xBA,0x66,0x10, +0xA6,0x10,0xE6,0x10,0x26,0x11,0x66,0x11,0xF7,0x09,0xC6,0xFD,0x43,0x10,0x26,0x10, +0xC4,0x1D,0x66,0xAE,0xC5,0x15,0x1E,0x08,0x84,0x0C,0xC4,0x35,0xFE,0xFF,0x20,0x03, +0x05,0x61,0x77,0x21,0x52,0xAE,0x1F,0x86,0x41,0x13,0xC1,0x65,0x04,0x00,0x82,0x13, +0xC0,0x10,0x02,0x01,0xF7,0x09,0xF6,0xFD,0x11,0xA0,0xEE,0x82,0x14,0x87,0xC0,0x00, +0x11,0xA0,0xEA,0x82,0x10,0x87,0xC2,0x35,0xFF,0x0F,0xF4,0x02,0xC9,0x8B,0x03,0x03, +0xF1,0x8B,0xFF,0xFF,0x08,0x02,0x80,0x15,0x76,0x13,0x08,0x00,0x77,0x00,0x64,0xF6, +0x80,0x15,0x77,0x00,0x30,0xF1,0x05,0xE1,0xD7,0x01,0x26,0x10,0xF7,0x09,0x38,0xBA, +0x66,0x10,0xA6,0x10,0xE6,0x10,0x26,0x11,0x66,0x11,0xF7,0x09,0x54,0xFD,0x43,0x10, +0x04,0x10,0xC0,0x15,0xC4,0xFE,0x48,0x10,0x20,0x0A,0xE0,0x15,0x43,0x00,0xD0,0x0B, +0x01,0x12,0x41,0x0C,0xC1,0x6D,0xF6,0xAC,0xB1,0x01,0x00,0x62,0x01,0x3A,0x5A,0x76, +0x10,0x08,0x00,0x45,0x12,0x24,0x03,0x42,0x11,0xA6,0x10,0xF7,0x09,0x2A,0xFD,0x0E, +0x10,0xF7,0x09,0x26,0xFD,0xF7,0x09,0x22,0xFD,0x43,0x20,0x11,0x02,0xF7,0x09,0x0E, +0xBA,0x3F,0x10,0xB8,0xAC,0xF7,0xE5,0x02,0x00,0xB2,0xAC,0x3F,0x11,0xAE,0xAC,0xF7, +0x09,0x76,0xF0,0x05,0x01,0x42,0x21,0x0D,0x02,0x80,0x15,0x77,0x00,0xEC,0xF5,0x85, +0x10,0x82,0x13,0xC2,0x35,0xFF,0x0F,0xE1,0x02,0x80,0x15,0xF7,0x09,0xD4,0xB9,0x77, +0x00,0xAA,0xF0,0x80,0x1F,0x0A,0x00,0xF7,0x09,0x0C,0xFD,0xBE,0x10,0x0A,0x00,0x42, +0x11,0x80,0x15,0xF7,0x09,0x00,0xFD,0xE9,0x01,0x87,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x26,0x10,0xF7,0x09,0x94,0xB9,0x66,0x10,0x00,0x0A,0x01, +0x0A,0xF7,0x09,0x08,0x00,0x77,0x00,0x8C,0xF0,0xB1,0x00,0x02,0x01,0x02,0x0A,0xA1, +0x00,0x26,0x10,0xC2,0x45,0x00,0xF0,0x04,0x03,0x42,0x0C,0x42,0x0C,0xC2,0x6D,0x3A, +0xAC,0xC0,0x1D,0xA0,0xAC,0x09,0x02,0xC0,0x1D,0x60,0xAC,0x06,0x02,0xF7,0x09,0xFC, +0xC6,0xC0,0x1D,0x56,0xAC,0x01,0x02,0x12,0x89,0x37,0x0A,0x88,0xAC,0xC2,0x0B,0x05, +0x03,0xC0,0x45,0x00,0xF0,0xCA,0x45,0xFF,0x0F,0x0A,0x60,0x02,0x10,0xF7,0x09,0xB0, +0xFC,0xC0,0x45,0x00,0xF0,0x37,0x10,0x32,0xAC,0x80,0x15,0xF7,0x09,0x6E,0xFC,0x87, +0x00,0x26,0x10,0xC0,0x1D,0x24,0xAC,0xF7,0x09,0x7C,0xFC,0xC2,0x45,0x00,0xF0,0xB7, +0x10,0x18,0xAC,0x80,0x15,0x87,0x00,0xF7,0x0B,0x12,0xAC,0x01,0x02,0x87,0x00,0x26, +0x10,0xF7,0x09,0x0A,0xB9,0x66,0x10,0xA6,0x10,0xC2,0x1D,0x00,0xAC,0xF7,0x09,0x28, +0xFC,0xC0,0x35,0xFF,0x0F,0x02,0x03,0x02,0x10,0xF9,0x01,0xC0,0x6D,0xEC,0xAB,0xF7, +0x09,0x2A,0xFC,0xF7,0x1D,0xE6,0xAB,0xE2,0xAB,0xF7,0x45,0x00,0xF0,0xDC,0xAB,0x37, +0x0A,0xDA,0xAB,0x77,0x00,0xD8,0xEF,0xF7,0x09,0xD6,0xF1,0xF7,0xB5,0x08,0x00,0x51, +0xAC,0x02,0x02,0x77,0x00,0x58,0x02,0xE6,0x15,0x20,0x43,0x77,0x00,0xC2,0x00,0xF7, +0x09,0xBE,0xF1,0xF7,0xB5,0x08,0x00,0x39,0xAC,0x02,0x02,0xA0,0x01,0x00,0x64,0x01, +0x96,0x5B,0x77,0x00,0x3E,0x02,0xE6,0x15,0x20,0x40,0x77,0x00,0xAA,0x00,0xF7,0x09, +0xA6,0xF1,0xF7,0xB5,0x08,0x00,0x21,0xAC,0x02,0x02,0x77,0x00,0xAA,0x03,0xE6,0x15, +0x20,0x42,0x77,0x00,0x92,0x00,0xF7,0x09,0x8E,0xF1,0xF7,0xB5,0x08,0x00,0x09,0xAC, +0x02,0x02,0x77,0x00,0x90,0x03,0xE6,0x15,0x20,0x41,0x77,0x00,0x7A,0x00,0xF7,0xB5, +0x08,0x00,0xF5,0xAB,0x02,0x02,0x77,0x00,0x28,0x04,0xC0,0x15,0x20,0x38,0x77,0x00, +0x20,0x01,0xF7,0xB5,0x08,0x00,0xE1,0xAB,0x02,0x02,0x77,0x00,0x1E,0x04,0xC0,0x15, +0x20,0x30,0x77,0x00,0x0C,0x01,0xF7,0xB5,0x08,0x00,0xCD,0xAB,0x01,0x02,0x2A,0x89, +0xC0,0x15,0x20,0x22,0x77,0x00,0xFA,0x00,0xF7,0xB5,0x08,0x00,0xBB,0xAB,0x01,0x02, +0x2A,0x89,0xC0,0x15,0x20,0x21,0x77,0x00,0xE8,0x00,0xF7,0xB5,0x08,0x00,0xA9,0xAB, +0x01,0x02,0x2A,0x89,0xF7,0x09,0x20,0xF1,0xC0,0x15,0x20,0x28,0x09,0x01,0xC4,0x15, +0x01,0x00,0xF7,0x09,0x94,0x00,0xC0,0x00,0xC4,0x15,0x05,0x00,0xF7,0x09,0x8A,0x00, +0xC1,0x0A,0xF5,0x04,0x77,0x00,0xD2,0xF2,0xF7,0x09,0x92,0x00,0x80,0x13,0xC5,0x15, +0x08,0x00,0x77,0x20,0xAA,0xA3,0x30,0x05,0x77,0x20,0xAC,0xA3,0x1D,0x05,0xC2,0x15, +0xC4,0xFE,0x4A,0x10,0x22,0x0A,0xE2,0x15,0x04,0x00,0xD2,0x0B,0x83,0x14,0x82,0x12, +0x01,0x0A,0x83,0x0C,0x41,0x0C,0xD3,0x0B,0xD1,0x0B,0xC4,0x15,0x02,0x00,0xF7,0x09, +0x48,0x00,0x40,0x61,0xC4,0x15,0x02,0x00,0xF7,0x09,0x3E,0x00,0x40,0x61,0xC4,0x10, +0xF7,0x09,0x36,0x00,0x40,0xE1,0x0C,0x01,0xC1,0xE5,0x04,0x00,0x43,0x10,0x01,0x0A, +0x83,0x0C,0x41,0x0C,0xD1,0x0B,0xC4,0x15,0x02,0x00,0xF7,0x09,0x1C,0x00,0x40,0x61, +0xC4,0x10,0xF7,0x09,0x14,0x00,0x40,0xE1,0x44,0x10,0xF7,0x09,0x0C,0x00,0xF7,0x09, +0x2E,0x00,0x77,0x00,0x54,0xF2,0xF7,0x09,0x06,0x00,0xC4,0x0A,0xFC,0x04,0x87,0x00, +0xF7,0x35,0x80,0x00,0x9A,0xA2,0xFC,0x03,0x37,0x10,0x96,0xA2,0x87,0x00,0xC0,0x15, +0x63,0x00,0xF7,0x09,0xEA,0xFF,0xC0,0x15,0x69,0x00,0xF7,0x09,0xE2,0xFF,0x87,0x00, +0xB1,0x01,0x00,0x64,0x01,0xF4,0x5C,0xC0,0x15,0x68,0x00,0xF7,0x09,0xD8,0xFF,0xC0, +0x15,0x62,0x00,0xF7,0x09,0xD0,0xFF,0x87,0x00,0xF7,0x09,0xD8,0xFF,0xC4,0x15,0x01, +0x00,0x40,0x10,0xF7,0x09,0xBA,0xFF,0xF7,0x09,0xDC,0xFF,0x77,0x00,0x02,0xF2,0xC0, +0x9D,0xC8,0xAA,0x02,0x03,0xF7,0x09,0xA0,0x00,0xF7,0x1D,0x1E,0xA6,0x98,0xA1,0xF7, +0x15,0x30,0x00,0x8E,0xA1,0xC0,0x1D,0x8E,0xA1,0x00,0x9C,0x04,0x05,0x01,0x04,0x10, +0x89,0xC2,0x15,0xBE,0x07,0xC1,0x15,0xCE,0x07,0x12,0x0A,0x81,0x20,0xFD,0x07,0x01, +0x9C,0x0C,0x05,0x77,0x90,0x94,0xAA,0xC0,0x0C,0x02,0x1C,0x16,0x05,0xB7,0x10,0x7A, +0xAA,0xC2,0xE5,0xA8,0x66,0x82,0x0C,0xC2,0x55,0x00,0x80,0xB7,0x10,0x7A,0xAA,0x03, +0x1C,0xA8,0x66,0xC3,0x0C,0xC3,0x65,0xA8,0x66,0xD3,0x15,0x80,0xC6,0x8B,0x10,0xF7, +0x10,0x4E,0xAA,0xF7,0x10,0x4C,0xAA,0xE3,0x0B,0xC3,0x65,0x00,0x01,0x23,0x0A,0xF7, +0x10,0x46,0xAA,0x23,0x0A,0xF7,0x10,0x3C,0xAA,0xF7,0x10,0x3A,0xAA,0x30,0x1C,0x10, +0x05,0xB8,0x66,0xF7,0x09,0x6A,0x04,0xF7,0x09,0xB2,0x07,0xF7,0x09,0xEE,0x02,0xF7, +0x15,0xA8,0x66,0x70,0x8A,0xF7,0xDD,0x32,0xAA,0x68,0x8A,0x77,0x00,0x62,0xF1,0xE6, +0x15,0x1E,0x4F,0xC0,0x9D,0x24,0xAA,0x08,0x03,0x37,0x40,0x56,0x8A,0x37,0x0A,0x0C, +0xAA,0x37,0x8A,0x16,0xAA,0xF7,0x09,0x12,0xC4,0x87,0x00,0x01,0x0B,0xE6,0x1D,0x04, +0xAA,0x40,0x10,0x06,0x80,0xF7,0xE5,0x20,0x00,0xFA,0xA9,0xF7,0x45,0xC7,0xFF,0xF4, +0xA9,0xF7,0x09,0xEC,0x03,0x66,0x10,0xA6,0x10,0xC1,0x6D,0xC4,0xA9,0xC2,0x6D,0xC2, +0xA9,0x41,0x0B,0x77,0x10,0x18,0xA7,0xB7,0x10,0x16,0xA7,0xF7,0x09,0xA8,0x03,0xF7, +0x09,0x8A,0x03,0xF7,0x09,0xC4,0x03,0x66,0x10,0xA6,0x10,0xC1,0x6D,0xA6,0xA9,0xC2, +0x6D,0xA4,0xA9,0x41,0x0B,0x77,0x10,0xFA,0xA6,0xB7,0x10,0xF8,0xA6,0xF7,0x09,0x86, +0x03,0xF7,0x09,0x68,0x03,0x82,0x15,0x81,0x15,0xF7,0x09,0x7A,0x03,0x44,0x10,0x82, +0x15,0x81,0x15,0xF7,0x09,0x70,0x03,0x43,0x10,0xC1,0x15,0x04,0x00,0xF7,0x09,0xA8, +0x00,0xB7,0x15,0x90,0xA9,0x04,0x01,0x00,0x62,0x01,0x52,0x5E,0xF7,0xDD,0x92,0xA9, +0xC8,0x89,0x77,0x00,0xC2,0xF0,0xC0,0x15,0xBE,0x07,0xC5,0x15,0x1C,0x05,0xF7,0x09, +0x62,0x00,0x15,0x14,0x0D,0x12,0x43,0x10,0x04,0x0A,0x11,0x01,0xC0,0x15,0xBE,0x07, +0xC5,0x15,0x1C,0x05,0x15,0x14,0x15,0x14,0xF7,0x09,0x48,0x00,0x03,0x0A,0x44,0x10, +0x06,0x01,0xF7,0x09,0xBA,0xEE,0x04,0x10,0x43,0x10,0xF7,0x09,0x48,0x00,0xE6,0x1D, +0x4A,0xA9,0x01,0x0A,0xF7,0x09,0x58,0x00,0xB7,0x15,0x40,0xA9,0xF7,0xDD,0x42,0xA9, +0x78,0x89,0x77,0x00,0x72,0xF0,0xC2,0x1F,0x68,0xA8,0xF7,0x09,0x0A,0xEF,0x66,0x11, +0xF7,0x09,0xC4,0xB5,0xF7,0x09,0x1E,0x00,0x01,0x0A,0xF7,0x09,0x32,0x00,0x81,0x15, +0x77,0x00,0x96,0x00,0xF7,0x09,0x7E,0xEE,0xF7,0x09,0xC8,0x02,0x55,0x10,0x15,0x0A, +0xF7,0x09,0xB6,0x02,0x87,0x00,0xC0,0x15,0xBE,0x07,0xC5,0x15,0x1C,0x05,0xC1,0x10, +0xF7,0x09,0xE4,0xFF,0x43,0x10,0x01,0x11,0xF7,0x09,0xDC,0xFF,0x44,0x10,0x87,0x00, +0xC3,0x0B,0x02,0x02,0xC4,0x0B,0x11,0x03,0xF7,0xB5,0x01,0x00,0xC9,0xA8,0x0E,0x02, +0x47,0x60,0xF7,0x09,0xDE,0x03,0xF7,0x09,0xF0,0x05,0xC0,0x15,0xBE,0x07,0xC5,0x15, +0x1C,0x05,0x50,0x15,0x50,0x15,0x50,0x15,0x48,0x13,0x87,0x00,0xE6,0x15,0x10,0x5F, +0xC0,0x1D,0xA6,0xA8,0xC0,0x65,0x04,0x00,0x37,0x20,0xA0,0xA8,0x01,0x05,0x20,0x89, +0x37,0x10,0x96,0xA8,0xC8,0x1D,0xA8,0xA8,0xC3,0x45,0x00,0xFC,0xC4,0x45,0x00,0xFC, +0xC4,0x55,0x00,0xC8,0x20,0x11,0xC3,0x55,0x00,0xD0,0xE0,0x10,0xF7,0xC5,0x02,0x00, +0x75,0xA8,0x87,0x00,0x01,0x0B,0xC1,0x6D,0x66,0xA8,0xF7,0x09,0x56,0x02,0x77,0x10, +0x5E,0xA8,0xF7,0x09,0xA2,0x02,0xF7,0xB5,0x04,0x00,0x5B,0xA8,0x02,0x02,0xF7,0x09, +0xE2,0x05,0xF7,0xDD,0x6C,0xA8,0xA2,0x88,0x77,0x00,0x9C,0xEF,0xF7,0x09,0xC6,0xED, +0xEC,0x01,0xC3,0x15,0xBE,0x07,0xF7,0x09,0x08,0xEE,0xF7,0x09,0x04,0xEE,0xC1,0x12, +0xF7,0x09,0x02,0xEE,0xE6,0x15,0x03,0x00,0x77,0x00,0xF8,0xE3,0x01,0x0A,0xF7,0x09, +0xF4,0xED,0xF7,0xE5,0x02,0x00,0x6A,0xA7,0x30,0x01,0x00,0x64,0x01,0xAE,0x5F,0x7F, +0x10,0x66,0xA7,0xF7,0xE5,0x02,0x00,0x60,0xA7,0x7F,0x10,0x5C,0xA7,0xEE,0x01,0xC3, +0x15,0xBE,0x07,0x02,0x01,0xC3,0x15,0xC2,0x07,0x77,0x00,0xBC,0xED,0xC1,0x1D,0xF6, +0xA7,0x77,0x00,0xB8,0xED,0xF7,0xD5,0x04,0x00,0xF3,0xA7,0xFF,0x15,0x80,0xC1,0xF8, +0xA7,0xF7,0xDD,0x04,0xA8,0x3A,0x88,0x77,0x00,0x34,0xEF,0xF7,0xB5,0x04,0x00,0xDD, +0xA7,0x05,0x03,0xF7,0xC5,0x04,0x00,0xD5,0xA7,0xF7,0x09,0x5E,0x05,0xF7,0xDD,0xE8, +0xA7,0x1E,0x88,0x77,0x00,0x18,0xEF,0xF7,0xD5,0x01,0x00,0xC1,0xA7,0x77,0x00,0x0E, +0xEF,0xF7,0xC5,0x01,0x00,0xB7,0xA7,0x77,0x00,0x04,0xEF,0xC3,0x1D,0xBE,0xA7,0xF7, +0x09,0xEE,0x02,0xC3,0x0B,0x2A,0x03,0xC2,0x1D,0xB0,0xA7,0x07,0x02,0xC0,0x15,0x00, +0xA0,0x01,0x0A,0xF7,0x09,0x92,0xFA,0xB7,0x10,0xA0,0xA7,0xF7,0x09,0x7E,0xF7,0xC1, +0x10,0xF7,0x09,0x86,0xFA,0xE3,0x0B,0xD7,0x28,0x18,0x00,0x01,0x07,0x1E,0x89,0xF7, +0x09,0x4A,0xED,0xC3,0x15,0xBE,0x07,0xF7,0x09,0x56,0x01,0xC1,0xED,0x6A,0xA7,0xF7, +0x09,0x3A,0xED,0xF7,0x09,0x4A,0x01,0xC1,0xED,0x60,0xA7,0xF7,0x09,0x2E,0xED,0xE6, +0x15,0x00,0x80,0xC3,0x15,0x03,0x00,0x77,0x00,0x26,0xE3,0xC0,0x15,0x00,0x80,0x77, +0x00,0xBE,0xEF,0xE6,0x15,0x1E,0x4F,0xC3,0x15,0xBE,0x07,0xF7,0x09,0x22,0x01,0x77, +0x10,0x36,0xA7,0xF7,0x09,0x1A,0x01,0x77,0x10,0x30,0xA7,0xF7,0x1D,0x32,0xA7,0x3C, +0xA7,0xF7,0xC5,0x02,0x00,0x27,0xA7,0x87,0x00,0xF7,0x09,0x02,0xED,0x26,0x01,0x01, +0x11,0xC1,0x6D,0x0A,0xA7,0xF7,0x09,0xE2,0x00,0x41,0x11,0xC1,0x6D,0x04,0xA7,0xF7, +0x09,0xD8,0x00,0xC0,0x1D,0x0A,0xA7,0xC0,0x65,0x04,0x00,0x37,0x20,0x04,0xA7,0x01, +0x05,0x20,0x89,0xB3,0x0A,0xFE,0xFF,0x37,0x10,0xF6,0xA6,0xC8,0x1D,0x08,0xA7,0xC3, +0xE5,0xA8,0x66,0x83,0x0C,0xC3,0x55,0x00,0x80,0xE0,0x10,0x20,0x0A,0x37,0x61,0xCE, +0xA6,0x77,0x61,0xCE,0xA6,0xF7,0xC5,0x02,0x00,0xD3,0xA6,0xF7,0xDD,0xEA,0xA6,0x20, +0x87,0xF7,0x09,0x7A,0xB3,0x77,0x00,0x16,0xEE,0xF7,0x09,0xA2,0xEC,0x17,0x01,0x00, +0x64,0x01,0x0C,0x61,0xF6,0x01,0xC4,0x45,0x00,0xFC,0xC4,0x55,0x00,0xD0,0xC5,0x45, +0x00,0xFC,0xC5,0x55,0x00,0xC8,0xC1,0x10,0xE3,0x0B,0xC1,0xE5,0xA8,0x66,0x81,0x0C, +0xC1,0x55,0x00,0x80,0xC0,0x1D,0xA0,0xA6,0xC2,0x1D,0x9A,0xA6,0x02,0x20,0xE1,0x05, +0x60,0x20,0xFC,0x02,0x48,0x11,0x20,0x11,0xCB,0x0A,0xF8,0x01,0xC0,0x1D,0x86,0xA6, +0xC1,0x1D,0x84,0xA6,0xC4,0x15,0x00,0x80,0xC5,0x15,0x00,0xC0,0x40,0x20,0x0A,0x05, +0x44,0x28,0xFC,0x87,0x45,0x22,0xFA,0x86,0x43,0x12,0xC3,0x0C,0xC3,0x65,0xA8,0x66, +0xE3,0x0A,0xF4,0x01,0xC3,0x15,0xBE,0x07,0xF7,0x09,0x3C,0x00,0x66,0x10,0xF7,0x09, +0x36,0x00,0x44,0x10,0x83,0x15,0xF7,0x09,0xA8,0xFD,0xF7,0x09,0x00,0xFF,0xF7,0xDD, +0x5E,0xA6,0x94,0x86,0x77,0x00,0x8E,0xED,0x01,0xE4,0xD0,0x0B,0x01,0x04,0xC1,0x0A, +0x87,0x00,0x57,0x20,0x64,0x00,0x04,0x06,0x57,0x20,0x9C,0xFF,0x01,0x05,0x87,0x00, +0xFF,0x15,0xE6,0x07,0x22,0xA6,0x18,0x89,0xC1,0x14,0xC2,0x14,0x42,0x0C,0x41,0x0B, +0x87,0x00,0xC2,0x15,0x68,0x01,0xC0,0x15,0xC2,0xFE,0x08,0x0A,0x70,0x10,0x02,0x00, +0x01,0x04,0x48,0x0A,0xA0,0x10,0x01,0x1C,0x02,0x00,0x01,0x04,0x81,0x60,0x87,0x00, +0xC1,0x1D,0x04,0xA6,0x02,0x01,0xC1,0x1D,0xFC,0xA5,0xE6,0x10,0x03,0x0A,0xC1,0x0B, +0x03,0x80,0xC3,0x0A,0xC1,0x45,0x00,0x80,0xC5,0x15,0xC4,0xFE,0x55,0x10,0x0D,0x10, +0x42,0x19,0x41,0x19,0xC2,0x0C,0x41,0x0C,0xC3,0x0B,0x03,0x04,0x02,0x0B,0x41,0x0B, +0x01,0x0B,0x83,0x15,0x87,0x00,0xC0,0x1D,0xB4,0xA5,0xC4,0x15,0x5A,0x00,0xC5,0x15, +0xC4,0xFE,0x0D,0x10,0x25,0x0A,0x25,0x11,0xD5,0x0B,0x40,0x15,0x45,0x13,0x02,0x10, +0x04,0xE0,0xF7,0x09,0x48,0x00,0xC1,0x10,0x00,0x11,0xF7,0x09,0x40,0x00,0xC4,0x15, +0x00,0x80,0xC5,0x0C,0x47,0x61,0x0E,0x01,0x09,0x01,0x05,0x01,0x40,0x10,0xC1,0x10, +0x01,0x51,0x03,0x10,0x07,0x01,0x01,0x51,0x03,0x51,0x04,0x01,0x40,0x10,0xC1,0x10, +0x03,0x10,0x03,0x51,0x77,0x10,0x7E,0xA5,0xF7,0x10,0x7C,0xA5,0xC2,0x25,0x2D,0x00, +0x45,0x0B,0x0D,0x01,0x00,0x64,0x01,0x6A,0x62,0xC5,0x0C,0xC5,0x0C,0xC5,0x0C,0x77, +0x11,0x6E,0xA5,0x87,0x00,0xC0,0x35,0x01,0x00,0x06,0x03,0xC0,0x65,0x8F,0x62,0x03, +0x12,0x03,0x68,0x83,0x0C,0x87,0x00,0x03,0x1C,0x8E,0x62,0x87,0x00,0x00,0x00,0x77, +0x04,0xED,0x08,0x61,0x0D,0xD0,0x11,0x3A,0x16,0x9C,0x1A,0xF7,0x1E,0x48,0x23,0x8D, +0x27,0xC7,0x2B,0xF3,0x2F,0x0F,0x34,0x1C,0x38,0x17,0x3C,0x00,0x40,0xD4,0x43,0x93, +0x47,0x3C,0x4B,0xCD,0x4E,0x46,0x52,0xA6,0x55,0xEA,0x58,0x13,0x5C,0x1F,0x5F,0x0D, +0x62,0xDD,0x64,0x8D,0x67,0x1D,0x6A,0x8C,0x6C,0xD9,0x6E,0x04,0x71,0x0B,0x73,0xEF, +0x74,0xAD,0x76,0x47,0x78,0xBC,0x79,0x0A,0x7B,0x32,0x7C,0x33,0x7D,0x0E,0x7E,0xC1, +0x7E,0x4C,0x7F,0xB0,0x7F,0xEC,0x7F,0xFF,0x7F,0x00,0x0A,0xC3,0x0B,0x02,0x04,0x03, +0x0B,0xD0,0x0B,0xC4,0x0B,0x02,0x04,0x04,0x0B,0x80,0x0A,0xC4,0x20,0x40,0x0C,0x37, +0x9C,0x08,0x63,0xDC,0xA4,0x87,0x00,0x08,0x00,0x10,0x18,0x30,0x38,0x28,0x20,0xC4, +0x1D,0xBC,0xA4,0xC4,0xE0,0x57,0x07,0xC4,0x65,0x06,0x00,0xC1,0x1D,0xB4,0xA4,0xC2, +0x15,0x01,0x00,0x40,0x1C,0x02,0x00,0x05,0x02,0xC2,0x0A,0x19,0x02,0xC1,0x1D,0xA0, +0xA4,0xF8,0x01,0x05,0x12,0x05,0xE1,0x02,0x80,0x01,0x10,0xF3,0x01,0x03,0x02,0x31, +0x1C,0x02,0x00,0x02,0x00,0x77,0x21,0xB8,0x9C,0xF7,0x03,0x48,0x11,0x42,0x1C,0x02, +0x00,0x02,0x02,0xC2,0x1D,0x7A,0xA4,0xB7,0x10,0x78,0xA4,0x40,0x61,0x11,0x01,0xC0, +0x1D,0x6E,0xA4,0x05,0x1C,0x02,0x00,0x00,0xE1,0x37,0x20,0x62,0xA4,0x01,0x06,0x20, +0x89,0x37,0x10,0x5C,0xA4,0x37,0x10,0x5A,0xA4,0xC2,0x1D,0x54,0xA4,0x10,0x0A,0x50, +0x11,0xC4,0xE5,0x06,0x00,0xC2,0x15,0x00,0x80,0xC1,0x15,0x00,0xC0,0x26,0x10,0x10, +0x0A,0x10,0x0A,0x84,0x0C,0xC4,0x0A,0x10,0x05,0xC5,0x14,0x50,0x11,0x42,0x21,0xFA, +0x87,0x41,0x21,0xF8,0x86,0xC5,0x0C,0xC5,0x65,0xA8,0x66,0xA5,0x0A,0x7E,0x29,0x00, +0x00,0xF1,0x07,0x7E,0x13,0x00,0x00,0xEE,0x01,0xC8,0x15,0x40,0xC0,0x83,0x15,0x93, +0x0A,0xD3,0x0B,0x87,0x00,0x03,0x0A,0xD3,0x01,0x00,0x62,0x01,0xC8,0x63,0x87,0x00, +0x26,0x10,0xF7,0x09,0x7A,0xB0,0x66,0x10,0xA6,0x10,0xE6,0x10,0x26,0x11,0x66,0x11, +0xC0,0x15,0x00,0x80,0xC1,0x15,0x00,0xC0,0xC2,0x15,0x40,0xC0,0xF7,0x09,0x04,0x00, +0x77,0x00,0x4A,0xE7,0xE6,0x10,0xD3,0x0B,0xC5,0x14,0x40,0x21,0xFD,0x87,0x41,0x21, +0x0B,0x86,0xC5,0x0C,0xC5,0x65,0xA8,0x66,0xE5,0x0A,0xF6,0x02,0xE6,0x10,0x43,0x11, +0xF7,0x09,0xE0,0xFF,0x83,0x15,0xF0,0x01,0x42,0x21,0xEE,0x02,0x82,0x15,0xE2,0x0B, +0x83,0xE0,0xC5,0x10,0xC1,0x1D,0xB0,0xA3,0x40,0x1C,0x02,0x00,0x12,0x03,0x02,0x20, +0x02,0x06,0x01,0x10,0xF9,0x01,0x43,0x11,0x83,0x60,0xC0,0x20,0x0A,0x02,0x05,0x62, +0x32,0x1C,0x02,0x00,0x02,0x00,0x37,0x20,0x90,0xA3,0x05,0x02,0xF7,0x1D,0x88,0xA3, +0x88,0xA3,0x32,0x10,0x02,0x00,0x43,0x12,0x43,0x60,0xC2,0x20,0x05,0x02,0x49,0x61, +0xB1,0x1C,0x02,0x00,0x02,0x00,0x03,0x01,0xB1,0x10,0x02,0x00,0x4A,0x11,0x80,0x10, +0xC0,0xE5,0x04,0x00,0x37,0x20,0x60,0xA3,0x09,0x02,0x81,0x62,0x09,0x0A,0xB1,0x1C, +0x02,0x00,0x02,0x00,0x77,0x10,0x50,0xA3,0x77,0x10,0x4E,0xA3,0x87,0x00,0x05,0x0A, +0x05,0x01,0xC5,0x0B,0x01,0x03,0x87,0x00,0xC5,0x15,0x16,0x00,0xC2,0x1D,0x40,0xA3, +0xFA,0x03,0xF7,0x09,0xD4,0xF2,0x84,0x10,0xC0,0x35,0xFF,0x0F,0xF2,0x03,0x02,0x10, +0xF7,0x09,0xC6,0xF2,0x47,0x61,0xE1,0x0B,0xF6,0x02,0xF7,0x09,0x64,0xF6,0x02,0x11, +0xF7,0x09,0xE4,0xF2,0x43,0x10,0xF7,0x09,0x06,0xFF,0xEE,0x01,0xE1,0x45,0x00,0x80, +0xEB,0x01,0xF7,0x0B,0x0A,0xA3,0x12,0x03,0xC1,0x35,0xFF,0x0F,0xDC,0x03,0x26,0x10, +0xF7,0x09,0x6C,0xAF,0x66,0x10,0xF7,0x09,0x92,0xF2,0xC0,0x15,0x00,0xA0,0xF7,0x09, +0xBC,0xE6,0x02,0x01,0xE1,0x55,0x00,0x80,0x77,0x00,0x5A,0xE6,0xC1,0x15,0x00,0x80, +0xF7,0x09,0xA0,0xF2,0x87,0x00,0xF7,0xC5,0x10,0x00,0xC7,0xA2,0xC2,0x1D,0xDA,0xA2, +0xE6,0x9D,0xBE,0xA2,0xCE,0xAD,0xD0,0xA2,0x04,0x03,0xC2,0x15,0x01,0x00,0xCE,0x9D, +0xC6,0xA2,0xF7,0xB5,0x02,0x00,0xAB,0xA2,0x02,0x02,0xEA,0x01,0x00,0x64,0x01,0x24, +0x65,0xC2,0x15,0x01,0x00,0xF7,0x09,0xC2,0x00,0xF7,0x09,0xF8,0x00,0xA6,0x10,0xC3, +0x6D,0x9A,0xA2,0xF7,0x20,0x98,0xA2,0x01,0x05,0x20,0x89,0xF7,0x10,0x8E,0xA2,0xCB, +0x1D,0xA0,0xA2,0xF7,0x09,0x34,0x01,0xB7,0x15,0x96,0xA2,0xB7,0x95,0x7A,0xA2,0xF7, +0xD5,0x02,0x00,0x75,0xA2,0x87,0x00,0xE6,0x1D,0x84,0xA2,0xC0,0x15,0x04,0x00,0xF7, +0x09,0x78,0xFC,0xF7,0x09,0x4A,0xFC,0x44,0x10,0xF7,0x09,0x68,0xFC,0xF7,0x09,0x40, +0xFC,0x43,0x10,0x66,0x10,0x0E,0xE1,0x01,0x61,0x66,0x10,0xF7,0x1D,0x56,0xA2,0xA0, +0x9F,0xF7,0x65,0x10,0x00,0x58,0xA2,0xF7,0x09,0x42,0x00,0xF7,0xE5,0x18,0x00,0x4E, +0xA2,0x83,0x15,0x84,0x15,0xF7,0x09,0x34,0x00,0xC1,0x1D,0x42,0xA2,0xC1,0xE5,0x10, +0x00,0xC1,0x45,0xC7,0xFF,0xC1,0x00,0xC2,0x1D,0x76,0x9F,0x80,0x10,0xC2,0xE0,0x82, +0x0C,0xC4,0x14,0xC4,0x45,0x00,0x38,0x44,0x50,0x10,0x11,0xC2,0x0A,0xF9,0x06,0xD0, +0x1F,0x12,0xA2,0xC8,0x15,0x80,0xC1,0xB7,0x15,0x14,0xA2,0x87,0x00,0xF7,0x45,0xC7, +0xFF,0x0C,0xA2,0xF7,0x09,0x14,0x00,0xC2,0x15,0x01,0x00,0xF7,0x09,0x4C,0x00,0xC3, +0x6D,0x3E,0x9F,0xF7,0x10,0x3A,0x9F,0x77,0x00,0x90,0x00,0xC3,0x0B,0x01,0x04,0x03, +0x0B,0xC4,0x0B,0x01,0x04,0x04,0x0B,0xC0,0x15,0xC4,0xFE,0x08,0x0A,0xC4,0x20,0x09, +0x06,0x04,0x03,0xE0,0x10,0x20,0x11,0x05,0x11,0x07,0x01,0xC0,0x15,0xFF,0xFF,0x05, +0x11,0x06,0x01,0x20,0x11,0xE0,0x10,0xC5,0x10,0xC0,0x65,0x04,0x00,0x00,0x12,0xC1, +0x15,0x00,0x80,0x87,0x00,0x97,0x20,0x01,0x00,0x03,0x02,0xF7,0xD5,0x10,0x00,0x99, +0xA1,0x26,0x10,0xC3,0x15,0xC4,0xFE,0x4B,0x11,0x23,0x0A,0xE3,0x15,0x08,0x00,0xD3, +0x0B,0xC0,0x14,0xC3,0x12,0xC0,0x0A,0x0B,0x05,0x82,0x0C,0xFC,0x86,0x02,0x8C,0x83, +0x0A,0xC4,0x15,0x40,0x00,0x84,0x0A,0xC0,0x0A,0x09,0x05,0x82,0x0C,0xFB,0x01,0xA6, +0x10,0xC4,0x15,0x49,0x00,0xC4,0x0A,0x82,0x0C,0xFD,0x86,0x82,0x15,0xC4,0x45,0x08, +0x00,0xC4,0x5D,0x6A,0xA1,0xC3,0x0C,0x80,0x15,0x87,0x00,0xC4,0x00,0x01,0x60,0x7B, +0x01,0x00,0x4C,0x00,0x82,0x66,0x01,0x86,0x84,0x60,0xC5,0x0A,0x07,0x07,0xC2,0x8C, +0xF9,0x86,0x23,0x11,0xC4,0x45,0xFF,0x07,0x82,0x0A,0xF4,0x01,0xF7,0xB5,0x10,0x00, +0x2F,0xA1,0x02,0x02,0xC4,0xDC,0xFE,0xFF,0x23,0x11,0x87,0x00,0x58,0x80,0xD8,0x80, +0x58,0x81,0x00,0xC1,0x00,0xC1,0x00,0xC1,0x00,0xC1,0x00,0xC1,0xFF,0xFF,0xFF,0xFF, +0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x4C,0x01,0x00,0x26, +0x00,0x88,0x6A,0x8A,0x6A,0x65,0x00,0x69,0x00,0x6E,0x00,0x82,0x00,0x90,0x00,0x95, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x10,0x01,0x00,0x0C,0x00,0xD4,0x6E,0xB6,0x00,0xB7,0x00,0xB8,0x00, +0x8C,0x01,0x00,0x08,0x00,0xE2,0x6E,0x97,0x00,0x10,0x01,0x00,0x08,0x00,0x2C,0x6F, +0x79,0x00,0xE3,0x01,0x00,0x0E,0x00,0x3A,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x43,0x01,0x00,0x1A,0x00,0x8E,0x74,0x15,0x70,0x54,0x52,0x00,0x70,0x55,0x45, +0x17,0x70,0x46,0x41,0x18,0x70,0x4C,0x53,0x00,0x70,0x45,0x00,0xC4,0x01,0x00,0x64, +0x01,0xD2,0x75,0x66,0x00,0xB2,0x0A,0x00,0xC0,0x67,0xC0,0x68,0x70,0x41,0x42,0x00, +0x70,0x43,0x44,0x00,0xC0,0x6A,0xC0,0x6B,0x70,0x31,0x32,0x00,0x70,0x33,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6F,0x00,0x16,0x0C,0x70,0x00,0xB2,0x0A,0x75, +0xC0,0x72,0xC0,0x00,0x70,0x31,0x51,0x73,0x70,0x41,0x58,0x74,0x70,0x42,0x59,0x00, +0x70,0x4A,0x00,0x76,0xC0,0x71,0xC0,0x77,0x90,0x7A,0x90,0x00,0x00,0x1C,0x0C,0x00, +0x00,0x00,0x00,0x00,0x00,0x7A,0x00,0x7D,0x90,0x7B,0xC0,0x7C,0x70,0x46,0x4F,0x00, +0x70,0x4F,0x00,0xA1,0x30,0x7E,0xC0,0x7F,0x70,0x46,0x4F,0x80,0x70,0x4F,0x42,0x00, +0x70,0x41,0x52,0x00,0x00,0x00,0x00,0x83,0x00,0xE8,0x09,0x86,0xC0,0x84,0xC0,0x85, +0x70,0x54,0x52,0x00,0x70,0x55,0x45,0x87,0x00,0x8E,0x0B,0x88,0x00,0xB2,0x0A,0x89, +0xC0,0x84,0xC0,0x8A,0x00,0x40,0x09,0x8B,0x00,0xB2,0x0A,0x00,0xC0,0x8C,0xC0,0x8D, +0x70,0x46,0x41,0x8E,0x70,0x4C,0x53,0x00,0x70,0x45,0x00,0x00,0x00,0x00,0x00,0x91, +0x00,0x5E,0x0A,0x92,0x90,0x98,0x90,0x00,0xC0,0x93,0xC0,0x94,0x70,0x41,0x42,0x00, +0x70,0x31,0x43,0x96,0x00,0xB2,0x0A,0x00,0x30,0x98,0x30,0x00,0x00,0x98,0x00,0x00, +0x90,0x99,0xC0,0x9A,0x70,0x42,0x41,0x00,0x70,0x52,0x00,0x9C,0x20,0x7A,0x00,0x9D, +0x30,0x98,0x30,0x00,0xC0,0x9E,0xC0,0x9F,0x70,0x47,0x52,0xA0,0x70,0x49,0x4E,0x00, +0x70,0x43,0x48,0xA2,0x20,0xA3,0xF0,0x00,0xA0,0xAF,0xF0,0xA4,0xF0,0xA6,0xF0,0xA5, +0xF0,0xA9,0xF0,0x00,0xF0,0xAC,0xF0,0xA7,0xA0,0x02,0x00,0xA8,0xA0,0xB9,0x00,0x00, +0xA0,0xBB,0x00,0xAA,0xA0,0x0A,0x00,0xAB,0x00,0xB2,0x0A,0x00,0x30,0xB9,0x30,0xAD, +0xA0,0x14,0x00,0xAE,0x00,0xB2,0x0A,0x00,0x30,0xBB,0x30,0xB0,0xA0,0x02,0x00,0xB1, +0xA0,0x00,0x00,0xB2,0xA0,0x00,0x00,0xB3,0xA0,0x00,0x00,0xB4,0xA0,0x00,0x00,0xB5, +0xA0,0x00,0x00,0xB6,0xA0,0x00,0x00,0x00,0x00,0xB9,0x00,0x00,0x00,0xBB,0x00,0x00, +0x00,0xC3,0x00,0x00,0x90,0xBA,0xC0,0x00,0x70,0x41,0x00,0xBD,0x90,0xBC,0xC0,0x00, +0x70,0xC2,0x01,0x00,0xA0,0x00,0x30,0x77,0x42,0x00,0x00,0x30,0xBE,0xC0,0xBF,0x70, +0x42,0x2E,0xC0,0x70,0x48,0x41,0xC1,0x70,0x53,0x2E,0xC2,0x70,0x4C,0x4F,0x00,0x70, +0x54,0x53,0xC5,0x90,0xC4,0xC0,0x00,0x70,0x43,0x00,0x00,0x30,0xC6,0xB0,0x00,0xA0, +0x64,0x00,0xC8,0x00,0x5E,0x0A,0xC9,0xC0,0xE1,0xC0,0x00,0xB0,0xCA,0xB0,0x00,0xA0, +0x0B,0x00,0xCC,0x00,0xB2,0x0A,0xCD,0x00,0x4A,0x0C,0x00,0xC0,0xE1,0xC0,0xCF,0x00, +0x5E,0x0A,0xD0,0xC0,0xE1,0xC0,0x00,0xC0,0xD1,0xC0,0x00,0x70,0x58,0x58,0xD3,0x00, +0xB2,0x0A,0xD4,0x00,0x4A,0x0C,0x00,0xC0,0xE1,0xC0,0xD6,0x00,0x5E,0x0A,0xD7,0xC0, +0xDF,0xC0,0x00,0xC0,0xD8,0xC0,0x00,0x70,0x59,0x59,0xDA,0x00,0xB2,0x0A,0xDB,0x00, +0x4A,0x0C,0x00,0xC0,0xDF,0xC0,0x00,0x00,0x62,0x0B,0xDE,0x00,0x82,0x09,0x00,0x30, +0xC3,0x30,0xE0,0x70,0x42,0x4C,0x00,0x70,0x41,0x50,0xE2,0x70,0x42,0x4C,0x00,0x70, +0x49,0x50,0xA1,0x01,0x00,0x06,0x00,0x01,0x00,}; +#endif /* ROM_logo_lda_H */ diff --git a/PDP11/pdp11_ng.c b/PDP11/pdp11_ng.c index 643fa112..a2a9a2dc 100644 --- a/PDP11/pdp11_ng.c +++ b/PDP11/pdp11_ng.c @@ -29,6 +29,7 @@ #include "display/display.h" #include "display/ng.h" #include "sim_video.h" +#include "pdp11_11logo_rom.h" /* Run a NG cycle every this many PDP-11 "cycle" times. */ #define NG_DELAY 1 @@ -42,6 +43,7 @@ t_stat ng_rd(int32 *data, int32 PA, int32 access); t_stat ng_wr(int32 data, int32 PA, int32 access); t_stat ng_svc(UNIT *uptr); t_stat ng_reset(DEVICE *dptr); +t_stat ng_boot(int32 unit, DEVICE *dptr); t_stat ng_set_type(UNIT *uptr, int32 val, CONST char *cptr, void *desc); t_stat ng_show_type(FILE *st, UNIT *uptr, int32 val, CONST void *desc); t_stat ng_set_scale(UNIT *uptr, int32 val, CONST char *cptr, void *desc); @@ -103,7 +105,7 @@ DEVICE ng_dev = { "NG", &ng_unit, ng_reg, ng_mod, 1, 8, 16, 1, 8, 16, NULL, NULL, &ng_reset, - NULL, NULL, NULL, + &ng_boot, NULL, NULL, &ng_dib, DEV_DIS | DEV_DISABLE | DEV_UBUS | DEV_DEBUG, 0, ng_deb, NULL, NULL, NULL, &ng_help, NULL, &ng_description @@ -193,6 +195,40 @@ ng_reset(DEVICE *dptr) return SCPE_OK; } +t_stat +ng_boot(int32 unit, DEVICE *dptr) +{ + t_stat r; + + set_cmd (0, "CPU 56K"); + set_cmd (0, "NG TYPE=LOGO"); + set_cmd (0, "PCLK ENABLED"); + set_cmd (0, "KE ENABLED"); + set_cmd (0, "RF ENABLED"); + attach_cmd (0, "RF dummy"); + sim_set_memory_load_file (BOOT_CODE_ARRAY, BOOT_CODE_SIZE); + r = load_cmd (0, BOOT_CODE_FILENAME); + sim_set_memory_load_file (NULL, 0); + cpu_set_boot (0400); + sim_printf ("List of 11LOGO commands:\n"); + sim_printf ( +"AND, BACK, BUTFIRST, BUTLAST, COUNT, CTF, DIFFERENCE, DISPLAY, DO,\n" +"EDIT, ELSE, EMPTYP, END, EQUAL, ERASETRACE, FIRST, FORWARD, FPRINT,\n" +"FPUT, GO, GREATER, HEADING, HERE, HIDETURTLE, HOME, IF, KILLDISPLAY,\n" +"LAMPOFF, LAMPON, LAST, LEFT, LESS, LEVEL, LIST, LISTP, LPUT, MAKE,\n" +"MOD, NEWSNAP, NUMBERP, OF, OUTPUT, PENDOWN, PENUP, PRINT, PRODUCT,\n" +"QUOTIENT, REQUEST, RIGHT, RUG, SENTENCE, SETHEADING, SETTURTLE, SETX,\n" +"SETXY, SETY, SHOW, SHOWTURTLE, SNAP, STARTDISPLAY, STF, STOP, SUM,\n" +"THEN, TO, TOOT, TRACE, TYPE, VERSION, WIPE, WIPECLEAN, WORD, WORDP,\n" +"XCOR, YCOR.\n\n"); + sim_printf ("MIT AI memo 315 documents a later version of 11LOGO but may be helpful\n"); + sim_printf ("in exploring the software. It can currently be found here:\n"); + sim_printf ("https://dspace.mit.edu/handle/1721.1/6228\n\n"); + sim_printf ("To get started with turtle graphics, type STARTDISPLAY.\n\n\n"); + + return r; +} + t_stat ng_set_type(UNIT *uptr, int32 val, CONST char *cptr, void *desc) { @@ -289,6 +325,12 @@ t_stat ng_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr fprintf(st, "Set SCALE to one of 1, 2, 3, or 4 to select full size, half size,\n"); fprintf(st, "quarter size, or eighth size.\n\n"); + fprintf(st, "The primary software for the NG display was MIT's PDP-11 Logo, or 11LOGO.\n"); + fprintf(st, "To run 11LOGO:\n\n\n"); + fprintf(st, " sim> set cpu 11/45\n"); + fprintf(st, " sim> set ng enabled\n"); + fprintf(st, " sim> boot ng\n\n"); + return SCPE_OK; } #else /* USE_DISPLAY not defined */ diff --git a/sim_BuildROMs.c b/sim_BuildROMs.c index 131f4c28..750e2869 100644 --- a/sim_BuildROMs.c +++ b/sim_BuildROMs.c @@ -48,6 +48,7 @@ struct ROM_File_Descriptor { {"VAX/vmb.exe", "VAX/vax_vmb_exe.h", 44544, 0xFFC014BB, "vax_vmb_exe"}, {"PDP11/lunar11/lunar.lda", "PDP11/pdp11_vt_lunar_rom.h", 13824 , 0xFFF15D00, "lunar_lda"}, {"PDP11/dazzledart/dazzle.lda", "PDP11/pdp11_dazzle_dart_rom.h", 6096, 0xFFF83848, "dazzle_lda"}, + {"PDP11/11logo/11logo.lda", "PDP11/pdp11_11logo_rom.h", 26009, 0xFFDD77F7, "logo_lda"}, {"swtp6800/swtp6800/swtbug.bin", "swtp6800/swtp6800/swtp_swtbug_bin.h", 1024, 0xFFFE4FBC, "swtp_swtbug_bin"}, {"3B2/rom_400.bin", "3B2/rom_400_bin.h", 32768, 0xFFD55762, "rom_400_bin"}, };