From 3bdf41c809e36edc2b3600b1ab1d3fdedc992a70 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Thu, 7 Feb 2019 08:16:49 +0100 Subject: [PATCH] PDP11: Add Dazzle Dart game and make it bootable from the DAZ device. --- PDP11/dazzledart/dazzle.68 | 2329 +++++++++++++++++++++++++++++++++ PDP11/dazzledart/dazzle.lda | Bin 0 -> 6096 bytes PDP11/pdp11_daz.c | 29 +- PDP11/pdp11_dazzle_dart_rom.h | 394 ++++++ sim_BuildROMs.c | 1 + 5 files changed, 2751 insertions(+), 2 deletions(-) create mode 100644 PDP11/dazzledart/dazzle.68 create mode 100644 PDP11/dazzledart/dazzle.lda create mode 100644 PDP11/pdp11_dazzle_dart_rom.h diff --git a/PDP11/dazzledart/dazzle.68 b/PDP11/dazzledart/dazzle.68 new file mode 100644 index 00000000..ab0831b5 --- /dev/null +++ b/PDP11/dazzledart/dazzle.68 @@ -0,0 +1,2329 @@ + .TITLE DAZZLE DART + + + .STITL MACROS + +;CONVERT ADDRESS TO DISPLAY PUSHJ +; ARGUMENT IS AC +.MACR MAKEPJ F + .XLIST + SUB #DISREL,F + ASR F + BIS #DPUSHJ,F + .LIST +.ENDM + +;CONVERT DISPLAY CONTROLLER ADDRESSES TO REAL WORLD ADDRESSES +; ARG IS AC +.MACR MAKEAD F + .XLIST + ASL F + ADD #DISREL,F + .LIST +.ENDM + + .MACR SPUSH AA + .XLIST + MOV AA,-(P) + .LIST + .ENDM + + .MACR SPOP AA + .XLIST + MOV (P)+,AA + .LIST + .ENDM + + .MACR FPUSH FF + .XLIST + STF FF,-(P) + .LIST + .ENDM + + + .MACR FPOP FF + .XLIST + LDD (P)+,FF + .LIST + .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 + .STITL SYSTEM PARAMETERS + CIRC==1 + + +A=%0 +B=%1 +C=%2 +D=%3 +E=%4 +F=%5 +U=%5 +M=%5 +P=%6 +SP=%6 +PC=%7 + +FA==%0 +FB==%1 +FC==%2 +FD==%3 +FE==%4 +FF==%5 + +NDISP==0 +MNUSRS==2 + ;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 +;TK DISPLAY +NGCSR=164040 ;DISPLAY CONTROL AND STATUS REGISTER +NGREL=164042 ;DISPLAY RELOCATION REGISTER +;CONSOLE SWITCHES +SWB=177570 + +;SWITCH BOX STUFF +DEVADD=160104 ;PLACE NUMBER OF BOX HERE TO SELECT +DEVICE=160106 ;ACTUAL IN/OUT BUFFER + +PENUF==1 + + +ADDX=150000 +ADDY=144000 +ADDXY=ADDX!ADDY +DPUSHJ=100000 +DPOP=140200 +DPOPJ=140100 +DSTOP=140400 +DRSTXY=143000 ;RESET X AND Y TO 0 +DINC=40000 +TLEN==100 ;LENGTH OF TURTLE DISPLAY LIST (IN BYTES) +TURSIZE==6 ;(DO NOT MAKE BIGGER THAN 8) + + +TKRUN==4000 +TKGO==10000 +TKSTOP==20000 + +DPDLL==20. + + .=PCBRV + CLKBRK ;PROGRAMMABLE CLOCK + 300 ;IS ON BR6 + + + + .=400 + .=.+200 +SPDLP: . ;PDL + .=1000 + +;DISPLAY DIRECTION CODES + +DREC: .BYTE 10 + .BYTE 0 + .BYTE 20 + .BYTE 30 + .BYTE 60 + .BYTE 70 + .BYTE 50 + .BYTE 40 + .EVEN + TIME: 0 +TIMER: 0 ;COUNTS IN SECONDS + +;DISPLAY SYSTEM VARIABLES + +DFLAGS: .WORD 0 +;VARIABLES AND CONSTANTS FOR DISPLAY SYSTEM + +;THESE MUST BE IN THIS ORDER +DORBEG==. +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 +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 +MIRT: 0 ;POINTER TO TEMP TOP OF MIRROR +TEM1: 0 ;USED BY THE TURTLE DRAWER +TEM2: 0 +TEM3: 0 + +DIREC: 0 +PI: 40511 + 7732 + 121041 + 64303 + + +;VARIABLES AND CONSTANTS FOR DAZZLE DART + +DAZSTR==. +MAXMRS==10. +MAXBMS==10. +LARGE==77000 ;A LARGE FLOATING POINT NUMBER + + +RTURNF==1 ;BIT CODE FOR MRBOX +LTURNF==2 +RSLIDF==4 +LSLIDF==10 +BKTRF==20 +FDTRF==40 +PASSF==100 +FIREF==200 +R360: .WORD 36066,5542 ;1/360. +;VARIABLES -- ONE COPY +WALLB: .WORD 0,0 +WALLT: .WORD 0,0 +TEN: .WORD 0,0 +TURNSP: .WORD 40440,0 +SPEED: .WORD 40440,0 +FFBDR: .WORD 0,0 ;RAD OF FBDN ZONE +FFBDR2: .WORD 0,0 ;SQUARE OF ABOVE +FFBDH: .WORD 0,0 ;HT OF FBDN ZONE IN FLOATING POINT +FFBDW: .WORD 0,0 ;WDTH +FFBDB: .WORD 0,0 ;BOUNDARY OF FBDN ZONE +REFSIZ: .WORD 41400,0 ;32. +TARD: .WORD 0,0 +SX: .WORD 0,0 +SY: .WORD 0,0 +BMX: .WORD 0,0 +BMY: .WORD 0,0 +CNT: .WORD 0,0 +TARX: .WORD 0,0 +TARY: .WORD 0,0 + +NUMMRS: 12. +NUMBMS: 3 +GOLTIM: 5. ;WAIT THIS MANY SECONDS AFTER HITTING GOAL +DIGIT: </2>!DPUSHJ ;DISPLAY SUBROUTINES TO DRAW DIGITS + </2>!DPUSHJ + </2>!DPUSHJ + </2>!DPUSHJ + </2>!DPUSHJ + </2>!DPUSHJ + </2>!DPUSHJ + </2>!DPUSHJ + </2>!DPUSHJ + </2>!DPUSHJ + + ;MIRROR VARIABLES + VARBEG==. +CX: REPT2 MAXMRS+8,0,0 +CY: REPT2 MAXMRS+8,0,0 +TX: REPT2 MAXMRS+8,0,0 +TY: REPT2 MAXMRS+8,0,0 +BX: REPT2 MAXMRS+8,0,0 +BY: REPT2 MAXMRS+8,0,0 +ANGM: REPT2 MAXMRS+8,0,0 +COSM: REPT2 MAXMRS+8,0,0 +SINM: REPT2 MAXMRS+8,0,0 +DBOT: REPT2 MAXMRS,0,0 +DIRE: REPT2 MAXMRS,0,0 +CONTRO: REPT2 MAXMRS,0,0 +BN: 0 +BMLOST: 0 +SMN: 0 +TARN: 0 +MRFIRE: 0 + VAREND==. +BMR: 0 ;WHO'S GOT THE BEAM? +WALMAX: 200. ;WALLS AT PLUS OR MINUS THIS NUMBER +GOLSIZ: 25. ;GOALS AT PLUS AND MINUS THIS +GOLHT: 10. ;HEIGHT OF GOALS +FBDR: 90. ;RAD OF FBDN ZONE +FBDH: 30. ;HEIGHT OF FORBIDDEN ZONE +FBDW: 100. ;HALF THE WIDTH OF FBDN ZONE +TMOUT: 30. ;MUST SHOOT WITHIN THIS MANY SECONDS +MXPAS: 10. ;MAX NUM OF ALLOWED PASSES + +;INITIAL VALUES FOR MIRRORS AS INTEGERS +ICX: 50. + -50. + REPT1 MAXMRS+6,0 +ICY: 0 + 0 + 100. + -100. + REPT1 MAXMRS+4,0 +IANGM: 180. + 0. + 90. + 270. + REPT1 MAXMRS+4,0 +HIT: 0 ;A FLAG USED BY FIRE ROUTINES +CPAS: 0 +SC1: 0 +SC2: 0 +PSC1: 0 +PSC2: 0 +PCPAS: 0 +PTIM: 0 ;POINTERS TO DISPLAY LIST +NBDR: 0 ;COUNTER FOR BEAM DRAWER +BMCRP: 0 ;POINTER INTO NEXT AREA +BMCRS: REPT1 4*,0 ;SAVE BEAM CORS HERE + + .STITL CLOCKBREAK + +CLKBRK: DEC TIME + BGT CLK1 + MOV #60.,TIME + DEC TIMER + BGE CLK1 ;DONT ALLOW IT TO BECOME NEGATIVE + + CLR TIMER +CLK1: RTT + .STITLE DAZZLE +START: RESET + MOV SPDLP,P + MOV DISREL,NGREL + CLR BMR +RSTRT: MOV #60.,TIME + MOV TMOUT,TIMER + MOV #115,PCS + CLR SC1 + CLR SC2 + +;DAZZLE DART + +DAZZLE: MOV #60.,TIME + MOV TMOUT,TIMER + MOV MXPAS,CPAS + JSR PC,STARTD + LDFPS #0 ;INTEGER,FLOATING + JSR PC,DZCLR ;CLEAR OUT MIRROR VARIABLES + JSR PC,MRALOC ;ALLOCATE BUFFERS + JSR PC,DZINIT ;INITIALIZE VARIABLES + JSR PC,WLINIT ;INITIALIZE WALL VARIABLES + JSR PC,DRWALL ;DRAW THE WALLS + JSR PC,SCINIT ;AREA FOR DRAWING SCORE + JSR PC,MRST ;INITIALZE STATIC (IE BEAM) AREA + +;THE MAIN LOOP +DZMAIN: BIT #20000,SWB + BEQ DZM0 + BPT +DZM0: TST TIMER ;DID HE FIRE IN TIME? + BGT DZM01 + MOV TMOUT,TIMER + MOV #60.,TIME + MOV MXPAS,CPAS + ADD #4,BMR ;GIVE BEAM AWAY + BIC #177763,BMR + INC BMLOST +DZM01: JSR PC,MOVEAL ;MOVE ALL MIRRORS + CLR HIT ;BEAM COMPUTATION + CLR NBDR + TST MRFIRE + BEQ DZM1 + JSR PC,FBEAM + BR DZM1 +;DELETE PREVIOUS INSTRUCTION TO ALLOW FIRING TO RESET TIME + MOV TMOUT,TIMER + MOV #60.,TIME + +DZM1: JSR PC,DWAIT + + + ;YES. SO NOW IT IS OKAY TO MUNGE DISPLAY LISTS. + JSR PC,DRAWAL ;DRAW ALL NEW THINGS + JSR PC,DR.BM + MOV PTIM,D ;PRINT TIME + MOV TIMER,B + JSR PC,NPRNT + MOV PCPAS,D ;PRINT PASSES LEFT + MOV CPAS,B + JSR PC,NPRNT + TST HIT + BEQ DZM2 ;DIDN'T HIT GOAL + JMP GOLWAT ;GO TO WAIT AND RESTART + +DZM2: JSR PC,DIGO ;START THE DISPLAY BACK UP + BR DZMAIN + +;HAS THE DISPLAY FINISHED YET? +DWAIT: SPUSH A + SPUSH B + MOV #NDISP,A +DWAIT1: MOV A,B + SWAB B +DWAIT2: MOV B,NGCSR + BIT #TKRUN,NGCSR + BNE DWAIT2 + DEC A + BGE DWAIT1 + SPOP B + SPOP A + RTS PC + +;WAIT WHILE RUNNING DISPLAY AND THEN RESTART + +GOLWAT: JSR PC,SCCOMP + JSR PC,DWAIT + MOV #60.,TIME + MOV GOLTIM,TIMER + JSR PC,PRSCR ;PRINT THE SCORE +GOLW1: JSR PC,DWAIT + JSR PC,DIGO + TST TIMER + BGT GOLW1 +GOLWR: JSR PC,DISTOP + ADD #4,BMR + BIC #177763,BMR + JMP DAZZLE + +DIGO: SPUSH C + MOV #TKGO,C + JSR PC,DIMUNG + SPOP C + RTS PC + +DISTOP: SPUSH C + MOV #TKSTOP,C + JSR PC,DIMUNG + SPOP C + RTS PC + +DIMUNG: SPUSH A + SPUSH B + MOV #NDISP,A +DMUNG1: MOV A,B + SWAB B + BIS C,B + MOV B,NGCSR + DEC A + BGE DMUNG1 + SPOP B + SPOP A + RTS PC + + + +SCCOMP: MOV NUMMRS,A + ADD #20.,A + CMP A,HIT ;WAS TOP GOAL HIT? + BNE SCGBOT +SCGTOP: INC SC2 + BIT #4,BMR + BNE SCRET + INC SC2 ;TOP GOAL HIT BY DEFENSE? + BR SCRET +SCGBOT: INC SC1 + BIT #4,BMR + BEQ SCRET + INC SC1 ;BOTTOM GOAL HIT BY DEFENSE? +SCRET: RTS PC + +;PRINT THE SCORE +PRSCR: MOV PSC1,D + MOV SC1,B + JSR PC,NPRNT + MOV PSC2,D + MOV SC2,B + JSR PC,NPRNT + RTS PC + +NPRNT: CLR -(D) ;CLEAR OUT OLD NUMBER + CLR -(D) + CLR -(D) + ADD #6,D + CLR A + CMP B,#999. + BLE NPRNT1 + BPT +NPRNT1: DIV #10.,A + ASL B + MOV DIGIT(B),-(D) + TST A + BEQ NPRNT2 + MOV A,B + CLR A + BR NPRNT1 +NPRNT2: RTS PC + +;MOVE ALL MIRRORS + +MOVEAL: MOV NUMMRS,M +MOVELP: JSR PC,MOVE ;MOVE ONE MIRROR + SUB #4,M + BGE MOVELP + RTS PC + +;MOVE ONE MIRROR. +; CALL WITH INDEX IN M +MOVE: JSR PC,MRBOX ;A _ CONTROL BOX +; BITS ARE CODED AS + SPUSH A + MOV A,CONTRO(M) + BIT #,A + BEQ MVNOTU + BIT #RTURNF,A + BEQ MVLTU ;ITS A LEFT TURN +MVRTU: CLR A ;A FLAG FOR MVTURN +MVLTU: JSR PC,MVTURN ;TURN THIS MIRROR +MVNOTU: MOV (P),A + BIT #,A + BEQ MVNOTR + BIT #FDTRF,A + BEQ MVBKTR ;BACKWARDS TRANSLATION +MVFDTR: CLR A +MVBKTR: JSR PC,MVTRAN ;TRANSLATE THIS MIRROR +MVNOTR: MOV (P),A ;NOW CHECK FOR SLIDING + BIT #,A + BEQ MVNOTS + BIT #LSLIDF,A + BEQ MLSLD + CLR A +MLSLD: JSR PC,MVSLID +MVNOTS: TST (P)+ + RTS PC + +;READ THE BOX +MRBOX: MOV M,A + ASH #8,A + MOV A,DEVADD + CLR DEVICE +MRB1: TST DEVICE ;INPUT IS COMPLETE WHEN M.S.B.= 1 + BPL MRB1 + MOV DEVICE,A + COM A ;DEVICE BITS ARE INVERTED +MRB9: RTS PC + + +;DRAW ALL THE MIRROS THAT NEED TO BE DRAWN +; +DRAWAL: MOV NUMMRS,M +DRAWLP: JSR PC,DRAW ;DRAW ONE MIRROR + SUB #4,M + BGE DRAWLP + CLR BMLOST + RTS PC + + +;DRAW ONE MIRROR. +; CALL WITH INDEX IN M +DRAW: SPUSH CONTRO(M) ;CONTROL BOX WORD + BIT #PASSF,(P) ;PASS THE BEAM? + BEQ DRAW0 + CMP M,BMR + BNE DRAW0 + TST CPAS ;PASSES USED UP? + BEQ DRAW0 + DEC CPAS + ADD #8.,BMR + BIC #177763,BMR + INC BMLOST + BIC #PASSF,CONTRO(M) ;TURN OF FLAG SO WE DON'T LOOP + CMP (P)+,(P)+ ;WHEN WE GO TO REDRAW ALL MIRRORS + BR DRAWAL ;WHAT A KLUDGE! +DRAW0: TST BMLOST + BNE DRAW1 ;IF BEAMER CHANGES REDRAW MIRRORS ANYWAY +; BITS ARE CODED AS + BIT #,(P) + BEQ DRNOTU +DRAW1: JSR PC,DR.MIR ;REDRAW THE MIRROR +DRNOTU: BIT #,(P) + BEQ DRNOTR + JSR PC,DRTRAN ;TRANSLATE THIS MIRROR +DRNOTR: CMP M,BMR ;DOES THIS GUY HAVE THE BEAM? + BNE NOTFIR + CLR MRFIRE + BIT #FIREF,(P) ;IS MIRROR 0 FIRING + BEQ NOTFIR + INC MRFIRE ;YES. SET FLAG +NOTFIR: TST (P)+ + RTS PC + +;TURN THIS MIRROR. +; CALL WITH A = 0 IFF RIGHT TURN +;UPDATE VARIABLES ONLY +MVTURN: LDF ANGM(M),FA + TST A + BEQ MTURT ;RIGHT TURN + SUBF TURNSP,FA ;LEFT TURN + BR .+6 +MTURT: ADDF TURNSP,FA + + JSR PC,MOD360 ;MAKE ANGM MOD 360 + STF FA,ANGM(M) +MRTUR1: JSR PC,MRANG ;GET SIN, COS, AND DIREC + JSR PC,MRTUUP ;UPDATE REST OF TURNED VARIABLES + RTS PC + +;DO ANGLE CRAP +MRANG: STF FA,FE + JSR PC,SINDEG ;FA _ SIN FA + STF FA,SINM(M) + LDF FE,FA + JSR PC,COSDEG + STF FA,COSM(M) + ASH #2,C ;TRIG LEAVES QUADRANT INFO IN C + MOV C,DIRE(M) + RTS PC + + +;INCREMENATL MOD360 ROUTINE. CLOBBERS FC +MOD360: LDCIF #360.,FC + TSTF FA ;IS ANGLE NEGATIVE? + CFCC + BLT MODNEG ;YES + CMPF FA,FC ;IS ANGLE > 360. + CFCC + BLT MODRTS ;NO. ANGLE IS OKAY + SUBF FC,FA ;ELSE ANGLE = ANGLE - 360 +MODRTS: RTS PC + ;ANGLE IS NEGATIVE, SO +MODNEG: ADDF FC,FA ;ANGLE = ANGLE + 360 + RTS PC + + + +;UPDATE VARIABLES THAT HAVE BEEN TURNED +MRTUUP: LDF COSM(M),FA + MULF REFSIZ,FA + STF FA,FF ;DY + + LDF SINM(M),FA + MULF REFSIZ,FA + STF FA,FE ;DX + + ADDF CX(M),FA + STF FA,TX(M) + + LDF FF,FA ;DY + ADDF CY(M),FA + STF FA,TY(M) + + LDF CX(M),FA + SUBF FE,FA + STF FA,BX(M) + + LDF CY(M),FA + SUBF FF,FA + STF FA,BY(M) + + RTS PC + + +;SLIDE THIS MIRROR +;A=0 IF SLIDE TO RIGHT +MVSLID: LDCIF #-1,FA ;FOR TURTLE CONTROLS USE---LDF SINM(M),FA + CLRF FB ;FOR TURTLE--LDF COSM(M),FB + NOP ;SPACE FOR TURTLE PATCH + BR MVTRS + +;TRANSLATE THIS MIRROR +; A = 0 IFF THE DIRECTION IS FORWARD +MVTRAN: LDCIF #-1,FB ;FOR TURTLE---LDF SINM(M),FB + NEGF FB ;= COS (ANGM+90) + CLRF FA ;FOR TURTLE---LDF COSM(M),FA + NOP +MVTRS: MULF SPEED,FA ;DX + MULF SPEED,FB ;DY + TST A ;FD OR BK ? + BEQ FDMOVE + NEGF FA ;BACKWARD, SO NEGATE DX AND DY + NEGF FB +FDMOVE: STF FA,FE + STF FB,FF + ADDF CX(M),FA ;NEW X + ADDF CY(M),FB + LDF FA,FD + JSR PC,CHKBND ;IN BOUNDS? + BNE NOTBND ;OUT OF BOUNDS. DO NOTHING +YBND: LDF FB,FD + JSR PC,CHKBND ;IN BOUNDS? + BNE NOTBND ;OUT OF BOUNDS. DO NOTHING + JSR PC,FBDCH ;CHECK TO SEE IF IN FORBIDDEN ZONE + BNE NOTBND +MRTR1: JSR PC,MRTRUP ;UPDATE VARIABLES +NOTBND: RTS PC + +;CHECK TO SEE IF ENTERING FORBIDDEN ZONE + .IFZ CIRC + +FBDCH: FPUSH FA + FPUSH FB + ABSF FA + CMPF FFBDW,FA + CFCC + BLT FBOK + ABSF FB + CMPF FFBDB,FB + CFCC + BGT FBOK + FPOP FB ;INSIDE FORBIDDEN ZONE + FPOP FA + CLZ + RTS PC + +FBOK: FPOP FB + FPOP FA + SEZ + RTS PC + + .ENDC + + .IFZ CIRC-1 + +FBDCH: FPUSH FA + FPUSH FB + FPUSH FC + STF FB,FC + MULF FA,FA + ADDF WALLT,FC + MULF FC,FC + ADDF FA,FC + CMPF FFBDR2,FC + CFCC + BGT FBNO + SUBF WALLT,FB + MULF FB,FB + ADDF FA,FB + CMPF FFBDR2,FB + CFCC + BGT FBNO + FPOP FC ;OK + FPOP FB + FPOP FA + SEZ + RTS PC + +FBNO: FPOP FC + FPOP FB + FPOP FA + CLZ + RTS PC + + .ENDC + + +;UPDATE VARIABLES DUE TO TRANSLATION +MRTRUP: STF FA,CX(M) + STF FB,CY(M) + + LDF FE,FC ;DX + ADDF TX(M),FC + STF FC,TX(M) + + LDF FF,FC + ADDF TY(M),FC + STF FC,TY(M) + + LDF FE,FC + ADDF BX(M),FC + STF FC,BX(M) + + LDF FF,FC + ADDF BY(M),FC + STF FC,BY(M) + + RTS PC + + +;MUNGE DISPLAY LIST TO TRANSLATE THIS MIRROR +DRTRAN: LDF CX(M),FA + LDF CY(M),FB + JSR PC,ROUND + STCFI FA,D + STCFI FB,E + MOV DBOT(M),A + JSR PC,MTO.R1 ;ACTUALLY PUT IN THE ADDX AND ADDY COMMANDS + RTS PC + + +;DRAW A MIRROR +DR.MIR: MOV DBOT(M),A + MOV A,MIRT ;MIRT WILL BE POINTER TO TOP OF TURTLE DLIST SO FAR + CMP -(A),-(A) + MOV #DRSTXY!DPOPJ,-(A) + SPUSH A + MOV DIRE(M),DIREC + LDCIF #TURSIZ,FB + LDF SINM(M),FA + MULF FB,FA ;DX OF 1ST TURTLE SIDE + MULF COSM(M),FB ;DY OF 1ST SIDE + JSR PC,ROUND + STCFI FA,D + STCFI FB,E + MOV M,A + ASR A + JSR PC,@DR.TU(A) + JSR PC,DR.REF ;THE REFLECTOR + MOV #DRSTXY,@(P)+ ;RESTORE THIS WORD + RTS PC + +;DISPATCH TABLE FOR POINTERS +;THESE ROUTINES SHOULD BE CALLED WITH D,E AND DIREC SET +;AND LEAVE MIRT POINTING TO WHERE REFLECTOR CODE SHOULD START + +DR.TU: DR.TUR + DR.TSQ + DR2TR + DR2SQ + REPT1 MAXMRS-4,DR.TUR + +DR.TUL: DR.TUR ;DISPATCH TABLE FOR THE "2 FIGURE "ROUTINES + DR.TS1 + + +;DRAW A TRIANGULAR POINTER +DR.TUR: SPUSH M + SPUSH DIREC + SPUSH D + SPUSH D + SUB E,2(SP) ;NOW SIZE * (SIN - COS) ON STACK + ADD E,(SP) ;NOW SIZE * (SIN + COS) ON STACK + +;SIDE 1--WILL BE AN ADDXY + MOV MIRT,A + MOV A,TEM3 + CMP (A)+,(A)+ + MOV A,MIRT + JSR PC,MTO.R1 + +;SIDE 2 + ADD #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 + ADD #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 MIRT,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, + SPOP DIREC + SPOP M + MOV TEM3,B ;COPY THE SAME ADDXY + MOV (B)+,(A)+ + MOV (B)+,(A)+ + MOV #DPOPJ,(A) + MOV A,MIRT + RTS PC + +; DRAW ONE SIDE OF THE TURTLE +; DIREC CONTAINS THE DIRECTION +; MIRT 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.STUP + ADD MIRT,D ;D = NEW TOP OF TURTLE + MOV D,MIRT + JSR PC,DR.ASC ;ACTUALLY CREAT THE DISPLAY LIST + RTS PC + + +;THE 2 FIGURE ROUTINES USE C AS A FLAG TO DECIDE +;BETWEEN TRIANGLE AND SQUARE +DR2TR: CLR C + JSR PC,DR.TU1 + RTS PC + +DR2SQ: MOV #2,C + ASR D ;SQUARE IS HALF AS BIG AS TRI + ASR E + JSR PC,DR.TU1 + RTS PC + +;DRAW POINTER AS TWO TRIANGLES +;DLIST IS ADDXY,PUSHJ TO TRIANGLE,ADDXY,PUSHJ,ADDXY, +;PUSHJ TO REFLECTOR,POPJ,TIRANGLE CODE,REFLECTOR CODE + +DR.TU1: SPUSH D + SPUSH E + MOV MIRT,A ;POINTER TO START OF CODE + ADD #4,A + MOV A,TEM1 ;FIRST PUSHJ WILL GO HERE + JSR PC,MTO.R1 ;PUT IN ADDXY. D,E ALREADY SET + MOV TEM1,A + ADD #6,A + MOV A,TEM2 ;POINTER TO 2ND PUSHJ + MOV (P),E + MOV 2(P),D + ASL D + ASL E + NEG D + NEG E ;SET UP FOR 2ND ADDXY + JSR PC,MTO.R1 + MOV TEM2,A + ADD #10.,A ;LEAVE ROOM FOR ADDXY,PUSH TO REF AND POPJ + MOV A,MIRT ;TRIANGLE CODE WILL START HERE + MOV A,B + MAKEPJ B + MOV B,@TEM1 + MOV B,@TEM2 ;PUT IN PUSHJ'S TO TURTLE CODE + MOV #DPOPJ,-(A) ;THE FINAL POPJ + TST -(A) + MOV A,TEM1 ;POINTER TO PUSHJ TO REFLECTOR + MOV (P),E + MOV 2(P),D + JSR PC,MTO.R1 ;THE FINAL ADDXY + SPOP E + SPOP D + JSR PC,@DR.TUL(C) ;DECIDE BETWEEN SQUARE AND TRIANGLE + ADD #2,MIRT ;REFLECTOR CODE WILL START HERE + MOV MIRT,A + MAKEPJ A + MOV A,@TEM1 + RTS PC + +;DRAW POINTER AS A SQUARE +;MADE UP OF ADDXY (DX,DY) +;SIDES ARE (-2DY,2DX),(-2DX,-2DY),(2DY,-2DX) +;ADDXY (DX,DY) + +DR.TSQ: ASR D ;SQUARE IS HALF AS BIG AS TRIANGLE + ASR E +DR.TS1: SPUSH DIREC ;ENTRY FOR "2-SQUARE" WHICH ALREADY ASR'ED D AND E + SPUSH DYB ;THIS WILL FAKE OUT THE + ;ERROR CONDITION ON THE LINE DRAWER + MOV #DISEND,DYB + SPUSH STT ;FOR LINE DRAWER WE WILL MUNG STT + SPUSH M + SPUSH D + SPUSH E + MOV MIRT,A ;FIRST WORD OF CODE WILL GO HERE + CMP (A)+,(A)+ + MOV A,MIRT + JSR PC,MTO.R1 ;FIRST ADDXY + MOV MIRT,STT ;FOR LINE DRAWER + MOV (P),D ;SET UP DX AND DY FOR SIDE 2 + MOV 2(P),E + ASL D + ASL E + NEG E + JSR PC,XYDIR + JSR PC,DR.LIN ;SIDE 2 + MOV (P),E + ASL E + NEG E + MOV 2(P),D + ASL D + NEG D + JSR PC,XYDIR + JSR PC,DR.LIN ;SIDE 3 + MOV (P),D + MOV 2(P),E + ASL D + ASL E + NEG D + JSR PC,XYDIR + JSR PC,DR.LIN ;SIDE 4 + SPOP E + SPOP D + MOV STT,A + CMP (A)+,(A)+ + MOV A,MIRT + MOV #DPOPJ,(A) ;LAST WORD OF CODE + JSR PC,MTO.R1 ;FINAL SIDE + SPOP M + SPOP STT + SPOP DYB + SPOP DIREC + RTS PC + +;THE REFLECTOR PART OF THE MIRROR +DR.REF: SPUSH M + LDF TX(M),FA ;GET DX,DY TO TOP OF MIRROR + LDF CX(M),FB + JSR PC,ROUND + SUBF FB,FA ;DX + STCFI FA,D + + LDF TY(M),FA + LDF CY(M),FB + JSR PC,ROUND + SUBF FB,FA ;DY + STCFI FA,E + + MOV MIRT,A ;HACK THE DISPLAY LIST + CMP (A)+,(A)+ + MOV #DPOPJ,(A) + MOV A,MIRT + JSR PC,MTO.R1 ;ACTUALLY PUTS IN THE ADDX, ADDY + + ;GET DX,DY FROM TOP TO BOTTOM OF MIRROR + LDF BX(M),FA + LDF TX(M),FB + JSR PC,ROUND + SUBF FB,FA ;DX + STF FA,FC + STCFI FA,D + + LDF BY(M),FA + LDF TY(M),FB + JSR PC,ROUND + SUBF FB,FA ;DY + STCFI FA,E + SPUSH D + SPUSH E + + ADD #40,DIREC + BIC #177707,DIREC + JSR PC,DR.STUP ;SET UP TO DRAW LINE + ADD MIRT,D ;POINTER TO NEW TOP + MOV D,MIRT + MOV #DPOPJ,(D) + JSR PC,DR.ASC ;ACTUALLY ASSEMBLE DISPLAY CODE + MOV 4(P),M + CMP M,BMR ;SPECIAL REFLECTOR FOR BEAMER + BNE DR.RER + DIVF TEN,FA + DIVF TEN,FC + STCFI FA,D + STCFI FC,E + NEG D + MOV MIRT,A + CMP (A)+,(A)+ + MOV #DPOPJ,(A) + MOV A,MIRT + JSR PC,MTO.R1 + SPOP E + SPOP D + NEG E + NEG D + JSR PC,XYDIR + SPUSH STT ;FAKE OUT ERROR CONDINTION IN DR.LIN + SPUSH DYB + MOV #DISEND,DYB + MOV MIRT,STT + JSR PC,DR.LIN + MOV #DPOPJ,@STT + SPOP DYB + SPOP STT + BR DR.RE1 + +DR.RER: SPOP E + SPOP D +DR.RE1: SPOP M + RTS PC + + +;ALLOCATE DISPLAY BUFFERS FOR EACH MIRROR +; A = MAX LENGTH OF DISPLAY CODE PLUS DPOPJ +MRALOC: + ;CALCULATE SIZE OF EACH MIRROR DISPLAY BUFFER + LDF REFSIZ,FA ;= 1/2 SIZE OF MIRROR + STCFI FA,B + CLR A + DIV #4,A ;=((1/2 SIZE)/8)*2 + ;= # OF WORDS OF DISPLAY CODE FOR WHOLE MIRROR + TST B ;IF THERE IS A REMAINDER + BEQ DAZ1 ; + INC A ;ROUND UP +DAZ1: ASL A ;TURN INTO BYTE COUNT + ADD #,A ;LEAVE ROOM FOR TURTLE, ETC + + MOV NUMMRS,M + MOV DYT,B +MRAL1: SUB A,B ;B -> FIRST USABLE WORD + MOV B,DBOT(M) + MOV #ADDX,-(B) + MOV #ADDY,-(B) + MOV #DRSTXY,-(B) + SUB #4,M + BGE MRAL1 ;LOOP ON + MOV B,DYB ;BOTTOM OF MIRROR BUFFERS + RTS PC + + +;INITIALIZE STATIC AND LIGHT BEAM AREAS. +;PUT IN A PUSHJ TO EACH MIRROR +MRST: MOV STT,A + MOV NUMMRS,M + MOV M,B + ASR B + ADD B,A + CMP (A)+,(A)+ + MOV A,STT + MOV A,STB ;THIS IS ALSO BOTTOM OF BEAM AREA + MOV #DSTOP,(A) + MOV #DRSTXY,-(A) +MRST1: MOV DBOT(M),E + SUB #6,E ;E -> THE DRSTXY AT THE BEGINNING + MAKEPJ E + MOV E,-(A) + SUB #4,M + BGE MRST1 + RTS PC + + +;INITIALIZE + +DZINIT: MOV NUMMRS,M + MOV M,A + ASR A +DZILP: LDCIF IANGM(A),FA + LDCIF ICX(A),FB + LDCIF ICY(A),FC + STF FA,ANGM(M) + STF FB,CX(M) + STF FC,CY(M) + SPUSH A + JSR PC,MRTUR1 ;GETS SINM, COSM, ETC. AND DRAWS MIRROR + JSR PC,DR.MIR + JSR PC,DRTRAN + SPOP A + SUB #4,M + SUB #2,A + BGE DZILP + RTS PC + +DZCLR: MOV #VARBEG,A +DZCLR0: CLR (A)+ + CMP A,#VAREND + BLO DZCLR0 + LDCIF #20.,FA + STF FA,TEN + CLR BMLOST + RTS PC + +;INITIAL WALL VARIABLES + +WLINIT: MOV NUMMRS,M + LDCIF WALMAX,FA + STF FA,WALLT + STF FA,FB ;WALL1--(200,200) TO (-200,200) + STF FA,FC + STF FA,FD + NEGF FC + STF FC,WALLB + FPUSH FA + LDCIF #90.,FA ;ANGLE=90 DEGREES + STF FA,FE + FPOP FA + JSR PC,WLINI1 + NEGF FB ;WALL2--(200,-200) TO (200,200) + NEGF FC + CLRF FE ;ANGLE=0 + JSR PC,WLINI1 + NEGF FA ;WALL3--(-200,-200) TO (200,-200) + NEGF FD + FPUSH FA + LDCIF #90.,FA ;ANGLE=90 DEGREES + STF FA,FE + FPOP FA + JSR PC,WLINI1 + NEGF FB ;WALL4--(-200,200) TO (-200,-200) + NEGF FC + CLRF FE ;ANG=0 + JSR PC,WLINI1 + LDCIF GOLSIZ,FA ;GOAL1 (-25,200) TO (25,200) + STF FA,FC + NEGF FA + NEGF FD + FPUSH FA + LDCIF #90.,FA ;ANGLE=90 DEGREES + STF FA,FE + FPOP FA + JSR PC,WLINI1 + ADD #4.,M ;SKIP GOALS 2 + NEGF FB ;GOAL3 (-25,-200) TO (25,-200) + NEGF FD + JSR PC,WLINI1 + LDCIF FBDW,FA ;SET UP FBDN ZONE VARIABLES IN FLOATING POINT + STF FA,FFBDW + LDCIF FBDH,FA + STF FA,FFBDH + LDCIF FBDR,FA + STF FA,FFBDR + MULF FA,FA ;RADIUS AND SQUARE OF FBDN ZONE + STF FA,FFBDR2 + LDF WALLT,FB + SUBF FA,FB + STF FB,FFBDB + RTS PC + +WLINI1: FPUSH FA + FPUSH FB + FPUSH FC + FPUSH FD + ADD #4,M + STF FA,BX(M) + STF FB,BY(M) + STF FC,TX(M) + STF FD,TY(M) + LDF FE,FA + STF FA,ANGM(M) + JSR PC,MRANG + FPOP FD + FPOP FC + FPOP FB + FPOP FA + RTS PC + + +;DRAW THE WALLS +DRWALL: LDF WALLB,FA + LDF WALLT,FB + STCFI FA,D + SPUSH D ;WALLB + STCFI FB,-(P) ;WALLT + MOV D,E + JSR PC,MTO.AD ;PUT IN SETXY TO BOTTOM LEFT + SPOP E ;WALLT + SUB (P),E ;WALLB-WALLT = WALLSIZE + MOV E,(P) + CLR D ;DX = 0 + CLR DIREC ;VERTICAL LINE + JSR PC,DR.LIN + MOV (P),D ;DX = WALLSIZE + CLR E ;DY = 0 + MOV #20,DIREC + JSR PC,DR.LIN + MOV (P),E ;DY = WALLSIZE + CLR D ;DX = 0 + MOV #40,DIREC + JSR PC,DR.LIN + SPOP D ;DX = WALLSIZE + CLR E ;DY = 0 + MOV #60,DIREC + JSR PC,DR.LIN + JSR PC,DR.GLS ;DRAW THE GOALS + JSR PC,DR.FB ;DRAW FORBIDDEN ZONE + RTS PC + +;DRAW THE GOALS +DR.GLS: JSR PC,DR.RST ;PUT IN A RESET + MOV WALMAX,E + MOV GOLSIZ,D + NEG D + JSR PC,MTO.AD ;SETXY AT FIRST GOAL + JSR PC,DR.G1 ;DRAW FIRST GOAL + MOV WALMAX,E + ASL E + ADD GOLHT,E + NEG E + CLR D + JSR PC,MTO.AD ;SETXY AT 2ND GOAL + JSR PC,DR.G1 ;DRAW 2ND GOAL + RTS PC + +DR.G1: MOV GOLHT,E ;DRAW A GOAL + MOV GOLSIZ,D + ASL D + JSR PC,DR.SQ + RTS PC + +DR.RST: MOV STT,A ;PUT IN A RESET + MOV #DRSTXY,(A)+ + MOV #DSTOP,(A) + MOV A,STT + RTS PC + + .IFZ CIRC + +DR.FB: JSR PC,DR.RST + MOV FBDW,D + NEG D + MOV WALMAX,E + NEG E + JSR PC,MTO.AD + MOV FBDW,D + ASL D + MOV FBDH,E + JSR PC,DR.SQ ;DRAW BOTTOM FBDN ZONE + MOV WALMAX,E ;POSITION FOR TOP ZONE + ASL E + SUB FBDH,E + CLR D + JSR PC,MTO.AD + MOV FBDW,D + MOV FBDH,E + ASL D + JSR PC,DR.SQ + RTS PC + .ENDC + + + .IFZ CIRC-1 +DR.FB: CLR A ;FLAG TO DRAW TOP + JSR PC,DR.FB0 + MOV #-1,A + JSR PC,DR.FB0 + RTS PC + +DR.FB0: SPUSH A + JSR PC,DR.RST ;PUT IN A RESET + CLRF CURX + CLRF CURY + BIS #PENUF,DFLAGS + LDF WALLT,FB + TST (P) + BEQ DR.F0T ;NEGATE YCOR FOR BOTTOM + NEGF FB +DR.F0T: CLRF FA + SUBF FFBDR,FA + JSR PC,MOVETO + BIC #PENUF,DFLAGS ;PENDOWN + SPOP A ;TOP--BOTTOM FLAG + LDCIF #180.,FA + STF FA,FE + JSR PC,DR.FBS + RTS PC + +DR.FBS: SPUSH A +DR.FB2: LDF FE,FA + LDCIF #3,FB + SUBF FB,FA + STF FA,FE + JSR PC,SINDEG + MULF FFBDR,FA + FPUSH FA ;SAVE Y-COORDINATE + LDF FE,FA + JSR PC,COSDEG + MULF FFBDR,FA ;X--COORDINATE + FPOP FB + SUBF WALLT,FB + TST (P) + BNE D.FBSB + NEGF FB ;NEGATE IT WHEN DRAWING TOP +D.FBSB: JSR PC,MOVETO + TSTF FE + CFCC + BGT DR.FB2 + SPOP A + RTS PC + + .ENDC + + +;LEAVE ROOM IN DISPLAY LIST FOR SCORE AND TIME +SCINIT: JSR PC,DR.RST + MOV #-150.,D + MOV WALMAX,E + ADD #20.,E + CMP (A)+,(A)+ + MOV A,STT + JSR PC,MTO.R1 ;ADDXY TO UPPER LEFT + MOV STT,A + CLR (A)+ + CLR (A)+ + CLR (A)+ ;3 DIGITS. 0 IS DISPLAY NOP + MOV A,PSC1 ;POINTER BEYOND LAST WORDOF SCORE 1 + JSR PC,SCIN0 + MOV A,PCPAS + JSR PC,SCIN0 ;ROOM FOR NUM PASSES LEFT + MOV A,PTIM + JSR PC,SCIN0 + MOV A,PSC2 + MOV A,STT + MOV #DSTOP,(A) + RTS PC + +SCIN0: CMP (A)+,(A)+ ;LEAVE ROOM FOR A 3-DIGIT NUMBER + MOV A,PSC2 + CLR E + MOV #50.,D + JSR PC,MTO.R1 + MOV PSC2,A + CLR (A)+ + CLR (A)+ + CLR (A)+ + RTS PC + +;DRAW A SQUARE +;D IS WIDTH AND E IS HEIGHT +DR.SQ: SPUSH D + SPUSH E + CLR D + CLR DIREC + JSR PC,DR.LIN + CLR E + MOV 2(P),D + MOV #20,DIREC + JSR PC,DR.LIN + CLR D + MOV (P),E + MOV #40,DIREC + JSR PC,DR.LIN + CLR E + MOV 2(P),D + MOV #60,DIREC + JSR PC,DR.LIN + SPOP E + SPOP D + RTS PC + +;SAVE BEAM COORDS FOR DRAW ROUTINE +; CALL BMSTRT FOR FIRST BEAM. +; CALL BMCONT FOR SUBSEQUENT ONES + +STRTBM: MOV #BMCRS,A + STF FA,(A)+ + STF FB,(A)+ + MOV A,BMCRP + +CONTBM: INC NBDR + MOV BMCRP,A + STF FC,(A)+ + STF FD,(A)+ + MOV A,BMCRP + RTS PC + +;DRAW THE BEAM! +DR.BM: JSR PC,BMCS + TST NBDR + BLE DR.BMR ;NO BEAMS + MOV #BMCRS,A + LDF (A)+,FA + LDF (A)+,FB + LDF (A)+,FC + LDF (A)+,FD + SPUSH A + JSR PC,STRTB1 + SPOP A + +DR.BM1: DEC NBDR + BLE DR.BMR + LDF (A)+,FC + LDF (A)+,FD + SPUSH A + JSR PC,CONTB1 + SPOP A + BR DR.BM1 + +DR.BMR: RTS PC + +;FA = X OF FIRST POINT +;FB = Y OF FIRST POINT +STRTB1: BIS #PENUF,DFLAGS + CLRF CURX + CLRF CURY + FPUSH FC + FPUSH FD + JSR PC,MOVETO + FPOP FD + FPOP FC + BIC #PENUF,DFLAGS + +;FC = X OF NEW POINT. +;FD = Y OF NEW POINT +CONTB1: SPUSH M + STF FC,FA ;X + STF FD,FB ;Y + JSR PC,MOVETO + SPOP M + RTS PC + + +;CLEAR BEAM SCREEN +BMCS: MOV STB,STT + MOV #DSTOP,@STT + RTS PC + + +;FIRST BEAM + +FBEAM: CLR BN ;BEAM NUMBER + MOV BMR,SMN ;SOURCE OF BEAM + LDD #LARGE,FA + STF FA,TARD ;TARGET DISTANCE + MOV BMR,M ;MIRROR INDEX + LDD CX(M),FA ;SET UP SOURCE + STF FA,SX + LDD CY(M),FB + STF FB,SY + LDD COSM(M),FC + STF FC,BMX ;BEAM VECTOR COORDS + LDD SINM(M),FD + NEGD FD ;BM PRRP TO MIRROR + STF FD,BMY + MULD FB,FC ;BMX*SY + MULD FA,FD ;BMY*SX + SUBD FD,FC + STF FC,CNT ;L(X)=BM(PERP).(X-S)=BMY*X-BMX*Y+(BMX*SY-BMY*SX) + CLR M + +CHKMRS: CMP M,SMN ;STARTING MIRROR? + BEQ ENDMRS + LDD BMY,FA ;BEAM THRU MIRROR? + MULD TX(M),FA + LDD BMX,FB + MULD TY(M),FB + SUBD FB,FA ;L(T) IN FA + ADDD CNT,FA + LDD BMY,FB + MULD BX(M),FB + LDD BMX,FC + MULD BY(M),FC + SUBD FC,FB + ADDD CNT,FB ;L(B) IN FB + LDD FA,FC ;L(T) IN FC + MULD FB,FA + CFCC ;L(T)*L(B)<0? + BGE ENDMRS + LDD FB,FA ;COMPUTE INTERSECTION, I=B+D*(T-B) + SUBD FC,FB ;D=L(B)/(L(B)-L(T)) IN FA + DIVD FB,FA + LDD TX(M),FC + SUBD BX(M),FC + MULD FA,FC + ADDD BX(M),FC ;TTARX IN FC + LDD TY(M),FD + SUBD BY(M),FD + MULD FA,FD + ADDD BY(M),FD ;TTARY IN FD + LDD FC,FA ;COMPUTE TARGET DISTANCE + SUBD SX,FA ;TTARD=BM.(TTAR-S) + MULD BMX,FA + LDD FD,FB + SUBD SY,FB + MULD BMY,FB + ADDD FB,FA ;TTARD IN FA + CFCC ;MIRROR IN DIRECTION OF BEAM? + BLE ENDMRS + CMP M,NUMMRS ;IS THIS A WALL? + BLE CHKMR1 + JMP WALLS +CHKMR1: CMPD TARD,FA ;CLOSEST MIRROR SO FAR? + CFCC + BLE ENDMRS + MOV M,TARN ;TTAR BECOMES TAR + STF FA,TARD + STF FC,TARX + STF FD,TARY + +ENDMRS: CMP M,NUMMRS ;CHECKED ALL MIRRORS? + BEQ .ENDMR + MOV NUMMRS,A ;CHECKED ALL WALLS? + ADD #16.,A + CMP M,A + BLT .RTRN +BMERR: RTS PC +.RTRN: ADD #4,M ;CHECK REST + JMP CHKMRS +.ENDMR: LDD #LARGE,FA ;HIT A MIRROR? + CMPD TARD,FA + CFCC + BEQ .RTRN ;NO, DO WALLS + LDD SX,FA ;DRAW BEAM + LDD SY,FB + LDD TARX,FC + LDD TARY,FD + TST BN ;IS THIS FIRST BEAM? + BEQ .FBM + JSR PC,CONTBM + BR ENDBM +.FBM: JSR PC,STRTBM +ENDBM: INC BN ;ALL BEAMS? + CMP BN,NUMBMS + BNE NEWBM + CLR HIT + CMP TARN,NUMMRS ;HIT A MIRROR ON FINAL BOUNCE? + BGT FBM.R + MOV TARN,B ;DID BEAM CHANGE TEAMS? + MOV BMR,C + MOV #177773,D + BIC D,B + BIC D,C + CMP B,C + BEQ ENDBM1 ;NO--SAME TEAM + MOV TMOUT,TIMER ;YES--RESET CLOCK + MOV #60.,TIME ;RESET CLOCK + MOV MXPAS,CPAS ;RESET NUM PASSES +ENDBM1: MOV TARN,BMR ;LAST GUY HIT GETS BEAM + MOV #1,BMLOST +FBM.R: RTS PC + +NEWBM: MOV TARN,M ;INDEX TO TARGET + LDD TARX,FA ;TAR BECOMES SOURCE + STF FA,SX + LDD TARY,FA + STF FA,SY + MOV TARN,SMN + LDD #LARGE,FA + STF FA,TARD + LDD ANGM(M),FA ;REFLECT + MULD #40400,FA + STF FA,FE ;2*ANGLE IN FE + JSR PC,SINDEG + STF FA,FD + LDD FE,FA + STF FD,FE ;SIN 2*ANG IN FE + JSR PC,COSDEG ;COS 2*ANG IN FA + LDD BMX,FC ;BMX IN FC + LDD BMY,FB ;BMY IN FB + MULD FE,FB + MULD FA,FC + SUBD FC,FB ;NEW BMX IN FB, YSIN -XCOS + LDD FE,FD + MULD BMX,FD + MULD BMY,FA ;NEW BMY IN FA,XSIN +YCOS + ADDD FD,FA + STF FB,BMX + STF FA,BMY + MULD SY,FB ;COMPUTE NEW CNT + MULD SX,FA + SUBD FA,FB + STF FB,CNT + CLR M ;RESET MIRROR NUMBER + JMP CHKMRS + +WALLS: MOV M,TARN ;WALL BECOMES TARGET + STF FD,TARY + STF FC,TARX + LDD SX,FA + LDD SY,FB + TST BN ;FIRST BEAM? + BEQ .FWBM + JSR PC,CONTBM ;DRAW BEAM + BR .GLCHK ;GO TO CHECK GOALS +.FWBM: JSR PC,STRTBM +.GLCHK: ADD #16.,M ;CHECK GOAL + LDD TX(M),FA + SUBD TARX,FA + LDD TARX,FB + SUBD BX(M),FB + MULD FB,FA + CFCC + BGT GOAL ;(T-X)*(X-B)>0 IMPLIES GOAL + CLR HIT + RTS PC + + +GOAL: MOV M,HIT + TST BN + BNE GOAL1 + CLR HIT +GOAL1: RTS PC + +;STARTDISPLAY +STARTD: MOV #NDISP,A + ASL A +STARD1: MOV #DSTOP,DISREL(A) + MOV #DPDLL,D + MUL A,D + ADD #,D + ASR D + MOV D,DISPDL(A) + SUB #2,A + BGE STARD1 + + MOV #DORBEG,F ;ZERO VARIOUS USER DISPLAY VARS + MOV #DOREND,D ;LAST WORD +SDLOOP: CLR (F)+ ;ZERO WORD + CMP F,D + BLE SDLOOP + +;SET FIRST 2 WORDS OF DLIST +;AND SET THE BUFFER VARIABLES + MOV #DLIST,D + MOV #,(D)+ + MOV #DSTOP,(D) + MOV D,STB ;STATIC AREA BOTTOM + MOV D,STT ;STATIC AREA TOP + + MOV #DISEND,B + CLR -(B) ;SET UP DUMMY FREE AREA + MOV B,DYT ;DYNAMIC AREA TOP + CLR -(B) + MOV B,DYB ;DYNAMIC AREA BOTTOM + MOV B,DYR ;DYNAMIC AREA ROVING POINTER + +;NOW MAKE A PUSHJ TO THE DISPLAY LIST +;AND STUFF IT INTO THE HARDWARE FIRST LOCATION FOR THIS DISPLAY + MOV #DLIST,D + MAKEPJ D + CLR A +SDLP1: MOV D,DISREL(A) + ADD #2,A + CMP A,#2*NDISP + BLE SDLP1 + + +;AND LAST BUT NOT LEAST + MOV #DISREL,NGREL + RTS PC + + +;MOVE FROM CURX,CURY TO POINT IN FA,FB +MOVETO: JSR PC,ROUND + STF FA,FC ;SAVE NEW POINT FOR A MOMENT + STF FB,FD + SUBF CURX,FA ;DX + SUBF CURY,FB ;DY + STF FC,CURX ;UPDATE CURX, CURY TO NEW POINT + STF FD,CURY + STCFI FA,D ;PUT DX IN D + STCFI FB,E ;PUT DY IN E + + BNE MTO.1 ;CHECK FOR DX=DY=0 + TST D + BEQ MTO.R ;JUST RETURN + +MTO.1: BIT #PENUF,DFLAGS ;IS PEN UP? + BNE MTO.PU ;YES + +;THE PEN IS DOWN + JSR PC,XYDIR ;CALCULATE DIREC + JSR PC,DR.LIN ;AND DRAW LINE!! + +MTO.R: RTS PC + + +;THE PEN IS UP +;PUT ADDX AND ADDY COMMANDS INTO DISPLAY LIST +;HAVE TO EXPAND STATIC AREA AND PUT IN ADD COMMANDS +MTO.PU: MTO.AD: MOV #STT,A + JSR PC,STXPND ;STATIC AREA EXPAND + +MTO.RM: MOV A,STT ;A WAS SET IN STXPND + MOV #DSTOP,(A) ;DISPLAY JUMP TO TURTLE +MTO.R1: 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 + RTS PC + + + + ;ROUNDS FA AND FB +ROUND: ADDF #40000,FA ;FA <- FA + 1/2 + STCFI FA,-(P) ;INTEGERIZE FA + LDCIF (P)+,FA ;FA <- INTEGER (FA) + CFCC ;IS FA > 0? + BGE .+6 ;YES + SUBF #40200,FA ;FA <- FA - 1 (TO ROUND AWAY FROM 0) + ADDF #40000,FB ;REPEAT SAME PROCESS FOR FB + STCFI FB,-(P) + LDCIF (P)+,FB + CFCC + BGE .+6 + SUBF #40200,FB + RTS PC + ;CHECK THE NUMBER IN FD. +; SEZ IF IN BOUNDS. CLZ IF OUT OF BOUNDS +CHKBND: ABSF FD + CMPF WALLT,FD + CFCC + BLT ERROOB ;YES, ERROR +CBRND: SEZ + RTS PC +ERROOB: CLZ + RTS PC + +;STATIC AREA EXPAND. +; IS THERE ROOM IN STATIC AREA FOR 2 DISPLAY WORDS? +; RETURN POINTER TO NEW STATIC TOP IN A +STXPND: MOV (A),A ;ROUTINE IS CALLED WITH ADDRESS OF VARIABLE + CMP (A)+,(A)+ ;A _ A+4 + CMP A,DYB ;COMPARE A WITH DYNAMIC BOTTOM + BLO STXPN8 ;THERE'S ROOM! + BPT +STXPN8: RTS PC + +;SIN AND COSINE FUNCTIONS +SINDEG: MOV #-1,A + BR TRIG +COSDEG: MOV #1,A +TRIG: MOV #1,B + TSTF FA + CFCC + BGE TRIG1 + NEGF FA + MUL A,B +TRIG1: DIVF #41464,FA ;DIVIDE BY 45 + MODD #40200,FA ;SEPERATE FRACTION AND INTEGER + MODD #37400,FB + MULF #41000,FB ;MOD 8 + STCFI FB,C + ASL C + ADD C,PC + BR .TRIG0 + BR .TRIG1 + BR .TRIG2 + BR .TRIG3 + BR .TRIG4 + BR .TRIG5 + BR .TRIG6 + MUL A,B + BR .TRIG7 +.TRIG6: MUL A,B + NEG A + BR .TRIG0 +.TRIG4: NEG B + BR .TRIG0 +.TRIG3: NEG B + MUL A,B + BR .TRIG7 +.TRIG2: NEG A + MUL A,B + BR .TRIG0 +.TRIG5: NEG B +.TRIG1: NEG A +.TRIG7: SUBF #40200,FA ;WE WANT 45 - ANGLE + NEGF FA +.TRIG0: MULF PI,FA + MULF #37600,FA ;CONVERT FROM DEGREES TO RADIANS + LDD FA,FD + MULF FD,FD + NEGF FD ;-ANGLE SQUARED INTO FD + LDCFD #40200,FB ;COUNTING CONSTANT "1" + STF FB,FF + TST A + BLT .TRIG9 ;WE WANT SIN + LDD FB,FA + CLRF FB +.TRIG9: LDD FA,FC + TSTF FD + CFCC + BEQ TRIG11 +TRIG10: ADDF FF,FB + DIVF FB,FC + ADDF FF,FB + DIVF FB,FC + MULF FD,FC + ADDF FC,FA + CMPF #41100,FB + CFCC + BGE TRIG10 +TRIG11: TST B + BGE .+4 + NEGF FA + RTS PC + + + +;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* ;PDL AREA FOR OUR DISPLAYS + +;DISPLAY LISTS FOR DIGITS + +DIG.0: 145775 + 150017 + 55400 + 70400 + 55000 + 70400 + 54400 + 71000 + 54400 + 71000 + 64401 + 72004 + 40400 + 71000 + 40400 + 70400 + 41000 + 70400 + 40000 + 42400 + 44400 + 40400 + 45406 + 40400 + 47400 + 54400 + 44400 + 51003 + 54400 + 44400 + 54000 + 55000 + 150013 + 144003 + DPOPJ + +DIG.1: 150001 + 144010 + 45407 + 54000 + 54000 + 57000 + 72000 + 44000 + 44400 + 150013 + 144013 + DPOPJ + + +DIG.2: 150000 + 144004 + 41400 + 44400 + 40400 + 44400 + 40400 + 44400 + 40400 + 45400 + 40400 + 44400 + 54400 + 45400 + 54400 + 44400 + 54400 + 44400 + 54400 + 44400 + 57000 + 64377 + 66437 + 44000 + 46400 + 150011 + 144014 + DPOPJ + +DIG.3: 150004 + 145775 + 55400 + 44400 + 54400 + 44400 + 54400 + 44400 + 54400 + 45400 + 54400 + 44400 + 40400 + 45400 + 40400 + 44400 + 40400 + 44400 + 40400 + 44400 + 41400 + 72425 + 46425 + 42400 + 70400 + 40400 + 70400 + 40400 + 73400 + 5440 + 70400 + 64401 + 54400 + 70400 + 55000 + 70400 + 150025 + 145772 + DPOPJ + +DIG.4: 150014 + 144014 + 54000 + 54000 + 40000 + 42000 + 47000 + 70000 + 70000 + 71000 + 40255 + 41001 + 150030 + 145766 + DPOPJ + +DIG.5: 144013 + 44000 + 45400 + 70000 + 71400 + 54000 + 55400 + 40400 + 44100 + 54400 + 44400 + 54400 + 44400 + 54400 + 44400 + 57000 + 70400 + 55000 + 71000 + 54400 + 71000 + 54400 + 71400 + 40400 + 71000 + 40400 + 70400 + 40400 + 70400 + 41000 + 150027 + 144005 + DPOPJ + +DIG.6: 150014 + 144007 + 41000 + 70401 + 40400 + 70400 + 40400 + 73020 + 64401 + 70400 + 54400 + 70400 + 54400 + 64401 + 54000 + 56400 + 44400 + 55000 + 44400 + 54400 + 45000 + 54400 + 46000 + 40400 + 45000 + 40400 + 44400 + 41000 + 44400 + 42000 + 70401 + 40400 + 70400 + 40400 + 73020 + 64401 + 70400 + 54400 + 70400 + 54400 + 64401 + 55000 + 150023 + 144004 + DPOPJ + +DIG.7: 150000 + 144011 + 41400 + 44000 + 44000 + 60125 + 60112 + 63052 + 150027 + 144013 + DPOPJ + +DIG.8: 144001 + 150005 + 45000 + 40400 + 45000 + 41000 + 44400 + 42000 + 70400 + 41000 + 71000 + 40400 + 72000 + 54400 + 71000 + 55000 + 70400 + 56000 + 44400 + 55000 + 45000 + 54400 + 46000 + 54400 + 45400 + 56000 + 44400 + 54400 + 70400 + 55400 + 70400 + 54400 + 71000 + 54400 + 72000 + 40400 + 71000 + 40400 + 70400 + 40000 + 45400 + 40400 + 45000 + 150012 + 144000 + DPOPJ + +DIG.9: 144006 + 150011 + 41400 + 70400 + 40400 + 70400 + 40400 + 70400 + 40400 + 73000 + 55000 + 71000 + 54400 + 70400 + 56400 + 44400 + 55000 + 45000 + 54400 + 44400 + 54400 + 46000 + 40400 + 45000 + 40400 + 44400 + 40400 + 44400 + 41400 + 60104 + 60210 + 61002 + 150017 + 144016 + DPOPJ + +DLIST: DSTOP ;THE START OF THE DISPLAY LIST + + .=.+6000 + +DISEND: +PATCH: +PAT: + .END START + \ No newline at end of file diff --git a/PDP11/dazzledart/dazzle.lda b/PDP11/dazzledart/dazzle.lda new file mode 100644 index 0000000000000000000000000000000000000000..49d647d2ab972eb30ad5d2db6d191b55f12217f5 GIT binary patch literal 6096 zcmdT|e{2+2e*eCi*jI5$E$YDHZJMU z?2V!*w_tOQA{0f@i9=O{NE9K2TEs<=r8Kf;y=!VEC$vf=KoO$OHSt9$*t_GIePge^ z+s|8*khG`j{-{)CSKpoYzVCg%@B8C@f6Ovcse|4M+Vm`=Fr`_Vd5rcjlES1nx2}0K zPJhB@W7}sBE`K+-fA!iu+IP3d+lU1G(a-univ1okN-_m#P5Qa?KcolJ=hFX@{wy6j zvgk*epNaFt^QOD>Z#Pm*jnDzoxdYrD+{uI`G z>Fxh@-$gLlNe%2iuj`Du*^=OW#Q(>LtA{G#AUD?13l*;JuSkle?x_TkHm;h5S#B=V zfBw0pPFBT^4Ha%W)s6}`7@e5p#?R=DNlV>Yv(zm$vHmF5KdG+3@3rdM8jq}cV0)2> zN6v+Kq!{Fp9y~7tUJdie*$9s;4e=~+tY{o@cY+&exi*=kui zVx)~B>^lg!URQV>guF8Q1h^gtZUibX1;>@MGf?(n5~6=NFGT-fK1E+t&*&ot={&NC zj)G5p7UvPAKKt&uN4iq_+`rrE%)JwBbIYu~ZwXoPJM$4Kqu!b435E8|YZ#Buhgn9w zS;utEOL9j2-TV+V{AfOFj?D8&1I9MSmob)Th<>DsZ*CuMow_~#2bqOrYC5D+Hv0F= zUYBf5mYGg!nGMmXd20riqtP!FswhJ54rCv=F_(M_>H70j^2->qxX)s z)c(04>M{ER*AhuG%+=q|@qJ<1H7CrxZ7!p3n)5o7)E_wU<6Det zYv*L?8pM@wOWt7D5^L+D7g%cf%DIqasgKNEOQeCzsLgXis)V;$5k|1eXMBlS?rEP# z9;1Z6S>cf&Ot1zfRDgR$OZc}H#p98eFgl_9=CDMU^v!`G`b~8|OO~h@2&6d`SwJce zk>m=_Clt&1xgYQo-ffKb_==x!Pe}=Xl^pOA?gU2ta>6?$DdmJejM0P?z$mDEEz(2_ z%+ge?)mZ5?1=x0svL(XUa>9PfQG8pIWV@6tDSl_2Z66rg5buf_k+OKcuLdOHO$onA zDAD5g_-FifpPY<)g&%d&ZiZilzz+md<#W8vNxCWi0p@|=32&R%=v@TO!stDW68DdH1(i!sL8uQ3s01^ra;2k^G+P2Z@qD(A6Q@s=XBbO#8jI z^?Tn}qCK$*vrwMUC-l{yOVsdpwt1y&=^vK$6_$RX%p)&E_`YU3Umh?94PV^hG?=a< zq=j;JpHA7%f2(C_#5`V3>m%bwqxmKIPFmB^rN>6pnPA3vrF_iDnup6>OS+bf8A;pH z_rT8_RC~aDgPJ?ArOfrs7@vmYBt(J^vyB)M4MYc{3!ylnx5R97W!XlWu=Ew!dn;_4 z%PVhY;r&wo!h-?ram~_i zdJD8X@_KmC7%*ldT^ipf(XagT2c%akKe-RxCaB) z<$K)|CL6>RS{LT#E8Zb*VDaERxr9`4^!)VM5%7&@m%pGF0okl3e_r+=06%M-$s#D?IfwL~x z-*Z2%OX7r&nF^(rFZEYS*33V-nVGY$Tp6s$nr)`PJ+B{>ts$X_q6y8Gg(u9N?u5C+ z6=vMxa&xP@340z1*T6ODW{h=!HLk=2%`wyf%j`sS}8UQ8PbnRVT`pe|Vbt zaDhKk%J_SyTl}W#PUO!<+@`~nEsd0v5<-#eQm*vfwH@ECZ6>RF8czK0J66*uq9zME z9$AS!gE(si&U_iqW;}cG3{R6|`N8RwH|ZqHDa^k~dlSB(7Fo6r$w{Oy4~a|h7V`WP zv)8?aR3{vC-bn%E%7oriNeUDH`oTPmvN|wm4E{$$Oja#*(BYA%g9D2dl^Z(sW410h zxLC$4PWv%y4dRAi)=E1udj!3KC?#8v5D+?)H}hW39Pz{r8b_vU2IhS)AI%@Q;Ne~& zb$kS@sNH$<6n38Ua!4SA3T>OSr2-r*9Bt{7r6JUGgdQAILnk6Ag!^vRtkTtz0R9Z4 zE2We-QM!h^ChCV({u%~ct?*7pr%P$0sd}+q-WF&TZ+lfHL>UU+d6cYSI7yVevlzc$ z+UBLoZwpRR7Caoe14VBlxX>Z(t>ugtYI*Z(H;=wWT*)r%S)|zJhLWy|ucdDRr-zZs zHsjfd=LS3*Xh0OZqHgJHJxhP2Bvc!!GkDBX)SU4+O!kRvn-6;nY=%e#vv5KX2V7GW zRpcPyhH?=ZQ<2rd#lj6=VRqr$)mFNR`DsOjp}5CS1a-g5xAcOWQ9p8RbIg6yFJNw? zZi}{%YZu)mq53|r%X`x+c*3yFls35fk8UXR4W<1 zsMwC@1{KM($~UJh=hoDE+=EZ1QqJ`$=29^hN-e)NC52M7j9L8sDJq6Tso2*D#4}SF z|H>2xq?TWq(%{64Q#ML%aydiWBmy!;PuJ>7^Or$ah64RlDL}?MI>iNOZ#y!wcz0D| zXf5$NaNOZPdCfUE6-O%U2*%6wI10J0pOcQK@B!*(8EuFG_Y0B~%@vLIstEt#^ zc<=mV#y>M@d2fKx8&kHpV&X2-Kq6}K)qga1+vJWm1ZjytRx)h?PVoMyZ zy;hQ71Ql}|uP=7Ai2GD%%o$6_?#-dt4MdCjc%#VOjxuUANI9cfGSv0U=R-N;#6zDN z>8l@ug6miAa{cn%EDG3iHKkv?D}K-2P3dRvihViMkb!6pHH6fnUTCz@RW!wkW#9{UKxoF zbvLuctbwU4gkOmzdmjLh_5fp=21xb>7}bB7Mw*bvE?Lf-cbc5^leU+0a;5FHbh1&l@(EDW7%wLmP$a#4!O zhemZfdMuhXC@rZSF*$bQ@O%yJW~W~Z%daweopv>TsLX|qCjEc6uSJ7_l@rVX?aW(J-L${4K| zwBLf@u@Tfy)j0?*0(RH-|Jec1{VY<5f=(&Se+;P>))w|G>~90zeO?=Bz0rsNOFAK= zkhP6cagAPN&x2=OBcm|;ang>0XI-`={#4#fz4#vb=Ok-yE|jsVjp5vlor_^WVaA9s;|ALBO!ubll|4;$ set daz enable\n"); + fprintf(st, " sim> boot daz\n\n"); + return SCPE_OK; } #else /* USE_DISPLAY not defined */ diff --git a/PDP11/pdp11_dazzle_dart_rom.h b/PDP11/pdp11_dazzle_dart_rom.h new file mode 100644 index 00000000..c6d965e3 --- /dev/null +++ b/PDP11/pdp11_dazzle_dart_rom.h @@ -0,0 +1,394 @@ +#ifndef ROM_dazzle_lda_H +#define ROM_dazzle_lda_H 0 +/* + PDP11/pdp11_dazzle_dart_rom.h produced at Sun Jan 27 15:22:52 2019 + from PDP11/dazzledart/dazzle.lda which was last modified at Sun Jan 27 15:15:17 2019 + file size: 6096 (0x17D0) - checksum: 0xFFF83848 + This file is a generated file and should NOT be edited or changed by hand. +*/ +#define BOOT_CODE_SIZE 0x17D0 +#define BOOT_CODE_FILENAME "dazzle.lda" +#define BOOT_CODE_ARRAY dazzle_lda +unsigned char dazzle_lda[] = { +0x01,0x00,0x0A,0x00,0x44,0x00,0x92,0x06,0xC0,0x00,0x59,0x01,0x00,0x08,0x00,0x80, +0x01,0x80,0x01,0xF5,0x01,0x00,0x62,0x01,0x00,0x02,0x08,0x00,0x10,0x18,0x30,0x38, +0x28,0x20,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,0x49,0x41,0xDA,0x0F,0x21,0xA2,0xC3,0x68,0x36,0x3C, +0x62,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x41, +0x00,0x00,0x20,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x43,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,0x0C,0x00, +0x03,0x00,0x05,0x00,0x38,0x80,0x5B,0x80,0x67,0x80,0x83,0x80,0xAA,0x80,0xB9,0x80, +0xDA,0x80,0x07,0x81,0x12,0x81,0x40,0x81,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,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,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,0x4B,0x01,0x00,0x62,0x01,0x5C,0x03,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,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,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,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,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,0x3D,0x01,0x00,0x62,0x01,0xB8,0x04, +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,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,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0xC8,0x00,0x19,0x00,0x0A,0x00,0x5A,0x00,0x1E,0x00,0x64,0x00,0x1E,0x00, +0x0A,0x00,0x32,0x00,0xCE,0xFF,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,0x64,0x00,0x9C,0xFF,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,0xB4,0x00,0x00,0x00,0x5A,0x00, +0x0E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD6,0x01,0x00,0x60, +0x01,0x14,0x06,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, +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,0xF7,0x0A,0x72,0xFB,0x08,0x06,0xF7,0x15,0x3C,0x00,0x6A,0xFB,0xF7,0x0A,0x68, +0xFB,0x02,0x04,0x37,0x0A,0x62,0xFB,0x06,0x00,0x05,0x00,0xC6,0x1D,0xD0,0xFA,0xF7, +0x1D,0x1C,0x10,0x6C,0xE1,0x37,0x0A,0xEE,0xFE,0xF7,0x15,0x3C,0x00,0x48,0xFB,0xF7, +0x1D,0xF2,0xFE,0x44,0xFB,0xF7,0x15,0x01,0x00,0x96,0xEE,0xF7,0x15,0x4D,0x00,0x8E, +0xEE,0x37,0x0A,0x54,0xFF,0x37,0x0A,0x52,0xFF,0xF7,0x15,0x3C,0x00,0x28,0xFB,0xF7, +0x1D,0xD2,0xFE,0x24,0xFB,0xF7,0x1D,0xCE,0xFE,0x3C,0xFF,0xF7,0x09,0x2E,0x0D,0x57, +0xF0,0x00,0x00,0xF7,0x09,0xAA,0x07,0xF7,0x09,0xF0,0x06,0xF7,0x09,0x66,0x07,0xF7, +0x09,0xB8,0x07,0xF7,0x09,0x7E,0x08,0xF7,0x09,0xA8,0x09,0xF7,0x09,0x1A,0x07,0xF7, +0x35,0x00,0x20,0x62,0xF8,0x01,0x03,0x03,0x00,0xF7,0x0B,0xEC,0xFA,0x11,0x06,0xF7, +0x1D,0x92,0xFE,0xE4,0xFA,0xF7,0x15,0x3C,0x00,0xDC,0xFA,0xF7,0x1D,0x88,0xFE,0xF6, +0xFE,0xF7,0x65,0x04,0x00,0x70,0xFE,0xF7,0x45,0xF3,0xFF,0x6A,0xFE,0xB7,0x0A,0x5E, +0xFE,0xF7,0x09,0x5E,0x01,0x37,0x0A,0xDC,0xFE,0x37,0x0A,0xE8,0xFE,0xF7,0x0B,0x54, +0xFE,0x09,0x03,0xF7,0x09,0x92,0x0A,0x06,0x01,0xF7,0x1D,0x58,0xFE,0xAA,0xFA,0xF7, +0x15,0x3C,0x00,0xA2,0xFA,0xF7,0x09,0x30,0x00,0xF7,0x09,0xAA,0x01,0x85,0x01,0x00, +0x62,0x01,0x6E,0x07,0xF7,0x09,0x08,0x0A,0xC3,0x1D,0xBE,0xFE,0xC1,0x1D,0x90,0xFA, +0xF7,0x09,0xFC,0x00,0xC3,0x1D,0xB0,0xFE,0xC1,0x1D,0xA2,0xFE,0xF7,0x09,0xF0,0x00, +0xF7,0x0B,0x98,0xFE,0x02,0x03,0x77,0x00,0x28,0x00,0xF7,0x09,0x5E,0x00,0xBB,0x01, +0x26,0x10,0x66,0x10,0xC0,0x15,0x00,0x00,0x01,0x10,0xC1,0x00,0x77,0x10,0x76,0xE0, +0xF7,0x35,0x00,0x08,0x70,0xE0,0xFA,0x02,0xC0,0x0A,0xF6,0x04,0x81,0x15,0x80,0x15, +0x87,0x00,0xF7,0x09,0x6E,0x00,0xF7,0x09,0xD6,0xFF,0xF7,0x15,0x3C,0x00,0x3E,0xFA, +0xF7,0x1D,0xBA,0xFA,0x3A,0xFA,0xF7,0x09,0x8C,0x00,0xF7,0x09,0xC2,0xFF,0xF7,0x09, +0x1A,0x00,0xF7,0x0B,0x2A,0xFA,0xF9,0x06,0xF7,0x09,0x1E,0x00,0xF7,0x65,0x04,0x00, +0xBC,0xFD,0xF7,0x45,0xF3,0xFF,0xB6,0xFD,0x77,0x00,0xE4,0xFE,0xA6,0x10,0xC2,0x15, +0x00,0x10,0xF7,0x09,0x12,0x00,0x82,0x15,0x87,0x00,0xA6,0x10,0xC2,0x15,0x00,0x20, +0xF7,0x09,0x04,0x00,0x82,0x15,0x87,0x00,0x26,0x10,0x66,0x10,0xC0,0x15,0x00,0x00, +0x01,0x10,0xC1,0x00,0x81,0x50,0x77,0x10,0xFC,0xDF,0xC0,0x0A,0xF9,0x04,0x81,0x15, +0x80,0x15,0x87,0x00,0xC0,0x1D,0x52,0xFA,0xC0,0x65,0x14,0x00,0x37,0x20,0xEC,0xFD, +0x09,0x02,0xB7,0x0A,0xEC,0xFD,0xF7,0x35,0x04,0x00,0x62,0xFD,0x0B,0x02,0xB7,0x0A, +0xE0,0xFD,0x08,0x01,0xB7,0x0A,0xD8,0xFD,0xF7,0x35,0x04,0x00,0x50,0xFD,0x02,0x03, +0xB7,0x0A,0xCC,0xFD,0x87,0x00,0xC3,0x1D,0xCA,0xFD,0xC1,0x1D,0xC2,0xFD,0xF7,0x09, +0x0E,0x00,0xC3,0x1D,0xC0,0xFD,0xC1,0x1D,0xB8,0xFD,0xF7,0x09,0x02,0x00,0x87,0x00, +0x23,0x0A,0x23,0x0A,0x23,0x0A,0xC3,0x65,0x06,0x00,0x00,0x0A,0x57,0x20,0xE7,0x03, +0x01,0x07,0x03,0x00,0x17,0x72,0x0A,0x00,0xC1,0x0C,0x63,0x1C,0x8A,0x02,0xC0,0x0B, +0x03,0x03,0x01,0x10,0x00,0x0A,0xF6,0x01,0x87,0x00,0xC5,0x1D,0xDC,0xF9,0xF7,0x09, +0x08,0x00,0xC5,0xE5,0x04,0x00,0xFB,0x04,0x87,0x00,0xF7,0x09,0x44,0x00,0x26,0x10, +0x35,0x10,0x76,0x05,0xC0,0x35,0x03,0x00,0x06,0x03,0xC0,0x35,0x01,0x00,0x01,0x03, +0x50,0x01,0x00,0x62,0x01,0xCA,0x08,0x00,0x0A,0xF7,0x09,0xC2,0x00,0x80,0x13,0xC0, +0x35,0x30,0x00,0x06,0x03,0xC0,0x35,0x20,0x00,0x01,0x03,0x00,0x0A,0xF7,0x09,0x4E, +0x01,0x80,0x13,0xC0,0x35,0x0C,0x00,0x06,0x03,0xC0,0x35,0x08,0x00,0x01,0x03,0x00, +0x0A,0xF7,0x09,0x30,0x01,0xD6,0x0B,0x87,0x00,0x40,0x11,0x17,0x74,0x08,0x00,0x37, +0x10,0x3E,0xD7,0x37,0x0A,0x3C,0xD7,0xF7,0x0B,0x38,0xD7,0xFD,0x80,0xC0,0x1D,0x32, +0xD7,0x40,0x0A,0x87,0x00,0xC5,0x1D,0x68,0xF9,0xF7,0x09,0x0C,0x00,0xC5,0xE5,0x04, +0x00,0xFB,0x04,0x37,0x0A,0x76,0xFC,0x87,0x00,0x66,0x1D,0x76,0x05,0xCE,0x35,0x40, +0x00,0x15,0x03,0x77,0x21,0x6E,0xFC,0x12,0x02,0xF7,0x0B,0xE8,0xFC,0x0F,0x03,0xF7, +0x0A,0xE2,0xFC,0xF7,0x65,0x08,0x00,0x5C,0xFC,0xF7,0x45,0xF3,0xFF,0x56,0xFC,0xB7, +0x0A,0x4A,0xFC,0xF5,0x45,0x40,0x00,0x76,0x05,0x96,0x25,0xDC,0x01,0xF7,0x0B,0x3C, +0xFC,0x03,0x02,0xCE,0x35,0x03,0x00,0x02,0x03,0xF7,0x09,0x8E,0x01,0xCE,0x35,0x3C, +0x00,0x02,0x03,0xF7,0x09,0x6A,0x01,0x77,0x21,0x2A,0xFC,0x07,0x02,0x37,0x0A,0x22, +0xFC,0xCE,0x35,0x80,0x00,0x02,0x03,0xB7,0x0A,0x18,0xFC,0xD6,0x0B,0x87,0x00,0x35, +0xF5,0x4E,0x04,0xC0,0x0B,0x03,0x03,0x37,0xF6,0xA6,0xF8,0x02,0x01,0x37,0xF4,0xA0, +0xF8,0xF7,0x09,0x2C,0x00,0x35,0xF8,0x4E,0x04,0xF7,0x09,0x06,0x00,0xF7,0x09,0x38, +0x00,0x87,0x00,0x04,0xF8,0xF7,0x09,0x7C,0x0B,0x35,0xF8,0xDE,0x04,0x04,0xF5,0xF7, +0x09,0x78,0x0B,0x35,0xF8,0x96,0x04,0x97,0x74,0x02,0x00,0xB5,0x10,0x4E,0x05,0x87, +0x00,0x97,0xFE,0x68,0x01,0x40,0xF1,0x00,0xF0,0x05,0x05,0x80,0xF7,0x00,0xF0,0x01, +0x05,0x02,0xF6,0x87,0x00,0x02,0xF4,0x87,0x00,0x35,0xF5,0x96,0x04,0x37,0xF2,0x6C, +0xF8,0x05,0xF8,0x35,0xF5,0xDE,0x04,0x37,0xF2,0x62,0xF8,0x04,0xF8,0x35,0xF4,0x9E, +0x02,0x35,0xF8,0x2E,0x03,0x05,0xF5,0x35,0xF4,0xE6,0x02,0x35,0xF8,0x76,0x03,0x35, +0xF5,0x9E,0x02,0x04,0xF6,0x35,0xF8,0xBE,0x03,0x35,0xF5,0xE6,0x02,0x05,0xF6,0x35, +0xF8,0x06,0x04,0xEA,0x01,0x00,0x60,0x01,0x26,0x0A,0x87,0x00,0x17,0xFE,0xFF,0xFF, +0x01,0xF1,0xA0,0x00,0x05,0x01,0x57,0xFE,0xFF,0xFF,0xC1,0xF1,0x00,0xF1,0xA0,0x00, +0x37,0xF2,0x08,0xF8,0x77,0xF2,0x04,0xF8,0xC0,0x0B,0x02,0x03,0xC0,0xF1,0xC1,0xF1, +0x04,0xF8,0x45,0xF8,0x35,0xF4,0x9E,0x02,0x75,0xF4,0xE6,0x02,0xC0,0xF5,0xF7,0x09, +0xBA,0x0A,0x09,0x02,0xC1,0xF5,0xF7,0x09,0xB2,0x0A,0x05,0x02,0xF7,0x09,0x08,0x00, +0x02,0x02,0xF7,0x09,0x40,0x00,0x87,0x00,0x26,0xF8,0x66,0xF8,0xA6,0xF8,0x42,0xF8, +0x00,0xF2,0xB7,0xF4,0xBA,0xF7,0x82,0xF2,0x80,0xF4,0xB7,0xF7,0xC6,0xF7,0x00,0xF0, +0x0D,0x06,0x77,0xF6,0xAA,0xF7,0x41,0xF2,0x40,0xF4,0x77,0xF7,0xB6,0xF7,0x00,0xF0, +0x05,0x06,0x96,0xF5,0x56,0xF5,0x16,0xF5,0xB4,0x00,0x87,0x00,0x96,0xF5,0x56,0xF5, +0x16,0xF5,0xA4,0x00,0x87,0x00,0x35,0xF8,0x9E,0x02,0x75,0xF8,0xE6,0x02,0x84,0xF5, +0xB5,0xF4,0x2E,0x03,0xB5,0xF8,0x2E,0x03,0x85,0xF5,0xB5,0xF4,0x76,0x03,0xB5,0xF8, +0x76,0x03,0x84,0xF5,0xB5,0xF4,0xBE,0x03,0xB5,0xF8,0xBE,0x03,0x85,0xF5,0xB5,0xF4, +0x06,0x04,0xB5,0xF8,0x06,0x04,0x87,0x00,0x35,0xF5,0x9E,0x02,0x75,0xF5,0xE6,0x02, +0xF7,0x09,0x06,0x0A,0x03,0xFB,0x44,0xFB,0x40,0x1D,0x26,0x05,0xF7,0x09,0xE4,0x09, +0x87,0x00,0x40,0x1D,0x26,0x05,0x37,0x10,0x1C,0xF7,0x20,0x28,0xE0,0x15,0x40,0xC6, +0x26,0x10,0x77,0x1D,0x4E,0x05,0x16,0xF7,0x57,0xFE,0x06,0x00,0x35,0xF5,0xDE,0x04, +0x01,0xF2,0x75,0xF2,0x96,0x04,0xF7,0x09,0xD0,0x09,0x03,0xFB,0x44,0xFB,0x40,0x11, +0x80,0x0C,0xF8,0x09,0x3C,0x0B,0xF7,0x09,0xD6,0x01,0xDE,0x15,0x00,0xC6,0x87,0x00, +0x54,0x0B,0x78,0x0C,0xDA,0x0B,0xE2,0x0B,0x54,0x0B,0x54,0x0B,0x54,0x0B,0x54,0x0B, +0x54,0x0B,0x54,0x0B,0x54,0x0B,0x7C,0x0C,0x66,0x11,0xE6,0x1D,0xD0,0xF6,0xE6,0x10, +0xE6,0x10,0x36,0xE1,0x02,0x00,0x0E,0x61,0xC0,0x1D,0xBA,0xF6,0x37,0x10,0xBC,0xF6, +0x10,0x24,0x37,0x10,0xB0,0xF6,0xF7,0x09,0x6A,0x09,0xF7,0x65,0x18,0x00,0xAE,0xF6, +0x83,0x15,0x84,0x15,0xF8,0x01,0x00,0x62,0x01,0x80,0x0B,0xF7,0x09,0x3E,0x00,0xC1, +0x1D,0xA2,0xF6,0xC1,0x65,0x10,0x00,0xC1,0x45,0xC7,0xFF,0xC1,0x00,0xC2,0x1D,0x8C, +0xF6,0x80,0x10,0xC2,0xE0,0x82,0x0C,0xC4,0x14,0xC4,0x45,0x00,0x38,0x44,0x50,0x10, +0x11,0xC2,0x0A,0xF9,0x06,0xB7,0x15,0x7C,0xF6,0x85,0x15,0xC1,0x1D,0x74,0xF6,0x50, +0x14,0x50,0x14,0xC8,0x15,0x40,0xC0,0x37,0x10,0x62,0xF6,0x87,0x00,0xF7,0x45,0xC7, +0xFF,0x62,0xF6,0xF7,0x09,0x48,0x0A,0xC3,0x6D,0x52,0xF6,0xF7,0x10,0x4E,0xF6,0xF7, +0x09,0xA0,0x0A,0x87,0x00,0x02,0x0A,0xF7,0x09,0x10,0x00,0x87,0x00,0xC2,0x15,0x02, +0x00,0x83,0x0C,0x84,0x0C,0xF7,0x09,0x02,0x00,0x87,0x00,0xE6,0x10,0x26,0x11,0xC0, +0x1D,0x2A,0xF6,0xC0,0x65,0x04,0x00,0x37,0x10,0x24,0xF6,0xF7,0x09,0xDC,0x08,0xC0, +0x1D,0x1C,0xF6,0xC0,0x65,0x06,0x00,0x37,0x10,0x16,0xF6,0x84,0x13,0x83,0x1D,0x02, +0x00,0xC3,0x0C,0xC4,0x0C,0x03,0x0B,0x04,0x0B,0xF7,0x09,0xBE,0x08,0xC0,0x1D,0x00, +0xF6,0xC0,0x65,0x0A,0x00,0x37,0x10,0xF4,0xF5,0x01,0x10,0xC1,0xE5,0xD0,0x16,0x81, +0x0C,0xC1,0x55,0x00,0x80,0x7F,0x10,0xE6,0xF5,0x7F,0x10,0xE4,0xF5,0xE0,0x15,0x40, +0xC0,0xE0,0x0B,0x37,0x10,0xD8,0xF5,0x84,0x13,0x83,0x1D,0x02,0x00,0xF7,0x09,0x8A, +0x08,0x84,0x15,0x83,0x15,0xFA,0x09,0x50,0x0B,0xF7,0x65,0x02,0x00,0xBE,0xF5,0xC0, +0x1D,0xBA,0xF5,0xC0,0xE5,0xD0,0x16,0x80,0x0C,0xC0,0x55,0x00,0x80,0x3F,0x10,0xAE, +0xF5,0x87,0x00,0x83,0x0C,0x84,0x0C,0xE6,0x1D,0xAA,0xF5,0xE6,0x1D,0x98,0xF5,0xF7, +0x15,0x98,0x25,0x92,0xF5,0xE6,0x1D,0x8C,0xF5,0x66,0x11,0xE6,0x10,0x26,0x11,0xC0, +0x1D,0x8A,0xF5,0x10,0x24,0x37,0x10,0x84,0xF5,0xF7,0x09,0x3E,0x08,0xF7,0x1D,0x7C, +0xF5,0x72,0xF5,0x83,0x13,0x84,0x1D,0x02,0x00,0xC3,0x0C,0xC4,0x0C,0x04,0x0B,0xF7, +0x09,0x20,0x09,0xF7,0x09,0x3A,0x09,0x84,0x13,0xC4,0x0C,0x04,0x0B,0x83,0x1D,0x02, +0x00,0xC3,0x0C,0x03,0x0B,0xF7,0x09,0x0A,0x09,0xF7,0x09,0x24,0x09,0x83,0x13,0x84, +0x1D,0x02,0x00,0xC3,0x0C,0xC4,0x0C,0xF2,0x01,0x00,0x62,0x01,0xDC,0x0C,0x03,0x0B, +0xF7,0x09,0xF6,0x08,0xF7,0x09,0x10,0x09,0x84,0x15,0x83,0x15,0xC0,0x1D,0x2C,0xF5, +0x10,0x24,0x37,0x10,0x2E,0xF5,0xC8,0x15,0x40,0xC0,0xF7,0x09,0xE4,0x07,0x85,0x15, +0xB7,0x15,0x18,0xF5,0xB7,0x15,0x16,0xF5,0xB7,0x15,0x20,0xF5,0x87,0x00,0x66,0x11, +0x35,0xF5,0x2E,0x03,0x75,0xF5,0x9E,0x02,0xF7,0x09,0xDC,0x07,0x01,0xF6,0x03,0xFB, +0x35,0xF5,0x76,0x03,0x75,0xF5,0xE6,0x02,0xF7,0x09,0xCC,0x07,0x01,0xF6,0x04,0xFB, +0xC0,0x1D,0xF0,0xF4,0x10,0x24,0xC8,0x15,0x40,0xC0,0x37,0x10,0xE6,0xF4,0xF7,0x09, +0xA0,0x07,0x35,0xF5,0xBE,0x03,0x75,0xF5,0x2E,0x03,0xF7,0x09,0xAA,0x07,0x01,0xF6, +0x02,0xF8,0x03,0xFB,0x35,0xF5,0x06,0x04,0x75,0xF5,0x76,0x03,0xF7,0x09,0x98,0x07, +0x01,0xF6,0x04,0xFB,0xE6,0x10,0x26,0x11,0xF7,0x65,0x20,0x00,0xBE,0xF4,0xF7,0x45, +0xC7,0xFF,0xB8,0xF4,0xF7,0x09,0x9E,0x08,0xC3,0x6D,0xA8,0xF4,0xF7,0x10,0xA4,0xF4, +0xCB,0x15,0x40,0xC0,0xF7,0x09,0xF2,0x08,0x85,0x1D,0x04,0x00,0x77,0x21,0x1A,0xF8, +0x2A,0x02,0x37,0xF9,0xAC,0xF4,0xB7,0xF9,0xA8,0xF4,0x03,0xFB,0x84,0xFB,0x03,0x0B, +0xC0,0x1D,0x80,0xF4,0x10,0x24,0xC8,0x15,0x40,0xC0,0x37,0x10,0x76,0xF4,0xF7,0x09, +0x30,0x07,0x84,0x15,0x83,0x15,0x04,0x0B,0x03,0x0B,0xF7,0x09,0x1C,0x08,0xE6,0x1D, +0x5A,0xF4,0xE6,0x1D,0x58,0xF4,0xF7,0x15,0x98,0x25,0x52,0xF4,0xF7,0x1D,0x54,0xF4, +0x4A,0xF4,0xF7,0x09,0x22,0x08,0xFF,0x15,0x40,0xC0,0x40,0xF4,0xB7,0x15,0x3E,0xF4, +0xB7,0x15,0x38,0xF4,0x02,0x01,0x84,0x15,0x83,0x15,0x85,0x15,0x87,0x00,0x37,0xF5, +0x70,0xF4,0x01,0xFB,0x00,0x0A,0x17,0x72,0x04,0x00,0xC1,0x0B,0x01,0x03,0x80,0x0A, +0xC0,0x0C,0xC0,0x65,0x46,0x00,0xC5,0x1D,0x7C,0xF4,0xC1,0x1D,0x14,0xF4,0x01,0xE0, +0x75,0x10,0x26,0x05,0xE1,0x15,0x00,0xD0,0xE1,0x15,0x00,0xC8,0xE1,0x15,0x00,0xC6, +0xC5,0xE5,0x04,0x00,0xF4,0x04,0x77,0x10,0xF4,0xF3,0x87,0x00,0xC0,0x1D,0xEC,0xF3, +0xC5,0x1D,0x52,0xF4,0x41,0x11,0x81,0x0C,0x40,0x60,0xD6,0x01,0x00,0x62,0x01,0x38, +0x0E,0x10,0x24,0x37,0x10,0xDC,0xF3,0x37,0x10,0xD6,0xF3,0xC8,0x15,0x00,0xC1,0xE0, +0x15,0x00,0xC6,0x44,0x1D,0x26,0x05,0xC4,0xE5,0x06,0x00,0xC4,0xE5,0xD0,0x16,0x84, +0x0C,0xC4,0x55,0x00,0x80,0x20,0x11,0xC5,0xE5,0x04,0x00,0xF3,0x04,0x87,0x00,0xC5, +0x1D,0x1A,0xF4,0x40,0x11,0x80,0x0C,0x30,0xFE,0x02,0x06,0x70,0xFE,0xBA,0x05,0xB0, +0xFE,0xDE,0x05,0x35,0xF8,0x4E,0x04,0x75,0xF8,0x9E,0x02,0xB5,0xF8,0xE6,0x02,0x26, +0x10,0xF7,0x09,0x20,0xFB,0xF7,0x09,0x6E,0xFC,0xF7,0x09,0x50,0xFC,0x80,0x15,0xC5, +0xE5,0x04,0x00,0xC0,0xE5,0x02,0x00,0xE7,0x04,0x87,0x00,0xC0,0x15,0x9E,0x02,0x10, +0x0A,0x17,0x20,0xA8,0x05,0xFC,0x87,0x17,0xFE,0x14,0x00,0x37,0xF8,0x8A,0xF3,0x37, +0x0A,0xE6,0xF6,0x87,0x00,0xC5,0x1D,0xC4,0xF3,0x37,0xFE,0xE6,0xF6,0x37,0xF8,0x74, +0xF3,0x01,0xF8,0x02,0xF8,0x03,0xF8,0xC2,0xF1,0xB7,0xF8,0x64,0xF3,0x26,0xF8,0x17, +0xFE,0x5A,0x00,0x04,0xF8,0x16,0xF5,0xF7,0x09,0x74,0x00,0xC1,0xF1,0xC2,0xF1,0x04, +0xF1,0xF7,0x09,0x6A,0x00,0xC0,0xF1,0xC3,0xF1,0x26,0xF8,0x17,0xFE,0x5A,0x00,0x04, +0xF8,0x16,0xF5,0xF7,0x09,0x58,0x00,0xC1,0xF1,0xC2,0xF1,0x04,0xF1,0xF7,0x09,0x4E, +0x00,0x37,0xFE,0xA0,0xF6,0x02,0xF8,0xC0,0xF1,0xC3,0xF1,0x26,0xF8,0x17,0xFE,0x5A, +0x00,0x04,0xF8,0x16,0xF5,0xF7,0x09,0x36,0x00,0xC5,0x65,0x04,0x00,0xC1,0xF1,0xC3, +0xF1,0xF7,0x09,0x2A,0x00,0x37,0xFE,0x84,0xF6,0x37,0xF8,0x24,0xF3,0x37,0xFE,0x7A, +0xF6,0x37,0xF8,0x18,0xF3,0x37,0xFE,0x70,0xF6,0x37,0xF8,0x08,0xF3,0x00,0xF2,0x37, +0xF8,0x06,0xF3,0x77,0xF5,0xEE,0xF2,0x40,0xF6,0x77,0xF8,0x08,0xF3,0x87,0x00,0x26, +0xF8,0x66,0xF8,0xA6,0xF8,0xE6,0xF8,0xC5,0x65,0x04,0x00,0x35,0xF8,0xBE,0x03,0x75, +0xF8,0x06,0x04,0xB5,0xF8,0x2E,0x03,0xF5,0xF8,0x76,0x03,0x04,0xF5,0x35,0xF8,0x4E, +0x04,0xF7,0x09,0x3A,0xFA,0xD6,0xF5,0x96,0xF5,0x56,0xF5,0x16,0xF5,0x87,0x00,0x37, +0xF5,0xAE,0xF2,0x77,0xF5,0xAE,0xF2,0x03,0xFB,0xE6,0x10,0x66,0xFB,0x40,0x01,0x00, +0x62,0x01,0x94,0x0F,0xC4,0x10,0xF7,0x09,0x36,0x05,0x84,0x15,0x84,0xE3,0x0E,0x11, +0x03,0x0A,0x37,0x0A,0x84,0xF2,0xF7,0x09,0x4C,0x06,0x83,0x13,0x04,0x0A,0xF7,0x15, +0x10,0x00,0x76,0xF2,0xF7,0x09,0x3E,0x06,0x84,0x13,0x03,0x0A,0xF7,0x15,0x20,0x00, +0x68,0xF2,0xF7,0x09,0x30,0x06,0x83,0x15,0x04,0x0A,0xF7,0x15,0x30,0x00,0x5A,0xF2, +0xF7,0x09,0x22,0x06,0xF7,0x09,0x06,0x00,0xF7,0x09,0x52,0x00,0x87,0x00,0xF7,0x09, +0x3A,0x00,0xC4,0x1D,0xC4,0xF5,0xC3,0x1D,0xC2,0xF5,0x03,0x0B,0xF7,0x09,0xE0,0x04, +0xF7,0x09,0x18,0x00,0xC4,0x1D,0xB2,0xF5,0xC4,0x0C,0xC4,0x6D,0xB0,0xF5,0x04,0x0B, +0x03,0x0A,0xF7,0x09,0xCA,0x04,0xF7,0x09,0x02,0x00,0x87,0x00,0xC4,0x1D,0x9E,0xF5, +0xC3,0x1D,0x98,0xF5,0xC3,0x0C,0xF7,0x09,0x00,0x01,0x87,0x00,0xC0,0x1D,0xFA,0xF1, +0xD0,0x15,0x00,0xC6,0xC8,0x15,0x00,0xC1,0x37,0x10,0xEE,0xF1,0x87,0x00,0x00,0x0A, +0xF7,0x09,0x0A,0x00,0xC0,0x15,0xFF,0xFF,0xF7,0x09,0x02,0x00,0x87,0x00,0x26,0x10, +0xF7,0x09,0xD8,0xFF,0x37,0xF1,0xC6,0xF1,0x37,0xF1,0xC6,0xF1,0xF7,0x55,0x01,0x00, +0xBA,0xF1,0x77,0xF5,0xE6,0xF1,0xCE,0x0B,0x01,0x03,0xC1,0xF1,0x00,0xF1,0x37,0xF6, +0xEA,0xF1,0xF7,0x09,0x36,0x04,0xF7,0x45,0x01,0x00,0xA0,0xF1,0x80,0x15,0x17,0xFE, +0xB4,0x00,0x04,0xF8,0xF7,0x09,0x02,0x00,0x87,0x00,0x26,0x10,0x04,0xF5,0x57,0xFE, +0x03,0x00,0x01,0xF6,0x04,0xF8,0xF7,0x09,0xAE,0x04,0x37,0xF2,0xBE,0xF1,0x26,0xF8, +0x04,0xF5,0xF7,0x09,0xA8,0x04,0x37,0xF2,0xB2,0xF1,0x56,0xF5,0x77,0xF6,0x9C,0xF1, +0xCE,0x0B,0x01,0x02,0xC1,0xF1,0xF7,0x09,0xF2,0x03,0x44,0xF1,0x00,0xF0,0xE6,0x06, +0x80,0x15,0x87,0x00,0xF7,0x09,0x64,0xFF,0xC3,0x15,0x6A,0xFF,0xC4,0x1D,0xEA,0xF4, +0xC4,0x65,0x14,0x00,0x10,0x24,0x37,0x10,0x50,0xF1,0xF7,0x09,0x12,0x04,0xC0,0x1D, +0x48,0xF1,0x10,0x0A,0x10,0x0A,0x10,0x0A,0x37,0x10,0x52,0xF5,0xF7,0x09,0x1E,0x00, +0x37,0x10,0x4E,0xF5,0xF7,0x09,0x16,0x00,0x37,0x10,0x48,0xF5,0xF7,0x09,0x0E,0x00, +0x83,0x01,0x00,0x60,0x01,0xF0,0x10,0x37,0x10,0x3C,0xF5,0x37,0x10,0x22,0xF1,0xC8, +0x15,0x00,0xC1,0x87,0x00,0x10,0x24,0x37,0x10,0x2C,0xF5,0x04,0x0A,0xC3,0x15,0x32, +0x00,0xF7,0x09,0xD2,0x03,0xC0,0x1D,0x1E,0xF5,0x10,0x0A,0x10,0x0A,0x10,0x0A,0x87, +0x00,0xE6,0x10,0x26,0x11,0x03,0x0A,0x37,0x0A,0x06,0xF1,0xF7,0x09,0xCE,0x04,0x04, +0x0A,0x83,0x1D,0x02,0x00,0xF7,0x15,0x10,0x00,0xF6,0xF0,0xF7,0x09,0xBE,0x04,0x03, +0x0A,0x84,0x13,0xF7,0x15,0x20,0x00,0xE8,0xF0,0xF7,0x09,0xB0,0x04,0x04,0x0A,0x83, +0x1D,0x02,0x00,0xF7,0x15,0x30,0x00,0xD8,0xF0,0xF7,0x09,0xA0,0x04,0x84,0x15,0x83, +0x15,0x87,0x00,0xC0,0x15,0x3A,0x06,0x10,0xF8,0x50,0xF8,0x37,0x10,0xD0,0xF4,0xB7, +0x0A,0xCA,0xF4,0xC0,0x1D,0xC8,0xF4,0x90,0xF8,0xD0,0xF8,0x37,0x10,0xC0,0xF4,0x87, +0x00,0xF7,0x09,0x5E,0x00,0xF7,0x0B,0xB4,0xF4,0x14,0x07,0xC0,0x15,0x3A,0x06,0x10, +0xF5,0x50,0xF5,0x90,0xF5,0xD0,0xF5,0x26,0x10,0xF7,0x09,0x18,0x00,0x80,0x15,0xF7, +0x0A,0x9A,0xF4,0x07,0x07,0x90,0xF5,0xD0,0xF5,0x26,0x10,0xF7,0x09,0x26,0x00,0x80, +0x15,0xF6,0x01,0x87,0x00,0xF7,0x55,0x01,0x00,0x58,0xF0,0x37,0xF1,0x56,0xF0,0x37, +0xF1,0x56,0xF0,0xA6,0xF8,0xE6,0xF8,0xF7,0x09,0xD8,0x02,0xD6,0xF5,0x96,0xF5,0xF7, +0x45,0x01,0x00,0x3E,0xF0,0x66,0x11,0x80,0xF8,0xC1,0xF8,0xF7,0x09,0xC4,0x02,0x85, +0x15,0x87,0x00,0xF7,0x1D,0x38,0xF0,0x38,0xF0,0xFF,0x15,0x00,0xC1,0x32,0xF0,0x87, +0x00,0x37,0x0A,0xB0,0xF3,0xF7,0x1D,0xB6,0xF3,0xAE,0xF3,0x17,0xF5,0x00,0x7E,0x37, +0xF8,0x68,0xF0,0xC5,0x1D,0xA8,0xF3,0x35,0xF5,0x9E,0x02,0x37,0xF8,0x60,0xF0,0x75, +0xF5,0xE6,0x02,0x77,0xF8,0x5C,0xF0,0xB5,0xF5,0x96,0x04,0xB7,0xF8,0x58,0xF0,0xF5, +0xF5,0xDE,0x04,0xC3,0xF1,0xF7,0xF8,0x52,0xF0,0x81,0xF2,0xC0,0xF2,0x83,0xF6,0xB7, +0xF8,0x4C,0xF0,0x05,0x0A,0x77,0x21,0x70,0xF3,0x49,0x03,0x37,0xF5,0x3C,0xF0,0x35, +0xF2,0x2E,0x03,0x77,0xF5,0x30,0xF0,0x75,0xF2,0x76,0x03,0x01,0xF6,0x37,0xF4,0x2E, +0xF0,0x90,0x01,0x00,0x60,0x01,0x4A,0x12,0x77,0xF5,0x26,0xF0,0x75,0xF2,0xBE,0x03, +0xB7,0xF5,0x1A,0xF0,0xB5,0xF2,0x06,0x04,0x42,0xF6,0x77,0xF4,0x18,0xF0,0x80,0xF5, +0x01,0xF2,0x00,0xF0,0x2F,0x04,0x01,0xF5,0x42,0xF6,0x01,0xF9,0xB5,0xF5,0x2E,0x03, +0xB5,0xF6,0xBE,0x03,0x80,0xF2,0xB5,0xF4,0xBE,0x03,0xF5,0xF5,0x76,0x03,0xF5,0xF6, +0x06,0x04,0xC0,0xF2,0xF5,0xF4,0x06,0x04,0x02,0xF5,0x37,0xF6,0xD8,0xEF,0x37,0xF2, +0xDC,0xEF,0x43,0xF5,0x77,0xF6,0xD2,0xEF,0x77,0xF2,0xD6,0xEF,0x01,0xF4,0x00,0xF0, +0x11,0x07,0x77,0x21,0xDC,0xEF,0x02,0x07,0x77,0x00,0x1C,0x01,0x37,0xF7,0xB2,0xEF, +0x00,0xF0,0x08,0x07,0x77,0x11,0xEA,0xF2,0x37,0xF8,0xA6,0xEF,0xB7,0xF8,0xBA,0xEF, +0xF7,0xF8,0xBA,0xEF,0x77,0x21,0xBA,0xEF,0x0B,0x03,0xC0,0x1D,0xB4,0xEF,0xC0,0x65, +0x10,0x00,0x40,0x21,0x01,0x05,0x87,0x00,0xC5,0x65,0x04,0x00,0x77,0x00,0x4C,0xFF, +0x17,0xF5,0x00,0x7E,0x37,0xF7,0x7A,0xEF,0x00,0xF0,0xF6,0x03,0x37,0xF5,0x76,0xEF, +0x77,0xF5,0x76,0xEF,0xB7,0xF5,0x82,0xEF,0xF7,0xF5,0x82,0xEF,0xF7,0x0B,0x9C,0xF2, +0x03,0x03,0xF7,0x09,0x60,0xFE,0x02,0x01,0xF7,0x09,0x4E,0xFE,0xB7,0x0A,0x8C,0xF2, +0xF7,0x2D,0x88,0xF2,0x6E,0xEF,0x20,0x02,0x37,0x0A,0x08,0xF3,0xF7,0x2D,0x82,0xF2, +0x60,0xEF,0x19,0x06,0xC1,0x1D,0x7A,0xF2,0xC2,0x1D,0x7A,0xF2,0xC3,0x15,0xFB,0xFF, +0xC1,0x40,0xC2,0x40,0x42,0x20,0x09,0x03,0xF7,0x1D,0x78,0xF2,0xCA,0xEE,0xF7,0x15, +0x3C,0x00,0xC2,0xEE,0xF7,0x1D,0x6E,0xF2,0xDC,0xF2,0xF7,0x1D,0x54,0xF2,0x56,0xF2, +0xF7,0x15,0x01,0x00,0x48,0xF2,0x87,0x00,0xC5,0x1D,0x46,0xF2,0x37,0xF5,0x1A,0xEF, +0x37,0xF8,0x02,0xEF,0x37,0xF5,0x16,0xEF,0x37,0xF8,0xFE,0xEE,0xF7,0x1D,0x32,0xF2, +0x2E,0xF2,0x17,0xF5,0x00,0x7E,0x37,0xF8,0xE8,0xEE,0x35,0xF5,0x4E,0x04,0x17,0xF2, +0x00,0x41,0x04,0xF8,0xF7,0x09,0xAE,0x01,0x03,0xF8,0x04,0xF5,0xC4,0xF8,0xF7,0x09, +0xAA,0x01,0xB7,0xF5,0xD8,0xEE,0x77,0xF5,0xD8,0xEE,0x44,0xF2,0x80,0xF2,0x42,0xF6, +0xC4,0xF5,0x51,0x01,0x00,0x62,0x01,0xA4,0x13,0xF7,0xF2,0xC8,0xEE,0x37,0xF2,0xC8, +0xEE,0x03,0xF4,0x77,0xF8,0xBE,0xEE,0x37,0xF8,0xBE,0xEE,0x77,0xF2,0xB2,0xEE,0x37, +0xF2,0xAA,0xEE,0x40,0xF6,0x77,0xF8,0xB4,0xEE,0x05,0x0A,0x77,0x00,0x64,0xFE,0x77, +0x11,0xD6,0xF1,0xF7,0xF8,0xAE,0xEE,0xB7,0xF8,0xA6,0xEE,0x37,0xF5,0x8E,0xEE,0x77, +0xF5,0x8E,0xEE,0xF7,0x0B,0xBC,0xF1,0x03,0x03,0xF7,0x09,0x80,0xFD,0x02,0x01,0xF7, +0x09,0x6E,0xFD,0xC5,0x65,0x10,0x00,0x35,0xF5,0x2E,0x03,0x37,0xF6,0x82,0xEE,0x77, +0xF5,0x7E,0xEE,0x75,0xF6,0xBE,0x03,0x01,0xF2,0x00,0xF0,0x03,0x06,0x37,0x0A,0x1A, +0xF2,0x87,0x00,0x77,0x11,0x14,0xF2,0xF7,0x0B,0x88,0xF1,0x02,0x02,0x37,0x0A,0x0A, +0xF2,0x87,0x00,0xC0,0x15,0x00,0x00,0xC0,0x0C,0xF0,0x15,0x00,0xC1,0xD0,0x16,0xC3, +0x15,0x14,0x00,0xC0,0x70,0xC3,0x65,0x20,0x00,0x83,0x0C,0xF0,0x10,0xE0,0x16,0xC0, +0xE5,0x02,0x00,0xF2,0x04,0xC5,0x15,0x0E,0x02,0xC3,0x15,0x18,0x02,0x15,0x0A,0x43, +0x21,0xFD,0x07,0xC3,0x15,0x96,0x19,0xD3,0x15,0x80,0xC6,0xCB,0x15,0x00,0xC1,0xF7, +0x10,0xBA,0xED,0xF7,0x10,0xB8,0xED,0xC1,0x15,0x98,0x25,0x21,0x0A,0x77,0x10,0xB4, +0xED,0x21,0x0A,0x77,0x10,0xAA,0xED,0x77,0x10,0xA8,0xED,0xC3,0x15,0x96,0x19,0xC3, +0xE5,0xD0,0x16,0x83,0x0C,0xC3,0x55,0x00,0x80,0x00,0x0A,0xF0,0x10,0xD0,0x16,0xC0, +0x65,0x02,0x00,0x17,0x20,0x00,0x00,0xF9,0x07,0xF7,0x15,0xD0,0x16,0x88,0xD3,0x87, +0x00,0xF7,0x09,0x56,0x00,0x02,0xF8,0x43,0xF8,0x37,0xF6,0x66,0xED,0x77,0xF6,0x66, +0xED,0xB7,0xF8,0x5E,0xED,0xF7,0xF8,0x5E,0xED,0x03,0xFB,0x44,0xFB,0x02,0x02,0xC3, +0x0B,0x08,0x03,0xF7,0x35,0x01,0x00,0x48,0xED,0x05,0x02,0xF7,0x09,0x0E,0x01,0xF7, +0x09,0x28,0x01,0x87,0x00,0xC0,0x15,0x1A,0x02,0xF7,0x09,0x52,0x00,0x37,0x10,0x3E, +0xED,0xC8,0x15,0x00,0xC1,0xC3,0x45,0x00,0xFC,0xC4,0x45,0x00,0xFC,0xC4,0x55,0x00, +0xC8,0x20,0x11,0xC3,0x55,0x00,0xD0,0xE0,0x10,0x87,0x00,0x17,0xF4,0x00,0x40,0x26, +0xFB,0x16,0xFE,0x00,0xF0,0x60,0x01,0x00,0x62,0x01,0x00,0x15,0x02,0x04,0x17,0xF6, +0x80,0x40,0x57,0xF4,0x00,0x40,0x66,0xFB,0x56,0xFE,0x00,0xF0,0x02,0x04,0x57,0xF6, +0x80,0x40,0x87,0x00,0x83,0xF1,0xF7,0xF7,0x1E,0xED,0x00,0xF0,0x02,0x05,0xB4,0x00, +0x87,0x00,0xA4,0x00,0x87,0x00,0x00,0x12,0x10,0x24,0x37,0x20,0xEA,0xEC,0x01,0x87, +0x03,0x00,0x87,0x00,0xC0,0x15,0xFF,0xFF,0x02,0x01,0xC0,0x15,0x01,0x00,0xC1,0x15, +0x01,0x00,0x40,0xF1,0x00,0xF0,0x02,0x04,0xC0,0xF1,0x40,0x70,0x17,0xF9,0x34,0x43, +0x17,0xF3,0x80,0x40,0x57,0xF3,0x00,0x3F,0x57,0xF2,0x00,0x42,0x42,0xFB,0xC2,0x0C, +0x87,0x60,0x18,0x01,0x13,0x01,0x0E,0x01,0x0A,0x01,0x07,0x01,0x0E,0x01,0x02,0x01, +0x40,0x70,0x0D,0x01,0x40,0x70,0x00,0x0B,0x0D,0x01,0x01,0x0B,0x0B,0x01,0x01,0x0B, +0x40,0x70,0x05,0x01,0x00,0x0B,0x40,0x70,0x05,0x01,0x01,0x0B,0x00,0x0B,0x17,0xF6, +0x80,0x40,0xC0,0xF1,0x37,0xF2,0x90,0xEC,0x17,0xF2,0x80,0x3F,0xC0,0xF5,0xC3,0xF2, +0xC3,0xF1,0x57,0xFF,0x80,0x40,0x45,0xF8,0xC0,0x0B,0x02,0x05,0x01,0xF5,0x01,0xF1, +0x80,0xF5,0x43,0xF1,0x00,0xF0,0x0A,0x03,0x45,0xF4,0x81,0xF9,0x45,0xF4,0x81,0xF9, +0x83,0xF2,0x02,0xF4,0x57,0xF7,0x40,0x42,0x00,0xF0,0xF6,0x04,0xC1,0x0B,0x01,0x04, +0xC0,0xF1,0x87,0x00,0x00,0x0A,0xC3,0x0B,0x02,0x04,0x03,0x0B,0xD0,0x0B,0xC4,0x0B, +0x02,0x04,0x04,0x0B,0x80,0x0A,0xC4,0x20,0x40,0x0C,0x37,0x9C,0x00,0x02,0x36,0xEC, +0x87,0x00,0xF7,0x09,0x1A,0x00,0xC3,0x6D,0x1C,0xEC,0xF7,0x20,0x1A,0xEC,0x01,0x87, +0x03,0x00,0xF7,0x10,0x10,0xEC,0xCB,0x15,0x00,0xC1,0xF7,0x09,0x66,0x00,0x87,0x00, +0xC3,0x0B,0x01,0x04,0x03,0x0B,0xC4,0x0B,0x01,0x04,0x04,0x0B,0x01,0x0A,0xC4,0x20, +0x0A,0x06,0x05,0x03,0xC4,0x0C,0xC0,0x10,0x04,0x72,0x05,0x11,0x08,0x01,0xC0,0x15, +0xFF,0xFF,0x05,0x11,0x06,0x01,0xC3,0x0C,0x00,0x11,0x03,0x72,0xC5,0x10,0xC0,0x0C, +0x85,0x0C,0xC1,0x15,0x00,0x80,0x02,0x0A,0x44,0x11,0x03,0x11,0xD7,0x74,0xFD,0xFF, +0xC3,0x0C,0xC4,0x45,0xF8,0xFF,0x08,0x03,0x7E,0x01,0x00,0x8A,0x00,0x5C,0x16,0xD3, +0x0B,0x26,0x11,0xB1,0x00,0x02,0x8C,0xC4,0x0A,0xFD,0x02,0x84,0x15,0x01,0x01,0x82, +0x0A,0xC4,0x65,0x40,0x00,0xC4,0x6D,0xB4,0xEB,0x87,0x00,0xC4,0x00,0x01,0x60,0x01, +0x86,0x84,0x60,0xC5,0x0A,0x0B,0x07,0xA1,0x00,0x42,0x8C,0xF8,0x86,0xF7,0x09,0x2C, +0x00,0x23,0x11,0xC4,0x45,0xFF,0x07,0xC2,0x15,0x01,0x00,0xF0,0x01,0xC1,0x18,0x00, +0x0A,0xB1,0x00,0x40,0x0C,0xA1,0x00,0x42,0x8C,0x05,0x87,0x01,0x30,0x01,0x03,0x84, +0x60,0xA1,0x00,0xF7,0x01,0xF7,0x09,0x04,0x00,0x0B,0x11,0x87,0x00,0x26,0x11,0xC4, +0x00,0xC4,0x45,0xF8,0xFF,0x04,0x03,0x84,0x0A,0xA1,0x00,0x0E,0x8C,0xF9,0x01,0x84, +0x15,0x87,0x00,0x00,0xC1,0x00,0xC1,0x00,0xC1,0x00,0xC1,0x00,0xC1,0x00,0xC1,0x00, +0xC1,0x00,0xC1,0x44,0x01,0x00,0x62,0x01,0x40,0x17,0xFD,0xCB,0x0F,0xD0,0x00,0x5B, +0x00,0x71,0x00,0x5A,0x00,0x71,0x00,0x59,0x00,0x72,0x00,0x59,0x00,0x72,0x01,0x69, +0x04,0x74,0x00,0x41,0x00,0x72,0x00,0x41,0x00,0x71,0x00,0x42,0x00,0x71,0x00,0x40, +0x00,0x45,0x00,0x49,0x00,0x41,0x06,0x4B,0x00,0x41,0x00,0x4F,0x00,0x59,0x00,0x49, +0x03,0x52,0x00,0x59,0x00,0x49,0x00,0x58,0x00,0x5A,0x0B,0xD0,0x03,0xC8,0x40,0xC0, +0x01,0xD0,0x08,0xC8,0x07,0x4B,0x00,0x58,0x00,0x58,0x00,0x5E,0x00,0x74,0x00,0x48, +0x00,0x49,0x0B,0xD0,0x0B,0xC8,0x40,0xC0,0x00,0xD0,0x04,0xC8,0x00,0x43,0x00,0x49, +0x00,0x41,0x00,0x49,0x00,0x41,0x00,0x49,0x00,0x41,0x00,0x4B,0x00,0x41,0x00,0x49, +0x00,0x59,0x00,0x4B,0x00,0x59,0x00,0x49,0x00,0x59,0x00,0x49,0x00,0x59,0x00,0x49, +0x00,0x5E,0xFF,0x68,0x1F,0x6D,0x00,0x48,0x00,0x4D,0x09,0xD0,0x0C,0xC8,0x40,0xC0, +0x04,0xD0,0xFD,0xCB,0x00,0x5B,0x00,0x49,0x00,0x59,0x00,0x49,0x00,0x59,0x00,0x49, +0x00,0x59,0x00,0x4B,0x00,0x59,0x00,0x49,0x00,0x41,0x00,0x4B,0x00,0x41,0x00,0x49, +0x00,0x41,0x00,0x49,0x00,0x41,0x00,0x49,0x00,0x43,0x15,0x75,0x15,0x4D,0x00,0x45, +0x00,0x71,0x00,0x41,0x00,0x71,0x00,0x41,0x00,0x77,0x20,0x0B,0x00,0x71,0x01,0x69, +0x00,0x59,0x00,0x71,0x00,0x5A,0x00,0x71,0x15,0xD0,0xFA,0xCB,0x40,0xC0,0x0C,0xD0, +0x0C,0xC8,0x00,0x58,0x00,0x58,0x00,0x40,0x00,0x44,0x00,0x4E,0x00,0x70,0x00,0x70, +0x00,0x72,0xAD,0x40,0x01,0x42,0x18,0xD0,0xF6,0xCB,0x40,0xC0,0x0B,0xC8,0x00,0x48, +0x00,0x4B,0x00,0x70,0x00,0x73,0x00,0x58,0x00,0x5B,0x00,0x41,0x40,0x48,0x00,0x59, +0x00,0x49,0x00,0x59,0x00,0x49,0x00,0x59,0x00,0x49,0x00,0x5E,0x00,0x71,0x00,0x5A, +0x00,0x72,0x00,0x59,0x00,0x72,0x00,0x59,0x00,0x73,0x00,0x41,0x00,0x72,0x00,0x41, +0x00,0x71,0x00,0x41,0x00,0x71,0x00,0x42,0x17,0xD0,0x05,0xC8,0x40,0xC0,0x0C,0xD0, +0x07,0xC8,0x00,0x42,0x01,0x71,0x00,0x41,0x00,0x71,0x00,0x41,0x10,0x76,0x01,0x69, +0x00,0x71,0x00,0x59,0x00,0x71,0x27,0x01,0x00,0x02,0x01,0x9C,0x18,0x00,0x59,0x01, +0x69,0x00,0x58,0x00,0x5D,0x00,0x49,0x00,0x5A,0x00,0x49,0x00,0x59,0x00,0x4A,0x00, +0x59,0x00,0x4C,0x00,0x41,0x00,0x4A,0x00,0x41,0x00,0x49,0x00,0x42,0x00,0x49,0x00, +0x44,0x01,0x71,0x00,0x41,0x00,0x71,0x00,0x41,0x10,0x76,0x01,0x69,0x00,0x71,0x00, +0x59,0x00,0x71,0x00,0x59,0x01,0x69,0x00,0x5A,0x13,0xD0,0x04,0xC8,0x40,0xC0,0x00, +0xD0,0x09,0xC8,0x00,0x43,0x00,0x48,0x00,0x48,0x55,0x60,0x4A,0x60,0x2A,0x66,0x17, +0xD0,0x0B,0xC8,0x40,0xC0,0x01,0xC8,0x05,0xD0,0x00,0x4A,0x00,0x41,0x00,0x4A,0x00, +0x42,0x00,0x49,0x00,0x44,0x00,0x71,0x00,0x42,0x00,0x72,0x00,0x41,0x00,0x74,0x00, +0x59,0x00,0x72,0x00,0x5A,0x00,0x71,0x00,0x5C,0x00,0x49,0x00,0x5A,0x00,0x4A,0x00, +0x59,0x00,0x4C,0x00,0x59,0x00,0x4B,0x00,0x5C,0x00,0x49,0x00,0x59,0x00,0x71,0x00, +0x5B,0x00,0x71,0x00,0x59,0x00,0x72,0x00,0x59,0x00,0x74,0x00,0x41,0x00,0x72,0x00, +0x41,0x00,0x71,0x00,0x40,0x00,0x4B,0x00,0x41,0x00,0x4A,0x0A,0xD0,0x00,0xC8,0x40, +0xC0,0x06,0xC8,0x09,0xD0,0x00,0x43,0x00,0x71,0x00,0x41,0x00,0x71,0x00,0x41,0x00, +0x71,0x00,0x41,0x00,0x76,0x00,0x5A,0x00,0x72,0x00,0x59,0x00,0x71,0x00,0x5D,0x00, +0x49,0x00,0x5A,0x00,0x4A,0x00,0x59,0x00,0x49,0x00,0x59,0x00,0x4C,0x00,0x41,0x00, +0x4A,0x00,0x41,0x00,0x49,0x00,0x41,0x00,0x49,0x00,0x43,0x44,0x60,0x88,0x60,0x02, +0x62,0x0F,0xD0,0x0E,0xC8,0x40,0xC0,0x00,0xC1,0x26,0x01,0x00,0x06,0x00,0xAA,0x06,}; +#endif /* ROM_dazzle_lda_H */ diff --git a/sim_BuildROMs.c b/sim_BuildROMs.c index 4c473624..131f4c28 100644 --- a/sim_BuildROMs.c +++ b/sim_BuildROMs.c @@ -47,6 +47,7 @@ struct ROM_File_Descriptor { {"VAX/ka750_old.bin", "VAX/vax_ka750_bin_old.h", 1024, 0xFFFEBAA5, "vax_ka750_bin_old", "From ROM set: 990A9, 948A9, 906A9, 905A9 (Boots: A=DD, B=DM, C=DL, D=DU"}, {"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"}, {"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"}, };