IMD 1.16: 28/05/2007 16:34:33 -FOG/UTL009   åååååååååå  åååååååååå  åååååååååå  åEPSNPRTRDOCAUTOMOD COM AUTOMOD ASM-AUTOST ASM% AUTOST COM!SETAUTO COM"SETAUTO DOC#AUTOMOD DOC!$%&åUNERA COM'UNERA DOC (FUNCTIONCOM)FUNCTIONDOC *FUNCTN2 COM+RPIP HEXRPIP SUB,åååååååååååååååååååååååååååååååååå; PIP Patch to add (R)eset Disks and (Q)uick Repeat function ; ; LIFELINES, Vol III, Number 3 Page 15 ; Patching PIP for multiple file transfers-Kelly Smith ; ; ; A>ddt pip.com invoke DDT to load memory with PIP.COM ; DDT VERS 2.2 å DDT telling us that PIP.COM ; NEXT PC uses 29 pages of memory ; 1E00 0100 ; -irpip.hex input the patch file rpip.hex ; -r read it to memory(overlaying parts of PIP) ; NEXT PC ; 1E00 0100 DDT t-FOG/UTL009RPIP ASM!DISK DOC"DSCLABELASMS DSCLABELCOM MAKE COMEPSNPRTRASM\EPSNPRTRCOM  o if no filename lxi d,msg1 ; and sign in please cz prnt$messg ; print message jmp start$pip ; and off to pip ; added: lxi h,con$buff ; point to pip's console buffer mvi m,128 ; set-up for 128 character command string xchg ; pointue PIPing(may be different formats from previous) ; ; *q which resets disk drives as above, and also repeats last ; commands(great for B:=A:*.*-just keep changing source and ; destination disks) ; ; bdos equ 05h ; bdos entry address er swapped to [DE] for CP/M mvi c,rdcbuf ; read console buffer function call bdos ; let CP/M do the work lda con$buff+1 ; check how many characters typed cpi 1 ; just one? jnz save$char$cnt ; if not, save char count and return lda con$buff+fcb equ 5ch ; default file control block address dfcb equ 080h ; default disk/command buffer ; pmessg equ 9 ; print message function rdcbuf equ 10 ; read console buffer function rsetdsk equ 13 ; reset disk syst2 ; get single character command ani 05fh ; force to uppercase character cpi 'Q' ; repeat pip function last specified jnz reset$dsk$sys ; if not, check for reset disk system lhld char$cnt ; get character count shld con$buff+1 ; stuff back toem function ; start$pip equ 04ceh ; normal start of PIP con$buff equ 1ecbh ; pip's internal console buffer pip$cr$lf equ 082eh ; pip's internal cr/lf output routine pip$prompt equ 053ch ; pip's command parser entry address pip$patch equ 096fh ; pip g console buffer lxi d,msg3 ; tell them repeating last process call prnt$messg ; print message lxi h,con$buff+1 ; point to last command entry in console buffer mov c,m ; get command length to calculate offset mvi b,0 ; clean high byte bias iets patched at this address ; lf equ 0ah ; line feed character cr equ 0dh ; carriage return character ; org 100h ; jmp begin ;jump over INP:/OUT: vectors and EOF ; org 010ah ; begin: lda dfcb ; filename specified? ora a ; zernx h ; bump to start of command string address dad b ; add bias to locate end of string mvi m,'$' ; tag end of command string for message lxi d,con$buff+2 ; point to command string for message out call prnt$messg ; print message mvi c,rsetelling us again ; -^C Control C to exit DDT ; A>save 29 rpip.com save 29 pages of memory as RPIP.COM ; ; ; You now have two new PIP commands ; ; *r which allows you to insert different disk(s) in any drive ; and contin  åt R/W call prnt$messg ; print message mvi c,rsetdsk ; reset disk system function call bdos ; let CP/M do the work call pip$cr$lf ; do carriage return/line feed pop h ; clean the stack for pip restart jmp pip$prompt ; do pip '*' prompt and waåit for command ; save$char$cnt: ; lhld con$buff+1 ; save character count + character shld char$cnt ; save character count ret ; return ; prnt$messg: ; mvi c,pmessg ; print message function call bdos ; let CP/M do the work ret ; returån ; msg1 db cr,lf,'PIP 1.5 with (R)eset Disks and (Q)uick Repeat',cr,lf,'$' ; msg2 db cr,lf,'Resetting all disks to R/W$' ; msg3 db cr,lf,'Repeating: $' ; char$cnt dw 0 ; console buffer character count ; org pip$patch ; patch to get tåo added code goes here ; jmp added ; check for reset or repeat command ; ; end  msg3 db cr,lf,'Repeating: $' ; char$cnt dw 0 ; console buffer character count ; org pip$patch ; patch to get tådsk ; reset disk system function call bdos ; let CP/M do the work ret ; return ; reset$dsk$sys: ; cpi 'R' ; reset disk system? jnz save$char$cnt ; if not, restore chracter count and return lxi d,msg2 ; tell them all disk se  ive A. At the A> prompt, type AUTOMOD The program is self-prompting. Upon completion, move the modified disk from drive B to drive A and press . AUTOST.ASM is from Chapter 8 of the Osborne 1 User's Reference Guide. This påarticular version is programmed to auto-start SuperCalc. You may modify it to start some other program of your choice. Refer to the User's Guide. SETAUTO was received from the Osborne Users Group (OUG) of the Washington D.C. area. It enables  DISK.DOC -FOG/UTL.009 First Osborne Group (FOG) Utilities Disk This disk contains three utilities for manipulating the Osborne 1 auto-start (AUTOST) feature. AUTOMOD enables entry of a command l changing the command executed upon cold start (or ) to a command of your choice (6 characters or less). It also enables automatic execution of the command upon warm start () or upon both cold start and warm start. Place ine up to 36 characters which will be executed upon cold start (or ). If the command line is N characters, where N > 6, first use SETUP to program function key 0 (zero) to contain (N - 6) dummy characters (e.g., blanks). Place th SETAUTO.COM in drive A. At the A> prompt, type SETAUTO d:option command where d is the drive containing the disk to be modified, option is COLD or WARM or BOTH, and command is the command to be executed (6 characters maximum). When completee disk to be modified in drive B and SETUP.COM in drive A. At the A> prompt, type SETUP Select source drive B, function E, and key 0. Type (N - 6) blanks terminated by . Press X, then X, then B. Finally, place AUTOMOD.COM in dr, place the modified disk in drive A and press . For additional information, see SETAUTO.DOC. DSCLABEL was submitted by Dennis McFerran of FOG. It will print 3 1/2" x 15/16" labels containing a list of files found in the disk diå  ives and repeat the last PIP function. To use, place RPIP.COM in drive A. At the A> prompt, type RPIP For further information, refer to the first 26 lines of RPIP.ASM. As per discussion in the FOGHORN, RPIP.COM was removed from this disk an to setup special printing features on your Epson printer. The program is self-prompting. Place EPSNPRTR.COM in drive A. At the A> prompt, type EPSNPRTR Also, see EPSNPRTR.DOC. FUNCTION was submitted by John Florent of FOG. It will lid RPIP.SUB and RPIP.HEX as added. To patch your PIP.COM, you must have the following files on a disk: DDT.COM PIP.COM SUBMIT.COM XSUB.COM * RPIP.HEX * RPIP.SUB The marked files are on this disk, the others should be on your CP/M diskst function key settings on the screen. Place FUNCTION.COM in drive A. At the A> prompt, type FUNCTION See FUNCTION.DOC for information. FUNCTN2 is identical to FUNCTION, but was patched to eliminate blank lines on the screen. This provides. At the A> type: SUBMIT RPIP You will then find the file RPIP.COM on your disk and can proceed as above. UNERA will unerase (recover) a file which was previously ERAsed. Place UNERA.COM in drive A. At the A> prompt, type UNERA d:f a more compact display of the function key settings. MAKE redefines the USER number for specified files. Instructions are built-in. Place MAKE.COM in drive A. At the A> prompt, type MAKE This utility was received from OUG. RPIP extenilename.typ To identify erased files, see DUU on -FOG/UTL.006. Jim Woolley FOG Disk Librarian September, 1982 ds PIP to allow reseting disk drives without exiting. This premits you to change a disk, reset it to R/W, then continue with standard PIP functions. New functions recognized by RPIP are R, which will reset all drives, and Q, which will reset dr> É*N&Í NÍîÉÍò2¨þ ÂÃÉ!–p+q!õ6!©6+6 !ª6:ªþ ÒS:ªþ ÂM!¨6ÍgÃ8Í:N2M*¨MÍ8ÒpÍÁ!©6É!”6!—6>!—¾Ú•*—&P 6!—4Âz!ö6!ø6#6#6!ª6*¨MÍ8ÚÚ:ªþÚ¾É:¨þ*ÂÎ͇ÃÑÍgÍò2¨ê:¨þ:¿:”þÊëÉ:ªþÂ,Í¡ÖA<2”O>rectory. It will aslo print a list of function keys programmed on the disk. An Epson printer is required to properly utilize this program. For instructions, refer to the first 48 lines of DSCLABEL.ASM. EPSNPRTR, received from OUG, may be used  »¾Ú:»=O!L NÍE!»4Âü ÍE ÍE:ºþÂ/ÉÃÚÍ.*œ&L 6$LÍ9kÍ9Í.ÍþÂXÉÃÚÉ�ͯ É*KMÍ^ž0Íý20Å¤Í :0æ20:1æ21¢Íê'ͳ'Íã:®þÿ²¥ͯ !G6!"¡É!ÿÿ"ŸÍ7 *MÍ^ÍnÍ/ :a/õ:ÁH¡Òì!®6ÿ:®þÿÂú¸ͯ !&6Õ:¨þ[ ͱ!N5!©6:”þÂ%:ü<2”*•6 *• 6ÉÃ¥É!šq!›6> !›¾Úd*›&I :š¾Â]>É!›4ÂA>É:ª<2ªO*• :¨w:¨þ?†!õ6É!œq!¨6?!œ:ª¾Ò ÍgÃ�É!�q*�&ë*•~É!ö6:À2ÁÍò2¨:¨Ö ÖŸõ:¨Ö]ÖŸÁH±Úº:¨ÖA2žO>¹Ò:¨þ ÂúÍò2¨Ãͯ :03010000C30A012E :10010A003A8000B7117A01CC7401C3CE0421CB1E08 :10011A003680EB0E0ACD05003ACC1EFE01C26D01F7 :10012A003ACD1EE65FFE51C256012AD90122CC1EE3 :10013A0011C901CD740121CC1E4E060023093624B3 :10014A0011CD1ECD74010E0DCD0500C9FE52C26D32 :10015A00011÷:¨ÖSÖŸõ:¨ÖQÖŸÁH±ÒI:N<2ŸÍò2¨ÖÖŸõ:¨Ö ÖŸÁH±Ú@Ã"Íò2¨Ã�Íò2¨Ö02ŸO> ¹Òc!Ÿ6Ã�Íò2¨Ö02™O> ¹Ú�*Ÿ&ÍOå*™&Á ë!ŸsÃc*ž&P :Ÿw:žþ·>!Ÿ¾Ò±ͯ :Ÿ2ÁÃÂÍò2¨É:¨þ_ÂÎ!¨6=É!£6>'!£¾ÚéÍE!£4ÂÔÉ!©p+q*¨å0Í É!­1AC01CD74010E0DCD0500CD2E08E1C3 :10016A00C33C052ACC1E22D901C90E09CD0500C9F6 :10017A000D0A50495020312E35207769746820289D :10018A00522965736574204469736B7320616E64C8 :10019A00202851297569636B205265706561740D59 :1001AA000A240D0A526573657474696E6720616C5Er+s+p+q*¬~þ$Ê7*¬>¦*ªõ>¦ÁH¹Ê&>É*ª#"ª*¬#"¬Ã>ÉÍ 2¨:ÒR�ŸÍŽŸÉ:¨ÖÖŸÉ!¯6!œ6Í=2µþ:Ê™!œ6:µþ“HÍ9ÍþÂŽ>É!œ6Í-Ãe!µ6Í»2´þÂÇÍ=2´þʺÍ-é:¯ÒÄ>É>ÉÍÄ"·Í»2¶:´ÖÆÿŸ!¯¦Òð!´5Í»2³ÃÓͬ!µ†þÊ\Í :1001BA006C206469736B7320746F20522F57240D5F :1001CA000A526570656174696E673A2020202400BE :0101DA000024 :03096F00C31701AA :0000000000 Í-:¯Ò>É>É!±p+q:¯Ò,!¯6*°DMÍ9É:®Ò<!®6ÍÉ:¯ÒzÍ 2²þÂW!®6ÃD*œ&L :²w:œ<2œþOÚv*Í:²É>ÉÍ=2¹Ö0O> ¹Ú’:¹Ö0É:¹ÖAO>¹Ò¤:Í:¹ÖAÆ ÉÍ}‡‡‡‡õÍ}ÁH±Éͬ!µ†wÉÍ»O`iÍdåÍ»áÍVÉÍ[2ºO>¹Ú2:ºÖÖŸ!X¦Ú!»6:œ!'Í !'6!36'ÅÍ :1/!a¶ÒE*Ä#"Ä>ÍzµÂ?CÍ9ÍIͲÃ�ÉÍ.!Æ6> !ƾڇ*Æ&' ~2Çþ Ê€:Æþ Ây.Í*ÇMÍ!Æ4ÂQÉ>!”¾Ò›:”=2á:ü2É:öÒ¬Í\>!”¾Ò¿:”=2KÃÅ:ü2KÉ!À:Á¾ÊÑÉ!:K¾ÂÞÍ\ÉÍ:¨þ ÊíÍ\É!Ép+q͈ÍßÅ*ȹÒÉÍ*¨MÍ8Ò):¨þ[Âͱ!N5!©6Éñ:ªþÊ5É!¡6ÿ#6>!¢¾Ú°! 6: <2 O>‘Ÿ/õ: !¡†O!T å* MÍ¡á–ÖŸÁH¡Ò~ÃK: þ¡!©6Íòþ[–ͱ!N5:¢2¨É:¡Æ2¡!¢4Â=É:¨þ[¼ͱÃ4:ªþÂÈÉ!ª6:¨þ.ÂÍò2¨OÍ8Ú:ªþ ÚìÉ:¨þ*Âü ͇ÃÿÍgà   WILL WORK WITH MX-80 BUT TRY IT. IT USES ; EPSON CONTROL CODES SO WOULD PROBABLY HAVE ; TO BE MODIFIED FOR OTHER PRINTERS. ; ; ANY SUGGESTIONS OR COMMENTS SHOULD BE FORWARDED ; TO: DENNIS MC FERRAN ; 1038 POLK LANåE ; SAN JOSE, CA 95117 ; (408-296-6021) ; ; ; TO USE-------- ; 1) PLACE DISC WITH THIS PROGRAM ON IT IN DRIVE B ; 2) TURN ON YOUR PRINTER. ; 3) PLACE DISC THAT YOU WOULD LIKE TO LABEL IN DRIVE A: ; 4) GET INTO CPM (IF YOU'RE NOT THERE ALREAåDY). ; 5) TYPE B:DIRLABEL ; 6) PLACE ANOTHER DISC IN DRIVE A AND REPEAT ; AS MANY TIMES AS YOU WOULD LIKE. ; ; 8/82 Revised by Jim Woolley, FOG Disk Librarian ; 4 files/line, " | " between files, unidirectional print ; (unidir. pråint = esc,U,1 may only work with Graftrax) ; ; 9/82 Revised by Dennis McFerran, FOG, to look for disk ; number on USER 15. This was you can ERA *.* without ; effecting the disk number. Also if there is room on ; the label, the program will now; 6/25/82---THIS PROGRAM, WHICH WAS ADAPTED FROM ; THE FMAP(CATALOG) PROGRAM, WILL LIST ; YOUR FILE DIRECTORY ON A LABEL SIZED ; OUTPUT. IT WAS WRITTEN USING AN EPSON ; MX-100. I DON'T KNOW WHETHER OR NOT IT ; print SPACE LEFT on ; the disk and the DATE that you labelled the disk. ; ;*********EQUATE TABLE - BDOS*********************** ; * RDCHR EQU 1 ;READ CHAR FROM CONSOLE * WRCHR EQU 5 ;WRITE CHR TO PRINTER * PRINT EQU 9 ;PRINTDM!Í ÍÆÉÍ :©ÖÖŸõ:¨Ö=ÖŸÁH¡Ú-Í\:N2OÉë_ë…oŒgÉ_{¥oz¤gÉ^#Vë)å))Á É_{µoz´gÉ^#Vë) ÂdÉ^#Vë|·g}o ÂnÉ_{•ozœgÉO{‘oz˜gÉi`N#F‘o˜gÉo&•oœgÉ H ©=¨É   FCB SPECIFIED? MKBLANK MVI A,' ' STA DATEBUFF+2 RET OKDATE LDA DATEBUFF+2 CPI '0' CZ MKBLANK LXI H,FCB+1 MOV A,M CPI ' ' JNZ GOTFCB ;NO FCB - MAKE FCB ALL '?' MVI B,11 ;FN+FT COUNT QLOOP MVI M,'?' ;STORE '?' IN FCB INX H DCR B OF TRANSIENT PROG AREA* DATEBUFF EQU TPATOP-16;BEGINNING OF DATE BUFFER * ; * ;**********EPSON MX-100 PRINTER CODES*************** ESCAPE EQU 27 ; * SPACING EQU 65 ;LINE SPACING * CONDON EQU 15 ;CONDENSE JNZ QLOOP ;LOOK UP THE FCB IN THE DIRECTORY GOTFCB MVI C,FSRCHF ;GET 'SEARCH FIRST' FNC LXI D,FCB CALL BDOS ;READ FIRST INR A ;WERE THERE ANY? STA TEMP ;SAVE CNZ SOME ;GOT SOME - PRT TITLE, CONT GOTFCB1 MVI E,15 MVI C,32 CALL BDOSD PRINTING ON * CONDOFF EQU 18 ;CONDENSED PRINTING OFF * UNIDIR EQU 'U' ;UNIDIRECTIONAL PRINT * FORLEN EQU 67 ;SETS FORM LENGTH * FORMFEED EQU 12 ;FORM FEED * CR EQU 13 ;CARRIAGE RETURN * LF EQU 10 ;LINE FEED  MVI C,FSRCHF ;GET 'SEARCH FIRST' FNC LXI D,FCB CALL BDOS ;READ FIRST INR A ;WERE THERE ANY? STA TEMP ;SAVE CNZ SOME1 ;GOT SOME - PRT TITLE, CONT LXI D,NONMSG MVI C,9 CALL BDOS JMP EXIT1 SOME1 CALL SOME MVI E,00 MVI C,32 CALL* ;*************************************************** ; ORG 100H START LXI H,0 ;SAVE THE OLD STACK DAD SP ;H=STACK SHLD STACK ;SAVE IT LXI SP,STACK ;GET NEW STACK ;RESET SYSTEM MVI C,13 CALL BDOS ;SAVE FILE WRITE REQUEST CHAR LDA FC BDOS JMP PRTTL ;READ MORE DIRECTORY ENTRIES MOREDIR MVI C,FSRCHN ;SEARCH NEXT LXI D,FCB CALL BDOS ;READ DIR ENTRY INR A ;CHECK FOR END (0FFH) RZ ;GOTFCB1 ;NO MORE - SORT & PRINT ;POINT TO DIRECTORY ENTRY SOME DCR A ;UNDO PREV 'INR A' B+17 STA FILESW ;DATE REQUEST MVI A,'$' STA DATEBUFF+10 MVI A,8 STA DATEBUFF DTE LDA DATEBUFF+8 CPI '8' JZ OKDATE LXI D,DATEREQ MVI C,PRINT CALL BDOS MVI C,RDCON LXI D,DATEBUFF CALL BDOS JMP DTE ;NO ANI 3 ;MAKE MODULUS 4 ADD A ;MULTIPLY... ADD A ;..BY 32 BECAUSE ADD A ;..EACH DIRECTORY ADD A ;..ENTRY IS 32 ADD A ;..BYTES LONG LXI H,81H ;POINT TO BUFFER ;(SKIP TO FN/FT) ADD L ;POINT TO ENTRY MOV L,A ;SAVE (CAN'T CARRY TO H) ;MOVE  CONSOLE BUFF * RDCON EQU 10 ;READ CONS BUFFER * CONST EQU 11 ;CHECK CONS STAT * FSRCHF EQU 17 ; " " * FSRCHN EQU 18 ; " " * FCB EQU 5CH ;FILE CONTROL BLOCK * BDOS EQU 5 ; * TPATOP EQU 0C700H-1;TOP  T ENTRIES DONE LXI H,ORDER SHLD NEXTT MVI A,4 STA PRCOUNT ;PRINT AN ENTRY ENTRY MVI C,CONST ;CK STATUS OF KB CALL BDOS ;ANY KEY PRESSED? DCR A JZ ABORT ;YES, ABORT LHLD NEXTT ;GET ORDER TABLE POINTER MOV E,M ;GET LO ADDR INX H MOV COUNT INR A STA COUNT JMP MOREDIR ;PRINT TITLE PRTTL LXI H,TTL CALL WRCON ;SORT AND PRINT SPRINT LDA COUNT ;INIT THE ORDER TABLE LXI H,ORDER LXI D,TABLE LXI B,31 ;ENTRY LENGTH BLDORD MOV M,E ;SAVE LO ORD ADDR INX H MOV M,D ;SA D,M ;GET HI ADDR INX H SHLD NEXTT ;SAVE UPDATED TABLE POINTER XCHG ;TABLE ENTRY TO HL MVI B,8 ;FILE NAME LENGTH CALL TYPEIT ;TYPE FILENAME MVI A,'.' CALL TYPE MVI B,3 ;GET THE FILETYPE CALL TYPEIT INX H ;SKIP EXTENT INX H ;SKIP VE HI ORD ADDR INX H XCHG ;TABLE ADDR TO HL DAD B ;POINT TO NEXT ENTRY XCHG DCR A ;MORE? JNZ BLDORD ;..YES LDA COUNT ;GET COUNT STA FILCOUNT;SAVE AS # TO PRINT STA SCOUNT ;SAVE AS # TO SORT DCR A ;ONLY 1 ENTRY? JZ DONE ;..YES, SO SKINX H ;UNUSED MOV A,M ;GET REC COUNT DCR A ;FUDGE RAR ;DIVIDE RAR ;..BY 8 RAR ANI 1FH ;DELETE GARBAGE INR A ;MAKE RELATIVE TO 1, NOT 0 MVI B,16 ;SAVE AS MAX # EXTENTS MOV A,M ;RELOAD RECORD COUNT INX H ;SKIP RECORD COUNT EXTLP MOIP SORT SORT XRA A ;GET A ZERO STA SWITCH ;SHOW NONE SWITCHED LDA SCOUNT ;GET COUNT DCR A ;USE 1 LESS STA TEMP ;SAVE # TO COMPARE STA SCOUNT ;SAVE HIGHEST ENTRY JZ DONE ;EXIT IF NO MORE LXI H,ORDER ;POINT TO ORDER TABLE SORTLP CALL COMPR ;CV A,M ;GET EXTENT BYTE ORA A ;EMPTY? JZ ENDEXT ;..YES PUSH PSW LDA EXTCOUNT INR A DAA INR A DAA STA EXTCOUNT POP PSW INX H ;POINT TO NEXT CHR DCR B ;MORE IN EXTENT? JZ ENDEXT MVI A,0 CMP M JNZ EXTLP ;YES OMPARE 2 ENTRIES CM SWAP ;SWAP IF NOT IN ORDER INX H ;BUMP ORDER INX H ;..TABLE POINTER LDA TEMP ;GET COUNT DCR A STA TEMP JNZ SORTLP ;CONTINUE ;ONE PASS OF SORT DONE LDA SWITCH ;ANY SWAPS DONE? ORA A JNZ SORT ;SORT IS ALL DONE - PRINENDEXT MVI B,16 LDA NFILE ;GET # FILES INR A ;BUMP DAA ;MAKE DECIMAL STA NFILE ;SAVE IT BACK LDA PRCOUNT DCR A STA PRCOUNT CPI 0 JZ CLCR LXI H,SPACES CALL WRCON JMP CLCRPLUS CLCR CALL CR1 ;END, TYPE C/R MVI A,4 ENTRY TO TABLE XCHG ;ENTRY TO DE LHLD NEXTT ;NEXT TABLE ENTRY TO HL MVI B,31 ;ENTRY LENGTH TMOVE LDAX D ;GET ENTRY CHAR MOV M,A ;STORE IN TABLE INX D INX H DCR B ;MORE? JNZ TMOVE SHLD NEXTT ;SAVE UPDATED TABLE ADDR LDA COUNT ;GET PREV   EXTCOUNT MOV B,A MVI A,92H SUB B DAA CALL XO MVI A,'K' CALL TYPE LXI H,LABDAT CALL WRCON LXI H,DATEBUFF+2 CALL WRCON EXIT1 MVI E,00 MVI C,32 CALL BDOS LXI H,RESPRINT CALL WRCON LHLD STACK ;GET OLD STACK SPHL CMP M RZ MOV A,M PUSH H CALL TYPE POP H INX H JMP WRCON TYPEIT MOV A,M CALL TYPE INX H DCR B JNZ TYPEIT RET SPACE MVI A,' ' JMP TYPE CR1 MVI E,13 ;PRINT MVI C,5 ;C/R CALL BDOS MVI E,10 ;LF MVI C,5 JMP BDOS TEMP DS 1;MOVE TO STACK RET ;..AND RETURN RESPRINT DB FORMFEED,CONDOFF,ESCAPE,SPACING,12 DB ESCAPE,FORLEN,66 ;EPSON CODES DB ESCAPE,UNIDIR,0,'$' ;TO RESTORE PRINTER TO NORMAL ;COMPARE ROUTINE FOR SORT COMPR PUSH H ;SAVE TABLE ADDR  ;SAVE DIR ENTRY ;ERROR EXIT ERXIT POP D ;GET MSG MVI C,PRINT JMP CALLB ;PRINT MSG, EXIT ;ABORT - READ CHAR ENTERED ABORT MVI C,RDCHR CALLB CALL BDOS ;DELETE THE CHAR ;FALL INTO EXIT ;EXIT - ALL DONE , RESTORE STACK EXIT LDA FILCOUNT CPI MOV E,M ;LOAD LO INX H MOV D,M ;LOAD HI INX H MOV C,M INX H MOV B,M ;BC, DE NOW POINT TO ENTRIES TO BE COMPARED XCHG CMPLP LDAX B CMP M INX H INX B JZ CMPLP POP H RET ;COND CODE TELLS ALL ;SWAP ENTRIES IN THE ORDER TABLE SWAP 25 ;DID IT PRINT MORE THAN SIX LINES JNC EXIT1 ;IF SO DON'T PRINT SPACE MESSAGE CPI 24 ;DID IF PRINT 6 FULL LINES JZ NOCRLF ;IF SO DON'T DO EXTRA CR/LF CPI 21 ;DID IT PRINT MORE THAN FIVE LINES JNC NOCRLF2 ;IF SO DON'T DO EXTRA CR MVI A,1 STA SWITCH ;SHOW A SWAP WAS MADE MOV C,M INX H PUSH H ;SAVE TABLE ADDR+1 MOV B,M INX H MOV E,M MOV M,C INX H MOV D,M MOV M,B POP H MOV M,D DCX H ;BACK POINTER TO CORRECT LOC'N MOV M,E RET ;HEX OUTPUT XO PUSH PSW /LF CPI 20 JZ NOCRLF2 CPI 16 JZ NOCRLF2 CPI 12 JZ NOCRLF2 CPI 8 JZ NOCRLF2 CPI 4 JZ NOCRLF2 MVI A,CR CALL TYPE MVI A,LF CALL TYPE NOCRLF2 MVI A,CR CALL TYPE MVI A,LF CALL TYPE NOCRLF LXI H,EXTMSG CALL WRCON LDA ;SAVE CHAR RAR RAR RAR RAR CALL NIBBL ;PRINT LEFT NIBBLE POP PSW ;GET VALUE BACK NIBBL ANI 0FH ;ISOLATE NIBBLE CPI 10 ;NUMBER? JC XNUM ;YES ADI 7 ;FUDGE ALPHA HEX XNUM ADI '0' ;MAKE PRINTABLE JMP TYPE DS 30 ;STACK AREA STACK DS 2 ; STA PRCOUNT ;SEE IF MORE ENTRIES CLCRPLUS LDA COUNT DCR A STA COUNT JNZ ENTRY ;YES, MORE JMP EXIT ;TYPE CHAR IN A TYPE PUSH B PUSH D PUSH H MOV E,A MVI C,WRCHR CALL BDOS POP H POP D POP B RET WRCON MVI A,24H   E EQU $ ;READ ENTRIES IN HERE END 100H DS 1 ;'F' IF WRITING FILE BUFAD DW 80H ;OUTPUT ADDR MYFCB DB 0,'NAMES SUB',0 DS 19 DB 0 ORDER DS 128 ;ORDER TABLE TABL 0 SPACES DB ' | $' DATEREQ DB 'Please enter today''s date as mm/dd/yy---->$' NONMSG DB CR,LF,'++This program is looking for a file with the name' DB CR,LF,' -disknam.###(disk number) in USER 15. This becomes' db CR,LF,' the disc referencMB DB '$' COL2 DB CR,' | $' HDG DB ' SPECIAL FUNCTION KEYS' CRLF DB CR,LF,'$' SAVADDR DS 2H SAVLENGTH DS 2H LENGTHFLAG DB 00H ENTRYFLAG DB 01H FLAG1 DB 01H ADDER DB 30H SPCS DB ' = $' BACKSe and will remain on the disc even' db CR,LF,' if you ERA *.*.' db CR,LF,LF,'Please save your disk number now as follows:' db CR,LF,' A> USER 15' db CR,LF,' A> SAVE 0 -disknam.### ' db CR,LF,' this dash--^ is IZE DB FORMFEED,CONDOFF,ESCAPE,SPACING,12,ESCAPE,FORLEN,66,'$' COUNT DB 0 ;ENTRY COUNT SCOUNT DB 0 ;# TO SORT PRCOUNT DB 0 ;COUNTER FOR ITEMS ON LINE SPACES DB ' | $' SWITCH DB 0 ;SWAP SWITCH FOR SORT FILESW DS 1 ;'N' IF NO SP FUN KEY LABEL BUFmandatory' db CR,LF,' A> USER 0',CR,LF,'$' TTL DB ESCAPE,FORLEN,0,1 ;SET PAGE LENGTH AT 1". DB ESCAPE,SPACING,8 ;SET LINE SIZE TO 8/72" DB ESCAPE,UNIDIR,1 ;SET UNIDIRECTIONAL PRINT.AD DW 80H ;OUTPUT ADDR MYFCB DB 0,'NAMES SUB',0 DS 19 DB 0 ORDER DS 128 ;ORDER TABLE TABLE EQU $ ;READ ENTRIES IN HERE END 100H  DB CONDON,'$' ;SET CONDENSED PRINT. LABDAT DB ' Label Date--$' SWITCH DB 0 ;SWAP SWITCH FOR SORT FILESW DS 1 ;'F' IF WRITING FILE BUFAD DW 80H ;OUTPUT ADDR MYFCB DB 0,'NAMES SUB',0 DS 19 DB 0 ORDER DS 128 ;ORDER TABLE TABLåSAVE OLD STACK HERE NFILE DB 0 ;NUMBER OF FILES PRINTED ; NEXTT DW TABLE ;NEXT TABLE ENTRY EXTCOUNT DB 02 EXTMSG DB 'Space Left on Disk = $' COUNT DB 0 ;ENTRY COUNT SCOUNT DB 0 ;# TO SORT PRCOUNT DB 0 ;COUNTER FOR ITEMS ON LINE FILCOUNT DB   y's date as mm/dd/yy---->$ ++This program is looking for a file with the name -disknam.###(disk number) in USER 15. This becomes the disc reference and will remain on the disc even if you ERA *.*. Please save your disk number now as follows: å A> USER 15 A> SAVE 0 -disknam.### this dash--^ is mandatory A> USER 0 $CAU$ Label Date--$r€NAMES SUBsc even if you ER!9"Ë1Ë Í:m2¥>$2ùÆ>2ïÆ:÷Æþ8Ê@ï Í ïÆÍÃ> 2ñÆÉ:ñÆþ0Ì:!]~þ ÂZ 6?#ÂS\Í<2åÄ¡ Í\Í<2åÄŠ ÍÃRÍ¡ ÍÃÉ\Í<È=懇‡‡‡!�…oë*Îw#´"Î:ç<2ç×!~ͺ:ç!ÉIs#r#ë ë=ÂÛ:ç2ê2è=Ê ¯2¤:è=2å2èåÊ !ÉÍpü‚##:å=2åÂ:¤·Âó!É"Î>2é Í=Êì*Î^#V#"ÎëÍÈ>.Í­ÍÈ###~=æ<~#~·Êyõ:Ð<'<'2Ðñ#Êy>¾Â]:Í<'2Í:é=2éþʘ!ëͺàÍ×>2é:ç=2çÂ+ÃñÅÕå_ÍáÑÁÉ>$¾È~åÍ­á#ú~Í­#ÂÈÉ> í Í ÃÑ ÃîÍ:êþÒRþÊ0þåÒ&þÊ&þÊ&þ Ê&þÊ&þÊ&> Í­> Í­> Í­> Í­!Ñͺ:ÐG>’�'Í–>KÍ­!Šͺ!ñÆÍº Í!dͺ*ËùÉ A CBU$å^#V#N#Fë ¾#ÊyáÉ>2¤N#åF#^q#Vpár+sÉõÍŸñæþ 򬮮0íÅÕå_ÍáÑÁÉ>$¾È~åÍ­á#ú~Í­#ISpace Left on Disk = $ | $Please enter todaåå  .g.: *.ASM B:TEMP.* CR???.BAS C:*.COM C*.COM etc. [New user #] may be any desired user area from 0 to 31. At least one space should be between the [Filename.typ] and [New user #]. MAKE defaults to changing only files in the ACTIVE user area. TNOT to make change $$$ is SYS CR to make change or any other input NOT to make change $$$ = $$$Ã????????????????P*'"cÿ Í2‡!m ~þ ÊÁþ$ÊÝÖ0Ú<þ Ò<Í # ¨{þÊ<xþ ÒªþÚª2†Ã# xþ ÒªþÚª2†~þ Êþ?Ê*Ö0Úªþhis may be optionally over-ridden by specifying the user area FROM which you desire the files moved. [From user #] may be any user area 0 through 31 or may ambiguously specify the entire directory with a "*". The [New user #] should be followed immed ÒªÍ # Âïxþ ÒªþÚª2‡:\þÊ0Þ2‹Ã82‡ÃÍ2‹Í:‹ÆO ÊQg·g}oÃCÚž:‹_Í:‡2\fÍ2ˆþÿÊ:ˆ‡‡‡‡‡_!€"‰ëþåÊ!†¾Ê!\ ëþ?Ê¥–æÂ# ™*‰ë! ~Ük#~Üy*‰:†w:e<2eÍÉ\͵:†þ ÒæÆ0_ͺà o&)|‘Úôg,Âì>0…_åͺiately by the option flag "$$$" and the [From user #], e.g.: MAKE *.BAS 3$$$10 or MAKE B:*.COM 0$$$2$$$åÍÉÒ͵áÔåÍÉ͵áÔÿÍþʇÉ͇þ ÈÑàÃúà à Ãà ͺ úÍ¿*‰ #Å>¹Êì~þ Êåå_ͺáÁ #ÂÒÉå.ͺáÁ ÃÒ€Íá|ÃÝ:ˆ<2ˆþÊÃs:eþÊ#Íø¯2efÍþÿÊþÂ#2ˆÃsÉÍ¿�͵͉͵͉’͵͉°͵͇þ Â`É͵͉͵͉N͵͉gÍ$ͺÉMAKE USER NUMBER CHANGE SYNTAX: DEFAULT: A>MAKE [Filename.typ] [New user #] OPTIONAL: A>MAKE [Filename.typ]Íb·Â¤€ÃWx€€‚GÉ [New user #]$$$[From user #] EXAMPLES: A>MAKE CBASIC.COM 5 A>MAKE *.BAS 5 B>MAKE A:*.HEX 15 A>MAKE B:*.* 21$$$0 A>MAKE *.ASM 3$$$* CR to continue : $$$ [Filename.typ] may be any ambiguous file reference, eå*.ù ͵Ͱþ ÒŒB͵Í¿à MAKE USER CHANGE - Ver. 1.5 $$$ Requires CP/M version 2.0 or higher. Drive select error $$$ Bad Sector Write Error $$$ Drive is set to R/O $$$ User must be 0-31 $$$ is R/O CR to make change or any other input   åå ;******************************** ;* * ;* Setup Epson Printer * ;* For a CPM system * ;* Written by M.M. Hessel * ;* 2/15/82 * ;* * ;******************************** ; ORG 0100H JMP START ; START IN THåE MAIN PROGRAM ; ; DATA STORAGE AREA ; NTRY EQU 0005H ; CPM OUTPUT SUBROUTINE PSTR EQU 09 ; PRINT BUFFER FUNCTION GSTR EQU 0AH ; READ BUFFER FUNCTION PRTR EQU 05 ; PRINTER WRITE CHAR FUNCTION RFUNC EQU 01 ; CONSOLE READ CHAR FUNCTION WFåUNC EQU 02 ; CONSOLE WRITE CHAR FUNCTION CS EQU 1AH ; ^Z, CLEAR SCREEN (HARDWARE DEPENDENT) CR EQU 0DH ; CARRIAGE RETURN LF EQU 0AH ; LINE FEED ; ; WRITTEN DATA STORAGE ; PRINON DB 0DH DB ' *****EPSON PRINTER PROGRAM*****' DB 0AH,0åAH,0AH,0AH,07H,0DH DB ' !!!!! Load the PAPER FIRST!',0DH,0AH,0AH,0AH DB ' ***** Then TURNON the PRINTER****',0DH,0AH,0AH,0AH,07H DB ' Hit Any Key To Start The Program $' ; HLP DB 0DH DB '*****HELP INFORMATION*****',0DH,0AH,0AH,0AH å  ,0AH,0AH DB ' 1. Emphasized Print On',0DH,0AH,0AH DB ' 2. Condensed Print On',0DH,0AH,0AH DB ' 3. Emphasized Print Off',0DH,0AH,0AH DB ' 4. Condensed Print Off',0DH,0AH,0AH DB ' 5. Double Strike On',0DH,0AH,0AH DB ' 6. Doubled',0DH,0AH,0AH DB 'You can select emphasized and then doublestrike',0DH,0AH DB 'to get boldface type.',0DH,0AH,0AH,0AH,0AH DB 'HIT ANY KEY TO CONTINUE $' ; SETUP DB 0DH DB ' ***SETUP PRINTER***',0DH,0AH,0AH DB ' 1. Select Ty Strike Off',0DH,0AH,0AH DB ' 7. No change',0DH,0AH,0AH DB ' Enter your Selection $' ; PSEL DB ' ***SELECT PAPER OUT MODE***',0DH,0AH,0AH DB ' 1. Select Paper End Detector',0DH,0AH,0AH DB ' 2. Deselects Paper End Detector',0DH,0AH,0AHpesize',0DH,0AH,0AH DB ' 2. Select Line Spacing',0DH,0AH,0AH DB ' 3. Select Paper Out Mode',0DH,0AH,0AH DB ' 4. Select International Font',0DH,0AH,0AH DB ' 5. Help Information',0DH,0AH,0AH DB ' 6. Exit Program',0DH,0AH,0AH DB ' Ent DB ' Enter your Selection $' ; INTFONT DB ' ***SELECT CHARACTER SET***',0DH,0AH,0AH DB ' 0. U.S.A.',0DH,0AH,0AH DB ' 1. France',0DH,0AH,0AH DB ' 2. Germany',0DH,0AH,0AH DB ' 3. England',0DH,0AH,0AH DB ' 4. Denmark',0DH,0AH,0AHer Your Selection $' ; SLINSP DB ' ***SELECT LINE SPACING',0DH,0AH,0AH DB ' 1. 6 lines/inch (Default)',0DH,0AH,0AH DB ' 2. 8 lines/inch',0DH,0AH,0AH DB ' 3. Choose special spacing!',0DH,0AH,0AH DB ' Enter Your Selection $' ; SPSPC DB ' 5. Sweden',0DH,0AH,0AH DB ' 6. Italy',0DH,0AH,0AH DB ' 7. Spain',0DH,0AH,0AH DB ' Enter Your Selection $' ; ERRMSG DB 07H,' DEFAULT USED $' ; SPCNG DS 4 ; Stores line spacing OLDSTK DS 2 DS 60 STACK EQU $ ; Allows 30 items  DB ' ***VARIABLE LINE SPACING***',0DH,0AH,0AH DB ' You can set line spacing between 1/72 to',0DH,0AH DB ' 85/72 of an inch',0DH,0AH,0AH,07H DB ' Enter a number between 1 and 85 ',0DH,0AH,0AH,'$' ; TSIZE DB ' ***SELECT TYPEFACE***',0DHon the stack ; ;******************************** ;* Subroutine "Savstk" * ;* Saves CPM registers/stack * ;* Define SP * ;******************************** SAVSTK POP B LXI H,0000 ; Clear HL DAD SP ; Get Stack Pointer  DB 'This program will setup your Epson printer until you',0DH,0AH DB 'turn on it off or select a new set of options.',0DH,0AH,0AH DB 'The enlarged print option was not included since',0DH,0AH DB 'it resets to normal size after each line printe  ED EXIT RET ; RETURN TO CPM ; ;******************************** ;* Subroutine "HELP" prints * ;* information about program * ;******************************** HELP CALL CLEAR CALL CRLF LXI D,HLP CALL PRINT CALL READ JMP M****************** ; RESTOR LHLD OLDSTK ; Get old Stack Pointer SPHL ; Put it in the register RET ; This returns to CPM ; ;******************************** ;* Subroutine "TURNON" reminds * ;* you to turn on the printer * ;*****ENU ; ;******************************** ;* Subroutine "CHARSET" selects * ;* one of an eight possible * ;* character sets U.S.A.,France,* ;* Germany,etc. * ;******************************** ; CHARSET CALL CLEAR *************************** ; TURNON CALL CLEAR CALL CRLF LXI D,PRINON CALL PRINT CALL READ RET ; ;******************************** ;* Subroutine "Menu" the main * ;* selection menu. Program * ;* returns to this menu aft CALL CRLF LXI D,INTFONT CALL PRINT CALL READ MVI E,1BH CALL PCHAR ; Escape to Printer MVI E,52H CALL PCHAR ; "R" to Printer SUI 30H ; Convert console input fom ASCII to Binary CMP B ; Is input < 0 ? JC INCORR ; If yes invalid er * ;* selecting option. Exit goes * ;* back to CPM * ;******************************** ; MENU CALL CLEAR CALL CRLF MVI E,CR CALL PCHAR LXI D,SETUP CALL PRINT CALL READ MVI B,36H CMP B JZ EXIT ; EXIT TO CPM DCR B C MVI B,08H CMP B ; Is input > 7 ? JZ SKIP JNC INCORR ; If yes invalid SKIP MOV E,A CALL PCHAR ; "Character Set" to printer JMP FIN INCORR MVI E,00H CALL PCHAR ; Default Set is USA FIN JMP MENU ; End of Character Set!! ; ;**MP B JZ HELP ; TO WRITE HELP INFORMATION DCR B CMP B JZ CHARSET ; CHARACTER SET FONT DCR B CMP B JZ PSMODE ; PAPER SELECTOR DCR B CMP B JZ LINESP ; LINE SPACING DCR B CMP B JZ TYPE ; TYPESIZE JMP MENU ; INCORRECT NUMBER SELECT****************************** ;* Subroutine "PSMODE" turn * ;* the paper end detector off * ;* or on. Default is on * ;******************************** PSMODE CALL CLEAR CALL CRLF LXI D,PSEL CALL PRINT CALL READ MVI E,1BH  SHLD OLDSTK ; Save SP LXI H,STACK ; Set HL with address of SP SPHL ; Set new Stack Pointer PUSH B ; Return address set RET ; ;******************************** ;* Subroutine "Restor" * ;* Restores stack to CPM * ;**************   an inch* ; spacing on the Epson. * ;******************************** LINESP CALL CLEAR CALL CRLF LXI D,SLINSP CALL PRINT ; Your choice line of spacing MVI E,1BH CALL PCHAR ; Send escape to the printer CALL READ MVI B,32H CM*********** ; TYPE CALL CLEAR CALL CRLF LXI D,TSIZE CALL PRINT CALL READ MVI B,37H ; Test the selection CMP B JZ MENU ; No change DCR B CMP B JZ DSOFF ; Doublestrike off DCR B CMP B JZ DSON ; Doublestrike on DCR B CMPP B JNZ SPSP MVI E,30H ; 8 Lines/inch CALL PCHAR ; To the printer JMP MENU SPSP MVI B,33H CMP B JZ SPECL DFL MVI E,31H CALL PCHAR ; 6 Lines/inch (Default) JMP MENU SPECL CALL CLEAR ; Variable line spacing CALL CRLF LXI D,SPSPC CA B JZ CNOFF ; Condensed printing off DCR B CMP B JZ EMOFF ; Emphasized printing off DCR B CMP B JZ CNON ; Condensed printing on DCR B CMP B JZ EMON ; Emphasized printing on JMP MENU ; To Menu DSOFF MVI E,1BH CALL PCHAR MVI E,LL PRINT MVI E,41H CALL PCHAR ; Send "A" to printer(Esc A) LXI H,SPCNG ; Address of console buffer MOV D,H ; Put H & L in MOV E,L ; D & E registers MVI M,02 ; Maximum buffer length = 2 INX H ; Point to character count byte MVI M,48H ; Doublestrike off JMP PTR DSON MVI E,1BH CALL PCHAR MVI E,47H ; Doublestrike on JMP PTR CNOFF MVI E,12H ; ^R Condensed off JMP PTR EMOFF MVI E,1BH ; Escape to printer CALL PCHAR MVI E,46H ; "F" emphasized off JMP PTR CNON MVI00 ; Zero charcter count CALL CHRSTR ; Console buffer read subroutine CKCHR LXI H,SPCNG+1 ; This routine checks input is it 1 to 85? MOV A,M ; Character counter CPI 02H ; Two characters? INX H INX H ; Point to units digit JZ CTES ; If yes  E,0FH ; ^O Condensed on JMP PTR EMON MVI E,1BH ; Escape to printer CALL PCHAR MVI E,45H ; "E" emphasized on PTR CALL PCHAR NOCHG JMP MENU ; ;******************************** ; Subroutine "LINESP" provides a* ; choice of 1 - 85/72 ofprocess two digits CPI 1 ; One character? JZ SHIFT ; If yes shift tens to unit position JMP DEF ; If 0 set default CTES MOV A,M ; Put units digit in A CALL TEST ; Test if it is in the range 0 to 9 TENS DCX H ; Point to tens digit MOV A, CALL PCHAR MVI B,32H CMP B JNZ SELECT MVI E,38H CALL PCHAR JMP MENU SELECT MVI E,39H CALL PCHAR JMP MENU ; ;******************************** ;* Subroutine "TYPE" sets the * ;* typeface * ;*********************  ***** ;* Subroutine "Clear Screen" * ;* for Osborne ^Z =1AH * ;******************************* ; CLEAR PUSH PSW MVI A,CS CALL WCHAR POP PSW RET ; ;******************************* ;* Subroutine "Write" one * ;ns input to hex ADD A ; *2 ADD A ; *4 ADD M ; *5 ADD A ; *10 INX H ; point M to units ADD M ; Conversion complete CPI 0 ; Is it 0 JZ DEF CPI 86 ; Is it >85 JNC DEF MOV E,A CALL PCHAR ; Send spacing to printer RET SHIFT * character to the console * ;******************************* ; WCHAR PUSH H PUSH D PUSH B PUSH PSW MOV E,A ; PUT CHAR IN THE E REGISTER MVI C,WFUNC ; WRITE CHARACTER FUNCTION CALL NTRY POP PSW POP B POP D POP H RET ; DCX H ; Point to tens digit MOV A,M ; Move it to accumulator MVI M,30H ; Store ASCII 0 in tens INX H ; Point to units digit MOV M,A ; Put tens in unit place JMP CTES BLANK CPI 20H ; Is it blank? RNZ MVI A,30H ; Yes put an ASCII 0 in A. ;******************************* ;* Subroutine CRLF * ;******************************* ; CRLF PUSH PSW MVI A,CR ; Carriage return CALL WCHAR MVI A,LF ; Line Feed CALL WCHAR POP PSW RET ; ;*************************** MOV M,A ; Store it RET DEF POP D DEFLT MVI E,0CH CALL PCHAR ; Send 12/72 to printer 6 lines/inch LXI D,ERRMSG CALL PRINT JMP MENU ; ;******************************** ;* Subroutine "Print" a string * ;* on the console. St***** ;* Subroutine "READ" character* ;* from the console * ;******************************** ; READ EQU $ ; REGISTERS NOT SAVED MVI C,RFUNC CALL NTRY ; STORES THE CHARACTER IN A RET ; ;********************************ring must * ;* end with a $ sign * ;******************************** ; PRINT PUSH H ; PRESERVE REGISTERS PUSH D PUSH B PUSH PSW MVI C,PSTR CALL NTRY POP PSW POP B POP D POP H RET ; ;************************** ;* Subroutine "CHRSTR" reads a * ;* string of characters from * ;* the console * ;******************************** ; CHRSTR MVI C,GSTR CALL NTRY RET ; ;******************************** ; Subroutine "PCHAR" lists a *M CALL BLANK ; Is it blank? CALL TEST ; Test for 0 to 9 CALL CONV ; Convert to hex from decimal JMP MENU ; Done! TEST SUI 30H ; Tests for digit JC DEF ; <0 CPI 0AH JNC DEF ; >9 MOV M,A ; Store digit RET CONV MOV A,M ; Converts te   select a new set of options. The enlarged print option was not included since it resets to normal size after each line printed You can select emphasized and then doublestrike to get boldface type. HIT ANY KEY TO CONTINUE $ ***SETUP PRINTER***CALL SAVSTK ; Preserves CPM registers/stack CALL TURNON ; Reminds you to turn on printer CALL MENU MVI E,0AH ; Send CR to printer CALL PCHAR CALL RESTOR ; Returns to CPM END 0100H 1. Select Typesize 2. Select Line Spacing 3. Select Paper Out Mode 4. Select International Font 5. Help Information 6. Exit Program Enter Your Selection $ ***SELECT LINE SPACING 1. 6 lines/inch (Default) 2. 8å lines/inch 3. Choose special spacing! Enter Your Selection $ ***VARIABLE LINE SPACING*** You can set line spacing between 1/72 to 85/72 of an inch  Enter a number between 1 and 85 $ ***SELECT TYPEFACE*** 1. Emphasized Pårint On 2. Condensed Print On 3. Emphasized Print Off 4. Condensed Print Off 5. Double Strike On 6. Double Strike Off 7. No change Enter your Selection $ ***SELECT PAPER OUT MODE*** 1. Select Paper End Detector Ãp *****EPSON PRINTER PROGRAM*****  !!!!! Load the PAPER FIRST! ***** Then TURNON the PRINTER****  Hit Any Key To Start The Program $ *****HELP INFORMATION***** This program will setup your Epson printer until you turn on it off or 2. Deselects Paper End Detector Enter your Selection $ ***SELECT CHARACTER SET*** 0. U.S.A. 1. France 2. Germany 3. England 4. Denmark 5. Sweden 6. Italy 7. Spain Enter Your Selection $ DEFAULT USED $  ; character on the printer * ;******************************** ; PCHAR PUSH PSW MVI C,PRTR CALL NTRY POP PSW RET ; ;******************************** ;* MAIN PROGRAM * ;******************************** ; START   åÃa9Íh ÃaÍ8 ÍO ÓÍ* Í\ 7¸Êa¸ÊA¸ÊK¸ÊU¸ÊZ¸Êd¸ÊiÃaÍh HÃpÍh GÃpÃpÍh FÃpÃpÍh EÍh ÃaÍ8 ÍO ¾Í* Íh Í\ 2¸Â˜0Íh Ãa3¸Ê¦1Íh ÃaÍ8 ÍO GÍ* AÍh !üT]6#6Íb !ý~þ##Ê×þÊ Ã ~Íé+~Í ÍéÍõÃaÖ0Ú þ Ò wÉ~‡‡†‡#†þÊå þVÒ _Íh É+~60#wÃ×þ À>0wÉÑ Íh ëÍ* ÃaåÕÅõ ÍñÁÑáÉõ>Í@ ñÉåÕÅõ_ÍñÁÑáÉõ> Í@ > Í@ ñÉÍÉ ÍÉõÍñÉÍ>ÍQÍa Íh ÍLååååå 2. Deselects Paper End Detector Enter your Selection $ Á!9"!>ùÅÉ*ùÉÍ8 ÍO Í* Í\ ÉÍ8 ÍO  Íh éÍ* Í\ 6¸Ê—¸Ê˜¸Êª¸Êá¸Êv¸Ê ÃaÉÍ8 ÍO šÍ* Í\ ÃaÍ8 ÍO ;Í* Í\ Íh RÍh Ö0¸ÚÙ¸ÊÒÒÙ_Íh ÃÞÍh ÃaÍ8 ÍO »Í* Í\ Íh 2¸Â8Íh   åTR and follow the menu. If you have any problems call Merrill Hessel, (301) 2295182 nights and weekends.ly program is well documented and is easily modified to provide the additional options of GRAFTRAX PLUS. Just enter EPSNPRååååÃ~ AUTOMOD REV. 1.1 PROGRAM TO INSERT A USER SELECTABLE COMMAND LINE INTO CP/M ON DISK, TO BE EXECUTED ON ALL COLD STARTS FOR OSBORNE CP/M 2.2A-00F ENTER CP/M SOURCE DRIVE (A or B): ?$ ENTER COMMAND LINE TO BE INåSERTED, (36 CHARACTERS MAXIMUM) OR FOR NO COMMAND. If COMMAND LINE has N characters, where N > 6, first use SETUP.COM to establish (N - 6) dummy characters in FUNCTION KEY 0 (zero). This will avoid disastrous overlay of FUNCTION and ARROW  EPSON PRINTER OPTION PROGRAM This program provides most of the options that the EPSON printer allows. The Assembly program is well documented and is easily modified to provide the additional options of GRAFTRAX PLUS. Just enter EPSNPR  åàÆ2 ÖÂ2 Ã*O !á~þ`ú!Ö # ¯>2ØÍ= RÍÃ!"Ù!"Û!€ "Ý*ÝDMÍÎ*ÛDMÍÈ*ÙDMÍË:ط€ÍÑ·Ê’ ÍÃ:ÍÔ·Ê’ bÍÃ::×*ٽ¦*Û#"Û!ÿÿ#"Ù*Ý€€'z¼Â¾{½ÊÄ"ÝÃOÉ ^#Vë^#V{=2×>2$Êï 2ÍÃ: âÍ ßÍ: ;************************************* ;* * ;* "AUTOMOD" * ;* * ;* LEE SWORDY 14/5/82 * ;* * ;* Revision 1.àÆ2 WRONG!$ lDISK READ ERRORm $ lERROR: CP/M NOT PRESENT ON SOURCE DISKm $ lDISK WRITE ERRORm $ÍÔ·Ê’ bÍÃ::×*ٽ¦*Û#"Û!ÿÿ#"Ù*Ý€€'z¼Â¾{½ÊÄ"ÝÃOÉ ^#Vë^#V{=2×>2$Êï 2ÍÃ: âÍ ßÍ:1 by Jim Woolley, FOG * ;* Disk Librarian, 8/82. * ;************************************* ; AUXBUF EQU 200AH ; CP/M AUX CMND BFR ST ADR (BYTE CNT = 1st) ; ORG 100H JMP START ; MSG1 DB 1AH,' AUTOMOD REV. 1.1',0DH,0AH å DB ' PROGRAM TO INSERT A USER SELECTABLE COMMAND LINE',0DH,0AH DB 'INTO CP/M ON DISK, TO BE EXECUTED ON ALL COLD STARTS',0DH,0AH,0AH DB ' FOR OSBORNE CP/M 2.2A-00F',0DH,0AH,0AH,0AH DB 'ENTER CP/M SOURCE DRIVE (A or B): ?',8,8,8,'$' MSGå2 DB 0DH,0AH,0AH,'ENTER COMMAND LINE TO BE INSERTED,',0DH,0AH DB '(36 CHARACTERS MAXIMUM) OR FOR NO COMMAND.',0DH,0AH,0AH ; db 'If COMMAND LINE has N characters, where N > 6,',0dh,0ah db 'first use"SETUP.COM to establish (N - 6) dummy',0dh,KEY information but, also, will render FUNCTION KEY 0 unusable. COMMAND ?: $ **** COMMAND INSERTION COMPLETE **** $1¼ ÍÍþÊ:þ`úšÖ ÖAú¤þú¯ ÍÉOÅ*Åí°ÁÍÅ ^#Vë^#V{=2×>2ØÍ=:€ þÃÊï 2ÍÃ: âÍ ßÍ:   DAD D ; +DPH BASE ADRS ; MOV E,M INX H MOV D,M ; GET DPB ADRS ; XCHG ; MOV E,M INX H MOV D,M ; GET 'SPT' ; MOV A,E DCR A ; -1 STA SPT ; SAVE SECTRS/TRACK ; ;**** READ CP/M FROM DISK INTO CORE STARTING AT 980H (NO BOOT LOADG3 DB 0DH,0AH,0AH,0AH,'**** COMMAND INSERTION COMPLETE ****',0DH,0AH,0AH DB '$' ; ;**** PRINT HEADER AND REQUEST DRIVE ID START LXI SP,STACK ; LOCAL STACK ; MVI C,9 LXI D,MSG1 ; HEADER MSG/DRIVE ID REQ TO CONS CALL 0005 ; RETRY1 MVI C,1 ; INER) MVI A,0 STA FLAG ; RD/WRT FLAG TO READ (0) CALL RDWRT ; DISK READ/WRITE ROUTINE ; ;**** CHECK IF CP/M IS VALID (1st BYTE OK ?) LDA 980H ; GET BYTE 1 OF CPM CPI 0C3H ; SHOULD BE 'JMP' OP CODE JZ REQUEST ; YES: CPM OK ; MVI C,9 LXI D,PUT 'DRIVE ID' CALL 0005 CPI 03 ; ^C ? JZ EXIT ; YES: ABORT CPI 60H JM UPPER SUI 20H ; MAKE UPPER CASE UPPER SUI 41H ; CONV A or B TO 0 or 1 JM CHERROR ; IF NOT 0 or 1 CPI 2 JM DRIVEOK ; CHERROR MVI C,9 LXI D,ERR1 ; 'WRONG' MSG TERR3 ; 'CPM BAD' MSG TO CONS CALL 0005 JMP EXIT ; ;**** REQUEST COMMAND STRING AND INPUT THE STRING REQUEST MVI C,9 LXI D,MSG2 ; 'CMND REQ' MSG TO CONS CALL 0005 ; MVI C,10 LXI D,INBUFF ; INPUT 'CMND STRING' CALL 0005 ; ;**** TRANSFER 'O CONS CALL 0005 JMP RETRY1 ; DRIVEOK MOV C,A PUSH B ; SAVE DRIVE # ; ;**** MOVE PART OF BIOS VECTOR TABLE INTO LOCAL CORE FOR CALLS LHLD 0001 ; GET WARM ST VCTR ADRS LXI D,24 ; INDEX INTO VCTR TBLE DAD D ; HL + INDEX = SOURCE LXI D,VECCMND STRING' FROM IP BUFF TO AUX CMND BUFF LDA INBUFF+1 ; GET INPUT BYTE CNT ADI 2 ; +2 FOR CCP STA AUXBUF ; SAVE AS AUX CMD BFR BYTE CNT SUI 2 ; = 0 ? JNZ JUMP1 ; NO STA AUXBUF ; YES: MAKE AUX BYTE CNT = 0 JMP JUMP4 ; JUMP1 MOV C,A ; BYTBL ; DESTINATION LXI B,18 ; BYTE COUNT (6 JUMP INSTR'S) DB 0EDH,0B0H ; Z80 'LDIR' INST (BLOCK MOVE) ; ;**** GET 'SECTORS PER TRACK' FROM 'DISK PARAM BLOCK' POP B ; GET DRIVE # CALL SELDSK ; SELECT DISK DRIVE ; LXI D,10 ; INDEX INTO DP HEADERTE CNT LXI D,AUXBUF+1 ; DESTINATION LXI H,INBUFF+2 ; SOURCE LOOP1 MOV A,M ; GET A SOURCE BYTE CPI 60H ; MAKE UPPER CASE JM JUMP5 SUI 20H ; JUMP5 STAX D ; BYTE TO DEST. INX D ; DEST. + 1 INX H ; SOURCE + 1 DCR C ; BYTE CNT - 1 JNZ0ah db 'characters in FUNCTION KEY 0 (zero). This will',0dh,0ah db 'avoid disastrous overlay of FUNCTION and ARROW',0dh,0ah db 'KEY information but, also, will render FUNCTION',0dh,0ah db 'KEY 0 unusable.',0dh,0ah,0ah ; DB ' COMMAND ?: $' MS  ; +1 SHLD SECTOR ; RE-SAVE SECTOR # ; LHLD DMAADR ; DMA ADRS + 128 LXI D,128 DAD D LXI D,2780H ; END OF CPM ? MOV A,D CMP H JNZ NOTEND ; NO MOV A,E CMP L JZ ENDCPM ; NOTEND SHLD DMAADR JMP LOOP2 ; DO NEXT SECTOR ENDCPM RET ; ;5 ; EXIT JMP 0000 ; CPM WARM ST ENTRY ; ;******* READ/WRITE CPM TO/FROM DISK SUBROUTINE: ; 'FLAG' = 0 FOR READ, = 1 FOR WRITE ; RDWRT LXI H,0 ; INIT SECTOR = 0 SHLD SECTOR LXI H,0 ; INIT TRACK = 0 SHLD TRACK LXI H,980H ; INIT DMA ADRS = 9**** BUFFERS, STORAGE AND MESSAGES: ; VECTBL ; PORTION OF BIOS VECTOR TABLE SELDSK DS 3 SETTRK DS 3 SETSEC DS 3 SETDMA DS 3 READ DS 3 WRITE DS 3 ; SPT DB 0 ; 'SECTORS PER TRACK -1' FLAG DB 0 ; CPM RD/WRT FLAG; ; SECTOR DW 0 TRACK DW 0 DM80H SHLD DMAADR ; LOOP2 LHLD DMAADR MOV B,H MOV C,L CALL SETDMA ; SET DMA ADRS ; LHLD TRACK MOV B,H MOV C,L CALL SETTRK ; SET TRACK # ; LHLD SECTOR MOV B,H MOV C,L CALL SETSEC ; SET SECTOR # ; LDA FLAG ; READ ? (=0) ORA A AADR DW 0 ; INBUFF DB 36,0 DS 36 ; ERR1 DB 12,12,12,'WRONG!',8,8,8,8,8,8,8,8,8,8,'$' ERR2 DB 0DH,0AH,0AH,1BH,6CH,'DISK READ ERROR',1BH,6DH,0DH,0AH,'$' ERR3 DB 0DH,0AH,0AH,1BH,6CH,'ERROR: CP/M NOT PRESENT ON SOURCE' DB ' DISK',1BH,6DH,0DH,0AH,'$'  JNZ DSKWRT ; NO: WRITE ; CALL READ ; READ A RECORD ORA A ; READ ERROR ? JZ GOODRD ; NO ; MVI C,9 LXI D,ERR2 ; 'SOURCE READ' ERR MSG TO CONS CALL 0005 JMP EXIT ; DSKWRT CALL WRITE ; WRITE A RECORD ORA A ; WRITE ERROR ? JZ GOODRD ; N ERR4 DB 0DH,0AH,0AH,1BH,6CH,'DISK WRITE ERROR',1BH,6DH,0DH,0AH,'$' ; DS 64 STACK END AD ERROR',1BH,6DH,0DH,0AH,'$' ERR3 DB 0DH,0AH,0AH,1BH,6CH,'ERROR: CP/M NOT PRESENT ON SOURCE' DB ' DISK',1BH,6DH,0DH,0AH,'$' O ; MVI C,9 LXI D,ERR4 ; 'DEST WRITE' ERR MSG TO CONS CALL 0005 JMP EXIT ; GOODRD LDA SPT LHLD SECTOR CMP L ; END OF TRACK ? JNZ JUMP3 ; NO ; LHLD TRACK INX H SHLD TRACK ; TRACK # +1 ; LXI H,0FFFFH ; SECTOR # = -1 JUMP3 INX H å LOOP1 ; IF NOT DONE ; XRA A ; A = 0 STAX D ; LINE TERMINATOR ; ;**** WRITE CP/M BACK TO SOURCE DISK JUMP4 MVI A,01 ; RD/WRT FLAG TO WRITE STA FLAG CALL RDWRT ; DISK READ/WRITE ROUTINE ; MVI C,9 LXI D,MSG3 ; 'ALL DONE' MESSAGE CALL 000  t lxi d,filename ;point to file name lxi b,10 ;set counter move: lhld ccp ;get CCP back mvi l,07 ;bias by 7 bytes call again ;move file name to CCP lhld ccp ;get CCP back mvi l,88h ;offset to counter mvi a,08h ;lsb of ccp pointer mov m,a --------------------------- ; ; EQUATES ; clear equ 26 ;clear screen escape equ 1bh ;escape character graph equ 'g' ;graphics nograph equ 'G' ;nographics pbuff equ 9 ;BDOS print buffer bdos equ 5 ;location of BDOS cr equ 0dh ;carriage return lf;put it in place lhld ccp ;get CCP one more time mvi l,89h ;offset to counter mov a,h ;put it in place mov m,a ;counter restored lhld ccp ;get CCP last time pchl ;execute cold start again: ldax d ;get byte to move mov m,a ;move it inx h equ 0ah ;line feed ; ; START OF PROGRAM ; org 0100h ; lhld 01 ;get warm start address mvi l,00 ;zero L register mov a,h ;get page boundary in A sui 16h ;subtract 16 to find CCP mov h,a ;put back new page boundary shld ccp ;store it lxi ;increment location inx d ;increment location dcx b ;decrement counter mov a,b ;get counter in a ora c ;check if done jnz again ;...not done ret ;...done print: mvi c,pbuff ;get proper call in c jmp bdos ;do it ; ;STORAGE AREA ; ccp:  d,logo ;point to logo lxi b,2047 ;number of characters in logo over: ldax d ;get byte of logo sui 65 ;convert to graphics stax d ;store it inx d ;new address dcx b ;decrement byte counter mov a,b ;ggt in A ora a ;are we done? jnz over ;ids 2 ;temp storage of CCP filename: db 06,'SC',0,0,0,0,0,0,0,0,0 ; / \ ; length / command must be followed by at ; of command string least one zero to work properly ; ; note: if command string is longer than 8 charactef no, back again start: lxi d,startgr ;point to startgraphics call print lxi d,logo ;point to logo message call print ;display it lxi d,stopgr ;point to end of graphics call print ;display it lxi d,endmes ;point to load message call prinrs, ; you must change "lxe b,10" just before MOVE: to ; "lxi b,length+2" ; startgr: db clear db escape,graph,'$' stopgr: db escape,nograph,'$' endmes: db cr,lf,lf,lf,9,'Loading SUPERCALC...',cr,lf,lf,'$' ; / ; message to print under l ;------------------------------------------------ ; AUTOCPM.ASM version 1.0 10/12/81 ; ; copyright 1981 by Thom Hogan ; Basically Speaking Press ; Palo Alto, CA ; ; This program loads and executes MBASIC.COM ; ;---------------------  YYYY' db 'YYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaWWWWW' db 'WWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' dbaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY' db 'Iaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaKWWWWWWZaaaa 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY' db 'YYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaVWWWWWWIaaaaaaaaaaKWWWWW' db 'WZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVWWWWW' db 'WIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY' db 'YYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY' db 'Zaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaVWWWWWWWWWWWWWWWWWWWWZ' aa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaWWWWW' db 'WWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY' db 'YYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadb 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa$' end aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaVWWWWWWWWWWWWWWWWWWWWZ' aaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaWWWWW' db 'WWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYåogo ; logo: db 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaKWWWWWWWWWWWWWWWWWWWWI' db 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKWWWWWWWWWWWWWWWWWWWWIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaåaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKWWWWWWZaaaaaaaaaaVWWWWWWIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaåaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaåaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*.|Ög"f˜ÿÖA x·ÂtÍa˜ÍaxÍa{Íah *f.ÍV*f.ˆ>w*f.‰|w*féw# x±ÂVÉ Ã4SCg$G$ Loading SUPERCALC... $YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaå  åaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVWWWWWWWWWWWWWWWWWWWWZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa$åÃFSETAUTO version 1.0 (23 Apr 82)copyright 1982 Michael M Rubenstein!91@"¨:\· :<=!@Í$Í?Í|>¹ õ:]þNÊ× þCÊ× þWÊ× þBÊ×è Í:Éæ‡_!^#V Íô Í!Ë~·(þ ( åÅ_ÍÁá#ë Í1!Éqmþ (##þ (w#ö6!@Í Í\åÍ|>¹ õíKÍ£€!Í£í{¨ÉåÕåÕÅOÍ£|µÊ˜ÁÅÍ£ÁÑáÉåÕÅBKåÍ£Á!Í£$Í£ÁÑáÉåÕÅBKåÍ£Á!Í£'Í£ÁÑáÉÕ€Ñ{þØ à !ª!¿!Õ ÍÃ*é DISK READ ERROR $ DISK WRITE ERROR $ INVALID DRIVE $ Option: $ Program: $å $ NONE$COLD$WARM$BOTH$Ã*é DISK READ ERROR $ DISK WRITE ERROR $ INVALID DRIVE $ Option: $ Program: $Ñ{þØ à !ª!¿!Õ ÍÃ*é DISK READ ERROR $ DISK WRITE ERROR $ INVALID DRIVE $ Option: $ Program: $åaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVWWWWWWIaaaaaaaaaaKWWWWWWZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  rformed. Warning¬  iæ  botè  ió  specifieä  anä  thå  commanä � terminateó  witè  á warí boot¬  thå commanä wilì  bå � reissued when the program terminates. Š Examples: Set no autostart: setauto none Seô autostarô tï supercalã oî colät 3. Autostarô  oî  warí booô (leô må  kno÷  iæ �           anyone finds a use for this one.) 4. Autostart on warm or cold boot Additionally¬  thå  disë caî bå seô tï autostarô anù � commanä witè thå restrictioî thaô thå commanä cannoô � boot®  Uså  disë � on drive b: setauto b:cold sc Don'ô   changå  thå  autostarô  command¬   buô   seô � autostart on cold or warm boot: setauto both Display the selected autostart: setauto End of document  bå morå thaî ¶ characteró long. Setautï  haó beeî testeä undeò Osbornå Reö 1.3®  Iô � shoulä alsï worë undeò Reö 1.2. Syntax: General form: setauto [d:][opt] [cmd] where ä ió thå drivå specifier®  Iæ omitted¬  thå defaulô � drivåe will be used. opt one of the options none -- no autostart will be performed cold -- autostart on cold boot warm -- autostart on warm boot both -- autostart on cold or warm boot Onlù thå firsô letteò oæ opô ió sig.pì 90 AUTOMOD.DOC CP/Í COMMANÄ LINÅ INSERTIOÎ PROGRAM DOCUMENTATION Thå CP/Í commanä linå insertioî prograí 'AUTOMOD.COM§ changeó thå � booô  copù oæ CP/Í oî trackó ± - nificant® Iæ opô � ió  omitteä  oò  invalid¬  thå  currenô  optioî  anä � command for the disk will be displayed. cmä  ió  anù commanä lesó thaî  ¶  characteró  long® � Operandó oò drivå specifieró arå noô permitted®  Nï � checking for validity is pe³ oæ thå diskettå iî thå  speci� fieä  drive®  Thió changå consistó oæ insertinç á 'commanä  line§ � intï  á  buffeò  areá oæ CP/Í provideä  foò  thió  purpose®  Thió � 'commanä  line§  ió reaä bù CP/Í immediatelù followinç  á  'cold-� start§ (reseô butto.he setauto.doc page # Copyright 1982 Michael M Rubenstein Description: Setautï  á setó autostarô optionó foò á disë oî  thå � Osbornå 1® Possiblå optionó are: 1. No autostart 2. Autostart on cold boo  î prograí AUTOMOD.COÍ simplù puô thå diskettå � containinç  thió prograí intï eitheò drive¬  placå thå disë  witè � thå CP/Í copù yoõ desirå tï modifù intï thå otheò  drive¬  unpro� tected®  (neveò  uså  thå  originaì disketteó supplieä  witè  thå � Osbor loadeä intï memorù anä run¬  thå AUTOSÔ prograí merelù  drawó � thå 'BIÇ O§ oî thå screeî theî loadó thå maiî prograí supplieä oî � thå disë (MBASIC¬ WORDSTAR¬ SUPERCALà etc.© oò iî thå caså oæ thå � systeí disk¬  thå HELÐ program®  Bù usinç thå commanä lne© Witè CP/Í running¬ issuå thå command: AUTOMOD„ (assuminç iô ió iî thå selecteä drive) Wheî thå 'CP/Í sourcå drive§ ió requested¬  responä appropriatelù � (thå  sourcå  drivå wilì alsï bå  thå  destinatioî  drive)®  Wheî � AUTOMOÄ requestó tinå inser� tioî  program¬  thió commanä caî bå changeä tï anythinç yoõ want¬ � oò  maù  bå deleteä altogether¬  iî whicè caså  CP/Í  loadó  verù � quicklù anä startó uð cleanlù (thå waù iô waó originallù intendeä � to)®  Somå  exampleó oæ commandó whicè chå desireä 'command§ tï insert¬  typå iô iî (uð � tï 3¶ characters© anä terminatå iô witè á carriagå return®  Iæ nï � commanä  ió tï bå entereä (quick-start)¬  simplù typå á  carriagå � return¬  thió wilì eraså anù previouó commanä iî thå CP/Í buffer® � Thaî bå inserteä  areº  DIR„ � whicè wilì causå thå 'A§ disë directorù tï bå displayeä oî start-� up¬  XDIR„ printó thå extendeä directorù (samå aó thå utilitù disë � does¬ buô faster)¬ MBASIC„ oî thå 'BASIC§ disë wilì loaä anä start MBASIà immediately¬ å  ne÷  commanä wilì bå inserteä ontï thå disë anä thå  messagå � ***ª COMMANÄ INSERTIOÎ COMPLETÅ ***ª shoulä appear®  Iæ aî  erroò � occurs¬  thå  sourcå oæ thå erroò shoulä bå correcteä anä AUTOMOÄ � re-run. AUTOMOÄ  caî bå useä tï changå thå commanä MBASIà NAME.BAS„ wilì causå MBASIà tï loaä anä � automaticallù  loaä  thå  'Basic§ languagå prograí  NAME.BAÓ  anä � starô runninç iô ('turnkey§ systeí )®  Thå samå maù bå donå  witè � Wordstar¬ Supercalã oò anù otheò useò program. Tï  uså thå insertiobuffeò anù  numbeò  oæ � timeó oî thå samå copù oæ CP/M. Thå AUTOMOÄ prograí ió addresó dependant¬  anä futurå releaseó oæ � CP/Í maù requirå á ne÷ versioî oæ AUTOMOÄ bå obtained. ADDENDUM by Jim Woolley, FOG Disk Librarian, 8/82 Thå Osbornå î )¬  thió commanä ió theî executeä aó � iæ  iô wherå anù otheò commanä entereä oî thå keyboard®  Alì  thå � disketteó  supplieä bù Osbornå havå thå commanä lineº  AUTOSÔ  iî � thió buffeò initially¬  thió commanä causeó thå AUTOSÔ prograí tï � bå !  åT© wilì overlaù thió information® Therefore¬ iô ió � necessarù tï firsô assigî enougè dummù spacå tï functioî keù ° � (zero)¬ sï thaô onlù thå dummù spacå wilì bå overlayed® Thió � actioî will¬ however¬ rendeò functioî keù ° unusable. Assuminç thaô thåå commanä linå tï bå inserteä haó Î characters¬ � iæ Î ió lesó thaî 7¬ theî therå ió nï speciaì concern® Iæ Î ió � greateò thaî 6¬ theî firsô ruî SETUÐ tï alteò thå functioî keù � definitioî oî thå diskettå tï bå configureä bù AUTOMOD® Seô � functioî keùå ° tï bå (Î - 6© blankó oò otheò dummù characters® � Thió wilì seô asidå enougè spacå foò thå commanä linå tï bå � inserteä bù AUTOMOD® Buô remembeò thaô functioî keù ° wilì nï � longeò bå meaningful® Instead¬ iô wilì bå overlayeä bù thå � inserteä commåanä line.AUTOMOD® Buô remembeò thaô functioî keù ° wilì nï � longeò bå meaningful® Instead¬ iô wilì bå overlayeä bù thå � inserteä commåimplementatioî oæ CP/Í makeó uså oæ thå 'commanä � line§ buffeò areá iî thå firsô threå diskettå trackó tï storå � functioî anä arro÷ keù information® Usinç AUTOMOÄ tï enteò á � commanä linå havinç morå thaî siø characteró (thå amounô alloweä � foò AUTOS"  Error occured during disk Write - ABORT$ Specified an illegal disk drive - ABORT$ Recovered - Please DOUBLE CHECK before using$ No File Name specified - ABORT$ File NOT found$ååÃ0 Unerase Version 1.2 (02/09/82) (CP/M Version $2.2) $1.4) $!4¾Èw_ÍÉ#~þ ʸ ÞAÉ:4É~ÍÞ~#þ ¼ > ÍÞÉ\ þ?Ê» w#ÂÒ É! ͼ Ã? ÍþÿÀ!¹ͼ ÃÍþÿÀ!)ͼ ÃÃÍþÿÀ!Ðͼ Ã:5Í¡ É:6þÈþÉ:6Í¡ É:7Íå1ÍÍÍ Í*ÃÍyÉÍDÍdÉÍÑÈÍóà  Í:ü·Ê=RÍyÉ¢ÍyÉ:\·ÂQÍ<=2\:]þ Ð�ÍyÃ€Í Íþ >*;Ô 2ÍyÍÃ:\Oͱ|µÊ~:þ0Ø^#Vë"ÏÉÍ^#Vë#Ín}2ù!~2ú>04É*™:GÍeÉ:ù·È:úOÍ´:ûOÍ�Í·ͽæîɯ2ý!€~þåÂååÍRáÂ6>2ý:ü<2ü Âü:ý·ÊC:úOÍ´:ûOÍ�Í·ÍÀ·Â‡:ù=2ù:û<2ûÉ#]ë æ¾À# ÂYÉ~#ÂeÉÍq¯|g}oÉ Ã(ÍyÃþÍyÃ*ÏëÍÆMÉ#Vë"ÏÉÍ^#Vë#Ín}2ù!~2ú>04É*ÃÉë nÉß:ù·È:úOÍ´      åå#  å ALL the comments, so be ; sure to read the article ; and the printed program listing in the ; magazine ; ; ; Proper credit given to original author: ; ; Gene Cotton ; ; All I did was to type this in from the ; magazine ; Hopefully without åadding any typing errors ; ; HBR Version 1.0 as of 11/17/81 ; ; Henry B. Rothberg ; 4 Laticrete Park North ; Bethany, Ct 06525 ; ; VERSION 1.1 AS OF 11/19/81 ; ; ADDED CONDITIONAL EQUATES FOR CP/M 1.4 ; AND 2.2 AS WELL AS EQUATES FOR STANDARD å ; CP/M AND MICROPOLIS CP/M (DIFFERENT ; SECTOR SKEW TABLES) ; ; BRUCE E. BLAKESLEE ; 906 CRESTWOOD ROAD - WEST ; WESTFIELD, N.J. 07090 ; ; ; Version 1.2 as of 2/9/82 ; ; Added modifications for Compatibility ; to the Osborne 01 Computer ; ; *.|Ög"í! "ëÍÂ!kå"éÍÏ*é^##"é~“Gk^{Þò8Í„Ã;Í®#Â+*é:ë=2ë ͮ Í®ó *í.Íy*í.ˆ>w*í.‰|*íÃw# x±ÂyÉK—°Æ¹Ê¤2ï{Æ_ÒžzÆW:ïÊÅÕåͽáÑÁÉÅÕå͸áÑÁÉà Ãÿͽ!8"ñÉ*ñT]ͽ*ñ}Æ oÒå|Æg"ñÉ¡ É:6þÈþ Byron A. Mckay ; 80 West El Camino Real ; Mountain View Ca. 94040 ; (415) 961-2670 D, N.J. 07090 ; ; ; Version 1.2 as of 2/9/82 ; ; Added modifications for Compatibility ; to the Osborne 01 Computer ; ; )- - - - F U N C T I O N K E Y M E N U - - - - -($ ) 0: ($ ) 1: ($ ) 2: ($ ) 3: ($ ) 4: ($ ) 5: ($ ) 6: ($ ) 7: ($ ) 8: ($ ) 9: ($@$000000000000^A$00000000000^B$00000000000^C$00000000000^D$00000000000^E$0000000UNERA.DOC The following was extracted from UNERA12.ASM. The entire file could not be copied successfully. Jim Woolley, FOG Disk Librarian, 8/82 ; Program to recover Erased file ; ; From Interface Age December 1981 pg 98+ ; ; I didn't type in$  å^X$00000000000^Y$00000000000^Z$00000000000)($000000^O$00000000000^P$00000000000^Q$00000000000^R$00000000000^S$00000000000^T$00000000000^U$00000000000^V$00000000000^W$00000000000FUNCTION.DOà John S. Florent Thå  capabilitù  oæ  programminç functioî keyó  ió  verù  useful® � However¬  É  havå founä thaô therå arå timeó wheî iô woulä bå nicå  tï � displaù thoså keyó oî thå screen®  Thå FåUNCTION.COÍ prograí doeó jusô � that®  Wheî  useä  iî conjunctioî witè AUTOST.COM¬  thå "big-O¢ ió  dis� playeä  anä ió cleareä sooî thereafter¬  replaceä bù á menõ  oæ  func-� ctioî keù valueó currentlù loadeä intï thå system®  Wheî FUNCTIONå.COÍ � ió  renameä  aó AUTOST.COM¬  thå "big-O¢ (whicè ió  pretty¬  buô  non-� functional©  ió replaceä bù thå menõ (noô aó prettù buô verù function� al!) Whaô arå thå uses¿ Well¬ É havå severaì disketteó containinç jusô � games® Witè sucè á disketåte¬ iô ió verù nicå tï seô eacè functioî keù � tï contaiî thå commanä tï executå á specifiã gamå program®  Wheî  thå � diskettå ió booted¬ thå menõ appearó immediately¬ showinç alì gameó oî � thå  diskettå (iæ 1° oò fewer)»  witè onå (two-finger© keystrok0000^F$00000000000^G$00000000000^H$00000000000^I$00000000000^J$00000000000^K$00000000000^L$00000000000)($00000^N$00000000000^O$00000000000^P$00000000000^Q$00000000000^R$00000000000^S$00000000000^T$00000000000^U$00000000000^V$00000000000^W$00000000000%  )- - - - F U N C T I O N K E Y M E N U - - - - -($ ) 0: ($ ) 1: ($ ) 2: ($ ) 3: ($ ) 4: ($ ) 5: ($ ) 6: ($ ) 7: ($ ) 8: ($ ) 9: ($@$000000000000^A$00000000000^B$00000000000^C$00000000000^D$00000000000^E$0000000hå  "editinç  nï file¢ menu¬  yoõ caî  executå  thå  FUNCTION.COÍ � program, which will display all the WordStar function keys. Onå  functioî  keù caî bå seô uð whicè woulä executå thå  prograí � and print the function key values on your printer: ^PF0000^F$00000000000^G$00000000000^H$00000000000^I$00000000000^J$00000000000^K$00000000000^L$00000000000)($00000^N$00000000000^O$00000000000^P$00000000000^Q$00000000000^R$00000000000^S$00000000000^T$00000000000^U$00000000000^V$00000000000^W$00000000000UNCTION^P However¬  thió maù noô worë oî alì printeró (É havå aî Epsoî MX-8° IIÉ � F/T).  Onå  functioî  keù caî bå seô uð whicè woulä executå thå  prograí � and print the function key values on your printer: ^PF^X$00000000000^Y$00000000000^Z$00000000000)($0000þC–ÍEöÍQyÍQxÃQþRÂÍöÀÃQ*Õë* {•zœÒ·*ùÉÑ~#" É<æþÚÈÆþÚÏÆÆAOÃGæðÆ�'Î@'OÍxæÆ�'Î@'OÃNÍ#Âõ åå*.|Ög"í! "ëÍÂ!kå"éÍÏ*é^##"é~“Gk^{Þò8Í„Ã;Í®#Â+*é:ë=2ë ͮ Í®ó *í.Íy*í.ˆ>w*í.‰|*íÃw# x±ÂyÉK—°Æ¹Ê¤2ï{Æ_ÒžzÆW:ïÊÅÕåͽáÑÁÉÅÕå͸áÑÁÉà Ãÿͽ!8"ñÉ*ñT]ͽ*ñ}Æ oÒå|Æg"ñÉ¡ É:6þÈþ åe¬  anù � game can be started! Anotheò  use¿  Iæ  yoõ havå seô variouó functioî  keyó  oî  youò � WordStaò  diskette¬  yoõ  maù noô remembeò exactlù whicè ió  whicè  (É � can't)¬  oò yoõ maù noô eveî remembeò theí all® Usinç thå "R¢ commanä � aô  t&  ive A. At the A> prompt, type AUTOMOD The program is self-prompting. Upon completion, move the modified disk from drive B to drive A and press . AUTOST.ASM is from Chapter 8 of the Osborne 1 User's Reference Guide. This påarticular version is programmed to auto-start SuperCalc. You may modify it to start some other program of your choice. Refer to the User's Guide. SETAUTO was received from the Osborne Users Group (OUG) of the Washington D.C. area. It enables XSUB DDT PIP.COM IRPIP.HEX R G0 SAVE 29 RPIP.COM 'R' ; reset disk system? jnz save$char$cnt ; if not, restore chracter count and return lxi d,msg2 ; tell them all disk se changing the command executed upon cold start (or ) to a command of your choice (6 characters or less). It also enables automatic execution of the command upon warm start () or upon both cold start and warm start. Place ine up to 36 characters which will be executed upon cold start (or ). If the command line is N characters, where N > 6, first use SETUP to program function key 0 (zero) to contain (N - 6) dummy characters (e.g., blanks). Place th SETAUTO.COM in drive A. At the A> prompt, type SETAUTO d:option command where d is the drive containing the disk to be modified, option is COLD or WARM or BOTH, and command is the command to be executed (6 characters maximum). When completee disk to be modified in drive B and SETUP.COM in drive A. At the A> prompt, type SETUP Select source drive B, function E, and key 0. Type (N - 6) blanks terminated by . Press X, then X, then B. Finally, place AUTOMOD.COM in dr, place the modified disk in drive A and press . For additional information, see SETAUTO.DOC. DSCLABEL was submitted by Dennis McFerran of FOG. It will print 3 1/2" x 15/16" labels containing a list of files found in the disk diå'  ives and repeat the last PIP function. To use, place RPIP.COM in drive A. At the A> prompt, type RPIP For further information, refer to the first 26 lines of RPIP.ASM. UNERA will unerase (recover) a file which was previously ERAsed. Plac to setup special printing features on your Epson printer. The program is self-prompting. Place EPSNPRTR.COM in drive A. At the A> prompt, type EPSNPRTR Also, see EPSNPRTR.DOC. FUNCTION was submitted by John Florent of FOG. It will lie UNERA.COM in drive A. At the A> prompt, type UNERA d:filename.typ To identify erased files, see DUU on -FOG/UTL.006. Jim Woolley FOG Disk Librarian September, 1982 st function key settings on the screen. Place FUNCTION.COM in drive A. At the A> prompt, type FUNCTION See FUNCTION.DOC for information. FUNCTN2 is identical to FUNCTION, but was patched to eliminate blank lines on the screen. This provideså a more compact display of the function key settings. MAKE redefines the USER number for specified files. Instructions are built-in. Place MAKE.COM in drive A. At the A> prompt, type MAKE This utility was received from OUG. RPIP extenåds PIP to allow reseting disk drives without exiting. This premits you to change a disk, reset it to R/W, then continue with standard PIP functions. New functions recognized by RPIP are R, which will reset all drives, and Q, which will reset drårectory. It will aslo print a list of function keys programmed on the disk. An Epson printer is required to properly utilize this program. For instructions, refer to the first 48 lines of DSCLABEL.ASM. EPSNPRTR, received from OUG, may be used