home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
utils
/
asmutl
/
m80str11.lbr
/
STRUCT.LZB
/
STRUCT.LIB
Wrap
Text File
|
1988-02-16
|
3KB
|
181 lines
.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