home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / c64 / comm / 2400bps.asm < prev    next >
Assembly Source File  |  1993-05-26  |  7KB  |  480 lines

  1.  
  2. fROM USC!HENRY.JPL.NASA.GOV!ELROY.JPL.NASA.GOV!GRYPHON!PNET02!RHEBI wED oCT 25 12:22:50 pdt 1989
  3. aRTICLE 3833 OF COMP.SYS.CBM:
  4. pATH: USC!HENRY.JPL.NASA.GOV!ELROY.JPL.NASA.GOV!GRYPHON!PNET02!RHEBI
  5. >fROM: RHEBI@PNET02.GRYPHON.COM (rOY hEBI)
  6. nEWSGROUPS: COMP.SYS.CBM
  7. sUBJECT: rs-232 ROUTINES TO ALLOW 2400 ON c-64.
  8. mESSAGE-id: <21284@GRYPHON.com>
  9. dATE: 24 oCT 89 06:40:12 gmt
  10. sENDER: ROOT@GRYPHON.com
  11. oRGANIZATION: pEOPLE-nET [PNET02], rEDONDO bEACH, ca.
  12. lINES: 897
  13.  
  14. hELLO ALL!
  15.  aS i PROMISED, i HEREBY INCLUDE A MESSAGE DOWNLOADED FROM ANOTHER PLACE ON
  16. THE NET, WHICH GIVES A SOURCE IN ASSEMBLER FOR NEW ROUTINES TO REPLACE THE rom
  17. ROUTINES FOR HANDLING rs-232. tHESE ROUTINES ARE SUPPOSED TO WORK IN 2400.
  18.  
  19. fOLLOWING IS THE ORIGINAL MESSAGE SENT ON THE NET SOMEWHERE ELSE:
  20.  
  21. -------------------- begin quote --------------------------
  22. aRTICLE 1322 OF COMP.SYS.CBM:
  23. pATH: TAURUS!ROCKY8!CMCL2!RUTGERS!USC!MERLIN.USC.EDU!NUNKI.USC.EDU!ALIU
  24. >fROM: ALIU@NUNKI.USC.EDU (tERMINAL eNTRY)
  25. nEWSGROUPS: COMP.SYS.CBM
  26. sUBJECT: rs232 rEPLACEMENT rOUTINE (medium length)
  27. sUMMARY: DO RELABLE 2400 ON THE C64.
  28. kEYWORDS: SOURCE, 2400, RS232
  29. mESSAGE-id: <4843@MERLIN.USC.EDU>
  30. dATE: 24 aUG 89 00:14:48 gmt
  31. sENDER: NEWS@MERLIN.USC.EDU
  32. rEPLY-tO: ALIU@NUNKI.USC.EDU (tERMINAL eNTRY)
  33. oRGANIZATION: cLASSIFIED
  34. lINES: 417
  35.  
  36.  
  37. i FOUND THIS SOURCE ON A BBS, AND THOUGHT i'D SHARE IT WITH EVERYBODY.
  38. iT REPLACES THE BULT-IN rs232 ROUTINES ON THE C64 ALLOWING RELIABLE 2400
  39. BAUD COMMUNICATIONS.
  40.  
  41. tHE FILE WAS ORIGINALLY IN pal FORMAT, AND HAD ABSOLUTELLY NO COMMENTS. sO,
  42. YOU MAY BLAME ME FOR FAULTY COMMENTING. bUT PLEASE DON'T BLAME ME FOR FAULTY
  43. CODING.
  44.  
  45. wHEN i TESTED IT OUT, i FIRST CALLED setup AND inable (SIC) AFTER i OPENED
  46. THE CHANNEL AS FILE #2 (OR 5,  USE THEM INTERCHANGEBLY). tHEN, i USED rsget
  47. INSTEAD OF THE KERNAL GETIN ($FFE4) TO GET BYTES FROM THE MODEM. i AM NOT SURE
  48. WHAT YOU WOULD USE rsout FOR, i DIDN'T FIND IT REQUIRED. hOWEVER, i DID not
  49. MAKE EXTENSIVE TEST WTH IT. jUST A COUPLE OF MINUTES ON-LINE AT 2400. tHE
  50. TEXT CAME THROUGHT CRYSTAL CLEAR AT 2400.
  51.  
  52. eNJOY.
  53.  
  54. ------------------------------- cut here --------------------------------------
  55.  
  56. .OBJ "NEW-RS232.ML"   ; BUDDY PSEUDO-OP TO ASSEMBLE  TO DISK
  57.  
  58.  
  59. ;   rEPLACEMENT  RS-232 ROUTINE FOR THE cOMMODORE 64
  60. ;   TO ENABLE RELIABLE TRANSMISSION AT 2400 BITS/SEC
  61.     
  62. ;    nOTE: FILE IS IN pOWER aSSEMBLER 'ebud' FORMAT 
  63. ;           OBJECT FILE IS $1EE BYTES.
  64.  
  65.  
  66. ;-----  EQUATES TABLE  -------------------------------
  67.  
  68. RIBUF  = $F7    ; RS232 INPUT BUFFER POINTER
  69. ROBUF  = $F9    ; RS232 OUPUT BUFFER POINTER
  70. BAUDOF = $0299  ; RS232 BAUD RATE
  71. RIDBE  = $029B  ; RS232 INDEX TO END OF INPUT BUFFER
  72. RIDBS  = $029C  ; RS232 START OF INPUT BUFFER
  73. RODBS  = $029D  ; RS232 START OF OUTPUT BUFFER
  74. RODBE  = $029E  ; RS232 INDEX TO END OF OUPUT BUFFER
  75. ENABL  = $02A1  ; RS232 ENABLE
  76. NMINV  = $0318  ; VECTOR: NMI
  77. ICHKIN = $031E  ; VECTOR: CHKIN
  78. IBSOUT = $0326  ; VECTOR: CHROUT
  79. DATAA  = $DD00  ; DATA PORT A
  80. DATAB  = $DD01  ; DATA PORT B
  81. TIMBLO = $DD06  ; TIMER b LO BYTE
  82. TIMBHI = $DD07  ; TIMER b HI BYTE
  83. RDNMI  = $DD0D  ; READ/MASK NMI
  84. CREGA  = $DD0E  ; CIA CONTROL REG A
  85. CREGB  = $DD0F  ; CIA CONTROL REG B
  86. RSTKEY = $FE56  ; 
  87. NOREST = $FE72
  88. RETURN = $FEBC
  89. OLDOUT = $F1CA
  90. OLDCHK = $F21B
  91. FINDFN = $F30F
  92. DEVNUM = $F31F 
  93. NOFILE = $F701 
  94.  
  95.  
  96. ;  JUMP TABLE
  97.  
  98. JMP SETUP     ; SETUP NEW RS-232 ROUTINE
  99. JMP INABLE    ; ENABLE THE NEW ROUTINE
  100. JMP DISABL    ; DISABLE THE NEW ROUTINE
  101. JMP RSGET 
  102. JMP RSOUT 
  103.  
  104.  
  105. NOP
  106.  
  107. STRT24 .BYTE 203,1
  108. STRT12 .BYTE  66,4
  109. STRT03 .BYTE  51,19
  110. FULL24 .BYTE 165,1
  111. FULL12 .BYTE  77,3
  112. FULL03 .BYTE  82,13
  113.  
  114. SETUP = *
  115.  
  116. LDA #<NMI64    ; REDIRECT NMI VECTOR
  117. LDY #>NMI64
  118. STA NMINV+00
  119. STY NMINV+01
  120. :
  121. LDA #<NCHKIN   ; REDIRECT CHKIN VECTOR
  122. LDY #>NCHKIN
  123. STA ICHKIN+00
  124. STY ICHKIN+01
  125. :
  126. LDA #<NBSOUT   ; REDIRECT CHROUT VECTOR
  127. LDY #>NBSOUT
  128. STA IBSOUT+00
  129. STY IBSOUT+01
  130. RTS
  131.  
  132. ;-----  NEW NMI ROUTINE HERE  -----------------------
  133.  
  134. NMI64 = *
  135. :
  136. PHA          ; SAVE REGISTERS
  137. TXA
  138. PHA
  139. TYA
  140. PHA
  141. CLD
  142. LDX TIMBHI   ; $DD07
  143. LDA #$7F
  144. STA RDNMI    ; $DD0D
  145. LDA RDNMI
  146. BPL NOTCIA
  147. CPX TIMBHI   ; $DD07
  148. LDY DATAB    ; $DD01
  149. BCS MASK
  150. ORA #$02
  151. ORA RDNMI    ; $DD0D
  152.  
  153. MASK = *
  154. :
  155. AND ENABL
  156. TAX
  157. LSR
  158. BCC CKFLAG
  159. LDA DATAA    ; $DD00
  160. AND #$FB
  161. ORA $B5
  162. STA DATAA    ; $DD00
  163. CKFLAG TXA
  164. AND #$10
  165. BEQ NMION
  166.  
  167. STRTLO = *
  168. :
  169. LDA #$42
  170. STA TIMBLO   ; $DD06
  171.  
  172. STRTHI = *
  173. :
  174. LDA #$04
  175. STA TIMBHI   ; $DD07
  176.              
  177. LDA #$11
  178. STA CREGB    ; $DD0F
  179. LDA #$12
  180. EOR ENABL
  181. STA ENABL
  182. STA $DD0D
  183.  
  184. FULLLO = *
  185. :
  186. LDA #$4D
  187. STA TIMBLO   ; $DD06
  188.  
  189. FULLHI = *
  190. :
  191. LDA #$03
  192. STA TIMBHI   ; $DD07
  193.  
  194. LDA #$08
  195. STA $A8
  196. BNE CHKTXD
  197.  
  198. NOTCIA = *
  199. :
  200. LDY #00
  201. JMP RSTKEY
  202.  
  203. NMION = *
  204. :
  205. LDA ENABL
  206. STA RDNMI    ; $DD0D
  207. TXA
  208. AND #$02
  209. BEQ CHKTXD
  210. TYA
  211. LSR
  212. ROR $AA
  213. DEC $A8
  214. BNE TXD
  215. LDY RIDBE
  216. LDA $AA
  217. STA (RIBUF),Y
  218. INC RIDBE
  219. LDA #$00
  220. STA CREGB    ; $DD0F
  221. LDA #$12
  222.  
  223. SWITCH = *     
  224. :
  225. LDY #$7F
  226. STY RDNMI    ; $DD0D
  227. STY RDNMI    ; $DD0D  (REDUNDAND?)
  228. EOR ENABL
  229. STA ENABL
  230. STA RDNMI    ; $DD0D
  231.  
  232. TXD = *
  233. :
  234. TXA
  235. LSR
  236.  
  237. CHKTXD = *
  238. :
  239. BCC EXIT
  240. DEC $B4
  241. BMI CHAR
  242. LDA #$04
  243. ROR $B6
  244. BCS STORE
  245.  
  246. LOW = *
  247. :
  248. LDA #$00
  249.  
  250. STORE = *
  251. :
  252. STA $B5
  253.  
  254. EXIT = *
  255. :
  256. JMP RETURN
  257.  
  258. CHAR = *
  259. :
  260. LDY RODBS
  261. CPY RODBE
  262. BEQ TXOFF
  263.  
  264. GETBUF = *
  265. :
  266. LDA (ROBUF),Y
  267. INC RODBS
  268. STA $B6
  269. LDA #$09
  270. STA $B4
  271. BNE LOW
  272.  
  273. TXOFF = *
  274. :
  275. LDX #$00
  276. STX CREGA    ; $DD0E
  277. LDA #$01
  278. BNE SWITCH
  279.  
  280.  
  281. ;-----  ROUTINE TO DISABLE THE NEW-RS232  ------------
  282.  
  283. DISABL = *
  284. :
  285. PHA
  286.   
  287. TEST = *
  288. :
  289. LDA ENABL
  290. AND #$03
  291. BNE TEST
  292. LDA #$10
  293. STA $DD0D
  294. LDA #$02
  295. AND ENABL
  296. BNE TEST
  297. STA ENABL
  298. PLA
  299. RTS
  300.  
  301.  
  302. ;-----------------------------------------------------
  303.  
  304. NBSOUT = *
  305. :
  306. PHA
  307. LDA $9A
  308. CMP #$02
  309. BNE NOTMOD
  310. PLA
  311.  
  312. RSOUT = *
  313. :
  314. STA $9E
  315. STY $97
  316.  
  317. POINT = *
  318. :
  319. LDY RODBE
  320. STA (ROBUF),Y
  321. INY
  322. CPY RODBS
  323. BEQ FULBUF
  324. STY RODBE
  325.  
  326. STRTUP = *
  327. :
  328. LDA ENABL
  329. AND #$01
  330. BNE RET3
  331. STA $B5
  332. LDA #$09
  333. STA $B4
  334. LDY RODBS
  335. LDA (ROBUF),Y
  336. STA $B6
  337. INC RODBS
  338. LDA BAUDOF
  339. STA $DD04
  340. LDA BAUDOF+1
  341. STA $DD05
  342. LDA #$11
  343. STA CREGA    ; $DD0E
  344. LDA #$81
  345.  
  346. CHANGE = *
  347. :
  348. STA RDNMI    ; $DD0D
  349. PHP
  350. SEI
  351. LDY #$7F
  352. STY RDNMI    ; $DD0D
  353. STY RDNMI    ; $DD0D (REDUNDAND?)
  354. ORA ENABL
  355. STA ENABL
  356. STA RDNMI
  357. PLP
  358.  
  359. RET3 = *
  360. :
  361. CLC
  362. LDY $97
  363. LDA $9E
  364. RTS
  365.  
  366. FULBUF = *
  367. :
  368. JSR STRTUP
  369. JMP POINT
  370.  
  371. NOTMOD = *
  372. :
  373. PLA
  374. JMP OLDOUT
  375.  
  376.  
  377. ;
  378.  
  379. NCHKIN = *
  380. :
  381. JSR FINDFN
  382. BNE NOSUCH
  383. JSR DEVNUM
  384. LDA $BA
  385. CMP #$02
  386. BNE BACK
  387. STA $99
  388.  
  389. INABLE = *
  390. :
  391. STA $9E
  392. STY $97
  393.  
  394. BAUD = *
  395. :
  396. LDA BAUDOF+1
  397. AND #$06
  398. TAY
  399. LDA STRT24,Y
  400. STA STRTLO+1
  401. LDA STRT24+1,Y
  402. STA STRTHI+1
  403. LDA FULL24,Y
  404. STA FULLLO+1
  405. LDA FULL24+1,Y
  406. STA FULLHI+1
  407. LDA ENABL
  408. AND #$12
  409. BNE RET1
  410. STA CREGB    ; $DD0F
  411. LDA #$90
  412. JMP CHANGE
  413.  
  414. NOSUCH = *
  415. :
  416. JMP NOFILE
  417.  
  418. BACK = *
  419. :
  420. LDA $BA
  421. JMP OLDCHK
  422.  
  423.  
  424. ;-----  NEW RS232 GET ROUTINE  -----------------------
  425.  
  426. RSGET = *
  427. :
  428. STA $9E
  429. STY $97
  430. LDY RIDBS
  431. CPY RIDBE
  432. BEQ RET2
  433. LDA (RIBUF),Y
  434. STA $9E
  435. INC RIDBS
  436.  
  437. RET1 = *
  438. :
  439. CLC
  440.  
  441. RET2 = *
  442. :
  443. LDY $97
  444. LDA $9E
  445.  
  446. LAST = *
  447. :
  448. RTS
  449.  
  450. ;-----------------------------------------------------
  451.  
  452. .END
  453.  
  454.  
  455.  
  456. ------------------------- end quote --------------------
  457.  
  458. i AM VERY SORRY ABOUT THE DOUBLE LINE SPACING. iT HAPPENED BECAUSE OF THE
  459. ASCII TRANSLATION i MADE WHEN i TRANSPORTED THE TEXT TO MY ibm FOR UPLOADING.
  460.  
  461. i HOPE THIS SATISFIES THOSE OF US WHO WANTED THIS FILE.
  462. aBOUT MY 80-COLUMNS ROUTINES, i HAVE SO FAR RECIEVED ONLY ONE REQUEST FOR THEM
  463. i AM STILL WAITING FOR MORE REQUESTS SO i CAN POST THEM TO THE NET.
  464.  
  465. iF YOU ARE INTERESTED IN MY SOURCES FOR THE 80-COLUMNS DRIVER (READ PREVIOUS
  466. POSTINGS ABOUT vip & 2400 FOR MORE INFO), JUST SEND PRIVATE EMAIL TO ME.
  467.  
  468. iF THERE ARE NOT ENOUGH PEOPLE WANTING MY ROUTINES, i WILL SEND THEM
  469. PERSONALLY TO EACH ONE.
  470.  
  471.         yOURS,
  472.  
  473.  
  474.  rOY hEBI,
  475.  
  476. uucp: {$7b}AMES!ELROY, <ROUTING SITE>{$7d}!GRYPHON!PNET02!RHEBI
  477. inet: RHEBI@PNET02.GRYPHON.COM
  478.  
  479.  
  480.