;***************************************************************************** ; Laser Scanner (source file) ; dsPIC-based Laser Scanner (Galvo) Controller ; Professor M. Csele, Niagara College Canada, 2007/01-2007/10 ; ; Other Files Required : p30f6012.inc ; Tools Used : MPLAB IDE 7.5x ; ; Hardware: ; Microchip standard dsPICDEM board with Analog Devices AD7840 DACs ; DAC data lines on PORTB RB2-RB15 ; DAC control lines on RD0-2, RD8-10 ; Blanking and PCAOM outputs on RG12-RG15 ; External inputs on RF0-1, RF6-7 (script 'wait' sync function) ; ; Pushbutton #1 (RC13) - when pressed, cycle preprogrammed frames ; Pushbutton #2 (RC14) - when pressed, display frame in RAM ; LEDs: #1=preprogrammed frame, #2=RAM frame, #3=Script Running, #4=COMM_1 status ; ; Allows upload in CSV format to RAM frame ; ; Revision History: ; 1.00 2007/01 Original version ; 1.10 2007/06/22 New command interpreter, added save-to-flash feature ; 1.20 2007/06/25 Added SIZE to vectors, new splash displays ; 1.30 2007/06/30 Added Rotate and Position ; 1.31 2007/08/02 Fixed size/rotate/position numerical limiting ; 1.40 2007/08/29 Scripting ; 1.41 2007/08/30 Added Phase ; 1.42 2007/09/05 Added Display script fn, fixed mirroring ; 1.43 2007/09/17 Phase repaired ; 1.44 2007/09/25 Startup Demo Script added (for portable unit), Blank on O/F ; 1.50 2007/10/05 User script area in flash ;***************************************************************************** .equ __30F6012, 1 .include "p30f6012.inc" ;............................................................................. ; Configuration bits: ;............................................................................. config __FOSC, CSW_FSCM_OFF & XT_PLL16 ;16xPLL - 120MHz/30MIPs at 7.37MHz XTAL config __FWDT, WDT_OFF ;Turn off Watchdog Timer config __FBORPOR, PBOR_ON & BORV_27 & PWRT_16 & MCLR_EN ;Set Brown-out Reset voltage and config __FGS, CODE_PROT_OFF ;Set Code Protection Off ;............................................................................. ; Global Declarations: ;............................................................................. .global __reset ;Label for first line of code. .global __ICD2RAM ;Allows ICD2 to be used .global __U1RXInterrupt ;............................................................................. ; Variable Storage in Data space (beginning at 0x850 - linker handled) ;............................................................................. .section .data .align 2 DacX: .space 2 ;Value for X-channel DAC DacY: .space 2 ;Value for Y-channel DAC DacTempX: .space 2 ;Temporary value for DAC buffering DacTempY: .space 2 Temp: .space 2 ;Temp value for multiplier (dec->bin converter) FrameSource: .space 2 ;0=RAM, 1+ is PSV frames from program memory PBFlag: .space 2 ;Flags (D0) that pushbutton is down LineBuffer: .space 80 ;Buffer for incoming ASCII characters from CSV upload BufferPointer: .space 2 ;Pointer inside line buffer area RxState: .space 2 ;State of Rx ISR for uploads YValue: .space 2 ;Y value converted from CSV XValue: .space 2 ;X value converted from CSV RamFramePointer: .space 2 ;Pointer to frame space in ram for storage SizeX: .space 2 ;Size of X image (in units of percent) SizeY: .space 2 Rotate: .space 2 ;Rotation angle (0-359) in degrees PosX: .space 2 ;Position offset of X image PosY: .space 2 Phase: .space 2 ;Phase shift of Y word SRunFlag: .space 2 ;Script Run Flag (RUN/IDLE) ScriptPtr: .space 2 ;Pointer to next script word TempMul: .space 2 ;Temporary var for multiplier TimerFlag: .space 2 ;Flags if script timer (delay) is running FrameStartPtr: .space 2 ;Pointer to start of current frame (for phase shift) RegisterA: .space 2 ;Register A for use in scripts RegisterB: .space 2 ;Register B for use in scripts RegisterC: .space 2 ;Register C for use in scripts RegisterD: .space 2 ;Register D for use in scripts Frame: .space 4100 ;Storage space for one frame of 1024 points (plus end) Script: .space 2048 ;Storage for script commands .equiv MAX_FRAMES,#16 ;Number of frames allowed in flash memory ;............................................................................. ; Hardware I/O Lines ;............................................................................. .equiv DACX_CS, 0 ;X-channel DAC hardware control lines .equiv DACX_WR, 1 .equiv DACX_LDAC, 2 .equiv DACY_CS, 8 ;Y-channel DAC hardware control lines .equiv DACY_WR, 9 .equiv DACY_LDAC, 10 .equiv BLANKING,15 ;Blanking and PCAOM output lines .equiv PCAOM_D0,12 .equiv PCAOM_D1,13 .equiv PCAOM_D2,14 .equ PB_FLASH,13 ;Pushbutton for display from flash' display .equ PB_RAM,14 ;Pushbutton for display from RAM frame ;............................................................................. ; System Timing Constants ;............................................................................. .equiv FCY, 4000000*4 ;Instruction Cycle Frequency (4MHz*16PLL) .equiv BAUDRATE, 9600 ;Operating Baud Rate .equiv DelayConst, FCY/2000 ;............................................................................. ; Receive State Codes (Current state of receiver) ;............................................................................. .equiv RX_STATE_IDLE,0 ;Rx ISR states .equiv RX_STATE_CSV1,1 ;CSV line 1 "VECTOR" received, wait for name .equiv RX_STATE_CSV2,2 ;CSV name received, accept vectors for conversion .equiv RX_STATE_SCRIPT,3 ;SCRIPT upload mode - convert and save script data .equiv SRUN_IDLE,0 ;Script RUN/IDLE state .equiv SRUN_RUN,1 ;Run script in RAM .equiv SRUN_DEMO,2 ;Demo script mode (startup) ;............................................................................. ; Command Return Codes (for Command Interpreter) ;............................................................................. .equ CMD_SPEED, 1 .equ CMD_RUN, 2 .equ CMD_VECTOR, 3 .equ CMD_SAVE,4 .equ CMD_HELP,5 .equ CMD_SIZEX,6 .equ CMD_SIZEY,7 .equ CMD_RESET,8 .equ CMD_ROTATE,9 .equ CMD_POSX,10 .equ CMD_POSY,11 .equ CMD_SCRIPT,12 .equ CMD_SRUN,13 .equ CMD_PHASE,14 ;............................................................................. ; Timer State (for delay within a script) ;............................................................................. .equ STOP,0 .equ RUN,1 ;............................................................................. ; Code Section in Program Memory ;............................................................................. .text ;Start of Code section ;............................................................................. ; UART 1 Interrupt ; Handles data receive from the PC (patterns) as well as command processing ; Operates as a state machine ; Accepts CSV files for upload into RAM frame buffer: ; Begins with "VECTOR....." (evaluated after return received) ; Puts state machine into 'CSV_UPLOAD' mode ; Ignores second line (name) then uploads each point as ; V,X,Y (V=Visible 0/1, X/Y=16-bit signed coordinates) ; Ends when a blank RETURN is received with no data ; Commands: RUN xx (xx=0 for RAM, 1+ for flash memory) ; SPEED xxxx (xxxx is points per second) ;............................................................................. __U1RXInterrupt: push w0 ;Save w0 push w1 push w2 push w3 push w4 push w5 push w6 push PSVPAG clr PSVPAG clr w0 mov BufferPointer,w5 inc BufferPointer mov.b U1RXREG, wreg ;Transfer received byte to w0 mov.b w0,[w5] ;Store into incoming buffer area mov #13,w1 cpsne w0,w1 ;Check if RETURN char received call ReturnReceived pop PSVPAG pop w6 pop w5 pop w4 pop w3 pop w2 pop w1 pop w0 ;Restore w0 bclr IFS0, #U1RXIF ;Clear the interrupt flag. retfie ;Return from Interrupt ;Return Received - called at the end of a received (& buffered) line from the COM port ReturnReceived: mov RxState,w0 ;Check if in IDLE state mov #RX_STATE_IDLE,w1 cpseq w0,w1 bra VectorChain ;Waiting for a command, evaluate the received command buffer CommandChain: call CommandInterpreter ;Check if a command was issued cp0 w0 bra z,InvalidCommand ;SWITCH on commands mov #CMD_SPEED,w2 cpsne w0,w2 bra SpeedCommand mov #CMD_VECTOR,w2 cpsne w0,w2 bra VectorCommand mov #CMD_RUN,w2 cpsne w0,w2 bra RunCommand mov #CMD_SAVE,w2 cpsne w0,w2 bra SaveCommand mov #CMD_HELP,w2 cpsne w0,w2 bra HelpCommand mov #CMD_SIZEX,w2 cpsne w0,w2 bra SizeXCommand mov #CMD_SIZEY,w2 cpsne w0,w2 bra SizeYCommand mov #CMD_RESET,w2 cpsne w0,w2 bra ResetCommand mov #CMD_ROTATE,w2 cpsne w0,w2 bra RotateCommand mov #CMD_POSX,w2 cpsne w0,w2 bra PosXCommand mov #CMD_POSY,w2 cpsne w0,w2 bra PosYCommand mov #CMD_PHASE,w2 cpsne w0,w2 bra PhaseCommand mov #CMD_SCRIPT,w2 cpsne w0,w2 bra ScriptCommand mov #CMD_SRUN,w2 cpsne w0,w2 bra SRunCommand InvalidCommand: mov #tbloffset(InvalidCommandError), w5 call TransmitString call SendPrompt bra ResetAndEnd ;Done! ;If in Vector Mode, check state and cycle VectorChain: call UploadMode ;Common exit point for functions ResetAndEnd: mov #LineBuffer,w5 ;Reset buffer mov w5,BufferPointer return ;*** Command Interpreter (new for version 1.10) *** ;*** Checks Received Command (LineBuffer) buffer against command strings ;*** Returns zero if no string found at all, Command Return_Code otherwise ;*** If command found, w5 points to next char in Received Command buffer (argument) CommandInterpreter: mov #CommandList,w4 ;Align for the first command string in the series CheckNextCommandStringInSeries: call CheckCommandString cp0 w0 ;If a zero was returned, check next command string bra z,AlignNextCommandString return ;MATCH: Return code is already in w0, w5 aligned for end of string AlignNextCommandString: cp0 w1 ;Check if command list returns a zero (i.e. end of current string) bra z,CheckNextCommandString mov.b [w4++],w1 ;Increment command list string pointer until a zero is found bra AlignNextCommandString CheckNextCommandString: mov.b [w4++],w1 ;Move to return code after the text string mov.b [w4],w1 ;Get first char of the next string in the series mov #0xFF,w2 ;Check if we are out of strings to check cpseq w1,w2 bra z,CheckNextCommandStringInSeries retlw #0,w0 ;Return Error code (Empty) from interpreter ;*** Check the Incoming Command buffer against the surrent command string in w4 ;*** Returns zero in w0 if no match, Return_Code in w0 is string matches CheckCommandString: mov #LineBuffer,w5 ;Start of Received Command Buffer NextChar: mov.b [w5++],w2 mov.b [w4++],w1 cp0 w1 bra z,CorrectStringMatch and #0xDF,w2 ;Ignore upper/lower case (bit 5) cpseq w2,w1 retlw #0,w0 ;No Match, return zero bra NextChar CorrectStringMatch: mov.b [w4],w0 ;Get the return code at the end of the string return ;*** Vector command issued, put system into upload mode 1 (wait for ID line) VectorCommand: bset PORTD,#7 ;COMMS LED on mov #RX_STATE_CSV1,W0 ;Put into CSV mode 1 (line 1 received) mov w0,RxState mov #Frame,w4 ;Reset RAM frame pointer to beginning (start new frame) mov w4,RamFramePointer mov #0xFFFF,w0 ;To be safe, store an END-OF-FRAME marker mov w0,[w4++] ; at the first ram location (prevents runaway) mov w0,[w4] bra ResetAndEnd ;Skip the rest of the processing chain SpeedCommand: mov BufferPointer,w2 ;Point to end of 'Speed xxxx' string dec w2,w2 ;Past return dec w2,w2 call ConvertString ;Convert string to binary value in w0 clr w2 mov #0x2EE0,w1 ;Check if speed is 12000 cpsne w0,w1 mov #1333,w2 mov #0x2710,w1 ;Check if speed is 10000 cpsne w0,w1 mov #1600,w2 mov #0x1F40,w1 ;Check if speed is 8000 cpsne w0,w1 mov #2000,w2 mov #0x1770,w1 ;Check if speed is 6000 cpsne w0,w1 mov #2667,w2 mov #0x0FA0,w1 ;Check if speed is 4000 cpsne w0,w1 mov #4000,w2 mov w2,PR1 mov #0,w0 cpseq w0,w2 bra SpeedOK mov #2000,W2 ;Default speed of 8000 pps mov w2,PR1 mov #tbloffset(SpeedError), w5 call TransmitString call SendPrompt ;Warn if not supported (outstring) bra ResetAndEnd ;Skip the rest of the processing chain SpeedOK: call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain RunCommand: mov BufferPointer,w2 ;Point to end of 'Run xx' string dec w2,w2 ;Past return dec w2,w2 call ConvertString ;Convert string to binary value in w0 mov #MAX_FRAMES,w1 cpslt w1,w0 bra FrameOK btsc w0,#15 ;Negative numbers allowed (system frames) bra FrameOK mov #tbloffset(RunError), w5 call TransmitString call SendPrompt ;Warn if not supported (outstring) bra ResetAndEnd ;Skip the rest of the processing chain FrameOK: mov w0,FrameSource call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain SaveCommand: mov BufferPointer,w2 ;Point to end of "Save xx" string dec w2,w2 ;Past return dec w2,w2 mov.b [w2],w0 ;Check for 'S' - Save Script to flash mov #'S',w1 cp w0,w1 bra z,SaveScript mov #'s',w1 cp w0,w1 bra z,SaveScript call ConvertString ;Convert string to binary value in w0 cp0 w0 ;Can't save to frame zero (RAM frame) bra z,SaveFrameError mov #MAX_FRAMES,w1 cpslt w1,w0 bra SaveOK SaveFrameError: mov #tbloffset(SaveError), w5 call TransmitString call SendPrompt ;Warn if not supported (outstring) bra ResetAndEnd ;Skip the rest of the processing chain SaveScript: clr w6 ;Script destination is in Page zero mov #tbloffset(UserScript), w2 ;Destination address ; mov #0x8000,w1 ; add w2,w1,w2 ;w2 now contains start address of destination mov #Script,w1 ;Source address - Script RAM area mov #32,w4 ;Copy 2K of script area to flash bra NextFlashRow SaveOK: ;************************************************************************* ;Use RTSP to save RAM frame into Program Memory Frame ;Frame number (1... Max) is in w0 ;Add 0x8000 + (Frame #-1) to get starting address ;Copy 4096 bytes (0x1000) by 64byte/32word blocks (flash memory row) ;Eight frames in block (TBLPAG=0) 0x8000-0xFFFF ;Eight more in (TBLPAG=1) 0x10000-0x1FFFF ;Can increase storage space by decreasing size to 512 vectors/frame ;************************************************************************* dec w0,w0 clr w6 btss w0,#3 ;Check if Frame # >7 bra SaveToPSV1 mov #1,w6 ;New Page to use bclr w0,#3 mov #0x1000,w1 mul.uu w1,w0,w2 ;w3/w2 contains offset bra SavePSVOK SaveToPSV1: mov #0x1000,w1 mul.uu w1,w0,w2 ;w3/w2 contains offset mov #0x8000,w1 add w2,w1,w2 ;w2 now contains start address of destination SavePSVOK: mov #Frame,w1 ;w1 now contains source address mov #64,w4 ;Run 64 times (64 bytes each time) NextFlashRow: call EraseFlashMemoryRow call LoadFlashMemoryLatches call WriteFlashMemory dec w4,w4 cp0 w4 bra nz,NextFlashRow call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain ;*** Erase a single row (32words / 64bytes) of flash memory prior to write ;*** Argument: start address of row in w2 EraseFlashMemoryRow: MOV #0x4041,W0 ;Multi-word write, write enabled MOV W0,NVMCON ;Init NVMCON SFR ; MOV #0,W0 MOV W6,NVMADRU ;Table Page to use MOV W2,NVMADR ;Low-16 bits of address DISI #5 ;Block interrupts with priority <7, next 5 instructions MOV #0x55,W0 MOV W0,NVMKEY ;Write the 0x55 key MOV #0xAA,W0 MOV W0,NVMKEY ;Write the 0xAA key BSET NVMCON,#WR ;Start the erase sequence NOP ;Insert two NOPs after the erase command NOP return ;*** Write 32 words to program memory latches ;*** Arguments: w2 contains the dest address, is incremented in this function ;*** w1 contains the source address, incremented in this function LoadFlashMemoryLatches: mov #32,w5 ; MOV #0x0,W0 ;First version, use Table Page 0 only MOV W6,TBLPAG NextFlashWord: TBLWTL [w1++],[W2++] ;Write the low word only into program latch dec w5,w5 cp0 w5 bra nz,NextFlashWord return ;*** Initiate write of the entire row to flash memory WriteFlashMemory: MOV #0x4001,W0 MOV W0,NVMCON ;Init NVMCON with PROGRAM instruction DISI #5 ;Block interrupts priority <7 for next 5 instructions MOV #0x55,W0 MOV W0,NVMKEY ;Write the 0x55 key MOV #0xAA,W0 MOV W0,NVMKEY ;Write the 0xAA key BSET NVMCON,#WR ;Start the erase sequence NOP ;Insert two NOPs after the erase command NOP return SizeXCommand: mov BufferPointer,w2 ;Point to end of "Save xx" string dec w2,w2 ;Past return dec w2,w2 call ConvertString ;Convert string to binary value in w0 mov w0,SizeX call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain SizeYCommand: mov BufferPointer,w2 ;Point to end of "Save xx" string dec w2,w2 ;Past return dec w2,w2 call ConvertString ;Convert string to binary value in w0 mov w0,SizeY call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain ResetCommand: bclr PORTD,#6 ;SCRIPT LED off mov #SRUN_IDLE,w0 ;Stop Running Script mov w0,SRunFlag mov #100,w0 ;Reset Size to 100% mov w0,SizeX mov w0,SizeY mov #0,w0 ;Reset Rotation angle and Position mov w0,Rotate mov w0,PosX mov w0,PosY clr Phase call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain RotateCommand: mov BufferPointer,w2 ;Point to end of "Rotate xx" string dec w2,w2 ;Past return dec w2,w2 call ConvertString ;Convert string to binary value in w0 mov w0,Rotate call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain PosXCommand: mov BufferPointer,w2 ;Point to end of "PosX xx" string dec w2,w2 ;Past return dec w2,w2 call ConvertString ;Convert string to binary value in w0 mov w0,PosX call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain PosYCommand: mov BufferPointer,w2 ;Point to end of "PosY xx" string dec w2,w2 ;Past return dec w2,w2 call ConvertString ;Convert string to binary value in w0 mov w0,PosY call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain PhaseCommand: mov BufferPointer,w2 ;Point to end of "Phase xx" string dec w2,w2 ;Past return dec w2,w2 call ConvertString ;Convert string to binary value in w0 mov w0,Phase call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain ScriptCommand: bset PORTD,#7 ;COMMS LED on mov #RX_STATE_SCRIPT,W0 ;Put into SCRIPT mode (header line received) mov w0,RxState mov #Script,w4 ;Reset Script frame pointer to beginning (start new frame) mov w4,RamFramePointer mov #0xFFFF,w0 ;To be safe, store an END-OF-FRAME marker mov w0,[w4++] ; at the first ram location (prevents runaway) mov w0,[w4] bra ResetAndEnd ;Skip the rest of the processing chain SRunCommand: mov BufferPointer,w2 ;Point to end of "SRUN xx" string dec w2,w2 ;Past return dec w2,w2 call ConvertString ;Convert string to binary value in w0 mov #0,w1 cp w0,w1 bra eq,Srun0 ;Script RAM area mov #1,w1 cp w0,w1 bra eq,Srun1 ;Script USER area (in flash) mov #-1,w1 cp w0,w1 bra eq,SRunDemo ;Script DEMO area bra ResetAndEnd ;Skip the rest of the processing chain call SendPrompt Srun1: mov #tbloffset(UserScript), w5 ;User script area in flash mov #0x8000,w1 ;Address for PSV offset (upper half of data RAM) add w5,w1,w5 ;Source Address (FLASH) mov #Script,w0 ;Destination address (RAM) mov #1024,w1 ;Number of WORDS to copy ScriptCopyLoop: mov [w5++],[w0++] ;Copy script from FLASH to RAM dec w1,w1 bra nz,ScriptCopyLoop ;Then fall through to run script from RAM Srun0: bset PORTD,#6 ;SCRIPT LED on mov #Script,w0 ;Reset script pointer to beginning or RAM mov w0,ScriptPtr mov #SRUN_RUN,w0 mov w0,SRunFlag call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain SRunDemo: bset PORTD,#6 ;SCRIPT LED on mov #tbloffset(StartupScript), w5 ;Demo script area in flash mov #0x8000,w1 ;Address for PSV offset (upper half of data RAM) add w5,w1,w5 mov w5,ScriptPtr mov #SRUN_DEMO,w0 mov w0,SRunFlag call SendOK call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain HelpCommand: mov #tbloffset(HelpString), w5 call TransmitString call SendPrompt bra ResetAndEnd ;Skip the rest of the processing chain ;*** Send a command prompt back to the user SendPrompt: clr TBLPAG mov #tbloffset(Prompt), w5 call TransmitString return ;*** Send an OK back to the user SendOK: clr TBLPAG mov #tbloffset(OKPrompt), w5 call TransmitString return ;*** Check Upload Mode *** ;*** If in mode 1, advance to mode 2 and ignore NAME line ;*** If in mode 2, get and store vector ;*** If blank line received, exit upload mode and return to IDLE mode UploadMode: mov RxState,w0 ;Check if in CSV mode 1 ... if so, ignore current line mov #RX_STATE_SCRIPT,w1 cpsne w0,w1 bra ScriptUpload mov #RX_STATE_CSV1,w1 cpsne w0,w1 bra GoToMode2 mov BufferPointer,w1 ;Check if empty line ... if so, go to IDLE again mov #LineBuffer,w0 inc w0,w0 ;Compensate for the RETURN in the buffer cpsne w0,w1 bra ReturnToIdleMode ;Empty line, terminate Upload mode call ConvertPoint retlw #1,w0 ReturnToIdleMode: ;Set scanner to run frame (if populated) from RAM memory mov #RX_STATE_IDLE,W0 ;Put into IDLE mov w0,RxState bclr PORTD,#7 ;COMMS LED off return GoToMode2: mov #RX_STATE_CSV2,W0 ;Put into CSV mode 2 (line 2 received, ready for vectors) mov w0,RxState return ScriptUpload: mov BufferPointer,w1 ;Check if empty line ... if so, go to IDLE again mov #LineBuffer,w0 inc w0,w0 ;Compensate for the RETURN in the buffer cpsne w0,w1 bra ReturnToIdleMode ;Empty line, terminate Upload mode (above) mov BufferPointer,w2 ;Point to end of data value dec w2,w2 ;Past return dec w2,w2 call ConvertString mov RamFramePointer,w4 ;Get current pointer mov w0,[w4++] mov w4,RamFramePointer ;Save pointer to next valid location mov #0xFFFF,w0 ;To be safe, store an END-OF-FRAME marker mov w0,[w4++] ; at the NEXT ram location mov w0,[w4] return ;*** Convert and store a single vector point into the RAM frame ConvertPoint: mov BufferPointer,w2 ;Point to end of Y data value dec w2,w2 ;Past return dec w2,w2 call ConvertString ;Convert string to binary value in w0 com w0,w0 ;Invert Y channel for scanner deck inc w0,w0 mov w0,w2 mov #0b1000000000000000,w1 and w0,w1,w2 ;Save sign bit in w2 MSB rrnc w0,w0 ;Rotate right to div/4 (make a 14-bit number) rrnc w0,w0 mov #0b0001111111111111,w1 and w0,w1,w0 ;Strip bits D13/D14 (PCAOM bits) ior w0,w2,w0 ;Add back sign bit mov w0,YValue dec w5,w2 ;Past comma, pointer into w2 call ConvertString ;Convert string to binary value in w0 mov #0b1000000000000000,w1 and w0,w1,w2 ;Save sign bit in w2 MSB rrnc w0,w0 ;Rotate right to div/4 (make a 14-bit number) rrnc w0,w0 mov #0b0001111111111111,w1 and w0,w1,w0 ;Strip bits D13/D14 (PCAOM bits) ior w0,w2,w0 ;Add back sign bit mov w0,XValue mov #LineBuffer,w2 ;Point to "visible" flag clr w0 mov.b [w2],w0 ;Get 'Visible' flag from CSV line mov #0x30,w1 cpsne w0,w1 bset XValue,#14 ;Set blanking bit D14 ON to indicate Blanking is active mov RamFramePointer,w4 ;Get current pointer mov XValue,w0 mov w0,[w4++] mov YValue,w0 mov w0,[w4++] mov w4,RamFramePointer ;Save pointer to next valid location mov #0xFFFF,w0 ;To be safe, store an END-OF-FRAME marker mov w0,[w4++] ; at the NEXT ram location mov w0,[w4] return ;Convert a String of ASCII digits into a binary number (16-bit, signed, 2's) ; Arguments: Pointer to end of string in W5 ; Returns: Converted binary signed number in W0 ; Last pointer in w5 ConvertString: mov w2,w5 clr A ;Sum (output) mov #1,w0 ;Digit Multiplier clr w6 ConvertNextDigit: mov.b [w5],w6 ;Get character from string mov #'-',w1 cpsne w1,w6 ;If a negative sign, change to neg and done bra MakeNegative mov #',',w1 cpsne w1,w6 ;If a comma, done bra DecimalDone mov #' ',w1 cpsne w1,w6 ;If a space, done bra DecimalDone mov #0x30,w1 sub W6,W1,w6 ;Subtract 0x30 to make ASCII into binary mov w0,w4 mac W4*W6,A mov #LineBuffer,w1 ;Start of string pointer cpsne w5,w1 bra DecimalDone ;Last digit done dec.b w5,w5 ;Move to next highest digit mov #10,w1 ;Multiplier*10 mov w1,Temp mul Temp mov w2,w0 bra ConvertNextDigit MakeNegative: mov ACCAL,w0 ;Convert to signed, 2's complement com W0,W0 inc W0,W0 dec w5,w5 ;Decrement pointer to skip comma return DecimalDone: mov ACCAL,w0 ;Return converted number in w0 return ;*** Send a string to he serial port *** ; Arguments: Pointer to an ASCII-Z string in w5 TransmitString: StringOut: clr w0 tblrdl.b [W5++],w4 ;Grab the character to send mov.b W4,W0 add #0,W0 bra NZ,SendChar return SendChar: btsc U1STA,#UTXBF ;Wait for buffer empty then skip bra SendChar mov w0,U1TXREG ;load the buffer to send the character goto StringOut ;*** Eventually, a high-speed comm channel for uploading patterns from a 'library' __T2Interrupt: retfie ;********************************************************************************** ;*** MAIN PROGRAM ENTRY POINT ;********************************************************************************** __reset: nop nop mov #__SP_init,W15 ;Setup Stack for Calls in program memory mov #__SPLIM_init, W0 ;Initialize the Stack Pointer Limit Register mov W0, SPLIM bset CORCON,#IF ;Select Integer mode for DSP Multiplier bset CORCON,#PSV ;Allow PSV access of frame data in program date clr PSVPAG ;Map lowest program memory page into Data RAM space ;Setup Ports mov #0xF808,W1 ;RD0-2 and RD8-10 outputs (DAC control lines), LEDs out mov W1,TRISD mov #0xFF0F,W1 ;Start with all control lines inactive (high), LEDs off mov W1,LATD mov #0x000C,W1 ;RB2-RB15=Output, RB0/1=ICD mov W1,TRISB mov #0x003F,W0 ;Setup all analog pins for digital mode mov W0,ADPCFG mov #0x0FFF,W0 ;RG12-RG15 outputs (Blanking and PCAOM) mov W0,TRISG mov #0xFFFF,W0 ;RC13,RC14 both inputs (pushbuttons) mov W0,TRISC mov #0xFFFF,W0 ;RF0,1,6,7,8 are generic inputs mov W0,TRISF mov #0x8000,W0 ;Start with Blanking Off (Beam ON) mov W0,LATG ;Setup serial port for comms with PC clr U1MODE clr U1STA bset U1MODE, #UARTEN ;Enable UART (implies reception) mov #(((FCY/BAUDRATE) / 16) - 1), w0 mov w0, U1BRG ;Initialize BRG bclr IFS0, #U1RXIF ;Clear the interrupt flag bset IEC0, #U1RXIE ;Enable Rx ISR bset U1STA, #UTXEN ;Enable Transmission ;Setup For ISR (for frame upload via serial port) mov #LineBuffer,w0 ;Preload pointer to incoming buffer area mov w0,BufferPointer mov #RX_STATE_IDLE,w0 ;Start in IDLE state mov w0,RxState mov #tbloffset(InitString),w5 ;Send the startup string to the serial port call TransmitString ;Setup Source for initial frame mov #1,w0 mov w0,FrameSource bset PORTD,#6 ;Script LED bset PORTD,#4 ;preprogrammed frame LED ;Setup Timer 1 for sampling delay (Sets Scanning Rate in Point-Per-Second) ;DEFAULT speed mov #0x8000,w1 mov w1,T1CON ;1:1, Int Clk, ON mov #1600,W1 ;10K pps Rate (Default) mov w1,PR1 ;Setup Timer2/3 as a 32-bit timer for script timing mov #0x8008,w0 mov w0,T2CON ;32-bit (T3:T2), 1:1, Int Clk, ON ;Setup default scaling mov #100,w0 ;Default scaling is 100% mov w0,SizeX mov w0,SizeY mov #0,w0 mov w0,Rotate ;Default rotation is zero degrees mov #0,w0 mov w0,PosX ;Default position offset is zero mov w0,PosY mov #SRUN_IDLE,w0 ;Start in Script IDLE mode mov w0,SRunFlag mov #Script,w0 ;Preload pointer to beginning of script RAM area mov w0,ScriptPtr mov #0xFFFF,w1 ;Preload a dummy script (end marker) in case called mov w1,[w0] ;End of script marker clr TimerFlag clr Phase ;No Phase shift to start ;*** Main Scanning Loop *** ; Initialize splash frames to start (V30 Logo) ; Display 'LaserSign' when ready then check for user selections ; Check pushbutton #1 - when pressed, cycle preprogrammed frames ; Check pushbutton #2 - when pressed, display frame in RAM ; LEDs: #1=flash memory frame, #2=RAM frame, #3=COMMS status, #4=NC Demo ;If required, start all frames (pre and ram) with RATE identifier in word #1 ;Run Demo Startup Script (from program memory, using PSV) mov #SRUN_DEMO,w0 mov w0,SRunFlag mov #tbloffset(StartupScript), w5 mov #0x8000,w1 ;Address for PSV offset (upper half of data RAM) add w5,w1,w5 mov w5,ScriptPtr clr PSVPAG ;Display User Graphics: Check for pushbutton, update w5/PSVPAG to display ; If RAM frame (0), use '#Frame'/PSV=0 to display ; Could also be changed via serial port command ('FrameSource' changes) ; Set FrameSource to 0xFFFF for 'LaserRadiationSign'. When changed, update pointer mov #0xFFFC,w0 ;0xFFFF signified initial graphic (Laser Sign) mov w0,FrameSource MainDisplayLoop: mov #SRUN_IDLE,w0 ;Check if any script selected (user, demo, or ram) mov SRunFlag,w1 cp w0,w1 bra z,SkipScriptInterpreter call ScriptInterpreter SkipScriptInterpreter: mov FrameSource,w1 ;Check which frame is selected mov #0,w0 cpsne w0,w1 bra LoadRamFrame ;If frame==0, RAM frame cpsgt w0,w1 bra LoadFlashFrame ;If frame>0, FLASH frame bra LoadSystemFrame ;If frame<0, SYSTEM frame ScanComplete: btsc PORTC,#PB_FLASH ;Check if the pushbutton is released and flag clr PBFlag ;PB released (high) btsc PORTC,#PB_FLASH ;Pushbutton RC13 - cycle flash frames (active low) bra DontCycleFrames btsc PBFlag,#1 bra DontCycleFrames bset PBFlag,#1 ;Flag that the pushbutton is down btsc FrameSource,#15 clr FrameSource ;If first time only (initial graphic, 0xFFFF) mov FrameSource,w0 inc w0,w0 ;Increment Frame Source mov #MAX_FRAMES,w1 inc w1,w1 cpslt w0,w1 mov #1,w0 ;Reset to frame #1 (first user flash frame) mov w0,FrameSource DontCycleFrames: btss PORTC,#PB_RAM ;Pushbutton RC14 - select RAM frame (active low) clr FrameSource bra MainDisplayLoop LoadFlashFrame: mov #1,w0 mov w0,PSVPAG ;All User flash frames in PSV page 1 mov FrameSource,w0 dec w0,w0 ;Frame 1 is now zero btss w0,#3 ;Check if Frame # >7 bra FrameInPSV1 bclr w0,#3 ;Convert Frame # to 0-7 mov #2,w1 mov w1,PSVPAG ;PSV page 2 for high-numbered frames FrameInPSV1: mov #0x1000,w1 mul.uu w1,w0,w2 ;w3/w2 contains address - 0x0000 is 0x8000 ; 0x1000 is 0x9000 (32K page ) mov #0x8000,w1 ;Address for PSV offset (upper half of data RAM) add w1,w2,w5 ;Calculate address in data RAM bclr PORTD,#5 ;FLASH LED frame bset PORTD,#4 call ScanLoop bra ScanComplete LoadRamFrame: clr PSVPAG mov #Frame,w5 ;Reassign as RAM frame pointer bset PORTD,#5 ;RAM LED frame bclr PORTD,#4 call ScanLoop bra ScanComplete LoadSystemFrame: ;If FRAME is negative, select a system frame (in low memory) mov #tbloffset(LaserRadiationSign), w5 ;Default frame (if invalid frame selected) mov FrameSource,w0 mov #0xFFFF,w2 cpsne w0,w2 mov #tbloffset(V30Logo), w5 mov #0xFFFE,w2 cpsne w0,w2 mov #tbloffset(DSPEngine), w5 mov #0xFFFD,w2 cpsne w0,w2 mov #tbloffset(MCsele), w5 mov #0xFFFC,w2 cpsne w0,w2 mov #tbloffset(LaserRadiationSign), w5 mov #0xFFFB,w2 cpsne w0,w2 mov #tbloffset(NiagaraCollegeLogo), w5 mov #0xFFFA,w2 cpsne w0,w2 mov #tbloffset(PerfectCircle), w5 mov #0xFFF9,w2 cpsne w0,w2 mov #tbloffset(Globe), w5 ;*** Add any more system frames here - Do NOT exceed 0x8000 program memory size (Page 0) *** mov #0x8000,w1 ;Address for PSV offset (upper half of data RAM) add w1,w5,w5 ;Calculate address in data RAM clr PSVPAG ;Laser Sign is in low program memory call ScanLoop bra ScanComplete LoadDefaultFrame: mov #tbloffset(LaserRadiationSign), w5 mov #0x8000,w1 ;Address for PSV offset (upper half of data RAM) add w1,w5,w5 ;Calculate address in data RAM clr PSVPAG ;Laser Sign is in low program memory call ScanLoop bra ScanComplete LoadScanLoop: mov #0x8000,w1 ;Address for PSV offset (upper half of data RAM) add w1,w5,w5 ;Calculate address in data RAM call ScanLoop return ;*** Main Scan Loop - Scan one entire image to the screen until END (0xFFFF) ;*** Arguments: w5 contains the pointer to the image in RAM space (or PSV) ScanLoop: mov w5,FrameStartPtr ;Start of Frame Ptr (for phase shift) ScanLoopContinues: mov [W5++],w4 ;Get X-Dac word mov w4,DacTempX mov [W5++],w4 ;Get Y-Dac word ; mov w4,DacTempY mov Phase,w0 ;Check is phase is offset, if so, get new Y cp0 w0 bra z,NoPhaseOffset mov w5,w6 ;Make a copy of the pointer inc2 w6,w6 ;Point to next Y value (w5 already inc'd one word) inc w0,w0 ;To compensate for first decrement PhaseShift: dec w0,w0 cp0 w0 bra z,NoPhaseOffset ;Done mov [w6++],w4 ;Get next Y value in the frame inc2 w6,w6 ;Align to next Y value after that ; dec w0,w0 ;decrement the phase counter ; bra z,NoPhaseOffset ;Done! exit mov #0xFFFF,w3 ;At end of Y values, cycle to beginning of pattern cp w3,w4 bra nz,PhaseShift ;Not done yet and not end of frame, loop again mov FrameStartPtr,w6 inc2 w6,w6 ;Align to Y value inc w0,w0 ;To compensate for the 'end' marker just found bra PhaseShift NoPhaseOffset: mov w4,DacTempY mov DacTempX,w4 mov #0xFFFF,w3 ;At end of one image, exit cpsne w3,w4 return btss DacTempX,#14 ;Set Blanking if required bclr LATG,#BLANKING btsc DacTempX,#14 bset LATG,#BLANKING mov DacTempX,w0 ;Convert stored values into real 14-bit signed numbers call ConvertNumber mov SizeX,w1 ;Multiplier for X value (value is in w0) call ReSize mov w0,DacTempX mov DacTempY,w0 call ConvertNumber mov SizeY,w1 ;Multiplier for Y value (value is in w0) call ReSize mov w0,DacTempY call RotateFrame ;Rotates DacTempX/DacTempY about the origin mov DacTempX,w0 ;Resize and Reposition each value mov PosX,w1 call PositionOffset mov W0,DacX mov DacTempY,w0 mov PosY,w1 call PositionOffset mov W0,DacY com DacY ;Invert both channels for display inc DacY com DacX inc DacX call UpdateDACs call TimerDelay bra ScanLoopContinues ;*** Convert Number function *** ; Converts a 14-bit signed integer into a true 16-bit signed integer, right justified ; by stripping-off bits D14/D13 (Blanking and PCAOM bits) ; Arguments: 14-bit number in w0 with D13/14 invalid ; Returns: 16-bit number in w0 (with MSB <14:13>=0) ConvertNumber: mov #0x9FFF,w1 and w0,w1,w0 btss w0,#15 ;Positive number? Leave D14/13=0 return mov #0x6000,w1 ;Set D14/13=1 for a negative number ior w0,w1,w0 return ;*** Rotate Frame function *** ; Rotates a frame 'Rotate' degrees by using sin/cos. Limits output values to 14-bit number ; for DAC use (0x1FFF max, 0xE000 min) ; Arguments: Number to Rotate in DacTempX, DacTempY ; Angle is in 'Rotate' (global variable) RotateFrame: push PSVPAG clr PSVPAG mov #tbloffset(SinTable), w6 mov #0x8000,w1 add w6,w1,w6 ;Calculate address using PSV mov Rotate,w1 add w6,w1,w6 ;W6 contains offset for 'Rotate' degrees add w6,w1,w6 ;words - add two increments mov [w6],w8 mov #tbloffset(CosTable), w6 mov #0x8000,w1 add w6,w1,w6 mov Rotate,w1 add w6,w1,w6 ;W6 contains offset for 'Rotate' degrees add w6,w1,w6 mov [W6],w9 pop PSVPAG mov DacTempX,w2 mul.ss w9,w2,w0 ;W1:W0 contains X*cos(Theta) mov DacTempY,w2 mul.ss w8,w2,w2 ;W3:W2 contains Y*sin(Theta) sub W1,W3,W11 subb W0,W2,W10 ;W11:W10 contains X*cos(Theta)-Y*sin(Theta) mov #0x8000,w4 repeat #17 div.sd w10,w4 ;Quotient will be in W0 mov w0,w12 mov DacTempY,w2 mul.ss w9,w2,w0 ;W1:W0 contains Y*cos(Theta) mov DacTempX,w2 mul.ss w8,w2,w2 ;W3:W2 contains X*sin(Theta) add W2,W0,W10 addc W3,W1,W11 ;W11:W10 contains X*sin(Theta)+Y*cos(Theta) mov #0x8000,w4 repeat #17 div.sd w10,w4 ;Quotient will be in W0 mov w0,w11 mov w11,DacTempY mov w12,DacTempX return ;*** Resize function *** ; Limits the final number to 14-bits (0x1FFF/0xE000) ; Arguments: Number to resize is in w0 ; Multiplier (in units of percent) is in w1, can be negative to invert ; Returns: Resized Number in w0 ReSize: mul.ss w0,w1,w6 ;Result is in w7:w6 mov #100,w4 ;Divide by 100 to scale number repeat #17 div.sd w6,w4 ;Quotient will be in w0, remainder in w1 ; call LimitXY return ;*** Limit XY *** ; Limits an X or Y value (in w0) for the DAC (14-bit) LimitXY: btsc w0,#15 ;Check if a negative number bra LimitCheckNegative mov #0x1FFF,w1 cp w0,w1 bra ge,LimitSaturatePositive return LimitSaturatePositive: mov #0x1FFF,w0 ;Largest Positive number bset LATG,#BLANKING ;BLANK on Overflow return LimitCheckNegative: mov #0xE000,w1 cp w0,w1 bra le,LimitSaturateNegative return LimitSaturateNegative: mov #0xE000,w0 ;Largest Negative number bset LATG,#BLANKING ;BLANK on Overflow return ;*** Position function *** ; Limits the final number to 14-bits (0x1FFF/0xE000) ; Arguments: Number to add position offset is in w0 ; Position offset is in w1 ; Returns: Number in w0 PositionOffset: add w0,w1,w0 ;Add offset directly call LimitXY return ;*** Update DAC function *** ; Updates both DACs simultaneously using double-buffering ; Arguments: DacX, DacY (14-bit values in signed format, left justified, Two LSB bits are NA) ; Returns: None UpdateDACs: mov DacX,W0 call ConvertNumberForDac mov W0,LATB ;Output Data to DAC bclr LATD,#DACX_CS ;Latch data to internal latch bclr LATD,#DACX_WR nop nop bset LATD,#DACX_WR bset LATD,#DACX_CS mov DacY,W0 call ConvertNumberForDac mov W0,LATB ;Output Data to DAC bclr LATD,#DACY_CS ;Latch data to internal latch bclr LATD,#DACY_WR nop nop bset LATD,#DACY_WR bset LATD,#DACY_CS bclr LATD,#DACX_LDAC ;Update both DACs simultaneously bclr LATD,#DACY_LDAC nop bset LATD,#DACX_LDAC bset LATD,#DACY_LDAC return ; Convert a 14-bit number to a left-justified number with <0:1>=0 ; suitable for the DACs ConvertNumberForDac: mov W0,W2 ;Make a copy mov #0x8000,W1 ;Mask off sign (upper) bit and W0,W1,W0 ;W0 now contains the sign bit only mov #0x1FFF,W1 ;Mask off the lower 13 bits and W2,W1,W2 ;W2 now contains the lower 13 bits rlnc w2,w2 ;Shift data (mantissa only) to upper 14 bits for DAC (RB2-RB15) rlnc w2,w2 ior W2,W0,W0 ;Add the sign bit back in mov #0xFFFC,W1 ;Mask off two lower bits - clear to zeroes and W0,W1,W0 return ;*** Delay Function *** ; Uses Timer 1 to effect a delay ; Wait for timer to expire, start next delay TimerDelay: btss IFS0,#T1IF ;Wait for Timer to expire bra TimerDelay bclr IFS0,#T1IF ;Clear 'done' flag return ;*** Script Interpreter *** ; Called once after each complete pattern is drawn, grab the next word from ; the script memory, interpret, and execute ; Only return during a DELAY or WAIT is in effect, otherwise 20 instructions take one sec! ; Upper six bits are command, lower ten are argument (signed, +511/-512 range) ; 0xFC=Reset (end of script) 0x04=Select Frame ScriptInterpreter: call GetNextInstruction ;Instructions return here with a return code in w0 cp0 w0 ;Check return code bra z,ScriptInterpreter ;RC=1 means allow display, 0 means next script instruction return GetNextInstruction: mov ScriptPtr,w0 mov [w0++],w2 mov w0,ScriptPtr mov #0xFC00,w1 ;Extract upper SIX bits only (command) and w2,w1,w0 ;Command is in w0 mov #0x03FF,w1 ;Extract lower TEN bits only (argument) and w2,w1,w2 ;Argument is in w2 btss w2,#9 bra ArgumentPositive mov #0xFC00,w1 ;Pad upper six bits as ones (negative) ior w2,w1,w2 ;Actual Interpreter switch. OpCode in w0, Argument (signed) in w2 ArgumentPositive: mov #0xFC00,w1 ;Check if RESET command cp w0,w1 bra z,ResetScript mov #0xF800,w1 ;HALT script cp w0,w1 bra z,HaltScript mov #0x0400,w1 ;Select Frame cp w0,w1 bra z,SelectFrame mov #0x0800,w1 ;Load SizeX cp w0,w1 bra z,LoadSizeX mov #0x0C00,w1 ;Inc/Dec SizeX cp w0,w1 bra z,IncSizeX mov #0x1000,w1 ;Load SizeY cp w0,w1 bra z,LoadSizeY mov #0x1400,w1 ;Inc/Dec SizeY cp w0,w1 bra z,IncSizeY mov #0x1800,w1 ;Load PosX cp w0,w1 bra z,LoadPosX mov #0x1C00,w1 ;Inc/Dec PosX cp w0,w1 bra z,IncPosX mov #0x2000,w1 ;Load PosY cp w0,w1 bra z,LoadPosY mov #0x2400,w1 ;Inc/Dec PosY cp w0,w1 bra z,IncPosY mov #0x2800,w1 ;Load Rotation angle (from argument) cp w0,w1 bra z,LoadRotate mov #0x2C00,w1 ;Inc/Dec Rotate angle cp w0,w1 bra z,IncRotate mov #0x3000,w1 ;Delay for (arg) ms cp w0,w1 bra z,TimeDelay mov #0x3400,w1 ;Reset variables to original cp w0,w1 bra z,ResetVars mov #0x3800,w1 ;Wait For External Input cp w0,w1 bra z,WaitForInput mov #0x4000,w1 ;Load Register A cp w0,w1 bra z,LoadRegisterA mov #0x4400,w1 ;Load Register B cp w0,w1 bra z,LoadRegisterB mov #0x4800,w1 ;Load Register C cp w0,w1 bra z,LoadRegisterC mov #0x4C00,w1 ;Load Register D cp w0,w1 bra z,LoadRegisterD mov #0x5000,w1 ;Inc/Dec Register A cp w0,w1 bra z,IncRegisterA mov #0x5400,w1 ;Inc/Dec Register B cp w0,w1 bra z,IncRegisterB mov #0x5800,w1 ;Inc/Dec Register C cp w0,w1 bra z,IncRegisterC mov #0x5C00,w1 ;Inc/Dec Register D cp w0,w1 bra z,IncRegisterD mov #0x6000,w1 ;Branch if Register A is Zero cp w0,w1 bra z,BrzRegisterA mov #0x6400,w1 ;Branch if Register B is Zero cp w0,w1 bra z,BrzRegisterB mov #0x6800,w1 ;Branch if Register C is Zero cp w0,w1 bra z,BrzRegisterC mov #0x6C00,w1 ;Branch if Register D is Zero cp w0,w1 bra z,BrzRegisterD mov #0x7000,w1 ;Branch if Register A is NOT Zero cp w0,w1 bra z,BrnzRegisterA mov #0x7400,w1 ;Branch if Register B is NOT Zero cp w0,w1 bra z,BrnzRegisterB mov #0x7800,w1 ;Branch if Register C is NOT Zero cp w0,w1 bra z,BrnzRegisterC mov #0x7C00,w1 ;Branch if Register D is NOT Zero cp w0,w1 bra z,BrnzRegisterD ;Ignore 0x8000 = Label, skip like a NOP mov #0x8400,w1 ;Goto (label=arg) cp w0,w1 bra z,GotoLabel mov #0x8800,w1 ;Load Phase cp w0,w1 bra z,LoadPhase mov #0x8C00,w1 ;Inc/Dec Phase cp w0,w1 bra z,IncPhase mov #0x9000,w1 ;Display One Frame cp w0,w1 bra z,DisplayOneFrame retlw #0,w0 ;Invalid command ;********************************* ;*** Script Command Handlers *** ;********************************* ;*** Reset script to beginning *** ResetScript: mov #SRUN_DEMO,w3 ;Check if running from flash (Startup Script) mov SRunFlag,w1 cp w3,w1 bra z,ResetToDemo mov #Script,w0 ;Default - Run Script from RAM mov w0,ScriptPtr retlw #0,w0 ResetToDemo: mov #tbloffset(StartupScript),w0 ;In Demo Flash Memory mov #0x8000,w1 add w0,w1,w0 mov w0,ScriptPtr clr PSVPAG retlw #0,w0 ;*** HALT command *** HaltScript: mov #SRUN_IDLE,w0 ;Set Script IDLE mode mov w0,SRunFlag retlw #1,w0 ;Allow to exit command interpreter ;*** Select Frame Number *** SelectFrame: mov w2,FrameSource retlw #0,w0 ;*** Load SizeX *** LoadSizeX: mov w2,SizeX retlw #0,w0 ;*** Inc/Dec SizeX *** IncSizeX: mov SizeX,w0 add w0,w2,w0 mov w0,SizeX retlw #0,w0 ;*** Load SizeY *** LoadSizeY: mov w2,SizeY retlw #0,w0 ;*** Inc/Dec SizeY *** IncSizeY: mov SizeY,w0 add w0,w2,w0 mov w0,SizeY retlw #0,w0 ;*** Load PosX *** LoadPosX: mov #100,w0 ;Multipy argument*100 mov w0,TempMul mov w2,w0 mul TempMul mov w2,PosX retlw #0,w0 ;*** Inc/Dec PosX *** IncPosX: mov PosX,w0 add w0,w2,w0 mov w0,PosX retlw #0,w0 ;*** Load PosY *** LoadPosY: mov #100,w0 ;Multipy argument*100 mov w0,TempMul mov w2,w0 mul TempMul mov w2,PosY retlw #0,w0 ;*** Inc/Dec PosY *** IncPosY: mov PosY,w0 add w0,w2,w0 mov w0,PosY retlw #0,w0 ;*** Load Rotation angle from argument *** LoadRotate: mov w2,Rotate retlw #0,w0 ;*** Add/Subtract an offset to the current ROTATE value *** IncRotate: mov Rotate,w0 add w0,w2,w0 mov w0,Rotate mov #360,w1 ;Ensure it is <360 cp w0,w1 bra ge,ResetRotate btss w0,#15 ;Ensure it is positive retlw #0,w0 ResetRotate: clr Rotate retlw #0,w0 ;*** Time Delay using timer T2 *** ;*** This code assumes timer 3/2 are used as a single 32-bit timer, clocked at 16MHz *** TimeDelay: btsc TimerFlag,#RUN ;Check if timer already running bra TimerRunning mov #0x8008,w0 mov w0,T2CON ;32-bit (T3:T2), 1:1, Int Clk, ON mov #16000,w0 ;16000 = one ms delay, so mult by argument mov w0,TempMul mov w2,w0 ;w0 = argument now mul TempMul mov w3,PR3 ;Load Timers 3 (MSW) /2 (LSW) mov w2,PR2 clr TMR2 clr TMR3 bclr IFS0,#T3IF ;Clear 'done' flag bset TimerFlag,#RUN bra TimerStillRunning TimerRunning: btss IFS0,#T3IF ;Wait for Timer to expire bra TimerStillRunning ;Still Running, just do nothing clr TimerFlag ;Flag the timer as stopped (complete) retlw #0,w0 ;Timer is stopped, get next script instruction TimerStillRunning: dec2 ScriptPtr ;Ensures it reads the same command next time around retlw #1,w0 ;Timer is running, allow display ;*** Wait for External Input *** WaitForInput: mov #1,w0 cp w0,w2 bra z,CheckInput1 mov #2,w0 cp w0,w2 bra z,CheckInput2 mov #3,w0 cp w0,w2 bra z,CheckInput3 mov #4,w0 cp w0,w2 bra z,CheckInput4 ;ERROR - invalid input retlw #1,w0 CheckInput1: btsc PORTF,#0 ;Check if RF0 is high retlw #0,w0 dec2 ScriptPtr ;Stay on the same script line until input high retlw #1,w0 CheckInput2: btsc PORTF,#1 ;Check if RF1 is high retlw #0,w0 dec2 ScriptPtr ;Stay on the same script line until input high retlw #1,w0 CheckInput3: btsc PORTF,#6 ;Check if RF6 is high retlw #0,w0 dec2 ScriptPtr ;Stay on the same script line until input high retlw #1,w0 CheckInput4: btsc PORTF,#7 ;Check if RF7 is high retlw #0,w0 dec2 ScriptPtr ;Stay on the same script line until input high retlw #1,w0 ;*** Load Register A *** LoadRegisterA: mov w2,RegisterA retlw #0,w0 ;*** Load Register B *** LoadRegisterB: mov w2,RegisterB retlw #0,w0 ;*** Load Register C *** LoadRegisterC: mov w2,RegisterC retlw #0,w0 ;*** Load Register D *** LoadRegisterD: mov w2,RegisterD retlw #0,w0 ;*** Inc/Dec Register A *** IncRegisterA: mov RegisterA,w0 add w0,w2,w0 mov w0,RegisterA retlw #0,w0 ;*** Inc/Dec Register B *** IncRegisterB: mov RegisterB,w0 add w0,w2,w0 mov w0,RegisterB retlw #0,w0 ;*** Inc/Dec Register C *** IncRegisterC: mov RegisterC,w0 add w0,w2,w0 mov w0,RegisterC retlw #0,w0 ;*** Inc/Dec Register D *** IncRegisterD: mov RegisterD,w0 add w0,w2,w0 mov w0,RegisterD retlw #0,w0 ;*** Branch (GOTO) is Register A is zero *** BrzRegisterA: cp0 RegisterA bra z,GotoLabel ;Argument in w2 is label retlw #0,w0 ;*** Branch (GOTO) is Register B is zero *** BrzRegisterB: cp0 RegisterB bra z,GotoLabel ;Argument in w2 is label retlw #0,w0 ;*** Branch (GOTO) is Register C is zero *** BrzRegisterC: cp0 RegisterC bra z,GotoLabel ;Argument in w2 is label retlw #0,w0 ;*** Branch (GOTO) is Register D is zero *** BrzRegisterD: cp0 RegisterD bra z,GotoLabel ;Argument in w2 is label retlw #0,w0 ;*** Branch (GOTO) is Register A is NOT zero *** BrnzRegisterA: cp0 RegisterA bra nz,GotoLabel ;Argument in w2 is label retlw #0,w0 ;*** Branch (GOTO) is Register B is NOT zero *** BrnzRegisterB: cp0 RegisterB bra nz,GotoLabel ;Argument in w2 is label retlw #0,w0 ;*** Branch (GOTO) is Register C is NOT zero *** BrnzRegisterC: cp0 RegisterC bra nz,GotoLabel ;Argument in w2 is label retlw #0,w0 ;*** Branch (GOTO) is Register D is NOT zero *** BrnzRegisterD: cp0 RegisterD bra nz,GotoLabel ;Argument in w2 is label retlw #0,w0 ;*** Goto Label *** GotoLabel: mov #0x8000,w0 ;"Label" OpCode add w0,w2,w2 ;w2 contains target label (with Op Code) mov #Script,w0 ;Assume Script running from RAM mov #SRUN_DEMO,w3 ;Check if running from flash (Startup Script) mov SRunFlag,w1 cp w3,w1 bra nz,NextGotoSearch mov #tbloffset(StartupScript), w0 ;In Flash Memory mov #0x8000,w1 add w0,w1,w0 clr PSVPAG NextGotoSearch: ;w0 is a pointer to script start mov [w0++],w1 cp w1,w2 bra z,FoundLabel mov #0xFFFF,w3 cp w1,w3 bra z,EndOfScriptNoLabel goto NextGotoSearch FoundLabel: mov w0,ScriptPtr ;Reset script pointer to next line after found label retlw #0,w0 EndOfScriptNoLabel: mov #tbloffset(GotoError),w5 ;Print error to console call TransmitString retlw #0,w0 ;*** Reset vars to original (rotate, size, position) *** ResetVars: mov #100,w0 ;Reset Size to 100% mov w0,SizeX mov w0,SizeY mov #0,w0 ;Reset Rotation angle and Position mov w0,Rotate mov w0,PosX mov w0,PosY clr Phase retlw #0,w0 ;*** Load Phase *** LoadPhase: mov w2,Phase retlw #0,w0 ;*** Inc/Dec Phase *** IncPhase: mov Phase,w0 add w0,w2,w0 mov w0,Phase retlw #0,w0 ;*** Display One Frame function *** DisplayOneFrame: retlw #1,w0 ;**************************************************************************** ;*** Read-Only data segment (allows PSV) *** ;*** Used for static (predefined) graphic frames stored in program memory *** ;**************************************************************************** .section .const, "r" ;*** Text Strings used in the program *** .align 1 InitString: .ascii "\n\rV-30 Scan Engine, Version 1.50\n\rProfessor M.Csele\n\rNiagara College, Canada\n\r2007/10\n\r\n\r" HelpString: .ascii "Commands: VECTOR (CSV upload to RAM frame)\n\r" .ascii " SPEED xx (xx in pps, 4000, 6000, 8000, 10000, 12000)\n\r" .ascii " RUN / FRAME xx (xx=0 for RAM frame, 1...16 for flash, -x for system)\n\r" .ascii " SAVE xx (1...16 to save RAM frame to flash, S=Save user script)\n\r" .ascii " SIZEX xx / SIZEY xx (Image scale in percent)\n\r" .ascii " RESET (Reset scaling values to default, halt script)\n\r" .ascii " ROTATE xx (xx in degrees, 0...359)\n\r" .ascii " POSX xx / POSY xx (Image offset, -32K to +32K)\n\r" .ascii " PHASE xx (Y shift, positive only)\n\r" .ascii " SCRIPT (SCRIPT upload to RAM)\n\r" .ascii " SRUN xx (Script RUN, xx=-1 for DEMO, 0 for RAM, 1 for USER)\n\r" .asciz "\n\r" Prompt: .asciz "\n\rV30>" OKPrompt: .asciz "\n\rOK" SpeedError: .asciz "\n\rERROR - Unsupported Speed, using Default" RunError: .asciz "\n\rERROR - Frame Number Not In System, using Default" SaveError: .asciz "\n\rERROR - Bad Frame Number (zero, or exceeds maximum)" InvalidCommandError: .asciz "\n\rERROR - Unsupported Command" GotoError: .asciz "\n\rSCRIPT ERROR - Goto Label Not Found" ;*** Command Interpreter List *** ;*** Format ... <0xFF ending> CommandList: .asciz "RUN" .byte CMD_RUN .asciz "SPEED" .byte CMD_SPEED .asciz "VECTOR" .byte CMD_VECTOR .asciz "SAVE" .byte CMD_SAVE .asciz "HELP" .byte CMD_HELP .asciz "SIZEX" .byte CMD_SIZEX .asciz "SIZEY" .byte CMD_SIZEY .asciz "RESET" .byte CMD_RESET .asciz "ROTATE" .byte CMD_ROTATE .asciz "POSX" .byte CMD_POSX .asciz "POSY" .byte CMD_POSY .asciz "SCRIPT" .byte CMD_SCRIPT .asciz "PHASE" .byte CMD_PHASE .asciz "SRUN" .byte CMD_SRUN .asciz "FRAME" .byte CMD_RUN .byte 0xFF ;Do Not Remove this End Code .align 2 ;*** SINE and COSINE conversion tables for rotations ;*** One degree increments from zero to 359 degrees ;*** Returns a signed 16-bit value (15+sign) - Max=0x7FFF SinTable: .hword 0x0000 ;Sin 0 degrees .hword 0x023B .hword 0x0477 .hword 0x06B2 .hword 0x08ED .hword 0x0B27 .hword 0x0D61 .hword 0x0F99 .hword 0x11D0 .hword 0x1405 .hword 0x1639 .hword 0x186C .hword 0x1A9C .hword 0x1CCA .hword 0x1EF7 .hword 0x2120 .hword 0x2347 .hword 0x256C .hword 0x278D .hword 0x29AB .hword 0x2BC6 .hword 0x2DDE .hword 0x2FF2 .hword 0x3203 .hword 0x340F .hword 0x3617 .hword 0x381C .hword 0x3A1B .hword 0x3C17 .hword 0x3E0D .hword 0x3FFF .hword 0x41EC .hword 0x43D3 .hword 0x45B6 .hword 0x4793 .hword 0x496A .hword 0x4B3B .hword 0x4D07 .hword 0x4ECD .hword 0x508C .hword 0x5246 .hword 0x53F9 .hword 0x55A5 .hword 0x574B .hword 0x58E9 .hword 0x5A81 .hword 0x5C12 .hword 0x5D9C .hword 0x5F1E .hword 0x6099 .hword 0x620C .hword 0x6378 .hword 0x64DC .hword 0x6638 .hword 0x678D .hword 0x68D9 .hword 0x6A1D .hword 0x6B58 .hword 0x6C8B .hword 0x6DB6 .hword 0x6ED9 .hword 0x6FF2 .hword 0x7103 .hword 0x720B .hword 0x730A .hword 0x7400 .hword 0x74EE .hword 0x75D2 .hword 0x76AD .hword 0x777E .hword 0x7846 .hword 0x7905 .hword 0x79BB .hword 0x7A67 .hword 0x7B09 .hword 0x7BA2 .hword 0x7C31 .hword 0x7CB7 .hword 0x7D32 .hword 0x7DA4 .hword 0x7E0D .hword 0x7E6B .hword 0x7EC0 .hword 0x7F0A .hword 0x7F4B .hword 0x7F82 .hword 0x7FAF .hword 0x7FD2 .hword 0x7FEB .hword 0x7FFA .hword 0x7FFF .hword 0x7FFA .hword 0x7FEB .hword 0x7FD2 .hword 0x7FAF .hword 0x7F82 .hword 0x7F4B .hword 0x7F0A .hword 0x7EC0 .hword 0x7E6B .hword 0x7E0D .hword 0x7DA4 .hword 0x7D32 .hword 0x7CB7 .hword 0x7C31 .hword 0x7BA2 .hword 0x7B09 .hword 0x7A67 .hword 0x79BB .hword 0x7905 .hword 0x7846 .hword 0x777E .hword 0x76AD .hword 0x75D2 .hword 0x74EE .hword 0x7400 .hword 0x730A .hword 0x720B .hword 0x7103 .hword 0x6FF2 .hword 0x6ED9 .hword 0x6DB6 .hword 0x6C8B .hword 0x6B58 .hword 0x6A1D .hword 0x68D9 .hword 0x678D .hword 0x6638 .hword 0x64DC .hword 0x6378 .hword 0x620C .hword 0x6099 .hword 0x5F1E .hword 0x5D9C .hword 0x5C12 .hword 0x5A81 .hword 0x58E9 .hword 0x574B .hword 0x55A5 .hword 0x53F9 .hword 0x5246 .hword 0x508C .hword 0x4ECD .hword 0x4D07 .hword 0x4B3B .hword 0x496A .hword 0x4793 .hword 0x45B6 .hword 0x43D3 .hword 0x41EC .hword 0x3FFF .hword 0x3E0D .hword 0x3C17 .hword 0x3A1B .hword 0x381C .hword 0x3617 .hword 0x340F .hword 0x3203 .hword 0x2FF2 .hword 0x2DDE .hword 0x2BC6 .hword 0x29AB .hword 0x278D .hword 0x256C .hword 0x2347 .hword 0x2120 .hword 0x1EF7 .hword 0x1CCA .hword 0x1A9C .hword 0x186C .hword 0x1639 .hword 0x1405 .hword 0x11D0 .hword 0x0F99 .hword 0x0D61 .hword 0x0B27 .hword 0x08ED .hword 0x06B2 .hword 0x0477 .hword 0x023B .hword 0x0000 .hword 0xFDC5 .hword 0xFB89 .hword 0xF94E .hword 0xF713 .hword 0xF4D9 .hword 0xF29F .hword 0xF067 .hword 0xEE30 .hword 0xEBFB .hword 0xE9C7 .hword 0xE794 .hword 0xE564 .hword 0xE336 .hword 0xE109 .hword 0xDEE0 .hword 0xDCB9 .hword 0xDA94 .hword 0xD873 .hword 0xD655 .hword 0xD43A .hword 0xD222 .hword 0xD00E .hword 0xCDFD .hword 0xCBF1 .hword 0xC9E9 .hword 0xC7E4 .hword 0xC5E5 .hword 0xC3E9 .hword 0xC1F3 .hword 0xC001 .hword 0xBE14 .hword 0xBC2D .hword 0xBA4A .hword 0xB86D .hword 0xB696 .hword 0xB4C5 .hword 0xB2F9 .hword 0xB133 .hword 0xAF74 .hword 0xADBA .hword 0xAC07 .hword 0xAA5B .hword 0xA8B5 .hword 0xA717 .hword 0xA57F .hword 0xA3EE .hword 0xA264 .hword 0xA0E2 .hword 0x9F67 .hword 0x9DF4 .hword 0x9C88 .hword 0x9B24 .hword 0x99C8 .hword 0x9873 .hword 0x9727 .hword 0x95E3 .hword 0x94A8 .hword 0x9375 .hword 0x924A .hword 0x9127 .hword 0x900E .hword 0x8EFD .hword 0x8DF5 .hword 0x8CF6 .hword 0x8C00 .hword 0x8B12 .hword 0x8A2E .hword 0x8953 .hword 0x8882 .hword 0x87BA .hword 0x86FB .hword 0x8645 .hword 0x8599 .hword 0x84F7 .hword 0x845E .hword 0x83CF .hword 0x8349 .hword 0x82CE .hword 0x825C .hword 0x81F3 .hword 0x8195 .hword 0x8140 .hword 0x80F6 .hword 0x80B5 .hword 0x807E .hword 0x8051 .hword 0x802E .hword 0x8015 .hword 0x8006 .hword 0x8001 .hword 0x8006 .hword 0x8015 .hword 0x802E .hword 0x8051 .hword 0x807E .hword 0x80B5 .hword 0x80F6 .hword 0x8140 .hword 0x8195 .hword 0x81F3 .hword 0x825C .hword 0x82CE .hword 0x8349 .hword 0x83CF .hword 0x845E .hword 0x84F7 .hword 0x8599 .hword 0x8645 .hword 0x86FB .hword 0x87BA .hword 0x8882 .hword 0x8953 .hword 0x8A2E .hword 0x8B12 .hword 0x8C00 .hword 0x8CF6 .hword 0x8DF5 .hword 0x8EFD .hword 0x900E .hword 0x9127 .hword 0x924A .hword 0x9375 .hword 0x94A8 .hword 0x95E3 .hword 0x9727 .hword 0x9873 .hword 0x99C8 .hword 0x9B24 .hword 0x9C88 .hword 0x9DF4 .hword 0x9F67 .hword 0xA0E2 .hword 0xA264 .hword 0xA3EE .hword 0xA57F .hword 0xA717 .hword 0xA8B5 .hword 0xAA5B .hword 0xAC07 .hword 0xADBA .hword 0xAF74 .hword 0xB133 .hword 0xB2F9 .hword 0xB4C5 .hword 0xB696 .hword 0xB86D .hword 0xBA4A .hword 0xBC2D .hword 0xBE14 .hword 0xC001 .hword 0xC1F3 .hword 0xC3E9 .hword 0xC5E5 .hword 0xC7E4 .hword 0xC9E9 .hword 0xCBF1 .hword 0xCDFD .hword 0xD00E .hword 0xD222 .hword 0xD43A .hword 0xD655 .hword 0xD873 .hword 0xDA94 .hword 0xDCB9 .hword 0xDEE0 .hword 0xE109 .hword 0xE336 .hword 0xE564 .hword 0xE794 .hword 0xE9C7 .hword 0xEBFB .hword 0xEE30 .hword 0xF067 .hword 0xF29F .hword 0xF4D9 .hword 0xF713 .hword 0xF94E .hword 0xFB89 .hword 0xFDC5 CosTable: .hword 0x7FFF .hword 0x7FFA .hword 0x7FEB .hword 0x7FD2 .hword 0x7FAF .hword 0x7F82 .hword 0x7F4B .hword 0x7F0A .hword 0x7EC0 .hword 0x7E6B .hword 0x7E0D .hword 0x7DA4 .hword 0x7D32 .hword 0x7CB7 .hword 0x7C31 .hword 0x7BA2 .hword 0x7B09 .hword 0x7A67 .hword 0x79BB .hword 0x7905 .hword 0x7846 .hword 0x777E .hword 0x76AD .hword 0x75D2 .hword 0x74EE .hword 0x7400 .hword 0x730A .hword 0x720B .hword 0x7103 .hword 0x6FF2 .hword 0x6ED9 .hword 0x6DB6 .hword 0x6C8B .hword 0x6B58 .hword 0x6A1D .hword 0x68D9 .hword 0x678D .hword 0x6638 .hword 0x64DC .hword 0x6378 .hword 0x620C .hword 0x6099 .hword 0x5F1E .hword 0x5D9C .hword 0x5C12 .hword 0x5A81 .hword 0x58E9 .hword 0x574B .hword 0x55A5 .hword 0x53F9 .hword 0x5246 .hword 0x508C .hword 0x4ECD .hword 0x4D07 .hword 0x4B3B .hword 0x496A .hword 0x4793 .hword 0x45B6 .hword 0x43D3 .hword 0x41EC .hword 0x3FFF .hword 0x3E0D .hword 0x3C17 .hword 0x3A1B .hword 0x381C .hword 0x3617 .hword 0x340F .hword 0x3203 .hword 0x2FF2 .hword 0x2DDE .hword 0x2BC6 .hword 0x29AB .hword 0x278D .hword 0x256C .hword 0x2347 .hword 0x2120 .hword 0x1EF7 .hword 0x1CCA .hword 0x1A9C .hword 0x186C .hword 0x1639 .hword 0x1405 .hword 0x11D0 .hword 0x0F99 .hword 0x0D61 .hword 0x0B27 .hword 0x08ED .hword 0x06B2 .hword 0x0477 .hword 0x023B .hword 0x0000 .hword 0xFDC5 .hword 0xFB89 .hword 0xF94E .hword 0xF713 .hword 0xF4D9 .hword 0xF29F .hword 0xF067 .hword 0xEE30 .hword 0xEBFB .hword 0xE9C7 .hword 0xE794 .hword 0xE564 .hword 0xE336 .hword 0xE109 .hword 0xDEE0 .hword 0xDCB9 .hword 0xDA94 .hword 0xD873 .hword 0xD655 .hword 0xD43A .hword 0xD222 .hword 0xD00E .hword 0xCDFD .hword 0xCBF1 .hword 0xC9E9 .hword 0xC7E4 .hword 0xC5E5 .hword 0xC3E9 .hword 0xC1F3 .hword 0xC001 .hword 0xBE14 .hword 0xBC2D .hword 0xBA4A .hword 0xB86D .hword 0xB696 .hword 0xB4C5 .hword 0xB2F9 .hword 0xB133 .hword 0xAF74 .hword 0xADBA .hword 0xAC07 .hword 0xAA5B .hword 0xA8B5 .hword 0xA717 .hword 0xA57F .hword 0xA3EE .hword 0xA264 .hword 0xA0E2 .hword 0x9F67 .hword 0x9DF4 .hword 0x9C88 .hword 0x9B24 .hword 0x99C8 .hword 0x9873 .hword 0x9727 .hword 0x95E3 .hword 0x94A8 .hword 0x9375 .hword 0x924A .hword 0x9127 .hword 0x900E .hword 0x8EFD .hword 0x8DF5 .hword 0x8CF6 .hword 0x8C00 .hword 0x8B12 .hword 0x8A2E .hword 0x8953 .hword 0x8882 .hword 0x87BA .hword 0x86FB .hword 0x8645 .hword 0x8599 .hword 0x84F7 .hword 0x845E .hword 0x83CF .hword 0x8349 .hword 0x82CE .hword 0x825C .hword 0x81F3 .hword 0x8195 .hword 0x8140 .hword 0x80F6 .hword 0x80B5 .hword 0x807E .hword 0x8051 .hword 0x802E .hword 0x8015 .hword 0x8006 .hword 0x8001 .hword 0x8006 .hword 0x8015 .hword 0x802E .hword 0x8051 .hword 0x807E .hword 0x80B5 .hword 0x80F6 .hword 0x8140 .hword 0x8195 .hword 0x81F3 .hword 0x825C .hword 0x82CE .hword 0x8349 .hword 0x83CF .hword 0x845E .hword 0x84F7 .hword 0x8599 .hword 0x8645 .hword 0x86FB .hword 0x87BA .hword 0x8882 .hword 0x8953 .hword 0x8A2E .hword 0x8B12 .hword 0x8C00 .hword 0x8CF6 .hword 0x8DF5 .hword 0x8EFD .hword 0x900E .hword 0x9127 .hword 0x924A .hword 0x9375 .hword 0x94A8 .hword 0x95E3 .hword 0x9727 .hword 0x9873 .hword 0x99C8 .hword 0x9B24 .hword 0x9C88 .hword 0x9DF4 .hword 0x9F67 .hword 0xA0E2 .hword 0xA264 .hword 0xA3EE .hword 0xA57F .hword 0xA717 .hword 0xA8B5 .hword 0xAA5B .hword 0xAC07 .hword 0xADBA .hword 0xAF74 .hword 0xB133 .hword 0xB2F9 .hword 0xB4C5 .hword 0xB696 .hword 0xB86D .hword 0xBA4A .hword 0xBC2D .hword 0xBE14 .hword 0xC001 .hword 0xC1F3 .hword 0xC3E9 .hword 0xC5E5 .hword 0xC7E4 .hword 0xC9E9 .hword 0xCBF1 .hword 0xCDFD .hword 0xD00E .hword 0xD222 .hword 0xD43A .hword 0xD655 .hword 0xD873 .hword 0xDA94 .hword 0xDCB9 .hword 0xDEE0 .hword 0xE109 .hword 0xE336 .hword 0xE564 .hword 0xE794 .hword 0xE9C7 .hword 0xEBFB .hword 0xEE30 .hword 0xF067 .hword 0xF29F .hword 0xF4D9 .hword 0xF713 .hword 0xF94E .hword 0xFB89 .hword 0xFDC5 .hword 0x0000 .hword 0x023B .hword 0x0477 .hword 0x06B2 .hword 0x08ED .hword 0x0B27 .hword 0x0D61 .hword 0x0F99 .hword 0x11D0 .hword 0x1405 .hword 0x1639 .hword 0x186C .hword 0x1A9C .hword 0x1CCA .hword 0x1EF7 .hword 0x2120 .hword 0x2347 .hword 0x256C .hword 0x278D .hword 0x29AB .hword 0x2BC6 .hword 0x2DDE .hword 0x2FF2 .hword 0x3203 .hword 0x340F .hword 0x3617 .hword 0x381C .hword 0x3A1B .hword 0x3C17 .hword 0x3E0D .hword 0x3FFF .hword 0x41EC .hword 0x43D3 .hword 0x45B6 .hword 0x4793 .hword 0x496A .hword 0x4B3B .hword 0x4D07 .hword 0x4ECD .hword 0x508C .hword 0x5246 .hword 0x53F9 .hword 0x55A5 .hword 0x574B .hword 0x58E9 .hword 0x5A81 .hword 0x5C12 .hword 0x5D9C .hword 0x5F1E .hword 0x6099 .hword 0x620C .hword 0x6378 .hword 0x64DC .hword 0x6638 .hword 0x678D .hword 0x68D9 .hword 0x6A1D .hword 0x6B58 .hword 0x6C8B .hword 0x6DB6 .hword 0x6ED9 .hword 0x6FF2 .hword 0x7103 .hword 0x720B .hword 0x730A .hword 0x7400 .hword 0x74EE .hword 0x75D2 .hword 0x76AD .hword 0x777E .hword 0x7846 .hword 0x7905 .hword 0x79BB .hword 0x7A67 .hword 0x7B09 .hword 0x7BA2 .hword 0x7C31 .hword 0x7CB7 .hword 0x7D32 .hword 0x7DA4 .hword 0x7E0D .hword 0x7E6B .hword 0x7EC0 .hword 0x7F0A .hword 0x7F4B .hword 0x7F82 .hword 0x7FAF .hword 0x7FD2 .hword 0x7FEB .hword 0x7FFA ;Startup Script (Compiled) StartupScript: .hword 0x3400 .hword 0x07FF .hword 0x4032 .hword 0x8001 .hword 0x9000 .hword 0x0FFC .hword 0x53FF .hword 0x7001 .hword 0x4032 .hword 0x8002 .hword 0x9000 .hword 0x0C04 .hword 0x53FF .hword 0x7002 .hword 0x4032 .hword 0x8003 .hword 0x9000 .hword 0x53FF .hword 0x7003 .hword 0x07FE .hword 0x0801 .hword 0x1001 .hword 0x28B4 .hword 0x401E .hword 0x8004 .hword 0x9000 .hword 0x2FFA .hword 0x0C04 .hword 0x1404 .hword 0x53FF .hword 0x7004 .hword 0x401E .hword 0x8005 .hword 0x9000 .hword 0x53FF .hword 0x7005 .hword 0x3400 .hword 0x07FD .hword 0x239C .hword 0x4032 .hword 0x8006 .hword 0x9000 .hword 0x24C8 .hword 0x53FF .hword 0x7006 .hword 0x3400 .hword 0x07FC .hword 0x31F4 .hword 0x31F4 .hword 0x31F4 .hword 0x31F4 .hword 0x8007 .hword 0x8008 .hword 0x3400 .hword 0x07FB .hword 0x4078 .hword 0x8009 .hword 0x9000 .hword 0x2C03 .hword 0x53FF .hword 0x7009 .hword 0x31FF .hword 0x31FF .hword 0x31FF .hword 0x07FA .hword 0x4404 .hword 0x800A .hword 0x8800 .hword 0x4069 .hword 0x800B .hword 0x9000 .hword 0x8C02 .hword 0x53FF .hword 0x700B .hword 0x57FF .hword 0x740A .hword 0x3400 .hword 0x07FC .hword 0x0801 .hword 0x1001 .hword 0x4024 .hword 0x800C .hword 0x9000 .hword 0x2C0A .hword 0x0C03 .hword 0x1403 .hword 0x53FF .hword 0x700C .hword 0x31F4 .hword 0x4024 .hword 0x800D .hword 0x300A .hword 0x2FF6 .hword 0x0FFD .hword 0x17FD .hword 0x53FF .hword 0x700D .hword 0x31F4 .hword 0x3400 .hword 0x07F9 .hword 0x4404 .hword 0x800E .hword 0x4019 .hword 0x800F .hword 0x0FF8 .hword 0x9000 .hword 0x53FF .hword 0x700F .hword 0x4019 .hword 0x8010 .hword 0x0C08 .hword 0x9000 .hword 0x53FF .hword 0x7010 .hword 0x57FF .hword 0x740E .hword 0x3400 .hword 0x31F4 .hword 0x31F4 .hword 0x3400 .hword 0x8407 .hword 0xFFFF ;Safety: ends script ;Data for scanner images, stored in program memory ;Format: X/Y positions are 14-bit, signed with D15=sign bit, D0-D12=mantissa ; Bit D14 of X (1st word) is blanking bit (SET=Blank) ; Bit D13 (X) and D14/D13 (Y) are PCAOM bits ; Strip bits 14/13 before using for DACs, shift sign bit right 2 bits ; e.g. 0x4394=Blanked position d917, 0x9E26=BeamOn, position -474 ; X value has blanking bit, X&Y have PCAOM bits ; END of frame indicated by X=0xFFFF (Blank plus Color 7) ; Uninitialized memory also reads as FFFF (safety feature) ;This area (<0x8000) reserved for 4 start-up images only (permanent) ;On start-up cycle through "V-30Logo","DSP Engine","M.Csele", and ; play a startup script until a button/command received ;All other (uploaded) images go into high flash-memory area LaserRadiationSign: ;Laser Radiation Sign .hword 0xDD7E, 0x034C .hword 0xDD7E, 0x034C .hword 0xDD7E, 0x034C .hword 0xDD7E, 0x034C .hword 0x9D7E, 0x034C .hword 0x9D7E, 0x034C .hword 0x9D3A, 0x0309 .hword 0x9C9A, 0x026C .hword 0x9BB5, 0x018D .hword 0x9B15, 0x00F0 .hword 0x9AD0, 0x00AD .hword 0x9AD0, 0x00AD .hword 0x9AD0, 0x00AD .hword 0x9AD0, 0x00AD .hword 0x9AFF, 0x0074 .hword 0x9B3E, 0x002A .hword 0x9B6D, 0x9FF4 .hword 0x9B6D, 0x9FF4 .hword 0x9B6D, 0x9FF4 .hword 0x9B6D, 0x9FF4 .hword 0x9B6D, 0x9FF4 .hword 0x9BB3, 0x0036 .hword 0x9C52, 0x00D4 .hword 0x9D37, 0x01B5 .hword 0x9DD7, 0x0253 .hword 0x9E1C, 0x0297 .hword 0x9E1C, 0x0297 .hword 0x9E1C, 0x0297 .hword 0x9E1C, 0x0297 .hword 0x9E1C, 0x0297 .hword 0x9DFD, 0x0247 .hword 0x9DB5, 0x018D .hword 0x9D6D, 0x00D2 .hword 0x9D4D, 0x0082 .hword 0x9D4D, 0x0082 .hword 0x9D4D, 0x0082 .hword 0x9D4D, 0x0082 .hword 0x9D8C, 0x0065 .hword 0x9DDE, 0x003E .hword 0x9E1C, 0x0021 .hword 0x9E1C, 0x0021 .hword 0x9E1C, 0x0021 .hword 0x9E1C, 0x0021 .hword 0x9E1C, 0x0021 .hword 0x9E41, 0x0080 .hword 0x9E97, 0x015C .hword 0x9EED, 0x0238 .hword 0x9F12, 0x0297 .hword 0x9F12, 0x0297 .hword 0x9F12, 0x0297 .hword 0x9F12, 0x0297 .hword 0x9F12, 0x0297 .hword 0x9F12, 0x022E .hword 0x9F12, 0x013A .hword 0x9F12, 0x9FDF .hword 0x9F12, 0x9EEA .hword 0x9F12, 0x9E81 .hword 0x9F12, 0x9E81 .hword 0x9F12, 0x9E81 .hword 0x9F12, 0x9E81 .hword 0x9F55, 0x9E81 .hword 0x9FAE, 0x9E81 .hword 0x9FF2, 0x9E81 .hword 0x9FF2, 0x9E81 .hword 0x9FF2, 0x9E81 .hword 0x9FF2, 0x9E81 .hword 0x9FF2, 0x9EE3 .hword 0x9FF2, 0x9FC6 .hword 0x9FF2, 0x010A .hword 0x9FF2, 0x01ED .hword 0x9FF2, 0x024E .hword 0x9FF2, 0x024E .hword 0x9FF2, 0x024E .hword 0x9FF2, 0x024E .hword 0x9FF2, 0x024E .hword 0x0014, 0x01FA .hword 0x0066, 0x0136 .hword 0x00B9, 0x0071 .hword 0x00DD, 0x001C .hword 0x00DD, 0x001C .hword 0x00DD, 0x001C .hword 0x00DD, 0x001C .hword 0x0120, 0x0038 .hword 0x017A, 0x005D .hword 0x01BE, 0x0078 .hword 0x01BE, 0x0078 .hword 0x01BE, 0x0078 .hword 0x01BE, 0x0078 .hword 0x01BE, 0x0078 .hword 0x0199, 0x00CD .hword 0x0143, 0x0195 .hword 0x00ED, 0x025D .hword 0x00C8, 0x02B3 .hword 0x00C8, 0x02B3 .hword 0x00C8, 0x02B3 .hword 0x00C8, 0x02B3 .hword 0x00C8, 0x02B3 .hword 0x010E, 0x026D .hword 0x01B1, 0x01CC .hword 0x0299, 0x00E6 .hword 0x033B, 0x0044 .hword 0x0381, 0x0000 .hword 0x0381, 0x0000 .hword 0x0381, 0x0000 .hword 0x0381, 0x0000 .hword 0x0381, 0x0000 .hword 0x03B1, 0x0035 .hword 0x03F0, 0x007D .hword 0x041F, 0x00B2 .hword 0x041F, 0x00B2 .hword 0x041F, 0x00B2 .hword 0x041F, 0x00B2 .hword 0x03DB, 0x00F5 .hword 0x033B, 0x0195 .hword 0x0257, 0x0278 .hword 0x01B6, 0x0317 .hword 0x0171, 0x035C .hword 0x0171, 0x035C .hword 0x0171, 0x035C .hword 0x0171, 0x035C .hword 0x0171, 0x035C .hword 0x01C5, 0x0337 .hword 0x028B, 0x02E3 .hword 0x034F, 0x028F .hword 0x03A3, 0x026A .hword 0x03A3, 0x026A .hword 0x03A3, 0x026A .hword 0x03A3, 0x026A .hword 0x03A3, 0x026A .hword 0x03BA, 0x02AD .hword 0x03D8, 0x0306 .hword 0x03EE, 0x0347 .hword 0x03EE, 0x0347 .hword 0x03EE, 0x0347 .hword 0x03EE, 0x0347 .hword 0x0396, 0x036C .hword 0x02C7, 0x03C2 .hword 0x01F9, 0x0418 .hword 0x01A1, 0x043D .hword 0x01A1, 0x043D .hword 0x01A1, 0x043D .hword 0x01A1, 0x043D .hword 0x01A1, 0x043D .hword 0x0205, 0x043D .hword 0x02ED, 0x043D .hword 0x0439, 0x043D .hword 0x0586, 0x043D .hword 0x06D1, 0x043D .hword 0x081D, 0x043D .hword 0x0943, 0x043D .hword 0x09A6, 0x043D .hword 0x09A6, 0x043D .hword 0x09A6, 0x043D .hword 0x09A6, 0x043D .hword 0x09CD, 0x0481 .hword 0x0A00, 0x04DB .hword 0x0A27, 0x051E .hword 0x0A27, 0x051E .hword 0x0A27, 0x051E .hword 0x0A27, 0x051E .hword 0x0A27, 0x051E .hword 0x09D2, 0x051E .hword 0x090A, 0x051E .hword 0x07A0, 0x051E .hword 0x0664, 0x051E .hword 0x0547, 0x051E .hword 0x042A, 0x051E .hword 0x030C, 0x051E .hword 0x0243, 0x051E .hword 0x01EE, 0x051E .hword 0x01EE, 0x051E .hword 0x01EE, 0x051E .hword 0x01EE, 0x051E .hword 0x01EE, 0x051E .hword 0x023B, 0x053D .hword 0x02EE, 0x0588 .hword 0x03A1, 0x05D1 .hword 0x03EE, 0x05F1 .hword 0x03EE, 0x05F1 .hword 0x03EE, 0x05F1 .hword 0x03EE, 0x05F1 .hword 0x03D8, 0x0634 .hword 0x03BA, 0x068C .hword 0x03A3, 0x06CE .hword 0x03A3, 0x06CE .hword 0x03A3, 0x06CE .hword 0x03A3, 0x06CE .hword 0x03A3, 0x06CE .hword 0x034C, 0x06AB .hword 0x0283, 0x0656 .hword 0x01B9, 0x0602 .hword 0x0163, 0x05DE .hword 0x0163, 0x05DE .hword 0x0163, 0x05DE .hword 0x0163, 0x05DE .hword 0x0163, 0x05DE .hword 0x01AA, 0x0622 .hword 0x024F, 0x06C4 .hword 0x033D, 0x07AB .hword 0x03E3, 0x084B .hword 0x042A, 0x0891 .hword 0x042A, 0x0891 .hword 0x042A, 0x0891 .hword 0x042A, 0x0891 .hword 0x03FA, 0x08C6 .hword 0x03BA, 0x090E .hword 0x038B, 0x0943 .hword 0x038B, 0x0943 .hword 0x038B, 0x0943 .hword 0x038B, 0x0943 .hword 0x038B, 0x0943 .hword 0x0341, 0x08FB .hword 0x0296, 0x0854 .hword 0x01A1, 0x0763 .hword 0x00F6, 0x06BB .hword 0x00AD, 0x0672 .hword 0x00AD, 0x0672 .hword 0x00AD, 0x0672 .hword 0x00AD, 0x0672 .hword 0x00AD, 0x0672 .hword 0x00D2, 0x06CB .hword 0x0127, 0x079A .hword 0x017D, 0x0869 .hword 0x01A1, 0x08C2 .hword 0x01A1, 0x08C2 .hword 0x01A1, 0x08C2 .hword 0x01A1, 0x08C2 .hword 0x0160, 0x08E0 .hword 0x010A, 0x0908 .hword 0x00C8, 0x0926 .hword 0x00C8, 0x0926 .hword 0x00C8, 0x0926 .hword 0x00C8, 0x0926 .hword 0x00C8, 0x0926 .hword 0x00A9, 0x08D7 .hword 0x005D, 0x081C .hword 0x0011, 0x0762 .hword 0x9FF2, 0x0712 .hword 0x9FF2, 0x0712 .hword 0x9FF2, 0x0712 .hword 0x9FF2, 0x0712 .hword 0x9FF2, 0x0712 .hword 0x9FF2, 0x076E .hword 0x9FF2, 0x0846 .hword 0x9FF2, 0x097A .hword 0x9FF2, 0x0A52 .hword 0x9FF2, 0x0AB0 .hword 0x9FF2, 0x0AB0 .hword 0x9FF2, 0x0AB0 .hword 0x9FF2, 0x0AB0 .hword 0x9FAE, 0x0AB0 .hword 0x9F55, 0x0AB0 .hword 0x9F12, 0x0AB0 .hword 0x9F12, 0x0AB0 .hword 0x9F12, 0x0AB0 .hword 0x9F12, 0x0AB0 .hword 0x9F12, 0x0A4E .hword 0x9F12, 0x096D .hword 0x9F12, 0x082C .hword 0x9F12, 0x074A .hword 0x9F12, 0x06EA .hword 0x9F12, 0x06EA .hword 0x9F12, 0x06EA .hword 0x9F12, 0x06EA .hword 0x9F12, 0x06EA .hword 0x9EEE, 0x073E .hword 0x9E9C, 0x0804 .hword 0x9E49, 0x08C8 .hword 0x9E26, 0x091C .hword 0x9E26, 0x091C .hword 0x9E26, 0x091C .hword 0x9E26, 0x091C .hword 0x9DE5, 0x0901 .hword 0x9D8F, 0x08DD .hword 0x9D4D, 0x08C2 .hword 0x9D4D, 0x08C2 .hword 0x9D4D, 0x08C2 .hword 0x9D4D, 0x08C2 .hword 0x9D72, 0x0869 .hword 0x9DC8, 0x079A .hword 0x9E1E, 0x06CB .hword 0x9E43, 0x0672 .hword 0x9E43, 0x0672 .hword 0x9E43, 0x0672 .hword 0x9E43, 0x0672 .hword 0x9E43, 0x0672 .hword 0x9DFC, 0x06B8 .hword 0x9D56, 0x0759 .hword 0x9C69, 0x083F .hword 0x9BC3, 0x08E1 .hword 0x9B7C, 0x0926 .hword 0x9B7C, 0x0926 .hword 0x9B7C, 0x0926 .hword 0x9B7C, 0x0926 .hword 0x9B49, 0x08F6 .hword 0x9B03, 0x08B7 .hword 0x9AD0, 0x0887 .hword 0x9AD0, 0x0887 .hword 0x9AD0, 0x0887 .hword 0x9AD0, 0x0887 .hword 0x9AD0, 0x0887 .hword 0x9B17, 0x0845 .hword 0x9BBB, 0x07AB .hword 0x9CA6, 0x06CD .hword 0x9D4A, 0x0634 .hword 0x9D91, 0x05F1 .hword 0x9D91, 0x05F1 .hword 0x9D91, 0x05F1 .hword 0x9D91, 0x05F1 .hword 0x9D91, 0x05F1 .hword 0x9D3D, 0x0612 .hword 0x9C78, 0x0660 .hword 0x9BB5, 0x06AE .hword 0x9B61, 0x06CE .hword 0x9B61, 0x06CE .hword 0x9B61, 0x06CE .hword 0x9B61, 0x06CE .hword 0x9B46, 0x068E .hword 0x9B23, 0x0637 .hword 0x9B0A, 0x05F6 .hword 0x9B0A, 0x05F6 .hword 0x9B0A, 0x05F6 .hword 0x9B0A, 0x05F6 .hword 0x9B55, 0x05D6 .hword 0x9C08, 0x058A .hword 0x9CB9, 0x053E .hword 0x9D06, 0x051E .hword 0x9D06, 0x051E .hword 0x9D06, 0x051E .hword 0x9D06, 0x051E .hword 0x9D06, 0x051E .hword 0x9CA8, 0x051E .hword 0x9BCF, 0x051E .hword 0x9A99, 0x051E .hword 0x99C0, 0x051E .hword 0x9963, 0x051E .hword 0x9963, 0x051E .hword 0x9963, 0x051E .hword 0x9963, 0x051E .hword 0x9963, 0x04DB .hword 0x9963, 0x0481 .hword 0x9963, 0x043D .hword 0x9963, 0x043D .hword 0x9963, 0x043D .hword 0x9963, 0x043D .hword 0x99CA, 0x043D .hword 0x9ABB, 0x043D .hword 0x9C13, 0x043D .hword 0x9D03, 0x043D .hword 0x9D6B, 0x043D .hword 0x9D6B, 0x043D .hword 0x9D6B, 0x043D .hword 0x9D6B, 0x043D .hword 0x9D6B, 0x043D .hword 0x9D10, 0x0418 .hword 0x9C3B, 0x03C0 .hword 0x9B65, 0x0368 .hword 0x9B0A, 0x0343 .hword 0x9B0A, 0x0343 .hword 0x9B0A, 0x0343 .hword 0x9B0A, 0x0343 .hword 0x9B1E, 0x0301 .hword 0x9B39, 0x02A8 .hword 0x9B4C, 0x0266 .hword 0x9B4C, 0x0266 .hword 0x9B4C, 0x0266 .hword 0x9B4C, 0x0266 .hword 0x9B4C, 0x0266 .hword 0x9BA1, 0x0288 .hword 0x9C66, 0x02D9 .hword 0x9D2A, 0x032A .hword 0x9D7E, 0x034C .hword 0x9D7E, 0x034C .hword 0xDD7E, 0x034C .hword 0xDD7E, 0x034C .hword 0xDD7E, 0x034C .hword 0xDD7E, 0x034C .hword 0xDE2A, 0x039E .hword 0x4010, 0x0489 .hword 0x42EA, 0x05E8 .hword 0x4648, 0x0787 .hword 0x49A5, 0x0924 .hword 0x4C80, 0x0A84 .hword 0x4E67, 0x0B6E .hword 0x4F13, 0x0BC1 .hword 0x4F28, 0x0C06 .hword 0x4F2F, 0x0C46 .hword 0x4F24, 0x0C98 .hword 0x0F09, 0x0CDD .hword 0x0EDF, 0x0D1C .hword 0x0EA5, 0x0D47 .hword 0x0E69, 0x0D59 .hword 0x0E1D, 0x0D6A .hword 0x0DBD, 0x0D71 .hword 0x0D42, 0x0D71 .hword 0x0CA6, 0x0D71 .hword 0x0BE3, 0x0D71 .hword 0x0AF3, 0x0D71 .hword 0x09DA, 0x0D71 .hword 0x08A7, 0x0D71 .hword 0x0775, 0x0D71 .hword 0x0644, 0x0D71 .hword 0x0512, 0x0D71 .hword 0x03E0, 0x0D71 .hword 0x02AF, 0x0D70 .hword 0x017D, 0x0D70 .hword 0x004A, 0x0D70 .hword 0x9F1B, 0x0D70 .hword 0x9DE9, 0x0D70 .hword 0x9CB7, 0x0D70 .hword 0x9B86, 0x0D70 .hword 0x9A53, 0x0D70 .hword 0x9921, 0x0D70 .hword 0x97F0, 0x0D70 .hword 0x96BE, 0x0D70 .hword 0x958C, 0x0D70 .hword 0x945B, 0x0D70 .hword 0x9368, 0x0D70 .hword 0x92B6, 0x0D70 .hword 0x9232, 0x0D70 .hword 0x91CF, 0x0D70 .hword 0x9189, 0x0D65 .hword 0x9152, 0x0D47 .hword 0x9124, 0x0D16 .hword 0x90F4, 0x0CD0 .hword 0x90D7, 0x0C86 .hword 0x90D1, 0x0C43 .hword 0x90D8, 0x0BF7 .hword 0x90EF, 0x0BBF .hword 0x910C, 0x0B9B .hword 0x9122, 0x0B74 .hword 0x913F, 0x0B41 .hword 0x9165, 0x0B00 .hword 0x9196, 0x0AAA .hword 0x91D4, 0x0A3C .hword 0x9225, 0x09AF .hword 0x928E, 0x08F7 .hword 0x9315, 0x080C .hword 0x93AE, 0x0703 .hword 0x9445, 0x05F8 .hword 0x94DD, 0x04EF .hword 0x9575, 0x03E6 .hword 0x960D, 0x02DD .hword 0x96A4, 0x01D4 .hword 0x973D, 0x00C9 .hword 0x97D4, 0x9FC2 .hword 0x986C, 0x9EB9 .hword 0x9905, 0x9DAF .hword 0x999C, 0x9CA6 .hword 0x9A34, 0x9B9C .hword 0x9ACC, 0x9A93 .hword 0x9B64, 0x998A .hword 0x9BFB, 0x9880 .hword 0x9C94, 0x9776 .hword 0x9D2B, 0x966D .hword 0x9DC3, 0x9564 .hword 0x9E43, 0x9485 .hword 0x9EA9, 0x93D2 .hword 0x9EF3, 0x9350 .hword 0x9F33, 0x92FA .hword 0x9F6A, 0x92C2 .hword 0x9F9B, 0x92A4 .hword 0x9FDD, 0x9294 .hword 0x002A, 0x9291 .hword 0x007D, 0x929D .hword 0x00B3, 0x92BA .hword 0x00DD, 0x92E5 .hword 0x0106, 0x9322 .hword 0x0129, 0x9360 .hword 0x0156, 0x93AE .hword 0x018E, 0x9411 .hword 0x01D5, 0x948D .hword 0x022F, 0x952B .hword 0x02A1, 0x95F3 .hword 0x0332, 0x96F0 .hword 0x03C9, 0x97F9 .hword 0x0461, 0x9904 .hword 0x04F8, 0x9A0D .hword 0x0590, 0x9B16 .hword 0x0628, 0x9C20 .hword 0x06BF, 0x9D29 .hword 0x0757, 0x9E34 .hword 0x07EE, 0x9F3D .hword 0x0886, 0x0044 .hword 0x091D, 0x014E .hword 0x09B5, 0x0258 .hword 0x0A4C, 0x0362 .hword 0x0AE4, 0x046B .hword 0x0B7B, 0x0574 .hword 0x0C13, 0x067F .hword 0x0CAB, 0x0788 .hword 0x0D42, 0x0892 .hword 0x0DDA, 0x099B .hword 0x0E4E, 0x0A68 .hword 0x0EA6, 0x0B03 .hword 0x0EE8, 0x0B75 .hword 0x0F13, 0x0BC1 .hword 0x0F28, 0x0C06 .hword 0x0F2F, 0x0C46 .hword 0x0F24, 0x0C98 .hword 0x4F09, 0x0CDD .hword 0x4EDF, 0x0D1C .hword 0x4EA5, 0x0D47 .hword 0x4E69, 0x0D59 .hword 0x4DC4, 0x0CF6 .hword 0x4BEE, 0x0BE0 .hword 0x4930, 0x0A3E .hword 0x45F3, 0x0853 .hword 0x42B6, 0x0666 .hword 0xDFF9, 0x04C4 .hword 0xDE23, 0x03AE .hword 0xDD7E, 0x034C .hword 0xFFFF, 0xFFFF ;End of Frame V30Logo: ;New Logo (2007/06/22) .hword 0x9976, 0x805C .hword 0x9976, 0x8080 .hword 0x9976, 0x8080 .hword 0x9908, 0x8148 .hword 0x98AD, 0x81FE .hword 0x98AD, 0x8223 .hword 0x98AD, 0x8223 .hword 0x980A, 0x836A .hword 0x978A, 0x848E .hword 0x971D, 0x8556 .hword 0x96B0, 0x8679 .hword 0x9667, 0x871D .hword 0x9667, 0x871D .hword 0x95FA, 0x87E5 .hword 0x95B1, 0x889B .hword 0x959F, 0x88D2 .hword 0x959F, 0x88D2 .hword 0x9544, 0x8976 .hword 0x94E9, 0x8A1A .hword 0x94E9, 0x8A3E .hword 0x94E9, 0x8A3E .hword 0x94C4, 0x8988 .hword 0x94A0, 0x8889 .hword 0x947B, 0x87D3 .hword 0x947B, 0x87AF .hword 0x947B, 0x87AF .hword 0x93EA, 0x8852 .hword 0x93B3, 0x88AD .hword 0x93B3, 0x88AD .hword 0x9334, 0x8963 .hword 0x9290, 0x8A62 .hword 0x9235, 0x8B06 .hword 0x91FE, 0x8B61 .hword 0x91FE, 0x8B61 .hword 0x916D, 0x8C17 .hword 0x9136, 0x8C84 .hword 0x9136, 0x8C84 .hword 0x906E, 0x8DA8 .hword 0x8FDC, 0x8E94 .hword 0x8F6F, 0x8F4A .hword 0x8EDD, 0x9037 .hword 0x8E94, 0x90C9 .hword 0x8E94, 0x90C9 .hword 0x8E03, 0x9191 .hword 0x8DCC, 0x91FE .hword 0x8DCC, 0x91FE .hword 0x8D16, 0x930F .hword 0x8CA9, 0x93C5 .hword 0x8C60, 0x9445 .hword 0x8C60, 0x9445 .hword 0x8BCE, 0x950D .hword 0x8B86, 0x957A .hword 0x8B86, 0x957A .hword 0x8B4F, 0x94C4 .hword 0x8B3D, 0x9469 .hword 0x8B3D, 0x9469 .hword 0x8AD0, 0x9334 .hword 0x8A75, 0x9259 .hword 0x8A62, 0x9210 .hword 0x8A62, 0x9210 .hword 0x8988, 0x8FB8 .hword 0x88E4, 0x8DCC .hword 0x8877, 0x8C60 .hword 0x880A, 0x8B4F .hword 0x87D3, 0x8A87 .hword 0x878A, 0x89AC .hword 0x8778, 0x8976 .hword 0x8778, 0x8976 .hword 0x872F, 0x88C0 .hword 0x86E6, 0x87C1 .hword 0x869E, 0x870B .hword 0x869E, 0x86E6 .hword 0x869E, 0x86E6 .hword 0x8655, 0x860C .hword 0x8642, 0x85B1 .hword 0x8642, 0x85B1 .hword 0x8667, 0x85B1 .hword 0x8667, 0x85B1 .hword 0x869E, 0x8667 .hword 0x86D4, 0x86B0 .hword 0x86D4, 0x86B0 .hword 0x8741, 0x878A .hword 0x879C, 0x8840 .hword 0x87C1, 0x8889 .hword 0x87C1, 0x8889 .hword 0x8840, 0x89AC .hword 0x88D2, 0x8AD0 .hword 0x8951, 0x8BF3 .hword 0x89E3, 0x8D16 .hword 0x8A87, 0x8E39 .hword 0x8A87, 0x8E39 .hword 0x8AF4, 0x8F14 .hword 0x8B4F, 0x8FCA .hword 0x8B73, 0x9013 .hword 0x8B73, 0x9013 .hword 0x8BCE, 0x90B7 .hword 0x8C17, 0x90C9 .hword 0x8C17, 0x90C9 .hword 0x8C72, 0x9000 .hword 0x8CBB, 0x8FA5 .hword 0x8CBB, 0x8FA5 .hword 0x8D3B, 0x8EDD .hword 0x8DF1, 0x8DDE .hword 0x8E5E, 0x8D3B .hword 0x8EA7, 0x8CF2 .hword 0x8EA7, 0x8CF2 .hword 0x8F14, 0x8C3C .hword 0x8FCA, 0x8B3D .hword 0x9049, 0x8A87 .hword 0x906E, 0x8A62 .hword 0x906E, 0x8A62 .hword 0x90FF, 0x8976 .hword 0x917F, 0x88D2 .hword 0x9235, 0x87D3 .hword 0x92A2, 0x872F .hword 0x92B4, 0x872F .hword 0x92B4, 0x872F .hword 0x9346, 0x8642 .hword 0x93B3, 0x859F .hword 0x93EA, 0x8568 .hword 0x93EA, 0x8568 .hword 0x948E, 0x84A0 .hword 0x94E9, 0x8445 .hword 0x94E9, 0x8445 .hword 0x9531, 0x850D .hword 0x957A, 0x85C3 .hword 0x959F, 0x85FA .hword 0x959F, 0x85FA .hword 0x95C3, 0x85FA .hword 0x95C3, 0x85FA .hword 0x95E7, 0x85FA .hword 0x95E7, 0x85FA .hword 0x960C, 0x858C .hword 0x9667, 0x84D6 .hword 0x9667, 0x84D6 .hword 0x9679, 0x84A0 .hword 0x96E6, 0x83EA .hword 0x9766, 0x8321 .hword 0x9766, 0x8321 .hword 0x9778, 0x82EB .hword 0x97E5, 0x8235 .hword 0x9840, 0x8191 .hword 0x98C0, 0x80B7 .hword 0x992A, 0x809B .hword 0x9976, 0x8080 .hword 0xD980, 0x8050 .hword 0xD980, 0x8050 .hword 0xDA20, 0x80B0 .hword 0xDAD0, 0x8160 .hword 0xDBA0, 0x81F0 .hword 0xDCB0, 0x8280 .hword 0xDD90, 0x8320 .hword 0xDE50, 0x83A0 .hword 0xDF50, 0x8450 .hword 0x4080, 0x8510 .hword 0x4160, 0x85B0 .hword 0x4230, 0x8630 .hword 0x42E0, 0x86C0 .hword 0x43A0, 0x8730 .hword 0x43B2, 0x8741 .hword 0x0468, 0x8766 .hword 0x04D5, 0x878A .hword 0x04D5, 0x878A .hword 0x04FA, 0x86D4 .hword 0x0530, 0x861E .hword 0x0543, 0x861E .hword 0x0543, 0x861E .hword 0x0641, 0x860C .hword 0x070A, 0x861E .hword 0x082D, 0x861E .hword 0x08F5, 0x861E .hword 0x0907, 0x861E .hword 0x0907, 0x861E .hword 0x09BE, 0x860C .hword 0x0A74, 0x8630 .hword 0x0A74, 0x8630 .hword 0x0A86, 0x86C2 .hword 0x0A86, 0x86C2 .hword 0x0A4F, 0x8778 .hword 0x0A06, 0x882E .hword 0x09D0, 0x8877 .hword 0x09D0, 0x8877 .hword 0x091A, 0x889B .hword 0x08AC, 0x88AD .hword 0x08AC, 0x88AD .hword 0x07F6, 0x889B .hword 0x070A, 0x88AD .hword 0x0641, 0x88AD .hword 0x0641, 0x88AD .hword 0x0641, 0x88AD .hword 0x060B, 0x8963 .hword 0x05F9, 0x89D1 .hword 0x05F9, 0x89D1 .hword 0x071C, 0x89D1 .hword 0x0809, 0x89D1 .hword 0x0864, 0x89D1 .hword 0x0864, 0x89D1 .hword 0x092C, 0x89D1 .hword 0x0962, 0x89E3 .hword 0x0962, 0x89E3 .hword 0x0987, 0x8AAB .hword 0x0987, 0x8AAB .hword 0x093E, 0x8B86 .hword 0x08D1, 0x8C4E .hword 0x0888, 0x8C97 .hword 0x0888, 0x8C97 .hword 0x07C0, 0x8CA9 .hword 0x06F8, 0x8CA9 .hword 0x06F8, 0x8CA9 .hword 0x05E6, 0x8C97 .hword 0x050C, 0x8CA9 .hword 0x03E9, 0x8CA9 .hword 0x0320, 0x8CA9 .hword 0x0320, 0x8CA9 .hword 0x0320, 0x8CA9 .hword 0x0345, 0x8BE1 .hword 0x037C, 0x8B2B .hword 0x038E, 0x8B18 .hword 0x038E, 0x8B18 .hword 0x02FC, 0x8B2B .hword 0x02FC, 0x8B2B .hword 0x0234, 0x8B61 .hword 0x020F, 0x8B73 .hword 0x020F, 0x8B73 .hword 0x01D9, 0x8BF3 .hword 0x01D9, 0x8BF3 .hword 0x01C7, 0x8CA9 .hword 0x01B4, 0x8D5F .hword 0x01B4, 0x8D83 .hword 0x01B4, 0x8D83 .hword 0x026A, 0x8DBA .hword 0x026A, 0x8DBA .hword 0x0320, 0x8DCC .hword 0x03FB, 0x8DCC .hword 0x03FB, 0x8DCC .hword 0x04C3, 0x8DBA .hword 0x05F9, 0x8DCC .hword 0x06D3, 0x8DCC .hword 0x070A, 0x8DCC .hword 0x070A, 0x8DCC .hword 0x07F6, 0x8DCC .hword 0x08AC, 0x8DBA .hword 0x0962, 0x8D83 .hword 0x0962, 0x8D83 .hword 0x0A06, 0x8CE0 .hword 0x0A86, 0x8BF3 .hword 0x0AE1, 0x8B06 .hword 0x0AF3, 0x8ABD .hword 0x0AF3, 0x8ABD .hword 0x0B05, 0x8A2C .hword 0x0B05, 0x8A2C .hword 0x0AAA, 0x8976 .hword 0x09F4, 0x893F .hword 0x09F4, 0x893F .hword 0x09F4, 0x891B .hword 0x09F4, 0x891B .hword 0x0AE1, 0x88C0 .hword 0x0B72, 0x87F7 .hword 0x0BE0, 0x870B .hword 0x0C04, 0x86C2 .hword 0x0C04, 0x86C2 .hword 0x0C28, 0x85FA .hword 0x0C04, 0x8544 .hword 0x0C04, 0x8544 .hword 0x0B3C, 0x84FB .hword 0x0AF3, 0x84FB .hword 0x0AF3, 0x84FB .hword 0x0A2B, 0x84FB .hword 0x0975, 0x84FB .hword 0x0975, 0x84FB .hword 0x08BF, 0x84E9 .hword 0x07D2, 0x84FB .hword 0x06F8, 0x84FB .hword 0x06F8, 0x84FB .hword 0x06F8, 0x84FB .hword 0x05F9, 0x84E9 .hword 0x051E, 0x850D .hword 0x0456, 0x857A .hword 0x0432, 0x85C3 .hword 0x0432, 0x85C3 .hword 0x03E9, 0x8667 .hword 0x03E9, 0x8667 .hword 0x03B2, 0x871D .hword 0x03B2, 0x8741 .hword 0x43C0, 0x8730 .hword 0x44C0, 0x8720 .hword 0x4620, 0x86D0 .hword 0x4770, 0x86A0 .hword 0x48B0, 0x8670 .hword 0x4A30, 0x8620 .hword 0x4BC0, 0x85E0 .hword 0x4D10, 0x85B0 .hword 0x4E40, 0x8580 .hword 0x4FA0, 0x8530 .hword 0x5080, 0x8510 .hword 0x5160, 0x84F0 .hword 0x51C0, 0x84E0 .hword 0x51C7, 0x84FB .hword 0x1111, 0x8531 .hword 0x10B6, 0x857A .hword 0x10B6, 0x857A .hword 0x1024, 0x8630 .hword 0x0FC9, 0x870B .hword 0x0FB7, 0x878A .hword 0x0FB7, 0x878A .hword 0x0F5C, 0x8889 .hword 0x0F25, 0x893F .hword 0x0ECA, 0x8A3E .hword 0x0E93, 0x8AF4 .hword 0x0E93, 0x8AF4 .hword 0x0E5D, 0x8BAA .hword 0x0E26, 0x8C60 .hword 0x0E26, 0x8C60 .hword 0x0E14, 0x8D28 .hword 0x0E4B, 0x8D83 .hword 0x0E4B, 0x8D83 .hword 0x0F01, 0x8DCC .hword 0x0FED, 0x8DCC .hword 0x105B, 0x8DCC .hword 0x105B, 0x8DCC .hword 0x1159, 0x8DBA .hword 0x1222, 0x8DCC .hword 0x1333, 0x8DCC .hword 0x13FB, 0x8DCC .hword 0x140D, 0x8DCC .hword 0x140D, 0x8DCC .hword 0x14FA, 0x8DCC .hword 0x15B0, 0x8DBA .hword 0x1666, 0x8D96 .hword 0x1666, 0x8D96 .hword 0x16F8, 0x8D16 .hword 0x1753, 0x8C60 .hword 0x1789, 0x8C17 .hword 0x1789, 0x8C17 .hword 0x17D2, 0x8B61 .hword 0x1809, 0x8AAB .hword 0x182D, 0x8A62 .hword 0x182D, 0x8A62 .hword 0x1864, 0x8988 .hword 0x18D1, 0x8865 .hword 0x191A, 0x878A .hword 0x192C, 0x8766 .hword 0x192C, 0x8766 .hword 0x1975, 0x868B .hword 0x1987, 0x85D5 .hword 0x1962, 0x8544 .hword 0x1962, 0x8544 .hword 0x18AC, 0x84E9 .hword 0x17D2, 0x84E9 .hword 0x1789, 0x84FB .hword 0x1789, 0x84FB .hword 0x1678, 0x84E9 .hword 0x159E, 0x84FB .hword 0x1468, 0x84FB .hword 0x13A0, 0x84FB .hword 0x13A0, 0x84FB .hword 0x13A0, 0x84FB .hword 0x12D8, 0x84E9 .hword 0x120F, 0x84E9 .hword 0x11C7, 0x84FB .hword 0x51AD, 0x85A2 .hword 0x51A2, 0x861E .hword 0x1159, 0x86E6 .hword 0x1111, 0x879C .hword 0x1111, 0x87C1 .hword 0x1111, 0x87C1 .hword 0x10B6, 0x889B .hword 0x105B, 0x89D1 .hword 0x1012, 0x8A87 .hword 0x1000, 0x8AF4 .hword 0x1000, 0x8AF4 .hword 0x0FB7, 0x8BBC .hword 0x0F80, 0x8C72 .hword 0x0F80, 0x8CA9 .hword 0x0F80, 0x8CA9 .hword 0x1135, 0x8C97 .hword 0x12A1, 0x8CA9 .hword 0x13C4, 0x8CA9 .hword 0x149F, 0x8CA9 .hword 0x159E, 0x8C97 .hword 0x160B, 0x8CA9 .hword 0x160B, 0x8CA9 .hword 0x1641, 0x8BCE .hword 0x1678, 0x8B06 .hword 0x168A, 0x8AF4 .hword 0x168A, 0x8AF4 .hword 0x16D3, 0x8A1A .hword 0x170A, 0x8963 .hword 0x1753, 0x8877 .hword 0x179B, 0x87D3 .hword 0x179B, 0x87D3 .hword 0x17D2, 0x86F9 .hword 0x181B, 0x8630 .hword 0x182D, 0x861E .hword 0x182D, 0x861E .hword 0x1666, 0x860C .hword 0x14FA, 0x861E .hword 0x13D7, 0x861E .hword 0x12FC, 0x861E .hword 0x11FD, 0x861E .hword 0x11A2, 0x861E .hword 0x51A0, 0x8620 .hword 0x50B0, 0x8620 .hword 0x5010, 0x8630 .hword 0x4F10, 0x85F0 .hword 0x4D80, 0x8560 .hword 0x4C30, 0x8500 .hword 0x4A10, 0x8470 .hword 0x4890, 0x8410 .hword 0x4660, 0x8370 .hword 0x44A0, 0x8320 .hword 0x42D0, 0x82B0 .hword 0x4110, 0x8230 .hword 0xDEE0, 0x81C0 .hword 0xDD30, 0x8150 .hword 0xDBD0, 0x80E0 .hword 0xDB10, 0x8090 .hword 0xDA90, 0x8080 .hword 0xD9F0, 0x8040 .hword 0xD970, 0x8050 .hword 0xFFFF, 0xFFFF ;End of Loop - Blank+Color7 MCsele: .hword 0xCE94, 0x9630 .hword 0x8F4A, 0x961E .hword 0x8F5D, 0x961E .hword 0x8F5D, 0x961E .hword 0x8FA5, 0x9568 .hword 0x8FB8, 0x9556 .hword 0x8FB8, 0x9556 .hword 0x9000, 0x9445 .hword 0x9049, 0x936A .hword 0x906E, 0x9334 .hword 0x906E, 0x9334 .hword 0x90C9, 0x93EA .hword 0x9124, 0x94C4 .hword 0x9124, 0x94C4 .hword 0x916D, 0x9568 .hword 0x916D, 0x9568 .hword 0x9235, 0x951F .hword 0x9247, 0x951F .hword 0x9247, 0x951F .hword 0x92D9, 0x947B .hword 0x936A, 0x93FC .hword 0x93FC, 0x936A .hword 0x9433, 0x9346 .hword 0x9433, 0x9346 .hword 0x93EA, 0x940E .hword 0x938F, 0x951F .hword 0x9346, 0x95FA .hword 0x9346, 0x9630 .hword 0x9346, 0x9630 .hword 0x93FC, 0x960C .hword 0x9420, 0x960C .hword 0x9420, 0x960C .hword 0x9457, 0x9531 .hword 0x948E, 0x94D6 .hword 0x948E, 0x94D6 .hword 0x94D6, 0x93C5 .hword 0x951F, 0x92FD .hword 0x9544, 0x92C6 .hword 0x9544, 0x92C6 .hword 0x957A, 0x9210 .hword 0x959F, 0x91B5 .hword 0x959F, 0x91B5 .hword 0x94D6, 0x91B5 .hword 0x94C4, 0x91C8 .hword 0x94C4, 0x91C8 .hword 0x940E, 0x9247 .hword 0x93C5, 0x92A2 .hword 0x93C5, 0x92A2 .hword 0x92D9, 0x936A .hword 0x9247, 0x93EA .hword 0x91EC, 0x9457 .hword 0x91EC, 0x9457 .hword 0x91A3, 0x938F .hword 0x9136, 0x9290 .hword 0x90ED, 0x91DA .hword 0x90ED, 0x91B5 .hword 0x90ED, 0x91B5 .hword 0x9025, 0x91B5 .hword 0x9013, 0x91C8 .hword 0x9013, 0x91C8 .hword 0x8FB8, 0x9290 .hword 0x8F93, 0x92FD .hword 0x8F93, 0x92FD .hword 0x8F4A, 0x93D8 .hword 0x8EDD, 0x950D .hword 0x8EA7, 0x95C3 .hword 0x8E94, 0x9630 .hword 0xCE94, 0x9630 .hword 0xCE94, 0x9630 .hword 0xCE94, 0x9630 .hword 0xCE94, 0x9630 .hword 0xCE94, 0x9630 .hword 0xCF71, 0x95BB .hword 0xD04E, 0x9546 .hword 0xD12A, 0x94D0 .hword 0xD207, 0x945B .hword 0xD2E4, 0x93E6 .hword 0xD3C1, 0x9370 .hword 0xD3C1, 0x9370 .hword 0xD3C1, 0x9370 .hword 0xD3C1, 0x9370 .hword 0xD3C1, 0x9370 .hword 0xD433, 0x9334 .hword 0x9445, 0x9334 .hword 0x9445, 0x9334 .hword 0x9433, 0x9334 .hword 0xD433, 0x9334 .hword 0xD433, 0x9334 .hword 0xD433, 0x9334 .hword 0xD433, 0x9334 .hword 0xD433, 0x9334 .hword 0xD4C4, 0x93FF .hword 0xD555, 0x94CA .hword 0xD5E6, 0x9596 .hword 0xD5E6, 0x9596 .hword 0xD5E6, 0x9596 .hword 0xD5E6, 0x9596 .hword 0xD5E6, 0x9596 .hword 0xD655, 0x9630 .hword 0x970B, 0x961E .hword 0x9741, 0x961E .hword 0x9741, 0x961E .hword 0x979C, 0x9568 .hword 0x97AF, 0x951F .hword 0x97AF, 0x951F .hword 0x96F9, 0x950D .hword 0x969E, 0x9531 .hword 0x969E, 0x9531 .hword 0x9655, 0x95E7 .hword 0x9655, 0x9630 .hword 0xD655, 0x9630 .hword 0xD655, 0x9630 .hword 0xD655, 0x9630 .hword 0xD655, 0x9630 .hword 0xD655, 0x9630 .hword 0xD74C, 0x960C .hword 0xD843, 0x95E8 .hword 0xD93B, 0x95C4 .hword 0xDA32, 0x95A0 .hword 0xDB29, 0x957B .hword 0xDC21, 0x9557 .hword 0xDD18, 0x9533 .hword 0xDE0F, 0x950F .hword 0xDF07, 0x94EB .hword 0xDFFE, 0x94C6 .hword 0x40F5, 0x94A2 .hword 0x41EC, 0x947E .hword 0x41EC, 0x947E .hword 0x41EC, 0x947E .hword 0x41EC, 0x947E .hword 0x41EC, 0x947E .hword 0x41FD, 0x947B .hword 0x0147, 0x9469 .hword 0x0123, 0x9469 .hword 0x0123, 0x9469 .hword 0x00B6, 0x950D .hword 0x0091, 0x9568 .hword 0x0091, 0x9568 .hword 0x9FCA, 0x9568 .hword 0x9FCA, 0x957A .hword 0x9FCA, 0x957A .hword 0x9EEF, 0x957A .hword 0x9E27, 0x957A .hword 0x9E15, 0x957A .hword 0x9E15, 0x957A .hword 0x9E5E, 0x9469 .hword 0x9EA7, 0x938F .hword 0x9ECB, 0x9358 .hword 0x9ECB, 0x9358 .hword 0x9F02, 0x92A2 .hword 0x9F26, 0x927E .hword 0x9F26, 0x927E .hword 0x9FDC, 0x926B .hword 0x9FEE, 0x926B .hword 0x9FEE, 0x926B .hword 0x00C8, 0x926B .hword 0x01A2, 0x926B .hword 0x01C7, 0x926B .hword 0x01C7, 0x926B .hword 0x0190, 0x9321 .hword 0x0190, 0x936A .hword 0x0190, 0x936A .hword 0x0258, 0x9334 .hword 0x026A, 0x9334 .hword 0x026A, 0x9334 .hword 0x02B3, 0x926B .hword 0x027D, 0x91C8 .hword 0x027D, 0x91C8 .hword 0x01C7, 0x91A3 .hword 0x0190, 0x91B5 .hword 0x0190, 0x91B5 .hword 0x0091, 0x91B5 .hword 0x9FCA, 0x91B5 .hword 0x9F93, 0x91B5 .hword 0x9F93, 0x91B5 .hword 0x9ECB, 0x91B5 .hword 0x9E70, 0x91EC .hword 0x9E70, 0x91EC .hword 0x9DF1, 0x9290 .hword 0x9DBA, 0x9346 .hword 0x9D96, 0x93EA .hword 0x9D96, 0x93EA .hword 0x9D3B, 0x94B2 .hword 0x9D16, 0x9556 .hword 0x9D16, 0x9556 .hword 0x9D28, 0x95E7 .hword 0x9D28, 0x95E7 .hword 0x9DDE, 0x9630 .hword 0x9EA7, 0x9630 .hword 0x9EDD, 0x9630 .hword 0x9EDD, 0x9630 .hword 0x9FCA, 0x9630 .hword 0x005B, 0x9630 .hword 0x005B, 0x9630 .hword 0x0111, 0x960C .hword 0x0147, 0x95FA .hword 0x0147, 0x95FA .hword 0x01B4, 0x9556 .hword 0x01D9, 0x951F .hword 0x01D9, 0x951F .hword 0x01FD, 0x947B .hword 0x41FD, 0x947B .hword 0x41FD, 0x947B .hword 0x41FD, 0x947B .hword 0x41FD, 0x947B .hword 0x41FD, 0x947B .hword 0x42F7, 0x947F .hword 0x43F1, 0x9483 .hword 0x44EB, 0x9486 .hword 0x45E5, 0x948A .hword 0x45E5, 0x948A .hword 0x45E5, 0x948A .hword 0x45E5, 0x948A .hword 0x45E5, 0x948A .hword 0x46C1, 0x948E .hword 0x0678, 0x9544 .hword 0x0678, 0x958C .hword 0x0678, 0x958C .hword 0x05C2, 0x957A .hword 0x04C3, 0x958C .hword 0x03E9, 0x958C .hword 0x03E9, 0x958C .hword 0x03E9, 0x958C .hword 0x040D, 0x94E9 .hword 0x040D, 0x94E9 .hword 0x0357, 0x94FB .hword 0x0345, 0x950D .hword 0x0345, 0x950D .hword 0x030E, 0x95C3 .hword 0x0369, 0x961E .hword 0x0369, 0x961E .hword 0x0432, 0x9630 .hword 0x0468, 0x9630 .hword 0x0468, 0x9630 .hword 0x0530, 0x9630 .hword 0x060B, 0x961E .hword 0x068A, 0x961E .hword 0x068A, 0x961E .hword 0x071C, 0x958C .hword 0x0777, 0x94C4 .hword 0x0777, 0x94C4 .hword 0x0765, 0x940E .hword 0x0753, 0x93FC .hword 0x0753, 0x93FC .hword 0x068A, 0x93D8 .hword 0x068A, 0x93EA .hword 0x068A, 0x93EA .hword 0x059E, 0x93EA .hword 0x04C3, 0x93EA .hword 0x04B1, 0x93EA .hword 0x04B1, 0x93EA .hword 0x04FA, 0x9334 .hword 0x050C, 0x9334 .hword 0x050C, 0x9334 .hword 0x05C2, 0x9321 .hword 0x05C2, 0x9321 .hword 0x06AF, 0x9321 .hword 0x072E, 0x9321 .hword 0x072E, 0x9321 .hword 0x071C, 0x93A1 .hword 0x071C, 0x93A1 .hword 0x07D2, 0x936A .hword 0x07D2, 0x936A .hword 0x07E4, 0x92B4 .hword 0x07AE, 0x927E .hword 0x07AE, 0x927E .hword 0x06F8, 0x926B .hword 0x06D3, 0x927E .hword 0x06D3, 0x927E .hword 0x05F9, 0x926B .hword 0x0530, 0x926B .hword 0x04D5, 0x927E .hword 0x04D5, 0x927E .hword 0x0432, 0x92D9 .hword 0x03E9, 0x938F .hword 0x03E9, 0x93C5 .hword 0x03E9, 0x93C5 .hword 0x040D, 0x9469 .hword 0x040D, 0x9469 .hword 0x04C3, 0x947B .hword 0x04E8, 0x948E .hword 0x04E8, 0x948E .hword 0x05C2, 0x948E .hword 0x069D, 0x948E .hword 0x06C1, 0x948E .hword 0x46C1, 0x948E .hword 0x46C1, 0x948E .hword 0x46C1, 0x948E .hword 0x46C1, 0x948E .hword 0x46C1, 0x948E .hword 0x4779, 0x9537 .hword 0x4831, 0x95E0 .hword 0x4831, 0x95E0 .hword 0x4831, 0x95E0 .hword 0x4831, 0x95E0 .hword 0x4831, 0x95E0 .hword 0x4888, 0x9630 .hword 0x09BE, 0x9630 .hword 0x0A86, 0x9630 .hword 0x0B17, 0x9630 .hword 0x0B17, 0x9630 .hword 0x0BE0, 0x961E .hword 0x0C28, 0x961E .hword 0x0C28, 0x961E .hword 0x0C71, 0x958C .hword 0x0C71, 0x958C .hword 0x0BA9, 0x957A .hword 0x0A86, 0x958C .hword 0x09BE, 0x958C .hword 0x0999, 0x958C .hword 0x0999, 0x958C .hword 0x09D0, 0x94C4 .hword 0x09E2, 0x94A0 .hword 0x09E2, 0x94A0 .hword 0x0ABC, 0x94A0 .hword 0x0B97, 0x94A0 .hword 0x0BBB, 0x94A0 .hword 0x0BBB, 0x94A0 .hword 0x0BE0, 0x93FC .hword 0x0BE0, 0x93FC .hword 0x0B05, 0x93FC .hword 0x0A3D, 0x93FC .hword 0x0A2B, 0x93FC .hword 0x0A2B, 0x93FC .hword 0x0A61, 0x9346 .hword 0x0A98, 0x9321 .hword 0x0A98, 0x9321 .hword 0x0B3C, 0x9321 .hword 0x0B3C, 0x9321 .hword 0x0C04, 0x9321 .hword 0x0C83, 0x9321 .hword 0x0C83, 0x9321 .hword 0x0D3A, 0x92FD .hword 0x0D82, 0x927E .hword 0x0D82, 0x927E .hword 0x0CCC, 0x926B .hword 0x0BCD, 0x927E .hword 0x0AF3, 0x927E .hword 0x0AF3, 0x927E .hword 0x0AF3, 0x927E .hword 0x0A2B, 0x927E .hword 0x09D0, 0x927E .hword 0x09D0, 0x927E .hword 0x0975, 0x9334 .hword 0x0962, 0x937D .hword 0x0962, 0x937D .hword 0x091A, 0x9433 .hword 0x08D1, 0x9531 .hword 0x0888, 0x95FA .hword 0x0888, 0x9630 .hword 0x4888, 0x9630 .hword 0x4888, 0x9630 .hword 0x4888, 0x9630 .hword 0x4888, 0x9630 .hword 0x4888, 0x9630 .hword 0x4982, 0x9630 .hword 0x4A7C, 0x9630 .hword 0x4B76, 0x9630 .hword 0x4C70, 0x9630 .hword 0x4D6A, 0x9630 .hword 0x4D6A, 0x9630 .hword 0x4D6A, 0x9630 .hword 0x4D6A, 0x9630 .hword 0x4D6A, 0x9630 .hword 0x4D95, 0x9630 .hword 0x0ECA, 0x9630 .hword 0x0FB7, 0x9630 .hword 0x1012, 0x9630 .hword 0x1012, 0x9630 .hword 0x10C8, 0x961E .hword 0x1111, 0x961E .hword 0x1111, 0x961E .hword 0x1159, 0x958C .hword 0x1159, 0x958C .hword 0x1091, 0x957A .hword 0x0F92, 0x958C .hword 0x0ECA, 0x958C .hword 0x0EA6, 0x958C .hword 0x0EA6, 0x958C .hword 0x0EEE, 0x94A0 .hword 0x0F37, 0x93D8 .hword 0x0F49, 0x93C5 .hword 0x0F49, 0x93C5 .hword 0x0F80, 0x92EB .hword 0x0FA4, 0x927E .hword 0x0FA4, 0x927E .hword 0x0EDC, 0x927E .hword 0x0ECA, 0x9290 .hword 0x0ECA, 0x9290 .hword 0x0E81, 0x9346 .hword 0x0E6F, 0x938F .hword 0x0E6F, 0x938F .hword 0x0E26, 0x9445 .hword 0x0DDD, 0x9544 .hword 0x0D95, 0x95FA .hword 0x0D95, 0x9630 .hword 0x4D95, 0x9630 .hword 0x4D95, 0x9630 .hword 0x4D95, 0x9630 .hword 0x4D95, 0x9630 .hword 0x4D95, 0x9630 .hword 0x4E8F, 0x9630 .hword 0x4F89, 0x9630 .hword 0x5083, 0x9630 .hword 0x517D, 0x9630 .hword 0x517D, 0x9630 .hword 0x517D, 0x9630 .hword 0x517D, 0x9630 .hword 0x517D, 0x9630 .hword 0x5234, 0x9630 .hword 0x1369, 0x9630 .hword 0x1432, 0x9630 .hword 0x14C3, 0x9630 .hword 0x14C3, 0x9630 .hword 0x158B, 0x961E .hword 0x15D4, 0x961E .hword 0x15D4, 0x961E .hword 0x161D, 0x958C .hword 0x161D, 0x958C .hword 0x1555, 0x957A .hword 0x1432, 0x958C .hword 0x1369, 0x958C .hword 0x1345, 0x958C .hword 0x1345, 0x958C .hword 0x137C, 0x94C4 .hword 0x138E, 0x94A0 .hword 0x138E, 0x94A0 .hword 0x1468, 0x94A0 .hword 0x1543, 0x94A0 .hword 0x1567, 0x94A0 .hword 0x1567, 0x94A0 .hword 0x158B, 0x93FC .hword 0x158B, 0x93FC .hword 0x14B1, 0x93FC .hword 0x13E9, 0x93FC .hword 0x13D7, 0x93FC .hword 0x13D7, 0x93FC .hword 0x140D, 0x9346 .hword 0x1444, 0x9321 .hword 0x1444, 0x9321 .hword 0x14E8, 0x9321 .hword 0x14E8, 0x9321 .hword 0x15B0, 0x9321 .hword 0x162F, 0x9321 .hword 0x162F, 0x9321 .hword 0x16E5, 0x92FD .hword 0x172E, 0x927E .hword 0x172E, 0x927E .hword 0x1678, 0x926B .hword 0x1579, 0x927E .hword 0x149F, 0x927E .hword 0x149F, 0x927E .hword 0x149F, 0x927E .hword 0x13D7, 0x927E .hword 0x137C, 0x927E .hword 0x137C, 0x927E .hword 0x1320, 0x9334 .hword 0x130E, 0x937D .hword 0x130E, 0x937D .hword 0x12C5, 0x9433 .hword 0x127D, 0x9531 .hword 0x1234, 0x95FA .hword 0x1234, 0x9630 .hword 0x5234, 0x9630 .hword 0x513C, 0x9630 .hword 0x5045, 0x9630 .hword 0x4F4D, 0x9630 .hword 0x4E56, 0x9630 .hword 0x4D5E, 0x9630 .hword 0x4C67, 0x9630 .hword 0x4B6F, 0x9630 .hword 0x4A78, 0x9630 .hword 0x4980, 0x9630 .hword 0x4889, 0x9630 .hword 0x4791, 0x9630 .hword 0x469A, 0x9630 .hword 0x45A2, 0x9630 .hword 0x44AB, 0x9630 .hword 0x43B3, 0x9630 .hword 0x42BC, 0x9630 .hword 0x41C4, 0x9630 .hword 0x40CD, 0x9630 .hword 0xDFD6, 0x9630 .hword 0xDEDF, 0x9630 .hword 0xDDE7, 0x9630 .hword 0xDCF0, 0x9630 .hword 0xDBF8, 0x9630 .hword 0xDB01, 0x9630 .hword 0xDA09, 0x9630 .hword 0xD912, 0x9630 .hword 0xD81A, 0x9630 .hword 0xD723, 0x9630 .hword 0xD62B, 0x9630 .hword 0xD534, 0x9630 .hword 0xD43C, 0x9630 .hword 0xD345, 0x9630 .hword 0xD24D, 0x9630 .hword 0xD156, 0x9630 .hword 0xD05E, 0x9630 .hword 0xCF67, 0x9630 .hword 0xCE70, 0x9630 .hword 0xFFFF, 0xFFFF ;End of Loop - Blank+Color7 DSPEngine: .hword 0xD0A4, 0x94A0 .hword 0x9092, 0x95C3 .hword 0x90A4, 0x96B0 .hword 0x90A4, 0x97F7 .hword 0x9092, 0x98C0 .hword 0x90A4, 0x98E4 .hword 0x90A4, 0x98E4 .hword 0x917F, 0x98E4 .hword 0x9259, 0x98C0 .hword 0x92C6, 0x989B .hword 0x92C6, 0x989B .hword 0x9358, 0x97E5 .hword 0x938F, 0x96E6 .hword 0x937D, 0x95FA .hword 0x936A, 0x95C3 .hword 0x936A, 0x95C3 .hword 0x930F, 0x950D .hword 0x92D9, 0x94D6 .hword 0x92D9, 0x94D6 .hword 0x91FE, 0x948E .hword 0x90FF, 0x948E .hword 0x90A4, 0x94A0 .hword 0xD0A4, 0x94A0 .hword 0xD0A4, 0x94A0 .hword 0xD0A4, 0x94A0 .hword 0xD0A4, 0x94A0 .hword 0xD0A4, 0x94A0 .hword 0xD0A4, 0x94A0 .hword 0xD0A4, 0x94A0 .hword 0xD0A4, 0x94A0 .hword 0xD0A4, 0x94A0 .hword 0xD0DB, 0x94C4 .hword 0x90C9, 0x95D5 .hword 0x90DB, 0x96B0 .hword 0x90DB, 0x97D3 .hword 0x90DB, 0x989B .hword 0x90DB, 0x98C0 .hword 0x90DB, 0x98C0 .hword 0x9191, 0x98AD .hword 0x9247, 0x9877 .hword 0x92A2, 0x9852 .hword 0x92A2, 0x9852 .hword 0x9334, 0x9766 .hword 0x9358, 0x96B0 .hword 0x9334, 0x95E7 .hword 0x92D9, 0x9544 .hword 0x92A2, 0x950D .hword 0x92A2, 0x950D .hword 0x91EC, 0x94C4 .hword 0x9124, 0x94B2 .hword 0x90DB, 0x94C4 .hword 0xD0DB, 0x94C4 .hword 0xD0DB, 0x94C4 .hword 0xD0DB, 0x94C4 .hword 0xD0DB, 0x94C4 .hword 0xD0DB, 0x94C4 .hword 0xD19B, 0x9563 .hword 0xD25C, 0x9603 .hword 0xD31D, 0x96A2 .hword 0xD3DD, 0x9742 .hword 0xD49E, 0x97E1 .hword 0xD49E, 0x97E1 .hword 0xD49E, 0x97E1 .hword 0xD49E, 0x97E1 .hword 0xD49E, 0x97E1 .hword 0xD4FB, 0x982E .hword 0x94FB, 0x9852 .hword 0x94FB, 0x9852 .hword 0x95B1, 0x98AD .hword 0x968B, 0x98D2 .hword 0x970B, 0x98D2 .hword 0x970B, 0x98D2 .hword 0x97C1, 0x9865 .hword 0x97E5, 0x979C .hword 0x97C1, 0x9741 .hword 0x97C1, 0x9741 .hword 0x971D, 0x96B0 .hword 0x9642, 0x9679 .hword 0x95FA, 0x9655 .hword 0x95FA, 0x9655 .hword 0x9568, 0x95D5 .hword 0x9544, 0x9544 .hword 0x9544, 0x9544 .hword 0x95D5, 0x94D6 .hword 0x95D5, 0x94D6 .hword 0x969E, 0x94C4 .hword 0x9741, 0x94FB .hword 0x9741, 0x94FB .hword 0x97F7, 0x9544 .hword 0x97F7, 0x9544 .hword 0x9766, 0x94B2 .hword 0x96B0, 0x948E .hword 0x95FA, 0x94A0 .hword 0x95C3, 0x94B2 .hword 0x95C3, 0x94B2 .hword 0x950D, 0x94FB .hword 0x94FB, 0x9556 .hword 0x94FB, 0x9556 .hword 0x951F, 0x960C .hword 0x959F, 0x9667 .hword 0x959F, 0x9667 .hword 0x9667, 0x96B0 .hword 0x972F, 0x970B .hword 0x978A, 0x9766 .hword 0x978A, 0x9766 .hword 0x978A, 0x982E .hword 0x96D4, 0x989B .hword 0x9667, 0x98AD .hword 0x9667, 0x98AD .hword 0x959F, 0x9852 .hword 0x94FB, 0x982E .hword 0xD4FB, 0x982E .hword 0xD4FB, 0x982E .hword 0xD4FB, 0x982E .hword 0xD4FB, 0x982E .hword 0xD4FB, 0x982E .hword 0xD5B8, 0x978B .hword 0xD675, 0x96E8 .hword 0xD733, 0x9645 .hword 0xD7F0, 0x95A1 .hword 0xD8AD, 0x94FE .hword 0xD8AD, 0x94FE .hword 0xD8AD, 0x94FE .hword 0xD8AD, 0x94FE .hword 0xD8AD, 0x94FE .hword 0xD91B, 0x94A0 .hword 0x9908, 0x95B1 .hword 0x991B, 0x969E .hword 0x991B, 0x97E5 .hword 0x991B, 0x98AD .hword 0x991B, 0x98D2 .hword 0x991B, 0x98D2 .hword 0x9951, 0x98D2 .hword 0x9951, 0x98D2 .hword 0x9951, 0x97D3 .hword 0x9951, 0x96F9 .hword 0x9951, 0x96E6 .hword 0x9951, 0x96E6 .hword 0x9A2C, 0x96E6 .hword 0x9AF4, 0x96D4 .hword 0x9B98, 0x96B0 .hword 0x9B98, 0x96B0 .hword 0x9C05, 0x95E7 .hword 0x9BF3, 0x9531 .hword 0x9B98, 0x94C4 .hword 0x9B98, 0x94C4 .hword 0x9AE2, 0x94A0 .hword 0x9A99, 0x94A0 .hword 0x9A99, 0x94A0 .hword 0x99D1, 0x94A0 .hword 0x991B, 0x94A0 .hword 0xD91B, 0x94A0 .hword 0xD91B, 0x94A0 .hword 0xD91B, 0x94A0 .hword 0xD91B, 0x94A0 .hword 0xD91B, 0x94A0 .hword 0xD91B, 0x94A0 .hword 0xD91B, 0x94A0 .hword 0xD91B, 0x94A0 .hword 0xD91B, 0x94A0 .hword 0xD951, 0x94C4 .hword 0x9951, 0x95B1 .hword 0x9951, 0x9679 .hword 0x9951, 0x96C2 .hword 0x9951, 0x96C2 .hword 0x9A1A, 0x96C2 .hword 0x9AF4, 0x969E .hword 0x9B61, 0x9679 .hword 0x9B61, 0x9679 .hword 0x9BBC, 0x95C3 .hword 0x9B86, 0x950D .hword 0x9B86, 0x950D .hword 0x9B06, 0x94D6 .hword 0x9B06, 0x94D6 .hword 0x9A50, 0x94B2 .hword 0x9976, 0x94B2 .hword 0x9951, 0x94C4 .hword 0xD951, 0x94C4 .hword 0xD951, 0x94C4 .hword 0xD951, 0x94C4 .hword 0xD951, 0x94C4 .hword 0xD951, 0x94C4 .hword 0xDA4B, 0x94C0 .hword 0xDB45, 0x94BC .hword 0xDC3F, 0x94B8 .hword 0xDD39, 0x94B4 .hword 0xDE33, 0x94AF .hword 0xDF2D, 0x94AB .hword 0x4026, 0x94A7 .hword 0x4120, 0x94A3 .hword 0x4120, 0x94A3 .hword 0x4120, 0x94A3 .hword 0x4120, 0x94A3 .hword 0x4120, 0x94A3 .hword 0x41C7, 0x94A0 .hword 0x01B4, 0x95C3 .hword 0x01C7, 0x96B0 .hword 0x01C7, 0x97F7 .hword 0x01C7, 0x98C0 .hword 0x01C7, 0x98E4 .hword 0x01C7, 0x98E4 .hword 0x027D, 0x98D2 .hword 0x038E, 0x98E4 .hword 0x0456, 0x98E4 .hword 0x048D, 0x98E4 .hword 0x048D, 0x98E4 .hword 0x048D, 0x98C0 .hword 0x048D, 0x98C0 .hword 0x03D7, 0x98AD .hword 0x02D8, 0x98C0 .hword 0x01FD, 0x98C0 .hword 0x01FD, 0x98C0 .hword 0x01FD, 0x98C0 .hword 0x01FD, 0x97AF .hword 0x01FD, 0x96E6 .hword 0x01FD, 0x96B0 .hword 0x01FD, 0x96B0 .hword 0x02FC, 0x96B0 .hword 0x038E, 0x96B0 .hword 0x038E, 0x96B0 .hword 0x038E, 0x968B .hword 0x038E, 0x968B .hword 0x02C5, 0x968B .hword 0x01FD, 0x968B .hword 0x01FD, 0x968B .hword 0x01FD, 0x968B .hword 0x01FD, 0x959F .hword 0x01FD, 0x94D6 .hword 0x01FD, 0x94C4 .hword 0x01FD, 0x94C4 .hword 0x0333, 0x94C4 .hword 0x03FB, 0x94C4 .hword 0x048D, 0x94C4 .hword 0x048D, 0x94C4 .hword 0x048D, 0x94A0 .hword 0x048D, 0x94A0 .hword 0x03C4, 0x948E .hword 0x02B3, 0x94A0 .hword 0x01EB, 0x94A0 .hword 0x01C7, 0x94A0 .hword 0x41C7, 0x94A0 .hword 0x41C7, 0x94A0 .hword 0x41C7, 0x94A0 .hword 0x41C7, 0x94A0 .hword 0x41C7, 0x94A0 .hword 0x42C1, 0x94A0 .hword 0x43BB, 0x94A0 .hword 0x44B5, 0x94A0 .hword 0x45AF, 0x94A0 .hword 0x45AF, 0x94A0 .hword 0x45AF, 0x94A0 .hword 0x45AF, 0x94A0 .hword 0x45AF, 0x94A0 .hword 0x45B0, 0x94A0 .hword 0x059E, 0x95B1 .hword 0x05B0, 0x969E .hword 0x05B0, 0x97E5 .hword 0x05B0, 0x98AD .hword 0x05B0, 0x98D2 .hword 0x05B0, 0x98D2 .hword 0x05E6, 0x98D2 .hword 0x05E6, 0x98D2 .hword 0x05D4, 0x97C1 .hword 0x05E6, 0x96F9 .hword 0x05E6, 0x95E7 .hword 0x05E6, 0x951F .hword 0x05E6, 0x951F .hword 0x05E6, 0x951F .hword 0x05F9, 0x951F .hword 0x05F9, 0x951F .hword 0x0666, 0x95FA .hword 0x06F8, 0x96C2 .hword 0x0789, 0x979C .hword 0x07C0, 0x97E5 .hword 0x07C0, 0x97E5 .hword 0x082D, 0x9889 .hword 0x08AC, 0x98D2 .hword 0x08AC, 0x98D2 .hword 0x089A, 0x97AF .hword 0x08AC, 0x96C2 .hword 0x08AC, 0x957A .hword 0x08AC, 0x94B2 .hword 0x08AC, 0x94A0 .hword 0x08AC, 0x94A0 .hword 0x0876, 0x94A0 .hword 0x0876, 0x94A0 .hword 0x0864, 0x958C .hword 0x0876, 0x9655 .hword 0x0876, 0x9766 .hword 0x0864, 0x982E .hword 0x0876, 0x9840 .hword 0x0876, 0x9840 .hword 0x07D2, 0x9766 .hword 0x0740, 0x969E .hword 0x06C1, 0x95D5 .hword 0x069D, 0x959F .hword 0x069D, 0x959F .hword 0x0641, 0x94FB .hword 0x05B0, 0x94A0 .hword 0x45B0, 0x94A0 .hword 0x45B0, 0x94A0 .hword 0x45B0, 0x94A0 .hword 0x45B0, 0x94A0 .hword 0x45B0, 0x94A0 .hword 0x469C, 0x94F0 .hword 0x4789, 0x9541 .hword 0x4876, 0x9591 .hword 0x4963, 0x95E1 .hword 0x4A4F, 0x9632 .hword 0x4B3C, 0x9682 .hword 0x4C29, 0x96D2 .hword 0x4D16, 0x9723 .hword 0x4D16, 0x9723 .hword 0x4D16, 0x9723 .hword 0x4D16, 0x9723 .hword 0x4D16, 0x9723 .hword 0x4D3A, 0x972F .hword 0x0C71, 0x972F .hword 0x0C16, 0x972F .hword 0x0C16, 0x972F .hword 0x0C16, 0x9754 .hword 0x0C16, 0x9754 .hword 0x0CDF, 0x9754 .hword 0x0D03, 0x9754 .hword 0x0D03, 0x9754 .hword 0x0CA8, 0x97F7 .hword 0x0CA8, 0x981C .hword 0x0CA8, 0x981C .hword 0x0C3B, 0x9877 .hword 0x0C3B, 0x9877 .hword 0x0B85, 0x98AD .hword 0x0ABC, 0x9840 .hword 0x0AAA, 0x981C .hword 0x0AAA, 0x981C .hword 0x0A4F, 0x9778 .hword 0x0A2B, 0x9679 .hword 0x0A61, 0x958C .hword 0x0AE1, 0x950D .hword 0x0AE1, 0x950D .hword 0x0B97, 0x94C4 .hword 0x0B97, 0x94C4 .hword 0x0C4D, 0x94FB .hword 0x0C83, 0x9531 .hword 0x0C83, 0x9531 .hword 0x0D3A, 0x95B1 .hword 0x0D3A, 0x95B1 .hword 0x0CDF, 0x94FB .hword 0x0CA8, 0x94D6 .hword 0x0CA8, 0x94D6 .hword 0x0BCD, 0x948E .hword 0x0B17, 0x94A0 .hword 0x0A98, 0x94FB .hword 0x0A98, 0x94FB .hword 0x0A06, 0x95B1 .hword 0x09F4, 0x9667 .hword 0x0A06, 0x972F .hword 0x0A06, 0x972F .hword 0x0A3D, 0x980A .hword 0x0ABC, 0x989B .hword 0x0AF3, 0x98C0 .hword 0x0AF3, 0x98C0 .hword 0x0BE0, 0x98D2 .hword 0x0C96, 0x9889 .hword 0x0D15, 0x980A .hword 0x0D15, 0x980A .hword 0x0D27, 0x9754 .hword 0x0D3A, 0x972F .hword 0x4D3A, 0x972F .hword 0x4D3A, 0x972F .hword 0x4D3A, 0x972F .hword 0x4D3A, 0x972F .hword 0x4D3A, 0x972F .hword 0x4DAE, 0x9652 .hword 0x4E23, 0x9575 .hword 0x4E23, 0x9575 .hword 0x4E23, 0x9575 .hword 0x4E23, 0x9575 .hword 0x4E23, 0x9575 .hword 0x4E93, 0x94A0 .hword 0x0E81, 0x95B1 .hword 0x0E93, 0x969E .hword 0x0E93, 0x97E5 .hword 0x0E93, 0x98AD .hword 0x0E93, 0x98D2 .hword 0x0E93, 0x98D2 .hword 0x0ECA, 0x98D2 .hword 0x0ECA, 0x98D2 .hword 0x0EB8, 0x97AF .hword 0x0ECA, 0x96C2 .hword 0x0ECA, 0x957A .hword 0x0ECA, 0x94B2 .hword 0x0ECA, 0x94A0 .hword 0x0ECA, 0x94A0 .hword 0x0E93, 0x94A0 .hword 0x4E93, 0x94A0 .hword 0x4E93, 0x94A0 .hword 0x4E93, 0x94A0 .hword 0x4E93, 0x94A0 .hword 0x4E93, 0x94A0 .hword 0x4F8D, 0x94A0 .hword 0x4F8D, 0x94A0 .hword 0x4F8D, 0x94A0 .hword 0x4F8D, 0x94A0 .hword 0x4F8D, 0x94A0 .hword 0x505B, 0x94A0 .hword 0x1048, 0x95B1 .hword 0x105B, 0x969E .hword 0x105B, 0x97E5 .hword 0x105B, 0x98AD .hword 0x105B, 0x98D2 .hword 0x105B, 0x98D2 .hword 0x1091, 0x98D2 .hword 0x1091, 0x98D2 .hword 0x107F, 0x97C1 .hword 0x1091, 0x96F9 .hword 0x1091, 0x95E7 .hword 0x107F, 0x951F .hword 0x1091, 0x951F .hword 0x1091, 0x951F .hword 0x10A3, 0x951F .hword 0x10A3, 0x951F .hword 0x1111, 0x95FA .hword 0x11A2, 0x96C2 .hword 0x1234, 0x979C .hword 0x126A, 0x97E5 .hword 0x126A, 0x97E5 .hword 0x12D8, 0x9889 .hword 0x1357, 0x98D2 .hword 0x1357, 0x98D2 .hword 0x1345, 0x97AF .hword 0x1357, 0x96C2 .hword 0x1357, 0x957A .hword 0x1357, 0x94B2 .hword 0x1357, 0x94A0 .hword 0x1357, 0x94A0 .hword 0x1320, 0x94A0 .hword 0x1320, 0x94A0 .hword 0x130E, 0x958C .hword 0x1320, 0x9655 .hword 0x1320, 0x9766 .hword 0x130E, 0x982E .hword 0x1320, 0x9840 .hword 0x1320, 0x9840 .hword 0x127D, 0x9766 .hword 0x11EB, 0x969E .hword 0x116C, 0x95D5 .hword 0x1147, 0x959F .hword 0x1147, 0x959F .hword 0x10EC, 0x94FB .hword 0x105B, 0x94A0 .hword 0x505B, 0x94A0 .hword 0x505B, 0x94A0 .hword 0x505B, 0x94A0 .hword 0x505B, 0x94A0 .hword 0x505B, 0x94A0 .hword 0x5155, 0x94A0 .hword 0x524F, 0x94A0 .hword 0x5349, 0x94A0 .hword 0x5443, 0x94A0 .hword 0x5443, 0x94A0 .hword 0x5443, 0x94A0 .hword 0x5443, 0x94A0 .hword 0x5443, 0x94A0 .hword 0x54E8, 0x94A0 .hword 0x14D5, 0x95C3 .hword 0x14E8, 0x96B0 .hword 0x14E8, 0x97F7 .hword 0x14E8, 0x98C0 .hword 0x14E8, 0x98E4 .hword 0x14E8, 0x98E4 .hword 0x159E, 0x98D2 .hword 0x16AF, 0x98E4 .hword 0x1777, 0x98E4 .hword 0x17AE, 0x98E4 .hword 0x17AE, 0x98E4 .hword 0x17AE, 0x98C0 .hword 0x17AE, 0x98C0 .hword 0x16F8, 0x98AD .hword 0x15F9, 0x98C0 .hword 0x151E, 0x98C0 .hword 0x151E, 0x98C0 .hword 0x151E, 0x98C0 .hword 0x151E, 0x97AF .hword 0x151E, 0x96E6 .hword 0x151E, 0x96B0 .hword 0x151E, 0x96B0 .hword 0x161D, 0x96B0 .hword 0x16AF, 0x96B0 .hword 0x16AF, 0x96B0 .hword 0x16AF, 0x968B .hword 0x16AF, 0x968B .hword 0x15E6, 0x968B .hword 0x151E, 0x968B .hword 0x151E, 0x968B .hword 0x151E, 0x968B .hword 0x151E, 0x959F .hword 0x151E, 0x94D6 .hword 0x151E, 0x94C4 .hword 0x151E, 0x94C4 .hword 0x1654, 0x94C4 .hword 0x171C, 0x94C4 .hword 0x17AE, 0x94C4 .hword 0x17AE, 0x94C4 .hword 0x17AE, 0x94A0 .hword 0x17AE, 0x94A0 .hword 0x16E5, 0x948E .hword 0x15D4, 0x94A0 .hword 0x150C, 0x94A0 .hword 0x14E8, 0x94A0 .hword 0x54E8, 0x94A0 .hword 0x53F2, 0x94A0 .hword 0x52FD, 0x94A0 .hword 0x5207, 0x94A0 .hword 0x5112, 0x94A0 .hword 0x501C, 0x94A0 .hword 0x4F27, 0x94A0 .hword 0x4E31, 0x94A0 .hword 0x4D3C, 0x94A0 .hword 0x4C46, 0x94A0 .hword 0x4B51, 0x94A0 .hword 0x4A5B, 0x94A0 .hword 0x4966, 0x94A0 .hword 0x4870, 0x94A0 .hword 0x477B, 0x94A0 .hword 0x4685, 0x94A0 .hword 0x4590, 0x94A0 .hword 0x449A, 0x94A0 .hword 0x43A5, 0x94A0 .hword 0x42AF, 0x94A0 .hword 0x41BA, 0x94A0 .hword 0x40C4, 0x94A0 .hword 0xDFCF, 0x94A0 .hword 0xDEDA, 0x94A0 .hword 0xDDE4, 0x94A0 .hword 0xDCEF, 0x94A0 .hword 0xDBF9, 0x94A0 .hword 0xDB04, 0x94A0 .hword 0xDA0E, 0x94A0 .hword 0xD919, 0x94A0 .hword 0xD823, 0x94A0 .hword 0xD72E, 0x94A0 .hword 0xD638, 0x94A0 .hword 0xD543, 0x94A0 .hword 0xD44D, 0x94A0 .hword 0xD358, 0x94A0 .hword 0xD262, 0x94A0 .hword 0xD16D, 0x94A0 .hword 0xD080, 0x94A0 .hword 0xFFFF, 0xFFFF ;End of Loop - Blank+Color7 ;Niagara College Logo NiagaraCollegeLogo: .hword 0xDF38, 0x8A1A .hword 0x9E0C, 0x8A39 .hword 0x9CE0, 0x8A75 .hword 0x9B4F, 0x8AD0 .hword 0x9A1A, 0x8B18 .hword 0x9908, 0x8B86 .hword 0x97E5, 0x8C05 .hword 0x96D4, 0x8C97 .hword 0x95D5, 0x8D28 .hword 0x94C4, 0x8DCC .hword 0x93D8, 0x8E82 .hword 0x92EB, 0x8F4A .hword 0x91FE, 0x9025 .hword 0x9136, 0x9112 .hword 0x9136, 0x9112 .hword 0x9080, 0x91C8 .hword 0x8FEE, 0x92A2 .hword 0x8F5D, 0x937D .hword 0x8ECB, 0x9457 .hword 0x8E5E, 0x9544 .hword 0x8E5E, 0x9544 .hword 0x8D96, 0x96D4 .hword 0x8D04, 0x9877 .hword 0x8C84, 0x9A2C .hword 0x8C3C, 0x9BF3 .hword 0x8C17, 0x9DBA .hword 0x8C17, 0x9DBA .hword 0x8C05, 0x9FA5 .hword 0x8C29, 0x0190 .hword 0x8C84, 0x037C .hword 0x8D16, 0x0555 .hword 0x8DCC, 0x072E .hword 0x8EA7, 0x08E3 .hword 0x8FA5, 0x0A98 .hword 0x90DB, 0x0C28 .hword 0x9223, 0x0D95 .hword 0x93A1, 0x0EEE .hword 0x93A1, 0x0EEE .hword 0x94FB, 0x0FED .hword 0x9642, 0x10B6 .hword 0x979C, 0x117E .hword 0x9908, 0x1234 .hword 0x9908, 0x1234 .hword 0x9A1A, 0x128F .hword 0x9B3D, 0x12EA .hword 0x9C60, 0x1320 .hword 0x9D83, 0x1357 .hword 0x9EA7, 0x1369 .hword 0x9FDC, 0x137C .hword 0x00FE, 0x137C .hword 0x0234, 0x1369 .hword 0x0357, 0x1357 .hword 0x048D, 0x1333 .hword 0x048D, 0x1333 .hword 0x060B, 0x12D8 .hword 0x079B, 0x126A .hword 0x092C, 0x11C7 .hword 0x0A98, 0x1111 .hword 0x0C04, 0x1048 .hword 0x0C04, 0x1048 .hword 0x0DA7, 0x0F13 .hword 0x0F37, 0x0DB9 .hword 0x10A3, 0x0C4D .hword 0x11D9, 0x0ABC .hword 0x126A, 0x09E2 .hword 0x12FC, 0x0907 .hword 0x12FC, 0x0907 .hword 0x13B2, 0x0765 .hword 0x1456, 0x05C2 .hword 0x14D5, 0x040D .hword 0x1530, 0x0258 .hword 0x1567, 0x0091 .hword 0x158B, 0x9EDD .hword 0x1579, 0x9D16 .hword 0x1543, 0x9B4F .hword 0x14E8, 0x999A .hword 0x147A, 0x97F7 .hword 0x147A, 0x97F7 .hword 0x140D, 0x96D4 .hword 0x13A0, 0x95D5 .hword 0x130E, 0x94D6 .hword 0x127D, 0x93D8 .hword 0x11D9, 0x92EB .hword 0x11D9, 0x92EB .hword 0x1123, 0x91DA .hword 0x105B, 0x90ED .hword 0x0F92, 0x9013 .hword 0x0EB8, 0x8F38 .hword 0x0DDD, 0x8E82 .hword 0x0DDD, 0x8E82 .hword 0x0D27, 0x8E03 .hword 0x0C83, 0x8D83 .hword 0x0BCD, 0x8D16 .hword 0x0B2A, 0x8CBB .hword 0x0A74, 0x8C60 .hword 0x09BE, 0x8C05 .hword 0x08F5, 0x8BAA .hword 0x083F, 0x8B61 .hword 0x0777, 0x8B18 .hword 0x06C1, 0x8AE2 .hword 0x06C1, 0x8AE2 .hword 0x058B, 0x8A99 .hword 0x0468, 0x8A62 .hword 0x0357, 0x8A2C .hword 0x0234, 0x8A1A .hword 0x0111, 0x8A1A .hword 0x0111, 0x8A1A .hword 0x0048, 0x8A07 .hword 0x9F5D, 0x8A07 .hword 0x9F38, 0x8A1A .hword 0xDF38, 0x8A1A .hword 0xDF38, 0x8A1A .hword 0xDF38, 0x8A1A .hword 0xDF38, 0x8A1A .hword 0xDF38, 0x8A1A .hword 0xDFAE, 0x8AF6 .hword 0x4023, 0x8BD2 .hword 0x4099, 0x8CAF .hword 0x4099, 0x8CAF .hword 0x4099, 0x8CAF .hword 0x4099, 0x8CAF .hword 0x4099, 0x8CAF .hword 0x40DA, 0x8D28 .hword 0x0000, 0x8D28 .hword 0x9FCA, 0x8D3B .hword 0x9FCA, 0x8D3B .hword 0x9FEE, 0x8DDE .hword 0x9FEE, 0x8DDE .hword 0x9F93, 0x8E82 .hword 0x9F14, 0x8E70 .hword 0x9F14, 0x8E70 .hword 0x9EA7, 0x8DBA .hword 0x9E94, 0x8D04 .hword 0x9E94, 0x8D04 .hword 0x9EDD, 0x8C3C .hword 0x9FA5, 0x8BF3 .hword 0x9FA5, 0x8BF3 .hword 0x005B, 0x8C05 .hword 0x005B, 0x8C05 .hword 0x005B, 0x8B73 .hword 0x005B, 0x8B73 .hword 0x9F93, 0x8B61 .hword 0x9EEF, 0x8B86 .hword 0x9EEF, 0x8B86 .hword 0x9E39, 0x8BCE .hword 0x9DBA, 0x8C60 .hword 0x9DBA, 0x8C60 .hword 0x9D71, 0x8D16 .hword 0x9D96, 0x8DDE .hword 0x9E03, 0x8E94 .hword 0x9E39, 0x8ECB .hword 0x9E39, 0x8ECB .hword 0x9F02, 0x8F26 .hword 0x9F02, 0x8F26 .hword 0x9FCA, 0x8F26 .hword 0x005B, 0x8F14 .hword 0x005B, 0x8F14 .hword 0x00EC, 0x8EB9 .hword 0x00EC, 0x8EB9 .hword 0x00EC, 0x8E39 .hword 0x00EC, 0x8E39 .hword 0x00DA, 0x8D83 .hword 0x00DA, 0x8D28 .hword 0x40DA, 0x8D28 .hword 0x40DA, 0x8D28 .hword 0x40DA, 0x8D28 .hword 0x40DA, 0x8D28 .hword 0x40DA, 0x8D28 .hword 0x41D2, 0x8D0D .hword 0x42CB, 0x8CF1 .hword 0x43C3, 0x8CD6 .hword 0x43C3, 0x8CD6 .hword 0x43C3, 0x8CD6 .hword 0x43C3, 0x8CD6 .hword 0x43C3, 0x8CD6 .hword 0x440D, 0x8CCD .hword 0x03A0, 0x8D71 .hword 0x038E, 0x8DA8 .hword 0x038E, 0x8DA8 .hword 0x0444, 0x8DDE .hword 0x0444, 0x8DDE .hword 0x041F, 0x8D28 .hword 0x040D, 0x8CCD .hword 0x440D, 0x8CCD .hword 0x440D, 0x8CCD .hword 0x440D, 0x8CCD .hword 0x440D, 0x8CCD .hword 0x440D, 0x8CCD .hword 0x43D1, 0x8BDB .hword 0x43D1, 0x8BDB .hword 0x43D1, 0x8BDB .hword 0x43D1, 0x8BDB .hword 0x43D1, 0x8BDB .hword 0x43C4, 0x8BAA .hword 0x037C, 0x8C72 .hword 0x0357, 0x8CCD .hword 0x0357, 0x8CCD .hword 0x02EA, 0x8D83 .hword 0x027D, 0x8E4C .hword 0x027D, 0x8E4C .hword 0x020F, 0x8EEF .hword 0x020F, 0x8F14 .hword 0x020F, 0x8F14 .hword 0x02C5, 0x8F26 .hword 0x02FC, 0x8F38 .hword 0x02FC, 0x8F38 .hword 0x030E, 0x8E70 .hword 0x0333, 0x8E4C .hword 0x0333, 0x8E4C .hword 0x040D, 0x8E4C .hword 0x0468, 0x8E94 .hword 0x0468, 0x8E94 .hword 0x0468, 0x8F5D .hword 0x0468, 0x8F81 .hword 0x0468, 0x8F81 .hword 0x0543, 0x8FA5 .hword 0x05C2, 0x8FCA .hword 0x05C2, 0x8FCA .hword 0x05D4, 0x8FB8 .hword 0x05D4, 0x8FB8 .hword 0x059E, 0x8EEF .hword 0x0567, 0x8DDE .hword 0x0530, 0x8D16 .hword 0x0530, 0x8CF2 .hword 0x0530, 0x8CF2 .hword 0x04FA, 0x8C3C .hword 0x04E8, 0x8BF3 .hword 0x04E8, 0x8BF3 .hword 0x041F, 0x8BBC .hword 0x03C4, 0x8BAA .hword 0x43C4, 0x8BAA .hword 0x43C4, 0x8BAA .hword 0x43C4, 0x8BAA .hword 0x43C4, 0x8BAA .hword 0x43C4, 0x8BAA .hword 0x44B4, 0x8BF2 .hword 0x45A3, 0x8C3A .hword 0x4692, 0x8C83 .hword 0x4782, 0x8CCB .hword 0x4782, 0x8CCB .hword 0x4782, 0x8CCB .hword 0x4782, 0x8CCB .hword 0x4782, 0x8CCB .hword 0x483F, 0x8D04 .hword 0x0809, 0x8DBA .hword 0x07D2, 0x8E39 .hword 0x07D2, 0x8E39 .hword 0x0777, 0x8EDD .hword 0x0753, 0x8F5D .hword 0x0753, 0x8F5D .hword 0x06D3, 0x8FEE .hword 0x06AF, 0x9013 .hword 0x06AF, 0x9013 .hword 0x0753, 0x9092 .hword 0x07F6, 0x90C9 .hword 0x07F6, 0x90C9 .hword 0x0809, 0x9013 .hword 0x0876, 0x8F93 .hword 0x0876, 0x8F93 .hword 0x0864, 0x9049 .hword 0x089A, 0x90FF .hword 0x089A, 0x90FF .hword 0x093E, 0x9191 .hword 0x09E2, 0x91DA .hword 0x09E2, 0x91DA .hword 0x09AB, 0x9124 .hword 0x0987, 0x906E .hword 0x0987, 0x906E .hword 0x0975, 0x8FCA .hword 0x0975, 0x8FCA .hword 0x09F4, 0x8F81 .hword 0x09F4, 0x8F81 .hword 0x0A74, 0x8F02 .hword 0x0A74, 0x8F02 .hword 0x0A4F, 0x8E15 .hword 0x0987, 0x8D83 .hword 0x092C, 0x8D5F .hword 0x092C, 0x8D5F .hword 0x0888, 0x8D04 .hword 0x083F, 0x8D04 .hword 0x483F, 0x8D04 .hword 0x483F, 0x8D04 .hword 0x483F, 0x8D04 .hword 0x483F, 0x8D04 .hword 0x483F, 0x8D04 .hword 0x48D9, 0x8DC8 .hword 0x48D9, 0x8DC8 .hword 0x48D9, 0x8DC8 .hword 0x48D9, 0x8DC8 .hword 0x48D9, 0x8DC8 .hword 0x4907, 0x8E03 .hword 0x08BF, 0x8E94 .hword 0x08BF, 0x8E94 .hword 0x08AC, 0x8ECB .hword 0x08AC, 0x8ECB .hword 0x0907, 0x8F14 .hword 0x0907, 0x8F14 .hword 0x0975, 0x8E5E .hword 0x0950, 0x8E15 .hword 0x0950, 0x8E15 .hword 0x0907, 0x8E03 .hword 0x4907, 0x8E03 .hword 0x4907, 0x8E03 .hword 0x4907, 0x8E03 .hword 0x4907, 0x8E03 .hword 0x4907, 0x8E03 .hword 0x49E8, 0x8E71 .hword 0x4AC8, 0x8EDF .hword 0x4BA8, 0x8F4E .hword 0x4C89, 0x8FBC .hword 0x4D69, 0x902B .hword 0x4D69, 0x902B .hword 0x4D69, 0x902B .hword 0x4D69, 0x902B .hword 0x4D69, 0x902B .hword 0x4D82, 0x9037 .hword 0x0CDF, 0x90B7 .hword 0x0CA8, 0x90ED .hword 0x0CA8, 0x90ED .hword 0x0BF2, 0x9148 .hword 0x0B3C, 0x91B5 .hword 0x0A86, 0x9210 .hword 0x0A4F, 0x9223 .hword 0x0A4F, 0x9223 .hword 0x0AE1, 0x92B4 .hword 0x0B05, 0x92D9 .hword 0x0B05, 0x92D9 .hword 0x0B72, 0x9235 .hword 0x0BBB, 0x9235 .hword 0x0BBB, 0x9235 .hword 0x0C5F, 0x92B4 .hword 0x0C83, 0x930F .hword 0x0C83, 0x930F .hword 0x0C04, 0x93A1 .hword 0x0C04, 0x93B3 .hword 0x0C04, 0x93B3 .hword 0x0CBA, 0x9457 .hword 0x0D27, 0x94C4 .hword 0x0D27, 0x94C4 .hword 0x0D3A, 0x940E .hword 0x0D3A, 0x940E .hword 0x0D82, 0x9334 .hword 0x0DCB, 0x927E .hword 0x0E26, 0x9191 .hword 0x0E6F, 0x90ED .hword 0x0E6F, 0x90ED .hword 0x0DCB, 0x906E .hword 0x0D82, 0x9037 .hword 0x4D82, 0x9037 .hword 0x4D82, 0x9037 .hword 0x4D82, 0x9037 .hword 0x4D82, 0x9037 .hword 0x4D82, 0x9037 .hword 0x4D49, 0x912A .hword 0x4D49, 0x912A .hword 0x4D49, 0x912A .hword 0x4D49, 0x912A .hword 0x4D49, 0x912A .hword 0x4D3A, 0x916D .hword 0x0CCC, 0x916D .hword 0x0CCC, 0x916D .hword 0x0C5F, 0x91C8 .hword 0x0C5F, 0x91C8 .hword 0x0CDF, 0x9223 .hword 0x0CDF, 0x9223 .hword 0x0D03, 0x91DA .hword 0x0D03, 0x91DA .hword 0x0D3A, 0x916D .hword 0x4D3A, 0x916D .hword 0x4D3A, 0x916D .hword 0x4D3A, 0x916D .hword 0x4D3A, 0x916D .hword 0x4D3A, 0x916D .hword 0x4CB8, 0x9242 .hword 0x4C35, 0x9317 .hword 0x4BB3, 0x93ED .hword 0x4BB3, 0x93ED .hword 0x4BB3, 0x93ED .hword 0x4BB3, 0x93ED .hword 0x4BB3, 0x93ED .hword 0x4B72, 0x9457 .hword 0x4B72, 0x9457 .hword 0x4B72, 0x9457 .hword 0x4B72, 0x9457 .hword 0x4B72, 0x9457 .hword 0x4B72, 0x9457 .hword 0x4A86, 0x9406 .hword 0x4999, 0x93B5 .hword 0x48AD, 0x9364 .hword 0x47C0, 0x9314 .hword 0x46D4, 0x92C3 .hword 0x45E7, 0x9272 .hword 0x44FB, 0x9221 .hword 0x440E, 0x91D0 .hword 0x4321, 0x917F .hword 0x4235, 0x912F .hword 0x4148, 0x90DE .hword 0x405C, 0x908D .hword 0x405C, 0x908D .hword 0x405C, 0x908D .hword 0x405C, 0x908D .hword 0x405C, 0x908D .hword 0x4036, 0x9080 .hword 0x9F5D, 0x9092 .hword 0x9DA8, 0x90C9 .hword 0x9DA8, 0x90C9 .hword 0x9CCD, 0x90ED .hword 0x9B3D, 0x917F .hword 0x99BF, 0x9235 .hword 0x9852, 0x9321 .hword 0x971D, 0x9433 .hword 0x968B, 0x94C4 .hword 0x968B, 0x94C4 .hword 0x959F, 0x95B1 .hword 0x94D6, 0x96C2 .hword 0x9433, 0x97D3 .hword 0x93A1, 0x98F6 .hword 0x9334, 0x9A2C .hword 0x92D9, 0x9B73 .hword 0x9290, 0x9CA9 .hword 0x927E, 0x9DF1 .hword 0x926B, 0x9F38 .hword 0x9290, 0x0091 .hword 0x9290, 0x0091 .hword 0x92B4, 0x0159 .hword 0x92EB, 0x0234 .hword 0x9346, 0x0357 .hword 0x93C5, 0x04C3 .hword 0x948E, 0x062F .hword 0x948E, 0x062F .hword 0x9544, 0x0753 .hword 0x9630, 0x0864 .hword 0x972F, 0x0962 .hword 0x9840, 0x0A3D .hword 0x9976, 0x0B17 .hword 0x9976, 0x0B17 .hword 0x9AAB, 0x0BBB .hword 0x9C05, 0x0C4D .hword 0x9D5F, 0x0CBA .hword 0x9ECB, 0x0CF1 .hword 0x0048, 0x0D27 .hword 0x0048, 0x0D27 .hword 0x01EB, 0x0D03 .hword 0x030E, 0x0CDF .hword 0x03B2, 0x0CBA .hword 0x0530, 0x0C4D .hword 0x069D, 0x0BBB .hword 0x0765, 0x0B60 .hword 0x0765, 0x0B60 .hword 0x083F, 0x0ACF .hword 0x0907, 0x0A3D .hword 0x09D0, 0x0999 .hword 0x0A98, 0x08F5 .hword 0x0B4E, 0x082D .hword 0x0BF2, 0x0765 .hword 0x0C96, 0x069D .hword 0x0D27, 0x05C2 .hword 0x0DA7, 0x04D5 .hword 0x0E14, 0x03FB .hword 0x0E14, 0x03FB .hword 0x0E81, 0x028F .hword 0x0EDC, 0x0123 .hword 0x0F01, 0x9FB8 .hword 0x0F13, 0x9E27 .hword 0x0EEE, 0x9C72 .hword 0x0EA6, 0x9AE2 .hword 0x0EA6, 0x9AE2 .hword 0x0E26, 0x9963 .hword 0x0D82, 0x97F7 .hword 0x0CA8, 0x969E .hword 0x0BBB, 0x9568 .hword 0x0ABC, 0x9457 .hword 0x09E2, 0x93A1 .hword 0x08F5, 0x92FD .hword 0x081B, 0x927E .hword 0x072E, 0x91FE .hword 0x0641, 0x91A3 .hword 0x0555, 0x9148 .hword 0x0468, 0x90FF .hword 0x02A1, 0x90A4 .hword 0x01C7, 0x9092 .hword 0x0111, 0x906E .hword 0x0036, 0x9080 .hword 0x4036, 0x9080 .hword 0x4036, 0x9080 .hword 0x4036, 0x9080 .hword 0x4036, 0x9080 .hword 0x4036, 0x9080 .hword 0xDF53, 0x901A .hword 0xDE6F, 0x8FB4 .hword 0xDD8A, 0x8F4E .hword 0xDCA6, 0x8EE8 .hword 0xDBC2, 0x8E82 .hword 0xDADE, 0x8E1C .hword 0xDADE, 0x8E1C .hword 0xDADE, 0x8E1C .hword 0xDADE, 0x8E1C .hword 0xDADE, 0x8E1C .hword 0xDA2C, 0x8DCC .hword 0x9A3E, 0x8E94 .hword 0x9A3E, 0x8E94 .hword 0x9AD0, 0x8E94 .hword 0x9AD0, 0x8E94 .hword 0x9A62, 0x8DF1 .hword 0x9A2C, 0x8DCC .hword 0xDA2C, 0x8DCC .hword 0xDA2C, 0x8DCC .hword 0xDA2C, 0x8DCC .hword 0xDA2C, 0x8DCC .hword 0xDA2C, 0x8DCC .hword 0xD983, 0x8D14 .hword 0xD983, 0x8D14 .hword 0xD983, 0x8D14 .hword 0xD983, 0x8D14 .hword 0xD983, 0x8D14 .hword 0xD963, 0x8CF2 .hword 0x9988, 0x8DA8 .hword 0x999A, 0x8E82 .hword 0x99AC, 0x8EEF .hword 0x99AC, 0x8EEF .hword 0x99AC, 0x8FCA .hword 0x99AC, 0x9000 .hword 0x99AC, 0x9000 .hword 0x99AC, 0x90B7 .hword 0x99AC, 0x90B7 .hword 0x9A62, 0x906E .hword 0x9A87, 0x906E .hword 0x9A87, 0x906E .hword 0x9A3E, 0x8FA5 .hword 0x9A50, 0x8F6F .hword 0x9A50, 0x8F6F .hword 0x9AD0, 0x8F26 .hword 0x9AD0, 0x8F26 .hword 0x9B2B, 0x8F02 .hword 0x9B2B, 0x8F02 .hword 0x9BBC, 0x8F81 .hword 0x9BE1, 0x8FDC .hword 0x9BE1, 0x8FDC .hword 0x9CA9, 0x8F93 .hword 0x9D3B, 0x8F4A .hword 0x9D3B, 0x8F4A .hword 0x9CA9, 0x8ECB .hword 0x9C60, 0x8E94 .hword 0x9C60, 0x8E94 .hword 0x9BCE, 0x8DF1 .hword 0x9B4F, 0x8D5F .hword 0x9B3D, 0x8D4D .hword 0x9B3D, 0x8D4D .hword 0x9AAB, 0x8CCD .hword 0x9A75, 0x8C97 .hword 0x9A75, 0x8C97 .hword 0x99BF, 0x8CCD .hword 0x9963, 0x8CF2 .hword 0xD963, 0x8CF2 .hword 0xD963, 0x8CF2 .hword 0xD963, 0x8CF2 .hword 0xD963, 0x8CF2 .hword 0xD963, 0x8CF2 .hword 0xD883, 0x8D5F .hword 0xD7A2, 0x8DCD .hword 0xD6C1, 0x8E3A .hword 0xD6C1, 0x8E3A .hword 0xD6C1, 0x8E3A .hword 0xD6C1, 0x8E3A .hword 0xD6C1, 0x8E3A .hword 0xD69E, 0x8E4C .hword 0x95E7, 0x8ECB .hword 0x958C, 0x8F26 .hword 0x958C, 0x8F26 .hword 0x9630, 0x8FA5 .hword 0x9679, 0x9013 .hword 0x9679, 0x9013 .hword 0x96F9, 0x90B7 .hword 0x9778, 0x917F .hword 0x97AF, 0x91EC .hword 0x97AF, 0x91EC .hword 0x9852, 0x917F .hword 0x98C0, 0x915A .hword 0x98C0, 0x915A .hword 0x9840, 0x90C9 .hword 0x97D3, 0x9037 .hword 0x97D3, 0x9037 .hword 0x972F, 0x8F38 .hword 0x96C2, 0x8E82 .hword 0x969E, 0x8E4C .hword 0xD69E, 0x8E4C .hword 0xD69E, 0x8E4C .hword 0xD69E, 0x8E4C .hword 0xD69E, 0x8E4C .hword 0xD69E, 0x8E4C .hword 0xD5DD, 0x8EEA .hword 0xD51C, 0x8F89 .hword 0xD45A, 0x9028 .hword 0xD399, 0x90C7 .hword 0xD399, 0x90C7 .hword 0xD399, 0x90C7 .hword 0xD399, 0x90C7 .hword 0xD399, 0x90C7 .hword 0xD36A, 0x90ED .hword 0x9420, 0x9148 .hword 0x94B2, 0x91DA .hword 0x94FB, 0x9247 .hword 0x94FB, 0x9247 .hword 0x9433, 0x9223 .hword 0x940E, 0x9223 .hword 0x940E, 0x9223 .hword 0x9358, 0x9210 .hword 0x9358, 0x9210 .hword 0x9358, 0x9210 .hword 0x92A2, 0x91FE .hword 0x9259, 0x91FE .hword 0x9259, 0x91FE .hword 0x91B5, 0x927E .hword 0x9191, 0x92B4 .hword 0x9191, 0x92B4 .hword 0x9247, 0x9321 .hword 0x92FD, 0x93B3 .hword 0x9358, 0x940E .hword 0x9358, 0x940E .hword 0x93D8, 0x94A0 .hword 0x9433, 0x951F .hword 0x9433, 0x951F .hword 0x94B2, 0x948E .hword 0x94D6, 0x947B .hword 0x94D6, 0x947B .hword 0x9433, 0x9420 .hword 0x93A1, 0x938F .hword 0x9346, 0x9321 .hword 0x9346, 0x9321 .hword 0x9433, 0x9321 .hword 0x94E9, 0x9334 .hword 0x95D5, 0x9334 .hword 0x968B, 0x92EB .hword 0x968B, 0x92EB .hword 0x968B, 0x92D9 .hword 0x968B, 0x92D9 .hword 0x95D5, 0x9223 .hword 0x9544, 0x9191 .hword 0x948E, 0x90C9 .hword 0x940E, 0x9049 .hword 0x940E, 0x9049 .hword 0x937D, 0x90C9 .hword 0x936A, 0x90ED .hword 0xD390, 0x8FF0 .hword 0xD410, 0x8F30 .hword 0xD490, 0x8E30 .hword 0xD5A0, 0x8D70 .hword 0xD6E0, 0x8C90 .hword 0xD810, 0x8BF0 .hword 0xD970, 0x8B70 .hword 0xDA80, 0x8AE0 .hword 0xDBC0, 0x8AA0 .hword 0xDCD0, 0x8AA0 .hword 0xDD90, 0x8A60 .hword 0xDE30, 0x8A40 .hword 0xDEA0, 0x8A10 .hword 0xDF20, 0x8A10 .hword 0xDF38, 0x8A1A .hword 0xFFFF, 0xFFFF ;End of Loop - Blank+Color7 PerfectCircle: ;Perfect Circle .hword 0x0000, 0x963C .hword 0x004B, 0x963D .hword 0x0096, 0x9641 .hword 0x00E0, 0x9646 .hword 0x012B, 0x964E .hword 0x0175, 0x9658 .hword 0x01BF, 0x9665 .hword 0x0209, 0x9673 .hword 0x0252, 0x9684 .hword 0x029A, 0x9697 .hword 0x02E2, 0x96AC .hword 0x032A, 0x96C3 .hword 0x0370, 0x96DD .hword 0x03B6, 0x96F8 .hword 0x03FB, 0x9716 .hword 0x043F, 0x9735 .hword 0x0482, 0x9757 .hword 0x04C4, 0x977B .hword 0x0505, 0x97A0 .hword 0x0545, 0x97C8 .hword 0x0583, 0x97F1 .hword 0x05C0, 0x981C .hword 0x05FC, 0x9849 .hword 0x0637, 0x9878 .hword 0x0670, 0x98A9 .hword 0x06A8, 0x98DB .hword 0x06DE, 0x990F .hword 0x0712, 0x9945 .hword 0x0745, 0x997C .hword 0x0776, 0x99B4 .hword 0x07A6, 0x99EE .hword 0x07D4, 0x9A2A .hword 0x0800, 0x9A67 .hword 0x082A, 0x9AA5 .hword 0x0852, 0x9AE4 .hword 0x0878, 0x9B24 .hword 0x089D, 0x9B66 .hword 0x08BF, 0x9BA9 .hword 0x08DF, 0x9BEC .hword 0x08FE, 0x9C31 .hword 0x091A, 0x9C76 .hword 0x0934, 0x9CBD .hword 0x094C, 0x9D04 .hword 0x0962, 0x9D4C .hword 0x0975, 0x9D94 .hword 0x0987, 0x9DDD .hword 0x0996, 0x9E26 .hword 0x09A3, 0x9E70 .hword 0x09AE, 0x9EBA .hword 0x09B7, 0x9F05 .hword 0x09BD, 0x9F50 .hword 0x09C2, 0x9F9A .hword 0x09C3, 0x9FE5 .hword 0x09C3, 0x0030 .hword 0x09C1, 0x007B .hword 0x09BC, 0x00C5 .hword 0x09B5, 0x0110 .hword 0x09AB, 0x015B .hword 0x09A0, 0x01A5 .hword 0x0992, 0x01EE .hword 0x0982, 0x0238 .hword 0x0970, 0x0280 .hword 0x095C, 0x02C9 .hword 0x0945, 0x0310 .hword 0x092D, 0x0357 .hword 0x0912, 0x039D .hword 0x08F5, 0x03E2 .hword 0x08D6, 0x0427 .hword 0x08B5, 0x046A .hword 0x0893, 0x04AC .hword 0x086E, 0x04EE .hword 0x0847, 0x052E .hword 0x081E, 0x056D .hword 0x07F3, 0x05AB .hword 0x07C7, 0x05E7 .hword 0x0799, 0x0622 .hword 0x0769, 0x065C .hword 0x0737, 0x0694 .hword 0x0704, 0x06CB .hword 0x06CF, 0x0700 .hword 0x0698, 0x0733 .hword 0x0660, 0x0765 .hword 0x0627, 0x0795 .hword 0x05EC, 0x07C3 .hword 0x05AF, 0x07F0 .hword 0x0572, 0x081B .hword 0x0533, 0x0844 .hword 0x04F3, 0x086B .hword 0x04B2, 0x0890 .hword 0x046F, 0x08B3 .hword 0x042C, 0x08D4 .hword 0x03E8, 0x08F3 .hword 0x03A3, 0x0910 .hword 0x035D, 0x092B .hword 0x0316, 0x0943 .hword 0x02CE, 0x095A .hword 0x0286, 0x096F .hword 0x023D, 0x0981 .hword 0x01F4, 0x0991 .hword 0x01AB, 0x099F .hword 0x0160, 0x09AB .hword 0x0116, 0x09B4 .hword 0x00CB, 0x09BB .hword 0x0081, 0x09C0 .hword 0x0036, 0x09C3 .hword 0x9FEB, 0x09C4 .hword 0x9FA0, 0x09C2 .hword 0x9F55, 0x09BE .hword 0x9F0B, 0x09B8 .hword 0x9EC0, 0x09AF .hword 0x9E76, 0x09A4 .hword 0x9E2C, 0x0997 .hword 0x9DE3, 0x0988 .hword 0x9D9A, 0x0977 .hword 0x9D51, 0x0963 .hword 0x9D0A, 0x094E .hword 0x9CC2, 0x0936 .hword 0x9C7C, 0x091C .hword 0x9C36, 0x0900 .hword 0x9BF2, 0x08E2 .hword 0x9BAE, 0x08C2 .hword 0x9B6B, 0x089F .hword 0x9B2A, 0x087B .hword 0x9AE9, 0x0855 .hword 0x9AAA, 0x082D .hword 0x9A6B, 0x0803 .hword 0x9A2F, 0x07D7 .hword 0x99F3, 0x07AA .hword 0x99B9, 0x077A .hword 0x9980, 0x0749 .hword 0x9949, 0x0716 .hword 0x9913, 0x06E2 .hword 0x98DF, 0x06AC .hword 0x98AD, 0x0675 .hword 0x987C, 0x063C .hword 0x984D, 0x0601 .hword 0x9820, 0x05C5 .hword 0x97F4, 0x0588 .hword 0x97CB, 0x054A .hword 0x97A3, 0x050A .hword 0x977D, 0x04C9 .hword 0x975A, 0x0487 .hword 0x9738, 0x0444 .hword 0x9718, 0x0400 .hword 0x96FA, 0x03BC .hword 0x96DF, 0x0376 .hword 0x96C5, 0x032F .hword 0x96AE, 0x02E8 .hword 0x9699, 0x02A0 .hword 0x9685, 0x0258 .hword 0x9675, 0x020F .hword 0x9666, 0x01C5 .hword 0x9659, 0x017B .hword 0x964F, 0x0131 .hword 0x9647, 0x00E6 .hword 0x9641, 0x009B .hword 0x963E, 0x0051 .hword 0x963C, 0x0006 .hword 0x963D, 0x9FBB .hword 0x9641, 0x9F70 .hword 0x9646, 0x9F26 .hword 0x964E, 0x9EDB .hword 0x9658, 0x9E91 .hword 0x9664, 0x9E47 .hword 0x9672, 0x9DFD .hword 0x9683, 0x9DB4 .hword 0x9695, 0x9D6B .hword 0x96AA, 0x9D23 .hword 0x96C1, 0x9CDC .hword 0x96DB, 0x9C95 .hword 0x96F6, 0x9C4F .hword 0x9713, 0x9C0A .hword 0x9733, 0x9BC6 .hword 0x9754, 0x9B83 .hword 0x9778, 0x9B41 .hword 0x979D, 0x9B00 .hword 0x97C4, 0x9AC0 .hword 0x97EE, 0x9A82 .hword 0x9819, 0x9A44 .hword 0x9846, 0x9A08 .hword 0x9874, 0x99CE .hword 0x98A5, 0x9994 .hword 0x98D7, 0x995D .hword 0x990B, 0x9926 .hword 0x9940, 0x98F2 .hword 0x9977, 0x98BF .hword 0x99B0, 0x988D .hword 0x99EA, 0x985E .hword 0x9A25, 0x9830 .hword 0x9A62, 0x9804 .hword 0x9AA0, 0x97DA .hword 0x9ADF, 0x97B1 .hword 0x9B1F, 0x978B .hword 0x9B61, 0x9766 .hword 0x9BA3, 0x9744 .hword 0x9BE7, 0x9723 .hword 0x9C2B, 0x9705 .hword 0x9C71, 0x96E8 .hword 0x9CB7, 0x96CE .hword 0x9CFE, 0x96B6 .hword 0x9D46, 0x96A0 .hword 0x9D8E, 0x968C .hword 0x9DD7, 0x967A .hword 0x9E20, 0x966B .hword 0x9E6A, 0x965E .hword 0x9EB4, 0x9653 .hword 0x9EFF, 0x964A .hword 0x9F4A, 0x9643 .hword 0x9F94, 0x963F .hword 0x9FDF, 0x963D .hword 0xFFFF, 0xFFFF ;End of Loop - Blank+Color7 Globe: ;Globe .hword 0xDDF1, 0x8DDE .hword 0x9D28, 0x8DF1 .hword 0x9C72, 0x8E27 .hword 0x9B18, 0x8E82 .hword 0x99BF, 0x8F02 .hword 0x9877, 0x8FA5 .hword 0x97D3, 0x9000 .hword 0x9741, 0x906E .hword 0x9741, 0x906E .hword 0x9630, 0x9124 .hword 0x9531, 0x91EC .hword 0x9445, 0x92D9 .hword 0x936A, 0x93D8 .hword 0x92B4, 0x94E9 .hword 0x92B4, 0x94E9 .hword 0x91C8, 0x9642 .hword 0x9112, 0x97D3 .hword 0x9092, 0x9963 .hword 0x9037, 0x9B18 .hword 0x9000, 0x9CBB .hword 0x9000, 0x9E70 .hword 0x9025, 0x0024 .hword 0x906E, 0x01C7 .hword 0x90ED, 0x0369 .hword 0x91A3, 0x04FA .hword 0x91A3, 0x04FA .hword 0x9210, 0x05B0 .hword 0x9290, 0x0678 .hword 0x92D9, 0x06E5 .hword 0x92D9, 0x06E5 .hword 0x938F, 0x07D2 .hword 0x9457, 0x08BF .hword 0x9531, 0x0999 .hword 0x961E, 0x0A61 .hword 0x971D, 0x0B2A .hword 0x971D, 0x0B2A .hword 0x982E, 0x0BCD .hword 0x9951, 0x0C5F .hword 0x9A75, 0x0CDF .hword 0x9BAA, 0x0D3A .hword 0x9CF2, 0x0D82 .hword 0x9E27, 0x0DB9 .hword 0x9F6F, 0x0DCB .hword 0x00B6, 0x0DCB .hword 0x01FD, 0x0DB9 .hword 0x0345, 0x0D95 .hword 0x0345, 0x0D95 .hword 0x047A, 0x0D4C .hword 0x05B0, 0x0CDF .hword 0x06E5, 0x0C5F .hword 0x0809, 0x0BBB .hword 0x091A, 0x0B17 .hword 0x091A, 0x0B17 .hword 0x09AB, 0x0A98 .hword 0x0A4F, 0x0A2B .hword 0x0AE1, 0x09AB .hword 0x0B72, 0x092C .hword 0x0BF2, 0x089A .hword 0x0C71, 0x0809 .hword 0x0CF1, 0x0777 .hword 0x0D5E, 0x06D3 .hword 0x0E38, 0x059E .hword 0x0E38, 0x059E .hword 0x0EA6, 0x04B1 .hword 0x0F01, 0x03D7 .hword 0x0F49, 0x02EA .hword 0x0F6E, 0x02A1 .hword 0x0F6E, 0x02A1 .hword 0x0F92, 0x01EB .hword 0x0FC9, 0x0135 .hword 0x1000, 0x005B .hword 0x1000, 0x005B .hword 0x1012, 0x9F81 .hword 0x1012, 0x9EB9 .hword 0x1012, 0x9DF1 .hword 0x1012, 0x9D04 .hword 0x1012, 0x9C05 .hword 0x1000, 0x9B61 .hword 0x1000, 0x9B61 .hword 0x0FC9, 0x9A62 .hword 0x0F92, 0x9976 .hword 0x0F37, 0x9877 .hword 0x0EDC, 0x978A .hword 0x0E81, 0x96B0 .hword 0x0E81, 0x96B0 .hword 0x0E14, 0x95E7 .hword 0x0DA7, 0x9531 .hword 0x0D3A, 0x948E .hword 0x0CBA, 0x93EA .hword 0x0C3B, 0x9346 .hword 0x0BA9, 0x92B4 .hword 0x0B17, 0x9223 .hword 0x0A74, 0x9191 .hword 0x09E2, 0x9112 .hword 0x093E, 0x9092 .hword 0x0888, 0x9013 .hword 0x07C0, 0x8FA5 .hword 0x070A, 0x8F4A .hword 0x06D3, 0x8F38 .hword 0x06D3, 0x8F38 .hword 0x061D, 0x8EDD .hword 0x0567, 0x8E94 .hword 0x048D, 0x8E4C .hword 0x048D, 0x8E4C .hword 0x03E9, 0x8E39 .hword 0x03E9, 0x8E39 .hword 0x0320, 0x8E03 .hword 0x026A, 0x8DDE .hword 0x0222, 0x8DDE .hword 0x016C, 0x8DCC .hword 0x007F, 0x8DCC .hword 0x9FDC, 0x8DDE .hword 0x9FDC, 0x8DDE .hword 0x9F02, 0x8DCC .hword 0x9E15, 0x8DCC .hword 0xDE15, 0x8DCC .hword 0xDE15, 0x8DCC .hword 0xDE15, 0x8DCC .hword 0xDE15, 0x8DCC .hword 0xDDF1, 0x8DDE .hword 0xDDF1, 0x8DDE .hword 0xDDF1, 0x8DDE .hword 0xDDF1, 0x8DDE .hword 0xDDFA, 0x8ED8 .hword 0xDDFA, 0x8ED8 .hword 0xDDFA, 0x8ED8 .hword 0xDE03, 0x8FCA .hword 0x9E03, 0x9037 .hword 0x9E03, 0x9037 .hword 0x9ECB, 0x905C .hword 0x9EDD, 0x905C .hword 0x9EDD, 0x905C .hword 0x9ECB, 0x9000 .hword 0x9ECB, 0x9000 .hword 0x9E03, 0x8FB8 .hword 0x9E03, 0x8FCA .hword 0xDE03, 0x8FCA .hword 0xDE03, 0x8FCA .hword 0xDE03, 0x8FCA .hword 0xDD0B, 0x8FAC .hword 0xDD0B, 0x8FAC .hword 0xDD0B, 0x8FAC .hword 0xDC3C, 0x8F93 .hword 0x9C3C, 0x9000 .hword 0x9C3C, 0x9000 .hword 0x9D16, 0x8FEE .hword 0x9DCC, 0x8F6F .hword 0x9DCC, 0x8F6F .hword 0x9D04, 0x8F6F .hword 0x9C4E, 0x8F81 .hword 0x9C3C, 0x8F93 .hword 0xDC3C, 0x8F93 .hword 0xDC3C, 0x8F93 .hword 0xDC3C, 0x8F93 .hword 0xDD2D, 0x8FD3 .hword 0xDE1F, 0x9012 .hword 0xDF11, 0x9052 .hword 0x4002, 0x9092 .hword 0x4002, 0x9092 .hword 0x4002, 0x9092 .hword 0x4048, 0x90A4 .hword 0x0024, 0x9037 .hword 0x0024, 0x9037 .hword 0x9F5D, 0x9013 .hword 0x9F93, 0x9080 .hword 0x9F93, 0x9080 .hword 0x9FCA, 0x90A4 .hword 0x9FCA, 0x90A4 .hword 0x0048, 0x90A4 .hword 0x4048, 0x90A4 .hword 0x4048, 0x90A4 .hword 0x4048, 0x90A4 .hword 0x4130, 0x9046 .hword 0x4217, 0x8FE8 .hword 0x4217, 0x8FE8 .hword 0x4217, 0x8FE8 .hword 0x4234, 0x8FDC .hword 0x0234, 0x9000 .hword 0x0234, 0x9000 .hword 0x02EA, 0x905C .hword 0x0345, 0x90DB .hword 0x0345, 0x90DB .hword 0x03FB, 0x90C9 .hword 0x0456, 0x90ED .hword 0x0456, 0x90ED .hword 0x048D, 0x9148 .hword 0x048D, 0x9148 .hword 0x0530, 0x9191 .hword 0x0530, 0x9191 .hword 0x051E, 0x90B7 .hword 0x050C, 0x90B7 .hword 0x050C, 0x90B7 .hword 0x04C3, 0x9049 .hword 0x04C3, 0x9049 .hword 0x0444, 0x9013 .hword 0x0444, 0x9013 .hword 0x0369, 0x8FDC .hword 0x028F, 0x8FCA .hword 0x0234, 0x8FDC .hword 0x4234, 0x8FDC .hword 0x4234, 0x8FDC .hword 0x4234, 0x8FDC .hword 0x432D, 0x8FF2 .hword 0x4426, 0x9008 .hword 0x451F, 0x901E .hword 0x4618, 0x9034 .hword 0x4711, 0x904B .hword 0x480A, 0x9061 .hword 0x480A, 0x9061 .hword 0x480A, 0x9061 .hword 0x489A, 0x906E .hword 0x089A, 0x906E .hword 0x089A, 0x9136 .hword 0x089A, 0x9136 .hword 0x08BF, 0x91FE .hword 0x08BF, 0x9210 .hword 0x08BF, 0x9210 .hword 0x0809, 0x91FE .hword 0x07C0, 0x91C8 .hword 0x07C0, 0x91C8 .hword 0x0753, 0x9112 .hword 0x070A, 0x90B7 .hword 0x070A, 0x90B7 .hword 0x0654, 0x9092 .hword 0x062F, 0x9092 .hword 0x062F, 0x9092 .hword 0x0567, 0x9013 .hword 0x04B1, 0x8FA5 .hword 0x03E9, 0x8F38 .hword 0x03B2, 0x8F26 .hword 0x03B2, 0x8F26 .hword 0x0432, 0x8E94 .hword 0x0456, 0x8E82 .hword 0x4456, 0x8E82 .hword 0x4456, 0x8E82 .hword 0x4456, 0x8E82 .hword 0x4367, 0x8ECC .hword 0x4278, 0x8F16 .hword 0x4189, 0x8F5F .hword 0x409B, 0x8FA9 .hword 0xDFAC, 0x8FF3 .hword 0xDEBE, 0x903D .hword 0xDDCF, 0x9086 .hword 0xDCE0, 0x90D0 .hword 0xDBF1, 0x911A .hword 0xDB02, 0x9164 .hword 0xDA13, 0x91AE .hword 0xD924, 0x91F7 .hword 0xD836, 0x9241 .hword 0xD747, 0x928B .hword 0xD658, 0x92D5 .hword 0xD658, 0x92D5 .hword 0xD658, 0x92D5 .hword 0xD5D5, 0x92FD .hword 0x968B, 0x92B4 .hword 0x9741, 0x926B .hword 0x9754, 0x926B .hword 0x9754, 0x926B .hword 0x97F7, 0x9223 .hword 0x97F7, 0x9223 .hword 0x9877, 0x927E .hword 0x9877, 0x927E .hword 0x98F6, 0x9321 .hword 0x993F, 0x937D .hword 0x993F, 0x937D .hword 0x99BF, 0x9420 .hword 0x99D1, 0x9445 .hword 0x99D1, 0x9445 .hword 0x9976, 0x94E9 .hword 0x9988, 0x950D .hword 0x9988, 0x950D .hword 0x9988, 0x95D5 .hword 0x9988, 0x95D5 .hword 0x99E3, 0x9679 .hword 0x9A07, 0x96B0 .hword 0x9A07, 0x96B0 .hword 0x9ABD, 0x970B .hword 0x9B3D, 0x9778 .hword 0x9B3D, 0x9778 .hword 0x9BAA, 0x982E .hword 0x9C3C, 0x98D2 .hword 0x9CBB, 0x98E4 .hword 0x9CBB, 0x98E4 .hword 0x9C60, 0x980A .hword 0x9C05, 0x9754 .hword 0x9C05, 0x9741 .hword 0x9C05, 0x9741 .hword 0x9C97, 0x97D3 .hword 0x9D16, 0x989B .hword 0x9D16, 0x989B .hword 0x9DBA, 0x992D .hword 0x9E03, 0x9976 .hword 0x9E03, 0x9976 .hword 0x9E70, 0x99AC .hword 0x9E70, 0x99AC .hword 0x9F02, 0x9A3E .hword 0x9F02, 0x9A3E .hword 0x9FB8, 0x9A50 .hword 0x9FB8, 0x9A50 .hword 0x006D, 0x9A87 .hword 0x0147, 0x9ABD .hword 0x0147, 0x9ABD .hword 0x020F, 0x9ABD .hword 0x020F, 0x9ABD .hword 0x02C5, 0x9B18 .hword 0x02C5, 0x9B18 .hword 0x0357, 0x9B4F .hword 0x0357, 0x9B4F .hword 0x03E9, 0x9BE1 .hword 0x0456, 0x9C05 .hword 0x0456, 0x9C05 .hword 0x051E, 0x9C29 .hword 0x05D4, 0x9C3C .hword 0x060B, 0x9C4E .hword 0x060B, 0x9C4E .hword 0x06D3, 0x9C17 .hword 0x070A, 0x9C3C .hword 0x070A, 0x9C3C .hword 0x0777, 0x9CE0 .hword 0x0777, 0x9D3B .hword 0x0777, 0x9D3B .hword 0x06E5, 0x9DCC .hword 0x06E5, 0x9DF1 .hword 0x06E5, 0x9DF1 .hword 0x06C1, 0x9EB9 .hword 0x06E5, 0x9F4A .hword 0x06E5, 0x9F4A .hword 0x0765, 0x9FEE .hword 0x0789, 0x0024 .hword 0x0789, 0x0024 .hword 0x07D2, 0x00A3 .hword 0x07D2, 0x00A3 .hword 0x0876, 0x00FE .hword 0x08F5, 0x01A2 .hword 0x08F5, 0x01A2 .hword 0x08F5, 0x027D .hword 0x08E3, 0x0333 .hword 0x08E3, 0x0333 .hword 0x0888, 0x03E9 .hword 0x0888, 0x03E9 .hword 0x0851, 0x049F .hword 0x081B, 0x0555 .hword 0x081B, 0x0555 .hword 0x079B, 0x05E6 .hword 0x079B, 0x05F9 .hword 0x079B, 0x05F9 .hword 0x0777, 0x06AF .hword 0x0777, 0x06AF .hword 0x072E, 0x0765 .hword 0x0753, 0x082D .hword 0x0753, 0x082D .hword 0x07F6, 0x07AE .hword 0x0888, 0x070A .hword 0x08D1, 0x06D3 .hword 0x08D1, 0x06D3 .hword 0x093E, 0x0678 .hword 0x093E, 0x0678 .hword 0x0999, 0x05D4 .hword 0x09AB, 0x05D4 .hword 0x09AB, 0x05D4 .hword 0x0A74, 0x05B0 .hword 0x0A74, 0x05B0 .hword 0x0B2A, 0x0567 .hword 0x0B60, 0x0555 .hword 0x0B60, 0x0555 .hword 0x0B2A, 0x049F .hword 0x0B3C, 0x048D .hword 0x0B3C, 0x048D .hword 0x0C04, 0x0456 .hword 0x0C04, 0x0456 .hword 0x0CA8, 0x03E9 .hword 0x0CBA, 0x03E9 .hword 0x0CBA, 0x03E9 .hword 0x0D27, 0x0333 .hword 0x0D82, 0x02D8 .hword 0x0D82, 0x02D8 .hword 0x0E26, 0x01FD .hword 0x0EDC, 0x0123 .hword 0x0F6E, 0x0036 .hword 0x0F92, 0x9FEE .hword 0x0F92, 0x9FEE .hword 0x0FA4, 0x9F6F .hword 0x0FA4, 0x9F6F .hword 0x0FB7, 0x9EEF .hword 0x0FB7, 0x9EEF .hword 0x0F5C, 0x9E82 .hword 0x0F5C, 0x9E82 .hword 0x0E93, 0x9E39 .hword 0x0DF0, 0x9DF1 .hword 0x0DF0, 0x9DF1 .hword 0x0DA7, 0x9D5F .hword 0x0DA7, 0x9D5F .hword 0x0DCB, 0x9CA9 .hword 0x0DCB, 0x9C97 .hword 0x0DCB, 0x9C97 .hword 0x0D5E, 0x9C60 .hword 0x0D5E, 0x9C60 .hword 0x0CCC, 0x9C17 .hword 0x0CCC, 0x9C17 .hword 0x0C4D, 0x9C05 .hword 0x0C4D, 0x9C05 .hword 0x0BBB, 0x9B86 .hword 0x0B05, 0x9AE2 .hword 0x0A74, 0x9ABD .hword 0x0A74, 0x9ABD .hword 0x09E2, 0x9AE2 .hword 0x09E2, 0x9AE2 .hword 0x092C, 0x9AD0 .hword 0x092C, 0x9AE2 .hword 0x092C, 0x9AE2 .hword 0x0888, 0x9B4F .hword 0x0888, 0x9B61 .hword 0x0888, 0x9B61 .hword 0x07F6, 0x9B18 .hword 0x07F6, 0x9B18 .hword 0x07D2, 0x9B4F .hword 0x07D2, 0x9B4F .hword 0x071C, 0x9B3D .hword 0x06D3, 0x9B3D .hword 0x06D3, 0x9B3D .hword 0x062F, 0x9B98 .hword 0x05F9, 0x9BCE .hword 0x05F9, 0x9BCE .hword 0x0530, 0x9BCE .hword 0x04C3, 0x9BCE .hword 0x04C3, 0x9BCE .hword 0x04B1, 0x9B18 .hword 0x04B1, 0x9B06 .hword 0x04B1, 0x9B06 .hword 0x049F, 0x9A75 .hword 0x049F, 0x9A75 .hword 0x03FB, 0x9A07 .hword 0x03E9, 0x9A07 .hword 0x03E9, 0x9A07 .hword 0x0357, 0x9976 .hword 0x0345, 0x9951 .hword 0x0345, 0x9951 .hword 0x02C5, 0x99E3 .hword 0x02B3, 0x99F5 .hword 0x02B3, 0x99F5 .hword 0x0246, 0x99BF .hword 0x0246, 0x99BF .hword 0x01C7, 0x992D .hword 0x017E, 0x9865 .hword 0x01A2, 0x9840 .hword 0x01A2, 0x9840 .hword 0x0258, 0x980A .hword 0x026A, 0x980A .hword 0x026A, 0x980A .hword 0x030E, 0x97AF .hword 0x0333, 0x97AF .hword 0x0333, 0x97AF .hword 0x03D7, 0x97C1 .hword 0x03D7, 0x97C1 .hword 0x0444, 0x9778 .hword 0x0444, 0x9778 .hword 0x050C, 0x9778 .hword 0x0530, 0x978A .hword 0x0530, 0x978A .hword 0x05B0, 0x981C .hword 0x05C2, 0x9840 .hword 0x05C2, 0x9840 .hword 0x061D, 0x9877 .hword 0x061D, 0x9877 .hword 0x0641, 0x9840 .hword 0x0641, 0x9840 .hword 0x0654, 0x9778 .hword 0x0678, 0x9754 .hword 0x0678, 0x9754 .hword 0x06D3, 0x969E .hword 0x0789, 0x960C .hword 0x07C0, 0x95FA .hword 0x07C0, 0x95FA .hword 0x0876, 0x95C3 .hword 0x092C, 0x9556 .hword 0x092C, 0x9556 .hword 0x0876, 0x9531 .hword 0x082D, 0x951F .hword 0x082D, 0x951F .hword 0x0765, 0x9544 .hword 0x0740, 0x9556 .hword 0x0740, 0x9556 .hword 0x07C0, 0x94B2 .hword 0x081B, 0x94A0 .hword 0x081B, 0x94A0 .hword 0x0907, 0x94B2 .hword 0x0987, 0x947B .hword 0x0987, 0x947B .hword 0x091A, 0x93C5 .hword 0x0851, 0x938F .hword 0x083F, 0x938F .hword 0x083F, 0x938F .hword 0x0789, 0x9334 .hword 0x0765, 0x9321 .hword 0x0765, 0x9321 .hword 0x06E5, 0x9290 .hword 0x069D, 0x927E .hword 0x069D, 0x927E .hword 0x05D4, 0x9290 .hword 0x05B0, 0x9290 .hword 0x05B0, 0x9290 .hword 0x04E8, 0x9235 .hword 0x0468, 0x9235 .hword 0x0468, 0x9235 .hword 0x047A, 0x92D9 .hword 0x047A, 0x92D9 .hword 0x041F, 0x936A .hword 0x041F, 0x936A .hword 0x03FB, 0x9420 .hword 0x038E, 0x947B .hword 0x038E, 0x947B .hword 0x0345, 0x947B .hword 0x0345, 0x947B .hword 0x02C5, 0x93EA .hword 0x02C5, 0x93D8 .hword 0x02C5, 0x93D8 .hword 0x0234, 0x936A .hword 0x0234, 0x936A .hword 0x020F, 0x936A .hword 0x020F, 0x936A .hword 0x016C, 0x93C5 .hword 0x0159, 0x93D8 .hword 0x0159, 0x93D8 .hword 0x00C8, 0x9358 .hword 0x00B6, 0x9346 .hword 0x00B6, 0x9346 .hword 0x00B6, 0x927E .hword 0x00A3, 0x91C8 .hword 0x00B6, 0x91C8 .hword 0x00B6, 0x91C8 .hword 0x016C, 0x915A .hword 0x01D9, 0x9136 .hword 0x01D9, 0x9136 .hword 0x0222, 0x90DB .hword 0x0222, 0x90DB .hword 0x016C, 0x90A4 .hword 0x016C, 0x90A4 .hword 0x016C, 0x90A4 .hword 0x00C8, 0x906E .hword 0x00C8, 0x906E .hword 0x0024, 0x90C9 .hword 0x0024, 0x90C9 .hword 0x9F6F, 0x90DB .hword 0x9F14, 0x90ED .hword 0x9F14, 0x90ED .hword 0x9E70, 0x90DB .hword 0x9E70, 0x90DB .hword 0x9DDE, 0x90ED .hword 0x9DDE, 0x90ED .hword 0x9D28, 0x90A4 .hword 0x9D04, 0x90A4 .hword 0x9D04, 0x90A4 .hword 0x9C4E, 0x90B7 .hword 0x9C3C, 0x90C9 .hword 0x9C3C, 0x90C9 .hword 0x9B86, 0x9080 .hword 0x9B3D, 0x906E .hword 0x9B3D, 0x906E .hword 0x9A3E, 0x9080 .hword 0x9976, 0x9092 .hword 0x993F, 0x90A4 .hword 0x993F, 0x90A4 .hword 0x9877, 0x90A4 .hword 0x9852, 0x90A4 .hword 0x9852, 0x90A4 .hword 0x97C1, 0x90FF .hword 0x97C1, 0x90FF .hword 0x970B, 0x9136 .hword 0x970B, 0x9148 .hword 0x970B, 0x9148 .hword 0x9679, 0x91DA .hword 0x9667, 0x9210 .hword 0x9667, 0x9210 .hword 0x95E7, 0x92C6 .hword 0x95D5, 0x92FD .hword 0xD5D5, 0x92FD .hword 0xD5D5, 0x92FD .hword 0xD5D5, 0x92FD .hword 0xD6C0, 0x9210 .hword 0xD770, 0x9170 .hword 0xD840, 0x90F0 .hword 0xD940, 0x9090 .hword 0xDA10, 0x8FF0 .hword 0xDAC0, 0x8FA0 .hword 0xDBC0, 0x8F30 .hword 0xDC90, 0x8EC0 .hword 0xDD30, 0x8E60 .hword 0xDD90, 0x8E00 .hword 0xDE20, 0x8DB0 .hword 0xFFFF, 0xFFFF ;End of Loop - Blank+Color7 ;ENSURE there are 0x1000 bytes left in page zero for UserScript .align 32 ;Ensure flash rows align UserScript: .hword 0xF800 ;User script area in page 0, put a HALT here for safety .end ;End of program code in this file