1145
|
1 **************************************************
|
|
2 * System Call: F$SSVC
|
|
3 *
|
|
4 * Function: Allocate a 64 byte memory block
|
|
5 *
|
|
6 * Input: Y = Address of service request init table
|
|
7 *
|
|
8 * Output: None
|
|
9 *
|
|
10 * Error: CC = C bit set; B = error code
|
|
11 *
|
|
12 FSSvc ldy R$Y,u get pointer to table
|
|
13 bra L037F start moving
|
|
14 * Main move loop
|
|
15 L036D clra clear MSB of table offset
|
|
16 lslb multiply function # by 2 to get offset into table
|
|
17 tfr d,u copy it to U
|
|
18 ldd ,y++ get vector to function handler
|
|
19 leax d,y offset X from current Y
|
|
20 ldd <D.SysDis get system dispatch table pointer
|
|
21 stx d,u save vector into place
|
|
22 bcs L037F it was a privliged call, skip ahead
|
|
23 ldd <D.UsrDis get user displat table pointer
|
|
24 stx d,u save vector into place
|
|
25 L037F ldb ,y+ get callcode
|
|
26 cmpb #$80 done?
|
|
27 bne L036D no, keep going
|
|
28 rts return
|