home *** CD-ROM | disk | FTP | other *** search
-
- ; Z33MAC.LIB : Macros for use with ZCPR33
-
- ; This code is copyright (C), 1987, by Jay P. Sage, all rights reserved.
-
-
- ; General purpose macros
-
- putreg macro
- push hl ; Save registers in order
- push de
- push bc
- endm
-
- getreg macro
- pop bc ; Restore registers in order
- pop de
- pop hl
- endm
-
- swap macro
- rrca ; Exchange nibbles
- rrca
- rrca
- rrca
- endm
-
- ;----------------------------------------
-
- ; Macro for forming option bytes
-
- ; This macro generates a byte with bits corresponding to up to 8 option
- ; flags. The bits are filled in the order of the parameters and are right
- ; justified in the byte.
-
- optflag macro #f1,#f2,#f3,#f4,#f5,#f6,#f7,#f8
-
- flag defl 0 ;; initial value
-
- irp #temp,#f1,#f2,#f3,#f4,#f5,#f6,#f7,#f8
-
- if "#temp" ne ""
- flag defl flag shl 1
- if #temp
- flag defl flag or 1
- endif ;;temp
- endif ;;not nul temp
-
- endm ;; irp
-
- defb low flag
-
- endm ;; optflag
-
- ;----------------------------------------
-
- ; Macro for directory scanning
-
- ; This macro resolves the command token for possible directory references.
- ; FORM1 and FORM2 can each be either "DU" or "DIR". FORM2 can also be null.
- ; The two forms are scanned for in the indicated order.
-
- ; This macro preserves the pointer to the FCB in DE and to the next
- ; character in the line in HL. On return, the FCB pointer has been restored,
- ; and the command string pointer is still on the stack. The routines DUSCAN
- ; and DIRSCAN are called as needed.
-
- resolve macro #form1,#form2
-
- ; local resolved
-
- push hl ; Save pointer to command string
- push de ; Save pointer to FCB
- call #form1scan ; Scan for the first directory form
-
- if "#form2" ne ""
-
- jr z,gotit ; Resolved successfully, so jump ahead
-
- pop de ; Restore pointers for use by second call
- pop hl
- push hl ; Save them again
- push de
- call #form2scan ; Scan for the second directory form
-
- endif ;not nul form2
-
- gotit:
- pop de ; Restore pointer to FCB
-
- endm ;resolve
-
- ;-----------------------------------------------------------------------------
-
- ; Command table entry definition macro
-
- ; Macro to form an entry for one command in the table. The first parameter is
- ; the name to be used for the command (no quotes); the second parameter is the
- ; flag that indicates whether or not the command is to be enabled; the third
- ; parameter is the wheel control flag; and the last parameter is the jump
- ; address to the code that carries out the command. The command names are
- ; automatically padded out to the correct length (they will be truncated and
- ; an error message will result if a command name is too long). The characters
- ; in the command name are automatically converted to upper case.
-
- command macro #cmdname,#enableflag,#wheelflag,#address
-
- if #enableflag ;; Generate command only if enabled
-
- whlmask defl #wheelflag ;; Initialize variables
- count defl cmdsize ;; Initialize to size of each command name
-
- irpc #char,'#cmdname' ;; Repeat over letters in command name
-
- count defl count - 1 ;; Count down characters in name
-
- if [ count lt cmdsize ]
-
- ;; If character is lower case, convert to upper case
-
- if [ '#char' ge 'a' ] and [ '#char' le 'z' ]
-
- if whlmask
- defm [ '#char' and 5fh ]
- else ;;not whlmask
- defb [ '#char' and 5fh ]
- endif ;;whlmask
-
- else ;;not lower case
-
- if whlmask
- defm '#char' ;; If controlled by wheel, set high bit
- else ;;not whlmask
- defb '#char' ;; If not restricted, leave high bit clear
- endif ;;whlmask
-
- endif ;;lower case
-
- endif ;;[ count lt cmdsize ]
-
- whlmask defl false ;; Turn off high-bit setting after first char
-
- endm ;irpc
-
- ;; Pad command name with blanks
-
- if [ count gt cmdsize ] ;; If we underflowed
- *** Command name "#cmdname" is too long / truncated ***
- else
- rept count
- defb ' '
- endm
- endif ;[ count gt cmdsize ]
-
- dw #address ;; Dispatch address for command
-
- endif ;enable
-
- endm ;command
-
- ;---------------------------------------------------------------------------
-
- ;One macro to resolve ZASM's trouble with pseudo-op "page"
-
- page macro
- eject
- endm
-
-
- ; End Z33MAC.LIB
-