; B5AB-3.INS Apple ][+ or//e, ALS CP/M Card, Apple Super Serial Card ; 02-Nov-86 BYE5 insert ; ; 6551 Asynchronous Communications Interface Adapter (ACIA) ; with internal baudrate generator ; ; ; This version is for Apple ][+ or //e computers using the Advanced Logic ; Systems (ALS) CP/M Card and Apple Super Serial Card. The ALS CP/M ; Card runs CP/M Plus. ; ; ; Note: This is an insert, not an overlay. ; ;------------------------------------------------------------------ ; B5AB-3.INS Created insert. Tested with BYE510. ; 02-Nov-86 ; ; - Jerry Levy ; 1129 Dundee Dr. ; Dresher, PA 19025 ; (215) 657-0898 ; (voice - evenings) ; ;------------------------------------------------------------------- ; ; CONNECTING MODEM TO SSC: ; ; 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 ; 8-->20 DCD-->DTR (SSC side only) ; ; This cable configuration uses DSR signal at the SSC to check carrier. ; Also, Serial card DCD wired to DTR so that modem result codes are ; received when carrier is off. ; ; ; Set SSC switches (SW1 switches 1,2,3,4 below are set for 1200 baud): ; SW1: ON - 2,3,4,5,6,7 OFF - 1 ; SW2: ON - 1,2,4 OFF - 3,5,6,7 ; ; Set modem switches as defined in B5IM-1.DOC. ; Hayes 1200 switches: ; UP - 1,2,4,6,7 ; DOWN - 3,5,8 ; ; THESE CABLING AND SWITCH SETTINGS WORK PROPERLY WITH BYE5 AND ARE ; COMPATIBLE WITH IMP WITHOUT ANY CHANGES. ANY OTHER CONFIGURATIONS ; 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 display ; by reverting back to 40-column mode. In later versions of BYE5 just ; set one of the FILTx noise filters to trap Control-Q. ; ;------------------------------------------------------------------------ ; ; If not using a bulletin board program, add the following conditional ; to the list of them appearing after EXITFCB: ; ; IF EXFILE AND NOT (MBBS OR QBBS OR OXGATE OR METAL OR PBBS) ; DB 0,'BYE COM' ; DB 0,0,0,0,0,0,0 ; DB 0,0,0,0,0,0,0 ; DB 0,0,0,0,0,0,0 ; ENDIF ; ; Necessary with BYE510, probably with BYE 509, also. Check that the ; RBBS conditionals inside the NOT () are all valid RBBS options in the ; RBBS option section of the BYE509-or-later version you are using. Also ; check that all valid RBBS options do appear inside the (). Later BYE ; versions may include this, so check the EXITFCB label first. ;------------------------------------------------------------------------ ; SLOT EQU 2 ; Slot 2 is normal OFFS EQU 16*SLOT ; This is the slot offset ;...... ; ; Modem port addresses. Apple addresses for direct access of ; SSC 6551 ACIA registers ; PORT EQU 0C088H+OFFS ; SSC ACIA Data port STPORT EQU PORT+1 ; Status port (read) or reset port (write) CPORT EQU PORT+2 ; SSC ACIA Command port BRPORT EQU PORT+3 ; SSC ACIA Control/Baudrate port ; ;====================================================================== ; ; Initialize bios addresses for use by PEEK and POKE routines. ; ; The APRD and APWRT stuff is specific to the Apple ][ or //e with ALS ; CP/M Card. ; ; ALSINIT: PUSH PSW ! PUSH B ! PUSH D ! PUSH H LHLD 0001H ; Point to WBOOT jump in bios jmp table LXI D,3*20H ; Offset to APPLE READ bios jump DAD D ; Add them SHLD APRD+1 ! SHLD APR+1 ; Store locally INX H ! INX H ! INX H ; Bump hl to point to APPLE WRITE jump SHLD APWRT+1 ! SHLD APWR+1 ; Store locally POP H ! POP D ! POP B ! POP PSW RET ;..... ; ; The following two routines are specific to the Apple ][ or //e with ALS ; CP/M Card. The routines respectively read from and write to modem hardware ; (Apple Super Serial Card ACIA registers) directly. ; ;..... ; ; ; Peek at 1 byte from Apple 6502 address space ; ; ENTRY: HL = Address in Apple ; EXIT: A = Data ; PEEK: PUSH D ; Preserve, then restore regs PUSH B APRD: CALL ALS1 ; ALS1 overwrites its address here with that POP B ; of APPLE READ bios routine POP D RET ;..... ; ; ; Poke 1 byte to Apple 6502 address space ; ; ENTRY: HL = Address in Apple ; EXIT: A = Data ; POKE: PUSH D PUSH B APWRT: CALL ALS2 ; ALS2 overwrites its address here with that POP B ; of APPLE WRITE bios routine POP D RET ;..... ; ; ; Either ALS1 or ALS2 -- only one of them -- gets called once to initialize ; local addresses for direct bios calls to Apple Read and Apple Write routines. ; ALS1: CALL ALSINIT APR: CALL 0000 ; Filled in by ALSINIT so we do the Apple Read that RET ; this particular call to PEEK was supposed to do ALS2: CALL ALSINIT APWR: CALL 0000 ; Filled in by ALSINIT so we do the Apple Write RET ; this call to POKE was supposed to do ;..... ; ; ; Read the baud rate port of the ACIA ; RD$BRPORT: PUSH H LXI H,BRPORT CALL PEEK POP H RET ;..... ; ; ; Read the command port of ACIA ; RD$CPORT: PUSH H LXI H,CPORT CALL PEEK POP H RET ;..... ; ; ; Read data port of ACIA ; RD$PORT: PUSH H LXI H,PORT CALL PEEK POP H RET ;..... ; ; ; Read the status port of the ACIA ; RD$STPORT: PUSH H LXI H,STPORT CALL PEEK POP H RET ;..... ; ; ; Write to the baud rate port of the ACIA ; WR$BRPORT: PUSH H LXI H,BRPORT CALL POKE POP H RET ;..... ; ; ; Write to the command port of ACIA ; WR$CPORT: PUSH H LXI H,CPORT CALL POKE POP H RET ;..... ; ; ; Write to the serial data port of the ACIA ; WR$PORT: PUSH H LXI H,PORT CALL POKE POP H 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 and set parity CALL WR$CPORT MVI A,18H ; Set 1200, 8 bits, 1 stop CALL WR$BRPORT ; IF IMODEM CALL IMINIT ENDIF ; IMODEM ; RET ;...... ; ; ; Super Serial Card status checks. NOT READY indication if bit 3 of STPORT ; byte equals zero (for receive-readiness check), or bit 4 equals ; zero (for transmit-readiness check). ;...... ; ; Check the status to see if a character is waiting to be received. ; Return with zero flag set, if not. If yes, clear flag and return with ; 0FFH in A. ; MDINST: CALL RD$STPORT ; Get modem status ANI 08H ; Is data available? RZ ; "no" returns zero as bit 3 (zero flag set) ORI 0FFH ; Otherwise return true with 0FFH in A RET ;..... ; ; ; Check if transmit register is empty. If empty, ready to transmit another ; character and returns with zero flag clear. If busy, returns with zero ; flag set. ; MDOUTST: CALL RD$STPORT ; Get modem status ANI 10H ; Ready to transmit? RET ; "no" returns zero as bit 4 (zero flag set) ;....... ; ; ; Input a character from the modem port. ; MDINP: JMP RD$PORT ; Get character ;...... ; ; ; Output one character in register A. Remember, that is register A, not C. ; MDOUTP: JMP WR$PORT ; Send character ;....... ; ; ; Reinitialize the modem and hang up the phone by dropping DTR and ; leaving it inactive. ; MDQUIT: IF IMODEM ; If using a smart modem CALL IMQUIT ; Tell it to shut down ENDIF ; IMODEM ; ; Fall into MDSTOP ; ; ; Called by the main program after caller types BYE ; MDSTOP: MVI A,4AH ; Drop DTA JMP WR$CPORT ;..... ; ; ; If you do not support a particular baud rate, put it here ; before SETINV: ; ; SET2400: MVI A,1AH JMP WR$BRPORT ;..... ; ; SET4800: MVI A,1CH JMP WR$BRPORT ;..... ; ; SET9600: MVI A,1EH JMP WR$BRPORT ;..... ; ; SETINV: ORI 0FFH RET ;..... ; ; SET300: MVI A,16H JMP WR$BRPORT ; Go change the baud rate ;..... ; ; SET1200: MVI A,18H JMP WR$BRPORT ;..... ; ; end of insert ;-------------------------------------------------------------------