home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128BBS / DTJMODSRC.ARC / A / P-XMODEMCRC / S
Encoding:
Text File  |  2019-04-13  |  12.5 KB  |  600 lines

  1.            '─╘╩ ╪MODEM├╥├ W/ STRIPPER
  2.            'BY ┴NDREW ┬ERNHARDT
  3.            'AS OF ╙EPTEMBER 5, 1991
  4.  
  5.            ORG 40961
  6.  
  7.            NAM "P-╪═╧─┼═├╥├/╙"
  8.            HDR "A/DICT"
  9.  
  10.            JMP "X-RCV"
  11.            JMP "X-SND"
  12.  
  13. "SOH"      DFL 1
  14. "EOT"      DFL 4
  15. "ACK"      DFL 6
  16. "NAK"      DFL 21
  17. "CAN"      DFL 24
  18. "CRC"      DFL 67
  19.  
  20. "KEYCHAR"  DFL 631
  21. "RSSTAT"   DFL 663
  22.  
  23. "XBUF1"    DFL 42800
  24. "XBUF2"    DFL 43830
  25.  
  26. "STACKSAV" DF &00
  27. "SENDFLAG" DF &00
  28. "XFERFLAG" DF &FF
  29. "LASTGOOD" DF &01
  30. "BYTECNT"  DF &00
  31. "PADCHAR"  DF &00
  32. "BLOCKNBR" DF &00
  33. "ERRORNBR" DF &00
  34. "LASTCHAR" DF &00
  35. "PREVMODE" DF &00
  36. "MDMSAVE"  DF &00
  37. "BUFFNBR"  DF &00
  38. "CRC-L"    DF &00
  39. "CRC-H"    DF &00
  40. "MAXBYTE1" DF &FF
  41. "MAXBYTE2" DF &FF
  42. "MAXBYTE3" DF &FF
  43. "RCVD-L"   DF &00
  44. "RCVD-H"   DF &00
  45. "1STBYTE"  DF &00
  46. "CRCFLAG"  DF &01
  47. "BLKTYPE"  DF &00
  48.  
  49. "IN.TAB"   DF $XMODEM V2.0S  
  50.            DF &67
  51.            DF $ RX:   TX:   B#:0000 E:00
  52. "IN.COL"   DF $EEEEEEEEEEEEEEECCCCCCCCC
  53.            DF $CCCCCCCCCCCCCCCC
  54. "DSP.TAB"  DF &B0B1B2B3B4B5B6B7
  55.            DF &B8B9C1C2C3C4C5C6
  56.  
  57. '======================================
  58. ' ═AIN SEND-FILE ROUTINE...
  59.  
  60. "X-SND"    TSX
  61.            STX ("STACKSAV")
  62.            LDA 1
  63.            STA ("SENDFLAG")
  64.            JSR "INIT"
  65. "X-SND0"   JSR "JIFFYZ"
  66. "X-SND1"   JSR "GETBYTE"
  67.            CMP "CAN"
  68.            BEQ "X-SNDCAN"
  69.            STA ("LASTCHAR")
  70.            CMP "CRC"
  71.            BEQ "X-SNDCRC"
  72.            CMP "NAK"
  73.            BEQ "X-SNDNAK"
  74.            LDX ("XFERFLAG")
  75.            BMI "X-SND1"
  76.            CMP "ACK"
  77.            BEQ "X-SNDACK"
  78.            BNE "X-SND1"
  79. "X-SNDNAK" LDA ("XFERFLAG")
  80.            BNE "X-SND4"
  81.            STA ("CRCFLAG")
  82. "X-SND4"   JSR "INCERR"
  83.            LDA ("ERRORNBR")
  84.            CMP 7
  85.            BNE "X-SB9"
  86.            STA ("PREVMODE")
  87.            JSR "ALTBLOCK"
  88.            DEC ("BLOCKNBR")
  89. "X-SB9"    LDA 0
  90.            BEQ "X-SND2"
  91. "X-SNDCRC" LDA ("XFERFLAG")
  92.            CMP 1
  93.            BEQ "X-SND1"
  94.            BNE "X-SND3"
  95. "X-SNDACK" LDA 1
  96.            STA ("XFERFLAG")
  97. "X-SND3"   LDA 1
  98. "X-SND2"   STA ("LASTGOOD")
  99.            LDA ("RIDBS")
  100.            STA ("RIDBE")
  101.            JSR "X-LOAD"
  102.            JSR "X-SEND"
  103.            LDA ("XFERFLAG")
  104.            BPL "X-SND0"
  105.            INC ("XFERFLAG")
  106.            BPL "X-SND0"
  107. "X-SNDCAN" CMP ("LASTCHAR")
  108.            BEQ "X-SC0"
  109.            STA ("LASTCHAR")
  110.            JMP "X-SND1"
  111. "X-SC0"    JMP "EX-CAN"
  112.  
  113. "EX-OK"    LDA 0
  114.            DF &2C
  115. "EX-TIME"  LDA 1
  116.            DF &2C
  117. "EX-CAN"   LDA 2
  118.            DF &2C
  119. "EX-ABRT"  LDA 3
  120.            DF &2C
  121. "EX-FULL"  LDA 5
  122. "EXIT"     LDX ("STACKSAV")
  123.            TXS
  124.            PHA
  125.            JSR "+CLRCHN"
  126.            PLA
  127.            PHA
  128.            BEQ "EX-0"
  129.            LDA "CAN"
  130.            JSR "+CHROUT"
  131.            LDA "CAN"
  132.            JSR "+CHROUT"
  133.            LDA 8
  134.            JSR "+CHROUT"
  135.            LDA 8
  136.            JSR "+CHROUT"
  137. "EX-0"     LDA ("MDMSAVE")
  138.            STA ("MDM-MODE")
  139.            PLA
  140.            RTS
  141.  
  142. "GETBYTE"  LDA 0
  143.            STA ("RSSTAT")
  144. "GB-0"     JSR "EXITCHCK"
  145.            JSR "GETIN"
  146.            LDX ("RSSTAT")
  147.            BEQ "GB-3"
  148.            LDA ("JIFFY2")
  149.            LDX ("SENDFLAG")
  150.            BEQ "GB-1"
  151.            CMP 23
  152.            BCC "GB-0"
  153.            JMP "EX-TIME"
  154. "GB-1"     CMP 3
  155.            BEQ "GB-2"
  156.            CMP 2
  157.            BNE "GB-0"
  158.            LDA ("JIFFY3")
  159.            CMP 88
  160.            BNE "GB-0"
  161. "GB-2"     SEC
  162.            RTS
  163. "GB-3"     LDX 25
  164.            JSR "DISPCLR"
  165.            LDX 19
  166.            JSR "DISPBYTE"
  167.            CLC
  168.            RTS
  169.  
  170. "EXITCHCK" LDA ("CARRIER")
  171.            AND 16
  172.            BNE "EXIT"
  173.            LDA ("KEY?")
  174.            BEQ "EC-0"
  175.            DEC ("KEY?")
  176.            LDA ("KEYCHAR")
  177.            CMP "CAN"
  178.            BEQ "EC-1"
  179. "EC-0"     RTS
  180. "EC-1"     JMP "EX-ABRT"
  181.  
  182. "DOSUM"    PHA
  183.            LDA ("CRCFLAG")
  184.            BNE "DOSUM0"
  185.            PLA
  186.            PHA
  187.            CLC
  188.            ADC ("CRC-H")
  189.            STA ("CRC-H")
  190.            PLA
  191.            RTS
  192. "DOSUM0"   PLA
  193. "DOCRC"    PHA
  194.            LDX 8
  195.            EOR ("CRC-H")
  196.            STA ("CRC-H")
  197. "DC-0"     ASL ("CRC-L")
  198.            ROL ("CRC-H")
  199.            BCC "DC-1"
  200.            LDA &21
  201.            EOR ("CRC-L")
  202.            STA ("CRC-L")
  203.            LDA &10
  204.            EOR ("CRC-H")
  205.            STA ("CRC-H")
  206. "DC-1"     DEX
  207.            BNE "DC-0"
  208.            PLA
  209.            RTS
  210.  
  211. "X-LOAD"   LDA ("STATUS")
  212.            BEQ "X-LOAD1"
  213.            LDY 8
  214. "X-LOAD0"  LDA "EOT"
  215.            JSR "+CHROUT"
  216.            DEY
  217.            BNE "X-LOAD0"
  218.            JMP "EX-OK"
  219. "X-LOAD1"  LDA ("LASTGOOD")
  220.            BEQ "X-LOAD7"
  221.            LDA ("PREVMODE")
  222.            BEQ "X-LOAD2"
  223.            LDA 0
  224.            STA ("PREVMODE")
  225.            JSR "ALTBLOCK"
  226.            INC ("BLOCKNBR")
  227.            JMP "X-LOAD7"
  228. "X-LOAD2"  JSR "ALTBLOCK"
  229.            JSR "INCBLK"
  230.            JSR "CLRCHN"
  231.            LDX 8
  232.            JSR "CHKIN"
  233.            LDY 0
  234.            STY ("ERRORNBR")
  235.            STY ("PADCHAR")
  236.            STY ("KSTATUS")
  237. "X-LOAD3"  LDA ("STATUS")
  238.            BEQ "X-LOAD4"
  239.            LDA ("PADCHAR")
  240.            JMP "X-LOAD6"
  241. "X-LOAD4"  JSR "CHRIN"
  242.            PHA
  243.            LDA ("STATUS")
  244.            ORA ("KSTATUS")
  245.            STA ("STATUS")
  246.            LDX 26
  247.            PLA
  248.            CMP 26
  249.            BNE "X-LOAD5"
  250.            LDX 0
  251. "X-LOAD5"  STX ("PADCHAR")
  252. "X-LOAD6"  LDY 0
  253.            STA ["ZTMP1L"],Y
  254.            INC ("ZTMP1L")
  255.            DEC ("BYTECNT")
  256.            BNE "X-LOAD3"
  257.            JSR "+CLRCHN"
  258. "X-LOAD7"  RTS
  259.  
  260. "X-SEND"   JSR "SETBLOCK"
  261.            LDA "SOH"
  262.            JSR "+CHROUT"
  263.            LDA ("BLOCKNBR")
  264.            JSR "+CHROUT"
  265.            EOR &FF
  266.            JSR "+CHROUT"
  267.            LDY 0
  268.            STY ("LASTGOOD")
  269. "X-SEND0"  LDY 0
  270.            LDA ["ZTMP1L"],Y
  271.            JSR "DOCRC"
  272.            JSR "+CHROUT"
  273.            INC ("ZTMP1L")
  274.            DEC ("BYTECNT")
  275.            BNE "X-SEND0"
  276.            LDA ("CRC-H")
  277.            LDX ("CRCFLAG")
  278.            BEQ "X-SEND1"
  279.            JSR "+CHROUT"
  280.            LDA ("CRC-L")
  281. "X-SEND1"  JMP "+CHROUT"
  282.  
  283. "INIT"     LDX ("XUP-MAX1")
  284.            DEX
  285.            TXA
  286.            EOR &FF
  287.            STA ("MAXBYTE2")
  288.            LDA ("XUP-MAX2")
  289.            EOR &FF
  290.            STA ("MAXBYTE3")
  291.            LDX 39
  292. "IN-0"     LDA ("IN.TAB"),X
  293.            ORA 128
  294.            STA (1984),X
  295.            LDA ("IN.COL"),X
  296.            STA (56256),X
  297.            DEX
  298.            BPL "IN-0"
  299.            LDA ("MDM-MODE")
  300.            STA ("MDMSAVE")
  301.            LDA 0
  302.            STA ("KILLOUT")
  303.            STA ("MDM-MODE")
  304.            STA ("KSTATUS")
  305.            STA ("STATUS")
  306. "+CLRCHN"  JSR "CLRCHN"
  307.            LDX 2
  308.            JSR "CHKIN"
  309.            LDX 2
  310.            JSR "CHKOUT"
  311.            LDY 0
  312.            RTS
  313.  
  314. "JIFFYZ"   LDX 0
  315.            STX ("JIFFY1")
  316.            STX ("JIFFY2")
  317.            STX ("JIFFY3")
  318.            RTS
  319.  
  320. "ALTBLOCK" LDA ("BUFFNBR")
  321.            EOR 1
  322.            STA ("BUFFNBR")
  323. "SETBLOCK" LDX L"XBUF1"
  324.            LDY H"XBUF1"
  325.            LDA ("BUFFNBR")
  326.            BEQ "SB-0"
  327.            LDX L"XBUF2"
  328.            LDY H"XBUF2"
  329. "SB-0"     STX ("ZTMP1L")
  330.            STY ("ZTMP1H")
  331.            LDY 128
  332.            STY ("BYTECNT")
  333.            LDY 0
  334.            STY ("CRC-L")
  335.            STY ("CRC-H")
  336.            RTS
  337.  
  338. "DISPCLR"  PHA
  339.            LDA 160
  340.            STA (1984),X
  341.            INX
  342.            STA (1984),X
  343.            PLA
  344.            RTS
  345.  
  346. "DISPBYTE" STY ("DB-Y")
  347.            PHA
  348.            PHA
  349.            JSR "DSP-HI"
  350.            PLA
  351.            JSR "DSP-LO"
  352.            DF &A0
  353. "DB-Y"     DF &00
  354.            PLA
  355.            RTS
  356.  
  357. "DSP-HI"   LSR
  358.            LSR
  359.            LSR
  360.            LSR
  361. "DSP-LO"   AND 15
  362.            TAY
  363.            LDA ("DSP.TAB"),Y
  364.            STA (1984),X
  365.            INX
  366.            RTS
  367.  
  368. "INCERR"   INC ("ERRORNBR")
  369.            LDA ("ERRORNBR")
  370.            LDX 1
  371.            CMP 10
  372.            BNE "IE-0"
  373.            JMP "EX-TIME"
  374. "IE-0"     INC (2022),X
  375.            LDA (2022),X
  376.            CMP 186
  377.            BNE "IE-1"
  378.            LDA 176
  379.            STA (2022),X
  380.            DEX
  381.            BPL "IE-0"
  382. "IE-1"     RTS
  383.  
  384. "INCBLK"   INC ("BLOCKNBR")
  385.            LDX 3
  386. "IB-0"     INC (2015),X
  387.            LDA (2015),X
  388.            CMP 186
  389.            BNE "IB-1"
  390.            LDA 176
  391.            STA (2015),X
  392.            DEX
  393.            BPL "IB-0"
  394. "IB-1"     RTS
  395.  
  396. "+CHROUT"  JSR "CHROUT"
  397.            LDX 19
  398.            JSR "DISPCLR"
  399.            LDX 25
  400.            JMP "DISPBYTE"
  401.  
  402. '======================================
  403. ' ═AIN RECV-FILE ROUTINE...
  404.  
  405. "X-RCV"    TSX
  406.            STX ("STACKSAV")
  407.            JSR "INIT"
  408.            LDA 0
  409.            STA ("XFERFLAG")
  410.            INC ("BLOCKNBR")
  411. "X-RCV0"   JSR "INCERR"
  412.            LDA ("XFERFLAG")
  413.            BNE "X-RCV1"
  414.            LDA "CRC"
  415.            LDX ("ERRORNBR")
  416.            CPX 4
  417.            BCC "X-RCV2"
  418.            LDA 0
  419.            STA ("CRCFLAG")
  420. "X-RCV1"   LDA "NAK"
  421. "X-RCV2"   JSR "+CHROUT"
  422.            JSR "JIFFYZ"
  423.            JSR "X-RECV"
  424.            BCS "X-RCV0"
  425.            LDA ("PREVMODE")
  426.            BNE "X-RCV3"
  427.            JSR "X-SAVE"
  428. "X-RCV3"   LDA 1
  429.            STA ("XFERFLAG")
  430.            LDY 0
  431.            STY ("PREVMODE")
  432.            LDA "ACK"
  433.            JMP "X-RCV2"
  434.  
  435. ' GET A BLOCK FROM MODEM...
  436.  
  437. "X-RECV"   JSR "SETBLOCK"
  438. "X-RECV0"  LDY 124
  439.            STY ("RCVD-L")
  440.            LDY 255
  441.            STY ("RCVD-H")
  442.            INY
  443.            STY ("1STBYTE")
  444.            LDA ("CRCFLAG")
  445.            BEQ "X-RECV1"
  446.            DEC ("RCVD-L")
  447. "X-RECV1"  JSR "JIFFYZ"
  448.            JSR "GETBYTE"
  449.            BCS "X-RECV4"
  450.            STA ("LASTCHAR")
  451.            STA ["ZTMP1L"],Y
  452.            LDX ("1STBYTE")
  453.            BNE "X-RECV2"
  454.            INC ("1STBYTE")
  455.            CMP "EOT"
  456.            BNE "X-RECV11"
  457.            STA ("BLKTYPE")
  458.            CLC
  459.            RTS
  460. "X-RECV11" CMP "SOH"
  461.            BEQ "X-RECV2"
  462.            CMP "CAN"
  463.            BNE "X-RECV9"
  464.            LDA 255
  465.            STA ("RCVD-L")
  466.            BNE "X-RECV2"
  467. "X-RECV2"  LDA ["ZTMP1L"],Y
  468.            STA ("BLKTYPE")
  469.            JSR "INCPTR"
  470.            BNE "X-RECV1"
  471.            BEQ "X-RECV5"
  472. "X-RECV4"  SEC
  473.            RTS
  474. "X-RECV5"  JSR "SETBLOCK"
  475.            LDA ("BLKTYPE")
  476.            CMP "CAN"
  477.            BNE "X-RECV13"
  478.            CMP ("LASTCHAR")
  479.            BNE "X-RECV9"
  480.            JMP "EX-CAN"
  481. "X-RECV13" JSR "GOTODATA"
  482. "X-RECV6"  LDA ["ZTMP1L"],Y
  483.            JSR "DOSUM"
  484.            JSR "INCPTR"
  485.            BNE "X-RECV6"
  486. "X-RECV8"  LDA ["ZTMP1L"],Y
  487.            CMP ("CRC-H")
  488.            BNE "X-RECV9"
  489.            LDA ("CRCFLAG")
  490.            BEQ "X-RECV9"
  491.            INY
  492.            LDA ["ZTMP1L"],Y
  493.            CMP ("CRC-L")
  494. "X-RECV9"  BNE "X-PURGE"
  495.            JSR "SETBLOCK"
  496.            LDY 2
  497.            LDA ["ZTMP1L"],Y
  498.            DEY
  499.            EOR &FF
  500.            CMP ["ZTMP1L"],Y
  501.            BNE "X-PURGE"
  502.            CMP ("BLOCKNBR")
  503.            BNE "X-RECV10"
  504.            CLC
  505.            RTS
  506. "X-RECV10" TAX
  507.            INX
  508.            CPX ("BLOCKNBR")
  509.            BNE "X-PURGE"
  510.            DEC ("BLOCKNBR")
  511.            JSR "ALTBLOCK"
  512.            LDA 1
  513.            STA ("PREVMODE")
  514.  
  515. "X-PURGE"  JSR "JIFFYZ"
  516. "X-PUR0"   JSR "GETIN"
  517.            LDA ("RSSTAT")
  518.            BEQ "X-PURGE"
  519.            LDA ("JIFFY3")
  520.            CMP 60
  521.            BCC "X-PUR0"
  522.            RTS
  523.  
  524. "GOTODATA" JSR "SETBLOCK"
  525.            LDX 128
  526.            STX ("RCVD-L")
  527.            LDA 3
  528.            CLC
  529.            ADC ("ZTMP1L")
  530.            STA ("ZTMP1L")
  531.            BCC "GOTO0"
  532.            INC ("ZTMP1H")
  533. "GOTO0"    LDY 0
  534.            RTS
  535.  
  536. "X-SAVE"   JSR "SETBLOCK"
  537.            LDY 0
  538.            LDA ["ZTMP1L"],Y
  539.            PHA
  540.            JSR "ALTBLOCK"
  541.            LDA ["ZTMP1L"],Y
  542.            STA ("BLKTYPE")
  543.            LDX ("XFERFLAG")
  544.            BEQ "X-SAVE3"
  545.            JSR "GOTODATA"
  546.            LDA ("RCVD-L")
  547.            EOR &FF
  548.            CLC
  549.            ADC ("ZTMP1L")
  550.            STA ("ZTMP2L")
  551.            LDA 0
  552.            ADC ("ZTMP1H")
  553.            STA ("ZTMP2H")
  554.            PLA
  555.            PHA
  556.            CMP "EOT"
  557.            BNE "X-SAVE0"
  558.            JSR "DECPTR"
  559.            LDA ["ZTMP2L"],Y
  560. "X-SAVE2"  JSR "DECPTR"
  561.            BEQ "X-SAVE3"
  562.            CMP ["ZTMP2L"],Y
  563.            BEQ "X-SAVE2"
  564. "X-SAVE0"  JSR "CLRCHN"
  565.            LDX 8
  566.            JSR "CHKOUT"
  567.            LDY 0
  568. "X-SAVE1"  LDA ["ZTMP1L"],Y
  569.            JSR "CHROUT"
  570.            INC ("MAXBYTE1")
  571.            BNE "X-SAVE5"
  572.            INC ("MAXBYTE2")
  573.            BNE "X-SAVE5"
  574.            INC ("MAXBYTE3")
  575.            BNE "X-SAVE5"
  576.            JMP "EX-FULL"
  577. "X-SAVE5"  JSR "INCPTR"
  578.            BNE "X-SAVE1"
  579. "X-SAVE3"  JSR "+CLRCHN"
  580.            PLA
  581.            CMP "EOT"
  582.            BEQ "X-SAVE4"
  583.            JMP "INCBLK"
  584. "X-SAVE4"  LDA "ACK"
  585.            JSR "+CHROUT"
  586.            JMP "EX-OK"
  587.  
  588. "INCPTR"   INC ("ZTMP1L")
  589.            BNE "INCPTR0"
  590.            INC ("ZTMP1H")
  591. "INCPTR0"  INC ("RCVD-L")
  592.            RTS
  593.  
  594. "DECPTR"   LDX ("ZTMP2L")
  595.            BNE "DECPTR0"
  596.            DEC ("ZTMP2H")
  597. "DECPTR0"  DEC ("ZTMP2L")
  598.            INC ("RCVD-L")
  599. "DECPTR1"  RTS
  600.