home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / modem / tdd56.arc / TDD43.M69 < prev    next >
Text File  |  1985-03-16  |  8KB  |  378 lines

  1. ; TDD VERSION 4.3
  2. ; BY JOHN W. SPALDING
  3. ; SELF RELOCATING
  4. ; MAY BE ROM RESIDENT
  5. ; THIS VERSION TO BE ASSEMBLED
  6. ; BY COMPUSERVE'S MAC69.
  7. INTSOFF =       $50
  8. INTSON  =       $EF
  9. BLUE    =       175
  10. ORANGE  =       249
  11. BAUD    =       173
  12. ; PAGE ZERO VARIBLES:
  13. TOP     =       $100
  14. SIGNAL  =       TOP-1
  15. RSTROB  =       TOP-2
  16. DATA    =       TOP-3
  17. SHIFT   =       TOP-4
  18. CURCHR  =       TOP-5
  19. CHRBUF  =       TOP-6
  20. XSHIFT  =       TOP-7
  21. STROB   =       TOP-8
  22. SHFTRG  =       TOP-10
  23. CLOCK   =       TOP-12
  24. INTA    =       TOP-13
  25. FREQ    =       TOP-14
  26. ROLOVR  =       TOP-22
  27. STACK   =       $4000
  28. ; INITIALIZE PG 0 STORAGE
  29.         ORG     $100
  30. START   ORCC    #INTSOFF
  31.         LDA     #0
  32.         TFR     A,DP
  33.         LDS     #STACK
  34.         LDX     #TOP
  35. P0INIT  CLR     ,-X
  36.         CMPX    #FREQ
  37.         BHI     P0INIT
  38.         COMA
  39. P0INI2  STA     ,-X
  40.         CMPX    #ROLOVR
  41.         BHI     P0INI2
  42.         LDD     #1
  43.         STD     CLOCK
  44.         LDA     #3
  45.         STA     FREQ
  46.         LDA     #BLUE
  47.         STA     CURCHR
  48. ; MORE INITIALIZATION
  49.         LBSR    CURSUB
  50.         LEAX    MSG1,PCR
  51.         LBSR    PRINTS
  52.         LDD     #$3C34
  53.         STA     $FF01
  54.         STA     $FF23
  55.         STB     $FF03
  56.         LDA     $FF20
  57.         ANDA    #3
  58.         STA     $FF20
  59. AGAIN   LEAU    RCVINT,PCR
  60.         STU     $10D
  61.         LDA     #$3D
  62.         STA     $FF01
  63.         CLR     $FF02
  64.         ANDCC   #INTSON
  65. ; MAIN LOOP
  66. ; LOOK FOR A START BIT
  67. SEARC1  LDB     #100
  68. SEARC2  SYNC
  69.         LDA     SHFTRG
  70.         CMPA    #$55
  71.         BEQ     SBIT
  72.         DECB
  73.         BNE     SEARC2
  74. ; DETECT RING/BUSY SIGNAL
  75.         LDB     #BLUE
  76.         ROLA
  77.         LDA     SIGNAL
  78.         RORA
  79.         STA     SIGNAL
  80.         BEQ     RSTSGN
  81.         COMA
  82.         BEQ     RSTSGN
  83.         LDB     #ORANGE
  84. RSTSGN  STB     [$88]
  85. ; TEST THE KEYBOARD
  86.         LDA     RSTROB
  87.         LSLA
  88.         CMPA    #$FE
  89.         LBNE    KEYIN
  90.         BRA     SEARC1
  91. ; HAVE A START BIT
  92. SBIT    LDB     #ORANGE
  93.         STB     [$88]
  94.         LDB     #BAUD+BAUD/8
  95. SWAIT   SYNC
  96.         DECB
  97.         BNE     SWAIT
  98. ; READY TO SHFT DATA BITS
  99.         CLR     DATA
  100.         LDX     #5
  101.         LDA     #$55
  102. DBIT    LDB     #BAUD
  103. DTRY    SYNC
  104.         DECB
  105.         CMPA    SHFTRG
  106.         BEQ     DHAVE
  107.         CMPB    #BAUD*2/3
  108.         BHS     DTRY
  109.         ORCC    #1
  110. DHAVE   ROR     DATA
  111. DWAIT   SYNC
  112.         DECB
  113.         BNE     DWAIT
  114.         LEAX    -1,X
  115.         BNE     DBIT
  116. ; HAVE A CHARACTER
  117.         LDA     DATA
  118.         LSRA
  119.         LSRA
  120.         LSRA
  121.         ANDA    #$1F
  122. ; PRINT WITH INTS MASKED
  123.         ORCC    #INTSOFF
  124.         BSR     PRINT
  125.         ANDCC   #INTSON
  126.         BRA     SEARC1
  127. ; PRINT SUBROUTINES:
  128. ; PRINT ASCII STRING
  129. PRINT1  BSR     PRINTA
  130. PRINTS  LDA     ,X+
  131.         BNE     PRINT1
  132.         RTS
  133. ; PRINT ASCII CHARACTER
  134. PRINTA  PSHS    A,B,X,Y
  135.         BRA     NOTFL
  136. ; PRINT BAUDOT CHARACTER
  137. ; BAUDOT CODE IS IN ACCA
  138. PRINT   PSHS    A,B,X,Y
  139.         ORA     SHIFT
  140.         LEAX    BAUDAS,PCR
  141.         LDA     A,X
  142.         BPL     NOTFL
  143.         ANDA    #$20
  144.         STA     SHIFT
  145.         BRA     PRINTZ
  146. ; PRINTABLE CHARACTER
  147. NOTFL   BSR     CURSUB
  148.         LDX     $88
  149.         CMPA    #$08
  150.         BLO     CURSOK
  151.         BNE     NOTBS
  152.         TFR     X,D
  153.         ANDB    #$1F
  154.         BEQ     CURSOK
  155.         LEAX    -1,X
  156.         BRA     CURSOK
  157. NOTBS   CMPA    #$0A
  158.         BNE     NOTLF
  159.         LEAX    32,X
  160.         BRA     TSTCUR
  161. NOTLF   CMPA    #$0D
  162.         BNE     NOTCR
  163.         TFR     X,D
  164.         ANDB    #$E0
  165.         TFR     D,X
  166.         BRA     CURSOK
  167. NOTCR   ORA     #$40
  168. STOCHR  STA     ,X+
  169. TSTCUR  CMPX    #$600
  170.         BLO     CURSOK
  171.         LDY     #$400
  172. SCROLL  LDA     32,Y
  173.         STA     ,Y+
  174.         CMPY    #$5E0
  175.         BLO     SCROLL
  176.         LDA     #$60
  177. CLREND  STA     ,Y+
  178.         CMPY    #$600
  179.         BLO     CLREND
  180.         LEAX    -32,X
  181. CURSOK  STX     $88
  182.         BSR     CURSUB
  183. PRINTZ  PULS    A,B,X,Y,PC
  184. ; NON DESTRUCTIVE CURSOR
  185. CURSUB  PSHS    A,B
  186.         LDA     CURCHR
  187.         LDB     [$88]
  188.         STB     CURCHR
  189.         STA     [$88]
  190.         PULS    A,B,PC
  191. ; TRANSMIT ROUTINE
  192. KEYIN   LDA     #BLUE
  193.         STA     [$88]
  194.         LEAU    HSINT,PCR
  195.         STU     $10D
  196.         LDA     #$35
  197.         STA     $FF01
  198.         LDA     #1
  199.         STA     XSHIFT
  200. ; SCAN THE KEYBOARD
  201. GETCHR  LDX     #200
  202. GETCH2  LDA     CHRBUF
  203.         BNE     GOTCHR
  204.         LBSR    POLCAT
  205.         BNE     GOTCHR
  206.         LEAX    -1,X
  207.         BNE     GETCH2
  208.         LBRA    AGAIN
  209. GOTCHR  CLR     CHRBUF
  210.         TFR     A,B
  211.         ANDA    #$20
  212.         ANDB    #$1F
  213.         CMPA    XSHIFT
  214.         BEQ     SHFTOK
  215.         STA     XSHIFT
  216.         LDA     #$1B
  217.         BHS     XMSHFT
  218.         LDA     #$1F
  219. XMSHFT  BSR     XMIT
  220. SHFTOK  TFR     B,A
  221.         BSR     XMIT
  222.         BRA     GETCHR
  223. XMIT    PSHS    A,B
  224.         LBSR    PRINT
  225.         CLR     CLOCK
  226.         ORCC    #$01
  227.         BSR     XMIB
  228.         ANDCC   #$FE
  229.         BSR     XMIB
  230.         LDB     #5
  231. XMIL    LSRA
  232.         BSR     XMIB
  233.         DECB
  234.         BNE     XMIL
  235.         ORCC    #1
  236.         BSR     XMIB
  237.         PULS    A,B,PC
  238. ; ROUTINE TO XMIT C BIT
  239. XMIB    PSHS    CC,B
  240.         LDB     #1
  241.         ROLB
  242.         STB     FREQ
  243.         CLR     CLOCK
  244.         PSHS    A,B,U
  245.         LDA     CHRBUF
  246.         BNE     BUFULL
  247.         LBSR    POLCAT
  248.         STA     CHRBUF
  249. BUFULL  PULS    A,B,U
  250. XWAIT   LDB     CLOCK
  251.         CMPB    #BAUD
  252.         BLO     XWAIT
  253.         PULS    CC,B,PC
  254. ; KEYBOARD SCAN ROUTINE
  255. ; USES A,B AND U
  256. POLCAT  LDU     #8+ROLOVR
  257.         LDB     #$7F
  258.         STB     $FF02
  259. SCAN1   SYNC
  260.         LDA     STROB
  261.         ORA     #$80
  262.         TFR     A,B
  263.         EORA    -1,U
  264.         ANDA    -1,U
  265.         PSHU    B
  266.         BNE     KEYHIT
  267.         ORCC    #1
  268.         ROR     $FF02
  269.         BCS     SCAN1
  270.         BRA     POLZIP
  271. ; A KEY WAS HIT
  272. KEYHIT  LEAU    8,U
  273.         LSRA
  274.         BCC     KEYHIT
  275.         TFR     U,D
  276.         SUBD    #8+ROLOVR
  277.         LEAU    KYBAUD,PCR
  278.         LEAU    D,U
  279.         LDA     ,U
  280.         LDB     7+ROLOVR
  281.         LSLB
  282.         BMI     KYLTRS
  283.         LDA     56,U
  284. KYLTRS  CMPA    #'?
  285.         BNE     POLRET
  286. POLZIP  CLRA
  287. POLRET  RTS
  288. ; RECV INTERRUPT ROUTINE
  289. RCVINT  LDA     $FF00
  290.         STA     RSTROB
  291.         LDA     $FF20
  292.         RORA
  293.         LDD     SHFTRG
  294.         EXG     A,B
  295.         RORA
  296.         STD     SHFTRG
  297.         SYNC
  298.         LDA     $FF00
  299.         RTI
  300. ; XMIT INTERRUPT ROUTINE
  301. HSINT   LDA     $FF00
  302.         STA     STROB
  303.         LDD     CLOCK
  304.         DECB
  305.         BNE     INTR
  306.         LDB     $FF20
  307.         EORB    #$FC
  308.         STB     $FF20
  309.         BMI     INT2
  310.         SYNC
  311.         LDB     $FF00
  312.         LDB     INTA
  313.         ADDB    #$80
  314.         STB     INTA
  315.         ADCA    FREQ
  316.         ADDA    #2
  317.         LDB     #2
  318.         BRA     INTR
  319. INT2    LDB     FREQ
  320. INTR    STD     CLOCK
  321.         SYNC
  322.         LDA     $FF00
  323.         RTI
  324. ; BAUDOT TO ASCII TABLE
  325. ; LTRS:
  326. BAUDAS  FCB     $08
  327.         FCC     /E/
  328.         FCB     10
  329.         FCC     /A SIU/
  330.         FCB     13
  331.         FCC     /DRJNFCK/
  332.         FCC     /TZLWHYP/
  333.         FCC     /QOBG/
  334.         FCB     $A0
  335.         FCC     /MXV/
  336.         FCB     0
  337. ; FIGS:
  338.         FCB     $08
  339.         FCC     /3/
  340.         FCB     10
  341.         FCC     /- \87/
  342.         FCB     13
  343.         FCC     /$4',!:(/
  344.         FCC     /5")2#60/
  345.         FCC     /19?&/
  346.         FCB     0
  347.         FCC     ?./;?
  348. BAUDAZ  FCB     $80
  349. ; KEYBOARD SCAN TO BAUDOT
  350. ; TRANSLATE TABLE - CODED
  351. ; IN ASCII - BITS 0-4 ARE
  352. ; BAUDOT CODE - BIT 5 IS
  353. ; SHIFT BIT - 6,7 IGNORED
  354. KYBAUD  FCC     /?CYNIAMZ/
  355.         FCC     /TFKOR\LX/
  356.         FCC     /VWJEPG^S/
  357.         FCC     /]UQ?B@?D/
  358.         FCC     /673!*05'/
  359.         FCC     /&8.~,#|=/
  360.         FCC     /H???????/
  361. ; SHIFTED:
  362.         FCC     /?#9.)!-:/
  363.         FCC     ?4&+/2|,8?
  364.         FCC     /67*%0'~3/
  365.         FCC     /=51?" ?$/
  366.         FCC     /?-14)?:+/
  367.         FCC     +/2?????9+
  368.         FCC     /(???????/
  369. MSG1    FDB     $0D0A
  370.         FCC     /TDD VERSION 4.3/
  371.         FDB     $0D0A
  372.         FCC     /BY JOHN W. SPALDING/
  373.         FDB     $0D0A
  374.         FDB     $0A00
  375. ZSIZE   =       *-START
  376. ZLAST   =       *-1
  377.         END
  378.