Machine-Independent MDL for TOPS-20 and VAX.
[pdp10-muddle.git] / mim / development / mim / 20 / insint.mid
1 ;This code runs MIMI20 by interpretting TOPS20 instructions and building
2 ;  a page trace
3
4 INTERP: MOVEM   0,ACS0          ; first save user ACS
5         MOVE    0,[1,,ACS0+1]
6         BLT     0,@[MIMSEC,,ACS0+17]
7         XMOVEI  P,INTPDL        ; get us a pdl
8         SKIPE   PGJFN
9          JRST   INTER2          ; already open
10         SETZM   PAGNP
11 INTER1: HRROI   A,[asciz /Output file for trace: /]
12         PSOUT
13         MOVE    A,[gj%sht+gj%fns]
14         MOVE    B,[.priin,,.priout]
15         GTJFN
16          JRST   INTER1
17         MOVE    b,[440000,,300000]      ;7-bit read/write
18         OPENF
19          JRST   INTER1                  ;clever error handling
20         MOVEM   A,PGJFN
21 INTER2: HRROI   A,[ASCIZ /Place start PC in PCWD (global PC)
22 /]
23         PSOUT
24         HALTF
25
26 ILOOP:  MOVE    A,@PCWD                 ; get next instruction
27         PUSHJ   P,INSINT
28         JRST    ILOOP                   ; do it for a long time... 
29
30 ;Instruction interpreter for producing page trace for multi-section
31 ;analysis, ins is in A
32
33 INSINT: PUSH    P,A
34         MOVE    A,PCWD          ; record pc page
35         PUSHJ   P,PAGNOT        ; note page
36         POP     P,A
37         AOS     PCWD            ; bunp pc
38
39 INSIN1: LDB     B,[331100,,A]   ;OPCODE.
40         LDB     C,[270400,,A]   ;GET AC FIELD
41         LDB     D,[220400,,A]   ;INDX FIELD
42         HRRZ    E,A             ; EA FIELD
43         MOVEI   F,0             ; SEE IF IND
44         TLNE    A,20            ; SKIP IN NOT IND
45          MOVEI  F,1
46         PUSHJ   P,EFFADR        ; COMPUTE EFFECTIVE ADDRESS
47         CAIN    B,<XCT_<-27.>>
48          JRST   DXCT
49         CAIN    B,<PUSHJ_<-27.>>
50          JRST   DPUSHJ          ;CALCULATE EA AND INTERPRET
51         CAIN    B,<JSR_<-27.>>
52          JRST   DJSR
53         CAIN    B,<JSA_<-27.>>
54          JRST   DJSA
55 ;       CAIN    B,<JSYS_<-27.>>
56 ;        JRST   DJSYS
57         CAIN    B,<JSP_<-27.>>
58          JRST   DJSP
59         TRNN    B,700
60          JRST   DUUO
61         CAIN    B,<POPJ_<-27.>>
62          JRST   DPOPJ
63         CAIN    B,<JRA_<-27.>>
64          JRST   DJRA
65         CAIN    B,<AOBJN_<-27.>>
66          JRST   DJMP
67         CAIN    B,<AOBJP_<-27.>>
68          JRST   DJMP
69         CAIN    B,<JFFO_<-27.>>
70          JRST   DJFFO
71         CAIN    B,<JRST_<-27.>>
72          JRST   DJRST
73         CAIN    B,<BLT_<-27.>>
74          JRST   DBLT
75         CAIN    B,<123>
76          JRST   DXBLT
77         CAIN    B,<PUSH_<-27.>>
78          JRST   DPUSH
79         CAIN    B,<POP_<-27.>>
80          JRST   DPOP
81         CAIN    B,<ILDB_<-27.>>
82          JRST   DILDB
83         CAIN    B,<IDPB_<-27.>>
84          JRST   DILDB
85         CAIN    B,<LDB_<-27.>>
86          JRST   DILDB
87         MOVEI   0,(B)
88         ANDI    0,770           ; REMOVE LOW 3 BITS OF OPCODE
89         CAIE    0,<AOJ_<-27.>>  ; AOJ-SOMETHING
90         CAIN    0,<SOJ_<-27.>>
91          JRST   DJMP
92         CAIN    0,<JUMP_<-27.>> ; SOME FLAVOR JUMP
93          JRST   DJMP
94
95 ; here for unexciting run of the mill instructions
96
97 DOINS:  PUSHJ   P,MEMTOU        ; see if we touch memory
98          JRST   NOTOU           ; no don't hack data structure
99
100         EXCH    A,E
101         SKIPN   PCONLY
102          PUSHJ  P,PAGNOT        ; record page
103         EXCH    A,E
104
105 NOTOU:  MOVEM   A,INSDO
106         MOVEM   A,@[MIMSEC+1,,INSDO]
107         HLLZ    A,PCWD
108         HLLM    A,INSDIS
109         HLLM    A,@[MIMSEC+1,,INSDIS]
110         MOVEM   17,SAV17
111         MOVSI   17,ACS0
112         BLT     17,17
113         JRST    @INSDIS
114 INSRET: CAIA
115         AOS     PCWD
116         MOVEM   0,ACS0
117         MOVE    0,[1,,ACS0+1]
118         BLT     0,@[MIMSEC,,ACS0+17]
119         MOVE    17,SAV17
120         POPJ    P,
121
122 ; interpret XCT instruction (E is effective address)
123
124 DXCT:   MOVE    A,E             ;record page
125         SKIPN   PCONLY
126          PUSHJ  P,PAGNOT
127         PUSHJ   P,GETVAL        ;get value
128         PUSHJ   P,INSIN1        ;do the instruction
129         POPJ    P,
130
131 ; here to inteprer PUSHJ
132
133 DPUSHJ: MOVE    B,PCWD          ;get PC to push
134         MOVE    A,ACS0(C)       ;get stack pointer
135         ADJSP   A,1             ; bump stack pointer
136         MOVEM   A,ACS0(C)
137         SKIPGE  A               ; skip if global
138          HLL    A,PCWD          ; else use PC sect
139         MOVEM   B,(A)           ; store PC
140         SKIPN   PCONLY
141          PUSHJ  P,PAGNOT        ; and note page
142         MOVEM   E,PCWD
143         POPJ    P,
144
145 ; do JSP interp
146
147 DJSP:   MOVE    B,PCWD          ; set up PC to save
148         MOVEM   B,ACS0(C)       ; save it
149         MOVEM   E,PCWD
150         POPJ    P,
151
152 ; here to do POPJ
153
154 DPOPJ:  MOVE    A,ACS0(C)       ; get stack pointer
155         SKIPGE  A
156          HLL    A,PCWD
157         SKIPN   PCONLY
158          PUSHJ  P,PAGNOT        ; note access
159         MOVE    B,(A)
160         MOVE    A,ACS0(C)
161         ADJSP   A,-1
162         MOVEM   A,ACS0(C)
163         MOVEM   B,PCWD
164         POPJ    P,
165
166 DUUO:
167 DJRA:
168 DJSA:
169 DJSR:
170 DJFFO:  HRROI   A,[ASCIZ /Not implemented...
171 /]
172         PSOUT
173         HALTF
174
175
176 ; here to do BLT
177
178 DBLT:   MOVE    C,ACS0(C)       ; get BLT register
179         PUSH    P,A
180         HLRZ    A,C
181         HLL     A,E             ; use eff addr of ins for sect
182         SKIPN   PCONLY
183          PUSHJ  P,PAGNOT
184         HRRZ    A,C
185         HLL     A,E
186         SKIPN   PCONLY
187          PUSHJ  P,PAGNOT
188         POP     P,A
189         JRST    DOINS
190
191 ; here to do XBLT
192
193 DXBLT:  PUSH    P,A
194         MOVE    A,ACS0+1(C)
195         SKIPN   PCONLY
196          PUSHJ  P,PAGNOT
197         MOVE    A,ACS0+2(C)
198         SKIPN   PCONLY
199          PUSHJ  P,PAGNOT
200         POP     P,A
201         JRST    DOINS
202
203 ; here to record PUSH
204
205 DPUSH:  PUSH    P,A
206         MOVE    A,ACS0(C)       ;get stack pointer
207         ADJSP   A,1             ; bump stack pointer
208         SKIPGE  A               ; skip if global
209          HLL    A,PCWD          ; else use PC sect
210         SKIPN   PCONLY
211          PUSHJ  P,PAGNOT
212         POP     P,A
213         JRST    DOINS
214
215 ; here to record POP
216
217 DPOP:   PUSH    P,A
218         SKIPG   A,ACS0(C)
219          HLL    A,PCWD
220         SKIPN   PCONLY
221          PUSHJ  P,PAGNOT
222         POP     P,A
223         JRST    DOINS
224
225 ; here for some byte pointe instructions
226
227 DILDB:  PUSH    P,A
228         PUSHJ   P,GETVAL                ; get the byte pointer
229         LDB     0,[360600,,A]           ; get shift
230         CAILE   0,44                    ; skip if not single word global bp
231          JRST   DILDB1
232         TLNE    A,40                    ; skip if not 2 word global bp
233          JRST   DILDB2
234         LDB     D,[220400,,A]           ; index field
235         HRRZ    E,A
236         MOVEI   F,0
237         TLNE    A,20                    ; indirect?
238          MOVEI  F,1
239 DILDB3: PUSHJ   P,EFFADR                ; compute its effective address
240         MOVE    A,E
241         SKIPN   PCONLY
242          PUSHJ  P,PAGNOT
243         POP     P,A
244         JRST    DOINS
245
246 DILDB1: TLZ     A,770000
247         SKIPN   PCONLY
248          PUSHJ  P,PAGNOT
249         POP     P,A
250         JRST    DOINS
251
252 DILDB2: LDB     D,[360400,,A]
253         MOVE    E,A
254         TLZ     E,770000
255         MOVEI   F,0
256         TLNE    A,200000        
257          MOVEI  F,1
258         JRST    DILDB3
259
260 ; here to handle many of the possible jump instructions
261
262 DJMP:   LSH     B,27.           ; start rebuilding jump instruction
263         TLO     B,<<D>_5>       ; will use D for test etc.
264         HRRI    B,DJMP1         ; where it will go
265         MOVE    D,ACS0(C)       ; get users register
266         XCT     B
267         CAIA
268
269 DJMP1:  MOVEM   E,PCWD          ; store jumped PC
270         MOVEM   D,ACS0(C)       ; may have changed
271         POPJ    P,
272
273 ; here for jrst
274
275 DJRST:  CAIE    C,5             ; only funny one is JRST 5, (XJRST)
276          JRST   DJRST1
277
278         ADDI    E,1
279         PUSHJ   P,GETVAL        ; get PC word
280         MOVEM   A,PCWD
281         POPJ    P,
282
283 DJRST1: MOVEM   E,PCWD
284         POPJ    P,      
285
286 ; Compute effective address 
287 ;       E/      initial rh of instruction
288 ;       F/      0 ==> no ind, 1 ==> ind
289 ;       D/      indx field
290
291 EFFADR: PUSH    P,A
292         PUSH    P,0
293         MOVEI   0,100           ; Maximum indirection count
294         HRRES   E               ; make negative offsets work
295
296 EFF1:   JUMPE   D,EFF2          ; jump if no index field
297
298         SKIPN   D,ACS0(D)       ; get its contents
299          JRST   EFF2            ; zero in index, ignore
300
301         TLNE    D,-1            ; skip if rh only (local index)
302          JUMPG  D,EFF3          ; jump if global index
303
304         ADD     E,D             ; do local indexing
305         ANDI    E,-1            ; but prevent overflowing
306         JRST    EFF2
307
308 EFF3:   ADD     E,D             ; add global index
309
310 EFF2:   CAIGE   E,17            ; AC?
311          JRST   EFF6
312         TLNN    E,400000        ; negative addr also get current section
313          TLNN   E,-1            ; skip if section already here
314           HLL   E,PCWD          ; use PC section
315
316 EFF6:   JUMPE   F,EFF5          ; no indirection, leave
317
318         SOJGE   0,EFF4          ; too much indirection
319         HRROI   A,[ASCIZ /Too many levels of indirection
320 /]
321         PSOUT
322         HALTF
323
324 EFF4:   MOVE    A,E             ; get page
325         SKIPN   PCONLY
326          PUSHJ  P,PAGNOT
327
328         PUSHJ   P,GETVAL        ; get indirect word
329
330         JUMPGE  A,EFF7          ; jump if global ind
331
332         LDB     D,[220400,,A]   ; get index field
333         TLNN    A,20            ; skip if indirect
334          MOVEI  F,0             ; turn it on
335         HRRE    E,A             ; keep original section with new address
336         JRST    EFF1            ; loop back
337
338 EFF7:   LDB     D,[360400,,A]
339         TLNN    A,200000        ; global indirect bit?
340          MOVEI  F,0
341         TLZ     A,770000        ; kill index and indirect
342         MOVE    E,A
343         JRST    EFF1
344
345 EFF5:   POP     P,0
346         POP     P,A
347         POPJ    P,
348
349 ; here to extract value
350
351 GETVAL: CAILE   E,17            ; skip if register
352          SKIPA  A,(E)           ; get word
353           MOVE  A,ACS0(E)
354         POPJ    P,
355
356 ; here to take note of page being accessed (A is address)
357
358 PAGNOT: CAIG    A,17            ; not register
359          POPJ   P,
360
361         AOS     PREFS
362         SKIPE   CONFLI          ; only recording conflicts?
363          JRST   PACON
364
365         PUSH    P,B
366         AOS     B,PAGNP
367         MOVEM   A,PAGN-1(B)
368         CAIL    B,512.
369          JRST   PAGNO1
370         
371         POP     P,B
372         POPJ    P,
373
374 PAGNO1: PUSH    P,A
375         PUSH    P,C
376         MOVE    A,PGJFN
377         MOVE    B,[444400,,PAGN]
378         MOVNI   C,512.
379         SOUT
380         SETZM   PAGNP
381         POP     P,C
382         POP     P,A
383         POP     P,B     
384         POPJ    P,
385
386
387 PACON:  PUSH    P,A
388         PUSH    P,B
389         PUSH    P,C
390         LSH     A,-9.           ; get to page group
391         MOVE    B,A
392         LSH     A,-2
393         TRZ     A,777400        ; kill sect # but not odd/even
394         TRZE    A,200
395          TRC    A,20
396         SKIPN   C,PTBL(A)
397          JRST   PACON1
398         XOR     C,B
399         TRZ     C,3             ; kill low order bits
400         JUMPE   C,PACON1
401         MOVE    C,PTBL(A)
402         MOVEM   B,PTBL(A)
403         CAMG    B,C
404          EXCH   B,C
405         HRL     B,C
406
407         MOVSI   C,-CTBL         ; see if this happened before
408 PALP:   CAMN    B,CTB(C)
409          JRST   PALP1
410         SKIPN   CTB(C)
411          JRST   PALP2
412         AOBJP   C,.+2
413         AOBJN   C,PALP
414
415         HRROI   A,[ASCIZ /Conflict table full? 
416 /]
417         PSOUT
418         HALTF
419
420 PALP2:  MOVEM   B,CTB(C)
421 PALP1:  AOSA    CTB+1(C)
422
423 PACON1: MOVEM   B,PTBL(A)
424         POP     P,C
425         POP     P,B
426         POP     P,A
427         POPJ    P,
428
429 CONOUT: MOVE    A,PGJFN
430         MOVE    B,[444400,,CTB-1]
431         MOVNI   C,CTBL
432         SOUT
433         MOVE    A,PGJFN
434         CLOSF
435         JFCL
436         HALTF
437
438 IF1,[
439 DEFINE SDEF N
440         OPS!N==0
441         TERMIN
442
443 REPEAT <<512./36.>+1>,SDEF \.RPCNT
444
445 DEFINE OPTAB OP,IMM,\NIMM,LOP,N,FIRST,DONE
446        DONE==0
447        FIRST==1
448        LOP==<<OP>_<-27.>>
449        IFSE IMM,,[NIMM==0
450                   IRPC X,XR,[OP]
451                   IFSE [X]T,[IFN FIRST,[IRPC Y,,[XR]
452                                         IFSE [Y]L,NIMM==1
453                                         IFSE [Y]R,NIMM==1
454                                         .ISTOP
455                                         TERMIN
456                                         DONE==1
457 ]]
458                   IFN DONE,.ISTOP
459                   IFSE [X]I,NIMM==1
460                   IFSN [X]I,NIMM==0
461                   FIRST==0
462                   TERMIN
463 ]
464        IFSN IMM,,NIMM==IMM
465        N==<LOP/36.>
466        SYMHACK \N,NIMM,LOP
467        EXPUNGE N,NIMM,LOP
468        TERMIN
469
470 DEFINE PRV A,B,C
471         PRINTC /A B C
472 /
473         TERMIN
474
475 DEFINE SYMHACK SNM,IMM,OP
476         OPS!SNM==OPS!SNM\<IMM_<OP-<36.*<OP/36.>>>>
477         TERMIN
478         
479 OPTAB   JSYS,1          
480 OPTAB   ADJSP,1         
481 OPTAB   DFAD            
482 OPTAB   DFSB            
483 OPTAB   DFMP            
484 OPTAB   DFDV            
485 OPTAB   DADD            
486 OPTAB   DSUB            
487 OPTAB   DMUL            
488 OPTAB   DDIV            
489 OPTAB   DMOVE           
490 OPTAB   DMOVN           
491 OPTAB   FIX             
492 OPTAB   EXTEND  
493 OPTAB   DMOVEM  
494 OPTAB   DMOVNM  
495 OPTAB   FIXR            
496 OPTAB   FLTR            
497 OPTAB   UFA             
498 OPTAB   DFN             
499 OPTAB   FSC,1
500 OPTAB   IBP
501 OPTAB   ILDB
502 OPTAB   LDB
503 OPTAB   IDPB
504 OPTAB   DPB
505 OPTAB   FAD
506 OPTAB   FADL            
507 OPTAB   FADM
508 OPTAB   FADB
509 OPTAB   FADR
510 OPTAB   FADRI           
511 OPTAB   FADRM
512 OPTAB   FADRB
513 OPTAB   FSB
514 OPTAB   FSBL            
515 OPTAB   FSBM
516 OPTAB   FSBB
517 OPTAB   FSBR
518 OPTAB   FSBRI           
519 OPTAB   FSBRM
520 OPTAB   FSBRB
521 OPTAB   FMP
522 OPTAB   FMPL            
523 OPTAB   FMPM
524 OPTAB   FMPB
525 OPTAB   FMPR
526 OPTAB   FMPRI           
527 OPTAB   FMPRM
528 OPTAB   FMPRB
529 OPTAB   FDV
530 OPTAB   FDVL            
531 OPTAB   FDVM
532 OPTAB   FDVB
533 OPTAB   FDVR
534 OPTAB   FDVRI           
535 OPTAB   FDVRM
536 OPTAB   FDVRB
537 OPTAB   MOVE
538 OPTAB   MOVEI
539 OPTAB   MOVEM
540 OPTAB   MOVES
541 OPTAB   MOVS
542 OPTAB   MOVSI
543 OPTAB   MOVSM
544 OPTAB   MOVSS
545 OPTAB   MOVN
546 OPTAB   MOVNI
547 OPTAB   MOVNM
548 OPTAB   MOVNS
549 OPTAB   MOVM
550 OPTAB   MOVMI
551 OPTAB   MOVMM
552 OPTAB   MOVMS
553 OPTAB   IMUL
554 OPTAB   IMULI
555 OPTAB   IMULM
556 OPTAB   IMULB
557 OPTAB   MUL
558 OPTAB   MULI
559 OPTAB   MULM
560 OPTAB   MULB
561 OPTAB   IDIV
562 OPTAB   IDIVI
563 OPTAB   IDIVM
564 OPTAB   IDIVB
565 OPTAB   DIV
566 OPTAB   DIVI
567 OPTAB   DIVM
568 OPTAB   DIVB
569 OPTAB   ASH,1
570 OPTAB   ROT,1
571 OPTAB   LSH,1
572 OPTAB   JFFO    
573 OPTAB   ASHC,
574 OPTAB   ROTC,1
575 OPTAB   LSHC,1
576 OPTAB   CIRC    
577 OPTAB   EXCH
578 OPTAB   BLT
579 OPTAB   AOBJP
580 OPTAB   AOBJN
581 OPTAB   JRST
582 OPTAB   JFCL
583 OPTAB   XCT
584 OPTAB   MAP     
585 OPTAB   PUSHJ
586 OPTAB   PUSH
587 OPTAB   POP
588 OPTAB   POPJ
589 OPTAB   JSR
590 OPTAB   JSP
591 OPTAB   JSA
592 OPTAB   JRA
593 OPTAB   ADD
594 OPTAB   ADDI
595 OPTAB   ADDM
596 OPTAB   ADDB
597 OPTAB   SUB
598 OPTAB   SUBI
599 OPTAB   SUBM
600 OPTAB   SUBB
601 OPTAB   CAI
602 OPTAB   CAIL,1
603 OPTAB   CAIE,1
604 OPTAB   CAILE,1
605 OPTAB   CAIA,1
606 OPTAB   CAIGE,1
607 OPTAB   CAIN,1
608 OPTAB   CAIG,1
609 OPTAB   CAM
610 OPTAB   CAML
611 OPTAB   CAME
612 OPTAB   CAMLE
613 OPTAB   CAMA
614 OPTAB   CAMGE
615 OPTAB   CAMN
616 OPTAB   CAMG
617 OPTAB   JUMP
618 OPTAB   JUMPL
619 OPTAB   JUMPE
620 OPTAB   JUMPLE
621 OPTAB   JUMPA
622 OPTAB   JUMPGE
623 OPTAB   JUMPN
624 OPTAB   JUMPG
625 OPTAB   SKIP
626 OPTAB   SKIPL
627 OPTAB   SKIPE
628 OPTAB   SKIPLE
629 OPTAB   SKIPA
630 OPTAB   SKIPGE
631 OPTAB   SKIPN
632 OPTAB   SKIPG
633 OPTAB   AOJ
634 OPTAB   AOJL
635 OPTAB   AOJE
636 OPTAB   AOJLE
637 OPTAB   AOJA
638 OPTAB   AOJGE
639 OPTAB   AOJN
640 OPTAB   AOJG
641 OPTAB   AOS
642 OPTAB   AOSL
643 OPTAB   AOSE
644 OPTAB   AOSLE
645 OPTAB   AOSA
646 OPTAB   AOSGE
647 OPTAB   AOSN
648 OPTAB   AOSG
649 OPTAB   SOJ
650 OPTAB   SOJL
651 OPTAB   SOJE
652 OPTAB   SOJLE
653 OPTAB   SOJA
654 OPTAB   SOJGE
655 OPTAB   SOJN
656 OPTAB   SOJG
657 OPTAB   SOS
658 OPTAB   SOSL
659 OPTAB   SOSE
660 OPTAB   SOSLE
661 OPTAB   SOSA
662 OPTAB   SOSGE
663 OPTAB   SOSN
664 OPTAB   SOSG
665 OPTAB   SETZ,1
666 OPTAB   SETZI
667 OPTAB   SETZM
668 OPTAB   SETZB
669 OPTAB   AND
670 OPTAB   ANDI
671 OPTAB   ANDM
672 OPTAB   ANDB
673 OPTAB   ANDCA
674 OPTAB   ANDCAI
675 OPTAB   ANDCAM
676 OPTAB   ANDCAB
677 OPTAB   SETM
678 OPTAB   SETMI
679 OPTAB   SETMM
680 OPTAB   SETMB
681 OPTAB   ANDCM
682 OPTAB   ANDCMI
683 OPTAB   ANDCMM
684 OPTAB   ANDCMB
685 OPTAB   SETA,1
686 OPTAB   SETAI
687 OPTAB   SETAM
688 OPTAB   SETAB
689 OPTAB   XOR
690 OPTAB   XORI
691 OPTAB   XORM
692 OPTAB   XORB
693 OPTAB   IOR
694 OPTAB   IORI
695 OPTAB   IORM
696 OPTAB   IORB
697 OPTAB   ANDCB
698 OPTAB   ANDCBI
699 OPTAB   ANDCBM
700 OPTAB   ANDCBB
701 OPTAB   EQV
702 OPTAB   EQVI
703 OPTAB   EQVM
704 OPTAB   EQVB
705 OPTAB   SETCA,1
706 OPTAB   SETCAI
707 OPTAB   SETCAM
708 OPTAB   SETCAB
709 OPTAB   ORCA
710 OPTAB   ORCAI
711 OPTAB   ORCAM
712 OPTAB   ORCAB
713 OPTAB   SETCM
714 OPTAB   SETCMI
715 OPTAB   SETCMM
716 OPTAB   SETCMB
717 OPTAB   ORCM
718 OPTAB   ORCMI
719 OPTAB   ORCMM
720 OPTAB   ORCMB
721 OPTAB   ORCB
722 OPTAB   ORCBI
723 OPTAB   ORCBM
724 OPTAB   ORCBB
725 OPTAB   SETO,1
726 OPTAB   SETOI
727 OPTAB   SETOM
728 OPTAB   SETOB
729 OPTAB   HLL
730 OPTAB   HLLI
731 OPTAB   HLLM
732 OPTAB   HLLS
733 OPTAB   HRL
734 OPTAB   HRLI
735 OPTAB   HRLM
736 OPTAB   HRLS
737 OPTAB   HLLZ
738 OPTAB   HLLZI
739 OPTAB   HLLZM
740 OPTAB   HLLZS
741 OPTAB   HRLZ
742 OPTAB   HRLZI
743 OPTAB   HRLZM
744 OPTAB   HRLZS
745 OPTAB   HLLO
746 OPTAB   HLLOI
747 OPTAB   HLLOM
748 OPTAB   HLLOS
749 OPTAB   HRLO
750 OPTAB   HRLOI
751 OPTAB   HRLOM
752 OPTAB   HRLOS
753 OPTAB   HLLE
754 OPTAB   HLLEI
755 OPTAB   HLLEM
756 OPTAB   HLLES
757 OPTAB   HRLE
758 OPTAB   HRLEI
759 OPTAB   HRLEM
760 OPTAB   HRLES
761 OPTAB   HRR
762 OPTAB   HRRI
763 OPTAB   HRRM
764 OPTAB   HRRS
765 OPTAB   HLR
766 OPTAB   HLRI
767 OPTAB   HLRM
768 OPTAB   HLRS
769 OPTAB   HRRZ
770 OPTAB   HRRZI
771 OPTAB   HRRZM
772 OPTAB   HRRZS
773 OPTAB   HLRZ
774 OPTAB   HLRZI
775 OPTAB   HLRZM
776 OPTAB   HLRZS
777 OPTAB   HRRO
778 OPTAB   HRROI
779 OPTAB   HRROM
780 OPTAB   HRROS
781 OPTAB   HLRO
782 OPTAB   HLROI
783 OPTAB   HLROM
784 OPTAB   HLROS
785 OPTAB   HRRE
786 OPTAB   HRREI
787 OPTAB   HRREM
788 OPTAB   HRRES
789 OPTAB   HLRE
790 OPTAB   HLREI
791 OPTAB   HLREM
792 OPTAB   HLRES
793 OPTAB   TRN
794 OPTAB   TLN
795 OPTAB   TRNE
796 OPTAB   TLNE
797 OPTAB   TRNA
798 OPTAB   TLNA
799 OPTAB   TRNN
800 OPTAB   TLNN
801 OPTAB   TDN
802 OPTAB   TSN
803 OPTAB   TDNE
804 OPTAB   TSNE
805 OPTAB   TDNA
806 OPTAB   TSNA
807 OPTAB   TDNN
808 OPTAB   TSNN
809 OPTAB   TRZ
810 OPTAB   TLZ
811 OPTAB   TRZE
812 OPTAB   TLZE
813 OPTAB   TRZA
814 OPTAB   TLZA
815 OPTAB   TRZN
816 OPTAB   TLZN
817 OPTAB   TDZ
818 OPTAB   TSZ
819 OPTAB   TDZE
820 OPTAB   TSZE
821 OPTAB   TDZA
822 OPTAB   TSZA
823 OPTAB   TDZN
824 OPTAB   TSZN
825 OPTAB   TRC
826 OPTAB   TLC
827 OPTAB   TRCE
828 OPTAB   TLCE
829 OPTAB   TRCA
830 OPTAB   TLCA
831 OPTAB   TRCN
832 OPTAB   TLCN
833 OPTAB   TDC
834 OPTAB   TSC
835 OPTAB   TDCE
836 OPTAB   TSCE
837 OPTAB   TDCA
838 OPTAB   TSCA
839 OPTAB   TDCN
840 OPTAB   TSCN
841 OPTAB   TRO
842 OPTAB   TLO
843 OPTAB   TROE
844 OPTAB   TLOE
845 OPTAB   TROA
846 OPTAB   TLOA
847 OPTAB   TRON
848 OPTAB   TLON
849 OPTAB   TDO
850 OPTAB   TSO
851 OPTAB   TDOE
852 OPTAB   TSOE
853 OPTAB   TDOA
854 OPTAB   TSOA
855 OPTAB   TDON
856 OPTAB   TSON
857
858 DEFINE SYMDEP N
859         OPS!N
860         TERMIN
861 ]
862
863 OPTB:
864
865 REPEAT <<512./36.>+1>,SYMDEP \.RPCNT
866
867 ;Determine if opcode touches memory, get opcode in B skips if touches mem
868
869 MEMTOU: PUSH    P,B
870         PUSH    P,C
871         IDIVI   B,36.
872         MOVE    B,OPTB(B)
873         MOVNS   C
874         ROT     B,-1(C)
875         POP     P,C
876         SKIPL   B
877          AOS    -1(P)
878         POP     P,B
879         POPJ    P,              
880
881
882 CONSTANTS
883
884
885 PAGNP:  0
886 PAGN:   BLOCK   512.
887 PAGNEN:
888
889 PGJFN:  0
890 ACS0:   BLOCK   20
891 PCWD:   0
892 INTPDL: BLOCK   100
893 SAV17:  0
894 PREFS:  0
895 PTBL:   BLOCK   200
896 CTBL==10000
897 CTB:    BLOCK   CTBL
898 CONFLI: 0
899 PCONLY: -1
900 MUMBLE: -1