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 / BEEHIVE / ZSUS / ZSUS009.LBR / QUIET12.LBR / QUIET12.MZC / QUIET12.MAC
Text File  |  1990-06-23  |  6KB  |  239 lines

  1. ; Program: QUIET
  2. ; Author: Richard Conn
  3. ; Version: 1.0
  4. ; Date: 29 Mar 84
  5. ;
  6. ; QUIET sets, resets, and displays the ZCPR3 quiet flag.
  7. ;
  8. Vers    equ    12
  9. SubVers    equ    ' '
  10. ;
  11. ; Version 1.2 -- June 24, 1990 -- Gene Pizzetta
  12. ;    It seems a little silly for QUIET to obey the quiet flag, since
  13. ;    the flag is apt to change while the program is running.  Instead,
  14. ;    this version uses the wheel byte like a quiet flag.  Also added
  15. ;    ON and OFF as alternate options for SET and RESET.  Made DISPLAY
  16. ;    option the default.  Now allows leading slash for options.  Added
  17. ;    Type 3 header.  Displays version and load address only on the
  18. ;    help screen.  Sets program error flag and invokes error handler
  19. ;    if invalid option is given.  Now uses library routines for most
  20. ;    functions.  Uses actual program name on help screen.
  21. ;
  22. ; Version 1.1 --
  23. ;    I did not have access to the source code for version 1.1, but the
  24. ;    only difference from 1.0 appears to be observance of the quiet
  25. ;    flag for display of the help screen, the use of Z80-specific
  26. ;    opcodes, and printing the program name and version number with
  27. ;    the D option.
  28. ;
  29. ; USAGE:
  30. ;
  31. ;    QUIET {{/}option}
  32. ;
  33. ; If no options are given, DISPLAY is assumed.
  34. ;
  35. ; OPTIONS:  For all options only enough letters to be unique are required;
  36. ; that is, only a single letter for all options except ON and OFF, which
  37. ; require two letters.
  38. ;
  39. ;     DISPLAY    Displays current state of quiet flag.  This is the
  40. ;        default option.
  41. ;
  42. ;    SET    Turns on (sets) quiet flag.
  43. ;
  44. ;      RESET    Turns off (resets) quiet flag.
  45. ;
  46. ;    ON    Turns on (sets) quiet flag.
  47. ;
  48. ;    OFF    Turns off (resets) quiet flag.
  49. ;
  50. ; If the wheel byte is off, the SET/RESET and ON/OFF options cause
  51. ; no display on the console.  If invalid option is given, program
  52. ; error code set to 19 and error handler is invoked.
  53. ;
  54. ; Equates
  55. ;
  56. fcb    equ    5Ch
  57. z3env    SET    0F400h
  58. cr    equ    0Dh
  59. lf    equ    0Ah
  60. ;
  61.     MACLIB    Z80
  62. ;
  63. ; SYSLIB and Z3LIB Routines
  64. ;
  65.     ext    z3init,getefcb,gzmtop,getwhl,getquiet,putquiet
  66.     ext    puter2,inverror
  67.     ext    eprint,phl4hc,bout
  68. ;
  69. ; TYP3HDR.MAC, Version 1.1  --  Extended Intel Mnemonics
  70. ; This code has been modified as suggested by Charles Irvine so that it will
  71. ; function correctly with interrupts enabled.
  72.  
  73. ; Extended Intel mnemonics by Gene Pizzetta, April 30, 1989.
  74.  
  75. ; This is header code that can be used at the beginning of a type-3-environment
  76. ; program so that it will abort with an error message when not loaded to the
  77. ; correct address (such as when a user tries to run it under CP/M or Z30).
  78. ;
  79. entry:    jr    start0        ; Must use relative jump
  80.     db    0        ; Filler
  81.     db    'Z3ENV',3    ; Type-3 environment
  82. z3eadr:    dw    z3env        ; Filled in by Z33
  83.     dw    entry        ; Intended load address
  84. ;
  85. start0:    lxi    h,0        ; Point to warmboot entry
  86.     mov    a,m        ; Save the byte there
  87.     di            ; Protect against interrupts
  88.     mvi    m,0c9h        ; Replace warmboot with a return opcode
  89.     rst    0        ; Call address 0, pushing RETADDR onto stack
  90. retaddr:
  91.     mov    m,a        ; Restore byte at 0
  92.     dcx    sp        ; Get stack pointer to point
  93.     dcx    sp        ; ..to the value of RETADDR
  94.     pop    h        ; Get it into HL and restore stack
  95.     ei            ; We can allow interrupts again
  96.     lxi    d,retaddr    ; This is where we should be
  97.     xra    a        ; Clear carry flag
  98.     push    h        ; Save address again
  99.     dsbc    de        ; Subtract -- we should have 0 now
  100.     pop    h        ; Restore value of RETADDR
  101.     jrz    start        ; If addresses matched, begin real code
  102. ;
  103.     lxi    d,notz33msg-retaddr ; Offset to message
  104.     dad    d
  105.     xchg            ; Switch pointer to message into DE
  106.     mvi    c,9
  107.     jmp    0005h        ; Return via BDOS print string function
  108.  
  109. notz33msg:
  110.     db    'Not Z33+$'    ; Abort message if not Z33-compatible
  111. ;
  112. ; Start of program . . .
  113. ;
  114. start:    lhld    z3eadr        ; get descriptor address
  115.     call    z3init        ; initialize environment
  116.     sspd    OldStk        ; save old stack pointer
  117.     call    gzmtop        ; get top of memory
  118.     sphl            ; ..and set up new stack
  119. ;
  120. ; Check for Command
  121. ;
  122.     lxi    h,fcb+1
  123.     mov    a,m        ; get first option character
  124.     cpi    '/'        ; slash?
  125.     jrnz    getopt
  126.     inx    h        ; skip slash
  127.     mov    a,m
  128.     cpi    '/'        ; help request?
  129.     jrz    usage
  130. getopt:    cpi    ' '        ; a space?
  131.     jz    qdisp
  132.     cpi    'R'        ; reset?
  133.     jz    qreset
  134.     cpi    'S'        ; set?
  135.     jz    qset
  136.     cpi    'D'        ; display?
  137.     jz    qdisp
  138.     cpi    'O'        ; on/off?
  139.     jrnz    invopt
  140.     inx    h        ; get next character
  141.     mov    a,m
  142.     cpi    'F'        ; off?
  143.     jz    qreset
  144.     cpi    'N'        ; on?
  145.     jz    qset
  146. invopt:    call    eprint
  147.     db    'Invalid option.',0
  148.     mvi    a,19        ; set error code
  149.     jr    ErExit
  150. ;
  151. Exit:    mvi    a,0        ; set for no error
  152. ErExit:    call    puter2        ; set program error code
  153.     mov    b,a        ; put code in B
  154.     ora    a        ; error?
  155.     cnz    inverror    ; yes, invoke error handler
  156.     lspd    OldStk        ; restore old stack
  157.     ret            ; ..and return to CCP
  158. ;
  159. ; Print usage
  160. ;
  161. usage:    call    eprint
  162.     db    'QUIET    Version '
  163.     db    (Vers/10)+'0','.',(Vers mod 10)+'0',SubVers,' (loaded at ',0
  164.     lxi    h,entry
  165.     call    phl4hc
  166.     call    eprint
  167.     db    'h)',CR,LF,0
  168.     call    eprint
  169.     db    'Usage:',CR,LF,'   ',0
  170.     call    comnam
  171.     call    eprint
  172.     db    ' {{/}option}',CR,LF
  173.     db    'Sets, Resets, and Displays ZCPR3 Quiet Flag.',CR,LF
  174.     db    'Options:',CR,LF
  175.     db    '   D{ISPLAY}  Show current flag status.',CR,LF
  176.     db    '   S{ET}      Turn flag on.',CR,LF
  177.     db    '   R{ESET}    Turn flag off.',CR,LF
  178.     db    '   ON         Turn flag on.',CR,LF
  179.     db    '   OF{F}      Turn flag off.',CR,LF
  180.     db    'If no option is given, DISPLAY is assumed.'
  181.     db    0
  182.     jmp    Exit
  183. ;
  184. ; comnam -- prints actual program name from external file control block,
  185. ; if available, or prints 'QUIET'.
  186. ;
  187. comnam:    call    getefcb
  188.     jrz    noefcb
  189.     mvi    b,8
  190. comnm1:    inx    h
  191.     mov    a,m
  192.     ani    7Fh
  193.     cpi    ' '    
  194.     cnz    bout
  195.     djnz    comnm1
  196.     ret
  197. ;
  198. noefcb:    call    eprint
  199.     db    'QUIET',0
  200.     ret
  201.  
  202. ;
  203. ; Reset Quiet
  204. ;
  205. qreset:    mvi    a,0        ; reset value
  206.     call    putquiet
  207.     call    getwhl        ; check wheel byte
  208.     jz    Exit        ; (off, no display)
  209.     jmp    qdisp
  210. ;
  211. ; Set Quiet
  212. ;
  213. qset:    mvi    a,0FFh        ; set value
  214.     call    putquiet
  215.     call    getwhl        ; check wheel byte
  216.     jz    Exit        ; (off, no display)
  217. ;
  218. ; Display Quiet Flag
  219. ;
  220. qdisp:    call    getquiet    ; get quiet flag
  221.     call    eprint
  222.     db    ' Quiet Flag is ',0
  223.     jz    qdispr
  224.     call    eprint
  225.     db    'On (Set)',0
  226.     jmp    Exit
  227. ;
  228. qdispr:    call    eprint
  229.     db    'Off (Reset)',0
  230.     jmp    Exit
  231. ;
  232. ; Uninitialized data . . .
  233. ;
  234.     DSEG
  235. ;
  236. OldStk:    ds    2
  237. ;
  238.     end
  239.