IMD 1.18: 7/12/2016 12:25:44 pdos 3.2a #3 force utility                FORCE UTIL @ZRR_2DOCxx !TRR_2SR&^^ 2, '-RR_2 2, '-README T tINIT_WSRFE,!;INIT_WA78;INIT_WDOCP ! !     SRAM area on the RR_2 or to load EPROM/EEPROM contents into the PDOS memory. - 1 - 4. RR-2 usage ------------- >RR_2 F,FILENAME,RR_2_ADDRESS,MODE,OPTION if the source is a disk file, or >RR_2 M,STRTADDR,BYTECNT,RR_2_ADDRESS,MODE,OPTION if the source is in memory. 5. Parameter explanation ------------------------ F,FILENAME.............source = disk file F = source flag FILENAME = the name of thEPROM Programming Utility for the SYS68K/RR-2 and RR-3 boards. ---------------------------------------------------------------- 1. Delivery ----------- The RR-2 utility program is included on every PDOS System (starting with 3.2)e source file M,STRTADDR,BYTECNT.....source = memory M = source flag STRTADDR = source start address BYTECNT = source length in bytes RR_2_ADDR..............the address of the RR_2 bank MODE...................1 = 8 bit mod. The source file is created with the PDOS editor MEDIT and can be assembled with MASM 3.0 or later and converted to a 'SY' file with the MSYFL utility. The PDOS operating system should be PDOS 3.0b or later. 2. Copyre (single EPROM) 2 = 16 bit mode (two EPROMS) 4 = 32 bit mode (four EPROMS) OPTION.................P = program an EPROM (includes E and V and a bittest) E = check if EPROMight ------------ The information in this document is subject to change without notice and should not be construed as a commitment by FORCE Computers. Neither FORCE Computers nor the authors as is empty V = verify source and EPROM contents L = load EPROM contents to memory 6. Command Line Examples ------------------------ >RR_2 M,$0,$8000,$800000,2,E executes an empty chsume any responsi- bility for the use or reliability of this document or the described software. Copyright (C) 1987, FORCE Computers General permission to copy or eck in word mode for EPROM type 27128 (16k x 8) at RR_2 address $800000. The M - source flag and the memory address are dummy. >RR_2 F,PROG/2,$800000,4,P programs EPROMS at address $800000 in 32-bit mode with the soumodify, but not for profit, is hereby granted, provided that the above copyright notice is included and reference made to the fact that reproduction privileges were granted by FORCE Computers. 3. Descrce file PROG from disk 2. >RR_2 M,$10000,$2000,$800000,1,L loads the contents of an 8k x 8 EPROM at address $800000 into the memory to address $10000. - 2 - 7. Application Example -------------------ription of the RR-2 utility program ------------------------------------------ The RR_2 program is an utility for programming EPROMS or EEPROMS on a FORCE RR-2 board. It also can be used to trans- fer files or memory contents into a  --- This example contains the RR-2 board configuration and and the program usage for 27128 EPROMs in the 16 bit mode. Jumper settings for 16k x 8 EPROMs on bank 2 (TOSHIBA 27128): -------------------------------------------------     !------------ B1b Read time selection on bank 2 8 5 o o o o I I 250 ns o o o o 1 4 B2b Write time selection on bank 2 3 15 o o o o o I o o o o o 50 ms o o o o o 1 )'* * * * * General permission to copy or modify, but not for profit, is * * hereby granted, provided that the above copyright notice is * * included and reference made to the fact that reproduction * * privileges were gr" 13 B4b Device type bank 2 4 o o I EPROM type 1 o o 1 B13b Device size bank 2 10 6 o o o o o I I I I 4 x 16k x 8 o o o o o 1 5 B15 Device pinning bank 2 3 *(anted by FORCE Computers. * * * ******************************************************************* ******************************************************************* *** *** *** RR_2 APPLICATION PROGRAM *** *** **#! 33 o o o o o o o o o o o I I o o o o o o o o o o o I I I o o o o o o o o o o o 1 31 - 3 - B16 Enable VPP generator 2 o I o 1 B17 Select VPP bank 2 +)* ******************************************************************* *** *** *** USAGE : *** *** *** *** >RR_2 {F,FNAM}[M,STADDR,COUNT],RR_ADDR,MODE,OPT *** *** *** *** F,FILNAM SOURCE = DISK FILE *** *** M,STADDR,COUNT S$" 3 o I o 21V o 1 B18 Select output enable on VPP bank 2 2 o o 1 B19 Select chip erase bank 2 3 o o I o 1 B11 Upper address bank 2 2 8 o o o o I I I ,*OURCE = MEMORY *** *** RR_ADDR RR_2 BOARD ADDRESS *** *** MODE 1 = BYTE, 2 = WORD, 4 = LONG *** *** OPT P = PROGRAM, E = EMPTY CHECK, *** *** V = VERIFY, L = LOAD *** *** *** ********************************************************%# $8 o o o o 1 7 B12 Lower address bank 2 2 8 o o o o I I I I $0 o o o o 1 7 - 4 - Program call for subsequent jobs: --------------------------------- a) EPROM empty-+*********** * OPT ALT * **************************************** * * FIRST WE'RE GETTING ALL THE * COMMAND LINE PARAMETERS * XGNP ;GET THE FIRST PARAM BLE USAGE ;ILLEGAL PARAMETER CMP.B #'F',(A1) ;SOURCE = FILE? BEQ.S @010 ;YES CMP.B #$ check >RR_2 M,$0,$8000,$800000,2,E \ \ \ \ \ \__option = empty check \ \ \ \ \___mode = word \ \ \ \_______RR-2 base address \ \ \______________byte count (2 EPROMs 16k x 8) \ \___________.,'M',(A1) ;NO, SOURCE = MEMORY? BEQ.S @020 ;YES BRA USAGE ;ILLEGAL PARAMETER * @010 XGNP ;GET THE FILENAME BLE USAGE ;ILLEGAL PARAMETER LEA.L FNAM(PC),A3 ;GET FILENAME BUFFER @011 MOVE.B (A1)+,(A3)+ ;STORE FILENAME BNE.S @011 LEA.L SRC'******************************************************************* * * * * * The information in this document is subject to change * * without notice and should not be construed as a commitment * * by FORCE Computers. /-FLAG(PC),A0 ;GET SOURCE FLAG MOVE.W #0,(A0) ;SET TO FILE MODE BRA.S @100 ;CONTINUE * @020 XGNP ;GET THE MEMORY ADDRESS BLE USAGE ;ILLEGAL PARAMETER XCDB ;CONVERT ADDRESS BLE USAGE ;CONVERT ERROR LEA.L MADDR(PC),A0 ;GET ADDRESS STO(& * * * * Neither FORCE Computers nor the authors assume any responsi- * * bility for the use or reliability of this document or the * * described software. * * * * Copyright (C) 1987, FORCE Computers * 0.RAGE MOVE.L D1,(A0) ;STORE ADDRESS XGNP ;GET BYTE COUNT BLE USAGE ;ILLEGAL PARAMETER XCDB ;CONVERT COUNT BLE USAGE ;CONVERT ERROR LEA.L MCOUNT(PC),A0 ;GET COUNT STORAGE MOVE.L D1,(A0) :STORE COUNT * @100 XGNP ;GET RR_2 ADDRESS      1/ BLE USAGE ;ILLEGAL PARAMETER XCDB ;CONVERT ADDRESS BLE USAGE ;CONVERT ERROR LEA.L RRADDR(PC),A0 ;GET ADDRESS STORAGE MOVE.L D1,(A0) ;STORE ADDRESS * XGNP ;GET RR_2 WORK MODE BLE USAGE ;ILLEGAL PARAMETER XCDB ;CONVERT MODE BLE97 TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF XEXT ;EXIT TO PDOS * @010 XPMC BSMSG ;BIT TEST SUCCESSFUL LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER BSR DO_PROG ;NOW PROGRAM THE EPROM(S) BEQ.S 20 USAGE ;CONVERT ERROR CMP.B #1,D1 ;BYTE MODE? BNE.S @101 ;NO MOVEQ.L #4,D1 ;YES, INCREMENT = 4 LEA.L REPEAT(PC),A2 ;GET REPEAT COUNT MOVE.W #1,(A2) ;SET TO ONE BRA.S @200 @101 CMP.B #4,D1 ;LONG MODE? BNE.S @102 ;NO MOVEQ.L #2,D1 :8@020 ;SUCCESS XPMC PFMSG ;PROGRAMMING FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF XEXT ;EXIT TO PDOS * @020 XPMC PSMSG ;PROGRAM SU31 ;YES, INCREMENT = 2 LEA.L REPEAT(PC),A2 ;GET REPEAT COUNT MOVE.W #1,(A2) ;SET TO TWO BRA.S @200 @102 CMP.B #2,D1 ;WORD MODE? BNE USAGE ;NO, ERROR MOVEQ.L #2,D1 ;YES, INCREMENT = 2 LEA.L REPEAT(PC),A2 ;GET REPEAT COUNT MOVE.W #2,(A2) ;9CCESSFUL LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER BSR VERIFY ;VERIFY EPROM AND DATA BEQ.S @030 ;SUCCESS XPMC VFMSG ;VERIFY FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BU42 ;SET TO ONE @200 LEA.L MODE(PC),A0 ;GET MODE STORAGE MOVE.W D1,(A0) ;STORE IT * XGNP ;GET OPTION BLE USAGE ;ILLEGAL PARAMETER CMP.B #'P',(A1) ;PROGRAM? BEQ.S RR_PROG ;YES CMP.B #'E',(A1) ;NO, EMPTY CHECK? BEQ RR_EMPT ;YES CMP.B <:FFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF XEXT ;EXIT TO PDOS * @030 XPMC VSMSG ;VERIFY WAS SUCCESSFUL XEXT ;JOB DONE! * **************************************** * * PROGRAM SOURCE IS A DISK FILE * F_PROG LE53#'V',(A1) ;NO, VERIFY? BEQ RR_VER ;YES CMP.B #'L',(A1) ;NO, LOAD FROM EPROM? BEQ RR_LOAD ;YES BRA USAGE ;NO, PARAMETER ERROR * **************************************** * * PROGRAM EPROMS ON RR_2 BOARD * RR_PROG LEA.L SRCFLAG(PC),A0 ;GET SO=;A.L FNAM(PC),A1 :GET SOURCE FILE NAME XSOP ;OPEN FILE BEQ.S @001 ;NO ERRORS XERR ;EXIT WITH ERROR MESSAGE @001 LEA.L FID(PC),A0 ;GET ID STORAGE MOVE.W D1,(A0) ;STORE ID XRWF ;REWIND FILE LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINT64URCE FLAG TST.W (A0) ;CHECK WHAT SOURCE BNE.S M_PROG ;SOURCE = MEMORY BRA.L F_PROG ;SOURCE = FILE * **************************************** * * SOURCE = MEMORY * M_PROG LEA.L MADDR(PC),A0 ;GET MEMORY ADDRESS POINTER MOVE.L (A0),A0 ;GET ME>BEQ.S B_LOOP ;SUCCESS, CONTINUE * @002 CMP.B #56,D0 ;END OF FILE? BEQ.S @003 ;YES LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE FILE XERR ;NO, EXIT WITH ERROR MESSAGE * @003 MOVE.L D3,D0 ;GET # OF BYTES MOVE.L A2,A0      A? ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR BITTST ;DO A BIT TEST BEQ.S @010 ;SUCCESS * XPMC BFMSG ;BIT TEST FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPIGA2),D4 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W (A2),D2 ;GET REPEAT COUNT * V_LOOP LEA.L FBUFF(PC),A2 ;GET FILE BUFFER MOVE.L #256,D0 ;# OF BYTES TO READ LEA.L FID(PC),A0 ;GET FILE ID STORAGE MOVE.W (A0),D1 ;GET ID XRBFB@LAY ADDRESS XPCL ;CR/LF LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE FILE XEXT ;EXIT TO PDOS * * BITTEST PASSED, NOW WE PROGRAM THE EPROMS * @010 XPMC BSMSG ;BIT TEST SUCCESSFUL LEA.L FID(PC),A0 ;GET FILE ID POINTER MJH ;READ BYTES FROM FILE BNE.S @002 ;IF ERROR MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR VERIFY ;DO A VERIFY BEQ.S V_LOOP ;SUCCESS, CONTINUE * @002 CMP.B #56,D0 ;END OF FILE? BEQ.S @003 ;YES LEA.L FID(PC),A0 ;GETCAOVE.W (A0),D1 ;GET ID XRWF ;REWIND THE FILE LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MODE(PC),A2 ;GET MODE POINTER MOVE.W (A2),D4 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W (AKI FILE ID MOVE.W (A0),D1 XCLF ;CLOSE FILE XERR ;NO, EXIT WITH ERROR MESSAGE * @003 MOVE.L D3,D0 ;GET # OF BYTES MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR VERIFY ;DO A VERIFY BEQ.S @030 ;SUCCESS * XPMC VFMSG DB2),D2 ;GET REPEAT COUNT * P_LOOP LEA.L FBUFF(PC),A2 ;GET FILE BUFFER MOVE.L #256,D0 ;# OF BYTES TO READ LEA.L FID(PC),A0 ;GET FILE ID STORAGE MOVE.W (A0),D1 ;GET ID XRBF ;READ BYTES FROM FILE BNE.S @002 ;IF ERROR MOVE.L A2,A0 ;GET LJ ;VERIFY FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE SOURCE FILE XEXT ;EXECMEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR DO_PROG ;PROGRAM BEQ.S P_LOOP ;SUCCESS, CONTINUE * @002 CMP.B #56,D0 ;END OF FILE? BEQ.S @003 ;YES LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE FILE XERR ;NO, EXIT WITH EMKIT TO PDOS * @030 XPMC VSMSG ;VERIFY WAS SUCCESSFUL LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE SOURCE FILE XEXT ;JOB DONE! * **************************************** * * RR_2 EPROM LOAD ROUTINE * RR_LOAD LEA.L SRCFLAG(PC),A0 FDRROR MESSAGE * @003 MOVE.L D3,D0 ;GET # OF BYTES MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR DO_PROG ;PROGRAM BEQ.S @020 ;SUCCESS * XPMC PFMSG ;PROGRAMMING FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;NL ;GET SOURCE FLAG TST.W (A0) ;IS IT MEMORY? BNE.S @001 ;YES XPMC LEMSG ;DISPLAY ERROR MESSAGE XEXT ;EXIT TO PDOS @001 LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MADDR(PC),A0 ;GET MEMORY ADDREGEGET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE FILE XEXT ;EXIT TO PDOS * * PROGRAM WAS SUCCESFUL, NOW WE VERIFY THE EPROM(S) * @020 XPMCOMSS POINTER MOVE.L (A0),A0 ;MEMORY ADDRESS LEA.L MCOUNT(PC),A2 ;GET BYTE COUNT POINTER MOVE.L (A2),D0 ;GET BYTE COUNT LEA.L MODE(PC),A2 ;GET MODE POINTER MOVE.W (A2),D1 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W (A2),D2 ;HF PSMSG ;PROGRAM SUCCESSFUL LEA.L FID(PC),A0 ;GET FILE ID POINTER MOVE.W (A0),D1 ;GET ID XRWF ;REWIND THE FILE LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MODE(PC),A2 ;GET MODE POINTER MOVE.W (PNGET REPEAT COUNT EXT.L D1 ;MODE TO LONG EXT.L D2 ;REPEAT COUNT TO LONG CLR.L D3 ;EPROM CONTENTS CMP.W #2,D1 ;WORD/LONG MODE? BEQ.S @050 ;YES * @010 MOVE.B (A1),(A0) ;READ EPROM ADDA.L D1,A1 ;UPDATE RR_2 POINTER ADDA.L #1,A0 ;UPDAT     QOE MEMORY POINTER SUBQ.L #1,D0 ;DECREMENT COUNTER BNE.S @010 ;CONTINUE BRA.S @100 ;LOAD IS DONE * @050 MOVE.W (A1),(A0) ;READ EPROM * MOVE.L D2,-(A7) ;SAVE REPEAT COUNT @211 ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,D2 ;DECREMENT REPEYW0),A0 ;GET MEMORY POINTER LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MCOUNT(PC),A2 ;GET BYTE COUNT POINTER MOVE.L (A2),D0 ;GET BYTE COUNT LEA.L MODE(PC),A2 ;GET MODE POINTER MOVE.W (A2),D1 ;GETRPAT COUNT BNE.S @211 ;IF WORD THEN AGAIN MOVE.L (A7)+,D2 ;RESTORE REPEAT COUNT * @060 ADDA.L #2,A0 ;UPDATE MEMORY POINTER SUBQ.L #2,D0 ;DECREMENT COUNTER BNE.S @050 ;CONTINUE * @100 XPMC LSMSG ;LOAD SUCCESS MESSAGE XEXT * ***************ZX MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W (A2),D2 ;GET REPEAT COUNT BSR VERIFY ;EXECUTE VERIFY BEQ.S @030 ;SUCCESS XPMC VFMSG ;VERIFY FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CSQ************************* * * RR_2 EPROM EMPTY CHECK * RR_EMPT LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MCOUNT(PC),A2 ;GET BYTE COUNT POINTER MOVE.L (A2),D0 ;GET BYTE COUNT LEA.L MODE(PC),A2 ;GET M[YONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF XEXT ;EXIT TO PDOS * @030 XPMC VSMSG ;VERIFY WAS SUCCESSFUL XEXT ;JOB DONE! * * SOURCE = FILE * RR_VERF LEA.L FNAM(PC),A1 :GET SOURCE FILE NAME XSOP ;OPEN FILE BEQ.S @001 ;TRODE POINTER MOVE.W (A2),D1 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W (A2),D2 ;GET REPEAT COUNT EXT.L D1 ;MODE TO LONG EXT.L D2 ;REPEAT COUNT TO LONG CLR.L D3 ;EPROM CONTENTS CMP.W #2,D1 ;WORD/LONG MODE? BEQ.S @050 \ZNO ERRORS XERR ;EXIT WITH ERROR MESSAGE @001 LEA.L FID(PC),A0 ;GET ID STORAGE MOVE.W D1,(A0) ;STORE ID XRWF ;REWIND FILE LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MODE(PC),A2 ;GET MODE POINTUS;YES * @010 MOVE.B (A1),D3 ;READ EPROM CMP.B #$FF,D3 ;COMPARE IT BNE.S @020 ;EMPTY CHECK FAILED ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,D0 ;DECREMENT COUNTER BNE.S @010 ;CONTINUE BRA.S @100 ;EMPTY CHECK DONE * @050 MOVE.W (A1),D][ER MOVE.W (A2),D4 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W (A2),D2 ;GET REPEAT COUNT * @300 LEA.L FBUFF(PC),A2 ;GET FILE BUFFER MOVE.L #256,D0 ;# OF BYTES TO READ LEA.L FID(PC),A0 ;GET FILE ID STORAGE MOVE.W (A0),D1 ;GEVT3 ;READ EPROM CMP.W #$FFFF,D3 ;COMPARE IT BNE.S @020 ;EMPTY CHECK FAILED ADDA.L D1,A1 ;UPDATE RR_2 POINTER TST.B D2 ;WORD MODE? BNE.S @060 ;NO ADDA.L #2,A1 ;YES @060 SUBQ.L #2,D0 ;DECREMENT COUNTER BNE.S @050 ;CONTINUE BRA.S @1^\T ID XRBF ;READ BYTES FROM FILE BNE.S @002 ;IF ERROR MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR VERIFY ;DO A VERIFY BEQ.S @300 ;SUCCESS, CONTINUE * @002 CMP.B #56,D0 ;END OF FILE? BEQ.S @003 ;YES LEA.L FID(PC),WU00 ;EMPTY CHECK DONE * @020 MOVE.L A1,D1 ;GET FAIL LOCATION LEA.L BUFF(PC),A1 ;GET DATA BUFFER XPMC EFMSG ;EMPTY FAIL MESSAGE XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XEXT * @100 XPMC ESMSG ;EMPTY SUCCESS MESSAGE XEXT * ***_]A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE FILE XERR ;NO, EXIT WITH ERROR MESSAGE * @003 MOVE.L D3,D0 ;GET # OF BYTES MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR VERIFY ;DO A VERIFY BEQ.S @030 ;SUCCESS * XPMCXV************************************* * * RR_2 VERIFY OPTION * RR_VER LEA.L SRCFLAG(PC),A0 ;GET SOURCE FLAG TST.W (A0) ;CHECK WHAT SOURCE BNE.S @001 ;MEMORY! BRA.S RR_VERF ;FILE! @001 LEA.L MADDR(PC),A0 ;GET MEMORY ADDRESS POINTER MOVE.L (A`^ VFMSG ;VERIFY FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE SOURCE FILE XEX     a_T ;EXIT TO PDOS * @030 XPMC VSMSG ;VERIFY WAS SUCCESSFUL LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE SOURCE FILE XEXT ;JOB DONE! * **************************************** * * BIT TEST ROUTINE * * IN : D0.L = BYTECOUNT * ig) ;SAVE REGISTERS EXT.L D1 ;MODE TO LONG EXT.L D2 ;REPEAT COUNT TO LONG CLR.L D3 ;MEMORY CONTENTS CLR.L D4 ;EPROM CONTENTS CMP.W #2,D1 ;WORD/LONG MODE? BEQ.S @050 ;YES * @010 MOVE.B (A1),D3 ;READ EPROM MOVE.B (A0),D4 ;READ MEMORb` D1.W = MODE (4 OR 2) * D2.W = REPEAT COUNT (1 OR 2) * A0.L = MEMORY ADDRESS * A1.L = RR_2 ADDRESS * * OUT: SR = .EQ. ON GOOD RETURN * A3.L = 0 * = .NE. ON BIT TEST FAIL * A3.L = FAIL ADDRESS * BITTST MOVEM.L D0-D4/A0,-(A7) ;SjhY CMP.B D3,D4 ;COMPARE IT BNE.S @020 ;VERIFY FAILED ADDA.L #1,A0 ;UPDATE MEMORY POINTER ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,D0 ;DECREMENT COUNTER BNE.S @010 ;CONTINUE BRA.S @100 ;VERIFY DONE * @050 MOVE.W (A1),D3 ;READ EPcaAVE REGISTERS EXT.L D1 ;MODE TO LONG EXT.L D2 ;REPEAT COUNT TO LONG CLR.L D3 ;MEMORY CONTENTS CLR.L D4 ;EPROM CONTENTS CMP.W #2,D1 ;WORD/LONG MODE? BEQ.S @050 ;YES * @010 MOVE.B (A1),D3 ;READ EPROM MOVE.B (A0),D4 ;READ MEMORY ORkiROM MOVE.W (A0),D4 ;READ MEMORY CMP.W D3,D4 ;COMPARE IT BNE.S @020 ;VERIFY FAILED ADDA.L #2,A0 ;UPDATE MEMORY POINTER * MOVE.L D2,-(A7) ;SAVE REPEAT COUNT @211 ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,D2 ;DECREMENT REPEAT COUNT Bdb.B D3,D4 ;OR IT CMP.B D3,D4 ;COMPARE IT BNE.S @020 ;BIT TEST FAILED ADDA.L #1,A0 ;UPDATE MEMORY POINTER ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,D0 ;DECREMENT COUNTER BNE.S @010 ;CONTINUE BRA.S @100 ;BIT TEST DONE * @050 MOVE.ljNE.S @211 ;IF WORD THEN AGAIN MOVE.L (A7)+,D2 ;RESTORE REPEAT COUNT * @060 SUBQ.L #2,D0 ;DECREMENT COUNTER BNE.S @050 ;CONTINUE BRA.S @100 ;VERIFY DONE * @020 MOVEA.L A0,A3 ;GET FAIL LOCATION MOVEM.L (A7)+,D0-D4/A0 ;RESTORE REGISTERS CecW (A1),D3 ;READ EPROM MOVE.W (A0),D4 ;READ MEMORY OR.W D3,D4 ;OR IT CMP.W D3,D4 ;COMPARE IT BNE.S @020 ;BIT TEST FAILED ADDA.L #2,A0 ;UPDATE MEMORY POINTER * MOVE.L D2,-(A7) ;SAVE REPEAT COUNT @211 ADDA.L D1,A1 ;UPDATE RR_2 POINTERmkLR.W -(A7) ;RETURN .NE. RTR * @100 MOVEM.L (A7)+,D0-D4/A0 ;RESTORE REGISTERS MOVE.W #$2004,-(A7) ;RETURN .EQ. RTR * **************************************** * * PROGRAM EPROM(S) ROUTINE * * IN : D0.L = BYTECOUNT * D1.W = MODE (4 OR 2) * fd SUBQ.L #1,D2 ;DECREMENT REPEAT COUNT BNE.S @211 ;IF WORD THEN AGAIN MOVE.L (A7)+,D2 ;RESTORE REPEAT COUNT * @060 SUBQ.L #2,D0 ;DECREMENT COUNTER BNE.S @050 ;CONTINUE BRA.S @100 ;BIT TEST DONE * @020 MOVEA.L A0,A3 ;GET FAIL LOCATION nl D2.W = REPEAT COUNT (1 OR 2) * A0.L = MEMORY ADDRESS * A1.L = RR_2 ADDRESS * * OUT: SR = .EQ. ON GOOD RETURN * A3.L = 0 * = .NE. ON BIT TEST FAIL * A3.L = FAIL ADDRESS * DO_PROG MOVEM.L D0-D4/A0/A2,-(A7) ;SAVE REGISTERS EXT.L D1 ;geMOVEM.L (A7)+,D0-D4/A0 ;RESTORE REGISTERS CLR.W -(A7) ;RETURN .NE. RTR * @100 MOVEM.L (A7)+,D0-D4/A0 ;RESTORE REGISTERS MOVE.W #$2004,-(A7) ;RETURN .EQ. RTR * **************************************** * * VERIFY ROUTINE * * IN : D0.L = BYTECOUNomMODE TO LONG EXT.L D2 ;REPEAT COUNT TO LONG CLR.L D4 ;MEMORY CONTENTS CMP.W #2,D1 ;WORD/LONG MODE? BEQ.S WL_MOD ;YES * * PROGRAMMING IN BYTE MODE * B_MOD MOVE.B (A0),D4 ;READ MEMORY MOVE.B D4,D3 ;FOR EPROM READ BACK NOT.B D3 ;DETROYhfT * D1.W = MODE (4 OR 2) * D2.W = REPEAT COUNT (1 OR 2) * A0.L = MEMORY ADDRESS * A1.L = RR_2 ADDRESS * * OUT: SR = .EQ. ON GOOD RETURN * A3.L = 0 * = .NE. ON BIT TEST FAIL * A3.L = FAIL ADDRESS * VERIFY MOVEM.L D0-D4/A0,-(A7pn D3 MOVE.B D4,(A1) ;WRITE EPROM MOVE.L #200,D7 ;TIME OUT COUNTER * * READ BACK LOOP * @200 BSR.S NEW ;SET NEW BUS ERROR AND LOCK TASK CLR.L D6 ;BUS ERROR DETECT MOVE.B (A1),D3 ;READ IT BACK TST.L D6 ;BUS ERROR? BEQ.S @400 ;NO BSR O     qoLD ;RESTOR BUS ERROR, UNLOCK TASK XSWP ;SWAP TO NEXT TASK BRA.S @200 ;TRY AGAIN @400 CMP.B D3,D4 ;DONE? BEQ.S @210 ;YES, CONTINUE MOVE.B D4,(A1) ;WRITE EPROM SUBQ.L #1,D7 ;DECREMENT TIME OUT BNE.S @200 ;TRY AGAIN * BRA.S P_ERR yw OLDBERR(PC),A3 ;GET STORAGE OF BUS ERROR ADDRESS MOVE.L (A3),$8 ;RESTORE BUS ERROR VECTOR XULT ;UNLOCK TASK RTS * * DISPLAY MESSAGE AND PROGRAMMING ADDRESS * DISPL MOVEM.L D0-D2/A1,-(A7) ;SAVE USED REGISTERS MOVE.L D0,D2 ;GET COUNTER MOVrp ;TIME OUT ERROR * @210 ADDA.L #1,A0 ;UPDATE MEMORY POINTER ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,D0 ;DECREMENT COUNTER BNE B_MOD ;CONTINUE BRA.S P_DONE ;PROGRAMMING DONE * * WORD AND LONG WORD MODE * WL_MOD MOVE.W (A0),D4 ;READ MzxE.W #$0D,D0 ;DO A CR XPCC XPMC PPMSG ;DISPLAY MESSAGE MOVE.L A1,D1 ;GET EPROM ADDRESS LEA.L BUFF(PC),A1 ;CONVERT BUFFER XCHX ;CONVERT TO ASCII HEX XPEL ;DISPLAY IT XPMC MSG02 ;DISPLAY.... MOVE.L D2,D1 ;GET COUNTER XCHX sqEMORY MOVE.W D4,D3 ;FOR EPROM READ BACK NOT.W D3 ;DETROY D3 MOVE.W D4,(A1) ;WRITE EPROM MOVE.L #200,D7 ;TIME OUT COUNTER * * READ BACK LOOP * @200 BSR.S NEW ;SET NEW BUS ERROR AND LOCK TASK CLR.L D6 ;BUS ERROR DETECT MOVE.W (A1),D3 {y;CONVERT TO ASCII HEX XPEL ;PRINT IT MOVEM.L (A7)+,D0-D2/A1 ;RESTORE REGISTERS RTS ;RETURN TO CALLER * * BUS ERROR HANDLER FOR RR_2 * BUSERR MOVE.L D7,-(A7) ;SAVE THIS MOVE.L #500,D7 ;500 uSEC DELAY @010 SUBQ.L #1,D7 BNE.S @010 MOVEQ.L tr;READ IT BACK TST.L D6 ;BUS ERROR? BEQ.S @400 ;NO BSR.S OLD ;RESTOR BUS ERROR, UNLOCK TASK XSWP ;SWAP TO NEXT TASK BRA.S @200 ;TRY AGAIN @400 CMP.W D3,D4 ;DONE? BEQ.S @210 ;YES, CONTINUE MOVE.W D4,(A1) ;WRITE EPROM SUBQ.L #1,D7|z#1,D6 ;SET BUS ERROR FLAG MOVE.L (A7)+,D7 ;RESTORE REGISTER RTE * **************************************** * * USAGE DISPLAY ON PARAMETER ERRORS * USAGE XPMC MSG01 ;DISPLAY MESSAGE XPCL ;CR/LF XEXT ;EXIT TO PDOS * ***********************us ;DECREMENT TIME OUT BNE.S @200 ;TRY AGAIN * BRA.S P_ERR ;TIME OUT * @210 ADDA.L D1,A0 ;UPDATE MEMORY POINTER MOVE.L D2,-(A7) ;SAVE REPEAT COUNT @211 ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,D2 ;DECREMENT REPEAT COUNT BNE.S @211 }{***************** * * DATA AREA * FNAM DS.B 16 ;SOURCE FILE NAME MADDR DS.L 1 ;MEMORY SOURCE ADDRESS MCOUNT DS.L 1 ;BYTE COUNTER RRADDR DS.L 1 ;RR_2 BOARD ADDRESS OLDBERR DS.L 1 ;OLD BUS ERROR VECTOR MODE DS.W 1 ;RR_2 WORK MODE OPTION DS.W vt;IF WORD THEN AGAIN MOVE.L (A7)+,D2 ;RESTORE REPEAT COUNT * SUBQ.L #2,D0 ;DECREMENT COUNTER BNE WL_MOD ;CONTINUE BRA.S P_DONE ;PROGRAMMING DONE * * RETURN .NE. ON PROGRAMMING FAIL * P_ERR MOVE.L A1,A3 ;STORE ERROR LOCATION MOVEM.L (A7)+,D~|1 ;RR_2 OPERATION SRCFLAG DS.W 1 ;SOURCE FLAG REPEAT DS.W 1 ;REPEAT COUNTER FID DS.W 1 :FILE ID * BUFF DS.B 20 ;DATA BUFFER * FBUFF DS.B 256 ;FILE BUFFER * * MESSAGE AREA * MSG01 DC.B 10,10,13,7,'*** PARAMETER ERROR' DC.B 10,10,13,'RR_2 USwu0-D4/A0/A2 ;RESTORE REGISTERS CLR.W -(A7) ;RETURN .NE. RTR * * RETURN .EQ. ON SUCCESS * P_DONE MOVEM.L (A7)+,D0-D4/A0/A2 ;RESTORE REGISTERS MOVE.W #$2004,-(A7) ;RETURN .EQ. RTR * * SET NEW BUS ERROR HANDLER AND LOCK TASK * NEW XLKT ;LOCK TASK}AGE:',10,13,'===========',10,13 DC.B 10,13,'>RR_2 F,FILENAME,RR_2_ADDRESS,MODE,OPTION' DC.B 10,10,13,'OR ' DC.B 10,10,13,'>RR_2 M,STRTADDR,BYTECNT,RR_2_ADDRESS,MODE,OPTION' DC.B 10,10,13,'F,FILENAME.............SOURCE = DISK FILE' DC.B 10,13,'M,Sxv LEA.L OLDBERR(PC),A3 ;GET STORAGE OF BUS ERROR ADDRESS LEA.L BUSERR(PC),A4 ;GET NEW BUS ERROR HANDLER MOVE.L $8,(A3) ;SAVE OLD BUS ERROR ADDRESS MOVE.L A4,$8 ;SET NEW ADDRESS RTS * * RESTORE OLD BUS ERROR HANDLER AND UNLOCK TASK * OLD LEA.L~TRTADDR,BYTECNT.....SOURCE = MEMORY' DC.B 10,13,'RR_2_ADDR..............RR_2 BOARD ADDRESS' DC.B 10,13,'MODE...................1 = BYTE = 8-BIT MODE' DC.B 10,13,' 2 = WORD = 16-BIT MODE' DC.B 10,13,' 4 =      LONG = 32-BIT MODE' DC.B 10,13,'OPTION.................P = PROGRAM' DC.B 10,13,' E = EMPTY CHECK' DC.B 10,13,' V = VERIFY' DC.B 10,13,' L = LOAD TO MEMORY',0 * MSG02 DC.B '.....',0 CZhn"hnLNu/.<Sf|.NsDfD`  fgzNuBga fa |fdame&!ga`@0.".*XJ.fJ.fa``4QI$$$z4)fPRDXWNw 'fSHftJgaVnfa" `^ LrvCgSHJgftg8 .gFCMSG03 DC.B 10,10,13,' ADDRESS COUNTER' DC.B 10,13,'------------------------------------',0 * FFMSG DC.B 10,10,13,7,'*** SOURCE FILE ERROR ',0 FSMSG DC.B 10,10,13,'FILE LOADED INTO MEMORY!',0 * EFMSG DC.B 10,10,13,7,'*** EMPTY CHECK İ1 e(f H@H@J@ganB@Ҁ҂`RBfJjSH(H4$BZ`n Wf` LfPTH`()=<<>><\+-*/&!<>-~ *** PARAMETER ERROR RR_2 USAGE: =========== >RR_2 F,FILENAME,RR_2_ADDRESS,MODE,OPTION OR >RR_2 M,STRTADDR,BYTECNT,RR_2_AZo Fg Mg`ZoGfA0`$ZoVoA ZoΠVoA ZoVoA ZoVo f rE4`$ f rE4` fxrE4A0Zob Pg Egp Vg Lg`@AhJPf`AH PCJ"QE@ EF2EFDDRESS,MODE,OPTION F,FILENAME.............SOURCE = DISK FILE M,STRTADDR,BYTECNT.....SOURCE = MEMORY RR_2_ADDR..............RR_2 BOARD ADDRESS MODE...................1 = BYTE = 8-BIT MODE 2 = WORD = 16-BIT MODE 4a^g l" C8hn C"Qag ," Chn GC"Qaxg r" Chn Cg A0C"QE8E4E <A2f J"ag 8g A2Ҡ  J"ag" C~hnAr2ҠAd2CL"QEN8EN4E 4 = LONG = 32-BIT MODE OPTION.................P = PROGRAM E = EMPTY CHECK V = VERIFY L = LOAD TO MEMORY..... ADDRESS COUNTER -----------------` <A@2f J"ag 8g A&2Ҡ  J"ag "" C hnA2Ҡ 5A2C"QE8E4E <A2f J"a:g 8g A2Ҡ  J"ag" ChnA2Ҡ'A2ҠArJPf.CX"QAJ PEH EN2EN------------------- *** SOURCE FILE ERROR FILE LOADED INTO MEMORY! *** EMPTY CHECK FAILED AT EPROM ADDRESS EMPTY CHECK PASSED SUCCESSFUL! *** BIT TEST FAILED AT MEMORY ADDRESS BIT TEST PASSED SUCCESSFUL! *** VERIFY FAILED AT4HHB AgSf`0/Sf$UfꠌC"QE E2E4HHB Ag f"Sf`*6 CfJfUf`" CĠhn AJPf`RR_2 F,MYFILE:PRG/4,$800000,2,P \ \ \ \ \__option = program \ \ \ \___mode = word \ \ OVE.B (A1)+,(A3)+ ;STORE FILENAME BNE.S @011 LEA.L SRCFLAG(PC),A0 ;GET SOURCE FLAG MOVE.W #0,(A0) ;SET TO FILE MODE BRA.S @100 ;CONTINUE * @020 XGNP ;GET THE MEMORY ADDRESS BLE USAGE ;ILLEGAL PARAMETER XCDB ;CONVERT ADDRESS  \_______RR-2 base address \ \_________________source file name \_______________________source = file c) load EPROMs into memory >RR_2 M,$10000,$8000,$800000,2,L \ \ \ \ \ \__option = load \  BLE USAGE ;CONVERT ERROR LEA.L MADDR(PC),A0 ;GET ADDRESS STORAGE MOVE.L D1,(A0) ;STORE ADDRESS XGNP ;GET BYTE COUNT BLE USAGE ;ILLEGAL PARAMETER XCDB ;CONVERT COUNT - 6 - BLE USAGE ;CONVERT ERROR LEA. \ \ \ \___mode = word \ \ \ \_______RR-2 base address \ \ \_____________byte count(2 EPROMs 16k x 8) \ \__________________memory address \______________________destination = memory L MCOUNT(PC),A0 ;GET COUNT STORAGE MOVE.L D1,(A0) :STORE COUNT * @100 XGNP ;GET RR_2 ADDRESS BLE USAGE ;ILLEGAL PARAMETER XCDB ;CONVERT ADDRESS BLE USAGE ;CONVERT ERROR LEA.L RRADDR(PC),A0 ;GET ADDRESS STORAGE MOVE.L D1,(A0) - 5 - 8. Driver source code listing: ------------------------------ ******************************************************************* *** *** *** RR_2 APPLICATION PROGR ;STORE ADDRESS * XGNP ;GET RR_2 WORK MODE BLE USAGE ;ILLEGAL PARAMETER XCDB ;CONVERT MODE BLE USAGE ;CONVERT ERROR CMP.B #1,D1 ;BYTE MODE? BNE.S @101 ;NO MOVEQ.L #4,D1 ;YES, INCREMENT = 4 LEA.L REPEAT(PC),A2 ;GET REAM *** *** *** ******************************************************************* *** *** *** USAGE : *** *** *** *** >RR_2 {F,FNAM}[M,STADDR,COUNT],RR_ADDR,MODE,OPT *** *** *** *** F,FILNAM SOURCE = DISK FPEAT COUNT MOVE.W #1,(A2) ;SET TO ONE BRA.S @200 @101 CMP.B #4,D1 ;LONG MODE? BNE.S @102 ;NO MOVEQ.L #2,D1 ;YES, INCREMENT = 2 LEA.L REPEAT(PC),A2 ;GET REPEAT COUNT MOVE.W #1,(A2) ;SET TO TWO BRA.S @200 @102 CMP.B #2,D1 ;WOILE *** *** M,STADDR,COUNT SOURCE = MEMORY *** *** RR_ADDR RR_2 BOARD ADDRESS *** *** MODE 1 = BYTE, 2 = WORD, 4 = LONG *** *** OPT P = PROGRAM, E = EMPTY CHECK, *** *** V = VERIFY, L = LOAD *** *** *** *******************RD MODE? BNE USAGE ;NO, ERROR MOVEQ.L #2,D1 ;YES, INCREMENT = 2 LEA.L REPEAT(PC),A2 ;GET REPEAT COUNT MOVE.W #2,(A2) ;SET TO ONE @200 LEA.L MODE(PC),A0 ;GET MODE STORAGE MOVE.W D1,(A0) ;STORE IT * XGNP ;GET OPTION BLE USAGE************************************************ * OPT ALT * **************************************** * * FIRST WE'RE GETTING ALL THE * COMMAND LINE PARAMETERS * XGNP ;GET THE FIRST PARAM BLE USAGE ;ILLEGAL PARAMETER CMP.B #'F',( ;ILLEGAL PARAMETER CMP.B #'P',(A1) ;PROGRAM? BEQ.S RR_PROG ;YES CMP.B #'E',(A1) ;NO, EMPTY CHECK? BEQ RR_EMPT ;YES CMP.B #'V',(A1) ;NO, VERIFY? BEQ RR_VER ;YES CMP.B #'L',(A1) ;NO, LOAD FROM EPROM? BEQ RR_LOAD ;YES BRA      USAGE ;NO, PARAMETER ERROR * **************************************** * * PROGRAM EPROMS ON RR_2 BOARD * RR_PROG LEA.L SRCFLAG(PC),A0 ;GET SOURCE FLAG TST.W (A0) ;CHECK WHAT SOURCE BNE.S M_PROG ;SOURCE = MEMORY BRA.L F_PROG ;SOURCEA DISK FILE * F_PROG LEA.L FNAM(PC),A1 :GET SOURCE FILE NAME XSOP ;OPEN FILE BEQ.S @001 ;NO ERRORS XERR ;EXIT WITH ERROR MESSAGE @001 LEA.L FID(PC),A0 ;GET ID STORAGE MOVE.W D1,(A0) ;STORE ID XRWF ;REWIND FILE LEA.L RRADDR = FILE - 7 - * **************************************** * * SOURCE = MEMORY * M_PROG LEA.L MADDR(PC),A0 ;GET MEMORY ADDRESS POINTER MOVE.L (A0),A0 ;GET MEMORY POINTER LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MODE(PC),A2 ;GET MODE POINTER MOVE.W (A2),D4 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W (A2),D2 ;GET REPEAT COUNT * * FIRST DO A BIT TEST * B_ MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MCOUNT(PC),A2 ;GET BYTE COUNT POINTER MOVE.L (A2),D0 ;GET BYTE COUNT LEA.L MODE(PC),A2 ;GET MODE POINTER MOVE.W (A2),D1 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W (A2),D2 ;GLOOP LEA.L FBUFF(PC),A2 ;GET FILE BUFFER MOVE.L #256,D0 ;# OF BYTES TO READ LEA.L FID(PC),A0 ;GET FILE ID STORAGE MOVE.W (A0),D1 ;GET ID XRBF ;READ BYTES FROM FILE BNE.S @002 ;IF ERROR MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L ET REPEAT COUNT * BSR BITTST ;FIRST DO A BIT TEST BEQ.S @010 ;SUCCESS XPMC BFMSG ;BIT TEST FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCD4,D1 ;GET MODE BSR BITTST ;DO A BIT TEST BEQ.S B_LOOP ;SUCCESS, CONTINUE * @002 CMP.B #56,D0 ;END OF FILE? BEQ.S @003 ;YES LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE FILE XERR ;NO, EXIT WITH ERROR MESSAGEL ;CR/LF XEXT ;EXIT TO PDOS * @010 XPMC BSMSG ;BIT TEST SUCCESSFUL LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER BSR DO_PROG ;NOW PROGRAM THE EPROM(S) BEQ.S @020 ;SUCCESS XPMC PFMSG ;PROGR * @003 MOVE.L D3,D0 ;GET # OF BYTES MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR BITTST ;DO A BIT TEST BEQ.S @010 ;SUCCESS * XPMC BFMSG ;BIT TEST FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;AMMING FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF XEXT ;EXIT TO PDOS * @020 XPMC PSMSG ;PROGRAM SUCCESSFUL LEA.L RRADDR(PC),GET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE FILE XEXT ;EXIT TO PDOS - 9 - * * BITTEST PASSED, NOW WE PA1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER BSR VERIFY ;VERIFY EPROM AND DATA BEQ.S @030 ;SUCCESS XPMC VFMSG ;VERIFY FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CONVEROGRAM THE EPROMS * @010 XPMC BSMSG ;BIT TEST SUCCESSFUL LEA.L FID(PC),A0 ;GET FILE ID POINTER MOVE.W (A0),D1 ;GET ID XRWF ;REWIND THE FILE LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MORT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF XEXT ;EXIT TO PDOS * @030 XPMC VSMSG ;VERIFY WAS SUCCESSFUL XEXT ;JOB DONE! - 8 - * **************************************** * * PROGRAM SOURCE IS DE(PC),A2 ;GET MODE POINTER MOVE.W (A2),D4 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W (A2),D2 ;GET REPEAT COUNT * P_LOOP LEA.L FBUFF(PC),A2 ;GET FILE BUFFER MOVE.L #256,D0 ;# OF BYTES TO READ LEA.L FID(PC),A0 ;GET FI     LE ID STORAGE MOVE.W (A0),D1 ;GET ID XRBF ;READ BYTES FROM FILE BNE.S @002 ;IF ERROR MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR DO_PROG ;PROGRAM BEQ.S P_LOOP ;SUCCESS, CONTINUE * @002 CMP.B #56,D0 ;END DDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE SOURCE FILE XEXT ;EXIT TO PDOS * @030 XPMC VSMSG ;VEOF FILE? BEQ.S @003 ;YES LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE FILE XERR ;NO, EXIT WITH ERROR MESSAGE * @003 MOVE.L D3,D0 ;GET # OF BYTES MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR DORIFY WAS SUCCESSFUL LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE SOURCE FILE XEXT ;JOB DONE! * **************************************** * * RR_2 EPROM LOAD ROUTINE * RR_LOAD LEA.L SRCFLAG(PC),A0 ;GET SOURCE FLAG TST._PROG ;PROGRAM BEQ.S @020 ;SUCCESS * XPMC PFMSG ;PROGRAMMING FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF LEA.L FID(PC),A0 W (A0) ;IS IT MEMORY? BNE.S @001 ;YES XPMC LEMSG ;DISPLAY ERROR MESSAGE XEXT ;EXIT TO PDOS - 11 - @001 LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MADDR(PC),A0 ;GET;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE FILE XEXT ;EXIT TO PDOS * * PROGRAM WAS SUCCESFUL, NOW WE VERIFY THE EPROM(S) * @020 XPMC PSMSG ;PROGRAM SUCCESSFUL LEA.L FID(PC),A0 ;GET FILE ID POINTER MOVE.W (A0),D1 ;GET ID XRWF  MEMORY ADDRESS POINTER MOVE.L (A0),A0 ;MEMORY ADDRESS LEA.L MCOUNT(PC),A2 ;GET BYTE COUNT POINTER MOVE.L (A2),D0 ;GET BYTE COUNT LEA.L MODE(PC),A2 ;GET MODE POINTER MOVE.W (A2),D1 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER ;REWIND THE FILE LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER - 10 - MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MODE(PC),A2 ;GET MODE POINTER MOVE.W (A2),D4 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W MOVE.W (A2),D2 ;GET REPEAT COUNT EXT.L D1 ;MODE TO LONG EXT.L D2 ;REPEAT COUNT TO LONG CLR.L D3 ;EPROM CONTENTS CMP.W #2,D1 ;WORD/LONG MODE? BEQ.S @050 ;YES * @010 MOVE.B (A1),(A0) ;READ EPROM ADDA.L D1,A1 ;UPDATE RR_2 PO (A2),D2 ;GET REPEAT COUNT * V_LOOP LEA.L FBUFF(PC),A2 ;GET FILE BUFFER MOVE.L #256,D0 ;# OF BYTES TO READ LEA.L FID(PC),A0 ;GET FILE ID STORAGE MOVE.W (A0),D1 ;GET ID XRBF ;READ BYTES FROM FILE BNE.S @002 ;IF ERROR MOVE.L A2INTER ADDA.L #1,A0 ;UPDATE MEMORY POINTER SUBQ.L #1,D0 ;DECREMENT COUNTER BNE.S @010 ;CONTINUE BRA.S @100 ;LOAD IS DONE * @050 MOVE.W (A1),(A0) ;READ EPROM * MOVE.L D2,-(A7) ;SAVE REPEAT COUNT @211 ADDA.L D1,A1 ;UPDATE RR_2 PO,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR VERIFY ;DO A VERIFY BEQ.S V_LOOP ;SUCCESS, CONTINUE * @002 CMP.B #56,D0 ;END OF FILE? BEQ.S @003 ;YES LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE FILE XERINTER SUBQ.L #1,D2 ;DECREMENT REPEAT COUNT BNE.S @211 ;IF WORD THEN AGAIN MOVE.L (A7)+,D2 ;RESTORE REPEAT COUNT * @060 ADDA.L #2,A0 ;UPDATE MEMORY POINTER SUBQ.L #2,D0 ;DECREMENT COUNTER BNE.S @050 ;CONTINUE * @100 XPMC LSMSG R ;NO, EXIT WITH ERROR MESSAGE * @003 MOVE.L D3,D0 ;GET # OF BYTES MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR VERIFY ;DO A VERIFY BEQ.S @030 ;SUCCESS * XPMC VFMSG ;VERIFY FAILED MOVE.L A3,D1 ;GET FAIL A ;LOAD SUCCESS MESSAGE XEXT * **************************************** * * RR_2 EPROM EMPTY CHECK * RR_EMPT LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MCOUNT(PC),A2 ;GET BYTE COUNT POINTER MOV     E.L (A2),D0 ;GET BYTE COUNT LEA.L MODE(PC),A2 ;GET MODE POINTER MOVE.W (A2),D1 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W (A2),D2 ;GET REPEAT COUNT EXT.L D1 ;MODE TO LONG EXT.L D2 ;REPEAT COUNT TO LONG CLR.L D3  - 13 - @030 XPMC VSMSG ;VERIFY WAS SUCCESSFUL XEXT ;JOB DONE! * * SOURCE = FILE * RR_VERF LEA.L FNAM(PC),A1 :GET SOURCE FILE NAME XSOP ;OPEN FILE BEQ.S @001 ;NO ERRORS XERR ;EXIT WITH ERROR MESSAGE @001 LEA.L FID(PC ;EPROM CONTENTS CMP.W #2,D1 ;WORD/LONG MODE? BEQ.S @050 ;YES * - 12 - @010 MOVE.B (A1),D3 ;READ EPROM CMP.B #$FF,D3 ;COMPARE IT BNE.S @020 ;EMPTY CHECK FAILED ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1),A0 ;GET ID STORAGE MOVE.W D1,(A0) ;STORE ID XRWF ;REWIND FILE LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LEA.L MODE(PC),A2 ;GET MODE POINTER MOVE.W (A2),D4 ;GET MODE LEA.L REPEAT(PC),A2 ;,D0 ;DECREMENT COUNTER BNE.S @010 ;CONTINUE BRA.S @100 ;EMPTY CHECK DONE * @050 MOVE.W (A1),D3 ;READ EPROM CMP.W #$FFFF,D3 ;COMPARE IT BNE.S @020 ;EMPTY CHECK FAILED ADDA.L D1,A1 ;UPDATE RR_2 POINTER TST.B D2 ;WORD MODE? GET REPEAT POINTER MOVE.W (A2),D2 ;GET REPEAT COUNT * @300 LEA.L FBUFF(PC),A2 ;GET FILE BUFFER MOVE.L #256,D0 ;# OF BYTES TO READ LEA.L FID(PC),A0 ;GET FILE ID STORAGE MOVE.W (A0),D1 ;GET ID XRBF ;READ BYTES FROM FILE BNE.S @00BNE.S @060 ;NO ADDA.L #2,A1 ;YES @060 SUBQ.L #2,D0 ;DECREMENT COUNTER BNE.S @050 ;CONTINUE BRA.S @100 ;EMPTY CHECK DONE * @020 MOVE.L A1,D1 ;GET FAIL LOCATION LEA.L BUFF(PC),A1 ;GET DATA BUFFER XPMC EFMSG ;EMPTY FAIL MESSAGE2 ;IF ERROR MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR VERIFY ;DO A VERIFY BEQ.S @300 ;SUCCESS, CONTINUE * @002 CMP.B #56,D0 ;END OF FILE? BEQ.S @003 ;YES LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XC XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XEXT * @100 XPMC ESMSG ;EMPTY SUCCESS MESSAGE XEXT * **************************************** * * RR_2 VERIFY OPTION * RR_VER LEA.L SRCFLAG(PC),A0 ;GET SOURCE FLAG TST.W (A0) LF ;CLOSE FILE XERR ;NO, EXIT WITH ERROR MESSAGE * @003 MOVE.L D3,D0 ;GET # OF BYTES MOVE.L A2,A0 ;GET MEMORY POINTER MOVE.L D4,D1 ;GET MODE BSR VERIFY ;DO A VERIFY BEQ.S @030 ;SUCCESS * XPMC VFMSG ;VERIFY FAILED MOV ;CHECK WHAT SOURCE BNE.S @001 ;MEMORY! BRA.S RR_VERF ;FILE! @001 LEA.L MADDR(PC),A0 ;GET MEMORY ADDRESS POINTER MOVE.L (A0),A0 ;GET MEMORY POINTER LEA.L RRADDR(PC),A1 ;GET RR_2 ADDRESS POINTER MOVE.L (A1),A1 ;GET RR_2 POINTER LE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE SOURCE FILE XEXT ;EXIT TO PDOS *EA.L MCOUNT(PC),A2 ;GET BYTE COUNT POINTER MOVE.L (A2),D0 ;GET BYTE COUNT LEA.L MODE(PC),A2 ;GET MODE POINTER MOVE.W (A2),D1 ;GET MODE LEA.L REPEAT(PC),A2 ;GET REPEAT POINTER MOVE.W (A2),D2 ;GET REPEAT COUNT BSR VERIFY ;EXECUTE V - 14 - @030 XPMC VSMSG ;VERIFY WAS SUCCESSFUL LEA.L FID(PC),A0 ;GET FILE ID MOVE.W (A0),D1 XCLF ;CLOSE SOURCE FILE XEXT ;JOB DONE! * **************************************** * * BIT TEST ROUTINE * * IERIFY BEQ.S @030 ;SUCCESS XPMC VFMSG ;VERIFY FAILED MOVE.L A3,D1 ;GET FAIL ADDRESS LEA.L BUFF(PC),A1 ;GET CONVERT BUFFER XCHX ;CONVERT TO HEX ASCII XPEL ;DISPLAY ADDRESS XPCL ;CR/LF XEXT ;EXIT TO PDOS * N : D0.L = BYTECOUNT * D1.W = MODE (4 OR 2) * D2.W = REPEAT COUNT (1 OR 2) * A0.L = MEMORY ADDRESS * A1.L = RR_2 ADDRESS * * OUT: SR = .EQ. ON GOOD RETURN * A3.L = 0 * = .NE. ON BIT TEST FAIL * A3.L = FAIL ADDRESS *      BITTST MOVEM.L D0-D4/A0,-(A7) ;SAVE REGISTERS EXT.L D1 ;MODE TO LONG EXT.L D2 ;REPEAT COUNT TO LONG CLR.L D3 ;MEMORY CONTENTS CLR.L D4 ;EPROM CONTENTS CMP.W #2,D1 ;WORD/LONG MODE? BEQ.S @050 ;YES * @010 MOVE.B (A1),D3 ;RETE RR_2 POINTER SUBQ.L #1,D0 ;DECREMENT COUNTER BNE.S @010 ;CONTINUE BRA.S @100 ;VERIFY DONE * @050 MOVE.W (A1),D3 ;READ EPROM MOVE.W (A0),D4 ;READ MEMORY CMP.W D3,D4 ;COMPARE IT BNE.S @020 ;VERIFY FAILED ADDA.L #2,A0 ;UAD EPROM MOVE.B (A0),D4 ;READ MEMORY OR.B D3,D4 ;OR IT CMP.B D3,D4 ;COMPARE IT BNE.S @020 ;BIT TEST FAILED ADDA.L #1,A0 ;UPDATE MEMORY POINTER ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,D0 ;DECREMENT COUNTER BNE.S @010 PDATE MEMORY POINTER * MOVE.L D2,-(A7) ;SAVE REPEAT COUNT @211 ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,D2 ;DECREMENT REPEAT COUNT BNE.S @211 ;IF WORD THEN AGAIN MOVE.L (A7)+,D2 ;RESTORE REPEAT COUNT * @060 SUBQ.L #2,D0 ;DECREM;CONTINUE BRA.S @100 ;BIT TEST DONE * @050 MOVE.W (A1),D3 ;READ EPROM MOVE.W (A0),D4 ;READ MEMORY OR.W D3,D4 ;OR IT CMP.W D3,D4 ;COMPARE IT BNE.S @020 ;BIT TEST FAILED ADDA.L #2,A0 ;UPDATE MEMORY POINTER * MOVE.L D2,-(A7)ENT COUNTER BNE.S @050 ;CONTINUE BRA.S @100 ;VERIFY DONE - 16 - @020 MOVEA.L A0,A3 ;GET FAIL LOCATION MOVEM.L (A7)+,D0-D4/A0 ;RESTORE REGISTERS CLR.W -(A7) ;RETURN .NE. RTR * @100 MOVEM.L (A7)+,D0-D4/A0 ;RES ;SAVE REPEAT COUNT @211 ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,D2 ;DECREMENT REPEAT COUNT BNE.S @211 ;IF WORD THEN AGAIN MOVE.L (A7)+,D2 ;RESTORE REPEAT COUNT * @060 SUBQ.L #2,D0 ;DECREMENT COUNTER BNE.S @050 ;CONTINUE BRTORE REGISTERS MOVE.W #$2004,-(A7) ;RETURN .EQ. RTR * **************************************** * * PROGRAM EPROM(S) ROUTINE * * IN : D0.L = BYTECOUNT * D1.W = MODE (4 OR 2) * D2.W = REPEAT COUNT (1 OR 2) * A0.L = MEMORY ADDA.S @100 ;BIT TEST DONE * - 15 - @020 MOVEA.L A0,A3 ;GET FAIL LOCATION MOVEM.L (A7)+,D0-D4/A0 ;RESTORE REGISTERS CLR.W -(A7) ;RETURN .NE. RTR * @100 MOVEM.L (A7)+,D0-D4/A0 ;RESTORE REGISTERS MOVE.W #$2004,-(A7) ;RESS * A1.L = RR_2 ADDRESS * * OUT: SR = .EQ. ON GOOD RETURN * A3.L = 0 * = .NE. ON BIT TEST FAIL * A3.L = FAIL ADDRESS * DO_PROG MOVEM.L D0-D4/A0/A2,-(A7) ;SAVE REGISTERS EXT.L D1 ;MODE TO LONG EXT.L D2 ;REPEAT COUNT TO LONRETURN .EQ. RTR * **************************************** * * VERIFY ROUTINE * * IN : D0.L = BYTECOUNT * D1.W = MODE (4 OR 2) * D2.W = REPEAT COUNT (1 OR 2) * A0.L = MEMORY ADDRESS * A1.L = RR_2 ADDRESS * * OUT: SR = G CLR.L D4 ;MEMORY CONTENTS CMP.W #2,D1 ;WORD/LONG MODE? BEQ.S WL_MOD ;YES * * PROGRAMMING IN BYTE MODE * B_MOD MOVE.B (A0),D4 ;READ MEMORY MOVE.B D4,D3 ;FOR EPROM READ BACK NOT.B D3 ;DETROY D3 MOVE.B D4,(A1) ;WRITE EPROM .EQ. ON GOOD RETURN * A3.L = 0 * = .NE. ON BIT TEST FAIL * A3.L = FAIL ADDRESS * VERIFY MOVEM.L D0-D4/A0,-(A7) ;SAVE REGISTERS EXT.L D1 ;MODE TO LONG EXT.L D2 ;REPEAT COUNT TO LONG CLR.L D3 ;MEMORY CONTENTS CLR.L D4 ;EPROM  MOVE.L #200,D7 ;TIME OUT COUNTER * * READ BACK LOOP * @200 BSR.S NEW ;SET NEW BUS ERROR ,LOCK TASK CLR.L D6 ;BUS ERROR DETECT MOVE.B (A1),D3 ;READ IT BACK TST.L D6 ;BUS ERROR? BEQ.S @400 ;NO BSR OLD ;RESTOR BUS ERROR, UNLOCONTENTS CMP.W #2,D1 ;WORD/LONG MODE? BEQ.S @050 ;YES * @010 MOVE.B (A1),D3 ;READ EPROM MOVE.B (A0),D4 ;READ MEMORY CMP.B D3,D4 ;COMPARE IT BNE.S @020 ;VERIFY FAILED ADDA.L #1,A0 ;UPDATE MEMORY POINTER ADDA.L D1,A1 ;UPDACK TASK XSWP ;SWAP TO NEXT TASK BRA.S @200 ;TRY AGAIN @400 CMP.B D3,D4 ;DONE? BEQ.S @210 ;YES, CONTINUE MOVE.B D4,(A1) ;WRITE EPROM SUBQ.L #1,D7 ;DECREMENT TIME OUT BNE.S @200 ;TRY AGAIN * BRA.S P_ERR ;TIME OUT ERROR *      - 17 - @210 ADDA.L #1,A0 ;UPDATE MEMORY POINTER ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,D0 ;DECREMENT COUNTER BNE B_MOD ;CONTINUE BRA.S P_DONE ;PROGRAMMING DONE * * WORD AND LONG WORD MODE * WL_MOD MOVE.G ADDRESS * DISPL MOVEM.L D0-D2/A1,-(A7) ;SAVE USED REGISTERS MOVE.L D0,D2 ;GET COUNTER MOVE.W #$0D,D0 ;DO A CR XPCC XPMC PPMSG ;DISPLAY MESSAGE MOVE.L A1,D1 ;GET EPROM ADDRESS LEA.L BUFF(PC),A1 ;CONVERT BUFFER XCHX ;COW (A0),D4 ;READ MEMORY MOVE.W D4,D3 ;FOR EPROM READ BACK NOT.W D3 ;DETROY D3 MOVE.W D4,(A1) ;WRITE EPROM MOVE.L #200,D7 ;TIME OUT COUNTER * * READ BACK LOOP * @200 BSR.S NEW ;SET NEW BUS ERROR, LOCK TASK CLR.L D6 ;BUS ERROR NVERT TO ASCII HEX XPEL ;DISPLAY IT XPMC MSG02 ;DISPLAY.... MOVE.L D2,D1 ;GET COUNTER XCHX ;CONVERT TO ASCII HEX XPEL ;PRINT IT MOVEM.L (A7)+,D0-D2/A1 ;RESTORE REGISTERS RTS ;RETURN TO CALLER * * BUS ERROR HANDLER FOR RDETECT MOVE.W (A1),D3 ;READ IT BACK TST.L D6 ;BUS ERROR? BEQ.S @400 ;NO BSR.S OLD ;RESTOR BUS ERROR, UNLOCK TASK XSWP ;SWAP TO NEXT TASK BRA.S @200 ;TRY AGAIN @400 CMP.W D3,D4 ;DONE? BEQ.S @210 ;YES, CONTINUE MOVE.W D4R_2 * BUSERR MOVE.L D7,-(A7) ;SAVE THIS MOVE.L #500,D7 ;500 uSEC DELAY @010 SUBQ.L #1,D7 BNE.S @010 MOVEQ.L #1,D6 ;SET BUS ERROR FLAG MOVE.L (A7)+,D7 ;RESTORE REGISTER RTE * **************************************** * * USAGE DISP,(A1) ;WRITE EPROM SUBQ.L #1,D7 ;DECREMENT TIME OUT BNE.S @200 ;TRY AGAIN * BRA.S P_ERR ;TIME OUT * @210 ADDA.L D1,A0 ;UPDATE MEMORY POINTER MOVE.L D2,-(A7) ;SAVE REPEAT COUNT @211 ADDA.L D1,A1 ;UPDATE RR_2 POINTER SUBQ.L #1,LAY ON PARAMETER ERRORS * USAGE XPMC MSG01 ;DISPLAY MESSAGE XPCL ;CR/LF XEXT ;EXIT TO PDOS - 19 - * **************************************** * * DATA AREA * FNAM DS.B 16 ;SOURCE FILE NAME MADDR DS.LD2 ;DECREMENT REPEAT COUNT BNE.S @211 ;IF WORD THEN AGAIN MOVE.L (A7)+,D2 ;RESTORE REPEAT COUNT * SUBQ.L #2,D0 ;DECREMENT COUNTER BNE WL_MOD ;CONTINUE BRA.S P_DONE ;PROGRAMMING DONE * * RETURN .NE. ON PROGRAMMING FAIL * P_ERR  1 ;MEMORY SOURCE ADDRESS MCOUNT DS.L 1 ;BYTE COUNTER RRADDR DS.L 1 ;RR_2 BOARD ADDRESS OLDBERR DS.L 1 ;OLD BUS ERROR VECTOR MODE DS.W 1 ;RR_2 WORK MODE OPTION DS.W 1 ;RR_2 OPERATION SRCFLAG DS.W 1 ;SOURCE FLAG REPEAT DS.W 1 ;REPMOVE.L A1,A3 ;STORE ERROR LOCATION MOVEM.L (A7)+,D0-D4/A0/A2 ;RESTORE REGISTERS CLR.W -(A7) ;RETURN .NE. RTR * * RETURN .EQ. ON SUCCESS * P_DONE MOVEM.L (A7)+,D0-D4/A0/A2 ;RESTORE REGISTERS MOVE.W #$2004,-(A7) ;RETURN .EQ. RTR EAT COUNTER FID DS.W 1 :FILE ID * BUFF DS.B 20 ;DATA BUFFER * FBUFF DS.B 256 ;FILE BUFFER * * MESSAGE AREA * MSG01 DC.B 10,10,13,7,'*** PARAMETER ERROR' DC.B 10,10,13,'RR_2 USAGE:',10,13,'===========',10,13 DC.B 10,13,'>RR_2 F,FILENA - 18 - * * SET NEW BUS ERROR HANDLER AND LOCK TASK * NEW XLKT ;LOCK TASK LEA.L OLDBERR(PC),A3 ;GET STORAGE OF BUS ERROR LEA.L BUSERR(PC),A4 ;GET NEW BUS ERROR HANDLER MOVE.L $8,(A3) ;SAVE OLD BUS ERROR ADDRESS MOVEME,RR_2_ADDRESS,MODE,OPTION' DC.B 10,10,13,'OR ' DC.B 10,10,13,'>RR_2 M,STRTADDR,BYTECNT,RR_2_ADDRESS,' DC.B 'MODE,OPTION' DC.B 10,10,13,'F,FILENAME.............SOURCE = DISK FILE' DC.B 10,13,'M,STRTADDR,BYTECNT.....SOURCE = MEMORY' DC.B 1.L A4,$8 ;SET NEW ADDRESS RTS * * RESTORE OLD BUS ERROR HANDLER AND UNLOCK TASK * OLD LEA.L OLDBERR(PC),A3 ;GET STORAGE OF BUS ERROR MOVE.L (A3),$8 ;RESTORE BUS ERROR VECTOR XULT ;UNLOCK TASK RTS * * DISPLAY MESSAGE AND PROGRAMMIN0,13,'RR_2_ADDR..............RR_2 BOARD ADDRESS' DC.B 10,13,'MODE...................1 = BYTE = 8-BIT MODE' DC.B 10,13,' 2 = WORD = 16-BIT MODE' DC.B 10,13,' 4 = LONG = 32-BIT MODE' DC.B 10,13,'OPTION     .................P = PROGRAM' DC.B 10,13,' E = EMPTY CHECK' DC.B 10,13,' V = VERIFY' DC.B 10,13,' L = LOAD TO MEMORY',0 * MSG02 DC.B '.....',0 MSG03 DC.B 10,10,13,' ve copyright notice is included and reference made to the fact that reproduction privileges were granted by FORCE Computers.  ADDRESS COUNTER' DC.B 10,13,'------------------------------------',0 * FFMSG DC.B 10,10,13,7,'*** SOURCE FILE ERROR ',0 FSMSG DC.B 10,10,13,'FILE LOADED INTO MEMORY!',0 * EFMSG DC.B 10,10,13,7,'*** EMPTY CHECK FAILED AT EPROM ADDRESS ',0  - 21 -  @Z ESMSG DC.B 10,10,13,'EMPTY CHECK PASSED SUCCESSFUL!',0 * BFMSG DC.B 10,10,13,7,'*** BIT TEST FAILED AT MEMORY ADDRESS ',0 BSMSG DC.B 10,10,13,'BIT TEST PASSED SUCCESSFUL!',0 * VFMSG DC.B 10,10,13,7,'*** VERIFY FAILED AT MEMORY ADDRESS ',0 VSMSG ******************************************************************* *** *** *** INITIALIZE A MICROPOLIS SCSI WINCHESTER FOR DIFFERENT *** *** SECTOR SIZES (256, 512, 1024 BYTES/SECTOR), OR REPORT *** *** THE CURRENT DRIVE PARAMETERSDC.B 10,10,13,'VERIFY PASSED SUCCESSFUL!',0 * LEMSG DC.B 10,10,13,7,'*** LOAD IS NOT POSSIBLE TO FILE ',0 LSMSG DC.B 10,10,13,'LOAD FROM EPROM IS DONE!',0 * - 20 - PPMSG DC.B 'PROGRAMMING....',0 PFMSG DC.B 10,10,13,7,'*** PROGR (SECTORSIZE = 0) *** *** *** *** *** *** USAGE : INIT_W ID,SIZE *** *** ID = 0..2 *** *** SIZE = 0,256,512,1024 *** *** *** *** 22-MAR-1987 R.B. *** *** *** *********************************AM FAIL ERROR AT EPROM ADDRESS ',0 PSMSG DC.B 10,10,13,'PROGRAMMING PASSED SUCCESSFUL!',0 * EVEN * EPROG DC.W 0 ;END OF PROGRAM * END ********************************** * OPT ALT,NOWARN * INCLUDE FPARM:SR/2 SECTION 0 * XPMC STMSG ;PRINT START MESSAGE XGNP ;GET TRAGET ID BLE PERR ;PARAMETER ERROR IF NO XCDB ;CONVERT ID TO BIN MOVE.L D1,D5 ;SAVE ID FOR LATER USE XGFORCE Utility disk 20-Mar-87 This floppy contains a collection of Utilities which are specific for the FORCE Hardware or which are usefull but not a standard PDOS utility. All files are in source and object code and include documentation. New uNP ;GET SIZE PARAMETER BLE PERR ;PARAMETER ERROR IF NO XCDB ;CONVERT SIZE TO BIN BLT PERR ;NO NUMBER! * * INIT ISCSI-1 ADDRESS OFFSET * INIT_O LEA.L ISCCMD1,A0 ;GET COMMAND RAM MOVE.L #ISCSIB,4(A0) ;SET OFFSET MOVE.W #$0003,(A0) ;SETOtilities will be added from time as they become available. Please note: The files on this floppy are subject to change without notice and should not be construed as a commitment by FORCE Computers. Neither FORCE Computers nor the authors assume anFFS COMMAND @000 TST.W (A0) ;WAIT FOR ISCSI-1 IDLE BPL.S @000 TST.B 1(A0) ;CHECK FOR ERROR BNE ERROR ;HANDLE IF ANY * XPMC MSG50 ;PRINT MESSAGE * * SET UP ALL PARAMETERS * SETUP LEA.L ISCIOB1,A1 ;COMMAND BUFFER LEA.L ISCIOB1+$100,A2 ;DATy responsi- bility for the use or reliability of all files on this floppy. All programs have the Copyright (c) 1986,87 by FORCE Computers. General permission to copy or modify, but not for profit, is hereby granted, provided that the aboA BUFFER LEA.L MSELCMD(PC),A3 ;YES, GET MODE SELECT COMMAND MOVEQ.L #7,D0 ;7 BYTES @001 MOVE.B (A3)+,(A1)+ ;TRANSFER COMMAND SUBQ.L #1,D0 BNE.S @001 TST.W D1 ;SIZE = 0? BEQ REPORT CMP.W #256,D1 ;SIZE = 256? BNE.S @100 ;NO LEA.L MSELD      1(PC),A3 ;GET MODE SELECT DATA BRA.S @500 ;CONTINUE @100 CMP.W #512,D1 ;SIZE = 512? BNE.S @200 ;NO LEA.L MSELD2(PC),A3 ;GET MODE SELECT DATA BRA.S @500 ;CONTINUE @200 LEA.L MSELD3(PC),A3 ;MUST BE 1024!!! @500 MOVE.L #$4C,D0 ;BYTE COUNT T ID MOVE.W #77,D2 ;TRANSFER COUNTER BSR INIT ;INIT COMMAND RAM AND COMMAND BUFFER BSR WAIT ;START EXECUTION AND WAIT UNTIL DONE * * LOOK FOR TRANSFER LENGTH AND DO MODE SENSE AGAIN * LEA.L ISCCMD1,A0 ;CMDRAM LEA.L ISCIOB1,A1 ;COMMAND BUFF @002 MOVE.B (A3)+,(A2)+ ;TRANSFER DATA SUBQ.L #1,D0 BNE.S @002 * * NOW WE INIT THE COMMAND RAM AND START THE MODE SELECT COMMAND * START MOVE.L #ISCIOB1,4(A0) ;POINTER TO SCSI COMMAND MOVE.L #ISCIOB1+$100,8(A0) ;POINTER TO MODE SELECT DATA MOVE. ER LEA.L MODSENS(PC),A2 ;INQUIRY COMMAND MOVE.W D5,D1 ;TARGET ID LEA.L ISCIOB1+$100,A3 ;DATA BUFFER MOVE.B (A3),D2 ;TRANSFER COUNTER ADD.B #1,D2 ;WE DO THIS FOR THE BUG IN THE WINNI MOVE.B D2,5(A2) ;SET ALLOCATION LENGTH BSR INIT ;INIW D5,12(A0) ;SETUP TARGET ID MOVE.W #$4C,2(A0) ;TRANSFER COUNTER MOVE.W #$60,(A0) ;TRSPMOD COMMAND @003 TST.W (A0) ;WAIT FOR ISCSI-1 IDLE BPL.S @003 TST.B 1(A0) ;CHECK FOR ERROR BNE.S ERROR ;HANDLE IF ANY * XPMC MSG51 ;PRINT MESSAGE *   T COMMAND RAM AND COMMAND BUFFER BSR WAIT ;START EXECUTION AND WAIT UNTIL DONE * * NOW WE DECODE THE RETURN PARAMETERS * AND DISPLAY THEM TOGETHER WITH COMMENTS * LEA.L BUFF(PC),A1 ;STRING BUFFER LEA.L ISCIOB1+$100,A2 ;GET DATA BUFFER CLR.L D1 * WE ISSUE A DRIVE FORMAT COMMAND * DRFMT XPMC MSG52 ;PRINT MESSAGE MOVE.W #0,2(A0) ;CLEAR THIS MOVE.W #0,12(A0) ;LUN = 0 MOVE.W D5,D6 ;TARGET ID LSL.W #8,D6 ;ADJUST ID LSL.W #1,D6 ;AGAIN OR.W #$0057,D6 ;FORMAT COMMAND CODE MOVE.W D6,  ;CLEAR THIS XPMC MSG00 ;PRINT MESSAGE MOVE.B (A2)+,D1 ;IGNORE BYTE MOVE.B (A2)+,D1 ;GET VALUE CMP.B #0,D1 ;ZERO?? BNE.S @600 ;NO XPMC DMSG0 ;MESSAGE BRA.S @610 ;CONTINUE @600 CMP.B #1,D1 ;ONE?? BNE.S @601 ;NO XPMC DMSG1 ;YE(A0) ;SETUP COMMAND @005 TST.W (A0) ;WAIT UNTIL DONE BPL.S @005 TST.B 1(A0) ;CHECK FOR ERROR BNE.S ERROR ;HANDLE IF ANY BRA.S REPORT * * ALL ISCSI-1 ERRORS COME HERE * ERROR XPMC MSGER ;PRINT ERROR MESSAGE MOVE.L (A0),D1 ;GET ERROR COD  S, MESSAGE BRA.S @610 ;CONTINUE @601 XPMC DMSGU ;MESSAGE @610 MOVE.B (A2)+,D1 ;IGNORE NEXT BYTE MOVE.B (A2)+,D1 ;GET DATA TST.B D1 ;CHECK PAGE CODE BEQ @100 ;SKIP PAGE * * BLOCK DESCRIPTOR * XPMC MSG01 ;MESSAGE XPMC MSG02 ;MESSAGE E LEA.L BUFF(PC),A1 ;GET BUFFER XCBH ;CONVERT TO HEX ASCII XPEL ;PRINT ERROR CODE XEXT ;EXIT TO PDOS * * PARAMETER ERRORS COME HERE * PERR XPMC PEMSG ;PRINT MESSAGE XEXT ;EXIT TO PDOS * ********************************************** MOVE.B (A2)+,D1 ;GET DATA XCBX ;CONVERT TO HEX XPEL ;PRINT IT XPMC MSG03 ;MESSAGE MOVE.B (A2)+,D1 ;GET BYTE LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;NEXT BYTE LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;LAST BYTE XCBX ;CONVERT TO HEX ********************* *** *** *** REPORT DISKS CURRENT PARAMETERS *** *** *** ******************************************************************* * * FIRST WE GET THE ID FROM THE COMMAND LINE * REPORT XPCL ;CR/LF XPMC STRTMSG ;HE XPEL ;PRINT IT MOVE.B (A2)+,D1 ;IGNORE NEXT CLR.L D1 ;CLEAR THIS XPMC MSG04 ;MESSAGE MOVE.B (A2)+,D1 ;GET BYTE LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET LAST XCBX ;CONVERT TO HEX ADLINE XPCL ;CR/LF BSR INQU ;IDENTIFY DRIVE * * FIRST TIME MODE SENSE * IT IS ONLY USED TO GET THE REAL TRANSFER LENGTH * LEA.L ISCCMD1,A0 ;CMDRAM LEA.L ISCIOB1,A1 ;CMD BUFFER LEA.L MODSENS(PC),A2 ;MODE SENSE COMMAND MOVE.W D5,D1 ;TARGEXPEL ;PRINT IT BSR GETKEY ;STOP DISPLAY AND WAIT FOR A KEY * * ERROR RECOVERY PARAMETERS = PAGE 01 * @100 MOVE.B (A2)+,D1 ;GET PAGE CODE ANDI.L #$1F,D1 ;MASK IT CMP.B #1,D1 ;PAGE 1?? BNE @200 ;NO, SKIP XPMC MSG05 ;YES XPMC MSG06 ;      MESSAGE OUT MOVE.B (A2)+,D1 ;IGNORE BYTE MOVE.B (A2)+,D1 ;GET DATA MOVE.B #'%',(A1) ;CONVERT TO ASCII BINARY BTST #7,D1 BEQ.S @700 MOVE.B #'1',1(A1) BRA.S @701 @700 MOVE.B #'0',1(A1) @701 BTST #6,D1 BEQ.S @702 MOVE.B #'1',2(A1) BRA.S @703 ERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG16 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS MOVE.B (A2)+,D1 ;IGNORE NE@702 MOVE.B #'0',2(A1) @703 BTST #5,D1 BEQ.S @704 MOVE.B #'1',3(A1) BRA.S @721 @704 MOVE.B #'0',3(A1) @721 BTST #4,D1 BEQ.S @705 MOVE.B #'1',4(A1) BRA.S @706 @705 MOVE.B #'0',4(A1) @706 BTST #3,D1 BEQ.S @707 MOVE.B #'1',5(A1) BRA.S @708 @707 MXT MOVE.B (A2)+,D1 ;AGAIN BSR GETKEY ;STOP DISPLAY AND WAIT FOR A STROKE * * DIRECT ACCESS DEVICE FORMAT PARAMETERS = PAGE 03 * @300 MOVE.B (A2)+,D1 ;GET PAGE CODE ANDI.L #$1F,D1 ;MASK IT CMP.B #3,D1 ;PAGE 3?? BNE @400 ;NO, SKIP MOVE.B OVE.B #'0',5(A1) @708 BTST #2,D1 BEQ.S @709 MOVE.B #'1',6(A1) BRA.S @710 @709 MOVE.B #'0',6(A1) @710 BTST #1,D1 BEQ.S @711 MOVE.B #'1',7(A1) BRA.S @712 @711 MOVE.B #'0',7(A1) @712 BTST #0,D1 BEQ.S @713 MOVE.B #'1',8(A1) BRA.S @714 @713 MOVE.B (A2)+,D1 ;YES, IGNORE NEXT XPMC MSG17 ;MESSAGE XPMC MSG18 ;AGAIN MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG19 ;MESSAGE MOVE.B (A#'0',8(A1) @714 MOVE.B #$0,9(A1) ;DELIMITER XPEL ;DISPLAY FLAG BYTE XPMC MSG07 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA XCBX ;CONVERT TO HEX XPEL ;PRINT IT XPMC MSG08 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA XCBX ;CONVERT TO HEX XPEL 2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG20 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CON ;PRINT IT XPMC MSG09 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA XCBX ;CONVERT TO HEX XPEL ;PRINT IT XPMC MSG10 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA XCBX ;CONVERT TO HEX XPEL ;PRINT IT XPMC MSG11 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA VERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG21 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG22 ;MESSAGE MOV XCBX ;CONVERT TO HEX XPEL ;PRINT IT BSR GETKEY ;STOP DISPLAY AND WAIT FOR A STROKE * * DISCONNECT/RECONNECT PARAMETERS = PAGE 02 * @200 MOVE.B (A2)+,D1 ;GET PAGE CODE ANDI.L #$1F,D1 ;MASK IT CMP.B #2,D1 ;PAGE 2?? BNE @300 ;NO MOVEE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG23 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX .B (A2)+,D1 ;YES, IGNORE BYTE XPMC MSG12 ;MESSAGE XPMC MSG13 ;AGAIN MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG14 ;MESSAGE MOVE.B ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG24 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG25 ;MESSAG (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG15 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;NEXT XCBX ;CONV E MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG26 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT       !XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG27 ;MESSAGE MOVE.B (A2)+,D1 ;GET NEXT MOVE.B #'%',(A1) ;CONVERT TO ASCII BINARY BTST #7,D1 BEQ.S @800 MOVE.B #'1',1(A1) BRA.S @801 @800 MOVE.B #'0',1(A1) @801 BTST #)'C MSG33 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG34 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)" 6,D1 BEQ.S @802 MOVE.B #'1',2(A1) BRA.S @803 @802 MOVE.B #'0',2(A1) @803 BTST #5,D1 BEQ.S @804 MOVE.B #'1',3(A1) BRA.S @821 @804 MOVE.B #'0',3(A1) @821 BTST #4,D1 BEQ.S @805 MOVE.B #'1',4(A1) BRA.S @806 @805 MOVE.B #'0',4(A1) @806 BTST #3,D1 *(+,D1 ;GET NEXT LSL.L #8,D1 ;ADJUST AGAIN MOVE.B (A2)+,D1 ;GET LAST XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS * @500 XEXT * ************************************ * * INIT COMMAND BUFFER AND COMMAND RAM * INIT MOVE.L #7,D0 #!BEQ.S @807 MOVE.B #'1',5(A1) BRA.S @808 @807 MOVE.B #'0',5(A1) @808 BTST #2,D1 BEQ.S @809 MOVE.B #'1',6(A1) BRA.S @810 @809 MOVE.B #'0',6(A1) @810 BTST #1,D1 BEQ.S @811 MOVE.B #'1',7(A1) BRA.S @812 @811 MOVE.B #'0',7(A1) @812 BTST #0,D1 BEQ.S +) ;7 BYTES TO COPY @001 MOVE.B (A2)+,(A1)+ ;TRANSFER COMMAND SUBQ.L #1,D0 BNE.S @001 MOVE.W D1,12(A0) ;SET TARGET ID MOVE.W D2,2(A0) ;DATA TRANSFER LENGTH MOVE.L #ISCIOB1,4(A0) ;SET BUFFER POINTERS MOVE.L #ISCIOB1+$100,8(A0) RTS * ********$"@813 MOVE.B #'1',8(A1) BRA.S @814 @813 MOVE.B #'0',8(A1) @814 MOVE.B #$0,9(A1) ;DELIMITER XPEL ;PRINT FLAG BYTE CLR.L D1 ;CLEAR THIS MOVE.B (A2)+,D1 ;SKIP THREE BYTES MOVE.B (A2)+,D1 MOVE.B (A2)+,D1 BSR GETKEY ;STOP DISPLAY AND WAI,***************************** * * START EXECUTION AND WAIT UNTIL DONE * WAIT MOVE.W #$60,(A0) ;TRSPMOD COMMAND @001 TST.W (A0) ;WAIT FOR COMPLETION STATE BPL.S @001 RTS * ************************************ * * WAIT FOR A KEYBOARD INPUT * GETKEY M%#T FOR A STROKE * * RIGID DISK DRIVE GEOMETRY PARAMETERS = PAGE 04 * @400 MOVE.B (A2)+,D1 ;GET PAGE CODE ANDI.L #$1F,D1 ;MASK IT CMP.B #4,D1 ;PAGE 4?? BNE @500 ;NO, SKIP MOVE.B (A2)+,D1 ;IGNORE NEXT BYTE XPMC MSG28 ;MESSAGE XPMC MSG29 -+OVE.L D0,-(A7) ;SAVE D0 XPMC KEYMSG ;DISPLAY MESSAGE XGCP ;WAIT FOR KEYSTROKE MOVE.L (A7)+,D0 ;RESTORE D0 RTS ;RETURN TO CALLER * *********************************** * * GET INQUIRY MESSAGE FROM TARGET * INQU MOVEM.L D0-A6,-(A7) LEA.L IS&$;AGAIN MOVE.B (A2)+,D1 ;IGNORE NEXT CLR.L D1 ;CLEAR THIS MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPMC MSG30 ;MESSAGE MOVE.B (A2)+,D1 ;G.,CCMD1,A0 ;CMDRAM POINTER LEA.L ISCIOB1,A1 ;COMMAND BUFFER LEA.L INQUIRY(PC),A2 ;INQUIRY COMMAND MOVE.W D5,D1 ;TARGET ID MOVE.W #50,D2 ;TRANSFER COUNTER BSR INIT ;INIT CMDRAM AND CMD BUFFER BSR WAIT ;START EXECUTION AND WAIT UNTIL DONE '%ET DATA XCBX ;CONVERT TO HEX XPEL ;PRINT IT XPMC MSG31 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT LSL.L #8,D1 ;ADJUST AGAIN MOVE.B (A2)+,D1 ;GET LAST XCBX ;CONVERT TO HEX XPEL ;PRINT /- LEA.L ISCIOB1+$100,A1 ;GET DATA BUFFER ADD.L #8,A1 ;IGNORE PRECEDING BYTES MOVE.B #0,27(A1) ;SET 0 DELIMITER XPEL ;DISPLAY INQUIRY MESSAGE MOVEM.L (A7)+,D0-A6 RTS * ************************************* * * DATA AREA * * SCSI COMMANDS * IN(&IT CLR.L D1 ;CLEAR THIS XPMC MSG32 ;MESSAGE MOVE.B (A2)+,D1 ;GET DATA LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET NEXT LSL.L #8,D1 ;ADJUST MOVE.B (A2)+,D1 ;GET LAST XCBX ;CONVERT TO HEX XPEL ;PRINT IT CLR.L D1 ;CLEAR THIS XPM0.QUIRY DC.B $06,$12,$00,$00,$00,$32,$00 MODSENS DC.B $06,$1A,$00,$3F,$00,$4C,$00 MSELCMD DC.B $06,$15,$01,$00,$00,$4C,$00 * * MESSAGES * STRTMSG DC.B 10,13,'DEVICE MODE REPORT, TARGET ID = 0',0 MSG00 DC.B 10,13,'DEVICE TYPE = ',0 MSG01 DC.B 10,10,13,'BL      1/OCK DESCRIPTOR',0 MSG02 DC.B 10,13,' DENSITY CODE.............................',0 MSG03 DC.B 10,13,' NUMBER OF BLOCKS.........................',0 MSG04 DC.B 10,13,' BLOCK LENGTH.............................',0 MSG05 DC.B 10,13,'ERROR RECOVE97TARTING CYLINDER - REDUCED WR CURRENT...',0 MSG33 DC.B 10,13,' DRIVE STEP RATE..........................',0 MSG34 DC.B 10,13,' LANDING ZONE CYLINDER....................',0 KEYMSG DC.B 10,13,'strike any key to continue...',0 DMSG0 DC.B 'MAGNETIC20RY PARAMETERS',0 MSG06 DC.B 10,13,' FLAG BYTE................................',0 MSG07 DC.B 10,13,' RETRY COUNT..............................',0 MSG08 DC.B 10,13,' CORRECTION SPAN..........................',0 MSG09 DC.B 10,13,' HEAD OFF:8 DISK',0 DMSG1 DC.B 'STREAMER TAPE',0 DMSGU DC.B 'UNKNOWN DEVICE',0 STMSG DC.B 10,10,13,'INITIALIZE A MICROPOLIS SCSI WINCHESTER' DC.B 10,13,'---------------------------------------',10,13,0 MSG50 DC.B 10,13,'-> SETUP ISCSI-1 BASE ADDRESS!',0 MSG51 DC31SET COUNT........................',0 MSG10 DC.B 10,13,' DATA STROBE OFFSET COUNT.................',0 MSG11 DC.B 10,13,' RECOVERY TIME LIMIT......................',0 MSG12 DC.B 10,13,'DISCONNECT/RECONNECT PARAMETERS',0 MSG13 DC.B 10,13,' BUF;9.B 10,13,'-> MODE SELECT IS DONE',0 MSG52 DC.B 10,13,'-> ISSUE A DRIVE FORMAT COMMAND!',0 MSGER DC.B 10,13,'*** ISCSI-1 ERROR ***',0 PEMSG DC.B 10,10,13,'USAGE : INIT_W32 TARGET-ID,SECTORSIZE ' DC.B '(= 0/256/512/1024)',0 * * MODE SELECT DATA FOR 256 42FER FULL RATIO........................',0 MSG14 DC.B 10,13,' BUS INACTIVITY LIMIT.....................',0 MSG15 DC.B 10,13,' DISCONNECT TIME LIMIT....................',0 MSG16 DC.B 10,13,' CONNECT TIME LIMIT.......................',0 MSG17 <:BYTES/SECTOR * MSELD1 DC.B $00,$00,$00,$08,$00,$00,$00,$00,$00,$00,$01,$00,$01 DC.B $06,$24,$0A,$0B,$00,$00,$00,$02,$0A,$00,$00,$00,$05 DC.B $00,$00,$00,$00,$00,$00,$03,$16,$00,$01,$00,$01,$00 DC.B $00,$00,$18,$00,$41,$01,$00,$00,$01,$00,$00,$00,$0053DC.B 10,13,'DIRECT ACCESS DEVICE PARAMETERS',0 MSG18 DC.B 10,13,' TRACKS PER ZONE..........................',0 MSG19 DC.B 10,13,' ALTERNATE SECTORS PER ZONE...............',0 MSG20 DC.B 10,13,' ALTERNATE TRACKS PER ZONE................',0 M=; DC.B $40,$00,$00,$00,$04,$12,$00,$04,$00,$08,$00,$00,$00 DC.B $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 * * MODE SELECT DATA FOR 512 BYTES/SECTOR * MSELD2 DC.B $00,$00,$00,$08,$00,$00,$00,$00,$00,$00,$02,$00,$01 DC.B $06,$24,$0A,$0B,$00,$00,$00,$64SG21 DC.B 10,13,' ALTERNATE TRACKS PER VOLUME..............',0 MSG22 DC.B 10,13,' SECTORS PER TRACK........................',0 MSG23 DC.B 10,13,' DATA BYTES PER SECTOR....................',0 MSG24 DC.B 10,13,' INTERLEAVE VALUE..........><02,$0A,$00,$00,$00,$05 DC.B $00,$00,$00,$00,$00,$00,$03,$16,$00,$01,$00,$01,$00 DC.B $00,$00,$18,$00,$23,$02,$00,$00,$01,$00,$00,$00,$00 DC.B $40,$00,$00,$00,$04,$12,$00,$04,$00,$08,$00,$00,$00 DC.B $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 * * M75...............',0 MSG25 DC.B 10,13,' TRACK SKEW...............................',0 MSG26 DC.B 10,13,' CYLINDER SKEW............................',0 MSG27 DC.B 10,13,' FLAG BYTE................................',0 MSG28 DC.B 10,13,'RIGID DRIVE?=ODE SELECT DATA FOR 1024 BYTES/SECTOR * MSELD3 DC.B $00,$00,$00,$08,$00,$00,$00,$00,$00,$00,$04,$00,$01 DC.B $06,$24,$0A,$0B,$00,$00,$00,$02,$0A,$00,$00,$00,$05 DC.B $00,$00,$00,$00,$00,$00,$03,$16,$00,$01,$00,$01,$00 DC.B $00,$00,$18,$00,$13,$04,$086 GEOMETRY PARAMETERS',0 MSG29 DC.B 10,13,' MAXIMUM NUMBER OF CYLINDERS..............',0 MSG30 DC.B 10,13,' MAXIMUM NUMBER OF HEADS..................',0 MSG31 DC.B 10,13,' STARTING CYLINDER - WRITE PRECOMP........',0 MSG32 DC.B 10,13,' S@>0,$00,$01,$00,$00,$00,$00 DC.B $40,$00,$00,$00,$04,$12,$00,$04,$00,$08,$00,$00,$00 DC.B $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 * EVEN * * DATA CONVERSION BUFFER * BUFF DS.B 100 * END $03,$16,$00,$01,$00,$01,$00 DC.B $00,$00,$18,$00,$13,$04,$0      ?4,$00,$00,$01,$00,$00,$00,$00 DC.B $40,$00,$00,$00,$04,$12,$00,$04,$00,$08,$00,$00,$00 DC.B $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 * EVEN * * DATA CONVERSION BUFFER * BUFF DS.B 100 * END IG....................... HEAD OFFSET COUNT........................ DATA STROBE OFFSET COUNT................. RECOVERY TIME LIMIT...................... DISCONNECT/RECONNECT PARAMETERS BUFFER FULL RATIO.......................B ZoڠV*ZoРVmA!!|0JPjJ(f 0C#E$G pSfJAg AfG ` AfG `G ?pLSf!|#!|$1E 1|L0`JPjJ(f, 㠌 1|1| <NNFW0JPjJ(f` "C &Rn a6A!CJH. BUS INACTIVITY LIMIT..................... DISCONNECT TIME LIMIT.................... CONNECT TIME LIMIT....................... DIRECT ACCESS DEVICE PARAMETERS TRACKS PER ZONE.......................... ALTERNATE SECCA#Ea24<MaaA!C#EC2G$RBaaC E$BM f ` f ` Jg<0@jngjnBjnap f%g|1`|0g|1`|0KITORS PER ZONE............... ALTERNATE TRACKS PER ZONE................ ALTERNATE TRACKS PER VOLUME.............. SECTORS PER TRACK........................ DATA BYTES PER SECTOR.................... INTERLEAVE VALUE....DBg|1`|0g|1`|0g|1`|0g|1`|0g|1`|0g|1`|0| n"jnIjnpjnjnjnar fPϠjnBjnB/jnBLJ..................... TRACK SKEW............................... CYLINDER SKEW............................ FLAG BYTE................................ RIGID DRIVE GEOMETRY PARAMETERS MAXIMUM NUMBER OF CYLINDERS..............ECPjnBa fVWujnBjnBjnBjnBjnBjnB;jnB\jnB}jnB%g|1`|0g|1`|0g|1`MK MAXIMUM NUMBER OF HEADS.................. STARTING CYLINDER - WRITE PRECOMP........ STARTING CYLINDER - REDUCED WR CURRENT... DRIVE STEP RATE.......................... LANDING ZONE CYLINDER.................... strikFD|0g|1`|0g|1`|0g|1`|0g|1`|0g|1`|0| nBa frBjnB:jnajnB~jnBjnBjnNLe any key to continue...MAGNETIC DISKSTREAMER TAPEUNKNOWN DEVICE INITIALIZE A MICROPOLIS SCSI WINCHESTER --------------------------------------- -> SETUP ISCSI-1 BASE ADDRESS! -> MODE SELECT IS DONE -> ISSUE A DRIVE FORMAT COMMAND! ***GEBpSf1A 1B!|#!|$Nu0`JPjNu/ NuHA!C#E"24<2aaC$P|nLNu2?LL DEVICE MODE REPORT, TARGET ID = 0 DEVICE TYPE = BLOCK DESCRIPTOR DENSITY CODE...........................OM ISCSI-1 ERROR *** USAGE : INIT_W32 TARGET-ID,SECTORSIZE (= 0/256/512/1024)$  A@$  #@$ HF.. NUMBER OF BLOCKS......................... BLOCK LENGTH............................. ERROR RECOVERY PARAMETERS FLAG BYTE................................ RETRY COUNT.............................. CORRECTION SPAN...N @      Q INIT_W - initialize a Micropolis SCSI winchester ================================================== The INIT_W utility can be used to initialize a Micropolis SCSI win- chester. The winchester would be setup and formatted for three difYW D7,WDWAITH WDHOEND MOVE.W #$7FF,D7 WDHWAIT DBRA D7,WDHWAIT MOVEM.L (A7)+,D0-A6 RTS * VWSCROL * SUBROUTINE TO TEST THE VERTICAL SCROLLING * * FIXED TEST MODUL VWSCROL:MOVEM.L D0-D7,-(A7) CLR.L D4 MOVE.W #1,D0 ;SELECT BASE SCREEN BSR RSCSTRPferent sector sizes: - 256 bytes/sector - 512 bytes/sector - 1024 bytes/sector The program uses the MODE SELECT command in the ISCSI-1 transpa- rent mode to init the winchester, the FORMAT command to format it with the new instZXA ;READ DISPLAY START ADDRESS MOVE.L D1,D3 ;STORE ADDRESS MOVE.L D1,D5 MOVE.W #$CA,D0 ;READ MEMORY WITDH BSR RECONR MOVE.W D1,D4 ;STORE MW IN D4 MOVE.W D3,D1 * XBUG MOVE.W #100,D6 ;SET COUNTER FOR FIRST SCROLL VWSCR1 XGCC ;CHECK FOR CONDISQalled parameters and the MODE SENSE command also in transparent mode to report the drive parameters after formatting. To use the utility the following command lin format is required: >INIT_W {TARGET ID},{SECTOR SIZE} The first parameter se[YTIONAL CHARACTERS BEQ.S VSCR9 ;NONE CHARACTER BLO.S VSCR9 ;CONTRL 'C' BLT.S VSCR9 ;ESCAPE CMPI.B #'W',D0 ;NEXT PICTURE BEQ.S VWSCEND ;YES CMPI.B #'Q',D0 ;END OF DEMO ? BEQ.S VWSCEND ;YES VSCR9 MOVE.W #1,D0 ADD.L D4,D1 ;DISPLAY START ADDRlects the SCSIbus target id of the drive wich should be installed. The second parameter is the required sector size of the disk as des- cribed above or '0' if the program should only report the units current parameters. \ZRESS + MEMORY WITDH VWW2 ANDI.L #$1FFFFF,D1 BSR WSCSTA ;WRITE MOVE.W #$FFF,D7 ;WAIT VWWAIT DBRA D7,VWWAIT DBRA D6,VWSCR1 ;DEKREMENT CONTER MOVE.W #200,D6 ;SET COUNTER FOR NEXT SCROLLING VWSCL1 XGCC ;CHECK FOR CONDITIONAL CHARACTERS BEQ.S VSCLUS MOVE.W (A2),D6 ;GET DIRECTION CMPI.W #0,D6 BEQ WDVDOW ;VERTICAL DOWN DIRECTIOM CMPI.W #1,D6 BEQ WDVUP ;VERTICAL UP DIRECTION CMPI.W #2,D6 BEQ WDHRI ;HORIZONTAL RIGHT DIRECTION CMPI.W #3,D6 BEQ WDHLE ;HORIZONTAL LEFT DIRECTION BRA.S ][9 ;NONE CHARACTER BLO.S VSCL9 ;CONTRL 'C' BLT.S VSCL9 ;ESCAPE CMPI.B #'W',D0 ;NEXT PICTURE BEQ.S VWSCEND ;YES CMPI.B #'Q',D0 ;END OF DEMO ? BEQ.S VWSCEND ;YES VSCL9 MOVE.W #1,D0 SUB.L D4,D1 ;DEKREMENT DISPLAY START ADDRESS ANDI.L #$1FFFVTWDHOEND ;INVALID DIRECTION WDVDOW CMPI.W #556,D3 BEQ WDHLE ;GO LEFT ADD.W #32,D3 ;INCREMENT VERTICAL START ADDRESS MOVE.W #0,(A2) BRA.S WDVWR WDVUP CMPI.W #108,D3 BEQ WDHRI ;GO RIGHT SUB.W #32,D3 MOVE.W #1,(A2) ;SET DIRECTION WDVWR MOVE.W ^\FF,D1 ; BSR WSCSTA MOVE.W #$FFF,D7 VWWAIT1 DBRA D7,VWWAIT1 DBRA D6,VWSCL1 MOVE.W #200,D6 BRA.S VWSCR1 VWSCEND:MOVE.W #1,D0 ;SELECT BASE SCREEN MOVE.L D5,D1 ;RESET START ADDRESS BSR WSCSTA ;WRITE MOVEM.L (A7)+,D0-D7 RTS * SUBROUTINE TO TESWUD3,D1 MOVE.W #$94,D0 BSR WRCONR BRA.S WDHOEND WDHRI LSR.W #8,D4 ;SHIFT RIGHT ANDI.W #$00FF,D4 CMPI.W #$37,D4 ;RIGHT END BEQ WDVDOW ADD.W #$2,D4 ;INCREMENT HORIZONT START MOVE.W #2,(A2) ;SET DIRECTION BRA.S WDHWR WDHLE LSR.W #8,D4 ; ANDI_]T THE HORIZONTAL SMOOTH SCROLL * * FIXED TEST MODUL HSCROLL:MOVEM.L D0-D7,-(A7) MOVE.W #$CA,D0 ;SELECT MEMORY WITDH BASE SCREEN BSR RECONR ANDI.W #$0FFF,D1 MOVE.W #100,D6 ;PIXEL TO SCROLL MOVE.W #1,D0 ;SELECT SCREEN BSR RSCSTA ;READ STARTXV.W #$0FF,D4 CMPI.W #$D,D4 BEQ WDVUP ;GO UP SUB.W #2,D4 ;DECREMENT START COUNTER MOVE.W #3,(A2) ;SET DIRECTION WDHWR LSL.W #8,D4 ;SHIFT TO LEFT ANDI.W #$00FF,D2 OR.W D4,D2 MOVE.W D2,D1 MOVE.W #$92,D0 BSR WRCONR MOVE.W #$FFF,D7 WDWAITH:DBRA`^ ADDRESS AND START DOT ADDRESS MOVE.L D1,D4 ;STORE DISPLAY START ADDRESS MOVE.W D2,D5 ;AND START DOT ADDRESS MOVE.W D6,D3 ;SET COUNTER NSCR1 XGCC ;CHECK FOR CONDITIONAL CHARACTERS BEQ.S HSCR9 ;NONE CHARACTER BLO.S HSCR9 ;CONTRL 'C' BLT.S       a_HSCR9 ;ESCAPE CMPI.B #'W',D0 ;NEXT PICTURE BEQ.S HSCREND ;YES CMPI.B #'Q',D0 ;END OF DEMO ? BEQ.S HSCREND ;YES HSCR9 MOVE.W #$2,D7 HSWLE DBRA D7,HSWLE ;WAIT ADDI.W #1,D2 ;INKREMENT START DOT ADDRESS CMPI.W #16,D2 BEQ.S WRSDA ;N WRITE STAigMOVE.W #$8E,D0 ;GET LOWER SCREEN WIDTH BSR RECONR ; ANDI.W #$0FFF,D1 ; SUB.W D1,D2 ;CALCULATE NEW BASE SCREEN WIDTH MOVE.W D2,D1 ;AND WRITE INTO THE BASE SCREEN MOVE.W #$8A,D0 ;WIDTH REGISTER BSR WRCONR ; MOVE.W #6,D0 ;SELECT DISPLAY CONb`RT DOT ADDRESS BSR.S WRSUB BRA.S SCL1 WRSDA CLR.W D2 ;SET ON ZERO ADDI.L #8,D1 ;INKREMENT DISPLAY START ADDRESS BSR.S WRSUB * SUBI.W #1,D3 SCL1 DBRA D3,NSCR1 MOVE.W #200,D3 * XBUG NSCRR XGCC ;CHECK FOR CONDITIONAL CHARACTERS BEQ.S HSCL9 ;NOjhTROL REGISTER BSR RECONR ;READ BSET #11,D1 ;ENABLE LOWER SCREEN BSET #10,D1 ; BSR WRCONR ; MOVEM.L (A7)+,D0-D2 RTS PAGE * RSCLOW * DISABLE THE LOWER SCREEN * * IN * * OUT * RSCLOW: MOVEM.L D0-D2,-(A7) MOVE.W #$8A,D0 ;GET BASE SCREEcaNE CHARACTER BLO.S HSCL9 ;CONTRL 'C' BLT.S HSCL9 ;ESCAPE CMPI.B #'W',D0 ;NEXT PICTURE BEQ.S HSCREND ;YES CMPI.B #'Q',D0 ;END OF DEMO ? BEQ.S HSCREND ;YES HSCL9 MOVE.W #$2,D7 HSWRI DBRA D7,HSWRI ;WAIT SUBI.W #1,D2 CMPI.W #-1,D2 BEQ.S WRSkiN WIDTH BSR RECONR ; ANDI.W #$0FFF,D1 ; MOVE.W D1,D2 ;STORE FOR CALCULATE MOVE.W #$8E,D0 ;GET LOWER SCREEN WIDTH BSR RECONR ; ANDI.W #$0FFF,D1 ; ADD.W D1,D2 ;CALCULATE NEW BASE SCREEN WIDTH MOVE.W D2,D1 ;AND WRITE INTO THE BASE SCREEN MdbDAR BSR.S WRSUB BRA.S SCL2 WRSDAR MOVE.W #$F,D2 SUBI.L #8,D1 BSR.S WRSUB SCL2 DBRA D3,NSCRR MOVE.W #200,D3 BRA.S NSCR1 HSCREND:MOVE.L D4,D1 ;RESTORE THE ORIGN DISPLAY START ADDRESS MOVE.W D5,D2 ;AND START DOT ADDRESS MOVE.W #1,D0 ;SELECT BAljOVE.W #$8A,D0 ;WIDTH REGISTER BSR WRCONR ; MOVE.W #6,D0 BSR RECONR BCLR #11,D1 BCLR #10,D1 BSR WRCONR MOVEM.L (A7)+,D0-D2 RTS * SSCUP * ENABLE THE UPPER SCREEN * * IN * * OUT * SSCUP: MOVEM.L D0-D7,-(A7) ;STORE REGISTER MOVE.W #1,D0 ecSE SCREEN BSR WSCSTA ; MOVEM.L (A7)+,D0-D7 RTS WRSUB MOVEM.L D0-D3,-(A7) MOVE.W #850,D3 BSR BLNKTST ;WAIT FOR VERTICAL RETRACE PREIOD MOVE.W #1,D0 ;SELECT SCREEN BSR WSCSTA ;WRITE DISPLAY START ADDRES START DOT ADDRESS MOVE.W #50,D3 WAIT1mk ;SELECT BASE SCREEN BSR RSCSTA ;READ DISPLAY START ADDRESS AND START DOT ADR MOVE.L D1,D3 ;STORE DISPLAY START ADDRESS MOVE.W #$C2,D0 ;GET MEMORY WIDTH IN WORDS FOR UPPER SCREEN BSR RECONR MOVE.W D1,D4 ;STORE MEMORY WIDTH MOVE.W #$8C,D0 ;GEfd BSR DISPTST ;WAIT FOR DISPLAY PERIOD MOVEM.L (A7)+,D0-D3 RTS * SSCWD * ENABLE THE WINDOW SCREEN * * IN * * OUT * SSCWD: MOVEM.L D0-D2,-(A7) MOVE.W #6,D0 ;SELECT DISPLAY CONTROL REGISTER BSR RECONR ;READ BSET #9,D1 ;ENABLE LOWER SCREEnlT UPPER SCREEN WIDTH (RASTER) BSR RECONR ANDI.L #$0FFF,D1 MOVE.W D1,D5 ;STORE UPPER SCREEN WITDH MOVE.W #$8A,D0 ;GET BASE SREEN WITDH BSR RECONR SUB.W D5,D1 ;CALCULATE NEW BASE SCREEN WIDTH BSR WRCONR ;WRITE INTO REGISTER MULU D4,D5 ;CALCUgeN BSET #8,D1 ; BSR WRCONR ; MOVEM.L (A7)+,D0-D2 RTS * RSCWD * DISABLE THE WINDOW SCREEN * * IN * * OUT * RSCWD: MOVEM.L D0-D2,-(A7) MOVE.W #6,D0 ;SELECT DISPLAY CONTROL REGISTER BSR RECONR ;READ BCLR #9,D1 ;ENABLE LOWER SCREEN BCLRomTE PHYSICAL START OFFSET ADD.L D5,D3 ; MOVE.L D3,D1 ;SET PARAMETER * BSR CDDOTP ;CALCULATE DRAWING DOT POINTER MOVE.W #1,D0 ;SELECT BASE SCREEN BSR WSCSTA ;WRITE DISPLAY START ADDRESS AND START DOT ADR MOVE.W #6,D0 BSR RECONR BSET #13,D1 Bhf #8,D1 ; BSR WRCONR ; MOVEM.L (A7)+,D0-D2 RTS * SSCLOW * ENABLE THE LOWER SCREEN * * IN * * OUT * SSCLOW: MOVEM.L D0-D2,-(A7) MOVE.W #$8A,D0 ;GET BASE SCREEN WIDTH BSR RECONR ; ANDI.W #$0FFF,D1 ; MOVE.W D1,D2 ;STORE FOR CALCULATE pnSET #12,D1 BSR WRCONR MOVEM.L (A7)+,D0-D7 RTS * RSCUP * DISABLE THE UPPER SCREEN * * IN * * OUT * RSCUP: MOVEM.L D0-D7,-(A7) ;STORE REGISTER MOVE.W #1,D0 ;SELECT BASE SCREEN BSR RSCSTA ;READ DISPLAY START ADDRESS AND DRAW DOT POINT MOVE      qo.L D1,D3 ;STORE DISPLAY START ADDRESS MOVE.W #$C2,D0 ;GET MEMORY WIDTH IN WORDS FOR UPPER SCREEN BSR RECONR MOVE.W D1,D4 ;STORE MEMORY WIDTH MOVE.W #$8C,D0 ;GET UPPER SCREEN WIDTH (RASTER) BSR RECONR ANDI.L #$0FFF,D1 MOVE.W D1,D5 ;STORE UPPyw.W #2,D0 ;LOWER SCREEN ? BNE.S WWISC ;N MOVE.W #$D4,D0 ;Y SET REGISTER TO READ MOVE.W #$D6,D3 BRA.S WSCSTA1 ; WWISC CMPI.W #3,D0 ;WINDOW SCREEN ? BNE.S WSFAULT ;N MOVE.W #$DC,D0 ;Y SET REGISTER TO READ MOVE.W #$DE,D3 BRA.S WSCSTA1 ;rpER SCREEN WITDH MOVE.W #$8A,D0 ;GET BASE SREEN WITDH BSR RECONR ADD.W D5,D1 ;CALCULATE NEW BASE SCREEN WIDTH BSR WRCONR ;WRITE INTO REGISTER MULU D4,D5 ;CALCUTE PHYSICAL START OFFSET SUB.L D5,D3 ; MOVE.L D3,D1 ;SET PARAMETER * BSR CDDOTP zx WSFAULT:MOVE.W #-1,D1 ;SET -1 FOR WRONG SCREEN NUMBER BRA.S WSCEND WSCSTA1:LSL.W #8,D2 ;SHIFT 8 BIT TO LEFT * LSL.L #8,D2 ANDI.W #$0F00,D2 ;BLANKED SWAP D1 OR.W D2,D1 BSR WRCONR ;WRITE INTO SELECTED CONTROL REGISTER SWAP D1 MOVE.W D3,D0 ;sq;CALCULATE DRAWING DOT POINTER MOVE.W #1,D0 ;SELECT BASE SCREEN BSR WSCSTA ;WRITE DISPLAY START ADDRESS AND START DOT ADR MOVE.W #6,D0 BSR RECONR BCLR #13,D1 BCLR #12,D1 BSR WRCONR MOVEM.L (A7)+,D0-D7 RTS PAGE * CDDOTP * CALCULATES THE D{ySELECT REGISTER HIGH ADDRESS BSR WRCONR WSCEND MOVEM.L (A7)+,D0-D3 RTS PAGE * RSCSTA * GET SPLIT SCREEN DISPLAY START ADDRESS AND DRAWING DOT POINTER * IN D0.W SCREEN NUMBER * #0 UPPER SCREEN * #1 BASE SCREEN * #2 LOWER SCREEN * #3 WINDOW SCRtrRAWING DOT POINTER DEPENDED FROM THE GRAPHIC BIT * MODE * IN D1.L PHYSICAL DISPLAY (MEMORY ADDRESS) * * OUT D2.W DRAWING DOT POINTER * CDDOTP: MOVEM.L D0-D1/D6-D7,-(A7) MOVE.L D1,D6 ;CALCULATE DRAWING DOT POINTER CLR.L D2 MOVE.W #$2,D0 ;GET COMM|zEEN * * OUT D1.L DISPLAY START ADDRESS * D2.W START DOT ADDRESS RSCSTA: MOVEM.L D0/D3-D6,-(A7) CMPI.W #0,D0 ;UPPER SCREEN ? BNE.S BASC ;N MOVE.W #$C4,D0 ;Y SET REGISTER TO READ MOVE.W #$C6,D2 BRA.S RSCSTA1 ; BASC: CMPI.W #1,D0 ;BASE SCREEusAND CONTROL REGISTER BSR RECONR ANDI.W #$0700,D1 ;MASKED GRAPHIC BIT MODE LSR.W #8,D1 ANDI.W #$7,D1 CMPI.W #2,D1 ;4 BIT MODE ? BNE.S GRM8 ;N MOVE.W #4,D7 ;SET DIVISOR BRA.S CALDRD GRM8 CMPI.W #3,D1 ;8 BIT MODE BNE.S GRMW ;INVALID GBM MODE}{N ? BNE.S LOSC ;N MOVE.W #$CC,D0 ;Y SET REGISTER TO READ MOVE.W #$CE,D2 BRA.S RSCSTA1 ; LOSC: CMPI.W #2,D0 ;LOWER SCREEN ? BNE.S WISC ;N MOVE.W #$D4,D0 ;Y SET REGISTER TO READ MOVE.W #$D6,D2 BRA.S RSCSTA1 ; WISC CMPI.W #3,D0 ;WINDOWvt MOVE.W #2,D7 ;SET DIVISOR BRA.S CALDRD GRMW NOP ; CALDRD DIVU D7,D6 ;DIVIDE ADDRESS SWAP D6 ;GET REST IN LOWER WORD LSL.W D1,D6 ;SHIFT LEFT MOVE.W D6,D2 MOVEM.L (A7)+,D0-D1/D6-D7 RTS PAGE * WSCSTA * WRITE SPLIT SCREEN DISPLAY START AD~| SCREEN ? BNE.S WRONGSC ;N MOVE.W #$DC,D0 ;Y SET REGISTER TO READ MOVE.W #$DE,D2 BRA.S RSCSTA1 ; WRONGSC:MOVE.W #-1,D1 ;SET -1 FOR WRONG SCREEN NUMBER BRA.S RSCEND RSCSTA1:CLR.L D1 BSR RECONR ;READ REGISTER MOVE.L D1,D3 ;STORE REGISTER wuDRESS AND DRAWING DOT POINTER * IN D0.W SCREEN NUMBER * #0 UPPER SCREEN * #1 BASE SCREEN * #2 LOWER SCREEN * #3 WINDOW SCREEN * * D1.L DISPLAY START ADDRESS * D2.W DRAWING DOT POINTER * * WSCSTA: MOVEM.L D0-D3,-(A7) CMPI.W #0,D0 ;UPPER SCREEN} MOVE.L D1,D4 MOVE.W D2,D0 ;READ NEXT CONTROL REGISTER BSR RECONR ANDI.W #$0F00,D4 ;MASKED OUT START DOT ADDRESS (SDA) LSR.L #8,D4 ;AND SHIFT RIGHT ANDI.L #$1F,D3 ;MASKED OUT DISPLAY START ADDRESS HIGH SWAP D3 ;CHANGES REGISTER WORDS OR.W D1xv ? BNE.S WBASC ;N WUPPS: MOVE.W #$C4,D0 ;Y SET REGISTER TO READ MOVE.W #$C6,D3 BRA.S WSCSTA1 ; WBASC: CMPI.W #1,D0 ;BASE SCREEN ? BNE.S WLOSC ;N WSCBASE:MOVE.W #$CC,D0 ;Y SET REGISTER TO READ MOVE.W #$CE,D3 BRA.S WSCSTA1 ; WLOSC: CMPI~,D3 ;INSERT LOW ADDRESS MOVE.W D4,D2 ; MOVE.L D3,D1 ; RSCEND MOVEM.L (A7)+,D0/D3-D6 RTS PAGE ***************************************************************************** ***********************************************************************      ****** * * EXAMPLE FOR INITIALISATION OF THE SYS68K/AGC-1 * INIT: LEA INIT4(PC),A2 INI1: CMPI.W #$FFFF,(A2) BEQ.S INITEND MOVE.W (A2)+,D0 ;REGISTER NUMBER MOVE.W (A2)+,D1 ;REGISTER PARAMETER BSR WRCONR ;WRITE CONTROL REGISTER BRA.S INI1 INITE LOWER SCREEN START ADDRESS DC.W $00D8,$0000 ;(RAR3) WINDW SCREEN RASTER ADDR3 (C) DC.W $00DA,$0028 ;(MWR3) WINDW SCREEN MEMORY WIDTH DC.W $00DC,$0008 ;(SA3H) WINDW SCREEN START ADDRESS DC.W $00DE,$D540 ;(SA3L) WINDW SCREEN START ADDRESSND: RTS * INITIALISATION TABLE * THE LAST REGISTER WHICH SHOULD BE WRITTEN IS REGISTER * NUMBER $0004 THE OMR-REGISTER. THE START BIT (BIT 14) * SHOULD BE SET. * * SCREEN RESOLUTION: * 1024 X 800 X 4 BIT/PIXEL WITH 50 HZ NON-INTERLACE * (SEE DC.W $00E0,$0000 ;(BCUR1) BLOCK CURSOR 1 DC.W $00E2,$0000 ; DC.W $00E4,$0000 ;(BCUR2) BLOCK CURSOR 2 DC.W $00E6,$0000 ; DC.W $00E8,$0000 ;(CDR) CURSOR DEFINITION REGISTER DC.W $00EA,$0000 ;(ZFR) ZOOM FAKTOR REGISTER +  CHAPTER 7 IN THE HARDWARE USERS MANUAL) * * FRAME SIZE: 2048 x 2048 * * R.NO /PARAMETER COMMENT * ------------------------------------------------------------- INIT4: DC.W $0082,$5809 ;(HSR) HORIZONTAL SYNCRON REGISTER + DC.W $008 DC.W $0002,$0200 ;(CCR) COMMAND CONTROL REGISTER + DC.W $0006,$C020 ;(DCR) DISPLAY CONTROL REGISTER + DC.W $0004,$C038 ;(OMR) OPERATION MODE REGISTER + DC.W $FFFF * +) THESE REGISTER MUST BE SET FOR BASIC INITIALISATION OF THE * S4,$0B3F ;(HDR) HORIZONTAL DISPLAY REGISTER + DC.W $0086,$0383 ;(VSR) VERTIKAL SYNCRON REGISTER + DC.W $0088,$3A01 ;(VDR) VERTIKAL DISPLAY REGISTER + DC.W $008A,$0320 ;(SSW1) BASE SCREEN WIDTH REGISTER + DC.W $008C,$00C8 ;(SSW0) UPPER YS68K/AGC-1 PAGE ***************************************************************************** ***************************************************************************** * * EXAMPLE FOR INITIALISATION OF THE SYS68K/AGC-1 * FOR 8 BIT PER PIXEL * *SCREEN WIDTH REGISTER DC.W $008E,$00C8 ;(SSW2) LOWER SCREEN WIDTH REGISTER DC.W $0090,$0000 ;(BCR) BLINK CONTROL REGISTER DC.W $0092,$2709 ;(HWR) HORIZONTAL WINDOW DISPLAY * ;--------- VWR ------------------ DC.W $0094,$012C ;(VWS)  800 X 600 / 50 HZ NON-INTERLACED INI8: LEA INIT8(PC),A2 INI81: CMPI.W #$FFFF,(A2) BEQ.S INI8END MOVE.W (A2)+,D0 ;REGISTER NUMBER MOVE.W (A2)+,D1 ;REGISTER PARAMETER BSR WRCONR ;WRITE CONTROL REGISTER BRA.S INI81 INI8END: RTS * INITIALISATVERTIKAL WINDOW DISPLAY DC.W $0096,$00C8 ;(VWW) " DC.W $0098,$0000 DC.W $009A,$0000 DC.W $009C,$0000 DC.W $00C0,$0000 ;(RAR0) UPPER SCREEN RASTER ADDR0 (C) DC.W $00C2,$0100 ;(MWR0) UPPER SCREEN MEMORY WIDTH DC.W $00C4,$0001 ;(SA0H) UPPION TABLE * THE LAST REGISTER WHICH SHOULD BE WRITTEN IS REGISTER * NUMBER $0004 THE OMR-REGISTER. THE START BIT (BIT 14) * SHOULD BE SET. * * SCREEN RESOLUTION: * 800 X 600 X 8 BIT/PIXEL WITH 50 HZ NON-INTERLACE * (SEE CHAPTER 7 IN THE HARDWARER SCREEN START ADDRESS DC.W $00C6,$4000 ;(SA0L) UPPER SCREEN START ADDRESS DC.W $00C8,$0000 ;(RAR1) BASE SCREEN RASTER ADDR1 (C) DC.W $00CA,$0100 ;(MWR1) BASE SCREEN MEMORY WIDTH + DC.W $00CC,$0002 ;(SA1H) BASE SCREEN START ADDRESS + E USERS MANUAL) * * FRAME SIZE: 2048 x 1024 * * R.NO /PARAMETER COMMENT * ------------------------------------------------------------- INIT8: DC.W $0082,$880E ;(HSR) HORIZONTAL SYNCRON REGISTER + DC.W $0084,$096C ;(HDR) HORIZONT DC.W $00CE,$8000 ;(SA1L) BASE SCREEN START ADDRESS + DC.W $00D0,$0000 ;(RAR2) LOWER SCREEN RASTER ADDR2 (C) DC.W $00D2,$0100 ;(MWR2) LOWER SCREEN MEMORY WIDTH DC.W $00D4,$0006 ;(SA2H) LOWER SCREEN START ADDRESS DC.W $00D6,$D540 ;(SA2L)AL DISPLAY REGISTER + DC.W $0086,$027A ;(VSR) VERTIKAL SYNCRON REGISTER + DC.W $0088,$1905 ;(VDR) VERTIKAL DISPLAY REGISTER + DC.W $008A,$0258 ;(SSW1) BASE SCREEN WIDTH REGISTER + DC.W $008C,$0000 ;(SSW0) UPPER SCREEN WIDTH REGISTER D      C.W $008E,$0000 ;(SSW2) LOWER SCREEN WIDTH REGISTER DC.W $0090,$0000 ;(BCR) BLINK CONTROL REGISTER DC.W $0092,$0000 ;(HWR) HORIZONTAL WINDOW DISPLAY DC.W $0094,$0000 ;(VWRS) VERTIKAL WINDOW DISPLAY DC.W $0096,$0000 ;(VWRW) " DC.W $0098,$0* ************************************************************************** ************************************************************************** * SYS68K/AGC-1 BOARD BASE ADDRESS * =============================== BBADR DC.L 0 ;BOARD BASE ADD000 DC.W $009A,$0000 DC.W $009C,$0000 DC.W $00C0,$0000 ;(RAR0) UPPER SCREEN RASTER ADDR0 (C) DC.W $00C2,$0000 ;(MWR0) UPPER SCREEN MEMORY WIDTH DC.W $00C4,$0000 ;(SA0H) UPPER SCREEN START ADDRESS DC.W $00C6,$0000 ;(SA0L) UPPER SCREEN STARESS * OFFSET TABLE FOR * FOR BASE ADDRESS CALCULATION * =============================== OFFTAB DC.L $3C000 ;ACRTC ADDRESSREGISTER DC.L $3C002 ;ACRTC DATENREGISTER DC.L $36000 ;COLOR TABLE RED DC.L $38000 ;COLOR TABLE GRUEN DC.L $3A000RT ADDRESS DC.W $00C8,$0000 ;(RAR1) BASE SCREEN RASTER ADDR1 (C) DC.W $00CA,$0200 ;(MWR1) BASE SCREEN MEMORY WIDTH + DC.W $00CC,$0004 ;(SA1H) BASE SCREEN START ADDRESS + DC.W $00CE,$E080 ;(SA1L) BASE SCREEN START ADDRESS + DC.W $00D0, ;COLOR TABLE BLUE DC.L $00000 ;BIM START ADDRESS INDEXT DC.L $0 ;ACRTC ADDRESSREGISTER DC.L $0 ;ACRTC DATENREGISTER DC.L $0 ;COLOR TABLE RED DC.L $0 ;COLOR TABLE GRUEN DC.L $0 ;COLOR TABLE BLUE DC.L $0 ;BIM START ADDRESS *$0000 ;(RAR2) LOWER SCREEN RASTER ADDR2 (C) DC.W $00D2,$0000 ;(MWR2) LOWER SCREEN MEMORY WIDTH DC.W $00D4,$0000 ;(SA2H) LOWER SCREEN START ADDRESS DC.W $00D6,$0000 ;(SA2L) LOWER SCREEN START ADDRESS DC.W $00D8,$0000 ;(RAR3) WINDW SCREEN MAIN ROUTINE * ============ * IN A0 BOARDBASE ADDRESS BINIT LEA BBADR(PC),A1 ;GET BOARD BASE ADDRESS LEA INDEXT(PC),A2 ;GET WORK TABLE ADDRESS LEA OFFTAB(PC),A3 MOVE.L A0,(A1) ;WRITE BOARDBASE ADDRESS MOVEA.L A1,A0 MOVE.W #5,D1 ;NUMBER  RASTER ADDR3 (C) DC.W $00DA,$0000 ;(MWR3) WINDW SCREEN MEMORY WIDTH DC.W $00DC,$0000 ;(SA3H) WINDW SCREEN START ADDRESS DC.W $00DE,$0000 ;(SA3L) WINDW SCREEN START ADDRESS DC.W $00E0,$0000 ;(BCUR1) BLOCK CURSOR 1 DC.W $00E2,$0000 OF OFFSETS BINI1 MOVE.L (A3),D0 ;PUT OFFSET IN D0 BSR.S BASINIT ;CALCULATE ADDA.L #4,A2 ;POINT TO NEXT OFFSET ADDA.L #4,A3 DBRA D1,BINI1 ;ALL ? RTS * INITIALISATION TO THE BASE ADDRESS * AND REPLACE THEM TO THE OFFSET TABLE * =========== ; DC.W $00E4,$0000 ;(BCUR2) BLOCK CURSOR 2 DC.W $00E6,$0000 ; DC.W $00E8,$0000 ;(CDR) CURSOR DEFINITION REGISTER DC.W $00EA,$0000 ;(ZFR) ZOOM FAKTOR REGISTER + DC.W $0002,$0200 ;(CCR) COMMAND CONTROL REGISTER + DC.W $0006,========================= BASINIT MOVEA.L (A0),A1 ADDA.L D0,A1 ;ADD OFFSET TO THE BOARD BASE ADDRESS MOVE.L A1,(A2) ;REPLACE TO WORK TABLE RTS ************************************************************************** * DEFINITION CONTROLLER$C010 ;(DCR) DISPLAY CONTROL REGISTER + DC.W $0004,$C038 ;(OMR) OPERATION MODE REGISTER + DC.W $FFFF * +) THESE REGISTER MUST BE SET FOR BASIC INITIALISATION OF THE * SYS68K/AGC-1 PAGE *************************************************** REGISTER ************************************************************************** FIFO EQU $0000 ;FIFO CCR EQU $0002 ;COMMAND CONTROL REGISTER OMR EQU $0004 ;OPERATION MODE REGISTER DCR EQU $0006 ;DISPLAY CONTROL REGISTER RCR EQU $0080 ;*********************** * AGC-1:SR ************************************************************************** ************************************************************************** * SYS68K/AGC-1 * DRIVER MODULE * MAI 1986 * * * RASTER COUNT REGISTER HSR EQU $0082 ;HORZONTAL SYNC. HDR EQU $0084 ;HORIZONTAL DISPLAY VSR EQU $0086 ;VERTICAL SYNC. VDR EQU $0088 ;VERTICAL DISPLAY REGISTER SSW1 EQU $008A ;SPLIT SCREEN WIDTH SP1 BASE SSW0 EQU $008C ;SPLIT SCREEN WIDTH SP0      UPPER SSW2 EQU $008E ;SPLIT SCREEN WIDTH SP2 LOWER BCR EQU $0090 ;BLINK CONTROL REGISTER HWR EQU $0092 ;HORIZONTAL WINDOW DISPLAY VWRS EQU $0094 ;VERTICAL WINDOW DISPLAY START VWRW EQU $0096 ; WIDTH * UPPER SCRE * DRD EQU $2400 ;DMA READ DWT EQU $2800 ;DMA WRITE DMOD EQU $2C00 ;DMA MODIFY RD EQU $4400 ;READ (ONE WORD FROM THE FRAME BUFFER) WT EQU $4800 ;WRITE(ONE WORD TO THE FRAME BUFFER) MOD EQU $4C00 ;MEN RAR0 EQU $00C0 ;RASTER ADDRESS UPPER SCREEN MWR0 EQU $00C2 ;MEMORY WIDTH " SARH0 EQU $00C4 ;START ADDRESS HIGH WORD SARL0 EQU $00C6 ;START ADDRESS LOW WORD * BASE SCREEN RAR1 EQU $00C8 ;RASTER ADDRESS BASE SCREEN MWR1 EQU $0ODIFY CLR EQU $5800 ;CLEAR (INITIALIZE FRAME BUFFER AERA) SCLR EQU $5C00 ;SELECTIVE CLEAR CPY EQU $6000 ;COPY SCPY EQU $7000 ;SELECTIVE COPY ***************************************************************************** * 0CA ;MEMORY WIDTH " SARH1 EQU $00CC ;START ADDRESS HIGH WORD SARL1 EQU $00CE ;START ADDRESS LOW WORD * LOWER SCREEN RAR2 EQU $00D0 ;RASTER ADDRESS LOWER SCREEN MWR2 EQU $00D2 ;MEMORY WIDTH " SARH2 EQU $00D4 ;START ADDRESS HIGH * * GRAPHIC DRAWING COMMANDS * AMOVE EQU $8000 ;ABSOLUTE MOVE RMOVE EQU $8400 ;RELATIVE MOVE ALINE EQU $8800 ;ABSOLUTE LINE RLINE EQ WORD SARL2 EQU $00D6 ;START ADDRESS LOW WORD * WINDOW SCREEN RAR3 EQU $00D8 ;RASTER ADDRESS WINDOW SCREEN MWR3 EQU $00DA ;MEMORY WIDTH " SARH3 EQU $00DC ;START ADDRESS HIGH WORD SARL3 EQU $00DE ;START ADDRESS LOW WORD * U $8C00 ;RELATIVE LINE ARCT EQU $9000 ;ABSOLUTE RECTANGLE RRCT EQU $9400 ;RELATIVE RECTANGLE APLL EQU $9800 ;ABSOLUTE POLYLINE RPLL EQU $9C00 ;RELATIVE POLYLINE APLG EQU $A000 ;ABSOLUTE POLYGON RPLG EQU $A400 ;RELATIVE POZOOM FACTOR ZFR EQU $00EA ;ZOOM FACTOR PAGE **************************************************************************** * CONTROLLER FUNKTIONS CODES * ****************************************************************************LYGON CRCL1 EQU $A900 ;CIRCLE CLOCKWISE CRCL0 EQU $A800 ;CIRCLE COUNTER CLOCKWISE ELPS1 EQU $AD00 ;ELLIPSE CLOCKWISE ELPS0 EQU $AC00 ;ELLIPSE COUNTER CLOCKWISE AARC1 EQU $B100 ;ABSOLUTE ARC CLOCKWISE AARC0 EQU $B000 ;ABSOLUTE ARC COUNTER CL *NAME CODE ;COMMENT * *--------------------------------------------------------------------------* * * * OCKWISE RARC1 EQU $B500 ;RELATIVE ARC CLOCKWISE RARC0 EQU $B400 ;RELATIVE ARC COUNTER CLOCKWISE AEARC1 EQU $B900 ;ABSOLUTE ELLIPSE ARC CLOCKWISE AEARC0 EQU $B800 ;ABSOLUTE ELLIPSE ARC COUN CLOCKWISE REARC1 EQU $BD00 ;RELATIVE ELLIPSE ARC CLOC * * REGISTER ACCESS COMMANDS * ORIG EQU $0400 ;ORIGN POINT AND CHOOSE SCREEN WPR EQU $0800 ;WRITE PARAMETER REGISTER RPR EQU $0C00 ;READ PARAMETER REGISTER WPTN EQU $1800 ;WRIKWISE REARC0 EQU $BC00 ;RELATIVE ELLIPSE ARC COUN CLOCKWISE AFRCT EQU $C000 ;ABSOLUTE FILLED RECTANGLE RFRCT EQU $C400 ;RELATIVE FILLED RECTANGLE PAINT0 EQU $C800 ;PAINT0 ---> E = 0 PAINT1 EQU $C900 ;PAINT1 ---> E = 1 DOT EQU $CC00 ;DRAW DOTE PATTERN RAM RPTN EQU $1C00 ;READ PATTERN RAM ****************************************************************************** * * * DATA TRANSFER COMMANDS T PTN EQU $D000 ;PATTERN AGCPY EQU $E000 ;ABSOLUTE GRAPHIC COPY RGCPY EQU $F000 ;RELATIVE GRAPHIC COPY PAGE ****************************************************************************** * DEFINITION DRAWING PARAMETER REGISTER       * ****************************************************************************** COREG0 EQU $0000 ;COLOR REGISTER 0 COREG1 EQU $0001 ;COLOR REGISTER 1 CCOREG EQU $0002 ;COLOR COMPARSION REGISTER ECOREG EQU $0003 ;EDGE COLOR REGISTER RMASK  (A2),A0 ;ADDRESS REG ADDRESS MOVEA.L 4(A2),A1 ;DATA REG ADDRESS CLR.L D2 WRC1 ADDI.L #1,D2 CMPI.L #$FFFFF,D2 BNE.S WRC2 LEA COMER(PC),A1 XPLC MOVE.W (A3),D1 XCBH XPLC BSR CLFIFO BRA.S WRCEND WRC2 MOVE.W (A0),D1 ;READ STATUSREGISTEREQU $0004 ;MASK REGHISTER * PATTERN RAM CONTROL REGISTER PRC05 EQU $0005 ;PATTERN POINT REGISTER PRC06 EQU $0006 ;PATTERN START POINT REGISTER PRC07 EQU $0007 ;PATTERN END POINT REGISTER * AERA DEFINITION REGISTER DRXMIN EQU BTST #5,D1 ;COMMAND END BEQ WRC1 MOVE.W #FIFO,(A0) ;FIFO IS DESTINATION MOVE.W D0,(A1) ;WRITE COMMAND MOVE.W D0,(A3) WRCEND MOVEM.L (A7)+,D0-D2/A0-A3 ;RESTORE REGISTERS RTS ;RETURN COMER DC.B $0A,$0D,'LETZTES COMMANDO WAR: ',0 EVEN C $0008 ;XMIN DRYMIN EQU $0009 ;YMIN DRXMAX EQU $000A ;XMAX DRYMAX EQU $000B ;YMAX * READ WRITE POINTER REGISTER DRWPH EQU $000C ;READ WRITE POINTER HIGH WORD DRWPL EQU $000D ;" LOW WORD * DRAWING POINTER REGIERTABL DC.W 0 * * ************************************************************************** * SUBROUTINE: WRPARA * FUNKTION: WRITE COMMANDPARAMETER TO ACRTC * COMMAND- * EXTENSION: -- * * INPUT: D1 :NUMBER OF PARAMETERS * A2 :PARAMETERASTER PDPH EQU $0010 ;DRAWING POINTER HIGH WORD PDPL EQU $0011 ;" LOW WORD * CURRENT POINTER REGISTER PCPH EQU $0012 ;CURRENT POINTER HIGH WORD PCPL EQU $0013 ;" LOW WORD PAGE ************************DRESS * OUTPUT: PARMETER TO ACRTC * * INTERNAL: D2 * * WRPARA: MOVEM.L D1-D2/A0-A3,-(A7) ;STORE D1 AND A2 LEA INDEXT(PC),A3 ;LOAD ADDRESS TABLE ADDRESS MOVEA.L (A3),A0 ;ADDRESS REG ADDRESS MOVEA.L 4(A3),A1 ;DATA REG ADDRESS BRA.S WR************************************************** *************************************************************************** * * * GRAPHIC FUNKTIONS ACRTC * * FOR ALLPA2 WRPA1 MOVE.W (A0),D2 ;READ STATUSREGISTER BTST #1,D2 ;FIFO READY BEQ WRPA1 MOVE.W (A2)+,(A1) ;WRITE PARAMETER WRPA2 DBRA D1,WRPA1 ;DEKREMT NUMBER PARAMTERS MOVEM.L (A7)+,D1-D2/A0-A3 ;RESTORE DATA RTS ;RETURN PAGE *************** FUNKTIONS THE PARAMETER ADRESS MUST BE GIVEN IN A2 * ** MODI DC.W $0000 COMFILL DC.W $0000 ;X - COORDINATE DC.W $0000 ;Y - COORDINATE DC.W $0000 ;PP - PATTERN POINTER (PR05) SLSD DC.W $0000 ;SLANT AND SOURCE DIRECTION SDSD DC.W $0000 **************************************************************** * SCOL0: SET COLORREGISTER 0 * IN: D1 COLOR NUMBER SCOL0: MOVEM.W D0-D2,-(A7) MOVE.W #COREG0,D0 ;SET COLOR REGISTER 0 AND #$000F,D1 MOVE.W D1,D2 LSL.W #4,D1 ADD D2, ;SOURCE- AND DESTINATION SCAN * ;DIRECTION MM DC.W $0000 ;MODIFY MODE PRA DC.W $0000 ;PATTERN RAM ADDRESS * * ************************************************************************** * SUBROUTINE: WRCOM * FUNKTION: WRITE COMMANDCODE TO AD1 LSL.W #4,D1 ADD D2,D1 LSL #4,D1 ADD D2,D1 BSR WRDPAR MOVEM.W (A7)+,D0-D2 RTS ******************************************************************************* * SCOL1: SET COLORREGISTER 1 * IN: D1 COLOR NUMBER SCOL1: MOVEM.W GC * COMMAND- * EXTENSION: -- * * INPUT: D0 :COMMANDCODE * * OUTPUT: COMMANDCODE TO ACRTC * * INTERNAL: D1 :STATUS * * WRCOM: MOVEM.L D0-D2/A0-A3,-(A7) ;STORE D0 LEA CERTABL(PC),A3 LEA INDEXT(PC),A2 ;LOAD INDEXT TABLE ADDRESS MOVEA.LD0-D2,-(A7) MOVE.W #COREG1,D0 ;SET COLOR REGISTER 1 AND #$000F,D1 MOVE.W D1,D2 LSL.W #4,D1 ADD.W D2,D1 LSL.W #4,D1 ADD.W D2,D1 LSL #4,D1 ADD.W D2,D1 BSR WRDPAR MOVEM.W (A7)+,D0-D2 RTS *******************************************************     ************************ * SECOL: SET EDGE COLORREGISTER * IN: D1 COLOR NUMBER SECOL: MOVEM.W D0-D2,-(A7) MOVE.W #ECOREG,D0 ;SET EDGE COLOR REGISTER AND.W #$000F,D1 MOVE.W D1,D2 LSL.W #4,D1 ADD D2,D1 LSL.W #4,D1 ADD D2,D1 LSION: -- * * INPUT: D0 :SCAN DIRECTION * * OUTPUT: D0 IN SLSD IN SLSD (BIT 8 -10) * * INTERNAL: D1 A2 * * * SESCDI: MOVEM.L D0/D1/A2,-(A7) ;STORE D0 AND D1 CLR D1 AND.W #$0007,D0 LSL #8,D0 ;SHIFT LEFT 8 BIT MOVE.W #$0800,D1 ;SET MAL #4,D1 ADD D2,D1 BSR WRDPAR MOVEM.W (A7)+,D0-D2 RTS * ************************************************************************** * SUBROUTINE: SDAREA * FUNKTION: SET AREA DEFINITION REGISTER XMIN YMIN XMAX YMAX * DRAWING PARAMETER REGISTERSK LEA SLSD(PC),A2 ;LOAD MODI ADRESS AND.W D1,(A2) OR.W D0,(A2) ;SET SCAN DIRECTION IN SLSD MOVEM.L (A7)+,D0/D1/A2 ;RESTORE RTS ;RETURN PAGE * ************************************************************************** * SUBROUTINE: SE ( PR08 PR09 PR0A PR0B ) * COMMAND- * EXTENSION: -- * * INPUT: A2.W :PARAMETERADRESS * #0(A2) :XMIN * #2(A2) :YMIN * #4(A2) :XMAX * #6(A2) :YMAX * OUTPUT: PARMETER TO ACRTC * * INTERNAL: D2 * * * ************************************TSSD * FUNKTION: SET SOURCE SCAN DIRECTION IN SDSD * COMMAND- * EXTENSION: -- * * INPUT: D0 :SOURCE SCAN DIRECTION * * OUTPUT: D0 IN SDSD (BIT 11) * * INTERNAL: D1 A2 * * * SETSSD: MOVEM.L D0/D1/A2,-(A7) ;STORE D0 AND D1 CLR D1 A************************************** SDAREA: MOVEM.L D0-D1/A2,-(A7) MOVE.W #DRXMIN,D0 ;SELECT DRAWING PARAMETER REGISTER XMIN MOVE.W (A2)+,D1 ;GET PARAMETER BSR WRDPAR ;WRITE INTO THE REGISTER MOVE.W #DRYMIN,D0 ;SELECT DRAWING PARAMETER REGISTEND.W #$0001,D0 ;BLANKED BIT 15 - 1 LSL #8,D0 ;SHIFT LEFT 11 BIT LSL #3,D0 MOVE.W #$0700,D1 ;SET MASK LEA SDSD(PC),A2 ;LOAD SDSD ADRESS AND.W D1,(A2) OR.W D0,(A2) ;SET SSD MODE IN SDSD MOVEM.L (A7)+,D0/D1/A2 ;RESTORE RTS ;RETURNR YMIN MOVE.W (A2)+,D1 ;GET PARAMETER BSR WRDPAR ;WRITE INTO THE REGISTER MOVE.W #DRXMAX,D0 ;SELECT DRAWING PARAMETER REGISTER XMAX MOVE.W (A2)+,D1 ;GET PARAMETER BSR WRDPAR ;WRITE INTO THE REGISTER MOVE.W #DRYMAX,D0 ;SELECT DRAWING PARAMETER R * * ************************************************************************** * SUBROUTINE: SETDSD * FUNKTION: SET DESTINATION SCAN DIRECTION IN SDSD * COMMAND- * EXTENSION: -- * * INPUT: D0 :DESTINATION SCAN DIRECTION * * OUTPUT: D0EGISTER YMAX MOVE.W (A2)+,D1 ;GET PARAMETER BSR WRDPAR ;WRITE INTO THE REGISTER MOVEM.L (A7)+,D0-D1/A2 RTS * SUBROUTINE: SSLANT * FUNKTION: SET SLANT IN SLSD WORT (PATTERN) * COMMAND- * EXTENSION: -- * * INPUT: D0 :SLANT * * OU IN SDSD (BIT 8 -10) * * INTERNAL: D1 A2 * * * SETDSD: MOVEM.L D0/D1/A2,-(A7) ;STORE D0 AND D1 CLR D1 AND.W #$0007,D0 ;BLANKED BIT 15 - 3 LSL #8,D0 ;SHIFT LEFT 8 BIT MOVE.W #$0800,D1 ;SET MASK LEA SDSD(PC),A2 ;LOAD SDSD ADRESS AND.WTPUT: D0 IN SLSD(BIT 11) * * INTERNAL: D1 A2 * * * SSLANT: MOVEM.L D0/D1/A2,-(A7) ;STORE D0 AND D1 CLR.L D1 LSL #8,D0 ;SHIFT LEFT 8 BIT LSL #3,D0 MOVE.W #$07FF,D1 ;SET MASK LEA SLSD(PC),A2 ;LOAD SLSD ADRESS AND.W D1,(A2) OR.W D0,(A D1,(A2) OR.W D0,(A2) ;SET DSD MODE IN SDSD MOVEM.L (A7)+,D0/D1/A2 ;RESTORE RTS ;RETURN PAGE * ************************************************************************** * SUBROUTINE: SETMFY * FUNKTION: SET MODIFY MODE IN MM * COMMAND- 2) ;SET SLANT MODE IN SLSD MOVEM.L (A7)+,D0/D1/A2 ;RESTORE RTS ;RETURN * * ************************************************************************** * SUBROUTINE: SESCDI * FUNKTION: SET SCAN DIRECTION IN SLSD (PATTERN) * COMMAND- * EXTENS* EXTENSION: -- * * INPUT: D0 :MODIFY MODE * * OUTPUT: D0 IN MM (BIT 1-0) * * INTERNAL: D1 A2 * * * SETMFY: MOVEM.L D0/D1/A2,-(A7) ;STORE D0 AND D1 CLR D1 ANDI.W #$0003,D0 ;BLANK OUT MOVE.W #$FFFC,D1 ;SET MASK LEA MM(PC),A2      ;LOAD MM ADRESS AND.W D1,(A2) OR.W D0,(A2) ;SET MODIFY MODE IN MM MOVEM.L (A7)+,D0/D1/A2 ;RESTORE RTS ;RETURN * * ************************************************************************** * SUBROUTINE: SETPRA * FUNKTION: SET PATTERN R/D1/A2,-(A7) ;STORE D0 AND D1 CLR D1 MOVE.W #$00F8,D1 ;SET MASK LEA MODI(PC),A2 ;LOAD MODI AND.W D1,(A2) OR.W D0,(A2) ;SET OPERATIONMODE IN MODI MOVEM (A7)+,D0/D1/A2 ;RESTORE RTS ;RETURN * *********************************************AM ADDRESS IN PRA * COMMAND- * EXTENSION: -- * * INPUT: D0 :PATTERN RAM ADDRESS * * OUTPUT: D0 IN PRA (BIT 3 - 0) * * INTERNAL: D1 A2 * * * SETPRA: MOVEM.L D0/D1/A2,-(A7) ;STORE D0 AND D1 CLR D1 ANDI.W #$000F,D0 MOVE.W #$FFF0,D1 ***************************** * SUBROUTINE: SETMOD * FUNKTION: INSERTS AERA-, COLOR- AND OPERATIONMODE IN THE * COMMANDCODE * COMMAND- * EXTENSION: * * INPUT: D0 :COMMANDCODE * * OUTPUT: D0 :MODIFIERED COMMANDCODE * * INTERNAL:  ;SET MASK LEA PRA(PC),A2 ;LOAD PRA ADRESS AND.W D1,(A2) OR.W D0,(A2) ;SET PATTERN RAM ADDRESS IN PRA MOVEM.L (A7)+,D0/D1/A2 ;RESTORE RTS ;RETURN PAGE * ************************************************************************** * SUBR * * SETMOD: MOVEM A2,-(A7) ;STORE A2 LEA MODI(PC),A2 ;LOAD MODI OR.W (A2),D0 ;INSERT MODI IN COMMANDCODE MOVEM (A7)+,A2 ;RESTORE A2 RTS PAGE * ************************************************************************** * SUBROUTINE: WRCONR *OUTINE: SETAER * FUNKTION: SET AERAMODE IN MODI-BYTE * COMMAND- * EXTENSION: -- * * INPUT: D0 :AERA MODE * * OUTPUT: D0 IN MODI (BIT 7-5) * * INTERNAL: D1 A2 * * * SETAER: MOVEM.L D0/D1/A2,-(A7) ;STORE D0 AND D1 CLR D1 LSL #5,D0  FUNKTION: WRITE PARAMETER IN THE SELECTED CONTROL REGISTER * COMMAND- * EXTENSION: --- * * INPUT: D0 :REGISTER NUMBER * D1 :PARAMTER * OUTPUT: REGISTER TO ACRTC ADRESSREGISTER * PARAMETER ACRTC DATAREGISTER * INTERNAL: * * WR ;SHIFT LEFT 5 BIT MOVE.W #$001F,D1 ;SET MASK LEA MODI(PC),A2 ;LOAD MODI ADRESS AND.W D1,(A2) OR.W D0,(A2) ;SET AERA MODE IN MODI MOVEM.L (A7)+,D0/D1/A2 ;RESTORE RTS ;RETURN * * *****************************************************CONR: MOVEM.L D0-D1/A0-A2,-(A7) LEA INDEXT(PC),A2 ;LOAD ADRESS TABLE ADRESS MOVEA.L (A2),A0 ;ADDRESS REG ADDRESS MOVEA.L 4(A2),A1 ;DATA REG ADDRESS MOVE.W D0,(A0) ;REGISTER IS DESTINATION MOVE.W D1,(A1) ;WRITE PARAMETER MOVEM.L (A7)+,D********************* * SUBROUTINE: SETCOL * FUNKTION: SET COLORMODE IN MODI-BYTE * COMMAND- * EXTENSION: -- * * INPUT: D0 :COLORMODE * * OUTPUT: D0 IN MODI (BIT 4-3) * * INTERNAL: D1 * * * SETCOL: MOVEM.L D0/D1/A2,-(A7) ;STORE D0 0-D1/A0-A2 RTS * * ************************************************************************** * SUBROUTINE: RECONR * FUNKTION: READ THE PARAMETER FROM THE SELECTED CONTROL REGISTER * COMMAND- * EXTENSION: --- * * INPUT: D0 :REGISTER NUMBEAND D1 CLR D1 LSL #3,D0 ;SHIFT LEFT 3 BIT MOVE.W #$00E7,D1 ;SET MASK LEA MODI(PC),A2 ;LOAD MODI AND.W D1,(A2) OR.W D0,(A2) ;SET COLORMODE IN MODI MOVEM.L (A7)+,D0/D1/A2 ;RESTORE RTS ;RETURN PAGE * *********************************R * * OUTPUT: D1 :PARAMETER * * INTERNAL: D1 * * RECONR: MOVEM.L D0/D2/A0-A2,-(A7) LEA INDEXT(PC),A2 ;LOAD ADDRESS TABLE ADDRESS MOVEA.L (A2),A0 ;ADDRESS REG ADDRESS MOVEA.L 4(A2),A1 ;DATA REG ADDRESS RCTR MOVE.W D0,(A0) ;DESTINATIO***************************************** * SUBROUTINE: SETOPM * FUNKTION: SET OPERATIONMODE IN MODI-BYTE * COMMAND- * EXTENSION: -- * * INPUT: D0 :OPERATIONMODE * * OUTPUT: D0 IN MODI (BIT 0-2) * * INTERNAL: D1 * * * SETOPM: MOVEM D0N REGISTER MOVE.W (A1),D1 ;READ PARAMETER MOVEM.L (A7)+,D0/D2/A0-A2 RTS PAGE * ************************************************************************** * SUBROUTINE: WRDPAR * FUNKTION: WRITE DRAWING PARAMETER INTO SELECTED DRAWING PARAMETER *      REGISTER * COMMAND- * EXTENSION: --- * * INPUT: D0 :REGISTER NUMBER * D1 :PARAMETER * OUTPUT: * * INTERNAL: * * WRDPAR: MOVEM.L D0-D2/A0-A2,-(A7) LEA INDEXT(PC),A2 ;LOAD ADDRESS TABLE ADDRESS MOVEA.L (A2),A0 ;ADDRESS REG ADD***** * SUBROUTINE: CLFIFO * FUNKTION: SET AND RESET THE ABORT-BIT IN THE COMMAND CONTROL REGISTER * AFTER EXECUTION THE READ FIFO AND THE WRITE FIFO WILL BE * CLEARED * COMMAND- * EXTENSION: --- * * INPUT: -- * * OUTPUT: -- * * INTERESS MOVEA.L 4(A2),A1 ;DATA REG ADDRESS WRDP1 MOVE.W (A0),D2 ;READ STATUSREGISTER BTST #1,D2 ;WRITE FIFO READY BEQ WRDP1 MOVE.W #FIFO,(A0) ORI.W #$0800,D0 ;INSERT REGISTERNUMBER IN THE COM CODE MOVE.W D0,(A1) ;WRITE COMMAND MOVE.W D1,RNAL: D0 D1 D2 * * CLFIFO: MOVEM.L D0-D1,-(A7) MOVE.W #CCR,D0 ;LOAD REGISTER NUMBER BSR RECONR ;READ CONTROL REGISTER ORI.W #$8000,D1 ;SET ABORT BIT BSR WRCONR ;WRITE CONTROLREGISTER ANDI.W #$7FFF,D1 ;RESET THE ABORT BIT BSR WRCONR (A1) ;WRITE PARAMETER MOVEM.L (A7)+,D0-D2/A0-A2 RTS * * ************************************************************************** * SUBROUTINE: REDPAR * FUNKTION: LOAD PARAMETER FROM SELECTED DRAWING PARAMETER REGISTER * INTO THE READ FIFO *  ;WRITE CONTROL REGISTER MOVEM.L (A7)+,D0-D1 RTS PAGE * * ************************************************************************** * SUBROUTINE: RACRTC * FUNKTION: RESET THE ACRTC(SET AND RESET THE ABORT BIT IN THE CCR) * AFTER EXECUTION THE  COMMAND- * EXTENSION: --- * * INPUT: D0 :REGISTER NUMBER * * OUTPUT: D1 :PARAMETER * * INTERNAL: D2 * * REDPAR: MOVEM.L D0/D2/A0-A2,-(A7) LEA INDEXT(PC),A2 ;LOAD ADDRESS TABLE ADDRESS MOVEA.L (A2),A0 ;ADDRESS REG ADDRESS MOVEA. READ FIFO AND THE WRITE FIFO WILL BE * CLEARED AND THE COMMAND END BIT IN THE STATUSREGISTER * WILL BE SET TO 1 * COMMAND- * EXTENSION: --- * * INPUT: -- * * OUTPUT: -- * * INTERNAL: D0 D1 * * RACRTC: MOVEM.L D0-D1,-(A7) MOVE.W #CL 4(A2),A1 ;DATA REG ADDRESS BSR.S CLFIFO ;CLEAR READ FIFO MOVE.W #FIFO,(A0) ;FIFO IS DESTINATION ORI.W #$0C00,D0 ;INSERT REGISTERNUMBER MOVE.W D0,(A1) ;WRITE REGISTER READ COMMAND MOVE.W (A1),D1 ;READ PARAMETER FROM FIFO MOVEM.L (A7)CR,D0 ;LOAD REGISTER NUMBER BSR RECONR ;READ CONTROL REGISTER ORI.W #$8000,D1 ;SET ABORT BIT BSR WRCONR ;WRITE CONTROLREGISTER ANDI.W #$7FFF,D1 ;RESET THE ABORT BIT BSR WRCONR ;WRITE CONTROL REGISTER MOVEM.L (A7)+,D0-D1 RTS * *******+,D0/D2/A0-A2 RTS PAGE * ************************************************************************** * SUBROUTINE: RFIPAR * FUNKTION: READ PARAMETERS FROM READ FIFO * (BE SURE ) * COMMAND- * EXTENSION: --- * * INPUT: A2 :PARAMETER LIST * ******************************************************************* * SUBROUTINE: WPARAM * FUNKTION: WRITE DATA TO THE PATTERN RAM * COMMAND- * EXTENSION: PRA :PATTERN RAM ADDRESS * * INPUT: D0 :COMMAND CODE * D1 :NUMBER OF WORDS * A2* OUTPUT: WRITE THE CONTENTS OF READ FIFO INTO THE PARAMETERLIST * * INTERNAL: D1 * * RFIPAR: MOVEM.L D1/A0-A3,-(A7) LEA INDEXT(PC),A3 ;GET ADDRESS TABLE ADDRESS MOVEA.L (A3),A0 ;GET ADDRESS REGISTER ADDRESS MOVEA.L 4(A3),A1 ;GET DATA R :PARAMETER ADDRESS * OUTPUT: * * INTERNAL: * * WRPLIS DS.W 16 WPARAM: MOVEM.L D0-D3/A2-A4,-(A7) LEA PRA(PC),A3 MOVE.W (A3),D2 OR.W D2,D0 ;INSERT COMMAND EXTENSION MOVE.W D1,D3 ;SAVE NUMBER OF WORDS WPR1 LEA WRPLIS(PC),A3 ;LOAD PEGISTER ADDRESS RFST MOVE.W (A0),D1 ;READ STATUS REGISTER BTST #2,D1 ;READ FIFO EMPTY BEQ.S RFEND MOVE.W (A1),(A2)+ ; BRA.S RFST RFEND MOVEM.L (A7)+,D1/A0-A3 RTS * * *********************************************************************ATTERN LIST ADDRESS MOVEA.L A3,A4 MOVE.W D3,(A3)+ ;WRITE ORIGN NUMBER OF WORDS MOVE.W D1,D3 ;LOOP COUNTER TO D3 BRA.S WPLP2 WPLP1 MOVE.W (A2)+,(A3)+ WPLP2 DBRA D3,WPLP1 ;DEKREMENT AND JUMP MOVEA.L A4,A2 ;7777777777 BSR WRCOM ;WRITE COMMAN     D ADD.W #1,D1 BSR WRPARA ;WRITE PARAMETER MOVEM.L (A7)+,D0-D3/A2-A4 RTS * * * ************************************************************************** * SUBROUTINE: RPARAM * FUNKTION: READ DATA FROM THE PATTERN RAM * COMMAND- * EXTENSIORESS * OUTPUT: COMMANDCODE --> ACRTC FIFO * PARAMETER --> ACRTC FIFO * INTERNAL: D1 * * LINREC MOVEM.L D0-D1/A2,-(A7) BSR SETMOD ;INSERT COMMANDEXTENSION BSR WRCOM ;WRITE COMMAND MOVE.W #2,D1 ;NUMBER OF PARAMETERS BSR WRPARA ;WRITEN: PRA * * INPUT: D0 :COMMAND CODE * D1 :NUMBER OF WORDS TO BE READ * OUTPUT: A2 : * * INTERNAL: * * LERAM DC.W $0000 ;PARAMETER ADDRESS PRLIST DS.W 16 ;RESERVE 16 WORD RPARAM: MOVEM.L D0-D2/A2-A3,-(A7) BSR CLFIFO PARAMETER MOVEM.L (A7)+,D0-D1/A2 RTS PAGE * ************************************************************************** * SUBROUTINE: POLYLG * FUNKTION: DRAW AN ABSOLUTE OR RELATIVE POLYLINE OR POLYGON * COMMAND- * EXTENSION: AERA - COL - OPM  ;CLEAR FIFO LEA PRA(PC),A3 ;LOAD COMMAND EXTENSION ADDRESS MOVE.W (A3),D2 OR.W D2,D0 ;INSERT COMMAND EXTENSION LEA LERAM(PC),A2 ;LOAD PARAMETER ADDRESS MOVE.W D1,(A2) ; BSR WRCOM ;WRITE COMMAND MOVE.W #1,D1 ;ONE PARAMETER TO BE WRIT* * INPUT: D0 :COMMANDCODE * A2 :PARAMETERADRESS * OUTPUT: COMMANDCODE --> ACRTC FIFO * PARAMETER --> ACRTC FIFO * INTERNAL: D1 * * POLYLG: MOVEM.L D0-D1/A2,-(A7) BSR SETMOD ;INSERT COMMANDEXTENSION BSR WRCOM ;WRITE COMMAND MOTEN BSR WRPARA ;WRITE PARAMETER LEA PRLIST(PC),A2 ;LOAD PARAMETERLIST ADDRESS BSR RFIPAR ;READ OUT READ FIFO MOVEM.L (A7)+,D0-D2/A2-A3 RTS PAGE * ************************************************************************** * SUBROUTINE: CLPATVE.W (A2),D1 ;NUMBER OF POINTS --> D1 MULU #2,D1 ;*2 --> NUMBER OF PARAMETERS ADD.W #1,D1 BSR WRPARA ;WRITE PARAMETERS MOVEM.L (A7)+,D0-D1/A2 RTS * * ************************************************************************** * SUBROUTINE: DCT * FUNKTION: CLEARED THE PATTERN * COMMAND- * EXTENSION: * * INPUT: -- * * OUTPUT: -- * * INTERNAL: A2 D0 D1 * * CLPATT: MOVEM.L D0/D1/A2,-(A7) LEA PRAM0(PC),A2 MOVE.W #WPTN,D0 MOVE.W #16,D1 BSR WPARAM MOVEM.L (A7)+,D0/D1/AIRCL * FUNKTION: DRAW CIRCLE CLOCKWISE OR COUNTERCLOCKWISE * COMMAND- * EXTENSION: AERA - COL - OPM * * INPUT: D0 ;COMMANDCODE * A2 ;PARAMETERADRESS * OUTPUT: COMMANDCODE --> ACRTC FIFO * PARAMETER --> ACRTC FIFO * INTERNAL: D2 RTS PAGE * ************************************************************************** * SUBROUTINE: CPMOVE * FUNKTION: MOVED CURRENTPOINTER ABSOLUT OR RELATIVE * COMMAND- * EXTENSION: -- * * INPUT: D0 :COMMANDCODE * A2 :PARAMETERADR1 * * DCIRCL: MOVEM.L D0-D1/A2,-(A7) * XBUG BSR SETMOD ;INSERT COMMANDEXTENSION BSR WRCOM ;WRITE COMMAND MOVE.W #1,D1 ;NUMBER OF PARAMETER BSR WRPARA ;WRITE PARAMETER MOVEM.L (A7)+,D0-D1/A2 ;RESTORE RTS PAGE * **************************ESS * OUTPUT: COMMANDCODE --> ACRTC * PARAMETER --> ACRTC * INTERNAL: D1 * * CPMOVE: MOVEM.L D0-D1/A2,-(A7) BSR WRCOM ;WRITE COMMAND MOVE.W #2,D1 ;NUMBER OF PARAMETERS BSR WRPARA ;WRITE PARAMETERS MOVEM.L (A7)+,D0-D1/A2 RTS * * **************************************************** * SUBROUTINE: DELLIP * FUNKTION: DRAW A ELLIPSE CLOCKWISE OR COUNTERCLOCKWISE * COMMAND- * EXTENSION: AERA - COL - OPM * * INPUT: D0 :COMMANDCODE * A2 :PARAMETERADRESS * OUTPUT: COMMA********************************************************************** * SUBROUTINE: LINREC * FUNKTION: DRAW AN ABSOLUTE OR RELATIVE LINE OR RECTANGLE * COMMAND- * EXTENSION: AERA - COL - OPM * * INPUT: D0 :COMMANDCODE * A2 :PARAMETERADNDCODE --> ACRTC FIFO * PARAMETER --> ACRTC FIFO * INTERNAL: D1 * * DELLIP: MOVEM.L D0-D1/A2,-(A7) BSR SETMOD ;INSERT COMMANDEXTENSION BSR WRCOM ;WRITE COMMAND MOVE.W #3,D1 ;NUMBER OF PARAMETERS BSR WRPARA ;WRITE PARAMETER MOVEM.L (A7     )+,D0-D1/A2 ;RESTORE RTS * * ************************************************************************** * SUBROUTINE: RLARC * FUNKTION: DRAW CLOCKWISE OR COUNTERCLOCKWISE AN ABSOLUTE OR RELATIVE * ARC * COMMAND- * EXTENSION: AERA - COL - OPM *  METERREGISTER (EDG) USING THE FIGURE PATTERN * SPECIFIED IN THE PATTERN RAM * COMMAND- * EXTENSION: AERA (COL-MODE MUST SPECIFIED 00) * (OPM-MODE MUST SPECIFIED 000) * E EGDECOLOR INCLUDED IN THE COMMANDCODE * INPUT: D0 COMMANDPARATER * INPUT: D0 :COMMANDCODE * A2 :PARAMETERADRESS * OUTPUT: COMMAND --> ACRTC FIFO * PARAMETER--> ACRTC FIFO * INTERNAL: D1 * * RLARC: MOVEM.L D0-D1/A2,-(A7) BSR SETMOD ;INSERT COMMANDEXTENSION BSR WRCOM ;WRITE COMMAND MOVE.W #4, * A2 PARAMETERADDRESS * OUTPUT: COMMAND --> ACRTC FIFO * PARAMETER --> ACRTC FIFO * INTERNAL: * FILL: MOVEM.L D0-D3/A0-A3,-(A7) LEA INDEXT(PC),A3 ;GET ADRESSREGISTER ADDRESS MOVEA.L (A3),A0 LEA COMFILL(PC),A2 ;LOAD PARAMETERLIST FOR CD1 ;NUMBER OF PARAMETERS BSR WRPARA ;WRITE PARAMETER MOVEM.L (A7)+,D0-D1/A2 RTS PAGE * ************************************************************************** * SUBROUTINE: ELLARC * FUNKTION: DRAW CLOCKWISE OR COUNTERCLOCKWISE AN ABSOLUTE   OMPLEX * XBUG ;FIGURE PAINTING BSR SETMOD ;INSERT COMMANDEXTENSION MOVE.W #$FFE0,D1 ;LOAD MASK AND.W D1,D0 ;MASK COMMANDCODE BSR CLFIFO ;CLEAR FIFO MOVE.W D0,D3 ;STORE PAINT COMMAND WORD * XBUG FILSTA MOVE.W D3,D0 BSR WRCOM ;WRITEOR RELATIVE * ELLIPSE ARC * COMMAND- * EXTENSION: AERA - COL - OPM * * INPUT: D0 :COMMANDCODE * A2 :PARAMETERADRESS * OUTPUT: COMMAND --> ACRTC FIFO * PARAMETER--> ACRTC FIFO * INTERNAL: D1 * * ELLARC: MOVEM.L D0-D1/A2,-(A7) BSR  COMMAND CLR.L D2 ;CLEAR D3 RAGAIN MOVE.W (A0),D2 ;READ STATUSREGISTER BTST #2,D2 ;READ FIFO READY BNE.S REFIFO ;YES --> READ FIFO BTST #5,D2 ;COMMAND END BEQ RAGAIN ;NO --> READ AGAIN BRA.S FILEND ;COMMAND END REFIFO BSR RFIPA SETMOD ;INSERT COMMANDEXTENSION BSR WRCOM ;WRITE COMMAND MOVE.W #6,D1 ;NUMBER OF PARAMETERS BSR WRPARA ;WRITE PARAMETER MOVEM.L (A7)+,D0-D1/A2 RTS * * ************************************************************************** * SUBROUTINE  R ;READ FIFO MOVE.W 4(A2),D1 ;LOAD PP --> D1 MOVE.W #PRC05,D0 ;LOAD PATTERN RAM CONTR.REG (PR05) BSR WRDPAR ;SPECIFY THE PATTERN POINT MOVE.W #AMOVE,D0 ;LOAD ABSOLUTE MOVE BSR CPMOVE ;SPECIFY THE START POIN: FILREC * FUNKTION: FILLS AN ABSOLUTE OR RELATIVE RECTANGULAR AREA SPECIFIED * WITH CP AND COMMAND PARAMETER WITH THE FIGURE PATTERN STORED * IN THE PATTERN RAM * COMMAND- * EXTENSION: AERA - COL - OPM * * INPUT: D0 :CO T BRA FILSTA ;FILL THE AERA FILEND MOVEM.L (A7)+,D0-D3/A0-A3 RTS PAGE * ************************************************************************** * SUBROUTINE: SETDOT * FUNKTION: MARKS A DOT ON THE COORDINATE WHERE THE CP POINTS * COMMAND- MMANDCODE * A2 :PARAMETERADRESS * OUTPUT: COMMAND --> ACRTC FIFO * PARAMETER --> ACRTC FIFO * INTERNAL: D1 * * FILREC: MOVEM.L D0-D1/A2,-(A7) BSR SETMOD ;INSERT COMMANDEXTENSION BSR WRCOM ;WRITE COMMAND MOVE.W #2,D1 ;NUMBER OF PAR * EXTENSION: AERA - COL - OPM * * INPUT: D0 :COMMAND CODE * * OUTPUT: * * INTERNAL: * * SETDOT: MOVEM D0,-(A7) BSR SETMOD ;INSERT COMMAND EXTENSION BSR WRCOM ;WRITE COMMAND MOVEM (A7)+,D0 RTS * * ********************AMETER BSR WRPARA ;WRITE PARAMETER MOVEM.L (A7)+,D0-D1/A2 RTS PAGE * ************************************************************************** * SUBROUTINE: FILL * FUNKTION: FILLS A CLOSED AEREA SURROUNDED BY EDGE COLOR DEFINED IN * THE PARA****************************************************** * SUBROUTINE: PATDRA * FUNKTION: DRAW PATTERN ONTO THE RECTANGULAR AERA SPECIFIED BY THE * CURRENT POINTER AND BY THE PATTERN SIZE * COMMAND- * EXTENSION: AERA - COL - OPM * SL :SLANT       (BIT 11 ) * SD :SOURCE DIRECTION (BIT 10 - 8) * * INPUT: D0 :COMMAND CODE * A2 :PARAMETERADDRESS * OUTPUT: * * INTERNAL: * * PATDRA: MOVEM.L D0-D1/A2/A3,-(A7) MOVEA.L A2,A3 ;STORE PARAMETERADDRESS BSR SETMOD ;INSERT COMM* BUFFER ADDRESS * INPUT: D0 :SCREEN NUMBER * D1 :X - COORDINATE * D2 :Y - COORDINATE * OUTPUT: * * INTERNAL: * ************************************************************************** OPOINT: MOVEM.L D0-D7/A2/A3,-(A7) AND EXTENSION LEA SLSD(PC),A3 ;LOAD SL AND SD EXTENSION ADDRESS MOVE.W (A3),D1 OR.W D1,D0 ;INSERT COMMAND EXTENSION EXCEPT * ;AERA - COL - OPM MODE BSR WRCOM ;WRITE COMMAND MOVE.W #1,D1 ;NUMBER OF PARAMETER BSR WRPARA ;WRIMOVE.W D1,D6 MOVE.W D2,D7 LEA BILDPA(PC),A2 ;LOAD DISPLAY PARAMETER CMPI.W #0,D0 BEQ.S OP0 CMPI.W #1,D0 BEQ.S OP1 CMPI.W #2,D0 BEQ.S OP2 CMPI.W #3,D0 BEQ.S OP3 NOP OP0: ADDA.L #12,A2 MOVE.L (A2)+,D3 ;WORDS PER LINE (FRAME) MOVE.L (A2)+,DTE PARAMETER MOVEM.L (A7)+,D0-D1/A2/A3 RTS PAGE * ************************************************************************** * SUBROUTINE: GRACPY * FUNKTION: COPIES A RECTANGULAR AREA SPECIFIED BY THE ABSOLUTE OR * RELATIVE COORDINATES TO THE ADD4 ;NUMBER OF RASTERS (FRAME) MOVE.L (A2),D5 ;DISPLAY START ADDRESS * BSR RSCSTA * MOVE.L D1,D5 BRA.S OPC OP1: MOVE.L (A2)+,D3 ;WORDS PER LINE (FRAME) MOVE.L (A2)+,D4 ;NUMBER OF RASTERS (FRAME) MOVE.L (A2),D5 ;DISPLAY START ADDRESS * BSR RSCRESS SPECIFIED BY THE * CURRENT POINTER (CP) * COMMAND- * EXTENSION: AERA - COL - OPM * S :SOURCE SCAN DIRECTION (BIT 11) * DSD :DESTINATION SCAN DIRECTION (BIT 10-8) * INPUT: D0 :COMMAND CODE * A2 :PARAMETERADDRESS * OUTPUT: STA * MOVE.L D1,D5 BRA.S OPC OP2: ADDA.L #24,A2 MOVE.L (A2)+,D3 ;WORDS PER LINE (FRAME) MOVE.L (A2)+,D4 ;NUMBER OF RASTERS (FRAME) MOVE.L (A2),D5 ;DISPLAY START ADDRESS * BSR RSCSTA * MOVE.L D1,D5 BRA.S OPC OP3: ADDA.L #36,A2 MOVE.L (A2)+,D3  * * INTERNAL: * * GRACPY: MOVEM.L D0-D1/A2/A3,-(A7) MOVEA.L A2,A3 ;STORE PARAMETERADDRESS BSR SETMOD ;INSERT COMMANDEXTENSION MOVE.W #$FFC7,D1 ;LOAD MASK AND.W D1,D0 ;MASK COMMAND CODE LEA SDSD(PC),A3 ;LOAD EXTENSION ADDRESS MOVE.W (A ;WORDS PER LINE (FRAME) MOVE.L (A2)+,D4 ;NUMBER OF RASTERS (FRAME) MOVE.L (A2),D5 ;DISPLAY START ADDRESS * BSR RSCSTA * MOVE.L D1,D5 OPC: MOVE.W D6,D1 * BSR RGBMOD ;GET GRAPHIC BIT MODE MOVE.W D7,D2 * DIVU #4,D3 ;IN WORD PER LINE 3),D1 ; OR.W D1,D0 ;INSERT EXTENSION S AND DSD BSR WRCOM ;WRITE COMMAND MOVE.W #4,D1 ;NUMBER OF PARAMETER BSR WRPARA ;WRITE PARAMETER MOVEM.L (A7)+,D0-D1/A2/A3 RTS PAGE * *********************************************************MULU D2,D3 DIVU #4,D1 ;X COORDINATE IN WORDS ANDI.L #$0000FFFF,D1 ;REST AUSBLENDEN ADD.L D1,D3 ;PHYSICAL ADDRESS MOVE.L D3,D6 DIVU #4,D6 ; LSR.L #8,D6 LSR.L #8,D6 ;PIXEL IN WORD (DPD) ANDI.L #$C,D6 ;MASKED ADD.L D5,D3******************** * * * ASSEMBLER INTERFACE DRIVER ACRTC * *  ;PLUS DISPLAY START OFFSET LSL.L #4,D3 ; OR.L D6,D3 ;INSERT DPD ANDI.L #$00FFFFFF,D3 MOVE.L #30,D7 LSL.L D7,D0 OR.L D0,D3 ;INSERT SCREEN NUMBER LEA ORGRWD(PC),A3 LEA ORGPAR(PC),A2 ;NULL POINT MOVE.W D3,2(A3) MOVE.W D3,2(A2)  * ***************************************************************************** ************************************************************************** * SUBROUTINE: OPOINT * FUNKTION: ASSOCIATES A LOGICAL X - Y SCREEN WITH PHYSICAL FRAME  ;STORE DPL SWAP D3 ; MOVE.W D3,(A3) MOVE.W D3,(A2) ;STORE DPH MOVE.W #ORIG,D0 BSR CPMOVE ;SET ORIGN MOVEM.L (A7)+,D0-D7/A2/A3 RTS ORGPAR DC.W $0000 ;DPH DC.W $0000 ;DPL ORGRWD DC.W $0000 ;DGH DC.W $0000 ,DPL BILDPA DC.L 256      ! ;PIXEL PER LINE BASE SCREEN DC.L 1024 ;NUMBER OF RASTER DC.L $28000 ;DISPLAY START ADDRESS DC.L 256 ;UPPER UPPER SCREEN DC.L 200 DC.L $14000 DC.L 256 ;PIXEL PER LINE LOWER SCREEN DC.L 1024 ;NUMBER OF RASTER DC)' BSR CPMOVE RTS ************************************************************************** * SUBROUTINE: REMOVE * FUNKTION: RELATIVE MOVE * * INPUT: A2 :PARAMETER ADDRESS * * OUTPUT: * * INTERNAL: * *******************************" .L $6D540 ;DISPLAY START ADDRESS DC.L 40 ;WINDOW WINDOW SCREEN DC.L 256 DC.L $8D540 ************************************************************************* * SAVE ORIGN EVEN ORIGSAV DC.W $0000 DC.W $0000 SAVORG: MOVEM.L A4/A*(******************************************* REMOVE: MOVE.W #RMOVE,D0 BSR CPMOVE RTS ************************************************************************** * SUBROUTINE: ABLINE * FUNKTION: DRAW AN ABSOLUT LINE * * INPUT: A2 :PARA#!3,-(A7) LEA ORGPAR(PC),A4 LEA ORIGSAV(PC),A3 MOVE.W (A4)+,(A3)+ MOVE.W (A4),(A3) MOVEM.L (A7)+,A4/A3 RTS ************************************************************************** * CLEAR SCREEN DSCLPA DC.W $0,$140,$500 DSCLEAR MOVEM.L D0-D2+)METER ADDRESS * * OUTPUT: * * INTERNAL: * ************************************************************************** ABLINE: MOVE.W #ALINE,D0 BSR LINREC RTS ************************************************************************** * $"/A2,-(A7) MOVE.L #1,D0 MOVE.L #-640,D1 MOVE.L #0,D2 BSR OPOINT LEA ORGRWD(PC),A2 MOVE.W #DRWPH,D0 MOVE.W (A2)+,D1 BSR WRDPAR MOVE.W #DRWPL,D0 MOVE.W (A2),D1 BSR WRDPAR MOVE.W #CLR,D0 BSR WRCOM MOVE.W #3,D1 LEA DSCLPA(PC),A2 BSR WRPARA ,*SUBROUTINE: RELINE * FUNKTION: DRAW A RELATIVE LINE * * INPUT: A2 :PARAMETER ADDRESS * * OUTPUT: * * INTERNAL: * ************************************************************************** RELINE: MOVE.W #RLINE,D0 BSR LINREC RTS %# LEA ORIGSAV(PC),A2 MOVE.W #ORIG,D0 BSR CPMOVE MOVEM.L (A7)+,D0-D2/A2 RTS TCLMEM: DC.W $0,255,-4095 DSCLMEM:MOVEM.L D0-D2/A2,-(A7) MOVE.W #DRWPH,D0 MOVE.W #0,D1 BSR WRDPAR MOVE.W #DRWPL,D0 MOVE.W #0,D1 BSR WRDPAR MOVE.W #CLR,D0 BSR WRCOM-+ ************************************************************************** * SUBROUTINE: ABRECT * FUNKTION: DRAW AN ABSOLUT RECTANGLE * * INPUT: A2 :PARAMETER ADDRESS * * OUTPUT: * * INTERNAL: * ***********************************&$ MOVE.W #3,D1 LEA TCLMEM(PC),A2 BSR WRPARA MOVEM.L (A7)+,D0-D2/A2 RTS DSCL1B: DC.W -640,-640 DSCL1: MOVEM.L D0-A6,-(A7) LEA DSCL1B(PC),A2 BSR ABMOVE MOVE.W #$10,D0 ;SELECT DRAWING POINTRE REGISTER BSR REDPAR MOVE.W D1,D2 ;STORE HIGHER AD.,*************************************** ABRECT: MOVE.W #ARCT,D0 BSR LINREC RTS ************************************************************************** * SUBROUTINE: RERECT * FUNKTION: DRAW A RELATIVE RECTANGLE * * INPUT: A2 :PARA'%DRESS MOVE.W #$11,D0 ;LOWEER ADDRESS BSR REDPAR ANDI.W #$FFF0,D1 MOVE.W #$D,D0 ;SELECT READ/WRITE POINTER REGISTER BSR WRDPAR MOVE.W #$C,D0 MOVE.W D2,D1 BSR WRDPAR MOVEM.L (A7)+,D0-A6 RTS **************************************************/-METER ADDRESS * * OUTPUT: * * INTERNAL: * ************************************************************************** RERECT: MOVE.W #RRCT,D0 BSR LINREC RTS ************************************************************************** * S(&************************ * SUBROUTINE: ABMOVE * FUNKTION: ABSOLUT MOVE * * INPUT: A2 :PARAMETER ADDRESS * * OUTPUT: * * INTERNAL: * ************************************************************************** ABMOVE: MOVE.W #AMOVE,D0 0.UBROUTINE: ABPOLL * FUNKTION: ABSOLUT POLYLINE * * INPUT: A2 :PARAMETER ADDRESS * * OUTPUT: * * INTERNAL: * ************************************************************************** ABPOLL: MOVE.W #APLL,D0 BSR POLYLG RTS      1/ ************************************************************************** * SUBROUTINE: REPOLL * FUNKTION: RELATIVE POLYLINE * * INPUT: A2 :PARAMETER ADDRESS * * OUTPUT: * * INTERNAL: * *********************************************97RA.S ELL2 ELL1 MOVE.W #ELPS0,D0 ELL2 BSR DELLIP RTS ************************************************************************** * SUBROUTINE: ABCARC * FUNKTION: DRAW AN ABSOLUTE CIRCLE ARC CLOCKWISE OR COUNTERCLOCKWISE * * INPUT: A2 :PARAME20***************************** REPOLL: MOVE.W #RPLL,D0 BSR POLYLG RTS ************************************************************************** * SUBROUTINE: ABPOLG * FUNKTION: ABSOLUT POLYGON * * INPUT: A2 :PARAMETER ADDRESS * * :8TER ADDRESS * D1 :DRAWING DIRECTION * :D1 = 1 CLOCKWISE * :D1 = 0 COUNTERCLOCKWISE * OUTPUT: * * INTERNAL: * ************************************************************************** ABCARC: CMP #1,D1 BNE.S ACARC1 M31 OUTPUT: * * INTERNAL: * ************************************************************************** ABPOLG: MOVE.W #APLG,D0 BSR POLYLG RTS ************************************************************************** * SUBROUTINE: REPOLG *;9OVE.W #AARC1,D0 BRA.S ACARC2 ACARC1 MOVE.W #AARC0,D0 ACARC2 BSR RLARC RTS ************************************************************************** * SUBROUTINE: RECARC * FUNKTION: DRAW A RELATIVE CIRCLE ARC CLOCKWISE OR COUNTERCLOCKWISE * * 42 FUNKTION: RELATIVE POLYGON * * INPUT: A2 :PARAMETER ADDRESS * * OUTPUT: * * INTERNAL: * ************************************************************************** REPOLG: MOVE.W #RPLG,D0 BSR POLYLG RTS **********************<: INPUT: A2 :PARAMETER ADDRESS * D1 :DRAWING DIRECTION * :D1 = 1 CLOCKWISE * :D1 = 0 COUNTERCLOCKWISE * OUTPUT: * * INTERNAL: * ************************************************************************** RECARC: CMP #1,D153**************************************************** * SUBROUTINE: CIRCLE * FUNKTION: DRAW A CIRCLE * * INPUT: A2 :PARAMETER ADDRESS * D1 :DRAWING DIRECTION * :D1 = 1 CLOCKWISE * :D1 = 0 COUNTERC=; BNE.S RCARC1 MOVE.W #RARC1,D0 BRA.S RCARC2 RCARC1 MOVE.W #RARC0,D0 RCARC2 BSR RLARC RTS ************************************************************************** * SUBROUTINE: ABEARC * FUNKTION: DRAW AN ABSOLUTE ELLIPS ARC CLOCKWISE OR 64LOCKWISE * OUTPUT: * * INTERNAL: * ************************************************************************** CIRCLE: CMP #1,D1 ;COMPARE DRAWING DIRECTION BNE.S CIR1 MOVE.W #CRCL1,D0 ;CLOCKWISE BRA.S CIR2 CIR1 MOVE.W #CRCL0,D0 ;>LLIPS ARC CLOCKWISE OR COUNTERCLOCKWISE * * INPUT: A2 :PARAMETER ADDRESS * D1 :DRAWING DIRECTION * :D1 = 1 CLOCKWISE * :D1 = 0 COUNTERCLOCKWISE * OUTPUT: * * INTERNAL: * *****************************************************     A?********************* REEARC: CMP #1,D1 BNE.S RECR1 MOVE.W #REARC1,D0 BRA.S RECR2 RECR1 MOVE.W #REARC0,D0 RECR2 BSR RLARC RTS ************************************************************************** * SUBROUTINE: ABFRCT * FUNKTIOIG**************************************** * SUBROUTINE: ABGCPY * FUNKTION: ABSOLUT GRAPHIC COPY * * INPUT: A2 :PARAMETER ADDRESS * * OUTPUT: * * INTERNAL: * *************************************************************************B@N: ABSOLUT FILLED RECTANGLE * * INPUT: A2 :PARAMETER ADDRESS * * OUTPUT: * * INTERNAL: * ************************************************************************** ABFRCT: MOVE.W #AFRCT,D0 BSR FILREC RTS ***********************JH* ABGCPY: MOVE.W #AGCPY,D0 BSR GRACPY RTS ************************************************************************** * SUBROUTINE: REGCPY * FUNKTION: RELATIVE GRAPHIC COPY * * INPUT: A2 :PARAMETER ADDRESS * * OUTPUT: * * CA**************************************************** * SUBROUTINE: REFRCT * FUNKTION: RELATIVE FILLED RECTANGLE * * INPUT: A2 :PARAMETER ADDRESS * * OUTPUT: * * INTERNAL: * *************************************************************KI INTERNAL: * ************************************************************************** REGCPY: MOVE.W #RGCPY,D0 BSR GRACPY RTS **************************************************************************** ****************************************DB************* REFRCT: MOVE.W #RFRCT,D0 BSR FILREC RTS ************************************************************************** * SUBROUTINE: PAINT * FUNKTION: FILLED A CLOSED AERA * * INPUT: D1 :DLJ************************************ * WAIT FOR VERTICAL RETRACE PERIOD * IN D3 BLANK RASTER NUMBER BLNKTST:MOVEM.L D0-D1,-(A7) MOVE.W #RCR,D0 BLNK1 BSR RECONR ; RASTER-COUNT-REGISTER LESEN CMP.W D3,D1 BLS BLNK1 ;YES BLNK2 MOVEM.L (A7)+,D0-D1 EC1 = 0 EDGECOLOR MODE * :D1 = 1 * OUTPUT: * * INTERNAL: * ************************************************************************** PAINT: CMP #1,D1 BNE.S PAIN1 MOVE.W #PAINT0,D0 BRA.S PAIN2 PAIN1 MOVE.W #PAINMKRTS **************************************************************************** **************************************************************************** * WAIT FOR DISPLAY PERIOD * IN D3 RASTER NUMBER DISPTST:MOVEM.L D0-D1,-(A7) MOVE.W #RCR,DFDT1,D0 PAIN2 BSR FILL RTS ************************************************************************** * SUBROUTINE: DRADOT * FUNKTION: DRAW A DOT * * INPUT: * * OUTPUT: * * INTERNAL: * *********************************NL0 DISP1 BSR RECONR ; RASTER-COUNT-REGISTER LESEN CMP.W D3,D1 BLS DISP1 ;YES * BRA.S BLNK1 ;NO DISP2 MOVEM.L (A7)+,D0-D1 RTS **************************************************************************** * SUBROUTINE COLTAB * FUNKTION LOAD THE CGE***************************************** DRADOT: MOVE.W #DOT,D0 BSR SETDOT RTS ************************************************************************** * SUBROUTINE: PTTERN * FUNKTION: DRAW GRAPHIC PATTERN WHICH STORED IN PATTERN RAM *OMOLORTABLES RED GREEN BLUE * IN -- * OUT -- * INTERNAL A2 A3 A4 D0 COLTAB: MOVEM.L A2-A4/D0,-(A7) LEA INDEXT(PC),A4 MOVEA.L 8(A4),A2 * MOVE.W #2,D1 * ADDA.L #$80,A2 BU10 LEA ROT(PC),A3 MOVE.L #15,D0 BU1 MOVE.W (A3)+,(A2)+ DBRA D0,BHF * INPUT: A2 :PARAMETER ADDRESS * :(SZ: SZY,SZX) * OUTPUT: * * INTERNAL: * ************************************************************************** PTTERN: MOVE.W #PTN,D0 BSR PATDRA RTS **********************************PNU1 ADDA.L #$60,A2 * DBRA D1,BU10 * MOVEA.L 12(A4),A2 * MOVE.W #2,D1 * ADDA.L #$80,A2 BU20 LEA GRUEN(PC),A3 MOVE.L #15,D0 BU2 MOVE.W (A3)+,(A2)+ DBRA D0,BU2 ADDA.L #$60,A2 * DBRA D1,BU20 * MOVEA.L 16(A4),A2 * MOVE.W #2,D1 * ADDA.L #$80,A2      QOBU30 LEA BLAU(PC),A3 MOVE.L #15,D0 BU3 MOVE.W (A3)+,(A2)+ DBRA D0,BU3 ADDA.L #$60,A2 * DBRA D1,BU30 MOVEM.L (A7)+,A2-A4/D0 RTS BLAU DC.W 0,0,0,255,0,255,255,255,0,0,127,0,127,127,127,0 EVEN ROT DC.W 0,255,0,0,255,255,0,255,127,0,0,127,127,0,127YWaBEraBEaB>El2<aBEhaBHEd2<aBE`aB4E\2<aBEXaBHEZ2<aBEVaB E2aAEJaAEF2<aBxEBaAE>2<aBdE:aAE62<aBPE2aAE.2<aBq X<<EJa2<a2<aaBETaCEa2|NqNqa.EPa2&Ea2da EEDa8E@a8EJa8EFa8Eda8E`a8E~a8Eza8Ejha1aEa1Ea1alEa1rEa1afEa1^Ea1aDEta1JELa1a>E`a16E8a1taELa1"Ea1`aE8a1Era1Laxgem Wg Qg gI N g`BAa*?aEa02<aEta0aEcaa8xEa8a\8<33aD33"a0333a33Da33Uxgem Wg Qg33`jFF8jF2PPZtP8PFkila0a2AaEZa0?2<aELa0naEDa0ba2AaE2a0L?2<anE$a0:abEa0.aVa2A AfA`*/*<Sf*NuH@I"SfL2<a)Ba)bNuI(@Nu Af0<ɀ`0<Ȁa-4Nu/a)a)4"NuE.0<2<a+2<dbF2tFmFm8=2VVZwG8GL2FpFp842\\Z{?8?Q2FtFt8,2lj0<a*2<0<a*2<0<a*0<a)n0<a)E a0Nua.2<a(a(Ea/LEa/E2<a/Ea/vEa/(Ea/fE2<a/Ea/REa/Ea/BEa.E2<a/E2<a/Ea.Ea/Ea.Ea/Ea.Ea.Ea.ec^^Z989S2F|F|82ffZ~8`2~~FF8~2nnZ{8mkE2<a/>E2<a/2K 2a'a'Ea.vE2<a/E 2<a/Ea.tE2<a.E2<a.Ea.T2a'a'Ea.$Ea.b2a'pa'Ea. E2<a.E2<a.Ea.E2<a.E2<a.xEa-2a'a'>Ea-Ea-E2<fdk2{xFF8x2xxZx8x~FF8~k2Z{n8n2{F|F|8`2$$nla.JEa-Ea-2a&a'Ea-E2<a-Ea-xE2<a-E|a-dEx2<a-Et2<a-2a&a&Efa-0Eba-n2a&|a&Ea-Ea-T2a&ba&a&E~a,Eza-6Ea,Ea-&Ea,2<a-ENa,Eza,2<a-2a& a&,ageZ~f8f2~FtFt8S299Z^8^.2FpFp8Q2??Z{\8\42Fom&LEda,E`a,Eb2<a-4E^a,EZ2<a- EVa,ER2<a- ENa,|EJ2<a,EFa,T2<a->2a%a%a%E,a,,E(a,BE$2<a,E a,.E2<a,Ea,E2<a,Ea,E 2<a,Ea+2<a,2a% a%@a%`Ea+EahfmFm8L2GGZwV8V=2,,J@,f2<a,ba,Nu33a2za E a2Ea3 aEa2Ea3 aEa2ELa2aEa2E8a2aNqNqEapn+Ea+2<a,2a$a%a%2Ea+Ea+Ea+2<a,l`$1$   $    $D     qo$$$   < #n AA 2 >Jc (ywanC@ C#fxgem WgB g QgB Bfh4<``G&8 Df6`L6a"`,`nzf$"JrH0E45A5C2aa2<a"2<0<QQG8 Df6BAaal2<Ea"L Nua!0<2<4<a EBa<<><:<rp< +<& ~0~x2 7#<#F<#<2* 2zx2a,aLG$Ka!E4<2<a"RQa*aaaxgem Wg g Qg^`a axgem Wg g Qg8`aaxgem Wg g Qg`Ea0<2<4<a>a atxgem Wg g Qg`abxgem Wg g sqs( ~P2<<a Zaa:< 8<EI(a(\2a!a!2a!Ea(vEa(F2<a)0Ea(6DEI0RQxgem Wg Qg `al @Qg a'|`$vn@@ @@ a'Ra)(2<{y Qg`axgem Wg g Qg`a"` H0<2<4<aEaJ0<a$2<a2<6<2aa8<G$Ka T>Ea fa2Ea ZI`4<TlQQQLNuH0<2<tra!a!4Ea'Ea'E2<a(@E:a'EDa'E@a'EF2<a(EBa'EH2<a(EDa'xE@2<a'EL2228 62(@2xt,,rHn|b V8HpP} gjVo  f-AAa ` f=A` f*p  gp  g p  f ".` f YA=A``V(Iaf`rEMS NLCIOPM6800M6801M6802M6888NOOLOLLNOL?O?OF||NOALALPDO NOSS NOCRCR WARNOWAR NOBxv >9,,9>9,,9,9>9,a"Ea#:a$4<0<2<6<,aA AfB6<,2< 0<,a@ 6 @ fB0<6< 2<aAC CXfB~UBU ARARCENOCECNOCFRFRMNOMMENOMENOMNOMPNualf"L 'f IJfB(`| $fRLPaa JfP`Ra`BF`<".&g A(ahaafB@J&g n& `aLNu0<TGBA6AQ0<T6AQBA0<U6Q     NuXNuB. JkWfNu0.HA".!Nuaaaaf AbRA=AIA-p`Na`afFANuaJfPC:r'p gc@SAnBNu|`|ataaf>af>JfVUIga mf* _IpS@nTI`aP`Jf aa`2a ha G$KaE4<2<aTRQLNu RaBa8fHgF]DE`HCEGM(I*J><0a 8Qa><AQBM&JE| |(:<<<(6<xgem WgL gv Qg<`jE<0*UIP`)f`aOxa"LVo( AbJRDafBaf6ah0!fp g fJ.fJg azM`a`a`a` ,gSMXONuB <$%'gfPNuP`B..gT. n aJf 'gt $gBaazab fp0 lpJfHHJ@g.5|E"*4* aa0<2<4<a `.5|EV"*4* aa0<2<4<aa*|08"4.,aE0*J@g^0 @"f4 `Rar2<a 2*a a 2<aRj0* @g @ft5|`lj`dELa gaܢpJ0<TG2<6AQBA0<T6Q0<U6AQNufB<'` ( * ,.RLHnea׌t`gP 'ff4RLJ.g fp  fRLDk dR`ULR`Jgn&D(E-F`&a0'Nu"WX/pfS@fJ _NuaapfLa܂,HkμfaJ.g aN2*a la 2<ajR0 @@f4j2* Ag Af5|`jNq0+8)".4. ҄-Aa Eg0C Cff6<0+8)". 4.-A a Eg.0+8)".4.҄-Aadf |P:<QQf& m$g0 F na0SnJg܆Sg܆ݮNudaI HA2HApS@n`axaf g;prҀSnӮaBNu 0 ;pNaaJk&apkbXME@@MSfBraa`:Tk"f a2<<<P6<*|xgem Wg gv Qg`jE0*J@g.5|EF"*4* aa0<2<4<a `.5|E"*4* aaT0<2<4<a a`08"4.҄,axE0*J@g^0 @"f4 `Ra<2<a2*aa2<NNuF?TkSGf0HS@g]ED`UGfQF0FN`Hgaոi Nua #0<TGBA6Q0<T6AQ0<U6AQNuBa,E Ef a EJEfxgem Wg Qg`Nu6<\aE&j\E,a,E&j \ELaE&j\Ena &< 5QNu8< 6QNuHaaj0* @g @fp5|`hj``Ea2*a6aV2<a4R0 @@f4j2* Ag Af5|`jNq0+8)".4. -Aa`C Cfb6<0+8)". 4.҄-A a\`0+8)".4.-Aaa ab0<2<24<aaapLNuHabaa ra00<2<4<Xaaa>LNuH`"$<a\4a"LNuH`"$<a@a"LNuH0<QQ<<Pa`NqLNuHE0<a480<a6< Fg Fg& Fg: FgH`r C,g>C 4` ClgC 420<at`DLD D7gD4`LD D gD4LBD20<a6><Q<aL?0LM D&v(v*v2I6384:5A79;4J63 84 :5 2A79;2A79;460<a|AJJKBCCaNLNuH<L<aL?0LM><QLNuHB0<a&*0<a82<<dxgem Wg\ QgV0<҄a><QQ<<Ƞxgem Wg( Qg"0<a><QQ<<`0<"aLNuH0<aA<<d0<a(:6xgem Wgn Qgh><QB Bgaf` BB &v(v*v2I6384:5A79;4J63 84 :5 2A79;2A79;460<aAJBCCaLNuga FgnXANuN`HA0<a 1B0<a !A1B 0<a !A 1B0<a !A1BLNuH:<aZQ6<Ƞxgem Wg2 Qg,><QB Bga*` 4<aQ6<`"40<aLNuH6<Ra 0<a6<2a LNuH0<a aLNuH0<a a|LNuH0<aA40<atAA20<aL0<a\  a8     LNuH0<a>A40<a0AA20<a0<a  aLNuH0<aZ&0<a80<a:0<a֒Eaօ"0<a0<a  aLNuH0<a&0<a80<a:0<axEaZĖ"0<a^0<a\  LNuH a8a2<anLNuH aa2AaNLNuH aa2<a4LNuH aa2<aLNuH aa2<aLNuH aa2<aLNuH aal2<aLNuHG SEBar2<` Af><`NqHFn4LNuH @f 0<6<`6 @f 0<6<`& @f 0<6<` @f 0<6<`2<`JBHABaHA0aLNuH @f 0<4<`6 @f 0<4<`& @f 0<4<` @f 0<4<`2<`$2*0<a~0<a`LNuHaLNuH0&JaG2Aa2<aDL NuH0&Ja2E @g @g @g @g&Nq &(*`"&(*`&(*` $&(*24‚ց, օ鋆BaR&(0aHDHCA4"LyNuE Rg 02a`NuX ?: ' ,@΀@(@ 8E Rg 02aP`Nu l.<暴G&E7C5CHC640<aL Nu@@(@HIG66LNu@H <"<$<aE0< 2a0< 2a0|x0aNLNuH0<aTAa4Aa,LNuH8G4B6G(K66`6Q$LaAa LNuN4'A 7'@H0a@Gl4BE4a`2<aEaL NuH E0<2<ahLNuH a(2<aHHO@@~x!aAAA??AAAaxP $$ @ Hd&B@ !G,IR&~088>|x0001F985323C0000561001F48561001F68F8F 5323C00005610026DE545FA01E05610025DA4244C5610025DE5323C000A561001F26F61 5     vaaBgE% ZFFg If G$N @QUg``ʠ *>aNuaENaBaaE :` g g$2<ACx2NuC`En2)|I00<A4NuC>EP2)|0|A4NuC&EB@"Ё"ЁC $:"&: g gC"NuCEJ"0)&: g g |C2NuCEGB@БВГaaa0Nua8EaaaNuaa8NuaE 6apana"NuaE $aZaXa NuvaLa NuaNua WRONG PARAMETERE |"|EC"NuC C谼gg`2)`2C0|A2NuC2C0|A2NuC0C2|@2NuC "Cx g g g`02` 2)`2)CF0|A2NuC "C>g g`2`2)C0|A2Nu80 02E 02E p02E h02E `02E02E02E02 :h"$:&<(:" g gp`j`02HC2HC202HC2HC26<B22222ww22wwBd:<22BQNu INVALID GRAPHIC BIT MO>RN ACTIVE DISPLAY PERIOD (NSEC) < HORIZONTAL SYNCRON WIDTH (NSEC)  HORIZONTAL BACK PORCH (NSEC) HORIZONTAL FRONT PORCH (NSEC) HORIZDE !!! vxgem xgemNuv aa aa$a0a VERTICAL SYNCRON WIDTH (LINES): VERTICAL BACK PORNuC":pPNuC䠊":hPNuC":\PNuC(":PPNuCJ":vPNuCp":PNuC":"PNuC":HPNuCB":lPNuC~2:RNuC2:RNuCڠ2:ԠRNuC2:ƠRNuC2:RNuC2:RNuCΠ2:CH (LINES): ACTIVE DISPLAY LINES (LINES): . VERTICAL FRONT PORCH (LINES): VERTICAL BLANK LINES (LINES):  VERTICAL SYNCRON VSR R86 : HEX $ VERTICAL DISPLAY VDR R88 ڠRNuC2:̠RNuC" <B@C"NuC\ g g `f"<@`"< $<B@Cb &ƼCv"a:C"ԁļCh""<;¼C\"NuCNNuBCC6֑C4֑C2֑C4"NuC4&C(Ƽ :l g : HEX $ SPLIT SCREEN WIDTH SP1 R8A : HEX $m HORIZONT SYNCRON HSR R82 : HEX $ HORIZONT DISPLAY HDR R84 : HEX $ COMMAND CONTROL CCR R02 : HEX $X DISPLAY CONTROL DCR R06 : HEX $p OPERATION MODE gC "NuC$C"ļ2<ACx2JCx2|B2NuC$C"ļ2<ACH6|C2C@6|C2NuCx$C"ļ2<AC 2JC 2|B2NuC8$CR"ļ2<AC2C2|B2NuC&E$4* OMR R04 : HEX $ BAD COMMAND GRAPHIC BIT MODE IS NOT VALID --------------------------------------------------- QUIT HELP INIT 63484 ACRTC SHOW ACRTC PARAMETERS HORIZ. PARAMETER     S VERTICAL PARAMETERS --------------------------------------------------- * S C R E E N P A R A M E T E R S * --------------------------------------------------- --------------------------------------------------- QU  Y - RESOLUTION (LINES):  ****************************************************************************** *** *** *** MMMMM MMMMM IT HELP INIT 63484 ACRTC SHOW ACRTC PARAMETERS SCREEN PARAMETERS VERTICAL PARAMETERS --------------------------------------------------- * HORIZONTAL MONITOR PARAMETERS  OOOOOOOOOOOO NNN NNNNNNNN IIIIIIIIIIIIII *** *** MMM MMM MMM OOOO OOOO NNNNN NNN IIIIIIIIII *** *** MMM MMM MMM OOOO OOOO NNNN NNN III *** *** MMM MMM MMM OOOO  * --------------------------------------------------- --------------------------------------------------- QUIT HELP INIT 63484 ACRTC SHOW ACRTC PARAMETERS HORIZ. PARAMETERS SCR OOOO NNNN NNN III *** *** MMM MMM MMM OOOO OOOO NNNN NNN IIIIIIIIIII *** *** MMM MMM MMM OOOOOOOOOOOO NNNN NNN IIIIIIIIIIIIIII *** *** EEN PARAMETERS --------------------------------------------------- * VERTICAL MONITOR PARAMETERS * --------------------------------------------------- --------------------------------------------------- QUIT  *** *** Welcome to MONI *** *** MONI is a utility for interactive adaption of a given RGB-MONITOR *** *** to the SYS68K/AGC-1 Boardset. After entering th HELP INIT 63484 ACRTC SCREEN PARAMETERS HORIZ. PARAMETERS VERTICAL PARAMETERS --------------------------------------------------- * A C R T C INITIALISATION PARAMETERS * ------e needed screen *** *** resolution the program automatically calculates the resulting pa- *** *** rameters for the Command Control Register (CCR), the Display Con- *** *** trol Register (DCR) and the Timing Control RAM of the 63484 --------------------------------------------- --------------------------------------------------- QUIT HELP SCREEN PARAMETERS SHOW ACRTC PARAMETERS HORIZ. PARAMETERS VERTICAL PARAMEACRTC. *** *** *** *** The horizontal and vertical monitor parameters menu of the MONI- *** *** program shows the relevant timings for the used RGB-Monitor. These ***TERS --------------------------------------------------- * A C R T C PARAMETERS * --------------------------------------------------- BOARDBASEADDRESS HEX $ FIELD RATE ( *** timings can be changed to satisfy the timing restrictions of the *** *** monitor, which normally can be seen in the users manual. After all *** *** these adjustments are done the resulting parameters for the 63484 *** *** ACRTHZ): 2 RASTER SCAN MODE: NON-INTERLACED = 1 INTERLACED = 0 INTERL & SYNC = 2 _ GRAPHIC BIT MODE (BIT / PER PIXEL):  X - RESOLUTION (PIXEL): C can be seen in the ACRTC INITIALIZATION PARAMETER MENU. *** *** *** strike any key... *** To finely adjust the monitor the SYS68K/AGC-1 can be initialized *** **     * with the parameters calculated before by entering the command. *** *** The MONI-program only initializes the BASE-SCREEN, because only *** *** this screen is relevant for the display timing. *** *** """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" *** ******************************************************************************* *** *** hit any key to enter the UPUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffffffffffffff3f3333333333333333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"'""""""""""""""""program.... HELP COMMAND TABLE ------------------------------------------------------------------------------ SHOW SCREEN PARAMETERS SHOW HORIZONTAL DISPLAY PARAMETER""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""S FIELD RATE HORIZONTAL SYNC WIDTH RASTER SCAN MODE HORIZONTAL BACK PORCH GRAPHIC BIT MODE X -UPUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffffffffffffff3f33333333333333333333wswwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"w""""""""""""""""" RESOLUTION (PIXEL) SHOW VERTICAL DISPLAY PARAMETERS Y - RESOLUTION (LINES) VERTICAL SYNC WIDTH VERTICAL BACK PORCH SHOW ACRTC CONT"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ROLREGISTER INITIALIZE ACRTC SHOW ACRTC PARAMETERS HELP QUIT MONI SCREEN BOARDBASEADDRESS UPUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffffffffffffff36333333333333333333s3wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"""""""""""""""" SCFRRS"GM:XRRYRjHOHSHBHFVTVSVBCRSPGIHE QU(MS.BB8FFJ"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffffffffffffff6f3333333333333333333333w3wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww'w"""""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffffffffffffff33333333333333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"'""""""""     """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""wwwwwwwwwwwwwwww'w"""""""""""""""""""FwUvew"!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDdDffffffffffffffffffff333333333333333333w3wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww'w""UPUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffffffffffffff3633333333333333wswwwwwwwwwwwwww""""""""""""""""ww"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""wwwwwwwwwwwwwwwwwwwwwwww"'""""""""""""""""""xw fTwv"!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDdDffffffffffffffffff6f333333333333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwUPUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffffffffffffff33333333333333s3wwwwwwwwwwww"""""""""""""""""""gvgw""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""wwwwwwwwwwwwwwwwwwwwwwwwwwwwww"w"""""""""""""""""""xVg_VcvUw"!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDdDffffffffffffffffff3f3333333333333333wswwwwwwwwwwwwwwwwwwwwwwwwwwwwUPUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffffffffffff6f33333333333333wswwwwwwwwww"w""""""""""""""""""WxTww"!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww'w"""""""""""""""""""""wtgSL `Fww"!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffffffffffffff3633333333333333s3wwwwwwwwwwwwwwwwwwwwwwUPUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffffffffffff6f33333333     3333s3wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"'""""""""""""""""""""wf̙Vwvw"!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""DDfDffffffffffffffffff333333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"w"""""""""""""""""""""""egWP @_fTwfwwww!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffffffffffff3fUPUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD333333333333w3wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"w"""""""""""""""""""""gxV+Kvfww"!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""DDDDDDDDDDfDffffffffffffffff6f3333333333s3wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww""""""""""""""""""""""""xg̖; @eTvfwwwww""""""""""""""""""""""""""""""""""""""""""""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDdDffffffffffffUPUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDffffff36333333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww""""""""""""""""""""""gxf C@vewww"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""DDDDDDDDDDDDDDDDDDfdffffffffffffffff3f3333333333wswwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"'""""""""""""""""""""""""xsW˪UDfewwwwww"!""""""""""""""""""""""""""""""""""""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDdDffff"UPUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDffffffffffffff363333333333w3wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"'""""""""""""""""""""""Vw\ ffdwwww"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""DDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffffffffffff3f3333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"w"""""""""""""""""""""""""wVZ_0PTFeUwfwwwww""""""""""""""""""""""""""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD""""""UPUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDD     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffffffffffff3633333333w3wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww'w""""""""""""""""""""""""""wx4f¬᬴ZFcUUfewfwww"""""""""""""""""""""""""""UUUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffffffffffff3f33333333wswwwwwwwwwwwwwwwwwwwwwwwwwwww'w""""""""""""""""""""""""""""""wxfwdV\|P@DDFd`wf"""""""""""UPUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffffffffffff3333333333wswwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww""""""""""""""""""""""""""""gwfu  dfeOffffww!""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffffffffffff3633333333wwwwwwwwwwwwwwwwwwwwwwwwwwww'w"""""""""""""""""""""""""""""""wwfwdU˵ɐ U fcC[wew"""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDdDffffffffffffffffff3333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"'"""""""""""""""""""""""""""xgwTfVPˠ R[TfUffvfw"UPUUUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffffffffffff36333333s3wwwwwwwwwwwwwwwwwwwwwwwwwwww""""""""""""""""""""""""""""""""xwwfgdU YZevew""""""""""""""""""UPUUUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDdDffffffffffffffff6f33333333w3wwwwwwwwwwwwwwwwwwwwwwwwwwwwww"w""""""""""""""""""""""""""""wgwVZ i_𥹵FUUUUeUwwUPUUUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffffffffffff33333333w3wwwwwwwwwwwwwwwwwwwwwwwwww""""""""""""""""""""""""""""""""""wwwVfdEC\P\KZJfewwUPUUUU     UPUUUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffffffffff6f33333333wwwwwwwwwwwwwwwwwwwwwwww'w"""""""""""""""""""""""""""""""""""wxgwUVfEz_ 🦜 R\Ifdwww UPUUUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffffffffffff33333333wwwwww"'""""""""""""""""""""""""""""""""""""""""""""""""""""gxffDU ŵ l[ X YPCfTwfwwwUPUUUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffffffffff6f333333s3wwwwwwwwwwwwwwwwwwwwww"w""""""""""""""""""""""""""""""""""""wwfwEUf EU XL fdwvw  UPUUUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffffffffffff333333s3wwww"'"""""""""""""""""""""""""""""""""""""""""""""""""""""fwUfFE řʯ<UPUUUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffffffffff36333333w3wwww"'"xSVP] \ʠU[svdwwwxwwgwUeVffffffffffffffffVfUUdU" UP 90 PϪc;DfUDUUfeffffffwwwwwwww75UPUUUUUUUU?=86UUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffffffffff6f33333333wwww"'"Wx[ 9ʫʙʕ___TwfwwwVw fTwwwwwwwwwwwwwwwwwwffUf6DTf m [ ;YDfUTeUffffwfwwwwwww@>UPUUUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDdDffffffffffffffff33333333w3wwww"'"5g] ZU̹ʫf[wwwwwxwwVw3 UDffffffeUffffffffUfUUdPŚ 8  YDc;FfTDUUfeffffffwfwwwwwww     A?IG3fcDDDDUUfUffffffffwfwwwwwwwwwB@UPUUUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffffffffff6f33333333w3wwww"'"Fg5;ڕ; 83PfVwvwwwwwwwwwEf TnfUffUUCfUffffffUVEUPʕZKu Pe[ɰc;FfDDUUfUffffffffwwwwwwJHUPUUUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDdDffffffffffffffff3333333333wwwwww""x#W*ȹ P;PUVfeffffffffffffVf4U[Zs0+ F;DDUTUUDUdD6گĪP P\ CAwwKI PL3f3DFDDUTeUffffffffffwwwwwwwwwwwDBUPUUUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffffffffff3f33333333wswwww"'"Vg4 P\UJ3PeTwfwwwwwwwwwwwwfwEfP{̺l_̻ k ΠP YI3c3Dff`ffffffffVfUUUUUUUUUUUUDDDDdD6fw33ZϢU UYf3PNl uY E U ;UP ,oP\̺pTPU̙ɟ [ əU [ř P P_ [[DDTDUUUUfeffffffffffwfwwwwwwwwwwwwwwwwwf`ffffffffVfUUZW PͰ U\ کPL;fcDDDDUTUUeUffffffffffffwfwwwwwwwwwwwwwwwwwUUUUUUUUUUDEDDDDffrs ]ʦPUFEU3YZZZU Yʛ̠\Y [LZ  5\ Eʷ PYU|  LNf[\Z j kE{ T\P*U Ş\Pf`ffffffffVfUUUUUUUUUUUUDDDDdDffs3'\ Й SPYP 3;UY kP5V[`YU ϩ 9U3;UPϙPe _ 0P YPY̙ə _ʻ̫ [pZU̫P uet\ [ڕ @p;c3DfDDDDUUUUfUffffffffffvfwwwwwwwwwwwwwwwwwf`ffffPpU` wېz  Y^  fcDDDDUDUUeUffffffffffffwfwwwwwwwwwwwwwwwww!     f`ffffffffVfUUUUUUUUUUUUDDDDdDffs3'uUPP\ZZY̰ɻ `" @OP\UYP \j53pU%ZU ڷ UzY̙˻̫ U[UU̜_TUIZɬ P f`ffffffffVfUUUUUUUUUUEUDDDDfDff33'3XFT  2 _  ϚP  PPP_ \\L [ gU̻Z^Uɐ P @k P\U P l»Y f3DFDDTDUUeUffffffffffffvfwwwwwwwwwwwwwwwww UUUUUU Y_o ̰̚YP2D Y0Z ^\ L_@3ffDDDDUTUUfeffffffffffffvfwwwwwwwwwwwwwwwwwf`ffffffffVfUUUUUUUUUUUUDDDDdDff33']P\_w LKV ˠ]UUUZPP3; P Y YUUZ U̹ [e<UP UUUʠu  f`ffffffffVfUUUUUUUUUUEUDDDDfDff36w3"f 4U Ŭ P[_ l_ l_~\@3fcDfUDUUfUffffffffffffffwfwwwwwwwwwwwwwwwwwf`ffffffffUfUUUUUUUUUUDUDDDDfDff3fs3'wU [\ů Sř   P _Uff SU ̙P Y ̚ :ɜˬf`ffffffffUfUUUUUUUUUUDEDDDDfDffff33wwPrV[\𪠯śPŲ| `ɫZ ېYP\əUP [_fUU ZP;\\u P\P\QUYUUfZ fYKUͰ\륩 [j U [\ջ33ffFfDDUUUUffffffffffffffvfwwwwwwwwwwwwwwwwwF\ Tˌ _ɟUŻ_UfeU\[0\ ZV]_̊ ɢZUZU ϩ\,UDϿ jYۺ LŻ˻3;FfUDUUfUffffffffffffffvfwwwwwwwwwwwwwwwwwf`ffffffffUfUUUUUUUUUUDUDDDDfDff6fs3'wGPY YI_ | _  PȺYʻ PoP U[Pƛ_ ̕Pk gYWf`ffffffffUVUUUUUUUUUUDEDDDDfDffff33ww˯R)P\PW[_<[ ̜Pʯ̙ _[fUUe u_ΰZ ʪU P * +/[UUU[J'l Pf@ _ Yi3;f3ffDDUTUUffffffffffffffffwwwwwwwwwwwwwwwwww UPUk ̼\P Ufffz\U \[ y __ _YźeYYYŪ\ @ɿ G|Uj[ϯZLDDYL;c3TDUUeUffffffffffffffffwwwwwwwwwwwwwwwwwwf`ffffffffUfUUUUUUUUUUDUDDDDfDff6f33'wV uՕ _   𫠚UϿ PP_ߪUPkU_U[ f`ffffffffUVUUUUUUUUUUDEDDDDfDffff33'wW ܻ 0@ Ż[ipE\Y Yp9[[YfUUU[UU fY PU \P YPP9 QYUU[P+Ȍ 5`P5P  lYf;c3ffDFUTUUfeffffffffffffffwvwwwwwwwwwwwwwwww ʙ UPUZKYeP[Y, Y̐ʩ\ KYP`% 0`ZŕUzy0eY  \+O{İ+ ;DFUUUUffffffffffffffffwwwwwwwwwwwwwwwwww"     !f`ffffffffUVUUUUUUUUUUDEDDDDfDffff36'wwP[_+0*UP  ʡUUY)'f`ffffffffUUUUUUUUUUUUDDDDDDfDffff3f's Uɩ :" U UPUk ʪ S"")YUP  PzZP̙ɛP  e P +@._Ր DFUUUUfeffffffffffffffwvwwwwwwwwwwwwwwwww*(̠[U[ʫPUUPɕP ^UUU ՝Y ` ʠʡ[ݪUU_{ZUX Š z y[TP@สUZ  eɫ˪ ʩ{YP̯̉ɼYY89UP[[Y;FfTDUUUUffffffffffffffffwvwwwwwwwwww#!f`ffffffffUVUUUUUUUUUUDDDDDDfDffff36's P? _0 W )U e+)wwwwwwwf`ffffffffUUUUUUUUUUEUDDDDDDfDffff3fs Uj WPZ$"YUUUZ _UUUk[UYsϙ\|, k _YU_l;YɛPʿ)Ż   )jɜ( U`Z˪ TYEUU0DfUTUUfUffffffffffffffwfwwwwwwwwwwwwwwwww,*Y`YeUU % X UUP UPZ͹YUUUU P_݄PȠ`@ U Tz {P@PU_ pK_lU@[ { جPȯ]/ ZD X;FfTDUUUUfeffffffffffffffwfww%#f`ffffffffUVUUUUUUUUUUDDDDDDfDffff36's6 _,U@_PUl  -+wwwwwwwwwwwwwwwf`ffffffffUUUUUUUUUUEUDDDDDDfDffff3f3ZO ʠ`&$ş_lUUUU ˔XUUUʟQŗ u\࠱,\-̬𩊻Z 0P ɜ4U˻PPʿ̫̪[ Z@Y Ъ_@@ w U4DfUDUUfUffffffffffffffvfwwwwwwwwwwwwwwwwww.,6ȩ 8j \Z] UPU˪SeYUUUUUZ\L)PP _U Zk+ * \W |Pź: ˕[ [ ԠU[8 /4FfDDUUUUfUffffffffff'%f`ffffffffUVUUUUUUUUUUDDDDDDfDffff3f'sA _  @  \i/-ffffvfwwwwwwwwwwwwwwwwwwf`ffffffffUUUUUUUUUUEUDDDDDDfDffff6f'36(& Y eUYUUUU[ZUYPPUU[P I[ Y\  ݻ-ů) {L ; iZ˻ ZSūVQZ PUX ̬_P p[Y;FfUDUUeUffffffffffffffffwwwwwwwwwwwwwwwwww0._\_  LU Z\PY̕p U U˰oUYUUU Z  UZ\PUZt [y)<f`ffffffUfUUUUUUUUUUDEDDDDDDfDffff6f33ww'\ YjZPP𼪠_  ݪY̙ APˬOL Z \{  Y UPUU_[Q̐uī[ P XUź00ٟYlUfUeUPڱPU75_lL 3ffDDTDUUUUeUffffffffffffffwfwwwwwwwwwwwwwwwwwwf`ffffffVf?=˺XYD{ l UVfU UkZ ZEY3fcDFDDUTUUUUUUfeffffffffffffwfwwwwwwwwwwwwwwwwww86UUUUUUUUUUDUDDDDDDfDffff6fs3"wY\_PP `ɧPʽк PʙR jP̹U [ ZQP,P UUUUP[PX _uɺ PźťYUU[UfUU _̙UGz%P2iǙ @>f`ffffffUfUUUUUUUUUUDEDDDDDDfDffff6f33ww'E[ P謁P˺[E \ U̙̙̙<Z_je zY 0 UP *%QyUPP ",YlVfUUUeUP̠_#     A?;GUT W{PlUUeU U [SZ3fcDFDDUDUUUUUUfUffffffffffffwfwwwwwwwwwwwwwwwwwwIG-YfUfUUfU ̚ Z_UŪPKPY PɎ ])\U뻰c;DfDDDDUTUUUUUUUUffffffffffffwfwwwwwwwwwwwwwwwwwwwB@f`ffffffUfUUUUUUUUUUDEDDDDDDfDffff6f33ww"wedo   ZY S UpU̙ ʪeZ[Iſ\ Y`i ZWJU ̕o S ;[ ̥""YVfUUUJHf`ffffffUVUUUUUUUUUUDDDDDDDDfDffff3f33ws'w"G;_UZYʬ [J P@_iUY̙ P PlYU[Zl \ PJP U٩ ̈ ɵWż CAUUU Y \wlUe UeVljffffffwwwwwwwwwwwwwwwwwwwwwwwwf`ffffUUUUUUUUUUEUDDDDDDDDDDfdff3633w3'ShکecP\YPZ [LŪ,[UUYUP\\ ƪ383333ZUP\33;3333Ȉ|ZZz UUUUUUU۠ 🩐? YUfUfeff Ҫ[ [P UUUUU__лJ33f3ffffDDDDDDUUUUUUUUUUUUfeffffffwfwwwwwwwwwwwwwwwwwwmk\Z U q _\\ϙ  řZ[YU333333333;R*%[;Z8333PȴOUUUUZ[yL{\۲ iU[fUU\ K Uկ]L333f3ffffffDfDDDDUUUUfdwwwwf`ffffUVUUUUUUUUUUDDDDDDDDDDfdff3f3333'w""xVgǨ< P ˪P U nlUUUUUUfeffffffwvwwwwwwwwwwwwwwwwwwwwwwf`ffVfUUUUUUUUUUEUDDDDDDDDDDfdff3333ws"xFZgeYZP PU_ [UYť̈m]3333 ]_[33333ȃ _ PKUYUUTɢjPZVU[ffƚPI[`UU_U\ ˻33f3ffffDfDDDDUTUUUUUUUUUUfUffffffvfwwwwwwwwwwom 5[[/P P؟PZ [ ɺ YW ^tYÜ33[̠_33;33 ț\V_ PPoWI {UQP\_jU[eU\\ گ__RYUZλL;33c3ffffffffhfwwwwwwwwwwwwf`ffffUUUUUUUUUUUUDDDDDDDDDDfdff3633s3'w"J_Ţ UPpZipnDFDDTDUUUUUUUUfUffffffwfwwwwwwwwwwwwwwwwwwwwwwwf`ffVfUUUUUUUUUUEUDDDDDDDDDDffff3333ww$     qogVtPoP P  {ɩ @_\_Z\ PK  ~U9[şU833;YϠY 383333̈\ Z\YU PU_ VUZjϙU j UUeU ɕUU U PPL3333ywUUUUUUUUUUDEDDDDDDDDdDff3f33ww"qR 8;軻ǻP`Z  ii PU  ʕ P33ü933y_P ̕ Y; U ʻl E e[UUf rpfcffffffffDDDDUDUUUUUUeUffffffvfwwwwwwwwwwwwwwwwwwwwwwwwf`ffVfUUUUUUUUUUDUDDDDDDDDDDffzxZ̈ȈY __UL˻PKMc3ffDDDDDDUDUUeUffffffwfwwwwwwwwwwwwwwwwwwwwwwwwwsq6f33s3'wQĿ0k\Ȉ:Y| PZ UqyŜP Z \\RU33;3 [833;33ȃPZZ U Uk[ ϧY\ŪUeUƟUUYȈU Y{yf`ffUVUUUUUUUUUUDEDDDDDDDDdDff36s3ww"Tx Zɷ黻{ YPEPUUwEť\\PP\Z_\Y33P;;3 P ̕U YP P\  [trL33333ff3f33f3DfDDDDUTUUUUUUffffffffwwwwwwwwwwwwwwwwwwwwwwwwwf`ffUfUUUUUUUUUUDUDDDD|zeUf E_̈Ȉ\ř" DLL[c;ffDfDDDDDDUUUUffffffvfwwwwwwwwwwwwwwwwwwwwwwwwwwusDDDDDDff6f33w3"wqF_PZ8 3y绚\ ̰PY3PSP  Օ_ \OY383 8333ȃ  Z P[YU \ R ߷ [UU f PU _UU }{f`ffUVUUUUUUUUUUDEDDDDDDDDfDff36ws'w"h [w໷wh Uo P  \  Yʻ0 P9 ̗U U33û83R_̈P [Z9JI [vtUL33333333; ffDDDDDDUTUUUUfeffffffwvwwwwwwwwwwwwwwwwwwwwwwwwf`ffUfUUUUUUUU~|[eUf Ÿ383K  D̻D LUDL Y3ffffDDDDDDUDUUfeffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwuUUDUDDDDDDDDdDff3f33ws'VA\_\ _绬 )\hu_Z/33333;𠛕_P P^eZ P%P`V [UUfUPU}f`ffUVUUUUUUUUUUDDDDDDDDDDfDff33ww"w"6 % wwww\W[[j Y  \_[@\3;3;̙ PKZ5K@\xv̈ ۻRL333 f3DfDDDDDDUUUUfUffffffwvwwwwwwwwwwwwwwwwwwwwwwwwf`ffUf~[eUf ZUY8333 VU LDDDDDL\ _f3ffFfDDDDTDUUfUffffffwvwwwwwwwwwwwwwwwwwwwwwwwwww%     f`ffUVUUUUUUUUUUDDDDDDDDDDfdffs3ww""VE_Ϟ0Y~ww  \[ l[TY̛j Lɺڳ3;ȃ UPULwf`VfUUUUUUUUUUEUDDDDDDDDdDff3f'PXgP U ʅU[P Gź \0\:Z*|GP83;333333YřUfUf UY83333X| DDUϯc;ffffDfDDDDUTfUffffffwfwwwwwwwwwwwwwwwwwwwwwwwwww33333̈ UP I [ ɖLPUUUUfff PUY38ʹ𺙟UU ̪Z]Z {\ %̴DUUfeffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`ffUUUUUUUUUUUUDDDDDDDDDDfd6fw3'w"Uw I ZU_PPӠ [33333ȈPU_ f`VfUUUUUUUUUUDUDDDDDDDDfDff36`r_Ee U ΕP̟ ̚U ZcʕUı_şU ڻZ ZU UUUfeUY333 Z R L;f3ffffffDFUDeUffffffwfwwwwwwwwwwwwwwwwwwwwwwwwwww;333333333333ȈU Uk f U ] 8  UQY_ɕPUKLˮFUTfUffffffwfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`ffUUUUUUUUUUEUDDDDDDDDDDff6fws'xe [UY ZUUuUI? ZJ_˕P~ 3333333333333f`VfUUUUUUUUUUDUDDDDDDDDfDffs3B8л`ůܜzU U] UUPUPU^ P Щ  [ % UPP yPਜ਼ R 1ZPYUUU[ffULRY383Ū_UPPi°P ʻ3333;f3ffTDUUffffffvfwwwwwwwwwwwwwwwwwwwwwwwwwwww3;33333333333 U P [Uu__PU_[ZkR8Y~ " Ͽ ǯ`_ZD\[ FUTfUffffffvfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`ffUUUUUUUUUUEUDDDDDDDDDDff3f"s|GU UY_Z [Uî^YlKJʡUy`J  ʜW8;333333333333f`UfUUUUUUUUUUDEDDDDDDDDfdffs3BZ[UP c \ ?̳UU P P K\ PU [e0 Up l UUUU[fUff UPU38 UP 5Y 8 Z 33L[3;33TfUUffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwww;333333333333 Pڠ% Z ̯P  ZZ[8Y~z[ PZU i%) _ F0UDeUffffffvfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww%     f`UfUUUUUUUUUUDEDDDDDDDDff6fw36'/e2 RU̩0ZU\ ʙ̙ UPyU_Řݥk_[*Y_ PYV8f`UVUUUUUUUUEUDDDDDDDDfdff36w3'ZZ \ YUUP] P _PUPUeI___83;33333333333U_YUZ]Oū ̚K PPYP -U3Y~̻ PP[P[UZ F;UDUUffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww;333333333Ȉ P `sTPUz J l 3 Z tZVU Z\ 0 @FcTDUUfUffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`UfUUUUUUUUUUDEDDDDDDdDff6fw3)S P UYPy ̙əU Y\\UU  8f`UUUUUUUUUUEUDDDDDDDDffff33wsq'YI9Y`[ܕUUUUUU@ \̫U ZU P̠ ZZ˻833333333333 U Ϫ_UϠ"Ր3Y{wɜ P__YU@F;UDUUffffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww3;33333333Ȉ PZۥ` KPʪW )t\YZ ̳ UϰBK [U FkTDUUfUffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`UVUUUUUUUUUUDDDDDDDDfDff3fw3yYPϯUYU ZɛPPY\󦹴 @հLϫ3f`UUUUUUUUUUDUDDDDDDdDffff33ws'Xᰶ UYUUUZ P ɩʻ\ àU W[33333333333̈UZ ZϹ 戀\ɰ 8YY[[_;U&Q UY*̠P\[LF3TDUUfeffffffwfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwϪ;33333333̕PP¿ S ˻ɐY0 \˻\P83 ̐L\P_ _[ jU ZDkTDUUeUffffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`UVUUUUUUUUUUDDDDDDDDfDff3fw3'Y @ ZUP̥ P  _@P\V Uy Z +ʫ3wf`UUUUUUUUUUDUDDDDDDfDff6f33ws'h ̟ U 0UU P _Y*YP3;33333333̈U+ Z \ɺZ  N_:PUU3UU\ yPYZ_l Y PF3TDUUfeffffffvfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww͉Ϡ˪3;3333333̕PZS _YY P Z ŜV_̐[ ջ  WR̙U",ݪ[8(     ߙYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU;33333 UUUZ̫ Y Q  w{ ꥟ZK UUʳ\LDD;f3ffDFTDUUUUUUUUUUfeffffffffffffffffwvwwwwwwww"[UY83UYUUUUUUUUUUPUUUUUUUUUUUUUUUUUUUUU;333333UJs ũ̟Y ˠPu_UPLD3f3ffFfDDTDUUUUUUwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwUPDDfds3_]; Z YZ W ̙ UY",Y3UUUUfeffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDP6DűxU |_~ U\j륻YK{ KUY̙ UYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU;33333̈UPU[zYP  PWǫUեPZ_̟DDDL3fcffDDTDUUUUUUUUUUfeffffffffffffffffwfUU,̽ݪUY83YUUUUUUUUUUPUUUUUUUUUUUUUUUUUUU;333333 UU E ZYə Y ;U ̹PP ۥY̥ZPL3;fcffFfDDwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwEPDD6dw3 Ŭ M˼{ [Y (E Y ̙ UY,[Y83TDUUUUUUUUUUfeffffffffffffffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDP6dY Z~ _;à WU 㪻UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU;33333̈ UU 񐚹G E G0 [ ^ *^ɪ(8UUUUUUUPUUUUUUUUUUUUU333333UUZU * t_˫++ y w wU_[R:3333ffffDFDDDDTDUUUUUUUUUUeUffffffffffffffffffffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww 333333333̈UUڪ0` U UEG{\ ť !Dɻ33c3ffFfDDDDDDTDUUUUUUUUUUeUffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwUPDEfDs3'PU \[UPũP ˯Z ŲP Z P UUUUUUUPUUUUUUUUUUUUUU UPUUDDfdw6Z ռ߰UU ̩Py Y PPP  \ZUUUUUUUUUUUUUUUUUUUU33333333UU۪P̐\e9ZZUY{ ʬ J_Z @EY̻3333ffffDDDDDDTDUUUUUUUUUUeUffffffffffffffffffffffffwfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww3;33333333̈ UPUYY pZPʰPP{Dw_ U Z9Yɻ33c3ffFfDDDDDDTDUUUUUUUUUUeUffffffffffffffffffffffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww)     UPUUDDfDf ]QZ UZ[  U𜙥 PʪPP  [ ϕYYUUUUUUPUUUUUUUUUUUUUwwwwwwwwwwwU`UUUUDD6f'P̋ h ZS@_p[Z[  U ş `P WŜŬUUUUU3;33333333̈ UPU[ X Ϭ I U PХ L "Ż33c3ffFfDDDDDDTDUUUUUUUUUUeUffffffffffffffffffffffffffwfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwUPUUUUUUUUUUUU3333333333Ȉ UUZZ P[ _EVUUUUfePƐòUPUZ ][<3;c3ffDFDDDDDDTDUUUUUUUUUUeUffffffffffffffffffffffffffffwfwwwwwwwwwwwwwwwwwwwwwwwwUPUUDEfDsfQ Z𯰌˺P l  Y UZ˰YUUPUUy [Z[PP Z YUUUUUPUUUUUUUUUUUUUwwwwwwwwwwwwwwwwwwwV`UUUUDE6dwU\ _{S[U [ > 5P ɦSUYP  \UUUUU3333333333̈ UPUZ]UE ^CLU̕  P̠UԽY˟˻33c3ffDfDDDDDDTDUUUUUUUUUUeUffffffffffffffffffffffffffvfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwUUUUUUUUUUUUU3;333333333Ȉ UU_-ɸP PU[eU\fY2 P\_ ̕P_۩D3c3ffDFDDDDDDTDUUUUUUUUUUeUffffffffffffffffffffffffffffvfwwwwwwwwwwwwwwwwU`UUDUdDsfW oy[ [Y|YUY Y̜Y Z _peYUUUUUUUUUUUUUwwwwwwwwwwwwwwwwwwwwwwwwwwwV`UUUUDU6dU \TPR_ ʉŪ P P5[_ z y _?YqU 9 UUUUUUUUUU;3333333333̈ UPUU QyJ\ff C pU *  UU-U3;c3ffDfDDDDDDTDUUUUUUUUUUeUffffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwUUUUUUUUUUUUU33333333333Ȉ UU ̫Zd ZZUUUfPUUR̕YQP D3c3ffDFDDDDDDTDUUUUUUUUUUUUffffffffffffffffffffffffffffffwwwwwwwwwwwU`UUEUdD6fP V[_ZPYϠYL zPY P5ʠ_P ê[UUUUUwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwV`UUUUDU6DY 9\,Z ŠZl P]Y pZP Y ϕ ̼UYUUUUPUUUUUUUUUUUU3333333333Ȉ UPU0p Pz ffff̪UZP Y)R 3;c3ffDfDDDDDDTDUUUUUUUUUUeUffffffffffffffffffffffffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww UUUUUUUUUUUUU;33333333333Ȉ UU Q[[UUeP Yf\Ő_L3f3ffDFDDDDDDDDUUUUUUUUUUUUffffffffffffffffffffffffffffff*     !wvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`UUUUEUfD[\𰅪_[[Zz*Z;\[UP [UUYUU)'UUffffffffffffffffffffffffffffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`UVUUUUDEfd33Bw0YϪmP  ZX[ %z*" PUUUUUUUUUUUU333333333333Ȉ U* %UUfe U Ztff0YD;f3ffDFDDDDDDDDUUUUUUUUUUUUffffffffffffffffffffff*( JϕZ TUUnUYUUUUUUUUUUUUU3;333333333333̈ POpP  PYU[fe̕PS ɐRJ f3ffDDDDDDDDDDUU#!ffffffffwfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`UUUUUUdDs%Z0YY\IZPZU ztz[ 5\_[\@K^=+)UUUUUUUUUUffffffffffffffffffffffffffffffffwfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`UfUUUUDUfD3frst :Ĝ _< ã\ \FZ$"UYUUPUUUUUUUUUUUU3;33333333333Ȉ PU_ʼ U Q_ U[fU̕P Z@UVUP| |;f3ffDDDDDDDDDDUUUUUUUUUUUUffffffffffffff,*  Y?YYZPZZ X UUUUPUUUUUUUUUU;33333333333333̈ P ̰Y0 \UUU[fe̕pPL𯵚\Z P@f3ffDDDD%#ffffffffffffffffvfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`UUUUUUDD36ww2\Qʬ\ YUPK ܵ@ \ 5\m * -+DDDDDDUUUUUUUUUUUUffffffffffffffffffffffffffffffffvfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`UfUUUUDUfDff3x \UP祵 Z 🫪 &$ 0UYUUUUUUUUUUUUUU;333333333333Ȉ PU]l PU[fU ̕PPtU[Y ܣPJ[;f3ffDDDDDDDDDDUUUUUUUUUUUUffffff.,S_|Āߐſ ϚeʕůY UU UPUUUUUUUUUU3;3333333333333̈ P TL 𚵚ZUUUff̩;) Z;[V`Q ZR'%ffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`UVUUUUDE3fw3'Z U@W Y UϷ\u /-f3ffDDDDDDDDDDUUUUUUUUUUUUffffffffffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`UfUUUUEUdDffs6"'[)[Z (&Z[]P_ʫUYUUUUUUUUUUUUU3333333333333Ȉ PZ ? PZU[fe ̕P UϺ̲ɚ _[U@껻f3ffDDDDDDDDDDUUUUUUUUUU0.P\SYY Y{_Zʕu j əUU UPUUUUUUUUUU;333333333333333̈ P\ٰY% P [eUf̿P Y\_*     1/ \f3ffDDDDDDDDDDUUUUUUUUUUUUffffffffffffffffffffffffffffffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`VfUUUUEUDDff3fwwq"GxJ: [97 U p  ˿U Z˼f3ffDDDDDDDDDDUTUUUUUUUUUUffffffffffffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`20YżU_IKUU 9Q\^ 33 ë˰YUUPUUUUUUUUUU3;333333333333333̈ P_UYYV  PP UZUUfef̺P@몪T%Q:8ffUUUUUUDDfDff33ww"xUg3dĻP\[А 9P P Y5 UUUUUUUUUUU3;3333333333333333333 PU˚PUU/ʕ 31Y| Yf3ffDDDDDDDDDDUTUUUUUUUUUUffffffffffffffffffffffffffffffffffwfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`VfUUUUEUDDff6fwswVgVF;9˰,Zɯy UY ˼ ,SZ;f3ffDDDDDDDDDDUTUUUUUUUUUUfeffffffffffffffffffffffffffffffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww42Kz` ƬN <0YUUUUUUUUUUUU;3333333333333333 P@) Wɬɵə į`,ffff P_\<:f`ffUVUUUUDDdDff36ws"xUg3dD P Uɕ ̖ YU UUUUUUUUUU;33333333333333333333333Uy53ʊZQUZo f3ffDDDDDDDDDDUTUUUUUUUUUUffffffffffffffffffffffffffffffffffwfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`ffUUUUUUDDfdffw3=;S PU Iʻ_P^D;f3ffDDDDDDDDDDUTUUUUUUUUUUfeffffffffffffffffffffffffffffffffffwfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww64'wwxEV69IϹ Y%P fPZX:U UUUUUUUUUUU333333333333333333 PZ[_ Z_ɻ YUff><f`ffUVUUUUDEdDff36ws"xEfdĻ ^YYP ̙ ̼Ϗ?Z\YUUUUUUUUUUUU;38333333333333333333333333333ȈUU75PQǪP[U9ɪ[ f3ffDDDDDDDDDDUTUUUUUUUUUUffffffffffffffffffffffffffffffffffvfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwf`ffUUUUUU?=vJZU Y \ʻzUU[P\P]`[_L 3f3ffDDDDDDDDDDUTUUUUUUUUUUfeffffffffffffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww86DDfDffs3'w"wEfd KZɕ_YP) ̠ YU Z_ɰ ;U_ UUUUUUUUUU3;333333333333333333 PUU\ŲZ S˰\@>f`ffUfUUUUDEDDff36ws"xdVKU p PR̻ə ̼ \[_UYUUU PUUUUUUUUUʃ38333333333333333333333333333333333333Ȉ+     A?UU[ EUYKYUUU\U\U UP˯ [L 3f3ffDDDDDDDDDDUTUUUUUUUUUUfeffffffffffffffffffffffffffffffffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwIG3333333333 UPUU U-">Z_WVş ZZř\%33f3ffDFDDDDDDDDUDUUUUUUUUUUfeffffffffffffffffffffffffffffffffffffffwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwB@f`ffUfUUUUDEDDff36w3"W d P P_Y `\ ZeP\UUUUUUPUUUUUUUUU8333333333333333333333333333333333333JHf`ffVfUUUUDEDDfd36'sG[U P{ P_ ̙̩U # 9pUUUUU PUUUUUUUUX;̈YZCÄUUU˯  ZU U UYff\UYUUP3ú_z  @ Uş_ŏ_O _ \UYPUUU [\_UYlUf}f`ffffUVEUcd JZźUɚZ E̪UUUU @ ťU VUUfU+ű YUUxvUU[zY,<YwUDL;33fcffffDfDDDDDDUTUUUUUUUUUUffffffffffffffffffffffffffffffffffffffffffffffffffwfwwwwwwwwwwwwwwwwwwwf`ffff~UUUU+UU ƕU fff ZPU/lP Z~YzUL̻3c3ffffffDDDDDDUTUUUUUUUUUUffffffffffffffffffffffffffffffffffffffffffffffffffffvfwwwwwwwwwwwwwwwww-     f`ffffUVDUsd: QɜP Z Z_ZP upY \UUUU Pwɵ_ɐU̪ LtP UYf`ffffUUDUfds9PUU^ʰY \ Қ8UUU PU  P p  ZUfeJKřUPUUU_7QϻZ\̜Y5  ZZ _Z;c3ffffffDDDDDDUDUUUUUUUUUUfeffffffffffffffffffffffffffffffffffffffffffffffffffffwwwwwwwwwwwwwwwww ƻUUUUU͵ZP UU0Zμ V;]DD3f3ffffDfDDDDUDUUUUUUUUUUfeffffffffffffffffffffffffffffffffffffffffffffffffffffffwvwwwwwwwwwwwwwf`ffffUVDU6dY ˼Qę Y5Wʰ\_0| \8UUUPU[ _˩pī幪Y[Z\ϫ\_UUf`ffVfUUDEfdw6W4 , /ū; Y𲿬[Y38UUUww PUV  Ϭ ?ߩeU f UPUUUP`Y \P jI< yY\ PlPL33ffffffDDDDDDUDUUUUUUUUUUfeffffffffffffffffffffffffffffffffffffffffffffffffffffwvwwwwwwwwwwwwwww\e U|ŰZYPU PUUUU Z ʧk p˪P Z `_͑ ;f3ffffDfDDDDUDUUUUUUUUUUfeffffffffffffffffffffffffffffffffffffffffffffffffffffffwfwwwwwwwwwwwwwf`ffffUUDU6d   $\_U ;P _8UUUPU U `Z\Y!kPP[Uw\Uf`ffVfUUDEfDw6x ͺ T_ZP,Y3UUU~wwwwwwwwww UU@P PV UPUUU UP_ U tZàɹŪ Z @D3;ffffffDFDDDDUDUUUUUUUUUUfeffffffffffffffffffffffffffffffffffffffffffffffffffffvfwwwwwwwwwwwwwwwU[eU \UPUUUZ%| P Yw@tʢP P[U 7̛ISŚ;c3ffffDfDDDDUDUUUUUUUUUUfUffffffffffffffffffffffffffffffffffffffffffffffffffffffffwwwwwwwwwwwwwf`ffffUUDUfduu Ż _PʚɼYP_ 8UUU PU[ZϚ zW[ k KZUYf`ffUfUUDEfDs6x"uuUP_ ZP ,U"U̳3UYU~wwwwwwwwwwwwww UU\ß Z۠  UUUU+UYP [YUUUY\Oϫ \ U_̕SD3;fcffffDFDDDDUDUUUUUUUUUUfeffffffffffffffffffffffffffffffffffffffffffffffffffffffwwwwwwwwwwwwwww[e ,`Y PUUUUUUUYP wD\PZ Yc ʧ UU"uꪻ33ffffFfDDDDUDUUUUUUUUUUfUffffffffffffffffffffffffffffffffffffffffffffffffffffffffwvwwwwwwwwwww-     f`ffUfUUDEfDs68" jZe ̠ PWY,UUU P33UYUwwwwwwwwwwwwwwwwwUU\J Pwfwwwwwwwwwf`ffUUUUDDfDs3e_P ɪ̰XU,"R'̬ɚ UU~wwwwwwwwwwwwwwwwwwwwwwwwwUUUUU UPPDU\UYUUUUUZ ۹_\L\P[_Yiy Pi[P𵾼 QUɯ3;fcffFfDDDDTDUUUUUUUUUUfUffffffffffffffffffffffffffffffffffffffffffffffffffffffffwfwwwwwwwwwww UPU:Y <\ UYUUUU ƩP ̟UUUPUUUUZ۰P U \_ZSpeU  5\;33ffffDDDDTDUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffffffffffff`ffUVUUDDfDs6ůP[[0\ŠP̙əz"Uϩ_ ŪUUw~wwwwwwwwwwwwwwwwwwUUú`ffffffffvfwwwwwwwwwf`VfUUEUDDfD'3  ̻޼ U""U UYw~wwwwwwwwwwwwwwwwwwwwwwwwwwP[UYUUUUU[˥ ݠUYUUPUUUUU+UZ Z/ ?›RPZ Z œ__3;fcffFfDDDDTDUUUUUUUUUUfUffffffffffffffffffffffffffffffffffffffffffffffffffffffffvfwwwwwwwwwww UUUūɜPPU[ ƛUUPUUf\e[ʟUUUUUUUUUŪ+"[NJUPZŹ˕@ :j UP P˴Z33fcffDFDDTDUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffff`ffUVUUDDfDs6Pʹ ̻Y"UUK{PUU~wwwwwwwwwwwwwwwwwwwwwUPUffffffffffffffffffwvwwwwwwwf`VfUUEUDDfD'3 ə0řYU\ U~wwwwwwwwwwwwwwwwwwwwYUPаϯUjYUUUUUUe[@WZ:UUUUUUZU˜ ^ ð%@\+U\  3RYeZz{+Y_PUL3f3ffffDDDDTDUUUUUUUUUUfUffffffffffffffffffffffffffffffffffffffffffffffffffffffffffwvwwwwwwwwwwwwwwwUUS ˿ʻ LUUUUUf  [[YUUUUUPUUUU̥̪/[Y _U˙ǯT[ZY @˹MY YZP33f3ffDFDDTDUUUUUUUUUUeUffffffffffffffffffffffffffffffffffwwwf`ffUUUUDDfDs6Y]˼9 \ U,"+UʙLUIP˨YUUw~wwwwwwwwwwwwwwwwwwwwww ffffffffffffffffffffffffffwfwwwwwwwf`UfUUEUDDfDsW̏XQ ̙ U  _ YwwwwwwwwwwwwwUPU˜toUUPUUUePLw UUUUUUUUZ 5" nSjUϪ xPOʌϪլɛL3c3ffffDDDDTDUUUUUUUUUUeUffffffffffffffffffffffffffffffffffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwUUwv[fɤ `Pū ˚Z_UUQ Pp›Z Y@Yʪwwwwwwwwww{wwwwwwwwwwwwww P ̻̙\ ZUUUUUP _[eU U ɹY[꼼P  \U YP:Yc3FfDDDDUTUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffU Z/[ܪYUUUUUUUUUUUZU-̯U[f̚P_0{Də[U 篹_\@33fcFfDDDDUDUUUUUUUUUUUUfUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffs`VxPU ˰Z, 0 [\?ß PZ[wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwU EPhoJ̙Yʻ٩ YUZ ΪUUYUUUUl5fdUE Z _\+ PYǯ\ 0Y PZ_U~wwwwwwwww{wwwwwwwwwwwwww̙P;\ ɠ əUUUUUUUUUUUUUͻ[_UjiUUfP _W˕ Yˠ ŮU9V :_L|;c3FfDDDDUTUUUUUUUUUUUUfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff˥PWU UUYUUUUUUUZU- ̯e[fɥ{\D_U\+ [z{ ʯ +L;33fcFfDDDDUDUUUUUUUUUUUUfUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffpZZ\hܻ [0ʠ Z \o ʪU\U\p\[Q] wwwwwwwwwwww{wwwwwwwwwwwwwwwP\uX P@_̹̙ ޙZ[,U5U[\P \PYUjɨZP U \[ 8ښU~wwwwwwwww{wwwwwwwwwwww̕ð [˕ ə řYUUUUUUUUUUUUUUUU-UUU[fP  )_\ \ U_UZL3f3FfDDDDUDUUUUUUUUUUUUfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff͠[PEUYUUUZU"U ̪fUfʕZw{P_PP z UUZ\^ڛ333ffFfDDDDUDUUUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffP: [ {PZY߭Pũ \UUU ϼUYw~wwwwwwww{wwwwwwwwwwwwwwww ʥ[: ̻̙\ [0 ř_PYUDk{9P|/˯Z\ ZU i^PP[YUwwwwwwww{wwwwwwwwwwww U  P̹/     ϻɛ_U[U{\ UZUݻ-P \\loff̯; P̐Y \ PU [u333ffFfDDDDUDUUUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffUɪ _̻p Y[_[ZUۻ"P0 \U_U5\P,UUUuU@;33ffffDfDDDDTDUUUUUUUUUUUUUUffffffffffffffffffffffffffffffffffffffffffffffffffX6k  QU ^^ Z̙ P˯I2 PP\DLDD33fcffffffDDDDDDDDfffffffffffffffffffffffffffffffffffffffffffffff P[YWU%P U W UuZUPPZWZ_99UYw~wwwwUUUUUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff Y%QPZ 8˽[ȿ̹oYU\˙9_Pỻwwwwwww̵ q C ɵ=UYU 9 ̫P \,UU- [P0U ʩ UEU_+YDLDDDDDDD;33ffffffDFDDDDTDUUUUUUUUUUUUUUfUffffffff~wwwwwwwwwww ̕P ƫ Е V = Z ̩ ɴ[UU-ݐ"Z I*f  PE DD333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff )UUU_\ ZdzP륵Uʽ W ZYwwwwwwDDDDDDDDUUUUUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff[ /   PP0PuP P ̚@ 㻻{wwwwww̕:S[Ŗɿ ZɎ/?\`_ U[U;1 }\U5 ź;Z ZǕUE zPULDDDDDDL3c3ffffffDFDDDDTDUUUUUUUUUUUUUUeUŠJwwwwww{wwwww ̕PY \ U"5 e Z%UUZU"\\  [ ^e\\_LD3;c3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffP˟ Z \@ ZP0 \W  [ YffffffffDDDDDDDDUUUUUUUUUUUUUUUUfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffY `Z)i _uwwwwwwwwwwww̕ʿ Y ̛ X>U ,UUUZ\Z oŵpʜPPU[ DDDDDD3;f3ffffffDFDDDDTDUUUUUUUU̕pɼ̙Ywwwwwwwwww̕PlPʚ p  yZ˪ U[UUZ\_ QU_UU ſ k\ZZ ŏDŻUUUUUUeUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff * \ZPY\[0^O_^9Yð\ U33f3ffffffFfDDDDDDDDUUUUUUUUUUUUUUUUfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffP̘ Y PP[P P0 0     \p[U ^ ϜY Yw~wwwww{wwwUU8[\_ \˰ U[UUU _ UUUPŰ[Pʬ 0Z գQ+D@ \ \ \X̐[YY Ywwwww www̹ \P <ՠ Z ",UUUUUZUUUUYP  _𻻻333fcffffffFfDDDDDDDDUUUUUUUUUUUUUUUUfUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff웯ːYjZ   \P ,"0[%UYyL̻3;33f3ffffffffDfDDDDDDDDUTUUUUUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff[ @ W̙\ [[Yw~wwwww{www \ \p?YWPPZ\PTPi UUUUUU[UU LZ˹YPZ˻ `Y [ U_͜ɻZəUˊZY|~wwwwwwww П _ 𯟪5_,""UUUUUUZUUUۻ -YYL3;33fcffffffFfDDDDDDDDUUUUUUUUUUUUUUUUfUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff \ ]Q Z:Q_5W+ ,ۻ m ZD̻;3333f3ffffffffDFDDDDDDDDUTUUUUUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff U _Pɩ ə ťPYw~wwwwwwwwP VZZP ߬ @[[UUUUUUUۚ [Z(¼Z ^Ő%Q [ U _ UZY P𹐻̛ Uж__~wwwww w{w YUQ\ EUUUUYUUY","UUUUUZUUUUۻD3333ffffffffDfDDDDDDDDUUUUUUUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff YP[UQUz_\,[U]ʢQ _D̻33333fcffffffffDFDDDDDDDDUTUUUUUUUUUUUUUUUUfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffff U ʼ[ E"PP əY[ Ywwwww{wwwPr * Y,"[UUUUUUUYp[ZU UpPQŜ_ɕ Z\^_ P̪ ɻP\i|z\~wwwwwww 0 \ iUUUUUUUUYUP ""ݻU[UUUUUZUUUY@ -PLD333c3ffffffffDfDDDDDDDDUUUUUUUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4PP UY[ҥ[U%"P UP@ZZ\8ūYUUwwwww wP ]P̼ P Ű YUU","""""ݻݻ""" ɯ[ePUYP31333333333ffffffffffDFDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffffffffffffffffffwpwwgwffVfEUdDe ;9%\U\ YL̴D3;333333f3ffffffffFfDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffffffffffff42 { qP Z[ U UUUwwwww w{̩ K \ ˻UU""""""ݻ[UUUUUUUUUUUU"" •P Y _[UDLĐ\¯ ZPu~ YU<:wwwwwffffUV6D_~ww 3Ő ɩPZY8w~www w  [5 Y ŕP̰ \ UU",""""""ݽݻݻ""" Uɰ[e Z53D3333333c3ffffffffffDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUfefffffffffffffffffffffffffffffffffffffffffffffffffffwpwwgwffVfEUdDs =; ZY\P P[ϾYD̴D3;333333f3ffffffffDfDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffffffffffffffff64UY w^U ]ZZZYUUwwwww w{̚YPYR UU"""""""ݻ[UUUUUUUUۻ-""̙P̙eU\D5 ɪPɪPPj><xwwwwfgffUV6dGS~ww{P;P dp8[Z_w~www w*pi ŠۼʕY SUY"""""""ݻݻ"-" U75 YL̴D3333333c3ffffffffffDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUfUfffffffffffffffffffffffffffffffffffffffffffffffffffwpwwwwffff?=UfU P_ zYP  D̴D3;333333fcffffffffDfDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUfefffffffffffffffffffffffffffffffffffffffffffffffff86EUdD#UU~̻wZ^ P׹ZɌ UUUwwwwww{PZzOZUU Z̼YU","""""ݻݻ""̙ƯP[ eYPP»Q@>xwwwwfgffUVsdu_~www,;P왕]U3;3PUw~www {纩;!ZPʫ\PPP) UYU""""""""ݻۻ-Œ""ݙ P 3     A? ffU[P U \ ̠yD̴D3;333333fcffffffffDFDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUfUfffffffffffffffffffffffffffffffffffffffffffffffffIG ¯P _UIEUYUU9 )\ ^[ jL D333333c3ffffffffFfDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUfefffffffffffffffffffffffffffffffffffffffffffffffB@wwwwfgffUV 4\ww{wY^Y Y33<3 YUwwww {\P Y+ [˙ UUU,"""""""ݻݻ",""-"JHwwwfwffEVdX[P ŪźP ЙUYUU[[\jwww {YǛkY?XЫ U ZYUUUU,""""""CA\PP˫U;ЕϪZ[ _D̴D3;333333ffffffffffDFDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffffffffffKI""-ݠ\P ̠ UU\[`Z_ J P *̠L D333333c3ffffffffFfDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUfUfffffffffffffffffffffffffffffffffffffffffffffffDBwxwwfwffEV w~wwwYYJ_PŸ PYڙPUwwww{ [ PZϙV YUUU""""""""ݻݻ-LJxwwfwffEVsdu̙ S% ՟U UZIZPwww {笥 %*P \ @ᙥ UUUUUECP"""" P UŪ\UUٿPǕ ;˵DD3;333333ffffffffffDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffffffffffMK"""""""""P \YU UP _\\pUVY [[) D333333f3ffffffffDfDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffffffffFDwxwwfwffEV_ Ywwwww ?[lYP S PUɠ9 ~www{Y% @[ZSUTV W UUU","""""""ݻۻNLxwwgwffEVsdɶ ̕ ̯9 U _[_P \P Ȫw~w {Uʯ_ +P[P GE -P"" |;_\UP˳̹ɰ U p/YDD333333c3ffffffffffDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffffffffffffffOMYUUUU"""""""""""5_PQ P ̩[<ůɔU P UZL333333f3ffffffffDfDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffffffffHFwwwfwffEV6 ɟ wwwPe\\ Y[)Y`UP_~www {^_PZUoL̏ UYUUU""""""""PNwwgwffEU#dY YY|UPZ U \- UP w~w U _Y - z\UP3     QO<𙙙",""""""""" " ʫ^TAZ[2Y[Z G}\ _ P ^[ DL333333fcffffffffDFDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffffffffffffYWZ` YUUΠP_U̐",""""""" S\ P_u_UUUͫ ^UUU ˺ZU_ࡑ ZP{I333333ffffffffFfDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUffffffffffffffffffffffffffffffRPwwgwffEUd_ \UP[_VU Pj_ܰ P ww  UZXfffffffffffffffwgwVfdUg6 YܚV˪ Š ūS ̛\, \:  pZYYw SQ ܹ* Y"""""""-"" U/ʰ Z *YPzPϺZ^ \s UD̻333333fcffffffffDFDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUfefffffffffffffffffffffffffffffffffffffffffffff[Y wPϫ Y멜] YUUS ,""""""̀YZ YX\UUUU\U[˻TYU P P̻ @;3333c3ffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfeffffffffffffffffffffTRwxgwffEUd\U P[\̫ UժPUJ ջ \ww [ ƪ :\ZfffffffffffffffffffffffwwwVfdUs+L̚3 _ Y,ͻQYUYYcZ\w USUYuP ["""""""""""" YZϷ S [ZO ˿Y U ʬY˫ )Lϻ333333fcffffffffDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUfUfffffffffffffffffffffffffffffffffffffffffffff][www Χ eU _\ U UUZ",""""P |ś [^[ ZS˵ [  [_[_LP;3333c3ffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfUffffffffffffVTwxgwffEUdɰa[ ͜ZUUU  P _PZE~w_^\fffffffffffffffffffffffffffffffwwwUfsEdPլ i˼O Y",ݢ[ P\ ɷw WU P ɿ? z[PZUU,"""""""""\V Y\9ΚYU[\ P[ZUY Y@333333ffffffffffDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUffffffffffffffffffffffffffffffffffffff_]ww ə  jU\UY ] P""U PP[Z ,> Y[ॺS L;3333f3ffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUffffXVfffffffwxgwVfDUfU U۪[j əZ\[UU+𢐖˛[~w`^fffffffffffffffffffffffffffffffffffffffxwwUfdŵPZ Vp :UU",- RZ Zùw4     a_ w{ [ Y𯐚UYUU U_ z[ZπUʿ _[Z Ż l4P[DŻ;3333f3ffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUigʰZw w{P 9 lʠ P< _P QU Zə \Z%U 3 T i YD;3333ffffffffffDDDDDDDDDDDDDDDDDDDDDDb`UUUUfffffffffffffffffffffffffffffffffffffffffffxwwUf4Y\ʫUU1\\ """Z[Ŭ~jhDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffffffxwwEf[ ʼPZ*"Ś̳ YU9 caww[ )UPUUU̻Y UUU\UPК\{9@{ PV YźϥY@:쬪Ő DŻ;3333f3ffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUkiZJU̝\Żw wΧP PϪ_`U ZPY e PϥPUl  __Y 5ʵ\PZPD33333ffffffffFfDDDDDDDDDDDDDDdbUUUUUUUUUUUUfefffffffffffffffffffffffffffffffffffffffffxwwEf̚y[ŝY YY"[UɐZ Z~ljDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfefffffffffffffffffffffffffffffffffffffffxwwUfWd `RU)\P YUUZec {w\5U̯ UUUUU0YYPUÛWZ ɟ{ UzY͠ Dϻ;3333fcffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUmkPZ9 j  _~w { ˏ YPZZP U Zʣ_ @U Z ɺ_[UVl""PZ 5_\P PúUͩ _[L33333ffffffffFfDDDDDDfdUUUUUUUUUUUUUUUUUUUUfUfffffffffffffffffffffffffffffffffffffffffxwwefYY PY ̹R Z PȻ;nlDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfUfffffffffffffffffffffffffffffffffffffffxwwVfEUZ ^p@U_[̬ YUUgew wwUZ[ZE ̯PPZUUUU5 UUUZUYUUY~ Y U P \YYQ ˕ _ZəU [DŻ;3333fcffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUomUU[_WP <_~ ǓOUU̧u Z U\ ʜ:P̯j`_ZP[Ufڜ"jZ  YPPYϟLŻ333c3ffffffffhfUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffffxwwfSOۼP˃YUP9y PpnDfDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffffffffffffffffffffffffffffffffxwwVgUhDC𖬚P4     qoUUUZ0Y` Z w \ U [Y oZ V[PU _Z UP̛Y  UY 0\-ЬYUZUYϻP̊PZ+ɺ 333c3ywwwfgUVfD#PU Pk ̖  S   www {w ʕ ZYZ5\Zʠ _ۼUŠ??{ UUU *f\ ./JPP+U Y Q)rpffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffffxwwfgEUw6h簯 zx Z U Y P_L3;33fcffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffffffffffffffffffffffffffsq\̪ UY à\_ _w~{5ZUZ;  L Pʹeʹ [ 7P <5^[P _[\P Y QY _[[鰟Z ̛PʕZDLDDDDDDDDDDD333c3ffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUffffffffffffffff]׻y{[\[X VU_˹U_ \I ^Yk ɐ˺P[ W XE9ίYDDDD;3333fcffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUU6     UUUUUUUUUUUUUUUUUUfffffffffffffffffffffffffwwwfgUVEUfD3+x UY+]U3PZ  ӹZUR_Y~w DDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfUfffffffffffffffffffffwwfwEVdDff3fs ] ` sU PU ZP  v{ Y\P[ʢU UU Y0Z\Y JŜ"̐PE ϥ`Z` YϼYDLDD33333fcffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUU ~w Ű pZ+[U-U? ZPʵZۻ* PZP˪T `V\YULDD33333c3ffffffffffDfDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUfUfffffffffffffffffffffffwxwwfgUUDUfD3iʰ __  :]uY~w DDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffffffffffwwfgfef38s3'P\]U ɯ\Y\ U_U[ ̹ \  pY纰^TP+ "̬PPZ 8Zk "- ܿ W[P\ UYULDDD3;3333fcffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUU@fP Z_[~w P PP\PU-u[_U_Z^b _UۻZPŬ eZEZUDLDD3;3333c3ffffffffffDFDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffffffffffffffffwxwwVfUUDE6f3`ʕ\\UyYUʪZ~w DDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfUfffffffffffffffffffxwwVf{v':wr"U OP \[૥Z_YPJ Zɻݻ Yٟ [ŕ_ "ݯ _PU Un[UUDDD333333ffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUəɜ̬UZ~ŷw { \\U:U"YKR;Uۻ5Z _UUDDD333333c3ffffffffffDFDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfefffffffffffffffffffffwwgwUfEUfD6fs)ݙ ,U PU~wDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffffffffffffxgwEfQV"hʺy̩PYLʰ {^__ UU۵"Pо  [ջU-\@ P ɰYUDDD;333333ffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD |ŭŻ Y ZPŬ~Ϸw _{P E5ř" š P UۻP© \Ze[LDDD;333333f3ffffffffff6     DFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfefffffffffffffffffxfwEV˳\h\UP 333333333fcffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffffW[I? [ UPʕʜ ~w T6 : _ ʿYUݻ\ɩ[{̬:Y˟ UDLDD3333333f3ff  F U Z _[P\ S[\P[~w {˪[ P ,PY  ;5 ,Y\PP [DLDDDffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffffffffffwfg4Ud yG3;33333333ffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfUfffffffffffffU_ |`Pt?P Q T_ ǐj~w {\[ @ ټ Pe\_-5YZP\P_PPUDDDD3;337p̬cj U UJ ,ɩPY ̛ ɠ_~ww{ZZzS Z  [_U  Z R ZY`P-P _3333fcffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffffffwUfd0EFwZDLDD3333333333ffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffffffZgj|KY\U<˯ Zϐ̩p 9~w wZ`Z\_YP[p_% "P_ ] LDDDVpYϻ;ʟ 8U̵]RZ\Ź ˰̪ZwwYUUUUUUUUZ尠 j ɰĐ9 UU  ۙTZ0Х\ZU33333333fcffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfUfffffffffffffffgfV6 pDDDD;33333333c3ffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfefffffffffffU+Ee_ [O\]P<[뛫  ɫ NU~w{Z ʩ[\PZY Z ̠",  ꠙ ;[ DDDDgp[~Z I̻Π ĥ   _ʜ [ wwUUUUUUUUUUUUU ?|wPe [5𚠙U _ 7     ˬ _YLDDDD3;33333333c3ffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffff_ @Uǻ 밻˯%U%ݸYDLDD333333333333fcffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffgp~̠Uʫ%\ZP[ ʠ Y wwYUUUUUUUUUUUUUUUU \ ,ZP[{ UPŚ xZOE [ZUwpQVZ U ?@۰\0P YUUUU ɐw~w UUUUUUUUUUUUUUUUUUUUUUUUUU _仪 pʙP̩\8å\_ LDDD3333333333c3ffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfefffffffffU/p C p_z z UٵUDLDD;333333333333fcffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfefffffgpgE P~ʪ P ʪYʵP U\ P ɰ_@Yww UUUUUUUUUUUUUUUUUUU YU{ :˪ pUPş ZwpPFSYU~PZZʕů YUUUU ɵ w~wwUUUUUUUUUUUUUUUUUUUUUUUUUUUU kS wêY DDDD;3333333333f3ffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffffffUw  QQ z {\zz U+QDLDD3;333333333333fcffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeUfffffgpvV|_ U ۠PP  ϫUYU̪Ywww UUUUUUUUUUUUUUUUUUUUUU \ [p { \  ɛwpv @  UUUP ɹ_ wwwYUUUUUUUUUUUUUUUUUUUUUUUUUUUUU{~W^2Y  j_SDDDD3;3333333333f3ffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfefffffff͕ Z y^_ _\ Uz ң\ɿťY DDDD33333333333333ffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfUfffgpVPU [ PZ <γ P UUU̻9Zw~w UUUUUUUUUUUUUUUUUUUUUUUU  ̜p {›PRwpU5 E P [_ [ʕUP ̬l\Uwwww UYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU7     ϙ fW Y+ [ZPY UYUUUʙ50 DDD333333333333333ffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[ ǰL U<YUUUUUUUU P P LDD3;33333333333333c3ffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgpEP ,0 P YPZ__P̼[_wwww UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVpd _[  Z_;U_"\  P_w~www UUUUUYpE  {ʐ%_Z٪YUUUUU PpDDD3;33333333333333ffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfUfYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUU U[P UUUUUU[Sڼ LDD3333333333333333f3ffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgpU u@PΡ5^ۼ ̙P Y~wwww UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU`b P@ EYɺP +: ZZU[\ U[","YP\ZYwwwww UUUUUUUUUUUUUU 簺U̶ UUUUYUUUUUU\ʥʷDDD33333333333333c3ffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeۙUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU %љUYUUPY L̴D33333333333333333f3ffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgpUˡ ͪ[ P _P5U\l[̐ː%YwwwwUYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPi^%PPUZ=d]Z\l["R" PYU<YwwwwUUUUUUUUUUUUUUUUUUUUUUU ŐUTʙUUUUUUUUUUUUUU kULDD333333333333333c3ffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUݙUYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU "PKUUU UTYD̻D3;3333333333333333fcffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfpE [_ U  L Y Y _wwwwwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU U  %;PY  Ť  UZYw~www 8     ߙUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU \ YU Pu  D̻333333333333333333fcffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUP̷|UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUſ5UD̻D;33333333333333333333ffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@ z  Y 𮫖) {\  P̵Z UYwwww DDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZP_wž\િ [{cUPSL]ڪQYVZ YUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZ\ YUUUUUDL;333333333333333333fcffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUYUUUY_YYUw YUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUUUUUUU:UɵYzYDL3333333333333333333c3ffffffffffffffFfDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@E[ U _[UYY[ ;_ PY̯Uw~DDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQfbP /YYϿZUY /Õ\UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU˯ pU UP) DD3;333333333333333333ffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUYVeUYZPZ~廻YUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUU_Z \UDDDDDDDDDLD3;333333333333333333c3ffffffffffffffFfDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@Xi  Y Y zR?PUUUU;U\ UU PPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU<0dDD Yj̟ K ęUǻ _w UYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUe<\ Y D33333333333333333333ffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDy UfŖW:Y ~ͻ UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UYDLDDDDDDDDDDDDDDD33333333333333333333c3ffffffffffffffFfDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU`U_wZ [LP Oo ZP i-?Y UPZYVYUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfp5fUJUUtPP Pj8jfdDU8     p [,] \<υ ~ɻwUYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU+[UDLDDDDDDDDDDDDDDDD333333333333333333333f3ffffffffffffwwVwe;е""'x4VPU@jɐ [ [ R [~wYUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUDDDDDDDDDDDDDDDDDDDDD33333ffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwfwfeVf eW p\\VddU333333333333333333fcffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU6KP { UUU\\8 ːPw UYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUP ZUUDDDDDDDDDDDDDDDDDD3;33333333333333333333f3ffffwgwE*WPTHrww'wxT Pp Ő̜[Ɍ3Uż ~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUYDLDDDDDDDDDDDDDDDDDDDffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwfwF[UZ X3;3333333333333333333333fcffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwogwDV6K /UP]PĥPE[ U_wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUYDDDDDDDDDDDDDDDDDDDD33333333333333333333xgwV:7fg67c"6f'sXĥ UPOY8ɿ˥ 8X 0 [ ~ UUUUUUUUUUUUUUUUUUUUUUUUUU UDDDDDDDDDDDDDDDDDDDDD33f3ffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwwwEf5333333333333333333333333fcffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU [p ^Z xDV3K YP[[` `3Pɼ_w~ YUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUULDDDDDDDDDDDDDDDDDDDD;333333333333wxfCZEUڴDffdffw3b_YUUP33I U3833ʠ _ _P wUYUUUUUUUUUUUUUUUUUUUUUUUU LDDDDDDDDDDDDDDDDDDDDD3333333333fcffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU;333333333333333333333333ffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU9     xgUFUUEEUDDEfds6r UUY;ZZ33< ɠP\:~UUUUUUUUUUUUUUUUUUUUUUUUUDLDDDDDDDDDDDDDD " wwwwwfgUfDU6 {UUۙ ZU ϟ { YUUUUUUUUUUUUUUUUUUUUUUDDDDD;333333333333333333333333ffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU DDDDDDDDDDDDDDDDDD;333333333333333333333333c3ffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU fwffffUfUUEUdDs6W5 ;UY*\Y:ZZU[ UUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDD  " "wwwwfwVfDU6 w{ P:VeUY JUP[ P ʫo{UUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDD3333333333333333333333333ffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU  DDDDDDDDDDDDDDDDD3333333333333333333333333f3ffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU wwwwwffUfUUDD#6 UY p _ů;Y __Z [eչ  LU `YUUUUUUUUUUUUUUUUUUUUUUULDD  " "wwwgwffDU6UYP w P Ϫe P&UPPɿZ[P UUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDD3;3333333333333333333333c3ffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU DLDDDDDDDDDDDDDDD3333333333333333333333333f3ffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU" wwwwgwffUUDE6: ɬ \UPêZ[YUTZ\ P YUUUUUUUUUUUUUUUUUUUUUU " ""wwwwffEV6P ~w PʯeUUYUJ0\_ K_, UYUUUUUUUUUUUUUUUUUUUDLDDDDDDDDDDDDDDDDD333333333333333333333333c3ffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDD3;333333333333333333333333f3ffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU9     " ""wxwwffeV#Qww e ϟUU\\ː*PY< \~ UYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU" """""wfwEfcywwe [UZ _R| UUUUUUUUUUUUDDDDDDDDDDDDDDD33333333333333333333333333f3ffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULDDDDDDDDDDDDDD3;33333333333333333333333333fcffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU" """xwwfgeV w w\Z[YU\URY ʙ_ * Zw UYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU" """""xgwEVPw{͊PP %P[[%wəǺ_Zz|YUUUUDDDDDDDDDDDDDDD;33333333333333333333333333fcffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDLDDDDDDDDDDDDD3;33333333333333333333333333ffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU" """"wwfgefw _U {PZ U| UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU" """"""gwEV~컷www_ū)[UU ` P pLDDDDDDDDDDDDDDD;33333333333333333333333333fcffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYUUUUUUUUUUUUUUUUULDDDDDDDDDDDDDD3333333333333333333333333333ffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUU" """"wxfwEfW _w { Z Z_ ϲ /[ | UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"p""""""gwdV̻wwww i պUUUjZ P |DLDDDDDDDDDDDDD333333333333333333333333333fcffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU YUUUUUUUUUUUUUUUUUDLDDDDDDDDDDDDD;3333333333333333333333333333ffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUU:     !UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"p"""""""gxcVU_Uw~wwZ PY [y [UU8:\ )'DDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwp"'"""""""wVʚ_Z̹PP [/ Y",UY" UUUUUUUUUUUUUUUUULDDDDDDDDDDDDDD;3333333333333333333333333333ffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUU*( J 3Y~̷wUYUUUUUUUUUUUUUUDDDDDDDDDDDDDDD3333333333333333333333333333c3ffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDD#!UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'p""""""""wxFź ~wwUP ɐ Ż+R z_SL\ ~ +)DDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwp"w""""""""wEfv?뽙R) k U",$"UUUUUUUUUUUUUUUUUDLDDDDDDDDDDDDDD333333333333333333333333333c3ffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD,* -U ~wUYUUUUUUUUUUUUUUDDDDDDDDDDDDDDDD3333333333333333333333333333f3ffffffffffffffffffffFfDDDDDDDDDDDDDD%#UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwp""""""""wx[ʎY@ Y,۪J[Y-+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwp"w""""""""wUfU$ P \ŘZ &$Yw~UUUUUUUUUUUUUUUULDDDDDDDDDDDDDDD3;33333333333333333333333333c3ffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD.,U"""P>ůp+~w UYUUUUUUUUUUUUUUDDDDDDDDDDDDDDDD;3333333333333333333333333333f3ffffffffffffffffffffFfDDDDDD'%DDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwp"""""""""wF\ĜY Y,P ; /-DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwp'w"""""""""wVgʟ`(&YP,Y̷wUUUUUUUUUUUUUUUUDLDDDDDDDDDDDDDD3;33333333333333333333333333c3ffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD0.[YUY"\K Pˉ[Р [ w UYUUUUUUUUUUUUULDDDDDDDDDDDDDDDD;3333333333333333333333333333f3ffffffffffffffffffff:     1/ffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwp'w"""""""""wVg̵[ 973333333333fcffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwp20ZUY < _\\eZw UYUUUUUUUUUUUUUDLDDDDDDDDDDDDDDD33333333333333333333333333333f3ffffffffffff:8ww"w"""""""""wVg4[jU EUYUU P[̛[ow컻UUUUUUUUUUUUULDDDDDDDDDDDDDDDDD33333333333331ffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwpww""""""""""wVg G;9333333333333333333fcffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU42 ʥP <UU ZPZU PpV̥ Pw UUUUUUUUUUUUUUDDDDDDDDDDDDDDDD33333333333333333333333333333f3ffff<:wpww'w"""""""""wUg4P YY90_P UUUUU[S_u̻[ Y~̻UUUUUUUUUUUUUDDDDDDDDDDDDDDDDD333353ffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwpww"'""""""""=;33333333333333333333333333fcffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU64wVgt :ȃ>Ka UUU  {PYw UUUUUUUUUUUUUUDDDDDDDDDDDDDDDDD3;33333333333333333333333333><wpww'w""""""""""wegv P% PYUUU UXYZ~ _~ϻUUUUUUUUUUUUUDLDDDDDDDDDDDDDDDD7533fcffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwpww"'""""?=333333333333333333333333333333fcffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU86""""wVg4Z@TYPZ UYUPP s Ze Tw UUUUUUUUUUUUUUDLDDDDDDDDDDDDDDD3;333333333333333333@>wpwwww""""""""""wVV_] Z[ ] @UYYY_Y0 ~UUUUUUUUUUUUULDDDDDDDDDDDDDDDDD;     A?;333333333333333333333333333333ffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUIG3333333333333333333333333333333ffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUB@wpwwww""""""""""w6 LU[Υ\-+Pi s[PU \ ~YUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDJHwpwwww'w"""""""""WPצP [˵\ ̠ P w YUUUUUUUUUUUDDDDDDDDDDDDDCA;333333333333333333333333333333ffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUKIDDDDD3;333333333333333333333333333333ffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDBwpwwww"'""""""""we[ P ̩ ` Z_0_S^3UP~ɻYUUUUUUUUUUUUDLDDDDDDDDDDDDDDDDLJwpwwww'w"""""""""W!6le˿ {P[_ l _ \[l , _Y_ ~ YUUUUUUUUUUUDDDDDDEC3333333333333333333333333333333ffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUMKDDDDDDDDDDDDD3;3333333333333333333333333333c3ffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFDwpwwww"w"""""""""gP_ YPY[X _ʯP0ZY {\εUPZʻ ΫŻwYUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDNLwpwwwwww"""""""""xdV ʊ F {Z  P_\ pZYߕ w~ YUUUUUUUUUUUGE3333333333333333333333333333333ffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUOMLDDDDDDDDDDDDDDDDDDD3;3333333333333333333333333333c3ffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUHFwpwwww"w"""""""""gYW*eUY ʠ UY \P WP\[ɻw YUUUUUUUUUUUULDDDDDDDDDDDDDDDDDDPNwpwwwwww""""""""""xVgX"X \ ɜ k_ {P`wYUUUUUUUUUUU;     QODDDDDDDDDDDDDDDDDDD333333333333333333333333333333c3ffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYWDDDDDDDDDDDDDDDDDDDD;333333333333333333333333333333c3ffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUURPwpwwwwww"'""""""""gw6DsfȻy{ZU Y"[PźZ ̑P _~̻wYUUUUUUUUUUUZXUUUUUUUUUUUUUUUwpwwwwww'w""""""""xfw4V[̥ ưYY  UtV{\ YUUUUUUUUUUSQDLDDDDDDDDDDDDDDDDDD333333333333333333333333333333c3ffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[YDDDDDDDDDDDDDDDDDDDD;333333333333333333333333333333f3ffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUTRwpwwwwww"'""""""""wwUV6D_| wʹUP U  ?ܛźUZɐ ZO Y9Y wYUUUUUUUUUU\ZUUUUUUUUUUUUUUUUUUUUUUUwpwwwwwwww""""""""xgwf Y9  ˙Q9@5R \ YʕZ YUUUSDDDDDDDDDDDDDDDDDDDD333333333333333333333333333333c3ffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU][UUUUUUUUDLDDDDDDDDDDDDDDDDDD;333333333333333333333333333333f3ffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUVTwpwwwwww"w""""""""wxVg4E )`PZ PϛlPe 3 ̥RȻYUUUUUUUUUU^\UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwpwwwwwwww""""""""gwef5YoUYPZêYZ ƿPP WULDDDDDDDDDDDDDDDDDDD;333333333333333333333333333333c3ffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU_]YUUUUUUUUUUDDDDDDDDDDDDDDDDDDDD3333333333333333333333333333333f3ffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUXVUUUUUUUwpwwwwww'w""""""""wfw4UQJo\Yϳ Y ZʫKU\YUű[Y,ܠ YUUUUUUUUUU`^UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwpwwwwwwww"'""""""wxEfˇɵ/Y U[U@@p_YPUɧ  Z@Z0_w<     a_YUUUUUUUUULDDDDDDDDDDDDDDDDDDDD3333333333333333333333333333333f3ffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUig[̜ ;,~ UUUUUUUUUDDDDDDDDDDDDDDDDDDDDD3;333333333333333333333333333333f3ffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDb`UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwpwwwwwwww"'"""""""wxEfW Z\̐ ɟ@ W\[ Z ˥Zm\ |jhDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUw0wwwwwwww'w"""""""xg p\,p şfcaYUUUUUUUUUDDDDDDDDDDDDDDDDDDDDD3333333333333333333333333333333f3ffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDki O\~UUUUUUUUULDDDDDDDDDDDDDDDDDDDDD3;333333333333333333333333333333f3ffffffffffffffffffffffffffffDfDDDDDDDDDDDDdbDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwpwwwwwwww"w"""""""wEf3[Z ˙_ Pöl˰kP P_ }_ljDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUw0wwwwwwww'w"""""""xeg wS\ƌdzPec~YUUUUUUUUUDLDDDDDDDDDDDDDDDDDDD3333333333333333333333333333333f3ffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmk Y@ _ ɻZZ Z~UUUUUUUUUDDDDDDDDDDDDDDDDDDDDD3;333333333333333333333333333333f3ffffffffffffffffffffffffffffFfDDDDfdDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwpwwwwwwww"w"""""""w5gəYU@ɿ ̐VUYUnlDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUs0wwwwwwwwww"""""""xVg'6̼ Š__  UZ P^ŀ ~ UUUUUUUUUDDDDDDDDDDDDDDDDDDDDD3;333333333333333333333333333333fcffffffffffffffffffffffffffhfDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwpwwwwwwww"w"""""""xg ̯\P [ŚV̩pnffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUs0wwwwwwwwww"""""""xVwvE<     qo_̻> [ Pʠ Yɵ_\ ~ UUUUUUUUUDLDDDDDDDDDDDDDDDDDDDD3;333333333333333333333333333333fcffffffffffffffffffywwwwwww"w""""xfw$V ̠ _ţ _\ɛ PTUUUUU P w컻UYUUUUUUUDDDDDDDDDDDDDDDDDDDDDD33333333333333333333rpffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30wwwwwwwwww"'""""xfwtEzx333333333333fcffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUsq _I_ <^3u_ P[WƩ~UUUUUUUUUDDDDDDDDDDDDDDDDDDDDDD3;333333333333333333333333333333fcffffffffff{y30w3wwwwwwww"w""""wfwV{ [Őɻ Ϝ𐫩 UYUUUU \[w໻UYUUUUUUUDDDDDDDDDDDDDDDDDDDDDD333333333333trffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30wwwwwwwwww"'""""|z33333333333333333333fcffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUusxfw4U ˹ YeP ĐU[_~UUUUUUUUUDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333fcff}{30w3wwwwwwww"w""""wfwdVϵ_9 ̼ZY|UUUUUUUJPYw컷 UYUUUUUUUDLDDDDDDDDDDDDDDDDDDDDD3333vtffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30wswwwwwwww"'~|3333333333333333333333333333fcffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwu""""xfw4V Z  UUUZ  ~ UUUUUUUUULDDDDDDDDDDDDDDDDDDDDD3333333333333333333333333333}30s3wwwwwwww'w""""wxfwDVsPU 0λ ZU Z UPUU)\ w컷UYUUUUUUUDLDDDDDDDDDDDDDDDDDDDDDxv3333fcffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30wsww~33333333333333333333333333333333fcffffffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=     30s3wwwwwwww'w""""wxfgDVPv Ŭ _:ţU >Y{ UUP\Ŝ~wUYUUUUUUUDDDDDDDDDDDDDDDDDDDDDDD3033wswwwwwwww""""wgwUVdER6 [ ZY\U t_ UP ɻUw~wwUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333fcffffffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU33333333333333333333333333333333fcffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30s3wwwwwwww'w""""wwfgDUvK̦Żu     DDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU303333w3wwwwww'w" h| _KU K Ϫ_ ̼ UIU/lZYUU<DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30333333wwwwww'w"x[\UPPY*[Y 9"ŕ o`\˙YPPUYUUUUUUDDDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333fcffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDU\UZlj:Y_ìUP  uYUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU303333w3wwwwww'w"fp\zşDJ[ _ ZYZ[+Zl[!YUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30333333wwwwww'w"fVU P ʹũZ %Ϲ iɺ Ue Y UUUUUUUDLDDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333fcffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPY Ve [𻻛UP Z YUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU303333s3wwwwww'w"?ʪY̕뼼[[[ \P ]lDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30333333wswwww'w"g5̹ ɪŧ PP [ϪUUU U\ _嫢UUUUUUUDLDDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDU۵‹_ PZV [[ ʕ~ YUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333f3ffffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU303333s3wwwwww'w"W| YP< [,_PZ[[̰ffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30333333wswwww'w"xu ܻ \P U Y  [ ZUUUUUUUDLDDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDˠ:ˠ ZZUμ [ ̶J˪Ȫ[Zmɟ[SoϷ̪UUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333f3ffffffffffffffffffffff>     ffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30333333w3wwww'w"xy/ ^ P33333333f3ffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30JU U_ϝ-\P ̻ JKJ _Y; P^ϕP\UUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333f3ffffffffffffff33333333wwww'w"xf_]PS[_Z T+U ̰P{PPj`_[ _P TUU UUUUUUUULDDDDDDDDDDDDDDDDDDDDDDDDD3;33333333333333ffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30333333w3wwww'w"xoYY3333333333333333f3ffffffffffffffffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZP  9j:Y_ ˺Rګ\\ 8%_̒XPzpUYUUUUULDDDDDDDDDDDDDDDDDDDDDDDDD3;333333333333333333333333333333f3ffffff3033333333wsww'w"xGY [ YRU ` ş P pʰg ¯ɼ_[P%PUUUUUUULDDDDDDDDDDDDDDDDDDDDDDDDD3;333333ffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30333333s3wwww'w"333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUx\S?%:_  NUiZu 533 PP tY pZ>O5P񾡪UYUUUUUULDDDDDDDDDDDDDDDDDDDDDDDDD3;3333333333333333333333333333333033333333wsww'w"[7u {KP\Ï OP\Z\DUPɥ[UZ:̚8;\E P@  PPYUUUUUUULDDDDDDDDDDDDDDDDDDDDDDDDDf3ffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUU30333333s33;333333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUDUUUUUUUUUUUUUUUUUUUUUUUUUUUwwww'w"h[ZZ U zPUZUп\P  < Ü %:\ʠ\[[ UYUUUUUULDDDDDDDDDDDDDDDDDDDDDDDDD3;33333333333333333333333033333333w3ww'w"WϐR [ [Y3DP U ˿<;3p 𯼼 ^Pͻ̽YUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDD?     3;333333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUUUǻ3333333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUU3`33333333w3ww'w""xVU  %pZ5de6fDK̕P \i=ˉ[S333\`U$J ɿ ZYUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDf`6f33333333wsww""AYYU _  [ vVx3dDP UU Ȫ\ {ʙ~ UYUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDD3333333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUɻ3333333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUU6`33333333s3ww'w""xF _ [P ϯ\PFUT6dDKU ZZl@[ 833 [UYZ _ ~UUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDf`ff36333333w3ww""qPS1W˙U @r"FxCDKPW Z\[ ̙IϟU~UUUUUUUUDDDDDDDDDDDDDDDDDDDDDû3333333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUUUUUDDDDD;33333333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUf`3633333333ww'w""zZ˺˯Z[ vVg6DDKP𹸝UYZe_Pň˻; __Z\ŻUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDf`ff3f333333w3ww""P ` W~ Qϥwp'xU P {w Y[_ UP ɠY YwUUUUUUUUDDDDDDDDDDDDDŻ3333333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDD;33333333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUf`3f33333333wwww""?̼UT9U/P@ZVw6EDKPɰUP?Y[iȈ PYP 8 UYUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDf`ff6f333333s3ww"'Q[iZ6 Zŷ57P33wG [Uw{ PU[UP[V [eYŰ ~ wYUUUUUUUDDDDD?     DDDDDDDDDDDDDDDDDDDDD;33333333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUTUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDUUUUf`ffff36333333ww"'Uɿ[PUU X| c6fsʩP]ZUP w\eUY_Z0PP P",""UPŜ ~ wΫ , ٠Ր ۫ YUDLDDDDDDDDDDDDDDDDDDDDDDD;3331ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDffffffff;933333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD42ffff363333333333ww"w"wCFSuP ̐ õ\[ZP UU UU e  ʻ̻YP\UUDDDDDDDDDDDDDDDDDDDDDDDDDD3;33333333333333333333333333<:D@DDDDDDDDDDDDDDDDdDffffffffffff3633333333w3ww"""x Y0? ʥ>\PP"""""UPɰ[ʠ~wZ Y  _U Y UUDDDDDDDDDDDDDDDDDDDDDDDDD5333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDD=;333333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD64fdffffffffff3f3333333333ws'w"x6WΥ  PZ {[ U ,0Z UP PPw{0\P| YULDDDDDDDDDDDDDDDDDDDDDDDDD3333333333333333333><D@DDDDDDDDDDDDDDDDDDffffffffffff3633333333w3ww"'"Fxlɫ ˯  5 [U>_̥ YХ z,"""""̕P [w~w\ YuUʙUUDDDDDDDDDDDDDDDDDDDDDDDDD753333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDD?=3;3333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD86DDDDDDDDfDffffffffff6f3333333333ws'w""KGū\pUP`Z^  Z _UP [e w {PƠ9ʿYUDDDDDDDDDDDDDDDDDDDDDDDDD;3333333333@>D@DDDDDDDDDDDDDDDDDDfdffffffffff3f33333333s3ww"'""exW  [>PU5![[P """"̙UU w컷w©Y ,_ |zUULDDDDDDDDDDDDDDDDDDDDDDDDC     A?3;3333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDIG333333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB@D@DDDDDDDDDDDDDDDDDDfDffffffffff6f33333333s3ww"w""x YUZ>[򐯵J Y","" U~ww{^w  Y\,Z UUDDDDDDDDDDDDDDDDDDDDDDDDDJHD@DDDDDDDDDDDDDDDDDDDDfdffffffffff3f33333333ww'w"""wEVUZ𛬙[ YP `,YZ "ݻۢɛ\~www \ Z\[zUUUDDDDDDDDDDDDDDDDCA33333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDKIDDDDDDDD3;3333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBD@DDDDDDDDDDDDDDDDDDdDffffffffffff33333333s3ww"w""x z__̯U,PU# ,"- [ P~wwwwww\^ [ ,[Z UUUDLDDDDDDDDDDDDDDDDDDDDDDDLJD@DDDDDDDDDDDDDDDDDDDDfDffffffffff3f33333333ww'w"""xVg  \i_ʠ@Z "ݻۺ ə\z_[ZZ UUUDLDDDDDDEC;3333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDMKDDDDDDDDDDDDDDDD33333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDFDD@DDDDDDDDDDDDDDDDDDdDffffffffffff33333333s3ww"w"""|xZ ƚŻ Ż]\""-\ ɰUwwwwww ϐY Z Y  UUUDDDDDDDDDDDDDDDDDDDDDDDDNLD@DDDDDDDDDDDDDDDDDDDDfDffffffffff6f33333333wwww"""fwe ̹ [YY_@[ "»ə\Z YS@ P UUUUGE3333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDOMLDDDDDDDDDDDDDDDDDDDDDD;3333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDHFD@DDDDDDDDDDDDDDDDDDDDffffffffffff3633333333ww'w"""V3>\] 㬫UŰ{0U[YX U"ݽ" ɻZw~www\kZ\PePUUULDDDDDDDDDDDDDDDDDDDDDDDDPND@DDDDDDDDDDDDDDDDDDDDdDffffffffffff33333333wwww"""gxkt PYYEPU[PZZU,[UUQ { ZPPQ \ː,:[[ťUUUUC     QODDDDDDDDDDDDDDDDDDDDDDD3333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDYW @ P ,:KYUUUUUDLDDDDDDDDDDDDDDDDDDDD;3333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDRPD@DDDDDDDDDDDDDDDDDDDDDDffffffffffff36333333wwww"""gWeɵZʼPZP(0=ϛ Y,UUU]ZU\ _P ɥ QiRpUUUUZXDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDdDffffffffff6f333333wsww"'"xEf\[U\Q ϻ]ϱU ʠ_U_VUZ_SQDLDDDDDDDDDDDDDDDDDDDDD3333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD[Yɷ [5"_P^ UUUUUDDDDDDDDDDDDDDDDDDDDDD3333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDfDDTRD@DDDDDDDDDDDDDDDDDDDDDDfdffffffffff36333333wsww"'"gƞj_̩YJYs𰰯Y U,UUZ \YYYU _Zʟů YuU\ZDDDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDdDffffffffffff333333wsww"'"xEf 🹥U ť    P[VYUZUSjUUUUDDDDDDDDDDDDDDDDDDDDDD3;3333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDD][PE Ϲi-P yUUUUUDDDDDDDDDDDDDDDDDDDDD3;33333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVTD@DDDDDDDDDDDDDDDDDDDDDDfdffffffffff3f333333wsww"'"xu+ 4UPZU PUU_J PPRY ϵk^\ffffffDFDDDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDffffffffffff333333wsww"'"wFf_кP[^Z UY P UY!iYUUWUP UUUULDDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDFDDDDDDDDDDDDDDDDDDDD_] UUUYٻZUS  µ PY UYUUUDLDDDDDDDDDDDDDDDDDDD33333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffXVDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDfDffffffffff3f333333wsww"'"x4V\' Z[V_; U elPY ̊PUuU`^ffffffffffffffffDFDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDfdffffffffff363333wsww"'"wVfv\̺P\P_RYYZʶϕUD     a_ UYUU;`U  ťZUYUUUDDDDDDDDDDDDDDDDDDDDD33333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffigP߰ͥOɐUY Z3[_ \:`UťPP 5_ UUUUUDLDDDDDDDDDDDDDDDDD33333333333333333333333333333ffffffffffffffffffffffffffffffffb`ffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDfdffffffffff363333wsww"'"wxVf4 Y̛ⰿ UUo_P jhffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDffffffffffff3333wsww"'fxUVDU6QcaU\ ZZ[9UUUUUZZʰܵL Q UYUUUDDDDDDDDDDDDDDDDDDDD;3333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffkiUQ XP R QP˵ _ ʠ0; _Y ZϪ:PˠYUUUULDDDDDDDDDDDDDDDDDD;3333333333333333333333333333fcffffffffffffffffffffffdbffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDfDffffffffff3f3333wsww"'wwUfdYįUlP ʠɥ ljffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffffff3333wsww'Tec ʼn̕[\\YUUU Z\Pť UU UUUUUDDDDDDDDDDDDDDDDDDD3333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffmkofc6J4  <[\U ; 0y :Mſʵ *ZU~ YUUUUDLDDDDDDDDDDDDDDDD3333333333333333333333333333f3fffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDdDffffffffff6f3333wsww"'xgwEVXd ̰ [ nlffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffffff3633wsgeQ5Pʺ  Ō Ȉ_[RY ̪UYZ Z [  ̾=UUUUULDDDDDDDDDDDDDDDDDDD3;33333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffomww"xTU7'sU\0 Upπ ZP,© ɏSYPZ Z_YUYZʰw UUUUDDDDDDDDDDDDDDDDD3;33333333333333333333333333c3ffffffhfffffffffffffffffffffffffffffffffffffffffffffffffffffffDfDDDDDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDdDffffffffff6f3333wsww"'wfwEUda^pnffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFfDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffffD     qoff3633wsww"WxVT"? [ PP ZY%۽ͺ_ ʪ Y P hLo_Y UUUUUDDDDDDDDDDDDDDDDD333333333333333333333333333ywDDDDDDDDDDDDDDDDDDDDDDDDfdffffffff6f33ws"wWPwU`Ĺ/PP[P U0 PʙUUc P_ pPP y uYUUUUDDDDDDDDDDDDDDrp33ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFfDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDdDzx33333333333333333333333333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffsqffffffffff3633ws'whWuw뵿 EYܐ[\-\[P [\% <oɒeYU UYUUUDDDDDDDDDDDDDDDD;333333333333333333{yD@DDDDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffff6f33ws"'WQ{D5V_0ʪҙɚEUY۵ @ YUU ^\UPʙ 0  YUUUUDDDDDDDDDDDDDDtr3333333333fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDDD@DDDDDDDDDDDDDDDDDDDD|z;3333333333333333333333333333fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffusDDDDDDdDffffffffff3f33ws'wPy8FR` YY Z Z-Yo_[\ʡQʫ @ ̜ UYUUUDDDDDDDDDDDDDDDD3333333333}{D@DDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffff6f33ws'P fS  _\@pŵZW| [UP[Ū[[<٫;kȕ e0j 쪠UUUUDDDDDDDDDDDDDvt333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFD@DDDDDDDDDDDD~|3333333333333333333333333333f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffwuDDDDDDDDDDDDDDDDffffffffff3f33ws"wP g`kYग़Z@+ZŸ\ ZˠpS UUUUDDDDDDDDDDDDDDD3;}D@DDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffffff33ws"aR3 k` P_Ϡ_俩U{ Jɕ <_ < ; FU źUYUUDDDDDDDDDDDDDxv33333333333333333333333333c3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffD@DDDD~3;33333333333333333333333333c3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffE     D@DDDDDDDDDDDDDDDDDDDDDDDDDDDDdDffffffffff33ws"h ř/ W_R %\ϻUYPS̪zU[e3; Z_ Y P5 Yp UUUUDLDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffff36sV U ̚,_PUz f [ZKDK̕Z+Uww翵 PjȈ  ̕U W[ ZUYUU33333333333333333333333333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDDDDDDDDD;3333333333333333333333333333fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffD@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffff33's"'*EU ϚjzPʕP Ű\\ Z왠UU j3<33jΫjUv ZUUUULDDDDDDDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfDffffffff36sYPu[UY_)p\ɕ% 3KDD ̯Z|{w PZV̭ ɹ  ٓUYUU3333333333333333333333333333fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDDDDDDDD3333333333333333333333333333f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffD@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffff36'sfʵTL ̟ P ZP𪓠QYPU\;\zl_PUP\83 Xf\@ZY^\~YUUUDLDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDdDffffffff3f'3^h PZ ]ڕkc6fDD{ɐ_{ Ϡ ̠[Z̪P̺u P ۜQZUUUU3;33333333333333333333333333c3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDDDDDDDD3;3333333333333333333333333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffD@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDfdffffffff36'saZU9 0[ UDD P\ʜ\ E Uk Z[PUŠ\Lɶ |૟UUUULDDUPDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffff3f'3j0k Ru𺻥]oeDDff3DDęk {Y\U PSU Zy PP\_YUUUDDDDDDDD33333333333333333333333333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDDDDDDDD;3333333333333333333333333333fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffE     UPUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffff3fw3g"Wd_ɰ X[ P *QQJ5EUfd3DKDU  ~ fWU K Z S [ W[fffffffffffUPUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDdDffffff6fs3"wq[Y̵  ZPl*Fg3dDDD UP ` ʪ UZ[uUUULDDDDDDDD3333333333333333333333333333f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffU P_Zϰź |YUUUUDDDDDDD3;3333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffUPUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDDDfdffffff3fw3"h[YʯY[UРfdUVfD3DKDP U PUUU UZ Ź =pfffffffffffffffffffUPUUUUUUUUUUEUDDDDDDDDDDDDDDDDDDDDDDffffff6fs3'wZqU˯9 Z\iP"!5gûKDD UP U [˟ UYUUDLDDDDDD3;3333333333333333333333333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffZ QŕZ[[YPϰZ [UUUULDDDDDDD33333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffUPUUUUUUDUDDDDDDDDDDDDDDDDDDDDDDDDfDffffff3fw3'xߡ鬏SRՠ ]wvVgfD3DKD U{\ U YUU {ż P\fffffffffffffffffffffffffffUPUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDDDDDffffff6fs3'wϡϰ[IZX ww"fDDD UP ǚY UUULDDDDDDD33333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0̿WZSYZ  Z wwλUYUUUDDDDDDD;3333333333333333333333333333c3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffUPUUUUUUUUDEDDDDDDDDDDDDDDDDDDDDDDfDffffff6fs3wQ𪩩+U P 50xVg6D3DKD UU{ ϪUY ʽJYZ\ fffffffffffffffffffffffffffffffffffUPUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDDDDDfdffff6f33wwtǜu p_1 Yr`s3q'k\ DDD U UU pRPYUUUDDDDDDD3333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff PZ Z U̵ UY U˪ UUUUUDDDDDDD3;3333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffffffffffffffF     fffffffffffffffffffffffffffffffffffffffffffUPUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDDDDDfDffffff33wwX\P ZUct36X'ͪ [UfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffUPUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDfdffff33ws"FK0^Z  WP_ ] g)[  xY UY˥_ YUUUUULDDDDDD33333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffz TUU4EzYUPyUU,"[UUUUZQ:_U;P U[ϿϿ YUUUUUUUUUUUUPUUUUUUUUUUUUPUUDDDDDD333333333333333333333333333333f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffUPUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDdDffffff33wwQzܾZ ʦU_f;6fڐYfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffUPUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDfDffff36w3h4 U U YUU[ҪUY3ZZ Sե ZUUUUUUDDDDDDD;333333333333333333333333333333ffffffffffffffffffffffffffffffffffZ ū`fTVf4E_YUP0Z:U""UUUUUͻZS[P YU]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYDLDDDDD3;3333333333333333333333333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffUPUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDdDffffff33wsqϹ Pü ;aDF6D33fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffUPUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDfDffff36w3 UŜUYU,[ZZYPP_P_ EUYUUUUUDLDDDDD3;3333333333333333333333333333f3ffffffffffffffffffffffffw  pT{wfff4VPU  YUU U",һUUUU۵͙ [ P U"PYpUYUUUUUUUUUUUUUUUUUUUUUYUUUUUUU DDDDDDD;33333333333333333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffUPUUUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDDDffffff33ws"J& K VPU\3333333333f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffUPUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDDDDDdDffFwUU6Du UPTUY"[UURڻJ_[_P[ǟ[Y"̐ ZZUUUUUUUULDDDDDD3333333333333333333333333333333ffffffffffffffffff36'3\ ^"  ,@ewwfwVpUYPU 0{U",һU[UU۵^\Y Z  ZU YUUUUUUUUUUUUUUUUUUUYUUUUUU)LDDDDDD333333333333F     33333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6UPUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDD333333333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f33333333333UPDDDDDDffff36'3HW f{  oviwwgwVpUYUUU TU",һUUUݻ Z ƻ P˽̺U UUUUUUUUUUUUUUUUUU UYUU [UDDDDDDD333UUUUUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDff6fs30pW Z$?U[OW UUUz|  j:"-ݪUi YYEY\ \ \ YUUUUUUUUUUU Z Sʻ_LDDDDDDD3333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f333UPUUUUUUUUUUUUUUUUUUUUUUUU3333333333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333333333333EUDDDDDDDDDDDDfdff3f'3 UP\_^|fFvwxTVP~ UUUUUUU^PTY",һ- * [U &Z |UUUUUUUUUUUUUUUUp[YDLDDDDDUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDDDfdffs3 X\u\v6wsh$g9 UPYŦ+""" u 0U E P UYUUUUUUUU ] [{p_[3\pDDDDDDDD;33333333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3333333UPUUUUUUUUUUUUUUUU3;33333333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f33333333333333333UUUUUUUUUUDEDDDDDDDDDDfDff3fs3ZQN[vS0 wvxVɿwUUUUUUU U Y",һݻ-X?ZPU ʯ ઠYUUUUUUUUUUUUUUU̟%YDLDDDDDDUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDfDffs3ww : """W0g_ @ U,""- _UP5PŜ[}< P ŪUUUUUUU P +Up*˻YDLDDDDDD3;333333333333333333333333333333c3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f333333333UPUUUUUUUU;3333333333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f3333333333333333333UUUUUUUUUUUUUUUUUUEUDDDDDDDDDDdDff6fs3Pr*jWPUgxW UUUUU ĿɯP",ݻݻɐ U U_w_UY\[UYUUUUUUUUUUUUYQ ˹[YDDDDDDDDUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDdDffs6wj"!w""'q["""""""Ux~PYX: Y,"""`ZYTPU9#" >ɼ Z 0 p|_YDDDDDDDDG     3;3333333333333333333333333333333333f3ffffffffffffffffffffffffffffffffffffffffffffffffffff33333333333333333333333ǵǚ UDLDDDDDDDD3333333333333333333333333333333333333333c3ffffffffffffffffffffffffffffffff33333333333333333333333333333333333UPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDff3f!w"ww'w" p""""""""""x_w`<\ Y""""% `PZ \ _?V{ΏZ l_ʩ DDDDDUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDfd6f3333333333s3wwwwwwwwwwww"'"g][yp \YQ̙Y ̙P ɐ谥 Q ˪ȼYY ʐ PDDDD3333333333333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffffffffff6f3333333333333333333333333RU*+ \ɪ˿UDLDDDDDDDD3;333333333333333333333333333333333333333333f3ffffffffffffffffffffffff333333333333333333333333333333333333333UPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDfd6fw"wwwwwwww"'eX"r"wwww""""h Pz_;P YSYU""""""PPŻ[U_˜ʬUk Z_ UpUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDfDff36333333333333w3wwwwwwww"w""h)~  {KWZ\̑Uܙ U Y U Y _ܼŪLDDDDDDDD33333333333333333333333333333333333333fcffffffffffffffffffffffffffffffffffffffffff36333333333333333333333333333  ĜP]u,[ɟK UDDDDDDDDDD;333333333333333333333333333333333333333333333333ffffffffffffff363333333333333333333333333333333333333333333UPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDfDffw3ww3733wsww'w""wwwwww"w"""򚟷Y\]_ U""""PŰU[0\ 0|} ͛ e UPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDUDDDDDDDDffff3f33333333333333w3wwww'w""x \ ϼ\{ ˿ Y\ PU eSɮ U̠Z` ɪ ž UDDDDDDDDD333333333333333333333333333333333333333f3ffffffffffffffffffffffffffffffffffff6f3333333333333333333333333333333͙p"_ , [UULDDDDDDDDDD3;333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333UPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDff3633333333w3ww"'wrwwwwwwww"""qZś~ Z Y UUU P UZϩ[ɐUϩ) Ω ϗUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDfdffffffffff6f33333333w3wwww""xU[5~w[\\PUZ @Y U_PUU ɠ PYP ӟ˙ T굺 UʹG     Ϫ L<\Yş[Z̼e_UYLDDDDDDDDDDD;333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333׻ YUUPZU˰Y\_U Y{o YŹ UDDDDDDDDDDDDD;33333333333333333333333333333333333333333333333333333333333333333333333333333333333333UPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDdDffffffffffff6f33333333wsww"'xV]X_` w YP UUYU  UU ̕333333333333333UPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDfDffffffffffffff33333333wwTZ\Z ːPP\ \ UZ P˛P ^UZ˕ -U UDDDDDDDDDDD3;3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ٚ PYYP ɪʰ7U YzY[ YLDDDDDDDDDDDD3;3333333333333333333333333333333333333333333333333333333333333333333333333333UPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEUDDDDDDDDffffffffffffff3f33333333ww"wx%a)[ +˻ɵ P  ʚ [[UUU33333333333333333333333UPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDEDDDDDDDDffffffffffffff3f333333ws"xW  Y ZP㳪 %UZw̻\*PP\  YUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD̟DDD3;33333333333333333333333333333333333333333333333333333333333  _ U ) P zUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD Pː[DDD3333333333333333333333333333333333333333333333333DD  f`ffffffffffffffffffffffffffffffffffffVfUUUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDDDfDff6f'3VdĠŷ>\Eż[[ W̹J[_,ɻU[UU  ƚw~ww̼j\̅]k P  f`ffffffffffffffffffffffffffffffffffffffffUfUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDfDff3fws'w"hz8jP̺ˊյ\U 5UePUlT̙𺹩   ~UULDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD [ DLD3333333333333333333333333333333333333333333333333333333333  5 jа _\j YUULDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD /R_ʜLDDD3333333333333333333333333333333333333333333333DDDDI       f`ffffffffffffffffffffffffffffffffffffffffffUUUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDdDff3fw3ww"'"XY ꙜUY UK0 ^3Z \"[ \̙ U  DKf`ffffffffffffffffffffffffffffffffffffffffffffUfUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDfDff3633ww"wŪ ZN_ɛ9U    LYY ; ZP+ _p UYDLDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD PY_\[_LDDD333333333333333333333333333333333333333333KDDDDD  \ZP UUZIzUp U:ZP  Y; UYULDDDDDDDDDDDDDDDDDDDDDDDDDD UYUUUUϙPPT̬YDDD;33333333333333333333333  f`ffffffffffffffffffffffffffffffffffffffffffUVUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDff6f33ww"w" \Y [WZ3> P  Š",Y\   D f`ffffffffffffffffffffffffffffffffffffffffffffVfUUUUUUUUUUUUUUUUDEDDDDDDDDDDDDfDff3f33w3"wpˡY[ S] \\  ɜ PUiUJ/PIU5 ?UUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD UI DDD333333333333333333333333333333333333333DDDDDDD  0YP QZ\ YPUUYК \ʥʬUPUPU:K ŵZUPZ YUUUDDDDDDDDDDDDDDDDDDDDDDDDDPPYU𙙺0YLDD333333333333333  f`ffffffffffffffffffffffffffffffffffffffffffVfUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDDDffff33wsww""G+P `Uɯ ̠Š̪Z Yw Q "Y  KU^Uf`ffffffffffffffffffffffffffffffffffffffffffffffUUUUUUUUUUUUUUUUDUDDDDDDDDDDDDdDff6f33s3'w"u뺫P \p  U\Pk\ʹ[ ̕P YIZP P`_ {PYULDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUP Z\UDDDD;3333333333333333333333333333333333KDDDD  ZPU¢PiYP 353PO\ O YUU\ \@ ZP R ZY] UUUUDDDDDDDDDDDDDDDDDDDDDD P YDDD  Df`ffffffffffffffffffffffffffffffffffffffffffffUUUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDfdff36s3ww"'hZp< \P Z@UY Y  D PUUf`ffffffffffffffffffffffffffffffffffffffffffffffUfUUUUUUUUUUUUUUEUDDDDDDDDDDDDDDff6f3333wwq" ?U    [YUS%Y PPZːZ P yl[X˪ UUDLDDDDDDDDDDDDDDDDDDDDDDDDDDDDPUUUUUUPUPYPDLDD3;3333333333333333333333333333 ɜ?QU YP[а \UY8[Z[ˠ ŜP ?YUUUȺ`5[ϠP0̩U UYUUUUDLDDDDDDDDDDDDDDDDDDPy pZ rp  pYDDDJ      ! DK)K %\U " 3`/U`Z # ! $ "3`/U`Z #J     K     K     L     L     M     M     N     N     O     O