home *** CD-ROM | disk | FTP | other *** search
- .Z80
- .XLIST
- @iflvl aset 0
- @brlvl aset 0
- @caslvl aset 0
- @getput macro symbol,val
- symbol aset val
- endm
- @push macro stk,val
- .ifndf stk,0
- if stk eq 0ffffh
- +++++++ @push_overflow stk
- else
- stk aset stk+1
- @getput stk%stk,val
- endif
- endm
- @pop macro stk,symbol
- .ifndf stk,0
- if stk eq 0
- +++++++ @pop_underflow stk
- else
- @getput symbol,stk%stk
- stk aset stk-1
- endif
- endm
- @jump macro a1,a2
- if nul a2
- jp a1
- else
- jp a1,a2
- endif
- endm
- @ijump macro a1,a2,a3
- if nul a2
- jp a1&a3
- exitm
- endif
- ifidn <a1>,<nz>
- jp z,a2&a3
- exitm
- endif
- ifidn <a1>,<z>
- jp nz,a2&a3
- exitm
- endif
- ifidn <a1>,<nc>
- jp c,a2&a3
- exitm
- endif
- ifidn <a1>,<c>
- jp nc,a2&a3
- exitm
- endif
- ifidn <a1>,<po>
- jp pe,a2&a3
- exitm
- endif
- ifidn <a1>,<pe>
- jp po,a2&a3
- exitm
- endif
- ifidn <a1>,<p>
- jp m,a2&a3
- exitm
- endif
- ifidn <a1>,<m>
- jp p,a2&a3
- endif
- endm
- @lbl macro a1,a2,a3
- if nul a2
- a1&a3:
- else
- if1
- ifndef a1
- a1&a3:
- else
- a2&a3:
- endif
- else
- ifndef a2
- a1&a3:
- else
- a2&a3:
- endif
- endif
- endif
- endm
- .ifndf macro var,val
- ifndef var
- var aset val
- endif
- endm
- .if macro cond
- if nul cond
- +++++++ if_condition_not_specified
- else
- @push @if,@iflvl
- @ijump cond,@ei1%@iflvl
- @iflvl aset @iflvl+1
- endif
- endm
- .else macro
- @pop @if,@gp
- @push @if,@gp
- @ijump @ei2%@gp
- @lbl @ei1%@gp
- endm
- .endif macro
- @pop @if,@gp
- @lbl @ei1%@gp,@ei2%@gp
- endm
- .do macro
- @push @br,@brlvl
- @lbl @ibr%@brlvl
- @brlvl aset @brlvl+1
- endm
- .while macro cond
- if nul cond
- +++++++ while_condition_not_specified
- else
- @pop @br,@gp
- @push @br,@gp
- @ijump cond,@ebr%@gp
- endif
- endm
- .until macro cond
- if nul cond
- +++++++ until_condition_not_specified
- else
- @pop @br,@gp
- @ijump cond,@ibr%@gp
- @lbl @ebr%@gp
- endif
- endm
- .enddo macro
- @pop @br,@gp
- @ijump @ibr%@gp
- @lbl @ebr%@gp
- endm
- .switch macro
- @push @br,@brlvl
- @brlvl aset @brlvl+1
- @push @case,@caslvl
- @caslvl aset @caslvl+1
- endm
- .case macro
- @pop @br,@gp
- @push @br,@gp
- @lbl @cas%@gp,,%@caslvl
- @caslvl aset @caslvl+1
- endm
- .cond macro cond
- if nul cond
- +++++++ cond_condition_not_specified
- else
- @pop @br,@gp
- @push @br,@gp
- @ijump cond,@cas%@gp,%@caslvl
- endif
- endm
- .otherwise macro
- .case
- endm
- .endsw macro
- @pop @br,@gp
- @lbl @ebr%@gp
- @pop @case,@caslvl
- endm
- .break macro cond
- @pop @br,@gp
- @push @br,@gp
- if nul cond
- @jump @ebr%@gp
- else
- @jump cond,@ebr%@gp
- endif
- endm
- .LIST