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

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