;------------------------------------------------------------------------------- ; FILE: Chronograph ; AUTH: Ed's Projects ; DATE: 09/07/2017 ; DESC: Chronograph with light gates 50mm apart ;------------------------------------------------------------------------------- LIST P=18F24k40, R=DEC ; All numbers Decimal format unless otherwise stated. ; Assembly source line config statements #include "p18f24k40.inc" ; CONFIG1L CONFIG FEXTOSC = OFF ; External Oscillator mode Selection bits (Oscillator not enabled) CONFIG RSTOSC = HFINTOSC_64MHZ; Power-up default value for COSC bits (HFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1) ; CONFIG1H CONFIG CLKOUTEN = OFF ; Clock Out Enable bit (CLKOUT function is disabled) CONFIG CSWEN = OFF ; Clock Switch Enable bit (The NOSC and NDIV bits cannot be changed by user software) CONFIG FCMEN = OFF ; Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled) ; CONFIG2L CONFIG MCLRE = INTMCLR ; Master Clear Enable bit (If LVP = 0, MCLR pin function is port defined function; If LVP =1, RE3 pin fuction is MCLR) CONFIG PWRTE = OFF ; Power-up Timer Enable bit (Power up timer disabled) CONFIG LPBOREN = OFF ; Low-power BOR enable bit (ULPBOR disabled) CONFIG BOREN = OFF ; Brown-out Reset Enable bits (Brown-out Reset disabled) ; CONFIG2H CONFIG BORV = VBOR_2P45 ; Brown Out Reset Voltage selection bits (Brown-out Reset Voltage (VBOR) set to 2.45V) CONFIG ZCD = OFF ; ZCD Disable bit (ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON) CONFIG PPS1WAY = ON ; PPSLOCK bit One-Way Set Enable bit (PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle) CONFIG STVREN = ON ; Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset) CONFIG DEBUG = OFF ; Debugger Enable bit (Background debugger disabled) CONFIG XINST = OFF ; Extended Instruction Set Enable bit (Extended Instruction Set and Indexed Addressing Mode disabled) ; CONFIG3L CONFIG WDTCPS = WDTCPS_31 ; WDT Period Select bits (Divider ratio 1:65536; software control of WDTPS) CONFIG WDTE = OFF ; WDT operating mode (WDT Disabled) ; CONFIG3H CONFIG WDTCWS = WDTCWS_7 ; WDT Window Select bits (window always open (100%); software control; keyed access not required) CONFIG WDTCCS = SC ; WDT input clock selector (Software Control) ; CONFIG4L CONFIG WRT0 = OFF ; Write Protection Block 0 (Block 0 (000800-001FFFh) not write-protected) CONFIG WRT1 = OFF ; Write Protection Block 1 (Block 1 (002000-003FFFh) not write-protected) ; CONFIG4H CONFIG WRTC = OFF ; Configuration Register Write Protection bit (Configuration registers (300000-30000Bh) not write-protected) CONFIG WRTB = OFF ; Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected) CONFIG WRTD = OFF ; Data EEPROM Write Protection bit (Data EEPROM not write-protected) CONFIG SCANE = OFF ; Scanner Enable bit (Scanner module is NOT available for use, SCANMD bit is ignored) CONFIG LVP = OFF ; Low Voltage Programming Enable bit (HV on MCLR/VPP must be used for programming) ; CONFIG5L CONFIG CP = OFF ; UserNVM Program Memory Code Protection bit (UserNVM code protection disabled) CONFIG CPD = OFF ; DataNVM Memory Code Protection bit (DataNVM code protection disabled) ; CONFIG5H ; CONFIG6L CONFIG EBTR0 = OFF ; Table Read Protection Block 0 (Block 0 (000800-001FFFh) not protected from table reads executed in other blocks) CONFIG EBTR1 = OFF ; Table Read Protection Block 1 (Block 1 (002000-003FFFh) not protected from table reads executed in other blocks) ; CONFIG6H CONFIG EBTRB = OFF ; Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks) ;------------------------------------------------------------------------------- ;-------------------------------- Variables ---------------------------------- ;------------------------------------------------------------------------------- cblock 0x000 b0_temp4 b0_temp3 b0_temp2 b0_temp dispcntr1 ;display counter dispcntr2 ;display counter dispcntr3 ;display counter dispcntr4 ;display counter invdisp ;invert display, bit 0 disppage ; page 0 to 7 disppage_2 ; page 0 to 7 dispy ; y, 0 to 63 dispy_2 ; y, 0 to 63 enctr ; enable counter Adr32 ; SD Card Address Adr24 ; SD Card Address Adr16 ; SD Card Address Adr8 ; SD Card Address spbitH ; SD Card counter high spbitL ; SD Card counter low SPRtemp SPItemp Ent0 Ent1 Ent2 Ent3 Ent4 Ent5 Ent6 Ent7 Ent8 Ent9 Ent10 sdadrser8 sdadrser16 sdadrser24 sdadrser32 bytesect8 bytesect16 sectclus ressect8 ressect16 numFAT sectFAT8 sectFAT16 sectFAT24 sectFAT32 ; All SD Card Stuff temp1 temp2 temp3 temp7 temp8 bcdtmp1 bcdtmp2 digit1 digit2 digit3 digit4 digit5 digit6 digit7 digit8 digit9 digit10 count0 count1 count2 count3 result3 ; Multiplication Routine result2 ; Multiplication Routine result1 ; Multiplication Routine result0 ; Multiplication Routine arg1L ; Multiplication Routine arg1H ; Multiplication Routine arg2L ; Multiplication Routine arg2H ; Multiplication Routine Word3 ; Division Routine Word2 ; Division Routine Word1 ; Division Routine Word0 ; Division Routine DenH ; Division Routine DenL ; Division Routine R0 ; Division Routine R1 ; Division Routine R2 ; Division Routine lptmp ; Division Routine Sensgap2 ; Sensor Gap - metric Sensgap1 ; Sensor Gap - metric Sensgap0 ; Sensor Gap - metric TimeH ; Result Time TimeL ; Result Time curfpsH ; Readings curfpsL ; Readings prevfpsH ; Readings prevfpsL ; Readings recfpsH ; Readings recfpsL ; Readings curmsH ; Readings curmsL ; Readings prevmsH ; Readings prevmsL ; Readings recmsH ; Readings recmsL ; Readings endc ;------------------------------------------------------------------------------- ;------------------------------ Define Symbols ------------------------------- ;------------------------------------------------------------------------------- #define DB0 LATB, 7, 1 #define DB1 LATB, 6, 1 #define DB2 LATB, 5, 1 #define DB3 LATB, 4, 1 #define DB4 LATB, 3, 1 #define DB5 LATB, 2, 1 #define DB6 LATB, 1, 1 #define DB7 LATB, 0, 1 #define DCSR LATC, 7, 1 #define DCSL LATC, 6, 1 #define RST LATC, 5, 1 #define RW LATC, 4, 1 #define RS LATC, 2, 1 #define E LATC, 3, 1 #define SDCS LATC, 1, 1 #define SDOUT LATC, 0, 1 #define SDCLK LATA, 6, 1 #define SDIN LATA, 7, 1 #define SDPS LATA, 5, 1 #define SWC PORTA, 4, 1 #define SWA PORTA, 3, 1 #define SWB PORTA, 2, 1 #define GTA PORTA, 1, 1 #define GTB PORTA, 0, 1 ;------------------------------------------------------------------------------- ;------------------------------- Program Code -------------------------------- ;------------------------------------------------------------------------------- ORG 0x0 ; Reset Vector goto Init ORG 0x0008 ; High Priority Interrupt Vector goto HintVect ORG 0x0018 ; Low Priority Interrupt Vector ;------------------------------------------------------------------------------- ;----------------------- Low Priority Interrupt Vector ----------------------- ;------------------------------------------------------------------------------- LintVect retfie ;------------------------------------------------------------------------------- ;---------------------- High Priority Interrupt Vector ----------------------- ;------------------------------------------------------------------------------- HintVect retfie ;------------------------------------------------------------------------------- ;-------------------------- Initialisation of Ports -------------------------- ;------------------------------------------------------------------------------- Init movlb d'15' ; Set BSR to bank 15 clrf ADCON0 ; Turn off analogue module movlw 00001111b movwf ADCON1 ; Configure all pins as digital clrf CM1CON0, 1 ; Turn off comparators clrf CM2CON0, 1 ; Turn off comparators clrf ANSELA, 1 clrf ANSELB, 1 clrf ANSELC, 1 movlw 00011111b movwf TRISA, 1 clrf TRISB, 1 clrf TRISC, 1 clrf LATA, 1 clrf LATB, 1 clrf LATC, 1 movlw 00110010b movwf T1CON, 1 clrf T1GCON, 1 movlw 00000001b movwf T1CLK, 1 clrf T1GATE, 1 bsf NVMCON1, 7, 1 bcf NVMCON1, 6, 1 clrf invdisp, 0 movlw 0x4C movwf Sensgap2, 0 movlw 0x4B movwf Sensgap1, 0 movlw 0x40 movwf Sensgap0, 0 ;------------------------------------------------------------------------------- ;-------------------------- Initialisation Display --------------------------- ;------------------------------------------------------------------------------- call delay bsf RST movlw 0x3F call Dispdata ; Display on bsf DCSR bcf RS call Enable movlw 11000000b call Dispdata ; Set start line at zero call Enable bcf DCSR movlw 0x3F call Dispdata bsf DCSL call Enable movlw 11000000b call Dispdata call Enable bcf DCSL call Cleardisp goto Start ;------------------------------------------------------------------------------- ;------------------------ Place working file to databus ---------------------- ;------------------------------------------------------------------------------- Dispdata clrf LATB, 1 btfss RS goto dispdata_1 btfsc invdisp, 0, 0 ; Invert pixel if set xorlw d'255' dispdata_1 btfsc WREG, 7, 1 bsf DB7 btfsc WREG, 6, 1 bsf DB6 btfsc WREG, 5, 1 bsf DB5 btfsc WREG, 4, 1 bsf DB4 btfsc WREG, 3, 1 bsf DB3 btfsc WREG, 2, 1 bsf DB2 btfsc WREG, 1, 1 bsf DB1 btfsc WREG, 0, 1 bsf DB0 return ;------------------------------------------------------------------------------- ;--------------------------- Display Enable toggle --------------------------- ;------------------------------------------------------------------------------- Enable movlw d'10' movwf enctr, 0 enlbl_1 nop decfsz enctr, f, 0 goto enlbl_1 bsf E movlw d'10' movwf enctr, 0 enlbl_2 nop decfsz enctr, f, 0 goto enlbl_2 bcf E movlw d'10' movwf enctr, 0 enlbl_3 nop decfsz enctr, f, 0 goto enlbl_3 return ;------------------------------------------------------------------------------- ;------------------------------- Clear Display ------------------------------- ;------------------------------------------------------------------------------- Cleardisp bsf DCSR ; Select right side display bcf RW ; Write mode movlw 01000000b movwf dispy, 0 ; y address to zero movlw 10111000b movwf disppage, 0 ; page address to zero bcf RS ; Instruction mode movf dispy, w, 0 call Dispdata call Enable ; load y address movf disppage, w, 0 call Dispdata call Enable ; load page address bsf RS ; Data mode movlw d'8' movwf dispcntr2, 0 movlw d'64' movwf dispcntr1, 0 ; 512 counter (half display) clrdisp_1 movlw d'0' call Dispdata call Enable ; Send clear data decfsz dispcntr1, f, 0 ; Clear a page goto clrdisp_1 movlw d'64' movwf dispcntr1, 0 bcf RS ; Instruction mode incf disppage, f, 0 movf disppage, w, 0 ; Increment to next page call Dispdata call Enable ; Load page bsf RS decfsz dispcntr2, f, 0 ; Repeat whole process until all goto clrdisp_1 ; pages are clear bcf DCSR ; Deselect right side display bsf DCSL bcf RW movlw 01000000b movwf dispy, 0 movlw 10111000b movwf disppage, 0 bcf RS movf dispy, w, 0 call Dispdata call Enable movf disppage, w, 0 call Dispdata call Enable bsf RS movlw d'8' movwf dispcntr2, 0 movlw d'64' movwf dispcntr1, 0 clrdisp_2 movlw d'0' call Dispdata call Enable decfsz dispcntr1, f, 0 goto clrdisp_2 movlw d'64' movwf dispcntr1, 0 bcf RS incf disppage, f, 0 movf disppage, w, 0 call Dispdata call Enable bsf RS decfsz dispcntr2, f, 0 goto clrdisp_2 bcf DCSL return ;------------------------------------------------------------------------------- ;------------------------------ Delay Routines ------------------------------- ;------------------------------------------------------------------------------- sec_2delay movlw d'8' movwf b0_temp4, 0 sec_2delay_1 call delay decfsz b0_temp4, f, 0 goto sec_2delay_1 return delay movlw d'50' ; 62.5ns 0.25 second delay movwf b0_temp3, 0 ; 62.5ns nop ; 62.5ns label_3 movlw d'40' ; 62.5ns movwf b0_temp2, 0 ; 62.5ns nop ; 62.5ns nop ; 62.5ns label_1 movlw d'249' ; 62.5ns movwf b0_temp, 0 ; 62.5ns nop ; 62.5ns nop ; 62.5ns label_2 nop ; 62.5ns nop ; 62.5ns nop ; 62.5ns nop ; 62.5ns nop ; 62.5ns decfsz b0_temp, f, 0 ; 62.5ns goto label_2 ; 125ns (0.5us total inner loop) ; 62.5ns decfsz b0_temp2, f, 0 ; 62.5ns goto label_1 ; 125ns ; 62.5ns decfsz b0_temp3, f, 0 ; 62.5ns goto label_3 ; 125ns return ;------------------------------------------------------------------------------- ;----------------------------- Initialise SD Card ---------------------------- ;------------------------------------------------------------------------------- SDinit btfsc SDPS ; Check if card Inserted goto SDinit call sec_2delay ; Delay of 2 seconds notint bsf SDCS ; Deselect SD Card call SPID call SPID ; Send a total of 80 clock pulses call SPID call SPID call SPID ; SPIB calls a bit-banged call SPID ; version of the SPI module call SPID call SPID ; SPID calls a bit-banged call SPID ; version of the SPI module call SPID ; except 0xFF is sent ;------------------------------------------------------------------------------- bcf SDCS ; Select SD Card movlw 01000000b ; Command 0, software reset call SPIB call SPIZ call SPIZ call SPIZ call SPIZ movlw 10010101b ; CRC call SPIB call SPID ; NCR call SPID ; Send to Receive Response xorlw 00000001b btfss STATUS, Z, 1 goto notint ; An error?, try again bsf SDCS ; Deselect SD Card ;------------------------------------------------------------------------------- bcf SDCS ; Select SD Card movlw 01001000b ; Command 8, check card type call SPIB call SPIZ call SPIZ movlw d'1' call SPIB movlw 0xAA ; AA call SPIB movlw 10000111b ; CRC call SPIB call SPID ; NCR call SPID ; NCR xorlw 00000001b btfss STATUS, Z, 1 goto notint call SPID ; Dummy data call SPID ; Dummy data call SPID ; Dummy data call SPID ; Dummy data xorlw 10101010b ; Result AA - SD Version 2 btfss STATUS, Z, 1 goto notint bsf SDCS ; Deselect SD Card ;------------------------------------------------------------------------------- loop55 bcf SDCS ; Select SD Card movlw 01110111b ; Command ACMD41, initialis card call SPIB ; for SPI use call SPIZ call SPIZ call SPIZ call SPIZ call SPID ; CRC, does not need to be valid call SPID ; NCR call SPID ; Dummy data addlw d'0' btfsc STATUS, Z, 1 goto done movlw 01101001b ; Command 55 call SPIB movlw 01000000b call SPIB call SPIZ call SPIZ call SPIZ call SPID ; CRC, does not need to be valid call SPID ; NCR call SPID ; Dummy data bsf SDCS ; Deselect SD Card addlw d'0' btfss STATUS, Z, 1 goto loop55 done bsf SDCS ; Deselect SD Card return ;------------------------------------------------------------------------------- ;----------------------------- Single block write SD ------------------------- ;------------------------------------------------------------------------------- WriteSD bcf SDCS ; Select SD Card movlw 01011000b ; Command 24, single block write call SPIB movf Adr32, w call SPIB movf Adr24, w call SPIB movf Adr16, w call SPIB movf Adr8, w call SPIB call SPID ; CRC call SPID ; NCR wlpagain call SPID ; Check response addlw 00000000b btfss STATUS, Z, 1 goto wlpagain call SPID ; Dummy byte movlw 11111110b call SPIB ; Start Token movlw d'128' movwf temp7, 0 movlw d'4' movwf temp8, 0 SPIW ; call SPI call SPID decfsz temp7, f, 0 return movlw d'128' movwf temp7, 0 decfsz temp8, f, 0 goto SPIW call SPID ; CRC call SPID ; CRC wchkst call SPID xorlw 11100101b ; Data response btfss STATUS, Z, 1 goto wchkst wchkst_2 call SPID ; Clock dummy data until write addlw 0x00 ; is complete btfsc STATUS, Z, 1 goto wchkst_2 bsf SDCS ; Deselect SD Card return ;------------------------------------------------------------------------------- ;-------------------- Read Specific Location From SD Card -------------------- ;------------------------------------------------------------------------------- ReadSD bcf SDCS ; Select SD Card movlw b'01010010' ; Command 18, Multiple read call SPIB movf Adr32, w call SPIB movf Adr24, w call SPIB movf Adr16, w call SPIB movf Adr8, w call SPIB movlw d'1' ; Checksum call SPIB call SPID call SPID ; R1 response lpagain call SPID ; Check if start token received xorlw 11111110b btfss STATUS, Z, 1 goto lpagain movlw d'4' movwf spbitH, 0 movlw d'128' movwf spbitL, 0 return ;------------------------------------------------------------------------------- ;------------------------------ SD Card End Read ----------------------------- ;------------------------------------------------------------------------------- Edcmd movlw 01001100b ; Command 12 call SPIB movlw d'0' call SPIB movlw d'0' call SPIB movlw d'0' call SPIB movlw d'0' call SPIB movlw d'1' call SPIB call SPID lpend call SPID addlw d'0' btfss STATUS, Z, 1 goto lpend bsf SDCS ; Deselect SD Card return ;------------------------------------------------------------------------------- ;----------------------- Read 512 bytes, increment program --------------------- ;------------------------------------------------------------------------------- SPIR call SPID ; Check we only read 512 bytes before discarding decfsz spbitL, f, 0 ; CRC and check for start token return movwf SPRtemp, 0 movlw d'128' movwf spbitL, 0 movf SPRtemp, w, 0 decfsz spbitH, f, 0 return movlw d'4' movwf spbitH, 0 call SPID ; CRC call SPID ; CRC lptoken call SPID ; Check for start token xorlw 11111110b btfss STATUS, Z, 1 goto lptoken movf SPRtemp, w, 0 return ;------------------------------------------------------------------------------- ;-------------------- Find boot sector and root directory -------------------- ;------------------------------------------------------------------------------- SDoffset clrf Adr8, 0 clrf Adr16, 0 clrf Adr24, 0 clrf Adr32, 0 call ReadSD movlw d'128' movwf temp1, 0 sdr_1 call SPIR decfsz temp1, f, 0 goto sdr_1 movlw d'128' movwf temp1, 0 sdr_2 call SPIR decfsz temp1, f, 0 goto sdr_2 movlw d'128' movwf temp1, 0 sdr_3 call SPIR decfsz temp1, f, 0 goto sdr_3 movlw d'70' movwf temp1, 0 sdr_4 call SPIR decfsz temp1, f, 0 goto sdr_4 call SPIR movwf sdadrser8, 0 movwf count0, 0 call SPIR movwf sdadrser16, 0 movwf count1, 0 call SPIR movwf sdadrser24, 0 movwf count2, 0 call SPIR movwf sdadrser32, 0 ; We now have boot sector offset movwf count3, 0 call Edcmd ; End read return SDroot movf sdadrser8, w, 0 movwf Adr8, 0 movf sdadrser16, w, 0 movwf Adr16, 0 movf sdadrser24, w, 0 movwf Adr24, 0 movf sdadrser32, w, 0 movwf Adr32, 0 call ReadSD ; We are now reading boot sector call SPIR call SPIR call SPIR call SPIR call SPIR call SPIR call SPIR call SPIR call SPIR call SPIR call SPIR call SPIR movwf bytesect8, 0 call SPIR movwf bytesect16, 0 call SPIR movwf sectclus, 0 call SPIR movwf ressect8, 0 call SPIR movwf ressect16, 0 call SPIR movwf numFAT, 0 movlw d'19' movwf temp1, 0 sdr_5 call SPIR decfsz temp1, f, 0 goto sdr_5 call SPIR movwf sectFAT8, 0 call SPIR movwf sectFAT16, 0 call SPIR movwf sectFAT24, 0 call SPIR movwf sectFAT32, 0 call Edcmd ;end of boot sector read. ; root directory = boot sector offset + reserved sectors + (fat number * sectors per FAT) ; sectors per FAT will always bcf STATUS, C, 1 rlcf sectFAT8, f, 0 rlcf sectFAT16, f, 0 rlcf sectFAT24, f, 0 rlcf sectFAT32, f, 0 movf sectFAT8, w, 0 addwf sdadrser8, f, 0 btfss STATUS, C, 1 goto sdr_6 incf sdadrser16, f, 0 btfss STATUS, C, 1 goto sdr_6 incf sdadrser24, f, 0 btfsc STATUS, C, 1 incf sdadrser32, f, 0 sdr_6 movf sectFAT16, w, 0 addwf sdadrser16, f, 0 btfss STATUS, C, 1 goto sdr_7 incf sdadrser24, f, 0 btfsc STATUS, C, 1 incf sdadrser32, f, 0 sdr_7 movf sectFAT24, w, 0 addwf sdadrser24, f, 0 btfsc STATUS, C, 1 incf sdadrser32, f, 0 movf sectFAT32, w, 0 addwf sdadrser32, f, 0 movf ressect8, w, 0 addwf sdadrser8, f, 0 btfss STATUS, C, 1 goto sdr_8 incf sdadrser16, f, 0 btfss STATUS, C, 1 goto sdr_8 incf sdadrser24, f, 0 btfsc STATUS, C, 1 incf sdadrser32, f, 0 sdr_8 movf ressect16, w, 0 addwf sdadrser16, f, 0 btfss STATUS, C, 1 goto sdr_9 incf sdadrser24, f, 0 btfsc STATUS, C, 1 incf sdadrser32, f, 0 sdr_9 ; sdadrser variables now have the location of the root directory. movf sdadrser8, w, 0 movwf Adr8, 0 movwf count0, 0 movf sdadrser16, w, 0 movwf Adr16, 0 movwf count1, 0 movf sdadrser24, w, 0 movwf Adr24, 0 movwf count2, 0 movf sdadrser32, w, 0 movwf Adr32, 0 movwf count3, 0 return ;------------------------------------------------------------------------------- ;------------------------------- Bit Bang SPI --------------------------------- ;------------------------------------------------------------------------------- SPIZ movlw d'0' goto SPIB SPID movlw d'255' SPIB movwf temp2, 0 clrf SPItemp, 0 bsf SDCLK bcf SDOUT btfsc temp2, 7, 0 bsf SDOUT bcf SDCLK bsf SDCLK btfsc SDIN bsf SPItemp, 7, 0 bcf SDOUT btfsc temp2, 6, 0 bsf SDOUT bcf SDCLK bsf SDCLK btfsc SDIN bsf SPItemp, 6, 0 bcf SDOUT btfsc temp2, 5, 0 bsf SDOUT bcf SDCLK bsf SDCLK btfsc SDIN bsf SPItemp, 5, 0 bcf SDOUT btfsc temp2, 4, 0 bsf SDOUT bcf SDCLK bsf SDCLK btfsc SDIN bsf SPItemp, 4, 0 bcf SDOUT btfsc temp2, 3, 0 bsf SDOUT bcf SDCLK bsf SDCLK btfsc SDIN bsf SPItemp, 3, 0 bcf SDOUT btfsc temp2, 2, 0 bsf SDOUT bcf SDCLK bsf SDCLK btfsc SDIN bsf SPItemp, 2, 0 bcf SDOUT btfsc temp2, 1, 0 bsf SDOUT bcf SDCLK bsf SDCLK btfsc SDIN bsf SPItemp, 1, 0 bcf SDOUT btfsc temp2, 0, 0 bsf SDOUT bcf SDCLK bsf SDCLK btfsc SDIN bsf SPItemp, 0, 0 bcf SDOUT movf SPItemp, w, 0 return ;------------------------------------------------------------------------------- ;------------------------------- Read Directory ------------------------------ ;------------------------------------------------------------------------------- ReadDir call ReadSD ReadDir_1 movlw d'31' movwf temp1, 0 call SPIR xorlw 0xE5 btfsc STATUS, Z, 1 goto delent ; If set we want to skip to next entry movf SPItemp, w, 0 xorwf Ent0, w, 0 btfss STATUS, Z, 1 goto delent decf temp1, f, 0 call SPIR xorwf Ent1, w, 0 btfss STATUS, Z, 1 goto delent decf temp1, f, 0 call SPIR xorwf Ent2, w, 0 btfss STATUS, Z, 1 goto delent decf temp1, f, 0 call SPIR xorwf Ent3, w, 0 btfss STATUS, Z, 1 goto delent decf temp1, f, 0 call SPIR xorwf Ent4, w, 0 btfss STATUS, Z, 1 goto delent decf temp1, f, 0 call SPIR xorwf Ent5, w, 0 btfss STATUS, Z, 1 goto delent decf temp1, f, 0 call SPIR xorwf Ent6, w, 0 btfss STATUS, Z, 1 goto delent decf temp1, f, 0 call SPIR xorwf Ent7, w, 0 btfss STATUS, Z, 1 goto delent decf temp1, f, 0 call SPIR xorwf Ent8, w, 0 btfss STATUS, Z, 1 goto delent decf temp1, f, 0 call SPIR xorwf Ent9, w, 0 btfss STATUS, Z, 1 goto delent decf temp1, f, 0 call SPIR xorwf Ent10, w, 0 btfss STATUS, Z, 1 goto delent ; Our entry matches call SPIR ; Discard attributes call SPIR ; Discard reserved call SPIR ; Discard file creation time call SPIR ; Discard file creation time call SPIR ; Discard file creation time call SPIR ; Discard file creation date call SPIR ; Discard file creation date call SPIR ; Discard file access date call SPIR ; Discard file access date call SPIR movwf Adr24, 0; High cluster offset call SPIR movwf Adr32, 0; High cluster offset call SPIR ; Discard file modification time call SPIR ; Discard file modification time call SPIR ; Discard file modification date call SPIR ; Discard file modification date call SPIR movwf Adr8, 0 ; Low cluster offset call SPIR movwf Adr16, 0; Low cluster offset call Edcmd ; End read command movlw d'2' ; Minus 2 as our root directory starts at 2 subwf Adr8, 0 btfsc STATUS, C, 1 goto nxtmul movlw d'1' subwf Adr16, 0 btfsc STATUS, C, 1 goto nxtmul movlw d'1' subwf Adr24, 0 btfsc STATUS, C, 1 goto nxtmul decf Adr32, f, 0 nxtmul bcf STATUS, C, 1 ; We have our offset, it needs to be ; multiplied by the number of sectors ; per cluster. rlcf Adr8, f, 0 ; 2 sectors per cluster rlcf Adr16, f, 0 rlcf Adr24, f, 0 rlcf Adr32, f, 0 movf sectclus, w, 0 xorlw d'2' btfsc STATUS, Z, 1 goto adrtoft rlcf Adr8, f, 0 ; 4 sectors per cluster rlcf Adr16, f, 0 rlcf Adr24, f, 0 rlcf Adr32, f, 0 movf sectclus, w, 0 xorlw d'4' btfsc STATUS, Z, 1 goto adrtoft rlcf Adr8, f, 0 ; 8 sectors per cluster rlcf Adr16, f, 0 rlcf Adr24, f, 0 rlcf Adr32, f, 0 movf sectclus, w, 0 xorlw d'8' btfsc STATUS, Z, 1 goto adrtoft rlcf Adr8, f, 0 ; 16 sectors per cluster rlcf Adr16, f, 0 rlcf Adr24, f, 0 rlcf Adr32, f, 0 movf sectclus, w, 0 xorlw d'16' btfsc STATUS, Z, 1 goto adrtoft rlcf Adr8, f, 0 ; 32 sectors per cluster rlcf Adr16, f, 0 rlcf Adr24, f, 0 rlcf Adr32, f, 0 movf sectclus, w, 0 xorlw d'32' btfsc STATUS, Z, 1 goto adrtoft rlcf Adr8, f, 0 ; 64 sectors per cluster rlcf Adr16, f, 0 rlcf Adr24, f, 0 rlcf Adr32, f, 0 movf sectclus, w, 0 xorlw d'64' btfsc STATUS, Z, 1 goto adrtoft rlcf Adr8, f, 0 ; 128 sectors per cluster rlcf Adr16, f, 0 rlcf Adr24, f, 0 rlcf Adr32, f, 0 movf sectclus, w, 0 xorlw d'128' btfsc STATUS, Z, 1 goto adrtoft ; if we branch here then there is an error adrtoft movf sdadrser8, w, 0 ; Add root directory offset addwf Adr8, f, 0 btfss STATUS, C, 1 goto adr_2 incf Adr16, f, 0 btfss STATUS, C, 1 goto adr_2 incf Adr24, f, 0 btfsc STATUS, C, 1 incf Adr32, f, 0 adr_2 movf sdadrser16, w, 0 addwf Adr16, f, 0 btfss STATUS, C, 1 goto adr_3 incf Adr24, f, 0 btfsc STATUS, C, 1 incf Adr32, f, 0 adr_3 movf sdadrser24, w, 0 addwf Adr24, f, 0 btfsc STATUS, C, 1 incf Adr32, f, 0 movf sdadrser32, w, 0 addwf Adr32, f, 0 return delent call SPIR decfsz temp1, f, 0 goto delent goto ReadDir_1 ;------------------------------------------------------------------------------- ;-------------------------- Binary to Decimal Routine ------------------------- ;------------------------------------------------------------------------------- BCD clrf digit1, 0 clrf digit2, 0 clrf digit3, 0 clrf digit4, 0 clrf digit5, 0 clrf digit6, 0 clrf digit7, 0 clrf digit8, 0 clrf digit9, 0 clrf digit10, 0 movlw d'32' ;16 bits to do movwf bcdtmp1, 0 bcf STATUS, C bitlp rlcf count0, f, 0 ;Shift msb into carry rlcf count1, f, 0 rlcf count2, f, 0 rlcf count3, f, 0 movlw LOW digit1 movwf FSR1L, 1 ;Pointer to digits movlw HIGH digit1 movwf FSR1H, 1 ;Pointer to digits movlw d'10' ;10 digits to do movwf bcdtmp2, 0 adjlp rlcf INDF1, f, 1 ;Shift digit 1 bit left movlw d'10' subwf INDF1, w, 1 ;Check and adjust for decimal overflow btfsc STATUS, C ;Postinc affects both fsrl and fsrh movwf POSTINC1, 1 btfss STATUS, C movf POSTINC1, w, 1 ;This is just to postinc, decfsz bcdtmp2, f, 0 goto adjlp decfsz bcdtmp1, f, 0 ;Next bit goto bitlp return ;------------------------------------------------------------------------------- ;----------------------------- 16 x 16 Multiply ------------------------------ ;------------------------------------------------------------------------------- MUL16 movf arg1L, w, 0 mulwf arg2L, 0 movff PRODL, result0 movff PRODH, result1 movf arg1H, w, 0 mulwf arg2H, 0 movff PRODL, result2 movff PRODH, result3 movf arg1L, w, 0 mulwf arg2H, 0 movf PRODL, w, 1 addwf result1, f, 0 movf PRODH, w, 1 addwfc result2, f, 0 clrf WREG, 1 addwfc result3, f, 0 movf arg1H, w, 0 mulwf arg2L, 0 movf PRODL, w, 1 addwf result1, f, 0 movf PRODH, w, 1 addwfc result2, f, 0 clrf WREG, 1 addwfc result3, f, 0 return ;------------------------------------------------------------------------------- ;------------------------------- 32 / 16 Divide ------------------------------ ;------------------------------------------------------------------------------- Divide clrf R0, 0 clrf R1, 0 clrf R2, 0 movlw d'32' ; 32 loops for 32-bit movwf lptmp, 0 Div_2 bcf STATUS, C, 1 rlcf Word0, f, 0 rlcf Word1, f, 0 rlcf Word2, f, 0 rlcf Word3, f, 0 rlcf R2, f, 0 rlcf R1, f, 0 rlcf R0, f, 0 movf DenL, w, 0 subwf R2, f, 0 movf DenH, w, 0 subwfb R1, w, 0 bc Div_4 tstfsz R0, 0 goto Div_3 movf DenL, w, 0 addwf R2, f, 0 goto Div_5 Div_3 decf R0, f, 0 Div_4 movwf R1, 0 bsf Word0, 0, 0 Div_5 decfsz lptmp, f, 0 goto Div_2 ; Go do next loop return ; Finished our divide routine ;------------------------------------------------------------------------------- ;---------------------------- Table Image to Display -------------------------- ;------------------------------------------------------------------------------- Disppic1 movlw UPPER Pic1 movwf TBLPTRU, 1 movlw HIGH Pic1 movwf TBLPTRH, 1 movlw LOW Pic1 movwf TBLPTRL, 1 return Disppic2 movlw UPPER Pic2 movwf TBLPTRU, 1 movlw HIGH Pic2 movwf TBLPTRH, 1 movlw LOW Pic2 movwf TBLPTRL, 1 return Disppic3 movlw UPPER Pic3 movwf TBLPTRU, 1 movlw HIGH Pic3 movwf TBLPTRH, 1 movlw LOW Pic3 movwf TBLPTRL, 1 return Disppic4 movlw UPPER Pic4 movwf TBLPTRU, 1 movlw HIGH Pic4 movwf TBLPTRH, 1 movlw LOW Pic4 movwf TBLPTRL, 1 return Disppic5 movlw UPPER Pic5 movwf TBLPTRU, 1 movlw HIGH Pic5 movwf TBLPTRH, 1 movlw LOW Pic5 movwf TBLPTRL, 1 return Disppic6 movlw UPPER Pic6 movwf TBLPTRU, 1 movlw HIGH Pic6 movwf TBLPTRH, 1 movlw LOW Pic6 movwf TBLPTRL, 1 return Clearline bsf DCSL bcf RW call PicPage movlw 01000000b movwf dispy, 0 movf disppage_2, w, 0 addlw 10111000b movwf disppage, 0 movlw d'64' movwf dispcntr1, 0 bcf RS movf dispy, w, 0 call Dispdata call Enable movf disppage, w, 0 call Dispdata call Enable bsf RS displabl_3 movlw d'0' call Dispdata call Enable decfsz dispcntr1, f, 0 goto displabl_3 bcf DCSL bsf DCSR bcf RW call PicPage movlw 01000000b movwf dispy, 0 movf disppage_2, w, 0 addlw 10111000b movwf disppage, 0 movlw d'64' movwf dispcntr1, 0 bcf RS movf dispy, w, 0 call Dispdata call Enable movf disppage, w, 0 call Dispdata call Enable bsf RS displabl_4 movlw d'0' call Dispdata call Enable decfsz dispcntr1, f, 0 goto displabl_4 bcf DCSR return DisplineL bsf DCSL bcf RW call PicPage movlw 01000000b movwf dispy, 0 movf disppage_2, w, 0 addlw 10111000b movwf disppage, 0 movlw d'1' movwf dispcntr2, 0 movlw d'64' movwf dispcntr1, 0 goto displabl_2 DisplineR bsf DCSR bcf RW call PicPage_2 movlw 01000000b movwf dispy, 0 movf disppage_2, w, 0 addlw 10111000b movwf disppage, 0 movlw d'1' movwf dispcntr2, 0 movlw d'64' movwf dispcntr1, 0 goto displabl_2a DispimageL bsf DCSL bcf RW movlw 01000000b movwf dispy, 0 movlw 10111000b movwf disppage, 0 movlw d'8' movwf dispcntr2, 0 movlw d'64' movwf dispcntr1, 0 displabl_2 bcf RS movf dispy, w, 0 call Dispdata call Enable movf disppage, w, 0 call Dispdata call Enable bsf RS displabl_1 call Disp call Dispdata call Enable decfsz dispcntr1, f, 0 goto displabl_1 movlw d'64' movwf dispcntr1, 0 bcf RS incf disppage, f, 0 movf disppage, w, 0 call Dispdata call Enable bsf RS decfsz dispcntr2, f, 0 goto displabl_1 bcf DCSL return DispimageR bsf DCSR bcf RW movlw 01000000b movwf dispy, 0 movlw 10111000b movwf disppage, 0 movlw d'8' movwf dispcntr2, 0 movlw d'64' movwf dispcntr1, 0 displabl_2a bcf RS movf dispy, w, 0 call Dispdata call Enable movf disppage, w, 0 call Dispdata call Enable bsf RS displabl_1a call Disp call Dispdata call Enable decfsz dispcntr1, f, 0 goto displabl_1a movlw d'64' movwf dispcntr1, 0 bcf RS incf disppage, f, 0 movf disppage, w, 0 call Dispdata call Enable bsf RS decfsz dispcntr2, f, 0 goto displabl_1a bcf DCSR return Disp tblrd *+ movf TABLAT, w, 1 return PicPage_2 movf disppage_2, w, 0 addlw d'8' movwf dispcntr3, 0 movlw d'64' movwf dispcntr4, 0 goto PicPage_1 PicPage movf disppage_2, w, 0 addlw d'0' btfsc STATUS, Z, 1 return movwf dispcntr3, 0 movlw d'64' movwf dispcntr4, 0 PicPage_1 tblrd *+ decfsz dispcntr4, f, 0 goto PicPage_1 movlw d'64' movwf dispcntr4, 0 decfsz dispcntr3, f, 0 goto PicPage_1 return ;------------------------------------------------------------------------------- ;------------------------------ Button Debounce ------------------------------ ;------------------------------------------------------------------------------- Butdeb btfss SWA goto Butdeb btfss SWB goto Butdeb btfss SWC goto Butdeb call delay return ;------------------------------------------------------------------------------- ;-------------------------------- Main Program ------------------------------- ;------------------------------------------------------------------------------- Start call Disppic1 ; Splash Screen Display call DispimageL call DispimageR Start_1 btfss SWA ; Menu button goto Mainmenu btfss SWB ; Results button goto Mainmenu btfss SWC ; Select button goto Mainmenu goto Start_1 Mainmenu call Butdeb call Disppic2 call DispimageL call DispimageR movlw d'2' movwf disppage_2, 0 bsf invdisp, 0, 0 ; Invert "Single shot option" call Disppic2 call DisplineL call Disppic2 call DisplineR bcf invdisp, 0, 0 Mainmen_2 btfss SWA ; Menu button goto Mainmen_3 btfss SWB ; Results button goto Results btfss SWC ; Select button goto SingleShot goto Mainmen_2 Mainmen_3 call Butdeb call Disppic2 call DispimageL call DispimageR movlw d'3' movwf disppage_2, 0 bsf invdisp, 0, 0 ; Invert "Multiple shot option" call Disppic2 call DisplineL call Disppic2 call DisplineR bcf invdisp, 0, 0 Mainmen_4 btfss SWA ; Menu button goto Mainmen_5 btfss SWB ; Results button goto Results btfss SWC ; Select button goto MultipleShot goto Mainmen_4 Mainmen_5 call Butdeb call Disppic2 call DispimageL call DispimageR movlw d'4' movwf disppage_2, 0 bsf invdisp, 0, 0 ; Invert "Save to SD option" call Disppic2 call DisplineL call Disppic2 call DisplineR bcf invdisp, 0, 0 Mainmen_6 btfss SWA ; Menu button goto Mainmen_7 btfss SWB ; Results button goto Results btfss SWC ; Select button goto SaveSD goto Mainmen_6 Mainmen_7 call Butdeb call Disppic2 call DispimageL call DispimageR movlw d'5' movwf disppage_2, 0 bsf invdisp, 0, 0 ; Invert "Options menu" call Disppic2 call DisplineL call Disppic2 call DisplineR bcf invdisp, 0, 0 Mainmen_8 btfss SWA ; Menu button goto Mainmenu btfss SWB ; Results button goto Results btfss SWC ; Select button goto Options goto Mainmen_8 ;------------------------------------------------------------------------------- ;-------------------------------- Options Menu ------------------------------- ;------------------------------------------------------------------------------- Options call Butdeb call Disppic3 call DispimageL call DispimageR movlw d'2' movwf disppage_2, 0 bsf invdisp, 0, 0 ; Invert "calibrate sensors" call Disppic3 call DisplineL call Disppic3 call DisplineR bcf invdisp, 0, 0 Options_2 btfss SWA ; Menu button goto Options_3 btfss SWB ; Results button goto Mainmenu btfss SWC ; Select button goto Calibsenors goto Options_2 Options_3 call Butdeb call Disppic3 call DispimageL call DispimageR movlw d'3' movwf disppage_2, 0 bsf invdisp, 0, 0 ; Invert "Sensor Gap" call Disppic3 call DisplineL call Disppic3 call DisplineR bcf invdisp, 0, 0 Options_4 btfss SWA ; Menu button goto Options_5 btfss SWB ; Results button goto Mainmenu btfss SWC ; Select button goto SensorGap goto Options_4 Options_5 call Butdeb call Disppic3 call DispimageL call DispimageR movlw d'4' movwf disppage_2, 0 bsf invdisp, 0, 0 ; Invert "SD Save Format" call Disppic3 call DisplineL call Disppic3 call DisplineR bcf invdisp, 0, 0 Options_6 btfss SWA ; Menu button goto Options_7 btfss SWB ; Results button goto Mainmenu btfss SWC ; Select button goto Saveformat goto Options_6 Options_7 call Butdeb call Disppic3 call DispimageL call DispimageR movlw d'5' movwf disppage_2, 0 bsf invdisp, 0, 0 ; Invert "Results Options" call Disppic3 call DisplineL call Disppic3 call DisplineR bcf invdisp, 0, 0 Options_8 btfss SWA ; Menu button goto Options btfss SWB ; Results button goto Mainmenu btfss SWC ; Select button goto Resultformat goto Options_8 ;------------------------------------------------------------------------------- ;------------------------------ Calibrate Sensors ----------------------------- ;------------------------------------------------------------------------------- Calibsenors call Butdeb call Disppic4 call DispimageL call DispimageR btfss SWA ; Menu button goto Options btfss SWB ; Results button goto Mainmenu btfss SWC ; Select button goto Options calibsens_1 btfsc GTA goto calibsens_2 movlw d'3' movwf disppage_2, 0 call Clearline calibsens_2 btfsc GTB goto Calibsenors movlw d'6' movwf disppage_2, 0 call Clearline btfss SWA ; Menu button goto Options btfss SWB ; Results button goto Mainmenu btfss SWC ; Select button goto Options goto calibsens_1 ;------------------------------------------------------------------------------- ;-------------------------------- Sensor Gap --------------------------------- ;------------------------------------------------------------------------------- SensorGap call Butdeb call Disppic5 call DispimageL call DispimageR call SensorGap_1 SensorGap_2 btfss SWA ; Menu button goto Options btfss SWB ; Results button goto Mainmenu btfss SWC ; Select button goto Options goto SensorGap_2 SensorGap_1 movlw d'4' movwf dispy_2, 0 movlw d'3' movwf disppage_2, 0 clrf count3, 0 movff Sensgap2, count2 movff Sensgap1, count1 movff Sensgap0, count0 call BCD movlw " " call DispsingleL movlw " " call DispsingleL movf digit7, w, 0 call DispsingleL movf digit6, w, 0 call DispsingleL movlw "." call DispsingleL movf digit5, w, 0 call DispsingleL movf digit4, w, 0 call DispsingleL movf digit3, w, 0 call DispsingleL return ;------------------------------------------------------------------------------- ;------------------------------- Single Shot --------------------------------- ;------------------------------------------------------------------------------- SingleShot call Butdeb call Disppic6 call DispimageL call DispimageR bsf DCSL bcf RS movlw d'2' addlw 01000000b call Dispdata call Enable bsf RS movlw d'2' movwf disppage_2, 0 clrf count3, 0 clrf count2, 0 movff curfpsH, count1 movff curfpsL, count0 call BCD movf digit5, w, 0 call DispsingleL movf digit4, w, 0 call DispsingleL movf digit3, w, 0 call DispsingleL movlw "." call DispsingleL movf digit2, w, 0 call DispsingleL movf digit1, w, 0 call DispsingleL bsf DCSL bcf RS movlw d'2' addlw 01000000b call Dispdata call Enable bsf RS movlw d'3' movwf disppage_2, 0 clrf count3, 0 clrf count2, 0 movff curmsH, count1 movff curmsL, count0 call BCD movf digit5, w, 0 call DispsingleL movf digit4, w, 0 call DispsingleL movf digit3, w, 0 call DispsingleL movlw "." call DispsingleL movf digit2, w, 0 call DispsingleL movf digit1, w, 0 call DispsingleL bsf DCSL bcf RS movlw d'2' addlw 01000000b call Dispdata call Enable bsf RS movlw d'4' movwf disppage_2, 0 clrf count3, 0 clrf count2, 0 movff prevfpsH, count1 movff prevfpsL, count0 call BCD movf digit5, w, 0 call DispsingleL movf digit4, w, 0 call DispsingleL movf digit3, w, 0 call DispsingleL movlw "." call DispsingleL movf digit2, w, 0 call DispsingleL movf digit1, w, 0 call DispsingleL bsf DCSL bcf RS movlw d'2' addlw 01000000b call Dispdata call Enable bsf RS movlw d'5' movwf disppage_2, 0 clrf count3, 0 clrf count2, 0 movff prevmsH, count1 movff prevmsL, count0 call BCD movf digit5, w, 0 call DispsingleL movf digit4, w, 0 call DispsingleL movf digit3, w, 0 call DispsingleL movlw "." call DispsingleL movf digit2, w, 0 call DispsingleL movf digit1, w, 0 call DispsingleL bsf DCSL bcf RS movlw d'2' addlw 01000000b call Dispdata call Enable bsf RS movlw d'6' movwf disppage_2, 0 clrf count3, 0 clrf count2, 0 movff recfpsH, count1 movff recfpsL, count0 call BCD movf digit5, w, 0 call DispsingleL movf digit4, w, 0 call DispsingleL movf digit3, w, 0 call DispsingleL movlw "." call DispsingleL movf digit2, w, 0 call DispsingleL movf digit1, w, 0 call DispsingleL bsf DCSL bcf RS movlw d'2' addlw 01000000b call Dispdata call Enable bsf RS movlw d'7' movwf disppage_2, 0 clrf count3, 0 clrf count2, 0 movff recmsH, count1 movff recmsL, count0 call BCD movf digit5, w, 0 call DispsingleL movf digit4, w, 0 call DispsingleL movf digit3, w, 0 call DispsingleL movlw "." call DispsingleL movf digit2, w, 0 call DispsingleL movf digit1, w, 0 call DispsingleL singleshot_2 btfss SWA ; Menu button goto Mainmenu btfss GTB goto singleshot_2 ; Timing gap detection clrf TMR1H, 1 clrf TMR1L, 1 singleshot_4 movlb d'15' ; Set BSR to bank 15 bsf T1CON, 0, 1 btfsc GTA goto singleshot_3 movlb d'14' ; Set BSR to bank 14 btfss PIR4, TMR1IF, 1 goto singleshot_4 bcf PIR4, TMR1IF, 1 movlb d'15' ; Set BSR to bank 15 bcf T1CON, 0, 1 goto SingleShot singleshot_3 bcf T1CON, 0, 1 call SpeedCalc goto SingleShot Saveformat goto Mainmenu Resultformat goto Mainmenu Results goto Mainmenu MultipleShot goto Mainmenu SaveSD goto Mainmenu ;------------------------------------------------------------------------------- ;----------------------------- Speed Calculation ----------------------------- ;------------------------------------------------------------------------------- SpeedCalc movff TMR1H, TimeH movff TMR1L, TimeL movff curmsH, prevmsH movff curmsL, prevmsL movff curfpsH, prevfpsH movff curfpsL, prevfpsL clrf Word3, 0 movff Sensgap2, Word2 movff Sensgap1, Word1 movff Sensgap0, Word0 clrf DenH, 0 movlw d'5' movwf DenL, 0 call Divide movff TimeH, DenH movff TimeL, DenL call Divide movff Word3, count3 movff Word2, count2 movff Word1, count1 movff Word0, count0 movff count1, curmsH movff count0, curmsL movff count1, arg1H movff count0, arg1L movlw 0x80 movwf arg2H, 0 movlw 0x28 movwf arg2L, 0 call MUL16 movff result0, Word0 movff result1, Word1 movff result2, Word2 movff result3, Word3 movlw 0x27 movwf DenH, 0 movlw 0x10 movwf DenL, 0 call Divide movff Word1, curfpsH movff Word0, curfpsL checkrecord movf recmsH, w, 0 cpfsgt curmsH, 0 goto notrecord movf recmsL, w, 0 cpfsgt curmsL, 0 goto notrecord movff curmsL, recmsL movff curmsH, recmsH movff curfpsL, recfpsL movff curfpsH, recfpsH notrecord return ;------------------------------------------------------------------------------- ;--------------------------- Display Number / Letter ------------------------- ;------------------------------------------------------------------------------- DispsingleL call dispsingle_5 goto Dispsingle_L DispsingleR call dispsingle_5 goto Dispsingle_R dispsingle_5 movwf temp3, 0 movf temp3, w, 0 addlw d'0' btfsc STATUS, Z, 1 goto Number0 movf temp3, w, 0 xorlw d'1' btfsc STATUS, Z, 1 goto Number1 movf temp3, w, 0 xorlw d'2' btfsc STATUS, Z, 1 goto Number2 movf temp3, w, 0 xorlw d'3' btfsc STATUS, Z, 1 goto Number3 movf temp3, w, 0 xorlw d'4' btfsc STATUS, Z, 1 goto Number4 movf temp3, w, 0 xorlw d'5' btfsc STATUS, Z, 1 goto Number5 movf temp3, w, 0 xorlw d'6' btfsc STATUS, Z, 1 goto Number6 movf temp3, w, 0 xorlw d'7' btfsc STATUS, Z, 1 goto Number7 movf temp3, w, 0 xorlw d'8' btfsc STATUS, Z, 1 goto Number8 movf temp3, w, 0 xorlw d'9' btfsc STATUS, Z, 1 goto Number9 movf temp3, w, 0 xorlw " " btfsc STATUS, Z, 1 goto Numberspace movf temp3, w, 0 xorlw "." btfsc STATUS, Z, 1 goto Numberdot goto Number0 Number0 movlw UPPER Num0 movwf TBLPTRU, 1 movlw HIGH Num0 movwf TBLPTRH, 1 movlw LOW Num0 movwf TBLPTRL, 1 return Number1 movlw UPPER Num1 movwf TBLPTRU, 1 movlw HIGH Num1 movwf TBLPTRH, 1 movlw LOW Num1 movwf TBLPTRL, 1 return Number2 movlw UPPER Num2 movwf TBLPTRU, 1 movlw HIGH Num2 movwf TBLPTRH, 1 movlw LOW Num2 movwf TBLPTRL, 1 return Number3 movlw UPPER Num3 movwf TBLPTRU, 1 movlw HIGH Num3 movwf TBLPTRH, 1 movlw LOW Num3 movwf TBLPTRL, 1 return Number4 movlw UPPER Num4 movwf TBLPTRU, 1 movlw HIGH Num4 movwf TBLPTRH, 1 movlw LOW Num4 movwf TBLPTRL, 1 return Number5 movlw UPPER Num5 movwf TBLPTRU, 1 movlw HIGH Num5 movwf TBLPTRH, 1 movlw LOW Num5 movwf TBLPTRL, 1 return Number6 movlw UPPER Num6 movwf TBLPTRU, 1 movlw HIGH Num6 movwf TBLPTRH, 1 movlw LOW Num6 movwf TBLPTRL, 1 return Number7 movlw UPPER Num7 movwf TBLPTRU, 1 movlw HIGH Num7 movwf TBLPTRH, 1 movlw LOW Num7 movwf TBLPTRL, 1 return Number8 movlw UPPER Num8 movwf TBLPTRU, 1 movlw HIGH Num8 movwf TBLPTRH, 1 movlw LOW Num8 movwf TBLPTRL, 1 return Number9 movlw UPPER Num9 movwf TBLPTRU, 1 movlw HIGH Num9 movwf TBLPTRH, 1 movlw LOW Num9 movwf TBLPTRL, 1 return Numberspace movlw UPPER Numspace movwf TBLPTRU, 1 movlw HIGH Numspace movwf TBLPTRH, 1 movlw LOW Numspace movwf TBLPTRL, 1 return Numberdot movlw UPPER Numdot movwf TBLPTRU, 1 movlw HIGH Numdot movwf TBLPTRH, 1 movlw LOW Numdot movwf TBLPTRL, 1 return Dispsingle_R bsf DCSR goto dispsingle_4 Dispsingle_L bsf DCSL dispsingle_4 bcf RW movf disppage_2, w, 0 addlw 10111000b movwf disppage, 0 dispsingle_2 bcf RS movf disppage, w, 0 call Dispdata call Enable bsf RS dispsingle_3 call Disp call Dispdata call Enable call Disp call Dispdata call Enable call Disp call Dispdata call Enable call Disp call Dispdata call Enable call Disp call Dispdata call Enable call Disp call Dispdata call Enable bcf DCSL bcf DCSR return Num0 db 0x00,0x7C,0xA2,0x92,0x8A,0x7C Num1 db 0x00,0x00,0x84,0xFE,0x80,0x00 Num2 db 0x00,0x84,0xC2,0xA2,0x92,0x8C Num3 db 0x00,0x42,0x82,0x8A,0x96,0x62 Num4 db 0x00,0x30,0x28,0x24,0xFE,0x20 Num5 db 0x00,0x4E,0x8A,0x8A,0x8A,0x72 Num6 db 0x00,0x78,0x94,0x92,0x92,0x60 Num7 db 0x00,0x02,0xE2,0x12,0x0A,0x06 Num8 db 0x00,0x6C,0x92,0x92,0x92,0x6C Num9 db 0x00,0x0C,0x92,0x92,0x52,0x3C Numspace db 0x00,0x00,0x00,0x00,0x00,0x00 Numdot db 0x00,0x00,0xC0,0xC0,0x00,0x00 ;------------------------------------------------------------------------------- ;-------------------------------- Data Tables ------------------------------- ;------------------------------------------------------------------------------- Pic1 db 0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07 db 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07 db 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07 db 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07 db 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0x8C,0x8C,0x8C,0x8C,0x8C db 0x8C,0x00,0x00,0xC0,0xE0,0xE0,0x60,0x60,0xC0,0xFC,0xFC,0xFC,0x00,0x00,0x3C,0x3C db 0x0C,0x00,0xC0,0xE0,0xE0,0x20,0x20,0x60,0x60,0x40,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0xFC,0xFC,0xFC,0xFC,0x8C,0x8C,0xCC,0xFC,0xFC,0xF8,0x00,0x00,0xE0,0xE0,0xE0 db 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31 db 0x31,0x00,0x00,0x0F,0x3F,0x3F,0x30,0x30,0x18,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00 db 0x00,0x00,0x11,0x33,0x37,0x27,0x27,0x3F,0x3F,0x1E,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x3F,0x3F,0x3F,0x3F,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F db 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFE,0x07,0x03,0x03,0x03,0x8F,0x0E db 0x04,0x00,0x00,0xFF,0xFF,0xFF,0x30,0x18,0x18,0xF8,0xF8,0xF0,0x00,0x00,0xF8,0xF8 db 0xF8,0x30,0x18,0x18,0x00,0xE0,0xF0,0xF8,0x18,0x18,0x18,0xF8,0xF0,0xE0,0x00,0x00 db 0xF8,0xF8,0xF8,0x30,0x18,0x18,0xF8,0xF8,0xF0,0x00,0x00,0xE0,0xF0,0xF8,0x18,0x18 db 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x07,0x07,0x0E,0x0C,0x0C,0x0C,0x0F,0x07 db 0x03,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F db 0x0F,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0C,0x0C,0x0C,0x0F,0x07,0x03,0x00,0x00 db 0x0F,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x03,0x07,0x0F,0x0C,0x0C db 0xFF,0xFF,0xFF,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0 db 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0 db 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0 db 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0 db 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07 db 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07 db 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07 db 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0xFF,0xFF,0xFF db 0xC0,0x60,0x60,0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0xEC db 0xEC,0xEC,0x00,0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x80 db 0xC0,0xE0,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x60,0x60,0xF8,0xF8,0xFC,0x60,0x00 db 0x00,0xC0,0xE0,0xE0,0x20,0x20,0x60,0x60,0x40,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF db 0x00,0x00,0x00,0x00,0x0F,0x1F,0x3F,0x30,0x30,0x30,0x3F,0x1F,0x0F,0x80,0x80,0xFF db 0xFF,0xFF,0x00,0x00,0x0F,0x1F,0x3F,0x33,0x33,0x33,0x3B,0x1B,0x0B,0x00,0x00,0x0F db 0x1F,0x3F,0x30,0x30,0x30,0x38,0x18,0x18,0x00,0x00,0x00,0x1F,0x3F,0x3F,0x30,0x20 db 0x00,0x11,0x33,0x37,0x27,0x27,0x3F,0x3F,0x1E,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01 db 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF db 0x18,0xF8,0xF0,0xE0,0x00,0x00,0xF0,0xF8,0xF8,0x18,0x18,0x30,0xF8,0xF8,0xF8,0x00 db 0x00,0xF8,0xF8,0xF8,0x30,0x18,0x18,0x00,0x30,0xB0,0xB8,0x98,0xD8,0xD8,0xF8,0xF0 db 0xE0,0x00,0x00,0xF8,0xF8,0xF8,0x30,0x18,0x18,0xF8,0xF8,0xE0,0x00,0x00,0xFF,0xFF db 0xFF,0x30,0x18,0x18,0xF8,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF db 0x0C,0x0F,0x07,0x03,0x00,0x00,0x23,0x67,0x6F,0x6C,0x6C,0x66,0x7F,0x3F,0x1F,0x00 db 0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x0D,0x0C,0x06,0x0F,0x0F db 0x0F,0x00,0x00,0x7F,0x7F,0x7F,0x06,0x0C,0x0C,0x0F,0x0F,0x07,0x00,0x00,0x0F,0x0F db 0x0F,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF db 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0 db 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0 db 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0 db 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xFF,0xFF,0xFF Pic2 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0 db 0x08,0x08,0x08,0x10,0x00,0xF8,0x40,0x40,0x40,0xF8,0x00,0xF8,0x48,0xC8,0x48,0x30 db 0x00,0xF0,0x08,0x08,0x08,0xF0,0x00,0xF8,0x20,0x40,0x80,0xF8,0x00,0xF0,0x08,0x08 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01 db 0x02,0x02,0x02,0x01,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x00,0x01,0x02 db 0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x01,0x02,0x02 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C db 0x92,0x92,0x92,0x62,0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0xFE,0x08,0x10,0x20,0xFE db 0x00,0x7C,0x82,0x92,0x92,0xF4,0x00,0xFE,0x80,0x80,0x80,0x80,0x00,0xFE,0x92,0x92 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x04,0x18,0x04,0xFE,0x00,0x7E db 0x80,0x80,0x80,0x7E,0x00,0xFE,0x80,0x80,0x80,0x80,0x00,0x02,0x02,0xFE,0x02,0x02 db 0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0xFE,0x12,0x12,0x12,0x0C,0x00,0xFE,0x80,0x80 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0xFC,0x22,0x22,0x22,0xFC,0x00,0x3E db 0x40,0x80,0x40,0x3E,0x00,0xFE,0x92,0x92,0x92,0x82,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x82,0x82,0x82,0x7C db 0x00,0xFE,0x12,0x12,0x12,0x0C,0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0x00,0x82,0xFE db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x08,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x10,0x60,0x10,0xF8,0x00,0xF8 db 0x48,0x48,0x48,0x08,0x00,0xF8,0x20,0x40,0x80,0xF8,0x00,0xF8,0x00,0x00,0x00,0xF8 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x03 db 0x02,0x02,0x02,0x02,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x01,0x02,0x02,0x02,0x01 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x92,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0xFE db 0x10,0x10,0x10,0xFE,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x02,0x02,0xFE,0x02,0x02 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x80,0x80,0x00,0xFE,0x92,0x92,0x92,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C db 0x92,0x92,0x92,0x62,0x00,0xFE,0x10,0x10,0x10,0xFE,0x00,0x7C,0x82,0x82,0x82,0x7C db 0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0xFE,0x82,0x82,0x44,0x38,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x7C,0x82,0x82,0x82,0x44,0x00,0xFC,0x22,0x22,0x22,0xFC db 0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0xFE,0x82,0x82,0x44,0x38,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x82,0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0xFE,0x08,0x10,0x20,0xFE,0x00,0x8C db 0x92,0x92,0x92,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 Pic3 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x08,0x08,0x08,0x10,0x00,0xF8,0x40 db 0x40,0x40,0xF8,0x00,0xF8,0x48,0xC8,0x48,0x30,0x00,0xF0,0x08,0x08,0x08,0xF0,0x00 db 0xF8,0x20,0x40,0x80,0xF8,0x00,0xF0,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x03,0x00 db 0x00,0x00,0x03,0x00,0x03,0x00,0x00,0x01,0x02,0x00,0x01,0x02,0x02,0x02,0x01,0x00 db 0x03,0x00,0x00,0x00,0x03,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x82 db 0x82,0x82,0x44,0x00,0xFC,0x22,0x22,0x22,0xFC,0x00,0xFE,0x80,0x80,0x80,0x80,0x00 db 0x00,0x82,0xFE,0x82,0x00,0x00,0xFE,0x92,0x92,0x92,0x6C,0x00,0xFE,0x12,0x32,0x52 db 0x8C,0x00,0xFC,0x22,0x22,0x22,0xFC,0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0xFE,0x92 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0xFE,0x92,0x92 db 0x92,0x82,0x00,0xFE,0x08,0x10,0x20,0xFE,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0x7C db 0x82,0x82,0x82,0x7C,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0xFE,0x82,0x82,0x44,0x38 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x82,0x82,0x82,0x44,0x00,0xFC,0x22,0x22 db 0x22,0xFC,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0xFE,0x82,0x82,0x44,0x38,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0xFC,0x22,0x22,0x22,0xFC db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0xFE,0x92,0x92 db 0x92,0x82,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0x7E,0x80,0x80,0x80,0x7E,0x00,0xFE db 0x80,0x80,0x80,0x80,0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0xF0,0x08,0x08,0x08,0xF0,0x00,0xF8,0x48,0x48,0x48,0x30,0x00,0x08,0x08 db 0xF8,0x08,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x00,0xF0,0x08,0x08,0x08,0xF0,0x00 db 0xF8,0x20,0x40,0x80,0xF8,0x00,0x30,0x48,0x48,0x48,0x88,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x03,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00 db 0x03,0x00,0x00,0x00,0x03,0x00,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x92,0x92,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0xFE db 0x92,0x92,0x92,0x82,0x00,0xFE,0x08,0x10,0x20,0xFE,0x00,0x8C,0x92,0x92,0x92,0x62 db 0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0x8C,0x92,0x92 db 0x92,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0xFE,0x12,0x12,0x12,0x0C,0x00,0xFC,0x22,0x22 db 0x22,0xFC,0x00,0x7C,0x82,0x82,0x82,0x44,0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0xFE db 0x08,0x10,0x20,0xFE,0x00,0x7C,0x82,0x92,0x92,0xF4,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x3E,0x40,0x80,0x40,0x3E,0x00,0xFE,0x92,0x92,0x92,0x82,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0xFE,0x12,0x12,0x12,0x0C,0x00,0x02 db 0x02,0xFE,0x02,0x02,0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0x7C,0x82,0x82,0x82,0x7C db 0x00,0xFE,0x08,0x10,0x20,0xFE,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0x00,0x00,0x00 db 0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0xFE,0x12,0x12,0x12,0x0C,0x00,0x02,0x02,0xFE db 0x02,0x02,0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0xFE db 0x08,0x10,0x20,0xFE,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 Pic4 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x08 db 0x08,0x08,0x10,0x00,0xF0,0x88,0x88,0x88,0xF0,0x00,0xF8,0x00,0x00,0x00,0x00,0x00 db 0x00,0x08,0xF8,0x08,0x00,0x00,0xF8,0x48,0x48,0x48,0xB0,0x00,0xF8,0x48,0xC8,0x48 db 0x30,0x00,0xF0,0x88,0x88,0x88,0xF0,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xF8,0x48 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 db 0x02,0x02,0x01,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x03,0x02,0x02,0x02,0x02,0x00 db 0x00,0x02,0x03,0x02,0x00,0x00,0x03,0x02,0x02,0x02,0x01,0x00,0x03,0x00,0x00,0x01 db 0x02,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x02 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0xFE db 0x02,0x02,0x00,0x7E,0x80,0x80,0x80,0x7E,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0xFE db 0x08,0x10,0x20,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x92,0x92,0x92,0x62 db 0x00,0xFE,0x92,0x92,0x92,0x82,0x00,0xFE,0x08,0x10,0x20,0xFE,0x00,0x8C,0x92,0x92 db 0x00,0x7E,0x80,0x80,0x80,0x7E,0x00,0xFE,0x08,0x10,0x20,0xFE,0x00,0x02,0x02,0xFE db 0x02,0x02,0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0xFE,0x80,0x80,0x80,0x80,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0xFE,0x10,0x10,0x10,0xFE db 0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0xFE db 0x02,0x02,0x00,0x7E,0x80,0x80,0x80,0x7E,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0xFE db 0x08,0x10,0x20,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x92,0x92,0x92,0x62 db 0x00,0xFE,0x92,0x92,0x92,0x82,0x00,0xFE,0x08,0x10,0x20,0xFE,0x00,0x8C,0x92,0x92 db 0x00,0x7E,0x80,0x80,0x80,0x7E,0x00,0xFE,0x08,0x10,0x20,0xFE,0x00,0x02,0x02,0xFE db 0x02,0x02,0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0xFE,0x80,0x80,0x80,0x80,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0xFE,0x10,0x10,0x10,0xFE db 0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x48,0x48,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x88,0x00,0xF8 db 0x48,0x48,0x48,0x08,0x00,0xF8,0x20,0x40,0x80,0xF8,0x00,0x30,0x48,0x48,0x48,0x88 db 0x00,0xF0,0x08,0x08,0x08,0xF0,0x00,0xF8,0x48,0xC8,0x48,0x30,0x00,0x30,0x48,0x48 db 0x48,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x01,0x00,0x03 db 0x02,0x02,0x02,0x02,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x02,0x02,0x02,0x02,0x01 db 0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x03,0x00,0x00,0x01,0x02,0x00,0x02,0x02,0x02 db 0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x92,0x62,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0xFE,0x12,0x12,0x12,0x0C,0x00,0x7C,0x82,0x82,0x82,0x7C db 0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x22,0x22 db 0x22,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0xFE,0x82,0x82,0x44,0x38,0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0x8C db 0x92,0x92,0x92,0x62,0x00,0xFC,0x22,0x22,0x22,0xFC,0x00,0xFE,0x12,0x12,0x12,0x0C db 0x00,0xFE,0x12,0x12,0x12,0x0C,0x00,0xFE,0x92,0x92,0x92,0x82,0x00,0xFC,0x22,0x22 db 0x22,0xFC,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x92,0x62,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0xFE,0x12,0x12,0x12,0x0C,0x00,0x7C,0x82,0x82,0x82,0x7C db 0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x92,0x92 db 0x92,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0xFE,0x82,0x82,0x44,0x38,0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0x8C db 0x92,0x92,0x92,0x62,0x00,0xFC,0x22,0x22,0x22,0xFC,0x00,0xFE,0x12,0x12,0x12,0x0C db 0x00,0xFE,0x12,0x12,0x12,0x0C,0x00,0xFE,0x92,0x92,0x92,0x82,0x00,0xFC,0x22,0x22 db 0x22,0xFC,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 Pic5 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x30,0x48,0x48,0x48,0x88,0x00,0xF8,0x48,0x48,0x48,0x08,0x00,0xF8,0x20,0x40 db 0x80,0xF8,0x00,0x30,0x48,0x48,0x48,0x88,0x00,0xF0,0x08,0x08,0x08,0xF0,0x00,0xF8 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x02,0x02,0x02,0x02,0x01,0x00,0x03,0x02,0x02,0x02,0x02,0x00,0x03,0x00,0x00 db 0x00,0x03,0x00,0x02,0x02,0x02,0x02,0x01,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x03 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x48,0xC8,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x08,0x48,0x48,0xD0 db 0x00,0xF0,0x88,0x88,0x88,0xF0,0x00,0xF8,0x48,0x48,0x48,0x30,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x03 db 0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0xFE,0x04,0x18,0x04,0xFE,0x00,0xFE,0x04,0x18,0x04,0xFE,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 Pic6 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x48 db 0x48,0x48,0x88,0x00,0x00,0x08,0xF8,0x08,0x00,0x00,0xF8,0x20,0x40,0x80,0xF8,0x00 db 0xF0,0x08,0x48,0x48,0xD0,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0xF8,0x48,0x48,0x48 db 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x88,0x00,0xF8,0x40 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02 db 0x02,0x02,0x01,0x00,0x00,0x02,0x03,0x02,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00 db 0x01,0x02,0x02,0x02,0x03,0x00,0x03,0x02,0x02,0x02,0x02,0x00,0x03,0x02,0x02,0x02 db 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x01,0x00,0x03,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x10,0xFC,0x12,0x02,0x04,0x00,0xF8,0x28,0x28,0x28,0x10 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x08,0x08,0xF0,0x08,0x08,0xF0,0x00,0x80,0x60 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x10,0xFC,0x12,0x02,0x04,0x00,0xF8,0x28,0x28,0x28,0x10 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x08,0x08,0xF0,0x08,0x08,0xF0,0x00,0x80,0x60 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x10,0xFC,0x12,0x02,0x04,0x00,0xF8,0x28,0x28,0x28,0x10 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x08,0x08,0xF0,0x08,0x08,0xF0,0x00,0x80,0x60 db 0x40,0x40,0xF8,0x00,0xF0,0x08,0x08,0x08,0xF0,0x00,0x08,0x08,0xF8,0x08,0x08,0x00 db 0x00,0x00,0x00,0x00,0x00,0xF8,0x10,0x60,0x10,0xF8,0x00,0xF0,0x08,0x08,0x08,0xF0 db 0x00,0xF8,0x08,0x08,0x10,0xE0,0x00,0xF8,0x48,0x48,0x48,0x08,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x03,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x01,0x02,0x02,0x02,0x01 db 0x00,0x03,0x02,0x02,0x01,0x00,0x00,0x03,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x90,0xA8,0xA8,0xA8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C db 0x82,0x82,0x82,0x44,0x00,0x7E,0x80,0x80,0x80,0x7E,0x00,0xFE,0x12,0x32,0x52,0x8C db 0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0xFE,0x92,0x92,0x92,0x82,0x00,0xFE,0x08,0x10 db 0x20,0xFE,0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x18,0x00,0x90,0xA8,0xA8,0xA8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C db 0x82,0x82,0x82,0x44,0x00,0x7E,0x80,0x80,0x80,0x7E,0x00,0xFE,0x12,0x32,0x52,0x8C db 0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0xFE,0x92,0x92,0x92,0x82,0x00,0xFE,0x08,0x10 db 0x20,0xFE,0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x90,0xA8,0xA8,0xA8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE db 0x12,0x12,0x12,0x0C,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0xFE,0x92,0x92,0x92,0x82 db 0x00,0x3E,0x40,0x80,0x40,0x3E,0x00,0x00,0x82,0xFE,0x82,0x00,0x7C,0x82,0x82,0x82 db 0x7C,0x00,0x7E,0x80,0x80,0x80,0x7E,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0x00,0x00 db 0x18,0x00,0x90,0xA8,0xA8,0xA8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE db 0x12,0x12,0x12,0x0C,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0xFE,0x92,0x92,0x92,0x82 db 0x00,0x3E,0x40,0x80,0x40,0x3E,0x00,0x00,0x82,0xFE,0x82,0x00,0x7C,0x82,0x82,0x82 db 0x7C,0x00,0x7E,0x80,0x80,0x80,0x7E,0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0x00,0x00 db 0x00,0x90,0xA8,0xA8,0xA8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE db 0x12,0x32,0x52,0x8C,0x00,0xFE,0x92,0x92,0x92,0x82,0x00,0x7C,0x82,0x82,0x82,0x44 db 0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0xFE,0x82,0x82 db 0x44,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x18,0x00,0x90,0xA8,0xA8,0xA8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE db 0x12,0x32,0x52,0x8C,0x00,0xFE,0x92,0x92,0x92,0x82,0x00,0x7C,0x82,0x82,0x82,0x44 db 0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0xFE,0x12,0x32,0x52,0x8C,0x00,0xFE,0x82,0x82 db 0x44,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 end