//////////////////////////////////////////////////////////////////////////////
//                                                                           /
// IAR ARM ANSI C/C++ Compiler V4.11A/W32              20/Jul/2004  18:58:49 /
// Copyright 1999-2004 IAR Systems. All rights reserved.                     /
//                                                                           /
//    Cpu mode        =  arm                                                 /
//    Endian          =  little                                              /
//    Stack alignment =  4                                                   /
//    Source file     =  C:\medusa\sfpdiag.c                                 /
//    Command line    =  -I "C:\Program Files\IAR Systems\Embedded           /
//                       Workbench 4.0\ARM\INC\" -lc C:\medusa\Debug\List\   /
//                       -la C:\medusa\Debug\List\ -o C:\medusa\Debug\Obj\   /
//                       -s2 --no_cse --no_unroll --no_inline                /
//                       --no_code_motion --no_tbaa --no_clustering          /
//                       --no_scheduling --debug --cpu_mode arm --endian     /
//                       little --cpu ARM7TDMI-S --stack_align 4 -e --fpu    /
//                       None "-D_DLIB_CONFIG_FILE=C:\Program Files\IAR      /
//                       Systems\Embedded Workbench                          /
//                       4.0\ARM\LIB\dl4tpannl8n.h" C:\medusa\sfpdiag.c      /
//    List file       =  C:\medusa\Debug\List\sfpdiag.s79                    /
//                                                                           /
//                                                                           /
//////////////////////////////////////////////////////////////////////////////

        NAME sfpdiag

        RTMODEL "ARMv4M", "USED"
        RTMODEL "StackAlign4", "USED"
        RTMODEL "__cpu_mode", "__pcs__arm"
        RTMODEL "__data_model", "absolute"
        RTMODEL "__dlib_file_descriptor", "0"
        RTMODEL "__endian", "little"
        RTMODEL "__rt_version", "6"

        RSEG CSTACK:DATA:NOROOT(2)

??DataTable0 EQU 0
??DataTable1 EQU 0
??DataTable2 EQU 0
??DataTable5 EQU 0
        PUBWEAK ?init?tab?DATA_Z
        MULTWEAK __fMul??rA
        MULTWEAK __floatToDouble??rA
        MULTWEAK __longToFloat??rA
        MULTWEAK __ulongToFloat??rA
        MULTWEAK cliRegisterCommand??rA
        MULTWEAK clicharGetOutputBuffer??rA
        MULTWEAK clicharSendOutputBuffer??rA
        FUNCTION decodeDiagData,0203H
        LOCFRAME CSTACK, 20, STACK
        FUNCTION decodeDiagDataRaw,0203H
        LOCFRAME CSTACK, 8, STACK
        MULTWEAK i2cmasterGetData??rA
        MULTWEAK i2cmasterProbe??rA
        MULTWEAK i2cmasterReceive??rA
        MULTWEAK i2cmasterSendOne??rA
        MULTWEAK i2cswitchDisable??rA
        MULTWEAK i2cswitchSetBus??rA
        FUNCTION printMinSfpDiags,0203H
        LOCFRAME CSTACK, 80, STACK
        FUNCTION printSfpDiags,0203H
        LOCFRAME CSTACK, 32, STACK
        FUNCTION setupBus,0203H
        LOCFRAME CSTACK, 16, STACK
        MULTWEAK sfpProbe??rA
        PUBLIC sfpdiagGetDiags
        FUNCTION sfpdiagGetDiags,0203H
        LOCFRAME CSTACK, 16, STACK
        PUBLIC sfpdiagGetWavelength
        FUNCTION sfpdiagGetWavelength,0203H
        LOCFRAME CSTACK, 20, STACK
        FUNCTION sfpdiagHandler,0603H
        LOCFRAME CSTACK, 40, STACK
        PUBLIC sfpdiagInit
        FUNCTION sfpdiagInit,0203H
        LOCFRAME CSTACK, 12, STACK
        PUBLIC sfpdiagRetrieveInfo
        FUNCTION sfpdiagRetrieveInfo,0203H
        PUBLIC sfpdiagRetrieveInfoRaw
        FUNCTION sfpdiagRetrieveInfoRaw,0203H
        MULTWEAK sprintf??rA
        MULTWEAK strtol??rA
        
        CFI Names cfiNames0
        CFI StackFrame CFA R13 HUGEDATA
        CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
        CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, CPSR:32, R13:32
        CFI Resource R14:32, SPSR:32
        CFI VirtualResource ?RET:32
        CFI EndNames cfiNames0
        
        CFI Common cfiCommon0 Using cfiNames0
        CFI CodeAlign 4
        CFI DataAlign 4
        CFI ReturnAddress ?RET CODE
        CFI CFA R13+0
        CFI R0 Undefined
        CFI R1 Undefined
        CFI R2 Undefined
        CFI R3 Undefined
        CFI R4 SameValue
        CFI R5 SameValue
        CFI R6 SameValue
        CFI R7 SameValue
        CFI R8 SameValue
        CFI R9 SameValue
        CFI R10 SameValue
        CFI R11 SameValue
        CFI R12 Undefined
        CFI CPSR SameValue
        CFI R14 Undefined
        CFI SPSR SameValue
        CFI ?RET R14
        CFI EndCommon cfiCommon0
        
__fMul              SYMBOL "__fMul"
__floatToDouble     SYMBOL "__floatToDouble"
__longToFloat       SYMBOL "__longToFloat"
__ulongToFloat      SYMBOL "__ulongToFloat"
cliRegisterCommand  SYMBOL "cliRegisterCommand"
clicharGetOutputBuffer SYMBOL "clicharGetOutputBuffer"
clicharSendOutputBuffer SYMBOL "clicharSendOutputBuffer"
i2cmasterGetData    SYMBOL "i2cmasterGetData"
i2cmasterProbe      SYMBOL "i2cmasterProbe"
i2cmasterReceive    SYMBOL "i2cmasterReceive"
i2cmasterSendOne    SYMBOL "i2cmasterSendOne"
i2cswitchDisable    SYMBOL "i2cswitchDisable"
i2cswitchSetBus     SYMBOL "i2cswitchSetBus"
sfpProbe            SYMBOL "sfpProbe"
sprintf             SYMBOL "sprintf"
strtol              SYMBOL "strtol"
__fMul??rA          SYMBOL "??rA", __fMul
__floatToDouble??rA SYMBOL "??rA", __floatToDouble
__longToFloat??rA   SYMBOL "??rA", __longToFloat
__ulongToFloat??rA  SYMBOL "??rA", __ulongToFloat
cliRegisterCommand??rA SYMBOL "??rA", cliRegisterCommand
clicharGetOutputBuffer??rA SYMBOL "??rA", clicharGetOutputBuffer
clicharSendOutputBuffer??rA SYMBOL "??rA", clicharSendOutputBuffer
i2cmasterGetData??rA SYMBOL "??rA", i2cmasterGetData
i2cmasterProbe??rA  SYMBOL "??rA", i2cmasterProbe
i2cmasterReceive??rA SYMBOL "??rA", i2cmasterReceive
i2cmasterSendOne??rA SYMBOL "??rA", i2cmasterSendOne
i2cswitchDisable??rA SYMBOL "??rA", i2cswitchDisable
i2cswitchSetBus??rA SYMBOL "??rA", i2cswitchSetBus
sfpProbe??rA        SYMBOL "??rA", sfpProbe
sprintf??rA         SYMBOL "??rA", sprintf
strtol??rA          SYMBOL "??rA", strtol

        EXTERN __fMul
        FUNCTION __fMul,010202H
        EXTERN __floatToDouble
        FUNCTION __floatToDouble,0202H
        EXTERN __longToFloat
        FUNCTION __longToFloat,0202H
        EXTERN __ulongToFloat
        FUNCTION __ulongToFloat,0202H
        EXTERN cliRegisterCommand
        FUNCTION cliRegisterCommand,0202H
        EXTERN clicharGetOutputBuffer
        FUNCTION clicharGetOutputBuffer,0202H
        EXTERN clicharSendOutputBuffer
        FUNCTION clicharSendOutputBuffer,0202H
        EXTERN i2cmasterGetData
        FUNCTION i2cmasterGetData,0202H
        EXTERN i2cmasterProbe
        FUNCTION i2cmasterProbe,0202H
        EXTERN i2cmasterReceive
        FUNCTION i2cmasterReceive,0202H
        EXTERN i2cmasterSendOne
        FUNCTION i2cmasterSendOne,0202H
        EXTERN i2cswitchDisable
        FUNCTION i2cswitchDisable,0202H
        EXTERN i2cswitchSetBus
        FUNCTION i2cswitchSetBus,0202H
        EXTERN sfpProbe
        FUNCTION sfpProbe,0202H
        EXTERN sprintf
        FUNCTION sprintf,010202H
        EXTERN strtol
        FUNCTION strtol,010202H


        RSEG DATA_Z:DATA:SORT:NOROOT(2)
sfpDiagInfo:
        DS8 96

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
sfpDiagInfoRaw:
        DS8 48

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
wavelength:
        DS8 8

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function sfpdiagInit
   CODE32      
sfpdiagInit:
   STMDB       SP!,{R4,LR}        ;; Push
        CFI ?RET Frame(CFA, -4)
        CFI R4 Frame(CFA, -8)
        CFI CFA R13+8
   SUB         SP,SP,#+0x4
        CFI CFA R13+12
   LDR         R2,??sfpdiagInit_0  ;; `?<Constant "get SFP diagnostic in...">`
   LDR         R1,??sfpdiagInit_0+4  ;; sfpdiagHandler
   LDR         R0,??sfpdiagInit_0+8  ;; `?<Constant "sfpdiag">`
   _BLF        cliRegisterCommand,cliRegisterCommand??rA
   MOV         R0,R4
   ADD         SP,SP,#+0x4        ;; stack cleaning
        CFI CFA R13+8
   LDMIA       SP!,{R4,PC}        ;; return
   DATA        
??sfpdiagInit_0:
   DC32        `?<Constant "get SFP diagnostic in...">`
   DC32        sfpdiagHandler
   DC32        `?<Constant "sfpdiag">`
        CFI EndBlock cfiBlock0

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
sfpDiagRawData:
        DS8 24

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function decodeDiagData
   CODE32      
decodeDiagData:
   STMDB       SP!,{R4-R6,LR}     ;; Push
        CFI ?RET Frame(CFA, -4)
        CFI R6 Frame(CFA, -8)
        CFI R5 Frame(CFA, -12)
        CFI R4 Frame(CFA, -16)
        CFI CFA R13+16
   SUB         SP,SP,#+0x4
        CFI CFA R13+20
   MOV         R4,R0
   MOV         R5,R1
   CMP         R4,#+0x0
   BEQ         ??decodeDiagData_0
   CMP         R5,#+0x0
   BEQ         ??decodeDiagData_0
   MOV         R0,#+0x0
   MOV         R6,R0
??decodeDiagData_1:
   CMP         R6,#+0x8
   BGE         ??decodeDiagData_0
   MOV         R2,#+0x2
   MLAS        R3,R2,R6,R4
   LDRB        R12,[R3, #+0]
   STRB        R12,[SP, #+1]
   MOV         R0,#+0x2
   MLAS        R1,R0,R6,R4
   LDRB        R2,[R1, #+1]
   STRB        R2,[SP, #+0]
   MOV         R3,R6
   CMP         R3,#+0x7
   BHI         ??decodeDiagData_2
   ADR         R12,`?<Jumptable for decodeDiagData>_0`
   LDRB        R12,[R12, R3]
   ADD         PC,PC,R12, LSL #+2
   DATA        
`?<Jumptable for decodeDiagData>_0`:
   DC8         +0x1,+0x9,+0x11,+0x19
   DC8         +0x21,+0x2B,+0x2B,+0x29
   CODE32      
??decodeDiagData_3:
   LDRSH       R0,[SP, #+0]
   MOV         R0,R0, LSL #+16
   MOVS        R0,R0, ASR #+16
   _BLF        __longToFloat,__longToFloat??rA
   MOV         R1,#+0x3B800000
   _BLF        __fMul,__fMul??rA
   STR         R0,[R5, #+0]
   B           ??decodeDiagData_2
??decodeDiagData_4:
   LDRH        R0,[SP, #+0]
   MOV         R0,R0, LSL #+16
   MOVS        R0,R0, LSR #+16
   _BLF        __ulongToFloat,__ulongToFloat??rA
   LDR         R1,??decodeDiagData_5  ;; 0x38d1b717
   _BLF        __fMul,__fMul??rA
   STR         R0,[R5, #+4]
   B           ??decodeDiagData_2
??decodeDiagData_6:
   LDRH        R0,[SP, #+0]
   MOV         R0,R0, LSL #+16
   MOVS        R0,R0, LSR #+16
   _BLF        __ulongToFloat,__ulongToFloat??rA
   LDR         R1,??decodeDiagData_5+4  ;; 0x3a03126f
   _BLF        __fMul,__fMul??rA
   STR         R0,[R5, #+8]
   B           ??decodeDiagData_2
??decodeDiagData_7:
   LDRH        R0,[SP, #+0]
   MOV         R0,R0, LSL #+16
   MOVS        R0,R0, LSR #+16
   _BLF        __ulongToFloat,__ulongToFloat??rA
   LDR         R1,??decodeDiagData_5  ;; 0x38d1b717
   _BLF        __fMul,__fMul??rA
   STR         R0,[R5, #+12]
   B           ??decodeDiagData_2
??decodeDiagData_8:
   LDRH        R0,[SP, #+0]
   MOV         R0,R0, LSL #+16
   MOVS        R0,R0, LSR #+16
   _BLF        __ulongToFloat,__ulongToFloat??rA
   LDR         R1,??decodeDiagData_5  ;; 0x38d1b717
   _BLF        __fMul,__fMul??rA
   STR         R0,[R5, #+16]
   B           ??decodeDiagData_2
??decodeDiagData_9:
   LDRB        LR,[SP, #+1]
   STRB        LR,[R5, #+20]
??decodeDiagData_2:
   ADDS        R6,R6,#+0x1
   B           ??decodeDiagData_1
??decodeDiagData_0:
   ADD         SP,SP,#+0x4        ;; stack cleaning
        CFI CFA R13+16
   LDMIA       SP!,{R4-R6,PC}     ;; return
   DATA        
??decodeDiagData_5:
   DC32        0x38d1b717
   DC32        0x3a03126f
        CFI EndBlock cfiBlock1

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function decodeDiagDataRaw
   CODE32      
decodeDiagDataRaw:
   STMDB       SP!,{R4}           ;; Push
        CFI R4 Frame(CFA, -4)
        CFI CFA R13+4
   SUB         SP,SP,#+0x4
        CFI CFA R13+8
   CMP         R0,#+0x0
   BEQ         ??decodeDiagDataRaw_0
   CMP         R1,#+0x0
   BEQ         ??decodeDiagDataRaw_0
   MOV         R3,#+0x0
   MOV         R2,R3
??decodeDiagDataRaw_1:
   CMP         R2,#+0x8
   BGE         ??decodeDiagDataRaw_0
   MOV         R3,#+0x2
   MLAS        R4,R3,R2,R0
   LDRB        R3,[R4, #+0]
   STRB        R3,[SP, #+0]
   MOV         R4,#+0x2
   MLAS        R3,R4,R2,R0
   LDRB        R4,[R3, #+1]
   STRB        R4,[SP, #+1]
   MOV         R12,R2
   CMP         R12,#+0x7
   BHI         ??decodeDiagDataRaw_2
   ADR         R3,`?<Jumptable for decodeDiagDataRaw>_0`
   LDRB        R3,[R3, R12]
   ADD         PC,PC,R3, LSL #+2
   DATA        
`?<Jumptable for decodeDiagDataRaw>_0`:
   DC8         +0x1,+0x4,+0x7,+0xA
   DC8         +0xD,+0x12,+0x12,+0x10
   CODE32      
??decodeDiagDataRaw_3:
   LDRSH       R12,[SP, #+0]
   STRH        R12,[R1, #+0]
   B           ??decodeDiagDataRaw_2
??decodeDiagDataRaw_4:
   LDRH        R4,[SP, #+0]
   STRH        R4,[R1, #+2]
   B           ??decodeDiagDataRaw_2
??decodeDiagDataRaw_5:
   LDRH        R3,[SP, #+0]
   STRH        R3,[R1, #+4]
   B           ??decodeDiagDataRaw_2
??decodeDiagDataRaw_6:
   LDRH        R12,[SP, #+0]
   STRH        R12,[R1, #+6]
   B           ??decodeDiagDataRaw_2
??decodeDiagDataRaw_7:
   LDRH        R4,[SP, #+0]
   STRH        R4,[R1, #+8]
   B           ??decodeDiagDataRaw_2
??decodeDiagDataRaw_8:
   LDRB        R3,[SP, #+0]
   STRB        R3,[R1, #+10]
??decodeDiagDataRaw_2:
   ADDS        R2,R2,#+0x1
   B           ??decodeDiagDataRaw_1
??decodeDiagDataRaw_0:
   ADD         SP,SP,#+0x4        ;; stack cleaning
        CFI CFA R13+4
   LDMIA       SP!,{R4}           ;; Pop
        CFI R4 SameValue
        CFI CFA R13+0
   MOV         PC,LR              ;; return
        CFI EndBlock cfiBlock2

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function setupBus
   CODE32      
setupBus:
   STMDB       SP!,{R4-R6,LR}     ;; Push
        CFI ?RET Frame(CFA, -4)
        CFI R6 Frame(CFA, -8)
        CFI R5 Frame(CFA, -12)
        CFI R4 Frame(CFA, -16)
        CFI CFA R13+16
   MOV         R4,R0
   MOV         R5,R1
   MOV         R0,R4
   _BLF        i2cswitchSetBus,i2cswitchSetBus??rA
   MOV         R6,R0
   CMN         R6,#+0x1
   BNE         ??setupBus_0
   MOV         R0,R6
   B           ??setupBus_1
??setupBus_0:
   MOV         R0,R5
   ANDS        R0,R0,#+0xFF       ;; Zero extend
   _BLF        i2cmasterProbe,i2cmasterProbe??rA
   MOV         R6,R0
   CMN         R6,#+0x1
   BNE         ??setupBus_2
   MVN         R0,#+0x1
   B           ??setupBus_1
??setupBus_2:
   MOV         R0,R6
??setupBus_1:
   LDMIA       SP!,{R4-R6,PC}     ;; return
        CFI EndBlock cfiBlock3

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function sfpdiagGetDiags
   CODE32      
sfpdiagGetDiags:
   STMDB       SP!,{R4-R6,LR}     ;; Push
        CFI ?RET Frame(CFA, -4)
        CFI R6 Frame(CFA, -8)
        CFI R5 Frame(CFA, -12)
        CFI R4 Frame(CFA, -16)
        CFI CFA R13+16
   MOV         R5,R0
   MVN         R0,#+0x0
   MOV         R6,R0
   MOV         R1,#+0xA2
   MOV         R0,R5
   BL          setupBus
   MOV         R6,R0
   CMP         R0,#+0x0
   BEQ         ??sfpdiagGetDiags_0
   MOV         R0,R6
   B           ??sfpdiagGetDiags_1
??sfpdiagGetDiags_0:
   MOV         R2,#+0x0
   MOV         R1,#+0x60
   MOV         R0,#+0xA2
   _BLF        i2cmasterSendOne,i2cmasterSendOne??rA
   CMN         R0,#+0x1
   BEQ         ??sfpdiagGetDiags_2
   MOV         R2,#+0x1
   MOV         R1,#+0x18
   MOV         R0,#+0xA2
   _BLF        i2cmasterReceive,i2cmasterReceive??rA
   MOV         R6,R0
   MOV         R1,#+0x0
   MOV         R4,R1
??sfpdiagGetDiags_3:
   CMP         R4,#+0x18
   BGE         ??sfpdiagGetDiags_2
   CMN         R6,#+0x1
   BEQ         ??sfpdiagGetDiags_2
   LDR         R2,??sfpdiagGetDiags_4  ;; sfpDiagRawData
   ADDS        R0,R4,R2
   _BLF        i2cmasterGetData,i2cmasterGetData??rA
   MOV         R6,R0
   ADDS        R4,R4,#+0x1
   B           ??sfpdiagGetDiags_3
??sfpdiagGetDiags_2:
   _BLF        i2cswitchDisable,i2cswitchDisable??rA
   MOV         R3,#+0x18
   LDR         R12,??DataTable3   ;; sfpDiagInfo
   MLAS        R1,R3,R5,R12
   LDR         R0,??sfpdiagGetDiags_4  ;; sfpDiagRawData
   BL          decodeDiagData
   MOV         LR,#+0xC
   LDR         R0,??DataTable4    ;; sfpDiagInfoRaw
   MLAS        R1,LR,R5,R0
   LDR         R0,??sfpdiagGetDiags_4  ;; sfpDiagRawData
   BL          decodeDiagDataRaw
   MOV         R0,#+0x0
??sfpdiagGetDiags_1:
   LDMIA       SP!,{R4-R6,PC}     ;; return
   DATA        
??sfpdiagGetDiags_4:
   DC32        sfpDiagRawData
        CFI EndBlock cfiBlock4

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function sfpdiagGetWavelength
   CODE32      
sfpdiagGetWavelength:
   STMDB       SP!,{R4,R5,LR}     ;; Push
        CFI ?RET Frame(CFA, -4)
        CFI R5 Frame(CFA, -8)
        CFI R4 Frame(CFA, -12)
        CFI CFA R13+12
   SUB         SP,SP,#+0x8
        CFI CFA R13+20
   MOV         R4,R0
   MVN         R0,#+0x0
   MOV         R5,R0
   MOV         R1,#+0xA0
   MOV         R0,R4
   BL          setupBus
   MOV         R5,R0
   CMP         R0,#+0x0
   BEQ         ??sfpdiagGetWavelength_0
   MOV         R0,R5
   B           ??sfpdiagGetWavelength_1
??sfpdiagGetWavelength_0:
   MOV         R2,#+0x0
   MOV         R1,#+0x3C
   MOV         R0,#+0xA0
   _BLF        i2cmasterSendOne,i2cmasterSendOne??rA
   CMN         R0,#+0x1
   BEQ         ??sfpdiagGetWavelength_2
   MOV         R2,#+0x1
   MOV         R1,#+0x2
   MOV         R0,#+0xA0
   _BLF        i2cmasterReceive,i2cmasterReceive??rA
   MOV         R5,R0
   CMN         R5,#+0x1
   BEQ         ??sfpdiagGetWavelength_2
   ADD         R0,SP,#+0x1
   _BLF        i2cmasterGetData,i2cmasterGetData??rA
   MOV         R0,SP
   _BLF        i2cmasterGetData,i2cmasterGetData??rA
   MOV         R1,#+0x2
   LDR         R2,??DataTable6    ;; wavelength
   MLAS        R3,R1,R4,R2
   LDRH        LR,[SP, #+0]
   STRH        LR,[R3, #+0]
??sfpdiagGetWavelength_2:
   _BLF        i2cswitchDisable,i2cswitchDisable??rA
   MOV         R0,#+0x0
??sfpdiagGetWavelength_1:
   ADD         SP,SP,#+0x8        ;; stack cleaning
        CFI CFA R13+12
   LDMIA       SP!,{R4,R5,PC}     ;; return
        CFI EndBlock cfiBlock5

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock6 Using cfiCommon0
        CFI Function sfpdiagRetrieveInfo
   CODE32      
sfpdiagRetrieveInfo:
   MOV         R1,#+0x18
   LDR         R2,??DataTable3    ;; sfpDiagInfo
   MLAS        R0,R1,R0,R2
   MOV         PC,LR              ;; return
        CFI EndBlock cfiBlock6

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable3:
   DC32        sfpDiagInfo

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock7 Using cfiCommon0
        CFI Function sfpdiagRetrieveInfoRaw
   CODE32      
sfpdiagRetrieveInfoRaw:
   MOV         R1,#+0xC
   LDR         R2,??DataTable4    ;; sfpDiagInfoRaw
   MLAS        R0,R1,R0,R2
   MOV         PC,LR              ;; return
        CFI EndBlock cfiBlock7

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable4:
   DC32        sfpDiagInfoRaw

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock8 Using cfiCommon0
        CFI Function printSfpDiags
   CODE32      
printSfpDiags:
   STMDB       SP!,{R4-R7,LR}     ;; Push
        CFI ?RET Frame(CFA, -4)
        CFI R7 Frame(CFA, -8)
        CFI R6 Frame(CFA, -12)
        CFI R5 Frame(CFA, -16)
        CFI R4 Frame(CFA, -20)
        CFI CFA R13+20
   SUB         SP,SP,#+0x4
        CFI CFA R13+24
   MOV         R4,R0
   MOV         R0,SP
   _BLF        clicharGetOutputBuffer,clicharGetOutputBuffer??rA
   MOV         R5,R0
   MOV         R0,R4
   BL          sfpdiagGetDiags
   MOV         R0,R4
   BL          sfpdiagRetrieveInfo
   MOV         R6,R0
   MOV         R0,R4
   BL          sfpdiagRetrieveInfoRaw
   MOV         R7,R0
   MOV         R2,R4
   LDR         R1,??printSfpDiags_0  ;; `?<Constant "--- SFP diagnostics f...">`
   MOV         R0,R5
   _BLF        sprintf,sprintf??rA
   LDR         R1,[SP, #+0]
   MOV         R0,R5
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   LDR         R0,[R6, #+0]
   _BLF        __floatToDouble,__floatToDouble??rA
   STMDB       SP!,{R0,R1}        ;; Push
        CFI CFA R13+32
   LDRH        R2,[R7, #+0]
   MOV         R2,R2, LSL #+16
   MOVS        R2,R2, LSR #+16
   LDR         R1,??printSfpDiags_0+4  ;; `?<Constant "temperature   : raw[%...">`
   MOV         R0,R5
   LDMIA       SP!,{R3}           ;; Pop
        CFI CFA R13+28
   _BLF        sprintf,sprintf??rA
   ADD         SP,SP,#+0x4        ;; stack cleaning
        CFI CFA R13+24
   LDR         R1,[SP, #+0]
   MOV         R0,R5
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   LDR         R0,[R6, #+4]
   _BLF        __floatToDouble,__floatToDouble??rA
   STMDB       SP!,{R0,R1}        ;; Push
        CFI CFA R13+32
   LDRH        R2,[R7, #+2]
   MOV         R2,R2, LSL #+16
   MOVS        R2,R2, LSR #+16
   LDR         R1,??printSfpDiags_0+8  ;; `?<Constant "Vcc           : raw[%...">`
   MOV         R0,R5
   LDMIA       SP!,{R3}           ;; Pop
        CFI CFA R13+28
   _BLF        sprintf,sprintf??rA
   ADD         SP,SP,#+0x4        ;; stack cleaning
        CFI CFA R13+24
   LDR         R1,[SP, #+0]
   MOV         R0,R5
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   LDR         R0,[R6, #+8]
   _BLF        __floatToDouble,__floatToDouble??rA
   STMDB       SP!,{R0,R1}        ;; Push
        CFI CFA R13+32
   LDRH        R2,[R7, #+4]
   MOV         R2,R2, LSL #+16
   MOVS        R2,R2, LSR #+16
   LDR         R1,??printSfpDiags_0+12  ;; `?<Constant "txBiasCurrent : raw[%...">`
   MOV         R0,R5
   LDMIA       SP!,{R3}           ;; Pop
        CFI CFA R13+28
   _BLF        sprintf,sprintf??rA
   ADD         SP,SP,#+0x4        ;; stack cleaning
        CFI CFA R13+24
   LDR         R1,[SP, #+0]
   MOV         R0,R5
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   LDR         R0,[R6, #+12]
   _BLF        __floatToDouble,__floatToDouble??rA
   STMDB       SP!,{R0,R1}        ;; Push
        CFI CFA R13+32
   LDRH        R2,[R7, #+6]
   MOV         R2,R2, LSL #+16
   MOVS        R2,R2, LSR #+16
   LDR         R1,??printSfpDiags_0+16  ;; `?<Constant "txPower       : raw[%...">`
   MOV         R0,R5
   LDMIA       SP!,{R3}           ;; Pop
        CFI CFA R13+28
   _BLF        sprintf,sprintf??rA
   ADD         SP,SP,#+0x4        ;; stack cleaning
        CFI CFA R13+24
   LDR         R1,[SP, #+0]
   MOV         R0,R5
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   LDR         R0,[R6, #+16]
   _BLF        __floatToDouble,__floatToDouble??rA
   STMDB       SP!,{R0,R1}        ;; Push
        CFI CFA R13+32
   LDRH        R2,[R7, #+8]
   MOV         R2,R2, LSL #+16
   MOVS        R2,R2, LSR #+16
   LDR         R1,??printSfpDiags_0+20  ;; `?<Constant "rxPower       : raw[%...">`
   MOV         R0,R5
   LDMIA       SP!,{R3}           ;; Pop
        CFI CFA R13+28
   _BLF        sprintf,sprintf??rA
   ADD         SP,SP,#+0x4        ;; stack cleaning
        CFI CFA R13+24
   LDR         R1,[SP, #+0]
   MOV         R0,R5
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   LDRB        R2,[R6, #+20]
   ANDS        R2,R2,#+0xFF       ;; Zero extend
   LDR         R1,??printSfpDiags_0+24  ;; `?<Constant "status        : raw[%...">`
   MOV         R0,R5
   _BLF        sprintf,sprintf??rA
   LDR         R1,[SP, #+0]
   MOV         R0,R5
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   MOV         R0,R4
   BL          sfpdiagGetWavelength
   MOV         R1,#+0x2
   LDR         R2,??DataTable6    ;; wavelength
   MLAS        R3,R1,R4,R2
   LDRH        R2,[R3, #+0]
   MOV         R2,R2, LSL #+16
   MOVS        R2,R2, LSR #+16
   LDR         R1,??printSfpDiags_0+28  ;; `?<Constant "wavelength    : %u nm\\r\\n">`
   MOV         R0,R5
   _BLF        sprintf,sprintf??rA
   LDR         R1,[SP, #+0]
   MOV         R0,R5
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   ADD         SP,SP,#+0x4        ;; stack cleaning
        CFI CFA R13+20
   LDMIA       SP!,{R4-R7,PC}     ;; return
   DATA        
??printSfpDiags_0:
   DC32        `?<Constant "--- SFP diagnostics f...">`
   DC32        `?<Constant "temperature   : raw[%...">`
   DC32        `?<Constant "Vcc           : raw[%...">`
   DC32        `?<Constant "txBiasCurrent : raw[%...">`
   DC32        `?<Constant "txPower       : raw[%...">`
   DC32        `?<Constant "rxPower       : raw[%...">`
   DC32        `?<Constant "status        : raw[%...">`
   DC32        `?<Constant "wavelength    : %u nm\\r\\n">`
        CFI EndBlock cfiBlock8

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock9 Using cfiCommon0
        CFI Function printMinSfpDiags
   CODE32      
printMinSfpDiags:
   STMDB       SP!,{R4-R9,LR}     ;; Push
        CFI ?RET Frame(CFA, -4)
        CFI R9 Frame(CFA, -8)
        CFI R8 Frame(CFA, -12)
        CFI R7 Frame(CFA, -16)
        CFI R6 Frame(CFA, -20)
        CFI R5 Frame(CFA, -24)
        CFI R4 Frame(CFA, -28)
        CFI CFA R13+28
   SUB         SP,SP,#+0x4
        CFI CFA R13+32
   MOV         R4,R0
   MOV         R0,SP
   _BLF        clicharGetOutputBuffer,clicharGetOutputBuffer??rA
   MOV         R5,R0
   MOV         R0,R4
   BL          sfpdiagGetDiags
   MOV         R0,R4
   BL          sfpdiagRetrieveInfo
   MOV         R6,R0
   MOV         R0,R4
   BL          sfpdiagRetrieveInfoRaw
   MOV         R7,R0
   MOV         R0,R4
   BL          sfpdiagGetWavelength
   LDRB        R3,[R6, #+20]
   ANDS        R3,R3,#+0xFF       ;; Zero extend
   MOV         R0,#+0x2
   LDR         R1,??DataTable6    ;; wavelength
   MLAS        R2,R0,R4,R1
   LDRH        R2,[R2, #+0]
   MOV         R2,R2, LSL #+16
   MOVS        R2,R2, LSR #+16
   MOV         R8,R2
   MOV         R9,R3
   LDR         R0,[R6, #+16]
   _BLF        __floatToDouble,__floatToDouble??rA
   MOV         R3,R9
   MOV         R2,R8
   STMDB       SP!,{R0-R3}        ;; Push
        CFI CFA R13+48
   LDR         R0,[R6, #+12]
   _BLF        __floatToDouble,__floatToDouble??rA
   STMDB       SP!,{R0,R1}        ;; Push
        CFI CFA R13+56
   LDR         R0,[R6, #+8]
   _BLF        __floatToDouble,__floatToDouble??rA
   STMDB       SP!,{R0,R1}        ;; Push
        CFI CFA R13+64
   LDR         R0,[R6, #+4]
   _BLF        __floatToDouble,__floatToDouble??rA
   STMDB       SP!,{R0,R1}        ;; Push
        CFI CFA R13+72
   LDR         R0,[R6, #+0]
   _BLF        __floatToDouble,__floatToDouble??rA
   STMDB       SP!,{R0,R1}        ;; Push
        CFI CFA R13+80
   MOV         R2,R4
   LDR         R1,??printMinSfpDiags_0  ;; `?<Constant "sfpdiag: channel=%d, ...">`
   MOV         R0,R5
   LDMIA       SP!,{R3}           ;; Pop
        CFI CFA R13+76
   _BLF        sprintf,sprintf??rA
   ADD         SP,SP,#+0x2C       ;; stack cleaning
        CFI CFA R13+32
   LDR         R1,[SP, #+0]
   MOV         R0,R5
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   ADD         SP,SP,#+0x4        ;; stack cleaning
        CFI CFA R13+28
   LDMIA       SP!,{R4-R9,PC}     ;; return
   DATA        
??printMinSfpDiags_0:
   DC32        `?<Constant "sfpdiag: channel=%d, ...">`
        CFI EndBlock cfiBlock9

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable6:
   DC32        wavelength

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock10 Using cfiCommon0
        CFI Function sfpdiagHandler
   CODE32      
sfpdiagHandler:
   STMDB       SP!,{R4-R10,LR}    ;; Push
        CFI ?RET Frame(CFA, -4)
        CFI R10 Frame(CFA, -8)
        CFI R9 Frame(CFA, -12)
        CFI R8 Frame(CFA, -16)
        CFI R7 Frame(CFA, -20)
        CFI R6 Frame(CFA, -24)
        CFI R5 Frame(CFA, -28)
        CFI R4 Frame(CFA, -32)
        CFI CFA R13+32
   SUB         SP,SP,#+0x8
        CFI CFA R13+40
   MOV         R7,R0
   MOV         R8,R1
   MOV         R9,R2
   MVN         R0,#+0x0
   MOV         R10,R0
   MOV         R0,SP
   _BLF        clicharGetOutputBuffer,clicharGetOutputBuffer??rA
   MOV         R4,R0
   CMP         R7,#+0x2
   BNE         ??sfpdiagHandler_0
   MOV         R2,#+0xA
   MOV         R1,#+0x0
   LDR         R0,[R8, #+4]
   _BLF        strtol,strtol??rA
   MOV         R6,R0
   CMP         R6,#+0x0
   BLT         ??sfpdiagHandler_1
   CMP         R6,#+0x4
   BLT         ??sfpdiagHandler_2
??sfpdiagHandler_1:
   MOV         R0,R10
   B           ??sfpdiagHandler_3
??sfpdiagHandler_2:
   MOV         R0,R6
   _BLF        sfpProbe,sfpProbe??rA
   CMP         R0,#+0x0
   BNE         ??sfpdiagHandler_4
   MOV         R3,R6
   LDR         R2,[R8, #+0]
   LDR         R1,??sfpdiagHandler_5  ;; `?<Constant "%s: error SFP not fou...">`
   MOV         R0,R4
   _BLF        sprintf,sprintf??rA
   LDR         R1,[SP, #+0]
   MOV         R0,R4
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   B           ??sfpdiagHandler_6
??sfpdiagHandler_4:
   MOV         R0,R6
   BL          printSfpDiags
??sfpdiagHandler_6:
   MOV         R2,#+0x0
   MOV         R10,R2
   B           ??sfpdiagHandler_7
??sfpdiagHandler_0:
   CMP         R7,#+0x1
   BNE         ??sfpdiagHandler_7
   MOV         R3,#+0x0
   MOV         R5,R3
??sfpdiagHandler_8:
   CMP         R5,#+0x4
   BGE         ??sfpdiagHandler_9
   MOV         R0,R5
   _BLF        sfpProbe,sfpProbe??rA
   CMP         R0,#+0x0
   BNE         ??sfpdiagHandler_10
   MOV         R0,R5
   BL          printMinSfpDiags
??sfpdiagHandler_10:
   ADDS        R5,R5,#+0x1
   B           ??sfpdiagHandler_8
??sfpdiagHandler_9:
   MOV         R12,#+0x0
   MOV         R10,R12
??sfpdiagHandler_7:
   MOV         R0,R10
??sfpdiagHandler_3:
   ADD         SP,SP,#+0x8        ;; stack cleaning
        CFI CFA R13+32
   LDMIA       SP!,{R4-R10,PC}    ;; return
   DATA        
??sfpdiagHandler_5:
   DC32        `?<Constant "%s: error SFP not fou...">`
        CFI EndBlock cfiBlock10

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock11 Using cfiCommon0
        CFI NoFunction
   CODE32      
cliRegisterCommand??rA:
   LDR         R12,??Subroutine0_0  ;; cliRegisterCommand
   MOV         PC,R12
   DATA        
??Subroutine0_0:
   DC32        cliRegisterCommand
        CFI EndBlock cfiBlock11

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock12 Using cfiCommon0
        CFI NoFunction
   CODE32      
__longToFloat??rA:
   LDR         R3,??Subroutine1_0  ;; __longToFloat
   BX          R3
   DATA        
??Subroutine1_0:
   DC32        __longToFloat
        CFI EndBlock cfiBlock12

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock13 Using cfiCommon0
        CFI NoFunction
   CODE32      
__fMul??rA:
   LDR         R3,??Subroutine2_0  ;; __fMul
   BX          R3
   DATA        
??Subroutine2_0:
   DC32        __fMul
        CFI EndBlock cfiBlock13

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock14 Using cfiCommon0
        CFI NoFunction
   CODE32      
__ulongToFloat??rA:
   LDR         R3,??Subroutine3_0  ;; __ulongToFloat
   BX          R3
   DATA        
??Subroutine3_0:
   DC32        __ulongToFloat
        CFI EndBlock cfiBlock14

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock15 Using cfiCommon0
        CFI NoFunction
   CODE32      
i2cswitchSetBus??rA:
   LDR         R12,??Subroutine4_0  ;; i2cswitchSetBus
   MOV         PC,R12
   DATA        
??Subroutine4_0:
   DC32        i2cswitchSetBus
        CFI EndBlock cfiBlock15

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock16 Using cfiCommon0
        CFI NoFunction
   CODE32      
i2cmasterProbe??rA:
   LDR         R12,??Subroutine5_0  ;; i2cmasterProbe
   MOV         PC,R12
   DATA        
??Subroutine5_0:
   DC32        i2cmasterProbe
        CFI EndBlock cfiBlock16

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock17 Using cfiCommon0
        CFI NoFunction
   CODE32      
i2cmasterSendOne??rA:
   LDR         R12,??Subroutine6_0  ;; i2cmasterSendOne
   MOV         PC,R12
   DATA        
??Subroutine6_0:
   DC32        i2cmasterSendOne
        CFI EndBlock cfiBlock17

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock18 Using cfiCommon0
        CFI NoFunction
   CODE32      
i2cmasterReceive??rA:
   LDR         R12,??Subroutine7_0  ;; i2cmasterReceive
   MOV         PC,R12
   DATA        
??Subroutine7_0:
   DC32        i2cmasterReceive
        CFI EndBlock cfiBlock18

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock19 Using cfiCommon0
        CFI NoFunction
   CODE32      
i2cmasterGetData??rA:
   LDR         R12,??Subroutine8_0  ;; i2cmasterGetData
   MOV         PC,R12
   DATA        
??Subroutine8_0:
   DC32        i2cmasterGetData
        CFI EndBlock cfiBlock19

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock20 Using cfiCommon0
        CFI NoFunction
   CODE32      
i2cswitchDisable??rA:
   LDR         R12,??Subroutine9_0  ;; i2cswitchDisable
   MOV         PC,R12
   DATA        
??Subroutine9_0:
   DC32        i2cswitchDisable
        CFI EndBlock cfiBlock20

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock21 Using cfiCommon0
        CFI NoFunction
   CODE32      
clicharGetOutputBuffer??rA:
   LDR         R12,??Subroutine10_0  ;; clicharGetOutputBuffer
   MOV         PC,R12
   DATA        
??Subroutine10_0:
   DC32        clicharGetOutputBuffer
        CFI EndBlock cfiBlock21

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock22 Using cfiCommon0
        CFI NoFunction
   CODE32      
sprintf??rA:
   LDR         R12,??Subroutine11_0  ;; sprintf
   MOV         PC,R12
   DATA        
??Subroutine11_0:
   DC32        sprintf
        CFI EndBlock cfiBlock22

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock23 Using cfiCommon0
        CFI NoFunction
   CODE32      
clicharSendOutputBuffer??rA:
   LDR         R12,??Subroutine12_0  ;; clicharSendOutputBuffer
   MOV         PC,R12
   DATA        
??Subroutine12_0:
   DC32        clicharSendOutputBuffer
        CFI EndBlock cfiBlock23

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock24 Using cfiCommon0
        CFI NoFunction
   CODE32      
__floatToDouble??rA:
   LDR         R3,??Subroutine13_0  ;; __floatToDouble
   BX          R3
   DATA        
??Subroutine13_0:
   DC32        __floatToDouble
        CFI EndBlock cfiBlock24

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock25 Using cfiCommon0
        CFI NoFunction
   CODE32      
strtol??rA:
   LDR         R12,??Subroutine14_0  ;; strtol
   MOV         PC,R12
   DATA        
??Subroutine14_0:
   DC32        strtol
        CFI EndBlock cfiBlock25

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock26 Using cfiCommon0
        CFI NoFunction
   CODE32      
sfpProbe??rA:
   LDR         R12,??Subroutine15_0  ;; sfpProbe
   MOV         PC,R12
   DATA        
??Subroutine15_0:
   DC32        sfpProbe
        CFI EndBlock cfiBlock26

        RSEG INITTAB:CODE:ROOT(2)
   DATA
?init?tab?DATA_Z:
   DCD      sfe(DATA_Z) - sfb(DATA_Z), sfb(DATA_Z), sfb(DATA_Z)

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "sfpdiag">`:
        DC8 "sfpdiag"

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "get SFP diagnostic in...">`:
        DC8 "get SFP diagnostic info on [bus number 0-3]"

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "--- SFP diagnostics f...">`:
        DC8 "--- SFP diagnostics for channel [%d] ---\015\012"
        DC8 0

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "temperature   : raw[%...">`:
        DC8 "temperature   : raw[%04x] %f deg C\015\012"
        DC8 0, 0, 0

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "Vcc           : raw[%...">`:
        DC8 "Vcc           : raw[%04x] %f V\015\012"
        DC8 0, 0, 0

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "txBiasCurrent : raw[%...">`:
        DC8 "txBiasCurrent : raw[%04x] %f mA\015\012"
        DC8 0, 0

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "txPower       : raw[%...">`:
        DC8 "txPower       : raw[%04x] %f mW\015\012"
        DC8 0, 0

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "rxPower       : raw[%...">`:
        DC8 "rxPower       : raw[%04x] %f mW\015\012"
        DC8 0, 0

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "status        : raw[%...">`:
        DC8 "status        : raw[%02x]\015\012"

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "wavelength    : %u nm\\r\\n">`:
        DC8 "wavelength    : %u nm\015\012"

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "sfpdiag: channel=%d, ...">`:
        DC8 73H, 66H, 70H, 64H, 69H, 61H, 67H, 3AH
        DC8 20H, 63H, 68H, 61H, 6EH, 6EH, 65H, 6CH
        DC8 3DH, 25H, 64H, 2CH, 20H, 74H, 65H, 6DH
        DC8 70H, 3DH, 25H, 66H, 2CH, 20H, 76H, 63H
        DC8 63H, 3DH, 25H, 66H, 2CH, 20H, 74H, 78H
        DC8 42H, 69H, 61H, 73H, 49H, 3DH, 25H, 66H
        DC8 2CH, 20H, 74H, 78H, 50H, 6FH, 77H, 65H
        DC8 72H, 3DH, 25H, 66H, 2CH, 20H, 72H, 78H
        DC8 50H, 6FH, 77H, 65H, 72H, 3DH, 25H, 66H
        DC8 2CH, 20H, 6CH, 61H, 6DH, 62H, 64H, 61H
        DC8 3DH, 25H, 75H, 2CH, 20H, 73H, 74H, 61H
        DC8 74H, 75H, 73H, 3DH, 25H, 30H, 32H, 78H
        DC8 0DH, 0AH, 0
        DC8 0

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "%s: error SFP not fou...">`:
        DC8 "%s: error SFP not found on bus [%d]\015\012"
        DC8 0, 0

        END
// 
// 2 168 bytes in segment CODE
//   472 bytes in segment DATA_C
//   176 bytes in segment DATA_Z
//    12 bytes in segment INITTAB
// 
// 1 976 bytes of CODE  memory (+ 204 bytes shared)
//   472 bytes of CONST memory
//   176 bytes of DATA  memory
//
//Errors: none
//Warnings: 12
