; Extra - G.C.Wraith    1994
; assembly language low level functions for Armbob

	AREA SYSFUNC,CODE

	EXPORT get4op
	EXPORT shift4
	EXPORT Taskwin_query
	EXPORT Chain
	EXPORT Chain0
	EXPORT StartTask
	EXPORT StartTask0
	EXPORT Readline
	EXPORT Sysvar
	EXPORT Time
	EXPORT SwiSet
	EXPORT Align
	EXPORT SlotSize

get4op
 ANDS  R1,R0,#3
 RSBNE R1,R1,#4
 ADDNE R0,R0,R1
 LDR   R0,[R0]
 MOV   PC,R14 

shift4
 ANDS   R1,R0,#3
 RSBNE  R1,R1,#4
 ADDNE  R0,R0,R1
 ADD    R0,R0,#4
 MOV    PC,R14

Taskwin_query
 MOV     R0,#0
 SWI     &63380  ;XTaskWindow_TaskInfo
 MOV     PC,R14

StartTask
StartTask0
 SWI   &600DE  ;XWimp_StartTask
 MOV   PC,R14

title
           DCB "Chain",0
           ALIGN
mesg_list DCD 0
version   DCD 310
magic     DCD &4B534154

Chain
Chain0
 STR   R0,[R13,#-4]!
 LDR   R0,version
 LDR   R1,magic
 ADR   R2,title
 ADR   R3,mesg_list
 SWI   &600C0   ;XWimp_Initialise
 LDR   R0,[R13],#4
 SWI   &600DE  ;XWimp_StartTask
 STR   R0,[R13,#-4]!
 MOV   R0,R1
 LDR   R1,magic
 SWI   &600DD   ;XWimp_CloseDown
 LDR   R0,[R13],#4
 MOV   PC,R14

Readline
 STR    R0,[R13,#-4]!
 SWI    &2000E   ;XOS_ReadLine
 LDR    R0,[R13],#4
 MOV    R2,#0
 STRCCB R2,[R0,R1]
 MOVCC  R0,R1
 MOVCS  R0,#0
 MOV    PC,R14

Sysvar
 STR   R4,[R13,#-4]!
 MOV   R3,#0
 SWI   &20023   ;XOS_ReadVarVal
 MOV   R3,#0
 STRB  R3,[R1,R2]         ; put terminating null
 MOV   R0,R4               ; variable type
 LDR   R4,[R13],#4
 MOV   PC,R14

TimeBuf
         DCD 0
         DCD 0
Time
         ADR R1,TimeBuf
         MOV R0,#14
         MOV R2,#3
         STR R2,[R1]
         SWI &20007   ;XOS_Word
         MOV R0,R1
         MOV PC,R14

SwiSet
          STMFD R13!,{R1-R9,R12,R14}
          MOV   R12,R0
          MOV   R8,R1
          LDMFD R8!,{R0-R7}
          SWI   &20071   ;XOS_CallASWIR12
          STMFD R8!,{R0-R7}
          LDMFD R13!,{R1-R9,R12,PC}

Align
           TST   R0,#3
           ADDNE R0,R0,#4
           BIC   R0,R0,#3
           MOV   PC,R14  

SlotSize
           MVN  R1,#0
           SWI  &600EC   ;XWimp_SlotSize
           MOV  PC,R14          

           END

