; ; MCNFG797.ASM ; ; Patches for overlaying distribution version of MODEM797. ; ;You will want to look this file over carefully, there are a number ;of options that you can use to configure MODEM797 to suit your taste. ; ;After you have finished editing this file use DDT to overlay the HEX ;file onto MODEM797 and SAVE 64 MODEM797.COM. ; ;All users should set CLOCK to the right value for their system. ; ;PMMI users should set PUSERATE and CLDBOOT to their proper values. ; ;Non-PMMI, non-H89 users who want to get MODM797 working quickly ;and who do not need to set their modem parameters using this program ;should change VERMSG, INIT, SETUP, CLEAR and PMMI to FALSE and ;change the equates for MODDATP, MODCTLP, MODSNDB, MODSNDR, MODRCVB ;and MODRCVR before assembly. ; ; ; TO USE: First edit this file filling in answers for your own ; equipment. Then assemble with ASM.COM or equivalent ; assembler. Then use DDT to overlay the the results ; of this program to the original MODEM797.COM file: ; ; A>DDT MODEM797.COM ; DDT VERS 2.2 ; NEXT PC ; 4080 0100 ; -IMCNFG797.HEX (note the "I" command) ; -R (loads in the .HEX file) ; NEXT PC ; 4080 0000 ; -G0 (return to CP/M) ; A>SAVE 64 MODEM797.COM (now have modified .COM file) ; ;12/15/82 - Modified to work with version 7.96 of MODEM7 ;PLK ; ;11/26/82 - Modified to work with version 7.94 of MODEM7 ;PLK ; ;11/19/82 - Modified to work with version 7.92 of MODEM7 ;PLK ; ;11/02/82 - Modified to work with version 7.90 of MODEM7. ; Included "how to use" instructions at start of file. ;IMH ; ;10/20/82 - Modified to work with version 7.89 of MODEM7. ;IMH ; ;10/16/82 - Modified to work with version 7.71 of MODEM7. ;PLK ; ;10/15/82 - Fixed lack of ENDIF after IF VERMSG AND (NOT PMMI) ;PLK ; ;10/12/82 - Modified to give version message. ;PLK ; ;10/09/82 - Modified to work with version 7.70 of MODEM7. ;PLK ; ;10/04/82 - Fixed so can also be easily used for making optional ; changes with PMMI modem. ;PLK ; ;10/03/82 - First version of this file. ;PLK ; TRUE EQU 0FFH FALSE EQU 0 ; BELL EQU 07H ;bell CR EQU 0DH ;carriage return LF EQU 0AH ;linefeed ESC EQU 1BH ;escape ; VERMSG EQU FALSE ;change to TRUE if you have given at ;location SYSVERMSG the name of the ;system for which MODEM7 has been ;configured. ; INIT EQU FALSE ;change to TRUE if you have written a ;routine at location INITMOD in this ;file to initialize your modem port ;on MODEM7 execution. PMMI users should ;use FALSE here. ; SETUP EQU FALSE ;change to TRUE if you have written a ;routine at location SETUPR to change ;baud rate, etc and MSPEED. PMMI users ;should use FALSE here. ; EOSCLR EQU true ;change to TRUE if you have defined the ;clear to end of screen sequence for ;your terminal. Clear to end of screen is ;used on returning from terminal mode to ;keep the screen from becoming jumbled if ;the remote can positon your cursor. ; SCRNCLR EQU true ;change to TRUE if you have defined the ;home cursor and clear screen sequence ;for you terminal. PMMI EQU true ;change to TRUE for PMMI. ; IF NOT PMMI ;THE FOLLOWING MUST BE CHANGED FOR YOUR MICRO IF YOU DON'T HAVE AN H89 ;OR A PMMI MODEM BOARD. MODDATP EQU 0D8H ;data port for H89 MODCTLP EQU MODDATP+5 ;modem status port for H89 MODSNDB EQU 20H ;bit to test for ready to send MODSNDR EQU MODSNDB ;change to 0 if bit is 0 when ;ready to send MODRCVB EQU 1 ;bit to test for received data MODRCVR EQU MODRCVB ;change to 0 if bit is 0 when ;data received ENDIF ;NOT PMMI ; ;CHANGE CLR1, CLR2, CLR3, AND CLR4 TO THE APPROPRIATE VALUES FOR ;YOUR TERMINAL IF YOU DO NOT HAVE AN H19 OR H89 AND EOSCLR IS TRUE IF EOSCLR CLR1 EQU 7eh ;tilde ctl-X is the Visual 200 clear CLR2 EQU 'X'-40h ;to end of screen sequence CLR3 EQU 0 ;the unused bytes MUST be 0 CLR4 EQU 0 ENDIF ;EOSCLR ; ;CHANGE SCLR1, SCLR2, SCLR3, AND SCLR4 TO THE APPROPRIATE VALUES FOR ;YOUR TERMINAL IF YOU DO NOT HAVE AN H19 OR H89 AND SCRNCLR IS TRUE IF SCRNCLR SCLR1 EQU 7eh ;tilde ctl-\ is the Visual 200 home SCLR2 EQU '\'-40h ;cursor and clear screen sequence SCLR3 EQU 0 ;the unused bytes MUST be 0 SCLR4 EQU 0 ENDIF ;SCRNCLR ; ;IF YOU HAVE A PMMI YOU MAY NEED TO CHANGE THE BASE ADDRESS. ;ALSO, CHANGE PORT NUMBER IN THE PMMI MESSAGE BELOW SYSVERMSG. IF PMMI PORT EQU 0C0H ;PMMI BASE ADDRESS MODCTLP EQU PORT ;MODEM CONTROL PORT MODDATP EQU PORT+1 ;MODEM DATA PORT BAUDRP EQU PORT+2 ;BAUD RATE PORT MODCTL2 EQU PORT+3 ;2ND MODEM CONTROL PORT ENDIF ;PMMI ; ; ;CLOCK SHOULD BE CHANGED TO SUIT YOUR SYSTEM. ;PMMI USERS SHOULD ALSO CHANGE PULSERATE AND CLDBOOT AS NECESSARY. ; ;You can change locations 107H to 120H, and 123H to 125H ;to suit your taste. ; ;*** WARNING - DO NOT INSERT OR DELETE LINES BEFORE SYSVERMSG *** ; THE DEFINED LOCATIONS ARE GIVEN ON THE RIGHT MARGIN. ; ; ORG 100H ; DS 3 ;(for JMP START) PMMIBYTE: DB PMMI ;don't change this line 103H SETUPTST: DB SETUP ;don't change this line 104H SCRNTEST: DB SCRNCLR ;test for home cursor and clear screen 105H ;routine at CLRSCRN, don't change this CLOCK: DB 4 ;clock speed in MHz, 8 MHz maximum 106H BAKUPBYTE: DB FALSE ;true=make .BAK file 107H CKSUMDFLT: DB FALSE ;true=default to Checksum checking 108H ;false=default to CRC checking TOGGLECRC: DB TRUE ;true=allow toggling of Checksum to CRC 109H CONVBKSP: DB FALSE ;true=convert backspace to rub 10AH TOGGLEBK: DB TRUE ;true=allow toggling of bksp to rub 10BH ADDLF: DB FALSE ;true=add LF after CR 10CH TOGGLELF: DB TRUE ;true=allow toggling of LF after CR 10DH TRANLOGON: DB FALSE ;true=allow transmission of logon 10EH ;write logon sequence at location LOGON SAVCCP: DB TRUE ;true=do not overwrite CCP 10FH LOCONEXTCHR: DB FALSE ;true=local command if EXTCHR precedes 110H ;false=not local command if EXTCHR precedes TOGGLELOC: DB TRUE ;true=allow toggling of LOCONEXTCHR 111H LSTTST: DB TRUE ;true=allow toggling of printer on/off 112H ;in terminal mode, set to false if your ;printer can't keep up with the modem XOFFTST: DB true ;true=allow testing of XOFF from remote 113H ;while transmitting a file in terminal mode XONWAIT: DB FALSE ;true=wait for XON after sending CR 114H ;while transmitting a file in terminal mode TOGXOFF: DB TRUE ;true=allow toggling of XOFF testing 115H MSPEED: DB 1 ;0=110 1=300 2=450 3=600 4=710 5=1200 116H ;default modem speed, PMMI and H89 routines ;reset this value and so should your own ;modem routines BYTDLY: DB 0 ;0=0 delay, 1=0.02 sec, -- ,9=0.18 sec 117H ;default time to send character in ;terminal mode file transfer CRDLY: DB 0 ;0=0 delay, 1=0.08 sec, -- ,9=0.72 sec 118H ;default time for extra wait after CR ;in terminal mode file transfer BELRPT: DB 30 ;bell repeat time = value*0.03 sec 119H EXITCHR: DB 'E'-40H ; ^E = Exit without disconnect 11AH LOGCHR: DB 'O'-40H ; ^O = Send logon 11BH LSTCHR: DB 'P'-40H ; ^P = Toggle printer 11CH UNSAVE: DB 'R'-40H ; ^R = Close input text buffer 11DH TRANCHR: DB 'T'-40H ; ^T = Transmit file to remote 11EH SAVECHR: DB 'Y'-40H ; ^Y = Open input text buffer 11FH EXTCHR: DB '^'-40H ; ^^ = Send next character 120H ; ;Equates used only by PMMI routines grouped together here. PULSERATE: DB 125 ;125 for 20pps, 250 for 10pps on PMMI 121H ;not used if PMMI FALSE CLDBOOT: DW 00000H ;currently set to warm boot with 122H ;BYE routine for PMMI, put your cold ;boot entry here if you have one and ;desire to do on BYE BRKCHR: DB '@'-40H ; ^@ = Transmit "BREAK" with PMMI 124H CHGBAUD: DB 'B'-40H ; ^B = Used with PMMI in terminal 125H ; mode to change baud rate on fly DISCCHR: DB 'D'-40H ; ^D = PMMI Disconnect 126H ; IN$MODCTLP: IN MODCTLP ! RET ;in modem control port 127H OUT$MODDATP: OUT MODDATP ! RET ;out modem data port 12AH IN$MODDATP: IN MODDATP ! RET ;in modem data port 12DH ; IF NOT PMMI ANI$MODSNDB: ANI MODSNDB ! RET ;bit to test for send ready 130H CPI$MODSNDR: CPI MODSNDR ! RET ;value of send bit when ready 133H ANI$MODRCVB: ANI MODRCVB ! RET ;bit to test for receive ready 136H CPI$MODRCVR: CPI MODRCVR ! RET ;value of rcv. bit when ready 139H DS 15 ;PMMI only calls 13CH LOGONPTR: DW LOGON ; 14BH JMP$INITMOD: JMP INITMOD ;go to user written routine 14DH ENDIF ;NOT PMMI ; IF PMMI DS 12 ;not changed 130H IN$BAUDRP: IN BAUDRP ! RET ;in baudrate port 13CH OUT$BAUDRP: OUT BAUDRP ! RET ;out baudrate port 13FH OUT$MODCTL2: OUT MODCTL2 ! RET ;out modem control port #2 142H OUT$MODCTLP: OUT MODCTLP ;out modem control port 145H DS 9 ;not changed 147H ENDIF ;PMMI ; JMP$SETUPR: ; 150H ; IF SETUP JMP SETUPR ENDIF ;SETUP ; IF NOT SETUP RET NOP NOP ENDIF ;NOT SETUP ; CLREOS: CALL JMP$ILPRT ; 153H ; IF EOSCLR DB CLR1,CLR2,CLR3,CLR4,0 ENDIF ;EOSCLR ; IF NOT EOSCLR DB 0,0,0,0,0 ENDIF ;NOT EOSCLR ; RET ; CLRSCRN: CALL JMP$ILPRT ; 15CH ; IF SCRNCLR DB SCLR1,SCLR2,SCLR3,SCLR4,0 ENDIF ;SCRNCLR ; IF NOT SCRNCLR DB 0,0,0,0,0 ENDIF ;NOT SCRNCLR ; RET ; JMP$ILPRT: DS 3 ; 165H JMP$ILCOMP: DS 3 ; 168H JMP$INBUFF: DS 3 ; 16BH JMP$SYSVERMSG: IF PMMI DS 3 ; 16EH ELSE JMP SYSVERMSG 16EH ENDIF JMP$DIALPL: DS 3 ; 171H JMP$DISCONNT: DS 3 ; 174H ; SYSVERMSG: ; IF (NOT VERMSG) AND (NOT PMMI) CALL JMP$ILPRT DB 'Version for: UNSPECIFIED SYSTEM',CR,LF,0 ;NOTE: 0 MUST BE AT END OF ALL ILPRT MESSAGES RET ENDIF ;NOT VERMSG AND NOT PMMI ; ;This is where the message goes giving the system for ;which MODEM7 has been customized. IF VERMSG AND (NOT PMMI) CALL JMP$ILPRT DB 'Version for: HEATH H89',CR,LF,0 RET ENDIF ;VERMSG AND NOT PMMI ; IF NOT PMMI ;INSERT YOUR LOGON HERE, MUST END IN 0. ;FOR A LOGON, PMMI USERS MUST MODIFY MODM797.ASM LOGON: DB 0 ENDIF ;NOT PMMI ; IF (NOT INIT) AND (NOT PMMI) INITMOD: RET ENDIF ;NOT INIT AND NOT PMMI ; ;*** WARNING - IF YOU MAKE INITMOD AND SETUPR TOO LONG YOU MAY *** ;*** GO BEYOND THE LENGTH OF THE PMMI INITMOD ROUTINE. *** ;*** YOU CAN MODIFY UP TO THE BYTE BEFORE NUMBLIB *** ;*** NUMBLIB CURRENTLY IS AT 0617H. *** ;*** IF YOU NEED MORE SPACE USE AN APPROPRIATE DS BEFORE NUMBLIB *** ; IF INIT ; ;The following are used in setting up the 8250 ACE on the H89. ;No need to change for another micro if INIT and SETUP are FALSE. ; ;control and status ports MODIER EQU MODDATP+1 ;interrupt enable MODIIR EQU MODDATP+2 ;interrupt ident. MODLCR EQU MODDATP+3 ;line control MODMCR EQU MODDATP+4 ;modem control MODLSR EQU MODDATP+5 ;line status, same as MODCTLP above MODMSR EQU MODDATP+6 ;modem status ; ;baud rate latches MODDLL EQU MODDATP ;divisor latch low MODDLH EQU MODDATP+1 ;divisor latch high ; ;control bytes DISABL EQU 0 ;disable interrupts LOOP$NODTR EQU 10H ;set loop back, turn off DTR ACCBAUD EQU 80H ;access baud rate divisor latches LSD1200 EQU 60H ;LSD for 1200 baud MSD1200 EQU 0 ;MSD for 1200 baud WORDLEN EQU 3 ;8 bit word, no parity, no break ;deaccess baud rate divisor latches DTR EQU 1 ;turn on DTR ;End of H89 specific equates for initialization. ; ; ;The following is used to initialize the H89 on execution ;of MODEM7. Change it to initialize the modem port on ;your micro if you wish. ; ; INITMOD: MVI A,5 ;MSPEED 1200 baud value STA MSPEED INITMOD2: MVI A,DISABL OUT MODIER MVI A,LOOP$NODTR OUT MODMCR MVI A,ACCBAUD OUT MODLCR LSBD: MVI A,LSD1200 OUT MODDLL MSBD: MVI A,MSD1200 OUT MODDLH MVI A,WORDLEN OUT MODLCR MVI A,DTR OUT MODMCR RET ; ENDIF ;INIT ; ; ;The following routine changes the baud rate for the H89 from ;the command level. Write your own routine here to change your ;modem parameters. ; ; IF SETUP ; SETUPR: PUSH H AGAIN: LXI D,BAUDBUF ;point to input buffer for ILCOMP CALL JMP$ILPRT DB 'Input Baud Rate (300, 450, 600, 1200): ',0 CALL JMP$INBUFF LXI D,BAUDBUF+2 CALL JMP$ILCOMP ;compare BAUDBUF+2 with characters below DB '300',0 JNC OK300 ;go if got match CALL JMP$ILCOMP DB '450',0 JNC OK450 CALL JMP$ILCOMP DB '600',0 JNC OK600 CALL JMP$ILCOMP DB '1200',0 JNC OK1200 CALL JMP$ILPRT ;all matches failed - tell operator DB '++ Incorrect entry ++',CR,LF,BELL,0 JMP AGAIN ;try again ; OK300: MVI A,1 ;MSPEED 300 baud value LHLD BD300 ;get 300 baud parameters in HL JMP LOADBD ;go load them ; OK450: MVI A,2 LHLD BD450 JMP LOADBD OK600: MVI A,3 LHLD BD600 JMP LOADBD ; OK1200: MVI A,5 LHLD BD1200 JMP LOADBD ; LOADBD: STA MSPEED MOV A,L ;get least significant baud rate byte STA LSBD+1 ;store in INITMOD MOV A,H ;get most signifcant baud rate byte STA MSBD+1 ;store in INITMOD POP H JMP INITMOD2 ;reset H89 8250 ; ;Table of baud rate parameters BD300: DW 0180H BD450: DW 0100H BD600: DW 00C0H BD1200: DW 0060H ; BAUDBUF: DB 10,0 DS 10 ; ENDIF ;SETUP ; ; END ;