home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol076 / kip.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  2.3 KB  |  211 lines

  1. ;********************************************************
  2. ;*                            *
  3. ;*         KEYBOARD INPUT PATCH            *
  4. ;*                            *
  5. ;*          SIMULATED FUNCTION            *
  6. ;*    KEYS WITH CPM IN GENERAL; THE SORCERER COMPUTER    *
  7. ;*    IN PARTICULAR, USING KIP.HEX AND KID.COM &  DDT    *
  8. ;*                            *
  9. ;*    AS PUBLISHED IN DR DOBBS JOURNAL, ISSUE 55  MAY    *
  10. ;*    1981, BY JOHN B PALMER.                *
  11. ;*       P.O. BOX 23                    *
  12. ;*       BOONSVILLE, CA, 95415            *
  13. ;*       USA                        *
  14. ;*                            *
  15. ;*    See the Dr. Dobbs article for commented code    *
  16. ;*                            *
  17. ;********************************************************
  18. ;
  19. ;    Keyed in By    John Cepak
  20. ;             Australia
  21. ;
  22. FRERAM    EQU    5C00H
  23. TEXT    EQU    FRERAM+256
  24. KIFUN    EQU    01
  25. TAB    EQU    09
  26. LF    EQU    0AH
  27. CR    EQU    0DH
  28. EOF    EQU    01AH
  29. ;
  30. ACTIVE    EQU    0FFH
  31. INACTIV    EQU    0
  32. ;
  33.     ORG    FRERAM
  34. ;
  35. KIP:
  36. OLDST:    JMP    0
  37. OLDIN:    JMP    0
  38. NEWST:    JMP    STAT
  39. NEWIN:    JMP    INP
  40. ;
  41. ASWITCH    DB    0
  42. EOSTR:    DB    0
  43. STRPTR:    DW    0
  44. SAVCHR:    DB    0
  45. ;
  46. STAT:
  47.     LDA    SWITCH
  48.     ORA    A
  49.     RNZ
  50.     JMP    OLDST
  51. ;
  52. INP:
  53.     LDA    SWITCH
  54.     ORA    A
  55.     JNZ    STRING
  56.     CALL    OLDIN
  57.     CPI    KIFUN
  58.     RNZ
  59.     CALL    OLDIN
  60.     STA    SAVCHR
  61.     ORI    20H
  62.     SUI    '`'
  63.     SUI    16
  64.     CC    OLDIN
  65.     LDA    SAVCHR
  66. SEARCH:
  67.     PUSH    B
  68.     PUSH    H
  69.     CPI    KIFUN
  70.     JZ    PEEK
  71.     MOV    B,A
  72.     LXI    H,TEXT
  73. TRY:
  74.     CALL    IGNORE
  75.     JC    EXIT
  76.     JZ    TRY
  77.     CMP    B
  78.     JZ    FOUND
  79.     CALL    SKIP
  80.     JNC    TRY
  81. EXIT:
  82.     MVI    A,'?'
  83.     POP    H
  84.     POP    B
  85.     RET
  86. ;
  87. PEEK:
  88.     MVI    A,CR
  89.     CALL    DIO
  90.     MVI    A,LF
  91.     LXI    H,TEXT
  92. PRINT:
  93.     CALL    DIO
  94.     MOV    A,M
  95.     INX    H
  96.     CPI    EOF
  97.     JNZ    PRINT
  98.     POP    H
  99.     POP    B
  100.     MVI    A,CR
  101.     RET
  102. ;
  103. DIO:
  104.     PUSH    D
  105.     PUSH    H
  106.     LHLD    01
  107.     LXI    B,9
  108.     DAD    B
  109.     MOV    C,A
  110.     CALL    VIAHL
  111.     POP    H
  112.     POP    D
  113.     RET
  114. ;
  115. VIAHL:
  116.     PCHL
  117. FOUND:
  118.     MOV    A,M
  119.     STA    EOSTR
  120.     INX    H
  121.     SHLD    STRPTR
  122.     MVI    A,ACTIVE
  123. FIN:
  124.     STA    SWITCH
  125.     POP    H
  126.     POP    B
  127.     JMP    INP
  128. ;
  129. SKIP:
  130.     MOV    A,M
  131.     CALL    EOFCHR
  132.     RC
  133.     MOV    C,A
  134.     INX    H
  135. TSTCHR:
  136.     MOV    A,M
  137.     INX    H
  138.     CALL    EOFCHR
  139.     RC
  140.     CMP    C
  141.     RZ
  142.     JMP    TSTCHR
  143. ;
  144. IGNORE:
  145.     MOV    A,M
  146.     INX    H
  147.     CPI    ' '
  148.     RZ
  149.     CPI    9
  150.     RZ
  151.     CPI    ','
  152.     RZ
  153.     CPI    CR
  154.     RZ
  155.     CPI    LF
  156.     RZ
  157. EOFCHR:
  158.     CPI    EOF
  159.     STC
  160.     CMC
  161.     RNZ
  162.     ORA    A
  163.     STC
  164.     RET
  165. ;
  166. STRING:
  167.     CALL    GETCHR
  168.     RM
  169.     CPI    '^'
  170.     RNZ
  171.     CALL    GETCHR
  172.     RM
  173.     CPI    '^'
  174.     RZ
  175.     ANI    01FH
  176.     RET
  177. ;
  178. GETCHR:
  179.     PUSH    H
  180.     LHLD    STRPTR
  181.     MVI    A,EOF
  182.     CMP    M
  183.     JZ    WIERD
  184.     LDA    EOSTR
  185.     CMP    M
  186.     JZ    WIERD
  187.     INX    H
  188.     SHLD    STRPTR
  189.     CMP    M
  190.     DCX    H
  191.     MOV    L,M
  192.     JNZ    READY
  193.     SUB    A
  194.     STA    SWITCH
  195. READY:
  196.     MOV    A,L
  197.     POP    H
  198.     ORA    A
  199.     RET
  200. ;
  201. WIERD:
  202.     POP    PSW
  203.     SUB    A
  204.     STA    SWITCH
  205.     DCR    A
  206.     MVI    A,'?'
  207.     POP    H
  208.     RET
  209. ;
  210.     END
  211.