; TITLE ZMAA-1.Z80 - 01/01/88 - ZMD I/O Overlay for APPLE SSC/CCS 7711 ; Copyrighted (c) 1987, 1988 ; Robert W. Kramer III PAGE ;- -; ; Update History ; ; ; ; Date Release Comments ; ; -------- ------- ---------------------------------------------- ; ; ; ; 01/01/88 v1.00 - AppliCard- Initial version ; ;- -; ; SLOT EQU 2 ; For SSC/CCS SLOTVAL EQU (SLOT*16) ; Allows relocating modem slot MODDATP EQU 0C088H+SLOTVAL ; Data IN port STATUS EQU 0C089H+SLOTVAL ; 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 40H ; Carrier detect bit (SSC DSR) MODDCDA EQU 00H ; Value when active RDBYTE 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) PEEKBYT EQU 6 ; Command to PEEK 1 byte in the Apple POKEBYT EQU 7 ; Command to POKE 1 byte in the Apple ; ;-------------------------------------------------------------------------; ; 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 PUSH DE LD DE,MODDATP CALL POKE ; Send it to the modem output POP DE RET ; ;-------------------------------------------------------------------------; ; Check for carrier | ;-------------------------------------------------------------------------; CARCHK: PUSH DE LD DE,STATUS CALL PEEK POP DE AND MODDCDB ; Get carrier detect bit CP MODDCDA ; Test bit RET ; ;-------------------------------------------------------------------------; ; Get character from modem | ;-------------------------------------------------------------------------; GETCHR: PUSH DE LD DE,MODDATP CALL PEEK ; Get the character, if any POP DE RET ; ;-------------------------------------------------------------------------; ; Check modem receive ready | ;-------------------------------------------------------------------------; RCVRDY: PUSH DE LD DE,STATUS CALL PEEK POP DE AND MODRCVB ; Isolate ready bit CP MODRCVR ; Test it RET ; ;-------------------------------------------------------------------------; ; Check modem send ready | ;-------------------------------------------------------------------------; SNDRDY: PUSH DE LD DE,STATUS CALL PEEK POP DE AND MODSNDB ; Isolate ready bit CP MODSNDR ; Ready to send? RET ; ; PEEK at 1 byte in the Apple ; ENTRY: DE = address. EXIT: A = data. PEEK: PUSH BC LD C,PEEKBYT CALL WRBYTE CALL WRWORD CALL RDBYTE POP BC RET ; ; POKE 1 byte into the Apple ; ENTRY: DE = address. EXIT: A = data POKE: PUSH BC LD B,A LD C,POKEBYT CALL WRBYTE CALL WRWORD LD C,B CALL WRBYTE POP BC RET END