; Objasm source for RiscLua extensions
; GCW 12/05/06

	AREA RDIR,CODE
	EXPORT rdir
	EXPORT file_type


rdir
	STMFD sp!,{R1-R6,R14}
	MOV R6,#0
	MOV R5,#256
	MOV R4,R2
	MOV R3,#1
	MOV R2,R1
	MOV R1,R0
	MOV R0,#12
	SWI &2000C ; XOS_GBPB
	MOVVS R3,#0
	CMP R3,#1
	MOVEQ R0,R4
	MVNNE R0,#0
	LDMFD sp!,{R1-R6,pc}

file_type
       STMFD sp!, {R1-R6,R14}
       MOV R1,R0
       MOV R0,#23
       SWI &20008 ; XOS_File
       MOVVS R0,#0
       CMP R0,#0
       MVNEQ R0,R0
       MOVNE R0,R6
       LDMFD sp!, {R1-R6,pc}

        AREA SYSFUNC,CODE

        EXPORT swi_call
        EXPORT swi_str2num
        EXPORT peekw
        EXPORT peekb
;        EXPORT hack
;        EXPORT hacks
        EXPORT pokew
        EXPORT pokeb

swi_call
            STMFD sp!, {R4-R8,R12,R14}
            ORR R12,R0,#&20000   ; SWI number with X
            MOV R8,R1    ; base of register values
            LDMIA R8,{R0-R7}
            SWI &71       ; OS_CallASWIR12
            STMVCIA R8,{R0-R7}
            MOVVC R0,#0   ; return 0 for success
            LDMFD sp!, {R4-R8,R12,PC}

swi_str2num
                MOV R1,R0
                SWI &20039  ; XOS_SWINumberFromString
                MVNVS R0,#0 ; return -1 if error
                MOV pc,R14

peekw
                LDR R0,[R0]
;hack
;hacks
                MOV pc,R14
peekb
                LDRB R0,[R0]
                MOV pc,R14
pokew
                STR R1,[R0]
                MOV pc,R14
pokeb
                STRB R1,[R0]
                MOV pc,R14

           AREA GENERAL,CODE
           EXPORT sysrshift

sysrshift
                MOV R0,R0,LSR R1
                MOV pc,R14

;align
;                ADD R0,R0,#3
;                BIC R0,R0,#3
;                MOV pc,R14
       END
