From usc!henry.jpl.nasa.gov!elroy.jpl.nasa.gov!gryphon!pnet02!rhebi Wed Oct 25 12:22:50 PDT 1989 Article 3833 of comp.sys.cbm: Path: usc!henry.jpl.nasa.gov!elroy.jpl.nasa.gov!gryphon!pnet02!rhebi >From: rhebi@pnet02.gryphon.com (Roy Hebi) Newsgroups: comp.sys.cbm Subject: RS-232 routines to allow 2400 on C-64. Message-ID: <21284@gryphon.COM> Date: 24 Oct 89 06:40:12 GMT Sender: root@gryphon.COM Organization: People-Net [pnet02], Redondo Beach, CA. Lines: 897 Hello all! As I promised, I hereby include a message downloaded from another place on the net, which gives a source in assembler for new routines to replace the ROM routines for handling RS-232. These routines are supposed to work in 2400. Following is the original message sent on the net somewhere else: -------------------- BEGIN QUOTE -------------------------- Article 1322 of comp.sys.cbm: Path: taurus!rocky8!cmcl2!rutgers!usc!merlin.usc.edu!nunki.usc.edu!aliu >From: aliu@nunki.usc.edu (Terminal Entry) Newsgroups: comp.sys.cbm Subject: RS232 Replacement Routine (MEDIUM LENGTH) Summary: do relable 2400 on the c64. Keywords: source, 2400, rs232 Message-ID: <4843@merlin.usc.edu> Date: 24 Aug 89 00:14:48 GMT Sender: news@merlin.usc.edu Reply-To: aliu@nunki.usc.edu (Terminal Entry) Organization: Classified Lines: 417 I found this source on a bbs, and thought I'd share it with everybody. It replaces the bult-in RS232 routines on the c64 allowing reliable 2400 baud communications. The file was originally in PAL format, and had absolutelly no comments. So, you may blame me for faulty commenting. But please don't blame me for faulty coding. When I tested it out, I first called SETUP and INABLE (sic) after I opened the channel as file #2 (or 5, use them interchangebly). Then, I used RSGET instead of the kernal getin ($ffe4) to get bytes from the modem. I am not sure what you would use RSOUT for, I didn't find it required. However, I did NOT make extensive test wth it. Just a couple of minutes on-line at 2400. The text came throught crystal clear at 2400. Enjoy. ------------------------------- CUT HERE -------------------------------------- .obj "new-rs232.ml" ; buddy pseudo-op to assemble to disk ; Replacement rs-232 routine for the Commodore 64 ; to enable reliable transmission at 2400 bits/sec ; Note: file is in Power Assembler 'EBUD' format ; object file is $1ee bytes. ;----- equates table ------------------------------- ribuf = $f7 ; rs232 input buffer pointer robuf = $f9 ; rs232 ouput buffer pointer baudof = $0299 ; rs232 baud rate ridbe = $029b ; rs232 index to end of input buffer ridbs = $029c ; rs232 start of input buffer rodbs = $029d ; rs232 start of output buffer rodbe = $029e ; rs232 index to end of ouput buffer enabl = $02a1 ; rs232 enable nminv = $0318 ; vector: nmi ichkin = $031e ; vector: chkin ibsout = $0326 ; vector: chrout dataa = $dd00 ; data port a datab = $dd01 ; data port b timblo = $dd06 ; timer B lo byte timbhi = $dd07 ; timer B hi byte rdnmi = $dd0d ; read/mask nmi crega = $dd0e ; cia control reg a cregb = $dd0f ; cia control reg b rstkey = $fe56 ; norest = $fe72 return = $febc oldout = $f1ca oldchk = $f21b findfn = $f30f devnum = $f31f nofile = $f701 ; jump table jmp setup ; setup new rs-232 routine jmp inable ; enable the new routine jmp disabl ; disable the new routine jmp rsget jmp rsout nop strt24 .byte 203,1 strt12 .byte 66,4 strt03 .byte 51,19 full24 .byte 165,1 full12 .byte 77,3 full03 .byte 82,13 setup = * lda #nmi64 sta nminv+00 sty nminv+01 : lda #nchkin sta ichkin+00 sty ichkin+01 : lda #nbsout sta ibsout+00 sty ibsout+01 rts ;----- new nmi routine here ----------------------- nmi64 = * : pha ; save registers txa pha tya pha cld ldx timbhi ; $dd07 lda #$7f sta rdnmi ; $dd0d lda rdnmi bpl notcia cpx timbhi ; $dd07 ldy datab ; $dd01 bcs mask ora #$02 ora rdnmi ; $dd0d mask = * : and enabl tax lsr bcc ckflag lda dataa ; $dd00 and #$fb ora $b5 sta dataa ; $dd00 ckflag txa and #$10 beq nmion strtlo = * : lda #$42 sta timblo ; $dd06 strthi = * : lda #$04 sta timbhi ; $dd07 lda #$11 sta cregb ; $dd0f lda #$12 eor enabl sta enabl sta $dd0d fulllo = * : lda #$4d sta timblo ; $dd06 fullhi = * : lda #$03 sta timbhi ; $dd07 lda #$08 sta $a8 bne chktxd notcia = * : ldy #00 jmp rstkey nmion = * : lda enabl sta rdnmi ; $dd0d txa and #$02 beq chktxd tya lsr ror $aa dec $a8 bne txd ldy ridbe lda $aa sta (ribuf),y inc ridbe lda #$00 sta cregb ; $dd0f lda #$12 switch = * : ldy #$7f sty rdnmi ; $dd0d sty rdnmi ; $dd0d (redundand?) eor enabl sta enabl sta rdnmi ; $dd0d txd = * : txa lsr chktxd = * : bcc exit dec $b4 bmi char lda #$04 ror $b6 bcs store low = * : lda #$00 store = * : sta $b5 exit = * : jmp return char = * : ldy rodbs cpy rodbe beq txoff getbuf = * : lda (robuf),y inc rodbs sta $b6 lda #$09 sta $b4 bne low txoff = * : ldx #$00 stx crega ; $dd0e lda #$01 bne switch ;----- routine to disable the new-rs232 ------------ disabl = * : pha test = * : lda enabl and #$03 bne test lda #$10 sta $dd0d lda #$02 and enabl bne test sta enabl pla rts ;----------------------------------------------------- nbsout = * : pha lda $9a cmp #$02 bne notmod pla rsout = * : sta $9e sty $97 point = * : ldy rodbe sta (robuf),y iny cpy rodbs beq fulbuf sty rodbe strtup = * : lda enabl and #$01 bne ret3 sta $b5 lda #$09 sta $b4 ldy rodbs lda (robuf),y sta $b6 inc rodbs lda baudof sta $dd04 lda baudof+1 sta $dd05 lda #$11 sta crega ; $dd0e lda #$81 change = * : sta rdnmi ; $dd0d php sei ldy #$7f sty rdnmi ; $dd0d sty rdnmi ; $dd0d (redundand?) ora enabl sta enabl sta rdnmi plp ret3 = * : clc ldy $97 lda $9e rts fulbuf = * : jsr strtup jmp point notmod = * : pla jmp oldout ; nchkin = * : jsr findfn bne nosuch jsr devnum lda $ba cmp #$02 bne back sta $99 inable = * : sta $9e sty $97 baud = * : lda baudof+1 and #$06 tay lda strt24,y sta strtlo+1 lda strt24+1,y sta strthi+1 lda full24,y sta fulllo+1 lda full24+1,y sta fullhi+1 lda enabl and #$12 bne ret1 sta cregb ; $dd0f lda #$90 jmp change nosuch = * : jmp nofile back = * : lda $ba jmp oldchk ;----- new rs232 get routine ----------------------- rsget = * : sta $9e sty $97 ldy ridbs cpy ridbe beq ret2 lda (ribuf),y sta $9e inc ridbs ret1 = * : clc ret2 = * : ldy $97 lda $9e last = * : rts ;----------------------------------------------------- .end ------------------------- END QUOTE -------------------- I am very sorry about the double line spacing. It happened because of the ascii translation I made when I transported the text to my IBM for uploading. I hope this satisfies those of us who wanted this file. About my 80-columns routines, I have so far recieved only one request for them I am still waiting for more requests so I can post them to the net. If you are interested in my sources for the 80-columns driver (read previous postings about VIP & 2400 for more info), just send private email to me. If there are not enough people wanting my routines, I will send them personally to each one. Yours, Roy Hebi, UUCP: {ames!elroy, }!gryphon!pnet02!rhebi INET: rhebi@pnet02.gryphon.com