.title trpset ; DECUS C Calling Format ; ; jsr r5,csv$ ;save r2,r3, and r4 ; ;r5 is parameter base ; ;c$pmtr(r5) is first argument ; ;c$pmtr+2(r5) is second argument ; ;... ; ;return args in r0 ; ... ; user code ; ... ; ; jmp cret$ ;restore r2-r5 and return ; rts pc ;does the same (cret$ follows csv$) ; ; csv$ and cret$ need be used only if arguments are used ; .mcall .qset .mcall .trpset .close .exit .psect c$code queue: .blkw 14.*10. rtqset:: .qset #queue,#14. ; .trpset #1$,#sytrap mov #1$,r0 emt 375 rts pc 1$: .byte 0,3 ; .trpset .word 2$ 2$: bcc 3$ ; 0 - trap to 4 inc arg ; 1 - trap to 10 3$: mov r0,arg+2 ; save registers mov #arg+4,r0 mov r1,(r0)+ mov r2,(r0)+ mov r3,(r0)+ mov r4,(r0)+ mov r5,(r0)+ mov sp,(r0)+ mov (sp),(r0)+ mov #arg,-(sp) jsr pc,sytrap ; process externally ; br . nop clr r0 .exit ; terminate program arg: .blkw 9. .end