; KERMIT COMM DRIVER FOR ; ACE DUAL INTERFACE ; ; ANDY TEFFT, 8/22/90 ; ; $Header: $ .SBTTL Define start address for assembly .=$1003 ; Start assembly here .SBTTL Revision History ; ; Edit # Description ; ------ ----------- ; ; DONT FORGET TO UPDATE THE VERSION ;$Log: $ ; ; ; Vector for com cards starts here ; location $1003 for data ; location $1020 for routine jumps ; location $1040 for main routines ; baud ; sscdbd: .blkb 1 ;contains baud index(ala super serial card) used by init ; 6 - 300 baud ; 7 - 600 ; etc .blkb 1 ; crdnam: .word NAME ; null terminated string of who we are SLOT: .blkb 1 ; com slot $n0 kerins: .blkb 1 ; force initialization flag-when 0 endker: .blkb 2 ; address of end of main kermit flowfg: .blkb 1 ; flow flag for xon/xoff controll b7=1 yes tl0end .word END ; end of this routine timect .blkb 1 ; time constant for rom wait rtn .=sscdbd+29 ; future expansion tlinit: jmp INIT ; initialize com card tl0cmd: jmp CMD ; command in A reg ; ; 0 - hang up ; $0b - set baud ; $0c - set break on the line ; $91 - turn remote on (xon) ; $93 - turn remote off(xoff) ; ; routine will return false(0) if unable tl0cp: jmp CHKINP ; check for input ch ready-0 false tl0gpc: jmp GETINP ; get input ch tl0ppc: jmp PUTCHR ; put output character tl0exi: jmp RESET ; reset card and restore initialized .=sscdbd+29+32 ; futures wait: .blkb 3 ; wait routine-use rom wait 220=125ms 25=2ms VSTRING .blkb 3 ; print string x=lsb,y=msb x&y->null terminated string rdkey: .blkb 3 ; read keyboard prcrlf: .blkb 3 ; print cr and lf telcnc: .blkb 3 ; check for keyboard character telspa: .blkb 3 ; set character parity CINIT = $C220 SEND = $C22C ;VNAME = $1005 ;VINIT = $1021 ;VCMD = $1024 ;VCHK = $1027 ;VGET = $102A ;VPUT = $102D ;VRESET = $1030 ;VEND = $100C ;SLOT = $1007 ;BAUD = $1003 COUT = $FDED HOME = $FC58 ;VSTRING = $1043 ORG $7F00 ; JMP VECTORS ; LDA #$60 ; STA GO3 ; RTS NAME nasc .byte $00 BADBAUD .byte $8D nasc .byte $8D,$87 nasc .byte $8D,00 INIT BIT $CFFF JSR GO3 ;FIRST SWAP IN 80-COL CARD LDA SLOT ;SET UP JUMPS TO SERIAL ROR a ROR a ROR a ROR a AND #%00001111 ORA #$C0 STA GO2+2 ;STORE AS $CN STA GOSEND+2 STA GOSETUP+2 AND #%00001111 TAX LDA #2 STA $778,X ;SET CARD FOR FULL DUPLEX STA NOINBUF ;INITIALIZE BUFFER POSITIONS STA BUFPTR RTS SETBAUD LDA #21 JSR $C300 JSR HOME JSR GOSETUP LDA #1 RTS CMD TAX AND #$80 BNE XON ;DO FLOW CONTROL TXA CMP #$B BNE NOCMD LDA GOSETUP+2 AND #$C0 CMP #$C0 BEQ SETBAUD LDX #BADBAUD\ LDY #BADBAUD^ JSR VSTRING LDA #0 RTS XON TXA JSR PUTCHR ;SEND THE XON OR XOFF LDA #1 RTS NOCMD LDA #0 ;INVALID/UNIMPLEMENTED RTS CHKINP BIT $CFFF JSR GO2 ;SELECT COMM CARD LDA $CE01 AND #2 ;CHECK FOR NEW CHARACTER BEQ NONE LDY NOINBUF LDA $CE00 ;GET ANY NEW CHAR STA BUFFER,Y ;PUT IT IN THE BUFFER INC NOINBUF NONE LDA NOINBUF CMP BUFPTR ;ARE THERE ANY CHARS IN BUFFER? STA $CFFF JSR GO3 ;SELECT 80 COL CARD RTS GETINP JSR CHKINP LDY BUFPTR LDA BUFFER,Y ;GET NEXT BUFFERED CHAR ORA #$80 CMP #$87 BNE NOTBELL ;SKIP TIME-CONSUMING BELLS JSR BEEP LDA #2 NOTBELL INC BUFPTR RTS PUTCHR STA TEMP ;SO WE CAN CHECK FOR ANOTHER INCOMING JSR CHKINP LDA TEMP JSR GOSEND ;FIRMWARE JUMP JSR CHKINP ;BUFFER ANOTHER STA $CFFF JSR GO3 RTS RESET RTS BEEP LDX #100 BEEP2 LDY #85 BLIP BIT $C030 DEY BNE BLIP JSR CHKINP DEX BNE BEEP2 JSR CHKINP RTS GOSEND JMP $C22C ;JUMP TO FIRMWARE SEND ROUTINE RTS GOSETUP JMP $0032 ;FIRMWARE SETUP MENU RTS GO2 JMP $C24B ;SOME DO-NOTHING INSTRUCTIONS GO3 JMP $C3AF NOINBUF .byte $00 ;PTR TO LAST VALID CHAR IN BUF BUFPTR .byte $00 ;PTR TO FIRST VALID CHAR IN BUF TEMP .byte $00 OLDBAUD .byte $08 BUFFER DS 256 END .byte $00 ;VECTORS LDA #NAME\ ; STA VNAME ; LDA #NAME^ ; STA VNAME+1 ; LDA #INIT\ ; STA VINIT ; LDA #INIT^ ; STA VINIT+1 ; LDA #CMD\ ; STA VCMD ; LDA #CMD^ ; STA VCMD+1 ; LDA #CHKINP\ ; STA VCHK ; LDA #CHKINP^ ; STA VCHK+1 ; LDA #GETINP\ ; STA VGET ; LDA #GETINP^ ; STA VGET+1 ; LDA #PUTCHR\ ; STA VPUT ; LDA #PUTCHR^ ; STA VPUT+1 ; LDA #RESET\ ; STA VRESET ; LDA #RESET^ ; STA VRESET+1 ; LDA #END\ ; STA VEND ; LDA #END^ ; STA VEND+1 ; RTS