home *** CD-ROM | disk | FTP | other *** search
- ; low-level routines for PGP (file handling etc)
- ;
-
- r0 RN 0
- r1 RN 1
- r2 RN 2
- r3 RN 3
- r4 RN 4
- r5 RN 5
- sp RN 13
- lr RN 14
- pc RN 15
-
- XOS_Bit EQU &20000
- SWI_OS_WriteC EQU &00000
- SWI_OS_ReadC EQU &00004
- SWI_OS_Byte EQU &00006
- SWI_OS_File EQU &00008
- SWI_OS_Args EQU &00009
- SWI_OS_GBPB EQU &0000C
- SWI_OS_EnterOS EQU &00016
-
- AREA |A$$Code|, CODE, READONLY
-
- EXPORT access
- EXPORT strlwr
- EXPORT read
- EXPORT getch
- EXPORT fileno
- EXPORT lseek
- EXPORT write
- EXPORT ro_flush_input
- EXPORT ioc_t1
- EXPORT putch
-
- fileno LDR r0,[r0,#20]
- MOVS pc,lr
-
- strlwr LDRB r1,[r0],#1
- CMP r1,#0
- MOVEQS pc,lr
- SUB r2,r1,#97
- CMP r2,#26
- ORRLO r1,r1,#32
- STRLOB r1,[r0,#-1]
- B strlwr
-
- read STMFD sp!,{r4,r5,lr}
- MOV r5,r1
- MOV r3,r2
- MOV r2,r1
- MOV r1,r0
- MOV r0,#4
- SWI XOS_Bit+SWI_OS_GBPB
- SUB r0,r2,r5
- LDMFD sp!,{r4,r5,pc}^
-
- write STMFD sp!,{r4,r5,lr}
- MOV r5,r1
- MOV r3,r2
- MOV r2,r1
- MOV r1,r0
- MOV r0,#2
- SWI XOS_Bit+SWI_OS_GBPB
- SUB r0,r2,r5
- LDMFD sp!,{r4,r5,pc}^
-
- lseek MOV r3,r1 ; offset in r3
- MOV r1,r0 ; handle in r1
- CMP r2,#2
- BNE notend ; assume seek_set !
- MOV r0,#2
- SWI XOS_Bit+SWI_OS_Args
- ADD r3,r3,r2 ; now offset from start in r3
- notend MOV r2,r3
- MOV r0,#1
- SWI XOS_Bit+SWI_OS_Args
- MOVS pc,lr
-
- getch SWI XOS_Bit+SWI_OS_ReadC
- MOVS pc,lr
-
- access STMFD sp!,{r4,r5,lr}
- MOV r1,r0 ; assume access(...,0) i.e. does it exist?
- MOV r0,#17
- SWI XOS_Bit+SWI_OS_File
- CMP r0,#0
- MOVEQ r0,#1
- MOVNE r0,#0
- LDMFD sp!,{r4,r5,pc}^
-
- ro_flush_input
- MOV r0,#15
- MOV r1,#1
- SWI XOS_Bit+SWI_OS_Byte
- MOVS pc,lr
-
- ioc_t1 STMFD sp!,{lr}
- SWI XOS_Bit+SWI_OS_EnterOS ; SVC mode to use IOC
- MOV r2,#&3200000 ; IOC base
- STRB r2,[r2,#&5C] ; prepare for reading
- LDRB r1,[r2,#&50] ; read low byte
- LDRB r0,[r2,#&54] ; read high byte
- ADD r0,r1,r0,LSL#8 ; total
- TEQP pc,#0 ; return to USR mode
- MOV r0,r0 ; no-op to settle down
- LDMFD sp!,{pc}^
-
- putch SWI XOS_Bit+SWI_OS_WriteC
- MOVS pc,lr
-
- END
-