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 / ZSYS / SIMTEL20 / ZSIG / FINDERR.MAC < prev    next >
Text File  |  2000-06-30  |  7KB  |  286 lines

  1.  
  2. ;
  3. ;  PROGRAM:  FINDERR
  4. ;  AUTHOR:  TED H. EMIGH
  5. ;  VERSION:  1.1
  6. ;  DATE:  17 SEPT 84
  7. ;  PREVIOUS VERSIONS:  1.0 (11 Sep 84), 0.1, 7 SEPT 84
  8. ;
  9. VERSION    EQU    11
  10. EXTENV    EQU    1    ; 1 for External Environ, 0 for Internal Environ
  11.  
  12. ;
  13. ;    FINDERR is a program to set the ZCPR3 message registers if various
  14. ;    memory locations are nonzero
  15. ;
  16. ;  ZCPR3 Header
  17. ;
  18.     MACLIB    Z3BASE.LIB
  19.  
  20. ;
  21. ;  These are part of the built-in Help message.  They indicate what
  22. ;  registers are affected by this version of FINDERR
  23. ;
  24. regmsg    macro
  25.     db    0dh,0ah,' 0 - M80 Ver 3.44'
  26.     db    0dh,0ah,' 1 - F80'
  27.     endm
  28.  
  29. ;
  30. ;  These Locations Assume the use of M80/F80, Version 3.44
  31. ;
  32. m80f    equ    03cedh        ;location of number of fatal errors (M80)
  33. m80fb    equ    2        ;--16 bits (2 bytes)
  34. m80w    equ    03cefh        ;location of number of warning errors (M80)
  35. m80wb    equ    2        ;--16 bits (2 bytes)
  36.  
  37. f80f    equ    01c1h        ;location of number of fatal errors (F80)
  38. f80fb    equ    2        ;--16 bits (2 bytes)
  39. f80w    equ    02adh        ;location of number of warning errors (F80)
  40. f80wb    equ    2        ;--16 bits (2 bytes)
  41. ;
  42. ;  System Equates
  43. ;  Add the location of the error indicator, and the number of byte
  44. ;  for the indicator for each indicator desired.  If the number of
  45. ;  bytes is zero, that particular memory location is ignored.
  46. ;
  47. fatal0    equ    m80f        ;location of number of fatal errors
  48. bytesf0    equ    m80fb        ;number of bytes
  49. warn0    equ    m80w        ;location of number of warning errors
  50. bytesw0    equ    m80wb        ;number of bytes
  51. fnderr0    equ    bytesf0 or bytesw0    ;register 0 used for these errors
  52.  
  53. fatal1    equ    f80f        ;location of number of fatal errors
  54. bytesf1    equ    f80fb        ;number of bytes
  55. warn1    equ    f80w        ;location of number of warning errors
  56. bytesw1    equ    f80wb        ;number of bytes
  57. fnderr1    equ    bytesf1 or bytesw1    ;register 1 used for these errors
  58.  
  59. ;
  60. ;  The rest of the registers are not used at this time
  61. ;  (if bytes = 0, then the memory address is not checked)
  62. ;
  63. fatal2    equ    0        ;location of number of fatal errors
  64. bytesf2    equ    0        ;number of bytes
  65. warn2    equ    0        ;location of number of warning errors
  66. bytesw2    equ    0        ;number of bytes
  67. fnderr2    equ    bytesf2 or bytesw2    ;register 2 used for these errors
  68. ;
  69. fatal3    equ    0        ;location of number of fatal errors
  70. bytesf3    equ    0        ;number of bytes
  71. warn3    equ    0        ;location of number of warning errors
  72. bytesw3    equ    0        ;number of bytes
  73. fnderr3    equ    bytesf3 or bytesw3    ;register 3 used for these errors
  74. ;
  75. fatal4    equ    0        ;location of number of fatal errors
  76. bytesf4    equ    0        ;number of bytes
  77. warn4    equ    0        ;location of number of warning errors
  78. bytesw4    equ    0        ;number of bytes
  79. fnderr4    equ    bytesf4 or bytesw4    ;register 4 used for these errors
  80. ;
  81. fatal5    equ    0        ;location of number of fatal errors
  82. bytesf5    equ    0        ;number of bytes
  83. warn5    equ    0        ;location of number of warning errors
  84. bytesw5    equ    0        ;number of bytes
  85. fnderr5    equ    bytesf5 or bytesw5    ;register 5 used for these errors
  86. ;
  87. fatal6    equ    0        ;location of number of fatal errors
  88. bytesf6    equ    0        ;number of bytes
  89. warn6    equ    0        ;location of number of warning errors
  90. bytesw6    equ    0        ;number of bytes
  91. fnderr6    equ    bytesf6 or bytesw6    ;register 6 used for these errors
  92. ;
  93. fatal7    equ    0        ;location of number of fatal errors
  94. bytesf7    equ    0        ;number of bytes
  95. warn7    equ    0        ;location of number of warning errors
  96. bytesw7    equ    0        ;number of bytes
  97. fnderr7    equ    bytesf7 or bytesw7    ;register 7 used for these errors
  98. ;
  99. fatal8    equ    0        ;location of number of fatal errors
  100. bytesf8    equ    0        ;number of bytes
  101. warn8    equ    0        ;location of number of warning errors
  102. bytesw8    equ    0        ;number of bytes
  103. fnderr8    equ    bytesf8 or bytesw8    ;register 8 used for these errors
  104. ;
  105. fatal9    equ    0        ;location of number of fatal errors
  106. bytesf9    equ    0        ;number of bytes
  107. warn9    equ    0        ;location of number of warning errors
  108. bytesw9    equ    0        ;number of bytes
  109. fnderr9    equ    bytesf9 or bytesw9    ;register 9 used for these errors
  110.  
  111. ;
  112. ; System Buffers and Entries
  113. ;
  114. fcb    equ    5ch
  115. bdos    equ    5
  116.  
  117. ;
  118. ;
  119. ; MACROS TO PROVIDE Z80 EXTENSIONS
  120. ;   MACROS INCLUDE:
  121. ;
  122. ;    jrnz    - Jump Relative if No Zero
  123. ;    djnz    - Decrement B and Jump Relative if No Zero
  124. ;
  125. ;    @gendd Macro used for Checking and Generating
  126. ;    8-Bit Jump Relative Displacements
  127. ;
  128. @gendd    macro    ?dd    ;;Used for checking range of 8-bit displacements
  129.     if2        ;;M80
  130.  
  131.     if (?dd gt 7FH) and (?dd lt 0FF80H)
  132.     db    100H,?dd    ;Displacement Range Error
  133.     else
  134.     db    ?dd
  135.     endif        ;;Range Error
  136.  
  137.     else        ;;M80
  138.     db    ?dd    ;;M80
  139.     endif        ;;M80
  140.  
  141.     endm
  142. ;
  143. ;
  144. ; Z80 MACRO EXTENSIONS
  145. ;
  146. jrnz    macro    ?n    ;;Jump Relative on No Zero
  147.     if    i8080    ;;8080/8085
  148.     jnz    ?n
  149.     else        ;;Z80
  150.     db    20H
  151.     @gendd    ?n-$-1
  152.     endif        ;;I8080
  153.     endm
  154. ;
  155. djnz    macro    ?n    ;;Decrement B and Jump Relative on No Zero
  156.     if    i8080    ;;8080/8085
  157.     dcr    B
  158.     jnz    ?n
  159.     else        ;;Z80
  160.     db    10H
  161.     @gendd    ?n-$-1
  162.     endif        ;;I8080
  163.     endm
  164. ;
  165. ;  Macros to do most of the work
  166. ;
  167. ;  SETBYT will set B register to 'value' if the any of the bytes
  168. ;    at location 'loc' to 'loc'+'bytes'-1 are nonzero
  169. ;    ('bytes' is the number of bytes to check)
  170. ;    If no error, then B=0.  errno is the error number
  171. ;
  172. setbyt    macro    loc,bytes,errno,value
  173.     local    nxtbyt
  174.     if bytes ne 0
  175. ;;
  176.     if bytes eq 1
  177.     lda    loc        ;;get byte
  178.     ora    a        ;;see if zero
  179.     endif            ;;bytes eq 1
  180.     if bytes eq 2
  181.     lxi    h,loc
  182.     mov    a,m        ;;get lower byte
  183.     inx    h        ;;point to higher byte
  184.     ora    m        ;;see if 16 bit number is zero
  185.     endif            ;;bytes eq 2
  186.     if bytes gt 2
  187.     lxi    h,loc
  188.     mov    a,m        ;;get first byte
  189.     mvi    b,bytes-1    ;;number of bytes
  190. nxtbyt:    inx    h        ;;point to next byte
  191.     ora    m        ;;see if number is zero
  192.     djnz    nxtbyt        ;;more bytes?
  193.     if i8080
  194.     ora    a        ;;set flags for a again
  195.     endif            ;;I8080
  196.     endif            ;;bytes gt 2
  197.     mvi    b,value
  198.     jrnz    err&errno
  199. ;;
  200.     endif            ;;bytes ne 0
  201.     endm
  202. ;
  203. ;  SETBYT will set register number errno to the value in
  204. ;    B if entered at err&errno, else it will reset the value
  205. ;    at register number errno.  This routine MUST follow the
  206. ;    last setbyt for that error number.
  207. ;
  208. finish    macro    errno
  209.     mvi    b,0        ;;set for zero
  210. err&errno:
  211.     lxi    h,30h+errno    ;;point to register number
  212.     dad    d
  213.     mov    m,b        ;;save the error code
  214. ;
  215.     endm
  216. ;
  217. ;  Environments
  218. ;
  219. origin:
  220. ;
  221.     if    extenv        ; if external environment ...
  222. ;
  223. ;  External Environment Definition
  224. ;
  225.     jmp    finderr
  226.     db    'Z3ENV'        ; this is an environment
  227.     db    1        ; class 1 environment (external)
  228. envloc:
  229.     dw    z3env        ; ptr to environment
  230. finderr:
  231.     lhld    envloc        ; HL pts to environment
  232.  
  233.     else            ; if internal environment ...
  234. ;
  235. ;  Internal Environment Definition
  236. ;
  237. envloc:
  238.     jmp    finderr
  239.     db    'Z3ENV'        ; this is an environment
  240.     MACLIB    SYSENV.LIB
  241.     SYSENV            ; define environment
  242. finderr:
  243.     lxi    h,envloc    ; HL pts to environment
  244.  
  245.     endif
  246.  
  247. ;
  248. ;  Beginning of FINDERR
  249. ;
  250.     lda    fcb+1        ;check for help request
  251.     cpi    '/'
  252.     jz    help
  253.     lxi    d,34        ;message address offset in environment
  254.     dad    d        ;point to location of message address
  255.     mov    a,m        ;get message address
  256.     inx    h
  257.     mov    h,m
  258.     mov    l,a        ;HL now points to the message buffer
  259.     ora    h        ;see if message buffers supported
  260.     rz            ;messages not supported, abort
  261.     xchg            ;save pointer to message buffer
  262.     irp    errno,<0,1,2,3,4,5,6,7,8,9>
  263. if fnderr&errno
  264.     setbyt    fatal&errno,bytesf&errno,errno,1
  265.     setbyt    warn&errno,bytesw&errno,errno,2
  266.     finish    errno
  267. endif
  268.     endm
  269. ;
  270.     ret
  271. ;
  272. ; Help Message
  273. ;
  274. help:
  275.     lxi    d,helpmsg
  276.     mvi    c,9        ;use BDOS print
  277.     jmp    bdos
  278. helpmsg:
  279.     db    'FINDERR '
  280.     db    (version/10)+'0','.',(version mod 10)+'0'
  281.     db    0dh,0ah,'Regs --'
  282.     regmsg
  283.     db    '$'
  284.  
  285.     end
  286.