MINITEXT40 DSK ( CHARA1 "pCHARA2 *0MINITESTER.MTXT40:DCA#P#G MTXT40:DCB !P jMTXT40:L 'nP{`MTXT40:MSGPPMTXT40:O PKMTXT40:S P MTXT40:SA $P$0MTXT40:SB 6@P6PMTXT40:SC QP-MTXT40:SD jPKQMTXT40:SE ZPaMTXT5LINE  q $$  $< $$   8$  $$ $ 8@ 8$8pPpHTp@p $< @@@@$$ (@@X$<@@X$$@@T@@\@@H8$@@\@@X$$@@X$@@@$<$@@P@@@@DD888888@LP (HH\\HH,T0Txdh L 䎄   (|(| @x  @8LTdD808BB:=w"5B71.)#.-.|./v,l"7b)X)N)-D)1:)50'&)B)F()S'',,--"-.-?-/)`00|+sr0h#^$T0<J0@06)n,%A")|$&$h01X1k1w%p1+#+)"#$$x$n/d#Z%P#F/(4(*2 2' 233343R3e3i2"M02"j07v"l"b4;X7N,VD":,|05&5 55*4H55b5*5"+f5*4^445|0r+h+^,T5J*@5u65,*"+ 0*0.77777+F6m6+T+X67.. x.n"d" CALL LINK("DUMP") LINKVSCROL3140LINKSCRLT1015LINKVSCROL1030LINKHSCROL1030LINKSCRLT424 I124 CLEAR%LINKFORMATTIT$I188LINKPRINTT#right justified to a length of 8...9LINKPRINTT$Now let's try rounding to one place,D12000&LINKACCEPTI2018TI I15$LINKDISPAT20I22T$II,LINKDISPAT51Try it 3 times.ALINKDISPAT71$Try entering more than three digits.ULINKDISPAT418And I can specify the length of the accepting field. I13I-LINKDISPAT20I20 >| |<DLINKDISPAT31'and can be punctuated any way you want..LINKDISPAT918See what I mean?/LINKPRINTTPress any key to continue.LINKPRINTTLINKPRINTT)LINKINPUTTInput a number... N<LINKPRINTT'Here it is fixed to two decimal places.6LINKPRINTT!them for display any way we like.D D1500*LINKPRINTTget random numbers... D1500"LINKPRINTT key to go on.LINKPRINTT'LINKPRINTTBASIC color codes.;LINKPRINTT&INPUTT-ing your choices using standard<LINKPRINTT'Pick your favorite color combination by D1300,LINKDISPAT51Watch me flash.LINKREVERT5115LINKREVERT5115*LINKPRINTTBad Value. Try again.B1B161*LINKPRINTTBad Value. Try again.F1F161LINKINVERT5115LINKPRINTTD D1300D D1300LINKCOLORTFBD D1400ID D110D D110 I110 D1400 D1400!LINKACCEPT9103NI)LINKPRINTTYou can use sound...LINKCLEARTַKC S0$KEY0KS;LINKPRINTT&Enter [C] to change again or any other"LINKINPUTT Background B"LINKINPUTT Foreground FLINKPRINTT D1400 D1350ַKB^;LINKPRINTT&other key to leave the new characters.:LINKPRINTT%Press [B] to change back or press any D1300D D1300 I121$LINKACCEPT6I110N$I I13LINKCLEARTLINKPRINTTRLINKPRINTT3LINKPRINTTjust like you can in TI BASIC.;LINKPRINTT&We can also PRINT strings and numbers,%LINKDISPATI1طD$I40UD$OABCDEFGHIJKLMNOPQRSTUVWXYZ123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789012345678LINKCLEART S0KEY0KSLINKINVERT5115 S0KEY0KSWLINKDISPAT1519Press any key once to INVERT, again to REVERT to normal.nLINKDISPAT121PFinally, you can convert part of your display to INVERSE VIDEO and back again.ICHARII128159DNLINKDISPAT811So read through the documentation, then have fun!jLINKDISPAT51MRemember, 25% more room on screen means more clarity in your screen displays.5LINKDISPAT31utility programs can be.lLINKDISPAT11OSo that's about it. Play around yourselfand you'll see how valuable this set ofD I13<LINKPRINTT'You input 3 times and I'll do the rest!LINKPRINTTLINKPRINTT I16 I124 D1350D D1300kLINKDISPAT11NI can also accept a string, and a stringcan be anything, even the null string,I.LINKDISPAT6I20 Entry was: N$ I13LINKCLEARTDYLINKDISPAT117118, and will take up all butK100 bytes of the available space. Since the REF-DEF table is located in theNMINI-MEN, loading too many additional machine language routines in addition toOthe MINI-40 PACK may cause the REF/DEF table and/or the utilities themselves toPbe overwritten! Proceed with caution. If you have memory expansion, however, the)file area EXPMEM2 is available for files. GENERAL INFORMATIONLThere are 18 utility programs in the package which you may access from BASIChemselves toNvia CALL LINK. The utilities allow you to enter and exit the 40-column displayFmode at will within a BASIC program. YOU MAY NOT ACCESS THE 40-COLUMN)DISPLAY IN THE IMMEDIATE OR COMMAND MODE. h you may access from BASIChemselves toNThese utilities were designed to be simple and compact, so that they could fitLinto the 4K of RAM available in the Mini-Mem. When error checking is done isOgenerally involves testing parameters for legal limits. If an error is detectedLno error message is issued; the utilities just return to BASIC without doingLanything. If you try to crash or lock-up a utility, however, you may well beable to do so. MMany of the utilities can be used in either 32-column or 40-column modes. TheKpackage keeps track of which mode you are in and adjusts certain parametersMaccordingly. If your program breaks, however, while in 40-column mode and youNrestore screen visibility with a CALL LOAD as described below, the screen sizelumn modes. TheOparameters will be incorrect. They will correct themselves on the first call toLthe 'TEXT' or 'RETURN' utilities. You may execute CALL LINK("RETURN") in theKimmediate mode. An error message may be issued, but no harm is done and thelumn modes. TheMscreen size parameters will have been corrected. The only problem is that thescreen will have been cleared. JNone of the parameters given in the lists below are optional; they must beage may be issued, but no harm is done and thelumn modes. TheKincluded as listed in each call to the given utility. The display and inputNutilities, however, will handle strings or numbers (listed as N/M$), dependingNon whether you use a string or numeric expression or variable in the parameterumn modes. TheFlist passed through LINK. The keyboard entry routines will not issue aN"string-number mismatch" warning if you enter a string when a numeric variableOis specified. The utilities will simply assign a value of zero to the variable,terumn modes. Theand return normally to BASIC. MIf your program breaks while in 40-column mode due to a syntax or other errorLin BASIC, the BASIC interpreter in the console will usually return to normally assign a value of zero to the variable,terumn modes. TheFdisplay automatically. If you break your program, however, the displayMreverts to normal but will be invisible. Should this occur, carefully type inOCALL LOAD(-31788,224). Press , wait a second, then press any key and theterumn modes. TheLdisplay will become visible again. If it doesn't work it will be because youImade a typing error in the CALL LOAD statement; try again. This is a goodMmethod because it restores screen visibility so you see the error message andterumn modes. TheLline number reference issued by BASIC. But remember the note above about theLscreen size parameters and ALWAYS execute CALL LINK("RETURN") in the command$mode BEFORE you resume your program. ty so you see the error message andterumn modes. TheOBefore you read about the utilities, watch them work (and test them) by runningDthe sample program which is in DL3 as a test file called MTXT40.DMO. NOTE ON KEYBOARD INPUTKThis revision includes an improved and expanded keyboard input routine thatNparallels normal TI operations including DELETE and INSERT. All utilities thatKutilize keyboard input feature auto-repeat on every key. You may adjust theOdelay before auto repeat initiates, and you may adjust the speed of repitition.t routine thatKThese values are located at addresses >7124 and >7126 respectively, and areIset at >0110 and >0028. Be cautious when playing with these values! As anOexample of relative speed, the cursor in the utility input routines has a flashduration of >0100. UTILITY DESCRIPTIONS++++++++++++++++++++ CALL LINK("TEXT")DThis is the utility which enters the 40-column display mode. It willautomatically clear the screen. CALL LINK("RETURN")or in the utility input routines has a flashduration of >0100. IThis utility returns from 40-column mode to regular graphics mode. AlwaysOreturn to normal mode before your program ends. This utility also automaticallyclears the screen. !CALL LINK("COLORT",fcolor,bcolor)routines has a flashduration of >0100. LThis utility sets the foreground and background colors in 40-column mode. DoNnot use CALL SCREEN or CALL COLOR in 40-column mode. The initial color settinsN(after CALL LINK("TEXT")) are black on light green, the same as BASIC. You mayion of >0100. like other combinations better. CALL LINK("CLEART")NThis utility clears the display instantaneously, just like CALL CLEAR. It will&in either 32-column or 40-column mode. CALL LINK("ALCHAR") light green, the same as BASIC. You mayion of >0100. NThis utility loads an entirely new character set with true lower case and fullLascenders and descenders. It was designed for use with the 40-coloum displayLbut you may invoke it in any screen mode. The utility loads ASCII 30 throughyion of >0100. FASCII 126 from a disk file called CHARA2. NOTE THAT THE TI-WRITER FILEL"CHARA1" WILL NOT REPLACE CHARA2! If you have a set of character definitionsOyou like better than mine, send them to me as a DV80 file on a disk with returnoughyion of >0100. Ppostage and I will customize CHARA2 to your patterns. (Or if you like mine, sendOa blank disk and return mailer and I will send you a CHARA1 file using the sameHset that loads into TI-WRITER, and an altered EDITA1 file which providesion of >0100. Lthe necessary cursor patterns.) If CHARA2 is not present on DSK1 the utilityIsearches for it briefly, changes the cursor pattern anyway, then returns. CALL LINK("CHRSET")OThis utility returns to the console's standard character set from the alternateLset. It may also be used to reset characters 32-126 after you have used them)for graphics. Use only on 99-4/A console. $CALL LINK("HCHART",row,col,leng,asc)HThis utility emulates BASIC's HCHAR. It will display any ASCII characteret from the alternateNhorozintally for any number of repititions, wrapping from one screen line downOto the next if necessary. Please note, however, that the parameters are listedKin a different order from BASIC: length or number of repititions before therom the alternateKACSII value of the character. Also note that this display is instantaneous,Nmuch faster than CALL HCHAR in BASIC. If the number of repetitions you specifyLfrom your row and column location would extend beyond the end of the screen,herom the alternateNthe utility will return to BASIC without displaying anything. HCHART will workin either display mode. "CALL LINK("SCRLT",row1,row2,count)LThis is one of three selective screen scrolls provided. This one will scrollof the screen,herom the alternateOupwards any horizontal screen segment defined between two rows. Specifying rowsO1 and 24, for example, will scroll the entire screen. Specifying illegal valuesNwill cause the utility to abort and return to BASIC without any screen effect.the alternateLThe count is the number of iterations of the scroll, which must be positive.OAll of these three scrolling utilities will work on the normal 28-column or the40-column display! #CALL LINK("HSCROL",col1,col2,count)thout any screen effect.the alternateLThis scroll works the same as the one above except you define the segment ofIthe screen between any two columns, leaving the display on either side inplace. #CALL LINK("VSCROL",col1,col2,count),col1,col2,count)thout any screen effect.the alternateOThis scroll also works on a screen area defined between any two columns, but itGscrolls to the right. The best way to understand the potential of theseOscrolling routines is to study how they are used in various combinations in thesample BASIC program. is scroll also works on a screen area defined between any two columns, but itGscrolls to the right. The best way to understand the potential of theseOscrolling routines is to study how they are used in various combinations in thesample BASIC program. CALL LINK("INVERT",row,col,leng)MThis program will produce "inverse video" on a segment of any one screen lineMup to 32 characters long. It uses (and redefines) characters 128 through 159,Lso if you plan to use inverse video do not use those characters for graphicsGdisplay. NOTE: Your basic program must "initialize" these characters byJdefining them in a CALL CHAR statement before you call the utility. A loopKlike: FOR I=128 to 159 - CALL CHAR(I,"") - NEXT I will do the trick. If youNspecify parameters which go beyond the end of the 40-column screen the utilityJwill abort and return to BASIC without changing the display. Use in either display mode. CALL LINK("REVERT",row,col,leng)OThis utility will restore an inverted section of the screen. It should be givenNthe screen location parameters from the previous call to INVERT to display thet changing the display. Use in either display mode. Lline as it was. If you scroll or otherwise change the screen display betweenJINVERT and REVERT, you can specify the new screen location of the INVERTedKsection to REVERT it. Do not use REVERT without a previous INVERT, however,r display mode. Hsince REVERT looks for and displays the actual character string that waspreviously INVERTed. )CALL LINK("FORMAT",numb,n$,decimals,leng)NThis is a number formatter which will work in any display mode. It changes the, however,r display mode. Mgiven number or numeric variable into a string with the number rounded off orNextended up to the given number of decimal places. It then right-justifies theOstring to the length specified. If the string is too long for the given length, mode. MThe utility returns a string of asterisks. If the number of decimal places isMgiven as zero, no decimal formatting takes place, but the number is convertedLto a string (like STR$(N)) and right justified to the specified length. Thisth, mode. Outility will work in COMMAND or IMMEDIATE mode (outside a BASIC program) so youLcan sit and play with it, testing various numbers and conversion parameters,%then examining the resultant strings. CALL LINK("DISPAT",row,col,N/M$)isth, mode. IThis utility will display a number or string starting at the given screenLlocation. If the given location is off the screen the utility will abort andOreturn to BASIC without displaying anything. The utility will handle strings upsth, mode. Nto the maximun length allowed in BASIC (254 characters), and strings will wrapNautomatically from one line down to the next. Numbers will be displayed in theOstandard BASIC format. If the given display parameter is too long to fit on themode. Kscreen the utility will only display the portion that fits and then return.MYou may of course use FORMAT to convert a number to a formatted string before7using DISPAT. You may use DISPAT in either screen mode. CALL LINK("PRINTT",N/M$)mode. NThis utility emulates the BASIC command PRINT. It scrolls the entire screen upMone row and displays the given number or string starting at row 24, column 1.MThe utility will not accept any string longer than 40 characters. Numbers are)mode. Hdisplayed in BASIC format. The screen does not scroll after the display,Eleaving the display on line 24 unless you scroll the screen on with a7002; in the E-A memory map it is location >200A. CLOSING REMARKSORUM asJLoading these utilities turns your Mini-Memory cartridge into a "40-ColumnHCard" and increases your screen capacity by 25%. It also provides screenJdisplay control you cannot achieve in BASIC or even in Extended BASIC. TheA. CLOSING REMARKSORUM asMroutines are not as sophisticated as the BASIC interpreter, however, and theyOdo allow you to get yourself into trouble if you use them with wierd parametersLor in inappropriate situations. If you're sure that you are doing everything REMARKSORUM asNright and your parameters are legal and you still don't understand the resultsLyou're getting, send me a copy of your application program and I'll see if I#can figure out what has gone wrong. RICHARD MINUTILLO [72277,1062]74 Hawthorne StreetRUM asRoslindale Massachusetts02131 al and you still don't understand the resultsLyou're getting, send me a copy of your application program and I'll see if I#can figure out what has gone wrong. RICHARD MINUTILLO [72277,1062]74 Hawthorne StreetRUM as  99/4 ASSEMBLERFMINI-40-PACK -- Version 2.0 PAGE 0001< 0001 *--------------------------------------* < 0002 * MINI 40 PACK - Version 2.0 * < 0003 * * < 0004 * Featuring improved CURSOR * < 0005 * routine, and improved * < 0006 * character set which loads * < 0007 * from binary disk file 'CHARA2' * < 0008 * * < 0009 * July 20, 1985 * < 0010 *--------------------------------------*  0011 *  0013 * & 0014 7118 AORG >7118  0015 * 0 0016 COPY "DSK1.MTXT40:SA" $ 0017 * MTXT40:SA  0018 * -----------------------* < 0019 *--------------------------------------* < 0020 * EQUATES, VARIABLES & PARAMETERS * < 0021 *--------------------------------------*  0022 * & 0023 8375 KEY EQU >8375 & 0024 834A FAC EQU >834A & 0025 837C STATUS EQU >837C & 0026 8356 PNTR EQU >8356 L 0027 7002 ARGID EQU >7002 *CHANGE IF NON-MINIMEM VERSION & 0028 9802 GRMRA EQU >9802 U >8375 & 0029 9C02 GRMWA EQU >9C02 B 0030 03C0 BTEMP EQU >03C0 *BASIC ROLL-OUT AREA & 0031 0400 PATTAD EQU >0400 & 0032 7118 0000 PAB DATA >0000 & 0033 711A 0100 PTEST DATA >0100 >9802 U >8375 & 0034 711C 0000 SAVRT DATA >0000 & 0035 711E 0000 LENG DATA >0000 & 0036 7120 0020 LINLEN DATA >0020 & 0037 7122 0300 EOS DATA >0300 & 0038 7124 0110 LONG DATA >0110 & 0039 7126 0028 SHORT DATA >0028 >8375 & 0040 7128 0000 RPTIME DATA >0000 $ 0041 712A 00 ZERO BYTE >00 $ 0042 712B 03 H3 BYTE >03 $ 0043 712C 04 H4 BYTE >04 $ 0044 712D 07 H7 BYTE >07 $ 0045 712E 08 H8 BYTE >08 >0028 >8375 $ 0046 712F 09 H9 BYTE >09 $ 0047 7130 0D HD BYTE >0D $ 0048 7131 20 H20 BYTE >20 $ 0049 7132 28 H28 BYTE >28 $ 0050 7133 60 BO BYTE >60 $ 0051 7134 7E H7E BYTE >7E >0028 >8375 $ 0052 7135 7F H7F BYTE >7F $ 0053 7136 80 H80 BYTE >80 $ 0054 7137 FF NOKEY BYTE >FF $ 0055 7138 00 CBYTE BYTE >00 $ 0056 7139 00 INSERF BYTE >00 $ 0057 713A 00 SAVKEY BYTE >00 0058 EVEN  0059 * < 0060 *--------------------------------------*   99/4 ASSEMBLERFMINI-40-PACK -- Version 2.0 PAGE 0002< 0061 * PABS * EVEN < 0062 *--------------------------------------*  0063 * & 0064 713C 0000 PBDATA DATA >0000 & 0065 713E 0100 DATA >0100 & 0066 7140 0010 DATA >0010 & 0067 7142 0000 BUFADR DATA >0000 EVEN $ 0068 7144 50 BYTE >50 $ 0069 7145 20 BYTCNT BYTE >20 & 0070 7146 0000 DATA >0000 $ 0071 7148 00 BYTE >00 $ 0072 7149 03 NAMELG BYTE >03 & 0073 714A 50 PBNAME TEXT 'PIO' DATA >0000 EVEN 0074 EVEN  0075 * & 0076 714E 0500 CARPAB DATA >0500 & 0077 7150 03EA DATA >03EA & 0078 7152 0000 DATA >0000 & 0079 7154 030F DATA >030F $ 0080 7156 00 BYTE >00 EN $ 0081 7157 0B BYTE >0B . 0082 7158 44 TEXT 'DSK1.CHARA2' 0083 EVEN  0084 * < 0085 *--------------------------------------* A >030F $ 0080 7156 00 BYTE >00 EN < 0086 * BUFFERS & CHARACTER DEFS * < 0087 *--------------------------------------*  0088 * $ 0089 7164 SMLBUF BSS >10 $ 0090 7174 INVBUF BSS >20 7156 00 BYTE >00 EN $ 0091 7194 ALTWS BSS >20 $ 0092 71B4 CARBUF BSS >2A $ 0093 71DE LGBUFF BSS >100 " 0094 72DE SAVEG BSS >2 0095 EVEN  0096 * VBUF BSS >20 7156 00 BYTE >00 EN 8 0097 72E0 3838 ALTCUR DATA >3838,>3838,>3838,>0000  72E2 3838  72E4 3838  72E6 0000 8 0098 72E8 0000 LINCUR DATA >0000,>0000,>0000,>00FE  72EA 0000  72EC 0000  72EE 00FE BYTE >00 EN 8 0099 72F0 007C BASCUR DATA >007C,>7C7C,>7C7C,>7C7C  72F2 7C7C  72F4 7C7C  72F6 7C7C & 0100 72F8 72F0 CURPAT DATA BASCUR  0101 * < 0102 *--------------------------------------* BYTE >00 EN < 0103 * REFERENCES AND DEFINITIONS * < 0104 *--------------------------------------*  0105 * 8 0106 REF VSBW,VMBW,VSBR,VMBR,VWTR -------------------------------* BYTE >00 EN : 0107 REF KSCAN,NUMREF,STRREF,NUMASG < 0108 REF STRASG,XMLLNK,GPLLNK,DSRLNK  0109 * : 0110 DEF TEXT,RETURN,CLEART,DISPAT   99/4 ASSEMBLER-------------* BYTE >00 EN FMINI-40-PACK -- Version 2.0 PAGE 0003: 0111 DEF HCHART,COLORT,DUMP,PRINTT 4 0112 DEF INVERT,REVERT,FORMAT < 0113 DEF ACCEPT,ALCHAR,INPUTT,CHRSET 0 EN 4 0114 DEF VSCROL,HSCROL,SCRLT  0115 * < 0116 *--------------------------------------* < 0117 * UTILITY TO PRINT BUFFER AT R03 * DEF ACCEPT,ALCHAR,INPUTT,CHRSET 0 EN < 0118 * TO SCREEN AT LOCATION IN R00 * < 0119 *--------------------------------------*  0120 * J 0121 72FA D133 PRBUF MOVB *3+,4 *GET STRING LENGTH FOR USE AS ALCHAR,INPUTT,CHRSET 0 EN D 0122 72FC 0984 SRL 4,8 *INDEX AND MOVE TO LSB D 0123 72FE D073 PBUFA MOVB *3+,1 *GET ONE BYTE OF STRING D 0124 7300 0221 AI 1,>6000 *ADD BASIC OFFSET VALUE  7302 6000 ,INPUTT,CHRSET 0 EN H 0125 7304 0420 BLWP @VSBW *USE VSBW TO WRITE ONE BYTE  7306 0000 : 0126 7308 0580 INC 0 *NEXT ADDRESS D 0127 730A 8800 C 0,@EOS *BEYOND END OF SCREEN?  730C 7122 T 0 EN 8 0128 730E 1302 JEQ PROUT *IF SO STOP > 0129 7310 0604 DEC 4 *DECREMENT INDEX L 0130 7312 16F5 JNE PBUFA *WRITE ANOTHER BYTE IF NOT DONE  0131 7314 045B PROUT RT  0132 * < 0133 *--------------------------------------* < 0134 * LOADS ALTERNATE CHARACTERS * < 0135 * FROM DISK: "DSK1.CHARA2" * < 0136 * CALL LINK("ALCHAR") * * < 0137 *--------------------------------------*  0138 * < 0139 7316 0200 ALCHAR LI 0,>0020 *BYTES FOR PAB  7318 0020 ( 0140 731A C800 MOV 0,@>830C  731C 830C R") * * ( 0141 731E 04E0 CLR @STATUS  7320 837C ( 0142 7322 0420 BLWP @GPLLNK  7324 0000 F 0143 7326 0038 DATA >0038 *ALLOCATE VDP RAM FOR PAB  0144 * ( 0145 7328 C020 MOV @>831C,0  732A 831C ( 0146 732C 0201 LI 1,CARPAB  732E 714E ( 0147 7330 0202 LI 2,>0015  7332 0015 B 0148 7334 0420 BLWP @VMBW *PAB DATA TO VDP RAM  7336 0000 C020 MOV @>831C,0 ( 0149 7338 04E0 CLR @STATUS  733A 837C ( 0150 733C 0220 AI 0,>0009  733E 0009 ( 0151 7340 C800 MOV 0,@PNTR  7342 8356 ( 0152 7344 04E0 CLR @STATUS  7346 837C OV @>831C,0 < 0153 7348 0420 BLWP @DSRLNK *LOAD 'CHARA2'  734A 0000   99/4 ASSEMBLERFMINI-40-PACK -- Version 2.0 PAGE 0004& 0154 734C 0008 DATA >0008  0155 * 6 837C OV @>831C,0 ( 0156 734E 0201 LI 1,ALTCUR  7350 72E0 N 0157 7352 C801 MOV 1,@CURPAT *POINT TO ALTERNATE CURSOR PATTERN  7354 72F8  0158 * ( 0159 7356 04E0 CLR @STATUS  7358 837C V @>831C,0  0160 735A 045B RT  0161 * < 0162 *--------------------------------------* < 0163 * LOADS STANDARD CHARACTERS * < 0164 * CALL LINK("CHRSET") * C V @>831C,0 < 0165 *--------------------------------------*  0166 * > 0167 735C 0200 CHRSET LI 0,PATTAD *CHAR 32 ADDRESS  735E 0400 & 0168 7360 C800 MOV 0,@FAC  7362 834A * C V @>831C,0 ( 0169 7364 04E0 CLR @STATUS  7366 837C 8 0170 7368 0420 BLWP @GPLLNK *UPPER CASE  736A 7324 & 0171 736C 0018 DATA >0018 8 0172 736E 0420 BLWP @GPLLNK *LOWER CASE  7370 736A 0 & 0173 7372 004A DATA >004A < 0174 7374 0200 LI 0,>03F0 *CURSOR ADDRESS  7376 03F0 L 0175 7378 0201 LI 1,BASCUR *POINT TO BASIC CURSOR PATTERN  737A 72F0 *LOWER CASE  7370 736A 0 JA Group of programs and files called MTXT40 are available. MTXT40:BIN is aOcompressed object file which loads into the MINI-MEMORY, making available a setMof utilities accessed through CALL LINK which can control and operate in TEXTKMODE. The utilities include input and display routines which emulate INPUT,JACCEPT, PRINT and DISPLAY, as well as special scrolling routines, an ASCIIKscreen dump, a number formatter, and full control over display mode, screen TEXTPcolors, etc. Most of the utilities work in either screen size, greatly enhancingOTI BASIC. An older version of this utility package had been briefly offered for03>9C029~B Bq BBq"BBB Bq"B` Bq BBB B~tBB@BBB[F 4~VSBW 4~VMBW 4VSBR 4~VMBR 4t$VWTR F 4vKSCAN 4~NUMREF4ySTRREF4{&NUMASG4}dSTRASGF 00 *VWTR24~XMLLNK4} GPLLNK4uPDSRLNK6sTEXT 6tRETURNF 6t^CLEART6xDISPAT6{HCHART6sCOLORT6tzDUMP F 6y.PRINTT6|INVERT6|REVERT6|FORMAT6zACCEPTF 00 *VWTR26sALCHAR6yINPUTT6s\CHRSET6~VSCROL6~HSCROLF 6}SCRLT F : 99/4 AS -- Vers 0075DECREMENT INDEX(*--------------------------------------*(* MINI 40 PACK - Version 2.0 *(* *(* Featuring improved CURSOR *(* routine, and improved *(* character set which loads *(* from binary disk file 'CHARA2' *(* *(* July 20, 1985 *(*--------------------------------------**) TITL 'MINI-40-PACK -- Version 2.0'* AORG >7118*h loads * COPY "DSK1.MTXT40:SA" COPY "DSK1.MTXT40:SB" COPY "DSK1.MTXT40:SC" COPY "DSK1.MTXT40:SD" COPY "DSK1.MTXT40:SE"* END----**) TITL 'MINI-40-PACK -- Version 2.0'* AORG >7118*h loads ** MTXT40:SA*(*--------------------------------------*(* EQUATES, VARIABLES & PARAMETERS *(*--------------------------------------**KEY EQU >8375FAC EQU >834ASTATUS EQU >837CPNTR EQU >83567ARGID EQU >7002 *CHANGE IF NON-MINIMEM VERSIONGRMRA EQU >9802GRMWA EQU >9C02-BTEMP EQU >03C0 *BASIC ROLL-OUT AREAPATTAD EQU >0400PAB DATA >0000PTEST DATA >0100SAVRT DATA >0000LENG DATA >0000LINLEN DATA >0020EOS DATA >0300LONG DATA >0110SHORT DATA >0028RPTIME DATA >0000ZERO BYTE >00H3 BYTE >03H4 BYTE >04H7 BYTE >07H8 BYTE >08H9 BYTE >09HD BYTE >0DH20 BYTE >20H28 BYTE >28BO BYTE >60H7E BYTE >7EH7F BYTE >7FH80 BYTE >80NOKEY BYTE >FFCBYTE BYTE >00INSERF BYTE >00SAVKEY BYTE >00 EVEN*(*--------------------------------------*(* PABS *(*--------------------------------------**PBDATA DATA >0000 DATA >0100 DATA >0010BUFADR DATA >0000 BYTE >50BYTCNT BYTE >20 DATA >0000 BYTE >00NAMELG BYTE >03PBNAME TEXT 'PIO' EVEN*CARPAB DATA >0500 DATA >03EA DATA >0000 DATA >030FA DATA >0000 BYTE >00 BYTE >0B TEXT 'DSK1.CHARA2' EVEN*(*--------------------------------------*(* BUFFERS & CHARACTER DEFS *(*--------------------------------------**SMLBUF BSS >10INVBUF BSS >20ALTWS BSS >20A >0000CARBUF BSS >2ALGBUFF BSS >100SAVEG BSS >2 EVEN*#ALTCUR DATA >3838,>3838,>3838,>0000#LINCUR DATA >0000,>0000,>0000,>00FE#BASCUR DATA >007C,>7C7C,>7C7C,>7C7CCURPAT DATA BASCUR*(*--------------------------------------*WS BSS >20A >0000(* REFERENCES AND DEFINITIONS *(*--------------------------------------**$ REF VSBW,VMBW,VSBR,VMBR,VWTR& REF KSCAN,NUMREF,STRREF,NUMASG' REF STRASG,XMLLNK,GPLLNK,DSRLNK*% DEF TEXT,RETURN,CLEART,DISPAT >20A >0000% DEF HCHART,COLORT,DUMP,PRINTT DEF INVERT,REVERT,FORMAT' DEF ACCEPT,ALCHAR,INPUTT,CHRSET DEF VSCROL,HSCROL,SCRLT*(*--------------------------------------*(* UTILITY TO PRINT BUFFER AT R03 *LEART,DISPAT >20A >0000(* TO SCREEN AT LOCATION IN R00 *(*--------------------------------------**6PRBUF MOVB *3+,4 *GET STRING LENGTH FOR USE AS/ SRL 4,8 *INDEX AND MOVE TO LSB0PBUFA MOVB *3+,1 *GET ONE BYTE OF STRINGPAT >20A >00000 AI 1,>6000 *ADD BASIC OFFSET VALUE4 BLWP @VSBW *USE VSBW TO WRITE ONE BYTE& INC 0 *NEXT ADDRESS/ C 0,@EOS *BEYOND END OF SCREEN?$ JEQ PROUT *IF SO STOPOF STRINGPAT >20A >0000) DEC 4 *DECREMENT INDEX8 JNE PBUFA *WRITE ANOTHER BYTE IF NOT DONE PROUT RT*(*--------------------------------------*(* LOADS ALTERNATE CHARACTERS *(* FROM DISK: "DSK1.CHARA2" *GPAT >20A >0000(* CALL LINK("ALCHAR") *(*--------------------------------------**'ALCHAR LI 0,>0020 *BYTES FOR PAB MOV 0,@>830C CLR @STATUS BLWP @GPLLNK2 DATA >0038 *ALLOCATE VDP RAM FOR PAB*T >20A >0000 MOV @>831C,0 LI 1,CARPAB LI 2,>0015- BLWP @VMBW *PAB DATA TO VDP RAM CLR @STATUS AI 0,>0009 MOV 0,@PNTR CLR @STATUS' BLWP @DSRLNK *LOAD 'CHARA2' DATA >0008*0000 LI 1,ALTCUR; MOV 1,@CURPAT *POINT TO ALTERNATE CURSOR PATTERN* CLR @STATUS RT*(*--------------------------------------*(* LOADS STANDARD CHARACTERS *(* CALL LINK("CHRSET") *A >0008*0000(*--------------------------------------**)CHRSET LI 0,PATTAD *CHAR 32 ADDRESS MOV 0,@FAC CLR @STATUS$ BLWP @GPLLNK *UPPER CASE DATA >0018$ BLWP @GPLLNK *LOWER CASE DATA >004A *A >0008*0000( LI 0,>03F0 *CURSOR ADDRESS7 LI 1,BASCUR *POINT TO BASIC CURSOR PATTERN> MOV 1,@CURPAT *FOR USE IN CURSOR ROUTINE CAN USE IT LI 2,8= BLWP @VMBW *AND WRITE NEW PATTERN TO PATT TABLE RT*00(*--------------------------------------*(* ENTER TEXT MODE *(* CALL LINK("TEXT") *(*--------------------------------------**TEXT MOV 11,@SAVRT LI 0,>01F0* BLWP @VWTR *SET VDP REGISTER0 SWPB 0, MOVB 0,@>83D4 *SAVE REGISTER BYTE LI 0,>0713$ BLWP @VWTR *SET COLORS LI 1,>0028) MOV 1,@LINLEN *SET LINE LENGTH SWPB 1+ MOVB 1,@BYTCNT *ADJUST "DUMP" PABT VDP REGISTER0 LI 1,>03C0) MOV 1,@EOS *& END OF SCREEN. BL @CLEART *CLEAR THE NEW SCREEN MOV @SAVRT,11 RT*(*--------------------------------------*(* SET COLORS IN TEXT MODE *"DUMP" PABT VDP REGISTER0(* CALL LINK("COLORT",FGD,BKGD) *(*--------------------------------------**COLORT LI 0,0 LI 1,1 BLWP @NUMREF BLWP @XMLLNK DATA >12003 MOV @FAC,3 *RETRIEVE FOREGROUND COLOR DEC 3P REGISTER0$ CI 3,>0000 *TEST RANGE JLT CLOUT CI 3,>000F JGT CLOUT0 SLA 3,4 *FORGROUND=3D NYBBLE R3 LI 1,2 BLWP @NUMREF BLWP @XMLLNK DATA >1200 MOV @FAC,0C 3P REGISTER0' DEC 0 *BACKGROUND=R0 CI 0,>0000$ JLT CLOUT *TEST RANGE CI 0,>000F JGT CLOUT" A 3,0 *ADD THEM( AI 0,>0700 *FOR VDP REG. 7$ BLWP @VWTR *SET COLORSER0 CLOUT RT*(*--------------------------------------*(* RETURN TO GRAPHICS MODE *(* CALL LINK("RETURN") *(*--------------------------------------**RETURN MOV 11,@SAVRT BL @CLEART LI 0,>01E0 COLORSER0* BLWP @VWTR *SET VDP REGISTER LI 0,>0300 LI 1,>1000-RCOL BLWP @VSBW *RESTORE COLOR TABLE INC 0 CI 0,>0320 JNE RCOL LI 0,>E001* MOVB 0,@>83D4 *SAVE VDP R1 BYTELORSER0 MOV @SAVRT,11 LI 1,>00206 MOV 1,@LINLEN *ADJUST LINE LENGTH PARAMETER SWPB 19 MOVB 1,@BYTCNT *ADJUST BYTE COUNT IN "DUMP" PAB LI 1,>03008 MOV 1,@EOS *CHANGE END OF SCREEN PARAMETERSER0 RT*(*--------------------------------------*(* CLEAR SCREEN *(* CALL LINK("CLEART") *(*--------------------------------------**CLEART MOV 11,10 CLR 0' LI 1,>8000 *BYTE TO WRITE0' MOV @EOS,2 *SIZE OF BLOCK5 BLWP @VSBW *WRITE ONE BYTE TO SET VDPWA JMP CLRT27CLRT3 MOVB 1,@>8C00 *MOVE SUCESSIVE BYTES TO VDPDA CLRT2 DEC 21 JNE CLRT3 *CONTINUE UNTIL FINISHED RT*WRITE0(*--------------------------------------*(* ASCII SCREEN DUMP *(* CALL LINK("DUMP") *(*--------------------------------------**'DUMP LI 0,>0020 *BYTES FOR PAB/ MOV 0,@>830C *SET UP FOR ALLOCATION CLR @STATUS BLWP @GPLLNK3 DATA >0038 *ALLOCATES VDP RAM FOR PAB*% MOV @>831C,@PAB *PAB ADDRESS*. LI 0,>002A *BYTES FOR VDP BUFFER/ MOV 0,@>830C *SET UP FOR ALLOCATION CLR @STATUSTION BLWP @GPLLNK6 DATA >0038 *ALLOCATES VDP RAM FOR BUFFER*- MOV @>831C,@BUFADR *BUFFER ADDRESS*7 MOVB @GRMRA,@SAVEG *SAVE GROM RETURN ADDRESS MOVB @GRMRA,@SAVEG+1 DEC @SAVEG* MOV @PAB,0TION LI 1,PBDATA LI 2,>0012) BLWP @VMBW *PAB DATA TO VDP* MOV @PAB,6 AI 6,>000D' MOV 6,@PNTR *PT TO NAME LG* BLWP @DSRLNK DATA >0008* LI 1,>0300 MOV @PAB,0B,0TION AI 0,>0004' BLWP @VSBW *SET FOR WRITE* CLR @LENG MOV @LENG,0LINEW LI 1,LGBUFF MOV @LINLEN,2# BLWP @VMBR *READ LINE CLR 1,OFST SB @BO,@LGBUFF(1) *ADJUST OFFSET INC 1N C 1,@LINLEN JNE OFST* MOV @BUFADR,0 LI 1,LGBUFF MOV @LINLEN,2* BLWP @VMBW *LINE TO VDP BUFF* MOV 6,@PNTR$ BLWP @DSRLNK *WRITE LINE DATA >0008* A @LINLEN,@LENG MOV @LENG,0$ C 0,@EOS *LAST LINE?0 JLT LINEW *IF NOT DO ANOTHER LINE* LI 1,>0100 MOV @PAB,0 AI 0,>0004+ BLWP @VSBW *SET TO CLOSE FILE* MOV 6,@PNTR A @LINLEN,@LENG$ BLWP @DSRLNK *CLOSE FILE DATA >0008* MOVB @SAVEG,@GRMWA8 MOVB @SAVEG+1,@GRMWA *RESET GROM RETURN ADDRESS RT* AI 0,>0004+ BLWP @VSBW *SET TO CLOSE FILE* MOV 6,@PNTR A @LINLEN,@LENG* MTXT40:SB*(*--------------------------------------*(* 'CURSOR' ROUTINE TO ACCEPT *(* KEYBOARD INPUT STRING *(* *(* ROUTINE USES FOLLOWING *(* REGISTERS: *(* GIVENS: *(* R00=INITIAL POSITION *(* R10=GIVEN MAXLENGTH *(* USED DURING ROUTINE: *(* R00=CURRENT SCREEN LOACTION *(* R04=TEMPORARY STORAGE *(* R05=MAXLOCATION *(* R06=COUNT-DOWN *(* R07=SCREENSTART *(* R08=POSITION *(* R09=LENGTH *(*--------------------------------------**0CURSOR MOV 0,6 *MOVE STARTING LOCATION CLR 56 DIV @LINLEN,5 *PLACES REMAINDER IN 6=COLUMN+ MOV @LINLEN,7 *FETCH LINE LENGTH* R09=LENGTH *G S 6,7 *SUBTRACT COLUMN NUMBER TO OBTAIN MAX POSS LEN4 C 10,7 *COMPARE WITH GIVEN MAX LEN5 JLT CURSO2 *IF GIVEN IS LESS THEN GO ON. MOV 7,10 *OTHERWISE SUBSTITUTE **CURSO2 MOV 0,7 *SCREENSTART TO 7 MOV 7,5 A 10,5* DEC 5 *SETS MAXLOCATION- LI 8,1 *INITIALIZE POSITION% CLR 9 *LENGTH TO 02 MOVB @H7E,@CBYTE *ESTABLISH CURSOR PATTERN* LI 1,CARBUF+1 MOV 10,2 LI 3,>8000*CURA MOVB 3,*1+ *BLANKS TO BUFFER DEC 2 JNE CURA* LI 1,CARBUF+1 MOV 10,20 BLWP @VMBW *WRITE BUFFER TO SCREEN* CLR @STATUSTERN BLWP @GPLLNK DATA >0034 *BEEP' CLR 6 *CLEAR COUNTER** MAIN LOOP* SCAN INC 6. CI 6,>80 *COUNT-DOWN COMPLETE?. JLT S2 *IF NOT JUMP TO KSCANSCREEN* CLR @STATUSTERN/ CLR 6 *IF SO RESTORE COUNTER0 CB @CBYTE,@H7E *CHECK CURSOR CHARACTER) JEQ BBYTE *IF ON THEN JUMP- MOVB @H7E,@CBYTE *ELSE TURN CURSOR ON JMP S2*NOT JUMP TO KSCANSCREEN* CLR @STATUSTERN7BBYTE MOVB @CARBUF(8),@CBYTE *SEG OF BUFFER TO CURSOR*S2 MOVB @CBYTE,1& BLWP @VSBW *WRITE CURSOR. CLR @STATUS *CLEAR STATUS BYTE TO7 LIMI 2 *ALLOW INTERRUPTS SO BEEPS ANDCREEN* CLR @STATUSTERN- LIMI 0 *BOOPS CAN BE PLAYED BLWP @KSCAN *KSCAN+ CB @H20,@STATUS *IF NO KEY PRESSED$ JNE SCAN *SCAN AGAIN** END MAIN LOOP*5 MOV @LONG,@RPTIME *ESTABLISH REPEAT DELAYR @STATUSTERN1 JMP SPCHK *CHECK WHICH KEY PRESSED** REPEAT TRAP*(RPTR MOVB @KEY,@SAVKEY *SAVE KEY VALUE, CLR 6 *INITIALIZE COUNTER*RPTRA CLR @STATUS BLWP @KSCAN" CB @H20,@STATUS *NEW NEW?AYR @STATUSTERN( JEQ NEWKEY *IF SO WRITE IT! CB @KEY,@NOKEY *NO KEY?/ JEQ SCAN *IF SO GET OUT OF TRAP INC 6% C 6,@RPTIME *DELAY OVER?" JNE RPTRA *TRAPPED!*@H20,@STATUS *NEW NEW?AYR @STATUSTERNF MOV @SHORT,@RPTIME *THIS IS REPEATED KEY SO SET SHORT DELAY- MOVB @SAVKEY,@KEY *FETCH THE KEY VALUE) JMP SPCHK *CHECK WHICH KEY*8NEWKEY MOV @LONG,@RPTIME *NEW KEY SO SET LONG DELAY** CHECK FOR SPECIAL KEY*RNSPCHK CB @HD,@KEY JNE SPCHKA B @ENTERSPCHKA CB @H8,@KEY JNE SPCHKB B @LEFTSPCHKB CB @H9,@KEY JNE SPCHKC B @RITESPCHKC CB @H3,@KEY JNE SPCHKD B @DELETER SPECIAL KEY*RNSPCHKD CB @H4,@KEY JNE SPCHKE B @INSERTSPCHKE CB @H7,@KEY JNE SPCHKF B @ERASE* * TEST FOR ASCII PRINTABLES*SPCHKF CB @KEY,@H7F JGT SPCHKZ CB @KEY,@H20 JLT SPCHKZPECIAL KEY*RN B @PUTUP** NOT VALID KEY*SPCHKZ CLR @STATUS* BLWP @GPLLNK *BOOP FOR BAD KEY DATA >0036, JMP SCAN *JUMP TO SCAN AGAIN*,* PLACE CHARACTER IN BUFFER & ON SCREEN*PUTUP CB @INSERF,@ZEROKEY*RN JEQ PUTUPZC B @INSRTX *IF INSERT FLAG ON JUMP TO INSERT SEQUENCE*PUTUPZ MOVB @KEY,18 AI 1,>6000 *ADJUST KEYVAL FOR BASIC OFFSET: BLWP @VSBW *WRITE TO CURRENT SCREEN LOCATION CB @INSERF,@ZEROKEY*RN, MOVB 1,@CARBUF(8) *INSERT INTO INPUT$*<* POSITION TESTS FOR ADJUSTING LENGTH & SCREEN LOCATION*& DEC 8 *DEC POSITION2 C 8,9 *COMP ADJ POS TO LENGTH+11 JNE TLOCA *IF NOT EQUAL THEN TLOCARN) INC 9 *INCREASE LENGTH +TLOCA INC 0 *INCREASE LOCATION5 INCT 8 *RESTORE & INCREASE POSITION*; C 8,10 *COMPARE NEW POSITION TO MAXLENGTH JNE TLOCA *IF NOT EQUAL THEN TLOCARN5 JGT TLOCB *IF LESS OR EQUAL THEN TLOCC JMP TLOCC?TLOCB MOV 10,8 *OTHERWISE RESET POSITION TO MAXLENGTH*9TLOCC C 0,5 *COMPARE LOCATION TO MAXLOCATION3 JGT TLOCD *IF GREATER THAN FIX & OUTARN+ JMP CURPUT *ELSE STRAIGHT OUT* TLOCD DEC 0**CURPUT MOVB @H7E,@CBYTE *SET CURSOR VALUE MOVB @CBYTE,1E BLWP @VSBW *WRITE CURSOR TO INCREMENTED SCREEN LOCATION$ B @RPTR *SCAN AGAIN*AN FIX & OUTARN(****************************************(* SPECIAL KEY ROUTINES *(*****************************************+LEFT BLWP @CKINSR *CHECK INSERT FLAG*5LEFT2 CI 8,>0001 *CHECK FOR LEFTMOST POSITIONN AGAIN*AN FIX & OUTARN& JGT LEFT3 *IF NOT GO ON. CLR @STATUS *OTHERWISE BOOP & OUT BLWP @GPLLNK% DATA >0036 *BOOP IF NOT CLR 6 B @SCAN*'LEFT3 MOVB @CARBUF(8),1 *GET CHARACTERSITIONN AGAIN*AN FIX & OUTARN2 BLWP @VSBW *USE IT TO REPLACE CURSOR+ DEC 0 *DECREASE LOCATION+ DEC 8 *DECREASE POSITION B @CURPUT*+RITE BLWP @CKINSR *CHECK INSERT FLAG* CHARACTERSITIONN AGAIN*AN FIX & OUTARN9 C 0,5 *COMPARE LOCATION TO MAXLOCATION2 JEQ RITE1 *IF EQUAL THEN BOOP & OUT3 DEC 8 *OTHERWISE ADJUST POSITION/ C 8,9 *& COMPARE WITH LENGTHHARACTERSITIONN AGAIN*AN FIX & OUTARN1 JNE RITE2 *IF NOT EQUAL THEN GO ON3 INC 8 *OTHERWISE MOVE ILLEGAL SO(* *ADJUST LENGTH&RITE1 CLR @STATUS BLWP @GPLLNK DATA >0036 *BOOP CLR 6GAIN*AN FIX & OUTARN B @SCAN *OUT*@RITE2 MOVB @CARBUF+1(8),1 *FETCH CHARACTER FROM INPUT STRING) BLWP @VSBW *WRITE TO SCREEN7 INCT 8 *ADJUST AND INCREMENT POSITION, INC 0 *INCREMENT LOCATIONX & OUTARN B @CURPUT** DELETE ROUTINE*DELETE BLWP @CKINSR. CI 9,>0000 *IF LENGTH=0 THEN OUT JEQ DELOUT9 C 8,9 *IF POSITION BEYOND END THEN OUT JGT DELOUT* *INCREMENT LOCATIONX & OUTARNI LI 2,CARBUF+1 *PREPARE TO DELETE BY SHIFTING INPUT STRING FROM< LI 3,LGBUFF *ONE BUFFER TO ANOTHER & BACK AGAIN, LI 4,1 *INITIALIZE COUNTER JMP DELEL(DELEB MOVB *2+,*3+ *SHIFT ONE BYTE INC 45DELEL C 4,8 *COMPARE COUNTER TO POSITION JNE DELEB*0 INC 2 *SKIP DELETED CHARACTER+DELEC INC 4 *INCREMENT COUNTER3 C 4,9 *COMPARE COUNTER TO LENGTH *SHIFT ONE BYTE INC 4+ JGT DELEK *IF FINISHED GO ON0 MOVB *2+,*3+ *MOVE ANOTHER CHARACTER JMP DELEC*DELEK LI 2,>8000( MOVB 2,*3 *PAD WITH BLANK*' CLR 4 *RESET COUNTERTH *SHIFT ONE BYTE INC 4+ LI 2,CARBUF+1 *GET READY TO MOVE% LI 3,LGBUFF *STRING BACK8DELED MOVB *3+,*2+ *RESTORE INPUT STRING TO CARBUF INC 4# C 4,9 *FINISHED?' JNE DELED *IF NOT REPEAT*NE BYTE INC 4' MOV 0,4 *SAVE LOCATION& MOV 7,0 *SCREEN START LI 1,CARBUF+1 MOV 9,2( BLWP @VMBW *REWRITE SCREEN* MOV 4,0 *RESTORE LOCATION*) DEC 9 *DECREASE LENGTHINC 4!DELOUT B @CURPUT *GET OUT** TURN ON INSERT FLAG*INSERT BLWP @IFLGON B @SCAN*$* ROUTINE TO INSERT A CHARACTER*'INSRTX CLR 4 *CLEAR COUNTERC LI 2,CARBUF+1 *PREPARE TO INSERT BY SHIFTING STRING FROM6 LI 3,LGBUFF *ONE BUFFER TO ANOTHER & BACK JMP INSRTYINSRTA MOVB *2+,*3++INSRTY INC 4 *INCREMENT COUNTER( C 4,8 *IF AT POSITION JEQ INSRTB *SKIPPREPARE TO INSERT BY SHIFTING STRING FROM9 JMP INSRTA *ELSE MOVE 1ST PORTION OF STRING*2INSRTB MOVB @KEY,1 *FETCH INSERTED CHARACTER& AI 1,>6000 *BASIC OFFSET6 MOVB 1,*3+ *INSERTED CHARACTER TO BUFFER*IPPREPARE TO INSERT BY SHIFTING STRING FROM4INSRTC MOVB *2+,*3+ *FINISH MOVING INPUT STRING INC 4 C 4,9A JGT INSRTG *IF NOT FINISHED SHIFT ANOTHER CHARACTER JMP INSRTC*7INSRTG C 8,10 *COMPARE POSITION TO MAXLENGTHT BY SHIFTING STRING FROM7 JEQ INSOUT *IF EQUAL NO OTHER ADJUSTMENTS1INSRTD INC 8 *ELSE INCREMENT POSITION- INC 0 *AND SCREEN LOCATION*5INSRTE C 9,10 *COMPARE LENGTH TO MAXLENGTH' JEQ INSOUT *IF EQUAL SKIPROM/ INC 9 *ELSE INCREMENT LENGTH*,INSOUT CLR 4 *INITIALIZE COUNTER LI 2,CARBUF+1 LI 3,LGBUFF.INSRTF MOVB *3+,*2+ *MOVE NEW STRING BACK INC 4 C 4,9 JNE INSRTF*EQUAL SKIPROM' MOV 0,4 *SAVE LOCATION MOV 7,0 LI 1,CARBUF+1 MOV 9,24 BLWP @VMBW *WRITE NEW STRING TO SCREEN* MOV 4,0 *RESTORE LOCATION* B @CURPUT *OUT*E INSRTF*EQUAL SKIPROM.ERASE BLWP @CKINSR *TURN OFF INSERT FLAG CLR @CARBUF LI 1,CARBUF+1 MOV 10,2 LI 3,>8000*ERASE2 MOVB 3,*1+ *BLANKS TO INPUT$ DEC 2 JNE ERASE2 CLR 9 MOV 7,0F*EQUAL SKIPROM LI 1,CARBUF+1 MOV 10,2? BLWP @VMBW *WRIT NEW BLANK INPUT STRING TO SCREEN LI 8,>0001% B @SCAN *START FRESH*ENTER BLWP @CKINSR MOVB @CARBUF(8),1 CLR 9 MOV 7,0F*EQUAL SKIPROM/ BLWP @VSBW *BLANK CURSOR LOCATION*/ CI 9,0 *CHECK FOR NULL STRING JEQ ENTOUT6ENTERA CB @CARBUF(9),@H80 *LOOK FOR TRAILING BLANK JNE ENTOUT9 DEC 9 *ADJUST LENGTH IF TRAILING BLANKOM$ JMP ENTERA *LOOK AGAIN* ENTOUT SWPB 9/ MOVB 9,@CARBUF *LENGTH BYTE TO BUFFER< SWPB 9 *RESTORE LENGTH BYTE IN CASE NEEDED& RT *EXIT ROUTINE*(*--------------------------------------*LANKOM(* CKINSR SUBROUTINE *(* CHECKS INSERT FLAG *(*--------------------------------------**CKINSR DATA ALTWS,CKSTRT1CKSTRT CB @INSERF,@ZERO *IF FLAG RESET, OUT JEQ CKIOUT-----------------------*LANKOM+ CLR @INSERF *RESET INSERT FLAG0 LI 0,>03F0 *CURSOR PATTERN ADDRESS; MOV @CURPAT,1 *FETCH APPROPRIATE PATTERN ADDRESS: JMP NEWCUR *JUMP TO WRITE NEW CURSOR PATTERN CKIOUT RTWP*----------------*LANKOM(*--------------------------------------*(* IFLGON SUBROUTINE *(* SETS INSERT FLAG *(*--------------------------------------**IFLGON DATA ALTWS,FLGONAFLGONA LI 1,>FF00" MOVB 1,@INSERF *SET FLAGNKOM( LI 0,>03F0 *CURSOR ADDRESS7 LI 1,LINCUR *INSERT CURSOR PATTERN ADDRESS*NEWCUR LI 2,8 *8 BYTES TO WRITE, BLWP @VMBW *NEW CURSOR PATTERN RTWP*(*--------------------------------------* FLAGNKOM(* GET A SCREEN LOCATION *(* PARAMETER 1 IS ROW # *(* PARAMETER 2 IS COL # *(* PARAMETER 3 IS LENG *(*--------------------------------------**GETPAR LI 0,0 LI 1,3 FLAGNKOM& BLWP @NUMREF *PARAMETER #3, BLWP @XMLLNK *CONVERT TO INTEGER DATA >1200! MOV @FAC,4 *LENG=R4*GETLOC LI 0,0& LI 1,1 *PARAMETER #1! BLWP @NUMREF *GET ROW LI 1,3 FLAGNKOM, BLWP @XMLLNK *CONVERT TO INTEGER DATA >1200 MOV @FAC,15 DEC 1 *ADJUST FOR BASIC CONVENTION8 MPY @LINLEN,1 *BEGIN TO BUILD SCREEN LOCATION7 MOV 2,5 *RESULT OF MULTIPLICATION TO 5OM& LI 1,2 *PARAMETER #2$ BLWP @NUMREF *GET COLUMN, BLWP @XMLLNK *CONVERT TO INTEGER DATA >1200+ MOV @FAC,2 *PUT IN REGISTER 26 DEC 2 *ADJUST FOR BASIC CONVENTIONSATION TO 5OM1 A 2,5 *ADD TO ROW X LINELENGTH RT* *GET COLUMN, BLWP @XMLLNK *CONVERT TO INTEGER DATA >1200+ MOV @FAC,2 *PUT IN REGISTER 26 DEC 2 *ADJUST FOR BASIC CONVENTIONSATION TO 5OM* MTXT40:SC*(*--------------------------------------*(* EMULATE 'DISPLAY AT' *(* CALL LINK("DISPAT",R,C,N/N$) *(*--------------------------------------**DISPAT MOV 11,@SAVRT# BL @GETLOC *LOC IN R5 C 5,@EOS JGT DISOUT* MOVB @ARGID+2,6/ COC @PTEST,6 *TEST FOR STRING PARAM JEQ DSTRS*& LI 1,3 *3D PARAMETER. BL @NTS *GET NUMBER & CONVERT" JMP DSOUT *PRINT IT*DSTRS LI 1,3 LI 2,LGBUFF LI 4,>FF00 MOVB 4,@LGBUFF$ BLWP @STRREF *GET STRING CB @LGBUFF,@ZERO JEQ DISOUT "DSOUT MOV 5,0 *LOCATION LI 3,LGBUFF *BUFFEROUT *PRINT IT*" BL @PRBUF *PRINT IT*DISOUT MOV @SAVRT,11 RT*(*--------------------------------------*(* EMULATE 'PRINT' *(* CALL LINK("PRINTT",N/N$) *(*--------------------------------------** *PRINT IT*PRINTT MOV 11,@SAVRT BL @PTTA BL @PTXX* MOVB @ARGID,6) COC @PTEST,6 *TEST FOR STRING JEQ PTSTR*' LI 1,1 *1ST PARAMETER0 BL @NTS *GET NUMBER AND CONVERT-** *PRINT IT*" JMP PSOUT *PRINT IT*PTSTR LI 0,0 LI 1,1. MOVB @LINLEN+1,@LGBUFF *MAX STRING SIZE LI 2,LGBUFF$ BLWP @STRREF *GET STRING*+ CB @LGBUFF,@ZERO *NULL STRING?AND CONVERT-** *PRINT IT*$ JEQ PTOUT *EXIT IF SO*0PSOUT MOV @EOS,0 *ADDRESS OF BOTTOM LINE S @LINLEN,0 LI 3,LGBUFF" BL @PRBUF *PRINT ITPTOUT MOV @SAVRT,11 RT*(*--------------------------------------* *PRINT IT*(* EMULATE 'INPUT' *(* CALL LINK("INPUTT",P$,N/N$) *(*--------------------------------------**INPUTT MOV 11,@SAVRT* BL @PTTA *SCROLL UP SCREEN* LI 0,0 LI 1,1 LI 2,CARBUFINT IT* MOVB @LINLEN+1,@CARBUF+ BLWP @STRREF *GET PROMPT STRING MOVB @CARBUF,2 SRL 2,8 MOV 2,@LENG*+INNB BL @PTXX *BLANK BOTTOM LINE* MOV @LENG,2 CI 2,>00001,1 LI 2,CARBUFINT IT*7 JEQ INX *JUMP IF PROMPT IS NULL STRING MOV @EOS,0. S @LINLEN,0 *ADDRESS OF LAST LINE LI 3,CARBUF& BL @PRBUF *PRINT PROMPT INX MOV @EOS,0 S @LINLEN,0 MOV @LINLEN,10 IT* DEC 10 A @LENG,0> S @LENG,10 *ADJUST BOTTOM LINE ADDRES FOR PROMPT + BL @CURSOR *TO CURSOR ROUTINE*0 MOVB @ARGID+1,6 *TEST FOR STRING OUTPUT4 COC @PTEST,6 *IF ARGUMENT IDENTIFIER SET IT*1 JEQ INSTRS *THEN JUMP TO STRING OUT* CI 9,>0000? JEQ ZNOUT *IF NULL INPUT JUMP TO ZERO NUMBER OUT* CLR 1?ISNZ SB @BO,@CARBUF+1(1) *ADJUST BUFFER FOR BASIC OFFSET INC 1 C 1,9T IT* JGT INBOUT JMP ISNZ*INBOUT LI 0,BTEMP LI 1,>00005INBX BLWP @VSBW *BLANK OUT VDP ROLL-OUT AREA INC 0 CI 0,BTEMP+16 JNE INBX* LI 0,BTEMP LI 1,CARBUF C 1,9T IT*2 MOVB *1+,2 *CARBUF LENGTH BYTE TO R2 SRL 2,81 BLWP @VMBW *BUFFER TO ROLL-OUT AREA* MOV 0,@FAC+12 CLR @STATUS2 BLWP @XMLLNK *CONVERT STRING TO NUMBER DATA >1000* LI 0,0 IT* LI 1,2 CLR @STATUS, BLWP @NUMASG *ASSUNG NUMBER TO N* JMP INOUT *EXIT*ZNOUT LI 0,>00000 MOV 0,@FAC *ZERO BYTES TO FAC AREA LI 0,0 LI 1,2 MOVB @ZERO,@STATUS 0,0 IT** BLWP @NUMASG *ASSIGN ZERO TO N* JMP INOUT *EXIT*INSTRS LI 1,16ISSZ SB @BO,@CARBUF(1) *ADJUST FOR BASIC OFFSET INC 1 C 1,9 JGT ISSB JMP ISSZ*ISSB LI 0,0 LI 1,2 IT* LI 2,CARBUF CLR @STATUS& BLWP @STRASG *ASSIGN TO M$*INOUT MOV @SAVRT,11 RT*(*--------------------------------------*(* EMULATE 'ACCEPT AT' *(* CALL LINK("ACCEPT",R,C,L,N/N$) *I 1,2 IT*(*--------------------------------------**ACCEPT MOV 11,@SAVRT( BL @GETPAR *GET PARAMETERS* CLR 6 A 4,6 A 5,6 C 6,@EOS3 JGT STROUT *EXIT IF VALUES OFF SCREEN* MOV 5,01,2 IT* MOV 4,10- BL @CURSOR *GOTO CURSOR ROUTINE* MOVB @ARGID+3,6 COC @PTEST,61 JEQ ACSTRS *JUMP IF STRING VARIABLE* CI 9,>0000C JEQ NULOUT *IF NULL INPUT GOTO ZERO NUMBER ASSIGNMENT** CLR 18ASNZ SB @BO,@CARBUF+1(1) *ADJUST FOR BASIC OFFSET INC 1 C 1,9 JGT ASNB JMP ASNZ*ASNB LI 0,BTEMP LI 1,>00005ASNBX BLWP @VSBW *BLANK OUT VDP ROLL-OUT AREA INC 0ENT** CI 0,BTEMP+16 JNE ASNBX LI 0,BTEMP LI 1,CARBUF MOVB *1+,2 SRL 2,85 BLWP @VMBW *OUTPUT STR TO ROLL-OUT AREA* MOV 0,@FAC+12 CLR @STATUS BLWP @XMLLNK INC 0ENT**9 DATA >1000 *CONVERT OUTPUT STRING TO NUMBER* LI 0,0 LI 1,4 CLR @STATUS% BLWP @NUMASG *ASSIGN TO N* JMP STROUT *EXIT*NULOUT LI 0,>0000) MOV 0,@FAC *ZERO VAL TO FACT** LI 0,0 LI 1,4 MOVB @ZERO,@STATUS% BLWP @NUMASG *ASSIGN TO N* JMP STROUT *EXIT*ACSTRS LI 1,16ASSZ SB @BO,@CARBUF(1) *ADJUST FOR BASIC OFFSET INC 1 C 1,9 JGT ASSB** JMP ASSZ*ASSB LI 0,0 LI 1,4 LI 2,CARBUF CLR @STATUS& BLWP @STRASG *ASSIGN TO M$*STROUT MOV @SAVRT,11 RT*(*--------------------------------------*(* SCROLL WHOLE SCREEN UP ONE LINE ***(*--------------------------------------**.PTTA CLR 3 *CLEAR LOCATION INDEX MOV @EOS,5 S @LINLEN,5PTTAX MOV 3,0A A @LINLEN,0 *INCREMENT LOCATION INDEX BY LINE LENGTH LI 1,LGBUFF UP ONE LINE *** MOV @LINLEN,2" BLWP @VMBR *GET LINE S @LINLEN,0/ BLWP @VMBW *WRITE ONE LINE HIGHER A @LINLEN,3 C 3,50 JNE PTTAX *IF NOT DONE DO ANOTHER RT*,LGBUFF UP ONE LINE ***(*--------------------------------------**PTXX MOV @EOS,0 S @LINLEN,0 LI 1,>8000+PTX BLWP @VSBW *BLANK BOTTOM LINE INC 0 C 0,@EOS JNE PTX RT*(*--------------------------------------**(* CONVERT NUMBER TO STRING AND *(* PLACE IN LGBUFF WITH LENGTH BYTE*(*--------------------------------------**NTS LI 0,0$ BLWP @NUMREF *GET NUMBER MOVB @ZERO,@FAC+11 BLWP @GPLLNK------------------------**+ DATA >0014 *CONVERT TO STRING*" MOVB @FAC+12,4 *LEN IN 4 MOVB @FAC+11,0 SRL 0,8' AI 0,>8300 *STR ADDR IN 0 LI 1,LGBUFF*) MOVB 4,*1+ *STR LEN TO BUFF SRL 4,8--------**%NTSA MOVB *0+,*1+ *STR TO BUFF DEC 4 JNE NTSA RT* MOVB @FAC+11,0 SRL 0,8' AI 0,>8300 *STR ADDR IN 0 LI 1,LGBUFF*) MOVB 4,*1+ *STR LEN TO BUFF SRL 4,8--------*** MTXT40:SD*(*--------------------------------------*(* EMULATES 'HCHAR' *(* CALL LINK("HCHART",R,C,LEN,CHR) *(*--------------------------------------**HCHART MOV 11,@SAVRT( BL @GETPAR *GET LOC & LENG CLR 6 A 5,6 A 4,6 C 6,@EOS0 JGT HCOUT *EXIT IF EXCEEDS SCREEN LI 0,0 LI 1,4 BLWP @NUMREF BLWP @XMLLNK DATA >1200% MOV @FAC,1 *ASCII TO R1 LENG* SLA 1,8 *ADJUST FOR BASIC AI 1,>6000# MOV 5,0 *LOC TO R0$ MOV 4,2 *LENG TO R25 BLWP @VSBW *WRITE ONE BYTE TO SET VDPWA JMP HCHAB MOV @FAC,1 *ASCII TO R1 LENG:HCHA MOVB 1,@>8C00 *WRITE SUCESSIVE BYTES THRU VDPWD#HCHAB DEC 2 *FINISHED?3 JNE HCHA *WRITE ANOTHER BYTE IF NOTHCOUT MOV @SAVRT,11 RT*(*--------------------------------------* *ASCII TO R1 LENG(* MAKES UP TO 32 CHARACTERS *(* OF "INVERSE VIDEO" *(* CALL LINK("INVERT",ROW,COL,LEN) *(*---------------------------------------*INVERT MOV 11,@SAVRT( BL @GETPAR *GET PARAMETERS* CLR 6NG A 4,6 A 5,6 C 6,@EOS JGT INVOUT*- MOV 5,0 *GET SCREEN LOCATION/ LI 1,INVBUF *CHARACTER BUFFER AREA( MOV 4,2 *LENGTH OF READ *GET PARAMETERS* CLR 6NG= BLWP @VMBR *READ CHARACTERS TO CHARACTER BUFFER* CLR 6 *INDEX/ LI 2,8 *LENGTH OF PATTERN DEF+P1 MOVB @INVBUF(6),0 *GET CHARACTER VAL3 SRL 0,8 *CORRECT TO LEAST SIG BYTER 6NG< SLA 0,3 *MPY X 8 FOR OFFSET INTO PATT TABLE# MOV 6,1 *GET INDEXA SLA 1,3 *MPY X 8 FOR OFFSET FOR INVERSION BUFFER4 AI 1,LGBUFF *LOCATION IN PATTERN BUFFERRRECT TO LEAST SIG BYTER 6NG: BLWP @VMBR *READ PATTERN TO INVERSION BUFFER INC 6 C 6,4 *DONE?3 JNE P1 *IF NOT GET NEXT CHARACRER*) LI 1,LGBUFF *START OF BUFFER/M1 INV *1+ *INVERT WORD IN BUFFER( CI 1,LGBUFF+256 *END OF BUFFER?1 JNE M1 *IF NOT INVERT NEXT WORD*/ LI 0,>0700 *ADDR OF CHARACTER 1282 LI 1,LGBUFF *INVERSION BUFFER ADDRESS( LI 2,>0100 *BYTES TO WRITE WORD IN BUFFER BLWP @VMBW *WRITE* CLR 2 *INDEX1 MOV 5,0 *LOCATION OF SCREEN LINE2 LI 1,>E000 *FIRST INVERTED CHARACTER/P2 BLWP @VSBW *WRITE FIRST CHARACTER *BYTES TO WRITE WORD IN BUFFER( AI 1,>0100 *NEXT CHARACTER' INC 0 *NEXT POSITION) INC 2 *INCREMENT INDEX1 C 2,4 *IF NOT DONE WRITE AGAIN JNE P2INVOUT MOV @SAVRT,11 RT*S TO WRITE WORD IN BUFFER(*--------------------------------------*(* RESTORE ORGINAL SCREEN *(* CALL LINK("REVERT",R,C,LENG) *(*--------------------------------------**REVERT MOV 11,@SAVRT BL @GETPAR" MOV 5,0 *LOCATIONUFFER3 LI 1,INVBUF *ORIGINAL CHARACTER STRING MOV 4,2 *LENGTH) BLWP @VMBW *RE-WRITE SCREEN MOV @SAVRT,11 RT*(*--------------------------------------*(* NUMBER FORMATTER *UFFER(* CALL LINK("FORMAT",N,N$,D,L) *(*--------------------------------------**FORMAT MOV 11,@SAVRT LI 0,SMLBUF LI 1,>20207FZ MOV 1,*0+ *LOAD IMAGE STRING WITH SPACES CI 0,SMLBUF+>10 JNE FZ*FER LI 0,0 LI 1,3 BLWP @NUMREF BLWP @XMLLNK DATA >12002 MOV @FAC,4 *NUM OF DECIMAL PLACES=R4* LI 1,4 BLWP @NUMREF BLWP @XMLLNK DATA >1200# MOV @FAC,5 *LENGTH=R5* LI 0,0 LI 1,1$ BLWP @NUMREF *NUM AT FAC= CI 4,>0000 *IF DECIMAL=0 THEN JUMP TO NON-FIXED JEQ INTOUT AI 4,>0900. MOVB @H20,@FAC+11 *SET FOR FIXED FORMAT MOV 4,@FAC+12 *LENGTH=R5* CLR @STATUS! BLWP @GPLLNK *CONVERT DATA >00149 JMP TOBUFF *GET READY TO MOVE TO OUT BUFFER*INTOUT MOVB @ZERO,@FAC+11 CLR @STATUS, BLWP @GPLLNK *UNFIXED CONVERSION DATA >0014*LENGTH=R5*TOBUFF MOV 5,6& INC 6 *LENG+1 IN R6 MOV 5,1! AI 1,>0001 *LENG +1 SLA 1,8 SB @FAC+12,1* JLT BIGOUT *IF TOO LONG JUMP+ SRL 1,8 *OFFSET FOR LENGTH MOVB @FAC+11,0* SRL 0,8 AI 0,>83004MV1 MOVB *0+,@SMLBUF(1) *MOVE STRING TO CARBUF INC 1% C 1,6 *FIXED LENTH JNE MV1 SWPB 5& MOVB 5,@SMLBUF *LENG TO BUFF*FOUT LI 0,0 LI 1,2AC+11,0* LI 2,SMLBUF CLR @STATUS- BLWP @STRASG *ASSIGN STRING TO N$ MOV @SAVRT,11 RT*BIGOUT LI 0,SMLBUF# LI 1,>2A2A *ASTERISKS'BGZ MOV 1,*0+ *TO OUT BUFFER CI 0,SMLBUF+>10AC+11,0* JNE BGZ SWPB 5 MOVB 5,@SMLBUF3 B @FOUT *EXIT TO STRING ASSIGNMENT*11 RT*BIGOUT LI 0,SMLBUF# LI 1,>2A2A *ASTERISKS'BGZ MOV 1,*0+ *TO OUT BUFFER CI 0,SMLBUF+>10AC+11,0** MTXT40:SE*(*--------------------------------------*(* SCROLL UP A HORIZONTAL *(* SECTION OF THE SCREEN *(* CALL LINK("SCRLT",ROW1,ROW2 *(*--------------------------------------**SCRLT MOV 11,@SAVRT LI 0,0 LI 1,1 BLWP @NUMREF BLWP @XMLLNK DATA >1200 MOV @FAC,2+ MOV 2,@LENG *SAVE ROW1 TO LENG CI 2,>0001( JLT SCROUT *EXIT IF ROW1<1--------**SCRLT MOV 11,@SAVRT3 DEC 2 *ADJUST FOR BASIC NOTATION* MPY @LINLEN,2 *START ADDR IN R3 LI 1,2 BLWP @NUMREF BLWP @XMLLNK DATA >1200 MOV @FAC,4) CI 4,>0018 *EXIT IR ROW2>24 JGT SCROUT$ C 4,@LENG *ROW18000 *LOAD BLANK,SCRB BLWP @VSBW *WRITE TO LAST LINE INC 0 INC 2 C 2,@LINLEN JNE SCRBSCROUT MOV @SAVRT,11 RT*(*--------------------------------------*MOV @LINLEN,2 SCROUT(* SCROLL VERTICAL SECTION RIGHT *(* CALL LINK("VSCROL",COL1,COL2) *(*--------------------------------------**VSCROL LI 0,0 LI 1,1 BLWP @NUMREF BLWP @XMLLNK DATA >1200& MOV @FAC,4 *START COL=R4$ CI 4,>0001 *EXIT IF <1 JLT VOUT DEC 4 LI 1,2 BLWP @NUMREF BLWP @XMLLNK DATA >1200 MOV @FAC,5 DEC 5 MOV 5,6 S 4,6, JLT VOUT *EXIT IF 8000(VSB BLWP @VSBW *BLANKS TO COL1 IF 1200& MOV @FAC,4 *START COL=R4 CI 4,>0001$ JLT HOUT *EXIT IF <1 DEC 4 LI 1,2 BLWP @NUMREF BLWP @XMLLNKROL LI 0,0 DATA >1200 MOV @FAC,5# DEC 5 *END COL=5 MOV 5,65 S 4,6 *EXIT IF LESS THAN START COL JLT HOUT! INC 6 *LENG=R6+ A @EOS,5 *END OF BOTTOM ROWKROL LI 0,0 S @LINLEN,5* MOV 4,0 A @LINLEN,0HSA LI 1,CARBUF MOV 6,2& BLWP @VMBR *READ 2D LINE S @LINLEN,02 BLWP @VMBW *WRITE IT ONE LINE HIGHER*# A @LINLEN,0 *NEXT LINE0,0 A @LINLEN,0' C 0,@EOS *END OF SCREEN$ JLT HSA *IF NOT JMP* MOV 4,0 A @EOS,0 S @LINLEN,0 LI 1,>8000(HSB BLWP @VSBW *BLANKS TO COL1 INC 0 C 0,50,0 JGT HOUT: JMP HSB *IF NOT END OF LINE WRITE ANOTHER* HOUT RT* NOT JMP* MOV 4,0 A @EOS,0 S @LINLEN,0 LI 1,>8000(HSB BLWP @VSBW *BLANKS TO COL1 INC 0 C 0,50,0/ -7H7>747*3 37 3333484>33444'4I772v2Dl4Wb/"X4}N4D4:3T03y&4/L/j/44/(5%45k55/1B556|/r2h/D^6T6J1x@667,6"12303 2770)1e7|00F01 0`0~x1n1d18SOUND10013920L11K78K1101NK80K1121lBK80K69K78K101K110K1120K$YK$y1(LINKACCEPTLI140LINE$I1ַ27ַ49LINKCOLORT1614LOAD DSK1.MTXT40:OA$YA$y1dA$NA$n1;LOAD287061600255224320632551LOAD2870600000000INITA$ NEED TO LOAD MINI-MEM? (Y/N) CLEAR"LINKACCEPT4301K$LINKALCHAReLINKDISPAT46Henter five lines one at a time. enter null string for unused lines.eLINKDISPAT41Hprinter should now be set to top of form press any key when readyDLINKDISPAT61'**** PRINTING- PLEASE STAND BY **** I04 I04%LINKHCHART4124032ELINKDISPAT71(----------------------------------------FLINKDISPAT101(----------------------------------------$1ַ27ַ37ַ670011ַ24&LINKHCHART11156032 1OUT$OUT$ CTL$CTL$T$ OUT$OUT$T$CFLAG0 CTL$OUT$OUT$ַڷCTL$ CFLAG0CFLAG1 CFLAG1 T$@%LINKHCHART4124032%LINKHCHART4124032&LINKHCHART11156032LINKRETURNKEY0KS S0'LINKDISPAT416 P R E S SELINKDISPAT61(

RINT EW FIVE LINES ND PROGRAM$LINKHCHART414032@&LINKHCHART111560320LINKDISPAT410ANY CHANGES (Y/N)?%LINKHCHART4124032ImLINKDISPAT81Puse the <@> symbol to delimit sequences to be transmitted as control values ELINKDISPAT71(----------------------------------------$LINKHCHART418032KEY0KS S0,mLINKDISPAT11P* MINNIE'S TEXT MODE FIVE LINE PRINTER *****************************************LINKTEXT1IJT$طLINE$IJ1J1շLINE$I 1PIO?TXT5LINE Bad Sectors: 0