; PCPIPM11.Z80 ; ; Driver for Poor Man's Network and PCPI Applicard w/SuperSerial Card ; ; POOR MAN'S NETWORK available from: ; Anderson Techno-Products ; 613-722-0690 ; ; PMN is a 2-computer CP/M networking system. It allows the sharing ; of any device DSK:, LST: PUN: etc with connection via the serial port. ; ; Revision History: ;------+---------+----------+--------------------------------------------- ; Rev. | Date | Author | Description ;------+---------+----------+--------------------------------------------- ; 1.1 |08 May 87| Al | - made ZAS assembler compatible ; | |Heynneman | - setup for SOROC terminal codes ; | | | - default 9600 baud, cause Super Serial ; | | | won't run consistently at 19200 ;------+---------+----------+--------------------------------------------- ; 1.0 |13 Apr 87| Jim Lill | - created original adapting SSERIAL.ASM ; | | | and using code from MXH-AP53.ASM ;------+---------+----------+--------------------------------------------- TRUE EQU 0FFH FALSE EQU 0 CR EQU 13 ;............................... ; ; Apple Super Serial Card equates ; ------------------------------- ; SSCSLOT EQU 2 ;Slot of Super Serial Card MODDATP EQU 0C088H + [SSCSLOT*10H] ;data port of ACIA MODSTAP EQU 0C089H + [SSCSLOT*10H] ;status port of ACIA MODCTLP EQU 0C08BH + [SSCSLOT*10H] ;control port of ACIA MODCMDP EQU 0C08AH + [SSCSLOT*10H] ;command port of ACIA ; ; 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) ; PEEK1BYTE EQU 6 ;Command to Peek 1 Byte in the Apple POKE1BYTE EQU 7 ;Command to Poke 1 Byte to the Apple ; Status bit equates for SSC serial port ; MDSNDB EQU 10H MDSNDR EQU 10H MDRCVB EQU 08H MDRCVR EQU 08H ;--------------------------------------------------------------------- ; PMN Eqautes NETBIOS EQU 2000H OFFSET EQU 0F00H ; ORG 107H ; MODEM COMMANDS (not used in this version) ; MATTNCDS DB 'A','T',0,0,0,0,0,0,0,0 ;ATTENTION MINTRCDS DB '+','+','+',0,0,0,0,0,0,0 ;INTERRUPT MDIALCDS DB 'D',0,0,0,0,0,0,0,0,0 ;DIAL A NO MHANGCDS DB 'H','0',0,0,0,0,0,0,0,0 ;HANG UP LINE MINITCDS DB 'E0',CR ;HAYES INITIALIZATION DB 'F1',CR ;(40 BYTES TOTAL) DB 'Q0',CR DB 'V1',CR DB 'X1',CR DB 'S0=0',CR DB 'S7=15',CR DB 0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0 ; ; BAUD RATE TABLE for Apple Super Serial Card ; BAUDCODE: DW 06H ;300 DW 07H ;600 DW 08H ;1200 DW 09H ;1800 DW 0AH ;2400 DW 0BH ;3600 DW 0CH ;4800 DW 0DH ;7200 DW 0EH ;9600 DW 0FH ;19200 DW 0 ;38400 ; ERRMRK: DB '^' ;PARAMETER ERROR MARKER COMP: DB 'Apple ][/Applicard/SuperSerial',CR ; .........1.........2.........3 30 BYTES ORG NETBIOS+31BH ; SCRSIZ: DB 24 ;LINES ON SCREEN SCRWID: DB 80 ;WIDTH OF SCREEN ; CLRLIN: DB 2,27,'T',0,0,0,0,0,0,0 ;CLEAR TO EOL DIRCUR: DB 2,27,'=',0,0,0,0,0,0,0 ;DIRECT CURSOR ADDR MIDCUR: DB 0,0,0,0,0,0,0,0,0,0 ;MIDDLE STRING ENDCUR: DB 0,0,0,0,0,0,0,0,0,0 ;ENDING STRING VOFF: DB 32 ;CURSOR ADDR OFFSET CURSTY: DB 0 ;0=Y,X; 1=X,Y ASCCUR: DB 0 ;ASCII CURSOR ADDR VDELAY: DB 0 ;CURS ADDR DELAY REVVID: DB 0,0,0,0,0,0,0,0,0,0 ;REVERSE VIDEO NORVID: DB 0,0,0,0,0,0,0,0,0,0 ;NORMAL VIDEO SAVECP: DB 0,0,0,0,0,0,0,0,0,0 ;SAVE CURSR POSN RSTRCP: DB 0,0,0,0,0,0,0,0,0,0 ;RESTORE CURSR POSN MSGL: DB 0 ;WHERE TO PUT MESSAGE ; ORG NETBIOS+61CH SYSID: DB 8 ;THIS SYSTEM ID, FOR 8MHZ APPLE ;SYSID: DB 6 ;THIS SYSTEM ID, FOR 6MHZ APPLE FCLK: DB TRUE ;4MHZ OR BETTER MSGKEY: DB 1CH,0,0,0 ;MSG KEY SEQUENCE RELOC: DW 0 ;WHERE TO PUT NETBIOS DS 8 ;reserved ; ; USART CONTROL BYTES ; USART1: DB 0 ;GET USART'S ATTN USART2: DB 0 ;SOFTWARE RESET FINBIT: DB 0 ;ENABLE XMIT FIXED: DB 0 ;USART CONSTANT BITS PARITY: DB 0BH ;NO PARITY WORD: DB 010H ;8 Bits, 1 Stop DB 0 ; BAUD: DW 0EH ;DEFAULT BAUD RATE (9600) ; ORG NETBIOS+OFFSET DRIVER: ;FOR APPLE SUPER SERIAL CARD w/Applicard ANYEXT: JP DR$ANYEXT ;is a byte at port INEXT: JP DR$INEXT ;read the data port EXTRDY: JP DR$EXTRDY ;check if ready to xmit OUTEXT: JP DR$OUTEXT ;write to the data port RESET JP SETSSC ;init the port ACTIV: RET NOP NOP PBUSY: RET NOP NOP ; E N D of Fixed Format Area ! ;=================================================================== ; ; CHECK IF BYTE AT MODEM ; Z set if byte available. ; May use registers A, B, C. ; DR$ANYEXT: CALL RD$MODSTAP ;returns with status in Accum. XOR MDRCVR AND MDRCVR RET ;............................... ; ; CHECK IF MODEM PORT READY TO XMIT ; Z set if so. ; May use registers A, B, C. ; DR$EXTRDY: CALL RD$MODSTAP ;returns with status in Accum. XOR MDSNDR AND MDSNDR RET ;............................... ; ; set baud, parity, and stop bit parameters of acia. ; setssc: ld a,(parity) ;get current parity byte or 0bh ;enable dtr, recv irq, and rts call wr$modcmdp ;send to command port push hl ld hl,baud ;get address of current baud byte ld a,(word) ;get current word length byte or (hl) ;put 'em together pop hl call wr$modctlp ;now send to control port ret ;............................... ; ; Write to the Command Port of ACIA ; WR$MODCMDP: PUSH DE LD DE,MODCMDP JP POKE ; ; Write to the Control Port of the ACIA ; WR$MODCTLP: PUSH DE LD DE,MODCTLP JP POKE ; Read the Status Port of the ACIA ; RD$MODSTAP: PUSH DE LD DE,MODSTAP JP PEEK ; ; Read Data Port of ACIA ; DR$INEXT: PUSH DE LD DE,MODDATP JP PEEK ; ; Write to the Serial Data Port of the ACIA ; DR$OUTEXT: PUSH DE LD DE,MODDATP JP POKE ;................................ ; ; Peek at 1 byte from Apple 6502 address space ; ENTRY: DE = Address in Apple ; EXIT: A = Data ; PEEK: PUSH BC LD C,PEEK1BYTE CALL WRBYTE CALL WRWORD CALL RDBYTE POP BC POP DE RET ;.............................. ; ; Poke 1 byte to Apple 6502 address space ; ENTRY: DE = Address in Apple ; EXIT: A = Data POKE: PUSH BC LD B,A LD C,POKE1BYTE CALL WRBYTE CALL WRWORD LD C,B CALL WRBYTE POP BC POP DE RET ;................................ ; END ;PCPISSPM.Z80