; Armalyser analysis of ADFS::HardDisc.$.!Boot.Resources.!SerialDev._26bit.serlist

; Generated by Armalyser 0.61 (22-Apr-2007)
; From ADFS::HardDisc.$.!Boot.Resources.!SerialDev._26bit.serlist
; Assemble with ObjAsm -ABSolute and link with Link -bin

        AREA |C$$code|, CODE, READONLY
|x$codeseg| DATA

|L00008084.Symbol|
        DCB     "driver_init",0                 ; Symbol -/-
        DCD     &FF00000C                       ; Symbol Word -/- Func: driver_init

|L00008094.driver_init|
        MOV     ip,sp                           ; Function entry, (preserves flags)
        STMFD   sp!,{v1-v6,fp,ip,lr,pc}
        SUB     fp,ip,#4
        CMP     sp,sl
        BLLT    |x$stack_overflow|              ; -> SharedCLib Func: x$stack_overflow
        SUB     sp,sp,#&78                      ; ="x" (120)
        MOV     v5,#0
        MOV     v3,v5
        MOV     a1,#9
        STR     a1,[sp,#&050]                   ; =80
        ADR     a1,|L000081E4.String|           ; -> String: "<SerialDev$Path>Modules",0
        STR     a1,[sp,#&054]                   ; =84
        ADD     a1,sp,#&3C                      ; ="<" (60)
        STR     a1,[sp,#&058]                   ; =88
        STR     v5,[sp,#&060]                   ; =96
        MOV     a1,#&14                         ; =20
        STR     a1,[sp,#&064]                   ; =100
        STR     v5,[sp,#&068]                   ; =104
        MOV     v6,#1
        LDR     v4,|L000081FC.Address|          ; ->-> Word: &00000000
|L000080E4|
        STR     v6,[sp,#&05C]                   ; =92
        ADD     a1,sp,#&50                      ; ="P" (80)
        BL      |L00008A2C|
        LDR     a1,[sp,#&05C]                   ; =92
        CMP     a1,#0
        BEQ     |L000081C4|
        ADD     a3,sp,#&3C                      ; ="<" (60)
        MOV     a1,sp
        ADR     a2,|L00008200.String|           ; -> String: "<SerialDev$Path>Modules.%s.Driver",0
        BL      |_sprintf|                      ; -> SharedCLib Func: _sprintf
        MOV     a1,sp
        ADR     a2,|L00008224.String|           ; -> String: "rb",0
        BL      |fopen|                         ; -> SharedCLib Func: fopen
        MOVS    v1,a1
        BEQ     |L000081C4|
        ADD     a1,v3,v3,LSL #1
        RSB     a1,v3,a1,LSL #3
        ADD     v2,v4,a1,LSL #2
        ADD     a1,v2,#4
        ADD     a2,sp,#&3C                      ; ="<" (60)
        BL      |strcpy|                        ; -> SharedCLib Func: strcpy
        MOV     a1,v1
        MOV     a3,#0
        MOV     a2,#&80                         ; ="" (128)
        BL      |fseek|                         ; -> SharedCLib Func: fseek
        ADD     a1,v2,#&14                      ; =20
        MOV     a4,v1
        MOV     a3,#&20                         ; =" " (32)
        MOV     a2,#1
        BL      |fread|                         ; -> SharedCLib Func: fread
        ADD     a1,v2,#&34                      ; ="4" (52)
        MOV     a4,v1
        MOV     a3,#&20                         ; =" " (32)
        MOV     a2,#1
        BL      |fread|                         ; -> SharedCLib Func: fread
        ADD     a1,v2,#&54                      ; ="T" (84)
        MOV     a4,v1
        MOV     a3,#4
        MOV     a2,#1
        BL      |fread|                         ; -> SharedCLib Func: fread
        ADD     a1,v2,#&58                      ; ="X" (88)
        MOV     a4,v1
        MOV     a3,#4
        MOV     a2,#1
        BL      |fread|                         ; -> SharedCLib Func: fread
        MOV     a1,v3
        ADD     v3,a1,#1
        ADD     ip,a1,a1,LSL #1
        RSB     a1,a1,ip,LSL #3
        ADD     a1,v4,a1,LSL #2
        MOV     a4,v1
        MOV     a3,#4
        MOV     a2,#1
        BL      |fread|                         ; -> SharedCLib Func: fread
        MOV     a1,v1
        BL      |fclose|                        ; -> SharedCLib Func: fclose
|L000081C4|
        LDR     a1,[sp,#&060]                   ; =96
        CMP     a1,#0
        BGE     |L000080E4|
        ADD     a1,v3,v3,LSL #1
        RSB     a1,v3,a1,LSL #3
        ADD     a1,v4,a1,LSL #2
        STRB    v5,[a1,#&014]                   ; =20
        LDMDB   fp,{v1-v6,fp,sp,pc}             ; Function exit, Ends

|L000081E4.String|
        DCB     "<SerialDev$Path>Modules",0     ; String -/- (referenced)
|L000081FC.Address|
        DCD     |L00009EFC|                     ; Address r/- (referenced) -> Word: &00000000
|L00008200.String|
        DCB     "<SerialDev$Path>Modules.%s.Driver",0,0,0 ; String -/- (referenced)
|L00008224.String|
        DCB     "rb",0,0                        ;~~ String -/- (referenced)

|L00008228.Symbol|
        DCB     "main",0,0,0,0                  ; Symbol -/-
        DCD     &FF000008                       ; Symbol Word -/- Func: main

|main|
        MOV     ip,sp                           ; Entry Point, (preserves flags), (Referenced)
        STMFD   sp!,{a1,a2,v1-v6,fp,ip,lr,pc}
        SUB     fp,ip,#4
        SUB     ip,sp,#&8F,30                   ; =&23C
        CMP     ip,sl
        BLLT    |x$stack_overflow_1|            ; -> SharedCLib Func: x$stack_overflow_1
        MOV     v2,a1
        MOV     v1,a2
        SUB     sp,sp,#&02,24                   ; =&200
        MOV     v6,#0
        MOV     v5,v6
        MOV     v4,v6
        LDR     a2,[v1,#0]
        MOV     a1,v6
        B       |L00008274|                     ; Ends
|L00008270|
        ADD     a1,a1,#1
|L00008274|
        LDRB    a3,[a2,a1]
        CMP     a3,#0
        BNE     |L00008270|
        B       |L00008288|                     ; Ends
|L00008284|
        SUB     a1,a1,#1
|L00008288|
        LDRB    a3,[a2,a1]
        CMP     a3,#&2E                         ; ="." (46)
        BEQ     |L0000829C|
        CMP     a1,#0
        BGT     |L00008284|
|L0000829C|
        CMP     a3,#&2E                         ; ="." (46)
        ADDEQ   a1,a1,#1
        ADD     a2,a2,a1
        MOV     a1,sp
        BL      |strcpy|                        ; -> SharedCLib Func: strcpy
        MOV     v3,#1
        MOV     a1,v3
        B       |L000082F0|                     ; Ends
|L000082BC|
        LDR     a2,[v1,a1,LSL #2]
        LDRB    a3,[a2,#0]
        CMP     a3,#&2D                         ; ="-" (45)
        BNE     |L000082E8|
        LDRB    a2,[a2,#1]
        CMP     a2,#&56                         ; ="V" (86)
        BEQ     |L000082E0|
        CMP     a2,#&76                         ; ="v" (118)
        BNE     |L000082E8|
|L000082E0|
        MOV     v5,v3
        B       |L000082EC|                     ; Ends
|L000082E8|
        MOV     v4,v3
|L000082EC|
        ADD     a1,a1,#1
|L000082F0|
        CMP     a1,v2
        BLT     |L000082BC|
        CMP     v4,#0
        BEQ     |L00008318|
        LDR     a1,|L00008330.Address|          ; ->-> SCL static data: &00000000
        MOV     a3,sp
        ADR     a2,|L00008334.String|           ; -> String: "Usage:\n    %s [-v]\n        -v  :  verbose\n\n",0
        BL      |_fprintf|                      ; -> SharedCLib Func: _fprintf
        MOV     a1,#1
        BL      |exit|                          ; -> SharedCLib Func: exit
|L00008318|
        ADR     a1,|L00008360.String|           ; -> String: "Serial devices found in <SerialDev$Path>Modules:\n",0
        BL      |_printf|                       ; -> SharedCLib Func: _printf
        BL      |L00008094.driver_init|         ; -> Func: driver_init (preserves flags)
        MOV     v2,v6
        LDR     v4,|L000081FC.Address|          ; ->-> Word: &00000000
        B       |L00008458|                     ; Ends

|L00008330.Address|
        DCD     |L00009408|     		; Address r/- (referenced) -> SCL static data: &00000000
|L00008334.String|
        DCB     "Usage:\n    %s [-v]\n        -v  :  verbose\n\n",0 ; String -/- (referenced)
|L00008360.String|
        DCB     "Serial devices found in <SerialDev$Path>Modules:\n",0,0,0 ; String -/- (referenced)

|L00008394|
        LDR     a1,[v1,#0]
        MOV     a4,a1,ASR #8
        ADD     a3,v1,#4
        STMFD   sp!,{a3,a4}
        LDR     a1,[v1,#&054]                   ; =84
        AND     a4,a1,#&FF                      ; ="" (255)
        STMFD   sp!,{a4}
        MOV     a4,a1,ASR #16
        ADD     a3,v1,#&34                      ; ="4" (52)
        ADD     a2,v1,#&14                      ; =20
        ADR     a1,|L00008488.String|           ; -> String: "%s\n   by %s (Version %u.%02u - %s - 0x%02X)\n",0
        BL      |_printf|                       ; -> SharedCLib Func: _printf
        ADD     sp,sp,#&0C                      ; =12
        CMP     v5,#0
        BEQ     |L00008454|
        LDR     a1,[v1,#&058]                   ; =88
        ANDS    a2,a1,#1
        ADDNE   a2,v3,a1,ASR #24
        ADRNE   a1,|L000084B8.String|           ; -> String: "      %u ports available\n",0
        BLNE    |_printf|                       ; -> SharedCLib Func: _printf
        LDR     a1,[v1,#&058]                   ; =88
        ANDS    a1,a1,#2
        ADRNE   a1,|L000084D4.String|           ; -> String: "      Split baud rates supported\n",0
        BLNE    |_printf|                       ; -> SharedCLib Func: _printf
        LDR     a1,[v1,#&058]                   ; =88
        ANDS    a1,a1,#4
        ADRNE   a1,|L000084F8.String|           ; -> String: "      Has >1 byte FIFO\n",0
        BLNE    |_printf|                       ; -> SharedCLib Func: _printf
        LDR     a1,[v1,#&058]                   ; =88
        ANDS    a1,a1,#8
        ADRNE   a1,|L00008510.String|           ; -> String: "      Can use Set control lines to generate a break\n",0
        BLNE    |_printf|                       ; -> SharedCLib Func: _printf
        LDR     a1,[v1,#&058]                   ; =88
        ANDS    a1,a1,#&10                      ; =16
        ADRNE   a1,|L00008548.String|           ; -> String: "      Requires polling (by function 19)\n",0
        BLNE    |_printf|                       ; -> SharedCLib Func: _printf
        LDR     a1,[v1,#&058]                   ; =88
        ANDS    a1,a1,#&20                      ; =" " (32)
        ADRNE   a1,|L00008574.String|           ; -> String: "      Won\'t empty (is a shared buffer)\n",0
        BLNE    |_printf|                       ; -> SharedCLib Func: _printf
        LDR     a1,[v1,#&058]                   ; =88
        ANDS    a1,a1,#&40                      ; ="@" (64)
        ADRNE   a1,|L0000859C.String|           ; -> String: "      Supports block get/put operations\n",0
        BLNE    |_printf|                       ; -> SharedCLib Func: _printf
        LDR     a1,[v1,#&058]                   ; =88
        ANDS    a1,a1,#&80                      ; ="" (128)
        ADRNE   a1,|L000085C8.String|           ; -> String: "      Prefers not to overlap serial IO and disk IO\n",0
        BLNE    |_printf|                       ; -> SharedCLib Func: _printf
|L00008454|
        ADD     v2,v2,#1
|L00008458|
        ADD     a1,v2,v2,LSL #1
        RSB     a1,v2,a1,LSL #3
        ADD     v1,v4,a1,LSL #2
        LDRB    a1,[v1,#&014]                   ; =20
        CMP     a1,#0
        BNE     |L00008394|
        CMP     v5,#0
        MOVEQ   a2,sp
        ADREQ   a1,|L000085FC.String|           ; -> String: "\nAdditional information available with \"%s -v\"\n\n",0
        BLEQ    |_printf|                       ; -> SharedCLib Func: _printf
        MOV     a1,#0
        LDMDB   fp,{v1-v6,fp,sp,pc}             ; Function exit, Ends

|L00008488.String|
        DCB     "%s\n   by %s (Version %u.%02u - %s - 0x%02X)\n",0,0,0,0 ; String -/- (referenced)
|L000084B8.String|
        DCB     "      %u ports available\n",0,0,0 ; String -/- (referenced)
|L000084D4.String|
        DCB     "      Split baud rates supported\n",0,0,0 ; String -/- (referenced)
|L000084F8.String|
        DCB     "      Has >1 byte FIFO\n",0    ; String -/- (referenced)
|L00008510.String|
        DCB     "      Can use Set control lines to generate a break\n",0,0,0,0 ; String -/- (referenced)
|L00008548.String|
        DCB     "      Requires polling (by function 19)\n",0,0,0,0 ; String -/- (referenced)
|L00008574.String|
        DCB     "      Won\'t empty (is a shared buffer)\n",0 ; String -/- (referenced)
|L0000859C.String|
        DCB     "      Supports block get/put operations\n",0,0,0,0 ; String -/- (referenced)
|L000085C8.String|
        DCB     "      Prefers not to overlap serial IO and disk IO\n",0 ; String -/- (referenced)
|L000085FC.String|
        DCB     "\nAdditional information available with \"%s -v\"\n\n",0,0,0,0 ; String -/- (referenced)

|L0000869C|
        MOV     a3,a2                           ; Function entry
        B       |_kernel_swi|                   ; -> SharedCLib Func: _kernel_swi OS_GBPB, Ends

|L00008A2C|
        MOV     a2,a1                           ; Function entry
        MOV     a1,#&0C                         ; =12
        B       |L0000869C|                     ; Ends



        AREA |C$$data|,DATA
|x$dataseg|
|L00009408|
	% &100

        AREA |C$$zidata|,NOINIT
|x$bssseg|
|L00009EFC|
        % &0000AA7C-&00009EFC


        EXPORT |main|

        IMPORT |x$stack_overflow|
        IMPORT |_sprintf|
        IMPORT |fopen|
        IMPORT |strcpy|
        IMPORT |fseek|
        IMPORT |fread|
        IMPORT |fread|
        IMPORT |fread|
        IMPORT |fread|
        IMPORT |fread|
        IMPORT |fclose|
        IMPORT |x$stack_overflow_1|
        IMPORT |strcpy|
        IMPORT |_fprintf|
        IMPORT |exit|
        IMPORT |_printf|
        IMPORT |_printf|
        IMPORT |_printf|
        IMPORT |_printf|
        IMPORT |_printf|
        IMPORT |_printf|
        IMPORT |_printf|
        IMPORT |_printf|
        IMPORT |_printf|
        IMPORT |_printf|
        IMPORT |_printf|
        IMPORT |_kernel_swi|


        END

