mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
361 lines
12 KiB
361 lines
12 KiB
;%BEGIN 0
|
|
;%Program: PPAL
|
|
;%Author: Richard Conn
|
|
;%Version:
|
|
VERS equ 3
|
|
;%Date: 3 Sep 1986
|
|
;%Revision History:
|
|
;1. 1 Sep 86, Richard Conn
|
|
; Initial beta-test release
|
|
;2. 3 Sep 86, Richard Conn
|
|
; Fixed Z3INS compatability problem
|
|
; Created LSy option to control colons after labels of MACRO, SET,
|
|
; and EQU
|
|
; Placed IF/ELSE/ENDIF at same indentation level
|
|
; Change Iy option to IIy option
|
|
; Added IMy option for MACRO/ENDM indentation
|
|
; Added directives I+ and I- for manual increment and decrement of
|
|
; indentation level
|
|
; Fixed input line counting problem
|
|
;3. 5 Sep 86, Richard Conn
|
|
; Added Field3 indentation options for EQU and SET (OE and OS)
|
|
; Changed O directive to OC, OE, and OS
|
|
; Added comment in directive processor
|
|
;%Invocation: PPAL file_list [directive_list]
|
|
;%Index: Pretty Assembler
|
|
;%Index: PPAL
|
|
;%Index: Pretty Printer
|
|
;%Description:
|
|
; PPAL is a Pretty Printer for Assembly Language for the Z System.
|
|
;Its purpose is to reformat assembly language source programs in order to
|
|
;have all Z System programs conform to a standard structure. PPAL is highly
|
|
;configurable, accepting directives from both the command line and the source
|
|
;code itself, so that PPAL may be used to format programs in different ways
|
|
;for a variety of standards.
|
|
; Directives for specific configuration of the pretty printing process
|
|
;may be presented on the command line or within the body of the code in
|
|
;special comment lines, beginning with ";#". The following directives are
|
|
;recognized. In each general case (like, Au), the first letter indicates the
|
|
;directive name, and the following letters indicate types of characters which
|
|
;may be specified; specifically:
|
|
; o - option chars specific to the directive
|
|
; u - case indication, U for Upper-case, L for Lower-case,
|
|
; X for unchanged
|
|
; y - yes/no indication, Y for Yes, N for No, X for unchanged
|
|
;
|
|
; ;text - marks a comment in the directive line
|
|
; Au - controls the case of operands (arguments)
|
|
; AU makes non-quoted alphabetic argument characters upper-case
|
|
; AL makes non-quoted alphabetic argument characters lower-case
|
|
; AX leaves the case of argument characters unchanged
|
|
; By - remove blank lines
|
|
; BY (yes) turns on removal of blank lines
|
|
; BN (no) turns off removal of blank lines
|
|
; BX (unchanged) is the same as BN
|
|
; Cou, Coy - comment line formatting (a comment line is a line beginning
|
|
; with a semicolon, as opposed to an embedded comment)
|
|
; CWy controls removal of the space character after the
|
|
; semicolon
|
|
; CWY (yes) removes the space after the semicolon if a
|
|
; space is present, else no change
|
|
; CWN (no) inserts the space after the semicolon if no
|
|
; space is present, else no change
|
|
; CWX (unchanged) makes no change
|
|
; CFu controls case of the first character in the comment line
|
|
; CFU makes the first character upper-case
|
|
; CFL make the first character lower-case
|
|
; CFX leaves the case of the first character unchanged
|
|
; CAu controls case of all characters in the comment line
|
|
; except the first character if CFU or CFL is in effect
|
|
; CAU makes all characters upper-case
|
|
; CAL makes all characters lower-case
|
|
; CAX leaves the case of all characters unchanged
|
|
; Eou, Eoy - embedded comment formatting
|
|
; ECy controls placement of the embedded comment if it begins
|
|
; after field4 (column 33)
|
|
; ECY (yes) places embedded comments on the next line
|
|
; ECN, ECX (no, unchanged) leaves embedded comments
|
|
; on the same line
|
|
; EWy controls removal of the space character after the
|
|
; semicolon
|
|
; EWY (yes) removes the space after the semicolon if a
|
|
; space is present, else no change
|
|
; EWN (no) inserts the space after the semicolon if no
|
|
; space is present, else no change
|
|
; EWX (unchanged) makes no change
|
|
; EFu controls case of the first character in the comment
|
|
; EFU makes the first character upper-case
|
|
; EFL make the first character lower-case
|
|
; EFX leaves the case of the first character unchanged
|
|
; EAu controls case of all characters in the comment
|
|
; except the first character if EFU or EFL is in effect
|
|
; EAU makes all characters upper-case
|
|
; EAL makes all characters lower-case
|
|
; EAX leaves the case of all characters unchanged
|
|
; Ioy - indent lines subordinate to IFs or MACROs
|
|
; I+ increases the indentation level by 1 character
|
|
; I- decreases the indentation level by 1 character (0 min)
|
|
; IIy controls indentation for the IF/ELSE/ENDIF pseudo-ops
|
|
; IIY causes all opcodes subordinate to an IF to be
|
|
; indented one character; each successive IF
|
|
; causes another indentation; ENDIF brings the
|
|
; indentation level out; ELSE temporarily brings
|
|
; the indentation level out for the ELSE pseudo-op
|
|
; only
|
|
; IIN, IIX (no, unchanged) causes indentation under IFs
|
|
; to not take place
|
|
; IMy controls indentation for the MACRO/ENDM pseudo-ops
|
|
; IMY causes all opcodes subordinate to a MACRO to be
|
|
; indented one character; ENDM brings the
|
|
; indentation level out
|
|
; IMN, IMX (no, unchanged) causes indentation under
|
|
; MACROs to not take place
|
|
; Lou, Loy - control format of labels
|
|
; LFu controls the case of the first character of a label
|
|
; LFU makes the first character upper-case
|
|
; LFL makes the first character lower-case
|
|
; LFX leaves the case of the first character unchanged
|
|
; LAu controls the case of all characters in a label except
|
|
; the first character if LFU or LFL is in effect
|
|
; LAU makes all characters upper-case
|
|
; LAL makes all characters lower-case
|
|
; LAX leaves the case of all characters unchanged
|
|
; LCy controls the presence of a colon after a normal label
|
|
; LCY ensures that there is a colon after each label
|
|
; LCN ensures that there is no colon after each label
|
|
; LCX has no effect on a trailing colon; if one was
|
|
; present in the input, it is present in the output
|
|
; LSy controls the presence of a colon after a special label,
|
|
; where a "special" label is a label in front of a MACRO,
|
|
; SET, or EQU pseudo-op
|
|
; LSY ensures that there is a colon after a special label
|
|
; LSN ensures that there is no colon after a spec label
|
|
; LSX has no effect on a trailing colon; if one was
|
|
; present in the input, it is present in the output
|
|
; LLy controls the presence of a new line following a label
|
|
; LLY places a new line after a label
|
|
; LLN, LLX does not place a new line after a label
|
|
; L8y controls the presence of a new line following a label
|
|
; which is longer than 8 characters
|
|
; L8Y places a new line after an 8+ character label
|
|
; L8N, L8X does not place a new line after an 8+
|
|
; character label
|
|
; Oou or Ooy - controls the appearance of opcodes
|
|
; OCu - controls the case of opcodes
|
|
; OCU makes opcodes upper-case
|
|
; OCL makes opcodes lower-case
|
|
; OCX leaves the case of opcodes unchanged
|
|
; OEy - indent EQU opcode to Field 3 (col 17)?
|
|
; OEY indents the EQU opcode to field3 (col 17)
|
|
; OEN, OEX indents the EQU opcode to field2 (col 9)
|
|
; OSy - indent SET opcode to Field 3 (col 17)?
|
|
; OSY indents the SET opcode to field3 (col 17)
|
|
; OSN, OSX indents the SET opcode to field2 (col 9)
|
|
;
|
|
; In addition to the above directives, four predefined formats
|
|
;are available via the Fn directive, where 0 <= n <= 3. The predefined
|
|
;formats are:
|
|
; F0 - reset all directives to null
|
|
; Remove blank lines (B): No
|
|
; Comment lines
|
|
; First char (CF): Unchanged
|
|
; All chars (CA): Unchanged
|
|
; Remove Space after ; (CW): Unchanged
|
|
; Embedded comments
|
|
; First char (EF): Unchanged
|
|
; All chars (EA): Unchanged
|
|
; Remove Space after ; (EW): Unchanged
|
|
; Next line if after col 33 (EC): No
|
|
; Indentation
|
|
; of IFs (II): No
|
|
; of MACROs (IM): No
|
|
; Labels
|
|
; First char (LF): Unchanged
|
|
; All chars (LA): Unchanged
|
|
; Colon after label (LC): Unchanged
|
|
; Colon after special label (LS): Unchanged
|
|
; Line after label (LL): Unchanged
|
|
; Line after 8+ char label (L8): Unchanged
|
|
; Opcodes
|
|
; Opcode case (OC): Unchanged
|
|
; EQU indentation (OE): Field2
|
|
; SET indentation (OS): Field2
|
|
; Operand (argument) case (A): Unchanged
|
|
;
|
|
; F1 - Z System standard format
|
|
; Remove blank lines (B): No
|
|
; Comment lines
|
|
; First char (CF): Unchanged
|
|
; All chars (CA): Unchanged
|
|
; Remove Space after ; (CW): Unchanged
|
|
; Embedded comments
|
|
; First char (EF): Unchanged
|
|
; All chars (EA): Unchanged
|
|
; Remove Space after ; (EW): Yes
|
|
; Next line if after col 33 (EC): Yes
|
|
; Indentation
|
|
; of IFs (II): Yes
|
|
; of MACROs (IM): Yes
|
|
; Labels
|
|
; First char (LF): Unchanged
|
|
; All chars (LA): Upper
|
|
; Colon after label (LC): Yes
|
|
; Colon after special label (LS): No
|
|
; Line after label (LL): Yes
|
|
; Line after 8+ char label (L8): Yes
|
|
; Opcodes
|
|
; Opcode case (OC): Unchanged
|
|
; EQU indentation (OE): Field2
|
|
; SET indentation (OS): Field2
|
|
; Operand (argument) case (A): Lower
|
|
;
|
|
; F2 - special format
|
|
; Remove blank lines (B): Yes
|
|
; Comment lines
|
|
; First char (CF): Unchanged
|
|
; All chars (CA): Unchanged
|
|
; Remove Space after ; (CW): Yes
|
|
; Embedded comments
|
|
; First char (EF): Upper
|
|
; All chars (EA): Lower
|
|
; Remove Space after ; (EW): Yes
|
|
; Next line if after col 33 (EC): Yes
|
|
; Indentation
|
|
; of IFs (II): Yes
|
|
; of MACROs (IM): Yes
|
|
; Labels
|
|
; First char (LF): Upper
|
|
; All chars (LA): Lower
|
|
; Colon after label (LC): Yes
|
|
; Colon after special label (LS): No
|
|
; Line after label (LL): Yes
|
|
; Line after 8+ char label (L8): Yes
|
|
; Opcodes
|
|
; Opcode case (OC): Unchanged
|
|
; EQU indentation (OE): Field2
|
|
; SET idnentation (OS): Field2
|
|
; Operand (argument) case (A): Lower
|
|
;
|
|
; F3 - special format
|
|
; Remove blank lines (B): Yes
|
|
; Comment lines
|
|
; First char (CF): Unchanged
|
|
; All chars (CA): Unchanged
|
|
; Remove Space after ; (CW): No
|
|
; Embedded comments
|
|
; First char (EF): Upper
|
|
; All chars (EA): Lower
|
|
; Remove Space after ; (EW): Yes
|
|
; Next line if after col 33 (EC): Yes
|
|
; Indentation
|
|
; of IFs (II): Yes
|
|
; of MACROs (IM): Yes
|
|
; Labels
|
|
; First char (LF): Unchanged
|
|
; All chars (LA): Upper
|
|
; Colon after label (LC): Yes
|
|
; Colon after special label (LS): No
|
|
; Line after label (LL): Yes
|
|
; Line after 8+ char label (L8): Yes
|
|
; Opcodes
|
|
; Opcode case (OC): Unchanged
|
|
; EQU indentation (OE): Field2
|
|
; SET indentation (OS): Field2
|
|
; Operand (argument) case (A): Upper
|
|
;
|
|
; If no directives are given, the format F1 is selected. F1 is always
|
|
;selected as the default format, and directives can be used to vary specific
|
|
;settings or all settings within this default.
|
|
;
|
|
; Examples of various forms a label may take on:
|
|
; Forms AbCd hello EXEC
|
|
; -------- ---- ----- ----
|
|
; LFX, LAX AbCd hello EXEC
|
|
; LFU, LAX AbCd Hello EXEC
|
|
; LFL, LAX abCd hello eXEC
|
|
; LFX, LAU ABCD HELLO EXEC
|
|
; LFU, LAU ABCD HELLO EXEC
|
|
; LFL, LAU aBCD hELLO eXEC
|
|
; LFX, LAL abcd hello exec
|
|
; LFU, LAL Abcd Hello Exec
|
|
; LFL, LAL abcd hello exec
|
|
;
|
|
; Directives may be placed in any order with any or no delimiters:
|
|
; "LFXLAU" "LFX LAU" "LFX,LAU"
|
|
;have the same meanings. This applies to both command lines and comments:
|
|
; PPAL file1,file2 LFX LAU
|
|
; ;#LFX, LAU
|
|
; For directive in comments, the directive processing is terminated
|
|
;by either an end of line or a comment character:
|
|
; ;#LFX, LAU
|
|
; ;#LFX, LAU ; All labels are upper-case
|
|
; Note that allowing directives embedded in the files they are acting
|
|
;on allows one part of the file to take on one format and another part of the
|
|
;file to take on another format.
|
|
;
|
|
;Sample file before processing by PPAL:
|
|
;
|
|
; ; Sample file to illustrate PPAL
|
|
; ext cout,print
|
|
;
|
|
; ;#OEY ; Indent EQUs to Col 17 (Field 3)
|
|
;
|
|
; test equ 1
|
|
; numch equ 26
|
|
; fch equ 'A'
|
|
;
|
|
; ;#OEN ; Indent EQUs to Col 9 (Field 2)
|
|
;
|
|
; mymac macro
|
|
; call print
|
|
; if test
|
|
; db 'This is a test'
|
|
; else
|
|
; db 'This is normal'
|
|
; endif
|
|
; db ' ',0
|
|
; endm
|
|
;
|
|
; mymac
|
|
; ld b,numch
|
|
; ld a,fch
|
|
; loop: call cout
|
|
; inc a
|
|
; djnz loop
|
|
; ret
|
|
; end
|
|
;
|
|
;Sample file after processing by PPAL:
|
|
;
|
|
; ; Sample file to illustrate PPAL
|
|
; ext cout,print
|
|
;
|
|
; ;#OEY ; Indent EQUs to Col 17 (Field 3)
|
|
;
|
|
; TEST equ 1
|
|
; NUMCH equ 26
|
|
; FCH equ 'A'
|
|
;
|
|
; ;#OEN ; Indent EQUs to Col 9 (Field 2)
|
|
;
|
|
; MYMAC macro
|
|
; call print
|
|
; if test
|
|
; db 'This is a test'
|
|
; else
|
|
; db 'This is normal'
|
|
; endif
|
|
; db ' ',0
|
|
; endm
|
|
;
|
|
; mymac
|
|
; ld b,numch
|
|
; ld a,fch
|
|
; LOOP:
|
|
; call cout
|
|
; inc a
|
|
; djnz loop
|
|
; ret
|
|
; end
|
|
;
|
|
;%END
|
|
|