home *** CD-ROM | disk | FTP | other *** search
- ; B5A7-1.INS for the Apple ][ and CCS 7710 interface for BYE5 - 02/02/87
- ;
- ; 6850 ACIA, no internal baudrate generator
- ;
- ;
- ; This version is for Apple ][ computers, using the Microsoft CP/M card
- ; and the CCS 7710 serial interface card.
- ;
- ; The 6850 has no baudrate generator. It relies on the user
- ; setting a dip switch to the maximum speed he wants to use.
- ; The program then uses the 6850 in the "divide by 16" mode
- ; to get that speed. It can then change to "divide by 64"
- ; to get the only other speed available. This type system
- ; normally limits the user to 1200 and 300 baud. If you
- ; set the dip switches for 2400, then you could only get
- ; 2400 and 600, eliminating both 1200 and 300 baud. Using
- ; either the Apricorn or CCS 7710 board just about precludes
- ; the user from wanting to obtain a new modem with 2400 bps.
- ; The 6850 uses the last two bits to select the divisor. 01
- ; gives "divide by 16" and 10 gives "divide by 64".
- ;
- ;-----------------------------------------------------------------------
- ;
- ; The CCS 7710 serial card is set up as DCE rather than the more usual
- ; DTE, and requires a special cable.....the following cable configura-
- ; ion is necessary to work with this overlay -----
- ;
- ; MODEM pin CCS pin
- ;
- ; 2 3
- ; 3 2
- ; 5 4
- ; 8 20
- ; 7 7
- ; 20 5
- ;
- ; = = = = = = = = = = = = = = = = = =
- ;
- ;-----------------------------------------------------------------------
- ;
- ; For the Apple //e, a user entered CTL-Q can trash the local display by
- ; reverting back to 40 column mode. This is a patch to turn CTL-Q into
- ; a backspace.
- ;
- ; In BYE5 find the label MINP2A: Just prior to MINP2A should be the
- ; lines:
- ; JNZ MINP2A
- ; MVI A,08H
- ;
- ;
- ; Add the following code just before JNZ MINP2A
- ;
- ; JZ CHNGIT
- ; CPI 'Q'-'@'
- ; JNZ MINP2A
- ; CHNGIT: MVI A,08H << note the added label
- ;
- ;
- ; When using a Softcard CP/M system and the CCS 7710, a warmboot causes
- ; the serial baud rate port to reset to its default setting. (Whatever
- ; the switches are set to on the card.) The problem is fixed by zeroing
- ; out the CALL in the warmboot routine that resets the baud rate.
- ;
- ; Find the following code in BYE5:
- ;
- ; JMP VWARMBT
- ;
- ; Just before this instruction, add the following code:
- ;
- ; PUSH PSW ;Save AF
- ; XRA A ;Make it zero
- ; STA 0DAD8H ;Patch out the opcode
- ; STA 0DAD9H ;Patch out the operand byte 1
- ; STA 0DADAH ;Patch out the operand byte 2
- ; POP PSW ;Make it like it was
- ; Here's the end -->
- ; For reference --> JMP VWARMBT
- ;
- ;
- ; NOTE: This change may work only with the 60k version version of the
- ; MicroSoft CP/M, their v2.2.3.
- ;
- ;
- ;= = = = = = = = = = = = = = = = = = = = = = =
- ;
- ; 02/02/87 Adapted for the CCS 7710 serial interface card - Irv Hoff
- ;
- ;= = = = = = = = = = = = = = = = = = = = = = =
- ;
- ; Equates for Microsoft Softcard CP/M and Super Serial Card
- ;
- SLOT EQU 2 ; Slot of serial interface
- SLOTOFF EQU 16*SLOT ; Serial card slot offset
- MAPOFF EQU 2000H ; Microsoft offset
- ;
- PORT EQU 0C081H+SLOTOFF+MAPOFF ; Data port
- MDCTL1 EQU PORT-1 ; Control port
- MDRCV EQU 1 ; Bit to test for receive
- MDSND EQU 2 ; Bit to test for send
- ;......
- ;
- ;
- ;-----------------------------------------------------------------------
- ;
- ; Routine to check carrier. If no carrier, return with zero flag set.
- ;
- MDCARCK:LDA MDCTL1 ; Get status byte
- ANI 4 ; Check for DCD
- XRI 4 ; Reverse the zero flag (the 6850
- RET ; has status 0 for DCD true)
- ;.....
- ;
- ;
- ; This routine will turn off the serial card and hang up the phone.
- ;
- MDINIT: MVI A,0D5H ; Turn off DTR
- STA MDCTL1
- PUSH B ; Save register
- MVI B,20 ; Delay 2 sec to drop carrier
- ;
- OFFTI: CALL DELAY ; 1 sec per loop
- DCR B
- JNZ OFFTI ; Keep going until finished
- POP B ; Restore register
- MVI A,0B5H ; Turn everything back on, 8 bits, 1 stop
- ;
- IF IMODEM
- CALL IMINIT
- ENDIF
- ;
- 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: LDA MDCTL1 ; Get modem status
- ANI 1 ; Is data available?
- RZ ; If no, return
- ORI 0FFH ; Otherwise return true
- RET
- ;.....
- ;
- ;
- ; See if the output is ready for another character.
- ;
- MDOUTST:LDA MDCTL1 ; Get modem status
- ANI 2 ; Mask out junk
- RZ
- ORI 0FFH
- RET
- ;.....
- ;
- ;
- ; Input a character from the modem port.
- ;
- MDINP: LDA PORT ; Get character
- RET
- ;.....
- ;
- ;
- ; This routine will output a character to the data port.
- ;
- MDOUTP: STA PORT ; Send character
- RET
- ;.....
- ;
- ;
- ; Reinitialize the modem and hang up the phone by dropping DTR and
- ; leaving it inactive.
- ;
- MDQUIT: IF IMODEM ; If using a smartmodem
- CALL IMQUIT ; Tell it to shut down
- ENDIF ; IMODEM
- ;
- ;
- ; Called by the main program after caller types BYE
- ;
- MDSTOP: MVI A,0D5H ; Drop DTR, set to 1200 speed
- STA MDCTL1
- RET
- ;.....
- ;
- ;
- ; If you do not support a particular baud rate, put it here before
- ; SETINV:
- ;
- SET2400:
- SET4800:
- SET9600:
- SETINV: ORI 0FFH
- RET
- ;.....
- ;
- ;
- SET300: MVI A,16H
- JMP SETBAUD
- ;
- SET1200:MVI A,15H
- ;
- SETBAUD:STA MDCTL1
- XRA A ; Shows the baud rate was changed ok
- RET
- ;.....
- ;
- ; end
- ;---------------------------------------------------------------------