8 !---------------------------------------------------------------------------
10 !----------------------------------------------------------------------------
11 ass_z: mov (sp)+,d0 ; bra 5f
12 ass_l: move.b (a3)+,-(sp) ; move.b (a3)+,1(sp)
16 4: move.l (sp)+,d0 ; bpl 3f
18 2: move.w (sp)+,d0 ; bpl 3f
19 asr.w #1,d0 ; ext.l d0
22 asp_1W: asp_2W: asp_3W: asp_4W: asp_5W:
27 3: add.l d0,sp ; jmp (a4)
28 asp_w0: move.l d6,d0 ; move.b (a3)+,d0
29 5: asl.l wmu,d0 ; bra 3b
30 asp_lw: move.b (a3)+,-(sp) ; move.b (a3)+,1(sp)
31 move.w (sp)+,d0 ; ext.l d0
34 8: neg.l d0 ; sub.l #1,d0
35 1: mov und,-(sp) ; dbra d0,1b
37 asp_qw: move.l (sp)+,d0 ; bra 6b
39 !-----------------------------------------------------------------------------
40 bls_z: mov (sp)+,d0 ; bra 0f
41 bls_l: adroff ; move.w (a5),d0
43 2: move.w (sp)+,d0 ; bra 0f
44 4: move.l (sp)+,d0 ; bra 0f
46 blm_q: move.l (sp)+,d0 ; bra 0f
47 blm_l: adroff ; move.w (a5),d0
49 blm_s0: move.l d6,d0 ; move.b (a3)+,d0
50 0: move.l d0,d2 ; asr.w wmu,d2
52 sub.w #1,d2 ; move.l (sp)+,a0 !dest. address
53 move.l (sp)+,a5 ; cmp.l a0,a5
54 !a5 contains source address. beware of overlap of pieces
56 1: mov (a5)+,(a0)+ ; dbra d2,1b
59 2: add.l d0,a5 ; add.l d0,a0
60 4: mov -(a5),-(a0) ; dbra d2,4b
63 !----------------------------------------------------------------------------
64 csa_z: mov (sp)+,d0 ; bra 0f
65 csa_l: adroff ; move.w (a5),d0
66 0: sub.l wrd,d0 ; bne e_illins
67 csa_1W: move.l (sp)+,a0 ; mov (sp)+,d0
68 add.l #4,a0 ; subt (a0),d0
70 comp word(a0),d0 ; bhi 6f
72 asl.l #2,d0 ; add.l wrd,d0
73 move.l a0,a1 ; add.l d0,a1
74 move.l word(a1),d1 ; bne 5f
75 6: sub.l #4,a0 ; move.l (a0),d1
77 5: move.l d1,a3 ; jmp (a4)
79 csb_z: mov (sp)+,d0 ; bra 0f
80 csb_l: adroff ; move.w (a5),d0
81 0: comp wrd,d0 ; bne e_illins
82 csb_1W: move.l (sp)+,a0 ; mov (sp)+,d0
84 !Use a3 as a general register
85 mov 4(a0),d1 ; sub.l #1,d1
87 move.l wrd,d2 ; add.l #4,d2
88 1: add.l d2,a0 ; comp (a0),d0
90 move.l word(a0),d1 ; beq e_case
91 move.l d1,a3 ; jmp (a4)
92 2: move.l (a3),d1 ; beq e_case
93 move.l d1,a3 ; jmp (a4)
95 !-----------------------------------------------------------------------------
96 dch_z: move.l (sp)+,a0 ; move.l (a0),-(sp)
97 move.l ml,a0 ; cmp.l (sp),a0
98 bls e_badptr ; jmp (a4)
100 lpb_z: add.l #0+l0,(sp) ; jmp (a4)
102 !----------------------------------------------------------------------------
104 dup_1W: mov (sp),-(sp) ; jmp (a4)
105 dup_l: adroff ; move.w (a5),d0
107 dus_z: mov (sp)+,d0 ; bra 0f
108 dus_l: adroff ; move.w (a5),d0
110 2: move.w (sp)+,d0 ; bra 1f
112 1: ble e_oddz ; bclr #0,d0
113 move.l sp,a0 ; add.l d0,a0
114 asr.l wmu,d0 ; sub.l #1,d0
115 3: mov -(a0),-(sp) ; dbra d0,3b
117 !We do not test if d0 is a word multiple indeed .
119 !-----------------------------------------------------------------------------
120 exg_z: mov (sp)+,d0 ; bra 0f
121 exg_l: adroff ; move.w (a5),d0
123 exg_s0: move.l d6,d0 ; move.b (a3)+,d0
124 0: move.l d7,d1 ; move.l d0,a0
125 1: asri #1,d0 ; dbcs d1,1b
126 bcs e_oddz ; sub.l #1,d0
127 add.l a0,sp ; add.l sp,a0
128 2: mov -(sp),d1 ; mov -(a0),(sp)
129 mov d1,(a0) ; dbra d0,2b
132 gto_q: move.l (sp)+,a0 ; bra 3f
133 gto_l: move.l d6,a0 ; move.b (a3)+,-(sp)
134 move.b (a3)+,1(sp) ; move.w (sp)+,a0
135 3: add.l a6,a0 ; move.l (a0)+,a3
138 !To find the procedure descriptor of the procedure we go to ,we cannot use
139 !the memory place curproc . We need to find the last time this procedure
140 !called. In the frame of that procedure we find the pointer to the procedure
147 1: move.l 8(a2),a2 !a2 ponts at procedure descriptor.
148 move.l 8(a2),d0 !countptr in d0.
149 move.l d0,countptr !initially assume first line
156 lim_z: clr.l d0; move.w ignmask, d0
157 mov d0,-(sp) ; jmp (a4)
158 sim_z: clr.l d0; mov (sp)+, d0
159 move.w d0,ignmask ; jmp (a4)
165 !---------------------------------------------------------------------------
166 lor_s0: move.l d6,d0 ; move.b (a3)+,d0
167 bne 1f ; move.l a2,-(sp)
169 1: sub.w #1,d0 ; bne 2f
170 move.l sp,-(sp) ; jmp (a4)
171 2: sub.w #1,d0 ; bne e_illins
172 move.l hp,-(sp) ; jmp (a4)
174 str_s0: move.l d6,d0 ; move.b (a3)+,d0
175 bne 1f ; move.l (sp)+,a2
177 1: sub.w #1,d0 ; bne 2f
178 move.l (sp)+,sp ; claimstack
180 2: sub.w #1,d0 ; bne e_illins
181 move.l (sp)+,d1 ; cmp.l nd,d1
183 cmp.l tblmax,d1 ; bcs 4f
184 5: move.l d1,hp ; jmp (a4)
186 move.l d1,-(sp) ; add.l #1280,(sp)
187 bsr _Xbreak ; testen (sp)+
188 4: beq 1f ; testen (sp)+ ; bsr e_heap ;
189 move.l (sp)+,d1 ; jmp (a4)
190 1: move.l (sp)+,d1 ; bra 5b
192 !----------------------------------------------------------------------------
193 rck_z: mov (sp)+,d0 ; bra 0f
194 rck_l: adroff ; move.w (a5),d0
195 0: sub.l wrd,d0 ; beq rck_1W
196 sub.l wrd,d0 ; bne e_oddz
198 mov (sp),d0 ; comp (a0),d0 ; blt 9f
199 add.l wrd,a0 ; bra 1f
200 rck_1W: move.l (sp)+,a0
201 mov (sp),d0 ; comp (a0),d0 ; blt 9f
202 1: comp word(a0),d0 ; bgt 9f
205 !Temp. solution until trp_z is implemented
207 !--------------------------------------------------------------------------
209 lblnop: lea nopln+16,a0 ; clr.l d1; mov (a6),d1
211 lea nopln+33,a0 ; move.l sp,d1
214 pea nopln ; mov #1,-(sp)
220 nopln: .asciz "line number nop sp \n"
223 !unsigned to ascii for integers , a0 is address of first character
224 ! d1 contains integer. Output is 11 characters of which the first is a space.
228 itoa: move.l #9,d4 ; add.l #11,a0
230 0: bsr dvu4 ; add.w #48,d3
231 move.b d3,-(a0) ; tst.l d1
233 1: move.b #32,-(a0) ; dbra d4,1b
236 !------------------------------------------------------------------------------
237 fil_q: move.l (sp)+,a0 ; bra 3f
238 fil_l: adroff ; move.w (a5),d0
240 3: add.l a6,a0 ; cmp.l 4(a6),a0
246 move.l d0,countfld !START COUNTPTR FOR THIS PROC
247 move.l a0,20(a1) !FILE POINTER IN PROC DES
252 !-----------------------------------------------------------------------------
261 lin_l: adroff ; clr.l d0
262 move.w (a5),d0 ; bra 1f
263 lin_q: move.l (sp)+,d0 ; bra 1f
264 lin_s0: move.l #0,d0 ; move.b (a3)+,d0
265 1: comp (a6),d0 ; beq 9f
280 move.l 4(a6),(a1)+ !store new line
282 move.l (a6),(a1) !number in buffer lasttable
290 move.l countptr,d1 !LINE NUMBER IN d1
291 asl.l #2,d1 !MULTIPLY BY 4
294 add.l #1,(a0) !ADD 1 TO THE CORRESPONDING COUNT
297 move.l countptr,d1 !LINE NUMBER IN d1
299 bsr dvu4 !QUOTIENT IN d1 REST IN d3
302 bset d3,(a0) !ATTENTION BIT 0 CORR TO LINE 0
306 !----------------------------------------------------------------------------
307 mon_z: mov (sp)+,d0 ; bmi e_badmon
308 cmp.l #64,d0 ; bge e_badmon
309 move.l a4,-(sp) ; asl.l #2,d0
310 add.l #syscal,d0 ; move.l d0,a0
311 move.l (a0),a0 ; jmp (a0)
315 .data4 e_badmon, hlt_z, _Xfork, _Xread
316 .data4 _Xwrite, _Xopen, _Xclose, _Xwait
317 .data4 _Xcreat, _Xlink, _Xunlink, e_badmon
318 .data4 _Xchdir, e_badmon, _Xmknod, _Xchmod
319 .data4 _Xchown, _Xbreak, _Xstat, _Xlseek
320 .data4 _Xgetpid, _Xmount, _Xumount, _Xsetuid
321 .data4 _Xgetuid, _Xstime, _Xptrace, _Xalarm
322 .data4 _Xfstat, _Xpause, _Xutime, e_badmon
323 .data4 e_badmon, _Xaccess, _Xnice, _Xftime
324 .data4 _Xsync, _Xkill, e_badmon, e_badmon
325 .data4 e_badmon, _Xdup, _Xpipe, _Xtimes
326 .data4 _Xprofil, e_badmon, _Xsetgid, _Xgetgid
327 .data4 _sigtrp, e_badmon, e_badmon, _Xacct
328 .data4 e_badmon, e_badmon, _Xioctl, e_badmon
329 .data4 e_badmon, e_badmon, e_badmon, _Xexece
330 .data4 _Xumask, _Xchroot, e_badmon, e_badmon