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 / ZCPR3 / REG.MQC / REG.MAC
Text File  |  2000-06-30  |  5KB  |  267 lines

  1. ;
  2. ; Program: REG
  3. ; Author: Richard Conn
  4. ; Version: 1.0
  5. ; Date: 5 Mar 84
  6. ;
  7. version    equ    10
  8.  
  9. ;
  10. ;    REG is used to access the ZCPR3 Registers.  It can set a value,
  11. ; display a value or all values, increment, and decrement them.
  12. ;
  13.  
  14. ;
  15. ; Equates for Key Values
  16. ;
  17. z3env    SET    0f400h    ;address of ZCPR3 environment
  18. fcb    equ    5ch
  19. fcb2    equ    6ch
  20. cr    equ    0dh
  21. lf    equ    0ah
  22.  
  23. ;
  24. ; External Z3LIB and SYSLIB Routines
  25. ;
  26.     ext    z3init,getreg,putreg,getmsg
  27.     ext    eval10,print,cout,crlf,qprint,padc
  28.  
  29. ;
  30. ; Environment Definition
  31. ;
  32.     if    z3env ne 0
  33. ;
  34. ; External ZCPR3 Environment Descriptor
  35. ;
  36.     jmp    start
  37.     db    'Z3ENV'    ;This is a ZCPR3 Utility
  38.     db    1    ;External Environment Descriptor
  39. z3eadr:
  40.     dw    z3env
  41. start:
  42.     lhld    z3eadr    ;pt to ZCPR3 environment
  43. ;
  44.     else
  45. ;
  46. ; Internal ZCPR3 Environment Descriptor
  47. ;
  48.     MACLIB    Z3BASE.LIB
  49.     MACLIB    SYSENV.LIB
  50. z3eadr:
  51.     jmp    start
  52.     SYSENV
  53. start:
  54.     lxi    h,z3eadr    ;pt to ZCPR3 environment
  55.     endif
  56.  
  57. ;
  58. ; Start of Program -- Initialize ZCPR3 Environment
  59. ;
  60.     call    z3init    ;initialize the ZCPR3 Environment
  61. ;
  62. ; Print Banner
  63. ;
  64.     call    qprint
  65.     db    'REG, Version '
  66.     db    (version/10)+'0','.',(version mod 10)+'0',cr,lf,0
  67. ;
  68. ; Check for Availability of Registers
  69. ;
  70.     call    getmsg
  71.     jz    nomsg
  72. ;
  73. ; Check for Command
  74. ;
  75.     lxi    h,fcb+1    ;pt to first FCB
  76.     mov    a,m    ;get first char
  77.     cpi    ' '    ;check for help
  78.     jz    help
  79.     cpi    '/'    ;also help
  80.     jz    help
  81.     cpi    '#'    ;display all
  82.     jz    dispall
  83.     cpi    'D'    ;display
  84.     jz    display
  85.     cpi    'M'    ;minus (decrement)
  86.     jz    minus
  87.     cpi    'P'    ;plus (increment)
  88.     jz    plus
  89.     cpi    'S'    ;set
  90.     jz    setrg
  91.     cpi    '0'    ;convert to binary
  92.     jc    help
  93.     cpi    '9'+1    ;range?
  94.     jnc    help
  95.     jmp    disp1
  96.  
  97. ;
  98. ; Print Error Message
  99. ;
  100. nomsg:
  101.     call    print
  102.     db    cr,lf,'No Registers Available',0
  103.     ret
  104.  
  105. ;
  106. ; Print Help Message
  107. ;
  108. help:
  109.     call    print
  110.     db    cr,lf,'REG - Set/Display/Increment/Decrement Registers'
  111.     db    cr,lf,'REG Syntax:'
  112.     db    cr,lf,'    REG Dr or REG r    <-- Display Reg r'
  113.     db    cr,lf,'    REG Mr        <-- Minus (Decrement) Reg r'
  114.     db    cr,lf,'    REG Pr        <-- Plus (Increment) Reg r'
  115.     db    cr,lf,'    REG Sr val    <-- Set Reg r to val'
  116.     db    cr,lf,'where "r" may be 0-9 for the regs or'
  117.     db    cr,lf,'# to select all regs'
  118.     db    0
  119.     ret
  120. ;
  121. ; Display Register
  122. ;
  123. display:
  124.     inx    h    ;pt to value
  125.     mov    a,m    ;get it
  126. disp1:
  127.     cpi    '#'    ;display all?
  128.     jz    dispall
  129. ;
  130. ; Display Particular Register
  131. ;
  132.     call    compreg    ;compute register number in B
  133.     call    getreg    ;return register value in A
  134. ;
  135. ; Print Register whose Number is in B and Value in A
  136. ;
  137. regprint:
  138.     mov    c,a    ;value in C
  139.     call    print
  140.     db    ' Reg ',0
  141.     mov    a,b
  142.     adi    '0'    ;convert to ASCII
  143.     call    cout
  144.     call    print
  145.     db    ' = ',0
  146.     mov    a,c    ;print value
  147.     jmp    padc
  148. ;
  149. ; Display All Registers
  150. ;
  151. dispall:
  152.     mvi    b,0    ;loop 0 to 9
  153. dispa1:
  154.     call    getreg    ;get register
  155.     call    regprint    ;print register
  156.     call    print
  157.     db    '    ',0
  158.     inr    b    ;increment count
  159.     mov    a,b    ;check for new line
  160.     ani    3
  161.     cz    crlf
  162.     mov    a,b    ;check for done
  163.     cpi    10
  164.     jnz    dispa1
  165.     ret
  166. ;
  167. ; Convert ASCII Char in A to Register Number in B with error check
  168. ;
  169. compreg:
  170.     cpi    '0'    ;convert to binary
  171.     jc    rerr
  172.     cpi    '9'+1
  173.     jnc    rerr
  174.     sui    '0'    ;convert to binary
  175.     mov    b,a    ;return value in B
  176.     ret
  177. rerr:
  178.     mov    b,a    ;save char
  179.     pop    psw    ;clear stack
  180.     call    print
  181.     db    ' Invld Reg ID: ',0
  182.     mov    a,b    ;get char
  183.     jmp    cout
  184. ;
  185. ; Set Register Value
  186. ;
  187. setrg:
  188.     inx    h    ;pt to register
  189.     mov    a,m    ;get char
  190.     cpi    '#'    ;all registers?
  191.     jz    setall
  192.     call    compreg    ;get register number in B
  193.     lxi    h,fcb2+1    ;pt to value
  194.     call    eval10    ;evaluate
  195.     mov    c,a    ;save value in C
  196.     call    putreg    ;set register
  197.     jmp    regprint    ;print value
  198. ;
  199. ; Set All Registers
  200. ;
  201. setall:
  202.     lxi    h,fcb2+1    ;pt to value
  203.     call    eval10
  204.     mov    c,a    ;value in C
  205.     mvi    b,0    ;set 10 registers
  206. seta1:
  207.     mov    a,c    ;get value
  208.     call    putreg    ;set value
  209.     inr    b    ;increment reg number
  210.     mov    a,b
  211.     cpi    10
  212.     jnz    seta1
  213.     jmp    dispall    ;display all registers
  214. ;
  215. ; Reg = Reg - 1
  216. ;
  217. minus:
  218.     inx    h    ;pt to number
  219.     mov    a,m    ;get it
  220.     cpi    '#'    ;all?
  221.     jz    minall
  222.     call    compreg    ;compute register number
  223.     call    getreg    ;get register
  224.     dcr    a    ;-1
  225.     call    putreg    ;restore register
  226.     jmp    regprint    ;print result
  227. ;
  228. ; All Registers - 1
  229. ;
  230. minall:
  231.     mvi    b,0    ;set loop
  232. mina1:
  233.     call    getreg    ;get register
  234.     dcr    a    ;-1
  235.     call    putreg    ;restore register
  236.     inr    b    ;count
  237.     mov    a,b    ;done?
  238.     cpi    10
  239.     jnz    mina1
  240.     jmp    dispall    ;display all regs
  241. ;
  242. ; Reg = Reg + 1
  243. ;
  244. plus:
  245.     inx    h    ;pt to register
  246.     mov    a,m    ;get it
  247.     cpi    '#'    ;all?
  248.     jz    plusall
  249.     call    compreg    ;compute value
  250.     call    getreg    ;get value
  251.     inr    a    ;+1
  252.     call    putreg    ;put value
  253.     jmp    regprint    ;print value
  254. plusall:
  255.     mvi    b,0    ;set counter
  256. plusa1:
  257.     call    getreg    ;increment value
  258.     inr    a
  259.     call    putreg
  260.     inr    b    ;count
  261.     mov    a,b
  262.     cpi    10
  263.     jnz    plusa1
  264.     jmp    dispall    ;print reg values
  265.  
  266.     end
  267.