;arm

;пример работающего эльфа на асме
;что-то серьёзное делать не получится, fasmarm не поддерживает релокейшны

        include "%fasminc%\x.inc"

; тип выходного файла
USEDWARF = 1

if USEDWARF = 1

        format	ELF DWARF executable
        section	'main' executable readable writeable align 16
else
        format	ELF executable
        segment	executable readable writeable

end if
        entry 	main
        code32
ELF_BEGIN:

main:
        stmfd   sp!,{r1-r7,lr}

        adr     r0, .hello
        mov     r1, 0
        ldr     r2, .SID_ANY_LEN
        swi     0x15D ;TextID_Create(const void * wstr , int  flag , int len);

        mov     r1, r0
        ldr     r0, .header
        ldr     r2, .icon
        mov     r3, 1
        mov     r4, 0
        stmfd   sp!, {r4}
        stmfd   sp!, {r4}
        swi     0x257 ;MessageBox
        add     sp, sp, 8

        ;SUBPROC(elf_exit)
        adr     r0, elf_exit
        swi     0x108

        ;return 0
        mov     r0,0
        ldmfd   sp!, {r1-r7,pc}

.SID_ANY_LEN:   dw 0xFFFF
.icon:	dw 0xFFFF
.header:dw 0x6FFFFFFF
.hello: du	'Hello world', 0

align 4
elf_exit:
        STMFD   SP!, {LR}
        swi     0x8104 ;mfree_adr()
        mov     r1, r0
        adr     r0, ELF_BEGIN
        LDMFD   SP!, {LR}
        bx      r1


if USEDWARF = 1

        section '.dynconst' readable align 4
        ; сюда по идее константы нужно класть
        section '.dynconstcnt' readable align 4
        dw	0 ;число констант

        section '.dynpage' readable align 4
        ; сюда по идее страницы с константами нужно класть
        section '.dynpagecnt' readable align 4
        dw	0 ;число страниц

else
	;тут тоже константы со старницами, но не отдельными сегментами
        dw	0
        dw	0

end if
