home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / sigmv076.ark / KID.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  2KB  |  187 lines

  1. ;********************************************************
  2. ;*                            *
  3. ;*        KEYBOARD INPUT DEFINITION        *
  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. MAXI    EQU    4
  23. BOOT    EQU    0
  24. BDOS    EQU    5
  25. FCBL    EQU    05CH
  26. FTYP    EQU    FCBL+9
  27. FCBCR    EQU    FCBL+32
  28. PRINTF    EQU    9
  29. OPENF    EQU    15
  30. CLOSEF    EQU    16
  31. READF    EQU    20
  32. SETDMA    EQU    26
  33. LF    EQU    0AH
  34. CR    EQU    0DH
  35. ;
  36. FRERAM    EQU    5C00H
  37. ;
  38.     ORG    100H
  39. ;
  40.     JMP    BEGIN
  41. ;
  42. FREPTR:    DW    FRERAM
  43. CSVPTR:    DS    2
  44. CIVPTR:    DS    2
  45. DMATMP:    DW    0
  46. COUNT:    DB    0
  47. ;
  48. BEGIN:
  49.     LXI    D,FTYP
  50.     LXI    B,03
  51.     LXI    H,KIDFIL
  52.     CALL    MOVIT
  53.     JMP    OPEN
  54. ;
  55. MOVIT:
  56.     MOV    A,B
  57.     ORA    C
  58.     RZ
  59.     MOV    A,M
  60.     STAX    D
  61.     INX    H
  62.     INX    D
  63.     DCX    B
  64.     JMP    MOVIT
  65. ;
  66. OPEN:
  67.     LHLD    FREPTR
  68.     LXI    D,256
  69.     DAD    D
  70.     SHLD    DMATMP
  71.     XCHG
  72.     MVI    C,SETDMA
  73.     CALL    BDOS
  74.     LXI    D,FCBL
  75.     MVI    C,OPENF
  76.     CALL    BDOS
  77.     INR    A
  78.     LXI    D,MESNOF
  79.     JZ    FINISH
  80. READ:
  81.     LXI    D,FCBL
  82.     MVI    C,READF
  83.     CALL    BDOS
  84.     ORA    A
  85.     JNZ    CLOSE
  86.     LXI    H,COUNT
  87.     INR    M
  88.     MOV    A,MAXI
  89.     DB    0BEH
  90.     LXI    D,MESBIG
  91.     JC    FINISH
  92.     LHLD    DMATMP
  93.     LXI    D,128
  94.     DAD    D
  95.     SHLD    DMATMP
  96.     XCHG
  97.     MVI    C,SETDMA
  98.     CALL    BDOS
  99.     JMP    READ
  100. ;
  101. CLOSE:
  102.     LXI    D,FCBL
  103.     MVI    C,CLOSEF
  104.     CALL    BDOS
  105.     JMP    MODIFY
  106. ;
  107. MESNOF:    DB    'NO'
  108. KIDFIL:    DB    'KID FILE $'
  109. MESBIG:    DB    'KID FILE IS TOO BIG $'
  110. NOKIP:    DB    'KIP ABSENT $'
  111. ALLOK:    DB    'KID READ OK $'
  112. ;
  113. PATCH:
  114.     LHLD    CSVPTR
  115.     CALL    LOADDE
  116.     LHLD    FREPTR
  117.     INX    H
  118.     CALL    STORDE
  119.     LHLD    CIVPTR
  120.     CALL    LOADDE
  121.     LHLD    FREPTR
  122.     LXI    B,4
  123.     DAD    B
  124.     CALL    STORDE
  125.     LHLD    FREPTR
  126.     LXI    B,6
  127.     DAD    B
  128.     XCHG
  129.     LHLD    CSVPTR
  130.     CALL    STORDE
  131.     LHLD    FREPTR
  132.     LXI    B,9
  133.     DAD    B
  134.     XCHG
  135.     LHLD    CIVPTR
  136.     CALL    STORDE
  137.     RET
  138. ;
  139. LOADDE:
  140.     MOV    E,M
  141.     INX    H
  142.     MOV    D,M
  143.     RET
  144. ;
  145. STORDE:
  146.     MOV    M,E
  147.     INX    H
  148.     MOV    M,D
  149.     RET
  150. ;
  151. TSTJMP:
  152.     LHLD    FREPTR
  153.     MVI    A,0C3H
  154.     CMP    M
  155.     STC
  156.     RNZ
  157.     INX    H
  158.     MOV    A,M
  159.     ORA    A
  160.     RNZ
  161.     INX    H
  162.     MOV    A,M
  163.     ORA    A
  164.     RET
  165. ;
  166. MODIFY:
  167.     LHLD    01
  168.     LXI    D,3
  169.     DAD    D
  170.     INX    H
  171.     SHLD    CSVPTR
  172.     INX    H
  173.     INX    H
  174.     INX    H
  175.     SHLD    CIVPTR
  176.     CALL    TSTJMP
  177.     LXI    D,NOKIP
  178.     JC    FINISH
  179.     CZ    PATCH
  180.     LXI    D,ALLOK
  181. FINISH:
  182.     MVI    C,PRINTF
  183.     CALL    BDOS
  184.     JMP    BOOT
  185. ;
  186.     END
  187.