IMD 1.17: 11/11/2014 12:10:11 82VKXSVRDOS B* VERSADOS/RMS68K SRC/OBJ 4.4 (NOT BOOTABLE) SN=49367 28 OF 30  SR28q82VKXSVRDOS 0420§a-0!characterˆOPTION*2 dataˆPRAMBL/'PREAMBLE'/dataˆDEST/'U'/dataˆOPTION/'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 100Šformat(A)200Šformat(A$)Šend #ŠsubroutineGETFRM(BUFF,Q,RESP) characterˆBUFF*(*) logicalQcharacterˆRESP include'common' integerI integerJintegerCKSUM1integerCKSUM2integerX2TOI  if(BUFF(3:3).eq.'Z')then “Q=.true.endifif(.not.Q)then'C“dountil(RESP.eq.'N').or.(Q) 10“continue˜if(RESP.ne.'')then›write(6,100)RESP˜endif˜do20J=1,BLKCNT›read(5,400)BUFF400›format(A132)!›if(BUFF(1:1).eq.'T')then  Q=.true. return›endif 20˜continue ˜RESP='N'˜CKSUM1=X2TOI(BUFF(1:2))˜if(CKSUM1.lt.0)then ›RESP='R'˜endif˜if(CKSUM1.ne.0)then ›CKSUM2=0›do40I=3,132 ! CKSUM2=CKSUM2+ichar(BUFF(I:I)) 40›continue›CKSUM2=mod(CKSUM2,255)+1›if(CKSUM1.ne.CKSUM2)then  RESP='R'›endif˜endif.“if((RESP.ne.'N').and.(.not.Q))then –goto10“endifendifreturn 100‹format(A)‹end '‹subroutineGETC(C,BUFF,P,Q,RESP) characterˆCcharacterˆBUFF*(*) integerP logicalQcharacterˆRESP include'common' if(P.le.132)then“C=BUFF(P:P) “P=P+1else“callGETFRM(BUFF,Q,RESP)“C=BUFF(4:4)“P=5endifreturn 100‹format(A)‹end 3‹subroutineGETREC(Q,P,BUFF,REC,RESP,CHRCNT) logicalQ integerPcharacterˆBUFF*(*)characterˆREC*(*)characterˆRESPintegerCHRCNT integerI integerJ integerKintegerX2TOI integerATOI integerBCNTcharacterˆLEN*2characterˆBCHRcharacterˆLCHR *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)then“CHRCNT=X2TOI(LEN(1:2))“if(CHRCNT.lt.0)then1˜write(0,100)'uload:FATALTransmissionerror'˜stop“endif“J=1“I=1C“dowhile(I.le.CHRCNT)50“if(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)then do60K=J,J+BCNT-1§REC(K:K)=BCHR 60 continue  J=J+BCNT›else  J=J+1 REC(J:J)=BCHR  J=J+1 REC(J:J)=LCHR  J=J+1œendif ŸI=I+3œelse ŸI=I+1 ŸJ=J+1›endif ›goto50“endif“CHRCNT=J-1endifreturn 100‹format(A)‹end  ‹subroutinePUTREC(COUNT,REC) integerCOUNTcharacterˆREC*(*) integerI do70I=1,COUNT“write(7,200)REC(I:I) 70continuewrite(7,100)return 100‹format(A)200‹format(A$)‹end ˆPROGRAMUPLOAD ˆcharacterˆBUFF*132ˆcharacterˆREC*132ˆcharacterˆRESP ˆlogicalQˆintegerBUFFPˆintegerRECLENˆcharacter‡ID*50 ˆinclude'common' ,ˆdata„ID/'@(#)uload.f:1.3ˆ8/4/83(13:31:48)'/ˆdataˆCMAX/132/ˆdataˆRMAX/132/ˆdataˆBLKCNT/1/ˆdataˆBMAX/132/ˆdataˆEOTRAN/'T'/ˆdataˆCHRMAX/127/ ˆrewind7 ˆcallINIT(BUFF,BUFFP,RESP) ˆQ=.false.1ˆcallGETREC(Q,BUFFP,BUFF,REC,RESP,RECLEN)Cˆdowhile(.not.Q)80ˆif(.not.Q)thenŒcallPUTREC(RECLEN,REC)1ŒcallGETREC(Q,BUFFP,BUFF,REC,RESP,RECLEN) Œgoto80ˆendifˆwrite(6,100)EOTRAN 100ˆformat(A)ˆendé=/* =/*†UTILIB.CF=/*A=/* The library/system equates diskette does not require the linkD=/* function, however, this chain file will permit the user to buildA=/* the system related library which can be accessed by the user.@=/* The files currently in the system library are those that are>=/* currently documented in the UTILIB chain file (UTILIB.AF).=/*=/* Chain file to:8=/*†Deletetheexistingutilitylibraryfile"UTILIB.RO"=/*†Buildanewutilitylibrary=/*F=/* The required order in which files are added to the utility libraryE=/*isdefinedbelow.‚Iftheuserelectsto'NOT'rebuildthelibraryB=/* in total he must use the 'REPLACE' library command and not the =/* 'ADD' and 'DELETE' commands.=/*=DEL UTILIB.RO=LIB UTILIB.ROADD UTILIB.EDT.ROADD UTILIB.PAR.ROADD UTILIB.OPT.ROADD UTILIB.ARG.ROADD UTILIB.DTC.ROADD UTILIB.BDC.ROADD UTILIB.CVT.ROADD UTILIB.COD.ROLISTQUIT=/*=END éééé4 ' BUILDS DEFAULT SAIIÝrrFILENAMESAbbÌrrFORCE SA{{[rrLOOKUP SAŒŒrrSETDIAG SA­­;rr ‰LLEN„1202‰TTL…VA1.1080-04-17FILENAMEDEFAULTINGROUTINE?PDEFAULTIDNT„1,1ˆVA1.1080-04-17FILENAMEDEFAULTINGROUTINE ‰SECTION9 **********7*ˆTHEFOLLOWINGISAASSEMBLYLANGUAGEROUTINEDESIGNED%*„TOBECALLEDFROMAPASCALPROGRAM.*8*ˆITSHOULDBEDECLAREDINTHEPASCALPROGRAMASFOLLOWS*@*ˆPROCEDUREP$DEFAULT(VARDEFUALT,RESULT:TEXT;EXT:EXTENSION); *ˆFORWARD;*9*ˆWHERE'EXTENSION'WASDECLAREDASFOLLOWSINTHETYPE'S*,*ˆEXTENSION=PACKEDARRAY[1..2]OFCHAR;*4*ˆWHENTHEROUTINEGETSCONTROLTHESTACKLOOKSLIKE**0-+-------------------+ *|†RETURN‡| *|†ADDRESS†|*4-+-------------------+*|DEFAULTEXTENSION|*6-+-------------------+*|FILEPOINTERFOR‚|*|RESULTFILE‡|*Œ10-+-------------------+*|FILEPOINTERFOR‚|*|DEFAULTFILE†|*+-------------------+*|“|*7*ˆDEFAULTERMODIFIESTHERESULTFILETOTHESAMEASTHE7*…DEFAULTFILEFORALLFIELDSNOTSPECIFIED,EXCEPTTHE>*…EXTENSION,WHICHITMODIFIESTOTHEPASSEDDEFAULTEXTENSION*<*ˆIFTHEDEFAULTFILEISADEVICE,ANDNONAMEWASSPECIFIED/*…THENTHERESULTFILEWILLBETHESAMEDEVICE.*9*ˆIFTHERESULTFILEWASPASSEDASSIGNED,THENNOCHANGES*…AREMADEATALLTOIT.*>*ˆIFTHEDEFAULTFILEISTHESAMEFILEASTHERESULTFILE,AND=*…NONAMEWASGIVENTHENTHERESULTFILEBECOMESTHECONSOLE.*7*ˆTHEREGISTERSHAVETHEFOLLOWINGMEANINGSTHROUGHTHE*…CODE.*9*ˆA1=POINTERTOTHEFILEDESCRIPTORFORTHERESULTFILE:*ˆA2=POINTERTOTHEFILEDESCRIPTORFORTHEDEFAULTFILE*<*ˆD0=THEBITNUMBERBEINGTESTEDINTHEHYBRIDSCANSTATUS)*ˆD1=THESCANSTATUSOFTHERESULTFILE**ˆD2=THESCANSTATUSOFTHEDEFAULTFILE*ˆD3=THEHYBRIDSCANSTATUS* **********  ***********ˆFIELDOFFSETS* **********1FDP†EQU…4‹*4=OFFSETTOFILEDESCRIPTORPOINTER>PFSHI„EQU…4‹*4=OFFSETTOPASCALFILESTATUSINFD.(HIBYTE)7IFDSS„EQU…$4E‰*$4E=OFFSETTOSCANSTATUSBYTEINFD.AEJHRQ3CONS…EQU…$36‰*$36=OFFSETTOTERMIDINPROGRMA.*0VOL†EQU…$2A‰*$2A=OFFSETTOVOLUMENAMEINFD.0USR†EQU…$2E‰*$2E=OFFSETTOUSERNUMBERINFD.1CAT†EQU…$30‰*$30=OFFSETTOCATALOGNAMEINFD..NAM†EQU…$38‰*$38=OFFSETTOFILENAMEINFD..EXT†EQU…$40‰*$40=OFFSETTOEXTENSIONINFD.* ********** *ˆBITNUMBERS* **********2ASSIGNEDEQU…1‹*1=FILEPASSEDASSIGNEDFLAGBIT*/DEVB…EQU…7‹*7=DEVICEBITINSCANSTATUSBYTE/VOLB…EQU…6‹*6=VOLUMEBITINSCANSTATUSBYTE4USRB…EQU…5‹*5=USERNUMBERBITINSCANSTATUSBYTE0CATB…EQU…4‹*4=CATALOGBITINSCANSTATUSBYTE-NAMB…EQU…3‹*3=NAMEBITINSCANSTATUSBYTE2EXTB…EQU…2‹*2=EXTENSIONBITINSCANSTATUSBYTE*‰PAGE ***********ˆCODESTARTSHERE*B*ˆP$DEFAULT,P$1DEFAULT,P$2DEFAULT,P$3DEFAULT,P$4DEFAULT,P$5DEFAULT*ˆP$RDEFAULT,P$TDEFAULT* **********‰XDEF„P$DEFAULT‰XDEF„P$1DEFAULT‰XDEF„P$2DEFAULT‰XDEF„P$3DEFAULT‰XDEF„P$4DEFAULT‰XDEF„P$5DEFAULT‰XDEF„P$RDEFAULT‰XDEF„P$TDEFAULT*P$DEFAULTˆEQU‚*†!ENTRYPOINT1 P$1DEFAULT‡EQU‚*†!ENTRYPOINT2 P$2DEFAULT‡EQU‚*†!ENTRYPOINT3 P$3DEFAULT‡EQU‚*†!ENTRYPOINT4 P$4DEFAULT‡EQU‚*†!ENTRYPOINT5 P$5DEFAULT‡EQU‚*†!ENTRYPOINT6 P$RDEFAULT‡EQU‚*†!ENTRYPOINT7 P$TDEFAULT‡EQU‚*†!ENTRYPOINT8*#DEFAULT:EQU…*‹*DEFUALTFILENAMES**6*ˆLOADADDRESSOFTHERESULTFILEPOINTERINTOA1,AND2*ˆTHEADDRESSOFTHEDEFAULTFILEPOINTERINTOA2.*>‰MOVEM.L6(A7),A1/A2ƒ!LOADTHEADDRESSESOFTHEFILEPOINTERS*?*ˆLOADTHEADDRESSOFTHERESULTFILEDESCRIPTORBLOCKINTOA1,?*ˆANDTHEADDRESSOFTHEDEFAULTFILEDESCRIPTORBLOCKINTOA2.*;‰MOVE.L‚FDP(A1),A1„!A1=POINTERTORESULTFILEDESCRIPTOR<‰MOVE.L‚FDP(A2),A2„!A2=POINTERTODEFAULTFILEDESCRIPTOR***ˆWASTHERESULTFILEPASSEDASSIGNED????*‰BTST„#ASSIGNED,PFSHI(A1)&‰IFTHEN.S!IFNOTASSIGNEDTHEN6‹MOVE.B‚IFDSS(A2),D2ˆ!D2=IFDSCANSTATUSOFDEFAULT5‹MOVE.B‚IFDSS(A1),D1ˆ!D1=IFDSCANSTATUSOFRESULT*0*ˆNOTECONDITIONCODESHAVEBEENSETBYTHEMOVE*-‹IFTHEN.SŽ!IFRESULTFILENOTADEVICE TST.BD2-IFTHEN.SŒ!IFDEFAULTFILEISADEVICE BTST‚#NAMB,D14IFTHEN.SŠ!ANDIFNONAMESPECIFIEDINRESULT*‘MOVE.LVOL(A2),VOL(A1)!COPYDEVICENAME5‘MOVE.B#'',NAM(A1)ƒ!BLANKFIRSTCHAROFNAMEFIELD#‘BSET#DEVB,D1‰!ANDSETDEVICEBITENDI ELSE.S .BSET‚#NAMB,D1Š!NOTEBSETTESTSANDTHENSETS0IFTHEN.SŠ!IFNONAMESPECIFIEDINRESULT* *ˆSETUPHYBRIDSCANSTATUSBYTE*0‘MOVE.BD1,D3Š!D3=RESULTFILEIFDSCANSTATUS ‘NOT.B‚D3+‘AND.B‚D2,D3Š!D3=HYBRIDSCANSTATUSBYTE*@*ˆCHECKIFRESULTFILEHADNOVOLUMESUPPLIEDANDUSEDEFAULTIF*ˆTHEREISONE*‘MOVEQ#VOLB,D0 ‘BTST‚D0,D3‘IFTHEN.S“MOVE.LVOL(A2),VOL(A1) “BSETƒD0,D1‘ENDI*B*ˆCHECKIFRESULTFILEHADNOUSERNUMBERANDUSEDEFAULTIFTHERE *ˆISONE.*‘MOVEQ#USRB,D0 ‘BTST‚D0,D3‘IFTHEN.S“MOVE.WUSR(A2),USR(A1) “BSETƒD0,D1‘ENDI*B*ˆCHECKIFRESULTFILEHADNOCATALOGSUPPLIEDANDUSETHEDEFAULT*ˆIFONEEXISTS.*‘MOVEQ#CATB,D0 ‘BTST‚D0,D3‘IFTHEN.S“MOVE.LCAT(A2),CAT(A1)“MOVE.LCAT+4(A2),CAT+4(A1) “BSETƒD0,D1‘ENDI***ˆCOPYTHEDEFAULTNAMETOTHERESULTNAME*‘MOVE.LNAM(A2),NAM(A1)‘MOVE.LNAM+4(A2),NAM+4(A1) ENDI BSET‚#EXTB,D16IFTHEN.SŒ!IFNOEXTENSIONSUPPLIEDUSEDEFAULT‘MOVE.W4(A7),EXT(A1)ENDI ENDI :MOVE.B‚D1,IFDSS(A1)ˆ!SAVENEWSCANSTATUSOF RESULTFILE ‹ENDI‰ENDI*+*ˆCLEANUPANDRETURNTOTHEPASCALPROGRAM*&‰MOVE.L‚(A7)+,A0Ž!A0=RETURNADDRESS0‰ADD.Wƒ#10,A7!POPTHEARGUMENTSFROMTHESTACK(‰JMP…(A0)’!RETURNTOTHEPASCALPROGRAM*‰ENDé9ŠTTL„PASCALGETFILENAMERUNTIMEROUTINEV1.00(11/6/80)@FILENAME‚IDNTƒ1,0‚PASCALGETFILENAMERUNTIMEROUTINE(11/6/80) ŠSECTION‚9**;*‰THISASSEMBLYLANGUAGEROUTINEISAPASCALFUNCTIONWHICH$*‰RETURNSTHENAMEOFAPASCALFILE.*<*‰INORDERTOUSETHISFUNCTION,THEUSERMUSTFIRSTDECLARE*‰THEFOLLOWINGTYPE:**FILENAME=STRING[30];*/*‰HEMUSTALSODECLARETHEFUNCTIONASFOLLOWS:*9*FUNCTION‚P$FNAME(VARFIL:FILTYPE):FILENAME;‚FORWARD;*;*‰WHERE'FILTYPE'ISTHETYPEOFTHEFILEHEWANTSTHENAME*‰OF(IE:TEXT).*-*‰THISROUTINEUSESTHEREGISTERSASFOLLOWS:*,*D0-ARGUMENTPASSSINGBETWEENSUBROUTINES)*D1-SIZEOFNAMEMOVING/INTEGERMOVING"*D2-DEVICENAME?‚0=NO„1=YES&*D3-CURRENTSIZEOFSTRINGONSTACK**D4-NUMBEROFDECIMALDIGITSININTEGER**A0-RETURNADDRESS-*A1-ADDRESSOFPASCALFILEPARAMETERBLOCK&*A2-ADDRESSOFNAMEMOVINGTOSTACK8*A4-CURRENTADDRESSINSTACKWHEREPLACINGCHARACTERS*$*‰COPYRIGHTED1980BYMOTOROLA,INC.**"*‰FIRSTCOMETHENECESSARYEQUATES*5VOLNAMEƒEQU„42‘OFFSETINTOPARAMBLOCKOFVOLUMENAME4FILENAME‚EQU„56‘OFFSETINTOPARAMBLOCKOFFILENAME***‰DECLARETHEENTRYPOINT*:ŠXDEFƒP$FNAME,P$1FNAME,P$2FNAME,P$3FNAME,P$4FNAME,P$5FNAME*ŠPAGE***‰THECODESTARTSHERE* P$FNAMEƒEQU„*P$1FNAME‚EQU„*P$2FNAME‚EQU„*P$3FNAME‚EQU„*P$4FNAME‚EQU„*P$5FNAME‚EQU„**$ŠMOVE.L(A7)+,A0‹A0=RETURNADDRESS*-ŠMOVE.L(A7)+,A1‹A1=ADDRESSOFFILEPOINTER*1ŠMOVE.L4(A1),A1‹A1=ADDRESSOFFILEPARAMBLOCK*7ŠLEA„2(A7),A4‹A4=ADDRESSWHERETOSTARTSTORINGCHARS*ŠCLR.W‚D3‘INITSIZEOFSTRING*ŠCLR.B‚D2‘SEE...ŠCMP.B‚#'',FILENAME(A1)‚IF...ŠBNE.S‚NOTDEVTHIS...ŠADDQ.B#1,D2ŽISA...ŠMOVE.B#'#',D0ŒDEVICE...ŠBSR.S‚MOVECHAR‹NAME.*%NOTDEV„LEA„VOLNAME(A1),A2…MOVETHE...ŠMOVEQ‚#4,D1ŽVOLUME/DEVICE...ŠBSR.S‚MOVENAME‹NAME.*ŠTST.B‚D2‘DEVICENAME?ŠBNE.S‚RETURNYES-DONE*ŠMOVE.B#':',D0ŒNO-...ZScckŠBSR.S‚MOVECHAR‹MOVE...ŠCLR.L‚D1‘THE...ŠMOVE.W(A2),D1ŒUSER...ŠBSR.S‚MOVEINTŒNUMBER.*ŠMOVE.B#'.',D0ŒNOW...ŠBSR.S‚MOVECHAR‹MOVE...ŠADDQ.L#2,A2ŽTHE...ŠMOVEQ‚#8,D1ŽCATALOG...ŠBSR.S‚MOVENAME‹NAME.*ŠMOVE.B#'.',D0ŒMOVE...ŠBSR.S‚MOVECHAR‹THE...ŠMOVEQ‚#8,D1ŽFILE...ŠBSR.S‚MOVENAME‹NAME.*ŠMOVE.B#'.',D0ŒFINALLY,...ŠBSR.S‚MOVECHAR‹MOVE...ŠMOVEQ‚#2,D1ŽTHE...ŠBSR.S‚MOVENAME‹EXTENSION.* RETURN„EQU„**$ŠMOVE.WD3,(A7)ŒSETUPSTRINGLENGTH*ŠJMP„(A0)RETURN*ŠPAGE***‰MOVEINT*1*‰THISROUTINEMOVESTHEINTEGERIND1INDECIMAL!*‰FORMAT,WITHOUTLEADINGZEROES.*3*‰D4ISUSEDTOCOUNTTHENUMBEROFDECIMALDIGITS.* MOVEINTƒEQU„**ŠCLR.B‚D4‘SHOWNODIGITS-YET*ŠTST.L‚D1‘ISTHEVALUEZERO?%ŠBNE.S‚NEXTDIGŒNO-CONTINUENORMALLY*!ŠMOVE.B#'0',-(A7)‰YES-FORCE...ŠADDQ.B#1,D4ŽONEDIGIT.*2*‰BUILDTHENUMBERINREVERSEORDERBYDIVIDINGBY%*‰TENANDREMEMBERINGTHEREMAINDERS.* NEXTDIGƒEQU„**ŠTST.L‚D1‘DONEYET?!ŠBEQ.S‚OUTDIGSŒYES-GOTOOUTPUT*ŠDIVUƒ#10,D1NO-PUT...ŠSWAPƒD1‘THE...ŠADD.B‚#'0',D1ŒNEXT...ŠMOVE.BD1,-(A7)‹DIGIT...ŠADDQ.B#1,D4ŽON...ŠCLR.W‚D1‘THE...ŠSWAPƒD1‘STACK.*ŠBRA.S‚NEXTDIGŒDONEXTDIGIT*+*‰NOWOU TPUTTHEDIGITSINTHEPROPERORDER* OUTDIGSƒEQU„**ŠMOVE.B(A7)+,D0‹MOVEA...ŠBSR.S‚MOVECHAR‹DIGIT.*ŠSUBQ.B#1,D4ŽDONEYET?$ŠBNE.S‚OUTDIGSŒNO-DOANOTHERDIGIT*ŠRTS—YES-RETURN*ŠPAGE***‰MOVENAME*.*‰THISROUTINEMOVESTHENAMEPOINTEDTOBYA2**‰TOTHESTACK.‚ITWILLMOVETHENUMBEROF.*‰CHARACTERSINDICATEDBYD1.‚HOWEVER,ITWILL,*‰NOTMOVESPACES-THEYWILLBEIGNORED.‚A2-*‰ISRETURNEDPOINTINGTOTHECHARACTERAFTER4*‰THENAMETHATWASMOVED.‚D1WILLBERETURNEDZERO.*MOVENAME‚EQU„**"ŠMOVE.B(A2)+,D0‹GETTHECHARACTER*ŠCMP.B‚#'',D0ŒISITASPACE?ŠBEQ.S‚SKIPCHYES-SKIPIT*ŠBSR.S‚MOVECHAR‹NO-OUTPUTIT*$SKIPCH„SUBQ.B#1,D1ŽAREWEDONEYET?)ŠBNE.S‚MOVENAME‹NO-DOANOTHERCHARACTER*ŠRTS—YES-RETURN*ŠPAGE***‰MOVECHAR*6*‰THISROUTINEMOVESTHECHARACTERIND0INTOTHENEXT4*‰AVAILABLEBYTEONTHESTACK(POINTEDTOBYA4).‚IT2*‰ALSOBUMPSTHELENGTHOFTHESTRING(D3)BYONE.*MOVECHAR‚EQU„**#ŠMOVE.BD0,(A4)+‹MOVETHECHARACTER*"ŠADDQ.W#1,D3ŽBUMPTHESTRINGSIZE*ŠRTS—THATISALL!**ŠENDéééééé<ŠTTL„PASCALTEXTFILEFORCERUNTIMEROUTINEV1.10(11/24/80)AFORCE…IDNTƒ1,10‚PASCALTEXTFILEFORCERUNTIMEROUTINE(11/24/80) ŠSECTION‚9**4*‰THISROUTINEFORCESTHECURRENTTEXTINTHEBUFFER4*‰OFTHEATEXTFILETOBEOUTPUTIMMEDIATELY.‚THUS,6*‰THESTANDARDLINEBUFFEREDOUTPUTCANBEOVERRIDDEN.*3*‰INORDERTOUSETHISROUTINE,THEUSERMUSTFIRST-*‰DECLAREINHISPASCALPROGRAMTHEFOLLOWING *‰PROCEDURE:*-*PROCEDURE‚P$FORCE(VARFIL:TEXT);‚FORWARD;*-*‰THISROUTINEUSESTHEREGISTERSASFOLLOWS:*#*D0-ERRORCODERETURNEDFROMIOS-*D1-CURRENTCOMPONENTPOINTEROFTEXTFILE(*D2-COPYOFORIGINALFUNCTION/OPTIONS0*D3-COPYOFORIGINALENDINGADDRESSOFBUFFER*)*A0-ADDRESSOFPARAMETERBLOCKFORIOS-*A1-ADDRESSOFPASCALFILEPARAMETERBLOCK%*A2-ADDRESSOFPASCALFILEPOINTER*A4-RETURNADDRESS*$*‰COPYRIGHTED1980BYMOTOROLA,INC.**"*‰FIRSTCOMETHENECESSARYEQUATES**FUNCTION†EQU‡8ŽIOSFUNCTION*BUFSTART†EQU‡20ADDRESSOFSTARTOFBUFFER&BUFENDˆEQU‡24ADDRESSOFENDOFBUFFER*!IOS‹EQU‡2ŽTHETRAPNUMBERFORIOS+ERRTRAP‡EQU‡14THETRAPNUMBERFORANERRORERRNUMˆEQU‡2ŽTHEERRORNUMBER*;FORCEFUNC…EQU‡$00020008†WRITE,NOFORMAT,WAIT,NEXTRECORD** *‰DECLARETHEENTRYPOINT* ŠXDEFƒP$FORCE*ŽPAGE***‰THECODESTARTSHERE* P$FORCE‡EQU‡**(ŽMOVE.L„(A7)+,A4‹SAVETHERETURNADDRESS*,ŽMOVE.L„(A7)+,A2‹GETADDRESSOFFILEPOINTER*%ŽMOVE.L„(A2),D1ŒGETCOMPONENTPOINTER*/ŽMOVE.L„4(A2),A1‹GETADDRESSOFPARAMETERBLOCK*-ŽCMP.L…BUFSTART(A1),D1„CHECKFOREMPTYBUFFER&ŽBEQ.S…FORCERET‹BUFFERISEMPTY-QUIT*1ŽMOVE.L„FUNCTION(A1),D2ŠSAVEOLDFUNCTION/OPTIONS*;ŽMOVE.L„#FORCEFUNC,FUNCTION(A1)‚SETUPNEWFUNCTION/OPTIONS**ŽMOVE.L„BUFEND(A1),D3†SAVEOLDENDADDRESS*ŽSUB.L…#1,D1ŽSETUP..."ŽMOVE.L„D1,BUFEND(A1)†ENDADDRESS.* ŽLEA‡FUNCTION(A1),A0„CALLTHE...ŽTRAP†#IOSIOS.*.ŽMOVE.L„D3,BUFEND(A1)†RESTORETHEENDADDRESS.*sP| 3ŽMOVE.L„D2,FUNCTION(A1)„RESTOREOLDFUNCTION/OPTION*1ŽMOVE.L„BUFSTART(A1),(A2)‚RESETCOMPONENTPOINTER*ŽTST.B…D0‘CHECK...ŽBEQ.S…FORCERET‹FOR...ŽTRAP†#ERRTRAP‹AN...ŽDC.W†ERRNUMERROR.*FORCERET†JMP‡(A4)RETURN*ŽENDééééééé0ŠTTL„PascalFileLookupRoutineV1.00(11/11/80)5LOOKUP„IDNTƒ1,0‚PascalFileLookupRoutine(11/11/80) ŠSECTION‚9***‰P$LOOKUP*5*‰Thisfunctionperformsthelookingupofafilefor4*‰apascalprogram.‚Givenastringcontainingafile7*‰name,itwillattempttofindthatfile.‚Thefunction5*‰thenreturnsanenumeratedtypewhichwillindicate&*‰oneofthefollowingaboutthefile:**1)‚Thefilewasfound.6*2)‚Thefilewasfoundbuttherewasaprotecterror.*3)‚Thefilewasnotfound.*4)‚Thefilenamewasinvalid.(*5)‚Theroutinewasunabletodetermine*”thestatusofthefile.*;*‰Inordertousethisroutine,theusermustfirstdeclare$*‰thefollowingtypeinhisprogram:*)*filestatus=(found,protected,notfound,*žinvalidname,undeterminable)*1*‰Also,thefunctionmustbedeclaredasfollows:*6*FUNCTION‚p$lookup(VARfil:stringtype):filestatus; *“FORWARD;***‰where'stringtype'isany'STRING'type.*/*‰Thisprocedureusesth eregistersasfollows:*)*D0-Temporaryuse/ReturnedbyEDITFILE*D1-Temporaryuse*D2-LUNusagebitmap*6*A0-Addressoffilenamestringandparameterblock*A1-Returnaddress'*A2-Addressoffunctionreturnvalue*A4-Temporaryvalue*A5-PointertoPascalRMA*A7-Stackpointer*$*‰Copyrighted1980byMotorola,Inc.***‰Definethoseroutinesneeded*ŠXREFƒ.PEDTFIL,.PALSTS***‰Definetheentrypoint*ŠXDEFƒP$LOOKUP**ŠPAGE***‰Thenecessaryequatesfollow***‰Firstarethetrapnumbers*FHS‡EQU„3’TrapnumberforFHS*ERRTRAPƒEQU„14‘Trapnumberforfatalerror(IOSENUMƒEQU„2’ErrornumberforIOSerror***‰NextaretheoffsetsintothePascalRMA*!RMALUN„EQU„40‘OffsetofLUNtable,RMAVOLUƒEQU„58‘Offsetofdefaultvolumename,RMAUSERƒEQU„62‘Offsetofdefaultusernumber,RMACAT„EQU„64‘Offsetofdefaultcatalogname*.*‰NowtheoffsetsintotheFHSparameterblock*FHSCODEƒEQU„0’Offsetofcode„QI•M5FHSCMD„EQU„1’OffsetofcommandFHSOPT„EQU„2’OffsetofoptionsFHSSTATƒEQU„4’OffsetofstatusFHSLUN„EQU„5’OffsetofLUN#FHSVOLUƒEQU„6’Offsetofvolumename$FHSUSERƒEQU„10‘Offsetofusernumber$FHSCAT„EQU„12‘Offsetofcatalogname"FHSFILEƒEQU„20‘Offsetoffilename!FHSEXT„EQU„28‘Offsetofextension%FHSRES„EQU„30‘Offsetofreservedword$FHSWCODE‚EQU„32‘Offsetofwritecode#FHSRCODE‚EQU„33‘Offsetofreadcode*2PARMSIZE‚EQU„40‘SizeofFHSparamblock(inbytes)**‰NextaretheFHScodes*.ASSIGN„EQU„$0040ŽCode/commandtoassignafile,CLOSE…EQU„$0004ŽCode/commandtocloseafile$PRˆEQU„$0000ŽOptionsforpublicread***‰NextaretheerrorreturncodesfromFHS*$LUERR…EQU„$03LUerror-invalidLUN)VOLERR„EQU„$04Volumeerror-nonexistent%DESCERRƒEQU„$06Filedescriptorerror5PROTERRƒEQU„$07Protectionviolation-filewasfound,ACCERR„EQU„$0BAccesserror-filewasfound,ASSERR„EQU„$0DAssignmenterror-LUNinuse#NAMEERRƒEQU„$17Filenamenotfound*%*‰Thesearethefunctionreturncodes*FOUND…EQU„0’Filewasfound(PROTECTEDEQU„1’Filefoundbutprotected!NOTFOUND‚EQU„2’Filewasnotfound#INVALIDƒEQU„3’Filenamewasinvalid'UNDETERƒEQU„4’Statuswasundeterminable**‰Finally,miscellaneousstuff*'CRˆEQU„13‘ASCIIcodeofcarriagereturn*ŠPAGE***‰Hereisthecode*P$LOOKUP‚EQU„**,ŠMOVE.L(A7)+,A1‹Rememberthereturnaddress&ŠMOVE.L(A7)+,A0‹GetaddressofstringŠCLR.L‚D0‘Getlength...ŠMOVE.W(A0),D0Œofstring.*3ŠMOVE.LA7,A2ŽA2=addressofreturnfunctionvalue*"ŠMOVE.WD0,D4ŽAllocatespaceon...0ŠADD.W‚#PARMSIZE+18,D4„thestackforstring,..."ŠJSR„(A3)FHSparameterblock,..."ŠDC.Lƒ.PALSTS-*Šandalittlemore.*ŠMOVE.LA2,A4ŽPuta...ŠBTSTƒ#0,D0Žcarriage...ŠBNE.S‚MOVECRreturn...ŠSUBQ.L#1,A4Žinthe...MOVECR„MOVE.B#CR,-(A4)Šstack.**ŠADD.L‚D0,A0ŽCalcaddressofbyteafter...)ŠADDQ.L#2,A0Žlastcharacteroffilename.*ŠTST.W‚D0‘Movefile...ŠBEQ.S‚MOVEDONE‹nameonto...$MOVEBYTE‚MOVE.B-(A0),-(A4)ˆstack...ŠSUBQ.W#1,D0Ž(lastbyte...ŠBNE.S‚MOVEBYTE‹first).*2MOVEDONE‚MOVE.LA4,D0ŽRememberaddressoffilename*<ŠLEA„-PARMSIZE(A4),A7ƒAllocatespaceforFHSparameterblock1ŠMOVE.LA7,A0ŽRememberaddressofparameterblock*.*‰SetupdefaultvaluesinFHSparameterblock*ŠMOVE.L#'„',D1/ŠMOVE.W#ASSIGN,FHSCODE(A0)‰Setupcode/command%ŠMOVE.W#PR,FHSOPT(A0)ŽSetupoptions2ŠMOVE.LRMAVOLU(A5),FHSVOLU(A0)…Setupvolumename2ŠMOVE.WRMAUSER(A5),FHSUSER(A0)…Setupusernumber'ŠMOVE.LRMACAT(A5),FHSCAT(A0)‡Setup.../ŠMOVE.LRMACAT+4(A5),FHSCAT+4(A0)ƒcatalogname. ŠMOVE.LD1,FHSFILE(A0)ŽSetup...#ŠMOVE.LD1,FHSFILE+4(A0)Œfilename.)ŠMOVE.W#'SA',FHSEXT(A0)ŒSetupextension.ŠCLR.L‚FHSRES(A0)’Set upresword&protcodes*#ŠMOVEM.L‚A3-A6,-(A7)†Saveregisters**ŠMOVE.LA0,A6ŽA6pointstoFHSparamblock$ŠMOVE.LD0,A0ŽA0pointstofilename*ŠJSR„(A3)Editthe...ŠDC.Lƒ.PEDTFIL-*‰filename.*-ŠMOVE.LA6,A0ŽRememberaddressofparamblock'ŠMOVE.LD0,D1ŽRemembereditfilestatus*ŠMOVEM.L‚(A7)+,A3-A6†Restoretheregisters*ŠAND.L‚#$FF8003FC,D0†Check...ŠBNE.S‚EDITERRŒfor...ŠBTSTƒ#1,D1Ža...ŠBNE.S‚EDITOKsyntax...ŠBTSTƒ#11,D1error...ŠBEQ.S‚EDITOKin...$EDITERRƒMOVE.B#INVALID,(A2)†file...ŠBRA.S‚RETURNname.*+*‰EditfilewentOK-nowlookforthefile* EDITOK„EQU„**+ŠMOVE.LRMALUN(A5),D2†GetLUNusebittableŠMOVE.B#-1,D1InitLUN*+*‰Loopheretotrynextlogicalunitnumber* NEXTLUNƒEQU„**ŠADDQ.B#1,D1ŽComputenext...ŠCMP.B‚#32,D1LUNtotry.ŠBEQ.S‚FHSERR2ŒRanoutofLUN's*"ŠBTSTƒD1,D2ŽIsthisLUNavailable? ŠBNE.S‚NEXTLUNŒNo-trynextone*5ŠMOVE.BD1,FHSLUN(A0)†Yes-setupluninparamblock*ŠTRAPƒ#FHSTrytofindfile*ŠBNE.S‚FHSERRError*'*‰FHSfoundthefile-telltheworld!!*ŠMOVE.B#FOUND,(A2)ˆShowfound*)ŠMOVE.W#CLOSE,FHSCODE(A0)Yes-close...ŠTRAPƒ#FHSthefile.*ŠBEQ.S‚RETURNNoerror-return*,*‰IfthereisanIOSerror,peoplecomehere$*‰toproduceapascalruntimeerror.*IOSERR„TRAPƒ#ERRTRAP‹Trap...ŠDC.WƒIOSENUMŒout.*+*‰FHSdidn'tfindthefile-figureoutwhy* FHSERR„EQU„**ŠBTSTƒ#7,D0ŽCheckfor...ŠBNE.S‚IOSERRIOSerror.*ŠCMP.B‚#LUERR,D0ŠWas...ŠBEQ.S‚NEXTLUNŒita...ŠCMP.B‚#ASSERR,D0‰LUNerror?!ŠBEQ.S‚NEXTLUNŒYes-trynextLUN*$ŠCMP.B‚#PROTERR,D0ˆNo-wasitan...#ŠBEQ.S‚FHSERR3Œaccesspermission...#ŠCMP.B‚#ACCERR,D0‰orprotecterror?ŠBNE.S‚FHSERR4ŒNo*7FHSERR3ƒMOVE.B#PROTECTED,(A2)„Yes-showfilethere... ŠBRA.S‚RETURNbutaccessdenied.*'FHSERR4ƒCMP.B‚#VOLERR,D0‰No-wasit...ŠBEQ.S‚FHSERR0Œafile...ŠCMP.B‚#NAMEERR,D0ˆnotfound...ŠBNE.S‚FHSERR1Œerror?*+FHSERR0ƒMOVE.B#NOTFOUND,(A2)…Yes-show...ŠBRA.S‚RETURNfilenotfound.*/FHSERR1ƒCMP.B‚#DESCERR,D0ˆNo-wasitafile...!ŠBNE.S‚FHSERR2Œnamesyntaxerror?*+ŠMOVE.B#INVALID,(A2)†Yes-showinvalid...ŠBRA.S‚RETURNfilename.*=FHSERR2ƒMOVE.B#UNDETER,(A2)†No-showcan'tdeterminestatus***‰Everyonecomesheretoreturn* RETURN„EQU„** ŠMOVE.LA2,A7ŽBumpstackpointer*ŠJMP„(A1)Return**ŠENDééé(ŠTTL„SetChainCmdDiagReg‚1.00‚7/28/81/SETDIAGƒIDNTƒ1,0SetChainCmdDiagReg‚7/28/81**ƒPascalDeclaration:***‰PROCEDURE‚p$setdiag(diagreg:integer2);* *ƒFunction:*1*‰Setsthechaincommanddiagnosticregisterword*‰inthePascalRMA.**ƒStackonEntry:*#*‰A7‚-->‚returnaddressŒ(longword)*’valuetobeputinRMA„(word)*’previouscontentsofstack**ƒStackonExit:*#*‰A7‚-->‚previouscontentsofstack**ƒRegistersModified:**‹01234567*‰A***‰D**ƒVitalStatistics:**‰Created-28July1981*‰Programmer-JohnKoehring*‰LastModified-*$*‚Copyrighted1981byMotorola,Inc.** *‰Equates*.DIAGREGƒEQU„$34OffsetofdiagregwordinRMA***‰Declareen trypoint*ŠXDEFƒP$SETDIAG** *‰Thecode*)ŠSECTION9‘ForlinkingtoPascalprograms*P$SETDIAGEQU„*’Entrypoint*(ŠMOVE.L(A7)+,A0‹Savethereturnaddress*3ŠMOVE.W(A7)+,DIAGREG(A5)‚PutdiagregvalueinRMA*ŠJMP„(A0)Return*ŠENDééé¥<' CONFIG BIN2ASCISAººÊrrCFIGDATASAÓÓÏrrCLSDASGNSAôôrrCNFGTBLSSAmrrFORCE SAvv>rrGETMEMCBSAMHrrGETSTRCBSAÐКrrHEX2ASCISAééÕrrINITLIZESA  SsrrMODMEMCBSAcc:±rrMODSTRCBSA¤¤—rrPRINT SA½½>ÍrrF***********************************************************************Ä* *œBIN2ASCI **Ä*"*BIN2ASCI(valbuf,value,size)—**Ä**˜NOINCLUDEFILESœ**Ä*<*ˆBIN2ASCIconvertstheCBvalueinCONFIG'sstoragetoan„**ˆASCIIbinarystring.¨**Ä**ˆALGORITHM:²*/*’1.‚Gettheaddressofvalbufoffthestack.†*/*–Valbufhasblanksinit.‚Put"%"intofirst‚*,*–locationofvalbuf.‚Movethevaluetobe…*(*–convertedoffthestackandintoD0.Š*3*’2.‚Getthesizeofthevalueoffthestack.‚Put**–sizeinD1.£**’3.‚Ifsizeofvalueis:š*&*–a.‚bytethenD1<--8,A0<--A0+9‹**šA1<--A1+3Ÿ*(*–b.‚wordthenD1<--16,A0<--A0+17‰**šA1<--A1+2Ÿ*,*–c.‚longwordthenD1<--32,A0<--A0+33…*1*–D1willbethecounterforthenumberofbits*0*–converted.‚A1willpointtothebyteofaddr*/*–wherevalueforpropersizebegins.‚Restof‚*0*–registerwillhavezeroesthatwedon'twant‚*/*–inthevaluefieldinthemenu.‚However,we‚*+*–dowantanyremainingleadingzeroesto‡*+*–indicatethesizeofthefield.‚A0will†*0*–pointtolocationinvalbufafterwherelast‚*.*–characterwillbeinsertedsincetheywill„*-*–beinsertedfromlowordertohighorder.…**’4.‚Convertthevalue.œ*/*–a.‚Movepointertonextlocationinvalbuf.‚*,*–b.‚Rightshiftfirstbitintocarrybit.…*(*–c.‚Putappropriatecharintovalbuf.‰**–d.‚D1<--D1-1.ž**–e.‚IfD1<>0,gotoa.–*$*’5.‚Restorethestackandreturn.‘**Ä* *‚REGISTERS¹*>*„IN…:ƒA3pointstoPascalruntime library;MUSTbepreserved*0*‹:ƒA5pointstoPascalRMA;MUSTbepreserved‹*-*‹:ƒA6pointstoPascallocalvariableareaŽ*:*‹:ƒA7pointstostackwithparametersandreturnaddress**MUSTbepreserved¤**Ä*&*„DURING:ƒA0getsaddressofvalbufœ**A1getsaddressofvalue**D0getssizeofvalue *1*D1getscounterfornumberofbitstoconvertˆ**D2getsbitforconversion›*!*„OUT„:ƒA3,A5,A6-sameasINž**A7pointstowayback **Ä*²9»FÃLA*‚PARAMETERS:Theaddressesoftheparametersareonthestack…*5*suchthatthefirstparameterisputonthestack„*5*firstandthelastparameterisatthetopofthe„*(*stackjustunderthereturnaddress.‘**Ä*F***********************************************************************‰OPT‡A*BIN2ASCIIDNT†1,0‰PAGEF************************************************************************•XDEFSƒ&ƒXREFS*F***********************************************************************"‰XDEF†BIN2ASCIŒProgramentrypoint**F************************************************************************‘THEƒSTACK*F***********************************************************************ˆ____________*„LO‚|returnƒ|‚TOS<--A7 *ˆ|address‚|'*ˆ|----------|ˆ------------------------*ˆ|size…|ˆsizeofvalue'*ˆ|----------|ˆ------------------------!*ˆ|value„|ˆvaluetobeconverted'*ˆ|----------|ˆ------------------------!*ƒHIƒ|valbufƒ|ˆaddressofvalbuf*ˆ------------*E*--------------------------------------------------------------------**•STACKƒOFFSETS*F*---------------------------------------------------------------------* ‰OFFSET„0*RETADDR‚DS.L†1‰returnaddressSZVAL„DS.W†1‰sizeofvalue"VALUE„DS.L†1‰valuetobeconverted BUFADDR‚DS.L†1‰addressofvalbufSTKLENƒEQU‡*-4*D*‚Thereturnaddressisalwaysplacedonthetopofthestackwhena3*‚assemblyroutineiscalledfromaPascalprogram.*F************************************************************************—EQUATES*F***********************************************************************BYTE…EQU‡1‰sizeofvalueWORD…EQU‡2‰sizeofvaluePERCENT‚EQU‡$25‡percentsignZERO…EQU‡$30‡zeroONE†EQU‡$31‡one3LOWBYTE‚EQU‡$000000FFzeroesoutallbutlowerbyte‰PAGEF************************************************************************‘STARTƒOFƒPROGRAM*F***********************************************************************'‰SECTIONƒ9“ASMroutinesgoinSection9*BIN2ASCIEQU‡**8*‚STEP1.‚Getaddressofvalbufandvalueoffthestack.8*‹Getvaluesize.‚Put"%"intofirstlocationofvalbuf.**ˆGetaddressofvalbuf.*1‰MOVE.L„BUFADDR(A7),A0†A0<--addrofCBonstack*(*ˆPut"%"intofirstlocationofvalbuf.*0‰MOVE.B„#$25,(A0)‹Firstlocationinvalbuf<--%**ˆGetvalueandputintoD2.*,‰MOVE.L„VALUE(A7),D2ˆD2<--addressofvalue‰PAGE**‚STEP2.‚PutsizeintoD0.*)‰MOVE.B„SZVAL(A7),D0ˆDO<--valueofsize‰PAGE*G*‚STEP3.‚Initializebitcountingregisterandadjustaddressregisters**5‰IF.B#BYTED0THEN.S…Ifvalueisabyteinsize'‹ADD.L‚#3,A1Movetolastbyteofvalue0‹ADD.L‚#9,A0Move1beyondlocationfor8thchar&‹MOVE.W#8,D1D1willcountfor8bits ‰ELSE.S˜("%"isin1stlocation)5‹IF.B#WORDD0THEN.SƒIfvalueisawordinsize,ADD.L‚#2,A1ŽMovetoloworderwordofvalue2ADD.L‚#17,A0Move1beyondlocationfor16thchar(MOVE.W#16,D1D1willcountfor16bits ‹ELSE.S–else2ADD.L‚#33,A0Move1beyondlocationfor32ndchar(MOVE.W#32,D1D1willcountfor32bits‹ENDI‰ENDI‰PAGE*4*‚STEP4.‚In stallappropriatecharacterintovalbuf.*?*ˆShiftoutrightmostbitintocarrybit.Ifits0thenput'0'@*ˆintorightofvalbuf,elseputina'1'.‚Moveaddresspointing$*ˆintovalbuflefttonextlocation.**CNVRT„LSR.L…#1,D2Shiftbitintocarrybit)‰BCC.S…MOVZERO‹Ifbit=0thengotoZERO#‰MOVE.B„#ONE,-(A0)ˆElsemoveinone‰BRA.S…SUBTŽGotoSUBT'MOVZERO‚MOVE.B„#ZERO,-(A0)‡Moveinzero*1*ˆSubtractonefromD1since1bitwasconverted.*SUBT…SUB.W…#1,D1DecrementD1*>*ˆIfallbitsarenotdoneyetgobacktobeginningofSTEP4.* ‰IF.W‚THEN.S‹Anybitsleft?‹BRA.SƒCNVRTGobacktothem‰ENDI‰PAGE**‚STEP5.‚Restorethestack.*GOHOMEƒMOVE.L„(A7),STKLEN(A7)‰ADD.L…#STKLEN,A7‰RTS*‰ENDF***********************************************************************Ä**™CFIGDATA.SA **Ä**ˆINCLUDEƒ9995.&.EXE.EQ¥**ˆINCLUDEƒ9995.&.IOE.EQ¥**Ä*;*ˆThisistheareafortheassemblydatastructureswhich…*9*ˆareusedinthevariousassemblyroutinesincludedin‡* *ˆCONFIG.µ**Ä*@*ˆItissetupinsuchawaythattheoffsetstothestructures*>*ˆarecalculatedatassemblytime.‚Thus,anewdatastructure*8*ˆcanbeaddedforuseinoneassemblyroutinewithoutˆ*;*ˆjeopardizingtheexecutionofanyoftheotherroutines…*;*ˆPROVIDEDITISADDEDTOTHEENDOFTHEALREADYEXISTING…**ˆSTRUCTURES.±**Ä*<*ˆThereasonforincludingallassemblydatastructuresin„*<*ˆoneareaisthatanumberofthemareusedinseveralof„*6*ˆassemblyroutinesandthedatasectioncanonlybeŠ*;*ˆaccessedinannon-MMUenvironmentafterareceivetask…*"*ˆdirectiveobtainsitsaddress.ž**Ä*?*ˆThefirstassemblyroutineexecutedobtainsthisaddressan*?*ˆsavesitinthePascaldataareaforfutureuse.‚Thus,using*:*ˆthestoredaddressandtheoffsetsdefinedatassembly†*9*ˆtime,alltheassemblyroutinescaneasilyaccessthe‡**ˆassemblydataarea.©**Ä*F************************************************************************“INCLUDEƒFILES*G*************************************************************************ˆINCLUDEƒ9995.&.EXE.EQ*ˆINCLUDEƒ9995.&.IOE.EQ*ˆNOLIST‰NOLIST‰INCLUDEƒ9995.&.EXE.EQ‰INCLUDEƒ9995.&.IOE.EQ‰LIST*CFIGDATAIDNT†1,0*‰PAGEF*********************************************************************** *œXDEFS*F***********************************************************************‰XDEF†FHSPB…FHSparameterblock‰XDEF†IOSPB…IOSparameterblock8‰XDEF†TSKATRPB‚Taskattributesdirectiveparameterblock2‰XDEF†EMPBLK„Errormessagehandlerparameterblock#‰XDEF†APTBL…Accesspermissiontable‰XDEF†ASQPB…ASQparameterblock)‰XDEF†BRKSPB„Claimbreaksparameterblock*Ë=Ô@Ü7äF************************************************************************•EQUATES*F***********************************************************************/BLANK2ƒEQU‡'‚'†2blanksforFHSparameterblock/BLANK4ƒEQU‡'„'„4blanksforFHSparameterblockUSERZEROEQU‡0‰userzero‰PAGEF************************************************************************•DATAƒAREA*F*********************************************************************** ‰SECTIONƒ0‰OPT‡A*BˆEQU‡**G************************************************************************C*ˆFHSparameterblockforassigningadeviceisusedpriortodoing<*ˆanyconfigurecommand.‚Itisalsousedwithapublicwrite=*ˆtodetermineifadeviceexistsorinthecaseofaprinter<*ˆifitexistsandthespoolerisactive.‚Itisusedwithan?*ˆexclusivewritetodetermineifadeviceisbusy.‚Finally,it:*ˆisusedpriortoanIOScommandtoputoutacopyofthe*ˆreconfiguredDCBorCCB.*F*===== ================================================================*‰DSˆ04FHSPB„EQU‡*-B‡OffsettostartofFHSparameterblock#‰DCB.B…FHSBLN,0‚FHSparameterblock*‰PAGEF*=====================================================================*:*ˆIOSparameterblockfordoingconfigurecommandsandfor0*ˆputtingoutacopyofthereconfigureddevice.*F*---------------------------------------------------------------------*‰DSˆ0+IOSPB„EQU‡*-B‘OffsettoIOSparameterblock#‰DCB.B…IOSBLN,0ŒIOSparameterblock*‰PAGEF*=====================================================================*@*ˆTSKATRPBisusedtogettheuserlogonnumber.‚Itisusedonly*ˆonceinINITLIZE.*E*--------------------------------------------------------------------*‰DSˆ0TSKATRPBEQU‡*-B‡OFFSET0‰DCB.L…2,0‡Willgettasknameandsessionnumber.*F*=====================================================================*@*ˆCRTCBPBisusedtocreateadummytaskforaconfigurerequest>*ˆsothattheconfigurationwilllastuntiltheuserlogsoff.*E*--------------------------------------------------------------------*‰DSˆ0@CRTCBPB‚DCB.L…CRTLEN,0„Parameterblockforcreatingadummytask*F*=====================================================================*6*ˆEMPBLKisusedforthesystemerrormessagehandler.*6*ˆEMA0ischangedinatleastoneprocedurewhichuses7*ˆEMPBLK.‚Thus,EMA0needstobereinitializedinevery:*ˆprocedureinwhichEMPBLKisused.‚Therestoftheblock#*ˆcanbeleftasinitializedbelow.*F*---------------------------------------------------------------------*‰DSˆ0*EMPBLKƒEQU‡*-B‡OffsettoERRMSGparmblock*.EMD0…DC.L†0‰UserregD0-hasERRMSGkeyvalue3EMA0…DC.L†0‰UserregA0-pointsatI/Ocontrolblk$EMOPT„DC.B†0‰Reservedforfutureuse'EMTLUNƒDC.B†LDFLUN„LUforoutputonCRT$EMQRC„DC.B†0‰Reservedforfutureuse%EMKLUNƒDC.B†0‰Reservedforfutureuse2EMSPA„DC.L†0‰Startaddressforusertextplugpool0EMEPA„DC.L†0‰Endaddressforusertextplugpool*‰PAGEF*=====================================================================*>*ˆAccessPermissionTablehastheasscesspermissionssuitable*ˆforeachdevicetype.*=*ˆInthecaseofareconfigurationofthelogonterminal,the<*ˆaccesspermissioncodewillneedtobepublicread,public>*ˆwritesothatthenewconfigurationwilllastbeyondtheend?*ˆofCONFIG'sexecution.‚Thiscaseishandledasaspecialcase#*ˆanddoesnotusethetablebelow.*‰DSˆ0/APTBL„EQU‡*-B‡Offsettoaccesspermissiontable*1FDSK…DC.W†FOPEREWƒExcluxiveread,exclusivewrite1HDSK…DC.W†FOPEREWƒExcluxiveread,exclusivewrite2TRMNL„DC.W†FOPEREWƒExcluxiveread,exclusivewrite PRNTR„DC.W†FOPEW…Excluxivewrite1MTAP…DC.W†FOPEREWƒExcluxiveread,exclusivewrite*F*====================================================================**8*ˆASQPBistheparameterblockforallocatingmemoryfor5*ˆCONFIG'sASQwhichwillreceivebreaknotification.*F*--------------------------------------------------------------------**‰DSˆ0ASQPB„EQU‡*-B‡Offset‰DC.L†0‰Taskname‰DC.L†0‰Session‰DC.B†$05‡ASQstatus‰DC.B†20ˆMessagelength‰DC.L†80ˆQueuelength‰DC.L†0‰AddressofASR‰DC.L†0‰Receivingarea*F*====================================================================***ˆClaimbreaksparameterblock.*F*--------------------------------------------------------------------**‰DSˆ0BRKSPBƒEQU‡*-B‡Offset‰DC.W†IOBRKS„Claimbreaks‰DC.W†0‰Options‰DC.B†0‰Status‰DC.B†CDFLUN„logondevice‰DC.W†0‰reserved%‰DC.L†0,0,0,0,0remainderofparmblk‰ENDé ééééF***********************************************************************Ä* *œCLSDASGN **Ä**CLSDASGN(asmem,duration);š**Ä* *ˆIncludefiles:†9995.&.IOE.EQ›**Ä*9*ˆCLSDASGNclosestheassignmenttoLUN=2,thetarget‡* *ˆdevice.µ**Ä* *‚REGISTERS¹*>*„IN…:ƒA3pointstoPascalruntimelibrary;MUSTbepreserved*0*‹:ƒA5pointstoPascalRMA;MUSTbepreserved‹*-*‹:ƒA6pointstoPascallocalvariableareaŽ*:*‹:ƒA7pointstostackwithparametersandreturnaddress**MUSTbepreserved¤**Ä*+*„DURING:ƒA0pointstovariousparmblks—*(*A4pointstomemoryareaforPascal.‘*!*„OUT„:ƒA3,A5,A6-sameasINž**A7pointstowayback **Ä*A*‚PARAMETERS:Theaddressesoftheparametersareonthestack…*8*suchthatthefirstparameterisplacedonthestack*5*firstandthelastparameterisatthetopofthe„*(*stackjustunderthereturnaddress.‘*(*ThecalltoCLSDASGNwasasfollows:‘**Ä*F**********************************************************************‰PAGE*‰OPT‡A*CLSDASGNIDNT†1,0*‰PAGE*F*********************************************************************** *•XDEFS*F***********************************************************************"‰XDEF†CLSDASGNŒProgramentrypoint*F*********************************************************************** *•XREFS*F***********************************************************************‰XREF†FHSPBFHSparameterblock‰PAGEF************************************************************************INCLUDEƒFILES*F************************************************************************ˆINCLUDEƒ9995.&.IOE.EQ*ˆINCLUDEƒ9995.&.NIO.EQ*ˆNOLIST‰NOLIST‰INCLUDEƒ9995.&.IOE.EQ‰INCLUDEƒ9995.&.NIO.EQ‰LIST*F************************************************************************™EQUATES*F***********************************************************************TRGTLUN‚EQU‡2‰TargetdeviceìKõEPERM…EQU‡0‰configuredefaults*‰PAGEF************************************************************************‘THEƒSTACK*F***********************************************************************ˆ____________*„LO‚|returnƒ|‚TOS<--A7 *ˆ|address‚|'*ˆ|----------|ˆ------------------------4*ˆ|duration|ˆpermanent=0/temporary=1configuration'*ˆ|----------|ˆ------------------------,*„HI‚|asmem„|ˆaddressofassemblydataarea'*ˆ|----------|ˆ------------------------*&*ˆSeeXREFaboveforcalltoCLSDASGN.*E*--------------------------------------------------------------------**•STACKƒOFFSETS*F*---------------------------------------------------------------------* ‰OFFSET„0*RETADDR‚DS.L†1‰r eturnaddressDURATIONDS.W†1‰cnfgdef/cnfg-ASMMEMADDS.L†1‰assemblydatasectionaddressSTKLENƒEQU‡*-4*D*‚Thereturnaddressisalwaysplacedonthetopofthestackwhena3*‚assemblyroutineiscalledfromaPascalprogram.*‰PAGE F************************************************************************‘STARTƒOFƒPROGRAM*F*********************************************************************** ‰SECTIONƒ9*CLSDASGNEQU‡**ŠGetaddressofdataarea.*,‰MOVE.L„ASMMEMAD(A7),A4…Addressifdataarea-‰MOVE.B„DURATION(A7),D1…Getcnfgdef=0/cnfg=1**ˆPerformclose.*7‰LEA‡FHSPB(A4),A0‹LoadaddrofFHSparmblkfromoffset(‰MOVE.W„#FHCLOS,FHSCMD(A0)…Performclose‰IF.B†D1#PERMTHEN.S0‹MOVE.W‚#0,FHSOPT(A0)ŠConfigurewithcloseisok‰ELSE.S8‹BSETW…#FOPOVRTB,FHSOPT(A0)Don'treconfigurewithclose‰ENDI1‰MOVE.B„#TRGTLUN,FHSLUN(A0)„LUNfortargetdevice‰TRAP†#3•Doclose**ˆRestorestack.*‰MOVE.L„(A7),STKLEN(A7)‰ADD.L…#STKLEN,A7‰RTS‰ENDF***********************************************************************Ä**˜CNFGTBLS**Ä*F***********************************************************************Ä**’INCLUDEƒFILES™**Ä*F***********************************************************************Ä**ˆ9995.&.IOE.EQ¯**Ä*F***********************************************************************Ä*‰NOLIST‰INCLUDEƒ9995.&.IOE.EQ‰LIST*CNFGTBLSIDNT†1,0*F***********************************************************************Ä**—EQUATES **Ä*F***********************************************************************BINARYƒEQU‡$42‡'B'DECIMAL‚EQU‡$44‡'D'HEX†EQU‡$48‡'H'NONE…EQU‡$4E‡'N' ZERO…EQU‡0*A*‚CNFGTBLSdefinesthetablesandmenusforCONFIG.‚Itincludes„**Ä**†TheTables´*=*ˆPARMTBLƒ-Parameternamesandotherinfoaboutparameters.**ˆATTRTBLƒ-Attributenames. *1*ˆVALTBL„-Bothvaluesfortheattributesword.Œ**Ä**†TheHeader´***ˆPARMHDRƒ-Headerforparameterscreen.”***ˆATTRHDRƒ-Headerforattributescreen.”**Ä* *†AString¶*$*‡NOMODSTRƒ-NOTMODIFIABLEstring›**Ä* *†TheMenusµ**‡DNMMENU„-Devicenamemenu *3*‡BFMMENU„-Bootfile/memorymenu.(forPhaseII)‹**‡CBTMENU„-CBtypemenu.£**‡CFGMENU„-Configuremenu.¡*&*‡CPYMENU„-Copyconfigurationmenu.˜**Ä**ƒTheHelpScreens±* *†CBTHELP…-CBtypehelpmenu.ž*)*†BFMHELP…-Bootfile/memoryhelpmenu.•*"*†PRMHELP…-Parameterhelpmenu.œ*"*†ATRHELP…-Attributehelpmenu.œ*"*†CFGHELP…-Configurehelpmenu.œ*+*†CPYHELP…-Copyconfigurationhelpmenu.“**Ä*F*--------------------------------------------------------------------**Ä*1*‹MAINTENANCEƒINSTRUCTIONSŠ**Ä*'*FOR„ADDINGƒNEWƒTABLES**Ä*:*†Ifanewtableisadded,apointermustbedeclaredinˆ*=*†thePascalportionofCONFIGandthepointertothetable…*:*†willneedtobeplacedintheproceduredeclarationofˆ*ýF@8Yb&^.C6H>>FQNZVI^9fM@*†INITLIZEandinitsprocedurecall.‚InINITLIZE,thepointer*=*†willneedtobeplacedintheXREFsandinitsrespective…*?*†positioninthestackoffset.‚Codewillneedtobeaddedto‚*;*†INITLIZEtoinitializethepointer.‚Notethatthereare†*>*†severaldifferenttypesofpointersdeclaredinthePascal„*8*†portion,onetypeofpointerforeachtypeoftable.Š*=*†Additionally,thetableitselfwillneedtobeXREFedand…*>*†carefullypositionedinCNFGTBLSaccordingtoitsposition„**† initsrespectivegroup.¦**Ä*=*†Thetablesbelowaregroupedaccordingtotheirfunction.…*:*†Ifthereisanychangeinthesizeofatablethentheˆ*A*†thecorrespondingconstantthatdefinesthetablesizeinthe*?*†Pascaldeclarationforthattablewillneedtoberedefinedƒ**†intheCONSTdeclaration.¥**Ä*F*********************************************************************** *’XDEFs*F*********************************************************************** ‰XDEF†PARMTBL ‰XDEF†ATTRTBL ‰XDEF†VALTBL ‰XDEF†PARMHDR ‰XDEF†ATTRHDR‰XDEF†NOMODSTR ‰XDEF†DNMMENU ‰XDEF†BFMMENU ‰XDEF†CBTMENU ‰XDEF†CFGMENU ‰XDEF†CPYMENU ‰XDEF†CBTHELP ‰XDEF†BFMHELP ‰XDEF†PRMHELP ‰XDEF†ATRHELP ‰XDEF†CFGHELP ‰XDEF†CPYHELP ‰XDEF†BAUDTBL*Ä**‰PAGEF***********************************************************************Ä**’DATAƒSECTION›**Ä*F***********************************************************************‰OPT‡A ‰SECTIONƒ10*F***********************************************************************Ä**–PARMTBL¡**Ä*F***********************************************************************?*‚PARMTBL:Thereisonetableforeachdevicetype.‚EachtableH*‚hasthenumberofrowsforthespecificdeviceandanentrylengthforH*‚thenumberofbytesinitsrows.‚Thesetoftablesforallthedevices*‚iscalledPARMTBL.*K*‚THISSETOFTABLESHASASPECIALORDERACCORDINGTOITSDEVICETYPE.‚EACHJ*‚TABLEISPOSITIONEDWITHRESPECTTOTHEVALUEOFITSDEVICETYPECODEINC*‚THEDCB.‚IFANEWTABLEISADDED,ITMUSTBEPOSITIONEDCAREFULLYD*‚ACCORDINGTOITSDEVICETYPECODEVALUE.‚Thetablesareorderedas-*‚follows:‚disk,terminal,printer,magtape.*6*ˆnumparmˆ=numberofparameterrowsinspecifictable)*ˆpntrylen‡=lengthofeachparameterrow(*ˆparametername=nameoftheparameter/*ˆsize‹=numberofbytesintheparametervalue;*ˆbase‹=baseinwhichparametervalueisdisplayedtouser(*ˆoffset‰=parameter'soffsetintheDCB9PNTRYLENEQU…38…=numberofbytesineachparameterentry-*™MUSTBEADJUSTEDIFENTRYLENGTHISCHANGED1*™MUSTAGREEWITHENTRYLENGTHINITSPASCALDATA5*™STRUCTURE.‚CHANGEVALUEOFnamelenINPASCALCONST.,*™IFLENGTHOFNAMECHANGES,numscrncolsFOR"*™parmscrnMAYALSONEEDCHANGING.1*™LENGTHOFATTRTBLENTRYISALSONAMELEN,CHANGE#*™ANTRYLENBELOWIFnamelenCHANGES* ____________,*|numparm‚|<--installedatassemblytime* |----------|* | pntrylen | <-- equate2* |__________|____________________________________ *||†|†||2* | parameter name | size | base | offset in DCB |2* |________________|______|______|_______________|*F*---------------------------------------------------------------------*ŠDS.W…0=PARMTBLƒEQU†*‰Beginningofsetofparameterstables-PARMTBL*‰PAGEG*----------------------------------------------------------------------*'*ˆDISKƒPARAMETERSƒTABLE!*Œ(forharddiskandfloppydisk)*G*----------------------------------------------------------------------*PDSKTBLƒDC.B…DPTBLLENŠDC.B…PNTRYLEN/DPTBLSTR‚DC.B…'ƒ0.Attributesword‹'†fieldname'ŠDC.B…IOSREC-IOSATW›fieldsizeinbytesŠDC.B…BINARY¢ASCIIdisplaybaseŠDC.L…IOSATW¢CBoffset!ŠDC.B…'ƒ1.VERSAdossectorsize†'ŠDC.B…IOSRSZ-IOSREC ŠDC.B…DECIMAL ŠDC.L…IOSREC$ŠDC.B…'ƒ2.Totalnumberofsectorsƒ'ŠDC.B…IOSWTO-IOSRSZ ŠDC.B…DECIMAL ŠDC.L…IOSWTOŠDC.B…'ƒ3.Writetimeout'ŠDC.B…IOSRTO-IOSWTO ŠDC.B…DECIMAL ŠDC.L…IOSWTOŠDC.B…'ƒ4.ReadtimeoutŽ'ŠDC.B…IOSSPT-IOSRTO ŠDC.B…DECIMAL ŠDC.L…IOSRTO#ŠDC.B…'ƒ5.Sectors/trackonmedia„'ŠDC.B…IOSHDS-IOSSPT ŠDC.B…DECIMAL ŠDC.L…IOSSPT%ŠDC.B…'ƒ6.Numberofheadsondrive‚'ŠDC.B…IOSTRK-IOSHDS ŠDC.B…DECIMAL ŠDC.L…IOSHDS$ŠDC.B…'ƒ7.#ofcylindersonmediaƒ'ŠDC.B…IOSILV-IOSTRK ŠDC.B…DECIMAL ŠDC.L…IOSTRKŠDC.B…'ƒ8.Interleavefactor‰'ŠDC.B…IOSSOF-IOSILV ŠDC.B…DECIMAL ŠDC.L…IOSILV#ŠDC.B…'ƒ9.Spiraloffs  etonmedia„'ŠDC.B…IOSPSM-IOSSOF ŠDC.B…DECIMAL ŠDC.L…IOSSOF'ŠDC.B…'‚10.Bytespersectoronmedia'ŠDC.B…IOSSHD-IOSPSM ŠDC.B…DECIMAL ŠDC.L…IOSPSM"ŠDC.B…'‚11.Startingheadnumber†'ŠDC.B…IOSTRKD-IOSSHD ŠDC.B…DECIMAL ŠDC.L…IOSSHD%ŠDC.B…'‚12.#ofcylindersondriveƒ'ŠDC.B…IOSPCOM-IOSTRKD ŠDC.B…DECIMAL ŠDC.L…IOSTRKD'ŠDC.B…'‚13.Precompensationcylinder#'ŠDC.B…IOSSPTD-IOSPCOM ŠDC.B…DECIMAL ŠDC.L…IOSPCOM$ŠDC.B…'‚14.Sectors/trackondrive„'ŠDC.B…IOSSRTD-IOSSPTD ŠDC.B…DECIMAL ŠDC.L…IOSSPTD ŠDC.B…'‚15.Steppingratecodeˆ'ŠDC.B…IOSEWCC-IOSSRTD ŠDC.B…DECIMAL ŠDC.L…IOSSRTD&ŠDC.B…'‚16.Reducedwritecurrcyl#‚'ŠDC.B…IOSECC-IOSEWCC ŠDC.B…DECIMAL ŠDC.L…IOSEWCC#ŠDC.B…'‚17.ECCdataburstlength…'ŠDC.B…IOSDRSV-IOSECC ŠDC.B…DECIMAL ŠDC.L…IOSECCŠDC.B…'‚H.‚Help–' ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZEROŠDC.B…'‚C.‚CONFIGUREdeviceŠ' ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZERO&ŠDC.B…'‚Q.‚Quit(gotopreviousmenu)' ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZERODPTBLEND‚EQU†*)DPTBLLEN‚EQU†(DPTBLEND-DPTBLSTR)/PNTRYLEN*‰PAGEF*---------------------------------------------------------------------*/*ˆTERMINALƒPARAMETERSƒTABLE*F*---------------------------------------------------------------------*ŠDS.W…0PTERMTBL‚DC.B…TPTBLLENŠDC.B…PNTRYLEN/TPTBLSTR‚DC.B…'‚0.‚Attributesword‹'†fieldname'ŠDC.B…IOSREC-IOSATW›fieldsizeinbytesŠDC.B…BINARY¢ASCIIdisplaybaseŠDC.L…IOSATW¢offsetinCB ŠDC.B…'‚1.‚Physicallinewidth‡'ŠDC.B…IOSRSZ-IOSREC ŠDC.B…DECIMAL ŠDC.L…IOSRECŠDC.B…'‚2.‚LinesperpageŒ'ŠDC.B…IOSWTO-IOSRSZ ŠDC.B…DECIMAL ŠDC.L…IOSRSZŠDC.B…'‚3.‚Writetime-outŒ'ŠDC.B…IOSRTO-IOSWTO ŠDC.B…DECIMAL ŠDC.L…IOSWTOŠDC.B…'‚4.‚Readtime-out'ŠDC.B…IOSXOF-IOSRTO ŠDC.B…DECIMAL ŠDC.L…IOSRTOŠDC.B…'‚5.‚XOFFcharacterŒ'ŠDC.B…IOSXON-IOSXOF ŠDC.B…HEX ŠDC.L…IOSXOFŠDC.B…'‚6.‚XONcharacter'ŠDC.B…IOSBRC-IOSXON ŠDC.B…HEX ŠDC.L…IOSXONŠDC.B…'‚7.‚BREAKequivalentŠ'ŠDC.B…IOSDOP-IOSBRC ŠDC.B…HEX ŠDC.L…IOSBRCŠDC.B…'‚8.‚DiscardoutputŒ'ŠDC.B…IOSRLN-IOSDOP ŠDC.B…HEX ŠDC.L…IOSDOPŠDC.B…'‚9.‚ReprintlineŽ'ŠDC.B…IOSCLC-IOSRLN ŠDC.B…HEX ŠDC.L…IOSRLNŠDC.B…'‚10.Cancelline'ŠDC.B…IOSRTV-IOSCLC ŠDC.B…HEX ŠDC.L…IOSCLCŠDC.B…'‚11.Readterminator‹'ŠDC.B…IOSEOL-IOSRTV ŠDC.B…HEX ŠDC.L…IOSRTVŠDC.B…'‚12.End-of-line'ŠDC.B…IOSBRT-IOSEOL ŠDC.B…HEX ŠDC.L…IOSEOLŠDC.B…'‚13.Baudrate‘'ŠDC.B…IOSNLS-IOSBRT ŠDC.B…DECIMAL ŠDC.L…IOSBRTŠDC.B…'‚14.NULLpaddingŽ'ŠDC.B…IOSTRC-IOSNLS ŠDC.B…DECIMAL ŠDC.L…IOSNLSŠDC.B…'‚15.TerminatorclassŠ'ŠDC.B…IOSTCD-IOSTRC ŠDC.B…HEX ŠDC.L…IOSTRCŠDC.B…'‚16.Terminalcode'ŠDC.B…IOSTTM-IOSTCD ŠDC.B…DECIMAL ŠDC.L…IOSTCDŠDC.B…'‚H.‚Help–' ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZEROŠDC.B…'‚C.‚CONFIGUREdeviceŠ' ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZERO&ŠDC.B…'‚Q.‚Quit(gotopreviousmenu)' ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZEROTPTBLEND‚EQU†*)TPTBLLEN‚EQU†(TPTBLEND-TPTBLSTR)/PNTRYLEN*‰PAGEF*---------------------------------------------------------------------*-*ˆPRINTERƒPARAMETERS„TABLE*F*---------------------------------------------------------------------*ŠDS.W…0PPRTTBLƒDC.B…PPTBLLENŠDC.B…PNTRYLEN/PPTBLSTR‚DC.B…'‚0.‚Attributesword‹'†fieldnameŠDC.B…IOSREC-IOSATW›fieldsizeŠDC.B…BINARY¢ASCIIdisplaybaseŠDC.L…IOSATW¢offsetinCB ŠDC.B…'‚1.‚Physicallinewidth‡'ŠDC.B…IOSRSZ-IOSREC ŠDC.B…DECIMAL ŠDC.L…IOSRECŠDC.B…'‚2.‚LinesperpageŒ'ŠDC.B…IOSWTO-IOSRSZ ŠDC.B…DECIMAL ŠDC.L…IOSRSZŠDC.B…'‚3.‚Writetimeout'ŠDC.B…IOSRTO-IOSWTO ŠDC.B…DECIMAL ŠDC.L…IOSWTOŠDC.B…'‚4.‚Reserved’'ŠDC.B…IOSLRL-IOSRTO ŠDC.B…DECIMAL ŠDC.L…IOSRTOŠDC.B…'‚5.‚Logicallinewidthˆ'ŠDC.B…IOSELC-IOSLRL ŠDC.B…DECIMAL ŠDC.L…IOSLRLŠDC.B…'‚6.‚EOLcharacter'ŠDC.B…IOSPRSV-IOSELC ŠDC.B…HEX ŠDC.L…IOSELCŠDC.B…'‚H.‚Help–' ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZEROŠDC.B…'‚C.‚CONFIGUREdeviceŠ' ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZERO&ŠDC.B…'‚Q.‚Quit(gotopreviousmenu)'   ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZEROPPTBLEND‚EQU†*)PPTBLLEN‚EQU†(PPTBLEND-PPTBLSTR)/PNTRYLEN*‰PAGEF*---------------------------------------------------------------------*-*ˆMAGƒTAPEƒPARAMETERSƒTABLE*F*---------------------------------------------------------------------*ŠDS.W…0PMAPTBLƒDC.B…MPTBLLENŠDC.B…PNTRYLEN/MPTBLSTR‚DC.B…'‚0.‚Attributesword‹'†fieldnameŠDC.B…IOSREC-IOSATW›fieldsizeŠDC.B…BINARY¢ASCIIdisplaybaseŠDC.L…IOSATW¢offsetinCBŠDC.B…'‚1.‚Reserved’'ŠDC.B…IOSRSZ-IOSREC ŠDC.B…NONE ŠDC.L…IOSRECŠDC.B…'‚2.‚Reserved’'ŠDC.B…IOSWTO-IOSRSZ ŠDC.B…NONE ŠDC.L…IOSRSZ ŠDC.B…'‚3.‚Write/erasetimeout‡'ŠDC.B…IOSRTO-IOSWTO ŠDC.B…DECIMAL ŠDC.L…IOSWTO"ŠDC.B…'‚4.‚Readtimeout(system)…'ŠDC.B…IOSDEN-IOSRTO ŠDC.B…DECIMAL ŠDC.L…IOSRTOŠDC.B…'‚5.‚Densityrequested‰'ŠDC.B…IOSRDT-IOSDEN ŠDC.B…DECIMAL ŠDC.L…IOSDEN!ŠDC.B…'‚6.‚Numberofreadtries†'ŠDC.B…IOSWRT-IOSRDT ŠDC.B…DECIMAL ŠDC.L…IOSRDT"ŠDC.B…'‚7.‚Numberofwritetries…'ŠDC.B…IOSERT-IOSWRT ŠDC.B…DECIMAL ŠDC.L…IOSWRTŠDC.B…'‚8.‚Numberoferasuresˆ'ŠDC.B…IOSRDTO-IOSERT ŠDC.B…DECIMAL ŠDC.L…IOSERT"ŠDC.B…'‚9.‚Timeoutfortaperead…'ŠDC.B…IOSSPTO-IOSRDTO ŠDC.B…DECIMAL ŠDC.L…IOSRDTO#ŠDC.B…'10.‚Timeoutspacefwd/rev…'ŠDC.B…IOSRWTO-IOSSPTO ŠDC.B…DECIMAL ŠDC.L…IOSSPTO ŠDC.B…'11.‚Timeoutforrewindˆ'ŠDC.B…IOSSRTO-IOSRWTO ŠDC.B…DECIMAL ŠDC.L…IOSRWTO'ŠDC.B…'12.‚Timeout-filemarksearch'ŠDC.B…IOSMTSV-IOSSRTO ŠDC.B…DECIMAL ŠDC.L…IOSSRTOŠDC.B…'‚H.‚Help–' ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZEROŠDC.B…'‚C.‚CONFIGUREdeviceŠ' ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZERO&ŠDC.B…'‚Q.‚Quit(gotopreviousmenu)' ŠDC.B…ZERO ŠDC.B…NONE ŠDC.L…ZEROMPTBLEND‚EQU†*)MPTBLLEN‚EQU†(MPTBLEND-MPTBLSTR)/PNTRYLEN*‰PAGEF************************************************************************–ATTRTBL*G************************************************************************?*‚ATTRTBL:Thereisonetableforeachdevicetype.‚EachtableE*‚hasthenumberofrowsforthespecificdeviceandentrylengthforB*‚thelengthofitsrows.‚Thesetoftablesforallthedevicesis*‚calledATTRTBL.*K*‚THISSETOFTABLESHASASPECIALORDERACCORDINGTOITSDEVICETYPE.‚EACHJ*‚TABLEISPOSITIONEDWITHRESPECTTOTHEVALUEOFITSDEVICETYPECODEINC*‚THEDCB.‚IFANEWTABLEISADDED,ITMUSTBEPOSITIONEDCAREFULLY**‚ACCORDINGTOITSDEVICETYPECODEVALUE.*7*‚numattrˆ=numberofattributesrowsinspecifictable)*‚entrylen‡=lengthoftheattributesrow-*‚attributename=nameintheattributesrow,ANTRYLENEQU‡32ˆlengthoftheattributesrow'*œMUSTBEADJUSTEDIFLENGTHISCHANGED1*œMUSTAGREEWITHnamelenINPASCALCONSTSECTION+*œIFANTRYLENCHANGESTHENPARMTBLABOVEIS4*œALSOAFFECTED,attrscrnINPASCALPORTIONMAYALSO *œBEAFFECTED** ____________,*|numattr‚|<--installedatassemblytime* |----------|3* | ANTRYLEN | <-- entrylen = attributes row length&* |__________|_______ _______ ________*|£|*|ˆattributename|'* |__________ _______ _______ ________|*F*---------------------------------------------------------------------*‰DS.W†05ATTRTBL‚EQU‡*‰Beginningofattributestable-ATTRTBL*‰PAGEF*---------------------------------------------------------------------*'*‹DISKƒATTRIBUTESƒTABLE!*(forharddiskandfloppydisk)*F*---------------------------------------------------------------------*‰DS.W†0ADSKTBL‚DC.B†DATBLLEN‰DC.B†ANTRYLEN!DATBLSTRDC.B†'‚0.‚DatadensityŽ'‰DC.B†'‚1.‚Trackdensity'‰DC.B†'‚2.‚Sidesperdisketteˆ'‰DC.B†'‚3.‚Format”'‰DC.B†'‚4.‚Disktype‘'‰DC.B†'‚5.‚Drivedatadensityˆ' ‰DC.B†'‚6.‚Drivetrackdensity‡'#‰DC.B†'‚7.‚Seekafterheadswitch„'!‰DC.B†'‚8.‚Precompensationtype†'‰DC.B†'‚9.‚FloppydisksizeŠ''‰DC.B†'‚10.Alternatesectorhandling'‰DC.B†'‚C.‚Configure‘'‰DC.B†'‚H.‚Help–'&‰DC.B†'‚Q.‚Quit(gotoparametermenu)'DATBLENDEQU‡*)DATBLLENEQU‡(DATBLEND-DATBLSTR)/A  NTRYLEN*‰PAGEF*---------------------------------------------------------------------*/*ˆTERMINALƒATTRIBUTESƒTABLE*F*---------------------------------------------------------------------*‰DS.W†0ATERMTBLDC.B†TATBLLEN‰DC.B†ANTRYLEN.TATBLSTRDC.B†'‚0.‚Hardcopy(chr/linedelete)'‰DC.B†'‚1.‚UseXOFF/XONŽ'‰DC.B†'‚2.‚Bitspercharacterˆ'‰DC.B†'‚3.‚Stopbits‘'‰DC.B†'‚4.‚ParityusageŽ'‰DC.B†'‚5.‚Typeparity'‰DC.B†'‚6.‚Localecho'‰DC.B†'‚7.‚Typeahead'%‰DC.B†'‚8.‚Terminateonbufferfull‚'‰DC.B†'‚9.‚Passnulls'"‰DC.B†'‚10.Modem/Directconnect†'!‰DC.B†'‚11.Takemodemoffhook‡'‰DC.B†'‚C.‚Configure‘'‰DC.B†'‚H.‚Help–'&‰DC.B†'‚Q.‚Quit(gotoparametermenu)'TATBLENDEQU‡*)TATBLLENEQU‡(TATBLEND-TATBLSTR)/ANTRYLEN*‰PAGEF*---------------------------------------------------------------------*-*ˆPRINTERƒATTRIBUTESƒTABLE*F*---------------------------------------------------------------------*‰DS.W†0APRNTTBLDC.B†PATBLLEN‰DC.B†ANTRYLEN"PATBLSTRDC.B†'‚0.‚Autolinefeed'"‰DC.B†'‚1.‚Formfeedafterassign…' ‰DC.B†'‚2.‚Truncate/Wraparound‡'‰DC.B†'‚C.‚Configure‘'‰DC.B†'‚H.‚Help–'&‰DC.B†'‚Q.‚Quit(gotoparametermenu)'PATBLENDEQU‡*)PATBLLENEQU‡(PATBLEND-PATBLSTR)/ANTRYLEN*‰PAGEF*---------------------------------------------------------------------*-*ˆMAGƒTAPEƒATTRIBUTESƒTABLE*F*---------------------------------------------------------------------*‰DS.W†0AMTAPTBLDC.B†MATBLLEN‰DC.B†ANTRYLENMATBLSTREQU‡*‰DC.B†'‚0.‚Reserved’'‰DC.B†'‚1.‚Densityrequest‹'‰DC.B†'‚C.‚Configure‘'‰DC.B†'‚H.‚Help–'&‰DC.B†'‚Q.‚Quit(gotoparametermenu)'MATBLENDEQU‡*)MATBLLENEQU‡(MATBLEND-MATBLSTR)/ANTRYLEN*‰PAGEF*********************************************************************** *VALTBL*F***********************************************************************>*‚VALTBL:Thereisonetableforeachdevicetype.‚EachtableE*‚hasthenumberofrowsforthespecificdeviceandentrylengthforB*‚thelengthofitsrows.‚Thesetoftablesforallthedevicesis*‚calledVALTBL.*K*‚THISSETOFTABLESHASASPECIALORDERACCORDINGTOITSDEVICETYPE.‚EACHJ*‚TABLEISPOSITIONEDWITHRESPECTTOTHEVALUEOFITSDEVICETYPECODEINC*‚THEDCB.‚IFANEWTABLEISADDED,ITMUSTBEPOSITIONEDCAREFULLY**‚ACCORDINGTOITSDEVICETYPECODEVALUE.*>*‚numattrˆ=numberofattributes'valuerowsinspecifictable0*‚vntrylen‡=lengthoftheattributes'valuerow0*‚val0‹=valueintheattributesrowforbit=00*‚val1‹=valueintheattributesrowforbit=13VNTRYLENEQU‡32ˆlengthoftheattributes'valuerow'*œMUSTBEADJUSTEDIFLENGTHISCHANGED-*œMUSTAGREEWITHLENGTHINPASCALDATASTRUC'*œCHANGEvallenINPASCALCONSTSECTION** ____________,*|numattr‚|<--installedatassemblytime* |----------|3* | VNTRYLEN | <-- entrylen = attributes row length&* |__________|_______ _______ ________*|’||*|ˆval0†|†val1†|'* |__________ _______|_______ ________|*F*---------------------------------------------------------------------*‰DS.W†04VALTBLƒEQU‡*‰Beginningofattributestable-ATTRTBL*‰PAGEF*---------------------------------------------------------------------*1*ˆDISKƒATTRIBUTESƒVALUEƒTABLE#*’(forharddisksandfloppydisks)*F*---------------------------------------------------------------------*ADVTBLƒDC.B†DAVTBLEN‰DC.B†VNTRYLENDAVTBSTREQU‡*!DC.B'SINGLE(FM)…DOUBLE(MFM)„'&DC.B'SINGLEDENSITY‚DOUBLEDENSITY‚'"DC.B'SINGLESIDED„DOUBLESIDED„'#DC.B'MOTOROLAFORMATIBMFORMAT†'DC.B'FLOPPYDISK…RIGIDDISK†'!DC.B'SINGLE(FM)…DOUBLE(MFM)„'&DC.B'SINGLEDENSITY‚DOUBLEDENSITY‚'DC.B'NOŽYES'DC.B'PRE-WRITE‡POST-WRITE†'DC.B'5-1/4INCH†8INCHŠ'DC.B'DONOTUSE†USE'DAVTBENDEQU‡*)DAVTBLENEQU‡(DAVTBEND-DAVTBSTR)/VNTRYLEN*‰PAGEF*---------------------------------------------------------  ------------*9*ˆTERMINALƒATTRIBUTESƒVALUEƒTABLE*F*---------------------------------------------------------------------*‰DS.W†0ATMVTBL‚DC.B†TAVTBLEN‰DC.B†VNTRYLENTAVTBSTREQU‡*DC.B'ERASE‹SHOWŒ'DC.B'NOŽYES' DC.B'87' DC.B'12'DC.B'NOŽYES'DC.B'ODDEVENŒ'DC.B'YESNOŽ'DC.B'YESNOŽ'DC.B'NOŽYES'DC.B'NOŽYES'DC.B'TERMINALˆMODEM‹'DC.B'NOŽYES'TAVTBENDEQU‡*)TAVTBLENEQU‡(TAVTBEND-TAVTBSTR)/VNTRYLEN*‰PAGEF*---------------------------------------------------------------------*7*‚PRINTERƒATTRIBUTESƒVALUEƒTABLE*F*---------------------------------------------------------------------*‰DS.W†0APVTBLƒDC.B†PAVTBLEN‰DC.B†VNTRYLENPAVTBSTREQU‡*DC.B'NOŽYES'DC.B'YESNOŽ'DC.B'WRAPAROUND†TRUNCATEˆ'PAVTBENDEQU‡*)PAVTBLENEQU‡(PAVTBEND-PAVTBSTR)/VNTRYLEN*‰PAGEF*---------------------------------------------------------------------*7*‚MAGƒTAPEƒATTRIBUTESƒVALUEƒTABLE*F*---------------------------------------------------------------------*‰DS.W†0AMTVTBL‚DC.B†MAVTBLEN‰DC.B†VNTRYLENMAVTBSTREQU‡* DC.B' 'DC.B'NOŽYES'MAVTBENDEQU‡*)MAVTBLENEQU‡(MAVTBEND-MAVTBSTR)/VNTRYLEN*‰PAGEF***********************************************************************/*ˆHEADERƒTOƒPARM/ATTRƒSCREENS*F***********************************************************************+*ˆPARAMETERƒSCREENƒHEADER*‰DS.W†0 PARMHDR‚EQU‡** ‰DC.B†'#†PARAMETERFIELDS”VALUE'*F*---------------------------------------------------------------------*+*ˆATTRIBUTEƒSCREENƒHEADER*‰DS.W†0 ATTRHDR‚EQU‡** ‰DC.B†'#…ATTRIBUTEFIELDS•VALUE'*F************************************************************************ˆNOMODƒSTRING*F***********************************************************************‰DS.W†0NOMODSTREQU‡**‰DC.B†'Notmodifiable'*‰PAGEF***********************************************************************%*ˆMISCELLANEOUSƒMENUS*F*************************************************************************ˆBOOTFILE/MEMORYMENU*E*--------------------------------------------------------------------*‰DS.W†0 BFMMENU‚EQU‡* ‰DC.B†'¸'*‰PAGEF*---------------------------------------------------------------------**ˆDEVICENAMEMENU*F*---------------------------------------------------------------------*‰DS.W†0 DNMMENU‚EQU‡*<‰DC.B†'Adevicenameisonetofouralphanumericcharacters'(‰DC.B†'precededbythepoundsign(#).•' ‰DC.B†'´'9‰DC.B†'The"#"usedwithoutadevicename‚refers‚to‚your'‰DC.B†'logondevice.§' ‰DC.B†'´' ‰DC.B†'´'*‰PAGEG*----------------------------------------------------------------------**ˆDCB/CCBMENU*G*----------------------------------------------------------------------*‰DS.W†0 CBTMENU‚EQU‡**6‰DC.B†'1.‚Modifydefaultvalues…(configuredefaults)‚'5‰DC.B†'2.‚Modifyworkingvalues…(configurerequest)ƒ'‰DC.B†'H.‚Help¬':‰DC.B†'Q.‚Quit‚(returntomenuforenteringdevicename)' ‰DC.B†'´' ‰DC.B†'´' ‰DC.B†'´'*‰PAGEF*---------------------------------------------------------------------**ˆCONFIGUREMENU*G*----------------------------------------------------------------------*‰DS.W†0 CFGMENU‚EQU‡**‰DC.B†'C.‚Configure§'‰DC.B†'H.‚Help¬'5‰DC.B†'Q.‚Quit‚(returntoparameterselectionmenu)†' ‰DC.B†'´' ‰DC.B†'´' ‰DC.B†'´' ‰DC.B†'´'*‰PAGEG*----------------------------------------------------------------------* *ˆCOPYMENU*G*----------------------------------------------------------------------*‰DS.W†0 CPYMENU‚EQU‡**‰DC.B†'P.‚Printconfiguration'‰DC.B†'D.‚Nextdevice¥'‰DC.B†'H.‚Help¬'‰DC.B†'E.‚ExitfromCONFIG ' ‰DC.B†'´' ‰DC.B†'´' ‰DC.B†'´'*‰PAGEG**********************************  ***************************************’HELPƒMENUS*G*************************************************************************ˆBOOTFILE/MEMORYHELPMENU*G*----------------------------------------------------------------------*‰DS.W†0 BFMHELP‚EQU‡**‰PAGEG*----------------------------------------------------------------------**ˆDCB/CCBHELPMENU*G*----------------------------------------------------------------------*‰DS.W†0 CBTHELP‚EQU‡***EDC.B‚'1.‚Modifydefaultvalues:thisselection‚performsa‚configure'GDC.B‚'defaultsonthetargetdevice.‚Itremainsineffectuntilitis'FDC.B‚'changedby‚anotherconfiguredefaults.‚Onlyuser0canperform'$DC.B‚'thistypeofconfiguration.¥' DC.B‚'À'EDC.B‚'2.‚Modifyworkingvalues:this‚selection‚performsaconfigure'CDC.B‚'request.‚Inthecaseof‚terminalsand‚printers,‚the‚working'HDC.B‚'valueswillstaychangeduntiloverwrittenbythedefaultvalues'DDC.B‚'whenthelastuserlogsofforthe‚assignmentin‚closed.ƒFor'?DC.B‚'themagnetictape,adismountmustalsohaveoccurred.Š' DC.B‚'À'GDC.B‚'Q.‚Thisselectionwillrecallthemenurequestingadevicename'DC.B‚'forreconfiguration.¬'*‰PAGEG*----------------------------------------------------------------------**ˆPARAMETERHELPMENU*G*----------------------------------------------------------------------*‰DS.W†0 PRMHELP‚EQU‡**DDC.B‚'The‚selectionofa‚numberwillresultinarequestfor‚a‚new'GDC.B‚'valueforthechosenparameter.‚Valuesmaybeenteredasbinary'FDC.B‚'(precedevaluewith%sign),‚decimal(valueonly),‚hexadecimal'GDC.B‚'(precedevaluewith$sign)orcontrolcharacter‚(precedevalue'EDC.B‚'withthecharacters"CTRL"or"^";eg.‚CTRLAor^A).ƒThenew'EDC.B‚'valuewillbedisplayedinitsfieldintheparametersmenu.„' DC.B‚'À'FDC.B‚'C.‚Thisselection‚willcauseanewmenutobedisplayedasking'0DC.B‚'forpermissiontoconfigurethedevice.™' DC.B‚'À'FDC.B‚'Q.‚Thisselectionwillrecalltheconfigure‚defaults/configure'GDC.B‚'requestmenu.‚Anychangesmadetotheparametervalueswillnot';DC.B‚'besaved,andthedevicewillnotbereconfigured.Ž'*‰PAGEG*----------------------------------------------------------------------**ˆATTRIBUTESHELPMENU*G*----------------------------------------------------------------------*‰DS.W†0 ATRHELP‚EQU‡**GDC.B‚'Theselectionofanumberwillcausethevalueof‚theattribute'CDC.B‚'selectedtobe‚changedtoitsother‚possiblevalue.„Thenew'CDC.B‚'attributes‚menuwillbe‚displayed‚withthe‚newvalue‚inthe'DC.B‚'selectedfield.±' DC.B‚'À'FDC.B‚'C.‚Thisselection‚willcauseanewmenutobedisplayedasking'0DC.B‚'forpermissiontoconfigurethedevice.™' DC.B‚'À'EDC.B‚'Q.‚Thiswillcausetheparametersmenutobe‚redisplayed‚with'%DC.B‚'therevisedattributesword.¤' DC.B‚'À' DC.B‚'À' DC.B‚'À'*‰PAGEG*----------------------------------------------------------------------**ˆCONFIGUREMENU*G*----------------------------------------------------------------------*‰DS.W†0 CFGHELP‚EQU‡**EDC.B‚'C.‚Thisselectiontakesthe‚valuesintheparameters‚menuand'FDC.B‚'intheattributesmenuandusesthemtoconfigurethedevice.ƒ' DC.B‚'À' DC.B‚'À' DC.B‚'À' DC.B‚'À' DC.B‚'À':DC.B‚'Q.‚Thisselectionreturnstotheparametersmenu.Ž' DC.B‚'À' DC.B‚'À' DC.B‚'À' DC.B‚'À' DC.B‚'À'*‰PAGEG*----------------------------------------------------------------------* *ˆCOPYMENU*G*----------------------------------------------------------------------*‰DS.W†0 CPYHELP‚EQU‡**EDC.B‚'P.‚Thisselectionwill‚printacopyofthenew‚configuration.'FDC.B‚'Youwillbeasked‚forthenameofthedeviceonwhichto‚print'CDC.B‚'it.‚Precedethedevicenamewith"#".ƒTyping‚"#"alone‚will'>DC.B‚'causetheconfigurationt  obeprintedonthisdevice.‹' DC.B‚'À' DC.B‚'À'@DC.B‚'D.‚Thisselectionasksforanotherdevicetoconfigure.ˆ' DC.B‚'À' DC.B‚'À' DC.B‚'À'1DC.B‚'E.‚ThisselectionwillterminateCONFIG.—' DC.B‚'À' DC.B‚'À'**‰PAGEG*************************************************************************ˆCONFIGUREMENU*G************************************************************************‰DS.W†0 BAUDTBL‚EQU‡*‰DC.L†50 ‰DC.B†'50ˆ'‰DC.L†75 ‰DC.B†'75ˆ' ‰DC.L†110 ‰DC.B†'110‡' ‰DC.L†1345‰DC.B†'134.5…' ‰DC.L†150 ‰DC.B†'150‡' ‰DC.L†300 ‰DC.B†'300‡' ‰DC.L†600 ‰DC.B†'600‡' ‰DC.L†1200 ‰DC.B†'1200†' ‰DC.L†1800 ‰DC.B†'1800†' ‰DC.L†2000 ‰DC.B†'2000†' ‰DC.L†2400 ‰DC.B†'2400†' ‰DC.L†3600 ‰DC.B†'3600†' ‰DC.L†4800 ‰DC.B†'4800†' ‰DC.L†7200 ‰DC.B†'7200†' ‰DC.L†9600 ‰DC.B†'9600†' ‰DC.L†19200‰DC.B†'19200…' ‰DC.L†38400‰DC.B†'38400…' END   éé1FORCE„IDNT†1,1‘forceoutputproccedureforPascal* *’FORCE**ˆPROCEDUREFORCE(FIL:‚TEXT)*?*ˆThisassemblylanguageroutineinterfacestoaPascalprogramA*ˆandforceswhateverisinthebufferforthefilepointedtoby0*ˆFILouttothefilewithoutacarriagereturn.*:*ˆThoseregistersusedareA0,A1,A2,A4,D1,D2,andD4.** *ˆXDEFthenameofthisroutine.* ‰XDEF†FORCE**:*ˆThefollowingareoffsetsintoaPascalparameterblock.* FUNCTIONEQU‡8“IOSfunctioncode*BUFSTARTEQU‡20’Addressofstartofbuffer&BUFENDƒEQU‡24’Addressofendofbuffer*2*ˆThefollowingarethenecessaryequatesforIOS.*"IOS†EQU‡2“ThetrapnumberforIOS.*0andtheerrorcodeisknown,thengiveƒ*-*–msgacorrespondingvalueforthaterror.…*/*–Else,errorisunknownsocallsystemerrorƒ**–handler,thenreturn.™*4*’3.‚GettheaddressofCCBinCONFIG.‚Doconfigure*+*–statusrequesttogettheCCBinfointo‡**–CONFIG'sCCB.¡*4*’4.‚Putdevicetypeintologondevandpreservein**–D1.«*3*’5.‚Initializepmask,amask,awordinCONFIGand‚* *–thevaluesforCONFIG'sDCB.’*1*’6.‚Checktoseeiftheuserisuser0.‚Ifso,ƒ***–gettheaddressofDCBinCONFIG.‚Doa‡*1*–configuredefaultstogetthetargetDCBinto**–CONFIG'SDCB.¡*/*’7.‚Initializepmask,amask,awordinDCBin†*-*–CONFIGwiththesavedvaluesfromSTEP3.…*/*’8.‚UsethedevicetypecodeinD1togetto†*.*–theproperdevicetableaddressintheset„*/*–ofparameterstables,thesetofattributesƒ*0*–tablesandthesetofvaluestables.‚Seethe*2*–notebelowfortheorderofthesetsoftables.*,*–Foreachtablepointerdothefollowing:†*,*ša.‚Getthepointeraddressoffthestack**šb.‚Get1sttableaddress‘*+*šc.‚CallCALCADDRtogettodevicetable‚*&*žcorrespondingtothetarget'stype„**šd.‚StorecalculatedaddressŽ*$*’9.‚Restorethestackandreturn.‘*w4€;ˆ8A˜9 9¨?°A¸AÀ.*Ä**ˆSubroutineEMH®*6*ŽThiserrorhandlingroutinecallsthesystemerror„**Žmessagehandler.¦**Ä**ˆSubroutineCLOSE¬*!*ŒClosesthedeviceassignment.›**Ä**ˆSubroutineCALCADDR©*8*Ša.‚D2containsthedevicetypecode.‚MoveD2intoD1„*5*ŽtopreserveD2.‚Loadthepointerwiththeaddress„*4*Žoftheheadofthesetoftables.‚IfD1=0then…*$*Žtablehasbeenfoundsogotod.–*3*Šb.‚ElsetakethenumberofentriesinthetableŠ*9*Žheadandmultiplyitbytheentrylengthfoundinthe*7*Žtablehead.‚Add4bytesforthelengthofthetable‚*6*Žhead.‚Addthiscalculationtothepointeraddress.ƒ*3*Šc.‚Subtract1fromD1.‚IfD1<>0thengotob.‰**Šd.‚Return.¯**Ä*<*‚NOTE:AlltablesdealingwithdevicesaresetupintheŠ*=*‰followingorder:‚disk(floppyorhard),terminal,printer*=*‰andmagnetictape.‚Thisfollowstheorderoftheirdevice* *‰codes.µ**Ä* *‚REGISTERS¹*>*„IN…:ƒA3pointstoPascalruntimelibrary;MUSTbepreserved*0*‹:ƒA5pointstoPascalRMA;MUSTbepreserved‹*-*‹:ƒA6pointstoPascallocalvariableareaŽ*:*‹:ƒA7pointstostackwithparametersandreturnaddress**MUSTbepreserved¤**Ä*#*„DURING:ƒA0usedfortrapcallsŸ*7*A4pointstomemoryareaforGETMEMCB;preservefor‚**durationofGETMEMCB. **D1hasdevicetypecodež* *D2hastheuserlogonnumber™**D3hasparametersmaskŸ**D4hasattributesmaskŸ**D5hasattributeswordŸ*!*„OUT„:ƒA3,A5,A6-sameasINž**A7pointstowayback **Ä*A*‚PARAMETERS:Theaddressesoftheparametersareonthestack…*5*suchthatthefirstparameterisputonthestack„*5*firstandthelastparameterisatthetopofthe„*(*stackjustunderthereturnaddress.‘*0*’aword,parmptr,attrptr,avalptr,asmmem,msg)†**Ä*F***********************************************************************‰OPT‡A*GETMEMCBIDNT†1,0‰PAGEF*********************************************************************** *•XDEFS*  F***********************************************************************"‰XDEF†GETMEMCBŒProgramentrypoint*F*********************************************************************** *•XREFS*F***********************************************************************2‰XREF†FHSPB…OffsettoFHSPBinassemblydataarea.2‰XREF†IOSPB…OffsettoIOSPBinassemblydataarea.4‰XREF†EMPBLK„OffsettoEMPBLKinassemblydataarea.*F************************************************************************INCLUDEƒFILES*F************************************************************************ˆINCLUDEƒ9995.&.IOE.EQ*ˆINCLUDEƒ9995.&.TR1.EQ*ˆNOLIST‰NOLIST‰INCLUDEƒ9995.&.IOE.EQ‰INCLUDEƒ9995.&.TR1.EQ‰LIST*F************************************************************************™EQUATES*F***********************************************************************9*ˆWARNING-WatchforvaluechangestoDEVBUSY,NOSUCHDV,<*ˆNONE,SPOOLUPandSTOPSCRNinCONFIG.‚TheseareENUMERATED?*ˆvariablesandiftheirorderisshuffledintheirPascaltype>*ˆdeclarationoranewentryisplacedinfrontofoneofthem>*ˆinthedeclarationinCONFIG,theirVALUEWILLCHANGEandan%*ˆimpropermessagewillbedisplayed.*@LOWBYTE‚EQU‡$000000FFValuetoANDoutgarbageandkeeplowbyte@LOWWORD‚EQU‡$0000FFFFValuetoANDoutgarbageandkeeplowword=HIGHWORDEQU‡$FFFF0000ValuetoORone'sintohighorderword'NONE…EQU‡0‰Valuefornomessagepending&DEVBUSY‚EQU‡1‰Valuefordevbusyinmsg)NOSUCHDVEQU‡2‰Valuefornosuchdevinmsg=NOTCNFG‚EQU‡3‰Valuefordevicetypewhichisnotconfigurable8NOTRDYƒEQU‡4‰Valuefordevicenotreadytobeconfigured>SPOOLUP‚EQU‡5‰Valueformsgwhenspoolerisactiveforprinter3STOPSCRNEQU‡6‰Valueformsgwhichwillstopscreen1BADDTYPEEQU‡8‰ValueformsgwhenCBhasbadinfo PRNTERƒEQU‡2‰Deviceisaprinter/TRGTLUN‚EQU‡2‰TargetdeviceLUNfortrapcalls.BLANK2ƒEQU‡'‚'†2blanksBLANK4ƒEQU‡'„'„4blanksUSERZEROEQU‡0‰0*‰PAGEF************************************************************************‘THEƒSTACK*F***********************************************************************ˆ____________*„LO‚|returnƒ|‚TOS<--A7 *ˆ|address‚|'*ˆ|----------|ˆ-------------------------*ˆ|msg†|ˆaddressofenumeratedvariable,msg'*ˆ|----------|ˆ------------------------'*ˆ|asmmemƒ|ˆaddrofassmeblydataarea'*ˆ|----------|ˆ------------------------ *ˆ|avalptr‚|*ˆ|----------|:*ˆ|attrptr‚|ˆaddressofpointersto1sttableineachset*ˆ|----------| *ˆ|parmptr‚|(*ˆ|----------|ˆ------------------------- *ˆ|Dawordƒ|*ˆ|----------| *ˆ|Cawordƒ|*ˆ|----------|ˆaddressofmasks *ˆ|pmask„|*ˆ|----------| *ˆ|amask„|(*ˆ|----------|ˆ-------------------------9*ˆ|DCB†|ˆaddressofDCBwhichgetsconfigure/statusinfo(*ˆ|----------|ˆ-------------------------9*ˆ|CCB†|ˆaddressofCCBwhichgetsconfigure/statusinfo(*ˆ|----------|ˆ-------------------------*ˆ|unum…|ˆuserlogonnumber(*ˆ|----------|ˆ-------------------------2*‚HI„|targetƒ|ˆaddressofrecordwithtargetinfo(*ˆ|----------|ˆ-------------------------**E*--------------------------------------------------------------------**•STACKƒOFFSETS*F*---------------------------------------------------------------------* ‰OFFSET„0*RETADDR‚DS.L†1‰returnaddress'MSGADDR‚DS.L†1‰enumeratedvariable,msg*ASMMEMADDS.L†1‰assemblydataareaaddress"VTPTRAD‚DS.L†1‰valuetableaddress'ATPTRAD‚DS.L†1‰attributestableaddress'PTPTRAD‚DS.L†1‰parameterstableaddress9DAWRDAD‚DS.L†1‰attributeswordaddressfordefaultvalues9CAWRDAD‚DS.L†1‰attributeswordaddressforcurrentvalues&PMASKAD‚DS.L†1‰parametersmaskaddress&AMASKAD‚DS.L†1‰attributesmaskaddressDCBADDR‚DS.L†1‰DCBaddressCCBADDR‚DS.L†1‰CCBaddressUNUM…DS.W†1‰unum#TRGTADƒDS.L†1‰targetrecordaddressSTKLENƒEQU‡*-4*D*‚Thereturnaddressisalwaysplacedonthetopofthestackwhena  3*‚assemblyroutineiscalledfromaPascalprogram.*‰PAGEF************************************************************************—DATAƒAREA*F***********************************************************************9*ˆThedataareawiththeparameterblocksthatwassetup?*ˆinCFIGDATAisused.‚Thedatanamesusedhereareasfollows:*?*ˆFHSPB…parameterblockusedfordeviceassignments-usedhereB*ˆIOSPB…parameterblockusedforconfigure/statuscall-usedhereB*ˆEMPBLK„parameterblockusedbyErrorMessageHandler-usedhere*A*ˆNoneofthevaluesinstalledinINITLIZEareassumedvalid.‚TheA*ˆfieldsmodifiedinINITLIZEareredefinedherealongwithother>*ˆappropriatefields.‚TheexceptiontothisisEMPBLKwhichis@*ˆsetupforallerrormessagehandlinginallassemblyroutines*ˆexceptforregisterA0.*F*=====================================================================**ˆPARAMETERBLOCKS*F*---------------------------------------------------------------------*J*‚FHSPBisaparameterblockforassigningTRGTLUNwithpublicwritewhichH*‚worksforalldevices.‚Thisassignmentisnecessarypriortodoingthe*‚configure/statusrequest.*F*---------------------------------------------------------------------*H*‚IOSPBisaparameterblockfordoingconfigure/statusrequest.‚TheIOSD*‚callusingthisparmblockwillreturntheDCBinformationforthe*‚targetdevicetoCB.*F*---------------------------------------------------------------------*6*‚EMPBLKisusedforthesystemerrormessagehandler.*F************************************************************************’TARGETRECORDTEMPLATE*F*********************************************************************** ‰OFFSET„0*NAME…DS.L†1‰DevicenameTYPE…DS.B†1‰Devicetypecode‰PAGEF************************************************************************‘STARTƒOFƒPROGRAM*F*********************************************************************** ‰SECTIONƒ9*GETMEMCBEQU‡**M*STEP1.‚Getaddressofdatasegment,thetargetdevicenameandtheaddress*ˆofmsgforerrors.*7‰MOVE.L„ASMMEMAD(A7),A4…A4<--addrofdataareaonstack*=‰MOVE.L„TRGTAD(A7),A2‡A2<--addroftargetdevrecordonstk*&‰MOVE.L„MSGADDR(A7),A1†Getmsgaddress‰PAGE*(*‚STEP2.‚Performthedeviceassignment.*,‰LEA‡FHSPB(A4),A0ŠMoveaddrofFHSPBintoA04‰MOVE.W„#FHASGN,FHSCMD(A0)„Performdeviceassignment;‰MOVE.W„#FOPPW,FHSOPT(A0)…Publicwrite,goodforanydevice1‰MOVE.B„#TRGTLUN,FHSLUN(A0)ƒLUNfortargetdevice‰MOVE.B„#0,FHSSTA(A0)‰Status5‰MOVE.L„(A2),FHSVOL(A0)‡Targetnameforconfiguration1‰MOVE.W„#USERZERO,FHSUSN(A0)‚Zero-->usernumber1‰MOVE.L„#BLANK4,FHSCLG(A0)„Blankoutcatalogname;‰MOVE.L„#BLANK4,FHSCLG+4(A0)‚Blankoutrestofcatalogname.‰MOVE.L„#BLANK4,FHSFIL(A0)„Blankoutfilename8‰MOVE.L„#BLANK4,FHSFIL+4(A0)‚Blankoutrestoffilename.‰MOVE.W„#BLANK2,FHSEXT(A0)„Blankoutextension‰TRAP†#3”Doassignment*6‰BEQ.S…CNFGCALLŽValiddevice,godoconfigurestatreq*=‰IF#FSTAVOLD0THEN.S†FHScodefordevicedoesn'texist9‹MOVE.B‚#NOSUCHDV,(A1)ˆmsg<--nosuchdevforCONFIGmessage‰ELSE.S.‹MOVE.B#STOPSCRN,(A1)‰Stopscreenformessage'‹BSR…EMH“PutoutsystemmessageandRTS‰ENDI‰BRA.L…GOHOMEGobacktoPascal‰PAGE*I*‚STEP3.‚RetrievetheCCBvalueswithaconfigure/statusreq.‚PutinCB.**ˆGetCCBvalues.*4CNFGCALLLEA‡IOSPB(A4),A0ŠLoadaddrofIOSPBintoA03‰MOVE.W„#IOSTAT,IOSFCT(A0)„Configurestatusrequest,‰MOVE.W„#0,IOSOPT(A0)‰Filloptionswithzero<‰MOVE.B„#TRGTLUN,IOSLUN(A0)ƒTargetdeviceassignedinSTEP3B‰MOVE.L„CCBADDR(A7),IOSDBP(A0)CONFIG'SCCBaddr->CSBinSTATIOS,‰TRAP†#2”DuringthetrapcalltheCCBvalues$*¨willbewrittentotheCSBaddress*‰BEQ.S…DEVTYPEConfigurerequestperformed*3‰IF#ISTADBD0THEN.S‡IOScodefordevicebusy  6‹MOVE.B‚#DEVBUSY,(A1)‰msg<--devbusyforCONFIGmessage‰ELSE.S9MOVE.B‚#STOPSCRN,(A1)†msg<--stopscrn,stopsscreenlater BSR.LEMH“Errormessagehandler‰ENDI* ‰BSR.L…CLOSENovalues,deassign‰BRA.L…GOHOMEŽGoback‰PAGE*G*STEP4.‚Gettargetdevicerecordaddressandputtargettypeintoit.*8*ˆPutdevicetypecodefromCBintotargetandregister.*3DEVTYPE‚MOVE.L„CCBADDR(A7),A0‰A0<--addressofCCB3‰IF.B‚IOSDTP(A0)#0THEN.S‚Invaliddevicetype)‹MOVE.B‚#BADDTYPE,(A1)‰Setbaddevicemsg‹BRA.LƒGOHOME‘Goback‰ENDID‰MOVE.B„IOSDTP(A0),TYPE(A2)Target.devtype<--devicetypecodeinCCB:‰MOVE.B„IOSDTP(A0),D1‡GettypecodeforuseinSTEP7&8.‰PAGE*?*STEP5.‚InitializemasksandattributeswordwithCCBvalues.*G*ˆNOTE:‚Cpmask,CamaskandCawordaresetvariablesdeclaredinPascal.F*ˆSetvariablesare64bitslongwithbit0correspondingtothefirstB*ˆvariableintheenumeratedlistfortheset.‚Thus,weinitializeA*ˆtheloworderlongwordinthesetvariableswiththemasksand;*ˆattributesword,therestofthesetvariablehaszeroes.**ˆD3‡|<--MASK-->|*ˆ_____________________*ˆ|0..0|Š|*ˆ---------------------* *ˆ63“31‘0+*ˆ_________________________________________ *ˆ|‰|‰|‰|‰|+*ˆ----------------------------------------- *¦|<-D3‚->|*ˆ^“^*ˆ|“|-*ˆaddronstack‡adjustedaddrwheremaskgoes*!*ˆGetaddressofinitializedCCB.*3‰MOVE.L„CCBADDR(A7),A2‡GetaddressofCCBoffstack*?*ˆGetaddressofpmask,initializeitwiththeparametersmask.*(‰MOVE.L„PMASKAD(A7),A1†Getaddrofpmask2‰ADD.L…#6,A1Pointaddressatlower16bitsinset*<‰MOVE.W„IOSPRM(A2),D3‡Getparmmaskinloworderwordofreg0‰MOVE.W„D3,(A1)Putmaskintopmask;preserveD3*?*ˆGetaddressofamask,initializeitwiththeattributesmask.*(‰MOVE.L„AMASKAD(A7),A1†Getaddrofamask2‰ADD.L…#6,A1Pointaddressatlower16bitsofset*>‰MOVE.W„IOSATM(A2),D4‡Writeoverloworderwordwithattrmask0‰MOVE.W„D4,(A1)Putmaskintoamask;preserveD4*7*ˆGetaddressofawordandinitializelowerorderbits.*(‰MOVE.L„CAWRDAD(A7),A1†Getaddrofaword2‰ADD.L…#6,A1Pointaddressatlower16bitsofset*:‰MOVE.W„IOSATW(A2),D5‡Writeoverloworderwordwithaword$‰MOVE.W„D5,(A1)PutmaskintoCaword*.‰MOVE.L„MSGADDR(A7),A1†Restoremessageaddress‰PAGE*C*STEP6.ƒIftheuserisuser0thenretrievetheDCBvalueswitha!*‹configuredefault;masksare0.*;*ˆSeeifitsuserzerobylookingatusernumberinregsav.*)‰MOVE.W„UNUM(A7),D2‹Getaddressofregsav(‰IF.WD2#0THEN.SŠTestforuser#0+‹BRA.SƒTBLPTRSNot#0,sodon'tdocnfgdef‰ENDI**ˆGetDCBvalues.*&‰LEA‡IOSPB(A4),A0ŠGetaddressofIOSPB:‰MOVE.W„#IOCHDC,IOSFCT(A0)„Configuredefaultswith0masks-‰MOVE.W„#0,IOSOPT(A0)‰Filloptionswithzero.<‰MOVE.B„#TRGTLUN,IOSLUN(A0)ƒTargetdeviceassignedinSTEP3B‰MOVE.L„DCBADDR(A7),IOSDBP(A0)CONFIG'SDCBaddr->CSBinSTATIOS,‰TRAP†#2”DuringthetrapcalltheDCBvalues$*¨willbewrittentotheCSBaddress+‰BEQ.S…DODMASKSŽConfigurerequestperformed*3‰IF#ISTADBD0THEN.S‡IOScodefordevicebusy6‹MOVE.B‚#DEVBUSY,(A1)‰msg<--devbusyforCONFIGmessage‰ELSE.S6‹IF#ISTAIFD0THEN.S…IOScode:spoolerisactive*MOVE.B#SPOOLUP,(A1)ˆSeeifitsaprinter‹ELSE.S8IF#ISTANRD0THEN.SƒIOScodefordevicenotready+MOVE.B#NOTRDY,(A1)‡msg<--devicenotreadyELSE.S9MOVE.B‚#STOPSCRN,(A1)„msg<--stopscrn,stopsscreenlater BSR.SƒEMHErrormessagehandlerENDI‹ENDI‰ENDI*‰BSR‡CLOSENovalues‰BRA.S…GOHOMEŽGoback‰PAGE*7*STEP7.‚GetaddressofinitializedDCB.‚Putinmasks.**;DODMASKSMOVE.L„DCBADDR(A7),A2‡GetaddressofDCBoffstack*B*ˆInitializeparmmask,attrmask,attrwordanddevicetypecode.*6‰MOVE.W„D3,IOSPRM(A2)ˆPutpreservedparmmaskintoDCB*6‰MOVE.W„D4,IOSATM(A2)ˆPutpreservedattrmaskintoDCB*7‰MOVE.L„DAWRDAD(A7),A1‡GetaddressofattrwordforDCB 2‰ADD.L…#6,A1Pointtopartofvariabletoputword*#‰MOVE.W„IOSATW(A2),D5ˆGetattrword4‰MOVE.W„D5,(A1)ŽMoveattrwordforDCBintovariable*.‰MOVE.L„MSGADDR(A7),A1‡Restoremessageaddress*3‰MOVE.B„D1,IOSDTP(A2)ˆPutdevicetypecodeintoDCB*‰PAGE*D*‚STEP8.‚GettheaddressesofthespecificdevicetableinPARMTBL,*‹ATTRTBLANDVALTBL.*.TBLPTRS‚IF.BD1#0THEN.SˆBaddriverinfo)‹MOVE.B#BADDTYPE,(A1)‡Setupformessage‹BRA.S‚GOHOMEReturn‰ENDI*=‰IF.BD1#1THEN.SˆDevicetypecode>1mustbeadjusted1‹SUB.Bƒ#1,D1downby1sincehardandfloppydisk+‰ENDIšusethesametable.Gotofindtable.*3‰SUB.B…#1,D1Adjusttypecodeforselecting1sttbl*"*ˆGetaddressofspecificPARMTBL.*;‰MOVE.L„PTPTRAD(A7),A1†A1<--addrofparmtblpntronstack3‰MOVE.L„(A1),A2Addrof1sttableinparmtableset7‰BSR.S…CALCADDRŒGetaddroftablefortargettypeinD15‰MOVE.L„A2,(A1)Putaddressoftableintoparmptrloc*"*ˆGetaddressofspecificATTRTBL.*;‰MOVE.L„ATPTRAD(A7),A1†A1<--addrofattrtblpntronstack3‰MOVE.L„(A1),A2Addrof1sttableinattrtableset7‰BSR.S…CALCADDRŒGetaddroftablefortargettypeinD15‰MOVE.L„A2,(A1)Putaddressoftableintoattrptrloc*!*ˆGetaddressofspecificVALTBL.*:‰MOVE.L„VTPTRAD(A7),A1†A1<--addrofvaltblpntronstack4‰MOVE.L„(A1),A2Addrof1sttableinvaluetableset7‰BSR.S…CALCADDRŒGetaddroftablefortargettypeinD15‰MOVE.L„A2,(A1)Putaddressoftableintoavalptrloc‰PAGE**‚STEP9.‚Restorethestack.*GOHOMEƒMOVE.L„(A7),STKLEN(A7)‰ADD.L…#STKLEN,A7‰RTS‰PAGEF************************************************************************ˆErrorMessageHandling*F************************************************************************ˆCallErrorMessageHandler*EMH:%‰MOVE.L„A0,-(A7)ŒSavemyA0onstack.,‰LEA‡EMPBLK(A4),A0‡GetaddrofEMPBLK-->A0(‰MOVE.L„D0,(A0)Puterror#intoEMPBLK./‰MOVE.L„(A7),4(A0)ŠPutmusavedA0intoEMPBLK..‰MOVE.L„#2,D0Errormessagehandlerdirective.&‰TRAP†#4’InvokeErrorMessageHandler.‰MOVE.L„(A7)+,A0ŒRestoreA0‰RTS‰PAGEF***********************************************************************Ä**’SUBROUTINECALCADDRŸ**Ä*F***********************************************************************%*ˆCalculateaddressofdesiredtable.**ˆGetpreserveddevicetype.* CALCADDR:=‰MOVE.B„D1,D2…Getadjusteddevicecodenumberfortableorder0‰BEQ.S…DONE†Ifwant1sttablewehaveitalready*@CALC…MOVE.B„(A2)+,D3„Getnumberoftableentries,inctableaddr1‰AND.L…#LOWBYTE,D3Getridofgarbageinregister:‰MOVE.B„(A2)+,D4„Getentrylength,incrementtableaddress1‰AND.L…#LOWBYTE,D4Getridofgarbageinregister1‰MULU.W„D3,D4‡Getnumberofbytestoendoftable8‰ADD.L…D4,A2‡Addittocurrenttabletoreachnexttable(‰SUB.B…#1,D2‡Decrement#oftablestogo9‰BNE.S…CALCˆIfwehavenotreacheddesiredtable,domore*DONE…RTS*F************************************************************************”SUBROUTINECLOSE*F***********************************************************************3*‹Closethedeviceassignmenttothetargetdevice.*CLOSE:$‰LEA‡FHSPB(A4),A0ŠLoadaddrofFHSPB1‰MOVE.W„#FHCLOS,FHSCMD(A0)„Performclosecommand.‰MOVE.B„#0,FHSSTA(A0)‰Status‰TRAP†#3”Doclose.‰RTS‰ENDéé F***********************************************************************Ä* *œGETSTRCB **Ä**˜NOINCLUDEFILESœ**Ä*&*GETSTRCB(CB,offset,size,value)“**Ä*:*ˆGETSTRCBretrievesaparameterfromtheCBinCONFIG's†**‘andreturnsittoCONFIG.š**Ä**ˆALGORITHM:²*0*’1.‚GettheaddressofCB,theoffsetintoCB…*-*–wherethedesiredvalueisstoredandits…* *–size.©*3*’2.‚GettheaddressofvalueinCONFIG'sstorage‚*(*–andputtheparametervalueintoit.Š*$*’3.‚Restorethestackandreturn.‘**Ä* *‚REGISTERS¹*>*„IN…:ƒA3pointstoPascalruntimelibrary;MUSTbepreserved*0*‹:ƒA5pointstoPascalRMA;MUSTbepreserved‹*-*‹:ƒA6pointstoPascallocalvariableareaŽ*:*‹:ƒA7pointstostackwithparametersandreturnaddress**MUSTbepreserved¤**Ä*%*„DURING:ƒA0hastheaddressofCB*7*A1offsetintoCBtoparameter,thentheaddressof‚**’ofthevariable,valueœ*7*A4pointstomemoryareaforGETSTRCB;preservefor‚**durationofGETSTRCB. *)*D0hasthesizeofthevalueinbytes*!*„OUT„:ƒA3,A5,A6-sameasINž**A7pointstowayback **Ä*A*‚PARAMETERS:Theaddressesoftheparametersareonthestack…*5*suchthatthefirstparameterisputonthestack„*5*firstandthelastparameterisatthetopofthe„*(*stackjustunderthereturnaddress.‘**Ä*F***********************************************************************‰OPT‡A*GETSTRCBIDNT†1,0‰PAGEF************************************************************************•XDEFSƒ&ƒXREFS*F***********************************************************************"‰XDEF†GETSTRCBŒProgramentrypoint**F***********************************************************************‰PAGEF************************************************************************‘THEƒSTACK*F***********************************************************************ˆ____________*„LO‚|returnƒ|‚TOS<--A7 *ˆ|address‚|ÈBÑJÙ'*ˆ|----------|ˆ------------------------*ˆ|value„|ˆaddressofvalue'*ˆ|----------|ˆ------------------------*ˆ|size…|ˆsizeofvalue'*ˆ|----------|ˆ------------------------*ˆ|offsetƒ|ˆoffsetvalue'*ˆ|----------|ˆ------------------------!*ƒHIƒ|CB‡|ˆaddressofCBaddress*ˆ------------*E*--------------------------------------------------------------------**•STACKƒOFFSETS*F*---------------------------------------------------------------------* ‰OFFSET„0*RETADDR‚DS.L†1‰returnaddressVALADDR‚DS.L†1‰addressofvalueSZVAL„DS.W†1‰sizeofvalue)OFFSTVALDS.L†1‰offsettoparameterinCBCBADDRƒDS.L†1‰addressofCBSTKLENƒEQU‡*-4*D*‚Thereturnaddressisalwaysplacedonthetopofthestackwhena3*‚assemblyroutineiscalledfromaPascalprogram.*F************************************************************************—EQUATES*F***********************************************************************BYTE…EQU‡1‰sizeofvalueWORD…EQU‡2‰sizeofvalue‰PAGEF************************************************************************‘STARTƒOFƒPROGRAM*F*********************************************************************** ‰SECTIONƒ9*GETSTRCBEQU‡**A*‚STEP1.‚GetaddressofCBandgetoffsetintoCBoffthestack.**ˆGetaddressofCB.*0‰MOVE.L„CBADDR(A7),A0‡A0<--addrofCBonstack**ˆPutoffsetintoA1.*-‰MOVE.L„OFFSTVAL(A7),A1…A1<--offsetintoCB*‰ADD.L…A1,A0GettotargetparameterinCB**ˆPutsizeintoD0.*)‰MOVE.B„SZVAL(A7),D0ˆDO<--valueofsize‰PAGE*'*‚STEP2.‚Getaddressofvalueaddress.*6‰MOVE.L„VALADDR(A7),A1†Getaddrofvalueoffthestack*0*ˆMoveCBparametervalueintovalue'slocat ion.*5‰IF.B#BYTED0THEN.S…Ifvalueisabyteinsize'‹ADD.L‚#3,A1movetolastbyteofvalue"‹MOVE.B(A0),(A1)Œthenmoveabyte ‰ELSE.S˜else5‹IF.B#WORDD0THEN.Sƒifvalueisawordinsize,ADD.L‚#2,A1Žmovetoloworderwordofvalue"MOVE.W(A0),(A1)Šthenmoveaword ‹ELSE.S–else"MOVE.L(A0),(A1)Šmovealongword‹ENDI‰ENDI‰PAGE**‚STEP3.‚Restorethestack.*GOHOMEƒMOVE.L„(A7),STKLEN(A7)‰ADD.L…#STKLEN,A7‰RTS*‰ENDééééééF***********************************************************************Ä* *œHEX2ASCI **Ä**Ä*"*HEX2ASCI(valbuf,value,size)—**Ä**˜NoINCLUDEFILESœ**Ä*?*ˆHEX2ASCIconvertsaparametervaluefromtheCBinCONFIG's*=*ˆstoragetoanASCIIhexadecimalstringforinsertionintoƒ**ˆparmscrnfordisplay.§**Ä**ˆALGORITHM:²*2*’1.‚Gettheaddressofvalbufandvalueofftheƒ*/*–stack.‚Valbufhasblanksinit.‚Putaddress*/*–ofvalbufinA0andaddressofvalueinA1.ƒ*0*–Movethevaluetobeconvertedoffthestack‚*0*–andintoD0.‚Put"$"intothefirstlocation**–ofvalbuf.¤*3*’2.‚Getthesizeofthevalueoffthestack.‚Put**–thesizeinD1.Ÿ*#*’3.‚Ifthesizeofthevalueis:’*!*–a.‚bytethenD1gets2init,*&*šadd4toA0topointtolastASCIIˆ*+*šlocationforthenumberandadd3toA1ƒ*,*štopointtolocationtostartconverting‚* *šthevalue¡*'*–b.‚wordthenD1gets4,A0<--A0+6Š**šA1<--A1+2Ÿ*-*–c.‚longwordthenD1gets32,A0<--A0+10„*/*–D1isthecounterforthenumberofnibblesƒ*,*–converted.‚A1pointstothebyteofaddr…*/*–wherevalueforpropersizebegins.‚Restof‚*0*–registerwillhavezeroesthatwedon'twant‚*/*–inthevaluefieldinthemenu.‚However,we‚*/*–dowantleadingzeroescorrespondingtotheƒ*0*–magnitudeofthenumbertobeinthedisplay‚*.*–toindicatethesizeofthefield.‚A0willƒ*0*–pointtolocationinvalbufafterwherelast‚*.*–characterwillbeinsertedsincetheywill„*-*–beinsertedfromlowordertohighorder.…*4*’4.‚Gethextableaddressandconvertthenibbles.*/*–a.‚Movepointertonextlocationinvalbuf.‚*0*–b.‚RightshiftnibbleintoD3asoffsetinto*-*šintohextableandmovecharfromhextable**šintovalbuf.ž*1*– d.‚Decrementnibblecount;preparenextnibble**–e.‚IfD0<>0,gotoa.–*$*’5.‚Restorethestackandreturn.‘**Ä* *‚REGISTERS¹*>*„IN…:ƒA3pointstoPascalruntimelibrary;MUSTbepreserved*0*‹:ƒA5pointstoPascalRMA;MUSTbepreserved‹*á6êCòGú-*‹:ƒA6pointstoPascallocalvariableareaŽ*:*‹:ƒA7pointstostackwithparametersandreturnaddress**MUSTbepreserved¤**Ä*&*„DURING:ƒA0getsaddressofvalbufœ**A1getsaddressofvalue*,*A2getsaddressofhextranslationtable**D0getssizeofvalue *&*D1getscountofnumberofnibbles“*!*D2getsvaluetobeconverted˜*!*D3getsnibbleforconversion˜*!*„OUT„:ƒA3,A5,A6-sameasINž**A7pointstowayback **Ä*A*‚PARAMETERS:Theaddressesoftheparametersareonthestack…*5*suchthatthefirstparameterisputonthestack„*5*firstandthelastparameterisatthetopofthe„*(*stackjustunderthereturnaddress.‘**Ä*F***********************************************************************‰OPT‡A*HEX2ASCIIDNT†1,0‰PAGEF************************************************************************•XDEFSƒ&ƒXREFS*F***********************************************************************"‰XDEF†HEX2ASCIŒProgramentrypoint**F************************************************************************‘THEƒSTACK*F***********************************************************************ˆ____________*„LO‚|returnƒ|‚TOS<--A7 *ˆ|address‚|'*ˆ|----------|ˆ-------------------------*ˆ|size…|ˆsizeofvalue;enumeratedvariable'*ˆ|----------|ˆ------------------------*ˆ|value„|ˆaddressofvalue'*ˆ|----------|ˆ------------------------!*ƒHIƒ|valbufƒ|ˆaddressofvalbuf*ˆ------------*E*--------------------------------------------------------------------**•STACKƒOFFSETS*F*---------------------------------------------------------------------* ‰OFFSET„0*RETADDR‚DS.L†1‰returnaddressSZVAL„DS.W†1‰sizeofvalue!VALUE„DS.L†1‰valueforconversion BUFADDR‚DS.L†1‰addressofvalbufSTKLENƒEQU‡*-4*D*‚Thereturnaddressisalwaysplacedonthetopofthestackwhena3*‚assemblyroutineiscalledfromaPascalprogram.*F************************************************************************—EQUATES*F***********************************************************************BYTE…EQU‡1‰sizeofvalueWORD…EQU‡2‰sizeofvalue*LOWNIBƒEQU‡$0000000Fvaluesize‰PAGEF************************************************************************‘STARTƒOFƒPROGRAM*F*********************************************************************** ‰SECTIONƒ9*4HEXTBLƒDC.B†'0123456789ABCDEF'‚Hextranslationtable*HEX2ASCIEQU‡**8*‚STEP1.‚Getaddressofvalbufandvalueoffthestack.8*‹Getvaluesize.‚Put"$"intofirstlocationofvalbuf.**ˆGetaddressofvalbuf.*5‰MOVE.L„BUFADDR(A7),A0†A0<--addrofvalbufonstack*(*ˆPut"$"intofirstlocationofvalbuf.*2‰MOVE.B„#$24,(A0)‹Firstlocationinvalbuf<--"$"*-*ˆGetaddressofvalueandputvalueintoD2.*!‰MOVE.L„VALUE(A7),D2ˆD2<--value**‚STEP2.‚PutsizeintoD0.*)‰MOVE.B„SZVAL(A7),D0ˆDO<--sizeofvalue‰PAGE*G*‚STEP3.‚Initializebitcountingregisterandadjustaddressregisters**5‰IF.B#BYTED0THEN.S…Ifvalueisabyteinsize'‹ADD.L‚#3,A1movetolastbyteofvalue3‹ADD.L‚#3,A0moveto1beyondlocationfor2ndchar)‹MOVE.W#2,D1D1willcountfor2nibbles ‰ELSE.S˜("$"isin1stlocation)5‹IF.B#WORDD0THEN.SƒIfvalueisawordinsize,ADD.L‚#2,A1Žmovetoloworderwordofvalue0ADD.L‚#5,A0Žmove1beyondlocationfor4thchar)MOVE.W#4,D1ŽD1will countfor4nibbles ‹ELSE.S–else0ADD.L‚#9,A0Žmove1beyondlocationfor8thchar)MOVE.W#8,D1ŽD1willcountfor8nibbles‹ENDI‰ENDI‰PAGE*4*‚STEP4.‚Installappropriatecharacterintovalbuf.*=*ˆShiftoutrightmostnibbleintoD3.‚Useitasanindexinto?*ˆtheHEXtranslationtableaboveandtransfertheproperASCII2*ˆcharacterintovalubuf.‚Preparethenextnibble.*3‰LEA‡HEXTBL(PC),A2ƒGetaddressoftranslationtable*,CNVRT„MOVE.B„D2,D3‹Shiftbyteintoregister.-‰AND.L…#LOWNIB,D3†Zerooutallbutlownibble3‰MOVE.B„0(A2,D3),-(A0)‚Moveinvaluefromhextable+‰LSR.L…#4,D2‹Getnextnibblereadyformove*4*ˆSubtractonefromD1since1nibblewasconverted.*‰SUB.W…#1,D1…DecrementD1*A*ˆIfallnibblesarenotdoneyetgobacktobeginningofSTEP4.*‰IF.W‚THEN.S‰lastnibble? ‹BRA.SCNVRT‰ENDI‰PAGE**‚STEP5.‚Restorethestack.*GOHOMEƒMOVE.L„(A7),STKLEN(A7)‰ADD.L…#STKLEN,A7‰RTS*‰ENDééééééF***********************************************************************Ä* *œINITLIZE **Ä* *ˆIncludefiles:†9995.&.IOE.EQ›**œ9995.&.RMA.EQ›**œ9995.&.TR1.EQ›**œ9995.&.TR1RTCD.EQ—**Ä*6*INITLIZE(regsav,CB,ptptr,atptr,vtptr,hdrptr,ƒ*)*™bfmmnptr,CBmnptr,cfgmnptr,cpymnptr,†***™timehelp,bfmhelp,parmhelp,attrhelp,…* *™cnfghelp,copyhelp,baudptr)* :*ˆINITLIZEisanassemblylanguageroutinewhichsetsup†*;*ˆpointerstotables,storesinformationitgathersabout…*;*ˆthelogondeviceandtheuserandisthebreakhandler.…**Ä*;*ˆINITLIZEclaimsbreaksandhastheasynchronousservice…* *ˆroutineforhandlingbreaks. **Ä*8*ˆINITLIZEsavesthepertinentregistersfilledbySCTˆ*<*ˆwhenCONFIGiscalled.‚Thisinformationgetsusedduringƒ**ˆprogramexecution.ª**Ä*3*ˆINITLIZEretrievesinformationfromtheCCBfor*9*ˆthelogondevice.‚TheCCBrevealsifthedeviceisan†*>*ˆEXORmacsterminal.‚Italsohasthedevice'slinesperpage.**Ä*8*ˆINITLIZEloadstheaddressesofthepointersusedinˆ*;*ˆbuildingscreensanddisplayingmenuswiththelocation…*(*ˆoftheirrespectivetablesormenus.˜**Ä*?*ˆINITLIZEbuildstheaccesspermissiontablewiththeaccess*;*ˆpermissioncodesforthevariousdevices.‚Thattableis„*2*ˆisXREFedforuseinanotherassemblyroutine.Ž**Ä*,*ˆINITLIZErestoresthestackandreturns.”**Ä**ˆALGORITHM:²*3*’0.‚Gettheaddressoftheassemblydatasegment‚*'*–byusingRECEIVESEGMENTATTRIBUTES‹*0*–dire ctive.‚Thisisnecessaryinordertorun*.*–thiscodeonnon-MMUmachines.‚Putaddressƒ***–intoASMDATAforuseinlaterassemblyˆ* *–routines.¥*&*’1.‚SetupanASQandclaimbreaks.*0*’2.‚GetaddressofREGSAVparametersentfrom…*-*–CONFIGandputregisterinfofromtheRMA…*0*–intoREGSAV.‚A5issetupbyPascaltopoint* *–tothebaseoftheRMAarea.’*/*’3.‚GetthelogonusernumberviaaTASKATTR†*,*–call.‚Thenumberisreturnedinthehigh…*'*–orderwordofA0.‚PutitinREGSAV.Š*6 :DG#9+C30;<C9K:S4*’4.‚GettheaddressofFHSPBindataareaandthe*0*–nameofthelogondevicetodoanassignment‚*-*–ofthedevicepriortodoingaconfigure/…**–statusrequest.Ÿ*/*’5.‚GettheaddressofCBsentoveranddoa†*1*–configurestatusrequesttogettheCCBvalues**–forthelogondevice.™*(*’6.‚ClosetheassignmentfromSTEP4.*#*’7.‚Initializethepointersto:’*%*œa.‚parmtable,attrtable,valtable†** (usedforbuildingscreens)‰*!*œb.‚headerpointersandstringŠ** (usedforbuildingscreens)‰**œc.‚miscellaneousmenus‘*!* (pointstosomeofthemenus)‡**œd.‚helpscreens˜*$* (pointstovarioushelpscreens)„**œe.‚baudratetable•** (usedforbuildingscreens)‰*!*’8.‚Restorethestackpointer.”**Ä*<*‚NOTE:AlltablesdealingwithdevicesaresetupintheŠ*=*‰followingorder:‚disk(hardorfloppy),terminal,printer*=*‰andmagnetictape.‚Thisfollowstheorderoftheirdevice**‰typecodes.°**Ä* *‚REGISTERS¹*>*„IN…:ƒA3pointstoPascalruntimelibrary;MUSTbepreserved*0*‹:ƒA5pointstoPascalRMA;MUSTbepreserved‹*-*‹:ƒA6pointstoPascallocalvariableareaŽ*:*‹:ƒA7pointstostackwithparametersandreturnaddress**MUSTbepreserved¤**Ä*+*„DURING:ƒA0pointstovariousparmblks—*!*A1pointstotablesinmemory˜*.*A2pointstoaddressofpointersinmemory‹*3*A4pointstoassemblymemoryarea;preservefor†*6*durationofINITLIZE;addressofdataareawillbeƒ*3*putinPascalvariableforstorageandusewith†*!*otherassemblyroutineslater˜*,*D0hasdirectivenumbersanderrorcodes*!*„OUT„:ƒA3,A5,A6-sameasINž**A7pointstowayback **Ä*A*‚PARAMETERS:Theaddressesoftheparametersareonthestack…*8*suchthatthefirstparameterisplacedonthestack*5*firstandthelastparameterisatthetopofthe„*(*stackjustunderthereturnaddress.‘**Ä*F**********************************************************************‰PAGE*‰OPT‡A*INITLIZEIDNT†1,0*‰PAGE*F*********************************************************************** *•XDEFS*F***********************************************************************"‰XDEF†INITLIZEŒProgramentrypoint*F*********************************************************************** *•XREFS*F***********************************************************************)‰XREF†PARMTBLParameterfieldnamestable)‰XREF†ATTRTBLAttributefieldnamestable)‰XREF†VALTBLŽAttributefieldvaluestable'‰XREF†PARMHDRHeaderforparametermenu(‰XREF†ATTRHDRHeaderforattributesmenu$‰XREF†NOMODSTRŒNOTMODIFIABLEstring‰XREF†DNMMENUDevicenamemenu2‰XREF†BFMMENUBootfile/memorymenu(forPhaseII)‰XREF†CBTMENUDCB/CCBmenu‰XREF†CFGMENUConfiguremenu‰XREF†CPYMENUPrintmenu‰XREF†CBTHELPDCB/CCBhelpmenu6‰XREF†BFMHELPBootfile/memoryhelpmenu(forPhaseII)"‰XREF†PRMHELPParametershelpmenu"‰XREF†ATRHELPAttributeshelpmenu!‰XREF†CFGHELPConfigurehelpmenu‰XREF†CPYHELPPrinthelpmenu‰XREF†BAUDTBLBaudratetable*>*ˆOffsetstoparameterblocksinassemblydataarea.‚Setupin *ˆCFIGDATA.*‰XREF†FHSPB…FHSparameterblock‰XREF†IOSPB…IOSparameterblock8‰XREF†TSKATRPB‚Taskattributesdirectiveparameterblock2‰X REF†EMPBLK„Errormessagehandlerparameterblock*‰XREF†ASQPB…ASQallocationparameterblock)‰XREF†BRKSPB„Claimbreaksparameterblock*7*ˆAccesspermissiontablesetupindataarea,CFIGDATA*#‰XREF†APTBL…Accesspermissiontable*‰PAGEF************************************************************************INCLUDEƒFILES*F************************************************************************ˆINCLUDEƒ9995.&.IOE.EQ*ˆINCLUDEƒ9995.&.RMA.EQ*ˆINCLUDEƒ9995.&.TR1.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆNOLIST‰NOLIST‰INCLUDEƒ9995.&.IOE.EQ‰INCLUDEƒ9995.&.RMA.EQ‰INCLUDEƒ9995.&.TR1.EQ‰INCLUDEƒ9995.&.TR1RTCD.EQ‰LIST*F************************************************************************™EQUATES*F************************************************************************DPADNOBUFEQU‡$2000…option:segment->A0;noparmblkforreturninginfo>DATSEGNMEQU‡'SEG0'„Nameofdatasegmentforassemblyroutines*LOGONLUNEQU‡1‰LogondeviceTRGTLUN‚EQU‡2‰TargetdeviceUSERZEROEQU‡0‰0*BLANK2ƒEQU‡'‚'†2blanksBLANK4ƒEQU‡'„'„4blanksCR‡EQU‡$0D‡carriagereturnLF‡EQU‡$0A‡linefeed**‰PAGEF************************************************************************‘THEƒSTACK*F***********************************************************************ˆ____________*„LO‚|returnƒ|‚TOS<--A7 *ˆ|address‚|'*ˆ|----------|ˆ------------------------0*ˆ|baudptr‚|ˆaddressofbaudratetablepointer'*ˆ|----------|ˆ------------------------7*ˆ|logondev|ˆaddressofrecordonuser'slogondevice'*ˆ|----------|ˆ------------------------*ˆ|copyhelp|*ˆ|----------|*ˆ|cnfghelp|*ˆ|----------|*ˆ|attrhelp|/*ˆ|----------|ˆaddressofpointerstohelpmenu*ˆ|parmhelp|*ˆ|----------| *ˆ|bfmhelp‚|*ˆ|----------| *ˆ|CBthelp‚|(*ˆ|----------|ˆ-------------------------*ˆ|cpymnptr|*ˆ|----------|*ˆ|cfgmnptr|*ˆ|----------|:*ˆ|CBmnptr‚|ˆaddressofpointerstomiscellaneousscreens*ˆ|----------| *ˆ|bmmnptr‚|*ˆ|----------| *ˆ|dnmnptr‚|**ˆ|----------|ˆ---------------------------7*ˆ|nomodptr|ˆaddressofNOTMODIFIABLEstringpointer**ˆ|----------|ˆ--------------------------- *ˆ|attrhdr‚|>*ˆ|----------|ˆaddressofpointerstoparm/attrscreenheaders *ˆ|parmhdr‚|**ˆ|----------|ˆ---------------------------8*ˆ|asmmemƒ|ˆaddressofaddressofassemblydatasection**ˆ|----------|ˆ--------------------------- *ˆ|vtptr„|*ˆ|----------|<*ˆ|atptr„|ˆaddressofpointerstotablesforbuildingmenus*ˆ|----------| *ˆ|ptptr„|**ˆ|----------|ˆ---------------------------*ˆ|CB‡|ˆaddressofCB**ˆ|----------|ˆ---------------------------$*ƒHIƒ|regsavƒ|ˆaddressofregisters**ˆ------------ˆ___________________________*&*ˆSeeXREFaboveforcalltoINITLIZE.*E*--------------------------------------------------------------------**•STACKƒOFFSETS*F*---------------------------------------------------------------------* ‰OFFSET„0*RETADDR‚DS.L†1‰returnaddress-BAUDADƒDS.L†1‰baudratetablepointeraddress&LGDEVAD‚DS.L†1‰logondevrecordaddress.CPHPTRADDS.L†1‰copyhelpmenupointeraddress3CFHPTRADDS.L†1‰configurehelpmenupointeraddress4ATHPTRADDS.L†1‰attributeshelpmenupointeraddress4PRHPTRADDS.L†1‰parametershelpmenupointeraddress:BFHPTRADDS.L†1‰bootfile/memoryhelpmenupointeraddress1CBHPTRADDS.L†1‰CBtypehelpmenupointeraddress)CPYPTRADDS.L†1‰copymenupointeraddress.CFGPTRADDS.L†1‰configuremenupointeraddress+CBPTRAD‚DS.L†1‰CBtypemenupointeraddress5BFMPTRADDS.L†1‰bootfile/memorymenupointeraddress0DNMPTRADDS.L†1‰devicenamemenupointeraddress5MODPTRADDS.L†1‰MOTMODIFIABLEstringpointeraddress5AHPTRAD‚DS.L†1‰attributesmenuheaderpointeraddress5PHPTRAD‚DS.L†1‰parametersmenuheaderpointeraddress8ASMMEMADDS.L†1‰addressofassemblydatasectionaddress6VALPTRADDS.L†1‰attributesvaluetablepointeraddress5ATRPTRADDS.L†1‰at tributesnametablepointeraddress5PRMPTRADDS.L†1‰parametersnametablepointeraddressCBADDRƒDS.L†1‰CBaddressREGSAVADDS.L†1‰regsavaddressSTKLENƒEQU‡*-4*D*‚Thereturnaddressisalwaysplacedonthetopofthestackwhena3*‚assemblyroutineiscalledfromaPascalprogram.*‰PAGE F************************************************************************‘STARTƒOFƒPROGRAM*F*********************************************************************** ‰SECTIONƒ9*,*ˆReceivesegmentsattributeparameterblock**GTADRPB‚DC.L†0,0‘Requestingtask,session.-‰DC.W†PADNOBUF,0ŠDirectiveoption,attributes!‰DC.L†DATSEGNMŒDatasegmentname.2‰DC.L†0,0,0Nologicaladdressorbuffersupplied.*B*ˆClosetargetdeviceassignmentparameterblockincaseofbreak.*CLSPB„DC.W†FHCLOSŽClose2‰DC.W†FOPOVRTSetsbit3tokeepCCBasconfigured‰DC.B†0“Status‰DC.B†TRGTLUNTargetdevice‰DC.L†0,0,0,0,0,0,0‰DC.W†0*,*ˆOutputforthescreenwhenaBREAKoccurs.*+BRKST„DC.B†CR,LFCarriagereturn,linefeed'‰DC.B†'---------->‚BREAK'Breakmessage3‰DC.B†CR,LF,CR,LFŠMorecarriagereturns,linefeedsBRKENDƒEQU‡*-1‰DS.W†0*INITLIZEEQU‡*‰Entrypoint*&*STEP0.‚Getaddressofdatasegment.*;‰LEA‡GTADRPB(PC),A0†ParmblkfordirectiveinGTADRPBbelow6‰MOVE.L„#RCVSA,D0‹Receivesegmentsattributedirective1‰TRAP†#1’Getaddressof'SEG0'-reallyfornon-MMU(‰BNE.L…STOPCNFGŒStopCONFIG,can'tgoon*(*ˆAddressofassemblydataareareceived*(‰MOVE.L„A0,A4Asmmemareaaddress->A4:‰MOVE.L„ASMMEMAD(A7),A2…A2<--asmmem'slocationinCONFIG8‰MOVE.L„A0,(A2)PutaddrofdataareaintoPascalmemory‰PAGE**STEP1.‚Claimbreaks.**ˆAllocateASQ*#‰MOVE.L„#GTASQ,D0‹GetASQdirective*‰LEA‡ASQPB(A4),A0ˆLoadaddressofparmblk!‰LEA‡AASR(PC),A1‰GetaddrofAASR2‰MOVE.L„A1,14(A0)‹PutaddrofAASRintoaddrfield‰TRAP†#1’GetASQ‰BNE.L…STOPCNFGŒError**ˆClaimbreaks.*1‰LEA‡BRKSPB(A4),A0‡IOSparmblkforbreakservice‰TRAP†#2’Claimbreaks‰BNE.L…STOPCNFGŒError‰PAGE*E*STEP2.ƒGetaddressofREGSAVandfillREGSAVwithregistervalues.*>‰MOVE.L„REGSAVAD(A7),A2…AddressoftheREGSAVinCONFIG-->A2.‰MOVE.L„LTN(A5),(A2)+‡Thisdatastructurewill8‰MOVE.L„SN(A5),(A2)+ˆstoretheregistervaluesfromSCT.9‰MOVE.L„DVOL(A5),(A2)+†A5pointstothebaseofRMAwhich<‰MOVE.W„DUN(A5),(A2)+‡whichgetstheinitialregistervalues=‰MOVE.L„DCAT(A5),(A2)+†putinitbyaPascalruntimeroutine.<‰MOVE.L„DCAT+4(A5),(A2)+„XferthesevaluesintoREGSAVarea.‰MOVE.W„CLL(A5),(A2)+‰MOVE.L„LUIU(A5),(A2)+6‰MOVE.L„DTID(A5),(A2)+†TheoffsetsarefromRMAEQU.EQ.‰PAGE*&*‚STEP3.‚Getthelogonuser'snumber.*:‰MOVE.L„#TSKATTR,D0‰Thelogonusernumberisobtainedfrom<‰LEA‡TSKATRPB(A4),A0…TASKATTRdirective.A4hasaddrofdata+‰TRAP†#1’segmentwithpb,useoffsettoit.5‰BNE.L…STOPCNFGŒGotoErrorMessageHandleronerror.*=*ˆPutuserlogonnumberintousableformandstoreinregsav.*9MOVENUM‚MOVE.L„A0,D0#isreturnedinthehighorderword%‰LSR.L…#8,D0ofA0.PutitinREGSAV. ‰LSR.L…#8,D0‰MOVE.W„D0,(A2)‰PAGE*I*‚STEP4.‚Assigntheuser'sdevicepriortodoingaconfigure/statusreq.*A*ˆInitializeFHSparameterblockatoffsetFHSPBindatasegment.*ˆA4pointstodataarea.*7‰LEA‡FHSPB(A4),A0ŠLoadaddrofFHSparmblkfromoffset5‰MOVE.W„#FHASGN,FHSCMD(A0)„Performdeviceassignment.=‰MOVE.W„#FOPPRPW,FHSOPT(A0)ƒPublicr/w,goodforbusydevice.9‰MOVE.B„#LOGONLUN,FHSLUN(A0)‚LUNforuser'slogondevice.B‰MOVE.L„DTID(A5),FHSVOL(A0)ƒNameoftheuser'slogondevfromRMA.2‰MOVE.W„#USERZERO,FHSUSN(A0)‚Zero-->usernumber.2‰MOVE.L„#BLANK4,FHSCLG(A0)„Blankoutcatalogname.<‰MOVE.L„#BLANK4,FHSCLG+4(A0)‚Blankoutrestofcatalogname./‰MOVE.L„#BLANK4,FHSFIL(A0)„Blankoutfilename.9‰MOVE.L„#BLANK4,FHSFIL+4(A0)‚Blankoutrestoffilename./‰MOVE.W„#BLANK2,FHSEXT(A0)„Blankoutextension.‰TRAP†#3”Doassignment.6 ‰BNE.L…STOPCNFGŽGotoErrorMessageHandlerforerror.‰PAGE*D*‚STEP5.‚RetrievetheCCBvaluesforthelogondevice.‚PutinCBin *‹CONFIG.*C*ˆInitializeparameterblockIOSPBatoffsetIOSPBindatasegment.*8‰LEA‡IOSPB(A4),A0ˆLoadaddrofIOSparmblkfortrapcall4‰MOVE.W„#IOSTAT,IOSFCT(A0)‚Configurestatusrequest.*‰MOVE.W„#0,IOSOPT(A0)‡Filloptionswith0.6‰MOVE.B„#LOGONLUN,IOSLUN(A0)Getinfoforlogondevice<‰MOVE.L„CBADDR(A7),IOSDBP(A0)CONFIG'SCBaddr->CSBinIOS,‰TRAP†#2’DuringthetrapcalltheCCBvalues2‰BNE.L…STOPCNFGŒwillbewrittentotheCSBaddress *¦whichisstartofCBinCONFIG0‰MOVE.L„CBADDR(A7),A0‡GetaddrofCBjustfilled>‰MOVE.L„LGDEVAD(A7),A1†GetaddroflogondevvariableinPascal;‰MOVE.B„IOSTCD(A0),(A1)+„Movetheterminalcode,thedevice:‰MOVE.B„IOSDTP(A0),(A1)+„typecodeandthenumberoflines0‰MOVE.L„IOSRSZ(A0),(A1)+„perpageintologondev.‰PAGE***‚STEP6.‚Closeassignmenttologondevice*7‰LEA‡FHSPB(A4),A0ŠLoadaddrofFHSparmblkfromoffset1‰MOVE.W„#FHCLOS,FHSCMD(A0)„Performclosecommand.‰TRAP†#3”Doclose.6‰BNE.L…STOPCNFGŽGotoErrorMessageHandlerforerror.‰PAGE*K*‚STEP7a.‚Initializepointerstotableswhichbuildparmscreen/attrscreen.**ˆDoparmtblforparmscreen.*<‰MOVE.L„PRMPTRAD(A7),A2…A2<--addrofparmtblpntronstack5‰LEA‡PARMTBL(PC),A1†A1<--addressofparametertable4‰MOVE.L„A1,(A2)Pntrtoparmtbl<--addrofparmtabl**ˆDoattrtblforattrscreen.*<‰MOVE.L„ATRPTRAD(A7),A2…A2<--addrofattrtblpntronstack5‰LEA‡ATTRTBL(PC),A1†A1<--addressofattributetable4‰MOVE.L„A1,(A2)Pntrtoattrtbl<--addrofattrtabl**ˆDovaltblforattrscreen.*<‰MOVE.L„VALPTRAD(A7),A2…A2<--addrofvaltablpntronstack6‰LEA‡VALTBL(PC),A1‡A1<--addressofattrvaluestable2‰MOVE.L„A1,(A2)Pntrtovaltbl<--addrofvaltabl‰PAGE*C*‚STEP7b.‚InitializepointertoheadersandNOTMODIFIABLEstring.*"*ˆDopointertoparmscreenheader.*?‰MOVE.L„PHPTRAD(A7),A2†A2<--addrofparmheaderpntronstack,‰LEA‡PARMHDR(PC),A1†A1<--addressofheader1‰MOVE.L„A1,(A2)Pntrtoheader<--addrofheader*"*ˆDopointertoattrscreenheader.*?‰MOVE.L„AHPTRAD(A7),A2†A2<--addrofattrheaderpntronstack,‰LEA‡ATTRHDR(PC),A1†A1<--addressofheader1‰MOVE.L„A1,(A2)Pntrtoheader<--addrofheader*&*ˆDopointertoNOTMODIFIABLEstring.*:‰MOVE.L„MODPTRAD(A7),A2…A2<--addrofstringptronstack-‰LEA‡NOMODSTR(PC),A1…A1<--addressofstring1‰MOVE.L„A1,(A2)Pntrtostring<--addrofstring‰PAGE*:*‚STEP7c.‚Initializepointerstothemiscellaneousmenus.*!*ˆDopointertodevicenamemenu.*?‰MOVE.L„DNMPTRAD(A7),A2…A2<--addrofdevicenamemenuonstck6‰LEA‡DNMMENU(PC),A1†A1<--addressofdevicenamemenu8‰MOVE.L„A1,(A2)Pntrtodevicenamemenu<--addrofmenu*5*ˆDopointertobootfile/memorymenu(FofPhaseII).*=‰MOVE.L„BFMPTRAD(A7),A2…A2<--addrofbtfl/memmenuonstck;‰LEA‡BFMMENU(PC),A1†A1<--addressofbootfile/memorymenu4‰MOVE.L„A1,(A2)Pntrtobtf/memmenu<--addrofmenu**ˆDopointertoCBmenu.*5‰MOVE.L„CBPTRAD(A7),A2†A2<--addrofCBmenuonstck2‰LEA‡CBTMENU(PC),A1†A1<--addressofCBtypemenu4‰MOVE.L„A1,(A2)PntrtoCBtypemenu<--addrofmenu**ˆDopointertoconfiguremenu.*=‰MOVE.L„CFGPTRAD(A7),A2…A2<--addrofconfiguremenuonstck4‰LEA‡CFGMENU(PC),A1†A1<--addressofconfiguremenu6‰MOVE.L„A1,(A2)Pntrtoconfiguremenu<--addrofmenu**ˆDopointertoprintmenu.*9‰MOVE.L„CPYPTRAD(A7),A2…A2<--addrofprintmenuonstck0‰LEA‡CPYMENU(PC),A1†A1<--addressofprintmenu2‰MOVE.L„A1,(A2)Pntrtoprintmenu<--addrofmenu‰PAGE*3*‚STEP7d.‚Initializepointerstothehelpscreens.**ˆDopointertoCBhelpmenu.*@‰MOVE.L„CBHPTRAD(A7),A2…A2<--addrofDCB/CCBhelpptronstack4‰LEA‡CBTHELP(PC),A1†A1<--addrofDCB/CCBhelpmenu4‰MOVE.L„A1,(A2)PntrtoDCB/CCBhelp<--addrofmenu*:*ˆDopointertobootfil e/memoryhelpmenu(forPhaseII).*?‰MOVE.L„BFHPTRAD(A7),A2…A2<--addrofbtfl/memhelpptronst9‰LEA‡BFMHELP(PC),A1†A1<--addrofbtfl/memoryhelpmenu4‰MOVE.L„A1,(A2)Pntrtobtf/memmenu<--addrofmenu*$*ˆDopointertoparameterhelpmenu.*=‰MOVE.L„PRHPTRAD(A7),A2…A2<--addrofparmhelpptronstack1‰LEA‡PRMHELP(PC),A1†A1<--addrofparmhelpmenu6‰MOVE.L„A1,(A2)Pntrtoparmhelpmenu<--addrofmenu*%*ˆDopointertoattributeshelpmenu.*=‰MOVE.L„ATHPTRAD(A7),A2…A2<--addrofattrhelpptronstack1‰LEA‡ATRHELP(PC),A1†A1<--addrofattrhelpmenu6‰MOVE.L„A1,(A2)Pntrtoattrhelpmenu<--addrofmenu*$*ˆDopointertoconfigurehelpmenu.*=‰MOVE.L„CFHPTRAD(A7),A2…A2<--addrofcnfghelpptronstack1‰LEA‡CFGHELP(PC),A1†A1<--addrofcnfghelpmenu6‰MOVE.L„A1,(A2)Pntrtocnfghelpmenu<--addrofmenu**ˆDopointertocopyhelpmenu.*=‰MOVE.L„CPHPTRAD(A7),A2…A2<--addrofcopyhelpptronstack1‰LEA‡CPYHELP(PC),A1†A1<--addrofcopyhelpmenu6‰MOVE.L„A1,(A2)Pntrtocopyhelpmenu<--addrofmenu* *ˆDopointertobaudratetable.*8‰MOVE.L„BAUDAD(A7),A2‡A2<--addrofbaudratetableptr2‰LEA‡BAUDTBL(PC),A1†A1<--addrofbaudratetable6‰MOVE.L„A1,(A2)Pntrtobaudratetbl<--addroftable**ˆGobacktocaller.*>‰MOVE.L„(A7),STKLEN(A7)…Writereturnaddresswherestkptrwas9‰ADD.L…#STKLEN,A7ŠRestorestackpointertopreviousplace ‰RTS›Return‰PAGEF***********************************************************************B*ˆSUBROUTINESTOPcleansupbeforeabortingCONFIG.‚ItcallsError?*ˆMessageHandler,restoresthestack,andterminatesthetask.7*ˆIncaseatemporaryconfigurationwasdone,thecloseE*ˆusesthebitwhichwillkeepthecurrentconfiguration.‚IfnonewasC*ˆdoneoritwasadefaultconfiguration,thecurrentconfiguration@*ˆwhichisthesameasthedefaultconfigurationanyway,willbe+*ˆkeptandtheclosewillappearasnormal.*F***********************************************************************(STOPCNFGBSR.S…EMH‘Errormessagehandler**ˆBRA.S…FINISHŽSkipBREAKmsg,notabreak**ŠGetaddressofdatasegment.*A4*E*ˆClosetheassignmenttothetargetwiththebittokeepthecurrent*ˆconfigurationset.*9‰LEA‡CLSPB(PC),A0ˆCloseassignment,LUN=2shouldbethere‰TRAP†#3’Closeit**ˆPutoutBREAKmessage.*#‰LEA‡IOSPB(A4),A0ˆAddressofIOSpb ‰MOVE.W„#IOWRIT,IOSFCT(A0)‚Write‰MOVE.W„#IOPIMG,IOSOPT(A0)‚Wait‰MOVE.B„#0,IOSSTA(A0)‡Status(‰MOVE.B„#LDFLUN,IOSLUN(A0)‚Outputdevice(‰LEA‡BRKST(PC),A1ˆStartofbreakmessage4‰MOVE.L„A1,IOSSAD(A0)‡StartofbreakmessageintoPB'‰LEA‡BRKEND(PC),A1‡Endofbreakmessage2‰MOVE.L„A1,IOSEAD(A0)‡EndofbreakmessageINTOPB‰TRAP†#2’Printbreakmessage 'FINISHƒMOVE.L„#TERM,D0ŒTerminateCONFIG‰TRAP†#1’Doit‰PAGEF***********************************************************************Ä**’SUBROUTINEŸ**’EMH-ErrorMessageHandler—**Ä*F***********************************************************************<*ˆEMPBLKwasappropriatelyinitializedinCFIGDATAtooutput%*ˆerrormessagestothelogondevice.EMH:%‰MOVE.L„A0,-(A7)ŒSavemyA0onstack.&‰LEA‡EMPBLK(A4),A0‡WhereEMPBLKlives.(‰MOVE.L„D0,(A0)Puterror#intoEMPBLK./‰MOVE.L„(A7),4(A0)ŠPutmysavedA0intoEMPBLK..‰MOVE.L„#2,D0Errormessagehandlerdirective.&‰TRAP†#4’InvokeErrorMessageHandler.‰MOVE.L„(A7)+,A0ŒRestoreA0‰RTS‰END é éééF***********************************************************************Ä* *œMODMEMCB **Ä* *ˆIncludefiles:†9995.&.IOE.EQ›**œ9995.&.RMA.EQ›**œ9995.&.NIO.EQ›**Ä*9*ˆMODMEMCB‚(asmmem,dname,CB,msg,trgteqlg,duration)†*?*ˆisanassemblyroutinewhichusestheCBinCONFIG'sstorage*8*ˆastheparametervaluesforreconfiguringthetargetˆ*>*ˆdevice'sCCBortheDCB.‚MODMEMCBsetsuptheIOCBanddoes**ˆthecallforconfiguration.¡**Ä*=*ˆFirst,MODMEMCBchecksifthetargetdeviceandthelogonƒ*6*ˆdevicearethesame.‚Iftheyarethenpublicread/‰*?*ˆpublicwriteisstoredinthechangeaccesspermissionparm*>*ˆblock.‚Otherwise,thedevicetypesentoverasaparameter*<*ˆisretrievedfromthestackandisusedasanindexinto„*?*ˆtheaccesspermissiontableswhichwerepreviouslysetupin*;*ˆtheassemblydataareatoobtaintheappropriateaccess…*>*ˆpermissionforthetargetdevice.‚Thispermissionisstored*3*ˆinthechangeaccesspermissionparmeterblock.**Ä*?*ˆThereasonfordoingtheaboveisthatinapreviousroutine*<*ˆthetargetdevicewasgivenapublicwriteassignmentto„*<*ˆdetermineifitreallyexistedandtoenableaconfigure„*>*ˆstatusrequesttobeperformedsothatthedevice'svalues‚*>*ˆcouldbeusedtobuildscreensfortheuserinterface.‚The*?*ˆpermissionwasretainedsothatnooneelsecouldreconfig-*>*ˆtheterminalmeanwhile.‚Nowtheappropriateaccesswillbe*>*ˆassignedwithachangeaccesspermissioncallbyMODMEMCB.‚**Ä*?*ˆIfthechangeaccesspermissionissuccessful,MODMEMCBwill*>*ˆperformtheselectedconfiguration.‚MODMEMCBdeterminesif*:*ˆtheconfigurationcommandisaconfiguredefaultsora†*=*ˆconfigurecommandfromaparametersentoverfromCONFIG.ƒ*<*ˆsentoverfromCONFIG.‚Itsetsuptheappropriatevaluesƒ*=*ˆintheparameterblockforperformingoneofthesecalls.ƒ**Ä*?*ˆIfthelogondeviceisnotthetargetdevice,theassignment**ˆisclosed.²**Ä*[+d,lKt=|?„:ŒB”"*ˆThestackpointerisrestored.ž**Ä*>*ˆ1.‚GettheaddressofassemblymemoryandCBoffthestack.*>*ˆ2.‚Getthenameofthetargetdeviceandwhetheritisthe*:*ˆasthelogondevice.‚Ifitisthesamethenputpublic…*>*ˆread/writeintoD0.‚Otherwisegettheaddressoftheaccess*>*ˆpermissioncodetableandthegetthedevicetypecodeout‚*>*ˆofCB.‚Usethedevicetypecodetostepthroughtheaccess*;*ˆpermissiontableuntilthecorrectaccesspermissionis…**ˆfoundandplacedinD0.¥*8*ˆ3.‚Changeaccesspermission.‚IfD0<>0thengetthe†*=*ˆaddressofmsgandputoutErrorMessageHandlermessage.ƒ*%*ˆPutmsg<--stopscrnandgoback.›*;*ˆ4.‚Getprmanentoffthestack.‚Ifprmanentistruethenƒ*=*ˆsetupforaconfiguredefaultscommand.‚Otherwisesetup‚*<*ˆforaconfigurecommand.‚Performthecall.‚IfD0<>0then‚*?*ˆcallErrorMessageHandler.Changeaccesspermissionbackto***ˆpublic,restorethestackandgoback.–**Ä* *„REGISTERS·*5*„IN…:ƒA3pointstoPascal runtimelibrary;MUSTbe‰*8*orwhenyougetbacktoPascalyouwillcrashatthe*#*firstcalltoalibraryroutine–*0*‹:ƒA5pointstoPascalRMA;MUSTbepreserved‹*-*‹:ƒA6pointstoPascallocalvariableareaŽ*3*‹:ƒA7pointstostackwithparametersandreturnˆ**address;MUSTbepreserved›*3*Itisnotnecessarytosaveanyotherregisters†**Ä*+*„DURING:ƒA0pointstovariousparmblks—**A1hasCBaddress¤*6*A2hasaddressofaccesspermissiontable,addressƒ*)*oftargetdevicename,addressofmsg*7*A4pointstomemoryareaforMODMEMCB;preservefor‚*6*durationofMODMEMCB;addressofdataareawillbeƒ*3*putinPascalvariableforstorageandusewith†*!*otherassemblyroutineslater˜*!*D0hasaccesspermissioncode˜**D1hasdevicetypecodež**D2hasvalueofsame¡*6*D3hasvalueofprmanent;i.e.,tellsifchangeisƒ*+*configuredefaultsorconfigurecommandŽ* *D5preservesparametersmask™*!*D6hasthetargetdevicename˜*#*D7hascopyofdevicetypecode–*!*„OUT„:ƒA3,A5,A6-sameasINž**A7pointstowayback **Ä*A*‚PARAMETERS:Theaddressesoftheparametersareonthestack…*8*suchthatthefirstparameterisplacedonthestack*5*firstandthelastparameterisatthetopofthe„*(*stackjustunderthereturnaddress.‘**Ä*F**********************************************************************‰PAGE*‰OPT‡A*MODMEMCBIDNT†1,0*‰PAGE*F*********************************************************************** *•XDEFS*F***********************************************************************"‰XDEF†MODMEMCBŒProgramentrypoint*F*********************************************************************** *•XREFS*F************************************************************************>*ˆOffsetstoparameterblocksinassemblydataarea.‚Setupin *ˆCFIGDATA.*‰XREF†FHSPB…FHSparameterblock‰XREF†IOSPB…IOSparameterblock2‰XREF†EMPBLK„Errormessagehandlerparameterblock*7*ˆAccesspermissiontablesetupindataarea,CFIGDATA*#‰XREF†APTBL…Accesspermissiontable*‰PAGEF************************************************************************INCLUDEƒFILES*F************************************************************************ˆINCLUDEƒ9995.&.IOE.EQ*ˆINCLUDEƒ9995.&.NIO.EQ*ˆINCLUDEƒ9995.&.RMA.EQ*ˆNOLIST‰NOLIST‰INCLUDEƒ9995.&.IOE.EQ‰INCLUDEƒ9995.&.NIO.EQ‰INCLUDEƒ9995.&.RMA.EQ‰LIST*F************************************************************************™EQUATES*F************************************************************************/TRGTLUN‚EQU‡2‰Targetdeviceforreconfiguration&PRINTER‚EQU‡4‰Printerdevicetypecode/MAGTAPE‚EQU‡5‰DCBdevicetypecodeformagtapeUSERZEROEQU‡0‰User0.DEVBUSY‚EQU‡1‰Enumeratedvaluefordevicebusy,STOPSCRNEQU‡6‰Enumeratedvalueforstopscrn6PRMANENTEQU‡0‰EnumeratedvalueforconfiguredefaultsAOFFRWTO‚EQU‡$FFF3…UsedtoANDoutread/writetimeoutinparmmask@OFFHBYTEEQU‡$0FFF…UsedtoANDoutbits12-15inattributesmask9SAME…EQU‡1‰Booleanvalueiftarget=logondevice;1=TRUEBLANK2ƒEQU‡$2020…2blanksBLANK4ƒEQU‡$202020204blanks*‰PAGEF************************************************************************‘THEƒSTACK*F***********************************************************************ˆ____________*„LO‚|returnƒ|‚TOS<--A7 *ˆ|address‚|'*ˆ|----------|ˆ------------------------;*ˆ|duration|ˆenumeratedvalue;permanent/temporarychange'*ˆ|----------|ˆ------------------------0*ˆ|trgteqlg|ˆbooleanvalue;islogon=target?'*ˆ|----------|ˆ------------------------5*ˆ|msg†|ˆaddressofenumeratedvariableformessages'*ˆ|----------|ˆ------------------------8*ˆ|CB‡|ˆaddressofblockwithparametervaluesforcnfg(*ˆ|----------|ˆ-------------------------&*ˆ|dname„|ˆtargetdevicenameaddress(*ˆ|----------|ˆ-------------------------0*ƒHIƒ| asmmemƒ|ˆaddressofassemblydatasection**ˆ------------ˆ___________________________*E*--------------------------------------------------------------------**•STACKƒOFFSETS*F*---------------------------------------------------------------------* ‰OFFSET„0*RETADDR‚DS.L†1‰returnaddress6DURATIONDS.W†1‰valueforchange,cnfgdeflt/cnfgcmmd0TRGTEQLGDS.W†1‰valueofboolean,target?logonMSGAD„DS.L†1‰addressofmessageCBADDRƒDS.L†1‰CBaddress)DNMADDR‚DS.L†1‰targetdevicenameaddress-ASMMEMADDS.L†1‰assemblydatasectionaddressSTKLENƒEQU‡*-4*D*‚Thereturnaddressisalwaysplacedonthetopofthestackwhena3*‚assemblyroutineiscalledfromaPascalprogram.*‰PAGE F************************************************************************‘STARTƒOFƒPROGRAM*F***********************************************************************,‰SECTIONƒ9“ASMroutinesmustbeinSection9*MODMEMCBEQU‡**B*STEP1.‚GettheaddressoftheassemblydataareaandtheCBfor*ˆreconfiguration.*1‰MOVE.L„ASMMEMAD(A7),A4…A4<--addressofdataseg=‰MOVE.L„CBADDR(A7),A1‡A1<--addrofCBwithparametervalues*F*STEP2.‚Gettheproperaccesspermissioncodeforthetargetdevice.**ˆGetthedevicename.*.‰MOVE.L„DNMADDR(A7),A2ˆAddressofdevicename. ‰MOVE.L„(A2),D6Getdevicename.*)*ˆPuttheaccesspermissioncodeintoD0.*?*ˆIftrgteqlg=same(true)thenpublicread,publicwritegoes8*ˆintotheparameterblock.‚OtherwisegettheaddressofB*ˆCBandpulloutthedevicetypecodefromit.‚Usethecodeasan=*ˆindexintotheaccesspermissiontableandstoretheaccess&*ˆpermissionintotheparameterblock.*@*ˆGettheboolean,same,offstacktodetermineisthelogonandC*ˆthetargetdevicesarethesame.‚1istrue,ortheyarethesame.*5‰MOVE.B„TRGTEQLG(A7),D2…D2<--valueofboolean;1=TRUE*9*ˆIfsame,thenputFOPPRPWintoparmblk,elsegetother*ˆcodeandputinparmblk.*‰CMP.B…#SAME,D2ŒLogon=target‰BNE.S…NOTSAMELogon<>target%‰MOVE.W„#FOPPRPW,D0‰Publicread/write*‰BRA.S…CHNGPRMGochangeaccesspermission*B*ŠGetaddressofaccesspermissioncodetableresidinginassembly *Šdataarea.**ŠUsetheaddressofCBinA1andobtainthedevicetypecode.*2‹MOVE.B„IOSDTP(A1),D1‡PutdevcodefromCBintoD10‹MOVE.B„D1,D7Preservescopyofdevicetypecode*2*ŠFindproperaccesspermissioncodeinthetable.*!CODEFINDƒSUB.B…#1,D1Doanentry.+‹BNE.S…NEXTCODEŒHavenotreachedentryyet.(‹MOVE.W„(A2),D0Movecodeintoparmblk.*‹BRA.S…CHNGPRMFinishrestofFHSparmblk)NEXTCODEƒADD.L…#2,A2Pointtonextentry.‹BRA.S…CODEFINDŒTrynextcode‰PAGE*#*STEP3.‚Changeaccesspermission.***ˆGettheaddressofmsg.**CHNGPRM‚MOVE.L„MSGAD(A7),A2ˆAddressofmsg*(‰BSR.L…CHNGACCPŒchangeaccesspermission*>*ˆIfassignmentissuccessful,continue.‚Ifthedeviceisbusy?*ˆsetmsgforbusymessageuponreturntoCONFIG;otherwisethe?*ˆerrorisunexpectedsosetmsgtostopthescreenuponreturn-*ˆtotheCONFIGandputoutasystemmessage.*.‰BEQ.S…CNFG’Doconfigureifassignmentisgood2‰IF#FSTAAPD0THEN.S‡accesspermissionerror#‹MOVE.B#DEVBUSY,(A2)Šmsg<--devbusy"‰ELSE.Sšdon'tknowthiserrorcode(‹BSR.L‚EMH”putouterrormsgformsystem‰ENDI$‰BRA.S…GOHOMEcan'tdoanymorehere‰PAGE*H*‚STEP4.‚Getdurationoffthestack.‚Ifdurationispermanent(=0),doa7*‹configuredefaults;otherwisedoaconfigurerequest.**ˆGetprmanent.*1CNFG…MOVE.B„DURATION(A7),D3…Getvalueofduration*2*ˆFixupIOSparameterblockforaconfigurecall.*#‰LEA‡IOSPB(A4),A0ˆGetaddrofIOSPB***ˆTypeofcallwillbeinsertedpresently.-*ˆTypeofoptionswillbeinsertedpresently.*ˆPutinrestofstuffnow.*‰MOVE.B„#0,IOSSTA(A0)‡status3‰MOVE.B„#TRGTLUN,IOSLUN(A0)Assi gntotargetdevice$‰MOVE.W„#0,IOSSRV(A0)‡Reservedfield<‰MOVE.L„A1,IOSDBP(A0)‡CONFIG'SCBaddr->CSBinIOSparmblk ‰MOVE.W„#0,IOSOPT(A0)‡Nooptions*;*ˆIfprmanentistruethandoaconfiguredefaultscommand;$*ˆotherwise;doaconfigurerequest.**.‰CMP.B…#PRMANENT,D3ŠIsdurationpermanent(=0)?‰BNE.S…NOTPERMNotpermanent;‰MOVE.W„#IOCHDC,IOSFCT(A0)„Configuredefaultsforpermanent‰BRA.S…DOTRAPGodoit*3NOTPERM‚MOVE.W„#IOCNFG,IOSFCT(A0)„Configurerequest>‰AND.W…#OFFRWTO,IOSPRM(A1)ƒNeedtoturnoffread/writetimeoutA‰AND.W…#OFFHBYTE,IOSATM(A1)‚Alsoturnoffbits12-15inattrmask&‰CMP.B…#MAGTAPE,D7‹Isdevicemagtape?‰BNE.S…DOTRAPNotmagtape?‰MOVE.W„#IOPCONLY,IOSOPT(A0)‚Configurebutdon'tmountmagtape*DOTRAPƒTRAP†#2”Configure*D*ˆIfsuccessfulgotoFIXMASK;otherwisegotoerrormessagehandler(*ˆforasystemmessageonunknownerror.*$‰BEQ.S…FIXMASKNoerror,socontinue&‰BSR.L…EMH‘Gotoerrormessagehandler7‰MOVE.W„#FOPPW,D0‹Restorepublicread/writeaccessperm-‰BSR.S…CHNGACCPŒChangeaccesspermissionback‰BRA.S…GOHOMEŽCan'tdoanymore‰PAGE*4FIXMASK‚MOVE.W„D5,IOSPRM(A1)‡Restoreparametersmask*E*ˆIftheconfigurecommandwasperformedthenthedefualtvalueswillD*ˆwriteovertheworkingvalueswhenthedeviceassignmentisclosedA*ˆunlessbit3intheoptionsparameterisset,inwhichcaseIOS%*ˆwillnotrevisetheworkingvalues.*0‰LEA‡FHSPB(A4),A0ˆGetFHSPBforcloseassignment ‰MOVE.W„#0,FHSOPT(A0)‡Nooptions'‰CMP.B…#PRMANENT,D3ˆConfiguredefaults?‰BEQ.S…CLOSITŽCloseassignmentC‰BSETW…#FOPOVRTB,FHSOPT(A0)Setbit3inoptionstokeepcnfguration%CLOSITƒBSR.S…CLSASGNCloseassignment**‹Restorethestack.*GOHOMEƒMOVE.L„(A7),STKLEN(A7)‰ADD.L…#STKLEN,A7‰RTS‰PAGEF************************************************************************“SUBROUTINE-CLSASGN**Closethedeviceassignment*F***********************************************************************CLSASGN:***ˆFHSPBloadedabove3‰MOVE.W„#FHCLOS,FHSCMD(A0)ƒCloseassignmentcommand*ˆoptionsfilledabove‰MOVE.B„#0,FHSSTA(A0)ˆstatus)‰MOVE.B„#TRGTLUN,FHSLUN(A0)‚Targetdevice‰TRAP†#3“Performchange‰RTS‰PAGEF************************************************************************“SUBROUTINE-CHNGACCP**Changetheaccesspermission*F*********************************************************************** CHNGACCP:**"‰LEA‡FHSPB(A4),A0‰AddressofFHSPB3‰MOVE.W„#FHCHNG,FHSCMD(A0)ƒChangeaccesspermission3‰MOVE.W„D0,FHSOPT(A0)ˆAccesspermissionfoundabove‰MOVE.B„#0,FHSSTA(A0)ˆstatus)‰MOVE.B„#TRGTLUN,FHSLUN(A0)‚Targetdevice)‰MOVE.W„#0,FHSUSN(A0)ˆUserdefaultnumber!‰MOVE.L„D6,FHSVOL(A0)ˆDevicename,‰MOVE.L„#BLANK4,FHSCLG(A0)ƒBlankoutcatalog.‰MOVE.L„#BLANK4,FHSCLG+4(A0)Blankoutcatalog.‰MOVE.L„#BLANK4,FHSFIL(A0)ƒBlankoutfilename0‰MOVE.L„#BLANK4,FHSFIL+4(A0)Blankoutfilename.‰MOVE.W„#BLANK2,FHSEXT(A0)ƒBlankoutextension‰TRAP†#3“Performchange‰RTS‰PAGEF***********************************************************************Ä**’SUBROUTINEŸ**’EMH-ErrorMessageHandler—**Ä*F***********************************************************************<*ˆEMPBLKwasappropriatelyinitializedinCFIGDATAtooutput%*ˆerrormessagestothelogondevice.EMH:%‰MOVE.L„A0,-(A7)ŒSavemyA0onstack.&‰LEA‡EMPBLK(A4),A0‡WhereEMPBLKlives.(‰MOVE.L„D0,(A0)Puterror#intoEMPBLK./‰MOVE.L„(A7),4(A0)ŠPutmysavedA0intoEMPBLK..‰MOVE.L„#2,D0Errormessagehandlerdirective.&‰TRAP†#4’InvokeErrorMessageHandler.‰MOVE.L„(A7)+,A0ŒRestoreA00‰MOVE.B„#STOPSCRN,(A2)†Stopscreenaftermessage‰RTS‰ENDé ééééF***********************************************************************Ä* *œMODSTRCB **Ä**Ä*?*ˆMODSTRCBretrievesavaluefromCBandreturnsittoCONFIG.**Ä**ˆALGORITHM:²*0*’1.‚GettheaddressofCB,theoffsetintoCB…*-*–wherethedesiredvalueisstoredandthe…*)*–sizeofthevaluefromoffthestack.‰*4*’2.‚Gettheaddressofvalueoffthestackandput*+*–valueintotheCBattheproperoffset.‡*$*’3.‚Restorethestackandreturn.‘**Ä* *‚REGISTERS¹*=*„IN…:ƒA3pointstoPascalruntimelibrary;MUSTbepreserved*0*‹:ƒA5pointstoPascalRMA;MUSTbepreserved‹*-*‹:ƒA6pointstoPascallocalvariableareaŽ*:*‹:ƒA7pointstostackwithparametersandreturnaddress**MUSTbepreserved¤**Ä**„DURING:ƒA0pointstoCB¦**A1containsvalueofoffsetš**D0containssizeofoffset›*7*A4pointstomemoryareaforMODSTRCB;preservefor‚**durationofMODSTRCB. *!*„OUT„:ƒA3,A5,A6-sameasINž**A7pointstowayback **Ä*A*‚PARAMETERS:Theaddressesoftheparametersareonthestack…*5*suchthatthefirstparameterisputonthestack„*5*firstandthelastparameterisatthetopofthe„*(*stackjustunderthereturnaddress.‘*(*ThecalltoMODSTRCBwasasfollows:‘*&*MODSTRCB(CB,offset,size,value)“**Ä*F***********************************************************************‰OPT‡A*MODSTRCBIDNT†1,0‰PAGEF************************************************************************•XDEFSƒ&ƒXREFS*F***********************************************************************"‰XDEF†MODSTRCBŒProgramentrypoint**F**********************************************************************‰PAGEF************************************************************************‘THEƒSTACK*F***********************************************************************ˆ____________*„LO‚|returnƒ|‚TOS<--A7 *ˆ|address‚|'*ˆ|----------|ˆ------------------------*ˆ|value„|ˆaddressofvalueœ@¥I­'*ˆ|----------|ˆ------------------------*ˆ|size…|ˆsizeofvalue'*ˆ|----------|ˆ------------------------(*ˆ|offsetƒ|ˆoffsettoputvalueintoCB'*ˆ|----------|ˆ------------------------*ƒHIƒ|CB‡|ˆaddressofCB*ˆ------------*E*--------------------------------------------------------------------**•STACKƒOFFSETS*F*---------------------------------------------------------------------* ‰OFFSET„0*RETADDR‚DS.L†1‰returnaddress'VALADDR‚DS.L†1‰addressofvalueaddressSZVAL„DS.W†1‰sizeofvalue0OFFSTVALDS.L†1‰offsetforputtingvalueintoCBCBADDRƒDS.L†1‰addressofCBSTKLENƒEQU‡*-4*D*‚Thereturnaddressisalwaysplacedonthetopofthestackwhena3*‚assemblyroutineiscalledfromaPascalprogram. *F************************************************************************—EQUATES*F***********************************************************************"BYTE…EQU‡1‰sizeofvalueifabyte"WORD…EQU‡2‰sizeofvalueifaword‰PAGEF************************************************************************‘STARTƒOFƒPROGRAM*F***********************************************************************'‰SECTIONƒ9“ASMroutinesgoinSection9*MODSTRCBEQU‡**5*‚STEP1.‚GetaddressofCBandoffsetoffthestack.**ˆGetaddressofCB.*0‰MOVE.L„CBADDR(A7),A0‡A0<--addrofCBonstack**ˆPutoffsetintoA1.*2‰MOVE.L„OFFSTVAL(A7),A1…A1<--actualoffsetvalue*‰ADD.L…A1,A0GettotargetparameterinCB**ˆPutsizeintoD0.*)‰MOVE.B„SZVAL(A7),D0ˆDO<--valueofsize‰PAGE*E*‚STEP2.‚Getaddressofvalueandmovethevalueintoitsrespective*‹placeintheCB.*3‰MOVE.L„VALADDR(A7),A1†Getaddrvalueoffthestack**ˆMoveCBvalueintovalue.*5‰IF.B#BYTED0THEN.S…Ifvalueisabyteinsize'‹ADD.L‚#3,A1movetolastbyteofvalue:‹MOVE.B(A1),(A0)Œthenmoveonlyabytetoavoidoverwrite ‰ELSE.S˜else5‹IF.B#WORDD0THEN.Sƒifvalueisawordinsize,ADD.L‚#2,A1Žmovetoloworderwordofvalue:MOVE.W(A1),(A0)Šthenmoveonlyawordtoavoidoverwrite ‹ELSE.S–else"MOVE.L(A1),(A0)Šmovealongword‹ENDI‰ENDI‰PAGE**‚STEP3.‚Restorethestack.*GOHOMEƒMOVE.L„(A7),STKLEN(A7)‰ADD.L…#STKLEN,A7‰RTS*‰ENDééééééF************************************************************************’CONFIG.PRINT.SA*F************************************************************************—INCLUDEFILES*F************************************************************************ˆINCLUDEƒ9995.&.IOE.EQ*ˆNOLIST‰NOLIST‰INCLUDEƒ9995.&.IOE.EQ‰LIST*F***********************************************************************Ä* *œPRINT£**Ä*<*‰PRINT(asmmem,parmscrn,pname,CB,numlns,chpln,same,ƒ**msg)°*)*asmem†:addressofassembledataareaŠ*4*parmscrnƒ:addressoftheparametersfordisplay‚**orprintingœ*2*pname†:addressofnameofdeviceforprinting**ordisplayingparameters**CB‰:addressofCBblock”*0 *numlns…:numberoflinestodisplayorprint„*.*numscrncol:numberofcharactersperlineŠ*-*same‡:logondeviceissameasdevicefor…**displayingparameters’*,*msgˆ:addressofenumeratedvariablefor…*"*specificmessagetobeprinted‰**Ä*>*‰PRINTassignstheprinter/terminalonwhichtheparameters*=*‰willbeprinted.Ifthedevicedoesnotexist,orisbusy‚*>*‰oranIOSerrorsoccursthenmsggetstheappropriatevalue*9*‰forputtingoutanerrormessage.‚Iftheerrorisnot…*9*‰onerecognizedbyPRINTthenErrorMessageHandleris†*:*‰calledandmsggets"stopmsg"tohaltthescreenafter…*$*‰thesystemmessageisdisplayed.›**Ä*;*‰Iftheprintingissuccessfulthenthedevicemenuwill„**‰bedisplayed.®**Ä*&*‰1.‚Movesomevaluesoffthestack.˜*;*‰2.‚Ifprint/terminaldeviceisnotsameaslogondeviceƒ*7*doanassignment.ƒSetupanexclusiveassignmentto‚*9*theprint/terminaldevice.‚Ifanerroroccurs,compare*6*D0withseveralerrorcodestoputtheappropriate…*8*enumeratedvalueintomsg.‚Ifthereisnomatchthen‚*3*gotoErrorMessageHandler.‚Returntothemain‡*4*program.‚Ifallgoeswell,doaconfigurestatus†*8*request.‚Usethedevicetypecode,andiftheoutput‚*µ7¾2Æ@Î6Ö?Þ9æAî68*deviceisaterminal,findoutifitisanEXORterm.ƒ*7*D6willreceivethenumberofblanklinestoprint.„*6*InthecaseofanEXORterm,noblanklineswillbe…*7*printed.‚Usethisvaluetodecideifaclearscreenƒ*8*istobeprinted.‚Ifitiszero(anEXORterm),clear‚**thescreen.¬*=*‰3.‚Writetheparameters.Ifthedeviceisthelogondevice*6*oranEXORterm,thensetupthefirstoutputfora…*:*clearscreen,elseserituptoprintsomeblanklines.*5*Printtheparametersmenuusingthestartandend†*6*addressesofthemenuinmainstorage.‚Ifallgoes„**wellgoto5.ª*3*‰4.‚CallErrorMessageHandler,msg<--stopmsg.‹*<*‰5.‚Closeassignmenttotheprinterifprintingdeviceis‚**notlogondevice.¦**‰6.‚Restorethestack.¥**Ä*F**********************************************************************‰PAGEF***********************************************************************Ä**Ä**Ä* *‚REGISTERS¹*-*„IN…:ƒA3pointstoPascalruntimelibrary;‘**’MUSTBEPRESERVED¡**‹:ƒA5pointstoPascalRMAž**’MUSTBEPRESERVED¡*-*‹:ƒA6pointstoPascallocalvariableareaŽ**’MUSTBEPRESERVED¡*:*‹:ƒA7pointstostackwithparametersandreturnaddress**MUSTBEPRESERVED¤**Ä***„DURING:ƒA0pointstoparameterblocks˜*4*A1hasaddressesofvariousbuffersforprinting…*8*A2hasaddressofnameofoutputdevice,thenaddress*3*’ofenumeratedvariable,msg;andtheaddressofƒ**’CB°***A4holdsaddressofassemblydataarea*)*D0isreservedforerrorcodereturns*1*D1hasaddressofthestartofparametermenuˆ*6*D2hasnumberofcharacterson1lineforprintingƒ*6*D3hasnumberoflinesofparametersmenutoprintƒ*)*D4hasvalueofsame;1=true,0=false*)*D5hasnumberofblanklinestoprint*4*D6hasthecodeforthedevicetypeandthenthe…*!*’numberoflinestobeprinted•*!*„OUT„:ƒA3,A5,A6-sameasINž**A7pointstowayback **Ä*F***********************************************************************‰OPT‡A*PRINTIDNT†1,0‰PAGEF*********************************************************************** *•XDEFS*F***********************************************************************‰XDEF†PRINTŒProgramentrypoint*F*********************************************************************** *•XREFS*F***********************************************************************2‰XREF†FHSPB…Offsett oFHSPBinassemblydataarea.2‰XREF†IOSPB…OffsettoIOSPBinassemblydataarea.4‰XREF†EMPBLK„OffsettoEMPBLKinassemblydataarea.*F************************************************************************™EQUATES*F***********************************************************************6*ˆWARNING-WatchforvaluechangestoNONE,NOSUCHDV,7*ˆPRNTBUSYandSTOPSCRNinCONFIG.‚TheseareENUMERATED?*ˆvariablesandiftheirorderisshuffledintheirPascaltype>*ˆdeclarationoranewentryisplacedinfrontofoneofthem8*ˆinthedeclarationinCONFIG,theirVALUEWILLCHANGE.*USERZEROEQU‡0‰Valueforuser0PRNTLUN‚EQU‡3‰LUNforprinter2BLNKLNS‚EQU‡10ˆNumberofblanklinestobeprinted2SAME…EQU‡1‰IfSAMEistrue;printer=logondeviceESCCODE‚EQU‡$1B‡Escapecode&CLRCODE‚EQU‡$58‡ClearscreencharacterCR‡EQU‡$0D‡CarriagereturnLF‡EQU‡$0A‡Linefeed EXORTERMEQU‡0‰CodeforEXORTERM"TERMINALEQU‡3‰CodeforaterminalBLANK2ƒEQU‡$2020…2blanksBLANK4ƒEQU‡$202020204blanks'NONE…EQU‡0‰Valuefornomessagepending)NOSUCHDVEQU‡2‰Valuefornosuchdevinmsg3STOPSCRNEQU‡6‰Valueformsgwhichwillstopscreen1PRNTBUSYEQU‡9‰ValueformsgwhenCBhasbadinfo*/TRGTLUN‚EQU‡2‰TargetdeviceLUNfortrapcalls.*‰PAGEF************************************************************************‘THEƒSTACK*F***********************************************************************ˆ____________*„LO‚|returnƒ|‚TOS<--A7 *ˆ|address‚|'*ˆ|----------|ˆ-------------------------*ˆ|msg†|ˆaddressofenumeratedvariable,msg'*ˆ|----------|ˆ------------------------3*ˆ|same…|ˆprintingdeviceissameaslogonboolean'*ˆ|----------|ˆ------------------------)*ˆ|chpln„|ˆnumberofcharactersperline'*ˆ|----------|ˆ------------------------(*ˆ|numlnsƒ|ˆlengthoflineforprinting'*ˆ|----------|ˆ------------------------'*ˆ|CB‡|ˆaddressofCBparametersblock'*ˆ|----------|ˆ------------------------#*ˆ|pname„|ˆaddressofprintername(*ˆ|----------|ˆ-------------------------+*ˆ|parmscrn|ˆaddressofparametersscreen'*ˆ|----------|ˆ------------------------8*ƒHIƒ|asmmemƒ|ˆaddressofassemblydataareafromPRINT(*ˆ|----------|ˆ-------------------------*E*--------------------------------------------------------------------**•STACKƒOFFSETS*F*---------------------------------------------------------------------* ‰OFFSET„0*RETADDR‚DS.L†1‰returnaddress&MSGADDR‚DS.L†1‰enumeratedvariablemsg3SAMEVAL‚DS.W†1‰booleansame;printer=logondevice*CHPLN„DS.L†1‰numberofcharactersperline'NUMLNSƒDS.W†1‰numberoflinesonscreenCBADDRƒDS.L†1‰addressofCB&PNAMEAD‚DS.L†1‰addressofprintername&SCRNADƒDS.L†1‰parameterstableaddress*ASMMEMADDS.L†1‰assemblydataareaaddressSTKLENƒEQU‡*-4*D*‚Thereturnaddressisalwaysplacedonthetopofthestackwhena3*‚assemblyroutineiscalledfromaPascalprogram.*‰PAGEF************************************************************************—DATAƒAREA*F***********************************************************************9*ˆThedataareawiththeparameterblocksthatwassetup?*ˆinCFIGDATAisused.‚Thedatanamesusedhereareasfollows:*?*ˆFHSPB…parameterblockusedfordeviceassignments-usedhereB*ˆIOSPB…parameterblockusedforconfigure/statuscall-usedhereB*ˆEMPBLK„parameterblockusedbyErrorMessageHandler-usedhere*F*=====================================================================**ˆPARAMETERBLOCKS*F*---------------------------------------------------------------------*D*‚FHSPBisaparameterblockforassigningtheoutputdevicefortheB*‚parametersmenu.‚Thisassignmentisnecessarypriortodoingthe*‚IOScallforprinting.*F*---------------------------------------------------------------------*F*‚IOSPBisaparameterblockforprintingtheparametersmenu.‚ItwillK*‚outputtheparam etersmenuontheterminal/printerselectedbythewuser.*F*---------------------------------------------------------------------*6*‚EMPBLKisusedforthesystemerrormessagehandler.*‰PAGEF************************************************************************‘STARTƒOFƒPROGRAM*F***********************************************************************'‰SECTIONƒ9“ASMroutinesgoinSection9*;*ˆCLRSCRNhasthecodewhichwillclearanEXORTERMscreen.*5CLRSCRN‚DC.B†ESCCODE,CLRCODE…Clearscreencode,no-op*?*ˆCRLFisabuffercontainingacarriagereturnandalinefeed=*ˆforprintingblanklinesatthetopoftheparametersmenu.**CRLF…DC.B†CR,LFCarriagereturn,linefeed* PRINTEQU‡**)*STEP1.‚Movesomevaluesoffthestack.*B*ˆGettheaddressoftheassemblydataareathathastheparameter*ˆblocksforFHS,IOS,etc.*5‰MOVE.L„ASMMEMAD(A7),A4…Addressofassemblydataarea**ˆGetsameoffstack.*(‰MOVE.B„SAMEVAL(A7),D4†Getbooleansame.‰PAGE*G*STEP2.‚Doanexclusiveassignmenttotheprint/displaydeviceifits"*ˆdifferentfromthelogondevice.**‰LEA‡FHSPB(A4),A0ˆGetaddressofparmblk.=‰IF.BD4#SAMETHEN.S…Ifprintingdevice<>logondevice*2*ŠSetupparameterblockforexclusiveassignment.*5‹MOVE.W„#FHASGN,FHSCMD(A0)„Performdeviceassignment.)‹MOVE.W„#FOPEW,FHSOPT(A0)…Exclusivewrite‹MOVE.B„#PRNTLUN,FHSLUN(A0)ƒLUN/‹MOVE.L„PNAMEAD(A7),A2ˆGetaddrofprintername6‹MOVE.L„(A2),FHSVOL(A0)‡Targetnameforconfiguration.2‹MOVE.W„#USERZERO,FHSUSN(A0)‚Zero-->usernumber.2‹MOVE.L„#BLANK4,FHSCLG(A0)„Blankoutcatalogname.<‹MOVE.L„#BLANK4,FHSCLG+4(A0)‚Blankoutrestofcatalogname./‹MOVE.L„#BLANK4,FHSFIL(A0)„Blankoutfilename.9‹MOVE.L„#BLANK4,FHSFIL+4(A0)‚Blankoutrestoffilename./‹MOVE.W„#BLANK2,FHSEXT(A0)„Blankoutextension.‹TRAP†#3”Doassignment.*$‹BEQ.S…DEVATTRGetdeviceattributes*&‹MOVE.L„MSGADDR(A7),A2ˆGetmsgaddress*=‹IF#FSTAVOLD0THEN.S†FHScodefordevicedoesn'texist9MOVE.B‚#NOSUCHDV,(A2)ˆmsg<--nosuchdevforCONFIGmessage‹ELSE.S9IF#FSTAAPD0THEN.S…accesspermissionerror-busy#MOVE.B#PRNTBUSY,(A2)‡printerbusyELSE.S*MOVE.B#STOPSCRN,(A2)‡stopscreenformsg)BSR.LƒEMH‘PutoutsystemmessageandRTSENDIšEnd#FSTAAP‹ENDIšEnd#FSTAVOL‹BRA.L…GOHOMEŽGoback‰ENDIšEndassignment*8*ˆRetrievethedeviceattributesoftheprintingdevice.*8DEVATTR‚LEA‡IOSPB(A4),A0ˆGetIOSPBforconfigstatusreq3‰MOVE.W„#IOSTAT,IOSFCT(A0)‚Configurestatusrequest)‰MOVE.W„#0,IOSOPT(A0)‡Filloptionswith07‰IF.BD4#SAMETHEN.S…logondevice=outputdevice'‹MOVE.B#LDFLUN,IOSLUN(A0)ƒlogondevice ‰ELSE.S˜else)‹MOVE.B#PRNTLUN,IOSLUN(A0)‚outputdevice‰ENDIšendLUNdecision=‰MOVE.L„CBADDR(A7),IOSDBP(A0)Addrofoldconfigurationblock‰TRAP†#2’getdevice'sinfo*,‰BEQ.S…GETDEVTPŒgoodinforeturnedondevice*:‰MOVE.B„#BLNKLNS,D6‰badinforetruned,setD6forblnklns‰BRA.S…GETMSGADŒprepareforIOS**ˆGetdevicetypecode*/GETDEVTPMOVE.L„CBADDR(A7),A2‡GetaddressofCB5‰MOVE.B„IOSDTP(A2),D6‡GetdevicetypecodeoutofCCB:‰IF.B‚D6#TERMINALTHEN.Soutputdeviceisaterminal&‹MOVE.B‚IOSTCD(A2),D6‡kindofterminal+‹IF.BD6#EXORTERMTHEN.SEXORterm=02MOVE.B#BLNKLNS,D6ˆnumberofblanklinestoprint!‹ENDI˜ifEXORterm,then#inD6=0‰ELSE.S˜notaterminal2‹MOVE.B#BLNKLNS,D6Šnumberofblanklinestoprint‰ENDI*.GETMSGADMOVE.L„MSGADDR(A7),A2ˆGetmsgaddress* ‰PAGE*F*STEP3.‚SetupIOSparameterblocktoprintoutsomeblanklinesand*Štheparametersmenu.**ˆGetaddressofIOSPB.*'‰LEA‡IOSPB(A4),A0ˆAddressofparmblock**ˆFillparameterblock.*(‰MOVE.W„#IOWRIT,IOSFCT(A0)‚Writerequest'‰MOVE.W„#IOPWAT,IOSOPT(A0)‚WaitforI/O‰MOVE.W„#0,IOSSTA(A0)‡Status@‰IF.BD4#SAMETHEN.S…Iflogondevicesameasoutputdevice3‹MOVE.B‚#LDFLUN,IOSLUN(A0)‚thenlogondeviceisLUN ‰E LSE.S˜else2‹MOVE.B‚#PRNTLUN,IOSLUN(A0)printingdeviceisLUN ‰ENDIšEndLUN‰MOVE.W„#0,IOSSRV(A0)‡Reserved‰MOVE.L„#0,IOSRRN(A0)‡N/A‰MOVE.L„#0,IOSLEN(A0)‡N/A‰MOVE.L„#0,IOSBLN(A0)‡N/A*$*ˆFindoutifdeviceisanEXORterm.*?‰IF.BD6#EXORTERMTHEN.SƒEXORTERMcode=0,#blnklns<>0$‹BRA.SCLEAR‘Preparetoclearscreen‰ENDI*A*ˆUseaddressofCRLFbuffertoprintblanklinesonnon-EXORTERM*ˆoutputdevice.*'‰LEA‡CRLF(PC),A1‰Addressofblanklines<‰MOVE.L„A1,IOSSAD(A0)‡Startaddressforbuffertobewritten5‰ADD.L…#1,A1Makeendaddressof2bytebuffer(CR,LF)0‰MOVE.L„A1,IOSEAD(A0)‡Loadendofbufferaddress‰BRA.S…PRNTPrintblanklines*2*ˆUseaddressofclearscreentoclearthescreen.*5CLEAR„LEA‡CLRSCRN(PC),A1†Addressofclearscreencode<‰MOVE.L„A1,IOSSAD(A0)‡Startaddressforbuffertobewritten4‰ADD.L…#1,A1Makeendaddressofclearscreenbuffer0‰MOVE.L„A1,IOSEAD(A0)‡Loadendofbufferaddress*PRNT…TRAP†#2’Print1blankline*'‰BNE.S…ERRORTakecareoferrormessage*2‰SUB.B…#1,D6Onelinedone,subtractitfromtotal0‰BPL.S…PRNTPrintanotherblanklineifanyleft*?*ˆGetinfoforstartingaddressandbuildingendingaddressfor+*ˆprintingparametersmenu.‚Printthemenu.*>RDYWRITEMOVE.L„SCRNAD(A7),D1‡Getaddressofstartofparmscrn0‰MOVE.L„CHPLN(A7),D2ˆGetnumberofcharperline%‰SUB.L…#1,D2Adjustforlinedistance3‰MOVE.B„NUMLNS(A7),D3‡Getnumberoflinesonscreen*(WRITE„MOVE.L„D1,IOSSAD(A0)‡Startaddress4‰MOVE.L„D1,IOSEAD(A0)‡Startaddressintoendaddress8‰ADD.L…D2,IOSEAD(A0)‡Startaddr+linelength=endaddr!‰TRAP†#2’Printonelineofscreen*!‰BNE.S…ERRORTakecareofmessage*+‰SUB.B…#1,D3Decrementnumberoflinesby13‰BEQ.S…CLSASGNIfzerolinesleft,closeassignment*¦else8‰MOVE.L„IOSEAD(A0),D1‡Getaddroflastcharjustprinted5‰ADD.L…#1,D1Add1topointtonextcharforprinting,‰BRA.S…WRITEInsertstartaddrintoparmblk‰PAGE*?*‚STEP4.‚Ifanerroroccursthatisnotrecognizedabove,then>*‹msg<--stopscrntostopthescreenforreadingthemessage.*+ERROR„MOVE.L‚MSGADDR(A7),A2ˆGetmsgaddress:‰MOVE.B‚#STOPSCRN,(A2)ˆmsg<--stopscreenforCONFIGmessage‰BSR.SƒEMH“Errormsghandler‰PAGE*@*‚STEP5.‚Closetheassignmentiflogondevice<>outputdevice.*DCLSASGN‚IF.BD4#SAMETHEN.S‡Iflogondevice<>printingdevice‹LEA‡FHSPB(A4),A0ˆgetFHSPB1‹MOVE.W„#FHCLOS,FHSCMD(A0)‚Performclosecommand.‹TRAP†#3’Doclose.*‰ENDIœNoclosedoneiflogon=outputdevice‰PAGE**STEP6.‚Restorethestack.*GOHOMEƒMOVE.L„(A7),STKLEN(A7)‰ADD.L…#STKLEN,A7‰RTS‰PAGEF***********************************************************************Ä**’ErrorMessageHandler**Ä*F***********************************************************************EMH†MOVE.L„A0,-(A7)ŒSaveA0‰LEA‡EMPBLK(A4),A0‡Getparmblk"‰MOVE.L„D0,(A0)PutD0inparmblk6‰MOVE.L„(A7),4(A0)ŠPutsavedaddressofA0inparmblk‰MOVE.L„#2,D0Directive‰TRAP†#4%‰MOVE.L„(A7)+,A0ŒRestoreA0andstack ‰RTS›Return‰END  é' CREF ILIB SA Trr ‰NOLIST‰INCLUDEƒ9995.&.FIO.EQ‰LIST1ILIB†IDNTƒ0,0LIBRARYOFINDEXSEQUENTIALSUPPORT*1*‚Thislibraryconsistsofthefollowingroutines*„I$SET,I$POS,‚I$BEFORE*?*‚ItspurposeittosupportindexsequentialfilesforaPascal *ƒenvornment*+IOPOST„EQU„$101ThepositioncommandtoIOS+FHSIOS„EQU„2’TheabortnumberforPascalRR*+* Hellow does the initial work of a routine** A4 gets the return address=* A1 gets the file parameter(last parameter of the procedure)* A2 gets the file data block* HELLO…MACROŠXDEFƒ\1‘Definetheentrypoint ŠSECTION9)\1ˆMOVE.L(A7)+,A4‹Getthereturnaddress,ŠMOVE.L(A7)+,A1‹Gettheaddressofthefile9ŠMOVE.LFDP(A1),A2‰GettheaddressofthefiledatablockŠENDM** Bye will end a procedure* BYE‡MACRO,ŠJMP„(A4)JumptotheaddressforthereturnŠENDMŠPAGE** PROCEDURE I$SET(VAR F:FILE)*D*‰Setupafileforindexedtype.‚Thiscallprecedesarewritecall.* ŠHELLO‚I$SET8ŠMOVE.W#FOPISD,D0‰Setallocateoptiontoindex/dupkeys5ŠOR.WƒD0,FHS+FHSOPT(A2)‚SetitinthefiledatablockAŠMOVE.L#$00000108,FHS+FHSSIZ(A2)SetFABsize=1,D.B.size=8,ŠBYE—Done(Rewritedoestherestofthework)ŠPAGE*** PROCEDURE I$POS(RECORD:LONG;VAR F:FILE);*<*‰Movethefiletothepositionindcatedbyrecord.‚ThenextB*‰Writetothisfilewillwritearecordaftertheonepositioned.*ŠHELLO‚I$POSŽEnterprocedure.ŠMOVE.L(A7)+,IOS+IOSRRN(A2)Setrecordnumber2ŠMOVE.W#IOPRAN,IOS+IOSOPT(A2)Setpositionoption(ŠLEA„IOS(A2),A0‰GetaddressofIOSblock%ŠMOVE.W#IOPOST,(A0)‡Command=PositionŠTRAPƒ#2‘Docommand ŠIFTHEN.SŒIfnoerrorthen9ŠMOVE.W#0,IOSOPT(A0)†settheoptiontowritenextrecordŠBYE—andexittheprocedureŠELSE.S!ŠTRAPƒ#ABORTAbortwithIOSerror ŠDC.WƒFHSIOSŠENDIŠPAGE*-* PROCEDURE I$BEFORE(RECORD:LONG;VAR F:FILE);*<*‰Movethefiletothepositionindcatedbyrecord.‚ThenextC*‰Writetothisfilewillwritearecordbeforetheonepositioned.*úGŠHELLO‚I$BEFORE‹Enterprocedure.ŠMOVE.L(A7)+,IOS+IOSRRN(A2)Setrecordnumber2ŠMOVE.W#IOPRAN,IOS+IOSOPT(A2)Setpositionoption(ŠLEA„IOS(A2),A0‰GetaddressofIOSblock%ŠMOVE.W#IOPOST,(A0)‡Command=PositionŠTRAPƒ#2‘Docommand ŠIFTHEN.SŒIfnoerrorthen>ŠMOVE.W#IOPPRV,IOSOPT(A0)SettheoptiontowriteprevrecordŠBYE—andexittheprocedureŠELSE.S!ŠTRAPƒ#ABORTAbortwithIOSerror ŠDC.WƒFHSIOSŠENDIŠENDééé ééé' HDS200 CFHDS200AFrrCFHDS200LF  rrCFHDS200SA)) krrGETSREC AF::rrGETSREC LFCCrrGETSREC SALL@rrSENDSRECAF]]rrSENDSRECLFffrrSENDSRECSAoo _rrSETFCB SA€€0rrSCAN SA‰‰rrVERIFY SA’’&rr=/*=/*†HDS200.CFHDS200.AF=/*F=/* Chain file to assemble HDS200.CFHDS200.LO utility which is used toB=/* configure the VME/10 serial port #CN01 for use by the HDS-200.=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to HDS200.CFHDS200.LS=/*=/IFC \1ƒ=ARGHDS200.CFHDS200.LS=/ENDIF=/*3=ASM HDS200.CFHDS200.SA,HDS200.CFHDS200.RO,\1;RZ=90=/*{ Included files are:=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.IOE.EQ=/*ƒ9995.&.CRASH.MC=/*}=/*=ENDéééééé =/*=/*†HDS200.CFHDS200.LF=/*K=/* Link chain file to create HDS200.CFHDS200.LO which is used to configure8=/* the VME/10 serial port #CN01 for use by the HDS-200.=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to HDS200.CFHDS200.LL=/*=/IFC \1ƒ=ARGHDS200.CFHDS200.LL=/ENDIF=/*#=LINK ,HDS200.CFHDS200.LO,\1;HAMIXS ATTRIBUTES PSINPUT HDS200.CFHDS200.ROEND=/*=ENDéééééé0CFHDS200IDNT†0,0‡ConfigureforHDS-200“07/27/83O********************************************************************************=*‰CFHDS200--PROGRAMTOCONFIGUREA7201SERIALPORTFORUSE*‰WITHTHEHDS-200*O*******************************************************************************   *‰INCLUDE9995.&.TR1.EQ*‰INCLUDE9995.&.IOE.EQ*‰INCLUDE9995.&.CRASH.MCŠNOLISTŠINCLUDE9995.&.TR1.EQŠINCLUDE9995.&.IOE.EQŠINCLUDE9995.&.CRASH.MCŠLIST ‰TTL‡CFHDS200‰PAGE .HDS_LUNƒEQU„1’LUNtousefortheHDS-200port.?HDS_DEVICEEQUƒ'CN01'DevicenameofportconnectedtoHDS-200. *>*‚ATTRIBUTESMASKandATTRIBUTESWORDtouseinconfiguration:!*„DisableTypeAhead=0„(Enable)*„DisableLocalEcho=1*„UseXOFF&XONto*†controltheflow*†ofincomingdata=1*-ATT_MASK‚EQU„1<‚DUcommand(withoutcarriagereturn),theuserreturnstotheB‚chainfile,whichinvokesGETSRECtocompletethecommandlinebyC‚sendingacarriagereturntotheHDS200,thenreadss-recordsfromA‚theHDS200,copyingthemtothediskfilespecifiedinthechainB‚filecommandline,untilans-recordwith'S9'inpositions1and>‚2iscopied.‚ThechainfilecommandspecifiestheserialportG‚numberandthenameofthediskfilewhichwillreceivethes-records. “GETSREC#CNxx,file_name} TYPE‰str“=‚string[514]; VAR‰s_record,s_rec_out„:‚str;‰ser_port,s_rec_fileƒ:‚text;‰counter,i,j,nchars„:‚integer;‰null_linesŒ:‚integer; {$F=HDS200.SCAN.SA} /procedure setfcb (VAR file_name:text); forward; begin {GETSREC} 9{‚openthes-recordfileandtheserialportforoutputŒ}  4‚setfcb‚(ser_port);’{fixPASCALfilecontrolblock})‚rewrite(ser_port);’{openserialportŒ}6‚rewrite(s_rec_file);{opendiskfileofs-records},‚counter:=0;˜{initializerecordcounterƒ}1‚null_lines:=0;•{count#nulllinesreceived} D{‚sendacarriagereturntotheserialporttoterminatethecommand2‡typedbytheuserandbeginreceivings-records} ‚writeƒ(ser_port,chr(13));1‚resetƒ(ser_port);’{openserialportforinput‚} >{‚copys-recordsfromtheserialporttothediskfileuntilaŽterminationrecordisread} repeat„j:=0;1„readln‚(ser_port,s_record);Œ{readans-recordŒ}6„scan„(s_record,nchars);Ž{removenon-printingcharsƒ}„ifnchars>0then;†if(copy(s_record,1,1)<>'S')thenƒ{ifnotanS-recordŠ},Œwriteln(s_record)Ž{displayaserrormsgˆ}†elseŒbegin'Œs_rec_out:=copy(s_record,1,nchars); Œwriteln(s_rec_file,s_rec_out);Œcounter:=counter+1Œend…elseŠnull_lines:=null_lines+1;D>M"until copy (s_rec_out,1,2) = 'S9';+writeln (counter:5,' records transferred');end.ééééééé=/*=/*†HDS200.SENDSREC.AF=/*J=/* Chain file to assemble HDS200.SETFCB.SA and compile HDS200.SENDSREC.SAH=/* HDS200.SENDSREC.LO is used to send S-records to the HDS-200 by means$=/* of the VME/10 serial port #CN01.=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to HDS200.SENDSREC.LS=/*=/IFC \1ƒ=ARGHDS200.SENDSREC.LS=/ENDIF=/*+=ASM HDS200.SETFCB.SA,HDS200.SETFCB.RO,\1;R=/*{ Included files are:=/*ƒ--none--=/*}=/*=PASCAL HDS200.SENDSREC.SA=/*{ Included files are:=/*ƒ--none--=/*}=PASCAL2 HDS200.SENDSREC.PC=/*=END éééééU=/*=/*†HDS200.SENDSREC.LF=/*L=/* Link chain file to create HDS200.SENDSREC.LO which sends S-records to an:=/* HDS-200 by means of the serial port #CN01 on a VME/10.=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to HDS200.SENDSREC.LL=/*=/IFC \1ƒ=ARGHDS200.SENDSREC.LL=/ENDIF=/*"=LINK ,HDS200.SENDSREC.LO,\1;HAMIX ATTRIBUTES SINPUT HDS200.SENDSREC.ROINPUT HDS200.SETFCB.ROEND=/*=ENDéééééé^4program SENDSREC (input,output,s_rec_file,ser_port);{=‚SENDSRECprovidesamethodofdownloadings-recordsfromthe=‚VME/10totheHDS200.‚Afterentering'transparentmode',the>‚userenterstheLOcommandandreturnstothechainfile.‚The?‚cha infileinvokesSENDSRECwiththenameofthes-recordfile>‚whichistobetransferredtotheHDS200,andtheserialport?‚towhichtherecordswillbesent.‚Aseachrecordissent,the?‚HDS200echostherecord,orsendsanerrormessage.‚Ifanecho8‚isreceivedwhichdoesnotmatchtherecordsent,itis:‚displayedonthestandardoutputdevice.‚Otherwise,itis<‚ignored.‚TheHDS200mustusetheechomodeoftransmission. “SENDSRECs_rec_file,ser_port} TYPE‰str“=‚string[514];&‰hex_charŽ=‚array[1..16]ofstring[1];VAR‰s_record,echo‰:‚str;‰ser_port,s_rec_fileƒ:‚text;‰counter,ncharsˆ:‚integer;‰hex_digitsŒ:‚hex_char;‰loopc‘:‚integer;‰garbage:‚text; ‰cr”:‚char; {$F=HDS200.VERIFY.SA}{$F=HDS200.SCAN.SA} procedure write_with_echo;begin4‚rewrite(ser_port);’{openserialportforoutput}>‚writeln(ser_port,s_record,cr);†{copys-rectoserialportƒ}1‚resetƒ(ser_port);’{openserialportforinput‚}2‚readln‚(ser_port,echo);{readfromserialport‡}2‚scan„(echo,nchars);{removenon-printingcharsƒ}end; {write_with_echo} /procedure setfcb (VAR file_name:text); forward; begin {SENDSREC} 3hex_digits[1]:='0';’{initializearrayofvalidƒ}(hex_digits[2]:='1';’{ƒhexcharactersŒ}hex_digits[3] := '2';hex_digits[4] := '3';hex_digits[5] := '4';hex_digits[6] := '5';hex_digits[7] := '6';hex_digits[8] := '7';hex_digits[9] := '8';hex_digits[10]:= '9';hex_digits[11]:= 'A';hex_digits[12]:= 'B';hex_digits[13]:= 'C';hex_digits[14]:= 'D';hex_digits[15]:= 'E';hex_digits[16]:= 'F';cr := chr(13); 4setfcb(ser_port);{fixPASCALfileparameterblock}3reset(s_rec_file);‹{opens-recordfileforinput})counter:=0;‘{initializerecordcount…}gAps_record:='‚'; <{‚copys-recordsfromthediskfiletotheserialportuntil0ƒaneofisencounteredoranS9recordissent•} 7while(noteof(s_rec_file)andˆ{notendoffileand‰}7‡(copy(s_record,1,2)<>'S9'))do{notaterminatorŠ}‚begin3„readln(s_rec_file,s_record);†{readans-recordŒ}3„writeln(s_record);‘{displayitonuserterminal}/„write_with_echo;“{sendtoser_portandreadƒ}{D‚ifcharacters1and2oftheechodon'tmatchthes_recordthatwasA‚sentincharacters1and2,andtheechodoesn'tappeartobeanA‚s-record,thendisplaywhatwasreceivedasanerrormessageand!‚trytoreceivetheechoagain.¤} 1„while((copy(echo,1,2)<>copy(s_record,1,2))ornotverify(echo))ƒdo†beginˆif(nchars>0)then&Šwriteln(echo);Ž{displayitonCRT‹}1ˆreadln‚(ser_port,echo);‡{getanothers-recordˆ}1ˆscan„(echo,nchars)Š{removenon-printingcharsƒ}"†end;{whileechodoesn'tmatch„}4„counter:=counter+1{incrementrecordcounter„}‚end;¡{whilenoteof(sfile)‡} *writeln (counter:5,' records transferred')end. ééé SETFCBƒIDNT†0,0¥07/29/83*!‰TTL‡SETIMAGEMODEINPASCALFCB*=*‚AssemblylanguageroutinetomodifytheIOSparameterblock;*‚associatedwithaPASCALFileParameterBlocksothatthe<*‚outputwillnotechoacarriagereturn/linefeedcharacter9*‚witheachline.‚(Settheimagemodebitinthefunction/*‚word.)‚PassthefilenameasaVARparameter.**ˆCallingsequence:*!*ˆVAR„serial_port‰:‰fileoftext;*1*ˆPROCEDURESETFCB(VARfile_name:text);FORWARD;**ˆsetfcb(serial_port);* ‰XDEF†SETFCB*.*‚OffsetsintothePASCALFileParameterBlock*&*ˆ+0ˆComponentPointer(fileposition)(*ˆ+4ˆPASCALfilestatus/componentsize*ˆ+8ˆIOSParameterBlock*œ.*œ.*œ.*ˆ+36‡FHSParameterBlock*œ.*œ.*œ.0*ˆ+76‡Reserved/IFDScanStatus/FileListPointer*ˆ+80‡RecordBuffer*‰PAGE(FUNCTIONEQU‡11’IOSFunctionByteoffset*‰SECTIONƒ9“PASCALrequirement* SETFCBƒEQU‡**)‰MOVE.L„(A7)+,A4ŒReturnaddressinregA4)‰MOVE.L„(A7)+,A2ŒParameter=FilePointer-‰MOVE.L„4(A2),A1ŒFileParameterBlockaddress0‰ORI.B…#08,FUNCTION(A1)„UpdateIOSFunctionCode‰JMP‡(A4)Returntocaller*‰ENDéééx19{‚PROCEDURESCANremovesnon-printingcharactersfromthe5ƒinputstringandreturnsthelengthoftheresulting5ƒstringasparametertwo.‚Characterslowerthanspace5ƒintheASCIIsequenceareconsiderednon-printing.†} -procedure SCAN (VAR rec:str; VAR jx:integer); VAR†ixˆ:‰integer; begin„{SCAN}$‚jx:=0;{initdestinationindex†}‚forix:=1tolength(rec)do6„if(copy(rec,ix,1)>='')then…{ifvalidcharacter}†begin)ˆjx:=jx+1;’{bumpdestinationindex†}1ˆifjx<>ixthen{ifsourcenoteqdestination}Šbegin˜{movecharacterleft‰}&Šrec:=insert(copy(rec,ix,1),rec,jx);8Šrec:=delete(rec,jx+1,1)„{deletereplacedcharacterƒ}Šend†end;;‚ifjx<>length(rec)then‹{hasstringlengthchanged?}8„rec:=delete(rec,jx+1,length(rec)-jx)ˆ{deletegarbage…} end;…{SCAN}ééé é(function verify (VAR list:str): boolean;{C‚verifythatallcharactersintheinputstringbeforethecarriage>‚returnconsistofasciiencodedhexdigitswheneverthefirst%‚characterinthestringisan'S'.¡} VAR‰i,j“:‚integer;‰result:‚boolean;begin%‚result:=TRUE;–{initreturncode}(‚i:=2;ž{startwithsecondcharacter‚}=‚ifcopy(list,1,1)='S'then‰{ifinputstringans-record‚}„beginD„while((copy(list,i,1)<>chr(13)){whilecharnotacarr-return}3and‚(i<=length(list)){‚andindexinlimitand„}0andresult)do‰{allpriorcharsarehexdigs}†beginˆj:=1;ˆrepeat*Šif(copy(list,i,1)=hex_digits[j])then/Œresult:=TRUE{characterisvalidASCIIhex}Šelse+Œresult:=FALSE;Ž{notavalidcharacter„} Šj:=j+1ˆuntil((result)or(j>16));ˆif(notresult)thenŠbegin4Œlist:=insert('\',list,i);ƒ{replacewitha'\'…}Œlist:=delete(list,i+1,1)Šend;(ˆi:=i+1”{‚nextcharacterinstringƒ}†end;„end‚else„result:=FALSE;verify := resultend;…{functionverify} éééŠ'' PATCH CODE68M SAŸŸ°ƒrrDCODE68MSAXXŒrrMBSR SAéé#hrr)‰TTL‡ONELINEASSEMBLER‚68000/68008/68010<********INCLUDEƒCRIGHT.SA‹BringintheCopyrightnotice†JAH>CODE68M‚IDNT†3,2‡ONELINEASSEMBLER68000/68008/68010„12/18/84 ‰OPT‡A±3,2 ‰XDEF†CODE68K‰XDEF†CODE68M.3,0‰XDEF†ERˆUSEDBYMBSR ‰XREF† PNT2HX,FRELADDR‰XREF†GETDECNUŒ.1,2 * WITHOUT LABEL FIELD5* 012345678901234567890123456789012345678901234567890,*AAAAAADDDDDDDDDDDDDDDDDDDDOPCODE‚OPERAND*ˆFDATAFOC…FOP 5* 0123456789012345678901234567890123456789012345678905*AAAAAADDDDDDDDDDDDDDDDDDDDLLLLLLLLOPCODE‚OPERAND*ˆFDATAFOL†FOC…FOP * D3 = PROCESSOR TYPE*„=0000„68000*„=0004„68008*„=0008„68010*„=000C„68020‚FUTURE** A3 = STORE POINTER* A4 = PROGRAM COUNTER* A5 = SOURCE PTR BEGINNING* A6 = SOURCE PTR END+1* *„BSRƒCODE68M SPC 3OUTBSIZEEQU‡80ˆBUFFERSIZEFDATA„EQU‡10ˆOFFSETTODATAFOL†EQU‡31ˆOFFSETTOLABEL-FOC†EQU‡31ˆOFFSETTOOP-CODE(NOLABELFIELD)-FOP†EQU‡39ˆOFFSETTOOPERAND(NOLABELFIELD) ‰OFFSET„0 ESKB…DSˆ0 TDATA„DS.B†10 TNB†DS.B†1 TLSPECƒDS.B†1TLENGTH‚DS.W†1PCOUNTERDS.L†1PTROP„DS.L†1“POINTERTOOPERAND$PENDOPƒDS.L†1“POINTERENDOFOPERAND0PTRBUFE‚DS.L†1“POINTERTOENDOFFORMATEDSOURCE PRTYPEƒDS.W†1“PROCESSORTYPE3,0LINK…DS.L†1“SAVEFORUNLINK ESKE…DS.B†0 ‰SECTIONƒ11 XBASE„DSˆ0 PAGE* EVALUATE EXPRESSION!*‚NUMBERPLUSORMINUSNUMBER....*EV‡DSˆ0‰MOVE.L„D7,-(A7)ŒSAVED7 ‰CLR.L…D7"GETEXP21BSR.S…GETFIELDŒGETNUMBER$‰ADD.L…D0,D7D7=NUMBERBEINGBUILT.GETEXP15MOVE.B„(A5)+,D1ŒD1=TERMINATINGCHAR(‰CLR.L…D0’D0=NEXTNUMBER(=01STTIME)‰CMP.B…#'+',D1‰BEQ‡GETEXP21ŒPLUS‰CMP.B…#'-',D1‰BNE.S…GETEXP39ŒNOTMINUS‰BSR.S…GETFIELDŒGETNEXTNUMBER ‰SUB.L…D0,D7 ‰BRA‡GETEXP15 SPC 1&GETEXP39MOVE.L„D7,D0D0=VALUEBUILT'‰SUB.L…#1,A5A5=CHARAFTEREXPRESSION‰MOVE.L„(A7)+,D7ŒRESTORED7‰RTS PAGE GETFIELDDSˆ0‰CMP.B…#'*',(A5)‰BNE.S…GETF305 "‰MOVE.L„D4,D0D0=PROGRAMCOUNTER ‰ADD.L…#1,A5‰BRA.S…GETF333 GETF305‚CMP.B…#$27,(A5) —X R¨W°|¸sÀ_ÈSÐEØGàPèSðaø‚wtos g(m0`8Z@oH‰BNE.S…GETF325NOTLITERAL ‰ADD.L…#1,A5 ‰CLR.L…D0 ‰MOVE.W„TLENGTH(A1),D1†D1=SIZE‰BEQ.S…GETF308.B=0‰LSR.W…#5,D1.W=1‰SUB.L…#1,D1.L=3GETF308 GETF311‚LSL.L…#8,D0‰MOVE.B„(A5)+,D0‰CMP.B…#$27,(A5)‰BEQ.S…GETF312CLOSINGQUOTE‰DBF‡D1,GETF311ER1†BRA‡ER’OVERFLOW–1,2 +GETF312‚ADD.L…#1,A5MOVEPASTCLOSINGQUOTE‰BRA.S…GETF314 GETF313‚LSL.L…#8,D0%GETF314‚DBF‡D1,GETF313ŠLEFTNORNALIZE‰BRA.S…GETF333 +GETF325‚BSR‡GETDECNUŒGETDECIMALNUMBERŒ1,2‰BNE‡ER1‘MESSEDUPNUMBERŽ1,2 GETF333‚RTS * FIND AND SET SIZE* BIT 5432109876543210*…........00......‚=BYTE*…........01......‚=WORD*…........10......‚=LONG*'FSIZE„OR.W†TLENGTH(A1),D2ŠSETSIZEBITS‰RTS PAGE*‚D0=VALUE0-7*‚D1=0IFD@ *…=8IFA@*GETREGD‚CLR.L…D1&‰CMP.B…#'D',(A5)‹ISFIRSTCHAR='D'?)‰BNE.S…NOTREGŽNO,NOTA'D'-TYPEREGISTERGET41„CLR.L…D0’YES$‰MOVE.B„1(A5),D0ŒGETREGISTERNUMBER‰SUB.B…#'0',D0LESSTHAN0?!‰BMI.S…NOTREGŽYES,NOTAREGISTER"‰CMP.B…#$7,D0ŽNO,GREATERTHAN7?!‰BGT.S…NOTREGŽYES,NOTAREGISTER)‰ADD.L…#2,A5NO,SETA5TODELIMETERCHAR)‰LEA‡GETNDATA(PC),A0…GETVALIDDELIMETERS.GETDELIMTST.B…(A0)ATENDOFDELIMETERS?ˆ3,0(‰BEQ.S…NOTREGSYES,NOTAVALIDREGISTER‰CMP.B…(A5)+,(A0)+‰BEQ.S…HAVEITŽHAVEDELIMETER"‰SUB.L…#1,A5RESETA5TODELIMETER‰BNE‡GETDELIMŒKEEPLOOKING (HAVEITƒSUB.L…#1,A5RESETA5TODELIMETER)‰MOVE†#4,CCRŽSETREGISTERFOUNDCONDITION‰RTS 1NOTREGS‚SUB.L…#2,A5RESETA5TOSTARTOFREGISTER‰BRA.S…NOTREGŽSIGNALNOTFOUNDGETNDATADC.B†',).-/',0Š.3,0 #GETREGA‚MOVE.L„#8,D1SETFORA@”3,0&‰CMP.B…#'A',(A5)‹ISFIRSTCHAR='A'?*‰BNE.S…NOTREGŽNO,NOTAN'A'-TYPEREGISTER‰BRA‡GET41YES GETREGADCLR.L…D1’SETFORD@&‰CMP.B…#'D',(A5)‹ISFIRSTCHAR='D'?(‰BEQ‡GET41YES,MAYBE'D'-TYPEREGISTER ‰MOVE.L„#8,D1NO,SETFORA@3,0&‰CMP.B…#'A',(A5)‹ISFIRSTCHAR='A'?(‰BEQ‡GET41YES,MAYBE'A'-TYPEREGISTER5NOTREGƒMOVE†#0,CCRŽNO,RESETREGISTERFOUNDCONDITION‰RTS  SPC 2/GETREGSRMOVEQ…#2,D0SETD0FOR2CHARREGISTER‰CMP.B…#'S',(A5)‹'SR'?‰BNE.S…NOTREGŽNO‰CMP.B…#'R',1(A5)‰BNE.S…NOTREGŽNO.TERM…CMP.B…#',',(A5,D0)ˆYES,DELIMETER=','?‰BEQ.S…ISREGYES)‰CMP.B…#'',(A5,D0)ˆNO,DELIMETER=''?‰BNE.S…NOTREGŽNO,ISREG„ADD.L…D0,A5YES,MOVEA5PASTREGISTER!‰CLR.L…D5’SETREGISTERFOUNDFLAG‰RTS GETREGUSCMP.B…#'U',(A5)‹'USP'?‰BNE.S…NOTREGŽNOTESTSPƒCMP.B…#'S',1(A5)‰BNE.S…NOTREGŽNO‰CMP.B…#'P',2(A5)‰BNE.S…NOTREGŽNO1MOVE3„MOVEQ…#3,D0YES,SETD0FOR3CHARREGISTER‰BRA.S…TERMFINDDELIMCHAR GETREGSSCMP.B…#'S',(A5)‹'SSP'?‰BNE.S…NOTREGŽNO‰BRA.S…TESTSPŽMAYBE GETREGCRCMP.B…#'C',(A5)‹'CCR'?‰BNE.S…NOTREGŽNO‰CMP.B…#'C',1(A5)‰BNE.S…NOTREGŽNO‰CMP.B…#'R',2(A5)‰BNE.S…NOTREGŽNO,‰BRA.S…MOVE3YES,SETD0ANDFINDDELIMCHAR PAGE(EADA…MOVE.W„#$1FD,D7ŒDATAALTERABLEONLY ‰BRA.S…EA SPC 1 EAC†MOVE.W„#$7E4,D7ŒCONTROLONLY ‰BRA.S…EA SPC 1)EAM†MOVE.W„#$1FC,D7ŒMEMORYALTERABLEONLY ‰BRA.S…EA SPC 1"EAZ†MOVE.W„#$800,D7ŒIMMEDIATEONLY ‰BRA.S…EA 'EADADDR‚MOVE.W„#$FFD,D7‚DATAADDRESSING ‰BRA.S…EA (EAA†MOVE.W„#$1FF,D7ŒALTERABLEADDRESSING ‰BRA.S…EA EAALL„MOVE.W„#$FFF,D7‚ALLMODES SPC 4#*‚...............1‚D@DATAREGISTER*‚..............1.‚A@*‚.............1..‚(A@)*‚............1...‚-(A@)*‚...........1....‚(A@)+*‚..........1.....‚DATA(A@)*‚.........1......‚DATA(A@,R@)*‚........1.......‚DATA‚(SHORT)*‚.......1........‚DATA‚(LONG)*‚......1.........‚DATA(PC)*‚.....1..........‚DATA(PC,R@)*‚....1...........‚#DATA%*‚1...............‚SPECIALCASEJMP.L PAGE* D0 = VALUE CALCULATED** D2 = MASK WORD (1ST WORD OF INSTRUCTION)'* D3 = OFFSET FOR DATA STORE (TDATA+..)* D4 = EXTENSION WORD * D5 = $*D6=MODEASBUILTƒ.........XXXXXX* D7 = MODES ALLOWED*4* A4 = BASE ADDRESS FOR DATA STORE (TDATA+..)[A4,D3]EA‡DSˆ0‰CLR.L…D5’ZEROVALUE‰CLR.L…D6’MODE=000000‰MOVE.B„(A5),D0‰CMP.B…#'#',D0 ‰BNE.S…EA10 * IMMEDIATE MODE ‰BTST†#11,D7‰BEQ.S…ER5‘.3,0 ‰MOVE.B„#$3C,D6D6=MODE‚111100 ‰ADD.L…#1,A5 ‰BSR‡EV’EVALUATEEXPRESSION‰MOVE.L„D0,D5D5=VALUE ‰TST.B…TLSPEC(A1)Š.1,3.‰BEQ.S…EA0633Ž.SIZENOTSPECIFIED(.WASSUMED) ‰MOVE.W„TLENGTH(A1),D0‰BEQ.S…EA0635Ž.BYTE ‰TST.B…D0‰BMI.S…EA0637Ž.LONG %EA0633ƒBSR‡EA16BIT.WORD…-32KTO+64KEA0634ƒMOVE.W„D5,(A4,D3)‰ADD.B…#2,TNB(A1)ŠBYTECOUNT‰ADD.L…#2,D3OFFSET‰RTS EA0635ƒBSR‡EA8BITŽ-127TO+255 ‰BEQ‡EA0634ER5†BRA‡ER’.3,0 EA0637ƒMOVE.L„D5,(A4,D3)‰ADD.B…#4,TNB(A1) ‰ADD.L…#4,D3‰RTS PAGE EA10…DSˆ0‰CMP.B…#'-',(A5) ‰BNE.S…EA11 ‰CMP.B…#'(',1(A5)‰BNE‡EA41MAYBE"- ‰ADD.L…#2,A5)‰MOVE.L„#$0020,D6‹MODE=-(A@)„100AAAˆ3,0 ‰BTST†#4,D7"‰BEQ‡ER5‘THISMODENOTALLOWED‰1,2 ‰BSR‡GETREGA‰BNE‡ER5‘.3,0 ‰OR.W†D0,D6 ‰CMP.B…#')',(A5)+‰BNE.S…ER5‘NOCLOSINGPARINŽ1,2‰RTS EA11…BSR‡GETREGA.3,0 ‰BNE.S…EA21 !‰MOVE.L„#$08,D6MODE=001...‘3,0 ‰BTST†#1,D7‰BEQ.S…ER5‘MODENOTALLOWEDŽ1,2 ‰OR.W†D0,D6‰RTS EA21…BSR‡GETREGD.3,0 ‰BNE.S…EA31 ‰BTST†#0,D7‰BEQ.S…ER5‘MODENOTALLOWEDŽ1,2 ‰OR.W†D0,D6MODE=D@ƒ000AAA‰RTS PAGEEA31…CMP.B…#'(',D0 ‰BNE.S…EA41 * POSSIBLE*‚(A@)*‚(A@)+#*‚(A@,R@)‚IMPLIEDZERODISPLACEMENT* ‰ADD.L…#1,A5 ‰BSR‡GETREGA‰BNE.S…ER3‘.3,0 ‰OR.W†D0,D6 ‰MOVE.B„(A5)+,D0‰CMP.B…#',',D0/‰BEQ‡EA5116ŽMODE=(A@,R@)‚;IMPLIEDD5=0DATA !‰CMP.B…#')',D0LOOKFORCLOSING)‰BNE.S…ER3‘.1,2 ‰CMP.B…#'',(A5)‹LOOKFORBLANK‰BEQ.S…EA35MODE=(A@) ‰CMP.B…#'+',(A5) ‰BNE.S…EA35 ‰ADD.L…#1,A5 !‰OR.W†#$18,D6ƒMODE=011...„(A@)+ ‰BTST†#3,D7‰BEQ.S…ER3‘MODENOTALLOWEDŽ1,2 ‰RTS›.3,0 $EA35…OR.W†#$10,D6MODE=010...ƒ(A@) ‰BTST†#2,D7‰BEQ.S…ER3‘MODENOTALLOWEDŽ3,0 ‰RTS›.3,0 PAGE * POSSIBLE*ƒƒSHORT *ƒƒLONG *ƒ(A@)*ƒ(A@,R@)*ƒ(A@,R@.W)*ƒ(A@,R@.L) *ƒ(PC)*ƒ(PC,R@)*ƒ(PC,R@.W)*ƒ(PC,R@.L)* EA41…BSR‡EV’EVALUATEEXPRESSION‰MOVE.L„D0,D5D5= ‰MOVE.B„(A5),D0‰CMP.B…#',',D0 ‰BEQ.S…EA4102‰CMP.B…#'',D0 ‰BNE.S…EA4120 *‚‰ONLY* CHECK IF NEGATIVE NUMBEREA4102ƒMOVE.L„D5,D0‰BPL.S…EA4105ŽPOSITIVENUMBER‰NOT.L…D0’.1,3EA4105ƒAND.W…#$8000,D0‹.1,3 ‰TST.L…D0‰BNE.S…EA4135Ž.LONG *‚.W ‰BTST†#7,D7‰BNE.S…EA4127ŽSHORTALLOWED‘1,1‰BTST†#15,D7Ž.1,1&‰BNE.S…EA4135ŽSPECIALCASE(JMP.L)Š3,0ER3†BRA‡ER’.3,0 +EA4127ƒOR.W†#$38,D6EA=ABSOULTESHORT‹1,1‰MOVE.W„D5,(A4,D3)ŠD5=DATA‰ADD.B…#2,TNB(A1)ŠBYTECOUNT ‰ADD.L…#2,D3‰RTS *EA4134ƒCMP.B…#'L',D0*ˆBNE‡ER3‘.1,2 *‚.L&EA4135ƒOR.W†#$39,D6EA=ABSOLUTELONG‰MOVE.L„D5,(A4,D3)‰ADD.B…#4,TNB(A1)ŠBYTECOUNT ‰ADD.L…#4,D3 ‰BTST†#8,D7‰BEQ‡ER3‘MODENOTALLOWEDŽ1,2‰RTS EA4120ƒADD.L…#1,A5.1,3‰CMP.B…#'(',D0.1,3‰BNE‡ER3‘.1,2 ‰CMP.B…#'P',(A5) ‰BEQ‡EA61 * (A@.......‰BSR‡EA16BITSŒ-32KTO+32K ‰BSR‡GETREGA‰BNE‡ER3‘.3,0 ‰OR.W†D0,D6 ‰MOVE.B„(A5),D0‰CMP.B…#')',D0 ‰BNE.S…EA5115 * (A@) ‰ADD.L…#1,A5 ‰BTST†#5,D7‰BEQ‡ER3‘MODENOTALLOWEDŽ1,2 ‰OR.W†#$0028,D6‹MODE=101AAA ‰CMP.L…#$10000,D5‰BPL‡ER3‘ERœ1,2 ‰MOVE.W„D5,(A4,D3)‰ADD.B…#2,TNB(A1) ‰ADD.L…#2,D3‰RTS PAGEEA5115ƒBSR‡COMMA -*‚(A@,-----„ADDRESSREGISTERWITHINDEXEA5116ƒEXT.L…D5‰BSR‡EA8BITS-128TO+127‰BNE.S…ER4‘.1,2‰AND.W…#$00FF,D5‰OR.W†#$0030,D6‹MODE‚110--- ‰BTST†#6,D7‰BEQ.S…ER4‘MODENOTALLOWEDŽ1,2 ‰BSR‡GETREGAD‰BNE.S…ER4‘.3,0 ‰OR.W†D1,D0 ‰ROR.W…#4,D0‰OR.W†D0,D5EXTENSIONWORD * BIT 11 EXTENSION WORD8*ƒ0=SIGNEXTENDED,LOWORDERINTEGERININDEXREGISTER,*ƒ1=LONGVALUEININDEXREGISTER‚(DEFAULT)*‰MOVE.B„(A5)+,D0‰CMP.B…#')',D0‰BEQ.S…EA5119ŽDEFAULTƒ.W ‰CMP.B…#'.',D0‰BNE.S…ER4‘.1,2 ‰MOVE.B„(A5)+,D0‰CMP.B…#'W',D0 ‰BEQ.S…EA5118 ‰CMP.B…#'L',D0 ‰BNE.S…ER4‘NEITHER.WNOR.L1,2 ,‰OR.W†#$0800,D5‹EXTENSIONWORD,W/LBIT=.L EA5118ƒCMP.B…#')',(A5)+‰BNE.S…ER4‘NOCLOSING")"1,2 EA5119ƒMOVE.W„D5,(A4,D3)‰ADD.B…#2,TNB(A1) ‰ADD.L…#2,D3EA5119E‚RTS›.1,2 PAGE*‚(P-----EA61…ADD.L…#1,A5‰CMP.B…#'C',(A5)+ ‰BNE.S…ER4 #‰SUB.L…PCOUNTER(A1),D5…D5=D5-PC‰SUB.L…#2,D5D5=D5-(PC+2)*‰SUB.L…D3,D5ADJUSTMENTIF2WORDINST…3,0 ‰MOVE.B„(A5)+,D0‰CMP.B…#')',D0 ‰BNE.S…EA71 *‚(PC)‰OR.W†#$3A,D6MODE=111010 ‰BSR.S…EA16BITSŒ-32KTO+32K‰MOVE.W„D5,(A4,D3)‰ADD.B…#2,TNB(A1) ‰ADD.L…#2,D3 ‰BTST†#9,D7‰BNE‡EA5119E.1,2ER4†BRA‡ER’.1,2 **‚(PC----ŠPROGRAMCOUNTERWITHINDEX#EA71…MOVE.W„#$003B,D6‹MODE=111011 ‰CMP.B…#',',D0‰BNE‡ER4‘.1,2 ‰BTST†#10,D7‰BEQ‡ER4‘MODENOTALLOWEDŽ1,2 ‰BSR.S…EA8BITS-128TO+127‰BNE‡ER4‘.1,2 ‰AND.W…#$00FF,D5‹D5=VALUE ‰BSR‡GETREGAD‰BNE‡ER4‘.3,0 ‰OR.W†D1,D0  ‰ROR.W…#4,D0‰OR.W†D0,D5D5=EXTENSIONWORD ‰MOVE.B„(A5)+,D0‰CMP.B…#')',D0‰BEQ.S…EA7115ŽDEFAULT‚.W ‰CMP.B…#'.',D0‰BNE‡ER4‘.1,2 ‰MOVE.B„(A5)+,D0‰CMP.B…#'W',D0 ‰BEQ.S…EA7113 ‰CMP.B…#'L',D0‰BNE‡ER4‘.1,2'‰OR.W†#$0800,D5‹EXTENSIONWORDW/L=.L EA7113ƒCMP.B…#')',(A5)+‰BNE‡ER4‘NOCLOSING")"1,2 EA7115ƒMOVE.W„D5,(A4,D3)‰ADD.B…#2,TNB(A1) ‰ADD.L…#2,D3‰RTS PAGEL*****************************************************************************0*ˆROUTINESTOTESTFORVALIDEFFECTIVEADDRESSES*@*ˆEA16BITƒteststhat-32768<=D5<=65535.‚(signedorunsigned):*ˆEA16BITS‚teststhat-32768<=D5<=32767.‚(signedonly);*ˆEA8BIT„teststhatƒ-128<=D5<=ƒ255.‚(signedorunsigned)5*ˆEA8BITSƒteststhatƒ-128<=D5<=ƒ127.‚(signedonly)*8*ˆThe16-bittestsbranchtoERifinvalid,elsereturn.B*ˆThe‚8-bittestsreturnconditioncodesifvalid,else.0*ˆD5ispreservedunlessabranchtoERresults.*ˆD1isdestroyed.*L**************************************************************************** EA16BIT:/‰BSR.S…EA16BITCŒCHECKRANGE-32768TO32767.‚IF 0‰MOVE.L„D5,D1INVALID,CHECKWHETHERTHEHIGH16'‰SWAP†D1’BITSARE0(WHICHIMPLIESTHAT,‰TST.W…D1’D5<=65535).‚IFNOT,FALLTHRUTO,‰BEQ.S…EASEXTHE16-BITSIGNEDTEST--WEWILL*§FAILANDGOTOER. EA16BITS:.‰PEA‡ER(PC)ŽSETUPTORETURNTOERIFINVALID. (EA16BITCMOVE.L„#$7FFF,D1‹D1‚<--‚2^16-1.)‰BRA.S…EAS‘GOTOTHECOMMONTESTROUTINE.  EA8BIT:3‰BSR.S…EA8BITCCHECKRANGE-128TO127.‚IFINVALID,0‰MOVE.L„D5,D1CHECKWHETHERTHEHIGH24BITSARE.‰LSR.L…#8,D10(WHICHIMPLIESTHATD5<=255).‰RTS›* EA8BITS:0‰BSR.S…EA8BITCJUSTCHECKFOR-127<=D5<=128.(‰RTS›(BSRPUTSNEEDEDADDRESSONSTACK!) &EA8BITC‚MOVE.L„#$7F,D1D1‚<--‚2^8-1. 1*’***NOTE:THISROUTINEPLAYSWITHTHESTACK***8EAS†CMP.L…D1,D5IFD5>2^N-1,RETURNWITH(INVAL).‰BGT.S…EASEX*1‰NOT.L…D1’IFD5<-2^N,‚RETURNWITH(INVAL).‰CMP.L…D1,D5*‰BLT.S…EASEX* 2‰ADD.L…#4,A7POPTHERETURNADDRESSOFFTHESTACK,'‰CLR.L…D1’SET(VALID),ANDRETURN. EASEX„RTS›* PAGE ADR†MACRO‰DC.W†M\1-XBASE‰ENDM TBLKEYS‚DSˆ0‰INDEX‰ADR‡ABCD†0‚ABCDSBCD‰ADR‡ADD‡1‚ADD‚SUB‰ADR‡ADDA†2‚ADDACMPASUBA‰ADR‡ADDI†3‚ADDICMPISUBI‰ADR‡ADDQ†4‚ADDQSUBQ‰ADR‡ADDX†5‚ADDXSUBX‰ADR‡AND‡6‚AND‚OR‰ADR‡ASL‡7‚ASL‚LSLROLROXL‰ADR‡DBCC†8‚DBCC‰ADR‡BCHG†9‚BCHG‰ADR‡BRA‡10‚BRA‚BSR‚BCC‰ADR‡BSET†11‚BSET#‰ADR‡CHK‡12‚CHK‚DIVSDIVUMILSMULU ‰ADR‡CLR‡13‚CLRNEGNEGXNOTTST‰ADR‡CMPM†14‚CMPM‰ADR‡MOVEQ…15‚MOVEQ‰ADR‡EXG‡16‚EXG‰ADR‡EXT‡17‚EXT‰ADR‡JMP‡18‚JMP‚JSR‰ADR‡LEA‡19‚LEA‰ADR‡LINK†20‚LINK‰ADR‡MOVE†21‚MOVE)‰ADR‡CMMD2…22‚NOPRESETRTERTRRTSTRAPV‰ADR‡STOP†23‚STOP‰ADR‡SWAP†24‚SWAP‰ADR‡TRAP†25‚TRAP‰ADR‡UNLK†26‚UNLK‰ADR‡MOVEM…27‚MOVEM‰ADR‡ANDI†28‚ANDIEORIORI‰ADR‡SCC‡29‚NBCDSCCTAS‰ADR‡BCLR†30‚BCLR‰ADR‡BTST†31‚BTST‰ADR‡MOVEA…32‚MOVEA‰ADR‡MOVEP…33‚MOVEP‰ADR‡CMP‡34‚CMP‰ADR‡EOR‡35‚EOR‰ADR‡PEA‡36‚PEA‰ADR‡DCˆ37‚DC.W‰ADR‡MOVEC…38‚MOVEC68010™3,0‰ADR‡MOVES…39‚MOVES68010™3,0‰ADR‡RTD‡40‚RTDƒ68010™3,0‰PAGE7* \1,\2 = MNEUMONIC (\2 SIGN BIT SET AS LAST CHARACTER)*\3„=INDEXTOTABLKEYS* \4,\5 = FIRST WORD MASK%*\6„=NOOPERANDALLOWEDIFSIGNSET&*\7„=.SALLOWED(.WNOTALLOWED) 1,2 OPC†MACRO‰DC.B†'\1','\2'+128‰DC.B†\3+\6+\7,$\4,$\5‰ENDM "NOC†EQU‡128‘(BIT7SET)NOOPERAND)NW‡EQU‡$40‘(BIT6SET).WNOTALLOWED„1,2!TBLOPCƒOPC‡ABC,D,0,C1,00,0,0…ABCD‰OPC‡ADD,A,2,D0,C0,0,0…ADDA‰OPC‡ADD,I,3,06,00,0,0…ADDI‰OPC‡ADD,Q,4,50,00,0,0…ADDQ‰OPC‡ADD,X,5,D1,00,0,0…ADDX‰OPC‡AD,D,1,D0,00,0,0†ADD‰OPC‡AND,I,28,02,00,0,0„ANDI‰OPC‡AN,D,6,C0,00,0,0†AND‰OPC‡AS,L,7,E1,00,0,0†ASL‰OPC‡AS,R,07,E0,00,0,0…ASR‰OPC‡BR,A,10,60,00,0,NW„BRA‰OPC‡BH,I,10,62,00,0,NW†BHI‰OPC‡BL,S,10,63,00,0,NW†BLS‰OPC‡BC,C,10,64,00,0,NW†BCC‰OPC‡BC,S,10,65,00,0,NW†BCS‰OPC‡BN,E,10,66,00,0,NW†BNE‰OPC‡BE,Q,10,67,00,0,NW†BEQ‰OPC‡BV,C,10,68,00,0,NW†BVC‰OPC‡BV,S,10,69,00,0,NW†BVS‰OPC‡BP,L,10,6A,00,0,NW†BPL‰OPC‡BM,I,10,6B,00,0,NW†BMI‰OPC‡BG,E,10,6C,00,0,NW†BGE‰OPC‡BL,T,10,6D,00,0,NW†BLT‰OPC‡BG,T,10,6E,00,0,NW†BGT‰OPC‡BL,E,10,6F,00,0,NW†BLE‰OPC‡BCH,G,9,01,40,0,0…BCHG$‰OPC‡BCL,R,30,01,80,0,0„BCLR†DYNAMIC‰OPC‡BSE,T,11,01,C0,0,0„BSET‰OPC‡BS,R,10,61,00,0,NW„BSR‰OPC‡BTS,T,31,01,00,0,0„BTST‰OPC‡B,T,10,60,00,0,NW†BT‰OPC‡CH,K,12,41,80,0,0…CHK‰OPC‡CL,R,13,42,00,0,0…CLR‰OPC‡CMP,A,2,B0,C0,0,0…CMPA‰OPC‡CMP,I,3,0C,00,0,0…CMPIš1,1‰OPC‡CMP,M,14,B1,08,0,0„CMPM‰OPC‡CM,P,34,B0,00,0,0†CMP‰OPC‡DB,T,8,50,C8,0,NW…DBT‰OPC‡DB,F,8,51,C8,0,NW…DBF‰OPC‡DBR,A,8,51,C8,0,NW„DBRA‰OPC‡DBH,I,8,52,C8,0,NW„DBHI‰OPC‡DBL,S,8,53,C8,0,NW„DBLS‰OPC‡DBC,C,8,54,C8,0,NW„DBCC‰OPC‡DBC,S,8,55,C8,0,NW„DBCS‰OPC‡DBN,E,8,56,C8,0,NW„DBNE‰OPC‡DBE,Q,8,57,C8,0,NW„DBEQ‰OPC‡DBV,C,8,58,C8,0,NW„DBVC‰OPC‡DBV,S,8,59,C8,0,NW„DBVS‰OPC‡DBP,L,8,5A,C8,0,NW„DBPL‰OPC‡DBM,I,8,5B,C8,0,NW„DBMI‰OPC‡DBG,E,8,5C,C8,0,NW„DBGE‰OPC‡DBL,T,8,5D,C8,0,NW„DBLT‰OPC‡DBG,T,8,5E,C8,0,NW„DBGT‰OPC‡DBL,E,8,5F,C8,0,NW„DBLE(‰OPC‡DC.,W,37,00,00,0,0„DC.W‚(WORDONLY)‰OPC‡DIV,S,12,81,C0,0,0„DIVS ‰OPC‡DIV,U,12,80,C0,0,0„DIVU‰OPC‡EOR,I,28,0A,00,0,0„EORI‰OPC‡EO,R,35,B1,00,0,0†EOR‰OPC‡EX,G,16,C1,00,0,0…EXG‰OPC‡EX,T,17,48,00,0,0…EXT‰OPC‡JM,P,18,4E,C0,0,NW„JMP‰OPC‡JS,R,18,4E,80,0,NW„JSR‰OPC‡LE,A,19,41,C0,0,0…LEA‰OPC‡LIN,K,20,4E,50,0,0„LINK‰OPC‡LS,L,7,E3,08,0,0†LSL‰OPC‡LS,R,07,E2,08,0,0…LSR‰OPC‡MOVE,A,32,00,04,0,0ƒMOVEA‰OPC‡MOVE,M,27,48,80,0,0ƒMOVEM‰OPC‡MOVE,P,33,01,08,0,0ƒMOVEP‰OPC‡MOVE,Q,15,70,00,0,0ƒMOVEQ‰OPC‡MOV,E,21,00,00,0,0„MOVE‰OPC‡MUL,S,12,C1,C0,0,0„MULS‰OPC‡MUL,U,12,C0,C0,0,0„MULU‰OPC‡NBC,D,29,48,0,0,0…NBCD‰OPC‡NEG,X,13,40,00,0,0„NEGX‰OPC‡NE,G,13,44,00,0,0…NEG‰OPC‡NO,P,22,4E,71,NOC,0ƒNOP‰OPC‡NO,T,13,46,00,0,0…NOT‰OPC‡OR,I,28,00,00,0,0…ORI‰OPC‡O,R,6,80,00,0,0‡OR‰OPC‡PE,A,36,48,40,0,0…PEA ‰OPC‡RESE,T,22,4E,70,NOC,0RESET‰OPC‡RO,L,7,E7,18,0,0†ROL‰OPC‡RO,R,07,E6,18,0,0…ROR‰OPC‡ROX,L,7,E5,10,0,0…ROXL‰OPC‡ROX,R,07,E4,10,0,0„ROXR‰OPC‡RT,E,22,4E,73,NOC,0ƒRTE‰OPC‡RT,R,22,4E,77,NOC,0ƒRTR‰OPC‡RT,S,22,4E,75,NOC,0ƒRTS‰OPC‡SBC,D,0,81,00,0,0…SBCD‰OPC‡S,F,29,51,C0,0,0†SF‰OPC‡SH,I,29,52,C0,0,0…SHI‰OPC‡SL,S,29,53,C0,0,0…SLS‰OPC‡SC,C,29,54,C0,0,0…SCC‰OPC‡SC,S,29,55,C0,0,0…SCS‰OPC‡SN,E,29,56,C0,0,0…SNE‰OPC‡SE,Q,29,57,C0,0,0…SEQ‰OPC‡SV,C,29,58,C0,0,0…SVC‰OPC‡SV,S,29,59,C0,0,0…SVS‰OPC‡SP,L,29,5A,C0,0,0…SPL‰OPC‡SM,I,29,5B,C0,0,0…SMI‰OPC‡SG,E,29,5C,C0,0,0…SGE‰OPC‡SL,T,29,5D,C0,0,0…SLT‰OPC‡SG,T,29,5E,C0,0,0…SGT‰OPC‡SL,E,29,5F,C0,0,0…SLE‰OPC‡STO,P,23,4E,72,0,0„STOP‰OPC‡S,T,29,50,C0,0,0†ST‰OPC‡SUB,A,2,90,C0,0,0…SUBA‰OPC‡SUB,I,3,04,00,0,0…SUBI‰OPC‡SUB,Q,4,51,00,0,0…SUBQ‰OPC‡SUB,X,5,91,00,0,0…SUBX‰OPC‡SU,B,1,90,00,0,0†SUB‰OPC‡SWA,P,24,48,40,0,0„SWAP‰OPC‡TA,S,29,4A,C0,0,0…TAS™1,2 ‰OPC‡TRAP,V,22,4E,76,NOC,0TRAPV‰OPC‡TRA,P,25,4E,40,0,0„TRAP‰OPC‡TS,T,13,4A,00,0,0…TST‰OPC‡UNL,K,26,4E,58,0,0„UNLKTBLOP00‚DS.B†0“.3,0TBLOP08‚DS.B†0“.3,0"‰OPC‡MOVE,C,38,4E,7A,0,0MOVEC™3,0"‰OPC‡MOVE,S,39,0E,00,0,0MOVES™3,0‰OPC‡RT,D,40,4E,74,0,0ƒRTD›3,0TBLOP10‚DS.B†0“.3,0TBLOP20‚DS.B†0“.3,0 4TBLOPAD‚DC.L†TBLOP00TABLEOF'END-OFTABLE'ADDRƒ3,0‰DC.L†TBLOP08.3,0‰DC.L†TBLOP10.3,0‰DC.L†TBLOP20.3,0 TBLOPEƒDS.B†0 PAGE%CODE68K‚CLR.L…D3’Entry68000onlyŽ3,0 SPC 1*CODE68M‚DS.W†0“Entry68000/68008/68010‡3,0 SPC 1‰LINK†A1,#0-(ESKE-ESKB)ƒ.3,0 ‰MOVE.L„A1,LINK(A7)‰SAVELINKAGE(‰MOVE.L„A7,A1A1=BASEREGISTERTODATA-‰MOVE.W„D3,PRTYPE(A1)‡PROCESSORTYPECODE‹3,0 %‰MOVE.L„#1,D7POSSIBLEERRORCODE‹3,0 ‰CMP.W…#TBLOPE-TBLOPAD,D3‚.3,0‰BGE‡ER’TYPEOUTOFRANGE3,0 ‰MOVE.L„A6,-(A7)ŒSAVEA6—3,1)‰LEA‡TBLOPAD(PC),A6†GETTABLEADDRESS3,13‰LEA‡TBLOP00(PC),A0†GETFIRSTENTRYPCRELATIVEƒ3,1‰MOVE.L„A0,(A6)+ŒSTOREIT.•3,14‰LEA‡TBLOP08(PC),A0†GETSECONDENTRYPCRELATIVE‚3,1‰MOVE.L„A0,(A6)+ŒSTOREIT.•3,13‰LEA‡TBLOP10(PC),A0†GETTHIRDENTRYPCRELATIVEƒ3,1‰MOVE.L„A0,(A6)+ŒSTOREIT.•3,12‰LEA‡TBLOP20(PC),A0†GETLASTENTRYPCRELATIVE„3,1‰MOVE.L„A0,(A6)+ŒSTOREIT.•3,1‰MOVE.L„(A7)+,A6ŒRESTOREA6”3,1 +‰MOVE.B„#'',(A6)‹INSURELASTCHARISSPACE ‰MOVE.L„A3,A0‰MOVE.L„#OUTBSIZE-1,D0(M300…MOVE.B„#'',(A0)+ŠSPACEFILLBUFFER ‰DBRA†D0,M300 ‰SUB.L…#2,A0+‰MOVE.L„A0,PTRBUFE(A1)†PTRTOENDOFBUFFER !‰MOVE.L„A4,PCOUNTER(A1)…FORMATPC‰MOVE.L„A4,D4D4=P-COUNTER ‰MOVE.L„A4,D0 ‰MOVE.L„A6,-(A7)ŒSAVEA6—1,1 ‰MOVE.L„A3,A6#‰BSR‡FRELADDRŒFORMRELATIVEADDRESS‰MOVE.L„(A7)+,A6ŒRESTOREA6”1,1 ‰MOVE.L„A4,D0 ‰ROR.L…#1,D0‰BMI‡ERDONEŽPCODDADDRESS #‰MOVE.L„#FOL,D7POSSIBLEERRORCODE‰CMP.B…#'',(A5)+‰BNE‡ERDONEŽ1STCHARNOTSPACE !‰MOVE.B„#2,TNB(A1)ŠINZ#OFBYTES,‰MOVE.W„#$40,TLENGTH(A1)„SIZE=.W(DEFAULT).‰CLR.B…TLSPEC(A1)ŠDEFAULT(SIZENOTSPECIFIED) (‰LEA.L…FOC(A3),A0ŠA0=STOREADDRESSŒ3,0 %M340…BSR‡GETCHARFŒGETPASTSPACES1,1‰CMP.B…#'',D0 ‰BEQ‡M340 ‰SUB.L…#1,A5FORMATOP-CODEM350…BSR‡GETCHARFŒ.1,1‰MOVE.B„D0,(A0)+‰CMP.B…#'.',D0 ‰BNE.S…M352 '‰MOVE.B„(A5),TLSPEC(A1)…NOTDEFAULT“1,2‰CMP.B…#'W',(A5) ‰BEQ.S…M352‰CMP.B…#'S',(A5)‰BEQ.S…M352.SHORT=.WORD‰CLR.W…TLENGTH(A1) ‰CMP.B…#'B',(A5)‰BEQ.S…M352SIZE=.W‰MOVE.W„#$80,TLENGTH(A1)‰CMP.B…#'L',(A5)‰BNE‡ERF‘.1,1 M352…CMP.B…#'',D0‰BNE‡M350NOTSPACECONTINUE * SEARCH OP-CODE TABLE2‰LEA.L…TBLOPC(PC),A0‡A0=PTRTOTABLEOFOP-CODES‰LEA.L…TBLOPAD(PC),A4†.3,0‰MOVE.W„PRTYPE(A1),D0‡.3,0.‰MOVE.L„(A4,D0.W),A4ˆA4=PTRENDOFCODES‰3,0 *®A3=STARTOFSTOREBUFFER8M410…LEA.L…FOC(A3),A2ŠA2=PTRTOOP-CODEJUSTFORMATTED M415…MOVE.B„(A0)+,D0ŒXXXXXXDD ‰EXT.W…D0’XXXXSSDD‚SIGNEXTENDED‰AND.B…#$7F,D0‰CMP.B…(A2)+,D0‰BNE.S…M420NON-MATCH ‰TST.W…D0‰BPL‡M415SIGNRESET;CONTINUE‰BRA.S…M430MATCHCOMPLETE #M420…TST.W…D0’SEQUENCETONEXTCODE ‰BMI.S…M426M424…MOVE.B„(A0)+,D0‰BPL‡M424FINISHTHISOP-CODE$M426…ADD.L…#3,A0ADJUSTPTRTOTABLE‰CMP.L…A4,A0.3,0!‰BCS‡M410MORETABLETOCHECK‹3,0 M428…MOVE.L„#FOC,D7ERRORCODE ‰BRA‡ERDONE * GET GOTO INDEX* GET FIRST WORD MASK*M430…MOVE.B„(A2),D0MUSTTERMINATEOP-CODE#‰CMP.B…#'',D0WITHSPACEORPERIOD ‰BEQ.S…M432‰CMP.B…#'.',D0‰BNE‡M426KEEPLOOKING’3,0M432 ‰CLR.L…D0 ‰MOVE.B„(A0)+,D0ŒD0=‚KEYS‚INDEX‰MOVE.B„D0,D1D1=‚KEYS(INDEX)‰AND.B…#$3F,D0D0=ˆINDEX1,2‰ASL.L…#1,D0INDEX*TWO“1,2‰MOVE.B„(A0)+,D2 ‰LSL.W…#8,D2%‰MOVE.B„(A0)+,D2ŒD2=FIRSTWORDMASK‰MOVE.W„D2,TDATA(A1) *INSURE.S.WMATCHOP-CODE©1,2+‰MOVE.B„TLSPEC(A1),D3‡D3=.nSPECIFIED1,2‰BEQ.S…M4326NOTSPECIFIED‘1,2‰BTST†#6,D1.1,2,‰BEQ.S…M4324.WALLOWED(.SNOTALLOWED)ƒ1,2‰CMP.B…#'W',D3.1,2‰BEQ‡M428.WNOTALLOWED1,2‰CMP.B…#'B',D3.1,2‰BEQ‡M428.BNOTALLOWED1,2‰BRA.S…M4326.1,2 M4324„CMP.B…#'S',D3«1,2‰BEQ‡M428.SNOTALLOWED1,2M4326 * CALCULATE GOTO ADDRESS$‰LEA‡TBLKEYS(PC),A0†A0=PTRTOKEYS%‰MOVE.W„(A0,D0),D0ŠD0=16BITOFFSET#‰LEA‡XBASE(PC),A2ˆA2=BASEADDRESS(‰ADD.L…D0,A2A2=COMPUTEDGOTO‚ADDRESS * FORMAT OPERAND IF REGUIRED‰TST.B…D1’LOOKATKEY ‰BMI.S…M440OPERANDNOTREQUIRED #‰LEA.L…FOP(A3),A0ŠSTOREPOINTER‘3,02‰MOVE.L„A0,PTROP(A1)ˆPOINTERTOOPERAND(FORMATED)!M435…BSR.S…GETCHARFŒD0=CHAR•1,1‰CMP.B…#'',D0‰BEQ‡M435SKIPSPACES -M437…MOVE.B„D0,(A0)+ŒMOVERESTOFSOURCELINE‰BSR.S…GETCHARFŒD0=CHAR•1,1‰CMP.L…A5,A6.1,1‰BPL‡M437.1,15‰MOVE.L„A0,PTRBUFE(A1)†POINTERTOENDFORMATEDSOURCE+‰MOVE.L„A0,A6A6=POINTERTOENDOFSOURCEM440 (‰MOVE.L„PTROP(A1),A5ˆA5=PTRTOOPERAND1‰LEA‡TDATA+2(A1),A4ŒA4=BASEADDRFORDATASTORE$‰CLR.L…D3’D3=OFFSETFORDATASTORE‰JMP‡(A2)GOTOROUTINE *¦D2=MASK*¦D4=P-COUNTER PAGESPACETƒCMP.B…#'',(A5)‹.3,0"‰BNE.S…ER’NOTSPACETERMINATORŠ3,0 ‰RTS›.3,0 COMMA„CMP.B…#',',(A5)+‰BNE.S…ER’NOTCOMMA‰RTS GETCHAR‚CMP.L…A5,A6 ‰BMI.S…ER‰MOVE.B„(A5)+,D0‰RTS GETCHARFCMP.L…A5,A6.1,1 ‰BMI.S…ERF‰MOVE.B„(A5)+,D0‰RTS ERF†MOVE.L„A0,A5.1,1 ER‡MOVE.L„A5,D7D7=ERRORFLAG"‰SUB.L…A3,D7..&POSITIONOFERROR&ERDONEƒCLR.L…D6’D6=(ZERO)BYTECOUNT ‰BRA.S…CMMD35 SPC 2.CMMD2„BSR‡SPACETŽLOOKFORSPACETERMINATOR…3,0 MCMMD2ƒDSˆ0“NOOPERANDSEQUENCE‰MOVE.W„D2,TDATA(A1) *„FORMATDATAFIELD'‰MOVE.B„TNB(A1),D3ŠD3=NUMBEROFBYTES"‰MOVE.L„D3,D6D6=NUMBEROFBYTES&‰LEA‡TDATA(A1),A2ˆA2=PTRTOHEXDATA&‰LEA.L…FDATA(A3),A6ˆA6=STOREPTR3,0FPR315ƒMOVE.B„(A2)+,D0 ‰BSR‡PNT2HX ‰SUB.L…#1,D3‰BNE‡FPR315ŽMOREBYTES ‰CLR.L…D7’RESETERRORFLAG +CMMD35ƒMOVEM.LƒTDATA(A1),D0-D2…D0-D2=DATA 4‰MOVE.L„PTRBUFE(A1),A6†A6=POINTERTOENDOFBUFFER '‰MOVE.L„PCOUNTER(A1),A4…A4=ORGINALPC ‰MOVE.L„LINK(A1),A1‰UNLK†A1‰RTS›RETURNTOREQUESTOR!*¦A3=POINTERTOSTARTOFBUFFER *¦D6=NUMBEROFBYTESASSEMBLED*¦D7=ERRORFLAG(POSITION)  PAGE *‚SIZE=BYTE*„DY,DX *„-(AY),-(AX)*„....RX@.SS...RY@MABCD„DSˆ0“(INDEX0)ABCDSBCD‰TST.B…TLSPEC(A1)!‰BEQ.S…MABCD9ŽDEFAULTSIXE=BYTE‰TST.W…TLENGTH(A1)‰.3,0‰BNE‡ER’NOT.BMABCD9 ‰MOVE.L„#$11,D7.3,0‰BSR‡EA ‰BSR‡COMMA ‰MOVE.L„D6,D0 ‰AND.W…#7,D0 ‰OR.W†D0,D2 ‰BTST†#5,D6  ‰BEQ.S…MABCD55D@,D@MODE ‰OR.W†#$0008,D2‹-(A@),-(A@)MODE ‰MOVE.L„#$10,D7.3,0‰BSR‡EA ‰AND.W…#7,D6 ‰ROR.W…#7,D6 ‰OR.W†D6,D2 ‰BRA‡CMMD2 MABCD55‚BSR‡GETREGDD@,D@‰BNE‡ER ‰ROR.W…#7,D0 ‰OR.W†D0,D2CMMD2S10BRA‡CMMD2  PAGEMCMP…DSˆ0“(INDEX34) ‰BSR‡EAALL‰MOVE.L„D6,D4D4=SOURCEMODE ‰BSR.S…COMMAS20 ‰CMP.B…#'A',(A5)‰BEQ‡MADDA21DESTINATION=A@ ‰CMP.B…#$3C,D4&‰BEQ.S…MCMP56ŽSOURCE‚....I‚#,... ‰BSR‡FSIZE ‰MOVE.L„#$009,D7Œ.3,0‰BSR‡EA’D@+(A@)+‰MOVE.L„D6,D0MMMRRR‰AND.W…#$38,D0MMM... ‰BEQ.S…MCMP39ŽDESTINATION‚D@ ‰CMP.B…#$18,D0‰BNE‡ER ‰AND.W…#$F,D6Ž(AY)+,(AX)+“1,2‰ROR.W…#7,D6­1,2 ‰OR.W†D6,D2....AX@.........Ž1,2$‰OR.W†#$0100,D2‹...1AX@.........Ž1,2 ‰MOVE.L„D4,D0‰AND.W…#$38,D0‰CMP.W…#$18,D0‰BNE‡ER’NOT(A@)+"‰AND.W…#$F,D4Ž............1AY@Ž1,2 ‰OR.W†D4,D2‰BRA‡CMMD2S10ŒCMMD2 *‚,D@MCMP39ƒROR.W…#7,D6 ‰OR.W†D6,D2 ‰OR.W†D4,D2‰BRA.S…CMMD2S11 0MCMP56ƒMOVE.W„#$0C00,D2‹#,†MASK=CMPI ‰BSR‡FSIZE ‰BSR‡EADA ‰OR.W†D6,D2CMMD2S11BRA‡CMMD2S10 COMMAS20BRA‡COMMA PAGEMADD…DSˆ0“(INDEX1) ‰BSR‡EAALL‰MOVE.L„D6,D4D4=SOURCEMODE ‰BSR‡COMMAS20 ‰CMP.B…#'A',(A5)‰BEQ‡MADDA21DESTINATION=A@ ‰CMP.B…#$3C,D4&‰BEQ.S…MADD56ŽSOURCE‚....I‚#,... ‰BSR‡FSIZE ‰MOVE.W„#$1FF,D7‰BSR‡EA’ALTERABLE+D@‰MOVE.L„D6,D0MMMRRR‰AND.W…#$38,D0MMM... ‰BNE.S…MADD46ŽDESTINATIONNOT‚D@ *‚,D@ ‰ROR.W…#7,D6 ‰OR.W†D6,D2 ‰OR.W†D4,D2 ‰BRA‡CMMD2S11 MADD46ƒDSˆ0“D@,‰OR.W†#$100,D2 ‰ROR.W…#7,D4‰OR.W†D4,D2ASDESTINATION ‰OR.W†D6,D2D@‚ASSOURCE ‰BRA‡CMMD2S11 MADD56ƒMOVE.L„D2,D0#,‰MOVE.W„#$0600,D2‹MASK=ADDI ‰CMP.W…#$D000,D0 ‰BEQ.S…MADD58‰MOVE.W„#$400,D2ŒMASK=SUBIMADD58 ‰BSR‡FSIZE ‰BSR‡EADADATAALTERABLEONLY ‰OR.W†D6,D2 ‰BRA‡CMMD2S11 PAGE(MADDI„MOVE.L„PTROP(A1),A5ˆ(INDEX3)CMPI ‰BSR‡FSIZE ‰BSR‡EAZ ‰BSR‡COMMAS20 ‰BSR‡EADADATAALTERABLEONLY ‰OR.W†D6,D2CMMD2S12BRA‡CMMD2S11 PAGE*‚SIZE=‚BYTE,WORD,LONG *‚#,SR"*‚#,„DATAALTERABLEONLY#MANDI„DSˆ0“(INDEX28)ANDIEORIORI ‰BSR‡FSIZE ‰BSR‡EAZ ‰BSR‡COMMAS20 ‰BSR‡GETREGSRŒLOOKFOR"SR’3,0‰BEQ.S…MANDI23 ‰BSR‡GETREGCRŒLOOKFOR"CCR"3,0‰BEQ.S…MANDI43FOUNDCCR•3,0 ‰BSR‡EADA ‰OR.W†D6,D2‰BRA‡CMMD2S12ŒCMMD2 SPC 3'MANDI23‚BSR‡SIZEWORDŒWORDSIZEONLY3,0 !‰OR.W†#$003C,D2‹SR/CCR‚MASK3,0*‰ADD.L…#2,A5POINTERTOENDOFOPERAND…1,2‰BRA‡CMMD2S12ŒCMMD2 'MANDI43‚BSR‡SIZEBYTEŒBYTESIZEONLY3,0‰BRA‡CMMD2S12ŒCMMD2™3,0 PAGEMADDA„DSˆ0“(INDEX2) ‰BSR‡EAALL ‰OR.W†D6,D2 ‰BSR‡COMMA MADDA21‚OR.W†D6,D2‰MOVE.W„TLENGTH(A1),D0‰BEQ.S…ER9‘.BYTENOTALLOWED‰LSL.W…#1,D0.W=011......‰OR.W†#$00C0,D0‹.L=111...... ‰OR.W†D0,D2 ‰BSR‡GETREGA‰BNE.S…ER9‘.3,0 ‰ROR.W…#7,D0 ‰OR.W†D0,D2CMMD2S13BRA‡CMMD2S12ŒCMMD2™3,0 PAGEMADDQ„DSˆ0“(INDEX4) ‰BSR‡FSIZE ‰BSR‡GETIMM ‰TST.L…D0‰BEQ.S…ER9‘DATA=ZERO ‰CMP.B…#9,D0‰BPL.S…ER9‘VALUETOOBIG‰AND.W…#$7,D0ŽMAKE8=0$‰ROR.W…#7,D0SHIFTDATATOBITS9-11 ‰OR.W†D0,D2 ‰BSR‡COMMA ‰BSR‡EAA‘ALTERABLEADDRESSING ‰OR.W†D6,D2 ‰MOVE.L„D2,D0‰AND.W…#$C0,D0‰BNE‡CMMD2S13ŒCMMD2™3,0 0* BYTE SIZE; ADDRESS REGISTER DIRECT NOT ALLOWED ‰MOVE.L„D2,D0‰AND.W…#$38,D0‰CMP.B…#$08,D0‰BNE‡CMMD2S13ŒCMMD2™3,0ER9†BRA‡ER’.3,0 PAGE* SIZE = BYTE, WORD, LONG*„DY,DX *„-(AY),-(AX)*„....RX@.SS...RY@MADDX„DSˆ0“(INDEX5) ‰BSR‡FSIZE ‰MOVE.L„#$11,D7.3,0‰BSR‡EA ‰BSR‡COMMA ‰MOVE.L„D6,D0 ‰AND.W…#7,D0 ‰OR.W†D0,D2 ‰BTST†#5,D6‰BEQ.S…MADDX5ŽD@,D@MODE ‰OR.W†#$0008,D2‹-(A@),-(A@)MODE ‰MOVE.L„#$10,D7.3,0‰BSR‡EA ‰AND.W…#7,D6 ‰ROR.W…#7,D6 ‰OR.W†D6,D2CMMDS14‚BRA‡CMMD2S13ŒCMMD2 MADDX5ƒBSR‡GETREGDD@,D@‰BNE‡ER9‘.3,0 ‰ROR.W…#7,D0 ‰OR.W†D0,D2CMMD2S14BRA‡CMMD2 SPC 2(A5TODESTCLR.L…D1’MOVEA5TODESTINATIONA5300„BSR‡GETCHAR‰CMP.B…#'(',D0   ‰BNE.S…A5305 ‰MOVE.L„D0,D1A5305„CMP.B…#')',D0 ‰BEQ‡A5TODEST‰CMP.B…#',',D0 ‰BNE‡A5300‰TST‡D1 ‰BNE‡A5300‰RTS PAGE*‚SIZE=BYTE,WORD,LONG*‰,D@…[‚D@,D@ALLOWED‚]œ3,0#*‰D@,…[‚D@,D@NOTALLOWED‚]˜3,0MAND…BSR‡FSIZE(INDEX6) ‰CMP.B…#'#',(A5) ‰BEQ.S…MAND90 %‰BSR‡A5TODESTŒLOOKATDESTINATION‹3,0‰BSR‡GETREGD.3,0‰BEQ.S…MAND77Ž.3,0 %‰OR.W†#$0100,D2ŒD@,‚DIRECTIONBIT 0‰MOVE.L„PTROP(A1),A5ˆA5=POINTERTOOPERAND‡3,0‰BSR‡GETREGD.3,0 ‰BNE‡ER’.3,0 ‰ROR.W…#7,D0 ‰OR.W†D0,D2 ‰BSR‡COMMA ‰BSR‡EAM‘ALTERABLEMEMORY ‰OR.W†D6,D2CMMDS215BRA‡CMMD2S14ŒCMMD2 MAND77ƒROR.W…#7,D0,D@—3,0‰OR.W†D0,D2DESTINATION“3,0 0‰MOVE.L„PTROP(A1),A5ˆA5=POINTERTOOPERAND‡3,0)‰BSR‡EADADDRDATAADDRESSING(SOURCE)†3,0 ‰OR.W†D6,D2 ‰BSR‡COMMA.3,0‰BRA‡MCMMD2Ž.3,0 MAND90ƒAND.W…#$F000,D2‰CMP.W…#$C000,D2‰BEQ.S…MAND97AND%‰MOVE.L„#$0000,D2‹CHANGETO"ORI"3,0MAND91ƒBRA‡MANDI(MAND97ƒMOVE.W„#$0200,D2‹CHANGETO"ADDI" ‰BRA‡MAND91 PAGEMEOR…BSR‡FSIZE(INDEX35) ‰CMP.B…#'#',(A5) ‰BEQ.S…MEOR90 ‰BSR‡GETREGD ‰ROR.W…#7,D0 ‰OR.W†D0,D2 ‰BSR‡COMMA #‰BSR‡EADADATAALTERABLEADDRESSING ‰OR.W†D6,D2CMMD2S15BRA‡CMMD2S14ŒCMMD2 2MEOR90ƒMOVE.L„PTROP(A1),A5ˆA5=POINTERTOOPERAND"‰MOVE.W„#$0A00,D2‹CHANGETO"EORI" ‰BRA‡MANDI PAGEMASL…DSˆ0“(INDEX7)*‰ASL…LSL…ROL…ROXL*‚MASKS‚E000„E008„E018„E010"*‰E0C0„E2C0„E6C0„E4C0ƒSHIFTMEMORY ‰BSR‡FSIZE ‰MOVE.B„(A5)+,D0‰CMP.B…#'#',D0 ‰BNE.S…MSL200 *‚#,D@‰BSR‡EV ‰CMP.L…#8,D0‰BGT‡ER’GREATERTHAN8 ‰AND.B…#$7,D0ŽMAKE8INTO0MSL150ƒROR.W…#7,D0‰AND.W…#$F1FF,D2‰OR.W†D0,D2COUNT/REG ‰BSR‡COMMA ‰BSR‡GETREGD‰BNE‡ER2‘.3,0 ‰OR.W†D0,D2CMMD2S16BRA‡CMMD2S15ŒCMMD2 MSL200ƒDSˆ0“D@,D@‰CMP.B…#'D',D0 ‰BNE.S…MSL300 *ˆD@,D@ ‰OR.W†#$20,D2 ‰SUB.L…#1,A5 ‰BSR‡GETREGD‰BNE.S…ER2‘.3,0 ‰BRA‡MSL150 MSL300ƒDSˆ0“†SHIFTMEMORY ‰SUB.L…#1,A5‰OR.W†#$00C0,D2‹SIZE=MEMORY +‰AND.W…#$FFC0,D2‹REMOVE"SHIFTMEMORY"BITS ‰CMP.W…#$0040,TLENGTH(A1)‰BNE.S…ER2‘NOT.WORD•1,2 ‰BSR‡EAM ‰OR.W†D6,D2‰BRA.S…CMMD2S16ŒCMMD2 PAGE)MSCC…BSR‡SIZEBYTEŒ(INDEX29)NBCDSCCTAS ‰BSR‡EADADATAALTERABLEONLY ‰OR.W†D6,D2CMMD2S17BRA.S…CMMD2S16ŒCMMD2 PAGEMBCHG„CMP.B…#'#',(A5)‹(9) ‰BNE.S…MB200 "‰MOVE.W„#$0840,D2‹NEWOP-CODEMASK MB100„ADD.L…#1,A5‰BSR‡EV’EVALUATEEXPRESSION ‰CMP.L…#33,D0‰BGT.S…ER2‘(MODULO32)“1,2‰MOVE.W„D0,TDATA+2(A1)‰ADD.L…#2,D3STOREPOINTER ‰ADD.B…#2,TNB(A1)Š.1,2 MB105„BSR‡COMMA.1,2 ‰MOVE.L„D2,D0.3,0‰AND.W…#$00C0,D0‹.3,0‰BEQ.S…MB107BTSTš3,0*‰BSR‡EADADESTINATION(BCHGBCLRBSET)‚3,0‰BRA.S…MB109.3,0,MB107„MOVE.W„#$7FD,D7ŒDESTINATION(BTST)Œ3,0 ‰BSR‡EA’.3,0MB109„OR.W†D6,D2.3,0 ‰TST.B…TLSPEC(A1)Š..œ1,2‰BEQ.S…CMMD2S17ŒDEFAULT—1,2 ‰AND.W…#$0038,D6‹.1,2,‰BNE.S…MB145DESTINATIONWASNOTD@ƒ1,2 3‰CMP.W…#$80,TLENGTH(A1)„DESTINATIONWASD@‡1,2 ‰BEQ.S…CMMD2S17ŒLENGTHIS.L’1,2ER2†BRA‡ER’.1,2 MB145„TST.W…TLENGTH(A1)‰.1,2‰BNE‡ER2‘NOTBYTELENGTH1,2 CMMD2S18BRA‡CMMD2S17ŒCMMD2™1,2 MB200„BSR‡GETREGDDYNAMIC‰BNE‡ER2‘.3,0 ‰ROR.W…#7,D0 ‰OR.W†D0,D2 ‰BRA‡MB105.1,2 *MBSET„CMP.B…#'#',(A5)‹(INDEX11)BCLRBSET ‰BNE‡MB200 ‰MOVE.W„#$08C0,D2 ‰BRA‡MB100 MBCLR„CMP.B…#'#',(A5)‹(INDEX30) ‰BNE‡MB200 ‰MOVE.W„#$0880,D2 ‰BRA‡MB100 MBTST„CMP.B…#'#',(A5)‹(INDEX31) ‰BNE‡MB200 ‰MOVE.W„#$0800,D2 ‰BRA‡MB100 PAGEMDBCC„DSˆ0“(INDEX8) ‰BSR‡GETREGD‰BNE.S…ER6‘.3,0 ‰OR.W†D0,D2 ‰BSR‡COMMA ‰BSR.S…EVSR ‰BRA.S…MBRA23 SPC 6*‚SIZEƒ.S‚=‚.Wƒ(DEFAULT) *‰.L‚=‚.LMBRA…DSˆ0“(INDEX10) ‰BSR.S…EVSR ‰CMP.W…#$0080,TLENGTH(A1)‰BEQ.S…MBRA23ŽFORCEDLONG ‰BSR‡EA8BITS-128TO+127‰BNE.S…MBRA23ŽNOT8BITVALUE ‰OR.B†D5,D2‰BRA‡CMMD2S18Œ.SHORT "ER6†BRA‡ER2‘(ER)ERRORHANDLERŒ1,1 MBRA23ƒTST.B…TLSPEC(A1) ‰BEQ.S…MBRA27‰CMP.W…#$0040,TLENGTH(A1)‰BEQ‡ER6‘.SSPECIFIED’1,1MBRA27 ! ‰MOVE.L„D4,D5RESTORED5‰BSR‡EA16BITSŒ-32KTO+32K‰MOVE.W„D5,TDATA+2(A1)‰ADD.B…#2,TNB(A1)CMMD2S19BRA‡CMMD2S18ŒCMMD2 EVSR…BSR‡EV‰CMP.B…#'',(A5)‹.1,1)‰BNE‡ER6‘DIDNOTTERMINATEWITHSPACE‚1,1 ‰MOVE.L„D0,D5 ‰ASR.L…#1,D0‰BCS‡ER6‘ODDVALUE•1,1‰MOVE.L„PCOUNTER(A1),D4‰ADD.L…#2,D4D4=PC+2 ‰SUB.L…D4,D5%‰BEQ‡ER6‘ZERO;SPECIALCASEERROR†1,1 ‰MOVE.L„D5,D4‰RTS PAGE MCHK…DSˆ0“(INDEX12)CHKDIVMUL ‰BSR‡SIZEWORD !‰BSR‡EADADDRDATAADDRESSINGONLY ‰OR.W†D6,D2 ‰BSR‡COMMA ‰BSR‡GETREGD‰BNE‡ER6‘.3,0 ‰ROR.W…#7,D0 ‰OR.W†D0,D2 ‰BRA‡CMMD2S19ŒCMMD2 SPC 4MCLR…DSˆ0“(INDEX13) ‰BSR‡FSIZE ‰BSR‡EADADATAALTERABLEONLY ‰OR.W†D6,D2‰BRA.S…CMMD2S19ŒCMMD2 SPC 4* SIZE = BYTE, WORD, LONGMCMPM„DSˆ0“(INDEX14) ‰BSR‡FSIZE ‰MOVE.L„#$0008,D7‹.3,0‰BSR‡EA’-(A@)ƒONLY ‰AND.W…#7,D6 ‰OR.W†D6,D2 ‰BSR‡COMMA ‰MOVE.L„#$0008,D7‹.3,0‰BSR‡EA ‰AND.W…#7,D6 ‰ROR.W…#7,D6 ‰OR.W†D6,D2CMMD2S20BRA‡CMMD2S19ŒCMMD2 PAGEMEXG…DSˆ0“(INDEX16) ‰BSR‡SIZELONG ‰BSR‡GETREGAD ‰BNE‡ER’.3,0‰MOVE.L„D0,D4D4=REGNUMBER‰MOVE.L„D1,D5D5=REGTYPE ‰BSR‡COMMATESTFORCOMMA ‰BSR‡GETREGAD ‰BNE‡ER’.3,0 ‰CMP.L…D1,D5 ‰BEQ.S…MEXG35ŽBOTHREGSTHESAME *‚DX,AY‚OR‚AY,DX‰OR.W†#$88,D2MODE ‰TST.B…D1 ‰BNE.S…MEXG25 &‰EXG.L…D0,D4SWAPSOURCE&DESTINATION !MEXG25ƒOR.W†D0,D2.......MMMMMYYY ‰ROR.W…#7,D4‰OR.W†D4,D2....XXXMMMMMYYY‰BRA‡CMMD2S20ŒCMMD2 MEXG35ƒOR.W†#$0040,D2‹OP-MODE ‰TST.B…D1‰BEQ‡MEXG25ŽDX,DY ‰OR.W†#$0048,D2‹AX,AY ‰BRA‡MEXG25 ‚PAGEMEXT…DSˆ0“(INDEX17)‰TST.W…TLENGTH(A1)‰BEQ‡ER’BYTESIZENOTALLOWED ‰BSR‡FSIZE.W=........10......&‰ADD.W…#$0040,D2‹.L=........11...... ‰BSR‡GETREGD ‰BNE‡ER’.3,0 ‰OR.W†D0,D2CMMD2S21BRA‡CMMD2S20ŒCMMD2 PAGEMMOVEMƒDSˆ0“(INDEX27)(‰MOVE.W„TLENGTH(A1),D0†SIZEBITS‚76TO6‰BEQ‡ER’BYTE‡00‚ERROR‰LSR.W…#1,D0WORD‡01„0‰AND.W…#$0040,D0‹LONG‡10„1 ‰OR.W†D0,D2 !‰ADD.B…#2,TNB(A1)ŠNUMBEROFBYTES&‰ADD.L…#2,D3FORCESTOREPTRPASTMASK ‰CMP.B…#'A',(A5) ‰BEQ.S…MMM44‰CMP.B…#'D',(A5) ‰BEQ.S…MMM44 )*„,ŽMEMORYTOREGISTER‰OR.W†#$0400,D2‹DIRECTIONBIT "‰MOVE.W„#$7EC,D7ŒMODESALLOWED‘1,1‰BSR‡EA ‰OR.W†D6,D2 ‰BSR‡COMMA ‰BSR.S…MMM48.1,2‰BRA‡CMMD2S21ŒCMMD2™1,2  )*ƒ,REGISTERTOMEMORY MMM44„DSˆ0 * EVALUATE DESTINATION FIRSTMMM46„BSR‡GETCHAR‰CMP.B…#',',D0FINDCOMMA ‰BNE‡MMM46 "‰MOVE.W„#$1F4,D7ŒMODESALLOWED‘1,1‰BSR‡EA ‰OR.W†D6,D2(‰MOVE.L„A5,PENDOP(A1)‡ENDOFOPERAND1,2‰MOVE.L„PTROP(A1),A5#‰BSR.S…MMM48EVALUATEREGISTERSŒ1,23‰MOVE.L„PENDOP(A1),A5‡POINTERTOENDOFOPERAND…1,2‰BRA‡CMMD2S21ŒCMMD2™1,2„PAGE*ˆD6=CORRESPONDENCEMASK*ˆD4=CONTROL‚$FF'-''/'MMM48„CLR.L…D6’MASKš1,2‰MOVE.L„#-1,D4ŽCONTROL=$FF RL111„BSR‡GETCHAR‰CMP.B…#',',D0"‰BEQ.S…RL114DONE;FOUNDCOMMA1,2‰CMP.B…#'',D0.1,2‰BNE.S…RL115NOTSPACE•1,2RL114„RTS›DONEš1,2 RL115„CMP.B…#'/',D0.1,2 ‰BNE.S…RL444 ‰TST.B…D4’CONTROL‰BMI.S…ER11ER‰MOVE.L„D0,D4CONTROL='/'RL333„BSR‡GETREGAD‰BNE.S…ER11ERœ3,0‰OR.B†D0,D1D1=BITPOSITION(‰MOVE.B„D1,D5D5=LASTREGISTERENTERED ‰BSR.S…SETBIT ‰BRA‡RL111 RL444„CMP.B…#'-',D0 ‰BNE.S…RL666 ‰CMP.B…#'/',D4CONTROL‰BNE.S…ER11ER‰MOVE.L„D0,D4CONTROL='-' ‰BSR‡GETREGAD‰BNE.S…ER11ERœ3,0 ‰OR.B†D0,D1‰MOVE.L„D1,D7D7=NOWREGISTER‰MOVE.B„D5,D0D5=LASTREG ‰EOR.B…D1,D0‰AND.B…#$38,D0‰BNE.S…ER11(ER)NOTMATCEDSET ‰CMP.B…D1,D5‰BPL.S…ER11ER RL555„ADD.L…#1,D5 ‰MOVE.L„D5,D1 ‰BSR.S…SETBIT ‰CMP.B…D7,D5 ‰BMI‡RL555 ‰BRA‡RL111 RL666„TST.B…D4‰BPL.S…ER11ER‰MOVE.B„#'/',D4CONTROL='/' ‰SUB.L…#1,A5 ‰BRA‡RL333 ER11…BRA‡ER’.3,0 PAGE5SETBITƒLEA‡MTBL(PC),A0‰SETBITINCORRESPONDENCEMASK ‰MOVE.L„D2,D0‰AND.W…#$38,D0‰CMP.W…#$20,D0‰BNE.S…RL30NOTPREDECREMENT&‰MOVE.B„(A0,D1),D1ŠD1=BIT‚(FORSURE)RL30…BSET†D1,D6 ! /‰MOVE.W„D6,TDATA+2(A1)†SAVECORRESPONDENCEMASK‰RTS /MTBL…DC.B†15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 PAGE*ƒD@,(A@)*ƒ(A@),D@*‰(A@),D@ŒFORCEDTO0(A@),D0*‰D@,(A@)ŒFORCEDTOD0,0(A@)**‚SIZE=WORD,LONGMMOVEPƒDSˆ0“(INDEX33)‰MOVE.W„TLENGTH(A1),D0‰BEQ‡ER11.BYTENOTALLOWED ‰LSR.W…#1,D0‰AND.W…#$0040,D0‰OR.W†D0,D2SIZE ‰MOVE.W„#$25,D7‰BSR‡EA’D6=MODE ‰BSR‡COMMA ‰MOVE.L„D6,D0‰AND.W…#$38,D0 ‰CMP.B…#$0,D0‰BEQ.S…MMP344ŽD@,(A@) *„(A@),D@ ‰BSR‡GETREGD‰BNE.S…ER10ERœ3,0 ‰ROR.W…#7,D0‰OR.W†D0,D2D@ ‰BRA.S…MMP348 (MMP344ƒOR.W†#$0080,D2‹REGISTERTOMEMORY ‰ROR.W…#7,D6‰OR.W†D6,D2D@ ‰MOVE.W„#$24,D7‰BSR‡EAMMP348ƒMOVE.L„D6,D0 ‰AND.W…#7,D6‰OR.W†D6,D2A@ ‰AND.W…#$38,D0‰CMP.B…#$10,D0‰BNE.S…MMP368Ž(A@) 0‰CLR.W…TDATA+2(A1)†FORCEDTOZERO;‚"(A@)"!‰ADD.B…#2,TNB(A1)ŠNUMBEROFBYTES‰ADD.L…#2,D3STOREPOINTERMMP368ƒBRA.S…CMMD2S22ŒCMMD2 PAGEMMOVEQƒDSˆ0“(INDEX34) ‰BSR‡GETIMM ‰MOVE.L„D0,D5 ‰BSR‡EA8BITS-128TO+127 ‰BNE.S…ER10‰OR.B†D5,D2D5=VALUE ‰BSR‡COMMA ‰BSR‡GETREGDD@‰BNE.S…ER10.3,0 ‰ROR.W…#7,D0 MMQ20„OR.W†D0,D2‰BSR.S…SIZELONGCMMD2S22BRA‡CMMD2 'SIZELONGTST.B…TLSPEC(A1)ŠMUSTBE.LONG‰BEQ.S…SI201DEFAULTSIZEOK‰CMP.W…#$0080,TLENGTH(A1)‰BNE.S…ER10NOT.LONG SI201„RTS /SIZEWORDCMP.W…#$0040,TLENGTH(A1)‚MUSTBE.WORD‰BEQ‡SI201…[RTS]‰BRA.S…ER10ER SIZEBYTETST.B…TLSPEC(A1)‰BEQ‡SI201DEFAULTSIZEOK‰TST.W…TLENGTH(A1) ‰BEQ‡SI201 ER10…BRA‡ER PAGE(MMOVE„CMP.W…#8,PRTYPE(A1)‡(INDEX21)”3,0‰BLT.S…MM3068000OR680083,0‰BSR‡GETREGCRŒ.3,0‰BNE.S…MM30NOT"CCR"•3,0+‰MOVE.W„#$42C0,D2‹D2=INSTRUCTIONMASK‰3,0"‰BRA.S…MM313"MOVE.W‚CCR,"Œ3,0MM30 ‰BSR‡GETREGSRŒ.3,0 ‰BNE.S…MM40‰MOVE.W„#$40C0,D2‹.WƒSR, MM313„BSR‡COMMA.3,0 +‰BSR‡EADADATAALTERABLEONLY(DESTINATION) )‰BSR‡SPACETŽLOOKFORSPACETERMINATOR…3,0 MM315„OR.W†D6,D2‰BSR‡SIZEWORDŒ.3,0‰BRA‡MCMMD2Ž.3,0 MM40…BSR‡GETREGUSŒ.3,0 ‰BNE.S…MM50 ‰BSR‡COMMA ‰MOVE.W„#$4E68,D2‹.LƒUSP,A@ ‰BSR‡GETREGA‰BNE‡ER10.3,0 ‰BRA‡MMQ20 !* GET EXCEPTIONS FROM DESTINATION(MM50…BSR‡A5TODESTŒMOVEA5TODESTINATION ‰BSR‡GETREGCRŒ.3,0 ‰BNE.S…MM60‰MOVE.W„#$44C0,D2‹.Wƒ,CCR .MM508„BSR‡SPACETŽLOOKFORSPACETERMINATOR…3,0 ,‰MOVE.L„PTROP(A1),A5ˆA5=POINTERTOOPERAND *‰BSR‡EADADDR„DATAADDRESSINGONLY(SOURCE) ‰BSR‡COMMA ‰BRA‡MM315 MM60…BSR‡GETREGSRŒ.3,0 ‰BNE.S…MM70‰MOVE.W„#$46C0,D2‹.Wƒ,SR ‰BRA‡MM508 MM70…BSR‡GETREGUSŒ.3,0 ‰BNE.S…MM80‰MOVE.W„#$4E60,D2‹.LƒA@,USP)‰BSR‡SPACETŽLOOKFORSPACETERMINATOR…3,0 ‰MOVE.L„PTROP(A1),A5 ‰BSR‡GETREGA‰BNE‡ER10.3,0‰BSR‡COMMA.3,0‰OR.W†D0,D2.3,0‰BSR‡SIZELONGŒ.3,0‰BRA‡MCMMD2Ž.3,0 5MM80…MOVE.L„PTROP(A1),A5ˆA5=POINTERTOSOURCEFIELD ‰BSR‡FSIZEGETSIZE(BITS‚7-6)"‰LSL.W…#6,D2ADJUSTTO(BITS13-12) ‰BTST†#13,D2‰BNE.S…MM804.L10TO10‰ADD.W…#$1000,D2‹.W01TO11‰OR.W†#$1000,D2‹.B00TO01)MM804„BSR‡EAALLSOURCE;ALLMODESALLOWED ‰OR.W†D6,D2 5* IF BITE SIZE; "ADDRESS REGISTER DIRECT" NOT ALLOWED ‰MOVE.L„D2,D0‰AND.W…#$3000,D0‰CMP.W…#$1000,D0‹.1,2‰BNE.S…MM806NOT.BSIZE‰AND.B…#$38,D6.1,2‰CMP.B…#$08,D6 ‰BEQ.S…ER8MM806 ‰BSR‡COMMA $‰MOVE.W„#$1FF,D7ŒDATAALTERABLE+A@‰BSR‡EA  ‰MOVE.L„D6,D0DESTINATION‰AND.W…#$0038,D0‰CMP.W…#$0008,D0‰BEQ‡MMOVEA1A@MAKEMOVEA +* POSITION REGISTER AND MODE OF DESTINATION3MM825„ROR.L…#3,D6RRR..........................MMM‰ROR.W…#3,D6 MMM.............*‰SWAP†D6’MMM.............RRR.............‰ROL.W…#3,D6 .............RRR.‰ROL.L…#1,D6MM..........................RRRM.‰ROL.L…#8,D6....................RRRMMM...... ‰OR.W†D6,D2‰BRA.S…CMMD2S23ŒCMMD2 PAGE MMOVECƒDSˆ0“(INDEX38)68010Ž3,0‰BSR‡SIZELONGŒ.3,0 %‰ADD.B…#2,TNB(A1)ŠNUMBEROFBYTES3,0 '‰BSR.S…MLFSLOOKFORSPECIALSYMBOL‡3,0‰BNE.S…MMOVEC10ŒNOTFOUND•3,0 * Rc,Rn" ‰BSR‡COMMA.3,0 %‰BSR‡GETREGADŒGETREGISTERAORD‹3,0‰BNE.S…ER8‘.3,0‰OR.W†D1,D0.3,0 )MMOVEC05ROR.W…#4,D0RRRR............Ž3,0 ‰OR.W†D6,D0RRRRX0000000000XŽ3,0&‰MOVE.W„D0,TDATA+2(A1)†SECONDWORD“3,0CMMD2S23BRA‡CMMD2.3,0 -MMOVEC10OR.W†#1,D2DIRECTIONBIT(Rn,Rc)‰3,0‰BSR‡GETREGADŒ.3,0‰BNE.S…ER8‘.3,0‰OR.W†D1,D0.3,0 ‰BSR‡COMMA.3,0 ‰BSR.S…MLFS.3,0‰BEQ‡MMOVEC05Œ.3,0ER8†BRA‡ER’.3,0 ** LOOK FOR SPECIAL SYMBOL: SFC DFC USP VBRMLFS…CLR.L…D1’.3,0‰MOVE.B„(A5),D1000Xš3,0‰ASL.L…#8,D100X0š3,0‰MOVE.B„1(A5),D1Œ00XYš3,0‰ASL.L…#8,D10XY0š3,0‰MOVE.B„2(A5),D1Œ0XYZš3,0#‰CLR.L…D6’D6=VALUEFORRETURN‰3,0‰CMP.L…#'SFC'>>8,D1ˆ.3,0‰BEQ.S…MLFS94ŽMATCH™3,0'‰MOVE.L„#1,D6D6=VALUEFORRETURN‰3,0‰CMP.L…#'DFC'>>8,D1ˆ.3,0‰BEQ.S…MLFS94ŽMATCH™3,0*‰MOVE.W„#$800,D6ŒD6=VALUEFORRETURN‰3,0‰CMP.L…#'USP'>>8,D1ˆ.3,0‰BEQ.S…MLFS94ŽMATCH™3,0*‰MOVE.W„#$801,D6ŒD6=VALUEFORRETURN‰3,0‰CMP.L…#'VBR'>>8,D1ˆ.3,0‰BNE.S…MLFS95ŽMISS-MATCH”3,0.MLFS94ƒADD.L…#3,A5ADJUSTGETCHARPOINTER‡3,0MLFS95ƒRTS›.3,0 PAGE MMOVESƒDSˆ0“(INDEX39)68010Ž3,0 ‰BSR‡FSIZEORSIZEINTOD23,0 %‰ADD.B…#2,TNB(A1)ŠNUMBEROFBYTES3,0*‰ADD.L…#2,D3FORCESTOREPTRPASTMASK…3,0 ‰BSR‡GETREGADŒ.3,0‰BEQ.S…MMOVES44ŒRn,—3,0 *ƒ,Rn"‰BSR‡EAM‘MEMORYALTERABLEONLY‰3,0‰OR.W†D6,D2.3,0 ‰BSR‡COMMA.3,0 ‰BSR‡GETREGADŒ.3,0‰BNE‡ER8‘.3,0 ‰OR.W†D1,D0.3,0‰ROR.W…#4,D0.3,0&‰MOVE.W„D0,TDATA+2(A1)†SECONDWORD“3,0CMMD2S24BRA‡CMMD2S23ŒCMMD2™3,0 MMOVES44OR.W†D1,D0.3,0‰ROR.W…#4,D0.3,0 ‰OR.W†#$800,D0ŒDIRECTIONBIT‘3,0&‰MOVE.W„D0,TDATA+2(A1)†SECONDWORD“3,0 ‰BSR‡COMMA.3,0 "‰BSR‡EAM‘MEMORYALTERABLEONLY‰3,0‰OR.W†D6,D2.3,0‰BRA‡CMMD2S24ŒCMMD2™3,0 PAGEMMOVEA1‚CLR.L…D3‰MOVE.B„#2,TNB(A1) MMOVEAƒDSˆ0“(INDEX32),‰MOVE.L„PTROP(A1),A5ˆA5=POINTERTOOPERAND $‰MOVE.W„TLENGTH(A1),D2†D0=SIZE•1,2‰BEQ‡ER’.BYTENOTALLOWED ‰LSL.W…#6,D2.SIZE™1,2‰BTST†#12,D2Ž.1,2‰BEQ.S…MMA225Ž.L=..10•1,2‰OR.W†#$3000,D2‹.W=..11•1,2MMA225 ‰BSR‡EAALLALLMODESALLOWED ‰OR.W†D6,D2 ‰BSR‡COMMA ‰MOVE.W„#$0002,D7‹A@ONLY‰BSR‡EA ‰BRA‡MM825  PAGEMJMP…DSˆ0“(INDEX18)‰TST.B…TLSPEC(A1)Š.1,11‰BEQ.S…MJMP32ŽDEFAULT(ALLOWEITHER.SOR.L)1,1‰MOVE.W„TLENGTH(A1),D0†.1,1‰BEQ‡ER’.BNOTALLOWED1,1'‰MOVE.W„#$6E4,D7ŒD7=MODESALLOWEDŒ1,1‰CMP.W…#$40,D0.1,1,‰BEQ.S…MJMP22Ž.SSPECIFIED(.WACCEPTED)„1,1!‰MOVE.W„#$8764,D7‹MODEFOR.L“1,1MJMP22ƒBSR‡EA’.1,1‰BRA.S…MJMP42Ž.1,1 *MJMP32ƒBSR‡EAC‘CONTROLADDRESSINGONLY‡1,1MJMP42ƒOR.W†D6,D2.1,1‰BRA‡CMMD2S24ŒCMMD2 SPC 4 * SIZE = LONGMLEA…DSˆ0“(INDEX19) ‰BSR‡SIZELONG ‰BSR‡EAC‡CONTROLADDRESSINGONLY ‰OR.W†D6,D2 ‰BSR‡COMMA ‰BSR‡GETREGA‰BNE.S…ER7‘.3,0 ‰ROR.W…#7,D0 MLEA22ƒOR.W†D0,D2.3,0CMMD2S25BRA‡CMMD2S24ŒCMMD2™3,0  PAGE * SIZE = LONGMPEA…DSˆ0“(INDEX36) ‰BSR‡SIZELONG ‰BSR‡EAC‡CONTROLADDRESSINGONLY ‰OR.W†D6,D2‰BRA‡CMMD2S25ŒCMMD2™3,0 SPC 4MSWAP„DSˆ0“(INDEX24) * SIZE WORD‰CMP.W…#$0040,TLENGTH(A1)‰BNE.S…ER7‘NOT.W ‰BSR‡GETREGDD@ONLY‰BEQ‡MLEA22Ž.3,0ER7†BRA‡ER’.3,0 PAGEGETIMMƒCMP.B…#'#',(A5)+‰BNE‡ER7‘.3,0 ‰BSR‡EV’EVALUATEEXPRESSION‰RTS›D0=VALUE MLINK„BSR‡GETREGA(INDEX20)‰BNE‡ER7‘.3,0 ‰OR.W†D0,D2 ‰BSR‡COMMA MRTD…BSR‡GETIMMŽ(INDEX40)”3,0 ‰MOVE.L„D0,D5‰BSR‡EA16BITSŒ-32KTO+32K‰MOVE.W„D0,TDATA+2(A1) ‰ADD.B…#2,TNB(A1)‰BRA‡CMMD2S25ŒCMMD2™3,0 MSTOP„DSˆ0“(INDEX23) * UNSIZED ‰BSR‡GETIMM‰CMP.L…#$00010000,D0‰BCC‡ER7‘.3,0‰MOVE.W„D0,TDATA+2(A1)‰ADD.B…#2,TNB(A1)‰BRA‡CMMD2S25ŒCMMD2™3,0 MTRAP„DSˆ0“(INDEX25) ‰BSR‡GETIMM ‰CMP.L…#16,D0‰BCC‡ER7‘.3,0 ‰OR.W†D0,D2CMMD2S26BRA‡CMMD2S25ŒCMMD2™3,0 PAGEMUNLK„DSˆ0“(INDEX26) * UNSIZED ‰BSR‡GETREGA‰BNE‡ER7‘.3,0 ‰OR.W†D0,D2‰BRA‡CMMD2S26ŒCMMD2™3,0 SPC 4#MDC†DSˆ0“(INDEX37).WONLYALLOWED‰BSR‡EV ‰MOVE.L„D0,D5)‰BSR‡EA16BITONLY.WALLOWED…-32KTO+64K"  ‰MOVE.W„D5,D2‰BRA‡CMMD2S26ŒCMMD2™3,0  ‰END éééééééADCODE68MIDNT†4,3‡ONELINEDISASSEMBLER6800/68008/68010‚01/16/85<********INCLUDEƒCRIGHT.SA‹BringintheCopyrightnotice†JAHI* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;*‚MC68010versionDesignedandWrittenbyR.Duyck02/23/83C*‚Fix‚AppliedƒAuthor„Description...................................D*‚4.3‚01/16/85‚S.Ludwig‚ChangedoutputofMOVEPinst.todec.offsetB*‚4.0‚10/12/83‚R.DuyckƒMOVEM.LD7/A0,64generatedMOVEM.LD7-A0,64I* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *‰XDEF†DCODE68K‰XDEF†DCODE68M ‰XREF†PNT4HX,PNT6HX,PNT8HX‰XREF†FRELADDR ‰XREF†HEX2DEC SPC 1$BUFSIZE‚SET‡80’SIZEOFOUTPUTBUFFER EOT†SET‡4 SPC 1*ˆCALLINGSEQUENCE:$*ƒD0,D1,D2=CODETOBEDISASSEMBLED*‰D3=PROCESSORTYPE*Œ=0000ƒ68000*Œ=0004ƒ68008*Œ=0008ƒ68010*Œ=000Cƒ68020ƒFUTURE,*‰A4=VALUEOFPROGRAMCOUNTERFORTHECODE3*‰A5=POINTERTOSTOREDATA(BUFSIZE=80ASSUMED)**…JSR‡DCODE68M SPC 1 *ˆRETURN:4*ƒA4=VALUEOFPROGRAMCOUNTERFORNEXTINSTRUCTION&*ƒA5=POINTERTOLINEASDISASSEMBLED*ƒA6=POINTERTOENDOFLINE*4* 01234567890123456789012345678901234567890123456789.* AAAAAA FDATA.DDDDDDDDDDDDDD FOC.... FOP..... SPC 1FDATA„EQU‡10‚DATAFIELDFOC†EQU‡31‚OP-CODEFIELDFOP†EQU‡39‚OPERANDFIELD SPC 1* CAUSES ORGIN MODULO 4*‚IFPC=MAKEIT=*‰00‰00*‰02‰04*‰04‰04*‰06‰08 LONG…MACRO‰DSˆ0 ‰DS.B†(*-X)&2‰ENDM SPC 3LOCVARSZEQU18¶3,0‰OFFSET-LOCVARSZ DATA…DS.L†3 HISPC„DS.L†1 PRTYPEƒDS.W†1“PROCESSORTYPE3,0 EAM003ƒEQU‡$003†D@A@£3,04EAM1F4ƒEQU‡$1F4†CONTROLALTERABLE+PREDECREMENTˆ3,0/EAM1FCƒEQU‡$1FC†MEMORYALTERABLEADDRESSING3,0-EAM1FDƒEQU‡$1FD†DATAALTERABLEADDRESSING3,0/EAM1FEƒEQU‡$1FE†ALTERABLEMEMORYADDRESSING3,0'EAM1FFƒEQU‡$1FF†DATAALTERABLE+A@•3,0&EAM7E4ƒEQU‡$7E4†CONTROLADDRESSING–3,0+EAM7ECƒEQU‡$7EC†CONTROL+POSTINCREMENT‘3,0/EAM7FDƒEQU‡$7FD†DATAADDRESSING-IMMEDIATE3,0#EAMFFDƒEQU‡$FFD†DATAADDRESSING™3,0#  PEYcagieq[yjb‰[‘`™i¡[©n±`¹VÁ\É]Ñ?ÙWEAMFFFƒEQU‡$FFF†ALLMODESŸ3,0 SPC 3 ‰SECTIONƒ11XˆDSˆ0‰BASEADDRESSTHISMODULE ‰LONGš.3,0IRTD…BRA‡ILINK44.3,0 ‰LONGš.3,0IMOVECƒBRA‡IMOVEC11ŒMOVEC™3,0 ‰LONGš.3,0IMOVESƒBRA‡IMOVES11ŒMOVES™3,0 ‰LONGš.3,0IEOR…BRA‡IEOR11ŽEOR›3,0‰LONGIQUICKƒBRA‡IQUICKAADDQ‚SUBQ PAGE‰LONG*‚MOVEMREGISTERSTOEA**‚01001D001S......$*‚..........XXXXXX‚EFFECTIVEADDRESS*‚.........0......‚WORD*‚.........1......‚LONG%*‚.....0..........‚REGISTERTOMEMORY%*‚.....1..........‚MEMORYTOREGISTER* IMOVEMFRDSˆ0‰BSR‡MOVEMSŽSIZE ‰MOVE.L„#$0038,D6‹.1,4‰AND.W…(A4),D6.1,4‰CMP.W…#$0020,D6‰BEQ.S…IM7788ŽPREDECREMENTMODE -‰MOVE.L„#1,D6D6=INCREMENTER(BITPOSITION)‰MOVE.L„#0,D1D1=BITPOSITION ‰BRA.S…IM7799 4IM7788ƒMOVE.L„#-1,D6ŽD6=DECREMENTER(BITPOSITION) ‰MOVE.L„#15,D1ŽD1=BITPOSITION!IM7799ƒBSR‡MOVEMRŽBUILDMASKWORD SPC 1‰MOVE.B„#',',(A6)+ŒSTORECOMMA SPC 1 ‰ADD.L…#2,D3‰MOVE.W„(A4),D4)‰MOVE.W„#EAM1F4,D7ŠCONTROL+PREDECREMENT‰BSR‡EA‰BRA.S…CS16COMMON SPC 1‰LONG*MOVEM‚EA‚TOREGISTERS*IMOVEMTRBSR‡MOVEMSŽSIZE ‰ADD.L…#2,D3*‰MOVE.W„#EAM7EC,D7ŠCONTROL+POSTINCREMENT‰BSR‡EA SPC 1‰MOVE.B„#',',(A6)+ŒSTORECOMMA SPC 1+‰MOVE.L„#1,D6D6=BITPOSITIONINCREMENTER‰MOVE.L„#0,D1D1=BITPOSITION ‰BSR‡MOVEMR SPC 1CS16…BRA.S…CS15COMMON SPC 1 PAGE‰LONG ISTOP„DSˆ0‰MOVE.W„2(A4),D0‰MOVE.B„#'#',(A6)+ŠIMMEDIATE‰MOVE.B„#'$',(A6)+ŠHEX‰BSR‡PNT4HXŽVALUE ‰BRA‡COMMON4 PAGE‰LONG#IMMED„DSˆ0“ADD‚AND‚CMP#‚EOR‚OR‚SUB ‰BSR‡FORMSIZE‰ADD.L…#2,D3SIZE=4‰MOVE.B„#'#',(A6)+ŠIMMEDIATE SPC 1 ‰CLR.L…D0$‰MOVE.W„2(A4),D0ŒD0=EXTENSIONWORD‰MOVE.W„(A4),D1 ‰LSR.W…#6,D1 ‰AND.W…#3,D1‰BEQ.S…IMMED65ƒ.BYTE SPC 1 ‰CMP.B…#1,D1‰BEQ.S…IMMED75ƒ.WORD SPC 1‰ADD.L…#2,D3.LONG„SIZE=6)‰MOVE.L„2(A4),D0ŒD0=LONGEXTENSIONWORD SPC 1IMMED45‚BSR‡HEX2DECDECIMAL SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASEPARATOR ‰MOVE†(A4),D0‰AND.W…#$003F,D05‰CMP.W…#$003C,D0‹DESTINATIONADDRESSMODE111100‚"SR"‰BNE.S…IMMED55NOTFOUND ‰MOVE.W„(A4),D0"SR"‚ILLEGALFOR‰AND.W…#$4000,D0ADDIƒSUBI‚CMPI‰BNE‡FERROR’0600ƒ0400‚0C00 ‰MOVE.W„(A4),D1‰AND.W…#$00C0,D1‰CMP.W…#$0080,D1‰BEQ‡FERRORŽ.LONGNOTALLOWED +‰MOVE.B„#'S',(A6)+#,SRFORANDI,EORI,ORI‰MOVE.B„#'R',(A6)+CS15…BRA.S…CS14”COMMON SPC 1IMMED55‚BSR‡EA‰BRA.S…CS14•COMMON *IMMED65‚MOVE.L„D0,D1D1=XXXXXXXX........"‰LSR.W…#8,D1D1=00000000XXXXXXXX‰BEQ.S…IMMED75 ‰MOVE.L„D0,D1 ‰ASR.W…#7,D1‰ADD.W…#1,D1CHECKFORNEGATIVE ‰BNE‡FERROR IMMED75‚EXT.L…D0 ‰BRA‡IMMED45 PAGE*ƒBIT‚5432109876543210,*ˆ....RRRMMM......„DESTINATIONREGISTERMODE'*ˆ..........MMMRRR„SOURCEMODEREGISTER*ˆ0001............„.BYTE*ˆ0011............„.WORD*ˆ0010............„.LONG*6* IF BYTE SIZE; DESTINATION ADDRESS DIRECT NOT ALLOWED‰LONG IMOVE„DSˆ0 ‰BRA‡IMOVEA1 SPC 2‰LONG ILINK„DSˆ0‰BSR.S…FORMREGA SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASERARATOR SPC 1)ILINK44‚MOVE.B„#'#',(A6)+Š(RTD68010)“3,0‰MOVE.W„2(A4),D0 ‰EXT.L…D0!‰BSR‡HEX2DECDECIMALDISPLACEMENT ‰BRA‡COMMON4 PAGE‰LONGFORM1„DSˆ0“CLR‚NEG‚NEGX‚NOTTST‰BSR.L…FORMSIZE SPC 1 *œNBCDTAS!FORM1AƒBSR‡EA’DATAALTERABLEONLYCS14…BRA.S…CS13COMMON SPC 1‰LONGFORM3„DSˆ0“EXT‚SWAP‰BSR.S…FORMREGD‰BRA.S…CS13COMMON SPC 1‰LONGFORM4„DSˆ0“TRAP‰MOVE.B„#'#',(A6)+‰MOVE.W„(A4),D0‰AND.L…#$0F,D0‰BSR‡HEX2DECDECIMAL‰BRA.S…CS13COMMON SPC 1‰LONGFORM5„DSˆ0“UNLNK‰BSR.S…FORMREGA‰BRA.S…CS13‘COMMON‚PAGE*…5432109876543210#*…....RRR.........‡ADDRESSREGISTER$*…..........XXXXXX‡EFFECTIVEADDRESS*‰LONGFORM6AƒDSˆ0“LEA%‰MOVE.W„#EAM7E4,D7ŠCONTROLADDRESSING ‰BSR.S…EA10 SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASEPAR# ATOR SPC 1‰MOVE.W„(A4),D4 ‰ROL.W…#7,D4‰BSR.S…FORMREGA‰BRA.S…CS13‘COMMON SPC 1*ƒBIT‚5432109876543210 *ˆ....DDD.........„DATAREGISTER$*ˆ..........XXXXXX„EFFECTIVEADDRESS*‰LONG#FORM6DƒDSˆ0“CHK‚DIVS‚DIVU‚MULS‚MULU"‰MOVE.W„#EAMFFD,D7ŠDATAADDRESSING ‰BSR.S…EA10 SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASEPARATOR SPC 1‰MOVE.W„(A4),D4 ‰ROL.W…#7,D4‰BSR.S…FORMREGD‰BRA.S…CS13COMMON SPC 1$FORMREGAMOVE.B„#'A',(A6)+ŠFORMATA@FORMREG5AND.B…#$07,D4 ‰OR.B†#'0',D4‰MOVE.B„D4,(A6)+‰RTS SPC 1$FORMREGDMOVE.B„#'D',(A6)+ŠFORMATD@ ‰BRA‡FORMREG5 SPC 1*‚BIT‚5432109876543210!*‡....DDD......DDD…DATAREGISTERS*‰LONGFORM7„DSˆ0“EXG ‰ROL.W…#7,D4 ‰BSR‡FORMREGD SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASEPARATOR SPC 1‰MOVE.W„(A4),D4 ‰BSR‡FORMREGD‰BRA.S…CS13COMMON SPC 1*‚BIT‚5432109876543210$*‡....AAA......AAA…ADDRESSREGISTERS*‰LONGFORM8„DSˆ0“EXG ‰ROL.W…#7,D4 ‰BSR‡FORMREGA SPC 1)FORM815‚MOVE.B„#',',(A6)+ŠCOMMASEPARATOR SPC 1‰MOVE.W„(A4),D4 ‰BSR‡FORMREGACS13…BRA.S…CS12ACOMMON SPC 1*‚BIT‚5432109876543210 *‡....DDD.........…DATAREGISTER#*‡.............AAA…ADDRESSREGISTER*‰LONGFORM9„DSˆ0“EXG ‰ROL.W…#7,D4‰BSR‡FORMREGD‚DATAREGISTER ‰BRA‡FORM815 SPC 3 EA10…BRA‡EA PAGE*ƒ5432109876543210$*ƒ..........AAAAAA‰EFFECTIVEADDRESS*ƒ.......MMM......‰OP-MODE*ƒ....RRR.........‰D-REGISTER*ƒ.......011......‰WORD‚EA,A@*ƒ.......111......‰LONG‚EA,A@C*ƒ.......000......‰EA,D@BYTE(ADDRESSREGISTERDIRECTNOTALLOWED)*ƒ.......0........‰EA,D@*ƒ.......1........‰D@,EA*ƒ........00......‰BYTE*ƒ........01......‰WORD*ƒ........10......‰LONG*‰LONG%*œADD,A@ƒCMP,A@ƒSUB,A@FORM10EXDSˆ0“ADD‚CMP‚SUB$‰MOVE.W„#EAMFFF,D7ŠALLMODESALLOWED ‰MOVE.L„D4,D0‰AND.W…#$01C0,D0‰BEQ.S…FORM103.......000......‰CMP.W…#$01C0,D0 ‰BEQ.S…FORM10E3Œ.......111......‰CMP.W…#$00C0,D0‰BNE.S…FORM10E6 0‰MOVE.B„#'.',(A5)+Š.......011......‡STOREPERIOD‰MOVE.B„#'W',(A5)+‰BRA.S…FORM10E4 SPC 1FORM10E3MOVE.B„#'.',(A5)+‰MOVE.B„#'L',(A5)+ FORM10E4BSR‡EA10 SPC 1&‰MOVE.B„D5,(A6)+ŒSTORECOMMASEPARATOR SPC 1‰MOVE.W„(A4),D4 ‰ROL.W…#7,D4‰BSR‡FORMREGAŒ,A@CS12A„BRA.S…CS12COMMON FORM10E6BTST.B„#0,(A4)'‰BNE.S…FORM105.......1........„D@,'‰BRA.S…FORM104.......0........„,D@ PAGE*ƒ5432109876543210$*ƒ..........AAAAAA‰EFFECTIVEADDRESS*ƒ.......MMM......‰OP-MODE*ƒ....RRR.........‰D-REGISTER*ƒ.......0........‰EA,D@*ƒ.......1........‰D@,EA*ƒ........00......‰BYTE*ƒ........01......‰WORD*ƒ........10......‰LONG‰LONGFORM10ƒDSˆ0“AND‚OR—3,0‰BTST.B„#0,(A4)‰BNE.S…FORM105 SPC 1)FORM103‚MOVE.W„#EAMFFD,D7ŠDATAADDRESSINGFORM104‚BSR‡FORMSIZE‰BSR‡EA10,D@ SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASEPARATOR SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4 ‰BSR‡FORMREGD‰BRA.S…CS12COMMON SPC 1FORM105‚BSR‡FORMSIZEŒD@,‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4 ‰BSR‡FORMREGD SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASEPARATOR ‰MOVE.W„(A4),D42‰MOVE.W„#EAM1FE,D7ŠALTERABLEMEMORYADDRESSINGƒ3,0 ‰BSR‡EA10CS12…BRA.S…CS11A PAGE‰LONG*œPEA…(JMP‚JSR)+FORM11ƒMOVE.W„#EAM7E4,D7ŠCONTROLADDERSSING ‰BSR‡EA10‰BRA.S…CS11A…COMMON ‰LONG *œJMP‚JSR+FORM11SLMOVE.L„D4,D0LOOKFOR.S‚OR‚.L‹1,4‰AND.W…#$3F,D0.1,4‰CMP.W…#$38,D0.1,4‰BNE.S…FORM112NOT.S˜1,4‰MOVE.B„#'.',(A5)+ŠPERIOD˜1,4‰MOVE.B„#'S',(A5)+ŠS1,4FORM112‚CMP.W…#$39,D0.1,4‰BNE.S…FORM114.1,4‰MOVE.B„#'.',(A5)+ŠPERIOD˜1,4‰MOVE.B„#'L',(A5)+ŠL1,4FORM114‚BRA‡FORM11Ž.1,4‚SPC5‰LONGIMOVEPƒBRA‡IMOVEP1.3,0 PAGE* BIT 5432109876543210,*…....XXX.....0...‡DATADESTINATIONREGISTER#*…....XXX.....1...‡ADDRESSREGISTER*…....XXX.00......‡BYTE*…........01......‡WORD*…........10......‡LONG1*…............0...‡DATAREGISTERTODATAREGISTER#*…............1...‡MEMORYTOMEMORY'*…............0XXX‡DATASOURCEREGISTER**…............1XXX‡ADDRESSSOURCEREGISTER*‰LONGFORM12ƒDSˆ0“ABCD‚ADDX‚SBCD‚SUBX ‰BSR‡FORMSIZE SPC 1 ‰BTST†#3$ ,D4‰BNE.S…FORM125 SPC 1"‰BSR‡FORMREGDŒD@,D@;ƒFORMATSOURCE SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASEPARATOR SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4 ‰BSR‡FORMREGDŒFORMATDESTINATIONCS11A„BRA.S…CS11COMMON SPC 1FORM125‚MOVE.B„#'-',(A6)+Š-‰MOVE.B„#'(',(A6)+Š(‰BSR‡FORMREGAŒA@„SOURCE SPC 1‰MOVE.L„#'(-,)',D0‹),-(‰BSR.S…SCHRSTORECHARS SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4‰BSR‡FORMREGAŒA@ƒDESTINATION‰MOVE.B„#')',(A6)+‰BRA.S…CS11COMMON PAGE* BIT 5432109876543210/*…....XXX.....1...‡ADDRESSREGISTER„DESTINATION*…....XXX.00......‡BYTE*…........01......‡WORD*…........10......‡LONG#*…............1...‡MEMORYTOMEMORY**…............1XXX‡ADDRESSSOURCEREGISTER*‰LONGFORM12A‚DSˆ0“CMPM ‰BSR‡FORMSIZE SPC 1‰MOVE.B„#'(',(A6)+Š(‰BSR‡FORMREGAŒA@ SPC 1‰MOVE.L„#'(,+)',D0‹)+,(‰BSR.S…SCHRSTORECHARS SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4‰BSR‡FORMREGAŒA@‰MOVE.B„#')',(A6)+‰MOVE.B„#'+',(A6)+CS11…BRA‡COMMON PAGE* BIT 5432109876543210*…0111...0........‡FIXED *…....RRR.........‡DATAREGISTER%*…........DDDDDDDD‡SIGNEXTENDEDDATA*‰LONG IMOVEQƒDSˆ0‰MOVE.B„#'#',(A6)+ŠIMMEDIATE SPC 1‰MOVE.W„(A4),D0 ‰EXT.W…D0 ‰EXT.L…D0‰BSR‡HEX2DECDECIMAL SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASEPARATOR SPC 1 ‰ROL.W…#7,D4 ‰BSR‡FORMREGD‰BRA‡CS11COMMON PAGE"SCHR…MOVE.B„D0,(A6)+ŒOUTPUTSTRING ‰LSR.L…#8,D0‰BNE‡SCHRMORETOOUTPUT‰RTS SPC 2 *MOVEFROMSR‚(STATUSREGISTER)*‰LONGIMVFSRƒMOVE.L„#',RS'>>8,D0‹SR, SPC 1 ‰BSR‡SCHR‰BSR.S…EA11(EA)‚DATAALTERABLE‰BRA‡CS11COMMON SPC 1$* MOVE FROM USP (USER STACK POINTER)*‰LONGIMVFUSP‚MOVE.L„#',PSU',D0ŠUSP, ‰BSR‡SCHR ‰BSR‡FORMREGA‰BRA‡CS11’COMMON SPC 1* MOVE TO SR (STATUS REGISTER)*‰LONG(IMVTSRƒMOVE.W„#EAMFFD,D7ŠDATAADDRESSING‰BSR.S…EA11EA‰MOVE.L„#'RS,'>>8,D0ˆ,SRIMVT44ƒBSR‡SCHRCS11B„BRA‡CS11COMMON˜3,0 SPC 1"* MOVE TO USP (USER STACK POINTER)*‰LONGIMVTUSP‚BSR‡FORMREGA‰MOVE.L„#'PSU,',D0Š,USP ‰BRA‡IMVT44 SPC 1'*‚MOVETOCCR(CONDITIONCODEREGISTER)*‰LONG)IMVTCCR‚MOVE.W„#EAMFFD,D7ŠDATAADDRESSING‰BSR.S…EA11EA‰MOVE.L„#'RCC,',D0Š,CCR ‰BRA‡IMVT44 3*‚MOVEFROMCCR(CONDITIONCODEREGISTER)‡680103,0*Ä3,0 ‰LONGš.3,0"IMVTFCR‚MOVE.L„#',RCC',D0ŠCCR,š3,0‰BSR‡SCHR.3,0&‰MOVE.W„#EAMFFD,D7ŠDATAADDRESSING3,0‰BSR.S…EA11EAœ3,0‰BRA‡CS11BCOMMON˜3,0 PAGE‰LONG2CS21…BRA‡COMMON‹COMMOM„NOPRESETRTERTRRTSTRAPV SPC 1‰LONG!SCC†BSR‡ICCCCGETRESTOFOP-CODE‰BSR.S…EA11(EA)DATAALTERABLE ‰BRA‡CS21 EA11…BRA‡EA  ‰LONGIDBCC„DSˆ0“DB--‰MOVE.W„(A4),D4 ‰BSR‡FORMREGD ‰MOVE.B„D5,(A6)+ŠCOMMASEPARATOR&‰MOVE.B„#'$',(A6)+ŠHEXFIELDTOFOLLOW ‰BSR‡ICCCC ‰BRA.S…ICC55 SPC 1*‚BIT‚5432109876543210*‡0110............…FIXED*‡....CCCC........…CONDITION*‡........DDDDDDD0…DISPLACEMENT3*‡...............1…ERROR(ODDBOUNDRYDISPLACEMENT)*‰LONG ICC†DSˆ0“B-- ‰BSR‡ICCCC SPC 1IBSR…MOVE.B„#'$',(A6)+ŠBSRƒBRA SPC 1 ‰TST.B…D4 ‰BEQ.S…ICC5516BITDISPLACEMENT SPC 1‰MOVE.B„#'.',(A5)+‰MOVE.B„#'S',(A5)+‰EXT.W…D4’8BITDISPLACEMENT SPC 1)ICC35„EXT.L…D4’SIGN-EXTENDEDDISPLACEMENT%‰ADD.L…HISPC(A1),D4‡+PROGRAMCOUNTER‰ADD.L…#2,D4+TWO ‰MOVE.L„D4,D0 ‰ASR.L…#1,D4$‰BCS‡FERRORŽODDBOUNDRYDISPLACEMENT ‰BSR‡PNT6HX ‰BRA‡CS21 SPC 1ICC55„ADD.L…#2,D3SIZE‰MOVE.W„2(A4),D4‰MOVE.B„#'.',(A5)+-‰MOVE.B„#'L',(A5)+Š.LFOR16BITDISPLACEMENT ‰BRA‡ICC35 PAGE‰LONG*šBCHG‚BCLR‚BSET‚BTSTISETD„DSˆ0“DYNAMICBIT ‰ROL.W…#7,D4‰BSR‡FORMREGDŒDATAREGISTER SPC 1'ISETD12‚MOVE.B„D5,(A6)+ŠCOMMASEPARATOR SPC 1‰AND.W…#$00C0,D4‹.3,0‰BEQ.S…ISET25ŽBTSTš3,0ISET21ƒMOVE.W„(A4),D4.3,0)‰BSR‡EA’DATAALTERABLEBCHGBCLRBSET3,0CS18…BRA‡CS21SCOMMON—3,0ISET25ƒMOVE.W„#EAM7FD,D7Š.3,0‰BRA‡ISET21ŽBTSTš3,0 SPC 3‰LONG*œBCHG‚BCLR‚BSET‚BTST5*‚1STWORD…..........XXXXXX„EAƒDATAALTERABLEONLY*........00......„BTST*........01......„BCHG*........10......„BCLR*........$ 11......„BSET)*‚2NDWORD…00000000000YYYYY„BITNUMBER*ISETS„DSˆ0“STATICBIT‰ADD.L…#2,D3…SIZE‰MOVE.B„#'#',(A6)+ŠIMMEDIATE ‰CLR.L…D0/‰MOVE.W„2(A4),D0ŒGETBITPOSITIONFROM2NDWORD ‰MOVE.L„D0,D1 ‰LSR.L…#5,D1 ‰BNE‡FERROR‰BSR‡HEX2DECDECIMAL SPC 1 ‰BRA‡ISETD12 PAGE*ƒBIT‚5432109876543210+*ˆ....XXX.........„IMMEDIATECOUNT/REGISTER*ˆ.......0........„RIGHTSHIFT*ˆ.......1........„LEFTSHIFT*ˆ........00......„BYTE*ˆ........01......„WORD*ˆ........10......„LONG *ˆ....0...11......„WORD(MEMORY)$*ˆ....0...11AAAAAA„EFFECTIVEADDRESS(*ˆ..........0.....„SHIFTIMMEDIATECOUNT;*ˆ..........1.....„SHIFTCOUNT(MODULO64)INDATAREGISTER*‰LONGISHIFTƒDSˆ0“AS-‚LS-‚RO-‚ROX-‰MOVE.W„#'LR',D0‰BTST†#8,D4DIRECTIONBIT‰BEQ.S…ISHIFT13ŒRIGHT‰LSR.W…#8,D0LEFT.ISHIFT13MOVE.B„D0,(A5)+ŒDIRECTION;"L"OR"R" SPC 1‰MOVE.W„(A4),D0‰AND.W…#$00C0,D0‰CMP.W…#$00C0,D0‰BEQ.S…ISHIFTM1ŒMEMORYSHIFT SPC 1 ‰BSR‡FORMSIZE SPC 1 ‰ROL.W…#7,D4‰BTST†#12,D4ŽI/RBIT!‰BNE.S…ISHIFT33ŒCOUNTINREGISTER SPC 1‰AND.B…#$07,D4IMMEDIATECOUNT‰BNE.S…ISHIFT23"‰OR.B†#$08,D4CHANGEZEROTOEIGHTISHIFT23OR.B†#'0',D4‰MOVE.B„#'#',(A6)+‰MOVE.B„D4,(A6)+‰BRA.S…ISHIFT44 SPC 1ISHIFT33BSR‡FORMREGD SPC 1(ISHIFT44MOVE.B„D5,(A6)+‹COMMASEPARATOR SPC 1‰MOVE.W„(A4),D4 ‰BSR‡FORMREGDCS17…BRA‡CS18COMMON SPC 1!ISHIFTM1MOVE.B„#'.',(A5)+ŠPERIOD‰MOVE.B„#'W',(A5)+Š.WORD ‰BTST†#11,D4‰BNE‡FERRORŽBIT11MUSTBEZERO SPC 1.‰MOVE.W„#EAM1FC,D7ŠMEMORYALTERABLEADDRESSING‰BSR‡EA‰BRA‡CS17COMMON PAGE.ICCCC„MOVE.L„#$0F,D0APPENDCONDITIONCODE‰1,4‰AND.B…(A4),D0D0=CCC–1,4‰LSL.L…#1,D0D0=CCC*2 SPC 1-‰MOVE.W„BRTBL(PC,D0.W),D1ƒGETBRANCHMNEMONIC*‰MOVE.B„D1,(A5)+Œ(REVERSED)FROMTHETABLE)‰LSR.W…#8,D1ANDADDTHENONBLANKPORTION‰CMP.B…#'',D1TOTHEBUFFER. ‰BEQ.S…ICCCC9‰MOVE.B„D1,(A5)+ ICCCC9ƒRTS SPC 2!BRTBL„DC.B†'T'†'T'‚BRAACCEPTED‰DC.B†'F'†'F'‰DC.B†'IH'†'HI'‰DC.B†'SL'†'LS'‰DC.B†'CC'†'CC'‰DC.B†'SC'†'CS'‰DC.B†'EN'†'NE'‰DC.B†'QE'†'EQ'‰DC.B†'CV'†'VC'‰DC.B†'SV'†'VS'‰DC.B†'LP'†'PL'‰DC.B†'IM'†'MI'‰DC.B†'EG'†'GE'‰DC.B†'TL'†'LT'‰DC.B†'TG'†'GT'‰DC.B†'EL'†'LE' PAGE*ƒBIT‚5432109876543210,*ˆ....RRRMMM......„DESTINATIONREGISTERMODE'*ˆ..........MMMRRR„SOURCEMODEREGISTER*4* IF BYTE SIZE; ADDRESS DIRECT NOT ALLOWED AS SOURCE* IMOVEA1‚DSˆ0 ‰MOVE.W„#EAMFFF,D7ŠALLMODES•3,0‰MOVE.B„(A4),D0.3,0‰AND.B…#$30,D0.3,0‰CMP.B…#$10,D0.3,0 ‰BNE.S…IMOVE16NOTBYTESIZE‘3,0*‰MOVE.W„#EAMFFD,D7ŠALLMODESEXCEPTA@‹3,0IMOVE16‚BSR‡EA SPC 1 ‰MOVE.B„D5,(A6)+ŒCOMMASEPARATOR SPC 1 ‰MOVE.W„(A4),D4....RRRMMM......‰LSR.W…#1,D4.....RRRMMM.....‰LSR.B…#5,D4.....RRR.....MMM‰ROR.W…#8,D4.....MMM.....RRR‰LSL.B…#5,D4.....MMMRRR.....‰LSR.W…#5,D4..........MMMRRR SPC 1%* IF .BYTE DESTINATION A@ NOT ALLOWED&‰MOVE.W„#EAM1FF,D7ŠDATAALTERABLE+A@‰MOVE.B„(A4),D0‰AND.B…#$30,D0.3,0‰CMP.B…#$10,D0.3,0‰BNE.S…IMOVE19NOTBYTESIZE !‰MOVE.W„#EAM1FD,D7ŠDATAALTERABLEIMOVE19 ‰BSR‡EA‰BRA.S…CS19†COMMON PAGE.*‚IFBYTE;ADDRESSREGISTERDIRECTNOTALLOWEDIQUICKA‚DSˆ0“ADDQ‚SUBQ‰BSR.S…FORMSIZE SPC 1‰MOVE.B„#'#',(A6)+ ‰ROL.W…#7,D4 ‰AND.B…#7,D4‰BNE.S…IQUICK21 ‰OR.B†#8,D4MAKEZEROINTOEIGHT IQUICK21OR.B†#'0',D4MAKEASCII‰MOVE.B„D4,(A6)+ SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASEPARATOR SPC 1‰MOVE.W„(A4),D4 ‰MOVE.W„(A4),D0‰AND.W…#$00C0,D0‰BEQ.S…IQUICK31ŒDATAALTERABLE&‰MOVE.W„#EAM1FF,D7ŠDATAALTERABLE+A@IQUICK31BSR‡EACS19…BRA‡COMMON PAGE*‚BITƒ5432109876543210*ˆ........00......„BYTE*ˆ........01......„WORD*ˆ........10......„LONG*ˆ........11......„ERROR* FORMSIZEDSˆ0‰MOVE.W„(A4),D2‰MOVE.B„#'.',(A5)+ŠSTOREPERIOD ‰LSR.W…#6,D2‰AND.W…#$03,D2 ‰BNE.S…FORM91‰MOVE.B„#'B',(A5)+ŠSTORE"B" ‰BRA.S…FORM95 SPC 1FORM91ƒMOVE.B„#'W',D0 ‰CMP.B…#1,D2 ‰BEQ.S…FORM93‰MOVE.B„#'L',D0 ‰CMP.B…#2,D2‰BNE.S…FE10FERROR'FORM93ƒMOVE.B„D0,(A5)+‚STORE"W"O% R"L" FORM95ƒRTS PAGEEA000„BSR‡FORMREGD ‰BTST†#0,D7‰BEQ.S…FE10FERROR‰RTS SPC 2EA001„BSR‡FORMREGA ‰BTST†#1,D7(‰BEQ.S…FE10ŽFERROR‡THISMODENOTALLOWED‰RTS SPC 2EA010„MOVE.B„#'(',(A6)+ ‰BSR‡FORMREGA‰MOVE.B„#')',(A6)+ ‰BTST†#2,D7(‰BEQ.S…FE10ŽFERROR‡THISMODENOTALLOWED‰RTS SPC 2EA011„MOVE.B„#'(',(A6)+ ‰BSR‡FORMREGA‰MOVE.B„#')',(A6)+‰MOVE.B„#'+',(A6)+ ‰BTST†#3,D7(‰BEQ.S…FE10†FERROR…THISMODENOTALLOWED EA011RTS RTS SPC 2EA100„MOVE.B„#'-',(A6)+‰MOVE.B„#'(',(A6)+ ‰BSR‡FORMREGA‰MOVE.B„#')',(A6)+ ‰BTST†#4,D7 ‰BNE‡EA011RTS%FE10…BRA‡FERRORŽTHISMODENOTALLOWED PAGE"*‚ENTER‡A4=POINTERTOFIRSTWORD*ŽD3=OFFSETTOEXTENSION*ŽD4=VALUETOPROCESS*ŽD7=MODESALLOWEDMASK*EA‡DSˆ0 ‰MOVE.L„D4,D0 ‰LSR.W…#3,D0 ‰AND.W…#$7,D0 ‰BEQ‡EA000 SPC 1 ‰CMP.B…#1,D0 ‰BEQ‡EA001 SPC 1 ‰CMP.B…#2,D0 ‰BEQ‡EA010 SPC 1 ‰CMP.B…#3,D0 ‰BEQ‡EA011 SPC 1 ‰CMP.B…#4,D0 ‰BEQ‡EA100 SPC 1 ‰CMP.B…#5,D0 ‰BEQ.S…EA101 SPC 1 ‰CMP.B…#7,D0 ‰BEQ.S…EA111 PAGE*„EXTENSIONWORD*ƒBIT‚5432109876543210 *ˆ0...............„DATAREGISTER#*ˆ1...............„ADDRESSREGISTER*ˆ.RRR............„REGISTER@*ˆ....0...........„SIGNEXTENDED,LOWORDERINTEGERININDEXREG/*ˆ....1...........„LONGVALUEININDEXREGISTER*ˆ.....000........'*ˆ........DDDDDDDD„DISPLACEMENTINTEGER*,*EA110ŒADDRESSREGISTERINDIRECTWITHINDEX SPC 1 ‰BTST†#6,D7&‰BEQ‡FE10ŽFERROR…THISMODENOTALLOWED ‰MOVE.W„(A4,D3),D1‰AND.W…#$0700,D1'‰BNE‡FE10FERROR„BITS10-8MUSTBEZERO $‰MOVE.W„(A4,D3),D0ŠD0=DISPLACEMENT ‰EXT.W…D0 ‰EXT.L…D0‰BSR‡HEX2DECDECIMAL‰MOVE.B„#'(',(A6)+Š( SPC 1‰BSR‡FORMREGAŒXX(A@ SPC 1‰MOVE.B„#',',(A6)+ŠXX(A@, SPC 1‰MOVE.B„(A4,D3),D4 ‰ASR.B…#4,D4 ‰BPL.S…EA1105 ‰BSR‡FORMREGA ‰BRA.S…EA1107 SPC 1EA1105ƒBSR‡FORMREGD"EA1107ƒMOVE.B„#'.',(A6)+ŠXX(A@,X@. SPC 1‰MOVE.W„(A4,D3),D4ŠD4=R@‰MOVE.B„#'W',D0..........W ‰BTST†#11,D4 ‰BEQ.S…EA1109‰MOVE.B„#'L',D0..........LEA1109ƒMOVE.B„D0,(A6)+‰MOVE.B„#')',(A6)+Š...........) ‰ADD.L…#2,D3‰RTS PAGE-* ADDRESS REGISTER INDIRECT WITH DISPLACEMENT* EA101„BTST†#5,D7101000;ƒDIS(A@))‰BEQ.S…FE11FERROR;‚THISMODENOTALLOWED ‰MOVE.W„(A4,D3),D0 ‰EXT.L…D0‰BSR‡HEX2DECDECIMAL‰ADD.L…#2,D3SIZE ‰BRA‡EA010 PAGE*‚111000ŠABSOLUTESHORT*‚111001ŠABSOLUTELONG**‚111010ŠPROGRAMCOUNTERWITHDISPLACEMENT#*‚111011ŠPROGRAMCOUNTERWITHINDEX *‚111100ŠIMMEDIATEORSTATUSREG*EA111 ‰AND.W…#7,D4 ‰BNE.S…EA1112 SPC 1 ‰BTST†#7,D7)‰BEQ.S…FE11FERROR;‚THISMODENOTALLOWED )‰MOVE.W„(A4,D3),D0Š111000;ƒABSOLUTESHORT ‰EXT.L…D0‰MOVE.B„#'$',(A6)+#‰BSR‡PNT8HXŽSIGNEXTENDEDVALUE‹1,3‰ADD.L…#2,D3SIZE+2‰RTS SPC 1EA1112ƒCMP.B…#1,D4 ‰BNE.S…EA1113 SPC 1 ‰BTST†#8,D7)‰BEQ.S…FE11FERROR;‚THISMODENOTALLOWED ‰MOVE.B„#'$',(A6)+ŠHEX(‰MOVE.L„(A4,D3),D0Š111001;…ABSOLUTELONG ‰BSR‡PNT8HX**-MOVE.B„#'.',(A6)+ŠFORCELONGFORMAT“1,3*-MOVE.B„#'L',(A6)+ŠIEƒ.L1,3 ‰ADD.L…#4,D3‰RTS SPC 1EA1113ƒCMP.B…#2,D4 ‰BNE.S…EA1114 SPC 1 ‰BTST†#9,D7‰BNE.S…EA1113A%FE11…BRA‡FERRORŽTHISMODENOTALLOWEDEA1113A <‰MOVE.W„(A4,D3),D0‚111010;ƒPC+DISPLACEMENT‚DESTINATION(PC) ‰EXT.L…D0‰ADD.L…HISPC(A1),D0*‰ADD.L…D3,D0ADJUSTFOREXTENSIONWORD…3,0‰MOVE.B„#'$',(A6)+ŠHEX"$"—1,3‰BSR‡PNT8HXŽDESTINATION‰MOVE.L„#')CP(',D0Š(PC)‰BSR‡SCHRSTOREWORD‰ADD.L…#2,D3SIZE‰RTS SPC 1EA1114ƒCMP.B…#3,D4 ‰BNE.S…EA1115 PAGE1*PROGRAMCOUNTERWITHINDEX„DESTINATION(PC,R@.X)**‚5432109876543210…SECONDWORD *‚0...............ŠDATAREGISTER#*‚1...............ŠADDRESSREGISTER*‚.XXX............ŠREGISTER8*‚....0...........ŠSIGN-EXTENDED,LOWORDERWORDINTEGER*œ..ININDEXREGISTER/*‚....1...........ŠLONGVALUEININDEXREGISTER*‚.....000........'*‚........XXXXXXXXŠDISPLACEMENTINTEGER* ‰BTST†#10,D7'‰BEQ‡FE11FERROR„THISMODENOTASLLOWED ‰MOVE.W„(A4,D3),D1‰AND.W…#$0700,D1(‰BNE‡FE11FERROR;‚BITS10-8MUSTBEZERO 0‰MOVE.B„1(A4,D3),D0‰111100;ƒDESTINATION(PC,R@.% X) ‰EXT.W…D0 ‰EXT.L…D0‰ADD.L…HISPC(A1),D0*‰ADD.L…D3,D0ADJUSTFOREXTENSIONWORD…3,0‰MOVE.B„#'$',(A6)+ŠHEX"$"—1,3‰BSR‡PNT8HXŽDESTINATION“1,3 SPC 1‰MOVE.L„#',CP(',D0‰BSR‡SCHRDES(PC, SPC 1‰MOVE.W„(A4,D3),D4 ‰ROL.W…#4,D4 ‰BTST†#3,D4 ‰BEQ.S…EAF25 ‰BSR‡FORMREGA ‰BRA.S…EAF27EAF25„BSR‡FORMREGDŒDES(PC,R@EAF27 SPC 1‰MOVE.B„#'.',(A6)+ŠDES(PC,R@. SPC 1‰MOVE.W„(A4,D3),D4‰MOVE.W„#'LW',D0 ‰BTST†#11,D4 ‰BEQ.S…EAF35 ‰LSR.W…#8,D0!EAF35„MOVE.B„D0,(A6)+ŒDES(PC,R@.X SPC 1‰MOVE.B„#')',(A6)+ŠDES(PC,R@.X) ‰ADD.L…#2,D3‰RTS PAGE*ƒBIT‚5432109876543210+*ˆ..........111100„FIRSTWORD;‚#*EA1115ƒCMP.B…#4,D4‰BNE‡FE11FERROR SPC 1 ‰BTST†#11,D7'‰BEQ‡FE11FERROR;‚THISMODENOTALLOWED ‰MOVE.B„#'#',(A6)+ŠIMMEDIATE SPC 1‰MOVE.B„-1(A5),D1‰CMP.B…#'L',D1‰BEQ.S…EA11155LONG SPC 1‰MOVE.W„(A4,D3),D0 ‰CMP.B…#'B',D1‰BNE.S…EA11153Ž.WORD * BYTE SIZE; DATA ALLOWED*‚00000000XXXXXXXX*‚111111111XXXXXXX ‰MOVE.L„D0,D1 ‰LSR.W…#8,D1‰BEQ.S…EA11153 ‰MOVE.L„D0,D1 ‰ASR.W…#7,D1 ‰ADD.W…#1,D1‰BNE‡FE11FERROR EA11153‚EXT.L…D0 ‰BSR‡HEX2DEC ‰ADD.L…#2,D3‰RTS SPC 1EA11155‚MOVE.L„(A4,D3),D0 ‰BSR‡HEX2DEC‰ADD.L…#4,D3SIZE‰RTS PAGEMOVEMSƒMOVE.B„#'.',(A5)+ŠPERIOD‰MOVE.W„#'LW',D0 ‰BTST†#6,D4‰BEQ.S…MOVEMS2 ‰LSR.W…#8,D0MOVEMS2‚MOVE.B„D0,(A5)+ŒSIZE‰RTS SPC 1* MOVEM - REGISTER EXPANSION* MOVEMRƒDSˆ0!‰MOVE.W„2(A4),D2ŒD2=SECONDWORD‰MOVE.L„#''>>8,D0D0=SPACE‰MOVE.L„#'/'>>8,D7D7=/!‰SUB.L…#1,A6ADJUSTSTOREPOINTER"‰MOVE.L„#'0'>>8,D5ŠD5=REGISTER#‰MOVE.W„#'AD',D4ŒD4=REGCLASS SPC 1MOVEMR11BTST†D1,D2‰BEQ.S…MOVEMR77ŒBITRESET SPC 1‰CMP.B…(A6),D0‹BITSET‰BNE.S…MOVEMR44ŒNOTSPACE SPC 1!MOVEMR33MOVE.B„D4,1(A6)ŒREGTYPE‰MOVE.B„D5,2(A6)ŒREG#‰MOVE.B„#'-',3(A6)Š- ‰ADD.L…#3,A6‰BRA.S…MOVEMR88 SPC 1MOVEMR44CMP.B…#',',(A6)‰BEQ‡MOVEMR33ŒCOMMASEPARATOR SPC 1‰CMP.B…(A6),D7‹/SEPARATOR ‰BEQ‡MOVEMR33 SPC 1‰MOVE.B„D4,1(A6)ŒREGTYPE‰MOVE.B„D5,2(A6)ŒREG#‰MOVE.B„#'-',3(A6)‰-SEPARATOR‰BRA.S…MOVEMR88 SPC 1MOVEMR77CMP.B…#',',(A6)‰BEQ.S…MOVEMR88ŒCOMMA SPC 1‰CMP.B…(A6),D0‰BEQ.S…MOVEMR88ŒSPACE‰CMP.B…1(A6),D0‰BEQ.S…MOVEMR79ŒSPACE ‰ADD.L…#3,A6#MOVEMR79MOVE.B„D7,(A6)Œ/SEPARATOR SPC 1MOVEMR88ADD.L…#1,D5‰ADD.L…D6,D1D1=BITPOSITION‰CMP.B…#'8',D5 ‰BNE‡MOVEMR11 SPC 1‰CMP.B…(A6),D0SPACE‰BEQ.S…MOVEMR94 SPC 1‰CMP.B…1(A6),D0ŒSPACE™4,0‰BNE.S…MOVEMR90Œ.4,0‰CMP.B…#'-',(A6)‹.4,0*‰BEQ.S…MOVEMR92ŒRolloverfromDxtoAxˆ4,0‰BRA.S…MOVEMR94Œ.4,0MOVEMR90ADD.L…#3,A6.4,0'MOVEMR92MOVE.B„D7,(A6)/Separator“4,0)MOVEMR94MOVE.B„#'0',D5RESETREGTOZERO‰LSR.W…#8,D4CHANGEREGTYPE‰BNE‡MOVEMR11ŒMORE SPC 1‰MOVE.B„D0,(A6)SPACE‰RTS PAGEIEOR11ƒDSˆ0“EOR‚D@,’3,0‰BSR‡FORMSIZEŒ.3,0 ‰ROL.W…#7,D4.3,0‰BSR‡FORMREGDŒ.3,0 ‰MOVE.B„D5,(A6)+ŒCOMMA™3,0 ‰MOVE.W„(A4),D4.3,0‰BSR‡EA’š3,0‰BRA.S…COMMON1COMMON˜3,0 PAGEIMOVES11DSˆ0“.3,0'‰ADD.L…#2,D3ADJUSTNUMBEROFBYTESˆ3,0 ‰BSR‡FORMSIZEŒ.3,0 %‰BTST†#3,DATA+2(A1)‡DIRECTIONBIT‘3,0‰BEQ.S…IMOVES44Œ0=,R@“3,0 !‰MOVE.W„DATA+2(A1),D4‡R@,—3,0‰ROL.W…#4,D4.3,0‰MOVE.L„#EAM003,D7ŠA@‚D@˜3,0 ‰BSR‡EA’.3,0 ‰MOVE.B„D5,(A6)+ŒCOMMA™3,0 ‰MOVE.W„DATA(A1),D4‰.3,02‰MOVE.W„#EAM1FC,D7ŠMEMORYALTERABLEADDRESSINGƒ3,0 ‰BSR‡EA’.3,0‰BRA.S…COMMON1.3,0 :IMOVES44MOVE.W„#EAM1FC,D7ŠMEMORYALTERABLEADDRESSINGƒ3,0 ‰BSR‡EA’.3,0 ‰MOVE.B„D5,(A6)+ŒCOMMA™3,0 ‰MOVE.W„DATA+2(A1),D4‡.3,0‰ROL.W…#4,D4.3,0‰MOVE.L„#EAM003,D7ŠA@‚D@˜3,0 ‰BSR‡EA’.3,0COMMON1‚BRA‡COMMONŽ.3,0 PAGEIMOVEC11DSˆ0“.3,0!‰MOVE.L„D4,D1D1=FIRSTWORD3,0 ‰BTST†#0,D1DIRECTIONBIT‘3,0‰BEQ.S…IMOVEC44Œ.3,0 ‰BSR.S…MCRDAFORMD@ORA@‘3,0 ‰MOVE.B„D5,(A6)+ŒCOMMA™3,0 ‰BSR.S…MC’3CHARSYMBOL‘3,0COMMON41BRA‡COMMON4.3,0 #IMOVEC44BSR.S…MC’3CHARSYMBOL‘3,0 ‰MOVE.B„D5,(A6)+ŒCOMMA™3,0 ‰BSR.S…MCRDAFORMD@ORA@‘3,0‰BRA& ‡COMMON41Œ.3,0 /MCRDA„MOVE.B„DATA+2(A1),D4‡D4=SECONDWORDŽ3,0‰LSR.B…#4,D4.3,0‰MOVE.L„#EAM003,D7ŠA@‚D@˜3,0 ‰BSR‡EA’.3,0 ‰RTS›.3,0 ,MC‡MOVE.W„DATA+2(A1),D4‡D4=SECONDWORDŽ3,0‰MOVE.L„#'CFS'>>8,D0ˆSFC›3,0‰AND.W…#$FFF,D4Œ.3,0‰BEQ.S…MC96MATCH™3,0 ‰MOVE.L„#'CFD'>>8,D0ˆDFC›3,0‰CMP.W…#$001,D4Œ.3,0‰BEQ.S…MC96MATCH™3,0 ‰MOVE.L„#'PSU'>>8,D0ˆUSP›3,0‰CMP.W…#$800,D4Œ.3,0‰BEQ.S…MC96MATCH™3,0 ‰MOVE.L„#'RBV'>>8,D0ˆVRB›3,0‰CMP.W…#$801,D4Œ.3,0‰BNE‡FE12MISS-MATCH”3,0 MC96…BSR‡SCHRSTORE3CHAR’3,0 ‰RTS›.3,0 PAGE*BIT‚5432109876543210*†0000...1..001...†FIXED *†....XXX.........†DATAREGISTER%*†........0.......†MEMORYTOREGISTER%*†........1.......†REGISTERTOMEMORY*†.........0......†WORD*†.........1......†LONG#*†.............XXX†ADDRESSREGISTER* IMOVEP1‚DSˆ0‰MOVE.B„#'.',(A5)+ŠD@,#(A@)‰MOVE.W„#'LW',D0 ‰BTST†#6,D4‰BEQ.S…IMOVEP11ŒUSE"W"‰LSR.W…#8,D0USE"L"IMOVEP11MOVE.B„D0,(A5)+ŒLENGTH SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4 SPC 1‰BTST.B„#7,1(A4)‰BEQ.S…IMOVEP35 SPC 1‰BSR‡FORMREGDŒD@,$HHHH(A@) SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASEPARATOR SPC 1‰MOVE.W„(A4),D4‰BSR.S…IMOVEP66CS20…BRA‡COMMON4 SPC 1$IMOVEP35BSR.S…IMOVEP66Œ$HHHH(A@),D@ SPC 1 ‰MOVE.B„D5,(A6)+ŠCOMMASEPARATOR SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4 ‰BSR‡FORMREGD‰BRA‡CS20COMMON4 SPC 10IMOVEP66MOVE.W„2(A4),D0ŒFORMATDISPLACEMENT‹4,3‰EXT.L…D0’EXTENDTHESIGN4,3#‰BSR‡HEX2DECCONVERTTODECIMALŒ4,3 SPC 1‰MOVE.B„#'(',(A6)+‰MOVE.W„(A4),D4 ‰BSR‡FORMREGA‰MOVE.B„#')',(A6)+‰RTS PAGE DCODE68KCLR.L…D3’68000only”3,0 SPC 1#DCODE68MDSˆ0“68000/68008/680103,0*‰LINK†A1,#-LOCVARSZ‡CREATEAFRAMEFORTHE.‰MOVEM.LƒD0-D2/A4,DATA(A1)ƒCODEANDITSPC.‚A4(‰MOVE.W„D3,PRTYPE(A1)‡PROCESSORTYPE3,0‰CMP.W…#TBLAE-TBLA,D3†.3,0‰BGE.S…FE12BADTYPE–3,0 *‰LEA‡TBLA(PC),A4‰GETTHETABLEADDRESS‰4,11‰LEA‡TBL00(PC),A3ˆGETFIRSTENTRYPCRELATIVEƒ4,1‰MOVE.L„A3,(A4)+ŒSTOREIT.•4,12‰LEA‡TBL08(PC),A3ˆGETSECONDENTRYPCRELATIVE‚4,1‰MOVE.L„A3,(A4)+ŒSTOREIT.•4,11‰LEA‡TBL10(PC),A3ˆGETTHIRDENTRYPCRELATIVEƒ4,1‰MOVE.L„A3,(A4)+ŒSTOREIT.•4,10‰LEA‡TBL20(PC),A3ˆGETLASTENTRYPCRELATIVE„4,1‰MOVE.L„A3,(A4)+ŒSTOREIT.•4,1 $‰LEA‡DATA(A1),A4‰POINTSTOTHECODE. )‰MOVE.L„A5,A3A3=STARTOFOUTPUTBUFFER‰MOVE.L„#BUFSIZE,D0 ‰MOVE.L„A3,A6*DEC311ƒMOVE.B„#'',(A6)+ŠSPACEFILLBUFFER ‰SUB.L…#1,D0 ‰BNE‡DEC311 SPC 1‰MOVE.L„A3,A6FORMATADDRESS‰MOVE.L„HISPC(A1),D0 ‰BSR‡FRELADDR SPC 1* CHECK FOR KNOWN ILLEGAL CODES‰MOVE.W„(A4),D0 ‰LEA‡KI(PC),A5 ‰MOVE.L„A5,A6‰ADD.L…#KIEND-KI,A6DEC404ƒCMP.W…(A5)+,D0$‰BEQ.S…FE12FERROR;‚ILLEGALCODE‰1,4 ‰CMP.L…A6,A5 ‰BNE‡DEC404 SPC 1* LOOK FOR MATCH OF OP-CODE*‰LEA.L…TBLA(PC),A5‰.3,0‰MOVE.W„PRTYPE(A1),D0‡.3,05‰MOVE.L„(A5,D0.W),A5ˆA5=POINTERTODECODETABLE‚3,0 -‰LEA‡TBLE(PC),A6‰A6=POINTERTOENDOFTABLE DEC411ƒMOVE.W„(A4),D0FIRSTWORD‰AND.W…(A5)+,D0ŒMASK‰CMP.W…(A5)+,D0‰BEQ.S…DEC425ŽFOUNDMATCH‰ADD.L…#2,A5UPDATEPOINTER ‰CMP.L…A6,A5‰BNE‡DEC411ŽMORETABLE)FE12…BRA.S…FERRORŽILLEGALINSTRUCTION‹1,4 SPC 1DEC425ƒCLR.L…D6%‰MOVE.B„(A5)+,D6ŒD6=(GOTOOFFSET)/4 ‰LSL.L…#2,D6 SPC 1 ‰CLR.L…D7&‰MOVE.B„(A5)+,D7ŒD7=INDEXTOOP-CODE SPC 1* MOVE OP-CODE TO BUFFER*‰LEA‡OPCTBL(PC),A0 DEC510ƒTST‡D7‰BEQ.S…DEC530ŽATINDEXDEC515ƒTST.B…(A0)+‰BPL‡DEC515ŽMOVETHROUGHFIELD ‰SUB.L…#1,D7 ‰BRA‡DEC510 SPC 1DEC530ƒMOVE.L„#FOC,D0.1,40‰LEA.L…(A3,D0),A5ŠA5=STOREPOINTER‚OP-CODEƒ1,4DEC535ƒMOVE.B„(A0)+,D0 ‰BCLR†#7,D0‰BNE.S…DEC537ŽENDOFMOVE‰MOVE.B„D0,(A5)+ ‰BRA‡DEC535DEC537ƒMOVE.B„D0,(A5)+ SPC 1* CALCULATE GOTO AND GO*‰MOVE.L„#2,D3…D3=SIZE ‰LEA‡X(PC),A0 ‰ADD.L…D6,A0 SPC 1‰MOVE.L„#FOP,D0.1,4.‰LEA.L…(A3,D0),A6ŠA6=POINTERFOROPERAND†1,4 SPC 1‰MOVE.W„(A4),D4ƒD4=FIRSTWORD )‰MOVE.B„#',',D5ƒD5=CONTAINSASCIICOMMA SPC 14‰MOVE.W„#EAM1FD,D7ŠD7=DATAALTERABLEMODESALLOWED ‰JMP‡(A0)*8*‚A4=POINTERTO& DATAINFRAMECREATEDBY'LINKA1,...'*‚A5=POINTERSTOREOP-CODE*‚A6=POINTERSTOREOPERAND*‚D3=SIZE=2BYTES*‚D4=FIRSTWORD2*‚D7=ADDRESSMODESALLOWED($1FD)DATAALTERABLE PAGECOMMON4‚ADD.L…#2,D3…SIZE=4 SPC 1COMMONƒMOVE.L„D3,D6D6=SIZE%‰MOVE.B„#'',(A6)+ŠSPACEASLASTCHAR SPC 1(‰MOVE.L„A6,A5SAVEENDOFBUFFERPOINTER‰MOVE.L„#FDATA,D0‹.1,4‰LEA.L…(A3,D0),A6Š.1,4 /COMMON35MOVE.W„(A4)+,D0ŒGETNEXTWORDOFDATA.(‰ADD.L…#2,HISPC(A1)‡ADJUSTPROGCOUNTER.‰BSR‡PNT4HXŽFORMATDATA.(A6)+ ‰SUB.B…#2,D3 ‰BNE‡COMMON35 &‰MOVE.L„A5,A6A6=RESTOREENDPOINTER SPC 1&‰MOVE.L„A3,A5A5=‚BEGINNINGOFBUFFER SPC 1(‰MOVE.L„HISPC(A1),A4‡MOVETHEUPDATEDPC‰UNLK†A1’TOA4ANDUNDOFRAME. ‰RTS SPC 3 FERRORƒDSˆ0* ILLEGAL INSTRUCTION*‰MOVE.L„#FOC,D0.1,4‰LEA.L…(A3,D0),A6Š.1,4 ‰MOVE.L„A6,A5.3,0‰MOVE.W„#BUFSIZE-FOC-1,D0ƒ.3,00FERROR33MOVE.B„#'',(A5)+ŠSPACEFILLBUFFER3,0‰DBRA†D0,FERROR33‰.3,0 ‰LEA‡MSG111(PC),A5FERROR35MOVE.B„(A5)+,D0‰CMP.B…#EOT,D0‰BEQ.S…FERROR39‰MOVE.B„D0,(A6)+ ‰BRA‡FERROR35 FERROR39DSˆ0 SPC 1‰MOVE.W„(A4),D0 ‰BSR‡PNT4HX SPC 1‰MOVE.L„#2,D3…SIZE SPC 1 ‰BRACOMMON SPC 1MSG111ƒDC.B†'DC.W„$',EOT PAGE SPC 1!KI‡DC.W†$4AFBKNOWNILLEGALCODES KIEND„DSˆ0 PAGE *‚\1ƒMASK*‚\2ƒOP-CODEPATTERN*‚\3ƒGOTOOFFSET*‚\4ƒINDEXTOOP-CODE C68†MACRO ‰DC.W†$\1 ‰DC.W†$\2‰DC.B†(\3-X)>>2‰DC.B†\4‰ENDM SPC 1TBLA…DC.L†TBL0068000™3,0‰DC.L†TBL0868008™3,0‰DC.L†TBL1068010™3,0‰DC.L†TBL2068010™3,0 TBLAE„DSˆ0 SPC 2TBL20„DS.B†0“68020™3,0TBL10„DS.B†0“68010™3,0‰C68‡FFFF,4E74,IRTD,66RTD‘3,0"‰C68‡FFFE,4E7A,IMOVEC,67‹MOVEC3,0-‰C68‡FFC0,42C0,IMVTFCR,59ŠMOVE.W‚FROMCCR„3,0"‰C68‡FF00,0E00,IMOVES,68‹MOVES3,0TBL08„DS.B†0“68008™3,0TBL00„DS.B†0“68000™3,0‰C68‡FEC0,E6C0,ISHIFT,56‹RO‰C68‡FEC0,E4C0,ISHIFT,57‹ROX‰C68‡FEC0,E2C0,ISHIFT,55‹LS‰C68‡FEC0,E0C0,ISHIFT,54‹AS‰C68‡F018,E018,ISHIFT,56‹RO‰C68‡F018,E010,ISHIFT,57‹ROX‰C68‡F018,E008,ISHIFT,55‹LS‰C68‡F018,E000,ISHIFT,54‹AS%‰C68‡F0C0,D0C0,FORM10EX,4ŠADD‡,A@‰C68‡F130,D100,FORM12,53‹ADDX‰C68‡F000,D000,FORM10EX,4ŒADD‰C68‡F1F8,C188,FORM9,50ŒEXG‰C68‡F1F8,C148,FORM8,50ŒEXG‰C68‡F1F8,C140,FORM7,50ŒEXG‰C68‡F1F0,C100,FORM12,49‹ABCD‰C68‡F1C0,C1C0,FORM6D,48‹MULS‰C68‡F1C0,C0C0,FORM6D,47‹MULU‰C68‡F000,C000,FORM10,2ŒAND%‰C68‡F0C0,B0C0,FORM10EX,6ŠCMP…,A@‰C68‡F138,B108,FORM12A,46‹CMPM‰C68‡F100,B100,IEOR,5ŽEOR‰C68‡F000,B000,FORM10EX,6ŒCMP&‰C68‡F0C0,90C0,FORM10EX,44‰SUB‡,A@‰C68‡F130,9100,FORM12,45‹SUBX‰C68‡F000,9000,FORM10EX,44‹SUB‰C68‡F1F0,8100,FORM12,43‹SBCD‰C68‡F1C0,81C0,FORM6D,42‹DIVS‰C68‡F1C0,80C0,FORM6D,41‹DIVU‰C68‡F000,8000,FORM10,40‹OR‰C68‡F100,7000,IMOVEQ,39‹MOVEQ‰C68‡FF00,6100,IBSR,51BSR‰C68‡FF00,6000,IBSR,65BRA‘1,3‰C68‡F000,6000,ICC,38ŽB‰C68‡F0F8,50C8,IDBCC,37ŽDB‰C68‡F0C0,50C0,SCC,36ŽS‰C68‡F100,5100,IQUICK,35‹SUBQ‰C68‡F100,5000,IQUICK,34‹ADDQ‰C68‡F1C0,41C0,FORM6A,33‹LEA‰C68‡F1C0,4180,FORM6D,32‹CHK"‰C68‡FFC0,4EC0,FORM11SL,31‰JMP‘1,4"‰C68‡FFC0,4E80,FORM11SL,30‰JSR‘1,4‰C68‡FFFF,4E77,CS21,29‹RTR‰C68‡FFFF,4E76,CS21,28‹TRAPV‰C68‡FFFF,4E75,CS21,27‹RTS‰C68‡FFFF,4E73,CS21,26‹RTE‰C68‡FFFF,4E72,ISTOP,25STOP‰C68‡FFFF,4E71,CS21,24‹NOP‰C68‡FFFF,4E70,CS21,23‹RESET'‰C68‡FFF8,4E68,IMVFUSP,60ŠMOVEFROMUSP%‰C68‡FFF8,4E60,IMVTUSP,60ŠMOVETOUSP‰C68‡FFF8,4E58,FORM5,22ŒUNLINK‰C68‡FFF8,4E50,ILINK,21ŒLINK‰C68‡FFF0,4E40,FORM4,20ŒTRAP/‰C68‡FF80,4C80,IMOVEMTR,15‰MOVEMFROMREGISTERS‰C68‡FFC0,4AC0,FORM1A,19‹TAS‰C68‡FF00,4A00,FORM1,18ŒTST‰C68‡FFF8,48C0,FORM3,17ŒEXT.L‰C68‡FFF8,4880,FORM3,16ŒEXT.W-‰C68‡FF80,4880,IMOVEMFR,15‰MOVEATOREGISTERS‰C68‡FFF8,4840,FORM3,14ŒSWAP‰C68‡FFC0,4840,FORM11,13‹PEA‰C68‡FFC0,4800,FORM1A,12‹NBCD#‰C68‡FFC0,46C0,IMVTSR,59‹MOVETOSR‰C68‡FF00,4600,FORM1,11ŒNOT%‰C68‡FFC0,44C0,IMVTCCR,59ŠMOVETOCCR‰C68‡FF00,4400,FORM1,10ŒNEG‰C68‡FF00,4200,FORM1,9CLR'‰C68‡FFC0,40C0,IMVFSR,59‹MOVE.W‚FROM‚SR‰C68‡FF00,4000,FORM1,8NEGX‰C68‡F' 000,3000,IMOVE,59ŒMOVE.W‰C68‡F000,2000,IMOVE,60ŒMOVE.L‰C68‡F000,1000,IMOVE,58ŒMOVE.B‰C68‡FF00,0C00,IMMED,6CMP‡#‰C68‡FF00,0A00,IMMED,5EOR‡#‰C68‡FF00,0600,IMMED,4ADD‡#‰C68‡FF00,0400,IMMED,3SUB‡#‰C68‡FF00,0200,IMMED,2AND‡#‰C68‡FF00,0000,IMMED,1ORˆ#‰C68‡F138,0108,IMOVEP,0ŒMOVEP‰C68‡FFC0,08C0,ISETS,64ŒBSET‰C68‡FFC0,0880,ISETS,63ŒBCLR‰C68‡FFC0,0840,ISETS,62ŒBCHG‰C68‡FFC0,0800,ISETS,61ŒBTST‰C68‡F1C0,01C0,ISETD,64ŒBSET‰C68‡F1C0,0180,ISETD,63ŒBCLR‰C68‡F1C0,0140,ISETD,62ŒBCHG‰C68‡F1C0,0100,ISETD,61ŒBTST TBLE…DSˆ0 PAGE N68†MACRO‰DC.B†'\1',128+'\2'ˆ\1\2‰ENDM OPCTBLƒDSˆ0 ‰N68‡MOVE,P„0 ‰N68‡O,R‡1 ‰N68‡AN,D†2 ‰N68‡SU,B†3 ‰N68‡AD,D†4 ‰N68‡EO,R†5 ‰N68‡CM,P†6 ‰N68‡MOV,E…7 ‰N68‡NEG,X…8 ‰N68‡CL,R†9 ‰N68‡NE,G†10 ‰N68‡NO,T†11 ‰N68‡NBC,Dƒ12‰N68‡PEA.,L„13‰N68‡SWAP.,Wƒ14‰N68‡MOVE,M„15‰N68‡EXT.,W„16‰N68‡EXT.,L„17 ‰N68‡TS,T†18‰N68‡TAS.,B„19 ‰N68‡TRA,P…20 ‰N68‡LIN,K…21 ‰N68‡UNL,K…22‰N68‡RESE,T„23 ‰N68‡NO,P†24 ‰N68‡STO,P…25 ‰N68‡RT,E†26 ‰N68‡RT,S†27‰N68‡TRAP,V„28 ‰N68‡RT,R†29 ‰N68‡JS,R†30 ‰N68‡JM,P†31‰N68‡CHK.,W„32‰N68‡LEA.,L„33 ‰N68‡ADD,Q…34 ‰N68‡SUB,Q…35‰DC.B†128+'S'ƒ36 ‰N68‡D,B‡37‰DC.B†128+'B'ƒ38‰N68‡MOVEQ.,L‚.....39 ‰N68‡O,R‡40‰N68‡DIVU.,Wƒ41‰N68‡DIVS.,Wƒ42 ‰N68‡SBC,Dƒ43 ‰N68‡SU,B†44 ‰N68‡SUB,X…45 ‰N68‡CMP,M…46‰N68‡MULU.,Wƒ47‰N68‡MULS.,Wƒ48 ‰N68‡ABC,Dƒ49 ‰N68‡EX,G†50‰N68‡BS,R†.....51‰N68‡NUL,L….....52 ‰N68‡ADD,X…53 ‰N68‡A,S‡54 ‰N68‡L,S‡55 ‰N68‡R,O‡56 ‰N68‡RO,X†57‰N68‡MOVE.,Bƒ58‰N68‡MOVE.,Wƒ59‰N68‡MOVE.,Lƒ60 ‰N68‡BTS,T…61 ‰N68‡BCH,G…62 ‰N68‡BCL,R…63 ‰N68‡BSE,T…64‰N68‡BR,A†65œ1,3‰N68‡RT,D†66œ3,0‰N68‡MOVEC.,L‚67œ3,0‰N68‡MOVE,S„68œ3,0‰DS.B†0‰ENDéé ‰TTL‡MBSR/MBSR…IDNT†1,2‡MACSBUGTYPESUBROUTINES12/18/84 ‰OPT‡A±1,2$‰XDEF†MACSBUG,MTSETUP,OUTPUT,BUFSIZE ‰XDEF†PNT8HX ‰XDEF†PNT6HX ‰XDEF†PNT4HX ‰XDEF†PNT2HX ‰XDEF†PUTHEX ‰XDEF†HEX2DEC ‰XDEF†GETNUMD‰XDEF†GETDECNUŒ.1,0‰XDEF†FRELADDR SPC 1‰XREF†ER ‰SECTIONƒ15  ‰PAGE**‚PRINTHEXROUTINES*** PRINT 8 HEX CHARACTERS**‚D0,D1,D2DESTROYED*PNT8HXƒSWAPD0‚FLIPREGHALVES‰BSR.S‚PNT4HX‚DOTOPWORD‰SWAPD0‚NOWDOLOWERWORD ‰BRA.SPNT4HX* PRINT 6 HEX CHARACTERSFRELADDR EQU *#PNT6HXƒSWAPD0‚FLIPREGISTERHALVES ‰BSR.SPNT2HX‰SWAPD0‚FLIPBACKREGHALVES * PRINT 4 HEX CHARACTERS IN D0.W PNT4HXƒMOVE.WD0,D1‚SAVEINTEMP*‰ROR.W‚#8,D0‚GETBITS15-8INTOLOWERBYTE‰BSR.S‚PNT2HX‚PRINTIT‰MOVE.WD1,D0‚PULLITBACK * PRINT 2 HEX CHARACTERS IN D0.B$PNT2HXƒMOVE.WD0,D2‚SAVEINTEMPREG‰ROXR.W#4,D0‚FORMUPPERNIBBLE)‰BSR.SPUTHEX‚PUTASCIIINTOPRINTBUFFER ‰MOVE.WD2,D0‚GETBACKFROMTEMP3* CONVERT D0.NIBBLE TO HEX & PUT IT IN PRINT BUFFER*&PUTHEXƒAND.B#$0F,D0‚SAVELOWERNIBBLE‰OR.B#$30,D0‚CONVERTTOASCII‰CMP.B#$39,D0ƒSEEIFITIS>9 ‰BLE.SSAVHEX‰ADD#7,D0‚ADDTOMAKE10=>A-SAVHEXƒMOVE.BD0,(A6)+PUTITINPRINTBUFFER‰RTS‹PAGE***ƒPRINTHEX(ZEROSURPRESS)*(PNTZHXƒCLR.LD4‚ISZEROWHENSURPRESSING‰MOVE.LD0,D1‚SAVEINTEMP‰BEQ.SPNTZ81‚IFZERO ‰BPL.SPNTZ0"‰NEG.LD1‚CHANGETOPOSITIVEVALUE.‰BMI.S‚PNTZ81WATCHOUTSPECIALCASE$80000000'‰MOVE.B#'-',(A6)+‚PUTSIGNINTOBUFFER(PNTZ0„MOVE.L#8,D2ƒ8POSSIBLECHARACTERSPNTZ1„MOVE.LD1,D0‚UNSAVEIT"‰MOVE.LD2,D3COUNTDOWNFROMHERE‰SUB.L#1,D3‚BACKOFFONE#‰BEQ.SPNTZ4‚IFNOROTATESKIPTHISPNTZ2„ASR.L#4,D0‚ROTATELRIGHT$‰AND.L#$FFFFFFF,D0‚CLEARTOPNIBBLE ‰SUB.L#1,D3 ‰BNEPNTZ2' #PNTZ4„AND.B#$F,D0‚SAVEONLYNIBBLE ‰BNE.SPNTZ3"‰TST.BD4‚SEEIFSTILLSURPRESSING ‰BEQ.SPNTZ8)PNTZ3„BSRPUTHEX‚PUTAHEXCHARINBUFFER*‰MOVE.BD0,D4‚MARKASNON-SURPRESSINGMODE!PNTZ8„SUB.L#1,D2„DOANOTHERCHAR ‰BNEPNTZ1áUêVòLúN$!‰TST.BD4‚SEEIFANYTHINGPRINTED ‰BNE.SPNTZ9/PNTZ81ƒMOVE.B#'0',(A6)+‚MOVEATLEASTONEZERO PNTZ9„RTS PAGE,*ƒROUTINESTOCONVERTSTRINGTOBINARYVALUE**ˆACCEPTSPREFIXES: *‰%binary *‰@octal *‰&decimal*‰$hex*)GETNUMD‚BSR.S…GETDECNUŒGETDECIMALNUMBERGETNUMD9BNE‡ERROR‰RTS %GETNUMA‚BSR.S…GETHEXNUŒGETHEXNUMBER ‰BRA‡GETNUMD9 :GETDECNUMOVEM.LƒD1-D5/A0,-(A7)†DECODEASADECIMALNUMBER"‰MOVE.L„#10,D3ŽD3=BASE(DECIMAL) ‰BRA.S…GETN20 SPC 26GETHEXNUMOVEM.LƒD1-D5/A0,-(A7)†DECODEASAHEXNUMBER‰MOVE.L„#16,D3„D3=BASE SPC 1+GETN20ƒCLR.W…D4ˆD4=FLAGFORCHARACTERHIT‰CLR.L…D1ˆD1=TEMPRESULTS‰CMP.B…#'',(A5)%‰BEQ.S…GETN80ŽFIRSTCHARSPACE;ERROR *GETN30ƒCMP.LA6,A5ƒSEEIFATENDOFBUFFER ‰BEQ.S…GETN90 ‰CLR.L…D0‰MOVE.B„(A5)+,D0ŒD0=CHARACTER SPC 1/‰LEA‡GETNDATA(PC),A0…POINTERTOTERMINATECHARS,GETN40ƒMOVE.B„(A0)+,D5ŒD5=TERMINATIONCHAR‰BEQ.S…GETN50ŽNOTTERM.CHAR ‰CMP.B…D5,D0*‰BEQ.S…GETN85ŽFOUNDTERMINATIONCHAR;EXIT ‰BRA‡GETN40 SPC 1-GETN50ƒCMP.B…#'%',D0SEEIFFLAGGEDASBINARY ‰BNE.S…GETN60‰MOVE.L„#2,D3BASEISBINARY GETN55ƒTST.W…D4’ANYTHINGENTERED‰BNE.S…GETN80ŽCONFLICT *GETN57ƒMOVE.L„#-1,D4ŽSETDATAENTEREDFLAG ‰BRA‡GETN30 ,GETN60ƒCMP.B…#'@',D0SEEIFFLAGGEDASOCTAL ‰BNE.S…GETN65‰MOVE.L„#8,D3BASEISOCTAL ‰BRA‡GETN55 .GETN65ƒCMP.B…#'&',D0SEEIFFLAGGEDASDECIMAL ‰BNE.S…GETN70‰MOVE.L„#10,D3ŽBASEISDECIMAL ‰BRA‡GETN55 SPC 1*GETN70ƒCMP.B…#'$',D0SEEIFFLAGGEDASHEX ‰BNE.S…GETN75‰MOVE.L„#16,D3ŽBASEIS16 ‰BRA‡GETN55 SPC 1GETN75ƒSUB.B…#$30,D0‰BLT.S…GETN80ŽLESSTHANZERO ‰CMP.B…#9,D0‰BLE.S…GETN77ŽVALUE0-9‰CMP.B…#$11,D0‰BLT.S…GETN80ŽLESSTHANA‰CMP.B…#$16,D0‰BGT.S…GETN80ŽGREATERTHANF‰SUB.B…#7,D0MAKEBINARY ,GETN77ƒCMP.W…D3,D0ISINPUTLARGERTHANBASE‰BCC.S…GETN80ŽLARGERTHANBASE+‰MOVE.L„D1,D2GETREADYTOMULTIPLYD1*BASE‰SWAP†D1‰MULU†D3,D1ƒTOPPART‰SWAP†D1‰TST.W…D1ƒCHECKFOROVERFLOW ‰BNE.S…GETN80ŽVALUEISTOOLARGE ‰MULU†D3,D2‚NOWWORKONLOWWORD!‰ADD.L…D2,D1‚PUTITBACKTOGETHER‰BVS.S…GETN80‚OVERFLOW?‰ADD.L…D0,D1‚ADDINNEWSTUFF ‰BVC‡GETN57'GETN80ƒMOVE.L„#-1,D0ŽERRORRETURN(BNE) ‰BRA.S…GETN95 :GETN85ƒSUB.L…#1,A5…BACKUPTOPOINTATSPACE/PREVIOUSCHAR,GETN90ƒMOVE.L„D1,D0…SETUPRESULTFORRETURN‰CLR.L…D1’NORMALRETURN(BEQ)4GETN95ƒMOVEM.Lƒ(A7)+,D1-D5/A0†RESTORESOMEREGISTERS‰RTS -GETNDATADC.B†'(+,-.:;=^]',0†TERMINATECHARS‰PAGE*0*‚***GETHEX***‚GETHEX(BINARYVALUEFROMASCII)**ƒD0.BHASASCIICHAR‚RETURNS$0-$FBINARY*)GETHEXCMP.B#$30,D0‚ISITLESSTHANZERO‡BLT.SPNMSG011#‡CMP.B#$39,D0‚ISITGREATERTHAN9‰BLE.S…GTHX2…GOODHEX SPC 1"‡CMP.B#$41,D0‚ISITLESSTHAN'A'‡BLT.S‡PNMSG011‡CMP.B#$46,D0‚ISITGT'F'‡BGT.S‡PNMSG011!‡SUB.B#7,D0‚MAKEITSMALLERA=10GTHX2„AND.L…#$F,D0‰RTS SPC 3 PNMSG011DS„0 ERROR„BRA‡ER PAGE*>*„CONVERTBINARYTODECIMAL‚REGD0PUTIN(A6)BUFFERASASCII*0HEX2DEC‚MOVEM.LƒD1-D4/D6-D7,-(A7)ƒSAVEREGISTERS‰MOVE.LD0,D7‚SAVEITHERE ‰BPL.SHX2DC‰NEG.LD7‚CHANGETOPOSITIVE%*ˆBMI.S…HX2DC57ƒSPECIALCASE(-0)—1,1"‰MOVE.B#'-',(A6)+‚PUTINNEGSIGN HX2DC„CLR.W…D4ˆFORZEROSURPRESS‰MOVE.L#10,D6‚COUNTER HX2DC0ƒMOVE.L#1,D2‚VALUETOSUB‰MOVE.LD6,D1‚COUNTER'‰SUB.L#1,D1‚ADJUST-FORMPOWEROFTEN‰BEQ.SHX2DC2‚IFPOWERISZERO!HX2DC1ƒMOVE.WD2,D3‚D3=LOWERWORD ‰MULU#10,D3‰SWAPD2ƒD2=UPPERWORD ‰MULU#10,D2‰SWAPD3ƒADDUPPERTOUPPER ‰ADD.WD3,D2‰SWAPD2‚PUTUPPERINUPPER‰SWAP( D3‚PUTLOWERINLOWER‰MOVE.WD3,D2‚D2=UPPER&LOWER ‰SUB.L#1,D1 ‰BNEHX2DC1HX2DC2ƒCLR.LD0‚HOLDSSUBAMTHX2DC22‚CMP.LD2,D7)‰BCS.SHX2DC3‚IFNOMORESUBPOSSIBLE—1,1‰ADD.L#1,D0‚BUMPSUBS(‰SUB.LD2,D7‚COUNTDOWNBYPOWERSOFTEN‰BRA.SHX2DC22‚DOMOREHX2DC3ƒTST.BD0‚ANYVALUE? ‰BNE.SHX2DC4‰TST.W…D4ˆZEROSURPRESS ‰BEQ.SHX2DC5$HX2DC4ƒADD.B#$30,D0‚BINARYTOASCII‰MOVE.BD0,(A6)+‚PUTINBUFFER'‰MOVE.B„D0,D4…MARKASNONZEROSURPRESSHX2DC5ƒSUB.L#1,D6…NEXTPOWER ‰BNEHX2DC0!‰TST.W…D4ˆSEEIFANYTHINGPRINTED ‰BNE.SHX2DC6.HX2DC57‚MOVE.B#'0',(A6)+‚PRINTATLESTAZERO2HX2DC6ƒMOVEM.Lƒ(A7)+,D1-D4/D6-D7ƒRESTOREREGISTERS‰RTS‚ENDOFROUTINE MACSBUG‚BRA‡* MTSETUP‚BRA‡* OUTPUTƒBRA‡*BUFSIZE‚EQU‡128 ‰END PAGE* DECODE AS A NUMBER8GETNUMD‚MOVEM.LƒD1-D5/A0,-(A7)†ENTRYFORDECIMALDEFAULT‰MOVE.W„#10,D3ŽD3=BASE ‰BRA.S…GETN SPC 2* ENTRY FOR HEX-GETNUMA‚MOVEM.LƒD1-D5/A0,-(A7)†SAVEREGISTERS‰MOVE.W„#16,D3„D3=BASE SPC 1)GETN…CLR.W…D4ˆD4=FLAGFORCHARACTERHIT ‰CLR.LD0‰CLR.LD1‚WHERETOPUTRESULTS*NXTNUMƒCMP.LA6,A5ƒSEEIFATENDOFBUFFER ‰BEQ.S…EXITGN‰MOVE.B(A5)+,D0‚GRABCHARACTER‰CMP.B#$20,D0„CHECKFORSPACE‰BNE.SGETNUM3!‰TST.W…D4ˆSEEIFANYTHINGENTERED#‰BEQ.SNXTNUMƒIFNOTSCANNEXTCHAR;GETNUM2‚SUB.L…#1,A5…BACKUPTOPOINTATSPACE/PREVIOUSCHAR,EXITGNƒMOVE.L„D1,D0…SETUPRESULTFORRETURN.‰MOVEM.Lƒ(A7)+,D1-D5/A0†RESTORESOMEREGISTERS‰RTS SPC 3)GETNUM3‚CMP.B#$27,D0ƒSEEIFSINGLEQUOTE‰BEQ.S…GETNUMST‚GETNUMSTRING SPC 1/‰LEA‡GETNDATA(PC),A0…POINTERTOTERMINATECHARSGETNUM31MOVE.B„(A0)+,D5‰BEQ.S…GETNUM37ŒNOTTERM.CHAR ‰CMP.B…D5,D0‰BEQ‡GETNUM2FOUNDCHAR ‰BRA‡GETNUM31 SPC 1,GETNDATADC.B†'(+,-.:;=^]',0†TERMINATECHARS SPC 10GETNUM37CMP.B#'&',D0ƒSEEIFFLAGGEDASDECIMAL‰BNE.SGETNUM41!‰TST.W…D4’SEEIFANYTHINGDECODED ‰BNE.S…ERROR1‰MOVE.W#10,D3„BASEISDECIMAL SPC 1-GETNUM39MOVE.L„#-1,D4„FLAGASSOMETHINGREAD ‰BRANXTNUM SPC 1,GETNUM41CMP.B#'$',D0„SEEIFFLAGGEDASHEX‰BNE.SGETNUM5!‰TST.WD4„SEEIFANYTHINGDECODED ‰BNE.SERROR1‰MOVE.W#16,D3„BASEIS16 ‰BRA‡GETNUM39 SPC 1+GETNUM5‚BSR.S…GETHEX‚RETURNSWITHD0=BINARY&‰CMP.W…D3,D0ƒISINPUTLARGERTHANBASE ‰BHI.SERROR1+‰MOVE.LD1,D2ƒGETREADYTOMULTIPLYD1*BASE‰SWAPD1‰MULU†D3,D1ƒTOPPART‰SWAPD1‰TST.WD1ƒCHECKFOROVERFLOW ‰BNE.SERROR1‚VALUEISTOOLARGE ‰MULU†D3,D2‚NOWWORKONLOWWORD!‰ADD.LD2,D1‚PUTITBACKTOGETHER‰BVS.SERROR1‚OVERFLOW?‰ADD.LD0,D1‚ADDINNEWSTUFF ‰BVC‡GETNUM39 ERROR1ƒBRA‡ER SPC 17GETNUMSTTST.LD1‚IFSOMETHINGISBEFORETHISERROROUT‰BNE.SEXITSYN‰MOVE.L#5,D2‚COUNTER'GETNUMS1MOVE.B(A5)+,D0‚LOADCHARACTER"‰CMP.B#$27,D0„SEEIFSINGLEQUOTE‰BEQGETNUM2WHERETOGOIFEND(‰LSL.L#8,D1‚MAKEROOMFORNEWCHARACTER‰MOVE.BD0,D1‚NEWBYTE$‰CMP.LA6,A5†SEEIFATENDOFBUFFER(‰BEQƒEXITGN…WHERETOGOIFENDOFBUFFER ‰SUB.L#1,D2 ‰BNEƒGETNUMS1+EXITSYN‚BRA…ERƒNOCLOSINGQUOTEORTOOLONG‰PAGE*0*‚***GETHEX***‚GETHEX(BINARYVALUEFROMASCII):*ƒD0.BHASASCIICHAR‚RETURNS$0-$FBINARYOR$FFONERROR*)GETHEXCMP.B#$30,D0‚ISITLESSTHANZERO‡BLT.SPNMSG011#‡CMP.B#$39,D0‚ISITGREATERTHAN9‰BLE.S…GTHX2…GOODHEX SPC 1"‡CMP.B#$41,D0‚ISITLESSTHAN'A'‡BLT.S‡PNMSG011‡CMP.B#$46,D0‚ISITGT'F'‡BGT.S‡PNMSG011!‡SUB.B#7,D0‚MAKEITSMALLERA=10GTHX2„AND.L…#$F,D0‰RTS SPC 1 éé( éé' SYMBUG CODE68K SA®‰rrDCODE68KSAÇÇmrrERRMSGS SAXXŒrrIODB SAqq&ürrMBSR SAšš &rrMM SAÃÃ3rrSIMBO SAüüRrrSYMSUBIISAQCüƒrrUTILITY SAXX yrr‰TTL‡68KONELINEASSEMBLER0CODE68K‚IDNT†3,2‡68KONELINEASSEMBLER’08/31/83 0*‚VERSION3,0‚INCLUDESTHECHANGESFOR‚THE68010*‚VERSION3,2‚INCLUDES:*…1.‚ADDEDOP-CODESƒBHS‚&BLO*…2.‚BUGFIXADDSUB *H*„CHANGED12/28/81TOALLOWSYMBOLICENTRIESFOR'[#]'-->BYP.Z.* ‰XDEF†CODE68K‰XDEF†CODE68Mƒ.§3,0‰XDEF†ERˆUSEDBYMBSR ‰XREF†PNT2HX ‰XREF†GETNUMD SPC 1I* 01234567890123456789012345678901234567890123456789012345678901234567890@*AAAAAA:MODULEXX:3DDDDDDDDDDDDDDDDDDDDLLLLLLLLOPCODE‚OPERAND*“FDATAFOL†FOC…FOP * D3 = PROCESSOR TYPE*„=0000ƒ68000*„=0004ƒ68008*„=0008ƒ68010*„=000Cƒ68020 * A3 = STORE POINTER* A4 = PROGRAM COUNTER* A5 = SOURCE PTR BEGINNING=*A6=SOURCEPTREND+1‚******ƒBASEADDRFORSYMBUGSECTION0* *ƒBSR‚CODE68M ,*‚BSRCODE68K‚"ISRETAINEDFORCOMPATIBILTY"  OUTBSIZEEQU‡80ˆBUFFERSIZEFDATA„EQU‡18ˆOFFSETTODATAFOL†EQU‡39ˆOFFSETTOLABEL-FOC†EQU‡48ˆOFFSETTOOP-CODE(NOLABELFIELD)-FOP†EQU‡56ˆOFFSETTOOPERAND(NOLABELFIELD) ‰OFFSET„0 ESKB…DSˆ0 TDATA„DS.B†10 TNB†DS.B†1 TLSPECƒDS.B†1TLENGTH‚DS.W†1PCOUNTERDS.L†1PTROP„DS.L†1“POINTERTOOPERAND'PENDOPƒDS.L†1“POINTERTOENDOFOPERAND$PTRBUFƒDS.L†1“POINTERTOSOURCECODE0PTRBUFE‚DS.L†1“POINTERTOENDOFFORMATEDSOURCE PRTYPEƒDS.W†1“PROCESSORTYPE3,0LINK…DS.L†1“SAVEFORUNLINK ESKE…DS.B†0 ‰SECTIONƒ9 XBASE„DSˆ0 * EVALUATE EXPRESSION!*‚NUMBERPLUSORMINUSNUMBER....*EV‡DSˆ0‰MOVE.L„D7,-(A7)ŒSAVED7 ‰CLR.L…D7"GETEXP21BSR.S…GETFIELDŒGETNUMBER$‰ADD.L…D0,D7D7=NUMBERBEINGBUILT.GETEXP15MOVE.B„(A5)+,D1ŒD1=TERMINATINGCHAR(‰CLR.L…D0’D0=NEXTNUMBER(=01STTIME)‰CMP.B…#'+',D1‰BEQ‡GETEXP21ŒPLUS‰CMP.B…#'-',D1‰BNE.S…GETEXP39ŒNOTMINUS‰BSR.S…GETFIELDŒGETNEXTNUMBER ‰SUB.L…D0,D7 ‰BRA‡GETEXP15 SPC 1&GETEXP39MOVE.L„D7,D0D0=VALUEBUILT'‰SUB.L…#1,A5A5=CHARAFTEREXPRESSION‰MOVE.L„(A7)+,D7ŒRESTORED7‰RTS PAGE GETFIELDDSˆ0‰CMP.B…#'*',(A5) WUQ'y/n7m?FGMOEWP_XgRoyw‚t‡}z—jŸr§b¯_·d‰BNE.S…GETF305 "‰MOVE.L„D4,D0D0=PROGRAMCOUNTER ‰ADD.L…#1,A5‰BRA.S…GETF333 GETF305‚CMP.B…#$27,(A5)‰BNE.S…GETF325NOTLITERAL ‰ADD.L…#1,A5 ‰CLR.L…D0 ‰MOVE.W„TLENGTH(A1),D1†D1=SIZE‰BEQ.S…GETF308.B=0‰LSR.W…#5,D1.W=) 1‰SUB.L…#1,D1.L=3GETF308 GETF311‚LSL.L…#8,D0‰MOVE.B„(A5)+,D0‰CMP.B…#$27,(A5)‰BEQ.S…GETF312CLOSINGQUOTE‰DBF‡D1,GETF311ER1†BRA‡ER’OVERFLOW–2,3 +GETF312‚ADD.L…#1,A5MOVEPASTCLOSINGQUOTE‰BRA.S…GETF314 GETF313‚LSL.L…#8,D0%GETF314‚DBF‡D1,GETF313ŠLEFTNORNALIZE‰BRA.S…GETF333 $GETF325‚MOVE.L„A3,-(A7)ŒSAVEA3—3/82;‰MOVE.L„PTRBUFE(A1),A3†A3MUSTBEENDOFBUFFERFORGETNUMD‰BSR‡GETNUMDGETDECIMALNUMBER‰MOVE.L„(A7)+,A3ŒRESTOREA3‰BNE‡ER’UNSUCCESSFULCONVERSION GETF333‚RTS SPC 2* FIND AND SET SIZE* BIT 5432109876543210*…........00......‚=BYTE*…........01......‚=WORD*…........10......‚=LONG*'FSIZE„OR.W†TLENGTH(A1),D2ŠSETSIZEBITS‰RTS PAGE*‚D0=VALUE0-7*‚D1=0IFD@ *…=8IFA@*GETREGD‚CLR.L…D1&‰CMP.B…#'D',(A5)‹ISFIRSTCHAR='D'?)‰BNE.S…NOTREGŽNO,NOTA'D'-TYPEREGISTERGET41„CLR.L…D0’YES$‰MOVE.B„1(A5),D0ŒGETREGISTERNUMBER‰SUB.B…#'0',D0LESSTHAN0?!‰BMI.S…NOTREGŽYES,NOTAREGISTER"‰CMP.B…#$7,D0ŽNO,GREATERTHAN7?!‰BGT.S…NOTREGŽYES,NOTAREGISTER)‰ADD.L…#2,A5NO,SETA5TODELIMETERCHAR)‰LEA‡GETNDATA(PC),A0…GETVALIDDELIMETERS.GETDELIMTST.B…(A0)ATENDOFDELIMETERS?ˆ3,1(‰BEQ.S…NOTREGSYES,NOTAVALIDREGISTER)‰CMPM.B„(A5)+,(A0)+‰NO,DELIMETERFOUND?‰BEQ.S…HAVEITŽYES&‰SUB.L…#1,A5NO,RESETA5TODELIMETER‰BRA.S…GETDELIMŒKEEPLOOKING (HAVEITƒSUB.L…#1,A5RESETA5TODELIMETER)‰MOVE†#4,CCRŽSETREGISTERFOUNDCONDITION‰RTS 1NOTREGS‚SUB.L…#2,A5RESETA5TOSTARTOFREGISTER‰BRA.S…NOTREGŽSIGNALNOTFOUNDGETNDATADC.B†',).-/',0Š.3,0 #GETREGA‚MOVE.L„#8,D1SETFORA@”3,0&‰CMP.B…#'A',(A5)‹ISFIRSTCHAR='A'?*‰BNE.S…NOTREGŽNO,NOTAN'A'-TYPEREGISTER‰BRA‡GET41YES GETREGADCLR.L…D1’SETFORD@&‰CMP.B…#'D',(A5)‹ISFIRSTCHAR='D'?(‰BEQ‡GET41YES,MAYBE'D'-TYPEREGISTER ‰MOVE.L„#8,D1NO,SETFORA@3,0&‰CMP.B…#'A',(A5)‹ISFIRSTCHAR='A'?(‰BEQ‡GET41YES,MAYBE'A'-TYPEREGISTER5NOTREGƒMOVE†#0,CCRŽNO,RESETREGISTERFOUNDCONDITION‰RTS SPC 2/GETREGSRMOVEQ…#2,D0SETD0FOR2CHARREGISTER‰CMP.B…#'S',(A5)‹'SR'?‰BNE.S…NOTREGŽNO‰CMP.B…#'R',1(A5)‰BNE.S…NOTREGŽNO.TERM…CMP.B…#',',(A5,D0)ˆYES,DELIMETER=','?‰BEQ.S…ISREGYES)‰CMP.B…#'',(A5,D0)ˆNO,DELIMETER=''?‰BNE.S…NOTREGŽNO,ISREG„ADD.L…D0,A5YES,MOVEA5PASTREGISTER!‰CLR.L…D5’SETREGISTERFOUNDFLAG‰RTS GETREGUSCMP.B…#'U',(A5)‹'USP'?‰BNE.S…NOTREGŽNOTESTSPƒCMP.B…#'S',1(A5)‰BNE.S…NOTREGŽNO‰CMP.B…#'P',2(A5)‰BNE.S…NOTREGŽNO1MOVE3„MOVEQ…#3,D0YES,SETD0FOR3CHARREGISTER‰BRA.S…TERMFINDDELIMCHAR GETREGSSCMP.B…#'S',(A5)‹'SSP'?‰BNE.S…NOTREGŽNO‰BRA.S…TESTSPŽMAYBE GETREGCRCMP.B…#'C',(A5)‹'CCR'?‰BNE.S…NOTREGŽNO‰CMP.B…#'C',1(A5)‰BNE.S…NOTREGŽNO‰CMP.B…#'R',2(A5)‰BNE.S…NOTREGŽNO,‰BRA.S…MOVE3YES,SETD0ANDFINDDELIMCHAR PAGE(EADA…MOVE.W„#$1FD,D7ŒDATAALTERABLEONLY ‰BRA.S…EA SPC 1 EAC†MOVE.W„#$7E4,D7ŒCONTROLONLY ‰BRA.S…EA SPC 1)EAM†MOVE.W„#$1FC,D7ŒMEMORYALTERABLEONLY ‰BRA.S…EA SPC 1"EAZ†MOVE.W„#$800,D7ŒIMMEDIATEONLY ‰BRA.S…EA 'EADADDR‚MOVE.W„#$FFD,D7‚DATAADDRESSING ‰BRA.S…EA (EAA†MOVE.W„#$1FF,D7ŒALTERABLEADDRESSING ‰BRA.S…EA EAALL„MOVE.W„#$FFF,D7‚ALLMODES SPC 4*†MODESALLOWED(D7)#*‚...............1‚D@DATAREGISTER*‚..............1.‚A@*‚.............1..‚(A@)*‚............1...‚-(A@)*‚...........1....‚(A@)+*‚..........1.....‚DATA(A@)*‚.........1......‚DATA(A@,R@)*‚........1.......‚DATA‚(SHORT)*‚.......1........‚DATA‚(LONG)*‚......1.........‚DATA(PC)*‚.....1..........‚DATA(PC,R@)*‚....1...........‚#DATA SPC 2* D0 = VALUE CALCULATED** D2 = MASK WORD (1ST WORD OF INSTRUCTION)'* D3 = OFFSET FOR DATA STORE (TDATA+..)* D4 = EXTENSION WORD * D5 = $*D6=MODEASBUILTƒ.........XXXXXX* D7 = MODES ALLOWED*4* A4 = BASE ADDRESS FOR DATA STORE (TDATA+..)[A4,D3]EA‡DSˆ0‰CLR.L…D5’ZEROVALUE‰CLR.L…D6’MODE=000000‰CMP.B…#'#',(A5) ‰BNE.S…EA10 PAGE* IMMEDIATE MODE ‰BTST†#11,D7‰BEQ.S) …ER5‘.3,0 ‰MOVE.B„#$3C,D6D6=MODE‚111100 ‰ADD.L…#1,A5 ‰BSR‡EV’EVALUATEEXPRESSION‰MOVE.L„D0,D5D5=VALUE ‰TST.B…TLSPEC(A1)Š.1,3.‰BEQ.S…EA0633Ž.SIZENOTSPECIFIED(.WASSUMED) ‰MOVE.W„TLENGTH(A1),D0‰BEQ.S…EA0635Ž.BYTE ‰TST.B…D0‰BMI.S…EA0637Ž.LONG EA0633ƒBSR‡EA16BIT.WORDEA0634ƒMOVE.W„D5,(A4,D3)‰ADD.B…#2,TNB(A1)ŠBYTECOUNT‰ADD.L…#2,D3OFFSET‰RTS EA0635ƒBSR‡EA8BIT‰BEQ‡EA0634Ž.3,0ER5†BRA‡ER’.3,0 EA0637ƒMOVE.L„D5,(A4,D3)‰ADD.B…#4,TNB(A1) ‰ADD.L…#4,D3‰RTS PAGE EA10…DSˆ0‰CMP.B…#'-',(A5) ‰BNE.S…EA11 ‰CMP.B…#'(',1(A5)‰BNE‡EA41MAYBE"- ‰ADD.L…#2,A5%‰MOVE.W„#$0020,D6‹MODE=-(A@)„100AAA ‰BTST†#4,D7"‰BEQ‡ER5‘THISMODENOTALLOWED‰3,0 ‰BSR‡GETREGA‰BNE‡ER5‘.3,0 ‰OR.W†D0,D6 ‰CMP.B…#')',(A5)+‰BNE.S…ER5‘NOCLOSINGPARINŽ1,2‰RTS EA11…BSR‡GETREGA ‰BNE.S…EA21 ‰MOVE.B„#$08,D6MODE=001... ‰BTST†#1,D7‰BEQ.S…ER5‘MODENOTALLOWEDŽ1,2 ‰OR.W†D0,D6‰RTS EA21…BSR‡GETREGD ‰BNE.S…EA31 ‰BTST†#0,D7‰BEQ.S…ER5‘MODENOTALLOWEDŽ1,2‰OR.W†D0,D6MODE=D@ƒ000AAA‰RTS PAGEEA31…CMP.B…#'(',(A5) ‰BNE.S…EA41 * POSSIBLE*‚(A@)*‚(A@)+#*‚(A@,R@)‚IMPLIEDZERODISPLACEMENT* ‰ADD.L…#1,A5 ‰BSR‡GETREGA‰BNE.S…ER3‘.2,3 ‰OR.W†D0,D6 ‰MOVE.B„(A5)+,D0‰CMP.B…#',',D0/‰BEQ‡EA5116ŽMODE=(A@,R@)‚;IMPLIEDD5=0DATA !‰CMP.B…#')',D0LOOKFORCLOSING)‰BNE.S…ER3‘.1,2 ‰CMP.B…#'',(A5)‹LOOKFORBLANK‰BEQ.S…EA35MODE=(A@) ‰CMP.B…#'+',(A5) ‰BNE.S…EA35 ‰ADD.L…#1,A5 !‰OR.W†#$18,D6ƒMODE=011...„(A@)+ ‰BTST†#3,D7‰BEQ.S…ER3‘MODENOTALLOWEDŽ1,2 ‰RTS›.1,2 $EA35…OR.W†#$10,D6MODE=010...ƒ(A@) ‰BTST†#2,D7‰BEQ.S…ER3‘MODENOTALLOWEDŽ3,0‰RTS›MODEALLOWED’3,0 PAGE * POSSIBLE*ƒ.W *ƒ.L *ƒ(A@)*ƒ(A@,R@)*ƒ(A@,R@.W)*ƒ(A@,R@.L) *ƒ(PC)*ƒ(PC,R@)*ƒ(PC,R@.W)*ƒ(PC,R@.L)*EA41…BSR‡EV’EVALUATEEXPRESSION‰MOVE.L„D0,D5D5= ‰MOVE.B„(A5),D0‰CMP.B…#',',D0 ‰BEQ.S…EA4102‰CMP.B…#'',D0 ‰BNE.S…EA4120 *‚‰ONLY* CHECK IF NEGATIVE NUMBEREA4102ƒMOVE.L„D5,D0‰BPL.S…EA4105ŽPOSITIVENUMBER‰NOT.L…D0’.1,3EA4105ƒAND.W…#$8000,D0‹.1,3 ‰TST.L…D0‰BNE.S…EA4135Ž.LONG™1,3 *‚.W‰BTST†#7,D7.1,1‰BNE.S…EA4127ŽSHORTALLOWED‘1,1‰BTST†#15,D7Ž.1,1‰BNE.S…EA4135ŽFORCELONG”3,0ER3†BRA‡ER’MODENOTALLOWEDŽ3,0 +EA4127ƒOR.W†#$38,D6EA=ABSOULTESHORT‹1,1‰MOVE.W„D5,(A4,D3)ŠD5=DATA‰ADD.B…#2,TNB(A1)ŠBYTECOUNT ‰ADD.L…#2,D3‰RTS *‚.L&EA4135ƒOR.W†#$39,D6EA=ABSOLUTELONG‰MOVE.L„D5,(A4,D3)‰ADD.B…#4,TNB(A1)ŠBYTECOUNT ‰ADD.L…#4,D3 ‰BTST†#8,D7‰BEQ‡ER3‘MODENOTALLOWEDŽ1,2‰RTS EA4120ƒADD.L…#1,A5.1,3‰CMP.B…#'(',D0.1,3‰BNE‡ER3‘.1,2 ‰CMP.B…#'P',(A5) ‰BEQ‡EA61 * (A@....... ‰BSR‡EA16BITS ‰BSR‡GETREGA‰BNE‡ER3‘.2,3 ‰OR.W†D0,D6 ‰MOVE.B„(A5),D0‰CMP.B…#')',D0 ‰BNE.S…EA5115 * (A@) ‰ADD.L…#1,A5 ‰BTST†#5,D7‰BEQ‡ER3‘MODENOTALLOWEDŽ1,2 ‰OR.W†#$0028,D6‹MODE=101AAA ‰CMP.L…#$10000,D5‰BPL‡ER3‘.2,3 ‰MOVE.W„D5,(A4,D3)‰ADD.B…#2,TNB(A1) ‰ADD.L…#2,D3‰RTS PAGEEA5115ƒBSR‡COMMA -*‚(A@,-----„ADDRESSREGISTERWITHINDEXEA5116ƒEXT.L…D5 ‰BSR‡EA8BITS ‰BNE‡ER’.1,2‰AND.W…#$00FF,D5‰OR.W†#$0030,D6‹MODE‚110--- ‰BTST†#6,D7‰BEQ‡ER’MODENOTALLOWEDŽ1,2 ‰CLR.L…D0°2,3‰CLR.L…D1’SETFORD@”2,3#‰MOVE.B„(A5)+,D0ŒGETFIRSTCHAR2,3(‰CMP.B…#'D',D0ISFIRSTCHAR='D'?‰2,3.‰BEQ.S…ISDREGŽYES,CHECKFOR'D'-TYPEREGISTER ‰MOVE.B„#8,D1NO,SETFORA@2,3(‰CMP.B…#'A',D0ISFIRSTCHAR='A'?‰2,3‰BNE.S…ER4‘NO,ERROR•2,33ISDREGƒMOVE.B„(A5)+,D0ŒYES,GETREGISTERNUMBER†2,3 ‰SUB.B…#'0',D0LESSTHAN0?‘2,3‰BMI.S…ER4‘YES,ERROR”2,3%‰CMP.B…#7,D0NO,GREATERTHAN7?Š2,3‰BGT.S…ER4‘YES,ERROR”2,3 ‰OR.W†D1,D0 ‰ROR.W…#4,D0‰OR.W†D0,D5EXTENSIONWORD * BIT 11 EXTENSION WORD8*ƒ0=SIGNEXTENDED,LOWORDERINTEGERININDEXREGISTER,*ƒ1=LONG* VALUEININDEXREGISTER‚(DEFAULT)*‰MOVE.B„(A5)+,D0‰CMP.B…#')',D0‰BEQ.S…EA5119ŽDEFAULTƒ.W ‰CMP.B…#'.',D0‰BNE.S…ER4‘.2,3 ‰MOVE.B„(A5)+,D0‰CMP.B…#'W',D0 ‰BEQ.S…EA5118 ‰CMP.B…#'L',D0 ‰BNE.S…ER4‘NEITHER.WNOR.L2,3 ,‰OR.W†#$0800,D5‹EXTENSIONWORD,W/LBIT=.L EA5118ƒCMP.B…#')',(A5)+‰BNE.S…ER4‘NOCLOSING")"1,2 EA5119ƒMOVE.W„D5,(A4,D3)‰ADD.B…#2,TNB(A1) ‰ADD.L…#2,D3EA5119E‚RTS›.1,2 PAGE*‚(P-----EA61…ADD.L…#1,A5‰CMP.B…#'C',(A5)+‰BNE.S…ER4‘.2,3 #‰SUB.L…PCOUNTER(A1),D5…D5=D5-PC‰SUB.L…#2,D5D5=D5-(PC+2)-‰SUB.L…D3,D5ADJUSTIF2WORDINSTRUCTION‚3,0 ‰MOVE.B„(A5)+,D0‰CMP.B…#')',D0 ‰BNE.S…EA71 *‚(PC)‰OR.W†#$3A,D6MODE=111010 ‰BSR.S…EA16BITS‰MOVE.W„D5,(A4,D3)‰ADD.B…#2,TNB(A1) ‰ADD.L…#2,D3 ‰BTST†#9,D7‰BNE‡EA5119E.1,2ER4†BRA‡ER’.1,2 **‚(PC----ŠPROGRAMCOUNTERWITHINDEX#EA71…MOVE.W„#$003B,D6‹MODE=111011 ‰CMP.B…#',',D0‰BNE.S…ER4‘.1,2 ‰BTST†#10,D7Ž.‰BEQ‡ER4‘MODENOTALLOWEDŽ1,2 ‰BSR.S…EA8BITS‰BNE‡ER4‘.1,2 ‰AND.W…#$00FF,D5‹D5=VALUE ‰BSR‡GETREGAD‰BNE‡ER4‘.2,3 ‰OR.W†D1,D0  ‰ROR.W…#4,D0‰OR.W†D0,D5D5=EXTENSIONWORD ‰MOVE.B„(A5)+,D0‰CMP.B…#')',D0‰BEQ.S…EA7115ŽDEFAULT‚.W ‰CMP.B…#'.',D0‰BNE‡ER4‘.1,2 ‰MOVE.B„(A5)+,D0‰CMP.B…#'W',D0 ‰BEQ.S…EA7113 ‰CMP.B…#'L',D0‰BNE‡ER4‘.1,2'‰OR.W†#$0800,D5‹EXTENSIONWORDW/L=.L EA7113ƒCMP.B…#')',(A5)+‰BNE‡ER4‘NOCLOSING")"1,2 EA7115ƒMOVE.W„D5,(A4,D3)‰ADD.B…#2,TNB(A1) ‰ADD.L…#2,D3‰RTS PAGEL*****************************************************************************0*ˆROUTINESTOTESTFORVALIDEFFECTIVEADDRESSES*@*ˆEA16BITƒteststhat-32768<=D5<=65535.‚(signedorunsigned):*ˆEA16BITS‚teststhat-32768<=D5<=32767.‚(signedonly);*ˆEA8BIT„teststhatƒ-128<=D5<=ƒ255.‚(signedorunsigned)5*ˆEA8BITSƒteststhatƒ-128<=D5<=ƒ127.‚(signedonly)*8*ˆThe16-bittestsbranchtoERifinvalid,elsereturn.B*ˆThe‚8-bittestsreturnconditioncodesifvalid,else.0*ˆD5ispreservedunlessabranchtoERresults.*ˆD1isdestroyed.*L**************************************************************************** EA16BIT:/‰BSR.S…EA16BITCŒCHECKRANGE-32768TO32767.‚IF0‰MOVE.L„D5,D1INVALID,CHECKWHETHERTHEHIGH16'‰SWAP†D1’BITSARE0(WHICHIMPLIESTHAT,‰TST.W…D1’D5<=65535).‚IFNOT,FALLTHRUTO,‰BEQ.S…EASEXTHE16-BITSIGNEDTEST--WEWILL*§FAILANDGOTOER. EA16BITS:.‰PEA‡ER(PC)ŽSETUPTORETURNTOERIFINVALID. (EA16BITCMOVE.L„#$7FFF,D1‹D1‚<--‚2^16-1.)‰BRA.S…EAS‘GOTOTHECOMMONTESTROUTINE.  EA8BIT:3‰BSR.S…EA8BITCCHECKRANGE-128TO127.‚IFINVALID,0‰MOVE.L„D5,D1CHECKWHETHERTHEHIGH24BITSARE.‰LSR.L…#8,D10(WHICHIMPLIESTHATD5<=255).‰RTS›* EA8BITS:0‰BSR.S…EA8BITCJUSTCHECKFOR-127<=D5<=128.(‰RTS›(BSRPUTSNEEDEDADDRESSONSTACK!) &EA8BITC‚MOVE.L„#$7F,D1D1‚<--‚2^8-1. 1*’***NOTE:THISROUTINEPLAYSWITHTHESTACK***8EAS†CMP.L…D1,D5IFD5>2^N-1,RETURNWITH(INVAL).‰BGT.S…EASEX*1‰NOT.L…D1’IFD5<-2^N,‚RETURNWITH(INVAL).‰CMP.L…D1,D5*‰BLT.S…EASEX* 2‰ADD.L…#4,A7POPTHERETURNADDRESSOFFTHESTACK,'‰CLR.L…D1’SET(VALID),ANDRETURN. EASEX„RTS›* PAGE ADR†MACRO‰DC.W†M\1-XBASE‰ENDM TBLKEYS‚DSˆ0‰INDEX‰ADR‡ABCD†0‚ABCDSBCD‰ADR‡ADD‡1‚ADD‚SUB‰ADR‡ADDA†2‚ADDACMPASUBA‰ADR‡ADDI†3‚ADDICMPISUBI‰ADR‡ADDQ†4‚ADDQSUBQ‰ADR‡ADDX†5‚ADDXSUBX‰ADR‡AND‡6‚AND‚OR‰ADR‡ASL‡7‚ASL‚LSLROLROXL‰ADR‡DBCC†8‚DBCC‰ADR‡BCHG†9‚BCHG‰ADR‡BRA‡10‚BRA‚BSR‚BCC‰ADR‡BSET†11‚BSET#‰ADR‡CHK‡12‚CHK‚DIVSDIVUMULSMULU ‰ADR‡CLR‡13‚CLR‚NEG‚NEGXNOT‚TST‰ADR‡CMPM†14‚CMPM‰ADR‡MOVEQ…15‚MOVEQ‰ADR‡EXG‡16‚EXG‰ADR‡EXT‡17‚EXT‰ADR‡JMP‡18‚JMP‚JSR‰ADR‡LEA‡19‚LEA‰ADR‡LINK†20‚LINK‰ADR‡MOVE†21‚MOVE)‰ADR‡CMMD2…22‚NOPRESETRTERTRRTSTRAPV‰ADR‡STOP†23‚STOP‰ADR‡SWAP†24‚SWAP‰ADR‡TRAP†25* ‚TRAP‰ADR‡UNLK†26‚UNLK‰ADR‡MOVEM…27‚MOVEM‰ADR‡ANDI†28‚ANDIEORIORI‰ADR‡SCC‡29‚NBCDSCC‚TAS‰ADR‡BCLR†30‚BCLR‰ADR‡BTST†31‚BTST‰ADR‡MOVEA…32‚MOVEA‰ADR‡MOVEP…33‚MOVEP‰ADR‡CMP‡34‚CMP‰ADR‡EOR‡35‚EOR‰ADR‡PEA‡36‚PEA‰ADR‡DCˆ37‚DC.W‰ADR‡MOVEC…38‚MOVEC„68010–3,0‰ADR‡MOVES…39‚MOVES„68010–3,0‰ADR‡RTD‡40‚RTD†68010–3,0 ‰PAGE7* \1,\2 = MNEUMONIC (\2 SIGN BIT SET AS LAST CHARACTER)*\3„=INDEXTOTABLKEYS* \4,\5 = FIRST WORD MASK%*\6„=NOOPERANDALLOWEDIFSIGNSET&*\7„=.SALLOWED(.WNOTALLOWED) 1,2 OPC†MACRO‰DC.B†'\1','\2'+128‰DC.B†\3+\6+\7,$\4,$\5‰ENDM "NOC†EQU‡128‘(BIT7SET)NOOPERAND)NW‡EQU‡$40‘(BIT6SET).WNOTALLOWED„1,2!TBLOPCƒOPC‡ABC,D,0,C1,00,0,0…ABCD‰OPC‡ADD,A,2,D0,C0,0,0…ADDA‰OPC‡ADD,I,3,06,00,0,0…ADDI‰OPC‡ADD,Q,4,50,00,0,0…ADDQ‰OPC‡ADD,X,5,D1,00,0,0…ADDX‰OPC‡AD,D,1,D0,00,0,0†ADD‰OPC‡AND,I,28,02,00,0,0„ANDI‰OPC‡AN,D,6,C0,00,0,0†AND‰OPC‡AS,L,7,E1,00,0,0†ASL‰OPC‡AS,R,07,E0,00,0,0…ASR‰OPC‡BR,A,10,60,00,0,NW„BRA‰OPC‡BH,I,10,62,00,0,NW†BHI‰OPC‡BL,S,10,63,00,0,NW†BLS‰OPC‡BC,C,10,64,00,0,NW†BCC‰OPC‡BH,S,10,64,00,0,NW†BHS—3,2‰OPC‡BC,S,10,65,00,0,NW†BCS‰OPC‡BL,O,10,65,00,0,NW†BLO—3,2‰OPC‡BN,E,10,66,00,0,NW†BNE‰OPC‡BE,Q,10,67,00,0,NW†BEQ‰OPC‡BV,C,10,68,00,0,NW†BVC‰OPC‡BV,S,10,69,00,0,NW†BVS‰OPC‡BP,L,10,6A,00,0,NW†BPL‰OPC‡BM,I,10,6B,00,0,NW†BMI‰OPC‡BG,E,10,6C,00,0,NW†BGE‰OPC‡BL,T,10,6D,00,0,NW†BLT‰OPC‡BG,T,10,6E,00,0,NW†BGT‰OPC‡BL,E,10,6F,00,0,NW†BLE‰OPC‡BCH,G,9,01,40,0,0…BCHG$‰OPC‡BCL,R,30,01,80,0,0„BCLR†DYNAMIC‰OPC‡BSE,T,11,01,C0,0,0„BSET‰OPC‡BS,R,10,61,00,0,NW„BSR‰OPC‡BTS,T,31,01,00,0,0„BTST‰OPC‡B,T,10,60,00,0,NW†BT‰OPC‡CH,K,12,41,80,0,0…CHK‰OPC‡CL,R,13,42,00,0,0…CLR‰OPC‡CMP,A,2,B0,C0,0,0…CMPA‰OPC‡CMP,I,3,0C,00,0,0…CMPIš1,1‰OPC‡CMP,M,14,B1,08,0,0„CMPM‰OPC‡CM,P,34,B0,00,0,0†CMP‰OPC‡DB,T,8,50,C8,0,NW…DBT‰OPC‡DB,F,8,51,C8,0,NW…DBF‰OPC‡DBR,A,8,51,C8,0,NW„DBRA‰OPC‡DBH,I,8,52,C8,0,NW„DBHI‰OPC‡DBL,S,8,53,C8,0,NW„DBLS‰OPC‡DBC,C,8,54,C8,0,NW„DBCC‰OPC‡DBC,S,8,55,C8,0,NW„DBCS‰OPC‡DBN,E,8,56,C8,0,NW„DBNE‰OPC‡DBE,Q,8,57,C8,0,NW„DBEQ‰OPC‡DBV,C,8,58,C8,0,NW„DBVC‰OPC‡DBV,S,8,59,C8,0,NW„DBVS‰OPC‡DBP,L,8,5A,C8,0,NW„DBPL‰OPC‡DBM,I,8,5B,C8,0,NW„DBMI‰OPC‡DBG,E,8,5C,C8,0,NW„DBGE‰OPC‡DBL,T,8,5D,C8,0,NW„DBLT‰OPC‡DBG,T,8,5E,C8,0,NW„DBGT‰OPC‡DBL,E,8,5F,C8,0,NW„DBLE(‰OPC‡DC.,W,37,00,00,0,0„DC.W‚(WORDONLY)‰OPC‡DIV,S,12,81,C0,0,0„DIVS‰OPC‡DIV,U,12,80,C0,0,0„DIVU‰OPC‡EOR,I,28,0A,00,0,0„EORI‰OPC‡EO,R,35,B1,00,0,0†EOR‰OPC‡EX,G,16,C1,00,0,0…EXG‰OPC‡EX,T,17,48,00,0,0…EXT‰OPC‡JM,P,18,4E,C0,0,NW„JMP‰OPC‡JS,R,18,4E,80,0,NW„JSR‰OPC‡LE,A,19,41,C0,0,0…LEA‰OPC‡LIN,K,20,4E,50,0,0„LINK‰OPC‡LS,L,7,E3,08,0,0†LSL‰OPC‡LS,R,07,E2,08,0,0…LSR‰OPC‡MOVE,A,32,00,04,0,0ƒMOVEA‰OPC‡MOVE,M,27,48,80,0,0ƒMOVEM‰OPC‡MOVE,P,33,01,08,0,0ƒMOVEP‰OPC‡MOVE,Q,15,70,00,0,0ƒMOVEQ‰OPC‡MOV,E,21,00,00,0,0„MOVE‰OPC‡MUL,S,12,C1,C0,0,0„MULS‰OPC‡MUL,U,12,C0,C0,0,0„MULU‰OPC‡NBC,D,29,48,0,0,0…NBCD‰OPC‡NEG,X,13,40,00,0,0„NEGX‰OPC‡NE,G,13,44,00,0,0…NEG‰OPC‡NO,P,22,4E,71,NOC,0ƒNOP‰OPC‡NO,T,13,46,00,0,0…NOT‰OPC‡OR,I,28,00,00,0,0…ORI‰OPC‡O,R,6,80,00,0,0‡OR‰OPC‡PE,A,36,48,40,0,0…PEA ‰OPC‡RESE,T,22,4E,70,NOC,0RESET‰OPC‡RO,L,7,E7,18,0,0†ROL‰OPC‡RO,R,07,E6,18,0,0…ROR‰OPC‡ROX,L,7,E5,10,0,0…ROXL‰OPC‡ROX,R,07,E4,10,0,0„ROXR‰OPC‡RT,E,22,4E,73,NOC,0ƒRTE‰OPC‡RT,R,22,4E,77,NOC,0ƒRTR‰OPC‡RT,S,22,4E,75,NOC,0ƒRTS‰OPC‡SBC,D,0,81,00,0,0…SBCD‰OPC‡S,F,29,51,C0,0,0†SF‰OPC‡SH,I,29,52,C0,0,0…SHI‰OPC‡SL,S,29,53,C0,0,0…SLS‰OPC‡SC,C,29,54,C0,0,0…SCC‰OPC‡SC,S,29,55,C0,0,0…SCS‰OPC‡SN,E,29,56,C0,0,0…SNE‰OPC‡SE,Q,29,57,C0,0,0…SEQ‰OPC‡SV,C,29,58,C0,0,0…SVC‰OPC‡SV,S,29,59,C0,0,0…SVS‰OPC‡SP,L,29,5A,C0,0,0…SPL‰OPC‡SM,I,29,5B,C0,0,0…SMI‰OPC‡SG,E,29,5C,C0,0,0…SGE‰OPC‡SL,T,29,5D,C0,0,0…SLT‰OPC‡SG,T,29,5E,C0,0,0…SGT‰OPC‡SL,E,29,5F,C0,0,0…SLE‰OPC‡STO,P,23,4E,72,0,0„STOP‰OPC‡S,T,29,50,C0,0,0†ST‰OPC‡SUB,A,2,90,C0,0,0…SUBA‰OPC‡SUB,I,3,04,00,0,0…SUBI‰OPC‡SUB,Q,4,51,00,0,0…SUBQ‰OPC‡SUB,X,5,91,00,0,0…S+ UBX‰OPC‡SU,B,1,90,00,0,0†SUB‰OPC‡SWA,P,24,48,40,0,0„SWAP‰OPC‡TA,S,29,4A,C0,0,0…TAS™1,2 ‰OPC‡TRAP,V,22,4E,76,NOC,0TRAPV‰OPC‡TRA,P,25,4E,40,0,0„TRAP‰OPC‡TS,T,13,4A,00,0,0…TST‰OPC‡UNL,K,26,4E,58,0,0„UNLKTBLOP00‚DS.B†0“.3,0TBLOP08‚DS.B†0“.3,0"‰OPC‡MOVE,C,38,4E,7A,0,0ƒMOVEC—3,0"‰OPC‡MOVE,S,39,0E,00,0,0ƒMOVES—3,0‰OPC‡RT,D,40,4E,74,0,0…RTD™3,0TBLOP10‚DS.B†0“.3,0TBLOP20‚DS.B†0“.3,0 ,... ‰BSR‡FSIZE ‰MOVE.L„#$009,D7Œ.3,0‰BSR‡EA’D@+(A@)+‰MOVE.L„D6,D0MMMRRR‰AND.W…#$38,D0MMM... ‰BEQ.S…MCMP39ŽDESTINATION‚D@ ‰CMP.B…#$18,D0‰BNE‡ER ‰AND.W…#$F,D6Ž(AY)+,(AX)+“3/82‰ROR.W…#7,D6.3/82!‰OR.W†D6,D2....AX@.........Ž3/82%‰OR.W†#$0100,D2‹...1AX@.........Ž3/82 ‰MOVE.L„D4,D0‰AND.W…#$38,D0‰CMP.W…#$18,D0‰BNE‡ER’NOT(A@)+‰AND.W…#$F,D4¬3/82 ‰OR.W†D4,D2 ‰BRA‡CMMD2 *‚,D@MCMP39ƒROR.W…#7,D6 ‰OR.W†D6,D2 ‰OR.W†D4,D2‰BRA.S…CMMD2S11 0MCMP56ƒMOVE.W„#$0C00,D2‹#,†MASK=CMPI ‰BSR‡FSIZE ‰BSR‡EADA ‰OR.W†D6,D2CMMD2S11BRA‡CMMD2S10 COMMAS20BRA‡COMMA PAGEMADD…DSˆ0“(INDEX1) ‰BSR‡EAALL‰MOVE.L„D6,D4D4=SOURCEMODE ‰BSR‡COMMAS20 ‰BSR‡GETREGA.2,3‰BNE.S…NOTRA1Ž.2,30‰SUB.L…#2,A5ADJUSTA5BACKTOSTARTOFREGISTER!‰BRA‡MADDA21DESTINATION=A@Ž2,3 NOTRA1ƒCMP.B…#$3C,D4&‰BEQ.S…MADD56ŽSOURCE‚....I‚#,... ‰BSR‡FSIZE ‰MOVE.W„#$1FF,D7‰BSR‡EA’ALTERABLE+D@‰MOVE.L„D6,D0MMMRRR‰AND.W…#$38,D0MMM... ‰BNE.S…MADD46ŽDESTINATIONNOT‚D@ *‚,D@ ‰ROR.W…#7,D6 ‰OR.W†D6,D2 ‰OR.W†D4,D2 ‰BRA‡CMMD2S11 MADD46ƒMOVE.W„D4,D0D@,—3,2‰AND.W…#$38,D0.3,2‰BNE‡ER’SOURCENOTD@‘3,2 ‰OR.W†#$100,D2 ‰ROR.W…#7,D4‰OR.W†D4,D2, ASDESTINATION ‰OR.W†D6,D2D@‚ASSOURCE ‰BRA‡CMMD2S11 MADD56ƒMOVE.L„D2,D0#,‰MOVE.W„#$0600,D2‹MASK=ADDI ‰CMP.W…#$D000,D0 ‰BEQ.S…MADD58‰MOVE.W„#$400,D2ŒMASK=SUBIMADD58 ‰BSR‡FSIZE ‰BSR‡EADADATAALTERABLEONLY ‰OR.W†D6,D2 ‰BRA‡CMMD2S11 PAGE(MADDI„MOVE.L„PTROP(A1),A5ˆ(INDEX3)CMPI ‰BSR‡FSIZE ‰BSR‡EAZ ‰BSR‡COMMAS20 ‰BSR‡EADADATAALTERABLEONLY ‰OR.W†D6,D2 ‰BRA‡CMMD2S11 SPC 3*‚SIZE=‚BYTE,WORD,LONG *‚#,SR"*‚#,„DATAALTERABLEONLYMANDI„DSˆ0“(INDEX28)EORIORI ‰BSR‡FSIZE ‰BSR‡EAZ ‰BSR‡COMMAS20 ‰CMP.B…#'S',(A5)‰BEQ.S…MANDI23 ‰BSR‡EADA ‰OR.W†D6,D2 ‰BRA‡CMMD2S11 #MANDI23‚CMP.B…#'R',1(A5)Š#,SR‰BNE‡ER‰CMP.W…#$0080,TLENGTH(A1)‰BEQ‡ER’.LNOTALLOWEDWITHSR‰OR.W†#$003C,D2 ‰BRA‡CMMD2 PAGEMADDA„DSˆ0“(INDEX2) ‰BSR‡EAALL ‰OR.W†D6,D2 ‰BSR‡COMMA MADDA21‚OR.W†D6,D2‰MOVE.W„TLENGTH(A1),D0‰BEQ‡ER’.BYTENOTALLOWED‰LSL.W…#1,D0.W=011......‰OR.W†#$00C0,D0‹.L=111...... ‰OR.W†D0,D2 ‰BSR‡GETREGA ‰BNE‡ER’.2,3 ‰ROR.W…#7,D0 ‰OR.W†D0,D2 ‰BRA‡CMMD2 PAGEMADDQ„DSˆ0“(INDEX4) ‰BSR‡FSIZE ‰BSR‡GETIMM ‰TST.L…D0‰BEQ‡ER’DATA=ZERO ‰CMP.L…#8,D0‰BHI‡ER’VALUETOOBIG‰AND.W…#$7,D0ŽMAKE8=0$‰ROR.W…#7,D0SHIFTDATATOBITS9-11 ‰OR.W†D0,D2 ‰BSR‡COMMA ‰BSR‡EAA‘ALTERABLEADDRESSING ‰OR.W†D6,D2 ‰MOVE.L„D2,D0‰AND.W…#$C0,D0‰BNE.S…MADDQ25 0* BYTE SIZE; ADDRESS REGISTER DIRECT NOT ALLOWED ‰MOVE.L„D2,D0‰AND.W…#$38,D0‰CMP.B…#$08,D0‰BEQ‡ERMADDQ25‚BRA‡CMMD2 PAGE* SIZE = BYTE, WORD, LONG*„DY,DX *„-(AY),-(AX)*„....RX@.SS...RY@MADDX„DSˆ0“(INDEX5) ‰BSR‡FSIZE ‰MOVE.L„#$11,D7.3,0‰BSR‡EA ‰BSR‡COMMA  ‰MOVE.L„D6,D0 ‰AND.W…#7,D0 ‰OR.W†D0,D2 ‰BTST†#5,D6‰BEQ.S…MADDX5ŽD@,D@MODE ‰OR.W†#$0008,D2‹-(A@),-(A@)MODE ‰MOVE.L„#$10,D7.3,0‰BSR‡EA ‰AND.W…#7,D6 ‰ROR.W…#7,D6 ‰OR.W†D6,D2 ‰BRA‡CMMD2 MADDX5ƒBSR‡GETREGDD@,D@ ‰BNE‡ER’.2,3 ‰ROR.W…#7,D0 ‰OR.W†D0,D2 ‰BRA‡CMMD2 SPC 2(A5TODESTCLR.L…D1’MOVEA5TODESTINATION)A5300„BSR‡GETCHAR.‚SOURCE,DESTINATIONOR$‰CMP.B…#'(',D0.‚(A@,R@),DESTINATION ‰BNE.S…A5305 ‰MOVE.L„D0,D1A5305„CMP.B…#')',D0 ‰BEQ‡A5TODEST‰CMP.B…#',',D0 ‰BNE‡A5300‰TST‡D1!‰BNE‡A5300(A@,---FORM;CONTINUE‰RTS PAGE*‚SIZE=BYTE,WORD,LONG*‰,D@ƒ[D@,D@ALLOWED]*‰D@,ƒ[D@,D@NOTALLOWED]MAND…BSR‡FSIZE(INDEX6) ‰CMP.B…#'#',(A5) ‰BEQ.S…MAND90 %‰BSR‡A5TODESTŒLOOKATDESTINATION‹3,0‰BSR‡GETREGD.3,0‰BEQ.S…MAND77Ž.3,0 %‰OR.W†#$0100,D2ŒD@,ƒDIRECTIONBIT ,‰MOVE.L„PTROP(A1),A5ˆA5=PTRTOOPERAND‹3,0‰BSR‡GETREGD.3,0 ‰ROR.W…#7,D0 ‰OR.W†D0,D2 ‰BSR‡COMMA ‰BSR‡EAM‘ALTERABLEMEMORY ‰OR.W†D6,D2 ‰BRA‡CMMD2  MAND77ƒROR.W…#7,D0,D@—3,0‰OR.W†D0,D2DESTINATION“3,0 ,‰MOVE.L„PTROP(A1),A5ˆA5=PRTTOOPERAND‹3,0)‰BSR‡EADADDRDATAADDRESSING(SOURCE)†3,0‰OR.W†D6,D2­3,0 ‰BSR‡COMMA.3,0‰BRA‡CMMD2.3,0 MAND90ƒAND.W…#$F000,D2‰CMP.W…#$C000,D2‰BEQ.S…MAND97AND!‰MOVE.W„#$0000,D2‹CHANGETO"ORI"MAND91ƒBRA‡MANDI(MAND97ƒMOVE.W„#$0200,D2‹CHANGETO"ADDI" ‰BRA‡MAND91 PAGEMEOR…BSR‡FSIZE(INDEX35) ‰CMP.B…#'#',(A5) ‰BEQ.S…MEOR90 ‰BSR‡GETREGD ‰BNE‡ER’.2,3 ‰ROR.W…#7,D0 ‰OR.W†D0,D2 ‰BSR‡COMMA #‰BSR‡EADADATAALTERABLEADDRESSING ‰OR.W†D6,D2 ‰BRA‡CMMD2 2MEOR90ƒMOVE.L„PTROP(A1),A5ˆA5=POINTERTOOPERAND"‰MOVE.W„#$0A00,D2‹CHANGETO"EORI" ‰BRA‡MANDI PAGEMASL…DSˆ0“(INDEX7)*‰ASL…LSL…ROL…ROXL*‚MASKS‚E000„E008„E018„E010"*‰E0C0„E2C0„E6C0„E4C0ƒSHIFTMEMORY ‰BSR‡FSIZE ‰MOVE.B„(A5)+,D0‰CMP.B…#'#',D0 ‰BNE.S…MSL200 *‚#,D@‰BSR‡EV ‰CMP.L…#8,D0‰BGT‡ER’GREATERTHAN8 ‰AND.B…#$7,D0ŽMAKE8INTO0MSL150ƒROR.W…#7,D0‰AND.W…#$F1FF,D2‰OR.W†D0,D2COUNT/REG ‰BSR‡COMMA ‰BSR‡GETREGD ‰BNE‡ER’.2,3 ‰OR.W†D0,D2 ‰BRA‡CMMD2 MSL200ƒDSˆ0“D@,D@‰SUB.L…#1,A5ADJUSTA5BACK ‰BSR‡GETREGD‰BNE.S…MSL300Ž.2,, 3 *ˆD@,D@ ‰OR.W†#$20,D2 ‰BRA‡MSL150 MSL300ƒDSˆ0“†SHIFTMEMORY‰OR.W†#$00C0,D2‹SIZE=MEMORY +‰AND.W…#$FFC0,D2‹REMOVE"SHIFTMEMORY"BITS ‰CMP.W…#$0040,TLENGTH(A1)‰BNE.S…ER2‘NOT.WORD•1,2 ‰BSR‡EAM ‰OR.W†D6,D2 ‰BRA‡CMMD2 PAGEMSCC…DSˆ0“(INDEX29)NBCDSCC ‰BSR‡SIZEBYTE ‰BSR‡EADADATAALTERABLEONLY ‰OR.W†D6,D2 ‰BRA‡CMMD2 PAGEMBCHG„DSˆ0“(9)‰CMP.B…#'#',(A5) ‰BNE.S…MB200 "‰MOVE.W„#$0840,D2‹NEWOP-CODEMASK MB100„ADD.L…#1,A5‰BSR‡EV’EVALUATEEXPRESSION ‰CMP.L…#33,D0‰BGT.S…ER2‘(MODULO32)“1,2‰MOVE.W„D0,TDATA+2(A1)‰ADD.L…#2,D3STOREPOINTER ‰ADD.B…#2,TNB(A1)Š.1,2 MB105„BSR‡COMMA.1,2 ‰BSR‡EADADESTINATION ‰OR.W†D6,D2 ‰TST.B…TLSPEC(A1)Š..œ1,2‰BEQ.S…MB185DEFAULT—1,2 ‰AND.W…#$0038,D6‹.1,2,‰BNE.S…MB145DESTINATIONWASNOTD@ƒ1,2 3‰CMP.W…#$80,TLENGTH(A1)„DESTINATIONWASD@‡1,2‰BEQ.S…MB185LENGTHIS.L’1,2ER2†BRA‡ER’.1,2 MB145„TST.W…TLENGTH(A1)‰.1,2‰BNE‡ER2‘NOTBYTELENGTH1,2 MB185„BRA‡CMMD2.1,2 MB200„BSR‡GETREGDDYNAMIC ‰ROR.W…#7,D0 ‰OR.W†D0,D2 ‰BRA‡MB105.1,2 MBSET„DSˆ0‰(INDEX11)BCLRBSET‰CMP.B…#'#',(A5) ‰BNE‡MB200 ‰MOVE.W„#$08C0,D2 ‰BRA‡MB100 MBCLR„DSˆ0‰(INDEX30)‰CMP.B…#'#',(A5) ‰BNE‡MB200 ‰MOVE.W„#$0880,D2 ‰BRA‡MB100 MBTST„DSˆ0‰(INDEX31)‰CMP.B…#'#',(A5) ‰BNE‡MB200 ‰MOVE.W„#$0800,D2 ‰BRA‡MB100 PAGEMDBCC„DSˆ0“(INDEX8) ‰BSR‡GETREGD‰BNE.S…ER6‘.2,3 ‰OR.W†D0,D2 ‰BSR‡COMMA ‰BSR.S…EVSR ‰BRA.S…MBRA23 SPC 6*‚SIZEƒ.S‚=‚.Wƒ(DEFAULT) *‰.L‚=‚.LMBRA…DSˆ0“(INDEX10) ‰BSR.S…EVSR ‰CMP.W…#$0080,TLENGTH(A1)‰BEQ.S…MBRA23ŽFORCEDLONG ‰BSR‡EA8BITS‰BNE.S…MBRA23ŽNOT8BITVALUE ‰OR.B†D5,D2‰BRA‡CMMD2.SHORT ER6†BRA‡ER’ERRORHANDLER‘1,1 MBRA23ƒTST.B…TLSPEC(A1) ‰BEQ.S…MBRA27‰CMP.W…#$0040,TLENGTH(A1)‰BEQ‡ER6‘.SSPECIFIED’1,1MBRA27 ‰MOVE.L„D4,D5RESTORED5 ‰BSR‡EA16BITS‰MOVE.W„D5,TDATA+2(A1)‰ADD.B…#2,TNB(A1) ‰BRA‡CMMD2 EVSR…BSR‡EV‰CMP.B…#'',(A5)‹.2,3'‰BEQ.S…EVSR11ŽTERMINATEDWITHSPACE‰2,3‰CMP.B…#$0D,(A5)‹.2,3‰BNE‡ER6‘WASNOTCR”2,3EVSR11 ‰MOVE.L„D0,D5 ‰ASR.L…#1,D0‰BCS‡ER6‘ODDVALUE•1,1‰MOVE.L„PCOUNTER(A1),D4‰ADD.L…#2,D4D4=PC+2 ‰SUB.L…D4,D5%‰BEQ‡ER6‘ZERO;SPECIALCASEERROR†1,1 ‰MOVE.L„D5,D4‰RTS PAGE MCHK…DSˆ0“(INDEX12)CHKDIVMUL ‰BSR‡SIZEWORD !‰BSR‡EADADDRDATAADDRESSINGONLY ‰OR.W†D6,D2 ‰BSR‡COMMA ‰BSR‡GETREGD‰BNE‡ER6‘.2,3 ‰ROR.W…#7,D0 ‰OR.W†D0,D2 ‰BRA‡CMMD2 PAGEMCLR…DSˆ0“(INDEX13) ‰BSR‡FSIZE ‰BSR‡EADADATAALTERABLEONLY ‰OR.W†D6,D2 ‰BRA‡CMMD2 ‚PAGE* SIZE = BYTE, WORD, LONGMCMPM„DSˆ0“(INDEX14) ‰BSR‡FSIZE ‰MOVE.L„#$0008,D7‹.3,0‰BSR‡EA’-(A@)ƒONLY ‰AND.W…#7,D6 ‰OR.W†D6,D2 ‰BSR‡COMMA ‰MOVE.L„#$0008,D7‹.3,0‰BSR‡EA ‰AND.W…#7,D6 ‰ROR.W…#7,D6 ‰OR.W†D6,D2 ‰BRA‡CMMD2 PAGEMEXG…DSˆ0“(INDEX16) ‰BSR‡SIZELONG ‰BSR‡GETREGAD ‰BNE‡ER’.2,3‰MOVE.L„D0,D4D4=REGNUMBER‰MOVE.L„D1,D5D5=REGTYPE ‰BSR‡COMMATESTFORCOMMA ‰BSR‡GETREGAD ‰BNE‡ER’.2,3 ‰CMP.L…D1,D5 ‰BEQ.S…MEXG35ŽBOTHREGSTHESAME *‚DX,AY‚OR‚AY,DX‰OR.W†#$88,D2MODE ‰TST.B…D1 ‰BNE.S…MEXG25 &‰EXG.L…D0,D4SWAPSOURCE&DESTINATION !MEXG25ƒOR.W†D0,D2.......MMMMMYYY ‰ROR.W…#7,D4‰OR.W†D4,D2....XXXMMMMMYYY ‰BRA‡CMMD2 MEXG35ƒOR.W†#$0040,D2‹OP-MODE ‰TST.B…D1‰BEQ‡MEXG25ŽDX,DY ‰OR.W†#$0048,D2‹AX,AY ‰BRA‡MEXG25 ‚PAGEMEXT…DSˆ0“(INDEX17)‰TST.W…TLENGTH(A1)‰BEQ‡ER’BYTESIZENOTALLOWED ‰BSR‡FSIZE.W=........10......&‰ADD.W…#$0040,D2‹.L=........11...... ‰BSR‡GETREGD ‰BNE‡ER’.2,3 ‰OR.W†D0,D2 ‰BRA‡CMMD2 PAGEMMOVEMƒDSˆ0“(INDEX27)(‰MOVE.W„TLENGTH(A1),D0†SIZEBITS‚76TO6‰BEQ‡ER’BYTE‡00‚ERROR‰LSR.W…#1,D0WORD‡01„0‰AND.W…#$0040,D0‹LONG‡10„1 ‰OR.W†D0,D2 !‰ADD.B…#2,TNB(A1)ŠNUMBEROFBYTES&‰ADD.L…#2,D3FORCESTOREPTRPASTMASK ‰BSR‡GETREGADŒ.2,3 ‰BEQ.S…MMM44 *„,‰OR.W†#$0400,D2‹DIRECTIONBIT "‰MOV- E.W„#$7EC,D7ŒMODESALLOWED‘1,1‰BSR‡EA ‰OR.W†D6,D2 ‰BSR‡COMMA ‰BSR.S…MMM48.1,2‰BRA‡CMMD2.1,2  )*ƒ,REGISTERTOMEMORY MMM44„DSˆ0‰SUB.L…#2,A5RESTOREA5”2,3 * EVALUATE DESTINATION FIRSTMMM46„BSR‡GETCHAR‰CMP.B…#',',D0FINDCOMMA ‰BNE‡MMM46 "‰MOVE.W„#$1F4,D7ŒMODESALLOWED‘1,1‰BSR‡EA ‰OR.W†D6,D2(‰MOVE.L„A5,PENDOP(A1)‡ENDOFOPERAND1,2‰MOVE.L„PTROP(A1),A5#‰BSR.S…MMM48EVALUATEREGISTERSŒ1,23‰MOVE.L„PENDOP(A1),A5‡POINTERTOENDOFOPERAND…1,2‰BRA‡CMMD2.1,2„PAGE*ˆD6=CORRESPONDENCEMASK*ˆD4=CONTROL‚$FF'-''/'MMM48„CLR.L…D6’MASKš1,2‰MOVE.L„#-1,D4ŽCONTROL=$FF RL111„BSR‡GETCHAR‰CMP.B…#',',D0"‰BEQ.S…RL114DONE;FOUNDCOMMA1,2‰CMP.B…#'',D0.1,2‰BNE.S…RL115NOTSPACE•1,2RL114„RTS›DONEš1,2 RL115„CMP.B…#'/',D0.1,2 ‰BNE.S…RL444 ‰TST.B…D4’CONTROL‰BMI‡ER‰MOVE.L„D0,D4CONTROL='/'RL333„BSR‡GETREGAD ‰BNE‡ER’.2,3‰OR.B†D0,D1D1=BITPOSITION(‰MOVE.B„D1,D5D5=LASTREGISTERENTERED ‰BSR.S…SETBIT ‰BRA‡RL111 RL444„CMP.B…#'-',D0 ‰BNE.S…RL666 ‰CMP.B…#'/',D4CONTROL‰BNE‡ER‰MOVE.L„D0,D4CONTROL='-' ‰BSR‡GETREGAD ‰BNE‡ER’.2,3 ‰OR.B†D0,D1‰MOVE.L„D1,D7D7=NOWREGISTER‰MOVE.B„D5,D0D5=LASTREG ‰EOR.B…D1,D0‰AND.B…#$38,D0‰BNE‡ER’NOTMATCHEDSET ‰CMP.B…D1,D5‰BPL‡ER RL555„ADD.L…#1,D5 ‰MOVE.L„D5,D1 ‰BSR.S…SETBIT ‰CMP.B…D7,D5 ‰BMI‡RL555 ‰BRA‡RL111 RL666„TST.B…D4‰BPL‡ER‰MOVE.B„#'/',D4CONTROL='/' ‰SUB.L…#1,A5 ‰BRA‡RL333 PAGE5SETBITƒLEA‡MTBL(PC),A0‰SETBITINCORRESPONDENCEMASK ‰MOVE.L„D2,D0‰AND.W…#$38,D0‰CMP.W…#$20,D0‰BNE.S…RL30NOTPREDECREMENT&‰MOVE.B„(A0,D1),D1ŠD1=BIT‚(FORSURE)RL30…BSET†D1,D6 /‰MOVE.W„D6,TDATA+2(A1)†SAVECORRESPONDENCEMASK‰RTS /MTBL…DC.B†15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 PAGE*ƒD@,(A@)*ƒ(A@),D@*‰(A@),D@ŒFORCEDTO0(A@),D0*‰D@,(A@)ŒFORCEDTOD0,0(A@)**‚SIZE=WORD,LONGMMOVEPƒDSˆ0“(INDEX33)‰MOVE.W„TLENGTH(A1),D0‰BEQ‡ER’.BYTENOTALLOWED ‰LSR.W…#1,D0‰AND.W…#$0040,D0‰OR.W†D0,D2SIZE ‰MOVE.L„#$25,D7.3,0‰BSR‡EA’D6=MODE ‰BSR‡COMMA ‰MOVE.L„D6,D0‰AND.W…#$38,D0 ‰CMP.B…#$0,D0‰BEQ.S…MMP344ŽD@,(A@) *„(A@),D@ ‰BSR‡GETREGD ‰BNE‡ER’.2,3 ‰ROR.W…#7,D0‰OR.W†D0,D2D@ ‰BRA.S…MMP348 (MMP344ƒOR.W†#$0080,D2‹REGISTERTOMEMORY ‰ROR.W…#7,D6‰OR.W†D6,D2D@ ‰MOVE.L„#$24,D7.3,0‰BSR‡EAMMP348ƒMOVE.L„D6,D0 ‰AND.W…#7,D6‰OR.W†D6,D2A@ ‰AND.W…#$38,D0‰CMP.B…#$10,D0‰BNE.S…MMP368Ž(A@) 0‰CLR.W…TDATA+2(A1)†FORCEDTOZERO;‚"(A@)"!‰ADD.B…#2,TNB(A1)ŠNUMBEROFBYTES‰ADD.L…#2,D3STOREPOINTERMMP368ƒBRACMMD2 PAGEMMOVEQƒDSˆ0“(INDEX34) ‰BSR‡GETIMM‰MOVE.L„D0,D5.2,3 ‰BSR‡EA8BITS-128T0+127’2,3‰BNE.S…ER10.2,3‰OR.B†D5,D2D5=VALUE”2,3 ‰BSR‡COMMA ‰BSR‡GETREGDD@‰BNE.S…ER10.2,3 ‰ROR.W…#7,D0 MMQ20„OR.W†D0,D2‰BSR.S…SIZELONG ‰BRA‡CMMD2 'SIZELONGTST.B…TLSPEC(A1)ŠMUSTBE.LONG‰BEQ.S…SI201DEFAULTSIZEOK‰CMP.W…#$0080,TLENGTH(A1)‰BNE.S…ER10NOT.LONG SI201„RTS /SIZEWORDCMP.W…#$0040,TLENGTH(A1)‚MUSTBE.WORD‰BEQ‡SI201…[RTS] ER10…BRA‡ER SIZEBYTETST.B…TLSPEC(A1)‰BEQ.S…SI222DEFAULTSIZEOK‰TST.W…TLENGTH(A1) ‰BNE‡ER10 SI222„RTS PAGEMMOVE„DSˆ0“(INDEX21)‰CMP.W…#8,PRTYPE(A1)‡.3,0‰BLT.S…MM3068000OR680083,0‰BSR‡GETREGCRŒ.3,0‰BNE.S…MM30NOT"CCR"•3,0+‰MOVE.W„#$42C0,D2‹D2=INSTRUCTIONMASK‰3,0 ‰BRA.S…MM313"MOVE‚CCR,"Ž3,0MM30 ‰BSR‡GETREGSRŒSR,?•2,3‰BNE.S…MM40NOœ2,3‰MOVE.W„#$40C0,D2‹YES MM313„BSR‡COMMA­3,0 ‰BSR‡EADADATAALTERABLEONLY MM315„OR.W†D6,D2 ‰BSR‡SIZEWORD ‰BRA‡CMMD2 MM40…BSR‡GETREGUSŒ.2,3 ‰BNE.S…MM50 ‰BSR‡COMMA ‰MOVE.W„#$4E68,D2‹USP,A@ ‰BSR‡GETREGA‰BNE‡ER10.2,3 ‰BRA‡MMQ20 !* GET EXCEPTIONS FROM DESTINATION MM50…DSˆ0 $‰BSR‡A5TODESTŒMOVEA5TODESTINATION ‰BSR‡GETREGCRŒ.2,3 ‰BNE.S…MM60‰MOVE.W„#$44C0,D2‹,CCR MM508„CMP.B…#'',(A5) ‰BNE‡ER10 ,‰MOV- E.L„PTROP(A1),A5ˆA5=POINTERTOOPERAND !‰BSR‡EADADDR„DATAADDRESSINGONLY ‰BRA‡MM315 MM60…BSR‡GETREGSRŒ,SR‰BNE.S…MM70NOœ2,3"‰MOVE.W„#$46C0,D2‹YES;,SR’3,0 ‰BRA.S…MM508 MM70…BSR‡GETREGUSŒA@,USP?–2,3‰BNE.S…MM80NO‰MOVE.W„#$4E60,D2‹YES‰CMP.B…#'',(A5)+‰BNE‡ER8‘.3,0 ‰MOVE.L„PTROP(A1),A5 ‰BSR‡GETREGA‰BNE‡ER8‘.2,3 ‰BRA‡MMQ20 MM80…MOVE.L„PTROP(A1),A5 ‰BSR‡FSIZEGETSIZE(BITS‚7-6)"‰LSL.W…#6,D2ADJUSTTO(BITS13-12) ‰BTST†#13,D2‰BNE.S…MM804.L10TO10‰ADD.W…#$1000,D2‹.W01TO11‰OR.W†#$1000,D2‹.B00TO01)MM804„BSR‡EAALLSOURCE;ALLMODESALLOWED ‰OR.W†D6,D2 5* IF BITE SIZE; "ADDRESS REGISTER DIRECT" NOT ALLOWED ‰MOVE.L„D2,D0‰AND.W…#$3000,D0‰CMP.W…#$1000,D0‹.1,2 ‰BNE.S…MM806‰AND.B…#$38,D6.1,2‰CMP.B…#$08,D6 ‰BEQ.S…ER8 MM806„DSˆ0 ‰BSR‡COMMA $‰MOVE.W„#$1FF,D7ŒDATAALTERABLE+A@‰BSR‡EA  ‰MOVE.L„D6,D0DESTINATION‰AND.W…#$0038,D0‰CMP.W…#$0008,D0‰BEQ‡MMOVEA1A@MAKEMOVEA +* POSITION REGISTER AND MODE OF DESTINATION3MM825„ROR.L…#3,D6RRR..........................MMM‰ROR.W…#3,D6 MMM.............*‰SWAP†D6’MMM.............RRR.............‰ROL.W…#3,D6 .............RRR.‰ROL.L…#1,D6MM..........................RRRM.‰ROL.L…#8,D6....................RRRMMM...... ‰OR.W†D6,D2 ‰BRA‡CMMD2 PAGE MMOVECƒDSˆ0“(INDEX38)68010Ž3,0‰BSR‡SIZELONGŒ.3,0 %‰ADD.B…#2,TNB(A1)ŠNUMBEROFBYTES3,0 '‰BSR.S…MLFSLOOKFORSPECIALSYMBOL‡3,0‰BNE.S…MMOVEC10ŒNOTFOUND•3,0 * Rc,Rn‰BSR‡COMMA.3,0 %‰BSR‡GETREGADŒGETREGISTERAORD‹3,0‰BNE.S…ER8‘.3,0‰OR.W†D1,D0.3,0 )MMOVEC05ROR.W…#4,D0RRRR............Ž3,0 ‰OR.W†D6,D0RRRRX0000000000XŽ3,0&‰MOVE.W„D0,TDATA+2(A1)†SECONDWORD“3,0‰BRA‡CMMD2.3,0 -MMOVEC10OR.W†#1,D2DIRECTIONBIT(Rn,Rc)‰3,0‰BSR‡GETREGADŒ.3,0‰BNE.S…ER8‘.3,0‰OR.W†D1,D0.3,0 ‰BSR‡COMMA.3,0 ‰BSR.S…MLFS.3,0‰BEQ‡MMOVEC05Œ.3,0ER8†BRA‡ER’.3,0 ** LOOK FOR SPECIAL SYMBOL: SFC DFC USP VBRMLFS…CLR.L…D1’.3,0‰MOVE.B„(A5),D1000Xš3,0‰ASL.L…#8,D100X0š3,0‰MOVE.B„1(A5),D1Œ00XYš3,0‰ASL.L…#8,D10XY0š3,0‰MOVE.B„2(A5),D1Œ0XYZš3,0#‰CLR.L…D6’D6=VALUEFORRETURN‰3,0‰CMP.L…#'SFC'>>8,D1ˆ.3,0‰BEQ.S…MLFS94ŽMATCH™3,0'‰MOVE.L„#1,D6D6=VALUEFORRETURN‰3,0‰CMP.L…#'DFC'>>8,D1ˆ.3,0‰BEQ.S…MLFS94ŽMATCH™3,0*‰MOVE.W„#$800,D6ŒD6=VALUEFORRETURN‰3,0‰CMP.L…#'USP'>>8,D1ˆ.3,0‰BEQ.S…MLFS94ŽMATCH™3,0*‰MOVE.W„#$801,D6ŒD6=VALUEFORRETURN‰3,0‰CMP.L…#'VBR'>>8,D1ˆ.3,0‰BNE.S…MLFS95ŽMISS-MATCH”3,0.MLFS94ƒADD.L…#3,A5ADJUSTGETCHARPOINTER‡3,0MLFS95ƒRTS›.3,0 PAGE MMOVESƒDSˆ0“(INDEX39)68010Ž3,0 ‰BSR‡FSIZEORSIZEINTOD23,0 %‰ADD.B…#2,TNB(A1)ŠNUMBEROFBYTES3,0*‰ADD.L…#2,D3FORCESTOREPTRPASTMASK…3,0 ‰BSR‡GETREGADŒ.3,0‰BEQ.S…MMOVES44ŒRn,—3,0 *ƒ,Rn"‰BSR‡EAM‘MEMORYALTERABLEONLY‰3,0‰OR.W†D6,D2.3,0 ‰BSR‡COMMA.3,0 ‰BSR‡GETREGADŒ.3,0‰BNE‡ER8‘.3,0 ‰OR.W†D1,D0.3,0‰ROR.W…#4,D0.3,0&‰MOVE.W„D0,TDATA+2(A1)†SECONDWORD“3,0‰BRA.S…CMMD22Ž.3,0 MMOVES44OR.W†D1,D0.3,0‰ROR.W…#4,D0.3,0 ‰OR.W†#$800,D0ŒDIRECTIONBIT‘3,0&‰MOVE.W„D0,TDATA+2(A1)†SECONDWORD“3,0 ‰BSR‡COMMA.3,0 "‰BSR‡EAM‘MEMORYALTERABLEONLY‰3,0‰OR.W†D6,D2.3,0CMMD22ƒBRA‡CMMD2.3,0  PAGEMMOVEA1‚CLR.L…D3‰MOVE.B„#2,TNB(A1) MMOVEAƒDSˆ0“(INDEX32),‰MOVE.L„PTROP(A1),A5ˆA5=POINTERTOOPERAND $‰MOVE.W„TLENGTH(A1),D2†D2=SIZE•1,2‰BEQ‡ER’.BYTENOTALLOWED ‰LSL.W…#6,D2.SIZE™1,2‰BTST†#12,D2Ž.1,2‰BEQ.S…MMA225Ž.L=..10•1,2‰OR.W†#$3000,D2‹.W=..11•1,2MMA225 ‰BSR‡EAALLALLMODESALLOWED ‰OR.W†D6,D2 ‰BSR‡COMMA ‰MOVE.L„#$0002,D7‹A@ONLY—3,0‰BSR‡EA ‰BRA‡MM825 PAGEMJMP…DSˆ0“(INDEX18)‰TST.B…TLSPEC(A1)Š.1,11‰BEQ.S…MJMP32ŽDEFAULT(ALLOWEITHER.SOR.L)1,1‰MOVE.W„TLENGTH(A1),D0†.1,1‰BEQ.S…ER7‘.BNOTALLOWED3,0'‰MOVE.W„#$6E4,D7ŒD7=MODESALLOWEDŒ1,1‰CMP.W…#$40,D0.1,1,‰BEQ.S…MJMP22Ž.SSPECIFIED(.WACCEPTED)„1,1!‰MOVE.W„#$8764,D7‹MODEFOR.L“. 1,1MJMP22ƒBSR‡EA’.1,1‰BRA.S…MJMP42Ž.1,1 *MJMP32ƒBSR‡EAC‘CONTROLADDRESSINGONLY‡1,1MJMP42ƒOR.W†D6,D2.1,1‰BRA.S…CMMD21Ž.3,0 SPC 4 * SIZE = LONGMLEA…DSˆ0“(INDEX19) ‰BSR‡SIZELONG ‰BSR‡EAC‡CONTROLADDRESSINGONLY ‰OR.W†D6,D2 ‰BSR‡COMMA ‰BSR‡GETREGA‰BNE.S…ER7‘.3,0 ‰ROR.W…#7,D0 MLEA22ƒOR.W†D0,D2.3,0‰BRA.S…CMMD21Ž.3,0 PAGE * SIZE = LONGMPEA…DSˆ0“(INDEX36) ‰BSR‡SIZELONG ‰BSR‡EAC‡CONTROLADDRESSINGONLY ‰OR.W†D6,D2CMMD21ƒBRA‡CMMD2.3,0 SPC 3MSWAP„DSˆ0“(INDEX24) * SIZE WORD‰CMP.W…#$0040,TLENGTH(A1)‰BNE.S…ER7‘NOT.W˜3,0 ‰BSR‡GETREGDD@ONLY‰BEQ‡MLEA22Ž.3,0ER7†BRA‡ER’.3,0 PAGEGETIMMƒCMP.B…#'#',(A5)+‰BNE‡ER7‘.3,0 ‰BSR‡EV’EVALUATEEXPRESSION‰RTS›D0=VALUE MLINK„BSR‡GETREGA(INDEX20)‰BNE‡ER7‘.3,0 ‰OR.W†D0,D2 ‰BSR‡COMMA MRTD…BSR‡GETIMMŽ(INDEX40)”3,0 ‰MOVE.L„D0,D5 ‰BSR‡EA16BITS‰MOVE.W„D0,TDATA+2(A1) ‰ADD.B…#2,TNB(A1)‰BRA‡CMMD21Ž.3,0 MSTOP„DSˆ0“(INDEX23) * UNSIZED ‰BSR‡GETIMM‰CMP.L…#$00010000,D0‰BCC‡ER7‘.3,0‰MOVE.W„D0,TDATA+2(A1)‰ADD.B…#2,TNB(A1)‰BRA‡CMMD21Ž.3,0 MTRAP„DSˆ0“(INDEX25) ‰BSR‡GETIMM ‰CMP.L…#16,D0‰BCC‡ER7‘.3,0 ‰OR.W†D0,D2‰BRA‡CMMD21Ž.3,0 PAGEMUNLK„DSˆ0“(INDEX26) * UNSIZED ‰BSR‡GETREGA‰BNE‡ER7‘.3,0 ‰OR.W†D0,D2‰BRA‡CMMD21Ž.3,0 SPC 4#MDC†DSˆ0“(INDEX37).WONLYALLOWED‰BSR‡EV ‰MOVE.L„D0,D5‰BSR‡EA16BITONLY.WALLOWED ‰MOVE.W„D5,D2‰BRA‡CMMD21Ž.3,0  ‰END é‰TTL‡DCODE68K‚DISASSEMBLER+DCODE68KIDNT†3,1‡68KONELINEDISASSEMBLER *‡VERSION„AUTHOR„DATE†REASON=*ˆ3.1‡S.Ludwig‚01/16/85‚MakeMOVEPoutputdisplacementindec6*ˆ3.0‡S.Ludwig‚12/16/84‚Makeprogramworkwitha68010 ‰XREF†BESTFIT‰XREF†PNT4HX¬3,0‰XREF†FORMADDR‰XREF†HEX2DEC,SYMORDEC SPC 1‰XDEF†DCODE68K‰XDEF†DCODE68MŒ.3,0 SPC 1$BUFSIZE‚SET‡80’SIZEOFOUTPUTBUFFER EOT†SET‡4 SPC 1*ˆCALLINGSEQUENCE:$*ƒD0,D1,D2=CODETOBEDISASSEMBLED=*ƒD3=PROCESSORTYPE:0=68000,4=68008,8=68010,C=68020Š3,0,*ƒA4=VALUEOFPROGRAMCOUNTERFORTHECODE3*ƒA5=POINTERTOSTOREDATA(BUFSIZE=80ASSUMED)"*ˆJSR‡DCODE68MŒ000/008/010/0203,0 SPC 1*ˆCALLINGSEQUENCE:$*ƒD0,D1,D2=CODETOBEDISASSEMBLED,*ƒA4=VALUEOFPROGRAMCOUNTERFORTHECODE3*ƒA5=POINTERTOSTOREDATA(BUFSIZE=80ASSUMED)*ˆJSR‡DCODE68K†68000ONLY SPC 1 *ˆRETURN:4*ƒA4=VALUEOFPROGRAMCOUNTERFORNEXTINSTRUCTION&*ƒA5=POINTERTOLINEASDISASSEMBLED"*ƒA3=POINTERTOENDOFLINE¦3/82*?* 0123456789012345678901234567890123456789012345678901234567890B* AAAAAA:MODULEXX:A DDDDDDDDDDDDDDDDDDDD LLLLLLLL OP-CODE OPERAND.*“FDATA™FOC…FOP SPC 1FDATA„EQU‡18‚DATAFIELDFOC†EQU‡48‚OP-CODEFIELDFOP†EQU‡56‚OPERANDFIELD SPC 1* CAUSES ORGIN MODULO 4 LONG…MACRO‰DSˆ0 ‰DS.B†(*-X)&2‰ENDM SPC 3LOCVARSZEQU26Ž.§3,0‰OFFSET-LOCVARSZ#DATA…DS.L3ŽCODETOBEDISASSEMBLED5ENDBUFƒDS.L1ŽA(ENDTEXTBUFFERFORDISASSEMBLY)†3/82*HISPC„DS.L1ŽPCOFCODEBEINGDISASSEMBLED*BEGBUFƒDS.L1ŽA(STARTOFTEXTBUFFER)‘3/82PRTYPEƒDS.W†1‰.‰.3,0'‰DS.B†0‰(PCMUSTBEZERO'00000000'3,0 PAGEEAM003ƒEQU‡$003†D@A@£3,04EAM1F4ƒEQU‡$1F4†CONTROLALTERABLE+PREDECREMENTˆ3,0/EAM1FCƒEQU‡$1FC†MEMORYALTERABLEADDRESSING3,0-EAM1FDƒEQU‡$1FD†DATAALTERABLEADDRESSING3,0/EAM1FEƒEQU‡$1FE†ALTERABLEMEMORYADDRESSING3,0'EAM1FFƒEQU‡$1FF†DATAALTERABLE+A@•3,0&EAM7E4ƒEQU‡$7E4†CONTROLADDRESSING–3,0+EAM7ECƒEQU‡$7EC†CONTROL+POSTINCREMENT‘3,0#EAMFFDƒEQU‡$FFD†DATAADDRESSING™3,0 ¿DÈbÐfØbàXèjðfø^[[ci ^([0U8V@>HV. EAMFFFƒEQU‡$FFF†ALLMODESŸ3,0 SPC 3 ‰SECTIONƒ9 SPC 2XˆDSˆ0‰BASEADDRESSTHISMODULE ‰LONGš.3,0IRTD…BRA‡ILINK44.3,0 ‰LONGš.3,0IMOVECƒBRA‡IMOVEC11Œ.3,0 ‰LONGš.3,0IMOVESƒBRA‡IMOVES11Œ.3,0 ‰LONGš.3,0IEOR…BRA‡IEOR11Ž.3,0 PAGE‰LONG*‚MOVEMREGISTERSTOEA**‚01001D001S......$*‚..........XXXXXX‚EFFECTIVEADDRESS*‚.........0......‚WORD*‚.........1......‚LONG%*‚.....0..........‚REGISTERTOMEMORY%*‚.....1..........‚MEMORYTOREGISTER* IMOVEMFRDSˆ0‰BSR‡MOVEMSŽSIZE ‰MOVE.L„#$0038,D6‹.1,4‰AND.W…(A4),D6.1,4‰CMP.W…#$0020,D6‰BEQ.S…IM7788ŽPREDECREMENTMODE -‰MOVE.L„#1,D6D6=INCREMENTER(BITPOSITION)‰MOVE.L„#0,D1D1=BITPOSITION ‰BRA.S…IM7799 4IM7788ƒMOVE.L„#-1,D6ŽD6=DECREMENTER(BITPOSITION) ‰MOVE.L„#15,D1ŽD1=BITPOSITION!IM7799ƒBSR‡MOVEMRŽBUILDMASKWORD SPC 1#‰MOVE.B„#',',(A3)+ŠSTORECOMMA“3/82 SPC 1 ‰ADD.L…#2,D3‰MOVE.W„(A4),D4.‰MOVE.W„#EAM1F4,D7ŒCONTROL+PREDECREMENTˆ3/82‰BSR‡EA‰BRA.S…CS16COMMON SPC 1‰LONG*MOVEM‚EA‚TOREGISTERS*IMOVEMTRBSR‡MOVEMSŽSIZE ‰ADD.L…#2,D3/‰MOVE.W„#EAM7EC,D7ŒCONTROL+POSTINCREMENT‡3/82‰BSR‡EA SPC 1#‰MOVE.B„#',',(A3)+ŒSTORECOMMA‘3/82 SPC 1+‰MOVE.L„#1,D6D6=BITPOSITIONINCREMENTER‰MOVE.L„#0,D1D1=BITPOSITION ‰BSR‡MOVEMR SPC 1CS16…BRA.S…CS15COMMON SPC 1 PAGE‰LONG ISTOP„DSˆ0‰MOVE.W„2(A4),D0!‰MOVE.B„#'#',(A3)+ŠIMMEDIATE•3/82‰MOVE.B„#'$',(A3)+ŠHEX›3/82‰BSR‡PNT4HXŽVALUE ‰BRA‡COMMON4 PAGE‰LONG#IMMED„DSˆ0“ADD‚AND‚CMP#‚EOR‚OR‚SUB ‰BSR‡FORMSIZE‰ADD.L…#2,D3SIZE=4!‰MOVE.B„#'#',(A3)+ŠIMMEDIATE•3/82 SPC 1 ‰CLR.L…D0$‰MOVE.W„2(A4),D0ŒD0=EXTENSIONWORD‰MOVE.W„(A4),D1 ‰LSR.W…#6,D1 ‰AND.W…#3,D1‰BEQ.S…IMMED65ƒ.BYTE SPC 1 ‰CMP.B…#1,D1‰BEQ.S…IMMED75ƒ.WORD SPC 1‰ADD.L…#2,D3.LONG„SIZE=6)‰MOVE.L„2(A4),D0ŒD0=LONGEXTENSIONWORD SPC 1IMMED45‚BSR‡BESTFIT.3/82 SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 ‰MOVE†(A4),D0‰AND.W…#$003F,D05‰CMP.W…#$003C,D0‹DESTINATIONADDRESSMODE111100‚"SR"‰BNE.S…IMMED55NOTFOUND ‰MOVE.W„(A4),D0"SR"‚ILLEGALFOR‰AND.W…#$4000,D0ADDIƒSUBI‚CMPI‰BNE‡FERROR’0600ƒ0400‚0C00 ‰MOVE.W„(A4),D1‰AND.W…#$00C0,D1‰CMP.W…#$0080,D1‰BEQ‡FERRORŽ.LONGNOTALLOWED 0‰MOVE.B„#'S',(A3)+Š#,SRFORANDI,EORI,ORI†3/82‰MOVE.B„#'R',(A3)+Š.3/82CS15…BRA.S…CS14”COMMON SPC 1IMMED55‚BSR‡EA‰BRA.S…CS14•COMMON *IMMED65‚MOVE.L„D0,D1D1=XXXXXXXX........"‰LSR.W…#8,D1D1=00000000XXXXXXXX‰BEQ.S…IMMED75 ‰MOVE.L„D0,D1 ‰ASR.W…#7,D1‰ADD.W…#1,D1CHECKFORNEGATIVE ‰BNE‡FERROR IMMED75‚EXT.L…D0 ‰BRA‡IMMED45 PAGE*ƒBIT‚5432109876543210,*ˆ....RRRMMM......„DESTINATIONREGISTERMODE'*ˆ..........MMMRRR„SOURCEMODEREGISTER*ˆ0001............„.BYTE*ˆ0011............„.WORD*ˆ0010............„.LONG*6* IF BYTE SIZE; DESTINATION ADDRESS DIRECT NOT ALLOWED‰LONG IMOVE„DSˆ0 ‰BRA‡IMOVEA1 SPC 2‰LONG ILINK„DSˆ0‰BSR.S…FORMREGA SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASERARATOR‘3/82 SPC 1)ILINK44‚MOVE.B„#'#',(A3)+Š(RTD68010)“3,0‰MOVE.W„2(A4),D0 ‰EXT.L…D0!‰BSR‡HEX2DECDECIMALDISPLACEMENT ‰BRA‡COMMON4 PAGE‰LONGFORM1„DSˆ0“CLR‚NEG‚NEGX‚NOTTST‰BSR.L…FORMSIZE SPC 1 *œNBCDTAS!FORM1AƒBSR‡EA’DATAALTERABLEONLYCS14…BRA.S…CS13COMMON SPC 1‰LONGFORM3„DSˆ0“EXT‚SWAP‰BSR.S…FORMREGD‰BRA.S…CS13COMMON SPC 1‰LONGFORM4„DSˆ0“TRAP‰MOVE.B„#'#',(A3)+Š.3/82‰MOVE.W„(A4),D0‰AND.L…#$0F,D0‰BSR‡HEX2DECDECIMAL‰BRA.S…CS13COMMON SPC 1‰LONGFORM5„DSˆ0“UNLNK‰BSR.S…FORMREGA‰BRA.S…CS13‘COMMON‚PAGE*…5432109876543210#*…....RRR.........‡ADDRESSREGISTER$*…..........XXXXXX‡EFFECTIVEADDRESS*‰LONGFORM6AƒDSˆ0“LEA%‰MOVE.W„#EAM7E4,D7CONTROLADDRESSING ‰BSR.S…EA10 SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 SPC 1‰MOVE.W„(A4),D4 ‰ROL.W…#7,D4‰BSR.S…FORMREGA‰BRA.S…CS13‘COMMON SPC 1*ƒBIT‚5432109876543210 *ˆ....DDD.........„DATAREGISTER$*ˆ..........XXXXXX„EFFECTIVEADDRESS*‰LONG/ #FORM6DƒDSˆ0“CHK‚DIVS‚DIVU‚MULS‚MULU"‰MOVE.W„#EAMFFD,D7ŒDATAADDRESSING ‰BSR.S…EA10 SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 SPC 1‰MOVE.W„(A4),D4 ‰ROL.W…#7,D4‰BSR.S…FORMREGD‰BRA.S…CS13COMMON SPC 1)FORMREGAMOVE.B„#'A',(A3)+ŠFORMATA@•3/82FORMREG5AND.B…#$07,D4 ‰OR.B†#'0',D4‰MOVE.B„D4,(A3)+Œ.3/82‰RTS SPC 1)FORMREGDMOVE.B„#'D',(A3)+ŠFORMATD@•3/82 ‰BRA‡FORMREG5 SPC 1*‚BIT‚5432109876543210!*‡....DDD......DDD…DATAREGISTERS*‰LONGFORM7„DSˆ0“EXG ‰ROL.W…#7,D4 ‰BSR‡FORMREGD SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 SPC 1‰MOVE.W„(A4),D4 ‰BSR‡FORMREGD‰BRA.S…CS13COMMON SPC 1*‚BIT‚5432109876543210$*‡....AAA......AAA…ADDRESSREGISTERS*‰LONGFORM8„DSˆ0“EXG ‰ROL.W…#7,D4 ‰BSR‡FORMREGA SPC 1.FORM815‚MOVE.B„#',',(A3)+ŠCOMMASEPARATOR3/82 SPC 1‰MOVE.W„(A4),D4 ‰BSR‡FORMREGACS13…BRA.S…CS12ACOMMON SPC 1*‚BIT‚5432109876543210 *‡....DDD.........…DATAREGISTER#*‡.............AAA…ADDRESSREGISTER*‰LONGFORM9„DSˆ0“EXG ‰ROL.W…#7,D4‰BSR‡FORMREGD‚DATAREGISTER ‰BRA‡FORM815 SPC 3 EA10…BRA‡EA PAGE*ƒ5432109876543210$*ƒ..........AAAAAA‰EFFECTIVEADDRESS*ƒ.......MMM......‰OP-MODE*ƒ....RRR.........‰D-REGISTER*ƒ.......011......‰WORD‚EA,A@*ƒ.......111......‰LONG‚EA,A@C*ƒ.......000......‰EA,D@BYTE(ADDRESSREGISTERDIRECTNOTALLOWED)*ƒ.......0........‰EA,D@*ƒ.......1........‰D@,EA*ƒ........00......‰BYTE*ƒ........01......‰WORD*ƒ........10......‰LONG*‰LONG%FORM10EXDSˆ0“ADD‚CMP,A@‚CMP‚SUB$‰MOVE.W„#EAMFFF,D7ŒALLMODESALLOWED ‰MOVE.L„D4,D0‰AND.W…#$01C0,D0‰BEQ.S…FORM103.......000......‰CMP.W…#$01C0,D0 ‰BEQ.S…FORM10E3Œ.......111......‰CMP.W…#$00C0,D0!‰BNE.S…FORM10E6Œ.......011....... ‰MOVE.B„#'.',(A5)+ŠSTOREPERIOD‰MOVE.B„#'W',(A5)+‰BRA.S…FORM10E4 SPC 1FORM10E3MOVE.B„#'.',(A5)+‰MOVE.B„#'L',(A5)+ FORM10E4BSR‡EA10 SPC 1+‰MOVE.B„D5,(A3)+ŒSTORECOMMASEPARATOR‰3/82 SPC 1‰MOVE.W„(A4),D4 ‰ROL.W…#7,D4‰BSR‡FORMREGAŒ,A@CS12A„BRA.S…CS12COMMON FORM10E6BTST.B„#0,(A4)'‰BNE.S…FORM105.......1........‚D@,'‰BRA.S…FORM104.......0........‚,D@ PAGE*ƒ5432109876543210$*ƒ..........AAAAAA‰EFFECTIVEADDRESS*ƒ.......MMM......‰OP-MODE*ƒ....RRR.........‰D-REGISTER*ƒ.......0........‰EA,D@*ƒ.......1........‰D@,EA*ƒ........00......‰BYTE*ƒ........01......‰WORD*ƒ........10......‰LONG‰LONGFORM10ƒDSˆ0“ANDƒOR–3,0‰BTST.B„#0,(A4)‰BNE.S…FORM105 SPC 1)FORM103‚MOVE.W„#EAMFFD,D7ŒDATAADDRESSINGFORM104‚BSR‡FORMSIZEŒ.2,4‰BSR‡EA10,D@—2,4 SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4 ‰BSR‡FORMREGD‰BRA.S…CS12COMMON SPC 1FORM105‚BSR‡FORMSIZEŒ.2,4‰MOVE.B„(A4),D4D@, ‰LSR.B…#1,D4 ‰BSR‡FORMREGD SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 ‰MOVE.W„(A4),D42‰MOVE.W„#EAM1FC,D7ŠALTERABLEMEMORYADDRESSINGƒ4,0 ‰BSR‡EA10CS12…BRA.S…CS11AŽCOMMON PAGE‰LONG *œJMP‚JSR‚PEA+FORM11ƒMOVE.W„#EAM7E4,D7ŒCONTROLADDERSSING‰BSR‡EA‰BRA.S…CS11A…COMMON SPC 1‰LONG *œJMP‚JSR+FORM11SLMOVE.L„D4,D0LOOKFOR.S‚OR‚.L‹1,4‰AND.W…#$3F,D0.1,4‰CMP.W…#$38,D0.1,4‰BNE.S…FORM112NOT.S˜1,4‰MOVE.B„#'.',(A5)+ŠPERIOD˜1,4‰MOVE.B„#'S',(A5)+ŠS1,4FORM112‚CMP.W…#$39,D0.1,4‰BNE.S…FORM114.1,4‰MOVE.B„#'.',(A5)+ŠPERIOD˜1,4‰MOVE.B„#'L',(A5)+ŠL1,4FORM114‚BRA‡FORM11Ž.1,4 PAGE* BIT 5432109876543210,*…....XXX.....0...‡DATADESTINATIONREGISTER#*…....XXX.....1...‡ADDRESSREGISTER*…....XXX.00......‡BYTE*…........01......‡WORD*…........10......‡LONG1*…............0...‡DATAREGISTERTODATAREGISTER#*…............1...‡MEMORYTOMEMORY'*…............0XXX‡DATASOURCEREGISTER**…............1XXX‡ADDRESSSOURCEREGISTER*‰LONGFORM12ƒDSˆ0“ABCD‚ADDX‚SBCD‚SUBX ‰BSR‡FORMSIZE SPC 1 ‰BTST†#3,D4‰BNE.S…FORM125 SPC 1"‰BSR‡FORMREGDŒD@,D@;ƒFORMATSOURCE SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4 ‰BSR‡FORMREGDŒFORMATDESTINATION/ CS11A„BRA.S…CS11COMMON SPC 1 FORM125‚MOVE.B„#'-',(A3)+Š-3/82‰MOVE.B„#'(',(A3)+Š(3/82‰BSR‡FORMREGAŒA@„SOURCE SPC 1‰MOVE.L„#'(-,)',D0‹),-(‰BSR.S…SCHRSTORECHARS SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4‰BSR‡FORMREGAŒA@ƒDESTINATION‰MOVE.B„#')',(A3)+Š.3/82‰BRA.S…CS11COMMON PAGE* BIT 5432109876543210/*…....XXX.....1...‡ADDRESSREGISTER„DESTINATION*…....XXX.00......‡BYTE*…........01......‡WORD*…........10......‡LONG#*…............1...‡MEMORYTOMEMORY**…............1XXX‡ADDRESSSOURCEREGISTER*‰LONGFORM12A‚DSˆ0“CMPM ‰BSR‡FORMSIZE SPC 1‰MOVE.B„#'(',(A3)+Š(3/82‰BSR‡FORMREGAŒA@ SPC 1‰MOVE.L„#'(,+)',D0‹)+,(‰BSR.S…SCHRSTORECHARS SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4‰BSR‡FORMREGAŒA@‰MOVE.B„#')',(A3)+Š.3/82‰MOVE.B„#'+',(A3)+Š.3/82CS11…BRA‡COMMON PAGE‰LONGIQUICKƒBRA‡IQUICKAADDQ‚SUBQ SPC 4* BIT 5432109876543210*…0111...0........‡FIXED *…....RRR.........‡DATAREGISTER%*…........DDDDDDDD‡SIGNEXTENDEDDATA*‰LONG IMOVEQƒDSˆ0!‰MOVE.B„#'#',(A3)+ŠIMMEDIATE•3/82 SPC 1‰MOVE.W„(A4),D0 ‰EXT.W…D0 ‰EXT.L…D0‰BSR‡HEX2DECDECIMAL SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 SPC 1 ‰ROL.W…#7,D4 ‰BSR‡FORMREGD‰BRA‡CS11COMMON PAGE'SCHR…MOVE.B„D0,(A3)+ŒOUTPUTSTRING‘3/82 ‰LSR.L…#8,D0‰BNE‡SCHRMORETOOUTPUT‰RTS SPC 2 *MOVEFROMSR‚(STATUSREGISTER)*‰LONGIMVFSRƒMOVE.L„#',RS'>>8,D0‹SR, SPC 1 ‰BSR‡SCHR‰BSR‡EA’DATAALTERABLE‰BRA‡CS11COMMON SPC 1$* MOVE FROM USP (USER STACK POINTER)*‰LONGIMVFUSP‚MOVE.L„#',PSU',D0ŠUSP, ‰BSR‡SCHR ‰BSR‡FORMREGA‰BRA‡CS11’COMMON SPC 1* MOVE TO SR (STATUS REGISTER)*‰LONG(IMVTSRƒMOVE.W„#EAMFFD,D7ŒDATAADDRESSING‰BSR‡EA‰MOVE.L„#'RS,'>>8,D0‹,SRIMVT44ƒBSR‡SCHRCS11B„BRA‡CS11”COMMON SPC 1"* MOVE TO USP (USER STACK POINTER)*‰LONGIMVTUSP‚BSR‡FORMREGA‰MOVE.L„#'PSU,',D0Š,USP ‰BRA‡IMVT44 PAGE'*‚MOVETOCCR(CONDITIONCODEREGISTER)*‰LONG)IMVTCCR‚MOVE.W„#EAMFFD,D7ŒDATAADDRESSING‰BSR‡EA‰MOVE.L„#'RCC,',D0Š,CCR ‰BRA‡IMVT44 3*‚MOVEFROMCCR(CONDITIONCODEREGISTER)‡680103,0*Ä3,0 ‰LONG¸3,0"IMVTFCR‚MOVE.L„#',RCC',D0ŠCCR,š3,0‰BSR‡SCHR.3,0&‰MOVE.W„#EAMFFD,D7ŠDATAADDRESSING3,0 ‰BSR‡EA’.3,0‰BRA‡CS11BCOMMON˜3,0 PAGE*BIT‚5432109876543210*†0000...1..001...†FIXED *†....XXX.........†DATAREGISTER%*†........0.......†MEMORYTOREGISTER%*†........1.......†REGISTERTOMEMORY*†.........0......†WORD*†.........1......†LONG#*†.............XXX†ADDRESSREGISTER*‰LONG IMOVEPƒDSˆ0‰MOVE.B„#'.',(A5)+ŠD@,#(A@)‰MOVE.W„#'LW',D0 ‰BTST†#6,D4‰BEQ.S…IMOVEP11ŒUSE"W"‰LSR.W…#8,D0USE"L"IMOVEP11MOVE.B„D0,(A5)+ŒLENGTH SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4 SPC 1‰BTST.B„#7,1(A4)‰BEQ.S…IMOVEP35 SPC 1‰BSR‡FORMREGDŒD@,$HHHH(A@) SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 SPC 1‰MOVE.W„(A4),D4‰BSR.S…IMOVEP66CS20…BRA‡COMMON4 SPC 1$IMOVEP35BSR.S…IMOVEP66Œ$HHHH(A@),D@ SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 SPC 1‰MOVE.B„(A4),D4 ‰LSR.B…#1,D4 ‰BSR‡FORMREGD‰BRA‡CS20COMMON4 SPC 10IMOVEP66MOVE.W„2(A4),D0ŒFORMATDISPLACEMENT‹3,1‰EXT.L…D0’EXTENDTHESIGN3,1$‰BSR‡SYMORDECŒCONVERTTODECIMALŒ3,1 SPC 1‰MOVE.B„#'(',(A3)+¨3/82‰MOVE.W„(A4),D4 ‰BSR‡FORMREGA‰MOVE.B„#')',(A3)+¨3/82‰RTS PAGE‰LONG.SCOMMON‚BRA‡COMMONŽNOPRESETRTERTRRTSTRAPV SPC 1‰LONG!SCC†BSR‡ICCCCGETRESTOFOP-CODE‰BSR‡EA’DATAALTERABLE ‰BRA‡SCOMMON  ‰LONGIDBCC„DSˆ0“DB--‰MOVE.W„(A4),D4 ‰BSR‡FORMREGD %‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 ‰BSR‡ICCCC ‰BRA.S…ICC55 SPC 1*‚BIT‚5432109876543210*‡0110............…FIXED*‡....CCCC........…CONDITION*‡........DDDDDDD0…DISPLACEMENT3*‡...............1…ERROR(ODDBOUNDRYDISPLACEMENT)*‰LONG ICC†DSˆ0“B-- ‰BSR‡ICCCC SPC 1IBSR…DS.W†0“BSR‚BRA–2,4 SPC 1 ‰TST.B…D4 ‰BEQ.S…ICC5516BITDISPLACEMENT SPC 1‰MOVE.B„#'.',(A5)+‰MOVE.B„#'S',(A5)+‰EXT.W…D4’8BITDISPLACEMENT SPC 1)ICC35„EXT.L…D4’SIGN-EXTENDEDDISPLACEMENT0 %‰ADD.L…HISPC(A1),D4‡+PROGRAMCOUNTER‰ADD.L…#2,D4+TWO ‰MOVE.L„D4,D0 ‰ASR.L…#1,D4$‰BCS‡FERRORŽODDBOUNDRYDISPLACEMENT ‰BSR‡BESTFIT.3/82 ‰BRA‡SCOMMON SPC 1ICC55„ADD.L…#2,D3SIZE‰MOVE.W„2(A4),D4‰MOVE.B„#'.',(A5)+-‰MOVE.B„#'L',(A5)+Š.LFOR16BITDISPLACEMENT ‰BRA‡ICC35 PAGE‰LONG*šBCHG‚BCLR‚BSET‚BTSTISETD„DSˆ0“DYNAMICBIT ‰ROL.W…#7,D4‰BSR‡FORMREGDŒDATAREGISTER SPC 1,ISETD12‚MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 SPC 1‰MOVE.W„(A4),D4‰BSR‡EA’DATAALTERABLECS18…BRA‡SCOMMON SPC 3‰LONG*œBCHG‚BCLR‚BSET‚BTST5*‚1STWORD…..........XXXXXX„EAƒDATAALTERABLEONLY)*‚2NDWORD…00000000000YYYYY„BITNUMBER*ISETS„DSˆ0“STATICBIT‰ADD.L…#2,D3…SIZE!‰MOVE.B„#'#',(A3)+ŠIMMEDIATE•3/82 ‰CLR.L…D0/‰MOVE.W„2(A4),D0ŒGETBITPOSITIONFROM2NDWORD ‰MOVE.L„D0,D1 ‰LSR.L…#5,D1 ‰BNE‡FERROR‰BSR‡HEX2DECDECIMAL SPC 1 ‰BRA‡ISETD12 PAGE*ƒBIT‚5432109876543210+*ˆ....XXX.........„IMMEDIATECOUNT/REGISTER*ˆ.......0........„RIGHTSHIFT*ˆ.......1........„LEFTSHIFT*ˆ........00......„BYTE*ˆ........01......„WORD*ˆ........10......„LONG *ˆ....0...11......„WORD(MEMORY)$*ˆ....0...11AAAAAA„EFFECTIVEADDRESS(*ˆ..........0.....„SHIFTIMMEDIATECOUNT;*ˆ..........1.....„SHIFTCOUNT(MODULO64)INDATAREGISTER*‰LONGISHIFTƒDSˆ0“AS-‚LS-‚RO-‚ROX-‰MOVE.W„#'LR',D0‰BTST†#8,D4DIRECTIONBIT‰BEQ.S…ISHIFT13ŒRIGHT‰LSR.W…#8,D0LEFT.ISHIFT13MOVE.B„D0,(A5)+ŒDIRECTION;"L"OR"R" SPC 1‰MOVE.W„(A4),D0‰AND.W…#$00C0,D0‰CMP.W…#$00C0,D0‰BEQ.S…ISHIFTMMEMORYSHIFT SPC 1 ‰BSR‡FORMSIZE SPC 1 ‰ROL.W…#7,D4‰BTST†#12,D4ŽI/RBIT!‰BNE.S…ISHIFT33ŒCOUNTINREGISTER SPC 1‰AND.B…#$07,D4IMMEDIATECOUNT‰BNE.S…ISHIFT23"‰OR.B†#$08,D4CHANGEZEROTOEIGHTISHIFT23OR.B†#'0',D4‰MOVE.B„#'#',(A3)+Š.3/82‰MOVE.B„D4,(A3)+Œ.3/82‰BRA.S…ISHIFT44 SPC 1ISHIFT33BSR‡FORMREGD SPC 1-ISHIFT44MOVE.B„D5,(A3)+‹COMMASEPARATOR3/82 SPC 1‰MOVE.W„(A4),D4 ‰BSR‡FORMREGDCS17…BRA‡CS18COMMON SPC 1‰LONG ISHIFTM‚MOVE.B„#'.',(A5)+ŠPERIOD‰MOVE.B„#'W',(A5)+Š.WORD ‰BTST†#11,D4‰BNE‡FERRORŽBIT11MUSTBEZERO SPC 1.‰MOVE.W„#EAM1FC,D7ŒMEMORYALTERABLEADDRESSING‰BSR‡EA‰BRA‡CS17COMMON PAGE.ICCCC„MOVE.L„#$0F,D0APPENDCONDITIONCODE‰1,4‰AND.B…(A4),D0D0=CCC–1,4‰LSL.L…#1,D0D0=CCC*2 SPC 1-‰MOVE.W„BRTBL(PC,D0.W),D1ƒGETBRANCHMNEMONIC*‰MOVE.B„D1,(A5)+Œ(REVERSED)FROMTHETABLE)‰LSR.W…#8,D1ANDADDTHENONBLANKPORTION‰CMP.B…#'',D1TOTHEBUFFER. ‰BEQ.S…ICCCC9‰MOVE.B„D1,(A5)+ ICCCC9ƒRTS SPC 2!BRTBL„DC.B†'T'†'T'‚BRAACCEPTED‰DC.B†'F'†'F'‰DC.B†'IH'†'HI'‰DC.B†'SL'†'LS'‰DC.B†'CC'†'CC'‰DC.B†'SC'†'CS'‰DC.B†'EN'†'NE'‰DC.B†'QE'†'EQ'‰DC.B†'CV'†'VC'‰DC.B†'SV'†'VS'‰DC.B†'LP'†'PL'‰DC.B†'IM'†'MI'‰DC.B†'EG'†'GE'‰DC.B†'TL'†'LT'‰DC.B†'TG'†'GT'‰DC.B†'EL'†'LE' PAGE*ƒBIT‚5432109876543210,*ˆ....RRRMMM......„DESTINATIONREGISTERMODE'*ˆ..........MMMRRR„SOURCEMODEREGISTER*4* IF BYTE SIZE; ADDRESS DIRECT NOT ALLOWED AS SOURCE* IMOVEA1‚DSˆ0‰MOVE.W„#EAMFFF,D7ŒALLMODES‰BSR‡EA SPC 1%‰MOVE.B„D5,(A3)+ŒCOMMASEPARATOR3/82 SPC 1 ‰MOVE.W„(A4),D4....RRRMMM......‰LSR.W…#1,D4.....RRRMMM.....‰LSR.B…#5,D4.....RRR.....MMM‰ROR.W…#8,D4.....MMM.....RRR‰LSL.B…#5,D4.....MMMRRR.....‰LSR.W…#5,D4..........MMMRRR SPC 1%* IF .BYTE DESTINATION A@ NOT ALLOWED&‰MOVE.W„#EAM1FF,D7ŒDATAALTERABLE+A@‰MOVE.B„(A4),D0‰CMP.B…#$01,D0‰BNE.S…IMOVE19NOTBYTESIZE !‰MOVE.W„#EAM1FD,D7ŒDATAALTERABLEIMOVE19 ‰BSR‡EA‰BRA.S…CS19†COMMON PAGE.*‚IFBYTE;ADDRESSREGISTERDIRECTNOTALLOWEDIQUICKA‚DSˆ0“ADDQ‚SUBQ‰BSR.S…FORMSIZE SPC 1‰MOVE.B„#'#',(A3)+Š.3/82 ‰ROL.W…#7,D4 ‰AND.B…#7,D4‰BNE.S…IQUICK21 ‰OR.B†#8,D4MAKEZEROINTOEIGHT IQUICK21OR.B†#'0',D4MAKEASCII‰MOVE.B„D4,(A3)+Œ.3/82 SPC 1%‰MOVE.B„D5,(A3)+ŠCOMMASEPARATOR‘3/82 SPC 1‰MOVE.W„(A4),D4 ‰MOVE.W„(A4),D0‰AND.W…#$00C0,D0‰BEQ.S…IQUICK31ŒDATAALTERABLE&‰MOVE.W„#EAM1FF,D7ŠDATAALTERABLE+A@IQUICK31BSR‡EA0 CS19…BRA‡COMMON PAGE*‚BITƒ5432109876543210*ˆ........00......„BYTE*ˆ........01......„WORD*ˆ........10......„LONG*ˆ........11......„ERROR* FORMSIZEDSˆ0‰MOVE.W„(A4),D2‰MOVE.B„#'.',(A5)+ŠSTOREPERIOD ‰LSR.W…#6,D2‰AND.W…#$03,D2 ‰BNE.S…FORM91‰MOVE.B„#'B',(A5)+ŠSTORE"B" ‰BRA.S…FORM95 SPC 1FORM91ƒMOVE.B„#'W',D0 ‰CMP.B…#1,D2 ‰BEQ.S…FORM93‰MOVE.B„#'L',D0 ‰CMP.B…#2,D2‰BNE.S…FE10FERROR'FORM93ƒMOVE.B„D0,(A5)+‚STORE"W"OR"L" FORM95ƒRTS PAGEEA000„BSR‡FORMREGD ‰BTST†#0,D7‰BEQ.S…FE10FERROR‰RTS SPC 2EA001„BSR‡FORMREGA ‰BTST†#1,D7(‰BEQ.S…FE10ŽFERROR‡THISMODENOTALLOWED‰RTS SPC 2EA010„MOVE.B„#'(',(A3)+Š.3/82 ‰BSR‡FORMREGA‰MOVE.B„#')',(A3)+Š.3/82 ‰BTST†#2,D7(‰BEQ.S…FE10ŽFERROR‡THISMODENOTALLOWED‰RTS SPC 2EA011„MOVE.B„#'(',(A3)+Š.3/82 ‰BSR‡FORMREGA‰MOVE.B„#')',(A3)+Š.3/82‰MOVE.B„#'+',(A3)+Š.3/82 ‰BTST†#3,D7(‰BEQ.S…FE10†FERROR…THISMODENOTALLOWED EA011RTS RTS SPC 2EA100„MOVE.B„#'-',(A3)+Š.3/82‰MOVE.B„#'(',(A3)+Š.3/82 ‰BSR‡FORMREGA‰MOVE.B„#')',(A3)+¨3/82 ‰BTST†#4,D7 ‰BNE‡EA011RTS%FE10…BRA‡FERRORŽTHISMODENOTALLOWED PAGE"*‚ENTERA4=POINTERTOFIRSTWORD*ˆD3=OFFSETTOEXTENSION*ˆD4=VALUETOPROCESS*ˆD7=MODESALLOWEDMASK'*‹=...............1ƒD@ŒDATAREGDIRECT**‹=..............1.ƒA@ŒADDRESSREGDIRECT.*‹=.............1..ƒ(A@)ŠADDRESSREGINDIRECT9*‹=............1...ƒ(A@)+‰ADDRESSREGINDIRECTW/POSTINC9*‹=...........1....ƒ-(A@)‰ADDRESSREGINDIRECTW/POSTDEC6*‹=..........1.....ƒd(A@)‰ADDRESSREGINDIRECTW/DISP:*‹=.........1......ƒd(A@,R@)†ADDRESSREGINDIRECTW/INDEX)*‹=........1.......ƒXXXXX‰ABSOLUTESHORT**‹=.......1........ƒXXXXXXX‡ABSOLUTELONG**‹=......1.........ƒd(PC)‰PROGCTRW/DISP.*‹=.....1..........ƒd(PC,R@)†PROGCTRW/INDEX!*‹=....1...........ƒ#XŒIMMEDIATE*EA‡DSˆ0 ‰MOVE.L„D4,D0 ‰LSR.W…#3,D0 ‰AND.W…#$7,D0 ‰BEQ‡EA000 SPC 1 ‰CMP.B…#1,D0 ‰BEQ‡EA001 SPC 1 ‰CMP.B…#2,D0 ‰BEQ‡EA010 SPC 1 ‰CMP.B…#3,D0 ‰BEQ‡EA011 SPC 1 ‰CMP.B…#4,D0 ‰BEQ‡EA100 SPC 1 ‰CMP.B…#5,D0 ‰BEQ.S…EA101 SPC 1 ‰CMP.B…#7,D0 ‰BEQ.S…EA111 PAGE*„EXTENSIONWORD*ƒBIT‚5432109876543210 *ˆ0...............„DATAREGISTER#*ˆ1...............„ADDRESSREGISTER*ˆ.RRR............„REGISTER@*ˆ....0...........„SIGNEXTENDED,LOWORDERINTEGERININDEXREG/*ˆ....1...........„LONGVALUEININDEXREGISTER*ˆ.....000........'*ˆ........DDDDDDDD„DISPLACEMENTINTEGER*,*EA110ŒADDRESSREGISTERINDIRECTWITHINDEX SPC 1 ‰BTST†#6,D7&‰BEQ‡FE10ŽFERROR…THISMODENOTALLOWED ‰MOVE.W„(A4,D3),D1‰AND.W…#$0700,D1'‰BNE‡FE10FERROR„BITS10-8MUSTBEZERO $‰MOVE.W„(A4,D3),D0ŠD0=DISPLACEMENT ‰EXT.W…D0 ‰EXT.L…D0‰BSR‡SYMORDECŒDECIMAL—3/82‰MOVE.B„#'(',(A3)+Š(3/82 SPC 1‰BSR‡FORMREGAŒXX(A@ SPC 1‰MOVE.B„#',',(A3)+ŠXX(A@,˜3/82 SPC 1‰MOVE.B„(A4,D3),D4 ‰ASR.B…#4,D4 ‰BPL.S…EA1105 ‰BSR‡FORMREGA ‰BRA.S…EA1107 SPC 1EA1105ƒBSR‡FORMREGD'EA1107ƒMOVE.B„#'.',(A3)+ŠXX(A@,X@.•3/82 SPC 1‰MOVE.W„(A4,D3),D4ŠD4=R@‰MOVE.B„#'W',D0..........W ‰BTST†#11,D4 ‰BEQ.S…EA1109‰MOVE.B„#'L',D0..........LEA1109ƒMOVE.B„D0,(A3)+Œ.3/82$‰MOVE.B„#')',(A3)+Š...........)’3/82 ‰ADD.L…#2,D3‰RTS PAGE-* ADDRESS REGISTER INDIRECT WITH DISPLACEMENT* EA101„BTST†#5,D7101000;ƒDIS(A@))‰BEQ.S…FE11FERROR;THISMODENOTALLOWED ‰MOVE.W„(A4,D3),D0 ‰EXT.L…D0‰BSR‡SYMORDECŒDECIMAL—3/82‰ADD.L…#2,D3SIZE ‰BRA‡EA010 PAGE*‚111000ŠABSOLUTESHORT*‚111001ŠABSOLUTELONG**‚111010ŠPROGRAMCOUNTERWITHDISPLACEMENT#*‚111011ŠPROGRAMCOUNTERWITHINDEX *‚111100ŠIMMEDIATEORSTATUSREG*EA111 ‰AND.W…#7,D4 ‰BNE.S…EA1112 SPC 1 ‰BTST†#7,D7)‰BEQ.S…FE11FERROR;‚THISMODENOTALLOWED )‰MOVE.W„(A4,D3),D0Š111000;ƒABSOLUTESHORT ‰EXT.L…D0‰BSR‡BESTFIT.3/82‰ADD.L…#2,D3SIZE+2‰RTS SPC 1EA1112ƒCMP.B…#1,D4 ‰BNE.S…EA1113 SPC 1 ‰BTST†#8,D7)‰BEQ.S…FE11FERROR;‚THISMODENOTALLOWED (‰MOVE.L„(A4,D3),D0Š111001;…ABSOLUTELONG‰BSR‡BESTFIT.3/82 ‰ADD.L…#4,D3‰RTS SPC 1EA1113ƒCMP.B…#2,D41  ‰BNE.S…EA1114 SPC 1 ‰BTST†#9,D7‰BNE.S…EA1113A%FE11…BRA‡FERRORŽTHISMODENOTALLOWEDEA1113A 4‰MOVE.W„(A4,D3),D0Š111010;ƒPC+DISPLACEMENT‚DIS(PC) ‰EXT.L…D0‰ADD.L…HISPC(A1),D0 ‰ADD.L…#2,D0‰BSR‡SYMORDECŒDISPLACEMENT’3/82‰MOVE.L„#')CP(',D0Š(PC)‰BSR‡SCHRSTOREWORD‰ADD.L…#2,D3SIZE‰RTS SPC 1EA1114ƒCMP.B…#3,D4 ‰BNE.S…EA1115 PAGE)*PROGRAMCOUNTERWITHINDEX„DIS(PC,R@.X)**‚5432109876543210…SECONDWORD *‚0...............ŠDATAREGISTER#*‚1...............ŠADDRESSREGISTER*‚.XXX............ŠREGISTER8*‚....0...........ŠSIGN-EXTENDED,LOWORDERWORDINTEGER*œ..ININDEXREGISTER/*‚....1...........ŠLONGVALUEININDEXREGISTER*‚.....000........'*‚........XXXXXXXXŠDISPLACEMENTINTEGER* ‰BTST†#10,D7'‰BEQ‡FE11‹FERROR„THISMODENOTASLLOWED ‰MOVE.W„(A4,D3),D1‰AND.W…#$0700,D1(‰BNE‡FE11FERROR;ƒBITS10-8MUSTBEZERO (‰MOVE.B„1(A4,D3),D0‰111100;ƒDIS(PC,R@.X) ‰EXT.W…D0 ‰EXT.L…D0‰ADD.L…HISPC(A1),D0 ‰ADD.L…#2,D0‰BSR‡SYMORDECŒDISPLACEMENT’3/82 SPC 1‰MOVE.L„#',CP(',D0‰BSR‡SCHRDIS(PC, SPC 1‰MOVE.W„(A4,D3),D4 ‰ROL.W…#4,D4 ‰BTST†#3,D4 ‰BEQ.S…EAF25 ‰BSR‡FORMREGA ‰BRA.S…EAF27EAF25„BSR‡FORMREGDŒDIS(PC,R@EAF27 SPC 1"‰MOVE.B„#'.',(A3)+ŠDIS(PC,R@.”3/82 SPC 1‰MOVE.W„(A4,D3),D4‰MOVE.W„#'LW',D0 ‰BTST†#11,D4 ‰BEQ.S…EAF35 ‰LSR.W…#8,D0&EAF35„MOVE.B„D0,(A3)+ŒDIS(PC,R@.X“3/82 SPC 1$‰MOVE.B„#')',(A3)+ŠDIS(PC,R@.X)’3/82 ‰ADD.L…#2,D3‰RTS PAGE*ƒBIT‚5432109876543210+*ˆ..........111100„FIRSTWORD;‚#*EA1115ƒCMP.B…#4,D4 ‰BNE‡FERROR SPC 1 ‰BTST†#11,D7!‰BEQ‡FERRORŽTHISMODENOTALLOWED !‰MOVE.B„#'#',(A3)+ŠIMMEDIATE•3/82 SPC 1‰MOVE.B„-1(A5),D1‰CMP.B…#'L',D1‰BEQ.S…EA11155LONG SPC 1‰MOVE.W„(A4,D3),D0 ‰CMP.B…#'B',D1‰BNE.S…EA11153Ž.WORD * BYTE SIZE; DATA ALLOWED*‚00000000XXXXXXXX*‚111111111XXXXXXX ‰MOVE.L„D0,D1 ‰LSR.W…#8,D1‰BEQ.S…EA11153 ‰MOVE.L„D0,D1 ‰ASR.W…#7,D1 ‰ADD.W…#1,D1 ‰BNE‡FERROR EA11153‚EXT.L…D0‰BSR‡BESTFIT.3/82 ‰ADD.L…#2,D3‰RTS SPC 1EA11155‚MOVE.L„(A4,D3),D0Š.‰BSR‡BESTFIT.3/82‰ADD.L…#4,D3SIZE‰RTS PAGEMOVEMSƒMOVE.B„#'.',(A5)+ŠPERIOD‰MOVE.W„#'LW',D0 ‰BTST†#6,D4‰BEQ.S…MOVEMS2 ‰LSR.W…#8,D0MOVEMS2‚MOVE.B„D0,(A5)+ŒSIZE‰RTS SPC 1* MOVEM - REGISTER EXPANSION* MOVEMRƒDSˆ0!‰MOVE.W„2(A4),D2ŒD2=SECONDWORD‰MOVE.L„#''>>8,D0D0=SPACE‰MOVE.L„#'/'>>8,D7D7=/&‰SUB.L…#1,A3ADJUSTSTOREPOINTERŠ3/82"‰MOVE.L„#'0'>>8,D5ŠD5=REGISTER#‰MOVE.W„#'AD',D4ŒD4=REGCLASS SPC 1MOVEMR11BTST†D1,D2‰BEQ.S…MOVEMR77ŒBITRESET SPC 1‰CMP.B…(A3),D0‹BITSET™3/82‰BNE.S…MOVEMR44ŒNOTSPACE SPC 1&MOVEMR33MOVE.B„D4,1(A3)ŒREGTYPE–3/82‰MOVE.B„D5,2(A3)ŒREG#™3/82‰MOVE.B„#'-',3(A3)Š-3/82‰ADD.L…#3,A3­3/82‰BRA.S…MOVEMR88 SPC 1MOVEMR44CMP.B…#',',(A3)‹.3/82‰BEQ‡MOVEMR33ŒCOMMASEPARATOR SPC 1‰CMP.B…(A3),D7‹/SEPARATOR•3/82 ‰BEQ‡MOVEMR33 SPC 1‰MOVE.B„D4,1(A3)ŒREGTYPE–3/82‰MOVE.B„D5,2(A3)ŒREG#™3/82#‰MOVE.B„#'-',3(A3)‰-SEPARATOR”3/82‰BRA.S…MOVEMR88 SPC 1MOVEMR77CMP.B…#',',(A3)‹.3/82‰BEQ.S…MOVEMR88ŒCOMMA SPC 1‰CMP.B…(A3),D0.3/82‰BEQ.S…MOVEMR88ŒSPACE‰CMP.B…1(A3),D0ª3/82‰BEQ.S…MOVEMR79ŒSPACE‰ADD.L…#3,A3.3/82(MOVEMR79MOVE.B„D7,(A3)Œ/SEPARATOR”3/82 SPC 1MOVEMR88ADD.L…#1,D5‰ADD.L…D6,D1D1=BITPOSITION‰CMP.B…#'8',D5 ‰BNE‡MOVEMR11 SPC 1‰CMP.B…(A3),D0SPACE™3/82‰BEQ.S…MOVEMR94 SPC 1‰CMP.B…1(A3),D0ŒSPACE™3/82‰BEQ.S…MOVEMR94‰ADD.L…#3,A3.3/82 ‰MOVE.B„D7,(A3)/ƒSEPARATOR‘3/82 SPC 1)MOVEMR94MOVE.B„#'0',D5RESETREGTOZERO‰LSR.W…#8,D4CHANGEREGTYPE‰BNE‡MOVEMR11ŒMORE SPC 1‰MOVE.B„D0,(A3)SPACE™3/82‰RTS PAGEIMOVES11DSˆ0“.3,0'‰ADD.L…#2,D3ADJUSTNUMBEROFBYTESˆ3,0 ‰BSR‡FORMSIZEŒ.3,0 %‰BTST†#3,DATA+2(A1)‡DIRECTIONBIT‘3,0‰BEQ.S…IMOVES44Œ0=,R@“3,0 !‰MOVE.W„DATA+2(A1),D4‡R@,—3,0‰ROL.W…#4,D4.3,0‰MOVE.W„#EAM003,D7ŠA@‚D@˜3,0 ‰BSR‡EA’.3,0 ‰MOVE.B„D5,(A3)+ŒCOMMA™3,0 ‰MOVE.W„DATA(A1),D4‰.3,01 2‰MOVE.W„#EAM1FC,D7ŠMEMORYALTERABLEADDRESSINGƒ3,0 ‰BSR‡EA’.3,0‰BRA.S…COMMON1.3,0 :IMOVES44MOVE.W„#EAM1FC,D7ŠMEMORYALTERABLEADDRESSINGƒ3,0 ‰BSR‡EA’.3,0 ‰MOVE.B„D5,(A3)+ŒCOMMA™3,0 ‰MOVE.W„DATA+2(A1),D4‡.3,0‰ROL.W…#4,D4.3,0‰MOVE.W„#EAM003,D7ŠA@‚D@˜3,0 ‰BSR‡EA’.3,0COMMON1‚BRA‡COMMONŽ.3,0 PAGEIMOVEC11DSˆ0“.3,0!‰MOVE.L„D4,D1D1=FIRSTWORD3,0 ‰BTST†#0,D1DIRECTIONBIT‘3,0‰BEQ.S…IMOVEC44Œ.3,0 ‰BSR.S…MCRDAFORMD@ORA@‘3,0 ‰MOVE.B„D5,(A3)+ŒCOMMA™3,0 ‰BSR.S…MC’3CHARSYMBOL‘3,0COMMON41BRA‡COMMON4.3,0 #IMOVEC44BSR.S…MC’3CHARSYMBOL‘3,0 ‰MOVE.B„D5,(A3)+ŒCOMMA™3,0 ‰BSR.S…MCRDAFORMD@ORA@‘3,0‰BRA‡COMMON41Œ.3,0 /MCRDA„MOVE.B„DATA+2(A1),D4‡D4=SECONDWORDŽ3,0‰LSR.B…#4,D4.3,0‰MOVE.W„#EAM003,D7ŠA@‚D@˜3,0 ‰BSR‡EA’.3,0 ‰RTS›.3,0 ,MC‡MOVE.W„DATA+2(A1),D4‡D4=SECONDWORDŽ3,0‰MOVE.L„#'CFS'>>8,D0ˆSFC›3,0‰AND.W…#$FFF,D4Œ.3,0‰BEQ.S…MC96MATCH™3,0 ‰MOVE.L„#'CFD'>>8,D0ˆDFC›3,0‰CMP.W…#$001,D4Œ.3,0‰BEQ.S…MC96MATCH™3,0 ‰MOVE.L„#'PSU'>>8,D0ˆUSP›3,0‰CMP.W…#$800,D4Œ.3,0‰BEQ.S…MC96MATCH™3,0 ‰MOVE.L„#'RBV'>>8,D0ˆVRB›3,0‰CMP.W…#$801,D4Œ.3,0‰BNE‡FE12MISS-MATCH”3,0 MC96…BSR‡SCHRSTORE3CHAR’3,0 ‰RTS›.3,0 PAGEIEOR11ƒDSˆ0“EOR‚D@,’3,0‰BSR‡FORMSIZEŒ.3,0 ‰ROL.W…#7,D4.3,0‰BSR‡FORMREGDŒ.3,0 ‰MOVE.B„D5,(A3)+ŒCOMMA™3,0 ‰MOVE.W„(A4),D4.3,0‰BSR‡EA’š3,0‰BRA‡COMMONŽ.3,0 PAGE DCODE68KCLR.L…D3’68000ONLY”3,0DCODE68MDSˆ0“.3,0*‰LINK†A1,#-LOCVARSZ‡CREATEAFRAMEFORTHE,‰MOVE.L„A5,A3STARTBUFFER=ENDBUFFER…3/821‰MOVEM.LƒD0-D2/A3-A5,DATA(A1)ƒCODEANDITSPC.‚A4-‰MOVE.W„D3,PRTYPE(A1)‡SAVEPROCESSORTYPE‹3,0‰CMP.W…#TBLAE-TBLA,D3†.3,0‰BGE.S…FE12BADTYPE–3,0 ‰MOVE.L„#BUFSIZE,D0/DEC311ƒMOVE.B„#'',(A5)+ŠSPACEFILLBUFFER3/82 ‰SUB.L…#1,D0 ‰BNE‡DEC311 SPC 1‰MOVE.L„HISPC(A1),D0'‰BSR‡FORMADDRŒPUTSADDRINBUFFERATA3,‰LEA‡DATA(A1),A4‰A4POINTSTOTHECODE.ˆ3/82 SPC 1* CHECK FOR KNOWN ILLEGAL CODES‰MOVE.W„(A4),D0 ‰LEA‡KI(PC),A5‰MOVE.L„A5,A3.3/82‰ADD.L…#KIEND-KI,A3ˆ.3/82DEC404ƒCMP.W…(A5)+,D0 ‰BEQ.S…FE12FERROR;ILLEGALCODE‰CMP.L…A3,A5.3/82 ‰BNE‡DEC404 SPC 1* LOOK FOR MATCH OF OP-CODE*‰LEA.L…TBLA(PC),A3‰.3,9‰MOVE.W„PRTYPE(A1),D0‡.3,05‰MOVE.L„(A3,D0.W),A5ˆA5=POINTERTODECODETABLE‚3,9‰ADD.L…A3,A5.3,9 2‰LEA‡TBLE(PC),A3‰A3=POINTERTOENDOFTABLE‚3/82 DEC411ƒMOVE.W„(A4),D0FIRSTWORD‰AND.W…(A5)+,D0ŒMASK‰CMP.W…(A5)+,D0‰BEQ.S…DEC425ŽFOUNDMATCH‰ADD.L…#2,A5UPDATEPOINTER‰CMP.L…A3,A5.3/82‰BNE‡DEC411ŽMORETABLE%FE12…BRA.S…FERRORŽILLEGALINSTRUCTION SPC 1DEC425ƒCLR.L…D6%‰MOVE.B„(A5)+,D6ŒD6=(GOTOOFFSET)/4 ‰LSL.L…#2,D6 SPC 1 ‰CLR.L…D7&‰MOVE.B„(A5)+,D7ŒD7=INDEXTOOP-CODE SPC 1* MOVE OP-CODE TO BUFFER*‰LEA‡OPCTBL(PC),A0 DEC510ƒTST‡D7‰BEQ.S…DEC530ŽATINDEXDEC515ƒTST.B…(A0)+‰BPL‡DEC515ŽMOVETHROUGHFIELD ‰SUB.L…#1,D7 ‰BRA‡DEC510 SPC 15DEC530ƒMOVE.L„BEGBUF(A1),A5‡STARTOFTEXTBUFFERŠ3/82)‰ADD.L…#FOC,A5ŽA5=STOREPOINTER‚OP-CODEDEC535ƒMOVE.B„(A0)+,D0 ‰BCLR†#7,D0‰BNE.S…DEC537ŽENDOFMOVE‰MOVE.B„D0,(A5)+ ‰BRA‡DEC535DEC537ƒMOVE.B„D0,(A5)+ SPC 1* CALCULATE GOTO AND GO*‰MOVE.L„#2,D3…D3=SIZE ‰LEA‡X(PC),A0 ‰ADD.L…D6,A0 SPC 16‰MOVE.L„BEGBUF(A1),A3„A3=STARTOFOUTPUTBUFFER†3/82,‰ADD.L…#FOP,A3ŠA3=POINTERFOROPERAND‰3/82 SPC 1‰MOVE.W„(A4),D4ƒD4=FIRSTWORD )‰MOVE.B„#',',D5ƒD5=CONTAINSASCIICOMMA SPC 14‰MOVE.W„#EAM1FD,D7ŠD7=DATAALTERABLEMODESALLOWED ‰JMP‡(A0)*8*‚A4=POINTERTODATAINFRAMECREATEDBY'LINKA1,...'*‚A5=POINTERSTOREOP-CODE!*‚A3=POINTERSTOREOPERAND¨3/82*‚D3=SIZE=2BYTES*‚D4=FIRSTWORD2*‚D7=ADDRESSMODESALLOWED($1FD)DATAALTERABLE PAGECOMMON4‚ADD.L…#2,D3…SIZE=4 SPC 1COMMONƒMOVE.L„D3,D6D6=SIZE)‰MOVE.B„#'',(A3)‹SPACEASLASTCHARŒ3/82 SPC 15‰MOVE.L„A3,ENDBUF(A1)‡SAVEENDOFBUFFERPOINTER„3/820‰MOVE.L„BEGBUF(A1),A3‡FETCHSTARTOFBUFFER‰3/822 ‰ADD.L…#FDATA,A3‹.3/82 /COMMON35MOVE.W„(A4)+,D0ŒGETNEXTWORDOFDATA.(‰ADD.L…#2,HISPC(A1)‡ADJUSTPROGCOUNTER.#‰BSR‡PNT4HXŽFORMATDATA.(A3)+Œ3/82 ‰SUB.B…#2,D3 ‰BNE‡COMMON35 **ˆMOVE.L„(A7)+,A3ŒA3=RESTOREENDPOINTER**ˆMOVE.L„(A7)+,A5ŒA5=‚BEGINNINGOFBUFFER)*ˆMOVE.L„HISPC(A1),A4‡MOVETHEUPDATEDPC=‰MOVEM.LƒENDBUF(A1),A3-A5„RESTOREREGSA3,A4,A5ASABOVE3/82‰UNLK†A1’TOA4ANDUNDOFRAME. ‰RTS SPC 3FERRORƒDSˆ0“ILLEGALINSTRUCTION*2‰MOVE.L„BEGBUF(A1),A3‡STARTOFBUFFERPOINTER‡3/82‰ADD.L…#FOC,A3.3/82 ‰MOVE.L„A3,A5.3,0‰MOVE.W„#BUFSIZE-FOC-1,D0ƒ.3,00FERROR33MOVE.B„#'',(A5)+ŠSPACEFILLBUFFER3,0‰DBRA†D0,FERROR33‰.3,0 ‰LEA‡MSG111(PC),A5FERROR35MOVE.B„(A5)+,D0‰CMP.B…#EOT,D0‰BEQ.S…FERROR39‰MOVE.B„D0,(A3)+Œ.3/82 ‰BRA‡FERROR35 FERROR39DSˆ0 SPC 1‰MOVE.W„(A4),D0 ‰BSR‡PNT4HX SPC 1‰MOVE.L„#2,D3…SIZE SPC 1 ‰BRACOMMON SPC 1MSG111ƒDC.B†'DC.W„$',EOT SPC 2!KI‡DC.W†$4AFBKNOWNILLEGALCODES KIEND„DSˆ0 PAGE *‚\1ƒMASK*‚\2ƒOP-CODEPATTERN*‚\3ƒGOTOOFFSET*‚\4ƒINDEXTOOP-CODE C68†MACRO ‰DC.W†$\1 ‰DC.W†$\2‰DC.B†(\3-X)>>2‰DC.B†\4‰ENDM SPC 1TBLA…DC.L†TBL00-TBLAŠ68000™3,9‰DC.L†TBL08-TBLAŠ68008™3,9‰DC.L†TBL10-TBLAŠ68010™3,9‰DC.L†TBL20-TBLAŠ68010™3,9 TBLAE„DSˆ0 SPC 2TBL20„DS.B†0“68020™3,0TBL10„DS.B†0“68010™3,0‰C68‡FFFF,4E74,IRTD,66RTD‘3,0"‰C68‡FFFE,4E7A,IMOVEC,67‹MOVEC3,0-‰C68‡FFC0,42C0,IMVTFCR,59ŠMOVE.W‚FROMCCR„3,0"‰C68‡FF00,0E00,IMOVES,68‹MOVES3,0TBL08„DS.B†0“68008™3,0TBL00„DS.B†0“68000™3,0‰C68‡FEC0,E6C0,ISHIFT,56‹RO‰C68‡FEC0,E4C0,ISHIFT,57‹ROX‰C68‡FEC0,E2C0,ISHIFT,55‹LS‰C68‡FEC0,E0C0,ISHIFT,54‹AS‰C68‡F018,E018,ISHIFT,56‹RO‰C68‡F018,E010,ISHIFT,57‹ROX‰C68‡F018,E008,ISHIFT,55‹LS‰C68‡F018,E000,ISHIFT,54‹AS%‰C68‡F0C0,D0C0,FORM10EX,4ŠADD‡,A@‰C68‡F130,D100,FORM12,53‹ADDX‰C68‡F000,D000,FORM10EX,4ŒADD‰C68‡F1F8,C188,FORM9,50ŒEXG‰C68‡F1F8,C148,FORM8,50ŒEXG‰C68‡F1F8,C140,FORM7,50ŒEXG‰C68‡F1F0,C100,FORM12,49‹ABCD‰C68‡F1C0,C1C0,FORM6D,48‹MULS‰C68‡F1C0,C0C0,FORM6D,47‹MULU‰C68‡F000,C000,FORM10,2ŒAND%‰C68‡F0C0,B0C0,FORM10EX,6ŠCMP…,A@‰C68‡F138,B108,FORM12A,46‹CMPM‰C68‡F100,B100,IEOR,5ŽEOR‘3,0‰C68‡F000,B000,FORM10EX,6ŒCMP&‰C68‡F0C0,90C0,FORM10EX,44‰SUB…,A@‰C68‡F130,9100,FORM12,45‹SUBX‰C68‡F000,9000,FORM10EX,44‹SUB‰C68‡F1F0,8100,FORM12,43‹SBCD‰C68‡F1C0,81C0,FORM6D,42‹DIVS‰C68‡F1C0,80C0,FORM6D,41‹DIVU‰C68‡F000,8000,FORM10,40‹OR‰C68‡F100,7000,IMOVEQ,39‹MOVEQ‰C68‡FF00,6100,IBSR,51BSR‰C68‡FF00,6000,IBSR,65BRA‘1,4‰C68‡F000,6000,ICC,38ŽB‰C68‡F0F8,50C8,IDBCC,37ŽDB‰C68‡F0C0,50C0,SCC,36ŽS‰C68‡F100,5100,IQUICK,35‹SUBQ‰C68‡F100,5000,IQUICK,34‹ADDQ‰C68‡F1C0,41C0,FORM6A,33‹LEA‰C68‡F1C0,4180,FORM6D,32‹CHK"‰C68‡FFC0,4EC0,FORM11SL,31‹JMP‘1,4"‰C68‡FFC0,4E80,FORM11SL,30‹JSR‘1,4‰C68‡FFFF,4E77,SCOMMON,29‹RTR‰C68‡FFFF,4E76,SCOMMON,28‹TRAPV‰C68‡FFFF,4E75,SCOMMON,27‹RTS‰C68‡FFFF,4E73,SCOMMON,26‹RTE‰C68‡FFFF,4E72,ISTOP,25STOP‰C68‡FFFF,4E71,SCOMMON,24‹NOP‰C68‡FFFF,4E70,SCOMMON,23‹RESET'‰C68‡FFF8,4E68,IMVFUSP,60ŠMOVEFROMUSP%‰C68‡FFF8,4E60,IMVTUSP,60ŠMOVETOUSP‰C68‡FFF8,4E58,FORM5,22ŒUNLINK‰C68‡FFF8,4E50,ILINK,21ŒLINK‰C68‡FFF0,4E40,FORM4,20ŒTRAP/‰C68‡FF80,4C80,IMOVEMTR,15‰MOVEMFROMREGISTERS‰C68‡FFC0,4AC0,FORM1A,19‹TAS‰C68‡FF00,4A00,FORM1,18ŒTST‰C68‡FFF8,48C0,FORM3,17ŒEXT.L‰C68‡FFF8,4880,FORM3,16ŒEXT.W-‰C68‡FF80,4880,IMOVEMFR,15‰MOVEATOREGISTERS‰C68‡FFF8,4840,FORM3,14ŒSWAP‰C68‡FFC0,4840,FORM11,13‹PEA‰C68‡FFC0,4800,FORM1A,12‹NBCD#‰C68‡FFC0,46C0,IMVTSR,59‹MOVETOSR‰C68‡FF00,4600,FORM1,11ŒNOT%‰C68‡FFC0,44C0,IMVTCCR,59ŠMOVETOCCR‰C68‡FF00,4400,FORM1,10ŒNEG‰C68‡FF00,4200,FORM1,9CLR'‰C68‡FFC0,40C0,IMVFSR,59‹MOVE.W‚FROM‚SR‰C68‡FF00,4000,FORM1,8NEGX‰C68‡F000,3000,IMOVE,59ŒMOVE.W‰C68‡F000,2000,IMOVE,60ŒMOVE.L‰C68‡F000,1000,IMOVE,58ŒMOVE.B‰C68‡FF00,0C00,IMMED,6CMP‡#‰C68‡FF00,0A00,IMMED,5EOR‡#‰C68‡FF00,0600,IMMED,4ADD‡#‰C68‡FF00,0400,IMMED,3SUB‡#‰C68‡FF00,0200,IMMED,2AND‡#2 ‰C68‡FF00,0000,IMMED,1ORˆ#‰C68‡F138,0108,IMOVEP,0ŒMOVEP‰C68‡FFC0,08C0,ISETS,64ŒBSET‰C68‡FFC0,0880,ISETS,63ŒBCLR‰C68‡FFC0,0840,ISETS,62ŒBCHG‰C68‡FFC0,0800,ISETS,61ŒBTST‰C68‡F1C0,01C0,ISETD,64ŒBSET‰C68‡F1C0,0180,ISETD,63ŒBCLR‰C68‡F1C0,0140,ISETD,62ŒBCHG‰C68‡F1C0,0100,ISETD,61ŒBTST TBLE…DS.B†0 PAGE N68†MACRO‰DC.B†'\1',128+'\2'ˆ\1\2‰ENDM OPCTBLƒDSˆ0 ‰N68‡MOVE,P„0 ‰N68‡O,R‡1 ‰N68‡AN,D†2 ‰N68‡SU,B†3 ‰N68‡AD,D†4 ‰N68‡EO,R†5 ‰N68‡CM,P†6 ‰N68‡MOV,E…7 ‰N68‡NEG,X…8 ‰N68‡CL,R†9 ‰N68‡NE,G†10 ‰N68‡NO,T†11 ‰N68‡NBC,Dƒ12‰N68‡PEA.,L„13‰N68‡SWAP.,Wƒ14‰N68‡MOVE,M„15‰N68‡EXT.,W„16‰N68‡EXT.,L„17 ‰N68‡TS,T†18‰N68‡TAS.,B„19 ‰N68‡TRA,P…20 ‰N68‡LIN,K…21 ‰N68‡UNL,K…22‰N68‡RESE,T„23 ‰N68‡NO,P†24 ‰N68‡STO,P…25 ‰N68‡RT,E†26 ‰N68‡RT,S†27‰N68‡TRAP,V„28 ‰N68‡RT,R†29 ‰N68‡JS,R†30 ‰N68‡JM,P†31‰N68‡CHK.,W„32‰N68‡LEA.,L„33 ‰N68‡ADD,Q…34 ‰N68‡SUB,Q…35‰DC.B†128+'S'ƒ36 ‰N68‡D,B‡37‰DC.B†128+'B'ƒ38‰N68‡MOVEQ.,L‚.....39 ‰N68‡O,R‡40‰N68‡DIVU.,Wƒ41‰N68‡DIVS.,Wƒ42 ‰N68‡SBC,Dƒ43 ‰N68‡SU,B†44 ‰N68‡SUB,X…45 ‰N68‡CMP,M…46‰N68‡MULU.,Wƒ47‰N68‡MULS.,Wƒ48 ‰N68‡ABC,Dƒ49 ‰N68‡EX,G†50‰N68‡BS,R†.....51‰N68‡NUL,L….....52 ‰N68‡ADD,X…53 ‰N68‡A,S‡54 ‰N68‡L,S‡55 ‰N68‡R,O‡56 ‰N68‡RO,X†57‰N68‡MOVE.,Bƒ58‰N68‡MOVE.,Wƒ59‰N68‡MOVE.,Lƒ60 ‰N68‡BTS,T…61 ‰N68‡BCH,G…62 ‰N68‡BCL,R…63 ‰N68‡BSE,T…64 ‰N68‡BR,A†65‰N68‡RT,D†66œ3,0‰N68‡MOVEC.,L‚67œ3,0‰N68‡MOVE,S„68œ3,0‰ENDéé;PARSMSGSIDNT†1,0„Convertnumberedmessagetotext‚12/02/82 I* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **Ç*A*„ThissubroutineiscalledbytheSYMbug"A"Commandprocessor†*D*„afterjustpreviouslycallingthecommandlineparser.Amessageƒ*@*„number,(Hex),containedinD0whichindicatesthestatusof‡*A*„thecurrentcommand.Thissubroutineconvertsthenumberinto†*>*„anEnglishlanguagestatementexplainingwhatexception(s)‰**„mayhavebeendetected.¬**Ç*F*„IftheNUMBERisZERO....controlissimplyreturnedtoSYMbug"B"*;*„IftheNUMBERisNEGATIVE‚asyntaxmessageisreturned.‹*C*„IftheNUMBERisPOSITIVE‚(Notexceeding"MAX")itislookedupƒ*;*„andthecorrectmessageisplacedwhereA3ispointing.Œ**Ç***„UponreturnA3ispointingjustbeyond**„theendofthemessage.¬**Ç**„EXTERNALSYMBOLS:²**Ç*0*„CONVŠNeededtoconvertHexNumberintoASCIIŽ*3*’forprintingincasethemessageisunsupported.†**Ç**Ç* *…REGISTERS¹**…UPONENTRY¸*-*„_________________________________________š**„A0=“D0=HexMsg#Ÿ* *„A1=“D1=¨* *„A2=“D2=¨**„A3=A(Buffer)‰D3=¨* *„A4=“D4=¨* *„A5=“D5=¨* *„A6=“D6=¨**„A7=StackD7=¨**Ç**Ç* *…REGISTERS¹* *…UPONEXIT¹*-*„_________________________________________š*#*„A0=A(Message)ˆD0=MsgNumber**„A1=A(MSGEND+1)‡D1=¨**„A2=“D2=-1DBRAleftover–**„A3=A(BUFFER)‰D3=¨* *„A4=“D4=¨* *„A5=“D5=¨* *„A6=“D6=¨**„A7=StackD7=¨*I* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * PAGE‰XDEF†PARSMSGS ‰XREF†CONV ‰SECTIONƒ9 !MAX†EQU‡48‘Maximummessagenumber TˆEQU‡*“BASEADDRESS"TABLE„DC.L†M00-TŽTableofmessages7‰DC.L†M01-T,M02-T,M03-T,M04-T,M05-T,M06-T,M07-T,M08-T„88‰DC.L†M09-T,M10-T,M11-T,M12-T,M13-T,M14-T,M15-T,M16-Tƒ168‰DC.L†M17-T,M04-T,M19-T,M20-T,M21-T,M22-T,M23-T,M00-Tƒ248‰DC.L†M00-T,M00-T,M00-T,M00-T,M00-T,M00-T,M00-T,M00-Tƒ323 P?Y0a8‰DC.L†M00-T,M00-T,M00-T,M00-T,M00-T,M38-T,M39-T,M40-Tƒ408‰DC.L†M41-T,M42-T,M43-T,M44-T,M45-T,M46-T,M47-T,M48-Tƒ48 (M00†DC.B†26,'PARSERerrornumber......ƒ'#M01†DC.B†21,'COMMANDnotvalidyet'"M02†DC.B†20,'ADDRESSmustbeeven'+M03†DC.B†29,'SYNTAXenteredisnotcorrect'.M04†DC.B†32,'COMMANDenteredisnotsupported'+M05†DC.B†29,'EXPRESSIONenteredisinvalid'(M06†DC.B†26,'ADDRESSenteredisinvalid'-M07†DC.B†31,'NUMBER/VALUEenteredisinvalid')M08†DC.B†27,'REGISTERenteredisinvalid'#M09†DC.B†21,'MACROexpansionerror',M10†DC.B†30,'AdditionalPARAMETER(S)needed''M11†DC.B†25,'OPTIONenteredisinvalid',M12†DC.B†30,'NUMBERenteredisoutofrange'.M13†DC.B†32,'MACRO/SYMBOLNAMEisnotdefined'(M14†DC.B†26,'MACRO/SYMBOLtableisfull',M15†DC.B†30,'SYMBOLNAMEenteredisinvalid'.M16†DC.B†32,'ADDRESSRANGEenteredisinvalid'2M17†DC.B†36,'COMMANDenteredisNOTYETsupported'5M19†DC.B†39,'CHARACTERSenteredexceededbuffersize'#M20†DC.B†21,'MACROPARAMETERerror'%M21†DC.B†23,'InvalidMACROPARAMETER'(M22†DC.B†26,'MACROPARAMETERismissing'&M23†DC.B†24,'EVENADDRESSisrequired'=M38†DC.B†48,'TASKNAMEMUSTbefirst4charsof.LOfilename')M39†DC.B†27,'CannotAttachaSYSTEMTASK',M40†DC.B†30,'UnknownBREAKPOINT(todelete)'2M41†DC.B†36,'InvalidVersadosFILENAMEspecified'(M42†DC.B†26,'InvalidEMULATORIDNUMBER';M43†DC.B†45,'I/OERRORwhilesavingEmulatorconfiguration'5M44†DC.B†39,'I/OERRORwhileprocessingPROFILEfile'"M45†DC.B†20,'I/OERRORforSCREEN'2M46†DC.B†36,'I/OERRORwhileprocessingHELPfile'*M47†DC.B†28,'FailedtochangeTASKstatus'*M48†DC.B†28,'FailedtoASSIGNLUNtoTASK' PAGE1PARSMSGSMOVEM.LƒD0-D7/A0-A6,-(A7)‚Saveregisters ‰LEA‡M00(PC),A2ŠNULLMESSAGE‰TST.W…D0‘Negativenumber?2‰BGE.S…CHKMAXNo...Gocheckforvalidmessageno.*‰MOVE.B„#3,D0ŽYes..ForceM03SYNTAXerror/CHKMAXƒCMP.B…#MAX,D0ŒErrornumberwithinrange?+‰BGT.S…NOMSGŽNo...Justprinterrornumber.‰BEQ.S…EXITzero..EXIT "‰ASL.L…#2,D0ŽMultiplynumberby4.4‰LEA‡TABLE(PC),A0‡Startwiththebeginningoftable.6‰MOVE.L„0(A0,D0),A1ˆA1=OFFSETTO(SpecifiedMessage).'‰ADD.L…A0,A1ŽA1=A(SpecifiedMessage).‰CMP.L…A1,A2ŽIsitsupported?1‰BEQ.S…NOMSGŽNo...Usegeneral"PARSERerrormsg"*‰BSR.S…MOVEMSGŒYes..Movemsgintobuffer. 1EXIT…MOVEM.Lƒ(A7)+,D0-D7/A0-A6‚Restoreregisters. ‰RTSšReturn. 1NOMSG„BSR‡CONVConvertmessagenumberintoASCII..‰LEA‡M00(PC),A1‰M00..."PARSERerrornumber..."#‰BSR.S…MOVEMSGŒMoveTexttobuffer.-‰MOVE.L„A3,D1ŽPutA3intoD1forexamination.%‰BTST†#0,D1ŽAreweonawordboundry?*‰BEQ.S…MOVENUMŒYes..GomoveASCIInumber.1‰ADD.L…#1,A3ŽNo...Add1toforcewordalignment.>MOVENUM‚MOVE.L„D0,-4(A3)ŠMove4byteASCIInumberintobuffer.‰BRA‡EXITReturn. 0MOVEMSG‚DSˆ0‘*Movemessagefromtabletobuffer*#‰CLR.L…D2‘Assure000000xxforD2-‰MOVE.B„(A1)+,D2‹D2=Numberofbytestomove!‰SUB.L…#1,D2ŽAdjustforDBRAloop9MOVELOOPMOVE.B„(A1)+,(A3)+ˆMove1bytetomessagebuffer‰DBRA†D2,MOVELOOPˆDone?‰RTSšYes...Restoreandexit ‰ENDéé3 é*-*ŒIODBSYMBOLPROCESSORFORSIMBO--11/14/84*+IODB…IDNT†2,1‘SYMBDATAMANAGEMENTROUTINES ‰OPT‡FRS¯3/82 ‰XDEF†IODB *Â<<111484+‰XREF†SEGADDR,IOSDB,FORTASK,SYMNAME,FHSOPEN!‰XREF†GLOBAL,POOLPTR,POOL,POOLEND)*NBUFPOOLEQU‡(POOLEND-POOLPTR)/2604/82**ˆTASKDATAEQUATES*0OMNAMEƒEQU‡0“OFFSETOFNAMEINOBJMODNAMETABLE+OMNLROƒEQU‡8“OFFSETOFLRFOROBJMODRECORD+OMNLRIƒEQU‡10’OFFSETOFLRFORINDEXRECORD+OMNLRLƒEQU‡12’OFFSETOFLRFORLABELRECORD7OMNTBLTHEQU‡14’LENGTHOFANENTRYINOBJMODNAMETABLE)BUFHDRƒEQU‡4“BUFFERHEADERCONTROLLENGTH3BUFLTHƒEQU‡260‘TOTALBUFFERLENGTHINCLUDINGHEADERBUFMAPƒEQU‡$64‘TASKBUFMAPADDR.BUFMAPE‚EQU‡$68‘A(ENDOFMAPTABLE)INTASKBUFBUFFHSƒEQU‡$FC‘A(TASK'SFHSDB)"MAPLTHƒEQU‡8“LOADMAPENTRYLENGTH TVBUF„EQU‡8‰PAGE ‰SECTIONƒ9M******************************************************************************ˆENTRYCONDITIONS3*•SYMNAMECONTAINSLITERALNAMEOFREQUESTEDSYMBOL!*ˆREGS:D6=‚LROFORECORLINE#*A5=‚A(GLOBAL)(*A2=‚A(MODULENAMETABLE)BASEADDRESS)*D1=‚REQUESTCODE1=SREC,0=OREC,-1=LREC1*D2=‚OBJECTMODULECODETOWHICHSYMBOLBELONGS8*•THISISTHEOFFSETOFENTRIESINTHEMODULENAMETABLE9*D3=‚SECTIONNUMBEROFOFFSETTOBEMATCHEDWITHSYMBOL3*D5=‚DATABASEID(00ID=RIGHTMOSTBYTEOFWORD)9*D7=‚RELATIVEOFFSETCONSTANTTOBEMATCHEDWITHSYMBOL*5IODB…MOVEM.LƒD0-D7/A0-A6,-(A7)ƒSAVECALLERSREGS3/82/‰CLR.L…(A7)D0CONTAINSRETURNSTATUSCODEƒ1/82/‰TST.L…POOLPTR-GLOBAL(A5)ƒFIRSTTIMECHECK3/82)‰BNE.S…NOT1STŽPOOLPTRALREADYINITEDˆ1/82‰LEA‡POOL-GLOBAL(A5),A0 3/82/‰MOVE.L„A0,POOLPTR-GLOBAL(A5)ƒINITPOOLPTRŽ3/82'NOT1STƒTST.W…D1’CHECKREQUESTTYPEŒ1/82‰BMI.S…WANTLLABELREQUEST‰BGT.S…WANTSSYMBOLREQUEST,WANTO„EQU‡*“PASSALONGSPECIFIEDLRFORORECDOREADƒBSR‡GETRGETARECORD‰BNE‡IOSERRŽFAILEDONREAD‰BRA‡GOTRECŽCOMMONEXITPOINT-WANTL„CMP.W…#-2,D1ŽSYMBOLMATCHFEATURE?‰1/82‰BEQ‡HUNTSYMYES*'*‚RETURNVALUEOFREQUESTEDLINENUMBER*i:r5z,‚7Š+5‰TST.W…OMNLRL(A2,D2)‡LINE#'SEXISTFORTHISMODULE?‰BEQ‡IOSERRŽNO%‰SUB.L…#1,D6LINE#-1ISOFFSET‹3/82‰MOVE.L„D6,D7SAVELINE#-1$‰ASR.L…#6,D6LROFFSETISLINE#/640‰ADD.W…OMNLRL(A2,D2),D6„PLUSBASELRTHISOBJMOD‰BSR‡GETRREADLINE#RECORD‰BNE‡IOSERRŽFAILEDONREAD‰MOVE.L„D7,D0LINE#-1•3/82‰AND.W…#$003F,D0‹LINE#MOD64#‰ASL.W…#2,D0OFFSETOFLINE#VALUE)‰ADD.W…D0,A4RETURNA(LINE#VALUE)INA4‰BRA‡GOTRECŽCOMMONENTRYPOINT PAGE*L*‚RETURNVALUEOFREQUESTEDSYMBOLFROMCURRENTOBJECTMODULE(IFITEXISTS)*SYMBOLRECORDREQUIRED ‰BNE‡IOSERR‰CLR.L…D4’SEQUENTIALSEARCH7‰LEA‡SYMNAME-GLOBAL(A5),A1†A(LITERALSYMBOLNAME)11/835‰MOVEM.Lƒ(A1),D0-D1ŠLITERALSYMBOLNAMETOREGSD0&D19CHKSYMƒCMP.L…0(A4,D4),D0‰FIRST44 CHARMATCHSYMBOLENTRY?‰BNE.S…FORWARD¡7/83!*7/83ƒBLO‡NOSYMSYMBOLNOTFOUND2‰CMP.L…4(A4,D4),D1‰LAST4CHARMATCHSYMBOLENTRY?‰BEQ‡GOTSYMŽFINALLY3FORWARD‚ADD.B…#$10,D4STEPTONEXTSYMBOLINRECORD0‰BCC‡CHKSYMŽYES-CONTINUEOFFSET$100OVERFLOWS-CHKSTOP‚ADD.L…#1,D6NO-SYMBOLNOTINRECORD‰LEA‡STOPSECT(PC),A17‰CMP.W…(A1),D6COMEFULLCIRCLEINSYMBOLRECORDS?7/83&‰BEQ‡NOSYMYES-SYMBOLNOTFOUNDˆ7/83-‰CMP.W…OMNLRI(A2,D2),D6„ATINDEXSECTOR?Ž7/83+‰BLT‡RETRYNO-TRYNEXTSYMBOLRECORDƒ7/83@ALLSYMƒMOVE.W„OMNLRO(A2,D2),D6„CONTINUEWITH1STSYMBOLREC‚7/83)‰BRA‡CHKSTOPUNLESSWESTARTEDTHERE‡7/83 IDXSCAN‚LEA‡STOPSECT(PC),A1#‰CLR.W…(A1)INDEXRECORDCOUNTŒ7/835NXTIDXƒBSR‡GETRRETURNSA4->INDEXRECORDTHISOBJMOD,‰BNE.S…IDXERRŽMUSTPOPSUBROUTINEADDR†11/830‰MOVE.L„#63,D0ŽCOUNT-1OFMAXIMUMINDEXENTRIES8ISCAN„MOVE.L„(A4)+,D4ŒINDEXENTRY=LASTVALUEOFSECTOR,‰CMP.L…D7,D4THISSECTORCONTAINSADDR?„7/83‰BHS.S…GOTSECTYES.‰DBF‡D0,ISCANŒNO-KEEPLOOKING2‰ADD.L…#1,D6BIGOBJMODHASMULTIPLEINDEXRECORDS*‰ADD.W…#64,(A1)ŒINDEXRECORDCOUNTUPDATED.‰BRA‡NXTIDXŽRETRYINDEXSCANNEXTINDEXRECORD6GOTSECT‚SUB.W…#64,D0ŽNEGATIVEOFFSETINTOINDEXRECORD‰NEG.W…D0’CONVERTTOPOSITIVE7‰ADD.W…(A1),D0INCASEWE'VEPROCESSEDMULTIPLERECORDS5‰ADD.W…OMNLRO(A2,D2),D0„PLUSBASELROFOBJMODRECORDNOSYM„ADD.L…#1,(A7)‚CODE=1MEANSSYMBOLNOTFOUNDIND0„3/82 ‰BRA.S…EXIT.GOTSYMƒADD.L…D4,A4CODE=0MEANSSYMBOLFOUND9GOTRECƒMOVE.L„A4,32(A7)‰A0=A(SYMBOLENTRYREQUIRED)„3/820‰MOVE.W„#4,CCRŽSETZEROCONDITIONCODE(SUCCESS);EXIT…MOVEM.Lƒ(A7)+,D0-D7/A0-A6‚RESTOREREGSFROMSTACKˆ3/82‰RTS›RETURNTOCALLER‰PAGE*5*ˆGETREXPECTST4 HELR#OFTHEREQUESTEDRECORDIND6,*ˆGETRRETURNSTHEA(REQUESTEDRECORD)‚INA4*™A(GLOBAL)ŒINA5*™A(ENDOFTHEBUFFER)INA6*™A(IOSSYM)ŒINA0*™I/OSTATUSCODE†IND0*™GARBAGEŽIND4*™DATABASEID‰IND5*CGETR…MOVE.L„POOLPTR-GLOBAL(A5),A4ƒRANDOMCIRCULARBUFFERENTRY3/82‰CLR.B…D4’INITIALIZEOLDEST ‰MOVE.L„A4,A60‰LEA‡POOLEND-GLOBAL(A5),A0ƒA(ENDOFPOOL-1)Š3/82*LOOPPOOLCMP.B…1(A4),D5ŒSAMEDATABASEID?)‰BNE.S…AGEITNO-AGEIT&KEEPSEARCHING%‰CMP.W…2(A4),D6ŒCHECKLR#THISBUFFER.‰BEQ.S…INPOOLŽBUFFERINPOOL-NOI/OREQUIREDAGEIT„ADD.B…#1,(A4)AGEBUFFER!‰CMP.B…(A4),D4OLDERTHANOLDEST?‰BHS.S…YOUNGERNO‰MOVE.B„(A4),D4YES-SAVEIT&‰MOVE.L„A4,A6SAVEA(BUFFER)OFOLDEST4YOUNGER‚ADD.W…#BUFLTH,A4ŠA(NEXTBUFFERINPOOL)ˆ1/82%‰CMP.L…A0,A4TIMETOWRAPAROUND?‹1/82‰BLO.S…NOWRAPŽNO<‰LEA‡POOL-GLOBAL(A5),A4‚PHYSICALLYFIRSTBUFFERINPOOL3/82?NOWRAPƒCMP.L…POOLPTR-GLOBAL(A5),A4ƒREACHEDSTARTINGPOINT?ƒ3/82‰BNE‡LOOPPOOLŒNO+NEEDREADMOVE.L„A6,A4USETHEOLDESTBUFFER2‰ADD.L…#BUFHDR,A6ŠA(DATAPORTIONOFOLDESTBUFFER)‰MOVE.W„D5,D0DBIDš3/82/‰ASL.W…#5,D0OFFSETINTOTVTTABLEOFTASK3/824‰MOVE.L„SEGADDR-GLOBAL(A5),A0ƒTVTABLEBASEADDR‰3/82-‰MOVE.L„TVBUF(A0,D0),A0…TASKBUFFERADDRŽ3/82*‰MOVE.L„BUFFHS(A0),D4‡A(TASK'SFHSDB)3/826‰CMP.L…FHSOPEN-GLOBAL(A5),D4ƒMATCHA(OPENFHSDB)?†3/82/‰BEQ.S…USEIOSŽYES-GOISSUEIOSFORLUN#7‚3/821‰MOVE.L„FHSOPEN-GLOBAL(A5),A0ƒCLOSETHISFHSŒ3/82"‰MOVE.W„#4,(A0)CLOSECOMMAND‘3/82 ‰TRAP†#3°3/82‰BNE.S…IOERRCLOSEFAILED’4/82*‰MOVE.L„D4,A0A(TASK'SFHSDBTOOPEN)‡3/82%‰MOVE.W„#$40,(A0)‹ASSIGNCOMMAND3/82 ‰TRAP†#3°3/82‰BNE.S…IOERRASSIGNFAILED‘4/828USEIOSƒLEA‡IOSDB-GLOBAL(A5),A0„GETCOMMONIOSBLOCK‡3/82*‰MOVE.L„D6,8(A0)ŒRANDOMLRFORREADTOIOS‰MOVE.L„A6,12(A0)‹IOSSAD‰ADD.W…#BUFLTH-BUFHDR-1,A6Ÿ1/82‰MOVE.L„A6,16(A0)‹IOSEADTOIOS)‰TRAP†#2’READRECORD#LRFROMFILENAME.DB‰BNE.S…IOERRBADNEWS8INPOOLƒMOVEM.WƒD5-D6,(A4)ŠZEROAGE,DBID&LR#TOPREFIXA‰MOVE.L„A4,POOLPTR-GLOBAL(A5)STARTW/THISBUFFERNEXTTIME3/82,‰ADD.L…#BUFHDR,A4ŠSTEPPASTPREFIXTOBUFFER3‰MOVE.W„#4,CCRŽSETZERO(SUCCESSFUL)CONDITIONCODEIOERR„RTS›RETURNTOCALLER‰ENDé ‰TTL‡MBSR/MBSR…IDNT†0,1‡MACSBUGTYPESUBROUTINES11/14/84 ‰OPT‡FRS¯3/82*H*„CHANGED12/28/81TOALLOWSYMBOLICENTRIESFOR'[#]'-->BYP.Z.*;‰XDEF†BESTFIT,FORMADDR,PNT8HX,PNT6HX,PNT4HX,PNT2HX,SYMORDEC-‰XDEF†OUTPUT,BUFSIZE,HEX2DEC,GETNUMD,FRELADDR**‰XREF†RESOLVE,.PLJSR,PARSE_ST,ADRELO”11/83 *Â<<111484!‰XREF†INQ,SYMNAME,EOL_FLG,PTR_INP"‰XREF†ADR_VAL,BASE,INP_STR,PRSE_MD‰XREF†ERR_NMBR,GLOBAL¡111484>> ‰SECTIONƒ9FRELADDRBRA‡PNT6HX ‰PAGE$*ENTER:ˆA3=POINTERFORSTOREŸ3/82"*A6=SECTION0BASEADDRESSš3/82 *D0=VALUE*!*RETURN:ƒSYMBOL+*ŒCARRYSETIFOUT-OF-RANGE*!BESTFIT‚MOVEM.LƒD1/D3/D7/A0,-(A7) ‰MOVE.L„D0,D7 ‰MOVE.L„#1,D0 ‰BSR‡RESOLVERESOLVETOBESTFIT!‰BCS.S…BF455NO-FIT;USEABSOLUTE‰MOVE.L„#7,D1D1=CHARCOUNT‰LEA‡SYMNAME(A6),A0¤3/82BF425„CMP.B…#'',(A0)‰BEQ.S…BF435DONE,FOUNDSPACE$‰MOVE.B„(A0)+,(A3)+‰MOVESYMBOL“3/82‰DBRA†D1,BF425 BF435„TST.L…D0‰BEQ.S…BF445ZEROOFFSET‰MOVE.B„#'+',(A3)+¨3/82‰BSR‡HEX2DEC+OFFSET1BF445„MOVE.W„#0,CCRŽCARRYCLEARMEANSSYMBOL†3/82 ‰BRA.S…BF465 BF455„MOVE.L„D7,D0‰MOVE.B„#'$',(A3)+¨3/82#‰BSR.S…PNT8HXŽFORMABSOLUTEADDRESS*‰MOVE.L„D7,D0RESTORERELATIVEOFFSET‡3/82-‰MOVE.W„#1,CCRŽCARRYSETMEANSNOSYMBOL…3/82BF465„MOVEM.Lƒ(A7)+,D1/D3/D7/A0‰RTS PAGE$*ENTER:ˆA3=POINTERFORSTOREŸ3/82"*A6=SECTION0BASEADDRESSš3/82 *D0=VALUE*'*RETURN:ƒOFFSET:MODULE:S‡(S=section)*ŒCARRYSETIFOUT-OF-RANGE*"FORMADDRMOVEM.LƒD1/D3/D5 7/A0,-(A7) ‰MOVE.L„D0,D7 ‰MOVE.L„#0,D0"‰BSR‡RESOLVERESOLVETOWHERE-AM-I!‰BCS.S…FA455NO-FIT;USEABSOLUTE ‰BSR.S…PNT6HX‰MOVE.B„#':',(A3)+¨3/82 ‰MOVE.L„#7,D1D1=CHARCOUNT‰LEA‡SYMNAME(A6),A0¤3/82FA425„CMP.B…#'',(A0)‰BEQ.S…FA435DONE,FOUNDSPACE$‰MOVE.B„(A0)+,(A3)+‰MOVESYMBOL“3/82‰DBRA†D1,FA425FA435„MOVE.B„#':',(A3)+¨3/82 ‰ADD.B…#'0',D3MAKEASCII‰CMP.B…#$3A,D3 ‰BCS.S…FA445 ‰ADD.L…#7,D3FA445„MOVE.B„D3,(A3)+ª3/82 ‰BRA.S…FA465 FA455„MOVE.L„D7,D0’T›G£<«G³ -‰BSR‡ADRELOŽRREGRELATIVEADDRESSMAYBEƒ11/83$‰BPL.S…FA465WASRREGRELATIVE11/83‰MOVE.B„#'$',(A3)+¨3/82#‰BSR.S…PNT8HXŽFORMABSOLUTEADDRESS FA465„MOVEM.Lƒ(A7)+,D1/D3/D7/A0‰RTS‰PAGE** FORMAT HEX ROUTINES*** FORMAT 8 HEX CHARACTERS**‚D0,D1,D2DESTROYED*PNT8HXƒSWAPD0‚FLIPREGHALVES‰BSR.S‚PNT4HX‚DOTOPWORD‰SWAPD0‚NOWDOLOWERWORD ‰BRA.SPNT4HX* PRINT 6 HEX CHARACTERS#PNT6HXƒSWAPD0‚FLIPREGISTERHALVES ‰BSR.SPNT2HX‰SWAPD0‚FLIPBACKREGHALVES * PRINT 4 HEX CHARACTERS IN D0.W(PNT4HXƒMOVE.WD0,-(A7)‚SAVEINTEMPŸ5/83*‰ROR.W‚#8,D0‚GETBITS15-8INTOLOWERBYTE‰BSR.S‚PNT2HX‚PRINTIT"‰MOVE.W(A7)+,D0‚PULLITBACKŸ5/83 * PRINT 2 HEX CHARACTERS IN D0.B,PNT2HXƒMOVE.WD0,-(A7)SAVEINTEMPREGœ5/83‰ROXR.W#4,D0‚FORMUPPERNIBBLE)‰BSR.SPUTHEX‚PUTASCIIINTOPRINTBUFFER(‰MOVE.W(A7)+,D0‚GETBACKFROMTEMP™5/833* CONVERT D0.NIBBLE TO HEX & PUT IT IN PRINT BUFFER*&PUTHEXƒAND.B#$0F,D0‚SAVELOWERNIBBLE‰OR.B#$30,D0‚CONVERTTOASCII‰CMP.B#$39,D0ƒSEEIFITIS>9 ‰BLE.SSAVHEX‰ADD.B…#7,D0…ADDTOMAKE10=>A2SAVHEXƒMOVE.B„D0,(A3)+PUTITINPRINTBUFFER“3/82‰RTS PAGE* DECODE AS A NUMBER8GETNUMD‚MOVEM.LƒD1-D5/A0,-(A7)†ENTRYFORDECIMALDEFAULT‰MOVE.W„#2,D3D3=BASEƒNEW!!! ‰BRA.S…GETN SPC 2* ENTRY FOR HEX-GETNUMA‚MOVEM.LƒD1-D5/A0,-(A7)†SAVEREGISTERS‰MOVE.W„#1,D3D3=BASEƒNEW!!! SPC 1)GETN…CLR.W…D4ˆD4=FLAGFORCHARACTERHIT ‰CLR.LD0‰CLR.LD1‚WHERETOPUTRESULTS*NXTNUMƒCMP.LA3,A5ƒSEEIFATENDOFBUFFER ‰BEQ.S…EXITGN‰MOVE.B(A5)+,D0‚GRABCHARACTER‰CMP.B#$20,D0„CHECKFORSPACE‰BNE.SGETNUM3**ˆTST.W…D4ˆSEEIFANYTHINGENTERED„NEW!!!+‰BRA.SNXTNUMƒIFNOTSCANNEXTCHARƒNEW!!!;GETNUM2‚SUB.L…#1,A5…BACKUPTOPOINTATSPACE/PREVIOUSCHAR,EXITGNƒMOVE.L„D1,D0…SETUPRESULTFORRETURN‰MOVE.W„#04,CCRƒ[BEQ]£5/83.‰BRA.S…EXITGN11‚SUCCESSFULDECODEDNUMBER5/833EXITBNƒMOVE.W„#00,CCRƒ[BNE]‚BADDECODEDNUMBER5/83;EXITGN11MOVEM.Lƒ(A7)+,D1-D5/A0†RESTORESOMEREGISTERSˆ5/83‰RTS SPC 3)GETNUM3‚CMP.B#$27,D0ƒSEEIFSINGLEQUOTE#‰BEQ.S…GETNUMST‚GETNUMSTRINGš1/82 SPC 1‰CLR.L…D0’RESETSUCCESSFLAG,‰SUB.L…#1,A5RESTOREA5TOLASTCHARCHECKED/‰MOVE.B„#$0D,(A3)‹INSERT'CR'ASLASTCHAR†3/824‰MOVE.L„A5,INP_STR(A6)†SETINPUTBUFFERADDRESS†3/820‰MOVE.B„BASE(A6),D2‰SAVEDEFAULTINPUTBASE‡3/82/‰MOVE.B„D3,BASE(A6)‰SETDEFAULTINPUTBASEˆ3/82.‰MOVE.B„#1,PRSE_MD(A6)‰SETPARSEMODE=1‰3/82$‰MOVEM.LƒD0-D7/A0-A6,-(A7)ƒSAVEREGS3‰LEA‡GLOBAL(A6),A5‡ADDOFFSETOFGLOBALFORA5ƒ3/82%‰MOVEA.LƒA5,A6SETLOCALAREAPOINTER7‰LEA‡.PLJSR(PC),A3‡GETADDRESSOFLONGJSRROUTINE1/82‰BSR‡PARSE_STª1/82,‰MOVEM.Lƒ(A7)+,D0-D7/A0-A6ƒRESTOREREGS’3/82$‰MOVE.B„#$20,(A3)‹RESTORESPACE‘3/82 ‰TST.B…ERR_NMBR(A6)ˆERROR?—3/82‰BNE.S…NO_GOODYES)‰MOVE.L„ADR_VAL(A6),D1†NO,GETVALUE‘3/82‰ADD.L…#1,D0SETSUCCESSFLAG* NO_GOOD‚EQU‡*3‰MOVE.B„D2,BASE(A6)‰RESTOREDEFAULTINPUTBASE„3/822‰MOVE.B„#3,PRSE_MD(A6)†RESTOREPARSEMODE=3ˆ3/82‰LEA‡INQ(A6),A0¨3/820‰MOVE.L„A0,INP_STR(A6)†INPUTBUFFERADDRESSŠ3/82 ‰CLR.L…D2.‰MOVE.B„PTR_INP(A6),D2†GETBUFFERPOINTERŒ3/82)‰TST.B…EOL_FLG(A6)‰EOLENCOUNTERED?3/82‰BNE.S…EOL‘YES‰SUB.L…#1,D2NO,ADJUSTPOINTER* EOL†EQU‡*'*******‚MOVE.L„(A7)+,A5ŒRESTOREA5”3/82*‰ADD.L…D2,A5ADJUSTA5FOR5 VALUERETRIEVED‰TST.L…D0’SUCCESS?‰BNE‡GETNUM2YES‰BRA‡EXITBNŽNOœ5/83 SPC 37GETNUMSTTST.LD1‚IFSOMETHINGISBEFORETHISERROROUT‰BNE‡EXITBNŽBADNUMBER”5/83‰MOVE.L#5,D2‚COUNTER'GETNUMS1MOVE.B(A5)+,D0‚LOADCHARACTER"‰CMP.B#$27,D0„SEEIFSINGLEQUOTE‰BEQGETNUM2WHERETOGOIFEND(‰LSL.L#8,D1‚MAKEROOMFORNEWCHARACTER‰MOVE.BD0,D1‚NEWBYTE)‰CMP.LA3,A5†SEEIFATENDOFBUFFER”3/82(‰BEQƒEXITGN…WHERETOGOIFENDOFBUFFER ‰SUB.L#1,D2 ‰BNEƒGETNUMS14EXITSYN‚BRA‡EXITBN†NOCLOSINGQUOTEORTOOLONGŠ5/83‰PAGE*0*‚***GETHEX***‚GETHEX(BINARYVALUEFROMASCII):*ƒD0.BHASASCIICHAR‚RETURNS$0-$FBINARYOR$FFONERROR*)GETHEXCMP.B#$30,D0‚ISITLESSTHANZERO‡BLT.SPNMSG011#‡CMP.B#$39,D0‚ISITGREATERTHAN9‰BLE.S…GTHX2…GOODHEX SPC 1"‡CMP.B#$41,D0‚ISITLESSTHAN'A'‡BLT.S‡PNMSG011‡CMP.B#$46,D0‚ISITGT'F'‡BGT.S‡PNMSG011!‡SUB.B#7,D0‚MAKEITSMALLERA=10GTHX2„AND.L…#$F,D0‰RTS SPC 1 PNMSG011DS„0 ‰BRA‡EXITSYN 8SYMORDECMOVE.L„A3,-(A7)ŒSAVEOUTPUTBUFFERPOINTER„3/82‰BSR‡BESTFIT«3/82 ‰BCS.S…NOSFITŽNOSYMBOLFIT‘3/82"‰ADD.L…#4,A7POPA3OFFSTACKŽ3/82 ‰RTS¹3/823NOSFITƒMOVE.L„(A7)+,A3ŒRETRIEVEBUFFERPOINTER‡3/82!‰MOVE.L„D0,-(A7)ŒSAVEOFFSET“3/82+‰MOVEQ.Lƒ#8,D0LOOPINDEX-1FORERASE‡3/82*„CONVERTBINARYTODECIMAL‚REGD0PUTIN(A6)BUFFERASASCII*0HEX2DEC‚MOVEM.LƒD1-D4/D6-D7,-(A7)ƒSAVEREGISTERS‰MOVE.LD0,D7‚SAVEITHERE ‰BPL.SHX2DC‰NEG.LD7‚CHANGETOPOSITIVE ‰BMI.S…HX2DC57ƒSPECIALCASE(-0)'‰MOVE.B#'-',(A3)+‚PUTINNEGSIGNš3/82 HX2DC„CLR.W…D4ˆFORZEROSURPRESS‰MOVE.L#10,D6‚COUNTER HX2DC0ƒMOVE.L#1,D2‚VALUETOSUB‰MOVE.LD6,D1‚COUNTER'‰SUB.L#1,D1‚ADJUST-FORMPOWEROFTEN‰BEQ.SHX2DC2‚IFPOWERISZERO!HX2DC1ƒMOVE.WD2,D3‚D3=LOWERWORD ‰MULU#10,D3‰SWAPD2ƒD2=UPPERWORD ‰MULU#10,D2‰SWAPD3ƒADDUPPERTOUPPER ‰ADD.WD3,D2‰SWAPD2‚PUTUPPERINUPPER‰SWAPD3‚PUTLOWERINLOWER‰MOVE.WD3,D2‚D2=UPPER&LOWER ‰SUB.L#1,D1 ‰BNEHX2DC1HX2DC2ƒCLR.LD0‚HOLDSSUBAMTHX2DC22‚CMP.LD2,D7%‰BLT.SHX2DC3‚IFNOMORESUBPOSSIBLE‰ADD.L#1,D0‚BUMPSUBS(‰SUB.LD2,D7‚COUNTDOWNBYPOWERSOFTEN‰BRA.SHX2DC22‚DOMOREHX2DC3ƒTST.BD0‚ANYVALUE? ‰BNE.SHX2DC4‰TST.W…D4ˆZEROSURPRESS ‰BEQ.SHX2DC5$HX2DC4ƒADD.B#$30,D0‚BINARYTOASCII#‰MOVE.B„D0,(A3)+‚PUTINBUFFER›3/82'‰MOVE.B„D0,D4…MARKASNONZEROSURPRESSHX2DC5ƒSUB.L#1,D6…NEXTPOWER ‰BNEHX2DC0!‰TST.W…D4ˆSEEIFANYTHINGPRINTED ‰BNE.SHX2DC63HX2DC57‚MOVE.B„#'0',(A3)+‚PRINTATLESTAZERO’3/822HX2DC6ƒMOVEM.Lƒ(A7)+,D1-D4/D6-D7ƒRESTOREREGISTERS‰RTS‚ENDOFROUTINE OUTPUTƒBRA‡*BUFSIZE‚EQU‡128 ‰END éééé6 ééé/MM‡IDNT†0,1‡MM(MemoryChange)CommandŽ11/14/84 ‰OPT‡FRS¯3/82‰XDEF†MM,MDDI,GETNUMDE¢3/82 SPC 1<‰XREF†.PLJSR,CODE68M,DCODE68M,DO7OUTR,ERLL,KEYIN,WHATƒ111484(‰XREF†FORMADDR,PNT2HX,PNT4HX,PNT8HX•3/82<‰XREF†RESOLVEƒD0&D7=INPUT;‚D0=OFFSETSYMNAME=textD3=SECTION *Â<<1114840‰XREF†BRKPBG,BRKPBUF,BRKGET,BRKPBP,BRKSOR,BRKBUF!‰XREF†IOIN,OUTSTAR,OTEND,INQ,INQE+‰XREF†OUTBUF,DMOUTA,SYMNAME,UTLWORD,SYM_BUF*‰XREF†TOKEN,ERR_NMBR,GLOBAL,PCODE•111484>>* CR‡EQU‡$D MOVELLƒSET‡6  ?* 0123456789012345678901234567890123456789012345678901234567890@*AAAAAA:MODULEXX:3DDDDDDDDDDDDDDDDDDDDLLLLLLLLOPCODE‚OPERAND*“FDATAFOL†FOC…FOP FDATA„EQU‡18ˆOFFSETTODATAFOL†EQU‡39ˆOFFSETTOLABEL-FOC†EQU‡48ˆOFFSETTOOP-CODE(NOLABELFIELD)-FOP†EQU‡56ˆOFFSETTOOPERAND(NOLABELFIELD) PAGE ‰SECTIONƒ9* MODIFY MEMORY*‚COMMONREGISTERUSAGE*‚XA6‚SECTION0BASEADDRESS*ƒA5‚IOBUFFERPOINTER‚START*‚XA4‚ADDRESSTOMODIFY*ƒA3*ƒA2*ƒA1*ƒA0‚IOBUFFERPOINTEREND*ƒD7‚DATAREAD(DATASTORED)/*ƒD6‚SIZE‚1/2/4BYTES‚(ASM/DISASM2-10BYTES)5*ƒD5‚OVERRIDEBYTE(80XX=NONVERIFY)‚(XX80=BYTESIZE)*ƒD4‚ADDRESSTOMODIFY* * ;OPTIONS *ƒ;B‚BYTE *ƒ;W‚WORD*ƒ;L‚LONGWORD(4BYTES)*ƒ;DIDISASSEMBLE*MMDI ‰BTST†#0,D4‰BNE‡MM7ERRŽODDADDRESSERROR ‰CLR.L…D6’SIZE=0!MMDI22ƒADD.L…D6,D4PC=PC+SIZETMMDI„BSR‡MMDI221DISASSEMBLE5*******‚MOVE.L„D1,A5RETRIEVEBUFFERENDADDRESSƒ1/82 ‰MOVE.B„#'?',(A5)‹ASKAQUESTION‰BSR‡FDISPLAYŒDISPLAYLINE’1/82.‰LEA‡OUTBUF(A6),A3‡SAVEADDRESSDISPLAYEDˆ3/82.‰LEA‡SYM_BUF(A6),A1‡FROMSYMBUFTOOUTBUF‰3/82‰BSR.S…COPYADDRŒDOIT™3/82* *„INPUTLINE*5MMDI31ƒBSR‡KEYININPUTASSEMBLYSOURCE(NOLINEFEED)%‰MOVE.B„(A5),D0D0=FIRSTCHARINPUT ‰CMP.B…#CR,D0 ‰BNE.S…MMDI34,*ˆBSR‡OUT1CRŽNOTHINGINPUT;OUTPUTLINEFEED ‰BRA‡TMMDI >COPYADDRMOVE.L„(A1)+,(A3)+‰COPYS18BYTEOUTPUTADDRESSFIELD$‰MOVE.L„(A1)+,(A3)+‰FDATAIS18“3/82‰MOVE.L„(A1)+,(A3)+‰MOVE.L„(A1)+,(A3)+‰MOVE.W„(A1)+,(A3)+‰RTS »MÄDÌVÔjÜWäKì MMDI34ƒSUB.L…D6,D4BACKUPPC ‰CMP.B…#'.',D0‰BEQ‡MMCLOSECLOSE 0‰LEA‡INQ(A6),A5ŠA5=POINTERTOSOURCECODEƒ3/820‰LEA‡DMOUTA(A6),A3‡A3=POINTERFORRESULTS†3/82‰MOVEM.LƒA4/A6,-(A7)6‰MOVE.L„IOIN+20(A6),A0†A0=NUMBEROFBYTESINPUT„3/82/‰ADD.L…A5,A0A0=POINTERTOENDOFSOURCE3/82,‰MOVE.B„#'',(A0)‹OVERLAYCRWITHSPACE‰3/82"‰MOVE.L„D4,A4A4=ADDRESSOFDATA/‰MOVE.L„PCODE(A6),D3ˆD3=PROCESSORTYPE‹111484 *’A3=STOREPOINTER*’A4=PROGRAMCOUNTER"*’A5=POINTERTODATATOASSEMBLE2*’A0=POINTERTOENDOFSOURCEDATA‚(UNUSED)†3/82*’D3=PROCESSORTYPEŸ111484+*™0=68000,4=68008,8=68010,C=68020‰111484‰BSR‡CODE68MASSEMBLE–111484 *’A3=POINTERTOLINEASSEMBLED *’A4=PROGRAMCOUNTER(ORGINAL)$*’A0=POINTERENDOFLINEASSEMBLED*’D0-D2=DATAASSEMBLED3*’D6=NUMBEROFBYTESASSEMBLED(IF=ZERO;ERROR)%*’D7=ERRORFLAG&POSITIONOFERROR "‰MOVE.L„A4,D4…D4=ADDRESSOFDATA-‰MOVEM.Lƒ(A7)+,A4/A6‰RESTOREA6BASEREG‹1/82;‰MOVEM.LƒD0/D1/D2,UTLWORD(A6)‚6 UTLWORD=DATAASSEMBLED„3/822‰MOVE.L„D7,UTLWORD+12(A6)=POSITIONIFERROR3/826******ƒMOVE.L„D6,BRKBUF+4-B(A6)ƒMOVELLBYTECOUNT1/82 =* MOVE LINE ASSEMBLED (FROM DMOUT) TO OUTPUT BUFFER; KEEP OLD*‚ADDRESSFIELD‰LEA‡SYM_BUF(A6),A3¥3/82.‰LEA‡OUTBUF(A6),A1‡A(SAVEDADDRESSFIELD)ˆ3/821‰BSR‡COPYADDRŒFDATABYTESFROMOUTBUF-SYM_BUF3/82‰LEA‡DMOUTA+FDATA(A6),A1Ÿ3/82$*******‚LEA‡SYMBUF+FDATA(A6),A3Ÿ3/82 /MMDI29ƒMOVE.B„(A1)+,(A3)+‰MOVEDATASTRINGŽ3/82 ‰CMP.L…A1,A0 ‰BCC‡MMDI29 ‰SUB.L…#1,A3­3/82!‰BSR.S…FDISPLAYŒDISPLAYLINE’1/82 ‰TST.B…D6%‰BEQ.S…MMDI30ŽERROR;DON'TSTOREDATA 7******ƒMOVE.L„#UTLWORD,BRKSOR-B(A6)‚SOURCEADDRESS1/82‰BSR‡STORE­1/82 ‰BRA‡MMDI22 MMDI305‰MOVE.L„UTLWORD+12(A6),D7ƒD7=POSITIONOFERRORˆ3/82‰LEA‡SYM_BUF(A6),A3¥3/82$MMDI44ƒMOVE.B„#'',(A3)+ŠSPACES˜3/82‰DBRA†D7,MMDI44 &‰MOVE.B„#'X',-1(A3)‰XUNDERERROR‘3/82'‰MOVE.B„#'?',(A3)+Š?ALLOWREINPUT3/82‰MOVE.B„#$7,(A3)ŒBELLš3/82‰BSR.S…FDISPLAYª1/82 ‰BRA‡MMDI31 ,FDISPLAYMOVE.L„#$10,D7FORMATEDOUTPUT1/82 IDISPLAYLEA‡SYM_BUF(A6),A0¥3/82)‰MOVE.L„A0,OUTSTAR(A6)†STARTADDRESS‘3/82%‰MOVE.L„A3,OTEND(A6)ˆENDADDRESS“3/82‰BSR‡DO7OUTR«1/82 ‰RTS¹1/82 PAGEMMDI221‚BSR‡GET10B„GET10BYTES ‰MOVEM.LƒA4/A6,-(A7) ‰MOVE.L„D4,A46‰LEA‡SYM_BUF(A6),A5‡A5=POINTERFORDISASSEMBLER3/82‰MOVE.L„PCODE(A6),D3¦111484*’ENTRY*“A4=PROGRAMCOUNTER)*“A5=POINTERTOSTOREDISASSEMBLEDLINE*D0-D2=DATATODISASSEMBLE*“D3=PROCESSORTYPEž111484+*š0=68000,4=68008,8=68010,C=68020ˆ111484‰BSR‡DCODE68Mª111484*’RETURN*“A4=NEWPROGRAMCOUNTER*“A5=PTRSTARTBUFFER*“A3=PRTENDBUFFERž3/82#*“D6=NUMBEROFBYTESDISASSEMBLED ‰MOVE.L„A4,D4'‰MOVE.L„A3,D1SAVEENDBUFFERADDRŠ3/82‰MOVEM.Lƒ(A7)+,A4/A6 * FORMAT LABEL FIELD IF PC MATCH ‰MOVE.L„D4,D7 ‰SUB.L…D6,D7!‰MOVE.L„#1,D0RESOLVETOBESTFIT2‰LEA‡GLOBAL(A6),A5‡RESOLVEADDRESSESGLOBALLY„3/82‰BSR‡RESOLVEGETSYMBOL‰LEA‡SYMNAME(A6),A1¤3/82‰CMP.B…#'',(A1)‹FOUNDLABEL?‰BEQ.S…MMDI24ŽNOMATCH ‰TST.L…D0‰BNE.S…MMDI24ŽNOTEXACTMATCH ‰LEA‡SYM_BUF+FOL(A6),A0¡3/82 ‰MOVE.L„#7,D0$MMDI23ƒMOVE.B„(A1)+,(A0)+‰MOVELABEL‰DBRA†D0,MMDI236MMDI24ƒMOVE.L„D1,A5RESTOREENDBUFFERADDRTOA51/82‰RTS SPC 2&MDDI…MOVE.L„D1,D4D4=DISPLAYADDRESS‰BTST†#0,D4ODDADDRESS?‰BNE.S…MM7ERRŽYES,ERROR+NEXTLOC‚MOVE.L„D2,-(A7)ŒNO,SAVELINECOUNT‰BSR‡MMDI221DISASSEMBLE‰BSR‡FDISPLAYŒDISPLAYLINE’1/82‰MOVE.L„(A7)+,D2ŒRESTORECOUNT‰SUB.L…#1,D2DONE?‰BNE.S…NEXTLOCNO‰RTS›YES PAGE* ENTER: *ˆD0=KEY *‹=1‚ADDRESS*‹=2‚ADDRESSˆTYPE*‹=3‚ADDRESSLENGTH*‹=4‚ADDRESSLENGTHTYPE*ˆD1=ADDRESSˆBECOMESD4*ˆD3=LENGTH1/2/4‹D6*ˆD4=TYPE$A=DID1*MM‰MOVE.L„D3,D6D6=LENGTH%‰EXG.L…D1,D4D4=ADDRESS(D1=TYPE) ‰CMP.B…#1,D0 ‰BNE.S…MM2000 *†KEY=1‰CLR.L…D1’D1=TYPE(NOT;DI)‰MOVE.L„#1,D6D6=LENGTHBYTE ‰BRA.S…MM10 MM2000ƒCMP.B…#2,D0 ‰BNE.S…MM3000 *…KEY=2‰MOVE.L„#1,D6FORCEBYTE ‰CMP.B…#$A,D1‰BEQ‡MMDIDISASSEMBLE ‰BRA.S…MM10 MM3000ƒCMP.B…#3,D0 ‰BNE.S…MM4000 *…KEY=3‰CMP.W…#1,D6­1/82‰BEQ.S…MM10BYTESIZE‰BRA.S…MM7‘DOADDRESSCHECK MM4000ƒCMP.B…#4,D0 ‰BNE.S…MM7ERR&‰BRA.S…MM7ERRŽTYPE‚"KEY=4"GOESHERE PAGE MM7†BTST†#0,D4ODDADDRESSCHECK ‰BEQ.S…MM10 * FALL THRU; ODD ADDRESS ERRORMM7ERRƒADD.L…#4,A7TRIMSTACK‰BRA‡WHATERROR;PRINT"WHAT" MM10‰MOVEM.LƒA6/D1,-(A7)‰LEA‡SYM_BUF(A6),A3¥3/82 ‰MOVE.L„D4,D0‰BSR‡FORMADDRŒFORMATADDRESS*******‚MOVE.L„A6,A5­3/82‰MOVEM.Lƒ(A7)+,A6/D1‰MOVE.B„#'',(A3)+ŠSPACE™3/82 SPC 1#* READ DATA FROM MEMORY & FORMAT IT ‰CMP.B…#2,D6‰BEQ.S…MM14†WORD ‰CMP.B…#4,D6‰BEQ.S…MM16†LONGWORD SPC 1* BYTE‰BSR‡GETB†D0=BYTEREAD‰BSR‡PNT2HX„FORMATBYTE ‰BRA.S…MM18 SPC 1* WORDMM14…BSR‡GETW†D0=WORDREAD‰BSR‡PNT4HX„FORMATWORD ‰BRA.S…MM18 SPC 1 * LONG WORDMM16…BSR‡GETL†D0=LONGWORD‰BSR‡PNT8HX„FORMATLONGWORD SPC 1!MM18…MOVE.B„#'',(A3)+ŠSPACE™3/82‰MOVE.B„#'?',(A3)+¨3/827  ‰SUB.L…#1,A3­3/82!‰CLR.L…D7’IMAGEMODEDISPLAYŒ1/82‰BSR‡IDISPLAYŒDISPLAYLINE’1/82  PAGE* READ USER INPUT*‚[DATA](CR)ƒNEXT*‚[DATA]ƒ^„LAST*‚[DATA]ƒ=„SAME*‚[DATA]ƒ.„EXIT SPC 1‰BSR‡KEYININPUTLINE%‰MOVE.B„(A5),D0D0=FIRSTCHARINPUT ‰CMP.B…#CR,D0‰BEQ.S…MM50NODATA(CRONLY) SPC 1*IF=^OR.‚TAKEACTION‰MOVE.B„(A5),D0‰CMP.B…#'=',D0‰BEQ‡MM10=DOSAMEADDRESS‰CMP.B…#'.',D0‰BEQ.S…MMCLOSE.‚CLOSE‰CMP.B…#'^',D0‰BEQ.S…MM60^‚BACKUP SPC 1‰LEA‡INQ(A6),A5¨3/82‰BSR‡GETNUMAGETNUMBER ‰BCS‡MM7ERR SPC 1* WE HAVE DATA; STORE IT ‰CMP.B…#2,D6‰BEQ.S…MM24†WORD ‰CMP.B…#4,D6‰BEQ.S…MM26†LONGWORD SPC 1* BYTE‰BSR‡STOREBŽBYTESTORE ‰BRA.S…MM40 SPC 1* WORDMM24…BSR‡STOREWŽWORDSTORE ‰BRA.S…MM40 SPC 1 * LONG WORDMM26…BSR‡STORELŽLONGWORDSTORE SPC 1*LOOKFOR‚.=^‚CR‚TERMINATIONMM40…MOVE.B„(A5),D0‰CMP.B…#'.',D0‰BEQ.S…MMCLOSEƒDONE‰CMP.B…#'^',D0%‰BEQ.S…MM60"UP-ARROW"‚BACKUPADDRESS‰CMP.B…#'=',D0-‰BEQ‡MM10"EQUAL-SIGN"ADDRESSSTAYSTHESAME ‰CMP.B…#CR,D0‰BNE‡MM7ERRŽ"WHAT?" '*ADDRESSLOWTOHIGH’"CR"NEXTADDRESSMM50…ADD.L…D6,D4 ‰BRA‡MM10 SPC 1* ADDRESS HIGH TO LOWMM60…SUB.L…D6,D4 ‰BRA‡MM10 MMCLOSE‚RTS‘RETURNTOCALLER SPC 3* GET DATA FROM "TASK"GET†LEA‡UTLWORD(A6),A0¤3/822GETM…MOVE.L„A0,BRKGET(A6)‡DESTINATIONADDRESS‹3/82*‰MOVE.L„D4,BRKPBUF(A6)†SOURCEADDRESS3/82/‰MOVE.L„D0,BRKGET+4(A6)…BYTECOUNTFETCHEDŒ3/822‰LEA‡BRKPBG(A6),A0‡POINTERTOPARAMETERBLOCK„3/82"‰MOVE.L„(A4),(A0)‹SOURCETASKNAMEDOMOVEƒMOVE.L„#MOVELL,D0¨3/82‰TRAP†#1‰BNE‡ERLLERROR‰RTS !GETB…MOVE.L„#1,D0BYTECOUNT”1/82 ‰BTST†#0,D4‰BEQ.S…GETBEVENŒEVENADDRESS &‰LEA‡UTLWORD+1(A6),A0„ODDADDRESS“3/82 ‰BSR‡GETM/‰MOVE.B„UTLWORD+1(A6),D0„D0=BYTEFETCHED3/82‰RTS  GETBEVENBSR‡GET‘GETBYTEEVEN-‰MOVE.B„UTLWORD(A6),D0†D0=BYTEFETCHED3/82‰RTS !GETW…MOVE.L„#2,D0BYTECOUNT“1/82‰BSR‡GET-‰MOVE.W„UTLWORD(A6),D0†D0=WORDFETCHED3/82‰RTS !GETL…MOVE.L„#4,D0BYTECOUNT”1/82‰BSR‡GET2‰MOVE.L„UTLWORD(A6),D0†D0=LONGWORDFETCHEDˆ3/82‰RTS $GET10BƒMOVE.L„#10,D0ŽBYTECOUNT”1/82‰BSR‡GET‰MOVEM.LƒUTLWORD(A6),D0-D2¡3/82‰RTS ,STORE„LEA‡UTLWORD(A6),A0†SOURCEADDRESS3/824STOREMƒMOVE.L„D4,BRKBUF(A6)‡DESTINATIONADDRESS‹3/82)‰MOVE.L„A0,BRKSOR(A6)‡SOURCEADDRESS3/82.‰MOVE.L„D6,BRKBUF+4(A6)…BYTECOUNTSTORED3/82‰LEA‡BRKPBP(A6),A0¥3/82#‰MOVE.L„(A4),12(A0)‰SOURCETASKNAME-‰BRA‡DOMOVEŽPERFORMMOVELLBETWEENTASKS‚3/82 STOREBƒBTST†#0,D4­1/82‰BEQ.S…STBEVENSTOREEVENBYTE 0‰LEA‡UTLWORD+1(A6),A0„SOURCEADDRESSISODD‰3/82&‰MOVE.B„D0,(A0)ŽDATA‚TOUTLWORD+1‹1/82‰BSR‡STOREMŽSTOREBYTE‰RTS -STBEVEN‚MOVE.B„D0,UTLWORD(A6)†STOREBYTE”3/82 ‰BSR‡STORE‰RTS ,STOREWƒMOVE.W„D0,UTLWORD(A6)†STOREWORD”3/82 ‰BSR‡STORE‰RTS 1STORELƒMOVE.L„D0,UTLWORD(A6)†STORELONGWORD3/82 ‰BSR‡STORE‰RTS PAGE* DECODE AS A NUMBER9GETNUMDEMOVEM.LƒD1-D5/A0,-(A7)†ENTRYFORDECIMALDEFAULT‰MOVE.W„#10,D3ŽD3=BASE ‰BRA.S…GETN SPC 2* ENTRY FOR HEX-GETNUMA‚MOVEM.LƒD1-D5/A0,-(A7)†SAVEREGISTERS‰MOVE.W„#16,D3„D3=BASE SPC 1)GETN…CLR.W…D4ˆD4=FLAGFORCHARACTERHIT ‰CLR.LD0‰CLR.LD1‚WHERETOPUTRESULTS*NXTNUMƒCMP.LA6,A5ƒSEEIFATENDOFBUFFER ‰BEQ.S…EXITGN‰MOVE.B(A5)+,D0‚GRABCHARACTER‰CMP.B#$20,D0„CHECKFORSPACE‰BNE.SGETNUM3!‰TST.W…D4ˆSEEIFANYTHINGENTERED#‰BEQ.SNXTNUMƒIFNOTSCANNEXTCHAR;GETNUM2‚SUB.L…#1,A5…BACKUPTOPOINTATSPACE/PREVIOUSCHAR,EXITGNƒMOVE.L„D1,D0…SETUPRESULTFORRETURN.‰MOVEM.Lƒ(A7)+,D1-D5/A0†RESTORESOMEREGISTERS‰MOVE.W„#0,CCRŽRESETCARRYBIT‰RTS -EXITGNE‚MOVE.L„D1,D0…SETUPRESULTFORRETURN.‰MOVEM.Lƒ(A7)+,D1-D5/A0†RESTORESOMEREGISTERS‰MOVE.W„#1,CCRŽSETCARRYBIT‰RTS SPC 3)GETNUM3‚CMP.B#$27,D0ƒSEEIFSINGLEQUOTE‰BEQ.S…GETNUMST‚GETNUMSTRING SPC 1/‰LEA‡GETNDATA(PC),A0…POINTERTOTERMINATECHARSGETNUM31MOVE.B„(A0)+,D5‰BEQ.S…GETNUM37ŒNOTTERM.CHAR ‰CMP.B…D5,D0‰BEQ‡GETNUM2FOUNDCHAR ‰BRA‡GETNUM31 SPC 1/GE7 TNDATADC.B†'(+,-.:;=^]',$D,0ƒTERMINATECHARS SPC 10GETNUM37CMP.B#'&',D0ƒSEEIFFLAGGEDASDECIMAL‰BNE.SGETNUM41!‰TST.W…D4’SEEIFANYTHINGDECODED ‰BNE.S…ERROR1‰MOVE.W#10,D3„BASEISDECIMAL SPC 1-GETNUM39MOVE.L„#-1,D4„FLAGASSOMETHINGREAD ‰BRANXTNUM SPC 1,GETNUM41CMP.B#'$',D0„SEEIFFLAGGEDASHEX‰BNE.SGETNUM5!‰TST.WD4„SEEIFANYTHINGDECODED ‰BNE.SERROR1‰MOVE.W#16,D3„BASEIS16 ‰BRA‡GETNUM39 SPC 1+GETNUM5‚BSR.S…GETHEX‚RETURNSWITHD0=BINARY&‰CMP.W…D3,D0ƒISINPUTLARGERTHANBASE ‰BHI.SERROR1+‰MOVE.LD1,D2ƒGETREADYTOMULTIPLYD1*BASE‰SWAPD1‰MULU†D3,D1ƒTOPPART‰SWAPD1‰TST.WD1ƒCHECKFOROVERFLOW ‰BNE.SERROR1‚VALUEISTOOLARGE ‰MULU†D3,D2‚NOWWORKONLOWWORD!‰ADD.LD2,D1‚PUTITBACKTOGETHER‰BVS.SERROR1‚OVERFLOW?‰ADD.LD0,D1‚ADDINNEWSTUFF ‰BVC‡GETNUM39ERROR1ƒBRA‡EXITGNE SPC 17GETNUMSTTST.LD1‚IFSOMETHINGISBEFORETHISERROROUT‰BNE.SEXITSYN‰MOVE.L#5,D2‚COUNTER'GETNUMS1MOVE.B(A5)+,D0‚LOADCHARACTER"‰CMP.B#$27,D0„SEEIFSINGLEQUOTE‰BEQGETNUM2WHERETOGOIFEND(‰LSL.L#8,D1‚MAKEROOMFORNEWCHARACTER‰MOVE.BD0,D1‚NEWBYTE$‰CMP.LA6,A5†SEEIFATENDOFBUFFER(‰BEQƒEXITGN…WHERETOGOIFENDOFBUFFER ‰SUB.L#1,D2 ‰BNEƒGETNUMS10EXITSYN‚BRA‡EXITGNEŠNOCLOSINGQUOTEORTOOLONG‰PAGE*0*‚***GETHEX***‚GETHEX(BINARYVALUEFROMASCII):*ƒD0.BHASASCIICHAR‚RETURNS$0-$FBINARYOR$FFONERROR*)GETHEXCMP.B#$30,D0‚ISITLESSTHANZERO‡BLT.SPNMSG011#‡CMP.B#$39,D0‚ISITGREATERTHAN9‰BLE.S…GTHX2…GOODHEX SPC 1"‡CMP.B#$41,D0‚ISITLESSTHAN'A'‡BLT.S‡PNMSG011‡CMP.B#$46,D0‚ISITGT'F'‡BGT.S‡PNMSG011!‡SUB.B#7,D0‚MAKEITSMALLERA=10GTHX2„AND.L…#$F,D0‰RTS SPC 1 PNMSG011DS„0‰ADD.L…#4,A7TRIMSTACK ‰BRA‡EXITGNE ‰ENDéééé*!*’SIMBOFORSYMBUGII‚--‚11/14/84*2*ˆTHEREARETHREEMODULESCONTAINEDWITHINSIMBO:*4*‹SIMBO„-READIN.DBFILEANDSETUPIN-CORETABLES4*‹CALC_ADD-EVALUATEABSOLUTEVALUEASSOCIATEDWITH+*˜[SYMBOL][:OBJMOD[:SECTION]]FROM.DBFILE6*‹RESOLVE‚-MATCHANABSOLUTEVALUETOSYMBOL[+OFFSET]*7SIMBO„IDNT†2,1‘SIMBOSYMBOLPROCESSORFOR68KSYMBUGII ‰OPT‡FRS¯3/82 ‰SECTIONƒ9‰XREF†IODB,MSG00¨3/82 *Â<<111484*ƒTABLESNEEDEDWITHINGSYMBUG*"‰XREF†RCVBLK,RCVSEG,RCVBUF,RCVADDR ‰XREF†CURTCNT-‰XREF†REVISION,MODNAME,SYMNAME,OMNEXT,FHSOPEN ‰XREF†IOUT‰XREF†FHSDB0,FHSDB1#‰XREF†OMNTBL,SEGEND,FORTASK,PRSE_MD‰XREF†GLOBALª111484>> ‰XDEF†SIMBO,CALC_ADD,RESOLVE**ˆTASKDATAEQUATES*)HDRCNTƒEQU‡12’OBJECTMODULEHEADERLENGTH/ONAME1ƒEQU‡2“OBJECTMODULENAME(FIRST4CHARS)5ONAME2ƒEQU‡ONAME1+4ŒOBJECTMODULENAME(LAST4CHARS)/OSYMCNT‚EQU‡ONAME1+8ŒOBJECTMODULESYMBOLCOUNT5OLBLCNT‚EQU‡ONAME1+10‹OBJECTMODULELINENUMBERCOUNT6ONEXTLR‚EQU‡ONAME1+12‹OBJECTMODUL8 ENEXTSECTORNUMBER*"MAPLTHƒEQU‡8“LOADMAPENTRYLENGTHMAPSEGƒEQU‡4“LOADMAPSEGMENTMAPSECT‚EQU‡5“LOADMAPSECTION"MAPCODE‚EQU‡6“LOADMAPMODULECODE*"BUFOMNƒEQU‡$60‘TASKBUFOMNTBLADDRBUFMAPƒEQU‡$64‘TASKBUFMAPADDR$BUFMAPE‚EQU‡$68‘TASKBUFMAPENDADDR'BUFOMHI‚EQU‡$6C‘TASKBUFHIGHESTOMCODE-BUFCURO‚EQU‡$6E‘TASKBUFPCCURRENTOBJMODULE*BUFCURS‚EQU‡$70‘TASKBUFPCCURRENTSECTION%BUFSEGI‚EQU‡$71‘TASKBUFSEGMENTINDEX&BUFSEG0‚EQU‡$EC‘TASKBUFSEG0BASEADDR&BUFSEG1‚EQU‡$F0‘TASKBUFSEG1BASEADDR&BUFSEG2‚EQU‡$F4‘TASKBUFSEG2BASEADDR&BUFSEG3‚EQU‡$F8‘TASKBUFSEG3BASEADDR!BUFFHSƒEQU‡$FC‘TASKBUFFHSDBADDR*"TVBUF„EQU‡8“TASKVECTORA(TASKBUF)/TVDBIDƒEQU‡30’TASKVECTORDBID(RELATIVETASK#)‰PAGE*<*‚THISSECTIONREADSIN.DBFILEANDSETSUPIN-CORETABLES.&*„CALLEDINRESPONSETO"ATTA"COMMAND0*„MUSTDETERMINEIFINITIALORSUBSEQUENTATTACH *ŽA4=TASKVECTORADDRESS"*ŽA5=FHSTASKWITHINLOADERBLOCK$*ŽA6=BASEADDRESSOFB(SECTION0)*ôBý50 .49%8-056=,E$SIMBO„MOVEM.LƒD0-D7/A1-A6,-(A7)¡1/81(‰LEA‡RCVBUF(A6),A0‡BUFFERFORRCVSAŽ3/82*‰MOVE.L„A0,-4(A0)‹INITBUFFERADDRESS‹3/820‰LEA‡FHSDB0(A6),A0‡FIRSTOFMANY.DBFHSES'†3/820‰MOVE.W„TVDBID(A4),D5‡TASKDBIDREQUIREDBYIODB‰MOVE.W„D5,D0CALCFHSOFFSET‰MULS†#38,D0ŽFHSLTH=38‰ADD.L…D0,A0A(THISTASKSFHS)‰TST.L…20(A0)ŽPRIOROPENING?"*******‚BNE‡NOOPENŽYES-EXIT”3/82*‰LEA‡6(A0),A2ŒBEGINCOPYINGATVOLUMENAME"‰MOVE.L„(A5)+,(A2)+‰COPYVOLUMEID ‰MOVE.W„(A5)+,(A2)+‰COPYUSERID ‰MOVE.L„(A5)+,(A2)+‰COPYCATALOG‰MOVE.L„(A5)+,(A2)+!‰MOVE.L„(A5)+,(A2)+‰COPYFILENAME‰MOVE.L„(A5)+,(A2)+0‰LEA‡GLOBAL(A6),A5‡COMMONBASEREGFORIODB†3/824‰MOVE.L„FHSOPEN-GLOBAL(A5),D0†ANYOPENTODATE?†3/82-‰BEQ.S…OPENERŽNO-THENSKIPCLOSEOFCURRENT!‰MOVE.L„A0,A1SAVEA(FHS)TOOPEN‰MOVE.L„D0,A0A(FHS)TOCLOSE)‰MOVE.W„#4,(A0)CLOSECOMMANDTOFHSBLOCK‰TRAP†#3’PERFORMCLOSE‰BNE‡IOERRFAILED$‰MOVE.L„A1,A0RESTOREA(FHS)TOOPEN&OPENERƒMOVE.W„#$40,(A0)‹ASSIGNCOMMAND‰TRAP†#3’PERFORMASSIGN‰BNE‡NOOPENŽNO.DBFILETOOPEN;‰MOVE.L„A0,FHSOPEN-GLOBAL(A5)ƒFLAGFHSASCURRENTOPEN‚3/82#‰MOVE.L„TVBUF(A4),A1ˆA(TASKBUFFER)/‰MOVE.L„A0,BUFFHS(A1)‡SAVEFHSDBTHISTASKŠ3/82‰CLR.L…D2’OBJECTMODULECODE?‰MOVE.L„OMNEXT-GLOBAL(A5),A2HIGHH2OMARKFORNEXTOMNTBL3/82:‰MOVE.L„A2,BUFOMN(A1)‡SAVEA(OMNTBLSTART)INTASKSBUFFER#‰CLR.L…D1’ORECREQUESTCODEISZERO%‰CLR.L…D6’REQUESTLR=0ISHEADERˆ3/82!‰BSR‡IODBREADHEADERRECORDŒ1/82‰BNE‡IOERRREADFAILED*‰MOVE.L„(A0),D0REVISION&INTEGRITYCODES@‰CMP.L…REVISION-GLOBAL(A5),D0VERIFYCORRECT.DBFILEMATCH3/82‰BNE‡VERERRŽOUTOFSYNC*6*ˆRECEIVESEGMENTATTRIBUTESTORELOCATEUSERSEGMENTS*0‰MOVE.L„#28,D3ŽOFFSETOFSEG3NAMEINHEADERREC#‰MOVE.L„A0,A3A(HEADERRECORD)Ž3/82/‰LEA‡RCVBLK-GLOBAL(A5),A0ƒRCVSAPARMBLOCK‹3/82‰MOVE.L„(A4),(A0)‹TASKNAME–3/82"‰MOVE.L„4(A4),4(A0)‹&SESSION“3/82CSEGLOOP‚MOVE.L„0(A3,D3),12(A0)…SEGMENTNAMEFROMHEADERRECORD3/82#‰MOVEQ.Lƒ#9,D0RCVSADIRECTIVE3/82 ‰TRAP†#1°3/82‰MOVE.W„#BUFSEG0-16,D0¤3/82*‰ADD.W…D3,D0INDEXINTOBUFSEG0,1,2,3†3/828‰MOVE.L„34(A0),0(A1,D0)…BEGLOGICALADDRTOBUFSEGXƒ3/82&‰SUBQ.L„#4,D3DIDALL4SEGMENTS?‹3/820‰CMP.W…#16,D3ŽOFFSETOFSEGMENT0NAMEINHEADER‰BGE‡SEGLOOPNOTDONEYET’3/82 9‰MOVE.W„HDRCNT(A3),D3‡OBJECTMODULECOUNTFROMHEADERREC/‰MOVE.W„D3,D7SAVEFORVERIFICATIONOFCHAINING‰ASL.W…#4,D3COUNT*16 ‰SUB.W…D7,D31‰SUB.W…D7,D3COUNT*14=SPACENEEDEDFOROMNTBL#‰MOVE.L„A2,A3CALCA(LOADMAP)TABLE‰ADD.W…D3,A3A(LOADMAP)%‰MOVE.L„A3,BUFMAP(A1)‡SAVEA(LOADMAP)7‰MOVE.L„A3,BUFMAPE(A1)†A(ENDLOADMAP)-CURRENTLYEMPTY+‰MOVE.L„#$FFFFFFFF,(A3)…ENDFLAGTOLOADMAP#‰MOVE.L„#1,D6LROFFIRSTORECŽ3/82*K*‚READOBJECTMODULEHEADER.‚COMPUTEANDSTORELROFCUR8 RENTOBJECTMODULE,>*„SYMBOLINDEXSTART(IFANY),ANDLINENUMBERSTART(IFANY).*4READO„BSR‡IODBREQUESTCODEOFZEROSTILLIND11/82‰BNE‡IOERRREADFAILED:‰MOVE.L„ONAME1(A0),0(A2,D2)FIRST4CHAROFNAMETOOMNTBL9‰MOVE.L„ONAME2(A0),4(A2,D2)LAST4CHAROFNAMETOOMNTBL-‰MOVE.W„D6,8(A2,D2)‰LROFORECTOOMNTBLŠ3/82*I*‚IFTHEREARENOSYMBOLSINTHISMODULE,INSERTAZEROFORTHELROFTHED*„INDEXRECORD.‚OTHERWISE,COMPUTETHELROFTHEINDEXRECORDASTHEF*„(NUMBEROFSYMBOLS+1)/16‚-->‚I.E.1LRPASTTHOSEOFSYMBOLRECORDS.*/‰MOVE.W„OSYMCNT(A0),D0†SYMBOLCOUNTTHISOBJMOD‰BNE.S…GRTR0SYMBOLSEXIST.‰CLR.L…10(A2,D2)‹NOSYMBOLSEXIST,USELROF00‰ADD.L…#1,D6UPDATENEXTLRFORTHISOBJMOD3/82!‰BRA.S…DOLINESGETLINENUMBERLRGRTR0„ADD.W…#31,D0ŽROUNDUP+1#‰ASR.W…#4,D0SRECS=(SYMS+15)/16‰ADD.W…D0,D6LROFIREC”3/82.‰MOVE.W„D6,10(A2,D2)ˆLROFIRECTOOMNTBLŠ3/82!‰ADD.W…#62,D0ŽROUNDUPSRECCOUNT*‰ASR.W…#6,D0IRECOFFSET=(SRECS+63)/64#‰ADD.W…D0,D6LROFLRECIFANY3/82*J*‚IFTHEREARENOLINENUMBERSINTHISMODULE,INSERTAZEROFORTHELROFG*„THELINE#RECORD.‚OTHERWISE,THELROFTHELINE#RECORDISONEPASTF*„THEHEADER/SYMBOL/INDEXRECORD(S).‚COMPUTETHELROFTHENEXTMODULEF*„HEADERAS(NUMBEROFLINE#'S+1)/64‚-->‚I.E.1LRPASTTHOSEOFLINE*„NUMBERRECORDS.*?DOLINES‚MOVE.W„OLBLCNT(A0),12(A2,D2)TEMPLROFLREC(MAYBE0)$‰BEQ.S…NOLINESOMNTBLENTRYCOMPLETE3‰MOVE.W„D6,12(A2,D2)ˆTRUELROFLRECTOOMNTBL…3/82"‰MOVE.W„OLBLCNT(A0),D0†LABELCOUNT‰ADD.W…#63,D0ŽROUNDUP'‰ASR.W…#6,D0LSECCOUNT=(LINES+63)/640‰ADD.W…D0,D6COMPUTEDLRNEXTOBJMODIFANY3/82CNOLINES‚CMP.W…ONEXTLR(A0),D6†VERIFYNEXTORECLRWITHCHAINLR3/82‰BEQ.S…DOMAPOK.7‰TST.W…ONEXTLR(A0)‰CHECKIFLASTOBJMOD(CHAINISZERO)‰BNE‡VERERRŽWRONGCHAINLR*F*‚BUILDMAPOFMODULE/SECTIONSTARTADDRESSES.‚INSERTENTRIESFOREACHD*„MODULEASITISPROCESSED,BUILDINGTHETABLEINASCENDINGADDRESS*„ORDER.*;DOMAP„MOVE.L„#12,D0ŽINITIALOFFSET-4FORSECTIONADDRESSES-NEXTSECTADD.L…#4,D0OFFSETNEXTSECTIONSLOT%‰CMP.L…#256,D0FINISHEDALLSECTIONS?0‰BGE.S…NEXTOYES-PROCEEDTONEXTOBJMODRECORD,‰MOVE.L„0(A0,D0),D3‰POSSIBLESECTIONADDRESS‰BMI‡NEXTSECTŒDUMMYENTRY/‰AND.L…#$00FFFFFF,D3‡MASKOFFSECTIONCODE‰4/827‰MOVE.L„BUFMAPE(A1),A3†LOADMAPENTRYSCANBEGINSATEND;MAPSLOT‚CMP.L…(A3),D3ADDRESS>EXISTINGSLOTENTRYINMAP?-‰BHI.S…INSERTŽYES-INSERTINASCENDINGORDER1‰BEQ‡MAPERRŽTWOSECTIONSWITHSAMERELOCATEDADDR/‰MOVE.L„(A3),MAPLTH(A3)…SHIFTDOWNTOMAKEROOM<‰MOVE.L„4(A3),MAPLTH+4(A3)‚ENTIRESLOTENTRYINLOADMAP‚3/82&‰SUB.L…#MAPLTH,A3ŠNEXTSLOTINLOADMAP+‰CMP.L…BUFMAP(A1),A3‡PASTSTARTOFLOADMAP?‰BHS‡MAPSLOTNOTYETAINSERTƒMOVE.L„D3,MAPLTH(A3)‡INSERTINSLOTABOVECURRENTPOSITION5‰ADD.L…#MAPLTH,BUFMAPE(A1)NEWENDOFLOADMAPADDRESS5‰MOVE.L„SEGEND-GLOBAL(A5),D3‚PREPAREFORCOMPARE‰3/82/‰CMP.L…BUFMAPE(A1),D3†PASTENDOFGTSEGEDAREA? ‰BLO.S…MAPFULLYES-FATALERROR2‰MOVE.L„D0,D3CONVERTOFFSETTOSECTION#OFENTRY ‰SUB.L…#16,D3&‰ASR.W…#2,D3SECTION#=(OFFSET-16)/47*ˆMOVE.B„MAPLTH(A3),MAPSEG+MAPLTH(A3)SEGMENT#TOSLOT,*ˆCLR.B…MAPLTH(A3)ŠPURIFY24BITMAPADDRESS0‰MOVE.B„0(A0,D0),MAPSEG+MAPLTH(A3)SEG#TOSLOT/‰MOVE.B„D3,MAPSECT+MAPLTH(A3)†SECTION#TOSLOT>‰MOVE.W„D2,MAPCODE+MAPLTH(A3)†OBJMODCODE=OFFSETINTOOMNTBL ‰BRA‡NEXTSECT*H*‚CHECKFORALLMODULESPROCESSED.‚ALSOVERIFYTHATLASTMODULEACTUALLY*„DOESPOINTBACKTOSTART.*4NEXTO„ADD.W…#14,D2ŽNEXTOBJMODCODE(OFFSETFROMA2)‰SUB.W…#1,D7LASTOBJMOD?‰BEQ.S…LASTOYES8‰MOVE.W„D6,ONEXTLR(A0)†HAVELEGALLRFORNEXTOREC?‚3/82‰BNE‡READOYES-GODOIT(‰BRA.S…VERERRŽBADCOUNTORMISSINGOLINK.LASTO„TST.W…ONEXTLR(A0)‰SHOULDHAVEZEROOLINK*‰BNE.S…VERERRŽLASTORECBYCOUNTHADOLINK;‰MOVE.W„D2,BUFOMHI(A1)†SAVELASTOMNTBLCODEFORWRAPAROUND5‰MOVE.L„BUFMAPE(A1),OMNEXT(A6)NEWHIGHH2OMARKŠ3/82 -‰MOVE.L„#3,D3REMAPALL4BUFSEGENTRIES„3/824FIXSEGS‚MOVE.L„BUFMAP(A1),A3‡TASK9 LOADMAPTABLEŒ3/82=NEXTMAP‚CMP.B…MAPSEG(A3),D3‡LOWESTSECTIONTHISSEGMENT?‚3/82‰BEQ.S…GOTSEGŽYES›3/82)‰ADD.L…#MAPLTH,A3ŠNEXTLOADMAPENTRYŒ3/820‰CMP.L…BUFMAPE(A1),A3†ENDOFLOADMAPTABLE?‰3/82‰BLO‡NEXTMAPNOTYET—3/82*‰BRA.S…NEXTSEGYES-SEGMENTNOTUSEDˆ3/82,GOTSEGƒMOVE.L„D3,D1CALCBUFSEGXOFFSET‹3/82/‰ASL.L…#2,D1SEG#TIMES4=BUFSEG0OFFSET3/82/‰ADD.W…#BUFSEG0,D1‰OFFSETINTOTASKBUFFER‡3/820‰MOVE.L„0(A1,D1),D0‰SEGMENTLOGICALADDRESS‡3/82(‰SUB.L…(A3),D0MINUSLOADMAPOFFSETŠ3/821‰MOVE.L„D0,0(A1,D1)‰ADJUSTEDSEGMENTADDRESS†3/829NEXTSEG‚DBF‡D3,FIXSEGSŠLOOP4EACHSEGMENT(3,2,1,0)3/82 NOOPENƒMOVEM.Lƒ(A7)+,D0-D7/A1-A6‰RTS*:*‚.DBFILEPROCESSINGERROR.‚CAUSESTERMINATIONOFPROGRAM*>MAPFULL‚MOVE.L„#128,D7OUTOFGTSEGMEMORYFOROMNTBL+MAP3/82‰BRA.S…COMPLAIN=MAPERRƒMOVE.L„#132,D7DUPLICATESECTIONADDRESSESINMAP3/82‰BRA.S…COMPLAIN1IOERR„MOVE.L„#136,D7OPENORCLOSEFHSERROR‡3/82%‰BRA.S…COMPLAINŒINDEXTOMSGADRIND7/VERERRƒMOVE.L„#140,D7DBFILEFORMATERRORŠ3/82-COMPLAINBSR‡MSG00PRINTFAILUREMESSAGE‰3/82ABORT„MOVE.L„#14,D0‰TRAP†#1’ABORT‰PAGE*C*‚CALC_ADDRESS(VarVALUE:Integer;‚VarSTRNG:STR80):Boolean;*I*‚THISISENTRYPOINTTOSIMBOSYMBOLPROCESSOR.‚UPONENTRYTOSIMBO,THE*„STACKMUSTLOOKLIKETHIS:*$*„A7--->RETURNADDRESS‚(4BYTES)*ŒSTRINGADDRESS‚(4BYTES)*ŒVALUEADDRESSƒ(4BYTES)*ŒSUCCESSFLAG„(1BYTE‚)*7*‚ONEXITFROMSIMBO,THESTACKSHOULDLOOKLIKETHIS:*!*„A7--->SUCCESSFLAG„(1BYTE‚)*I*‚NOTE:INTEGRITYOFADDRESSREGISTERSA3,A5,ANDA6MUSTBEPRESERVED!*œA5--->GLOBALINDATAAREA3CALC_ADDMOVEM.LƒA3/A5/A6,-(A7)‹SAVEREGISTERS‹1/82)‰MOVE.L„16(A7),A1‹GETSTRINGADDRESSŒ1/82,‰CLR.B…24(A7)ŽPRESETTONOSYMBOLMATCH…1/82*F*‚DETERMINELENGTHOFINPUTSTRING.‚FIRSTBLANKCHARTERMINATESSTRING*‰CLR.L…D1’CLEARCHARCOUNTER'NXTCH„CMP.B…#'',(A1,D1)ˆCHAR=SPACE? ‰BEQ.S…ENDSTRŽYES,ENDOFSTRING'‰ADD.B…#1,D1NO,INCREMENTCHARCOUNTER ‰BRA.S…NXTCH***‚SETUPFORSEARCHOFOBJECTMODULETABLE*FENDSTRƒMOVE.L„FORTASK-GLOBAL(A5),A4FOREGROUNDTASKSVECTORTABLE3/820‰TST.W…CURTCNT-GLOBAL(A5)‚ANYTASKSACTIVE?3/824‰BEQ‡NOTFOUNDŒNOSYMBOLSALLOWEDIFNOFOREGRND3/821‰MOVE.L„TVBUF(A4),A6ˆTASKSBUFFER„(USUALLYINA1)'‰MOVE.L„BUFOMN(A6),D0‡TASKSOMNTBLADDR)‰BEQ‡NOTFOUNDŒNODBSYMBOLFILETHISTASK-‰MOVE.L„D0,A2THISISREALLYWHEREITBELONGS!‰CLR.L…D0’RESETCHARACTERPOINTER-‰CLR.L…D3’RESETFLAGTOUNQUALIFIEDREFERENCE‰CLR.L…D2’RESETMODNAMECODE3‰MOVE.W„BUFCURO(A6),D2†USECURRENTOBJMODCODE‡9/836‰MOVE.B„BUFCURS(A6),D3†USECURRENTOBJMODSECTION„9/830‰LEA‡MODNAME-GLOBAL(A5),A3†BLANKFILLNAMES‡3/82‰MOVE.L„#'„',(A3)Š(SYMBOL‰MOVE.L„(A3),4(A3)”AND‰MOVE.L„(A3),8(A3)˜MODULE)‰MOVE.L„(A3),12(A3)*.*‚CHECKINPUTSTRINGFORMODULENAMEREFERENCE*0SCANINƒCMP.B…#':',(A1,D0)ˆMODULENAMEREFERENCE?‰BEQ.S…QUALIFIDŒYES%‰ADD.B…#1,D0NOTYET,CHECKNEXTCHAR)‰CMP.B…D0,D1ENTIREINPUTSTRINGSCANNED?‰BGT‡SCANINŽNO,CONTINUE‰BRA.S…HAVEOBJ*H*‚INPUTSTRINGCONTAINSEXPLICITOBJECTMODULEQUALIFICATION.‚SETMODULEG*„NAMEQUALIFIERFLAGANDCOPYITTOMODULENAMESTRING.‚ALSOCHECKFOR'*„EXPLICITSECTIONNUMBERQUALIFICATION*QUALIFIDMOVE.L„D0,D7SAVEA(:)$*9/83ƒOR.B†#1,D3SETQUALIFIEDFLAG-MOVENAMEADD.B…#1,D7INCREMENTSTRINGPOINTER!‰CMP.B…D7,D1ENDOFINPUTSTRING?‰BLE.S…MOVEDNAMŒYES,QUIT-‰CMP.B…#':',(A1,D7)ˆNO,SECTION#SPECIFIED?%‰BEQ.S…FULLQUALŒYES,EVALUATESECTION<‰MOVE.B„(A1,D7),(A3)+‡NO,COPYMODNAMECHARTOMODULESTRING‰BRA‡MOVENAMEŒCONTINUE*C*‚IFSECTIONNUMBERENTERED,SETFLAGANDCONVERTFROMASCIITOHEX*4FULLQUALBSET†#15,D3ŽSETSECTIONQUALIFIERFLAG„9/83/‰BSR‡ASC2HEXCONVERTSECTIONNUMBERTOHEX1/82,‰MOVE.B„D6,D3OVERRIDEWHEREAMISECTION…9/83*D*‚CHECKMODULENAMETABLEFORAMATCH.‚IFFOUND,SAVEITSCODEIND2*%MOVEDNAMCLR.L…D2’GETINDEXTOOMNTBL5‰MOVE.L„D0,D1NE9 WSYMBOLLENGTHEXCLUDES:OBJMOD:SECT=‰MOVEM.LƒMODNAME-GLOBAL(A5),D4/D5ƒGETMODULENAMESTRING3/82>LOOKUPƒCMP.L…(A2,D2),D4ŠFIRST4CHARSMATCHMODNAMEINTABLE?'‰BNE.S…NEXTMODNO,TRYNEXTMODULENAME,‰CMP.L…4(A2,D2),D5‰YES,LAST4CHARSMATCH?!‰BEQ.S…HAVEOBJYES,EXACTMATCH!*3NEXTMOD‚ADD.L…#14,D2ŽINCREMENTOFFSETTONEXTENTRY5‰CMP.W…BUFOMHI(A6),D2†ATENDOFMODULENAMEENTRIES?+‰BLT.S…LOOKUPŽNO,TRYNEXTMODULENAME†3/82,‰BRA‡NOTFOUNDŒYES,PASTTHEENDOFTHETABLE*/*‚AREWELOOKINGFORALINENUMBEREVALUATION?*HAVEOBJ‚CLR.L…D0#‰MOVE.W„TVDBID(A4),D5‡DBIDFORIODB!‰CMP.B…#'#',(A1)‹LINE#REFERENCE?&‰BNE.S…NOLINEŽNO,LOOKINGFORSYMBOL?*K*‚THISSECTIONDETERMINESADDRESSVALUEOFLINENUMBER.‚ONLYCURRENTMODULE5*„(THEONERESOLVEDBYLINENUMBERENTRY)ISCHECKED.*!‰CLR.L…D7’YES,SETLINE#POINTER'‰BSR‡ASC2HEXCONVERTLINE#TOHEX‰1/82‰TST.L…D6’POSITIVELINE#?%‰BLE‡NOTFOUNDŒREJECTILLEGALLINE#'S/*******‚MOVE.L„D6,A5RESULTTOA5FORIODB‰3/82'‰MOVE.L„#-1,D1ŽYES,LINE#REQUESTCODE#‰BSR‡IODBGETLINE#REFERENCEŠ1/82‰BNE‡NOTFOUNDŒNOTFOUND)‰MOVE.L„(A0),D6SAVELINE#ADDRESSIND6 ‰BRA.S…FOUND*5*‚NOTLOOKINGFORLINENUMBER.‚LOOKINGFORASYMBOL?*+NOLINEƒCMP.B…#':',(A1)‹WASTHEREASYMBOL?2‰BEQ.S…NOSYMNO,LOOKINGFORMODULEBASEADDRESS!*G*‚THISSECTIONRESOLVESSYMBOLASTOMODULE:SECT.‚FIRST,COPYSYMBOLTO*„SYMBOLNAMESTRING*;‰LEA‡SYMNAME-GLOBAL(A5),A3‚YES,PREPARETOMOVESYMBOLƒ3/82?COPYING‚MOVE.B„(A1,D0),(A3)+‡EFFECTIVELYBLANKPADSYMBOLRIGHT(‰ADD.B…#1,D0INCREMENTCHARACTERCOUNTER‰CMP.B…#8,D0MAXOF8CHARS?‰BGE.S…HAVESYMYES,FINISHED3‰CMP.B…D0,D1NO,COPIEDUPTOCOLONORTOTALTYPED?‰BGT‡COPYINGNO,CONTINUE*;*‚CHECKMODULEFORSYMBOL.‚WHEREAMIMODULEIFNOTSPECIFIED*3HAVESYM‚EQU‡*“YES,D1MUSTBE>0FORSYMBOLREQUEST0‰BSR‡IODBSEEIFSYMBOLISINTHISMODULE(ONLY) ‰BNE.S…NOTFOUNNOTFOUND(ERROR)/*9/83ƒTST.B…D3’EXPLICITMODULENAMEPROVIDED?.*9/83ƒBNE.S…NOTFOUNDŒYES,SYMBOLWASN'TTHEREI*9/83ƒCMP.B…#1,PRSE_MD-GLOBAL(A5)NO,PARSEMODE=1?(ASSEMBLING)3/82&*9/83ƒBEQ.S…NOTFOUNDŒYES,STOPSEARCH-*9/83ƒADD.L…#14,D2ŽNO,TRYNEXTOMNTBLENTRY*6*TRYMODƒCMP.W…BUFCURO(A6),D2†HAVEWECOMEFULLCYCLE?7*9/83ƒBEQ.S…NOTFOUNDŒYES,SYMBOLNOWHERETOBEFOUND!-*9/83ƒCMP.W…BUFOMHI(A6),D2†WRAPAROUNDTIME?9*9/83ƒBLT‡HAVESYMNO,SEARCHTHISMODULEFORSYMBOL3/82+*9/83ƒCLR.L…D2’YES,STARTATTOPOFOMNTBL2*9/83ƒBRA‡TRYMODBUTFIRSTCHECKIFWEBEGANHERE*I*‚IFSYMBOLFOUND,GETITSRELATIVEOFFSET.‚IFSYMBOLISNOTALABEL,THE-*„RELATIVEVALUEFIELDISITSABSOLUTEVALUE.*GETBASE‚CLR.L…D62‰MOVE.L„12(A0),D0‹GETSYMBOLABSOLUTEOFFSETVALUE#‰CMP.B…#16,11(A0)ŠABSOLUTESECTION?0‰BGE.S…ADDOFFŽOFFSETINCLUDESABSOLUTEBASEADDR,*7/83ƒCMP.B…#'L',10(A0)‰ISSYMBOLALABEL?&*7/83ƒBNE.S…ADDOFFŽNO,ABSOLUTEVALUE9‰MOVE.B„11(A0),D6‹YES,GETSECTIONASSOCIATEDWITHSYMBOL!‰BRA.S…NOSECTŽCOMPUTEBASEOFFSET*I*‚COMEHERETOEVALUATE':MODULE[:SECTION]'.‚BOTHMODULECODEANDSECTIONF*„MUSTMATCH.‚IFNOSECTIONWASEXPLICITLYSPECIFIED,USETHEONETHATG*„THEPCISCURRENTLYPOINTINGTO.‚ONENTRYTO'NOSYM',D0MUSTEQUAL0**NOSYM„BTST†#15,D3ŽSECTIONQUALIFIER?‹9/83)‰BNE.S…NOSECTŽYES,USECALCULATEDSECTION6‰MOVE.B„BUFCURS(A6),D6†NO,GETCURRENTSECTIONFROMPC*J*‚THISSECTIONWILLSCANTHEMAPTABLEFORASPECIFIEDMODULEANDSECTION.G*„D1SETACCORDINGTOSUCCESSOFOPERATION.‚A3WILLPOINTTOADDRESSOF*„BASEVALUEOF:MODULE:SECT.*@NOSECTƒMOVEM.LƒBUFMAP(A6),A3-A4„GETLOADMAPSTART&ENDADDRESS*NXTENTƒCMP.W…6(A3),D2ŒMODULECODESEQUAL?"‰BEQ.S…CODEHITYES,CHECKSECTIONS2MOVEPTR‚ADD.L…#MAPLTH,A3ŠNO,INCREMENTMAPPOINTER"‰CMPA.L„A3,A4ATENDOFLOADMAP?‰BGT‡NXTENTŽNO,CONTINUE1NOTFOUN‚BRA.S…NOTFOUNDŒYES,MODULE:SECTNOTFOUND*9*‚IFMODULECODESMATCH,CHECKMODULESECTIONFORAMATCH*2CODEHIT‚CMP.B…MAPSECT(A3),D6†SECTIONSEQUAL?Ž3/82+: ‰BNE‡MOVEPTRNO,TRYNEXTENTRYINLOADMAP ‰CLR.L…D6:‰MOVE.B„MAPSEG(A3),D6‡SEGMENTCONTAININGTHISSECTION3/821‰ASL.B…#2,D6SEG#*4ISINDEXINTOBUFSEG03/829‰MOVE.B„D6,BUFSEGI(A6)†SAVESEGINDEXINTASKBUFFER3/82,‰ADD.W…#BUFSEG0,D6‰OFFSETOFBASEADDRSŠ3/821‰MOVE.L„0(A6,D6),D6‰SEGMENTLOWBASEADDRESS†3/82&‰CMP.B…#':',(A1)‹SYMBOLPROVIDED?Ž9/83/‰BNE.S…ADDOFFŽYES-MODULEOFFSETINCLUDED‚9/830‰ADD.L…(A3),D6ADDMODULEOFFSETINSEGMENT‚3/827ADDOFFƒADD.L…D0,D6ADDOFFSETOFSYMBOLINSECTION3/82*>*‚SETSUCCESSFLAGANDSAVEVALUE(IFFOUND).‚RETURNTOCALLER**FOUND„OR.B†#1,24(A7)‹SETSUCCESSFLAGŽ1/827NOTFOUNDMOVEM.Lƒ(A7)+,A3/A5/A6†RESTORESAVEDREGSŒ1/827‰MOVEM.Lƒ(A7)+,A0-A2‰GETRETURN,STRING&VALUEPARMS1/82 ‰MOVE.L„D6,(A2)STOREVALUE“1/82‰JMP‡(A0)RETURN*L*‚THISPROCEDURECONVERTSANASCIIDECIMALSTRINGTOHEXADECIMALEQUIVALENT.*„VALUEISRETURNEDIND6*1ASC2HEX‚ADD.B…#1,D7UPDATESTRINGPOINTERFOR':'‰CLR.L…D6’CLEARSUM'ASCNXTƒMULS†#10,D6ŽMULTIPLYSUMBYBASE%‰MOVE.B„(A1,D7),D5ŠGETNEXTCHARACTER‰AND.L…#$0F,D5MASKASCIIBIAS‰ADD.L…D5,D6ADDDIGITTOSUM‰ADD.B…#1,D7POINTTONEXTCHAR‰CMP.B…D7,D1DONE?‰BGT.S…ASCNXTŽNO,CONTINUE‰RTS›YES‰PAGE*@*‚THISISMMENTRYPOINTFORRESOLVINGANABSOLUTEADDRESSVALUE'*ˆONENTRY:D7=ADDRESSTOBERESOLVED*’D0=0FORWHEREAMIFUNCTION&*œWHICHRETURNSMODULENAMEINSYMNAME*¦ANDD3=SECTION#&D0=OFFSET-*’D0=1FORNEARESTSYMBOL+[OFFSET]FUNCTION&*œWHICHRETURNSSYMBOLNAMEINSYMNAME*¦ANDD3=SECTION#&D0=OFFSET*6RESOLVE‚MOVEM.LƒD1/D2/D4-D7/A0-A6,-(A7)ŠSAVEREGSˆ1/823‰MOVE.L„FORTASK(A6),A4†FOREGROUNDTASKSVECTOR‡3/82&‰MOVE.L„TVBUF(A4),A3ˆTASKSBUFFER’3/82:‰LEA‡SYMNAME(A6),A1†GETADDRESSOFRESOLUTIONSTORAGE3/82)‰MOVE.L„#'„',(A1)ˆCLEARFIRST4LOCATIONS)‰MOVE.L„(A1),4(A1)ŠCLEARLAST4LOCATIONS4‰MOVE.L„A1,A0WHENNODBSYMWILLCOPYSYMNAMETOSELF<‰MOVE.L„BUFOMN(A3),D2‡GETADDRESSOFOBJECTMODULETABLE3/82'‰BEQ.S…UNRSLVDNODBFILEFORTHISTASK(‰MOVE.L„D2,A2IODBNEEDSA(OMNTBL)INA2 ‰CLR.L…D25‰MOVE.B„BUFSEGI(A3),D2†GETCURRENTSEGMENTINDEX…3/826‰ADD.W…#BUFSEG0,D2‰OFFSETINTOTASKBUFFERSEGTBL3/825‰SUB.L…0(A3,D2),D7‰RELOCATENONZEROBASESEGMENT3/82-‰TST.W…D0’D0=1FORNEARESTSYMBOLTOABSADDR5‰BEQ.S…WHEREAMIŒD0=0FORMODULENAME+SECTOFABSADDR6‰MOVE.W„BUFCURO(A3),D2†GETMODULECODEFOR'IODB'„3/827‰MOVE.B„BUFCURS(A3),D3†GETSECTIONCODEFOR'IODB'ƒ3/82+‰MOVE.L„#-2,D1ŽCODEFORSCANOFALLSYMBOLS#‰MOVE.W„TVDBID(A4),D5‡DBIDFORIODB-‰LEA‡GLOBAL(A6),A5‡IODBREFERSTOGLOBAL‰3/82$‰BSR‡IODBSCANFORSYMBOLMATCH‰1/82‰BEQ.S…RESOLVEDŒFOUNDITCarriageReturnŒ}5‚REGNUM‡=18;Œ{NumberofRegistersƒ(0..REGNUM)…}=‚DELIM_LEN„=‚4;Œ{TheNumberOfDifferentOptionsAvaliable}) {AsSpecifiedInFunctionCHECK_DELIM†} {‚CommandCodes‚...‚}‚AS_CODE=‚1;‚{AddressStopƒ}‚MA_CODE=‚2;‚{MAcroŠ}‚SD_CODE=‚3;‚{SymbolDefine‚}1‚IT_CODE=‚4;‚{InsideTraceƒ}„{NOWUNASSIGNED}D‚ME_CODE=‚5;‚{OutsideTrace‚}„{REASSIGNEDTOME_CODEMACROEDIT}‚BR_CODE=‚6;‚{BReakpoint…} ‚DF_CODE=‚7;‚{DisplayFormat}I‚MM_CODE=‚8;‚{MemoryModify‚}{ParameterOverlapRequiresExtraCode}K‚MD_CODE=10;‚{MemoryDisplay}{ParameterOverlapRequiresExtraCode}‚HE_CODE=12;‚{HELP‹}‚GO_CODE=13;‚{GO}ÊMR'V Z^bfjnr"vz~!‚ † ŠŽ’–šž¢¦ª®²!¶º¾Â‚BF_CODE=14;‚{BlockFill…}‚DC_CODE=15;‚{DataConvertƒ}‚DU_CODE=16;‚{DUmp‹}‚DE_CODE=17;‚{DEfaults‡}‚BM_CODE=18;‚{BlockMove…}‚FR_CODE=19;‚{FileRead†}‚FS_CODE=20;‚{FileSave†}‚BS_CODE=21;‚{BlockSearchƒ}!‚CR_CODE=22;‚{CommandRepeat}‚QU_CODE=23;‚{QUIT‹}G‚MS_CODE=24;‚{MemorySet…}{ParameterOverlapRequiresExtraCode}‚TR_CODE=26;‚{TRaceŠ}‚AT_CODE=27;‚{ATTAch‰}‚TM_CODE=28;‚{TERMinate†}‚DT_CODE=29;‚{DETAch‰}‚EV_CODE=30;‚{EVENtŠ}‚MK_CODE=31;‚{MASK‹}‚SR_CODE=32;‚{STARtŠ}‚SP_CODE=33;‚{STOP‹}C‚ST_CODE=34;‚{STATus‰}{ParameterOverlapRequiresExtraCode}‚TS_CODE=36;‚{TASK‹}‚WT_CODE=37;‚{WAIT‹}‚LD_CODE=38;‚{LOAD‚(Task)ƒ}‚OF_CODE=39;‚{OFfset‰} {‚TypeCodes‚...‚}‚HEX_TYPE=‚1;‚DEC_TYPE=‚2;‚OCT_TYPE=‚3;‚BIN_TYPE=‚4;‚CHR_TYPE=‚5;‚FLT_TYPE=‚6;‚INT_TYPE=‚7;‚BOL_TYPE=‚8;‚PCK_TYPE=‚9;‚DIS_TYPE=10; {‚LengthCodes‚...‚}‚BYTE_LEN=1;‚WORD_LEN=2;‚LNGW_LEN=4; {‚DeviceCodes‚...‚}‚CONS_DEV=6;‚FILE_DEV=2;‚PRNT_DEV=1; Type +‚BYTE…=-128..127;{8-BitIntegerTYPE„}0‚WORD…=-32768..32767;™{16-BitIntegerTYPEƒ}H‚STR†=PackedArray[1..BUFLENLIMIT]OfChar;‚{CharacterBufferTYPE}6‚STR4…=PackedArray[1..4]OfChar;Œ{CommandTYPEŠ}?‚STR8…=PackedArray[1..SYMLEN]OFChar;‡{SymbolNameTYPE†}E‚REG_BUF‚=Array[0..REGNUM]OfInteger;‰{BlockOfUserRegisters}#‚{‚REG_BUFIsArrangedAs; Follows:Eˆ+----+----+-----+----+----+----+----+-----+----+----+----+----+----+I‚Regƒ|D0|D1|...|D6|D7|A0|A1|...|A6|A7|PC|SR|XM|Eˆ+----+----+-----+----+----+----+----+-----+----+----+----+----+----++‚Index„0„1ƒ...„6„7„8„9ƒ...ƒ14ƒ15ƒ16ƒ17ƒ18„} ‚SYM_CMD†=Record-“CMD_LINE:STRŽ{InputStringToBeParsed}‘End;‚REG_PTR†=Record&“SAV_REGS:REG_BUFŠ{RegisterBlockŒ}‘End; Var /‚STATUS_BLOCK:Record˜{ƒPARAMETERSFROMMAIN…}5“INPUT_STRING:@SYM_CMD;„{PointertoInputString„}4“REGISTERS„:@REG_PTR;„{PointerToRegisterBlock‚}3“OFREGS‡:Array[0..7]OfInteger;ƒ{OFfsetRegs}3“OFREGL‡:Array[0..7]OfInteger;ƒ{OFfsetRegs}'“MAXTCNT†:WORD;ˆ{MaximumTaskCount‰}'“CURTCNT†:WORD;ˆ{CurrentTaskCount‰}#“TASKBUF†:Integer;…{TaskBuffer}/“OMNTBL‡:Integer;…{ObjectModuleNameTableƒ}'“SEGEND‡:Integer;…{TaskSegmentEnd‹}'“FORTASK†:Integer;…{ForegroundTaskŒ}"“PARSE_MODEƒ:BYTE;ˆ{ParseMode‘}&“TOKENˆ:BYTE;ˆ{ParsedCommandCodeˆ},“PARM_COUNTƒ:BYTE;ˆ{NumberOfParameters‡})“ERR_NUMBERƒ:BYTE;ˆ{ParserErrorCodeŠ}2“PARM_BLOCKƒ:Array[1..16]OfIntegerƒ{Return†}‘End;©{Parameters‚}‚DEF_BLOCK„:Record$“BASE,TYPES,LENGTH,DEVICE:BYTE;$“MA_LIST,ECHO,BR_ENABLE„:Boolean;(“OUTFILE•:PackedArray[1..30]OfChar‘End;)‚MAC_BUF†:STR;{MACROParameterBlock}.‚INDEXˆ:Integer;‹{MACROInvocationPointer}0‚IN_MACRO…:Integer;‹{LineOfExecutingMACROŽ}0‚ENDMACRO…:Integer;‹{MACROTableEndPointerŽ}6‚ENDSYMB†:Integer;‹{LocalSymbolTableEndPointer‡}-‚TABLEˆ:PackedArray[1..ENDTABLE]OfChar;8‚TABLE_PTR„:Integer;‹{PointerIntoMACRO/LocalTable‡}<‚SAVECOUNT„:Integer;‹{SavedCountForMACRO'CR'Commandƒ}0‚IN_CRˆ:Integer;‹{FlagOfMACRO'CR'Command‹} '‚MAC_NAME‰:STR8;‹{MACRONameString”}.‚NUMBER_VALUE…:Integer;ˆ{NumberEvaluation”}-‚ADDR_VALUE‡:Integer;ˆ{AddressEvaluation“}/‚EXP_VALUEˆ:Integer;ˆ{ExpressionEvaluation}5‚EA_VALUE‰:Integer;ˆ{EffectiveAddressEvaluation‰}5‚REG_VALUEˆ:Integer;ˆ{19-BitRegistersEvaluationŠ}+‚SYM_VALUEˆ:Integer;ˆ{SymbolEvaluation”}-‚COUNTŒ:Integer;ˆ{TRace/BreakpointCountsŽ}?‚I,J,K,L‡:Integer;ˆ{MiscellaneousLoopControlVariables}5‚INPUT_BUFFER…:STR;Œ{ProgramCopyofInputString‰}.‚NXT_STRING‡:STR;Œ{SymbolStringTemporaryŽ}-‚SYM_BUFR‰:STR;Œ{SymbolEvaluationString}9‚LINE_NUMBER†:STR4;‹{NumbertoprintwithMacrolines…}.‚MACROŒ:Boolean;ˆ{FlagOfMACROInvocation}<‚DEF_BASE‰:Boolean;ˆ{DefaultInputBaseDesignationFlag‚}=‚NXTSTRNGLEN†:BYTE;‹{LengthOfSymbolString(NXT_STRING)}?‚PTR_INPUT_BUFFER:BYTE;‹{PointerToInputStringForParse„}9‚NUMBER_PTR‡:BYTE;‹{PointerToValidNumberinString„}=‚PTR_PARM_BLOCKƒ:BYTE;‹{PointerToReturnParameterBlock„}9‚PTR_MAC_BUF†:BYTE;‹{PointerToMACROParameterBlock…}+‚DELIM_CHAR‡:Char;‹{DelimeterCharacter’}4‚EOL_FLAG‰:Boolean;ˆ{END-OF-LINEFlagForParserŠ}9‚SAV_EOLŠ:Boolean;ˆ{SavedEND-OF-LINEFlagForParser„}5‚CHECK_CHAR‡:Char;‹{CheckCharacterForDelimeterˆ})‚NEG_FLAG‰:Boolean;ˆ{UnaryMinusFlag•}2‚CHECKŒ:Boolean;ˆ{IndividualOptionCheckFlag‰}1‚FOUNDŒ:Boolean;ˆ{AnyValidOptionFoundFlagŠ}5‚NEXT_CHARˆ:Char;‹{NextCharacterinINPUT_BUFFER‡}8‚NO_FLAGŠ:Boolean;ˆ{SetByParserToIndicatea"NO"…}=‚EVAL_OUTDEV†:BYTE;‹{ContainsTheSpecifiedOutputDEVICE}6‚EVAL_LENGTH†:BYTE;‹{ContainsTheSpecifiedLENGTHˆ}2‚EVAL_TYPEˆ:BYTE;‹{ContainsTheSpecifiedTYPEŠ}.‚TEMP_PTR‰:BYTE;‹{CopyOfPTR_INPUT_BUFFER}0‚TEMP_CHARˆ:Char;‹{TemporaryCharacterValueŒ}%‚ERRORŒ:BYTE;‹{ParsingErrorCode“}%‚CODE:BYTE;‹{ParsedCommandCode’};‚NUM_PARMSˆ:BYTE;‹{NumberParametersParsedForCommand}C‚DELIM_FLAG‡:Array[1..DELIM_LEN]OfBoolean;„{DelimeterFlags}9‚COMMANDŠ:Array[1..NUM_CMD]OfSTR4;‰{CommandNamesƒ}:‚CMD_CODE‰:Array[1..NUM_CMD]OfBYTE;‰{CommandCodesƒ} IFunctionCALC_ADDRESS(Va; rVALUE:Integer;VarSTRNG:STR):Boolean;‚Forward;JProcedureFORCE(VarPOINT:Char;‚LENGTH:BYTE;‚CRLF:Boolean);‚Forward;AProcedureINT_CH(VarVALUE:Integer;VarPOINT:Char);‚Forward;AProcedureCH_INT(VarPOINT:Char;VarVALUE:Integer);‚Forward;ProcedureGET_INP;‚Forward;AProcedureHEXASCII(VarPOINT:Char;‚VarPOINT1:Char);‚Forward;;ProcedureSTORE_BYTE(VarVALUE:Integer;‚VarPOINT:Char; ­VarLENGTH:Integer);‚Forward; Procedure PARSE_STRING; Label‚FIN;{$E}N{*******************************************************************************É****™ParserRoutines¡****É**O *****************************************************************************} ‚FunctionGETNXTCHAR:Char;?„{‚FunctionGETNXTCHARreturnsthenextcharacterpointedtobyC‡PTR_INPUT_BUFFERfromINPUT_BUFFER;IfanEND-OF-LINEcharacterisB‡reachedorifPTR_INPUT_BUFFERindicatestheendofINPUT_BUFFER,?‡EOL_FLAGissetto"True";Otherwise,itissetto"False".‚If7‡EOL_FLAGis"False",PTR_INPUT_BUFFERisincremented’}‚Begin„EOL_FLAG:=False;*„If(PTR_INPUT_BUFFER>=BUFLENLIMIT)Then„Begin%†EOL_FLAG:=True;‚GETNXTCHAR:=CHR(EOL) „EndElse„Begin.†GETNXTCHAR:=INPUT_BUFFER[PTR_INPUT_BUFFER];E†If(INPUT_BUFFER[PTR_INPUT_BUFFER]=CHR(EOL))ThenEOL_FLAG:=True*ˆElsePTR_INPUT_BUFFER:=PTR_INPUT_BUFFER+1„End ‚End;{OfFunctionGETNXTCHAR} O{*****************************************************************************} ‚ProcedureSCAN_BLANKS;>„{‚ProcedureSCAN_BLANKSoperatesonINPUT_BUFFER;Itadvances0‡PTR_INPUT_BUFFERpastanyblanksencountered.}‚Begin0„Repeat‚Until(GETNXTCHAR<>'')Or(EOL_FLAG);<„If(NotEOL_FLAG)ThenPTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1"‚End;{OfProcedureSCAN_BLANKS} O{*****************************************************************************} ‚ProcedureINIT_STRING;B„{Ensurethatnewstringhasaandscanoffleadingblanks}‚Begin„ForI:=1ToBUFLENLIMITDo=†INPUT_BUFFER[I]:=STATUS_BLOCK.INPUT_STRING@.CMD_LINE[I];J„ForI:=BUFLENLIMIT-1Downto1Do‚If(INPUT_BUFFER[I]<>'')Then‚Exit;@„INPUT_BUFFER[I+1]:=Chr(EOL);‚PTR_INPUT_BUFFER:=1;‚SCAN_BLANKS"‚End;…{OfProcedureINIT_STRING} O{*****************************************************************************} 6‚FunctionCHECK_DELIM(CHECK_CHAR:Char):Boolean;D‚{‚The"DelimeterCheckRoutine"willrequirethatDELIM_FLAGbesetD…foranyofthefollowingcheckstobeperformedpriortoitscall: ,…*****GROUP****************************VALUE …**1.Colon 1…**2.Semicolonœ2…**3.MathOperator˜3…**4.AnyDelimeter˜4 B…Wheneveradelimeterisencounteredfromtherequestedgroup,theI…"DelimeterCheckRoutine"setsDELIM_CHARtotheencountereddelimeter‚}‚Var6„DELIMTR:Boolean;“{ValidDelimeterCharacterFlag} ‚Label„FIN; ‚Begin"„CHECK_DELIM:=True;‚DELIMTR:=True;,„If(CHECK_CHAR=DELIM_CHAR)Then‚GoToFIN;„IfDELIM_FLAG[1]Then%†If(CHECK_CHAR=':')Then‚GoToFIN;„IfDELIM_FLAG[2]Then%†If(CHECK_CHAR=';')Then‚GoToFIN;„IfDELIM_FLAG[3]Then6†If(CHECK_CHARIn['*','/','+','-'])Then‚GoToFIN;„IfDELIM_FLAG[4]Then,†If(CHECK_CHARIn['(','+',',','-'])Then ˆGoToFIN;$„CHECK_DELIM:=False;‚DELIMTR:=False;„FIN:)„If(DELIMTR)Then‚DELIM_CHAR:=CHECK_CHAR!‚End;{OfFunctionCHECK_DELIM} O{*****************************************************************************} 3‚FunctionCHAR_CHK(CHECK_CHAR:CHAR):Boolean;?„{‚FunctionCHAR_CHKchecksforthedelimetedendofastring‚}‚BeginJ„CHAR_CHK:=((CHECK_CHAR='')Or(EOL_FLAG)Or(CHECK_DELIM(CHECK_CHAR)))‚End;‚{OfFunctionCHAR_CHK} O{*****************************************************************************} ‚FunctionBLNKS_CHK:Boolean;F„{‚BLNKS_CHKiscalledwheneverblanksaretobescannedoffsuchthatE‡onlyadelimeter,asspecified,oranEOLindicationshouldfollowƒ}‚BeginB< „SCAN_BLANKS;‚BLNKS_CHK:=((CHECK_DELIM(GETNXTCHAR))Or(EOL_FLAG))‚End;‚{OfFunctionBLNKS_CHK} O{*****************************************************************************} (‚ProcedureGET_STRING(VarSTRNG:STR4);‚Begin „STRNG:='„';„ForI:=1To4Do„Begin.†If(NEXT_CHAR='')Or(EOL_FLAG)Then‚Exit;-†STRNG[I]:=NEXT_CHAR;‚NEXT_CHAR:=GETNXTCHAR„End‚End; O{*****************************************************************************} =‚FunctionEVAL_CMD(STRNG:STR4;‚VarTOKEN:BYTE):Boolean; ‚LabelƒRETRY;‚Begin‚RETRY: „TOKEN:=0;„ForK:=1ToNUM_CMDDo †If(STRNG<=COMMAND[K])Then†Begin:ˆIf(STRNG=COMMAND[K])Then‚TOKEN:=CMD_CODE[K];‚Exit†End;„If(TOKEN=0)Then*†If(STRNG='Qƒ')Or(STRNG='QU‚')Then$¦Begin‚STRNG:='QUIT';GOTORETRY‚EndA†Else‚If(STRNG='HE‚')Then‚Begin‚STRNG:='HELP';GOTORETRY‚End?†Else‚If(STRNG='Gƒ')Then‚Begin‚STRNG:='GO‚';GOTORETRY‚End?†Else‚If(STRNG='Tƒ')Then‚Begin‚STRNG:='TR‚';GOTORETRY‚End@†Else‚If(STRNG='Mƒ')Then‚Begin‚STRNG:='MM‚';GOTORETRY‚End;„EVAL_CMD:=(TOKEN<>0);‚End; O{*****************************************************************************} ‚ProcedureCMD_PARSER;K„{ThisprocedurechecksforandparsesoutavalidcommandfromthestringG†inINPUT_BUFFER.‚Ifavalidcommandisdetected,CODEissetaccordingH†tothecommand.‚Alsochecksthatatleastonespacefollowsthecommand†andanypossibleparamaters.¬}‚Var„CMD:STR4;‘{CommandText}‚Label„FIN; ‚Begin1„ERROR:=4;™{PresetToIndicateInvalidCommand}4„NO_FLAG:=False;“{IndicateNo"NO"optionPresent„}2„IfEOL_FLAGThen‚GoToFIN;‚NEXT_CHAR:=GETNXTCHAR;,„If(NEXT_CHAR='N')Thenž{"NO"Option?}%†If(GETNXTCHAR<>'O')Then‚GoToFIN5ˆElseBegin‚NO_FLAG:=True;‚NEXT_CHAR:=GETNXTCHAR‚End;„GET_STRING(CMD);„If(EVAL_CMD(CMD,CODE))Then(†If(NEXT_CHAR='')Or(EOL_FLAG)ThenˆIf(NO_FLAG)ThenˆBegin9ŠIf(CODEIn[BR_CODE,SD_CODE,MA_CODE])ThenERROR:=0ˆEndElse‚ERROR:=0; „SCAN_BLANKS;ƒFIN:!‚End;{OfProcedureCMD_PARSER} O{*****************************************************************************} '‚ProcedureSTORE_PARM(VALUE:Integer);B„{‚ThisprocedurestoresaparameterinPARM_BLOCKandupdatesthe1‡pointer,PTR_PARM_BLOCK,tothenextposition.“}‚Begin2„STATUS_BLOCK.PARM_BLOCK[PTR_PARM_BLOCK]:=VALUE;!„PTR_PARM_BLOCK:=PTR_PARM_BLOCK+1!‚End;‚{OfProcedureSTORE_PARM} O{*****************************************************************************} !‚FunctionGET_MAC_LINE:Boolean;K„{ThisfunctionreturnsthenextstoredmacrolinefromamacrodefinitionD†buffer.‚AmacrolineisstoredwithanEOLterminator.‚AsingleEOL>†characterasthenextlinedesignatestheendofthemacro.}‚Begin„SYM_BUFR:='ƒ';‚K:=3;„Repeat†K:=K-1;†If(LINE_NUMBER[K]='9')‰ThenLINE_NUMBER[K]:='0'‰Else‹Begin/LINE_NUMBER[K]:=CHR(ORD(LINE_NUMBER[K])+1);K:=1‹End;„Until(K=1);„K:=0;„RepeatB†K:=K+1;‚SYM_BUFR[K]:=TABLE[TABLE_PTR];‚TABLE_PTR:=TABLE_PTR+1"„Until(SYM_BUFR[K]=Chr(EOL));„GET_MAC_LINE:=(K<>1)"‚End;…{OfFunctionGET_MAC_LINE}{$E}N{*******************************************************************************É**$**“OptionSpecificationRoutines™****É**O *****************************************************************************} ‚ProcedureCHK_OUTDEV;0ƒ{‚DecodethegivenDEVICE‚--‚#FN=2,#PR=1ƒ}‚Label„FIN; ‚Begin7„CHECK:=False;‚SCAN_BLANKS;‚TEMP_PTR:=PTR_INPUT_BUFFER;-„If(NotEOL_FLAG)And(EVAL_OUTDEV=0)Then†If(GETNXTCHAR='#')Then†BeginˆNEXT_CHAR:=GETNXTCHAR;1ˆIf(NEXT_CHAR='F')Then–{FilenameSpecified}?ŠIf(GETNXTCHAR='N')Then‚EVAL_OUTDEV:=FILE_DEV‚Else‚GoToFINˆElse0ŠIf(NEXT_CHAR='P')Then”{PrinterSpecified‚}?ŒIf(GETNXTCHAR='R')Then‚EVAL_OUTDEV:=PRNT_DEV‚Else‚GoToFINŠElse‚GoToFIN;ˆC< HECK:=True;‚FOUND:=True†End;„FIN:/†If(NotCHECK)ThenPTR_INPUT_BUFFER:=TEMP_PTR!‚End;ƒ{OfProcedureCHK_OUTDEV} O{*****************************************************************************} ‚ProcedureCHK_LENGTH;9„{‚DecodethegivenLENGTH‚--‚Example:'B'(Byte)=>1ƒ}‚Label„FIN; ‚Begin7„CHECK:=False;‚SCAN_BLANKS;‚TEMP_PTR:=PTR_INPUT_BUFFER;J„If(EOL_FLAG)Or(EVAL_LENGTH<>0)ThenGoToFIN;‚NEXT_CHAR:=GETNXTCHAR;1„CaseNEXT_CHAROf”{„DetermineLENGTHspecified…}&†'B'‚:…EVAL_LENGTH:=BYTE_LEN;‚{Bytež}&†'W'‚:…EVAL_LENGTH:=WORD_LEN;‚{Wordž}+†'L'‚:…EVAL_LENGTH:=LNGW_LEN;‚{LongWord™}4†'O'‚:…EVAL_LENGTH:=5;‰{OddAddressesonlyforMM‰}5†'V'‚:…EVAL_LENGTH:=6;‰{EvenAddressesonlyforMMˆ}&†Otherwise‚GoToFIN{InvalidLENGTH”}„End;ƒ{OfCases}„CHECK:=True;‚FOUND:=True;„FIN:/…If(NotCHECK)ThenPTR_INPUT_BUFFER:=TEMP_PTR!‚End;ƒ{OfProcedureCHK_LENGTH} O{*****************************************************************************} ‚ProcedureCHK_TYPE;6„{‚DecodethegivenTYPE‚--‚Example:'$'(Hex)=>1‚}‚Label„FIN; ‚Begin7„CHECK:=False;‚SCAN_BLANKS;‚TEMP_PTR:=PTR_INPUT_BUFFER;H„If(EOL_FLAG)Or(EVAL_TYPE<>0)ThenGoToFIN;‚NEXT_CHAR:=GETNXTCHAR;/„CaseNEXT_CHAROf•{„DetermineTYPESpecified„}#†'$'‚:…EVAL_TYPE:=HEX_TYPE;…{Hexœ}'†'&'‚:…EVAL_TYPE:=DEC_TYPE;…{Decimal˜}%†'@'‚:…EVAL_TYPE:=OCT_TYPE;…{Octalš}&†'%'‚:…EVAL_TYPE:=BIN_TYPE;…{Binary™}%†'''':…EVAL_TYPE:=CHR_TYPE;…{Char›}.†'F'‚:…EVAL_TYPE:=FLT_TYPE;…{FloatingPoint‘}'†'I'‚:…EVAL_TYPE:=INT_TYPE;…{Integer˜}+†'B'‚:ƒIfGETNXTCHAR='O'Thenƒ{Boolean˜}#‘EVAL_TYPE:=BOL_TYPE‚Else‚GoToFIN;2†'P'‚:ƒIfGETNXTCHAR='D'Thenƒ{PackedDecimal‘}#‘EVAL_TYPE:=PCK_TYPE‚Else‚GoToFIN;0†'D'‚:ƒIfGETNXTCHAR='I'Thenƒ{Dis-Assembly“}#‘EVAL_TYPE:=DIS_TYPE‚Else‚GoToFIN;(†'N'‚:ƒEVAL_TYPE:=11;{NoReadforMM‘}$†Otherwise‚GoToFIN‘{InvalidTYPE“}„End;„{OfCases}„CHECK:=True;‚FOUND:=True;„FIN:/†If(NotCHECK)ThenPTR_INPUT_BUFFER:=TEMP_PTR‚End;„{OfProcedureCHK_TYPE} O{*****************************************************************************} 8‚ProcedureGET_OPTIONS(OUTDEV,LENGTH,DTYPE:Boolean);>„{‚Getallvalidoptionsinanyorderandstoretheirvalues‚}‚Begin„Repeat(†FOUND:=False;‚If(DTYPE)ThenCHK_TYPE;9†If(OUTDEV)Then‚CHK_OUTDEV;‚If(LENGTH)Then‚CHK_LENGTH„Until(NotFOUND);I„STORE_PARM(EVAL_LENGTH);‚STORE_PARM(EVAL_TYPE);‚STORE_PARM(EVAL_OUTDEV);3„If(EVAL_LENGTH<>0)Then‚NUM_PARMS:=NUM_PARMS+1;1„If(EVAL_TYPE<>0)Then‚NUM_PARMS:=NUM_PARMS+1;3„If(EVAL_OUTDEV<>0)Then‚NUM_PARMS:=NUM_PARMS+1;D„If(EVAL_OUTDEV=0)And(EVAL_LENGTH=0)And(EVAL_TYPE=0)Then †ERROR:=11;.„SCAN_BLANKS;‚If(NotEOL_FLAG)Then‚ERROR:=11"‚End;ƒ{OfProcedureGET_OPTIONS}{$E}N{*******************************************************************************É****šSymbolRoutines ****É**O *****************************************************************************} ‚ProcedureGET_SYMBOL;G„{‚ProcedureGET_SYMBOLoperatesonINPUT_BUFFER;‚ItwillmoveastringF‡boundedbyPTR_INPUT_BUFFERandeitherablank,agivendelimeter,or@‡anEND-OF-LINEcharacterintoNXT_STRING.‚UponreturningtotheD‡callingprogram,NXTSTRNGLENwillcontainthelengthofthestring.1‡PTR_INPUT_BUFFERwillbeadvancedaccordingly.™}‚Begin8„NXTSTRNGLEN:=0;‚NEXT_CHAR:=GETNXTCHAR;ƒNXT_STRING:='ƒ';#„While(NotCHAR_CHK(NEXT_CHAR))Do„BeginB†NXTSTRNGLEN:=NXTSTRNGLEN+1;‚NXT_STRING[NXTSTRNGLEN]:=NEXT_CHAR;†NEXT_CHAR:=GETNXTCHAR„End;…{OfWhileLoop}=„If(NotEOL_FLAG)ThenPTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1;3„If(NXTSTRNGLEN>SYMLEN)Then‚NXTSTRNGLEN:=SYMLEN!‚End;{OfProcedureGET_SYMBOL} O{*****************************************************************************} 0‚FunctionSYMBOL_CHK(FILES:Boolean):BOOL= EAN;J„{FunctionSYMBOL_CHKdetermineswhetherthecharacterstringisasymbolF…ornotandreturnstheBooleanresult.‚Neitherpointersnordelimeter…statusisaffected. K…::=(|.)[(||$|_|.)...];…::=[(|)...]‘}‚Var0„STRING_PTR:BYTE;˜{CopyOfPTR_INPUT_BUFFER})„TEMP_CHAR‚:Char;˜{CopyOfDELIM_CHAR‡} ‚Begin5„TEMP_CHAR:=DELIM_CHAR;‚STRING_PTR:=PTR_INPUT_BUFFER;*„SYMBOL_CHK:=False;‚NEXT_CHAR:=GETNXTCHAR;$„If(Not(CHAR_CHK(NEXT_CHAR)))ThenI†If((NEXT_CHAR>='A')And(NEXT_CHAR<='Z'))Or(NEXT_CHAR='.')Then5ˆWhile((NEXT_CHAR>='A')And(NEXT_CHAR<='Z'))Or.Š(NEXT_CHARIn['0'..'9','$','.','_'])DoŒBegin;ŽIf(FILES)And(NEXT_CHARIn['$','.','_'])Then‚Exit;ŽNEXT_CHAR:=GETNXTCHAR;/ŽIf(CHAR_CHK(NEXT_CHAR))Then‚SYMBOL_CHK:=TrueŒEnd;{OfWhileLoop}4„DELIM_CHAR:=TEMP_CHAR;‚PTR_INPUT_BUFFER:=STRING_PTR ‚End;{OfFunctionSYMBOL_CHK} O{*****************************************************************************} ‚ProcedureFILE_CHK;Jƒ{‚ThisprocedurestorestheoffsetintoINPUT_BUFFERatwhichthecurrentB†filesymbolhasbeenfound.‚ItthenscanspastthesymbolandanyH†subsequentblanks.‚TheoffsetinPTR_INPUT_BUFFERhasit'sbaseat0.‚}‚Begin8„STORE_PARM(PTR_INPUT_BUFFER-1);‚NUM_PARMS:=NUM_PARMS+1;1„Repeat‚Until(CHAR_CHK(GETNXTCHAR));‚SCAN_BLANKS‚End;ƒ{OfProcedureFILE_CHK} O{*****************************************************************************} ‚FunctionGET_NAME:Boolean;Fƒ{‚Thisprocedurestoresfirstfourcharsofavalidsymbol,andscans,†pastthesymbolandanysubsequentblanksž}‚Begin„IfSYMBOL_CHK(True)Then„Begin9†If(CODE=MA_CODE)Then‚STORE_PARM(PTR_INPUT_BUFFER-1);4†GET_SYMBOL;‚GET_NAME:=True;‚NUM_PARMS:=NUM_PARMS+1;3†SCAN_BLANKS;‚CH_INT(NXT_STRING[1],NUMBER_VALUE);3†If(CODE<>MA_CODE)Then‚STORE_PARM(NUMBER_VALUE)„EndElse‚GET_NAME:=False‚End;ƒ{OfFunctionGET_NAME}{$E}N{*******************************************************************************É****™EvaluationRoutines****É**O *****************************************************************************} ‚FunctionEVAL_LOCAL:Boolean;J„{‚ThisfunctiondetermineswhetherornotasymbolisinthelocalsymbolF‡tableand,ifitis,returnsitsvalueinSYM_VALUE.‚TABLE_PTRissetA‡topointtotheoffsetofthesymbolinthemacro/symbolblock‰}‚Var8„SMBL,COMP:STR8;‰{TemporaryStringsForComparison}‚Begin@„EVAL_LOCAL:=False;‚ForJ:=1To8Do‚SMBL[J]:=NXT_STRING[J];„TABLE_PTR:=ENDTABLE-11; „While(TABLE_PTR>=ENDSYMB)Do„Begin4†ForJ:=1To8Do‚COMP[J]:=TABLE[TABLE_PTR+J-1];†If(COMP=SMBL)Then†Begin?ˆCH_INT(TABLE[TABLE_PTR+8],SYM_VALUE);‚EVAL_LOCAL:=True;‚Exit†End;†TABLE_PTR:=TABLE_PTR-12„End ‚End;„{OfFunctionEVAL_LOCAL} O{*****************************************************************************} ‚FunctionEVAL_LCLSYM:Boolean;G„{‚Thisfunctiondeterminesifasymbolisvalidand,ifso,whetherorA‡notitisapredefinedlocalsymbol.‚Ifitisavalidlocal,‚theE‡currentvalueisreturnedinSYM_VALUE.‚PTR_INPUT_BUFFERisadvanced2‡pastanyblanksand/oranydelimeterrecognized˜}‚Var<„BACKUP:Boolean;‘{FlagOfBLNKS_CHKSuccessForBack-up}‚Begin„EVAL_LCLSYM:=False;„IfSYMBOL_CHK(True)Then„Begin%†GET_SYMBOL;‚BACKUP:=(NotBLNKS_CHK);†If(DELIM_CHAR<>':')Then;ˆIf(NXT_STRING[1]='R')And(NXT_STRING[3]='')And=Š((NXT_STRING[2]>='0')And(NXT_STRING[2]<='7'))ThenˆBegin>ŠSYM_VALUE:=STATUS_BLOCK.OFREGS[Ord(NXT_STRING[2])-16#30];ŠEVAL_LCLSYM:=True$ˆEnd‚Else‚EVAL_LCLSYM:=(EVAL_LOCAL);6†If(BACKUP)ThenPTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1„End!‚End;‚{OfFunctionEVAL_LCLSYM} O{*****************************************************************************}=  ‚ProcedureEVAL_PARM;‚Begin'„NEXT_CHAR:=GETNXTCHAR;‚PTR_MAC_BUF:=1;$„If(NEXT_CHARIn['0'..'9'])Then„Begin&†ForL:=1To(Ord(NEXT_CHAR)-16#30)Do†Begin*ˆWhile(MAC_BUF[PTR_MAC_BUF]<>'')AndDŠ(MAC_BUF[PTR_MAC_BUF]<>Chr(EOL))Do‚PTR_MAC_BUF:=PTR_MAC_BUF+1;CˆWhile(MAC_BUF[PTR_MAC_BUF]='')Do‚PTR_MAC_BUF:=PTR_MAC_BUF+1†End;-†If(MAC_BUF[PTR_MAC_BUF]<>Chr(EOL))Then†Begin*ˆWhile(MAC_BUF[PTR_MAC_BUF]<>'')And>Š(MAC_BUF[PTR_MAC_BUF]<>Chr(EOL))And(I'')And@Š(MAC_BUF[PTR_MAC_BUF]<>Chr(EOL))‚ThenERROR:=22‚Else‚I:=I-1†EndElse‚ERROR:=20„EndElse‚ERROR:=21‚End; O{*****************************************************************************} 4‚FunctionEVAL_MACRO(VarMAC_NAME:STR8):Boolean;I„{‚Thisfunctiondeterminesifamacronameisinthemacrotableand,ifF‡itis,setsTABLE_PTRtothemacrooffsetinthemacro/symbolblock„}‚Var.„COMP:STR8;Œ{TemporaryStringForCompare}‚Begin!„TABLE_PTR:=1;‚EVAL_MACRO:=False; „While(TABLE_PTR::=[-]([$]|&|@¤|%)”}‚Var0„STRING_PTR:BYTE;•{CopyOfPTR_INPUT_BUFFER})„TEMP_CHAR‚:Char;•{CopyOfDELIM_CHAR‡} ‚Label„FIN; ‚Begin5„TEMP_CHAR:=DELIM_CHAR;‚STRING_PTR:=PTR_INPUT_BUFFER;;„NUMBER_CHK:=False;‚NEG_FLAG:=False;‚NEXT_CHAR:=GETNXTCHAR;+„If((DEF_BASE)And(NEXT_CHAR='-'))Then„Begin&†NEXT_CHAR:=GETNXTCHAR;‚NEG_FLAG:=True„End;„IfEOL_FLAGThenGoToFIN;/„CaseNEXT_CHAROf—{‚DetermineBaseOfNumber‚}†'$':†CHECK_CHAR:='F';‹{‚Hex—}#†'&':†CHECK_CHAR:='9';‹{‚Decimal“}!†'@':†CHECK_CHAR:='7';‹{‚Octal•}"†'%':†CHECK_CHAR:='1';‹{‚Binary”}0†Otherwise‚CHECK_CHAR:=''Œ{‚NoBaseSpecified‰}„End;‚{OfCases}„If(CHECK_CHAR='')ThenB†If(DEF_BASE)And(((NEXT_CHAR>='A')And(NEXT_CHAR<='F'))Or"Š(NEXT_CHARIn['0'..'9']))Then8ˆCaseDEF_BLOCK.BASEOfŽ{DetermineDefaultInputBase}$ŠHEX_TYPE:CHECK_CHAR:='F';‡{Hexš}(ŠDEC_TYPE:CHECK_CHAR:='9';‡{Decimal–}&ŠOCT_TYPE:CHECK_CHAR:='7';‡{Octal˜}&ŠBIN_TYPE:CHECK_CHAR:='1'ˆ{Binary—}ˆEnd„{OfCases}†Else7ˆIf(NEXT_CHARIn['0'..'9'])And(NotDEF_BASE)ThenŠCHECK_CHAR:='9'ˆElse‚GoToFIN „ElseBegin†NEXT_CHAR:=GETNXTCHAR;:†IfCHAR_CHK(NEXT_CHAR)Or(NotDEF_BASE)ThenGoToFIN„End;„While(1=1)Do„Begin†If(NEXT_CHAR<'0')ThenExit ˆElseIf(CHECK_CHAR='F')ThenBeginIf(NEXT_CHAR>'9')Then?‘If(Not((NEXT_CHAR>='A')And(NEXT_CHAR<='F')))ThenExit0EndElse‚If(NEXT_CHAR>CHECK_CHAR)ThenExit;†NEXT_CHAR:=GETNXTCHAR;†If(CHAR_CHK(NEXT_CHAR))Then†BeginˆNUMBER_CHK:=True;‚Exit†End„End;{OfWhileLoop}„FIN:2„If(EOL_FLAG)ThenNUMBER_PTR:=PTR_INPUT_BUFFER-1%†Else‚NUMBER_PTR:=PTR_INPUT_BUFFER-2;4„DELIM_CHAR:=TEMP_CHAR;‚PTR_INPUT_BUFFER:=STRING_PTR ‚End;{OfFunctionNUMBER_CHK} O{*****************************************************************************} 1‚FunctionEVAL_NUMBER(BLNKS:Boolean):BOOLEAN;I„{‚Thisfunctiondetermineswhetherornotastringisavalidnumber.‚If9‡itisvalid,thevaluewillbereturnedinNUMBER_VALUE. Cˆ::=[-]($|& >|@3–|%||')ˆ}‚Var0„STRING_PTR:BYTE;{CopyOfPTR_INPUT_BUFFERˆ}7„CHAR_VALUE:BYTE;{ValueofNextDigitFromString}(„BASE‡:BYTE;{NumberBaseMultiplierŠ} ‚Label„CHK,NGTV,FIN; ‚Begin2„STRING_PTR:=PTR_INPUT_BUFFER;‚EVAL_NUMBER:=False;„If(NotNUMBER_CHK)Then*†If(DEF_BASE)Thenš{CheckFor…}†Begin*ˆIf(NEG_FLAG)Then‚NEXT_CHAR:=GETNXTCHAR;3ˆIf(NotEVAL_LCLSYM)Then‘{CheckForƒ}ˆBeginŠPTR_INPUT_BUFFER:=STRING_PTR;*ŠIf(NEG_FLAG)Then‚NEXT_CHAR:=GETNXTCHAR;7ŠIf(GETNXTCHAR='''')Then{CheckFor}ŠBegin6ŒNUMBER_VALUE:=Ord(GETNXTCHAR);‚NEXT_CHAR:=GETNXTCHAR; ŒIf(NUMBER_VALUE>=16#20)Then'ŽIf(CHAR_CHK(NEXT_CHAR))Then‚GoToCHKŠEnd;'ŠPTR_INPUT_BUFFER:=STRING_PTR;‚GoToFINˆEnd;#ˆNUMBER_VALUE:=SYM_VALUE;‚GoToNGTV†EndElse‚GoToFIN „ElseBegin*†If(NEG_FLAG)ThenNEXT_CHAR:=GETNXTCHAR;0†CaseCHECK_CHAROf–{DetermineBaseOfNumberƒ}ˆ'F':„BASE:=16;”{Hex˜}ˆ'9':„BASE:=10;”{Decimal”}ˆ'7':„BASE:=8;”{Octal–}ˆ'1':„BASE:=2•{Binary•}†End;‚{OfCases}%†{‚ScanOffBaseDesignator,IfAny‚}(†NEXT_CHAR:=GETNXTCHAR;‚NUMBER_VALUE:=0;@†IfNEXT_CHARIn['$','&','@','%']ThenNEXT_CHAR:=GETNXTCHAR;%†While(Not(CHAR_CHK(NEXT_CHAR)))Do†Begin'ˆCHAR_VALUE:=(ORD(NEXT_CHAR)-ORD('0'));<ˆIfNEXT_CHARIn['A'..'F']ThenCHAR_VALUE:=CHAR_VALUE-7;0ˆNUMBER_VALUE:=((NUMBER_VALUE*BASE)+CHAR_VALUE);ˆNEXT_CHAR:=GETNXTCHAR†End‚{OfWhileLoop}„End;„CHK:†If(NEXT_CHAR='')ThenˆIf(NotBLNKS_CHK)ThenDŠIf(BLNKS)ThenGoToFIN‚Else‚PTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1;„NGTV:0†If(NEG_FLAG)Then‚NUMBER_VALUE:=-NUMBER_VALUE;„EVAL_NUMBER:=True;„FIN:!‚End;{OfFunctionEVAL_NUMBER} O{*****************************************************************************} ‚FunctionEVAL_REG:Boolean;K„{‚Thisfunctiondeterminesifastringisavalidregister(range)ornot.I‡Ifitisvalid,theregister(s)offsetvalue(s)arestoredinREG_VALUE. E‡::=(||.PC|.SR|.XM|)3‡::=<.A(0|1|2|3|4|5|6|7)>3‡::=<.D(0|1|2|3|4|5|6|7)>2‡‚::=<.R(0|1|2|3|4|5|6|7)>@‡::=('-'|'-')Š}‚Var2„REG_PTR„:BYTE;‰{OffsetValueToRegisterTextŠ}6„EVALD†:Boolean;†{FlagOfValidRegisterOperation‡}>„NXT_LETTER:Char;‰{NextCharacterinRegisterDesignation} „ProcedureCHK_FOR_REG;G…{‚VerifyandprocessthegivenregistersothatREG_VALUEwillcontain$ˆtheindexvalueofthatregister.¥}„Begin…{ProcedureCHK_FOR_REG}†NXT_LETTER:=GETNXTCHAR;†If(EOL_FLAG)ThenERROR:=3†ElseˆCaseNEXT_CHAROf Ž{classifytheencounteredreg.}?Š'D':‚If(NXT_LETTERIn['0'..'7'])Then†{D-typeRegister}5“REG_VALUE:=(ORD(NXT_LETTER)-ORD('0'))‚ElseERROR:=8;?Š'A':‚If(NXT_LETTERIn['0'..'7'])Then†{A-typeRegister}9“REG_VALUE:=((ORD(NXT_LETTER)-ORD('0'))+8)‚Else‚ERROR:=8;1Š'P':‚If(NXT_LETTER='C')Then{PCRegister„}“REG_VALUE:=16‚ElseERROR:=8;1Š'S':‚If(NXT_LETTER='P')Then{SPRegister„}“REG_VALUE:=150‘Else‚If(NXT_LETTER='R')ThenŠ{SRRegister„}™REG_VALUE:=177—Else‚If(NXT_LETTER='S')And(GETNXTCHAR='P')ThenŸREG_VALUE:=25‚Else‚ERROR:=8;1Š'X':‚If(NXT_LETTER='M')Then{XMRegister„}“REG_VALUE:=18‚ElseERROR:=8;1Š'O':‚If(NXT_LETTER='P')Then{OPRegister„}“REG_VALUE:=19‚Else‚ERROR:=8;1Š'V':‚If(NXT_LETTER='L')Then{VLRegister„}“REG_VALUE:=200‘Else‚If(NXT_LETTER='A')ThenŠ{VARegister„}™REG_VALUE:=210—Else‚If(NXT_LETTER='M')Then„{VMRegister„}ŸREG_VALUE:=22Else‚ERROR:=8;1Š'M':‚If(NXT_LETTER='C')Then{MCRegister„}“REG_VALUE:=23‚Else‚ERROR:=8;?Š'R':‚If(NXT_LETTERIn['0'..'7'])Then†{R-typeRegister}8“REG_VALUE:=(ORD(NXT_LETTER)-ORD('0')+24)‚ElseERROR:=8;> ‡End„{OfCases}"„End;„{OfProcedureCHK_FOR_REG} ‚Beginƒ{FunctionEVAL_REG}7„EVALD:=False;‚REG_VALUE:=0;‚REG_PTR:=PTR_INPUT_BUFFER;„If(GETNXTCHAR='.')Then„Begin†NEXT_CHAR:=GETNXTCHAR;†If(NotEOL_FLAG)Then?ˆIf(NEXT_CHARIn['D','A','P','S','X','O','V','M','R'])ThenˆBegin1ŠCHK_FOR_REG;‚EVALD:=True;‚NEXT_CHAR:=GETNXTCHAR;ŠIf(CHAR_CHK(NEXT_CHAR))ThenŠBegin=ŒIf(NotEOL_FLAG)ThenPTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1;CQÆËÏ Ó×Û"ßãçë"ï%ó"÷ûÿ!# ("&##')+ / 3'7";!=ŒIf(NotBLNKS_CHK)ThenPTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1ŠEndElse‚ERROR:=3ˆEndElse‚ERROR:=3„End;4„If(ERROR<>0)Or(NotEVALD)Then‚EVAL_REG:=False „ElseBegin?†STORE_PARM(REG_VALUE);‚NUM_PARMS:=NUM_PARMS+1;‚EVAL_REG:=True;-†If(CODE=MD_CODE)Then‚STORE_PARM(REG_PTR)„End‚End;ƒ{OfFunctionEVAL_REG} O{*****************************************************************************} ‚FunctionEVAL_EA:Boolean;I„{‚ThisfunctiondetermineswhetherastringisavalideffectiveaddressD‡ornot.‚Ifvalid,thefunctionstoresthecomponent(s)oftheEAinE‡DISPL_VALUE,INDIRECT_REGandINDEX_REGaswellasstoringthevalue!‡oftheEAexpressioninEVAL_EA. 6†::=[[-]]'('(PC|SP|)'§[,(SP||)]')'‚}‚Var9„DISPL_VALUE‚:Integer;ˆ{ValueOf[-]Offset…};„INDIRECT_REG:BYTE;‹{IndexValueForIndirectRegister}5„INDEX_REG„:BYTE;‹{IndexValueForIndexRegister„}/„OFFSET‡:BYTE;‹{IndexRegisterOffsetValue‡})„TEMP_CHAR„:Char;‹{CopyOfDELIM_CHAR} ‚Label„FIN; ‚Begin/„DISPL_VALUE:=0;‚INDEX_REG:=0;‚INDIRECT_REG:=0;2„OFFSET:=0;‚TEMP_CHAR:=DELIM_CHAR;‚EVAL_EA:=False; 8„If(GETNXTCHAR<>'(')Then’{[-]Specified}„Begin=†If(NotEOL_FLAG)Then‚PTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1;†DELIM_CHAR:='(';†If(NUMBER_CHK)Then†Begin0ˆIf((NotEVAL_NUMBER(True))Or(EOL_FLAG))ThenˆBegin ŠDELIM_CHAR:=TEMP_CHAR;‚GoToFINˆEnd;2ˆDELIM_CHAR:=TEMP_CHAR;‚DISPL_VALUE:=NUMBER_VALUE;&ˆPTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-2;;ˆIf(GETNXTCHAR='')ThenGoToFIN;‚NEXT_CHAR:=GETNXTCHAR3†EndElse‚Begin‚DELIM_CHAR:=TEMP_CHAR;‚GoToFIN‚End„End; 4„NEXT_CHAR:=GETNXTCHAR;—{Specified}*„If(NEXT_CHAR='P')Thenž{PCRegister„}:†If(GETNXTCHAR='C')Then‚INDIRECT_REG:=16‚Else‚GoToFIN2„ElseIf(NEXT_CHAR='S')Then™{SP/A7Register}:‹If(GETNXTCHAR='P')Then‚INDIRECT_REG:=15‚Else‚GoToFIN ‰ElseBegin<‹If(NEXT_CHAR<>'A')ThenGoToFIN;‚NEXT_CHAR:=GETNXTCHAR;4‹If(Not(NEXT_CHARIn['0'..'7']))ThenGoToFIN;'‹INDIRECT_REG:=((ORD(NEXT_CHAR)-16#28))‰End;<„EA_VALUE:=STATUS_BLOCK.REGISTERS@.SAV_REGS[INDIRECT_REG];„NEXT_CHAR:=GETNXTCHAR; 5„If(NEXT_CHAR<>')')Then–{Specified}„Begin<†If(NEXT_CHAR<>',')ThenGoToFIN;‚NEXT_CHAR:=GETNXTCHAR;†If(NEXT_CHAR='S')Then7ˆIf(GETNXTCHAR='P')Then‚INDEX_REG:=15‚Else‚GoToFIN †ElseBeginˆIf(NEXT_CHAR<>'D')Then3ŠIf(NEXT_CHAR='A')Then‚OFFSET:=8‚Else‚GoToFIN;ˆNEXT_CHAR:=GETNXTCHAR;4ˆIf(Not(NEXT_CHARIn['0'..'7']))ThenGoToFIN;)ˆINDEX_REG:=(ORD(NEXT_CHAR)-16#30)+OFFSET†End;B†EA_VALUE:=EA_VALUE+STATUS_BLOCK.REGISTERS@.SAV_REGS[INDEX_REG];%†If(GETNXTCHAR<>')')ThenGoToFIN„End; >„If(NotBLNKS_CHK)ThenPTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1;/„EA_VALUE:=EA_VALUE+DISPL_VALUE;‚EVAL_EA:=True; „If(CODE=0)Then„Begin?†CODE:=CODE+2;‚STORE_PARM(DISPL_VALUE);‚NUM_PARMS:=NUM_PARMS+1;.†EA_VALUE:=((INDIRECT_REG*16#10000)+INDEX_REG)„End; .„STORE_PARM(EA_VALUE);‚NUM_PARMS:=NUM_PARMS+1;„FIN:‚End;ƒ{OfFunctionEVAL_EA} O{***********************************? ******************************************} 2‚FunctionEVAL_ADDR(BLNKS:Boolean):BOOLEAN;9„{::=(||)[:]ƒ}„{¸}'„{::=<'#'Digit[...]>‡})„{::=[:
]…}„{Š::=–}*„{Ž
::=|10|11|...|254|255…}‚Var)„TEMP_CHAR‰:Char;ˆ{CopyOfDELIM_CHAR“},„EVAL_FLAG‰:Boolean;…{ValidAddressFlag“}9„TEMP_PTR,NEW_PTR:BYTE;ˆ{CopiesOfPTR_INPUT_BUFFER‹}2„I‘:BYTE;ˆ{MiscellaneousLoopControlVariable‚}:„ADDR_LENŠ:BYTE;ˆ{LengthOf[:]String} ‚Label„FIN; ‚BeginE„TEMP_CHAR:=DELIM_CHAR;‚TEMP_PTR:=PTR_INPUT_BUFFER;‚EVAL_FLAG:=False;/„DELIM_FLAG[1]:=True;›{SetColonDelimeter}+„SYM_BUFR:='ƒ';‚ADDR_VALUE:=0;‚ADDR_LEN:=0; 9„IfEVAL_NUMBER(BLNKS)Then‘{AbsoluteNumber/Offset}†ADDR_VALUE:=NUMBER_VALUE „ElseBegin:†If(NEG_FLAG)ThenNEXT_CHAR:=GETNXTCHAR;Ž{UnaryMinus}K{ LINE # NOT SUPPORTED ----------------------------------------------------.†If(GETNXTCHAR='#')Then™Specified†BeginˆDEF_BASE:=False;ˆIf(NUMBER_CHK)ThenˆBegin!ŠSYM_BUFR[1]:='#';‚ADDR_LEN:=1;/ŠForI:=1To(NUMBER_PTR-PTR_INPUT_BUFFER+1)DoŠBegin7ŒADDR_LEN:=ADDR_LEN+1;‚SYM_BUFR[ADDR_LEN]:=GETNXTCHARŠEndˆEndElse‚GoToFIN †EndElse†BeginFˆIf(NotEOL_FLAG)Then‚PTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1;-------}†Begin1ˆIfSYMBOL_CHK(False)Then•{Specifiedƒ}ˆBegin<ŠGET_SYMBOL;‚ADDR_LEN:=NXTSTRNGLEN;‰{SaveLength}/ŠForI:=1ToADDR_LENDo•{SaveNameƒ} ŒSYM_BUFR[I]:=NXT_STRING[I];ˆEndElse‚GoToFIN †End;†If(NotBLNKS_CHK)ThenCˆIf(BLNKS)Then‚GoToFIN‚Else‚PTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1„End; 0„IfDELIM_CHAR=':'Then›{Specified}„Begin?†DELIM_CHAR:=TEMP_CHAR;‚IfNotSYMBOL_CHK(False)ThenGoToFIN;=†GET_SYMBOL;‚ADDR_LEN:=ADDR_LEN+1;‚SYM_BUFR[ADDR_LEN]:=':';2†ForI:=1ToNXTSTRNGLENDo—{SaveName}†Begin<ˆADDR_LEN:=ADDR_LEN+1;‚SYM_BUFR[ADDR_LEN]:=NXT_STRING[I]†End;†If(NotBLNKS_CHK)ThenDˆIf(BLNKS)Then‚GoToFIN‚Else‚PTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1; 3†If(DELIM_CHAR=':')Then–{
Specified}†BeginCˆDELIM_CHAR:=TEMP_CHAR;‚DEF_BASE:=False;‚NEW_PTR:=PTR_INPUT_BUFFER;CˆIf(NotEVAL_NUMBER(BLNKS))Or(NUMBER_VALUE>255)ThenGoToFIN;1ˆADDR_LEN:=ADDR_LEN+1;‚SYM_BUFR[ADDR_LEN]:=':';ˆPTR_INPUT_BUFFER:=NEW_PTR;&ˆForI:=1To(NUMBER_PTR-NEW_PTR+1)DoˆBegin7ŠADDR_LEN:=ADDR_LEN+1;‚SYM_BUFR[ADDR_LEN]:=GETNXTCHARˆEnd;ˆIf(NotBLNKS_CHK)ThenCŠIf(BLNKS)Then‚GoToFIN‚Else‚PTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1†End„End; =„IfADDR_LEN<>0Then{Calculateand/or}„Begin;†If(Not(CALC_ADDRESS(SYM_VALUE,SYM_BUFR)))ThenGoToFIN;"†ADDR_VALUE:=ADDR_VALUE+SYM_VALUE;,†If(NEG_FLAG)Then‚ADDR_VALUE:=-ADDR_VALUE;„End; „EVAL_FLAG:=True;„FIN:>„EVAL_ADDR:=EVAL_FLAG;‚DEF_BASE:=True;‚DELIM_FLAG[1]:=False;3„If(NotEVAL_FLAG)Then‚PTR_INPUT_BUFFER:=TEMP_PTR‚End;ƒ{OfFunctionEVAL_ADDR} O{*****************************************************************************} /‚FunctionEVAL_EXP(BLNKS:Boolean):BOOLEAN;0„{ƒ::=[...]ƒ}‚Var)„TEMP_CHAR‚:Char;{CopyOfDELIM_CHAR†},„MATH_TOKEN:Char;{ParsedMathOperator„}%„EVALE†:Boolean;Œ{ExpressionFlag‰}0„STRING_PTR:BYTE;{CopyOfInputBufferPtr} ‚Label„FIN; ‚BeginC„TEMP_CHAR:=DELIM_CHAR;‚STRING_PTR:=PTR_INPUT_BUFFER;‚EVALE:=False;5„DELIM_FLAG[3]:=True;•{‚Delimeter‚})„If(NotEVAL_ADDR(BLNKS))ThenGoToFIN;„EXP_VALUE:=ADDR_VALUE;@„While(NotEOL_FLAG)And(DELIM_CHARIn['*','/','+','-'])Do„Begin*†SCAN_BLANKS;‚If(EOL_FLAG)ThenGoToFIN;/†MATH_TOKEN:=DELIM_CHAR;‚DELIM_CHAR:=TEMP_CHAR;)†If(NotEVAL_ADDR(BLNKS))ThenGoToFIN;.†CaseMATH_TOKENOfš{‚PerformMathOperation‚})ˆ'-':‡EXP_VALUE:=EXP_VALUE‚-‚ADDR_VALUE;)ˆ'+':‡EXP_VALUE:=EXP_VA? LUE‚+‚ADDR_VALUE;)ˆ'*':‡EXP_VALUE:=EXP_VALUE‚*‚ADDR_VALUE;Bˆ'/':If(ADDR_VALUE>16#FFFF)Or(ADDR_VALUE=0)ThenGoToFIN)ŽElse‚EXP_VALUE:=EXP_VALUEDIVADDR_VALUE†End;{OfCaseS}„End;<„EVALE:=True;‚NUM_PARMS:=NUM_PARMS+1;‚STORE_PARM(EXP_VALUE);„FIN:<„DELIM_FLAG[3]:=False;{ClearDelimeter}„If(NotEVALE)Then„Begin/†PTR_INPUT_BUFFER:=STRING_PTR;‚EVALE:=(EVAL_EA)„End;„EVAL_EXP:=EVALE‚End;ƒ{OfFunctionEVAL_EXP} O{*****************************************************************************} ‚FunctionADR_EXP_REG:Boolean;D„{‚Thisfunctionchecksforvalidregister(s),effectiveaddress,or‡expressioninthatorder«}‚Begin/„TEMP_PTR:=PTR_INPUT_BUFFER;‚ADR_EXP_REG:=True; „If(EVAL_REG)Then‚CODE:=CODE+1 „ElseBegin&†PTR_INPUT_BUFFER:=TEMP_PTR;‚ERROR:=0;1†If(NotEVAL_EXP(False))Then‚ADR_EXP_REG:=False„End!‚End;ƒ{OfFunctionADR_EXP_REG} O{*****************************************************************************} ‚ProcedureGET_VALUE;‚Begin„If(GETNXTCHAR='''')Then„Begin†NEXT_CHAR:=GETNXTCHAR;0†While(NEXT_CHAR<>'''')And(NotEOL_FLAG)Do†Begin8ˆI:=I+1;‚SYM_BUFR[I]:=NEXT_CHAR;‚NEXT_CHAR:=GETNXTCHAR†End;G†If(EOL_FLAG)Or(NotCHAR_CHK(GETNXTCHAR))Then‚ERROR:=6;‚SCAN_BLANKS „EndElse„Begin.†PTR_INPUT_BUFFER:=PTR_INPUT_BUFFER-1;‚I:=I+1;†If(EVAL_NUMBER(False))Then)ˆSTORE_BYTE(NUMBER_VALUE,SYM_BUFR[I],I)†Else‚ERROR:=6„End ‚End;ƒ{OfProcedureGET_VALUE}{$E}N{*******************************************************************************É**5**‹CommandProcessingRoutines--ExecutionGroup****É**O *****************************************************************************} <‚ProcedureADDR_STOP;…{ƒAS[[[;]]]ƒ} ‚Begin„DELIM_FLAG[2]:=True;„If(NotEOL_FLAG)Then†If(EVAL_EXP(False))Then†BeginˆIf(NotEOL_FLAG)ThenˆBeginŠIfEVAL_NUMBER(True)ThenŠBegin(ŒNUM_PARMS:=2;‚STORE_PARM(NUMBER_VALUE);ŒIf(DELIM_CHAR=';')ThenŒBegin2ŽGET_OPTIONS(False,True,False);‚PTR_PARM_BLOCK:=3;ŽCaseEVAL_LENGTHOf$BYTE_LEN:STORE_PARM(16#FF000000);$WORD_LEN:STORE_PARM(16#FFFF0000);$LNGW_LEN:STORE_PARM(16#FFFFFFFF);Otherwise‚ERROR:=11ŽEndŒEndŠEndElse‚ERROR:=7ˆEnd†EndElse‚ERROR:=6 ‚End;ƒ{OfProcedureADDR_STOP} O{*****************************************************************************} 9‚ProcedureBREAKPOINT;„{ƒ[NO]BR[[;]]...ƒ} ‚Begin<„While(NotEOL_FLAG)And(ERROR=0)And(NUM_PARMS<16)Do„Begin!†COUNT:=1;‚DELIM_FLAG[2]:=True;'†If(NotEVAL_EXP(False))ThenERROR:=65†ElseIf(Not((EXP_VALUEMod2)=0))ThenERROR:=198‹ElseIf(DELIM_CHAR=';')Then‡{ACountIsExpected}Begin’SCAN_BLANKS;‚DEF_BASE:=False;’If(EOL_FLAG)ThenERROR:=3 ’ElseBegin)”DELIM_FLAG[2]:=False;‚DELIM_CHAR:='';”If(EVAL_NUMBER(False))Then”Begin–COUNT:=NUMBER_VALUE;4–If(COUNT<=0)Or(COUNT>16#FFFF)Then‚ERROR:=12”EndElse‚ERROR:=7’EndEnd;:†NUM_PARMS:=NUM_PARMS+1;‚STORE_PARM(COUNT);‚DEF_BASE:=True„End;‚{OfWhileLoop}0„If(NotEOL_FLAG)And(ERROR=0)ThenERROR:=3!‚End;„{OfProcedureBREAKPOINT} O{*****************************************************************************} 2‚ProcedureTRACE;…{ƒTR[]‚Or‚CR[]ƒ}‚Begin)„COUNT:=1;‚NUM_PARMS:=1;‚DEF_BASE:=False;„If(NotEOL_FLAG)Then)†If(NotEVAL_NUMBER(True))ThenERROR:=7†Else‚COUNT:=NUMBER_VALUE;5„If(COUNT>0)Then‚STORE_PARM(COUNT)‚Else‚ERROR:=12‚End;„{OfProcedureTRACE} O{*****************************************************************************} !‚ProcedureGO;†{ƒG[O][]ƒ} ‚Begin„If(NotEOL_FLAG)Then†If(EVAL_EXP(False))Then ˆIf((EXP_VALUEMod2)=0)ThenˆBegin ŠIf(NotEOL_FLAG)ThenERROR:=3ˆEndElse‚ERROR:=2†ElseERROR:=6‚End;…{OfProcedureGO} O{*********************************************************@ ********************}9{---------------------NO LONGER SUPPORT IT OR OT COMMANDS:‚ProcedureTRACE_RANGE;†IT‚Or‚OT+žNOIT[]‚Or‚NOOT[]‚Begin „ERROR:=6;„If(NotEOL_FLAG)Then„Begin-†If(EVAL_EXP(False))And(NotEOL_FLAG)Then1ˆIf(EVAL_EXP(True))And(EOL_FLAG)Then‚ERROR:=0$„EndElse‚If(NO_FLAG)Then‚ERROR:=0 ‚End;†OfProcedureTRACE_RANGE}{$E}N{*******************************************************************************É**2**‹CommandProcessingRoutines--ModifyGroup“****É**O *****************************************************************************} >‚ProcedureBLOCK_FILL;…{ƒBF[;]ƒ}‚Begin „ERROR:=6;-„If(EVAL_EXP(False))And(NotEOL_FLAG)Then-†If(EVAL_EXP(False))And(NotEOL_FLAG)Then†BeginˆDELIM_CHAR:=';';ˆIf(EVAL_NUMBER(True))ThenˆBegin5ŠSTORE_PARM(NUMBER_VALUE);‚ERROR:=0;‚COUNT:=LNGW_LEN;EŠIf((STATUS_BLOCK.PARM_BLOCK[1]Mod2)<>0)Then‚COUNT:=BYTE_LEN;ŠIf(NotEOL_FLAG)ThenŠBegin2ŒGET_OPTIONS(False,True,False);‚COUNT:=EVAL_LENGTHŠEndElse‚STORE_PARM(COUNT);3ŠIf((STATUS_BLOCK.PARM_BLOCK[1]Mod2)<>0)And5Œ(COUNT<>BYTE_LEN)Then‚ERROR:=11‚Else‚NUM_PARMS:=4ˆEndElse‚ERROR:=7†End!‚End;ƒ{OfProcedureBLOCK_FILL} O{*****************************************************************************} 4‚ProcedureBLOCK_SEARCH;…{‚BS‚}‚Begin-„If(EVAL_EXP(False))And(NotEOL_FLAG)Then-†If(EVAL_EXP(False))And(NotEOL_FLAG)Then†Begin2ˆI:=0;‚GET_VALUE;‚PTR_PARM_BLOCK:=4;‚NUM_PARMS:=3;(ˆSTORE_PARM(I);‚If(I=0)Then‚ERROR:=6†EndElse‚ERROR:=6„Else‚ERROR:=6#‚End;ƒ{OfProcedureBLOCK_SEARCH} O{*****************************************************************************} 2‚ProcedureBLOCK_MOVEMEM;‚{ƒBMƒ}‚Begin „ERROR:=6;-„If(EVAL_EXP(False))And(NotEOL_FLAG)Then-†If(EVAL_EXP(False))And(NotEOL_FLAG)Then1ˆIf(EVAL_EXP(True))And(EOL_FLAG)Then‚ERROR:=0$‚End;ƒ{OfProcedureBLOCK_MOVEMEM} O{*****************************************************************************} @‚ProcedureOPENMEM_OPENREG;{ƒMM[;[][]]ƒ} ‚Begin„DELIM_FLAG[2]:=True;„If(ADR_EXP_REG)Then„Begin†If(NotEOL_FLAG)Then†BeginˆPTR_PARM_BLOCK:=3;ˆIf(DELIM_CHAR=';')ThenˆBeginŠGET_OPTIONS(False,True,True);2ŠIf(EVAL_LENGTH<>0)Then‚NUM_PARMS:=NUM_PARMS+1ˆEndElse‚ERROR:=3†End„EndElse‚ERROR:=6&‚End;ƒ{OfProcedureOPENMEM_OPENREG} O{*****************************************************************************} >‚ProcedureSET_MEM;‡{ƒMS(|)ƒ})›{ƒMS[‚for.Rregs]„}‚Begin)„If(ADR_EXP_REG)And(NotEOL_FLAG)Then†If(CODE<>MS_CODE)Then†Begin(ˆIf(NotEVAL_EXP(False))ThenERROR:=6;=ˆIf(NotEOL_FLAG)ThenIf(NotEVAL_EXP(True))ThenERROR:=6 †EndElse†Begin@ˆI:=0;‚If((STATUS_BLOCK.PARM_BLOCK[1]Mod2)<>0)Then‚I:=1;3ˆWhile(ERROR=0)And(NotEOL_FLAG)DoƒGET_VALUE;<ˆIf((STATUS_BLOCK.PARM_BLOCK[1]Mod2)<>0)Then‚I:=I-1;6ˆSTORE_PARM(I);‚NUM_PARMS:=2;‚If(I=0)Then‚ERROR:=6†End„Else‚ERROR:=6‚End;ƒ{OfProcedureSET_MEM}{$E}N{*******************************************************************************É**3**‹CommandProcessingRoutines--DisplayGroup’****É**O *****************************************************************************} $‚ProcedureCONVRT_VAL;Š{ƒDC‚} ‚Begin&„If(NotEVAL_EXP(True))Then‚ERROR:=5!‚End;‚{OfProcedureCONVRT_VAL} O{*****************************************************************************} B‚ProcedureDUMP_MEM;‚{MD[][;[]]} ‚Begin0„COUNT:=16;‚DELIM_FLAG[2]:=True;‚NUM_PARMS:=1;„If(ADR_EXP_REG)Then†If(NotEOL_FLAG)Then†BeginˆIf(DELIM_CHAR<>';')ThenŠIf(EVAL_NUMBER(True))Then>ŒIf@ (NUMBER_VALUE>0)Then‚COUNT:=NUMBER_VALUE‚Else‚ERROR:=12ŠElse‚ERROR:=7;,ˆIf(CODE=MD_CODE)Then‚STORE_PARM(COUNT);8ˆIf(DELIM_CHAR=';')Then‚GET_OPTIONS(False,True,True)†EndElse‚STORE_PARM(COUNT)„Else‚ERROR:=6‚End;ƒ{OfProcedureDUMP_MEM}{$E}N{*******************************************************************************É**;**‹CommandProcessingRoutines--SessionControlGroupŠ****É**O *****************************************************************************} &‚ProcedureDEFAULTS;ˆ{ƒDE[