home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG041.ARK / MORSE.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  8KB  |  775 lines

  1. ;    MORSE PROGRAM FOR 8008
  2. ;    TAKEN FROM BYTE MAGAZINE
  3. ;        OCT 1976 PAGE 57
  4. ;    BY R.J.S. ON 2/2/79
  5. ;
  6. ;
  7. READ    EQU    1
  8. SENSE    EQU    06H 
  9. STATUS    EQU    0
  10. OUTPUT    EQU    06H 
  11. PRINT    EQU    1
  12. MSGSZ    EQU    377Q
  13. BUFOUT    EQU    60Q
  14. BUFSKY    EQU    377Q
  15. BUFSPN    EQU    60Q
  16. WIDTH    EQU    80
  17. CR    EQU    15Q
  18. LF    EQU    12Q
  19. ERCHAR    EQU    7
  20. ESC    EQU    033Q
  21. ESCSYM    EQU    44Q
  22. QUEST    EQU    '?'
  23. DELETE    EQU    177Q
  24. DELSYM    EQU    134Q
  25. ETX    EQU    3
  26. UPARRO    EQU    136Q
  27. BLANK    EQU    40Q
  28.     ORG    100H
  29. ;
  30. STRT:
  31.     LXI    H,MSSGBF
  32.     MOV    M,A
  33.     LXI    H,BAUD
  34.     MVI    M,377Q
  35.     CALL    INCLH
  36.     MVI    M,377Q
  37. STRT1:
  38.     XRA    A
  39.     LXI    H,KYFIFO
  40.     MOV    M,A
  41.     LXI    H,OTFIFO
  42.     MOV    M,A
  43.     LXI    H,CMMND
  44.     MOV    M,A
  45.     CALL    INCLH
  46.     MOV    M,A
  47.     LXI    H,PNFIFO
  48.     MOV    M,A
  49.     OUT    OUTPUT
  50.     CMA
  51.     OUT    0FFH
  52.     CMA
  53. RESTRT:
  54.     CALL    INPEND
  55.     CALL    KYBD
  56.     CALL    PNTR
  57.     LXI    H,CMMND
  58.     XRA    A
  59.     ADD    M
  60.     JNZ    CMMNDR
  61.     CALL    IDLE
  62.     CALL    OTPUT
  63.     JMP    RESTRT
  64. ;
  65. ASCTAB:
  66. ;
  67. ;    ASCII TABLE
  68. ;
  69. ;    A-Z
  70.     DB    41H
  71.     DB    42H
  72.     DB    43H
  73.     DB    44H
  74.     DB    45H
  75.     DB    46H
  76.     DB    47H
  77.     DB    48H
  78.     DB    49H
  79.     DB    4AH
  80.     DB    4BH
  81.     DB    4CH
  82.     DB    4DH
  83.     DB    4EH
  84.     DB    4FH
  85.     DB    50H
  86.     DB    51H
  87.     DB    52H
  88.     DB    53H
  89.     DB    54H
  90.     DB    55H
  91.     DB    56H
  92.     DB    57H
  93.     DB    58H
  94.     DB    59H
  95.     DB    5AH
  96. ;
  97. ;    NUMERALS
  98. ;
  99.     DB    31H
  100.     DB    32H
  101.     DB    33H
  102.     DB    34H
  103.     DB    35H
  104.     DB    36H
  105.     DB    37H
  106.     DB    38H
  107.     DB    39H
  108. ;
  109. ;    SPECIAL CHARATERS
  110. ;
  111.     DB    60Q    ;/0
  112.     DB    55Q    ;/-
  113.     DB    56Q    ;.
  114.     DB    54Q    ;,
  115.     DB    77Q    ;?
  116.     DB    57Q    ;SLASH
  117.     DB    72Q    ;:
  118.     DB    50Q    ;(
  119.     DB    51Q    ;)
  120.     DB    47Q    ;'
  121.     DB    42Q    ;*
  122.     DB    12Q    ;END OF MESSAGE  CR/LF
  123.     DB    12Q    ;END OF WORK (CR/LF)
  124. ASCEND:
  125.     DB    73Q    ;;
  126. ;
  127. ;    MORSE TABLE
  128. ;
  129. MORTAB:
  130.     DB    140Q    ;A
  131.     DB    210Q    ;B
  132.     DB    250Q    ;C
  133.     DB    220Q    ;D
  134.     DB    100Q    ;E
  135.     DB    50Q    ;F
  136.     DB    320Q    ;G
  137.     DB    10Q    ;H
  138.     DB    40Q    ;H
  139.     DB    170Q    ;J
  140.     DB    260Q    ;K
  141.     DB    110Q    ;L
  142.     DB    340Q    ;M
  143.     DB    240Q    ;N
  144.     DB    360Q    ;O
  145.     DB    150Q    ;P
  146.     DB    330Q    ;Q
  147.     DB    120Q    ;R
  148.     DB    20Q    ;S
  149.     DB    300Q    ;T
  150.     DB    60Q    ;U
  151.     DB    30Q    ;V
  152.     DB    160Q    ;W
  153.     DB    230Q    ;X
  154.     DB    270Q    ;Y
  155.     DB    310Q    ;Z
  156.     DB    174Q    ;1
  157.     DB    74Q    ;2
  158.     DB    34Q    ;3
  159.     DB    14Q    ;4
  160.     DB    4Q    ;5
  161.     DB    204Q    ;6
  162.     DB    304Q    ;7
  163.     DB    344Q    ;8
  164.     DB    364Q    ;9
  165.     DB    374Q    ;0
  166.     DB    206Q    ;-
  167.     DB    126Q    ;.
  168.     DB    316Q    ;,
  169.     DB    62Q    ;?
  170.     DB    224Q    ;/
  171.     DB    342Q    ;:
  172.     DB    266Q    ;(
  173.     DB    266Q    ;)
  174.     DB    172Q    ;'
  175.     DB    112Q    ;*
  176.     DB    124Q    ;EOM CR/LF
  177.     DB    26Q    ;EOW CR/LF
  178. MOREND:
  179.     DB    252Q    ;;
  180. ;
  181. ;
  182. ENTPAK:
  183.     MOV    A,M
  184.     DCR    C    ;******
  185.     CMP    C    ;*****
  186.     JZ    ERROFL
  187.     ADI    1
  188.     MOV    M,A
  189.     ADD    L
  190.     MOV    L,A
  191.     JNC    OK
  192.     INR    H
  193. OK:
  194.     MOV    M,B
  195.     XRA    A
  196.     RET
  197. ERROFL:
  198.     ADI    1
  199.     RET
  200. ;
  201. ;
  202. PXP
  203.     MOV    A,M
  204.     SUI    1
  205.     MOV    M,A
  206.     JMP    PXPY
  207. ;
  208. PXPLOP:
  209.     CALL    INCLH
  210.     MOV    C,M
  211.     CALL    DCRLH
  212.     MOV    M,C
  213.     MOV    A,B
  214.     SUI    1
  215. PXPY:
  216.     RZ
  217.     MOV    B,A
  218.     CALL    INCLH
  219.     JMP    PXPLOP
  220. ;
  221. INCLH:
  222.     INR    L
  223.     
  224.     RNZ
  225.     INR    H
  226.     RET
  227. ;
  228. DCRLH:
  229.     MOV    A,L
  230.     SUI    1
  231.     MOV    L,A
  232.     RNC
  233.     DCR    H
  234.     RET
  235. ;
  236. TICK:
  237.     LXI    H,BAUD
  238.     MVI    C,50Q
  239. WAIT2:
  240.     MOV    B,M
  241. WAIT1:
  242.     DCR    B
  243.     JNZ    WAIT1
  244.     DCR    C
  245.     JNZ    WAIT2
  246.     CALL    KYBD
  247.     CALL    PNTR
  248.     RET
  249. ;
  250. TICKI:
  251.     LXI    H,BAUDI
  252.     MVI    C,05H
  253.     JMP    WAIT2
  254. ;
  255. DOT:
  256.     MVI    A,377Q
  257.     OUT    OUTPUT
  258.     CMA
  259.     OUT    0FFH
  260.     CMA
  261.     JMP    FINDOT
  262. ;
  263. DASH:
  264.     MVI    A,377Q
  265.     OUT    OUTPUT
  266.     CMA
  267.     OUT    0FFH
  268.     CMA
  269.     CALL    TICK
  270.     CALL    TICK
  271. FINDOT:
  272.     CALL    TICK
  273.     XRA    A
  274.     OUT    OUTPUT
  275.     CMA
  276.     OUT    0FFH
  277.     CMA
  278.     CALL    TICK
  279.     RET
  280. ;
  281. CMMNDR:
  282.     CALL    UNPAK
  283.     JZ    CMMNDR
  284.     CPI    ESC
  285.     JZ    CLRMD
  286.     CPI    'L'
  287.     JZ    LDNXT
  288.     CPI    'P'
  289.     JZ    PRT
  290.     CPI    'S'
  291.     JZ    SNDNX
  292.     CPI    'T'
  293.     JZ    TEST
  294.     CPI    'W'
  295.     JZ    WPM
  296.     MVI    B,QUEST
  297.     CALL    PPAK
  298.     JMP    CMMNDR
  299. ;
  300. LDNXT:
  301.     LXI    H,MSSGBF
  302.     MVI    M,0
  303. LDNXT1:
  304.     CALL    UNPAK
  305.     JZ    LDNXT1
  306.     CPI    ESC
  307.     JZ    CLRMD
  308.     MOV    B,A
  309.     LXI    H,MSSGBF
  310.     CPI    DELETE
  311.     JNZ    LDNXT2
  312.     XRA    A
  313.     ADD    M
  314.     JZ    LDNXT1
  315.     SBI    1
  316.     MOV    M,A
  317.     JMP    LDNXT1
  318. LDNXT2:
  319.     MVI    C,MSGSZ
  320.     CALL    ENTPAK
  321.     CNZ    WHOOP
  322.     JMP    LDNXT1
  323. ;
  324. WHOOP:
  325.     IN    STATUS
  326.     ANI    02H
  327.     JZ    WHOOP
  328.     MVI    A,ERCHAR
  329.     OUT    PRINT
  330.     RET
  331. ;
  332. PRT:
  333.     LXI    H,SOH
  334.     MVI    M,0
  335.     CALL    DMPSUB
  336.     JMP    CLRMD
  337. ;
  338. DMPSUB:
  339.     LXI    H,MSSCNT
  340.     MVI    M,0
  341. PRT1:
  342.     CALL    PNTR
  343.     CALL    KYBD
  344.     CALL    OTPUT
  345.     LXI    H,MSSGBF
  346.     XRA    A
  347.     ADD    M
  348.     RZ
  349.     LXI    H,MSSCNT
  350.     CMP    M
  351.     RZ
  352.     MOV    B,M
  353.     INR    B
  354.     MOV    M,B
  355. ;
  356. PR4:
  357.     MVI    A,MSSGBF AND 0FFH
  358.     ADD    M
  359.     MOV    L,A
  360.     MVI    H,MSSGBF/256
  361.     JNC    PR2
  362.     INR    H
  363. PR2:
  364.     MOV    B,M
  365.     XRA    A
  366.     LXI    H,SOH
  367.     ADD    M
  368.     JNZ    SOH1
  369.     CALL    PPAK
  370.     JMP    PR3
  371. SOH1:
  372.     LXI    H,OTFIFO
  373.     MVI    C,BUFOUT
  374.     CALL    ENTPAK
  375. PR3:
  376.     JZ    PRT1
  377.     CALL    PNTR
  378.     CALL    KYBD
  379.     CALL    OTPUT
  380.     LXI    H,MSSCNT
  381.     JMP    PR4
  382. ;
  383. SNDNX:
  384.     LXI    H,SOH
  385.     MVI    M,1
  386.     CALL    DMPSUB
  387.     JMP    CLRMD
  388. ;
  389. TEST:
  390.     LXI    H,SOH
  391.     MVI    M,1
  392.     CALL    DMPSUB
  393.     CALL    UNPAK
  394.     JZ    TEST
  395.     CPI    ESC
  396.     JZ    CLRMD
  397. TEST1:
  398.     MVI    B,QUEST
  399.     CALL    PPAK
  400.     JNZ    TEST1
  401.     JMP    TEST
  402. ;
  403. WPM:
  404.     CALL    UNPAK
  405.     JZ    WPM
  406.     ANI    37Q
  407.     RLC
  408.     RLC
  409.     RLC
  410.     ORI    7Q
  411.     LXI    H,BAUD
  412.     MOV    M,A
  413. ;
  414. CLRMD:
  415.     LXI    H,CMMND
  416.     MVI    M,0
  417.     JMP    RESTRT
  418. ;
  419. UNPAK:
  420.     CALL    PNTR
  421.     CALL    KYBD
  422.     CALL    OTPUT
  423.     LXI    H,KYFIFO
  424.     XRA    A
  425.     ADD    M
  426.     RZ
  427.     CALL    INCLH
  428.     MOV    E,M
  429.     CALL    DCRLH
  430.     CALL    PXP
  431.     ADD    E
  432.     RET
  433. ;
  434. WAITMT:
  435.     IN    STATUS
  436.     ANI    02
  437.     JZ    WAITMT
  438.     RET
  439. ;
  440. KYBD:
  441.     IN    STATUS
  442.     ANI    01
  443.     RZ
  444.     IN    READ
  445.     ANI    177Q
  446.     CPI    ETX
  447.     JNZ    NETX
  448.     XRA    A
  449.     OUT    OUTPUT
  450.     CMA
  451.     OUT    0FFH
  452.     CMA
  453.     CALL    WAITMT
  454.     MVI    A,UPARRO
  455.     OUT    PRINT
  456.     CALL    WAITMT
  457.     MVI    A,'C'
  458.     OUT    PRINT
  459.     CALL    WAITMT
  460.     JMP    STRT1
  461. NETX:
  462.     LXI    H,KYFIFO
  463.     MOV    B,A
  464.     MVI    C,BUFSKY
  465.     CALL    ENTPAK
  466.     CNZ    WHOOP
  467. ;
  468. PPAK:
  469.     LXI    H,PNFIFO
  470.     MVI    C,BUFSPN
  471.     CALL    ENTPAK
  472.     RET
  473. ;
  474. PNTR:
  475.     IN    STATUS
  476.     ANI    02
  477.     RZ
  478.     LXI    H,TWIDTH
  479.     XRA    A
  480.     ADD    M
  481.     JNZ    PRT2
  482.     MVI    A,CR
  483.     OUT    PRINT
  484.     CALL    WAITMT
  485.     MVI    A,LF
  486.     OUT    PRINT
  487.     MVI    M,WIDTH
  488.     RET
  489. PRT2:
  490.     LXI    H,PNFIFO
  491.     XRA    A
  492.     ADD    M
  493.     RZ
  494. ;
  495.     CALL    INCLH
  496. NXTPNT:
  497.     MOV    E,M
  498.     LXI    H,PNFIFO
  499.     CALL    PXP
  500.     LXI    H,TWIDTH
  501.     MOV    B,M
  502.     DCR    B
  503.     MOV    M,B
  504.     MOV    A,E
  505.     CPI    LF
  506.     JZ    INCRLF
  507.     CPI    CR
  508.     JZ    INCRLF
  509.     CPI    DELETE
  510.     JZ    DEL
  511.     CPI    ESC
  512.     JNZ    PNT1
  513.     MVI    A,ESCSYM
  514. PNT1:
  515.     OUT    PRINT
  516.     RET
  517. INCRLF:
  518.     MVI    M,0
  519.     RET
  520. DEL:
  521.     MVI    A,DELSYM
  522.     OUT    PRINT
  523.     RET
  524. ;
  525. XLATER:
  526.     LXI    H,ASCTAB
  527. THISIT:
  528.     CMP    M
  529.     JZ    CONVT
  530.     CALL    INCLH
  531.     MOV    B,A
  532.     MVI    A,ASCEND/256
  533.     CMP    H
  534.     JC    NTFUND
  535.     MVI    A,ASCEND AND 0FFH
  536.     CMP    L
  537.     JC    NTFUND
  538.     MOV    A,B
  539.     JMP    THISIT
  540. CONVT:
  541.     MVI    A,MORTAB AND 0FFH
  542.     SUI    ASCTAB AND 0FFH
  543.     JNC    OK1
  544.     DCR    H
  545. OK1:
  546.     ADD    L
  547.     JNC    OK2
  548.     INR    H
  549. OK2:
  550.     MOV    L,A
  551.     MVI    A,MORTAB/256
  552.     SBI    ASCTAB/256
  553.     ADD    H
  554.     MOV    H,A
  555.     MOV    A,M
  556.     RET
  557. NTFUND:
  558.     MVI    A,200Q
  559.     RET
  560. ;
  561. XLAT:
  562.     CPI    377Q
  563.     RAL
  564.     JNC    $-1
  565.     CPI    0
  566.     JNZ    XLAT1
  567.     MVI    A,DELSYM
  568.     RET
  569. ;
  570. XLAT1:
  571.     LXI    H,MORTAB
  572. THIS:
  573.     CMP    M
  574.     JZ    MCONVT
  575.     CALL    INCLH
  576.     MOV    B,A
  577.     MVI    A,MOREND/256
  578.     CMP    H
  579.     JC    NTFND
  580.     MVI    A,MOREND AND 0FFH
  581.     CMP    L
  582.     JC    NTFND
  583.     MOV    A,B
  584.     JMP    THIS
  585. MCONVT:
  586.     MVI    A,ASCTAB AND 0FFH
  587.     SUI    MORTAB AND 0FFH
  588.     JC    MOK1
  589.     DCR    H
  590. MOK1:
  591.     ADD    L
  592.     JNC    MOK2
  593.     INR    H
  594. MOK2:
  595.     MOV    L,A
  596.     MVI    A,ASCTAB/256
  597.     SBI    MORTAB/256
  598.     ADD    H
  599.     MOV    H,A
  600.     MOV    A,M
  601.     RET
  602. NTFND:
  603.     MVI    A,BLANK
  604.     RET
  605. ;
  606. OTPUT:
  607.     LXI    H,OTFIFO
  608.     XRA    A
  609.     ADD    M
  610.     RZ
  611.     CALL    INCLH
  612.     MOV    A,M
  613.     CPI    DELETE
  614.     JNZ    OTPUT1
  615.     MVI    D,7
  616. OTERR:
  617.     CALL    DOT
  618.     DCR    D
  619.     JNZ    OTERR
  620.     JMP    OUTEND
  621. OTPUT1:
  622.     CALL    XLATER
  623.     MOV    D,A
  624.     CPI    200Q
  625.     JNZ    GOODCH
  626.     MVI    D,6
  627. SPACE:
  628.     CALL    TICK
  629.     DCR    D
  630.     JNZ    SPACE
  631.     JMP    OUTEND
  632. GOODCH:
  633.     CPI    200Q
  634.     JZ    OUTEND
  635.     JNC    DSH
  636.     CALL    DOT
  637.     JMP    OTLOOP
  638. DSH:
  639.     CALL    DASH
  640. OTLOOP:
  641.     MOV    A,D
  642.     ANI    177Q
  643.     RLC
  644.     MOV    D,A
  645.     JMP    GOODCH
  646. OUTEND:
  647.     CALL    TICK
  648.     CALL    TICK
  649.     LXI    H,OTFIFO
  650.     CALL    PXP
  651.     RET
  652. ;
  653. IDLE:
  654.     LXI    H,KYFIFO
  655.     XRA    A
  656.     ADD    M
  657.     RZ
  658.     CALL    INCLH
  659.     MOV    E,M
  660.     CALL    DCRLH
  661.     CALL    PXP
  662.     MOV    A,E
  663.     CPI    ESC
  664.     JZ    IDLE1
  665.     LXI    H,OTFIFO
  666.     MOV    B,A
  667.     MVI    C,BUFOUT AND 0FFH
  668.     CALL    ENTPAK
  669.     CNZ    WHOOP
  670.     RET
  671. IDLE1:
  672.     LXI    H,CMMND
  673.     MVI    M,1
  674.     RET
  675. ;
  676. INPEND:
  677.     IN    SENSE
  678.     ANI    1
  679.     RNZ
  680.     LXI    H,INCHAR
  681.     MVI    M,1
  682. INTIME:
  683.     LXI    H,TIMER
  684.     MVI    M,0
  685. INSENS:
  686.     CALL    TICKI
  687.     LXI    H,TIMER
  688.     MOV    B,M
  689.     INR    B
  690.     MOV    M,B
  691.     IN    SENSE
  692.     ANI    1
  693.     JZ    INSENS
  694.     MVI    E,0
  695.     MOV    A,B
  696.     CPI    20Q
  697.     JNC    INDASH
  698.     CPI    6
  699.     JNC    INPOK
  700.     LXI    H,BAUDI
  701.     MOV    A,M
  702.     CPI    2
  703.     JC    INPOK
  704.     SBI    1
  705.     MOV    M,A
  706.     JMP    INPOK
  707. ;
  708. INDASH:
  709.     LXI    H,BAUDI
  710.     MOV    A,B
  711.     CPI    34Q
  712.     JC    OKDASH
  713.     MOV    A,M
  714.     CPI    376Q
  715.     JNC    OKDASH
  716.     ADI    1
  717.     MOV    M,A
  718. OKDASH:
  719.     MVI    E,1
  720. INPOK:
  721.     LXI    H,INCHAR
  722.     MOV    A,M
  723.     RAL
  724.     ANI    376Q
  725.     ORA    E
  726.     MOV    M,A
  727.     LXI    H,TIMER
  728.     MVI    M,0
  729. UPTIME:
  730.     CALL    TICKI
  731.     IN    SENSE
  732.     ANI    1
  733.     JZ    INTIME
  734.     LXI    H,TIMER
  735.     MOV    B,M
  736.     INR    B
  737.     MOV    M,B
  738.     MOV    A,B
  739.     CPI    377Q
  740.     JNZ    NOTEOM
  741.     MVI    B,LF
  742.     CALL    PPAK
  743.     CALL    PPAK
  744.     RET
  745. NOTEOM:
  746.     CPI    60Q
  747.     JNZ    ENDLET
  748.     MVI    A,1
  749.     JMP    MPAK
  750. ENDLET:
  751.     CPI    24Q
  752.     JNZ    UPTIME
  753.     LXI    H,INCHAR
  754.     MOV    A,M
  755.     MVI    M,1
  756. MPAK:
  757.     CALL    XLAT
  758.     MOV    B,A
  759.     CALL    PPAK
  760.     JMP    UPTIME
  761. ;
  762. ;
  763. CMMND    DS    1
  764. TWIDTH    DS    1
  765. MSSCNT    DS    1
  766. SOH    DS    1
  767. BAUD    DS    1
  768. BAUDI    DS    1
  769. TIMER    DS    1
  770. INCHAR    DS    1
  771. KYFIFO    EQU    $
  772. PNFIFO    EQU    KYFIFO+BUFSKY
  773. OTFIFO    EQU    PNFIFO+BUFSPN
  774. MSSGBF    EQU    OTFIFO+BUFOUT
  775.