1 TITLE UUO HANDLER FOR MUDDLE AND HYDRA
7 ;XBLT=123000,,[020000,,0]
9 IFE ITS,.INSRT STENEX >
11 ;GLOBALS FOR THIS PROGRAM
13 .GLOBAL BACKTR,PRINT,PDLBUF,TPGROW,SPECSTO,TIMOUT,AGC,VECBOT,VECTOP
14 .GLOBAL BCKTRK,TPOVFL,.MONWR,.MONRD,.MONEX,MAKACT,IGVAL,ILVAL,BFRAME
15 .GLOBAL FLGSET,QMPOPJ,SAVM,STBL,FMPOPJ,PVSTOR,SPSTOR,POPUNW,RMCALL
16 .GLOBAL PURTOP,PURBOT,PLOAD,PURVEC,STOSTR,MSGTYP,UUOH,ILLUUO,RSTACK,IBLOCK
17 .GLOBAL NFPOPJ,NSPOPJ,MULTSG,MLTUUP
18 .GLOBAL SHRRM,SHRLM,SMOVEM,SSETZM,SXBLT,SHLRZ
19 .GLOBAL C%11,C%22,C%33,C%44,C%55,C%66,C%0,C%1,C%2,C%3,C%M1,C%M2,C%M10
20 .GLOBAL C%M20,C%M30,C%M40,C%M60
22 ;SETUP UUO DISPATCH TABLE HERE
29 IRP UUOS,,[[DP,DODP],[.MCALL,DMCALL],[.ACALL,DACALL],[.ECALL,DECALL],[.SAVAC,DSAVAC]
30 [.FATAL,DFATAL],[.ERRUU,DOERR],[.POPUN,DPOPUN],[.LSAVA,DLSAVA]
31 [SHRRM,DHRRM],[SHRLM,DHRLM],[SXBLT,DXBLT],[SMOVEM,DMOVEM],[SHLRZ,DHLRZ],[SSETZM,DSETZM],[SMOVE,DMOVE]]
41 ;SINCE CHECKING HAPPENS IN UUOH, NO LONGER NEED TABLE FULL OF ILLUUOS
42 ;REPEAT 100-UUFOO,[ILLUUO
60 ALLUUO: LDB C,[331100,,UUOLOC] ;GET OPCODE
63 CAIA ;SKIP IF ILLEGAL UUO
64 JRST @UUOTBL(C) ;DISPATCH TO SUITABLE HANDLER
66 .SUSET [.RJPC,,SAVJPC]
69 ILLUUO: FATAL ILLEGAL UUO
70 ; THIS WILL LEAVE .JPC FOR DEBUGGING AND SUCH
74 SAVJPC: 0 ; SAVE JPC IN CASE OF LOSS
75 SAVEC: 0 ; USED TO SAVE WORKING AC
78 MLTUUP: 0 ; HOLDS UUO (SWAPPED SORT OF)
80 MLTEA: 0 ; EFF ADDR OF UUO INSTRUCTION
81 MLTUUH: FSEG,,MLTUOP ; RUN IN "FSEG"
86 ;SEPARATION OF PURE FROM IMPURE CODE HERE
88 ;UUOPUR: MOVEM C,SAVEC ; SAVE AC
89 ; LDB C,[330900,,UUOLOC]
90 ; JRST @UUOTBL(C) ;DISPATCH BASED ON THE UUO
92 ; HANDLER FOR UUOS IN MULTI SEG MODE
96 MOVEM C,UUOH ; SO MANY THINGS WIN IMMEDIATE
100 MOVEM C,UUOLOC ; GET INS CODE
111 SETZB D,R ; FLAG NOT ENTRY CALL
112 LDB C,[270400,,UUOLOC] ; GET AC FIELD OF UUO
113 COMCAL: LSH C,1 ; TIMES 2
114 MOVN AB,C ; GET NEGATED # OF ARGS
115 HRLI C,(C) ; TO BOTH SIDES
116 SUBM TP,C ; NOW HAVE TP TO SAVE
117 MOVEM C,TPSAV(TB) ; SAVE IT
118 MOVSI AB,(AB) ; BUILD THE AB POINTER
119 HRRI AB,1(C) ; POINT TO ARGS
120 HRRZ C,UUOH ; GET PC OF CALL
121 CAIL C,HIBOT ; SKIP IF NOT IN GC SPACE
123 SUBI C,(M) ; RELATIVIZE THE PC
124 TLOA C,400000+M ; FOR RETURNER TO WIN
130 MOVEM SP,SPSAV(TB) ; SAVE BINDING GOODIE
131 MOVSI C,TENTRY ; SET UP ENTRY WORD
132 HRR C,UUOLOC ; POINT TO CALLED SR
133 ADD TP,[FRAMLN,,FRAMLN] ; ALLOCATE NEW FRAME
135 CALDON: MOVEM C,FSAV+1(TP) ; CLOBBER THE FRAME
136 MOVEM TB,OTBSAV+1(TP)
137 MOVEM AB,ABSAV+1(TP) ; FRAME BUILT
139 HRRI TB,(TP) ; SETUP NEW TB
141 SETZB M,SAVM ; ZERO M AND SAVM FOR GC WINNAGE
142 CAILE C,HIBOT ; SKIP IF RSUBR
144 GETYP A,(C) ; GET CONTENTS OF SLOT
145 JUMPN D,EVCALL ; EVAL CALLING ENTRY ?
146 CAIE A,TRSUBR ; RSUBR CALLING RSUBR ?
148 MOVE R,(C)+1 ; YES, SETUP R
149 CALLR0: HRRM R,FSAV+1(TB) ; FIXUP THE PROPER FSAV
151 CALLR1: SKIPL M,(R)+1 ; SETUP M
152 JRST SETUPM ; JUMP IF A PURE RSUBR IN QUESTION
153 IFN ITS, AOBJP TB,.+1 ; GO TO CALLED RSUBR
157 MCHK1: INTGO ; CHECK FOR INTERRUPTS
162 HRLI TB,400000 ; KEEP TB NEGATIVE
166 IFN ITS, AOBJP TB,.+1 ; GO TO CALLED SUBR
167 IFE ITS, AOBJP TB,MCHK3
168 MCHK4: INTGO ; CHECK FOR INTERRUPTS
169 IFE ITS, SKIPN MULTSG
170 JRST @C ; WILL DO "RIGHT THING IN MULTI SEG"
177 HRLI TB,400000 ; KEEP TB NEGATIVE
183 ; HERE TO HANDLE A PURE RSUBR (LOAD IF PUNTED OR OTHERWISE FLUSHED)
185 SETUPM: MOVEI C,0 ; OFFSET (FOR MAIN ENTRIES)
186 STUPM1: MOVEI D,(M) ; GET OFFSET INTO CODE
187 HLRS M ; GET VECTOR OFFSET IN BOTH HALVES
188 ADD M,PURVEC+1 ; GET IT
190 FATAL LOSING PURE RSUBR POINTER
191 HLLM TB,2(M) ; MARK FOR LRU ALGORITHM
192 SKIPN M,1(M) ; POINT TO CORE IF LOADED
193 AOJA TB,STUPM2 ; GO LOAD IT
194 STUPM3: ADDI M,(D) ; POINT TO REAL THING
204 ADD C,M ; POINT TO START PC
206 TLZ C,777400 ; KILL COUNT
210 MOVEI B,0 ; AVOID FLAG MUNG
211 XJRST B ; EXTENDED JRST HACK
214 HRLI TB,400000 ; KEEP TB NEGATIVE
218 STUPM2: HLRZ A,1(R) ; SET UP TO CALL LOADER
221 PUSHJ P,PLOAD ; LOAD IT
225 MOVE M,B ; GET LOCATION
228 RCHECK: CAIN A,TPCODE ; PURE RSUBR?
230 CAIE A,TCODE ; EVALUATOR CALLING RSUBR ?
232 MOVS R,(C) ; YES, SETUP R
234 JRST CALLR1 ; GO FINISH THE RSUBR CALL
237 SCHECK: CAIE A,TSUBR ; RSUBR CALLING SUBR AS REFERENCE ?
239 SKIPA C,(C)+1 ; SKIP AND GET ROUTINE'S ADDRESS
241 HRRM C,FSAV+1(TB) ; FIXUP THE PROPER FSAV
242 IFE ITS, SKIPN MULTSG
243 JRST CALLS ; GO FINISH THE SUBR CALL
245 HRLI C,FSEG ; FOR SEG #1
248 ECHECK: CAIE A,TENTER ; SKIP IF SUB ENTRY OF RSUBR
249 JRST ACHECK ; COULD BE EVAL CALLING ONE
250 MOVE C,1(C) ; POINT TO SUB ENTRY BLOCK
251 ECHCK3: GETYP A,(C) ; SEE IF LINKED TO ITS MAIN ENTRY
256 ; CHECK IF CAN LINK ATOM
259 JRST BENTRY ; LOSER , COMPLAIN
260 ECHCK4: MOVE B,1(C) ; GET ATOM
263 PUSHJ P,IGVAL ; TRY GLOBAL VALUE
269 CAIE 0,TRSUBR ; IS IT A WINNER
271 CAMGE C,PURTOP ; DONT TRY TO SMASH PURE
274 HLLM A,(C) ; FIXUP LINKAGE
278 EVCALL: CAIN A,TATOM ; EVAL CALLING ENTRY?
279 JRST ECHCK4 ; COULD BE MUST FIXUP
280 CAIE A,TRSUBR ; YES THIS IS ONE
283 ECHCK2: MOVE R,B ; SET UP R
284 HRRM C,FSAV+1(TB) ; SET POINTER INTO FRAME
285 HRRZ C,2(C) ; FIND OFFSET INTO SAME
286 SKIPL M,1(R) ; POINT TO START OF RSUBR
287 JRST STUPM1 ; JUMP IF A LOSER
289 IFE ITS, SKIPN MULTSG
290 JRST CALLS ; GO TO SR
295 ACHECK: CAIE A,TATOM ; RSUBR CALLING THROUGH REFERENCE ATOM ?
296 JRST DOAPP3 ; TRY APPLYING IT
300 HRRZ C,UUOLOC ; REGOBBLE POINTER TO SLOT
304 SAVEIT: CAIE 0,TRSUBR
310 JRST BADVAL ; SOMETHING STRANGE
311 SAVEI1: CAMGE C,PURTOP ; SKIP IF PURE RSUBR VECTOR (NEVER LINKED)
314 MOVEM A,(C) ; CLOBBER NEW VALUE
317 JRST ENTRIT ; HACK ENTRY TO SUB RSUBR
319 JRST CALLR0 ; GO FINISH THE RSUBR CALL
324 SUBRIT: CAMGE C,PURBOT
329 HRRM B,FSAV+1(TB) ; FIXUP THE PROPER FSAV
331 IFN ITS, JRST CALLS ; GO FINISH THE SUBR CALL
340 SKIPA D,EQUOTE UNBOUND-VARIABLE
344 AOBJP TB,.+1 ; MAKE TB A LIGIT FRAME PNTR
349 MCHK6: MOVEI E,CALLER
350 HRRM E,FSAV(TB) ; SET A WINNING FSAV
351 HRRZ C,UUOLOC ; REGOBBLE POINTER TO SLOT
358 PUSH TP,IMQUOTE CALLER
364 BENTRY: MOVE D,EQUOTE BAD-ENTRY-BLOCK
370 HRLI TB,400000 ; KEEP TB NEGATIVE
375 ;HANDLER FOR CALL WHERE SPECIFIES NUMBER OF ARGS
378 LDB C,[270400,,UUOLOC] ; GOBBLE THE AC LOCN INTO C
379 EXCH C,SAVEC ; C TO SAVE LOC RESTORE C
380 MOVE C,@SAVEC ; C NOW HAS NUMBER OF ARGS
381 MOVEI D,0 ; FLAG NOT E CALL
382 JRST COMCAL ; JOIN MCALL
384 ; CALL TO ENTRY FROM EVAL (LIKE ACALL)
386 DECALL: LDB C,[270400,,UUOLOC] ; GET NAME OF AC
387 EXCH C,SAVEC ; STORE NAME
388 MOVE C,@SAVEC ; C NOW HAS NUM OF ARGS
389 MOVEI D,1 ; FLAG THIS
392 ;HANDLE OVERFLOW IN THE TP
394 TPLOSE: PUSHJ P,TPOVFL
397 ; RSUBR HAS POSSIBLY BEEN REPLACED BY A FUNCTION OR WHATEVER, DO AN APPLY
399 DOAPPL: PUSH TP,A ; PUSH THE THING TO APPLY
402 DOAPP2: JUMPGE AB,DOAPP1 ; ARGS DONE
409 DOAPP1: ACALL A,APPLY ; APPLY THE LOSER
412 DOAPP3: MOVE A,(C) ; GET VAL
414 JRST BADVAL ; GET SETUP FOR APPLY CALL
416 ; ENTRY TO BUILD A FRAME (USED BY SOME COMPILED PROG/REPEAT)
419 HRLI A,400000+M ; RELATIVIZE PC
420 MOVEM A,PCSAV(TB) ; CLOBBER PC IN
421 MOVEM TP,TPSAV(TB) ; SAVE STATE
424 ADD TP,[FRAMLN,,FRAMLN]
426 PUSHJ TPOVFL ; HACK BLOWN PDL
427 MOVSI A,TCBLK ; FUNNY FRAME
429 MOVEM A,FSAV+1(TP) ; CLOBBER
430 MOVEM TB,OTBSAV+1(TP)
432 POP P,A ; RET ADDR TO A
435 IFN ITS, AOBJN TB,.+1
436 IFE ITS, AOBJP TB,.+2
442 HRLI TB,400000 ; KEEP TB NEGATIVE
446 \f;SUBROUTINE TERMINATION CODE (NOT A UUO BUT HERE FOR COMPLETENENSS)
449 CNTIN1: HRRZS C,OTBSAV(TB) ; RESTORE BASE
451 CONTIN: MOVE TP,TPSAV(TB) ; START HERE FOR FUNNY RESTART
454 CAME SP,SPSAV(TB) ; ANY RESTORATION NEEDED
455 PUSHJ P,SPECSTO ; YES, GO UNRAVEL THE WORLDS BINDINGS
456 MOVE AB,ABSAV(TB) ; AND GET OLD ARG POINTER
457 HRRZ C,FSAV(TB) ; CHECK FOR RSUBR
458 MOVEI M,0 ; UNSETUP M FOR GC WINNAGE
459 CAILE C,HIBOT ; SKIP IF ANY FLAVOR OF RSUBR
460 IFN ITS, JRST @PCSAV(TB) ; AND RETURN
462 GETYP 0,(C) ; RETURN TO MAIN OR SUB ENTRY?
469 SKIPL M,1(R) ; GET LOC OF REAL SUBR
472 ;HERE TO RETURN TO NBIN
474 RETNBI: HLRZ 0,PCSAV(TB) ; GET FUNNY STUFF
480 FINIS1: CAIE 0,TRSUBR
481 JRST FINISA ; MAY HAVE BEEN PUT BACK TO ATOM
483 FINIS9: SKIPGE M,1(R)
486 FINIS2: MOVEI C,(M) ; COMPUTE REAL M FOR PURE RSUBR
489 SKIPN M,1(M) ; SKIP IF LOADED
491 ADDI M,(C) ; POINT TO SUB PART
492 PCREST: HLRZ 0,PCSAV(TB)
493 IFN ITS, JUMPN @PCSAV(TB)
509 IFN ITS, JRST @PCSAV(TB)
521 HLRZ A,1(R) ; RELOAD IT
536 MOVE B,1(C) ; GET ATOM
537 PUSHJ P,IGVAL ; GET VAL
543 CAMLE C,PURTOP ; SKIP IF CAN LINK UP
552 BADENT: ERRUUO EQUOTE RSUBR-ENTRY-UNLINKED
555 PCANT: ERRUUO EQUOTE PURE-LOAD-FAILURE
558 BCKTR1: PUSH TP,A ; SAVE VALUE TO BE RETURNED
559 PUSH TP,B ; SAVE FRAME ON PP
566 ; SUBR TO ENABLE AND DISABLE LINKING OF RSUBRS AT RUN TIME
568 MFUNCTION %RLINK,SUBR,[RSUBR-LINK]
575 ;HANDLER FOR DEBUGGING CALL TO PRINT
622 DQCALL: GETYP C,@40 ; SEE IF THIS GUY IS A QRSUBR OR QENT
628 ; NOT A QENT OR QRSUBR, MAYBE AN ATOM THAT LINKS TO ONE
631 CAIE C,TATOM ; SKIP IF ATOM
632 JRST DMCALL ; PRETEND TO BE AN MCALL
634 MOVE C,UUOH ; GET PC OF CALL
635 SUBI C,(M) ; RELATIVIZE
637 LDB C,[270400,,40] ; GET # OF ARGS
639 HRRZ C,40 ; POINT TO RSUBR SLOT
640 MOVE B,1(C) ; GET ATOM
641 SUBI C,(R) ; RELATIVIZE IT
643 ADD C,R ; C IS NOW A VECTOR POINTER
648 PUSHJ P,IGVAL ; SEE IF IT HAS A VALUE
649 GETYP 0,A ; IS IT A WINNER
653 PUSHJ P,ILVAL ; LOCAL?
656 JRST DQCAL2 ; MAY BE A WINNER
659 PUSH TP,EQUOTE UNBOUND-VARIABLE
663 PUSH TP,IMQUOTE CALLER
666 DQCAL2: PUSH TP,$TENTE ; IN CASE RSUBR ENTRY
668 CAIN 0,TRSUBR ; RSUBR?
669 JRST DQRSB ; YES, WIN
673 DQMCAL: HRRZ C,-6(TP) ; PRETEND WE WERE AN MCALL
681 JRST DMCALL ; FALL INTO MCALL CODE
683 DQENT: MOVEM B,(TP) ; SAVE IT
684 GETYP 0,(B) ; LINKED UP?
688 DQENT2: CAIE 0,TATOM ; BETTER BE ATOM
690 PUSHJ P,IGVAL ; TRY TO LINK IT UP
699 DQRSB: PUSH TP,$TRSUBR
706 PUSHJ P,DQCALQ ; MAP ONE IN
708 MOVEI E,0 ; GET OFFSET
711 HLRE B,M ; FIND END OF CODE VECTOR
715 HLRZ A,-1(B) ; GET LENGTH OF ENTRY VECTOR
716 HRRZ C,-1(B) ; GET LENGTH OF DDT SYMBOL TABLE
717 ADDI C,(A) ; TOTAL LENGTH OF RANDOM CRUFT AT THE END OF CODE
718 SUBI B,1(C) ; POINT TO FIRST ELEMENT IN ENTRY VECTOR
721 CAIL D,(E) ; IN RANGE?
727 SL1: HLRE D,(B) ; GET NEXT
735 HRRZ C,(B) ; GET OFFSET
736 MOVE R,(TP) ; SETUP R
737 SKIPN B,-2(TP) ; SKIP IF RSUBR ENTRY
747 DQMUNG: HRRZ D,-6(TP) ; GET CALLING RVECTOR
748 CAILE D,@PURTOP ; SMASHABLE?
749 JRST DQLOSS ; NO LOSE
763 MOVE B,1(E) ; GET RSUBR ENTRY
778 MOVEM A,(C) ; SAVE IT
780 HRRM B,FSAV(TB) ; FOR FUTURE MCALLS
783 SUBI C,(M) ; RELATIVIZE
785 SKIPL M,1(R) ; MAYBE LINK UP?
791 DQCALQ: HLRS M ; GET VECTOR OFFSET IN BOTH HALVES
792 ADD M,PURVEC+1 ; GET IT
794 FATAL LOSING PURE RSUBR POINTER
798 DQCLP1: PUSH TP,$TRSUBR
801 HLRZ A,1(B) ; SET UP TO CALL LOADER
802 PUSHJ P,PLOAD ; LOAD IT
805 MOVE M,B ; GET LOCATION
819 PUSHJ P,IBLOCK ; GET BLOCK
820 MOVEI A,.VECT.+TRSUBR
827 BLT A,-101(C) ; COPY IT
828 MOVEM B,RSTACK+1(PVP)
846 MOVE R,(D) ; GET R OR WHATEVER
849 CAIN 0,TRSUBR ; RSUBR?
851 SKIPL M,1(R) ; RSUBR IN CORE ETC
859 SKIPE M,1(M) ; SKIP IF LOADED
863 HLRZ A,1(R) ; RELOAD IT
872 ; THIS IS A UUO TO CALL ERROR WITH ONE ARGUMENT
881 ; ROUTINE TO DO AN RCALL FOR SUBRIFIED GOODIES
883 RMCALL: MOVEM M,SAVM ; SAVE M
893 ; ROUTINE USED BY COMPILED CODE TO SAVE ACS CALL AN INTERRUPT AND RESTORE ACS.
894 ; THIS UUO TAKES A LOCATION FROM WHICH TO FIND A DESCRIPTION OF HOW ACS ARE TO
897 ; LOC POINTS TO A BLOCK WHICH CAN BE ONE OR MORE WORDS LONG DEPENDING ON BOTH
898 ; THE NUMBER OF SCRATCH AC'S (CURRENTLY 5) AND THE NUMBER OF AC'S CONTAINING
900 ; THE FIRST PART OF THE BLOCK CONTAINS THE AC DECRIPTIONS. EACH AC IS DESCRIBED
901 ; BY A SIX BIT FIELD WITH THE EXCEPTION OF AC'S CONTAINING TEMPLATES.
902 ; THE SIX BIT FIELD CAN BE
904 ; 0 EITHER A TYPE WORD OR NOTHING
905 ; 1 -> 8 THE NUMBER OF THE AC CONTAINING THE TYPE
906 ; 9 -> 62 THE SAT OF THE THING CONTAINED IN THE AC (+ 8)
907 ; 63 A TEMPLATE LOOK AT THE BLOCK AFTER TO FIND A POINTER TO THE TYPE WORD
909 ; TEMPLATE DESCRIPTIONS ARE FOUND AFTER THE AC DESCRIPTION BLOCK. THESE ARE FOUND
910 ; IN SUCESSIVE WORDS CONTAINING POINTERS INTO THE R VECTOR
918 DLSAVA: PUSH P,[SETZ NOACS]
922 DSAVAC: PUSH P,[SETZ ONOACS]
925 IFN ITS, MOVE 0,UUOH ; GET PC
932 PUSH P,UUOLOC ; SAVE UUO
936 SUBI 0,(M) ; M IS BASE REG
937 IFN ITS, TLO 0,M ; INDEX IT OFF M
941 MOVEM 0,-1(P) ; AND RESTORE TO STACK
942 ; MOVE 0,UUOLOC ; GET REL POINTER TO TBL - REDUNDANT
943 ; MOVEM 0,(P) ; AND SAVE IT - REDUNDANT PTR ALREADY PUSHED
947 HRRZ 0,-3(P) ; NUMBER OF ACS
948 ; MOVE A,[440620,,UUOLOC] ; BYTE POINTER INDIRECTED TO 40
950 MOVE A,UUOLOC ; GET THE INSTRUCTION
951 HRLI A,440640 ; OR IN THE BYTE POINTER
954 MOVSI A,440600+B ; OR IN THE BYTE POINTER
960 MOVE D,-2(P) ; POINTER TO TEMPLATE BLOCK
964 ADD D,UUOLOC ; GET TO BLOCK
977 LOPSAV: ILDB E,A ; GET A DESCRIPTOR
978 JUMPE E,NOAC1 ; ZERO==TYPE WORD
979 CAIE E,77 ; IF 63. THEN TEMPLATE HANDLE SPECIALLY
980 JRST NOTEM ; NOT A TEMPLATE
981 PUSH TP,@(D) ; IT IS A TEMPLATE POINTER SO PUSH TYPE
983 LOPPUS: PUSH TP,ACSAV-1(C) ; PUSH AC
985 SOJG 0,LOPSAV ; LOOP BACK
988 JSR LCKINT ; GO INTERRUPT
989 HRRZ B,-3(P) ; NUMBER OF ACS
990 LOPPOP: POP TP,ACSAV-1(B)
992 LOPFOO: SOJG B,LOPPOP
993 JUMPE R,LOPBLT ; OK, NOT RSUBR
994 SKIPL 1(R) ; NOT PURE RSUBR
1004 LOPBLT: MOVE 0,[ACSAV,,A]
1005 BLT 0,@-3(P) ; RESTORE AC'S
1007 SUB P,C%44 ; RETURN ADDRESS, (M)
1010 NOTEM: CAILE E,8. ; SKIP IF AC IS TO BE PUSHED
1012 IFE ITS, TLO E,400000 ; MAKE LOCAL INDEX
1014 JRST LOPPUS ; FINISH PUSHING
1015 NOAC: SUBI E,8 ; COMPENSATE FOR ADDED AMOUNT
1017 IFE ITS, TLO E,400000 ; MAKE LOCAL INDEX
1019 HLRE F,E ; GET NEGATIVE
1021 HRLZ E,(E) ; GET TYPE CODE
1022 TLZ E,400000+<0,,<-1>#<TYPMSK>> ; KILL SIGN BIT
1023 PUSH TP,E ; PUSH TYPE
1024 JRST LOPPUS ; FINISH PUSHING
1034 NFPOPJ: MOVE TP,FRM ; CLEAR OFF FRM
1039 ; THIS WEIRD PIECE OF CODE IS USED TO DO AN MPOPJ IN SUBRIFIED CODE THAT
1040 ; DOES A SKIP/NON SKIP RETURN.
1049 DPOPUN: PUSHJ P,POPUNW
1052 ; HERE FOR MULTI SEG SIMULATION STUFF
1054 DMOVE: MOVSI C,(MOVE)
1056 DHRRM: MOVSI C,(HRRM)
1058 DHRLM: MOVSI C,(HRLM)
1060 DMOVEM: MOVSI C,(MOVEM)
1062 DHLRZ: MOVSI C,(HLRZ)
1064 DSETZM: MOVSI C,(SETZM)
1066 DXBLT: MOVE C,[123000,,[020000,,]]
1069 MOVE A,UUOH ; GET LOC OF INS
1087 SAVM: 0 ; SAVED M FOR SUBRIFY HACKERS