home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_26_1988_Transactor_Publishing.d64 / newmodem.src < prev    next >
Text File  |  2023-02-26  |  9KB  |  249 lines

  1. 1100  ;---------------------------------------------
  2. 1110  ;  "newmodem.src" - 64 mode.
  3. 1120  ;  @128 = changes for 128 mode.
  4. 1130  ;---------------------------------------------
  5. 1140  ribuf   =$f7           ;@128 $c8
  6. 1150  robuf   =$f9           ;@128 $ca
  7. 1160  baudof  =$0299         ;@128 $0a16
  8. 1170  ridbe   =$029b         ;@128 $0a18
  9. 1180  ridbs   =$029c         ;@128 $0a19
  10. 1190  rodbs   =$029d         ;@128 $0a1a
  11. 1200  rodbe   =$029e         ;@128 $0a1b
  12. 1210  enabl   =$02a1         ;@128 $0a0f
  13. 1220  rstkey  =$fe56         ;@128 $fa4b
  14. 1230  norest  =$fe72         ;@128 $fa5f
  15. 1240  return  =$febc         ;@128 $ff33
  16. 1250  oldout  =$f1ca         ;@128 $ef79
  17. 1260  oldchk  =$f21b         ;@128 $f10e
  18. 1270  findfn  =$f30f         ;@128 $f202
  19. 1280  devnum  =$f31f         ;@128 $f212
  20. 1290  nofile  =$f701         ;@128 $f682
  21. 1500  ;---------------------------------------------
  22. 1510  *       =$ce00         ;@128 $1a00
  23. 1520  ;---------------------------------------------
  24. 1530  xx00    jmp setup
  25. 1540  xx03    jmp inable
  26. 1550  xx06    jmp disabl
  27. 1560  xx09    jmp rsget
  28. 1570  xx0c    jmp rsout
  29. 1580          nop
  30. 1590  strt24  .word $01cb    ; 459 start-bit times
  31. 1600  strt12  .word $0442    ;1090
  32. 1610  strt03  .word $1333    ;4915
  33. 1620  full24  .word $01a5    ; 421 full-bit times
  34. 1630  full12  .word $034d    ; 845
  35. 1640  full03  .word $0d52    ;3410
  36. 1650  ;---------------------------------------------
  37. 2000  setup   lda #<nmi64    ;@128 #<nmi128
  38. 2010          ldy #>nmi64    ;@128 #>nmi128
  39. 2020          sta $0318
  40. 2030          sty $0319
  41. 2040          lda #<nchkin
  42. 2050          ldy #>nchkin
  43. 2060          sta $031e
  44. 2070          sty $031f
  45. 2080          lda #<nbsout
  46. 2090          ldy #>nbsout
  47. 2100          sta $0326
  48. 2110          sty $0327
  49. 2120          rts
  50. 2130  ;---------------------------------------------
  51. 3000  nmi64   pha            ;new nmi handler
  52. 3010          txa
  53. 3020          pha
  54. 3030          tya
  55. 3040          pha
  56. 3050  nmi128  cld
  57. 3060          ldx $dd07      ;sample timer b hi byte
  58. 3070          lda #$7f       ;disable cia nmi's
  59. 3080          sta $dd0d
  60. 3090          lda $dd0d      ;read/clear flags
  61. 3100          bpl notcia     ;(restore key)
  62. 3110          cpx $dd07      ;tb timeout since 3060?
  63. 3120          ldy $dd01      ;(sample pin c)
  64. 3130          bcs mask       ;no
  65. 3140          ora #$02       ;yes, set flag in acc.
  66. 3150          ora $dd0d      ;read/clear flags again
  67. 3160  mask    and enabl      ;mask out non-enabled
  68. 3170          tax            ;these must be serviced
  69. 3180          lsr            ;timer a? (bit 0)
  70. 3190          bcc ckflag     ;no
  71. 3200          lda $dd00      ;yes, put bit on pin m
  72. 3210          and #$fb
  73. 3220          ora $b5
  74. 3230          sta $dd00
  75. 3240  ckflag  txa
  76. 3250          and #$10       ;*flag nmi? (bit 4)
  77. 3260          beq nmion      ;no
  78. 3270  strtlo  lda #$42       ;yes, start-bit to tb
  79. 3280          sta $dd06
  80. 3290  strthi  lda #$04
  81. 3300          sta $dd07
  82. 3310          lda #$11       ;start tb counting
  83. 3320          sta $dd0f
  84. 3330          lda #$12       ;*flag nmi off, tb on
  85. 3340          eor enabl      ;update mask
  86. 3350          sta enabl
  87. 3360          sta $dd0d      ;enable new config.
  88. 3370  fulllo  lda #$4d       ;change reload latch
  89. 3380          sta $dd06      ;  to full-bit time
  90. 3390  fullhi  lda #$03
  91. 3400          sta $dd07
  92. 3410          lda #$08       ;# of bits to receive
  93. 3420          sta $a8
  94. 3430          bne chktxd     ;branch always
  95. 3440  notcia  ldy #$00
  96. 3450          jmp rstkey     ;or jmp norest
  97. 3460  nmion   lda enabl      ;re-enable nmi's
  98. 3470          sta $dd0d
  99. 3480          txa
  100. 3490          and #$02       ;timer b? (bit 1)
  101. 3500          beq chktxd     ;no
  102. 3510          tya            ;yes, sample from 3120
  103. 3520          lsr
  104. 3530          ror $aa        ;rs232 is lsb first
  105. 3540          dec $a8        ;byte finished?
  106. 3550          bne txd        ;no
  107. 3560          ldy ridbe      ;yes, byte to buffer
  108. 3570          lda $aa
  109. 3580          sta (ribuf),y  ;(no overrun test)
  110. 3590          inc ridbe
  111. 3600          lda #$00       ;stop timer b
  112. 3610          sta $dd0f
  113. 3620          lda #$12       ;tb nmi off, *flag on
  114. 3630  switch  ldy #$7f       ;disable nmi's
  115. 3640          sty $dd0d      ;twice
  116. 3650          sty $dd0d
  117. 3660          eor enabl      ;update mask
  118. 3670          sta enabl
  119. 3680          sta $dd0d      ;enable new config.
  120. 3690  txd     txa
  121. 3700          lsr            ;timer a?
  122. 3710  chktxd  bcc exit       ;no
  123. 3720          dec $b4        ;yes, byte finished?
  124. 3730          bmi char       ;yes
  125. 3740          lda #$04       ;no, prep next bit
  126. 3750          ror $b6        ;(fill with stop bits)
  127. 3760          bcs store
  128. 3770  low     lda #$00
  129. 3780  store   sta $b5
  130. 3790  exit    jmp return     ;restore regs, rti
  131. 3800  char    ldy rodbs
  132. 3810          cpy rodbe      ;buffer empty?
  133. 3820          beq txoff      ;yes
  134. 3830  getbuf  lda (robuf),y  ;no, prep next byte
  135. 3840          inc rodbs
  136. 3850          sta $b6
  137. 3860          lda #$09       ;# bits to send
  138. 3870          sta $b4
  139. 3880          bne low        ;always - do start bit
  140. 3890  txoff   ldx #$00       ;stop timer a
  141. 3900          stx $dd0e
  142. 3910          lda #$01       ;disable ta nmi
  143. 3920          bne switch     ;always
  144. 3930  ;---------------------------------------------
  145. 4000  disabl  pha            ;turns off modem port
  146. 4010  test    lda enabl
  147. 4020          and #$03       ;any current activity?
  148. 4030          bne test       ;yes, test again
  149. 4040          lda #$10       ;no, disable *flag nmi
  150. 4050          sta $dd0d
  151. 4060          lda #$02
  152. 4070          and enabl      ;currently receiving?
  153. 4080          bne test       ;yes, start over
  154. 4090          sta enabl      ;all off, update mask
  155. 4100          pla
  156. 4110          rts
  157. 4120  ;---------------------------------------------
  158. 5000  nbsout  pha            ;new bsout
  159. 5010          lda $9a
  160. 5020          cmp #$02
  161. 5030          bne notmod
  162. 5040          pla
  163. 5050  rsout   sta $9e        ;output to modem
  164. 5060          sty $97
  165. 5070  point   ldy rodbe
  166. 5080          sta (robuf),y  ;not official till 5120
  167. 5090          iny
  168. 5100          cpy rodbs      ;buffer full?
  169. 5110          beq fulbuf     ;yes
  170. 5120          sty rodbe      ;no, bump pointer
  171. 5130  strtup  lda enabl
  172. 5140          and #$01       ;transmitting now?
  173. 5150          bne ret3       ;yes
  174. 5160          sta $b5        ;no, prep start bit,
  175. 5170          lda #$09
  176. 5180          sta $b4        ;  # bits to send,
  177. 5190          ldy rodbs
  178. 5200          lda (robuf),y
  179. 5210          sta $b6        ;  and next byte
  180. 5220          inc rodbs
  181. 5230          lda baudof     ;full tx bit time to ta
  182. 5240          sta $dd04
  183. 5250          lda baudof+1
  184. 5260          sta $dd05
  185. 5270          lda #$11       ;start timer a
  186. 5280          sta $dd0e
  187. 5290          lda #$81       ;enable ta nmi
  188. 5300  change  sta $dd0d      ;nmi clears flag if set
  189. 5310          php            ;save irq status
  190. 5320          sei            ;disable irq's
  191. 5330          ldy #$7f       ;disable nmi's
  192. 5340          sty $dd0d      ;twice
  193. 5350          sty $dd0d
  194. 5360          ora enabl      ;update mask
  195. 5370          sta enabl
  196. 5380          sta $dd0d      ;enable new config.
  197. 5390          plp            ;restore irq status
  198. 5400  ret3    clc
  199. 5410          ldy $97
  200. 5420          lda $9e
  201. 5430          rts
  202. 5440  fulbuf  jsr strtup
  203. 5450          jmp point
  204. 5460  notmod  pla            ;back to old bsout
  205. 5470          jmp oldout
  206. 5480  ;---------------------------------------------
  207. 6000  nchkin  jsr findfn     ;new chkin
  208. 6010          bne nosuch
  209. 6020          jsr devnum
  210. 6030          lda $ba
  211. 6040          cmp #$02
  212. 6050          bne back
  213. 6060          sta $99
  214. 6070  inable  sta $9e        ;enable rs232 input
  215. 6080          sty $97
  216. 6090  baud    lda baudof+1   ;set receive to same
  217. 6100          and #$06       ;  baud rate as xmit
  218. 6110          tay
  219. 6120          lda strt24,y
  220. 6130          sta strtlo+1   ;overwrite value @ 3270
  221. 6140          lda strt24+1,y
  222. 6150          sta strthi+1
  223. 6160          lda full24,y
  224. 6170          sta fulllo+1
  225. 6180          lda full24+1,y
  226. 6190          sta fullhi+1
  227. 6200          lda enabl
  228. 6210          and #$12       ;*flag or tb on?
  229. 6220          bne ret1       ;yes
  230. 6230          sta $dd0f      ;no, stop tb
  231. 6240          lda #$90       ;turn on flag nmi
  232. 6250          jmp change
  233. 6260  nosuch  jmp nofile
  234. 6270  back    lda $ba
  235. 6280          jmp oldchk
  236. 6290  ;---------------------------------------------
  237. 7000  rsget   sta $9e        ;input from modem
  238. 7010          sty $97
  239. 7020          ldy ridbs
  240. 7030          cpy ridbe      ;buffer empty?
  241. 7040          beq ret2       ;yes
  242. 7050          lda (ribuf),y  ;no, fetch character
  243. 7060          sta $9e
  244. 7070          inc ridbs
  245. 7080  ret1    clc            ;cc = char in acc.
  246. 7090  ret2    ldy $97
  247. 7100          lda $9e
  248. 7110  last    rts            ;cs = buffer was empty
  249.