; B5AA-3.INS for the Apple PCPI & Super Serial Card for BYE5 - 9/20/85 ; ; 6551 I/O with internal baudrate generator ; ; ; This version is for Apple ][ computers, using the PCPI Applicard ; CPM card, and the Apple Super Serial Card. ; ; ; Note: This is an insert, not an overlay. ; ; ; MODEM=DCE Super Serial Card ; ; TXD 2 --------> 2 RXD received data ; RXD 3 <-------- 3 TXD tranmitted data ; SG 7 --------- 7 SG signal ground ; DCD 8 --------> 6 DSR data set ready (carrier) ; DTR 20 <------- 20 DTR data terminal ready ; ; ; This cable configuration uses DSR signal at the SSC to check carrier ; and Serial card DCD wired to DTR (Jumper pin 20-8) so that modem ; result codes are received when carrier is off. ; ; Set modem switches as defined in B5IM-1.DQC. ; ; THIS WORKS PROPERLY WITH BYE5 AND IS COMPATABLE WITH IMP WITHOUT ANY ; CHANGES, ANY OTHER CONFIGURATION MIGHT REQUIRE RESETTING SOME MODEM ; SWITCHES WHEN GOING FROM BYE5 TO IMP, MDM7, MEX, ETC. ; ;----------------------------------------------------------------------- ; ; For the Apple //e, a user entered Control Q can trash the local dis- ; play by reverting back to 40 column mode. This is a patch to turn ; that Control Q into a back space. ; ; 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 ; ; ; NOTE: In later versions of BYE5 just set one of the FILTx noise ; filters to trap Control Q. ; ;= = = = = = = = = = = = = = = = = = = = = = = ; ; 08/25/86 Fixed bug that prevented BYE5 from dropping DTR to hang up. ; -Joe England ; ; 12/01/85 Changed RDBYTE label to RDBYT to avoid conflict with RDBYTE ; label in BYE502. -Jerry Levy ; ; 09/20/85 Created overlay for BYE5. -Norman Beeler ; ;= = = = = = = = = = = = = = = = = = = = = = = ; SLOT EQU 2 ; Slot 2 is normal OFFS EQU 16*SLOT ; This is the slot offset ; PORT EQU 0C088H+OFFS ; Dataport STPORT EQU PORT+1 ; Status port CPORT EQU PORT+2 ; Command port BRPORT EQU PORT+3 ; Baud rate port ;...... ; ; ; PCPI CP/M card I/O equates ; RDBYT EQU 0FFE0H ; Read a Byte from Apple (A = BYTE) WRBYTE EQU 0FFE3H ; Write a Byte to Apple (C = BYTE) RDWORD EQU 0FFE6H ; Read 2 Bytes from Apple (DE = BYTES) WRWORD EQU 0FFE9H ; Write 2 Bytes to Apple (DE = BYTES) RDNBYTS EQU 0FFECH ; Read N Bytes (DE = COUNT, HL = BUFFER) WRNBYTS EQU 0FFEFH ; Write N Bytes (DE = COUNT, HL = BUFFER) ; PEEK1BYTE EQU 6 ; Command to Peek 1 Byte in the Apple POKE1BYTE EQU 7 ; Command to Poke 1 Byte to the Apple ; ;====================================================================== ; ; These routines are specific to the Apple ][+ with Applicard. The ; routines read modem hardware (Apple Super Serial Card ACIA) directly ; from the Applicard. ; ; Peek at 1 byte from Apple 6502 address space ; ; ENTRY: DE = Address in Apple ; EXIT: A = Data ; PEEK: PUSH B MVI C,PEEK1BYTE CALL WRBYTE CALL WRWORD CALL RDBYT POP B RET ;..... ; ; ; Poke 1 byte to Apple 6502 address space ; ; ENTRY: DE = Address in Apple ; EXIT: A = Data ; POKE: PUSH B MOV B,A MVI C,POKE1BYTE CALL WRBYTE CALL WRWORD MOV C,B CALL WRBYTE POP B RET ;..... ; ; ; Read the baud rate port of the ACIA ; RD$BRPORT: PUSH D LXI D,BRPORT CALL PEEK POP D RET ;..... ; ; ; Read the command port of ACIA ; RD$CPORT: PUSH D LXI D,CPORT CALL PEEK POP D RET ;..... ; ; ; Read data port of ACIA ; RD$PORT:PUSH D LXI D,PORT CALL PEEK POP D RET ;..... ; ; ; Read the status port of the ACIA ; RD$STPORT: PUSH D LXI D,STPORT CALL PEEK POP D RET ;..... ; ; ; Write to the baud rate port of the ACIA ; WR$BRPORT: PUSH D LXI D,BRPORT CALL POKE POP D RET ;..... ; ; ; Write to the command port of ACIA ; WR$CPORT: PUSH D LXI D,CPORT CALL POKE POP D RET ;..... ; ; ; Write to the serial data port of the ACIA ; WR$PORT:PUSH D LXI D,PORT CALL POKE POP D RET ;..... ; ; ;---------------------------------------------------------------------- ; ; ; Check for a carrier, if none return with the zero flag set. ; MDCARCK:CALL RD$STPORT ; Get status ANI 40H ; Check DSR pin for DCD (see above) XRI 40H ; Reverse the zero flag (the 6551 RET ; Has status 0 for DCD/DSR true) ;...... ; ; ; This routine will turn off the serial card and hang up the phone. ; MDINIT: MVI A,4AH ; Turn off DTR CALL WR$CPORT 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,4BH ; Raise DTR CALL WR$CPORT MVI A,18H ; Set 1200,8 bits, 1 stop CALL WR$BRPORT ; IF IMODEM CALL IMINIT ENDIF ; RET ;....... ; ; ; Input a character from the modem port. ; MDINP: CALL RD$PORT ; 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: CALL RD$STPORT ; Get modem status ANI 8 ; Is data available? RZ ; If no, return ORI 0FFH ; Otherwise return true RET ;...... ; ; ; This routine will output a character to the data port. ; MDOUTP: CALL WR$PORT ; Send character RET ;..... ; ; ; See if the output is ready for another character. ; MDOUTST:CALL RD$STPORT ; Get modem status ANI 10H ; Mask out junk 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,4AH ; Drop DTR JMP WR$CPORT ;..... ; ; ; If you do not support a particular baud rate, put it here ; before SETINV: ; SETINV: ORI 0FFH RET ;..... ; ; SET300: MVI A,16H JMP WR$BRPORT ; Go change the baud rate ;..... ; ; SET1200:MVI A,18H JMP WR$BRPORT ;..... ; ; SET2400:MVI A,1AH JMP WR$BRPORT ;..... ; ; SET4800:MVI A,1CH JMP WR$BRPORT ;..... ; ; SET9600:MVI A,1EH JMP WR$BRPORT ;..... ; ; end ;---------------------------------------------------------------------