home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
archives
/
appleii.zip
/
appace.m65
< prev
next >
Wrap
Text File
|
1990-12-05
|
4KB
|
228 lines
; 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 <ACE .21>
.byte $00
BADBAUD .byte $8D
nasc <YOU MUST CONNECT TO INITIALIZE>
.byte $8D,$87
nasc <COMM CARD BEFORE YOU SET BAUD>
.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