home *** CD-ROM | disk | FTP | other *** search
- ; B5OV-1.INS - Osborne Vixen insert for BYE5 - 07/17/85
- ;
- ; 8251A with BIOS routines setting baud rate
- ;
- ;
- ; This version is for an 8251A I/O with extended BIOS jump for setting
- ; baudrate. Note: This is an insert, not an overlay.
- ;
- ; This version is for the Osborne Vixen which uses an extended BIOS
- ; function call to set the baudrate. The normal serial input interrupt
- ; driver in BIOS is disabled while BYE5 is used.
- ;
- ;
- ;= = = = = = = = = = = = = = = = = =
- ;
- ; 06/15/85 Written for use with BYE5 - Roy Robinson
- ; FOG RCPM #4
- ; (415) 591-6259
- ;= = = = = = = = = = = = = = = = = =
- ;
- ;-----------------------------------------------------------------------
- ; PATCH #1 -------------------------------------------------------------
- ;-----------------------------------------------------------------------
- ;
- ; Listed below is a patch for disabling the serial input interrupt
- ; driver in the Vixen BIS. This patch goes AFTER the label
- ;
- ; START1:
- ;
- ; and immediately AFTER the line of code, CALL MDCARCK
- ;
- ; ----> beginning of patch:
- ;
- ;
- ; JNZ BYPASS
- ;
- ;INITMOD:
- ; PUSH PSW
- ; MVI C,7 ; Use BDOS to obrain current IOBYTE
- ; CALL BDOS ;
- ; STA OLDIOB ; Save old IOBYTE
- ; ANI 3fH ;
- ; ORI 80H ; Make CEN: PORT new LST: DEVICE
- ; MOV E,A
- ; MVI C,8
- ; CALL BDOS ; Use BDOS to place new IOBYTE in first page of memory
- ;
- ; DI ;
- ; LHLD INTVEC ; Get serial port interrupt processor address
- ; SHLD OLDVEC ; Save serial port interrupt processor address
- ; DCX H
- ; DCX H
- ; DCX H ; HL has next interrupt processor address
- ; SHLD INTVEC ; This is now first interrupt processor rather
- ; ; than second
- ;
- ;INITSIO:
- ;
- ; LHLD BIOS ; Find start ofF BIOS
- ; MVI L,3CH ; Displacement of baudrate byte from start of BIOS
- ; MOV A,M
- ; STA OLDBAUD ; Save original baudrate byte
- ;
- ; MVI L,3BH ; Displacement of 8251 mode byte from start of BIOS
- ; MOV A,M ; Old mode byte set by ROM is 2SB, NP, 8DB, X16 clock
- ; STA OLDMODE ; Save original 8251 mode byte
- ;
- ; MOV B,L
- ; MVI A,6EH ; 1 SB, NP, 8 DB, X16 clock modem byte
- ; CALL IORESET ; Use extended BIOS jump to reset 8251
- ;
- ; MVI A,37H ; 8251 command byte RTS/DTR active, TXD and RXD active
- ; OUT 31H ; Send it to 8251 control port
- ;
- ; MVI A,3 ; Select 8155 port C
- ; OUT 21h ;
- ; IN 28h ; Get miscellaneous byte
- ; STA OLDMSC ; Save misdellaneous info byte
- ; ORI 00001111B
- ; ; Disable ring detect interrupt, RXD interrupt, XMIT
- ; ; interrupt, emab;e omterma; clock
- ; MOV E,A
- ; MVI A,3
- ; OUT 21h ; Select 8155 port C
- ; MOV A,E
- ; OUT 28h ; Send new control byte to 8155 port C
- ; EI
- ; POP PSW
- ; ORA A
- ;
- ;BYPASS:
- ;
- ;--> Original code starts again with the following instruction:
- ;
- ; JNZ GOODBY
- ;
- ;
- ;=======================================================================
- ;
- ;-----------------------------------------------------------------------
- ; PATCH #2 -------------------------------------------------------------
- ;-----------------------------------------------------------------------
- ;
- ;
- ; Listed below is a patch for re-enabling the serial input interrupt
- ; driver in the Vixen. Place this patch before the instruction line
- ; "JMP 0000H" in the EXCPM routine.
- ;
- ;--> Patch starts here
- ;
- ;RSTINT:LDA OLDIOB ; Get original IOBYTE
- ; MVI C,8
- ; MOV E,A ; Use BDOS to restore original IOBYTE
- ; CALL BDOS
- ;
- ; DI
- ; XRA A
- ; OUT STPORT ; Disable 8251 DTR/RTS lines
- ; LHLD OLDVEC ; Get original interrupt service address
- ; SHLD INTVEC ; Restore original interrupt service address
- ; MVI A,3 ; Select 8155 port C
- ; OUT 21H
- ; IN 28H ; Get misc. info byte for controlling interrupt lines
- ; ANI 030H ; Zero the least significant four bits, keep the
- ; ; remainining two most significant bits
- ; MOV E,A
- ; LDA OLDMSC ; Get original misc. 8155 control byte
- ; ANI 0FH ; Keep least significant four bits
- ; ORA E ; Combine everything
- ; MOV E,A
- ; MVI A,3
- ; OUT 21H ; Select 8155 port C
- ; MOV A,E
- ; OUT 28H ; Restore original 8155 control byte
- ; EI
- ;
- ; MVI B,3CH
- ; LDA OLDBAUD ; Restore original baudrate byte
- ; CALL IORESET ; Do an 8251 reset
- ;
- ; MVI B,3BH
- ; LDA OLDMODE ; Restore original mode byte
- ; CALL IORESET ; Do an 8251 reset
- ;
- ;--> Original code starts again with the following instruction:
- ;
- ; JMP 0000H
- ;
- ;-----------------------------------------------------------------------
- ;
- ;
- ; E Q U A T E S
- ;
- ;
- INTVEC EQU 0EFFEH ; Address of interrupt vector to first interrupt
- ; Service routine
- BDOS EQU 0005H ; Address of bdos entry point in first page of RAM
- BIOS EQU 0001H ; Address of pointer to CP/M warm boot jump in BIOS
- AJUMP EQU 0C3H ; JUMP instruction opcode
- ;
- ;
- PORT EQU 030H
- DATPORT EQU PORT ; Modem data port
- STPORT EQU PORT+1 ; Modem status port
- ;
- ;
- ;-----------------------------------------------------------------------
- ;
- ; Is there a carrier? If not, return with the zero flag set.
- ;
- MDCARCK:MVI A,17H ; Reset status
- OUT STPORT
- IN STPORT ; Get status
- ANI 80H ; Check for carrier detect
- RET
- ;.....
- ;
- ;
- ; This routine will turn off the serial card and hang up the phone.
- ;
- MDINIT: MVI A,10H ; Clear DTR
- OUT STPORT ; Causing modem to hangup
- PUSH B ; Preserve in case we need it
- MVI B,20 ; 2 seconds to drop DTR
-
- OFFTI: CALL DELAY ; 0.1 second delay
- DCR B
- JNZ OFFTI ; Keep waiting until carrier drops
- POP B ; Restore BC
- MVI A,17H ; Raise DTR so that modem can answer the phone
- OUT STPORT
- ;
- IF IMODEM
- CALL IMINIT ; Initialize smartmodem
- ENDIF ; IMODEM
- ;
- RET
- ;.......
- ;
- ;
- ; Input a character from the modem.
- ;
- MDINP: IN DATPORT ; Get character
- RET
- ;.....
- ;
- ;
- ; Check the status to see if a character is available. Return with zero
- ; flag set, if not. If yes, use 0FFH to clear the flag.
- ;
- MDINST: IN STPORT ; Get status
- ANI 2 ; Got a character?
- RZ ; Return if none
- IN STPORT ; Get status again
- ANI ERR ; Check for framing and overrun
- JZ MDINST1 ; No errors
- MVI A,17H ; Reset error flags
- OUT STPORT
- XRA A ; Return false
- RET
- ;.....
- ;
- ;
- MDINST1:ORI 0FFH ; We have a character
- RET ; And return
- ;.....
- ;
- ;
- ; Send a character to the modem.
- ;
- MDOUTP: OUT DATPORT ; Send it
- RET
- ;.....
- ;
- ;
- ; See if the output is ready for another character.
- ;
- MDOUTST:IN STPORT ; Read port
- ANI 4 ; Mask crap
- RZ
- ORI 0FFH
- RET
- ;.....
- ;
- ;
- ; Re-initialize modem and hang up phone by dropping DTR and leaving
- ; modem inactive
- ;
- MDQUIT: IF IMODEM
- CALL IMQUIT
- ENDIF ; IMODEM
- ;
- ;
- ; Called by main BYE program after caller types BYE
- ;
- MDSTOP: XRA A ; Turn off rts/dtr, rx/tx
- OUT STPORT ; Command byte to 8251 control port
- RET
- ;.....
- ;
- ;
- ; If you do not support a particular baud rate, put it here before
- ; SETINV:
- ;
- SETINV: MVI A,0FFH
- ORI A ; Make sure the Zero flag is not set
- RET
- ;.....
- ;
- ;
- SET300: MVI A,06H ; Store baud rate parameter (300 baud)
- MVI B,3CH
- JMP SETBAUD
- ;
- SET1200:MVI A,08H ; Store baud rate parameter (1200 baud)
- MVI B,3CH
- JMP SETBAUD
- ;
- SET2400:MVI A,0BH ; Store baud rate parameter (2400 baud)
- MVI B,3CH
-
- SETBAUD:CALL IORESET ; Use extended BIOS function to reset baudrate
- XRA A ; Say baudrate change was satisfactory
- RET
- ;.....
- ;
- ;
- IORESET:
- ;
- ; Subroutine which executes a master reset for 8251. 8251 reset is a
- ; BIOS function in VIXEN extended BIOS
- ;
- ; ENTRY:
- ; A = byte value to be replaced in BIOS
- ; (mode byte or baudrate byte)
- ;
- ; B = hex displacement from base of BIOS
- ; for mode byte or baudrate byte
- ; (mode byte = 3BH)
- ; (baudrate byte = 3CH)
- ;
- ; EXIT:
- ; NONE
- ;
- LHLD BIOS ; Find base of BIOS
- MOV L,B
- MOV M,A
- MVI L,36H ; Displacement in BIOS for 8251 reset function
- SHLD EXTFUN
- CALL BIOSFUNC ; Subroutine call of BIOS 8251 reset function
- RET
- ;.....
- ;
- ;
- OLDIOB: DS 1 ; Original IOBYTE
- OLDMSC: DS 1 ; Original misc. control byte for 8155 port C
- OLDVEC: DS 2 ; Original interrupt service vector
- OLDMODE:DB 1 ; Original 8251 mode byte from BIOS
- OLDBAUD:DB 1 ; Original baudrate byte for 8251 from BIOS
- BIOSFUNC: DB AJUMP ; Absolute jump to the following memory address
- EXTFUN: DS 2 ; BIOS extended function address
- ;.....
- ;
- ; end
- ;-----------------------------------------------------------------------