A large commit.
[pdp8.git] / sw / adventure / work / DROP.RA
1 SECT DROP
2 / SUBROUTINE DROP(OBJECT,WHERE)
3 / C
4 / C PLACE AN OBJECT AT A GIVEN LOC, PREFIXING IT ONTO THE ATLOC LIST.
5 / C DECR HOLDNG IF THE OBJECT WAS BEING TOTED.
6 / C
7 / IMPLICIT INTEGER (A-Z)
8 / COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG
9 / DIMENSION ATLOC(150)
10 / DIMENSION LINK(200)
11 / DIMENSION PLACE(100)
12 / DIMENSION FIXED(100)
13
14 JA #ST
15 #XR, ORG .+10
16 TEXT +DROP +
17 #RET, SETX #XR
18 SETB #BASE
19 JA .+3
20 #BASE, ORG .+6
21 OBJECT, ORG .+3
22 WHERE, ORG .+3
23 ONE, F 1.0
24 HUND, F 100.0
25 ORG #BASE+30
26 FNOP
27 JA #RET
28 FNOP
29 #GOBAK, 0;0
30 #LBL=.
31 COMMON PLACOM
32 ATLOC, ORG .+702
33 LINK, ORG .+1130
34 PLACE, ORG .+454
35 FIXED, ORG .+454
36 HOLDNG, ORG .+3
37 ORG #LBL
38 #RTN, BASE #BASE
39 JA #GOBAK
40 #ST, STARTD
41 0210
42 FSTA #GOBAK,0
43 0200
44 SETX #XR
45 SETB #BASE
46 LDX 0,1
47 FSTA #BASE
48 FLDA% #BASE,1+
49 FSTA OBJECT
50 FLDA% #BASE,1+
51 FSTA WHERE
52 STARTF
53 FLDA% WHERE /Pre-load index regs
54 ATX 6
55 FLDA% OBJECT
56 ATX 7
57 / IF(OBJECT.GT.100)GOTO 1
58 FSUB HUND
59 ATX 5 /Save object-100
60 JGT #1
61 / IF(PLACE(OBJECT).EQ.-1)HOLDNG=HOLDNG-1
62 FLDA ONE
63 FADD PLACE-3,7
64 JNE #G1
65 FLDA HOLDNG
66 FSUB ONE
67 FSTA HOLDNG
68 / PLACE(OBJECT)=WHERE
69 #G1, FLDA% WHERE
70 FSTA PLACE-3,7
71 / GOTO 2
72 JA #2
73
74 / 1 FIXED(OBJECT-100)=WHERE
75 #1, FLDA% WHERE
76 FSTA FIXED-3,5
77
78 / 2 IF(WHERE.LE.0)RETURN
79 #2, JLE #RTN
80 / LINK(OBJECT)=ATLOC(WHERE)
81 #G2, FLDA ATLOC-3,6
82 FSTA LINK-3,7
83 / ATLOC(WHERE)=OBJECT
84 XTA 7
85 FSTA ATLOC-3,6
86 / RETURN
87 / END
88 JA #RTN
89 END