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 / CPMUG049.ARK / FILTER.Z80 < prev    next >
Text File  |  1984-04-29  |  3KB  |  160 lines

  1. ;********************************************************
  2. ;*                            *
  3. ;*        CODE TO IMPLEMENT THE            *
  4. ;*        ESSENTIAL CDOS CALLS            *
  5. ;*        WHICH WILL ALLOW MOST            *
  6. ;*        CROMEMCO SOFTWARE TO            *
  7. ;*        RUN UNDER CP/M                *
  8. ;*                            *
  9. ;********************************************************
  10. ;
  11. ;    From Dr. Dobbs, January 1980
  12. ;
  13. ;    by J. Warner, coded by Bill Bolton
  14. ;
  15. ;    This program is uaed by making it part of the
  16. ;memory image of a Cromemco program. When it gets control
  17. ;it boosts the function code filter into place at the top
  18. ;of the TPA and then moves the original program down to
  19. ;100H and jumps to it.
  20. ;
  21. BDOS    EQU    0005H
  22. DUMMY    EQU    0000H
  23. IGOR    EQU    DUMMY
  24. ;
  25. ;    Measure the CP/M TPA size. Adjust the addresses in
  26. ;the function code of the function code filter for
  27. ;installation at the top of the TPA. Then change the jumps
  28. ;at 5,6 & 7 to route BDOS calls through the filter. Block
  29. ;move the filter to the top of the TPA.
  30. ;
  31. ;
  32.     ORG    100H
  33.     LD    HL,(6)        ;GET BDOS ENTRY
  34.     LD    (CPM1+1),HL    ;INSTALL
  35.     LD    (CPM2+1),HL
  36.     DEC    H        ;MAKE ROOM FOR FILTER
  37.     LD    L,0
  38.     LD    (6),HL        ;INSTALL FILTER ADDRESS
  39.     EX    DE,HL
  40.     LD    HL,(1)        ;GET WARM BOOT ADDRESS,
  41.     INC    HL        ;IN BIOS JUMP TABLE
  42.     INC    HL
  43.     INC    HL        ;CSTAT ADDRESS
  44.     LD    (CSTAT+1),HL    ;INSTALL
  45.     INC    HL        ;BUMP 3 TIMES TO FIND,
  46.     INC    HL        ;CONIN
  47.     INC    HL
  48.     LD    (GBYTE+1),HL    ;INSTALL
  49.     LD    HL,NAME-FILTER    ;CALCULATE RELATIVE,
  50.     ADD    HL,DE        ;SUBROUTINE ADDRESS
  51.     LD    (NAM1+1),HL
  52.     LD    (NAM2+1),HL
  53.     LD    HL,FILTER
  54.     LD    BC,END-FILTER
  55.     LDIR            ;INSTAL FILTER
  56. ;
  57. ;
  58. ;    The filter just installed contains a one use
  59. ;routine to move the *.COM file on top of this stuff
  60. ;and into position. First put the stack between CP/M
  61. ;and the filter
  62. ;
  63. ;
  64.     LD    DE,(6)        ;GET FILTER ADDRESS
  65.     LD    IX,MOVE-FILTER
  66.     ADD    IX,DE
  67.     LD    HL,MOVE-FILTER+80H
  68.     ADD    HL,DE
  69.     LD    SP,HL
  70.     LD    DE,MESG
  71.     LD    C,9
  72.     CALL    BDOS
  73.     JP    (IX)
  74. ;
  75. MESG:    DEFW    0D0AH
  76.     DEFM    'CDOS FILTER LOADED'
  77.     DEFW    0D0AH
  78.     DEFW    0D0AH
  79.     DEFB    '$'
  80. ;
  81. ;
  82. ;    PART 3
  83. ;
  84. ;
  85. FILTER:    PUSH    AF
  86.     LD    A,C
  87.     CP    02H
  88.     JR    NZ,NOTWR
  89. CPM1:    CALL    DUMMY
  90.     POP    AF
  91.     RET
  92. ;
  93. NOTWR:    POP    AF
  94.     LD    A,C
  95.     CP    0BH
  96. CSTAT:    JP    Z,DUMMY
  97.     ADD    A,A
  98. CPM2:    JP    NC,DUMMY
  99. GBYTE:    JP    Z,DUMMY
  100.     LD    A,86H
  101.     CP    C
  102.     JP    NZ,IGOR
  103. ;
  104. ;    FORMAT STRING TO FCB - 86H
  105. ;
  106.     PUSH    DE
  107.     LD    B,(HL)
  108.     INC    HL
  109.     LD    A,(HL)
  110.     CP    ':'
  111.     JR    NZ,NOCOL
  112.     INC    HL
  113.     LD    A,7
  114.     AND    B
  115.     JR    FIRST
  116. NOCOL:    DEC    HL
  117.     XOR    A
  118. FIRST:    LD    (DE),A
  119.     INC    DE
  120.     LD    B,8
  121. NAM1:    CALL    DUMMY
  122.     LD    A,'.'
  123.     CP    (HL)
  124.     JR    NZ,EXT
  125.     INC    HL
  126. EXT:    LD    B,3
  127. NAM2:    CALL    DUMMY
  128.     XOR    A
  129.     LD    (DE),A
  130.     POP    DE
  131.     RET
  132. ;
  133. NAME:    LD    A,(HL)
  134.     CP    21H
  135.     JR    C,FILL
  136.     INC    HL
  137.     CP    '.'
  138.     JR    Z,FILL
  139.     CP    60H
  140.     JR    C,NAME1
  141.     SUB    20H
  142. NAME1:    LD    (DE),A
  143.     INC    DE
  144.     DJNZ    NAME
  145.     RET
  146. ;
  147. FILL:    LD    A,20H
  148.     LD    (DE),A
  149.     INC    DE
  150.     DJNZ    FILL
  151.     RET
  152. ;
  153. MOVE:    LD    HL,200H
  154.     LD    BC,(6)
  155.     DEC    B
  156.     LD    DE,100H
  157.     LDIR
  158.     JP    100H
  159. END:    EQU    $
  160.     END