TITLE AUTOP INSTALLATION DIALOG JCS 10 Dec 82 SUBTTL MicroPro Business Confidential ;-----------------------------------------------------------------------| ; REVISION HISTORY | ;-----------------------------------------------------------------------| ; Number | Date | Who | Reason | ;-----------------------------------------------------------------------| ; 3.8? | 12 Dec 82|John Sellers | Installation for Apple ][ | ;-----------------------------------------------------------------------| DSTAR EQU -1 ;-1 FOR DATASTAR INSTALL / 0 FOR WS INSTALL MPMTST EQU -1 ;-1 FOR MPM TEST *3.8* APPLE EQU -1 ;for installation for Apple ][ Dec 82 EXT ACRLF,AINLMS,ATYPHL,CRTYPH ;FOR ACCESS TO TYPEOUT ROUTINE FROM PATCHR ENTRY AUTOP ;RUN USER THROUGH QUESTIONAIRE TO DETERMINE TERMINAL/PRINTER ;TYPES, & PATCH EDITOR TO MATCH. CODE IS EXECUTABLE ;BEFORE EDITOR IS ININIALIZED. CLOBBERS REGISTERS. ENTRY RETERM ;AUTO2 COMES BACK HERE W/0 ITEMS IN STACK TO RESTART DIALOG ENTRY POPBEG ;AUTO2 COMES HERE W/1 ITEM IN STACK TO RESTART DIALOG ENTRY DIAL3 ;AUTO2 COMES BACK HERE ON NORMAL COMPLETION ;ENTRIES TO THIS MODULE USED IN AUTO2.MAC ENTRY PREUNC,MENDIS,COPINL ENTRY NOCH,GETCH,CROQ,CROQ1,COPN,TYPPID ENTRY JOCRLF,CRLF2,CRLF4,TYPHCR,CRTYCR ENTRY TYPPRO,THLPRO,TYPPDR,THLPDR ;PORTIONS OF DIALOG IN AUTO2.MAC IF APPLE ENTRY SETESC ;routine to handle hardcoded escape characters ENTRY FILENO ;1=DATASTAR, 2=FORMGEN EXT OUTFCB ESC EQU 1BH RERAN EQU 33D ;BDOS read random function WRRAN EQU 34D ;BDOS write random function SETDMA EQU 26D ;BDOS set DMA function DEFFCB EQU 005CH ;default fcb APLFLG EQU 032FH ;in user area BDOS EQU 0005H ENDIF IF NOT DSTAR EXT AUTO2 ;PRINTER INSTALLATION DIALOG, JMPS BACK TO DIAL3 ENDIF ; EXT ENDAUT ;WHERE AUTOPATCHER ENDS = BEG MEMORY IF DIALOG KEPT ;PARAMETERS IN FIRST.MAC EXT MSGLEN ;LENGTH OF IDTEX, PIDTEX EXT INSTLD ;NZ IF PREVIOUSLY INSTALLED: SET WHEN TERMINAL PATCHED. ; EXT DIDANS ;DEFAULT/PREV ANS TO "DELETE INSTALLATION DIALOG" QUES ; EXT ETSANS ; .. "EXIT TO SYSTEM" .. 'Y' OR 'N'. ;LOCATIONS PATCHED EXT IDTEX,PIDTEX,PROTTX,PDRVTX,WID,HITE,ERAEOL,LINDEL,LININS EXT IVON,IVOFF,CLEAD1,CLEAD2,CTRAIL,CB4LFG,LINOFF,COLOFF,UCRPOS EXT TRMINI,TRMUNI,INISUB,UNISUB, USELST,MEMAPV,MEMADR,HIBCUR,CRBLIV EXT HIBIV,DELCUS,DELMIS,RSTFLG,LFFLAG,ASCUR,MORPAT ;;WID, PBGMEM ;MORE EXT'S NEXT PAGE PAGE 59 ENTRY OLD,CTRLA,CTRLB,CTRLC,CTRLD,CTRLE,CTRLF,CTRLG,CTRLH,CTRLI,CTRLJ ENTRY CTRLK,CTRLL,CTRLM,CTRLN,CTRLO,CTRLP,CTRLQ,CTRLR,CTRLS,CTRLT,CTRLU ENTRY CTRLV,CTRLW,CTRLX,CTRLY,CTRLZ,TAB,FF,DEL,AUTOP,RETERM,REGO2 IF NOT APPLE ENTRY FSTRUN,TABLE,NOUTAB,ADM3A,ADM31,HZ1500,SOROC,MICROT ENTRY BEEHIV,VIOMM,TVIO,INFOBD,HEWLET,BANTAM,UNTEST ENDIF ENTRY NOCHAN,NOCH,CRTYCR,ADMSUB,DUMB,HWID ENTRY TYPHCR,NONEOF,DIAL3,MENDIS,MENDSA,MENDED,MENCHU,MENCH1,CROQ,YESNOX ENTRY YESNO1,YESNO2,EP2BEG,POPBEG,GETCH,GETCH2,CURPAT,COPN,COPNL,COPINL ENTRY S2ERA,SET2DL,SET2IL,S2IVON,S2IVOF,S2INI,S2UNI,SET2BY,PREUNC ENTRY THLPRO,TYPPRO,THLPDR,TYPTID,TYPCOP,BLANKL,COPTZL,COPTOX,THLCOP ENTRY BLANKE,COPHDL,CRLF10,CRLF4,CRLF2 PAGE ;OTHER EDITOR LOCATIONS EXT COPROT,SIGNON EXT AUPAV ;SET Z IF AUTOPATCHER TO BE MADE UNAVAILABLE ;EDITOR ROUTINES EXT JOC,CIBIOS,RAISE,REBOOT OLD EQU 0 ; SYMBOLS FOR ASCII CHARACTERS CTRLA EQU 1 CTRLB EQU 2 CTRLC EQU 3 CTRLD EQU 4 CTRLE EQU 5 CTRLF EQU 6 CTRLG EQU 7 CTRLH EQU 8 CTRLI EQU 9 CTRLJ EQU 10 CTRLK EQU 11 CTRLL EQU 12 CTRLM EQU 13 CTRLN EQU 14 CTRLO EQU 15 CTRLP EQU 16 CTRLQ EQU 17 CTRLR EQU 18 CTRLS EQU 19 CTRLT EQU 20 CTRLU EQU 21 CTRLV EQU 22 CTRLW EQU 23 CTRLX EQU 24 CTRLY EQU 25 CTRLZ EQU 26 BS EQU 8 ;BACKSPACE TAB EQU 9 ;HORIZ TAB LF EQU 10 ;LINE FEED FF EQU 12 ;FORM FEED CR EQU 13 ;CARRIAGE RETURN DEL EQU 7FH ;DELETE OR RUBOUT PAGE ; ; ENTRY POINT TO INITIALIZATION DIALOG SUBROUTINE ; ; THIS SUBROUTINE CLOBBERS ALL REGISTERS ; AUTOP: ; DISPLAY SIGNON RETERM: ;RETURN HERE TO REASK TERMINAL INSTALLATION QUESTIONS. ;SIGNON IS REDISPLAYED SO AS TO SHOW CURRENT VERSION TEXT. IF DSTAR ; IF DATASTAR CHECK WHERE THE STACK POINTER SHOULD BE *3.6* LDA DSFLG## ;TEST IF WE ARE INSTALLING DATASTAR OR FORMGEN *3.6* ORA A ;NON-ZERO IF WE ARE INSTALLING DATASTAR *3.6* LXI SP,STACKT##-4 ;THIS IS THE STACK IF WE ARE INSTALL DS *3.6* JNZ REGO1 ;JUMP IF DATASTAR INSTALL, FALLTHROUGH IF FORMGEN *3.6* ENDIF LXI SP,STACKT##-2 ;RESET STACK POINTER SHOULD ALWAYS BE HERE REGO1: CALL CRLF4 ;FOR REASK, CLEAR SCREEN REGO2: LXI H,SIGNON ;SIGNON MESSAGE IN FIRST.MAC CALL ATYPHL ;TEXT INCLUDES FINAL CRLF ; ; DISPLAY HEADING AND TERMINAL TYPE MENU AND PROMPT ; IF APPLE CALL APLERT ELSE CALL AINLMS DB 0FH,0FH IF DSTAR DB ' ***** DataStar TERMINAL MENU #1 *****',0FH ;0FH->CRLF ELSE DB ' ***** WordStar TERMINAL MENU #1 *****',0FH ;0FH->CRLF ENDIF DB 0FH DB 'A Lear-Siegler ADM-3A C Lear-Siegler ADM-31',0FH DB 'D Hazeltine 1500 E Microterm ACT-IV',0FH DB 'F Beehive 150/Cromemco 3100 G Imsai VIO',0FH DB 'H Hewlett-Packard 2621 A/P I Infoton I-100',0FH DB 'K Soroc IQ-120 L Perkin-Elmer 550 (Bantam)',0FH DB 'M Microterm ACT-V N Televideo 912/920',0FH DB '2 Terminal Menu #2 3 Terminal Menu #3',0FH DB 0 LDA INSTLD ORA A JZ FSTRUN CALL AINLMS DB 'U no change',0 ;HI BIT ENDS TEXT FSTRUN: CALL AINLMS DB 0FH,0FH DC "PLEASE ENTER SELECTION (1 LETTER): " ;HI BIT ENDS TEXT PAGE ;TERMINAL, BRANCH TO PRINTER ; ; INPUT / DISPATCH ON TERMINAL TYPE RESPONSE. ; ;ACCEPT CR OR U ONLY IF TERMINAL PREVIOUSLY SELECTED LXI H,TABLE ;POINT DISPATCH TABLE FOR ACCEPTABLE RESPONSES LDA INSTLD ;NZ IF TERMINAL PREVIOUSLY SELECTED ORA A JNZ $+6 LXI H,NOUTAB ;NO TERMINAL PREVIOUSLY SELECTED, USE TABLE W/O U ENTRY ; INPUT CHAR, DISPATCH VIA TABLE, IGNORE INVALID INPUT CALL MENDIS ;INPUT CHAR, REBOOT ON ^C, RAISE, TREAT CR AS 'U', ;SEARCH TABLE (HL), ECHO CHAR AND 2 CRLF'S IF FOUND, ;IGNORE AND REINPUT IF NOT FOUND, JMP TO ROUTINE ;ADDRESSED BY TABLE. ENDIF ;if Apple ; CONTROL RETURNS HERE WHEN DISPTACHED-TO ROUTINE IS COMPLETE ; ; CONFIRMATION OF TERMINAL, AND ADDITIONAL DIALOG ; MVI A,0FFH STA INSTLD ;SAY HAS BEEN RUN BEFORE, ADD "LEAVE UNCANGED" MPTION CALL CROQ ;CRLF, ASK "OK?", ACCEPTS Y (OR CR AS Y), N, B ONLY. ; ON B, GOES BACK TO BEGINNING: NB NOTHING IN STACK. ; 2 CRLF'S AFTER ANSWER. JC RETERM ;"N" ;Y, CR FALL THRU. ; ; PRINTER INSTALLATION DIALOG AND CONFIRMATION OF SELECTIONS - IN AUTO2.MAC ; IF DSTAR ; ; THIS IS THE WAY THE CODE SHOULD BE - CHANGED 07/07/82 *3.8* ; ; IF MPMTST ; *3.8* ; XRA A ;SET FLAG TO ZERO ; *3.8* ; ELSE ; *3.8* ; CALL AINLMS ; DB 0FH,'IS THIS INSTALLATION FOR MP/M (Y/N): ',0 ; LDA RSTFLG ;GET THE MP/M RESET FLAG ; CALL GETRES ;GET A YES OR NO RESPONSE, DISPLAY CURRENT FLAG ; CALL JOC ; SUI 'N' ;SET FLAG TO ZERO IF NO ; JZ OK1 ; MVI A,0FFH ;SET FLAG TO 0FFH IF YES ; ENDIF ; *3.8* ; ; THIS IS THE CODE FOR TEMP FIX TO MATCH MANUAL - 07/07/82 *3.8* ; IF MPMTST ; *3.8* TMPMPM: CALL AINLMS DB 0FH,'IS THIS INSTALLATION FOR MP/M (Y/N): ',0 LDA RSTFLG ;GET THE MP/M RESET FLAG CALL GETRES ;GET A YES OR NO RESPONSE, DISPLAY CURRENT FLAG CALL JOC SUI 'N' ;SET FLAG TO ZERO IF NO JZ OK1 CALL AINLMS DB 0FH,'THIS VERSION OF DATASTAR WORKS UNDER CP/M ONLY',0FH,0 JMP TMPMPM ENDIF ; *3.8* ; OK1: STA RSTFLG CALL AINLMS DB 0FH,0FH,'DISABLE LINE FEEDS TO PRINTER (Y/N): ',0 LDA LFFLAG ;GET THE LINE FEED FLAG CALL GETRES ;GET A YES OR NO RESPONSE, DISPLAY CURRENT FLAG CALL JOC SUI 'N' ;SET FLAG TO ZERO IF NO JZ OK2 MVI A,0FFH ;SET FLAG TO 0FFH IF YES OK2: STA LFFLAG RET ; ;GETRES - THIS ROUTINE ACCEPTS Y, N, CR, OR SPACE ; CARRIAGE RETURN OR SPACE WILL USE THE CURRENT SETTING OF THE FLAG ; GETRES: ORA A MVI B,'N' JZ GETRS1 ;JIF FLAG IS ZERO TO USE 'N' DEFAULT MVI B,'Y' ;ELSE USE 'Y' DEFAULT GETRS1: MOV A,B CALL GETCH ;NOW GET A RESPONSE CPI 'N' RZ ;RIF RESPONSE IS 'N' CPI 'Y' JNZ GETRS1 ;MUST BE 'N' OR 'Y' RET ;IF DATASTAR DON'T ASK PRINTER CONFIRMATION ELSE JMP AUTO2 ;GO THERE, RETURNS TO DIAL3 - ; BELOW, AT KEEP INST DIAL QUESTION ENDIF PAGE ;TERMINAL CHOICE... IF NOT APPLE ; DISPATCH TABLE FOR TERMINAL TYPE QUESTION ; TABLE: DB 'U' DW NOCHAN NOUTAB: ;USE THIS TABLE ADDRESS TO DISALLOW U DB 'A' DW ADM3A DB '1' ;B=BEGINNING FOR CONSISTENCY DW POPBEG ;POP RETURN, JMP RETERM DB 'C' DW ADM31 DB 'D' DW HZ1500 DB 'E' DW MICROT DB 'F' DW BEEHIV DB 'G' DW VIOMM DB 'I' DW INFOBD DB 'K' DW SOROC DB 'L' DW BANTAM DB 'H' DW HEWLET DB 'M' DW ACTV DB 'N' DW TELVID DB 'O' DW VISUAL DB 'P' DW ANSI DB 'Q' DW FLASH2 DB 'S' DW COMPU DB 'V' DW TEC571 ; DB 'T' DELETED *3.81* ; DW TVIO ; U IS AT TOP OF TABLE DB 'W' ; *3.81* DW XEROX ; DB 'X' ; *3.7* DW HEATH ; *3.7* DB '3' ; DW MENU3 ; *3.7* DB '2' ; DW MENU2 ; DB '!' ; *3.81* DW SANYO2 ; *3.81* DB '=' ; *3.81* DW SBRAIN ; *3.81* DB ')' ; *3.81* DW NSADV ; *3.81* DB '(' ; *3.8* DW HZ1420 ; *3.8* DB '*' ; DATASTAR 1.4ac STILL DELETED *3.81* DW NECPC ; DOESN'T DISPLAY CURSOR *3.81* DB '<' ; *3.8* DW REG20 ; *3.8* DB '>' ; *3.8* DW REG40 ; *3.8* DB ']' ; *4.1* DW ADDSV ; *4.1* DB '&' ; *4.1* DW TVI950 ; *4.1* DB '$' ; *3.8* DW IBM310 ; *3.8* DB '@' ; *3.81* DW HP87 ; *3.81* DB '#' ; *3.81* DW HP125 ; *3.81* DB '/' ; *3.81* DW OSBORN ; *3.81* DB '[' ; *3.81* DW TRSPT ; *3.81* DB '%' ; *3.81* DW TRSLB ; *3.81* DB '+' ; *3.81* DW TRSL2 ; *3.81* DB 'Y' ; *3.81* DW TVI910 ; *3.81* DB 'Z' DW NONEOF DB 0 PAGE MENU2: POP H ;ADJUST THE STACK POINTER *3.6* CALL AINLMS DB 0FH,0FH IF DSTAR DB ' ***** DataStar TERMINAL MENU #2 *****',0FH ;0FH->CRLF ELSE DB ' ***** WordStar TERMINAL MENU #2 *****',0FH ;0FH->CRLF ENDIF DB 0FH DB 'O Visual 200 P DEC VT100/ANSI Terminal',0FH DB 'Q Vector Flashwriter II S Compucolor 8001G',0FH DB 'V TEC Model 571 W Xerox 820',0FH DB '= Intertec Superbrain ! Sanyo MBC-2000/3000',0FH DB ') NorthStar Advantage + TRS-80/Lifeboat 2.24 CP/M',0FH DB 'Y TeleVideo 910 % TRS-80/Lifeboat 2.25 CP/M',0FH DB '1 Original Menu 3 Terminal Menu #3',0FH DB 0 JMP FSTRUN PAGE MENU3: POP H ;ADJUST THE STACK POINTER *3.6* CALL AINLMS DB 0FH,0FH IF DSTAR DB ' ***** DataStar TERMINAL MENU #3 *****',0FH ;0FH->CRLF ELSE DB ' ***** WordStar TERMINAL MENU #3 *****',0FH ;0FH->CRLF ENDIF DB 0FH DB '1 Original Menu 2 Terminal Menu #2',0FH ; *3.7* DB '@ Hewlett Packard 87 # Hewlett Packard 125',0FH; *3.81* DB '< ADDS Regent 20/25 > ADDS Regent 40/45/60/45',0FH ;*3.8* DB '$ IBM 3101 ( Hazeltine 1420',0FH ; *3.8* DB '& Televideo 950 ] ADDS Viewpoint',0FH ; *4.1* DB 'X Heath or Zenith H89/H19 / Osborne 1',0FH ;*3.7**3.81* DB '[ TRS-80 II (P&T CP/M) Z none of the above',0FH DB 0 JMP FSTRUN PAGE ;ROUTINES FOR INDIVIDUAL TERMINAL TYPES BEGIN HERE ; ;ADM-3A ; ADM3A: CALL TYPTID ;copy to IDTEX AND PRINT ON TERMINAL DC "Lear-Siegler ADM-3A terminal" ;TYPTID SUPPLIES LEADING SPACE CALL AINLMS DB 0FH ;0FH->CRLF DB ' The CLEAR SCREEN and CURSOR CONTROL switches',0FH DB ' inside the ADM-3A terminal must be ON',8FH ; FALL THRU TO ASMSUB ENDIF ; If Apple PAGE ;ADM-3A... NB FALL THRU ADMSUB: ;SUBR FOR SUBSET COMMON WITH ADM-31, SOROC, ETC. CALL CURPAT ;MAKE CURSOR PATCHES FROM FOLLOWING BYTES DB 2,1BH,'=' ;FIRST LEADIN IS 2 CHARS: ESCAPE, = DB 0 ;NO MIDDLE LEAD-IN DB 0 ;NO LEAD-OUT DB 0 ;LINE IS BEFORE COLUMN DB 20H ;LINE OFFSET DB 20H ;COLUMN OFFSET DUMB: ;SUBR TO SET ALL FANCY STUFF OFF AND SET 24 * 80 XRA A STA ERAEOL STA LINDEL STA LININS STA IVON STA IVOFF STA TRMINI STA TRMUNI STA USELST STA ASCUR ;SET TO ZERO FOR BINARY RATHER THASN ASCII *3.6* STA MEMAPV STA HIBIV ;NO HI-BIT HIGHLIGHTING 5/06/80 STA HIBCUR STA CRBLIV MOV H,A ;LXI H,0 MOV L,A ;.. SHLD UCRPOS ;SET JMP TO USER CRSR ROUTINE TO NOP, NOP, RET .. MVI A,(RET) ;"RET" INSTRUCTION STA UCRPOS+2 ; .. (UCRPOS+0 MUST BU NOP TO DISABLE CALL) STA INISUB STA UNISUB ;DEFAULT THE DELAYS AFTER FUNCTIONS MVI A,5 STA DELMIS ;MISC FUNCTION DELAY. PERKIN-ELMER CHANGES. ADD A ;MVI A,10 STA DELCUS ;CURSOR POSITION DELAY HWID: ;SUBR TO SET HITE 24, WID (AT HITE+1) TO 80 LXI H,80*100H+24 SHLD HITE RET PAGE IF NOT APPLE ;ADM-31 ; ADM31: CALL TYPTID DC "Lear-Seigler ADM-31 terminal" AD31B: CALL ADMSUB ;SET STUFF SAME AS ADM-3A: CURSOR, HITE, WID ;ALSO CLEARS ALL OPTIONS - WE'LL OVERWRITE SOME LXI D,1B00H+'*' ; ESC IN D REMAINS FOR FOLLOWING ; CALL SET2CL ;SET CLEAR SCREEN (DE) MVI E,'T' CALL S2ERA ;SET ERASE TO EOL MVI E,'R' CALL SET2DL ;SET DELETE LINE MVI E,'E' CALL SET2IL ;SET INSERT LINE ;HIGHLIGHTING USES "PROTECTED FIELDS" WHICH DISPLAY DIM MVI E,'''' ;ESCAPE, QUOTE: DISABLE SCREEN PROTECT MODE CALL S2INI ;SET TERMINAL INIT STRING: ;.. MAKE SURE PROTECT NOT IN EFFECT MVI E,')' ; USE "PROTECT": DIMS THE CHARACTERS CALL S2IVON ;SET INVERSE VIDEO ON MVI E,'(' JMP S2IVOF ;SET INVERSE VIDEO OFF PAGE ; ;OSBORNE (!) ; OSBORN: CALL TYPTID DC "Osborne 1" CALL AD31B CALL AINLMS DB 0FH DB 'This selection emulates an ADM-31.',0FH DB 8FH RET ; ;XEROX 820 ; XEROX: CALL TYPTID DC "Xerox 820 Computer" JMP ADMSUB ;JUST LIKE ATM-3A ; ;TEC MODEL 571 ; TEC571: CALL TYPTID DC "TEC Model 571 terminal" CALL AINLMS DB 0FH DB "Make sure the AUTO ROLL UP, ROLL UP and AUTO LINE FEED",0FH IF DSTAR DB "switches are off for proper DataStar operation",8FH ELSE DB "switches are off for proper WordStar operation",8FH ENDIF CALL DUMB CALL CURPAT ;MAKE CURSOR PATCHES FROM FOLLOWING BYTES DB 2,1BH,3DH ;FIRST LEADIN IS 2 CHARS DB 0 ;NO MIDDLE LEAD-IN DB 0 ;NO LEAD-OUT DB 0 ;LINE IS BEFORE COLUMN DB 20 ;LINE OFFSET DB 20 ;COLUMN OFFSET LXI D,1B06H ; ESC IN D REMAINS VOR FOLLOWING ; CALL SET2CL ;SET CLEAR SCREEN (DE) MVI E,0BH CALL S2ERA ;SET ERASE TO EOL MVI E,07H CALL SET2DL ;SET DELETE LINE MVI E,0CH CALL SET2IL ;SET INSERT LINE MVI A,0FFH ;YES LAST COL/LAST LINE STA USELST MVI A,32H STA DELCUS STA DELMIS RET PAGE ; ;SANYO 2000/3000 ; SANYO2: CALL TYPTID DC "Sanyo MBC-2000/3000" CALL ADMSUB MVI A,46H STA CLEAD1##+2 LXI D,1B4BH CALL S2ERA MVI E,4CH CALL SET2IL MVI E,4DH CALL SET2DL ;NO HILITE (DOESN'T WORK PROPERLY ON OUR PRODUCTS) RET ; ;TELEVIDEO 910 ; TVI910: CALL TYPTID DC "Televideo 910 terminal" CALL ADMSUB LXI D,1B00H+'T' CALL S2ERA CALL COPINL DW CTRAIL DB 2 DB 0CH,08H RET ; ;TELEVIDEO 912 ; TELVID: CALL TYPTID DC "Televideo 912/920 terminal" CALL ADMSUB ;SET STUFF SAME AS ADM-3A: CURSOR, HITE, WID ;ALSO CLEARS ALL OPTIONS - WE'LL OVERWRITE SOME LXI D,1B00H+'*' ; ESC IN D REMAINS FOR FOLLOWING ; CALL SET2CL ;SET CLEAR SCREEN (DE) MVI E,'T' CALL S2ERA ;SET ERASE TO EOL MVI E,'R' CALL SET2DL ;SET DELETE LINE MVI E,'E' CALL SET2IL ;SET INSERT LINE ;HIGHLIGHTING USES "PROTECTED FIELDS" WHICH DISPLAY DIM MVI E,')' ; USE "PROTECT": DIMS THE CHARACTERS CALL S2IVON ;SET INVERSE VIDEO ON MVI E,'(' CALL S2IVOF ;SET INVERSE VIDEO OFF CALL COPINL DW TRMINI DB 8 DB 1BH,71H ;NORMAL FIELD DB 1BH,77H ;AUTO-FLIP OFF DB 1BH,43H ;CONVERSATIONAL MODE DB 1BH,2CH ;PROTECT MODE OFF LXI H,202AH ;DELAY AFTER CURSO SET & AFTER EVERYTHING ELSE SHLD DELCUS ;SET DELCUS: TO 2AH , DELMIS: TO 20H RET PAGE ; ;TELEVIDEO 950 *4.1* ; TVI950: CALL TYPTID DC "TeleVideo 950 Terminal" CALL AD31B ; SAME AS ADM-31 XCEPT FOR INIT STRING CALL COPINL DW TRMINI## DB 8 DB 1BH,72H ;EDIT MODE, NOT INSERT DB 1BH,77H ;AUTO-FLIP OFF DB 1BH,43H ;CONVERSATIONAL MODE DB 1BH,4EH ; RET PAGE ; ;SUPERBRAIN ; SBRAIN: CALL TYPTID DC "Intertec SuperBrain" CALL AINLMS DB 'This installation will work on SuperBrains and',0FH DB 'SuperBrain QDs only. It uses MORPAT: and other',0FH DB 'areas in USER1, so be sure not to use those areas',0FH DB 'already containing patches.',0FH,0 CALL DUMB MVI A,0FFH ; SAY MEMORY MAPPED STA MEMAPV LXI H,0F800H ; START ADDRESS IS F800H SHLD MEMADR CALL COPCOD ; PATCH IN USER CODED SUBROUTINE DW UCRPOS ; PUT BYTES HERE DB 3 ; NUMBER OF BYTES JMP MORPAT+30H ; BYTES TO PATCH CALL COPCOD ; INIT PATCH DW INISUB ; CLEARS SCREEN DB 3 ; 3 BYTES LONG (NOT COPIED) JMP MORPAT ; PATCHED IN FURTHER DOWN CALL COPCOD DW UNISUB DB 3 JMP MORPAT+14H ; CLEARS SCREEN ON EXIT CALL COPCOD ; THIS CODE GOES IN MORPAT AND DOES THINGS ; LIKE POSITION CURSOR AND CLEAR SCREEN DW MORPAT DB 53 ; 53 BYTE PATCH CALL MORPAT+14H DCR A CALL MORPAT+15H LXI H,0E252H MVI A,33H CMP M RNZ MVI A,0FFH STA 0E518H RET XRA A LXI H,0E434H MVI B,18H MOV M,A INX H DCR B JNZ MORPAT+1AH LXI H,0 SHLD 0E400H SHLD 0E414H SHLD 0E416H SHLD 0E412H RET XCHG JMP MORPAT+2CH RET ASKDOS: CALL AINLMS DB 'DO YOU HAVE DOS 3.0, 3.1, OR 3.2 (0, 1, OR 2) ?',0A0H CALL GETCH CPI '0' JZ DOS30 CPI '1' JZ DOS31 CPI '2' JNZ ASKDOS ;IF HERE, WE HAVE DOS 3.2 CALL JOC MVI A,0 STA MORPAT+0DH LXI H,0E720H SHLD MORPAT+11H RET DOS30: JMP JOC ;OUTPUT CHAR AND RETURN DOS31: CALL JOC MVI A,0 STA MORPAT+0DH LXI H,0E71DH SHLD MORPAT+11H RET ;END OF SUPERBRAIN PATCH SECTION PAGE ; ;NORTHSTAR ADVANTAGE ; NSADV: CALL TYPTID DC "NorthStar Advantage" CALL ADMSUB LXI H,0E01H SHLD ERAEOL ; MVI H,1 ;TAKEN OUT (DATASTAR WOULDN'T WORK WITH THIS) ; SHLD IVON ; MVI H,2 ; SHLD IVOFF MVI H,4 SHLD TRMUNI MVI A,0FFH STA USELST CALL COPCOD DW TRMINI DB 4 DB 3,4,1BH,25H RET ; ; ANSI STANDARD TERMINALS (WORKS FOR DEC VT-100 IN THE MOST BASIC SENSE) ; ANSI: CALL TYPTID DC "DEC VT-100/ANSI Terminal" CALL AINLMS DB 'Terminal must be in 80 * 24 format for proper operation.',0FH DB 'Make sure it is in ANSI mode, not VT-52 mode.',8FH CALL DUMB CALL CURPAT ;MAKE CURSOR PATCHES FROM FOLLOWING BYTES DB 02,1BH,5BH ;FIRST LEADIN IS 2 CHARS DB 01,';' ;MIDDLE LEAD-IN DB 01,'H' ;LEAD-OUT DB 0 ;LINE BEFORE COLUMN DB 1 ;LINE OFFSET DB 1 ;COLUMN OFFSET MVI A,2 ;2-CHARACTER STA ASCUR ;ASCII SEQUENCE FOR CURSOR POSITIONING CALL COPCOD ;*4.1* DW ERAEOL## ; WHERE TO PUT BYTES DB 4 ; BYTE COUNT DB 3,1BH,5BH,4BH ; BYTES THEMSELVES RET ; ;ACTV ; ACTV: CALL TYPTID DC "Microterm ACT-V terminal" CALL CURPAT ;MAKE CURSOR PATCHES FROM FOLLOWING BYTES DB 01H,14H ;FIRST LEADIN IS 2 CHARS DB 0 ;NO MIDDLE LEAD-IN DB 0 ;NO LEAD-OUT DB 0 ;LINE IS BEFORE COLUMN DB 0 ;LINE OFFSET DB 0 ;COLUMN OFFSET CALL DUMB ;SET STUFF SAME AS ADM-3A: CURSOR, HITE, WID ;ALSO CLEARS ALL OPTIONS - WE'LL OVERWRITE SOME ; LXI H,011EH ; 01 IN D REMAINS FOR FOLLOWING ; SHLD ERAEOL ;SET ERASE TO EOL ; MVI L,17H ; SHLD LINDEL ;SET DELETE LINE ; MVI L,01H ; SHLD LININS ;SET INSERT LINE CALL COPINL DW IVON DB 2,1BH,43H CALL COPINL DW IVOFF DB 02,1BH,42H RET PAGE ; ;COMPUCOLOR 8001G ; COMPU: CALL TYPTID DC "Compucolor 8001G terminal" CALL CURPAT ;MAKE CURSOR PATCHES FROM FOLLOWING BYTES DB 1,03H ;FIRST LEADIN IS 1 CHAR (^C) DB 0 ;NO MIDDLE LEAD-IN DB 0 ;NO LEAD-OUT DB 0FFH ;COLUMN IS BEFORE LINE DB 0 ;LINE OFFSET DB 0 ;COLUMN OFFSET CALL DUMB ;SET STUFF SAME AS ADM-3A: CURSOR, HITE, WID ;ALSO CLEARS ALL OPTIONS - WE'LL OVERWRITE SOME MVI A,30H STA HITE MVI A,50H STA WID CALL COPINL DW IVON DB 4,1EH,11H,1DH,17H ;RED BACKGROUND/WHITE LETTERS CALL COPINL DW IVOFF DB 04,1EH,14H,1DH,13H ;BLUE " /YELLOW " CALL COPINL DW TRMINI DB 04,1EH,14H,1DH,13H ;BLUE " /YELLOW " RET PAGE ; ;VISUAL 200 ; VISUAL: CALL TYPTID DC "Visual 200 terminal" CALL AINLMS DB 0FH DB 'The AUTO LF switch must be OFF for proper operation.',8FH CALL CURPAT ;MAKE CURSOR PATCHES FROM FOLLOWING BYTES DB 2,1BH,59H ;FIRST LEADIN IS 2 CHARS DB 0 ;NO MIDDLE LEAD-IN DB 0 ;NO LEAD-OUT DB 0 ;LINE IS BEFORE COLUMN DB 20 ;LINE OFFSET DB 20 ;COLUMN OFFSET CALL DUMB ;SET STUFF SAME AS ADM-3A: CURSOR, HITE, WID ;ALSO CLEARS ALL OPTIONS - WE'LL OVERWRITE SOME LXI D,1B59H ; ESC IN D REMAINS FOR FOLLOWING ; CALL SET2CL ;SET CLEAR SCREEN (DE) MVI E,'K' CALL S2ERA ;SET ERASE TO EOL MVI E,'M' CALL SET2DL ;SET DELETE LINE MVI E,'L' CALL SET2IL ;SET INSERT LINE MVI E,'4' ;DIMS THE CHARACTERS CALL S2IVON ;SET INVERSE VIDEO ON MVI E,'3' JMP S2IVOF ;SET INVERSE VIDEO OFF PAGE ; ; HAZELTINE 1500 ; HZ1500: CALL TYPTID DC "Hazeltine 1500 terminal" HZ150B: CALL AINLMS DB 0FH DB ' The AUTO LF switch (under the little cover above the',0FH IF DSTAR DB ' keyboard) must be OFF for proper DataStar operation.',8FH ELSE DB ' keyboard) must be OFF for proper WordStar operation.',8FH ENDIF CALL CURPAT ;MAKE CURSOR PATCHES FROM FOLLOWING BYTES DB 2,7EH,11H ;FIRST LEADIN IS 2 CHARS: TILDE, 11H DB 0 ;NO MIDDLE LEAD-IN DB 0 ;NO LEAD-OUT DB 0FFH ;COLUMN IS FIRST DB 0 ;NO LINE OFFSET DB 0 ;NO COLUMN OFFSET CALL DUMB ;SET 24 * 80, CLEAR OPTIONS, ETC. LXI D,7E00H+1CH ;CLEAR SCREEN ; CALL SET2CL MVI E,0FH ;ERASE EOL CALL S2ERA MVI E,13H ;DELETE LINE CALL SET2DL MVI E,1AH ;INSERT LINE CALL SET2IL ;FOR HIGHLIGHTING USE "DIM". ASSUME TERMINAL DIM AT ENTRY, DIM AGAIN AT XIT MVI E,19H ;DIM CALL S2IVON ;SET INVERSE VIDEO ON CALL S2UNI ;SET TERMINAL CLOSE MVI E,1FH ;BRIGHT CALL S2IVOF ;SET INVERSE VIDEO OFF JMP S2INI ;SET TERMINAL INIT PAGE ;TERMINALS ; ; HAZELTINE 1420 ; HZ1420: CALL TYPTID DC "Hazeltine 1420 Terminal" CALL HZ150B LXI H,2A20H ;ONLY DIFFERENCE IS DELAYS SHLD DELCUS RET ; ; SOROC IQ-120 ; SOROC: CALL TYPTID ;TYPE MESSAGE, SET SIGN-ON DC "Soroc IQ-120 terminal" ENDIF ;if Apple APSORC: ;APLERT calls here SOSUB: CALL ADMSUB ;SET 24 X 80, CRPOS, CLEAR ALL ELSE. LXI D,1B00H+'*' ; CALL SET2CL ;SET CLEAR SCREEN TO ESCAPE, * MVI E,'(' CALL S2IVON MVI E,')' CALL S2IVOF ;MORE CLEAR SCREEN DELAY NEEDED AT 9600 BAUD? RET PAGE IF NOT APPLE ;NEC PC-8000 SERIES COMPUTER ;*** DISABLED FOR DATASTAR *** *3.81* ; NECPC: CALL TYPTID DC "NEC PC-8000" CALL SOSUB ;SAME AS SOROC IQ-120 RET ; ; MICROTERM WHATSIT ; MICROT: CALL TYPTID DC "MicroTerm ACT-IV terminal" CALL DUMB ;CLEAR MOST EVERYTHING LXI D,100H+0CH ;1 CHAR, 0C HEX. ; CALL SET2CL ;CLEAR SCREEN CALL CURPAT ;MAKE CURSOR PATCHES FROM FOLLOWING BYTES DB 1,14H ;FIRST LEADIN IS 1 CHAR: 14 HEX DB 0 ;NO MIDDLE LEAD-IN DB 0 ;NO LEAD-OUT DB 0 ;LINE DB 0 ;NO LINE OFFSET DB 0 ;NO COLUMN OFFSET LXI H,1E00H+01H SHLD ERAEOL ;SET ERASE TO EOL: 1 CHAR, 1EH. ;HIGHLIGHTING USES BRIGHT/DIM. SAME CODE. ASSUME TERMINAL DIM AT ;ENTRY => SEND CODE AT ENTRY, EXIT TOO. MVI H,0EH ;1 STILL IN H FOR # CHARS SHLD IVON SHLD IVOFF SHLD TRMINI SHLD TRMUNI RET PAGE ; ; BEEHIVE 150 / CROMEMCO 3100 ; BEEHIV: CALL TYPTID DC "Beehive 150/ Cromemco 3100" CALL CURPAT DB 2,1BH,'F' ;FIRST LEADIN IS 2 CHAR: ESCAPE, F DB 0 ;NO MIDDLE LEAD-IN DB 0 ;NO LEAD-OUT DB 0 ;COLUMN ***** 0.88 DB 20H ;LINE OFFSET 20H ***** 0.88 DB 20H ;COLUMN OFFSET ***** 0.88 CALL DUMB ;CLEAR MOST OPTIONS, SET 24 * 80 LXI D,1B00H+'E' ; CALL SET2CL ;SET CLEAR SCREEN RET PAGE ; ;TRS-80 WITH LIFEBOAT 2.25 CP/M ; TRSLB: CALL TYPTID DC "Lifeboat 2.25/TRS-80 II" CALL AD31B RET ; ;TRS-80 WITH LIFEBOAT 2.23/2.24 CP/M ; TRSL2: CALL TYPTID DC "Lifeboat 2.24/TRS-80 II" CALL ADMSUB MVI A,0FFH STA HIBIV## LXI H,1701H SHLD ERAEOL## RET ; ;TRS-80 WITH PICKLES & TROUT CP/M *4.1* ; TRSPT: CALL ADMSUB CALL TYPTID DC "Pickles & Trout/TRS-80 II" MVI A,'Y' STA CLEAD1##+2 LXI H,0101H SHLD ERAEOL## MVI H,0BH SHLD LININS## MVI H,04H SHLD LINDEL## MVI H,0EH SHLD IVON## MVI H,0FH SHLD IVOFF## RET ; ; IMSAI VIO ; VIOMM: CALL TYPTID DC "Imsai VIO display" CALL AINLMS DB 0FH DB ' For IMSAI VDP-40, VDP-80, & other systems with',0FH DB ' IMSAI VIO-C or VIO-D (with firmware) at F000.',0FH DB ' Accesses Video RAM directly.',0FH DB 0FH IF DSTAR DB ' 24 * 80 format must be selected before DataStar is invoked.' ELSE DB ' 24 * 80 format must be selected before WordStar is invoked.' ENDIF DB 8FH ;SET EVERYTHING LIKE ADM-3A: HITE, WIDTH, CURSOR POSITION; CLEAR OTHERS. CALL ADMSUB ;ADD STUFF TO MAKE IT MEMORY MAPPED LXI H,0F000H SHLD MEMADR MVI A,0FFH STA MEMAPV STA HIBIV STA CRBLIV STA HIBCUR STA USELST CALL VIOTYP ;SET CURSOR POS. CODES, ERAEOL, ETC.. TO 0 *3.6* RET ; ; VIOTYP - CLEARS THE CURSOR POSITION & VIDEO LEAD IN STRINGS ETC.. *3.6* ; VIOTYP: LXI H,CLEAD1 ;CLEAR CURSOR LEAD-IN DATA ETC.. *3.6* MVI B,23 ;# OF BYTES TO CLEAR *3.6* XRA A ;DATA TO USE TO CLEAR *3.6* CALL FILL ;FILL THE DATA *3.6* LXI H,0 ;CLEAR INVERSE VIDEO ON *3.6* SHLD IVON ; *3.6* SHLD IVOFF ; *3.6* RET ; *3.6* ; ; FILL ; FILL: MOV M,A ;CLEAR POSITION *3.6* INX H ;NEXT POSITION *3.6* DCR B ;TEST FOR DONE *3.6* JNZ FILL ;DO THE NEXT POSITION *3.6* RET ;DONE WITH FILL *3.6* PAGE ; ; FLASHWRITER II ; FLASH2: CALL TYPTID DC "Vector Flashwriter II" CALL AINLMS DB 0FH,'Flashwriter must be addressed at F000H.',8FH ;SET EVERYTHING LIKE ADM-3A: HITE, WIDTH, CURSOR POSITION; CLEAR OTHERS. CALL ADMSUB ;ADD STUFF TO MAKE IT MEMORY MAPPED LXI H,0F000H SHLD MEMADR MVI A,0FFH STA MEMAPV STA HIBIV STA CRBLIV STA HIBCUR STA USELST CALL VIOTYP ;CLEAR CLEAD ETC.. *3.6* RET PAGE ; ; IMSAI VIO AS INTELLIGENT TERMINAL (DEVELOPMENT AID) ; NOTE: FOR IMSAI VIO AS DUMB TERMINAL USE ADM-3A CHOICE ; TVIO: CALL TYPTID DC "Imsai-VIO-used-as-a-terminal" CALL AINLMS DB 0FH DB ' This version accesses Imsai VIO through the operating',0FH DB ' system and the VIO firmware, as though it was a terminal,',0FH IF DSTAR DB ' to demonstrate DataStar operation on a terminal with line',0FH ELSE DB ' to demonstrate WordStar operation on a terminal with line',0FH ENDIF DB ' insert, line delete, and erase to end line.',0FH DB ' Normally use selection "G" instead.',8FH CALL ADMSUB ;SET ADM-3A CURSOR AND CLEAR SCREEN, ;SET 80*24, RESET ALL ELSE ;OVERWRITE FOR THOSE CONTROL FUNCTIONS AVAILABLE LXI H,(CTRLU SHL 8) + 1 ;1 CHAR, ^U ERASES TO EOL SHLD ERAEOL MVI H,CTRLE SHLD LININS MVI H,CTRLD SHLD LINDEL MVI H,CTRLV SHLD IVON SHLD IVOFF ;CURSOR MUST BE BLINKED ON INVERSE VIDEO MVI A,0FFH STA CRBLIV RET PAGE ; ; INFOTON I-100. USES BRIGHT/DIM. ; INFOBD: CALL TYPTID ;TYPE FOLLOWING NOW, AND SET SIGN-ON DC "INFOTON I-100 terminal" CALL CURPAT ;MAKE CURSOR PATCHES FROM FOLLOWING BYTES DB 2,1BH,'f' ;FIRST LEADIN IS 2 CHAR: ESCAPE, f DB 0 ;NO MIDDLE LEAD-IN DB 0 ;NO LEAD-OUT DB 0FFH ;COLUMN IS FIRST DB 20H ;LINE OFFSET DB 20H ;COLUMN OFFSET CALL DUMB ;DEFAULT / CLEAR ALL, SET 24 * 80. LXI H,0C00H+1 ;ONE CHAR, 0CH, ;;;ERASE EOL REMOVED CAUSE WORKS FOR FOREGROUND (BRIGHT) ONLY ****** ;;;LEAVE UNPATCHED, SOFTWARE ERASE TO EOL WILL BE USED ;;LXI D,1B00H+'K' ;ESCAPE, K ;;CALL S2ERA ; ERASES TO EOL LXI D,1B00H+'M' ;ESCAPE, M CALL SET2DL ; DELETES LINE MVI E,'L' ;ESCAPE, L CALL SET2IL ; INSERTS LINE ;HIGHLIGHTING USING BRIGHT/DIM. TERMINAL COMES UP BRIGHT. MVI E,'4' ;EXPACE, 4 CALL S2IVON ; SETS DIM MVI E,'3' ;ESCAPE, 3 JMP S2IVOF ; SETS BRIGHT PAGE ; HEWLETT-PACKARD 2621 A/P ; FROM LEONARD'S INFO RE WORDMASTER, 5/29/79 ; HEWLET: CALL TYPTID ;TYPE FOLLOWING NOW, AND SET SIGN-ON VERTXT. DC "Hewlett-Packard 2621 terminal" ; CALL UNTEST ;SAY NOT TESTED HPSUB: CALL DUMB ;RESET ALL FEATURES, SET 24 * 80. 24 * 80 ??? CALL CURPAT ;MAKE CURSOR PATCHES FROM FOLLOWING BYTES DB 3,1BH,26H,61H ;FIRST LEADIN IS 2 CHAR: ESCAPE, &, a *3.6* DB 1,79H ;MIDDLE LEAD-IN: y DB 1,'C' ;LEAD-OUT DB 0 ;LINE IS FIRST DB 0 ;LINE OFFSET DB 0 ;COLUMN OFFSET MVI A,2 ;FLAG TO SEND ASCII CHARACTERS STA ASCUR ;SAVE THE FLAG ;HOME UP AND CLEAR SCREEN FOR CLEAR SCREEN FUNCTION ;CALL COPINL ;COPY INLINE BYTES FOR FUNCTION STRING ; DW CLRSCR ;DESTINATION ; DB 4 ; # CHARACTERS / FIRST CHAR COPIED ; DB 1BH,'H' ;HOME UP COMMAND ; DB 1BH,'J' ;CLEAR SCREEEN ;ERASE EOL LXI D,1B00H+'K' ;ERASE EOL ON ESCAPE, K JMP S2ERA ; ;HEWLETT PACKARD 87 COMPUTER ; HP87: CALL TYPTID DC "Hewlett Packard 87" CALL HPSUB XRA A STA ERAEOL## CALL COPINL DW IVON DB 4 DB 1BH,'&dA' CALL COPINL DW IVOFF DB 4 DB 1BH,'&d@' RET ; ;HEWLETT PACKARD 125 ; HP125: CALL TYPTID DC "Hewlett Packard 125" CALL HPSUB LXI D,1B4CH CALL SET2IL MVI E,4DH CALL SET2DL RET ; PAGE ; PERKIN-ELMER 550 BANTAM ; FROM INCOMPLETE MANUAL EXCERPTS SENT BY ? TONY GOULD ; BANTAM: CALL TYPTID DC "Perkin-Elmer Bantam terminal" ; CALL UNTEST CALL DUMB ;SET 24*80, CLEAR ALL OPTIONS CALL CURPAT ;MAKE CURSOR PATCHES FROM FOLLOWING BYTES DB 2,1BH,'X' ;FIRST LEADIN IS 2 CHAR: ESCAPE, X DB 2,1BH,'Y' ;MIDDLE LEAD-IN: ESCAPE, Y DB 0 ;NO LEAD-OUT DB 0 ;LINE IS FIRST DB 20H ;LINE OFFSET (?) DB 20H ;COLUMN OFFSET (?) ;CLEAR SCREEN AND HOME UP: ESCAPE K, 20 MS DELAY LXI D,1B00H+'K' ; CALL SET2CL ;DEFAULT DELAY IS 25 MSEC ;ERASE END LINE: ESCAPE I, 20 MS DELAY LXI D,1B00H+'I' CALL S2ERA MVI A,20 ;# MSEC DELAY ON MISC FUNCTIONS STA DELMIS ;(DEFAULT IS 5) RET ;MORE? PAGE ;TERMINALS... HEATH: ;HEATH INTEGRATED TERMINAL *3.7* CALL TYPTID ;PRINT THE FOLLOWING MESSAGE *3.7* DC "Heath or Zenith H89/H19 Terminal" ; *3.7* CALL CURPAT ;MAKE CURSOR PATCHES *3.7* DB 2,1BH,'Y' ;LEAD IN CHARACTERS *3.7* DB 0 ;NO LINE IN FIRST *3.7* DB 0 ;NO MIDDLE LEAD IN *3.7* DB 0 ;NO LEAD OUT *3.7* DB 32 ;LINE OFFSET *3.7* DB 32 ;COLUMN OFFSET *3.7* CALL DUMB ;SET DEFAULT VALUES *3.7* ; MVI A,25 ;WE HAVE A 25 LINE SCREEN *3.7* ; STA HITE## ;SAVE THE NEW HITE *3.7* LXI D,1B4BH ;ERASE TO EOL / 1B REMAINS *3.7* CALL S2ERA ; *3.7* MVI E,'L' ;D=1B4C FOR INSERT LINE *3.7* CALL SET2IL ; *3.7* MVI E,'M' ;D=1B4D FOR DELETE LINE *3.7* CALL SET2DL ; *3.7* MVI E,'p' ;D=1B70 INVERSE VIDEO ON *3.7* CALL S2IVON ; *3.7 * MVI E,'q' ;D=1B71 INVERSE VIDEO OFF *3.7* CALL S2IVOF ; *3.7* RET ; ; ; ADDS REGENT 20 ; REG20: CALL TYPTID DC "Adds Regent 20/25" REG20A: CALL DUMB CALL CURPAT DB 2,1BH,59H DB 0 DB 0 DB 0 DB 20H DB 20H LXI D,1B00H+'K' CALL S2ERA ;ERASE TO EOL STRING CALL COPCOD ;*4.1* DW TRMINI## ; WHERE TO PUT BYTES DB 3 ; BYTE COUNT REG20I: DB 2,1BH,36H ; BYTES THEMSELVES RET ; FOLLOWING CLEARED AND REG20I PUT ABOVE *4.1* BECAUSE OF COPY NOT BEING USED ; PROPERLY. (CAUSED TOO MANY BYTES TO BE COPIED) ; LXI D,REG20I ;DATA TO INIT ; LXI B,3 ;# OF BYTES TO COPY ;SETINT: LXI H,TRMINI## ;WHERE TO PUT INI STRING ; JMP COPY## ; ; PAGE ;TERMINALS ; ; ADDS REGENT 40 ; REG40: CALL TYPTID DC "ADDS Regent 40/45/60/65" CALL REG20A ;USE REG20A CURSOR POS. LXI D,1B00H+'l' ;DELETE LINE CODE CALL SET2DL ;SET THE DELETE LINE MVI E,'M' ;INSERT LINE CALL SET2IL ; MVI E,'K' ;ERASE TO EOL (DONE FOR REGENT 25 ABOVE) *4.1* ; CALL S2ERA ; ;REG40B:CALL COPCOD ; TAKEN OUT (THESE TERMINALS CAN'T HILIGHT WITHOUT ; ; TAKING UP A SPACE ON THE SCREEN ;*4.1* ; DW TRMINI## ; DB 4 ;REG40I: DB 03,1BH,30H,41H ; FOLLOWING CLEARED AND REG40I PUT ABOVE *4.1* BECAUSE OF COPY NOT BEING USED ; PROPERLY. (CAUSED TOO MANY BYTES TO BE COPIED) ; LXI B,4 ;TOTAL # OF BYTES TO TRANSFER ; LXI D,REG40I ;INIT STRING TO PUT INTO TRMINI ; CALL SETINT ;SET INITIT STRING ; CALL COPINL ;SET IVON ; DW IVON ; DB 1,0EH ; CALL COPINL ;SET IVOFF ; DW IVOFF ; DB 1,0FH RET ; ; ;ADDS VIEWPOINT *4.1* ; ADDSV: CALL TYPTID DC "ADDS Viewpoint Terminal" CALL REG20A CALL COPCOD DW TRMINI## DB 4 REG40I: DB 03,1BH,30H,41H ;SAYS DO BRIGHT/DIM FOR HILITE CALL COPINL ;SET IVON DW IVON DB 1,0EH CALL COPINL ;SET IVOFF DW IVOFF DB 1,0FH RET ; VIEWPOINT DOES HIGHLIGHTING ; PAGE ;TERMINALS ; ; IBM 3101 ; IBM310: CALL TYPTID DC "IBM 3101 Terminal" CALL DUMB CALL CURPAT DB 2,1BH,59H DB 0 DB 0 DB 0 DB 20H DB 20H ; ; THE FOLLOWING TAKEN OUT VERSION ; LXI D,1B49H ;ERA TO EOL 4.1 BECAUSE THESE FUNCTIONS ; CALL S2ERA ; ONLY WORK IN BLOCK MODE ON THIS ; MVI E,4FH ;DELETE LINE TERMINAL. ALSO PUT SELECTION ON ; CALL SET2DL ; MENU #3 ; MVI E,4EH ;INSERT LINE ; CALL SET2IL ; CALL COPINL ;SET IV ON ; DW IVON ;ADDRESS TO CHANGE ; DB 3,ESC,'3','A' ; CALL COPINL ;SET IV OFF ; DW IVOFF ; DB 3,ESC,'3','E' MVI A,10H STA DELCUS## RET ELSE ;conditional assemble for Apple APTABL: DB 'U' ; DW NOCHAN ;for new Apple install DB '1' ; DW APRTN1 ; DB '2' ; DW APRTN2 ; DB '3' ; DW APRTN3 ; DB '4' ; DW APRTN4 ; DB '5' ; DW APRTN5 ; DB '6' ; DW APRTN6 ; DB '7' ; DW APRTN7 ; DB '8' ; DW APRTN8 ; DB 0 ; ; ; APLERT: CALL APSORC ; CALL AINLMS ; DB 0FH,0FH ; IF DSTAR ; DB ' ***** DataStar APPLE MENU *****',0FH ; ELSE ; DB ' ***** WordStar APPLE MENU *****',0FH ; ENDIF ; DB 0FH ; DB '1 VIDEOTERM: Hardware U/L Case',0FH ; Š DB '2 VIDEOTERM: Software U/L Case',0FH ; DB '3 VIDEOTERM: Software U/L Case with Shift Mod',0FH ; DB '4 SUP''R''TERM: Hardware U/L Case',0FH ; DB '5 SUP''R''TERM: Software U/L Case',0FH ; DB '6 SUP''R''TERM: Software U/L Case with Shift Mod',0FH ; DB '7 VISION-80: with Shift Mod',0FH; DB '8 VISION-80: Software U/L Case',0FH ; db 'U No Change',0FH ; DB 0FH,0FH ; DC 'PLEASE ENTER SELECTION (1 LETTER):' ; ; LXI H,APTABL ; CALL MENDIS ; RET ; ; ; ; expand the folowing routine for each ; possible selection; the correct byte ; is saved in APLFLG and the title id                            ; is listed on the CRT; ; APLFLG logic: ; bit 0: use special console out routine ; bits 1-e: one and only one must be set ; bit 1: do not usespecial console status and input routines ; bit 2: use special hardware shift console input routine ; bit 3: use special shift modification console status and input routines ; bit 4: use special software shift console status and input routines ; bit 5: load special software screen function and keyboard dispatch tables ; APRTN? MACRO X0,X1,X2 APRTN&X0: CALL TYPTID DC X2 MVI A,X1 STA APLFLG RET ENDM APRTN? 1,30H,'VIDEOTERM: Hardware U/L' ; ; APRTN? 4,31H,'SUP"R"TERM: Hardware U/L' ; ; APRTN? 2,24H,'VIDEOTERM: Software U/L' ; ; APRTN? 3,28H,'VIDEOTERM with Shift Mod' ; ; APRTN? 5,25H,'SUP"R"TERM: Software U/L' ; ; APRTN? 6,29H,'SUP"R"TERM with Shift Mod' ; APRTN? 7,62H,'VISION-80 with Shift Mod' APRTN? 8,64H,'VISION-80: Software U/L' PAGE ;**************************************************************** ; SETESC ;**************************************************************** ; These routines change references to the escape key as an error ; release character to the return key. This is necessary because ; the software shift routine inhibits sending the escape code to ; the program. Also if the software shift routines are not used, ; this routines resets the references back to escape. The ; absolute addresses used are either loaded manually or by a ; special program which processes FORMGEN and DataStar to find ; the references. ; These routines are called from PATCHR. The output file has ; already been opened. .Z80 SETESC:: LD A,(FILENO) ;find out which file CP 2 JR Z,FGESC CP 1 RET NZ DSESC: LD HL,DSTABL LD DE,DS2 JR ESC1 FGESC: LD HL,FGTABL LD DE,FG2 ESC1: LD (TABPTR),HL LD (T2PTR),DE ; move OUTFCB - necessary because not enough allocated for random access LD HL,OUTFCB## LD DE,DEFFCB LD BC,35D LDIR LD A,(APLFLG) BIT 4,A ;software shift? JR Z,ESC2 ; software shift LD A,ESC LD (ESCCHR),A LD HL,ESCSTR ;'ESC' string JR ESC3 ; not software shift ESC2: LD A,CR LD (ESCCHR),A LD HL,RETSTR ;'RET' string ESC3: LD (STRPTR),HL ; write escape or returns to the file ; set iteration counter LD B,2 ;we go through this twice PUSH BC ; get next load address ESC4: LD HL,(TABPTR) LD E,(HL) INC HL LD D,(HL) ; test for end of table XOR A CP (HL) JR Z,ESC5 ; set pointer for next fetch INC HL LD (TABPTR),HL ; set random record number CALL SETRAN ; set byte CALL PUTIN ; save sector CALL WRIRAN ; repeat JR ESC4 ; do the same thing for ESC string ESC5: LD HL,(T2PTR) LD (TABPTR),HL LD A,0FFH LD (ESCCHR),A POP BC DJNZ ESC4 RET PAGE ; this routine sets the DMA address to 80H SET80: LD DE,80H LD C,SETDMA CALL BDOS RET ; this routine sets the random access record number bytes in the FCB ; address is in DE SETRAN: LD BC,R0 ;FCB offset to random record number LD HL,DEFFCB ADD HL,BC EX DE,HL LD A,L OR 80H ;index into sector + 80H LD (INDEX),A DEC H ;account for 100H load address ADD HL,HL ;H now contains sector number EX DE,HL LD A,0 ADC A,A ;overflow from setting sector count LD C,A LD A,D ; skip sector read if we are on the same sector CP (HL) LD A,C JR NZ,SET2 INC HL CP (HL) JR NZ,SET3 RET SET2: LD (HL),D ; zero next two bytes INC HL SET3: LD (HL),A INC HL LD (HL),0 ; fall through to REARAN PAGE ; this routine reads the record pointed to by random record bytes in FCB REARAN: CALL SET80 ;set DMA to 80H LD DE,DEFFCB LD C,RERAN CALL BDOS RET ; this routine writes the record pointed to by random record bytes in FCB WRIRAN: CALL SET80 ;set DMA to *0H LD DE,DEFFCB LD C,WRRAN CALL BDOS RET PAGE ; this routine loads bytes into the sector buffer PUTIN: LD A,(INDEX) LD H,0 LD L,A LD A,(ESCCHR) OR A JP M,PUTSTR ; load single escape character LD (HL),A RET ; load three character string PUTSTR: LD BC,3 ;three iterations EX DE,HL LD HL,(STRPTR) PUT1: LDI RET PO ; test for buffer over flow XOR A OR D CALL NZ,NXTSEC JR PUT1 ; save current sector - read in next sector NXTSEC: LD DE,80H ;reset buffer pointer EXX ;save BCDEHL CALL WRIRAN ; point random record number to next sector LD HL,DEFFCB LD DE,R0 ;offset to random record number ADD HL,DE INC (HL) JR NZ,NEXT1 ; overflow in first byte INC HL INC (HL) ; read next sector NEXT1: CALL REARAN EXX ;restore ABCDEHL RET PAGE ; APPLE VARIABLES R0 EQU 33D ;index into random record counter FILENO::DB 01 ;DATASTAR = 1, FORMGEN = 2 TABPTR: DW DSTABL T2PTR: DW DS2 STRPTR: DW ESCSTR INDEX: DB 80H DSTABL: DW 3FC4H DW 0 DW 0 DS2: DW 4FB0H DW 513FH DW 0 FGTABL: DW 2F74H DW 0 DW 0 FG2: DW 3F0CH DW 0 DW 0 ESCCHR: DB ESC ESCSTR: DB 'ESC' RETSTR: DB 'RET' .8080 ENDIF ; PAGE IF NOT APPLE ; SUBR TO TYPE "NOT TESTED" ; UNTEST: CALL AINLMS DB 0FH DB ' We have not tested this terminal or printer type.',0FH DB ' Please report any problems.',8FH RET ENDIF PAGE ;TERMINALS... ; ; "NO CHANGE" ENTERED ; NOCHAN: LXI H,IDTEX ;POINT TERMINAL TEXT WE PUT IN SIGNON NOCH: ;COMMON "NO CHANGE" ROUTINE FOR SEVERAL QUESTIONS. ;PREVIOUS SELECTION TEXT POINTER IN HL. SAVES PSW. CALL PREUNC ;"PREVIOUS SELECTION KEPT UNCHANGED". SAVES PSW. ; CHANGED FROM 1 CRLF 7/15/79 ************** ;TYPE 2 CRLF'S, PREVIOUS SELECTION TEXT (HL), CRLF. ;PRODUCES EXCESS BLANK LINE AFTER PIDTEX, IDTEX -- KNOWN FACT. ;C2TYCR: CALL ACRLF CRTYCR: ;HERE FOR CRLF, TYPE TEXT (HL), CRLF. SAVES REGS CALL ACRLF TYPHCR: ;HERE TO TYPE TEXT (HL), CRLF. SAVES REGS INCL PSW. CALL ATYPHL ;TYPE TEXT (HL) JMP ACRLF ;CRLF AFTER. NB SAVES PSW. ; ; "NONE OF THE ABOVE" ENTERED ; NONEOF: CALL AINLMS IF DSTAR DB 'For other terminals and video boards, DataStar must be',0FH DB '"patched" with DDT. Determine your terminal''s control',0FH DB 'sequences from the manufacturer''s manual; refer to the',0FH DB 'MODIFICATION section of the DataStar manual, and the',0FH DB 'listing in the appendix, for patching information.',8FH ELSE DB 'For other terminals and video boards, Wordstar must be',0FH DB '"patched". Determine your terminal''s control sequences',0FH DB 'from the manufacturer''s manual; refer to the MODIFICATION',0FH DB 'section of the WordStar manual. Once these codes are determined',0FH DB 'answer "N" to the "ARE THE MODIFICATIONS TO WORDSTAR',0FH DB 'COMPLETE ?" question towards the end of INSTALL.',8FH ENDIF RET PAGE DIAL3: ;PRINTER DIALOG (AUTO2.MAC) RETURNS TO HERE. RET ; PAGE ;AUTOP MENU SUBROUTINES ; ; INPUT AND DISPATCH FOR MENU ; ; TAKES TABLE ADDRESS (HL), CHAR TO TREAT CR AS 'U' OR (A) PER ENTRY, ; DISPATCHES TO ROUTINE FROM TABLE WITH CHAR IN A, BCDE SAVED. ; WHEN ROUTINE RETS, CONTROL RETURNS TO CALLING POINT. ; ; REBOOTS ON ^C, TREATS LOWER CASE AS UPPER CASE, CONVERTS CR TO CHAR, ; IGNORES INVALID INPUT, ECHOES INPUT CHAR AFTER VERIFIED, & 2 CRLF'S. ; ; FORM OF TABLE: DB 'CHAR'/DW ADDRESS/DB 'CHAR'/DW ADDRESS ... DB 0 ; MENDIS: MVI A,'U' ;ENTER HERE TO TREAT CR AS 'U' MENDSA: ;ENTER HERE TO TREAT CR AS (A) PUSH H ;SAVE TABLE ADDRESS IN CASE RETRY NEEDED PUSH PSW ;SAVE ; INPUT AND TABLE LOOKUP CALL MENCHU ;INPUT & LOOK UP CHAR (AHL), RET ADDR IN HL, CHAR IN A. JNZ MENDED ;JIF FOUND ; NOT FOUND POP PSW ;NOT FOUND. RESTORE REGS, POP H JMP MENDSA ;.. TRY AGAIN. NOT ECHOED YET -> INVALID CHARS INGNORED ; FOUND MENDED: INX SP ;DISCARD ENTRY PSW. CHAR IS IN A. INX SP ;.. XTHL ;STACK DISPATCH ADDRESS, RESTORE ENTRY HL. JMP JOCRLF ;GO ECHO CHAR (A) AND 2 CRLF'S, THEN "RET" TO ROUTINE ; ADDRESSED BY TABLE ENTRY. A=CHAR, BCDEHL PRESERVED. ;NB NOTHING EXTRA IN STACK WHEN ROUTINE ENTERED: ; SOME ROUTINES POP 1 ITEM AND DON'T RET. PAGE ;MENU SUBROUTINES... ; ; INPUT AND LOOK UP CHAR FOR MENU CHOICE ; ; REBOOT IF CONTROL-C, ELSE TRANSLATE CR TO (A), RETURN CHAR IN A, ; LOOKUP IN TABLE (HL), RET TABLE VALUE IN HL OR Z IF NOT FOUND. ; DOES NOT ECHO. ; "MENDIS" INTERNAL SUBR ONLY AT PRESENT. ;MENCH: MVI A,'U' ;POSSIBLE ENTRY TO TREAT CR AS 'U' MENCHU: ;ENTRY TO TREAT CR AS (A) ; GET CHAR, CHANGE CR TO (A) CALL GETCH ;AND RAISE AND REBOOT ON ^C ; ; SEARCH TABLE (HL). ENTRIES ARE DB KEY, DW VALUE, ... DB 0. ; DCX H ;PRIME HL FOR FALLIN TO TEST FIRST ENTRY DCX H MENCH1: INX H ;POINT NEXT ENTRY (1 INX ALREADY DONE) INX H ; TEST AN ENTRY INR M ;TEST TABLE FOR 0 W/O CHANGING A DCR M RZ ;RIF END TABLE. Z SET, CHAR IN A, HL GARBAGE. CMP M ;SET Z IF CHAR (A) MATCHES TABLE INX H ;POINT VALUE PORTION OF TABLE ENTRY JNZ MENCH1 ;JIF NOT THIS ENTRY ; FOUND. ORA A ;SET NZ PUSH D MOV E,M ;FETCH TABLE WORD TO HL INX H MOV D,M XCHG POP D RET ;ADDRESS FROM TABLE IN HL, CHAR IN A, NZ. PAGE ;QUESTION/ANSWER SUBROUTINES ; ; SUBROUTINE TO ASK "OK?", TAKE CR AS "YES", RETURN CY IF NO. ; RETURNS TO BEG DIALOG ON "B" -> STACK MUST BE EMPTY. ; TYPES 1 CRLF B4 QUESTION, 2 AFTER ACCEPTABLE RESPONSE. IGNORES OTHER KEYS. ; CROQ: CALL ACRLF CALL CROQ1 JMP CRLF2 CROQ1: CALL AINLMS ;SAME SA CROQ EXCEPT NO CRLF AT ALL DC "OK (Y/N): " MVI A,'Y' ;WHAT TO INTERPRET CR AS ;JMP YESNOX ; ; SUBR TO INPUT Y, N, OR B, IGNORE OTHER CHARS, ECHO CHAR & 2 CRLF'S IF OK. ; CR OR SPACE IS INTERPRETED AS (A). ; RETURNS CHAR IN A, RETURNS CY IF N. ; ON "B", RETURNS TO BEGINNING DIALOG --> STACK MUST BE EMPTY. ; YESNOX: ;ENTRY TO INTERPRET CR AS (A) PUSH B ;PRESERVE BC MOV B,A ;SAVE CR/SPACE CHAR IN B FOR REINPUT YESNO1: ;COME HERE TO INPUT AGAIN AFTER INVALID CHAR TYPED MOV A,B ;RESTORE CR/SPACE CHAR (NEEDED ON REINPUT) CALL GETCH ;GET CHAR TO A, ETC, CONVERT CR OR SPACE TO (A) CPI 'B' JZ EP2BEG ;ON B, ECHO THE 'B', POP BC & RET ADDR, GOTO BEG DIALOG CPI 'N' ;CY FOR 'N' STC JZ YESNO2 CPI 'Y' JNZ YESNO1 ;UNRECOGNIZED, REINPUT W/O ECHO YESNO2: ;Y OR N INPUT POP B ;RESTORE CALLER'S BC CALL JOC ;ECHO CHAR. PRESERVES PSW RET ; ; SUBR TO PRINT CHAR (A), TYPE 2 CRLF'S. PRESERVES PSW. ; JOCRLF: ;SUBR ENTRY TO ECHO CHAR (A), TYPE 2 CRLF'S. CALL JOC ;ECHO CHAR. PRESERVES PSW JMP CRLF2 PAGE ;ANSWER SUBROTUINES & JMP PLACES... ; ; HERE TO ECHO (A) & 2 CRLF'S, POP 2 LEVELS, RETURN TO BEG DIALOG. STACK LEVEL! ; EP2BEG: CALL JOCRLF ;PRINT CHAR (A) AND 2 CRLF'S POP H ;CLEAR AN ITEM FROM STACK (BC PUSHED IN YESNOX) ; ; HERE TO POP 1 LEVEL AND GO TO BEGINNING DIALOG. USED FROM DISPATCH TABLES. ; POPBEG: POP H ;CLEAR RETURN FROM CURRENT ROUTINE FROM STACK ;MUST BE NOTHING ELSE IN STACK !! JMP RETERM ;GO BACK TO "TERMINAL" QUESTION ; ; INPUT CHAR TO (A), REBOOT ON ^C, RAISE, CHANGE CR OR SPACE TO (A) ; GETCH: PUSH B MOV B,A CALL CIBIOS ;GET CHAR TO A CALL RAISE ;CONVERT TO UPPER CASE CPI ' ' JZ GETCH2 ;SUBSTITUTE FOR SPACE ALSO (?) 7/16/79 CPI CR JNZ GETCH3 GETCH2: MOV A,B GETCH3: CPI CTRLC JZ REBOOT POP B RET PAGE ;PATCHING SUBROUTINES ; ; SUBROUTINE TO SET CURSOR PATCHES FROM FOLLOWING IN-LINE ITEMS ; ; CALL IS FOLLOWED IN-LINE BY: CLOBBERS CADE. ; FIRST LEAD-IN: DB # CHARS,THE CHARS. VARIABLE LENGTH. ; MIDDLE LEAD-IN ; LEAD-OUT ; COLUMN-BEFORE LINE FLAG ; LINE OFFSET ; COLUMN OFFSET ; CURPAT: XTHL ;SAVE HL, GET POINTER TO ARGUMENTS LXI D,CLEAD1 CALL COPN ;COPY FIRST LEADIN, HL TO DE, UPDATING HL LXI D,CLEAD2 CALL COPN LXI D,CTRAIL CALL COPN MOV A,M INX H STA CB4LFG MOV A,M INX H STA LINOFF MOV A,M INX H STA COLOFF XRA A STA UCRPOS ;DISABLE USER-PATCH SUBR XTHL ;PUT BACK RETURN ADDRESS RET ; ; SUBR TO COPY STRING HL TO DE, FIRST CHARACTER IS LENGTH. CLOBBERS C. ; COPN: MOV A,M STAX D ;STORE COUNT INX H ;POINT PAST MOV C,A INR C COPNL: DCR C RZ MOV A,M INX H ;HL IS RETURNED POINTING TO NEXT BYTE INX D STAX D JMP COPNL PAGE ;PATCHING SUBROUTINES... ; ; COPY TO ADDRESS IN DW AFTER CALL THE STRING THAT FOLLOWS THAT DW. ; FIRST BYTE OF STRING IS LENGTH (INCLUDED IN COPY). CLOBBERS ACDE. ; ; CALL COPINL ; DW DESTINATION ; DB LEN ; DB BYTE,BYTE,... ; ;CONTROL RETURNS HERE ; COPINL: XTHL ;SAVE HL, GET ARGUMENTS LOCATION ; FETCH DESTINATION TO DE MOV E,M INX H MOV D,M INX H ; COPY STRING CALL COPN ;COPY (HL) TO (DE), FIRST BYTE IS LENGHT, ; UPDATE DEHL, CLOBBER AC. (AUTOP.MAC) XTHL ;LOCATION OF BYTE AFTER STRING IS RETURN ADDRESS RET ; ; COPCOD - SAME AS COPINL BUT DOES NOT COPY LENGTH BYTE INTO DESTINATION ; COPCOD:: XTHL ; *3.8* MOV E,M ; *3.8* INX H ; *3.8* MOV D,M ; *3.8* DCX D ;NECCESARY TO MAKE COPNL ROUTINE WORK *3.8* INX H ; *3.8* MOV C,M ; *3.8* INX H ; *3.8* INR C ; *3.8* CALL COPNL ; *3.8* XTHL ; *3.8* RET ; *3.8* ; page ;SUBRS FOR SETTING 2-BYTE PATCH STRINGS ;SET2CL: LXI H,CLRSCR ;ENTRY TO SET "CLEAR SCREEN" TO 2-CHAR SEQUENCE D,E ; JMP SET2BY S2ERA: LXI H,ERAEOL ; .. ERASE TO EOL JMP SET2BY SET2DL: LXI H,LINDEL ; .. DELETE LINE JMP SET2BY SET2IL: LXI H,LININS ; .. INSERT LINE JMP SET2BY S2IVON: LXI H,IVON ; .. INVERSE VIDEO ON JMP SET2BY S2IVOF: LXI H,IVOFF ; .. INVERSE VIDEO OFF JMP SET2BY S2INI: LXI H,TRMINI ; .. TERMINAL INIT STRING JMP SET2BY S2UNI: LXI H,TRMUNI ; .. TERMINAL CLOSE STRING ; FALL IN ; ; STORE 2, D, E AT (HL). PRESERVES ABCDE, ADDS 2 TO HL. ; SET2BY: MVI M,2 INX H MOV M,D INX H MOV M,E RET PAGE ;CONSOLE OUTPUT SUBROUTINES ; ; SUBR TO SAY "PREVIOUS SELECTION UNCHANGED". SAVES PSW. ; PREUNC: CALL AINLMS ;SAVES PSW DC "Previous selection kept unchanged:" RET PAGE ;SUBROUTINES... ; ; SUBROUTINE TO TYPE (HL) TEXT AND THEN COPY TO "PROTTX" ; THLPRO: LXI D,PROTTX JMP THLCOP ; ; SUBROUTINE TO TYPE IN-LINE TEXT, THEN COPY TO "PROTTX" ; TYPPRO: LXI D,PROTTX JMP TYPCOP ; ; SUBROUTINE TO TYPE (HL) TEXT AND THEN COPY TO "PDRVTX ; THLPDR: LXI D,PDRVTX JMP THLCOP ; ;SUBROUTINE TO TYPE IN-LINE TEXT, THEN COPY TO "PDRVTX" ; TYPPDR: LXI D,PDRVTX JMP TYPCOP ; ; SUBROUTINE TO TYPE IN-LINE TEXT, THEN COPY TO "IDTEX" ; TYPTID: LXI D,IDTEX ;TERMINAL ID TEXT ADDRESS JMP TYPCOP ; ; SUBROUTINE TO TYPE IN-LINE TEXT, THEN COPY TO "PIDTEX" ; TYPPID: LXI D,PIDTEX ;PRINTER ID TEXT ADDRESS TYPCOP: ; BLANK DESTINATION FIRST, TO REMOVE OLD TEXT (MAY BE LONGER) MOV H,D MOV L,E LDA MSGLEN ;LENGTH (IN FIRST.MAC) BLANKL: MVI M,' ' INX H DCR A JNZ BLANKL INX D ;LEAVE FIRST POSITION BLANK ; TYPE TEXT, AND CRLF AFTER POP H PUSH H CALL TYPHCR ;TYPE TEXT AND CRLF AFTER IT ; ;MASK AND COPY INLINE STRING TO (DE), ; TERMINATED BY 0 BYTE (not copied) OR BYTE W/HI BIT (is copied) ; ;COPTOZ: XTHL PUSH PSW COPTZL: MOV A,M ANI 7FH ;CLEAR HI BIT FOR COPY JZ COPTOX ;EXIT IF NEXT BYTE IS 0 STAX D MOV A,M INX H INX D ORA A JP COPTZL ;EXIT AFTER COPYING BYTE W/HI BIT COPTOX: ;HL POINTS TO 0, OR AFTER HI BIT CHAR. OK TO EXECUTE 0=NOP. POP PSW XTHL RET THLCOP: PUSH H ;SAVE TEST TO TYPE AND MOVE ; BLANK DESTINATION FIRST, TO REMOVE OLD TEXT (MAY BE LONGER) MOV H,D MOV L,E LDA MSGLEN ;LENGTH (IN FIRST.MAC) BLANKE: MVI M,' ' INX H DCR A JNZ BLANKE INX D ;LEAVE FIRST POSITION BLANK ; TYPE TEXT, AND CRLF AFTER POP H PUSH H ;NEED IT FOR COPY LATER CALL TYPHCR ;TYPE TEXT AND CRLF AFTER IT ; ;MASK AND COPY (HL) STRING TO (DE), ; TERMINATED BY 0 BYTE (not copied) OR BYTE W/HI BIT (is copied) ; ;COPYHD: POP H ;GET SAVED HL PUSH PSW COPHDL: MOV A,M ANI 7FH ;CLEAR HI BIT FOR COPY JZ COPHDX ;EXIT IF NEXT BYTE IS 0 STAX D MOV A,M INX H INX D ORA A JP COPHDL ;EXIT AFTER COPYING BYTE W/HI BIT COPHDX: ;HL POINTS TO 0, OR AFTER HI BIT CHAR. OK TO EXECUTE 0=NOP. POP PSW RET PAGE ;CONSOLE OUTPUT SUBRS ; SEE ALSO CRTYCR, TYPHCR -- IN-LINE IN CODE ABOVE. CRLF10: CALL CRLF4 CALL CRLF2 CRLF4: CALL CRLF2 CRLF2: CALL ACRLF CALL ACRLF RET NOP ;SEE IF NOT ENDING THIS FILE WITH AN ENTRY SYMBOL NOP ;REDUCES LOADER'S TENDACY TO CLOBBER 1ST TWO BYTES ; OF NEXT FILE LOADED (AUTO2) 7/24/79. END