home *** CD-ROM | disk | FTP | other *** search
- ;MDM overlay for the H/Z89 running CP/M 2.204 with the Z-89-11 card installed
- ;This overlay sould work, but I have not tested it..
- ;Equates for enhanced programmable communication interface chip 2661-3.
- ;Port Displacements.
- ; EQU 0 data
- ; EQU 1 status
- ; EQU 1 syn1/syn2/dle
- ; EQU 2 mode
- ; EQU 3 command
- ;
- ;Status Registers
- ; EQU 00000001b transmitter ready
- ; EQU 00000010b receiver ready
- ; EQU 00000100b transmitter empty
- ; EQU 00000100b data set change
- ; EQU 00001000b parity error
- ; EQU 00010000b overrun error
- ; EQU 00100000b frame error
- ; EQU 00100000b sync detected
- ; EQU 01000000b data carrier detect
- ; EQU 10000000b data set ready
- ;
- ;Mode Register 1
- ; EQU 00000011b mode and baudrate factor
- ; EQU 000h synchronous 1x rate
- ; EQU 001h asynchronous 1x rate
- ; EQU 002h asynchronous 16x rate
- ; EQU 003h asynchronous 64x rate
- ;
- ; EQU 00001100b character length
- ; EQU 000h length 5
- ; EQU 004h length 6
- ; EQU 008h length 7
- ; EQU 00Ch length 8
- ; EQU 00010000b Parity control (0=disabled, 1=enabled)
- ; EQU 00100000b parity type (0=odd, 1=even)
- ;
- ; EQU 11000000b asynchronous stop bit length
- ; EQU 040h length 1
- ; EQU 080h length 1.5
- ; EQU 0C0h length 2
- ;
- ; EQU 01000000b synchronous transparency control
- ; (0=normal, 1=transparent)
- ; EQU 10000000b number of sync characters
- ; (0=double, 1=single)
- ;
- ;Mode Register 2
- ; EQU 00001111b baud rate selection
- ; EQU 11110000b see text
- ;
- ;Command Register
- ; EQU 00000001b transmitter enable
- ; EQU 00000010b data terminal ready
- ; EQU 00000100b receiver enable
- ; EQU 00001000b send break (async)
- ; EQU 00001000b send dle (sync)
- ; EQU 00010000b reset status errors
- ; EQU 00100000b request to send
- ;
- ; EQU 11000000b operating mode
- ; EQU 000h normal
- ; EQU 040h mode1
- ; EQU 080h local loop back
- ; EQU 0C0h remote loop back
- ;
- ;BAUDRATE SELECTION VALUES
- ;
- ; EQU 0 50
- ; EQU 1 75
- ; EQU 2 110
- ; EQU 3 134.5
- ; EQU 4 150
- ; EQU 5 300
- ; EQU 6 600
- ; EQU 7 1200
- ; EQU 8 1800
- ; EQU 9 2000
- ; EQU 10 2400
- ; EQU 11 3600
- ; EQU 12 4800
- ; EQU 13 7200
- ; EQU 14 9600
- ; EQU 15 19200
- ;
- ;
- BELL: EQU 07H ;bell
- CR: EQU 0DH ;carriage return
- ESC: EQU 1BH ;escape
- LF: EQU 0AH ;linefeed
- ;
- YES: EQU 0FFH
- NO: EQU 0
- ;
- ;
- MODDATP: EQU 0D8H ;data port for H/Z89
- MODCTL1: EQU MODDATP+1 ;status port for H/Z89
- MODRCVB: EQU 2 ;bit to test for received data
- MODRCVR: EQU 2 ;modem receive ready
- MODSNDB: EQU 1 ;bit to test for ready to send
- MODSNDR: EQU 1 ;modem send ready bit
- ;
- ;
- ORG 100H
- ;
- DS 3 ;(for "JMP START" instruction)
- ;
- PMMIMODEM: DB NO ;yes=PMMI S-100 Modem
- SMARTMODEM: DB YES ;yes=HAYES Smartmodem, no=non-Hayes
- TOUCHPULSE: DB 'T' ;T=touch, P=pulse (Smartmodem-only)
- CLOCK: DB 20 ;clock speed in MHz x10, 25.5 MHz max.
- ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
- MSPEED: DB 1 ;0=110 1=300 2=450 3=600 4=710 5=1200
- ;6=2400 7=4800 8=9600 9=19200 default
- BYTDLY: DB 5 ;0=0 delay 1=10ms 5=50 ms - 9=90 ms
- ;default time to send character in ter-
- ;minal mode file transfer for slow BBS.
- CRDLY: DB 5 ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms
- ;default time for extra wait after CRLF
- ;in terminal mode file transfer
- NOOFCOL: DB 5 ;number of DIR columns shown
- SETUPTST: DB YES ;yes=user-added Setup routine
- SCRNTEST: DB YES ;Cursor control routine
- ACKNAK: DB YES ;yes=resend a record after any non-ACK
- ;no=resend a record after a valid NAK
- BAKUPBYTE: DB NO ;yes=change any file same name to .BAK
- CRCDFLT: DB YES ;yes=default to CRC checking
- TOGGLECRC: DB YES ;yes=allow toggling of CRC to Checksum
- CONVBKSP: DB NO ;yes=convert backspace to rub
- TOGGLEBK: DB NO ;yes=allow toggling of bksp to rub
- ADDLF: DB NO ;no=no LF after CR to send file in
- ;terminal mode (added by remote echo)
- TOGGLELF: DB YES ;yes=allow toggling of LF after CR
- TRANLOGON: DB YES ;yes=allow transmission of logon
- ;write logon sequence at location LOGON
- SAVCCP: DB YES ;yes=do not overwrite CCP
- LOCONEXTCHR: DB NO ;yes=local command if EXTCHR precedes
- ;no=external command if EXTCHR precedes
- TOGGLELOC: DB YES ;yes=allow toggling of LOCONEXTCHR
- LSTTST: DB YES ;yes=printer available on printer port
- XOFFTST: DB NO ;yes=checks for XOFF from remote while
- ;sending a file in terminal mode
- XONWAIT: DB NO ;yes=wait for XON after CR while
- ;sending a file in terminal mode
- TOGXOFF: DB YES ;yes=allow toggling of XOFF checking
- IGNORCTL: DB YES ;yes=CTL-chars above ^M not displayed
- EXTRA1: DB 0 ;for future expansion
- EXTRA2: DB 0 ;for future expansion
- BRKCHR: DB '@'-40H ;^@ = Send a 300 ms. break tone
- NOCONNCT: DB 'N'-40H ;^N = Disconnect from the phone line
- LOGCHR: DB 'L'-40H ;^L = Send logon
- LSTCHR: DB 'P'-40H ;^P = Toggle printer
- UNSAVE: DB 'R'-40H ;^R = Close input text buffer
- TRANCHR: DB 'T'-40H ;^T = Transmit file to remote
- SAVECHR: DB 'Y'-40H ;^Y = Open input text buffer
- EXTCHR: DB '^'-40H ;^^ = Send next character
- ;
- ;
- DS 2 ;
- ;
- IN$MODCTL1: IN MODCTL1 ! RET ;in modem control port
- DS 7
- OUT$MODDATP: OUT MODDATP ! RET ;out modem data port
- DS 7
- IN$MODDATP: IN MODDATP ! RET ;in modem data port
- DS 31
- ;
- LOGONPTR: DW LOGON ;for user message.
- DS 6 ;
- JMP$GOODBYE: JMP GOODBYE ;
- JMP$INITMOD: JMP INITMOD ;go to user written routine
- RET ! NOP ! NOP ;(by-passes PMMI routine)
- RET ! NOP ! NOP ;(by-passes PMMI routine)
- RET ! NOP ! NOP ;(by-passes PMMI routine)
- JMP$SETUPR: JMP SETUPR ;
- JMP$SPCLMENU: JMP SPCLMENU ;
- JMP$SYSVER: JMP SYSVER ;
- JMP$BREAK: JMP SENDBRK ;
- ;
- ;
- ; Do not change the following six lines.
- ;
- JMP$ILPRT: DS 3 ;
- JMP$INBUF DS 3 ;
- JMP$INLNCOMP: DS 3 ;
- JMP$INMODEM DS 3 ;
- JMP$NXTSCRN: DS 3 ;
- JMP$TIMER: DS 3 ;
- ;
- ;
- CLREOS: CALL JMP$ILPRT ;
- DB ESC,'J',0,0,0 ;
- RET ;
- ;
- CLRSCRN: CALL JMP$ILPRT ;
- DB ESC,'E',0,0,0 ;CLEAR ENTIRE SCREEN
- RET ;
- ;
- ;
- SYSVER: CALL JMP$ILPRT ;
- DB 'Version for Zenith Z-89-11'
- DB CR,LF,0
- DB RET
- ;.....
- ;
- ;
- ;-----------------------------------------------------------------------
- ;
- ; NOTE: You can change the SYSVER message to be longer or shorter. The
- ; end of your last routine should terminate by 0400H (601 bytes
- ; available after start of SYSVER) if using the Hayes Smartmodem
- ; or by address 0C00H (2659 bytes available) otherwise.
- ;
- ;-----------------------------------------------------------------------
- ;
- ; You can put in a message at this location which can be called up with
- ; CTL-O if TRANLOGON has been set YES. You can put in several lines if
- ; desired. End with a 0.
- ;
- LOGON: DB 'Hello from a Heath H/Z-89 computer',CR,LF,0
- ;.....
- ;
- ;
- ; This routine allows a 300 ms. break tone to be send to reset some
- ; time-share computers.
- ;
- SENDBRK: MVI A,1DH ;SEND A BREAK TONE FOR 300 MS.
- JMP GOODBYE1
- ;.....
- ;
- ;
- ; This routine sends a 300 ms. break tone and sets DTR low for the same
- ; length of time to disconnect some modems such as the Bell 212A, etc.
- ;
- GOODBYE: MVI A,05H ;SET BREAK, DTR LOW
- ;
- GOODBYE1: OUT MODDATP+3 ;PUT COMMAND REGISTER OUT OF MODE
- IN MODDATP+3 ;MAKE SURE IT IS NOW CLEAR
- IN MODDATP+3 ;TRY ONCE MORE
- MVI B,3 ;DELAY FOR 300 MS.
- CALL JMP$TIMER
- MVI A,37H ;RESET RTS, FLAGS, DTR LOW, ENABLE R/T
- OUT MODDATP+3 ;SEND TO COMMAND REGISTER
- IN MODDATP+3 ;CLEAR ANY INCOMING CHARS.
- IN MODDATP+3 ;TRY ONCE MORE
- XRA A ;CLEAR THE 'A' REG.
- RET
- ;.....
- ;
- ;
- ; The following are used in setting up the 2661-3 I/O port.
- ;
- INITMOD: MVI A,1 ;DEFAULT TRANSFER TIME TO 300 BAUD
- STA MSPEED
- XRA A ;SET RTS, FLAGS, DTR, DISABLE R/T
- OUT MODDATP+3 ;PUT COMMAND REGISTER OUT OF MODE
- IN MODDATP+3 ;MAKE SURE IT IS NOW CLEAR
- IN MODDATP+3 ;TRY ONCE MORE
- MVI A,4EH ;1 STOP, NO PARITY, 8 BITS, 16X ASYNCH
- OUT MODDATP+2 ;SEND TO MODE REGISTER 1
- ;
- INITMOD1: MVI A,0F5H ;START WITH 300 BAUD,
- OUT MODDATP+2 ;SEND TO MODE REGISTER 2
- MVI A,37H ;RESET RTS, FLAGS, DTR LOW, ENABLE R/T
- OUT MODDATP+3 ;SEND TO COMMAND REGISTER
- IN MODDATP+3 ;CLEAR ANY INCOMING CHARS.
- IN MODDATP+3 ;TRY ONCE MORE
- XRA A ;CLEAR THE 'A' REG.
- RET
- ;.....
- ;
- ;
- ; The following changes the baud rate with the SET command.
- ;
- SETUPR: LXI D,BAUDBUF
- CALL JMP$ILPRT
- DB 'Input Baud Rate (110, 300, 1200, 9600): ',0
- CALL JMP$INBUF
- LXI D,BAUDBUF+2
- CALL JMP$INLNCOMP
- DB '110',0
- JNC OK110
- CALL JMP$INLNCOMP ;COMPARE BAUDBUF+2 WITH CHARACTERS BELOW
- DB '300',0
- JNC OK300 ;GO IF GOT MATCH
- CALL JMP$INLNCOMP
- DB '1200',0
- JNC OK1200
- CALL JMP$INLNCOMP
- DB '9600',0
- JNC OK9600
- CALL JMP$ILPRT ;ALL MATCHES FAILED, ASK AGAIN
- DB '++ Incorrect entry ++',CR,LF,BELL,0
- JMP SETUPR ;TRY AGAIN
- ;
- OK110: MVI A,0 ;MSPEED 110 BAUD VALUE
- LHLD BD110 ;GET 110 BAUD PARAMETERS IN 'HL'
- JMP LOADBD ;GO LOAD THEM
- ;
- OK300: MVI A,1
- LHLD BD300
- JMP LOADBD
- ;
- OK1200: MVI A,5
- LHLD BD1200
- JMP LOADBD
- ;
- OK9600: MVI A,8
- LHLD BD9600
- ;
- LOADBD: STA INITMOD+1
- MOV A,L ;get least significant baud rate byte
- STA INITMOD1+1 ;store in INITMOD1
- JMP INITMOD ;reset 2661
- ;.....
- ;
- ;
- ; TABLE OF BAUDRATE PARAMETERS FOR 2661 I/O
- ;
- BD110: DW 00F2H
- BD300: DW 00F5H
- BD1200: DW 00F7H
- BD9600: DW 00FEH
- ;
- BAUDBUF: DB 10,0
- DS 10
- ;
- ;-----------------------------------------------------------------------
- ;
- ; The following routine could be used to display selections of interest
- ; to owners of this computer. If using the Hayes Smartmodem this is
- ; unavailable without a special change.
- ;
- SPCLMENU: RET
- ;
- ;-----------------------------------------------------------------------
- ;
- ;
- ; NOTE: MUST TERMINATE PRIOR TO 0400H (with Smartmodem)
- ; 0C00H (without Smartmodem)
- ;
- END
- ;