þþT%dX;SAVE#D:BBKMON1.M65nEIxX;‚X;The ANALOG monitorŒX;–X;by: Bryan Schappel X;and Barry Kolbe 1985ªX;´X;COMMANDS:¾X;ÈX;?nnn = dec to hexÒX;?$nn = hex to decÜX;C$nnn = change memoryæX; C$nnnD:filespecTX; R>D:filespec1,filespec2^X;R = renamehX;E = eraserX;L = lock|X;U = unlock†X;M = mem dumpX;š>D:BBKMON4.M65¤X;® ¸X;†REINIT ÿÿ;;reinit DOSÌ …OPSCR;;open screenÖQ>4†REINIT;;resetàP†DOSINI;;vectorsê Q>5†REINITôP†DOSINIþ Q>4…START P†DOSVEC Q>5…STARTP†DOSVEC&Q>4‡PROGEND;;set memlo0P…MEMLO;;to end of:Q>5‡PROGEND;;programD P…MEMLONQ†WHICH?;;where didXF„REEX;;we enter?b …COPYZl !…BEGINv „REEX:€X;Š†DOINITQ†DOSINI;;set”P†REINIT;;variousžQ†DOSINI;;vectors to¨P†REINIT;;interrupt²Q†DOSVEC;;SYS RESET¼ P„DOSVÆQ†DOSVECÐ P„DOSVÚ Q>4…STARTä P†DOSVECî Q>5…STARTøP†DOSVEC Q>4†REINIT  P†DOSINI Q>5†REINIT P†DOSINI*Q>4‡PROGEND;;reset4P…MEMLO;;memlo>Q>5‡PROGENDH P…MEMLOR …OPSCR\Q;;cart present?f H†CRTYESp !…BEGINz†CRTYES!@ú¿:;;go cart„X;Ž…START-;;save top˜$>;;half of page 0¢ ƒCZPQ€9¬ P…MYZPG9¶0ÀIƒCZPÊQ>;;set switch to 1Ô P†WHICH?Þ…BEGIN …OPSCR;;open screenèQ>ä;;make itòPÆ;;greenü Q>4†REINIT P†DOSINI Q>5†REINITP†DOSINI$…INPUTQ>;;reset dispflg.Pþ8 …PRTCR;;print CRB †PROMPT;;show promptL…INPT2 †GETLIN;;input textV †CRUNCH`X;jX;Now find command, if any,tX;and go to the routine.~X;ˆ$> ;;scan 12 coms’Q…MYBUF;;get commandœ†CMDCMPR†CMDTXT9;;in comms?¦F†GOCOMD;;yes!°0;;try next oneº I†CMDCMPÄG„GOTR;;oops! errorΆGOCOMDA;;command indexØT?;;set up theâ>;;JMP to commandìQ†CMDADR9;;routineö P…GOCOMQ†CMDADR9  P…GOCOM%>…GOCOM!ÿÿ;;go command!( „GOTR12†GOTERR …NOWAY;;sorry error<!…INPUT;;get nextFX;PX;This is the go DOS commandZX;d†DOSCMDQ…MYBUF8;;is nextnR>ƒEOL;;char an EOLxH†GOTERR;;no Error!‚ …COPYZŒQ†REINIT;;reset–P†DOSINI;;DOS vectors Q†REINITªP†DOSINI´ Q„DOSV¾ P†DOSVECÈ Q„DOSVÒP†DOSVECÜ„DOSV!ÿÿ;;go DOSæX;ðX;Quit programúX;…QUITP …COPYZ;;copy ZpageQ>;;set switchP†WHICH?;;to zero"!†WARMST;;bye,X;6…COPYZ$>;;do 128 bytes@ƒCPZQ…MYZPG9;;get a byteJP€9;;in ZpageT0^IƒCPZ;;do next onehQ>”rPÆ| :;;bye.†X;X;Open new screenšX;¤…OPSCR$>„EDEV;;E: iocb®Q> ;;close iocb 0¸ P…ICCOM „CIOVÌ$>„EDEV;;Open 'E:'Ö Q>4„EADRà P…ICBALê Q>5„EADRô P…ICBAHþQ>;;open command P…ICCOMQ> ;;allow I/O P„AUX1&&„AUX2;;zero0!„CIOV;;CIO:X;DX;Print a CRNX;X…PRTCRQ>5‚CRb %>4‚CRlX;vX;General use print routine€X;Š…PRINTP…ICBAH;;MSB”'…ICBAL;;LSBž$>„EDEV;;E:¨Q>…PUTRC;;put record²P…ICCOM;;command.¼Q>(;;40 bytesÆ P…ICBLLÐ&…ICBLH;;zeroÚ „CIOV;;print itäG„TERR;;errorî:ø„TERR7;;pull ret7  …IOERR !…INPUT X;*X;Input a line4X;>†GETLINQ>…GETRC;;get recordH P…ICCOMR$>„EDEV;;from E:\ &…ICBLHfQ>2;;50 bytes Maxp P…ICBLLzQ>4…MYBUF;;point to my„P…ICBAL;;I/O bufferŽ Q>5…MYBUF˜ P…ICBAH¢ „CIOV;;get it!¬G†GETLIN;;again if error¶ :;;byeÀX;ÊX;INPUT masherÔ X;will return to command procÞX;if input is just a CR.èX;ò†CRUNCH$>;;first findü †FINDBEQ…MYBUF9;;end of input R>ƒEOL;;EOL? F†GOTEND;;yes! 2;;nope.$ I†FINDBE;;try next one. †GOTEND(>;;just a CR?8 F…GOTNN;;yes.B &†ENDPTR;;save lengthL $>V †SQUISHQ…MYBUF9;;get a char` R> ;;a space?j F†DOSQSH;;yes, smash!t R> >;;prompt?~ H†NOSQSH;;nope.ˆ †DOSQSHA;;now we will’ ?;;move the inputœ †SQSHLPQ…MYBUF8;;back one¦ P…MYBUF8;;char in the° 3;;buffer.º )†ENDPTR;;done yet?Ä H†SQSHLP;;nope.Î "†ENDPTR;;length down oneØ !†SQUISH;;and do againâ †NOSQSH2;;up pointerì (†ENDPTR;;done yet?ö H†SQUISH;;nope. Q…MYBUF;;get char. R>ƒEOL;;just EOL? F…GOTNN;;yes. „SQEX:;;bye.( …GOTNN7;;pull off RTS2 7< !…INPUT;;and input againF X;P X;Show the promptZ X;d †PROMPTQ>5ƒBBKn %>4ƒBBKx …PRINT‚  …PRTCR;;next line.Œ Q> >;;and put a '>'– !…PUTCH;;bye!  X;ª X;Print I/O Buffer´ X;¾ …PRTIOQ>5…MYBUF;;point toÈ %>4…MYBUF;;MYBUFÒ !…PRINT;;and print itÜ X;æ X;Error routineð X;ú …NOWAYQ…MYBUF8;;get bad char R>ƒEOL;;EOL? H…INVIT;;no. P…MYBUF8;;move over 1" Q> ;;get a space, …INVITL>€;;make inverse6 P…MYBUF8;;store it@ $>;;now printJ „PCERQ„IOER9;;the 'Error>'T  …PUTCH;;prompt^ 2h (>r H„PCER|  …PRTIO;;print MYBUF† „BEEPQ>d;; a nice tone P…AUDF1š Q>ª;;pure.¤ P…AUDC1® Q>;;let it on¸ P†RTCLOK;;for about „TONEQ†RTCLOK;;3 jiffiesÌ R>Ö H„TONEà $>;;turn off soundê &…AUDC1ô :;;bye.þ X; X;These are the ?nnn, ?$nnn X;handlers. If there is a $ X;in front of the number it& X;is assumed to be hex-dec0 X;otherwise dec-hex.: X;D „PRDH%>;;second charN Q…MYBUF8;;get itX R> $;;Hex?b H…DODEC;;no. try Dec.l 3;;get 1st charv Q…MYBUF8;;of the number€ R>ƒEOL;;is it a CR?Š H…NOEOL;;nope.” !†GOTERR;;yes. errorž …NOEOL%>;;third char.¨  ‡PULLHEX;;get the num.² Q‚HL¼ PƒFR0Æ Q‚HHÐ PƒFR0Ú …NUMIN ƒIFP;;convert itä  „FASC;;to ascii.î %>ÿ;;set up indexø „LOOP3;;to copy the Q@†INBUFF7;;asc string P„PBUF8;;to a buffer I„LOOP;;so it can be M>;;printed.* P„PBUF8;;last char4 3;;end of string> „PBFRQ>ƒEOL;;install EOLH P„PBUF8;;in bufferR Q>5„PBUF;;and print it.\ %>4„PBUFf …PRINTp !…INPUT;;get nxt comm.z X;„ X;Decimal to Hex routineŽ X;˜ …DODECQ>;;point to 2nd¢ PƒCIX;;char in MYBUF¬ Q>4…MYBUF;;for ASC-FP¶ P†INBUFF;;conversionÀ Q>5…MYBUFÊ P†INBUFFÔ  ƒAFP;;convert itÞ  ƒFPI;;make integerè  ‡BIN2HEX;;convert to hexò %>;;copy it.ü Q> $;;put in a '$' P„PBUF…DLOOPQ†PRNBUF8;;move outP„PBUF8;;the HEX num$3;;to the buffer.)>;;done?8H…DLOOP;;not yet.B!„PBFR;;print it.LX;VX;Handle Change memory`X;j†CHGMEMQ…MYBUF8tR> $~ H…CMERRˆ3’ ‡PULLHEXœQ„HCNT;;any chrs?¦F…CMERR;;no. error°R>º E„CME1ÄQ‚HL;;copy fp toÎP„TEMP;;zpage forØQ‚HH;;lookupâ P„TEMPìQ>;;zero bytesöP„NDIG;;(y index) Q…MYBUF8  R><;;'<'?H…CMERR;;ERROR!„DOCM3;;up char( ‡PULLHEX;;get number2 Q„HCNT< F…CMERRFR>;;2 digitsP E„CME1ZQ‚HL;;take LSBd '…SAVEYn%„NDIG;;get offsetxP@„TEMP7;;poke it in‚#„NDIG;;nxt locŒ %…SAVEY– Q…MYBUF8 R>ƒEOL;;done yet?ªF…CMDON;;yes.´ R>,;;','?¾F„DOCM;;not doneÈ…CMDON!…INPUTÒ „CME11Ü…CMERR!†GOTERRæX;ðX;Handle DIR commandúX;…DIRECQ…MYBUF8R>ƒEOL;;just EOL?F„DRV1;;yes. drive 1" R>,;;','?,F„DRV?;;yes.6…DRVER!†GOTERR@„DRV1Q> 1;;set drive 1JP†DIRNAMTH†GOTDIR;;get dir^ „DRV?3hQ…MYBUF8;;get drive #r R> 1;;< 1?|D…DRVER;;yes.† R> 5;;> 4?E…DRVER;;yes.šP†DIRNAM;;no use a D#¤†GOTDIR †DCLOSE;;close D:® $>„DDEV¸Q>;;open D:ÂP…ICCOM9;;to readÌQ>4†DIRNAM;;the diskÖP…ICBAL9;;directoryà Q>5†DIRNAMê P…ICBAH9ôQ>;;gdir comþ P„AUX19Q> P„AUX29 „CIOV&IƒNER0 …IOERR: !„DERRDƒNER$>„DDEV;;set up CIO toNQ>…GETRC;;get recordsX P…ICCOM9b Q>4…MYBUFl P…ICBAL9v Q>5…MYBUF€ P…ICBAH9ŠA” P…ICBLL9žQ>¨ P…ICBLH9²†GETDIR$>„DDEV;;get record¼ „CIOVÆ I…NOERRЄDERR †DCLOSE;;done so closeÚ!…INPUT;;and leaveä…NOERR …PRTIO;;print itî!†GETDIR;;go again.øX;X;XIO handlers X;„LOCKQ>#;;lock command  H…DOXIO*†UNLOCKQ>$;;unlock command4 H…DOXIO>†DELETEQ>!;;delete commandH H…DOXIOR†RENAMEQ> ;;rename command\X;f…DOXIO5;;save commandp †DCLOSE;;close diskz$>„DDEV;;use Dn:„7;;get commandŽP…ICCOM9;;store it˜Q>4…MYBUF ;;point to¢P…ICBAL9;;the filename¬Q>5…MYBUF ¶ P…ICBAH9À „CIOV;;do functionÊIƒXGD;;good one? yes.Ô …IOERR;;nope. show errÞƒXGD!…INPUT;;bye.èX;òX;Close D: deviceüX;†DCLOSE$>„DDEV;;Dn:Q> ;;close com P…ICCOM9$!„CIOV;;SLAM!.X;8X;Handle I/O errorBX;L…IOERR'ƒFR0;;save errnumVQ>` PƒFR0j ƒIFPt „FASC;;con to asc~%>ÿˆ$>;;copy to buf’ „IOLP3œ2¦ Q@†INBUFF7° P„IOER9º I„IOLPÄM>ÎP„IOER9;;in err bufØ2âQ>ƒEOL;;install EOLì P„IOER9ö …PRTCR †DCLOSE Q>5„IOER;;print it %>4„IOER …PRINT( !„BEEP2X;<X;Binary to hexadecimalFX;P‡BIN2HEX%>;;buf indx=0Z$>;;do 2 numsd†NXTBYT&…SAVEX;;save itnQ>ð;;get HI bitsx MƒFR09‚V?;;divide by 16ŒV?–V? V?ª>;;to index´Q†HEXDIG9;;get char¾P†PRNBUF8;;and saveÈ3;;up buf indexÒ$…SAVEX;;get X backÜQ>;;now LO bitsæ MƒFR09ð>úQ†HEXDIG9;;get char andP†PRNBUF8;;put in buffer3;;up buf indx$…SAVEX;;get X"0;;down by one,I†NXTBYT;;done?6:;;yes. bye.@X;J!X;This is the command text andTX;addresses of routines^X;plus string positions forhX;Show command.rX;|†CMDTXT AŽ?FXCLUERDQASBMA††CMDADR „PRDH;;? …DIREC;;Fš †DOSCMD;;X¤ †CHGMEM;;C® „LOCK;;L¸ †UNLOCK;;U †DELETE;;EÌ †RENAME;;RÖ „DISA;;DISAà …QUITP;;quit progê ƒASM;;ASMô …BSAVE;;bin saveþ …BLOAD;;bin load „MDUM;;mem dumpX;"X;Miscellaneous Text & Dev nams&X;0„EADR A‚E:A=ƒEOL:†DIRNAM A†D1:*.*AD ‚CR ƒEOLN„IOER AŠError> A=ƒEOLX†HEXDIG A0123456789ABCDEFAb„PBUF A†= A=ƒEOLlƒBBK A‹BBK MONITORA=ƒEOLv †WHICH? € …XSAVEŠ …YSAVE”X;ž>D:BBKMON2.M65¨>D:BBKMON3.M65²>D:BBKMON5.M65¼IÆ ‡PROGEND ÐEIÚâä †DOINIT