//////////////////////////////////////////////////////////////////////////////
//                                                                           /
// IAR ARM ANSI C/C++ Compiler V4.11A/W32              20/Jul/2004  18:58:47 /
// Copyright 1999-2004 IAR Systems. All rights reserved.                     /
//                                                                           /
//    Cpu mode        =  arm                                                 /
//    Endian          =  little                                              /
//    Stack alignment =  4                                                   /
//    Source file     =  C:\medusa\uart0.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\uart0.c        /
//    List file       =  C:\medusa\Debug\List\uart0.s79                      /
//                                                                           /
//                                                                           /
//////////////////////////////////////////////////////////////////////////////

        NAME uart0

        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)
        RSEG IRQSTACK:DATA:NOROOT(2)

        EXTERN ??DiI_a
        EXTERN ??EnI_a
        EXTERN ??divu32_a

        PUBWEAK `?*?DATA_ID`
??DataTable0 EQU 0
??DataTable1 EQU 0
??DataTable10 EQU 0
??DataTable11 EQU 0
??DataTable12 EQU 0
??DataTable13 EQU 0
??DataTable14 EQU 0
??DataTable15 EQU 0
??DataTable16 EQU 0
??DataTable17 EQU 0
??DataTable18 EQU 0
??DataTable19 EQU 0
??DataTable2 EQU 0
??DataTable20 EQU 0
??DataTable21 EQU 0
??DataTable22 EQU 0
??DataTable23 EQU 0
??DataTable24 EQU 0
??DataTable25 EQU 0
??DataTable26 EQU 0
??DataTable27 EQU 0
??DataTable28 EQU 0
??DataTable29 EQU 0
??DataTable3 EQU 0
??DataTable30 EQU 0
??DataTable31 EQU 0
??DataTable32 EQU 0
??DataTable33 EQU 0
??DataTable34 EQU 0
??DataTable35 EQU 0
??DataTable36 EQU 0
??DataTable38 EQU 0
??DataTable39 EQU 0
??DataTable4 EQU 0
??DataTable40 EQU 0
??DataTable41 EQU 0
??DataTable42 EQU 0
??DataTable43 EQU 0
??DataTable45 EQU 0
??DataTable46 EQU 0
??DataTable47 EQU 0
??DataTable49 EQU 0
??DataTable5 EQU 0
??DataTable50 EQU 0
??DataTable52 EQU 0
??DataTable53 EQU 0
??DataTable54 EQU 0
??DataTable55 EQU 0
??DataTable57 EQU 0
??DataTable6 EQU 0
??DataTable60 EQU 0
??DataTable62 EQU 0
??DataTable64 EQU 0
??DataTable66 EQU 0
??DataTable67 EQU 0
??DataTable68 EQU 0
??DataTable7 EQU 0
??DataTable8 EQU 0
??DataTable9 EQU 0
        MULTWEAK ??rA??DiI_a
        MULTWEAK ??rA??EnI_a
        MULTWEAK ??rA??divu32_a
        PUBWEAK ?init?tab?DATA_I
        PUBWEAK ?init?tab?DATA_Z
        PUBLIC __write
        FUNCTION __write,0203H
        LOCFRAME CSTACK, 8, STACK
        MULTWEAK armvicIntConnect??rA
        MULTWEAK armvicIntEnable??rA
        MULTWEAK cliRegisterCommand??rA
        MULTWEAK clicharGetOutputBuffer??rA
        MULTWEAK clicharSendOutputBuffer??rA
        MULTWEAK eventqPut??rA
        MULTWEAK pllGetPeriphFreq??rA
        FUNCTION setBaudrate,0203H
        LOCFRAME CSTACK, 20, STACK
        MULTWEAK sprintf??rA
        PUBLIC uart0Init
        FUNCTION uart0Init,0203H
        LOCFRAME CSTACK, 16, STACK
        FUNCTION uart0Isr,0603H
        LOCFRAME CSTACK, 20, STACK
        PUBLIC uart0Puts
        FUNCTION uart0Puts,0203H
        LOCFRAME CSTACK, 12, STACK
        PUBLIC uart0RxOne
        FUNCTION uart0RxOne,0203H
        LOCFRAME CSTACK, 4, STACK
        FUNCTION uart0StatHandler,0603H
        LOCFRAME CSTACK, 36, STACK
        PUBLIC uart0TxOne
        FUNCTION uart0TxOne,0203H
        LOCFRAME CSTACK, 4, STACK
        
        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
        
        
        CFI Names cfiNames1
        CFI StackFrame CFA_R13_usr R13_usr HUGEDATA
        CFI StackFrame CFA_R13_irq R13_irq 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_usr:32
        CFI Resource R14_usr:32, R13_irq:32, R14_irq:32, SPSR_irq:32
        CFI VirtualResource ?RET:32
        CFI EndNames cfiNames1
        
        CFI Common cfiCommon1 Using cfiNames1
        CFI CodeAlign 4
        CFI DataAlign 4
        CFI ReturnAddress ?RET CODE
        CFI CFA_R13_usr R13_usr+0
        CFI CFA_R13_irq R13_irq+0
        CFI R0 SameValue
        CFI R1 SameValue
        CFI R2 SameValue
        CFI R3 SameValue
        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 SameValue
        CFI CPSR SPSR_irq
        CFI R14_usr SameValue
        CFI R14_irq Undefined
        CFI SPSR_irq Undefined
        CFI ?RET add(R14_irq, literal(-4))
        CFI EndCommon cfiCommon1
        
armvicIntConnect    SYMBOL "armvicIntConnect"
armvicIntEnable     SYMBOL "armvicIntEnable"
cliRegisterCommand  SYMBOL "cliRegisterCommand"
clicharGetOutputBuffer SYMBOL "clicharGetOutputBuffer"
clicharSendOutputBuffer SYMBOL "clicharSendOutputBuffer"
eventqPut           SYMBOL "eventqPut"
pllGetPeriphFreq    SYMBOL "pllGetPeriphFreq"
sprintf             SYMBOL "sprintf"
armvicIntConnect??rA SYMBOL "??rA", armvicIntConnect
armvicIntEnable??rA SYMBOL "??rA", armvicIntEnable
cliRegisterCommand??rA SYMBOL "??rA", cliRegisterCommand
clicharGetOutputBuffer??rA SYMBOL "??rA", clicharGetOutputBuffer
clicharSendOutputBuffer??rA SYMBOL "??rA", clicharSendOutputBuffer
eventqPut??rA       SYMBOL "??rA", eventqPut
pllGetPeriphFreq??rA SYMBOL "??rA", pllGetPeriphFreq
sprintf??rA         SYMBOL "??rA", sprintf

        EXTERN armvicIntConnect
        FUNCTION armvicIntConnect,0202H
        EXTERN armvicIntEnable
        FUNCTION armvicIntEnable,0202H
        EXTERN cliRegisterCommand
        FUNCTION cliRegisterCommand,0202H
        EXTERN clicharGetOutputBuffer
        FUNCTION clicharGetOutputBuffer,0202H
        EXTERN clicharSendOutputBuffer
        FUNCTION clicharSendOutputBuffer,0202H
        EXTERN eventqPut
        FUNCTION eventqPut,0202H
        EXTERN pllGetPeriphFreq
        FUNCTION pllGetPeriphFreq,0202H
        EXTERN sprintf
        FUNCTION sprintf,010202H


        RSEG DATA_Z:DATA:SORT:NOROOT(2)
rxQueue:
        DS8 64

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
rxHead:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
rxTail:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
rxLen:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
maxRxLen:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
rxCharsDropped:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
txQueue:
        DS8 256

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
txHead:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
txTail:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
txLen:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
maxTxLen:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
txCharsDropped:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
maxIsrPassCount:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
txIntEnable:
        DS8 4

        RSEG DATA_I:DATA:SORT:NOROOT(2)
validBaudrates:
        DS8 32
	REQUIRE `?<Initializer for validBaudrates>`

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function setBaudrate
   CODE32      
setBaudrate:
   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
   MOV         R4,R0
   MVN         R0,#+0x0
   MOV         R7,R0
   MOV         R1,#+0x0
   MOV         R5,R1
??setBaudrate_0:
   CMP         R5,#+0x8
   BCS         ??setBaudrate_1
   MOV         R2,#+0x4
   LDR         R3,??setBaudrate_2  ;; validBaudrates
   MLAS        R12,R2,R5,R3
   LDR         LR,[R12, #+0]
   CMP         R4,LR
   BNE         ??setBaudrate_3
   MOV         R0,#+0x0
   MOV         R7,R0
   B           ??setBaudrate_1
??setBaudrate_3:
   ADDS        R5,R5,#+0x1
   B           ??setBaudrate_0
??setBaudrate_1:
   CMN         R7,#+0x1
   BNE         ??setBaudrate_4
   MVN         R0,#+0x0
   B           ??setBaudrate_5
??setBaudrate_4:
   _BLF        pllGetPeriphFreq,pllGetPeriphFreq??rA
   MOV         R2,#+0x10
   MULS        R1,R2,R4
   _BLF        ??divu32_a,??rA??divu32_a
   MOV         R6,R1
   MOV         R1,#+0xE000000C
   ORR         R1,R1,#+0xC000
   LDR         R3,[R1, #+0]
   ORR         R3,R3,#+0x80
   STR         R3,[R1, #+0]
   MOV         R12,#+0xE0000000
   ORR         R12,R12,#+0xC000
   MOV         LR,R6
   ANDS        LR,LR,#+0xFF       ;; Zero extend
   STR         LR,[R12, #+0]
   MOV         R0,#+0xE0000004
   ORR         R0,R0,#+0xC000
   MOV         R2,R6
   MOV         R2,R2, LSL #+16
   MOVS        R2,R2, LSR #+16
   MOV         R1,R2, LSR #+8
   ANDS        R1,R1,#+0xFF       ;; Zero extend
   STR         R1,[R0, #+0]
   MOV         R3,#+0xE000000C
   ORR         R3,R3,#+0xC000
   LDR         R12,[R3, #+0]
   BICS        R12,R12,#+0x80
   STR         R12,[R3, #+0]
   MOV         R0,R7
??setBaudrate_5:
   LDMIA       SP!,{R4-R7,PC}     ;; return
   DATA        
??setBaudrate_2:
   DC32        validBaudrates
        CFI EndBlock cfiBlock0

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function uart0StatHandler
   CODE32      
uart0StatHandler:
   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,#+0x8
        CFI CFA R13+28
   MOV         R4,R0
   MOV         R5,R1
   MOV         R6,R2
   MOV         R0,SP
   _BLF        clicharGetOutputBuffer,clicharGetOutputBuffer??rA
   MOV         R7,R0
   LDR         R0,??DataTable69   ;; maxIsrPassCount
   LDR         R1,[R0, #+0]
   LDR         R2,??DataTable44   ;; maxRxLen
   LDR         R0,[R2, #+0]
   STMDB       SP!,{R0,R1}        ;; Push
        CFI CFA R13+36
   LDR         R1,??DataTable37   ;; maxTxLen
   LDR         R3,[R1, #+0]
   LDR         R2,[R5, #+0]
   LDR         R1,??uart0StatHandler_0  ;; `?<Constant "%s: maxTx[%d] maxRx[%...">`
   MOV         R0,R7
   _BLF        sprintf,sprintf??rA
   ADD         SP,SP,#+0x8        ;; stack cleaning
        CFI CFA R13+28
   LDR         R1,[SP, #+0]
   MOV         R0,R7
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   LDR         R12,??DataTable65  ;; rxCharsDropped
   LDR         LR,[R12, #+0]
   STMDB       SP!,{LR}           ;; Push
        CFI CFA R13+32
   LDR         R0,??uart0StatHandler_0+4  ;; txCharsDropped
   LDR         R3,[R0, #+0]
   LDR         R2,[R5, #+0]
   LDR         R1,??uart0StatHandler_0+8  ;; `?<Constant "%s: txDrop[%d] rxDrop...">`
   MOV         R0,R7
   _BLF        sprintf,sprintf??rA
   ADD         SP,SP,#+0x4        ;; stack cleaning
        CFI CFA R13+28
   LDR         R1,[SP, #+0]
   MOV         R0,R7
   _BLF        clicharSendOutputBuffer,clicharSendOutputBuffer??rA
   MOV         R0,#+0x0
   ADD         SP,SP,#+0x8        ;; stack cleaning
        CFI CFA R13+20
   LDMIA       SP!,{R4-R7,PC}     ;; return
   DATA        
??uart0StatHandler_0:
   DC32        `?<Constant "%s: maxTx[%d] maxRx[%...">`
   DC32        txCharsDropped
   DC32        `?<Constant "%s: txDrop[%d] rxDrop...">`
        CFI EndBlock cfiBlock1

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function uart0Init
   CODE32      
uart0Init:
   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
   MVN         R0,#+0x0
   MOV         R6,R0
   MOV         R1,#+0xE0000004
   ORR         R1,R1,#+0xC000
   MOV         R2,#+0x0
   STR         R2,[R1, #+0]
   MOV         R3,#+0x0
   MOV         R5,R3
??uart0Init_0:
   CMP         R5,#+0x40
   BGE         ??uart0Init_1
   LDR         R12,??DataTable61  ;; rxQueue
   MOV         LR,#+0x0
   STRB        LR,[R5, +R12]
   ADDS        R5,R5,#+0x1
   B           ??uart0Init_0
??uart0Init_1:
   MOV         R0,#+0x0
   MOV         R5,R0
??uart0Init_2:
   CMP         R5,#+0x100
   BGE         ??uart0Init_3
   LDR         R1,??DataTable51   ;; txQueue
   MOV         R2,#+0x0
   STRB        R2,[R5, +R1]
   ADDS        R5,R5,#+0x1
   B           ??uart0Init_2
??uart0Init_3:
   MOV         R0,R4
   BL          setBaudrate
   MOV         R3,#+0xE0000008
   ORR         R3,R3,#+0xC000
   MOV         R12,#+0x1
   STR         R12,[R3, #+0]
   MOV         LR,#+0xE000000C
   ORR         LR,LR,#+0xC000
   MOV         R0,#+0x3
   STR         R0,[LR, #+0]
   LDR         R1,??uart0Init_4   ;; uart0Isr
   MOV         R0,#+0x6
   _BLF        armvicIntConnect,armvicIntConnect??rA
   CMP         R0,#+0x0
   BNE         ??uart0Init_5
   MOV         R0,#+0x6
   _BLF        armvicIntEnable,armvicIntEnable??rA
   MOV         R1,#+0xE0000004
   ORR         R1,R1,#+0xC000
   MOV         R2,#+0x1
   STR         R2,[R1, #+0]
   MOV         R3,#+0x0
   MOV         R6,R3
??uart0Init_5:
   LDR         R2,??uart0Init_4+4  ;; `?<Constant "u0stat - display uart...">`
   LDR         R1,??uart0Init_4+8  ;; uart0StatHandler
   LDR         R0,??uart0Init_4+12  ;; `?<Constant "u0stat">`
   _BLF        cliRegisterCommand,cliRegisterCommand??rA
   MOV         R0,R6
   LDMIA       SP!,{R4-R6,PC}     ;; return
   DATA        
??uart0Init_4:
   DC32        uart0Isr
   DC32        `?<Constant "u0stat - display uart...">`
   DC32        uart0StatHandler
   DC32        `?<Constant "u0stat">`
        CFI EndBlock cfiBlock2

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function uart0Puts
   CODE32      
uart0Puts:
   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
   MOV         R4,R0
   MOV         R0,#+0x0
   MOV         R5,R0
   CMP         R4,#+0x0
   BNE         ??uart0Puts_0
   MVN         R0,#+0x0
   B           ??uart0Puts_1
??uart0Puts_0:
   LDRB        R1,[R4, #+0]
   CMP         R1,#+0x0
   BEQ         ??uart0Puts_2
   CMN         R5,#+0x1
   BEQ         ??uart0Puts_2
   LDRB        R0,[R4, #+0]
   BL          uart0TxOne
   MOV         R5,R0
   ADDS        R4,R4,#+0x1
   B           ??uart0Puts_0
??uart0Puts_2:
   MOV         R0,R5
??uart0Puts_1:
   LDMIA       SP!,{R4,R5,PC}     ;; return
        CFI EndBlock cfiBlock3

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function uart0TxOne
   CODE32      
uart0TxOne:
   STMDB       SP!,{LR}           ;; Push
        CFI ?RET Frame(CFA, -4)
        CFI CFA R13+4
   MOV         R1,R0
   MVN         LR,#+0x0
   MOV         R2,LR
   LDR         R0,??DataTable59   ;; txIntEnable
   LDR         R3,[R0, #+0]
   CMP         R3,#+0x0
   BNE         ??uart0TxOne_0
   LDR         R12,??DataTable58  ;; txLen
   LDR         LR,[R12, #+0]
   CMP         LR,#+0x100
   BGE         ??uart0TxOne_1
   LDR         R0,??uart0TxOne_2  ;; txHead
   LDR         R3,[R0, #+0]
   LDR         R12,??DataTable51  ;; txQueue
   STRB        R1,[R3, +R12]
   LDR         LR,??uart0TxOne_2  ;; txHead
   LDR         R0,[LR, #+0]
   CMP         R0,#+0xFF
   BNE         ??uart0TxOne_3
   MOV         R0,#+0x0
   LDR         R3,??uart0TxOne_2  ;; txHead
   STR         R0,[R3, #+0]
   B           ??uart0TxOne_4
??uart0TxOne_3:
   LDR         R12,??uart0TxOne_2  ;; txHead
   LDR         R0,[R12, #+0]
   LDR         LR,??uart0TxOne_2  ;; txHead
   LDR         R3,??uart0TxOne_2  ;; txHead
   LDR         R12,[R3, #+0]
   ADDS        R3,R12,#+0x1
   STR         R3,[LR, #+0]
??uart0TxOne_4:
   LDR         R0,??DataTable58   ;; txLen
   LDR         LR,??DataTable58   ;; txLen
   LDR         R12,[LR, #+0]
   ADDS        R3,R12,#+0x1
   STR         R3,[R0, #+0]
   LDR         R0,??DataTable37   ;; maxTxLen
   LDR         LR,[R0, #+0]
   LDR         R12,??DataTable58  ;; txLen
   LDR         R3,[R12, #+0]
   CMP         LR,R3
   BGE         ??uart0TxOne_5
   LDR         R0,??DataTable37   ;; maxTxLen
   LDR         LR,??DataTable58   ;; txLen
   LDR         R12,[LR, #+0]
   STR         R12,[R0, #+0]
   B           ??uart0TxOne_6
??uart0TxOne_5:
   LDR         R3,??DataTable37   ;; maxTxLen
   LDR         R0,??DataTable37   ;; maxTxLen
   LDR         LR,[R0, #+0]
   STR         LR,[R3, #+0]
??uart0TxOne_6:
   MOV         R12,#+0x0
   MOV         R2,R12
   B           ??uart0TxOne_7
??uart0TxOne_1:
   MVN         R0,#+0x0
   B           ??uart0TxOne_8
??uart0TxOne_7:
   LDR         R3,??DataTable48   ;; 0xe000c014
   LDR         R0,[R3, #+0]
   TST         R0,#+0x60
   BEQ         ??uart0TxOne_7
   MOV         LR,#+0xE0000000
   ORR         LR,LR,#+0xC000
   LDR         R12,??DataTable56  ;; txTail
   LDR         R3,[R12, #+0]
   LDR         R0,??DataTable51   ;; txQueue
   LDRB        R12,[R3, +R0]
   ANDS        R12,R12,#+0xFF     ;; Zero extend
   STR         R12,[LR, #+0]
   LDR         LR,??DataTable56   ;; txTail
   LDR         R3,[LR, #+0]
   CMP         R3,#+0xFF
   BNE         ??uart0TxOne_9
   MOV         R3,#+0x0
   LDR         R0,??DataTable56   ;; txTail
   STR         R3,[R0, #+0]
   B           ??uart0TxOne_10
??uart0TxOne_9:
   LDR         R12,??DataTable56  ;; txTail
   LDR         R3,[R12, #+0]
   LDR         LR,??DataTable56   ;; txTail
   LDR         R0,??DataTable56   ;; txTail
   LDR         R12,[R0, #+0]
   ADDS        R0,R12,#+0x1
   STR         R0,[LR, #+0]
??uart0TxOne_10:
   LDR         R3,??DataTable58   ;; txLen
   LDR         LR,??DataTable58   ;; txLen
   LDR         R12,[LR, #+0]
   SUBS        R0,R12,#+0x1
   STR         R0,[R3, #+0]
   LDR         R3,??DataTable59   ;; txIntEnable
   MOV         LR,#+0x1
   STR         LR,[R3, #+0]
   MOV         R12,#+0xE0000004
   ORR         R12,R12,#+0xC000
   MOV         R0,#+0x3
   STR         R0,[R12, #+0]
   B           ??uart0TxOne_11
??uart0TxOne_0:
   LDR         R3,??DataTable58   ;; txLen
   LDR         LR,[R3, #+0]
   CMP         LR,#+0x100
   BGE         ??uart0TxOne_11
   _BLF        ??DiI_a,??rA??DiI_a
   LDR         R12,??uart0TxOne_2  ;; txHead
   LDR         R0,[R12, #+0]
   LDR         R3,??DataTable51   ;; txQueue
   STRB        R1,[R0, +R3]
   LDR         LR,??uart0TxOne_2  ;; txHead
   LDR         R12,[LR, #+0]
   CMP         R12,#+0xFF
   BNE         ??uart0TxOne_12
   MOV         R12,#+0x0
   LDR         R0,??uart0TxOne_2  ;; txHead
   STR         R12,[R0, #+0]
   B           ??uart0TxOne_13
??uart0TxOne_12:
   LDR         R3,??uart0TxOne_2  ;; txHead
   LDR         R12,[R3, #+0]
   LDR         LR,??uart0TxOne_2  ;; txHead
   LDR         R0,??uart0TxOne_2  ;; txHead
   LDR         R3,[R0, #+0]
   ADDS        R0,R3,#+0x1
   STR         R0,[LR, #+0]
??uart0TxOne_13:
   LDR         R12,??DataTable58  ;; txLen
   LDR         LR,??DataTable58   ;; txLen
   LDR         R3,[LR, #+0]
   ADDS        R0,R3,#+0x1
   STR         R0,[R12, #+0]
   _BLF        ??EnI_a,??rA??EnI_a
   LDR         R12,??DataTable37  ;; maxTxLen
   LDR         LR,[R12, #+0]
   LDR         R3,??DataTable58   ;; txLen
   LDR         R0,[R3, #+0]
   CMP         LR,R0
   BGE         ??uart0TxOne_14
   LDR         R12,??DataTable37  ;; maxTxLen
   LDR         LR,??DataTable58   ;; txLen
   LDR         R3,[LR, #+0]
   STR         R3,[R12, #+0]
   B           ??uart0TxOne_15
??uart0TxOne_14:
   LDR         R0,??DataTable37   ;; maxTxLen
   LDR         R12,??DataTable37  ;; maxTxLen
   LDR         LR,[R12, #+0]
   STR         LR,[R0, #+0]
??uart0TxOne_15:
   MOV         R3,#+0x0
   MOV         R2,R3
??uart0TxOne_11:
   MOV         R0,R2
??uart0TxOne_8:
   LDMIA       SP!,{PC}           ;; return
   DATA        
??uart0TxOne_2:
   DC32        txHead
        CFI EndBlock cfiBlock4

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable37:
   DC32        maxTxLen

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function uart0RxOne
   CODE32      
uart0RxOne:
   STMDB       SP!,{LR}           ;; Push
        CFI ?RET Frame(CFA, -4)
        CFI CFA R13+4
   MOV         R1,R0
   LDR         R2,??DataTable63   ;; rxLen
   LDR         R3,[R2, #+0]
   CMP         R3,#+0x0
   BEQ         ??uart0RxOne_0
   CMP         R1,#+0x0
   BNE         ??uart0RxOne_1
??uart0RxOne_0:
   MVN         R0,#+0x0
   B           ??uart0RxOne_2
??uart0RxOne_1:
   LDR         R12,??DataTable44  ;; maxRxLen
   LDR         LR,[R12, #+0]
   LDR         R0,??DataTable63   ;; rxLen
   LDR         R2,[R0, #+0]
   CMP         LR,R2
   BGE         ??uart0RxOne_3
   LDR         R3,??DataTable44   ;; maxRxLen
   LDR         R12,??DataTable63  ;; rxLen
   LDR         LR,[R12, #+0]
   STR         LR,[R3, #+0]
   B           ??uart0RxOne_4
??uart0RxOne_3:
   LDR         R0,??DataTable44   ;; maxRxLen
   LDR         R2,??DataTable44   ;; maxRxLen
   LDR         R3,[R2, #+0]
   STR         R3,[R0, #+0]
??uart0RxOne_4:
   _BLF        ??DiI_a,??rA??DiI_a
   LDR         R12,??uart0RxOne_5  ;; rxTail
   LDR         LR,[R12, #+0]
   LDR         R0,??DataTable61   ;; rxQueue
   LDRB        R2,[LR, +R0]
   STRB        R2,[R1, #+0]
   LDR         R3,??uart0RxOne_5  ;; rxTail
   LDR         R12,[R3, #+0]
   CMP         R12,#+0x3F
   BNE         ??uart0RxOne_6
   MOV         R0,#+0x0
   LDR         LR,??uart0RxOne_5  ;; rxTail
   STR         R0,[LR, #+0]
   B           ??uart0RxOne_7
??uart0RxOne_6:
   LDR         R0,??uart0RxOne_5  ;; rxTail
   LDR         R0,[R0, #+0]
   LDR         R2,??uart0RxOne_5  ;; rxTail
   LDR         R3,??uart0RxOne_5  ;; rxTail
   LDR         R12,[R3, #+0]
   ADDS        LR,R12,#+0x1
   STR         LR,[R2, #+0]
??uart0RxOne_7:
   LDR         R0,??DataTable63   ;; rxLen
   LDR         R2,??DataTable63   ;; rxLen
   LDR         R3,[R2, #+0]
   SUBS        R12,R3,#+0x1
   STR         R12,[R0, #+0]
   _BLF        ??EnI_a,??rA??EnI_a
   MOV         R0,#+0x0
??uart0RxOne_2:
   LDMIA       SP!,{PC}           ;; return
   DATA        
??uart0RxOne_5:
   DC32        rxTail
        CFI EndBlock cfiBlock5

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable44:
   DC32        maxRxLen

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
iirReg:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
lsrReg:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
isrPassCount:
        DS8 4

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock6 Using cfiCommon1
        CFI Function uart0Isr
   CODE32      
uart0Isr:
   SUB         LR,LR,#+0x4
        CFI ?RET R14_irq
   STMDB       SP!,{LR}
        CFI ?RET Frame(CFA_R13_irq, -4)
        CFI CFA_R13_irq R13_irq+4
   MRS         LR,SPSR
        CFI SPSR_irq R14_irq
   STMDB       SP!,{R12,LR}
        CFI R14_irq Frame(CFA_R13_irq, -8)
        CFI R12 Frame(CFA_R13_irq, -12)
        CFI CFA_R13_irq R13_irq+12
   MRS         LR,CPSR
   ORR         LR,LR,#+0x1F
   MSR         CPSR,LR
   STMDB       SP!,{R0-R3,LR}     ;; Push
        CFI R14_usr Frame(CFA_R13_usr, -4)
        CFI R3 Frame(CFA_R13_usr, -8)
        CFI R2 Frame(CFA_R13_usr, -12)
        CFI R1 Frame(CFA_R13_usr, -16)
        CFI R0 Frame(CFA_R13_usr, -20)
        CFI CFA_R13_usr R13_usr+20
   LDR         R0,??uart0Isr_0    ;; isrPassCount
   MOV         R1,#+0x0
   STR         R1,[R0, #+0]
??uart0Isr_1:
   MOV         R0,#+0xE0000008
   ORR         R0,R0,#+0xC000
   LDR         R0,[R0, #+0]
   LDR         R1,??uart0Isr_0+4  ;; iirReg
   STR         R0,[R1, #+0]
   TST         R0,#+0x1
   BNE         ??uart0Isr_2
   LDR         R0,??uart0Isr_0    ;; isrPassCount
   LDR         R1,[R0, #+0]
   CMP         R1,#+0x80
   BGE         ??uart0Isr_2
   LDR         R0,??uart0Isr_0+8  ;; lsrReg
   LDR         R1,??DataTable48   ;; 0xe000c014
   LDR         R1,[R1, #+0]
   STR         R1,[R0, #+0]
   LDR         R0,??uart0Isr_0+4  ;; iirReg
   LDR         R1,[R0, #+0]
   ANDS        R0,R1,#+0xF
   CMP         R0,#+0x2
   BEQ         ??uart0Isr_3
   CMP         R0,#+0x4
   BEQ         ??uart0Isr_4
   CMP         R0,#+0xA
   BEQ         ??uart0Isr_4
   B           ??uart0Isr_5
??uart0Isr_3:
   LDR         R0,??DataTable58   ;; txLen
   LDR         R1,[R0, #+0]
   CMP         R1,#+0x1
   BLT         ??uart0Isr_6
   LDR         R0,??uart0Isr_0+8  ;; lsrReg
   LDR         R1,[R0, #+0]
   TST         R1,#+0x60
   BEQ         ??uart0Isr_5
   MOV         R0,#+0xE0000000
   ORR         R0,R0,#+0xC000
   LDR         R1,??DataTable56   ;; txTail
   LDR         R1,[R1, #+0]
   LDR         R2,??DataTable51   ;; txQueue
   LDRB        R1,[R1, +R2]
   ANDS        R1,R1,#+0xFF       ;; Zero extend
   STR         R1,[R0, #+0]
   LDR         R0,??DataTable56   ;; txTail
   LDR         R2,[R0, #+0]
   CMP         R2,#+0xFF
   BNE         ??uart0Isr_7
   MOV         R0,#+0x0
   LDR         R1,??DataTable56   ;; txTail
   STR         R0,[R1, #+0]
   B           ??uart0Isr_8
??uart0Isr_7:
   LDR         R0,??DataTable56   ;; txTail
   LDR         R0,[R0, #+0]
   LDR         R2,??DataTable56   ;; txTail
   LDR         R1,??DataTable56   ;; txTail
   LDR         R1,[R1, #+0]
   ADDS        R1,R1,#+0x1
   STR         R1,[R2, #+0]
??uart0Isr_8:
   LDR         R0,??DataTable58   ;; txLen
   LDR         R2,??DataTable58   ;; txLen
   LDR         R1,[R2, #+0]
   SUBS        R2,R1,#+0x1
   STR         R2,[R0, #+0]
   B           ??uart0Isr_5
??uart0Isr_6:
   MOV         R0,#+0xE0000004
   ORR         R0,R0,#+0xC000
   MOV         R1,#+0x1
   STR         R1,[R0, #+0]
   LDR         R2,??DataTable59   ;; txIntEnable
   MOV         R0,#+0x0
   STR         R0,[R2, #+0]
   B           ??uart0Isr_5
??uart0Isr_4:
   LDR         R1,??uart0Isr_0+8  ;; lsrReg
   LDR         R2,[R1, #+0]
   TST         R2,#+0x1
   BEQ         ??uart0Isr_5
   LDR         R0,??DataTable63   ;; rxLen
   LDR         R1,[R0, #+0]
   CMP         R1,#+0x40
   BGE         ??uart0Isr_9
   LDR         R2,??uart0Isr_0+12  ;; rxHead
   LDR         R0,[R2, #+0]
   LDR         R1,??DataTable61   ;; rxQueue
   MOV         R2,#+0xE0000000
   ORR         R2,R2,#+0xC000
   LDR         R2,[R2, #+0]
   STRB        R2,[R0, +R1]
   LDR         R0,??uart0Isr_0+12  ;; rxHead
   LDR         R1,[R0, #+0]
   CMP         R1,#+0x3F
   BNE         ??uart0Isr_10
   MOV         R0,#+0x0
   LDR         R2,??uart0Isr_0+12  ;; rxHead
   STR         R0,[R2, #+0]
   B           ??uart0Isr_11
??uart0Isr_10:
   LDR         R0,??uart0Isr_0+12  ;; rxHead
   LDR         R0,[R0, #+0]
   LDR         R1,??uart0Isr_0+12  ;; rxHead
   LDR         R2,??uart0Isr_0+12  ;; rxHead
   LDR         R2,[R2, #+0]
   ADDS        R2,R2,#+0x1
   STR         R2,[R1, #+0]
??uart0Isr_11:
   LDR         R0,??DataTable63   ;; rxLen
   LDR         R1,??DataTable63   ;; rxLen
   LDR         R2,[R1, #+0]
   ADDS        R1,R2,#+0x1
   STR         R1,[R0, #+0]
   B           ??uart0Isr_12
??uart0Isr_9:
   LDR         R0,??DataTable65   ;; rxCharsDropped
   LDR         R2,??DataTable65   ;; rxCharsDropped
   LDR         R1,[R2, #+0]
   ADDS        R2,R1,#+0x1
   STR         R2,[R0, #+0]
??uart0Isr_12:
   MOV         R0,#+0xA
   _BLF        eventqPut,eventqPut??rA
??uart0Isr_5:
   LDR         R0,??uart0Isr_0    ;; isrPassCount
   LDR         R1,??uart0Isr_0    ;; isrPassCount
   LDR         R2,[R1, #+0]
   ADDS        R3,R2,#+0x1
   STR         R3,[R0, #+0]
   B           ??uart0Isr_1
??uart0Isr_2:
   LDR         R12,??DataTable69  ;; maxIsrPassCount
   LDR         LR,[R12, #+0]
   LDR         R0,??uart0Isr_0    ;; isrPassCount
   LDR         R1,[R0, #+0]
   CMP         LR,R1
   BGE         ??uart0Isr_13
   LDR         R2,??DataTable69   ;; maxIsrPassCount
   LDR         R3,??uart0Isr_0    ;; isrPassCount
   LDR         R12,[R3, #+0]
   STR         R12,[R2, #+0]
   B           ??uart0Isr_14
??uart0Isr_13:
   LDR         LR,??DataTable69   ;; maxIsrPassCount
   LDR         R0,??DataTable69   ;; maxIsrPassCount
   LDR         R1,[R0, #+0]
   STR         R1,[LR, #+0]
??uart0Isr_14:
   MVN         R2,#+0xCF
   BIC         R2,R2,#+0xF00
   MOV         R3,#+0x0
   STR         R3,[R2, #+0]
   LDMIA       SP!,{R0-R3,LR}     ;; Pop
        CFI R0 SameValue
        CFI R1 SameValue
        CFI R2 SameValue
        CFI R3 SameValue
        CFI R14_usr SameValue
        CFI CFA_R13_usr R13_usr+0
   MRS         R12,CPSR
   ORR         R12,R12,#+0x92
   BIC         R12,R12,#+0xD
   MSR         CPSR,R12
   LDMIA       SP!,{R12,LR}
        CFI R12 SameValue
        CFI CFA_R13_irq R13_irq+4
   MSR         SPSR,LR
        CFI R14_irq SPSR_irq
   LDMIA       SP!,{PC}^          ;; return
   DATA        
??uart0Isr_0:
   DC32        isrPassCount
   DC32        iirReg
   DC32        lsrReg
   DC32        rxHead
        CFI EndBlock cfiBlock6

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable48:
   DC32        0xe000c014

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable51:
   DC32        txQueue

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable56:
   DC32        txTail

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable58:
   DC32        txLen

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable59:
   DC32        txIntEnable

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable61:
   DC32        rxQueue

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable63:
   DC32        rxLen

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable65:
   DC32        rxCharsDropped

        RSEG CODE:CODE:NOROOT(2)
   DATA        
??DataTable69:
   DC32        maxIsrPassCount

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock7 Using cfiCommon0
        CFI Function __write
   CODE32      
__write:
   STMDB       SP!,{R4,LR}        ;; Push
        CFI ?RET Frame(CFA, -4)
        CFI R4 Frame(CFA, -8)
        CFI CFA R13+8
   MOV         R4,R0
   CMP         R4,#+0xA
   BNE         ??__write_0
   MOV         R0,#+0xD
   BL          uart0TxOne
??__write_0:
   MOV         R0,R4
   ANDS        R0,R0,#+0xFF       ;; Zero extend
   BL          uart0TxOne
   LDMIA       SP!,{R4,PC}        ;; return
        CFI EndBlock cfiBlock7

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

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

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

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

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

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

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

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

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

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

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

        RSEG DATA_ID:CONST:SORT:NOROOT(2)
`?<Initializer for validBaudrates>`:
        DC32 300, 1200, 2400, 9600, 19200, 38400, 57600, 115200

        RSEG DATA_ID:CONST:SORT:NOROOT(2)
`?*?DATA_ID`:

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

        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 "%s: maxTx[%d] maxRx[%...">`:
        DC8 "%s: maxTx[%d] maxRx[%d] maxIsrPass[%d]\015\012"
        DC8 0, 0, 0

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "%s: txDrop[%d] rxDrop...">`:
        DC8 "%s: txDrop[%d] rxDrop[%d] \015\012"
        DC8 0, 0, 0

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

        RSEG DATA_C:CONST:SORT:NOROOT(2)
`?<Constant "u0stat - display uart...">`:
        DC8 "u0stat - display uart status info"
        DC8 0, 0

        END
// 
// 2 364 bytes in segment CODE
//   120 bytes in segment DATA_C
//    32 bytes in segment DATA_I
//    32 bytes in segment DATA_ID
//   380 bytes in segment DATA_Z
//    24 bytes in segment INITTAB
// 
// 2 232 bytes of CODE  memory (+ 156 bytes shared)
//   152 bytes of CONST memory
//   412 bytes of DATA  memory
//
//Errors: none
//Warnings: 5
