;->s.count
;
;


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
R13 RN 13
R14 RN 14
R15 RN 15
PC  RN 15


a1 RN 0
a2 RN 1
a3 RN 2
a4 RN 3
v1 RN 4
v2 RN 5
v3 RN 6
v4 RN 7
v5 RN 8
v6 RN 9
sl RN 10
fp RN 11
ip RN 12
sp RN 13
lk RN 14
lr RN 14
pc RN 15

f0 FN 0
f1 FN 1
f2 FN 2
f3 FN 3
f4 FN 4
f5 FN 5
f6 FN 6
f7 FN 7




XOS_MASK      * &00020000 ; mask to make a swi a RISC OS V-error SWI
osbyte * 6
OS_Byte * 6
osvduv * 49
osword * 7
xoffch * 19
xonch  * 17
OS_EnterOS * &16
SVC_Mode * 3
OS_SerialOp * &57

OS_CallAVector * &34
XOS_CallAVector * (OS_CallAVector | XOS_MASK)

Overflow_Flag * (1<<28)
Carry_Flag * (1<<29)


 AREA  SRASM, REL, CODE


; ****************************************************************************


; space==1 bytes in buffer 2=space
;
; buffercount(int space,int buffer);


buffercount
 MOV   ip,sp
 STMFD sp!,{v1-v6,sl,fp,ip,lk,pc}
 SUB   fp,ip,#4

 MOV       R3,PC

 TEQ       R0, R0
 TEQ       PC, PC          ; EQ if in a 32-bit mode, NE if 26-bit
 MRSEQ     R3, CPSR
 MOVNE     R3, pc

 CMP       R0,#1
 ORRNE     R3,R3,#Carry_Flag
 BICEQ     R3,R3,#Carry_Flag

 TEQ       R0, R0
 TEQ       PC, PC          ; EQ if in a 32-bit mode, NE if 26-bit
 MSREQ     CPSR_f, R3 
 TEQNEP    R3,#0
 MOV       R3,R3

 MOV       R9,#&16
 SWI       XOS_CallAVector

 ORR       R0,R1,R2,LSL#8

 LDMEA fp,{v1-v6,sl,fp,sp,pc}


 EXPORT buffercount

 END
