diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/CHANGELOG ppc_diag/CHANGELOG --- ppc_diag-1.0.2/CHANGELOG Fri Feb 7 14:05:01 2003 +++ ppc_diag/CHANGELOG Mon May 12 16:01:56 2003 @@ -1,3 +1,23 @@ +Version 1.0.4 + +o Implemented general serial console support controlled by config defines + SERIAL_SMC = {1,2} or SERIAL_SCC = {1,2,3,4} to handle console on + SMC1, SMC2, SCC1, SCC2, SCC3, or SCC4 (tested with console on SMC1 and SCC1) + +o Allow an upper limit of memory size to be supplied to memory calculation + code, instead of defaulting to the constant 512MB + +o Fixed problem with timing loops when running without ppcboot + +o Added NAND flash tests + +o Added Red Box tests + +Version 1.0.3 + +o Moved the gendiags.sh variables into the Makefile to make them easy to + override if necessary. + Version 1.0.2 o Added instruction cache support. The instruction cache is disabled at diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/TODO ppc_diag/TODO --- ppc_diag-1.0.2/TODO Fri Feb 7 14:05:01 2003 +++ ppc_diag/TODO Thu May 1 11:31:26 2003 @@ -31,3 +31,6 @@ testing only after removing the ethernet cable, or after attaching a loopback connector (that's partly why this testing is not done during power-up). +- NAND code isn't ready to run with the icache on; the processor is slow + enough with caching disabled that certain delays were unnecessary. + diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/build/Makefile ppc_diag/build/Makefile --- ppc_diag-1.0.2/build/Makefile Fri Feb 7 14:45:13 2003 +++ ppc_diag/build/Makefile Thu May 1 11:31:26 2003 @@ -20,7 +20,7 @@ # MA 02111-1307 USA # -DIAG_VERSION = "Version 1.0.2" +DIAG_VERSION = "Version 1.0.4" COPYRIGHT = "(c) 2002, VCT Labs" VERSION_FILE = "../diag_ui/version.c" VERSION_OBJ = "../diag_ui/version.o" @@ -68,11 +68,13 @@ OBJDUMP = $(CROSS_COMPILE)objdump TFTPBASEDIR = /ppcboot +MKIMAGE = /usr/local/powerpc-linux/mkimage #GEN_DIAG = /usr/local/powerpc-linux/gendiags.sh $(TARGET) diags $(CODE_BASE_HEX) GEN_DIAG = ./gendiags.sh $(TARGET) diags $(CODE_BASE_HEX) $(TFTPBASEDIR) export VERSION CONFIG_SHELL HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \ - CPP AR NM STRIP OBJCOPY OBJDUMP MAKE MAKEFILES GENKSYMS MODFLAGS MKDEP + CPP AR NM STRIP OBJCOPY OBJDUMP MAKE MAKEFILES GENKSYMS MODFLAGS MKDEP \ + MKIMAGE # # standard CFLAGS @@ -100,9 +102,11 @@ fec \ led \ memory \ + nflash \ nvram \ greenbox_dpram \ greenbox_xilinx \ + redbox \ reg \ rtc \ scc_eth \ diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/build/gendiags.sh ppc_diag/build/gendiags.sh --- ppc_diag-1.0.2/build/gendiags.sh Thu Jan 9 16:27:46 2003 +++ ppc_diag/build/gendiags.sh Tue Feb 11 16:03:43 2003 @@ -21,9 +21,6 @@ # MA 02111-1307 USA # -MKIMAGEDIR=/usr/local/powerpc-linux -BINUTILSPATH=/usr/local/bin/powerpc-linux- - function usage() { echo "usage: $0 [LABEL] [ENTRY]" @@ -56,8 +53,8 @@ fi #### Test for boot to standalone program -${BINUTILSPATH}objcopy -O binary $FILE $FILE.raw; gzip $FILE.raw -$MKIMAGEDIR/mkimage -n "$LABEL" -A ppc -O ppcboot -T standalone -C gzip -a $ENTRY -e $ENTRY -d $FILE.raw.gz $FILE.img +${OBJCOPY} -O binary $FILE $FILE.raw; gzip $FILE.raw +${MKIMAGE} -n "$LABEL" -A ppc -O ppcboot -T standalone -C gzip -a $ENTRY -e $ENTRY -d $FILE.raw.gz $FILE.img #powerpc-linux-objcopy -I binary -O srec $FILE.img $FILE.srec cp -f $FILE.img $TFTPPATH diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/build/link.cmd ppc_diag/build/link.cmd --- ppc_diag-1.0.2/build/link.cmd Wed Dec 31 16:00:00 1969 +++ ppc_diag/build/link.cmd Mon May 12 14:52:26 2003 @@ -0,0 +1,94 @@ +/* Linker script +Mon May 12 14:52:26 PDT 2003 +automatically generated by "make link" */ +MEMORY +{ + text (rx) : ORIGIN = 0x2000, LENGTH = 504K + rodata (rwx) : ORIGIN = 0x00080000, LENGTH = 64K + data (rwx) : ORIGIN = 0x00090000, LENGTH = 192K + bss (rwx) : ORIGIN = 0x000C0000, LENGTH = 256K +} +SECTIONS +{ + .text : { *(.text) } >text + .rodata : { *(.rodata) } >rodata + .data : { *(.data) } >data + .bss : { *(.bss) } >bss +} +STARTUP(../entry/start.o) +INPUT(../console/serial.o) +INPUT(../diag_ui/version.o) +INPUT(../diag_ui/center.o) +INPUT(../diag_ui/clear_screen.o) +INPUT(../diag_ui/diag_menu.o) +INPUT(../diag_ui/system_log.o) +INPUT(../diag_ui/run_test.o) +INPUT(../diag_ui/input_hdlr.o) +INPUT(../diag_ui/option_input.o) +INPUT(../diag_ui/option_menu.o) +INPUT(../diag_ui/submenu_input.o) +INPUT(../diag_ui/sub_menu.o) +INPUT(../diag_ui/main_menu.o) +INPUT(../diag_ui/main_input.o) +INPUT(../diag_ui/power_up.o) +INPUT(../diag_ui/nv_journal.o) +INPUT(../entry/diag_init.o) +INPUT(../eth_tests/eth_fec_test.o) +INPUT(../eth_tests/eth_scc1_test.o) +INPUT(../eth_tests/eth_menu.o) +INPUT(../eth_tests/eth_err.o) +INPUT(../eth_tests/crossover.o) +INPUT(../fec/fec.o) +INPUT(../led/led_test.o) +INPUT(../led/led_menu.o) +INPUT(../led/led_err.o) +INPUT(../memory/mem_test.o) +INPUT(../memory/mem_menu.o) +INPUT(../memory/mem_err.o) +INPUT(../memory/mem_init.o) +INPUT(../memory/dma_test.o) +INPUT(../memory/mem_comp.o) +INPUT(../nflash/nandf_ops.o) +INPUT(../nflash/nflash_err.o) +INPUT(../nflash/nflash_menu.o) +INPUT(../nflash/nflash_init.o) +INPUT(../nflash/nflash_test.o) +INPUT(../nvram/nvram.o) +INPUT(../nvram/nvram_err.o) +INPUT(../nvram/nvram_menu.o) +INPUT(../greenbox_dpram/gb_dpram_menu.o) +INPUT(../greenbox_dpram/gb_dpram_err.o) +INPUT(../greenbox_dpram/gb_dpram_test.o) +INPUT(../greenbox_xilinx/gb_xilinx_menu.o) +INPUT(../greenbox_xilinx/gb_xilinx_err.o) +INPUT(../greenbox_xilinx/gb_xilinx_test.o) +INPUT(../greenbox_xilinx/gb_xilinx_intr.o) +INPUT(../redbox/redbox_test.o) +INPUT(../redbox/redbox_menu.o) +INPUT(../redbox/redbox_err.o) +INPUT(../redbox/xmit_buf.o) +INPUT(../reg/reg_test.o) +INPUT(../reg/reg_menu.o) +INPUT(../rtc/rtc.o) +INPUT(../rtc/date.o) +INPUT(../rtc/rtc_menu.o) +INPUT(../scc_eth/scc.o) +INPUT(../system/ticks.o) +INPUT(../system/cache.o) +INPUT(../system/ctype.o) +INPUT(../system/string.o) +INPUT(../system/vsprintf.o) +INPUT(../system/printf.o) +INPUT(../system/time.o) +INPUT(../system/cpu.o) +INPUT(../system/dboard_cfg.o) +INPUT(../system/timer.o) +INPUT(../system/interrupts.o) +INPUT(../util/speed.o) +INPUT(../util/mem_calc.o) +INPUT(../util/mem_display.o) +INPUT(../util/prandm.o) +INPUT(../util/pkt_stat.o) +INPUT(../util/detect_db.o) +ENTRY(start_here) +OUTPUT(ppc_diag) Binary files ppc_diag-1.0.2/build/ppc_diag.img and ppc_diag/build/ppc_diag.img differ diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/console/.cvsignore ppc_diag/console/.cvsignore --- ppc_diag-1.0.2/console/.cvsignore Fri Jan 3 10:40:06 2003 +++ ppc_diag/console/.cvsignore Thu May 1 11:31:26 2003 @@ -1 +1 @@ -Makefile .depend .*.swp *.out +Makefile .depend .*.swp *.out *.dmp diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/console/.depend ppc_diag/console/.depend --- ppc_diag-1.0.2/console/.depend Wed Dec 31 16:00:00 1969 +++ ppc_diag/console/.depend Mon May 12 14:51:51 2003 @@ -0,0 +1,4 @@ +serial.o: serial.c \ + /home/speedy1/build/ppc_diag/includes/ppcboot.h \ + commproc.h \ + serial.h diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/console/console.list ppc_diag/console/console.list --- ppc_diag-1.0.2/console/console.list Fri Jan 3 10:40:06 2003 +++ ppc_diag/console/console.list Thu May 1 11:31:26 2003 @@ -1,6 +1,6 @@ # list of console files -HEADERS="8xx_immap.h command.h commproc.h" +HEADERS="8xx_immap.h command.h commproc.h serial.h" AS_SOURCES= diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/console/serial.c ppc_diag/console/serial.c --- ppc_diag-1.0.2/console/serial.c Mon Jul 29 10:09:56 2002 +++ ppc_diag/console/serial.c Thu May 1 11:31:26 2003 @@ -23,11 +23,20 @@ #include "ppcboot.h" #include "commproc.h" +#include "serial.h" -#define SMC_INDEX 0 -#undef SCC_INDEX -#define PROFF_SMC PROFF_SMC1 -#define CPM_CR_CH_SMC CPM_CR_CH_SMC1 +static struct serial_port console_table[] = { + /* + * parameter irq port cpm port + * offset type channel num + */ + { PROFF_SMC1, CPMVEC_SMC1, SMC, CPM_CR_CH_SMC1, 0 }, /* SMC1 */ + { PROFF_SMC2, CPMVEC_SMC2, SMC, CPM_CR_CH_SMC2, 1 }, /* SMC2 */ + { PROFF_SCC1, CPMVEC_SCC1, SCC, CPM_CR_CH_SCC1, 0 }, /* SCC1 */ + { PROFF_SCC2, CPMVEC_SCC2, SCC, CPM_CR_CH_SCC2, 1 }, /* SCC2 */ + { PROFF_SCC3, CPMVEC_SCC3, SCC, CPM_CR_CH_SCC3, 2 }, /* SCC3 */ + { PROFF_SCC4, CPMVEC_SCC4, SCC, CPM_CR_CH_SCC4, 3 }, /* SCC4 */ +}; /* * Minimal serial functions needed to use one of the SMC ports @@ -38,11 +47,16 @@ serial_init (ulong cpu_clock, int baudrate) { volatile immap_t *im = (immap_t *)CFG_IMMR; - volatile smc_t *sp; + volatile smc_t *smcp; + volatile scc_t *sccp; volatile smc_uart_t *up; + volatile scc_uart_t *sup; volatile cbd_t *tbdf, *rbdf; - volatile cpm8xx_t *cp = &(im->im_cpm); + volatile cpm8xx_t *cpmp = &(im->im_cpm); uint dpaddr; + struct serial_port *port_info; + + port_info = &(console_table[SERIAL_INDEX]); /* * Reset CPM -- taken from cpu_init.c @@ -54,12 +68,47 @@ /* initialize pointers to SMC */ - sp = (smc_t *) &(cp->cp_smc[SMC_INDEX]); - up = (smc_uart_t *) &cp->cp_dparam[PROFF_SMC]; + if (port_info->type == SMC) + { + smcp = (smc_t *) &(cpmp->cp_smc[port_info->index]); + up = (smc_uart_t *) &cpmp->cp_dparam[port_info->param_offset]; + + /* Disable transmitter/receiver. + */ + smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); + + /* Use all relevant port B pins as SMC signals (not general IO) + */ + cpmp->cp_pbpar |= 0x00000cc0; + cpmp->cp_pbdir &= ~0x00000cc0; + cpmp->cp_pbodr &= ~0x00000cc0; + } + else + { + sccp = (scc_t *) &(cpmp->cp_scc[port_info->index]); + sup = (scc_uart_t *) &cpmp->cp_dparam[port_info->param_offset]; + + /* Disable transmitter/receiver. + */ + sccp->scc_sccm &= ~(SMCMR_REN | SMCMR_TEN); + sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); + + /* Use all relevant port A pins as SCC signals (not general IO) + */ + im->im_ioport.iop_papar |= 0x00ff; + im->im_ioport.iop_padir &= ~0x00ff; + im->im_ioport.iop_paodr &= ~0x00ff; + + /* Since we don't yet do modem control, connect the port C pins + * as general purpose I/O. This will assert CTS and CD for the + * SCC ports. + */ + im->im_ioport.iop_pcpar &= ~(0x30 << (2*port_info->index)); + im->im_ioport.iop_pcdir |= (0x30 << (2*port_info->index)); + im->im_ioport.iop_pcso &= ~(0x30 << (2*port_info->index)); + im->im_ioport.iop_pcdat &= ~(0x30 << (2*port_info->index)); - /* Disable transmitter/receiver. - */ - sp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); + } /* Enable SDMA. */ @@ -79,12 +128,6 @@ im->im_sdma.sdma_sdmr = 0x00; #endif - /* Use Port B for SMC1 instead of other functions. - */ - cp->cp_pbpar |= 0x000000c0; - cp->cp_pbdir &= ~0x000000c0; - cp->cp_pbodr &= ~0x000000c0; - /* Set the physical address of the host memory buffers in * the buffer descriptors. */ @@ -101,7 +144,7 @@ * damm: allocating space after the two buffers for rx/tx data */ - rbdf = (cbd_t *)&cp->cp_dpmem[dpaddr]; + rbdf = (cbd_t *)&cpmp->cp_dpmem[dpaddr]; rbdf->cbd_bufaddr = (uint) (rbdf+2); rbdf->cbd_sc = 0; tbdf = rbdf + 1; @@ -110,20 +153,48 @@ /* Set up the uart parameters in the parameter ram. */ - up->smc_rbase = dpaddr; - up->smc_tbase = dpaddr+sizeof(cbd_t); - up->smc_rfcr = SMC_EB; - up->smc_tfcr = SMC_EB; + if (port_info->type == SMC) + { + up->smc_rbase = dpaddr; + up->smc_tbase = dpaddr+sizeof(cbd_t); + up->smc_rfcr = SMC_EB; + up->smc_tfcr = SMC_EB; + } + else + { + sup->scc_genscc.scc_rbase = dpaddr; + sup->scc_genscc.scc_tbase = dpaddr+sizeof(cbd_t); + sup->scc_genscc.scc_rfcr = SMC_EB; + sup->scc_genscc.scc_tfcr = SMC_EB; + } /* Set UART mode, 8 bit, no parity, one stop. - * Enable receive and transmit. */ - sp->smc_smcmr = smcr_mk_clen(9) | SMCMR_SM_UART; + if (port_info->type == SMC) + { + smcp->smc_smcmr = smcr_mk_clen(9) | SMCMR_SM_UART; + } + else + { + sccp->scc_gsmrh = 0; + sccp->scc_gsmrl = + (SCC_GSMRL_MODE_UART | SCC_GSMRL_TDCR_16 | SCC_GSMRL_RDCR_16); + } /* Mask all interrupts and remove anything pending. */ - sp->smc_smcm = 0; - sp->smc_smce = 0xff; + if (port_info->type == SMC) + { + smcp->smc_smcm = 0; + smcp->smc_smce = 0xff; + } + else + { + sccp->scc_sccm = 0; + sccp->scc_scce = 0xffff; + sccp->scc_dsr = 0x7e7e; + sccp->scc_psmr = 0x3000; + } /* Set up the baud rate generator. */ @@ -136,23 +207,55 @@ /* Single character receive. */ - up->smc_mrblr = 1; - up->smc_maxidl = 0; + if (port_info->type == SMC) + { + up->smc_mrblr = 1; + up->smc_maxidl = 0; + } + else + { + sup->scc_genscc.scc_mrblr = 1; + sup->scc_maxidl = 0; + sup->scc_brkcr = 1; + sup->scc_parec = 0; + sup->scc_frmec = 0; + sup->scc_nosec = 0; + sup->scc_brkec = 0; + sup->scc_uaddr1 = 0; + sup->scc_uaddr2 = 0; + sup->scc_toseq = 0; + sup->scc_char1 = 0x8000; + sup->scc_char2 = 0x8000; + sup->scc_char3 = 0x8000; + sup->scc_char4 = 0x8000; + sup->scc_char5 = 0x8000; + sup->scc_char6 = 0x8000; + sup->scc_char7 = 0x8000; + sup->scc_char8 = 0x8000; + sup->scc_rccm = 0xc0ff; + } /* Initialize Tx/Rx parameters. */ - while (cp->cp_cpcr & CPM_CR_FLG) /* wait if cp is busy */ + while (cpmp->cp_cpcr & CPM_CR_FLG) /* wait if cp is busy */ ; - cp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_SMC, CPM_CR_INIT_TRX) | CPM_CR_FLG; + cpmp->cp_cpcr = mk_cr_cmd(port_info->channel, CPM_CR_INIT_TRX) | CPM_CR_FLG; - while (cp->cp_cpcr & CPM_CR_FLG) /* wait if cp is busy */ + while (cpmp->cp_cpcr & CPM_CR_FLG) /* wait if cp is busy */ ; /* Enable transmitter/receiver. */ - sp->smc_smcmr |= SMCMR_REN | SMCMR_TEN; + if (port_info->type == SMC) + { + smcp->smc_smcmr |= SMCMR_REN | SMCMR_TEN; + } + else + { + sccp->scc_gsmrl |= (SCC_GSMRL_ENR | SCC_GSMRL_ENT); + } } @@ -160,17 +263,17 @@ serial_setbrg (ulong cpu_clock, int baudrate) { volatile immap_t *im = (immap_t *)CFG_IMMR; - volatile cpm8xx_t *cp = &(im->im_cpm); + volatile cpm8xx_t *cpmp = &(im->im_cpm); /* Set up the baud rate generator. * See 8xx_io/commproc.c for details. * - * Wire BRG1 to SMCx + * Wire BRG1 to SMCx and SCCx */ + cpmp->cp_simode = 0x00000000; + cpmp->cp_sicr = 0x00000000; - cp->cp_simode = 0x00000000; - - cp->cp_brgc1 = + cpmp->cp_brgc1 = (((cpu_clock / 16 / baudrate)-1) << 1) | CPM_BRG_EN; } @@ -181,15 +284,27 @@ volatile cbd_t *tbdf; volatile char *buf; volatile smc_uart_t *up; + volatile scc_uart_t *sup; volatile immap_t *im = (immap_t *)CFG_IMMR; volatile cpm8xx_t *cpmp = &(im->im_cpm); + struct serial_port *port_info; + + port_info = &(console_table[SERIAL_INDEX]); if (c == '\n') serial_putc ('\r'); - up = (smc_uart_t *)&cpmp->cp_dparam[PROFF_SMC]; + if (port_info->type == SMC) + { + up = (smc_uart_t *)&cpmp->cp_dparam[port_info->param_offset]; + tbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_tbase]; + } + else + { + sup = (scc_uart_t *) &cpmp->cp_dparam[port_info->param_offset]; + tbdf = (cbd_t *)&cpmp->cp_dpmem[sup->scc_genscc.scc_tbase]; + } - tbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_tbase]; /* Wait for last character to go. */ @@ -218,13 +333,24 @@ volatile cbd_t *rbdf; volatile unsigned char *buf; volatile smc_uart_t *up; + volatile scc_uart_t *sup; volatile immap_t *im = (immap_t *)CFG_IMMR; volatile cpm8xx_t *cpmp = &(im->im_cpm); unsigned char c; + struct serial_port *port_info; - up = (smc_uart_t *)&cpmp->cp_dparam[PROFF_SMC]; + port_info = &(console_table[SERIAL_INDEX]); - rbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_rbase]; + if (port_info->type == SMC) + { + up = (smc_uart_t *)&cpmp->cp_dparam[port_info->param_offset]; + rbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_rbase]; + } + else + { + sup = (scc_uart_t *) &cpmp->cp_dparam[port_info->param_offset]; + rbdf = (cbd_t *)&cpmp->cp_dpmem[sup->scc_genscc.scc_rbase]; + } /* Wait for character to show up. */ @@ -243,12 +369,23 @@ { volatile cbd_t *rbdf; volatile smc_uart_t *up; + volatile scc_uart_t *sup; volatile immap_t *im = (immap_t *)CFG_IMMR; volatile cpm8xx_t *cpmp = &(im->im_cpm); + struct serial_port *port_info; - up = (smc_uart_t *)&cpmp->cp_dparam[PROFF_SMC]; + port_info = &(console_table[SERIAL_INDEX]); - rbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_rbase]; + if (port_info->type == SMC) + { + up = (smc_uart_t *)&cpmp->cp_dparam[port_info->param_offset]; + rbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_rbase]; + } + else + { + sup = (scc_uart_t *) &cpmp->cp_dparam[port_info->param_offset]; + rbdf = (cbd_t *)&cpmp->cp_dpmem[sup->scc_genscc.scc_rbase]; + } return(!(rbdf->cbd_sc & BD_SC_EMPTY)); } diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/console/serial.h ppc_diag/console/serial.h --- ppc_diag-1.0.2/console/serial.h Wed Dec 31 16:00:00 1969 +++ ppc_diag/console/serial.h Thu May 1 11:31:26 2003 @@ -0,0 +1,54 @@ +/* + * (C) Copyright 2003 + * Stephanie Lockwood-Childs, VCT Labs, sjl@vctlabs.com. + * + * See file CREDITS for the list of contributors to this project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef __SERIAL_H +#define __SERIAL_H + +#include "diags.h" + +#ifdef SERIAL_SMC + #if !(SERIAL_SMC >= 1 && SERIAL_SMC <= 2) + #error "bad value for SERIAL_SMC (must be 1 or 2)" + #endif +#define SERIAL_INDEX (SERIAL_SMC - 1) +#elif defined(SERIAL_SCC) + #if !(SERIAL_SCC >= 1 && SERIAL_SCC <= 4) + #error "bad value for SERIAL_SCC (must be between 1 and 4)" + #endif +#define SERIAL_INDEX (SERIAL_SCC + 1) +#else +#error "no console serial port defined (define SERIAL_SMC or SERIAL_SCC)" +#endif + +struct serial_port +{ + int param_offset; + int irq; + int type; + int channel; + int index; +}; + +#define SMC 1 +#define SCC 2 + +#endif /* __SERIAL_H */ diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/diag_ui/.cvsignore ppc_diag/diag_ui/.cvsignore --- ppc_diag-1.0.2/diag_ui/.cvsignore Fri Jan 3 10:40:06 2003 +++ ppc_diag/diag_ui/.cvsignore Thu May 1 11:31:26 2003 @@ -1 +1 @@ -Makefile .depend version.c .*.swp *.out +Makefile .depend version.c .*.swp *.out *.dmp diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/diag_ui/.depend ppc_diag/diag_ui/.depend --- ppc_diag-1.0.2/diag_ui/.depend Wed Dec 31 16:00:00 1969 +++ ppc_diag/diag_ui/.depend Mon May 12 14:51:52 2003 @@ -0,0 +1,92 @@ +center.o: center.c \ + /home/speedy1/build/ppc_diag/includes/string.h \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + center.h +clear_screen.o: clear_screen.c \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + clear_screen.h +diag_menu.o: diag_menu.c \ + /home/speedy1/build/ppc_diag/includes/diags.h \ + diag_menu.h +system_log.o: system_log.c \ + /home/speedy1/build/ppc_diag/includes/ppcboot.h \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + /home/speedy1/build/ppc_diag/includes/string.h \ + /home/speedy1/build/ppc_diag/includes/date.h \ + system_log.h +run_test.o: run_test.c \ + /home/speedy1/build/ppc_diag/includes/ppcboot.h \ + /home/speedy1/build/ppc_diag/includes/diags.h \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + system_log.h \ + /home/speedy1/build/ppc_diag/includes/led_test.h \ + run_test.h +input_hdlr.o: input_hdlr.c \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + /home/speedy1/build/ppc_diag/includes/string.h \ + input_hdlr.h +option_input.o: option_input.c \ + /home/speedy1/build/ppc_diag/includes/string.h \ + /home/speedy1/build/ppc_diag/includes/diags.h \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + diag_menu.h \ + input_hdlr.h \ + option_menu.h \ + option_input.h +option_menu.o: option_menu.c \ + /home/speedy1/build/ppc_diag/includes/diags.h \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + center.h \ + clear_screen.h \ + option_menu.h \ + option_input.h +submenu_input.o: submenu_input.c \ + /home/speedy1/build/ppc_diag/includes/string.h \ + /home/speedy1/build/ppc_diag/includes/diags.h \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + option_menu.h \ + run_test.h \ + input_hdlr.h \ + submenu_input.h +sub_menu.o: sub_menu.c \ + /home/speedy1/build/ppc_diag/includes/diags.h \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + /home/speedy1/build/ppc_diag/includes/date.h \ + sub_menu.h \ + center.h \ + clear_screen.h \ + submenu_input.h +main_menu.o: main_menu.c \ + /home/speedy1/build/ppc_diag/includes/diags.h \ + /home/speedy1/build/ppc_diag/includes/string.h \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + /home/speedy1/build/ppc_diag/includes/detect_db.h \ + /home/speedy1/build/ppc_diag/includes/date.h \ + center.h \ + clear_screen.h \ + diag_menu.h \ + main_input.h +main_input.o: main_input.c \ + /home/speedy1/build/ppc_diag/includes/string.h \ + /home/speedy1/build/ppc_diag/includes/diags.h \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + diag_menu.h \ + sub_menu.h \ + run_test.h \ + system_log.h \ + nv_journal.h \ + input_hdlr.h \ + main_input.h +power_up.o: power_up.c \ + /home/speedy1/build/ppc_diag/includes/string.h \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + /home/speedy1/build/ppc_diag/includes/diags.h \ + diag_menu.h \ + run_test.h +nv_journal.o: nv_journal.c \ + /home/speedy1/build/ppc_diag/includes/diags.h \ + /home/speedy1/build/ppc_diag/includes/printf.h \ + /home/speedy1/build/ppc_diag/includes/string.h \ + input_hdlr.h \ + /home/speedy1/build/ppc_diag/includes/nvram.h \ + nv_journal.h diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/diag_ui/diag_menu.c ppc_diag/diag_ui/diag_menu.c --- ppc_diag-1.0.2/diag_ui/diag_menu.c Thu Jan 9 16:27:46 2003 +++ ppc_diag/diag_ui/diag_menu.c Thu May 1 11:31:26 2003 @@ -35,6 +35,9 @@ #ifdef ENABLE_NVRAM_SUPPORT extern test_submenu_package nvram_package; #endif +#ifdef ENABLE_NAND_FLASH_SUPPORT +extern test_submenu_package nflash_package; +#endif extern test_submenu_package memory_package; #ifdef ENABLE_FEC_SUPPORT extern test_submenu_package fec_ethernet_package; @@ -47,6 +50,9 @@ extern test_submenu_package gb_dpram_package; extern test_submenu_package gb_xilinx_package; #endif +#ifdef ENABLE_RED_BOX_SUPPORT +extern test_submenu_package redbox_package; +#endif void empty_function( void ); @@ -64,6 +70,9 @@ #ifdef ENABLE_NVRAM_SUPPORT &nvram_package, #endif +#ifdef ENABLE_NAND_FLASH_SUPPORT + &nflash_package, +#endif &memory_package, #ifdef ENABLE_FEC_SUPPORT &fec_ethernet_package, @@ -75,6 +84,9 @@ #ifdef ENABLE_GREEN_BOX_SUPPORT &gb_dpram_package, &gb_xilinx_package, +#endif +#ifdef ENABLE_RED_BOX_SUPPORT + &redbox_package, #endif }; diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/diag_ui/diag_menu.h ppc_diag/diag_ui/diag_menu.h --- ppc_diag-1.0.2/diag_ui/diag_menu.h Thu Jan 9 16:27:46 2003 +++ ppc_diag/diag_ui/diag_menu.h Thu May 1 11:31:26 2003 @@ -34,6 +34,9 @@ #ifdef ENABLE_NVRAM_SUPPORT NVRAMPackage, #endif +#ifdef ENABLE_NAND_FLASH_SUPPORT + nflashPackage, +#endif MemoryPackage, #ifdef ENABLE_FEC_SUPPORT FECEthernetPackage, @@ -45,6 +48,9 @@ #ifdef ENABLE_GREEN_BOX_SUPPORT GreenBoxDPRAMPackage, GreenBoxXilinxPackage, +#endif +#ifdef ENABLE_RED_BOX_SUPPORT + RedBoxPackage, #endif LastPackage } package_elements; diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/diag_ui/main_menu.c ppc_diag/diag_ui/main_menu.c --- ppc_diag-1.0.2/diag_ui/main_menu.c Mon Jan 13 15:53:53 2003 +++ ppc_diag/diag_ui/main_menu.c Thu May 1 11:31:26 2003 @@ -64,6 +64,9 @@ { /* disable green/red box submenus */ all_packages[GreenBoxDPRAMPackage]->pkg_enabled = DisableSubmenu; all_packages[GreenBoxXilinxPackage]->pkg_enabled = DisableSubmenu; +#ifdef ENABLE_RED_BOX_SUPPORT + all_packages[RedBoxPackage]->pkg_enabled = DisableSubmenu; +#endif } #endif /* ENABLE_GREEN_BOX_SUPPORT */ /* ^^^ end of run-time menu alterations ^^^ */ diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/diag_ui/version.c ppc_diag/diag_ui/version.c --- ppc_diag-1.0.2/diag_ui/version.c Fri Feb 7 18:14:15 2003 +++ ppc_diag/diag_ui/version.c Mon May 12 14:53:03 2003 @@ -1,2 +1,2 @@ -char diag_version[] = "Version 1.0.2"; +char diag_version[] = "Version 1.0.4"; char copyright[] = "(c) 2002, VCT Labs"; diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/documents/diag_developer_guide.lyx ppc_diag/documents/diag_developer_guide.lyx --- ppc_diag-1.0.2/documents/diag_developer_guide.lyx Fri Feb 7 14:44:23 2003 +++ ppc_diag/documents/diag_developer_guide.lyx Tue Feb 11 16:16:50 2003 @@ -437,6 +437,11 @@ . This should be the same directory where the tftp server application looks when sending files to a tftp client. +\layout Itemize + +MKIMAGE - Points to the mkimage program built during the PPCBoot build process. + The 'make standalone' make target uses this program to convert the ppc_diag + elf executable into an image file loadable by PPCBoot. \layout Standard The following sections describe the available make @@ -529,9 +534,9 @@ target that will convert the diagnostics elf file into a .img file (a format usable by PPCBoot), and place it into the TFTPBASEDIR path specified in the Makefile. - For this to work properly, make sure that MKIMAGEDIR in gendiags.sh points - to PPCBoot's mkimage program, and that BINUTILSPATH in gendiags.sh points - to the path for the target's version of objcopy. + For this to work properly, make sure that MKIMAGE in the Makefile points + to PPCBoot's mkimage program, and that OBJCOPY in the Makefile points to + the path for the target's version of objcopy. \layout Chapter Diagnostics Code Walkthrough diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/documents/diag_developer_guide.ps ppc_diag/documents/diag_developer_guide.ps --- ppc_diag-1.0.2/documents/diag_developer_guide.ps Fri Feb 7 14:58:19 2003 +++ ppc_diag/documents/diag_developer_guide.ps Mon May 12 15:26:49 2003 @@ -9,7 +9,7 @@ %DVIPSCommandLine: dvips -t letter -o diag_developer_guide.ps %+ diag_developer_guide.dvi %DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2003.02.07:1458 +%DVIPSSource: TeX output 2003.05.12:1526 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -1764,52 +1764,40 @@ 03D81FF8EB07F8000FEC1FF06CB4EBFFE06C90B55AC692CFFC6D13FC011F13F001011380 69857CDB72>121 D E %EndDVIPSBitmapFont -%DVIPSBitmapFont: Fq ecrm1200 12 13 -/Fq 13 122 df<14FF010713E090381F81F890383E007C01FC133F4848EB1F8049130F48 +%DVIPSBitmapFont: Fq ecrm1200 12 9 +/Fq 9 122 df<14FF010713E090381F81F890383E007C01FC133F4848EB1F8049130F48 48EB07C04848EB03E0A2000F15F0491301001F15F8A2003F15FCA390C8FC4815FEA54815 FFB3A46C15FEA56D1301003F15FCA3001F15F8A26C6CEB03F0A36C6CEB07E0000315C06D 130F6C6CEB1F806C6CEB3F00013E137C90381F81F8903807FFE0010090C7FC28447CC131 ->48 D50 D<49B4FC010F13E0013F13FC -9038FE01FE3A01F0007F80D803C0EB3FC048C7EA1FE0120EED0FF0EA0FE0486C14F8A215 -077F5BA26C48130FEA03C0C813F0A3ED1FE0A2ED3FC01680ED7F0015FE4A5AEC03F0EC1F -C0D90FFFC7FC15F090380001FCEC007FED3F80ED1FC0ED0FE016F0ED07F816FC150316FE -A2150116FFA3121EEA7F80487EA416FE491303A2007EC713FC00701407003015F8003814 -0F6C15F06CEC1FE06C6CEB3FC0D803E0EB7F803A01FE01FE0039007FFFF8010F13E00101 -90C7FC28447CC131>I<121CA2EA1F8090B712C0A3481680A217005E0038C8120C003015 -1C00705D0060153016705E5E4814014B5A4BC7FCC81206150E5D151815385D156015E04A -5AA24A5A140792C8FC5CA25C141E143EA2147E147CA214FCA21301A3495AA41307A6130F -AA6D5AEB01C02A457BC231>55 D70 +>48 D<143014F013011303131F13FFB5FC13E713071200B3B3B0497E497E007FB6FCA320 +4278C131>II<49B4FC010F13E0013F +13FC9038FE01FE3A01F0007F80D803C0EB3FC048C7EA1FE0120EED0FF0EA0FE0486C14F8 +A215077F5BA26C48130FEA03C0C813F0A3ED1FE0A2ED3FC01680ED7F0015FE4A5AEC03F0 +EC1FC0D90FFFC7FC15F090380001FCEC007FED3F80ED1FC0ED0FE016F0ED07F816FC1503 +16FEA2150116FFA3121EEA7F80487EA416FE491303A2007EC713FC00701407003015F800 +38140F6C15F06CEC1FE06C6CEB3FC0D803E0EB7F803A01FE01FE0039007FFFF8010F13E0 +010190C7FC28447CC131>I77 D97 -DI101 D104 D<3903F803F000FFEB1FFCEC3C3EEC70 -7F0007EBE0FF3803F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3 -202C7DAB26>114 D<1306A5130EA4131EA3133E137EA213FE12011207001FB512F0B6FC -A2C648C7FCB3A4150CAA017E131C017F1318A26D133890381F8030ECC070903807E0E090 -3801FFC09038007F001E3E7EBC26>116 DI121 -D E +D104 D<1306A5130EA4131EA3133E137EA213FE12011207001FB512F0B6FCA2C648C7 +FCB3A4150CAA017E131C017F1318A26D133890381F8030ECC070903807E0E0903801FFC0 +9038007F001E3E7EBC26>116 D121 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fr ecrm1728 17.28 18 /Fr 18 119 df<120FEA3FC0EA7FE0EAFFF0A213F8A313FC127FEA3FDCEA0F1C1200A713 @@ -1903,8 +1891,8 @@ %%EndSetup %%Page: 1 1 -1 0 bop 1054 2143 a Fr(Diagnostics)47 b(Dev)l(elop)t(er's)f(Guide)1558 -2749 y Fq(7th)32 b(F)-8 b(ebruary)33 b(2003)p eop +1 0 bop 1054 2143 a Fr(Diagnostics)47 b(Dev)l(elop)t(er's)f(Guide)1632 +2749 y Fq(12th)32 b(Ma)m(y)h(2003)p eop %%Page: 1 2 1 1 bop 0 997 a Fp(Con)-6 b(ten)g(ts)0 1512 y Fo(1)77 b(In)m(tro)s(duction)3201 b(3)0 1694 y(2)77 b(Diagnostics)30 @@ -1985,7 +1973,7 @@ 3986 y(2.3.3)94 b(mak)n(e)27 b(dep)r(end)60 b(.)42 b(.)g(.)f(.)h(.)f(.) h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) -134 b(7)315 4085 y(2.3.4)94 b(default)28 b(mak)n(e)f(target)f(\(mak)n +134 b(8)315 4085 y(2.3.4)94 b(default)28 b(mak)n(e)f(target)f(\(mak)n (e)h(with)h(no)g(argumen)n(ts\))60 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(8)315 4185 y(2.3.5)94 b(mak)n(e)27 b(standalone)61 @@ -2291,64 +2279,70 @@ 2757 y(\020mak)n(e)i(standalone\021.)52 b(This)32 b(should)h(b)r(e)g (the)h(same)e(directory)f(where)i(the)g(tftp)h(serv)n(er)d(application) h(lo)r(oks)g(when)208 2857 y(sending)27 b(\034les)g(to)h(a)f(tftp)i -(clien)n(t.)0 3039 y(The)f(follo)n(wing)e(sections)h(describ)r(e)g(the) -h(a)n(v)-5 b(ailable)26 b(mak)n(e)1826 3009 y Fi(6)1890 -3039 y Fn(targets.)0 3272 y Fh(2.3.1)112 b(mak)m(e)38 -b(sub_mak)m(e)0 3425 y Fn(If)27 b(building)f(from)h(the)f(CVS)h(rep)r -(ository)-7 b(,)25 b(this)i(creates)e(all)h(the)h(Mak)n(e\034le)f -(links)g(in)g(the)h(source)e(directories,)h(whic)n(h)g(p)r(oin)n(t)0 -3524 y(to)g(build/mo)r(dule.mak.)36 b(If)26 b(the)g(diagnostics)e(are)h +(clien)n(t.)125 3023 y Fj(\017)41 b Fn(MKIMA)n(GE)34 +b(-)f(P)n(oin)n(ts)h(to)f(the)h(mkimage)f(program)f(built)i(during)f +(the)i(PPCBo)r(ot)f(build)g(pro)r(cess.)54 b(The)34 b('mak)n(e)208 +3122 y(standalone')c(mak)n(e)h(target)f(uses)h(this)h(program)d(to)j +(con)n(v)n(ert)e(the)h(pp)r(c_diag)g(elf)h(executable)f(in)n(to)g(an)g +(image)g(\034le)208 3222 y(loadable)26 b(b)n(y)h(PPCBo)r(ot.)0 +3404 y(The)h(follo)n(wing)e(sections)h(describ)r(e)g(the)h(a)n(v)-5 +b(ailable)26 b(mak)n(e)1826 3374 y Fi(6)1890 3404 y Fn(targets.)0 +3637 y Fh(2.3.1)112 b(mak)m(e)38 b(sub_mak)m(e)0 3790 +y Fn(If)27 b(building)f(from)h(the)f(CVS)h(rep)r(ository)-7 +b(,)25 b(this)i(creates)e(all)h(the)h(Mak)n(e\034le)f(links)g(in)g(the) +h(source)e(directories,)h(whic)n(h)g(p)r(oin)n(t)0 3890 +y(to)g(build/mo)r(dule.mak.)36 b(If)26 b(the)g(diagnostics)e(are)h (unpac)n(k)n(ed)g(from)g(a)h(tar.gz,)f(these)h(links)f(should)h -(already)e(b)r(e)i(a)n(v)-5 b(ailable.)0 3757 y Fh(2.3.2)112 -b(mak)m(e)38 b(h\034les)0 3910 y Fn(As)26 b(for)f(the)g(sub_mak)n(e)g +(already)e(b)r(e)i(a)n(v)-5 b(ailable.)0 4122 y Fh(2.3.2)112 +b(mak)m(e)38 b(h\034les)0 4275 y Fn(As)26 b(for)f(the)g(sub_mak)n(e)g (target,)g(this)g(is)h(merely)f(for)g(con)n(v)n(enience)f(for)h(CVS)h (c)n(hec)n(k)n(outs)d(of)j(the)g(diagnostics.)35 b(This)25 -b(mak)n(e)0 4010 y(target)j(places)f(links)i(to)f(all)g(the)h(.h)g +b(mak)n(e)0 4375 y(target)j(places)f(links)i(to)f(all)g(the)h(.h)g (\034les)f(in)n(to)g(the)h(includes/)f(sub)r(directory)-7 b(.)39 b(Once)28 b(again,)g(if)h(unpac)n(k)n(ed)e(from)h(a)g(tar.gz,)0 -4109 y(these)g(links)f(should)g(already)f(exist.)0 4342 -y Fh(2.3.3)112 b(mak)m(e)38 b(dep)s(end)0 4495 y Fn(Similar)28 -b(to)h(the)g(\020dep\021)35 b(mak)n(e)27 b(target)h(when)h(building)f -(a)h(lin)n(ux)f(k)n(ernel,)g(the)h(mak)n(e)f(dep)r(end)h(stage)f -(creates)f(.dep)r(end)i(\034les)0 4594 y(in)h(eac)n(h)f(source)f -(directory)h(so)g(that)g(the)i(mak)n(e)d(pro)r(cess)h(kno)n(ws)f(whic)n -(h)i(\034les)g(dep)r(end)g(on)f(eac)n(h)g(other.)43 b(This)29 -b(sp)r(eeds)h(up)0 4694 y(the)c(mak)n(e)f(pro)r(cess)g(since)g(only)h -(c)n(hanged)f(\034les,)h(and)f(those)h(that)g(dep)r(end)h(on)e(them,)i -(get)e(recompiled.)36 b(F)-7 b(or)25 b(this)h(stage)f(to)0 -4794 y(w)n(ork)k(prop)r(erly)-7 b(,)31 b(set)g(the)g(MKDEP)h(constan)n -(t)e(in)h(the)h(Mak)n(e\034le)e(to)g(the)h(lo)r(cation)g(on)f(y)n(our)g -(system)g(where)h(mkdep)g(has)0 4893 y(b)r(een)d(built)g(in)g(the)g -(lin)n(ux)g(k)n(ernel)e(source)g(tree.)p 0 4947 1560 -4 v 92 5000 a Fg(6)127 5023 y Ff(Under)31 b(Lin)n(ux,)g(the)g +4475 y(these)g(links)f(should)g(already)f(exist.)p 0 +4544 1560 4 v 92 4597 a Fg(6)127 4621 y Ff(Under)31 b(Lin)n(ux,)g(the)g (\020info\021)j(utilit)n(y)c(has)h(excellen)n(t)g(do)r(cumen)n(tation)g (for)f(the)h(\020mak)n(e\021)k(command)28 b(-)i(try)h(\020info)e(mak)n -(e\021.)49 b(There)31 b(are)g(also)0 5102 y(en)n(tries)25 +(e\021.)49 b(There)31 b(are)g(also)0 4700 y(en)n(tries)25 b(for)f(gcc)g(and)g(bin)n(utils)g(\(if)f(running)h(Debian,)g(mak)n(e)f (sure)i(the)f(gcc-2.95-do)r(c)h(and)f(bin)n(utils-do)r(c)f(pac)n(k)l (ages)j(are)f(installed\))p eop %%Page: 8 9 8 8 bop 0 100 a Fm(CHAPTER)29 b(2.)64 b(DIA)n(GNOSTICS)28 -b(BUILD)g(ENVIR)n(ONMENT)1724 b Fn(8)0 333 y Fh(2.3.4)112 +b(BUILD)g(ENVIR)n(ONMENT)1724 b Fn(8)0 333 y Fh(2.3.3)112 +b(mak)m(e)38 b(dep)s(end)0 486 y Fn(Similar)28 b(to)h(the)g +(\020dep\021)35 b(mak)n(e)27 b(target)h(when)h(building)f(a)h(lin)n(ux) +f(k)n(ernel,)g(the)h(mak)n(e)f(dep)r(end)h(stage)f(creates)f(.dep)r +(end)i(\034les)0 586 y(in)h(eac)n(h)f(source)f(directory)h(so)g(that)g +(the)i(mak)n(e)d(pro)r(cess)h(kno)n(ws)f(whic)n(h)i(\034les)g(dep)r +(end)g(on)f(eac)n(h)g(other.)43 b(This)29 b(sp)r(eeds)h(up)0 +685 y(the)c(mak)n(e)f(pro)r(cess)g(since)g(only)h(c)n(hanged)f +(\034les,)h(and)f(those)h(that)g(dep)r(end)h(on)e(them,)i(get)e +(recompiled.)36 b(F)-7 b(or)25 b(this)h(stage)f(to)0 +785 y(w)n(ork)k(prop)r(erly)-7 b(,)31 b(set)g(the)g(MKDEP)h(constan)n +(t)e(in)h(the)h(Mak)n(e\034le)e(to)g(the)h(lo)r(cation)g(on)f(y)n(our)g +(system)g(where)h(mkdep)g(has)0 884 y(b)r(een)d(built)g(in)g(the)g(lin) +n(ux)g(k)n(ernel)e(source)g(tree.)0 1117 y Fh(2.3.4)112 b(default)38 b(mak)m(e)f(target)g(\(mak)m(e)g(with)f(no)i(argumen)m -(ts\))0 486 y Fn(The)26 b(default)h(mak)n(e)e(target)g(compiles)h(all)g -(the)g(source)f(co)r(de,)h(outputs)h(a)f(link)n(er)f(script,)h(and)g -(links)g(the)h(diagnostics)d(co)r(de)0 586 y(in)n(to)j(a)g(single)g(ob) -5 b(ject)28 b(\034le)g(that)f(can)h(b)r(e)g(copied)f(in)n(to)g(the)h -(target)f(system's)g(memory)f(and)i(executed.)0 818 y -Fh(2.3.5)112 b(mak)m(e)38 b(standalone)0 971 y Fn(F)-7 +(ts\))0 1270 y Fn(The)26 b(default)h(mak)n(e)e(target)g(compiles)h(all) +g(the)g(source)f(co)r(de,)h(outputs)h(a)f(link)n(er)f(script,)h(and)g +(links)g(the)h(diagnostics)d(co)r(de)0 1370 y(in)n(to)j(a)g(single)g +(ob)5 b(ject)28 b(\034le)g(that)f(can)h(b)r(e)g(copied)f(in)n(to)g(the) +h(target)f(system's)g(memory)f(and)i(executed.)0 1602 +y Fh(2.3.5)112 b(mak)m(e)38 b(standalone)0 1755 y Fn(F)-7 b(or)29 b(em)n(b)r(edded)h(b)r(oards)f(that)h(use)f(PPCBo)r(ot)h(for)g (the)g(b)r(o)r(ot)g(loader,)f(this)h(is)f(a)h(con)n(v)n(enience)e -(target)h(that)h(will)g(con)n(v)n(ert)0 1071 y(the)d(diagnostics)e(elf) +(target)h(that)h(will)g(con)n(v)n(ert)0 1855 y(the)d(diagnostics)e(elf) i(\034le)f(in)n(to)g(a)h(.img)f(\034le)g(\(a)h(format)f(usable)g(b)n(y) g(PPCBo)r(ot\),)h(and)f(place)g(it)h(in)n(to)f(the)h(TFTPBASEDIR)0 -1170 y(path)34 b(sp)r(eci\034ed)h(in)f(the)h(Mak)n(e\034le.)56 -b(F)-7 b(or)33 b(this)i(to)f(w)n(ork)f(prop)r(erly)-7 -b(,)35 b(mak)n(e)e(sure)h(that)g(MKIMA)n(GEDIR)h(in)g(gendiags.sh)0 -1270 y(p)r(oin)n(ts)24 b(to)g(PPCBo)r(ot's)g(mkimage)f(program,)f(and)i -(that)g(BINUTILSP)-7 b(A)g(TH)25 b(in)f(gendiags.sh)f(p)r(oin)n(ts)g -(to)h(the)g(path)g(for)g(the)0 1370 y(target's)i(v)n(ersion)g(of)i(ob)5 -b(jcop)n(y)-7 b(.)p eop +1954 y(path)g(sp)r(eci\034ed)g(in)g(the)g(Mak)n(e\034le.)35 +b(F)-7 b(or)27 b(this)g(to)f(w)n(ork)f(prop)r(erly)-7 +b(,)26 b(mak)n(e)g(sure)g(that)h(MKIMA)n(GE)g(in)g(the)g(Mak)n(e\034le) +f(p)r(oin)n(ts)0 2054 y(to)32 b(PPCBo)r(ot's)h(mkimage)f(program,)f +(and)i(that)f(OBJCOPY)g(in)h(the)g(Mak)n(e\034le)e(p)r(oin)n(ts)i(to)f +(the)h(path)f(for)g(the)h(target's)0 2154 y(v)n(ersion)26 +b(of)i(ob)5 b(jcop)n(y)-7 b(.)p eop %%Page: 9 10 9 9 bop 0 955 a Fl(Chapter)61 b(3)0 1370 y Fp(Diagnostics)73 b(Co)6 b(de)73 b(W)-18 b(alkthrough)0 1813 y Fn(This)24 diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/documents/diag_developer_guide.txt ppc_diag/documents/diag_developer_guide.txt --- ppc_diag-1.0.2/documents/diag_developer_guide.txt Fri Feb 7 14:58:09 2003 +++ ppc_diag/documents/diag_developer_guide.txt Mon May 12 15:26:33 2003 @@ -290,6 +290,11 @@ where the tftp server application looks when sending files to a tftp client. +* MKIMAGE - Points to the mkimage program built during the + PPCBoot build process. The 'make standalone' make target + uses this program to convert the ppc_diag elf executable + into an image file loadable by PPCBoot. + The following sections describe the available make([footnote] Under Linux, the "info" utility has excellent documentation for the "make" command - try "info make". There are also entries for gcc and binutils (if @@ -336,10 +341,10 @@ this is a convenience target that will convert the diagnostics elf file into a .img file (a format usable by PPCBoot), and place it into the TFTPBASEDIR path specified in the -Makefile. For this to work properly, make sure that MKIMAGEDIR -in gendiags.sh points to PPCBoot's mkimage program, and -that BINUTILSPATH in gendiags.sh points to the path for -the target's version of objcopy. +Makefile. For this to work properly, make sure that MKIMAGE +in the Makefile points to PPCBoot's mkimage program, and +that OBJCOPY in the Makefile points to the path for the +target's version of objcopy. Diagnostics Code Walkthrough diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/documents/diag_guide.lyx ppc_diag/documents/diag_guide.lyx --- ppc_diag-1.0.2/documents/diag_guide.lyx Fri Feb 7 14:44:23 2003 +++ ppc_diag/documents/diag_guide.lyx Mon May 12 14:29:12 2003 @@ -549,14 +549,14 @@ The test descriptions follow the format: \layout Standard -3.1 Submenu name +3.X Submenu name \layout Standard -3.1.1 Description of submenu's purpose (may include figures, screen shots, +3.X.1 Description of submenu's purpose (may include figures, screen shots, tables, etc.) \layout Standard -3.1.2 Description of options available (possible values, with default values +3.X.2 Description of options available (possible values, with default values in \series bold bold @@ -564,7 +564,7 @@ ) \layout Standard -3.1.3 Test Descriptions +3.X.3 Test Descriptions \layout Standard Test Name @@ -1442,6 +1442,448 @@ None. \layout Section +NAND Flash +\layout Subsection + +Submenu Descriptions +\layout Standard + +The tests in this menu exercise read, write, and erase operations on a NAND + flash device (specifically the 8- and 16-MB Toshiba devices). + Note that different makes and models of NAND flash recommend different + methods for discovering bad blocks; check the NAND flash device's data + sheet before attempting potentially destructive operations. + For instance, some devices recommend searching for bad blocks by ensuring + that all bits are '1' before ever performing any write or erase operations. +\layout Subsection + +Submenu Options +\layout List +\labelwidthstring 00.00.0000 + +Debug\SpecialChar ~ +level: View diagnostics software debug information. + Four levels of debugging are available: ( +\series bold +0 = none +\series default +, 1 = terse, 2 = verbose, 3 = massive screen scroll). +\layout List +\labelwidthstring 00.00.0000 + +Page\SpecialChar ~ +size: Set the number of bytes per page. + If the device ID is recognized, this value will be set automatically. +\layout List +\labelwidthstring 00.00.0000 + +Pages\SpecialChar ~ +per\SpecialChar ~ +block: Set the number of pages per block. + If the device ID is recognized, this value will be set automatically. +\layout List +\labelwidthstring 00.00.0000 + +Capacity: Set the total number of pages in the device. + If the device ID is recognized, this value will be set automatically. +\layout List +\labelwidthstring 00.00.0000 + +NAND\SpecialChar ~ +device\SpecialChar ~ +ID: The NAND flash menu initialization executes the device ID + read command automatically and fills in this field. + If the initialization code recognizes the device ID, the other fields will + be initialized as well. +\layout List +\labelwidthstring 00.00.0000 + +Page\SpecialChar ~ +number: For the Dump\SpecialChar ~ +NAND\SpecialChar ~ +Flash\SpecialChar ~ +Page test, selects which page to view. +\layout List +\labelwidthstring 00.00.0000 + +Block\SpecialChar ~ +number: For block-based operations (write and erase), selects which + block to operate on. + The value 0xFFFFFFFF indicates all blocks. +\layout List +\labelwidthstring 00.00.0000 + +Mem\SpecialChar ~ +copy\SpecialChar ~ +start: Used only for the Dump\SpecialChar ~ +NAND\SpecialChar ~ +Flash\SpecialChar ~ +Page test. + The contents of the NAND flash page will be copied to the RAM starting + at the address specified here before being printed. +\layout Subsection + +Test Descriptions +\layout Subsubsection + +Test: Reset NAND Flash +\layout Description + +Test\SpecialChar ~ +Description: +\series medium +This test sends the reset command to the NAND flash. +\layout Description + +Test\SpecialChar ~ +Modes: +\series medium +All test modes +\layout Description + +Test\SpecialChar ~ +Options: - +\newline +Debug level: If set to a value other than '0', displays the code returned + by the NAND flash device. +\layout Description + +Test\SpecialChar ~ +Failures: - +\newline + +\series bold +NAND Flash did not reset!: +\series default +The NAND device did not return the correct response for the reset command. +\layout Subsubsection + +Test: Check For Bad Blocks +\layout Description + +Test\SpecialChar ~ +Description: This test is intended for NAND flash devices that recommend + the erase, write 01010101b, erase, write 10101010b, erase sequence for + finding bad blocks on the device. + Do not use this test for devices that recommend searching for bits that + are not '1' when received from the factory for determining bad blocks. + See the Verify\SpecialChar ~ +Erase/New\SpecialChar ~ +Device test description, below, for these devices. + This test will erase all data contained on the flash device. + Also, the bad block information will only be printed, not stored on the + NAND flash. +\layout Description + +Test\SpecialChar ~ +Modes: Custom test +\layout Description + +Test\SpecialChar ~ +Options: - +\newline +Page\SpecialChar ~ +size: Set the number of bytes per page. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Pages\SpecialChar ~ +per\SpecialChar ~ +block: Set the number of pages contained within a flash block. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Capacity: Set the total number of pages contained by the flash device. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Block\SpecialChar ~ +number: Set which block number to test. + If set to the value 0xFFFFFFFF, all flash blocks will be tested, from block + 0 up to the value Capacity / Pages\SpecialChar ~ +per\SpecialChar ~ +block. +\layout Description + +Test\SpecialChar ~ +Failures: - +\newline +This test doesn't fail, it only prints a list of bad locations on the NAND + flash. +\layout Subsubsection + +Test: Erase Blocks +\layout Description + +Test\SpecialChar ~ +Description: Erase a given NAND flash block, or all flash blocks. +\layout Description + +Test\SpecialChar ~ +Modes: Custom test +\layout Description + +Test\SpecialChar ~ +Options: - +\newline +Page\SpecialChar ~ +size: Set the number of bytes per page. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Pages\SpecialChar ~ +per\SpecialChar ~ +block: Set the number of pages contained within a flash block. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Capacity: Set the total number of pages contained by the flash device. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Block\SpecialChar ~ +number: Indicate which block to erase. + The value 0xFFFFFFFF for this option will erase all blocks. +\layout Description + +Test\SpecialChar ~ +Failures: - +\newline + +\series bold +Specified block # out of range: +\series default + Double-check the Block\SpecialChar ~ +number option. + It should be within the range 0 to (Capacity / Pages\SpecialChar ~ +per\SpecialChar ~ +block). +\newline + +\series bold +NAND device reports erase failure in block: +\series default + The NAND status read indicated that the previous erase command failed. +\newline + +\series bold +Erase error in page: +\series default + (Unlikely) The NAND status read did not indicate a failure, but the contents + of the block contained one or more '0' bits. +\layout Subsubsection + +Test: Write Test Ptn 1 +\layout Description + +Test\SpecialChar ~ +Description: Writes the binary pattern 01010101b to each byte in the + given block, or all flash blocks. + Make sure the blocks selected in the Block\SpecialChar ~ +number option have been erased. +\layout Description + +Test\SpecialChar ~ +Modes: Custom test +\layout Description + +Test\SpecialChar ~ +Options: - +\newline +Page\SpecialChar ~ +size: Set the number of bytes per page. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Pages\SpecialChar ~ +per\SpecialChar ~ +block: Set the number of pages contained within a flash block. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Capacity: Set the total number of pages contained by the flash device. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Block\SpecialChar ~ +number: Indicate which block to write. + The value 0xFFFFFFFF indicates all blocks. +\layout Description + +Test\SpecialChar ~ +Failures: - +\newline + +\series bold +NAND device reports program failure in page: +\series default + The NAND status read indicated that the previous page write command failed. + It's possible the blocks selected for the test pattern weren't erased; + try erasing the blocks and run this test again. +\newline + +\series bold +Program error in page: +\series default + (Unlikely) The NAND status read did not indicate a failure, but when read + back, the contents of one or more bytes was other than 01010101b. +\layout Subsubsection + +Test: Write Test Ptn 2 +\layout Description + +Test\SpecialChar ~ +Description: Writes the binary pattern 10101010b to each byte in the + given block, or all flash blocks. + Make sure the blocks selected in the Block\SpecialChar ~ +number option have been erased. +\layout Description + +Test\SpecialChar ~ +Modes: Custom test +\layout Description + +Test\SpecialChar ~ +Options: - +\newline +Page\SpecialChar ~ +size: Set the number of bytes per page. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Pages\SpecialChar ~ +per\SpecialChar ~ +block: Set the number of pages contained within a flash block. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Capacity: Set the total number of pages contained by the flash device. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Block\SpecialChar ~ +number: Indicate which block to write. + The value 0xFFFFFFFF indicates all blocks. +\layout Description + +Test\SpecialChar ~ +Failures: - +\newline + +\series bold +NAND device reports program failure in page: +\series default + The NAND status read indicated that the previous page write command failed. + It's possible the blocks selected for the test pattern weren't erased; + try erasing the blocks and run this test again. +\newline + +\series bold +Program error in page: +\series default + (Unlikely) The NAND status read did not indicate a failure, but when read + back, the contents of one or more bytes was other than 10101010b. +\layout Subsubsection + +Test: Get NAND Flash ID +\layout Description + +Test\SpecialChar ~ +Description: Send the Read ID command to the NAND flash, and display + the device code read back from the device. +\layout Description + +Test\SpecialChar ~ +Modes: Custom test +\layout Description + +Test\SpecialChar ~ +Options: - +\newline +None. +\layout Description + +Test\SpecialChar ~ +Failures: - +\newline +None. +\layout Subsubsection + +Test: Dump NAND Flash Page +\layout Description + +Test\SpecialChar ~ +Description: Display the contents of a given NAND flash page. +\layout Description + +Test\SpecialChar ~ +Modes: Custom test +\layout Description + +Test\SpecialChar ~ +Options: - +\newline +Page\SpecialChar ~ +size: Set the number of bytes per page. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Page\SpecialChar ~ +number: Select which page to display. +\newline +Mem\SpecialChar ~ +copy\SpecialChar ~ +start: Select where in SDRAM to copy the NAND flash page for the + memory dump. +\layout Description + +Test\SpecialChar ~ +Failures: - +\newline +None. +\layout Subsubsection + +Test: Verify Erase/New Device +\layout Description + +Test\SpecialChar ~ +Description: Read every byte in the NAND flash and make sure there are + no '0' bits. + This test is recommended for devices such as the Toshiba TC58V64BFT. + When received from the factory, this device should have no '0' bits. + Any '0' bits in the flash indicate a bad block. +\layout Description + +Test\SpecialChar ~ +Modes: Custom test +\layout Description + +Test\SpecialChar ~ +Options: - +\newline +Page\SpecialChar ~ +size: Set the number of bytes per page. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\newline +Capacity: Set the total number of pages contained by the flash device. + Usually pre-set by the menu initialization code, if the NAND flash device + is recognized. +\layout Description +\added_space_bottom medskip +Test\SpecialChar ~ +Failures: - +\newline +For the purposes of error logging, this test does not fail, it only prints + the first error it finds in the flash. +\newline + +\series bold +Bit error in byte: +\series default + A '0' bit was found within a flash block. +\layout Section + Memory \layout Subsection @@ -3876,9 +4318,123 @@ \newline None. \layout Description - +\added_space_bottom medskip Test\SpecialChar ~ Failures: - \newline None. +\layout Section + +Red Box +\layout Subsection + +Submenu description +\layout Standard + +The tests in this menu verify the HDB-10 transmission capability of the + Red Box. +\layout Subsection + +Submenu options +\layout List +\labelwidthstring 00.00.0000 + +Debug\SpecialChar ~ +level: Selects level of debugging output. + Available levels are: ( +\series bold +0 = none +\series default +, 1 = terse, 2 = verbose, 3 = massive screen scroll) +\layout List +\labelwidthstring 00.00.0000 + +1st\SpecialChar ~ +buffer\SpecialChar ~ +base\SpecialChar ~ +address: Unused +\layout List +\labelwidthstring 00.00.0000 + +Buffer\SpecialChar ~ +size: Number of bytes to transmit. + Limited to 64kB +\layout List +\labelwidthstring 00.00.0000 + +Xmit\SpecialChar ~ +pattern: Select a pattern to transmit. + Available patterns are: (0=all 0's, 1 = all 1's, 2 = 01010101b, 3 = 10101010b, + +\series bold +4 = Pseudo-Random +\series default +, 5 = user-defined (see User\SpecialChar ~ +pattern option), 6 = Summa test data, 7 = increment + by 4 pattern) +\layout List +\labelwidthstring 00.00.0000 + +User\SpecialChar ~ +pattern: Set the 2-byte pattern to be transmitted, if the Xmit\SpecialChar ~ +pattern + option has been set to user-defined. +\layout List +\labelwidthstring 00.00.0000 + +Test\SpecialChar ~ +time: Unused +\layout Subsection + +Test descriptions +\layout Subsubsection + +Test: Transmit Test +\layout Description + +Test\SpecialChar ~ +Description: This test transmits data via the HDB-10 interface, then + examines the receive buffer to make sure that it matches the transmit buffer. +\layout Description + +Test\SpecialChar ~ +Modes: Basic and burn-in modes. +\layout Description + +Test\SpecialChar ~ +Options: - +\newline +Buffer\SpecialChar ~ +size: Selects how many bytes to transmit (must be divisible by 4) +\newline +Xmit\SpecialChar ~ +pattern: Selects which pattern to transmit +\newline +User\SpecialChar ~ +pattern: If Xmit\SpecialChar ~ +pattern equals 5, set this to the desired 2-byte pattern +\layout Description + +Test\SpecialChar ~ +Failures: - +\newline + +\series bold +Failed to transmit test buffer: +\series default + The Xilinx status register did not indicate a transmit interrupt within + the timeout period. +\newline + +\series bold +Failed to receive test buffer: +\series default + The Xilinx status register did not indicate a receive interrupt within + the timeout period. +\newline + +\series bold +Comparison failure in xmit word: +\series default + The two buffers were compared (disregarding the sync bit) and did not match. \the_end diff --exclude=includes --exclude=CVS -urN ppc_diag-1.0.2/documents/diag_guide.ps ppc_diag/documents/diag_guide.ps --- ppc_diag-1.0.2/documents/diag_guide.ps Fri Feb 7 14:58:49 2003 +++ ppc_diag/documents/diag_guide.ps Mon May 12 15:25:44 2003 @@ -1,14 +1,14 @@ %!PS-Adobe-2.0 %%Creator: dvips(k) 5.86e Copyright 2001 Radical Eye Software %%Title: diag_guide.dvi -%%Pages: 36 +%%Pages: 40 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -t letter -o diag_guide.ps diag_guide.dvi %DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2003.02.07:1458 +%DVIPSSource: TeX output 2003.05.12:1525 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -307,8 +307,8 @@ C7FC15C05E6DEBE01E163E6D143CEDF07C027F1378EDF8F8023F5B15FD021F5B15FF6E5B A36E5BA26E90C8FCA26E5AA26E5AA21578362C7EAB3B>I E %EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe ecbx1440 14.4 48 -/Fe 48 122 df45 D45 DI<913803FF80023F13F849B6FC010715C049 01017F903A3FFC007FF8D97FF0EB1FFC49486D7E48496D7E4A7F4817804890C76C13C0A2 48486E13E0A2001F17F0A3003F17F8A249157FA2007F17FCA600FF17FEB3A5007F17FCA6 @@ -462,52 +462,52 @@ >103 DI<133FEBFFC0487F487FA2487FA66C5BA26C5B6C5B013FC7 -FC90C8FCAEEB1FF8B5FCA512017EB3B3A6B612F0A51C547CD324>I109 DI<913801FFC0023F13FE91B67E010315E0010F018013F8903A -3FFC001FFED97FF0EB07FF49486D7F48496D7F48496D7F91C8127F4883488349153F001F -83A2003F8349151FA2007F83A400FF1880AC007F1800A3003F5F6D153FA2001F5FA26C6C -4B5AA26C6D4A5A6C5F6C6D495B6C6D495B6D6C4990C7FCD93FFCEB1FFE6DB46CB45A0107 -90B512F0010115C0D9003F49C8FC020313E039387CB642>II<90393FF001FCB590380FFF804B13E0 -037F13F09238FE1FF89138F1F83F00019138F07FFC6CEBF3E015C0ECF780A2ECFF00EE3F -F84AEB1FF0EE0FE093C7FC5CA45CB3ABB612FEA52E367DB535>114 -D<903903FFC00E011FEBFC1E90B6127E000315FE3907FE003FD80FF0130F484813034848 -1301491300127F90C8127EA248153EA27FA27F01F091C7FC13FCEBFF806C13FEECFFF06C -14FE6F7E6C15E06C816C15FC6C81C681133F010F15801301D9000F14C0EC003F030713E0 -150100F880167F6C153FA2161F7EA217C07E6D143F17807F6DEC7F0001F85C6DEB03FE90 -39FF801FFC486CB512F0D8F81F14C0D8F00791C7FC39E0007FF02B387CB634>I<147CA6 -14FCA41301A31303A21307A2130F131F133F137F13FF1203000F90B512FEB7FCA426007F -FCC8FCB3A9EE0F80ABEE1F006D7EA2011F143E806D6D5A6DEBC1F86DEBFFF001005C023F -1380DA03FEC7FC294D7ECB33>IIIIII E +FC90C8FCAEEB1FF8B5FCA512017EB3B3A6B612F0A51C547CD324>I108 DI +I<913801FFC0023F13FE91B67E010315E0010F018013F8903A3FFC001FFED97FF0EB07FF +49486D7F48496D7F48496D7F91C8127F4883488349153F001F83A2003F8349151FA2007F +83A400FF1880AC007F1800A3003F5F6D153FA2001F5FA26C6C4B5AA26C6D4A5A6C5F6C6D +495B6C6D495B6D6C4990C7FCD93FFCEB1FFE6DB46CB45A010790B512F0010115C0D9003F +49C8FC020313E039387CB642>II<90393FF001FCB590380FFF804B13E0037F13F09238FE1FF89138 +F1F83F00019138F07FFC6CEBF3E015C0ECF780A2ECFF00EE3FF84AEB1FF0EE0FE093C7FC +5CA45CB3ABB612FEA52E367DB535>114 D<903903FFC00E011FEBFC1E90B6127E000315 +FE3907FE003FD80FF0130F4848130348481301491300127F90C8127EA248153EA27FA27F +01F091C7FC13FCEBFF806C13FEECFFF06C14FE6F7E6C15E06C816C15FC6C81C681133F01 +0F15801301D9000F14C0EC003F030713E0150100F880167F6C153FA2161F7EA217C07E6D +143F17807F6DEC7F0001F85C6DEB03FE9039FF801FFC486CB512F0D8F81F14C0D8F00791 +C7FC39E0007FF02B387CB634>I<147CA614FCA41301A31303A21307A2130F131F133F13 +7F13FF1203000F90B512FEB7FCA426007FFCC8FCB3A9EE0F80ABEE1F006D7EA2011F143E +806D6D5A6DEBC1F86DEBFFF001005C023F1380DA03FEC7FC294D7ECB33>IIIIII E %EndDVIPSBitmapFont %DVIPSBitmapFont: Ff ecbx2074 20.74 10 /Ff 10 117 dfI E %EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi ecbx1000 10 69 -/Fi 69 123 df<913A03FF8007FE027F9039F07FFF800103B500FDB512E0010F903A00FF +%DVIPSBitmapFont: Fi ecbx1000 10 72 +/Fi 72 123 df<913A03FF8007FE027F9039F07FFF800103B500FDB512E0010F903A00FF FE0FF0D93FF8ECF81F90267FE0019038F03FF849485A4816E014804816C00200ED1FF081 F007C06F91C7FCA8B912E0A4000390C701C0C7FCB3ABB5D8FC3FEBFF80A43D3A7EB938> -27 D<913903FFC7C0027F13FF0103B6FC010F130090383FF80190387FE003EBFFC05A14 -805A4A7EA281A9B8FCA4000390C7FCB3ABB5D8FC3F13FFA4303A7EB935>29 -D33 +27 D<913803FFC0027F13F00103B512FC010FEB00FED93FF8133FD97FE0EBFF8049485A +5A1480484A13C04A6C1380A36F1300167E93C7FCA592383FFFC0B8FCA4000390C7FCB3AB +B5D8FC3F13FFA4303A7EB935>I<913903FFC7C0027F13FF0103B6FC010F130090383FF8 +0190387FE003EBFFC05A14805A4A7EA281A9B8FCA4000390C7FCB3ABB5D8FC3F13FFA430 +3A7EB935>I33 D<0470EB01C0A304F013034C5CA2030114074C91C7FCA203035C4C130EA30307141E93C7 121CA24B143C030E1438A2031E1478031C1470A3033C14F003385CA2007FBA12F0BB12F8 A2C72801E0000780C7FC4B91C8FCA302035C4B130EA30207141E92C7121CA34A143C020E @@ -903,35 +905,39 @@ 16537BBD25>I43 DIII<49B4 -FC011F13F0017F13FC9038FF83FE4848C67E4848EB7F804848EB3FC04848EB1FE0A2001F -15F0A24848EB0FF8A3007F15FCA400FF15FEB3007F15FCA5003F15F86D131FA2001F15F0 -A26C6CEB3FE0000715C06C6CEB7F806C6CEBFF003900FF83FE6DB45A011F13F0010190C7 -FC27377CB530>48 D<141E143E14FE1307137FB5FCA3138FEA000FB3B3A5007FB61280A4 -213679B530>II< -EB03FF011F13F0017F13FC3901FC07FF2603F003138048486C13C0496C13E0EA0FF86D14 -F0487EA66C4814E06C5A6C485AC714C04A138016004A5A4A5AEC3FF090380FFFC05D15F0 -90380007FE913801FF806E13C016E0ED7FF016F8ED3FFCA216FEEA1FC0487E487E487EA4 -16FCA249137F007F15F801C0EBFFF06C5A6C6C4813E0260FFC0713806CB61200000114FC -6C6C13F0010790C7FC27377CB530>II<001C15C0D81F80130701 -F8137F90B61280A216005D5D15F05D15804AC7FC14F090C9FCA7EB03FE90381FFFE0017F -13F89038FE07FC9038F003FFD9C0011380496C13C090C7FC000E15E0C8127F16F0A216F8 -A3121FEA3FC0487E12FF7FA316F05B15FFD87F8014E0007EC713C0003E5B003F4913806C -6C481300390FF01FFE6CB512F8000114E06C6C1380D90FF8C7FC25377BB530>II57 +9620>II<1618 +163816781670A216F016E0150116C015031680A2150716005D150E151E151CA2153C1538 +1578157015F05DA214015D14035D140792C7FCA25C140E141E141C143C1438A214781470 +14F05CA213015C13035C130791C8FCA25B130E131E131C133C1338A21378137013F05B12 +015BA212035B120790C9FC5A120EA2121E121C123C123812781270A212F05AA225537BBD +30>I<49B4FC011F13F0017F13FC9038FF83FE4848C67E4848EB7F804848EB3FC04848EB +1FE0A2001F15F0A24848EB0FF8A3007F15FCA400FF15FEB3007F15FCA5003F15F86D131F +A2001F15F0A26C6CEB3FE0000715C06C6CEB7F806C6CEBFF003900FF83FE6DB45A011F13 +F0010190C7FC27377CB530>I<141E143E14FE1307137FB5FCA3138FEA000FB3B3A5007F +B61280A4213679B530>IIII<001C15C0D81F +80130701F8137F90B61280A216005D5D15F05D15804AC7FC14F090C9FCA7EB03FE90381F +FFE0017F13F89038FE07FC9038F003FFD9C0011380496C13C090C7FC000E15E0C8127F16 +F0A216F8A3121FEA3FC0487E12FF7FA316F05B15FFD87F8014E0007EC713C0003E5B003F +4913806C6C481300390FF01FFE6CB512F8000114E06C6C1380D90FF8C7FC25377BB530> +II57 DI<007FB912FCBA12FEA2CDFCB1BA 12FEA26C18FC3F177B9F4A>61 DII73 D<010FB612C0A4D90001EBE000B3B3EA -0F80EA3FE0EA7FF0A2EAFFF8A35E5C13F0007F495BD83FE091C7FC391F800FFE390FF03F -FC6CB512F0000114C026003FFCC8FC2A3A7FB831>I76 -DI< -B500FC0203B512F0A28080C66C6D90390003F0006F6E5A81017B7F13798101787F6E7E6E -7E6E7F6E7FA26E7F6E7F6E7F6E7F6F7E153F826F13806F13C06F13E06F13F06F13F88117 -FCEE7FFEEE3FFF7013817013C17013E18218F17013F97013FDEF7FFF8383A28383838383 -187FA2183F181F01FC160FB500FC150718031801A244397DB84B>IIII -II<003F -B91280A4D9F800EBF003D87FC09238007FC049161F007EC7150FA2007C1707A200781703 -A400F818E0481701A4C892C7FCB3AE010FB7FCA43B387DB742>IIII<007F -B5D8F803B512F8A4C66C48C7D80FF0C7FC6D6C5D6D5E6F495A6D6D49C8FC7F6D6D137E6F -5B6DEBF8016D5D6F485A6E6C485A023F130FDA1FFF5BEE9F806E01FFC9FC805E6E5B6E5B -80826F7E153F826F7F5D4B7F92B57EA2DA01F97FDA03F17F03F07F913807E07FDA0FC07F -021F6D7E4B7E4A486C7F027E8102FE6D7F4A7F49488149486D7F0107804A6E7E49488149 -486E7E013F81017F83B60107B61280A441397DB848>I<003FB712FEA4913980007FFC01 -FCC7EAFFF801F05B01C015F0494913E090C75A4816C0007E4A13805D007C16004B5A157F -00785D4B5A5C5EC7485B5C5E5C4A5B93C7FC5C4A5A5D14FF495B5D5B495B4B131E5B5D49 -90C7FC5B5C4948143E13FF5C485B48167E4A147C484914FC5A4A13014890C7120348150F -49143F4848EB01FFB8FCA42F397BB83A>90 DI93 -D97 D<13FFB5FCA412077EAF4AB47E020F13F0023F13FC9138FE03FFDAF000 -13804AEB7FC00280EB3FE091C713F0EE1FF8A217FC160FA217FEAA17FCA3EE1FF8A217F0 -6E133F6EEB7FE06E14C0903AFDF001FF80903AF8FC07FE009039F03FFFF8D9E00F13E0D9 -C00390C7FC2F3A7EB935>I<903801FFC0010F13FC017F13FFD9FF8013802603FE0013C0 -48485AEA0FF8121F13F0123F6E13804848EB7F00151C92C7FC12FFA9127FA27F123FED01 -E06C7E15036C6CEB07C06C6C14806C6C131FC69038C07E006DB45A010F13F00101138023 -257DA42A>I -I<903803FF80011F13F0017F13FC3901FF83FE3A03FE007F804848133F484814C0001FEC -1FE05B003FEC0FF0A2485A16F8150712FFA290B6FCA301E0C8FCA4127FA36C7E1678121F -6C6C14F86D14F000071403D801FFEB0FE06C9038C07FC06DB51200010F13FC010113E025 -257DA42C>II<161FD907FEEBFFC090387FFFE348B6EAEFE02607FE07138F260FF801131F48486C13 -8F003F15CF4990387FC7C0EEC000007F81A6003F5DA26D13FF001F5D6C6C4890C7FC3907 -FE07FE48B512F86D13E0261E07FEC8FC90CAFCA2123E123F7F6C7E90B512F8EDFF8016E0 -6C15F86C816C815A001F81393FC0000F48C8138048157F5A163FA36C157F6C16006D5C6C -6C495AD81FF0EB07FCD807FEEB3FF00001B612C06C6C91C7FC010713F02B377DA530>I< -13FFB5FCA412077EAFED7FC0913803FFF8020F13FE91381F03FFDA3C01138014784A7E4A -14C05CA25CA291C7FCB3A3B5D8FC3F13FFA4303A7DB935>II<13FFB5 -FCA412077EAF92380FFFE0A4923803FC0016F0ED0FE0ED1F804BC7FC157E5DEC03F8EC07 -E04A5A141FEC7FE04A7E8181A2ECCFFEEC0FFF496C7F806E7F6E7F82157F6F7E6F7E8215 -0F82B5D8F83F13F8A42D3A7EB932>107 D<13FFB5FCA412077EB3B3ACB512FCA4163A7D -B91B>I<01FED97FE0EB0FFC00FF902601FFFC90383FFF80020701FF90B512E0DA1F8190 -3983F03FF0DA3C00903887801F000749DACF007F00034914DE6D48D97FFC6D7E4A5CA24A -5CA291C75BB3A3B5D8FC1FB50083B512F0A44C257DA451>I<01FEEB7FC000FF903803FF -F8020F13FE91381F03FFDA3C011380000713780003497E6D4814C05CA25CA291C7FCB3A3 -B5D8FC3F13FFA430257DA435>I<903801FFC0010F13F8017F13FFD9FF807F3A03FE003F -E048486D7E48486D7E48486D7EA2003F81491303007F81A300FF1680A9007F1600A3003F -5D6D1307001F5DA26C6C495A6C6C495A6C6C495A6C6C6CB45A6C6CB5C7FC011F13FC0101 -13C029257DA430>I<9039FF01FF80B5000F13F0023F13FC9138FE07FFDAF00113800003 -496C13C00280EB7FE091C713F0EE3FF8A2EE1FFCA3EE0FFEAA17FC161FA217F8163F17F0 -6E137F6E14E06EEBFFC0DAF00313809139FC07FE0091383FFFF8020F13E0020390C7FC91 -C9FCACB512FCA42F357EA435>I<49B4EB0780010FEBE00F013FEBF81F9039FFC07C3F00 -03EB803E3A07FE000F7F4848EB07FF121F497F123F497F127FA25B12FFAA6C7EA36C7E5D -6C7E000F5C6C6C5B6C6C133F6CEBC0FD39007FFFF1011F13C10101130190C7FCAC037F13 -FEA42F357DA432>I<9038FE03F000FFEB0FFEEC3FFF91387C7F809138F8FFC000075B6C -6C5A5CA29138807F80ED3F00150C92C7FC91C8FCB3A2B512FEA422257EA427>I<90383F -F0383903FFFEF8000F13FF381FC00F383F0003007E1301007C130012FC15787E7E6D1300 -13FCEBFFE06C13FCECFF806C14C06C14F06C14F81203C614FC131F9038007FFE140700F0 -130114007E157E7E157C6C14FC6C14F8EB80019038F007F090B512C000F8140038E01FF8 -1F257DA426>I<130FA55BA45BA25B5BA25A1207001FEBFFE0B6FCA3000390C7FCB21578 -A815F86CEB80F014816CEBC3E090383FFFC06D1380903803FE001D357EB425>I<01FFEC -3FC0B5EB3FFFA4000714016C80B3A35DA25DA26C5C6E4813E06CD9C03E13FF90387FFFFC -011F13F00103138030257DA435>IIIII<003FB612C0A3D9F0031380EB800749481300003E5C003C495A007C133F5D00 -78495A14FF5D495B5BC6485B92C7FC495A131F5C495A017FEB03C0EBFFF014E04813C05A -EC80074813005A49EB0F80485A003F141F4848133F9038F001FFB7FCA322257DA42A>I -E +1501150791B5FCA4ECF80715011500A21678A693C8FCADB7FCA434397DB83C>II73 D<010FB612C0A4D90001EBE000B3B3EA0F80EA3FE0EA7FF0A2EAFF +F8A35E5C13F0007F495BD83FE091C7FC391F800FFE390FF03FFC6CB512F0000114C02600 +3FFCC8FC2A3A7FB831>I76 DIIIIIII<003FB91280A4D9F800EBF003D87FC09238007FC0 +49161F007EC7150FA2007C1707A200781703A400F818E0481701A4C892C7FCB3AE010FB7 +FCA43B387DB742>IIII<007FB5D8F803B512F8A4C66C48C7D80FF0C7FC6D +6C5D6D5E6F495A6D6D49C8FC7F6D6D137E6F5B6DEBF8016D5D6F485A6E6C485A023F130F +DA1FFF5BEE9F806E01FFC9FC805E6E5B6E5B80826F7E153F826F7F5D4B7F92B57EA2DA01 +F97FDA03F17F03F07F913807E07FDA0FC07F021F6D7E4B7E4A486C7F027E8102FE6D7F4A +7F49488149486D7F0107804A6E7E49488149486E7E013F81017F83B60107B61280A44139 +7DB848>I<003FB712FEA4913980007FFC01FCC7EAFFF801F05B01C015F0494913E090C7 +5A4816C0007E4A13805D007C16004B5A157F00785D4B5A5C5EC7485B5C5E5C4A5B93C7FC +5C4A5A5D14FF495B5D5B495B4B131E5B5D4990C7FC5B5C4948143E13FF5C485B48167E4A +147C484914FC5A4A13014890C7120348150F49143F4848EB01FFB8FCA42F397BB83A>90 +DI93 D97 D<13FFB5FCA412077EAF4AB47E020F13F0023F13 +FC9138FE03FFDAF00013804AEB7FC00280EB3FE091C713F0EE1FF8A217FC160FA217FEAA +17FCA3EE1FF8A217F06E133F6EEB7FE06E14C0903AFDF001FF80903AF8FC07FE009039F0 +3FFFF8D9E00F13E0D9C00390C7FC2F3A7EB935>I<903801FFC0010F13FC017F13FFD9FF +8013802603FE0013C048485AEA0FF8121F13F0123F6E13804848EB7F00151C92C7FC12FF +A9127FA27F123FED01E06C7E15036C6CEB07C06C6C14806C6C131FC69038C07E006DB45A +010F13F00101138023257DA42A>II<903803FF80011F13F0017F13FC3901FF83FE3A03FE007F804848 +133F484814C0001FEC1FE05B003FEC0FF0A2485A16F8150712FFA290B6FCA301E0C8FCA4 +127FA36C7E1678121F6C6C14F86D14F000071403D801FFEB0FE06C9038C07FC06DB51200 +010F13FC010113E025257DA42C>II<161FD907FEEBFFC090387FFFE348B6EAEFE02607FE07138F26 +0FF801131F48486C138F003F15CF4990387FC7C0EEC000007F81A6003F5DA26D13FF001F +5D6C6C4890C7FC3907FE07FE48B512F86D13E0261E07FEC8FC90CAFCA2123E123F7F6C7E +90B512F8EDFF8016E06C15F86C816C815A001F81393FC0000F48C8138048157F5A163FA3 +6C157F6C16006D5C6C6C495AD81FF0EB07FCD807FEEB3FF00001B612C06C6C91C7FC0107 +13F02B377DA530>I<13FFB5FCA412077EAFED7FC0913803FFF8020F13FE91381F03FFDA +3C01138014784A7E4A14C05CA25CA291C7FCB3A3B5D8FC3F13FFA4303A7DB935>II<13FFB5FCA412077EAF92380FFFE0A4923803FC0016F0ED0FE0ED1F804BC7 +FC157E5DEC03F8EC07E04A5A141FEC7FE04A7E8181A2ECCFFEEC0FFF496C7F806E7F6E7F +82157F6F7E6F7E82150F82B5D8F83F13F8A42D3A7EB932>107 D<13FFB5FCA412077EB3 +B3ACB512FCA4163A7DB91B>I<01FED97FE0EB0FFC00FF902601FFFC90383FFF80020701 +FF90B512E0DA1F81903983F03FF0DA3C00903887801F000749DACF007F00034914DE6D48 +D97FFC6D7E4A5CA24A5CA291C75BB3A3B5D8FC1FB50083B512F0A44C257DA451>I<01FE +EB7FC000FF903803FFF8020F13FE91381F03FFDA3C011380000713780003497E6D4814C0 +5CA25CA291C7FCB3A3B5D8FC3F13FFA430257DA435>I<903801FFC0010F13F8017F13FF +D9FF807F3A03FE003FE048486D7E48486D7E48486D7EA2003F81491303007F81A300FF16 +80A9007F1600A3003F5D6D1307001F5DA26C6C495A6C6C495A6C6C495A6C6C6CB45A6C6C +B5C7FC011F13FC010113C029257DA430>I<9039FF01FF80B5000F13F0023F13FC9138FE +07FFDAF00113800003496C13C00280EB7FE091C713F0EE3FF8A2EE1FFCA3EE0FFEAA17FC +161FA217F8163F17F06E137F6E14E06EEBFFC0DAF00313809139FC07FE0091383FFFF802 +0F13E0020390C7FC91C9FCACB512FCA42F357EA435>I<49B4EB0780010FEBE00F013FEB +F81F9039FFC07C3F0003EB803E3A07FE000F7F4848EB07FF121F497F123F497F127FA25B +12FFAA6C7EA36C7E5D6C7E000F5C6C6C5B6C6C133F6CEBC0FD39007FFFF1011F13C10101 +130190C7FCAC037F13FEA42F357DA432>I<9038FE03F000FFEB0FFEEC3FFF91387C7F80 +9138F8FFC000075B6C6C5A5CA29138807F80ED3F00150C92C7FC91C8FCB3A2B512FEA422 +257EA427>I<90383FF0383903FFFEF8000F13FF381FC00F383F0003007E1301007C1300 +12FC15787E7E6D130013FCEBFFE06C13FCECFF806C14C06C14F06C14F81203C614FC131F +9038007FFE140700F0130114007E157E7E157C6C14FC6C14F8EB80019038F007F090B512 +C000F8140038E01FF81F257DA426>I<130FA55BA45BA25B5BA25A1207001FEBFFE0B6FC +A3000390C7FCB21578A815F86CEB80F014816CEBC3E090383FFFC06D1380903803FE001D +357EB425>I<01FFEC3FC0B5EB3FFFA4000714016C80B3A35DA25DA26C5C6E4813E06CD9 +C03E13FF90387FFFFC011F13F00103138030257DA435>IIIII<003FB612C0A3D9F0031380EB800749481300003E5C00 +3C495A007C133F5D0078495A14FF5D495B5BC6485B92C7FC495A131F5C495A017FEB03C0 +EBFFF014E04813C05AEC80074813005A49EB0F80485A003F141F4848133F9038F001FFB7 +FCA322257DA42A>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fj ecbx2488 24.88 22 /Fj 22 118 df[<97263FFFE017E0071FB616010603B700F01503063F04FC15074DB96C @@ -1211,52 +1221,40 @@ 9139E001FF006E91B512FC033F5D030715E0030092C7FC040701F804E0C7FC6B5E79DC78 >I E %EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk ecrm1200 12 13 -/Fk 13 122 df<14FF010713E090381F81F890383E007C01FC133F4848EB1F8049130F48 +%DVIPSBitmapFont: Fk ecrm1200 12 9 +/Fk 9 122 df<14FF010713E090381F81F890383E007C01FC133F4848EB1F8049130F48 48EB07C04848EB03E0A2000F15F0491301001F15F8A2003F15FCA390C8FC4815FEA54815 FFB3A46C15FEA56D1301003F15FCA3001F15F8A26C6CEB03F0A36C6CEB07E0000315C06D 130F6C6CEB1F806C6CEB3F00013E137C90381F81F8903807FFE0010090C7FC28447CC131 ->48 D50 D<49B4FC010F13E0013F13FC -9038FE01FE3A01F0007F80D803C0EB3FC048C7EA1FE0120EED0FF0EA0FE0486C14F8A215 -077F5BA26C48130FEA03C0C813F0A3ED1FE0A2ED3FC01680ED7F0015FE4A5AEC03F0EC1F -C0D90FFFC7FC15F090380001FCEC007FED3F80ED1FC0ED0FE016F0ED07F816FC150316FE -A2150116FFA3121EEA7F80487EA416FE491303A2007EC713FC00701407003015F8003814 -0F6C15F06CEC1FE06C6CEB3FC0D803E0EB7F803A01FE01FE0039007FFFF8010F13E00101 -90C7FC28447CC131>I<121CA2EA1F8090B712C0A3481680A217005E0038C8120C003015 -1C00705D0060153016705E5E4814014B5A4BC7FCC81206150E5D151815385D156015E04A -5AA24A5A140792C8FC5CA25C141E143EA2147E147CA214FCA21301A3495AA41307A6130F -AA6D5AEB01C02A457BC231>55 D70 +>48 D<143014F013011303131F13FFB5FC13E713071200B3B3B0497E497E007FB6FCA320 +4278C131>II<49B4FC010F13E0013F +13FC9038FE01FE3A01F0007F80D803C0EB3FC048C7EA1FE0120EED0FF0EA0FE0486C14F8 +A215077F5BA26C48130FEA03C0C813F0A3ED1FE0A2ED3FC01680ED7F0015FE4A5AEC03F0 +EC1FC0D90FFFC7FC15F090380001FCEC007FED3F80ED1FC0ED0FE016F0ED07F816FC1503 +16FEA2150116FFA3121EEA7F80487EA416FE491303A2007EC713FC00701407003015F800 +38140F6C15F06CEC1FE06C6CEB3FC0D803E0EB7F803A01FE01FE0039007FFFF8010F13E0 +010190C7FC28447CC131>I77 D97 -DI101 D104 D<3903F803F000FFEB1FFCEC3C3EEC70 -7F0007EBE0FF3803F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3 -202C7DAB26>114 D<1306A5130EA4131EA3133E137EA213FE12011207001FB512F0B6FC -A2C648C7FCB3A4150CAA017E131C017F1318A26D133890381F8030ECC070903807E0E090 -3801FFC09038007F001E3E7EBC26>116 DI121 -D E +D104 D<1306A5130EA4131EA3133E137EA213FE12011207001FB512F0B6FCA2C648C7 +FCB3A4150CAA017E131C017F1318A26D133890381F8030ECC070903807E0E0903801FFC0 +9038007F001E3E7EBC26>116 D121 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fl ecrm1728 17.28 17 /Fl 17 118 df