; TITLE ZMAC-1.Z80 - 01/01/88 - ZMD I/O Overlay for APPLE-CAT ; Copyrighted (c) 1987, 1988 ; Robert W. Kramer III PAGE ;- -; ; Update History ; ; ; ; Date Release Comments ; ; -------- ------- ---------------------------------------------- ; ; ; ; 01/01/88 v1.00 - Initial version ; ;- -; ; SLOT EQU 2 ; For Apple-Cat modem SLOTVAL EQU SLOT*16 ; Allows relocating modem slot MODCTLP EQU 0E080H+SLOTVAL ; Apple-Cat carrier detect MODDATP EQU MODCTLP+0BH ; Data in port MODDATO EQU MODCTLP+0EH ; Data out port MODCTL2 EQU MODCTLP+0FH ; Second control/status port MODSNDB EQU 10H ; Bit to test for send MODSNDR EQU 10H ; Value when ready MODRCVB EQU 08H ; Bit to test for receive MODRCVR EQU 08H ; Value when ready MODDCDB EQU 20H ; Carrier detect bit MODDCDA EQU 20H ; Value when active MODPARE EQU 20H ; Value for parity error MODOVRE EQU 80H ; Value for overrun error MODFRME EQU 40H ; Value for framing error CATCLR EQU MODCTLP+0DH ; This is the cat xmtbyte CATVAL EQU 10H ; Sets cat to 103 answer mode and resets ; ;-------------------------------------------------------------------------; ; Input/Output Jump Table | ;-------------------------------------------------------------------------; ; ORG 0580H ; Start after configuration table JP 0000H ; See CONOUT.INF JP INIT ; Initialization routine JP UNINIT ; Unititialize routine JP SNDCHR ; Send character JP CARCHK ; Test for carrier JP GETCHR ; Get character from modem JP RCVRDY ; Check receive ready JP SNDRDY ; Check send ready ; ;-------------------------------------------------------------------------; ; System startup inititialization routine | ;-------------------------------------------------------------------------; INIT: RET ; ;-------------------------------------------------------------------------; ; System exit unititialization routine | ;-------------------------------------------------------------------------; UNINIT: RET ; ;-------------------------------------------------------------------------; ; Send character out modem | ;-------------------------------------------------------------------------; SNDCHR: POP AF ; Get the character back LD (MODDATO),A ; Send it to the modem output RET ; ;-------------------------------------------------------------------------; ; Check for carrier | ;-------------------------------------------------------------------------; CARCHK: LD A,(MODCTLP) ; Check for carrier AND MODDCDB ; Get carrier detect bit CP MODDCDA ; Test bit RET ; ;-------------------------------------------------------------------------; ; Get character from modem | ;-------------------------------------------------------------------------; GETCHR: LD A,CATVAL LD (CATCLR),A LD A,(MODDATP) ; Get the character, if any RET ; ;-------------------------------------------------------------------------; ; Check modem receive ready | ;-------------------------------------------------------------------------; RCVRDY: LD A,(MODCTL2) ; Get modem status PUSH BC ; Save scratch register PUSH AF ; Check error status AND MODFRME+MODOVRE+MODPARE LD B,A ; Save it for a moment POP AF AND MODRCVB ; Isolate ready bit CP MODRCVR ; Test it LD A,B ; Get the error code char. back POP BC RET ; ;-------------------------------------------------------------------------; ; Check modem send ready | ;-------------------------------------------------------------------------; SNDRDY: LD A,(MODCTL2) ; Get status byte AND MODSNDB ; Isolate ready bit CP MODSNDR ; Ready to send? RET END