forked from KolibriOS/kolibrios
317 lines
5.1 KiB
ArmAsm
317 lines
5.1 KiB
ArmAsm
|
;===========================================================================
|
||
|
; Copyright (c) 1990-2000 Info-ZIP. All rights reserved.
|
||
|
;
|
||
|
; See the accompanying file LICENSE, version 2000-Apr-09 or later
|
||
|
; (the contents of which are also included in unzip.h) for terms of use.
|
||
|
; If, for some reason, all these files are missing, the Info-ZIP license
|
||
|
; also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
|
||
|
;===========================================================================
|
||
|
; SWI veneers used by Zip/Unzip
|
||
|
;
|
||
|
|
||
|
r0 RN 0
|
||
|
r1 RN 1
|
||
|
r2 RN 2
|
||
|
r3 RN 3
|
||
|
r4 RN 4
|
||
|
r5 RN 5
|
||
|
r6 RN 6
|
||
|
r7 RN 7
|
||
|
r8 RN 8
|
||
|
r9 RN 9
|
||
|
r10 RN 10
|
||
|
r11 RN 11
|
||
|
r12 RN 12
|
||
|
sp RN 13
|
||
|
lr RN 14
|
||
|
pc RN 15
|
||
|
|
||
|
sl RN 10
|
||
|
fp RN 11
|
||
|
ip RN 12
|
||
|
|
||
|
|
||
|
XOS_Bit EQU &020000
|
||
|
|
||
|
OS_GBPB EQU &00000C
|
||
|
OS_File EQU &000008
|
||
|
OS_FSControl EQU &000029
|
||
|
OS_CLI EQU &000005
|
||
|
OS_ReadC EQU &000004
|
||
|
OS_ReadVarVal EQU &000023
|
||
|
DDEUtils_Prefix EQU &042580
|
||
|
Territory_ReadCurrentTimeZone EQU &043048
|
||
|
MimeMap_Translate EQU &050B00
|
||
|
|
||
|
MACRO
|
||
|
STARTCODE $name
|
||
|
EXPORT $name
|
||
|
$name
|
||
|
MEND
|
||
|
|
||
|
|
||
|
AREA |C$$code|, CODE, READONLY
|
||
|
|
||
|
; os_error *SWI_OS_FSControl_26(char *source, char *dest, int actionmask);
|
||
|
|
||
|
STARTCODE SWI_OS_FSControl_26
|
||
|
|
||
|
MOV ip, lr
|
||
|
|
||
|
MOV r3, r2
|
||
|
MOV r2, r1
|
||
|
MOV r1, r0
|
||
|
MOV r0, #26
|
||
|
|
||
|
SWI OS_FSControl + XOS_Bit
|
||
|
|
||
|
MOVVC r0, #0
|
||
|
|
||
|
MOVS pc, ip
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_FSControl_27(char *filename, int actionmask);
|
||
|
|
||
|
STARTCODE SWI_OS_FSControl_27
|
||
|
|
||
|
MOV ip, lr
|
||
|
|
||
|
MOV r3, r1
|
||
|
MOV r1, r0
|
||
|
MOV r0, #27
|
||
|
|
||
|
SWI OS_FSControl + XOS_Bit
|
||
|
|
||
|
MOVVC r0, #0
|
||
|
|
||
|
MOVS pc, ip
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_GBPB_9(char *dirname, void *buf, int *number,
|
||
|
; int *offset, int size, char *match);
|
||
|
|
||
|
STARTCODE SWI_OS_GBPB_9
|
||
|
|
||
|
MOV ip, sp
|
||
|
STMFD sp!, {r2-r6,lr}
|
||
|
LDMIA ip, {r5,r6}
|
||
|
LDR r4, [r3]
|
||
|
LDR r3, [r2]
|
||
|
MOV r2, r1
|
||
|
MOV r1, r0
|
||
|
MOV r0, #9
|
||
|
SWI OS_GBPB + XOS_Bit
|
||
|
LDMVSFD sp!, {r2-r6,pc}^
|
||
|
MOV r0, #0
|
||
|
LDMFD sp, {r5,r6}
|
||
|
STR r3, [r5]
|
||
|
STR r4, [r6]
|
||
|
LDMFD sp!, {r2-r6,pc}^
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_File_1(char *filename, int loadaddr, int execaddr, int attrib);
|
||
|
|
||
|
STARTCODE SWI_OS_File_1
|
||
|
|
||
|
STMFD sp!, {r5,lr}
|
||
|
MOV r5, r3
|
||
|
MOV r3, r2
|
||
|
MOV r2, r1
|
||
|
MOV r1, r0
|
||
|
MOV r0, #1
|
||
|
SWI OS_File + XOS_Bit
|
||
|
MOVVC r0, #0
|
||
|
LDMFD sp!, {r5,pc}^
|
||
|
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_File_5(char *filename, int *objtype, int *loadaddr,
|
||
|
; int *execaddr, int *length, int *attrib);
|
||
|
|
||
|
STARTCODE SWI_OS_File_5
|
||
|
|
||
|
STMFD sp!, {r1-r5,lr}
|
||
|
MOV r1, r0
|
||
|
MOV r0, #5
|
||
|
SWI OS_File + XOS_Bit
|
||
|
LDMVSFD sp!, {r1-r5,pc}^
|
||
|
LDR lr, [sp]
|
||
|
TEQ lr, #0
|
||
|
STRNE r0, [lr]
|
||
|
LDR lr, [sp, #4]
|
||
|
TEQ lr ,#0
|
||
|
STRNE r2, [lr]
|
||
|
LDR lr, [sp, #8]
|
||
|
TEQ lr, #0
|
||
|
STRNE r3, [lr]
|
||
|
LDR lr, [sp ,#24]
|
||
|
TEQ lr, #0
|
||
|
STRNE r4, [lr]
|
||
|
LDR lr, [sp ,#28]
|
||
|
TEQ lr, #0
|
||
|
STRNE r5, [lr]
|
||
|
MOV r0, #0
|
||
|
LDMFD sp!, {r1-r5,pc}^
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_File_6(char *filename);
|
||
|
|
||
|
STARTCODE SWI_OS_File_6
|
||
|
|
||
|
STMFD sp!, {r4-r5,lr}
|
||
|
MOV r1, r0
|
||
|
MOV r0, #6
|
||
|
SWI OS_File + XOS_Bit
|
||
|
MOVVC r0, #0
|
||
|
LDMFD sp!, {r4-r5,pc}^
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_File_7(char *filename, int loadaddr, int execaddr, int size);
|
||
|
|
||
|
STARTCODE SWI_OS_File_7
|
||
|
|
||
|
STMFD sp!, {r4-r5,lr}
|
||
|
MOV r5, r3
|
||
|
MOV r4, #0
|
||
|
MOV r3, r2
|
||
|
MOV r2, r1
|
||
|
MOV r1, r0
|
||
|
MOV r0, #7
|
||
|
SWI OS_File + XOS_Bit
|
||
|
MOVVC r0, #0
|
||
|
LDMFD sp!, {r4-r5,pc}^
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_File_8(char *dirname);
|
||
|
|
||
|
STARTCODE SWI_OS_File_8
|
||
|
|
||
|
STMFD sp!, {r4,lr}
|
||
|
MOV r1, r0
|
||
|
MOV r4, #0
|
||
|
MOV r0, #8
|
||
|
SWI OS_File + XOS_Bit
|
||
|
MOVVC r0, #0
|
||
|
LDMFD sp!, {r4,pc}^
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_File_18(char *filename, int filetype);
|
||
|
|
||
|
STARTCODE SWI_OS_File_18
|
||
|
|
||
|
STMFD sp!, {r4-r5,lr}
|
||
|
MOV r2, r1
|
||
|
MOV r1, r0
|
||
|
MOV r0, #18
|
||
|
SWI OS_File + XOS_Bit
|
||
|
MOVVC r0, #0
|
||
|
LDMFD sp!, {r4-r5,pc}^
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_CLI(char *cmd);
|
||
|
|
||
|
STARTCODE SWI_OS_CLI
|
||
|
|
||
|
MOV ip, lr
|
||
|
SWI OS_CLI + XOS_Bit
|
||
|
MOVVC r0, #0
|
||
|
MOVS pc, ip
|
||
|
|
||
|
|
||
|
; int SWI_OS_ReadC(void);
|
||
|
|
||
|
STARTCODE SWI_OS_ReadC
|
||
|
|
||
|
MOV ip, lr
|
||
|
SWI OS_ReadC + XOS_Bit
|
||
|
MOVS pc, ip
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_ReadVarVal(char *var, char *buf, int len, int *bytesused);
|
||
|
|
||
|
STARTCODE SWI_OS_ReadVarVal
|
||
|
|
||
|
STMFD sp!, {r4,lr}
|
||
|
MOV ip, r3
|
||
|
MOV r3, #0
|
||
|
MOV r4, #0
|
||
|
SWI OS_ReadVarVal + XOS_Bit
|
||
|
LDMVSFD sp!, {r4,pc}^
|
||
|
TEQ ip, #0
|
||
|
STRNE r2, [ip]
|
||
|
MOV r0, #0
|
||
|
LDMFD sp!, {r4,pc}^
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_FSControl_54(char *buffer, int dir, char *fsname, int *size);
|
||
|
|
||
|
STARTCODE SWI_OS_FSControl_54
|
||
|
|
||
|
STMFD sp!, {r3-r6,lr}
|
||
|
LDR r5, [r3]
|
||
|
MOV r3, r2
|
||
|
MOV r2, r1
|
||
|
MOV r1, r0
|
||
|
MOV r0, #54
|
||
|
SWI OS_FSControl + XOS_Bit
|
||
|
LDMVSFD sp!, {r3-r6,pc}^
|
||
|
MOV r0, #0
|
||
|
LDMFD sp!, {r3}
|
||
|
STR r5, [r3]
|
||
|
LDMFD sp!, {r4-r6,pc}^
|
||
|
|
||
|
|
||
|
; os_error *SWI_OS_FSControl_37(char *pathname, char *buffer, int *size);
|
||
|
|
||
|
STARTCODE SWI_OS_FSControl_37
|
||
|
|
||
|
STMFD sp!, {r2,r3-r5,lr}
|
||
|
LDR r5, [r2]
|
||
|
MOV r3, #0
|
||
|
MOV r4, #0
|
||
|
MOV r2, r1
|
||
|
MOV r1, r0
|
||
|
MOV r0, #37
|
||
|
SWI OS_FSControl + XOS_Bit
|
||
|
LDMVSFD sp!, {r2,r3-r5,pc}^
|
||
|
MOV r0, #0
|
||
|
LDMFD sp!, {r2}
|
||
|
STR r5, [r2]
|
||
|
LDMFD sp!, {r3-r5,pc}^
|
||
|
|
||
|
|
||
|
; os_error *SWI_DDEUtils_Prefix(char *dir);
|
||
|
|
||
|
STARTCODE SWI_DDEUtils_Prefix
|
||
|
|
||
|
MOV ip, lr
|
||
|
SWI DDEUtils_Prefix + XOS_Bit
|
||
|
MOVVC r0, #0
|
||
|
MOVS pc, ip
|
||
|
|
||
|
; int SWI_Read_Timezone(void);
|
||
|
|
||
|
STARTCODE SWI_Read_Timezone
|
||
|
|
||
|
MOV ip, lr
|
||
|
SWI Territory_ReadCurrentTimeZone + XOS_Bit
|
||
|
MOVVC r0, r1
|
||
|
MOVVS r0, #0
|
||
|
MOVS pc, ip
|
||
|
|
||
|
|
||
|
; int SWI_MimeMap_Translate(char *ext);
|
||
|
|
||
|
STARTCODE SWI_MimeMap_Translate
|
||
|
MOV ip,lr
|
||
|
MOV r1, r0
|
||
|
MOV r0, #3
|
||
|
MOV r2, #0
|
||
|
SWI MimeMap_Translate + XOS_Bit
|
||
|
MOVVC r0, r3
|
||
|
MVNVS r0, #0 ; return -1 on error
|
||
|
MOVS pc, ip
|
||
|
|
||
|
|
||
|
END
|