                                              - fem -                                      Page    1

####################################################################################################
#                                                                                                  #
#     Micro Series 8051 C-Compiler V5.12O/DXT                              14/Apr/98  13:49:27     #
#     Front end V4.04                                                                              #
#     Global Optimizer V1.00E                                                                      #
#                                                                                                  #
#           Target option =  8051                                                                  #
#           Memory model  =  large                                                                 #
#           Source file   =  fem.c                                                                 #
#           List file     =  fem.lst                                                               #
#           Object file   =  fem.r03                                                               #
#           ASM file      =  fem.s03                                                               #
#           Command line  =  -o fem.r03 -l fem.lst -a fem.s03 -P -ml -g -e -x -r0n -q -p88 fem.c   #
#                                                                                                  #
#                                                                   (c) Copyright IAR Systems 1994 #
####################################################################################################

   \   0000                    NAME    fem(18)
   \   0000                    RSEG    CODE(0)
   \   0000                    RSEG    CSTR(0)
   \   0000                    RSEG    CONST(0)
   \   0000                    RSEG    X_UDATA(0)
   \   0000                    RSEG    X_IDATA(0)
   \   0000                    RSEG    X_CDATA(0)
   \   0000                    PUBLIC  EPROG
   \   0000                    PUBLIC  ERROR
   \   0000                    $DEFFN  ERROR(256,0,0,0,0,0,2,0),test_fun,cmd_rec,mem_dump,scan_net,main
   \   0000                    PUBLIC  FNP
   \   0000                    EXTERN  INP
   \   0000                    $DEFFN  INP(0,0,1,0),cmd_rec
   \   0000                    EXTERN  OUTP
   \   0000                    $DEFFN  OUTP(0,0,2,0),cmd_rec
   \   0000                    PUBLIC  SWRESET
   \   0000                    PUBLIC  UFUN
   \   0000                    EXTERN  arc51_init
   \   0000                    $DEFFN  arc51_init(0,0,0,0),test_fun,main
   \   0000                    EXTERN  arc51_nodeid
   \   0000                    EXTERN  arc51_port
   \   0000                    EXTERN  arc51_read
   \   0000                    $DEFFN  arc51_read(0,0,3,0),test_fun,mem_dump,scan_net
   \   0000                    EXTERN  arc51_write
   \   0000                    $DEFFN  arc51_write(0,0,3,0),testsend,readback
   \   0000                    PUBLIC  buf
   \   0000                    PUBLIC  cmd_rec
   \   0000                    $DEFFN  cmd_rec(256,0,7,0,0,0,0,0),scan_net
   \   0000                    PUBLIC  copy_code
   \   0000                    $DEFFN  copy_code(0,0,2,0,0,0,0,0),cmd_rec
   \   0000                    PUBLIC  fblock
   \   0000                    PUBLIC  gen_cs
   \   0000                    $DEFFN  gen_cs(0,0,0,0,0,0,2,0),test_fun
   \   0000                    PUBLIC  grpid
   \   0000                    PUBLIC  main
   \   0000                    $DEFFN  main(0,0,12,0,0,0,0,0)
   \   0000                    PUBLIC  mem_dump
   \   0000                    $DEFFN  mem_dump(0,0,8,0,0,0,0,0),scan_net
   \   0000                    PUBLIC  nid
   \   0000                    PUBLIC  node_wake
   \   0000                    $DEFFN  node_wake(0,0,0,0,0,0,0,0),test_fun,main
   \   0000                    PUBLIC  pckt
   \   0000                    PUBLIC  pktsize
   \   0000                    $DEFFN  pktsize(0,0,2,0,0,0,0,0),mem_dump
   \   0000                    EXTERN  printf
   \   0000                    $DEFFN  printf(0,0,5,0),test_fun
   \   0000                    PUBLIC  readback
   \   0000                    $DEFFN  readback(0,0,6,0,0,0,2,0),node_wake,ERROR,cmd_rec
   \   0000                    PUBLIC  scan_net
   \   0000                    $DEFFN  scan_net(256,0,4,0,0,0,0,0),main
   \   0000                    PUBLIC  setup_pckt
   \   0000                    $DEFFN  setup_pckt(0,0,0,0,0,0,0,0),scan_net
   \   0000                    PUBLIC  temp
   \   0000                    PUBLIC  test_fun
   \   0000                    $DEFFN  test_fun(0,0,15,0,0,0,0,0),main
   \   0000                    PUBLIC  testsend
   \   0000                    $DEFFN  testsend(0,0,8,0,0,0,2,0),test_fun
   \   0000                    PUBLIC  time_out
   \   0000                    $DEFFN  time_out(0,0,0,0,0,0,2,0),mem_dump
   \   0000                    PUBLIC  userbuf
   \   0000                    EXTERN  ?SI_DIV_L00
   \   0000                    EXTERN  ?ST_A_R123_L17
   \   0000                    EXTERN  ?A_S_SWITCH_L05
   \   0000                    EXTERN  ?AR5_SC_SWITCH_L05
   \   0000                    EXTERN  ?LOAD_IND_DPTR2_L20
   \   0000                    EXTERN  ?LCALL_IND_L20
   \   0000                    EXTERN  ?CL8051L_5_12_L17
   \   0000                    RSEG    CODE
   \   0000            main:
                                              - fem -                                      Page    2

      1          
      2          /* ------------------------------------------------------------------------*/
      3          /* Project:       FEM BOOT PROGRAM                                         */
      4          /* Filename:      FEM.C                                                    */
      5          /* Description:   BOOT PROGRAM FOR THE GENERIC ARCNET FEM BOARD            */
      6          /* Version:       1.00                                                     */
      7          /* Author:        Jack Fried;                                              */
      8          /* History:       ORIGINAL 7/17/97  for com200510                          */
      9          /*                        11/20/97  edited for built in self test          */
     10          /*                        2/13/98   edited for active network map          */
     11          /*                        3/25/98   edited for delfault load after 30 sec  */
     12          /*                        3/26/98   user program readback feture added     */
     13          /* ------------------------------------------------------------------------*/
     14          /*                                                                         */
     15          /*                                                                         */
     16          /*   This program is the main boot program for the FEM. It initilizes      */
     17          /*   the arcnet core and decodes the packet header information.            */
     18          /*   It then runs the appriate function.                                   */
     19          /*                                                                         */
     20          /* ------------------------------------------------------------------------*/
     21          /*
     22          DATE: 7/17/97
     23          
     24                 The software on this disk Has NOT been fully tested.  In no way is
     25             BNL responsible for the use of this software or any damage resulting in its
     26             use.  If any bugs are found in this software  please send me E-mail 
     27             stating the problem and solution if you have one.   
     28                                                          Jack Fried      
     29                                                          jfried@inst.inst.bnl.gov
     30          
     31          */
     32          
     33          
     34          #include  <fem.h>
     35          #define   PKT_size      500             /*packet size normal value  500 bytes */
     36          #define   debug        if (1) 
     37          
     38          
     39          
     40          
     41          /* ------------------------------------------------------------------------- */
     42          /* external variable definitions                                             */
     43          /* ------------------------------------------------------------------------- */
     44          extern USIGN16 arc51_port;
     45          extern USIGN16 arc51_swport;
     46          extern USIGN8  arc51_nodeid;
     47          extern USIGN16 arc51_port;
     48          
     49          
     50          
     51          /* ------------------------------------------------------------------------- */
     52          /* global variable definition                                                */
     53          /* ------------------------------------------------------------------------- */
     54          USIGN8 buf[512];
     55          USIGN8 userbuf[512];
     56          int nid = 0x15;
     57          int grpid =0;
     58          int temp;
     59          
     60          
     61          /*
     62          ----------------------------------------------------------------------
     63             void main(void)
     64          
     65                  This function calls the arcnet core setup function.
     66          ----------------------------------------------------------------------
     67          */
     68          void main(void)
     69          {  
     70             int status,nid1,nid2,m1,m2,i;
     71             
     72            GUF[0] = (int) readback;;
   \   0000  7400              MOV     A,#LOW $IFREF readback
   \   0002  7D00              MOV     R5,#HIGH $IFREF readback
   \   0004  9007F0            MOV     DPTR,#2032
   \   0007  CD                XCH     A,R5
   \   0008  F0                MOVX    @DPTR,A
   \   0009  A3                INC     DPTR
   \   000A  CD                XCH     A,R5
   \   000B  F0                MOVX    @DPTR,A
     73            GUF[1] = (int) ERROR;
   \   000C  7400              MOV     A,#LOW $IFREF ERROR
   \   000E  7D00              MOV     R5,#HIGH $IFREF ERROR
   \   0010  9007F2            MOV     DPTR,#2034
   \   0013  CD                XCH     A,R5
   \   0014  F0                MOVX    @DPTR,A
                                              - fem -                                      Page    3

   \   0015  A3                INC     DPTR
   \   0016  CD                XCH     A,R5
   \   0017  F0                MOVX    @DPTR,A
     74            GUF[2] = 1;
   \   0018  9007F4            MOV     DPTR,#2036
   \   001B  E4                CLR     A
   \   001C  F0                MOVX    @DPTR,A
   \   001D  A3                INC     DPTR
   \   001E  04                INC     A
   \   001F  F0                MOVX    @DPTR,A
     75            GUF[3] = 30;
   \   0020  9007F6            MOV     DPTR,#2038
   \   0023  E4                CLR     A
   \   0024  F0                MOVX    @DPTR,A
   \   0025  A3                INC     DPTR
   \   0026  741E              MOV     A,#30
   \   0028  F0                MOVX    @DPTR,A
     76          
     77            HOPDATA[0] = 0x88;
   \   0029  7488              MOV     A,#136
   \   002B  905FF8            MOV     DPTR,#24568
   \   002E  F0                MOVX    @DPTR,A
     78                                          /*  read in node ID */
     79               nid1 = (* (char xdata *) 0xfeff);
   \   002F  90FEFF            MOV     DPTR,#65279
   \   0032  E0                MOVX    A,@DPTR
   \   0033  7D00              MOV     R5,#0
   \   0035  900000            MOV     DPTR,#$LOCBX main+2
   \   0038  CD                XCH     A,R5
   \   0039  F0                MOVX    @DPTR,A
   \   003A  A3                INC     DPTR
   \   003B  CD                XCH     A,R5
   \   003C  F0                MOVX    @DPTR,A
     80               m1= 0x80;
   \   003D  900000            MOV     DPTR,#$LOCBX main+6
   \   0040  E4                CLR     A
   \   0041  F0                MOVX    @DPTR,A
   \   0042  A3                INC     DPTR
   \   0043  7480              MOV     A,#128
   \   0045  F0                MOVX    @DPTR,A
     81               m2= 0x01;
   \   0046  900000            MOV     DPTR,#$LOCBX main+8
   \   0049  E4                CLR     A
   \   004A  F0                MOVX    @DPTR,A
   \   004B  A3                INC     DPTR
   \   004C  04                INC     A
   \   004D  F0                MOVX    @DPTR,A
     82               nid2 = 0;
   \   004E  900000            MOV     DPTR,#$LOCBX main+4
   \   0051  E4                CLR     A
   \   0052  F0                MOVX    @DPTR,A
   \   0053  A3                INC     DPTR
   \   0054  F0                MOVX    @DPTR,A
     83               for(i=0;i<=7;i++)
   \   0055  900000            MOV     DPTR,#$LOCBX main+10
   \   0058  E4                CLR     A
   \   0059  F0                MOVX    @DPTR,A
   \   005A  A3                INC     DPTR
   \   005B  F0                MOVX    @DPTR,A
   \   005C            ?0001:
   \   005C  D3                SETB    C
   \   005D  900000            MOV     DPTR,#$LOCBX main+11
   \   0060  E0                MOVX    A,@DPTR
   \   0061  9407              SUBB    A,#7
   \   0063  900000            MOV     DPTR,#$LOCBX main+10
   \   0066  E0                MOVX    A,@DPTR
   \   0067  6480              XRL     A,#128
   \   0069  9480              SUBB    A,#128
   \   006B  506E              JNC     ?0000
   \   006D            ?0002:
     84               {
     85                 if((nid1 & m1) != 0)
   \   006D  900000            MOV     DPTR,#$LOCBX main+2
   \   0070  E0                MOVX    A,@DPTR
   \   0071  FD                MOV     R5,A
   \   0072  A3                INC     DPTR
   \   0073  E0                MOVX    A,@DPTR
   \   0074  900000            MOV     DPTR,#$LOCBX main+7
   \   0077  FE                MOV     R6,A
   \   0078  E0                MOVX    A,@DPTR
   \   0079  5E                ANL     A,R6
   \   007A  FC                MOV     R4,A
   \   007B  900000            MOV     DPTR,#$LOCBX main+6
   \   007E  E0                MOVX    A,@DPTR
   \   007F  5D                ANL     A,R5
   \   0080  4C                ORL     A,R4
                                              - fem -                                      Page    4

   \   0081  601B              JZ      ?0005
   \   0083            ?0004:
     86                    nid2 = nid2 |  m2;
   \   0083  900000            MOV     DPTR,#$LOCBX main+4
   \   0086  E0                MOVX    A,@DPTR
   \   0087  FF                MOV     R7,A
   \   0088  A3                INC     DPTR
   \   0089  E0                MOVX    A,@DPTR
   \   008A  FE                MOV     R6,A
   \   008B  900000            MOV     DPTR,#$LOCBX main+9
   \   008E  E0                MOVX    A,@DPTR
   \   008F  4E                ORL     A,R6
   \   0090  FE                MOV     R6,A
   \   0091  900000            MOV     DPTR,#$LOCBX main+8
   \   0094  E0                MOVX    A,@DPTR
   \   0095  4F                ORL     A,R7
   \   0096  900000            MOV     DPTR,#$LOCBX main+4
   \   0099  F0                MOVX    @DPTR,A
   \   009A  A3                INC     DPTR
   \   009B  CE                XCH     A,R6
   \   009C  F0                MOVX    @DPTR,A
   \   009D  CE                XCH     A,R6
   \   009E            ?0005:
     87                 m1 =  m1 >> 1;
   \   009E  900000            MOV     DPTR,#$LOCBX main+6
   \   00A1  E0                MOVX    A,@DPTR
   \   00A2  FF                MOV     R7,A
   \   00A3  A3                INC     DPTR
   \   00A4  E0                MOVX    A,@DPTR
   \   00A5  FE                MOV     R6,A
   \   00A6  EF                MOV     A,R7
   \   00A7  A2E7              MOV     C,ACC.7
   \   00A9  13                RRC     A
   \   00AA  FF                MOV     R7,A
   \   00AB  EE                MOV     A,R6
   \   00AC  13                RRC     A
   \   00AD  900000            MOV     DPTR,#$LOCBX main+6
   \   00B0  CF                XCH     A,R7
   \   00B1  F0                MOVX    @DPTR,A
   \   00B2  A3                INC     DPTR
   \   00B3  CF                XCH     A,R7
   \   00B4  F0                MOVX    @DPTR,A
     88                 m2 =  m2 << 1;
   \   00B5  900000            MOV     DPTR,#$LOCBX main+8
   \   00B8  E0                MOVX    A,@DPTR
   \   00B9  FF                MOV     R7,A
   \   00BA  A3                INC     DPTR
   \   00BB  E0                MOVX    A,@DPTR
   \   00BC  FE                MOV     R6,A
   \   00BD  EE                MOV     A,R6
   \   00BE  25E0              ADD     A,ACC
   \   00C0  CF                XCH     A,R7
   \   00C1  33                RLC     A
   \   00C2  CF                XCH     A,R7
   \   00C3  900000            MOV     DPTR,#$LOCBX main+8
   \   00C6  CF                XCH     A,R7
   \   00C7  F0                MOVX    @DPTR,A
   \   00C8  A3                INC     DPTR
   \   00C9  CF                XCH     A,R7
   \   00CA  F0                MOVX    @DPTR,A
   \   00CB  900000            MOV     DPTR,#$LOCBX main+11
   \   00CE  E0                MOVX    A,@DPTR
   \   00CF  04                INC     A
   \   00D0  F0                MOVX    @DPTR,A
   \   00D1  900000            MOV     DPTR,#$LOCBX main+10
   \   00D4  7003              JNZ     ?0223
   \   00D6  E0                MOVX    A,@DPTR
   \   00D7  04                INC     A
   \   00D8  F0                MOVX    @DPTR,A
   \   00D9            ?0223:
   \   00D9  8081              SJMP    ?0001
   \   00DB            ?0000:
     89               }
     90               nid = nid2;
   \   00DB  900000            MOV     DPTR,#$LOCBX main+4
   \   00DE  E0                MOVX    A,@DPTR
   \   00DF  FD                MOV     R5,A
   \   00E0  A3                INC     DPTR
   \   00E1  E0                MOVX    A,@DPTR
     91          
     92               /* nid = 0x8;*/
     93               grpid = nid & (0xf0);
   \   00E2  900000            MOV     DPTR,#nid
   \   00E5  CD                XCH     A,R5
   \   00E6  F0                MOVX    @DPTR,A
   \   00E7  A3                INC     DPTR
                                              - fem -                                      Page    5

   \   00E8  CD                XCH     A,R5
   \   00E9  F0                MOVX    @DPTR,A
   \   00EA  54F0              ANL     A,#240
   \   00EC  7D00              MOV     R5,#0
   \   00EE  900002            MOV     DPTR,#grpid
   \   00F1  CD                XCH     A,R5
   \   00F2  F0                MOVX    @DPTR,A
   \   00F3  A3                INC     DPTR
   \   00F4  CD                XCH     A,R5
   \   00F5  F0                MOVX    @DPTR,A
     94               arc51_nodeid = nid;
   \   00F6  900001            MOV     DPTR,#nid+1
   \   00F9  E0                MOVX    A,@DPTR
   \   00FA  900000            MOV     DPTR,#arc51_nodeid
   \   00FD  F0                MOVX    @DPTR,A
     95                  
     96             if (nid == 0x02)
   \   00FE  900001            MOV     DPTR,#nid+1
   \   0101  E0                MOVX    A,@DPTR
   \   0102  6402              XRL     A,#2
   \   0104  7004              JNZ     ?0224
   \   0106  900000            MOV     DPTR,#nid
   \   0109  E0                MOVX    A,@DPTR
   \   010A            ?0224:
   \   010A  7026              JNZ     ?0007
   \   010C            ?0006:
     97             {
     98                nid = 0x01;
   \   010C  900000            MOV     DPTR,#nid
   \   010F  E4                CLR     A
   \   0110  F0                MOVX    @DPTR,A
   \   0111  A3                INC     DPTR
   \   0112  04                INC     A
   \   0113  F0                MOVX    @DPTR,A
     99                grpid = nid & (0xf0);
   \   0114  900001            MOV     DPTR,#nid+1
   \   0117  E0                MOVX    A,@DPTR
   \   0118  54F0              ANL     A,#240
   \   011A  7D00              MOV     R5,#0
   \   011C  900002            MOV     DPTR,#grpid
   \   011F  CD                XCH     A,R5
   \   0120  F0                MOVX    @DPTR,A
   \   0121  A3                INC     DPTR
   \   0122  CD                XCH     A,R5
   \   0123  F0                MOVX    @DPTR,A
    100                arc51_nodeid = nid;
   \   0124  900001            MOV     DPTR,#nid+1
   \   0127  E0                MOVX    A,@DPTR
   \   0128  900000            MOV     DPTR,#arc51_nodeid
   \   012B  F0                MOVX    @DPTR,A
    101                test_fun();
   \   012C  120000            LCALL   $REFFN test_fun
   \   012F            ?0009:
    102                while(1);
   \   012F  00                NOP
    103             }
   \   0130  80FD              SJMP    ?0009
   \   0132            ?0007:
    104             status = arc51_init();           /* init the arcnet core */
   \   0132  120000            LCALL   $REFFN arc51_init
   \   0135  EC                MOV     A,R4
   \   0136  7D00              MOV     R5,#0
    105             if(status == E_OK) 
   \   0138  900000            MOV     DPTR,#$LOCBX main
   \   013B  CD                XCH     A,R5
   \   013C  F0                MOVX    @DPTR,A
   \   013D  A3                INC     DPTR
   \   013E  CD                XCH     A,R5
   \   013F  F0                MOVX    @DPTR,A
   \   0140  4D                ORL     A,R5
   \   0141  7005              JNZ     ?0012
   \   0143            ?0011:
    106                  node_wake();
   \   0143  120000            LCALL   $REFFN node_wake
    107             else
   \   0146  8006              SJMP    ?0013
   \   0148            ?0012:
    108                   ERROR(0);
   \   0148  E4                CLR     A
   \   0149  FC                MOV     R4,A
   \   014A  FD                MOV     R5,A
   \   014B  120000            LCALL   $REFFN ERROR
   \   014E            ?0013:
    109             scan_net();
   \   014E  120000            LCALL   $REFFN scan_net
    110          }
                                              - fem -                                      Page    6

   \   0151  22                RET
   \   0152            scan_net:
    111          
    112          /*
    113          ----------------------------------------------------------------------
    114             void scan_net()
    115          
    116                  This function is in a loop waiting for a packet to arrive.
    117            When a packet arrives it determines what to do with it and acts accordinly.
    118          ----------------------------------------------------------------------
    119          */
    120          
    121          void scan_net()
    122          {
    123          int sec=GUF[3],i=0;
   \   0152  9007F6            MOV     DPTR,#2038
   \   0155  E0                MOVX    A,@DPTR
   \   0156  FD                MOV     R5,A
   \   0157  A3                INC     DPTR
   \   0158  E0                MOVX    A,@DPTR
   \   0159  900000            MOV     DPTR,#$LOCBX scan_net
   \   015C  CD                XCH     A,R5
   \   015D  F0                MOVX    @DPTR,A
   \   015E  A3                INC     DPTR
   \   015F  CD                XCH     A,R5
   \   0160  F0                MOVX    @DPTR,A
   \   0161  900000            MOV     DPTR,#$LOCBX scan_net+2
   \   0164  E4                CLR     A
   \   0165  F0                MOVX    @DPTR,A
   \   0166  A3                INC     DPTR
   \   0167  F0                MOVX    @DPTR,A
   \   0168            ?0015:
    124          
    125             while(1)
   \   0168  00                NOP
    126             {
    127                if (arc51_read(&buf[0]) == E_OK)        /* if status = 0 a packet was recived */
   \   0169  7D0C              MOV     R5,#LOW(buf)
   \   016B  7E00              MOV     R6,#HIGH(buf)
   \   016D  7F01              MOV     R7,#1
   \   016F  120000            LCALL   $REFFN arc51_read
   \   0172  BC0059            CJNE    R4,#0,?0018
   \   0175            ?0017:
    128                  if((buf[NODEID+4] == nid) || (buf[GRPCMD+4] == PUB) || (buf[GRPCMD+4] == grpid))
   \   0175  900010            MOV     DPTR,#buf+4
   \   0178  E0                MOVX    A,@DPTR
   \   0179  7D00              MOV     R5,#0
   \   017B  FC                MOV     R4,A
   \   017C  900001            MOV     DPTR,#nid+1
   \   017F  E0                MOVX    A,@DPTR
   \   0180  6C                XRL     A,R4
   \   0181  7007              JNZ     ?0225
   \   0183  900000            MOV     DPTR,#nid
   \   0186  E0                MOVX    A,@DPTR
   \   0187  6D                XRL     A,R5
   \   0188  601C              JZ      ?0019
   \   018A            ?0225:
   \   018A  900013            MOV     DPTR,#buf+7
   \   018D  E0                MOVX    A,@DPTR
   \   018E  14                DEC     A
   \   018F  6015              JZ      ?0019
   \   0191  900013            MOV     DPTR,#buf+7
   \   0194  E0                MOVX    A,@DPTR
   \   0195  7D00              MOV     R5,#0
   \   0197  FC                MOV     R4,A
   \   0198  900003            MOV     DPTR,#grpid+1
   \   019B  E0                MOVX    A,@DPTR
   \   019C  6C                XRL     A,R4
   \   019D  7005              JNZ     ?0226
   \   019F  900002            MOV     DPTR,#grpid
   \   01A2  E0                MOVX    A,@DPTR
   \   01A3  6D                XRL     A,R5
   \   01A4            ?0226:
   \   01A4  7028              JNZ     ?0020
   \   01A6            ?0021:
   \   01A6            ?0022:
   \   01A6            ?0019:
    129                      if (buf[ERR+4] == 0)
   \   01A6  900014            MOV     DPTR,#buf+8
   \   01A9  E0                MOVX    A,@DPTR
   \   01AA  701B              JNZ     ?0024
   \   01AC            ?0023:
    130                      {
    131                        setup_pckt();                /* read in packet header info */
   \   01AC  120000            LCALL   $REFFN setup_pckt
    132                        if(pckt.cmd == ECHO)
                                              - fem -                                      Page    7

   \   01AF  900000            MOV     DPTR,#pckt
   \   01B2  E0                MOVX    A,@DPTR
   \   01B3  B40405            CJNE    A,#4,?0026
   \   01B6            ?0025:
    133                           cmd_rec();
   \   01B6  120000            LCALL   $REFFN cmd_rec
   \   01B9  800A              SJMP    ?0027
   \   01BB            ?0026:
    134                        else if (mem_dump() == E_OK)
   \   01BB  120000            LCALL   $REFFN mem_dump
   \   01BE  EC                MOV     A,R4
   \   01BF  4D                ORL     A,R5
   \   01C0  7003              JNZ     ?0029
   \   01C2            ?0028:
    135                             cmd_rec();
   \   01C2  120000            LCALL   $REFFN cmd_rec
   \   01C5            ?0029:
   \   01C5            ?0027:
    136                      }
    137                      else
   \   01C5  8007              SJMP    ?0030
   \   01C7            ?0024:
    138                        ERROR(2);
   \   01C7  E4                CLR     A
   \   01C8  FD                MOV     R5,A
   \   01C9  7C02              MOV     R4,#2
   \   01CB  120000            LCALL   $REFFN ERROR
   \   01CE            ?0030:
   \   01CE            ?0020:
   \   01CE            ?0018:
    139          
    140                if (GUF[2] == 1)
   \   01CE  9007F5            MOV     DPTR,#2037
   \   01D1  E0                MOVX    A,@DPTR
   \   01D2  14                DEC     A
   \   01D3  7004              JNZ     ?0227
   \   01D5  9007F4            MOV     DPTR,#2036
   \   01D8  E0                MOVX    A,@DPTR
   \   01D9            ?0227:
   \   01D9  6003              JZ      $+5
   \   01DB  02028A            LJMP    ?0032
   \   01DE            ?0031:
    141                {i++;
   \   01DE  900000            MOV     DPTR,#$LOCBX scan_net+3
   \   01E1  E0                MOVX    A,@DPTR
   \   01E2  04                INC     A
   \   01E3  F0                MOVX    @DPTR,A
   \   01E4  900000            MOV     DPTR,#$LOCBX scan_net+2
   \   01E7  7003              JNZ     ?0228
   \   01E9  E0                MOVX    A,@DPTR
   \   01EA  04                INC     A
   \   01EB  F0                MOVX    @DPTR,A
   \   01EC            ?0228:
    142                  if (i==3100)
   \   01EC  900000            MOV     DPTR,#$LOCBX scan_net+3
   \   01EF  E0                MOVX    A,@DPTR
   \   01F0  641C              XRL     A,#28
   \   01F2  7006              JNZ     ?0229
   \   01F4  900000            MOV     DPTR,#$LOCBX scan_net+2
   \   01F7  E0                MOVX    A,@DPTR
   \   01F8  640C              XRL     A,#12
   \   01FA            ?0229:
   \   01FA  6003              JZ      $+5
   \   01FC  02028A            LJMP    ?0034
   \   01FF            ?0033:
    143                  {
    144                    sec--;
   \   01FF  900000            MOV     DPTR,#$LOCBX scan_net+1
   \   0202  E0                MOVX    A,@DPTR
   \   0203  24FF              ADD     A,#255
   \   0205  F0                MOVX    @DPTR,A
   \   0206  900000            MOV     DPTR,#$LOCBX scan_net
   \   0209  E0                MOVX    A,@DPTR
   \   020A  34FF              ADDC    A,#255
   \   020C  F0                MOVX    @DPTR,A
    145                    i=0;
   \   020D  900000            MOV     DPTR,#$LOCBX scan_net+2
   \   0210  E4                CLR     A
   \   0211  F0                MOVX    @DPTR,A
   \   0212  A3                INC     DPTR
   \   0213  F0                MOVX    @DPTR,A
    146                    
    147                    if(sec == 0)
   \   0214  900000            MOV     DPTR,#$LOCBX scan_net
   \   0217  E0                MOVX    A,@DPTR
   \   0218  FD                MOV     R5,A
                                              - fem -                                      Page    8

   \   0219  A3                INC     DPTR
   \   021A  E0                MOVX    A,@DPTR
   \   021B  4D                ORL     A,R5
   \   021C  706C              JNZ     ?0036
   \   021E            ?0035:
    148                    {
    149                       GUF[2] = 0;
   \   021E  9007F4            MOV     DPTR,#2036
   \   0221  E4                CLR     A
   \   0222  F0                MOVX    @DPTR,A
   \   0223  A3                INC     DPTR
   \   0224  F0                MOVX    @DPTR,A
    150                       if ((* (char code *) PGB) == 0x77)
   \   0225  90FEFF            MOV     DPTR,#65279
   \   0228  E4                CLR     A
   \   0229  93                MOVC    A,@A+DPTR
   \   022A  B47741            CJNE    A,#119,?0038
   \   022D            ?0037:
    151                       {
    152                          HOPDATA[CMD] = DEF_RTN;
   \   022D  740A              MOV     A,#10
   \   022F  905FF9            MOV     DPTR,#24569
   \   0232  F0                MOVX    @DPTR,A
    153                          HOPDATA[NODEID] = nid;
   \   0233  900001            MOV     DPTR,#nid+1
   \   0236  E0                MOVX    A,@DPTR
   \   0237  905FF8            MOV     DPTR,#24568
   \   023A  F0                MOVX    @DPTR,A
    154                          USR_FUNC;
   \   023B  7D00              MOV     R5,#LOW(UFUN)
   \   023D  7E00              MOV     R6,#HIGH(UFUN)
   \   023F  7F02              MOV     R7,#2
   \   0241  900007            MOV     DPTR,#FNP
   \   0244  EF                MOV     A,R7
   \   0245  F0                MOVX    @DPTR,A
   \   0246  A3                INC     DPTR
   \   0247  EE                MOV     A,R6
   \   0248  F0                MOVX    @DPTR,A
   \   0249  A3                INC     DPTR
   \   024A  ED                MOV     A,R5
   \   024B  F0                MOVX    @DPTR,A
   \   024C  900008            MOV     DPTR,#FNP+1
   \   024F  E0                MOVX    A,@DPTR
   \   0250  FD                MOV     R5,A
   \   0251  A3                INC     DPTR
   \   0252  E0                MOVX    A,@DPTR
   \   0253  90000A            MOV     DPTR,#fblock
   \   0256  CD                XCH     A,R5
   \   0257  F0                MOVX    @DPTR,A
   \   0258  A3                INC     DPTR
   \   0259  CD                XCH     A,R5
   \   025A  F0                MOVX    @DPTR,A
   \   025B  90000A            MOV     DPTR,#fblock
   \   025E  E0                MOVX    A,@DPTR
   \   025F  FF                MOV     R7,A
   \   0260  A3                INC     DPTR
   \   0261  E0                MOVX    A,@DPTR
   \   0262  F582              MOV     DPL,A
   \   0264  8F83              MOV     DPH,R7
   \   0266  120000            LCALL   ?LOAD_IND_DPTR2_L20
   \   0269  120000            LCALL   ?LCALL_IND_L20
    155                       }
    156                       else
   \   026C  800D              SJMP    ?0039
   \   026E            ?0038:
    157                       {
    158                         pckt.error = 77;
   \   026E  744D              MOV     A,#77
   \   0270  900006            MOV     DPTR,#pckt+6
   \   0273  F0                MOVX    @DPTR,A
    159                         ERROR(9);
   \   0274  E4                CLR     A
   \   0275  FD                MOV     R5,A
   \   0276  7C09              MOV     R4,#9
   \   0278  120000            LCALL   $REFFN ERROR
   \   027B            ?0039:
    160                       }
    161                      sec = GUF[3];
   \   027B  9007F6            MOV     DPTR,#2038
   \   027E  E0                MOVX    A,@DPTR
   \   027F  FD                MOV     R5,A
   \   0280  A3                INC     DPTR
   \   0281  E0                MOVX    A,@DPTR
   \   0282  900000            MOV     DPTR,#$LOCBX scan_net
   \   0285  CD                XCH     A,R5
   \   0286  F0                MOVX    @DPTR,A
                                              - fem -                                      Page    9

   \   0287  A3                INC     DPTR
   \   0288  CD                XCH     A,R5
   \   0289  F0                MOVX    @DPTR,A
   \   028A            ?0036:
   \   028A            ?0034:
   \   028A            ?0032:
    162                     }
    163                  }
    164               }
    165             }
    166          }
   \   028A  020168            LJMP    ?0015
   \   028D            readback:
    167          
    168          /*  
    169          ----------------------------------------------------------------------
    170              void readback()
    171                  This fuction transmits the entire hooper memory to node 1 base on
    172              data length
    173          ----------------------------------------------------------------------
    174          */
    175          void  readback(USIGN16 dlen)
    176          {
    177               int count,i,ii;
    178               count = 0; 
   \   028D  900000            MOV     DPTR,#$LOCBX readback
   \   0290  E4                CLR     A
   \   0291  F0                MOVX    @DPTR,A
   \   0292  A3                INC     DPTR
   \   0293  F0                MOVX    @DPTR,A
    179                                   /* calculate the number of bytes to send */
    180               dlen =dlen+8;
   \   0294  EC                MOV     A,R4
   \   0295  2408              ADD     A,#8
   \   0297  FC                MOV     R4,A
   \   0298  E4                CLR     A
   \   0299  3D                ADDC    A,R5
    181               HOPDATA[DLEN] =   (USIGN8) ((0xFF00 & dlen) >> 8);
   \   029A  900000            MOV     DPTR,#$LOCBX readback+6
   \   029D  F0                MOVX    @DPTR,A
   \   029E  A3                INC     DPTR
   \   029F  CC                XCH     A,R4
   \   02A0  F0                MOVX    @DPTR,A
   \   02A1  CC                XCH     A,R4
   \   02A2  FD                MOV     R5,A
   \   02A3  E4                CLR     A
   \   02A4  ED                MOV     A,R5
   \   02A5  7D00              MOV     R5,#0
   \   02A7  905FFE            MOV     DPTR,#24574
   \   02AA  F0                MOVX    @DPTR,A
    182               HOPDATA[DLEN+1] = (USIGN8) (0x00FF & dlen);
   \   02AB  900000            MOV     DPTR,#$LOCBX readback+7
   \   02AE  E0                MOVX    A,@DPTR
   \   02AF  7D00              MOV     R5,#0
   \   02B1  905FFF            MOV     DPTR,#24575
   \   02B4  F0                MOVX    @DPTR,A
   \   02B5            ?0041:
    183                  
    184               while (dlen > count)
   \   02B5  900000            MOV     DPTR,#$LOCBX readback+6
   \   02B8  E0                MOVX    A,@DPTR
   \   02B9  FD                MOV     R5,A
   \   02BA  A3                INC     DPTR
   \   02BB  E0                MOVX    A,@DPTR
   \   02BC  FC                MOV     R4,A
   \   02BD  900000            MOV     DPTR,#$LOCBX readback+1
   \   02C0  E0                MOVX    A,@DPTR
   \   02C1  C3                CLR     C
   \   02C2  9C                SUBB    A,R4
   \   02C3  900000            MOV     DPTR,#$LOCBX readback
   \   02C6  E0                MOVX    A,@DPTR
   \   02C7  9D                SUBB    A,R5
   \   02C8  4003              JC      $+5
   \   02CA  0203DA            LJMP    ?0040
   \   02CD            ?0042:
    185               {
    186                  i= 0;
   \   02CD  900000            MOV     DPTR,#$LOCBX readback+2
   \   02D0  E4                CLR     A
   \   02D1  F0                MOVX    @DPTR,A
   \   02D2  A3                INC     DPTR
   \   02D3  F0                MOVX    @DPTR,A
   \   02D4            ?0044:
    187          
    188                                  /* break up the hopper memory into packets */
    189                  while ((i < PKT_size) && (dlen > count))  
                                              - fem -                                      Page   10

   \   02D4  C3                CLR     C
   \   02D5  900000            MOV     DPTR,#$LOCBX readback+3
   \   02D8  E0                MOVX    A,@DPTR
   \   02D9  94F4              SUBB    A,#244
   \   02DB  900000            MOV     DPTR,#$LOCBX readback+2
   \   02DE  E0                MOVX    A,@DPTR
   \   02DF  6480              XRL     A,#128
   \   02E1  9481              SUBB    A,#129
   \   02E3  505A              JNC     ?0043
   \   02E5  900000            MOV     DPTR,#$LOCBX readback+6
   \   02E8  E0                MOVX    A,@DPTR
   \   02E9  FD                MOV     R5,A
   \   02EA  A3                INC     DPTR
   \   02EB  E0                MOVX    A,@DPTR
   \   02EC  FC                MOV     R4,A
   \   02ED  900000            MOV     DPTR,#$LOCBX readback+1
   \   02F0  E0                MOVX    A,@DPTR
   \   02F1  C3                CLR     C
   \   02F2  9C                SUBB    A,R4
   \   02F3  900000            MOV     DPTR,#$LOCBX readback
   \   02F6  E0                MOVX    A,@DPTR
   \   02F7  9D                SUBB    A,R5
   \   02F8  5045              JNC     ?0043
   \   02FA            ?0047:
   \   02FA            ?0046:
   \   02FA            ?0045:
    190                  {
    191                   userbuf[i] = HOPDATA[count];
   \   02FA  900000            MOV     DPTR,#$LOCBX readback+1
   \   02FD  E0                MOVX    A,@DPTR
   \   02FE  24F8              ADD     A,#248
   \   0300  FC                MOV     R4,A
   \   0301  900000            MOV     DPTR,#$LOCBX readback
   \   0304  E0                MOVX    A,@DPTR
   \   0305  345F              ADDC    A,#95
   \   0307  8C82              MOV     DPL,R4
   \   0309  F583              MOV     DPH,A
   \   030B  E0                MOVX    A,@DPTR
   \   030C  FE                MOV     R6,A
   \   030D  900000            MOV     DPTR,#$LOCBX readback+3
   \   0310  E0                MOVX    A,@DPTR
   \   0311  240C              ADD     A,#LOW(userbuf)
   \   0313  FC                MOV     R4,A
   \   0314  900000            MOV     DPTR,#$LOCBX readback+2
   \   0317  E0                MOVX    A,@DPTR
   \   0318  3402              ADDC    A,#HIGH(userbuf)
   \   031A  FD                MOV     R5,A
   \   031B  EE                MOV     A,R6
   \   031C  8C82              MOV     DPL,R4
   \   031E  8D83              MOV     DPH,R5
   \   0320  F0                MOVX    @DPTR,A
    192                   count++;
   \   0321  900000            MOV     DPTR,#$LOCBX readback+1
   \   0324  E0                MOVX    A,@DPTR
   \   0325  04                INC     A
   \   0326  F0                MOVX    @DPTR,A
   \   0327  900000            MOV     DPTR,#$LOCBX readback
   \   032A  7003              JNZ     ?0230
   \   032C  E0                MOVX    A,@DPTR
   \   032D  04                INC     A
   \   032E  F0                MOVX    @DPTR,A
   \   032F            ?0230:
    193                   i++;
   \   032F  900000            MOV     DPTR,#$LOCBX readback+3
   \   0332  E0                MOVX    A,@DPTR
   \   0333  04                INC     A
   \   0334  F0                MOVX    @DPTR,A
   \   0335  900000            MOV     DPTR,#$LOCBX readback+2
   \   0338  7003              JNZ     ?0231
   \   033A  E0                MOVX    A,@DPTR
   \   033B  04                INC     A
   \   033C  F0                MOVX    @DPTR,A
   \   033D            ?0231:
   \   033D  8095              SJMP    ?0044
   \   033F            ?0043:
    194                  }
    195                  buf[0] = 0x01;
   \   033F  7401              MOV     A,#1
   \   0341  90000C            MOV     DPTR,#buf
   \   0344  F0                MOVX    @DPTR,A
    196                  buf[1] = 0x01;
   \   0345  7401              MOV     A,#1
   \   0347  90000D            MOV     DPTR,#buf+1
   \   034A  F0                MOVX    @DPTR,A
    197                  buf[2] = 0;
   \   034B  7400              MOV     A,#0
                                              - fem -                                      Page   11

   \   034D  90000E            MOV     DPTR,#buf+2
   \   0350  F0                MOVX    @DPTR,A
    198                  buf[3] = i;
   \   0351  900000            MOV     DPTR,#$LOCBX readback+3
   \   0354  E0                MOVX    A,@DPTR
   \   0355  90000F            MOV     DPTR,#buf+3
   \   0358  F0                MOVX    @DPTR,A
    199                  if ( i >=256) buf[2] =1;        /* for long packet */
   \   0359  900000            MOV     DPTR,#$LOCBX readback+2
   \   035C  E0                MOVX    A,@DPTR
   \   035D  6480              XRL     A,#128
   \   035F  C3                CLR     C
   \   0360  9481              SUBB    A,#129
   \   0362  4006              JC      ?0049
   \   0364            ?0048:
   \   0364  7401              MOV     A,#1
   \   0366  90000E            MOV     DPTR,#buf+2
   \   0369  F0                MOVX    @DPTR,A
   \   036A            ?0049:
    200                  for(ii=0;ii<i;ii++) buf[4+ii] = userbuf[ii];    
   \   036A  900000            MOV     DPTR,#$LOCBX readback+4
   \   036D  E4                CLR     A
   \   036E  F0                MOVX    @DPTR,A
   \   036F  A3                INC     DPTR
   \   0370  F0                MOVX    @DPTR,A
   \   0371            ?0051:
   \   0371  900000            MOV     DPTR,#$LOCBX readback+4
   \   0374  E0                MOVX    A,@DPTR
   \   0375  FD                MOV     R5,A
   \   0376  A3                INC     DPTR
   \   0377  E0                MOVX    A,@DPTR
   \   0378  FC                MOV     R4,A
   \   0379  900000            MOV     DPTR,#$LOCBX readback+3
   \   037C  E0                MOVX    A,@DPTR
   \   037D  D3                SETB    C
   \   037E  9C                SUBB    A,R4
   \   037F  900000            MOV     DPTR,#$LOCBX readback+2
   \   0382  E0                MOVX    A,@DPTR
   \   0383  6480              XRL     A,#128
   \   0385  CD                XCH     A,R5
   \   0386  6480              XRL     A,#128
   \   0388  CD                XCH     A,R5
   \   0389  9D                SUBB    A,R5
   \   038A  4037              JC      ?0050
   \   038C            ?0052:
   \   038C  900000            MOV     DPTR,#$LOCBX readback+4
   \   038F  E0                MOVX    A,@DPTR
   \   0390  FF                MOV     R7,A
   \   0391  A3                INC     DPTR
   \   0392  E0                MOVX    A,@DPTR
   \   0393  FE                MOV     R6,A
   \   0394  EF                MOV     A,R7
   \   0395  FD                MOV     R5,A
   \   0396  EE                MOV     A,R6
   \   0397  240C              ADD     A,#LOW(userbuf)
   \   0399  F582              MOV     DPL,A
   \   039B  ED                MOV     A,R5
   \   039C  3402              ADDC    A,#HIGH(userbuf)
   \   039E  F583              MOV     DPH,A
   \   03A0  E0                MOVX    A,@DPTR
   \   03A1  CE                XCH     A,R6
   \   03A2  FC                MOV     R4,A
   \   03A3  CE                XCH     A,R6
   \   03A4  CF                XCH     A,R7
   \   03A5  FD                MOV     R5,A
   \   03A6  CF                XCH     A,R7
   \   03A7  FA                MOV     R2,A
   \   03A8  EC                MOV     A,R4
   \   03A9  2410              ADD     A,#LOW(buf+4)
   \   03AB  F582              MOV     DPL,A
   \   03AD  ED                MOV     A,R5
   \   03AE  3400              ADDC    A,#HIGH(buf+4)
   \   03B0  F583              MOV     DPH,A
   \   03B2  EA                MOV     A,R2
   \   03B3  F0                MOVX    @DPTR,A
   \   03B4  0E                INC     R6
   \   03B5  EE                MOV     A,R6
   \   03B6  7001              JNZ     ?0232
   \   03B8  0F                INC     R7
   \   03B9            ?0232:
   \   03B9  900000            MOV     DPTR,#$LOCBX readback+4
   \   03BC  EF                MOV     A,R7
   \   03BD  F0                MOVX    @DPTR,A
   \   03BE  A3                INC     DPTR
   \   03BF  EE                MOV     A,R6
   \   03C0  F0                MOVX    @DPTR,A
                                              - fem -                                      Page   12

   \   03C1  80AE              SJMP    ?0051
   \   03C3            ?0050:
    201                  i = arc51_write(&buf[0]);
   \   03C3  7D0C              MOV     R5,#LOW(buf)
   \   03C5  7E00              MOV     R6,#HIGH(buf)
   \   03C7  7F01              MOV     R7,#1
   \   03C9  120000            LCALL   $REFFN arc51_write
   \   03CC  EC                MOV     A,R4
   \   03CD  7D00              MOV     R5,#0
   \   03CF  900000            MOV     DPTR,#$LOCBX readback+2
   \   03D2  CD                XCH     A,R5
   \   03D3  F0                MOVX    @DPTR,A
   \   03D4  A3                INC     DPTR
   \   03D5  CD                XCH     A,R5
   \   03D6  F0                MOVX    @DPTR,A
    202               }
    203          }
   \   03D7  0202B5            LJMP    ?0041
   \   03DA            ?0040:
   \   03DA  22                RET
   \   03DB            pktsize:
    204          /*
    205          -------------------------------------------------------------------------
    206                  int pktsize()
    207                          return packet size stored in buf
    208          -------------------------------------------------------------------------
    209          */
    210          int   pktsize()
    211          {  int count=0;
   \   03DB  900000            MOV     DPTR,#$LOCBX pktsize
   \   03DE  E4                CLR     A
   \   03DF  F0                MOVX    @DPTR,A
   \   03E0  A3                INC     DPTR
   \   03E1  F0                MOVX    @DPTR,A
    212                                  
    213                  count = buf[3];
   \   03E2  90000F            MOV     DPTR,#buf+3
   \   03E5  E0                MOVX    A,@DPTR
   \   03E6  7D00              MOV     R5,#0
   \   03E8  900000            MOV     DPTR,#$LOCBX pktsize
   \   03EB  CD                XCH     A,R5
   \   03EC  F0                MOVX    @DPTR,A
   \   03ED  A3                INC     DPTR
   \   03EE  CD                XCH     A,R5
   \   03EF  F0                MOVX    @DPTR,A
    214                  if(buf[2] > 0) count += 256;
   \   03F0  90000E            MOV     DPTR,#buf+2
   \   03F3  E0                MOVX    A,@DPTR
   \   03F4  6007              JZ      ?0055
   \   03F6            ?0054:
   \   03F6  900000            MOV     DPTR,#$LOCBX pktsize
   \   03F9  E0                MOVX    A,@DPTR
   \   03FA  2401              ADD     A,#1
   \   03FC  F0                MOVX    @DPTR,A
   \   03FD            ?0055:
    215                  return(count);
   \   03FD  900000            MOV     DPTR,#$LOCBX pktsize
   \   0400  E0                MOVX    A,@DPTR
   \   0401  FD                MOV     R5,A
   \   0402  A3                INC     DPTR
   \   0403  E0                MOVX    A,@DPTR
   \   0404  FC                MOV     R4,A
    216          }
   \   0405  22                RET
   \   0406            mem_dump:
    217          
    218          
    219          /*
    220          ---------------------------------------------------------------------
    221              int mem_dump(unsigned int,unsigned int)
    222                  This function recives the remaining packets from arcnet and stores 
    223              it in xdata memory. (39K MAX)
    224          ---------------------------------------------------------------------
    225          */
    226          
    227          int mem_dump()
    228          {  int status;
    229             unsigned int i,j,count;
    230           
    231             temp=0;
   \   0406  90040C            MOV     DPTR,#temp
   \   0409  E4                CLR     A
   \   040A  F0                MOVX    @DPTR,A
   \   040B  A3                INC     DPTR
   \   040C  F0                MOVX    @DPTR,A
    232             count = pktsize();
                                              - fem -                                      Page   13

   \   040D  120000            LCALL   $REFFN pktsize
   \   0410  900000            MOV     DPTR,#$LOCBX mem_dump+6
   \   0413  ED                MOV     A,R5
   \   0414  F0                MOVX    @DPTR,A
   \   0415  A3                INC     DPTR
   \   0416  EC                MOV     A,R4
   \   0417  F0                MOVX    @DPTR,A
    233             i=0;
   \   0418  900000            MOV     DPTR,#$LOCBX mem_dump+2
   \   041B  E4                CLR     A
   \   041C  F0                MOVX    @DPTR,A
   \   041D  A3                INC     DPTR
   \   041E  F0                MOVX    @DPTR,A
   \   041F            ?0057:
    234             while(temp< count)            /* copy first packet to xdata */
   \   041F  90040C            MOV     DPTR,#temp
   \   0422  E0                MOVX    A,@DPTR
   \   0423  FD                MOV     R5,A
   \   0424  A3                INC     DPTR
   \   0425  E0                MOVX    A,@DPTR
   \   0426  FC                MOV     R4,A
   \   0427  900000            MOV     DPTR,#$LOCBX mem_dump+7
   \   042A  E0                MOVX    A,@DPTR
   \   042B  D3                SETB    C
   \   042C  9C                SUBB    A,R4
   \   042D  900000            MOV     DPTR,#$LOCBX mem_dump+6
   \   0430  E0                MOVX    A,@DPTR
   \   0431  9D                SUBB    A,R5
   \   0432  4045              JC      ?0056
   \   0434            ?0058:
    235             {      
    236                HOPDATA[temp] = buf[temp+4];
   \   0434  90040C            MOV     DPTR,#temp
   \   0437  E0                MOVX    A,@DPTR
   \   0438  FF                MOV     R7,A
   \   0439  A3                INC     DPTR
   \   043A  E0                MOVX    A,@DPTR
   \   043B  FE                MOV     R6,A
   \   043C  EF                MOV     A,R7
   \   043D  FD                MOV     R5,A
   \   043E  EE                MOV     A,R6
   \   043F  2410              ADD     A,#LOW(buf+4)
   \   0441  F582              MOV     DPL,A
   \   0443  ED                MOV     A,R5
   \   0444  3400              ADDC    A,#HIGH(buf+4)
   \   0446  F583              MOV     DPH,A
   \   0448  E0                MOVX    A,@DPTR
   \   0449  CE                XCH     A,R6
   \   044A  FC                MOV     R4,A
   \   044B  CE                XCH     A,R6
   \   044C  CF                XCH     A,R7
   \   044D  FD                MOV     R5,A
   \   044E  CF                XCH     A,R7
   \   044F  FA                MOV     R2,A
   \   0450  EC                MOV     A,R4
   \   0451  24F8              ADD     A,#248
   \   0453  F582              MOV     DPL,A
   \   0455  ED                MOV     A,R5
   \   0456  345F              ADDC    A,#95
   \   0458  F583              MOV     DPH,A
   \   045A  EA                MOV     A,R2
   \   045B  F0                MOVX    @DPTR,A
    237                i++;
   \   045C  900000            MOV     DPTR,#$LOCBX mem_dump+3
   \   045F  E0                MOVX    A,@DPTR
   \   0460  04                INC     A
   \   0461  F0                MOVX    @DPTR,A
   \   0462  900000            MOV     DPTR,#$LOCBX mem_dump+2
   \   0465  7003              JNZ     ?0233
   \   0467  E0                MOVX    A,@DPTR
   \   0468  04                INC     A
   \   0469  F0                MOVX    @DPTR,A
   \   046A            ?0233:
    238                temp++;
   \   046A  0E                INC     R6
   \   046B  EE                MOV     A,R6
   \   046C  7001              JNZ     ?0234
   \   046E  0F                INC     R7
   \   046F            ?0234:
   \   046F  90040C            MOV     DPTR,#temp
   \   0472  EF                MOV     A,R7
   \   0473  F0                MOVX    @DPTR,A
   \   0474  A3                INC     DPTR
   \   0475  EE                MOV     A,R6
   \   0476  F0                MOVX    @DPTR,A
   \   0477  80A6              SJMP    ?0057
                                              - fem -                                      Page   14

   \   0479            ?0056:
    239             }
    240          
    241             time_out(1);                   /* setup timers */
   \   0479  E4                CLR     A
   \   047A  FD                MOV     R5,A
   \   047B  04                INC     A
   \   047C  FC                MOV     R4,A
   \   047D  120000            LCALL   $REFFN time_out
   \   0480            ?0060:
    242             while(temp < pckt.dlen)           /* repeat  till all data recived (i == dlen)*/
   \   0480  90040C            MOV     DPTR,#temp
   \   0483  E0                MOVX    A,@DPTR
   \   0484  FD                MOV     R5,A
   \   0485  A3                INC     DPTR
   \   0486  E0                MOVX    A,@DPTR
   \   0487  FC                MOV     R4,A
   \   0488  900005            MOV     DPTR,#pckt+5
   \   048B  E0                MOVX    A,@DPTR
   \   048C  D3                SETB    C
   \   048D  9C                SUBB    A,R4
   \   048E  900004            MOV     DPTR,#pckt+4
   \   0491  E0                MOVX    A,@DPTR
   \   0492  9D                SUBB    A,R5
   \   0493  5003              JNC     $+5
   \   0495  020553            LJMP    ?0059
   \   0498            ?0061:
    243             {
    244                if (time_out(0))           /* check for time out */
   \   0498  E4                CLR     A
   \   0499  FC                MOV     R4,A
   \   049A  FD                MOV     R5,A
   \   049B  120000            LCALL   $REFFN time_out
   \   049E  EC                MOV     A,R4
   \   049F  4D                ORL     A,R5
   \   04A0  600C              JZ      ?0063
   \   04A2            ?0062:
    245                {
    246                      ERROR(3);
   \   04A2  E4                CLR     A
   \   04A3  FD                MOV     R5,A
   \   04A4  7C03              MOV     R4,#3
   \   04A6  120000            LCALL   $REFFN ERROR
    247                      return(1);
   \   04A9  E4                CLR     A
   \   04AA  FD                MOV     R5,A
   \   04AB  04                INC     A
   \   04AC  FC                MOV     R4,A
    248                }
   \   04AD  22                RET
   \   04AE            ?0063:
    249                status = arc51_read(&buf[0]);      /* check if next packet recived */
   \   04AE  7D0C              MOV     R5,#LOW(buf)
   \   04B0  7E00              MOV     R6,#HIGH(buf)
   \   04B2  7F01              MOV     R7,#1
   \   04B4  120000            LCALL   $REFFN arc51_read
   \   04B7  EC                MOV     A,R4
   \   04B8  7D00              MOV     R5,#0
    250                if (status == E_OK)                          /* if data was recived */
   \   04BA  900000            MOV     DPTR,#$LOCBX mem_dump
   \   04BD  CD                XCH     A,R5
   \   04BE  F0                MOVX    @DPTR,A
   \   04BF  A3                INC     DPTR
   \   04C0  CD                XCH     A,R5
   \   04C1  F0                MOVX    @DPTR,A
   \   04C2  4D                ORL     A,R5
   \   04C3  6003              JZ      $+5
   \   04C5  020550            LJMP    ?0065
   \   04C8            ?0064:
    251                {
    252                  time_out(1);            /* reset counters  */
   \   04C8  E4                CLR     A
   \   04C9  FD                MOV     R5,A
   \   04CA  04                INC     A
   \   04CB  FC                MOV     R4,A
   \   04CC  120000            LCALL   $REFFN time_out
    253                  count = pktsize()-8;
   \   04CF  120000            LCALL   $REFFN pktsize
   \   04D2  EC                MOV     A,R4
   \   04D3  24F8              ADD     A,#248
   \   04D5  FC                MOV     R4,A
   \   04D6  ED                MOV     A,R5
   \   04D7  34FF              ADDC    A,#255
   \   04D9  900000            MOV     DPTR,#$LOCBX mem_dump+6
   \   04DC  F0                MOVX    @DPTR,A
   \   04DD  A3                INC     DPTR
                                              - fem -                                      Page   15

   \   04DE  CC                XCH     A,R4
   \   04DF  F0                MOVX    @DPTR,A
   \   04E0  CC                XCH     A,R4
    254                  j=0;
   \   04E1  900000            MOV     DPTR,#$LOCBX mem_dump+4
   \   04E4  E4                CLR     A
   \   04E5  F0                MOVX    @DPTR,A
   \   04E6  A3                INC     DPTR
   \   04E7  F0                MOVX    @DPTR,A
   \   04E8            ?0067:
    255                  while(j<count)                       /* copy packet to xdata memory */
   \   04E8  900000            MOV     DPTR,#$LOCBX mem_dump+4
   \   04EB  E0                MOVX    A,@DPTR
   \   04EC  FD                MOV     R5,A
   \   04ED  A3                INC     DPTR
   \   04EE  E0                MOVX    A,@DPTR
   \   04EF  FC                MOV     R4,A
   \   04F0  900000            MOV     DPTR,#$LOCBX mem_dump+7
   \   04F3  E0                MOVX    A,@DPTR
   \   04F4  D3                SETB    C
   \   04F5  9C                SUBB    A,R4
   \   04F6  900000            MOV     DPTR,#$LOCBX mem_dump+6
   \   04F9  E0                MOVX    A,@DPTR
   \   04FA  9D                SUBB    A,R5
   \   04FB  4053              JC      ?0066
   \   04FD            ?0068:
    256                  {
    257                      HOPDATA[temp] = buf[j+12];
   \   04FD  900000            MOV     DPTR,#$LOCBX mem_dump+5
   \   0500  E0                MOVX    A,@DPTR
   \   0501  2418              ADD     A,#LOW(buf+12)
   \   0503  FC                MOV     R4,A
   \   0504  900000            MOV     DPTR,#$LOCBX mem_dump+4
   \   0507  E0                MOVX    A,@DPTR
   \   0508  3400              ADDC    A,#HIGH(buf+12)
   \   050A  8C82              MOV     DPL,R4
   \   050C  F583              MOV     DPH,A
   \   050E  E0                MOVX    A,@DPTR
   \   050F  FE                MOV     R6,A
   \   0510  90040D            MOV     DPTR,#temp+1
   \   0513  E0                MOVX    A,@DPTR
   \   0514  24F8              ADD     A,#248
   \   0516  FC                MOV     R4,A
   \   0517  90040C            MOV     DPTR,#temp
   \   051A  E0                MOVX    A,@DPTR
   \   051B  345F              ADDC    A,#95
   \   051D  FD                MOV     R5,A
   \   051E  EE                MOV     A,R6
   \   051F  8C82              MOV     DPL,R4
   \   0521  8D83              MOV     DPH,R5
   \   0523  F0                MOVX    @DPTR,A
    258                      i++;
   \   0524  900000            MOV     DPTR,#$LOCBX mem_dump+3
   \   0527  E0                MOVX    A,@DPTR
   \   0528  04                INC     A
   \   0529  F0                MOVX    @DPTR,A
   \   052A  900000            MOV     DPTR,#$LOCBX mem_dump+2
   \   052D  7003              JNZ     ?0235
   \   052F  E0                MOVX    A,@DPTR
   \   0530  04                INC     A
   \   0531  F0                MOVX    @DPTR,A
   \   0532            ?0235:
    259                      j++;
   \   0532  900000            MOV     DPTR,#$LOCBX mem_dump+5
   \   0535  E0                MOVX    A,@DPTR
   \   0536  04                INC     A
   \   0537  F0                MOVX    @DPTR,A
   \   0538  900000            MOV     DPTR,#$LOCBX mem_dump+4
   \   053B  7003              JNZ     ?0236
   \   053D  E0                MOVX    A,@DPTR
   \   053E  04                INC     A
   \   053F  F0                MOVX    @DPTR,A
   \   0540            ?0236:
    260                      temp++;
   \   0540  90040D            MOV     DPTR,#temp+1
   \   0543  E0                MOVX    A,@DPTR
   \   0544  04                INC     A
   \   0545  F0                MOVX    @DPTR,A
   \   0546  90040C            MOV     DPTR,#temp
   \   0549  7003              JNZ     ?0237
   \   054B  E0                MOVX    A,@DPTR
   \   054C  04                INC     A
   \   054D  F0                MOVX    @DPTR,A
   \   054E            ?0237:
    261                  }
    262                }
                                              - fem -                                      Page   16

   \   054E  8098              SJMP    ?0067
   \   0550            ?0066:
   \   0550            ?0065:
   \   0550  020480            LJMP    ?0060
   \   0553            ?0059:
    263             }
    264              if(i != pckt.dlen)
   \   0553  900000            MOV     DPTR,#$LOCBX mem_dump+2
   \   0556  E0                MOVX    A,@DPTR
   \   0557  FD                MOV     R5,A
   \   0558  A3                INC     DPTR
   \   0559  E0                MOVX    A,@DPTR
   \   055A  FC                MOV     R4,A
   \   055B  900005            MOV     DPTR,#pckt+5
   \   055E  E0                MOVX    A,@DPTR
   \   055F  6C                XRL     A,R4
   \   0560  7007              JNZ     ?0238
   \   0562  900004            MOV     DPTR,#pckt+4
   \   0565  E0                MOVX    A,@DPTR
   \   0566  6D                XRL     A,R5
   \   0567  600C              JZ      ?0070
   \   0569            ?0238:
   \   0569            ?0069:
    265             {
    266                 ERROR(6);
   \   0569  E4                CLR     A
   \   056A  FD                MOV     R5,A
   \   056B  7C06              MOV     R4,#6
   \   056D  120000            LCALL   $REFFN ERROR
    267                 return(1);
   \   0570  E4                CLR     A
   \   0571  FD                MOV     R5,A
   \   0572  04                INC     A
   \   0573  FC                MOV     R4,A
    268             }
   \   0574  22                RET
   \   0575            ?0070:
    269             return(E_OK);
   \   0575  E4                CLR     A
   \   0576  FC                MOV     R4,A
   \   0577  FD                MOV     R5,A
    270          }
   \   0578            ?0071:
   \   0578  22                RET
   \   0579            setup_pckt:
    271          
    272          /*
    273          ---------------------------------------------------------------------------
    274               void setup_pckt()
    275                  Copy the paccket header information  into the pckt structure.
    276          ---------------------------------------------------------------------------
    277          */
    278          
    279          void setup_pckt()
    280          {
    281            pckt.cmd = buf[CMD+4];
   \   0579  900011            MOV     DPTR,#buf+5
   \   057C  E0                MOVX    A,@DPTR
   \   057D  900000            MOV     DPTR,#pckt
   \   0580  F0                MOVX    @DPTR,A
    282            pckt.node = buf[NODEID+4];
   \   0581  900010            MOV     DPTR,#buf+4
   \   0584  E0                MOVX    A,@DPTR
   \   0585  900001            MOV     DPTR,#pckt+1
   \   0588  F0                MOVX    @DPTR,A
    283            pckt.devtype=buf[DEVTYPE+4];
   \   0589  900012            MOV     DPTR,#buf+6
   \   058C  E0                MOVX    A,@DPTR
   \   058D  900002            MOV     DPTR,#pckt+2
   \   0590  F0                MOVX    @DPTR,A
    284            pckt.grpcmd=buf[GRPCMD+4];
   \   0591  900013            MOV     DPTR,#buf+7
   \   0594  E0                MOVX    A,@DPTR
   \   0595  900003            MOV     DPTR,#pckt+3
   \   0598  F0                MOVX    @DPTR,A
    285            pckt.dlen= ((buf[DLEN+4] << 8) + buf[DLEN+5]);
   \   0599  900016            MOV     DPTR,#buf+10
   \   059C  E0                MOVX    A,@DPTR
   \   059D  7D00              MOV     R5,#0
   \   059F  7C00              MOV     R4,#0
   \   05A1  FD                MOV     R5,A
   \   05A2  900017            MOV     DPTR,#buf+11
   \   05A5  E0                MOVX    A,@DPTR
   \   05A6  7F00              MOV     R7,#0
   \   05A8  FE                MOV     R6,A
   \   05A9  EC                MOV     A,R4
                                              - fem -                                      Page   17

   \   05AA  2E                ADD     A,R6
   \   05AB  FC                MOV     R4,A
   \   05AC  ED                MOV     A,R5
   \   05AD  3F                ADDC    A,R7
   \   05AE  900004            MOV     DPTR,#pckt+4
   \   05B1  F0                MOVX    @DPTR,A
   \   05B2  A3                INC     DPTR
   \   05B3  CC                XCH     A,R4
   \   05B4  F0                MOVX    @DPTR,A
   \   05B5  CC                XCH     A,R4
    286            pckt.error=  buf[ERR+4];
   \   05B6  900014            MOV     DPTR,#buf+8
   \   05B9  E0                MOVX    A,@DPTR
   \   05BA  900006            MOV     DPTR,#pckt+6
   \   05BD  F0                MOVX    @DPTR,A
    287            return;
    288          }
   \   05BE  22                RET
   \   05BF            copy_code:
    289          
    290          
    291          /*
    292          -------------------------------------------------------------------------
    293               void copy_code(void)
    294                  This fuction copies the CODE to reprogram the flash memory to the 
    295               RAM  (CODE -> XDATA)
    296          -------------------------------------------------------------------------
    297          */
    298          
    299          void copy_code(void)
    300          { int i;
    301              for (i=0;i<=500;i++)
   \   05BF  900000            MOV     DPTR,#$LOCBX copy_code
   \   05C2  E4                CLR     A
   \   05C3  F0                MOVX    @DPTR,A
   \   05C4  A3                INC     DPTR
   \   05C5  F0                MOVX    @DPTR,A
   \   05C6            ?0073:
   \   05C6  D3                SETB    C
   \   05C7  900000            MOV     DPTR,#$LOCBX copy_code+1
   \   05CA  E0                MOVX    A,@DPTR
   \   05CB  94F4              SUBB    A,#244
   \   05CD  900000            MOV     DPTR,#$LOCBX copy_code
   \   05D0  E0                MOVX    A,@DPTR
   \   05D1  6480              XRL     A,#128
   \   05D3  9481              SUBB    A,#129
   \   05D5  5035              JNC     ?0072
   \   05D7            ?0074:
    302               (* (char xdata *) (FPROG+i))  = (* (char code *) (FPROG+i));
   \   05D7  900000            MOV     DPTR,#$LOCBX copy_code
   \   05DA  E0                MOVX    A,@DPTR
   \   05DB  FF                MOV     R7,A
   \   05DC  A3                INC     DPTR
   \   05DD  E0                MOVX    A,@DPTR
   \   05DE  FE                MOV     R6,A
   \   05DF  EF                MOV     A,R7
   \   05E0  FD                MOV     R5,A
   \   05E1  EE                MOV     A,R6
   \   05E2  FC                MOV     R4,A
   \   05E3  ED                MOV     A,R5
   \   05E4  2438              ADD     A,#56
   \   05E6  8C82              MOV     DPL,R4
   \   05E8  F583              MOV     DPH,A
   \   05EA  E4                CLR     A
   \   05EB  93                MOVC    A,@A+DPTR
   \   05EC  CE                XCH     A,R6
   \   05ED  FC                MOV     R4,A
   \   05EE  CE                XCH     A,R6
   \   05EF  CF                XCH     A,R7
   \   05F0  FD                MOV     R5,A
   \   05F1  CF                XCH     A,R7
   \   05F2  FA                MOV     R2,A
   \   05F3  ED                MOV     A,R5
   \   05F4  2438              ADD     A,#56
   \   05F6  FD                MOV     R5,A
   \   05F7  EA                MOV     A,R2
   \   05F8  8C82              MOV     DPL,R4
   \   05FA  8D83              MOV     DPH,R5
   \   05FC  F0                MOVX    @DPTR,A
   \   05FD  0E                INC     R6
   \   05FE  EE                MOV     A,R6
   \   05FF  7001              JNZ     ?0239
   \   0601  0F                INC     R7
   \   0602            ?0239:
   \   0602  900000            MOV     DPTR,#$LOCBX copy_code
   \   0605  EF                MOV     A,R7
                                              - fem -                                      Page   18

   \   0606  F0                MOVX    @DPTR,A
   \   0607  A3                INC     DPTR
   \   0608  EE                MOV     A,R6
   \   0609  F0                MOVX    @DPTR,A
    303          }
   \   060A  80BA              SJMP    ?0073
   \   060C            ?0072:
   \   060C  22                RET
   \   060D            cmd_rec:
    304          /*
    305          -------------------------------------------------------------------------
    306               cmd_rec(unsigned int,unsigned int)
    307                  This function directs the program were to go after the hopper memory
    308               is transfer into XDATA. IT eill either call NEW_CODE (reprogram flash memory
    309               or  call UFUN ( user function located at an absolute address )
    310          --------------------------------------------------------------------------
    311          */
    312          
    313          int  cmd_rec()
    314          {
    315          
    316          USIGN16 arc51_setup_reg;
    317          USIGN16 arc51_config_reg,i=0;
   \   060D  900000            MOV     DPTR,#$LOCBX cmd_rec+4
   \   0610  E4                CLR     A
   \   0611  F0                MOVX    @DPTR,A
   \   0612  A3                INC     DPTR
   \   0613  F0                MOVX    @DPTR,A
    318          USIGN8  arc51_config;
    319             arc51_config_reg =  6;
   \   0614  900000            MOV     DPTR,#$LOCBX cmd_rec+2
   \   0617  E4                CLR     A
   \   0618  F0                MOVX    @DPTR,A
   \   0619  A3                INC     DPTR
   \   061A  7406              MOV     A,#6
   \   061C  F0                MOVX    @DPTR,A
    320             arc51_setup_reg = 7;
   \   061D  900000            MOV     DPTR,#$LOCBX cmd_rec
   \   0620  E4                CLR     A
   \   0621  F0                MOVX    @DPTR,A
   \   0622  A3                INC     DPTR
   \   0623  7407              MOV     A,#7
   \   0625  F0                MOVX    @DPTR,A
    321             GUF[0] = (int) readback;;
   \   0626  7400              MOV     A,#LOW $IFREF readback
   \   0628  7D00              MOV     R5,#HIGH $IFREF readback
   \   062A  9007F0            MOV     DPTR,#2032
   \   062D  CD                XCH     A,R5
   \   062E  F0                MOVX    @DPTR,A
   \   062F  A3                INC     DPTR
   \   0630  CD                XCH     A,R5
   \   0631  F0                MOVX    @DPTR,A
    322             GUF[1] = (int) ERROR;
   \   0632  7400              MOV     A,#LOW $IFREF ERROR
   \   0634  7D00              MOV     R5,#HIGH $IFREF ERROR
   \   0636  9007F2            MOV     DPTR,#2034
   \   0639  CD                XCH     A,R5
   \   063A  F0                MOVX    @DPTR,A
   \   063B  A3                INC     DPTR
   \   063C  CD                XCH     A,R5
   \   063D  F0                MOVX    @DPTR,A
    323             switch (pckt.cmd)
   \   063E  900000            MOV     DPTR,#pckt
   \   0641  E0                MOVX    A,@DPTR
   \   0642  120000            LCALL   ?A_S_SWITCH_L05
   \   0645  01                DB      1
   \   0646  08                DB      8
   \   0647  083F              DW      ?0095
   \   0649  065B              DW      ?0077
   \   064B  06C4              DW      ?0083
   \   064D  06F8              DW      ?0084
   \   064F  0715              DW      ?0085
   \   0651  0737              DW      ?0086
   \   0653  076B              DW      ?0087
   \   0655  0794              DW      ?0088
   \   0657  07B1              DW      ?0089
   \   0659  07D5              DW      ?0090
   \   065B            ?0077:
    324             {
    325                 case  NEW_CODE:
    326                       copy_code(); 
   \   065B  120000            LCALL   $REFFN copy_code
    327                       PRG_ROM;
   \   065E  7D04              MOV     R5,#LOW(EPROG)
   \   0660  7E00              MOV     R6,#HIGH(EPROG)
   \   0662  7F02              MOV     R7,#2
                                              - fem -                                      Page   19

   \   0664  900007            MOV     DPTR,#FNP
   \   0667  EF                MOV     A,R7
   \   0668  F0                MOVX    @DPTR,A
   \   0669  A3                INC     DPTR
   \   066A  EE                MOV     A,R6
   \   066B  F0                MOVX    @DPTR,A
   \   066C  A3                INC     DPTR
   \   066D  ED                MOV     A,R5
   \   066E  F0                MOVX    @DPTR,A
   \   066F  900008            MOV     DPTR,#FNP+1
   \   0672  E0                MOVX    A,@DPTR
   \   0673  FD                MOV     R5,A
   \   0674  A3                INC     DPTR
   \   0675  E0                MOVX    A,@DPTR
   \   0676  90000A            MOV     DPTR,#fblock
   \   0679  CD                XCH     A,R5
   \   067A  F0                MOVX    @DPTR,A
   \   067B  A3                INC     DPTR
   \   067C  CD                XCH     A,R5
   \   067D  F0                MOVX    @DPTR,A
   \   067E  90000A            MOV     DPTR,#fblock
   \   0681  E0                MOVX    A,@DPTR
   \   0682  FF                MOV     R7,A
   \   0683  A3                INC     DPTR
   \   0684  E0                MOVX    A,@DPTR
   \   0685  F582              MOV     DPL,A
   \   0687  8F83              MOV     DPH,R7
   \   0689  120000            LCALL   ?LOAD_IND_DPTR2_L20
   \   068C  120000            LCALL   ?LCALL_IND_L20
    328                       if ((* (char code *) PGB) == 0x77)
   \   068F  90FEFF            MOV     DPTR,#65279
   \   0692  E4                CLR     A
   \   0693  93                MOVC    A,@A+DPTR
   \   0694  B47702            CJNE    A,#119,?0079
   \   0697            ?0078:
    329                       {
    330                           if(((char *) 0x000000) != 0)
    331                               ERROR(4);
    332                       }
    333                       else
   \   0697  8007              SJMP    ?0082
   \   0699            ?0079:
    334                          ERROR(4);
   \   0699  E4                CLR     A
   \   069A  FD                MOV     R5,A
   \   069B  7C04              MOV     R4,#4
   \   069D  120000            LCALL   $REFFN ERROR
   \   06A0            ?0082:
    335                       HOPDATA[CMD] = 01;
   \   06A0  7401              MOV     A,#1
   \   06A2  905FF9            MOV     DPTR,#24569
   \   06A5  F0                MOVX    @DPTR,A
    336                       HOPDATA[NODEID] = nid;
   \   06A6  900001            MOV     DPTR,#nid+1
   \   06A9  E0                MOVX    A,@DPTR
   \   06AA  905FF8            MOV     DPTR,#24568
   \   06AD  F0                MOVX    @DPTR,A
    337                       HOPDATA[ERR] =  0;
   \   06AE  7400              MOV     A,#0
   \   06B0  905FFC            MOV     DPTR,#24572
   \   06B3  F0                MOVX    @DPTR,A
    338                       HOPDATA[8]  = 0x77;
   \   06B4  7477              MOV     A,#119
   \   06B6  906000            MOV     DPTR,#24576
   \   06B9  F0                MOVX    @DPTR,A
    339                       readback(1);     
   \   06BA  E4                CLR     A
   \   06BB  FD                MOV     R5,A
   \   06BC  04                INC     A
   \   06BD  FC                MOV     R4,A
   \   06BE  120000            LCALL   $REFFN readback
    340                       break;
   \   06C1  02088C            LJMP    ?0076
   \   06C4            ?0083:
    341                 case  RESET_SW:
    342                       SW_RESET;
   \   06C4  7D02              MOV     R5,#LOW(SWRESET)
   \   06C6  7E00              MOV     R6,#HIGH(SWRESET)
   \   06C8  7F02              MOV     R7,#2
   \   06CA  900007            MOV     DPTR,#FNP
   \   06CD  EF                MOV     A,R7
   \   06CE  F0                MOVX    @DPTR,A
   \   06CF  A3                INC     DPTR
   \   06D0  EE                MOV     A,R6
   \   06D1  F0                MOVX    @DPTR,A
   \   06D2  A3                INC     DPTR
                                              - fem -                                      Page   20

   \   06D3  ED                MOV     A,R5
   \   06D4  F0                MOVX    @DPTR,A
   \   06D5  900008            MOV     DPTR,#FNP+1
   \   06D8  E0                MOVX    A,@DPTR
   \   06D9  FD                MOV     R5,A
   \   06DA  A3                INC     DPTR
   \   06DB  E0                MOVX    A,@DPTR
   \   06DC  90000A            MOV     DPTR,#fblock
   \   06DF  CD                XCH     A,R5
   \   06E0  F0                MOVX    @DPTR,A
   \   06E1  A3                INC     DPTR
   \   06E2  CD                XCH     A,R5
   \   06E3  F0                MOVX    @DPTR,A
   \   06E4  90000A            MOV     DPTR,#fblock
   \   06E7  E0                MOVX    A,@DPTR
   \   06E8  FF                MOV     R7,A
   \   06E9  A3                INC     DPTR
   \   06EA  E0                MOVX    A,@DPTR
   \   06EB  F582              MOV     DPL,A
   \   06ED  8F83              MOV     DPH,R7
   \   06EF  120000            LCALL   ?LOAD_IND_DPTR2_L20
   \   06F2  120000            LCALL   ?LCALL_IND_L20
    343                       break;
   \   06F5  02088C            LJMP    ?0076
   \   06F8            ?0084:
    344                 case  RESPOND:
    345                       HOPDATA[CMD] = RESPOND;
   \   06F8  7403              MOV     A,#3
   \   06FA  905FF9            MOV     DPTR,#24569
   \   06FD  F0                MOVX    @DPTR,A
    346                       HOPDATA[NODEID] = nid;
   \   06FE  900001            MOV     DPTR,#nid+1
   \   0701  E0                MOVX    A,@DPTR
   \   0702  905FF8            MOV     DPTR,#24568
   \   0705  F0                MOVX    @DPTR,A
    347                       HOPDATA[ERR] =  0;
   \   0706  7400              MOV     A,#0
   \   0708  905FFC            MOV     DPTR,#24572
   \   070B  F0                MOVX    @DPTR,A
    348                       readback(0);     
   \   070C  E4                CLR     A
   \   070D  FC                MOV     R4,A
   \   070E  FD                MOV     R5,A
   \   070F  120000            LCALL   $REFFN readback
    349                       break;
   \   0712  02088C            LJMP    ?0076
   \   0715            ?0085:
    350                 case  ECHO:
    351                       HOPDATA[CMD] = ECHO;
   \   0715  7404              MOV     A,#4
   \   0717  905FF9            MOV     DPTR,#24569
   \   071A  F0                MOVX    @DPTR,A
    352                       HOPDATA[NODEID] = nid;
   \   071B  900001            MOV     DPTR,#nid+1
   \   071E  E0                MOVX    A,@DPTR
   \   071F  905FF8            MOV     DPTR,#24568
   \   0722  F0                MOVX    @DPTR,A
    353                       HOPDATA[ERR] = 0;
   \   0723  7400              MOV     A,#0
   \   0725  905FFC            MOV     DPTR,#24572
   \   0728  F0                MOVX    @DPTR,A
    354                       readback(pckt.dlen);
   \   0729  900004            MOV     DPTR,#pckt+4
   \   072C  E0                MOVX    A,@DPTR
   \   072D  FD                MOV     R5,A
   \   072E  A3                INC     DPTR
   \   072F  E0                MOVX    A,@DPTR
   \   0730  FC                MOV     R4,A
   \   0731  120000            LCALL   $REFFN readback
    355                       break;
   \   0734  02088C            LJMP    ?0076
   \   0737            ?0086:
    356                 case  TOKEN_OFF:
    357          
    358                       arc51_config = (USIGN8)INP(arc51_config_reg);
   \   0737  900000            MOV     DPTR,#$LOCBX cmd_rec+3
   \   073A  E0                MOVX    A,@DPTR
   \   073B  FC                MOV     R4,A
   \   073C  120000            LCALL   $REFFN INP
    359                       arc51_config = (USIGN8)(((arc51_config & SUB_AD) | SETUP_REG) & ~TXEN);
   \   073F  EC                MOV     A,R4
   \   0740  900000            MOV     DPTR,#$LOCBX cmd_rec+6
   \   0743  F0                MOVX    @DPTR,A
   \   0744  EC                MOV     A,R4
   \   0745  54FC              ANL     A,#252
   \   0747  4402              ORL     A,#2
                                              - fem -                                      Page   21

   \   0749  54DF              ANL     A,#223
   \   074B  FC                MOV     R4,A
    360                       OUTP(arc51_config_reg, arc51_config);
   \   074C  EC                MOV     A,R4
   \   074D  900000            MOV     DPTR,#$LOCBX cmd_rec+6
   \   0750  F0                MOVX    @DPTR,A
   \   0751  900000            MOV     DPTR,#$LOCBX cmd_rec+3
   \   0754  E0                MOVX    A,@DPTR
   \   0755  FC                MOV     R4,A
   \   0756  900000            MOV     DPTR,#$LOCBX cmd_rec+6
   \   0759  E0                MOVX    A,@DPTR
   \   075A  FD                MOV     R5,A
   \   075B  120000            LCALL   $REFFN OUTP
    361                       OUTP(arc51_setup_reg, (0X80 | 0x10));
   \   075E  900000            MOV     DPTR,#$LOCBX cmd_rec+1
   \   0761  E0                MOVX    A,@DPTR
   \   0762  FC                MOV     R4,A
   \   0763  7D90              MOV     R5,#144
   \   0765  120000            LCALL   $REFFN OUTP
    362                       break;
   \   0768  02088C            LJMP    ?0076
   \   076B            ?0087:
    363                 case  TOKEN_ON:
    364          
    365                       arc51_config = (USIGN8)INP(arc51_config_reg);
   \   076B  900000            MOV     DPTR,#$LOCBX cmd_rec+3
   \   076E  E0                MOVX    A,@DPTR
   \   076F  FC                MOV     R4,A
   \   0770  120000            LCALL   $REFFN INP
    366                       arc51_config = (USIGN8)(arc51_config | TXEN);
   \   0773  EC                MOV     A,R4
   \   0774  4420              ORL     A,#32
    367                       OUTP(arc51_config_reg, arc51_config);
   \   0776  900000            MOV     DPTR,#$LOCBX cmd_rec+6
   \   0779  F0                MOVX    @DPTR,A
   \   077A  900000            MOV     DPTR,#$LOCBX cmd_rec+3
   \   077D  E0                MOVX    A,@DPTR
   \   077E  FC                MOV     R4,A
   \   077F  900000            MOV     DPTR,#$LOCBX cmd_rec+6
   \   0782  E0                MOVX    A,@DPTR
   \   0783  FD                MOV     R5,A
   \   0784  120000            LCALL   $REFFN OUTP
    368                       OUTP(arc51_setup_reg, 0X80);
   \   0787  900000            MOV     DPTR,#$LOCBX cmd_rec+1
   \   078A  E0                MOVX    A,@DPTR
   \   078B  FC                MOV     R4,A
   \   078C  7D80              MOV     R5,#128
   \   078E  120000            LCALL   $REFFN OUTP
    369                       break;     
   \   0791  02088C            LJMP    ?0076
   \   0794            ?0088:
    370                 case  NET_MAP:
    371                       HOPDATA[CMD] = NET_MAP;
   \   0794  7407              MOV     A,#7
   \   0796  905FF9            MOV     DPTR,#24569
   \   0799  F0                MOVX    @DPTR,A
    372                       HOPDATA[NODEID] = nid;
   \   079A  900001            MOV     DPTR,#nid+1
   \   079D  E0                MOVX    A,@DPTR
   \   079E  905FF8            MOV     DPTR,#24568
   \   07A1  F0                MOVX    @DPTR,A
    373                       HOPDATA[ERR] =  0;
   \   07A2  7400              MOV     A,#0
   \   07A4  905FFC            MOV     DPTR,#24572
   \   07A7  F0                MOVX    @DPTR,A
    374                       readback(0);     
   \   07A8  E4                CLR     A
   \   07A9  FC                MOV     R4,A
   \   07AA  FD                MOV     R5,A
   \   07AB  120000            LCALL   $REFFN readback
    375                       break;
   \   07AE  02088C            LJMP    ?0076
   \   07B1            ?0089:
    376                 case  FEM_VER:
    377                       HOPDATA[CMD] = NET_MAP;
   \   07B1  7407              MOV     A,#7
   \   07B3  905FF9            MOV     DPTR,#24569
   \   07B6  F0                MOVX    @DPTR,A
    378                       HOPDATA[NODEID] = nid;
   \   07B7  900001            MOV     DPTR,#nid+1
   \   07BA  E0                MOVX    A,@DPTR
   \   07BB  905FF8            MOV     DPTR,#24568
   \   07BE  F0                MOVX    @DPTR,A
    379                       HOPDATA[ERR] =  0;
   \   07BF  7400              MOV     A,#0
   \   07C1  905FFC            MOV     DPTR,#24572
                                              - fem -                                      Page   22

   \   07C4  F0                MOVX    @DPTR,A
    380                       HOPDATA[8] = 1;
   \   07C5  7401              MOV     A,#1
   \   07C7  906000            MOV     DPTR,#24576
   \   07CA  F0                MOVX    @DPTR,A
    381                       readback(1);     
   \   07CB  E4                CLR     A
   \   07CC  FD                MOV     R5,A
   \   07CD  04                INC     A
   \   07CE  FC                MOV     R4,A
   \   07CF  120000            LCALL   $REFFN readback
    382                       break;
   \   07D2  02088C            LJMP    ?0076
   \   07D5            ?0090:
    383                 case  GET_PRG:
    384                       HOPDATA[NODEID] = nid;
   \   07D5  900001            MOV     DPTR,#nid+1
   \   07D8  E0                MOVX    A,@DPTR
   \   07D9  905FF8            MOV     DPTR,#24568
   \   07DC  F0                MOVX    @DPTR,A
    385                       HOPDATA[ERR] =  0;
   \   07DD  7400              MOV     A,#0
   \   07DF  905FFC            MOV     DPTR,#24572
   \   07E2  F0                MOVX    @DPTR,A
    386                       for(i=0;i<=(0x9c00);i++)   
   \   07E3  900000            MOV     DPTR,#$LOCBX cmd_rec+4
   \   07E6  E4                CLR     A
   \   07E7  F0                MOVX    @DPTR,A
   \   07E8  A3                INC     DPTR
   \   07E9  F0                MOVX    @DPTR,A
   \   07EA            ?0092:
   \   07EA  D3                SETB    C
   \   07EB  900000            MOV     DPTR,#$LOCBX cmd_rec+5
   \   07EE  E0                MOVX    A,@DPTR
   \   07EF  9400              SUBB    A,#0
   \   07F1  900000            MOV     DPTR,#$LOCBX cmd_rec+4
   \   07F4  E0                MOVX    A,@DPTR
   \   07F5  949C              SUBB    A,#156
   \   07F7  503D              JNC     ?0091
   \   07F9            ?0093:
    387                         HOPDATA[8+i] = (* (char code *) (0x4000+i));
   \   07F9  900000            MOV     DPTR,#$LOCBX cmd_rec+4
   \   07FC  E0                MOVX    A,@DPTR
   \   07FD  FF                MOV     R7,A
   \   07FE  A3                INC     DPTR
   \   07FF  E0                MOVX    A,@DPTR
   \   0800  FE                MOV     R6,A
   \   0801  EF                MOV     A,R7
   \   0802  FD                MOV     R5,A
   \   0803  EE                MOV     A,R6
   \   0804  FC                MOV     R4,A
   \   0805  ED                MOV     A,R5
   \   0806  2440              ADD     A,#64
   \   0808  8C82              MOV     DPL,R4
   \   080A  F583              MOV     DPH,A
   \   080C  E4                CLR     A
   \   080D  93                MOVC    A,@A+DPTR
   \   080E  79F8              MOV     R1,#248
   \   0810  7A5F              MOV     R2,#95
   \   0812  7B01              MOV     R3,#1
   \   0814  FC                MOV     R4,A
   \   0815  E9                MOV     A,R1
   \   0816  2E                ADD     A,R6
   \   0817  F9                MOV     R1,A
   \   0818  EA                MOV     A,R2
   \   0819  3F                ADDC    A,R7
   \   081A  FA                MOV     R2,A
   \   081B  E9                MOV     A,R1
   \   081C  2408              ADD     A,#8
   \   081E  F9                MOV     R1,A
   \   081F  EA                MOV     A,R2
   \   0820  3400              ADDC    A,#0
   \   0822  FA                MOV     R2,A
   \   0823  EC                MOV     A,R4
   \   0824  120000            LCALL   ?ST_A_R123_L17
   \   0827  0E                INC     R6
   \   0828  EE                MOV     A,R6
   \   0829  7001              JNZ     ?0240
   \   082B  0F                INC     R7
   \   082C            ?0240:
   \   082C  900000            MOV     DPTR,#$LOCBX cmd_rec+4
   \   082F  EF                MOV     A,R7
   \   0830  F0                MOVX    @DPTR,A
   \   0831  A3                INC     DPTR
   \   0832  EE                MOV     A,R6
   \   0833  F0                MOVX    @DPTR,A
                                              - fem -                                      Page   23

   \   0834  80B4              SJMP    ?0092
   \   0836            ?0091:
    388                       readback(0x9c00);     
   \   0836  E4                CLR     A
   \   0837  FC                MOV     R4,A
   \   0838  7D9C              MOV     R5,#156
   \   083A  120000            LCALL   $REFFN readback
    389                       break;
   \   083D  804D              SJMP    ?0076
   \   083F            ?0095:
    390                 default :
    391                       if ((* (char code *) PGB) == 0x77)
   \   083F  90FEFF            MOV     DPTR,#65279
   \   0842  E4                CLR     A
   \   0843  93                MOVC    A,@A+DPTR
   \   0844  B47733            CJNE    A,#119,?0097
   \   0847            ?0096:
    392                       {
    393                          USR_FUNC;
   \   0847  7D00              MOV     R5,#LOW(UFUN)
   \   0849  7E00              MOV     R6,#HIGH(UFUN)
   \   084B  7F02              MOV     R7,#2
   \   084D  900007            MOV     DPTR,#FNP
   \   0850  EF                MOV     A,R7
   \   0851  F0                MOVX    @DPTR,A
   \   0852  A3                INC     DPTR
   \   0853  EE                MOV     A,R6
   \   0854  F0                MOVX    @DPTR,A
   \   0855  A3                INC     DPTR
   \   0856  ED                MOV     A,R5
   \   0857  F0                MOVX    @DPTR,A
   \   0858  900008            MOV     DPTR,#FNP+1
   \   085B  E0                MOVX    A,@DPTR
   \   085C  FD                MOV     R5,A
   \   085D  A3                INC     DPTR
   \   085E  E0                MOVX    A,@DPTR
   \   085F  90000A            MOV     DPTR,#fblock
   \   0862  CD                XCH     A,R5
   \   0863  F0                MOVX    @DPTR,A
   \   0864  A3                INC     DPTR
   \   0865  CD                XCH     A,R5
   \   0866  F0                MOVX    @DPTR,A
   \   0867  90000A            MOV     DPTR,#fblock
   \   086A  E0                MOVX    A,@DPTR
   \   086B  FF                MOV     R7,A
   \   086C  A3                INC     DPTR
   \   086D  E0                MOVX    A,@DPTR
   \   086E  F582              MOV     DPL,A
   \   0870  8F83              MOV     DPH,R7
   \   0872  120000            LCALL   ?LOAD_IND_DPTR2_L20
   \   0875  120000            LCALL   ?LCALL_IND_L20
    394                       }
    395                       else
   \   0878  8012              SJMP    ?0098
   \   087A            ?0097:
    396                       {
    397                         pckt.error = 77;
   \   087A  744D              MOV     A,#77
   \   087C  900006            MOV     DPTR,#pckt+6
   \   087F  F0                MOVX    @DPTR,A
    398                         ERROR(5);
   \   0880  E4                CLR     A
   \   0881  FD                MOV     R5,A
   \   0882  7C05              MOV     R4,#5
   \   0884  120000            LCALL   $REFFN ERROR
    399                         return(1);
   \   0887  E4                CLR     A
   \   0888  FD                MOV     R5,A
   \   0889  04                INC     A
   \   088A  FC                MOV     R4,A
    400                        }
   \   088B  22                RET
   \   088C            ?0098:
   \   088C            ?0076:
    401             }
    402              return(0);
   \   088C  E4                CLR     A
   \   088D  FC                MOV     R4,A
   \   088E  FD                MOV     R5,A
    403          }
   \   088F            ?0099:
   \   088F  22                RET
   \   0890            ERROR:
    404          
    405          
    406          /*
                                              - fem -                                      Page   24

    407          -------------------------------------------------------------------------------------
    408                  Void ERROR(int type)
    409                          This function controls the responce of an error.
    410                  if error type is 0 this is a critical error such  (network not working)
    411                      this would cause the FEM to reset
    412                  if error type is 1~255 this is a software error and  information is sent back
    413                      ovrer the network. the number is the error code.
    414          --------------------------------------------------------------------------------------
    415          */      
    416          
    417          
    418          void ERROR(int type)
    419          { 
    420               if(type ==0)
   \   0890  900000            MOV     DPTR,#$LOCBX ERROR
   \   0893  ED                MOV     A,R5
   \   0894  F0                MOVX    @DPTR,A
   \   0895  A3                INC     DPTR
   \   0896  EC                MOV     A,R4
   \   0897  F0                MOVX    @DPTR,A
   \   0898  EC                MOV     A,R4
   \   0899  4D                ORL     A,R5
   \   089A  7033              JNZ     ?0101
   \   089C            ?0100:
    421               {
    422                       FNP = &SWRESET;
   \   089C  7D02              MOV     R5,#LOW(SWRESET)
   \   089E  7E00              MOV     R6,#HIGH(SWRESET)
   \   08A0  7F02              MOV     R7,#2
   \   08A2  900007            MOV     DPTR,#FNP
   \   08A5  EF                MOV     A,R7
   \   08A6  F0                MOVX    @DPTR,A
   \   08A7  A3                INC     DPTR
   \   08A8  EE                MOV     A,R6
   \   08A9  F0                MOVX    @DPTR,A
   \   08AA  A3                INC     DPTR
   \   08AB  ED                MOV     A,R5
   \   08AC  F0                MOVX    @DPTR,A
    423                       fblock = FNP;
   \   08AD  900008            MOV     DPTR,#FNP+1
   \   08B0  E0                MOVX    A,@DPTR
   \   08B1  FD                MOV     R5,A
   \   08B2  A3                INC     DPTR
   \   08B3  E0                MOVX    A,@DPTR
    424                       (*fblock) ();
   \   08B4  90000A            MOV     DPTR,#fblock
   \   08B7  CD                XCH     A,R5
   \   08B8  F0                MOVX    @DPTR,A
   \   08B9  A3                INC     DPTR
   \   08BA  CD                XCH     A,R5
   \   08BB  F0                MOVX    @DPTR,A
   \   08BC  90000A            MOV     DPTR,#fblock
   \   08BF  E0                MOVX    A,@DPTR
   \   08C0  FF                MOV     R7,A
   \   08C1  A3                INC     DPTR
   \   08C2  E0                MOVX    A,@DPTR
   \   08C3  F582              MOV     DPL,A
   \   08C5  8F83              MOV     DPH,R7
   \   08C7  120000            LCALL   ?LOAD_IND_DPTR2_L20
   \   08CA  120000            LCALL   ?LCALL_IND_L20
    425               }
    426               else
   \   08CD  8022              SJMP    ?0102
   \   08CF            ?0101:
    427               {
    428                  HOPDATA[CMD] = 250;
   \   08CF  74FA              MOV     A,#250
   \   08D1  905FF9            MOV     DPTR,#24569
   \   08D4  F0                MOVX    @DPTR,A
    429                  HOPDATA[NODEID] = nid;
   \   08D5  900001            MOV     DPTR,#nid+1
   \   08D8  E0                MOVX    A,@DPTR
   \   08D9  905FF8            MOV     DPTR,#24568
   \   08DC  F0                MOVX    @DPTR,A
    430                  HOPDATA[ERR] = type;
   \   08DD  900000            MOV     DPTR,#$LOCBX ERROR+1
   \   08E0  E0                MOVX    A,@DPTR
   \   08E1  905FFC            MOV     DPTR,#24572
   \   08E4  F0                MOVX    @DPTR,A
    431                  readback(0);  
   \   08E5  E4                CLR     A
   \   08E6  FC                MOV     R4,A
   \   08E7  FD                MOV     R5,A
   \   08E8  120000            LCALL   $REFFN readback
    432                  HOPDATA[ERR] = 0; 
   \   08EB  7400              MOV     A,#0
                                              - fem -                                      Page   25

   \   08ED  905FFC            MOV     DPTR,#24572
   \   08F0  F0                MOVX    @DPTR,A
   \   08F1            ?0102:
    433               }
    434          }
   \   08F1  22                RET
   \   08F2            node_wake:
    435          
    436          
    437          /*
    438          --------------------------------------------------------------------------------------
    439                  void node_wake
    440          
    441                          This is sent over the network to the control node stating this this node
    442          was just reset due to a power up or  a critical error.
    443          --------------------------------------------------------------------------------------
    444          */
    445          
    446          void node_wake()
    447          {
    448                  
    449                     HOPDATA[CMD] = 251;
   \   08F2  74FB              MOV     A,#251
   \   08F4  905FF9            MOV     DPTR,#24569
   \   08F7  F0                MOVX    @DPTR,A
    450                     HOPDATA[NODEID] = arc51_nodeid;
   \   08F8  900000            MOV     DPTR,#arc51_nodeid
   \   08FB  E0                MOVX    A,@DPTR
   \   08FC  905FF8            MOV     DPTR,#24568
   \   08FF  F0                MOVX    @DPTR,A
    451                  if(nid == arc51_nodeid)
   \   0900  900000            MOV     DPTR,#arc51_nodeid
   \   0903  E0                MOVX    A,@DPTR
   \   0904  7D00              MOV     R5,#0
   \   0906  FC                MOV     R4,A
   \   0907  900001            MOV     DPTR,#nid+1
   \   090A  E0                MOVX    A,@DPTR
   \   090B  6C                XRL     A,R4
   \   090C  7005              JNZ     ?0241
   \   090E  900000            MOV     DPTR,#nid
   \   0911  E0                MOVX    A,@DPTR
   \   0912  6D                XRL     A,R5
   \   0913            ?0241:
   \   0913  7008              JNZ     ?0104
   \   0915            ?0103:
    452                     HOPDATA[ERR] =  1;
   \   0915  7401              MOV     A,#1
   \   0917  905FFC            MOV     DPTR,#24572
   \   091A  F0                MOVX    @DPTR,A
    453                  else
   \   091B  8006              SJMP    ?0105
   \   091D            ?0104:
    454                     HOPDATA[ERR] =  7;
   \   091D  7407              MOV     A,#7
   \   091F  905FFC            MOV     DPTR,#24572
   \   0922  F0                MOVX    @DPTR,A
   \   0923            ?0105:
    455                     readback(0); 
   \   0923  E4                CLR     A
   \   0924  FC                MOV     R4,A
   \   0925  FD                MOV     R5,A
   \   0926  120000            LCALL   $REFFN readback
    456                  HOPDATA[ERR] = 0;    
   \   0929  7400              MOV     A,#0
   \   092B  905FFC            MOV     DPTR,#24572
   \   092E  F0                MOVX    @DPTR,A
    457          }
   \   092F  22                RET
   \   0930            time_out:
    458          /*
    459          ---------------------------------------------------------------------------------
    460                  time_out(int x);
    461                          this function conts to see if there is a time out;
    462                          about 5 sec, (3 counters);
    463                  var x;  
    464                          0:  inc counters and check for time out return 1 if time out
    465                          1:  reset counters for a new run
    466          
    467          ------------------------------------------------------------------------------------
    468          */
    469          int time_out(int x)
    470          {
    471           static int c1,c2,c3;
    472          
    473          switch(x)
   \   0930  900000            MOV     DPTR,#$LOCBX time_out
                                              - fem -                                      Page   26

   \   0933  ED                MOV     A,R5
   \   0934  F0                MOVX    @DPTR,A
   \   0935  A3                INC     DPTR
   \   0936  EC                MOV     A,R4
   \   0937  F0                MOVX    @DPTR,A
   \   0938  EC                MOV     A,R4
   \   0939  BD0002            CJNE    R5,#0,$+5
   \   093C  8003              SJMP    $+5
   \   093E  0209CA            LJMP    ?0109
   \   0941  6003              JZ      $+5
   \   0943  0209B0            LJMP    ?0117
   \   0946            ?0110:
    474          {
    475          
    476               case   0:          /* count mode */
    477                          c1++;                   /*   counters */
   \   0946  90040F            MOV     DPTR,#?0106+1
   \   0949  E0                MOVX    A,@DPTR
   \   094A  04                INC     A
   \   094B  F0                MOVX    @DPTR,A
   \   094C  90040E            MOV     DPTR,#?0106
   \   094F  7003              JNZ     ?0242
   \   0951  E0                MOVX    A,@DPTR
   \   0952  04                INC     A
   \   0953  F0                MOVX    @DPTR,A
   \   0954            ?0242:
    478                          if (c1 == 10000)
   \   0954  90040F            MOV     DPTR,#?0106+1
   \   0957  E0                MOVX    A,@DPTR
   \   0958  6410              XRL     A,#16
   \   095A  7006              JNZ     ?0243
   \   095C  90040E            MOV     DPTR,#?0106
   \   095F  E0                MOVX    A,@DPTR
   \   0960  6427              XRL     A,#39
   \   0962            ?0243:
   \   0962  7015              JNZ     ?0112
   \   0964            ?0111:
    479                          {
    480                             c2++;
   \   0964  900411            MOV     DPTR,#?0107+1
   \   0967  E0                MOVX    A,@DPTR
   \   0968  04                INC     A
   \   0969  F0                MOVX    @DPTR,A
   \   096A  900410            MOV     DPTR,#?0107
   \   096D  7003              JNZ     ?0244
   \   096F  E0                MOVX    A,@DPTR
   \   0970  04                INC     A
   \   0971  F0                MOVX    @DPTR,A
   \   0972            ?0244:
    481                             c1 = 0;
   \   0972  90040E            MOV     DPTR,#?0106
   \   0975  E4                CLR     A
   \   0976  F0                MOVX    @DPTR,A
   \   0977  A3                INC     DPTR
   \   0978  F0                MOVX    @DPTR,A
   \   0979            ?0112:
    482                          }
    483                          if (c2 == 2)
   \   0979  900411            MOV     DPTR,#?0107+1
   \   097C  E0                MOVX    A,@DPTR
   \   097D  6402              XRL     A,#2
   \   097F  7004              JNZ     ?0245
   \   0981  900410            MOV     DPTR,#?0107
   \   0984  E0                MOVX    A,@DPTR
   \   0985            ?0245:
   \   0985  7015              JNZ     ?0114
   \   0987            ?0113:
    484                          {
    485                             c3++;
   \   0987  900413            MOV     DPTR,#?0108+1
   \   098A  E0                MOVX    A,@DPTR
   \   098B  04                INC     A
   \   098C  F0                MOVX    @DPTR,A
   \   098D  900412            MOV     DPTR,#?0108
   \   0990  7003              JNZ     ?0246
   \   0992  E0                MOVX    A,@DPTR
   \   0993  04                INC     A
   \   0994  F0                MOVX    @DPTR,A
   \   0995            ?0246:
    486                             c2=0;
   \   0995  900410            MOV     DPTR,#?0107
   \   0998  E4                CLR     A
   \   0999  F0                MOVX    @DPTR,A
   \   099A  A3                INC     DPTR
   \   099B  F0                MOVX    @DPTR,A
   \   099C            ?0114:
                                              - fem -                                      Page   27

    487                          }
    488                          if (c3 == 1)
   \   099C  900413            MOV     DPTR,#?0108+1
   \   099F  E0                MOVX    A,@DPTR
   \   09A0  14                DEC     A
   \   09A1  7004              JNZ     ?0247
   \   09A3  900412            MOV     DPTR,#?0108
   \   09A6  E0                MOVX    A,@DPTR
   \   09A7            ?0247:
   \   09A7  7005              JNZ     ?0116
   \   09A9            ?0115:
    489                                  return(1);
   \   09A9  E4                CLR     A
   \   09AA  FD                MOV     R5,A
   \   09AB  04                INC     A
   \   09AC  FC                MOV     R4,A
    490                          break;
   \   09AD  22                RET
   \   09AE            ?0116:
   \   09AE  801A              SJMP    ?0109
   \   09B0            ?0117:
   \   09B0  B40117            CJNE    A,#1,?0109
    491              case  1:            /* reset counters */
    492                          c1=0;
   \   09B3  90040E            MOV     DPTR,#?0106
   \   09B6  E4                CLR     A
   \   09B7  F0                MOVX    @DPTR,A
   \   09B8  A3                INC     DPTR
   \   09B9  F0                MOVX    @DPTR,A
    493                          c2=0;
   \   09BA  900410            MOV     DPTR,#?0107
   \   09BD  E4                CLR     A
   \   09BE  F0                MOVX    @DPTR,A
   \   09BF  A3                INC     DPTR
   \   09C0  F0                MOVX    @DPTR,A
    494                          c3=0;
   \   09C1  900412            MOV     DPTR,#?0108
   \   09C4  E4                CLR     A
   \   09C5  F0                MOVX    @DPTR,A
   \   09C6  A3                INC     DPTR
   \   09C7  F0                MOVX    @DPTR,A
    495                          break;
   \   09C8  8000              SJMP    ?0109
   \   09CA            ?0109:
    496          }
    497          return(0);
   \   09CA  E4                CLR     A
   \   09CB  FC                MOV     R4,A
   \   09CC  FD                MOV     R5,A
    498          }
   \   09CD            ?0118:
   \   09CD  22                RET
   \   09CE            test_fun:
    499          
    500          
    501          void test_fun()
    502          {
    503          
    504          int i,j,k,status,t1=0,t2=0,t3=0;
   \   09CE  900000            MOV     DPTR,#$LOCBX test_fun+8
   \   09D1  E4                CLR     A
   \   09D2  F0                MOVX    @DPTR,A
   \   09D3  A3                INC     DPTR
   \   09D4  F0                MOVX    @DPTR,A
   \   09D5  900000            MOV     DPTR,#$LOCBX test_fun+10
   \   09D8  E4                CLR     A
   \   09D9  F0                MOVX    @DPTR,A
   \   09DA  A3                INC     DPTR
   \   09DB  F0                MOVX    @DPTR,A
   \   09DC  900000            MOV     DPTR,#$LOCBX test_fun+12
   \   09DF  E4                CLR     A
   \   09E0  F0                MOVX    @DPTR,A
   \   09E1  A3                INC     DPTR
   \   09E2  F0                MOVX    @DPTR,A
    505          char look;
    506          
    507          /* set up serial port */   
    508               PCON = 0x80;
   \   09E3  758780            MOV     PCON,#128
    509               TH1  = 0xDD; 
   \   09E6  758DDD            MOV     TH1,#221
    510               SCON = 0x52;
   \   09E9  759852            MOV     SCON,#82
    511               TMOD = 0x22;
   \   09EC  758922            MOV     TMOD,#34
    512               TCON = 0x50;
                                              - fem -                                      Page   28

   \   09EF  758850            MOV     TCON,#80
    513             
    514          
    515           status = arc51_init();           /* init the arcnet core */
   \   09F2  120000            LCALL   $REFFN arc51_init
   \   09F5  EC                MOV     A,R4
   \   09F6  7D00              MOV     R5,#0
    516             if(status == E_OK) 
   \   09F8  900000            MOV     DPTR,#$LOCBX test_fun+6
   \   09FB  CD                XCH     A,R5
   \   09FC  F0                MOVX    @DPTR,A
   \   09FD  A3                INC     DPTR
   \   09FE  CD                XCH     A,R5
   \   09FF  F0                MOVX    @DPTR,A
   \   0A00  4D                ORL     A,R5
   \   0A01  7016              JNZ     ?0120
   \   0A03            ?0119:
    517             {
    518                  node_wake();
   \   0A03  120000            LCALL   $REFFN node_wake
    519                  t1 = 1;
   \   0A06  900000            MOV     DPTR,#$LOCBX test_fun+8
   \   0A09  E4                CLR     A
   \   0A0A  F0                MOVX    @DPTR,A
   \   0A0B  A3                INC     DPTR
   \   0A0C  04                INC     A
   \   0A0D  F0                MOVX    @DPTR,A
    520                  printf("init ok");
   \   0A0E  7D00              MOV     R5,#LOW(?0121)
   \   0A10  7E00              MOV     R6,#HIGH(?0121)
   \   0A12  7F02              MOV     R7,#2
   \   0A14  120000            LCALL   $REFFN printf
   \   0A17  8009              SJMP    ?0122
   \   0A19            ?0120:
    521             }
    522             else printf("error");
   \   0A19  7D08              MOV     R5,#LOW(?0123)
   \   0A1B  7E00              MOV     R6,#HIGH(?0123)
   \   0A1D  7F02              MOV     R7,#2
   \   0A1F  120000            LCALL   $REFFN printf
   \   0A22            ?0122:
    523          
    524          
    525          /* set register on test card*/
    526          (* (char xdata *) (0xfef9 )) = 0x00;
   \   0A22  7400              MOV     A,#0
   \   0A24  90FEF9            MOV     DPTR,#65273
   \   0A27  F0                MOVX    @DPTR,A
    527          /* led test */
    528          j=1;
   \   0A28  900000            MOV     DPTR,#$LOCBX test_fun+2
   \   0A2B  E4                CLR     A
   \   0A2C  F0                MOVX    @DPTR,A
   \   0A2D  A3                INC     DPTR
   \   0A2E  04                INC     A
   \   0A2F  F0                MOVX    @DPTR,A
    529          for(i= 0;i<=40;i++)
   \   0A30  900000            MOV     DPTR,#$LOCBX test_fun
   \   0A33  E4                CLR     A
   \   0A34  F0                MOVX    @DPTR,A
   \   0A35  A3                INC     DPTR
   \   0A36  F0                MOVX    @DPTR,A
   \   0A37            ?0125:
   \   0A37  D3                SETB    C
   \   0A38  900000            MOV     DPTR,#$LOCBX test_fun+1
   \   0A3B  E0                MOVX    A,@DPTR
   \   0A3C  9428              SUBB    A,#40
   \   0A3E  900000            MOV     DPTR,#$LOCBX test_fun
   \   0A41  E0                MOVX    A,@DPTR
   \   0A42  6480              XRL     A,#128
   \   0A44  9480              SUBB    A,#128
   \   0A46  4003              JC      $+5
   \   0A48  020B16            LJMP    ?0124
   \   0A4B            ?0126:
    530          {
    531          P3.3=1;
   \   0A4B  D2B3              SETB    P3.3
    532          if (j > 200 )
   \   0A4D  D3                SETB    C
   \   0A4E  900000            MOV     DPTR,#$LOCBX test_fun+3
   \   0A51  E0                MOVX    A,@DPTR
   \   0A52  94C8              SUBB    A,#200
   \   0A54  900000            MOV     DPTR,#$LOCBX test_fun+2
   \   0A57  E0                MOVX    A,@DPTR
   \   0A58  6480              XRL     A,#128
   \   0A5A  9480              SUBB    A,#128
                                              - fem -                                      Page   29

   \   0A5C  405F              JC      ?0129
   \   0A5E            ?0128:
   \   0A5E            ?0131:
    533             while ( j != 1)
   \   0A5E  900000            MOV     DPTR,#$LOCBX test_fun+3
   \   0A61  E0                MOVX    A,@DPTR
   \   0A62  14                DEC     A
   \   0A63  7006              JNZ     ?0248
   \   0A65  900000            MOV     DPTR,#$LOCBX test_fun+2
   \   0A68  E0                MOVX    A,@DPTR
   \   0A69  6052              JZ      ?0130
   \   0A6B            ?0248:
   \   0A6B            ?0132:
    534             {
    535                 P3.3=1;
   \   0A6B  D2B3              SETB    P3.3
    536                 j=j/2;
   \   0A6D  900000            MOV     DPTR,#$LOCBX test_fun+2
   \   0A70  E0                MOVX    A,@DPTR
   \   0A71  FF                MOV     R7,A
   \   0A72  A3                INC     DPTR
   \   0A73  E0                MOVX    A,@DPTR
   \   0A74  FE                MOV     R6,A
   \   0A75  E4                CLR     A
   \   0A76  FB                MOV     R3,A
   \   0A77  7A02              MOV     R2,#2
   \   0A79  EE                MOV     A,R6
   \   0A7A  F8                MOV     R0,A
   \   0A7B  EF                MOV     A,R7
   \   0A7C  F9                MOV     R1,A
   \   0A7D  120000            LCALL   ?SI_DIV_L00
   \   0A80  E8                MOV     A,R0
   \   0A81  FE                MOV     R6,A
   \   0A82  E9                MOV     A,R1
   \   0A83  FF                MOV     R7,A
    537                 (* (char xdata *) (0xfefa )) = j;
   \   0A84  900000            MOV     DPTR,#$LOCBX test_fun+2
   \   0A87  EF                MOV     A,R7
   \   0A88  F0                MOVX    @DPTR,A
   \   0A89  A3                INC     DPTR
   \   0A8A  EE                MOV     A,R6
   \   0A8B  F0                MOVX    @DPTR,A
   \   0A8C  EE                MOV     A,R6
   \   0A8D  90FEFA            MOV     DPTR,#65274
   \   0A90  F0                MOVX    @DPTR,A
    538                 for(k=0;k<=6000;k++);
   \   0A91  900000            MOV     DPTR,#$LOCBX test_fun+4
   \   0A94  E4                CLR     A
   \   0A95  F0                MOVX    @DPTR,A
   \   0A96  A3                INC     DPTR
   \   0A97  F0                MOVX    @DPTR,A
   \   0A98            ?0134:
   \   0A98  D3                SETB    C
   \   0A99  900000            MOV     DPTR,#$LOCBX test_fun+5
   \   0A9C  E0                MOVX    A,@DPTR
   \   0A9D  9470              SUBB    A,#112
   \   0A9F  900000            MOV     DPTR,#$LOCBX test_fun+4
   \   0AA2  E0                MOVX    A,@DPTR
   \   0AA3  6480              XRL     A,#128
   \   0AA5  9497              SUBB    A,#151
   \   0AA7  5010              JNC     ?0133
   \   0AA9            ?0135:
   \   0AA9  900000            MOV     DPTR,#$LOCBX test_fun+5
   \   0AAC  E0                MOVX    A,@DPTR
   \   0AAD  04                INC     A
   \   0AAE  F0                MOVX    @DPTR,A
   \   0AAF  900000            MOV     DPTR,#$LOCBX test_fun+4
   \   0AB2  7003              JNZ     ?0249
   \   0AB4  E0                MOVX    A,@DPTR
   \   0AB5  04                INC     A
   \   0AB6  F0                MOVX    @DPTR,A
   \   0AB7            ?0249:
   \   0AB7  80DF              SJMP    ?0134
   \   0AB9            ?0133:
    539                 P3.3=0;
   \   0AB9  C2B3              CLR     P3.3
   \   0ABB  80A1              SJMP    ?0131
   \   0ABD            ?0130:
   \   0ABD            ?0129:
    540             }
    541             (* (char xdata *) (0xfefa )) = j;
   \   0ABD  900000            MOV     DPTR,#$LOCBX test_fun+3
   \   0AC0  E0                MOVX    A,@DPTR
   \   0AC1  90FEFA            MOV     DPTR,#65274
   \   0AC4  F0                MOVX    @DPTR,A
    542          for(k=0;k<=6000;k++);
                                              - fem -                                      Page   30

   \   0AC5  900000            MOV     DPTR,#$LOCBX test_fun+4
   \   0AC8  E4                CLR     A
   \   0AC9  F0                MOVX    @DPTR,A
   \   0ACA  A3                INC     DPTR
   \   0ACB  F0                MOVX    @DPTR,A
   \   0ACC            ?0138:
   \   0ACC  D3                SETB    C
   \   0ACD  900000            MOV     DPTR,#$LOCBX test_fun+5
   \   0AD0  E0                MOVX    A,@DPTR
   \   0AD1  9470              SUBB    A,#112
   \   0AD3  900000            MOV     DPTR,#$LOCBX test_fun+4
   \   0AD6  E0                MOVX    A,@DPTR
   \   0AD7  6480              XRL     A,#128
   \   0AD9  9497              SUBB    A,#151
   \   0ADB  5010              JNC     ?0137
   \   0ADD            ?0139:
   \   0ADD  900000            MOV     DPTR,#$LOCBX test_fun+5
   \   0AE0  E0                MOVX    A,@DPTR
   \   0AE1  04                INC     A
   \   0AE2  F0                MOVX    @DPTR,A
   \   0AE3  900000            MOV     DPTR,#$LOCBX test_fun+4
   \   0AE6  7003              JNZ     ?0250
   \   0AE8  E0                MOVX    A,@DPTR
   \   0AE9  04                INC     A
   \   0AEA  F0                MOVX    @DPTR,A
   \   0AEB            ?0250:
   \   0AEB  80DF              SJMP    ?0138
   \   0AED            ?0137:
    543          P3.3=0;
   \   0AED  C2B3              CLR     P3.3
    544             j=j*2;
   \   0AEF  900000            MOV     DPTR,#$LOCBX test_fun+2
   \   0AF2  E0                MOVX    A,@DPTR
   \   0AF3  FF                MOV     R7,A
   \   0AF4  A3                INC     DPTR
   \   0AF5  E0                MOVX    A,@DPTR
   \   0AF6  FE                MOV     R6,A
   \   0AF7  EE                MOV     A,R6
   \   0AF8  25E0              ADD     A,ACC
   \   0AFA  CF                XCH     A,R7
   \   0AFB  33                RLC     A
   \   0AFC  CF                XCH     A,R7
   \   0AFD  900000            MOV     DPTR,#$LOCBX test_fun+2
   \   0B00  CF                XCH     A,R7
   \   0B01  F0                MOVX    @DPTR,A
   \   0B02  A3                INC     DPTR
   \   0B03  CF                XCH     A,R7
   \   0B04  F0                MOVX    @DPTR,A
   \   0B05  900000            MOV     DPTR,#$LOCBX test_fun+1
   \   0B08  E0                MOVX    A,@DPTR
   \   0B09  04                INC     A
   \   0B0A  F0                MOVX    @DPTR,A
   \   0B0B  900000            MOV     DPTR,#$LOCBX test_fun
   \   0B0E  7003              JNZ     ?0251
   \   0B10  E0                MOVX    A,@DPTR
   \   0B11  04                INC     A
   \   0B12  F0                MOVX    @DPTR,A
   \   0B13            ?0251:
   \   0B13  020A37            LJMP    ?0125
   \   0B16            ?0124:
    545          }
    546          
    547               printf("\n<--------------------------------->\n");
   \   0B16  7D0E              MOV     R5,#LOW(?0141)
   \   0B18  7E00              MOV     R6,#HIGH(?0141)
   \   0B1A  7F02              MOV     R7,#2
   \   0B1C  120000            LCALL   $REFFN printf
    548               printf(  "<             BNL  (BOOT)         >\n");
   \   0B1F  7D34              MOV     R5,#LOW(?0142)
   \   0B21  7E00              MOV     R6,#HIGH(?0142)
   \   0B23  7F02              MOV     R7,#2
   \   0B25  120000            LCALL   $REFFN printf
    549               printf(  "<            FEM.C  ver .99       >\n");
   \   0B28  7D59              MOV     R5,#LOW(?0143)
   \   0B2A  7E00              MOV     R6,#HIGH(?0143)
   \   0B2C  7F02              MOV     R7,#2
   \   0B2E  120000            LCALL   $REFFN printf
    550               printf(  "<           TEST ROUTINE          >\n");
   \   0B31  7D7E              MOV     R5,#LOW(?0144)
   \   0B33  7E00              MOV     R6,#HIGH(?0144)
   \   0B35  7F02              MOV     R7,#2
   \   0B37  120000            LCALL   $REFFN printf
    551               printf(  "<--------------------------------->\n");
   \   0B3A  7DA3              MOV     R5,#LOW(?0145)
   \   0B3C  7E00              MOV     R6,#HIGH(?0145)
   \   0B3E  7F02              MOV     R7,#2
                                              - fem -                                      Page   31

   \   0B40  120000            LCALL   $REFFN printf
    552          
    553          
    554          
    555          printf("\n  NODE 2 test routine starting\n ");
   \   0B43  7DC8              MOV     R5,#LOW(?0146)
   \   0B45  7E00              MOV     R6,#HIGH(?0146)
   \   0B47  7F02              MOV     R7,#2
   \   0B49  120000            LCALL   $REFFN printf
    556          
    557          
    558          
    559          /* set test board reg */
    560          (* (char xdata *) (0xfef9 )) = 0x20;
   \   0B4C  7420              MOV     A,#32
   \   0B4E  90FEF9            MOV     DPTR,#65273
   \   0B51  F0                MOVX    @DPTR,A
    561          
    562          
    563          /*set port write */
    564             P3.3 = 0;
   \   0B52  C2B3              CLR     P3.3
    565             P1= 0x77;
   \   0B54  759077            MOV     P1,#119
    566          
    567          /* toggel prr to reset the d-flip flops on test board */
    568             P3.2 = 1;
   \   0B57  D2B2              SETB    P3.2
    569             P3.2 = 0;
   \   0B59  C2B2              CLR     P3.2
    570          
    571          
    572          /*   check the adress lines */
    573            i =  (* (char xdata *) (0xfefb ));
   \   0B5B  90FEFB            MOV     DPTR,#65275
   \   0B5E  E0                MOVX    A,@DPTR
   \   0B5F  7D00              MOV     R5,#0
    574            (* (char xdata *) (0xfefb )) = i;
   \   0B61  900000            MOV     DPTR,#$LOCBX test_fun
   \   0B64  CD                XCH     A,R5
   \   0B65  F0                MOVX    @DPTR,A
   \   0B66  A3                INC     DPTR
   \   0B67  CD                XCH     A,R5
   \   0B68  F0                MOVX    @DPTR,A
   \   0B69  90FEFB            MOV     DPTR,#65275
   \   0B6C  F0                MOVX    @DPTR,A
    575          
    576          
    577          printf(" got in the user program\n\n");
   \   0B6D  7DEA              MOV     R5,#LOW(?0147)
   \   0B6F  7E00              MOV     R6,#HIGH(?0147)
   \   0B71  7F02              MOV     R7,#2
   \   0B73  120000            LCALL   $REFFN printf
    578          
    579          /* check port write, data read
    580             address lines and data lines
    581          */
    582          
    583          i = 0;
   \   0B76  900000            MOV     DPTR,#$LOCBX test_fun
   \   0B79  E4                CLR     A
   \   0B7A  F0                MOVX    @DPTR,A
   \   0B7B  A3                INC     DPTR
   \   0B7C  F0                MOVX    @DPTR,A
    584              P1 = 0x77;  
   \   0B7D  759077            MOV     P1,#119
    585              printf(" 0x77--> %x    \n", look = (* (char xdata *) (0xfefa )));
   \   0B80  90FEFA            MOV     DPTR,#65274
   \   0B83  E0                MOVX    A,@DPTR
   \   0B84  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0B87  F0                MOVX    @DPTR,A
   \   0B88  7D00              MOV     R5,#0
   \   0B8A  900000            MOV     DPTR,#$PRMBX printf+3
   \   0B8D  CD                XCH     A,R5
   \   0B8E  F0                MOVX    @DPTR,A
   \   0B8F  A3                INC     DPTR
   \   0B90  CD                XCH     A,R5
   \   0B91  F0                MOVX    @DPTR,A
   \   0B92  7D05              MOV     R5,#LOW(?0148)
   \   0B94  7E01              MOV     R6,#HIGH(?0148)
   \   0B96  7F02              MOV     R7,#2
   \   0B98  120000            LCALL   $REFFN printf
    586              if (look != 0x77)  i = 1;
   \   0B9B  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0B9E  E0                MOVX    A,@DPTR
   \   0B9F  6477              XRL     A,#119
                                              - fem -                                      Page   32

   \   0BA1  6008              JZ      ?0150
   \   0BA3            ?0149:
   \   0BA3  900000            MOV     DPTR,#$LOCBX test_fun
   \   0BA6  E4                CLR     A
   \   0BA7  F0                MOVX    @DPTR,A
   \   0BA8  A3                INC     DPTR
   \   0BA9  04                INC     A
   \   0BAA  F0                MOVX    @DPTR,A
   \   0BAB            ?0150:
    587              P1 = 0x55;  
   \   0BAB  759055            MOV     P1,#85
    588              printf(" 0x55 --> %x    \n",  look = (* (char xdata *) (0xfefa )));
   \   0BAE  90FEFA            MOV     DPTR,#65274
   \   0BB1  E0                MOVX    A,@DPTR
   \   0BB2  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0BB5  F0                MOVX    @DPTR,A
   \   0BB6  7D00              MOV     R5,#0
   \   0BB8  900000            MOV     DPTR,#$PRMBX printf+3
   \   0BBB  CD                XCH     A,R5
   \   0BBC  F0                MOVX    @DPTR,A
   \   0BBD  A3                INC     DPTR
   \   0BBE  CD                XCH     A,R5
   \   0BBF  F0                MOVX    @DPTR,A
   \   0BC0  7D16              MOV     R5,#LOW(?0151)
   \   0BC2  7E01              MOV     R6,#HIGH(?0151)
   \   0BC4  7F02              MOV     R7,#2
   \   0BC6  120000            LCALL   $REFFN printf
    589              if (look != 0x55)  i = 1;
   \   0BC9  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0BCC  E0                MOVX    A,@DPTR
   \   0BCD  6455              XRL     A,#85
   \   0BCF  6008              JZ      ?0153
   \   0BD1            ?0152:
   \   0BD1  900000            MOV     DPTR,#$LOCBX test_fun
   \   0BD4  E4                CLR     A
   \   0BD5  F0                MOVX    @DPTR,A
   \   0BD6  A3                INC     DPTR
   \   0BD7  04                INC     A
   \   0BD8  F0                MOVX    @DPTR,A
   \   0BD9            ?0153:
    590              P1 = 0x33;  
   \   0BD9  759033            MOV     P1,#51
    591              printf(" 0x33 --> %x    \n",  look = (* (char xdata *) (0xfefa )));
   \   0BDC  90FEFA            MOV     DPTR,#65274
   \   0BDF  E0                MOVX    A,@DPTR
   \   0BE0  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0BE3  F0                MOVX    @DPTR,A
   \   0BE4  7D00              MOV     R5,#0
   \   0BE6  900000            MOV     DPTR,#$PRMBX printf+3
   \   0BE9  CD                XCH     A,R5
   \   0BEA  F0                MOVX    @DPTR,A
   \   0BEB  A3                INC     DPTR
   \   0BEC  CD                XCH     A,R5
   \   0BED  F0                MOVX    @DPTR,A
   \   0BEE  7D28              MOV     R5,#LOW(?0154)
   \   0BF0  7E01              MOV     R6,#HIGH(?0154)
   \   0BF2  7F02              MOV     R7,#2
   \   0BF4  120000            LCALL   $REFFN printf
    592              if (look != 0x33)  i = 1;
   \   0BF7  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0BFA  E0                MOVX    A,@DPTR
   \   0BFB  6433              XRL     A,#51
   \   0BFD  6008              JZ      ?0156
   \   0BFF            ?0155:
   \   0BFF  900000            MOV     DPTR,#$LOCBX test_fun
   \   0C02  E4                CLR     A
   \   0C03  F0                MOVX    @DPTR,A
   \   0C04  A3                INC     DPTR
   \   0C05  04                INC     A
   \   0C06  F0                MOVX    @DPTR,A
   \   0C07            ?0156:
    593              P1 = 0x44;  
   \   0C07  759044            MOV     P1,#68
    594              printf(" 0x44 --> %x    \n", look = (* (char xdata *) (0xfefa )));
   \   0C0A  90FEFA            MOV     DPTR,#65274
   \   0C0D  E0                MOVX    A,@DPTR
   \   0C0E  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0C11  F0                MOVX    @DPTR,A
   \   0C12  7D00              MOV     R5,#0
   \   0C14  900000            MOV     DPTR,#$PRMBX printf+3
   \   0C17  CD                XCH     A,R5
   \   0C18  F0                MOVX    @DPTR,A
   \   0C19  A3                INC     DPTR
   \   0C1A  CD                XCH     A,R5
   \   0C1B  F0                MOVX    @DPTR,A
   \   0C1C  7D3A              MOV     R5,#LOW(?0157)
                                              - fem -                                      Page   33

   \   0C1E  7E01              MOV     R6,#HIGH(?0157)
   \   0C20  7F02              MOV     R7,#2
   \   0C22  120000            LCALL   $REFFN printf
    595              if (look != 0x44)  i = 1;
   \   0C25  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0C28  E0                MOVX    A,@DPTR
   \   0C29  6444              XRL     A,#68
   \   0C2B  6008              JZ      ?0159
   \   0C2D            ?0158:
   \   0C2D  900000            MOV     DPTR,#$LOCBX test_fun
   \   0C30  E4                CLR     A
   \   0C31  F0                MOVX    @DPTR,A
   \   0C32  A3                INC     DPTR
   \   0C33  04                INC     A
   \   0C34  F0                MOVX    @DPTR,A
   \   0C35            ?0159:
    596              P1 = 0xaa;  
   \   0C35  7590AA            MOV     P1,#170
    597              printf(" 0xaa --> %x    \n", look = (* (char xdata *) (0xfefa )));
   \   0C38  90FEFA            MOV     DPTR,#65274
   \   0C3B  E0                MOVX    A,@DPTR
   \   0C3C  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0C3F  F0                MOVX    @DPTR,A
   \   0C40  7D00              MOV     R5,#0
   \   0C42  900000            MOV     DPTR,#$PRMBX printf+3
   \   0C45  CD                XCH     A,R5
   \   0C46  F0                MOVX    @DPTR,A
   \   0C47  A3                INC     DPTR
   \   0C48  CD                XCH     A,R5
   \   0C49  F0                MOVX    @DPTR,A
   \   0C4A  7D4C              MOV     R5,#LOW(?0160)
   \   0C4C  7E01              MOV     R6,#HIGH(?0160)
   \   0C4E  7F02              MOV     R7,#2
   \   0C50  120000            LCALL   $REFFN printf
    598              if (look != 0xaa)  i = 1;
   \   0C53  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0C56  E0                MOVX    A,@DPTR
   \   0C57  64AA              XRL     A,#170
   \   0C59  6008              JZ      ?0162
   \   0C5B            ?0161:
   \   0C5B  900000            MOV     DPTR,#$LOCBX test_fun
   \   0C5E  E4                CLR     A
   \   0C5F  F0                MOVX    @DPTR,A
   \   0C60  A3                INC     DPTR
   \   0C61  04                INC     A
   \   0C62  F0                MOVX    @DPTR,A
   \   0C63            ?0162:
    599              P1 = 0x00;  
   \   0C63  759000            MOV     P1,#0
    600              printf(" 0x00 --> %x    \n", look = (* (char xdata *) (0xfefa )));
   \   0C66  90FEFA            MOV     DPTR,#65274
   \   0C69  E0                MOVX    A,@DPTR
   \   0C6A  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0C6D  F0                MOVX    @DPTR,A
   \   0C6E  7D00              MOV     R5,#0
   \   0C70  900000            MOV     DPTR,#$PRMBX printf+3
   \   0C73  CD                XCH     A,R5
   \   0C74  F0                MOVX    @DPTR,A
   \   0C75  A3                INC     DPTR
   \   0C76  CD                XCH     A,R5
   \   0C77  F0                MOVX    @DPTR,A
   \   0C78  7D5E              MOV     R5,#LOW(?0163)
   \   0C7A  7E01              MOV     R6,#HIGH(?0163)
   \   0C7C  7F02              MOV     R7,#2
   \   0C7E  120000            LCALL   $REFFN printf
    601              if (look != 0x00)  i = 1;
   \   0C81  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0C84  E0                MOVX    A,@DPTR
   \   0C85  6008              JZ      ?0165
   \   0C87            ?0164:
   \   0C87  900000            MOV     DPTR,#$LOCBX test_fun
   \   0C8A  E4                CLR     A
   \   0C8B  F0                MOVX    @DPTR,A
   \   0C8C  A3                INC     DPTR
   \   0C8D  04                INC     A
   \   0C8E  F0                MOVX    @DPTR,A
   \   0C8F            ?0165:
    602              P1 = 0xff;  
   \   0C8F  7590FF            MOV     P1,#255
    603              printf(" 0xff --> %x    \n", look = (* (char xdata *) (0xfefa )));
   \   0C92  90FEFA            MOV     DPTR,#65274
   \   0C95  E0                MOVX    A,@DPTR
   \   0C96  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0C99  F0                MOVX    @DPTR,A
   \   0C9A  7D00              MOV     R5,#0
   \   0C9C  900000            MOV     DPTR,#$PRMBX printf+3
                                              - fem -                                      Page   34

   \   0C9F  CD                XCH     A,R5
   \   0CA0  F0                MOVX    @DPTR,A
   \   0CA1  A3                INC     DPTR
   \   0CA2  CD                XCH     A,R5
   \   0CA3  F0                MOVX    @DPTR,A
   \   0CA4  7D70              MOV     R5,#LOW(?0166)
   \   0CA6  7E01              MOV     R6,#HIGH(?0166)
   \   0CA8  7F02              MOV     R7,#2
   \   0CAA  120000            LCALL   $REFFN printf
    604              if (look != 0xff)  i = 1;
   \   0CAD  900000            MOV     DPTR,#$LOCBX test_fun+14
   \   0CB0  E0                MOVX    A,@DPTR
   \   0CB1  04                INC     A
   \   0CB2  6008              JZ      ?0168
   \   0CB4            ?0167:
   \   0CB4  900000            MOV     DPTR,#$LOCBX test_fun
   \   0CB7  E4                CLR     A
   \   0CB8  F0                MOVX    @DPTR,A
   \   0CB9  A3                INC     DPTR
   \   0CBA  04                INC     A
   \   0CBB  F0                MOVX    @DPTR,A
   \   0CBC            ?0168:
    605          
    606          
    607          if (i != 1)
   \   0CBC  900000            MOV     DPTR,#$LOCBX test_fun+1
   \   0CBF  E0                MOVX    A,@DPTR
   \   0CC0  14                DEC     A
   \   0CC1  7006              JNZ     ?0252
   \   0CC3  900000            MOV     DPTR,#$LOCBX test_fun
   \   0CC6  E0                MOVX    A,@DPTR
   \   0CC7  6011              JZ      ?0170
   \   0CC9            ?0252:
   \   0CC9            ?0169:
    608          {
    609           t3 = 1;
   \   0CC9  900000            MOV     DPTR,#$LOCBX test_fun+12
   \   0CCC  E4                CLR     A
   \   0CCD  F0                MOVX    @DPTR,A
   \   0CCE  A3                INC     DPTR
   \   0CCF  04                INC     A
   \   0CD0  F0                MOVX    @DPTR,A
    610           printf("\n data and port check ok\n");
   \   0CD1  7D82              MOV     R5,#LOW(?0171)
   \   0CD3  7E01              MOV     R6,#HIGH(?0171)
   \   0CD5  7F02              MOV     R7,#2
   \   0CD7  120000            LCALL   $REFFN printf
   \   0CDA            ?0170:
    611          }
    612          
    613          /*
    614          check data line and write
    615          */
    616          
    617          for(j=0;j<=500;j++)
   \   0CDA  900000            MOV     DPTR,#$LOCBX test_fun+2
   \   0CDD  E4                CLR     A
   \   0CDE  F0                MOVX    @DPTR,A
   \   0CDF  A3                INC     DPTR
   \   0CE0  F0                MOVX    @DPTR,A
   \   0CE1            ?0173:
   \   0CE1  D3                SETB    C
   \   0CE2  900000            MOV     DPTR,#$LOCBX test_fun+3
   \   0CE5  E0                MOVX    A,@DPTR
   \   0CE6  94F4              SUBB    A,#244
   \   0CE8  900000            MOV     DPTR,#$LOCBX test_fun+2
   \   0CEB  E0                MOVX    A,@DPTR
   \   0CEC  6480              XRL     A,#128
   \   0CEE  9481              SUBB    A,#129
   \   0CF0  5018              JNC     ?0172
   \   0CF2            ?0174:
    618             (* (char xdata *) (0xfefa )) = j;
   \   0CF2  900000            MOV     DPTR,#$LOCBX test_fun+3
   \   0CF5  E0                MOVX    A,@DPTR
   \   0CF6  90FEFA            MOV     DPTR,#65274
   \   0CF9  F0                MOVX    @DPTR,A
   \   0CFA  900000            MOV     DPTR,#$LOCBX test_fun+3
   \   0CFD  E0                MOVX    A,@DPTR
   \   0CFE  04                INC     A
   \   0CFF  F0                MOVX    @DPTR,A
   \   0D00  900000            MOV     DPTR,#$LOCBX test_fun+2
   \   0D03  7003              JNZ     ?0253
   \   0D05  E0                MOVX    A,@DPTR
   \   0D06  04                INC     A
   \   0D07  F0                MOVX    @DPTR,A
   \   0D08            ?0253:
                                              - fem -                                      Page   35

   \   0D08  80D7              SJMP    ?0173
   \   0D0A            ?0172:
    619          
    620          /*
    621          togal P3.5 for PR 
    622          
    623          */
    624          P3.5 = 0;
   \   0D0A  C2B5              CLR     P3.5
    625          P3.5 = 1;   
   \   0D0C  D2B5              SETB    P3.5
    626          P3.5 = 0;
   \   0D0E  C2B5              CLR     P3.5
    627          
    628          /* check each chip select */
    629          
    630          for (i=0;i<=20;i++)
   \   0D10  900000            MOV     DPTR,#$LOCBX test_fun
   \   0D13  E4                CLR     A
   \   0D14  F0                MOVX    @DPTR,A
   \   0D15  A3                INC     DPTR
   \   0D16  F0                MOVX    @DPTR,A
   \   0D17            ?0177:
   \   0D17  D3                SETB    C
   \   0D18  900000            MOV     DPTR,#$LOCBX test_fun+1
   \   0D1B  E0                MOVX    A,@DPTR
   \   0D1C  9414              SUBB    A,#20
   \   0D1E  900000            MOV     DPTR,#$LOCBX test_fun
   \   0D21  E0                MOVX    A,@DPTR
   \   0D22  6480              XRL     A,#128
   \   0D24  9480              SUBB    A,#128
   \   0D26  501B              JNC     ?0176
   \   0D28            ?0178:
    631              gen_cs(i);
   \   0D28  900000            MOV     DPTR,#$LOCBX test_fun
   \   0D2B  E0                MOVX    A,@DPTR
   \   0D2C  FD                MOV     R5,A
   \   0D2D  A3                INC     DPTR
   \   0D2E  E0                MOVX    A,@DPTR
   \   0D2F  FC                MOV     R4,A
   \   0D30  120000            LCALL   $REFFN gen_cs
   \   0D33  900000            MOV     DPTR,#$LOCBX test_fun+1
   \   0D36  E0                MOVX    A,@DPTR
   \   0D37  04                INC     A
   \   0D38  F0                MOVX    @DPTR,A
   \   0D39  900000            MOV     DPTR,#$LOCBX test_fun
   \   0D3C  7003              JNZ     ?0254
   \   0D3E  E0                MOVX    A,@DPTR
   \   0D3F  04                INC     A
   \   0D40  F0                MOVX    @DPTR,A
   \   0D41            ?0254:
   \   0D41  80D4              SJMP    ?0177
   \   0D43            ?0176:
    632          
    633          /* check data write compare */
    634          (* (char xdata *) (0xfef9 )) = 0x25;
   \   0D43  7425              MOV     A,#37
   \   0D45  90FEF9            MOV     DPTR,#65273
   \   0D48  F0                MOVX    @DPTR,A
    635          
    636          /*togal port write*/
    637          P3.3=1;
   \   0D49  D2B3              SETB    P3.3
    638          P3.3=0;
   \   0D4B  C2B3              CLR     P3.3
    639          
    640          testsend(0x03);
   \   0D4D  E4                CLR     A
   \   0D4E  FD                MOV     R5,A
   \   0D4F  7C03              MOV     R4,#3
   \   0D51  120000            LCALL   $REFFN testsend
   \   0D54            ?0181:
    641          
    642          while(1)
   \   0D54  00                NOP
    643             {
    644                if (arc51_read(&buf[0]) == E_OK)        /* if status = 0 a packet was recived */
   \   0D55  7D0C              MOV     R5,#LOW(buf)
   \   0D57  7E00              MOV     R6,#HIGH(buf)
   \   0D59  7F01              MOV     R7,#1
   \   0D5B  120000            LCALL   $REFFN arc51_read
   \   0D5E  BC0051            CJNE    R4,#0,?0184
   \   0D61            ?0183:
    645                  if((buf[NODEID+4] == nid) || (buf[GRPCMD+4] == PUB) || (buf[GRPCMD+4] == grpid))
   \   0D61  900010            MOV     DPTR,#buf+4
   \   0D64  E0                MOVX    A,@DPTR
                                              - fem -                                      Page   36

   \   0D65  7D00              MOV     R5,#0
   \   0D67  FC                MOV     R4,A
   \   0D68  900001            MOV     DPTR,#nid+1
   \   0D6B  E0                MOVX    A,@DPTR
   \   0D6C  6C                XRL     A,R4
   \   0D6D  7007              JNZ     ?0255
   \   0D6F  900000            MOV     DPTR,#nid
   \   0D72  E0                MOVX    A,@DPTR
   \   0D73  6D                XRL     A,R5
   \   0D74  601C              JZ      ?0185
   \   0D76            ?0255:
   \   0D76  900013            MOV     DPTR,#buf+7
   \   0D79  E0                MOVX    A,@DPTR
   \   0D7A  14                DEC     A
   \   0D7B  6015              JZ      ?0185
   \   0D7D  900013            MOV     DPTR,#buf+7
   \   0D80  E0                MOVX    A,@DPTR
   \   0D81  7D00              MOV     R5,#0
   \   0D83  FC                MOV     R4,A
   \   0D84  900003            MOV     DPTR,#grpid+1
   \   0D87  E0                MOVX    A,@DPTR
   \   0D88  6C                XRL     A,R4
   \   0D89  7005              JNZ     ?0256
   \   0D8B  900002            MOV     DPTR,#grpid
   \   0D8E  E0                MOVX    A,@DPTR
   \   0D8F  6D                XRL     A,R5
   \   0D90            ?0256:
   \   0D90  7020              JNZ     ?0186
   \   0D92            ?0187:
   \   0D92            ?0188:
   \   0D92            ?0185:
    646                      if (buf[ERR+4] == 0)
   \   0D92  900014            MOV     DPTR,#buf+8
   \   0D95  E0                MOVX    A,@DPTR
   \   0D96  7013              JNZ     ?0190
   \   0D98            ?0189:
    647                      {           
    648                          testsend(0x03);
   \   0D98  E4                CLR     A
   \   0D99  FD                MOV     R5,A
   \   0D9A  7C03              MOV     R4,#3
   \   0D9C  120000            LCALL   $REFFN testsend
    649                          (* (char xdata *) (0xfef9 )) = 0x2f;
   \   0D9F  742F              MOV     A,#47
   \   0DA1  90FEF9            MOV     DPTR,#65273
   \   0DA4  F0                MOVX    @DPTR,A
    650                          /*togal port write*/
    651                          P3.3=1;
   \   0DA5  D2B3              SETB    P3.3
    652                          P3.3=0;
   \   0DA7  C2B3              CLR     P3.3
    653                      }
    654                      else
   \   0DA9  8007              SJMP    ?0191
   \   0DAB            ?0190:
    655                        ERROR(2);
   \   0DAB  E4                CLR     A
   \   0DAC  FD                MOV     R5,A
   \   0DAD  7C02              MOV     R4,#2
   \   0DAF  120000            LCALL   $REFFN ERROR
   \   0DB2            ?0191:
   \   0DB2            ?0186:
   \   0DB2            ?0184:
    656             }
    657          
    658          /*printf("the test is compleate");*/
    659          }
   \   0DB2  80A0              SJMP    ?0181
   \   0DB4            gen_cs:
    660          /* end of main1*/
    661          
    662          
    663          void gen_cs(int x)   
    664          { 
    665          
    666          switch (x) {
   \   0DB4  900000            MOV     DPTR,#$LOCBX gen_cs
   \   0DB7  ED                MOV     A,R5
   \   0DB8  F0                MOVX    @DPTR,A
   \   0DB9  A3                INC     DPTR
   \   0DBA  EC                MOV     A,R4
   \   0DBB  F0                MOVX    @DPTR,A
   \   0DBC  EC                MOV     A,R4
   \   0DBD  120000            LCALL   ?AR5_SC_SWITCH_L05
   \   0DC0  0000              DW      0
   \   0DC2  0F                DB      15
                                              - fem -                                      Page   37

   \   0DC3  0ECC              DW      ?0192
   \   0DC5  0DE5              DW      ?0193
   \   0DC7  0DF4              DW      ?0194
   \   0DC9  0E03              DW      ?0195
   \   0DCB  0E12              DW      ?0196
   \   0DCD  0E21              DW      ?0197
   \   0DCF  0E30              DW      ?0198
   \   0DD1  0E3F              DW      ?0199
   \   0DD3  0E4E              DW      ?0200
   \   0DD5  0E5C              DW      ?0201
   \   0DD7  0E6A              DW      ?0202
   \   0DD9  0E78              DW      ?0203
   \   0DDB  0E86              DW      ?0204
   \   0DDD  0E94              DW      ?0205
   \   0DDF  0EA2              DW      ?0206
   \   0DE1  0EB0              DW      ?0207
   \   0DE3  0EBE              DW      ?0208
   \   0DE5            ?0193:
    667          
    668                  case 0: (* (char xdata *) 0xfefd) = 0xfe;   /* chip select 0*/
   \   0DE5  74FE              MOV     A,#254
   \   0DE7  90FEFD            MOV     DPTR,#65277
   \   0DEA  F0                MOVX    @DPTR,A
    669                          (* (char xdata *) 0xfefd) = 0xff;   /* clear        */
   \   0DEB  74FF              MOV     A,#255
   \   0DED  90FEFD            MOV     DPTR,#65277
   \   0DF0  F0                MOVX    @DPTR,A
    670                          break;
   \   0DF1  020ECC            LJMP    ?0192
   \   0DF4            ?0194:
    671                  case 1: (* (char xdata *) 0xfefd) = 0xfd;   /* chip select 1*/
   \   0DF4  74FD              MOV     A,#253
   \   0DF6  90FEFD            MOV     DPTR,#65277
   \   0DF9  F0                MOVX    @DPTR,A
    672                          (* (char xdata *) 0xfefd) = 0xff;   /* clear        */
   \   0DFA  74FF              MOV     A,#255
   \   0DFC  90FEFD            MOV     DPTR,#65277
   \   0DFF  F0                MOVX    @DPTR,A
    673                          break;
   \   0E00  020ECC            LJMP    ?0192
   \   0E03            ?0195:
    674                  case 2: (* (char xdata *) 0xfefd) = 0xfb;   /* chip select 2*/
   \   0E03  74FB              MOV     A,#251
   \   0E05  90FEFD            MOV     DPTR,#65277
   \   0E08  F0                MOVX    @DPTR,A
    675                          (* (char xdata *) 0xfefd) = 0xff;   /* clear        */
   \   0E09  74FF              MOV     A,#255
   \   0E0B  90FEFD            MOV     DPTR,#65277
   \   0E0E  F0                MOVX    @DPTR,A
    676                          break;
   \   0E0F  020ECC            LJMP    ?0192
   \   0E12            ?0196:
    677                  case 3: (* (char xdata *) 0xfefd) = 0xf7;   /* chip select 3*/
   \   0E12  74F7              MOV     A,#247
   \   0E14  90FEFD            MOV     DPTR,#65277
   \   0E17  F0                MOVX    @DPTR,A
    678                          (* (char xdata *) 0xfefd) = 0xff;   /* clear        */
   \   0E18  74FF              MOV     A,#255
   \   0E1A  90FEFD            MOV     DPTR,#65277
   \   0E1D  F0                MOVX    @DPTR,A
    679                          break;
   \   0E1E  020ECC            LJMP    ?0192
   \   0E21            ?0197:
    680                  case 4: (* (char xdata *) 0xfefd) = 0xef;   /* chip select 4*/
   \   0E21  74EF              MOV     A,#239
   \   0E23  90FEFD            MOV     DPTR,#65277
   \   0E26  F0                MOVX    @DPTR,A
    681                          (* (char xdata *) 0xfefd) = 0xff;   /* clear        */
   \   0E27  74FF              MOV     A,#255
   \   0E29  90FEFD            MOV     DPTR,#65277
   \   0E2C  F0                MOVX    @DPTR,A
    682                          break;
   \   0E2D  020ECC            LJMP    ?0192
   \   0E30            ?0198:
    683                  case 5: (* (char xdata *) 0xfefd) = 0xdf;   /* chip select 5*/
   \   0E30  74DF              MOV     A,#223
   \   0E32  90FEFD            MOV     DPTR,#65277
   \   0E35  F0                MOVX    @DPTR,A
    684                          (* (char xdata *) 0xfefd) = 0xff;   /* clear        */
   \   0E36  74FF              MOV     A,#255
   \   0E38  90FEFD            MOV     DPTR,#65277
   \   0E3B  F0                MOVX    @DPTR,A
    685                          break;
   \   0E3C  020ECC            LJMP    ?0192
   \   0E3F            ?0199:
    686                  case 6: (* (char xdata *) 0xfefd) = 0xbf;   /* chip select 6*/
                                              - fem -                                      Page   38

   \   0E3F  74BF              MOV     A,#191
   \   0E41  90FEFD            MOV     DPTR,#65277
   \   0E44  F0                MOVX    @DPTR,A
    687                          (* (char xdata *) 0xfefd) = 0xff;   /* clear        */
   \   0E45  74FF              MOV     A,#255
   \   0E47  90FEFD            MOV     DPTR,#65277
   \   0E4A  F0                MOVX    @DPTR,A
    688                          break;
   \   0E4B  020ECC            LJMP    ?0192
   \   0E4E            ?0200:
    689                  case 7: (* (char xdata *) 0xfefd) = 0x7f;   /* chip select 7*/
   \   0E4E  747F              MOV     A,#127
   \   0E50  90FEFD            MOV     DPTR,#65277
   \   0E53  F0                MOVX    @DPTR,A
    690                          (* (char xdata *) 0xfefd) = 0xff;   /* clear        */
   \   0E54  74FF              MOV     A,#255
   \   0E56  90FEFD            MOV     DPTR,#65277
   \   0E59  F0                MOVX    @DPTR,A
    691                          break;
   \   0E5A  8070              SJMP    ?0192
   \   0E5C            ?0201:
    692          
    693                  case 8: (* (char xdata *) 0xfefe) = 0xfe;   /* chip select 8*/
   \   0E5C  74FE              MOV     A,#254
   \   0E5E  90FEFE            MOV     DPTR,#65278
   \   0E61  F0                MOVX    @DPTR,A
    694                          (* (char xdata *) 0xfefe) = 0xff;   /* clear        */
   \   0E62  74FF              MOV     A,#255
   \   0E64  90FEFE            MOV     DPTR,#65278
   \   0E67  F0                MOVX    @DPTR,A
    695                          break;
   \   0E68  8062              SJMP    ?0192
   \   0E6A            ?0202:
    696                  case 9: (* (char xdata *) 0xfefe) = 0xfd;   /* chip select 9*/
   \   0E6A  74FD              MOV     A,#253
   \   0E6C  90FEFE            MOV     DPTR,#65278
   \   0E6F  F0                MOVX    @DPTR,A
    697                          (* (char xdata *) 0xfefe) = 0xff;   /* clear        */
   \   0E70  74FF              MOV     A,#255
   \   0E72  90FEFE            MOV     DPTR,#65278
   \   0E75  F0                MOVX    @DPTR,A
    698                          break;
   \   0E76  8054              SJMP    ?0192
   \   0E78            ?0203:
    699                  case 10: (* (char xdata *) 0xfefe) = 0xfb;   /* chip select 10*/
   \   0E78  74FB              MOV     A,#251
   \   0E7A  90FEFE            MOV     DPTR,#65278
   \   0E7D  F0                MOVX    @DPTR,A
    700                           (* (char xdata *) 0xfefe) = 0xff;   /* clear       */
   \   0E7E  74FF              MOV     A,#255
   \   0E80  90FEFE            MOV     DPTR,#65278
   \   0E83  F0                MOVX    @DPTR,A
    701                           break;
   \   0E84  8046              SJMP    ?0192
   \   0E86            ?0204:
    702                  case 11: (* (char xdata *) 0xfefe) = 0xf7;   /* chip select 11*/
   \   0E86  74F7              MOV     A,#247
   \   0E88  90FEFE            MOV     DPTR,#65278
   \   0E8B  F0                MOVX    @DPTR,A
    703                           (* (char xdata *) 0xfefe) = 0xff;   /* clear       */
   \   0E8C  74FF              MOV     A,#255
   \   0E8E  90FEFE            MOV     DPTR,#65278
   \   0E91  F0                MOVX    @DPTR,A
    704                           break;
   \   0E92  8038              SJMP    ?0192
   \   0E94            ?0205:
    705                  case 12: (* (char xdata *) 0xfefe) = 0xef;   /* chip select 12*/
   \   0E94  74EF              MOV     A,#239
   \   0E96  90FEFE            MOV     DPTR,#65278
   \   0E99  F0                MOVX    @DPTR,A
    706                           (* (char xdata *) 0xfefe) = 0xff;   /* clear       */
   \   0E9A  74FF              MOV     A,#255
   \   0E9C  90FEFE            MOV     DPTR,#65278
   \   0E9F  F0                MOVX    @DPTR,A
    707                           break;
   \   0EA0  802A              SJMP    ?0192
   \   0EA2            ?0206:
    708                  case 13: (* (char xdata *) 0xfefe) = 0xdf;   /* chip select 13*/
   \   0EA2  74DF              MOV     A,#223
   \   0EA4  90FEFE            MOV     DPTR,#65278
   \   0EA7  F0                MOVX    @DPTR,A
    709                           (* (char xdata *) 0xfefe) = 0xff;   /* clear       */
   \   0EA8  74FF              MOV     A,#255
   \   0EAA  90FEFE            MOV     DPTR,#65278
   \   0EAD  F0                MOVX    @DPTR,A
    710                           break;
                                              - fem -                                      Page   39

   \   0EAE  801C              SJMP    ?0192
   \   0EB0            ?0207:
    711                  case 14: (* (char xdata *) 0xfefe) = 0xbf;   /* chip select 14*/
   \   0EB0  74BF              MOV     A,#191
   \   0EB2  90FEFE            MOV     DPTR,#65278
   \   0EB5  F0                MOVX    @DPTR,A
    712                           (* (char xdata *) 0xfefe) = 0xff;   /* clear       */
   \   0EB6  74FF              MOV     A,#255
   \   0EB8  90FEFE            MOV     DPTR,#65278
   \   0EBB  F0                MOVX    @DPTR,A
    713                           break;
   \   0EBC  800E              SJMP    ?0192
   \   0EBE            ?0208:
    714                  case 15: (* (char xdata *) 0xfefe) = 0x7f;   /* chip select 15*/
   \   0EBE  747F              MOV     A,#127
   \   0EC0  90FEFE            MOV     DPTR,#65278
   \   0EC3  F0                MOVX    @DPTR,A
    715                           (* (char xdata *) 0xfefe) = 0xff;   /* clear       */
   \   0EC4  74FF              MOV     A,#255
   \   0EC6  90FEFE            MOV     DPTR,#65278
   \   0EC9  F0                MOVX    @DPTR,A
    716                           break;
   \   0ECA  8000              SJMP    ?0192
   \   0ECC            ?0192:
    717              }
    718          }
   \   0ECC  22                RET
   \   0ECD            testsend:
    719          
    720          
    721          void  testsend(int x)
    722          {
    723               int count,i,ii,dlen;
    724               count = 0; 
   \   0ECD  900000            MOV     DPTR,#$LOCBX testsend
   \   0ED0  E4                CLR     A
   \   0ED1  F0                MOVX    @DPTR,A
   \   0ED2  A3                INC     DPTR
   \   0ED3  F0                MOVX    @DPTR,A
    725                                   /* calculate the number of bytes to send */
    726               dlen =9;
   \   0ED4  900000            MOV     DPTR,#$LOCBX testsend+6
   \   0ED7  E4                CLR     A
   \   0ED8  F0                MOVX    @DPTR,A
   \   0ED9  A3                INC     DPTR
   \   0EDA  7409              MOV     A,#9
   \   0EDC  F0                MOVX    @DPTR,A
    727               HOPDATA[DLEN] =   (USIGN8) ((0xFF00 & dlen) >> 8);
   \   0EDD  E4                CLR     A
   \   0EDE  FF                MOV     R7,A
   \   0EDF  900000            MOV     DPTR,#$LOCBX testsend+6
   \   0EE2  E0                MOVX    A,@DPTR
   \   0EE3  CF                XCH     A,R7
   \   0EE4  EF                MOV     A,R7
   \   0EE5  7F00              MOV     R7,#0
   \   0EE7  905FFE            MOV     DPTR,#24574
   \   0EEA  F0                MOVX    @DPTR,A
    728               HOPDATA[DLEN+1] = (USIGN8) (0x00FF & dlen);
   \   0EEB  900000            MOV     DPTR,#$LOCBX testsend+7
   \   0EEE  E0                MOVX    A,@DPTR
   \   0EEF  7F00              MOV     R7,#0
   \   0EF1  905FFF            MOV     DPTR,#24575
   \   0EF4  F0                MOVX    @DPTR,A
    729               HOPDATA[CMD] = (USIGN8) x;
   \   0EF5  900000            MOV     DPTR,#$LOCBX testsend+8
   \   0EF8  ED                MOV     A,R5
   \   0EF9  F0                MOVX    @DPTR,A
   \   0EFA  A3                INC     DPTR
   \   0EFB  EC                MOV     A,R4
   \   0EFC  F0                MOVX    @DPTR,A
   \   0EFD  EC                MOV     A,R4
   \   0EFE  905FF9            MOV     DPTR,#24569
   \   0F01  F0                MOVX    @DPTR,A
    730               HOPDATA[NODEID] = arc51_nodeid;
   \   0F02  900000            MOV     DPTR,#arc51_nodeid
   \   0F05  E0                MOVX    A,@DPTR
   \   0F06  905FF8            MOV     DPTR,#24568
   \   0F09  F0                MOVX    @DPTR,A
    731               HOPDATA[8] = 0x03;
   \   0F0A  7403              MOV     A,#3
   \   0F0C  906000            MOV     DPTR,#24576
   \   0F0F  F0                MOVX    @DPTR,A
   \   0F10            ?0210:
    732               while (dlen > count)
   \   0F10  900000            MOV     DPTR,#$LOCBX testsend+6
   \   0F13  E0                MOVX    A,@DPTR
                                              - fem -                                      Page   40

   \   0F14  FD                MOV     R5,A
   \   0F15  A3                INC     DPTR
   \   0F16  E0                MOVX    A,@DPTR
   \   0F17  FC                MOV     R4,A
   \   0F18  900000            MOV     DPTR,#$LOCBX testsend+1
   \   0F1B  E0                MOVX    A,@DPTR
   \   0F1C  C3                CLR     C
   \   0F1D  9C                SUBB    A,R4
   \   0F1E  900000            MOV     DPTR,#$LOCBX testsend
   \   0F21  E0                MOVX    A,@DPTR
   \   0F22  6480              XRL     A,#128
   \   0F24  CD                XCH     A,R5
   \   0F25  6480              XRL     A,#128
   \   0F27  CD                XCH     A,R5
   \   0F28  9D                SUBB    A,R5
   \   0F29  4003              JC      $+5
   \   0F2B  021041            LJMP    ?0209
   \   0F2E            ?0211:
    733               {
    734                  i= 0;
   \   0F2E  900000            MOV     DPTR,#$LOCBX testsend+2
   \   0F31  E4                CLR     A
   \   0F32  F0                MOVX    @DPTR,A
   \   0F33  A3                INC     DPTR
   \   0F34  F0                MOVX    @DPTR,A
   \   0F35            ?0213:
    735          
    736                                  /* break up the hopper memory into packets */
    737                  while ((i < PKT_size) && (dlen > count))  
   \   0F35  C3                CLR     C
   \   0F36  900000            MOV     DPTR,#$LOCBX testsend+3
   \   0F39  E0                MOVX    A,@DPTR
   \   0F3A  94F4              SUBB    A,#244
   \   0F3C  900000            MOV     DPTR,#$LOCBX testsend+2
   \   0F3F  E0                MOVX    A,@DPTR
   \   0F40  6480              XRL     A,#128
   \   0F42  9481              SUBB    A,#129
   \   0F44  5060              JNC     ?0212
   \   0F46  900000            MOV     DPTR,#$LOCBX testsend+6
   \   0F49  E0                MOVX    A,@DPTR
   \   0F4A  FD                MOV     R5,A
   \   0F4B  A3                INC     DPTR
   \   0F4C  E0                MOVX    A,@DPTR
   \   0F4D  FC                MOV     R4,A
   \   0F4E  900000            MOV     DPTR,#$LOCBX testsend+1
   \   0F51  E0                MOVX    A,@DPTR
   \   0F52  C3                CLR     C
   \   0F53  9C                SUBB    A,R4
   \   0F54  900000            MOV     DPTR,#$LOCBX testsend
   \   0F57  E0                MOVX    A,@DPTR
   \   0F58  6480              XRL     A,#128
   \   0F5A  CD                XCH     A,R5
   \   0F5B  6480              XRL     A,#128
   \   0F5D  CD                XCH     A,R5
   \   0F5E  9D                SUBB    A,R5
   \   0F5F  5045              JNC     ?0212
   \   0F61            ?0216:
   \   0F61            ?0215:
   \   0F61            ?0214:
    738                  {
    739                   userbuf[i] = HOPDATA[count];
   \   0F61  900000            MOV     DPTR,#$LOCBX testsend+1
   \   0F64  E0                MOVX    A,@DPTR
   \   0F65  24F8              ADD     A,#248
   \   0F67  FC                MOV     R4,A
   \   0F68  900000            MOV     DPTR,#$LOCBX testsend
   \   0F6B  E0                MOVX    A,@DPTR
   \   0F6C  345F              ADDC    A,#95
   \   0F6E  8C82              MOV     DPL,R4
   \   0F70  F583              MOV     DPH,A
   \   0F72  E0                MOVX    A,@DPTR
   \   0F73  FE                MOV     R6,A
   \   0F74  900000            MOV     DPTR,#$LOCBX testsend+3
   \   0F77  E0                MOVX    A,@DPTR
   \   0F78  240C              ADD     A,#LOW(userbuf)
   \   0F7A  FC                MOV     R4,A
   \   0F7B  900000            MOV     DPTR,#$LOCBX testsend+2
   \   0F7E  E0                MOVX    A,@DPTR
   \   0F7F  3402              ADDC    A,#HIGH(userbuf)
   \   0F81  FD                MOV     R5,A
   \   0F82  EE                MOV     A,R6
   \   0F83  8C82              MOV     DPL,R4
   \   0F85  8D83              MOV     DPH,R5
   \   0F87  F0                MOVX    @DPTR,A
    740                   count++;
   \   0F88  900000            MOV     DPTR,#$LOCBX testsend+1
                                              - fem -                                      Page   41

   \   0F8B  E0                MOVX    A,@DPTR
   \   0F8C  04                INC     A
   \   0F8D  F0                MOVX    @DPTR,A
   \   0F8E  900000            MOV     DPTR,#$LOCBX testsend
   \   0F91  7003              JNZ     ?0257
   \   0F93  E0                MOVX    A,@DPTR
   \   0F94  04                INC     A
   \   0F95  F0                MOVX    @DPTR,A
   \   0F96            ?0257:
    741                   i++;
   \   0F96  900000            MOV     DPTR,#$LOCBX testsend+3
   \   0F99  E0                MOVX    A,@DPTR
   \   0F9A  04                INC     A
   \   0F9B  F0                MOVX    @DPTR,A
   \   0F9C  900000            MOV     DPTR,#$LOCBX testsend+2
   \   0F9F  7003              JNZ     ?0258
   \   0FA1  E0                MOVX    A,@DPTR
   \   0FA2  04                INC     A
   \   0FA3  F0                MOVX    @DPTR,A
   \   0FA4            ?0258:
   \   0FA4  808F              SJMP    ?0213
   \   0FA6            ?0212:
    742                  }
    743                  buf[0] = 0x00;
   \   0FA6  7400              MOV     A,#0
   \   0FA8  90000C            MOV     DPTR,#buf
   \   0FAB  F0                MOVX    @DPTR,A
    744                  buf[1] = 0x00;
   \   0FAC  7400              MOV     A,#0
   \   0FAE  90000D            MOV     DPTR,#buf+1
   \   0FB1  F0                MOVX    @DPTR,A
    745                  buf[2] = 0;
   \   0FB2  7400              MOV     A,#0
   \   0FB4  90000E            MOV     DPTR,#buf+2
   \   0FB7  F0                MOVX    @DPTR,A
    746                  buf[3] = i;
   \   0FB8  900000            MOV     DPTR,#$LOCBX testsend+3
   \   0FBB  E0                MOVX    A,@DPTR
   \   0FBC  90000F            MOV     DPTR,#buf+3
   \   0FBF  F0                MOVX    @DPTR,A
    747                  if ( i >=256) buf[2] =1;        /* for long packet */
   \   0FC0  900000            MOV     DPTR,#$LOCBX testsend+2
   \   0FC3  E0                MOVX    A,@DPTR
   \   0FC4  6480              XRL     A,#128
   \   0FC6  C3                CLR     C
   \   0FC7  9481              SUBB    A,#129
   \   0FC9  4006              JC      ?0218
   \   0FCB            ?0217:
   \   0FCB  7401              MOV     A,#1
   \   0FCD  90000E            MOV     DPTR,#buf+2
   \   0FD0  F0                MOVX    @DPTR,A
   \   0FD1            ?0218:
    748                  for(ii=0;ii<i;ii++) buf[4+ii] = userbuf[ii];    
   \   0FD1  900000            MOV     DPTR,#$LOCBX testsend+4
   \   0FD4  E4                CLR     A
   \   0FD5  F0                MOVX    @DPTR,A
   \   0FD6  A3                INC     DPTR
   \   0FD7  F0                MOVX    @DPTR,A
   \   0FD8            ?0220:
   \   0FD8  900000            MOV     DPTR,#$LOCBX testsend+4
   \   0FDB  E0                MOVX    A,@DPTR
   \   0FDC  FD                MOV     R5,A
   \   0FDD  A3                INC     DPTR
   \   0FDE  E0                MOVX    A,@DPTR
   \   0FDF  FC                MOV     R4,A
   \   0FE0  900000            MOV     DPTR,#$LOCBX testsend+3
   \   0FE3  E0                MOVX    A,@DPTR
   \   0FE4  D3                SETB    C
   \   0FE5  9C                SUBB    A,R4
   \   0FE6  900000            MOV     DPTR,#$LOCBX testsend+2
   \   0FE9  E0                MOVX    A,@DPTR
   \   0FEA  6480              XRL     A,#128
   \   0FEC  CD                XCH     A,R5
   \   0FED  6480              XRL     A,#128
   \   0FEF  CD                XCH     A,R5
   \   0FF0  9D                SUBB    A,R5
   \   0FF1  4037              JC      ?0219
   \   0FF3            ?0221:
   \   0FF3  900000            MOV     DPTR,#$LOCBX testsend+4
   \   0FF6  E0                MOVX    A,@DPTR
   \   0FF7  FF                MOV     R7,A
   \   0FF8  A3                INC     DPTR
   \   0FF9  E0                MOVX    A,@DPTR
   \   0FFA  FE                MOV     R6,A
   \   0FFB  EF                MOV     A,R7
   \   0FFC  FD                MOV     R5,A
                                              - fem -                                      Page   42

   \   0FFD  EE                MOV     A,R6
   \   0FFE  240C              ADD     A,#LOW(userbuf)
   \   1000  F582              MOV     DPL,A
   \   1002  ED                MOV     A,R5
   \   1003  3402              ADDC    A,#HIGH(userbuf)
   \   1005  F583              MOV     DPH,A
   \   1007  E0                MOVX    A,@DPTR
   \   1008  CE                XCH     A,R6
   \   1009  FC                MOV     R4,A
   \   100A  CE                XCH     A,R6
   \   100B  CF                XCH     A,R7
   \   100C  FD                MOV     R5,A
   \   100D  CF                XCH     A,R7
   \   100E  FA                MOV     R2,A
   \   100F  EC                MOV     A,R4
   \   1010  2410              ADD     A,#LOW(buf+4)
   \   1012  F582              MOV     DPL,A
   \   1014  ED                MOV     A,R5
   \   1015  3400              ADDC    A,#HIGH(buf+4)
   \   1017  F583              MOV     DPH,A
   \   1019  EA                MOV     A,R2
   \   101A  F0                MOVX    @DPTR,A
   \   101B  0E                INC     R6
   \   101C  EE                MOV     A,R6
   \   101D  7001              JNZ     ?0259
   \   101F  0F                INC     R7
   \   1020            ?0259:
   \   1020  900000            MOV     DPTR,#$LOCBX testsend+4
   \   1023  EF                MOV     A,R7
   \   1024  F0                MOVX    @DPTR,A
   \   1025  A3                INC     DPTR
   \   1026  EE                MOV     A,R6
   \   1027  F0                MOVX    @DPTR,A
   \   1028  80AE              SJMP    ?0220
   \   102A            ?0219:
    749                  i = arc51_write(&buf[0]);
   \   102A  7D0C              MOV     R5,#LOW(buf)
   \   102C  7E00              MOV     R6,#HIGH(buf)
   \   102E  7F01              MOV     R7,#1
   \   1030  120000            LCALL   $REFFN arc51_write
   \   1033  EC                MOV     A,R4
   \   1034  7D00              MOV     R5,#0
   \   1036  900000            MOV     DPTR,#$LOCBX testsend+2
   \   1039  CD                XCH     A,R5
   \   103A  F0                MOVX    @DPTR,A
   \   103B  A3                INC     DPTR
   \   103C  CD                XCH     A,R5
   \   103D  F0                MOVX    @DPTR,A
    750               }
    751          }
   \   103E  020F10            LJMP    ?0210
   \   1041            ?0209:
   \   1041  22                RET
   \   0000                    RSEG    CSTR
   \   0000            ?0121:
   \   0000  696E6974          DB      'init ok',0
   \   0004  206F6B00
   \   0008            ?0123:
   \   0008  6572726F          DB      'error',0
   \   000C  7200
   \   000E            ?0141:
   \   000E  0A3C2D2D          DB      10,'<--------------------------------->',10,0
   \   0012  2D2D2D2D
   \   0016  2D2D2D2D
   \   001A  2D2D2D2D
   \   001E  2D2D2D2D
   \   0022  2D2D2D2D
   \   0026  2D2D2D2D
   \   002A  2D2D2D2D
   \   002E  2D2D2D3E
   \   0032  0A00
   \   0034            ?0142:
   \   0034  3C202020          DB      '<             BNL  (BOOT)         >',10,0
   \   0038  20202020
   \   003C  20202020
   \   0040  2020424E
   \   0044  4C202028
   \   0048  424F4F54
   \   004C  29202020
   \   0050  20202020
   \   0054  20203E0A
   \   0058  00
   \   0059            ?0143:
   \   0059  3C202020          DB      '<            FEM.C  ver .99       >',10,0
   \   005D  20202020
   \   0061  20202020
                                              - fem -                                      Page   43

   \   0065  2046454D
   \   0069  2E432020
   \   006D  76657220
   \   0071  2E393920
   \   0075  20202020
   \   0079  20203E0A
   \   007D  00
   \   007E            ?0144:
   \   007E  3C202020          DB      '<           TEST ROUTINE          >',10,0
   \   0082  20202020
   \   0086  20202020
   \   008A  54455354
   \   008E  20524F55
   \   0092  54494E45
   \   0096  20202020
   \   009A  20202020
   \   009E  20203E0A
   \   00A2  00
   \   00A3            ?0145:
   \   00A3  3C2D2D2D          DB      '<--------------------------------->',10,0
   \   00A7  2D2D2D2D
   \   00AB  2D2D2D2D
   \   00AF  2D2D2D2D
   \   00B3  2D2D2D2D
   \   00B7  2D2D2D2D
   \   00BB  2D2D2D2D
   \   00BF  2D2D2D2D
   \   00C3  2D2D3E0A
   \   00C7  00
   \   00C8            ?0146:
   \   00C8  0A20204E          DB      10,'  NODE 2 test routine starting',10,' ',0
   \   00CC  4F444520
   \   00D0  32207465
   \   00D4  73742072
   \   00D8  6F757469
   \   00DC  6E652073
   \   00E0  74617274
   \   00E4  696E670A
   \   00E8  2000
   \   00EA            ?0147:
   \   00EA  20676F74          DB      ' got in the user program',10,10,0
   \   00EE  20696E20
   \   00F2  74686520
   \   00F6  75736572
   \   00FA  2070726F
   \   00FE  6772616D
   \   0102  0A0A00
   \   0105            ?0148:
   \   0105  20307837          DB      ' 0x77--> %x    ',10,0
   \   0109  372D2D3E
   \   010D  20257820
   \   0111  2020200A
   \   0115  00
   \   0116            ?0151:
   \   0116  20307835          DB      ' 0x55 --> %x    ',10,0
   \   011A  35202D2D
   \   011E  3E202578
   \   0122  20202020
   \   0126  0A00
   \   0128            ?0154:
   \   0128  20307833          DB      ' 0x33 --> %x    ',10,0
   \   012C  33202D2D
   \   0130  3E202578
   \   0134  20202020
   \   0138  0A00
   \   013A            ?0157:
   \   013A  20307834          DB      ' 0x44 --> %x    ',10,0
   \   013E  34202D2D
   \   0142  3E202578
   \   0146  20202020
   \   014A  0A00
   \   014C            ?0160:
   \   014C  20307861          DB      ' 0xaa --> %x    ',10,0
   \   0150  61202D2D
   \   0154  3E202578
   \   0158  20202020
   \   015C  0A00
   \   015E            ?0163:
   \   015E  20307830          DB      ' 0x00 --> %x    ',10,0
   \   0162  30202D2D
   \   0166  3E202578
   \   016A  20202020
   \   016E  0A00
   \   0170            ?0166:
   \   0170  20307866          DB      ' 0xff --> %x    ',10,0
   \   0174  66202D2D
                                              - fem -                                      Page   44

   \   0178  3E202578
   \   017C  20202020
   \   0180  0A00
   \   0182            ?0171:
   \   0182  0A206461          DB      10,' data and port check ok',10,0
   \   0186  74612061
   \   018A  6E642070
   \   018E  6F727420
   \   0192  63686563
   \   0196  6B206F6B
   \   019A  0A00
   \   0000                    RSEG    CONST
   \   0000            UFUN:
   \   0000  4000              DW      16384
   \   0002            SWRESET:
   \   0002  0000              DW      0
   \   0004            EPROG:
   \   0004  3800              DW      14336
   \   0000                    RSEG    X_UDATA
   \   0000            pckt:
   \   0007                    DS      7
   \   0007            FNP:
   \   000A                    DS      3
   \   000A            fblock:
   \   000C                    DS      2
   \   000C            buf:
   \   020C                    DS      512
   \   020C            userbuf:
   \   040C                    DS      512
   \   040C            temp:
   \   040E                    DS      2
   \   040E            ?0106:
   \   0410                    DS      2
   \   0410            ?0107:
   \   0412                    DS      2
   \   0412            ?0108:
   \   0414                    DS      2
   \   0000                    RSEG    X_IDATA
   \   0000            nid:
   \   0002                    DS      2
   \   0002            grpid:
   \   0004                    DS      2
   \   0000                    RSEG    X_CDATA
   \   0000  0015              DW      21
   \   0002  0000              DW      0
   \   0004                    END
                                              - fem -                                      Page   45

                                       S Y M B O L - T A B L E
                                       =======================


            #include file(s):

       [1]       fem.h
       [2]       c:\app\iar\inc\stdio.h
       [3]       c:\app\iar\inc\io51.h
       [4]       arc51.h


            Symbol                     Type     Mem     Class   Defline   Refline(s)
            ------                     ----     ---     -----   -------   ----------

?0121                                 array    code    static      520        520
?0123                                 array    code    static      522        522
?0141                                 array    code    static      547        547
?0142                                 array    code    static      548        548
?0143                                 array    code    static      549        549
?0144                                 array    code    static      550        550
?0145                                 array    code    static      551        551
?0146                                 array    code    static      555        555
?0147                                 array    code    static      577        577
?0148                                 array    code    static      585        585
?0151                                 array    code    static      588        588
?0154                                 array    code    static      591        591
?0157                                 array    code    static      594        594
?0160                                 array    code    static      597        597
?0163                                 array    code    static      600        600
?0166                                 array    code    static      603        603
?0171                                 array    code    static      610        610
AC                                      bit             ---       49:3  
ACC                                     sfr             ---       20:3  
B                                       sfr             ---       21:3  
CMD                                 #define             ---       55:1        152      281      335      345
                                                                              351      371      377      428
                                                                              449      729
CMD_WORD                             struct           typedef     49:1       51:1
CP_RL2                                  bit             ---      117:3  
CY                                      bit             ---       48:3  
C_T2                                    bit             ---      116:3  
DEF_RTN                             #define             ---       73:1        152
DEVTYPE                             #define             ---       56:1        283
DLEN                                #define             ---       58:1        181      182      285      285
                                                                              727      728
DPH                                     sfr             ---       24:3  
DPL                                     sfr             ---       23:3  
EA                                      bit             ---       69:3  
ECHO                                #define             ---       67:1        132      350      351
EPROG                                   int    code    public     80:1        327
ERR                                 #define             ---       59:1        129      286      337      347
                                                                              353      373      379      385
                                                                              430      432      452      454
                                                                              456      646
ERROR                              function    code    public      419         73      108      138      159
                                                                              246      266      322      331
                                                                              334      398     25:1      655
ES                                      bit             ---       71:3  
ET0                                     bit             ---       74:3  
ET1                                     bit             ---       72:3  
ET2                                     bit             ---       70:3  
EX0                                     bit             ---       75:3  
EX1                                     bit             ---       73:3  
EXEN2                                   bit             ---      114:3  
EXF2                                    bit             ---      111:3  
E_OK                                #define             ---      100:4        105      127      134      250
                                                                              269      516      644
F0                                      bit             ---       50:3  
FEM_VER                             #define             ---       71:1        376
FNP                                 pointer   xdata    public     77:1        154      154      327      327
                                                                              342      342      393      393
                                                                              422      423
FPROG                               #define             ---       36:1        302      302
GET_PRG                             #define             ---       72:1        383
GRPCMD                              #define             ---       57:1        128      128      284      645
                                                                              645
GUF                                 #define             ---       33:1         72       73       74       75
                                                                              123      140      149      161
                                                                              321      322
HOPDATA                             #define             ---       32:1         77      152      153      181
                                                                              182      191      236      257
                                                                              335      336      337      338
                                                                              345      346      347      351
                                                                              352      353      371      372
                                                                              373      377      378      379
                                              - fem -                                      Page   46

                                                                              380      384      385      387
                                                                              428      429      430      432
                                                                              449      450      452      454
                                                                              456      727      728      729
                                                                              730      731      739
IE                                      sfr             ---       32:3  
IE0                                     bit             ---       64:3  
IE1                                     bit             ---       62:3  
INP                                function    code    extern    203:4        358      365
INT0                                    bit             ---       93:3  
INT1                                    bit             ---       92:3  
IP                                      sfr             ---       33:3  
IT0                                     bit             ---       65:3  
IT1                                     bit             ---       63:3  
MEMORY_ATTRIBUTE                    #define             ---       38:2       41:2     42:2     43:2     44:2
                                                                             45:2     46:2     47:2     48:2
NET_MAP                             #define             ---       70:1        370      371      377
NEW_CODE                            #define             ---       64:1        325
NODEID                              #define             ---      127:4        128      153      282      336
                                                                              346      352      372      378
                                                                              384      429      450      645
                                                                              730
OUTP                               function    code    extern    208:4        360      361      367      368
OV                                      bit             ---       53:3  
P                                       bit             ---       54:3  
P0                                      sfr             ---       15:3  
P1                                      sfr             ---       16:3        565      584      587      590
                                                                              593      596      599      602
P2                                      sfr             ---       17:3  
P3                                      sfr             ---       18:3        531      535      539      543
                                                                              564      568      569      624
                                                                              625      626      637      638
                                                                              651      652
PCON                                    sfr             ---       25:3        508
PGB                                 #define             ---       37:1        150      328      391
PKT_size                            #define             ---         35        189      737
PRG_ROM                             #define             ---       84:1        327
PS                                      bit             ---       80:3  
PSW                                     sfr             ---       19:3  
PT0                                     bit             ---       83:3  
PT1                                     bit             ---       81:3  
PT2                                     bit             ---       79:3  
PUB                                 #define             ---       53:1        128      645
PX0                                     bit             ---       84:3  
PX1                                     bit             ---       82:3  
RB8                                     bit             ---      104:3  
RCAP2H                                  sfr             ---       38:3  
RCAP2L                                  sfr             ---       37:3  
RCLK                                    bit             ---      112:3  
RD                                      bit             ---       88:3  
REN                                     bit             ---      102:3  
RESET_SW                            #define             ---       65:1        341
RESPOND                             #define             ---       66:1        344      345
RI                                      bit             ---      106:3  
RS0                                     bit             ---       52:3  
RS1                                     bit             ---       51:3  
RXD                                     bit             ---       95:3  
SBUF                                    sfr             ---       35:3  
SCON                                    sfr             ---       34:3        510
SETUP_REG                           #define             ---       56:4        359
SM0                                     bit             ---       99:3  
SM1                                     bit             ---      100:3  
SM2                                     bit             ---      101:3  
SP                                      sfr             ---       22:3  
SUB_AD                              #define             ---       58:4        359
SWRESET                                 int    code    public     79:1        342      422
SW_RESET                            #define             ---       83:1        342
T0                                      bit             ---       91:3  
T1                                      bit             ---       90:3  
T2CON                                   sfr             ---       36:3  
TB8                                     bit             ---      103:3  
TCLK                                    bit             ---      113:3  
TCON                                    sfr             ---       26:3        512
TF0                                     bit             ---       60:3  
TF1                                     bit             ---       58:3  
TF2                                     bit             ---      110:3  
TH0                                     sfr             ---       30:3  
TH1                                     sfr             ---       31:3        509
TH2                                     sfr             ---       40:3  
TI                                      bit             ---      105:3  
TL0                                     sfr             ---       28:3  
TL1                                     sfr             ---       29:3  
TL2                                     sfr             ---       39:3  
TMOD                                    sfr             ---       27:3        511
TOKEN_OFF                           #define             ---       68:1        356
TOKEN_ON                            #define             ---       69:1        363
                                              - fem -                                      Page   47

TR0                                     bit             ---       61:3  
TR1                                     bit             ---       59:3  
TR2                                     bit             ---      115:3  
TXD                                     bit             ---       94:3  
TXEN                                #define             ---       68:4        359      366
UFUN                                    int    code    public     78:1        154      393
USIGN16                             #define             ---       97:4         44       45       47      175
                                                                              316      317
USIGN8                              #define             ---       96:4      199:4    200:4    200:4    201:4
                                                                            201:4    202:4    203:4    203:4
                                                                            205:4    205:4    205:4    205:4
                                                                            205:4    208:4    208:4     43:1
                                                                             44:1     45:1     46:1     48:1
                                                                               46       54       55       77
                                                                              152      153      181      181
                                                                              182      182      191      236
                                                                              257      318      335      336
                                                                              337      338      345      346
                                                                              347      351      352      353
                                                                              358      359      365      366
                                                                              371      372      373      377
                                                                              378      379      380      384
                                                                              385      387      428      429
                                                                              430      432      449      450
                                                                              452      454      456      727
                                                                              727      728      728      729
                                                                              729      730      731      739
USR_FUNC                            #define             ---       85:1        154      393
VOID                                #define             ---       95:4      204:4    205:4    206:4    207:4
                                                                            208:4
WR                                      bit             ---       89:3  
__TID__                             #define             ---          0       50:2
arc51_init                         function    code    extern    199:4        104      515
arc51_nodeid                           char   xdata    extern       46         94      100      450      451
                                                                              730
arc51_port                            u_int   xdata    extern       44         47
arc51_read                         function    code    extern    200:4        127      249      644
arc51_swport                          u_int   xdata    extern       45  
arc51_write                        function    code    extern    201:4        201      749
buf                                   array   xdata    public       54        127      128      128      128
                                                                              129      195      196      197
                                                                              198      199      200      201
                                                                              213      214      236      249
                                                                              257      281      282      283
                                                                              284      285      285      286
                                                                              644      645      645      645
                                                                              646      743      744      745
                                                                              746      747      748      749
cmd_rec                            function    code    public      314        133      135     17:1
copy_code                          function    code    public      300       21:1      326
fblock                              pointer   xdata    public     81:1        154      154      327      327
                                                                              342      342      393      393
                                                                              423      424
gen_cs                             function    code    public      664        631     24:1
grpid                                   int   xdata    public       57         93       99      128      645
main                               function    code    public       69       15:1
mem_dump                           function    code    public      228        134     19:1
nid                                     int   xdata    public       56         90       93       94       96
                                                                               98       99      100      128
                                                                              153      336      346      352
                                                                              372      378      384      429
                                                                              451      645
node_wake                          function    code    public      447        106     22:1      518
pckt                                 struct   xdata    public     51:1        132      158      242      264
                                                                              281      282      283      284
                                                                              285      286      323      354
                                                                              397
pktsize                            function    code    public      211        232      253
printf                             function    code    extern     45:2        520      522      547      548
                                                                              549      550      551      555
                                                                              577      585      588      591
                                                                              594      597      600      603
                                                                              610
readback                           function    code    public      176         72     20:1      321      339
                                                                              348      354      374      381
                                                                              388      431      455
scan_net                           function    code    public      122        109     16:1
setup_pckt                         function    code    public      280        131     18:1
temp                                    int   xdata    public       58        231      234      236      236
                                                                              238      242      257      260
test_fun                           function    code    public      502        101     23:1
testsend                           function    code    public      722        640      648     27:1
time_out                           function    code    public      470        241      244      252     28:1
userbuf                               array   xdata    public       55        191      200      739      748

                                              - fem -                                      Page   48


Errors: none
Warnings: none
Code size: 4162
Constant size: 422
Static variable size: Data(0) Idata(0) Bit(0) Xdata(1048)

