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

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