z80asm.html
bitfixer_bitfixer/dg/z88dk/doc/z80asm.html
<html>
  <head>
    <title>z80asm</title>
    <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
    <style type="text/css">ol.lst-kix_ov64fr7rk782-4.start{counter-reset:lst-ctn-kix_ov64fr7rk782-4 0}.lst-kix_vu66s3lius6d-8>li:before{content:"\0025a0  "}ol.lst-kix_2egbvjkv76xr-6.start{counter-reset:lst-ctn-kix_2egbvjkv76xr-6 0}.lst-kix_c0z3g1ej3y0v-4>li:before{content:"" counter(lst-ctn-kix_c0z3g1ej3y0v-4,lower-latin) ". "}.lst-kix_2egbvjkv76xr-1>li:before{content:"" counter(lst-ctn-kix_2egbvjkv76xr-1,lower-latin) ". "}ul.lst-kix_o3del2899phc-4{list-style-type:none}ul.lst-kix_o3del2899phc-3{list-style-type:none}ul.lst-kix_o3del2899phc-6{list-style-type:none}ul.lst-kix_o3del2899phc-5{list-style-type:none}.lst-kix_ov64fr7rk782-8>li{counter-increment:lst-ctn-kix_ov64fr7rk782-8}ul.lst-kix_o3del2899phc-8{list-style-type:none}ul.lst-kix_o3del2899phc-7{list-style-type:none}.lst-kix_c0z3g1ej3y0v-0>li:before{content:"" counter(lst-ctn-kix_c0z3g1ej3y0v-0,decimal) ". "}.lst-kix_r9wv2su6cl-3>li:before{content:"\0025cf  "}.lst-kix_c0z3g1ej3y0v-3>li:before{content:"" counter(lst-ctn-kix_c0z3g1ej3y0v-3,decimal) ". "}ul.lst-kix_o3del2899phc-1{list-style-type:none}ul.lst-kix_o3del2899phc-2{list-style-type:none}ul.lst-kix_o3del2899phc-0{list-style-type:none}ol.lst-kix_c0z3g1ej3y0v-4.start{counter-reset:lst-ctn-kix_c0z3g1ej3y0v-4 0}ol.lst-kix_ov64fr7rk782-7{list-style-type:none}ol.lst-kix_ov64fr7rk782-8{list-style-type:none}ol.lst-kix_ov64fr7rk782-5{list-style-type:none}ol.lst-kix_ov64fr7rk782-6{list-style-type:none}ol.lst-kix_ov64fr7rk782-4{list-style-type:none}.lst-kix_ndkfd864qtim-1>li:before{content:"" counter(lst-ctn-kix_ndkfd864qtim-1,lower-latin) ". "}ol.lst-kix_ov64fr7rk782-3{list-style-type:none}ol.lst-kix_ov64fr7rk782-2{list-style-type:none}ol.lst-kix_ov64fr7rk782-1{list-style-type:none}ol.lst-kix_ov64fr7rk782-0{list-style-type:none}.lst-kix_ov64fr7rk782-5>li:before{content:"" counter(lst-ctn-kix_ov64fr7rk782-5,lower-roman) ". "}.lst-kix_uca6qxt7rji2-6>li:before{content:"\0025cf  "}.lst-kix_24cvwe2r7lxg-7>li:before{content:"\0025cb  "}.lst-kix_c0z3g1ej3y0v-6>li{counter-increment:lst-ctn-kix_c0z3g1ej3y0v-6}.lst-kix_41pep6497ekp-1>li{counter-increment:lst-ctn-kix_41pep6497ekp-1}ol.lst-kix_41pep6497ekp-4.start{counter-reset:lst-ctn-kix_41pep6497ekp-4 0}.lst-kix_fbbhuf12458i-8>li:before{content:"\0025a0  "}.lst-kix_6qg5j6p6ra86-4>li:before{content:"\0025cb  "}ol.lst-kix_41pep6497ekp-1.start{counter-reset:lst-ctn-kix_41pep6497ekp-1 0}.lst-kix_5bc8j5orbnwv-7>li:before{content:"\0025cb  "}ol.lst-kix_41pep6497ekp-0.start{counter-reset:lst-ctn-kix_41pep6497ekp-0 0}.lst-kix_41pep6497ekp-0>li{counter-increment:lst-ctn-kix_41pep6497ekp-0}ol.lst-kix_41pep6497ekp-3.start{counter-reset:lst-ctn-kix_41pep6497ekp-3 0}.lst-kix_fbbhuf12458i-3>li:before{content:"\0025cf  "}.lst-kix_bp3knovtcexw-8>li:before{content:"\0025a0  "}.lst-kix_99imf6m4828h-7>li:before{content:"\0025cb  "}ul.lst-kix_vu66s3lius6d-0{list-style-type:none}ul.lst-kix_vu66s3lius6d-7{list-style-type:none}ul.lst-kix_vu66s3lius6d-8{list-style-type:none}.lst-kix_99imf6m4828h-1>li:before{content:"\0025cb  "}ul.lst-kix_vu66s3lius6d-5{list-style-type:none}ul.lst-kix_vu66s3lius6d-6{list-style-type:none}ul.lst-kix_vu66s3lius6d-3{list-style-type:none}.lst-kix_o3del2899phc-4>li:before{content:"\0025cb  "}ul.lst-kix_vu66s3lius6d-4{list-style-type:none}ul.lst-kix_vu66s3lius6d-1{list-style-type:none}ul.lst-kix_vu66s3lius6d-2{list-style-type:none}ol.lst-kix_ndkfd864qtim-5{list-style-type:none}ol.lst-kix_ndkfd864qtim-6{list-style-type:none}.lst-kix_2egbvjkv76xr-7>li{counter-increment:lst-ctn-kix_2egbvjkv76xr-7}ol.lst-kix_ndkfd864qtim-7{list-style-type:none}ol.lst-kix_ndkfd864qtim-8{list-style-type:none}.lst-kix_fb57nwogv1p2-7>li:before{content:"\0025cb  "}.lst-kix_ndkfd864qtim-4>li:before{content:"" counter(lst-ctn-kix_ndkfd864qtim-4,lower-latin) ". "}.lst-kix_vu66s3lius6d-7>li:before{content:"\0025cb  "}ol.lst-kix_2egbvjkv76xr-8.start{counter-reset:lst-ctn-kix_2egbvjkv76xr-8 0}.lst-kix_41pep6497ekp-7>li:before{content:"" counter(lst-ctn-kix_41pep6497ekp-7,lower-latin) ". "}ol.lst-kix_ndkfd864qtim-0{list-style-type:none}.lst-kix_dgme07d3bfcg-0>li:before{content:"\0025cf  "}.lst-kix_ndkfd864qtim-7>li:before{content:"" counter(lst-ctn-kix_ndkfd864qtim-7,lower-latin) ". "}ol.lst-kix_ndkfd864qtim-1{list-style-type:none}ol.lst-kix_ndkfd864qtim-2{list-style-type:none}.lst-kix_dgme07d3bfcg-2>li:before{content:"\0025a0  "}ol.lst-kix_ndkfd864qtim-3{list-style-type:none}ol.lst-kix_ndkfd864qtim-4{list-style-type:none}.lst-kix_6qg5j6p6ra86-3>li:before{content:"\0025cf  "}ol.lst-kix_41pep6497ekp-2.start{counter-reset:lst-ctn-kix_41pep6497ekp-2 0}.lst-kix_r9wv2su6cl-5>li:before{content:"\0025a0  "}.lst-kix_24cvwe2r7lxg-1>li:before{content:"\0025cb  "}.lst-kix_btfh7zr4nm4d-7>li{counter-increment:lst-ctn-kix_btfh7zr4nm4d-7}.lst-kix_shqxaxdaxlds-2>li:before{content:"\0025a0  "}.lst-kix_uca6qxt7rji2-4>li:before{content:"\0025cb  "}ol.lst-kix_btfh7zr4nm4d-7{list-style-type:none}.lst-kix_fb57nwogv1p2-4>li:before{content:"\0025cb  "}ol.lst-kix_btfh7zr4nm4d-8{list-style-type:none}ol.lst-kix_btfh7zr4nm4d-3{list-style-type:none}ol.lst-kix_2egbvjkv76xr-0.start{counter-reset:lst-ctn-kix_2egbvjkv76xr-0 0}ol.lst-kix_btfh7zr4nm4d-4{list-style-type:none}ol.lst-kix_btfh7zr4nm4d-5{list-style-type:none}.lst-kix_uca6qxt7rji2-7>li:before{content:"\0025cb  "}ol.lst-kix_btfh7zr4nm4d-6{list-style-type:none}ol.lst-kix_btfh7zr4nm4d-0{list-style-type:none}ol.lst-kix_btfh7zr4nm4d-1{list-style-type:none}ol.lst-kix_btfh7zr4nm4d-2{list-style-type:none}.lst-kix_2egbvjkv76xr-3>li{counter-increment:lst-ctn-kix_2egbvjkv76xr-3}ol.lst-kix_ndkfd864qtim-3.start{counter-reset:lst-ctn-kix_ndkfd864qtim-3 0}.lst-kix_ndkfd864qtim-2>li{counter-increment:lst-ctn-kix_ndkfd864qtim-2}.lst-kix_dgme07d3bfcg-1>li:before{content:"\0025cb  "}ol.lst-kix_btfh7zr4nm4d-4.start{counter-reset:lst-ctn-kix_btfh7zr4nm4d-4 0}.lst-kix_99imf6m4828h-4>li:before{content:"\0025cb  "}.lst-kix_fb57nwogv1p2-1>li:before{content:"\0025cb  "}.lst-kix_shqxaxdaxlds-0>li:before{content:"\0025cf  "}.lst-kix_dgme07d3bfcg-6>li:before{content:"\0025cf  "}.lst-kix_2egbvjkv76xr-2>li:before{content:"" counter(lst-ctn-kix_2egbvjkv76xr-2,lower-roman) ". "}.lst-kix_vu66s3lius6d-1>li:before{content:"\0025cb  "}.lst-kix_bp3knovtcexw-7>li:before{content:"\0025cb  "}.lst-kix_bp3knovtcexw-6>li:before{content:"\0025cf  "}.lst-kix_5bc8j5orbnwv-0>li:before{content:"\0025cf  "}.lst-kix_5bc8j5orbnwv-2>li:before{content:"\0025a0  "}.lst-kix_6qg5j6p6ra86-0>li:before{content:"\0025cf  "}.lst-kix_ndkfd864qtim-8>li:before{content:"" counter(lst-ctn-kix_ndkfd864qtim-8,lower-roman) ". "}.lst-kix_vu66s3lius6d-2>li:before{content:"\0025a0  "}ol.lst-kix_ndkfd864qtim-6.start{counter-reset:lst-ctn-kix_ndkfd864qtim-6 0}.lst-kix_ov64fr7rk782-8>li:before{content:"" counter(lst-ctn-kix_ov64fr7rk782-8,lower-roman) ". "}.lst-kix_41pep6497ekp-3>li:before{content:"" counter(lst-ctn-kix_41pep6497ekp-3,decimal) ". "}.lst-kix_41pep6497ekp-4>li{counter-increment:lst-ctn-kix_41pep6497ekp-4}.lst-kix_ndkfd864qtim-5>li{counter-increment:lst-ctn-kix_ndkfd864qtim-5}.lst-kix_41pep6497ekp-7>li{counter-increment:lst-ctn-kix_41pep6497ekp-7}ol.lst-kix_ndkfd864qtim-7.start{counter-reset:lst-ctn-kix_ndkfd864qtim-7 0}ol.lst-kix_41pep6497ekp-7.start{counter-reset:lst-ctn-kix_41pep6497ekp-7 0}ol.lst-kix_ov64fr7rk782-6.start{counter-reset:lst-ctn-kix_ov64fr7rk782-6 0}.lst-kix_2egbvjkv76xr-6>li{counter-increment:lst-ctn-kix_2egbvjkv76xr-6}.lst-kix_shqxaxdaxlds-7>li:before{content:"\0025cb  "}.lst-kix_o3del2899phc-6>li:before{content:"\0025cf  "}ol.lst-kix_c0z3g1ej3y0v-2.start{counter-reset:lst-ctn-kix_c0z3g1ej3y0v-2 0}ol.lst-kix_41pep6497ekp-5.start{counter-reset:lst-ctn-kix_41pep6497ekp-5 0}ul.lst-kix_fb57nwogv1p2-3{list-style-type:none}ul.lst-kix_fb57nwogv1p2-4{list-style-type:none}ul.lst-kix_fb57nwogv1p2-1{list-style-type:none}ul.lst-kix_fb57nwogv1p2-2{list-style-type:none}ul.lst-kix_fb57nwogv1p2-0{list-style-type:none}.lst-kix_bp3knovtcexw-1>li:before{content:"\0025cb  "}ol.lst-kix_btfh7zr4nm4d-5.start{counter-reset:lst-ctn-kix_btfh7zr4nm4d-5 0}.lst-kix_c0z3g1ej3y0v-6>li:before{content:"" counter(lst-ctn-kix_c0z3g1ej3y0v-6,decimal) ". "}.lst-kix_c0z3g1ej3y0v-8>li:before{content:"" counter(lst-ctn-kix_c0z3g1ej3y0v-8,lower-roman) ". "}.lst-kix_ndkfd864qtim-4>li{counter-increment:lst-ctn-kix_ndkfd864qtim-4}ol.lst-kix_ov64fr7rk782-5.start{counter-reset:lst-ctn-kix_ov64fr7rk782-5 0}.lst-kix_2egbvjkv76xr-2>li{counter-increment:lst-ctn-kix_2egbvjkv76xr-2}.lst-kix_ov64fr7rk782-1>li:before{content:"" counter(lst-ctn-kix_ov64fr7rk782-1,lower-latin) ". "}ol.lst-kix_41pep6497ekp-7{list-style-type:none}ol.lst-kix_41pep6497ekp-8{list-style-type:none}ul.lst-kix_fb57nwogv1p2-6{list-style-type:none}ul.lst-kix_fb57nwogv1p2-5{list-style-type:none}ul.lst-kix_fb57nwogv1p2-8{list-style-type:none}ul.lst-kix_fb57nwogv1p2-7{list-style-type:none}ol.lst-kix_41pep6497ekp-2{list-style-type:none}ul.lst-kix_dgme07d3bfcg-0{list-style-type:none}.lst-kix_bp3knovtcexw-4>li:before{content:"\0025cb  "}ol.lst-kix_ndkfd864qtim-0.start{counter-reset:lst-ctn-kix_ndkfd864qtim-0 0}.lst-kix_uca6qxt7rji2-2>li:before{content:"\0025a0  "}ol.lst-kix_41pep6497ekp-1{list-style-type:none}ul.lst-kix_dgme07d3bfcg-1{list-style-type:none}ol.lst-kix_41pep6497ekp-0{list-style-type:none}ul.lst-kix_dgme07d3bfcg-2{list-style-type:none}.lst-kix_41pep6497ekp-5>li:before{content:"" counter(lst-ctn-kix_41pep6497ekp-5,lower-roman) ". "}ul.lst-kix_dgme07d3bfcg-3{list-style-type:none}ol.lst-kix_41pep6497ekp-6{list-style-type:none}ul.lst-kix_dgme07d3bfcg-4{list-style-type:none}ol.lst-kix_41pep6497ekp-5{list-style-type:none}ul.lst-kix_dgme07d3bfcg-5{list-style-type:none}.lst-kix_ov64fr7rk782-4>li{counter-increment:lst-ctn-kix_ov64fr7rk782-4}ol.lst-kix_41pep6497ekp-4{list-style-type:none}ul.lst-kix_dgme07d3bfcg-6{list-style-type:none}ol.lst-kix_41pep6497ekp-3{list-style-type:none}ul.lst-kix_dgme07d3bfcg-7{list-style-type:none}.lst-kix_fb57nwogv1p2-8>li:before{content:"\0025a0  "}.lst-kix_uca6qxt7rji2-5>li:before{content:"\0025a0  "}.lst-kix_fbbhuf12458i-1>li:before{content:"\0025cb  "}.lst-kix_ov64fr7rk782-7>li{counter-increment:lst-ctn-kix_ov64fr7rk782-7}.lst-kix_shqxaxdaxlds-8>li:before{content:"\0025a0  "}.lst-kix_fb57nwogv1p2-2>li:before{content:"\0025a0  "}.lst-kix_r9wv2su6cl-0>li:before{content:"\0025cf  "}ol.lst-kix_btfh7zr4nm4d-1.start{counter-reset:lst-ctn-kix_btfh7zr4nm4d-1 0}.lst-kix_btfh7zr4nm4d-6>li{counter-increment:lst-ctn-kix_btfh7zr4nm4d-6}ol.lst-kix_btfh7zr4nm4d-3.start{counter-reset:lst-ctn-kix_btfh7zr4nm4d-3 0}.lst-kix_dgme07d3bfcg-4>li:before{content:"\0025cb  "}ul.lst-kix_dgme07d3bfcg-8{list-style-type:none}.lst-kix_o3del2899phc-0>li:before{content:"\0025cf  "}.lst-kix_btfh7zr4nm4d-0>li:before{content:"" counter(lst-ctn-kix_btfh7zr4nm4d-0,decimal) ". "}.lst-kix_o3del2899phc-1>li:before{content:"\0025cb  "}.lst-kix_ov64fr7rk782-4>li:before{content:"" counter(lst-ctn-kix_ov64fr7rk782-4,lower-latin) ". "}.lst-kix_24cvwe2r7lxg-8>li:before{content:"\0025a0  "}.lst-kix_41pep6497ekp-8>li{counter-increment:lst-ctn-kix_41pep6497ekp-8}.lst-kix_2egbvjkv76xr-0>li:before{content:"" counter(lst-ctn-kix_2egbvjkv76xr-0,decimal) ". "}.lst-kix_41pep6497ekp-6>li{counter-increment:lst-ctn-kix_41pep6497ekp-6}.lst-kix_fb57nwogv1p2-0>li:before{content:"\0025cf  "}ol.lst-kix_ndkfd864qtim-8.start{counter-reset:lst-ctn-kix_ndkfd864qtim-8 0}.lst-kix_2egbvjkv76xr-7>li:before{content:"" counter(lst-ctn-kix_2egbvjkv76xr-7,lower-latin) ". "}.lst-kix_41pep6497ekp-3>li{counter-increment:lst-ctn-kix_41pep6497ekp-3}.lst-kix_r9wv2su6cl-8>li:before{content:"\0025a0  "}.lst-kix_btfh7zr4nm4d-4>li{counter-increment:lst-ctn-kix_btfh7zr4nm4d-4}.lst-kix_ndkfd864qtim-0>li:before{content:"" counter(lst-ctn-kix_ndkfd864qtim-0,decimal) ". "}ul.lst-kix_r9wv2su6cl-3{list-style-type:none}ul.lst-kix_r9wv2su6cl-2{list-style-type:none}ul.lst-kix_r9wv2su6cl-1{list-style-type:none}.lst-kix_6qg5j6p6ra86-8>li:before{content:"\0025a0  "}ul.lst-kix_r9wv2su6cl-0{list-style-type:none}ul.lst-kix_r9wv2su6cl-7{list-style-type:none}ul.lst-kix_r9wv2su6cl-6{list-style-type:none}ul.lst-kix_r9wv2su6cl-5{list-style-type:none}ul.lst-kix_r9wv2su6cl-4{list-style-type:none}.lst-kix_btfh7zr4nm4d-7>li:before{content:"" counter(lst-ctn-kix_btfh7zr4nm4d-7,lower-latin) ". "}ol.lst-kix_c0z3g1ej3y0v-1{list-style-type:none}ol.lst-kix_c0z3g1ej3y0v-0{list-style-type:none}ul.lst-kix_r9wv2su6cl-8{list-style-type:none}.lst-kix_vu66s3lius6d-4>li:before{content:"\0025cb  "}ol.lst-kix_c0z3g1ej3y0v-5{list-style-type:none}ol.lst-kix_c0z3g1ej3y0v-4{list-style-type:none}ol.lst-kix_c0z3g1ej3y0v-3{list-style-type:none}.lst-kix_c0z3g1ej3y0v-4>li{counter-increment:lst-ctn-kix_c0z3g1ej3y0v-4}ol.lst-kix_c0z3g1ej3y0v-2{list-style-type:none}.lst-kix_r9wv2su6cl-2>li:before{content:"\0025a0  "}.lst-kix_6qg5j6p6ra86-2>li:before{content:"\0025a0  "}.lst-kix_ov64fr7rk782-5>li{counter-increment:lst-ctn-kix_ov64fr7rk782-5}ol.lst-kix_41pep6497ekp-8.start{counter-reset:lst-ctn-kix_41pep6497ekp-8 0}.lst-kix_fb57nwogv1p2-3>li:before{content:"\0025cf  "}.lst-kix_vu66s3lius6d-5>li:before{content:"\0025a0  "}ol.lst-kix_2egbvjkv76xr-4.start{counter-reset:lst-ctn-kix_2egbvjkv76xr-4 0}ol.lst-kix_btfh7zr4nm4d-8.start{counter-reset:lst-ctn-kix_btfh7zr4nm4d-8 0}ol.lst-kix_2egbvjkv76xr-1.start{counter-reset:lst-ctn-kix_2egbvjkv76xr-1 0}.lst-kix_99imf6m4828h-2>li:before{content:"\0025a0  "}.lst-kix_fbbhuf12458i-0>li:before{content:"\0025cf  "}.lst-kix_vu66s3lius6d-3>li:before{content:"\0025cf  "}.lst-kix_btfh7zr4nm4d-1>li{counter-increment:lst-ctn-kix_btfh7zr4nm4d-1}ol.lst-kix_2egbvjkv76xr-7.start{counter-reset:lst-ctn-kix_2egbvjkv76xr-7 0}ul.lst-kix_bp3knovtcexw-1{list-style-type:none}ul.lst-kix_bp3knovtcexw-2{list-style-type:none}ul.lst-kix_bp3knovtcexw-0{list-style-type:none}ul.lst-kix_bp3knovtcexw-5{list-style-type:none}ul.lst-kix_bp3knovtcexw-6{list-style-type:none}ul.lst-kix_bp3knovtcexw-3{list-style-type:none}ul.lst-kix_bp3knovtcexw-4{list-style-type:none}.lst-kix_99imf6m4828h-8>li:before{content:"\0025a0  "}ul.lst-kix_bp3knovtcexw-7{list-style-type:none}ul.lst-kix_bp3knovtcexw-8{list-style-type:none}.lst-kix_vu66s3lius6d-0>li:before{content:"\0025cf  "}.lst-kix_6qg5j6p6ra86-5>li:before{content:"\0025a0  "}.lst-kix_c0z3g1ej3y0v-0>li{counter-increment:lst-ctn-kix_c0z3g1ej3y0v-0}.lst-kix_c0z3g1ej3y0v-3>li{counter-increment:lst-ctn-kix_c0z3g1ej3y0v-3}.lst-kix_ov64fr7rk782-3>li:before{content:"" counter(lst-ctn-kix_ov64fr7rk782-3,decimal) ". "}ol.lst-kix_c0z3g1ej3y0v-6{list-style-type:none}ol.lst-kix_c0z3g1ej3y0v-7{list-style-type:none}.lst-kix_24cvwe2r7lxg-5>li:before{content:"\0025a0  "}ol.lst-kix_c0z3g1ej3y0v-8{list-style-type:none}.lst-kix_2egbvjkv76xr-8>li{counter-increment:lst-ctn-kix_2egbvjkv76xr-8}.lst-kix_ov64fr7rk782-2>li:before{content:"" counter(lst-ctn-kix_ov64fr7rk782-2,lower-roman) ". "}.lst-kix_uca6qxt7rji2-1>li:before{content:"\0025cb  "}.lst-kix_41pep6497ekp-2>li:before{content:"" counter(lst-ctn-kix_41pep6497ekp-2,lower-roman) ". "}.lst-kix_ndkfd864qtim-6>li:before{content:"" counter(lst-ctn-kix_ndkfd864qtim-6,decimal) ". "}.lst-kix_24cvwe2r7lxg-0>li:before{content:"\0025cf  "}.lst-kix_shqxaxdaxlds-6>li:before{content:"\0025cf  "}.lst-kix_dgme07d3bfcg-8>li:before{content:"\0025a0  "}.lst-kix_6qg5j6p6ra86-1>li:before{content:"\0025cb  "}.lst-kix_btfh7zr4nm4d-5>li:before{content:"" counter(lst-ctn-kix_btfh7zr4nm4d-5,lower-roman) ". "}ol.lst-kix_2egbvjkv76xr-2.start{counter-reset:lst-ctn-kix_2egbvjkv76xr-2 0}ol.lst-kix_btfh7zr4nm4d-2.start{counter-reset:lst-ctn-kix_btfh7zr4nm4d-2 0}.lst-kix_5bc8j5orbnwv-1>li:before{content:"\0025cb  "}.lst-kix_o3del2899phc-8>li:before{content:"\0025a0  "}ol.lst-kix_ov64fr7rk782-3.start{counter-reset:lst-ctn-kix_ov64fr7rk782-3 0}.lst-kix_24cvwe2r7lxg-4>li:before{content:"\0025cb  "}ol.lst-kix_ov64fr7rk782-2.start{counter-reset:lst-ctn-kix_ov64fr7rk782-2 0}.lst-kix_btfh7zr4nm4d-3>li:before{content:"" counter(lst-ctn-kix_btfh7zr4nm4d-3,decimal) ". "}ul.lst-kix_shqxaxdaxlds-8{list-style-type:none}ul.lst-kix_shqxaxdaxlds-7{list-style-type:none}ul.lst-kix_shqxaxdaxlds-6{list-style-type:none}ul.lst-kix_shqxaxdaxlds-5{list-style-type:none}ul.lst-kix_shqxaxdaxlds-4{list-style-type:none}ul.lst-kix_shqxaxdaxlds-3{list-style-type:none}.lst-kix_btfh7zr4nm4d-8>li{counter-increment:lst-ctn-kix_btfh7zr4nm4d-8}ul.lst-kix_shqxaxdaxlds-2{list-style-type:none}.lst-kix_c0z3g1ej3y0v-2>li:before{content:"" counter(lst-ctn-kix_c0z3g1ej3y0v-2,lower-roman) ". "}ul.lst-kix_shqxaxdaxlds-1{list-style-type:none}ul.lst-kix_shqxaxdaxlds-0{list-style-type:none}.lst-kix_5bc8j5orbnwv-8>li:before{content:"\0025a0  "}.lst-kix_41pep6497ekp-1>li:before{content:"" counter(lst-ctn-kix_41pep6497ekp-1,lower-latin) ". "}.lst-kix_2egbvjkv76xr-3>li:before{content:"" counter(lst-ctn-kix_2egbvjkv76xr-3,decimal) ". "}.lst-kix_r9wv2su6cl-7>li:before{content:"\0025cb  "}.lst-kix_2egbvjkv76xr-6>li:before{content:"" counter(lst-ctn-kix_2egbvjkv76xr-6,decimal) ". "}.lst-kix_bp3knovtcexw-0>li:before{content:"\0025cf  "}ol.lst-kix_btfh7zr4nm4d-0.start{counter-reset:lst-ctn-kix_btfh7zr4nm4d-0 0}.lst-kix_6qg5j6p6ra86-7>li:before{content:"\0025cb  "}.lst-kix_uca6qxt7rji2-0>li:before{content:"\0025cf  "}.lst-kix_uca6qxt7rji2-3>li:before{content:"\0025cf  "}.lst-kix_5bc8j5orbnwv-3>li:before{content:"\0025cf  "}.lst-kix_99imf6m4828h-3>li:before{content:"\0025cf  "}ol.lst-kix_btfh7zr4nm4d-6.start{counter-reset:lst-ctn-kix_btfh7zr4nm4d-6 0}.lst-kix_c0z3g1ej3y0v-7>li{counter-increment:lst-ctn-kix_c0z3g1ej3y0v-7}.lst-kix_c0z3g1ej3y0v-2>li{counter-increment:lst-ctn-kix_c0z3g1ej3y0v-2}.lst-kix_c0z3g1ej3y0v-5>li{counter-increment:lst-ctn-kix_c0z3g1ej3y0v-5}ol.lst-kix_ov64fr7rk782-8.start{counter-reset:lst-ctn-kix_ov64fr7rk782-8 0}ol.lst-kix_c0z3g1ej3y0v-3.start{counter-reset:lst-ctn-kix_c0z3g1ej3y0v-3 0}ol.lst-kix_ndkfd864qtim-2.start{counter-reset:lst-ctn-kix_ndkfd864qtim-2 0}.lst-kix_99imf6m4828h-6>li:before{content:"\0025cf  "}ul.lst-kix_24cvwe2r7lxg-2{list-style-type:none}ul.lst-kix_24cvwe2r7lxg-3{list-style-type:none}ul.lst-kix_24cvwe2r7lxg-4{list-style-type:none}ul.lst-kix_24cvwe2r7lxg-5{list-style-type:none}ul.lst-kix_24cvwe2r7lxg-6{list-style-type:none}ul.lst-kix_24cvwe2r7lxg-7{list-style-type:none}ul.lst-kix_24cvwe2r7lxg-8{list-style-type:none}ul.lst-kix_24cvwe2r7lxg-0{list-style-type:none}.lst-kix_ndkfd864qtim-0>li{counter-increment:lst-ctn-kix_ndkfd864qtim-0}ul.lst-kix_24cvwe2r7lxg-1{list-style-type:none}.lst-kix_uca6qxt7rji2-8>li:before{content:"\0025a0  "}.lst-kix_5bc8j5orbnwv-6>li:before{content:"\0025cf  "}.lst-kix_24cvwe2r7lxg-3>li:before{content:"\0025cf  "}.lst-kix_6qg5j6p6ra86-6>li:before{content:"\0025cf  "}.lst-kix_24cvwe2r7lxg-6>li:before{content:"\0025cf  "}.lst-kix_bp3knovtcexw-2>li:before{content:"\0025a0  "}.lst-kix_shqxaxdaxlds-5>li:before{content:"\0025a0  "}ul.lst-kix_fbbhuf12458i-0{list-style-type:none}ul.lst-kix_fbbhuf12458i-1{list-style-type:none}ul.lst-kix_fbbhuf12458i-2{list-style-type:none}ul.lst-kix_fbbhuf12458i-7{list-style-type:none}ul.lst-kix_fbbhuf12458i-8{list-style-type:none}.lst-kix_r9wv2su6cl-4>li:before{content:"\0025cb  "}ul.lst-kix_fbbhuf12458i-3{list-style-type:none}ol.lst-kix_c0z3g1ej3y0v-7.start{counter-reset:lst-ctn-kix_c0z3g1ej3y0v-7 0}ul.lst-kix_fbbhuf12458i-4{list-style-type:none}ul.lst-kix_fbbhuf12458i-5{list-style-type:none}ul.lst-kix_fbbhuf12458i-6{list-style-type:none}.lst-kix_41pep6497ekp-6>li:before{content:"" counter(lst-ctn-kix_41pep6497ekp-6,decimal) ". "}.lst-kix_ov64fr7rk782-0>li:before{content:"" counter(lst-ctn-kix_ov64fr7rk782-0,decimal) ". "}.lst-kix_dgme07d3bfcg-5>li:before{content:"\0025a0  "}.lst-kix_ov64fr7rk782-1>li{counter-increment:lst-ctn-kix_ov64fr7rk782-1}.lst-kix_btfh7zr4nm4d-5>li{counter-increment:lst-ctn-kix_btfh7zr4nm4d-5}ol.lst-kix_c0z3g1ej3y0v-1.start{counter-reset:lst-ctn-kix_c0z3g1ej3y0v-1 0}.lst-kix_41pep6497ekp-8>li:before{content:"" counter(lst-ctn-kix_41pep6497ekp-8,lower-roman) ". "}.lst-kix_2egbvjkv76xr-0>li{counter-increment:lst-ctn-kix_2egbvjkv76xr-0}.lst-kix_dgme07d3bfcg-7>li:before{content:"\0025cb  "}.lst-kix_shqxaxdaxlds-4>li:before{content:"\0025cb  "}.lst-kix_o3del2899phc-3>li:before{content:"\0025cf  "}ol.lst-kix_c0z3g1ej3y0v-0.start{counter-reset:lst-ctn-kix_c0z3g1ej3y0v-0 0}ol.lst-kix_2egbvjkv76xr-5.start{counter-reset:lst-ctn-kix_2egbvjkv76xr-5 0}.lst-kix_bp3knovtcexw-3>li:before{content:"\0025cf  "}.lst-kix_2egbvjkv76xr-5>li{counter-increment:lst-ctn-kix_2egbvjkv76xr-5}.lst-kix_41pep6497ekp-5>li{counter-increment:lst-ctn-kix_41pep6497ekp-5}.lst-kix_shqxaxdaxlds-1>li:before{content:"\0025cb  "}.lst-kix_ndkfd864qtim-6>li{counter-increment:lst-ctn-kix_ndkfd864qtim-6}.lst-kix_ndkfd864qtim-2>li:before{content:"" counter(lst-ctn-kix_ndkfd864qtim-2,lower-roman) ". "}ol.lst-kix_2egbvjkv76xr-3.start{counter-reset:lst-ctn-kix_2egbvjkv76xr-3 0}ol.lst-kix_btfh7zr4nm4d-7.start{counter-reset:lst-ctn-kix_btfh7zr4nm4d-7 0}ol.lst-kix_c0z3g1ej3y0v-6.start{counter-reset:lst-ctn-kix_c0z3g1ej3y0v-6 0}.lst-kix_btfh7zr4nm4d-4>li:before{content:"" counter(lst-ctn-kix_btfh7zr4nm4d-4,lower-latin) ". "}ol.lst-kix_41pep6497ekp-6.start{counter-reset:lst-ctn-kix_41pep6497ekp-6 0}.lst-kix_dgme07d3bfcg-3>li:before{content:"\0025cf  "}.lst-kix_fb57nwogv1p2-6>li:before{content:"\0025cf  "}.lst-kix_99imf6m4828h-5>li:before{content:"\0025a0  "}.lst-kix_vu66s3lius6d-6>li:before{content:"\0025cf  "}.lst-kix_fbbhuf12458i-6>li:before{content:"\0025cf  "}.lst-kix_o3del2899phc-5>li:before{content:"\0025a0  "}.lst-kix_c0z3g1ej3y0v-7>li:before{content:"" counter(lst-ctn-kix_c0z3g1ej3y0v-7,lower-latin) ". "}.lst-kix_ndkfd864qtim-1>li{counter-increment:lst-ctn-kix_ndkfd864qtim-1}ol.lst-kix_ndkfd864qtim-5.start{counter-reset:lst-ctn-kix_ndkfd864qtim-5 0}.lst-kix_99imf6m4828h-0>li:before{content:"\0025cf  "}.lst-kix_ov64fr7rk782-6>li{counter-increment:lst-ctn-kix_ov64fr7rk782-6}.lst-kix_2egbvjkv76xr-4>li:before{content:"" counter(lst-ctn-kix_2egbvjkv76xr-4,lower-latin) ". "}.lst-kix_fbbhuf12458i-2>li:before{content:"\0025a0  "}ol.lst-kix_ov64fr7rk782-7.start{counter-reset:lst-ctn-kix_ov64fr7rk782-7 0}.lst-kix_fbbhuf12458i-5>li:before{content:"\0025a0  "}.lst-kix_ov64fr7rk782-0>li{counter-increment:lst-ctn-kix_ov64fr7rk782-0}.lst-kix_btfh7zr4nm4d-0>li{counter-increment:lst-ctn-kix_btfh7zr4nm4d-0}ul.lst-kix_6qg5j6p6ra86-1{list-style-type:none}ul.lst-kix_6qg5j6p6ra86-2{list-style-type:none}ul.lst-kix_6qg5j6p6ra86-3{list-style-type:none}ul.lst-kix_6qg5j6p6ra86-4{list-style-type:none}ul.lst-kix_6qg5j6p6ra86-5{list-style-type:none}ul.lst-kix_6qg5j6p6ra86-6{list-style-type:none}ul.lst-kix_6qg5j6p6ra86-7{list-style-type:none}.lst-kix_fbbhuf12458i-4>li:before{content:"\0025cb  "}ul.lst-kix_6qg5j6p6ra86-8{list-style-type:none}.lst-kix_ndkfd864qtim-7>li{counter-increment:lst-ctn-kix_ndkfd864qtim-7}.lst-kix_2egbvjkv76xr-4>li{counter-increment:lst-ctn-kix_2egbvjkv76xr-4}ul.lst-kix_6qg5j6p6ra86-0{list-style-type:none}.lst-kix_btfh7zr4nm4d-8>li:before{content:"" counter(lst-ctn-kix_btfh7zr4nm4d-8,lower-roman) ". "}ol.lst-kix_c0z3g1ej3y0v-8.start{counter-reset:lst-ctn-kix_c0z3g1ej3y0v-8 0}ol.lst-kix_ndkfd864qtim-1.start{counter-reset:lst-ctn-kix_ndkfd864qtim-1 0}.lst-kix_ov64fr7rk782-7>li:before{content:"" counter(lst-ctn-kix_ov64fr7rk782-7,lower-latin) ". "}ol.lst-kix_ov64fr7rk782-1.start{counter-reset:lst-ctn-kix_ov64fr7rk782-1 0}.lst-kix_c0z3g1ej3y0v-1>li:before{content:"" counter(lst-ctn-kix_c0z3g1ej3y0v-1,lower-latin) ". "}.lst-kix_c0z3g1ej3y0v-5>li:before{content:"" counter(lst-ctn-kix_c0z3g1ej3y0v-5,lower-roman) ". "}.lst-kix_btfh7zr4nm4d-6>li:before{content:"" counter(lst-ctn-kix_btfh7zr4nm4d-6,decimal) ". "}.lst-kix_ndkfd864qtim-8>li{counter-increment:lst-ctn-kix_ndkfd864qtim-8}.lst-kix_o3del2899phc-7>li:before{content:"\0025cb  "}.lst-kix_o3del2899phc-2>li:before{content:"\0025a0  "}.lst-kix_bp3knovtcexw-5>li:before{content:"\0025a0  "}ol.lst-kix_ndkfd864qtim-4.start{counter-reset:lst-ctn-kix_ndkfd864qtim-4 0}.lst-kix_ov64fr7rk782-2>li{counter-increment:lst-ctn-kix_ov64fr7rk782-2}.lst-kix_ndkfd864qtim-3>li{counter-increment:lst-ctn-kix_ndkfd864qtim-3}ul.lst-kix_99imf6m4828h-2{list-style-type:none}.lst-kix_r9wv2su6cl-6>li:before{content:"\0025cf  "}ul.lst-kix_99imf6m4828h-3{list-style-type:none}ul.lst-kix_99imf6m4828h-0{list-style-type:none}ul.lst-kix_99imf6m4828h-1{list-style-type:none}ul.lst-kix_99imf6m4828h-6{list-style-type:none}ul.lst-kix_99imf6m4828h-7{list-style-type:none}.lst-kix_41pep6497ekp-4>li:before{content:"" counter(lst-ctn-kix_41pep6497ekp-4,lower-latin) ". "}.lst-kix_c0z3g1ej3y0v-8>li{counter-increment:lst-ctn-kix_c0z3g1ej3y0v-8}ul.lst-kix_99imf6m4828h-4{list-style-type:none}ul.lst-kix_99imf6m4828h-5{list-style-type:none}ul.lst-kix_99imf6m4828h-8{list-style-type:none}.lst-kix_2egbvjkv76xr-1>li{counter-increment:lst-ctn-kix_2egbvjkv76xr-1}.lst-kix_5bc8j5orbnwv-5>li:before{content:"\0025a0  "}ol.lst-kix_ov64fr7rk782-0.start{counter-reset:lst-ctn-kix_ov64fr7rk782-0 0}ul.lst-kix_5bc8j5orbnwv-1{list-style-type:none}ul.lst-kix_5bc8j5orbnwv-0{list-style-type:none}ul.lst-kix_5bc8j5orbnwv-3{list-style-type:none}ul.lst-kix_5bc8j5orbnwv-2{list-style-type:none}ul.lst-kix_5bc8j5orbnwv-5{list-style-type:none}ul.lst-kix_5bc8j5orbnwv-4{list-style-type:none}.lst-kix_41pep6497ekp-0>li:before{content:"" counter(lst-ctn-kix_41pep6497ekp-0,decimal) ". "}ol.lst-kix_c0z3g1ej3y0v-5.start{counter-reset:lst-ctn-kix_c0z3g1ej3y0v-5 0}.lst-kix_c0z3g1ej3y0v-1>li{counter-increment:lst-ctn-kix_c0z3g1ej3y0v-1}.lst-kix_ndkfd864qtim-5>li:before{content:"" counter(lst-ctn-kix_ndkfd864qtim-5,lower-roman) ". "}.lst-kix_btfh7zr4nm4d-2>li:before{content:"" counter(lst-ctn-kix_btfh7zr4nm4d-2,lower-roman) ". "}ol.lst-kix_2egbvjkv76xr-0{list-style-type:none}ul.lst-kix_uca6qxt7rji2-7{list-style-type:none}ul.lst-kix_uca6qxt7rji2-8{list-style-type:none}ul.lst-kix_uca6qxt7rji2-5{list-style-type:none}ul.lst-kix_uca6qxt7rji2-6{list-style-type:none}ul.lst-kix_uca6qxt7rji2-3{list-style-type:none}ul.lst-kix_uca6qxt7rji2-4{list-style-type:none}ul.lst-kix_uca6qxt7rji2-2{list-style-type:none}ul.lst-kix_uca6qxt7rji2-1{list-style-type:none}ul.lst-kix_uca6qxt7rji2-0{list-style-type:none}ul.lst-kix_5bc8j5orbnwv-8{list-style-type:none}ul.lst-kix_5bc8j5orbnwv-6{list-style-type:none}.lst-kix_fbbhuf12458i-7>li:before{content:"\0025cb  "}ul.lst-kix_5bc8j5orbnwv-7{list-style-type:none}.lst-kix_btfh7zr4nm4d-1>li:before{content:"" counter(lst-ctn-kix_btfh7zr4nm4d-1,lower-latin) ". "}.lst-kix_24cvwe2r7lxg-2>li:before{content:"\0025a0  "}.lst-kix_btfh7zr4nm4d-2>li{counter-increment:lst-ctn-kix_btfh7zr4nm4d-2}.lst-kix_btfh7zr4nm4d-3>li{counter-increment:lst-ctn-kix_btfh7zr4nm4d-3}.lst-kix_fb57nwogv1p2-5>li:before{content:"\0025a0  "}.lst-kix_ov64fr7rk782-6>li:before{content:"" counter(lst-ctn-kix_ov64fr7rk782-6,decimal) ". "}.lst-kix_2egbvjkv76xr-8>li:before{content:"" counter(lst-ctn-kix_2egbvjkv76xr-8,lower-roman) ". "}.lst-kix_shqxaxdaxlds-3>li:before{content:"\0025cf  "}.lst-kix_5bc8j5orbnwv-4>li:before{content:"\0025cb  "}.lst-kix_ov64fr7rk782-3>li{counter-increment:lst-ctn-kix_ov64fr7rk782-3}ol.lst-kix_2egbvjkv76xr-2{list-style-type:none}ol.lst-kix_2egbvjkv76xr-1{list-style-type:none}ol.lst-kix_2egbvjkv76xr-4{list-style-type:none}.lst-kix_r9wv2su6cl-1>li:before{content:"\0025cb  "}.lst-kix_ndkfd864qtim-3>li:before{content:"" counter(lst-ctn-kix_ndkfd864qtim-3,decimal) ". "}ol.lst-kix_2egbvjkv76xr-3{list-style-type:none}ol.lst-kix_2egbvjkv76xr-6{list-style-type:none}.lst-kix_41pep6497ekp-2>li{counter-increment:lst-ctn-kix_41pep6497ekp-2}ol.lst-kix_2egbvjkv76xr-5{list-style-type:none}.lst-kix_2egbvjkv76xr-5>li:before{content:"" counter(lst-ctn-kix_2egbvjkv76xr-5,lower-roman) ". "}ol.lst-kix_2egbvjkv76xr-8{list-style-type:none}ol.lst-kix_2egbvjkv76xr-7{list-style-type:none}ol{margin:0;padding:0}.c15{border-bottom-width:1pt;border-top-style:solid;width:39.8pt;border-right-style:solid;padding:2pt 2pt 2pt 2pt;border-bottom-color:#000000;border-top-width:1pt;border-bottom-style:solid;vertical-align:top;border-top-color:#000000;border-left-color:#000000;border-right-color:#000000;border-left-style:solid;border-right-width:1pt;border-left-width:1pt}.c26{border-bottom-width:1pt;border-top-style:solid;width:93pt;border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-bottom-style:solid;vertical-align:top;border-top-color:#000000;border-left-color:#000000;border-right-color:#000000;border-left-style:solid;border-right-width:1pt;border-left-width:1pt}.c7{border-bottom-width:1pt;border-top-style:solid;width:39.8pt;border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-bottom-style:solid;vertical-align:top;border-top-color:#000000;border-left-color:#000000;border-right-color:#000000;border-left-style:solid;border-right-width:1pt;border-left-width:1pt}.c8{border-bottom-width:1pt;border-top-style:solid;width:93pt;border-right-style:solid;padding:2pt 2pt 2pt 2pt;border-bottom-color:#000000;border-top-width:1pt;border-bottom-style:solid;vertical-align:top;border-top-color:#000000;border-left-color:#000000;border-right-color:#000000;border-left-style:solid;border-right-width:1pt;border-left-width:1pt}.c10{border-bottom-width:1pt;border-top-style:solid;width:48pt;border-right-style:solid;padding:2pt 2pt 2pt 2pt;border-bottom-color:#000000;border-top-width:1pt;border-bottom-style:solid;vertical-align:top;border-top-color:#000000;border-left-color:#000000;border-right-color:#000000;border-left-style:solid;border-right-width:1pt;border-left-width:1pt}.c6{border-bottom-width:1pt;border-top-style:solid;width:270.8pt;border-right-style:solid;padding:2pt 2pt 2pt 2pt;border-bottom-color:#000000;border-top-width:1pt;border-bottom-style:solid;vertical-align:top;border-top-color:#000000;border-left-color:#000000;border-right-color:#000000;border-left-style:solid;border-right-width:1pt;border-left-width:1pt}.c19{border-bottom-width:1pt;border-top-style:solid;width:48pt;border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-bottom-style:solid;vertical-align:top;border-top-color:#000000;border-left-color:#000000;border-right-color:#000000;border-left-style:solid;border-right-width:1pt;border-left-width:1pt}.c24{border-bottom-width:1pt;border-top-style:solid;width:270.8pt;border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-bottom-style:solid;vertical-align:top;border-top-color:#000000;border-left-color:#000000;border-right-color:#000000;border-left-style:solid;border-right-width:1pt;border-left-width:1pt}.c14{vertical-align:baseline;color:#000000;font-size:11pt;font-style:normal;font-family:"Arial";text-decoration:none;font-weight:normal}.c4{vertical-align:baseline;color:#000000;font-size:11pt;font-style:normal;font-family:"Arial";text-decoration:none;font-weight:bold}.c2{line-height:1.0;padding-top:0pt;widows:2;orphans:2;text-align:left;direction:ltr;padding-bottom:0pt}.c1{widows:2;orphans:2;height:11pt;direction:ltr}.c5{widows:2;orphans:2;direction:ltr;page-break-after:avoid}.c11{widows:2;orphans:2;text-align:justify;direction:ltr}.c3{widows:2;orphans:2;direction:ltr;margin-left:36pt}.c29{margin-right:auto;border-collapse:collapse}.c33{line-height:1.15;padding-top:0pt;padding-bottom:0pt}.c22{max-width:451.3pt;background-color:#ffffff;padding:72pt 72pt 72pt 72pt}.c12{widows:2;orphans:2;direction:ltr}.c17{color:inherit;text-decoration:inherit}.c9{color:#1155cc;text-decoration:underline}.c23{margin:0;padding:0}.c27{margin-left:36pt}.c20{padding-left:0pt}.c16{height:11pt}.c32{font-weight:bold}.c30{padding-top:10pt}.c18{text-align:justify}.c28{margin-left:72pt}.c31{text-align:center}.c13{height:0pt}.c0{font-family:"Courier New"}.c21{margin-left:54pt}.c25{margin-left:18pt}.title{widows:2;padding-top:0pt;line-height:1.15;orphans:2;text-align:left;color:#000000;font-size:21pt;font-family:"Trebuchet MS";padding-bottom:0pt;page-break-after:avoid}.subtitle{widows:2;padding-top:0pt;line-height:1.15;orphans:2;text-align:left;color:#666666;font-style:italic;font-size:13pt;font-family:"Trebuchet MS";padding-bottom:10pt;page-break-after:avoid}li{color:#000000;font-size:11pt;font-family:"Arial"}p{color:#000000;font-size:11pt;margin:0;font-family:"Arial"}h1{widows:2;padding-top:10pt;line-height:1.15;orphans:2;text-align:left;color:#000000;font-size:16pt;font-family:"Trebuchet MS";padding-bottom:0pt;page-break-after:avoid}h2{widows:2;padding-top:10pt;line-height:1.15;orphans:2;text-align:left;color:#000000;font-size:13pt;font-family:"Trebuchet MS";font-weight:bold;padding-bottom:0pt;page-break-after:avoid}h3{widows:2;padding-top:8pt;line-height:1.15;orphans:2;text-align:left;color:#666666;font-size:12pt;font-family:"Trebuchet MS";font-weight:bold;padding-bottom:0pt;page-break-after:avoid}h4{widows:2;padding-top:8pt;line-height:1.15;orphans:2;text-align:left;color:#666666;font-size:11pt;text-decoration:underline;font-family:"Trebuchet MS";padding-bottom:0pt;page-break-after:avoid}h5{widows:2;padding-top:8pt;line-height:1.15;orphans:2;text-align:left;color:#666666;font-size:11pt;font-family:"Trebuchet MS";padding-bottom:0pt;page-break-after:avoid}h6{widows:2;padding-top:8pt;line-height:1.15;orphans:2;text-align:left;color:#666666;font-style:italic;font-size:11pt;font-family:"Trebuchet MS";padding-bottom:0pt;page-break-after:avoid}</style>
  </head>
  <body class="c22">
    <p class="c5 c31 title"><a name="h.vr3wkctiqt0e"></a><span>THE
Z80 CROSS ASSEMBLER
(z88dk)</span></p>
    <p class="c12 c31"><span>Version:
v2.6.1 (October 3rd,
2014)</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Thank
you for purchasing a copy of this cross assembler. We have made an
effort to program an easy user interface and efficient assembler source
file compiling. The object file and library format is an invention of our
own and has also been included in this documentation. We hope that you will
enjoy your Z80 machine code programming with our
assembler.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>We
have made an effort to produce a fairly easy-to-understand
documentation. If you have any comments or corrections, please don&#39;t
hesitate to contact
us:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span>Gunther Strube<br />Gl.
Kongevej 37,
4.tv.<br />DK-1610
Kobenhavn
V<br />Denmark</span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span>e-mail </span><span class="c9"><a class="c17" href="mailto:gbs@image.dk">gbs@image.dk</a></span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c1"><span></span></p>
    <h1 class="c5"><a name="h.nblzgdx05sk0"></a><span>1.
Running the
assembler</span></h1>
    <p class="c11"><span>Since
assemblers are developed for programmers the user interface have been
implemented according to the standard command line environment (CLI) used
in most operating systems; however, if only a GUI interface is available
(as in MacOS) then a command shell must be executed to allow standard
command line input. The Z80 Module Assembler command line interface may
change if other programmers wish to implement a different interface to the
assembler. You have the
opportunity!</span></p>
    <h2 class="c5 c18"><a name="h.crpe8o2twn1u"></a><span>1.1.
Help
page</span></h2>
    <p class="c11"><span>When
executing the assembler from the command line with the -h option, a
help page is displayed. The page shortly explains the syntax of parameter
specification and which parameters are
available.</span></p>
    <h2 class="c5 c18"><a name="h.6a5vx7yssbrc"></a><span>1.2.
Command
line</span></h2>
    <p class="c11"><span>The syntax of the assembler parameters is a straightforward design.
Filenames or a project file are always specified. The options may be left
out:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">z80asm [options] &lt;filename {filename}&gt; | &lt;@modulesfile&gt; </span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>As
seen above &lt;options&gt; must be specified first. Then you enter the names
of all files to be assembled. You either choose to specify all file names
or a @&lt;project-file&gt; containing all file names. File name may be specified
with or without the &#39;asm extension. The correct filename parsing is handled
automatically by the assembler. As seen on the syntax at least one source
file must be specified and may be repeated with several file names. Only
one project file may be specified if no source file names are
given.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Many
of the parameters are preset with default values which gives an easy
user interface when specifying the assembly parameters. Only advanced
parameters need to be specified explicitly. The help page displays the
default parameter values at the bottom of the
page.</span></p>
    <h2 class="c5"><a name="h.6jhvkanjxlnu"></a><span>1.3.
Command line
options</span></h2>
    <p class="c11"><span>Options
are used to control the assembly process and output. They are
recognized by the assembler when you specify a leading minus before the
option identifier (&#39;-&#39;). Options are always specified before file names or
project
files.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>When
the assembler is executed options are all preset with default values
and are either switched ON or OFF (active or not). All options have a
single letter identification. Upper and lower case letters are
distinguished, which means that &#39;a&#39; might be different command than &#39;A&#39;. If
an option is to be turned off, you simply specify a &#39;n&#39; before the
identification, e.g. -nl which selects listing files not to be created by
the
assembler.</span></p>
    <h3 class="c5"><a name="h.s5tztgh7fg8j"></a><span>1.3.1.
-h : Show help
screen</span></h3>
    <p class="c12"><span>Shows
a help screen with the available
options.</span></p>
    <h3 class="c5"><a name="h.v7z21rlb4j1d"></a><span>1.3.2.
-v : Information during
assembly</span></h3>
    <p class="c11"><span>The
assembler writes a certain amount of information to its program window
(or on the command line screen) to let the user know what is happening. For
each source file both the current assembler pass and include file names are
displayed. During linking all object file names and specified names of
library modules are displayed. When all files have been processed and the
necessary output generated, a status message is displayed which informs you
of how many errors occurred (or none). You will also be reported with a
message of how many source lines that have been parsed during a
compilation. This information can be very convenient during a large
compilation project, especially on relatively smaller computers (with less
powerful processors) and no hard disk. If you own a powerful 32-bit
computer equipped with a fast hard disk, assembly information is displayed
at high speed (and almost impossible to read); it may then be useful to
turn this information off specifying a -nv option at the command
line.</span></p>
    <h3 class="c5"><a name="h.nbnhjst6d2qf"></a><span>1.3.3.
-e&lt;ext&gt; : Use alternative source file
extension</span></h3>
    <p class="c11"><span>The
default assembler source file extension is &quot;.asm&quot;. Using this option,
you force the assembler to use another default extension, like &quot;.opt&quot; or
&quot;.as&quot; for the source
file.</span></p>
    <p class="c11"><span><br />The
extension is specified without the &quot;.&quot;. Only three letters are accepted
- the rest is
discarded.</span></p>
    <h3 class="c5"><a name="h.4ioovbjvm21o"></a><span>1.3.4.
-M&lt;ext&gt; : Use alternative object file
extension</span></h3>
    <p class="c11"><span>The
default assembler object file extension is &quot;.obj&quot;. Using this option,
you force the assembler to use another default extension, like &quot;.o&quot; as the
object file name
extension.</span></p>
    <p class="c11"><span><br />The
extension is specified without the &quot;.&quot;. Only three letters are accepted
- the rest is
discarded.</span></p>
    <h3 class="c5"><a name="h.1yzf339nds5k"></a><span>1.3.5.
-l : Create listing file
output</span></h3>
    <p class="c11"><span>The
information in listing files is a combination of the original source
file and additional information of the generated machine code. Further, the
listing file is page formatted with a header specifying the date and time
of the compilation, the filename of the listing and a page
number.</span></p>
    <p class="c1"><span></span></p>
    <p class="c12"><span>For each line of the source file the following information is written: </span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">&lt;source
file line number&gt; &lt;assembler
address&gt;<br />&lt;machine
code hex dump&gt; &lt;source
line&gt;</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The machine code and assembler address output are written in hexadecimal
notation. If the machine code uses more the 4 bytes, the source file line
is written on the following line. This usually happens when you have
defined a string constant or a relatively large amount of constant
definitions.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The
assembler address is always beginning at zero, i.e. the beginning of
the current modules&#39; machine code. In a relocated context of the machine
code, where all code is positioned at fixed addresses, you will have the
opportunity to view the addresses of your code relative to the start of
individual modules using the assembler output addresses. Further, the last
assembler address can be interpreted as the size of the modules&#39; generated
machine
code.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Listing
files also serves the purpose of a hard copy on paper of your
programs, and are useful in a debugging phase (identifying opcodes versus
the mnemonic representation of
instructions).</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The
creation of listing files imposes much more processing work of the
assembler. If you want to compile your code as quickly as possible then
don&#39;t create listing files. Listing files obtain their file name from the
base of the source filename, and is added with the &#39;lst&#39;
extension.</span></p>
    <h3 class="c5"><a name="h.70cgur7d2zd7"></a><span>1.3.6.
-s : Create symbol
table</span></h3>
    <p class="c11"><span>Symbol
tables contains the integer form of symbolical names and constants
that has been parsed and generated during a compilation of a source file.
The structure of the symbol table is divided into two columns. The first
contains the parsed symbol names, converted to uppercase. The second column
contains the generated value of the symbol
name.</span></p>
    <p class="c1"><span></span></p>
    <p class="c12"><span>All
symbol values are displayed in signed 32-bit hexadecimal
notation.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The
two columns are separated by tabulators which represents a default
value of 8 spaces per tabulator. The width of the symbol name column is
defined as the tabulator distance multiplied by 4. The default width of the
name column is 4 * 8 = 32
spaces.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The
symbol table will be written to the end of the appropriate listing
file, if listing file and symbol table output is enabled. If no listing
file output is enabled, the symbol table will be written to a separate
file, identified with the base name of the source file module and given the
&#39;sym&#39;
extension.</span></p>
    <h3 class="c5"><a name="h.29o5gddebjt9"></a><span>1.3.7.
-d : Assemble only updated
files</span></h3>
    <p class="c11"><span>Assemblers usually force compiles all specified files. This is also
possible (as default) for the Z80 Module Assembler. In large application
project with 15 modules or more it can be quite frustrating to compile all
every time. The solution is to only assemble updated files and leave the
rest (since they have been compiled to the programmers knowledge). </span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>But in a long term view it is better to just compile a project without
thinking of which files need to be compiled or not. That can be done with
the Z80 Module Assembler. By simply specifying the -d parameter at the
command line, only updated source files are assembled into object files -
the rest are ignored. </span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Using
the -d option in combination with a project file gives the best
project setup for a large compilation; compile your projects without
worrying about which module is updated or
not.</span></p>
    <h3 class="c5"><a name="h.v4e84bggbexn"></a><span>1.3.8.
-b : Link/relocate object
files</span></h3>
    <p class="c11"><span>The
-b option must be used if you want to create an executable Z80 machine
code output file of your previously created object files. You may also use
the -a option which is identical in functionality but also includes the -d
option. In other words assemble only updated source modules and perform
linking/relocation of the code
afterwards.</span></p>
    <p class="c1"><span></span></p>
    <ul class="c23 lst-kix_6qg5j6p6ra86-0 start">
      <li class="c11 c27 c20"><span>Pass 1:<br />When the linking process begins with the first object module, it is
examined for an ORG address to perform the absolute address relocation of
all the object module machine code. The ORG (loading address for memory)
will have to be defined in the first source file module. If not, the
assembler will prompt you for it on the command line. The ORG address must
be typed in hexadecimal notation. If you never use the ORG directive in
your source files, you can always explicitly define one at the command line
with the -r option. <br />
          <br />The
next step in the linking process is loading of the machine code from
each object module, in the order of the specified modules. Pass 1 is
completed with loading all local and global symbol definitions of the
object modules. All relocatable address symbols are assigned the correct
absolute memory location (based on
ORG).<br /></span></li>
      <li class="c11 c27 c20"><span>Pass 2:<br />The
address patching process. All expressions are now read and evaluated,
then patched into the appropriate positions of the linked machine
code.<br />
          <br />When
all expressions have been evaluated the machine code is completed and
saved to a file named as the first source file module, and assigned the
&#39;bin&#39;
extension.</span></li>
    </ul>
    <h3 class="c5"><a name="h.mzx5k6oxpmx4"></a><span>1.3.9.
-a : Combine -d and
-b</span></h3>
    <p class="c12"><span>Same
as providing both -b (link/relocate object files) and -d (assemble
only updated
files).</span></p>
    <h3 class="c5"><a name="h.saq7f3fibsmm"></a><span>1.3.10.
-o&lt;binary-filename&gt; : Binary
filename</span></h3>
    <p class="c11"><span>Define
another filename for the compiled binary output than the default
source filename of the project, appended with the &quot;.bin&quot;
extension.</span></p>
    <h3 class="c5"><a name="h.pxflnpjqoh1o"></a><span>1.3.11.
-m : Create address map information
file</span></h3>
    <p class="c11"><span>When the linking process has been completed and the machine code saved to a
file, the address map file is produced. This file contains the information
of all relocated address symbols with their assigned absolute addresses.
Further, an id is written that displays the scope of the symbols; local
(&#39;L&#39;) or global (&#39;G&#39;). The last item of each address map line, identified
after the colon, is the name of the module which the symbol name belongs
to.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The
address map file is divided into two sections; the first produces the
symbol list in alphabetical order (fast lookup of symbol names), the second
in order of their address counterparts. The section is more used during a
debugging session when an address in a disassembly needs to be identified
with a name. The second list also gives a chronological view (composition)
of the linked
modules.</span></p>
    <h3 class="c5"><a name="h.528tfsa661pk"></a><span>1.3.12.
-r&lt;hex-address&gt; : Re-define the ORG relocation
address</span></h3>
    <p class="c11"><span>During
the linking phase of the assembler the ORG address that defines the
position in memory where the code is to be loaded and executed, is fetched
from the first object module file. You can override this by specifying an
explicit address origin by entering the -r option followed by an address in
hexadecimal notation at the command line,
e.g.:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">z80asm -b </span><span class="c0">-r4000 file.asm</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>which specifies that your code is to be relocated for address 4000h (16384)
onwards.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Using
the -r option supersedes a defined ORG in the object file. You could
for example have defined the ORG to 8000h (32768) in your first source
file, then compiled the project. This would have generated machine code for
memory location 8000h (segment 2 in the Cambridge Z88). Since the object
files are generated it is easy to link them again with another ORG address
by just using the -r option. The linking process does not alter the
information in object files - they are only read. The same project could
then easily be re-linked to another address,
e.g.</span></p>
    <p class="c1 c18"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">z80asm
-b -r2000
file.asm</span></p>
      </ol>
    </ol>
    <h3 class="c5"><a name="h.iu4f3lcroz5f"></a><span>1.3.13.
-R : Generate address independent
code</span></h3>
    <p class="c11"><span>The
Z80 processor instruction set allows only relative jumps in maximum +/-
128 bytes using the JR and DJNZ instructions. Further, there is no program
counter relative call-to-subroutine or jump-to-subroutine instruction. If
you want a program to be address-independent no absolute address references
may be used in jump or call instructions. If you want to program Z80
address independent code you can only write small routines using the JR and
DJNZ instructions. With a restricted interval of 128 bytes you can imagine
the size of those routines! Programming of large applications using address
independency is simply impossible on the Z80 processor with the basic
instruction set available. You can only define a fixed address origin (ORG)
for your machine code to be loaded and executed from. However, there is one
solution: before the code is executed an automatical address-relocation is
performed to the current position in memory. This is done only once. The
penalty is that the program fills more space in memory. This is unavoidable
since information must be available to define where the address relocation
has to be performed in the program. Further, a small routine must be
included with the program to read the relocation information and patch it
into the specified locations of the program. It is impossible to determine
the extra size generated with a relocation table. We assume an extra size
of 3 - 3.5K for a typical 16K application
program.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>You
can generate address independent code using the -R option accompanied
with the -a or -b option. There is no other requirements. The relocatable
code may be useful for programmers using the Cambridge Z88 who want to use
machine code in the BBC BASIC application environment. This can easily be
interfaced with the DIM statement to allocate memory for the machine code
program, and issue a CALL or USR() to execute the machine
code.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Please
note that the linking process with the -R option addresses your code
from 0 onwards. This is necessary when the runtime relocation is performed
by the relocator (just before your program is executed). This can be
examined by loading the address map file into a text
editor.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The principle of relocation is in fact a self-modifying program. You cannot
relocate a program that has been blown into an EPROM (cannot be modified).
You may only execute relocatable programs in dynamic memory (RAM). </span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The relocator is built into the Z80 Module Assembler. The relocation table
is created during the linking phase. When all object modules have been
linked and the appropriate machine code generated, the process is ended
with first copying the relocator routine into the executable file, then a
relocation table and finally the compiled machine code program. Any defined
ORG in your code is superseded - this is not necessary in a relocatable
program!</span></p>
    <p class="c1"><span></span></p>
    <p class="c12"><span>Two
rules must be obeyed when using relocatable
programs:</span></p>
    <p class="c1"><span></span></p>
    <ol class="c23 lst-kix_btfh7zr4nm4d-0 start" start="1">
      <li class="c11 c27 c20"><span>The
IY register must have been set up to point at the address where your
program resides. The first code is in fact the relocator which manipulates
your code on the basis of the IY register. If IY is not setup properly your
machine code program will be relocated for an address it is not resided at.
On execution your might then call a random address (on the basis of the
random IY
register).<br /></span></li>
      <li class="c11 c27 c20"><span>Don&#39;t
use the alternate register set for parameter passing between the
caller (of your code) in the main code and the relocated program. The
following registers are affected by the initial relocation
process:</span></li>
    </ol>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <ol>
          <ol>
            <p class="c12 c28"><span class="c0">AFBCDEHL/IXIY/........ same<br />......../..../afbcdehl different</span></p>
          </ol>
        </ol>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>You
still have all the main registers for parameter passing which is more
than sufficient for average
programming.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>When
your address-independent code is stored to the file, a message is
displayed which informs the user of how many bytes the relocation header
consists of. This constant is useful since it informs you of the distance
between the relocation header and the start of your code. The map file
automatically reflects the relocation header. All addresses of your code
has been modified to include the relocation header. Please note that all
addresses in the map file are defined from address 0. When your code is
placed in an absolute memory address, and you need to perform a debugging
session, you can find your specific label address by adding the constant
from the map file to the memory origin of your code. The inbuilt relocator
routine may be examined by extracting the &quot;relocate.asm&quot; file from the
&quot;Z80src.zip&quot; compressed file
resource.</span></p>
    <h3 class="c5"><a name="h.gehxzpj4qdmy"></a><span>1.3.14.
-g : Create global address definition
file</span></h3>
    <p class="c11"><span>With
this option it is possible to generate a DEFC directive definition
file of all globally declared identifiers in a file project (declared with
the XDEF directive). These global definitions are calculated from the
specified ORG address (from first module or the -r option). This feature is
very useful, if you want to get access to routines from a separate
compilation. If the two code compilation were placed in different banks of
the Z88, it would be possible to know the correct address of a routine just
by using the DEFC address definition previously compiled. We used this
facility to access routines in the two 8K halves of the segment 0 debugged
version. This debugger actually swaps one of the two 8K blocks in and out
of segment 0 when needed to call an &#39;external&#39; routine. Applications on the
Z88 may only access the upper 8K of segment 0. A 16K application therefore
needs to be split in 8K halves and paged in when needed to be run in this
area.
Tuff!</span></p>
    <h3 class="c5"><a name="h.ib1nqk3blyck"></a><span>1.3.15.
-D&lt;symbol&gt; : Define a static
symbol</span></h3>
    <p class="c11"><span>This option is useful if you want to produce conditional compilations. The
symbol defined here will be active throughout the compilation. We used this
feature to compile machine code on different computer platforms (QL, IBM,
LINUX or Z88). Specify the symbol immediately after the option identifier,
i.e.</span></p>
    <p class="c1 c18"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">z80asm
-b -DZ88
file.asm</span></p>
      </ol>
    </ol>
    <h3 class="c5"><a name="h.xxzi68l1k43o"></a><span>@&lt;project-file&gt; :</span><span>1.3.16.
Using a project
file</span></h3>
    <p class="c11"><span>Project
files defines all file names of a project. The file name standard
stored in a project file obeys the operating system
notation.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Instead of specifying every module file name at the command line, a simple
reference of a project file can be made instead. According to the rules of
the specification of parameters you specify either your source file modules
or use a project file. The project file specification is of course much
faster. An example: </span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">z80asm
-a main pass1 pass2 link asmdrctv
z80instr</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>This
command line will compile all specified module file names into a
single executable file called &quot;main.bin&quot;. However if a project file
&#39;assembler&#39; were created already containing the same file names, the
command line would have
been:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span>&nbsp;</span><span class="c0">z80asm
-a
@assembler</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c12"><span>- much easier! </span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>A
project file only contains file names. Each file name is separated by a
newline character \n. The new line character may be different on various
computer platforms - but the assembler interprets it correctly. The
contents of a project file may look like
this:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">z80asm<br />z80pass1<br />z80pass1<br />modlink</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Project files are easily created using a simple text editor. </span></p>
    <h3 class="c5"><a name="h.q7sm22qjs0u3"></a><span>1.3.17. -i&lt;library-file&gt; : Include library modules during
linking/relocation</span></h3>
    <p class="c11"><span>This option allows compilation time linking of external machine code,
better known as library routines. Much, much programming time can be saved
by producing a set of standard routines compiled into library files. These
may then be included later in application project compilations. The command
line option allows specification of several library files. For each library
reference in an application module, all library files will be scanned for
that particular module. The filename (inclusive directory path) of the
library may be specified explicitly on the command line immediately after
the -i identifier. If you omit the filename, a default library filename
will be used by the assembler. This default filename is defined by creating
the environment variable &quot;Z80_STDLIB=&lt;library-file&gt;. Please refer to your
operating system documentation on how to create environment variables. </span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>Library
files are recognised by the &quot;.lib&quot;
extension.</span></p>
    <h3 class="c5"><a name="h.6u48pt7r54nw"></a><span>1.3.18.
-L&lt;library-path&gt; : Add directory to search path for
libraries</span></h3>
    <p class="c12"><span>Tells
the assembler where to look for library
files.</span></p>
    <h3 class="c5"><a name="h.n4w86prnajx9"></a><span>1.3.19.
-I&lt;include-path&gt; : Add directory to search path for
INCLUDE</span></h3>
    <p class="c12"><span>Tells
the assembler where to look for INCLUDE
files.</span></p>
    <h3 class="c5"><a name="h.jsz6obku74ei"></a><span>1.3.20.
-x : Create a
library</span></h3>
    <p class="c11"><span>A
library file is composed of object files surrounded by a few file
structures. The library file format (and object file format) may be found
at the end of this documentation. A library is simply a set of independent
routines (that may refer to each other) put together in a sequential form.
You may only specify a single -x option on the command line. A filename may
be explicitly defined (including device and path information) to determine
the storage location of the library. As in -i you may omit the filename to
use the default filename identified by the &quot;Z80_STDLIB&quot; environment
variable. A library routine must be defined using a simple XLIB directive
with an identical address name label definition. Please refer to further
information later in this documentation. The &quot;Z80lib.zip&quot; contains the
standard library with all corresponding source files. Have a look at them -
they clearly displays how to compose a library
routine.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>One
very important aspect of libraries is the time that the assembler
spends searching through them. To optimize the search you should place your
routines in a &quot;topological&quot; order, i.e. routines that access other library
routines should be placed first. In most situations you avoid redundant
sequential searching through the
library.</span></p>
    <h3 class="c5"><a name="h.1av6s8a1zezg"></a><span>1.3.21.
-t&lt;number&gt; : Define tabulator distance for text output
files</span></h3>
    <p class="c11"><span>To
save storage space the Z80 cross assembler output files (listing, map,
symbol and XDEF definition files) uses a tabulator control character
instead of spaces. The benefit is about 30% compressed
files.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The
tabulator distance defines the distance of space between each tabulator
it represents. The default value is 8 spaces per
tabulator.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The
tabulators are used to separate two columns of information. The first
column contains a name of some sort. Since names have variable length, a
size of the column is defined. The Assembler defines the size of the column
by multiplying the current tabulator distance with 4, i.e. giving a default
size of 4*8 = 32 &#39;spaces&#39;. This is usually more than enough for most name
definitions parsed from source
files.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>You
may redefine the tabulator distance by using the -t option immediately
followed by a decimal number, e.g. -t4 for defining a tabulator distance of
4. The width of the first column will then be 4*4 = 16
&#39;spaces&#39;.</span></p>
    <h3 class="c5"><a name="h.2zbbrbsmnyjy"></a><span>1.3.22.
-RCMX000 : Support the RCM2000/RCM3000 series of Z80-like
CPU&#39;s</span></h3>
    <p class="c12"><span>This
option disables assembly opcodes not available in the RCM2000/RCM3000
series of Z80-like
CPU&#39;s.</span></p>
    <h3 class="c5"><a name="h.yy7y9ciebg4h"></a><span>1.3.23.
-plus : Support for the
Ti83Plus</span></h3>
    <p class="c12"><span>Defines
how the INVOKE command is coded: either as a RST 28H instruction
(option on) or as a regular CALL instruction (option
off).</span></p>
    <h3 class="c5"><a name="h.egoxj76v4nki"></a><span>1.3.24.
-IXIY : Swap IX and IY
registers</span></h3>
    <p class="c12"><span>Swaps
the IX and IY registers; references to IX are coded as IY and vice
versa. Useful when the assembler is used as a back-end of a compiler that
uses one of the index registers that is used in the target
platform.</span></p>
    <h3 class="c5"><a name="h.kiildarbmqef"></a><span>1.3.25.
-C : Enable LINE
directive</span></h3>
    <p class="c12"><span>Enables
the LINE directive to synchronize error message line numbers with
the line numbers from the source
file.</span></p>
    <h3 class="c5"><a name="h.upws0lyqf8pl"></a><span>1.3.26.
-sdcc : Force SDCC
hacks</span></h3>
    <p class="c12"><span>Enable
hacks to be able to use the assembler as the back-end for the Small
Device C Compiler
(SDCC).</span></p>
    <h1 class="c5"><a name="h.3umrs9snh1co"></a><span>2.
An overview of assembler features and related
files</span></h1>
    <h2 class="c5"><a name="h.a2s7jo9gcmdq"></a><span>2.1.
The Z88 operating system definition
files</span></h2>
    <p class="c11"><span>You
will find header files containing all operating system definitions as
defined in the Z88 Developers&#39; Notes V3 in the &quot;OZdefc.zip&quot; file. This
makes the operating system interface programming a lot
easier.</span></p>
    <h2 class="c5"><a name="h.xvwf5ybvvypi"></a><span>2.2.
The supplied standard library Z80 source
files</span></h2>
    <p class="c11"><span>We
have supplied a standard library with useful routines for both beginners
and professional machine code programmers. All source files are supplied
for having the opportunity to study and improve the routines. However some
routines are programmed especially for the Z88 operating system and may not
be of use for other Z80 based computers unless thoroughly rewritten. The
standard library source files may be found in the &quot;Z80lib.zip&quot;
file.</span></p>
    <h2 class="c5"><a name="h.5j5ndp1hga75"></a><span>2.3.
Z88 module assembler application
source</span></h2>
    <p class="c11"><span>We have supplied the complete source of the Z88 module assembler
application. This allows you to evaluate many aspects of programming
applications on the Z88. Further, most features of the assembler are
mirrored in these source files; using directives, the free format of Z80
mnemonics, library routine access, modular file design, labels, using
expressions, comments, data structure manipulation and good programming
design.</span></p>
    <h2 class="c5"><a name="h.inybfi2z6mw3"></a><span>2.4.
File based
compilation</span></h2>
    <p class="c11"><span>This
assembler is completely file based, i.e. all parsing and code
generation is manipulated via files on storage medias such as harddisks or
floppy disks (or file based
RAM-discs).</span></p>
    <h2 class="c5"><a name="h.eviyl6gjjtba"></a><span>2.5.
Modular source file
design</span></h2>
    <p class="c11"><span>A
compilation may be split into individual source files that either can be
linked together during assembly as a single module or assembled as separate
source file modules. Separate source file modules saves compilation time
and memory. Further, this design is much more straightforward and much more
logically clear in a design phase of a large compilation project than one
huge kludge of a source
file.</span></p>
    <h2 class="c5"><a name="h.4mill9y2cbvj"></a><span>2.6.
Scope of symbols in source
modules</span></h2>
    <p class="c11"><span>All
source modules may refer to each others symbols by using XREF
directives. This means that you refer to external information outside the
current source module. The opposite of an external module reference is to
declare symbols globally available using a XDEF directive, i.e. making
symbols available to other source modules. Finally it is possible to have
local symbols that is not known to other source modules than the current. A
label or constant that has not been declared with XREF, XDEF or XLIB is
local to the
module.</span></p>
    <h2 class="c5"><a name="h.n3q881h4cf6n"></a><span>2.7.
Using arithmetic and relational
expressions</span></h2>
    <p class="c11"><span>All
directives that require a numerical parameter or Z80 mnemonics that use
an integer argument may use expressions. Expressions may be formed by all
standard arithmetic operators and relational operators. Even binary
operators are implemented. All expressions may contain external identifiers
and is automatically resolved during the linking phase. Only certain
directives require compilation time evaluable
expressions.</span></p>
    <h2 class="c5"><a name="h.mr1x5aj5mhxo"></a><span>2.8.
Source file
manipulation</span></h2>
    <p class="c11"><span>To allow the Assembler to execute in multitasking environments such as
LINUX and QDOS, all source input files are opened as shared I/O. This
allows other programs to access the source files while the assembler is
working. All output files (both text and binary files) are opened/created
for exclusive use; other programs will have no access to those files until
they have been closed. </span></p>
    <h2 class="c5"><a name="h.c1f65mnc8lz4"></a><span>2.9.
Free format of assembler source
files</span></h2>
    <p class="c11"><span>The source files may be written in a free format. No fixed position columns
as needed as in the COBOL programming language. All text may be typed in
mixed case (the assembler converts all text input to uppercase). Tabulators
may be used freely (instead of spaces which also saves source file space)
to suit the programmers own habits of structured text layouts. However, one
rule must be obeyed: syntax of Z80 assembler mnemonics and most directives
must be completed on individual lines. Text files using different OS
dependant line feed standard are parsed properly; line feed types CR, LF or
CRLF are automatically recognized. So you can easily compile your sources
from Linux/UNIX on an MSDOS platform. </span></p>
    <h2 class="c5"><a name="h.fwjzz4fygwti"></a><span>2.10.
Specification of
filenames</span></h2>
    <p class="c11"><span>Specification
of file names in source files are always enclosed in double
quotes. The assembler just collects the filename string and uses this to
open a file. This way all filename standards may be used as defined on
different operating system
platforms.</span></p>
    <h2 class="c5"><a name="h.db2bpy442fvg"></a><span>2.11.
Including other source files into the current source
file</span></h2>
    <p class="c11"><span>The
need for header file information such as operating system constants or
data structures is often indispensable for source file modules. Instead of
copying the contents of those files into each module, it is possible to
include them at run time (during parsing). Infinite include file levels are
permitted, i.e. included files calling other
files.</span></p>
    <h2 class="c5"><a name="h.2b7q9g7t1ax4"></a><span>2.12.
Conditional assembly in source file
modules</span></h2>
    <p class="c11"><span>Large compilation projects often need to compile the application in several
variations. This can be achieved with enclosing parts of the source with
conditional directives for the different variations of the application.
This may also be useful if the assembler source is ported to several
platforms, where inclusion of other source files (such as header files) are
using different filename standards. The conditional directives IF, IFDEF,
IFNDEF, ELSE, and ENDIF may be nested into infinite levels. </span></p>
    <h2 class="c5"><a name="h.ui65mahv0k2h"></a><span>2.13.
Undocumented Z80 instruction code
generation</span></h2>
    <p class="c11"><span>We
have included the syntax parsing and code generation of the undocumented
Z80 instructions for the sake of completeness. However, IM 2 interrupts
must be disabled before they are executed (an interrupt may otherwise occur
in the middle of the instruction execution). Many games on the ZX Spectrum
have used them to protect the code from prying eyes. The Z88 native
debugger code uses some of the undocumented instructions for fast access to
register
variables.</span></p>
    <h2 class="c5"><a name="h.i6i61v1gjyox"></a><span>2.14.
Object file
generation</span></h2>
    <p class="c11"><span>The
Z80 Module Assembler generates object files that contains the
compressed version of an assembled source module. The information herein
contains declared symbols (local, global and external), expressions,
address origin, module name and machine code. The object file modules are
much smaller than their source file counterparts (often smaller than
2K).</span></p>
    <h2 class="c5"><a name="h.ju5f1jdtem6w"></a><span>2.15.
Transfer of object files across
platforms</span></h2>
    <p class="c11"><span>The
Z80 Module Assembler is already implemented on several different
computer platforms. You may freely transfer the object files and use them
as a part of another cross-compilation. There is no system-dependent
information in the object
files.</span></p>
    <h2 class="c5"><a name="h.erldj58fwpyv"></a><span>2.16.
Date stamp controlled
assembly</span></h2>
    <p class="c11"><span>To
avoid unnecessary compilation of source file modules, it is possible to
let the assembler compile only recently updated source file modules by
comparing the date stamp of the source and the object file modules. Source
file modules that are older than object file modules are ignored. This
facility is indispensable in large compilation
projects.</span></p>
    <h2 class="c5"><a name="h.ng4rnga3c2d0"></a><span>2.17.
Listing
files</span></h2>
    <p class="c11"><span>The
assembler may generate listing files that contain a copy of the source
file with additional code generation information of Z80 mnemonics dumped in
hexadecimal format. The listing files are formatted with page headers
containing time of assembly and the filename. Line numbers are included
which corresponds to the source file
lines.</span></p>
    <h2 class="c5"><a name="h.c97jvxbx22k1"></a><span>2.18.
Symbol
information</span></h2>
    <p class="c11"><span>All
symbol generated values used in source modules may be dumped to the end
of the listing file or as a separate symbol file. If the symbol table is
dumped into the listing file, each symbol will be written with page
references of all occurrences in the listing file. Address symbols (labels)
are addressed relative to the start of the module. Symbol constants are
written as defined in the source. The symbol table is written in
alphabetical order with corresponding values in hexadecimal
format.</span></p>
    <h2 class="c5"><a name="h.5oboon5f02ik"></a><span>2.19. Linking and relocation of object modules into executable Z80 machine
code</span></h2>
    <p class="c11"><span>To
obtain an executable Z80 machine code file it is necessary to link all
assembled object modules and relocate them at a defined address, where the
code is to be executed at in the computers&#39; memory. The linking &amp;
relocation is performed automatically after completed assembly of all
specified source file modules. The ORG relocation address is specified in
the first object
module.</span></p>
    <h2 class="c5"><a name="h.ultmv8a8jgpa"></a><span>2.20.
Address map
files</span></h2>
    <p class="c11"><span>The
address map is invaluable information during a debugging session of
your compiled program. This file contains all symbolical address labels
with their generated address constants after a completed linking/relocation
of all modules into executable machine code. The map file is ordered in two
groups; the first list contains all symbol names ordered alphabetically
with corresponding address constants, the second list contains all symbols
ordered by their address value (in chronological
order).</span></p>
    <h2 class="c5"><a name="h.gl3hn0i4xb4v"></a><span>2.21.
Symbol address definition
files</span></h2>
    <p class="c11"><span>As
with address map files this contains information of globally declared
symbolical address labels, relocated to their absolute position as for the
compiled machine code file. However, the format is completely different;
all symbols are created as constant definitions to be included as a header
file into another source file and assembled. This is useful if you want to
call subroutines compiled separately in another project (originated in a
different memory
setup).</span></p>
    <h2 class="c5"><a name="h.k27ltxv88h49"></a><span>2.22.
Error
files</span></h2>
    <p class="c11"><span>Error
files are created by the assembler during processing. If any errors
should occur, they will be written to stderr and copied to this file
containing information of where the error occurred in the source module. If
no errors were found, the error file is automatically closed and
deleted.</span></p>
    <h2 class="c5"><a name="h.1phwi8kvdkry"></a><span>2.23.
Creating and using object file libraries for standard
routines</span></h2>
    <p class="c11"><span>Machine
programmers often re-use their standard routines. We have
implemented a file format for generating libraries using the existing
object file modules. Using a simple set of rules makes it very easy to
create your own libraries from your source file modules. Documentation of
the library file format is included in this documentation. At command line
infinite number of libraries may be specified. All will be searched during
linking of your object modules for referenced library
routines.</span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c1 c18"><span></span></p>
    <h1 class="c5"><a name="h.447fa65coun7"></a><span>3.
Executing the cross assembler and environment
variables</span></h1>
    <p class="c11"><span>The
following text describes how to execute the assembler and defining the
environment variables used by the
assembler.</span></p>
    <h2 class="c5"><a name="h.m6gnkj30ac04"></a><span>3.1.
The environment
variables</span></h2>
    <p class="c12"><span>The
assembler uses two environment
variables:</span></p>
    <p class="c1"><span></span></p>
    <ul class="c23 lst-kix_dgme07d3bfcg-0 start">
      <li class="c3 c20"><span>&quot;Z80_STDLIB&quot;
define the default filename of the standard library
filename.</span></li>
      <li class="c3 c20"><span>&quot;Z80_OZFILES&quot; define the default path of the standard Z88 OZ system
headers.</span></li>
    </ul>
    <p class="c1"><span></span></p>
    <h2 class="c5"><a name="h.fe31lehg6w97"></a><span>3.2.
Running in the QDOS/SMSQ operating system
environment</span></h2>
    <p class="c11"><span>z80asm may be compiled using the C68 compiler developed by the Walker
brothers. You also need the &#39;env_bin&#39; file. This is necessary to install
into the operating system before using the assembler. It contains the
environment variable facility integrated on UNIX, MS-DOS and many other
operating systems. Include the following line into your BOOT upstart
program:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">LRESPR win1_ext_env_bin</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The device and path &#39;win1_ext_&#39; is just an example of where to store your
system extension file. You may have it on your BOOT disk as well. If you
don&#39;t have ToolKit 2 on your system use the following line in your BOOT
program:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">envext=RESPR(1024):LBYTES
win1_ext_env_bin,envext:CALL
envext</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c12"><span>Use
the following in your BOOT file to set the environment
variables:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">SETENV &quot;Z80_OZFILES=win1_z80_src_oz_&quot;<br />SETENV &quot;Z80_STDLIB=win1_z80_standard_lib&quot;</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c12"><span>The
example file names are only a demonstration. Change them as
necessary.</span></p>
    <h2 class="c5"><a name="h.x389814ok1yl"></a><span>3.3.
Running in the LINUX/UNIX operating system
environment</span></h2>
    <p class="c11"><span>This
program can be executed on the LINUX operating system and any other
UNIX. The sources are strictly ANSI C and uses only library calls that are
described in Brian W. Kernighan and Dennis M. Ritchie C books. The
important thing to remember before compiling it under UNIX, is in which
direction the integers are stored by the processor architecture; the famous
Big Endian and Little endian concept. The config.h file uses a &quot;ENDIAN&quot;
definition when z80asm must interpret integers in big endian order. Please
set this definition according to your system&#39;s processor architecture. Most
people uses the Intel processor when running Linux - this is a little
endian architecture (so you don&#39;t need the ENDIAN
define...).</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>You
can compile z80asm using GNU C compiler simply by entering the
following on your command
line:</span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c12"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="c0">gcc
-o z80asm -O2
*.c</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The environment variables needed by z80asm are easily added in your
accounts login script, &quot;.profile&quot; or &quot;.bash_profile&quot; in your home
directory.</span></p>
    <h2 class="c5"><a name="h.7ycz2evnb63s"></a><span>3.4.
Running in the MS-DOS operating system
environment</span></h2>
    <p class="c11"><span>This program can be executed on all MSDOS operating systems using the INTEL
8086 processor up to high speed 80386/80486/Pentium processors on IBM &amp;
compatible computers. Add the source files to your favorite C compiler
system in MSDOS or Windows (here you need to specify compilation options o
a console application). </span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The
environment variables are easily put into your AUTOEXEC.BAT file.
Simply
specify:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">SET Z80_OZFILES=C:\Z80\OZ\</span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c0">SET Z80_STDLIB=C:\Z80\STANDARD.LIB</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c12"><span>Choose
your own settings if you
like.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>If
you want the assembler to be accessible in any path, add the path
location of the assembler in the PATH search
line:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">SET PATH=%PATH%;C:\Z80</span></p>
      </ol>
    </ol>
    <p class="c1"><span class="c0"></span></p>
    <p class="c1"><span class="c0"></span></p>
    <h1 class="c5"><a name="h.ehp52383w0ya"></a><span>4.
Z80 module assembler file
types</span></h1>
    <h2 class="c5"><a name="h.c1u9tjfrkqay"></a><span>4.1.
The assembler file types and their extension
names</span></h2>
    <p class="c11"><span>The
Z80 Module Assembler uses several different filename extensions to
distinguish the type of files processed. The base name of the source file
is used to create the various assembler output file types. The following
chapters explains the available
files.</span></p>
    <h2 class="c5"><a name="h.fz8xa55541k"></a><span>4.2.
The file name extension
identifier</span></h2>
    <p class="c11"><span>The
file name extension identifier may be different from platform to
platform. UNIX has no defined standard. MSDOS and TOS uses &#39;.&#39;. QDOS uses
the &#39;_&#39; identifier. SMSQ also allows the &#39;.&#39; extension
identifier.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The Assembler implemented on the supplied platforms is defined with the
correct extension identifier. You can see this on the Assembler help page
(executing the program with no parameters). </span></p>
    <h2 class="c5"><a name="h.5m7ybz2ihanb"></a><span>4.3.
File
types</span></h2>
    <h3 class="c5"><a name="h.jwk6k39z5thq"></a><span>4.3.1.
The source file extension,
asm</span></h3>
    <p class="c11"><span>The
extension for assembler mnemonic source files is &#39;asm&#39;. Source files
are specified by the user with or without the extension - whatever chosen,
the assembler will investigate automatically what is needed to read the
source
files.</span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>You
may override the default extension with the -e
option.</span></p>
    <h3 class="c5"><a name="h.bw2vmsfwk0ua"></a><span>4.3.2.
The object file extension,
obj</span></h3>
    <p class="c11"><span>The extension for object files is &#39;obj&#39;. The base file name is taken from
the corresponding source file name. This file is generated by the assembler
from parsing the source file and contains intermediate generated machine
code, an address origin of the machine code, symbol information and
expressions. </span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>You
may override the default extension with the -M
option.</span></p>
    <h3 class="c5"><a name="h.c3c65wiej5q9"></a><span>4.3.3.
The error file extension,
err</span></h3>
    <p class="c11"><span>The extension for error files is &#39;err&#39;. Before beginning processing the
source files, an error file is created. If any errors should occur, they
will be written to this file containing information of where the error
occurred. If no error were found, the error file is automatically closed
and deleted. </span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>Error files are simple text files that can be loaded by any text editor for
evaluation.</span></p>
    <h3 class="c5"><a name="h.gwkabq31ppju"></a><span>4.3.4.
The listing file extension,
lst</span></h3>
    <p class="c11"><span>The
extension for listing files is &#39;lst&#39;. The base file name is taken from
the corresponding source file name. This file is generated by the assembler
and contains a hexadecimal output of the generated machine code that
corresponds to the Z80 mnemonic instruction or directive, followed by a
copy of the original source line. If selected, the symbol table is dumped
at the end of the listing
file.</span></p>
    <h3 class="c5"><a name="h.dekpoklgwora"></a><span>4.3.5.
The symbol file extension,
sym</span></h3>
    <p class="c11"><span>The
extension for symbol table files is &#39;sym&#39;. The base file name is taken
from the corresponding source file name. The symbol table file contains
information about the defined and used symbols of the source file and their
generated values (labels and constants). The symbol file is only created if
listing file output is
disabled.</span></p>
    <h3 class="c5"><a name="h.qnko781h7yac"></a><span>4.3.6.
The executable file extension,
bin</span></h3>
    <p class="c11"><span>The extension for executable Z80 machine code files is &#39;bin&#39;. The base file
name is taken from the first specified source file name at the command line
(or project file). This is the linked and relocated output of object files
and may be executed by the Z80 processor. You may override this default
behaviour by using the -o option and specify your own output filename (and
extension).</span></p>
    <p class="c1"><span></span></p>
    <p class="c12"><span>You
may override this default behavior by using the -o option and specify
your own output filename and
extension.</span></p>
    <h3 class="c5"><a name="h.45woq2agv66b"></a><span>4.3.7.
The address map file extension,
map</span></h3>
    <p class="c11"><span>The
extension for address map files is &#39;map&#39;. The base file name is taken
from the first specified source file name at the command line (or project
file). This file is generated by the assembler and contains a list of all
defined address labels from all linked/relocated modules with their
calculated (absolute) address in
memory.</span></p>
    <h3 class="c5"><a name="h.gqxxr95mrlos"></a><span>4.3.8.
The definition file extension,
def</span></h3>
    <p class="c12"><span>The
extension for global address label definition files is &#39;def&#39;. The base
file name is taken from the first specified source file name at the command
line (or project file). This file is generated by the assembler and
contains a list of all globally declared address labels with their
calculated (absolute) origin address, fetched only during assembly of
source file modules. The format of the list contains constant definitions
(addresses) and may be parsed e.g. as include files for other
projects.</span></p>
    <h3 class="c5"><a name="h.wdsvnid6pvox"></a><span>4.3.9.
The library file extension,
lib</span></h3>
    <p class="c11"><span>Library
files are identified with the &#39;lib&#39; extension. Library files may be
created using the -x option. Library may be included into application code
during linking of object modules with the -i
option.</span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c1 c18"><span></span></p>
    <h1 class="c5"><a name="h.3jjuyl7czx2g"></a><span>5.
Compiling
files</span></h1>
    <h2 class="c5"><a name="h.isayw4i0p8g7"></a><span>5.1.
The assembler compiling
process</span></h2>
    <p class="c11"><span>The
Z80 Module Assembler uses a two stage compilation process; stage 1
parses source files and generates object files. Stage 2 reads the object
files and links the object file code, completes with address patching and
finishes with storing the executable
code.</span></p>
    <h3 class="c5"><a name="h.woqp15lzajuj"></a><span>5.1.1.
Stage 1, parsing and code generation of all source files, object
file
generation</span></h3>
    <p class="c11"><span>A source file is being parsed for Z80 mnemonics and directives. An object
file is created to hold information of module name, local, global and
external symbol identifiers, expressions and the intermediate code
generation (but address and other constant information). During pass 1 all
Z80 mnemonics are parsed and code is generated appropriately. All
expressions are evaluated; expressions that contain relocatable address
symbols or external symbol are automatically stored into the object file.
Expressions that didn&#39;t evaluate are preserved for pass 2. When a source
file has been read successfully to the end, pass 2 is started. During pass
2 all non-evaluated expressions from pass 1 are re-evaluated and stored to
the object file if necessary. Errors are reported if symbols are still
missing in expressions. When all expressions are evaluated and no errors
occurred, all &quot;touched&quot; symbols (used in expressions) are stored into the
object file, with scope, type and value. Then, the module name and
generated code is stored to the object file. Various file pointers to
sub-sections of the object file is resolved. The completion of stage 1 is
to produce the symbol table output (either appended to listing file if
selected or as a separate file). </span></p>
    <p class="c1"><span></span></p>
    <p class="c12"><span>This
process is performed for all specified source modules in a
project.</span></p>
    <h3 class="c5 c18"><a name="h.87oxwi2g7rnc"></a><span>5.1.2.
Stage 2, linking object files and library modules, producing
executable
code</span></h3>
    <p class="c11"><span>Pass
1 of the linking loads information from each object file in the
project; the ORG address is fetched, identifiers (resolving scope, and
absolute values) loaded, and machine code linked. During this pass all
external library modules are fetched and linked with the object modules (if
a library is specified from the command line). When all modules have been
loaded, pass 2 begins. Pass 2 then reads each expression section from all
object modules (including library modules), evaluates them and patches the
value into the appropriate position of the linked machine code. When all
expressions have been evaluated successfully the executable code is stored.
If selected, the address map file is produced from the current symbol table
resided in the data structures of the assembler&#39;s memory is stored to a
text
file.</span></p>
    <h2 class="c5"><a name="h.4v3j3by4jwo9"></a><span>5.2.
File
names</span></h2>
    <p class="c11"><span>Specification
of file names follows the convention used on the various
platforms that the assembler is ported to. Please read your operating
systems manual for more
information.</span></p>
    <h2 class="c5"><a name="h.25a86shd3q1j"></a><span>5.3.
Portability of assembler file
names</span></h2>
    <p class="c11"><span>If
you are going to port your Z80 Module Assembler files across several
platforms a few hints may be worth
considering:</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Avoid
special symbols in file names like &#39;_&#39;, &#39;#&#39; and &#39;.&#39; . They may have
special meaning on some operating system platforms. Use only 7-bit standard
ASCII letters in file names (&#39;A&#39; to &#39;z&#39;). Non English language letters are
not always allowed, and further they may not be interpreted correctly when
ported to another platform. Avoid too long file names. Some operating
systems have boundaries for length of filenames in a directory path. For
example MS-DOS only allows 8 characters in a file name (followed by an
extension). Others may have no
boundaries.</span></p>
    <h2 class="c5"><a name="h.y40ejfsu7km6"></a><span>5.4.
Source file
structure</span></h2>
    <p class="c11"><span>The
composition of a source file module is completely free to the
programmer. How he chooses to place the source code on a text line has no
effect of the parsing process of the assembler. The linefeed interpretation
is also handled by z80asm - it understands the following
formats:</span></p>
    <p class="c1"><span></span></p>
    <ul class="c23 lst-kix_99imf6m4828h-0 start">
      <li class="c11 c27 c20"><span>&lt;LF&gt;
(used by
QDOS/SMSQ/UNIX/AMIGA);</span></li>
      <li class="c11 c27 c20"><span>&lt;CR&gt;&lt;LF&gt;
(used by
MSDOS);</span></li>
      <li class="c11 c27 c20"><span>&lt;CR&gt;
(used by
Z88/MacIntosh).</span></li>
    </ul>
    <h2 class="c5"><a name="h.7ej82gr5szno"></a><span>5.5.
Using local, global and external
symbols</span></h2>
    <p class="c11"><span>In larger application projects it is unavoidable to use a modular
programming design, i.e. splitting the source into several individual
files. This approaches the popular top - down design where you can isolate
the problem solving into single modules. The outside world just needs to
know where the routine is to be called by linking the modules with a few
directives.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>In
the Z80 Module Assembler you only need two directives to accomplish just
that: the XREF and XDEF
directives.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>XREF
declares a symbol to be external to the current source file module.
This tells the assembler that all expressions using that symbol is not to
be evaluated until the compiled object modules are to linked and relocated
together. An expression that contains this symbol is simply stored into the
object
file.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>XDEF
declares a symbol to be created in this module and made globally
available to other modules during the linking/relocation phase. All
expressions that contain a globally declared symbol is automatically stored
into the object
file.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>When
a symbol is created and is neither declared external or global, it is
implicitly defined as local to the current source module. The symbol is
then only available to the current module during
linking/relocation.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>If
you want to access (external) library modules from a library, use the
LIB directive followed by the name of the routine. Several routine names
may be specified separated by a
comma.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>During
the linking process all external and corresponding global symbols
are resolved. If two identical global identifiers are loaded by the linking
process, the most recently loaded identifier is used by the
linker.</span></p>
    <h2 class="c5"><a name="h.c8kmcwdcbzjk"></a><span>5.6.
Defining symbol
names</span></h2>
    <p class="c11"><span>Good
programming involves a structured approach to mnemonic identification
of names in subroutines, variables, data structures and other constants.
The Z80 Module Assembler gives you several possibilities. The easiest and
frequently used one is DEFC (Define Constant). We have supplied a complete
set of header files (the &quot;OZdefc.zip&quot; file) containing the Z88 operating
system manifests as defined in the Developers&#39; Notes V3 (the &quot;devnotes.zip&quot;
file) which just contains DEFC
directives.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Each
DEFC directive is followed by an identifier name, followed by a =
symbol and then an evaluable constant expression (usually just a constant).
Constant definitions are usually operating system manifest or other
frequently used items. They are put into separate source files and later
inserted into main source files using the INCLUDE
directive.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Though
DEFC resolves most needs, it may be necessary to define variable
areas or templates containing names with an appropriate size tag (byte,
word or double word). This is possible using the DEFVARS directive. Here
you may specify as many names as needed in the group. Then, it is easy to
add, rearrange or delete any of the variable names - only a few
modifications and then just re-compiling the necessary source files that
use the templates. This would be a nightmare with DEFC, since you have to
keep track of the previous and next name in the group in addition to count
the size of all names. All this is managed by DEFVARS automatically. Have a
look at the syntax in the Directive Reference
section.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>With
advanced Z80 programming you cannot avoid dynamic data structures like
linked lists or binary trees. The fundamentals for this are known as
records in PASCAL or structures in C. DEFVARS is well suited for this
purpose. Defining each DEFVARS group with 0 automatically generates offset
variables. The last name then automatically defines the size of the data
structure. Again, refer to the directive reference for a good
example.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>A
third possibility for an easy definition of symbols is to use the
DEFGROUP directive. Here you&#39;re able to define a set of symbols equal to an
enumeration. It follows the same principles as for C&#39;s ENUM facility. The
default starts at 0 and increases by 1. If you choose, a specific
identifier may be set to a value, which then can set the next enumeration
sequence. Again, this directive has been made to implement an easy way of
defining symbols and providing a simple method to alter the identifier
group. Please refer to the directive reference for an
example.</span></p>
    <h2 class="c5"><a name="h.11cduqdhathy"></a><span>5.7.
Comments in source
files</span></h2>
    <p class="c11"><span>As
always, good programming requires good documentation. Without comments
your programs lose overview and logic. Machine code is especially hard to
follow - have you tried to look at a piece of code 2 years after
implementation AND without any comments? HORRIBLE! There is never too many
comments in machine code - we especially like to use high level language as
comments - it avoids unnecessary text and logic is much more
clear.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Comments in Z80 source files are possible using a semicolon. When the
assembler meets a semicolon the rest of the current source line is ignored
until the linefeed. Parsing will then commence from the beginning of the
line. The semicolon may be placed anywhere in a source line. As stated you
cannot place mnemonics after the semicolon - they will be ignored. The Z80
parser will in many places accept comments without a semicolon has been set
- but don&#39;t rely on it. Better use a semicolon. The context is much
clearer. The following is an example on how to use comments in Z80 source
files:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">; **********************<br />;
main
menu<br />; <br />.mainmenu
&nbsp; call window &nbsp; ; display
menu<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;call getkey &nbsp; ; read keyboard<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ret &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; action in register A</span></p>
      </ol>
    </ol>
    <h2 class="c5"><a name="h.1kupa3az4yj4"></a><span>5.8.
Defining symbolic address
labels</span></h2>
    <p class="c11"><span>The
main reason for using an assembler is to be able to determine
symbolical addresses and use them as reference in the code. These are
defined by a name preceded with a full stop, or followed by a colon. It is
allowed to place a mnemonic or directive after an address label. An address
label may be left as a single statement on a line - you may of course use
comment after the label. The following is a label
definition:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">; *****************<br />;
routine
definition<br />.mainmenu
call xxx &nbsp; ; a label is preceded with
&#39;.&#39;</span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c0">endmain:
&nbsp;ret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; or followed by
&#39;.&#39;</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>It
is not allowed to position two labels on the same line. However, you may
place as many label after each other - even though no code is between them.
They just receive the same assembler
address.</span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>It
is not allowed to specify two identical address labels in the same
source
file.</span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>If
you want to declare an address globally accessible to other modules,
then use XDEF for the address label definition, otherwise the label
definition will be interpreted as a local address
label.</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">XDEF mainmenu<br />...<br />.mainmenu
; label accessible from other modules with
XREF</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>You may use before or after the label - z80asm automatically handles the
scope resolution as long as you use XDEF to define it as globally
accessible.</span></p>
    <h2 class="c5"><a name="h.5pz5r66n5t2n"></a><span>5.9.
Writing Z80 mnemonic
instructions</span></h2>
    <p class="c12"><span>All
Z80 instructions may be written in mixed case, lower or upper case -
you decide! How you separate opcode words, register names and operands is
your choice. Only a few rules must be
obeyed:</span></p>
    <p class="c1"><span></span></p>
    <ol class="c23 lst-kix_41pep6497ekp-0 start" start="1">
      <li class="c3 c20"><span>Each instruction mnemonic must be completed on a single line. </span></li>
      <li class="c3 c20"><span>The instruction identifier must be a word, i.e. don&#39;t use space between
CALL.</span></li>
      <li class="c3 c20"><span>Register
identifiers must be a word, ie. HL not H
L.</span></li>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c12"><span>A
few examples which all are legal
syntax:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">Ld
HL &nbsp; , 0 &nbsp; &nbsp; &nbsp; ;
comment<br />ld
&nbsp; &nbsp; &nbsp; hl,
$fFFF;comment<br />caLL ttttt</span></p>
      </ol>
    </ol>
    <h2 class="c5"><a name="h.6t1m0r83wkj6"></a><span>5.10.
Optional Z80 mnemonic instruction
syntax</span></h2>
    <p class="c11"><span>The
instructions below allow additional specification of the accumulator
register. Zilog standard convention is to only specify the source operand.
Sometimes it is better to specify the accumulator to make the instruction
look more clear, and to avoid confusion. After all, they specified it for
&quot;add&quot;, &quot;adc&quot; and
&quot;sbc&quot;.</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">sub a,r<br />sub a,n<br />sub a,(hl)<br />sub a,(ix+0)<br />sub a,(iy+0)</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>this
syntax applies also to &quot;and&quot;, &quot;or&quot;, &quot;xor&quot; &amp;
&quot;cp&quot;</span></p>
    <h2 class="c5"><a name="h.8wmx9e3cwi36"></a><span>5.11.
The undocumented Z80
instructions</span></h2>
    <p class="c11"><span>We
have included the parsing and code generation of the undocumented Z80
instructions. They are as
follows:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">LD
&nbsp; r,IXL &nbsp;; r =
A,B,C,D,E,IXL,IXH<br />LD
&nbsp;
r,IXH<br />LD
&nbsp; IXL,n &nbsp;; n = 8-bit
operand<br />LD
&nbsp;
IXH,n<br />
            <br />ADC &nbsp;A,IXL<br />ADC &nbsp;A,IXH<br />ADD,
AND, CP, DEC, INC, OR, SBC, SUB, XOR
...<br />
            <br />SLL
&nbsp;r &nbsp; ; r =
A,B,C,D,E,H,L<br />SLL &nbsp;(HL)</span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c0">SLL &nbsp;(IX+d)</span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c0">SLL &nbsp;(IY+d)</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c12"><span>SLL
(Shift Logical
Left)</span></p>
    <p class="c11"><span>SLL does shift leftwards but insert a &#39;1&#39; in bit 0 instead of a &#39;0&#39;. </span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>Except
for the SLL instruction all have bugs related to an interrupt being
able to occur while the instructions are decoded by the processor. They are
implemented on the chip, but are reported to be unreliable. We have used
some of them in our debugger software for the Z88. Until now the code has
been running successfully on all our Z88
computers.</span></p>
    <h2 class="c5"><a name="h.9rs3qreolshh"></a><span>5.12.
Referencing library
routines</span></h2>
    <p class="c11"><span>When you need to use a library routine in your application code, you need
to do two things; include a library file at the assembler command line with
the -i option and refer to the library routine in your source file using
the LIB directive followed by the name of the library routine, e.g. </span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">LIB
malloc,
free</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>which will declare the two names &quot;malloc&quot; and &quot;free&quot; as external
identifiers to the current source file module. Please note that you can
declare the names before or after they actually are referred in your
program source,. Failing to use the LIB directive will interpret labels as
local symbols to that source file module. When the parser meets the
instruction that uses one of the above names in a parameter, the parameter
&quot;expression&quot; is automatically saved to the object file for later
processing.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>During
the linking phase of all the object files the specified library file
is automatically scanned for &quot;malloc&quot; and &quot;free&quot; and included into the
application code when
found.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Much
application programming can be saved in &quot;re-inventing the wheel&quot; if
you store frequently used standard routines in libraries. We have supplied
a comprehensive set of library routines that were created along the
development of the Assembler Workbench application EPROM. Use them as
appropriate and add new ones. We are interested in your work - if you feel
that you have made some good routines that others may benefit from, e-mail
them to us and we will include them into the standard
library.</span></p>
    <h2 class="c5"><a name="h.oqexip51e4al"></a><span>5.13.
Creating/updating
libraries</span></h2>
    <p class="c11"><span>Creating
libraries is an inbuilt feature of the assembler. The following
steps are necessary to create a
library:</span></p>
    <p class="c1 c18"><span></span></p>
    <ol class="c23 lst-kix_2egbvjkv76xr-0 start" start="1">
      <li class="c11 c27 c20"><span>Define
a project file containing all filenames (without extensions) in your
directory that contains all library routines (the easiest method since you
later can move all files to another directory). Remember to arrange the
filename in a topological order, i.e. library routines that access other
routines must be placed first. This optimizes the searching through a
library during the linking
process.<br /></span></li>
      <li class="c11 c20 c27"><span>Each
library source module uses the XLIB directive to define the name of
the routine. The same name must be used for the address label definition.
If your library uses other library routines then declare them with the LIB
directive. Please note that a library routine creates the module name
itself (performed by XLIB automatically). The module name is used to search
for routines in a
library.<br /></span></li>
      <li class="c11 c27 c20"><span>The
command line contains the -x option immediately followed by your
filename. If you don&#39;t specify a filename, the default standard filename is
used (defined by the Z80_STDLIB environment variable). Then you need to
specify your project filename preceded by
&lsquo;@&rsquo;.</span></li>
    </ol>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>For example:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">z80asm
-xiofunctions
@iofunctions</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>will
create a library &quot;iofunctions.lib&quot; in the current directory (also
containing all library source files). The project file is &quot;iofunctions&quot;
also in the current
directory.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Please
note that no binary file is created (a library is NOT an executable
file), but a collection of object files sequentially organized in a
file.</span></p>
    <h2 class="c5"><a name="h.oi6sz44rjrd0"></a><span>5.14.
Referencing routines in other compiled
projects</span></h2>
    <p class="c11"><span>It
may be necessary in some situations to get access to routines previously
compiled in another project. This implies however a knowledge of their
absolute addresses during linking. This information is stored in the map
file, but not accessible in a form suitable to be parsed by the assembler.
However, this is possible in using the -g option at the assembler command
line. The action performed creates a DEFC list file of address labels that
have been declared as globally available (using the XDEF directive). Only
compiled source files are included in the list. If you were using the -a
option (compile only updated source files) and no files were updated then
the -g file would be empty. If you would like a complete list of all global
routines then it is needed to compile the whole project (using the -b
command line
option).</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>When
the file is generated, it can easily be INCLUDE&#39;d in another project
where your routines may access the external routines. You might do this in
two
ways:</span></p>
    <ol class="c23 lst-kix_ndkfd864qtim-0 start" start="1">
      <li class="c11 c27 c20"><span>Including
the file in every source module that needs to access external
routines. This may be the easiest solution if you&#39;re only going to need
external access in one or two source modules. With many external calls in
different module of the current project it requires much altering of
files.<br /></span></li>
      <li class="c11 c27 c20"><span>Creating
a new source file that is part of your project. This file could
easily be the first file in your project but could just as well be placed
anywhere in your project. Declare each external name that is needed
somewhere in your project as XDEF, meaning that all names to be included
are globally accessible from this module. Then specify the INCLUDE of the
DEFC list of the other project file. As the names get loaded, they become
global definitions. All other definitions will be ignored and not stored to
the object file (they are not referred in the source module). All other
modules just need to specify the external names as XREF. During linking
they all get resolved and your code has access to external routines from a
previously compiled
project.</span></li>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Whenever
the previous project has been re-compiled (and issued with -g
option) there is a possibility that routine addresses has changed. You
therefore need to recompile the extra source module in your project to get
the new identifier values - the rest of your compilation is unaffected (due
to the XREF directives). Only the linking process gets the new proper
addresses. In example 1) you had to recompile all source files that would
have used an INCLUDE of the DEFC list file. In example 2) only one file had
to be
recompiled.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>The principle of external addresses was used to compile the debugger
version to be resided in segment 0 (into the upper 8K). The actual size of
the debugger code uses 16K, but was split into two separate halves to fit
into the upper 8K of segment 0. Each of the 8K code-segments had to get
access to the other 8K block. The solution was the -g option and cross
referencing using XREF and an additional source module (containing the XDEF
declarations) that included the -g list file of the other project
compilation.</span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c1 c18"><span></span></p>
    <h1 class="c5"><a name="h.eyw8eca5z285"></a><span>6.
Using
expressions</span></h1>
    <p class="c11"><span>Expressions
are almost unavoidable in source files. They define and explain
things much clearer than just using a constant. The Z80 Module Assembler
allows expressions wherever a parameter is needed. This applies to Z80
mnemonic instructions, directives and even in character strings. The
resulting value from an evaluated expression is always an integer. All
expressions are calculated internally as 32-bit signed integers. However,
the parameter type defines the true range of the expression. E.g. you
cannot store a 32-bit signed integer at an 8-bit LD instruction like LD A,
&lt;n&gt; . If a parameter is outside an allowed integer range an assembly error
is reported. Finally, no floating point operations are needed by the
assembler. There is no real standard on Z80 based
computers.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Whenever
an integer is stored in a Z80 file, the standard Zilog notation is
used, i.e. storing the integer in low byte, high byte order (this also
applies to 32-bit integers). This standard is also known as little endian
notation (also used by INTEL
processors).</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Expressions
may be formed as arithmetic and relational expressions. Several
components are supported: symbol names (identifiers), constants, ASCII
characters and various arithmetic
operators.</span></p>
    <h2 class="c5"><a name="h.dimnxtynioy4"></a><span>6.1.
Constant
identifiers</span></h2>
    <p class="c11"><span>Apart
from specifying decimal integer numbers, you are allowed to use
hexadecimal constants, binary constants and ASCII characters. The following
symbols are put in front of the constant to identify the
type:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span>$
: hexadecimal constant, e.g. $4000
(16384).<br />@
: binary constant, e.g. @11000000
(192).<br />&#39;
&#39; : ASCII character, e.g.
&#39;a&#39;.</span></p>
      </ol>
    </ol>
    <h2 class="c5"><a name="h.5w9drlq6blj"></a><span>6.2.
Arithmetic
operators</span></h2>
    <p class="c11"><span>All basic arithmetic operators are supported: addition, subtraction,
multiplication, division and modulus. In addition binary logical operators
are implemented: binary AND, OR and XOR. </span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span>+
: addition, e.g.
12+13<br />-
: unary minus, subtraction. e.g. -10,
12-45<br />*
: multiplication, e.g. 45*2
(90)<br />/
: division, e.g. 256/8
(32)<br />%
: modulus, e.g. 256%8
(0)<br />**
: power, e.g. 2**7
(128)<br />&amp;
: binary AND, e.g. 255 &amp; 7
(7)<br />|
: binary OR, e.g. 128 | 64
(192)<br />^
: binary XOR, e.g. 128 ^ 128
(0)<br />~
: binary NOT, e.g. (~0xAA) &amp; 0xFF
(0x55)<br />#
: truncate expression as constant (remove relocatable address
flag)</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Arithmetic
operators use the standard operator precedence, shown from
highest to
lowest:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span>constant identifiers<br />()
** */%
+-&amp;|^~</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c12"><span>If you want to override the default operator precedence rules, use brackets
().</span></p>
    <h2 class="c5"><a name="h.szz12pf2xofk"></a><span>6.3.
The #
operator</span></h2>
    <p class="c11"><span>This is not a real operator, though. It is only used as the first symbol in
an expression to identify that this expression evaluates to a constant,
i.e. containing no relocatable information. This feature may be necessary
when you have to calculate a distance between two address labels without
letting the assembler think it is a relocatable address. The assembler
thinks that expressions containing address labels are relocatable items. In
99% of any expression used this is perfectly adequate. </span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>During
the linking phase such an expression may have undesirable side
effect when you want to produce relocatable machine code using the -R
option. The relocator identifies the expression as an relocatable item and
will add a constant to the evaluated value of the expression. This is a
perfectly correct handling in normal address references for relocatable
code. However, since the assembler cannot see this as a constant
expression, you have to force it as
one.</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">LD
BC, end_relocator-relocator &nbsp;; the relocator will add an ORG
constant<br />LD
BC, #end_relocator-relocator ; the relocator sees a constant
expression</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Normal
executable code, compiled for an absolute address, won&#39;t conflict
with the above problem, since no constants are added to expressions. All
address information is calculated during loading of the address labels in
pass 1 of the linking process. Pass 2 of the linking process just evaluates
expressions (thereby using the proper values of labels and other constants)
and patches them into the corresponding locations of the
code.</span></p>
    <h2 class="c5"><a name="h.1ba25ag84b0r"></a><span>6.4.
Relational
operators</span></h2>
    <p class="c11"><span>With relational operators you may form logical expressions resulting in
true or false conditions. The resulting value of a true expression is 1.
The resulting value of a false expression is 0. These operators are quite
handy when you need to perform complex logic for conditional assembly in
IF-ELSE-ENDIF statements. The following relational operators are available: </span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span>=
: equal
to<br />&lt;&gt;
:not equal
to<br />&lt;
: less
than<br />&gt;
: larger
than<br />&lt;=
: less than or equal
to<br />&gt;=
: larger than or equal
to<br />!
:
not</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>You
may link several relational expressions with the binary operators AND,
OR and XOR. You have all the possibilities
available!</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>It
is perfectly legal to use relational expressions in parameters requiring
an arithmetic value. For
example:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">LD
A, (USING_IBM = 1) |
RTMFLAGS</span></p>
      </ol>
    </ol>
    <h2 class="c5"><a name="h.g1h4ba236pcy"></a><span>6.5.
The ASMPC standard
function</span></h2>
    <p class="c11"><span>In
occasional circumstances it may be necessary to use the current location
of the assembler program counter in an expression e.g. calculating a
relative distance. This may be done with the help of the ASMPC identifier.
An
example:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">.errmsg0
DEFB errmsg1 - ASMPC - 1 , &quot;File open
error&quot;<br />.errmsg1
DEFB errmsg2 - ASMPC - 1 , &quot;Syntax
error&quot;<br />.errmsg2</span></p>
      </ol>
    </ol>
    <p class="c11"><span>Here,
a length byte of the following string (excluding the length byte) is
calculated by using the current ASMPC address
value.</span></p>
    <h2 class="c5"><a name="h.1tfp5kbzlgzs"></a><span>6.6.
Symbol identifiers in
expressions</span></h2>
    <p class="c11"><span>Apart
from using integer constants in your expressions, names are allowed
as well. This is frequently used for symbolical address label references
(both external and
local).</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Forward
referencing of symbols is not really something that is important in
evaluating expressions. The logic is built into the assembler parser. If an
expression cannot be resolved in pass 1 of source file parsing, it will try
to re-evaluate the failed expression in pass 2 of the parsing. If it still
fails a symbol has not been found (XREF and LIB external symbols are
handled during the linking
phase).</span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c1 c18"><span></span></p>
    <h1 class="c5"><a name="h.qmk5qen438yg"></a><span>7.
Directive
reference</span></h1>
    <p class="c11"><span>The
Z80 Module Assembler directives are used to manipulate the Z80
assembler mnemonics and to generate data structures, variables and
constants. You are even permitted to include binary files while code
generation is
performed.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>As
the name imply they direct the assembler to perform other tasks than
just parsing and compiling Z80 instruction mnemonics. All directives are
treated as mnemonics by the assembler, i.e. it is necessary that they
appear as the first command identifier on the source line (NOT necessarily
the first character). Only one directive is allowed at a single source
line. Even though they are written as CAPITALS in this documentation they
may be written in mixed case letters in your source
files.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Since
the directives cover very different topics of assembler processing,
each directive will be explained in detail, identified with a header
description for each text section. The following syntax is
used:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span>&lt;&gt;
: defines an entity, i.e. a number, character or
string.<br />{}
: defines a an optional repetition of an
entity.<br />[]
: defines an option that may be left
out.</span></p>
      </ol>
    </ol>
    <h2 class="c5"><a name="h.mq473vd5qz34"></a><span>7.1.
BINARY
&quot;filename&quot;</span></h2>
    <p class="c11"><span>BINARY
loads a binary file at the current location. This could for example
be a static data structure or an executable machine code routine. The
loaded binary file information is included into the object file code
section. The assembler PC is updated to the end of the loaded binary
code.</span></p>
    <h2 class="c5"><a name="h.zabuhxjk4eqg"></a><span>7.2.
CALL_OZ
&lt;expression&gt;</span></h2>
    <p class="c11 c33"><span>The
&lt;expression&gt; may be a 16-bit expression and must evaluate to a
constant. This is an easy interface call to the Z88 operating system. This
is an advanced RST 20H instruction which automatically allocates space for
the size of the specified parameter (either 8-bit or 16-bit). Code is
internally generated as
follows:</span></p>
    <ol>
      <ol>
        <p class="c1 c27"><span></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c0">RST $20<br />DEFB
x ; 8-bit
parameter</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c12"><span>or</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">RST $20<br />DEFW
x ; 16-bit
parameter</span></p>
      </ol>
    </ol>
    <h2 class="c5"><a name="h.8fpgkb9grs40"></a><span>7.3.
DEFB &lt;8-bit expr&gt;,{&lt;8-bit expr&gt;} (-128;
255)</span></h2>
    <p class="c12"><span>Stores a sequence of bytes (8-bits) at the current location. Expressions
may be used to calculate the values. </span></p>
    <h2 class="c5"><a name="h.n2xbbc5klom4"></a><span>7.4.
DEFW &lt;16-bit expr&gt;,{&lt;16-bit expr&gt;} (-32768;
65535)</span></h2>
    <p class="c12"><span>Stores a sequence of words (16-bits) in low byte - high byte order (little
endian) at the current location. Expressions may be used to calculate the
values. </span></p>
    <h2 class="c5"><a name="h.4mdm9gll1plc"></a><span>7.5.
DEFL &lt;32-bit expr&gt;,{&lt;32-bit expr&gt;} (-2147483647;
4294967295)</span></h2>
    <p class="c12"><span>Stores a sequence of double-words (32-bits) in low byte - high byte order
(little endian) at the current location. Expressions may be used to
calculate the values. </span></p>
    <h2 class="c5"><a name="h.rkq3wci0ccw1"></a><span>7.6.
DEFC name=&lt;32-bit expression&gt;{, name=&lt;32-bit
expression&gt;}</span></h2>
    <p class="c11"><span>Define
a symbol variable, that may either be a constant or an expression
evaluated at link time. The allowed range is a signed 32-bit integer value.
All standard Z88 operating system header files use
DEFC</span></p>
    <h2 class="c5"><a name="h.8p88z5mbatvk"></a><span>7.7.
DEFM &lt;string expression&gt;|&lt;8-bit
expr&gt;,...</span></h2>
    <p class="c11"><span>DEFM stores a string constant at the current location. Strings are enclosed
in double quotes, e.g. &quot;abcdefgh&quot;. Strings may be concatenated with byte
constants using commas. This is useful if control characters need to be a
part of the string and cannot be typed from the keyboard. Several strings
and byte expressions may be concatenated, e.g. </span></p>
    <p class="c1 c18"><span></span></p>
    <ol>
      <ol>
        <p class="c11 c27"><span class="c0">DEFM
&quot;string_a&quot; , &quot;string_b&quot; , &#39;X&#39; , CR , LF ,
0</span></p>
      </ol>
    </ol>
    <h2 class="c5"><a name="h.bo91vxv3aqu3"></a><span>7.8.
DEFGROUP &#39;{&#39; name {&#39;,&#39; name [&#39;=&#39; &lt;8-bit expression&gt;]}
&#39;}&#39;</span></h2>
    <p class="c11"><span>DEFGROUP
defines a group of identifier symbols with implicit values. This
is similar to the enumeration principles used in C and PASCAL. The initial
symbol value is 0, increased by 1 for each new symbol in the list. You may
include a &lt;name = expression&gt; which breaks the linear enumeration from that
constant. The DEFGROUP directive may be spanned across several lines and
MUST be enclosed with { and }. DEFGROUP is just a more easy way than: DEFC
name0 = 0, name1 = name0,
...</span></p>
    <p class="c1"><span></span></p>
    <p class="c12"><span>The following example illustrates a useful example of defining symbol
values:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">DEFGROUP<br />{<br /> &nbsp; &nbsp;sym_null<br /> &nbsp; &nbsp;sym_ten = 10, sym_eleven, sym_twelve<br />}</span></p>
      </ol>
    </ol>
    <h2 class="c5"><a name="h.nitfi095mns7"></a><span>7.9.
DEFINE
name,{name}</span></h2>
    <p class="c11"><span>Defines a symbol identifier as logically true (integer &lt;&gt; 0). The symbol
will be created as a local variable and disappears when assembly is
finished on the current source file module. </span></p>
    <h2 class="c5"><a name="h.xunoyuyqioo9"></a><span>7.10.
DEFS &lt;size&gt;{,
&lt;fill-byte&gt;}</span></h2>
    <p class="c11"><span>DEFS allocates a storage area of the given size with the given fill-byte.
The fill-byte defaults to zero if not supplied. Both expressions need to be
constants.</span></p>
    <h2 class="c5"><a name="h.2dqvfslknaeb"></a><span>7.11.
DEFVARS &lt;16-bit expression&gt; &#39;{&#39; [&lt;name&gt;] [&lt;storage_size&gt;
&lt;size_multiplier&gt;]
&#39;}&#39;</span></h2>
    <p class="c11"><span>DEFVARS
defines variable address area or offsets. First you define the
origin of a variable area. This may be defined using an evaluable 16-bit
positive expression. Each variable name is followed by a size specifier
which can be &nbsp;&#39;ds.b&#39; (byte), &#39;ds.w&#39; (word), &#39;ds.p&#39; (3-byte pointer) or
&#39;ds.l&#39; (double-word). This is particularly useful for defining dynamic data
structures in linked lists and binary search trees. Defining variable areas
are only template definitions not allocations. An
example:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">DEFVARS Z80asm_vars<br />{<br /> &nbsp; &nbsp;RuntimeFlags1 ds.b 1 &nbsp; &nbsp; ; reserve 1 byte<br /> &nbsp; &nbsp;RuntimeFlags2 ds.b 1<br /> &nbsp; &nbsp;RuntimeFlags3 ds.b 1<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ds.w 1 &nbsp; &nbsp; ; space not named<br /> &nbsp; &nbsp;explicitORIG &nbsp;ds.w 1 &nbsp; &nbsp; ; reserve 2 bytes<br /> &nbsp; &nbsp;asmtime &nbsp; &nbsp; &nbsp; ds.b 3 &nbsp; &nbsp; ; reserve 3 bytes<br /> &nbsp; &nbsp;datestamp_src ds.b 6 &nbsp; &nbsp; ; reserve 6 bytes<br /> &nbsp; &nbsp;datestamp_obj ds.b 6<br /> &nbsp; &nbsp;TOTALERRORS &nbsp; ds.l 1 &nbsp; &nbsp; ; reserve 4 bytes<br />}</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c12"><span>the
following is useful for defining dynamic data
structures:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">DEFVARS
0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; &#39;PfixStack&#39;
structure<br />{<br /> &nbsp; &nbsp;pfixstack_const &nbsp; &nbsp; ds.l 1 &nbsp; &nbsp;; stack item value<br /> &nbsp; &nbsp;pfixstack_previtem &nbsp;ds.p 1 &nbsp; &nbsp;; pointer to previous<br /> &nbsp; &nbsp;SIZEOF_pfixstack &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; size of structure<br />}</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>This
type of variable declaration makes it very easy for modifications,
e.g. deleting or inserting variable
definitions.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>A
special logic is available too which can be used throughout individual
source files during compilation. If you specify -1 as the starting address,
the last offset from the previous DEFVARS which was not specified as 0 will
be
used.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>This
enables you to gradually build up a list of identifier name offsets
across DEFVARS areas in different source files. The following example
explains
everything:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">defvars $4000<br />{<br /> &nbsp; &nbsp;aaa ds.b 1<br /> &nbsp; &nbsp;bbb ds.b 100<br />}<br />defvars -1<br />{<br /> &nbsp; &nbsp;ccc ds.b 100<br /> &nbsp; &nbsp;ddd ds.b 1<br /> &nbsp; &nbsp;eee ds.b 10<br />}<br />defvars 0<br />{<br /> &nbsp; &nbsp;fff ds.p 1<br /> &nbsp; &nbsp;ggg ds.b 1<br /> &nbsp; &nbsp;hhh ds.w 1<br /> &nbsp; &nbsp;iii ds.p 1<br />}<br />defvars -1<br />{<br /> &nbsp; &nbsp;jjj ds.b 100</span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c0">}</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c12"><span>Some
of the symbols will look like
this:</span></p>
    <p class="c1"><span></span></p>
    <ol>
      <ol>
        <p class="c3"><span class="c0">BBB
=
$4001<br />CCC
=
$4065<br />GGG
=
$0003<br />JJJ
=
$40D4</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <h2 class="c5"><a name="h.9flu7sdakizm"></a><span>7.12.
FPP &lt;8-bit
expression&gt;</span></h2>
    <p class="c11"><span>Interface
call to the Z88 operating systems&#39; floating point library. This
is easier than
writing:</span></p>
    <p class="c1 c18"><span></span></p>
    <ol>
      <ol>
        <p class="c11 c27"><span class="c0">RST $18<br />DEFB mnemonic</span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c11"><span>This
is an advanced RST 18H instruction which automatically allocates space
for the specified parameter. All Z88 floating point call mnemonics are
defined in the &quot;fpp.def&quot;
file.</span></p>
    <h2 class="c5"><a name="h.73codxcq7dr1"></a><span>7.13.
IF &lt;logical expression&gt; ... [ELSE] ...
ENDIF</span></h2>
    <p class="c11"><span>This structure evaluates the logical expression as a constant, and compiles
the lines up to the ELSE clause if the expression is true (i.e. not zero),
or the lines from ELSE to ENDIF if is is false (i.e. zero). The ELSE clause
is optional. This structure may be nested. </span></p>
    <h2 class="c5 c30"><a name="h.p5117478te7x"></a><span>7.14.
IFDEF &lt;name&gt; ... [ELSE] ...
ENDIF</span></h2>
    <p class="c11"><span>This
structure checks if the give symbol name is defined, and compiles the
lines up to the ELSE clause if true (i.e. defined), or the lines from ELSE
to ENDIF if false (i.e. not defined). The ELSE clause is optional. This
structure may be
nested.</span></p>
    <h2 class="c5 c30"><a name="h.14d7pmtp8s4g"></a><span>7.15.
IFNDEF &lt;name&gt; ... [ELSE] ...
ENDIF</span></h2>
    <p class="c11"><span>This
structure checks if the give symbol name is not defined, and compiles
the lines up to the ELSE clause if true (i.e. not defined), or the lines
from ELSE to ENDIF if false (i.e. defined). The ELSE clause is optional.
This structure may be
nested.</span></p>
    <h2 class="c5"><a name="h.v7gg3d1kbuaq"></a><span>7.16.
INCLUDE
&quot;filename&quot;</span></h2>
    <p class="c11"><span>Another component that is frequently used is to &#39;link&#39; an additional source
file together with the current source file. Usually this contains variable
definitions that are commonly used by several modules in a project. This
makes sense since there is no idea in copying the same information into
several files - it simply uses redundant space of your storage media. This
is certainly important on the Z88 which not always has huge amounts of
installed user/system RAM (usually 128K). The external source file will be
included at the position of the INCLUDE directive. </span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>The
format of the filename depends on the operating system platform. As
with the current source file, you may also insert files in include files.
There is no limit of how many levels (of files) you specify of include
files. Recursive or mutually recursive INCLUDE files (an INCLUDE file
calling itself) is not possible - the assembler program will immediately
return an error message back to
you!</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>Include files are usually put at the start of the source file module but
may be placed anywhere in the source text. The current source file will be
continued after the INCLUDE directive when the included file has been
parsed to the end of file. </span></p>
    <h2 class="c5"><a name="h.5hqbg26aig9l"></a><span>7.17.
INVOKE &lt;16-bit
expression&gt;</span></h2>
    <p class="c11"><span>Special
CALL instruction for the Ti83 calculator; it is coded as a RST 28H
followed by the 16-bit expression, if the -plus option is passed on the
command line (for the Ti83Plus), or as a normal CALL instruction if the
option is not
passed.</span></p>
    <h2 class="c5"><a name="h.ts9rwxp4q5rg"></a><span>7.18.
LIB name
{,name}</span></h2>
    <p class="c11"><span>LIB
declares symbol as external to the current module. The symbol name will
be defined as the name of a library routine which will be automatically
linked into the application code from a library during the
linking/relocation phase of the compilation process (if a library has been
specified at the command line with the -i
option).</span></p>
    <h2 class="c5"><a name="h.a4gdlft34f3c"></a><span>7.19.
LINE &lt;32-bit
expr&gt;</span></h2>
    <p class="c11"><span>Used
when the assembler is used as the back-end of a compiler to
synchronize the line numbers in error messages to the lines from the
compiled source. Needs the -C option to
enable.</span></p>
    <h2 class="c5"><a name="h.uk1f5i6da3pq"></a><span>7.20. LSTOFF</span></h2>
    <p class="c12"><span>Switches listing output to file off temporarily. The listing file is not
closed.</span></p>
    <h2 class="c5"><a name="h.iiev2h5o2pkg"></a><span>7.21. LSTON</span></h2>
    <p class="c11"><span>Enables
listing output (usually from a previous LSTOFF). Both directives
may be useful when information from INCLUDE files is redundant in the
listing file, e.g. operating system
definitions.</span></p>
    <h2 class="c5"><a name="h.2mnjmb3noxbp"></a><span>7.22.
MODULE
name</span></h2>
    <p class="c11"><span>This
defines the name of the current module. This may be defined only once
for a module. All source file modules contain a module name. This name is
used by the assembler when creating address map files and for searching
routines in libraries. Further, it allows the programmer to choose a
well-defined name for the source file module. The position of the module
name is of no importance; it may be placed at the end or the start of the
source file. However, it has more sense to put it at the top. The syntax is
simple - specify a legal identifier name after the MODULE directive, e.g.
MODULE
main_module</span></p>
    <h2 class="c5"><a name="h.7c4c8849z6tr"></a><span>7.23.
ORG &lt;16-bit
expression&gt;</span></h2>
    <p class="c11"><span>Define
address origin of compiled machine code - the position in memory
where the machine is to be loaded and executed. The expression must be
evaluable (containing no forward or external references). All address
references will be calculated from the defined ORG value. The ORG address
will be placed in the current module that is being compiled. However,
during linking only the first object module is being read for an ORG
address. The ORG is ignored during linking if you have specified an -r
option on the command
line.</span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>When
assembling programs with multiple sections, a section without an ORG
will be appended to the end of the previous section. A section with a
defined ORG will generate its own binary file, e.g.
file_CODE.asm.</span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>A section may contain ORG -1 to tell the linker to split the binary file of
this section, but continue the addresses sequence from the previous
section.</span></p>
    <h2 class="c5"><a name="h.h6yit64gwr1u"></a><span>7.24.
XDEF name {,
name}</span></h2>
    <p class="c11"><span>This declares symbol globally available to other specified source file
modules during the linking phase of the compilation process. </span></p>
    <h2 class="c5"><a name="h.u3l5yyicd03"></a><span>7.25.
XLIB
name</span></h2>
    <p class="c11"><span>When
you need to create a library routine, it is necessary to declare the
routine with XLIB. In functionality it declares the name globally available
to all other modules in project, but also serves as a searchable item in
libraries. A library routine does not contain a MODULE directive, since the
XLIB name is also identified as the module name (you only specify one
library routine per
module).</span></p>
    <h2 class="c5"><a name="h.e7p0qdhnngio"></a><span>7.26.
XREF name {,
name}</span></h2>
    <p class="c11"><span>This
declares symbol as external to the current module. The name must have
been defined as XDEF in another module to let this module reach the value
of the symbol during the linking
phase.</span></p>
    <h1 class="c5"><a name="h.c79iahkre1ai"></a><span>8.
Run time error
messages</span></h1>
    <p class="c11"><span>The
following error messages will be written toe the error files
corresponding to each source file, and also to stderr. Each error message
will contain the name of the source file and a line number where the error
occurred in the
file.</span></p>
    <p class="c1 c18"><span></span></p>
    <ul class="c23 lst-kix_o3del2899phc-0 start">
      <li class="c3 c20"><span>&quot;File open/read error&quot; <br />You
have tried to access a file that either was not found, already opened
by other resources, or the assembler wasn&#39;t able to create output files
(object file, listing-, symbol-, map- or executable binary
file).<br /></span></li>
      <li class="c3 c20"><span>&quot;Syntax error&quot; <br />This
is a message used by many routines - hence the general but descriptive
message. You have tried to use illegal registers in Z80 mnemonic
instructions, specified an illegal parameter type (string instead of
integer), omitted a parameter (DEFB without
constant).<br /></span></li>
      <li class="c3 c20"><span>&quot;Symbol not defined&quot; <br />This
error is given if you are referring to an identifier (usually in an
address reference) that was not declared. Either a label definition is
missing in the current module or you have forgotten to declare an
identifier as external using the XREF
directive.<br /></span></li>
      <li class="c3 c20"><span>&quot;Not enough memory&quot; / &quot;No room in Z88&quot; <br />Well,
well. It seems that there wasn&#39;t enough room to hold the internal
data structures during parsing or linking your code. Delete any unnecessary
running applications/jobs then try again. If you got the message on the
Z88, try also to delete unnecessary files from the filing system of your
current RAM
card.<br /></span></li>
      <li class="c3 c20"><span>&quot;Integer out of range&quot; <br />You have an expression which evaluates into a constant that are beyond the
legal integer range (e.g. trying to store a 16-bit value into an 8-bit
parameter).<br /></span></li>
      <li class="c3 c20"><span>&quot;Syntax error in expression&quot; <br />Quite clearly you have made an illegal expression, e.g. specifying two
following operands without an operator to separate them, used an illegal
constant specifier or using illegal characters that aren&#39;t a legal
identifier.<br /></span></li>
      <li class="c3 c20"><span>&quot;Right bracket missing&quot; <br />Your
expression is using brackets and is not properly balanced, i.e. too
many beginning brackets or too few ending
brackets.<br /></span></li>
      <li class="c3 c20"><span>&quot;Source filename missing&quot; <br />There
has not been specified any source file modules or project file to
start a
compilation.<br /></span></li>
      <li class="c3 c20"><span>&quot;Illegal option&quot; <br />The
command line parser couldn&#39;t recognise the -option. Remember to specify
your option in EXACT case size. You have probably used a space between an
option and a filename
parameter.<br /></span></li>
      <li class="c3 c20"><span>&quot;Unknown identifier&quot; <br />The
parser expected a legal identifier, i.e. a directive or Z80 mnemonic.
You have probably omitted the &#39;.&#39; in front of a label definition,
misspelled a name or used a comment without a leading
&#39;;&#39;.<br /></span></li>
      <li class="c3 c20"><span>&quot;Illegal identifier&quot; <br />You
have been trying to use a name that is either not known to the parser
or an illegal identifier. This might happen if you try to use a register
that is not allowed in a LD instruction, e.g. LD A,F
.<br /></span></li>
      <li class="c3 c20"><span>&quot;Max. code size reached&quot; <br />Is
that really possible? Very interesting code of yours! Z80 machine code
program tend to be in the 32K range (at least on the Z88)... Well, the Z80
processor cannot address more than 64K. Start changing your code to a
smaller
size!<br /></span></li>
      <li class="c3 c20"><span>&quot;errors occurred during assembly&quot; <br />Status
error message displayed on the screen when the assembler has
completed its parsing on all modules. You have one or more errors to
correct in your source files before the assembler continues with linking
the next
time.<br /></span></li>
      <li class="c3 c20"><span>&quot;Symbol already defined&quot; <br />In the current source file, you have tried to create two identical address
label definitions, or other name identifier creators (using DEFC, DEFVARS,
DEFGROUP).<br /></span></li>
      <li class="c3 c20"><span>&quot;Module name already defined&quot; <br />You
have used the MODULE directive more than once in your source file, or
used both a MODULE and XLIB directive (library modules only need an
XLIB).<br /></span></li>
      <li class="c3 c20"><span>&quot;Symbol already declared local&quot; <br />You
have tried to declare a symbol as XREF, but it was already defined
local, eg. using a &quot;.lbaddr&quot; in your
source.<br /></span></li>
      <li class="c3 c20"><span>&quot;Illegal source filename&quot; <br />You have tried to specify an option after having begun to specify
filenames. Options must always be specified before filenames or project
files.<br /></span></li>
      <li class="c3 c20"><span>&quot;Symbol declared global in another module&quot; <br />You
have two identical XDEF definitions in separate modules. One of them
should probably be an XREF
instead.<br /></span></li>
      <li class="c3 c20"><span>&quot;Re-declaration not allowed&quot; <br />You
are trying to specify an XDEF for a name that has already been XREF&#39;ed
in the same module (or the other way
around).<br /></span></li>
      <li class="c3 c20"><span>&quot;ORG already defined&quot; <br />Only
one ORG statement is allowed per
section.<br /></span></li>
      <li class="c3 c20"><span>&quot;Relative jump address must be local&quot; <br />You
have tried to JR to a label address that is declared as external (with
XREF or LIB). JR must be performed in the current source file
module.<br /></span></li>
      <li class="c3 c20"><span>&quot;Not a relocatable file&quot; / &quot;Not an object file&quot; <br />The
assembler opened a supposed object file (with the proper &quot;.obj&quot;
extension) but realised it wasn&#39;t conforming to the Z80 assembler standard
object file
format.<br /></span></li>
      <li class="c3 c20"><span>&quot;Couldn&#39;t
open library file&quot; The library file was found but couldn&#39;t be
opened (probably already opened by another application
resource)<br /></span></li>
      <li class="c3 c20"><span>&quot;Not a library file&quot; <br />Your library file is not a library file (at least is not of the correct
file format used by this assembler). Have you maybe used another &quot;library&quot;
file? The Z80 library file could also be corrupted (at least in the
header).<br /></span></li>
      <li class="c3 c20"><span>&quot;Environment variable not defined&quot; <br />The
assembler reports either the &quot;Z80_STDLIB&quot; environment variable wasn&#39;t
found when used by options -x and
-i.<br /></span></li>
      <li class="c3 c20"><span>&quot;Cannot
include file
recursively&quot;<br />A
file was tried to be included which was already included at a previous
include level. INCLUDE &quot;a.h&quot; cannot contain an INCLUDE
&quot;a.h&quot;.</span></li>
    </ul>
    <p class="c1"><span></span></p>
    <p class="c1"><span></span></p>
    <h1 class="c5"><a name="h.stlz0oo2whj"></a><span>9.
File
formats</span></h1>
    <h2 class="c5"><a name="h.cam2d04a2q1n"></a><span>9.1.
Object file format
documentation</span></h2>
    <p class="c11"><span>The
structure of the object file format is designed exclusively for the Z80
Module Assembler. However, it may be useful for other programmers if they
wish to use the file format for other purposes. We have included the
documentation of the object file structure in this document. Improvement
suggestions are welcome. We hope to have designed a simple and
straightforward file format. The documentation may be necessary if you want
to use the object file format in other
systems.</span></p>
    <p class="c1"><span></span></p>
    <p class="c11"><span>I
have created the design structure of the object file format to be
suitable for future expansion. The primary aim of the design has been to
maintain structure simplicity and load efficiency during link
processing.</span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c11"><span>The figure below has deliberately been split into sections to clarify the
file structure, although there is no actual physical separation between the
sections in the file; each section is immediately followed by the next.
16-bit and 32-bit values are stored in low byte - high byte order (Little
endian format - Z80/Intel notation). </span></p>
    <p class="c1 c18"><span></span></p>
    <p class="c12"><span>The
format of the object file is as
follows:</span></p>
    <p class="c1"><span></span></p><a href="#" name="00caa57e8fb5879e521d64ccfdfb13d43d8a3084"></a><a href="#" name="0"></a><table cellpadding="0" cellspacing="0" class="c29">
      <tbody>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">Addr</span></p>
          </td>
          <td class="c26" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">Object</span></p>
          </td>
          <td class="c19" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">Type</span></p>
          </td>
          <td class="c24" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">Description</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c26" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c19" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c24" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">File header</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">0</span></p>
          </td>
          <td class="c26" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">&#39;Z80RMF01&#39;</span></p>
          </td>
          <td class="c19" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">8 chars</span></p>
          </td>
          <td class="c24" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">File
type
identifier</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">8</span></p>
          </td>
          <td class="c26" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">ORG Address</span></p>
          </td>
          <td class="c19" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">16-bit</span></p>
          </td>
          <td class="c24" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Contains
the ORG address for the linked machine code or 0xFFFF for no ORG
address
defined.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">10</span></p>
          </td>
          <td class="c26" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Module
Name
pointer</span></p>
          </td>
          <td class="c19" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">32-bit</span></p>
          </td>
          <td class="c24" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Points
to the Module Name section in the
file.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">14</span></p>
          </td>
          <td class="c26" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Expression
Declaration
pointer</span></p>
          </td>
          <td class="c19" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">32-bit</span></p>
          </td>
          <td class="c24" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Points
to the Expression Declaration section in the file, 0xFFFFFFFF if no
expressions
exist.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">18</span></p>
          </td>
          <td class="c26" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Name
Declaration
pointer</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">32-bit</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Points
to the Name Declaration section in the file, 0xFFFFFFFF if no
symbols
exist.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">22</span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Library
Name Declaration
pointer</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">32-bit</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Points
to the Library Name Declaration section in the file, 0xFFFFFFFF if
no library symbols
imported.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">26</span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Machine
Code Block
pointer</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">32-bit</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Points
to the Machine Code Block section in the file, 0xFFFFFFFF if no code
block
exists.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">Expression
Declaration
section</span></p>
            <p class="c2"><span class="c14">Defines
expressions that need to be computed at link
time.</span></p>
            <p class="c2"><span class="c14">The
start of the Expression Declaration section is pointed by the address
at location 14 in the object
file.</span></p>
            <p class="c2"><span class="c14">The
end of the section is marked by the first defined pointer of the
following list: Name Declaration pointer, Library Name Declaration pointer
and Module Name pointer. The last one is always
defined.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">type</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">char</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Type
defines the resulting evaluation type
range:</span></p>
            <p class="c2"><span class="c14">&#39;U&#39;:
8-bit integer (0 to
255)</span></p>
            <p class="c2"><span class="c14">&#39;S&#39;:
8-bit signed integer (-128 to
127)</span></p>
            <p class="c2"><span class="c14">&#39;C&#39;:
16-bit integer (-32768 to
65535)</span></p>
            <p class="c2"><span class="c14">&#39;L&#39;:
32-bit signed
integer</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">patchptr</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">16-bit</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Defines
the code patch pointer to store result, relative to the start of
the code
section.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">length</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">byte</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Defines
byte length of expression
string.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">expression string</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">length, chars</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Contains
the infix expression parsed from the source
file.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">end marker</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">byte</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Zero
byte end
marker.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">...</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">...</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">...</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">Name
Declaration
section</span></p>
            <p class="c2"><span class="c14">Defines
all the symbols defined in this
module.</span></p>
            <p class="c2"><span class="c14">The
start of the Name Declaration section is pointed by the address at
location 18 in the object
file.</span></p>
            <p class="c2"><span class="c14">The
end of the section is marked by the first defined pointer of the
following list: Library Name Declaration pointer and Module Name pointer.
The last one is always
defined.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">scope</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">char</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Scope
defines the scope of the
name:</span></p>
            <p class="c2"><span class="c14">&#39;L&#39;
is
local,</span></p>
            <p class="c2"><span class="c14">&#39;G&#39;
is
global,</span></p>
            <p class="c2"><span class="c14">&#39;X&#39;
is global
library</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">type</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">char</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Type
defines whether it is
a:</span></p>
            <p class="c2"><span class="c14">&#39;A&#39;
relocatable
address,</span></p>
            <p class="c2"><span class="c14">&#39;C&#39;
a
constant</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">value</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">32-bit</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Value
of the symbol in 32 bit, relative to the start of the code block for
type
&#39;A&#39;.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">length</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">byte</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Defines
length byte of the following
string.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">name</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">length, chars</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Name
of the
symbol.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">...</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">...</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">...</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">Library
Name Declaration
section</span></p>
            <p class="c2"><span class="c14">Defines
all the library reference
names.</span></p>
            <p class="c2"><span class="c14">The
start of the Library Name Declaration section is pointed by the address
at location 22 in the object
file.</span></p>
            <p class="c2"><span class="c14">The
end of the section is marked by the Module Name
pointer.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">name</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">length, chars</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Name
of the
symbol.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">...</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">...</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">...</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c32">Module
Name
section</span></p>
            <p class="c2"><span class="c14">Defines
the module
name.</span></p>
            <p class="c2"><span class="c14">The
start of the Module Name Section is pointed by the address at location
10 of the object
file.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">name</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">length, chars</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Name
of the
module.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c32">Machine
Code
section</span><span class="c14"><br />Contains
the binary image of the compiled
code.</span></p>
            <p class="c2"><span class="c14">The
start of the Machine Code Section is pointed by the address at location
26 of the object
file.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">length</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">16-bit</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Total
length of the following machine code block, 0x0000 for a 64 KByte
block. A zero-length block is not stored in the file, i.e. the Machine Code
pointer in the header is set to
0xFFFFFFFF.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c15" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">block</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">length bytes</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Machine
code
block.</span></p>
          </td>
        </tr>
      </tbody>
    </table>
    <h2 class="c5"><a name="h.uewq46lrs47l"></a><span>9.2.
Library file format
documentation</span></h2>
    <p class="c11"><span>The library file format is a sequence of object files with additional
structures.</span></p>
    <p class="c1"><span></span></p><a href="#" name="ad1a5045ddfcba6a1cc771e3499115a56248635d"></a><a href="#" name="1"></a><table cellpadding="0" cellspacing="0" class="c29">
      <tbody>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">Addr</span></p>
          </td>
          <td class="c26" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">Object</span></p>
          </td>
          <td class="c19" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">Type</span></p>
          </td>
          <td class="c24" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">Description</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c26" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c19" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c24" colspan="1" rowspan="1">
            <p class="c2"><span class="c4">File header</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">0</span></p>
          </td>
          <td class="c26" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">&#39;Z80LMF01&#39;</span></p>
          </td>
          <td class="c19" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">8 chars</span></p>
          </td>
          <td class="c24" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">File
type
identifier</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c26" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c19" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c24" colspan="1" rowspan="1">
            <p class="c2"><span class="c32">Object
Modules
section</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">next
object
file</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">32-bit</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">File
pointer to the next object file, 0xFFFFFFFF if the current Object File
Block is the last in the library
file.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">object
file
length</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">32-bit</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">Length
of the Object
File.</span></p>
            <p class="c2"><span class="c14">If
this integer is 0 then it is indicated that the current &lt;Object File
Block&gt; has been marked &quot;deleted&quot; and will not be
used.</span></p>
          </td>
        </tr>
        <tr class="c13">
          <td class="c7" colspan="1" rowspan="1">
            <p class="c2 c16"><span class="c14"></span></p>
          </td>
          <td class="c8" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">object file</span></p>
          </td>
          <td class="c10" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">length bytes</span></p>
          </td>
          <td class="c6" colspan="1" rowspan="1">
            <p class="c2"><span class="c14">&#39;Z80RMF01&#39;
Object
File</span></p>
          </td>
        </tr>
      </tbody>
    </table>
    <p class="c1"><span></span></p>
    <p class="c1"><span></span></p>
    <p class="c1"><span></span></p>
    <p class="c5 title"><a name="h.p5302cx8skag"></a><span>Index</span></p>
    <ol>
      <p class="c12 c25"><span class="c9"><a class="c17" href="#h.nblzgdx05sk0">1.
Running the
assembler</a></span></p>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.crpe8o2twn1u">1.1.
Help
page</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.6a5vx7yssbrc">1.2.
Command
line</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.6jhvkanjxlnu">1.3.
Command line
options</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.s5tztgh7fg8j">1.3.1.
-h : Show help
screen</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.v7z21rlb4j1d">1.3.2.
-v : Information during
assembly</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.nbnhjst6d2qf">1.3.3.
-e&lt;ext&gt; : Use alternative source file
extension</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.4ioovbjvm21o">1.3.4.
-M&lt;ext&gt; : Use alternative object file
extension</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.1yzf339nds5k">1.3.5.
-l : Create listing file
output</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.70cgur7d2zd7">1.3.6.
-s : Create symbol
table</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.29o5gddebjt9">1.3.7.
-d : Assemble only updated
files</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.v4e84bggbexn">1.3.8.
-b : Link/relocate object
files</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.mzx5k6oxpmx4">1.3.9.
-a : Combine -d and
-b</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.saq7f3fibsmm">1.3.10.
-o&lt;binary-filename&gt; : Binary
filename</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.pxflnpjqoh1o">1.3.11.
-m : Create address map information
file</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.528tfsa661pk">1.3.12.
-r&lt;hex-address&gt; : Re-define the ORG relocation
address</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.iu4f3lcroz5f">1.3.13.
-R : Generate address independent
code</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.gehxzpj4qdmy">1.3.14.
-g : Create global address definition
file</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.ib1nqk3blyck">1.3.15.
-D&lt;symbol&gt; : Define a static
symbol</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.xxzi68l1k43o">1.3.16.
Using a project
file</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.q7sm22qjs0u3">1.3.17. -i&lt;library-file&gt; : Include library modules during
linking/relocation</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.6u48pt7r54nw">1.3.18.
-L&lt;library-path&gt; : Add directory to search path for
libraries</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.n4w86prnajx9">1.3.19.
-I&lt;include-path&gt; : Add directory to search path for
INCLUDE</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.jsz6obku74ei">1.3.20.
-x : Create a
library</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.1av6s8a1zezg">1.3.21.
-t&lt;number&gt; : Define tabulator distance for text output
files</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.2zbbrbsmnyjy">1.3.22.
-RCMX000 : Support the RCM2000/RCM3000 series of Z80-like
CPU&#39;s</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.yy7y9ciebg4h">1.3.23.
-plus : Support for the
Ti83Plus</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.egoxj76v4nki">1.3.24.
-IXIY : Swap IX and IY
registers</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.kiildarbmqef">1.3.25.
-C : Enable LINE
directive</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.upws0lyqf8pl">1.3.26.
-sdcc : Force SDCC
hacks</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <p class="c12 c25"><span class="c9"><a class="c17" href="#h.3umrs9snh1co">2.
An overview of assembler features and related
files</a></span></p>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.a2s7jo9gcmdq">2.1.
The Z88 operating system definition
files</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.xvwf5ybvvypi">2.2.
The supplied standard library Z80 source
files</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.5j5ndp1hga75">2.3.
Z88 module assembler application
source</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.inybfi2z6mw3">2.4.
File based
compilation</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.eviyl6gjjtba">2.5.
Modular source file
design</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.4mill9y2cbvj">2.6.
Scope of symbols in source
modules</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.n3q881h4cf6n">2.7.
Using arithmetic and relational
expressions</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.mr1x5aj5mhxo">2.8.
Source file
manipulation</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.c1f65mnc8lz4">2.9.
Free format of assembler source
files</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.fwjzz4fygwti">2.10.
Specification of
filenames</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.db2bpy442fvg">2.11.
Including other source files into the current source
file</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.2b7q9g7t1ax4">2.12.
Conditional assembly in source file
modules</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.ui65mahv0k2h">2.13.
Undocumented Z80 instruction code
generation</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.i6i61v1gjyox">2.14.
Object file
generation</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.ju5f1jdtem6w">2.15.
Transfer of object files across
platforms</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.erldj58fwpyv">2.16.
Date stamp controlled
assembly</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.ng4rnga3c2d0">2.17.
Listing
files</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.c97jvxbx22k1">2.18.
Symbol
information</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.5oboon5f02ik">2.19. Linking and relocation of object modules into executable Z80 machine
code</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.ultmv8a8jgpa">2.20.
Address map
files</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.gl3hn0i4xb4v">2.21.
Symbol address definition
files</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.k27ltxv88h49">2.22.
Error
files</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.1phwi8kvdkry">2.23.
Creating and using object file libraries for standard
routines</a></span></p>
      </ol>
    </ol>
    <ol>
      <p class="c12 c25"><span class="c9"><a class="c17" href="#h.447fa65coun7">3.
Executing the cross assembler and environment
variables</a></span></p>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.m6gnkj30ac04">3.1.
The environment
variables</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.fe31lehg6w97">3.2.
Running in the QDOS/SMSQ operating system
environment</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.x389814ok1yl">3.3.
Running in the LINUX/UNIX operating system
environment</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.7ycz2evnb63s">3.4.
Running in the MS-DOS operating system
environment</a></span></p>
      </ol>
    </ol>
    <ol>
      <p class="c12 c25"><span class="c9"><a class="c17" href="#h.ehp52383w0ya">4.
Z80 module assembler file
types</a></span></p>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.c1u9tjfrkqay">4.1.
The assembler file types and their extension
names</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.fz8xa55541k">4.2.
The file name extension
identifier</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.5m7ybz2ihanb">4.3.
File
types</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.jwk6k39z5thq">4.3.1.
The source file extension,
asm</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.bw2vmsfwk0ua">4.3.2.
The object file extension,
obj</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.c3c65wiej5q9">4.3.3.
The error file extension,
err</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.gwkabq31ppju">4.3.4.
The listing file extension,
lst</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.dekpoklgwora">4.3.5.
The symbol file extension,
sym</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.qnko781h7yac">4.3.6.
The executable file extension,
bin</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.45woq2agv66b">4.3.7.
The address map file extension,
map</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.gqxxr95mrlos">4.3.8.
The definition file extension,
def</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.wdsvnid6pvox">4.3.9.
The library file extension,
lib</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <p class="c12 c25"><span class="c9"><a class="c17" href="#h.3jjuyl7czx2g">5.
Compiling
files</a></span></p>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.isayw4i0p8g7">5.1.
The assembler compiling
process</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.woqp15lzajuj">5.1.1.
Stage 1, parsing and code generation of all source files, object
file
generation</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <ol>
          <p class="c12 c21"><span class="c9"><a class="c17" href="#h.87oxwi2g7rnc">5.1.2.
Stage 2, linking object files and library modules, producing
executable
code</a></span></p>
        </ol>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.4v3j3by4jwo9">5.2.
File
names</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.25a86shd3q1j">5.3.
Portability of assembler file
names</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.y40ejfsu7km6">5.4.
Source file
structure</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.7ej82gr5szno">5.5.
Using local, global and external
symbols</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.c8kmcwdcbzjk">5.6.
Defining symbol
names</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.11cduqdhathy">5.7.
Comments in source
files</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.1kupa3az4yj4">5.8.
Defining symbolic address
labels</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.5pz5r66n5t2n">5.9.
Writing Z80 mnemonic
instructions</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.6t1m0r83wkj6">5.10.
Optional Z80 mnemonic instruction
syntax</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.8wmx9e3cwi36">5.11.
The undocumented Z80
instructions</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.9rs3qreolshh">5.12.
Referencing library
routines</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.oqexip51e4al">5.13.
Creating/updating
libraries</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.oi6sz44rjrd0">5.14.
Referencing routines in other compiled
projects</a></span></p>
      </ol>
    </ol>
    <ol>
      <p class="c12 c25"><span class="c9"><a class="c17" href="#h.eyw8eca5z285">6.
Using
expressions</a></span></p>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.dimnxtynioy4">6.1.
Constant
identifiers</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.5w9drlq6blj">6.2.
Arithmetic
operators</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.szz12pf2xofk">6.3.
The #
operator</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.1ba25ag84b0r">6.4.
Relational
operators</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.g1h4ba236pcy">6.5.
The ASMPC standard
function</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.1tfp5kbzlgzs">6.6.
Symbol identifiers in
expressions</a></span></p>
      </ol>
    </ol>
    <ol>
      <p class="c12 c25"><span class="c9"><a class="c17" href="#h.qmk5qen438yg">7.
Directive
reference</a></span></p>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.mq473vd5qz34">7.1.
BINARY
&quot;filename&quot;</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.zabuhxjk4eqg">7.2.
CALL_OZ
&lt;expression&gt;</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.8fpgkb9grs40">7.3.
DEFB &lt;8-bit expr&gt;,{&lt;8-bit expr&gt;} (-128;
255)</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.n2xbbc5klom4">7.4.
DEFW &lt;16-bit expr&gt;,{&lt;16-bit expr&gt;} (-32768;
65535)</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.4mdm9gll1plc">7.5.
DEFL &lt;32-bit expr&gt;,{&lt;32-bit expr&gt;} (-2147483647;
4294967295)</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.rkq3wci0ccw1">7.6.
DEFC name=&lt;32-bit expression&gt;{, name=&lt;32-bit
expression&gt;}</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.8p88z5mbatvk">7.7.
DEFM &lt;string expression&gt;|&lt;8-bit
expr&gt;,...</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.bo91vxv3aqu3">7.8.
DEFGROUP &#39;{&#39; name {&#39;,&#39; name [&#39;=&#39; &lt;8-bit expression&gt;]}
&#39;}&#39;</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.nitfi095mns7">7.9.
DEFINE
name,{name}</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.xunoyuyqioo9">7.10.
DEFS &lt;size&gt;{,
&lt;fill-byte&gt;}</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.2dqvfslknaeb">7.11.
DEFVARS &lt;16-bit expression&gt; &#39;{&#39; [&lt;name&gt;] [&lt;storage_size&gt;
&lt;size_multiplier&gt;]
&#39;}&#39;</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.9flu7sdakizm">7.12.
FPP &lt;8-bit
expression&gt;</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.73codxcq7dr1">7.13.
IF &lt;logical expression&gt; ... [ELSE] ...
ENDIF</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.p5117478te7x">7.14.
IFDEF &lt;name&gt; ... [ELSE] ...
ENDIF</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.14d7pmtp8s4g">7.15.
IFNDEF &lt;name&gt; ... [ELSE] ...
ENDIF</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.v7gg3d1kbuaq">7.16.
INCLUDE
&quot;filename&quot;</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.5hqbg26aig9l">7.17.
INVOKE &lt;16-bit
expression&gt;</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.ts9rwxp4q5rg">7.18.
LIB name
{,name}</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.a4gdlft34f3c">7.19.
LINE &lt;32-bit
expr&gt;</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.uk1f5i6da3pq">7.20. LSTOFF</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.iiev2h5o2pkg">7.21. LSTON</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.2mnjmb3noxbp">7.22.
MODULE
name</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.7c4c8849z6tr">7.23.
ORG &lt;16-bit
expression&gt;</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.h6yit64gwr1u">7.24.
XDEF name {,
name}</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.u3l5yyicd03">7.25.
XLIB
name</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.e7p0qdhnngio">7.26.
XREF name {,
name}</a></span></p>
      </ol>
    </ol>
    <ol>
      <p class="c12 c25"><span class="c9"><a class="c17" href="#h.c79iahkre1ai">8.
Run time error
messages</a></span></p>
    </ol>
    <ol>
      <p class="c12 c25"><span class="c9"><a class="c17" href="#h.stlz0oo2whj">9.
File
formats</a></span></p>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.cam2d04a2q1n">9.1.
Object file format
documentation</a></span></p>
      </ol>
    </ol>
    <ol>
      <ol>
        <p class="c3"><span class="c9"><a class="c17" href="#h.uewq46lrs47l">9.2.
Library file format
documentation</a></span></p>
      </ol>
    </ol>
    <p class="c1"><span></span></p>
    <p class="c1 c18"><span></span></p>
  </body>
</html>