home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128BBS / PROG950307.ARC / A / P-XMODEM < prev    next >
Encoding:
Text File  |  2019-04-13  |  11.1 KB  |  560 lines

  1.            '╪MODEM MODULE
  2.            'BY ┴.╥.┬. AS OF 910724
  3.  
  4.            ORG 40961
  5.  
  6.            JMP "X-RCV"
  7.            JMP "X-SEND"
  8.  
  9.            NAM "P-╪═╧─┼═"
  10.            HDR "A/DICT"
  11.  
  12. "EOT"      DFL 4
  13. "ACK"      DFL 6
  14. "NAK"      DFL 21
  15. "CAN"      DFL 24
  16.  
  17. "KEYCHAR"  DFL 631
  18. "RSSTAT"   DFL 663
  19.  
  20. "XBUF1"    DFL 42990
  21. "XBUF2"    DFL 44020
  22.  
  23. ' ═AIN ╪MODEM SEND ROUTINE
  24.  
  25. "X-SEND"   TSX
  26.            STX ("STACKSAV")
  27.            JSR "X-INIT"
  28.            JSR "XSGETBLK"
  29. "X-S0"     JSR "JIFFYZ"
  30. "X-S1"     LDA ("ERRCNT")
  31.            ORA $0
  32.            STA (1994)
  33.            LDA 1
  34.            JSR "GETBYTE"
  35.            CMP L"CRC"
  36.            BEQ "X-S.CRC"
  37.            CMP L"CAN"
  38.            BEQ "X-S.CAN"
  39. "X-S2"     CMP L"ACK"
  40.            BEQ "X-S.ACK"
  41. "X-S3"     CMP L"NAK"
  42.            BNE "X-S1"
  43.  
  44. ' ╥ECEIVED ╬┴╦ HANDLER
  45.  
  46. "X-S.NAK"  LDA ("SUM-MODE")
  47.            BPL "X-S.N00"
  48.            LDA 1
  49.            STA ("SUM-MODE")
  50. "X-S.N00"  LDA $N
  51.            STA (1987)
  52.            INC ("ERRCNT")
  53.            LDX ("ERRCNT")
  54.            CPX 10
  55.            BNE "X-S.SND"
  56.            BEQ "EX-CANX"
  57.  
  58. ' ╥ECEIVED ├╥├ HANDLER
  59.  
  60. "X-S.CRC"  LDA ("SUM-MODE")
  61.            BPL "X-S1"
  62.            INC ("SUM-MODE")
  63.            LDA $R
  64.            STA (1987)
  65.            BNE "X-S.SND"
  66.  
  67. ' ╥ECEIVED ├┴╬ HANDLER
  68.  
  69. "X-S.CAN"  LDA $C
  70.            STA (1987)
  71.            BNE "EX-CANX"
  72.  
  73. ' ╥ECEIVED ┴├╦ HANDLER
  74.  
  75. "X-S.ACK"  LDA $A
  76.            STA (1987)
  77.            JSR "XSGETBLK"
  78. "X-S.SND"  JSR "XSSNDBLK"
  79.            JMP "X-S0"
  80.  
  81. ' ├ARRIER LOSS CHECK/HANDLER
  82.  
  83. "CARCHECK" LDA ("CARRIER")
  84.            AND 16
  85.            BNE "EXIT"
  86.            RTS
  87.  
  88. ' ┼XIT FILE TRANSFER
  89. "EX-OK"    LDA 0
  90.            DF &2C
  91. "EX-TIME"  LDA 1
  92.            DF &2C
  93. "EX-CANX"  LDA 2
  94.            DF &2C
  95. "EX-ABRT"  LDA 3
  96.            DF &2C
  97. "EX-FULL"  LDA 5
  98.  
  99. "EXIT"     STA (".A.")
  100.            LDX ("STACKSAV")
  101.            TXS
  102.            LDX $E
  103.            CMP 0
  104.            BEQ "EXIT0"
  105.            JSR "+CLRCHN"
  106.            LDA L"CAN"
  107.            JSR "CHROUT"
  108.            LDA L"CAN"
  109.            JSR "CHROUT"
  110.            LDA 8
  111.            JSR "CHROUT"
  112.            LDA 8
  113.            JSR "CHROUT"
  114.            LDX $C
  115. "EXIT0"    STX (1987)
  116.            JSR "CLRCHN"
  117.            LDA ("MDMSAVE")
  118.            STA ("MDM-MODE")
  119.            LDA (".A.")
  120.            RTS
  121.  
  122. ' ╠OCAL ABORT CHECK/HANDLER
  123.  
  124. "KEYCHECK" LDA ("KEY?")
  125.            BEQ "KEYCH0"
  126.            DEC ("KEY?")
  127.            LDA ("KEYCHAR")
  128.            CMP L"CAN"
  129.            BNE "EX-ABRT"
  130. "KEYCH0"   RTS
  131.  
  132. ' ═AIN ╪MODEM RECEIVE ROUTINE
  133.  
  134. "X-RCV"    TSX
  135.            STX ("STACKSAV")
  136.            JSR "X-INIT"
  137. "XMODR00"  JSR "X-R.NAK"
  138. "XMODR18"  JSR "JIFFYZ"
  139.            TAY
  140. "XMODR02"  LDA 0
  141.            JSR "GETBYTE"
  142.            BCS "XMODR00"
  143. "XMODR03"  JSR "DISPBYT"
  144.            STA ("BLOCK"),Y
  145.            LDA ("BLOCK")
  146.            CMP L"CAN"
  147.            BNE "XMODR23"
  148.            JMP "EX-CANX"
  149. "XMODR23"  INY
  150.            LDA 32
  151.            STA (1987)
  152.            JSR "JIFFYZ"
  153.            LDA ("BLOCK")
  154.            CMP L"EOT"
  155.            BEQ "XMODR10"
  156. "XMODR04"  CPY 132
  157.            BNE "XMODR02"
  158. "XMODR05"  JSR "XVALID?"
  159.            BCC "XMODR060"
  160.            BEQ "XMODR06"
  161.            JMP "XMODR21"
  162. "XMODR06"  JSR "XPURGE"
  163.            JMP "XMODR00"
  164. "XMODR060" JSR "COUNTER"   'SAVE BLOCK
  165.            LDA ("XRBLKFLG")
  166.            BEQ "XMODR11"
  167. "XMODR10"  JSR "XRSAVBLK"
  168.            LDA ("BLOCK")
  169.            CMP L"EOT"
  170.            BNE "XMODR11"
  171.            JSR "X-R.ACK"
  172.            JMP "EX-OK"
  173. "XMODR11"  JSR "BUFFSWAP"
  174. "XMODR21"  JSR "X-R.ACK"
  175.            JMP "XMODR18"
  176.  
  177. "X-R.NAK"  LDA ("SUM-MODE")
  178.            BPL "X-R.N00"
  179.            INC ("ERRCNT")
  180.            LDA ("ERRCNT")
  181.            CMP 4
  182.            BCS "X-R.N01"
  183.            LDA 1
  184.            STA ("SUM-MODE")
  185.            BEQ "X-R.N00"
  186. "X-R.N01"  LDA 0
  187.            STA ("SUM-MODE")
  188.            LDA $C
  189.            BEQ "X-R.N02"
  190. "X-R.N00"  LDA $N
  191. "X-R.N02"  STA (1987)
  192.            INC ("ERRCNT")
  193.            LDX ("ERRCNT")
  194.            CPX 10
  195.            BCS "X-R.TIME"
  196.            TXA
  197.            ORA $0
  198.            STA (1994)
  199.            LDA L"NAK"
  200.            JMP "CHROUT"
  201.  
  202. "X-R.TIME" JMP "EX-TIME"
  203.  
  204. "X-R.ACK"  LDA $A          'SEND ┴├╦
  205.            STA (1987)
  206.            LDA 0
  207.            STA ("ERRCNT")
  208.            ORA $0
  209.            STA (1994)
  210.            LDA L"ACK"
  211.            STA ("XRBLKFLG")
  212.            JMP "CHROUT"
  213.  
  214. ' ╟ET A BYTE FROM MODEM W/ ERROR CHECK
  215.  
  216. "GETBYTE"  STA ("SNDFLAG")
  217.            LDA 0
  218.            STA ("RSSTAT")
  219. "GB00"     JSR "CARCHECK"
  220.            JSR "KEYCHECK"
  221.            JSR "GETIN"
  222.            LDX ("RSSTAT")
  223.            BEQ "GB03"
  224.            LDA ("JIFFY2")
  225.            LDX ("SNDFLAG")
  226.            BEQ "GB01"
  227.            CMP 23
  228.            BNE "GB00"
  229.            JMP "EX-TIME"
  230. "GB01"     CMP 3
  231.            BEQ "GB02"
  232.            CMP 2
  233.            BNE "GB00"
  234.            LDA ("JIFFY3")
  235.            CMP 88
  236.            BNE "GB00"
  237. "GB02"     SEC
  238.            RTS
  239. "GB03"     CLC
  240.            RTS
  241.  
  242. ' ╪MODEM OUTPUT BLOCK ROUTINE
  243.  
  244. "XSSNDBLK" LDY 0
  245.            LDA ("BUFFER")
  246.            CMP L"EOT"
  247.            BNE "XSS0"
  248.            JSR "CHROUT"
  249.            LDA $*
  250.            STA (1984)
  251.            STA (1985)
  252.            JMP "EX-OK"
  253. "XSS0"     LDA ("BUFFER"),Y
  254.            JSR "DISPBYT"
  255.            JSR "CHROUT"
  256.            DEC ("MAXBYTE1")
  257.            BNE "XSS1"
  258.            LDA 254
  259.            STA ("MAXBYTE1")
  260.            DEC ("MAXBYTE2")
  261.            LDA ("MAXBYTE2")
  262.            CMP 255
  263.            BNE "XSS1"
  264.            DEC ("MAXBYTE3")
  265.            LDA ("MAXBYTE3")
  266.            CMP 255
  267.            BEQ "XSS2"
  268. "XSS1"     INY
  269.            CPY 132
  270.            BNE "XSS0"
  271.            LDA 32
  272.            STA (1984)
  273.            STA (1985)
  274.            RTS
  275. "XSS2"     JMP "EX-FULL"
  276.  
  277. ' ╪MODEM READ DISK BLOCK ROUTINE
  278.  
  279. "XSGETBLK" LDA 0
  280.            STA ("ERRCNT")
  281.            LDA ("STATUS")
  282.            BEQ "XMG0"
  283.            LDA L"EOT"
  284.            STA ("BUFFER")
  285.            RTS
  286. "XMG0"     JSR "COUNTER"
  287.            LDX 1
  288.            INC ("BUFFER"),X
  289.            LDA ("BUFFER"),X
  290.            EOR 255
  291.            INX
  292.            STA ("BUFFER"),X
  293.            LDX 0
  294.            STX (".A.")
  295.            LDX 8
  296.            JSR "CHKIN"
  297.            LDY 3
  298. "XMG1"     LDX ("STATUS")
  299.            BEQ "XMG2"
  300.            LDA ("PADCHAR")
  301.            CLC
  302.            BCC "XMG4"
  303. "XMG2"     JSR "CHRIN"
  304.            LDX 0
  305.            CMP 0
  306.            BNE "XMG3"
  307.            LDX 26
  308. "XMG3"     STX ("PADCHAR")
  309. "XMG4"     STA ("BUFFER"),Y
  310.            CLC
  311.            ADC (".A.")
  312.            STA (".A.")
  313.            LDA ("STATUS")
  314.            ORA ("KSTATUS")
  315.            STA ("STATUS")
  316.            INY
  317.            CPY 131
  318.            BNE "XMG1"
  319.            LDA (".A.")
  320.            STA ("BUFFER"),Y
  321. "+CLRCHN"  JSR "CLRCHN"
  322.            LDX 2
  323.            JSR "CHKOUT"
  324.            LDX 2
  325.            JMP "CHKIN"
  326.  
  327. ' ╙AVE ╪MODEM BLOCK (STRIPPER REMOVED)
  328.  
  329. "XRSAVBLK" JSR "BUFFSWAP"
  330.            JSR "CLRCHN"
  331.            LDX 8
  332.            JSR "CHKOUT"
  333.            LDY 3
  334. "XRS0"     CPY (".A.")
  335.            BEQ "XRS1"
  336.            LDA ("BUFFER"),Y
  337.            JSR "CHROUT"
  338.            INY
  339.            JMP "XRS0"
  340. "XRS1"     JMP "+CLRCHN"
  341.  
  342. ' ╪MODEM INITIALIZATION
  343.  
  344. "X-INIT"   LDX ("XUP-MAX1")
  345.            DEX
  346.            STX ("MAXBYTE2")
  347.            LDX ("XUP-MAX2")
  348.            STX ("MAXBYTE3")
  349.            LDX 3
  350.            LDA $0
  351. "X-I0"     STA (1989),X
  352.            DEX
  353.            BPL "X-I0"
  354.            LDX 39
  355.            LDA 3
  356. "X-I1"     STA (56256),X
  357.            DEX
  358.            BPL "X-I1"
  359.            LDA ("MDM-MODE")
  360.            STA ("MDM-SAVE")
  361.            LDA 0
  362.            STA ("KILLOUT")
  363.            STA ("MDM-MODE")
  364.            STA ("KSTATUS")
  365.            STA ("STATUS")
  366.            JMP "+CLRCHN"
  367.  
  368. ' ╪MODEM ╥ECEIVER PURGE ROUTINE
  369.  
  370. "XPURGE"   JSR "JIFFYZ"
  371. "XPUR0"    JSR "CARCHECK"
  372.            JSR "GETIN"
  373.            LDA ("RSSTAT")
  374.            BEQ "XPURGE"
  375.            LDA ("JIFFY3")
  376.            BPL "XPUR0"
  377.            RTS
  378.  
  379. ' ├HECK IF BAD BLOCK.  ├=1 IF BAD.
  380. '          ├=1, ┴=1 IF PREV BLOCK.
  381.  
  382. "XVALID?"  JSR "BUFFSET"
  383.            STY ("1KFLAG")
  384.            LDA ["ZTMP1L"],Y
  385.            CMP 1
  386.            BEQ "XV5"
  387.            CMP 2
  388.            BNE "XV3"
  389.            STA ("1KFLAG")
  390. "XV5"      INY
  391.            LDA ["ZTMP1L"],Y
  392.            CMP ("BLKNUM")
  393.            BEQ "XV0"
  394.            DEC ("BLKNUM")
  395.            CMP ("BLKNUM")
  396.            BNE "XV3.0"
  397.            INY
  398.            LDA ["ZTMP1L"],Y
  399.            EOR 255
  400.            CMP ("BLKNUM")
  401.            BNE "XV3.0"
  402.            JMP "XV4"
  403. "XV0"      EOR 255
  404.            INY
  405.            CMP ["ZTMP1L"],Y
  406.            BNE "XV3"
  407. "XV1"      LDA ["ZTMP1L"],Y
  408.            JSR "CHKSUM"
  409.            INC ("ZTMP1L")
  410.            BNE "XV1.0"
  411.            INC ("ZTMP1H")
  412. "XV1.0"    LDA ("REMAINL")
  413.            BNE "XV1.1"
  414.            DEC ("REMAINH")
  415.            BMI "XV1.2"
  416. "XV1.1"    DEC ("REMAINL")
  417.            JMP "XV1"
  418. "XV1.2"    LDA ("SUM-MODE")
  419.            BEQ "XV2"
  420.            LDA ["ZTMP1L"],Y
  421.            JSR "CHKSUM"
  422.            INY
  423.            LDA ["ZTMP1L"],Y
  424.            JSR "CHKSUM"
  425.            LDA ("CRC-SUML")
  426.            ORA ("CRC-SUMH")
  427.            BNE "XV3"
  428.            CLC
  429.            RTS
  430. "XV2"      CMP ["ZTMP1L"],Y
  431.            BNE "XV3"
  432.            CLC
  433.            RTS
  434. "XV3.0"    INC ("BLKNUM")
  435. "XV3"      LDA 0
  436.            SEC
  437.            RTS
  438. "XV4"      LDA 1
  439.            SEC
  440.            RTS
  441.  
  442. ' ╙ET BUFFER & INITIALIZE CHECKSUMS
  443.  
  444. "BUFFSWAP" LDA ("BUFFNBR")
  445.            EOR 1
  446.            STA ("BUFFNBR")
  447. "BUFFSET"  LDA 128
  448.            STA ("REMAINL")
  449.            LDA 0
  450.            STA ("REMAINH")
  451.            LDX L"XBUF1"
  452.            LDY H"XBUF1"
  453.            LDA ("BUFFNBR")
  454.            BEQ "SB00"
  455.            LDA 0
  456.            STA ("REMAINL")
  457.            LDA 4
  458.            STA ("REMAINH")
  459.            LDX L"XBUF2"
  460.            LDY H"XBUF2"
  461. "SB00"     STX ("ZTMP1L")
  462.            STY ("ZTMP1H")
  463.            LDY 0
  464.            STY ("ADD-SUM")
  465.            STY ("CRC-SUML")
  466.            STY ("CRC-SUMH")
  467.            RTS
  468.  
  469. ' ╒PDATE CHECKSUM FOR BYTE IN .┴.
  470.  
  471. "CHKSUM"   PHA
  472.            CLC
  473.            ADC ("ADD-SUM")
  474.            STA ("ADD-SUM")
  475.            PLA
  476.            PHA
  477.            LDX 8
  478.            EOR ("CRC-SUMH")
  479.            STA ("CRC-SUMH")
  480. "CH00"     ASL ("CRC-SUML")
  481.            ROL ("CRC-SUMH")
  482.            BCC "CH01"
  483.            LDA &21
  484.            EOR ("CRC-SUML")
  485.            STA ("CRC-SUML")
  486.            LDA &10
  487.            EOR ("CRC-SUMH")
  488.            STA ("CRC-SUMH")
  489. "CH01"     DEX
  490.            BNE "CH00"
  491.            PLA
  492.            RTS
  493.  
  494. ' ╥ESET TIMER
  495.  
  496. "JIFFYZ"   LDA 0
  497.            STA ("JIFFY1")
  498.            STA ("JIFFY2")
  499.            STA ("JIFFY3")
  500.            RTS
  501.  
  502. ' ─ISPLAY DATABYTE IN HEX
  503.  
  504. "DISPBYT"  STY (".A.")
  505.            PHA
  506.            PHA
  507.            JSR "DISP.HI"
  508.            STA (1984)
  509.            PLA
  510.            JSR "DISP.LO"
  511.            STA (1985)
  512.            PLA
  513.            LDY (".A.")
  514.            RTS
  515.  
  516. ' ├ONVERT NIBBLE TO HEX
  517.  
  518. "DISP.HI"  LSR
  519.            LSR
  520.            LSR
  521.            LSR
  522. "DISP.LO"  AND 15
  523.            TAY
  524.            LDA ("DISPTAB"),Y
  525.            RTS
  526.  
  527. ' ╔NCREMENT BLOCK COUNTER
  528.  
  529. "COUNTER"  LDX 3
  530. "CNTR1"    INC (1989),X
  531.            LDA (1989),X
  532.            CMP $:
  533.            BNE "CNTR2"
  534.            LDA $0
  535.            STA (1989),X
  536.            DEX
  537.            BPL "CNTR1"
  538. "CNTR2"    RTS
  539.  
  540. "STACKSAV" DF &00
  541. "MDMSAVE"  DF &00
  542. "SNDFLAG"  DF &00
  543. "XRBLKFLG" DF &00
  544. "BLKNUM"   DF &00
  545. "ERRCNT"   DF &00
  546. "PADCHAR"  DF &00
  547. "BUFFNBR"  DF &00
  548. "1KFLAG"   DF &01
  549. "REMAINL"  DF &00
  550. "REMAINH"  DF &00
  551. "SUM-MODE" DF &FF
  552. "ADD-SUM"  DF &00
  553. "CRC-SUML" DF &00
  554. "CRC-SUMH" DF &00
  555. "MAXBYTE1" DF &FE
  556. "MAXBYTE2" DF &00
  557. "MAXBYTE3" DF &00
  558.  
  559. "DISPTAB"  DF $0123456789ABCDEF
  560.