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

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