english
version "1.0"
identify "xyz"

#: This module implements the 8051 micrcontroller instruction codes.

module code

import
    bogus
    code_types
    character
    logical
    out_stream
    string
    types
    unsigned

#: {code} routines:

procedure acall@code
    takes
	code_address code_address
    returns code

    #: This procedure will return a {acall} {code} object containing
    #, {code_address}.

    code :@= allocate@code()
    code.acall := code_address
    return code


procedure add_a_rn@code
    takes
	rn rn
    returns code

    #: This procedure will return an {add_a_rn} {code} object containing
    #, {rn}.

    code :@= allocate@code()
    code.add_a_rn := rn
    return code


procedure add_a_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return an {add_a_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.add_a_direct := direct
    return code


procedure add_a_ri@code
    takes
	ri ri
    returns code

    #: This code procedure will return an {add_a_ri} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.add_a_ri := ri
    return code


procedure add_a_data@code
    takes
	immediate immediate
    returns code

    #: This procedure will return an {add_a_data} {code} object containing
    #, {immediate}.

    code :@= allocate@code()
    code.add_a_data := immediate
    return code


procedure addc_a_rn@code
    takes
	rn rn
    returns code

    #: This procedure will return an [addc_a_rn} {code} object containing
    #, {rn}.

    code :@= allocate@code()
    code.addc_a_rn := rn
    return code


procedure addc_a_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return an {add_a_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.addc_a_direct := direct
    return code


procedure addc_a_ri@code
    takes
	ri ri
    returns code

    #: This procedure will return a {addc_a_ri} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.addc_a_ri := ri
    return code


procedure addc_a_data@code
    takes
	immediate immediate
    returns code

    #: This procedure will return a {addc_a_data} {code} object containing
    #, {immediate}.

    code :@= allocate@code()
    code.addc_a_data := immediate
    return code


procedure ajmp@code
    takes
	code_address code_address
    returns code

    #: This procedure will return an {ajmp} {code} object containing
    #, {code_address}.

    code :@= allocate@code()
    code.ajmp := code_address
    return code


procedure anl_a_rn@code
    takes
	rn rn
    returns code

    #: This procedure will return an {anl_a_rn} {code} object containing
    #, {rn}.

    code :@= allocate@code()
    code.anl_a_rn := rn
    return code


procedure anl_a_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return a {anl_a_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.anl_a_direct := direct
    return code


procedure anl_a_ri@code
    takes
	ri ri
    returns code

    #: This procedure will return an {anl_a_ri} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.anl_a_ri := ri
    return code


procedure anl_a_data@code
    takes
	immediate immediate
    returns code

    #: This procedure will return an {anl_a_data} {code} object containing
    #, {immediate}.

    code :@= allocate@code()
    code.anl_a_data := immediate
    return code


procedure anl_direct_a@code
    takes
	direct direct
    returns code

    #: This procedure will return a {anl_direct_a} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.anl_direct_a := direct
    return code


procedure anl_direct_data@code
    takes
	direct_immediate direct_immediate
    returns code

    #: This procedure will return an {anl_direct_data} {code} object containing
    #, {direct_immediate}.

    code :@= allocate@code()
    code.anl_direct_data := direct_immediate
    return code


procedure anl_c_bit@code
    takes
	bit_address bit_address
    returns code

    #: This procedure will return an {anl_c_bit} {code} object containing
    #, {bit_address}.

    code :@= allocate@code()
    code.anl_c_bit := bit_address
    return code


procedure anl_c_nbit@code
    takes
	bit_address bit_address
    returns code

    #: This procedure will return an {anl_c_nbit} {code} object containing
    #, {bit_address}.

    code :@= allocate@code()
    code.anl_c_nbit := bit_address
    return code


procedure cjne_a_direct_rel@code
    takes
	direct_relative direct_relative
    returns code

    #: This procedure will return a {cjne_a_direct_rel} {code} object
    #, containing {direct_relative}.

    code :@= allocate@code()
    code.cjne_a_direct_rel := direct_relative
    return code


procedure cjne_a_data_rel@code
    takes
	immediate_relative immediate_relative
    returns code

    #: This procedure will return a {cjne_a_data_rel} {code} object containing
    #, {immediate_relative}.

    code :@= allocate@code()
    code.cjne_a_data_rel := immediate_relative
    return code


procedure cjne_rn_data_rel@code
    takes
	rn_immediate_relative rn_immediate_relative
    returns code

    #: This procedure will return a {cjne_rn_data_rel} {code} object containing
    #, {rn_immediate_relative}.

    code :@= allocate@code()
    code.cjne_rn_data_rel := rn_immediate_relative
    return code


procedure cjne_ri_data_rel@code
    takes
	ri_immediate_relative ri_immediate_relative
    returns code

    #: This procedure will return a {cjne_ri_data_rel} {code} object containing
    #, {ri_immediate_relative}.

    code :@= allocate@code()
    code.cjne_ri_data_rel := ri_immediate_relative
    return code


procedure clr_a@code
    takes_nothing
    returns code

    #: This procedure will return a {clr_a} {code} object
    #,.

    code :@= allocate@code()
    code.clr_a := ??
    return code


procedure clr_c@code
    takes_nothing
    returns code

    #: This procedure will return a {clr_c} {code} object
    #,.

    code :@= allocate@code()
    code.clr_c := ??
    return code


procedure clr_bit@code
    takes
	bit_address bit_address
    returns code

    #: This procedure will return a {clr_bit} {code} object containing
    #, {bit_address}.

    code :@= allocate@code()
    code.clr_bit := bit_address
    return code


procedure cpl_a@code
    takes_nothing
    returns code

    #: This procedure will return a {cpl_a} {code} object
    #,.

    code :@= allocate@code()
    code.cpl_a := ??
    return code


procedure cpl_c@code
    takes_nothing
    returns code

    #: This procedure will return a {cpl_c} {code} object
    #,.

    code :@= allocate@code()
    code.cpl_c := ??
    return code


procedure cpl_bit@code
    takes
	bit_address bit_address
    returns code

    #: This procedure will return a {cpl_bit} {code} object
    #, {bit_address}.

    code :@= allocate@code()
    code.cpl_bit := bit_address
    return code


procedure da@code
    takes_nothing
    returns code

    #: This procedure will return a {da} {code} object
    #,.

    code :@= allocate@code()
    code.da := ??
    return code


procedure dec_a@code
    takes_nothing
    returns code

    #: This procedure will return a {dec_a} {code} object
    #,.

    code :@= allocate@code()
    code.dec_a := ??
    return code


procedure dec_rn@code
    takes
	rn rn
    returns code

    #: This procedure will return a {dec_rn} {code} object containing
    #, {rn}.

    code :@= allocate@code()
    code.dec_rn := rn
    return code


procedure dec_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return a {dec_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.dec_direct := direct
    return code


procedure dec_ri@code
    takes
	ri ri
    returns code

    #: This procedure will return a {dec_ri} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.dec_ri := ri
    return code


procedure div@code
    takes_nothing
    returns code

    #: This procedure will return a {div} {code} object
    #,.

    code :@= allocate@code()
    code.div := ??
    return code


procedure djnz_rn_rel@code
    takes
	rn_relative rn_relative
    returns code

    #: This procedure will return a {djnz_rn_rel} {code} object containing
    #, {rn_relative}.

    code :@= allocate@code()
    code.djnz_rn_rel := rn_relative
    return code


procedure djnz_direct_rel@code
    takes
	direct_relative direct_relative
    returns code

    #: This procedure will return a {djnz_direct_rel} {code} object containing
    #, {direct_relative}.

    code :@= allocate@code()
    code.djnz_direct_rel := direct_relative
    return code


procedure inc_a@code
    takes_nothing
    returns code

    #: This procedure will return an {inc_a} {code} object
    #,.

    code :@= allocate@code()
    code.inc_a := ??
    return code


procedure inc_rn@code
    takes
	rn rn
    returns code

    #: This procedure will return an {inc_rn} {code} object containing
    #, {rn}.

    code :@= allocate@code()
    code.inc_rn := rn
    return code


procedure inc_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return an {inc_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.inc_direct := direct
    return code


procedure inc_ri@code
    takes
	ri ri
    returns code

    #: This procedure will return an {inc_ri} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.inc_ri := ri
    return code


procedure inc_dptr@code
    takes_nothing
    returns code

    #: This procedure will return an {inc_dptr} {code} object
    #,.

    code :@= allocate@code()
    code.inc_dptr := ??
    return code


procedure jb_bit_rel@code
    takes
	bit_relative bit_relative
    returns code

    #: This procedure will return a {jb_bit_rel} {code} object containing
    #, {bit_relative}.

    code :@= allocate@code()
    code.jb_bit_rel := bit_relative
    return code


procedure jbc_bit_rel@code
    takes
	bit_relative bit_relative
    returns code

    #: This procedure will return a {jbc_bit_rel} {code} object containing
    #, {bit_relative}.

    code :@= allocate@code()
    code.jbc_bit_rel := bit_relative
    return code


procedure jc_rel@code
    takes
	relative relative
    returns code

    #: This procedure will return a {jc_rel} {code} object containing
    #, {relative}.

    code :@= allocate@code()
    code.jc_rel := relative
    return code


procedure jmp_a_dptr@code
    takes_nothing
    returns code

    #: This procedure will return a {jmp_a_dptr} {code} object
    #,.

    code :@= allocate@code()
    code.jmp_a_dptr := ??
    return code


procedure jnb_bit_rel@code
    takes
	bit_relative bit_relative
    returns code

    #: This procedure will return a {jnb_bit_rel} {code} object containing
    #, {bit_relative}.

    code :@= allocate@code()
    code.jnb_bit_rel := bit_relative
    return code


procedure jnc_rel@code
    takes
	relative relative
    returns code

    #: This procedure will return a {jnc_rel} {code} object containing
    #, {relative}.

    code :@= allocate@code()
    code.jnc_rel := relative
    return code


procedure jnz_rel@code
    takes
	relative relative
    returns code

    #: This procedure will return a {jnz_rel} {code} object containing
    #, {relative}.

    code :@= allocate@code()
    code.jnz_rel := relative
    return code


procedure jz_rel@code
    takes
	relative relative
    returns code

    #: This procedure will return a {jz_rel} {code} object containing
    #, {relative}.

    code :@= allocate@code()
    code.jz_rel := relative
    return code


procedure lcall@code
    takes
	code_address code_address
    returns code

    #: This procedure will return an {lcall} {code} object containing
    #, {code_address}.

    code :@= allocate@code()
    code.lcall := code_address
    return code


procedure ljmp@code
    takes
	code_address code_address
    returns code

    #: This procedure will return an {ljmp} {code} object containing
    #, {code_address}.

    code :@= allocate@code()
    code.ljmp := code_address
    return code


procedure mov_a_rn@code
    takes
	rn rn
    returns code

    #: This procedure will return a {mov_a_rn} {code} object containing
    #, {rn}.

    code :@= allocate@code()
    code.mov_a_rn := rn
    return code


procedure mov_a_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return a {mov_a_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.mov_a_direct := direct
    return code


procedure mov_a_ri@code
    takes
	ri ri
    returns code

    #: This procedure will return a {mov_a_ri} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.mov_a_ri := ri
    return code


procedure mov_a_data@code
    takes
	immediate immediate
    returns code

    #: This procedure will return a {mov_a_data} {code} object containing
    #, {immediate}.

    code :@= allocate@code()
    code.mov_a_data := immediate
    return code


procedure mov_rn_a@code
    takes
	rn rn
    returns code

    #: This procedure will return a {mov_rn_a} {code} object containing
    #, {rn}.

    code :@= allocate@code()
    code.mov_rn_a := rn
    return code


procedure mov_rn_direct@code
    takes
	rn_direct rn_direct
    returns code

    #: This procedure will return a {mov_rn_direct} {code} object containing
    #, {rn_direct}.

    code :@= allocate@code()
    code.mov_rn_direct := rn_direct
    return code


procedure mov_rn_data@code
    takes
	rn_immediate rn_immediate
    returns code

    #: This procedure will return a {mov_rn_data} {code} object containing
    #, {rn_immediate}.

    code :@= allocate@code()
    code.mov_rn_data := rn_immediate
    return code


procedure mov_direct_a@code
    takes
	direct direct
    returns code

    #: This procedure will return a {mov_direct_a} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.mov_direct_a := direct
    return code


procedure mov_direct_rn@code
    takes
	direct_rn direct_rn
    returns code

    #: This procedure will return a {mov_direct_rn} {code} object containing
    #, {direct_rn}.

    code :@= allocate@code()
    code.mov_direct_rn := direct_rn
    return code


procedure mov_direct_direct@code
    takes
	direct_direct direct_direct
    returns code

    #: This procedure will return a {mov_direct_direct} {code} object
    #, containing {direct_direct}.

    code :@= allocate@code()
    code.mov_direct_direct := direct_direct
    return code


procedure mov_direct_ri@code
    takes
	direct_ri direct_ri
    returns code

    #: This procedure will return a {mov_direct_ri} {code} object containing
    #, {direct_ri}.

    code :@= allocate@code()
    code.mov_direct_ri := direct_ri
    return code


procedure mov_direct_data@code
    takes
	direct_immediate direct_immediate
    returns code

    #: This procedure will return a {mov_direct_data} {code} object containing
    #, {direct_immediate}.

    code :@= allocate@code()
    code.mov_direct_data := direct_immediate
    return code


procedure mov_ri_a@code
    takes
	ri ri
    returns code

    #: This procedure will return a {mov_ri_a} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.mov_ri_a := ri
    return code


procedure mov_ri_direct@code
    takes
	ri_direct ri_direct
    returns code

    #: This procedure will return a {mov_ri_direct} {code} object containing
    #, {ri_direct}.

    code :@= allocate@code()
    code.mov_ri_direct := ri_direct
    return code


procedure mov_ri_data@code
    takes
	ri_immediate ri_immediate
    returns code

    #: This procedure will return a {mov_ri_data} {code} object containing
    #, {ri_immediate}.

    code :@= allocate@code()
    code.mov_ri_data := ri_immediate
    return code


procedure mov_c_bit@code
    takes
	bit_address bit_address
    returns code

    #: This procedure will return a {mov_c_bit} {code} object containing
    #, {bit_address}.

    code :@= allocate@code()
    code.mov_c_bit := bit_address
    return code


procedure mov_bit_c@code
    takes
	bit_address bit_address
    returns code

    #: This procedure will return a {mov_bit_c} {code} object containing
    #, {bit_address}.

    code :@= allocate@code()
    code.mov_bit_c := bit_address
    return code


procedure mov_dptr_data16@code
    takes
	immediate16 immediate16
    returns code

    #: This procedure will return a {mov_dptr_data16} {code} object containing
    #, {immediate16}.

    code :@= allocate@code()
    code.mov_dptr_data16 := immediate16
    return code


procedure movc_a_dptr@code
    takes_nothing
    returns code

    #: This procedure will return a {movc_a_dptr} {code} object
    #,.

    code :@= allocate@code()
    code.movc_a_dptr := ??
    return code


procedure movc_a_pc@code
    takes_nothing
    returns code

    #: This procedure will return a {movc_a_pc} {code} object
    #,.

    code :@= allocate@code()
    code.movc_a_pc := ??
    return code


procedure movx_a_ri@code
    takes
	ri ri
    returns code

    #: This procedure will return a {movx_a_ri} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.movx_a_ri := ri
    return code


procedure movx_a_dptr@code
    takes_nothing
    returns code

    #: This procedure will return a {movx_a_dptr} {code} object
    #,.

    code :@= allocate@code()
    code.movx_a_dptr := ??
    return code


procedure movx_ri_a@code
    takes
	ri ri
    returns code

    #: This procedure will return a {movx_ri_a} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.movx_ri_a := ri
    return code


procedure movx_dptr_a@code
    takes_nothing
    returns code

    #: This procedure will return a {movx_dptr_a} {code} object
    #,.

    code :@= allocate@code()
    code.movx_dptr_a := ??
    return code


procedure mul_ab@code
    takes_nothing
    returns code

    #: This procedure will return a {mul_ab} {code} object
    #,.

    code :@= allocate@code()
    code.mul_ab := ??
    return code


procedure nop@code
    takes_nothing
    returns code

    #: This procedure will return a {nop} {code} object
    #,.

    code :@= allocate@code()
    code.nop := ??
    return code


procedure orl_a_rn@code
    takes
	rn rn
    returns code

    #: This procedure will return an {orl_a_rn} {code} object containing
    #, {rn}.

    code :@= allocate@code()
    code.orl_a_rn := rn
    return code


procedure orl_a_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return an {orl_a_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.orl_a_direct := direct
    return code


procedure orl_a_ri@code
    takes
	ri ri
    returns code

    #: This procedure will return an {orl_a_ri} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.orl_a_ri := ri
    return code


procedure orl_a_data@code
    takes
	immediate immediate
    returns code

    #: This procedure will return an {orl_a_data} {code} object containing
    #, {immediate}.

    code :@= allocate@code()
    code.orl_a_data := immediate
    return code


procedure orl_direct_a@code
    takes
	direct direct
    returns code

    #: This procedure will return an {orl_direct_a} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.orl_direct_a := direct
    return code


procedure orl_direct_data@code
    takes
	direct_immediate direct_immediate
    returns code

    #: This procedure will return an {orl_direct_data} {code} object containing
    #, {direct_immediate}.

    code :@= allocate@code()
    code.orl_direct_data := direct_immediate
    return code


procedure orl_c_bit@code
    takes
	bit_address bit_address
    returns code

    #: This procedure will return a {orl_c_bit} {code} object containing
    #, {bit_address}.

    code :@= allocate@code()
    code.orl_c_bit := bit_address
    return code


procedure orl_c_nbit@code
    takes
	bit_address bit_address
    returns code

    #: This procedure will return a {orl_c_nbit} {code} object containing
    #, {bit_address}.

    code :@= allocate@code()
    code.orl_c_nbit := bit_address
    return code


procedure pop_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return a {pop_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.pop_direct := direct
    return code


procedure push_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return a {push_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.push_direct := direct
    return code


procedure ret@code
    takes_nothing
    returns code

    #: This procedure will return a {ret} {code} object
    #,.

    code :@= allocate@code()
    code.ret := ??
    return code


procedure reti@code
    takes_nothing
    returns code

    #: This procedure will return a {reti} {code} object
    #,.

    code :@= allocate@code()
    code.reti := ??
    return code


procedure rl_a@code
    takes_nothing
    returns code

    #: This procedure will return a {rl_a} {code} object
    #,.

    code :@= allocate@code()
    code.rl_a := ??
    return code


procedure rlc_a@code
    takes_nothing
    returns code

    #: This procedure will return a {rlc_a} {code} object
    #,.

    code :@= allocate@code()
    code.rlc_a := ??
    return code


procedure rr_a@code
    takes_nothing
    returns code

    #: This procedure will return a {rr_a} {code} object
    #,.

    code :@= allocate@code()
    code.rr_a := ??
    return code


procedure rrc_a@code
    takes_nothing
    returns code

    #: This procedure will return a {rrc_a} {code} object
    #,.

    code :@= allocate@code()
    code.rrc_a := ??
    return code


procedure setb_c@code
    takes_nothing
    returns code

    #: This procedure will return a {setb_c} {code} object
    #,.

    code :@= allocate@code()
    code.setb_c := ??
    return code


procedure setb_bit@code
    takes
	bit_address bit_address
    returns code

    #: This procedure will return a {SETB bit} {code} object containing
    #, {bit_address}.

    code :@= allocate@code()
    code.setb_bit := bit_address
    return code


procedure sjmp_rel@code
    takes
	relative relative
    returns code

    #: This procedure will return a {sjmp_rel} {code} object containing
    #, {relative}.

    code :@= allocate@code()
    code.sjmp_rel := relative
    return code


procedure sbbc_a_rn@code
    takes
	rn rn
    returns code

    #: This procedure will return a {sbbc_a_rn} {code} object containing
    #, {rn}.

    code :@= allocate@code()
    code.sbbc_a_rn := rn
    return code


procedure sbbc_a_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return a {sbbc_a_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.sbbc_a_direct := direct
    return code


procedure sbbc_a_ri@code
    takes
	ri ri
    returns code

    #: This procedure will return a {sbbc_a_ri} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.sbbc_a_ri := ri
    return code


procedure sbbc_a_data@code
    takes
	immediate immediate
    returns code

    #: This procedure will return a {sbbc_a_data} {code} object containing
    #, {immediate}.

    code :@= allocate@code()
    code.sbbc_a_data := immediate
    return code


procedure swap_a@code
    takes_nothing
    returns code

    #: This procedure will return a {swap_a} {code} object
    #,.

    code :@= allocate@code()
    code.swap_a := ??
    return code


procedure xch_a_rn@code
    takes
	rn rn
    returns code

    #: This procedure will return a {xch_a_rn} {code} object containing
    #, {rn}.

    code :@= allocate@code()
    code.xch_a_rn := rn
    return code


procedure xch_a_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return a {xch_a_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.xch_a_direct := direct
    return code


procedure xch_a_ri@code
    takes
	ri ri
    returns code

    #: This procedure will return a {xch_a_ri} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.xch_a_ri := ri
    return code


procedure xchd_a_ri@code
    takes
	ri ri
    returns code

    #: This procedure will return a {xchd_a_ri} {code} object containing
    #, {ri}.

    code :@= allocate@code()
    code.xchd_a_ri := ri
    return code


procedure xrl_a_rn@code
    takes
	rn rn
    returns code

    #: This procedure will return a {xrl_a_rn} {code} object containing
    #, {rn}.

    code :@= allocate@code()
    code.xrl_a_rn := rn
    return code


procedure xrl_a_direct@code
    takes
	direct direct
    returns code

    #: This procedure will return a {xrl_a_direct} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.xrl_a_direct := direct
    return code


procedure xrl_a_ri@code
    takes
	ri ri
    returns code

    #: This procedure will return a {xrl_a_ri} {code} object containing
    #, {x}.

    code :@= allocate@code()
    code.xrl_a_ri := ri
    return code


procedure xrl_a_data@code
    takes
	immediate immediate
    returns code

    #: This procedure will return a {xrl_a_data} {code} object containing
    #, {immediate}.

    code :@= allocate@code()
    code.xrl_a_data := immediate
    return code


procedure xrl_direct_a@code
    takes
	direct direct
    returns code

    #: This procedure will return a {xrl_direct_a} {code} object containing
    #, {direct}.

    code :@= allocate@code()
    code.xrl_direct_a := direct
    return code


procedure xrl_direct_data@code
    takes
	direct_immediate direct_immediate
    returns code

    #: This procedure will return a {xrl_direct_data} {code} object containing
    #, {direct_immediate}.
    code :@= allocate@code()
    code.xrl_direct_data := direct_immediate
    return code


procedure create@bit_relative
    takes
	bit_address bit_address
	relative relative
    returns bit_relative

    #: This procedure will create and return a new {bit_relative} object
    #, and containing {bit_address} and {relative}.

    initialize bit_relative:: bit_relative := allocate@bit_relative()
        bit_relative.bit_address := bit_address
	bit_relative.relative := relative
    return bit_relative


procedure create@code_address
    takes
	address unsigned
	instruction instruction
    returns code_address

    #: This procedure will create and return a new {code_address} object
    #, and containing {address} and {instruction}.
    #, {instruction} can be ??@{instruction}.

    assert address <= 0xffff
    initialize code_address:: code_address := allocate@code_address()
        code_address.address := address
	code_address.instruction := instruction
    return code_address


procedure create@direct
    takes
	address unsigned
    returns direct

    #: This procedure will create and return a new {direct} object
    #, and containing {address}.

    assert address <= 0xff
    initialize direct:: direct := allocate@direct()
        direct.address := address
    return direct


procedure create@direct_direct
    takes
	source direct
	destination direct
    returns direct_direct

    #: This procedure will create and return a new {direct_direct} object
    #, and containing {source} and {destination}.

    initialize direct_direct:: direct_direct := allocate@direct_direct()
        direct_direct.source := source
	direct_direct.destination := destination
    return direct_direct


procedure create@direct_immediate
    takes
	direct direct
	immediate immediate
    returns direct_immediate

    #: This procedure will create and return a new {direct_immediate} object
    #, and containing {direct} and {immediate}.

    initialize direct_immediate:: direct_immediate :=
      allocate@direct_immediate()
        direct_immediate.direct := direct
	direct_immediate.immediate := immediate
    return direct_immediate


procedure create@direct_relative
    takes
	direct direct
	relative relative
    returns direct_relative

    #: This procedure will create and return a new {direct_relative} object
    #, and containing {direct} and {relative}.

    initialize direct_relative:: direct_relative := allocate@direct_relative()
        direct_relative.direct := direct
	direct_relative.relative := relative
    return direct_relative


procedure create@direct_ri
    takes
	direct direct
	ri ri
    returns direct_ri

    #: This procedure will create and return a new {direct_ri} object
    #, and containing {direct} and {ri}.

    initialize direct_ri:: direct_ri := allocate@direct_ri()
        direct_ri.direct := direct
	direct_ri.ri := ri
    return direct_ri


procedure create@direct_rn
    takes
	direct direct
	rn rn
    returns direct_rn

    #: This procedure will create and return a new {direct_rn} object
    #, and containing {direct} and {rn}.

    initialize direct_rn:: direct_rn := allocate@direct_rn()
        direct_rn.direct := direct
	direct_rn.rn := rn
    return direct_rn


procedure create@immediate
    takes
	value unsigned
    returns immediate

    #: This procedure will create and return a new {immediate} object
    #, and containing {value}.

    assert value <= 0xff
    initialize immediate:: immediate := allocate@immediate()
        immediate.value := value
    return immediate


procedure create@immediate16
    takes
	value unsigned
    returns immediate16

    #: This procedure will create and return a new {immediate16} object
    #, and containing {value}.

    assert value <= 0xffff
    initialize immediate16:: immediate16 := allocate@immediate16()
        immediate16.value := value
    return immediate16

	
procedure create@immediate_relative
    takes
	immediate immediate
	relative relative
    returns immediate_relative

    #: This procedure will create and return a new {immediate_relative} object
    #, and containing {immediate} and {z}.

    initialize immediate_relative:: immediate_relative :=
      allocate@immediate_relative()
        immediate_relative.immediate := immediate
	immediate_relative.relative := relative
    return immediate_relative


procedure create@instruction
    takes
	address unsigned
	code code
	next instruction
    returns instruction

    #: This procedure will create and return a new {instruction} object
    #, and containing {address}, {code}, and {next}.
    #, {next} can be ??@{instruction}.

    initialize instruction:: instruction := allocate@instruction()
        instruction.address := address
	instruction.code := code
	instruction.next := next
    return instruction


procedure create@relative
    takes
	address unsigned
	instruction instruction
	offset unsigned
    returns relative

    #: This procedure will create and return a new {relative} object
    #, and containing {address}, {instruction,
    #, and {offset}.

    initialize relative:: relative := allocate@relative()
        relative.address := address
	relative.instruction := instruction
	relative.offset := offset
    return relative


procedure create@ri
    takes
	number unsigned
    returns ri

    #: This procedure will create and return a new {ri} object
    #, and containing {number}.

    assert number <= 1
    initialize ri:: ri := allocate@ri()
        ri.number := number
    return ri


procedure create@ri_immediate_relative
    takes
	ri ri
	immediate unsigned
	relative relative
    returns ri_immediate_relative

    #: This procedure will create and return a new {ri_immediate_relative}
    #, object and containing {ri} and {z}.

    initialize ri_immediate_relative:: ri_immediate_relative :=
      allocate@ri_immediate_relative()
        ri_immediate_relative.ri := ri
	ri_immediate_relative.immediate := immediate
	ri_immediate_relative.relative := relative
    return ri_immediate_relative


procedure create@ri_direct
    takes
	ri ri
	direct direct
    returns ri_direct

    #: This procedure will create and return a new {ri_direct} object
    #, and containing {ri} and {direct}.

    initialize ri_direct:: ri_direct := allocate@ri_direct()
        ri_direct.ri := ri
	ri_direct.direct := direct
    return ri_direct


procedure create@ri_immediate
    takes
	ri ri
	immediate immediate
    returns ri_immediate

    #: This procedure will create and return a new {ri_immediate} object
    #, and containing {ri} and {immediate}.

    initialize ri_immediate:: ri_immediate := allocate@ri_immediate()
        ri_immediate.ri := ri
	ri_immediate.immediate := immediate
    return ri_immediate


procedure create@rn
    takes
	number unsigned
    returns rn

    #: This procedure will create and return a new {rn} object
    #, and containing {number}.

    initialize rn:: rn := allocate@rn()
        rn.number := number
    return rn


procedure create@rn_immediate_relative
    takes
	rn rn
	immediate immediate
	relative relative
    returns rn_immediate_relative

    #: This procedure will create and return a new {rn_immediate_relative}
    #, object and containing {rn}, {immediate}, and
    #, {relative}.

    initialize rn_immediate_relative:: rn_immediate_relative :=
      allocate@rn_immediate_relative()
        rn_immediate_relative.rn := rn
        rn_immediate_relative.immediate := immediate
	rn_immediate_relative.relative := relative
    return rn_immediate_relative
	

procedure create@rn_direct
    takes
	rn rn
	direct direct
    returns rn_direct

    #: This procedure will create and return a new {rn_direct} object
    #, and containing {rn} and {direct}.

    initialize rn_direct:: rn_direct := allocate@rn_direct()
        rn_direct.rn := rn
	rn_direct.direct := direct
    return rn_direct


procedure create@rn_immediate
    takes
	rn rn
	immediate immediate
    returns rn_immediate

    #: This procedure will create and return a new {rn_immediate} object
    #, and containing {rn} and {immediate}.

    initialize rn_immediate:: rn_immediate := allocate@rn_immediate()
        rn_immediate.rn := rn
	rn_immediate.immediate := immediate
    return rn_immediate


procedure create@rn_relative
    takes
	rn rn
	relative relative
    returns rn_relative

    #: This procedure will create and return a new {rn_relative} object
    #, and containing {rn} and {relative}.

    initialize rn_relative:: rn_relative := allocate@rn_relative()
        rn_relative.rn := rn
	rn_relative.relative := relative
    return rn_relative







