home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / debug / ddttools.aqm / DDTTOOLS.ASM
Assembly Source File  |  1986-12-21  |  6KB  |  215 lines

  1. ;DDTtools.*         --CHR$(13)08DEC84lastupdate 
  2. ;           ...to be kept as a *.HEX file.  DDT 
  3. ;brings it in as an overlay to other work  (or, 
  4. ;better, in its initial load), to provide a few 
  5. ;tools  Kildall didn't think we'd need back  in 
  6. ;the TTY days.   Don't LOAD it to a *.COM file; 
  7. ;the COMfile is a memory image that'll take  up 
  8. ;a   lot   of  diskfile  space  and  wipe   out 
  9. ;whatever's in low memory when it's brought in. 
  10. ;Use the *.HEX file.
  11. ; Variables are loaded into registers using the 
  12. ;"X"  command before entry with "G".  Constants 
  13. ;are provided by the routines.  The labels  are 
  14. ;there  to  point out the starting  points  for 
  15. ;these routines.
  16. ; The binary-to-decimal conversion routine came 
  17. ;from "Soul of CP/M".
  18. ; This code is self-modifying,  to avoid  over-
  19. ;using the little  DDT stack in the DMA block.
  20. ;Print  a  copy of this or the  *.PRN  file  to 
  21. ;serve as a manual.  I need it, and I wrote the 
  22. ;thing!
  23. ;  
  24. ; I  hereby  place my portions of this work  in 
  25. ;the public domain.  I do request credit in its 
  26. ;distribution,   complete with call-letters and 
  27. ;my weird pseudoBasic signature/datecode.
  28. ;        --C. R. Bryan III WB1HKU/6
  29. ; IMPORTANT:  If you are running with less than 
  30. ;64k of memory, you MUST lower the origin. This 
  31. ;package should load in just under DDT where it 
  32. ;overlays  the  CCP,  leaving room  for  a  few 
  33. ;scribbles .  In my Ampro system, DDT starts at 
  34. ;0D000h.
  35. ;
  36. ;
  37. ;EQUATES:
  38. BDOS    equ    5
  39. CR    equ    0Dh
  40. LF    equ    0Ah
  41. CTRLC    equ    3
  42. CTRLZ    equ    01Ah
  43.  
  44.     org    0CA00h    ;well out of the way of a PUMP image.
  45. ORIGIN:    equ    $    ;Here. Whatever you change org to be.
  46. LABEL1:    db    'STRINGFINDR:'
  47.     mvi    a,1
  48.     sta    HIT+1
  49.     lda    BYCT
  50.     sta    CHECK+1
  51.     lxi    h,STRING
  52. CEIL:    lxi    b,ORIGIN-1    ;early stop, otherwise it'll 
  53.                 ;match the string with itself.
  54.     lxi    d,100h        ;TPA start.
  55. LUP:    ldax    d
  56.     ani    7Fh    ;NO-OP this out for object code. 
  57.             ;This mask keeps WordStar 
  58.             ;raised bits from preventing 
  59.             ;a match.
  60.     cmp    m
  61.     jz    HIT    ;go advance everything for the next byte.
  62.     mvi    a,1
  63.     sta    HIT+1    ;we reset our hit-count on any mismatch.
  64.     lxi    h,STRING    ;and our pointer.
  65. MIDLUP:    inx    d    ;HIT rejoins us here.
  66.     dcx    b
  67.     mvi    a,0    ;test: have we run out of room to play?
  68.     cmp    c
  69.     jnz    LUP
  70.     cmp    b
  71.     jnz    LUP
  72.     lxi    h,0    ;this is your indication of failure to
  73.     rst    7    ;find a match. An address in h and nonzero
  74.             ;in b means h has end--of-match address.
  75. ;
  76. BYCT    db    0    ;it's zero until you put something in it.
  77.             ;this is the number of bytes you put in the 
  78.             ;string to be matched (byte count). 
  79. STRING:    db    'PUT '    ;if you need more room, repoint to somewhere
  80.             ;else in memory. Don't forget to load BYCT.
  81.     db    'STRING HERE!'
  82.  
  83. ;
  84. HIT:    mvi    a,1    ;we rezero this up at the top for each use.    
  85. CHECK:    cpi    0    ;this too gets modified, to BYCT.
  86.     jz    REPORT    ;hitcount = BYCT. We found it. Go brag.
  87.     inr    a    ;well, not all of it.
  88.     sta    HIT+1
  89.     inx    h    ;point to the next byte to match
  90.     jmp    MIDLUP    ;and get on with it.
  91. ;
  92. REPORT:    xchg
  93.     shld    SCRTCH
  94.     mvi    e,7    ;beep
  95.     mvi    c,2
  96.     call    BDOS
  97.     mvi    e,24h    ;sure sign of success: dollar-signs
  98.     mvi    c,2    ;(well, one) showing up on your screen.
  99.     call    BDOS    ;use "eXamine" function of DDT to see
  100.     lhld    SCRTCH    ;where the string was, in hl.
  101.     rst    7
  102. SCRTCH:    dw    0    ;scratchpad
  103. ;
  104. LABEL2:    db    'PAGES:'    
  105.             ;this is why I wrote this package in
  106.             ;the first place. Saves the HP-16's
  107.             ;batteries if the Z80 tells how many
  108.             ;pages to SAVE. Give it the last valid
  109.             ;address in hl (or leave it in there if
  110.             ;it's already there). Then go see what it
  111.             ;left you after SAVE:.
  112.     mov    l,h
  113.     mvi    h,0
  114.     lxi    d,-100
  115.     call    SUBCNT
  116.     sta    LOOKY+6
  117.     lxi    d,-10
  118.     call    SUBCNT
  119.     sta    LOOKY+7
  120.     lxi    d,-1
  121.     call    SUBCNT
  122.     sta    LOOKY+8
  123.     rst    7
  124. ;
  125. SUBCNT:    mvi    c,2Fh
  126. SUBL:    inr    c
  127.     shld    SCRTCH
  128.     dad    d
  129.     jc    SUBL
  130.     lhld    SCRTCH
  131.     mov    a,c
  132.     ret
  133. ;
  134. LOOKY:    db    'SAVE:      '
  135. ;
  136. LABEL3:    db    'TOPSTRIP:'    
  137.             ;resets the top bit of each byte so 
  138.             ;WordStar files aren't cloudy with dots. PIP
  139.             ;does the same thing if you transfer with
  140.             ;a [z argument, but only if you're willing
  141.             ;to copy over to a new file. This does it
  142.             ;for you within DDT, ready to SAVE. Load
  143.             ;hl with the first address, de with the last.
  144.             ;Next time, write your .ASM file in
  145.             ;non-document mode and avoid all this.
  146. STRIP:    mov    a,m
  147.     ani    7Fh
  148.     mov    m,a
  149.     inx    h
  150.     mov    a,e
  151.     cmp    l
  152.     jnz    STRIP
  153.     mov    a,d
  154.     cmp    h
  155.     jnz    STRIP
  156.     rst    7
  157. ;
  158. LABEL4:    db    'PRINTSAF:'    
  159.             ;this routine makes embedded strings
  160.             ;(like those in WINSTALL) readable by 
  161.             ;WordStar, once you've reformed and
  162.             ;thrown out the gibberish. Anything
  163.             ;that would bother a printer gets turned
  164.             ;into a space, leaving only linefeeds,
  165.             ;carriage returns, and good printing
  166.             ;characters. First address in hl, last
  167.             ;address in de. 
  168. SAFT:    mov    a,m
  169.     ani    7Fh
  170.     cpi    20h    ;less than a space?
  171.     jc    ITSOK
  172.     cpi    0Dh    ;carriage-return
  173.     jz    ITSOK
  174.     cpi    0Ah    ;linefeed
  175.     jz    ITSOK
  176.     mvi    a,20h    ;well, it's NOT okay. Space it.
  177. ITSOK:    mov    m,a
  178.     inx    h
  179.     mov    a,e
  180.     cmp    l
  181.     jnz    SAFT
  182.     mov    a,d
  183.     cmp    h
  184.     jnz    SAFT
  185.     rst    7
  186. ;
  187. LABEL5:    db    'TYPECHAR:'    
  188.             ;when invoked, this routine lets you
  189.             ;type ASCII strings directly into
  190.             ;memory,rather than having to translate
  191.             ;them into hex. Stops when you give it
  192.             ;a control C, or whenever it hits the
  193.             ;ceiling. Control Z is allowed as a
  194.             ;character. Load hl with the first byte's
  195.             ;address first.
  196. GOTYPE:    shld    SCRTCH
  197.     mvi    c,1    ;Conin. Any mail? Wait 'til there is.
  198.     call    BDOS
  199.     cpi    3    ;test: control C?
  200.     jz    QUIT
  201.     lhld    SCRTCH
  202.     mov    m,a
  203.     inx    h
  204.     lda    CEIL+2    ;ceiling page over in Stringfindr
  205.     cmp    h
  206.     jnz    GOTYPE
  207.     lda    CEIL+1    ;final allowed bytes.
  208.     cmp    l
  209.     jnz    GOTYPE    ;these routines won't work if you type on
  210. QUIT:    rst    7    ;them, you know.
  211. ;
  212.     end
  213.  
  214. eof DDTTOOLS/ampro[000049] --CHR$(13)07DEC84
  215.