home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
BYE5
/
B5AB-3.INS
< prev
next >
Wrap
Text File
|
2000-06-30
|
9KB
|
373 lines
; 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
;-------------------------------------------------------------------