IMD 1.17: 11/11/2014 14:50:13 82VKXBVERDOS C* VERSADOS/RMS68K OBJECT 4.4 SN=48634 14 OF 22  BT14\82VKXBVERDOS 04208-;FH+G0Bm4 `J(H$HG`+Kp&B+K+Ll2<0<BX@YAb&Jr`BYfAv%H,A6%H0A%H8A%HJf @fpBNNCK& CCaZJfR@  g ;fz;@" ;fXa =fag ,f  g. Zg( Ae" [dCK( -fDDHGj7a  fJgaf()  clքBABBBBhBh B!|SEG2 pNAfA!CBB1| B!|SEG2 1| pNAf薄`Ba,iK0<=%U@f.N*O$iG`+Kp&B+K+i l&Jr`BYfA%H,At%H0A%H8A%HH|+o t <+@xa:` H@0-4H@,NABBIT am zn ,g4k6 -f`g0g` =fRa`  f@`NuB:< &J $g am zn 4g`6 am zn 4k6g(քցSEf am zn 4j  f" am zn +Nu:< am zn  am zn 4kfg_郆SEf`z@@ P@  @ HRğ b OH pNNO .HNu.L2*(-0aa+D0Nu"_. H&g&<(QRD$OĵldElel؊az!OEP/JE8/JA??B$O eTgv`gvC)C BjBBjBL@O(-0fgA@aJf<gJ-(ga Xat`agJ-$ga @a\`aga`8m"b"?S@@@,J5Lg ga a$` ga`agNq5A+D0NH؞M$gpS@@@,A|B(@AJa\$Lyg/p(NNg g%m6*HBB|gBN Nupa|&8%m:*NuH瀀A$0NCgNN *&o|&BjFB*K*E f|'` f|'`|'BjDLNu.L2*aHaxB f fpj& g fa  g4/ &Ja 5 c 5a a>H?a 2&_g*8 gA0NBgNN` apj&a AB5ANup`.L 2*a fFa pj&aV*8 &g, g&A$0NCg f0NCf0NCgNNa BA a CO%I5ANup` f?*8 &g pj&W5@&0Nu/(-0fBg<`"g<`BR ft bf cp@NNB B)(NuBBIr&H6<%Bak$ #f` ff&@Nu`akBfg .f R n` :f@` (f` )f@`g JffggfF*H Kf  am zn (g24f.f. gD g .fR`*R`D` 6<Ga&4<ak``&< am zn 4k^f0fR *g2  am zn 4kR .f`J ց` f4 .f6<` g 'c` =C ` `4<ak 6< G aN4<ak n& f| 6< Ga(4<ak (g 6<Ga 4<a~k (fBBBC am zn 4kD )gg8 Pn2AKAB`Bg Bn Bc=C `JB Bc`.R6<Gap4<ak$< G &&&&6Bn $B|g4B|gJNuJCfBA`$ am zn SC /f <`4Nu4HBgF am zn 4k.f(f @`< *fSCn`$HBCf`< (*f<*`SCnNuJj`QBgQB`BgNug g ga Nu%| 8%| .f %m@0%mD4` g%m6*NuH./ T a( DLNuH./ T ajD DLNu G0@AX@ @fB@C "fpNN&jDJjDtBdR`dЁSdF"jDF‚[Nu.LRaP Nu0/8/`8/0/./ G 2RAA sL@aJ@g aS@n &_$_ONH2*fpDNNggS` g `S` %IA0NBg gNNa&CO%I"jLNuJDo  aSDnNufazRIRNu./ L 8+ fa8+gp"NN7D +Rѓ&_BNu.a2Nu.a"NuHx"ajL 8+,OaB +g -f -f|aa am zn a,OaJjD "LH`Nu.HPBYU@a"L 2Nu./ aJAgp SAn&_NuL 8+24a.gaBJAgSA`A Nua fa$`Nu fa8+gp"NNBNuRf`Rf7DNuz"Bv 0m 9op1NN`@JEoJf 0g 0PSE`RCaa am zn 0m 9o #fJEoSE`RCBalaJ am zn 9o Am0 oJ@m @op1NN`TJEoJf gPSE`RCaa am zn 9o Am0 oJm oE"DENuB@BAt JEoNv #f(J@gpbNN` Ac AcpbNN`4B@BA`CnpcNN҃HA6HAЃSE`H@0NuH2+$KaHgS`R@ЫS'@fpCNNA0NBgz gt gNNA7A gXa55cJa7AR55H5 J /g RB5 J /fRBa2*aT5AL `J`8$k +gJf ` Jg0+HSЊ'@7AL NuA$0@NCgNN$-0*)+B0Nu0<f0*NugH瀀A$0NCgNNLNuaA?* 6Nug0<$`g0<(`+OSH@@,NuA JHM$afLpag/p(NNNup`B@ _.8@gAa,"OUDg"YDnm2N$_. 0H`$_. "JaN8&RC(gSn`UUg SnJg0JgNu$_. 8TDa"OUDg"YDnm2N."Ga|(` ."GapB8R.vl(X"mQ$I&)g""Cn  lX%Q`*""`""mEH b pNNEQ$"$+J NuOO bpNNNu _.02RAANNuNVB.pCANN Bn=|?.ANN_m0. 60m 69o0. 6Amb 6FnZ0. 6Am2.H6HH҂7=A` 0.H2.6HHЂ0=@0.HR=@`j?.ANN_m>|HmNXInvalid hex number - reenter > BgN /NJ.f=nN^NuNVAN -|0.HrN p-@4.H&N X=B m8.7@`0.".0S lHmANBgN N N^ _TNNV-m-`\ nBh`~ n1|`p n1|`b n1|`T n1|`F n1|`8?<NN WnA VnmNCDEOSWz n0(HJgHmNXEnter channel mnemonic > BgN /NBpCANN n0(H gNHmNXEnter channels mask in hex. > BgN /N nHhUa0 _0`HmNX#Enter number of channels to open > BgN /N nCANN B n0(HS-@`HmNXEnter channel number > BgN /N8 n .@CANN HmNX&Enter channel configuration in hex. > BgN /N n .@HpUa0 _0Ri .lNUHmHmNl n00(HJgx0(H f6HmNXChannel Status = BgN /N\ n?(aHmNXCommand Status is BgN /N& n?ajN^NuntrpANANtrpANAN|B-AN&HmNXEnter number of tasks (1-26) > BgN /NCANN ANINPx/-NF+|+m` -@@HmNX** Task BgN //-?<?<N /?<*/< *BgN N HmNX9Command (O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait ) > BgN /Np CANN ANNHJg,- "<8t ?c` m`gaTANNHJfRi -l`ANANBgNN(_.SO O INPAB1|@||1| C>!I1|2p NAgaR(Q INPA1| 1| ""Op#|CODE INAgap#|SEG2 INAgaR)Q I INPA| | !| C>!I"pNAgabR(Q INPA1|"p NAgaBR(QOdNLO O 1|E!JE!J B\4$9|$l jf2*\9Ap#NAgaJ,gOd>N STAKpANAgaOp$NAgapNA``` Op"NAgav h "hJigp  Enter one of the above... 0 = READ THE CURRENT INPUT STATUS. 1 = ENABLE FOR AN INTERRUPT. 2 = QUIT. STATUS OF ALL CHANNELS (ASCII) = <<< Starting command >>> <<< Command done >>> *** OPEN ABORTED *** -- *** ENABLE INTERRRUPT ABORTED *** -- *** DISABLE INTERRRUPT ABORTED *** -- *** READ STATUS ABORTED *** -- *** CLOSE ABORTED *** -- Error code returned in D0 = O(I\A)HDA)HHANBA)HDA6)HHAjNBA)H`A)HdApNBAab m o`9@A09@9@9@A)HDA%)HHA NBA)HDA2)HHANBA&)HDA-)HHANBA)HDA)HHANBAT)H`AT)HdANBA>a @m @o` fA)HDA )HHANBa0< aAC!I1|pNBB0,a)B0)C4Al)HDA)HHANBA)HDA)HHANBA^)HDAW)HHANBAj)HDAz)HHANB`R f^A.)HDAA)HHANBa0<aLpNAg0:)@,AP)HDAn)HHANBA)HDA)HHApNB` f``AC9@!I1| p error : boolean; E ? E @begin E A repeat E B m%PROGRAM DOWNLOAD(INPUT,OUTPUT,INFIL); J(************************************************************************)D(*THISPROGRAMREADSRECORDSFROMASOURCEFILE,PACKSTHEMINTO*)D(*BLOCKSANDWRITESTHEMTOTHETERMINAL.THEPROGRAMRUNSONAN*)(*EXORMACSSYSTEM.*)J(************************************************************************) 6CONSTCMAX=132;(*MAXNO.OFCHARSINONEBLOCK*)-RMAX=132;(*MAXIMUMSINGLERECORDSIZE*)5BLKCNT=1;(*NUMBEROFBLOCKSUNDERONE CHECKSUM*)3BMAX=268;(*BUFFERSIZE=BLKCNT*CMAX+RMAX+2*)/OPTION='AA';(*COM/CHARPROTOCOLOPTIONS*),CHRMAX=127;(*MAXIMUMCHARACTERVALUE*) TYPEBKINDEX=1..CMAX;BFINDEX=INTEGER;*BFTYPE=PACKEDARRAY(.1..BMAX.)OFCHAR;(RSPTYPE=PACKEDARRAY(.1..2.)OFCHAR;+RECTYPE=PACKEDARRAY(.1..RMAX.)OFCHAR; VARQ:BOOLEAN; INFIL:TEXT;(*SOURCEFILE*)>ASCII:ARRAY(.CHAR.)OFINTEGER;(*ASCIICHARACTERCODES*)v{!%/$?ASHEX:PACKEDARRAY(.1..36.)OFCHAR;(*FORHEXCONVERSION*)&REC:RECTYPE;(*HOLDSRAWRECORD*)/RECSIZ:INTEGER;(*HOLDSLENGTHOFRAWREC*)-BUFF:BFTYPE;(*BUFFHOLDSPACKEDBLOCK*))BUFFP:BFINDEX;(*INDEXINTOBUFFER*)*RESPONSE:RSPTYPE;(*ACKNAKRESPONSE*) PROCEDUREINITIALIZE;0TYPECHRARRAY=PACKEDARRAY(.1..16.)OFCHAR;VARI:INTEGER; 2PROCEDUREASGCODE(CODE:INTEGER;CHRSET:CHRARRAY);VARI:INTEGER;BEGIN(*ASGCODE*)FORI:=1TO16DO%ASCII(.CHRSET(.I.).):=CODE+I-1END;(*ASGCODE*) BEGIN(*INITIALIZE*)FORI:=0TOCHRMAXDO0ASCII(.CHR(I).):=32;(*FORCEASCIIBLANKS*) RESET(INFIL);1ASHEX:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';!ASGCODE(112,'pqrstuvwxyz{|}~');!ASGCODE(32,'!"#$%&''()*+,-./'); ASGCODE(48,'0123456789:;<=>?'); ASGCODE(64,'@ABCDEFGHIJKLMNO'); ASGCODE(80,'PQRSTUVWXYZ[\]^_'); ASGCODE(96,'`abcdefghijklmno'); -BUFFP:=4;(*STARTPACKINGRECORDSHERE*)REPEAT/WRITE(OUTPUT,'PREAMBLED');(*SENDPREAMBLE*)(WRITE(OUTPUT,OPTION);(*SENDOPTION*),WRITE(OUTPUT,CMAX:3);(*SENDBLOCKSIZE*)1WRITELN(OUTPUT,BLKCNT:1);(*SENDBLOCKCOUNT*)READLN(INPUT,RESPONSE);6UNTIL(RESPONSE(.1.)='N')OR(RESPONSE(.1.)='T');IFRESPONSE(.1.)='T'(THENQ:=TRUE;(*EARLYTERMINATION*)END;(*INITIALIZE*) IPROCEDURECOMPRESS(VARREC:RECTYPE;VARRECSIZ:INTEGER;VARBUFF:BFTYPE;"VARP:BFINDEX;VARCCNT:INTEGER); VARI,J:INTEGER;RECPTR:INTEGER; PROCEDURECOUT(C:CHAR);BEGIN(*COUT*)BUFF(.P.):=C; P:=P+1;CCNT:=CCNT+1END;(*COUT*) BEGIN(*COMPRESS*) RECPTR:=1;WHILERECPTR<=RECSIZDOBEGIN I:=RECPTR;FWHILE(I<=RECSIZ)AND(REC(.RECPTR.)=REC(.I.))AND(I-RECPTR<35)DO I:=I+1;5I:=I-RECPTR;(*NUMBEROFMATCHINGCHARACTERS*)/IF(I<=3)AND(I>0)AND(REC(.RECPTR.)<>'|')THENBEGINFORJ:=1TOIDOCOUT(REC(.RECPTR.));RECPTR:=RECPTR+IENDELSE IFI>0THENBEGIN COUT('|');COUT(REC(.RECPTR.));COUT(ASHEX(.I+1.));RECPTR:=RECPTR+I END(*THEN*)END(*WHILE*)END;(*COMPRESS*) 2PROCEDUREGETREC(VARP:BFINDEX;VARBUFF:BFTYPE);?VARCPOS:BFINDEX;(*POSITIONINBUFFFORCHARACTERCOUNT*)5CCNT:INTEGER;(*NUMBEROFCHARACTERSINRECORD*) Q:BOOLEAN; BEGIN(*GETREC*)#IFEOLN(INFIL)THENREADLN(INFIL);IFNOTEOF(INFIL)THENBEGIN CPOS:=P; CCNT:=0;,P:=P+2;(*LEAVEROOMFORRECORDCOUNT*) RECSIZ:=0;WHILENOTEOLN(INFIL)DOBEGINREAD(INFIL,REC(.RECSIZ+1.));RECSIZ:=RECSIZ+1;END;(*WHILE*)IFRESPONSE(.2.)='B'THENBEGIN Q:=FALSE;"WHILE(NOTQ)AND(RECSIZ>0)DOIFREC(.RECSIZ.)=''THENRECSIZ:=RECSIZ-1ELSE Q:=TRUEEND;"COMPRESS(REC,RECSIZ,BUFF,P,CCNT);FBUFF(.CPOS.):=ASHEX(.CCNTDIV16+1.);(*CONSTRUCTHEXCHARCOUNT*)*BUFF(.CPOS+1.):=ASHEX(.CCNTMOD16+1.); END(*THEN*)END;(*GETREC*) @PROCEDUREPUTREC(VARQ:BOOLEAN;VARP:BFINDEX;VARBUFF:BFTYPE;VARRESPONSE:RSPTYPE); VARI:BFINDEX; PROCEDUREOUTBLOCK(RTYPE:CHAR);VARI:INTEGER; J:INTEGER;C:INTEGER;(*CHECKSUM*) BEGIN (*OUTBLOCK*)*BUFF(.3.):=RTYPE;(*MARKBLOCKTYPE*)C:=0;4FORI:=3TOCMAX*BLKCNTDO(*COMPUTECHECKSUM*)C:=C+ASCII(.BUFF(.I.).);2C:=CMOD255+1;(*0CHECKSUMISWILDCARD*)BBUFF(.1.):=ASHEX(.CDIV16+1.);(*PLACECHECKSUMINTOBLOCK*)"BUFF(.2.):=ASHEX(.CMOD16+1.);REPEATFORJ:=0TOBLKCNT-1DOBEGINBLKCNT*CMAX+1DO/OUTBLOCK('A');(*OUTPUTINTERMEDIATEBLOCK*)IFEOF(INFIL)THENBEGINFORI:=PTOBLKCNT*CMAXDO5BUFF(.I.):='';(*FORCEBLANKSTOENDOFBLOCK*)'OUTBLOCK('Z');(*OUTPUTLASTBLOCK*) Q:=TRUE;ENDELSEFIFP>BLKCNT*CMAXTHENOUTBLOCK('A')(*OUTPUTINTERMEDIATEBLOCK*)END;(*PUTREC*) BEGIN(*MAIN*) Q:=FALSE; INITIALIZE;WHILENOTQDOBEGINGETREC(BUFFP,BUFF);PUTREC(Q,BUFFP,BUFF,RESPONSE);ENDEND.(*MAIN*)QAAE  if code <> WAIT E then (&S5FBE  begin E  if code = STAT E  then ('$5FBcharacterfunctionITOA(INT) integerINT characterCHARS*352dataCHARS/'123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'/ ,if((INT.lt.1).or.(INT.gt.35))then ITOA='0'elseITOA=CHARS(INT:INT)endif end "character*2functionITOX2(INT) integerINT characterHEX*16integerINDEX dataHEX/'0123456789ABCDEF'/ -if((INT.lt.0).or.(INT.gt.255))then ITOX2='ZZ'elseINDEX=(INT/16)+1"ITOX2(1:1)=HEX(INDEX:INDEX)INDEX=mod(INT,16)+1"ITOX2(2:2)=HEX(INDEX:INDEX)endifreturn end "subroutineINIT(BUFFP,Q,RESP)integerBUFFP logicalQcharacterRESP*(*) include'common' characterPRAMBL*8characterDESTcharacterOPTION*2 dataPRAMBL/'PREAMBLE'/dataDEST/'D'/dataOPTION/'AA'/ -open(7,file='fort.7',access='DIRECT',recl=1) BUFFP=4 10continuewrite(6,2000)PRAMBLwrite(6,2000)DESTwrite(6,2000)OPTION9;550write(6,2000)'132'write(6,1000)'1'read(5,3000)RESP:if((RESP(1:1).ne.'N').and.(RESP(1:1).ne.'T'))then goto10endif if(RESP(1:1).eq.'T')then Q=.true.endif return 1000format(A)2000format(A$)3000format(A)end $subroutineCOUT(BUFF,P,C,CCNT)characterBUFF*(*) integerP characterC integerCCNT BUFF(P:P)=C P=P+1CCNT=CCNT+1 return end 4subroutineCOMPRS(REC,RECSIZ,BUFF,BUFFP,CCNT)characterREC*(*)integerRECSIZcharacterBUFF*(*)integerBUFFP integerCCNT include'common' integerRPTRintegerMATCH integerIcharacterITOAcharacterCHR RPTR=120if(RPTR.le.RECSIZ)then MATCH=1CHR=REC(RPTR:RPTR)do30I=RPTR+1,RPTR+346if((I.le.RECSIZ).and.(REC(I:I).eq.CHR))thenMATCH=MATCH+1else goto40endif 30continue  :40if((MATCH.ge.3).or.(REC(RPTR:RPTR).eq.'|'))then$callCOUT(BUFF,BUFFP,'|',CCNT)1callCOUT(BUFF,BUFFP,REC(RPTR:RPTR),CCNT).callCOUT(BUFF,BUFFP,ITOA(MATCH),CCNT)RPTR=RPTR+MATCHelsedo50I=1,MATCH/callCOUT(BUFF,BUFFP,REC(RPTR:RPTR),CCNT)RPTR=RPTR+1 50continueendifelsereturnendif goto20 end 6subroutineGETREC(BUFF,P,RESP,EOFINF,Q,CHRCNT)characterBUFF*(*) integerPcharacterRESP*(*)logicalEOFINF logicalQintegerCHRCNT include'common' characterREC*132characterITOX2*2characterCHR integerI integerCPOS integerCCNTintegerRECSIZ CPOS=P CCNT=0 P=P+2 RECSIZ=0 do53I=1,RMAXCHRCNT=CHRCNT+1"read(7,rec=CHRCNT,err=80)CHR!if(ichar(CHR).ne.10)thenRECSIZ=RECSIZ+1REC(RECSIZ:RECSIZ)=CHRelse goto55endif 53continue #55if(RESP(2:2).eq.'B')then'M615DRV TEST615 LFaaTESTAC LFaaTEST615 LO aaTESTAC LOaa=/*=/*M615DRV.TEST615.LF=/*G=/*ThischainfilewillgeneratetheTEST615testprogramloadmodule.=/*5=/*Thecommandlinewillacceptargumentsasfollows=/*7=/*Argument01\1=Outputfilelinklistingordevice=/*D=/*Thefollowingshowsthelinkchainsequence.InthisexampletheF=/*printerwaschosenasArgument1,however,theusercouldifheso2=/*desiredhaverequestedanoutputlistingfile.=/*!=/*=CHAINM615DRV.TEST615.LF#PR=/*-=/*Defaultargument01isM615DRV.TEST615.LL=/*=/IFC \1=ARGM615DRV.TEST615.LL=/ENDIF=/*=/*"=LINK ,M615DRV.TEST615.LO,\1;HAMIXSEG SEG0:0,1,8,14 $000000ATTRIBUTES D PINPUT M615DRV.TEST615.ROLIB 0.&.UTILIB.ROEND=/*=END =/*=/*M615DRV.TESTAC.LF=/*/=/* Link chain file to create M615DRV.TESTAC.LO=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M615DRV.TESTAC.LL=/*=/IFC \1=ARGM615DRV.TESTAC.LL=/ENDIF=/* =LINK ,M615DRV.TESTAC.LO,\1;HMIX SEG SEG0:0INPUT M615DRV.TESTAC.ROEND=/*=ENDTEST8SEG0 ACO1 MVME615 Driver Test Program Number of the channel to convert  > Enter one of the above... Time (in milliseconds) for output pulse > 0 = OUTPUT ON. 1 = OUTPUT OFF. 2 = PULSE AN OUTPUT FOR A SPECIFIED TIME. 3 = READ THE CURRENT OUTPUT STATUS. 4 = QUIT. STATUS OF ALL CHANNELS (ASCII) = <<< Starting command >>> <<< Command done >>> *** OPEN ABORTED *** -- *** START OUTPUT ON ABORTED *** -- *** TURN OUTPUT OFF ABORTED *** -- *** START OUTPUT PULSE ABORTED *** -- *** READ STATUS ABORTED *** --  *** CLOSE ABORTED *** -- Error code returned in D0 = OIAv)HDA)HHANBA)HDA)HHANBAZ)H`AZ)HdANBADa m o`9@9@A:09@9@9@A)HDA)HHAnNBA)HDA)HHAXNBA)HDA)HHABNBA)HDA)HHA,NBA)HDA)HHANBA)HDA)HHANBA)H`A)HdANBAta @m @o` fva2A)HDA)HHANB0<a0AC!I1|pCEa 2C E a &CEa A lC !I2|1Ip!I2| 1IpCE` >A ~t A|RP0:v @kxA `C !I2|1Ip!I2| 1Ip Enter one of the above... Time (in milliseconds) for output pulse > 0 = OUTPUT ON. 1 = OUTPUT OFF. 2 = PULSE AN OUTPUT FOR A SPECIFIED TIME. 3 = READ THE CURRENT OUTPUT STATUS. 4 = QUIT. STATUS OF ALL CHANNELS (ASCII) = <<< Starting command >>> <<< Command done >>> *** OPEN ABORTED *** -- *** START OUTPUT ON ABORTED *** -- *** TURN OUTPUT OFF ABORTED *** -- *** START OUTPUT PULSE ABORTED *** -- *** READ STATUS ABORTED *** -- *** CLOSE ABORTED *** -- Error code returned in D0 = OIAv)HDA)HHANBA)HDA)HHANBAZ)H`AZ)HdANBADa m o`9@9@A:09@9@9@A)HDA)HHAnNBA)HDA)HHAXNBA)HDA)HHABNBA)HDA)HHA,NBA)HDA)HHANBA)HDA)HHANBA)H`A)HdANBAta @m @o` fva2A)HDA)HHANB0<a0AC!I1|pCEa 2C E a &CEa A lC !I2|1Ip!I2| 1IpCE` >A ~t A|RP0:v @kxA `C !I2|1Ip!I2| 1IpH{BBrH/HxN ONv=|=|Bn=| HnvHnANP2.JAk g0`BAIH{BBrH/HxN ONv`(BAIH{BBrH/HxN ONv=|=|=nHnvHnANPBAIH{BBrH/HxN ONv=|=|=nHnvHnANP2.JAk g0`BAIH{BBrH/HxN ONv`(BAIH{BBrH/HxN ONvBAFH{BBrH/HxN ONvBAINH{BBrH/HxN ONvBAF>H{BBrH/HxN ONvAI,EAv <NJAf Ch.IG*'I8A'H`++g, (=f$T& ,gJgJf ;gR`B`pRNu ,fR`NuH0NV$U(jd Ef #gZ&O"KvSQ7|,E1"A,NC A|,|@-7|.|0E1aJ@fB (f (WfPk.   ()g``"A,NCg fk.NCf Jf0`H f$Jg^ A (Dfk.k.7|P` (Ff ((fCah :g )f bRA7AN" |-|0A,NCf|@-|0NCfJg A :fCaJAg||7|+.g7|d|k1'|B0+NA'H 'OBSAASARRNBfQ7|NBg,pB+N^L NupB+0N^L NupBN^L NuBN^L Nu #faNu)| 2"j<'i27i6'i8'i<'| @'| D7|FTH :gL 0m 9oJ"Hp :g*QB"H .fR` 0m ZnR` @oL`.pC2avJ@fn .g"Ha A'bX I7A6 .fL .gpC8aBJ@f: .f4pC@a,J@f$ .fpCHaJ@fJg (fBNupNu @b2 `" @c#|  Am$ Zb 0m 9c Am ZbQpNuBNuBB 0m 9b @`Nu&LaRJ@fVEE19|,A,NC|@-9|.NCg&L`,|l1l.9lL9lN `& < '@2'@8'@<'@@'@D7@HRJf "j<'i$2`" Ef)| 2C2rJg QpNuBNuH?oL@/oHJ?oBD?oNBAD*UE@$| *f5|ex|zN|5P*g5P%h C%Il ``*f"25A Ao Aco$5|fx|zN5|*g5|C *g C %h%IlC*gC%P<%IhC" *f@C,f%|*g%P%|*g%P*g%P%Ipr"jlNJ@gT f*g"j`N*g"j`N*g j0*f 5|.R/Ia%L0pNuB"jb*f  Q&+$"jba%L0pNu,5Hv&*,gad"j(*g.&*,(C3C24*t Bf(5|ux|zN4 Bg5|tx|zN4*tB5Bt0<Nu*fIQ*fINu *[f|[ *Ug` *gN *[fl *Ug*Ua @gT|UNu&j@ )f5|hx|zN|U0<Nu&j@S (g  g`%KD%K@`H"jpNB2*\Ҍ,bz(A%L02*P Ab^|[%|\|X|W|Y|VB&j@CBBB1C(N *Wf%K@`2*PA5APBNu```` ```F``z`"`P`z```0`f`~`````` `5|ix|z|{%K~N @5|gx|zN 05|mx|zN "a&5|P2*LJAf05|L5| Cg5CL5C%KD%K@`V2*NJAf 5|N Cg5CN%KH%K@`.5|jx|zN aX2*NJAgA5ANJAg.&jH%K@`2*LJAgA5ALJAg &jD%K@`|U *g*f5|hx|zN 0%jD@5jLB@Nu&j<%K@B@Nua|V`a|V`a%K@0<|[Nu%K@a`FS%K@`h A Cm\5|kx|zN *Vff *[g * [g *[g *[fJCg *Xg *[g|X5C\BC` *VfJCg~ *[f5CPBNu *YgR *Xg5C^`5C\B2*\4*^ *[g$ * [g *[gJAg6JBf` *[g`6JAg"Al.` C5C`B` *[fNu5|kx|zN 5|lx|zN  +,g( +)g +/ga* *Vf8|[` aB*f5C\|$[ *fJfv` *[ga *Vf Cf Nf|T` Zf|T%K@`ha|[%K@`L *[fax| [%K@`(5C^|Y%K@`aF|[%K@`a*|[%K@`a|[%K@`a|[%K@`JCg *VfDC5CRBC%K@` *VfJCf6<  (j0ù,n%L0%K@`R *VfJCf5|kx|zN(j0"Lù,nj*fICQ*fI%L0%K@` *[ga( *Vf6JCf(j0"KB 'g C` Lñ,b*fIJCg CQ*fI 'f*g%L0`%K@%L0`fa| [%K@`JHCN` `(`.N @g|NN +f5|x|zNz +(g +)g +2g +3g +4f5|x|zNB*g+ f.5|zx`+ f5|yx| z||C%IN+ g      *g 7| +f7|I`~ +g( +#g +Zg +[g +_g +df5|x|zNr 7|  +f k f`0 +f7|I+ f+ f B@@*f |`  ||*gV < *fB&*,(j( Cm (Cg` Cm 8Cg`8L(j(B@Nu&j &j*g*(j0 +Zg$ +[g +_g +g, +#g$`aʐ( o"5|gx|zN,BkNa/+ "k`h/+ "k 1fA'HRH'H `( 0fA'HRH'H ` +g(Aj'H'H ANBJkNff 'IO`'I f `JkNgS IS@RHQ"_ 'I ` JkNfS'@ Nu kNf gS'L ANBgF*g +f||NBg *f +g5|x|z`t|(k%L(%L0*f kNf"L$%I,S'I `6"k %I, +$"k lD@H j(< *fBAQ`p`5|x|zpLNuHCN` ``N @g5|x|zNJ +f5|x|zN2*g+ f05|zx`+ f 5|yx| z||C%IN*g> +(g6 +)g. +2g& +3g +4g7|` +fR7|dI`7|d  +f7|dI*f+ f+ f |*g$| +g +g +g|| *n5|x| z||C%IN'@(j((*g < *fB&*,(j( Cm (Cg` Cm 8Cg`8 Af*g (j( *((j( Af%L0L(j(B@NupL(j(%L0Nu&jA*ga$JfNBg5|x|z`*fH`0NBJf0B` g f0BNu o /H*UE@$&j +gf7|,NC7|@,7|.NC|7|(k"L%I,(** F(ORTR8AN B:C f:CQ&g"*,Ao6 o CQS'L |ANBg5|x|zN< g|NBfLNuN pANAPAUSE STOP H` H*UE@5@x|zfzNV.0/j(/j,/jb jfjgj[?j\"j$&j ")22g PR 2f&I +g *zf7|,NC7|@,7|.NC(k%L(%L0"L%I,"L"< Q(** E(RROR%L0|[5|\Cx%Ib|f|gHN L4*xy-C B61 C81 C(j0a*zgB*{"j~a%L0*zgB|[5|\0* @co5|\C%Ib|fHN jL\%L0*zg2| [5|\"jC%Ib|fHNL%L0*zg*| [*|Cf5C\"j%IbHNpL||7|$fA'HTH'H ANB'j(S'L ANB$f &j +g7|@,7|.A,NCg*zgB5|x|z%W0%o(%o,%o bofogo[5o\N^LNuN :BB0*xd2IB@H@ H@H@@p ANAJCgC0gQNu d RECURSIVE CALL UNIT NO. OUT OF RANGE END OF RECORD FORMAT CODE MISSING INVALID CHARACTER IN FORMAT NEST OUT OF RANGE IN FORMAT NUMBER OUT OF RANGE IN FORMAT ILLEGAL DESCRIPTORS IN FORMAT ILLEGAL SIGN WITHOUT SCALE FACTOR INVALID DECIMAL CHARACTER INVALID CHARACTER INVALID HEXADECIMAL CHARACTER FIXED OVERFLOW FLOATING OVERFLOW FLOATING UNDERFLOW NOT ENOUGH RECORDS UNFORMATED READ TOO MANY RECORDS UNFORMATED WRITE ASSIGN MISSING INSUFFICIENT MEMORY FOR BUFFER ERROR RETURN ON FHS READ NOT SUPORTED DEVICE WRITE NOT SUPORTED DEVICE BACKSPACE NOT SUPORTED DEVICE REWIND NOT SUPORTED DEVICE ENDFILE NOT SUPORTED DEVICE DIRECT ACCESS NOT SUPORTED SEQUENTIAL ACCESS NOT SUPORTED UNFORMATED NOT SUPORTED ILLEGAL DIRECT WITHOUT OPEN STMT. ALREADY ACCESSED DIRECT ALREADY ACCESSED SEQUENTIAL I/O ERROR AT SEQUENTIAL ACCESS I/O ERROR AT DIRECT ACCESS END OF FILE ALREADY OPENED ILLEGAL RECORD FORMAT RECORD LENGTH OF OPEN STMT GT OF FILE RECORD NUMBER LE 0 NO FORMATTING FILE I/O ERROR AT PAUSE OR STOP ERROR OCCURED AT CLOSE OUT OF RANGE OF ARRAY   ELEMENT INSUFFICIENT MEMORY ZERO DIVIDE SOURCE ERROR ILLEGAL LABEL ASSIGNED TO VARIABLE IN ASSIGNED GOTO REAL ZERO DIVIDE DOUBLE PRECISION ZERO DIVIDE INTEGER ZERO DIVIDE REAL POWER BASE=0,EXP=<0 DOUBLE PRECISION POWER BASE=0,EXP=<0 INTEGER POWER BASE=0,EXP=<0 SQRT ARG.<0 DSQRT ARG.<0 EXP ARG.>=127LOG(2) DEXP ARG.>=1023LOG(2) ALOG ARG.=<0 DLOG ARG.=<0 ALOG10 ARG.=<0 DLOG10 ARG.=<0 SIN ARG.>=10**6 DSIN ARG.>=10**14 COS ARG.>=10**6 DCOS ARG.>=10**14 TAN ARG. TOO LARGE DTAN ARG. TOO LARGE ARSIN ABS ARG.>1 DARSIN ABS ARG.>1 ATAN ABS ARG. TOO LARGE DATAN ABS ARG. TOO LARGE ATAN2(X/Y) ARG.X=Y=0 DATAN2(X/Y) ARG.X=Y=0 ATAN2(X/Y) ARG. Y TOO LARGE DATAN2(X/Y) ARG. Y TOO LARGE &4Hd (7I\4Ok2MYh~.:G{|}~'4H^kx$<Uj"#"" & 4%  H&jg8|,|-A,NCg @gk05|x|zN&SfLNu/&jf&j8 Ъ4nj`0*+fDB@ +g0<"j8%I(%I0'I"j4 kNg"j8N%I,S'I %K"Nu&Sf"j8 Ъ4o5|wx|zN("&&I`&(K"*AQ%K%@8jj1|,|-0<`\A,NCg jxgNuk05|vx|zN j (1g A1C1g+Lg7|N|k1k.7kL7kN kNg"kNS'I Nu"j4S'I NuHBA*[C$1N LNu0f$RppNV(j0"L-L\-I-jbB@*f=@=|*NNN^NuNV|&jb g|(j0-L:*\=E*NN(j0&L\B@0*^Gg~RbtjRJ@lD  gdBS :m8 @b `B6*\C&LCcQ1RG`6*^G&L\DC Q0*^GjRD@J@o2*^4*\@n"L\B6Ckh<0Q`^&L"L\B6Ao6Ck + g#` <0QAmg$<.6AC#Q`6BC<0Q<.&Ic<0&Ic< ` .fc<-` 0f ,.f-N^Nu6*\C*Q`NV|&jb g|B2*`A *fg|(j00*\j^BA.A @m-L0*^@=@*NN(m , g>$"L :m.$ :m$g0`(m"LSRG$f` *[fJGl~B0-D@opBA-DAj\j^(j0"n6- 0GDSJ@gm&Q. ) f|0 .fSm-`0-jRG;@C+I;|;|(j0\+LB-+LNf0-(mJ@g8B2A+ 4-f- @AJAm0@Q|D *fg|EBA-DAj\j^jR(j0 j^g4*RJBnmv.`j^b"&mgB6C"KSQ.`r6j^C8jRCm&m"KB:*^EQ:E0Q.`0 Acr.C6DCC0Q Ac0 .f< Bb Am4gA-`"j^b Dm-@`CCm -@N^Nu(j06*\C*Q`*ggNNugNNugN NuN"Nu(j0\<F"jbJg<TANuB*[ $f*f5A\(j0&jb2*\B*fCgm`ACQNu(j0&jb\BC*fj\c6*\JCg CB# m0QNuQH`NV&m6-| (m Cb&gB2JAlDA|-`"JlD|-B` "+BBBB:H@8>HA<" Db Eb Fb* 'mB`0' "a(*' "a*,' "ar,.' Bab.HA`BvJAg HA0BAHAgb0QJDfBJEf>JFf:JGf6f<0 .-f g0<-;LN^Nu$BBH@B@H@҂NuJCk4<0Q`((m*fN^NuNV"jb  f4 *fg ") f "mB6-C0Q>-DGN^Nu *fgH"HAI4 f4<BgBvQBJHBBB`")C B$fAL/ / //N "><$HBC0-@-AB@(HBB-B-CD?:<HD DnDDDDHĉ :HDDEA ~ 0@"0@ Eg A Dg/ / //N "`" Ю?JEgm` ?lGA/ / //N "`( @$m n mGAh/ / //N "A/ / //N "$-@-ABBHBJB3oB&.-C&.-CQ  C+I;|C+I +I;|/N.G mm"m&IB*f@mo0-Z@S :m2 @bR@`B6-C&IcQ|1RG&mB6-B*f@@o60CQmg$ * [g6-@0G@bCk0QN^NuFn@$?HBA*[C$1N LNu0N|$NV=|=|=|=|jf-jb&n6 .g7| .g'|(j0"L\-I*NNbg5|nx|zN, mg&5|qx|zN"m2 -g" -f"m -g2DA2`"D"N^NuNV=|=|=|=|=|=||jf-jb(j0"L\-I*NNN^Nu*ggNNugNNugN NuNZNuNV(j0"L\-Ig2  g ,.g ,Tfr`g  g ,Tfr`B"jb"N^NuB*[ $f*f5A\(j0&jb2*\B*fCgm`ADAA Q&jbCQNu(j0\&jbB*fJ@gb@QB6*\B@*f@m6JCg<C$ f *TfQNu 0mT 9c FbH @QNu$ f *TfQNu 0m 9c Fb #QNu5|px|z|{C%I~NBfNu mf +fSNu -fSNuS` g +g -f|`SfNu 1m 9b2-A;A`( 0g gSNu2-JAg 0g *Tg`4- Bg B;B`"m6- Cmb4(ir*il؅ih؀id"`t8DiX:EiREiN@iJ2`Z(*)BՂi4؂i0,.BՂJBՃi؂iڇنiڀكi "#E`;|` NV=m-mC+I;|-|-|N;mf2-j^;A`: Eg4 Dg. +g( -g" .g +g -f|`2-j^;A` Eg( Dg"5|ox|zNV@|{%O~Nܹg  f` +gL -f|`> 0m 9bS`.;|N2-A mfmmg^`FC+I;|;|;|;|Npg5|ox|z|{%L~N02- -fDAm` 2-jR;AC"<B&f6Q"<$< &)fQB"n" ng#@`ꔁ <3BHH@ Bg6nDB&"&)#CQ`B&)#C&"Q&")B4-H g 6HB BlB C C"nb CmxC BgA///(/N "JCglA///(/N "$BBHBJ8< JCmB Bl`DB BoJBl4DBBdxdQB҄тB`$BBHBJ8< nftBB Bl Bo8HDHA8HAJBnBDBB8Be`"HA2HAHD0ggRe(<骀`(<骀"n" ng#A -f"nN^Nu5|rx < ng <B` 5|sxBB|zNߪ`=|׽>. &֕>Ey0:>z򚼯I>>h?6C-?PbM?zG{??@$@Y@@@È@jA.AcAׄAeWU/Gk*} IpXhp+ na a| DS5?]S h/ 䃑BM U a֩h~N |No"X$Rў&~{n}(/j?}*|_{؄,x/rݼ1 ?sy3+.45@Kلr7RMa$9f5;y&=zJԸ?l&'wWAHKŸCǜ B#E|׽7:_ <x@>)>Y9@=c)\BQ~dDcDFw.=HQ_Jk )YLI%|NJ0GƔPƠ4)Rb[-UpKsxW5.PY&%o[:RE]NNTs_a#JatbYcU12keTg}Eq$:i24zkXyRmoI@4Trfjt$ΞzWv7<uxK<@inz`0>Y|rV4~Gs~/2H@S@SAgQSA Q"NuH@ 2H@AlHASAS@ VggH "LNuS@k"  VgLf Nu< NuLDNuHNVL(JfJgJfJg(/*.B@BBH@HB<<FFFglFgfJ@fBDfdD`DJBfBDDfdD`D@/8<ddQ8<HAHC $H@HBBFBDHFHD܄8BDHD܄8BDHD܄Bցdx"ցd܃dޅd(<*BEHEHGBGކdЅЄ" dBC8<gD6<JDgdSD`$(/CB?c Bb Bj,`4DBB B5jJBg"dB`BB` YB <` HBBBg fJfBH0N^LPNDCO1(' ***** DC OUTPUT MODULE TEST PROGRAM ****** ',A4)(' ')(' NON-EXISTANT TASK - ',A4)(' OPEN & OUTPUT TO EACH CHANNEL INDIVIDUALLY')(' CALL OPEN - ERROR')(' CALL OUT - ERROR')(' OPEN & OUTPUT TO EACH CHANNEL UNTIL ALL ARE ON')(' CLOSE CHANNELS, OUTPUTS SHOULD TURN OFF')(' TURN ON ALL OUTPUTS, THEN TURN OFF')(' PULSE EACH OUTPUT IN TURN')(' TRY COMMANDS WITH   CHANNELS CLOSED')(' CALL CLOSE AND CHANNELS CLOSED--OK')(' CALL CLOSE - ERROR')(' CALL OUT AND CHANNELS CLOSED--OK')(' CALL OUT - ERROR')(' CALL OFF AND CHANNELS CLOSED--OK')(' CALL OFF - ERROR')(' CALL STATUS AND CHANNELS CLOSED-OK')(' CALL STATUS - ERROR')(' CALL PULSE AND CHANNELS CLOSED--OK')(' CALL PULSE - ERROR')(' TRY CALL OPEN AND ALREADY OPENED')(' CALL OPEN AND CHANNELS ARE OPEN-OK')(' CALL OPEN - ERROR')('********* TEST COMPLETED **********')DCO2DCO2(' STATUS ERROR-BIT ',I1)(ZIO 'RIODRV TESTE LF aaTESTRIO LFaaTESTE LOaaTESTRIO LO aa=/*=/*RIODRV.TESTE.LF=/*=/*=/IFC \1=ARGRIODRV.TESTE.LL=/ENDIF=/*=LINK ,RIODRV.TESTE.LO,\1;MIXHS SEG SEG0:0 $0INPUT RIODRV.TESTE.ROEND=/*=END  =/*=/*RIODRV.TESTRIO.LF=/*G=/*ThischainfilewillgeneratetheTESTRIOtestprogramloadmodule.=/*5=/*Thecommandlinewillacceptargumentsasfollows=/*7=/*Argument01\1=Outputfilelinklistingordevice=/*D=/*Thefollowingshowsthelinkchainsequence.InthisexampletheF=/*printerwaschosenasArgument1,however,theusercouldifheso2=/*desiredhaverequestedanoutputlistingfile.=/* =/*=CHAINRIODRV.TESTRIO.LF#PR=/*,=/*Defaultargument01isRIODRV.TESTRIO.LL=/*=/IFC \1=ARGRIODRV.TESTRIO.LL=/ENDIF=/*!=LINK ,RIODRV.TESTRIO.LO,\1;HAMIXSEG SEG0:0,1,8,14 $000000ATTRIBUTES D PINPUT RIODRV.TESTRIO.ROLIB 0.&.UTILIB.ROEND=/*=ENDTESTSEG0MOBAvCb-IpNAf*AC-I=|*p Enter one of the above... Time (in milliseconds) for output pulse > <<< Starting command >>> <<< Command done >>> *** START OUTPUT ON ABORTED *** -- *** TURN OUTPUT OFF ABORTED *** -- *** START OUTPUT PULSE ABORTED *** -- *** OPEN ABORTED *** -- *** ENABLE INTERRRUPT ABORTED *** -- *** DISABLE INTERRRUPT ABORTED *** -- *** READ STATUS ABORTED *** -- *** CLOSE ABORTED *** -- Error code returned in D0 = OIHA)HDA)HHAlNBA)HDA)HHAVNBA)H`A)HdA\NBAa m o`9@9@A009@9@9@9@9@A)HDA)HHANBA)HDA)HHANBA)HDA)HHANBA)HDA)HHANBA)HDA)HHANBA)HDA)HHA|NBA0)HDAF)HHAfNBA)H`A)HdAlNBAa @m @o` fvaA4)HDAG)HHANB0<aADCf!I1|pH?PUXK`GhGp<xGFNRJFIJ)INITREGSEQU*SAVEFORINITIALREGISTERS DS.L1D0DS.L1D1=SESSIONNUMBERVOLNAMDS.L1D2=VOLUMENAMEUSERNUMDS.L1D3=USERNUMBERCATNAMDS.L1D4=CATALOGUENAME DS.L1D5 DS.L1D6 DS.L1D7 ******************** VERSION MESSAGE ******************** /VMSGSDC.B'ASCIIFILETRANSFER-VERSION2.05' VMSGEEQU*-1DS0 ******************************** COMMAND LINE RECEIVING AREA ******************************** CLINECOMLINE$A0 * RETURN REGISTERS FROM PARSE 1PARSAREGDS.L1A1-ADDRESSOFOUTPUTFIELDOR0*DS.L1A2-ADDRESSOFOPTIONSFIELDOR0  * PREAMBLE VARIABLES #COMOPTDS.B1COMMUNICATIONSOPTION)CHROPTDS.B1CHARACTERCONVERSIONOPTION,CHRBLKDC.L0NUMBEROFCHARACTERSPERBLOCK+BLKSUMDC.L0NUMBEROFBLOCKSPERCHECKSUM +BLKREDDC.L0RUNNINGNUMBEROFBLOCKSREAD%WBUFDS.L1ADDRESSOFWORKINGBUFFER,WLGHDC.L0LENGTHOFDATAINWORKINGBUFFER,CHRNUMDC.L0NUMBEROFCHARACTERSPERFRAME%BLKCMAXDS.L1LIMITADDRESSOFFRAME0DPSAVDS.L14SAVERGISTERSFORDOWNLOADPROCESS,RESPONSEDC.B''RESPONSE(ACK/NAK)TOHOST DC.B$0DDS0 DLTEMPDS.L1TEMPORARY*BBOUNDSDS.L2BUFFERBOUNDARIESONUPLOAD3UREC1DS.L1ADDRESSOF1STRECINFRAMEFORUPLOAD4USAVCHRDS.W1SAVEFORCHRREPLACEDBYCRINUPLOAD)BCHRDS.W1SAVEFORCOMPRESSEDCHARACTER * OPTIONS EQUATES AND FLAG WORD "BEQU01=TRUNCATETRAILINGBLANKSCEQU11=USECHECKSUMS*DEQU21=DISPLAYDATAASITISTRANSFEREDHEQU31=HALFDUPLEXMODE%REQU41=C/RTOBEADDEDAFTERBLOCK OPTFLGDC.B(1< TO TERMINATE PROGRAM'TRANMEEQU*-1DS0 *********************** TRANSPEQU************************ 6* SET UP SERVICE ADDRESSES IN VARIOUS PARAMETER BLOCKS LEAHOSTIO-A(A6),A0MOVE.LA0,IOS1+24-A(A6)LEATERMIO-A(A6),A0MOVE.LA0,IOS5+24-A(A6)LEATIMEV-A(A6),A0MOVE.LA0,TSVC-A(A6) LEATRANMS-A(A6),A1LEATRANME-A(A6),A2)BSRMSGOUTTELLTHEMOFTRANSPARENTMODE  >* PERFORM INPUT I/O AND PROCEED ON TERMINAL PORT AND HOST PORT 1BTST#H,OPTFLG-A(A6)AREWEINHALFDUPLEXMODE?BNE.STRANS04BRANCHIFYES-BSRINPP5CINPUTONECHARACTERFROMTERMINALBRA.STRANS05.TRANS04BSRINPP5INPUTONELINEFROMTERMINALTRANS05BSRINPP1HOSTPORT  !*********************************!* ENABLE ASQ AND WAIT FOR EVENT *!********************************* TRANSRTNEQU*4MOVE.LA7,SAVSTACK-A(A6)SAVECURRENTSTACKPOINTER!MOVE.L#WTEVNT,D0ENABLEASQ,ASRTRAP#1  J* IN CASE OF TIMEOUT EVENT, PERFORM INPUT I/O AND PROCEED ON TERMINAL PORT)*ANDGOBACKANDWAITFORANOTHEREVENT. TIMEVEQU*/MOVE.LSAVSTACK-A(A6),A7RESTORESTACKPOINTER BSRASQREAD%LEATIM1-A(A6),A0ADDROFTIMERP.B.&CLR.W8(A0)CLEARPERIODICACTIVATIONMOVE.L#RQSTPA,D0TRAP#12BTST#TBSY,TRANFLG-A(A6)ISTERMINALBUFFERBUSY?5BNETRANS48BRANCHIFYES-QUEUEANOTHERTIMEEVENT.BTST#H,OPTFLG-A(A6)NO-ISHALFDUPLEXSET?BNE.STRANS07BRANCHIFYES-BSRINPP5CONPUTONECHARACTERFROMTERMINALBRA.STRANS09.TRANS07BSRINPP5INPUTONELINEFROMTERMINALTRANS09BRATRANSRTN  '* IN CASE OF BREAK EVENT, TERMINATE !!! BREAKSVEQU*/MOVE.LSAVSTACK-A(A6),A7RESTORESTACKPOINTER(BREAKSV2BSRHALT1HALTI/OONHOSTPORTBEQ.SBREAKSV2BREAKSV4BSRHALT5BEQ.SBREAKSV4BRAXFRTERMGOTERMINATEPAGE *******************************************)*EVENTWASI/OCOMPLETIONONHOSTPORT********************************************  HOSTIOEQU*7MOVE.LSAVSTACK-A(A6),A7RESTORECURRENTSTACKPOINTERBSRASQREADREADTHEEVENTLEAIOS1H-A(A6),A0BSRHLTCHKCHECKFORHALTI/OBEQTRANSRTNBRANCHIFYES LEAIOS1-A(A6),A0CMP.B#$EA,4(A0)(BEQ.STRANS12DON'TCOMPLAINONOVERRUN BSRIOERCHKCHECKFORI/OERROR3TRANS12CMP.W#$0002,(A0)SEEIFFROMWRITEREQUESTBEQ.STRANS55BRANCHIFYES  3* EVENT WAS FROM INPUT OR OUTPUT WITH INPUT REQUEST /BTST#2,IOS1+1-A(A6)WASITOUTPUTWITHINPUT?BEQ.STRANS16BRANCHIFNO;MOVE.LIOS1+8-A(A6),IOS1+12-A(A6)CORRECTSTARTINGADDRESS9TRANS16BTST#TBSY,TRANFLG-A(A6)ISTERMINALBUFFERFREE?BEQ.STRANS20BRANCHIFYES7BSET#TPND,TRANFLG-A(A6)SETTERMINALI/OPENDINGFLAGBRATRANSRTNRETURNFROMEVENT   1TRANS20LEATBUF-A(A6),A3ADDRESSTOMOVEDATATO0BSREDITMOV1MOVEDATATOWORKINGOUTPUTBUFFERBSRPREACHKSEEIF'PREAMBLE'BEQTRANNXTBRANCHIFYES)BSRINPP1INPUTANDPROCEEDONHOSTPORT6TST.LTERMLGH-A(A6)LENGTHOFDATAINTERMINALBUFFER*BEQ.STRANS52BRANCHIFNODATATOOUTPUTBSRHALT5HALTI/OONTERMINAL7BSET#TBSY,TRANFLG-A(A6)MARKTERMINALBUFFERNOTFREE7BTST#TIN,TRANFLG-A(A6)AREWEINTERMINALINPUTMODE?BNE.STRANS50BRANCHIFYES*BSROUTP5FOUTPUTANDPROCEEDTOTERMINAL  =* SET TIMER TO ACTIVATE US A LITTLE LATER ONLY IF NOT ECHOING /TRANS48LEATIM1-A(A6),A0TIMERPARAMETERBLOCK;MOVE.W#$7000,8(A0)INTERVALACTIVATIONATSPC.SVC.ADDR.MOVE.L#RQSTPA,D0TRAP#1 BSRXFRABORT+BRA.STRANS52GORETURNFROMEVENTSERVICE  * OUTPUT TO TERMINAL (IMAGE) /TRANS50BSROUTW5IOUTPUTCHARACTERTOTERMINAL2BCLR#TBSY,TRANFLG-A(A6)CLEARTERMINALBUSYFLAGMOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVEPROCESSINGINPUTADDRESS 2CMP.B#'B',COMOPT-A(A6)'B'COMMUNICATIONOPTION?BNE.SDL02BRANCHIFNO BSRWAITDC1 DL02MOVE.B#'N',D0.BSRRESPOND1RESPONDTOPREAMBLEWITH'NEXT?')BSRINPP5CINPUTANDPROCEEDONTERMINAL  ********************WAITFOREVENT********************  DLWAITEQU*,MOVE.LA7,SAVSTACK-A(A6)SAVESTACKPOINTERMOVE.L#WTEVNT,D0(TRAP#1WAITFORHOSTORTERMINALINPUTPAGE ,********************************************+*EVENTWASI/OCOMPLETIONFROMHOSTPORT*,********************************************  DHIOEQU*/MOVE.LSAVSTACK-A(A6),A7RESTORESTACKPOINTERBSRASQREADREADTHEEVENTLEAIOS1H-A(A6),A0%BSRHLTCHKWASTHISFROMAHALTI/O?BEQDLWAITBRANCHIFYES LEAIOS1-A(A6),A0+CMP.B#$EA,4(A0)DON'TCOMPLAINONOVERRUN BEQ.SDL10 BSRIOERCHKCHECKFORI/OERROR 0DL10CMP.W#$0002,(A0)SEEIFFROMWRITEREQUESTBEQDL500BRANCHIFYES  )* EVENT WAS INPUT COMPLETION ON HOST PORT /BTST#2,IOS1+1-A(A6)WASITOUTPUTWITHINPUT?BEQ.SDL40BRANCHIFNO;MOVE.LIOS1+8-A(A6),IOS1+12-A(A6)CORRECTSTARTINGADDRESS/BTST#H,OPTFLG-A(A6)ISTHISJUSTANACKECHO?,BEQ.SDL45BRANCHIFYES,PUTUPREADAGAIN DL40LEATBUF-A(A6),A3,ADD.LWLGH-A(A6),A3ADDRESSTOMOVEDATATO)BSREDITMOV1MOVEDATATOWORKINGBUFFER5ADD.L#1,BLKRED-A(A6)BUMP#BLOCKSREADFORCHECKSUMMOVE.LTERMLGH-A(A6),D0LEATBUF-A(A6),A2?ADD.LWLGH-A(A6),A2POINTA2TOFIRSTBYTEOFLASTMOVEDBLOCK 6DL42CMP.LCHRBLK-A(A6),D0DIDWEFILLTHEFULLBLOCK?BHS.SDL43BRANCHIFYES0MOVE.B#'',0(A2,D0)FORCEBLANKSTOFULLBLOCK ADD.L#1,D0 BRADL42 DL43ADD.LWLGH-A(A6),A27ADD.LD0,WLGH-A(A6)BUMPDATALENGTHINWORKINGBUFFERMOVE.LBLKRED-A(A6),D0CMP.LBLKSUM-A(A6),D0'BHS.SDL60BRANCHIFENTIREFRAMEREAD !DL45BSRINPP1READANOTHERBLOCKBRADLWAITGOWAITFOREVENT  J* ENTIRE FRAME HAS BEEN RECEIVED - IF TERMINATE HAS BEEN KEYED IN, GET OUT 9DL60BTST#TFLG,TRANFLG-A(A6)HASTERMINATEBEENKEYEDINBEQ.SDL90BRANCHIFNO 2CMP.B#'B',COMOPT-A(A6)'B'COMMUNICATIONOPTION?BNE.SDL62BRANCHIFNO BSRWAITDC1 DL62MOVE.B#'T',D0-BSRRESPOND2RESPONDWITHOUTPUTANDPROCEED BRADLWAIT  A*NOTERMINATIONYET-VALIDATECHECKSUM.IFBADCHECKSUMASKFOR* RETRANSMISSION ?DL90MOVE.LCHRNUM-A(A6),D0NUMBEROFCHARACTERSWESHOULDHAVECMP.LWLGH-A(A6),D0)BEQ.SDL100BRANCHIFCHARACTERCOUNTOK-MOVE.L#4,D1COMPLAINONBADCHARACTERCOUNTLEABADCCT-A(A6),A0-BSRBINDASCCONVERTEXPECTEDCHARACTERCOUNTMOVE.LWLGH-A(A6),D0LEABADCCR-A(A6),A0-BSRBINDASCCONVERTRECEIVEDCHARACTERCOUNTBSRLF6LEABADCCS-A(A6),A1LEABADCCE-A(A6),A2*BSRMOUTTELLTHEMOFBADCHARACTERCOUNT DL95EQU*2CMP.B#'B',COMOPT-A(A6)'B'COMMUNICATIONOPTION?BNE.SDL97BRANCHIFNO BSRWAITDC1 #DL97MOVE.L#DELAY,D0WAITASECONDMOVE.L#1000,A0TRAP#1MOVE.B#'R',D0)BSRRESPOND1RESPOND/OUTPUTWITHINPUT'BSRDLINITFINITIALIZEFRAMEVARIABLES BRADLWAIT 2DL100BTST#C,OPTFLG-A(A6)ISCHECKSUMOPTIONSET?BEQ.SDL130BRANCHIFNO'LEATBUF-A(A6),A1POINTA1TOCHECKSUM.MOVE.L#2,D1NUMBEROFCHARACTERSINCHECKSUMBSRASCHBINCONVERTTOASCIITST.WD0ISCHECKSUMWILD?'BEQ.SDL130BRANCHIFYES(0CHECKSUM)3MOVE.WD0,-(A7)SAVECHECKSUMFORLATERCOMPARISON6LEATBUF+2-A(A6),A1WHERETOBEGINCOMPUTINGCHECKSUM MOVE.LA1,A2ADD.LWLGH-A(A6),A2!SUB.L#2,A2ENDOFDATA+1BYTE CLR.LD0 CLR.LD1 6DL110MOVE.B(A1)+,D1ACCUMULATECHECKSUMINTHISLOOP ADD.LD1,D0 CMP.LA1,A2-BNE.SDL110BRANCHIFMORECHARACTERSTOSUM DIVU#255,D0 CLR.WD0SWAPD0SUMMOD255IND0.W$ADD.W#1,D0INSURENONZEROCHECKSUM CLR.LD20MOVE.W(A7)+,D2CHECKSUMSENTFROMOTHERSYSTEMCMP.WD0,D2SEEIFITMATCHESBEQ.SDL130BRANCHONMATCH+BSRNAKRPTSEEIFRETRYCOUNTISEXHAUSTEDBNE.SDL115BRANCHIFNO-LEAFORCMS-A(A6),A1TELLOFFORCINGCHECKSUMLEAFORCME-A(A6),A2 BSRMOUT BRA.SDL130 0DL115MOVE.L#4,D1COMPLAINONCHECKSUMMISMATCHLEABADCST-A(A6),A0 BSRBINDASC MOVE.LD2,D0LEABADCSR-A(A6),A0 BSRBINDASCBSRLF6LEABADCSS-A(A6),A1LEABADCSE-A(A6),A2%BSRMOUTPUTUPBADCHECKSUMMESSAGE$BRADL95GOTELLTHEMTORETRANSMIT  (* CHECKSUM MATCHES - GO PROCESS THE DATA ?DL130MOVE.LREP2-A(A6),REP1-A(A6)RESETCHECKSUMRETRYCOUNTERLEATBUF-A(A6),A0%ADD.L#3,A0BYPASSCHARANDCHECKSUM,MOVE.LA0,TPTR-A(A6)SAVEPOINTERINTOTBUFBSRDPROCESSPROCESSTHEDATABEQ.SDL140BRANCHIFDONE  ,* COME HERE FOR FRAME PROCESSED SUCCESSFULLY 6CMP.B#'Z',TBUF+2-A(A6)HASTHELASTFRAMEBEENREAD?BEQ.SDL140BRANCHIFYES 2CMP.B#'B',COMOPT-A(A6)'B'COMMUNICATIONOPTION?BNE.SDL138BRANCHIFNO BSRWAITDC1  DL138MOVE.B#'N',D0)BSRRESPOND1RESPOND/OUTPUTWITHINPUT&BSRDLINITFINITIALIZEFORNEXTFRAMEBRADLWAITGOWAITFORNEXT  DL140EQU*2CMP.B#'B',COMOPT-A(A6)'B'COMMUNICATIONOPTION?BNE.SDL148BRANCHIFNO BSRWAITDC1 DL148MOVE.B#'T',D0-BSRRESPOND2RESPONDWITHOUTPUTANDPROCEED BRADLWAIT  (* EVENT WAS OUTPUT COMPLETE ON HOST PORT DL500EQU*BTST#TFLG,TRANFLG-A(A6)+BNE.SDL550BRANCHIF''T''KEYINFLAGSET * NORMAL TERMINATION )MOVE.LIOS4+8-A(A6),D0NUMBERTOCONVERT-MOVE.L#6,D1NUMBEROFCHARACTERSTOCONVERTLEADDONEN-A(A6),A0)BSRBINDASCCONVERTTOASCIIFORDISPLAYBSRLF6)LEADDONES-A(A6),A1'DOWNLOADCOMPLETED'LEADDONEE-A(A6),A2 BSRMOUT BRAQUITUPDN  * TERMINATED BT 'T' KEYIN .DL550MOVE.LIOS4+8-A(A6),D0NUMBERTOCONVERT-MOVE.L#6,D1NUMBEROFCHARACTERSTOCONVERTLEADTERMN-A(A6),A0)BSRBINDASCCONVERTTOASCIIFORDISPLAYBSRLF6:LEADTERMS-A(A6),A1'DOWNLOADTERMINATEDWITH'T'KEY-IN'LEADTERME-A(A6),A2 BSRMOUT BRAQUITUPDNPAGE )*****************************************(*EVENTWASI/OCOMPLETIONONTERMINAL*)*****************************************  DTIOEQU*/MOVE.LSAVSTACK-A(A6),A7RESTORESTACKPOINTERBSRASQREADREADTHEEVENTLEAIOS5H-A(A6),A0%BSRHLTCHKWASTHISFROMAHALTI/O?BEQTRANSRTNBRANCHIFYES MOVE.BBUFF5S-A(A6),D0CMP.B#'T',D0'BNE.SDL700BRANCHIFNOTA'T'KEYIN-BSET#TFLG,TRANFLG-A(A6)YES-FLAGTHEFACT BRA.SDL800 .DL700CMP.B#'D',D0WASKEYINA'D'(DISPLAY)? BNE.SDL800)BCHG#D,OPTFLG-A(A6)CHANGEDISPLAYFLAG1BEQ.SDL750BRANCHIFDISPLAYWASPREVIOUSLYOFFBSRLF61LEARDOFS-A(A6),A1PUTOUT'DISPLAYOFFMESSAGE'LEARDOFE-A(A6),A2 BSRMSGOUTBSRLF6 BRA.SDL800 DL750BSRLF60LEARDONS-A(A6),A1PUTOUT'DISPLAYONMESSAGE'LEARDONE-A(A6),A2 BSRMSGOUTBSRLF6 *DL800BSRINPP5CTAKEANOTHERCHARACTERIN BRADLWAITPAGE 2**************************************************0*DLINITFINITIALIZESVARIABLESINPREPARATION**FORREADINGNEXTFRAME*2************************************************** 6DLINITFCLR.LBLKRED-A(A6)CLEARNUMBEROFBLOCKSREAD,LEATBUF-A(A6),A0ADDRESSOFWORKINGBUFFER/MOVE.LA0,WBUF-A(A6)ADDRESSINWORKINGBUFFER'CLR.LWLGH-A(A6)CLEARLENGTHOFFRAMERTS   9*********************************************************+*DPROCESSPROCESSESTHEFRAMEJUSTREAD.**EXITCONDITIONCODESARE:*7*EQUAL-FRAMEPROCESSINGOK(LASTRECORDPROCESSED)*0*PLUS-FRAMEPROCESSINGOK(NOTLASTRECORD)*9*********************************************************  DPROCESSEQU*=MOVEM.LDPSAV-A(A6),D0-D7/A0-A5PICKUPRESUMEREGISTERS...JMP(A0)...ANDGOTHERE&DPINBSRGETCHRGET1STCHAROFLENGTH)BEQ.SDL910BRANCHONCHARACTEROBTAINED%LEADPIN-A(A6),A0NEEDANOTHERBLOCK6MOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVERESUMEREGISTERSBRADPEXOKTAKEOKEXIT *DL910CMP.B#'',D0SEEIFNOMORERECORDS&BEQDPEXENDBRANCHIFNOMORERECORDS/MOVE.BD0,DLTEMP-A(A6)SAVECHARACTEROBTAINED 'DL915BSRGETCHRGET2NDCHAROFLENGTH)BEQ.SDL920BRANCHONCHARACTEROBTAINED&LEADL915-A(A6),A0NEEDANOTHERBLOCK6MOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVERESUMEREGISTERS BRADPEXOK DL920MOVE.BD0,DLTEMP+1-A(A6)0LEADLTEMP-A(A6),A1CONVERTASCIIHEXTOBINARY-MOVE.L#2,D1NUMBEROFCHARACTERSTOCONVERT BSRASCHBIN(MOVE.LD0,RLGH-A(A6)SAVERECORDLENGTH 4* MOVE RECORD FROM TBUF TO RBUF - EXPANDING AS WE GO +LEARBUF-A(A6),A3ADDRESSOFRECORDBUFFER CLR.LD3'GET'RELATIVECOUNTER4MOVE.LRPTR-A(A6),D2D2=POINTERINTO'PUT'BUFFER SUB.LA3,D2 6DL951CMP.LRLGH-A(A6),D3SEEIFWE'VEMOVEDALLCHARSBHS.SDL1000BRANCHIFYES #DL960BSRGETCHRGETNEXTCHARACTER*BEQ.SDL962BRANCHIFCHARACTERAVAILABLE"LEADL960-A(A6),A0RESUMEADDRESS6MOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVERESUMEREGISTERS !BRADPEXOKGOEXITFORNEWFRAME $DL962ADD.L#1,D3BUMP'GET'COUNTER.CMP.B#'|',D0ISITTHECOMPRESSIONSENTINEL?BNE.SDL980BRANCHIFNO )DL964BSRGETCHRGETCOMPRESSEDCHARACTER*BEQ.SDL965BRANCHIFCHARACTERAVAILABLE&LEADL964-A(A6),A0GETRESUMEADDRESS6MOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVERESUMEREGISTERS)BRADPEXOKBRANCHFORNEWFRAMEREQUIRED $DL965ADD.L#1,D3BUMP'GET'COUNTER/MOVE.BD0,BCHR-A(A6)SAVECOMPRESSEDCHARACTER $DL966BSRGETCHRGETCOUNTCHARACTER*BEQ.SDL968BRANCHIFCHARACTERAVAILABLE&LEADL966-A(A6),A0GETRESUMEADDRESS6MOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVERESUMEREGISTERS+BRA.SDPEXOKBRANCHFORNEWFRAMEREQUIRED $DL968ADD.L#1,D3BUMP'GET'COUNTER2SUB.B#'0',D0CONVERTCODETOBINARYREPEATVALUE CMP.L#9,D0 BLS.SDL970BRANCHIFRANGE0-9SUB.B#7,D0RANGE10-35 *DL970TST.BD0AREWESTILLUNCOMPRESSING?BEQ.SDL951BRANCHIFNO0SUB.L#1,D0DECREMENTREMAINGCOMPRESSIONCOUNT*MOVE.BBCHR-A(A6),0(A3,D2.L)MOVETOBUFF"ADD.L#1,D2ADVANCE'PUT'POINTER BRA.SDL970 9DL980MOVE.BD0,0(A3,D2.L)MOVE'RAW'DATABYTETOBUFFER"ADD.L#1,D2ADVANCE'PUT'POINTER BRADL951  '* OUTPUT RECORD TO DISK AND/OR TERMINAL (DL1000TST.LD2TESTUNCOMPRESSEDLENGTH"BHI.SDL1005BRANCHIFLENGTH>0-MOVE.L#1,D2IFNOTTHENFORCELENGTHOFONE$MOVE.B#'',(A3)FORABLANKRECORD 4DL1005MOVE.LA3,RPTR-A(A6)SETPOINTERBACKTORBUF2LEAIOS4-A(A6),A0ADDRESSOFDISKPARAMETERBLOCK MOVE.LA3,12(A0)BUFFERADDRESS$ADD.LD2,A3ADDUNCOMPRESSEDLENGTH'SUB.L#1,A3POINTA3TOLASTCHARACTER'MOVE.LA3,16(A0)ENDINGBUFFERADDRESSMOVE.L#$00026028,(A0)TRAP#2OUTPUTTODISK BEQ.SDL1010BRANCHONGOODI/O MOVE.LD0,-(A7)SAVEERRORCODEBSRHALT5HALTTHEI/OMOVE.L(A7)+,D0$BSRIOSERRCOMPLAINOFBADDISKI/O$BRAXABORTERRORONBADDISKOUTPUT 6DL1010ADD.L#1,IOS4+8-A(A6)BUMPRANDOMRECORDNUMBER4BTST#D,OPTFLG-A(A6)AREWETODISPLAYTOTERMINAL?BEQ.SDL1020BRANCHIFNOMOVEM.L$C(A0),A1/A2BSRHALT5HALTI/OONTERMINAL"BSRMSGOUTPUTDATAONTOTERMINAL"DL1020BRADPINGOFORNEXTRECORD  1DPEXOKMOVE.L#1,D0INDICATEPLUSCONDITIONCODES BRA.SDPIO /DPEXENDCLR.LD0INDICATEEQUALCONDITIONCODES +DPIOMOVED0,-(A7)SAVEFORCONDITIONCODES,CMP.B#$FF,IOS5+4-A(A6)ISI/OINPROGRESS?BEQ.SDPRTSBRANCHIFYESBSRINPP5CNOSOREISSUEINPUT+DPRTSMOVE(A7)+,D0RESTORECONDITIONCODESRTSPAGE .**********************************************'*GETCHRGETSONECHARACTERFROMTBUF*)*POINTEDATBYTPTR.IFALLCHARACTERS*(*HAVEBEENFETCHED,UNEQUALCONDITION*(*CODESARERETURNED.OTHERWISE,EQUAL*(*CONDITIONCODESARERETURNEDANDTHE* *CHARACTERISRETURNEDIND0.*.**********************************************  GETCHRMOVE.LTPTR-A(A6),A0MOVE.B(A0),D0LEATBUF-A(A6),A1 SUB.LA1,A0CMP.LCHRNUM-A(A6),A0.BHS.SGETCNOBRANCHIFNOCHARACTERTORETURN+ADD.L#1,TPTR-A(A6)ADVANCDBUFFERPOINTER&CMP.LD0,D0SETEQUALCONDITIONCODESRTS/GETCNOMOVE.L#1,D0SETUNEQUALCONDITIONCODESRTSPAGE2**************************************************0*IMSGDISPLAYSMESSAGEEXPLAININGINTERACTIVE* *OPTIONS.*2**************************************************  JIM1S DC.B 'KEY IN ''T'' TO TERMINATE TRANSFER AND RESUME TRANSPARENT MODE' IM1EEQU*-1DS0 /IM2SDC.B'''D''TOTOGGLETHERECORDDISPLAY' IM2EEQU*-1DS0  IMSGEQU*BSRLF6TWOLINEFEEDSLEAIM1S-A(A6),A1LEAIM1E-A(A6),A2 BSRMSGOUTLEAIM2S-A(A6),A1LEAIM2E-A(A6),A2 BSRMSGOUTBSRLF6TWOLINEFEEDSRTSPAGE %**************************************UPLOADSEQUENCE*%*************************************  ULOADMSDC.B'UPLOADINITIATED'ULOADMEEQU*-1DS0  HSEVMS DC.B 'ENTER SENDING FILE NAME OR ''Q'' TO RESUME TRANSPARENT MODE' SEVMEEQU*-1DS0  *NAKMSDC.B'NAKRECEIVED-RETRANSMITTING'  NAKMEEQU*-1DS0  2UTERMSDC.B'UPLOADTERMINATEDWITH''T''KEY-IN'(UTERMNDC.B'XXXXXXRECORDSTRANSFERRED'UTERMEEQU*-1DS0  UDONESDC.B'UPLOADCOMPLETED'(UDONENDC.B'XXXXXXRECORDSTRANSFERRED'UDONEEEQU*-1DS0PAGE *************************UPLOADINGROUTINE*************************  3UPLOADLEASEVMS-A(A6),A1ASKFORSENDINGFILENAMELEASEVME-A(A6),A2 BSRMSGOUT2BSRINPW5TAKESENDINGFILENAME(INPUTANDWAIT)'BSRSBARGCONVERTTOUPPERCASE111484 BSRASGFLUASSIGNTHEFILE&BEQ.SUL00BRANCHIF'Q'NOTKEYEDIN*MOVE.B#'T',D0TERMINATIONACKNOWLEDGMENT!BSRRESPOND2SENDITTOTHEHOST BRAQUITUPDN UL00BSRLF63LEAULOADMS-A(A6),A1TELLTHEMUPLOADISINITIATEDLEAULOADME-A(A6),A2 BSRMSGOUT BSRIMSG1CLR.BBUFF5S-A(A6)CLEARBYTEFOROPERATORINPUT0BSRINPP5CINPUTANDPROCEEDFROMHOMETERMINAL  2* PLACE COMPLETION ADDRESSES INTO PARAMETER BLOCKS LEAUHIO-A(A6),A0MOVE.LA0,IOS1+24-A(A6)LEAUTIO-A(A6),A0MOVE.LA0,IOS5+24-A(A6)  * INITIALIZE FOR RECORD READS /LEAIOS4-A(A6),A0ADDROFFILEPARAMETERBLOCK$CLR.L8(A0)CLEARRRNFORDISKREAD#LEARBUF-A(A6),A1STARTINGADDRESS(LEARBUF+RMAX-1-A(A6),A2ENDINGADDRESS/MOVEM.LA1/A2,12(A0)PLUGINBUFFERBOUNDARIES-MOVE.L#$00016020,(A0)PLUGINREADFUNCTION!LEATBUF-A(A6),A0PACKINGBUFFER.ADD.L#3,A0BYPASSCHECKSUMANDEOFCHARACTER6MOVE.LA0,TPTR-A(A6)SAVEPOINTERFORPACKINGRECORDS/MOVE.B#'A',-1(A0)INDICATEINTERMEDIATEFRAME:MOVE.LA0,UREC1-A(A6)SAVEADDRESSOF1STRECORDINFRAME6CLR.LUSTAGEL-A(A6)INDICATENOSTAGEDDISPLAYRECORD  =* READ ANOTHER RECORD ONLY IF WE STILL HAVE ROOM IN THE FRAME 5UL10MOVE.LTPTR-A(A6),D0POINTERINTOPACKINGBUFFER1LEATBUF-A(A6),A0BASEADDRESSOFPACKINGBUFFER-SUB.LA0,D0D0=NUMBEROFCHARACTERSPACKED(CMP.LCHRNUM-A(A6),D0SEEIFFULLFRAME!BHS.SUL100BRANCHIFFRAMEFULLLEAIOS4-A(A6),A0TRAP#2READTHERECORDBNE.SUL15BRANCHONBADREAD  E*READWASGOOD,TRANSFERRECORDTOTBUFUNDERANEDITINGMOVE.PLACED*THEACTUALNUMBEROFCHARACTERSMOVEDINTOTHELENGTHFIELDOFTHE*FRAME. *ADD.L#1,8(A0)BUMPRANDOMRECORDPOINTER+MOVE.LTPTR-A(A6),A3POINTTOLENGTHFIELD"ADD.L#2,A3WHERETOMOVEDATATOBSREDITMOV2MOVEDATATOTBUF3MOVE.LTERMLGH-A(A6),D0NUMBEROFCHARACTERSMOVED MOVE.LD0,D2#BSRBINHASCCONVERTTOASCIIIND1MOVE.LTPTR-A(A6),A0$MOVE.BD1,1(A0)2NDDIGITOFLENGTHROR.L#8,D1POSITION1STDIGITMOVE.BD1,(A0)PLACE1STDIGIT$ADD.L#2,A0POSITIONTODESTINATIONADD.LTERMLGH-A(A6),A0!MOVE.LA0,TPTR-A(A6)UPDATETPTR"BRA.SUL10CONTINUEFILLINGFRAME &UL15CMP.B#$C2,D0WASITENDOFFILE?!BEQ.SUL20BRANCHONENDOFFILE"MOVE.LD0,-(A7)SAVEERRORSTATUSBSRHALT5HALTTHEI/O%MOVE.L(A7)+,D0RECOVERERRORSTATUSBSRIOSERRCOMPLAINONERROR"BRAXABORTABORTONBADDISKREAD  * BLANK FILL THE FRAME 1UL20MOVE.LTPTR-A(A6),A0WHERETOMOVEBLANKSTOLEATBUF-A(A6),A1$ADD.LCHRNUM-A(A6),A1LASTADDR+1'UL25MOVE.B#'',(A0)+STUFFBLANKS...CMP.LA0,A1...TOTHEEND...BNE.SUL25...OFTHEFRAME2MOVE.LA0,TPTR-A(A6)SETTPTRTOENDOFFRAME+1-MOVE.B#'Z',TBUF+2-A(A6)INDICATELASTFRAME  )* COMPUTE CHECKSUM FOR THIS FRAME OF DATA UL100EQU*-BTST#C,OPTFLG-A(A6)ISCHECKSUMOPTIONSET?BNE.SUL102BRANCHIFYES>MOVE.W#'00',TBUF-A(A6)NOSOINSERTZERO(WILDCARD)CHECKSUM BRA.SUL150 0UL102LEATBUF+2-A(A6),A1WHERETOSTARTSUMMING MOVE.LA1,A2ADD.LCHRNUM-A(A6),A2SUB.L#2,A2ENDINGADDRESS+1CLR.LD0ACCUMULATORCLR.LD1HOLDSBYTE 6UL110MOVE.B(A1)+,D1ACCUMULATECHECKSUMINTHISLOOP ADD.LD1,D0 CMP.LA1,A2 BNE.SUL110 DIVU#255,D0SWAPD0SUMMOD255IND0.W$ADD.W#1,D0INSURENONZEROCHECKSUM'BSRBINHASCCONVERTTOHEXASCIIIND1&MOVE.WD1,TBUF-A(A6)PLUGINCHECKSUM   '* LOOP FOR SENDING FRAME BLOCK BY BLOCK 5UL150LEATBUF-A(A6),A2BASEOFFRAMEANDFIRSTBLOCK MOVE.LA2,A1ADD.LCHRBLK-A(A6),A2+SUB.L#1,A2BRACKETFIRSTBLOCKWITHA1/A2 BRA.SUL182 UL180EQU*MOVEM.LBBOUNDS-A(A6),A1/A20BTST#R,OPTFLG-A(A6)AREWEADDINGC/R'S111484BEQ.SUL181NO111484;MOVE.BUSAVCHR-A(A6),1(A2)REPLACECRWITHSAVEDCHARACTER*IFDOPTIONSETTHENDISPLAYRECORDSJUSTSENTONTOTERMINAL "UL700MOVE.LREP2-A(A6),REP1-A(A6)BTST#D,OPTFLG-A(A6)#BEQUL800BRANCHIFOPTIONNOTSET 5MOVE.LUREC1-A(A6),D0SEEIFUSTAGEREADYTODISPLAYLEATBUF-A(A6),A0 SUB.LA0,D0CMP.LCHRNUM-A(A6),D0.BHIUL800BRANCHIFUSTAGESTILLACCUMULATINGBSRHALT5HALTI/OONTERMINAL8TST.LUSTAGEL-A(A6)DOWEHAVEASTAGEDDISPLAYRECORD?BEQ.SUL710BRANCHIFNO A* DISPLAY THE STAGING BUFFER (LEFT OVER FROM LAST FRAME OVERFLOW) LEAUSTAGE-A(A6),A1 MOVE.LA1,A2ADD.LUSTAGEL-A(A6),A2 SUB.L#1,A2 BSRMSGOUTCLR.LUSTAGEL-A(A6)  M* NOW SET UP TO DISPLAY THE REST OF THE RECORDS FROM TBUF THAT HAVE JUST BEEN* SENT IN THIS FRAME. UL710LEATBUF-A(A6),A35ADD.LCHRNUM-A(A6),A3A3=LASTADDRESS+1OFFRAMEBMOVE.LUREC1-A(A6),DLTEMP-A(A6)POINTERTONEXTRECORDTODISPLAY >UL720MOVE.LDLTEMP-A(A6),A1ADDRESSOFLENGTHFIELDOFRECORD8CMP.B#'',(A1)ISTHISTHELASTRECORDOFENTIREFILE?BEQ.SUL790BRANCHIFYES CLR.LD0LEATBUF-A(A6),A0ADD.LCHRNUM-A(A6),A0,CMP.LA0,A1AREWEATTHEENDOFTHEFRAME?BHS.SUL790BRANCHIFYES =* NOT THE LAST RECORD IN TBUF SO MOVE IT TO USTAGE TO DISPLAY -MOVE.L#2,D1NUMBEROFCHARACTERSTOCONVERT-BSRASCHBINCONVERTFROMASCIIHEXTOBINARY,MOVE.LA1,A2ADDRESSOFBEGINNINGOFRECORD)ADD.LD0,A2ADDRESS+1OFENDOFRECORD4MOVE.LD0,USTAGEL-A(A6)LENGTHOFCOMPRESSEDRECORD+LEAUSTAGE-A(A6),A4BASEOFDISPLAYBUFFER   * MOVE AND UNCOMPRESS RECORD*A1-'FROM'ADDRESS*A4-'TO'ADDRESS 3UL740MOVE.B(A1)+,D0CHARACTERUNDERCONSIDERATIONCMP.B#'|',D0/BNE.SUL760BRANCHIFNOTCOMPRESSIONSENTINEL%MOVE.B(A1)+,D0COMPRESSEDCHARACTER MOVE.B(A1)+,D1REPETITIONCODE SUB.B#'0',D1CONVERTTOBINARY CMP.B#9,D1%BLS.SUL750BRANCHIFINRANGE0-9%SUB.B#7,D1CONVERTINRANGE10-35 UL750TST.BD1 BEQ.SUL761*MOVE.BD0,(A4)+MOVECOMPRESSEDCHARACTER SUB.B#1,D1 BRA.SUL750 3UL760MOVE.BD0,(A4)+MOVENONCOMPRESSEDCHARACTER%UL761CMP.LA2,A1AREWEDONEMOVING?BLO.SUL740BRANCHIFNO 1CMP.LA3,A2SEEIFTHISRECORDFLOWSOFFTHEENDBHI.SUL780BRANCHIFYES6MOVE.LA1,DLTEMP-A(A6)ADDRESSOFNEXTRECORDINTBUF  $* NOW DISPLAY THE RECORD FROM USTAGE MOVE.LA4,A2$SUB.L#1,A2LASTADDRESSTODISPLAYLEAUSTAGE-A(A6),A1BSRMSGOUTDISPLAYTHERECORD)CLR.LUSTAGEL-A(A6)CLEARSTAGINGLENGTHBRAUL720CONTINUEDISPLAYING >UL780LEAUSTAGE-A(A6),A1CALCULATEUNCOMPRESSEDRECORDLENGTH SUB.LA1,A4MOVE.LA4,USTAGEL-A(A6) /UL790BSRINPP5CTAKEINPUTFROMTERMINALAGAIN   #* ENTIRE FRAME HAS BEEN TRANSMITTED8* IF LAST FRAME, ISSUE TERMINATION OR COMPLETION MESSAGE  6UL800CMP.B#'Z',TBUF+2-A(A6)WASTHISTHELASTFRAME?%BNE.SUL840BRANCHIFNOTLASTFRAME0BTST#TFLG,TRANFLG-A(A6)HAS'T'BEENKEYEDIN?BEQ.SUL830BRANCHIFNO )MOVE.LIOS4+8-A(A6),D0NUMBERTOCONVERT-MOVE.L#6,D1NUMBEROFCHARACTERSTOCONVERTLEAUTERMN-A(A6),A0)BSRBINDASCCONVERTTOASCIIFORDISPLAYBSRLF6LEAUTERMS-A(A6),A1LEAUTERME-A(A6),A2(BSRMOUTTELLTHEMUPLOADISTERMINATED BRAQUITUPDN .UL830MOVE.LIOS4+8-A(A6),D0NUMBERTOCONVERT-MOVE.L#6,D1NUMBEROFCHARACTERSTOCONVERTLEAUDONEN-A(A6),A0)BSRBINDASCCONVERTTOASCIIFORDISPLAYBSRLF6LEAUDONES-A(A6),A1LEAUDONEE-A(A6),A2'BSRMOUTTELLTHEMUPLOADISCOMPLETED BRAQUITUPDN 5UL840BTST#TFLG,TRANFLG-A(A6)HAS'T'BEENKEYEDIN?BEQ.SUL850BRANCHIFNO4LEATBUF-A(A6),A0SETUPTBUFPOINTERTOBLANKFILL)ADD.L#3,A0BYPASSCHECKSUMANDSEQUENCEMOVE.LA0,TPTR-A(A6)/BRAUL20GOCONSTRUCTENDINGFRAMEANDSENDIT  >* JUSTIFY ANY FRAME OVERFLOW AND CONTINUE SENDING DATA TO HOST 3UL850MOVE.LTPTR-A(A6),A2LASTADDRESS+1TOMOVELEATBUF-A(A6),A0,ADD.LCHRNUM-A(A6),A0FIRSTADDRESSTOMOVE$LEATBUF+3-A(A6),A1WERETOMOVETOUL855CMP.LA2,A0"BHS.SUL900BRANCHIFDONEMOVINGMOVE.B(A0)+,(A1)+ BRA.SUL855:UL900MOVE.LA1,TPTR-A(A6)UPDATETEMPORARYBUFFERPOINTER ,MOVE.LA1,UREC1-A(A6)FIRSTRECORDOFFRAME5MOVE.B#'A',TBUF+2-A(A6)INDICATEINTERMEDIATEFRAMEBRAUL10GOCONTINUEFILLINGPAGE )*****************************************(*EVENTWASI/OCOMPLETIONONTERMINAL*)***************************************** UTIOEQU*/MOVE.LSAVSTACK-A(A6),A7RESTORESTACKPOINTERBSRASQREADREADTHEEVENTLEAIOS5H-A(A6),A0%BSRHLTCHKWASTHISFROMAHALTI/O?BEQ.SULWAITBRANCHIFYES MOVE.BBUFF5S-A(A6),D0(CMP.B#'D',D0WASKEYINA'D'(DISPLAY) BNE.SUTIO10BCHG#D,OPTFLG-A(A6)2BEQ.SUTIO08BRANCHIFDISPLAYWASPREVIOUSLYOFF*CLR.LUSTAGEL-A(A6)CLEARHANGINGDISPLAYBSRLF61LEARDOFS-A(A6),A1PUTOUT'DISPLAYOFFMESSAGE'LEARDOFE-A(A6),A2 BSRMSGOUTBSRLF6 BRA.SUTIO99 UTIO08BSRLF60LEARDONS-A(A6),A1PUTOUT'DISPLAYONMESSAGE'LEARDONE-A(A6),A2 BSRMSGOUTBSRLF6 BRA.SUTIO99 (UTIO10CMP.B#'T',D0WASA'T'KEYEDIN?BNE.SUTIO99BRANCHIFNO5BSET#TFLG,TRANFLG-A(A6)YESSOSETTERMINATIONFLAG UTIO99BSRINPP5C   7* RESET STACK POINTER AND POINTER AND GO WAIT FOR EVENT ULWAITEQU*,MOVE.LA7,SAVSTACK-A(A6)SAVESTACKPOINTER!MOVE.L#WTEVNT,D0WAITFOREVENTTRAP#1  2**************************************************$*QUITUPDNHALTSANYACTIVEI/OON*%*TERMINALORHOSTPORT,DELAYSFOR*.*2SECONDS.READSALLTHEEVENTSINTHEASQ**ANDPERFORMSRTS.*2************************************************** QUITUPDNBRATRANNXT  <************************************************************,*ASGFLDASSIGNSTHEFILEKEYEDININTBUF*8*TOLOGICALUNIT#4FORUPLOAD.EQUALCONDITIONCODES*0*RETURNEDFORGOODASSIGN,NECONDITIONCODES*%*RETURNEDIFOPERATORKEYSIN'Q'.*<************************************************************  0RENTRSDC.B'REENTERFILENAMEOR''Q''TOQUIT'RENTREEQU*-1DS0  3OVRMSGSDC.B'FILEEXISTS-OKTOOVERWRITE(Y/N)?'OVRMSGEEQU*-1DS0  ASGFLDEQU*!BSREDFILSETUPPARAMETERBLOCK&BNE.SASGFLD40BRANCHIF'Q'KEYEDINLEAFHS4-A(A6),A0#MOVE.L#$00400000,(A0)ASSIGNCODETRAP#38BEQ.SASGOVRWBRANCHIFGOODASSIGN(OVERWRITEREQUEST)  >* ASSIGN FAILED - SEE IF NONEXISTENT FILE AND IF NOT, COMPLAIN CMP.B#$17,D0#BEQ.SASALLOBRANCHIFNONEXISTENT!BSRFHSERRCOMPLAINOFFHSERROR ;ASGFLD20LEARENTRS-A(A6),A1TELLTHEMTOREENTERFILENAMELEARENTRE-A(A6),A2 BSRMOUTBSRINPW5GETINPUTBRAASGFLDGOFORANOTHERTRY  8*THEFILEALREADYEXISTS.ASKIFTHEYWISHTOOVERWRITE ASGOVRWLEAOVRMSGS-A(A6),A1LEAOVRMSGE-A(A6),A2 BSRMOUTBSRINPW5WAITFORTHEINPUTCMP.B#'Y',BUFF5S-A(A6) BNEASGFLD20  ;*THEYWANTTOOVERWRITE.FREETHEFILEANDDELETEIT,THEN* REALLOCATE IT AND ASSIGN IT. LEAFHS4-A(A6),A0MOVE.L#$00040000,(A0)TRAP#3FREETHEFILEMOVE.L#$00020000,(A0)TRAP#3DELETETHEFILE ASALLOMOVE.L#$00C00304,(A0)%TRAP#3ALLOCATEANDASSIGNTHEFILEBEQ.SASGFLD40$BSRFHSERRPUTUPFHSERRORMESSAGE/BRAASGFLD20GOTELLTHEMTOREENTERFILENAME ASGFLD40RTSPAGE <************************************************************,*ASGFLUASSIGNSTHEFILEKEYEDININTBUF*8*TOLOGICALUNIT#4FORUPLOAD.EQUALCONDITIONCODES*0*RETURNEDFORGOODASSIGN,NECONDITIONCODES*&*RETURNEDIFOPERATORKEYSINQUIT.*<************************************************************  ASGFLUEQU*#BSR.SEDFILSETUPPARAMETERBLOCK&BNE.SASGFLU50BRANCHIF'Q'KEYEDIN LEAFHS4-A(A6),A0#MOVE.L#$00400000,(A0)ASSIGNCODETRAP#3%BEQ.SASGFLU50BRANCHONGOODASSIGN  2* ASSIGN FAILED - COMPLAIN AND LET THEM TRY AGAIN. !BSRFHSERRCOMPLAINOFFHSERROR3LEARENTRS-A(A6),A1TELLTHEMTOREENTERFILENAMELEARENTRE-A(A6),A2 BSRMOUTBSRINPW5GETINPUTBRAASGFLUGOFORANOTHERTRY 5*THEFILEISASSIGNED.RETURNEQUALCONDITIONCODES. ASGFLU50RTSPAGE  :**********************************************************5*EDFILFREESANYFILEATTACHEDTOLOGICALUNIT#3,*3*ANDATTEMPTSTOASSIGNTHEFILEKEYEDININTHE*.*BUFFERPOINTEDATBYIOS5PARAMETERBLOCK.*6*IFTHEASSIGNMENTWASGOOD,EQCONDITIONCODESARE*/*RETURNED.IF'Q'WASKEYED-IN,NECONTITION*6*CODESARERETURNED.EDFILWILLINTERACTIVELYQUERY*4*THEOPERATORIFAERRORWASMADEINENTERINGTHE**FILENAME.*:**********************************************************  DBADFILSDC.B'BADFILENAMEENTERED-REENTERNAMEOR''Q''TOQUIT'BADFILEEQU*-1DS0  4* FIRST FREE IF ANY FILE ATTACHED TO LOGICAL UNIT #3 EDFILLEAFHS4-A(A6),A0MOVE.L#$00040000,(A0)TRAP#3  8* SEE IF 'Q' WAS KEYED IN - IF SO BRANCH TO QUIT ROUTINE EDFIL4BSRQUITCHK%BEQ.SEDFIL8BRANCHIFQUITKEYEDIN  /* NOW SET UP PARAMETER BLOCK TO ASSIGN THE FILE LEAFHS4-A(A6),A0BSR.SDEFAULTS6MOVE.LIOS5+12-A(A6),A0ADDRESSOFKEYEDINFILENAME MOVE.LA0,A2ADD.LIOS5+20-A(A6),A24MOVE.B#',',1(A2)TERMINATEWITHCOMMAFOREDITFILELEAFHS4-A(A6),A6 BSREDITFILE LEAA(PC),A6 TST.LD0#BPL.SEDFIL6BRANCHIFEDITFILEOKLEABADFILS-A(A6),A1LEABADFILE-A(A6),A2 BSRMOUTBSRINPW5WAITFORTHEINPUT BRA.SEDFIL4 ,EDFIL6CMP.LD0,D0SETEQUALFORGOODASSIGNBRA.SEDFILRTS 3EDFIL8MOVE.L#1,D0SETNECONDITIONCODESFORQUIT EDFILRTSRTSPAGE 5*****************************************************5* RESPOND1 RESPONDS TO HOST WITH OUTPUT WITH INPUT. *+*RESPONSEVALUEPASSEDINLOWORDERBYTE***OFDO.INPUTISDONEINTOBUFF1S.THIS**ROUTINECALLSOIP1.*5*****************************************************  /RESPOND1MOVE.BD0,RESPONSE-A(A6)SAVERESPONSE3LEARESPONSE-A(A6),A1SETUPBUFFERBOUNDARIES...MOVE.LA1,A2...FOROIP1 ADD.L#2,A2 BSROIP1RTS  7*******************************************************5*RESPOND2RESPONDSTOHOSTWITHOUTPUTANDPROCEED*7* WITH RESPONSE VALUE PASSED IN LOW ORDER BYTE OF D0. *7*******************************************************  RESPOND2EQU*)MOVE.BD0,RESPONSE-A(A6)SETUPRESPONSE*LEARESPONSE-A(A6),A1ADDRESSOFRESPONSE&MOVE.LA1,A2SETUPBUFFERBOUNDARIES ADD.L#2,A2LEAIOS1-A(A6),A0MOVEM.LA1/A2,12(A0)6MOVE.L#$0002020A,(A0)IMAGEWRITE,SVCADDR,PROCEED"MOVE.B#$FF,4(A0)MARKACTIVEI/OTRAP#2 BSRXFRABORTRTSPAGE 2****************************************************DEFAULTSSETSUPDEFAULTVALUESINFHS*.*PARAMETERBLOCK.A0CONTAINSFHSPARAMETER**BLOCKADDRESS.*2**************************************************  :DEFAULTSMOVE.WUSERNUM+2-A(A6),$A(A0)DEFAULTUSERNUMBER'MOVE.LVOLNAM-A(A6),$6(A0)VOLUMENAME(MOVE.LCATNAM-A(A6),$C(A0)CATALOGNAME7MOVE.LCATNAM+4-A(A6),$10(A0)2NDPARTOFCATALOGNAMERTS   5*******************************************************NAKRPTCOUNTSDOWNTHEREP1COUNTERTO*-*SEEIFTHEREPETITIONCOUNTISEXHAUSTED.*0*IFREP1ISZERO,COUNTISEXHAUSTEDANDREP1*0*ISRESETWITHREP2VALUEANDEQUALCONDITION**CODESARERETURNED.*-*OTHERWISEREP1ISDECREMENTEDANDUNEQUAL*!*CONDITIONCODESARERETURNED.*5*****************************************************   NAKRPTTST.LREP1-A(A6),BGT.SNAKRPT2BRANCHIFCOUNTNOTEXHAUSTED5MOVE.LREP2-A(A6),REP1-A(A6)EXHAUSTED-RESETCOUNT CMP.LD0,D0BRA.SNAKRRTSNAKRPT2SUB.L#1,REP1-A(A6)'TST.L(A7)SETNONZEROCONDITIONCODES NAKRRTSRTSPAGE 3***************************************************0*PREACHKCHECKSTHETERMINALBUFFERTOSEEIF*+*ITCONTAINS'PREAMBLE'.EQUALCONDITION*0*CODESARERETURNEDIFSO,UNEQUALOTHERWISE.*3***************************************************   2PREACHKLEAPREAM-A(A6),A1STRINGTOCHECKAGAINST"LEATBUF-A(A6),A2BUFFERTOCHECK BSR.SSCHKRTS   8********************************************************/*QUITCHKCHECKSTHEIOS5BUFFERTOSEEIFIT*4*CONTAINS'Q'.EQUALCONDITIONCODESARERETURNED**IFSO,UNEQUALOTHERWISE.*8********************************************************  QUITCHKMOVE.LIOS5+12-A(A6),A2CMP.B#'Q',(A2)RTS  >**************************************************************<*SCHKCHECKSTHETERMINALBUFFERPOINTEDATBYA2FORTHE***CHARACTERSTRINGSPECIFIEDBYA1.UPON*.*ENTRY,A1POINTSTOALONGWORDSPECIFYING*-*THENUMBEROFCHARACTERSINTHESTRINGTO*-*MATCH,FOLLOWEDIMMEDIATELYBYTHESTRING* *ITSELF.*>**************************************************************  SCHKEQU*MOVE.L(A1)+,D0 SUB.L#1,D0TCHK2CMP.B(A1)+,(A2)+DBNED0,TCHK2RTSPAGE 1*************************************************(*MOUTHALTSANYI/OONLU5ANDCALLS*,*MSGOUTTOOUTPUTDATATOLU6.IFAREAL*-*I/OFUNCTIONWASACTUALLYHALTEDONLU5,*+*MOUTWILLREISSUETHEI/OREQUESTAFTER**CALLINGMOUT.*1*************************************************  #MOUTBSRHALT5HALTI/OONTERMINAL(BEQ.SMOUT4BRANCHIFI/OREALLYHALTED BSRMSGOUTBRA.SMOUTRTS MOUT4BSRMSGOUTMOVE.LA0,-(A7)LEAIOS5-A(A6),A0"MOVE.B#$FF,4(A0)MARKACTIVEI/O!TRAP#2REISSUETHEPREVIOUSI/OMOVE.L(A7)+,A0 MOUTRTSRTS  0************************************************+*FHSERRPUTSUPAMESSAGECOMPLAININGOF*-*FHSERRORNUMBERANDLOGICALUNITNUMBER.*)*ENTEREDWITHERRORCODEIND0ANDFHS*"*PARAMETERBLOCKADDRESSINA0.**A0,A1,A2,D0DESTROYED*0************************************************ FHSERRBSRBINHASCMOVE.WD1,FHSERRS-A(A6)MOVE.B5(A0),FHSERLUN-A(A6)ADD.B#$30,FHSERLUN-A(A6)LEAFHSERRS-A(A6),A1LEAFHSERRE-A(A6),A2 BSRMOUTRTSPAGE 0************************************************+*IOSERRPUTSUPAMESSAGECOMPLAININGOF*-*IOSERRORNUMBERANDLOGICALUNITNUMBER.*)*ENTEREDWITHERRORCODEIND0ANDIOS*!*PARAMETERBLOCKADDRESSINA0**A0,A1,A2,D0DESTROYED.*0************************************************  IOSERRBSRBINHASCMOVE.WD1,IOSERRS-A(A6)MOVE.B5(A0),IOSERLUN-A(A6)ADD.B#$30,IOSERLUN-A(A6)LEAIOSERRS-A(A6),A1LEAIOSERRE-A(A6),A2 BSRMOUTRTS  2**************************************************0*IOPPERFORMSI/OREQUESTFORI/OANDPROCEED***A0CONTAINSADDRESSOFPARAMETERBLOCK*$*A1CONTAINSBUFFERSTARTADDRESS*"*A2CONTAINSBUFFERENDADDRESS*+*STATUSBYTEOFP.B.ISFLAGGEDWITH$FF***TOSHOWACTIVEI/O.REQUESTISIGNORED**IFI/OISALREADYACTIVE.*2**************************************************  IOPEQU*(CMP.B#$FF,4(A0)ISI/OALREADYACTIVE?BEQ.SIOPRTSBRANCHIFYES.MOVEM.LA1/A2,12(A0)PLUGINBUFFERADDRESSES"MOVE.B#$FF,4(A0)MARKACTIVEI/OTRAP#2,BSRXFRABORTABORTONPARAMETERBLOCKERROR IOPRTSRTSPAGE 1*************************************************(*INPP5CPERFORMSINPUTANDPROCEEDON*,*LOGICALUNIT5(TERMINAL).ONECHARACTER**ISINPUTATBUFF5S.* *INPUTISIMAGEMODE,NOECHO*1************************************************* INPP5CLEABUFF5S-A(A6),A1 MOVE.LA1,A2LEAIOS5-A(A6),A03MOVE.L#$0001022A,(A0)READ,IMAGE,SVCADDR,PROCEEDBSRIOPRTS   5*****************************************************'*INPP5PERFORMSINPUTANDPROCEEDON*0*LOGICALUNIT5(TERMINAL).BUFFERBOUNDARIES**AREBUFF5SANDBUFF5E* *INPUTISFORMATTEDWITHECHO*5*****************************************************  INPP5LEABUFF5S-A(A6),A1LEABUFF5E-A(A6),A2LEAIOS5-A(A6),A0-MOVE.L#$00010202,(A0)READ,SVCADDR,PROCEEDBSRIOPRTS  ,********************************************,* INPW5 PERFORMS INPUT AND WAIT ON LOGICAL *(*UNIT5(TERMINAL).BUFFERBOUNDARIES**AREBUFF5SANDBUFF5E.* ,******************************************** INPW5LEABUFF5S-A(A6),A1LEABUFF5E-A(A6),A2LEAIOS5-A(A6),A0MOVEM.LA1/A2,12(A0)MOVE.L#$00010000,(A0)"MOVE.B#$FF,4(A0)MARKACTIVEI/OTRAP#2 BSRXFRABORTRTS )*****************************************'*INPP1PERFORMSINPUTANDPROCEEDON*&*LOGICALUNIT1(HOSTPORT).BUFFER*$*BOUNDARIESAREBUFF1SANDBUFF1E*)***************************************** INPP1LEABUFF1S-A(A6),A1LEABUFF1E-A(A6),A2LEAIOS1-A(A6),A0MOVE.L#$0004062A,(A0)OUT/IN,IMAGE,SVCADDR,NOECHO,PROCEED'OIP1AMOVE.B#$FF,4(A0)MARKACTIVEI/OTRAP#2"CMP.B#BUSY,D0SEEIFDEVICEBUSY BNE.SOIP1X#BSR.STINYWAI TWAITALITTLEWHILE BRA.SOIP1A OIP1XRTS  2**************************************************'*OIP1CPERFORMSOUTPUTWITHINPUTON*-*LOGICALUNIT1(HOSTPORT).OUTUPTISONE*)*CHARACTERFROMBUFFERDEFINEDINIOS5**PARAMETERBLOCK.*'*INPUTISONECHARACTERINTOBUFF1S.*,*I/OISATTEMPTEDUNTILNOBUSYSTATUSIS* *RETURNED.*2************************************************** OIP1CLEAIOS1-A(A6),A0MOVE.LIOS5+12-A(A6),A1 MOVE.LA1,A2ADD.LIOS5+20-A(A6),A2 SUB.L#1,A22MOVEM.LA1/A2,12(A0)SETOUTPUTBUFFERBOUNDARIESLEABUFF1S-A(A6),A1#MOVE.LA1,8(A0)INPUTBUFFERSTART!MOVE.L#1,20(A0)LENGTHOFINPUT>MOVE.L#$0004062A,(A0)OUT/IN,IMAGE,SVCADDR,NOECHO,PROCEED (OIP1CAMOVE.B#$FF,4(A0)MARKACTIVEI/OTRAP#2"CMP.B#BUSY,D0SEEIFDEVICEBUSY BNE.SOIP1CX#BSR.STINYWAITWAITALITTLEWHILE BRA.SOIP1CA OIP1CXRTSPAGE  +*********************************************TINYWAITDOESARELINQUISHANDRETURNS*+******************************************* TINYWAITMOVE.L#RELINQ,D0TRAP#1RTS  :**************************************************<<011785+*HALT1HALTSTHEI/OINPROGRESSONLU1***.*ROUTINEWAITSFORHALTSTATUSTOAPPEARIN*.*IOS1HPARAMETERBLOCKBEFORERETURNING.IF*+*AHALTISACTUALLYEFFECTED(0STATUS),***THEHALTSYNCCOUNTERWORDIMMEDIATELY*)*FOLLOWINGTHEHALTPARAMETERBLOCKIS*,*INCREMENTED.IFNOI/OHADTOBESTOPPED*&*(STATUSNE0&NE$FF,RETURNNOW.*2************************************************** HALT1:LEAIOS1H-A(A6),A0&MOVE.B#$FF,IOSSTA(A0)PRELOADSTATUSTRAP#2HALTTHEI/O7WHILE.BIOSSTA(A0)#$FFDO.SWAITTILLGETANSWER BSRTINYWAITENDW 7IF.BIOSSTA(A0)#0THEN.SWASTHEREI/OTOHALT?4ADD.W#1,IOS1H+28-A(A6)YES,BUMPHALTSYNCCOUNTER&CMP.LD0,D0SETEQUALCONDITIONCODESENDI HALT1RTSRTS   2**************************************************+*HALT5HALTSTHEI/OINPROGRESSONLU5***.*ROUTINEWAITSFORHALTSTATUSTOAPPEARIN*.*IOS5HPARAMETERBLOCKBEFORERETURNING.IF*+*AHALTISACTUALLYEFFECTED(0STATUS),***THEHALTSYNCCOUNTERWORDIMMEDIATELY*)*FOLLOWINGTHEHALTPARAMETERBLOCKIS*,*INCREMENTED.IFNOI/OHADTOBESTOPPED*&*(STATUSNE0&NE$FF,RETURNNOW.*2************************************************** HALT5:LEAIOS5H-A(A6),A0&MOVE.B#$FF,IOSSTA(A0)PRELOADSTATUSTRAP#2HALTTHEI/O7WHILE.BIOSSTA(A0)#$FFDO.SWAITTILLGETANSWER BSRTINYWAITENDW 7IF.BIOSSTA(A0)#0THEN.SWASTHEREI/OTOHALT?4ADD.W#1,IOS5H+28-A(A6)YES,BUMPHALTSYNCCOUNTER&CMP.LD0,D0SETEQUALCONDITIONCODESENDIHALT5RTSRTS011785>>   4****************************************************(*HLTCHKCHECKSFORAHALTEDI/O.ZERO*'*CONDITIONCODESARERETURNEDIFTHE*&*I/OHASHALTED,NONZEROOTHERWISE.*)*THEADDRESSOFTHEHALTI/OPARAMETER*&*BLOCKISPASSEDINA0.THEROUTINE*-*CHECKSTHESYSCCOUNTER(WORDIMMEDIATELY***FOLLOWINGTHEHALTPARAMETERBLOCKFOR*,*ZERO.IFZERO,NOHALTHASBEENEFFECTED*,*IFNONZERO,AHALTHASBEENEFFECTEDAND*0*THEROUTINEWILLDECREMENTTHESYNCCOUNTER.*4****************************************************  +HLTCHKTST.W28(A0)HASHALTBEENEFFECTED?BEQ.SHLTCHKBBRANCHIFNO$SUB.W#1,28(A0)CHECKOFFTHISHALT/CMP.LD0,D0SETEQUALCONDITIONCODESFORHALTBRA.SHLTCRTSGORETURN:HLTCHKBTST.L(A7)SETNONZEROCONDITIONCODESFORNOHALT HLTCRTSRTSPAGE 2****************************************************IOERCHKCHECKSPARAMETERBLOCKPOINTED*.*ATBYA0FORERROR.IFERRORTHENCOMPLAIN**WITHMESSAGE.*2**************************************************  IOERCHKMOVE.B4(A0),D0"BEQ.SIOERRTSBRANCHFORNOERROR$MOVEM.LD0/A0,-(A7)SAVEERRORCODE!BSRIOSERRCOMPLAINOFI/OERROR'MOVEM.L(A7)+,D0/A0RESTOREERROR CODE IOERRTSRTS   :**********************************************************,*WAITDC1WILLPUTUPATWOCHARACTERREAD*&*TOTHEHOSTPORT.WHENTHEREADIS*-*SATISFIEDTHEROUTINEPERFORMSANRTS.IF*/*THEREADISNOTSATISFIED,THEROUTINEWILL*2*RTSAFTERTWOSECONDS.THEPURPOSEISTODELAY*6*UNTILRECEIPTOFADC1INDICATINGLINETURNAROUND.*7*THETWOCHARACTERSREADSHOULDBEALINEFEED($0A)*"*FOLLOWEDBYACARRIAGERETURN.*:**********************************************************  WAITDC1EQU*MOVE.L#10,D1LOOPCOUNT+LEAWAITDRTN-A(A6),A0EVENTRETURNADDRESSMOVE.LIOS1+24-A(A6),-(A7)5MOVE.LA0,IOS1+24-A(A6)SETNEWEVENTRETURNADDRESSLEABUFF1S-A(A6),A1 MOVE.LA1,A2*ADD.L#1,A2SETUPFORTWOCHARACTERREADLEAIOS1-A(A6),A0;MOVE.L#$0001022A,(A0)READ,SVCADDR,NOECHO,IMAGE,PROCEEDBSRIOPMOVE.L(A7)+,IOS1+24-A(A6) 0WAITD05CMP.B#$FF,IOS1+4-A(A6)ISTHEI/ODONE?BNE.SWAITDRTSBRANCHIFYES(SUB.L#1,D1NO-DECREMENTWAITCOUNTER1BMI.SWAITD08BRANCHIFWE'VEWAITEDLONGENOUGH&MOVE.L#DELAY,D0WAITFOR2/10SECONDMOVE.L#200,A0TRAP#1-BRA.SWAITD05GOBACKANDCHECKFORI/ODONE WAITD08BSRHALT1HALTTHEI/O'BNE.SWAITDRTSBRANCHIFNOI/OHALTED,SUB.W#1,IOS1H+28-A(A6)ADJUSTSYNCCOUNTER WAITDRTSRTS !WAITDRTNBSRASQREADDUMMYRETURN+MOVE.L#WTEVNT,D0JUSTREADEVENTANDWAITTRAP#1 PAGE >**************************************************************/*EDITMOV1MOVESDATATHATHASJUSTBEENREAD*2*FROMTHEHOSTINTOAWORKINGBUFFERPOINTEDAT*+*BYA3.PARITYBIT(BIT7)ISMASKEDOFF**THENUMBEROFCHARACTERS*'*ACTUALLYMOVEDISSAVEDINTERMLGH.*6*ONLYDATAINTHERANGE$20-$7EINCLUSIVEISMOVED.*2*IFACARRIAGERETURNISENCOUNTEREDBEFOREANY*9*OTHERDATA,ABLANKISMOVEDINPLACEOFTHECARRIAGE*6*RETURN.IFALINEFEEDISENCOUNTEREDINTHEDATA,*5*ALLMOVEMENTUPTOANDINCLUDINGTHELINEFEEDIS*7*SCRUBBEDANDONLYTHEPORTIONOFTHELINEFOLLOWING*4*ISMOVED.THEBUFFERBOUNDARIESFOREDITMOV1ARE***IMPLIEDFROMTHEIOS1PARAMETERBLOCK.*>**************************************************************  EDITMOV1EQU*MOVEM.LA1-A4/D0,-(A7)0MOVE.LIOS1+12-A(A6),A1STARTADDRESSFROMHOST MOVE.LA1,A2ADD.LIOS1+20-A(A6),A2SUB.L#1,A2ENDADDRESSINA2 MOVE.LA3,A4 EDMV2CMP.LA2,A1"BHI.SEDMV4BRANCHIFDONEMOVING%MOVE.B(A1)+,D0CHARACTERTOEXAMINE"AND.B#$7F,D0MASKOFFPARITYBIT CMP.LA3,A4.BNE.SEDMV3BRANCHIFATLEASTONECHARMOVED)CMP.B#$0D,D0ISTHISACARRIAGERETURN?BNE.SEDMV3BRANCHIFNO4MOVE.B#$20,D0SUBSTITUTEBLANKFORCARRIAGERETURN$BRA.SEDMV5FORCEMOVEMENTOFBLANK &EDMV3CMP.B#$0A,D0ISITALINEFEED?+BNE.SEDMV8BRANCHIFNO-NORMALMOVEMENT'MOVE.LA4,A3RESETDESTINATIONPOINTER(BRAEDMV2CONTINUEWITHNORMALMOVEMENT EDMV8CMP.B#$20,D0 BLO.SEDMV2BRANCHONNON-ASCIICMP.B#$7F,D0BHS.SEDMV2BRANCHNONASCII -EDMV5MOVE.BD0,(A3)+MOVEINASCIICHARACTER BRA.SEDMV2 EDMV4SUB.LA4,A38MOVE.LA3,TERMLGH-A(A6)SAVENUMBEROFCHARACTERSMOVEDMOVEM.L(A7)+,A1-A4/D0RTSPAGE 8********************************************************/*EDITMOV2MOVESDATATHATHASJUSTBEENREAD*2*VIAIOS4PARAMETERBLOCKTOALOCATIONPOINTED*1*TOBYA3.NUMBEROFCHARACTERSACTUALLYMOVED*4*ISRETURNEDINTERMLGH.THEDATAISEDITEDASIT*1*ISMOVEDINTHEFOLLOWINGWAY:ALLCHARACTERS*1*THATDONOTFALLINTHECODERANGEOF$20-$7E*2*INCLUSIVE(NONPRINTABLEASCIICHARACTERS)ARE*.*CONVERTEDTOBLANK(CODE$20).INADDITION*5*IFCOMOPTCONTAINSA'B'(OBTAINEDFROMPREAMBLE)*6*ANYLOWERCASELETTERSARECONVERTEDTOUPPERCASE.*5*CHARACTERCOMPRESSIONPACKETISMOVEDINPLACEOF*2*ANYREPETITIONOF4ORMORELIKECHARACTERSIS*%*REPLACEDBYACOMPRESSIONPACKET.*8****************************************** **************  EDITMOV2MOVEM.LA1-A4,-(A7)*MOVE.LIOS4+12-A(A6),A1MOVEFROMADDRESS MOVE.LA1,A2ADD.LIOS4+20-A(A6),A2SUB.L#1,A2ENDADDRESSINA2 MOVE.LA3,A4 EDMV222CMP.LA2,A1$BHI.SEDMV299BRANCHIFDONEMOVINGBSR.SGETCGETNEXTCHARACTER+MOVE.BD0,D2SAVECHARACTERFORCOMPARISON*MOVE.L#1,D3COUNTOFMATCHINGCHARACTERS -EDMV250CMP.LA2,A1HAVEWEFETCHEDTHELAST?BHI.SEDMV262BRANCHIFYES CMP.L#35,D34BEQ.SEDMV262BRANCHONMAXSIZECOMPRESSIONPACKET BSR.SGETC CMP.BD0,D2+BNE.SEDMV260BRANCHONNOCHARACTERMATCH.ADD.L#1,D3BUMPCOUNTOFMATCHINGCHARACTERSBRA.SEDMV250 7EDMV260SUB.L#1,A1POINTA1TONEXTCHARACTERTOFETCH4EDMV262CMP.L#3,D3DOWENEEDACOMPRESSIONPACKET?BHI.SEDMV268BRANCHIFYESCMP.B#'|',D25BEQ.SEDMV268'|'ALWAYSREQUIRESCOMPRESSIONPACKET ?EDMV264MOVE.BD2,(A3)+NOCOMPRESSIONSOPLUGINRAWCHARACTER SUB.L#1,D3BNE.SEDMV264KEEPPLUGGINGBRA.SEDMV222 6EDMV268MOVE.B#'|',(A3)+PLUGINCOMPRESSIONSENTINEL-MOVE.BD2,(A3)+PLUGINCOMPRESSEDCHARACTER.ADD.B#'0',D3CONVERTD3TOASCIILENGTHCODECMP.B#'9',D3'BLS.SEDMV272BRANCHIFINRANGE0-9-ADD.B#7,D3CONVERTINRANGE10-35(A-Z) +EDMV272MOVE.BD3,(A3)+PLUGINLENGTHCODEBRA.SEDMV222 EDMV299SUB.LA4,A38MOVE.LA3,TERMLGH-A(A6)SAVENUMBEROFCHARACTERSMOVEDMOVEM.L(A7)+,A1-A4RTS *GETCMOVE.B(A1)+,D0CHARACTERINQUESTIONCMP.B#'',D0+BLO.SGETC23BRANCHIFNOTPRINTABLEASCIICMP.B#$7F,D0'BLO.SGETC24BRANCHIFPRINTABLEASCII 3GETC23MOVE.B#'',D0CHANGENONPRINTABLETOBLANK#BRA.SGETCRTSGOPLUGINCHARACTER *ASCDBINCONVERTSASCIIDECIMALTOBINARY.INPUTPOINTEDAT*1*BYA1,NUMBEROFCHARSIND1.RESULTRETURNED*3*IND0.LEADINGBLANKSTREATEDASL EADINGZEROS.*1*SCANTERMINATESATENDOFFIELDORUPONFIRST*0*NONNUMERICCHARACTERENCOUNTEREDAFTERFIRST**NUMERICCHARACTER.*@****************************************************************  ASCDBINEQU*CLR.LD0RETURNVALUEASCDB2BSR.SASCDB200BRA.SASCDB12BRANCHONNON-NUMERIC&NON-BLANKBRA.SASCDB2BRANCHONBLANK ASCDB4MOVE.LD0,-(A7) LSL.L#3,D0ADD.L(A7),D0ADD.L(A7)+,D0*10ADD.LD2,D0ADDINNEWDIGITBSR.SASCDB200BRA.SASCDB12BRANCHONNON-NUMERIC&NON-BLANKBRA.SASCDB12BRANCHONBLANKBRA.SASCDB4BRANCHONNUMERICASCDB12RTSMAINRETURN ASCDB20SUB.L#1,D1,BPL.SASCDB22BRANCHIFNOTDONEWITHFIELD6LEA4(A7),A7BYPASSRETURNADDRESSONDONEWITHFIELD(BRA.SASCDB12DONEWITHFIELDSORETURN ASCDB22CLR.LD2#CMP.B#'',(A1)CLASSIFYCHARACTERBEQ.SASCDB24BRANCHONBLANKCMP.B#'0',(A1)$BLO.SASCDB30BRANCHONNON-NUMERICCMP.B#'9',(A1)$BHI.SASCDB30BRANCHONNON-NUMERICADD.L#2,(A7) ASCDB24ADD.L#2,(A7)"ASCDB30MOVE.B(A1)+,D2ADVANCEA1SUB.B#'0',D2BINARYTOD2RTSPAGE  ;***********************************************************:*ASCHBINCONVERTSASCIIHEXTOBINARY.INPUTPOINTEDAT*1*BYA1,NUMBEROFCHARSIND1.RESULTRETURNED*3*IND0.LEADINGBLANKSTREATEDASLEADINGZEROS.*1*SCANTERMINATESATENDOFFIELDORUPONFIRST*5*NONHEXNUMERICCHARACTERENCOUNTEREDAFTERFIRST**HEXNUMERICCHARACTER*;*********************************************************** ASCHBINEQU*CLR.LD0RETURNVALUEASCHB2BSR.SASCHB200BRA.SASCHB12BRANCHONNON-NUMERIC&NON-BLANKBRA.SASCHB2BRANCHONBLANK ASCHB4LSL.L#4,D0*16ADD.BD2,D0ADDINNEWDIGITBSR.SASCHB200BRA.SASCHB12BRANCHONNON-NUMERIC&NON-BLANKBRA.SASCHB12BRANCHONBLANKBRA.SASCHB4BRANCHONNUMERICASCHB12RTSMAINRETURN  ASCHB20SUB.L#1,D1,BPL.SASCHB22BRANCHIFNOTDONEWITHFIELD6LEA4(A7),A7BYPASSRETURNADDRESSONDONEWITHFIELD(BRA.SASCHB12DONEWITHFIELDSORETURN ASCHB22CLR.LD2#CMP.B#'',(A1)CLASSIFYCHARACTERBEQ.SASCHB24BRANCHONBLANKCMP.B#'0',(A1)$BLO.SASCHB30BRANCHONNON-NUMERICCMP.B#'9',(A1) BLS.SASCHB23BRANCHIFNUMERICCMP.B#'A',(A1) BLO.SASCHB30BRANCHIFNOTHEXCMP.B#'F',(A1) BHI.SASCHB30BRANCHIFNOTHEXSUB.B#7,D2CORRECTIONFORA-F ASCHB23ADD.L#2,(A7)ASCHB24ADD.L#2,(A7)!ASCHB30ADD.B(A1)+,D2ADVANCEA1SUB.B#'0',D2BINARYTOD2RTSPAGE 9*********************************************************-*32BITBINARYTODECIMALASCIISUBROUTINE***.*CONVERTSBINARYIND0ANDPUTSASCIIDIGIT***CHARACTERSATADDRESSSPECIFIEDINA0.***LEADINGZEROSARECONVERTEDTOSPACES.*-*THEFIELDLENGTH(NO.CHARS)ISSPECIFIED*"*IND1INTHECALLINGSEQUENCE.****CALLINGSEQUENCE:*#*MOVE.L,D0**MOVE.L,D1*3*MOVE.L,A0**BSRBINDASC*** *RETURNS:**D0=0=>GOODCONVERSION****REGSUSED:01234567* *D*PP* *APP*9*********************************************************  !BINDASCMOVEM.LD1/D2/A0/A1,-(A7)MOVE.L#8,D2MAXNO.DIGITSSUB.LD1,D2NO.DIGITSTOSKIP!BMI.SBINDASC5BRANCHERROREXITLSL.L#2,D2DOUBLEWORDLENGTH!LEATENS-A(A6),A1STARTOFTABLE"ADD.LD2,A1ADJUSTFORDIFFERENCE&MOVE.W#'',D2INITIALIZEACCUMULATOR %BINDASC1SUB.L(A1),D0SUBTRACT10**NBCS.SBINDASC2BRANCHTOOBIG*ADD.W#1,D2INCREMENTCURRENTDIGITCOUNTBRABINDASC1CONTINUE )BINDASC2ADD.L(A1)+,D0RESTORE,ADVPNTRTST.L(A1)TESTDONEBEQ.SBINDASC4BRANCHDONE CMP.W#'',D2LEADINGZEROTEST!BEQ.SBINDASC3BRANCHSTILLZERO#ADD.B#$10,D2BRINGTOASCIIDIGIT %BINDASC3MOVE.BD2,(A0)+DEPOSITCHARLSL#8,D2SAVECHARDEPOSITED#MOVE.B#$20,D2RESTORELSTOSPACEBRABINDASC1CONTINUE 4BINDASC4ADD.B#$10,D2LASTONEBECOMESDIGITALWAYS "MOVE.BD2,(A0)+DEPOSITLASTCHAR'TST.LD0SETCONDITIONCODE,0IFGOOD"BINDASC5MOVEM.L(A7)+,D1/D2/A0/A1RTS  7TENSDC.L10000000,1000000,100000,10000,1000,100,10,1,0 PAGE .**********************************************&*XFRABORTTESTSCONDITIONCODES.IF*$*EQUAL,RTSISMADE.IFNOTEQUAL*$*BSRADDRESSFROMSTACKISPLACED*(*INTOA0ANDSELFABORTISPERFORMED.*.* XABORT ENTRY POINT UNCONDITIONALLY ABORTS. *.**********************************************  XFRABORTBEQ.SABORTS)XABORTMOVE.LD0,-(A7)SAVED0FORALOOKMOVE.L#ABORT,D0TRAP#1 ABORTSRTS PATCHDS.B50PATCHAREAENDXFR=/* =/*ULOAD.LF=/*&=/* Link chain file to create ULOAD.LO=/*:=/* If no output argument is specified for the listing the'=/* chain file will default to ULOAD.LL=/*=/IFC \1=ARGULOAD.LL=/ENDIF=/*=LINK ,ULOAD.LO,\1;HAMIX ATTRIBUTES PINPUT ULOAD.ROLIB 0.&.PASVMDOS.ROLIB 0.&.PASCALIB.ROEND=/*=END =/* =/*ULOAD.PF=/*M=/* Chain file to compile ULOAD which is associated with the TRANSFER utility=/*:=/* If no output argument is specified for the listing the'=/* chain file will default to ULOAD.PL=/*@=/* NOTE: this chain file requires the pascal compiler reside on9=/*thesystemdefault.Thecompilerisnotprovidedwith7=/*thisproduct,thereforethischainfilewillabort.=/*=/IFC \1=ARGULOAD.PL=/ENDIF=/*=PASCAL ULOAD.SA,ULOAD.PC,\1=/*{ Included files are:=/*--none--=/*}=PASCAL2 ULOAD.PC,ULOAD.RO;-L=/*=END$PROGRAM UPLOAD(INPUT,OUTPUT,OUTFIL); E(*******************************************************************)C(*THISPROGRAMREADSPACKEDBLOCKSFROMTHETERMINAL,SEPARATES*)?(*INDIVUDUALRECORDSANDWRITESTHEMTOANOUTPUTFILE.THE*))(*PROGRAMRUNSONANEXORMACSSYSTEM.*)E(*******************************************************************) "CONSTCMAX=132;(*BLOCKSIZE*)&RMAX=132;(*MAXIMUMRECORDSIZE*)5BLKCNT=1;(*NUMBEROFBLOCKSUNDERONECHECKSUM*),BMAX=132;(*BUFFERSIZE=BLKCNT*CMAX*)/OPTION='AA';(*COM/CHARPROTOCOLOPTIONS*),CHRMAX=127;(*MAXIMUMCHARACTERVALUE*) TYPECINDEX=0..255;$RECTYPE=ARRAY(.1..RMAX.)OFCHAR;*BFTYPE=PACKEDARRAY(.1..BMAX.)OFCHAR;BFINDEX=INTEGER;*BKTYPE=PACKEDARRAY(.1..CMAX.)OFCHAR; VARQ:BOOLEAN; OUTFIL:TEXT;(*OUTPUTFILE*)DASCII:PACKEDARRAY(.CHAR.)OFCINDEX;(*ASCIICHARACTERCODES*)@ASHEX:PACKEDARRAY(.1..36.)OFCHAR;(*FORHEXCONVERSION*)#(,+074.8 ENUM:PACKEDARRAY(.CHAR.)OFCINDEX;(*ACCII-DECIMALCONVERSION*))REC:RECTYPE;(*HOLDSOUTPUTRECORD*)1BUFFP:BFINDEX;(*INDEXINTOHOLDINGBUFFER*)$BUFF:BFTYPE;(*HOLDINGBUFFER*)3COUNT:INTEGER;(*HOLDSCHARCOUNTFORRECORD*)/RESPONSE:CHAR;(*HOLDSRESPONSECHARACTER*)4BCNT:INTEGER;(*NUMBEROFREPEATEDCHARACTERS*)&BCHR:CHAR;(*REPEATEDCHARACTER*) PROCEDUREINITIALIZE;0TYPECHRARRAY=PACKEDARRAY(.1..16.)OFCHAR;VARI:INTEGER; C:CHAR; 2PROCEDUREASGCODE(CODE:INTEGER;CHRSET:CHRARRAY);VARI:INTEGER;BEGIN(*ASGCODE*)FORI:=1TO16DO%ASCII(.CHRSET(.I.).):=CODE+I-1END;(*ASGCODE*) BEGIN(*INITIALIZE*)FORI:=0TOCHRMAXDOBEGIN9ASCII(.CHR(I).):=0;(*INDICATENON-ASCIICHARCTERS*)NUM(.CHR(I).):=0END;REWRITE(OUTFIL);1ASHEX:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';!ASGCODE(112,'pqrstuvwxyz{|}~');!ASGCODE(32,'!"#$%&''()*+,-./'); ASGCODE(48,'0123456789:;<=>?'); ASGCODE(64,'@ABCDEFGHIJKLMNO'); ASGCODE(80,'PQRSTUVWXYZ[\]^_'); ASGCODE(96,'`abcdefghijklmno');FORI:=1TO36DONUM(.ASHEX(.I.).):=I-1;BUFFP:=BLKCNT*CMAX+1;BUFF(.3.):='A';/WRITE(OUTPUT,'PREAMBLEU');(*SENDPREAMBLE*)(WRITE(OUTPUT,OPTION);(*SENDOPTION*),WRITE(OUTPUT,CMAX:3);(*SENDBLOCKSIZE*)1WRITELN(OUTPUT,BLKCNT:1);(*SENDBLOCKCOUNT*)RESPONSE:='';END;(*INITIALIZE*)  .PROCEDURE GETREC(VAR Q:BOOLEAN; VAR P:BFINDEX;6VARBUFF:BFTYPE;VARREC:RECTYPE;VARRESPONSE:CHAR); VARI,J:INTEGER;C1,C2:CHAR; GPROCEDUREGETFRAME(VARBUFF:BFTYPE;VARQ:BOOLEAN;VARRESPONSE:CHAR);  VARI:INTEGER; J:INTEGER; K:INTEGER;CKSUM1:INTEGER;CKSUM2:INTEGER;TBLOCK:BKTYPE; BEGIN(*GETFRAME*) IFBUFF(.3.)='Z'THEN Q:=TRUE; IFNOTQTHENREPEATI:=1;J:=1;IFRESPONSE<>'';THENWRITELN(OUTPUT,RESPONSE);(*RESPONDTOLASTFRAME*)WHILEJ<=BLKCNTDOBEGINREADLN(INPUT,TBLOCK); J:=J+1;FORK:=1TOCMAXDOBEGINBUFF(.I.):=TBLOCK(.K.); I:=I+1;END;IFBUFF(.1.)='T'THEN*J:=BLKCNT+1;(*FORCEDTERMINATION*)END;Q:=BUFF(.1.)='T'; IFNOTQTHENBEGINRESPONSE:='N';2CKSUM1:=16*NUM(.BUFF(.1.).)+NUM(.BUFF(.2.).);IFCKSUM1<>0THENBEGIN CKSUM2:=0;FORI:=3TOBLKCNT*CMAXDO%CKSUM2:=CKSUM2+ASCII(.BUFF(.I.).); CKSUM2:=(CKSUM2MOD255)+1;IFCKSUM1<>CKSUM2THENRESPONSE:='R'(*NAK*)END;(*THEN*) END(*THEN*)UNTIL(RESPONSE='N')OR(Q)END;(*GETFRAME*)  ;PROCEDUREGETC(VARC:CHAR;VARBUFF:BFTYPE;VARP:BFINDEX;VARQ:BOOLEAN); BEGIN(*GETC*)IFP<=BLKCNT*CMAXTHENBEGINC:=BUFF(.P.); P:=P+1ENDELSEBEGINGETFRAME(BUFF,Q,RESPONSE);C:=BUFF(.4.);P:=5ENDEND;(*GETC*)  BEGIN(*GETREC*)2GETC(C1,BUFF,P,Q);(*DIGIT#1OFLENGTHFIELD*)2GETC(C2,BUFF,P,Q);(*DIGIT#2OFLENGTHFIELD*)IFC1=''THENQ:=TRUE; IFNOTQTHENBEGIN#COUNT:=NUM(.C1.)*16+NUM(.C2.);J:=1;I:=1;WHILEI<=COUNTDOBEGINGETC(REC(.J.),BUFF,P,Q);IFREC(.J.)='|'THENBEGIN4GETC(BCHR,BUFF,P,Q);(*GETCOMPRESSEDCHARACTER*)(GETC(C1,BUFF,P,Q);(*GETCOUNTCODE*)8BCNT:=NUM(.C1.);(*COUNTOFCOMPRESSEDCHARACTERS*)WHILEBCNT>0DOBEGIN5REC(.J.):=BCHR;(*EXPANDCOMPRESSEDCHARACTERS*)BCNT:=BCNT-1; J:=J+1END;%I:=I+3(*ADVANCEGETCOUNTER*) END(*THEN*)ELSEBEGIN&I:=I+1;(*ADVANCEGETCOUNTER*)&J:=J+1;(*ADVANCEPUTPOINTER*) END(*ELSE*)END;(*WHILE*)COUNT:=J-1;END(*THEN*)END;(*GETREC*)  5PROCEDURE PUTREC(VAR COUNT:INTEGER; VAR REC:RECTYPE); VARI:INTEGER; BEGIN(*PUTREC*)I:=1;WHILEI<=COUNTDOBEGIN WRITE(OUTFIL,REC(.I.)); I:=I+1END;WRITELN(OUTFIL);END;(*PUTREC*) BEGIN(*MAIN*) INITIALIZE; Q := FALSE;"GETREC(Q,BUFFP,BUFF,REC,RESPONSE);WHILE NOT Q DOBEGINPUTREC(COUNT,REC);#GETREC(Q,BUFFP,BUFF,REC,RESPONSE);END;,WRITELN(OUTPUT,'T')(*TERMINATEWITH'T'*)END.(*MAIN*)integerfunctionATOI(ALPHA) characterALPHA characterCHARS*35 integerI .CHARS='123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' ATOI=0do3I=1,35"if(ALPHA.eq.CHARS(I:I))then ATOI=Ireturnendif 3continue ATOI=-1return end integerfunctionX2TOI(X2) characterX2*2 characterHEX*16 integerIintegerRESULT logicalFND1 logicalFND2 X2TOI=0HEX='0123456789ABCDEF' RESULT=0FND1=.false.FND2=.false.do5I=1,16$if(X2(1:1).eq.HEX(I:I))then!RESULT=RESULT+((I-1)*16)FND1=.true.endif$if(X2(2:2).eq.HEX(I:I))thenRESULT=RESULT+(I-1)FND2=.true.endif 5continueif(FND1.and.FND2)thenX2TOI=RESULTelse X2TOI=-1endifreturn end !subroutineINIT(BUFF,P,RESP) characterBUFF*(*) integerPcharacterRESP include'common' characterPRAMBL*8characterDEST<CA<E=I>M!characterOPTION*2 dataPRAMBL/'PREAMBLE'/dataDEST/'U'/dataOPTION/'AA'/ P=133BUFF(3:3)='A'write(6,200)PRAMBLwrite(6,200)DESTwrite(6,200)OPTIONwrite(6,200)'132'write(6,100)'1' RESP=''return 100format(A)200format(A$)end #subroutineGETFRM(BUFF,Q,RESP) characterBUFF*(*) logicalQcharacterRESP include'common' integerI integerJintegerCKSUM1integerCKSUM2integerX2TOI  if(BUFF(3:3).eq.'Z')then Q=.true.endifif(.not.Q)then'Cdountil(RESP.eq.'N').or.(Q) 10continueif(RESP.ne.'')thenwrite(6,100)RESPendifdo20J=1,BLKCNTread(5,400)BUFF400format(A132)!if(BUFF(1:1).eq.'T')then Q=.true.returnendif 20continue RESP='N'CKSUM1=X2TOI(BUFF(1:2))if(CKSUM1.lt.0)then RESP='R'endifif(CKSUM1.ne.0)then CKSUM2=0do40I=3,132!CKSUM2=CKSUM2+ichar(BUFF(I:I)) 40continueCKSUM2=mod(CKSUM2,255)+1if(CKSUM1.ne.CKSUM2)then RESP='R'endifendif.if((RESP.ne.'N').and.(.not.Q))then goto10endifendifreturn 100format(A)end 'subroutineGETC(C,BUFF,P,Q,RESP) characterCcharacterBUFF*(*) integerP logicalQcharacterRESP include'common' if(P.le.132)thenC=BUFF(P:P) P=P+1elsecallGETFRM(BUFF,Q,RESP)C=BUFF(4:4)P=5endifreturn 100format(A)end 3subroutineGETREC(Q,P,BUFF,REC,RESP,CHRCNT) logicalQ integerPcharacterBUFF*(*)characterREC*(*)characterRESPintegerCHRCNT integer I integerJ integerKintegerX2TOI integerATOI integerBCNTcharacterLEN*2characterBCHRcharacterLCHR *callGETC(LEN(1:1),BUFF,P,Q,RESP)*callGETC(LEN(2:2),BUFF,P,Q,RESP) if(LEN(1:1).eq.'')then Q=.true.endifif(.not.Q)thenCHRCNT=X2TOI(LEN(1:2))if(CHRCNT.lt.0)then1write(0,100)'uload:FATALTransmissionerror'stopendifJ=1I=1Cdowhile(I.le.CHRCNT)50if(I.le.CHRCNT)then*callGETC(REC(J:J),BUFF,P,Q,RESP) if(REC(J:J).eq.'|')then$callGETC(BCHR,BUFF,P,Q,RESP)$callGETC(LCHR,BUFF,P,Q,RESP)BCNT=ATOI(LCHR)if(BCNT.gt.0)thendo60K=J,J+BCNT-1REC(K:K)=BCHR 60continue J=J+BCNTelse J=J+1REC(J:J)=BCHR J=J+1REC(J:J)=LCHR J=J+1endif I=I+3else I=I+1 J=J+1endif goto50endifCHRCNT=J-1endifreturn 100format(A)end  subroutinePUTREC(COUNT,REC) integerCOUNTcharacterREC*(*) integerI do70I=1,COUNTwrite(7,200)REC(I:I) 70continuewrite(7,100)return 100format(A)200format(A$)end PROGRAMUPLOAD characterBUFF*132characterREC*132characterRESP logicalQintegerBUFFPintegerRECLENcharacterID*50 include'common' ,dataID/'@(#)uload.f:1.38/4/83(13:31:48)'/dataCMAX/132/dataRMAX/132/dataBLKCNT/1/dataBMAX/132/dataEOTRAN/'T'/dataCHRMAX/127/ rewind7 callINIT(BUFF,BUFFP,RESP) Q=.false.1callGETREC(Q,BUFFP,BUFF,REC,RESP,RECLEN)Cdowhile(.not.Q)80if(.not.Q)thencallPUTREC(RECLEN,REC)1callGETREC(Q,BUFFP,BUFF,REC,RESP,RECLEN) goto80endifwrite(6,100)EOTRAN 100format(A)endO*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**MESSAGENUMBERALLOCATION*00000000-000002FFUTILITIES(*00000300-000004FFSESSIONMANAGEMENT*00000500-000006FFSYMBUG*00000700-000008FFBASICM$*00001000-00002FFFPASCALRUNTIME*00003000-000035FFFORTRAN$*00008000-0000FFFFUSERGENERATED/*00010000-FFFFFFFFVERSADOSOPERATINGSYSTEM*O*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O*------------------------------------------------------------------------------*ERRORMESSAGELINEFORMATO*------------------------------------------------------------------------------*COLUMNSCONTENT+*1*TREATSREMAINDEROFLINEASACOMMENT(*1-8KEYVALUEOFERRORMESSAGEINHEX*9SPACEDELIMITER5*10-89ERRORMESSAGETEXTANDSUBSTITUTIONSENTINELSO*------------------------------------------------------------------------------*ERRORCODEKEYVALUEFORMAT:*BITSINTERPRETATION(ofregisterD0followingtrapcall)*0-15ERRORSTATUSCODE*16-26DIRECTIVENUMBER3*27-30TRAPNUMBER(0fornon-traprelatederrors)1*31RESERVED(Forinternalerrorclassification)**BITPOSITIONS*A*33222222222211111111110000000000A*10987654321098765432109876543210*A*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*O*------------------------------------------------------------------------------0*SUBSTITUTIONSENTINELFORMATIS\Soo[ll][kkkk]'*Where\IstherequiredSentinelFlag0*SIsoneoftheSentinelCodesexplainedbelow6*ooIsthedecimaloffsetfromregA0tobeconverted2*andinsertedatthispointintheerrormessage.,*A0norma llypointsatanFHSorIOSblock.3*llIsalengthvaluerequiredonlyforSentinelC2*kkkkIsakeyvaluerequiredonlyforSentinelKO*------------------------------------------------------------------------------Q.Z+b+j4r,z((*%!#$#(&/.?:1(( &#*"!*,*SUBSTITUTIONSENTINELCODEINTERPRETATIONS;*\BooConvert1byteatoffsetoofromA0toDecimalAscii*\Woo"2bytes"""*\Loo"4""""*\Xoo"1byte""HexAscii*\Yoo"2bytes"""*\Zoo"4""""-*\CoollCopyllbytes""Stringlength=ll5*\TooTranslatecode""Asciiprosefromthisfile.2*ErrorMessage#ttoocccccontainstheprosewhere+*tt=originaltrapcode+trap#4(bit29)*oo=offsetfromA0ofcode%*cccc=codevaluetobeinterpreted9*\AooConvertregisterA0toHexAscii(ooisalways00)D*\IooCopy??bytesatoffset0fromTextPlug#oountilanillegal&*Asciichar{FF}flagsendofstring.I*\KkkkkCopyallofErrorMessage#0000kkkkexpandinganyofitembedded:*sentinelsatthispointbeforecontinuingtheinterpret-9*ationofthismessage.CRLFissuedautomaticallybefore *theinsertionofmessagekkkk.*J*\DooWilleleminatethestandarderrormessagetextoftaskname,sessionA*number,userkeyvalue,errororiginator,andthevariablemessage6*separtor(**)fromtheerrormessagetobedisplayedO*------------------------------------------------------------------------------F*TYPICALPROSETOCAUSEANERRORMESSAGEFROMTHISFILETOBEPRINTED*...4*LEAIOSBLK,A0WhereIOSBLKisusuallyaFHSorIOS#*TRAP#nWherenisusually2or31*BEQCONTWHERECONTISLABELFORGOODTRAPCALL,*MOVEM.LD0/A0,ERRPBLKSaveregsinERRPBLK5*LEAERRPBLK,A0WhereERRPBLKisintheformatbelow,*MOVE.L#2,D0Errorhandlerisdirective#2#*TRAP#4InvokestheErrorhandler*...6*ERRPBLKDC.L0USERREGD0CONTAINSERRMSGKEYVALUE6*ERRPBA0DC.L0USERREGA0POINTSATI/OCONTROLBLK)*ERRPOPTDC.B0ERROROPTIONSFUTUREUSE+*ERRPLDFDC.B0USERLDFLUNLUNFORSCREEN*ERRPQUYDC.B0FUTUREUSE-*ERRPCDFDC.B0USERCDFLUNLUNFORKEYBOARD2*ERRPLUGBDC.L0BEGINNINGOFUSERTEXTPLUGPOOL,*ERRPLUGEDC.L0ENDOFUSERTEXTPLUGPOOLL*ThisplugpoolmaycontainmultiplestringsoftextdelimitedbyHexFF's.J*Maximumpoollengthis96bytes.Sentinels\I01,\I02....etc.causetheJ*deblockedtexttobeinsertedintothebasicerrormessageformat.PlugsL*arenumberedbeginningwithoneso\I03willaccessthetextfollowingtheJ*secondFFdelimiter.ThisplugcapabilityprovidesthecallerwithawayH*toincludevariablemessagecontentfromasourceexternaltotheparm!*blockaddressedbyregisterA0.O*------------------------------------------------------------------------------F*TheutilityEMFGENconvertstheleadingAsciihexnumbertoa4byteD*binarykeyvalueintheprocessofcreatingtheindexedsequential=*fileERRORMSY.SYusedbytheTrap#4ERRORMESSAGEHANDLER.)*NOTE:ERRORMESSAGE00000000ISANULL7*ANDCANBEUSEDINCONJUNCTIONWITHERRPLUGSTOPRINT,*ONLYTHEMESSAGECONTAINEDINTHEPLUGPOOL:*THISMERELYRELIEVESTHECALLERFROMDEFININGIOSBLOCKSO*------------------------------------------------------------------------------*2*ERRORMSGFILEGENERATIONUTILITYEMFGENMESSAGES*7*THESEMESSAGESMUSTBETHEFIRSTMESSAGESINTHEFILE*D000002FE KEY VALUE \I01 WILL NOT BE ADDED TO FILE ** INPUT ERROR\D00I000002FF KEY VALUE \I01 ERROR MESSAGE ADDED BUT TRUNCATED TO 84 BYTES\D00*O*------------------------------------------------------------------------------*O*------------------------------------------------------------------------------3*KEYVALUESMUSTBEH EX--UPPERLIMITIS000000FF*00000000 \I01\D00***"0000000C CMD=\T00 OPT=\T02 LU=\B0500000000D CMD=\T00 OPT=\T02 LU=\B05 DEVICE=\C060490000000E CMD=\T00 OPT=\T02 LU=\B05 PSN=\Z08 DEVICE=\C0604.0000000F FILE=\C0604:\W10.\C1208.\C2008.\C2802+00000010 CMD=\T00 OPT=\T02 LU=\B05 PSN=\Z36100000011 USE DEFAULT VOLUME = \C0804:\W14.\C1608.00000012 USER NUMBER = \W3400000013 USER TASK = \C240400000014 SESSION = \C040400000015 TERMINAL = \C2804(00000016TASK=\C0004,SESSION=\C0404&00000017TASK=\C0004,SESSION=\L04%00000018 --------------------> BREAK!!00000019 OPTION(S) SET = \I01\D00O*------------------------------------------------------------------------------**NON-TRAPRELATEDMESSAGES***REFERENCEIOE.SAFORAPPROPRIATEEQUATES*00000100 INVALID ENTRY,00000101 SUBSTITUTION CAUSED BUFFER OVERFLOW00000102 ARGUMENT NOT FOUND00000103 INVALID OPTION00000104 INSUFFICIENT MEMORY00000105 OPTION CONFLICT"00000106 COMMAND LINE SYNTAX ERROR(00000107 INVALID DEVICE NAME FOR REQUESTO*------------------------------------------------------------------------------*"*USERSESSIONMANAGEMENTMESSAGES*200000300 \D00\I01 START SESSION \C0404 USER = \W42000000301 \D00\I01 END SESSION \C0404 USER = \W4200000302 \D00\K0018H00000303 SYSTEM VOLUME = \C0004:\K0011\K0012\K0013\K0014\K0015\K0019\D00!00000304 OPTION(S) SET = \I01\D00 00000305 \D0000000306 \D00\I01"00000307 \D00\C0004 \C1204: LOADED 00000308 \D00\C0004 \L12: LOADED#00000309 \D00\C0004 \C0404: STOPPED!0000030A \D00\C0004 \L04: STOPPED%0000030B \D00\C0004 \C0404: CONTINUED#0000030C \D00\C0004 \L04: CONTINUED&0000030D \D00\C0004 \C0404: TERMINATED$0000030E \D00\C0004 \L04: TERMINATED#0000030F \D00\C0004 \C0404: ABORTED!00000310 \D00\C0004 \L04: ABORTED'00000311 \D00LOGON REJECTED, LOGGED OFF000000312 \D00WARNING: NO."<" NOT EQUAL TO NO.">"J00000313 \D00------>CAUTION: YOU WILL CHANGE PASSWORD FOR USER = 0 <------00000314 \D00ER: NOT USER = 0+00000315 \D00ER: "\C0008" COMMAND NOT FOUND*00000316 \D00ER: "\C0604" VOLUME NOT FOUND200000317 \D00ER: NO. ARGUMENTS EXCEEDS STACK SPACE00000318 \D00ER: TASK NOT FOUND"00000319 \D00ER: INVALID TASK NAME(0000031A \D00ER: LUN \C0001 NOT ASSIGNED50000031B \D00ER: CANNOT BE CONTINUED, MUST BE STARTED:0000031C \D00ER: MUST BE STARTED INDIVIDUALLY BY TASK NAME80000031D \D00ER: NESTING LEVEL EXCEEDS NO. LUNS PER TASKC0000031E \D00ER: NO ROOM IN RETURN STACK SPACE (TOO MANY ARGUMENTS)#0000031F \D00ER: DEVICE NOT ALLOWED$00000320 \D00ER: "IF" LEVEL EXCEEDED(00000321 \D00ER: =/ENDIF's EXCEED =/IF's%00000322 \D00ER: CHAIN COMMAND SYNTAX$00000323 \D00RX=\Y00 RA=\Y02 RD=\Y04000000324 \D00ER: BATCH NOT ALLOWED IN BATCH MODE;00000325 \D00ER: LOGON TERMINAL NOT AVAILABLE IN BATCH MODE%00000326 \D00ER: BATCH SESSION NUMBER$00000327 \D00BATCH SESSION NOT FOUND&00000328 \D00ER: USER NUMBER NOT FOUND*00000329 \D00ER: NOT ALLOWED IN BATCH MODE0000032A \D00\C0404: QUEUED0000032B \D00\C0404: RUNNING,0000032C \D00\C0404: DONE STATUS = \Y02:\T02!0000032D \D00ER: BATCH QUEUE FULL'0000032E \D00BATCH JOB \C0404 CANCELLED!0000032F \D00ER: RECORD NOT FOUND#00000330 \D00ER: USER NO. NOT FOUND!00000331 \D00ER: INVALID USER NO.&00000332 \D00ER: MUST BE IN CHAIN MODE#00000333 \D00ER: VALUE SIZE TOO BIG(00000334 \D00ER: INVALID FILE DESCRIPTOR<00000335 \D00ER: NO CHANGE TO VOLUME,USER NUMBER, OR CATALOG+00000336 \D00ER: DEFAULT VOLUME NOT CHANGED,00000337 \D00ER: OPTION LETTERS ARE A-O ONLY:00000338 \D00ER: NOT ALLOWED ON LINE, SUBMIT IN BATCH MODE"00000339 \D00ER: INVALID LU NUMBER$0000033A \D00ER: FILE/DEVICE MISSING"0000033B \D00ER: ACCESS PERMISSION 0000033C \D00ER: VALUES REVERSED?0000033D \D00ER: YOU FAILED IN YOUR ATTEMPT TO CRASH THE SYSTEM0000033E \D00ER: COMMAND SYNTAX$0000033F \D00ER: FIELD SIZE EXCEEDED&00000340 \D00ER: FILE WAS NOT ASSIGNED+00000341 \D00ER: NUMERICAL CONVERSION ERROR O*------------------------------------------------------------------------------&*STARTOFBASICMERRORMESSAGES(MIL)O*------------------------------------------------------------------------------* Basic-m syntax error messagesO*------------------------------------------------------------------------------>00000701 Invalid logical expression in an IF or WHEN statement300000702 Missing THEN in an IF,ON or WHEN statement900000703 THEN must be followed by an executable statement.00000704 Incomplete bit selector (missing "]")C00000705 Illegal procedure name or bit selector not followed by "="00000706 Equal sign expected!00000707 Illegal branch statement800000708 GOTO or GOSUB not followed by valid line number700000709 CALL is not followed by a valid procedure name@0000070A Missing ")" in an argument list, selector or array size&0000070B Illegal arithmetic expression00000070C Missing ")" in an arithmetic expression#0000070D Illegal literal expression=0000070E Missing or invalid argument list in a POKE statement*0000070F Invalid unsigned integer constant00000710 Invalid exponent700000711 Filename must be a string variable or constant100000712 Invalid variable name in a DIM statement=00000713 Illegal or unspecified array size in a DIM statement>00000714 Illegal ADDRESS clause in a DIM or EXTERNAL statement=00000715 Illegal variable name in a BYTE or INTEGER statement?00000716 Missing address specification in an EXTERNAL statement-00000717 Illegal operands in a READ statement-00000718 Illegal operands in a DATA statement:00000719 Missing "#" in an OPEN, CLOSE or REWIND statement+0000071A Missing comma in an OPEN statement:0000071B Undefined data transfer mode in an OPEN statement0000071C Illegal file access30000071D "=" required in a LINE or DIGITS statement60000071E Illegal index name in a FOR or NEXT statement50000071F Index not followed by "=" in a FOR statement&00000720 Missing TO in a FOR statement&00000721 Invalid NEVER or ON statement;00000722 Invalid line number list in an ON...GOTO statement.00000723 IMAGE not followed by a format string+00000724 Illegal variable or procedure name300000725 Missing parethesis in a logical expression/00000726 Invalid line number in an EOF function$00000727 Invalid relational operator;00000728 Invalid or missing separator in an INPUT statement00000729 Invalid key70000072A No argumant list following the TAB keyword, or@0000072B Invalid operand in a MAT READ, INPUT or PRINT statement<0000072C Missing comma in a MAT INPUT or MAT PRINT statement50000072D Missing "=" in a matrix assignment statement>0000072E Expression not enclosed in [ ] in a MAT SET statement;0000072F Missing argumant in a MAT INV or MAT TRN statement"00000730 Illegal character scanned00000731 Illegal statement00000732 Statement too long:00000733 Missing argument list following a string function00000734 Invalid line number>00000735 Missing comma in argumant list of a built-in function=00000736 Missing "(" for argument list in a built-in function00000737 Missing separator100000738 Invalid key or logical unit number (LUN).00000739 String not allowed when LUN indicated%0000073A Invalid number of dimensionsK0000073B USING not followed by line number,format string or string variable-0000073C Unrecognized characters in statementB0000073D Data Block size expected after comma in an OPEN statement<0000073E Nesting of parenthesis forbidden in a format string/0000073F Access permission expected after comma00000740 Unbalanced parenthesis00000741 "]" expected00000742 Unexpected end of line!00000743 String constant expected=00000744 FAB (File Access Block) size is expected after comma(00000745 Illegal variable or string name=00000746 Illegal character scanned in beginning of expression(00000747 Operator expected in expression'00000748 Operand expected in expression00000749 Meaningless combinatonI0000074A Illegal number of dimensions in assigned variable or "=" missing"0000074B Num eric constant expected!0000074C String variable expected:0000074D Invalid variable name or invalid numeric constant#0000074E Missing TO or SUB after GO?0000074F TAB is not allowed in PRINT statement if USING appearsJ00000750 Illegal variable or procedure name,or string variable not allowed00000751 Unbalanced bracketsG00000752 Logical or relational operator not allowed in arithmetic expr.<00000753 More than one relational operator in a logical term800000754 GOTO or GO TO are not allowed in WHEN statement<00000755 ON ERROR must not appear in an IF or WHEN statement00000756 Too many dimensions000000757 Expected variable name or constant name=00000758 String variable not allowed in arithmetic expression-00000759 Missing arguments in INPUT statement>0000075A Expected option T or D after comma in CLOSE statement,0000075B Illegal entity in string expression0000075C Missing '('0000075D Missing ')'J0000075E String matrix and arithmetic matrix not allowed in same statement<0000075F(RECORDFREE)ImpossibletoupdateacontigousfileE00000760illegaloperationinstringMAT(onlyconcatenationallowed)E00000761 ZER/CON/IDN/SET/TRN/INV can operate on numeric matrices only000000762 NEXT not allowed as secondary statement100000763 value in brackets of SET must be numericA00000764 Illegal or missing line number in beginning of statement00000765 Invalid key after AT.00000766 Invalid format string in function STR700000767 Expected I,O,U after '%' in mode of OPEN file.D00000768 Expected mode of file (%I,%U,%O,%OV,%UV) in OPEN statement.900000769 GOTO not allowed in WHEN and ON INTR statements.,0000076A TRACE must be followed by ON or OFF50000076B missing '/' before the write protection.\D00F0000076C invalid or missing integer constant for write protection.\D00!0000076D matrix name missing.\D00-0000076E missing '=' after key-word RECL.\D00-0000076F missing '=' after key-word KEYL.\D00O*------------------------------------------------------------------------------ * Basic-m general error messagesO*------------------------------------------------------------------------------&00000770 Error \Z00 in trap 4 call\D0000000771 Rms error \Z00 \D00 00000772 Command line error \D0000000773 Bad options \D00"00000774 No such option \C0001\D0000000775 Bad z option\D0000000776 No '=' after z\D0000000777 '=' not allowed\D0000000778 No input file\D00&00000779 \Z00 edit file name error\D00 0000077A \Z00 access problem\D00.0000077B Overflow! request bigger z option\D00/0000077C Waiting for \L00 k-bytes of memory\D00*0000077D Overflow! resequence not done\D00"0000077E bad function no. \L00\D000000077F file already exits\D00"00000780 symbol table overflow\D00/00000781 warning! updated file is not saved\D00700000782 Can not run, compilation errors in program\D00J00000783 Can not assign logical unit 5 to user program, run terminated\D00J00000784 Can not assign logical unit 6 to user program, run terminated\D00F00000785 Can not load run-time lo, error code \A00, run terminated\D00'00000786 Illegal interupt vector number400000787 GOTO is not allowed in interrupt processing100000788 LOGEN - unable to open \P temporary file500000789 LOGEN - unable to assign run-time library LO50000078A LOGEN - error in run-time library Lo reading>0000078B LOGEN - unable to read the \P temporary file, rc = \N10000078C LOGEN - run-time routine \P not in index?0000078D LOGEN - user routine \P was not added to library indexF0000078E LOGEN - unable to write a record to a temporary file, rc = \N40000078F LOGEN - run-time library index format error500000790 WHEN is used without D option - WHEN ignored700000791 TRACE is used without D option - TRACE ignoredN00000792 LOGEN - unable to write last record on the \P temporary file, rc = \N@00000793LOGEN-unabletorewindthe\Ptemporaryfile,rc=\NO00000794 LOGEN - attempt to write \N bytes to LO. Too big (more then one block),00000795 RUN - unable to start user task\D00 $00000796 illegal logical unit number00000797 illegal FAB size00000798 illegal block size00000799 illegal record length50000079A conflict between formal and actual parameter,0000079B a subscript can't be of string typeB0000079C a logical primary must be either a relation or 'EOF(lun)'$0000079D missing '[' in bit-selectorJ0000079E bit selector is allowed only for simple-variable or array-elementI0000079F left side of assignment must be simple variable or array elementA000007A0INTERNAL:"bin_code"-Illegaloperationcodepassed:\NA000007A1INTERNAL:"bin_tert"-Illegaloperationcodepassed:\NL000007A2INTERNAL:"nextwork"-Toomanywork-registersneededby"bin_code"B000007A3INTERNAL:"bin_special"-Illegalcommand-codepassed:\NG000007A4INTERNAL:"bnflsmpl"-Illegalvar-kindinsimple-varnode:\NG000007A5INTERNAL:"bnflarray"-Illegalvar-kindinarray-varnode:\NM000007A6INTERNAL:"bnflopnd/bnflrutn"-Illegaloperandnode-typepassed:\NH000007A7Codesizeisgreaterthan32KBwhichconflictswith'-B'optionL000007A8INTERNAL:"bincre"-Illegaloperandaddress-mode(MDxxx)found:\NN000007A9INTERNAL:"binpseud"-Illegaloperandaddress-mode(MDxxx)found:\NE000007AAINTERNAL:"binwrt"-Illegalreacod-code(WR_xxx)passed:\N;000007ABINTERNAL:"binclose"-Writeonro-filefailed:\PG000007ACSTRING-CONSTANTSandFORMATSsectionsizeisgreaterthat32KB5000007ADINTERNAL:"binopen"-Can'topenro-file:\PC000007AEINTERNAL:"bntmopen"-Can'tre-opentemporaryro-file:\PD000007AFINTERNAL:"bntmread"-Readoftemporaryro-filefailed:\P;000007B0INTERNAL:"bnwrbyte"-Writeonro-filefailed:\P@000007B1INTERNAL:"bncaddoff"-Illegaladdressmodepassed:\N000007B2badassignmentE000007B3INTERNAL:"bin_cmnd"-Widthofmachine-commandisundefinedG000007B4digitscannotbeseparatedby''inIMAGEstatement(use'!')&000007B5quotationmark('"')expected(000007B6\D00CLOSEofinputfilefailed)000007B7\D00Accessofinputfilefailed5000007B8\D00Failedtocheckexistenceofinputfile-000007B9\D00WARNING-inputfilenotfound!.000007BA\D00ALLOCATIONofE-codefilefailed"000007BB\D00InputfileNOTFOUND6000007BC\D00Linenumbernotinorderafterline\L00?000007BD same matrix in both sides of '=' in MAT MULTIPLICATION2000007BE 3-dimensional array in MAT MULTIPLICATION:000007BF INTERNAL: "Code_Gen" - Unrecognizable i-operation"000007C0\D00Illegalcommandline(000007C1\D00Illegalinputfile-name(s)&000007C2\D00AllocationofASQfailed#000007C3\D00Initializationfailed@000007C4\D00OpenofE-codefile,afterinitialization,failed.N000007C5\D00WARNING:secondfile-namewithR-optionisillegal.Nameignored0000007C6\D00WARNING:Listingfilenameignored1000007C7Illegalparametersforbuilt-infunction000007C8Illegalexpression000007C9000007CA=000007CB\D00UnabletocloseE-CODEfilebeforeLISTorSAVE<000007CC\D00UnabletoopenE-CODEfilebeforeLISTorSAVEB000007CD\D00UnabletoassignE-CODEfilebackafterLISTorSAVE9000007CE\D00UnabletocloseEMHFILEafterLISTorSAVEG000007CF\D00Unabletogetasyntax-errormessagetextinLISTorSAVE5000007D0\D00UnabletooutputalineinLISTorSAVE<000007D1\D00UnabletocloseE-CODEfileafterLISTorSAVEO000007D2 \D00Unable to close output file after LIST or SAVE, file may be damage1000007D3\D00Unabletodeletetherequestedline:000007D4\D00UnabletocloseEMHfileafteraddingalineN000007D5\D00Unabletogetasyntax-errormessagetextafteranewlineadded9000007D6\D00UnabletocloseE-CODEfileforDELcommand4000007D7\D00UnabletodeletealineinDELcommand8000007D8\D00UnabletoopenE-CODEfileforDELcommand9000007D9\D00UnabletopositionE-CODEfilebeforeRESEQ5000007DA\D00UnabletocloseE-CODEfilebeforRESEQ4000007DB\D00UnabletoassignE-CODEfileforRESEQ.000007DC\D00UnabletoopenRESEQoutputfile7000007 DD\D00UnabletocloseoldE-CODEfileforRESEQM000007DE\D00UnabletowritelastrecordtonewE-CODEfileinRESEQcommand?000007DF\D00UnabletodeleteoldE-CODEfileinRESEQcommand?000007E0\D00UnabletorenamenewE-CODEfileinRESEQcommand>000007E1\D00UnabletoclosenewE-CODEfileinRESEQcommandA000007E2\D00UnabletoopencurrentE-CODEfileinRESEQcommandF000007E3\D00UnabletoassignthenewE-CODEfileafterRESEQcommand7000007E4\D00UnabletooutputalineinSYMBOLcommandI000007E5\D00UnabletowritelastblockofoutputfileinSYMBOLcommand;000007E6\D00UnabletocloseoutputfileinSYMBOLcommandM000007E7\D00UnabletocloseE-CODEfileafterrangecountinginDELcommandK000007E8\D00UnabletoassignE-CODEfiletokeyeddeletinginDELcommandJ000007E9\D00UnabletopositionE-CODEfileonfirstrecordtobedeletedI000007EA\D00UnabletopositionE-CODEfileonlastrecordtobedeleted;000007EB\D00UnabletocloseE-CODEfileafterDELcommand<000007EC\D00UnabletoassignE-CODEfileafterDELcommandJ000007ED\D00UnabletowriteanoutputrecordtonewE-CODEfileinRESEQ/000007EE\D00UnabletoopenSYMBOLoutputfile.000007EF\D00Unabletodisplayanoutputline)000007F0\D00Unabletogetaninputline:000007F1\D00UnabletoaddnextrecordofE-CODEtoblock3000007F2\D00UnabletoaddarecordtoE-CODEfile=000007F3 Missing ENDEF / nesting of DEF statements is illegal9000007F4 Expected array name - array declaration missing.B000007F5 Definition must preceed use - name in DEF is already used0000007F6 Illegal transfer into a FOR or IF block)000007F7 Reference to illegal line numberC000007F8 ELSE or ENDIF statement without cooresponding IF statement0000007F9 FOR and IF statements nested too deeply#000007FA STEP size must not be zero.000007FB Anything after a statement is illegal000007FC Illegal statement typeH000007FD LOGEN - Unable to get a segment for the generated LO, rc is \N.-000007FE Reference to non-exstent line number7000007FF type of variables missing in a LOCAL statement00000800 illegal key lengthN00000801 The argument of LOC function must be either variable or array element00000802 illegal record number!00000803 illegal number of DIGITS00000804 illegal width of LINE00000805 illegal value of TAB400000806 impossible to specify FAB to contigous file400000807 key may be specified only for indexed files300000808 bad type of argument of intrinsic function00000809 illegal expressionE0000080AillegaloperationinstringMAT(onlyconcatenationallowed)10000080B value in brackets of SET must be numericE0000080C ZER/CON/IDN/SET/TRN/INV can operate on numeric matrices only00000080D NEXT not allowed as secondary statement"0000080E expected integer constant0000080F overflow in number800000810 bit-operand is illegal in INPUT/READ statements'00000811 incorrect number of parametersD00000812 impossible to specify 'overwrite' option for contigous file:00000813 'T' option is not available - option 'T' ignored.00000814 underflow in number00000815 illegal real number600000816 conflict with prior definitions - illegal '('100000817 missing parameter list or array selectorC00000818 conflict with prior definitions - subroutine name expectedJ00000819 conflict with prior definitions - sub-program in left side of '='60000081A conflict with prior definitions - missing '('40000081B array selector not allowed in MAT statement-0000081C expected array name in MAT statementH0000081D conflict with prior definitions - DEF/EXTERNAL must precede useK0000081E specifications must be in one statement and precede any use of var@0000081F external procedure forbidden as parameter / illegal '('@00000820 parameter name appears more than once in parameter list=00000821 local name appears more than once in LOCAL statementA00000822 local variable has been previously declared as parameterK00000823 variable af ter ADDRESS must be an already declared simple variable;00000824 expected simple variable as index of FOR statement<00000825 illegal READ/INPUT - variable is a sub-program name600000826 missing parenthesis or variable is not simple700000827 type of variables missing in a LOCAL statementM00000828 LOCAL statement allowed only in sub-program - check statements order+00000829 illegal operator for string matrixA0000082A array declarator for variable missing in a DIM statement10000082B string length must be in the range 1-25530000082C data-type of string length must be numeric;0000082D adjusted string length must be passed as parameter0000082E missing ')'90000082F equivalence between local and global not allowed.00000830 fatal! check scanalyzer and getsynu()00000831 doublely defined00000832 too many dimensions=00000833 only dummy array can contain variables as dimensions@00000834 dimension in array declarator must be a simple variable/00000835 variable dimension must be a parameter00000836 illegal dimension)00000837 missing ')' for array declarator600000838 array declarator must be of numeric data type 00000839 procedure name expected+0000083A illegal delimitor in DEF statement90000083B expected parameter after comma in parameter list10000083C missing sub-program name or '(' after it20000083D internal error in elesize() - missing dtp80000083E internal error in elenum() - missing dimensions"0000083F internal error in space() 00000840 incorrect internal type!00000841 illegal number of commas.00000842 unary minus must have numeric operand<00000843 operand(s) of IAND/IOR/IEOR must be of integer typeH00000844 operand of INOT must be of integer type (BYTE/INTEGER/DINTEGER);00000845operandofFLOATorDFLOATmustbeofintegertype/00000846operandofATNmustbeofintegertype500000847 operand of built-in function must be numeric'00000848 operand of RND must be numeric'00000849 operand of ABS must be numeric?0000084A parameter of LEN/ASC/TRIM/VAL/STR/CHR must be a stringA0000084B disagreement between type of actual and formal parameter,0000084C first param of MID must be a string70000084D second and third params of MID must be numeric60000084E parameter of SNGL must be of DOUBLE data-type*0000084F parameter of DBLE must be numericA00000850 parameter of ISHFT and IROT must be of integer data-type-00000851 PEEK/POKE parameters must be numeric.00000852 string notallowed as parameter of EOF/00000853 illegal operator for string expression.00000854 internal - disagreement of data-types*00000855 operands in power must be numeric200000856 operand(s) of SGN must be of integer type400000857 IDN operates only on two dimensional arrays500000858 arrays in TRN must be two dimensional arrays400000859 INV operates only on two dimensional arraysC0000085A string variable with adjusted length - must be a parameter0000085B useless MAT assignment>0000085C number of dimensions in MAT assignment does not agree(0000085D number of dimensions must agree=0000085E INTERNAL: "Execute_Op" - undefined operand data type,0000085F unrecognized operator in MAT op MAT100000860 missing parameter in a built-in function$00000861 expecting right parenthesisB00000862 POKE is a subroutine and must not appear in an expression00000863 missing comma00000864 undecodable statementI00000865 undefined one-line-function or one-line-function reference errorK00000866 disagreement between types or number of actual and dummy arguments*00000867 internal fatal error in: "expars"#00000868 expression nested too deep00000869 expecting commaF0000086Asimplevariableorarrayelementexpectedinleftsideof'='*0000086B internal fatal error in: "sontof"-0000086C value in [] of SET - must be numericH0000086D number of dimensions in new working space must agree with array80000086E internal fatal: illegal node in Match_Convert()00000086F internal: no more buffer room available700000870 INTERNAL: "Execute_Op" -  unrecognized operator?00000871 INTERNAL: "Convert" - unrecognized conversion operator?00000872 NonLOCAL specification occurs in an external procedure700000873 DATA statement occurs in an external procedure(00000874 Missing NEXT or ENDIF statement 00000875 Missing ENDEF statementB00000876 No reference to statement following RETURN, STOP, or GOTO700000877 Statement other than REM follows END statement>00000878 DEF statement not preceded by GOTO or ENDEF statementG00000879 ON ERROR or ON hardware-exception is not allowed in subroutine+0000087A EVERY is not allowed in subroutine-0000087B ON INTR is not allowed in subroutine*0000087C WHEN is not allowed in subroutine-0000087DILLEGALOPTION(S)INCOMMANDLINE\P 0000087ECAN'TOPENLISTINGFILE:0000087F Declaration of parameter must folow DEF statement800000880\D00UnabletocloseE-CODEfileinNEWcommand=00000881\D00UnabletodeleteoldE-CODEfileinNEWcommand?00000882\D00UnabletoallocatenewE-CODEfileinNEWcommand=00000883\D00UnabletoassignnewE-CODEfileinNEWcommandO*------------------------------------------------------------------------------*ENDBASICMMESSAGESO*------------------------------------------------------------------------------******TRANSLATETABLEFORNONTRAPMESSAGES*#2002A006 CANCELLED WAITING IN QUEUE(2002C001 NORMAL TERMINATION FROM RUNNING 2002C006 CANCELLED WHILE RUNNING2002C009 CANCELLED DUE TO BREAK+2002C010 ABORTED DUE TO BUS ERROR (ADDRESS).2002C011 TERMINATED DUE TO BUS ERROR (ADDRESS)*O*------------------------------------------------------------------------------**FHS/IOSERRORMESSAGES*18000002 INVALID COMMAND \K000C$18000003 INVALID LOGICAL UNIT \K000C918000004 INVALID OR NONEXISTENT VOLUME \K000C VOLN=\C0604*18000005 DUPLICATE FILE NAME \K000C \K000F,18000006 FILE DESCRIPTOR ERROR \K000C \K000F)18000007 PROTECT CODE ERROR \K000C \K000F418000008 RECORD LENGTH ERROR \K000C \K000F RECL=\W34+18000009 SHARED SEGMENT ERROR \K000C \K000F31800000A INSUFFICIENT DIRECTORY SPACE \K000C \K000F.1800000B ACCESS PERMISSION ERROR \K000C \K000F01800000C INSUFFICIENT SYSTEM SPACE \K000C \K000F 1800000D ASSIGNMENT ERROR \K000C#1800000E INVALID DEVICE TYPE \K000C1800000F BUFFER OVERFLOW \K000C!18000010 INVALID TASK NAME \K000C018000011 INVALID BUFFER ADDRESS \K000C BUFF=\Z12(18000012 INVALID FILE TYPE \K000C \K000F)18000013 INTERNAL FHS ERROR \K000C \K000F,18000014 INVALID PARAM BLOCK ADDRESS A0=\A00818000015 DATA BLOCK LENGTH ERROR \K000C \K000F SIZE=\Z36+18000016 SIZE ERROR \K000C \K000F SIZE=\Z36,18000017 NONEXISTENT FILE NAME \K000C \K000F 18000018 END OF DIRECTORY \K000C118000019 KEY LENGTH ERROR \K000C \K000F SIZE=\Z3611800001A FAB LENGTH ERROR \K000C \K000F SIZE=\Z36*1800001B DEFAULT VOLUME NOT DEFINED \K000C"1800001C INVALID STATE FOR COMMAND(1800001D USER NOT OWNER OR ADMINISTRATOR&180000CD DISK SPACE FULL \K000C \K000F1180000D1 UNRECOVERABLE DEVICE ERROR \K000C \K000F)180000D2 DATA COMPARE ERROR \K0010 \K000F+180000D3 SECTOR PROTECT ERROR \K0010 \K000F180000D4 DEVICE NOT MOUNTED'180000E1 DEVICE NOT READY \K000C \K000F"180000E2 DEVICE BUSY \K000C \K000F%180000E3 DATA CRC ERROR \K0010 \K000F-180000E4 WRITE PROTECTED DEVICE \K000C \K000F1180000E5 DELETED DATA MARK DETECTED \K0010 \K000F180000E6 TIMEOUT \K000C \K000F-180000E7 INVALID SECTOR ADDRESS \K000C \K000F%180000E8 CHECKSUM ERROR \K000C \K000F)180000E9 DISK RESTORE ERROR \K000C \K000F#180000EA DATA OVERRUN \K000C \K000F,180000EB DEVICE STATUS CHANGED \K000C \K000F0180000EC TRACK/SECTOR ID NOT FOUND \K0010 \K000F-180000ED ADDRESS MARK CRC ERROR \K0010 \K000F!180000EE SEEK ERROR \K000C \K000F!180000EF BAD SECTOR \K0010 \K000F#180000F1 CHANNEL BUSY \K000C \K000F(180000F2 CHANNEL DMA ERROR \K000C \K000F2180000F3 UNRECOVERABLE CHANNEL ERROR \K000C \K000F'180000F4 CONTROLLER ERROR \K000C \K000F1180000F5 DEVICE CONFIGURATION ERROR \K000C \K000F$1800 00F6 DMA BUS ERROR \K000C \K000F(180000F7 DMA MAPPING ERROR \K000C \K000F+180000F8 DMA CONTROLLER ERROR \K000C \K000F2180000F9 INDETERMINATE CHANNEL ERROR \K000C \K000FO*------------------------------------------------------------------------------)1000000C INSUFFICIENT SYSTEM SPACE \K000C 10000082 INVALID FUNCTION \K000C$10000083 INVALID LOGICAL UNIT \K000C-10000084 INVALID DATA BUFFER \K000C BUFF=\Z12.10000085 INVALID RANDOM RECORD \K000C RRN=\Z08,10000086 INVALID PARAM BLOCK ADDRESS A0=\A00"10000087 PROTECT CODE ERROR \K000C10000088 CONFIGURATION ERROR2100000C1 BUFFER OVERFLOW/RECORD SIZE TOO BIG\K000C100000C2 END OF FILE \K000C100000C3 END OF VOLUME \K000C$100000C4 INVALID OR EMPTY FAB \K000C+100000C5 INVALID TRANSFER FOR DEVICE \K000C100000C6 BREAK CONDITION \K000C!100000C7 INTERNAL IO ERROR \K000C'100000C8 FAB/DATA BLOCK CONFLICT \K000C%100000C9 RECORD DOES NOT EXIST \K000C%100000CA RECORD ALREADY EXISTS \K000C>100000CB RECORD OVERFLOW/TOO MANY RECORDS IN DATA BLOCK \K000C+100000CC KEY ERROR, FAB KEY CONFLICT \K000C100000CD DISK SPACE FULL \K000D*100000D1 UNRECOVERABLE DEVICE ERROR \K000D"100000D2 DATA COMPARE ERROR \K000E$100000D3 SECTOR PROTECT ERROR \K000E"100000D4 DEVICE NOT MOUNTED \K000D-100000D5 BEGINNING OF TAPE ENCOUNTERED \K000C2100000D7 A TAPE IS ALREADY MOUNTED ON DRIVE \K000C 100000E1 DEVICE NOT READY \K000D100000E2 DEVICE BUSY \K000D100000E3 DATA CRC ERROR \K000E&100000E4 WRITE PROTECTED DEVICE \K000D*100000E5 DELETED DATA MARK DETECTED \K000E100000E6 TIMEOUT \K000D&100000E7 INVALID SECTOR ADDRESS \K000D100000E8 CHECKSUM ERROR \K000D"100000E9 DISK RESTORE ERROR \K000D100000EA DATA OVERRUN \K000D%100000EB DEVICE STATUS CHANGED \K000D)100000EC TRACK/SECTOR ID NOT FOUND \K000E&100000ED ADDRESS MARK CRC ERROR \K000E100000EE SEEK ERROR \K000D100000EF BAD SECTOR \K000E100000F1 CHANNEL BUSY \K000D!100000F2 CHANNEL DMA ERROR \K000D3100000F3 CHANNEL UNRECOVERABLE CHANNEL ERROR \K000D 100000F4 CONTROLLER ERROR \K000D*100000F5 DEVICE CONFIGURATION ERROR \K000D100000F6 DMA BUS ERROR \K000D!100000F7 DMA MAPPING ERROR \K000D$100000F8 DMA CONTROLLER ERROR \K000D+100000F9 INDETERMINATE CHANNEL ERROR \K000D*"*TRANSLATETABLEFORIOSFCTFIELD* 30000001 READ30000002 WRITE30000004 OUTPUT WITH INPUT30000008 UPDATE30000010 DELETE30000020 FORMAT30000101 POSITION30000102 REWIND30000104 TEST I/0 COMPLETE 30000108 WAIT30000110 HALT I/O30000120 BREAK*"*TRANSLATETABLEFORFHSCMDFIELD*38000001 CHECKPOINT38000002 DELETE38000004 CLOSE38000008 CHANGE PROTECT CODES38000010 RENAME38000020 CHANGE ACCESS38000040 ASSIGN38000080 ALLOCATE380000C0 ALLOCATE/ASSIGN38000108 FETCH DEFAULT VOLUME38000110 CHANGE LU38000120 FETCH DEVICE MNEMONICS38000140 FETCH DIR. ENTRY38000180 RETRIEVE ATTRIBUTES38000204 DISPLAY SPOOLER QUEUE38000208 CHANGE COPIES38000210 PRINT FILE38000220 CHANGE FORMS38000240 CONTINUE SPOOLER JOB38000280 CANCEL SPOOLER JOB38008001 SET DEFAULT VOLUME**O*------------------------------------------------------------------------------**TRAP1RELATEDMESSAGES**.08010003 NONEXISTENT TARGET TASK (GTSEG)\K0016#08010005 SEGMENT TABLE FULL (GTSEG)'08010006 DUPLICATE SEGMENT NAME (GTSEG)008010007 REQUESTED MEMORY DOES NOT EXIST (GTSEG)$08010008 INSUFFICIENT MEMORY (GTSEG)(0801000A NON-DORMANT TARGET TASK (GTSEG))0801000B LOGICAL ADDRESS CONFLICT (GTSEG).08020003 NONEXISTENT TARGET TASK (DESEG)\K0016/08020007 NONEXISTENT SEGMENT NAME (DESEG)\K0016(0802000A NON-DORMANT TARGET TASK (DESEG)00803000B SEGMENT ERROR - TASK LINKED INCORRECTLY$08040005 SEGMENT TABLE FULL (ATTSEG)(08040006 DUPLICATE SEGMENT NAME (ATTSEG)008040007 NONEXISTENT SEGMENT NAME (ATTSEG)\K0016*0804000B LOGICAL ADDRESS CONFLICT (ATTSEG)'08060003 SOURCE TASK NOT FOUND (MOVELL),08060007 DESTINATION TASK NOT FOUND (MOVELL)108060009 USER TO SYSTEM TASK NOT ALLOWED (MOVELL)70806000B ADDRESSES DIFFERENT EVEN/ODD BOUNDARY (MOVELL)&08090003  TARGET TASK NOT FOUND (RCVSA)$080B0006 DUPLICATE TASK NAME (CRTCB)$080B0008 INSUFFICIENT MEMORY (CRTCB)*080D0003 TASK DOES NOT EXIST (START)\K0016*080D0023 TASK DOES NOT EXIST (START)\K0017!080D000A TASK NOT DORMANT (START)108100003 TARGET TASK DOES NOT EXIST (TERMT)\K0016108100023 TARGET TASK DOES NOT EXIST (TERMT)\K0017308100006 TARGET TASK ALREADY IN TERMINATION (TERMT):08100009 USER TASK CAN NOT TERMT SYSTEM TASK OR SELF\K0016308170003 TARGET TASK DOES NOT EXIST (TSKATTR)\K0016308170023 TARGET TASK DOES NOT EXIST (TSKATTR)\K0017,0817000A TASK IS TERMINATING (TSKATTR)\K0016008190003 TARGET TASK DOES NOT EXIST (STOP)\K0016008190023 TARGET TASK DOES NOT EXIST (STOP)\K0017$08190006 TARGET TASK ALREADY STOPPED108190009 USER TASK CAN NOT STOP SYSTEM TASK\K0016**O*------------------------------------------------------------------------------**TRAP4RELATEDMESSAGES*#20000001 UNDEFINED DIRECTIVE NUMBER?20000012 LOAD SEGMENT LOGICAL ADDRESS EXCEEDS SEGMENT BOUNDRIES+20000013 FILE REFERENCED IS NOT A LOAD FILE****O*------------------------------------------------------------------------------;***********************************************************;*----------------------------------------------------------*-* The following are the Pascal error messages*;*----------------------------------------------------------$00001001 Case index out of range\D0000001002 Value out of range\D00%00001004 Integer division by zero\D00;00001008 Bus error - bad pointer or stack/heap overflow\D00 00001010 Stack/heap overflow\D00?00001011 Address error - bad pointer or stack/heap overflow\D00?00001012 Memory allocation error during processing Z option\D00+00001013 Data segment name must be SEG2\D00"00001022 Read past end of file\D0000001028 Illegal file name\D00*00001031 Integer expected in text file\D00'00001032 Real expected in text file\D00*00001033 Boolean expected in text file\D00?00001040 Too many files in use, or unrecognizable device ID\D00100001041 Option error in 'reset' or 'rewrite'\D00)00001042 Too many command line fields\D00#00001043 File not open at input\D00$00001044 File not open at output\D00200001051 Real number out of range in text file\D00700001052 Attempt to enable 6809 floating point trap\D00900001053 Attempt to set 6809 floating point exception\D00>00001054 Attempt to set 6809 floating point precision mode\D00200001062 Invalid base for integer in text file\D00900001063 Invalid digit for based integer in text file\D00#00001070 Attempt to take NAN(0)\D00?00001099 Illegal TRAP 14 error code - internal Pascal error\D00;*----------------------------------------------------------<* The following are the Pascal floating point error messages;*----------------------------------------------------------'00002000 No invalid operation error\D00"00002100 Illegal SQRT argument\D00500002200 (+infinity) + (-infinity) in affine mode\D00700002300 Conversion of a not-a-number to an integer\D0000002400 Illegal division\D00400002500 An argument was a trapping not-a-number\D00G00002600 Unordered condition tested by predicate other than = or <>\D00300002700 Projective closure use of +/- infinity\D0000002800 0 * infinity\D00"00002900 Illegal REM arguments\D00K00002A00 Binary-to-decimal or decimal-to-binary conversion out of range\D00D00002B00 Moved single precision unnormalized to double precision\D00G00002C00 Returned unnormalized number to single or double precision\D0000002001 Invalid operation\D0000002002 Overflow\D0000002004 Underflow\D0000002008 Division by zero\D0000002010 Inexact result\D00B00002020 Overflow on conversion from floating point to integer\D00:00002040 Reserved exponent value seen as input operand\D00;*----------------------------------------------------------* End of Pascal error messages;*----------------------------------------------------------*$*VERSAdosOperatingSystemMessages*+20010013 FILE REFERE  NCED IS NOT A LOAD FILEO*------------------------------------------------------------------------------?*--------------------------------------------------------------"* FORTRAN COMPILER ERROR MESSAGES.?*--------------------------------------------------------------900003002INVALIDCHARACTERAPPEARSINCOLUMNS1-5OFLINE600003003THESTATEMENTNUMBERHASALREADYBEENDEFINED?00003004THEFIRSTCHARACTEROFTHESTATEMENTISNOTALPHABETICL00003005CONTINUATIONLINEENCOUNTEREDWHENCOMMENTORINITIALLINEEXPECTED/00003006LIMITOF9CONTINUATIONLINESEXCEEDED900003007COLUMNS1-5OFACONTINUATIONLINEARENOTBLANK 00003009MISSING'END'STATEMENTI00003010THENAME\PISTOOLONG.ITHASBEENTRUNCATEDTOSIXCHARACTERS00003011SYMBOLTABLEOVERFLOW00003014REALCONSTANTOVERFLOW00003015ILLEGALCOMMANDLINE 00003016INVALIDCONSTANTFORMAT"00003017INTEGERCONSTANTOVERFLOW?00003018INTERNALERROR:illegalnodetypefoundin"Code_Gen".$00003022EXPECTINGRIGHTPARENTHESIS00003023EXPECTINGSINGLEQUOTE00003025UNDECODABLESTATEMENT00003026INVALIDCHARACTER\P?00003033INVALIDSTATEMENTAFTERENDSTATEMENT.ITWASIGNORED.*00003035ILLEGALOPTION(S)INCOMMANDLINE 00003036ILLEGALINPUTFILENAME!00003037ILLEGALOUTPUTFILENAME"00003038ILLEGALLISTINGFILENAME00003040MISSINGPROGRAMNAME 00003041MISSINGSUBROUTINENAME00003042MISSINGFUNCTIONNAMEG00003044NON-SYMBOLICNAMEISSPECIFIEDINTYPESPECIFICATIONSTATEMENT$00003045INVALIDARRAYDECLARATOR\P#00003047EXPECTEDCOMMONBLOCKNAME00003048MISSINGCOMMA100003049NON-SYMBOLICNAMEINANEQUIVALENCELISTG00003051INCORRECTLENGTHSPECIFICATIONINTYPESPECIFICATIONSTATEMENT500003052MISSINGLISTOFNAMESININTRINSICSTATEMENTC00003053INVALIDTYPEORLENGTHSPECIFICATIONINIMPLICITSTATEMENT000003054INVALIDLETTERINIMPLICITSTATEMENT\P+00003055INVALIDDIMENSIONDECLARATORIN\PM00003056THELENGTHOFALITERALISLONGERTHANTHEVARIABLEORARRAYELEMENT200003064ILLEGALSTATEMENTINBLOCKDATASUBPROGRAMM00003065ATTEMPTTODEFINEAPREVIOUSLYDEFINEDNAMEINEXTERNALSTATEMENT\PM00003067NAMEINANINTRINSICSTATEMENTMUSTBEANINTRINSICFUNCTIONNAME\PN00003069ATTEMPTTODEFINEAPREVIOUSLYDEFINEDNAMEININTRINSICSTATEMENT\PF00003070ATTEMPTTODEFINEAPREVIOUSLYDEFINEDNAMEINSAVESTATEMENTD00003072ATTEMPTTOESTABLISHTHETYPEOFACHARACTERMORETHANONCEM00003073THERANGEOFLETTERSINANIMPLICITSTATEMENTLISTISNOTALPHABETICL00003079ATTEMPTTODEFINEAPREVIOUSLYDEFINEDNAMEASACOMMONVARIABLE\P:00003083WRONGNUMBEROFSUBSCRIPTSINANEQUIVALENCELISTC00003085AVARIABLE'SDIMENSIONISNOTASIMPLEINTEGERVARIABLE\PC00003086ATTEMPTINGTOUSEAPREVIOUSLYDEFINEDNAMEASANARRAY\PN00003087ANADJUSTABLEARRAYORASSUMEDSIZEARRAYMUSTBEADUMMYARGUMENT\P000003088ATTEMPTINGTOREDIMENSIONAVARIABLE\P<00003090INVALIDFORMATOFANASSUMEDSIZEARRAYDECLARATIONK00003092AVARIABLEDIMENSION\PISNOTADUMMYARGUMENTORCOMMONVARIABLE000003093MORETHAN3DIMENSIONSFORTHEARRAY\P;00003098INVALIDSYMBOLICNAMEAPPEARSINDATASTATEMENT\PB00003099AVARIABLEWASPREVIOUSLYINITIALIZEDINADATASTATEMENTK00003100ATTEMPTTOINITIALIZENAMEDCOMMONENTITY\PNOTINBLOCKDATASUB<00003101ATTEMPTINGTOINITIALIZEABLANKCOMMONVARIABLE\P/00003102TYPEOFDATAANDVARIABLEDONOTMATCH100003108AFUNCTIONMUSTNOTBEOFTYPECHARACTERB00003112ADJUSTABLEARRAYSAREVALIDONLYINPROCEDURESUBPROGRAMS-00003123INVALIDREFERENCETOSUBROUTINENAMEG00003126ADOLOOPPARAMETERISNOTANINTEGEREXPRESSIONORISMISSING600003131THEDOINDEXISNOTASIMPLEINTEGERVARIABLE500003133MISSINGINPUT/OUTPUTLISTINIMPLIEDDOLISTD00003135TYPEDISAGREEMENTBETWEENLEFTANDRIGHTSIDEOFEQUALSIGN=00003139ILLEGALSEQUENCEOFOPERATORS/OPERANDSINEXPRESSION<00003143TYPEDISAGREEMENTBETWEENACTUALANDDU  MMYARGUMENT00003150DIVIDEBYZEROL00003152UNDEFINEDSTATEMENTFUNCTION,ORSTATEMENTFUNCTIONREFERENCEERRORN00003154STATEMENTFUNCTIONSTATEMENTNAMECONFLICTSWITHPRIORDEFINITIONS\PJ00003155DISAGREEMENTBETWEENTYPEORNUMBEROFACTUALANDDUMMYARGUMENTSN00003156MISMATCHINNUMBEROFACTUALANDDUMMYARGUMENTSINANINTRINSICFUNC00003157\PISDOUBLYDEFINEDF00003158PROCEDURE\PAPPEARSASARGUMENTWITHOUTEXTERNALDECLARATION?00003159THEREISANASSUMEDSIZEARRAYININPUT/OUTPUTLIST\PN00003160STATEMENTFUNCTIONSTATEMENTNAME\PPASSEDASPARAMETERORINCOMMONF00003163THEREISANERRORONTHELEFTSIDEOFANASSIGNMENTSTATEMENT+00003166UNDECODABLETYPEOFGOTOSTATEMENT100003172LOGICALIFCONTAINSILLEGALSTATEMENT(S)800003174DOCONTROLVARIABLEUSEDPREVIOUSLYINTHENEST)00003175ILLEGALTERMINALSTATEMENTOFDO*00003179RECORDANDEOFSPECIFIERCONFLICT-00003180FORMATANDRECORDSPECIFIERCONFLICTF00003181MISSINGFORMATIDENTIFIERWHEREANINTERNALFILEISSPECIFIED400003182INTERNALFILEANDRECORDSPECIFIERCONFLICT:00003183WRITESTATEMENTMUSTNOTCONTAINANEOFSPECIFIER500003189RETURNSTATEMENTAPPEARSINTHEMAINPROGRAM+00003195MAINPROGRAMHASNOSTOPSTATEMENT>00003197FUNCTIONVALUENOTDEFINEDINTHEFUNCTIONSUBPROGRAM.00003199ANYTHINGAFTERASTATEMENTISILLEGAL"00003200EXPECTINGSTATEMENTLABEL-00003201EXPECTINGCOMMAORRIGHTPARENTHESIS 00003203EXPECTINGSYMBOLICNAME-00003204EXPECTINGCOMMAORRIGHTPARENTHESIS#00003205EXPECTINGLEFTPARENTHESIS00003206EXPECTINGCOMMA00003207EXPECTINGEQUALSIGNK00003208EXPECTINGLABEL,SYMBOLICNAME,CHARACTERCONSTANT,'REC'OR'END'00003211EXPECTING'DIRECT'00003215EXPECTING'THEN'00003218EXPECTING'TO'*00003220MULTIPLE'END'OR'REC'SPECIFIEDK00003224NOSTATEMENTLABELAFTERARITHMETICIF,'GOTO','STOP'OR'RETURN'-00003226REFERENCETOILLEGALSTATEMENTLABELM00003227ILLEGALTRANSFERINTODOLOOP,IFBLOCK,ELSEIFBLOCKORELSEBLOCK(00003230INCREMENTAIONPARAMETERISZERO@00003235THEDOCONTROLVARIABLEISREDEFINEDWITHINTHEDOLOOP-00003237THEVARIABLEMUSTBEOFTYPEINTEGERF00003251MORETHANTHREELEVELSOFPARENTHESESINFORMATSPECIFICATIONG00003254NUMERICSPECIFICATIONGREATERTHAN255INFORMATSPECIFICATION>00003255NUMERICSPECIFICATIONISZEROINFORMATSPECIFICATION@00003257DIGITSOFFRACTIONALPARTEXCEEDTOTALDIGITSOFNUMBERK00003260CHARACTERCONSTANTLENGTHGREATERTHAN255INFORMATSPECIFICATION%00003261MISSING'N'OR'Z'AFTER'B'K00003265THEFIRSTCHARACTEROFACHARACTERFORMATSPECIFICATIONISNOT'('/00003267NOSTATEMENTLABELONFORMATSTATEMENT000003270FORMATINDEXVARIABLEMUSTBEINTEGER*4C00003271Uselessdatatype-expectedvariable,arrayorfunction\P=00003272OverflowinHexadecimalnumber(morethan8digits).400003273IllegalcharacterinHexadecimalnumber.\P200003274Missingending'H'inHexadecimalnumber.:00003275UnrecognizednameofLOGICAL/RELATIONALoperator.'00003276Double-realconstantoverflow.800003277Morethanoneperioddetectedinrealconstant.:00003278Morethanoneexponentdetectedinrealconstant.$00003279Underflowinrealconstant.K00003281TWODIFFERENTVARIABLETYPESAREBOUNDBYEQUIVALENCESTATEMENT\PK00003282TWOEQUIVALENCEDCHARACTERENTITIESDONOTHAVETHESAMELENGTH\PI00003283TWODIFFERENTARRAYELEMENTSAREASSIGNEDTOTHESAMEADDRESS\PM00003285CHARACTERDATAANDNONCHARACTERDATACANNOTBEINTHESAMECOMMON\PI00003287COMMONBLOCKSTORAGECANNOTBEEXTENDEDUPWARDBYEQUIVALENCE\PB00003289ACOMMONVARIABLEANDASAVEVARIABLEAREEQUIVALENCED\P@00003290ELEMENTSOFDIFFERENTCOMMONBLOCKSAREEQUIVALENCED\PC00003293THESUBSCRIPTOF\PINANEQUIVALENCESTATEMENTISINVALID00003297CAN'TOPENINPUTFILE 00003298CAN'TOPENLISTINGFILE00003300INTERNALERROR'00003301Integerexpressionisexpected+00003302Numbe! rshouldbegreaterthanzero700003303EOFmustnotbespecifiedforaninternalfileB00003304Formatidentifier,ifany,mustbeseconditeminciolist00003305Unexpectedequalsign%00003306IllegalformatspecificationE00003307Implied-docontrolvariableisnotasimpleintegervariable900003308Implied-doloophastoomanysimpleiolistitems900003309DOcontrolvariable\PisredefinedinaniolistA00003310Implied-docontrolvariableisredefinedinaniolist\P$00003311Unexpectedleftparenthesis%00003312Unexpectedrightparenthesis00003313Unexpectedcomma00003314Unexpectedslash00003315Unexpectednumber00003316Unexpectedminussign00003317Unexpectedapostrophe*00003318UnexpectedBformatspecification'00003319IllegalXformatspecification*00003320UnexpectedIformatspecification*00003321UnexpectedLformatspecification*00003322UnexpectedAformatspecification*00003323UnexpectedDformatspecification*00003324UnexpectedEformatspecification*00003325UnexpectedFformatspecification800003326NumberismissingbeforePformatspecification800003327NumberismissingbeforeHformatspecificationA00003328Anon-logicaloperand\Pappearsinalogicalexpression$00003329Unexpectedend-of-statement100003330Unexpectedcharacterinformatstatement00003331Missingfieldwidth)00003332Internalerror-namenotfound.&00003333Illegaluseofmodulename\PG00003334Attemptedtopassstatement-function-statementnameasaddress,00003335Conflictwithpriordefinitions:\P.00003336Illegalattempttopass\PasaddressC00003337NoINTRINSICstatementfor\Pbutitispassedasargument700003338Anattemptwasmadetoassigntheprocedure\P400003339Procedurename\PappearsinDATAstatement000003340UnbalancedparenthesesinIFstatement.L00003341Internal-nameinattributetabledoesnotstartwithalphacharac$00003342Internal-hashtablefull.;00003343Expectedvariablenameorarraynameinsteadof\PH00003344Dummyargument\PappearsmorethanonceindummyargumentlistL00003345Dummyargumentlistmissing-parenthesesmustappearevenifempty00003346'RECL'expected00003347'ACCESS'expected-00003348MissingelementsinEQUIVALENCElist00003349SlashexpectedB00003350DummyargumentorSAVEdentitity\PnotallowedinCOMMON.00003351ArrayelementsnotallowedinSAVE\P?00003352DummyargumentorCOMMONentity\PnotallowedinSAVEM00003353SAVEentitiesmustbesimplevariables,arraynamesorcommonblocks*00003354Numericintegerconstantexpected:00003355Dummyargument\PnotallowedinEQUIVALENCElist100003356RETURNmissinginfunctionorsubroutineJ00003357Morethanoneheader(PROGRAM,FUNCTION,SUBROUTINEorBLOCKDATA)$00003358Illegalorderofstatements800003359MissingDATAstatementsinBLOCKDATAsubprogram&00003360Missingexecutablestatements00003361Unclosedblocks300003362IllegalstatementsinBLOCKDATAsubprogram600003363IllegalcharactersinSTOPorPAUSEstatement400003364Missingdimensionnumberinattributeof\P700003365"bin_code"-Illegaloperationcodepassed:\NL00003366INTERNAL:"nextwork"-Toomanywork-registersneededby"bin_code"B00003367INTERNAL:"bin_special"-Illegalcommand-codepassed:\NG00003368INTERNAL:"bnflsmpl"-Illegalvar-kindinsimple-varnode:\NG00003369INTERNAL:"bnflarray"-Illegalvar-kindinarray-varnode:\NM00003370INTERNAL:"bnflopnd/bnflrutn"-Illegaloperandnode-typepassed:\NH00003371Codesizeisgreaterthan32KBwhichconflictswith'-B'optionL00003372INTERNAL:"bincre"-Illegaloperandaddress-mode(MDxxx)found:\NN00003373INTERNAL:"binpseud"-Illegaloperandaddress-mode(MDxxx)found:\N600003374INTERNAL:"binopen"-Cant'topenro-file:\PC00003375INTERNAL:"bntmopen"-Can'tre-opentemporaryro-file:\PD00003376INTERNAL:"bntmread"-Readoftemporaryro-filefailed:\PE00003377INTERNAL:"binwrt"-Illega! lreacod-code(WR_xxx)passed:\NN00003378SAVE+COMMONcodeisgreaterthan32KBwhichconflictswith'C'option;00003379INTERNAL:"bnwrbyte"-Writeonro-filefailed:\P;00003380INTERNAL:"binclose"-Writeonro-filefailed:\P00003381NestingerrorG00003382STRING-CONSTANTSandFORMATSsectionsizeisgreaterthat32KB00003383Illegalintegernumber=00003384CHARACTERLENGTHOFBOTHOPERANDSSHOULDBETHESAME(00003385IllegalsyntaxinDATAstatment)00003386Inconsistentsubscriptreference+00003387UnequalnumberofnamesandvaluesM00003388AttempttoinitializenonCOMMONvariable\PinBLOCKDATAsubprogram300003389Subscriptof\Pisnotanintegerconstant100003390FATALerrorinDATA-datatableisfull?00003391FATALerrorindata/keep_gen-keep_gengotoddoffset900003393MISMATCHBETWEENOPERANDANDOPERATORDATATYPES00003394UNDEFINEDLABEL\N00003395FIXED-POINTOVERFLOWD00003396FIXED-POINTZERORAISEDTOPOWEROFNEGATIVEORZERONUMBER*00003397UnexpectedZformatspecification*00003398UnexpectedGformatspecification00003399PROGRAMISEMPTY100003400INTERNALFATALERRORIN:"match_convert",00003401INTERNALFATALERRORIN:"subst_op".00003402INTERNALFATALERRORIN:"execute_op"+00003403INTERNALFATALERRORIN:"convert"*00003404INTERNALFATALERRORIN:"expars"=00003405INTERNALFATALERRORIN"elesize"(VARIABLENAME\P)#00003406EXPRESSIONNESTEDTOODEEP*00003407INTERNALFATALERRORIN:"sintof"000003408INTERNAL:nomorebufferroomavailable(00003409INTERNAL:attributestablefull(00003410INTERNAL:anI/OerroroccurredO*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *TESTLINEO*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' TSO DLOAD CF::aaDLOAD SA??aaULOAD CFXXaaULOAD SA]]aa PROC 1 FILEALLOC DDNAME(OUTPUT) DSNAME(*)ALLOCDDNAME(INPUT)DSNAME(*)"ALLOCDDNAME(INFIL)DSNAME(&FILE.) CALL DLOADFREEALL" 6%PROGRAM DOWNLOAD(INPUT,OUTPUT,INFIL); J(************************************************************************)D(*THISPROGRAMREADSRECORDSFROMASOURCEFILE,PACKSTHEMINTO*)D(*BLOCKSANDWRITESTHEMTOTHETERMINAL.THEPROGRAMRUNSONAN*)(*IBM370UNDERTSO.*)J(************************************************************************) 5CONSTCMAX=80;(*MAXNO.OFCHARSINONEBLOCK*),RMAX=80;(*MAXIMUMSINGLERECORDSIZE*)5BLKCNT=1;(*NUMBEROFBLOCKSUNDERONECHECKSUM*)3BMAX=162;(*BUFFERSIZE=BLKCNT*CMAX+RMAX+2*)/OPTION='BB';(*COM/CHARPROTOCOLOPTIONS*),CHRMAX=255;(*MAXIMUMCHARACTERVALUE*) TYPEBKINDEX=1..CMAX;BFINDEX=INTEGER;*BFTYPE=PACKEDARRAY(.1..BMAX.)OFCHAR;(RSPTYPE=PACKEDARRAY(.1..2.)OFCHAR;+RECTYPE=PACKEDARRAY(.1..RMAX.)OFCHAR; VARQ:BOOLEAN; INFIL:TEXT;(*SOURCEFILE*)>ASCII:ARRAY(.CHAR.)OFINTEGER;(*ASCIICHARACTERCODES*);@ D%H0L%P$?ASHEX:PACKEDARRAY(.1..36.)OFCHAR;(*FORHEXCONVERSION*)&REC:RECTYPE;(*HOLDSRAWRECORD*)/RECSIZ:INTEGER;(*HOLDSLENGTHOFRAWREC*)-BUFF:BFTYPE;(*BUFFHOLDSPACKEDBLOCK*))BUFFP:BFINDEX;(*INDEXINTOBUFFER*)*RESPONSE:RSPTYPE;(*ACKNAKRESPONSE*) PROCEDUREINITIALIZE;0TYPECHRARRAY=PACKEDARRAY(.1..16.)OFCHAR;VARI:INTEGER; 2PROCEDUREASGCODE(CODE:INTEGER;CHRSET:CHRARRAY);VARI:INTEGER;BEGIN(*ASGCODE*)FORI:=1TO16DO%ASCII(.CHRSET(.I.).):=CODE+I-1END;(*ASGCODE*) BEGIN(*INITIALIZE*)FORI:=0TOCHRMAXDO0ASCII(.CHR(I).):=32;(*FORCEASCIIBLANKS*) INTERACTIVE(INPUT);RESET(INFIL);1ASHEX:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';!ASGCODE(112,'pqrstuvwxyz{|}~');!ASGCODE(32,'!"#$%&''()*+,-./'); ASGCODE(48,'0123456789:;<=>?'); ASGCODE(64,'@ABCDEFGHIJKLMNO'); ASGCODE(80,'PQRSTUVWXYZ[\]^_'); ASGCODE(96,'`abcdefghijklmno'); >(*#THEFOLLOWINGSTATEMENTWASREQUIREDTOALLOWDOWNLOADINGOF'~'FROMIBM*) ASCII(.CHR(95).):=126; -BUFFP:=4;(*STARTPACKINGRECORDSHERE*)REPEAT/WRITE(OUTPUT,'PREAMBLED');(*SENDPREAMBLE*)(WRITE(OUTPUT,OPTION);(*SENDOPTION*),WRITE(OUTPUT,CMAX:3);(*SENDBLOCKSIZE*)1WRITELN(OUTPUT,BLKCNT:1);(*SENDBLOCKCOUNT*)READLN(INPUT,RESPONSE);6UNTIL(RESPONSE(.1.)='N')OR(RESPONSE(.1.)='T');IFRESPONSE(.1.)='T'(THENQ:=TRUE;(*EARLYTERMINATION*)END;(*INITIALIZE*) IPROCEDURECOMPRESS(VARREC:RECTYPE;VARRECSIZ:INTEGER;VARBUFF:BFTYPE;"VARP:BFINDEX;VARCCNT:INTEGER); VARI,J:INTEGER;RECPTR:INTEGER; PROCEDURECOUT(C:CHAR);BEGIN(*COUT*)BUFF(.P.):=C; P:=P+1;CCNT:=CCNT+1END;(*COUT*) BEGIN(*COMPRESS*) RECPTR:=1;WHILERECPTR<=RECSIZDOBEGIN I:=RECPTR;FWHILE(I<=RECSIZ)AND(REC(.RECPTR.)=REC(.I.))AND(I-RECPTR<35)DO I:=I+1;" 5I:=I-RECPTR;(*NUMBEROFMATCHINGCHARACTERS*)/IF(I<=3)AND(I>0)AND(REC(.RECPTR.)<>'|')THENBEGINFORJ:=1TOIDOCOUT(REC(.RECPTR.));RECPTR:=RECPTR+IENDELSE IFI>0THENBEGIN COUT('|');COUT(REC(.RECPTR.));COUT(ASHEX(.I+1.));RECPTR:=RECPTR+I END(*THEN*)END(*WHILE*)END;(*COMPRESS*) 2PROCEDUREGETREC(VARP:BFINDEX;VARBUFF:BFTYPE);?VARCPOS:BFINDEX;(*POSITIONINBUFFFORCHARACTERCOUNT*)5CCNT:INTEGER;(*NUMBEROFCHARACTERSINRECORD*) Q:BOOLEAN; BEGIN(*GETREC*)#IFEOLN(INFIL)THENREADLN(INFIL);IFNOTEOF(INFIL)THENBEGIN CPOS:=P; CCNT:=0;,P:=P+2;(*LEAVEROOMFORRECORDCOUNT*) RECSIZ:=0;WHILENOTEOLN(INFIL)DOBEGINREAD(INFIL,REC(.RECSIZ+1.));RECSIZ:=RECSIZ+1;END;(*WHILE*)IFRESPONSE(.2.)='B'THENBEGIN Q:=FALSE;"WHILE(NOTQ)AND(RECSIZ>0)DOIFREC(.RECSIZ.)=''THENRECSIZ:=RECSIZ-1ELSE Q:=TRUEEND;"COMPRESS(REC,RECSIZ,BUFF,P,CCNT);FBUFF(.CPOS.):=ASHEX(.CCNTDIV16+1.);(*CONSTRUCTHEXCHARCOUNT*)*BUFF(.CPOS+1.):=ASHEX(.CCNTMOD16+1.); END(*THEN*)END;(*GETREC*) @PROCEDUREPUTREC(VARQ:BOOLEAN;VARP:BFINDEX;VARBUFF:BFTYPE;VARRESPONSE:RSPTYPE); VARI:BFINDEX; PROCEDUREOUTBLOCK(RTYPE:CHAR);VARI:INTEGER; J:INTEGER;C:INTEGER;(*CHECKSUM*) BEGIN(*OUTBLOCK*)*BUFF(.3.):=RTYPE;(*MARKBLOCKTYPE*)C:=0;4FORI:=3TOCMAX*BLKCNTDO(*COMPUTECHECKSUM*)BEGINIFBUFF(.I.)='^',THENBUFF(.I.):='~';(*#UNIQUETOIBM*)C:=C+ASCII(.BUFF(.I.).)END;2C:=CMOD255+1;(*0CHECKSUMISWILDCARD*)BBUFF(.1.):=ASHEX(.CDIV16+1.);(*PLACECHECKSUMINTOBLOCK*)"BUFF(.2.):=ASHEX(.CMOD16+1.);REPEATFORJ:=0TOBLKCNT-1DOBEGINBLKCNT*CMAX+1DO/OUTBLOCK('A');(*OUTPUTINTERMEDIATEBLOCK*)IFEOF(INFIL)THENBEGINFORI:=PTOBLKCNT*CMAXDO5BUFF(.I.):='';(*FORCEBLANKSTOENDOFBLOCK*)'OUTBLOCK('Z');(*OUTPUTLASTBLOCK*) Q:=TRUE;ENDELSEFIFP>BLKCNT*CMAXTHENOUTBLOCK('A')(*OUTPUTINTERMEDIATEBLOCK*)END;(*PUTREC*) BEGIN(*MAIN*) Q:=FALSE; INITIALIZE;WHILENOTQDOBEGINGETREC(BUFFP,BUFF);PUTREC(Q,BUFFP,BUFF,RESPONSE);ENDEND.(*MAIN*) PROC 1 FILE'ATTR FIL LRECL(80) BLKSIZE(80) RECFM(F)ALLOC DDNAME(OUTPUT) DSNAME(*)ALLOCDDNAME(INPUT)DSNAME(*).ALLOCDDNAME(OUTFIL)DSNAME(&FILE.)USING(FIL) CALL ULOADFREEALL# T$PROGRAM UPLOAD(INPUT,OUTPUT,OUTFIL); E(*******************************************************************)C(*THISPROGRAMREADSPACKEDBLOCKSFROMTHETERMINAL,SEPARATES*)?(*INDIVUDUALRECORDSANDWRITESTHEMTOANOUTPUTFILE.THE*)+(*PROGRAMRUNSONANIBM370UNDERTSO.*)E(*******************************************************************) !CONSTCMAX=80;(*BLOCKSIZE*)%RMAX=80;(*MAXIMUMRECORDSIZE*)5BLKCNT=1;(*NUMBEROFBLOCKSUNDERONECHECKSUM*)+BMAX=80;(*BUFFERSIZE=BLKCNT*CMAX*)/OPTION='BB';(*COM/CHARPROTOCOLOPTIONS*),CHRMAX=255;(*MAXIMUMCHARACTERVALUE*) TYPECINDEX=0..255;$RECTYPE=ARRAY(.1..RMAX.)OFCHAR;*BFTYPE=PACKEDARRAY(.1..BMAX.)OFCHAR;BFINDEX=INTEGER;*BKTYPE=PACKEDARRAY(.1..CMAX.)OFCHAR; VARQ:BOOLEAN; OUTFIL:TEXT;(*OUTPUTFILE*)DASCII:PACKEDARRAY(.CHAR.)OFCINDEX;(*ASCIICHARACTERCODES*)@ASHEX:PACKEDARRAY(.1..36.)OFCHAR;(*FORHEXCONVERSION*)Y^b)f7j0nENUM:PACKEDARRAY(.CHAR.)OFCINDEX;(*ACCII-DECIMALCONVERSION*))REC:RECTYPE;(*HOLDSOUTPUTRECORD*)1BUFFP:BFINDEX;(*INDEXINTOHOLDINGBUFFER*)$BUFF:BFTYPE;(*HOLDINGBUFFER*)3COUNT:INTEGER;(*HOLDSCHARCOUNTFORRECORD*)/RESPONSE:CHAR;(*HOLDSRESPONSECHARACTER*)4BCNT:INTEGER;(*NUMBEROFREPEATEDCHARACTERS*)&BCHR:CHAR;(*REPEATEDCHARACTER*) PROCEDUREINITIALIZE;0TYPECHRARRAY=PACKEDARRAY(.1..16.)OFCHAR;VARI:INTEGER; C:CHAR; 2PROCEDUREASGCODE(CODE:INTEGER;CHRSET:CHRARRAY);VARI:INTEGER;BEGIN(*ASGCODE*)FORI:=1TO16DO%ASCII(.CHRSET(.I.).):=CODE+I-1END;(*ASGCODE*) BEGIN(*INITIALIZE*)FORI:=0TOCHRMAXDOBEGIN9ASCII(.CHR(I).):=0;(*INDICATENON-ASCIICHARCTERS*)NUM(.CHR(I).):=0END;)INTERACTIVE(INPUT);(*#UNIQUETOIBM*)REWRITE(OUTFIL);1ASHEX:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';!ASGCODE(112,'pqrstuvwxyz{|}~');!ASGCODE(32,'!"#$%&''()*+,-./'); ASGCODE(48,'0123456789:;<=>?'); ASGCODE(64,'@ABCDEFGHIJKLMNO'); ASGCODE(80,'PQRSTUVWXYZ[\]^_'); ASGCODE(96,'`abcdefghijklmno'); <(*#THEFOLLOWINGSTATEMENTWASREQUIREDTOALLOWUPLOADINGOF'~'TOIBM*) ASCII(.CHR(95).):=126; FORI:=1TO36DONUM(.ASHEX(.I.).):=I-1;NUM(.''.):=0;BUFFP:=BLKCNT*CMAX+1;BUFF(.3.):='A';/WRITE(OUTPUT,'PREAMBLEU');(*SENDPREAMBLE*)(WRITE(OUTPUT,OPTION);(*SENDOPTION*),WRITE(OUTPUT,CMAX:3);(*SENDBLOCKSIZE*)1WRITELN(OUTPUT,BLKCNT:1);(*SENDBLOCKCOUNT*)RESPONSE:='';END;(*INITIALIZE*)  .PROCEDURE GETREC(VAR Q:BOOLEAN; VAR P:BFINDEX;6VARBUFF:BFTYPE;VARREC:RECTYPE;VARRESPONSE:CHAR); VARI,J:INTEGER;C1,C2:CHAR; GPROCEDUREGETFRAME(VARBUFF:BFTYPE;VARQ:BOOLEAN;VARRESPONSE:CHAR);  VARI:INTEGER; J:INTEGER; K:INTEGER;CKSUM1:INTEGER;CKSUM2:INTEGER;TBLOCK:BKTYPE; BEGIN(*GETFRAME*) IFBUFF(.3.)='Z'THEN Q:=TRUE; IFNOTQTHENREPEATI:=1;J:=1;IFRESPONSE<>'';THENWRITELN(OUTPUT,RESPONSE);(*RESPONDTOLASTFRAME*)WHILEJ<=BLKCNTDOBEGINREADLN(INPUT,TBLOCK); J:=J+1;FORK:=1TOCMAXDOBEGINBUFF(.I.):=TBLOCK(.K.); I:=I+1;END;IFBUFF(.1.)='T'THEN*J:=BLKCNT+1;(*FORCEDTERMINATION*)END;Q:=BUFF(.1.)='T'; IFNOTQTHENBEGINRESPONSE:='N';2CKSUM1:=16*NUM(.BUF# F(.1.).)+NUM(.BUFF(.2.).);IFCKSUM1<>0THENBEGIN CKSUM2:=0;FORI:=3TOBLKCNT*CMAXDO%CKSUM2:=CKSUM2+ASCII(.BUFF(.I.).); CKSUM2:=(CKSUM2MOD255)+1;IFCKSUM1<>CKSUM2THENRESPONSE:='R'(*NAK*)END;(*THEN*) END(*THEN*)UNTIL(RESPONSE='N')OR(Q)END;(*GETFRAME*)  ;PROCEDUREGETC(VARC:CHAR;VARBUFF:BFTYPE;VARP:BFINDEX;VARQ:BOOLEAN); BEGIN(*GETC*)IFP<=BLKCNT*CMAXTHENBEGINC:=BUFF(.P.); P:=P+1ENDELSEBEGINGETFRAME(BUFF,Q,RESPONSE);C:=BUFF(.4.);P:=5ENDEND;(*GETC*)  BEGIN(*GETREC*)2GETC(C1,BUFF,P,Q);(*DIGIT#1OFLENGTHFIELD*)2GETC(C2,BUFF,P,Q);(*DIGIT#2OFLENGTHFIELD*)IFC1=''THENQ:=TRUE; IFNOTQTHENBEGIN#COUNT:=NUM(.C1.)*16+NUM(.C2.);J:=1;I:=1;WHILEI<=COUNTDOBEGINGETC(REC(.J.),BUFF,P,Q);IFREC(.J.)='|'THENBEGIN4GETC(BCHR,BUFF,P,Q);(*GETCOMPRESSEDCHARACTER*)(GETC(C1,BUFF,P,Q);(*GETCOUNTCODE*)8BCNT:=NUM(.C1.);(*COUNTOFCOMPRESSEDCHARACTERS*)WHILEBCNT>0DOBEGIN5REC(.J.):=BCHR;(*EXPANDCOMPRESSEDCHARACTERS*)BCNT:=BCNT-1; J:=J+1END;%I:=I+3(*ADVANCEGETCOUNTER*) END(*THEN*)ELSEBEGIN&I:=I+1;(*ADVANCEGETCOUNTER*)&J:=J+1;(*ADVANCEPUTPOINTER*) END(*ELSE*)END;(*WHILE*)COUNT:=J-1;END(*THEN*)END;(*GETREC*)  5PROCEDURE PUTREC(VAR COUNT:INTEGER; VAR REC:RECTYPE); VARI:INTEGER; BEGIN(*PUTREC*)I:=1;WHILEI<=COUNTDOBEGINWRITE(OUTFIL,REC(.I.)); I:=I+1END;WRITELN(OUTFIL);END;(*PUTREC*) BEGIN(*MAIN*) INITIALIZE; Q := FALSE;"GETREC(Q,BUFFP,BUFF,REC,RESPONSE);WHILE NOT Q DOBEGINPUTREC(COUNT,REC);#GETREC(Q,BUFFP,BUFF,REC,RESPONSE);END;,WRITELN(OUTPUT,'T')(*TERMINATEWITH'T'*)END.(*MAIN*)'EXORMACSLOADMMU AF~~bbLOADMMU SA kbbLOADMMU RObbVECTORS AFbbVECTTBL AGbbVECTORS SAbbVECTORS RObbRMS CDRbbRMS CIbbRMS LG mbbVECTTBL RObb=/*=/*EXORMACS.LOADMMU.AF=/*.=/* Chain file to assemble EXORMACS.LOADMMU.SA=/*:=/* If no output argument is specified for the listing the2=/* chain file will default to EXORMACS.LOADMMU.LS=/*=/IFC \1=ARGEXORMACS.LOADMMU.LS=/ENDIF=/*6=ASM EXORMACS.LOADMMU.SA,EXORMACS.LOADMMU.RO,\1;RZ=050=/*{ Included files are:=/*9995.&.STR.EQ=/*9995.&.TCB.EQ=/*9995.&.TST.EQ=/*}=/*=END$ vPAGE**INCLUDEFILES**INCLUDE9995.&.STR.EQ*INCLUDE9995.&.TCB.EQ*INCLUDE9995.&.TST.EQ*NOLISTINCLUDE9995.&.STR.EQINCLUDE9995.&.TCB.EQINCLUDE9995.&.TST.EQLISTPAGELOADMMUIDNT2,0LOADMMU*$*COPYRIGHTED1980BYMOTOROLA,INC.************************LOADMMU2.00***HLD609/18/80***HLD603/30/81************************LOADMMUSUBROUTINE**REGISTERUSAGE:01234567 *D*********A***ENTRY:A5POINTSTOTST*SECTIONLEVEL00* XDEFCRASN XDEFDEASN XDEFLOADMMUXDEFLOADMMUIXDEFMMUFAULT XDEFUNLDMMU XREF.SMMUHEREXREF.SMMULOADXREF.STRACERXREF.STRACFLAG*,LOADMMUMOVE.WSR,-(A7)SAVESTATUSREGISTER)LOADMMUIOR.W#$700,SRINHIBITINTERRUPTS.MOVEM.LTSTMMU(A5),D0-D7SEGMENTDESCRIPTIONS/MOVE.LA5,MMULOADSAVEADDRESSOFCURRENTLOAD!MOVE.LMMUHERE,A5ADDRESSOFMMUMOVEM.LD0-D7,(A5)LOADMMU*/BTST#TRCFMMU,TRACFLAGSHOULDENTRYBETRACED?BEQ.SLOADMMUZBRANCHIFNOBSRTRACERBUILDTRACEENTRYDC.W$DD08TRACECODELOADMMUZRTERETURNPAGE*;*ThisroutinewillunloadasegmentfromtheEXORMACSMMU.D*ThesegmenttounloadispointedtobyacombinationofA5andD5.C*A5pointstotheTSTcontainingthesegment,andD5pointstothe?*specificsegmentwithintheTST.TheTSTCTLfieldwithinthisA*segmententryshouldbesettozerobeforecallingthismodule.B*ThistellstheEXORMACSMMUthatthatsegmentisnolongervalid=*(ifTSTCTL(bit_0)=0),andthereforewehavesuccessfully'*"unloaded"thatsegmentfromtheMMU.*A*Thisroutineiscalledfromtwodirectives,SEGDEALandTFRSEG.A*BasicallyitjustcallsLOADMMUtomvethenewsegmentmapinto=*theEXORMACSMMU.However,thereisonecomplication.Since?*SEGDEALcandeleteasegmentfromatargettasksTST,wemust@*verifythattherequestingtaskisalsothetargettaskbefore=*callingLOADMMU.Ifwedidn'tdothischeckwewouldarriveJ"$ ?*atthesituationwherewereturntotherequestingtask,with6*theMMUcontainingtheloadmapforthetargettask.*2*Hereisthealgorithmforperformingthischeck: -*if(tcb_tst(client_task)=target_tst_ptr)&*thencallload_mmu(target_tst_ptr); UNLDMMU::CMP.LTCBTST(A6),A5DoesA5pointtotherequestor'sTST?IFTHEN.SBranchifno. 'MOVEM.LD0-D7/A5,-(A7)Saveregisters.5BSR.SLOADMMULoadthenewsegmentmapintotheMMU.*MOVEM.L(A7)+,D0-D7/A5Restoreregisters. ENDI RTSReturn.PAGE*J*Dummyentrypoints--ourMMUisn'tanM68451,butotherexecroutinesareK*goingtobecallingusattheseentrypointsbecausetheydon'tknowwhat *wehave.*CRASN:DEASN: MMUFAULT: &RTSJustreturn--he'llneverknow....   END41LOADMMU ASYST'EXORMACSLOADMMU SA"2LOAD MMU2BLOADMMU BLOADMMUI BMMUFAULT :pMMULOAD BUNLDMMU (BCRASN :BDEASN :pTRACER pTRACFLAG pMMUHERE ",5*Therearetwospecialvaluesfor:,*0=COMINT(thecommoninterrupthandler).(*1=don'ttakeoverthevectoratall.E*Entriesinthevectortablemustbeassignedinorder--thatis,theB*vector#'sintheVECTORinvocationsmustbeinascendingorder.59(H*InthecasewheretwocontiguousVECTORinvocationsleaveagapintheK*vector#'s,thosevector#'sinthegapwillbeassignedthesamehandler9*asthatofthelowervector#ofthepair.Forexample,+*VECTOR$23,0Points$23to$27toCOMINT.-*VECTOR$28,1Leaves$28to$2Fastheyare.-*VECTOR$30,ROUTINE1Points$30toROUTINE1.G*Ifthegaptobefilledhasasecondparameterotherthan0or1,theJ*addressassignedtothevectorwillbeincrementedby2foreachvector:7*VECTOR$23,XPoints$23toX,$24toX+2,$25toX+4.$*VECTOR$26,0Points$26toCOMINT.'*Theendofthelistissignifiedbya*DC.L0F*andthesecondparameterofthelastpriorVECTORinvocationwillbeK*appliedtoallfurthervectors,upto$FF.Again,ifthesecondparameterK*wasnota0or1,theaddressassignedtothevectorswillbeincremented#*by2foreachvectorinsequence.* VECTORMACROIFLE\1-VECT_NUM0FAIL499Vector#'smustbeinascendingorder!MEXITENDCIFNC'\2','0'IFNC'\2','1'XREF\2ENDCENDCVECT_NUMSET\1DC.L\1<<24+\2ENDM  * *Firstsetupthetableheader.*SECTIONLEVEL00  0DC.L'!VCT'Dumpeyecatcherfor'VeCtorTable.'2DC.LCOMINTPuttheaddressofCOMINTheresothe"*execinitializercanfindit;he#*isn'tlinkedwiththeexec,sohe*wouldn'tknowotherwise.PAGE*)*Herearetheactualvectorassignments.I*NoticethatwhetherornottheillegalinstructionvectoristakenoverE*byRMS68Kiscontrolledbyansysgenparameter.DuringRMSGEN,this$*parameterissubstitutedsuchthatA*0=theexecshouldleavetheillegalinstructionvectoralone.?*1=theexecshouldtakeovertheillegalinstructionvector.J*YoumightwanttheexectoleavetheillegalinstructionvectoraloneifI*youwanttousetheROMdebugger,sinceitusesillegalinstructionsas*breakpoints.* 8VECT_NUMSET1Initializethevectornumberto1sothat&*thelowestvectornumberthatcanbe*setafterwardsis2.7*VECTOR$00,CALLKILLSHOULDNEVERGETHEREthiswasin>*VECTOR$01,CALLKILLSHOULDNEVERGETHERE4.2exormacsvectt*VECTOR$02,PROGINT2Buserror.#VECTOR$03,PROGINT3Addresserror.$*Ifwe'renotsupposedtotakeover/IFEQ\ILLINSTRtheillegalinstructionvector,9VECTOR$04,1leavetheillegalinstructionvectoralone.ENDC*!*Ifwearesupposedtotakeover/IFNE\ILLINSTRtheillegalinstructionvector,>VECTOR$04,PROGINT4takeovertheillegalinstructionvector.ENDC*#VECTOR$05,PROGINT5Divisionby0.+*insequence$06,PROGINT6CHKinstruction.-*insequence$07,PROGINT7TRAPVinstruction./*insequence$08,PROGINT8Privilegeviolation.'VECTOR$09,PROGINT9Instructiontrace.8VECTOR$0A,PROGINTAReservedinstructionopcodes$AXXX.>*insequence$0B,PROGINTBReservedinstructionopcodes$FXXX.'VECTOR$0C,0($0C-$0EgotoCOMINT.)+VECTOR$0F,KILLERUninitializedInterrupt.'VECTOR$10,0($10-$17gotoCOMINT.)'VECTOR$18,SPURINTSpuriousinterrupt.'VECTOR$19,0($19-$1CgotoCOMINT.)'VECTOR$1D,0($1D-$1FgotoCOMINT.)VECTOR$20,TRAP0TRAP#0.VECTOR$21,TRAP1TRAP#1.#VECTOR$22,TRPVCT2TRAP#2to#15.'V& ECTOR$30,0($30-$8BgotoCOMINT.))VECTOR$8C,TIMEINTM6840timeinterrupt.!VECTOR$8D,0($8Dgotocomint.)8VECTOR$8E,1Softwareabortvector(leaveitpointingto*BUG) VECTOR$8F,0'VECTOR$95,0($95-$FFgotoCOMINT.)!DC.L0(Endoftableindicator.)ENDPAGE"VECTORSIDNT1,0INTERRUPTVECTORS*VECTORTABLEINLOWMEMORY*ORG03ILLINSTREQU0SETFORILLEGALINSTRUCTIONVECTOR4%*0=RMSWILLLEAVETHEVECTORALONE'*1=RMSWILLTAKECONTROLOFVECTOR4**INITSTRTEQU$0* XREFSYSPAR #DC.LSYSPARSTACKPOINTERONRESETDC.LINITSTRTDC.L0DC.L0 XREFPROGINT4 &DC.LPROGINT4SV4ILLEGALINSTRUCTIONDC.L0DC.L0DC.L0DC.L0DC.L$FE8808TRACETRAPEND=1VECTORS ASYST'EXORMACSVECTORS SA"INTERRUPT VECTORS 2pPROGINT4 pSYSPAR (*3((4& '***************************************'* Sysgen command file EXORMACS.RMS.CD *'***************************************SYSTEM="EXORMACS"*E*IndicatewhetherornotyouwillhaveanMMUinthesystem.YoumayF*tellthesystemthereisnoMMUevenifoneisphysicallyinstalled;*itjustwon'teverbeused.*MMU=10=noMMU;1=MMU.*C*SelecttheappropriateLOADMMUmoduletobeincludedintheLINK.* IFEQ \MMU.=COPYNOMMU.LOADMMU.RO,EXORMACS.XLOADMMU.RO;YENDC IFNE \MMU1=COPYEXORMACS.LOADMMU.RO,EXORMACS.XLOADMMU.RO;YENDC*%* Assemble SYSPAR (System Parameters)*INCLUDEC4O9.SYSPAR.CI*:*DefineRMS'sstartingaddress.Passstartingaddressand?* stack address to VERSAdos sysgen through file EXORMACS.RMS.CI*%RMS=$0AddresswhereRMS68Kstarts.SUBS&.RMSEXM.CI$=COPY&.XRMSEXM.CI,EXORMACS.RMS.CI;Y*C*NowindicatewhetherornottheexecshouldtakeovertheillegalC*instructionvector.IfyouaregoingtobeusingtheROMdebuggerE*tosetbreakpoints,thenyou'llwanttheillegalinstructionvectorB*leftasthedebuggerhasitset.InanenvironmentwheretheROMB*debuggerwillnotbeused,youwillwantRMS68Ktofieldillegal*instructionsasexceptions.*-ILLINSTR=1Illegalinstructionvectorflag:"*0=RMSshouldnottakeitover.*1=RMSshouldtakeitover.**'*NowcreateaVECTTBLforthissystem.*SUBSEXORMACS.VECTTBL.AGDASMEXORMACS.VECTTBL.AG,EXORMACS.VECTTBL.RO,EXORMACS.VECTTBL.TF;Z=50*)* Now we generate the RMS68K load module.* Now link it all together.* RMS0LO=\RMSRMS0HI=\RMS+$BFFRMS2LO=\RMS+$C00*SUBSEXORMACS.RMS.LGLINKEXORMACS.RMS.LG=DEL&.SYSPAR.RO*!* Create one concatenated listing*+=COPYEXORMACS.VECTTBL.TF,EXORMACS.RMS.LL;A&=COPYC4O9.SYSPAR.TF,EXORMACS.RMS.LL;A** Cleanup junk files* =DEL*.*.TF;Y*0* The following files are created by this RMSgen**C4O9.SYSPAR.RO$*&.SYSPAR.ROcopyofC4O9.SYSPAR.RO*EXORMACS.RMS.LOI *EXORMACS.RMS.LL*EXORMACS.RMS.CI**&.XSYSPAR.AG*&.XRMSEXM.CI*EXORMACS.XVECTTBL.AG*EXORMACS.VECTTBL.RO*EXORMACS.XRMS.LG*END' * *&.RMSEXM.CI*EXORMACS.RMS.CI*B******************************************************************0*RMSsysgenincludefileforVERSAdossysgen.*B*******************************************************************7* This file is created at RMSgen time to be included in*theVERSAdossysgen.*PC=$0 STACK=$900STARTRMS=$0+$C00 ROMSADDR=$0MMU=$1=/*=/*EXORMACS.RMS.LG=/*$=/* RMS link chain file for EXORmacs=/*E=/*Note:ModuleLOADMMUinthiscatalogusestheMMUontheEXORMACSD=/*processorboard.IfyouwanttogenerateasystemwhichpretendsD=/*thatthereisnoMMU,changet' heINstatementinthislinkchainH=/*filetobringinEXORMACS.FAKEMMU.ROinsteadofEXORMACS.LOADMMU.RO.=/*6=LINK ,EXORMACS.RMS.LO,EXORMACS.RMS.LL;H,M,I,X,-U,Z=40SEGRMS0:0\RMS0LO,\RMS0HISEGRMS2:2,3,4,5,6,7,15\RMS2LOINPUT EXORMACS.VECTORS.ROIN&.SYSPAR.ROINM68XXX.RMS.ROINEXORMACS.VECTTBL.ROINM68XXX.AKRQST.ROINM68XXX.ASQALOC.ROINM68XXX.ASQEVENT.ROINM68XXX.ASQFREE.ROINM68XXX.ASQGET.ROINM68XXX.ASQREAD.ROINM68XXX.ASQSTATS.ROINM68XXX.ASRINT.ROINM68XXX.ATSEM.ROINM68XXX.BKG.ROINNOCACHE.CACHE.ROINM68XXX.CDIR.ROINM68XXX.CISR.ROINM68XXX.CKDELAY.ROINM68XXX.CKEXPAT.ROINM68XXX.CMR.ROINM68000.COMINT.ROINM68XXX.DCLSHAR.ROINM68XXX.DELAY.ROINM68XXX.DEMON.ROINM68XXX.DERQST.ROINM68XXX.DESEM.ROINM68000.DISPATCH.ROINM68XXX.DSEGX.ROINM68XXX.DSEMX.ROINM68XXX.DSERVE.ROINM68XXX.DSRVX.ROINM68XXX.EQDQ.ROINM68XXX.EXABRT.ROINM68000.EXCEPT.ROINM68000.EXIT.ROINM68XXX.EXMMSK.ROINM68XXX.EXMON.ROINM68XXX.EXMONVR.ROINM68XXX.EXQEVENT.ROINM68XXX.EXRQPA.ROINM68XXX.FNDGSEG.ROINM68XXX.FNDTSEG.ROINM68XXX.FNDUSEM.ROINM68XXX.GETTCB.ROINM68XXX.GTDTIM.ROINM68XXX.GTTASKID.ROINM68XXX.GTTNAME.ROINM68XXX.KILLER.ROINEXORMACS.XLOADMMU.ROINM68XXX.LOGPHY.ROINM68XXX.PAGEALOC.ROINM68XXX.PAGEFREE.ROINM68XXX.PAUSE.ROINM68XXX.POWRFAIL.ROINM68XXX.PSTATE.ROINM68000.PVSEM.ROINM68XXX.RCVSA.ROINM6840.RDTIMER.ROINM68XXX.READY.ROINM68XXX.RELINQ.ROINM68XXX.RESUME.ROINM68XXX.REXMON.ROINM68XXX.RQSTPA.ROINM68XXX.RSTATE.ROINM68XXX.RTEVENT.ROINM68XXX.SEGALOC.ROINM68XXX.SEGDEAL.ROINM68XXX.SEGSHAR.ROINM68XXX.SELFTEST.ROINM68XXX.SERVE.ROINM68XXX.SETPRI.ROINM68XXX.SGSEM.ROUINM68000.SINT.ROINM68XXX.SNAPTRAC.ROINM68XXX.SPURINT.ROINM68XXX.STDTIM.ROINM68000.SUPER.ROINM68XXX.SUSPEND.ROINM68XXX.TERM.ROINM68XXX.TFRSEG.ROINM6840.TIMEINT.ROINM68XXX.TRACER.ROINM68000.TRAP0.ROINM68000.TRAP1.ROINM68XXX.TSKATTR.ROINM68XXX.TSKBORN.ROINM68XXX.TSKINFO.ROINM68XXX.TSKMOVE.ROINM68XXX.TSKSTART.ROINM68XXX.TSKWAIT.ROINM68XXX.USERVECT.ROINM68XXX.WAKEUP.ROINM68XXX.WTEVENT.ROINPUTM68XXX.RMSPATCH.ROEND=/*=END( P1VECTTBL ASYST'EXORMACSXVECTTBLAG"GERMS68K vector table for the EXORMACS2pPROGINT2 pPROGINT3 pPROGINT4 pPROGINT5 pPROGINT9 pPROGINTA pTIMEINT pSPURINT pTRAP0 pTRAP1 pKILLER pCOMINT pTRPVCT2 "`v3?!VCT(,,,,, , ,,, ,!,"0, 34'M146818 RDTIMER AF  bbRDTIMER SA7bbRDTIMER RObbTIMEINT AF((bbTIMEINT SA11IbbTIMEINT RO::bbSTDTIM ROCCbbTRACER ROLLbb=/*=/*M146818.RDTIMER.AF=/*@=/* Chain file to assemble file for M146818 Real Time Clock chip=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to M146818.RDTIMER.LS=/*=/IFC \1=ARGM146818.RDTIMER.LS=/ENDIF=/*4=ASM M146818.RDTIMER.SA,M146818.RDTIMER.RO,\1;RZ=040=/*{ Included files are:=/*9995.&.STR.EQ=/*9995.&.INTERRUP.MC=/*}=/*=END( PAGE**INCLUDEFILES**INCLUDE9995.&.STR.EQ*INCLUDE9995.&.INTERRUP.MCNOLISTINCLUDE9995.&.STR.EQINCLUDE9995.&.INTERRUP.MCLISTPAGE@RDTIMERIDNT5,0READTIMERroutineforM146818realtimeclock.*$*COPYRIGHTED1980BYMOTOROLA,INC.************************RDTIMER1.00******HLD609/30/80***SFF501/18/83***********************,*READTIMER-RETURNTIMERVALUE(MS)IND1*TIMERVALUE(US)IND0*SECTIONLEVEL00* XDEFRDTIMER XDEFSBRDTIM  **SYSPARparameters* XREF.SNSEXREF.SMIDNIGHTXREF.STIME_LEFTXREF.STIMINTV4XREF.STINTFLAGPAGESBRDTIM:RDTIMER:'MOVE.WSR,-(A7)Valuetouseinunmask/MOVE.L#1000,D01000-TIMINTV4=microsecondsDISABLE_INTERRUPTS %MOVE.LNSE,D1NextsignificanteventSUB.LTIME_LEFT,D10SUB.LMIDNIGHT,D1D1=currentmspastmidnight#BCLR#31,D1InsurepositivenumberSUB.WTIMINTV4,D0MICROSECONDS MOVE.W(A7)+,SRRTSEND8[1RDTIMER ASYST'M146818 RDTIMER SA"READ TIMER routine for M146818 real time clock.[2pNSE BRDTIMER pTIME_LEF pTIMINTV4 BSBRDTIM pMIDNIGHT pTINTFLAG "$*3Q@ <|"8   x FNu4) =/*=/*M146818.TIMEINT.AF=/*7=/* Chain file to assemble M146818.TIMEINT.SA for 68010=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to M146818.TIMEINT.LS=/*=/IFC \1=ARGM146818.TIMEINT.LS=/ENDIF=/*F=ASM M68010.M68010.SA/M146818.TIMEINT.SA,M146818.TIMEINT.RO,\1;MRZ=060=/*{ Included files are:=/*9995.&.STR.EQ=/*9999.M146818.M146818.EQ=/*9995.&.BAB.EQ=/*9995.&.PAT.EQ=/*9995.&.TR1RTCD.EQ=/*9995.&.INTERRUP.MC=/*M68XXX.TIMEINT.AI=/*}=/*=END)  PAGE**INCLUDEFILES**INCLUDE9995.&.STR.EQ!*INCLUDE9999.M146818.M146818.EQ*INCLUDE9995.&.BAB.EQ*INCLUDE9995.&.PAT.EQ*INCLUDE9995.&.TR1RTCD.EQ*INCLUDE9995.&.INTERRUP.MC*NOLISTINCLUDE9995.&.STR.EQ INCLUDE9999.M146818.M146818.EQINCLUDE9995.&.BAB.EQINCLUDE9995.&.PAT.EQINCLUDE9995.&.TR1RTCD.EQINCLUDE9995.&.INTERRUP.MCLIST?TIMEINTIDNT5,1TIMERINTERRUPTHANDLERFORM146818CLOCKCHIP*$*COPYRIGHTED1983BYMOTOROLA,INC.*.*TIMERINTERRUPT-OCCURSONCEEACH15.625MS**01/18/83(SFF5)*04/07/83(7616)*:*08/15/83SteveFranck--ChangedtoexitthroughCOMINT.*SECTIONLEVEL00* XDEFTIMEINT XREF.SDATEXREF.SPATBEGXREF.SPREEMPT_FLAGXREF.SPTMADDRXREF.STIME_LEFTXREF.STIMESLICXREF.STIMEOUTXREF.STIMINTVXREF.STIMINTV4XREF.STINTFLAGXREF.STRACERXREF.STRACFLAG XREFBKG_SCHEDULE XREFCKDELAY XREFCKEXPAXREFPAT_RM_1ST_NODE**0TIMEINTMOVEM.LD0-D1/A0-A1,-(A7)SAVEREGISTERS MOVE.LPTMADDR,A0TIMERADDRESS6MOVE.BREGC(A0),D0READREGCTOCLEARTIMERINTERRUPT CLR.WD04MOVE.L#15,D1AmountoftimetodecrementTIME_LEFT-MOVE.WSR,-(A7)ValuetouseinunmasklaterDISABLE_INTERRUPTSMask.SUB.W#625,TIMINTV4625usecHAVEALSOPASSEDIFTHEN.SADD.L#1,D1Addtheextrams"ADD.W#1000,D0andResetuscountENDI !ADD.WD0,TIMINTV4Resetuscount.SUB.LD1,TIME_LEFTDoweneedtofireanode?MOVE.W(A7)+,SRUnmask+TST.LTIME_LEFTDoweneedtofireanode?+*INCLUDEM68XXX.TIMEINT.AIYes-sodoit.INCLUDEM68XXX.TIMEINT.AIEND)JZ1TIMEINT ASYST'M146818 TIMEINT SA"3TIMER INTERRUPT HANDLER FOR M146818 CLOCK CHIP2pPTMADDR pPREEMPT_ pPERTURB_ pCOMINT_P pDATE pTIMESLIC BTIMEINT pTIMEOUT pTIME_LEF pTIMINTV pTIMINTV4 pPAT_RM_1 pCKEXPA pTRACER pPATBEG pTRACFLAG pBKG_SCHE pTINTFLAG pCKDELAY "F3H x (B@r@|xq nR@x  FJ n"x AC@A)AAB@A\A[f3UUUUA<@A@A(AV@ A#A2A%@ ARAACAAIA9A?A" APf3UUUU@AH@$A'+ @8A8AAFA:AUAYAASAAAAXALALf3UUUU@ A/@ AJ@ AE@ A3@ A0A4ALALALAL@A=A,A;A7ALALf3UUUUAL@AAGAA@A$ALA-A+ A5 AQ AK AOALAL@ADR3T@A.@A&A18 TgaB*j.)g".g~aBWP@kN @,bDGR3 H$3g2*HE, n6aB^$`Nq`BM(FgAaB``BN*HN I3P`BL$x @$ g@D@jnS@ EJg4*f"f-W8BnH>3$?Hz @$jN0.HfB0gB! @fAaB `B4cK1COMINT ASREL'M68XXX COMINT SA!EH(68000 common interrupt handler.2pLOADMMU pLOADMMUI pPTMADDR pMMULOAD pPREEMPT pPREEMPT_ BCOMINTZ pPERTURB_ pIOVCTBGN pVCTUBGN BCOMINT_P ,pSBWAKEUP pSBQEVNTI pTRACER pKILLER BCOMINT pRUNNER BISRERR BISRRTE pBKG_FLAG pBKG_HEAD +2pTRACFLAG pBKG_DISP BCOMNISR f"JL3$  8 !gaA`*_aA _N`L\|Jx fNsj?_f aA"J8 fJ3"@Ns?_'f/,x H?L NiH8`A@8 !gaA HNi/ /9L3 ( oF,hHV/(@@?"h 0P*n6`BZ fr\,_( !TCBgaB@L3J@gJ @f AaB.`: @f2Jf&HC4<HBAaBNq`HBHA(&L3@64< HB4`&T(,_" !TCBgaBC=C^AaBJ@g$< 3HCHD6`4l<1DISPATCH ASREL'M68XXX DISPATCHSA!FV(68000 DISPATCHER2pLOADMMU pREADYHD BPREEMPT pPREEMPT_ pPERTURB_ pTIMESLIC pSBREADY pTIMEOUT pTERM pTRACER pKILLER pRUNNER BDISPATCH pTRACFLAG pEXCSTACK pBKG_DISP pSBEXABRT BL1_D0_SA pSBLOGPHY "I3(-@L NiH8AaA.x |M!|"N ) g,@.,f#n H3 -! /.D/.@Q 1  p.-fh|*n6aA n*8 "]Nh, n6aB'`Nq`"(F CN`&8 "UC _8߿f/?,/<<`L3$B m n _-_-_/.)g".g a nBJfB \3!RAnC  1pfBaB&`BJFfBAaB$ Hz`B P` )R`BtI3~$.ffffNL?,_`z,. n6aB'B`Nq`&~ F&(.O3 "f Ȯg-C`"RȮggBRn .nbB~aN`B.F3 /,x g0/ f(.)g .8g,_"P Ns,_L3$"/8 #NuaB$< 4.&.(.8L<AaB`)Lt3@-@&Nu ,X`B `4~=1EXIT ASREL'M68XXX EXIT SA!P@(68000 EXIT MODULE2BEXIT_TER 2pPREEMPT pPREEMPT_ pPERTURB_ BEXIT_POS .BEXIT_ERR BEXIT_TRA BEXIT_ASR .BEXIT_SUB BEXIT_EXC pRUNNER BERROR_01 BBERROR_02 FBERROR_03 , JBERROR_04 NBERROR_05 RBERROR_06 VBERROR_07 Z2BERROR_08 ^BERROR_09 bBERROR_10 fBERROR_11 jBERROR_12 nBERROR_13 rBERROR_14 vBERROR_15 zBERROR_16 ~pDISPATCH BEXIT_D0A 2BEXIT_D0S pEXCSTACK pBKG_DISP pL1_D0_SA "L3R .`p|Jx f L?,_NsjAaAJ8 g`ABL NiH8`H3Ap`Np`Jp`Fp`Bp`>p`:p`6p`2p `.p `*p `&p `"p `p`p`p:3@`=@=|G` H@0<.H@ x QY.H|`V4K1PVSEM ASREL'M68XXX PVSEM SA!QA(68000 TRAP 0--SEMAPHORE ROUTINE2BPSEM pSBREADY BVSEM BSBP BSVXSTAK VBSBV pKILLER BPSWAIT 2pDISPATCH pEXCSTACK "J3@|Jk0H@S@0kFNua:U.raFAaA`A ,B (F3f!NNu*@ - f+N NuH .&|&-HtNl-L< 8 K I3 Pn@rIHd8`(QL0NuaBX@|Jk0H@R@o0,3FNu/ "h!i 0B  ,"_FNu4- V1SINT ASREL'M68XXX SINT SA!R (68000 DIRECTIVE--SIMULATE INTERRUPT TO ISRW2pVCTUBGN pEXIT_SUB ESINT pTRACER pERROR_09 pERROR_14 pTRACFLAG %ZK3@B,"x J1 oAB,g Co`A Hz@ B/?8!g'3BHaANs8!gaA`A4W1SUPER ASREL'M68XXX SUPER SA!S(M68000 DIRECTIVE--SWITCH TO SUPERVISOR MODEb2pLOADMMU pEXIT_SUB pRUNNER pPANEL FSUPER pERROR_01 pEXCSTACK pSBLOGPHY &VN3D . K{fAJnpg x (fA x U, z n6aA`Nq`A*FL 3N,x *n6aA`A4- L1TRAP0 ASREL'M68XXX TRAP0 SA!T#(68000 TRAP #0 handler and table.2pKILLERT0 pPSEM pEXQEVNTI pEXQEVNTN pEXQEVNTT pVSEM pCALL_GUA pRDTIMER BTRAP0 PHI_DIR_N %pWAKEUPX pLOGPHY BTABLE0 JpKILLER pGETTCB pGTXTCB pEXRQPA pTCBCR pPAUSE pREADY pPAGEFREE pBKG_SCHE =2pFNDGSEG pFNDTSEG pPAGEALOC pFNDUSEM pLOGPHYO "H3@ fNsT %bAЀ0;2N./ %bҁ2;A(f @g~3T"NuAAAA!A&A"AA%AA$AAA'AA AAAAAAAAAAAA(A,3AAAAAAAA#A4'M68010 M68010 SAbbTRAP1 AFbbTRAP1 RObbCOMINT RObbDISPATCHRObbEXCEPT RObbEXIT RObbPVSEM RObbSINT RObbSUPER RObbTRAP0 RObb.  LLEN120* *Typeof68000-familyprocessor*$CHIPTYPEEQU68010Typeofprocessor=/*=/*M68010.TRAP1.AF=/*6=/* Chain file to assemble M68XXX.TRAP1.SA for a 68010=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68010.TRAP1.LS=/*=/IFC \1=ARGM68010.TRAP1.LS=/ENDIF=/*?=ASM M68010.M68010.SA/M68XXX.TRAP1.SA,M68010.TRAP1.RO,\1;RZ=075=/*{ Included files are:=/*9995.&.UTILITY.MC=/*9995.&.ENV.EQ=/*9995.&.STR.EQ=/*9995.&.TCB.EQ=/*9995.&.UDR.EQ=/*9995.&.TR1RTCD.EQ=/*}=/*=END. L1TRAP1 ASYST'M68XXX TRAP1 SA""A68010 TRAP #0 handler and table.2pSUSPEND pRTEVENT pCDIR pSBGETTCB pSEGSHAR pTSKWAIT pWTEVENT pASQEVENT pGTTASKID pASQSTATS pCMR pCISR pEXIT_POS pTSKINFO pEXIT_ERR pSBREADY pEXIT_SUB pTSKATTR pTSKSTART pSINT pTERM BTRAP1 2BTTB_01 :BTTE_01 @pGTDTIM pEXPVCT pCRTCB pATTSEG pTRACER pDEMON pDSERVE pEXMON pSTDTIM pATSEM pCRSEM pFLUSHC pABORT pDESEM pDESEMA pEXMMSK pRUNNER pAKRQST pTRPVCT pDELAY 2pDELAYW pDERQST pRCVSA pSERVER pTFRSEG pRELINQ pUDRBEG pISRRTE pMOVELL pRESUME pMOVEPL pSGSEM pRQSTPA pSUPER pSTOPT pWAKEUP pWTSEM pPSTATE pERROR_01 pERROR_02 pERROR_03 pREXMON pSETPRI 2pRSTATE pTERMT pASQREAD pTRACFLAG pASQALOC pGTTNAME pCKEXMON pGTEVENT pASQFREE pSEGALOC pSNAPTRAC pDCLSHAR pSEGDEAL pSBLOGPHY "pF3@?_'fD|/,x 6H?.)g.@k. @,b,(H$;,j g*@ !TCB^3!UUg`AN*NN `AA`:``ALALAZA]A>@A)AAB@A\A[f3UUUUA<@A@A(AV@ A#A2A%@ ARAACAAIA9A?A" APf3UUUU@AH@$A'@8A8AAFA:AUAYAASAAAAXALALf3UUUU@ A/@ AJ@ AE@ A3@ A0A4ALALALAL@A=A,A;A7ALALf3UUUUAL@AAGAA@A$ALA-A+ A5 AQ AK AOALAL@ADR3T@A.@A&A18 TgaB*j.)g".g~aBWP@kN @,bDGR3 H$3g2*HE, n6aB^$`Nq`BM(FgAaB``BN*HN I3P`BL$x @$ g@D@jnS@ EJg4*f"f-W8BnHB3 ??<Hz @$jN0.HfB0gB! @fAaB `B4K1COMINT ASREL'M68XXX COMINT SA!X(68010 common interrupt handler.2pLOADMMU pLOADMMUI pPTMADDR pMMULOAD pPREEMPT pPREEMPT_ BCOMINTZ pPERTURB_ pIOVCTBGN pVCTUBGN BCOMINT_P ,pSBWAKEUP pSBQEVNTI pTRACER pKILLER BCOMINT pRUNNER BISRERR BISRRTE pBKG_FLAG pBKG_HEAD +2pTRACFLAG pBKG_DISP BCOMNISR f"PL3$  8 !gaA`*_aA _N`L\|Jx fNsj?_f aA"J8 fJ3"@Ns?_'f/,x H?L NiH8`A@8 !gaA HNi/ /9I3( oF,hHV?</(@@?"h 0P*n6`BV fnP,_( !TCBgO3@ aB*8 "]Nh, n6aB'`Nq`"(F CN`&8 "UC _8߿f/F3?,/<<`B m n _-_-_/.)g".g a n^3IB.JfB( nC  1pfBaB&`B JFfBAaB$ Hz`B PM3` )R`B~$.ffffNL?,_`z,. n6aB'`I3Nq`&~ F&(.f Ȯg-C`"RȮggB|Rn .nbL3Bl~aN`Bd./,x g0/ f(.)g .8g,_"L3P Ns,_"/8 #NuaB$< 4.&.(.8L<AaB`)3)Lt-@&Nu ,X`B 4=1EXIT ASREL'M68XXX EXIT SA"(68010 EXIT MODULE2BEXIT_TER 2pPREEMPT pPREEMPT_ pPERTURB_ BEXIT_POS .BEXIT_ERR BEXIT_TRA BEXIT_ASR .BEXIT_SUB BEXIT_EXC pRUNNER BERROR_01 BBERROR_02 FBERROR_03 JBERROR_04 NBERROR_05 RBERROR_06 VBERROR_07 Z2BERROR_08 ^BERROR_09 bBERROR_10 fBERROR_11 jBERROR_12 nBERROR_13 rBERROR_14 vBERROR_15 zBERROR_16 ~pDISPATCH BEXIT_D0A 2BEXIT_D0S pEXCSTACK pBKG_DISP pL1_D0_SA "L3R .`p|Jx f L?,_NsjAaAJ8 g`ABL NiH8`H3Ap`Np`Jp`Fp`Bp`>p`:p`6p`2p `.p `*p `&p `"p `p`p`p:3@`=@=|G` H@0<.H@ x QY.H|`V4K1PVSEM ASREL'M68XXX PVSEM SA"(68010 TRAP 0--SEMAPHORE ROUTINE2BPSEM pSBREADY BVSEM BSBP BSVXSTAK VBSBV pKILLER BPSWAIT 2pDISPATCH pEXCSTACK "J3@|Jk0H@S@0kFNua:U.r0 aFAaA`A ,B (F3f!NNu*@ - f+N NuH .&|&-HtNl-L< 8 K I3 Pn@rIHd8`(QL0NuaBX@|Jk0H@R@o0,3FNu/ "h!i 0B  ,"_FNu4V1SINT ASREL'M68XXX SINT SA"@(68010 DIRECTIVE--SIMULATE INTERRUPT TO ISRW2pVCTUBGN pEXIT_SUB ESINT pTRACER pERROR_09 pERROR_14 pTRACFLAG %bJ3@B,"x J1 oAB,g Co`A ?<Hz @?< B/?03$$8!gaANs8!gaA`A40 W1SUPER ASREL'M68XXX SUPER SA"7(M68010 DIRECTIVE--SWITCH TO SUPERVISOR MODEb2pLOADMMU pEXIT_SUB pRUNNER pPANEL FSUPER pERROR_01 pEXCSTACK pSBLOGPHY &VN3D . K{fAJnpg x (fA x U, z n6aA`Nq`A*FL 3N,x *n6aA`A4 L1TRAP0 ASREL'M68XXX TRAP0 SA"C(68010 TRAP #0 handler and table.2pKILLERT0 pPSEM pEXQEVNTI pEXQEVNTN pEXQEVNTT pVSEM pCALL_GUA pRDTIMER BTRAP0 PHI_DIR_N %pWAKEUPX pLOGPHY BTABLE0 RpKILLER pGETTCB pGTXTCB pEXRQPA pTCBCR pPAUSE pREADY pPAGEFREE pBKG_SCHE =2pFNDGSEG pFNDTSEG pPAGEALOC pFNDUSEM pLOGPHYO "H3fNsT?o> %bAЀ0;2N./ %bҁ2;A(f v3 @gT"NuAAAA!A&A"AA%AA$AAA'AA AAAAAAAAA<3AAA(AAAAAAAAA#A41 'M68020 M68020 SA''bbEXCEPT RO00bb LLEN120* *Typeof68000-familyprocessor*$CHIPTYPEEQU68020Typeofprocessor1 Q1EXCEPT ASREL'M68XXX EXCEPT SA"$(68020 USER TRAP AND EXCEPTION HANDLER2pMMUFAULT pEXIT_TER pPREEMPT_ pTIAT BPROGINT2 pBPROGINT3 rBPROGINT4 tBPROGINT5 vBPROGINT6 xBPROGINT7 zBPROGINT8 |BPROGINT9 BPROGINTA ~BPROGINTB pEXIT_TRA pEXIT_EXC BBERR1 ppSVXSTAK pTTB_01 2pSBQEVNTN pTTE_01 pTRACER pKILLER pRUNNER pISRERR pERROR_03 BTRPVCT2 BTRPVCT3 pDISPATCH BTRPVCT4 pTRACFLAG BTRPVCT5 BTRPVCT6  BTRPVCT7 pEXCSTACK BTRPVCT8 BTRPVCT9 BCKEXMON 2pMACSTRC BTRPVCTA BTRPVCTB BTRPVCTC pSBEXABRT BTRPVCTD pMMUHERE BTRPVCTE BTRPVCTF pEQDQ pSBLOGPHY "NH3a aaaaaaaaaa a aaaaNq?/_'g/ gaA//NI3A ,y(H?8 !g @aATK`)La*8 "]Nh, n6I3@@aB'r`Nq`"(F CN`&8 "UC _8߿f/?,/<<`B m n  _-_R3-_/.)g".g a nBJfB nC  1pfBaB&V3I`BJFfBAaB$ Hz␟`B P` )R`B~$.fffI3fNL?,_`z,. n6aB'`Nq`&~ F&(.f Ȯg-CO3`"RȮggBbRn .nbBR~aN`BJ./,x g0/ I3f(.)g .8g,_"P Ns,_"/8 #NuaB$< 4.L3&.(.8L<AaB`)Lt-@&Nu ,X`B 4('M68230 RDTIMER AF==bbRDTIMER SAFF6bbRDTIMER ROOObbTIMEINT AFXXbbTIMEINT SAaa=bbTIMEINT ROjjbb=/*=/*M68230.RDTIMER.AF=/*,=/* Chain file to assemble M68230.RDTIMER.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68230.RDTIMER.LS=/*=/IFC \1=ARGM68230.RDTIMER.LS=/ENDIF=/*2=ASM M68230.RDTIMER.SA,M68230.RDTIMER.RO,\1;RZ=040=/*{ Included files are:=/*9995.&.STR.EQ=/*9995.&.INTERRUP.MC=/*}=/*=END2 5PAGE**INCLUDEFILES**INCLUDE9995.&.STR.EQ*INCLUDE9995.&.INTERRUP.MCNOLISTINCLUDE9995.&.STR.EQINCLUDE9995.&.INTERRUP.MCLISTPAGECRDTIMERIDNT1,0READTIMERroutineforM68230PITrealtimeclock.*$*COPYRIGHTED1980BYMOTOROLA,INC.************************RDTIMER1.00******SCB05/02/84***********************,*READTIMER-RETURNTIEMRVALUE(MS)IND1*TIMERVALUE(US)IND0*5* Currently code returns only the number of MS in D1.* D1 is returned as 0.*SECTIONLEVEL00* XDEFRDTIMER XDEFSBRDTIM ** SYSPAR parameters* XREF.SMIDNIGHT XREF.SNSEXREF.STIME_LEFTXREF.STINTFLAGPAGESBRDTIM:RDTIMER: CLR.LD0$MOVE.WSR,-(A7)ForlaterunmaskingDISABLE_INTERRUPTSMask MOVE.LNSE,D1SUB.LTIME_LEFT,D10SUB.LMIDNIGHT,D1D1=currentmspastmidnight#BCLR#31,D1Insurepositivenumber MOVE.W(A7)+,SRUnmaskRTSEND>7^1RDTIMER ASYST'M68230 RDTIMER SA"%VREAD TIMER routine for M68230 PIT real time clock.P2pNSE BRDTIMER pTIME_LEF BSBRDTIM pMIDNIGHT pTINTFLAG ""3@B@|"8   FNu42 G=/*=/*M68230.TIMEINT.AF=/*,=/* Chain file to assemble M68230.TIMEINT.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68230.TIMEINT.LS=/*=/IFC \1=ARGM68230.TIMEINT.LS=/ENDIF=/*D=ASM M68010.M68010.SA/M68230.TIMEINT.SA,M68230.TIMEINT.RO,\1;MRZ=060=/*{ Included files are:=/*9995.&.STR.EQ=/*9995.&.BAB.EQ=/*9995.&.PAT.EQ=/*9999.M68230.M68230.EQ=/*9995.&.TR1RTCD.EQ=/*9995.&.INTERRUP.MC=/*M68XXX.TIMEINT.AI=/*}=/*=END3 PPAGE**INCLUDEFILES**INCLUDE9995.&.STR.EQ*INCLUDE9995.&.BAB.EQ*INCLUDE9995.&.PAT.EQ*INCLUDE9999.M68230.M68230.EQ*INCLUDE9995.&.TR1RTCD.EQ*INCLUDE9995.&.INTERRUP.MC*NOLISTINCLUDE9995.&.STR.EQINCLUDE9995.&.BAB.EQINCLUDE9995.&.PAT.EQINCLUDE9999.M68230.M68230.EQINCLUDE9995.&.TR1RTCD.EQINCLUDE9995.&.INTERRUP.MCLISTPAGE>TIMEINTIDNT1,0TIMERINTERRUPTHANDLERFORM68230CLOCKCHIP*$*COPYRIGHTED1983BYMOTOROLA,INC.***TIMERINTERRUPT-OCCURSONCEEACH10MS*!*05/02/84--Clonedroutinefrom*M146818.TIMEINT.SA*SECTIONLEVEL00* XDEFTIMEINT XREF.SDATEXREF.SPATBEGXREF.SPREEMPT_FLAGXREF.SPTMADDRXREF.STIME_LEFTXREF.STIMEOUTXREF.STIMESLICXREF.STIMINTVXREF.STIMINTV4XREF.STINTFLAGXREF.STRACERXREF.STRACFLAG XREFBKG_SCHEDULE XREFCKDELAY XREFCKEXPAXREFPAT_RM_1ST_NODEPAGE**0TIMEINTMOVEM.LD0-D1/A0-A1,-(A7)SAVEREGISTERSMOVE.LPTMADDR,A0*MOVE.B#$01,TSR(A0)Cleartimerinterrupt0CLR.LD1D1.L<--timeintervalcorresondingto'MOVE.WTIMINTV,D1atickofthetimer..SUB.LD1,TIME_LEFTDowehaveanodetofire?1*INCLUDEM68XXX.TIMEINT.AIYessogoscheduleitINCLUDEM68XXX.TIMEINT.AIENDY>Y1TIMEINT ASYST'M68230 TIMEINT SA"&TIMER INTERRUPT HANDLER FOR M68230 CLOCK CHIP2pPTMADDR pPREEMPT_ pPERTURB_ pCOMINT_P pDATE pTIMESLIC BTIMEINT pTIMEOUT pTIME_LEF pTIMINTV pTIMINTV4 pPAT_RM_1 pCKEXPA pTRACER pPATBEG pTRACFLAG pBKG_SCHE pTINTFLAG pCKDELAY "J3RH x |4B28  n"x AC*whichcausesabuserrorwhichresultsintheloadingofthe,*samedescriptorastheoriginalbuserror.*6*TASKSWITHADDRESSSPACE0GETUNMAPPEDENTIRESPACE*?*TASKSWITHOTHERADDRESSSPACESGETONLYTHEIRASSIGNEDSPACE*0*PAGEFAULTISUSEDTOSWAPSEGMENTDESCRIPTORS*SECTIONLEVEL00 XDEFLOADMMUXDEFLOADMMUI XREFFLUSH_ON_CONTEXT_SWITCH XREF.SCURR_ASNXREF.SMMUHEREXREF.SMMULOADXREF.STRACERXREF.STRACFLAGAXREF.SLAST_MMU_INT_LEVELParameterwhichcontainstheinterrupt$*levelatwhichwegotthelastBus$*Errorwhichmighthavebeendueto *an6 unloadedsegmentdesciptor. **LOADMMU:.MOVE.BTSTASN(A5),D0Getaddressspacenumber*CMP.BCURR_ASN,D0IfsameascurrentASN,BEQ.SLOADEXITthenEXIT. PUSHSRSaveinterruptlevel!OR.W#$700,SRInhibitinterrupts/MOVE.LA5,MMULOADSaveaddressofcurrentloadMOVE.LMMUHERE,A5PointtoMMUMOVE.BD0,AST1(A5)Userdata MOVE.BD0,AST2(A5)Userprogram* *SAVETHEADDRESSSPACENUMBER.*MOVE.BD0,CURR_ASN **FLUSHTHEUSERCACHE.*R^9E@TBSRFLUSH_ON_CONTEXT_SWITCH **TEMPORARILYDISABLETRACING.*0*BTST#TRCFMMU,TRACFLAGShouldentrybetraced?*IFTHEN.S*BSRTRACERBuildtraceentry*DC.W$DD08Tracecode*ENDI (POPSRRestorepreviousinterruptlevel LOADEXIT: RTSReturnPAGE LOADMMUI:.MOVE.BTSTASN(A5),D0Getaddressspacenumber*CMP.BCURR_ASN,D0IfsameascurrentASN,BEQ.SLOADIEXthenEXIT. !OR.W#$700,SRInhibitinterrupts/MOVE.LA5,MMULOADSaveaddressofcurrentloadMOVE.LMMUHERE,A5PointtoMMUMOVE.BD0,AST1(A5)Userdata MOVE.BD0,AST2(A5)Userprogram * *SAVETHEADDRESSSPACENUMBER.*MOVE.BD0,CURR_ASN  **FLUSHTHEUSERCACHE.*BSRFLUSH_ON_CONTEXT_SWITCH **TEMPORARILYDISABLETRACING.*0*BTST#TRCFMMU,TRACFLAGShouldentrybetraced?*IFTHEN.S*BSRTRACERBuildtraceentry*DC.W$DD08Tracecode*ENDI LOADIEX:RTEPAGE**Makeentryin!ASN**:*CreateanewAddressSpaceNumberandinsertitintoTCB**,*ENTRY:A5PointstoTCBtoreceivenewASN**EXIT:ReturnPCifsuccessful(*ReturnPC+2ifnonewASNisavailable* *01234567*USESREGISTERSD**A*P** XDEFCRASN*XREF.SASNTBLXREF.SKILLER*CRASN=BTSTW#TSKARTIM,TCBATTR(A5)Ifthetaskisareal-timetask,.BNE.SCRASN13thenusethedefault(ASN=0),*asinitializedinTSKBORN. "MOVE.LASNTBL,D0Istherea!ASN?BEQ.SCRASN13BranchifnoneMOVE.LD0,A0A0--->!ASNCMP.L#'!ASN',(A0)Isit!ASN?BEQ.SCRASN11Branchifyes2BSRKILLERMu!!Itisthere,butitisnotthere.CRASN11"LEA4(A0),A0Pointtofirstentry$MOVE.W#127-1,D0127entriesinallCRASN12TST.L(A0)+Freeentry?(DBEQD0,CRASN12Branchbackifnotfree,BEQ.SCRASN12ABranchifanentrywasfound"ADD.L#2,(A7)Error--tablefullRTSTakeerrorreturn"CRASN12AMOVE.LA5,-(A0)UseentryNEG.BD0ComputeASNADD.B#127,D0#MOVE.LTCBTST(A5),A0Pointto!TST"MOVE.BD0,TSTSTAT(A0)DropinASNCRASN13RTSReturntocallerPAGE**Deletetaskfrom!ASN**%*ENTRY:A4PointstoTCBtoloseASN* *01234567*USESREGISTERSD**A*** XDEFDEASN XREF.SASNTBLXREF.SKILLER*DEASN#MOVE.LASNTBL,D0Istherean!ASN?BEQ.SDEASN7BranchifnoneMOVE.LD0,A0A0--->!ASNCMP.L#'!ASN',(A0)Isit!ASN?BEQ.SDEASN5Branchifyes1BSRKILLERMu!!Itisthere,butitisnotthereDEASN5#MOVE.LTCBTST(A4),A1Pointto!TST CLR.WD0Prepareforshortload4MOVE.BTSTASN(A1),D0GetAddressSpaceNumber(ASN)!BEQ.SDEASN7ASN#0notrelevant&CMP.W#128,D0Shouldbelessthan128BLT.SDEASN6BranchifokBSRKILLERElsecrashDEASN6LSL.W#2,D0Indexinto!ASNCLR.L(A0,D0.W)RemoveentryDEASN7RTSReturntocallerPAGE*"*Unloadasegmentfrom68451MMUs*(*ENTRY:(A5,D5)-->Segmentinformation* XDEFUNLDMMU XREF.SCURRSDXREF.SCURR451XREF.SFRST451XREF.SLAST451*UNLDMMU *=*Flushanycachedinformationthisusermighthavebuiltup.*6  PUSH.LA5BSRFLUSH_ON_CONTEXT_SWITCH POP.LA5 *TST.BTSTASN(A5)Isthisaddressspace0?BEQ.SUNLDEXITBranchifyes'MOVE.LFRST451,A1Pointtofirst68451$MOVE.B#1,D0Segmentdescriptor#1UNLD10%MOVE.BD0,DP(A1)Pointtodescriptor"MOVE.BSSR(A1),D1Readdescriptor+BTST#SSREN,D1Isthisdescriptorenabled?BEQ.SUNLDNEXTBranchifno'MOVE.BAC6(A1),D1Getdescriptor'sASN8CMP.BTSTASN(A5),D1Isthistheaddressspacewe'rein?BNE.SUNLDNEXTBranchifno'MOVE.WAC0(A1),D1Getdescriptor'sLBA!CMP.WTSTLB(A5,D5),D1LBALE?BGT.SUNLDNEXTBranchifyes-MOVE.B#0,SSR(A1)Elseclearthisdescriptor5MOVE.LA1,CURR451Givethisdescriptortonextfault5MOVE.BD0,CURRSD+3RestofdescriptorinfoforfaultUNLDNEXTADDQ.B#1,D0NextdescriptorCMP.B#$20,D0EndofthisMMU?BNE.SUNLD10Branchifno#LEA$40(A1),A1MoveontonextMMUCLR.BD0Descriptor#0)CMP.LLAST451,A1ArewebeyondallMMUs?BLE.SUNLD10BranchifnoUNLDEXITRTSElsereturnPAGE*>*Diagnosebuserrorandattempt68451segmentdescriptorswap*"*Savesandrestoresallregisters*XDEFMMUFAULT XREF.SCURRSDXREF.SCURR451XREF.SFRST451XREF.SLAST451XREF.SMMUHEREXREF.SRUNNER MMUFAULT SAVED0-D7/A0-A6SaveregistersTST.LMMUHEREIsthereanmmu?BEQMMUFRTSBranchifno,#2Checkforvalidaddress/BRA.SMMUF10BranchifAOBisinlogicalspace NOPElse,+BRAMMUFRTSBranchifnotinlogicalspaceMMUF10(BSRCRSDCreatelba,lam,pbainD0,D1,D2MOVE.WTSTASN(A0),D3ASNtoD3$MOVE.BTSTCTL+1(A0,D5),D3DSTtoD3:BSET#SSRUSED,D3Settousedsoitwon'tgetswappedsoonPAGE**Selectadescriptortoswap**1.Disableddescriptor.*2.Firstdescriptorcheckedandfoundunused*3.Firstdescriptorchecked*%PUSHSRSavecurrentinterruptlevel7 !OR.W#$700,SRInhibitinterrupts2MOVEM.LFRST451,A0-A3Get68451SYSPARparameters'MOVE.LA2,A4A4-->MMUbeingexamined&MOVE.LA3,D7D7hasdescriptornumberFSD20%MOVE.BD7,DP(A4)Pointtodescriptor"MOVE.BSSR(A4),D6Readdescriptor+BTST#SSREN,D6Isthisdescriptorenabled?BEQ.SFSDEMPTYBranchifno0BCLR#SSRUSED,D6Hasthisdescriptorbeenused?BEQ.SFSDNOUSEBranchifno/MOVE.BD6,SSR(A4)EraseusedbitindescriptorADDQ.B#1,D7NextdescriptorCMP.B#$20,D7EndofthisMMU?BNE.SFSD40Branchifno#LEA$40(A4),A4MoveontonextMMU#CLR.BD7Beginwithdescriptor#0$CMP.LA1,A4ArewebeyondallMMUs?BLE.SFSD40Branchifno"MOVE.LA0,A4GobacktofirstMMUADDQ.B#1,D7Descriptor#1FSD40+CMP.WA3,D7Samedescriptorwestartedon?BNE.SFSD20Branchbackifno$CMP.LA2,A4SameMMUwestartedon?BNE.SFSD20BranchbackifnoPAGE**Usefirstdescriptorchecked*FSDFIRST*(*Usefirstdescriptorfoundtobeempty*FSDEMPTY*(*Usefirstdescriptornotrecentlyused*FSDNOUSE?SR_ON_STACKSET4+4+15*4+2ThisisthedepthoftheoriginalSR%*pushedbythebuserror.Intheway'*arethePCfromtheBSRPROGINT2(4),&*thePCfromtheBSRMMUFAULT(4),15%*registerssavedbyMMUFAULT(15*4),#*andtheSRsavedbyMMUFAULT(2). BMOVESR_ON_STACK(SP),D6IsolateinD6theinterruptlevelwewere6AND#$0700,D6runningatwhenthebuserroroccurred. /MOVEM.WD0-D3,AC0(A4)LoadmostofaccumulatorMOVE.B#$FF,AC8(A4)ASM#MOVE.BD7,DP(A4)Descriptornumber 5TST.BLDO(A4)Iftherewasnocollisionontheload,IFTHEN.S* TRY_AGAIN*J*AtthispointwehaveeithersuccessfullyloadedasegmentdescriptororI*wegotacollisionthatmaybeduetoapreviousinterruptwhichcausedK*ustoloadadescriptor.IneithercasewewanttoremembertheinterruptH*levelofthisloadandproceedundertheassumptionthatthebuserrorJ*wascausedbytheabsenceoftherightsegmentdescriptor.IfwegettheJ*buserroragain,theLAST_MMU_INT_LEVELwillbelowersowe'llknowit's*theuser'sfault.*>MOVE.BAC6(A4),AST1(A0)LoadtheASNforthisdescriptorinto?MOVE.BAC6(A4),AST2(A0)theuserdataanduserprogramentries*intheaddressspacetable. **FixupSYSPARparameters*:MOVED6,LAST_MMU_INT_LEVELRememberthisinterruptlevel. 2ADDQ.B#1,D7StartnexttimewithnextdescriptorCMP.B#$20,D7EndofthisMMU?BNE.SFSD100Branchifno#LEA$40(A4),A4MoveontonextMMU#CLR.BD7Startwithdescriptor#0$CMP.LA1,A4ArewebeyondallMMUs?BLE.SFSD100Branchifno"MOVE.LA0,A4GobacktofirstMMUADDQ.B#1,D7Descriptor#1FSD100#MOVE.LA4,CURR451SavecurrentMMU+MOVE.BD7,CURRSD+3Savecurrentdescriptor**Returntofaultedtask*!ADD.L#2,A7RemoveSRfromstack/RESTORED0-D7/A0-A6Restoreoriginalregisters+ADD.L#8,A7RemoveunusedreturnaddressesRTEContinuetask ENDI  *C*Therewasacollision;canwetellwhethertheuserwasatfault?*BCMPLAST_MMU_INT_LEVEL,D6Iftheinterruptlevelofthelastload:BMITRY_AGAINwashigherthantheinterruptlevelofthis'*load,thenit'spossiblethatwetook(*theinterruptduringtheprocessingof%*thisbuserror.Ifthathappenedwe(*mighthavealreadyloadedthissegment'*descriptorforthecodeatthehigher$*interruptlevel.Thereforewemust*trytheaccessagain.  *F*Weknowthecollisionwastheuser'sfault,sinceweknowwedidnot7*comethroughthispathfromahigherinterruptlevel.*(POPSRRestorepreviousinterruptlevelMMUFRTS&RESTORED0-D7/A0-A6RestoreregistersRTSContinuenormalhandlingPAGE* *Computeonesegmentdescriptor**ENTRY:D6=Physicaladdress*D3=Logicaladdress*(A0,D5)-->TSTMMUentry**EXIT:D0=lba *D1=lam *D2=pba*(A0,D5)UNDISTURBED*CRSDMOVE.LD3,D0D0=la 7 LSR.L#8,D0LOSELOWBYTEOFla LSR.L#8,D6LOSELOWBYTEOFpa,MOVE.L#-1,D1ONESTOSTOPlamFORMINGLOOPMOVE.WD1,D3D3=lamCLR.BD2D2=nMOVE.WD6,D1D1=paEOR.WD0,D1D1=paEORla**FORMLARGESTPOSSIBLElam*CRSDABTSTD2,D1la=paINBITn?BNE.SCRSDCBRANCHIFNOBCLRD2,D3CLEARTHISlamBITADD.B#1,D2BUMPnBRA.SCRSDATRYNEXTBIT**ADJUSTlamFORLOWERBOUNDARY*CRSDCMOVE.WD0,D1D1=laAND.WD3,D1D1=lamANDla(CMP.WTSTLB(A0,D5),D1lamANDla>=lb?BHS.SCRSDDBRANCHIFYESSUB.B#1,D2DECREMENTnBSETD2,D3HALVETHElamRANGEBRA.SCRSDCTRYAGAIN**ADJUSTlamFORUPPERBOUNDARY*CRSDDMOVE.WD3,D4D4=lamNOT.WD4D4=NOTlamCRSDD10MOVE.WD0,D1D1=laAND.WD3,D1D1=lamANDla'ADD.WD4,D1D1=(lamANDla)+NOTlam2CMP.WTSTLE(A0,D5),D1(lamANDla)+NOTlam<=leBLS.SCRSDEBRANCHIFYESSUB.B#1,D2DECREMENTnBSETD2,D3HALVETHElamRANGE"BCLRD2,D4HALVETHENOTlamRANGEBRA.SCRSDD10TRYAGAINCRSDEAND.WD3,D0D0=lba,MOVE.WTSTPO(A0,D5),D2D2=PHYSICALOFFSETADD.WD0,D2D2=paMOVE.WD3,D1D1=lam RTSRETURNENDU1LOADMMU ASYST'M68451 LOADMMU SA"(C68451 MMU HANDLER FOR 68010-BASED SYSTEMS2BLOADMMU BLOADMMUI ,BMMUFAULT *pFLUSH_ON pMMULOAD BUNLDMMU pCURR_ASN pLAST_MMU pASNTBL BCRASN TBDEASN pCURR451 pTRACER pKILLER pFRST451 pLAST451 pRUNNER pCURRSD pTRACFLAG pMMUHERE 2pSBLOGPHY "\H3PPB- 8 g @|! *x @@ aAFNu- 8 g|! *xJ3 @@ aANs-)f8 8 g2 @ !ASNgaAA0<~JWgL3TNu! D m6@ Nu 8 g* @ !ASNgaBX"l6B@) g @maBBI3HBNu/ aB4*_J- gR"x <@))1g()&- f2) uPmG3@ uPn|1! !R fC@B oNuHJ g x J( gI3z,/NaB`Nq`a6( 0P@|L (J. G),1F3g(g"F1R  fI@Bo(HRKfιfbbINIT RO bbKILLER AFbbKILLER SA.bbKILLER RO  bbPOWRFAILAF bbPOWRFAILSA  2bbPOWRFAILRO  bbREADY AF ( (bbREADY SA 1 1bbREADY RO J JbbRMS AF S SbbRMS SA \ \|bbRMS RO m mbb=/*=/*M68XXX.RDTIMER.AF=/*,=/* Chain file to assemble M68XXX.RDTIMER.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68XXX.RDTIMER.LS=/*=/IFC \1=ARGM68XXX.RDTIMER.LS=/ENDIF=/*1=ASM M68XXX.RDTIMER.SA,M68XXX.RDTIMER.RO,\1;RZ=46=/*{ Included files are:=/*9995.&.STR.EQ=/*9995.&.UTILITY.MC=/*9995.&.INTERRUP.MC=/*}=/*=END8 -RDTIMERIDNT5,1M68xxx--Readssystemtime.O*v*****************************************************************************O*******************************************************************************O*************************************************************************************<***FILE:RDTIMER--GETSTHECURRENTTIMEOUTOFSYSPAR*********D***ENVIRONMENT:PartoftheRMS68KexecfortheMotorola68000.***(***Copyright1983byMotorola,Inc.*********G***FUNCTION:Thisroutinereturnsthetimemaintainedbythetimer******logic.Onreturn,***C***D1=the#ofmillisecondssincemidnightatwhichthelast******timertickoccurred.***C***D0=0.Thisusedtobethe#ofmicroseconds,butitisn't***?***realistictothinkthatthefigurewasevermeaningful.*********O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*Revisionhistory(addnewchangestotop).*DateAuthorChangesG*-------------------------------------------------------------------?*11/27/84SteveFranckCreatedfromadevice-specificversion.* * *XDEF's.*$XDEFRDTIMEREntrypt.forTRAP#0.(XDEFSBRDTIMEntrypt.forsubroutines.  **XREF'sfromSYSPAR.*XREF.SMIDNIGHT XREF.SNSEXREF.STIME_LEFT  **Includedfiles:*9995.&.STR.EQ*9995.&.UTILITY.MC*9995.&.INTERRUP.MC*NOLISTINCLUDE9995.&.STR.EQINCLUDE9995.&.UTILITY.MCINCLUDE9995.&.INTERRUP.MCLISTPAGE SECTIONLEVEL00  SBRDTIM:RDTIMER: 0PUSHSRWemustdothiswithinterruptsmasked,6DISABLE_INTERRUPTSincasewetakeatimerinterrupt. *5*Calculate(#ofmillisecondssincelastmidnight)==*[(timeofNSEinmsecs)-(timeleftuntilNSEinmsecs)]#*-(timeoflastmidnightinmsec) EG*NSEstandsforNextSignificantEvent,andistheabsolutetimevalueJ*inmsecswhenwenextneedtotakesomethingoffthePeriodicActivationK*Table(PAT).Recallthattheclockisa31-bit(not32-bit!)numberwhichB*wrapsaroundat2**31=0,sowehavetodo"31-bitarithmetic."*%MOVE.LNSE,D1D1<--msectimenow=:SUB.LTIME_LEFT,D1(timeofNSE)-(timeleftuntilNSE)./SUB.LMIDNIGHT,D1D1<--msecsincemidnight=1*(msectimenow)-(msectimeatlastmidnight).3BCLR#31,D1Theresultisa31-bitnumber,sozero%*outthehighbit,whichisgarbage. *J*Alwaysset#ofmicrosecondstozero,sincewearereallyonlyreturning6* the millisecond time of the last tick that occurred.*#MOVEQ#0,D0D0<--0microseconds.  +POPSRRestoreinterruptlevelandreturn.RTS*  END9 H1RDTIMER ASYST'M68XXX RDTIMER SA"3EM68xxx -- Reads system time.E2pNSE BRDTIMER pTIME_LEF BSBRDTIM pMIDNIGHT ""3 @|"8   pFNu4PAGE********************** M68XXX.TIMEINT.SA **********************E* This file is appended to the device dependent source for all of theA*TIMEINTmodulesduringtheassemblyprocess.Itcontainscommon4*codefortimerinterruptfunctionsonallsystems.*B*ThiscodewillscheduleabackgroundroutinetofireoffanyPAT*nodeswhosetimehascome. IFTHEN.S3MOVE.LPATBEG,A1A1containsaddressofPATheader:LEAPATBABT(A1),A0AddressofbackgroundactivationblockLEAPATFIRE(PC),A13MOVE.LA1,BABPTR(A0)AddressofbackgroundroutineBSRBKG_SCHEDULEScheduleitENDI ***RESTOREREGISTERSANDTRACEIFREQUESTED* ,MOVEM.L(A7)+,D0-D1/A0-A1RESTOREREGISTERS&BTST#TRCFTIMR,TRACFLAGTRACEWANTED?IFTHEN.SBSRTRACERCALLTRACEROUTINE DC.W$FF13ENDI  *G*Checktoseewhetherthisticrepresentstheendofthetimeslicefor*therunningtask,andexit.* 7TSTTIMESLICIfwe'resupposedtobedoingtimesl9 icing9IFTHEN.S(i.e.,iftics/timesliceparameter<>0), .SUB#1,TIMEOUTdecrementthetimeoutcounter.'IFTHEN.SIfitis0ornegative,9STPREEMPT_FLAGsettheflagthatwillcauseadispatch.ENDI* ENDI* 3EXITINTERRUPTEitherway,exitthroughthecommon*interrupthandler.PAGE*I* This is a background routine (scheduled when TIME_LEFT <= 0) that fires *allPATnodeselibibletorun.* PATFIRE:$MOVE.LPATBEG,A1PATheaderaddress*SRSTACKSET0OffsettoSRbeforeonstack#DISABLE_INTERRUPTSMaskinterruptsMOVE.LTIME_LEFT,D2WHILEDO.S,MOVE.LPATHDR(A1),A2PointA2tofirstnode*BSRPAT_RM_1ST_NODERemovethefirstnode%ENABLE_INTERRUPTSUnmaskinterrupts..TST.LPATTCB(A2)IsitExecnode?0meansyes IFTHEN.SMOVE.WSR,D0SRbeforemaskingIFEQCHIPTYPE-68010%MOVE.W#$0084,-(A7)PushTRAP#1VORENDC$F-IFEQCHIPTYPE-68020%MOVE.W#$0084,-(A7)PushTRAP#1VORENDCBSRCKEXPAGofireexecnode ELSE.SBSRCKDELAYGofiretasknodeENDI ENABLE_INTERRUPTS$MOVE.LPATBEG,A1PATheaderaddressDISABLE_INTERRUPTS*MOVE.LPATHDR(A1),A2Lookatnew1stnodeMOVE.LTIME_LEFT,D2ENDW ENABLE_INTERRUPTSUnmaskRTSBacktotheEXECIFEQCHIPTYPE-68000/TRAP1IDNT5,168000TRAP#0handlerandtable.ENDCIFEQCHIPTYPE-68010/TRAP1IDNT5,168010TRAP#0handlerandtable.ENDCO*v*****************************************************************************O*******************************************************************************O*************************************************************************************D***FILE:TRAP1--EVERYTHINGDEALINGWITHTHETRAP#1MECHANISM******FORREAL-TIMETASKS.*********J***ENVIRONMENT:PartoftheRMS68KexecfortheMotorola68000family.***(***Copyright1983byMotorola,Inc.*********#***FUNCTION:Inthisfileare:***4***1.)theTRAP#1handlerforreal-timetasks,***=***2.)theTRAP#1: tableforreal-timetaskscontaining:***"***A.)offsetstodirectives,***%***B.)offsetstoexitroutines.*********O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*Revisionhistory(addnewchangestotop).*DateAuthorChangesG*-------------------------------------------------------------------&*7/27/84MarkLanusOriginalwriting.*  **Includedfiles:*8*UTILITY.MCMacrosofgeneralutility(e.g.PUSH,POP).2*ENV.EQEquatesdependentonprocessorchiptype.2*STR.EQEquatesforsupervisorcodeunderRMS68K.(*TCB.EQEquatesfortaskcontrolblock.**UDR.EQEquatesforuserdirectivetable.1*TR1RTCD.EQReturncodesforTRAP#1directives.**NOLISTINCLUDE9995.&.UTILITY.MCINCLUDE9995.&.ENV.EQINCLUDE9995.&.STR.EQINCLUDE9995.&.TCB.EQINCLUDE9995.&.UDR.EQINCLUDE9995.&.TR1RTCD.EQLIST  * *xdef's.* 0XDEFTRAP1EntrypointfortheTRAP#1handler. /XDEFTTB_01BeginningandendingaddressesforXDEFTTE_01trusttableentry.  * *xref's.5C>QFXNRVJ^Mfkn.* XREFCKEXMON XREFISRRTE XREFTRACER XREF.SRUNNERXREF.STRACFLAGXREF.SUDRBEG SECTIONLEVEL00 OPTMEX,NOCLPAGEO*v*****************************************************************************O*************************************************************************************1***ROUTINE:TRAP1--CALLATRAP#1ROUTINE.************FUNCTION:***D***Whenataskwantstoinvokesomeexecfunction,hemovesthe***D***directivenumberofthefunctionintoD0anddoesaTRAP#1.***B***ThempuvectorshereandweusetheTRAP#1table,TABLE1,***&***toJMPtothedesiredroutine.***************E***REGISTERUSAGE:(A)rgument(D)estroyed(P)reserved(R)eturned***)***01234567SRhiSRlo(CCR)******D:..........******A:........************ENTRYCONDITIONS:***7***D0=directive#oftheroutinetobeexecuted.***8***A0=parameterblock(ifrequiredbydirective).***F***PC&SR(&maybeVOR)ofcallerarestacked,aswithanyTRAP.*********O*******************************************************************************O*^*****************************************************************************PAGE**if&*(interrupt_mask(super_stack)>0)|,*(supervisor_state_bit(super_stack)=set)*thengotoisrrte;* TRAP1:TESTIM3BNE.SISR_RTEBranchifnotfromnormalusermode.  *1*forcetheconditioncodesonthestackto,+*andperformalevel_1partialstatesave;* =MOVE.B#EQ_CC,COND_CODE(A7)savecondcodeofonstack. SAVE_STATEL1_PART  *"*if(requestor<>real-timetask)*thengotonot_rt_task;* BTSTW#TSKARTIM,TCBATTR(A6)BEQ.SNOT_RT_TASK  */*multiplyD0by4;/*Getindexintotable1*/ *if(D0<0)7*thengotouser_dir;/*Userconfigureddirective.*/* ASL.W#2,D0BMI.SUSER_DIR  *$*if(D0>biggestdirectivenumber)*thenexit(baddirective);* CMP.W#HI_T1_NUM*4,D0BHI.SBAD_DIR  * *A4<==addr(parameterblock);.*D2<==(option_bits)&(offset(directive)); *if(target_tcb_required=set)*thenget(target_tcb);#*gotodirectivepointedtobyD0;* MOVE.LA0,A4MOVE.LTABLE1(PC,D0.W),D2 IFTHEN.SGET_TARGET_TCBENDI JMPTABLE1(PC,D2.W)PAGE*:*Herearesomebranchinstructions.Thepurposeinhaving=*thisbranchtobrancharchitecture,was: tomakethetrap#1>*handlerforreal-timetasksasfastaspossible,eventhough<*thisarchitecturewouldslowdownthetrap#1handlingfor*nonreal-timetasks.*=*Theprioritiesonhandlingtrap#1requestsareasfollows:**1.)real-timetasks,*2.)nonreal-timetasks,!*3.)userconfigureddirectives.  *1*Userexecutedatrap#1whileexecutinganISR.* ISR_RTE: BRA.LISRRTE  *&*Clienttaskisnotareal-timetask.* NOT_RT_TASK:BRA.LTRAP1_10  ***Trapisforauserconfigureddirective.* USER_DIR:BRA.LTRAPUSR  *(*Trapcontainedabaddirectivenumber:* BAD_DIR:$EXITRTCDDIRNexit(baddirective);PAGE@*****************************************************************"*ENTRYCONDITIONSFORDIRECTIVES:*+*A4<==parameteraddress(ifapplicable);!*A6<==clienttasktcbaddress;*?***************************************************************PAGEO*v*****************************************************************************O*******************************************************************************O*************************************************************************************I***FUNCTION:Inthisfileisthe#TRAP#1tablecontainingoneentry***<***foreveryTRAP#1directive.Eachentrycontainsthe******followingfields:*********.***1.)bytedescribingdirectiveoptions:***%***A.)parameterblockrequired:*** ***B.)targettcbrequired:*********5***2.)bytedescribinglengthofparameterblock******(ifrequired):*********5***3.)wordcontainingoffsettodirectivecode:*********O*******************************************************************************O*******************************************************************************O*^*****************************************************************************PAGE*:*TheSETUP1macroisusedfordefiningentriesinTABLE1.?*Inputstothismacroaretheequateforthedirectivenumber,>*andthelableoftheroutinewhichprocessesthatdirective.<*SETUP1willgeneratea16bitoffset,fromthebeginingof*TABLE1,tothedirective.* * *example:*A*SETUP1,,,,* TTEQU%10000000PBEQU%01000000T1TRGTSKEQU31T1PARBLKEQU30 SETUP1MACRODIR_NUMSET(*-TABLE1)/4IFNEDIR_NUM-\1SHOULD_BESET\10FAIL499Thisdirectiveisinthewrongplace!!MEXITENDCIFC'\5','TT'DC.BTT+PBget(pb&tt);DC.B\4len(pb);NOLIST XREF.S\2LIST#DC.W\2-TABLE1offset(directive);MEXITENDCIFC'\3','PB'DC.BPBget(pb);DC.B\4len(pb);NOLIST XREF.S\2LIST#DC.W\2-TABLE1offset(directive);MEXITENDCDC.B%00000000get();DC.B0len(pb)=0;NOLIST XREF.S\2LIST#DC.W\2-TABLE1offset(directive);ENDM  PAGETABLE1:2SETUP1T10,ERROR_01Error-baddirectivenumber. 4SETUP1T1GTSEG,SEGALOC,PB,24,TTAllocateasegment. 6SETUP1T1DESEG,SEGDEAL,PB,24,TTDeallocateasegment. 3SETUP1T1TRSEG,TFRSEG,PB,24,TTTransferasegment. SETUP1T1SHRSEG,SEGSHAR,PB,24,TTGrantsharedsegmentaccess. ;SETUP1T1MOVELL,MOVELL,PB,28,TTMovefromlogicaladdress. ;SETUP1T1DCLSHR,DCLSHAR,PB,24Declareasegmentshareable. 5SETUP1T1SNAPTRAC,SNAPTRACMovetracetabletouser. :SETUP1T1RCVSA,RCVSA,PB,28,TTReceivesegmentattributes. /SETUP1T1GTTID,GTTASKID,PB,08GetTCBaddress. 'SETUP1T1CRTCB,CRTCB,PB,28CreateTCB. 0SETUP1T1GTTNAME,GTTNAME,PB,08,TTGettaskname. *SETUP1T1START,TSKSTART,PB,10Starttask. (SETUP1T1ABORT,ABORTAborttask(self). *SETUP1T1TERM,TERMTerminatetask(self). 6SETUP1T1TERMT,TERMT,PB,10Terminatetask(notself). -SETUP1T1SUSPND,SUSPENDSuspe; ndtask(self). 7SETUP1T1RESUME,RESUME,PB,08,TTResumesuspendedtask. )SETUP1T1WAIT,TSKWAITBlocktask(self). 7SETUP1T1WAKEUP,WAKEUP,PB,08,TTWakeupawaitingtask. #SETUP1T1DELAY,DELAYDelay(self). -SETUP1T1RELINQ,RELINQRelinquishexecution. :SETUP1T1TSKATTR,TSKATTR,PB,08,TTReturntaskattributes. 6SETUP1T1SETPRI,SETPRI,PB,09,TTSetcurrentpriority. -SETUP1T1STOP,STOPT,PB,08Stoprunningtask. 6SETUP1T1EXPVCT,EXPVCT,PB,36Claimexceptionvectors. 1SETUP1T1TRPVCT,TRPVCT,PB,56Claimtrapvectors. =SETUP1T1TSKINFO,TSKINFO,PB,14,TTMovetask'sTCBtocaller. =SETUP1T1RQSTPA,RQSTPA,PB,26,TTRequestperiodicactivation. /SETUP1T1DELAYW,DELAYWDelaywithwaitoption. 1SETUP1T1GTASQ,ASQALOC,PB,22,TTAllocateanASQ. *SETUP1T1DEASQ,ASQFREEDeallocateanASQ. )SETUP1T1SETASQ,ASQSTATSSetASQstatus. -SETUP1T1RDEVNT,ASQREADReadeventfromASQ. 5SETUP1T1QEVNT,ASQEVENT,PB,18,TTQueueeventtoASQ. (SETUP1T1WTEVNT,WTEVENTWaitforevent. +SETUP1T1RTEVNT,RTEVENTReturnfromevent. ,SETUP1T1GTEVNT,GTEVENTGeteventfromASQ. ,SETUP1T139,ERROR_01Error-baddirective. ,SETUP1T140,ERROR_01Error-baddirective. 0SETUP1T1ATSEM,ATSEM,PB,10Attachtosemaphore. .SETUP1T1WTSEM,WTSEM,PB,10Waitonsemaphore. -SETUP1T1SGSEM,SGSEM,PB,10Signalsemaphore. 2SETUP1T1DESEM,DESEM,PB,10Detachfromsemaphore. -SETUP1T1CRSEM,CRSEM,PB,10Createsemaphore. SETUP1T1DEXMON,DEMON,PB,16,TTDetachfromexceptionmonitor. HI_T1_NUMEQU(*-TABLE1)/4-1HighestTRAP#1directivenumber. PAGE*3*Thisistheroutinewhichprocessestrap#1calls*fromnonreal-timetasks.* *"*Tracethistrap#1,ifrequired.* TRAP1_10:-BTST#TRCFTRP1,TRACFLAGDowewanttotrace?BEQ.STRAP1_20Branchifno. !BSRTRACERTracethisdirective. DC.W$FF15 *'*SendamessagetoEXMON,ifrequried.* TRAP1_20:0BTST#TSKIEXM,TCBATTI(A6)DoestaskhaveEXMON?BEQ.STRAP1_30Branchifno. 3MOVE.LTCBEMMSK(A6),D1Movemasktodataregister.(BTST#TEMTRAP1,D1IsTRAP#1monitored?BEQ.STRAP1_30Branchifno. %MOVE.L#1,D7PassTRAP#toCKEXMON.&BSRCKEXMONGosendmessagetoEXMON.  */*multiplyD0by4;/*Getindexintotable1; */ *if(D0<0)7*thengototrap_usr;/*Userconfigureddirective.*/* TRAP1_30: ASL.W#2,D0BMI.STRAPUSR  *$*if(D0>biggestdirectivenumber)*thenexit(baddirective);* CMP.W#HI_T1_NUM*4,D0BHI.STRAP1BAD  *.*Getaddressofparameterblock,ifrequired.* LEATABLE1(PC),A3MOVE.L(A3,D0.W),D2BTST#T1PARBLK,D2BEQ.STRAP1_GO MOVE.LD2,D5SWAPD5AND.L#$FF,D5-MOVE.LA0,D6LOGICALPARAMETERBLOCKADDRESSTR0.LOGPHY&BRA.STRAP1_40BRANCHIFGOODADDRESS NOPBADADDRESS&EXITRTCDPBLKBADADDRESSRETURNCODE  TRAP1_40:.MOVE.LD6,A4PARAMETERPHYSICALADDRESSTOA4  *&*GettargetTCBaddress,ifrequired.* $BTST#T1TRGTSK,D2NEEDTARGETTASK?BEQ.STRAP1_GOBRANCHIFNO TR0.GETTCB(A4)BRA.STRAP1_50BRANCHIFFOUNDEXITRTCDTASKBADTARGETTASK TRAP1_50:&MOVE.LA0,A5TARGETTCBADDRESSTOA5 **Nowgotodirectivecode.* TRAP1_GO: JMP(A3,D2)   *'*Hereisanotherbranchfromabranch,$*employedforperformancepurposes.* TRAP1BAD:EXITRTCDDIRNPAGETRAPUSR:&MOVE.LUDRBEG,A2USERDIRECTIVETABLEMOVE.LA2,D2DOESTABLEEXIST?BEQ.STRAP1BADBRANCHIFNO ,ASR.W#2,D0GETUNMODIFIEDDIRECTIVENUMBER.NEG.WD0CHANGEDIRECTIVE#TOPOSITIVEVALUE2CMP.WUDRCNT(A2),D0ISVALUEWITHINTABLELIMITS?&BGT.STRAP1BADBRANCHIFNOTINTABLE SUB.W#1,D0ENTRYNUMBERMULU#UDRESIZ,D0*ENTRYSIZE(LEAUDRENTRY(A2,D0),A2POINTERTOENTRY!TST.LUDRADDR(A2)ADDRESSEXIST?BEQ.STRAP1BADBRANCHIFNO .MOVE.WUDROPT(A2),D2GETOPTION&EXITINDEX.)BCLR#4,D2THISTRAPFOR1SESSIONONLY?BNE.STRAPUSR1BRANCHIFNO "MOVE.LUDRSESS(A2),D1GETSESSION'CMP.LTCBSESSN(A6),D1DOESITCOMPARE?BNE.STRAP1BADBRANCHIFNO TRAPUSR1:(MOVE.L(A7),TCBA6(A6)MOVEA6INTOTCB.%CLR.WTCBRTCD(A6)CLEARRETRUNCODE.(MOVE.WD2,-(A7)PUTEXITINDEXONSTACK IFEQCHIPTYPE-680101MOVE.W#$84,-(A7)SIMULATETRAP1ONM68010STACKENDC )PEATRAP1XIT(PC)RETURNADDRESSTOSTACKMOVE.WSR,-(A7)SRTOSTACK $MOVE.LUDRADDR(A2),A2ENTRYADDRESS JMP(A2)  **RETURNFROMDIRECTIVE* TRAP1XIT:'MOVE.WTCBRTCD(A6),D0Getreturncode.*EXIT.NEERRORExitiferrorindirective. MOVE.W(A7)+,D0Getexitindex.5EXIT.EQSUBIf(index=0)thentakesubroutineexit IF.WD0#2THEN.S4TR0.READY(A6)If(index=2)thenmaketaskready.ENDI 2EXITPOSTEMPTIneithercase,takepostemptexit.END=/*=/*M68XXX.INIT.AF=/*)=/* Chain file to assemble M68XXX.INIT.SA=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to M68XXX.INIT.LS=/*=/IFC \1=ARGM68XXX.INIT.LS=/ENDIF=/*+=ASM M68XXX.INIT.SA,M68XXX.INIT.RO,\1;RZ=75=/*{ Included files are:=/*9995.&.STR.EQ=/*9995.&.TCB.EQ=/*9995.&.TST.EQ=/*9995.&.PANEL.EQ=/*9995.&.GST.EQ=/*9995.&.UST.EQ=/*9995.&.TRACE.EQ=/*9995.&.MAP.EQ=/*9995.&.IOV.EQ=/*9995.&< .BAB.EQ=/*9995.&.PAT.EQ=/*9995.&.UDR.EQ=/*9995.&.INTERRUP.MC=/*}=/*=ENDv**INCLUDEFILES**INCLUDE9995.&.STR.EQ*INCLUDE9995.&.TCB.EQ*INCLUDE9995.&.TST.EQ*INCLUDE9995.&.PANEL.EQ*INCLUDE9995.&.GST.EQ*INCLUDE9995.&.UST.EQ*INCLUDE9995.&.TRACE.EQ*INCLUDE9995.&.MAP.EQ*INCLUDE9995.&.IOV.EQ*INCLUDE9995.&.BAB.EQ*INCLUDE9995.&.PAT.EQ*INCLUDE9995.&.UDR.EQ*INCLUDE9995.&.INTERRUP.MC*NOLISTINCLUDE9995.&.STR.EQINCLUDE9995.&.TCB.EQINCLUDE9995.&.TST.EQINCLUDE9995.&.PANEL.EQINCLUDE9995.&.GST.EQINCLUDE9995.&.UST.EQINCLUDE9995.&.TRACE.EQINCLUDE9995.&.MAP.EQINCLUDE9995.&.IOV.EQINCLUDE9995.&.BAB.EQINCLUDE9995.&.PAT.EQINCLUDE9995.&.UDR.EQINCLUDE9995.&.INTERRUP.MCLISTPAGE INITIDNT5,1SYSTEMINITIALIZER*$*COPYRIGHTED1980BYMOTOROLA,INC.**SYSTEMINITIALIZER**EXECUTESWHENIPLCHUNKISIN**,*Revisionhistory(addnewchangestotop).*DateAuthorChangesH*____________________________________________________________________:*12/7/84SJFAddedinitializationofLAST_MMU_INT_LEVEL.C*12/23/83MarkLanusRe-wrotememoryinitializationroutinetofix.*bugin"hole"processing(andseveralmore).***PAGE XDEFKILLER*XREFCRASHSAV XREFENDMEMT XREFMEMTABL XREF.SADEFTYPXREF.SASNTBLXREF.SBKG_ACTIVEXREF.SBKG_HEADXREF.SBKG_TAIL XREF.SCCBHDXREF.SCURR_ASNXREF.SENDSYSPXREF.SEXCSTACKXREF.SGSTBEGXREF.SIOVCTBGN XREF.SLAMXREF.SLAST_MMU_INT_LEVELXREF.SMACSTRCXREF.SMAPBEGXREF.SMIDNIGHT XREF.SNSEXREF.SNOTLAM XREF.SPANELXREF.SPATBEGXREF.SREADYHDXREF.SSDEFTYPXREF.SSEMENDXREF.SSEMLIST XREF.STCBHDXREF.STDEFTYP XREF.STIATXREF.STIME_LEFTXREF.STRACEBEGXREF.STRACFLAGXREF.SUDEFTYPXREF.SUDRBEGXREF.SUSTBEGXREF.SVCTUBGNPAGE* *REFERENCESTOINITDATASEGMENT* SECTION8 XREFASNXREFDISPATCH XREFEEND XREFESTACK XREFESTART XREFGSTSIZ XREFIOVSIZxgM<G66/=>@*0=Q#UY)IS V(/0<8N@AHPPTX6`Ph2<  XREFMEMTYPA XREFMEMTYPS XREFMEMTYPT XREFMEMTYPUXREFPAGESIZE XREFPANELA XREFPATSIZ XREFRDYHEAD XREFSMEMHI XREFSMEMLO XREFTCBHEAD XREFTRCFLAG XREFTRCSIZ XREFUDRSIZ XREFUSTSIZXREFWHERLOAD**(*EXPECTTHEFIRST16BYTESTODISAPPEAR*(STARTMOVE.L#$400,A7LOADSTACKPOINTER.MOVE.LD0,$3FCBESUREMEMORYCANBEACCESSED*$*CLEARMEMORYTHROUGHENDOFSYSPAR*2LEACRASHSAV,A0STARTWHEREUSEABLEMEMORYSTARTS(MOVE.L#ENDSYSP,D6ENDATENDOFSYSPAR$SUB.LA0,D6COUNTOFBYTESTOCLEAR#ADD.L#255,D6CLEARTOENDOFPAGECLR.BD6EVENPAGEBOUNDRYBSRTBLCLRBCLEARMEMORY*'MOVE.LESTACK(PC),A7LOADSYSTEMSTACK/MOVE.LA7,EXCSTACKSAVESTACKPOINTERFOREXEC$MOVE.L$24,MACSTRCSETMACSTRACNOW*,*FINDOUTIFPANELEXISTS-PUT'BF'INLED*)MOVE.LPANELA(PC),A1PANELADDRESSTOA1!MOVE.LA1,PANELSAVEITFOREXEC BEQ.SPANELBEGOONIFNOPANEL(LEAPANELBE(PC),A0GOHEREONBUSERROR"MOVE.LA0,$8SETBUSERRORVECTOR+MOVE.W#$80,FPLEDST(A1)TESTFORBUSERROR MOVE.W#$BF,D1WANT'BF'INLEDBSRPANELEDDGOLIGHTITUP BRA.SMOVE2LOGOTOMOVEMEMORY*1PANELBEMOVE.L#CRASHSAV,PANELSETPANELTODUMMY'MOVE.LEXCSTACK,A7RESETSTACKPOINTERPAGE*/*MOVEALLOFOSTOLOWERMEMORYIFAPPROPRIATE*3MOVE2LOMOVE.LWHERLOAD(PC),D1WHEREAREWELOADED?BEQ.SVECTINITBRANCHIFAT0'MOVE.LESTART(PC),A3'MOVETO'ADDRESS!MOVE.LD1,A2'MOVEFROM'ADDRESS'LEAENDMEMT(PC),A4ENDOFMEMORYTABLE#ADD.L#$800,A4EXTRAFORMINI-TCBS&LEAVECTINIT(PC),A0WHERETOGOLATER%SUB.LA2,A0SUBTRACTSTARTOF'FROM'ADD.LA3,A0ADDSTARTOF'TO'(LEAMOVDONE(PC),A1GOHEREONBUSERRORMOVE.LA1,$8BUSERRORVECTOR*#MOVEALLMOVE.L(A2)+,(A3)+MOVEALLCMP.LA2,A4FINISHED?BGTMOVEALLBRANCHIFNO ADD.L#6,A7*'MOVDONEJMP(A0)CONTINUEINOTHERCOPYPAGE**SETUPVECTORS*;VECTINITMOVE.LESTART(PC),A2STARTSEARCHATSTARTOFEXEC&MOVE.L#'!VCT',D0D0=!VCTFORCOMPARE&LEA$200(A2),A0ENDOFSEARCHADDRESS-VECTSRCHCMP.L(A2)+,D0ISTHISVECTORTABLE?BEQ.SVECTSETBRANCHIFFOUND%SUB.L#2,A2WANTTOCHECKEVERYWORD$CMP.LA0,A2SHOULDSEARCHCONTINUE?BNEVECTSRCHBRANCHIFYES#BSRKILLERNOVECTORTABLE--QUIT*&VECTSETLEA0,A3ADDRESSOFVECTOR#0*MOVE.L(A2)+,A4ADDRESSOFCOMINTROUTINE;MOVE.LA4,VCTUBGNSAVECOMINTADDRESSFORVECTORUSETABLECLR.LD6SET1STVECTOR#CLR.LD5CLEARFORSHORTLOAD+MOVE.LD5,A5INITIALIZEVECTORSETADDRESS+TST.B(A2)SHOULDVECTOR0BEINITIALIZED?BEQ.SVECTENTBRANCHIFYESMOVE.W#2,D61STVECTORTOSETLEA8,A3ADDRESSOFVECTOR#2*,VECTENTMOVE.L(A2)+,D0GETNEXTTABLEENTRY,BNE.SVECTENT2BRANCHIFNOTENDOFENTRIES+MOVE.W#300,D5USEHI#FORVECTORCOMPARE BRA.SVECTCMPBRANCHTOCOMPARE-VECTENT2ROL.L#8,D0PUTVECTOR#INBITS0-7MOVE.BD0,D5SAVEVECTOR#LSR.L#8,D0RESTOREADDRESS+CMP.L#1,D0SHOULDTHISVECTORBESKIPPED?BNE.SVECTCMPBRANCHIFNONEG.LD0NEGATIVE=SKIPFLAG*&VECTCMPCMP.WD6,D5COMPAREVECTOR#'S$BMIVECTENTBRANCHTOGETNEWENTRY*BNE.SVECTSTORBRANCHIFNOTATENTRYYET MOVE.LD0,A5NEWVECTORADDRESS*"VECTSTORMOVE.LA5,D1TESTADDRESS+BMI.SVECTINC2IFNEG-SKIPVECTORCHANGE$BNE.SVECTINC1BRANCHIFADDRESSOK+MOVE.LA4,(A3)+USECOMINTROUTINEADDRESS%BRA.SVECTINC3BRANCHTOINCRVECTOR*0VECTINC1MOVE.LA5,(A3)+STOREADDRESSINVECTOR%ADD.L#2,A5INCREMENTVECTORADDRESSBRA.SVECTINC3*6VECTINC2LEA4(A3),A3DONOTSETVECTOR-INCRADDRESS'VECTINC3ADD.L#1,D6INCREMENTVECTOR#CMP.L#$400,A3ENDOFVECTORS?BNEVECTCMPBRANCHIFNO*/*SETBUSERROR--INCASEERROROCCURSININIT*)PEAKILLER(PC)PUTERRORRETURNONSTACK)MOVE.W#'BE',-(A7)BUSERRORRETURNFLAGPAGE*J*InitializeSYSPARparametersforbackgroundandCALL_GUARDEDprocessing.*>MOVE.L#0,BKG_HEADInitializebackgroundqueuetoempty:head= DMOVE.L#BKG_HEAD,BKG_TAILptris0andtailptrpointstoheadptr.8SFBKG_ACTIVEInitializeACTIVEflagtofalsesincethe*backgroundisn'trunning. *5*InitializeLAST_MMU_INT_LEVELtointerruptlevel0.*+CLRLAST_MMU_INT_LEVELSetthelevelto0.  *+*STARTPROCESSINGMEMORYPARTITIONENTRIES* BSRIMEM PAGE**SETDEFAULTMEMORYTYPES*1MOVE.BMEMTYPA(PC),ADEFTYPDEFAULTTYPEFORASQS1MOVE.BMEMTYPT(PC),TDEFTYPDEFAULTTYPEFORTCBS9MOVE.WMEMTYPS(PC),SDEFTYPDEFAULTTYPEFORSYSTEMTASKS7MOVE.WMEMTYPU(PC),UDEFTYPDEFAULTTYPEFORUSERTASKS**PUTTASKSONLISTS*,MOVE.LTCBHEAD(PC),TCBHDPOINTTOFIRSTTCB0MOVE.LRDYHEAD(PC),READYHDPOINTTOFIRSTREADY * *SEMAPHORES*,SEMSLEASEMLIST,A1STARTOFEXECSEMAPHORES+INITSEMMOVE.W#1,(A1)SETCOUNTFIELDTO1 CLR.L2(A1)CLEARADDRESSFIELD(ADD.L#6,A1INCREMENTTONEXTSEMAPHORE$CMP.L#SEMEND,A1ENDOFSEMAPHORES? BLT.SINITSEMBRANCHBACKIFNO**INITIALIZEMMU* XREFINITMMU3BSRINITMMUINVOKECONFIGURATION-DEPENDENTROUTINE**ADDRESSSPACEPARAMETERS*$MOVE.LPAGESIZE(PC),D0GETPAGESIZE:IFTHEN.SIfthepagesizespecifiedbytheSysgenis%MOVE.L#256,D0zero,defaultto256.ENDI* SUB.L#1,D0NOTLAM=PAGESIZE-1$MOVE.LD0,NOTLAMNOTLAMINTOSYSPAR-MOVE.L#$FFFFFFFF,LAMPREPARETOCOMPUTELAM$SUB.LD0,LAMLAM=$FFFFFFFF-NOTLAM*CLR.LASNTBLSETFORNOASNTBLMOVE.LASN,D2ASNTBLDESIRED?BEQ.SASN99BRANCHIFNO.MOVE.L#2,A0512BYTESFOR127ADDRESSSPACES(MOVE.L#T0PAGAL,D0PAGEALOCDIRECTIVE#TRAP#0EXECCALL"BRA.SASN10BRANCHIFGOODRETURN!BSRKILLERCRASHIFERRORRETURN4ASN10MOVE.LA0,ASNTBLSAVEASNTBLADDRESSINSYSPAR/BSRTBLCLRCLEARADDRESSSPACETABLETOZEROESMOVE.L#'!ASN',(A0)EYECATCHERASN996MOVE.B#$FF,CURR_ASNRESETCURR_ASNMEMORYCOMPONENT.**BUILDGLOBALSEGMENTTABLE*ABLDGSTCLR.LGSTBEGSETSYSPARADDRESSTO0INCASENOGSTNEEDEDMOVE.LGSTSIZ(PC),D2NEEDGST?BEQ.SBLDUSTBRANCHIFNO)MOVE.LD2,A0PUTSIZEINA0FORPAGEALOC(MOVE.L#T0PAGAL,D0PAGEALOCDIRECTIVE#TRAP#0EXECCALL%BRA.SBLDGST01BRANCHIFGOODRETURN!BSRKILLERCRASHIFERRORRETURN3BLDGST01MOVE.LA0,GSTBEGSAVEGSTADDRESSFOREXECBSRTBLCLRCLEARGSTTOZEROESMOVE.L#'!GST',(A0)EYECATCHER-MOVE.W#1,GSTNSEG(A0)NUMBEROFGSTSEGMENTS)MOVE.WD2,GSTNPAGE(A0)GSTLENGTHTOGSTLSL.L#8,D2LENGTHINBYTES2SUB.L#GSTENTRY,D2SUBTRACTLENGTHOFHEADERINFO&DIVU#GSTEL,D2DIVIDEBYENTRYLENGTH-MOVE.WD2,GSTMENT(A0)SAVEMAXIMUM#ENTRIES)LEAGSTENTRY(A0),A2ADDRESSOF1STENTRY%MOVE.LA2,GSTFENT(A0)SAVEINHEADER**BUILDUSERSEMAPHORETABLE*9BLDUSTCLR.LUSTBEGCLEARUSTADDRESSINCASENONENEEDEDMOVE.LUSTSIZ(PC),D2NEEDUST?BEQ.SBLDVTUBRANCHIFNO(MOVE.LD2,A0PUTSIZEINA0FORPAGALOC,MOVE.L#T0PAGAL,D0DIRECTIVE#FORPAGEALOCTRAP#0EXECCALL%BRA.SBLDUST01BRANCHIFGOODRETURNBSRKILLERCRASHIFNOMEMORY3BLDUST01MOVE.LA0,USTBEGSAVEUSTADDRESSFOREXECBSRTBLCLRCLEARUSTTOZEROES*MOVE.L#'!UST',UST(A0)EYECATCHERTOUST)MOVE.W#1,USTNSEG(A0)ONLY1USTSEGMENT(MOVE.WD2,USTNPAGE(A0)#PAGESINTABLE#LSL.L#8,D2CONVERTPAGESTOBYTES(SUB.L#USTENTRY,D2SUBRTACTHEADERSIZE&DIVU#USTEL,D2DIVIDEBYENTRYLENGTH-MOVE.WD2,USTMENT(A0)SAVEMAXIMUM#ENTRIES(LEAUSTENTRY(A0),A2FIRSTENTRYADDRESS(MOVE.LA2,USTFENT(A0)SAVEITINHEADER**BUILDVECTORUSETABLE*+BLDVTUMOVE.L#1,A0SIZEISALWAYSONEPAGE,MOVE.L#T0PAGAL,D0DIRECTIVE#FORPAGEALOCTRAP#0EXECCALL%BRA.SBLDVTU01BRANCHIFGOODRETURN$BSRKILLERCRASHIFNOMEMORYFOUNDTHEN.SBRANCHIFNO#MOVE.L#1,D2PATminimumsizeis1ENDI)MOVE.LD2,A0PUTSIZEINA0FORPAGEALOC(MOVE.L#T0PAGAL,D0PAGEALOCDIRECTIVE#TRAP#0EXECCALL%BRA.SBLDPAT01BRANCHIFGOODRETURN!BSRKILLERCRASHIFERRORRETURN3BLDPAT01MOVE.LA0,PATBEGSAVEPATADDRESSFOREXECBSRTBLCLRCLEARPATTOZEROESMOVE.L#'!PAT',(A0)EYECATCHER#LSL.W#8,D2CONVERTPAGESTOBYTES&MOVE.LD2,PATTSIZ(A0)SAVETABLESIZELEA0(A0,D2),A2TOPOFTABLE)LEAPATENTRY(A0),A1ADDRESSOF1STENTRYLEAPATFHDR-PATNEXT(A0),A4:BLDPAT04MOVE.LA1,PATNEXT(A4)SAVEENTRYADDRESSINCHAIN)MOVE.L#-1,PATTCB(A1)FLAGENTRYASFREE(MOVE.LA1,A4SAVECURRENTENTRYADDRESS%LEAPATEL(A1),A1POSSIBLENEXTENTRY#LEAPATEL(A1),A3POINTBEYONDNEXTCMP.LA3,A2WILLITFIT?#BCCBLDPAT04YES,GOINITIALIZEIT E*InserttwodummyentriesintothePATlist.TheseentrieswillhaveG*themaximumpossibledeltaandwillcauseandexecproceduretofire.F*ThecodefortheexecprocedureiscontainedintheRMS.SAmoduleofE*RMS68K.ThesenodesareplacedonthePATsothatthePATlistwillE*neverbeempty,simplifyingPATprocessinginmanyplaces.WhentheG*PATnodefires,theassociatedcodeintheRMS.SAmodulegetscontrolG*andthiscodesimplyplacesadummyPATnode(liketheonethatfiredE*togetushere)attheveryendofthePATlist.ThisschedulingofI*thedummyPATnodeisaspecialcaseinthatitdoesnotusethenormal/*PATnodescheduleroutinePAT_SCHED_NEW_NODE. #'DUMY'DO.S LEA2(A3),A3ENDW LEA4(A3),A3$*A3nowcontainstheaddressofthe"*execcodetoreschedulethenode"BSR.SBLDPAT12Buildadummynode;MOVE.LA4,PATHDR(A0)LinkthedummynodeintothePATlist4MOVE.LA4,A2Saveaddrofthisnodeforfuturelink1BSR.SBLDPAT12Buildanidentical2nddummynode/MOVE.LA4,PATNEXT(A2)Link2ndnodebehind1stMOVE.L#PATBIGDELTA,NSE>MOVE.L#PATBIGDELTA,TIME_LEFTMakeTIME_LEFTasbigaswecanCLR.LMIDNIGHT.BRA.SBLDUDRDonewithPATstuffalltogether*$* Subroutine to build dummy PAT node:BLDPAT12MOVE.LPATFHDR(A0),A4A4pointstofreePATentry@MOVE.LPATNEXT(A4),PATFHDR(A0)Unlinkthisentryfromfreelist*InitializePATentriesCLR.LPATNEXT(A4)$CLR.LPATTCB(A4)Indicateexecnode5MOVE.L#PATBIGDELTA,PATDELTA(A4)MakedeltaverybigCLR.LPATINTV(A4)'MOVE.LA3,PATASR(A4)Executionaddress(CLR.WPATOPT(A4)Options-notperiodic4MOVE.L#PATDUMMYID,PATARID(A4)PluginthedummyID> 4MOVE.W#$FFFF-$0700,PATILVL(A4)Interruptlevel=0RTS *$*BUILDUSERDEFINEDDIRECTIVETABLE*9BLDUDRCLR.LUDRBEGCLEARUDRADDRESSINCASENONENEEDEDMOVE.LUDRSIZ(PC),D2NEEDUDR?BEQ.SBLDTRACBRANCHIFNO(MOVE.LD2,A0PUTSIZEINA0FORPAGALOC,MOVE.L#T0PAGAL,D0DIRECTIVE#FORPAGEALOCTRAP#0EXECCALL%BRA.SBLDUDR01BRANCHIFGOODRETURNBSRKILLERCRASHIFNOMEMORY3BLDUDR01MOVE.LA0,UDRBEGSAVEUSTADDRESSFOREXECBSRTBLCLRCLEARUSTTOZEROES*MOVE.L#'!UDR',UDR(A0)EYECATCHERTOUDR#LSL.L#8,D2CONVERTPAGESTOBYTES(SUB.L#UDRENTRY,D2SUBRTACTHEADERSIZE(DIVU#UDRESIZ,D2DIVIDEBYENTRYLENGTH,MOVE.WD2,UDRCNT(A0)SAVEMAXIMUM#ENTRIES**BUILDTRACETABLE*DBLDTRACCLR.LTRACEBEGCLEARSYSPARADDRESSINCASETRACENOTNEEDED'MOVE.LTRCSIZ(PC),D2NEEDTRACETABLE?BEQ.SBLDTIATBRANCHIFNO)MOVE.LD2,A0PUTSIZEINA0FORPAGEALOC(MOVE.L#T0PAGAL,D0PAGEALOCDIRECTIVE#TRAP#0EXECCALL%BRA.SBLDTRC01BRANCHIFGOODRETURNBSRKILLERCRASHIFNOMEMORY1BLDTRC01MOVE.LA0,TRACEBEGSAVEADDRESSFOREXEC'BSRTBLCLRCLEARTRACETABLETOZEROES+LEATRCENTRS(A0),A2ADDRESSOFFIRSTENTRYMOVE.LA2,(A0)SAVEINHEADER#LSL.L#8,D2CONVERTBYTESTOPAGES(SUB.L#TRCENTRS,D2SUBTRACTHEADERSIZE'DIVU#TRCENTSZ,D2DIVIDEBYENTRYSIZE)MULU#TRCENTSZ,D2MULTIPLYBYENTRYSIZE$ADD.LA2,D2ADDENTRYSTARTADDRESS4MOVE.LD2,TRCLNG(A0)SAVEENDADDRESSOFLASTENTRY*,MOVE.WTRCFLAG(PC),TRACFLAGSETTRACEFLAGS*#*TRAPINSTRUCTIONASSIGNMENTTABLE*>BLDTIATMOVE.L#$01010000,TIATSETTRAP0AND1'USEDBYEXEC'PAGE*0*INITIALIZECONFIGURATION-DEPENDENTI/ODEVICES* XREFINITIO)BSRINITIOSUBROUTINEWILLINITIALIZEIO*1*CREATETASKCONTROLBLOCKSFORROMBASEDSYSTEM**LOOKTCBTST.LTCBHDDOTCBSALREADYEXIST?%BNEBLDTCB99BRANCHIFYES-NOTROM'CLR.LREADYHDBESUREREADYHDISCLEAR4LEAENDMEMT(PC),A3STARTSEARCHATENDOFMEMTABLELEA$200(A3),A1ENDOFSEARCH,MOVE.L#'!TCB',D0INITIALIZED0FORCOMPARE'LOOKT2CMP.L(A3),D0LOOKFORMINITCBSBEQ.SBLDTCBSBRANCHIFFOUND!ADD.L#2,A3CHECKALLEVENBYTESCMP.LA3,A1ENDOFSEARCH?BNELOOKT2LOOPBACKBSRKILLERQUITIFNOTCBS*)BLDTCBSLEA4(A3),A3STARTOFTABLEENTRY!MOVE.B18(A3),D4TASKPRIORITIESLSL.W#8,D4USEPRIORITYTWICE)MOVE.B18(A3),D4FORBOTHCURRANDLIMIT SWAPD4PRIORITIESTOUPPER1/2!MOVE.W22(A3),D4TASKATTRIBUTESMOVE.L24(A3),D5ENTRYADDRESS CLR.LD6MOVE.W16(A3),D6USERNUMBER,MOVE.W#$8000,D7OPTIONS-MONITORSUPPLIED1MOVE.L#T0CRTCB,D0DIRECTIVENUMBER-CREATETCBTRAP#0EXECDIRECTIVE$BRA.SBLDTCB2BRANCHIFGOODRETURN&BSR.SKILLERQUITIFREQUESTREJECTED*#BLDTCB2MOVE.W20(A3),D2STATEWORD#MOVE.WD2,TCBSTATE(A5)SAVEINTCB!BTST#TSK2NRDY,D2ONREADYLIST?BEQ.SBLDTCB3BRANCHIFNO3MOVE.LREADYHD,TCBREADY(A5)LINKTOPREVIOUSENTRY MOVE.LA5,READYHDADDNEWENTRY**PUTTSTINFOINTOTCB*+BLDTCB3LEA28(A3),A2STARTOFTSTMMUINFO)MOVE.L#SEGMENTS-1,D0MAX#SEGMENTS-1CLR.LD1CLEARFORCOUNT%BLDTCB4TST.W6(A2)TESTSEGMENTTYPE#BEQ.SBLDTCB6BRANCHIFNOSEGMENT$ADD.L#1,D1COUNTSEGMENTSEXISTING.BLDTCB6LEA8(A2),A2INCREMENTTONEXTSEGMENT*DBRAD0,BLDTCB4DECREMENTANDBRANCHBACK*$LEA28(A3),A3STARTOFTSTMMUINFO(MOVE.LTCBTST(A5),A4ADDRESSOFNEWTST.MOVE.BD1,TSTCSEGS(A4)SAVEACTUAL#SEGMENTS,LEATSTMMU(A4),A4ADDRESSOFMMUWITHINTST-MOVE.L#4*SEGMENTS-1,D0#LONGWORDSTOMOVE2BLDTCB8MOVE.L(A3)+,(A4)+MOVEMMUANDATTRIBUTES(DBRAD0,BLDTCB8CONTINUETILLALLMOVEDCMP.L#'!TCB',(A3)MORETCB'S?BEQBLDTCBSBRANCHIFYESBLDTCB99* *STARTTIMER* XREFTIMERST3BSRTIMERSTINVOKECONFIGURATION-DEPENDENTROUTINE*(*INDICATESYSTEMRUNNINGONFRONTPANEL*-FPGOMOVE.LEXCSTACK,A7RESTORESTACKPOINTER)MOVE.W#$C0,D1WANT'C0'INPANELLIGHTS> 4BSR.SPANELEDESETLIGHTS-ENABLEREADY/FAILLIGHT**GOTOEXEC-INITCOMPLETE*:INITENDMOVE.LDISPATCH(PC),-(A7)ADDRESSOFSTARTOFEXECRTSGOTOEXEC*%*KILLERROUTINE--ERRORDURINGINIT*KILLERPEA(A6)SAVEREGISTER6 LEACRASHSAV,A6CRASHSAVEAREA'MOVE.L4(A7),(A6)SAVEPROGRAMCOUNTER%MOVE.WSR,4(A6)SAVESTATUSREGISTER0DISABLE_INTERRUPTSBESUREINTERRUPTSINHIBITED LEA8(A6),A6REGISTERSAVEAREA-MOVEM.LD0-D7/A0-A5,(A6)SAVEMOSTREGISTERS$MOVE.L(A7)+,56(A6)SAVEREGISTER6$MOVE.LA7,60(A6)SAVESTACKPOINTER'KILLOOPMOVE.W#$A2,D1WANT'A2'INLED/BSR.SPANELEDEPUTITTHERE-ALLOWFAILLIGHT4BRAKILLOOPLOOP-WAITFORSOMEONETODOSOMETHINGPAGE* *TABLECLEAR*'TBLCLRMOVE.LD2,D6GETLENGTHINPAGESLSL.L#8,D6LENGTHINBYTES!TBLCLRBMOVE.LD6,A6LENGTHINA6ADD.LA0,A6END+1INA6$CLR.LD6THEZEROTHATGET'SSTORED&TBLCLRLMOVE.LD6,-(A6)STOREONEWORDCMP.LA0,A6DONE?&BGT.STBLCLRLBRANCHBACKIFNOTDONERTSGOBACKWHENDONE*#*PANELEDE--ENABLETTO--SETLED$*PANELEDD--DISABLETTO--SETLED*-PANELEDEMOVE.W#$10,D0CLEARDISABLETTOBIT&BRA.SPANELD2SKIPAROUNDOTHERENTRY+PANELEDDMOVE.W#$90,D0SETDISABLETTOBIT*PANELD2NOT.BD1USECOMPLEMENTTOSETLEDROR.L#4,D1SEPARATEDIGITSOR.BD1,D0PUTMSDIND0MOVE.W#$02,D1'SETLSD'FLAGROL.L#4,D1LSDIND1!MOVE.LPANEL,A1ADDRESSOFPANEL'LEAFPLEDST(A1),A1LEDSTATUSREGISTER+MOVE.WD1,(A1)SETLEASTSIGNIFICANTDIGITOR.W#$30,D1SETLATCHBITSMOVE.WD1,(A1)LATCHIT*MOVE.WD0,(A1)SETMOSTSIGNIFICANTDIGITOR.W#$30,D0SETLATCHBITSMOVE.WD0,(A1)LATCHITRTS +TTLINITMEMORYPARTITIONS-DOCUMENTATIONPAGEN*********************************************************************************.***Name:IMEM(initialize_memory_partitions).*** ***Function:A***ChecksallmemorylocationsdescribedintheSYSGENedMEMTBL.F***Mapsoutany"holes"inmemory.SetsupFML(freememorylist)andC***FML_HEADER(freememorylistheader)ineachpartition.SetsupE***MEMTBL(memorymappingtable)immediatelyaftertheFML_HEADERin***partitionzero.*** ***Inputs:H***1.)Src_memtbl(createdbySYSGEN)locatedataddressMEMTABLwithin***INITDATdataarea.*** ***Outputs:I***1.)Dest_memtbllocatedimmediatelyaftertheFML_HEADERinpartition ***zero.G***2.)MAPBEGlongwordinSYSPARdataarea.Pointstothedest_memtbl.***(Item#1above.)E***3.)FML_HEADERsforallRAMmemorypartitions.(Pointedtobythe***dest_memtbl.)@***4.)FMLsforallRAMmemorypartitions.(Pointedtobytheir***FML_HEADERs.)******Sideeffects:C***1.)Allregistersdestroyed,exceptforthestackpointer(A7).)***2.)Mightneverreturn(callKILLER).***H***Explanation:ThisroutineisbasicallyadriverforinitializingtheB***memorypartitions.ItisprimarilyconcernedwithinitializingI***partitionzero.Thelastsubroutinecall(callinit_next_partitions),H***handlestheinitializationofallmemorypartitionsexceptpartitionI***zero.ThisuniquehandlingofpartitionzeroisneccessaryduetotheI***factthattheINITmoduleresidesinaportionofpartitionzerothatD***willlaterbeusedbythesystem.Weobviouslycannotclearthis ***memory.***D***Thefirstcallsetsuptheneccessarypointerstothesrc_memtblF***andtopartitionzero.ThenextcallwillbuildtheFML(clearanyE***memorynotintheINITmodule,mapoutany"holes"inmemory,andA***setuptheFMLlinkedlistdescribingtheavailablememoryinG***partitionzero).Ifthefirst_node_ptrisreturnedaszero,thenweF***didnotfindevenone256byteblockofavailablememory.SinceweE***needatleastoneblockinpartitionzerofortheMEMTBL,thisis3***obviouslyafatalerror,andsowecallKILLER.***F***Nextwecallbuild_fml_headertobuildtheFML_HEADERinpartition? E***zero.Ifthefml_header_ptrisreturnedaszero,thenwecouldn'tC***findenoughmemoryinpartitionzerofortheFML_HEADERandtheG***dest_memtbl,sowecannotcontinue,andthereforemustcallKILLER.***@***Otherwise,wesetourdest_memtbl_ptrtopointtothememory@***immediatelyaftertheFML_HEADERforpartitionzero,andsetF***theMAPBEGvariableinSYSPARequaltothisvalue.FinallywecallF***build_ram_memtbl_entrytorecordthisrampartitionintheMEMTBL,D***andcallinit_next_partitionstoinitializeallpartitionsafter***partitionzero.***L****************************************************************************2TTLINITMEMORYPARTITIONS-REGISTERASSIGNMENTSPAGEL**********************************************************************************A0=src_memtbl_ptr;7***Pointstothe"source"MEMTBLinINITDATdataarea.******A1=dest_memtbl_ptr;<***Pointstothe"destination"MEMTBLimmediatelyafterthe!***FML_HEADERinpartitionzero.***+***A2=temp_memtbl_ptr/previous_node_ptr;?***Sharedregister.Duringcheck_memmap_conflictitisusedtoB***stepthroughthedest_memtbllookingforconflictsbetweentheB***"current"RAMpartition(pointedtobythesrc_memtbl_ptr)andB***anypreviously-definedRAMpartitions(pointedtobythetemp_***memtbl_ptr.)C***Duringbuild_fml(anditssubroutinebuild_fml_node)A2isused;***topointtothe"previous"nodeintheFMLlinkedlist.******A3=first_node_ptr;0***PointstothefirstnodeinthecurrentFML.******A4=last_node_ptr;/***PointstothelastnodeinthecurrentFML.***&***A5=clear_mem_ptr/fml_header_ptr;@***Sharedregister.Duringbuild_fml(andbuild_fml_node)itis<***usedtopointtothenextmemorylocationtobecleared.<***Duringalltheotherroutinesitisusedtopointtothe***FML_HEADERblock.***A6=scratch;****** ***D0=0;B***Usedforzeroingoutmemory,andcheckingifaddressregisters***areequaltozero.******D1-D3=scratch;******D4=start_of_part_ptr;:***Pointstothestartofthe"current"memorypartition.******D5=end_of_part_ptr;8***Pointstotheendofthe"current"memorypartition.******D6=bytes_cleared;>***Containsacountofthenumberofthebytesclearedinthe?***"current"memorypartition.Whenwefinda"hole"inmemory@***(takeabus_error),thenwestopincrementingbytes_cleared.C***Thusbytes_clearedwillcontainacountofthenumberof"good"?***bytesinthecurrentblockofthecurrentmemorypartition.D***Thisvaluewillbeusedtodescribetheammountof"free"memory***inthecurrentblock.******D7=fml_header_len;C***Containsacountofthenumberof256byteblocksneccessarytoA***describethe"current"FML_HEADER.Thisvalueisusuallyone.@***ItwasmadeintoavariableinordertoaccommodatethecaseA***wheretheFML_HEADER(26bytes)andthedest_memtbl("n"*10>***bytes)requiredmorethanone256byteblock.Thisaddeda<***certainammountofcomplexitytothealgorityhms,butitA***removedtheratherarbitraryrestrictionthatthedest_memtblB***mustbelimitedto(256-26)/10or23entries.(Dest_memtbl2***couldonlydescribe23RAMorROMpartitions.)***L****************************************************************************'TTLINITMEMORYPARTITIONS-ALGORITHMPAGE#*init_memory_partitions: procedure;    *callinit_pointers;*callbuild_fml;*if(first_node_ptr=0)*thencallKILLER;*callbuild_fml_header;*if(fml_header_ptr=0)*thencallKILLER;;*dest_memtbl_ptr<==fml_header_ptr+length(fml_header);&*SYSPAR(MAPBEG)<==dest_memtbl_ptr;*callbuild_ram_memtbl_entry;*callinit_next_partitions;  *end init_memory_partitions;PAGE"TTLINITMEMORYPARTITIONS-CODE*#*init_memory_partitions: procedure;*IMEM:**callinit_pointers;*callbuild_fml;? *if(first_node_ptr=0)*thencallKILLER;* BSR.SIPTRS BSRBFML IF.LA3D0THEN.S BSRKILLERENDI **callbuild_fml_header;*if(fml_header_ptr=0)*thencallKILLER;;*dest_memtbl_ptr<==fml_header_ptr+length(fml_header);&*SYSPAR(MAPBEG)<==dest_memtbl_ptr;* BSRBFMLHEAD IF.LA5D0THEN.S BSRKILLERENDI LEAFMLHDSZ(A5),A1 MOVE.LA1,MAPBEG **callbuild_ram_memtbl_entry;*callinit_next_partitions;* BSRBRAMNODE BSR.SINEXTMEM **end init_memory_partitions;*RTS "TTLINITPOINTERS-DOCUMENTATIONPAGEN********************************************************************************* ***Name:IPTRS(init_pointers):*** ***Function:A***Initializesallpointersandcountersforinitializingmemory***partitionzero.*** ***Inputs:1***1.)Src_memtblinINITDATataddressMEMTABL.*** ***Outputs:***1.)A0=src_memtbl_ptr;***2.)A5=clear_mem_ptr;***3.)D0=0;***4.)D4=start_of_part_ptr;***5.)D5=end_of_part_ptr;***6.)D6=bytes_cleared;***7.)D7=fml_header_len;******Sideeffects:****1.)A2(temp_memtbl_ptr)isdestroyed.$***2.)D1(scratch)getsdestroyed.)***3.)Mightneverreturn(callKILLER).******Explanation:***?***FirstweinitializeD0andthesrc_memtbl_ptr.IfthefirstI***entryinthesrc_memtblisnotaRAMpartitionwhosepartitionnumber<***iszero,thenwecannotcontinue,andsowecallKILLER.***E***Nextweinitializefml_header_lentoequalthenumberof256byteG***blocksneccessarytocontaintheFML_HEADERforpartitionzero,andB***oneentryinthedest_memtblforeveryentryinthesrc_memtbl9***(includingthelastentrydelimitingthesrc_memtbl).***D***Nowweinitializetheend_of_part_ptrtopointtothe"floor"ofB***theMAPENDAfieldofthefirstentryinthesrc_memtbl.(Note:H***throughoutthesealgorithmswewillalwaystakethe"ceiling"oftheH***startofthepartition,andthe"floor"oftheendofthepartition.K***Thisinsuresthatallpartitionsstartandendona256byteblock,andG***alsothatweonlygrabthesameammountofmemory,orless,thatis%***describedwithinthesrc_memtbl.)***E***Now,iftheexecisinpartitionzero,thenthestart_of_part_ptrD***pointstothenext256byteblockaftertheendoftheexec,theJ***clear_mem_ptrpointstothenext256byteblockafterthestartoftheH***INITmodule,andbytes_clearedgetssettothedisplacementfromtheI***startoftheINITmoduletotheendoftheINITDATdataarea(alsoonH***a256byteboundary).Theclear_mem_ptrandbytes_clearedaresetupF***inthiswayinordertotellthebuild_fmlsubroutinethatwehaveG***startedclearingmemoryatthelocationpointedtobyclear_mem_ptr@***andwehavealreadyclearedbytes_clearedlocations.ThisisI***neccessarybecausewewishtoreclaimthememoryoccupiedbytheINITD***moduleasfreememoryinpartitionzero,butweobviouslycannotG***clearitoutatthispointintime.Thuswemustfakeoutbuild_fmlB***intothinkingthatwehavealreadyclearedtheINITportionofI***partitionzero.Finally,ifTCBHEAD=0,(wehaveminiTCBsfollowingF***thesrc_memtbl),thenweincrementbytes_clearedby$800toinsure)***thatwedon'tzeroouttheminiTCBs.***D***Iftheexecisnotinpartitionzero,thenwesetbothstart_of_G***part_ptrandclear_mem_ptrtopointtothenext256bytepageafter8***theSYSPARdataarea,andsetbytes_clearedtozero.***B***Finally,ifthestart_of_part_ptrandend_of_part_ptrdescribeF***apartitionthatdoesnotcontainsomepositiveammountofmemory,=***thenweobviouslycannotcontinue,andsowecallKILLER.***L**************************************************************************** TTLINITPOINTERS-ALGORITHMPAGE@ *init_pointers: procedure;   *DO<==0;.*src_memtbl_ptr<==addr(INITDAT(MEMTABL));0*if(MAPMTYP.MAPPART(src_memtbl_ptr)<>$0000)*thencallKILLER; *fml_header_len<==0;%*temp_memtbl_ptr<==src_memtbl_ptr;7*dountil(MAPMTYP.MAPPART(temp_memtbl_ptr)=$FFFF);%*fml_header_len<==fml_header_len+*length(dest_memtbl_entry);'*temp_memtbl_ptr<==temp_memtbl_ptr+*length(src_memtbl_entry); *end;C*fml_header_len<==(length(fml_header)+length(memtbl_entry)+,*(temp_memtbl_ptr-src_memtbl_ptr))/256; 7*end_of_part_ptr<==floor(MAPENDA(src_memtbl_ptr));)*if(execisinpartitionxero)thendo;.*start_of_part_ptr<==ceil(INITDAT(EEND));(*clear_mem_ptr<==ceil(addr(START));5*bytes_cleared<==ceil(addr(INITDAT(ENDMEMT)))-*clear_mem_ptr;*if(INITDAT(TCBHEAD)=0).*thenbytes_cleared<==bytes_cleared+$800;*end; *elsedo;7*start_of_part_ptr<==ceil(addr(SYSPAR(ENDSYSP)));&*clear_mem_ptr<==start_of_part_ptr;*bytes_cleared<==0;*end; +*if(start_of_part_ptr>=end_of_part_ptr)*thencallKILLER;  *end init_pointers; TTLINITPOINTERS-CODEPAGE**init_pointers: procedure;* IPTRS:* *D0<==0;.*src_memtbl_ptr<==addr(INITDAT(MEMTABL));,*if(MAPMTYP.MAPPART(src_memtbl_ptr)<>0)*thencallKILLER;* CLR.LD0 LEAMEMTABL(PC),A0 IF.W(A0)D0THEN.S BSRKILLERENDI **fml_header_len<==0;%*temp_memtbl_ptr<==src_memtbl_ptr;7*dountil(MAPMTYP.MAPPART(temp_memtbl_ptr)=$FFFF);%*fml_header_len<==fml_header_len+*length(dest_memtbl_entry);'*temp_memtbl_ptr<==temp_memtbl_ptr+*length(src_memtbl_entry);*end;* CLR.LD7 LEA(A0),A2 REPEATADD.L#MAPENTSZ,D7LEA12(A2),A2UNTIL.W(A2)#$FFFF *5*fml_header_len<==ceil(length(fml_header_node)+*fml_header_len+$*length(dest_memtbl_entry))/256;7*end_of_part_ptr<==floor(MAPENDA(src_memtbl_ptr));*!ADD.L#(FMLHDSZ+MAPENTSZ+255),D7 LSR.L#8,D7 MOVE.LMAPENDA(A0),D5 CLR.BD5 *)*if(execisinpartitionzerothendo);.*start_of_part_ptr<==ceil(INITDAT(EEND));(*clear_mem_ptr<==ceil(addr(START));5*bytes_cleared<==ceil(addr(INITDAT(ENDMEMT)))-*clear_mem_ptr;*if(INITDAT(TCBHEAD)=0).*thenbytes_cleared<==bytes_cleared+$800;*end;**MOVE.LEEND(PC),D4D4<==INITDAT(EEND).8IF.LD4D5THEN.SIf(exec_endD0THEN.SADD.L#$800,D6ENDI * *elsedo;7*start_of_part_ptr<==ceil(addr(SYSPAR(ENDSYSP)));&*clear_mem_ptr<==start_of_part_ptr;*bytes_cleared<==0;*end;*ELSE.SMOVE.L#ENDSYSP+255,D4 CLR.BD4 MOVE.LD4,A5 CLR.LD6ENDI *+*if(start_of_part_ptr>=end_of_part_ptr)*thencallKILLER;*IF.LD4D5THEN.S BSRKILLERENDI **end init_pointers;*RTS )TTLINIT_NEXT_PARTITIONS-DOCUMENTATIONPAGEN*************************************************************************************Name:INEXTMEM(init_next_partitions):*** ***Function:=***Initializesallpartitionsexceptpartitionzero.ForROMH***partitions,wemakeanentryinthedest_memtbl.ForRAMpartitions,A***weinsurethatnoconflictexistswithapreviously-describedH***partition,buildtheFML,buildtheFML_HEADER,andmakeanentryin***thedest_memtbl.*** ***Inputs:***1.)A0=src_memtbl_ptr;2***(Pointstothefirstentryinthesrc_memtbl.)***2.)A1=dest_memtbl_ptr;3***(Pointstothefirstentryinthedest_memtbl.)*** ***Outputs:***1.)Dest_memtbl.#***2.)FMLforallRAMpartitions.@ +***3.)FML_HEADERsforallRAMpartitions.******Sideeffects:B***1.)Mostregistersaredestroyed,exceptforthestackpointer ***(A7).******Explanation:D***WekeeploopinguntiltheMAPMTYPandMAPPARTfieldsofthenextH***entryinthesrc_memtblbothcontain$FF.(ThisindicatestheendofH***thememtbl.)Whenweseetheendofthesrc_memtbl,thenwewritean.***endentryforthedest_memtbl,andreturn.***E***Foreverygoodentryinthesrc_memtblwecallinit_next_pointersG***tosetupourpointersandcountersforthismemorypartition.ThenE***iftheMAPMTYPfieldofthesrc_memtblentry=$FF,wehaveaROM4***partitionandsowecallbuild_rom_memtbl_entry.***8***ForeveryRAMentryinthesrc_memtbl,wefirstcallG***check_memmap_conflicttoinsurethatthecurrentRAMpartitiondoesH***notconflictinanywaywithapreviously-describedpartition.ThereG***arethreepossiblereturnconditionsfromthecheck_memmap_conflict***subroutine:'***1.)Afatalconflictwasdetected-;***Executionwillneverreturn(check_memmap_conflictwill***callKILLER).@***2.)Thispartitionisanaliasofapreviouspartition(both+***partitionsstartatthesameaddress)-;***Executionwillreturn,andthegot_alias_partition_flag***willbeset.+***3.)Thispartitionisanewpartition-;***Executionwillreturn,andthegot_alias_partition_flag***willbereset.H***Therefore,ifexecutionreturns,andthegot_alias_partition_flagis@***set,wecallbuild_ram_memmap_entrytobuildanentryinthe(***dest_memtblforthealiaspartition.***C***Ifexecutionreturnsandthegot_alias_partition_flagisreset,H***thenwecallbuild_fmltobuildthefreememorylistforthenewRAMB***partition.Theniftheprevious_node_ptrisnotequaltozero,C***build_fmlfoundatleastone256bytepageofmemoryinthenewI***partitionandsowecallbuild_fml_headertobuildtheFML_HEADERforA***thenewpartition.Now,sincethisisnotpartitionzero,andH***thereforeallFML_HEADERsrequireonlyone256byteblockofmemory,A***weknowthatbuild_fml_headersuccessfullyfoundroomfortheD***FML_HEADERandsowecancallbuild_ram_memtbl_entrytobuildan7***entryforthecurrentpartitioninthedest_memtbl.***=***Iftheprevious_node_ptrisequaltozero,thenbuild_fmlE***didnotfindevenone256bytepagewithinthecurrentpartition.=***Inthiscaseweresetthedest_memtbl_ptrtopointtotheE***previousentrywithinthedest_memtbl(decrementitbythelengthC***ofoneentry).Thishastheeffectofignoringthecurrentnull***partition.***N****************************************************************************** %TTLINITNEXTPARTITIONS-ALGORITHMPAGE!*init_next_partitions: procedure;    >*dowhile(MAPMTYP.MAPPART(next(src_memtbl_ptr))<>$FFFF);*callinit_next_pointers;%*if(MAPMTYP(src_memtbl_ptr)=$FF)#*thencallbuild_rom_memtbl_entry; *elsedo;*callcheck_memmap_conflict;%*if(got_alias_partition_flag=set)#*thencallbuild_ram_memmap_entry; *elsedo;*callbuild_fml;*if(previous_node_ptr=0)*thendest_memtbl_ptr<==*dest_memtbl_ptr-*length(dest_memtbl_entry); *elsedo;*callbuild_fml_header;*callbuild_ram_memtbl_entry;*end;*end;*end;*end;4*MAPTYP.MAPPART(next(dest_memtbl_ptr))<==$FFFF;  *end init_next_partitions; 'TTLINITNEXTMEMORYPARTITIONS-CODEPAGE*!*init_next_partitions: procedure;* INEXTMEM:*>*dowhile(MAPMTYP.MAPPART(next(src_memtbl_ptr))<>$FFFF);*callinit_next_pointers;%*if(MAPMTYP(src_memtbl_ptr)=$FF)#*thencallbuild_rom_memtbl_entry;* WHILE.W12(A0)#$FFFFDO.S BSR.SINEXTPTRS IF.B(A0)#$FFTHEN.S BSRBROMNODE * *elsedo;*callcheck_memmap_conflict;%*if(got_alias_partition_flag=set)#*thencallbuild_ram_memtbl_entry;*A ELSE.S BSRCMEMCONF TST.BD2IFTHEN.S BSRBRAMNODE * *elsedo;*callbuild_fml;*if(previous_node_ptr<>0)*thendest_memtbl_ptr<==*dest_memtbl_ptr-*length(dest_memtbl_entry); *elsedo;*callbuild_fml_header;*callbuild_ram_memtbl_entry;*end;*end;*end;*end;*ELSE.S BSR.SBFML IF.LA2D0THEN.SLEA-MAPENTSZ(A1),A1ELSE.S BSRBFMLHEAD BSRBRAMNODEENDIENDIENDIENDW *5*MAPMTYP.MAPPART(next(dest_memtbl_ptr))<==$FFFF;*#MOVE.W#$FFFF,MAPMTYP+MAPENTSZ(A1) **end init_next_partitions;*RTS 'TTLINITNEXTPOINTERS-DOCUMENTATIONPAGEM********************************************************************************)***Name:INEXTPTRS(init_next_pointers):*** ***Function:C***Initializesallpointersandcountersforallmemorypartitions***exceptpartitionzero.*** ***Inputs:'***1.)A0=previous(src_memtbl_ptr).(***2.)A1=previous(dest_memtbl_ptr).*** ***Outputs:&***1.)A0=current(src_memtbl_ptr).'***2.)A1=current(dest_memtbl_ptr).***3.)A5=clear_mem_ptr.***4.)D4=start_of_part_ptr.***5.)D5=end_of_part_ptr.***6.)D6=bytes_cleared.***7.)D7=fml_header_len.******Sideeffects:1***1.)Executionmightnotreturn(callKILLER).******Explanation:@***Firstwesetthefml_header_lentoone(anypartitionexceptG***partitionzerorequiresonlyone256bytepageforitsFML_HEADER),@***andadvanceboththesrc_memtbl_ptrandthedest_memtbl_ptr.***C***Nextwesetthestart_of_part_ptrtotheceilingoftheMAPSTRAH***fieldinthesrc_memtbl,andtheend_of_part_ptrtotheflooroftheH***MAPENDAfield.(Notethatwealwaysalignourpartitionson256byteI***pageboundaries,andthatwealwaysroundtothesameammountorless+***memoryasdescribedinthesrc_memtbl).***D***Wethensetclear_mem_ptrtothevalueofstart_of_part_ptr,andE***setbytes_clearedtozero.(ThuswewillstartclearingmemoryatG***thestartofthecurrentpartition.)Finally,wecallKILLERiftheG***currentpartitiondescribedbythesrc_memtbldoesnotcontainsome'***positivenumberofpagesofmemory.***L**************************************************************************** #TTLINITNEXTPOINTERS-ALGORITHMPAGE*init_next_pointers: procedure;    *fml_header_len<==1;@*src_memtbl_ptr<==src_memtbl_ptr+length(src_memtbl_entry);C*dest_memtbl_ptr<==dest_memtbl_ptr+length(dest_memtbl_entry); 8*start_of_part_ptr<==ceil(MAPSTRA(src_memtbl_ptr));7*end_of_part_ptr<==floor(MAPENDA(src_memtbl_ptr));&*clear_mem_ptr<==start_of_part_ptr;*bytes_cleared<==0; +*if(start_of_part_ptr>=end_of_part_ptr)*thencallKILLER;  *end init_next_pointers; TTLINITNEXTPOINTERS-CODEPAGE**init_next_pointers: procedure* INEXTPTRS: **fml_header_len<==1;@*src_memtbl_ptr<==src_memtbl_ptr+length(src_memtbl_entry);C*dest_memtbl_ptr<==dest_memtbl_ptr+length(dest_memtbl_entry);* MOVE.L#1,D7 LEA12(A0),A0 LEAMAPENTSZ(A1),A1 *8*start_of_part_ptr<==ceil(MAPSTRA(src_memtbl_ptr));7*end_of_part_ptr<==floor(MAPENDA(src_memtbl_ptr));&*clear_mem_ptr<==start_of_part_ptr;*bytes_cleared<==0;*MOVE.LMAPSTRA(A0),D4ADD.L#255,D4 CLR.BD4 MOVE.LMAPENDA(A0),D5 CLR.BD5 MOVE.LD4,A5 CLR.LD6 *+*if(start_of_part_ptr>=end_of_part_ptr)*thencallKILLER;*IF.LD4D5THEN.S BSRKILLERENDI **end init_next_pointers;*RTS PAGETTLBUILDFML-DOCUMENTATIONL**********************************************************************************Name:BFML(build_fml):*** ***Function:>***Build_fmlwillzerooutmemorystartingatclear_mem_ptr+A***bytes_cleared,andbuildthefreememorylisttodescribetheA F***partition.Italsodetects"holes"inthepartition,anddescribes3***themas"used"memorywithinthecurrentblock.*** ***Inputs:***1.)A5=clear_mem_ptr.***2.)D4=end_of_part_ptr.***3.)D6=bytes_cleared.*** ***Outputs:=***1.)A3=first_node_ptr(fromsubroutinebuild_fml_node).***2.)A4=last_node_ptr."***3.)FMLforcurrentpartition.******Sideeffects:,***1.)A2(previous_node_ptr)isdestroyed.2***2.)A5(clear_mem_ptr)=D5(end_of_part_ptr)./***3.)D1,D2,andD3(scratch)aredestroyed.(***4.)D6(bytes_cleared)isdestroyed.-***5.)Mightnotreturn(mightcallKILLER).******Explanation:B***Firstweinitializethefirst_node_ptrtozero.ThistellstheH***build_fml_nodesubroutinethatweareworkingwiththefirstnodein ***theFML.***C**Notethattheclear_next_nodeandbuild_last_fml_nodelabelscanI***bothbejumpedtobythecodeforhandlingbuserrors(build_fml_be).***B***Atclear_next_nodeweupdatelast_node_ptrtothevalueoftheC***clear_mem_ptr.(Last_node_ptrisaninputtothebuild_fml_nodeG***subroutinetellinghimwherethe"last"orcurrentnodeislocated,H***andisalsoanoutputfromthisroutinetellingthecallerwheretheH***lastnodeintheFMLislocated.)Wealsoincrementclear_mem_ptrbyE***thevalueofbytes_cleared.(Thisisneccessaryinorderto"skipD***over"andnotinitializetheINITcodewhenbuildingtheFMLfor***partitionzero.***B***NextwesetupthestacksothatanybuserrorwillsendustoI***build_fml_be.Thisisthecodethatwillbeusedformappingoverany$***"holes"inthememorypartition.***D***NowweloopuntilweeithercleartherestofthecurrentmemoryF***partition(fallthroughtheloop),orfindaholeinmemory(goto***build_fml_be).***D***IfwedoclearmemorytotheendofthecurrentpartitionwithinG***thisloop,wemustpopthebuserrorvectorjunkoffthestack,andI***calculatethevalueofbytes_cleared(clear_mem_ptr-last_node_ptr).F***ThiscalculationisneccessaryatthispointinordertomakethisE***case(foundablockofallgoodmemory)lookthesameasthecaseE***wherewefoundsomegoodmemoryandthenfounda"hole"inmemoryF***(tookabuserror,andwenttobuild_fml_be).InthatcasewewillH***"freeze"bytes_clearedtothevalueofclear_mem_ptr-last_node_ptrH***inordertorememberthenumberof"good"bytesofmemorywithintheI***currentblock,andincrementclear_mem_ptr(bypages)untilweeitherG***reachtheendofthepartition,orwefindsomemore"good"memory.I***Thusatthatpointourcurrentblockwillbeframedbythelast_node_E***ptr(pointstothestartofthecurrentblock),theclear_mem_ptrJ***(pointtotheendofthecurrentblock),andthebytes_clearedcounterG***whichholdsthenumberof"good"bytesinthecurrentblock(ortheD***numberofbytesoffreememory).Thisismostoftheinformation&***neededtobuildanodeintheFML.***C***Finally,thebuild_last_fml_nodelabelwillbuildanodeinthe;***FMLifthevalueofbytes_clearedisgreaterthanzero.***M***************************************************************************** TTLBUILDFML-ALGORITHMPAGE*build_fml: procedure;    *previous_node_ptr<==0; *clear_next_node:*D1,D2,D3<==0;"*last_node_ptr<==clear_mem_ptr;2*clear_mem_ptr<==clear_mem_ptr+bytes_cleared;*pushaddr(build_fml_be); *push'BE';-*dountil(clear_mem_ptr=end_of_part_ptr);'*four_longwords(clear_mem_ptr)<==0;'*clear_mem_ptr<==clear_mem_ptr+16;*end;*popbus_errorjunkoffstack;2*bytes_cleared<==clear_mem_ptr-last_node_ptr; *build_last_fml_node:*if(bytes_cleared>0)*thencallbuild_fml_entry;  *end build_fml; "TTLBUILDFREEMEMORYLIST-CODEPAGE**build_fml: procedure;*BFML: **previous_node_ptr<==0;*B  SUB.LA2,A2 **clear_next_node:*D1,D2,D3<==0;!*last_node_ptr<==clear_mem_ptr2*clear_mem_ptr<==clear_mem_ptr+bytes_cleared;*pushaddr(build_fml_be); *push'BE';* CNEXTNODE: CLR.LD1 CLR.LD2 CLR.LD3 LEA(A5),A4 LEA(A5,D6.L),A5 PEABFMLBE(PC) MOVE.W#'BE',-(A7) *-*dountil(clear_mem_ptr=end_of_part_ptr);'*four_longwords(clear_mem_ptr)<==0;'*clear_mem_ptr<==clear_mem_ptr+16;*end;*REPEATMOVEM.LD0-D3,(A5)/NOPThisNOPforcestheexecutionunittowait)*untilthebusinterfaceunitisdoneon&*a68020,incasewegetabuserror.LEA16(A5),A5UNTIL.LA5D5**popbus_errorjunkoffstack;2*bytes_cleared<==clear_mem_ptr-last_node_ptr;* ADD.L#6,A7 MOVE.LA5,D6 SUB.LA4,D6 **build_last_fml_node:*if(bytes_cleared>0)*thencallbuild_fml_entry;* BLASTNODE:IF.LD6D0THEN.SBSR.SBFMLNODEENDI **end build_fml;*RTS 4TTLBUSERRORWHILECLEARINGMEMORY-DOCUMENTATIONPAGEN************************************************************************************Explanation:?***Thiscodeisexecutedifweencounteraholewhileclearing@***memory.Notethetwolabelsbuild_fml_beandbuild_fml_be_x.G***Executionwill"goto"thebuild_fml_belabelifabuserroroccursB***whenclearingmemoryviatheloopinthebuild_fmlsubroutine.F***Likewise,executionwill"goto"thebuild_fml_be_xlabelifabusH***erroroccurswhilelookingatthetopofeachpageofmemoryfortheF***next"good"page.(i.e.,Thisblockofcodecontainsa"buserror"G***loop.Wekeepgoingtobuild_fml_be_xuntilweeitherreachtheend:***ofthecurrentpartition,orfindsome"good"memory.)***A***Firstwecalculatebytes_clearedtobethedifferencebetweenG***theclear_mem_ptrandthelast_node_ptr.ThenwecallKILLERiftheJ***buserroroccurredinthemiddleofapage.(Bytes_clearedisnotona***pageboundary.)***E***Otherwise,weupdatetheclear_mem_ptrtopointtothetopoftheG***nextpageinmemory.Ifweareattheendofthecurrentpartition,@***thenwegotothebuild_last_fml_nodelabelinthebuild_fml***subroutine.***B***Ifwearenotattheendofthepartition,wesetthestackupF***sothatabuserrorwillsendusbacktothebuild_fml_be_xlabel.G***ThenweattempttowriteintothememorylocationpointedtobytheF***clear_mem_ptr.(Ifabuserroroccurs,thenexecutionwill"goto"I***build_fml_be_x,andwewill"loop"untilwerunoutofmemoryinthis+***partition,orfindsome"good"memory.)***D***Ifwe"fallthrough"tothenextinstruction(findagoodmemoryI***location),thenwegetridofthebuserrorinformationonthestack.J***Ifwefoundsomegoodmemoryinthecurrentblock(bytes_cleared>0),E***thenwecallbuild_fml_nodetobuildanodeintheFML,andresetI***bytes_clearedtozero.Ineithercasewegotoclear_next_nodeinthe***build_fmlsubroutine.***N****************************************************************************** 0TTLBUSERRORWHILECLEARINGMEMORY-ALGORITHMPAGE*build_fml_be:2*bytes_cleared<==clear_mem_ptr-last_node_ptr;$*if(mod(bytes_cleared,256)<>0)*thencallKILLER; *build_fml_be_x:(*clear_mem_ptr<==clear_mem_ptr+256;&*if(clear_mem_ptr=end_of_part_ptr)!*thengotobuild_last_fml_node;*pushaddr(build_fml_be_x); *push'BE';*word(clear_mem_ptr)<==0;*popbus_errorjunkoffstack;!*if(bytes_cleared>0)thendo;*callbuild_fml_node;*bytes_cleared<==0;*end;*gotoclear_next_node;  *end build_fml_be; +TTLBUSERRORWHILECLEARINGMEMORY-CODEPAGE**build_fml_be:*BFMLBE: *2*bytes_cleared<==clear_mem_ptr-last_node_ptr;$*if(mod(bytes_cleared,256)<>0)*thencallKILLER;* MOVE.LA5,D6 SUB.LA4,D6 IF.BD6D0THEN.S BSRKILLERENDIB  **build_fml_be_x:*BFMLBEX: *(*clear_mem_ptr<==clear_mem_ptr+256;&*if(clear_mem_ptr=end_of_part_ptr)!*thengotobuild_last_fml_node;*LEA256(A5),A5 IF.LA5D5THEN.SBRABLASTNODEENDI**pushaddr(build_fml_be_x); *push'BE';*word(clear_mem_ptr)<==0;*PEABFMLBEX(PC)MOVE.W#'BE',-(A7) MOVE.WD0,(A5)/NOPThisNOPforcestheexecutionunittowait)*untilthebusinterfaceunitisdoneon&*a68020,incasewegetabuserror. **popbus_errorjunkoffstack;!*if(bytes_cleared>0)thendo;*callbuild_fml_node;*bytes_cleared<==0;*end;*gotoclear_next_node;* ADD.L#6,A7 IF.LD6D0THEN.SBSR.SBFMLNODE CLR.LD6ENDI  BRACNEXTNODE #TTLBUILDFMLNODE-DOCUMENTATIONPAGEL*******************************************************************************$***Name:BFMLNODE(build_fml_node):*** ***Function:E***Buildsanodeinthefreememorylist(fillsinthefmlfp,fmlbp,E***fmlfree,andfmlusedfields),andlinksthisnodetoanyprevious***nodesintheFML.*** ***Inputs:***1.)A2=previous_node_ptr.***2.)A4=last_node_ptr.***3.)A5=clear_mem_ptr.***4.)D6=bytes_cleared.*** ***Outputs:8***1.)FMLnode(pointedtobypreviouslast_node_ptr).D***2.)FmlfpofpreviousnodeinFML(ifthisisnotthefirstnode***intheFML).C***3.)A3=first_node_ptr(ifthisisthefirstnodeintheFML).***4.)A4=previous_node_ptr.******Sideeffects:"***1.)D1(scratch)isdestroyed.******Explanation:B***Firstwesetupthefmlfpandfmlbplinksinthecurrentnode.E***NextwesetupfmlusedtocontainthenumberofpagesbetweentheA***last_node_ptrandtheclear_mem_ptrminusthenumberofpagesE***describedbythebytes_clearedcounter.ThenwesetfmlfreeequalG***tothenumberofpagesdescribedbythebytes_clearedcounter.ThusJ***thesumoffmlusedandfmlfreeisequaltothenumberofpagesbetween-***thelast_node_ptr,andtheclear_mem_ptr.***E***Now,ifthisisthefirstnodeintheFML(previous_node_ptr=0)K***thensetfirst_node_ptrequaltolast_node_ptrandthus"remember"thatG***thisisthefirstnode.Otherwise,updatethefmlfpofthepreviousF***nodetopointtothisnode.Finallysetprevious_node_ptrequalto>***last_node_ptr(andthus"remember"thisnode),andreturn.***M***************************************************************************** TTLBUILDFMLNODE-ALGORITHMPAGE*build_fml_node: procedure;    *fmlfp(last_node_ptr)<==0;.*fmlbp(last_node_ptr)<==previous_node_ptr;@*fmlused(last_node_ptr)<==((clear_mem_ptr-last_node_ptr)-*(bytes_cleared))/256;2*fmlfree(last_node_ptr)<==bytes_cleared/256;*if(previous_node_ptr=0)(*thenfirst_node_ptr<==last_node_ptr;3*elsefmlfp(previous_node_ptr)<==last_node_ptr;&*previous_node_ptr<==last_node_ptr;  *end build_fml_node; TTLBUILDFMLNODE-CODEPAGE**build_fml_node:* BFMLNODE: **fmlfp(last_node_ptr)<==0;.*fmlbp(last_node_ptr)<==previous_node_ptr;*CLR.LFMLFP(A4)MOVE.LA2,FMLBP(A4) **fmlused(last_node_ptr)<==8*(clear_mem_ptr-last_node_ptr-bytes_cleared)/256;2*fmlfree(last_node_ptr)<==bytes_cleared/256;* MOVE.LA5,D1 SUB.LA4,D1 SUB.LD6,D1 LSR.L#8,D1MOVE.LD1,FMLUSED(A4) MOVE.LD6,D1 LSR.L#8,D1MOVE.LD1,FMLFREE(A4) *if(previous_node_ptr=0)(*thenfirst_node_ptr<==last_node_ptr;3*elsefmlfp(previous_node_ptr)<==last_node_ptr;*IF.LA2D0THEN.S LEA(A4),A3 ELSE.SMOVE.LA4,FMLFP(A2)ENDI *&*previous_node_ptr<==last_node_ptr;* LEA(A4),A2 **end build_fml_node;*RTS %TTLBUILDFMLHEADER-DOCUMENTATIONPAGEC M********************************************************************************&***Name:BFMLHEAD(build_fml_header):*** ***Function:E***FindsablockofmemorytocontaintheFML_HEADERnode(ineitherF***highorlowmemory),andbuildsanFML_HEADERnodetodescribethe***currentpartition.*** ***Inputs:D***1.)Src_memtbl_node(tellswhethertheFML_HEADERbelongsinlow***highmemory).***2.)A0=src_memtbl_ptr.***3.)D4=start_of_part_ptr.***4.)D5=end_of_part_ptr.*** ***Outputs:9***1.)FML_HEADERnodedescribingthecurrentpartition.E***2.)Fml_header_ptr(Ifthefml_header_ptr=0uponreturningfrom<***thisroutine,thenwecouldn'tfindenoughmemoryintheA***currentpartitionfortheFML_HEADER.Thisismeaningfulonly***forpartitionzero.)******Sideeffects:None.******Explanation:D***FirstwedeterminewhethertheFML_HEADERbelongsinloworhighB***memoryandcalltheappropriatesubroutinetoreturntoustheI***correspondingpointer.Ifthesubroutinereturnedanon-zeropointer,G***thenitfoundenoughmemoryinthecurrentpartitiontocontaintheF***FML_HEADER(itfoundatleastfml_header_lenpages),andsowemay%***continuetobuildtheFML_HEADER.***?***Wesetlowfree,stravail,andendavailtothevaluesoftheH***first_node_ptr,start_of_part_ptr,andend_of_part_ptrrespectively.E***WemovetheMAPMTYPandMAPPARTfieldsfromthesrc_memtbltothe7***FML_HEADERnode,andsetupthesemaphorecounters.***M***************************************************************************** !TTLBUILDFMLHEADER-ALGORITHMPAGE*build_fml_header: procedure;    '*if(fml_headerbelongsinlowmemory)#*thencallget_fml_header_ptr_low;$*elsecallget_fml_header_ptr_high; #*if(fml_header_ptr<>0)thendo;.*lowfree(fml_header_ptr)<==first_node_ptr;2*stravail(fml_header_ptr)<==start_of_part_ptr;0*endavail(fml_header_ptr)<==end_of_part_ptr; 8*memtype(fml_header_ptr)<==MAPMTYP(src_memtbl_ptr);8*mempart(fml_header_ptr)<==MAPPART(src_memtbl_ptr); "*semfrmem(fml_header_ptr)<==1;$*semfrmem+2(fml_header_ptr)<==0;"*semwtmem(fml_header_ptr)<==0;$*semwtmem+2(fml_header_ptr)<==0;*end;  *end build_fml_header; TTLBUILDFMLHEADER-CODEPAGE**build_fml_header: procedure;* BFMLHEAD: *'*if(fml_headerbelongsinlowmemory)#*thencallget_fml_header_ptr_low;$*elsecallget_fml_header_ptr_high;*:BTST#0,10(A0)If(src_memtbl_node(byte_10(bit_0))=0)7IFTHEN.Sthenfml_headerbelongsinHIGHmemory; 6BSR.SGFMLPTRHelsefml_headerbelongsinLOWmemory; ELSE.SBSR.SGFMLPTRLENDI *#*if(fml_header_ptr<>0)thendo;.*lowfree(fml_header_ptr)<==first_node_ptr;2*stravail(fml_header_ptr)<==start_of_part_ptr;0*endavail(fml_header_ptr)<==end_of_part_ptr;*IF.LA5D0THEN.SMOVE.LA3,LOWFREE(A5)MOVE.LD4,STRAVAIL(A5)MOVE.LD5,ENDAVAIL(A5) *8*memtype(fml_header_ptr)<==mapmtyp(src_memtbl_ptr);8*mempart(fml_header_ptr)<==mappart(src_memtbl_ptr);*MOVE.WMAPMTYP(A0),MEMTYPE(A5) *"*semfrmem(fml_header_ptr)<==1;$*semfrmem+2(fml_header_ptr)<==0;"*semwtmem(fml_header_ptr)<==0;$*semwtmem+2(fml_header_ptr)<==0;*end;*MOVE.W#1,SEMFRMEM(A5)CLR.LSEMFRMEM+2(A5)CLR.WSEMWTMEM(A5)CLR.LSEMWTMEM+2(A5)ENDI **end build_fml_header;*RTS 0TTLGETFMLHEADERPOINTERHIGH-DOCUMENTATIONPAGEN*********************************************************************************-***Name:GFMLPTRH(get_fml_header_ptr_high):*** ***Function::***ThissubroutinereturnsapointertoablockofmemoryI***fml_header_lenpageslonginthecurrentpartition.ThisblockistheE***highestaddressedblockinthecurrentpartitionthatisatleastC I***fml_header_lenpageslong.ThissubroutinehandlesallaccountingforE***theblockit"steals"fromthepartition.(IteithercountsitasE***beinga"usedpageinthecurrentblock,or,ifthecurrentblockH***consistsofonlyfml_header_lenpages,thenit"unlinks"thecurrentH***block,andcountsitasa"used"portionofthepreviousblock,ifa***previousblockexists.)*** ***Inputs:***1.)A4=last_node_ptr.***2.)D7=fml_header_len.*** ***Outputs:***1.)A5=fml_header_ptr.;***2.)Ifwecan'tfindanyblockinthecurrentpartition'***atleastfml_header_lenpageslong:+***A.)A3(first_node_ptr)issettozero.****B.)A4(last_node_ptr)issettozero.******Sideeffects:&***1.)D1(scratch)maybedestroyed.******Explanation:E***Firstwesetfml_header_ptrequaltothelast_node_ptrandsearchJ***backwardthroughtheFMLuntilwefindablockatleastfml_header_lenI***pageslong.IfwereachthebeginningoftheFML(fml_header_pty=0)H***withoutfindingablockofmemoryfml_header_lenpageslong,thenweG***zerooutthefirstandlast_node_ptrandreturn.(Fml_header_ptris***alsozero.)***E***Otherwise,wechecktoseeiftheblockisexactlyfml_header_lenG***pageslong.Ifitis,thenwecallunlink_fml_header_nodetounlinkI***thenodefromtheFMLlinkedlist,andcountitsmemoryasbeingpart.***oftheusedportionofthepreviousblock.***>***Iftheblockisgreaterthanfml_header_lenpages,wethenH***decrementfmlfreeandincrementfmlusedbyfml_header_lenpages,and@***incrementfml_header_ptrbyfml_header_len*256bytessothatI***fml_header_ptrnowpointstothefirst"used"pagewithinthecurrent***blockandreturn.***N****************************************************************************** ,TTLGETFMLHEADERPOINTERHIGH-ALGORITHMPAGE$*get_fml_header_ptr_high: procedure;    #*fml_header_ptr<==last_node_ptr;7*dowhile(fmlfree(fml_header_ptr)D7DO.S MOVE.LFMLBP(A5),A5 *"*if(fml_header_ptr=0)thendo;*first_node_ptr<==0;*last_node_ptr<==0; *return;*end;*end;IF.LA5D0THEN.S SUB.LA3,A3 SUB.LA4,A4RTSENDIENDW *0*if(fmlfree(fml_header_ptr)=fml_header_len)#*thencallunlink_fml_header_node;* IF.LFMLFREE(A5)D7THEN.SBSR.SUFMLHEAD * *elsedo;9*fmlfree(fml_header_ptr)<==fmlfree(fml_header_ptr)-*fml_header_len;9*fmlused(fml_header_ptr)<==fmlused(fml_header_ptr)+*fml_header_len;%*fml_header_ptr<==fml_header_ptr+!*fmlfree(fml_header_ptr)*256;*end*ELSE.SSUB.LD7,FMLFREE(A5) ADD.LD7,FMLUSED(A5) MOVE.LFMLFREE(A5),D1 LSL.L#8,D1LEA(A5,D1.L),A5ENDI**end get_fml_header_ptr_high;*RTS /TTLGETFMLHEADERPOINTERLOW-DOCUMENTATIONPAGEN*********************************************************************************,***Name:GFMLPTRL(get_fml_header_ptr_low):*** ***Function::***ThissubroutinereturnsapointertoablockofmemoryD p\y*[$LP3a3_Q.BI***fml_header_lenpageslonginthecurrentpartition.ThisblockistheD***lowestaddressedblockinthecurrentpartitionthatisatleastI***fml_header_lenpageslong.ThissubroutinehandlesalltheaccountingI***fortheblockit"steals"fromthepartition.(ItcountstheblockasI***partofthe"used"portionofthepreviousblock,ifapreviousblockH***exists.)Also,sincethissubroutine"steals"ablockofmemoryfromE***lowmemory,itmayhvaetomovethepointersandcounters(fmlfp,J***fmlbp,fmlfree,fmlused)fromtheirpositiontoalocationfml_header_'***lenpagesfurther"down"inmemory.*** ***Inputs:***1.)A3=first_node_ptr.***2.)D7=fml_header_len.*** ***Outputs:***1.)A5=fml_header_ptr.;***2.)Ifwecan'tfindanyblockinthecurrentpartition'***atleastfml_header_lenpageslong:+***A.)A3(first_node_ptr)issettozero.****B.)A4(last_node_ptr)issettozero.******Sideeffects:None:******Explanation:F***Firstwesetfml_header_ptrequaltothefirst_node_ptrandsearchI***forwardthroughtheFMLuntilwefindablockatleastfml_header_lenC***pageslong.IfwereachtheendoftheFML(fml_header_pty=0)H***withoutfindingablockofmemoryfml_header_lenpageslong,thenweG***zerooutthefirstandlast_node_ptrandreturn.(Fml_header_ptris***alsozero.)***E***Otherwise,wechecktoseeiftheblockisexactlyfml_header_lenG***pageslong.Ifitis,thenwecallunlink_fml_header_nodetounlinkI***thenodefromtheFMLlinkedlist,andcountitsmemoryasbeingpart.***oftheusedportionofthepreviousblock.***>***Iftheblockisgreaterthanfml_header_lenpages,wecallG***move_fml_nodetomovethepointersandcountersofthecurrentnodeJ***(fmlfp,fmlbp,fmlfree,fmlused)fml_header_lenpages"down"inmemory;***inordertomakeroomfortheFML_HEADERinlowmemory.***N****************************************************************************** +TTLGETFMLHEADERPOINTERLOW-ALGORITHMPAGE#*get_fml_header_ptr_low: procedure;    $*fml_header_ptr<==first_node_ptr;7*dowhile(fmlfree(fml_header_ptr)D7DO.S MOVE.LFMLFP(A5),A5 *"*if(fml_header_ptr=0)thendo;*first_node_ptr<==0;*last_node_ptr<==0; *return;*end;*end;*IF.LA5D0THEN.S SUB.LA3,A3 SUB.LA4,A4RTSENDIENDW *0*if(fmlfree(fml_header_ptr)=fml_header_len)#*thencallunlink_fml_header_node;*elsecallmove_fml_node;* IF.LFMLFREE(A5)D7THEN.SBSR.SUFMLHEADELSE.SBSR.SMFMLNODEENDI **end get_fml_header_ptr_low;*RTS +TTLUNLINKFMLHEADERNODE-DOCUMENTATIONPAGEN*********************************************************************************,***Name:UFMLHEAD(unlink_fml_header_node):*** ***Function:E***Thissubroutinehandlestheunlinkingofthefml_header_nodefromI***theFML.Ittakescareoflinkingtheprevious_node(ifthereisone)I***tothenext_node(ifthereisone)andviceversa.ItalsotakescareJ***ofaccountingforthefml_D header_nodeaspartofthe"used"portionof(***theprevious_node(ifthereisone).*** ***Inputs:***1.)A3=first_node_ptr.***2.)A4=last_node_ptr.***3.)A5=fml_header_ptr.*** ***Outputs:E***1.)UpdatedFMLwiththefml_header_node"unlinked"fromtheFML,?***andcountedaspartofthe"used"partofitsprevious_node***(ifthereisone).******Sideeffects:.***1.)A3(first_node_ptr)couldgetchanged.-***2.)A4(last_node_ptr)couldgetchanged.3***3.)A2(previous_node_ptr)couldgetdestroyed.)***4.)A6(scratch)couldgetdestroyed.&***5.)D1(scratch)maybedestroyed.******Explanation:C***Thefirstdoblockhandlesthecasewherethefml_header_ptrisA***equaltothefirst_node_ptr.InthiscasewemustadvancetheG***first_node_ptrtopointtothenextnodeintheFML.IfthereisnoJ***nextnode(newfirst_node_ptr=0),thenwezerooutthelast_node_ptrD***toindicateanemptyFML,andreturn.Otherwise,wezeroouttheD***fmlbpofthenewfirst_node_ptrtoindicatethatthisisnowthe%***beginningoftheFML,andreturn.***>***ThenextlargedoblockofcodehandlesthecasewheretheI***fml_header_ptrisequaltothelast_node_ptr.InthiscaseweattemptJ***tobackupthelast_node_ptrtopointtothepreviousnodeintheFML.F***Ifthereisnopreviousnode(newlast_node_ptr=0),thenwezero@***outthefirst_node_ptrtoindicateanemptyFML,andreturn.J***Otherwise,wezerooutthefmlfpofthenewlast_nodetoindicatethatG***thisisnowtheendoftheFML,updatethefmlusedfieldofthenew@***last_nodetoequalitscurrentvalue,plusthelengthofthe9***previouslast_node(fmlfreeandfmlused),andreturn.***@***Ifneitherofthesecasesoccurred,thenthefml_header_nodeI***existssomewhereinthemiddleoftheFML.InthiscasewemustfirstD***getapointertothenodebeforethefml_header_nodeintheFML.G***Nowthefmlfpofthispreviousnodemustbesettothevalueofthe:***fmlfpofthefml_header_node,andthus"skipover"theG***fml_header_node.Havingdonethis,weupdatethefmlusedportionofI***thisprevious_nodetoincludeitsoldfmlusedvalueandthelengthof?***thefml_header_node(fmlfreeandfmlused).(ThisinessenceG***countstheentirefml_header_node,usedandfreememory,aspartofH***theusedportionofthepreviousnode.)Finally,weupdatethefmlbpI***ofthenodeafterthefml_header_nodeintheFMLtopointbacktothe;***previousnode,andthuscompletethe"unlinking"ofthe***fml_header_node.***M***************************************************************************** 'TTLUNLINKFMLHEADERNODE-ALGORITHMPAGE#*unlink_fml_header_node: procedure;    /*if(fml_header_ptr=first_node_ptr)thendo;,*first_node_ptr<==fmlfp(first_node_ptr);*if(first_node_ptr=0)*thenlast_node_ptr<==0;%*elsefmlbp(first_node_ptr)<==0);*end;3*elseif(fml_header_ptr=last_node_ptr)thendo;**last_node_ptr<==fmlbp(last_node_ptr);*if(last_node_ptr=0)*thenfirst_node_ptr<==0; *elsedo;*fmlfp(last_node_ptr<==0);*fmlused(last_node_ptr)<==*fmlused(last_node_ptr)+*fmlfree(fml_header_ptr)+*fmlused(fml_header_ptr);*end;*end; *elsedo;/*previous_node_ptr<==fmlbp(fml_header_ptr);7*fmlfp(previous_node_ptr)<==fmlfp(fml_header_ptr);!*fmlused(previous_node_ptr)<==*fmlused(previous_node_ptr)+*fmlfree(fml_header_len)+*fmlused(fml_header_ptr);+*next_node_ptr<==fmlfp(fml_header_ptr);.*fmlbp(next_node_ptr)<==previous_node_ptr;*end;  *end unlink_fml_header_node; "TTLUNLINKFMLHEADERNODE-CODEPAGE#*unlink_fml_header_node: procedure;* UFMLHEAD: */*if(fml_header_ptr=first_node_ptr)thendo;,*first_node_ptr<==fmlfp(first_node_ptr);*if(first_E node_ptr=0)*thenlast_node_ptr<==0);$*elsefmlbp(first_node_ptr)<==0;*end*IF.LA5A3THEN.S MOVE.LFMLFP(A3),A3 IF.LA3D0THEN.S SUB.LA4,A4 ELSE.SCLR.LFMLBP(A3)ENDI *3*elseif(fml_header_ptr=last_node_ptr)thendo;**last_node_ptr<==fmlbp(last_node_ptr);*if(last_node_ptr=0)*thenfirst_node_ptr<==0);*ELSE.SIF.LA5A4THEN.S MOVE.LFMLBP(A4),A4 IF.LA4D0THEN.S  SUB.LA3,A3 * *elsedo;*fmlfp(last_node_ptr)<==0;*fmlused(last_node_ptr)<==*fmlused(last_node_ptr)+*fmlfree(fml_header_ptr)+*fmlused(fml_header_ptr);*end;*end;*ELSE.SCLR.LFMLFP(A4) MOVE.LFMLFREE(A5),D1ADD.LFMLUSED(A5),D1ADD.LD1,FMLUSED(A4)ENDI * *elsedo;/*previous_node_ptr<==fmlbp(fml_header_ptr);7*fmlfp(previous_node_ptr)<==fmlfp(fml_header_ptr);!*fmlused(previous_node_ptr)<==*fmlused(previous_node_ptr)+*fmlfree(fml_header_ptr)+*fmlused(fml_header_ptr);+*next_node_ptr<==fmlfp(fml_header_ptr);.*fmlbp(next_node_ptr)<==previous_node_ptr;*end;*ELSE.SMOVE.LFMLBP(A5),A2 MOVE.LFMLFP(A5),FMLFP(A2) MOVE.LFMLFREE(A5),D1ADD.LFMLUSED(A5),D1ADD.LD1,FMLUSED(A2) MOVE.LFMLFP(A5),A6 MOVE.LA2,FMLBP(A6)ENDIENDI**end unlink_fml_header_node;*RTS "TTLMOVEFMLNODE-DOCUMENTATIONPAGEN*********************************************************************************#***Name:MFMLNODE(move_fml_node):*** ***Function:D***Thissubroutine"moves"thepointersandcounters(fmlfp,fmlbp,C***fmlfree,fmlused)ofanFMLnodefml_header_lenpages"down"inG***memory.ItalsohandlesallaccountingforthechangeinthestatusH***ofthemovedmemory(fmlfreeofthecurrentnodegetsdecrementedbyH***fml_header_lenpages,andfmlusedforthepreviousnode(ifthereisB***one)getsincrementedbythesamevalue).ThissubroutinealsoG***accountsforanychangeinthestatusofthefirst_node_ptr(iftheH***fml_header_ptrwaspointingtothefirstnode),orthelast_node_ptrF***(ifthefml_header_ptrwaspointingtothelastnode)asrequired.*** ***Inputs:***1.)A3=first_node_ptr.***2.)A4=last_node_ptr.***3.)A5=fml_header_ptr.***4.)D7=fml_header_len.*** ***Outputs:C***1.)AnewFMLnodemoveddowninmemorybyfml_header_lenpage.A***2.)Allnewpointerstoreflectthedisplacementofthenode.******Sideeffects:***1.)A2getsdestroyed.+***2.)A3(first_node_ptr)maybeupdated.****3.)A4(last_node_ptr)maybeupdated.$***4.)A6(scratch)getsdestroyed.******Explanation:D***FirstwecomputetheaddressofthemovednodetobetheaddressH***ofthefml_header_ptrplustheoffset,inbytes,thatthenodeistoH***bemoved(fml_header_len*256).ThenwegetapointertothepreviousE***nodeintheFML.Ifthereisnopreviousnode,thenweupdatetheG***first_node_ptrtopointtothemovednode.Otherwise,weupdatetheH***fmlfpfieldofthepreviousnodetopointtothemovednode,andaddH***thefml_header_lenpagestothe"used"portionofthepreviousnode.***D***Nextwedecrementthe"free"fieldofthefml_header_nodebytheJ***valueofthefml_header_lentoreflectthefactthatthismemoryisnoI***longeravailabletothatnode.ThenwegetapointertothenextnodeD***intheFML,andifitiszero(nonextnode),thenweupdatetheF***last_node_ptrtopointtothemovednode.Otherwise,weupdatethe;***fmlbpofthenextnodetopointbacktothemovednode.***C***Finally,weactuallymovethepointersandcountersofthenodeJ***fromthememorypointedtobythefml_header_ptrtothememorypointed)***tobythemoved_node_ptr,andreturn.***M***************************************************************************** TTLMOVEFMLNODE-ALGORITHMPAGE*move_fml_node: procedE ure;    9*moved_node_ptr<==fml_header_ptr+fml_header_len*256; /*previous_node_ptr<==fmlbp(fml_header_ptr);*if(previous_node_ptr=0))*thenfirst_node_ptr<==moved_node_ptr; *elsedo;/*fmlfp(previous_node_ptr)<==moved_node_ptr;!*fmlused(previous_node_ptr)<==*fmlused(previous_node_ptr)+*fml_header_len;*end; *fmlfree(fml_header_ptr)<==*fmlfree(fml_header_ptr)-*fml_header_len; +*next_node_ptr<==fmlfp(fml_header_ptr);*if(next_node_ptr=0)(*thenlast_node_ptr<==moved_node_ptr;0*elsefmlbp(next_node_ptr)<==moved_node_ptr; 2*fmlfp.fmlbp.fmlused.fmlfree(moved_node_ptr)<==/*fmlfp.fmlbp.fmlused.fmlfree(fml_header_ptr);  *end move_fml_node; TTLMOVEFMLNODE-CODEPAGE*move_fml_node: proc;* MFMLNODE: *9*moved_node_ptr<==fml_header_ptr+fml_header_len*256;* LSL.L#8,D7LEA(A5,D7.L),A6 LSR.L#8,D7 */*previous_node_ptr<==fmlbp(fml_header_ptr);*if(previous_node_ptr=0))*thenfirst_node_ptr<==moved_node_ptr;*MOVE.LFMLBP(A5),A2 IF.LA2D0THEN.S LEA(A6),A3 * *elsedo;/*fmlfp(previous_node_ptr)<==moved_node_ptr;!*fmlused(previous_node_ptr)<==*fmlused(previous_node_ptr)+*fml_header_len;*end;*ELSE.SMOVE.LA6,FMLFP(A2) ADD.LD7,FMLUSED(A2)ENDI *fmlfree(fml_header_ptr)<==*fmlfree(fml_header_ptr)-*fml_header_len;*SUB.LD7,FMLFREE(A5) *+*next_node_ptr<==fmlfp(fml_header_ptr);*if(next_node_ptr=0)(*thenlast_node_ptr<==moved_node_ptr;0*elsefmlbp(next_node_ptr)<==moved_node_ptr;*MOVE.LFMLFP(A5),A2 IF.LA2D0THEN.S LEA(A6),A4 ELSE.SMOVE.LA6,FMLBP(A2)ENDI *2*fmlfp.fmlbp.fmlused.fmlfree(moved_node_ptr)<==/*fmlfp.fmlbp.fmlused.fmlfree(fml_header_ptr);*MOVE.LFMLFP(A5),FMLFP(A6)MOVE.LFMLBP(A5),FMLBP(A6)MOVE.LFMLUSED(A5),FMLUSED(A6)MOVE.LFMLFREE(A5),FMLFREE(A6) **end move_fml_node;*RTS *TTLCHECKMEMMAPCONFLICT-DOCUMENTATIONPAGEM********************************************************************************+***Name:CMEMCONF(check_memmap_conflict):*** ***Function:C***ThissubroutinecheckstheRAMpartitiondescribedbytheentryB***inthesrc_memtblpointedtobythesrc_memtbl_ptragainstallE***previously-describedRAMpartitions.IfthissubroutinedetectsaD***fatalconflictitwillnotreturnexecutiontothecaller.IfitC***detectsanaliaspartition(samestartingaddressassomeotherK***partition),itreturnsexecutionwiththegot_alias_partition_flagset.9***Otherwise,itreturnsexecutionwiththatflagreset.*** ***Inputs:***1.)A0=src_memtbl_ptr.***2.)A1=dest_memtbl_ptr.***3.)D4=start_of_part_ptr.***4.)SYSPAR(MAPBEG).*** ***Outputs:&***1.)D2=got_alias_partition_flag.@***2.)A5=fml_header_ptr(ifgot_alias_partition_flag=set).******Sideeffects:,***1.)A2(temp_memtbl_ptr)getsdestroyed.$***2.)D1(scratch)getsdestroyed.3***3.)Executionmaynotreturn(maycallKILLER).******Explanation:@***Firstweinitializefortheloopbyresettingthegot_alias_I***partition_flag,settingthecurrent_partition_number,andsettingtheF***temp_memtbl_ptrtopointtothebeginningofthedest_memtbl.Then***webegintheloop.***B***Ifwedetectaduplicatepartitionnumber,thenwecallKILLERC***anddie.Ifwedetectaduplicatestart_of_part_ptr,wesettheI***got_alias_partition_flag,setthefml_header_ptrequaltotheMAPFMLPB***fieldofthealiaspartitionandreturn.IfwedetectthatourD***currentstart_of_part_ptrisatalowermemorylocationthantheF***ENDAVAILfieldofsomepreviouspartition,thenwecallKILLERandC***die.Otherwise,wekeeploopinguntilwehavelookedatallthe>***previously-definedentriesinthedeF st_memtbl,andreturn.***L**************************************************************************** &TTLCHECKMEMMAPCONFLICT-ALGORITHMPAGE"*check_memmap_conflict: procedure;    !*resetgot_alias_partition_flag;B*current_partition_number<==MAPMTYP(src_memtbl_ptr).AND.$0F;&*temp_memtbl_ptr<==SYSPAR(MAPBEG);/*dountil(temp_memtbl_ptr=dest_memtbl_ptr);;*if(MAPPART(temp_memtbl_ptr)=current_partition_number)*thencallKILLER;=*if(MAPSTRA(temp_memtbl_ptr)=start_of_part_ptr)thendo;*setgot_alias_partition_flag;/*fml_header_ptr<==MAPFMLP(temp_memtbl_ptr); *return;*end;=*if(start_of_part_ptrD1THEN.S BSRKILLERENDI *=*if(mapstra(temp_memtbl_ptr)=start_of_part_ptr)thendo;*setgot_alias_partition_flag;/*fml_header_ptr<==mapfmlp(temp_memtbl_ptr); *return;*end;* IF.LMAPSTRA(A2)D4THEN.SSTD2MOVE.LMAPFMLP(A2),A5RTSENDI *>*if(start_of_part_ptrENDAVAIL(A6)THEN.S BSRKILLERENDI **temp_memtbl_ptr<==*temp_memtbl_ptr+*length(dest_memtbl_entry);*LEAMAPENTSZ(A2),A2 **end;*UNTIL.LA2A1 **end check_memmap_conflict;*RTS +TTLBUILDRAMMEMTBLENTRY-DOCUMENTATIONPAGEN*********************************************************************************,***Name:BRAMNODE(build_ram_memtbl_entry):*** ***Function:D***ThissubroutinewritesinallpointersanddescriptorsforaRAM'***partitionentryinthedest_memtbl.*** ***Inputs:***1.)A0=src_memtbl_ptr.***2.)A1=dest_memtbl_ptr.***3.)A5=fml_header_ptr.***4.)D4=start_of_part_ptr.*** ***Outputs:7***1.)Dest_memtbl_entry(RAMentry)pointedtobythe***dest_memtbl_ptr.******Sideeffects:+***1.)D1,andD2(scratch)getdestroyed.******Explanation:D***TheMAPMTYPfieldofthedest_memtbl_entrygetssetequaltotheF***mostsignificantfourbitsoftheMAPPARTfieldofthesrc_memtbl_H***entry,andtheMAPPARTfieldofthedest_memtbl_entrygetssetequalI***tothefourleastsignificantbitsofthesamefield.Finally,wesetJ***theMAPSTRAfieldofthedest_memtbl_entryequaltothestart_of_part_G***ptr,andtheMAPFMLPfieldequaltothefml_header_ptr,andreturn.***M***************************************************************************** 'TTLBUILDRAMMEMTBLENTRY-ALGORITHMPAGE#*build_ram_memtbl_entry: procedure;    *MAPMTYP(dest_memtbl_ptr)<==%*MAPPART(src_memtbl_ptr).AND.$70;*MAPPART(dest_memtbl_ptr)<==%*MAPPART(src_memtbl_ptr).AND.$0F;2*MAPSTRA(dest_memtbl_ptr)<==start_of_part_ptr;/*MAPFMLP(dest_memtbl_ptr)<==fml_header_ptr;  *end build_ram_memtbl_entry; "TTLBUILDRAMMEMTBLENTRY-CODEPAGE#*build_ram_memtbl_entry: procedure;* BRAMNODE: **MAPMTYP(dest_memtbl_ptr)<==%*MAPMTYP(src_memtbl_ptr).AND.$70;*MOVE.BMAPMTYP(A0),D1 MOVE.BD1,D2AND.B#$70,D1MOVE.BD1,MAPMTYP(A1) **mappart(dest_memtbl_ptr)<==&*mapmtyp(dest_memtbl_ptr).AND.$0F;*AND.B#$0F,D2MOVE.BD2,MAPPART(A1) *2*mapstraF (dest_memtbl_ptr)<==start_of_part_ptr;*MOVE.LD4,MAPSTRA(A1) */*mapfmlp(dest_memtbl_ptr)<==fml_header_ptr;*MOVE.LA5,MAPFMLP(A1) **end build_ram_memtbl_entry;*RTS +TTLBUILDROMMEMTBLENTRY-DOCUMENTATIONPAGEM********************************************************************************,***Name:BROMNODE(build_rom_memtbl_entry):*** ***Function:E***ThissubroutinedoessomeprimitivecheckingonthelegalityofaB***ROMpartitiondescribedinthesrc_memtbl,andthenwritestheH***descriptorsandpointerstodescribethatnodeintothedest_memtbl.*** ***Inputs:***1.)A0=src_memtbl_ptr.***2.)A1=dest_memtbl_ptr.***3.)D4=start_of_part_ptr.***4.)D5=end_of_part_ptr.*** ***Outputs:7***1.)Dest_memtbl_entry(ROMentry)pointedtobythe***dest_memtbl_ptr.******Sideeffects:$***1.)A6(scratch)getsdestroyed./***2.)Executionmaynotreturn(callKILLER).******Explanation:D***FirstweverifythatthecurrentROMpartitiondoesnotstartatH***alowermemorylocationthantheendingofthelastpartitionintheH***dest_memtbl.Ifitdoes,wehaveafatalconfigurationerror,andso***wecallKILLER.***>***Otherwise,wemovetheMAPMTYPandMAPPARTfieldsfromtheH***src_memtbltothedest_memtbl,settheMAPSTRAandMAPENDAfieldsofF***thedest_memtblequaltothestart_of_part_ptrandend_of_part_ptr***respectively,andreturn.***N****************************************************************************** 'TTLBUILDROMMEMTBLENTRY-ALGORITHMPAGE#*build_rom_memtbl_entry: procedure;   ?*if(MAPMTYP(previous(dest_memtbl_ptr))=ROM_type)thendo;*if(start_of_part_ptr<'*MAPENDA(previous(dest_memtbl_ptr)))*thencallKILLER;*end; *elsedo;*if(start_of_part_ptr<1*ENDAVAIL(MAPFMLP(previous(dest_memtbl_ptr)))*thencallKILLER;*end; '*MAPMTYP.MAPPART(dest_memtbl_ptr)<==#*MAPMTYP.MAPPART(src_memtbl_ptr);3*MAPSTRA(dest_memtbl_ptr)<==start_of_part_ptr);0*MAPENDA(dest_memtbl_ptr)<==end_of_part_ptr;  *end build_rom_memtbl_entry; "TTLBUILDROMMEMTBLENTRY-CODEPAGE#*build_rom_memtbl_entry: procedure;* BROMNODE: ?*if(MAPMTYP(previous(dest_memtbl_ptr))=ROM_type)thendo;*if(start_of_part_ptr<'*MAPENDA(previous(dest_memtbl_ptr)))*thencallKILLER;*end; +IF.BMAPMTYP-MAPENTSZ(A1)#$FFTHEN.S)IF.LD4MAPENDA-MAPENTSZ(A1)THEN.S BSRKILLERENDI *elsedo;*if(start_of_part_ptr<1*ENDAVAIL(MAPFMLP(previous(dest_memtbl_ptr)))*thencallKILLER;*end; ELSE.SMOVE.LMAPFMLP-MAPENTSZ(A1),A6!IF.LD4ENDAVAIL(A6)THEN.S BSRKILLERENDIENDI *'*mapmtyp.mappart(dest_memtbl_ptr)<==#*mapmtyp.mappart(src_memtbl_ptr);2*mapstra(dest_memtbl_ptr)<==start_of_part_ptr;0*mapenda(dest_memtbl_ptr)<==end_of_part_ptr;*MOVE.WMAPMTYP(A0),MAPMTYP(A1) MOVE.LD4,MAPSTRA(A1) MOVE.LD5,MAPENDA(A1)**end build_rom_memtbl_entry;*RTS  END G >1INIT ASYST'M68XXX INIT SA")SSYSTEM INITIALIZER2pREADYHD pENDSYSP pASN pINITMMU pMEMTYPA pRDYHEAD pEEND pNSE pIOVCTBGN pTIAT pVCTUBGN pSDEFTYP pSEMLIST pTDEFTYP pLAM pUDEFTYP pPAGESIZE pTIME_LEF pMEMTYPS pCURR_ASN pMEMTYPT pTIMERST pMEMTYPU 2pLAST_MMU pCCBHD pASNTBL pTCBHD pINITIO pESTACK HKILLER pGSTBEG pSMEMHI pTRCSIZ pMAPBEG pNOTLAM pGSTSIZ pSMEMLO pIOVSIZ pPATBEG pPANEL pPANELA pESTART pUDRBEG pCRASHSAV pPATSIZ 2pSEMEND pUSTBEG pUDRSIZ pBKG_HEAD pUSTSIZ pDISPATCH pTRACFLAG pBKG_ACTI pEXCSTACK pTCBHEAD pTRACEBEG pENDMEMT pMIDNIGHT pBKG_TAIL pMACSTRC pMEMTABL pWHERLOAD pADEFTYP pTRCFLAG (BJ3R .|!A(;,<(Ba.zA- ! E!$ K"zA8 ! 7gA!L3jH 3|2<a` !(; 7.x E":AM g*&zA9 $AIAH AC!I3 &ڹn\N$zB9 n $:BA g< BpF3 N@`a! >a !UST1|1B 1B E!J |pI3 N@`aJ(x ! taht 0E(tgAfB $:B5 xg$I3 BpN@`a! a* !IOVԈS!B!(; 6$:B< Fft BpN@`a!I3 6a !PATJ!B E CI(#|(ICGd&zBB DUMYF3 gG`Ga !L$La$! ! "B I`2(h!TBB)|I3P B )KBl)|9|NuB :$:B? g& BpN@`a! :a> I3P !UDR] 1BB G$:B0 \g2 BpN@`a! GaE QO3 TP Ԋ!B1BO * C! aB, J +fB GBH C <pN@`ad4+;B,g +x  !I3 EpBJjgREQG(m6AI p(Q !TCBgaB& v.xI3@ E2<aD/:BB hNuHVM(;,@|MH?-_8-O<2<a`,,FF3@ B-nNu0<`0<F虀2<"x 7C2A022@02Nua&aI3 faafa|C! 1aazNuBABL ʰPga^BE E RO3  f#*(B(:B c*BK" B*AMBH ,BBF xfH3 ` (<*B*DBbaNu h g2a8 faX`"aJga.`aFF3 fC`aa`3| Nu~A C ((B*(B*DBbaF3 NuBBBIKhHz"?***A0=ptrtoTCBofthetasktobeaddedtoreadylist.*********-***EXITCONDITIONSDIFFERENTFROMENTRY:*********O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*Revisionhistory(addnewchangestotop).*DateAuthorChangesG*-------------------------------------------------------------------G*8/15/83SteveFranckMadeCOMINTentrypointsettherunningpriority1*likemostoftheotherroutinesdo.Rewrotethe2*TCBsearchroutinetoexecutefaster(interrupts*aremaskedduringsearch).*2/08/81HLD6*5/18/797616*3/06/79GGC3* * *XDEF's.*8XDEFREADY,SBREADYNormalentrypointstothisroutine. 'XDEFSBRYRELQEntrypointfromRELINQ.5XDEFSBRYEXT1EntrypointfromEXIT2(TRAP#1exit).:XDEFSBRYEXIREntrypointfromEXITR(exitfromexception*processing). )5 2V :96XDEFSBRYXMONEntrypointfromEXMONreturn(REXMON).(XDEFSBRYDLAYEntrypointfromCKDELAY.&XDEFSBRYACKEntrypointfromAKRQST.)XDEFSBRYSTRTEntrypointfromTSTSTART.0XDEFSBRYWAKEEntrypointfromWAKEUPandWAIT.2XDEFSBRYASREntrypointfromASRINTandWTEVENT.+XDEFSBRYGETEntrypointfromASQ=GT_EN.'XDEFSBRYCINTEntrypointfromCOMINT. * *XREF's.*9XREF.SPREEMPT_FLAGSYSPARflagwhichsignalsapreempt.;XREF.SREADYHDSYSPARpointertoheadentryinreadylist..XREF.SRUNNERSYSPARpointertorunningtask.   **Includedfiles:*8*UTILITY.MCMacrosofgeneralutility(e.g.PUSH,POP).7*INTERRUP.MCMacrosusefulindealingwithinterrupts.2*STR.EQEquatesforsupervisorcodeunderRMS68K.4*TCB.EQEquatesrelatingtotheTaskControlBlock.*NOLISTINCLUDE9995.&.UTILITY.MCINCLUDE9995.&.INTERRUP.MCINCLUDE9995.&.STR.EQINCLUDE9995.&.TCB.EQLIST  SECTIONLEVEL00OPTBRSPAGE*J*ThesearethespecializedentrypointsforallthevariousroutinesthatL*wanttoputataskonthereadylist,butwanttofiddlewiththepriority*first.* SBRYRELQ: 2MOVEQI$F0,D0Settherunpriorityofthetaskto>AND.BTCBCPRI(A0),D0thecurrentprioritywiththelow4bits#MOVE.BD0,TCBRPRI(A0)settozero.6BRASBREADYThenjustgotothenormalREADYroutine.  SBRYEXT1: SBRYEXIR: SBRYXMON: SBRYDLAY:SBRYACK: SBRYSTRT: SBRYWAKE:SBRYASR:SBRYGET: SBRYCINT: CMOVE.J BTCBCPRI(A0),TCBRPRI(A0)Resettherunpriorityforthetask*toitscurrentpriority.  *,*FALLTHROUGHtothemainREADYroutine!!!!*PAGE*>*NOTE--Otherroutinesfallintothisroutinefromabove!!!!* READY:SBREADY:  *(*Seeifhe'salreadyonthereadylist.* *PUSHSRSavetheSRwewereenteredwith.9DISABLE_INTERRUPTSDisableinterruptswhileweworkwith*thevolatileTCBchain.>BSET#TSK2NRDY,TCBSTAT2(A0)Setthebitthatsaysthisguyis6IFTHENonthereadylist.Ifhewasn'talready,  *.*He'snot;getsetuptoputhimonthelist.* +SAVED1/A2Saveregisterswe'llblowaway.>LEAREADYHD-TCBREADY,A2A2<--addresssuchthatTCBREADY(A2)(*referstothereadylistheadpointer.@MOVE.BTCBRPRI(A0),D0D0.B<--priorityoftasktoputonlist.  *>*SearchthelistforaTCBoflowerprioritythanthisguy's.* REPEAT TCBRPRI(A2)KeeploopinguntilwefindaTCBwith'*aprioritylowerthanourguytoadd. 5EXG.LD1,A2D1<--ptrtotheTCBoflowerpriority.#*A2<--ptrtoTCBjustbeforeit.PAGE*M*Eitherwefoundsomebodyoflowerprioritythantheguywe'retryingtoaddK*orwehittheendofthechain.Eitherway,wewanttoaddthenewguyto5*thelistbetweentheTCB'spointedtobyA2andD1.* ADD_HIM:CMOVE.LD1,TCBREADY(A0)Setourforwardlinktopointtotheguywe'*foundtobeoflowerpriority(or0).AMOVE.LA0,TCBREADY(A2)Setforwardlinkoftheguywewanttobe *aftersothatitpointstous.MOVE.LRUNNER,A2IF.BD0TCBRPRI(A2)THENSTPREEMPT_FLAGENDI !RESTORED1/A2Restoreregisters. ENDI 2POPSRRestoretheSRwesavedonentry&return.RTS*    ENDU1READY ASYST'M68XXX READY SA"4M68xxx RMS TRAP 0 Put task on ready list.2pREADYHD BSBRYACK BSBRYEXIR pPREEMPT_ BSBRYCINT BSBRYASR BSBRYEXT1 BSBREADY BSBRYGET BSBRYRELQ BSBRYWAKE BSBRYSTRT  BSBRYXMON pRUNNER BREADY BSBRYDLAY "ZG3p($@&`h$&@|-f6H@ E!(&"* g Ê*&cÊ!A 3%H $x *&cP LFNu4J  B=/*=/*M68XXX.RMS.AF=/*(=/* Chain file to assemble M68XXX.RMS.SA=/*:=/* If no output argument is specified for the listing the,=/* chain file will default to M68XXX.RMS.LS=/*=/IFC \1=ARGM68XXX.RMS.LS=/ENDIF=/*+=ASM M68XXX.RMS.SA,M68XXX.RMS.RO,\1;MRZ=055=/*{ Included files are:=/*9995.&.STR.EQ=/*9995.&.TR1RTCD.EQ=/*9995.&.TCB.EQ=/*9995.&.BAB.EQ=/*9995.&.PAT.EQ=/*9995.&.INTERRUP.MC=/*}=/*=END KPAGE**INCLUDEFILES**INCLUDE9995.&.STR.EQ*INCLUDE9995.&.TR1RTCD.EQ*INCLUDE9995.&.TCB.EQ*INCLUDE9995.&.BAB.EQ*INCLUDE9995.&.PAT.EQ*INCLUDE9995.&.INTERRUP.MC*NOLISTINCLUDE9995.&.STR.EQINCLUDE9995.&.TR1RTCD.EQINCLUDE9995.&.TCB.EQINCLUDE9995.&.BAB.EQINCLUDE9995.&.PAT.EQINCLUDE9995.&.INTERRUP.MCLISTPAGE*RMSIDNT5,168xxxRMSINITIALENTRYPOINT*$*COPYRIGHTED1980BYMOTOROLA,INC.**RMSISENTEREDHERE*SECTIONLEVEL00* XDEFRMS XREF.LDISPATCHXREF.LFLUSH_ALL_CACHEXREF.LPROGINT9XREF.SPATBEGXREF.LSCHED_DATEUPPAGE*,*HeretostartupRMSafterinitialization:*Flushthecache,*andgotodispatch.* RMS: &BSRFLUSH_ALL_CACHEFlushallcaches. K*Schedulethenodetoforcethedateto'rollover'atmidnight.AnewnodeF*isnormallyscheduledwhentheuserentersthetimeanddatethroughH*sessioncontrol.Ifthesystemhasabatterybackedtimer,however,K itJ*mayhappenthattheusermaynotenterthedateandtimebutdependuponK*itbeingpickedupfromthetimeritself.Bythetimewereachthiscode,B*thesysteminitializerhasallreadyadjustedNSE,MIDNIGHT,andH*TIMELEFThavebeeninitializedproperlytoreflectthesystemtimeandF*theBIGDELTAnodethatisnextonthePATlist.InthecasewhereweD*don'thaveabatterybackeduptimer,wewillschedulea'garbage'G*rollovernodebutwereallydon'tcaresinceitwillbecancelledand?*thecorrectrollovernodescheduledwhenthetimeismanually *entered.*K* We do not mask interrupts to schedule the new node because we are entered5*fromthesysteminitializerwithinterruptsmasked.*BSRSCHED_DATEUP BRADISPATCH  **Jumpheretocallkiller.*XDEFCALLKILLXREF.LKILLER CALLKILL: JSRKILLERPAGE*I* This is the exec routine scheduled originally by the system initializer TN ]/I*thatputsadummynodewithalargedeltaontotheendofthePATlist.D*ThisinsuresthatthePATlistisneveremptywhichsimplifiestheB*PATprocessinginmanyareas.NotethatwedonotgothroughtheF*normalschedulenoderoutinePAT_SCHED_NEW_NODE.Wecouldn'tdothis/*andguaranteethelargedeltathatwedesire.*/DC.L'DUMY'BitpatternthatINITsearchesfor$*inordertofindprocedureaddress* DUMY:MOVE.LPATBEG,A1 DISABLE_INTERRUPTSMask 2MOVE.LPATFHDR(A1),A2A2pointstofreePATentry IF.LA2#0THEN.S+BSRKILLERKillsystemofnofreePATnodeELSE.S@MOVE.LPATNEXT(A2),PATFHDR(A1)Unlinkthisentryfromfreelist$ENABLE_INTERRUPTSUnmaskinterrupts*InitializePATentriesCLR.LPATNEXT(A2)$CLR.LPATTCB(A2)Indicateexecnode5MOVE.L#PATBIGDELTA,PATDELTA(A2)MakedeltaverybigCLR.LPATINTV(A2)3LEADUMY(PC),A3Addressofproceduretoreschedule'MOVE.LA3,PATASR(A2)Executionaddress(CLR.WPATOPT(A2)Options-notperiodic4MOVE.L#PATDUMMYID,PATARID(A2)PluginthedummyID4MOVE.W#$FFFF-$0700,PATILVL(A2)Interruptlevel=0#DISABLE_INTERRUPTSMaskinterrupts7MOVE.LPATHDR(A1),A3A3pointsto1stnodeonPATlist !WHILE.LPATNEXT(A3)#0DO.S*LEAPATNEXT(A3),A3FindlastnodeonlistENDW 7MOVE.LA2,PATNEXT(A3)LinkthisentryontoendoflistENDI%ENABLE_INTERRUPTSUnmaskandloseSR(RTEBacktoPATscheduler(wereallygo(*backtoabackgroundroutinescheduled%*byTIMEINT.Thisbackgroundroutine *wastheonethatscheduledus.ENDI1RMS ASYST'M68XXX RMS SA"4Y68xxx RMS INITIAL ENTRY POINTf2pPROGINT9 BRMS pKILLER pPATBEG pDISPATCH pSCHED_DA pFLUSH_AL BCALLKILL "N3UaAaA`AN(DUMY"x |$ifaA`J#R|BB%|D3B G%KBj%|5||&i gG`&|Ns4K  e'M68XXX SELFTESTAF z zbbSELFTESTSA 1bbSELFTESTRO bbAKRQST RO bbASQALOC RO bbASQEVENTRO bbASQFREE RO bbASQGET RO bbASQREAD RO bbASQSTATSRO bbASRINT RO bbATSEM RO bbBKG RO bbCDIR RO bbISR RObb=/*=/*M68XXX.SELFTEST.AF=/*-=/* Chain file to assemble M68XXX.SELFTEST.SA=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to M68XXX.SELFTEST.LS=/*=/IFC \1=ARGM68XXX.SELFTEST.LS=/ENDIF=/*5=ASM M68XXX.SELFTEST.SA,M68XXX.SELFTEST.RO,\1;MRZ=040=/*{ Included files are:=/*9995.&.STR.EQ=/*}=/*=ENDL  rPAGE**INCLUDEFILES**INCLUDE9995.&.STR.EQ*NOLISTINCLUDE9995.&.STR.EQLISTPAGE9SELFTESTIDNT5,168xxxSYSTEMSELFTESTINTERRUPTHANDLER***********************SELFTEST1.00******HLD606/24/81************************SELFTESTINTERRUPTROUTINE*>*THISROUTINEISUSEDONLYTORESPONDTOASELFTESTINTERRUPT-*ONAVERSAMODULE01(AUTOVECTOR-LEVEL2)*%*REGISTERUSAGE:ALLREGISTERSSAVED*SECTIONLEVEL00*3CONTREGEQU$F70030VERSAMODULE01CONTROLREGISTER*XDEFSELFTESTXREF.SSLFTSTA7*7SELFTESTTST.LSLFTSTA7ISTHISFIRSTENTRYTOROUTINE?BNE.SSELFT4BRANCHIFNO!OR.W#$700,SRINHIBITINTERRUPTS-MOVEM.LD0-D7/A0-A6,-(A7)SAVEALLREGISTERS&MOVE.LA7,SLFTSTA7SAVESTACKPOINTER)MOVE.W60(A7),SRRESTOREINTERRUPTLEVELBSELFT4MOVE.LSLFTSTA7,A7RESTOREA7INCASETHISISNOT1STENTRY*6*CODETOCALLASELFTESTROUTINECANBEENTEREDHERE*!OR.W#$700,SRINHIBITINTERRUPTS'MOVE.BCONTREG,D0GETCONTROLREGISTER%OR.B#$20,D0SETBITTOTURNOFFLED/MOVE.BD0,CONTREGPUTITINTOCONTROLREGISTER4MOVE.LSLFTSTA7,A7RELOADA7(MAYBEITWASCHANGED)0MOVEM.L(A7)+,D0-D7/A0-A7RESTOREALLREGISTERS%CLR.LSLFTSTA7CLEARENTRYFLAGWORD RTEGOBACKEND {2S1SELFTEST ASYST'M68XXX SELFTESTSA"5E68xxx SYSTEM SELFTEST INTERRUPT HANDLER 2BSELFTEST pSLFTSTA7 ",--gGg-g- ,gSs-f ,Ss3I3@g gAaBngl A g+l  g+l  g-B3 ,fAaB6`B2 g ,`B" g ,`B4 d1ASQALOC ASREL'M68XXX ASQALOC SA"X(68xxx DIRECTIVE--ALLOCATE ASQ 07/13/84m2pSBPAGAL pEXIT_SUB pERROR_06 pERROR_08 pERROR_12 pERROR_15 FASQALOC pADEFTYP pSBLOGPHY &N3"J@fAB,gfAB, g*,, m6aA`Nq`AL3  fAB&, $0l&HC8 HC CaA``A !ASQ!lF3!F G,!K!K!K 1G(ԈX!BB,481B&;01B3$Bh*+H@`B4 4M  b1ASQEVENT ASREL'M68XXX ASQEVENTSA"%(68xxx DIRECTIVE--QUEUE EVENT 07/13/842FASQEVENT pSBRYGET pEXIT_SUB pDISP_ASR pKILLER pERROR_04 pERROR_05 pERROR_12 pERROR_14 pERROR_16 pREADY_AS pGTASQBUF pSBLOGPHY &F3$L(m@ gb.)g@"j B cPr fY fP@R@l(b0N3@@|4,$6{ (N$z,* n6aA`Nq`A"F``A`A0000<aBR3 (``v9B$Fa